diff --git a/assets/dist/build-manifest.json b/assets/dist/build-manifest.json index 1e76118abc6..41b64276522 100644 --- a/assets/dist/build-manifest.json +++ b/assets/dist/build-manifest.json @@ -1,38 +1,38 @@ { - "ee-wp-plugins-page.css": "ee-wp-plugins-page.bff04b6b9d88e9edd2bb.dist.css", - "ee-wp-plugins-page.js": "ee-wp-plugins-page.fef7b70da072697c09d7.dist.js", - "ee-wp-plugins-page.json": "ee-wp-plugins-page.fef7b70da072697c09d7.dist.deps.json", + "ee-wp-plugins-page.css": "ee-wp-plugins-page.0a1a11dc2fef149beb36.dist.css", + "ee-wp-plugins-page.js": "ee-wp-plugins-page.b2eade19779a4dabfee9.dist.js", + "ee-wp-plugins-page.json": "ee-wp-plugins-page.b2eade19779a4dabfee9.dist.deps.json", "eejs-core.js": "eejs-core.7850a6d9398c50d79ab8.dist.js", "eejs-core.json": "eejs-core.7850a6d9398c50d79ab8.dist.deps.json", - "eventespresso-components.css": "eventespresso-components.2a25eee7701c006d3f37.dist.css", - "eventespresso-components.js": "eventespresso-components.a397e3431e9283d42884.dist.js", - "eventespresso-components.json": "eventespresso-components.a397e3431e9283d42884.dist.deps.json", + "eventespresso-components.css": "eventespresso-components.65580d0d8c5c32e69cfa.dist.css", + "eventespresso-components.js": "eventespresso-components.332c68cccdbd210d4667.dist.js", + "eventespresso-components.json": "eventespresso-components.332c68cccdbd210d4667.dist.deps.json", "eventespresso-core-blocks-frontend.css": "eventespresso-core-blocks-frontend.30e4ea23d2adb992ff77.dist.css", "eventespresso-core-blocks-frontend.js": "eventespresso-core-blocks-frontend.c3b86736850a862ef904.dist.js", "eventespresso-core-blocks-frontend.json": "eventespresso-core-blocks-frontend.c3b86736850a862ef904.dist.deps.json", "eventespresso-core-blocks.css": "eventespresso-core-blocks.30e4ea23d2adb992ff77.dist.css", "eventespresso-core-blocks.js": "eventespresso-core-blocks.fec4c6c5c8f2e4bba7aa.dist.js", "eventespresso-core-blocks.json": "eventespresso-core-blocks.fec4c6c5c8f2e4bba7aa.dist.deps.json", - "eventespresso-core-css-default.css": "eventespresso-core-css-default.37cc630a3d6f4c1d429c.dist.css", - "eventespresso-core-css-default.js": "eventespresso-core-css-default.a321df69280775fcbca5.dist.js", - "eventespresso-core-css-default.json": "eventespresso-core-css-default.a321df69280775fcbca5.dist.deps.json", - "eventespresso-data-stores.js": "eventespresso-data-stores.c14db32eb18a7b1a62c5.dist.js", - "eventespresso-data-stores.json": "eventespresso-data-stores.c14db32eb18a7b1a62c5.dist.deps.json", + "eventespresso-core-css-default.css": "eventespresso-core-css-default.9b2be35b76a601d433dc.dist.css", + "eventespresso-core-css-default.js": "eventespresso-core-css-default.5900e7e854f5e16f35dc.dist.js", + "eventespresso-core-css-default.json": "eventespresso-core-css-default.5900e7e854f5e16f35dc.dist.deps.json", + "eventespresso-data-stores.js": "eventespresso-data-stores.fbd950f7e377f1cb31ef.dist.js", + "eventespresso-data-stores.json": "eventespresso-data-stores.fbd950f7e377f1cb31ef.dist.deps.json", "eventespresso-editor-hocs.css": "eventespresso-editor-hocs.9034b1f7b7460631a97c.dist.css", "eventespresso-editor-hocs.js": "eventespresso-editor-hocs.84418759c6dc24b4871c.dist.js", "eventespresso-editor-hocs.json": "eventespresso-editor-hocs.84418759c6dc24b4871c.dist.deps.json", - "eventespresso-editor.css": "eventespresso-editor.ea844dfc2e21ea4396ef.dist.css", - "eventespresso-editor.js": "eventespresso-editor.1eddf04782eb9ccfd2ce.dist.js", - "eventespresso-editor.json": "eventespresso-editor.1eddf04782eb9ccfd2ce.dist.deps.json", + "eventespresso-editor.css": "eventespresso-editor.ac44fb7dd7004be16905.dist.css", + "eventespresso-editor.js": "eventespresso-editor.5a703f12f809dacbf49c.dist.js", + "eventespresso-editor.json": "eventespresso-editor.5a703f12f809dacbf49c.dist.deps.json", "eventespresso-helpers.js": "eventespresso-helpers.b86e4ee65beead3a561e.dist.js", "eventespresso-helpers.json": "eventespresso-helpers.b86e4ee65beead3a561e.dist.deps.json", - "eventespresso-hocs.css": "eventespresso-hocs.98b168389377d411b1bd.dist.css", - "eventespresso-hocs.js": "eventespresso-hocs.9fc63293a71bdd9da4e1.dist.js", - "eventespresso-hocs.json": "eventespresso-hocs.9fc63293a71bdd9da4e1.dist.deps.json", + "eventespresso-hocs.css": "eventespresso-hocs.0920a94a8a19d35a9f4e.dist.css", + "eventespresso-hocs.js": "eventespresso-hocs.27ddcb22082639d95dfd.dist.js", + "eventespresso-hocs.json": "eventespresso-hocs.27ddcb22082639d95dfd.dist.deps.json", "eventespresso-hooks.js": "eventespresso-hooks.6adae945fca3551b3e03.dist.js", "eventespresso-hooks.json": "eventespresso-hooks.6adae945fca3551b3e03.dist.deps.json", - "eventespresso-model.js": "eventespresso-model.f01901513a4780059954.dist.js", - "eventespresso-model.json": "eventespresso-model.f01901513a4780059954.dist.deps.json", + "eventespresso-model.js": "eventespresso-model.805714d693ee7340e4b0.dist.js", + "eventespresso-model.json": "eventespresso-model.805714d693ee7340e4b0.dist.deps.json", "eventespresso-validators.js": "eventespresso-validators.61bda3a6e3db9309244e.dist.js", "eventespresso-validators.json": "eventespresso-validators.61bda3a6e3db9309244e.dist.deps.json", "eventespresso-value-objects.js": "eventespresso-value-objects.32ecc8f8e155078f94c1.dist.js", diff --git a/assets/dist/ee-wp-plugins-page.bff04b6b9d88e9edd2bb.dist.css b/assets/dist/ee-wp-plugins-page.0a1a11dc2fef149beb36.dist.css similarity index 88% rename from assets/dist/ee-wp-plugins-page.bff04b6b9d88e9edd2bb.dist.css rename to assets/dist/ee-wp-plugins-page.0a1a11dc2fef149beb36.dist.css index 399ac98e3eb..e3edbbc79cb 100644 --- a/assets/dist/ee-wp-plugins-page.bff04b6b9d88e9edd2bb.dist.css +++ b/assets/dist/ee-wp-plugins-page.0a1a11dc2fef149beb36.dist.css @@ -1,4 +1,4 @@ .ee-cancel-prompt-button{float:right}.exit-modal-choices .button{margin-left:5px} .ee-upsell-container{padding:20px}.ee-upsell-inner-container{float:left;display:inline-block;margin-right:10px} -/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2V4aXQtbW9kYWwtc3VydmV5L3N0eWxlLmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL3dwLXBsdWdpbnMtcGFnZS9zdHlsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUJBQXlCLFlBQVksNEJBQTRCLGdCO0FDQWpFLHFCQUFxQixhQUFhLDJCQUEyQixXQUFXLHFCQUFxQixrQiIsImZpbGUiOiJlZS13cC1wbHVnaW5zLXBhZ2UuYmZmMDRiNmI5ZDg4ZTllZGQyYmIuZGlzdC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZWUtY2FuY2VsLXByb21wdC1idXR0b257ZmxvYXQ6cmlnaHR9LmV4aXQtbW9kYWwtY2hvaWNlcyAuYnV0dG9ue21hcmdpbi1sZWZ0OjVweH0iLCIuZWUtdXBzZWxsLWNvbnRhaW5lcntwYWRkaW5nOjIwcHh9LmVlLXVwc2VsbC1pbm5lci1jb250YWluZXJ7ZmxvYXQ6bGVmdDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTBweH0iXSwic291cmNlUm9vdCI6IiJ9*/ \ No newline at end of file +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2V4aXQtbW9kYWwtc3VydmV5L3N0eWxlLmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL3dwLXBsdWdpbnMtcGFnZS9zdHlsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUJBQXlCLFlBQVksNEJBQTRCLGdCO0FDQWpFLHFCQUFxQixhQUFhLDJCQUEyQixXQUFXLHFCQUFxQixrQiIsImZpbGUiOiJlZS13cC1wbHVnaW5zLXBhZ2UuMGExYTExZGMyZmVmMTQ5YmViMzYuZGlzdC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZWUtY2FuY2VsLXByb21wdC1idXR0b257ZmxvYXQ6cmlnaHR9LmV4aXQtbW9kYWwtY2hvaWNlcyAuYnV0dG9ue21hcmdpbi1sZWZ0OjVweH0iLCIuZWUtdXBzZWxsLWNvbnRhaW5lcntwYWRkaW5nOjIwcHh9LmVlLXVwc2VsbC1pbm5lci1jb250YWluZXJ7ZmxvYXQ6bGVmdDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTBweH0iXSwic291cmNlUm9vdCI6IiJ9*/ \ No newline at end of file diff --git a/assets/dist/ee-wp-plugins-page.fef7b70da072697c09d7.dist.deps.json b/assets/dist/ee-wp-plugins-page.b2eade19779a4dabfee9.dist.deps.json similarity index 100% rename from assets/dist/ee-wp-plugins-page.fef7b70da072697c09d7.dist.deps.json rename to assets/dist/ee-wp-plugins-page.b2eade19779a4dabfee9.dist.deps.json diff --git a/assets/dist/ee-wp-plugins-page.fef7b70da072697c09d7.dist.js b/assets/dist/ee-wp-plugins-page.b2eade19779a4dabfee9.dist.js similarity index 99% rename from assets/dist/ee-wp-plugins-page.fef7b70da072697c09d7.dist.js rename to assets/dist/ee-wp-plugins-page.b2eade19779a4dabfee9.dist.js index d7bdf8c9ddb..5ab77fc1d2d 100644 --- a/assets/dist/ee-wp-plugins-page.fef7b70da072697c09d7.dist.js +++ b/assets/dist/ee-wp-plugins-page.b2eade19779a4dabfee9.dist.js @@ -23630,4 +23630,4 @@ module.exports = __webpack_require__(/*! ./assets/src/wp-plugins-page/index.js * /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9leGl0LW1vZGFsLXN1cnZleS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2V4aXQtbW9kYWwtc3VydmV5L3N0eWxlLmNzcz8yZGUzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvd3AtcGx1Z2lucy1wYWdlL2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvd3AtcGx1Z2lucy1wYWdlL3N0eWxlLmNzcz80NmYwIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZXZlbnRlc3ByZXNzby9yZWFjdC1leGl0LW1vZGFsLXR5cGVmb3JtL2J1aWxkLW1vZHVsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGV2ZW50ZXNwcmVzc28vcmVhY3QtZXhpdC1tb2RhbC10eXBlZm9ybS9idWlsZC1tb2R1bGUvbW9kYWwvYnV0dG9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZXZlbnRlc3ByZXNzby9yZWFjdC1leGl0LW1vZGFsLXR5cGVmb3JtL2J1aWxkLW1vZHVsZS9tb2RhbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGV2ZW50ZXNwcmVzc28vcmVhY3QtZXhpdC1tb2RhbC10eXBlZm9ybS9idWlsZC1tb2R1bGUvbW9kYWwvb3B0aW9uc3ZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BldmVudGVzcHJlc3NvL3JlYWN0LWV4aXQtbW9kYWwtdHlwZWZvcm0vYnVpbGQtbW9kdWxlL21vZGFsL3R5cGVGb3JtRW1iZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0eXBlZm9ybS9lbWJlZC9saWIvYXBpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1wcm90by5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MtZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2V4ZW52L2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWxpZmVjeWNsZXMtY29tcGF0L3JlYWN0LWxpZmVjeWNsZXMtY29tcGF0LmVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1tb2RhbC9saWIvY29tcG9uZW50cy9Nb2RhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtbW9kYWwvbGliL2NvbXBvbmVudHMvTW9kYWxQb3J0YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL2FyaWFBcHBIaWRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtbW9kYWwvbGliL2hlbHBlcnMvY2xhc3NMaXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1tb2RhbC9saWIvaGVscGVycy9mb2N1c01hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL3NhZmVIVE1MRWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtbW9kYWwvbGliL2hlbHBlcnMvc2NvcGVUYWIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL3RhYmJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1tb2RhbC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL25vZGVfbW9kdWxlcy93YXJuaW5nL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCJdfSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImkxOG5cIl19Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImVsZW1lbnRcIl19Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwidmVuZG9yXCIsXCJjbGFzc25hbWVzXCJdfSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOlwialF1ZXJ5XCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6XCJSZWFjdFwifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOlwiUmVhY3RET01cIn0iXSwibmFtZXMiOlsiZGF0YSIsImV4aXRNb2RhbEluZm8iLCJpbmZvIiwicXVlcnlTdHJpbmciLCJzdHJpbmdpZnkiLCJmaXJzdG5hbWUiLCJlbWFpbGFkZHJlc3MiLCJ3ZWJzaXRlIiwibW9kYWxQcm9wcyIsInN0eWxlcyIsImNvbnRlbnQiLCJkaXNwbGF5IiwidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0IiwiV2Via2l0VHJhbnNmb3JtIiwidHJhbnNmb3JtIiwidHlwZUZvcm1TdHlsZSIsIndpZHRoIiwiaGVpZ2h0IiwidHlwZUZvcm1VcmwiLCJpbnRyb1RleHQiLCJfXyIsImRvU3VydmV5QnV0dG9uVGV4dCIsInNraXBCdXR0b25UZXh0IiwiYnV0dG9uQ2xhc3MiLCJkb1N1cnZleSIsImNsb3NlTW9kYWwiLCJoYW5kbGVEZWFjdGl2YXRpb25DbGljayIsImUiLCJlbCIsInByZXZlbnREZWZhdWx0IiwibGluayIsIiQiLCJhdHRyIiwiYXBwQ29udGFpbmVyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsIlJlYWN0TW9kYWwiLCJzZXRBcHBFbGVtZW50IiwibW9kYWxDb250YWluZXIiLCJSZWFjdERPTSIsInJlbmRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJDTE9TRV9NT0RBTF9FVkVOVCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsIm9uY2UiLCJpc01vZGFsQWN0aXZlIiwib24iLCJsZW5ndGgiLCJhZGRDbGFzcyJdLCJtYXBwaW5n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STtBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlFQUFpRSxpQkFBaUI7QUFDbEY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxhQUFhO0FBQ2hGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsNEJBQTRCO0FBQzVCLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFtQiwwQkFBMEIsRUFBRSxFQUFFO0FBQ2xFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsZ0NBQWdDO0FBQ3pGO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSw2RUFBNkUsWUFBWTtBQUN6RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCw2Q0FBNkMsRUFBRTs7QUFFeEc7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLG1EQUFtRDtBQUNuRDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLG9DQUFvQztBQUNwQztBQUNBLEtBQUs7QUFDTCx3RUFBd0U7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCw4REFBOEQ7QUFDOUQ7QUFDQSxLQUFLO0FBQ0wsd0VBQXdFO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCx5QkFBeUIsc0JBQXNCLEVBQUUsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixhQUFhO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwQkFBMEI7QUFDaEQsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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QUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtEQUFrRCxPQUFPO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlCQUF5QixPQUFPO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFVBQVU7QUFDeEM7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixVQUFVO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEIsT0FBTztBQUNqQztBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEIsVUFBVTs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkMsT0FBTztBQUNsRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsb0JBQW9CLE9BQU87QUFDM0IseUJBQXlCLE9BQU87QUFDaEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0VBQWtFLE9BQU87QUFDekUsK0NBQStDLFVBQVU7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsb0JBQW9CO0FBQ3BCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7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QUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7O0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsS0FBSyxrQkFBa0IsWUFBWSxrQkFBa0I7QUFDckQ7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEIsWUFBWTs7QUFFeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFO0FBQ2pFLCtCQUErQixFQUFF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R0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHNDQUFzQztBQUM5QztBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNa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QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIscUJBQXFCO0FBQ3JCLDBCQUEwQjtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtREFBbUQsZ0JBQWdCLHNCQUFzQixPQUFPLDJCQUEyQiwwQkFBMEIseURBQXlELDJCQUEyQixFQUFFLEVBQUUsRUFBRSxlQUFlOztBQUU5UDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwwRUFBMEUsOERBQThEO0FBQ3hJLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDOztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsNkJBQTZCO0FBQzdCLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixLQUFLO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsNEJBQTRCO0FBQzVCLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsc0JBQXNCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLDJCQUEyQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGdDQUFnQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsZ0NBQWdDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsTUFBTTtBQUNqQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFD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QU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxzQkFBc0I7QUFDdEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4QkFBOEIsNEJBQTRCOzs7QUFHMUQsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4QkFBOEIsc0NBQXNDOzs7QUFH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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QixjQUFjO0FBQ2Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNEJBQTRCLG1CQUFtQiw2QkFBNkIsRUFBRSxFQUFFOzs7QUFHaEYsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUMsMkJBQTJCLFVBQVUsRUFBRSxFQUFFO0FBQzVFLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDZCQUE2QixtQ0FBbUM7OztBQUdoRSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBFQUEwRSxrQkFBa0IsRUFBRTtBQUM5RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxnQ0FBZ0M7QUFDdkY7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtDQUFrQyxnQkFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxVQUFVO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFdBQVc7QUFDckI7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNkJBQTZCLHVDQUF1Qzs7QUFFcEU7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNkJBQTZCLGdDQUFnQzs7QUFFN0Q7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxnQkFBZ0IsRUFBRTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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S0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsbUVBQW1FO0FBQ2hHLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2RUFBNkUsNEJBQTRCOztBQUV6RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSw2RkFBNkY7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7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RzFDLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQywrREFBK0Q7QUFDekc7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsK0RBQStEO0FBQ3pHO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1Q0FB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ZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7O0FBR0gsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQSxDQUFDLEVBQUU7OztBQUdILE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRTs7O0FBR0gsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0E7QUFDQSxDQUFDLEVBQUU7OztBQUdILE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRTs7O0FBR0gsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFOzs7QUFHSCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRTs7O0FBR0gsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7OztBQUdILE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsa0JBQWtCO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCOztBQUU1QixPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscURBQXFEOztBQUVyRCw4QkFBOEIsOEJBQThCLGdCQUFnQixFQUFFLEVBQUU7OztBQUdoRixPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUCxZOzs7Ozs7Ozs7OztBQ3RvakJBLGtCQUFrQixZQUFZLG1CQUFPLENBQUMsdUhBQWtDLHNCOzs7Ozs7Ozs7OztBQ0F4RSxrQkFBa0IsWUFBWSxtQkFBTyxDQUFDLHlJQUEyQyxzQjs7Ozs7Ozs7Ozs7QUNBakYsa0JBQWtCLFlBQVksbUJBQU8sQ0FBQywySUFBNEMsc0I7Ozs7Ozs7Ozs7O0FDQWxGLGtCQUFrQixZQUFZLG1CQUFPLENBQUMsMklBQTRDLHNCOzs7Ozs7Ozs7OztBQ0FsRixrQkFBa0IsWUFBWSxtQkFBTyxDQUFDLCtHQUEyQixzQjs7Ozs7Ozs7Ozs7QUNBakUsa0JBQWtCLFlBQVksbUJBQU8sQ0FBQywySEFBb0Msc0I7Ozs7Ozs7Ozs7OztBQ0E3RDs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEU7Ozs7Ozs7Ozs7OztBQ1JhOztBQUViOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLHlHQUFtQzs7QUFFakU7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEc7Ozs7Ozs7Ozs7OztBQzFCWTs7QUFFYjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywyR0FBb0M7O0FBRWxFOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyx1RkFBMEI7O0FBRWhEOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx5RUFBbUI7O0FBRTFDOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEU7Ozs7Ozs7Ozs7OztBQ2hDYTs7QUFFYjs7QUFFQSxlQUFlLG1CQUFPLENBQUMseUVBQW1COztBQUUxQzs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFOzs7Ozs7Ozs7Ozs7QUNoQmE7O0FBRWI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsMkZBQTRCOztBQUVwRDs7QUFFQSxjQUFjLG1CQUFPLENBQUMseUVBQW1COztBQUV6Qzs7QUFFQSxpSEFBaUgsbUJBQW1CLEVBQUUsbUJBQW1CLDRKQUE0Sjs7QUFFclQsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxFOzs7Ozs7Ozs7OztBQ3BCQSxtQkFBTyxDQUFDLCtIQUFpQztBQUN6QyxjQUFjLG1CQUFPLENBQUMsdUdBQXFCO0FBQzNDO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDSkEsbUJBQU8sQ0FBQyxpSkFBMEM7QUFDbEQsY0FBYyxtQkFBTyxDQUFDLHVHQUFxQjtBQUMzQztBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ0pBLG1CQUFPLENBQUMsbUpBQTJDO0FBQ25ELGlCQUFpQixtQkFBTyxDQUFDLHVHQUFxQjs7Ozs7Ozs7Ozs7O0FDRDlDLG1CQUFPLENBQUMsbUpBQTJDO0FBQ25ELGlCQUFpQixtQkFBTyxDQUFDLHVHQUFxQjs7Ozs7Ozs7Ozs7O0FDRDlDLG1CQUFPLENBQUMsaUhBQTBCO0FBQ2xDLG1CQUFPLENBQUMscUlBQW9DO0FBQzVDLG1CQUFPLENBQUMsK0lBQXlDO0FBQ2pELG1CQUFPLENBQUMsdUlBQXFDO0FBQzdDLGlCQUFpQixtQkFBTyxDQUFDLHVHQUFxQjs7Ozs7Ozs7Ozs7O0FDSjlDLG1CQUFPLENBQUMsbUlBQW1DO0FBQzNDLG1CQUFPLENBQUMsNkhBQWdDO0FBQ3hDLGlCQUFpQixtQkFBTyxDQUFDLDZHQUF3Qjs7Ozs7Ozs7Ozs7O0FDRmpEO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNIQSw4QkFBOEI7Ozs7Ozs7Ozs7OztBQ0E5QixlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ0pBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyx1R0FBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMscUhBQXNCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZLGVBQWU7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7Ozs7Ozs7Ozs7O0FDdEJBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNKQSw2QkFBNkI7QUFDN0IsdUNBQXVDOzs7Ozs7Ozs7Ozs7QUNEdkM7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyx1R0FBZTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNKQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDZGQUFVO0FBQ3BDLGlDQUFpQyxRQUFRLG1CQUFtQixVQUFVLEVBQUUsRUFBRTtBQUMxRSxDQUFDOzs7Ozs7Ozs7Ozs7QUNIRCxlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLCtGQUFXO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ05BO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNIQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLHlHQUFnQjtBQUNuQyxVQUFVLG1CQUFPLENBQUMsdUdBQWU7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7Ozs7Ozs7Ozs7QUNkQSxhQUFhLG1CQUFPLENBQUMsK0ZBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLDJGQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQixXQUFXLG1CQUFPLENBQUMsMkZBQVM7QUFDNUIsVUFBVSxtQkFBTyxDQUFDLHlGQUFRO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFO0FBQ2pFO0FBQ0Esa0ZBQWtGO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGdCQUFnQjtBQUNoQjs7Ozs7Ozs7Ozs7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7Ozs7Ozs7Ozs7OztBQ0x6Qyx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNIQSxTQUFTLG1CQUFPLENBQUMscUdBQWM7QUFDL0IsaUJBQWlCLG1CQUFPLENBQUMsNkdBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLHlHQUFnQjtBQUN6QztBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ1BBLGVBQWUsbUJBQU8sQ0FBQywrRkFBVztBQUNsQzs7Ozs7Ozs7Ozs7O0FDREEsa0JBQWtCLG1CQUFPLENBQUMseUdBQWdCLE1BQU0sbUJBQU8sQ0FBQyw2RkFBVTtBQUNsRSwrQkFBK0IsbUJBQU8sQ0FBQyx1R0FBZSxnQkFBZ0IsbUJBQW1CLFVBQVUsRUFBRSxFQUFFO0FBQ3ZHLENBQUM7Ozs7Ozs7Ozs7OztBQ0ZEO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLHlGQUFRO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNMQTtBQUNBLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQjtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ0pBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ0ZhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLDZHQUFrQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyw2R0FBa0I7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMscUhBQXNCO0FBQ25EOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQywyRkFBUyxxQkFBcUIsbUJBQU8sQ0FBQyx5RkFBUSw0QkFBNEIsYUFBYSxFQUFFOztBQUVqRztBQUNBLHFEQUFxRCw0QkFBNEI7QUFDakY7QUFDQTs7Ozs7Ozs7Ozs7OztBQ1phO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLGlHQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQywrRkFBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsbUdBQWE7QUFDcEMsV0FBVyxtQkFBTyxDQUFDLDJGQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLHFHQUFjO0FBQ3RDLGtCQUFrQixtQkFBTyxDQUFDLHlHQUFnQjtBQUMxQyxxQkFBcUIsbUJBQU8sQ0FBQyxxSEFBc0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsdUdBQWU7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLHlGQUFRO0FBQy9CLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7O0FBRUEsOEJBQThCLGFBQWE7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsb0NBQW9DO0FBQzdFLDZDQUE2QyxvQ0FBb0M7QUFDakYsS0FBSyw0QkFBNEIsb0NBQW9DO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQSxrQ0FBa0MsMkJBQTJCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDcEVBO0FBQ0EsVUFBVTtBQUNWOzs7Ozs7Ozs7Ozs7QUNGQTs7Ozs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7OztBQ0FBLFdBQVcsbUJBQU8sQ0FBQyx5RkFBUTtBQUMzQixlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLHlGQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxxR0FBYztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyw2RkFBVTtBQUNoQyxpREFBaUQ7QUFDakQsQ0FBQztBQUNEO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsU0FBUztBQUNULEdBQUcsRUFBRTtBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDcERBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLHFHQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyx1R0FBZTtBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyw2R0FBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLHVHQUFlO0FBQ3RDLHlCQUF5QjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFPLENBQUMsdUdBQWU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsbUJBQU8sQ0FBQywyRkFBUztBQUNuQiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7Ozs7Ozs7Ozs7QUN4Q0EsZUFBZSxtQkFBTyxDQUFDLHFHQUFjO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLCtHQUFtQjtBQUNoRCxrQkFBa0IsbUJBQU8sQ0FBQywyR0FBaUI7QUFDM0M7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHlHQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2ZBLFNBQVMsbUJBQU8sQ0FBQyxxR0FBYztBQUMvQixlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLHlHQUFnQjs7QUFFdEMsaUJBQWlCLG1CQUFPLENBQUMseUdBQWdCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ1pBLFVBQVUsbUJBQU8sQ0FBQyx1R0FBZTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyw2R0FBa0I7QUFDM0MsZ0JBQWdCLG1CQUFPLENBQUMsdUdBQWU7QUFDdkMsa0JBQWtCLG1CQUFPLENBQUMsMkdBQWlCO0FBQzNDLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQixxQkFBcUIsbUJBQU8sQ0FBQywrR0FBbUI7QUFDaEQ7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHlHQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2ZBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsdUdBQWU7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLHlHQUFnQjtBQUNuQyxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2xCQTtBQUNBLFlBQVksbUJBQU8sQ0FBQywySEFBeUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsNkdBQWtCOztBQUUzQztBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ05BOzs7Ozs7Ozs7Ozs7QUNBQTtBQUNBLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQixlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLHVHQUFlO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7Ozs7Ozs7Ozs7OztBQ1pBLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyx1R0FBZTtBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQywrR0FBbUI7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLHVHQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2hCQTtBQUNBLFlBQVksbUJBQU8sQ0FBQywySEFBeUI7QUFDN0Msa0JBQWtCLG1CQUFPLENBQUMsNkdBQWtCOztBQUU1QztBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ05BLGNBQWM7Ozs7Ozs7Ozs7OztBQ0FkO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLCtGQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQywyRkFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsNkZBQVU7QUFDOUI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHFEQUFxRCxPQUFPLEVBQUU7QUFDOUQ7Ozs7Ozs7Ozs7OztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ1BBLGlCQUFpQixtQkFBTyxDQUFDLDJGQUFTOzs7Ozs7Ozs7Ozs7QUNBbEM7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxxR0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLHlGQUFRLGlCQUFpQixtQkFBTyxDQUFDLHlHQUFnQjtBQUN2RTtBQUNBO0FBQ0EsT0FBTyxZQUFZLGNBQWM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHO0FBQ1I7QUFDQTs7Ozs7Ozs7Ozs7O0FDeEJBLFVBQVUsbUJBQU8sQ0FBQyxxR0FBYztBQUNoQyxVQUFVLG1CQUFPLENBQUMseUZBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLHlGQUFROztBQUUxQjtBQUNBLG9FQUFvRSxpQ0FBaUM7QUFDckc7Ozs7Ozs7Ozs7OztBQ05BLGFBQWEsbUJBQU8sQ0FBQywrRkFBVztBQUNoQyxVQUFVLG1CQUFPLENBQUMseUZBQVE7QUFDMUI7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNKQSxXQUFXLG1CQUFPLENBQUMsMkZBQVM7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLCtGQUFXO0FBQ2hDO0FBQ0Esa0RBQWtEOztBQUVsRDtBQUNBLHFFQUFxRTtBQUNyRSxDQUFDO0FBQ0Q7QUFDQSxRQUFRLG1CQUFPLENBQUMsaUdBQVk7QUFDNUI7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7QUNYRCxnQkFBZ0IsbUJBQU8sQ0FBQyx1R0FBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsaUdBQVk7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNoQkEsZ0JBQWdCLG1CQUFPLENBQUMsdUdBQWU7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ0xBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLGlHQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxpR0FBWTtBQUNsQztBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ0xBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsdUdBQWU7QUFDdkM7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDs7Ozs7Ozs7Ozs7O0FDTEE7QUFDQSxjQUFjLG1CQUFPLENBQUMsaUdBQVk7QUFDbEM7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNKQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxxR0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDSkEsYUFBYSxtQkFBTyxDQUFDLCtGQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQywyRkFBUztBQUM1QixjQUFjLG1CQUFPLENBQUMsaUdBQVk7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLGlHQUFZO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLHFHQUFjO0FBQzNDO0FBQ0EsMERBQTBELHNCQUFzQjtBQUNoRixrRkFBa0Ysd0JBQXdCO0FBQzFHOzs7Ozs7Ozs7Ozs7QUNSQSxZQUFZLG1CQUFPLENBQUMseUZBQVE7Ozs7Ozs7Ozs7OztBQ0E1QixZQUFZLG1CQUFPLENBQUMsK0ZBQVc7QUFDL0IsVUFBVSxtQkFBTyxDQUFDLHlGQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQywrRkFBVztBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7OztBQ1ZhO0FBQ2IsdUJBQXVCLG1CQUFPLENBQUMsdUhBQXVCO0FBQ3RELFdBQVcsbUJBQU8sQ0FBQyxxR0FBYztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxxR0FBYztBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyx1R0FBZTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDekMsZ0NBQWdDO0FBQ2hDLGNBQWM7QUFDZCxpQkFBaUI7QUFDakI7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNqQ0EsY0FBYyxtQkFBTyxDQUFDLCtGQUFXO0FBQ2pDO0FBQ0EsOEJBQThCLFNBQVMsbUJBQU8sQ0FBQyw2R0FBa0IsR0FBRzs7Ozs7Ozs7Ozs7O0FDRnBFLGNBQWMsbUJBQU8sQ0FBQywrRkFBVztBQUNqQztBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLHlHQUFnQixjQUFjLGlCQUFpQixtQkFBTyxDQUFDLHFHQUFjLEtBQUs7Ozs7Ozs7Ozs7OztBQ0ZuSDtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxxR0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyx1R0FBZTs7QUFFN0MsbUJBQU8sQ0FBQyx1R0FBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7QUNSRDtBQUNBLGNBQWMsbUJBQU8sQ0FBQywrRkFBVztBQUNqQyw4QkFBOEIsaUJBQWlCLG1CQUFPLENBQUMscUdBQWMsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRi9EO0FBQ2IsVUFBVSxtQkFBTyxDQUFDLHFHQUFjOztBQUVoQztBQUNBLG1CQUFPLENBQUMseUdBQWdCO0FBQ3hCLDZCQUE2QjtBQUM3QixjQUFjO0FBQ2Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ2hCWTtBQUNiO0FBQ0EsYUFBYSxtQkFBTyxDQUFDLCtGQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQixrQkFBa0IsbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLCtGQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxtR0FBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsMkZBQVM7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLDZGQUFVO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQywrRkFBVztBQUNoQyxxQkFBcUIsbUJBQU8sQ0FBQyxxSEFBc0I7QUFDbkQsVUFBVSxtQkFBTyxDQUFDLHlGQUFRO0FBQzFCLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQixhQUFhLG1CQUFPLENBQUMsaUdBQVk7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsdUdBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLHFHQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxtR0FBYTtBQUNuQyxlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLHFHQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxxR0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyx1R0FBZTtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQywyR0FBaUI7QUFDM0MsaUJBQWlCLG1CQUFPLENBQUMsNkdBQWtCO0FBQzNDLGNBQWMsbUJBQU8sQ0FBQyw2R0FBa0I7QUFDeEMsY0FBYyxtQkFBTyxDQUFDLGlIQUFvQjtBQUMxQyxZQUFZLG1CQUFPLENBQUMseUdBQWdCO0FBQ3BDLFlBQVksbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLHFHQUFjO0FBQ2hDLFlBQVksbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QixzQkFBc0IsdUJBQXVCLFdBQVcsSUFBSTtBQUM1RCxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBLEtBQUs7QUFDTDtBQUNBLHNCQUFzQixtQ0FBbUM7QUFDekQsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFLGdDQUFnQztBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEVBQUUsbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDMUIsRUFBRSxtQkFBTyxDQUFDLHVHQUFlO0FBQ3pCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLGlHQUFZO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMERBQTBELGtCQUFrQjs7QUFFNUU7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1Qjs7QUFFM0Msb0RBQW9ELDZCQUE2Qjs7QUFFakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILDBCQUEwQixlQUFlLEVBQUU7QUFDM0MsMEJBQTBCLGdCQUFnQjtBQUMxQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsOENBQThDLFlBQVksRUFBRTs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxPQUFPLFFBQVEsaUNBQWlDO0FBQ3BHLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0U7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0Esb0NBQW9DLG1CQUFPLENBQUMsMkZBQVM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNyUEEsbUJBQU8sQ0FBQyx1R0FBZTs7Ozs7Ozs7Ozs7O0FDQXZCLG1CQUFPLENBQUMsdUdBQWU7Ozs7Ozs7Ozs7OztBQ0F2QixtQkFBTyxDQUFDLHFIQUFzQjtBQUM5QixhQUFhLG1CQUFPLENBQUMsK0ZBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLDJGQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLHFHQUFjO0FBQ3RDLG9CQUFvQixtQkFBTyxDQUFDLHlGQUFROztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxLQUFLLElBQTRFO0FBQ2pGLEVBQUUsbUNBQU87QUFDVDtBQUNBLEdBQUc7QUFBQSxvR0FBQztBQUNKLEVBQUUsTUFBTSxFQUlOOztBQUVGLENBQUM7Ozs7Ozs7Ozs7Ozs7QUN2Q0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLHNCQUFzQjtBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0Isb0JBQW9CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYjs7QUFFQSxJQUFJLElBQXFDO0FBQ3pDLDZCQUE2QixtQkFBTyxDQUFDLHlGQUE0QjtBQUNqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRHQUE0RztBQUM1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsMEVBQVU7QUFDaEMsYUFBYSxtQkFBTyxDQUFDLDREQUFlOztBQUVwQywyQkFBMkIsbUJBQU8sQ0FBQyx5RkFBNEI7QUFDL0QscUJBQXFCLG1CQUFPLENBQUMscUVBQWtCOztBQUUvQztBQUNBOztBQUVBLElBQUksSUFBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDOztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsNkJBQTZCO0FBQzdCLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixLQUFLO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsNEJBQTRCO0FBQzVCLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxVQUFVLEtBQXFDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHNCQUFzQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsSUFBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQkFBcUIsMkJBQTJCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQyw0RkFBNEYsU0FBTTtBQUM3STtBQUNBOztBQUVBLG1CQUFtQixnQ0FBZ0M7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLGdDQUFnQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7QUM5a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLElBQXFDO0FBQ3pDLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1RkFBMkI7QUFDdEQsQ0FBQyxNQUFNLEVBSU47Ozs7Ozs7Ozs7Ozs7QUNsQkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViOztBQUVBOzs7Ozs7Ozs7Ozs7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7OztBQUliLElBQUksSUFBcUM7QUFDekM7QUFDQTs7QUFFQSw4Q0FBOEMsY0FBYzs7QUFFNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNGQUFzRixhQUFhO0FBQ25HO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRGQUE0RixlQUFlO0FBQzNHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7Ozs7Ozs7Ozs7Ozs7QUNsT2E7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDO0FBQ0QsbUJBQW1CLG1CQUFPLENBQUMsa0hBQStCO0FBQzFEOzs7Ozs7Ozs7Ozs7O0FDTmE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxZQUFZO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLFlBQVk7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNySEE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRW9COzs7Ozs7Ozs7Ozs7O0FDN0pQOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUEsbURBQW1ELGdCQUFnQixzQkFBc0IsT0FBTywyQkFBMkIsMEJBQTBCLHlEQUF5RCwyQkFBMkIsRUFBRSxFQUFFLEVBQUUsZUFBZTs7QUFFOVAsZ0NBQWdDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFampCLGFBQWEsbUJBQU8sQ0FBQyxvQkFBTzs7QUFFNUI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsNEJBQVc7O0FBRW5DOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHNEQUFZOztBQUVyQzs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQywrRUFBZTs7QUFFMUM7O0FBRUEsb0JBQW9CLG1CQUFPLENBQUMsdUZBQXlCOztBQUVyRDs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyw2RkFBNEI7O0FBRTNEOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLHFHQUF5Qjs7QUFFOUQsdUNBQXVDLDZCQUE2QixZQUFZLEVBQUUsT0FBTyxpQkFBaUIsbUJBQW1CLHVCQUF1Qiw0RUFBNEUsRUFBRSxFQUFFLHNCQUFzQixlQUFlLEVBQUU7O0FBRTNRLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RixpREFBaUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SixpREFBaUQsYUFBYSx1RkFBdUYsRUFBRSx1RkFBdUY7O0FBRTlPLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLG1FQUFtRSxhQUFhO0FBQ2hGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0wsc0dBQXNHLHFDQUFxQztBQUMzSTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUEsd0I7Ozs7Ozs7Ozs7OztBQ25RYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtREFBbUQsZ0JBQWdCLHNCQUFzQixPQUFPLDJCQUEyQiwwQkFBMEIseURBQXlELDJCQUEyQixFQUFFLEVBQUUsRUFBRSxlQUFlOztBQUU5UCxvR0FBb0csbUJBQW1CLEVBQUUsbUJBQW1CLDhIQUE4SDs7QUFFMVEsZ0NBQWdDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFampCLGFBQWEsbUJBQU8sQ0FBQyxvQkFBTzs7QUFFNUI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsc0RBQVk7O0FBRXJDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLHVGQUF5Qjs7QUFFckQ7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQXFCOztBQUU3Qzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyx1RkFBeUI7O0FBRXJEOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLGlGQUFzQjs7QUFFL0M7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsNkZBQTRCOztBQUUzRDs7QUFFQSx1Q0FBdUMsNkJBQTZCLFlBQVksRUFBRSxPQUFPLGlCQUFpQixtQkFBbUIsdUJBQXVCLDRFQUE0RSxFQUFFLEVBQUUsc0JBQXNCLGVBQWUsRUFBRTs7QUFFM1Esc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLGlEQUFpRCxhQUFhLHVGQUF1RixFQUFFLHVGQUF1Rjs7QUFFOU8sMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QyxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLGVBQWU7QUFDdkMsMEJBQTBCLGtCQUFrQjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQix3Q0FBd0M7QUFDOUQ7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFJO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLFVBQVUsSUFBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QywrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNB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QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0M7Ozs7Ozs7Ozs7OztBQ3pEYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxhQUFhLG1CQUFPLENBQUMsOEVBQW9COztBQUV6Qzs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7QUFDQSxvQzs7Ozs7Ozs7Ozs7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSSxJQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsV0FBVztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0RBLGFBQWEsK0JBQStCLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBOUMsYUFBYSx1Q0FBdUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F0RCxhQUFhLHdDQUF3QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXZELGFBQWEsdURBQXVELEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBdEUsYUFBYSxpQ0FBaUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0FoRCxhQUFhLGdDQUFnQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQS9DLGFBQWEsbUNBQW1DLEVBQUUsSSIsImZpbGUiOiJlZS13cC1wbHVnaW5zLXBhZ2UuZmVmN2I3MGRhMDcyNjk3YzA5ZDcuZGlzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFJlYWN0TW9kYWwgZnJvbSAncmVhY3QtbW9kYWwnO1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBFeGl0TW9kYWwsIHsgQ0xPU0VfTU9EQUxfRVZFTlQgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9yZWFjdC1leGl0LW1vZGFsLXR5cGVmb3JtJztcbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuaW1wb3J0IHsgZGF0YSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IH0gZnJvbSAncXVlcnlzdHJpbmdpZnknO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuY29uc3QgeyBleGl0TW9kYWxJbmZvOiBpbmZvID0ge30gfSA9IGRhdGE7XG5cbmNvbnN0IHF1ZXJ5U3RyaW5nID0gc3RyaW5naWZ5KCB7XG5cdGZpcnN0bmFtZTogaW5mby5maXJzdG5hbWUsXG5cdGVtYWlsYWRkcmVzczogaW5mby5lbWFpbGFkZHJlc3MsXG5cdHdlYnNpdGU6IGluZm8ud2Vic2l0ZSxcbn0gKTtcblxuY29uc3QgbW9kYWxQcm9wcyA9IHtcblx0c3R5bGVzOiB7XG5cdFx0Y29udGVudDoge1xuXHRcdFx0ZGlzcGxheTogJ2ZsZXgnLFxuXHRcdFx0dG9wOiAnODBweCcsXG5cdFx0XHRsZWZ0OiAnNTAlJyxcblx0XHRcdGJvdHRvbTogJ2F1dG8nLFxuXHRcdFx0cmlnaHQ6ICdhdXRvJyxcblx0XHRcdFdlYmtpdFRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoLTUwJSknLFxuXHRcdFx0dHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtNTAlKScsXG5cdFx0fSxcblx0XHR0eXBlRm9ybVN0eWxlOiB7XG5cdFx0XHR3aWR0aDogJzYwMHB4Jyxcblx0XHRcdGhlaWdodDogJzYwMHB4Jyxcblx0XHR9LFxuXHR9LFxuXHR0eXBlRm9ybVVybDogJ2h0dHBzOi8vZXZlbnRlc3ByZXNzby50eXBlZm9ybS5jb20vdG8vTzFERHltPycgKyBxdWVyeVN0cmluZyxcblx0aW50cm9UZXh0OiBfXyhcblx0XHQnRG8geW91IGhhdmUgYSBtb21lbnQgdG8gc2hhcmUgd2h5IHlvdSBhcmUgZGVhY3RpdmF0aW5nIEV2ZW50IEVzcHJlc3NvPycsXG5cdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0KSxcblx0ZG9TdXJ2ZXlCdXR0b25UZXh0OiBfXyhcblx0XHQnU3VyZSBJXFwnbGwgaGVscCcsXG5cdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0KSxcblx0c2tpcEJ1dHRvblRleHQ6IF9fKFxuXHRcdCdTa2lwJyxcblx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHQpLFxuXHRidXR0b25DbGFzczoge1xuXHRcdGRvU3VydmV5OiAnYnV0dG9uIGJ1dHRvbi1wcmltYXJ5Jyxcblx0XHRjbG9zZU1vZGFsOiAnYnV0dG9uIGJ1dHRvbi1zZWNvbmRhcnknLFxuXHR9LFxufTtcblxuLyoqXG4gKiBIYW5kbGVyIGZvciBkZWFjdGl2YXRpb24gdHJpZ2dlclxuICogQHBhcmFtIHtFdmVudH0gZVxuICogQHBhcmFtIHtlbGVtZW50fSBlbFxuICovXG5jb25zdCBoYW5kbGVEZWFjdGl2YXRpb25DbGljayA9ICggZSwgZWwgKSA9PiB7XG5cdGUucHJldmVudERlZmF1bHQoKTtcblx0Y29uc3QgbGluayA9ICQoIGVsICkuYXR0ciggJ2hyZWYnICk7XG5cdGNvbnN0IGFwcENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnZWUtZXhpdC1zdXJ2ZXktbW9kYWwnICk7XG5cdFJlYWN0TW9kYWwuc2V0QXBwRWxlbWVudCggYXBwQ29udGFpbmVyICk7XG5cdGNvbnN0IG1vZGFsQ29udGFpbmVyID0gUmVhY3RET00ucmVuZGVyKCA8RXhpdE1vZGFsIHsgLi4ubW9kYWxQcm9wcyB9IC8+LCAvL2VzbGludC1kaXNhYmxlLWxpbmUgcmVhY3Qvbm8tcmVuZGVyLXJldHVybi12YWx1ZVxuXHRcdGFwcENvbnRhaW5lcixcblx0KTtcblx0bW9kYWxDb250YWluZXIuZWwuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRDTE9TRV9NT0RBTF9FVkVOVCxcblx0XHRmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbGluaztcblx0XHR9LFxuXHRcdHsgb25jZTogdHJ1ZSB9LFxuXHQpO1xufTtcblxuLyoqXG4gKiBFRSBjYWZmZWluYXRlZCBjbGljayBjYXB0dXJlIGJ1dCBvbmx5IGlmIGZlYXR1cmUgaXMgYWN0aXZlXG4gKi9cbmlmICggaW5mby5pc01vZGFsQWN0aXZlICkge1xuXHQkKCAndHJbZGF0YS1zbHVnPVwiZXZlbnQtZXNwcmVzc29cIl0nIClcblx0XHQub24oICdjbGljaycsICdzcGFuLmRlYWN0aXZhdGUgPiBhJywgZnVuY3Rpb24oIGUgKSB7XG5cdFx0XHRoYW5kbGVEZWFjdGl2YXRpb25DbGljayggZSwgdGhpcyApO1xuXHRcdH0gKTtcblxuXHQvKipcblx0ICogRUUgZGVjYWYgY2xpY2sgY2FwdHVyZS5cblx0ICovXG5cdCQoICd0cltkYXRhLXNsdWc9XCJldmVudC1lc3ByZXNzby1kZWNhZlwiXScgKVxuXHRcdC5vbiggJ2NsaWNrJywgJ3NwYW4uZGVhY3RpdmF0ZSA+IGEnLCBmdW5jdGlvbiggZSApIHtcblx0XHRcdGhhbmRsZURlYWN0aXZhdGlvbkNsaWNrKCBlLCB0aGlzICk7XG5cdFx0fSApO1xufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWNhbmNlbC1wcm9tcHQtYnV0dG9uXCI6XCJlZS1jYW5jZWwtcHJvbXB0LWJ1dHRvblwiLFwiZXhpdC1tb2RhbC1jaG9pY2VzXCI6XCJleGl0LW1vZGFsLWNob2ljZXNcIixcImJ1dHRvblwiOlwiYnV0dG9uXCJ9OyIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgJy4uL2V4aXQtbW9kYWwtc3VydmV5JztcbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuaWYgKCAkKCAndHIuZWUtdXBzZWxsLXBsdWdpbi1saXN0LXRhYmxlJyApLmxlbmd0aCA+IDAgKSB7XG5cdCQoICd0cltkYXRhLXNsdWc9XCJldmVudC1lc3ByZXNzb1wiXSx0cltkYXRhLXNsdWc9XCJldmVudC1lc3ByZXNzby1kZWNhZlwiXScgKVxuXHRcdC5hZGRDbGFzcyggJ3VwZGF0ZScgKTtcbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS11cHNlbGwtY29udGFpbmVyXCI6XCJlZS11cHNlbGwtY29udGFpbmVyXCIsXCJlZS11cHNlbGwtaW5uZXItY29udGFpbmVyXCI6XCJlZS11cHNlbGwtaW5uZXItY29udGFpbmVyXCJ9OyIsImltcG9ydCBfT2JqZWN0JGdldFByb3RvdHlwZU9mIGZyb20gJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZic7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjayc7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcyc7XG5pbXBvcnQgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gZnJvbSAnYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tICdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnO1xuLyoqXG4gKiBFeHRlcm5hbCBEZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdE1vZGFsIGZyb20gJ3JlYWN0LW1vZGFsJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IEV4aXRNb2RhbE9wdGlvbnMsIFR5cGVGb3JtRW1iZWQgfSBmcm9tICcuL21vZGFsL2luZGV4JztcblxuZXhwb3J0IHZhciBDTE9TRV9NT0RBTF9FVkVOVCA9ICdjbG9zZU1vZGFsRXZlbnQnO1xuXG52YXIgRXhpdE1vZGFsID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHMoRXhpdE1vZGFsLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICAgIGZ1bmN0aW9uIEV4aXRNb2RhbCgpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV4aXRNb2RhbCk7XG5cbiAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEV4aXRNb2RhbC5fX3Byb3RvX18gfHwgX09iamVjdCRnZXRQcm90b3R5cGVPZihFeGl0TW9kYWwpKS5jYWxsKHRoaXMpKTtcblxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHNob3dNb2RhbDogdHJ1ZSxcbiAgICAgICAgICAgIGluaXRpYWxWaWV3OiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoRXhpdE1vZGFsLCBbe1xuICAgICAgICBrZXk6ICdjb21wb25lbnRXaWxsVXBkYXRlJyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMuc2hvd01vZGFsICE9PSB0aGlzLnN0YXRlLnNob3dNb2RhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzaG93TW9kYWw6IG5leHRQcm9wcy5zaG93TW9kYWwgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGluaXRpYWxWaWV3OiBuZXh0UHJvcHMuaW5pdGlhbFZpZXcgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1vZGFsRXZlbnQgPSBuZXcgRXZlbnQoQ0xPU0VfTU9EQUxfRVZFTlQsIHsgbW9kYWxPcGVuOiB0aGlzLnN0YXRlLnNob3dNb2RhbCB9KTtcbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTW9kYWxFdmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ2hhbmRsZUNsb3NlTW9kYWwnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2xvc2VNb2RhbCgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzaG93TW9kYWw6IGZhbHNlIH0pO1xuICAgICAgICAgICAgLy9zbyBleHRlcm5hbCBzY3JpcHRzIGxpc3RlbmluZyBvbiB0aGUgcmVhY3QgZWxlbWVudCBjYW4gcmVhY3QuXG4gICAgICAgICAgICB0aGlzLmVsLmRpc3BhdGNoRXZlbnQodGhpcy5jbG9zZU1vZGFsRXZlbnQpO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdvbkRvU3VydmV5JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRG9TdXJ2ZXkoKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaW5pdGlhbFZpZXc6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdyZW5kZXInLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5zdGF0ZS5pbml0aWFsVmlldyA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoRXhpdE1vZGFsT3B0aW9ucywge1xuICAgICAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQ2xvc2VNb2RhbCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25Eb1N1cnZleTogZnVuY3Rpb24gb25Eb1N1cnZleSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vbkRvU3VydmV5KCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbnRyb1RleHQ6IHRoaXMucHJvcHMuaW50cm9UZXh0LFxuICAgICAgICAgICAgICAgIGRvU3VydmV5QnV0dG9uVGV4dDogdGhpcy5wcm9wcy5kb1N1cnZleUJ1dHRvblRleHQsXG4gICAgICAgICAgICAgICAgc2tpcEJ1dHRvblRleHQ6IHRoaXMucHJvcHMuc2tpcEJ1dHRvblRleHQsXG4gICAgICAgICAgICAgICAgZG9TdXJ2ZXlCdXR0b25DbGFzczogdGhpcy5wcm9wcy5idXR0b25DbGFzcy5kb1N1cnZleSxcbiAgICAgICAgICAgICAgICBjbG9zZU1vZGFsQnV0dG9uQ2xhc3M6IHRoaXMucHJvcHMuYnV0dG9uQ2xhc3MuY2xvc2VNb2RhbFxuICAgICAgICAgICAgfSkgOiBSZWFjdC5jcmVhdGVFbGVtZW50KFR5cGVGb3JtRW1iZWQsIHtcbiAgICAgICAgICAgICAgICBvblN1Ym1pdDogZnVuY3Rpb24gb25TdWJtaXQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQ2xvc2VNb2RhbCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdXJsOiB0aGlzLnByb3BzLnR5cGVGb3JtVXJsLFxuICAgICAgICAgICAgICAgIHBvcHVwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlRm9ybVN0eWxlOiB0aGlzLnByb3BzLnN0eWxlcy50eXBlRm9ybVN0eWxlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICAgIHsgcmVmOiBmdW5jdGlvbiByZWYoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuZWwgPSBlbDtcbiAgICAgICAgICAgICAgICAgICAgfSB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0TW9kYWwsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT3BlbjogdGhpcy5zdGF0ZS5zaG93TW9kYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogdGhpcy5wcm9wcy5zdHlsZXNcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gRXhpdE1vZGFsO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGl0TW9kYWw7XG5cblxuRXhpdE1vZGFsLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBzaG93TW9kYWw6IHRydWUsXG4gICAgc2hvd1R5cGVGb3JtOiBmYWxzZSxcbiAgICBzdHlsZXM6IHtcbiAgICAgICAgb3ZlcmxheToge1xuICAgICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpJ1xuICAgICAgICB9LFxuICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIHRvcDogJzQwcHgnLFxuICAgICAgICAgICAgbGVmdDogJzQwcHgnLFxuICAgICAgICAgICAgcmlnaHQ6ICc0MHB4JyxcbiAgICAgICAgICAgIGJvdHRvbTogJzQwcHgnLFxuICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNjY2MnLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJyNmZmYnLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgIG91dGxpbmU6ICdub25lJyxcbiAgICAgICAgICAgIHBhZGRpbmc6ICcyMHB4J1xuICAgICAgICB9LFxuICAgICAgICB0eXBlRm9ybVN0eWxlOiB7XG4gICAgICAgICAgICB3aWR0aDogJzYwMHB4JyxcbiAgICAgICAgICAgIGhlaWdodDogJzQwMHB4J1xuICAgICAgICB9XG4gICAgfSxcbiAgICBidXR0b25DbGFzczoge1xuICAgICAgICBkb1N1cnZleTogJycsXG4gICAgICAgIGNsb3NlTW9kYWw6ICcnXG4gICAgfSxcbiAgICBtb2RhbENsYXNzTmFtZToge1xuICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgb3ZlcmxheTogJydcbiAgICB9LFxuICAgIHR5cGVGb3JtVXJsOiAnJyxcbiAgICBpbnRyb1RleHQ6IFwiV2UncmUgc29ycnkgdG8gc2VlIHlvdSBnbyEgV2lsbCB5b3Ugc2hhcmUgZmVlZGJhY2sgdGhyb3VnaCBhIHNob3J0IHN1cnZleSB0byBoZWxwIHVzIGltcHJvdmUgb3VyIHByb2R1Y3Q/XCIsXG4gICAgZG9TdXJ2ZXlCdXR0b25UZXh0OiBcIlN1cmUgSSdsbCBoZWxwIVwiLFxuICAgIHNraXBCdXR0b25UZXh0OiBcIlNraXBcIlxufTtcblxuRXhpdE1vZGFsLnByb3BUeXBlcyA9IHtcbiAgICBzaG93TW9kYWw6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dUeXBlRm9ybTogUHJvcFR5cGVzLmJvb2wsXG4gICAgc3R5bGVzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICBvdmVybGF5OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICBjb250ZW50OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICB0eXBlRm9ybVN0eWxlOiBQcm9wVHlwZXMub2JqZWN0XG4gICAgfSksXG4gICAgbW9kYWxDbGFzc05hbWU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIG92ZXJsYXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHR5cGVGb3JtU3R5bGU6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KSxcbiAgICBidXR0b25DbGFzczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgZG9TdXJ2ZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGNsb3NlTW9kYWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KSxcbiAgICB0eXBlRm9ybVVybDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGludHJvVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBza2lwQnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkb1N1cnZleUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwiLyoqXG4gKiBFeHRlcm5hbCBEZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnV0dG9uKF9yZWYpIHtcbiAgICB2YXIgaGFuZGxlT25DbGljayA9IF9yZWYuaGFuZGxlT25DbGljayxcbiAgICAgICAgYnV0dG9uVGV4dCA9IF9yZWYuYnV0dG9uVGV4dCxcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBfcmVmLmJ1dHRvbkNsYXNzO1xuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdidXR0b24nLFxuICAgICAgICB7IGNsYXNzTmFtZTogYnV0dG9uQ2xhc3MsIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcbiAgICAgICAgYnV0dG9uVGV4dFxuICAgICk7XG59IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBFeGl0TW9kYWxPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zdmlldyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFR5cGVGb3JtRW1iZWQgfSBmcm9tICcuL3R5cGVGb3JtRW1iZWQnOyIsIi8qKlxuICogRXh0ZXJuYWwgRGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJy4vYnV0dG9uJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFeGl0TW9kYWxPcHRpb25zKF9yZWYpIHtcbiAgICB2YXIgb25DbG9zZSA9IF9yZWYub25DbG9zZSxcbiAgICAgICAgb25Eb1N1cnZleSA9IF9yZWYub25Eb1N1cnZleSxcbiAgICAgICAgaW50cm9UZXh0ID0gX3JlZi5pbnRyb1RleHQsXG4gICAgICAgIGRvU3VydmV5QnV0dG9uVGV4dCA9IF9yZWYuZG9TdXJ2ZXlCdXR0b25UZXh0LFxuICAgICAgICBza2lwQnV0dG9uVGV4dCA9IF9yZWYuc2tpcEJ1dHRvblRleHQsXG4gICAgICAgIGRvU3VydmV5QnV0dG9uQ2xhc3MgPSBfcmVmLmRvU3VydmV5QnV0dG9uQ2xhc3MsXG4gICAgICAgIGNsb3NlTW9kYWxCdXR0b25DbGFzcyA9IF9yZWYuY2xvc2VNb2RhbEJ1dHRvbkNsYXNzO1xuXG4gICAgdmFyIGJ1dHRvbkNsYXNzID0gXCJlZS1jYW5jZWwtcHJvbXB0LWJ1dHRvblwiO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICdleGl0LW1vZGFsLWNob2ljZXMnIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAncCcsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW50cm9UZXh0XG4gICAgICAgICksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgICAgICAgICBrZXk6ICdkbyBzdXJ2ZXknLFxuICAgICAgICAgICAgaGFuZGxlT25DbGljazogb25Eb1N1cnZleSxcbiAgICAgICAgICAgIGJ1dHRvblRleHQ6IGRvU3VydmV5QnV0dG9uVGV4dCxcbiAgICAgICAgICAgIGJ1dHRvbkNsYXNzOiBjbGFzc05hbWVzKGJ1dHRvbkNsYXNzLCAnZG8tc3VydmV5JywgZG9TdXJ2ZXlCdXR0b25DbGFzcylcbiAgICAgICAgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgICAgICAgICBrZXk6ICdjbG9zZS1tb2RhbC1hbmQtY2FuY2VsJyxcbiAgICAgICAgICAgIGhhbmRsZU9uQ2xpY2s6IG9uQ2xvc2UsXG4gICAgICAgICAgICBidXR0b25UZXh0OiBza2lwQnV0dG9uVGV4dCxcbiAgICAgICAgICAgIGJ1dHRvbkNsYXNzOiBjbGFzc05hbWVzKGJ1dHRvbkNsYXNzLCAnY2xvc2UtbW9kYWwtYW5kLWNhbmNlbCcsIGNsb3NlTW9kYWxCdXR0b25DbGFzcylcbiAgICAgICAgfSlcbiAgICApO1xufTsiLCJpbXBvcnQgX09iamVjdCRnZXRQcm90b3R5cGVPZiBmcm9tICdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tICdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tICdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnO1xuaW1wb3J0IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIGZyb20gJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJztcbmltcG9ydCBfaW5oZXJpdHMgZnJvbSAnYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzJztcbi8qKlxuICogRXh0ZXJuYWwgRGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICogYXMgdGZFbWJlZCBmcm9tICdAdHlwZWZvcm0vZW1iZWQnO1xuXG52YXIgVHlwZUZvcm1FbWJlZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzKFR5cGVGb3JtRW1iZWQsIF9Db21wb25lbnQpO1xuXG4gICAgZnVuY3Rpb24gVHlwZUZvcm1FbWJlZCgpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFR5cGVGb3JtRW1iZWQpO1xuXG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoVHlwZUZvcm1FbWJlZC5fX3Byb3RvX18gfHwgX09iamVjdCRnZXRQcm90b3R5cGVPZihUeXBlRm9ybUVtYmVkKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNsYXNzKFR5cGVGb3JtRW1iZWQsIFt7XG4gICAgICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgdXJsID0gX3Byb3BzLnVybCxcbiAgICAgICAgICAgICAgICBoaWRlSGVhZGVycyA9IF9wcm9wcy5oaWRlSGVhZGVycyxcbiAgICAgICAgICAgICAgICBoaWRlRm9vdGVyID0gX3Byb3BzLmhpZGVGb290ZXIsXG4gICAgICAgICAgICAgICAgb3BhY2l0eSA9IF9wcm9wcy5vcGFjaXR5LFxuICAgICAgICAgICAgICAgIGJ1dHRvblRleHQgPSBfcHJvcHMuYnV0dG9uVGV4dCxcbiAgICAgICAgICAgICAgICBwb3B1cCA9IF9wcm9wcy5wb3B1cCxcbiAgICAgICAgICAgICAgICBtb2RlID0gX3Byb3BzLm1vZGUsXG4gICAgICAgICAgICAgICAgYXV0b09wZW4gPSBfcHJvcHMuYXV0b09wZW4sXG4gICAgICAgICAgICAgICAgYXV0b0Nsb3NlID0gX3Byb3BzLmF1dG9DbG9zZSxcbiAgICAgICAgICAgICAgICBvblN1Ym1pdCA9IF9wcm9wcy5vblN1Ym1pdDtcblxuICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgaGlkZUhlYWRlcnM6IGhpZGVIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGhpZGVGb290ZXI6IGhpZGVGb290ZXIsXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogb3BhY2l0eSxcbiAgICAgICAgICAgICAgICBidXR0b25UZXh0OiBidXR0b25UZXh0LFxuICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUsXG4gICAgICAgICAgICAgICAgYXV0b09wZW46IGF1dG9PcGVuLFxuICAgICAgICAgICAgICAgIGF1dG9DbG9zZTogYXV0b0Nsb3NlLFxuICAgICAgICAgICAgICAgIG9uU3VibWl0OiBvblN1Ym1pdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChwb3B1cCkge1xuICAgICAgICAgICAgICAgIHRoaXMudHlwZWZvcm0gPSB0ZkVtYmVkLm1ha2VQb3B1cCh1cmwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZWwgPSB0aGlzLnR5cGVmb3JtRWw7XG4gICAgICAgICAgICAgICAgdGZFbWJlZC5tYWtlV2lkZ2V0KGVsLCB1cmwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdyZW5kZXInLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnLCB7IGNsYXNzTmFtZTogJ3JlYWN0LXR5cGVmb3JtLWVtYmVkJywgcmVmOiBmdW5jdGlvbiByZWYodGYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi50eXBlZm9ybUVsID0gdGY7XG4gICAgICAgICAgICAgICAgfSwgc3R5bGU6IHRoaXMucHJvcHMudHlwZUZvcm1TdHlsZSB9KTtcbiAgICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBUeXBlRm9ybUVtYmVkO1xufShDb21wb25lbnQpO1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlRm9ybUVtYmVkO1xuXG5cblR5cGVGb3JtRW1iZWQucHJvcFR5cGVzID0ge1xuICAgIHR5cGVGb3JtU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdXJsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcG9wdXA6IFByb3BUeXBlcy5ib29sLFxuICAgIGhpZGVIZWFkZXJzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBoaWRlRm9vdGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8vIFdpZGdldCBvcHRpb25zXG4gICAgb3BhY2l0eTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBidXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLy8gUG9wdXAgb3B0aW9uc1xuICAgIG1vZGU6IFByb3BUeXBlcy5vbmVPZihbJ3BvcHVwJywgJ2RyYXdlcl9sZWZ0JywgJ2RyYXdlcl9yaWdodCddKSxcbiAgICBhdXRvT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgYXV0b0Nsb3NlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG9uU3VibWl0OiBQcm9wVHlwZXMuZnVuY1xufTtcblxuVHlwZUZvcm1FbWJlZC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgdHlwZUZvcm1TdHlsZToge30sXG4gICAgdXJsOiAnJyxcbiAgICBwb3B1cDogZmFsc2UsXG4gICAgaGlkZUhlYWRlcnM6IGZhbHNlLFxuICAgIGhpZGVGb290ZXI6IGZhbHNlLFxuICAgIG9wYWNpdHk6IDEwMCxcbiAgICBidXR0b25UZXh0OiAnU3RhcnQnLFxuICAgIG1vZGU6IFwicG9wdXBcIixcbiAgICBhdXRvT3BlbjogZmFsc2Vcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9cIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNDIpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBjb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG52YXIgaGlkZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgY3R4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuXG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgc3RvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1KSgnd2tzJyk7XG52YXIgdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XG52YXIgU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcblxuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhX193ZWJwYWNrX3JlcXVpcmVfXygzKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwOCk7XG52YXIgdG9QcmltaXRpdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuXG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBkUCA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG52YXIgY3JlYXRlRGVzYyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBoaWRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgU1JDID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNikoJ3NyYycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRnVuY3Rpb25bVE9fU1RSSU5HXTtcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjIpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcbnZhciBxdW90ID0gL1wiL2c7XG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbnZhciBjcmVhdGVIVE1MID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIGV4ZWMpIHtcbiAgdmFyIE8gPSB7fTtcbiAgT1tOQU1FXSA9IGV4ZWMoY3JlYXRlSFRNTCk7XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pLCAnU3RyaW5nJywgTyk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpO1xudmFyIGRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgcElFID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XG52YXIgY3JlYXRlRGVzYyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xudmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwOCk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IF9fd2VicGFja19yZXF1aXJlX18oNikgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgSUVfUFJPVE8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4KSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJ2ZXJzaW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdmVyc2lvbjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRE9NXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRE9NOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDaGlsZHJlblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENoaWxkcmVuOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXIkMTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlQ2xhc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDbGFzczsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlRmFjdG9yeVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUZhY3Rvcnk7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZUVsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVFbGVtZW50OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjbG9uZUVsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbG9uZUVsZW1lbnQkMTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiaXNWYWxpZEVsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1ZhbGlkRWxlbWVudDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZmluZERPTU5vZGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmaW5kRE9NTm9kZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwidW5tb3VudENvbXBvbmVudEF0Tm9kZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVubW91bnRDb21wb25lbnRBdE5vZGU7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvbXBvbmVudCQxOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQdXJlQ29tcG9uZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUHVyZUNvbXBvbmVudDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwidW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiX19zcHJlYWRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBleHRlbmQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3ByZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDgpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoZGVmYXVsdCBmcm9tIG5vbi1oYW1vcnkpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlByb3BUeXBlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hOyB9KTtcblxuXG5cbnZhciB2ZXJzaW9uID0gJzE1LjEuMCc7IC8vIHRyaWNrIGxpYnJhcmllcyB0byB0aGluayB3ZSBhcmUgcmVhY3RcblxudmFyIEVMRU1FTlRTID0gJ2EgYWJiciBhZGRyZXNzIGFyZWEgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiIGJhc2UgYmRpIGJkbyBiaWcgYmxvY2txdW90ZSBib2R5IGJyIGJ1dHRvbiBjYW52YXMgY2FwdGlvbiBjaXRlIGNvZGUgY29sIGNvbGdyb3VwIGRhdGEgZGF0YWxpc3QgZGQgZGVsIGRldGFpbHMgZGZuIGRpYWxvZyBkaXYgZGwgZHQgZW0gZW1iZWQgZmllbGRzZXQgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGZvcm0gaDEgaDIgaDMgaDQgaDUgaDYgaGVhZCBoZWFkZXIgaGdyb3VwIGhyIGh0bWwgaSBpZnJhbWUgaW1nIGlucHV0IGlucyBrYmQga2V5Z2VuIGxhYmVsIGxlZ2VuZCBsaSBsaW5rIG1haW4gbWFwIG1hcmsgbWVudSBtZW51aXRlbSBtZXRhIG1ldGVyIG5hdiBub3NjcmlwdCBvYmplY3Qgb2wgb3B0Z3JvdXAgb3B0aW9uIG91dHB1dCBwIHBhcmFtIHBpY3R1cmUgcHJlIHByb2dyZXNzIHEgcnAgcnQgcnVieSBzIHNhbXAgc2NyaXB0IHNlY3Rpb24gc2VsZWN0IHNtYWxsIHNvdXJjZSBzcGFuIHN0cm9uZyBzdHlsZSBzdWIgc3VtbWFyeSBzdXAgdGFibGUgdGJvZHkgdGQgdGV4dGFyZWEgdGZvb3QgdGggdGhlYWQgdGltZSB0aXRsZSB0ciB0cmFjayB1IHVsIHZhciB2aWRlbyB3YnIgY2lyY2xlIGNsaXBQYXRoIGRlZnMgZWxsaXBzZSBnIGltYWdlIGxpbmUgbGluZWFyR3JhZGllbnQgbWFzayBwYXRoIHBhdHRlcm4gcG9seWdvbiBwb2x5bGluZSByYWRpYWxHcmFkaWVudCByZWN0IHN0b3Agc3ZnIHRleHQgdHNwYW4nLnNwbGl0KCcgJyk7XG5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCE9PSd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgJiYgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fCAweGVhYzc7XG5cbnZhciBDT01QT05FTlRfV1JBUFBFUl9LRVkgPSAodHlwZW9mIFN5bWJvbCE9PSd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IpID8gU3ltYm9sLmZvcignX19wcmVhY3RDb21wYXRXcmFwcGVyJykgOiAnX19wcmVhY3RDb21wYXRXcmFwcGVyJztcblxuLy8gZG9uJ3QgYXV0b2JpbmQgdGhlc2UgbWV0aG9kcyBzaW5jZSB0aGV5IGFscmVhZHkgaGF2ZSBndWFyYW50ZWVkIGNvbnRleHQuXG52YXIgQVVUT0JJTkRfQkxBQ0tMSVNUID0ge1xuXHRjb25zdHJ1Y3RvcjogMSxcblx0cmVuZGVyOiAxLFxuXHRzaG91bGRDb21wb25lbnRVcGRhdGU6IDEsXG5cdGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6IDEsXG5cdGNvbXBvbmVudFdpbGxVcGRhdGU6IDEsXG5cdGNvbXBvbmVudERpZFVwZGF0ZTogMSxcblx0Y29tcG9uZW50V2lsbE1vdW50OiAxLFxuXHRjb21wb25lbnREaWRNb3VudDogMSxcblx0Y29tcG9uZW50V2lsbFVubW91bnQ6IDEsXG5cdGNvbXBvbmVudERpZFVubW91bnQ6IDFcbn07XG5cblxudmFyIENBTUVMX1BST1BTID0gL14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcHxjb2xvcnxmaWxsfGZsb29kfGZvbnR8Z2x5cGh8aG9yaXp8bWFya2VyfG92ZXJsaW5lfHBhaW50fHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dHx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KVtBLVpdLztcblxuXG52YXIgQllQQVNTX0hPT0sgPSB7fTtcblxuLypnbG9iYWwgcHJvY2VzcyovXG52YXIgREVWID0gdHlwZW9mIHByb2Nlc3M9PT0ndW5kZWZpbmVkJyB8fCAhcHJvY2Vzcy5lbnYgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYhPT0ncHJvZHVjdGlvbic7XG5cbi8vIGEgY29tcG9uZW50IHRoYXQgcmVuZGVycyBub3RoaW5nLiBVc2VkIHRvIHJlcGxhY2UgY29tcG9uZW50cyBmb3IgdW5tb3VudENvbXBvbmVudEF0Tm9kZS5cbmZ1bmN0aW9uIEVtcHR5Q29tcG9uZW50KCkgeyByZXR1cm4gbnVsbDsgfVxuXG5cblxuLy8gbWFrZSByZWFjdCB0aGluayB3ZSdyZSByZWFjdC5cbnZhciBWTm9kZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJlYWN0X19bXCJjXCIgLyogaCAqL10pKCdhJywgbnVsbCkuY29uc3RydWN0b3I7XG5WTm9kZS5wcm90b3R5cGUuJCR0eXBlb2YgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG5WTm9kZS5wcm90b3R5cGUucHJlYWN0Q29tcGF0VXBncmFkZWQgPSBmYWxzZTtcblZOb2RlLnByb3RvdHlwZS5wcmVhY3RDb21wYXROb3JtYWxpemVkID0gZmFsc2U7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWTm9kZS5wcm90b3R5cGUsICd0eXBlJywge1xuXHRnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5ub2RlTmFtZTsgfSxcblx0c2V0OiBmdW5jdGlvbih2KSB7IHRoaXMubm9kZU5hbWUgPSB2OyB9LFxuXHRjb25maWd1cmFibGU6dHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWTm9kZS5wcm90b3R5cGUsICdwcm9wcycsIHtcblx0Z2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuYXR0cmlidXRlczsgfSxcblx0c2V0OiBmdW5jdGlvbih2KSB7IHRoaXMuYXR0cmlidXRlcyA9IHY7IH0sXG5cdGNvbmZpZ3VyYWJsZTp0cnVlXG59KTtcblxuXG5cbnZhciBvbGRFdmVudEhvb2sgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJlYWN0X19bXCJkXCIgLyogb3B0aW9ucyAqL10uZXZlbnQ7XG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJlYWN0X19bXCJkXCIgLyogb3B0aW9ucyAqL10uZXZlbnQgPSBmdW5jdGlvbiAoZSkge1xuXHRpZiAob2xkRXZlbnRIb29rKSB7IGUgPSBvbGRFdmVudEhvb2soZSk7IH1cblx0ZS5wZXJzaXN0ID0gT2JqZWN0O1xuXHRlLm5hdGl2ZUV2ZW50ID0gZTtcblx0cmV0dXJuIGU7XG59O1xuXG5cbnZhciBvbGRWbm9kZUhvb2sgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJlYWN0X19bXCJkXCIgLyogb3B0aW9ucyAqL10udm5vZGU7XG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJlYWN0X19bXCJkXCIgLyogb3B0aW9ucyAqL10udm5vZGUgPSBmdW5jdGlvbiAodm5vZGUpIHtcblx0aWYgKCF2bm9kZS5wcmVhY3RDb21wYXRVcGdyYWRlZCkge1xuXHRcdHZub2RlLnByZWFjdENvbXBhdFVwZ3JhZGVkID0gdHJ1ZTtcblxuXHRcdHZhciB0YWcgPSB2bm9kZS5ub2RlTmFtZSxcblx0XHRcdGF0dHJzID0gdm5vZGUuYXR0cmlidXRlcyA9IGV4dGVuZCh7fSwgdm5vZGUuYXR0cmlidXRlcyk7XG5cblx0XHRpZiAodHlwZW9mIHRhZz09PSdmdW5jdGlvbicpIHtcblx0XHRcdGlmICh0YWdbQ09NUE9ORU5UX1dSQVBQRVJfS0VZXT09PXRydWUgfHwgKHRhZy5wcm90b3R5cGUgJiYgJ2lzUmVhY3RDb21wb25lbnQnIGluIHRhZy5wcm90b3R5cGUpKSB7XG5cdFx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbiAmJiBTdHJpbmcodm5vZGUuY2hpbGRyZW4pPT09JycpIHsgdm5vZGUuY2hpbGRyZW4gPSB1bmRlZmluZWQ7IH1cblx0XHRcdFx0aWYgKHZub2RlLmNoaWxkcmVuKSB7IGF0dHJzLmNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47IH1cblxuXHRcdFx0XHRpZiAoIXZub2RlLnByZWFjdENvbXBhdE5vcm1hbGl6ZWQpIHtcblx0XHRcdFx0XHRub3JtYWxpemVWTm9kZSh2bm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aGFuZGxlQ29tcG9uZW50Vk5vZGUodm5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbiAmJiBTdHJpbmcodm5vZGUuY2hpbGRyZW4pPT09JycpIHsgdm5vZGUuY2hpbGRyZW4gPSB1bmRlZmluZWQ7IH1cblx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbikgeyBhdHRycy5jaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuOyB9XG5cblx0XHRcdGlmIChhdHRycy5kZWZhdWx0VmFsdWUpIHtcblx0XHRcdFx0aWYgKCFhdHRycy52YWx1ZSAmJiBhdHRycy52YWx1ZSE9PTApIHtcblx0XHRcdFx0XHRhdHRycy52YWx1ZSA9IGF0dHJzLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWxldGUgYXR0cnMuZGVmYXVsdFZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRoYW5kbGVFbGVtZW50Vk5vZGUodm5vZGUsIGF0dHJzKTtcblx0XHR9XG5cdH1cblxuXHRpZiAob2xkVm5vZGVIb29rKSB7IG9sZFZub2RlSG9vayh2bm9kZSk7IH1cbn07XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbXBvbmVudFZOb2RlKHZub2RlKSB7XG5cdHZhciB0YWcgPSB2bm9kZS5ub2RlTmFtZSxcblx0XHRhID0gdm5vZGUuYXR0cmlidXRlcztcblxuXHR2bm9kZS5hdHRyaWJ1dGVzID0ge307XG5cdGlmICh0YWcuZGVmYXVsdFByb3BzKSB7IGV4dGVuZCh2bm9kZS5hdHRyaWJ1dGVzLCB0YWcuZGVmYXVsdFByb3BzKTsgfVxuXHRpZiAoYSkgeyBleHRlbmQodm5vZGUuYXR0cmlidXRlcywgYSk7IH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRWxlbWVudFZOb2RlKHZub2RlLCBhKSB7XG5cdHZhciBzaG91bGRTYW5pdGl6ZSwgYXR0cnMsIGk7XG5cdGlmIChhKSB7XG5cdFx0Zm9yIChpIGluIGEpIHsgaWYgKChzaG91bGRTYW5pdGl6ZSA9IENBTUVMX1BST1BTLnRlc3QoaSkpKSB7IGJyZWFrOyB9IH1cblx0XHRpZiAoc2hvdWxkU2FuaXRpemUpIHtcblx0XHRcdGF0dHJzID0gdm5vZGUuYXR0cmlidXRlcyA9IHt9O1xuXHRcdFx0Zm9yIChpIGluIGEpIHtcblx0XHRcdFx0aWYgKGEuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRhdHRyc1sgQ0FNRUxfUFJPUFMudGVzdChpKSA/IGkucmVwbGFjZSgvKFtBLVowLTldKS8sICctJDEnKS50b0xvd2VyQ2FzZSgpIDogaSBdID0gYVtpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5cblxuLy8gcHJveHkgcmVuZGVyKCkgc2luY2UgUmVhY3QgcmV0dXJucyBhIENvbXBvbmVudCByZWZlcmVuY2UuXG5mdW5jdGlvbiByZW5kZXIkMSh2bm9kZSwgcGFyZW50LCBjYWxsYmFjaykge1xuXHR2YXIgcHJldiA9IHBhcmVudCAmJiBwYXJlbnQuX3ByZWFjdENvbXBhdFJlbmRlcmVkICYmIHBhcmVudC5fcHJlYWN0Q29tcGF0UmVuZGVyZWQuYmFzZTtcblxuXHQvLyBpZ25vcmUgaW1wb3NzaWJsZSBwcmV2aW91cyByZW5kZXJzXG5cdGlmIChwcmV2ICYmIHByZXYucGFyZW50Tm9kZSE9PXBhcmVudCkgeyBwcmV2ID0gbnVsbDsgfVxuXG5cdC8vIGRlZmF1bHQgdG8gZmlyc3QgRWxlbWVudCBjaGlsZFxuXHRpZiAoIXByZXYgJiYgcGFyZW50KSB7IHByZXYgPSBwYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7IH1cblxuXHQvLyByZW1vdmUgdW5hZmZlY3RlZCBzaWJsaW5nc1xuXHRmb3IgKHZhciBpPXBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaS0tOyApIHtcblx0XHRpZiAocGFyZW50LmNoaWxkTm9kZXNbaV0hPT1wcmV2KSB7XG5cdFx0XHRwYXJlbnQucmVtb3ZlQ2hpbGQocGFyZW50LmNoaWxkTm9kZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdHZhciBvdXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3ByZWFjdF9fW1wiZVwiIC8qIHJlbmRlciAqL10pKHZub2RlLCBwYXJlbnQsIHByZXYpO1xuXHRpZiAocGFyZW50KSB7IHBhcmVudC5fcHJlYWN0Q29tcGF0UmVuZGVyZWQgPSBvdXQgJiYgKG91dC5fY29tcG9uZW50IHx8IHsgYmFzZTogb3V0IH0pOyB9XG5cdGlmICh0eXBlb2YgY2FsbGJhY2s9PT0nZnVuY3Rpb24nKSB7IGNhbGxiYWNrKCk7IH1cblx0cmV0dXJuIG91dCAmJiBvdXQuX2NvbXBvbmVudCB8fCBvdXQ7XG59XG5cblxudmFyIENvbnRleHRQcm92aWRlciA9IGZ1bmN0aW9uICgpIHt9O1xuXG5Db250ZXh0UHJvdmlkZXIucHJvdG90eXBlLmdldENoaWxkQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIHRoaXMucHJvcHMuY29udGV4dDtcbn07XG5Db250ZXh0UHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChwcm9wcykge1xuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW5bMF07XG59O1xuXG5mdW5jdGlvbiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIHZub2RlLCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG5cdHZhciB3cmFwID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcmVhY3RfX1tcImNcIiAvKiBoICovXSkoQ29udGV4dFByb3ZpZGVyLCB7IGNvbnRleHQ6IHBhcmVudENvbXBvbmVudC5jb250ZXh0IH0sIHZub2RlKTtcblx0dmFyIHJlbmRlckNvbnRhaW5lciA9IHJlbmRlciQxKHdyYXAsIGNvbnRhaW5lcik7XG5cdHZhciBjb21wb25lbnQgPSByZW5kZXJDb250YWluZXIuX2NvbXBvbmVudCB8fCByZW5kZXJDb250YWluZXIuYmFzZTtcblx0aWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrLmNhbGwoY29tcG9uZW50LCByZW5kZXJDb250YWluZXIpOyB9XG5cdHJldHVybiBjb21wb25lbnQ7XG59XG5cblxuZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpIHtcblx0dmFyIGV4aXN0aW5nID0gY29udGFpbmVyLl9wcmVhY3RDb21wYXRSZW5kZXJlZCAmJiBjb250YWluZXIuX3ByZWFjdENvbXBhdFJlbmRlcmVkLmJhc2U7XG5cdGlmIChleGlzdGluZyAmJiBleGlzdGluZy5wYXJlbnROb2RlPT09Y29udGFpbmVyKSB7XG5cdFx0T2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcmVhY3RfX1tcImVcIiAvKiByZW5kZXIgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3ByZWFjdF9fW1wiY1wiIC8qIGggKi9dKShFbXB0eUNvbXBvbmVudCksIGNvbnRhaW5lciwgZXhpc3RpbmcpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuXG5cbnZhciBBUlIgPSBbXTtcblxuLy8gVGhpcyBBUEkgaXMgY29tcGxldGVseSB1bm5lY2Vzc2FyeSBmb3IgUHJlYWN0LCBzbyBpdCdzIGJhc2ljYWxseSBwYXNzdGhyb3VnaC5cbnZhciBDaGlsZHJlbiA9IHtcblx0bWFwOiBmdW5jdGlvbihjaGlsZHJlbiwgZm4sIGN0eCkge1xuXHRcdGlmIChjaGlsZHJlbiA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cdFx0Y2hpbGRyZW4gPSBDaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKTtcblx0XHRpZiAoY3R4ICYmIGN0eCE9PWNoaWxkcmVuKSB7IGZuID0gZm4uYmluZChjdHgpOyB9XG5cdFx0cmV0dXJuIGNoaWxkcmVuLm1hcChmbik7XG5cdH0sXG5cdGZvckVhY2g6IGZ1bmN0aW9uKGNoaWxkcmVuLCBmbiwgY3R4KSB7XG5cdFx0aWYgKGNoaWxkcmVuID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cblx0XHRjaGlsZHJlbiA9IENoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xuXHRcdGlmIChjdHggJiYgY3R4IT09Y2hpbGRyZW4pIHsgZm4gPSBmbi5iaW5kKGN0eCk7IH1cblx0XHRjaGlsZHJlbi5mb3JFYWNoKGZuKTtcblx0fSxcblx0Y291bnQ6IGZ1bmN0aW9uKGNoaWxkcmVuKSB7XG5cdFx0cmV0dXJuIGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCB8fCAwO1xuXHR9LFxuXHRvbmx5OiBmdW5jdGlvbihjaGlsZHJlbikge1xuXHRcdGNoaWxkcmVuID0gQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbik7XG5cdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCE9PTEpIHsgdGhyb3cgbmV3IEVycm9yKCdDaGlsZHJlbi5vbmx5KCkgZXhwZWN0cyBvbmx5IG9uZSBjaGlsZC4nKTsgfVxuXHRcdHJldHVybiBjaGlsZHJlblswXTtcblx0fSxcblx0dG9BcnJheTogZnVuY3Rpb24oY2hpbGRyZW4pIHtcblx0XHRpZiAoY2hpbGRyZW4gPT0gbnVsbCkgeyByZXR1cm4gW107IH1cblx0XHRyZXR1cm4gQVJSLmNvbmNhdChjaGlsZHJlbik7XG5cdH1cbn07XG5cblxuLyoqIFRyYWNrIGN1cnJlbnQgcmVuZGVyKCkgY29tcG9uZW50IGZvciByZWYgYXNzaWdubWVudCAqL1xudmFyIGN1cnJlbnRDb21wb25lbnQ7XG5cblxuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSh0eXBlKSB7XG5cdHJldHVybiBjcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7XG59XG5cblxudmFyIERPTSA9IHt9O1xuZm9yICh2YXIgaT1FTEVNRU5UUy5sZW5ndGg7IGktLTsgKSB7XG5cdERPTVtFTEVNRU5UU1tpXV0gPSBjcmVhdGVGYWN0b3J5KEVMRU1FTlRTW2ldKTtcbn1cblxuZnVuY3Rpb24gdXBncmFkZVRvVk5vZGVzKGFyciwgb2Zmc2V0KSB7XG5cdGZvciAodmFyIGk9b2Zmc2V0IHx8IDA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIG9iaiA9IGFycltpXTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG5cdFx0XHR1cGdyYWRlVG9WTm9kZXMob2JqKTtcblx0XHR9XG5cdFx0ZWxzZSBpZiAob2JqICYmIHR5cGVvZiBvYmo9PT0nb2JqZWN0JyAmJiAhaXNWYWxpZEVsZW1lbnQob2JqKSAmJiAoKG9iai5wcm9wcyAmJiBvYmoudHlwZSkgfHwgKG9iai5hdHRyaWJ1dGVzICYmIG9iai5ub2RlTmFtZSkgfHwgb2JqLmNoaWxkcmVuKSkge1xuXHRcdFx0YXJyW2ldID0gY3JlYXRlRWxlbWVudChvYmoudHlwZSB8fCBvYmoubm9kZU5hbWUsIG9iai5wcm9wcyB8fCBvYmouYXR0cmlidXRlcywgb2JqLmNoaWxkcmVuKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaXNTdGF0ZWxlc3NDb21wb25lbnQoYykge1xuXHRyZXR1cm4gdHlwZW9mIGM9PT0nZnVuY3Rpb24nICYmICEoYy5wcm90b3R5cGUgJiYgYy5wcm90b3R5cGUucmVuZGVyKTtcbn1cblxuXG4vLyB3cmFwcyBzdGF0ZWxlc3MgZnVuY3Rpb25hbCBjb21wb25lbnRzIGluIGEgUHJvcFR5cGVzIHZhbGlkYXRvclxuZnVuY3Rpb24gd3JhcFN0YXRlbGVzc0NvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KSB7XG5cdHJldHVybiBjcmVhdGVDbGFzcyh7XG5cdFx0ZGlzcGxheU5hbWU6IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lLFxuXHRcdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gV3JhcHBlZENvbXBvbmVudCh0aGlzLnByb3BzLCB0aGlzLmNvbnRleHQpO1xuXHRcdH1cblx0fSk7XG59XG5cblxuZnVuY3Rpb24gc3RhdGVsZXNzQ29tcG9uZW50SG9vayhDdG9yKSB7XG5cdHZhciBXcmFwcGVkID0gQ3RvcltDT01QT05FTlRfV1JBUFBFUl9LRVldO1xuXHRpZiAoV3JhcHBlZCkgeyByZXR1cm4gV3JhcHBlZD09PXRydWUgPyBDdG9yIDogV3JhcHBlZDsgfVxuXG5cdFdyYXBwZWQgPSB3cmFwU3RhdGVsZXNzQ29tcG9uZW50KEN0b3IpO1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcmFwcGVkLCBDT01QT05FTlRfV1JBUFBFUl9LRVksIHsgY29uZmlndXJhYmxlOnRydWUsIHZhbHVlOnRydWUgfSk7XG5cdFdyYXBwZWQuZGlzcGxheU5hbWUgPSBDdG9yLmRpc3BsYXlOYW1lO1xuXHRXcmFwcGVkLnByb3BUeXBlcyA9IEN0b3IucHJvcFR5cGVzO1xuXHRXcmFwcGVkLmRlZmF1bHRQcm9wcyA9IEN0b3IuZGVmYXVsdFByb3BzO1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdG9yLCBDT01QT05FTlRfV1JBUFBFUl9LRVksIHsgY29uZmlndXJhYmxlOnRydWUsIHZhbHVlOldyYXBwZWQgfSk7XG5cblx0cmV0dXJuIFdyYXBwZWQ7XG59XG5cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0dmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblx0d2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuXHR1cGdyYWRlVG9WTm9kZXMoYXJncywgMik7XG5cdHJldHVybiBub3JtYWxpemVWTm9kZShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJlYWN0X19bXCJjXCIgLyogaCAqL10uYXBwbHkodm9pZCAwLCBhcmdzKSk7XG59XG5cblxuZnVuY3Rpb24gbm9ybWFsaXplVk5vZGUodm5vZGUpIHtcblx0dm5vZGUucHJlYWN0Q29tcGF0Tm9ybWFsaXplZCA9IHRydWU7XG5cblx0YXBwbHlDbGFzc05hbWUodm5vZGUpO1xuXG5cdGlmIChpc1N0YXRlbGVzc0NvbXBvbmVudCh2bm9kZS5ub2RlTmFtZSkpIHtcblx0XHR2bm9kZS5ub2RlTmFtZSA9IHN0YXRlbGVzc0NvbXBvbmVudEhvb2sodm5vZGUubm9kZU5hbWUpO1xuXHR9XG5cblx0dmFyIHJlZiA9IHZub2RlLmF0dHJpYnV0ZXMucmVmLFxuXHRcdHR5cGUgPSByZWYgJiYgdHlwZW9mIHJlZjtcblx0aWYgKGN1cnJlbnRDb21wb25lbnQgJiYgKHR5cGU9PT0nc3RyaW5nJyB8fCB0eXBlPT09J251bWJlcicpKSB7XG5cdFx0dm5vZGUuYXR0cmlidXRlcy5yZWYgPSBjcmVhdGVTdHJpbmdSZWZQcm94eShyZWYsIGN1cnJlbnRDb21wb25lbnQpO1xuXHR9XG5cblx0YXBwbHlFdmVudE5vcm1hbGl6YXRpb24odm5vZGUpO1xuXG5cdHJldHVybiB2bm9kZTtcbn1cblxuXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQkMShlbGVtZW50LCBwcm9wcykge1xuXHR2YXIgY2hpbGRyZW4gPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG5cdHdoaWxlICggbGVuLS0gPiAwICkgY2hpbGRyZW5bIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAyIF07XG5cblx0aWYgKCFpc1ZhbGlkRWxlbWVudChlbGVtZW50KSkgeyByZXR1cm4gZWxlbWVudDsgfVxuXHR2YXIgZWxlbWVudFByb3BzID0gZWxlbWVudC5hdHRyaWJ1dGVzIHx8IGVsZW1lbnQucHJvcHM7XG5cdHZhciBub2RlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcmVhY3RfX1tcImNcIiAvKiBoICovXSkoXG5cdFx0ZWxlbWVudC5ub2RlTmFtZSB8fCBlbGVtZW50LnR5cGUsXG5cdFx0ZXh0ZW5kKHt9LCBlbGVtZW50UHJvcHMpLFxuXHRcdGVsZW1lbnQuY2hpbGRyZW4gfHwgZWxlbWVudFByb3BzICYmIGVsZW1lbnRQcm9wcy5jaGlsZHJlblxuXHQpO1xuXHQvLyBPbmx5IHByb3ZpZGUgdGhlIDNyZCBhcmd1bWVudCBpZiBuZWVkZWQuXG5cdC8vIEFyZ3VtZW50cyAzKyBvdmVyd3JpdGUgZWxlbWVudC5jaGlsZHJlbiBpbiBwcmVhY3RDbG9uZUVsZW1lbnRcblx0dmFyIGNsb25lQXJncyA9IFtub2RlLCBwcm9wc107XG5cdGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRjbG9uZUFyZ3MucHVzaChjaGlsZHJlbik7XG5cdH1cblx0ZWxzZSBpZiAocHJvcHMgJiYgcHJvcHMuY2hpbGRyZW4pIHtcblx0XHRjbG9uZUFyZ3MucHVzaChwcm9wcy5jaGlsZHJlbik7XG5cdH1cblx0cmV0dXJuIG5vcm1hbGl6ZVZOb2RlKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcmVhY3RfX1tcImJcIiAvKiBjbG9uZUVsZW1lbnQgKi9dLmFwcGx5KHZvaWQgMCwgY2xvbmVBcmdzKSk7XG59XG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkge1xuXHRyZXR1cm4gZWxlbWVudCAmJiAoKGVsZW1lbnQgaW5zdGFuY2VvZiBWTm9kZSkgfHwgZWxlbWVudC4kJHR5cGVvZj09PVJFQUNUX0VMRU1FTlRfVFlQRSk7XG59XG5cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nUmVmUHJveHkobmFtZSwgY29tcG9uZW50KSB7XG5cdHJldHVybiBjb21wb25lbnQuX3JlZlByb3hpZXNbbmFtZV0gfHwgKGNvbXBvbmVudC5fcmVmUHJveGllc1tuYW1lXSA9IGZ1bmN0aW9uIChyZXNvbHZlZCkge1xuXHRcdGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LnJlZnMpIHtcblx0XHRcdGNvbXBvbmVudC5yZWZzW25hbWVdID0gcmVzb2x2ZWQ7XG5cdFx0XHRpZiAocmVzb2x2ZWQ9PT1udWxsKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb21wb25lbnQuX3JlZlByb3hpZXNbbmFtZV07XG5cdFx0XHRcdGNvbXBvbmVudCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuXG5mdW5jdGlvbiBhcHBseUV2ZW50Tm9ybWFsaXphdGlvbihyZWYpIHtcblx0dmFyIG5vZGVOYW1lID0gcmVmLm5vZGVOYW1lO1xuXHR2YXIgYXR0cmlidXRlcyA9IHJlZi5hdHRyaWJ1dGVzO1xuXG5cdGlmICghYXR0cmlidXRlcyB8fCB0eXBlb2Ygbm9kZU5hbWUhPT0nc3RyaW5nJykgeyByZXR1cm47IH1cblx0dmFyIHByb3BzID0ge307XG5cdGZvciAodmFyIGkgaW4gYXR0cmlidXRlcykge1xuXHRcdHByb3BzW2kudG9Mb3dlckNhc2UoKV0gPSBpO1xuXHR9XG5cdGlmIChwcm9wcy5vbmRvdWJsZWNsaWNrKSB7XG5cdFx0YXR0cmlidXRlcy5vbmRibGNsaWNrID0gYXR0cmlidXRlc1twcm9wcy5vbmRvdWJsZWNsaWNrXTtcblx0XHRkZWxldGUgYXR0cmlidXRlc1twcm9wcy5vbmRvdWJsZWNsaWNrXTtcblx0fVxuXHQvLyBmb3IgKnRleHR1YWwgaW5wdXRzKiAoaW5jbCB0ZXh0YXJlYSksIG5vcm1hbGl6ZSBgb25DaGFuZ2VgIC0+IGBvbklucHV0YDpcblx0aWYgKHByb3BzLm9uY2hhbmdlICYmIChub2RlTmFtZT09PSd0ZXh0YXJlYScgfHwgKG5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0naW5wdXQnICYmICEvXmZpbHxjaGV8cmFkL2kudGVzdChhdHRyaWJ1dGVzLnR5cGUpKSkpIHtcblx0XHR2YXIgbm9ybWFsaXplZCA9IHByb3BzLm9uaW5wdXQgfHwgJ29uaW5wdXQnO1xuXHRcdGlmICghYXR0cmlidXRlc1tub3JtYWxpemVkXSkge1xuXHRcdFx0YXR0cmlidXRlc1tub3JtYWxpemVkXSA9IG11bHRpaG9vayhbYXR0cmlidXRlc1tub3JtYWxpemVkXSwgYXR0cmlidXRlc1twcm9wcy5vbmNoYW5nZV1dKTtcblx0XHRcdGRlbGV0ZSBhdHRyaWJ1dGVzW3Byb3BzLm9uY2hhbmdlXTtcblx0XHR9XG5cdH1cbn1cblxuXG5mdW5jdGlvbiBhcHBseUNsYXNzTmFtZSh2bm9kZSkge1xuXHR2YXIgYSA9IHZub2RlLmF0dHJpYnV0ZXMgfHwgKHZub2RlLmF0dHJpYnV0ZXMgPSB7fSk7XG5cdGNsYXNzTmFtZURlc2NyaXB0b3IuZW51bWVyYWJsZSA9ICdjbGFzc05hbWUnIGluIGE7XG5cdGlmIChhLmNsYXNzTmFtZSkgeyBhLmNsYXNzID0gYS5jbGFzc05hbWU7IH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsICdjbGFzc05hbWUnLCBjbGFzc05hbWVEZXNjcmlwdG9yKTtcbn1cblxuXG52YXIgY2xhc3NOYW1lRGVzY3JpcHRvciA9IHtcblx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5jbGFzczsgfSxcblx0c2V0OiBmdW5jdGlvbih2KSB7IHRoaXMuY2xhc3MgPSB2OyB9XG59O1xuXG5mdW5jdGlvbiBleHRlbmQoYmFzZSwgcHJvcHMpIHtcblx0dmFyIGFyZ3VtZW50cyQxID0gYXJndW1lbnRzO1xuXG5cdGZvciAodmFyIGk9MSwgb2JqID0gKHZvaWQgMCk7IGk8YXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKChvYmogPSBhcmd1bWVudHMkMVtpXSkpIHtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmopIHtcblx0XHRcdFx0aWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0YmFzZVtrZXldID0gb2JqW2tleV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGJhc2U7XG59XG5cblxuZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMoYSwgYikge1xuXHRmb3IgKHZhciBpIGluIGEpIHsgaWYgKCEoaSBpbiBiKSkgeyByZXR1cm4gdHJ1ZTsgfSB9XG5cdGZvciAodmFyIGkkMSBpbiBiKSB7IGlmIChhW2kkMV0hPT1iW2kkMV0pIHsgcmV0dXJuIHRydWU7IH0gfVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cblxuZnVuY3Rpb24gZmluZERPTU5vZGUoY29tcG9uZW50KSB7XG5cdHJldHVybiBjb21wb25lbnQgJiYgY29tcG9uZW50LmJhc2UgfHwgY29tcG9uZW50O1xufVxuXG5cbmZ1bmN0aW9uIEYoKXt9XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsYXNzKG9iaikge1xuXHRmdW5jdGlvbiBjbChwcm9wcywgY29udGV4dCkge1xuXHRcdGJpbmRBbGwodGhpcyk7XG5cdFx0Q29tcG9uZW50JDEuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCwgQllQQVNTX0hPT0spO1xuXHRcdG5ld0NvbXBvbmVudEhvb2suY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCk7XG5cdH1cblxuXHRvYmogPSBleHRlbmQoeyBjb25zdHJ1Y3RvcjogY2wgfSwgb2JqKTtcblxuXHQvLyBXZSBuZWVkIHRvIGFwcGx5IG1peGlucyBoZXJlIHNvIHRoYXQgZ2V0RGVmYXVsdFByb3BzIGlzIGNvcnJlY3RseSBtaXhlZFxuXHRpZiAob2JqLm1peGlucykge1xuXHRcdGFwcGx5TWl4aW5zKG9iaiwgY29sbGF0ZU1peGlucyhvYmoubWl4aW5zKSk7XG5cdH1cblx0aWYgKG9iai5zdGF0aWNzKSB7XG5cdFx0ZXh0ZW5kKGNsLCBvYmouc3RhdGljcyk7XG5cdH1cblx0aWYgKG9iai5wcm9wVHlwZXMpIHtcblx0XHRjbC5wcm9wVHlwZXMgPSBvYmoucHJvcFR5cGVzO1xuXHR9XG5cdGlmIChvYmouZGVmYXVsdFByb3BzKSB7XG5cdFx0Y2wuZGVmYXVsdFByb3BzID0gb2JqLmRlZmF1bHRQcm9wcztcblx0fVxuXHRpZiAob2JqLmdldERlZmF1bHRQcm9wcykge1xuXHRcdGNsLmRlZmF1bHRQcm9wcyA9IG9iai5nZXREZWZhdWx0UHJvcHMuY2FsbChjbCk7XG5cdH1cblxuXHRGLnByb3RvdHlwZSA9IENvbXBvbmVudCQxLnByb3RvdHlwZTtcblx0Y2wucHJvdG90eXBlID0gZXh0ZW5kKG5ldyBGKCksIG9iaik7XG5cblx0Y2wuZGlzcGxheU5hbWUgPSBvYmouZGlzcGxheU5hbWUgfHwgJ0NvbXBvbmVudCc7XG5cblx0cmV0dXJuIGNsO1xufVxuXG5cbi8vIEZsYXR0ZW4gYW4gQXJyYXkgb2YgbWl4aW5zIHRvIGEgbWFwIG9mIG1ldGhvZCBuYW1lIHRvIG1peGluIGltcGxlbWVudGF0aW9uc1xuZnVuY3Rpb24gY29sbGF0ZU1peGlucyhtaXhpbnMpIHtcblx0dmFyIGtleWVkID0ge307XG5cdGZvciAodmFyIGk9MDsgaTxtaXhpbnMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgbWl4aW4gPSBtaXhpbnNbaV07XG5cdFx0Zm9yICh2YXIga2V5IGluIG1peGluKSB7XG5cdFx0XHRpZiAobWl4aW4uaGFzT3duUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgbWl4aW5ba2V5XT09PSdmdW5jdGlvbicpIHtcblx0XHRcdFx0KGtleWVkW2tleV0gfHwgKGtleWVkW2tleV09W10pKS5wdXNoKG1peGluW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4ga2V5ZWQ7XG59XG5cblxuLy8gYXBwbHkgYSBtYXBwaW5nIG9mIEFycmF5cyBvZiBtaXhpbiBtZXRob2RzIHRvIGEgY29tcG9uZW50IHByb3RvdHlwZVxuZnVuY3Rpb24gYXBwbHlNaXhpbnMocHJvdG8sIG1peGlucykge1xuXHRmb3IgKHZhciBrZXkgaW4gbWl4aW5zKSB7IGlmIChtaXhpbnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdHByb3RvW2tleV0gPSBtdWx0aWhvb2soXG5cdFx0XHRtaXhpbnNba2V5XS5jb25jYXQocHJvdG9ba2V5XSB8fCBBUlIpLFxuXHRcdFx0a2V5PT09J2dldERlZmF1bHRQcm9wcycgfHwga2V5PT09J2dldEluaXRpYWxTdGF0ZScgfHwga2V5PT09J2dldENoaWxkQ29udGV4dCdcblx0XHQpO1xuXHR9IH1cbn1cblxuXG5mdW5jdGlvbiBiaW5kQWxsKGN0eCkge1xuXHRmb3IgKHZhciBpIGluIGN0eCkge1xuXHRcdHZhciB2ID0gY3R4W2ldO1xuXHRcdGlmICh0eXBlb2Ygdj09PSdmdW5jdGlvbicgJiYgIXYuX19ib3VuZCAmJiAhQVVUT0JJTkRfQkxBQ0tMSVNULmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHQoY3R4W2ldID0gdi5iaW5kKGN0eCkpLl9fYm91bmQgPSB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5cbmZ1bmN0aW9uIGNhbGxNZXRob2QoY3R4LCBtLCBhcmdzKSB7XG5cdGlmICh0eXBlb2YgbT09PSdzdHJpbmcnKSB7XG5cdFx0bSA9IGN0eC5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbbV07XG5cdH1cblx0aWYgKHR5cGVvZiBtPT09J2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBtLmFwcGx5KGN0eCwgYXJncyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gbXVsdGlob29rKGhvb2tzLCBza2lwRHVwbGljYXRlcykge1xuXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGFyZ3VtZW50cyQxID0gYXJndW1lbnRzO1xuXHRcdHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cdFx0dmFyIHJldDtcblx0XHRmb3IgKHZhciBpPTA7IGk8aG9va3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciByID0gY2FsbE1ldGhvZCh0aGlzJDEsIGhvb2tzW2ldLCBhcmd1bWVudHMkMSk7XG5cblx0XHRcdGlmIChza2lwRHVwbGljYXRlcyAmJiByIT1udWxsKSB7XG5cdFx0XHRcdGlmICghcmV0KSB7IHJldCA9IHt9OyB9XG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiByKSB7IGlmIChyLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRyZXRba2V5XSA9IHJba2V5XTtcblx0XHRcdFx0fSB9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICh0eXBlb2YgciE9PSd1bmRlZmluZWQnKSB7IHJldCA9IHI7IH1cblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn1cblxuXG5mdW5jdGlvbiBuZXdDb21wb25lbnRIb29rKHByb3BzLCBjb250ZXh0KSB7XG5cdHByb3BzSG9vay5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KTtcblx0dGhpcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gbXVsdGlob29rKFtwcm9wc0hvb2ssIHRoaXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB8fCAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyddKTtcblx0dGhpcy5yZW5kZXIgPSBtdWx0aWhvb2soW3Byb3BzSG9vaywgYmVmb3JlUmVuZGVyLCB0aGlzLnJlbmRlciB8fCAncmVuZGVyJywgYWZ0ZXJSZW5kZXJdKTtcbn1cblxuXG5mdW5jdGlvbiBwcm9wc0hvb2socHJvcHMsIGNvbnRleHQpIHtcblx0aWYgKCFwcm9wcykgeyByZXR1cm47IH1cblxuXHQvLyBSZWFjdCBhbm5veWluZ2x5IHNwZWNpYWwtY2FzZXMgc2luZ2xlIGNoaWxkcmVuLCBhbmQgc29tZSByZWFjdCBjb21wb25lbnRzIGFyZSByaWRpY3Vsb3VzbHkgc3RyaWN0IGFib3V0IHRoaXMuXG5cdHZhciBjID0gcHJvcHMuY2hpbGRyZW47XG5cdGlmIChjICYmIEFycmF5LmlzQXJyYXkoYykgJiYgYy5sZW5ndGg9PT0xICYmICh0eXBlb2YgY1swXT09PSdzdHJpbmcnIHx8IHR5cGVvZiBjWzBdPT09J2Z1bmN0aW9uJyB8fCBjWzBdIGluc3RhbmNlb2YgVk5vZGUpKSB7XG5cdFx0cHJvcHMuY2hpbGRyZW4gPSBjWzBdO1xuXG5cdFx0Ly8gYnV0IGl0cyB0b3RhbGx5IHN0aWxsIGdvaW5nIHRvIGJlIGFuIEFycmF5LlxuXHRcdGlmIChwcm9wcy5jaGlsZHJlbiAmJiB0eXBlb2YgcHJvcHMuY2hpbGRyZW49PT0nb2JqZWN0Jykge1xuXHRcdFx0cHJvcHMuY2hpbGRyZW4ubGVuZ3RoID0gMTtcblx0XHRcdHByb3BzLmNoaWxkcmVuWzBdID0gcHJvcHMuY2hpbGRyZW47XG5cdFx0fVxuXHR9XG5cblx0Ly8gYWRkIHByb3B0eXBlIGNoZWNraW5nXG5cdGlmIChERVYpIHtcblx0XHR2YXIgY3RvciA9IHR5cGVvZiB0aGlzPT09J2Z1bmN0aW9uJyA/IHRoaXMgOiB0aGlzLmNvbnN0cnVjdG9yLFxuXHRcdFx0cHJvcFR5cGVzID0gdGhpcy5wcm9wVHlwZXMgfHwgY3Rvci5wcm9wVHlwZXM7XG5cdFx0dmFyIGRpc3BsYXlOYW1lID0gdGhpcy5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWU7XG5cblx0XHRpZiAocHJvcFR5cGVzKSB7XG5cdFx0XHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5jaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIHByb3BzLCAncHJvcCcsIGRpc3BsYXlOYW1lKTtcblx0XHR9XG5cdH1cbn1cblxuXG5mdW5jdGlvbiBiZWZvcmVSZW5kZXIocHJvcHMpIHtcblx0Y3VycmVudENvbXBvbmVudCA9IHRoaXM7XG59XG5cbmZ1bmN0aW9uIGFmdGVyUmVuZGVyKCkge1xuXHRpZiAoY3VycmVudENvbXBvbmVudD09PXRoaXMpIHtcblx0XHRjdXJyZW50Q29tcG9uZW50ID0gbnVsbDtcblx0fVxufVxuXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50JDEocHJvcHMsIGNvbnRleHQsIG9wdHMpIHtcblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3ByZWFjdF9fW1wiYVwiIC8qIENvbXBvbmVudCAqL10uY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCk7XG5cdHRoaXMuc3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSA/IHRoaXMuZ2V0SW5pdGlhbFN0YXRlKCkgOiB7fTtcblx0dGhpcy5yZWZzID0ge307XG5cdHRoaXMuX3JlZlByb3hpZXMgPSB7fTtcblx0aWYgKG9wdHMhPT1CWVBBU1NfSE9PSykge1xuXHRcdG5ld0NvbXBvbmVudEhvb2suY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCk7XG5cdH1cbn1cbmV4dGVuZChDb21wb25lbnQkMS5wcm90b3R5cGUgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3ByZWFjdF9fW1wiYVwiIC8qIENvbXBvbmVudCAqL10oKSwge1xuXHRjb25zdHJ1Y3RvcjogQ29tcG9uZW50JDEsXG5cblx0aXNSZWFjdENvbXBvbmVudDoge30sXG5cblx0cmVwbGFjZVN0YXRlOiBmdW5jdGlvbihzdGF0ZSwgY2FsbGJhY2spIHtcblx0XHR2YXIgdGhpcyQxID0gdGhpcztcblxuXHRcdHRoaXMuc2V0U3RhdGUoc3RhdGUsIGNhbGxiYWNrKTtcblx0XHRmb3IgKHZhciBpIGluIHRoaXMkMS5zdGF0ZSkge1xuXHRcdFx0aWYgKCEoaSBpbiBzdGF0ZSkpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMkMS5zdGF0ZVtpXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Z2V0RE9NTm9kZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuYmFzZTtcblx0fSxcblxuXHRpc01vdW50ZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiAhIXRoaXMuYmFzZTtcblx0fVxufSk7XG5cblxuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0KSB7XG5cdENvbXBvbmVudCQxLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpO1xufVxuRi5wcm90b3R5cGUgPSBDb21wb25lbnQkMS5wcm90b3R5cGU7XG5QdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBGKCk7XG5QdXJlQ29tcG9uZW50LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5QdXJlQ29tcG9uZW50LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmdW5jdGlvbihwcm9wcywgc3RhdGUpIHtcblx0cmV0dXJuIHNoYWxsb3dEaWZmZXJzKHRoaXMucHJvcHMsIHByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBzdGF0ZSk7XG59O1xuXG52YXIgaW5kZXggPSB7XG5cdHZlcnNpb246IHZlcnNpb24sXG5cdERPTTogRE9NLFxuXHRQcm9wVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLFxuXHRDaGlsZHJlbjogQ2hpbGRyZW4sXG5cdHJlbmRlcjogcmVuZGVyJDEsXG5cdGNyZWF0ZUNsYXNzOiBjcmVhdGVDbGFzcyxcblx0Y3JlYXRlRmFjdG9yeTogY3JlYXRlRmFjdG9yeSxcblx0Y3JlYXRlRWxlbWVudDogY3JlYXRlRWxlbWVudCxcblx0Y2xvbmVFbGVtZW50OiBjbG9uZUVsZW1lbnQkMSxcblx0aXNWYWxpZEVsZW1lbnQ6IGlzVmFsaWRFbGVtZW50LFxuXHRmaW5kRE9NTm9kZTogZmluZERPTU5vZGUsXG5cdHVubW91bnRDb21wb25lbnRBdE5vZGU6IHVubW91bnRDb21wb25lbnRBdE5vZGUsXG5cdENvbXBvbmVudDogQ29tcG9uZW50JDEsXG5cdFB1cmVDb21wb25lbnQ6IFB1cmVDb21wb25lbnQsXG5cdHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcixcblx0X19zcHJlYWQ6IGV4dGVuZFxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChpbmRleCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVhY3QtY29tcGF0LmVzLmpzLm1hcFxuXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygyOCkpKVxuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNS4zJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG4vKioqLyB9KSxcbi8qIDIzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDI1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgY29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIElPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGFzYyA9IF9fd2VicGFja19yZXF1aXJlX18oOTUpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG4vKioqLyB9KSxcbi8qIDI5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubm9vcCA9IGV4cG9ydHMuYXBwbHlJT1NGb290ZXJIYWNrID0gZXhwb3J0cy5kZWJvdW5jZSA9IGV4cG9ydHMuZml4U2FmYXJpU2Nyb2xsID0gZXhwb3J0cy5pc0lPU0RldmljZSA9IGV4cG9ydHMuaXNTYWZhcmkgPSBleHBvcnRzLmlzTW9iaWxlID0gZXhwb3J0cy5pc1NjcmVlbkJpZyA9IGV4cG9ydHMuaXNFbGVtZW50SW5WaWV3cG9ydCA9IGV4cG9ydHMub25NZXNzYWdlID0gZXhwb3J0cy5lbnN1cmVNZXRhVmlld3BvcnQgPSBleHBvcnRzLnJlcGxhY2VFeGlzdGluZ0tleXMgPSBleHBvcnRzLmFwcGVuZFBhcmFtc1RvVXJsID0gZXhwb3J0cy5ET01BSU4gPSB1bmRlZmluZWQ7XG5cbnZhciBfY3VzdG9tRXZlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0OSk7XG5cbnZhciBfY3VzdG9tRXZlbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3VzdG9tRXZlbnQpO1xuXG52YXIgX2lzVXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTApO1xuXG52YXIgX2lzVXJsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzVXJsKTtcblxudmFyIF91cmxQYXJzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTA0KTtcblxudmFyIF91cmxQYXJzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91cmxQYXJzZSk7XG5cbnZhciBfaXNvYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Myk7XG5cbnZhciBfaXNvYmplY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXNvYmplY3QpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgRE9NQUlOX1JFR0VYUCA9IC8oXFwudHlwZWZvcm0pXFwuKGNvbXxpbykkLztcbnZhciBET01BSU4gPSBleHBvcnRzLkRPTUFJTiA9ICdhZG1pbi50eXBlZm9ybS5jb20nO1xuXG52YXIgYXBwZW5kUGFyYW1zVG9VcmwgPSBleHBvcnRzLmFwcGVuZFBhcmFtc1RvVXJsID0gZnVuY3Rpb24gYXBwZW5kUGFyYW1zVG9VcmwodXJsLCBwYXJhbXMpIHtcbiAgdmFyIHF1ZXJ5UGFyYW1ldGVycyA9IFtdO1xuXG4gIHZhciBfVXJsUGFyc2UgPSAoMCwgX3VybFBhcnNlMi5kZWZhdWx0KSh1cmwsIHRydWUpLFxuICAgICAgcXVlcnkgPSBfVXJsUGFyc2UucXVlcnksXG4gICAgICBvcmlnaW4gPSBfVXJsUGFyc2Uub3JpZ2luLFxuICAgICAgcGF0aG5hbWUgPSBfVXJsUGFyc2UucGF0aG5hbWU7XG5cbiAgdmFyIHBhdGggPSBwYXRobmFtZS5yZXBsYWNlKC9cXC8kLywgJycpOyAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgdmFyIHBhcmFtZXRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBxdWVyeSwgcGFyYW1zKTtcblxuICBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBxdWVyeVBhcmFtZXRlcnMucHVzaChlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJzW2tleV0pKTtcbiAgfSk7XG5cbiAgcmV0dXJuICcnICsgb3JpZ2luICsgcGF0aCArICc/JyArIHF1ZXJ5UGFyYW1ldGVycy5qb2luKCcmJyk7XG59O1xuXG52YXIgcmVwbGFjZUV4aXN0aW5nS2V5cyA9IGV4cG9ydHMucmVwbGFjZUV4aXN0aW5nS2V5cyA9IGZ1bmN0aW9uIHJlcGxhY2VFeGlzdGluZ0tleXMob2JqLCByZXBsYWNlcikge1xuICByZXR1cm4gT2JqZWN0LmtleXMocmVwbGFjZXIpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBvbGRLZXkpIHtcbiAgICB2YXIgbmV3S2V5ID0gcmVwbGFjZXJbb2xkS2V5XTtcbiAgICBpZiAob2JqW29sZEtleV0gIT0gbnVsbCAmJiBvYmpbb2xkS2V5XSAhPT0gZmFsc2UpIHtcbiAgICAgIGFjY1tuZXdLZXldID0gb2JqW29sZEtleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufTtcblxudmFyIGVuc3VyZU1ldGFWaWV3cG9ydCA9IGV4cG9ydHMuZW5zdXJlTWV0YVZpZXdwb3J0ID0gZnVuY3Rpb24gZW5zdXJlTWV0YVZpZXdwb3J0KCkge1xuICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmlld3BvcnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9dmlld3BvcnRdJyk7XG4gIHZhciB2aWV3cG9ydENvbnRlbnQgPSAnd2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9MCc7XG5cbiAgaWYgKHZpZXdwb3J0KSB7XG4gICAgdmlld3BvcnQuc2V0QXR0cmlidXRlKCdjb250ZW50Jywgdmlld3BvcnRDb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbWV0YVRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTtcbiAgICBtZXRhVGFnLmNvbnRlbnQgPSB2aWV3cG9ydENvbnRlbnQ7XG4gICAgbWV0YVRhZy5uYW1lID0gJ3ZpZXdwb3J0JztcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGFUYWcpO1xuICB9XG59O1xuXG52YXIgYWNjZXB0TWVzc2FnZU9yaWdpbiA9IGZ1bmN0aW9uIGFjY2VwdE1lc3NhZ2VPcmlnaW4oZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIGRlYWwgd2l0aCBwb2x5bW9ycGhpc3RpYyBsZWdhY3k6IHNvbWUgZXZlbnRzIGNvbWUgZnJvbSBqUXVlcnksIG90aGVyIFZhbmlsbGEgSlNcbiAgdmFyIHJlID0gbmV3IFJlZ0V4cCgnXig/OmZ8aHQpdHAoPzpzKT86Ly8oW14vXSspJywgJ2ltJyk7XG4gIHZhciBtYXRjaGVzID0gZS5vcmlnaW4ubWF0Y2gocmUpO1xuICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDEpIHtcbiAgICB2YXIgZG9tYWluID0gbWF0Y2hlc1sxXS50b1N0cmluZygpO1xuXG4gICAgLy8gdG8gdGVzdCB0aGlzIGluIGxvY2FsIHlvdSB3aWxsIG5lZWQgdG8gd2hpdGVsaXN0IHlvdXIgbG9jYWwgZG9tYWluXG4gICAgaWYgKCFET01BSU5fUkVHRVhQLnRlc3QoZG9tYWluKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBvbk1lc3NhZ2UgPSBleHBvcnRzLm9uTWVzc2FnZSA9IGZ1bmN0aW9uIG9uTWVzc2FnZShlKSB7XG4gIGUgPSBlLm9yaWdpbmFsRXZlbnQgfHwgZTtcbiAgaWYgKCFhY2NlcHRNZXNzYWdlT3JpZ2luKGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCgwLCBfaXNVcmwyLmRlZmF1bHQpKGUuZGF0YSkpIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGUuZGF0YTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoKDAsIF9pc29iamVjdDIuZGVmYXVsdCkoZS5kYXRhKSAmJiBlLmRhdGEuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSkge1xuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBfY3VzdG9tRXZlbnQyLmRlZmF1bHQoZS5kYXRhLnR5cGUsIHsgZGV0YWlsOiBlLmRhdGEgfSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBfY3VzdG9tRXZlbnQyLmRlZmF1bHQoZS5kYXRhKSk7XG59O1xuXG52YXIgaXNFbGVtZW50SW5WaWV3cG9ydCA9IGV4cG9ydHMuaXNFbGVtZW50SW5WaWV3cG9ydCA9IGZ1bmN0aW9uIGlzRWxlbWVudEluVmlld3BvcnQoZWwpIHtcbiAgdmFyIHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIGRvY1dpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICB2YXIgZG9jSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHZhciBkb2NDZW50ZXJYID0gZG9jV2lkdGggLyAyO1xuICB2YXIgZG9jQ2VudGVyWSA9IGRvY0hlaWdodCAvIDI7XG5cbiAgLy8gQ2hlY2sgdGhhdCB0aGUgZWxlbWVudCBpcyBjb21wbGV0ZWx5IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0Li4uXG4gIHZhciBlbGVtZW50SXNGdWxseVZpc2libGUgPSByZWN0LnRvcCA+PSAwICYmIHJlY3QubGVmdCA+PSAwICYmIHJlY3QuYm90dG9tIDw9IGRvY0hlaWdodCAmJiByZWN0LnJpZ2h0IDw9IGRvY1dpZHRoO1xuXG4gIC8vIC4uLm9yIHRoYXQgaXQncyByaWdodCBhYm92ZSB0aGUgdmVydGljYWwgYW5kIGhvcml6b250YWwgY2VudGVycyBvZiB0aGUgcGFnZS4uLlxuICB2YXIgZWxlbWVudElzQWJvdmVUaGVGb2xkID0gcmVjdC50b3AgPD0gZG9jQ2VudGVyWSAmJiByZWN0LmxlZnQgPD0gZG9jQ2VudGVyWDtcblxuICAvLyAuLi5vciB0aGF0IGl0J3MgYXQgbGVhc3QgdGFraW5nIHVwIHRvIDEvMyBvZiB0aGUgcGFnZSFcbiAgdmFyIGVsZW1lbnRJc1BhcnRpYWxseVZpc2libGUgPSBkb2NIZWlnaHQgLSByZWN0LnRvcCA+PSBkb2NIZWlnaHQgLyAzO1xuXG4gIHJldHVybiBlbGVtZW50SXNGdWxseVZpc2libGUgfHwgZWxlbWVudElzQWJvdmVUaGVGb2xkIHx8IGVsZW1lbnRJc1BhcnRpYWxseVZpc2libGU7XG59O1xuXG52YXIgaXNTY3JlZW5CaWcgPSBleHBvcnRzLmlzU2NyZWVuQmlnID0gZnVuY3Rpb24gaXNTY3JlZW5CaWcoKSB7XG4gIHJldHVybiB3aW5kb3cuc2NyZWVuLndpZHRoID49IDEwMjQgJiYgd2luZG93LnNjcmVlbi5oZWlnaHQgPj0gNzY4O1xufTtcblxudmFyIGlzTW9iaWxlID0gZXhwb3J0cy5pc01vYmlsZSA9IGZ1bmN0aW9uIGlzTW9iaWxlKHVhKSB7XG4gIHJldHVybiAoL21vYmlsZXx0YWJsZXR8YW5kcm9pZC9pLnRlc3QodWEudG9Mb3dlckNhc2UoKSlcbiAgKTtcbn07XG5cbnZhciBpc1NhZmFyaSA9IGV4cG9ydHMuaXNTYWZhcmkgPSBmdW5jdGlvbiBpc1NhZmFyaSh1YSkge1xuICByZXR1cm4gKC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QodWEudG9Mb3dlckNhc2UoKSlcbiAgKTtcbn07XG5cbnZhciBpc0lPU0RldmljZSA9IGV4cG9ydHMuaXNJT1NEZXZpY2UgPSBmdW5jdGlvbiBpc0lPU0RldmljZSh1YSkge1xuICByZXR1cm4gKC9pcChob25lfG9kfGFkKS9pLnRlc3QodWEudG9Mb3dlckNhc2UoKSlcbiAgKTtcbn07XG5cbi8vIFJELTcxMlxudmFyIGZpeFNhZmFyaVNjcm9sbCA9IGV4cG9ydHMuZml4U2FmYXJpU2Nyb2xsID0gZnVuY3Rpb24gZml4U2FmYXJpU2Nyb2xsKGlmcmFtZSkge1xuICBpZiAoaXNNb2JpbGUobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgIWlzU2FmYXJpKG5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9yaWdpbmFsSGVpZ2h0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaWZyYW1lKS5oZWlnaHQ7XG4gICAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBpZnJhbWUub2Zmc2V0SGVpZ2h0ICsgMSArICdweCcpO1xuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBvcmlnaW5hbEhlaWdodCk7XG4gICAgICB9LCAxKTtcbiAgICB9LCAxMDAwKTtcbiAgfSk7XG59O1xuXG52YXIgZGVib3VuY2UgPSBleHBvcnRzLmRlYm91bmNlID0gZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgY29udGV4dCkge1xuICB2YXIgdGltZW91dCA9IHZvaWQgMDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGVib3VuY2VkID0gZnVuY3Rpb24gZGVib3VuY2VkKCkge1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBmdW5jLmNhbGwuYXBwbHkoZnVuYywgW2NvbnRleHRdLmNvbmNhdChhcmdzKSk7XG4gICAgfTtcblxuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dChkZWJvdW5jZWQsIHdhaXQpO1xuICB9O1xufTtcblxuLy8gRml4IFJELTczMSwgZm9vdGVyIG5vdCBmdWxseSB2aXNpYmxlIG9uIGlPUyBkZXZpY2VzXG52YXIgYXBwbHlJT1NGb290ZXJIYWNrID0gZXhwb3J0cy5hcHBseUlPU0Zvb3RlckhhY2sgPSBmdW5jdGlvbiBhcHBseUlPU0Zvb3RlckhhY2soZWxlbWVudCkge1xuICBpZiAoIWlzSU9TRGV2aWNlKG5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3Njcm9sbGluZycsICdubycpO1xuICBlbGVtZW50LnN0eWxlLmhlaWdodCA9ICcxcHgnO1xuICBlbGVtZW50LnN0eWxlLm1pbkhlaWdodCA9ICcxMDAlJztcbn07XG5cbnZhciBub29wID0gZXhwb3J0cy5ub29wID0gZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcblxuLyoqKi8gfSksXG4vKiAzMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuaWYgKF9fd2VicGFja19yZXF1aXJlX18oNikpIHtcbiAgdmFyIExJQlJBUlkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcbiAgdmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4gIHZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4gIHZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbiAgdmFyICR0eXBlZCA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xuICB2YXIgJGJ1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTAxKTtcbiAgdmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xuICB2YXIgYW5JbnN0YW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xuICB2YXIgcHJvcGVydHlEZXNjID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XG4gIHZhciBoaWRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG4gIHZhciByZWRlZmluZUFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xuICB2YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG4gIHZhciB0b0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG4gIHZhciB0b0luZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzQpO1xuICB2YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xuICB2YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG4gIHZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XG4gIHZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG4gIHZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG4gIHZhciBpc0FycmF5SXRlciA9IF9fd2VicGFja19yZXF1aXJlX18oOTIpO1xuICB2YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XG4gIHZhciBnZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xuICB2YXIgZ09QTiA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpLmY7XG4gIHZhciBnZXRJdGVyRm4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk0KTtcbiAgdmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xuICB2YXIgd2tzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbiAgdmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XG4gIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nyk7XG4gIHZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcbiAgdmFyICRpdGVyRGV0ZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCk7XG4gIHZhciBzZXRTcGVjaWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG4gIHZhciBhcnJheUZpbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk2KTtcbiAgdmFyIGFycmF5Q29weVdpdGhpbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0KTtcbiAgdmFyICREUCA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4gIHZhciAkR09QRCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xuICB2YXIgZFAgPSAkRFAuZjtcbiAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICB2YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgdmFyIFVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheTtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG4gIHZhciBTSEFSRURfQlVGRkVSID0gJ1NoYXJlZCcgKyBBUlJBWV9CVUZGRVI7XG4gIHZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG4gIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheVtQUk9UT1RZUEVdO1xuICB2YXIgJEFycmF5QnVmZmVyID0gJGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbiAgdmFyICREYXRhVmlldyA9ICRidWZmZXIuRGF0YVZpZXc7XG4gIHZhciBhcnJheUZvckVhY2ggPSBjcmVhdGVBcnJheU1ldGhvZCgwKTtcbiAgdmFyIGFycmF5RmlsdGVyID0gY3JlYXRlQXJyYXlNZXRob2QoMik7XG4gIHZhciBhcnJheVNvbWUgPSBjcmVhdGVBcnJheU1ldGhvZCgzKTtcbiAgdmFyIGFycmF5RXZlcnkgPSBjcmVhdGVBcnJheU1ldGhvZCg0KTtcbiAgdmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xuICB2YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbiAgdmFyIGFycmF5SW5jbHVkZXMgPSBjcmVhdGVBcnJheUluY2x1ZGVzKHRydWUpO1xuICB2YXIgYXJyYXlJbmRleE9mID0gY3JlYXRlQXJyYXlJbmNsdWRlcyhmYWxzZSk7XG4gIHZhciBhcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JzLnZhbHVlcztcbiAgdmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG4gIHZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xuICB2YXIgYXJyYXlMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2Y7XG4gIHZhciBhcnJheVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlO1xuICB2YXIgYXJyYXlSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQ7XG4gIHZhciBhcnJheUpvaW4gPSBBcnJheVByb3RvLmpvaW47XG4gIHZhciBhcnJheVNvcnQgPSBBcnJheVByb3RvLnNvcnQ7XG4gIHZhciBhcnJheVNsaWNlID0gQXJyYXlQcm90by5zbGljZTtcbiAgdmFyIGFycmF5VG9TdHJpbmcgPSBBcnJheVByb3RvLnRvU3RyaW5nO1xuICB2YXIgYXJyYXlUb0xvY2FsZVN0cmluZyA9IEFycmF5UHJvdG8udG9Mb2NhbGVTdHJpbmc7XG4gIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgdmFyIFRBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgdmFyIFRZUEVEX0NPTlNUUlVDVE9SID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpO1xuICB2YXIgREVGX0NPTlNUUlVDVE9SID0gdWlkKCdkZWZfY29uc3RydWN0b3InKTtcbiAgdmFyIEFMTF9DT05TVFJVQ1RPUlMgPSAkdHlwZWQuQ09OU1RSO1xuICB2YXIgVFlQRURfQVJSQVkgPSAkdHlwZWQuVFlQRUQ7XG4gIHZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG4gIHZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG5cbiAgdmFyICRtYXAgPSBjcmVhdGVBcnJheU1ldGhvZCgxLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXSA9PT0gMTtcbiAgfSk7XG5cbiAgdmFyIEZPUkNFRF9TRVQgPSAhIVVpbnQ4QXJyYXkgJiYgISFVaW50OEFycmF5W1BST1RPVFlQRV0uc2V0ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgVWludDhBcnJheSgxKS5zZXQoe30pO1xuICB9KTtcblxuICB2YXIgdG9PZmZzZXQgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIGlmIChpc09iamVjdChpdCkgJiYgVFlQRURfQVJSQVkgaW4gaXQpIHJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIChDLCBsZW5ndGgpIHtcbiAgICBpZiAoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEnKTtcbiAgICB9IHJldHVybiBuZXcgQyhsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBzcGVjaWVzRnJvbUxpc3QgPSBmdW5jdGlvbiAoTywgbGlzdCkge1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChpdCwga2V5LCBpbnRlcm5hbCkge1xuICAgIGRQKGl0LCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kW2ludGVybmFsXTsgfSB9KTtcbiAgfTtcblxuICB2YXIgJGZyb20gPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIWlzQXJyYXlJdGVyKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKykge1xuICAgICAgICB2YWx1ZXMucHVzaChzdGVwLnZhbHVlKTtcbiAgICAgIH0gTyA9IHZhbHVlcztcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcgJiYgYUxlbiA+IDIpIG1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKSwgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciAkb2YgPSBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gaU9TIFNhZmFyaSA2LnggZmFpbHMgaGVyZVxuICB2YXIgVE9fTE9DQUxFX0JVRyA9ICEhVWludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9Mb2NhbGVTdHJpbmcuY2FsbChuZXcgVWludDhBcnJheSgxKSk7IH0pO1xuXG4gIHZhciAkdG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlUb0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfQlVHID8gYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpKSA6IHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBwcm90byA9IHtcbiAgICBjb3B5V2l0aGluOiBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUNvcHlXaXRoaW4uY2FsbCh2YWxpZGF0ZSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5RmlsbC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5RmlsdGVyKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLFxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmRJbmRleCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICBhcnJheUZvckVhY2godmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluY2x1ZGVzKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiAkbWFwKHZhbGlkYXRlKHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2VSaWdodC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGUodGhhdCkubGVuZ3RoO1xuICAgICAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICAgICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5U29tZSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gICAgICB2YXIgTyA9IHZhbGlkYXRlKHRoaXMpO1xuICAgICAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICAgICAgdmFyICRiZWdpbiA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gJGJlZ2luKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyICRzbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICAgIHZhbGlkYXRlKHRoaXMpO1xuICAgIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHNbMV0sIDEpO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB2YXIgc3JjID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgoc3JjLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5RW50cmllcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlLZXlzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGFyZ2V0KVxuICAgICAgJiYgdGFyZ2V0W1RZUEVEX0FSUkFZXVxuICAgICAgJiYgdHlwZW9mIGtleSAhPSAnc3ltYm9sJ1xuICAgICAgJiYga2V5IGluIHRhcmdldFxuICAgICAgJiYgU3RyaW5nKCtrZXkpID09IFN0cmluZyhrZXkpO1xuICB9O1xuICB2YXIgJGdldERlc2MgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICBpZiAoaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgICYmIGlzT2JqZWN0KGRlc2MpXG4gICAgICAmJiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICAgICYmICFoYXMoZGVzYywgJ2dldCcpXG4gICAgICAmJiAhaGFzKGRlc2MsICdzZXQnKVxuICAgICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAgICYmICFkZXNjLmNvbmZpZ3VyYWJsZVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ3dyaXRhYmxlJykgfHwgZGVzYy53cml0YWJsZSlcbiAgICAgICYmICghaGFzKGRlc2MsICdlbnVtZXJhYmxlJykgfHwgZGVzYy5lbnVtZXJhYmxlKVxuICAgICkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IHJldHVybiBkUCh0YXJnZXQsIGtleSwgZGVzYyk7XG4gIH07XG5cbiAgaWYgKCFBTExfQ09OU1RSVUNUT1JTKSB7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mID0gJHNldERlc2M7XG4gIH1cblxuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFBTExfQ09OU1RSVUNUT1JTLCAnT2JqZWN0Jywge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldERlc2MsXG4gICAgZGVmaW5lUHJvcGVydHk6ICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gICAgYXJyYXlUb1N0cmluZyA9IGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0aGlzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogJHNsaWNlLFxuICAgIHNldDogJHNldCxcbiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKCkgeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6IGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbVFlQRURfQVJSQVldOyB9XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIEJZVEVTLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgQ0xBTVBFRCA9ICEhQ0xBTVBFRDtcbiAgICB2YXIgTkFNRSA9IEtFWSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBLRVk7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgS0VZO1xuICAgIHZhciBUeXBlZEFycmF5ID0gZ2xvYmFsW05BTUVdO1xuICAgIHZhciBCYXNlID0gVHlwZWRBcnJheSB8fCB7fTtcbiAgICB2YXIgVEFDID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KTtcbiAgICB2YXIgRk9SQ0VEID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlY7XG4gICAgdmFyIE8gPSB7fTtcbiAgICB2YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkgJiYgVHlwZWRBcnJheVtQUk9UT1RZUEVdO1xuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIHJldHVybiBkYXRhLnZbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhmZiA/IDB4ZmYgOiB2YWx1ZSAmIDB4ZmY7XG4gICAgICBkYXRhLnZbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCB2YWx1ZSwgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgZFAodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGgsIGtsYXNzO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3ICRBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIG9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSh0aGF0LCAnX2QnLCB7XG4gICAgICAgICAgYjogYnVmZmVyLFxuICAgICAgICAgIG86IG9mZnNldCxcbiAgICAgICAgICBsOiBieXRlTGVuZ3RoLFxuICAgICAgICAgIGU6IGxlbmd0aCxcbiAgICAgICAgICB2OiBuZXcgJERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5KDEpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSkgfHwgISRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheSgxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoaXRlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSwgdHJ1ZSkpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSk7XG4gICAgICAgIHZhciBrbGFzcztcbiAgICAgICAgLy8gYHdzYCBtb2R1bGUgYnVnLCB0ZW1wb3JhcmlseSByZW1vdmUgdmFsaWRhdGlvbiBsZW5ndGggZm9yIFVpbnQ4QXJyYXlcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC82NDVcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkgcmV0dXJuIG5ldyBCYXNlKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIHJldHVybiAkbGVuZ3RoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiAkb2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IEJhc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5KSkgaGlkZShUeXBlZEFycmF5LCBrZXksIEJhc2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IFR5cGVkQXJyYXlQcm90b3R5cGU7XG4gICAgICBpZiAoIUxJQlJBUlkpIFR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yID0gVHlwZWRBcnJheVByb3RvdHlwZVtJVEVSQVRPUl07XG4gICAgdmFyIENPUlJFQ1RfSVRFUl9OQU1FID0gISEkbmF0aXZlSXRlcmF0b3JcbiAgICAgICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpO1xuICAgIHZhciAkaXRlcmF0b3IgPSAkaXRlcmF0b3JzLnZhbHVlcztcbiAgICBoaWRlKFR5cGVkQXJyYXksIFRZUEVEX0NPTlNUUlVDVE9SLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRZUEVEX0FSUkFZLCBOQU1FKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgREVGX0NPTlNUUlVDVE9SLCBUeXBlZEFycmF5KTtcblxuICAgIGlmIChDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIHtcbiAgICAgIGRQKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRBRywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTXG4gICAgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgQmFzZS5vZi5jYWxsKFR5cGVkQXJyYXksIDEpOyB9KSwgTkFNRSwge1xuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAsIE5BTUUsIHByb3RvKTtcblxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRF9TRVQsIE5BTUUsIHsgc2V0OiAkc2V0IH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhQ09SUkVDVF9JVEVSX05BTUUsIE5BTUUsICRpdGVyYXRvcnMpO1xuXG4gICAgaWYgKCFMSUJSQVJZICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZykgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHsgc2xpY2U6ICRzbGljZSB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgVHlwZWRBcnJheShbMSwgMl0pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xuICAgIH0pKSwgTkFNRSwgeyB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nIH0pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYgKCFMSUJSQVJZICYmICFDT1JSRUNUX0lURVJfTkFNRSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBJVEVSQVRPUiwgJGl0ZXJhdG9yKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxuXG4vKioqLyB9KSxcbi8qIDMxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBNYXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyOSk7XG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgc2hhcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSkoJ21ldGFkYXRhJyk7XG52YXIgc3RvcmUgPSBzaGFyZWQuc3RvcmUgfHwgKHNoYXJlZC5zdG9yZSA9IG5ldyAoX193ZWJwYWNrX3JlcXVpcmVfXygxMzIpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuXG5cbi8qKiovIH0pLFxuLyogMzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIFN5bWJvbC5mb3IgJiZcbiAgICBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG4gICAgMHhlYWM3O1xuXG4gIHZhciBpc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXG4gICAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDQpKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0NykoKTtcbn1cblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcblxuLyoqKi8gfSksXG4vKiAzMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgTUVUQSA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xudmFyIHNldERlc2MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIV9fd2VicGFja19yZXF1aXJlX18oMykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5cbi8qKiovIH0pLFxuLyogMzQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgX193ZWJwYWNrX3JlcXVpcmVfXygxMikoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMzYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuXG5cbi8qKiovIH0pLFxuLyogMzggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMCk7XG52YXIgZW51bUJ1Z0tleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGRQcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcbnZhciBlbnVtQnVnS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oNzkpO1xudmFyIElFX1BST1RPID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OCkoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NikoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIF9fd2VicGFja19yZXF1aXJlX18oODApLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEwKTtcbnZhciBoaWRkZW5LZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSkuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGRQID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgU1BFQ0lFUyA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMik7XG52YXIgaXNBcnJheUl0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkyKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGdldEl0ZXJGbiA9IF9fd2VicGFja19yZXF1aXJlX18oOTQpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuXG5cbi8qKiovIH0pLFxuLyogNDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQ2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBkZWYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLmY7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgVEFHID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQ3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBkZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIHNwYWNlcyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuXG5cbi8qKiovIH0pLFxuLyogNDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuXG4vKioqLyB9KSxcbi8qIDQ5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDUwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbnZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG4vKioqLyB9KSxcbi8qIDUxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5leHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuXG4vKioqLyB9KSxcbi8qIDUzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG52YXIgVEFHID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmluamVjdEdsb2JhbCA9IGV4cG9ydHMuY3NzID0gdW5kZWZpbmVkO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX2NyZWF0ZUVtb3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NSk7XG5cbnZhciBfY3JlYXRlRW1vdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVFbW90aW9uKTtcblxudmFyIF9jcmVhdGVFbW90aW9uU3R5bGVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTcpO1xuXG52YXIgX2NyZWF0ZUVtb3Rpb25TdHlsZWQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlRW1vdGlvblN0eWxlZCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBjb250ZXh0ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB7fTtcblxudmFyIGVtb3Rpb24gPSAoMCwgX2NyZWF0ZUVtb3Rpb24yLmRlZmF1bHQpKGNvbnRleHQpO1xuXG52YXIgY3NzID0gZXhwb3J0cy5jc3MgPSBlbW90aW9uLmNzcztcbnZhciBpbmplY3RHbG9iYWwgPSBleHBvcnRzLmluamVjdEdsb2JhbCA9IGVtb3Rpb24uaW5qZWN0R2xvYmFsO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVFbW90aW9uU3R5bGVkMi5kZWZhdWx0KShlbW90aW9uLCBfcmVhY3QyLmRlZmF1bHQpO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oNTApKSlcblxuLyoqKi8gfSksXG4vKiA1NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHt9KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuXG4vKioqLyB9KSxcbi8qIDU4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGNvZiA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xudmFyIE1BVENIID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDYwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBJVEVSQVRPUiA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDYxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBoaWRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG52YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xudmFyIHdrcyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcbiAgdmFyIGZucyA9IGV4ZWMoZGVmaW5lZCwgU1lNQk9MLCAnJ1tLRVldKTtcbiAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICB2YXIgcnhmbiA9IGZuc1sxXTtcbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSkpIHtcbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcblxuXG4vKioqLyB9KSxcbi8qIDYzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBTUEVDSUVTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDY0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciByZWRlZmluZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xudmFyIHJlZGVmaW5lQWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XG52YXIgbWV0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xudmFyIGZvck9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG52YXIgYW5JbnN0YW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgJGl0ZXJEZXRlY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgaGlkZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xudmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xudmFyIFRZUEVEID0gdWlkKCd0eXBlZF9hcnJheScpO1xudmFyIFZJRVcgPSB1aWQoJ3ZpZXcnKTtcbnZhciBBQlYgPSAhIShnbG9iYWwuQXJyYXlCdWZmZXIgJiYgZ2xvYmFsLkRhdGFWaWV3KTtcbnZhciBDT05TVFIgPSBBQlY7XG52YXIgaSA9IDA7XG52YXIgbCA9IDk7XG52YXIgVHlwZWQ7XG5cbnZhciBUeXBlZEFycmF5Q29uc3RydWN0b3JzID0gKFxuICAnSW50OEFycmF5LFVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXknXG4pLnNwbGl0KCcsJyk7XG5cbndoaWxlIChpIDwgbCkge1xuICBpZiAoVHlwZWQgPSBnbG9iYWxbVHlwZWRBcnJheUNvbnN0cnVjdG9yc1tpKytdXSkge1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBUWVBFRCwgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICB9IGVsc2UgQ09OU1RSID0gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBQlY6IEFCVixcbiAgQ09OU1RSOiBDT05TVFIsXG4gIFRZUEVEOiBUWVBFRCxcbiAgVklFVzogVklFV1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDY2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpIHx8ICFfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEsgPSBNYXRoLnJhbmRvbSgpO1xuICAvLyBJbiBGRiB0aHJvd3Mgb25seSBkZWZpbmUgbWV0aG9kc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYsIG5vLXVzZWxlc3MtY2FsbFxuICBfX2RlZmluZVNldHRlcl9fLmNhbGwobnVsbCwgSywgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgZGVsZXRlIF9fd2VicGFja19yZXF1aXJlX18oMilbS107XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDY3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSBBW2xlbmd0aF0gPSBhcmd1bWVudHNbbGVuZ3RoXTtcbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBjdHggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcbnZhciBmb3JPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDY5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxuZnVuY3Rpb24gbWFrZUVtcHR5RnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFyZztcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW5kIGRpc2NhcmRzIGlucHV0czsgaXQgaGFzIG5vIHNpZGUgZWZmZWN0cy4gVGhpcyBpc1xuICogcHJpbWFyaWx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5IGZvciBvdmVycmlkYWJsZSBmdW5jdGlvbiBlbmRwb2ludHMgd2hpY2hcbiAqIGFsd2F5cyBuZWVkIHRvIGJlIGNhbGxhYmxlLCBzaW5jZSBKUyBsYWNrcyBhIG51bGwtY2FsbCBpZGlvbSBhbGEgQ29jb2EuXG4gKi9cbnZhciBlbXB0eUZ1bmN0aW9uID0gZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9O1xuXG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zID0gbWFrZUVtcHR5RnVuY3Rpb247XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UgPSBtYWtlRW1wdHlGdW5jdGlvbihmYWxzZSk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKHRydWUpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwgPSBtYWtlRW1wdHlGdW5jdGlvbihudWxsKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUaGlzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcztcbn07XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHJldHVybiBhcmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVtcHR5RnVuY3Rpb247XG5cbi8qKiovIH0pLFxuLyogNzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cblxuXG4vKipcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cbiAqXG4gKiBQcm92aWRlIHNwcmludGYtc3R5bGUgZm9ybWF0IChvbmx5ICVzIGlzIHN1cHBvcnRlZCkgYW5kIGFyZ3VtZW50c1xuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXG4gKiBleHBlY3RpbmcuXG4gKlxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcbiAqIHdpbGwgcmVtYWluIHRvIGVuc3VyZSBsb2dpYyBkb2VzIG5vdCBkaWZmZXIgaW4gcHJvZHVjdGlvbi5cbiAqL1xuXG52YXIgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCk7XG5cbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcignTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArICdmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgIH0pKTtcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgfVxuXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcblxuLyoqKi8gfSksXG4vKiA3MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG5cblxuLyoqKi8gfSksXG4vKiA3MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX3NwaW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OSk7XG5cbnZhciBfc3BpbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zcGluKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgbGluZXM6IDE2LFxuICBsZW5ndGg6IDMsXG4gIHdpZHRoOiAzLFxuICByYWRpdXM6IDE0LFxuICBjb2xvcjogJyNGRkZGRkYnLFxuICBzcGVlZDogMi4xLFxuICB0cmFpbDogNjAsXG4gIHNoYWRvdzogZmFsc2UsXG4gIGh3YWNjZWw6IGZhbHNlLFxuICB0b3A6ICc1MCUnLFxuICBsZWZ0OiAnNTAlJyxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHpJbmRleDogOTk5XG59O1xuXG52YXIgU3Bpbm5lciA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTcGlubmVyLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTcGlubmVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTcGlubmVyKTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoU3Bpbm5lci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFNwaW5uZXIpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTcGlubmVyLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLmluc3RhbnRpYXRlU3Bpbm5lcih0aGlzLnByb3BzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcykge1xuICAgICAgaWYgKG5ld1Byb3BzLmNvbmZpZy5jb2xvciAhPT0gdGhpcy5wcm9wcy5jb25maWcuY29sb3IpIHtcbiAgICAgICAgdGhpcy5zcGlubmVyLnN0b3AoKTtcbiAgICAgICAgLy8gdGhlIFNwaW5uZXIgQVBJIGRvZXNuJ3QgcHJvdmlkZSBhIG1ldGhvZCB0byBjaGFuZ2UgaXRzIG9wdGlvbnMgYWZ0ZXIgaW5zdGFudGlhdGlvbixcbiAgICAgICAgLy8gc28gdGhlIG9ubHkgd2F5IHRvIGRvIHNvIGlzIHRvIHJlaW5zdGFudGlhdGUgdGhlIHNwaW5uZXIgwq9cXF8o44OEKV8vwq9cbiAgICAgICAgdGhpcy5pbnN0YW50aWF0ZVNwaW5uZXIobmV3UHJvcHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld1Byb3BzLnN0b3BwZWQgPT09IHRydWUgJiYgIXRoaXMucHJvcHMuc3RvcHBlZCkge1xuICAgICAgICAgIHRoaXMuc3Bpbm5lci5zdG9wKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW5ld1Byb3BzLnN0b3BwZWQgJiYgdGhpcy5wcm9wcy5zdG9wcGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5zcGlubmVyLnNwaW4odGhpcy5jb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuc3Bpbm5lci5zdG9wKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaW5zdGFudGlhdGVTcGlubmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zdGFudGlhdGVTcGlubmVyKHByb3BzKSB7XG4gICAgICB0aGlzLnNwaW5uZXIgPSBuZXcgX3NwaW4yLmRlZmF1bHQoX2V4dGVuZHMoe30sIGRlZmF1bHRDb25maWcsIHByb3BzLmNvbmZpZykpO1xuICAgICAgaWYgKCFwcm9wcy5zdG9wcGVkKSB7XG4gICAgICAgIHRoaXMuc3Bpbm5lci5zcGluKHRoaXMuY29udGFpbmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdkaXYnLCB7IHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICBfdGhpczIuY29udGFpbmVyID0gbm9kZTtcbiAgICAgICAgfSB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3Bpbm5lcjtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cblNwaW5uZXIucHJvcFR5cGVzID0ge1xuICBjb25maWc6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICBzdG9wcGVkOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIGNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIHN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdFxufTtcblxuU3Bpbm5lci5kZWZhdWx0UHJvcHMgPSB7XG4gIGNvbmZpZzogZGVmYXVsdENvbmZpZyxcbiAgY2xhc3NOYW1lOiAnJyxcbiAgc3R5bGU6IHt9XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBTcGlubmVyO1xuXG4vKioqLyB9KSxcbi8qIDczICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcHJvcFR5cGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBfdXRpbGl0aWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgSWZyYW1lID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKElmcmFtZSwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gSWZyYW1lKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJZnJhbWUpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKElmcmFtZS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKElmcmFtZSkpLmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXMuaWZyYW1lUmVmID0gbnVsbDtcbiAgICBfdGhpcy5sb2FkSGFuZGxlciA9IF90aGlzLmxvYWRIYW5kbGVyLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIC8vIEZpeGVzIHNjcm9sbCBub3QgcmVzcG9uZGluZyBpbiByZW5kZXJlciB2MVxuXG5cbiAgX2NyZWF0ZUNsYXNzKElmcmFtZSwgW3tcbiAgICBrZXk6ICdsb2FkSGFuZGxlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuaWZyYW1lUmVmLnN0eWxlLmhlaWdodCA9IHRoaXMuaWZyYW1lUmVmLm9mZnNldEhlaWdodCArIDEgKyAncHgnO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5pZnJhbWVSZWYuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICAgICgwLCBfdXRpbGl0aWVzLmFwcGx5SU9TRm9vdGVySGFjaykoX3RoaXMyLmlmcmFtZVJlZik7XG5cbiAgICAgICAgX3RoaXMyLnByb3BzLm9uTG9hZCAmJiBfdGhpczIucHJvcHMub25Mb2FkKF90aGlzMi5pZnJhbWVSZWYpO1xuICAgICAgfSwgMSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgICAgcmV0dXJuIG5leHRQcm9wcy5zcmMgIT09IHRoaXMucHJvcHMuc3JjO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBzdHlsZSA9IF9wcm9wcy5zdHlsZSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wcywgWydzdHlsZSddKTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgZnJhbWVCb3JkZXI6ICcwJyxcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHsgYm9yZGVyOiAwIH0sIHN0eWxlKSxcbiAgICAgICAgc3JjOiB0aGlzLnByb3BzLnNyYyxcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIF90aGlzMy5pZnJhbWVSZWYgPSBub2RlO1xuICAgICAgICB9LFxuICAgICAgICAnZGF0YS1xYSc6ICdpZnJhbWUnLFxuICAgICAgICBvbkxvYWQ6IHRoaXMubG9hZEhhbmRsZXJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gSWZyYW1lO1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuSWZyYW1lLnByb3BUeXBlcyA9IHtcbiAgc3JjOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLFxuICBvbkxvYWQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuY1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gSWZyYW1lO1xuXG4vKioqLyB9KSxcbi8qIDc0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZmV0Y2hKc29ucCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYxKTtcblxudmFyIF9mZXRjaEpzb25wMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ZldGNoSnNvbnApO1xuXG52YXIgX3VybFBhcnNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQpO1xuXG52YXIgX3VybFBhcnNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3VybFBhcnNlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIERhdGFTZXJ2aWNlID0ge1xuICBnZW5lcmF0ZVVSTDogZnVuY3Rpb24gZ2VuZXJhdGVVUkwodWlkLCBkb21haW4pIHtcbiAgICByZXR1cm4gJ2h0dHBzOi8vJyArIGRvbWFpbiArICcvYXBwL2VtYmVkLycgKyB1aWQgKyAnP2pzb25jYWxsYmFjaz0/JztcbiAgfSxcbiAgZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIGdldEZvcm1EYXRhKHVpZCwgZG9tYWluKSB7XG4gICAgdmFyIHVybCA9IHRoaXMuZ2VuZXJhdGVVUkwodWlkLCBkb21haW4pO1xuICAgIHJldHVybiAoMCwgX2ZldGNoSnNvbnAyLmRlZmF1bHQpKHVybCwgeyBqc29ucENhbGxiYWNrOiAnanNvbmNhbGxiYWNrJyB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIHJldHVybiByZXMuanNvbigpO1xuICAgIH0pO1xuICB9LFxuICBnZXRBY2NvdW50RnJvbVVSTDogZnVuY3Rpb24gZ2V0QWNjb3VudEZyb21VUkwodXJsKSB7XG4gICAgcmV0dXJuIHVybC5zcGxpdCgnLycpWzJdLnNwbGl0KCcuJylbMF07XG4gIH0sXG4gIGdldFVpZEZyb21VUkw6IGZ1bmN0aW9uIGdldFVpZEZyb21VUkwodXJsKSB7XG4gICAgdmFyIF9VcmxQYXJzZSA9ICgwLCBfdXJsUGFyc2UyLmRlZmF1bHQpKHVybCksXG4gICAgICAgIHBhdGhuYW1lID0gX1VybFBhcnNlLnBhdGhuYW1lO1xuXG4gICAgdmFyIHBhdGggPSBwYXRobmFtZS5yZXBsYWNlKC9cXC8kLywgJycpOyAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC90b1xcLyguKykkLywgJyQxJyk7XG4gIH0sXG4gIGdldERvbWFpbkZyb21Vcmw6IGZ1bmN0aW9uIGdldERvbWFpbkZyb21VcmwodXJsKSB7XG4gICAgcmV0dXJuIHVybC5zcGxpdCgnLycpWzJdO1xuICB9LFxuICBnZXRET01FbGVtZW50RGF0YTogZnVuY3Rpb24gZ2V0RE9NRWxlbWVudERhdGEoJGVsZW1lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXJsOiAkZWxlbWVudC5kYXRhKCd1cmwnKSxcbiAgICAgIHRleHQ6ICRlbGVtZW50LmRhdGEoJ3RleHQnKVxuICAgIH07XG4gIH1cbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IERhdGFTZXJ2aWNlO1xuXG4vKioqLyB9KSxcbi8qIDc1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdXRpbGl0aWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XG5cbnZhciBkZWZhdWx0RGF0YSA9IHtcbiAgJ2FjY291bnQtbmFtZSc6ICdhZG1pbicsXG4gICduYW1lJzogJ1R5cGVmb3JtJyxcbiAgJ3dlbGNvbWUtaW1hZ2UnOiAnJyxcbiAgJ2ZvbnQtZ29vZ2xlJzogJycsXG4gICdwcmltYXJ5LWNvbG9yJzogJyMyMjInLFxuICAnYmFja2dyb3VuZC1pbWFnZSc6ICcnLFxuICAnYmFja2dyb3VuZC1jb2xvcic6ICcjREREJyxcbiAgJ2JhY2tncm91bmQtcmVwZWF0JzogJycsXG4gICdiYWNrZ3JvdW5kLWJyaWdodG5lc3MnOiAnJyxcbiAgJ2J1dHRvbi1jb2xvcic6ICcjQUFBJ1xufTtcblxudmFyIHN0b3JlID0gZnVuY3Rpb24gc3RvcmUodWlkLCB0eXBlLCB1cmwsIGJ1dHRvblRleHQpIHtcbiAgdmFyIGRhdGEgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGRlZmF1bHREYXRhO1xuXG4gIHJldHVybiB7XG4gICAgaXNNb2JpbGU6ICgwLCBfdXRpbGl0aWVzLmlzTW9iaWxlKShuYXZpZ2F0b3IudXNlckFnZW50KSxcbiAgICAnYWNjb3VudC1uYW1lJzogZGF0YVsnYWNjb3VudC1uYW1lJ10gfHwgJ2FkbWluJyxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGZvcm06IHtcbiAgICAgIHVpZDogdWlkLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICByZWFkeTogZmFsc2UsIC8vIG5vdCBpbXBsZW1lbnRlZFxuICAgICAgYnV0dG9uVGV4dDogYnV0dG9uVGV4dCxcbiAgICAgIG5hbWU6IGRhdGFbJ25hbWUnXSB8fCAnJyxcbiAgICAgICd3ZWxjb21lLWltYWdlJzogZGF0YVsnd2VsY29tZS1pbWFnZSddLFxuICAgICAgJ2ZvbnQtZ29vZ2xlJzogZGF0YVsnZm9udC1nb29nbGUnXSxcbiAgICAgICdwcmltYXJ5LWNvbG9yJzogZGF0YVsncHJpbWFyeS1jb2xvciddLFxuICAgICAgJ2JhY2tncm91bmQtaW1hZ2UnOiBkYXRhWydiYWNrZ3JvdW5kLWltYWdlJ10sXG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGRhdGFbJ2JhY2tncm91bmQtY29sb3InXSxcbiAgICAgICdiYWNrZ3JvdW5kLXJlcGVhdCc6IGRhdGFbJ2JhY2tncm91bmQtcmVwZWF0J10sXG4gICAgICAnYmFja2dyb3VuZC1icmlnaHRuZXNzJzogZGF0YVsnYmFja2dyb3VuZC1icmlnaHRuZXNzJ10sXG4gICAgICAnYnV0dG9uLWNvbG9yJzogZGF0YVsnYnV0dG9uLWNvbG9yJ11cbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBzdG9yZTtcblxuLyoqKi8gfSksXG4vKiA3NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBjb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG52YXIgTElCUkFSWSA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xudmFyIHdrc0V4dCA9IF9fd2VicGFja19yZXF1aXJlX18oMTA5KTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oNykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDc4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBzaGFyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1KSgna2V5cycpO1xudmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG5cblxuLyoqKi8gfSksXG4vKiA4MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuLyoqKi8gfSksXG4vKiA4MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KShGdW5jdGlvbi5jYWxsLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDgyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcblxuXG4vKioqLyB9KSxcbi8qIDgzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDg0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG52YXIgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogODUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24gc2lnbih4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDg2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbm1vZHVsZS5leHBvcnRzID0gKCEkZXhwbTFcbiAgLy8gT2xkIEZGIGJ1Z1xuICB8fCAkZXhwbTEoMTApID4gMjIwMjUuNDY1Nzk0ODA2NzE5IHx8ICRleHBtMSgxMCkgPCAyMjAyNS40NjU3OTQ4MDY3MTY1MTY4XG4gIC8vIFRvciBCcm93c2VyIGJ1Z1xuICB8fCAkZXhwbTEoLTJlLTE3KSAhPSAtMmUtMTdcbikgPyBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuXG5cbi8qKiovIH0pLFxuLyogODcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHRvSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xudmFyIGRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIExJQlJBUlkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciByZWRlZmluZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xudmFyIGhpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZhciBoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcbnZhciAkaXRlckNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oODkpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBJVEVSQVRPUiA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gKCFCVUdHWSAmJiAkbmF0aXZlKSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgIWhhcyhJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IpKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xudmFyIGRlc2NyaXB0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDEyKShJdGVyYXRvclByb3RvdHlwZSwgX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA5MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OSk7XG52YXIgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBzZWFyY2hTdHJpbmcsIE5BTUUpIHtcbiAgaWYgKGlzUmVnRXhwKHNlYXJjaFN0cmluZykpIHRocm93IFR5cGVFcnJvcignU3RyaW5nIycgKyBOQU1FICsgXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO1xuICByZXR1cm4gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDkxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBNQVRDSCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIHJlID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW0tFWV0ocmUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICEnLy4vJ1tLRVldKHJlKTtcbiAgICB9IGNhdGNoIChmKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA5MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XG52YXIgSVRFUkFUT1IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogOTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xudmFyIGNyZWF0ZURlc2MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA5NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgY2xhc3NvZiA9IF9fd2VicGFja19yZXF1aXJlX18oNTMpO1xudmFyIElURVJBVE9SID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMikuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDk1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2MCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA5NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuXG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oMzkpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8qKiovIH0pLFxuLyogOTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XG52YXIgc3RlcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTI1KTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcbnZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4KShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG5cbi8qKiovIH0pLFxuLyogOTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIGludm9rZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTE1KTtcbnZhciBodG1sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XG52YXIgY2VsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoX193ZWJwYWNrX3JlcXVpcmVfXygyMCkocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDk5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIG1hY3JvdGFzayA9IF9fd2VicGFja19yZXF1aXJlX18oOTgpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgTElCUkFSWSA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xudmFyICR0eXBlZCA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xudmFyIGhpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZhciByZWRlZmluZUFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBhbkluc3RhbmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XG52YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIHRvSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XG52YXIgZ09QTiA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpLmY7XG52YXIgZFAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLmY7XG52YXIgYXJyYXlGaWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nik7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuXG5cbi8qKiovIH0pLFxuLyogMTAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG5cblxuLyoqKi8gfSksXG4vKiAxMDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cblxuXG52YXIgZW1wdHlGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgd2FybmluZyA9IGVtcHR5RnVuY3Rpb247XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbiBwcmludFdhcm5pbmcoZm9ybWF0KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICB3YXJuaW5nID0gZnVuY3Rpb24gd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCkge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0LmluZGV4T2YoJ0ZhaWxlZCBDb21wb3NpdGUgcHJvcFR5cGU6ICcpID09PSAwKSB7XG4gICAgICByZXR1cm47IC8vIElnbm9yZSBDb21wb3NpdGVDb21wb25lbnQgcHJvcHR5cGUgY2hlY2suXG4gICAgfVxuXG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KSkpXG5cbi8qKiovIH0pLFxuLyogMTA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkge1xuXG52YXIgcmVxdWlyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1MSlcbiAgLCBxcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUyKVxuICAsIHByb3RvY29scmUgPSAvXihbYS16XVthLXowLTkuKy1dKjopPyhcXC9cXC8pPyhbXFxTXFxzXSopL2lcbiAgLCBzbGFzaGVzID0gL15bQS1aYS16XVtBLVphLXowLTkrLS5dKjpcXC9cXC8vO1xuXG4vKipcbiAqIFRoZXNlIGFyZSB0aGUgcGFyc2UgcnVsZXMgZm9yIHRoZSBVUkwgcGFyc2VyLCBpdCBpbmZvcm1zIHRoZSBwYXJzZXJcbiAqIGFib3V0OlxuICpcbiAqIDAuIFRoZSBjaGFyIGl0IE5lZWRzIHRvIHBhcnNlLCBpZiBpdCdzIGEgc3RyaW5nIGl0IHNob3VsZCBiZSBkb25lIHVzaW5nXG4gKiAgICBpbmRleE9mLCBSZWdFeHAgdXNpbmcgZXhlYyBhbmQgTmFOIG1lYW5zIHNldCBhcyBjdXJyZW50IHZhbHVlLlxuICogMS4gVGhlIHByb3BlcnR5IHdlIHNob3VsZCBzZXQgd2hlbiBwYXJzaW5nIHRoaXMgdmFsdWUuXG4gKiAyLiBJbmRpY2F0aW9uIGlmIGl0J3MgYmFja3dhcmRzIG9yIGZvcndhcmQgcGFyc2luZywgd2hlbiBzZXQgYXMgbnVtYmVyIGl0J3NcbiAqICAgIHRoZSB2YWx1ZSBvZiBleHRyYSBjaGFycyB0aGF0IHNob3VsZCBiZSBzcGxpdCBvZmYuXG4gKiAzLiBJbmhlcml0IGZyb20gbG9jYXRpb24gaWYgbm9uIGV4aXN0aW5nIGluIHRoZSBwYXJzZXIuXG4gKiA0LiBgdG9Mb3dlckNhc2VgIHRoZSByZXN1bHRpbmcgdmFsdWUuXG4gKi9cbnZhciBydWxlcyA9IFtcbiAgWycjJywgJ2hhc2gnXSwgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIFsnPycsICdxdWVyeSddLCAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBbJy8nLCAncGF0aG5hbWUnXSwgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgWydAJywgJ2F1dGgnLCAxXSwgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGZyb250LlxuICBbTmFOLCAnaG9zdCcsIHVuZGVmaW5lZCwgMSwgMV0sICAgICAgIC8vIFNldCBsZWZ0IG92ZXIgdmFsdWUuXG4gIFsvOihcXGQrKSQvLCAncG9ydCcsIHVuZGVmaW5lZCwgMV0sICAgIC8vIFJlZ0V4cCB0aGUgYmFjay5cbiAgW05hTiwgJ2hvc3RuYW1lJywgdW5kZWZpbmVkLCAxLCAxXSAgICAvLyBTZXQgbGVmdCBvdmVyLlxuXTtcblxuLyoqXG4gKiBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgY29waWVkIG9yIGluaGVyaXRlZCBmcm9tLiBUaGlzIGlzIG9ubHkgbmVlZGVkXG4gKiBmb3IgYWxsIG5vbiBibG9iIFVSTCdzIGFzIGEgYmxvYiBVUkwgZG9lcyBub3QgaW5jbHVkZSBhIGhhc2gsIG9ubHkgdGhlXG4gKiBvcmlnaW4uXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBpZ25vcmUgPSB7IGhhc2g6IDEsIHF1ZXJ5OiAxIH07XG5cbi8qKlxuICogVGhlIGxvY2F0aW9uIG9iamVjdCBkaWZmZXJzIHdoZW4geW91ciBjb2RlIGlzIGxvYWRlZCB0aHJvdWdoIGEgbm9ybWFsIHBhZ2UsXG4gKiBXb3JrZXIgb3IgdGhyb3VnaCBhIHdvcmtlciB1c2luZyBhIGJsb2IuIEFuZCB3aXRoIHRoZSBibG9iYmxlIGJlZ2lucyB0aGVcbiAqIHRyb3VibGUgYXMgdGhlIGxvY2F0aW9uIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIFVSTCBvZiB0aGUgYmxvYiwgbm90IHRoZVxuICogbG9jYXRpb24gb2YgdGhlIHBhZ2Ugd2hlcmUgb3VyIGNvZGUgaXMgbG9hZGVkIGluLiBUaGUgYWN0dWFsIG9yaWdpbiBpc1xuICogZW5jb2RlZCBpbiB0aGUgYHBhdGhuYW1lYCBzbyB3ZSBjYW4gdGhhbmtmdWxseSBnZW5lcmF0ZSBhIGdvb2QgXCJkZWZhdWx0XCJcbiAqIGxvY2F0aW9uIGZyb20gaXQgc28gd2UgY2FuIGdlbmVyYXRlIHByb3BlciByZWxhdGl2ZSBVUkwncyBhZ2Fpbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGxvYyBPcHRpb25hbCBkZWZhdWx0IGxvY2F0aW9uIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IGxvbGNhdGlvbiBvYmplY3QuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBsb2xjYXRpb24obG9jKSB7XG4gIGxvYyA9IGxvYyB8fCBnbG9iYWwubG9jYXRpb24gfHwge307XG5cbiAgdmFyIGZpbmFsZGVzdGluYXRpb24gPSB7fVxuICAgICwgdHlwZSA9IHR5cGVvZiBsb2NcbiAgICAsIGtleTtcblxuICBpZiAoJ2Jsb2I6JyA9PT0gbG9jLnByb3RvY29sKSB7XG4gICAgZmluYWxkZXN0aW5hdGlvbiA9IG5ldyBVUkwodW5lc2NhcGUobG9jLnBhdGhuYW1lKSwge30pO1xuICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlKSB7XG4gICAgZmluYWxkZXN0aW5hdGlvbiA9IG5ldyBVUkwobG9jLCB7fSk7XG4gICAgZm9yIChrZXkgaW4gaWdub3JlKSBkZWxldGUgZmluYWxkZXN0aW5hdGlvbltrZXldO1xuICB9IGVsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlKSB7XG4gICAgZm9yIChrZXkgaW4gbG9jKSB7XG4gICAgICBpZiAoa2V5IGluIGlnbm9yZSkgY29udGludWU7XG4gICAgICBmaW5hbGRlc3RpbmF0aW9uW2tleV0gPSBsb2Nba2V5XTtcbiAgICB9XG5cbiAgICBpZiAoZmluYWxkZXN0aW5hdGlvbi5zbGFzaGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbmFsZGVzdGluYXRpb24uc2xhc2hlcyA9IHNsYXNoZXMudGVzdChsb2MuaHJlZik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbmFsZGVzdGluYXRpb247XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUHJvdG9jb2xFeHRyYWN0XG4gKiBAdHlwZSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBwcm90b2NvbCBQcm90b2NvbCBtYXRjaGVkIGluIHRoZSBVUkwsIGluIGxvd2VyY2FzZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2xhc2hlcyBgdHJ1ZWAgaWYgcHJvdG9jb2wgaXMgZm9sbG93ZWQgYnkgXCIvL1wiLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVzdCBSZXN0IG9mIHRoZSBVUkwgdGhhdCBpcyBub3QgcGFydCBvZiB0aGUgcHJvdG9jb2wuXG4gKi9cblxuLyoqXG4gKiBFeHRyYWN0IHByb3RvY29sIGluZm9ybWF0aW9uIGZyb20gYSBVUkwgd2l0aC93aXRob3V0IGRvdWJsZSBzbGFzaCAoXCIvL1wiKS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBleHRyYWN0IGZyb20uXG4gKiBAcmV0dXJuIHtQcm90b2NvbEV4dHJhY3R9IEV4dHJhY3RlZCBpbmZvcm1hdGlvbi5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2woYWRkcmVzcykge1xuICB2YXIgbWF0Y2ggPSBwcm90b2NvbHJlLmV4ZWMoYWRkcmVzcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm90b2NvbDogbWF0Y2hbMV0gPyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIDogJycsXG4gICAgc2xhc2hlczogISFtYXRjaFsyXSxcbiAgICByZXN0OiBtYXRjaFszXVxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSByZWxhdGl2ZSBVUkwgcGF0aG5hbWUgYWdhaW5zdCBhIGJhc2UgVVJMIHBhdGhuYW1lLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWxhdGl2ZSBQYXRobmFtZSBvZiB0aGUgcmVsYXRpdmUgVVJMLlxuICogQHBhcmFtIHtTdHJpbmd9IGJhc2UgUGF0aG5hbWUgb2YgdGhlIGJhc2UgVVJMLlxuICogQHJldHVybiB7U3RyaW5nfSBSZXNvbHZlZCBwYXRobmFtZS5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXNvbHZlKHJlbGF0aXZlLCBiYXNlKSB7XG4gIHZhciBwYXRoID0gKGJhc2UgfHwgJy8nKS5zcGxpdCgnLycpLnNsaWNlKDAsIC0xKS5jb25jYXQocmVsYXRpdmUuc3BsaXQoJy8nKSlcbiAgICAsIGkgPSBwYXRoLmxlbmd0aFxuICAgICwgbGFzdCA9IHBhdGhbaSAtIDFdXG4gICAgLCB1bnNoaWZ0ID0gZmFsc2VcbiAgICAsIHVwID0gMDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKHBhdGhbaV0gPT09ICcuJykge1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXRoW2ldID09PSAnLi4nKSB7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgaWYgKGkgPT09IDApIHVuc2hpZnQgPSB0cnVlO1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1bnNoaWZ0KSBwYXRoLnVuc2hpZnQoJycpO1xuICBpZiAobGFzdCA9PT0gJy4nIHx8IGxhc3QgPT09ICcuLicpIHBhdGgucHVzaCgnJyk7XG5cbiAgcmV0dXJuIHBhdGguam9pbignLycpO1xufVxuXG4vKipcbiAqIFRoZSBhY3R1YWwgVVJMIGluc3RhbmNlLiBJbnN0ZWFkIG9mIHJldHVybmluZyBhbiBvYmplY3Qgd2UndmUgb3B0ZWQtaW4gdG9cbiAqIGNyZWF0ZSBhbiBhY3R1YWwgY29uc3RydWN0b3IgYXMgaXQncyBtdWNoIG1vcmUgbWVtb3J5IGVmZmljaWVudCBhbmRcbiAqIGZhc3RlciBhbmQgaXQgcGxlYXNlcyBteSBPQ0QuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBwYXJzZS5cbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gbG9jYXRpb24gTG9jYXRpb24gZGVmYXVsdHMgZm9yIHJlbGF0aXZlIHBhdGhzLlxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSBwYXJzZXIgUGFyc2VyIGZvciB0aGUgcXVlcnkgc3RyaW5nLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gVVJMKGFkZHJlc3MsIGxvY2F0aW9uLCBwYXJzZXIpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICByZXR1cm4gbmV3IFVSTChhZGRyZXNzLCBsb2NhdGlvbiwgcGFyc2VyKTtcbiAgfVxuXG4gIHZhciByZWxhdGl2ZSwgZXh0cmFjdGVkLCBwYXJzZSwgaW5zdHJ1Y3Rpb24sIGluZGV4LCBrZXlcbiAgICAsIGluc3RydWN0aW9ucyA9IHJ1bGVzLnNsaWNlKClcbiAgICAsIHR5cGUgPSB0eXBlb2YgbG9jYXRpb25cbiAgICAsIHVybCA9IHRoaXNcbiAgICAsIGkgPSAwO1xuXG4gIC8vXG4gIC8vIFRoZSBmb2xsb3dpbmcgaWYgc3RhdGVtZW50cyBhbGxvd3MgdGhpcyBtb2R1bGUgdHdvIGhhdmUgY29tcGF0aWJpbGl0eSB3aXRoXG4gIC8vIDIgZGlmZmVyZW50IEFQSTpcbiAgLy9cbiAgLy8gMS4gTm9kZS5qcydzIGB1cmwucGFyc2VgIGFwaSB3aGljaCBhY2NlcHRzIGEgVVJMLCBib29sZWFuIGFzIGFyZ3VtZW50c1xuICAvLyAgICB3aGVyZSB0aGUgYm9vbGVhbiBpbmRpY2F0ZXMgdGhhdCB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZCBhbHNvIGJlIHBhcnNlZC5cbiAgLy9cbiAgLy8gMi4gVGhlIGBVUkxgIGludGVyZmFjZSBvZiB0aGUgYnJvd3NlciB3aGljaCBhY2NlcHRzIGEgVVJMLCBvYmplY3QgYXNcbiAgLy8gICAgYXJndW1lbnRzLiBUaGUgc3VwcGxpZWQgb2JqZWN0IHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0IHZhbHVlcyAvIGZhbGwtYmFja1xuICAvLyAgICBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gIC8vXG4gIGlmICgnb2JqZWN0JyAhPT0gdHlwZSAmJiAnc3RyaW5nJyAhPT0gdHlwZSkge1xuICAgIHBhcnNlciA9IGxvY2F0aW9uO1xuICAgIGxvY2F0aW9uID0gbnVsbDtcbiAgfVxuXG4gIGlmIChwYXJzZXIgJiYgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHBhcnNlcikgcGFyc2VyID0gcXMucGFyc2U7XG5cbiAgbG9jYXRpb24gPSBsb2xjYXRpb24obG9jYXRpb24pO1xuXG4gIC8vXG4gIC8vIEV4dHJhY3QgcHJvdG9jb2wgaW5mb3JtYXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIGluc3RydWN0aW9ucy5cbiAgLy9cbiAgZXh0cmFjdGVkID0gZXh0cmFjdFByb3RvY29sKGFkZHJlc3MgfHwgJycpO1xuICByZWxhdGl2ZSA9ICFleHRyYWN0ZWQucHJvdG9jb2wgJiYgIWV4dHJhY3RlZC5zbGFzaGVzO1xuICB1cmwuc2xhc2hlcyA9IGV4dHJhY3RlZC5zbGFzaGVzIHx8IHJlbGF0aXZlICYmIGxvY2F0aW9uLnNsYXNoZXM7XG4gIHVybC5wcm90b2NvbCA9IGV4dHJhY3RlZC5wcm90b2NvbCB8fCBsb2NhdGlvbi5wcm90b2NvbCB8fCAnJztcbiAgYWRkcmVzcyA9IGV4dHJhY3RlZC5yZXN0O1xuXG4gIC8vXG4gIC8vIFdoZW4gdGhlIGF1dGhvcml0eSBjb21wb25lbnQgaXMgYWJzZW50IHRoZSBVUkwgc3RhcnRzIHdpdGggYSBwYXRoXG4gIC8vIGNvbXBvbmVudC5cbiAgLy9cbiAgaWYgKCFleHRyYWN0ZWQuc2xhc2hlcykgaW5zdHJ1Y3Rpb25zWzJdID0gWy8oLiopLywgJ3BhdGhuYW1lJ107XG5cbiAgZm9yICg7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc1tpXTtcbiAgICBwYXJzZSA9IGluc3RydWN0aW9uWzBdO1xuICAgIGtleSA9IGluc3RydWN0aW9uWzFdO1xuXG4gICAgaWYgKHBhcnNlICE9PSBwYXJzZSkge1xuICAgICAgdXJsW2tleV0gPSBhZGRyZXNzO1xuICAgIH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBwYXJzZSkge1xuICAgICAgaWYgKH4oaW5kZXggPSBhZGRyZXNzLmluZGV4T2YocGFyc2UpKSkge1xuICAgICAgICBpZiAoJ251bWJlcicgPT09IHR5cGVvZiBpbnN0cnVjdGlvblsyXSkge1xuICAgICAgICAgIHVybFtrZXldID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoaW5kZXggKyBpbnN0cnVjdGlvblsyXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXJsW2tleV0gPSBhZGRyZXNzLnNsaWNlKGluZGV4KTtcbiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChpbmRleCA9IHBhcnNlLmV4ZWMoYWRkcmVzcykpKSB7XG4gICAgICB1cmxba2V5XSA9IGluZGV4WzFdO1xuICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXguaW5kZXgpO1xuICAgIH1cblxuICAgIHVybFtrZXldID0gdXJsW2tleV0gfHwgKFxuICAgICAgcmVsYXRpdmUgJiYgaW5zdHJ1Y3Rpb25bM10gPyBsb2NhdGlvbltrZXldIHx8ICcnIDogJydcbiAgICApO1xuXG4gICAgLy9cbiAgICAvLyBIb3N0bmFtZSwgaG9zdCBhbmQgcHJvdG9jb2wgc2hvdWxkIGJlIGxvd2VyY2FzZWQgc28gdGhleSBjYW4gYmUgdXNlZCB0b1xuICAgIC8vIGNyZWF0ZSBhIHByb3BlciBgb3JpZ2luYC5cbiAgICAvL1xuICAgIGlmIChpbnN0cnVjdGlvbls0XSkgdXJsW2tleV0gPSB1cmxba2V5XS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLy9cbiAgLy8gQWxzbyBwYXJzZSB0aGUgc3VwcGxpZWQgcXVlcnkgc3RyaW5nIGluIHRvIGFuIG9iamVjdC4gSWYgd2UncmUgc3VwcGxpZWRcbiAgLy8gd2l0aCBhIGN1c3RvbSBwYXJzZXIgYXMgZnVuY3Rpb24gdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBidWlsZC1pblxuICAvLyBwYXJzZXIuXG4gIC8vXG4gIGlmIChwYXJzZXIpIHVybC5xdWVyeSA9IHBhcnNlcih1cmwucXVlcnkpO1xuXG4gIC8vXG4gIC8vIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUsIHJlc29sdmUgdGhlIHBhdGhuYW1lIGFnYWluc3QgdGhlIGJhc2UgVVJMLlxuICAvL1xuICBpZiAoXG4gICAgICByZWxhdGl2ZVxuICAgICYmIGxvY2F0aW9uLnNsYXNoZXNcbiAgICAmJiB1cmwucGF0aG5hbWUuY2hhckF0KDApICE9PSAnLydcbiAgICAmJiAodXJsLnBhdGhuYW1lICE9PSAnJyB8fCBsb2NhdGlvbi5wYXRobmFtZSAhPT0gJycpXG4gICkge1xuICAgIHVybC5wYXRobmFtZSA9IHJlc29sdmUodXJsLnBhdGhuYW1lLCBsb2NhdGlvbi5wYXRobmFtZSk7XG4gIH1cblxuICAvL1xuICAvLyBXZSBzaG91bGQgbm90IGFkZCBwb3J0IG51bWJlcnMgaWYgdGhleSBhcmUgYWxyZWFkeSB0aGUgZGVmYXVsdCBwb3J0IG51bWJlclxuICAvLyBmb3IgYSBnaXZlbiBwcm90b2NvbC4gQXMgdGhlIGhvc3QgYWxzbyBjb250YWlucyB0aGUgcG9ydCBudW1iZXIgd2UncmUgZ29pbmdcbiAgLy8gb3ZlcnJpZGUgaXQgd2l0aCB0aGUgaG9zdG5hbWUgd2hpY2ggY29udGFpbnMgbm8gcG9ydCBudW1iZXIuXG4gIC8vXG4gIGlmICghcmVxdWlyZWQodXJsLnBvcnQsIHVybC5wcm90b2NvbCkpIHtcbiAgICB1cmwuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgICB1cmwucG9ydCA9ICcnO1xuICB9XG5cbiAgLy9cbiAgLy8gUGFyc2UgZG93biB0aGUgYGF1dGhgIGZvciB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxuICAvL1xuICB1cmwudXNlcm5hbWUgPSB1cmwucGFzc3dvcmQgPSAnJztcbiAgaWYgKHVybC5hdXRoKSB7XG4gICAgaW5zdHJ1Y3Rpb24gPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xuICAgIHVybC51c2VybmFtZSA9IGluc3RydWN0aW9uWzBdIHx8ICcnO1xuICAgIHVybC5wYXNzd29yZCA9IGluc3RydWN0aW9uWzFdIHx8ICcnO1xuICB9XG5cbiAgdXJsLm9yaWdpbiA9IHVybC5wcm90b2NvbCAmJiB1cmwuaG9zdCAmJiB1cmwucHJvdG9jb2wgIT09ICdmaWxlOidcbiAgICA/IHVybC5wcm90b2NvbCArJy8vJysgdXJsLmhvc3RcbiAgICA6ICdudWxsJztcblxuICAvL1xuICAvLyBUaGUgaHJlZiBpcyBqdXN0IHRoZSBjb21waWxlZCByZXN1bHQuXG4gIC8vXG4gIHVybC5ocmVmID0gdXJsLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogVGhpcyBpcyBjb252ZW5pZW5jZSBtZXRob2QgZm9yIGNoYW5naW5nIHByb3BlcnRpZXMgaW4gdGhlIFVSTCBpbnN0YW5jZSB0b1xuICogaW5zdXJlIHRoYXQgdGhleSBhbGwgcHJvcGFnYXRlIGNvcnJlY3RseS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFydCAgICAgICAgICBQcm9wZXJ0eSB3ZSBuZWVkIHRvIGFkanVzdC5cbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlICAgICAgICAgIFRoZSBuZXdseSBhc3NpZ25lZCB2YWx1ZS5cbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gZm4gIFdoZW4gc2V0dGluZyB0aGUgcXVlcnksIGl0IHdpbGwgYmUgdGhlIGZ1bmN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIHBhcnNlIHRoZSBxdWVyeS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0dGluZyB0aGUgcHJvdG9jb2wsIGRvdWJsZSBzbGFzaCB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHVybCBpZiBpdCBpcyB0cnVlLlxuICogQHJldHVybnMge1VSTH1cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHNldChwYXJ0LCB2YWx1ZSwgZm4pIHtcbiAgdmFyIHVybCA9IHRoaXM7XG5cbiAgc3dpdGNoIChwYXJ0KSB7XG4gICAgY2FzZSAncXVlcnknOlxuICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gKGZuIHx8IHFzLnBhcnNlKSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb3J0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAoIXJlcXVpcmVkKHZhbHVlLCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgICAgICB1cmxbcGFydF0gPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWUgKyc6JysgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaG9zdG5hbWUnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICh1cmwucG9ydCkgdmFsdWUgKz0gJzonKyB1cmwucG9ydDtcbiAgICAgIHVybC5ob3N0ID0gdmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICgvOlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgIHVybC5wb3J0ID0gdmFsdWUucG9wKCk7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlLmpvaW4oJzonKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlO1xuICAgICAgICB1cmwucG9ydCA9ICcnO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Byb3RvY29sJzpcbiAgICAgIHVybC5wcm90b2NvbCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICB1cmwuc2xhc2hlcyA9ICFmbjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncGF0aG5hbWUnOlxuICAgIGNhc2UgJ2hhc2gnOlxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhciBjaGFyID0gcGFydCA9PT0gJ3BhdGhuYW1lJyA/ICcvJyA6ICcjJztcbiAgICAgICAgdXJsW3BhcnRdID0gdmFsdWUuY2hhckF0KDApICE9PSBjaGFyID8gY2hhciArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpbnMgPSBydWxlc1tpXTtcblxuICAgIGlmIChpbnNbNF0pIHVybFtpbnNbMV1dID0gdXJsW2luc1sxXV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgJiYgdXJsLmhvc3QgJiYgdXJsLnByb3RvY29sICE9PSAnZmlsZTonXG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgdXJsLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcblxuICByZXR1cm4gdXJsO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgcHJvcGVydGllcyBiYWNrIGluIHRvIGEgdmFsaWQgYW5kIGZ1bGwgVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmdpZnkgT3B0aW9uYWwgcXVlcnkgc3RyaW5naWZ5IGZ1bmN0aW9uLlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHN0cmluZ2lmeSkge1xuICBpZiAoIXN0cmluZ2lmeSB8fCAnZnVuY3Rpb24nICE9PSB0eXBlb2Ygc3RyaW5naWZ5KSBzdHJpbmdpZnkgPSBxcy5zdHJpbmdpZnk7XG5cbiAgdmFyIHF1ZXJ5XG4gICAgLCB1cmwgPSB0aGlzXG4gICAgLCBwcm90b2NvbCA9IHVybC5wcm90b2NvbDtcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuY2hhckF0KHByb3RvY29sLmxlbmd0aCAtIDEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICB2YXIgcmVzdWx0ID0gcHJvdG9jb2wgKyAodXJsLnNsYXNoZXMgPyAnLy8nIDogJycpO1xuXG4gIGlmICh1cmwudXNlcm5hbWUpIHtcbiAgICByZXN1bHQgKz0gdXJsLnVzZXJuYW1lO1xuICAgIGlmICh1cmwucGFzc3dvcmQpIHJlc3VsdCArPSAnOicrIHVybC5wYXNzd29yZDtcbiAgICByZXN1bHQgKz0gJ0AnO1xuICB9XG5cbiAgcmVzdWx0ICs9IHVybC5ob3N0ICsgdXJsLnBhdGhuYW1lO1xuXG4gIHF1ZXJ5ID0gJ29iamVjdCcgPT09IHR5cGVvZiB1cmwucXVlcnkgPyBzdHJpbmdpZnkodXJsLnF1ZXJ5KSA6IHVybC5xdWVyeTtcbiAgaWYgKHF1ZXJ5KSByZXN1bHQgKz0gJz8nICE9PSBxdWVyeS5jaGFyQXQoMCkgPyAnPycrIHF1ZXJ5IDogcXVlcnk7XG5cbiAgaWYgKHVybC5oYXNoKSByZXN1bHQgKz0gdXJsLmhhc2g7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuVVJMLnByb3RvdHlwZSA9IHsgc2V0OiBzZXQsIHRvU3RyaW5nOiB0b1N0cmluZyB9O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBVUkwgcGFyc2VyIGFuZCBzb21lIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCBmb3Jcbi8vIG90aGVycyBvciB0ZXN0aW5nLlxuLy9cblVSTC5leHRyYWN0UHJvdG9jb2wgPSBleHRyYWN0UHJvdG9jb2w7XG5VUkwubG9jYXRpb24gPSBsb2xjYXRpb247XG5VUkwucXMgPSBxcztcblxubW9kdWxlLmV4cG9ydHMgPSBVUkw7XG5cbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKSkpXG5cbi8qKiovIH0pLFxuLyogMTA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBtZW1vaXplOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1RZTEVTX0tFWTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVuaXRsZXNzOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaGFzaFN0cmluZzsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHBhOyB9KTtcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBtdXJtdXJoYXNoMiB2aWEgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzL2Jsb2IvbWFzdGVyL211cm11cmhhc2gyX2djLmpzXG5mdW5jdGlvbiBoYXNoU3RyaW5nKHN0cikge1xuICByZXR1cm4gbXVybXVyaGFzaDJfMzJfZ2Moc3RyLCBzdHIubGVuZ3RoKS50b1N0cmluZygzNik7XG59XG5cbmZ1bmN0aW9uIG11cm11cmhhc2gyXzMyX2djKHN0ciwgc2VlZCkge1xuICB2YXIgbCA9IHN0ci5sZW5ndGgsXG4gICAgICBoID0gc2VlZCBeIGwsXG4gICAgICBpID0gMCxcbiAgICAgIGs7XG5cbiAgd2hpbGUgKGwgPj0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID0gKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoKGsgPj4+IDE2KSAqIDB4NWJkMWU5OTUgJiAweGZmZmYpIDw8IDE2KTtcbiAgICBrIF49IGsgPj4+IDI0O1xuICAgIGsgPSAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKCgoayA+Pj4gMTYpICogMHg1YmQxZTk5NSAmIDB4ZmZmZikgPDwgMTYpO1xuICAgIGggPSAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKCgoaCA+Pj4gMTYpICogMHg1YmQxZTk5NSAmIDB4ZmZmZikgPDwgMTYpIF4gaztcbiAgICBsIC09IDQ7XG4gICAgKytpO1xuICB9XG5cbiAgc3dpdGNoIChsKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID0gKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoKGggPj4+IDE2KSAqIDB4NWJkMWU5OTUgJiAweGZmZmYpIDw8IDE2KTtcbiAgfVxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPSAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKCgoaCA+Pj4gMTYpICogMHg1YmQxZTk5NSAmIDB4ZmZmZikgPDwgMTYpO1xuICBoIF49IGggPj4+IDE1O1xuICByZXR1cm4gaCA+Pj4gMDtcbn1cblxudmFyIHBhID0gZnVuY3Rpb24gZmEoaGEpIHtcbiAgZnVuY3Rpb24gVihiLCBjLCBkLCBrLCBsKSB7XG4gICAgZm9yICh2YXIgYSA9IDAsIGYgPSAwLCBuID0gMCwgZSA9IDAsIGgsIHEsIG0sIHYgPSAwLCBBID0gMCwgQiA9IDAsIHggPSAwLCBDID0gMCwgcCA9IDAsIEcgPSAwLCByID0gMCwgTiA9IHEgPSAwLCBMID0gMCwgdCA9IDAsIEQgPSBkLmxlbmd0aCwgRiA9IEQgLSAxLCBnID0gXCJcIiwgdSA9IFwiXCIsIFMgPSBcIlwiLCBNID0gXCJcIiwgSDsgciA8IEQ7KSB7XG4gICAgICBtID0gZC5jaGFyQ29kZUF0KHIpO1xuICAgICAgciA9PT0gRiAmJiAwICE9PSBmICsgZSArIG4gKyBhICYmICgwICE9PSBmICYmIChtID0gNDcgPT09IGYgPyAxMCA6IDQ3KSwgZSA9IG4gPSBhID0gMCwgRCsrLCBGKyspO1xuXG4gICAgICBpZiAoMCA9PT0gZiArIGUgKyBuICsgYSkge1xuICAgICAgICBpZiAociA9PT0gRiAmJiAoMCA8IHEgJiYgKGcgPSBnLnJlcGxhY2UoUCwgXCJcIikpLCAwIDwgZy50cmltKCkubGVuZ3RoKSkge1xuICAgICAgICAgIHN3aXRjaCAobSkge1xuICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGcgKz0gZC5jaGFyQXQocik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbSA9IDU5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKDEgPT09IE4pIHN3aXRjaCAobSkge1xuICAgICAgICAgIGNhc2UgMTIzOlxuICAgICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgTiA9IDA7XG5cbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBmb3IgKE4gPSAwLCB0ID0gciwgaCA9IG0sIHItLSwgbSA9IDU5OyB0IDwgRDspIHtcbiAgICAgICAgICAgICAgc3dpdGNoIChkLmNoYXJDb2RlQXQoKyt0KSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgICAgICAgcisrLCBtID0gaDtcblxuICAgICAgICAgICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgICAgICAgY2FzZSAxMjM6XG4gICAgICAgICAgICAgICAgICB0ID0gRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKG0pIHtcbiAgICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICAgIGcgPSBnLnRyaW0oKTtcbiAgICAgICAgICAgIGggPSBnLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICB4ID0gMTtcblxuICAgICAgICAgICAgZm9yICh0ID0gKytyOyByIDwgRDspIHtcbiAgICAgICAgICAgICAgbSA9IGQuY2hhckNvZGVBdChyKTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKG0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICAgICAgICAgIHgrKztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxMjU6XG4gICAgICAgICAgICAgICAgICB4LS07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoMCA9PT0geCkgYnJlYWs7XG4gICAgICAgICAgICAgIHIrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IGQuc3Vic3RyaW5nKHQsIHIpO1xuICAgICAgICAgICAgMCA9PT0gaCAmJiAoaCA9IChnID0gZy5yZXBsYWNlKHFhLCBcIlwiKS50cmltKCkpLmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGgpIHtcbiAgICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgICAgICAwIDwgcSAmJiAoZyA9IGcucmVwbGFjZShQLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgcSA9IGcuY2hhckNvZGVBdCgxKTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAocSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxMDA6XG4gICAgICAgICAgICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgICAgICAgICAgaCA9IGM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBoID0gVztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwID0gVihjLCBoLCBwLCBxLCBsICsgMSk7XG4gICAgICAgICAgICAgICAgdCA9IHAubGVuZ3RoO1xuICAgICAgICAgICAgICAgIDAgPCBYICYmIDAgPT09IHQgJiYgKHQgPSBnLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgMCA8IEUgJiYgKGggPSBpYShXLCBnLCBMKSwgSCA9IE8oMywgcCwgaCwgYywgSSwgeSwgdCwgcSwgbCksIGcgPSBoLmpvaW4oXCJcIiksIHZvaWQgMCAhPT0gSCAmJiAwID09PSAodCA9IChwID0gSC50cmltKCkpLmxlbmd0aCkgJiYgKHEgPSAwLCBwID0gXCJcIikpO1xuICAgICAgICAgICAgICAgIGlmICgwIDwgdCkgc3dpdGNoIChxKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgICAgICAgICAgZyA9IGcucmVwbGFjZShyYSwgc2EpO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIDEwMDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgICAgICAgICAgcCA9IGcgKyBcIntcIiArIHAgKyBcIn1cIjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgICAgICAgICAgICBnID0gZy5yZXBsYWNlKHRhLCBcIiQxICQyXCIgKyAoMCA8IFEgPyBUIDogXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICBwID0gZyArIFwie1wiICsgcCArIFwifVwiO1xuICAgICAgICAgICAgICAgICAgICBwID0gMSA9PT0gdyB8fCAyID09PSB3ICYmIFUoXCJAXCIgKyBwLCAzKSA/IFwiQC13ZWJraXQtXCIgKyBwICsgXCJAXCIgKyBwIDogXCJAXCIgKyBwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcCA9IGcgKyBwLCAxMTIgPT09IGsgJiYgKHAgPSAodSArPSBwLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHAgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcCA9IFYoYywgaWEoYywgZywgTCksIHAsIGssIGwgKyAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgUyArPSBwO1xuICAgICAgICAgICAgcCA9IEwgPSBxID0gRyA9IE4gPSBDID0gMDtcbiAgICAgICAgICAgIGcgPSBcIlwiO1xuICAgICAgICAgICAgbSA9IGQuY2hhckNvZGVBdCgrK3IpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDEyNTpcbiAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgZyA9ICgwIDwgcSA/IGcucmVwbGFjZShQLCBcIlwiKSA6IGcpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICgxIDwgKHQgPSBnLmxlbmd0aCkpIHN3aXRjaCAoMCA9PT0gRyAmJiAoaCA9IGcuY2hhckNvZGVBdCgwKSwgNDUgPT09IGggfHwgOTYgPCBoICYmIDEyMyA+IGgpICYmICh0ID0gKGcgPSBnLnJlcGxhY2UoXCIgXCIsIFwiOlwiKSkubGVuZ3RoKSwgMCA8IEUgJiYgdm9pZCAwICE9PSAoSCA9IE8oMSwgZywgYywgYiwgSSwgeSwgdS5sZW5ndGgsIGssIGwpKSAmJiAwID09PSAodCA9IChnID0gSC50cmltKCkpLmxlbmd0aCkgJiYgKGcgPSBcIlxceDAwXFx4MDBcIiksIGggPSBnLmNoYXJDb2RlQXQoMCksIHEgPSBnLmNoYXJDb2RlQXQoMSksIGggKyBxKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDE2OTpcbiAgICAgICAgICAgICAgY2FzZSAxNjM6XG4gICAgICAgICAgICAgICAgTSArPSBnICsgZC5jaGFyQXQocik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICA1OCAhPT0gZy5jaGFyQ29kZUF0KHQgLSAxKSAmJiAodSArPSBqYShnLCBoLCBxLCBnLmNoYXJDb2RlQXQoMikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEwgPSBxID0gRyA9IE4gPSBDID0gMDtcbiAgICAgICAgICAgIGcgPSBcIlwiO1xuICAgICAgICAgICAgbSA9IGQuY2hhckNvZGVBdCgrK3IpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAobSkge1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIGlmICgwID09PSBmICsgZSArIG4gKyBhICsga2EpIHN3aXRjaCAoQikge1xuICAgICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIGNhc2UgMTI2OlxuICAgICAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgMCA8IEcgJiYgKE4gPSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgNDcgPT09IGYgPyBmID0gMCA6IDAgPT09IHogKyBDICYmIChxID0gMSwgZyArPSBcIlxceDAwXCIpO1xuICAgICAgICAgIDAgPCBFICogbGEgJiYgTygwLCBnLCBjLCBiLCBJLCB5LCB1Lmxlbmd0aCwgaywgbCk7XG4gICAgICAgICAgeSA9IDE7XG4gICAgICAgICAgSSsrO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTk6XG4gICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgIGlmICgwID09PSBmICsgZSArIG4gKyBhKSB7XG4gICAgICAgICAgICB5Kys7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB5Kys7XG4gICAgICAgICAgaCA9IGQuY2hhckF0KHIpO1xuXG4gICAgICAgICAgc3dpdGNoIChtKSB7XG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICBpZiAoMCA9PT0gZSArIGEgKyBmKSBzd2l0Y2ggKHYpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgICAgICBoID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIDMyICE9PSBtICYmIChoID0gXCIgXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGggPSBcIlxcXFwwXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICBoID0gXCJcXFxcZlwiO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgaCA9IFwiXFxcXHZcIjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgIDAgPT09IGUgKyBmICsgYSAmJiAwIDwgeiAmJiAocSA9IEwgPSAxLCBoID0gXCJcXGZcIiArIGgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgICAgIGlmICgwID09PSBlICsgZiArIGEgKyBKICYmIDAgPCBHKSBzd2l0Y2ggKHIgLSBHKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgMTEyID09PSB2ICYmIDU4ID09PSBkLmNoYXJDb2RlQXQociAtIDMpICYmIChKID0gdik7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAxMTEgPT09IEEgJiYgKEogPSBBKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgICAgMCA9PT0gZSArIGYgKyBhICYmIChHID0gcik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgICAwID09PSBmICsgbiArIGUgKyBhICYmIChxID0gMSwgaCArPSBcIlxcclwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICAgIDAgPT09IGYgJiYgKGUgPSBlID09PSBtID8gMCA6IDAgPT09IGUgPyBtIDogZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAwID09PSBmICYmIChlID0gZSA9PT0gbSA/IDAgOiAwID09PSBlID8gbSA6IGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA5MTpcbiAgICAgICAgICAgICAgMCA9PT0gZSArIGYgKyBuICYmIGErKztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgOTM6XG4gICAgICAgICAgICAgIDAgPT09IGUgKyBmICsgbiAmJiBhLS07XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgICAwID09PSBlICsgZiArIGEgJiYgbi0tO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgaWYgKDAgPT09IGUgKyBmICsgYSkge1xuICAgICAgICAgICAgICAgIGlmICgwID09PSBDKSBzd2l0Y2ggKDIgKiB2ICsgMyAqIEEpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgNTMzOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgeCA9IDAsIEMgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuKys7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgICAgMCA9PT0gZiArIG4gKyBlICsgYSArIEcgKyBwICYmIChwID0gMSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgaWYgKCEoMCA8IGUgKyBhICsgbikpIHN3aXRjaCAoZikge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoMiAqIG0gKyAzICogZC5jaGFyQ29kZUF0KHIgKyAxKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDIzNTpcbiAgICAgICAgICAgICAgICAgICAgICBmID0gNDc7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjA6XG4gICAgICAgICAgICAgICAgICAgICAgdCA9IHIsIGYgPSA0MjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgICAgICAgNDcgPT09IG0gJiYgNDIgPT09IHYgJiYgKDMzID09PSBkLmNoYXJDb2RlQXQodCArIDIpICYmICh1ICs9IGQuc3Vic3RyaW5nKHQsIHIgKyAxKSksIGggPSBcIlwiLCBmID0gMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoMCA9PT0gZikge1xuICAgICAgICAgICAgaWYgKDAgPT09IHogKyBlICsgYSArIHAgJiYgMTA3ICE9PSBrICYmIDU5ICE9PSBtKSBzd2l0Y2ggKG0pIHtcbiAgICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgICAgY2FzZSAxMjY6XG4gICAgICAgICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IEMpIHtcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAodikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgICAgaCArPSBcIlxceDAwXCI7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICBoID0gXCJcXHgwMFwiICsgaCArICg0NCA9PT0gbSA/IFwiXCIgOiBcIlxceDAwXCIpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBxID0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Ugc3dpdGNoIChtKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgICBDID0gKyt4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgICAgICAgICAgMCA9PT0gKEMgPSAtLXgpICYmIChxID0gMSwgaCArPSBcIlxceDAwXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHYpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTIzOlxuICAgICAgICAgICAgICAgICAgY2FzZSAxMjU6XG4gICAgICAgICAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAwID09PSBDICYmIChxID0gMSwgaCArPSBcIlxceDAwXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZyArPSBoO1xuICAgICAgICAgICAgMzIgIT09IG0gJiYgOSAhPT0gbSAmJiAoQiA9IG0pO1xuICAgICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICBBID0gdjtcbiAgICAgIHYgPSBtO1xuICAgICAgcisrO1xuICAgIH1cblxuICAgIHQgPSB1Lmxlbmd0aDtcbiAgICAwIDwgWCAmJiAwID09PSB0ICYmIDAgPT09IFMubGVuZ3RoICYmIDAgPT09IGNbMF0ubGVuZ3RoID09PSAhMSAmJiAoMTA5ICE9PSBrIHx8IDEgPT09IGMubGVuZ3RoICYmICgwIDwgeiA/IEsgOiBSKSA9PT0gY1swXSkgJiYgKHQgPSBjLmpvaW4oXCIsXCIpLmxlbmd0aCArIDIpO1xuXG4gICAgaWYgKDAgPCB0KSB7XG4gICAgICBpZiAoMCA9PT0geiAmJiAxMDcgIT09IGspIHtcbiAgICAgICAgZCA9IDA7XG4gICAgICAgIGEgPSBjLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGYgPSBBcnJheShhKTsgZCA8IGE7ICsrZCkge1xuICAgICAgICAgIHYgPSBjW2RdLnNwbGl0KHVhKTtcbiAgICAgICAgICBBID0gXCJcIjtcbiAgICAgICAgICBCID0gMDtcblxuICAgICAgICAgIGZvciAoRCA9IHYubGVuZ3RoOyBCIDwgRDsgKytCKSB7XG4gICAgICAgICAgICBpZiAoISgwID09PSAoeCA9IChlID0gdltCXSkubGVuZ3RoKSAmJiAxIDwgRCkpIHtcbiAgICAgICAgICAgICAgciA9IEEuY2hhckNvZGVBdChBLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICBMID0gZS5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgICBuID0gXCJcIjtcbiAgICAgICAgICAgICAgaWYgKDAgIT09IEIpIHN3aXRjaCAocikge1xuICAgICAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICAgICAgY2FzZSAxMjY6XG4gICAgICAgICAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIG4gPSBcIiBcIjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN3aXRjaCAoTCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgICBlID0gbiArIEs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDEyNjpcbiAgICAgICAgICAgICAgICBjYXNlIDYyOlxuICAgICAgICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgOTE6XG4gICAgICAgICAgICAgICAgICBlID0gbiArIGUgKyBLO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgICAgICAgc3dpdGNoICgyICogZS5jaGFyQ29kZUF0KDEpICsgMyAqIGUuY2hhckNvZGVBdCgyKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDUzMDpcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA8IFkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuICsgZS5zdWJzdHJpbmcoOCwgeCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKDEgPiBCIHx8IDEgPiB2W0IgLSAxXS5sZW5ndGgpIGUgPSBuICsgSyArIGU7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgICAgICAgIG4gPSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGUgPSAxIDwgeCAmJiAwIDwgZS5pbmRleE9mKFwiOlwiKSA/IG4gKyBlLnJlcGxhY2UodmEsIFwiJDFcIiArIEsgKyBcIiQyXCIpIDogbiArIGUgKyBLO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgQSArPSBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZbZF0gPSBBLnJlcGxhY2UoUCwgXCJcIikudHJpbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgYyA9IGY7XG4gICAgICB9XG5cbiAgICAgIGggPSBjO1xuICAgICAgaWYgKDAgPCBFICYmIChIID0gTygyLCB1LCBoLCBiLCBJLCB5LCB0LCBrLCBsKSwgdm9pZCAwICE9PSBIICYmIDAgPT09ICh1ID0gSCkubGVuZ3RoKSkgcmV0dXJuIE0gKyB1ICsgUztcbiAgICAgIHUgPSBoLmpvaW4oXCIsXCIpICsgXCJ7XCIgKyB1ICsgXCJ9XCI7XG5cbiAgICAgIGlmICgwICE9PSB3ICogSikge1xuICAgICAgICAyICE9PSB3IHx8IFUodSwgMikgfHwgKEogPSAwKTtcblxuICAgICAgICBzd2l0Y2ggKEopIHtcbiAgICAgICAgICBjYXNlIDExMTpcbiAgICAgICAgICAgIHUgPSB1LnJlcGxhY2Uod2EsIFwiOi1tb3otJDFcIikgKyB1O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIHUgPSB1LnJlcGxhY2UoWiwgXCI6Oi13ZWJraXQtaW5wdXQtJDFcIikgKyB1LnJlcGxhY2UoWiwgXCI6Oi1tb3otJDFcIikgKyB1LnJlcGxhY2UoWiwgXCI6LW1zLWlucHV0LSQxXCIpICsgdTtcbiAgICAgICAgfVxuXG4gICAgICAgIEogPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBNICsgdSArIFM7XG4gIH1cblxuICBmdW5jdGlvbiBpYShiLCBjLCBkKSB7XG4gICAgdmFyIGsgPSBjLnRyaW0oKS5zcGxpdCh4YSk7XG4gICAgYyA9IGs7XG4gICAgdmFyIGwgPSBrLmxlbmd0aCxcbiAgICAgICAgYSA9IGIubGVuZ3RoO1xuXG4gICAgc3dpdGNoIChhKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHZhciBmID0gMDtcblxuICAgICAgICBmb3IgKGIgPSAwID09PSBhID8gXCJcIiA6IGJbMF0gKyBcIiBcIjsgZiA8IGw7ICsrZikge1xuICAgICAgICAgIGNbZl0gPSBtYShiLCBjW2ZdLCBkLCBhKS50cmltKCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIG4gPSBmID0gMDtcblxuICAgICAgICBmb3IgKGMgPSBbXTsgZiA8IGw7ICsrZikge1xuICAgICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgYTsgKytlKSB7XG4gICAgICAgICAgICBjW24rK10gPSBtYShiW2VdICsgXCIgXCIsIGtbZl0sIGQsIGEpLnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgZnVuY3Rpb24gbWEoYiwgYywgZCwgaykge1xuICAgIHZhciBsID0gYy5jaGFyQ29kZUF0KDApO1xuICAgIDMzID4gbCAmJiAobCA9IChjID0gYy50cmltKCkpLmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgc3dpdGNoIChsKSB7XG4gICAgICBjYXNlIDM4OlxuICAgICAgICBzd2l0Y2ggKHogKyBrKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGlmICgwID09PSBiLnRyaW0oKS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjLnJlcGxhY2UoTSwgXCIkMVwiICsgYi50cmltKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNTg6XG4gICAgICAgIHN3aXRjaCAoYy5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgICAgICBpZiAoMCA8IFkgJiYgMCA8IHopIHJldHVybiBjLnJlcGxhY2UoeWEsIFwiJDFcIikucmVwbGFjZShNLCBcIiQxXCIgKyBSKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBiLnRyaW0oKSArIGM7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKDAgPCBkICogeiAmJiAwIDwgYy5pbmRleE9mKFwiXFxmXCIpKSByZXR1cm4gYy5yZXBsYWNlKE0sICg1OCA9PT0gYi5jaGFyQ29kZUF0KDApID8gXCJcIiA6IFwiJDFcIikgKyBiLnRyaW0oKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGIgKyBjO1xuICB9XG5cbiAgZnVuY3Rpb24gamEoYiwgYywgZCwgaykge1xuICAgIHZhciBsID0gMCxcbiAgICAgICAgYSA9IGIgKyBcIjtcIjtcbiAgICBjID0gMiAqIGMgKyAzICogZCArIDQgKiBrO1xuXG4gICAgaWYgKDk0NCA9PT0gYykge1xuICAgICAgbCA9IGEubGVuZ3RoO1xuICAgICAgYiA9IGEuaW5kZXhPZihcIjpcIiwgOSkgKyAxO1xuICAgICAgZCA9IGEuc3Vic3RyaW5nKDAsIGIpLnRyaW0oKTtcbiAgICAgIGsgPSBhLnN1YnN0cmluZyhiLCBsIC0gMSkudHJpbSgpO1xuXG4gICAgICBzd2l0Y2ggKGEuY2hhckNvZGVBdCg5KSAqIFEpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgaWYgKDExMCAhPT0gYS5jaGFyQ29kZUF0KDEwKSkgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBmb3IgKGEgPSBrLnNwbGl0KChrID0gXCJcIiwgemEpKSwgYiA9IGMgPSAwLCBsID0gYS5sZW5ndGg7IGMgPCBsOyBiID0gMCwgKytjKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBmID0gYVtjXSwgbiA9IGYuc3BsaXQoQWEpOyBmID0gbltiXTspIHtcbiAgICAgICAgICAgICAgdmFyIGUgPSBmLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgIGlmICgxID09PSBRICYmICg2NCA8IGUgJiYgOTAgPiBlIHx8IDk2IDwgZSAmJiAxMjMgPiBlIHx8IDk1ID09PSBlIHx8IDQ1ID09PSBlICYmIDQ1ICE9PSBmLmNoYXJDb2RlQXQoMSkpKSBzd2l0Y2ggKGlzTmFOKHBhcnNlRmxvYXQoZikpICsgKC0xICE9PSBmLmluZGV4T2YoXCIoXCIpKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5maW5pdGVcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImFsdGVybmF0ZVwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYmFja3dhcmRzXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJub3JtYWxcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZvcndhcmRzXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib3RoXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJub25lXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJsaW5lYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVhc2VcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVhc2UtaW5cIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVhc2Utb3V0XCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlYXNlLWluLW91dFwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwicGF1c2VkXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyZXZlcnNlXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhbHRlcm5hdGUtcmV2ZXJzZVwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5oZXJpdFwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5pdGlhbFwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwidW5zZXRcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0ZXAtc3RhcnRcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0ZXAtZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICBmICs9IFQ7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBuW2IrK10gPSBmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBrICs9ICgwID09PSBjID8gXCJcIiA6IFwiLFwiKSArIG4uam9pbihcIiBcIik7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIGsgPSBkICsgayArIFwiO1wiO1xuICAgICAgcmV0dXJuIDEgPT09IHcgfHwgMiA9PT0gdyAmJiBVKGssIDEpID8gXCItd2Via2l0LVwiICsgayArIGsgOiBrO1xuICAgIH1cblxuICAgIGlmICgwID09PSB3IHx8IDIgPT09IHcgJiYgIVUoYSwgMSkpIHJldHVybiBhO1xuXG4gICAgc3dpdGNoIChjKSB7XG4gICAgICBjYXNlIDEwMTU6XG4gICAgICAgIHJldHVybiA0NSA9PT0gYS5jaGFyQ29kZUF0KDkpID8gXCItd2Via2l0LVwiICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDk1MTpcbiAgICAgICAgcmV0dXJuIDExNiA9PT0gYS5jaGFyQ29kZUF0KDMpID8gXCItd2Via2l0LVwiICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDk2MzpcbiAgICAgICAgcmV0dXJuIDExMCA9PT0gYS5jaGFyQ29kZUF0KDUpID8gXCItd2Via2l0LVwiICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDEwMDk6XG4gICAgICAgIGlmICgxMDAgIT09IGEuY2hhckNvZGVBdCg0KSkgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTY5OlxuICAgICAgY2FzZSA5NDI6XG4gICAgICAgIHJldHVybiBcIi13ZWJraXQtXCIgKyBhICsgYTtcblxuICAgICAgY2FzZSA5Nzg6XG4gICAgICAgIHJldHVybiBcIi13ZWJraXQtXCIgKyBhICsgXCItbW96LVwiICsgYSArIGE7XG5cbiAgICAgIGNhc2UgMTAxOTpcbiAgICAgIGNhc2UgOTgzOlxuICAgICAgICByZXR1cm4gXCItd2Via2l0LVwiICsgYSArIFwiLW1vei1cIiArIGEgKyBcIi1tcy1cIiArIGEgKyBhO1xuXG4gICAgICBjYXNlIDg4MzpcbiAgICAgICAgcmV0dXJuIDQ1ID09PSBhLmNoYXJDb2RlQXQoOCkgPyBcIi13ZWJraXQtXCIgKyBhICsgYSA6IGE7XG5cbiAgICAgIGNhc2UgOTMyOlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg0KSkgc3dpdGNoIChhLmNoYXJDb2RlQXQoNSkpIHtcbiAgICAgICAgICBjYXNlIDEwMzpcbiAgICAgICAgICAgIHJldHVybiBcIi13ZWJraXQtYm94LVwiICsgYS5yZXBsYWNlKFwiLWdyb3dcIiwgXCJcIikgKyBcIi13ZWJraXQtXCIgKyBhICsgXCItbXMtXCIgKyBhLnJlcGxhY2UoXCJncm93XCIsIFwicG9zaXRpdmVcIikgKyBhO1xuXG4gICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICByZXR1cm4gXCItd2Via2l0LVwiICsgYSArIFwiLW1zLVwiICsgYS5yZXBsYWNlKFwic2hyaW5rXCIsIFwibmVnYXRpdmVcIikgKyBhO1xuXG4gICAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICAgIHJldHVybiBcIi13ZWJraXQtXCIgKyBhICsgXCItbXMtXCIgKyBhLnJlcGxhY2UoXCJiYXNpc1wiLCBcInByZWZlcnJlZC1zaXplXCIpICsgYTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCItd2Via2l0LVwiICsgYSArIFwiLW1zLVwiICsgYSArIGE7XG5cbiAgICAgIGNhc2UgOTY0OlxuICAgICAgICByZXR1cm4gXCItd2Via2l0LVwiICsgYSArIFwiLW1zLWZsZXgtXCIgKyBhICsgYTtcblxuICAgICAgY2FzZSAxMDIzOlxuICAgICAgICBpZiAoOTkgIT09IGEuY2hhckNvZGVBdCg4KSkgYnJlYWs7XG4gICAgICAgIGIgPSBhLnN1YnN0cmluZyhhLmluZGV4T2YoXCI6XCIsIDE1KSkucmVwbGFjZShcImZsZXgtXCIsIFwiXCIpLnJlcGxhY2UoXCJzcGFjZS1iZXR3ZWVuXCIsIFwianVzdGlmeVwiKTtcbiAgICAgICAgcmV0dXJuIFwiLXdlYmtpdC1ib3gtcGFja1wiICsgYiArIFwiLXdlYmtpdC1cIiArIGEgKyBcIi1tcy1mbGV4LXBhY2tcIiArIGIgKyBhO1xuXG4gICAgICBjYXNlIDEwMDU6XG4gICAgICAgIHJldHVybiBCYS50ZXN0KGEpID8gYS5yZXBsYWNlKG5hLCBcIjotd2Via2l0LVwiKSArIGEucmVwbGFjZShuYSwgXCI6LW1vei1cIikgKyBhIDogYTtcblxuICAgICAgY2FzZSAxRTM6XG4gICAgICAgIGIgPSBhLnN1YnN0cmluZygxMykudHJpbSgpO1xuICAgICAgICBsID0gYi5pbmRleE9mKFwiLVwiKSArIDE7XG5cbiAgICAgICAgc3dpdGNoIChiLmNoYXJDb2RlQXQoMCkgKyBiLmNoYXJDb2RlQXQobCkpIHtcbiAgICAgICAgICBjYXNlIDIyNjpcbiAgICAgICAgICAgIGIgPSBhLnJlcGxhY2UoYWEsIFwidGJcIik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjMyOlxuICAgICAgICAgICAgYiA9IGEucmVwbGFjZShhYSwgXCJ0Yi1ybFwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMjA6XG4gICAgICAgICAgICBiID0gYS5yZXBsYWNlKGFhLCBcImxyXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gXCItd2Via2l0LVwiICsgYSArIFwiLW1zLVwiICsgYiArIGE7XG5cbiAgICAgIGNhc2UgMTAxNzpcbiAgICAgICAgaWYgKC0xID09PSBhLmluZGV4T2YoXCJzdGlja3lcIiwgOSkpIGJyZWFrO1xuXG4gICAgICBjYXNlIDk3NTpcbiAgICAgICAgbCA9IChhID0gYikubGVuZ3RoIC0gMTA7XG4gICAgICAgIGIgPSAoMzMgPT09IGEuY2hhckNvZGVBdChsKSA/IGEuc3Vic3RyaW5nKDAsIGwpIDogYSkuc3Vic3RyaW5nKGIuaW5kZXhPZihcIjpcIiwgNykgKyAxKS50cmltKCk7XG5cbiAgICAgICAgc3dpdGNoIChjID0gYi5jaGFyQ29kZUF0KDApICsgKGIuY2hhckNvZGVBdCg3KSB8IDApKSB7XG4gICAgICAgICAgY2FzZSAyMDM6XG4gICAgICAgICAgICBpZiAoMTExID4gYi5jaGFyQ29kZUF0KDgpKSBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgYSA9IGEucmVwbGFjZShiLCBcIi13ZWJraXQtXCIgKyBiKSArIFwiO1wiICsgYTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMDc6XG4gICAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgICBhID0gYS5yZXBsYWNlKGIsIFwiLXdlYmtpdC1cIiArICgxMDIgPCBjID8gXCJpbmxpbmUtXCIgOiBcIlwiKSArIFwiYm94XCIpICsgXCI7XCIgKyBhLnJlcGxhY2UoYiwgXCItd2Via2l0LVwiICsgYikgKyBcIjtcIiArIGEucmVwbGFjZShiLCBcIi1tcy1cIiArIGIgKyBcImJveFwiKSArIFwiO1wiICsgYTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhICsgXCI7XCI7XG5cbiAgICAgIGNhc2UgOTM4OlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg1KSkgc3dpdGNoIChhLmNoYXJDb2RlQXQoNikpIHtcbiAgICAgICAgICBjYXNlIDEwNTpcbiAgICAgICAgICAgIHJldHVybiBiID0gYS5yZXBsYWNlKFwiLWl0ZW1zXCIsIFwiXCIpLCBcIi13ZWJraXQtXCIgKyBhICsgXCItd2Via2l0LWJveC1cIiArIGIgKyBcIi1tcy1mbGV4LVwiICsgYiArIGE7XG5cbiAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgIHJldHVybiBcIi13ZWJraXQtXCIgKyBhICsgXCItbXMtZmxleC1pdGVtLVwiICsgYS5yZXBsYWNlKENhLCBcIlwiKSArIGE7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFwiLXdlYmtpdC1cIiArIGEgKyBcIi1tcy1mbGV4LWxpbmUtcGFja1wiICsgYS5yZXBsYWNlKFwiYWxpZ24tY29udGVudFwiLCBcIlwiKSArIGE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTUzOlxuICAgICAgICBpZiAoMCA8IChsID0gYS5pbmRleE9mKFwiLWNvbnRlbnRcIiwgOSkpICYmIDEwOSA9PT0gYS5jaGFyQ29kZUF0KGwgLSAzKSAmJiA0NSAhPT0gYS5jaGFyQ29kZUF0KGwgLSA0KSkgcmV0dXJuIGIgPSBhLnN1YnN0cmluZyhsIC0gMyksIFwid2lkdGg6LXdlYmtpdC1cIiArIGIgKyBcIndpZHRoOi1tb3otXCIgKyBiICsgXCJ3aWR0aDpcIiArIGI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDk2MjpcbiAgICAgICAgaWYgKGEgPSBcIi13ZWJraXQtXCIgKyBhICsgKDEwMiA9PT0gYS5jaGFyQ29kZUF0KDUpID8gXCItbXMtXCIgKyBhIDogXCJcIikgKyBhLCAyMTEgPT09IGQgKyBrICYmIDEwNSA9PT0gYS5jaGFyQ29kZUF0KDEzKSAmJiAwIDwgYS5pbmRleE9mKFwidHJhbnNmb3JtXCIsIDEwKSkgcmV0dXJuIGEuc3Vic3RyaW5nKDAsIGEuaW5kZXhPZihcIjtcIiwgMjcpICsgMSkucmVwbGFjZShEYSwgXCIkMS13ZWJraXQtJDJcIikgKyBhO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9XG5cbiAgZnVuY3Rpb24gVShiLCBjKSB7XG4gICAgdmFyIGQgPSBiLmluZGV4T2YoMSA9PT0gYyA/IFwiOlwiIDogXCJ7XCIpLFxuICAgICAgICBrID0gYi5zdWJzdHJpbmcoMCwgMyAhPT0gYyA/IGQgOiAxMCk7XG4gICAgZCA9IGIuc3Vic3RyaW5nKGQgKyAxLCBiLmxlbmd0aCAtIDEpO1xuICAgIHJldHVybiBiYSgyICE9PSBjID8gayA6IGsucmVwbGFjZShFYSwgXCIkMVwiKSwgZCwgYyk7XG4gIH1cblxuICBmdW5jdGlvbiBzYShiLCBjKSB7XG4gICAgdmFyIGQgPSBqYShjLCBjLmNoYXJDb2RlQXQoMCksIGMuY2hhckNvZGVBdCgxKSwgYy5jaGFyQ29kZUF0KDIpKTtcbiAgICByZXR1cm4gZCAhPT0gYyArIFwiO1wiID8gZC5yZXBsYWNlKEZhLCBcIiBvciAoJDEpXCIpLnN1YnN0cmluZyg0KSA6IFwiKFwiICsgYyArIFwiKVwiO1xuICB9XG5cbiAgZnVuY3Rpb24gTyhiLCBjLCBkLCBrLCBsLCBhLCBmLCBuLCBlKSB7XG4gICAgZm9yICh2YXIgaCA9IDAsIHEgPSBjLCBtOyBoIDwgRTsgKytoKSB7XG4gICAgICBzd2l0Y2ggKG0gPSBjYVtoXS5jYWxsKEYsIGIsIHEsIGQsIGssIGwsIGEsIGYsIG4sIGUpKSB7XG4gICAgICAgIGNhc2Ugdm9pZCAwOlxuICAgICAgICBjYXNlICExOlxuICAgICAgICBjYXNlICEwOlxuICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBxID0gbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHEpIHtcbiAgICAgIGNhc2Ugdm9pZCAwOlxuICAgICAgY2FzZSAhMTpcbiAgICAgIGNhc2UgITA6XG4gICAgICBjYXNlIG51bGw6XG4gICAgICBjYXNlIGM6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkYShiKSB7XG4gICAgc3dpdGNoIChiKSB7XG4gICAgICBjYXNlIHZvaWQgMDpcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgRSA9IGNhLmxlbmd0aCA9IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzd2l0Y2ggKGIuY29uc3RydWN0b3IpIHtcbiAgICAgICAgICBjYXNlIEFycmF5OlxuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDAsIGQgPSBiLmxlbmd0aDsgYyA8IGQ7ICsrYykge1xuICAgICAgICAgICAgICBkYShiW2NdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIEZ1bmN0aW9uOlxuICAgICAgICAgICAgY2FbRSsrXSA9IGI7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgQm9vbGVhbjpcbiAgICAgICAgICAgIGxhID0gISFiIHwgMDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIGRhO1xuICB9XG5cbiAgZnVuY3Rpb24gZWEoYikge1xuICAgIGZvciAodmFyIGMgaW4gYikge1xuICAgICAgdmFyIGQgPSBiW2NdO1xuXG4gICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgY2FzZSBcImtleWZyYW1lXCI6XG4gICAgICAgICAgUSA9IGQgfCAwO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJnbG9iYWxcIjpcbiAgICAgICAgICBZID0gZCB8IDA7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImNhc2NhZGVcIjpcbiAgICAgICAgICB6ID0gZCB8IDA7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImNvbXByZXNzXCI6XG4gICAgICAgICAgb2EgPSBkIHwgMDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwic2VtaWNvbG9uXCI6XG4gICAgICAgICAga2EgPSBkIHwgMDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwicHJlc2VydmVcIjpcbiAgICAgICAgICBYID0gZCB8IDA7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInByZWZpeFwiOlxuICAgICAgICAgIGJhID0gbnVsbCwgZCA/IFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGQgPyB3ID0gMSA6ICh3ID0gMiwgYmEgPSBkKSA6IHcgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlYTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEYoYiwgYykge1xuICAgIGlmICh2b2lkIDAgIT09IHRoaXMgJiYgdGhpcy5jb25zdHJ1Y3RvciA9PT0gRikgcmV0dXJuIGZhKGIpO1xuICAgIHZhciBkID0gYixcbiAgICAgICAgayA9IGQuY2hhckNvZGVBdCgwKTtcbiAgICAzMyA+IGsgJiYgKGsgPSAoZCA9IGQudHJpbSgpKS5jaGFyQ29kZUF0KDApKTtcbiAgICAwIDwgUSAmJiAoVCA9IGQucmVwbGFjZShHYSwgOTEgPT09IGsgPyBcIlwiIDogXCItXCIpKTtcbiAgICBrID0gMTtcbiAgICAxID09PSB6ID8gUiA9IGQgOiBLID0gZDtcbiAgICBkID0gW1JdO1xuXG4gICAgaWYgKDAgPCBFKSB7XG4gICAgICB2YXIgbCA9IE8oLTEsIGMsIGQsIGQsIEksIHksIDAsIDAsIDApO1xuICAgICAgdm9pZCAwICE9PSBsICYmIFwic3RyaW5nXCIgPT09IHR5cGVvZiBsICYmIChjID0gbCk7XG4gICAgfVxuXG4gICAgdmFyIGEgPSBWKFcsIGQsIGMsIDAsIDApO1xuICAgIDAgPCBFICYmIChsID0gTygtMiwgYSwgZCwgZCwgSSwgeSwgYS5sZW5ndGgsIDAsIDApLCB2b2lkIDAgIT09IGwgJiYgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIChhID0gbCkgJiYgKGsgPSAwKSk7XG4gICAgSyA9IFIgPSBUID0gXCJcIjtcbiAgICBKID0gMDtcbiAgICB5ID0gSSA9IDE7XG4gICAgcmV0dXJuIDAgPT09IG9hICogayA/IGEgOiBhLnJlcGxhY2UoUCwgXCJcIikucmVwbGFjZShIYSwgXCJcIikucmVwbGFjZShJYSwgXCIkMVwiKS5yZXBsYWNlKEphLCBcIiQxXCIpLnJlcGxhY2UoS2EsIFwiIFwiKTtcbiAgfVxuXG4gIHZhciBxYSA9IC9eXFwwKy9nLFxuICAgICAgUCA9IC9bXFwwXFxyXFxmXS9nLFxuICAgICAgbmEgPSAvOiAqL2csXG4gICAgICBCYSA9IC96b298Z3JhLyxcbiAgICAgIERhID0gLyhbLDogXSkodHJhbnNmb3JtKS9nLFxuICAgICAgemEgPSAvLCtcXHMqKD8hW14oXSpbKV0pL2csXG4gICAgICBBYSA9IC8gK1xccyooPyFbXihdKlspXSkvZyxcbiAgICAgIHVhID0gLyAqW1xcMF0gKi9nLFxuICAgICAgeGEgPSAvLFxccis/L2csXG4gICAgICBNID0gLyhbXFx0XFxyXFxuIF0pKlxcZj8mL2csXG4gICAgICB5YSA9IC86Z2xvYmFsXFwoKCg/OlteXFwoXFwpXFxbXFxdXSp8XFxbLipcXF18XFwoW15cXChcXCldKlxcKSkqKVxcKS9nLFxuICAgICAgR2EgPSAvXFxXKy9nLFxuICAgICAgdGEgPSAvQChrXFx3KylcXHMqKFxcUyopXFxzKi8sXG4gICAgICBaID0gLzo6KHBsYWNlKS9nLFxuICAgICAgd2EgPSAvOihyZWFkLW9ubHkpL2csXG4gICAgICBIYSA9IC9cXHMrKD89W3tcXF07PTo+XSkvZyxcbiAgICAgIElhID0gLyhbW309Oj5dKVxccysvZyxcbiAgICAgIEphID0gLyhcXHtbXntdKz8pOyg/PVxcfSkvZyxcbiAgICAgIEthID0gL1xcc3syLH0vZyxcbiAgICAgIHZhID0gLyhbXlxcKF0pKDorKSAqL2csXG4gICAgICBhYSA9IC9bc3ZoXVxcdystW3RibHJdezJ9LyxcbiAgICAgIHJhID0gL1xcKFxccyooLiopXFxzKlxcKS9nLFxuICAgICAgRmEgPSAvKFteXSo/KTsvZyxcbiAgICAgIENhID0gLy1zZWxmfGZsZXgtL2csXG4gICAgICBFYSA9IC9bXl0qPyg6W3JwXVtlbF1hW1xcdy1dKylbXl0qLyxcbiAgICAgIHkgPSAxLFxuICAgICAgSSA9IDEsXG4gICAgICBKID0gMCxcbiAgICAgIHogPSAxLFxuICAgICAgdyA9IDEsXG4gICAgICBZID0gMSxcbiAgICAgIG9hID0gMCxcbiAgICAgIGthID0gMCxcbiAgICAgIFggPSAwLFxuICAgICAgVyA9IFtdLFxuICAgICAgY2EgPSBbXSxcbiAgICAgIEUgPSAwLFxuICAgICAgYmEgPSBudWxsLFxuICAgICAgbGEgPSAwLFxuICAgICAgUSA9IDEsXG4gICAgICBUID0gXCJcIixcbiAgICAgIEsgPSBcIlwiLFxuICAgICAgUiA9IFwiXCI7XG4gIEYudXNlID0gZGE7XG4gIEYuc2V0ID0gZWE7XG4gIHZvaWQgMCAhPT0gaGEgJiYgZWEoaGEpO1xuICByZXR1cm4gRjtcbn07XG5cbnZhciBtZW1vaXplID0gZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn07XG52YXIgU1RZTEVTX0tFWSA9ICdfX2Vtb3Rpb25fc3R5bGVzJztcbnZhciB1bml0bGVzcyA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lcy5qcy5tYXBcblxuXG4vKioqLyB9KSxcbi8qIDEwNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX3N0eWxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xuXG52YXIgX3N0eWxlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHlsZXMpO1xuXG52YXIgX2RhdGFTZXJ2aWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XG5cbnZhciBfZGF0YVNlcnZpY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGF0YVNlcnZpY2UpO1xuXG52YXIgX3N0b3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7XG5cbnZhciBfc3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RvcmUpO1xuXG52YXIgX3V0aWxpdGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xuXG52YXIgX2lmcmFtZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzMpO1xuXG52YXIgX2lmcmFtZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pZnJhbWUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBET01BSU4gPSAnYWRtaW4udHlwZWZvcm0uY29tJztcbnZhciBUWVBFID0gJ3BvcHVwJztcbnZhciBERUZBVUxUX0FVVE9DTE9TRV9USU1FT1VUID0gNTtcblxudmFyIFdyYXBwZXIgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdkaXYnLCB7XG4gIHRhcmdldDogJ2U0NTUwaDQwJ1xufSkoJ3Zpc2liaWxpdHk6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAub3BlbiA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nO1xufSwgJztvcGFjaXR5OicsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLm9wZW4gPyAxIDogMDtcbn0sICc7YmFja2dyb3VuZC1jb2xvcjonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5iYWNrZ3JvdW5kQ29sb3I7XG59LCAnO3Bvc2l0aW9uOmZpeGVkICFpbXBvcnRhbnQ7ei1pbmRleDoxMDAwO2xlZnQ6MCAhaW1wb3J0YW50O3JpZ2h0OjAgIWltcG9ydGFudDt0b3A6MCAhaW1wb3J0YW50O2JvdHRvbTowICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnQ7aGVpZ2h0OjEwMCU7dHJhbnNpdGlvbjphbGwgNDAwbXMgZWFzZTsnKTtcblxudmFyIENsb3NlV3JhcHBlciA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlczIuZGVmYXVsdCkoJ2RpdicsIHtcbiAgdGFyZ2V0OiAnZTQ1NTBoNDEnXG59KSgncG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAxO3RvcDowO3JpZ2h0OjA7Zm9udC1zaXplOjIwcHg7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt3aWR0aDo1MHB4O2hlaWdodDo1MHB4OycpO1xuXG52YXIgY2xvc2VBcnJvdyA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlcy5jc3MpKCdib3JkZXItcmFkaXVzOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MnB4O3dpZHRoOjI1cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NnB4O3RvcDo2cHg7Jyk7XG5cbnZhciBBcnJvd0xlZnQgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdzcGFuJywge1xuICB0YXJnZXQ6ICdlNDU1MGg0Midcbn0pKGNsb3NlQXJyb3csICdcXG4gIGJhY2tncm91bmQtY29sb3I6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYmFja2dyb3VuZENvbG9yO1xufSwgJzt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMTNweCkgcm90YXRlM2QoMCwwLDEsLTEzNWRlZyk7Jyk7XG5cbnZhciBBcnJvd1JpZ2h0ID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KSgnc3BhbicsIHtcbiAgdGFyZ2V0OiAnZTQ1NTBoNDMnXG59KShjbG9zZUFycm93LCAnXFxuICBiYWNrZ3JvdW5kLWNvbG9yOicsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLmJhY2tncm91bmRDb2xvcjtcbn0sICc7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDEzcHgpIHJvdGF0ZTNkKDAsMCwxLC00NWRlZyk7Jyk7XG5cbigwLCBfc3R5bGVzLmluamVjdEdsb2JhbCkoJy5fX3R5cGVmb3JtLWVtYmVkLW1vYmlsZS1tb2RhbC1vcGVue292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50O3Bvc2l0aW9uOmZpeGVkICFpbXBvcnRhbnQ7dG9wOjAgIWltcG9ydGFudDtsZWZ0OjAgIWltcG9ydGFudDtyaWdodDowICFpbXBvcnRhbnQ7Ym90dG9tOjAgIWltcG9ydGFudDt9Jyk7XG5cbnZhciBNb2JpbGVNb2RhbCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhNb2JpbGVNb2RhbCwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTW9iaWxlTW9kYWwocHJvcHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTW9iaWxlTW9kYWwpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKE1vYmlsZU1vZGFsLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTW9iaWxlTW9kYWwpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgIGJ1dHRvbkNvbG9yOiAnI0ZGRidcbiAgICB9O1xuXG4gICAgX3RoaXMub25BdXRvQ2xvc2UgPSBfdGhpcy5vbkF1dG9DbG9zZS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkZvcm1TdWJtaXQgPSBfdGhpcy5vbkZvcm1TdWJtaXQuYmluZChfdGhpcyk7XG4gICAgX3RoaXMuY2xvc2UgPSBfdGhpcy5jbG9zZS5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTW9iaWxlTW9kYWwsIFt7XG4gICAga2V5OiAnb25BdXRvQ2xvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkF1dG9DbG9zZShlKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIGNhblNldEF1dG9jbG9zZURlbGF5ID0gZS5kZXRhaWwuaXNQcm9QbHVzIHx8IGUuZGV0YWlsLmNhblNldEF1dG9jbG9zZURlbGF5O1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNBdXRvQ2xvc2VFbmFibGVkID0gX3Byb3BzLmlzQXV0b0Nsb3NlRW5hYmxlZCxcbiAgICAgICAgICBhdXRvQ2xvc2UgPSBfcHJvcHMuYXV0b0Nsb3NlO1xuXG4gICAgICB2YXIgdGltZW91dCA9IChjYW5TZXRBdXRvY2xvc2VEZWxheSA/IGF1dG9DbG9zZSA6IERFRkFVTFRfQVVUT0NMT1NFX1RJTUVPVVQpICogMTAwMDtcblxuICAgICAgaWYgKGlzQXV0b0Nsb3NlRW5hYmxlZCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25Gb3JtU3VibWl0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Gb3JtU3VibWl0KCkge1xuICAgICAgdmFyIG9uU3VibWl0ID0gdGhpcy5wcm9wcy5vblN1Ym1pdDtcblxuICAgICAgb25TdWJtaXQgJiYgb25TdWJtaXQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIHVpZCA9IF9kYXRhU2VydmljZTIuZGVmYXVsdC5nZXRVaWRGcm9tVVJMKHRoaXMucHJvcHMudXJsKTtcblxuICAgICAgX2RhdGFTZXJ2aWNlMi5kZWZhdWx0LmdldEZvcm1EYXRhKHVpZCwgRE9NQUlOKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3N0b3JlMi5kZWZhdWx0KSh1aWQsIFRZUEUsIF90aGlzMy5wcm9wcy51cmwsIF90aGlzMy5wcm9wcy5idXR0b25UZXh0LCBkYXRhKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGZvcm0gPSBfcmVmLmZvcm07XG5cbiAgICAgICAgX3RoaXMzLnNldFN0YXRlKHtcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjJyArIGZvcm1bJ2JhY2tncm91bmQtY29sb3InXSxcbiAgICAgICAgICBidXR0b25Db2xvcjogJyMnICsgZm9ybVsnYnV0dG9uLWNvbG9yJ11cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBfdXRpbGl0aWVzLm9uTWVzc2FnZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZW1iZWQtYXV0by1jbG9zZS1wb3B1cCcsIHRoaXMub25BdXRvQ2xvc2UpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Zvcm0tc3VibWl0JywgdGhpcy5vbkZvcm1TdWJtaXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIF91dGlsaXRpZXMub25NZXNzYWdlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdlbWJlZC1hdXRvLWNsb3NlLXBvcHVwJywgdGhpcy5vbkF1dG9DbG9zZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9ybS1zdWJtaXQnLCB0aGlzLm9uRm9ybVN1Ym1pdCk7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnX190eXBlZm9ybS1lbWJlZC1tb2JpbGUtbW9kYWwtb3BlbicpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Nsb3NlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ19fdHlwZWZvcm0tZW1iZWQtbW9iaWxlLW1vZGFsLW9wZW4nKTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25DbG9zZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgdXJsID0gX3Byb3BzMi51cmwsXG4gICAgICAgICAgb3BlbiA9IF9wcm9wczIub3BlbjtcbiAgICAgIHZhciBfc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IF9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgYnV0dG9uQ29sb3IgPSBfc3RhdGUuYnV0dG9uQ29sb3I7XG5cblxuICAgICAgaWYgKHRoaXMucHJvcHMub3Blbikge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ19fdHlwZWZvcm0tZW1iZWQtbW9iaWxlLW1vZGFsLW9wZW4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBXcmFwcGVyLFxuICAgICAgICB7XG4gICAgICAgICAgb3Blbjogb3BlbixcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAnZGF0YS1xYSc6ICdtb2JpbGUtbW9kYWwnXG4gICAgICAgIH0sXG4gICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIENsb3NlV3JhcHBlcixcbiAgICAgICAgICB7ICdkYXRhLXFhJzogJ2Nsb3NlLWJ1dHRvbi1tb2JpbGUnLCBvbkNsaWNrOiB0aGlzLmNsb3NlIH0sXG4gICAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQXJyb3dMZWZ0LCB7IGJhY2tncm91bmRDb2xvcjogYnV0dG9uQ29sb3IgfSksXG4gICAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQXJyb3dSaWdodCwgeyBiYWNrZ3JvdW5kQ29sb3I6IGJ1dHRvbkNvbG9yIH0pXG4gICAgICAgICksXG4gICAgICAgIG9wZW4gJiYgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX2lmcmFtZTIuZGVmYXVsdCwgeyBzcmM6IHVybCB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTW9iaWxlTW9kYWw7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5Nb2JpbGVNb2RhbC5wcm9wVHlwZXMgPSB7XG4gIHVybDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIG9wZW46IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgYnV0dG9uVGV4dDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIG9uQ2xvc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgb25TdWJtaXQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgYXV0b0Nsb3NlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlclxufTtcblxuTW9iaWxlTW9kYWwuZGVmYXVsdFByb3BzID0ge1xuICBvcGVuOiBmYWxzZSxcbiAgYXV0b0Nsb3NlOiBudWxsXG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBNb2JpbGVNb2RhbDtcblxuLyoqKi8gfSksXG4vKiAxMDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fOy8vIFRpbnlDb2xvciB2MS40LjFcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZ3JpbnMvVGlueUNvbG9yXG4vLyBCcmlhbiBHcmluc3RlYWQsIE1JVCBMaWNlbnNlXG5cbihmdW5jdGlvbihNYXRoKSB7XG5cbnZhciB0cmltTGVmdCA9IC9eXFxzKy8sXG4gICAgdHJpbVJpZ2h0ID0gL1xccyskLyxcbiAgICB0aW55Q291bnRlciA9IDAsXG4gICAgbWF0aFJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICBtYXRoTWluID0gTWF0aC5taW4sXG4gICAgbWF0aE1heCA9IE1hdGgubWF4LFxuICAgIG1hdGhSYW5kb20gPSBNYXRoLnJhbmRvbTtcblxuZnVuY3Rpb24gdGlueWNvbG9yIChjb2xvciwgb3B0cykge1xuXG4gICAgY29sb3IgPSAoY29sb3IpID8gY29sb3IgOiAnJztcbiAgICBvcHRzID0gb3B0cyB8fCB7IH07XG5cbiAgICAvLyBJZiBpbnB1dCBpcyBhbHJlYWR5IGEgdGlueWNvbG9yLCByZXR1cm4gaXRzZWxmXG4gICAgaWYgKGNvbG9yIGluc3RhbmNlb2YgdGlueWNvbG9yKSB7XG4gICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGNhbGwgdXNpbmcgbmV3IGluc3RlYWRcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgdGlueWNvbG9yKSkge1xuICAgICAgICByZXR1cm4gbmV3IHRpbnljb2xvcihjb2xvciwgb3B0cyk7XG4gICAgfVxuXG4gICAgdmFyIHJnYiA9IGlucHV0VG9SR0IoY29sb3IpO1xuICAgIHRoaXMuX29yaWdpbmFsSW5wdXQgPSBjb2xvcixcbiAgICB0aGlzLl9yID0gcmdiLnIsXG4gICAgdGhpcy5fZyA9IHJnYi5nLFxuICAgIHRoaXMuX2IgPSByZ2IuYixcbiAgICB0aGlzLl9hID0gcmdiLmEsXG4gICAgdGhpcy5fcm91bmRBID0gbWF0aFJvdW5kKDEwMCp0aGlzLl9hKSAvIDEwMCxcbiAgICB0aGlzLl9mb3JtYXQgPSBvcHRzLmZvcm1hdCB8fCByZ2IuZm9ybWF0O1xuICAgIHRoaXMuX2dyYWRpZW50VHlwZSA9IG9wdHMuZ3JhZGllbnRUeXBlO1xuXG4gICAgLy8gRG9uJ3QgbGV0IHRoZSByYW5nZSBvZiBbMCwyNTVdIGNvbWUgYmFjayBpbiBbMCwxXS5cbiAgICAvLyBQb3RlbnRpYWxseSBsb3NlIGEgbGl0dGxlIGJpdCBvZiBwcmVjaXNpb24gaGVyZSwgYnV0IHdpbGwgZml4IGlzc3VlcyB3aGVyZVxuICAgIC8vIC41IGdldHMgaW50ZXJwcmV0ZWQgYXMgaGFsZiBvZiB0aGUgdG90YWwsIGluc3RlYWQgb2YgaGFsZiBvZiAxXG4gICAgLy8gSWYgaXQgd2FzIHN1cHBvc2VkIHRvIGJlIDEyOCwgdGhpcyB3YXMgYWxyZWFkeSB0YWtlbiBjYXJlIG9mIGJ5IGBpbnB1dFRvUmdiYFxuICAgIGlmICh0aGlzLl9yIDwgMSkgeyB0aGlzLl9yID0gbWF0aFJvdW5kKHRoaXMuX3IpOyB9XG4gICAgaWYgKHRoaXMuX2cgPCAxKSB7IHRoaXMuX2cgPSBtYXRoUm91bmQodGhpcy5fZyk7IH1cbiAgICBpZiAodGhpcy5fYiA8IDEpIHsgdGhpcy5fYiA9IG1hdGhSb3VuZCh0aGlzLl9iKTsgfVxuXG4gICAgdGhpcy5fb2sgPSByZ2Iub2s7XG4gICAgdGhpcy5fdGNfaWQgPSB0aW55Q291bnRlcisrO1xufVxuXG50aW55Y29sb3IucHJvdG90eXBlID0ge1xuICAgIGlzRGFyazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJyaWdodG5lc3MoKSA8IDEyODtcbiAgICB9LFxuICAgIGlzTGlnaHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNEYXJrKCk7XG4gICAgfSxcbiAgICBpc1ZhbGlkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29rO1xuICAgIH0sXG4gICAgZ2V0T3JpZ2luYWxJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dDtcbiAgICB9LFxuICAgIGdldEZvcm1hdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXQ7XG4gICAgfSxcbiAgICBnZXRBbHBoYTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hO1xuICAgIH0sXG4gICAgZ2V0QnJpZ2h0bmVzczogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vaHR0cDovL3d3dy53My5vcmcvVFIvQUVSVCNjb2xvci1jb250cmFzdFxuICAgICAgICB2YXIgcmdiID0gdGhpcy50b1JnYigpO1xuICAgICAgICByZXR1cm4gKHJnYi5yICogMjk5ICsgcmdiLmcgKiA1ODcgKyByZ2IuYiAqIDExNCkgLyAxMDAwO1xuICAgIH0sXG4gICAgZ2V0THVtaW5hbmNlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy9odHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICAgICAgIHZhciByZ2IgPSB0aGlzLnRvUmdiKCk7XG4gICAgICAgIHZhciBSc1JHQiwgR3NSR0IsIEJzUkdCLCBSLCBHLCBCO1xuICAgICAgICBSc1JHQiA9IHJnYi5yLzI1NTtcbiAgICAgICAgR3NSR0IgPSByZ2IuZy8yNTU7XG4gICAgICAgIEJzUkdCID0gcmdiLmIvMjU1O1xuXG4gICAgICAgIGlmIChSc1JHQiA8PSAwLjAzOTI4KSB7UiA9IFJzUkdCIC8gMTIuOTI7fSBlbHNlIHtSID0gTWF0aC5wb3coKChSc1JHQiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KTt9XG4gICAgICAgIGlmIChHc1JHQiA8PSAwLjAzOTI4KSB7RyA9IEdzUkdCIC8gMTIuOTI7fSBlbHNlIHtHID0gTWF0aC5wb3coKChHc1JHQiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KTt9XG4gICAgICAgIGlmIChCc1JHQiA8PSAwLjAzOTI4KSB7QiA9IEJzUkdCIC8gMTIuOTI7fSBlbHNlIHtCID0gTWF0aC5wb3coKChCc1JHQiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KTt9XG4gICAgICAgIHJldHVybiAoMC4yMTI2ICogUikgKyAoMC43MTUyICogRykgKyAoMC4wNzIyICogQik7XG4gICAgfSxcbiAgICBzZXRBbHBoYTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdGhpcy5fYSA9IGJvdW5kQWxwaGEodmFsdWUpO1xuICAgICAgICB0aGlzLl9yb3VuZEEgPSBtYXRoUm91bmQoMTAwKnRoaXMuX2EpIC8gMTAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHRvSHN2OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhzdiA9IHJnYlRvSHN2KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IpO1xuICAgICAgICByZXR1cm4geyBoOiBoc3YuaCAqIDM2MCwgczogaHN2LnMsIHY6IGhzdi52LCBhOiB0aGlzLl9hIH07XG4gICAgfSxcbiAgICB0b0hzdlN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBoc3YgPSByZ2JUb0hzdih0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iKTtcbiAgICAgICAgdmFyIGggPSBtYXRoUm91bmQoaHN2LmggKiAzNjApLCBzID0gbWF0aFJvdW5kKGhzdi5zICogMTAwKSwgdiA9IG1hdGhSb3VuZChoc3YudiAqIDEwMCk7XG4gICAgICAgIHJldHVybiAodGhpcy5fYSA9PSAxKSA/XG4gICAgICAgICAgXCJoc3YoXCIgICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgdiArIFwiJSlcIiA6XG4gICAgICAgICAgXCJoc3ZhKFwiICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgdiArIFwiJSwgXCIrIHRoaXMuX3JvdW5kQSArIFwiKVwiO1xuICAgIH0sXG4gICAgdG9Ic2w6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaHNsID0gcmdiVG9Ic2wodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYik7XG4gICAgICAgIHJldHVybiB7IGg6IGhzbC5oICogMzYwLCBzOiBoc2wucywgbDogaHNsLmwsIGE6IHRoaXMuX2EgfTtcbiAgICB9LFxuICAgIHRvSHNsU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhzbCA9IHJnYlRvSHNsKHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IpO1xuICAgICAgICB2YXIgaCA9IG1hdGhSb3VuZChoc2wuaCAqIDM2MCksIHMgPSBtYXRoUm91bmQoaHNsLnMgKiAxMDApLCBsID0gbWF0aFJvdW5kKGhzbC5sICogMTAwKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9hID09IDEpID9cbiAgICAgICAgICBcImhzbChcIiAgKyBoICsgXCIsIFwiICsgcyArIFwiJSwgXCIgKyBsICsgXCIlKVwiIDpcbiAgICAgICAgICBcImhzbGEoXCIgKyBoICsgXCIsIFwiICsgcyArIFwiJSwgXCIgKyBsICsgXCIlLCBcIisgdGhpcy5fcm91bmRBICsgXCIpXCI7XG4gICAgfSxcbiAgICB0b0hleDogZnVuY3Rpb24oYWxsb3czQ2hhcikge1xuICAgICAgICByZXR1cm4gcmdiVG9IZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgYWxsb3czQ2hhcik7XG4gICAgfSxcbiAgICB0b0hleFN0cmluZzogZnVuY3Rpb24oYWxsb3czQ2hhcikge1xuICAgICAgICByZXR1cm4gJyMnICsgdGhpcy50b0hleChhbGxvdzNDaGFyKTtcbiAgICB9LFxuICAgIHRvSGV4ODogZnVuY3Rpb24oYWxsb3c0Q2hhcikge1xuICAgICAgICByZXR1cm4gcmdiYVRvSGV4KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IsIHRoaXMuX2EsIGFsbG93NENoYXIpO1xuICAgIH0sXG4gICAgdG9IZXg4U3RyaW5nOiBmdW5jdGlvbihhbGxvdzRDaGFyKSB7XG4gICAgICAgIHJldHVybiAnIycgKyB0aGlzLnRvSGV4OChhbGxvdzRDaGFyKTtcbiAgICB9LFxuICAgIHRvUmdiOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHsgcjogbWF0aFJvdW5kKHRoaXMuX3IpLCBnOiBtYXRoUm91bmQodGhpcy5fZyksIGI6IG1hdGhSb3VuZCh0aGlzLl9iKSwgYTogdGhpcy5fYSB9O1xuICAgIH0sXG4gICAgdG9SZ2JTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2EgPT0gMSkgP1xuICAgICAgICAgIFwicmdiKFwiICArIG1hdGhSb3VuZCh0aGlzLl9yKSArIFwiLCBcIiArIG1hdGhSb3VuZCh0aGlzLl9nKSArIFwiLCBcIiArIG1hdGhSb3VuZCh0aGlzLl9iKSArIFwiKVwiIDpcbiAgICAgICAgICBcInJnYmEoXCIgKyBtYXRoUm91bmQodGhpcy5fcikgKyBcIiwgXCIgKyBtYXRoUm91bmQodGhpcy5fZykgKyBcIiwgXCIgKyBtYXRoUm91bmQodGhpcy5fYikgKyBcIiwgXCIgKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgICB9LFxuICAgIHRvUGVyY2VudGFnZVJnYjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7IHI6IG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX3IsIDI1NSkgKiAxMDApICsgXCIlXCIsIGc6IG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2csIDI1NSkgKiAxMDApICsgXCIlXCIsIGI6IG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2IsIDI1NSkgKiAxMDApICsgXCIlXCIsIGE6IHRoaXMuX2EgfTtcbiAgICB9LFxuICAgIHRvUGVyY2VudGFnZVJnYlN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fYSA9PSAxKSA/XG4gICAgICAgICAgXCJyZ2IoXCIgICsgbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fciwgMjU1KSAqIDEwMCkgKyBcIiUsIFwiICsgbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fZywgMjU1KSAqIDEwMCkgKyBcIiUsIFwiICsgbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fYiwgMjU1KSAqIDEwMCkgKyBcIiUpXCIgOlxuICAgICAgICAgIFwicmdiYShcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX3IsIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2csIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2IsIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIHRoaXMuX3JvdW5kQSArIFwiKVwiO1xuICAgIH0sXG4gICAgdG9OYW1lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2EgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoZXhOYW1lc1tyZ2JUb0hleCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iLCB0cnVlKV0gfHwgZmFsc2U7XG4gICAgfSxcbiAgICB0b0ZpbHRlcjogZnVuY3Rpb24oc2Vjb25kQ29sb3IpIHtcbiAgICAgICAgdmFyIGhleDhTdHJpbmcgPSAnIycgKyByZ2JhVG9BcmdiSGV4KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IsIHRoaXMuX2EpO1xuICAgICAgICB2YXIgc2Vjb25kSGV4OFN0cmluZyA9IGhleDhTdHJpbmc7XG4gICAgICAgIHZhciBncmFkaWVudFR5cGUgPSB0aGlzLl9ncmFkaWVudFR5cGUgPyBcIkdyYWRpZW50VHlwZSA9IDEsIFwiIDogXCJcIjtcblxuICAgICAgICBpZiAoc2Vjb25kQ29sb3IpIHtcbiAgICAgICAgICAgIHZhciBzID0gdGlueWNvbG9yKHNlY29uZENvbG9yKTtcbiAgICAgICAgICAgIHNlY29uZEhleDhTdHJpbmcgPSAnIycgKyByZ2JhVG9BcmdiSGV4KHMuX3IsIHMuX2csIHMuX2IsIHMuX2EpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KFwiK2dyYWRpZW50VHlwZStcInN0YXJ0Q29sb3JzdHI9XCIraGV4OFN0cmluZytcIixlbmRDb2xvcnN0cj1cIitzZWNvbmRIZXg4U3RyaW5nK1wiKVwiO1xuICAgIH0sXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICB2YXIgZm9ybWF0U2V0ID0gISFmb3JtYXQ7XG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCB0aGlzLl9mb3JtYXQ7XG5cbiAgICAgICAgdmFyIGZvcm1hdHRlZFN0cmluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgaGFzQWxwaGEgPSB0aGlzLl9hIDwgMSAmJiB0aGlzLl9hID49IDA7XG4gICAgICAgIHZhciBuZWVkc0FscGhhRm9ybWF0ID0gIWZvcm1hdFNldCAmJiBoYXNBbHBoYSAmJiAoZm9ybWF0ID09PSBcImhleFwiIHx8IGZvcm1hdCA9PT0gXCJoZXg2XCIgfHwgZm9ybWF0ID09PSBcImhleDNcIiB8fCBmb3JtYXQgPT09IFwiaGV4NFwiIHx8IGZvcm1hdCA9PT0gXCJoZXg4XCIgfHwgZm9ybWF0ID09PSBcIm5hbWVcIik7XG5cbiAgICAgICAgaWYgKG5lZWRzQWxwaGFGb3JtYXQpIHtcbiAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgXCJ0cmFuc3BhcmVudFwiLCBhbGwgb3RoZXIgbm9uLWFscGhhIGZvcm1hdHNcbiAgICAgICAgICAgIC8vIHdpbGwgcmV0dXJuIHJnYmEgd2hlbiB0aGVyZSBpcyB0cmFuc3BhcmVuY3kuXG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSBcIm5hbWVcIiAmJiB0aGlzLl9hID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9OYW1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b1JnYlN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwicmdiXCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9SZ2JTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInByZ2JcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhleFwiIHx8IGZvcm1hdCA9PT0gXCJoZXg2XCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9IZXhTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhleDNcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleFN0cmluZyh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhleDRcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleDhTdHJpbmcodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoZXg4XCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9IZXg4U3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJuYW1lXCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9OYW1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoc2xcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hzbFN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiaHN2XCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9Ic3ZTdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWRTdHJpbmcgfHwgdGhpcy50b0hleFN0cmluZygpO1xuICAgIH0sXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGlueWNvbG9yKHRoaXMudG9TdHJpbmcoKSk7XG4gICAgfSxcblxuICAgIF9hcHBseU1vZGlmaWNhdGlvbjogZnVuY3Rpb24oZm4sIGFyZ3MpIHtcbiAgICAgICAgdmFyIGNvbG9yID0gZm4uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3MpKSk7XG4gICAgICAgIHRoaXMuX3IgPSBjb2xvci5fcjtcbiAgICAgICAgdGhpcy5fZyA9IGNvbG9yLl9nO1xuICAgICAgICB0aGlzLl9iID0gY29sb3IuX2I7XG4gICAgICAgIHRoaXMuc2V0QWxwaGEoY29sb3IuX2EpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGxpZ2h0ZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obGlnaHRlbiwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGJyaWdodGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGJyaWdodGVuLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZGFya2VuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGRhcmtlbiwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGRlc2F0dXJhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZGVzYXR1cmF0ZSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHNhdHVyYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHNhdHVyYXRlLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZ3JleXNjYWxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGdyZXlzY2FsZSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHNwaW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oc3BpbiwgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgX2FwcGx5Q29tYmluYXRpb246IGZ1bmN0aW9uKGZuLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJncykpKTtcbiAgICB9LFxuICAgIGFuYWxvZ291czogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKGFuYWxvZ291cywgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGNvbXBsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihjb21wbGVtZW50LCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbW9ub2Nocm9tYXRpYzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKG1vbm9jaHJvbWF0aWMsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBzcGxpdGNvbXBsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihzcGxpdGNvbXBsZW1lbnQsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICB0cmlhZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHRyaWFkLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgdGV0cmFkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odGV0cmFkLCBhcmd1bWVudHMpO1xuICAgIH1cbn07XG5cbi8vIElmIGlucHV0IGlzIGFuIG9iamVjdCwgZm9yY2UgMSBpbnRvIFwiMS4wXCIgdG8gaGFuZGxlIHJhdGlvcyBwcm9wZXJseVxuLy8gU3RyaW5nIGlucHV0IHJlcXVpcmVzIFwiMS4wXCIgYXMgaW5wdXQsIHNvIDEgd2lsbCBiZSB0cmVhdGVkIGFzIDFcbnRpbnljb2xvci5mcm9tUmF0aW8gPSBmdW5jdGlvbihjb2xvciwgb3B0cykge1xuICAgIGlmICh0eXBlb2YgY29sb3IgPT0gXCJvYmplY3RcIikge1xuICAgICAgICB2YXIgbmV3Q29sb3IgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBjb2xvcikge1xuICAgICAgICAgICAgaWYgKGNvbG9yLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbG9yW2ldID0gY29sb3JbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdDb2xvcltpXSA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3JbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2xvciA9IG5ld0NvbG9yO1xuICAgIH1cblxuICAgIHJldHVybiB0aW55Y29sb3IoY29sb3IsIG9wdHMpO1xufTtcblxuLy8gR2l2ZW4gYSBzdHJpbmcgb3Igb2JqZWN0LCBjb252ZXJ0IHRoYXQgaW5wdXQgdG8gUkdCXG4vLyBQb3NzaWJsZSBzdHJpbmcgaW5wdXRzOlxuLy9cbi8vICAgICBcInJlZFwiXG4vLyAgICAgXCIjZjAwXCIgb3IgXCJmMDBcIlxuLy8gICAgIFwiI2ZmMDAwMFwiIG9yIFwiZmYwMDAwXCJcbi8vICAgICBcIiNmZjAwMDAwMFwiIG9yIFwiZmYwMDAwMDBcIlxuLy8gICAgIFwicmdiIDI1NSAwIDBcIiBvciBcInJnYiAoMjU1LCAwLCAwKVwiXG4vLyAgICAgXCJyZ2IgMS4wIDAgMFwiIG9yIFwicmdiICgxLCAwLCAwKVwiXG4vLyAgICAgXCJyZ2JhICgyNTUsIDAsIDAsIDEpXCIgb3IgXCJyZ2JhIDI1NSwgMCwgMCwgMVwiXG4vLyAgICAgXCJyZ2JhICgxLjAsIDAsIDAsIDEpXCIgb3IgXCJyZ2JhIDEuMCwgMCwgMCwgMVwiXG4vLyAgICAgXCJoc2woMCwgMTAwJSwgNTAlKVwiIG9yIFwiaHNsIDAgMTAwJSA1MCVcIlxuLy8gICAgIFwiaHNsYSgwLCAxMDAlLCA1MCUsIDEpXCIgb3IgXCJoc2xhIDAgMTAwJSA1MCUsIDFcIlxuLy8gICAgIFwiaHN2KDAsIDEwMCUsIDEwMCUpXCIgb3IgXCJoc3YgMCAxMDAlIDEwMCVcIlxuLy9cbmZ1bmN0aW9uIGlucHV0VG9SR0IoY29sb3IpIHtcblxuICAgIHZhciByZ2IgPSB7IHI6IDAsIGc6IDAsIGI6IDAgfTtcbiAgICB2YXIgYSA9IDE7XG4gICAgdmFyIHMgPSBudWxsO1xuICAgIHZhciB2ID0gbnVsbDtcbiAgICB2YXIgbCA9IG51bGw7XG4gICAgdmFyIG9rID0gZmFsc2U7XG4gICAgdmFyIGZvcm1hdCA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbG9yID0gc3RyaW5nSW5wdXRUb09iamVjdChjb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChpc1ZhbGlkQ1NTVW5pdChjb2xvci5yKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5nKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5iKSkge1xuICAgICAgICAgICAgcmdiID0gcmdiVG9SZ2IoY29sb3IuciwgY29sb3IuZywgY29sb3IuYik7XG4gICAgICAgICAgICBvayA9IHRydWU7XG4gICAgICAgICAgICBmb3JtYXQgPSBTdHJpbmcoY29sb3Iucikuc3Vic3RyKC0xKSA9PT0gXCIlXCIgPyBcInByZ2JcIiA6IFwicmdiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNWYWxpZENTU1VuaXQoY29sb3IuaCkgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IucykgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IudikpIHtcbiAgICAgICAgICAgIHMgPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yLnMpO1xuICAgICAgICAgICAgdiA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3Iudik7XG4gICAgICAgICAgICByZ2IgPSBoc3ZUb1JnYihjb2xvci5oLCBzLCB2KTtcbiAgICAgICAgICAgIG9rID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvcm1hdCA9IFwiaHN2XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNWYWxpZENTU1VuaXQoY29sb3IuaCkgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IucykgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IubCkpIHtcbiAgICAgICAgICAgIHMgPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yLnMpO1xuICAgICAgICAgICAgbCA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3IubCk7XG4gICAgICAgICAgICByZ2IgPSBoc2xUb1JnYihjb2xvci5oLCBzLCBsKTtcbiAgICAgICAgICAgIG9rID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvcm1hdCA9IFwiaHNsXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sb3IuaGFzT3duUHJvcGVydHkoXCJhXCIpKSB7XG4gICAgICAgICAgICBhID0gY29sb3IuYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGEgPSBib3VuZEFscGhhKGEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgb2s6IG9rLFxuICAgICAgICBmb3JtYXQ6IGNvbG9yLmZvcm1hdCB8fCBmb3JtYXQsXG4gICAgICAgIHI6IG1hdGhNaW4oMjU1LCBtYXRoTWF4KHJnYi5yLCAwKSksXG4gICAgICAgIGc6IG1hdGhNaW4oMjU1LCBtYXRoTWF4KHJnYi5nLCAwKSksXG4gICAgICAgIGI6IG1hdGhNaW4oMjU1LCBtYXRoTWF4KHJnYi5iLCAwKSksXG4gICAgICAgIGE6IGFcbiAgICB9O1xufVxuXG5cbi8vIENvbnZlcnNpb24gRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBgcmdiVG9Ic2xgLCBgcmdiVG9Ic3ZgLCBgaHNsVG9SZ2JgLCBgaHN2VG9SZ2JgIG1vZGlmaWVkIGZyb206XG4vLyA8aHR0cDovL21qaWphY2tzb24uY29tLzIwMDgvMDIvcmdiLXRvLWhzbC1hbmQtcmdiLXRvLWhzdi1jb2xvci1tb2RlbC1jb252ZXJzaW9uLWFsZ29yaXRobXMtaW4tamF2YXNjcmlwdD5cblxuLy8gYHJnYlRvUmdiYFxuLy8gSGFuZGxlIGJvdW5kcyAvIHBlcmNlbnRhZ2UgY2hlY2tpbmcgdG8gY29uZm9ybSB0byBDU1MgY29sb3Igc3BlY1xuLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvPlxuLy8gKkFzc3VtZXM6KiByLCBnLCBiIGluIFswLCAyNTVdIG9yIFswLCAxXVxuLy8gKlJldHVybnM6KiB7IHIsIGcsIGIgfSBpbiBbMCwgMjU1XVxuZnVuY3Rpb24gcmdiVG9SZ2IociwgZywgYil7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcjogYm91bmQwMShyLCAyNTUpICogMjU1LFxuICAgICAgICBnOiBib3VuZDAxKGcsIDI1NSkgKiAyNTUsXG4gICAgICAgIGI6IGJvdW5kMDEoYiwgMjU1KSAqIDI1NVxuICAgIH07XG59XG5cbi8vIGByZ2JUb0hzbGBcbi8vIENvbnZlcnRzIGFuIFJHQiBjb2xvciB2YWx1ZSB0byBIU0wuXG4vLyAqQXNzdW1lczoqIHIsIGcsIGFuZCBiIGFyZSBjb250YWluZWQgaW4gWzAsIDI1NV0gb3IgWzAsIDFdXG4vLyAqUmV0dXJuczoqIHsgaCwgcywgbCB9IGluIFswLDFdXG5mdW5jdGlvbiByZ2JUb0hzbChyLCBnLCBiKSB7XG5cbiAgICByID0gYm91bmQwMShyLCAyNTUpO1xuICAgIGcgPSBib3VuZDAxKGcsIDI1NSk7XG4gICAgYiA9IGJvdW5kMDEoYiwgMjU1KTtcblxuICAgIHZhciBtYXggPSBtYXRoTWF4KHIsIGcsIGIpLCBtaW4gPSBtYXRoTWluKHIsIGcsIGIpO1xuICAgIHZhciBoLCBzLCBsID0gKG1heCArIG1pbikgLyAyO1xuXG4gICAgaWYobWF4ID09IG1pbikge1xuICAgICAgICBoID0gcyA9IDA7IC8vIGFjaHJvbWF0aWNcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBkID0gbWF4IC0gbWluO1xuICAgICAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgICAgIHN3aXRjaChtYXgpIHtcbiAgICAgICAgICAgIGNhc2UgcjogaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgZzogaCA9IChiIC0gcikgLyBkICsgMjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGI6IGggPSAociAtIGcpIC8gZCArIDQ7IGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaCAvPSA2O1xuICAgIH1cblxuICAgIHJldHVybiB7IGg6IGgsIHM6IHMsIGw6IGwgfTtcbn1cblxuLy8gYGhzbFRvUmdiYFxuLy8gQ29udmVydHMgYW4gSFNMIGNvbG9yIHZhbHVlIHRvIFJHQi5cbi8vICpBc3N1bWVzOiogaCBpcyBjb250YWluZWQgaW4gWzAsIDFdIG9yIFswLCAzNjBdIGFuZCBzIGFuZCBsIGFyZSBjb250YWluZWQgWzAsIDFdIG9yIFswLCAxMDBdXG4vLyAqUmV0dXJuczoqIHsgciwgZywgYiB9IGluIHRoZSBzZXQgWzAsIDI1NV1cbmZ1bmN0aW9uIGhzbFRvUmdiKGgsIHMsIGwpIHtcbiAgICB2YXIgciwgZywgYjtcblxuICAgIGggPSBib3VuZDAxKGgsIDM2MCk7XG4gICAgcyA9IGJvdW5kMDEocywgMTAwKTtcbiAgICBsID0gYm91bmQwMShsLCAxMDApO1xuXG4gICAgZnVuY3Rpb24gaHVlMnJnYihwLCBxLCB0KSB7XG4gICAgICAgIGlmKHQgPCAwKSB0ICs9IDE7XG4gICAgICAgIGlmKHQgPiAxKSB0IC09IDE7XG4gICAgICAgIGlmKHQgPCAxLzYpIHJldHVybiBwICsgKHEgLSBwKSAqIDYgKiB0O1xuICAgICAgICBpZih0IDwgMS8yKSByZXR1cm4gcTtcbiAgICAgICAgaWYodCA8IDIvMykgcmV0dXJuIHAgKyAocSAtIHApICogKDIvMyAtIHQpICogNjtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuXG4gICAgaWYocyA9PT0gMCkge1xuICAgICAgICByID0gZyA9IGIgPSBsOyAvLyBhY2hyb21hdGljXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgcSA9IGwgPCAwLjUgPyBsICogKDEgKyBzKSA6IGwgKyBzIC0gbCAqIHM7XG4gICAgICAgIHZhciBwID0gMiAqIGwgLSBxO1xuICAgICAgICByID0gaHVlMnJnYihwLCBxLCBoICsgMS8zKTtcbiAgICAgICAgZyA9IGh1ZTJyZ2IocCwgcSwgaCk7XG4gICAgICAgIGIgPSBodWUycmdiKHAsIHEsIGggLSAxLzMpO1xuICAgIH1cblxuICAgIHJldHVybiB7IHI6IHIgKiAyNTUsIGc6IGcgKiAyNTUsIGI6IGIgKiAyNTUgfTtcbn1cblxuLy8gYHJnYlRvSHN2YFxuLy8gQ29udmVydHMgYW4gUkdCIGNvbG9yIHZhbHVlIHRvIEhTVlxuLy8gKkFzc3VtZXM6KiByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV0gb3IgWzAsIDFdXG4vLyAqUmV0dXJuczoqIHsgaCwgcywgdiB9IGluIFswLDFdXG5mdW5jdGlvbiByZ2JUb0hzdihyLCBnLCBiKSB7XG5cbiAgICByID0gYm91bmQwMShyLCAyNTUpO1xuICAgIGcgPSBib3VuZDAxKGcsIDI1NSk7XG4gICAgYiA9IGJvdW5kMDEoYiwgMjU1KTtcblxuICAgIHZhciBtYXggPSBtYXRoTWF4KHIsIGcsIGIpLCBtaW4gPSBtYXRoTWluKHIsIGcsIGIpO1xuICAgIHZhciBoLCBzLCB2ID0gbWF4O1xuXG4gICAgdmFyIGQgPSBtYXggLSBtaW47XG4gICAgcyA9IG1heCA9PT0gMCA/IDAgOiBkIC8gbWF4O1xuXG4gICAgaWYobWF4ID09IG1pbikge1xuICAgICAgICBoID0gMDsgLy8gYWNocm9tYXRpY1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3dpdGNoKG1heCkge1xuICAgICAgICAgICAgY2FzZSByOiBoID0gKGcgLSBiKSAvIGQgKyAoZyA8IGIgPyA2IDogMCk7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBnOiBoID0gKGIgLSByKSAvIGQgKyAyOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYjogaCA9IChyIC0gZykgLyBkICsgNDsgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaCAvPSA2O1xuICAgIH1cbiAgICByZXR1cm4geyBoOiBoLCBzOiBzLCB2OiB2IH07XG59XG5cbi8vIGBoc3ZUb1JnYmBcbi8vIENvbnZlcnRzIGFuIEhTViBjb2xvciB2YWx1ZSB0byBSR0IuXG4vLyAqQXNzdW1lczoqIGggaXMgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMzYwXSBhbmQgcyBhbmQgdiBhcmUgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMTAwXVxuLy8gKlJldHVybnM6KiB7IHIsIGcsIGIgfSBpbiB0aGUgc2V0IFswLCAyNTVdXG4gZnVuY3Rpb24gaHN2VG9SZ2IoaCwgcywgdikge1xuXG4gICAgaCA9IGJvdW5kMDEoaCwgMzYwKSAqIDY7XG4gICAgcyA9IGJvdW5kMDEocywgMTAwKTtcbiAgICB2ID0gYm91bmQwMSh2LCAxMDApO1xuXG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKGgpLFxuICAgICAgICBmID0gaCAtIGksXG4gICAgICAgIHAgPSB2ICogKDEgLSBzKSxcbiAgICAgICAgcSA9IHYgKiAoMSAtIGYgKiBzKSxcbiAgICAgICAgdCA9IHYgKiAoMSAtICgxIC0gZikgKiBzKSxcbiAgICAgICAgbW9kID0gaSAlIDYsXG4gICAgICAgIHIgPSBbdiwgcSwgcCwgcCwgdCwgdl1bbW9kXSxcbiAgICAgICAgZyA9IFt0LCB2LCB2LCBxLCBwLCBwXVttb2RdLFxuICAgICAgICBiID0gW3AsIHAsIHQsIHYsIHYsIHFdW21vZF07XG5cbiAgICByZXR1cm4geyByOiByICogMjU1LCBnOiBnICogMjU1LCBiOiBiICogMjU1IH07XG59XG5cbi8vIGByZ2JUb0hleGBcbi8vIENvbnZlcnRzIGFuIFJHQiBjb2xvciB0byBoZXhcbi8vIEFzc3VtZXMgciwgZywgYW5kIGIgYXJlIGNvbnRhaW5lZCBpbiB0aGUgc2V0IFswLCAyNTVdXG4vLyBSZXR1cm5zIGEgMyBvciA2IGNoYXJhY3RlciBoZXhcbmZ1bmN0aW9uIHJnYlRvSGV4KHIsIGcsIGIsIGFsbG93M0NoYXIpIHtcblxuICAgIHZhciBoZXggPSBbXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKHIpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGcpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGIpLnRvU3RyaW5nKDE2KSlcbiAgICBdO1xuXG4gICAgLy8gUmV0dXJuIGEgMyBjaGFyYWN0ZXIgaGV4IGlmIHBvc3NpYmxlXG4gICAgaWYgKGFsbG93M0NoYXIgJiYgaGV4WzBdLmNoYXJBdCgwKSA9PSBoZXhbMF0uY2hhckF0KDEpICYmIGhleFsxXS5jaGFyQXQoMCkgPT0gaGV4WzFdLmNoYXJBdCgxKSAmJiBoZXhbMl0uY2hhckF0KDApID09IGhleFsyXS5jaGFyQXQoMSkpIHtcbiAgICAgICAgcmV0dXJuIGhleFswXS5jaGFyQXQoMCkgKyBoZXhbMV0uY2hhckF0KDApICsgaGV4WzJdLmNoYXJBdCgwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGV4LmpvaW4oXCJcIik7XG59XG5cbi8vIGByZ2JhVG9IZXhgXG4vLyBDb252ZXJ0cyBhbiBSR0JBIGNvbG9yIHBsdXMgYWxwaGEgdHJhbnNwYXJlbmN5IHRvIGhleFxuLy8gQXNzdW1lcyByLCBnLCBiIGFyZSBjb250YWluZWQgaW4gdGhlIHNldCBbMCwgMjU1XSBhbmRcbi8vIGEgaW4gWzAsIDFdLiBSZXR1cm5zIGEgNCBvciA4IGNoYXJhY3RlciByZ2JhIGhleFxuZnVuY3Rpb24gcmdiYVRvSGV4KHIsIGcsIGIsIGEsIGFsbG93NENoYXIpIHtcblxuICAgIHZhciBoZXggPSBbXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKHIpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGcpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGIpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIoY29udmVydERlY2ltYWxUb0hleChhKSlcbiAgICBdO1xuXG4gICAgLy8gUmV0dXJuIGEgNCBjaGFyYWN0ZXIgaGV4IGlmIHBvc3NpYmxlXG4gICAgaWYgKGFsbG93NENoYXIgJiYgaGV4WzBdLmNoYXJBdCgwKSA9PSBoZXhbMF0uY2hhckF0KDEpICYmIGhleFsxXS5jaGFyQXQoMCkgPT0gaGV4WzFdLmNoYXJBdCgxKSAmJiBoZXhbMl0uY2hhckF0KDApID09IGhleFsyXS5jaGFyQXQoMSkgJiYgaGV4WzNdLmNoYXJBdCgwKSA9PSBoZXhbM10uY2hhckF0KDEpKSB7XG4gICAgICAgIHJldHVybiBoZXhbMF0uY2hhckF0KDApICsgaGV4WzFdLmNoYXJBdCgwKSArIGhleFsyXS5jaGFyQXQoMCkgKyBoZXhbM10uY2hhckF0KDApO1xuICAgIH1cblxuICAgIHJldHVybiBoZXguam9pbihcIlwiKTtcbn1cblxuLy8gYHJnYmFUb0FyZ2JIZXhgXG4vLyBDb252ZXJ0cyBhbiBSR0JBIGNvbG9yIHRvIGFuIEFSR0IgSGV4OCBzdHJpbmdcbi8vIFJhcmVseSB1c2VkLCBidXQgcmVxdWlyZWQgZm9yIFwidG9GaWx0ZXIoKVwiXG5mdW5jdGlvbiByZ2JhVG9BcmdiSGV4KHIsIGcsIGIsIGEpIHtcblxuICAgIHZhciBoZXggPSBbXG4gICAgICAgIHBhZDIoY29udmVydERlY2ltYWxUb0hleChhKSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKHIpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGcpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGIpLnRvU3RyaW5nKDE2KSlcbiAgICBdO1xuXG4gICAgcmV0dXJuIGhleC5qb2luKFwiXCIpO1xufVxuXG4vLyBgZXF1YWxzYFxuLy8gQ2FuIGJlIGNhbGxlZCB3aXRoIGFueSB0aW55Y29sb3IgaW5wdXRcbnRpbnljb2xvci5lcXVhbHMgPSBmdW5jdGlvbiAoY29sb3IxLCBjb2xvcjIpIHtcbiAgICBpZiAoIWNvbG9yMSB8fCAhY29sb3IyKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiB0aW55Y29sb3IoY29sb3IxKS50b1JnYlN0cmluZygpID09IHRpbnljb2xvcihjb2xvcjIpLnRvUmdiU3RyaW5nKCk7XG59O1xuXG50aW55Y29sb3IucmFuZG9tID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpbnljb2xvci5mcm9tUmF0aW8oe1xuICAgICAgICByOiBtYXRoUmFuZG9tKCksXG4gICAgICAgIGc6IG1hdGhSYW5kb20oKSxcbiAgICAgICAgYjogbWF0aFJhbmRvbSgpXG4gICAgfSk7XG59O1xuXG5cbi8vIE1vZGlmaWNhdGlvbiBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoYW5rcyB0byBsZXNzLmpzIGZvciBzb21lIG9mIHRoZSBiYXNpY3MgaGVyZVxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9jbG91ZGhlYWQvbGVzcy5qcy9ibG9iL21hc3Rlci9saWIvbGVzcy9mdW5jdGlvbnMuanM+XG5cbmZ1bmN0aW9uIGRlc2F0dXJhdGUoY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgaHNsLnMgLT0gYW1vdW50IC8gMTAwO1xuICAgIGhzbC5zID0gY2xhbXAwMShoc2wucyk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG5mdW5jdGlvbiBzYXR1cmF0ZShjb2xvciwgYW1vdW50KSB7XG4gICAgYW1vdW50ID0gKGFtb3VudCA9PT0gMCkgPyAwIDogKGFtb3VudCB8fCAxMCk7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICBoc2wucyArPSBhbW91bnQgLyAxMDA7XG4gICAgaHNsLnMgPSBjbGFtcDAxKGhzbC5zKTtcbiAgICByZXR1cm4gdGlueWNvbG9yKGhzbCk7XG59XG5cbmZ1bmN0aW9uIGdyZXlzY2FsZShjb2xvcikge1xuICAgIHJldHVybiB0aW55Y29sb3IoY29sb3IpLmRlc2F0dXJhdGUoMTAwKTtcbn1cblxuZnVuY3Rpb24gbGlnaHRlbiAoY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgaHNsLmwgKz0gYW1vdW50IC8gMTAwO1xuICAgIGhzbC5sID0gY2xhbXAwMShoc2wubCk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG5mdW5jdGlvbiBicmlnaHRlbihjb2xvciwgYW1vdW50KSB7XG4gICAgYW1vdW50ID0gKGFtb3VudCA9PT0gMCkgPyAwIDogKGFtb3VudCB8fCAxMCk7XG4gICAgdmFyIHJnYiA9IHRpbnljb2xvcihjb2xvcikudG9SZ2IoKTtcbiAgICByZ2IuciA9IG1hdGhNYXgoMCwgbWF0aE1pbigyNTUsIHJnYi5yIC0gbWF0aFJvdW5kKDI1NSAqIC0gKGFtb3VudCAvIDEwMCkpKSk7XG4gICAgcmdiLmcgPSBtYXRoTWF4KDAsIG1hdGhNaW4oMjU1LCByZ2IuZyAtIG1hdGhSb3VuZCgyNTUgKiAtIChhbW91bnQgLyAxMDApKSkpO1xuICAgIHJnYi5iID0gbWF0aE1heCgwLCBtYXRoTWluKDI1NSwgcmdiLmIgLSBtYXRoUm91bmQoMjU1ICogLSAoYW1vdW50IC8gMTAwKSkpKTtcbiAgICByZXR1cm4gdGlueWNvbG9yKHJnYik7XG59XG5cbmZ1bmN0aW9uIGRhcmtlbiAoY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgaHNsLmwgLT0gYW1vdW50IC8gMTAwO1xuICAgIGhzbC5sID0gY2xhbXAwMShoc2wubCk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG4vLyBTcGluIHRha2VzIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgYW1vdW50IHdpdGhpbiBbLTM2MCwgMzYwXSBpbmRpY2F0aW5nIHRoZSBjaGFuZ2Ugb2YgaHVlLlxuLy8gVmFsdWVzIG91dHNpZGUgb2YgdGhpcyByYW5nZSB3aWxsIGJlIHdyYXBwZWQgaW50byB0aGlzIHJhbmdlLlxuZnVuY3Rpb24gc3Bpbihjb2xvciwgYW1vdW50KSB7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICB2YXIgaHVlID0gKGhzbC5oICsgYW1vdW50KSAlIDM2MDtcbiAgICBoc2wuaCA9IGh1ZSA8IDAgPyAzNjAgKyBodWUgOiBodWU7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG4vLyBDb21iaW5hdGlvbiBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhhbmtzIHRvIGpRdWVyeSB4Q29sb3IgZm9yIHNvbWUgb2YgdGhlIGlkZWFzIGJlaGluZCB0aGVzZVxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9pbmZ1c2lvbi9qUXVlcnkteGNvbG9yL2Jsb2IvbWFzdGVyL2pxdWVyeS54Y29sb3IuanM+XG5cbmZ1bmN0aW9uIGNvbXBsZW1lbnQoY29sb3IpIHtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIGhzbC5oID0gKGhzbC5oICsgMTgwKSAlIDM2MDtcbiAgICByZXR1cm4gdGlueWNvbG9yKGhzbCk7XG59XG5cbmZ1bmN0aW9uIHRyaWFkKGNvbG9yKSB7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICB2YXIgaCA9IGhzbC5oO1xuICAgIHJldHVybiBbXG4gICAgICAgIHRpbnljb2xvcihjb2xvciksXG4gICAgICAgIHRpbnljb2xvcih7IGg6IChoICsgMTIwKSAlIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sIH0pLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDI0MCkgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubCB9KVxuICAgIF07XG59XG5cbmZ1bmN0aW9uIHRldHJhZChjb2xvcikge1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgdmFyIGggPSBoc2wuaDtcbiAgICByZXR1cm4gW1xuICAgICAgICB0aW55Y29sb3IoY29sb3IpLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDkwKSAlIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sIH0pLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDE4MCkgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubCB9KSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyAyNzApICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmwgfSlcbiAgICBdO1xufVxuXG5mdW5jdGlvbiBzcGxpdGNvbXBsZW1lbnQoY29sb3IpIHtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIHZhciBoID0gaHNsLmg7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgdGlueWNvbG9yKGNvbG9yKSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyA3MikgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubH0pLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDIxNikgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubH0pXG4gICAgXTtcbn1cblxuZnVuY3Rpb24gYW5hbG9nb3VzKGNvbG9yLCByZXN1bHRzLCBzbGljZXMpIHtcbiAgICByZXN1bHRzID0gcmVzdWx0cyB8fCA2O1xuICAgIHNsaWNlcyA9IHNsaWNlcyB8fCAzMDtcblxuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgdmFyIHBhcnQgPSAzNjAgLyBzbGljZXM7XG4gICAgdmFyIHJldCA9IFt0aW55Y29sb3IoY29sb3IpXTtcblxuICAgIGZvciAoaHNsLmggPSAoKGhzbC5oIC0gKHBhcnQgKiByZXN1bHRzID4+IDEpKSArIDcyMCkgJSAzNjA7IC0tcmVzdWx0czsgKSB7XG4gICAgICAgIGhzbC5oID0gKGhzbC5oICsgcGFydCkgJSAzNjA7XG4gICAgICAgIHJldC5wdXNoKHRpbnljb2xvcihoc2wpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gbW9ub2Nocm9tYXRpYyhjb2xvciwgcmVzdWx0cykge1xuICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IDY7XG4gICAgdmFyIGhzdiA9IHRpbnljb2xvcihjb2xvcikudG9Ic3YoKTtcbiAgICB2YXIgaCA9IGhzdi5oLCBzID0gaHN2LnMsIHYgPSBoc3YudjtcbiAgICB2YXIgcmV0ID0gW107XG4gICAgdmFyIG1vZGlmaWNhdGlvbiA9IDEgLyByZXN1bHRzO1xuXG4gICAgd2hpbGUgKHJlc3VsdHMtLSkge1xuICAgICAgICByZXQucHVzaCh0aW55Y29sb3IoeyBoOiBoLCBzOiBzLCB2OiB2fSkpO1xuICAgICAgICB2ID0gKHYgKyBtb2RpZmljYXRpb24pICUgMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufVxuXG4vLyBVdGlsaXR5IEZ1bmN0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRpbnljb2xvci5taXggPSBmdW5jdGlvbihjb2xvcjEsIGNvbG9yMiwgYW1vdW50KSB7XG4gICAgYW1vdW50ID0gKGFtb3VudCA9PT0gMCkgPyAwIDogKGFtb3VudCB8fCA1MCk7XG5cbiAgICB2YXIgcmdiMSA9IHRpbnljb2xvcihjb2xvcjEpLnRvUmdiKCk7XG4gICAgdmFyIHJnYjIgPSB0aW55Y29sb3IoY29sb3IyKS50b1JnYigpO1xuXG4gICAgdmFyIHAgPSBhbW91bnQgLyAxMDA7XG5cbiAgICB2YXIgcmdiYSA9IHtcbiAgICAgICAgcjogKChyZ2IyLnIgLSByZ2IxLnIpICogcCkgKyByZ2IxLnIsXG4gICAgICAgIGc6ICgocmdiMi5nIC0gcmdiMS5nKSAqIHApICsgcmdiMS5nLFxuICAgICAgICBiOiAoKHJnYjIuYiAtIHJnYjEuYikgKiBwKSArIHJnYjEuYixcbiAgICAgICAgYTogKChyZ2IyLmEgLSByZ2IxLmEpICogcCkgKyByZ2IxLmFcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRpbnljb2xvcihyZ2JhKTtcbn07XG5cblxuLy8gUmVhZGFiaWxpdHkgRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI2NvbnRyYXN0LXJhdGlvZGVmIChXQ0FHIFZlcnNpb24gMilcblxuLy8gYGNvbnRyYXN0YFxuLy8gQW5hbHl6ZSB0aGUgMiBjb2xvcnMgYW5kIHJldHVybnMgdGhlIGNvbG9yIGNvbnRyYXN0IGRlZmluZWQgYnkgKFdDQUcgVmVyc2lvbiAyKVxudGlueWNvbG9yLnJlYWRhYmlsaXR5ID0gZnVuY3Rpb24oY29sb3IxLCBjb2xvcjIpIHtcbiAgICB2YXIgYzEgPSB0aW55Y29sb3IoY29sb3IxKTtcbiAgICB2YXIgYzIgPSB0aW55Y29sb3IoY29sb3IyKTtcbiAgICByZXR1cm4gKE1hdGgubWF4KGMxLmdldEx1bWluYW5jZSgpLGMyLmdldEx1bWluYW5jZSgpKSswLjA1KSAvIChNYXRoLm1pbihjMS5nZXRMdW1pbmFuY2UoKSxjMi5nZXRMdW1pbmFuY2UoKSkrMC4wNSk7XG59O1xuXG4vLyBgaXNSZWFkYWJsZWBcbi8vIEVuc3VyZSB0aGF0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3IgY29tYmluYXRpb25zIG1lZXQgV0NBRzIgZ3VpZGVsaW5lcy5cbi8vIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBPYmplY3QuXG4vLyAgICAgIHRoZSAnbGV2ZWwnIHByb3BlcnR5IHN0YXRlcyAnQUEnIG9yICdBQUEnIC0gaWYgbWlzc2luZyBvciBpbnZhbGlkLCBpdCBkZWZhdWx0cyB0byAnQUEnO1xuLy8gICAgICB0aGUgJ3NpemUnIHByb3BlcnR5IHN0YXRlcyAnbGFyZ2UnIG9yICdzbWFsbCcgLSBpZiBtaXNzaW5nIG9yIGludmFsaWQsIGl0IGRlZmF1bHRzIHRvICdzbWFsbCcuXG4vLyBJZiB0aGUgZW50aXJlIG9iamVjdCBpcyBhYnNlbnQsIGlzUmVhZGFibGUgZGVmYXVsdHMgdG8ge2xldmVsOlwiQUFcIixzaXplOlwic21hbGxcIn0uXG5cbi8vICpFeGFtcGxlKlxuLy8gICAgdGlueWNvbG9yLmlzUmVhZGFibGUoXCIjMDAwXCIsIFwiIzExMVwiKSA9PiBmYWxzZVxuLy8gICAgdGlueWNvbG9yLmlzUmVhZGFibGUoXCIjMDAwXCIsIFwiIzExMVwiLHtsZXZlbDpcIkFBXCIsc2l6ZTpcImxhcmdlXCJ9KSA9PiBmYWxzZVxudGlueWNvbG9yLmlzUmVhZGFibGUgPSBmdW5jdGlvbihjb2xvcjEsIGNvbG9yMiwgd2NhZzIpIHtcbiAgICB2YXIgcmVhZGFiaWxpdHkgPSB0aW55Y29sb3IucmVhZGFiaWxpdHkoY29sb3IxLCBjb2xvcjIpO1xuICAgIHZhciB3Y2FnMlBhcm1zLCBvdXQ7XG5cbiAgICBvdXQgPSBmYWxzZTtcblxuICAgIHdjYWcyUGFybXMgPSB2YWxpZGF0ZVdDQUcyUGFybXMod2NhZzIpO1xuICAgIHN3aXRjaCAod2NhZzJQYXJtcy5sZXZlbCArIHdjYWcyUGFybXMuc2l6ZSkge1xuICAgICAgICBjYXNlIFwiQUFzbWFsbFwiOlxuICAgICAgICBjYXNlIFwiQUFBbGFyZ2VcIjpcbiAgICAgICAgICAgIG91dCA9IHJlYWRhYmlsaXR5ID49IDQuNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQUFsYXJnZVwiOlxuICAgICAgICAgICAgb3V0ID0gcmVhZGFiaWxpdHkgPj0gMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQUFBc21hbGxcIjpcbiAgICAgICAgICAgIG91dCA9IHJlYWRhYmlsaXR5ID49IDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcblxufTtcblxuLy8gYG1vc3RSZWFkYWJsZWBcbi8vIEdpdmVuIGEgYmFzZSBjb2xvciBhbmQgYSBsaXN0IG9mIHBvc3NpYmxlIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZFxuLy8gY29sb3JzIGZvciB0aGF0IGJhc2UsIHJldHVybnMgdGhlIG1vc3QgcmVhZGFibGUgY29sb3IuXG4vLyBPcHRpb25hbGx5IHJldHVybnMgQmxhY2sgb3IgV2hpdGUgaWYgdGhlIG1vc3QgcmVhZGFibGUgY29sb3IgaXMgdW5yZWFkYWJsZS5cbi8vICpFeGFtcGxlKlxuLy8gICAgdGlueWNvbG9yLm1vc3RSZWFkYWJsZSh0aW55Y29sb3IubW9zdFJlYWRhYmxlKFwiIzEyM1wiLCBbXCIjMTI0XCIsIFwiIzEyNVwiXSx7aW5jbHVkZUZhbGxiYWNrQ29sb3JzOmZhbHNlfSkudG9IZXhTdHJpbmcoKTsgLy8gXCIjMTEyMjU1XCJcbi8vICAgIHRpbnljb2xvci5tb3N0UmVhZGFibGUodGlueWNvbG9yLm1vc3RSZWFkYWJsZShcIiMxMjNcIiwgW1wiIzEyNFwiLCBcIiMxMjVcIl0se2luY2x1ZGVGYWxsYmFja0NvbG9yczp0cnVlfSkudG9IZXhTdHJpbmcoKTsgIC8vIFwiI2ZmZmZmZlwiXG4vLyAgICB0aW55Y29sb3IubW9zdFJlYWRhYmxlKFwiI2E4MDE1YVwiLCBbXCIjZmFmM2YzXCJdLHtpbmNsdWRlRmFsbGJhY2tDb2xvcnM6dHJ1ZSxsZXZlbDpcIkFBQVwiLHNpemU6XCJsYXJnZVwifSkudG9IZXhTdHJpbmcoKTsgLy8gXCIjZmFmM2YzXCJcbi8vICAgIHRpbnljb2xvci5tb3N0UmVhZGFibGUoXCIjYTgwMTVhXCIsIFtcIiNmYWYzZjNcIl0se2luY2x1ZGVGYWxsYmFja0NvbG9yczp0cnVlLGxldmVsOlwiQUFBXCIsc2l6ZTpcInNtYWxsXCJ9KS50b0hleFN0cmluZygpOyAvLyBcIiNmZmZmZmZcIlxudGlueWNvbG9yLm1vc3RSZWFkYWJsZSA9IGZ1bmN0aW9uKGJhc2VDb2xvciwgY29sb3JMaXN0LCBhcmdzKSB7XG4gICAgdmFyIGJlc3RDb2xvciA9IG51bGw7XG4gICAgdmFyIGJlc3RTY29yZSA9IDA7XG4gICAgdmFyIHJlYWRhYmlsaXR5O1xuICAgIHZhciBpbmNsdWRlRmFsbGJhY2tDb2xvcnMsIGxldmVsLCBzaXplIDtcbiAgICBhcmdzID0gYXJncyB8fCB7fTtcbiAgICBpbmNsdWRlRmFsbGJhY2tDb2xvcnMgPSBhcmdzLmluY2x1ZGVGYWxsYmFja0NvbG9ycyA7XG4gICAgbGV2ZWwgPSBhcmdzLmxldmVsO1xuICAgIHNpemUgPSBhcmdzLnNpemU7XG5cbiAgICBmb3IgKHZhciBpPSAwOyBpIDwgY29sb3JMaXN0Lmxlbmd0aCA7IGkrKykge1xuICAgICAgICByZWFkYWJpbGl0eSA9IHRpbnljb2xvci5yZWFkYWJpbGl0eShiYXNlQ29sb3IsIGNvbG9yTGlzdFtpXSk7XG4gICAgICAgIGlmIChyZWFkYWJpbGl0eSA+IGJlc3RTY29yZSkge1xuICAgICAgICAgICAgYmVzdFNjb3JlID0gcmVhZGFiaWxpdHk7XG4gICAgICAgICAgICBiZXN0Q29sb3IgPSB0aW55Y29sb3IoY29sb3JMaXN0W2ldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aW55Y29sb3IuaXNSZWFkYWJsZShiYXNlQ29sb3IsIGJlc3RDb2xvciwge1wibGV2ZWxcIjpsZXZlbCxcInNpemVcIjpzaXplfSkgfHwgIWluY2x1ZGVGYWxsYmFja0NvbG9ycykge1xuICAgICAgICByZXR1cm4gYmVzdENvbG9yO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXJncy5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ZmFsc2U7XG4gICAgICAgIHJldHVybiB0aW55Y29sb3IubW9zdFJlYWRhYmxlKGJhc2VDb2xvcixbXCIjZmZmXCIsIFwiIzAwMFwiXSxhcmdzKTtcbiAgICB9XG59O1xuXG5cbi8vIEJpZyBMaXN0IG9mIENvbG9yc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyA8aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jc3ZnLWNvbG9yPlxudmFyIG5hbWVzID0gdGlueWNvbG9yLm5hbWVzID0ge1xuICAgIGFsaWNlYmx1ZTogXCJmMGY4ZmZcIixcbiAgICBhbnRpcXVld2hpdGU6IFwiZmFlYmQ3XCIsXG4gICAgYXF1YTogXCIwZmZcIixcbiAgICBhcXVhbWFyaW5lOiBcIjdmZmZkNFwiLFxuICAgIGF6dXJlOiBcImYwZmZmZlwiLFxuICAgIGJlaWdlOiBcImY1ZjVkY1wiLFxuICAgIGJpc3F1ZTogXCJmZmU0YzRcIixcbiAgICBibGFjazogXCIwMDBcIixcbiAgICBibGFuY2hlZGFsbW9uZDogXCJmZmViY2RcIixcbiAgICBibHVlOiBcIjAwZlwiLFxuICAgIGJsdWV2aW9sZXQ6IFwiOGEyYmUyXCIsXG4gICAgYnJvd246IFwiYTUyYTJhXCIsXG4gICAgYnVybHl3b29kOiBcImRlYjg4N1wiLFxuICAgIGJ1cm50c2llbm5hOiBcImVhN2U1ZFwiLFxuICAgIGNhZGV0Ymx1ZTogXCI1ZjllYTBcIixcbiAgICBjaGFydHJldXNlOiBcIjdmZmYwMFwiLFxuICAgIGNob2NvbGF0ZTogXCJkMjY5MWVcIixcbiAgICBjb3JhbDogXCJmZjdmNTBcIixcbiAgICBjb3JuZmxvd2VyYmx1ZTogXCI2NDk1ZWRcIixcbiAgICBjb3Juc2lsazogXCJmZmY4ZGNcIixcbiAgICBjcmltc29uOiBcImRjMTQzY1wiLFxuICAgIGN5YW46IFwiMGZmXCIsXG4gICAgZGFya2JsdWU6IFwiMDAwMDhiXCIsXG4gICAgZGFya2N5YW46IFwiMDA4YjhiXCIsXG4gICAgZGFya2dvbGRlbnJvZDogXCJiODg2MGJcIixcbiAgICBkYXJrZ3JheTogXCJhOWE5YTlcIixcbiAgICBkYXJrZ3JlZW46IFwiMDA2NDAwXCIsXG4gICAgZGFya2dyZXk6IFwiYTlhOWE5XCIsXG4gICAgZGFya2toYWtpOiBcImJkYjc2YlwiLFxuICAgIGRhcmttYWdlbnRhOiBcIjhiMDA4YlwiLFxuICAgIGRhcmtvbGl2ZWdyZWVuOiBcIjU1NmIyZlwiLFxuICAgIGRhcmtvcmFuZ2U6IFwiZmY4YzAwXCIsXG4gICAgZGFya29yY2hpZDogXCI5OTMyY2NcIixcbiAgICBkYXJrcmVkOiBcIjhiMDAwMFwiLFxuICAgIGRhcmtzYWxtb246IFwiZTk5NjdhXCIsXG4gICAgZGFya3NlYWdyZWVuOiBcIjhmYmM4ZlwiLFxuICAgIGRhcmtzbGF0ZWJsdWU6IFwiNDgzZDhiXCIsXG4gICAgZGFya3NsYXRlZ3JheTogXCIyZjRmNGZcIixcbiAgICBkYXJrc2xhdGVncmV5OiBcIjJmNGY0ZlwiLFxuICAgIGRhcmt0dXJxdW9pc2U6IFwiMDBjZWQxXCIsXG4gICAgZGFya3Zpb2xldDogXCI5NDAwZDNcIixcbiAgICBkZWVwcGluazogXCJmZjE0OTNcIixcbiAgICBkZWVwc2t5Ymx1ZTogXCIwMGJmZmZcIixcbiAgICBkaW1ncmF5OiBcIjY5Njk2OVwiLFxuICAgIGRpbWdyZXk6IFwiNjk2OTY5XCIsXG4gICAgZG9kZ2VyYmx1ZTogXCIxZTkwZmZcIixcbiAgICBmaXJlYnJpY2s6IFwiYjIyMjIyXCIsXG4gICAgZmxvcmFsd2hpdGU6IFwiZmZmYWYwXCIsXG4gICAgZm9yZXN0Z3JlZW46IFwiMjI4YjIyXCIsXG4gICAgZnVjaHNpYTogXCJmMGZcIixcbiAgICBnYWluc2Jvcm86IFwiZGNkY2RjXCIsXG4gICAgZ2hvc3R3aGl0ZTogXCJmOGY4ZmZcIixcbiAgICBnb2xkOiBcImZmZDcwMFwiLFxuICAgIGdvbGRlbnJvZDogXCJkYWE1MjBcIixcbiAgICBncmF5OiBcIjgwODA4MFwiLFxuICAgIGdyZWVuOiBcIjAwODAwMFwiLFxuICAgIGdyZWVueWVsbG93OiBcImFkZmYyZlwiLFxuICAgIGdyZXk6IFwiODA4MDgwXCIsXG4gICAgaG9uZXlkZXc6IFwiZjBmZmYwXCIsXG4gICAgaG90cGluazogXCJmZjY5YjRcIixcbiAgICBpbmRpYW5yZWQ6IFwiY2Q1YzVjXCIsXG4gICAgaW5kaWdvOiBcIjRiMDA4MlwiLFxuICAgIGl2b3J5OiBcImZmZmZmMFwiLFxuICAgIGtoYWtpOiBcImYwZTY4Y1wiLFxuICAgIGxhdmVuZGVyOiBcImU2ZTZmYVwiLFxuICAgIGxhdmVuZGVyYmx1c2g6IFwiZmZmMGY1XCIsXG4gICAgbGF3bmdyZWVuOiBcIjdjZmMwMFwiLFxuICAgIGxlbW9uY2hpZmZvbjogXCJmZmZhY2RcIixcbiAgICBsaWdodGJsdWU6IFwiYWRkOGU2XCIsXG4gICAgbGlnaHRjb3JhbDogXCJmMDgwODBcIixcbiAgICBsaWdodGN5YW46IFwiZTBmZmZmXCIsXG4gICAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiZmFmYWQyXCIsXG4gICAgbGlnaHRncmF5OiBcImQzZDNkM1wiLFxuICAgIGxpZ2h0Z3JlZW46IFwiOTBlZTkwXCIsXG4gICAgbGlnaHRncmV5OiBcImQzZDNkM1wiLFxuICAgIGxpZ2h0cGluazogXCJmZmI2YzFcIixcbiAgICBsaWdodHNhbG1vbjogXCJmZmEwN2FcIixcbiAgICBsaWdodHNlYWdyZWVuOiBcIjIwYjJhYVwiLFxuICAgIGxpZ2h0c2t5Ymx1ZTogXCI4N2NlZmFcIixcbiAgICBsaWdodHNsYXRlZ3JheTogXCI3ODlcIixcbiAgICBsaWdodHNsYXRlZ3JleTogXCI3ODlcIixcbiAgICBsaWdodHN0ZWVsYmx1ZTogXCJiMGM0ZGVcIixcbiAgICBsaWdodHllbGxvdzogXCJmZmZmZTBcIixcbiAgICBsaW1lOiBcIjBmMFwiLFxuICAgIGxpbWVncmVlbjogXCIzMmNkMzJcIixcbiAgICBsaW5lbjogXCJmYWYwZTZcIixcbiAgICBtYWdlbnRhOiBcImYwZlwiLFxuICAgIG1hcm9vbjogXCI4MDAwMDBcIixcbiAgICBtZWRpdW1hcXVhbWFyaW5lOiBcIjY2Y2RhYVwiLFxuICAgIG1lZGl1bWJsdWU6IFwiMDAwMGNkXCIsXG4gICAgbWVkaXVtb3JjaGlkOiBcImJhNTVkM1wiLFxuICAgIG1lZGl1bXB1cnBsZTogXCI5MzcwZGJcIixcbiAgICBtZWRpdW1zZWFncmVlbjogXCIzY2IzNzFcIixcbiAgICBtZWRpdW1zbGF0ZWJsdWU6IFwiN2I2OGVlXCIsXG4gICAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiMDBmYTlhXCIsXG4gICAgbWVkaXVtdHVycXVvaXNlOiBcIjQ4ZDFjY1wiLFxuICAgIG1lZGl1bXZpb2xldHJlZDogXCJjNzE1ODVcIixcbiAgICBtaWRuaWdodGJsdWU6IFwiMTkxOTcwXCIsXG4gICAgbWludGNyZWFtOiBcImY1ZmZmYVwiLFxuICAgIG1pc3R5cm9zZTogXCJmZmU0ZTFcIixcbiAgICBtb2NjYXNpbjogXCJmZmU0YjVcIixcbiAgICBuYXZham93aGl0ZTogXCJmZmRlYWRcIixcbiAgICBuYXZ5OiBcIjAwMDA4MFwiLFxuICAgIG9sZGxhY2U6IFwiZmRmNWU2XCIsXG4gICAgb2xpdmU6IFwiODA4MDAwXCIsXG4gICAgb2xpdmVkcmFiOiBcIjZiOGUyM1wiLFxuICAgIG9yYW5nZTogXCJmZmE1MDBcIixcbiAgICBvcmFuZ2VyZWQ6IFwiZmY0NTAwXCIsXG4gICAgb3JjaGlkOiBcImRhNzBkNlwiLFxuICAgIHBhbGVnb2xkZW5yb2Q6IFwiZWVlOGFhXCIsXG4gICAgcGFsZWdyZWVuOiBcIjk4ZmI5OFwiLFxuICAgIHBhbGV0dXJxdW9pc2U6IFwiYWZlZWVlXCIsXG4gICAgcGFsZXZpb2xldHJlZDogXCJkYjcwOTNcIixcbiAgICBwYXBheWF3aGlwOiBcImZmZWZkNVwiLFxuICAgIHBlYWNocHVmZjogXCJmZmRhYjlcIixcbiAgICBwZXJ1OiBcImNkODUzZlwiLFxuICAgIHBpbms6IFwiZmZjMGNiXCIsXG4gICAgcGx1bTogXCJkZGEwZGRcIixcbiAgICBwb3dkZXJibHVlOiBcImIwZTBlNlwiLFxuICAgIHB1cnBsZTogXCI4MDAwODBcIixcbiAgICByZWJlY2NhcHVycGxlOiBcIjY2MzM5OVwiLFxuICAgIHJlZDogXCJmMDBcIixcbiAgICByb3N5YnJvd246IFwiYmM4ZjhmXCIsXG4gICAgcm95YWxibHVlOiBcIjQxNjllMVwiLFxuICAgIHNhZGRsZWJyb3duOiBcIjhiNDUxM1wiLFxuICAgIHNhbG1vbjogXCJmYTgwNzJcIixcbiAgICBzYW5keWJyb3duOiBcImY0YTQ2MFwiLFxuICAgIHNlYWdyZWVuOiBcIjJlOGI1N1wiLFxuICAgIHNlYXNoZWxsOiBcImZmZjVlZVwiLFxuICAgIHNpZW5uYTogXCJhMDUyMmRcIixcbiAgICBzaWx2ZXI6IFwiYzBjMGMwXCIsXG4gICAgc2t5Ymx1ZTogXCI4N2NlZWJcIixcbiAgICBzbGF0ZWJsdWU6IFwiNmE1YWNkXCIsXG4gICAgc2xhdGVncmF5OiBcIjcwODA5MFwiLFxuICAgIHNsYXRlZ3JleTogXCI3MDgwOTBcIixcbiAgICBzbm93OiBcImZmZmFmYVwiLFxuICAgIHNwcmluZ2dyZWVuOiBcIjAwZmY3ZlwiLFxuICAgIHN0ZWVsYmx1ZTogXCI0NjgyYjRcIixcbiAgICB0YW46IFwiZDJiNDhjXCIsXG4gICAgdGVhbDogXCIwMDgwODBcIixcbiAgICB0aGlzdGxlOiBcImQ4YmZkOFwiLFxuICAgIHRvbWF0bzogXCJmZjYzNDdcIixcbiAgICB0dXJxdW9pc2U6IFwiNDBlMGQwXCIsXG4gICAgdmlvbGV0OiBcImVlODJlZVwiLFxuICAgIHdoZWF0OiBcImY1ZGViM1wiLFxuICAgIHdoaXRlOiBcImZmZlwiLFxuICAgIHdoaXRlc21va2U6IFwiZjVmNWY1XCIsXG4gICAgeWVsbG93OiBcImZmMFwiLFxuICAgIHllbGxvd2dyZWVuOiBcIjlhY2QzMlwiXG59O1xuXG4vLyBNYWtlIGl0IGVhc3kgdG8gYWNjZXNzIGNvbG9ycyB2aWEgYGhleE5hbWVzW2hleF1gXG52YXIgaGV4TmFtZXMgPSB0aW55Y29sb3IuaGV4TmFtZXMgPSBmbGlwKG5hbWVzKTtcblxuXG4vLyBVdGlsaXRpZXNcbi8vIC0tLS0tLS0tLVxuXG4vLyBgeyAnbmFtZTEnOiAndmFsMScgfWAgYmVjb21lcyBgeyAndmFsMSc6ICduYW1lMScgfWBcbmZ1bmN0aW9uIGZsaXAobykge1xuICAgIHZhciBmbGlwcGVkID0geyB9O1xuICAgIGZvciAodmFyIGkgaW4gbykge1xuICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgZmxpcHBlZFtvW2ldXSA9IGk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZsaXBwZWQ7XG59XG5cbi8vIFJldHVybiBhIHZhbGlkIGFscGhhIHZhbHVlIFswLDFdIHdpdGggYWxsIGludmFsaWQgdmFsdWVzIGJlaW5nIHNldCB0byAxXG5mdW5jdGlvbiBib3VuZEFscGhhKGEpIHtcbiAgICBhID0gcGFyc2VGbG9hdChhKTtcblxuICAgIGlmIChpc05hTihhKSB8fCBhIDwgMCB8fCBhID4gMSkge1xuICAgICAgICBhID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbn1cblxuLy8gVGFrZSBpbnB1dCBmcm9tIFswLCBuXSBhbmQgcmV0dXJuIGl0IGFzIFswLCAxXVxuZnVuY3Rpb24gYm91bmQwMShuLCBtYXgpIHtcbiAgICBpZiAoaXNPbmVQb2ludFplcm8obikpIHsgbiA9IFwiMTAwJVwiOyB9XG5cbiAgICB2YXIgcHJvY2Vzc1BlcmNlbnQgPSBpc1BlcmNlbnRhZ2Uobik7XG4gICAgbiA9IG1hdGhNaW4obWF4LCBtYXRoTWF4KDAsIHBhcnNlRmxvYXQobikpKTtcblxuICAgIC8vIEF1dG9tYXRpY2FsbHkgY29udmVydCBwZXJjZW50YWdlIGludG8gbnVtYmVyXG4gICAgaWYgKHByb2Nlc3NQZXJjZW50KSB7XG4gICAgICAgIG4gPSBwYXJzZUludChuICogbWF4LCAxMCkgLyAxMDA7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9yc1xuICAgIGlmICgoTWF0aC5hYnMobiAtIG1heCkgPCAwLjAwMDAwMSkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBpbnRvIFswLCAxXSByYW5nZSBpZiBpdCBpc24ndCBhbHJlYWR5XG4gICAgcmV0dXJuIChuICUgbWF4KSAvIHBhcnNlRmxvYXQobWF4KTtcbn1cblxuLy8gRm9yY2UgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG5mdW5jdGlvbiBjbGFtcDAxKHZhbCkge1xuICAgIHJldHVybiBtYXRoTWluKDEsIG1hdGhNYXgoMCwgdmFsKSk7XG59XG5cbi8vIFBhcnNlIGEgYmFzZS0xNiBoZXggdmFsdWUgaW50byBhIGJhc2UtMTAgaW50ZWdlclxuZnVuY3Rpb24gcGFyc2VJbnRGcm9tSGV4KHZhbCkge1xuICAgIHJldHVybiBwYXJzZUludCh2YWwsIDE2KTtcbn1cblxuLy8gTmVlZCB0byBoYW5kbGUgMS4wIGFzIDEwMCUsIHNpbmNlIG9uY2UgaXQgaXMgYSBudW1iZXIsIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBpdCBhbmQgMVxuLy8gPGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzQyMjA3Mi9qYXZhc2NyaXB0LWhvdy10by1kZXRlY3QtbnVtYmVyLWFzLWEtZGVjaW1hbC1pbmNsdWRpbmctMS0wPlxuZnVuY3Rpb24gaXNPbmVQb2ludFplcm8obikge1xuICAgIHJldHVybiB0eXBlb2YgbiA9PSBcInN0cmluZ1wiICYmIG4uaW5kZXhPZignLicpICE9IC0xICYmIHBhcnNlRmxvYXQobikgPT09IDE7XG59XG5cbi8vIENoZWNrIHRvIHNlZSBpZiBzdHJpbmcgcGFzc2VkIGluIGlzIGEgcGVyY2VudGFnZVxuZnVuY3Rpb24gaXNQZXJjZW50YWdlKG4pIHtcbiAgICByZXR1cm4gdHlwZW9mIG4gPT09IFwic3RyaW5nXCIgJiYgbi5pbmRleE9mKCclJykgIT0gLTE7XG59XG5cbi8vIEZvcmNlIGEgaGV4IHZhbHVlIHRvIGhhdmUgMiBjaGFyYWN0ZXJzXG5mdW5jdGlvbiBwYWQyKGMpIHtcbiAgICByZXR1cm4gYy5sZW5ndGggPT0gMSA/ICcwJyArIGMgOiAnJyArIGM7XG59XG5cbi8vIFJlcGxhY2UgYSBkZWNpbWFsIHdpdGggaXQncyBwZXJjZW50YWdlIHZhbHVlXG5mdW5jdGlvbiBjb252ZXJ0VG9QZXJjZW50YWdlKG4pIHtcbiAgICBpZiAobiA8PSAxKSB7XG4gICAgICAgIG4gPSAobiAqIDEwMCkgKyBcIiVcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gbjtcbn1cblxuLy8gQ29udmVydHMgYSBkZWNpbWFsIHRvIGEgaGV4IHZhbHVlXG5mdW5jdGlvbiBjb252ZXJ0RGVjaW1hbFRvSGV4KGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGQpICogMjU1KS50b1N0cmluZygxNik7XG59XG4vLyBDb252ZXJ0cyBhIGhleCB2YWx1ZSB0byBhIGRlY2ltYWxcbmZ1bmN0aW9uIGNvbnZlcnRIZXhUb0RlY2ltYWwoaCkge1xuICAgIHJldHVybiAocGFyc2VJbnRGcm9tSGV4KGgpIC8gMjU1KTtcbn1cblxudmFyIG1hdGNoZXJzID0gKGZ1bmN0aW9uKCkge1xuXG4gICAgLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNpbnRlZ2Vycz5cbiAgICB2YXIgQ1NTX0lOVEVHRVIgPSBcIlstXFxcXCtdP1xcXFxkKyU/XCI7XG5cbiAgICAvLyA8aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy12YWx1ZXMvI251bWJlci12YWx1ZT5cbiAgICB2YXIgQ1NTX05VTUJFUiA9IFwiWy1cXFxcK10/XFxcXGQqXFxcXC5cXFxcZCslP1wiO1xuXG4gICAgLy8gQWxsb3cgcG9zaXRpdmUvbmVnYXRpdmUgaW50ZWdlci9udW1iZXIuICBEb24ndCBjYXB0dXJlIHRoZSBlaXRoZXIvb3IsIGp1c3QgdGhlIGVudGlyZSBvdXRjb21lLlxuICAgIHZhciBDU1NfVU5JVCA9IFwiKD86XCIgKyBDU1NfTlVNQkVSICsgXCIpfCg/OlwiICsgQ1NTX0lOVEVHRVIgKyBcIilcIjtcblxuICAgIC8vIEFjdHVhbCBtYXRjaGluZy5cbiAgICAvLyBQYXJlbnRoZXNlcyBhbmQgY29tbWFzIGFyZSBvcHRpb25hbCwgYnV0IG5vdCByZXF1aXJlZC5cbiAgICAvLyBXaGl0ZXNwYWNlIGNhbiB0YWtlIHRoZSBwbGFjZSBvZiBjb21tYXMgb3Igb3BlbmluZyBwYXJlblxuICAgIHZhciBQRVJNSVNTSVZFX01BVENIMyA9IFwiW1xcXFxzfFxcXFwoXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVxcXFxzKlxcXFwpP1wiO1xuICAgIHZhciBQRVJNSVNTSVZFX01BVENINCA9IFwiW1xcXFxzfFxcXFwoXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVxcXFxzKlxcXFwpP1wiO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgQ1NTX1VOSVQ6IG5ldyBSZWdFeHAoQ1NTX1VOSVQpLFxuICAgICAgICByZ2I6IG5ldyBSZWdFeHAoXCJyZ2JcIiArIFBFUk1JU1NJVkVfTUFUQ0gzKSxcbiAgICAgICAgcmdiYTogbmV3IFJlZ0V4cChcInJnYmFcIiArIFBFUk1JU1NJVkVfTUFUQ0g0KSxcbiAgICAgICAgaHNsOiBuZXcgUmVnRXhwKFwiaHNsXCIgKyBQRVJNSVNTSVZFX01BVENIMyksXG4gICAgICAgIGhzbGE6IG5ldyBSZWdFeHAoXCJoc2xhXCIgKyBQRVJNSVNTSVZFX01BVENINCksXG4gICAgICAgIGhzdjogbmV3IFJlZ0V4cChcImhzdlwiICsgUEVSTUlTU0lWRV9NQVRDSDMpLFxuICAgICAgICBoc3ZhOiBuZXcgUmVnRXhwKFwiaHN2YVwiICsgUEVSTUlTU0lWRV9NQVRDSDQpLFxuICAgICAgICBoZXgzOiAvXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8sXG4gICAgICAgIGhleDY6IC9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxcbiAgICAgICAgaGV4NDogL14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxcbiAgICAgICAgaGV4ODogL14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkL1xuICAgIH07XG59KSgpO1xuXG4vLyBgaXNWYWxpZENTU1VuaXRgXG4vLyBUYWtlIGluIGEgc2luZ2xlIHN0cmluZyAvIG51bWJlciBhbmQgY2hlY2sgdG8gc2VlIGlmIGl0IGxvb2tzIGxpa2UgYSBDU1MgdW5pdFxuLy8gKHNlZSBgbWF0Y2hlcnNgIGFib3ZlIGZvciBkZWZpbml0aW9uKS5cbmZ1bmN0aW9uIGlzVmFsaWRDU1NVbml0KGNvbG9yKSB7XG4gICAgcmV0dXJuICEhbWF0Y2hlcnMuQ1NTX1VOSVQuZXhlYyhjb2xvcik7XG59XG5cbi8vIGBzdHJpbmdJbnB1dFRvT2JqZWN0YFxuLy8gUGVybWlzc2l2ZSBzdHJpbmcgcGFyc2luZy4gIFRha2UgaW4gYSBudW1iZXIgb2YgZm9ybWF0cywgYW5kIG91dHB1dCBhbiBvYmplY3Rcbi8vIGJhc2VkIG9uIGRldGVjdGVkIGZvcm1hdC4gIFJldHVybnMgYHsgciwgZywgYiB9YCBvciBgeyBoLCBzLCBsIH1gIG9yIGB7IGgsIHMsIHZ9YFxuZnVuY3Rpb24gc3RyaW5nSW5wdXRUb09iamVjdChjb2xvcikge1xuXG4gICAgY29sb3IgPSBjb2xvci5yZXBsYWNlKHRyaW1MZWZ0LCcnKS5yZXBsYWNlKHRyaW1SaWdodCwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIG5hbWVkID0gZmFsc2U7XG4gICAgaWYgKG5hbWVzW2NvbG9yXSkge1xuICAgICAgICBjb2xvciA9IG5hbWVzW2NvbG9yXTtcbiAgICAgICAgbmFtZWQgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb2xvciA9PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgICAgIHJldHVybiB7IHI6IDAsIGc6IDAsIGI6IDAsIGE6IDAsIGZvcm1hdDogXCJuYW1lXCIgfTtcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gbWF0Y2ggc3RyaW5nIGlucHV0IHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gICAgLy8gS2VlcCBtb3N0IG9mIHRoZSBudW1iZXIgYm91bmRpbmcgb3V0IG9mIHRoaXMgZnVuY3Rpb24gLSBkb24ndCB3b3JyeSBhYm91dCBbMCwxXSBvciBbMCwxMDBdIG9yIFswLDM2MF1cbiAgICAvLyBKdXN0IHJldHVybiBhbiBvYmplY3QgYW5kIGxldCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMgaGFuZGxlIHRoYXQuXG4gICAgLy8gVGhpcyB3YXkgdGhlIHJlc3VsdCB3aWxsIGJlIHRoZSBzYW1lIHdoZXRoZXIgdGhlIHRpbnljb2xvciBpcyBpbml0aWFsaXplZCB3aXRoIHN0cmluZyBvciBvYmplY3QuXG4gICAgdmFyIG1hdGNoO1xuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5yZ2IuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IHI6IG1hdGNoWzFdLCBnOiBtYXRjaFsyXSwgYjogbWF0Y2hbM10gfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLnJnYmEuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IHI6IG1hdGNoWzFdLCBnOiBtYXRjaFsyXSwgYjogbWF0Y2hbM10sIGE6IG1hdGNoWzRdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oc2wuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IGg6IG1hdGNoWzFdLCBzOiBtYXRjaFsyXSwgbDogbWF0Y2hbM10gfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhzbGEuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IGg6IG1hdGNoWzFdLCBzOiBtYXRjaFsyXSwgbDogbWF0Y2hbM10sIGE6IG1hdGNoWzRdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oc3YuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IGg6IG1hdGNoWzFdLCBzOiBtYXRjaFsyXSwgdjogbWF0Y2hbM10gfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhzdmEuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IGg6IG1hdGNoWzFdLCBzOiBtYXRjaFsyXSwgdjogbWF0Y2hbM10sIGE6IG1hdGNoWzRdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oZXg4LmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzFdKSxcbiAgICAgICAgICAgIGc6IHBhcnNlSW50RnJvbUhleChtYXRjaFsyXSksXG4gICAgICAgICAgICBiOiBwYXJzZUludEZyb21IZXgobWF0Y2hbM10pLFxuICAgICAgICAgICAgYTogY29udmVydEhleFRvRGVjaW1hbChtYXRjaFs0XSksXG4gICAgICAgICAgICBmb3JtYXQ6IG5hbWVkID8gXCJuYW1lXCIgOiBcImhleDhcIlxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaGV4Ni5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSksXG4gICAgICAgICAgICBnOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMl0pLFxuICAgICAgICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdKSxcbiAgICAgICAgICAgIGZvcm1hdDogbmFtZWQgPyBcIm5hbWVcIiA6IFwiaGV4XCJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhleDQuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMV0gKyAnJyArIG1hdGNoWzFdKSxcbiAgICAgICAgICAgIGc6IHBhcnNlSW50RnJvbUhleChtYXRjaFsyXSArICcnICsgbWF0Y2hbMl0pLFxuICAgICAgICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdICsgJycgKyBtYXRjaFszXSksXG4gICAgICAgICAgICBhOiBjb252ZXJ0SGV4VG9EZWNpbWFsKG1hdGNoWzRdICsgJycgKyBtYXRjaFs0XSksXG4gICAgICAgICAgICBmb3JtYXQ6IG5hbWVkID8gXCJuYW1lXCIgOiBcImhleDhcIlxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaGV4My5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSArICcnICsgbWF0Y2hbMV0pLFxuICAgICAgICAgICAgZzogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzJdICsgJycgKyBtYXRjaFsyXSksXG4gICAgICAgICAgICBiOiBwYXJzZUludEZyb21IZXgobWF0Y2hbM10gKyAnJyArIG1hdGNoWzNdKSxcbiAgICAgICAgICAgIGZvcm1hdDogbmFtZWQgPyBcIm5hbWVcIiA6IFwiaGV4XCJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV0NBRzJQYXJtcyhwYXJtcykge1xuICAgIC8vIHJldHVybiB2YWxpZCBXQ0FHMiBwYXJtcyBmb3IgaXNSZWFkYWJsZS5cbiAgICAvLyBJZiBpbnB1dCBwYXJtcyBhcmUgaW52YWxpZCwgcmV0dXJuIHtcImxldmVsXCI6XCJBQVwiLCBcInNpemVcIjpcInNtYWxsXCJ9XG4gICAgdmFyIGxldmVsLCBzaXplO1xuICAgIHBhcm1zID0gcGFybXMgfHwge1wibGV2ZWxcIjpcIkFBXCIsIFwic2l6ZVwiOlwic21hbGxcIn07XG4gICAgbGV2ZWwgPSAocGFybXMubGV2ZWwgfHwgXCJBQVwiKS50b1VwcGVyQ2FzZSgpO1xuICAgIHNpemUgPSAocGFybXMuc2l6ZSB8fCBcInNtYWxsXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxldmVsICE9PSBcIkFBXCIgJiYgbGV2ZWwgIT09IFwiQUFBXCIpIHtcbiAgICAgICAgbGV2ZWwgPSBcIkFBXCI7XG4gICAgfVxuICAgIGlmIChzaXplICE9PSBcInNtYWxsXCIgJiYgc2l6ZSAhPT0gXCJsYXJnZVwiKSB7XG4gICAgICAgIHNpemUgPSBcInNtYWxsXCI7XG4gICAgfVxuICAgIHJldHVybiB7XCJsZXZlbFwiOmxldmVsLCBcInNpemVcIjpzaXplfTtcbn1cblxuLy8gTm9kZTogRXhwb3J0IGZ1bmN0aW9uXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gdGlueWNvbG9yO1xufVxuLy8gQU1EL3JlcXVpcmVqczogRGVmaW5lIHRoZSBtb2R1bGVcbmVsc2UgaWYgKHRydWUpIHtcbiAgICAhKF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uICgpIHtyZXR1cm4gdGlueWNvbG9yO30pLmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXywgZXhwb3J0cywgbW9kdWxlKSxcblx0XHRcdFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xufVxuLy8gQnJvd3NlcjogRXhwb3NlIHRvIHdpbmRvd1xuZWxzZSB7XG4gICAgd2luZG93LnRpbnljb2xvciA9IHRpbnljb2xvcjtcbn1cblxufSkoTWF0aCk7XG5cblxuLyoqKi8gfSksXG4vKiAxMDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxubW9kdWxlLmV4cG9ydHMgPSAhX193ZWJwYWNrX3JlcXVpcmVfXyg2KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXygzKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX3JlcXVpcmVfXyg3NikoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbmV4cG9ydHMuZiA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cblxuLyoqKi8gfSksXG4vKiAxMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xudmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIGFycmF5SW5kZXhPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDExMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZFAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBnZXRLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDExMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgZ09QTiA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDExMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIGdldEtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcbnZhciBnT1BTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XG52YXIgcElFID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIElPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IF9fd2VicGFja19yZXF1aXJlX18oMykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIGlmIChpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKSBUW2tleV0gPSBTW2tleV07XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcblxuXG4vKioqLyB9KSxcbi8qIDExNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBpbnZva2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNSk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDExNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJHBhcnNlSW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpLnRyaW07XG52YXIgd3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgyKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG5cblxuLyoqKi8gfSksXG4vKiAxMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRwYXJzZUZsb2F0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5wYXJzZUZsb2F0O1xudmFyICR0cmltID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQoX193ZWJwYWNrX3JlcXVpcmVfXyg4MikgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcblxuXG4vKioqLyB9KSxcbi8qIDExOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oODUpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDEyMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTIzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYUxlbiwgbWVtbywgaXNSaWdodCkge1xuICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gaXNSaWdodCA/IGxlbmd0aCAtIDEgOiAwO1xuICB2YXIgaSA9IGlzUmlnaHQgPyAtMSA6IDE7XG4gIGlmIChhTGVuIDwgMikgZm9yICg7Oykge1xuICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ICs9IGk7XG4gICAgaWYgKGlzUmlnaHQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIH1cbiAgfVxuICBmb3IgKDtpc1JpZ2h0ID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gIH1cbiAgcmV0dXJuIG1lbW87XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTI0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG5cbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtdLmNvcHlXaXRoaW4gfHwgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQgLyogPSAwICovLCBzdGFydCAvKiA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIHRvID0gdG9BYnNvbHV0ZUluZGV4KHRhcmdldCwgbGVuKTtcbiAgdmFyIGZyb20gPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNvdW50ID0gTWF0aC5taW4oKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKSkgLSBmcm9tLCBsZW4gLSB0byk7XG4gIHZhciBpbmMgPSAxO1xuICBpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7XG4gICAgaW5jID0gLTE7XG4gICAgZnJvbSArPSBjb3VudCAtIDE7XG4gICAgdG8gKz0gY291bnQgLSAxO1xuICB9XG4gIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICB0byArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTI1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTI2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzKClcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fKDYpICYmIC8uL2cuZmxhZ3MgIT0gJ2cnKSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogX193ZWJwYWNrX3JlcXVpcmVfXyg2MSlcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTI3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHJvbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMCk7XG52YXIgdmFsaWRhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5KTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KShNQVAsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjEuMy42IE1hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gc3Ryb25nLmdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnY7XG4gIH0sXG4gIC8vIDIzLjEuMy45IE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZywgdHJ1ZSk7XG5cblxuLyoqKi8gfSksXG4vKiAxMzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBkUCA9IF9fd2VicGFja19yZXF1aXJlX18oNykuZjtcbnZhciBjcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcbnZhciByZWRlZmluZUFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIGFuSW5zdGFuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcbnZhciBmb3JPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xudmFyICRpdGVyRGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XG52YXIgc3RlcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTI1KTtcbnZhciBzZXRTcGVjaWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIGZhc3RLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKS5mYXN0S2V5O1xudmFyIHZhbGlkYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcblxuXG4vKioqLyB9KSxcbi8qIDEzMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIHN0cm9uZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcbnZhciB2YWxpZGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xudmFyIFNFVCA9ICdTZXQnO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNjQpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuXG5cbi8qKiovIH0pLFxuLyogMTMyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZWFjaCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpKDApO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgbWV0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xudmFyIGFzc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTEzKTtcbnZhciB3ZWFrID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgdmFsaWRhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5KTtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciB0bXAgPSB7fTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCkoV0VBS19NQVAsIHdyYXBwZXIsIG1ldGhvZHMsIHdlYWssIHRydWUsIHRydWUpO1xuXG4vLyBJRTExIFdlYWtNYXAgZnJvemVuIGtleXMgZml4XG5pZiAoZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3ICRXZWFrTWFwKCkuc2V0KChPYmplY3QuZnJlZXplIHx8IE9iamVjdCkodG1wKSwgNykuZ2V0KHRtcCkgIT0gNzsgfSkpIHtcbiAgSW50ZXJuYWxNYXAgPSB3ZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIFdFQUtfTUFQKTtcbiAgYXNzaWduKEludGVybmFsTWFwLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gIG1ldGEuTkVFRCA9IHRydWU7XG4gIGVhY2goWydkZWxldGUnLCAnaGFzJywgJ2dldCcsICdzZXQnXSwgZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBwcm90byA9ICRXZWFrTWFwLnByb3RvdHlwZTtcbiAgICB2YXIgbWV0aG9kID0gcHJvdG9ba2V5XTtcbiAgICByZWRlZmluZShwcm90bywga2V5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgLy8gc3RvcmUgZnJvemVuIG9iamVjdHMgb24gaW50ZXJuYWwgd2Vha21hcCBzaGltXG4gICAgICBpZiAoaXNPYmplY3QoYSkgJiYgIWlzRXh0ZW5zaWJsZShhKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2YpIHRoaXMuX2YgPSBuZXcgSW50ZXJuYWxNYXAoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zba2V5XShhLCBiKTtcbiAgICAgICAgcmV0dXJuIGtleSA9PSAnc2V0JyA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAvLyBzdG9yZSBhbGwgdGhlIHJlc3Qgb24gbmF0aXZlIHdlYWttYXBcbiAgICAgIH0gcmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIGEsIGIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDEzMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIHJlZGVmaW5lQWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XG52YXIgZ2V0V2VhayA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBhbkluc3RhbmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XG52YXIgZm9yT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xudmFyICRoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciB2YWxpZGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcblxuXG4vKioqLyB9KSxcbi8qIDEzNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2luZGV4XG52YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDEzNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xudmFyIGdPUFMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgUmVmbGVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMikuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDEzNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuXG5cbi8qKiovIH0pLFxuLyogMTM3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIHJlcGVhdCA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xudmFyIGRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMzggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdldEtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcbnZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciBpc0VudW0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChPLCBrZXkgPSBrZXlzW2krK10pKSB7XG4gICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTM5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XG52YXIgZnJvbSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDE0MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZm9yT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlciwgSVRFUkFUT1IpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDE0MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFrZUZ1bGxTY3JlZW4gPSBleHBvcnRzLm1ha2VXaWRnZXQgPSBleHBvcnRzLm1ha2VQb3B1cCA9IHVuZGVmaW5lZDtcblxudmFyIF9tYWtlUG9wdXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Myk7XG5cbnZhciBfbWFrZVBvcHVwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21ha2VQb3B1cCk7XG5cbnZhciBfbWFrZVdpZGdldCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYyKTtcblxudmFyIF9tYWtlV2lkZ2V0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21ha2VXaWRnZXQpO1xuXG52YXIgX21ha2VGdWxsU2NyZWVuID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjcpO1xuXG52YXIgX21ha2VGdWxsU2NyZWVuMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21ha2VGdWxsU2NyZWVuKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuaWYgKCF3aW5kb3cuX2JhYmVsUG9seWZpbGwpIHtcbiAgX193ZWJwYWNrX3JlcXVpcmVfXygxNjgpO1xufVxuXG5leHBvcnRzLm1ha2VQb3B1cCA9IF9tYWtlUG9wdXAyLmRlZmF1bHQ7XG5leHBvcnRzLm1ha2VXaWRnZXQgPSBfbWFrZVdpZGdldDIuZGVmYXVsdDtcbmV4cG9ydHMubWFrZUZ1bGxTY3JlZW4gPSBfbWFrZUZ1bGxTY3JlZW4yLmRlZmF1bHQ7XG5cbi8qKiovIH0pLFxuLyogMTQzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IG1ha2VQb3B1cDtcblxudmFyIF9yZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9yZWFjdERvbSA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xuXG52YXIgX3V0aWxpdGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xuXG52YXIgX3BvcHVwID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTQpO1xuXG52YXIgX3BvcHVwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BvcHVwKTtcblxudmFyIF9tb2JpbGVNb2RhbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTA2KTtcblxudmFyIF9tb2JpbGVNb2RhbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tb2JpbGVNb2RhbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBERUZBVUxUX0RSQVdFUl9XSURUSCA9IDgwMDtcbnZhciBERUZBVUxUX0FVVE9DTE9TRV9USU1FT1VUID0gNTtcblxudmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICBtb2RlOiBfcG9wdXAuUE9QVVAsXG4gIGF1dG9PcGVuOiBmYWxzZSxcbiAgaXNNb2RhbE9wZW46IGZhbHNlLFxuICBhdXRvQ2xvc2U6IERFRkFVTFRfQVVUT0NMT1NFX1RJTUVPVVQsXG4gIGhpZGVGb290ZXI6IGZhbHNlLFxuICBoaWRlSGVhZGVyczogZmFsc2UsXG4gIGhpZGVTY3JvbGxiYXJzOiBmYWxzZSxcbiAgZGlzYWJsZVN1Ym1pdDogZmFsc2UsXG4gIGRyYXdlcldpZHRoOiBERUZBVUxUX0RSQVdFUl9XSURUSCxcbiAgb25TdWJtaXQ6IF91dGlsaXRpZXMubm9vcFxufTtcblxudmFyIHF1ZXJ5U3RyaW5nS2V5cyA9IHtcbiAgZW1iZWRUeXBlOiAndHlwZWZvcm0tZW1iZWQnLFxuICBoaWRlRm9vdGVyOiAnZW1iZWQtaGlkZS1mb290ZXInLFxuICBoaWRlSGVhZGVyczogJ2VtYmVkLWhpZGUtaGVhZGVycycsXG4gIGRpc2FibGVTdWJtaXQ6ICdfX2Rhbmdlcm91cy1kaXNhYmxlLXN1Ym1pc3Npb25zJ1xufTtcblxudmFyIHJlbmRlckNvbXBvbmVudCA9IGZ1bmN0aW9uIHJlbmRlckNvbXBvbmVudCh1cmwsIGRvbU5vZGUsIG9wdGlvbnMsIG9uQ2xvc2UpIHtcbiAgaWYgKCEoMCwgX3V0aWxpdGllcy5pc01vYmlsZSkobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgKDAsIF91dGlsaXRpZXMuaXNTY3JlZW5CaWcpKCkpIHtcbiAgICB2YXIgdXJsV2l0aFF1ZXJ5U3RyaW5nID0gKDAsIF91dGlsaXRpZXMuYXBwZW5kUGFyYW1zVG9VcmwpKHVybCwgKDAsIF91dGlsaXRpZXMucmVwbGFjZUV4aXN0aW5nS2V5cykob3B0aW9ucywgcXVlcnlTdHJpbmdLZXlzKSk7XG5cbiAgICAoMCwgX3JlYWN0RG9tLnJlbmRlcikoX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX3BvcHVwMi5kZWZhdWx0LCB7IHVybDogdXJsV2l0aFF1ZXJ5U3RyaW5nLCBvcHRpb25zOiBvcHRpb25zLCBvbkNsb3NlOiBvbkNsb3NlIH0pLCBkb21Ob2RlKTtcbiAgfSBlbHNlIHtcbiAgICAoMCwgX3V0aWxpdGllcy5lbnN1cmVNZXRhVmlld3BvcnQpKCk7XG4gICAgKDAsIF9yZWFjdERvbS5yZW5kZXIpKF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9tb2JpbGVNb2RhbDIuZGVmYXVsdCwge1xuICAgICAgdXJsOiB1cmwsXG4gICAgICBidXR0b25UZXh0OiBvcHRpb25zLmJ1dHRvblRleHQsXG4gICAgICBhdXRvQ2xvc2U6IG9wdGlvbnMuYXV0b0Nsb3NlLFxuICAgICAgb25DbG9zZTogb25DbG9zZSxcbiAgICAgIG9uU3VibWl0OiBvcHRpb25zLm9uU3VibWl0LFxuICAgICAgaXNBdXRvQ2xvc2VFbmFibGVkOiBvcHRpb25zLmlzQXV0b0Nsb3NlRW5hYmxlZCxcbiAgICAgIG9wZW46IHRydWVcbiAgICB9KSwgZG9tTm9kZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIG1ha2VQb3B1cCh1cmwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IF9leHRlbmRzKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucywge1xuICAgIGlzQXV0b0Nsb3NlRW5hYmxlZDogb3B0aW9ucy5pc0F1dG9DbG9zZUVuYWJsZWQsXG4gICAgZW1iZWRUeXBlOiBfcG9wdXAuUE9QVVBfTU9ERVNbb3B0aW9ucy5tb2RlXVxuICB9KTtcblxuICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG9wdGlvbnMuZHJhd2VyV2lkdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXaG9vcHMhIFlvdSBwcm92aWRlZCBhbiBpbnZhbGlkIFxcJ2RyYXdlcldpZHRoXFwnIG9wdGlvbjogXCInICsgb3B0aW9ucy5kcmF3ZXJXaWR0aCArICdcIi4gSXQgbXVzdCBiZSBhIG51bWJlci4nKTtcbiAgfVxuXG4gIHZhciBkb21Ob2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG9wdGlvbnMuaXNDb250YWluZWQgPSBvcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkO1xuICBvcHRpb25zLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHk7XG4gIG9wdGlvbnMuY29udGFpbmVyLmFwcGVuZENoaWxkKGRvbU5vZGUpO1xuXG4gIHZhciBwb3B1cCA9IHtcbiAgICBvcGVuOiBmdW5jdGlvbiBvcGVuKCkge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KHVybCwgZG9tTm9kZSwgb3B0aW9ucywgdGhpcy5jbG9zZSk7XG4gICAgfSxcbiAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoJ2Zvcm0tY2xvc2UnLCAnKicpO1xuICAgICAgKDAsIF9yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKShkb21Ob2RlKTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKG9wdGlvbnMuYXV0b09wZW4pIHtcbiAgICBwb3B1cC5vcGVuKCk7XG4gIH1cblxuICByZXR1cm4gcG9wdXA7XG59XG5cbi8qKiovIH0pLFxuLyogMTQ0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblxuXG52YXIgZW1wdHlGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xudmFyIGludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xudmFyIHdhcm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDUpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcbiAgICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xuICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXG4gICAgICAgICAgICAvLyBBdm9pZCBzcGFtbWluZyB0aGUgY29uc29sZSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG5vdCBhY3Rpb25hYmxlIGV4Y2VwdCBmb3IgbGliIGF1dGhvcnNcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCVzYCBwcm9wIG9uIGAlc2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nLFxuICAgICAgICAgICAgICBwcm9wRnVsbE5hbWUsXG4gICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIHByb3BWYWx1ZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xuICAgICAgICAgICdyZWNlaXZlZCAlcyBhdCBpbmRleCAlcy4nLFxuICAgICAgICAgIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSxcbiAgICAgICAgICBpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIGlmIChjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbVxuICAgICAgLy8gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXG4gICAgICAgICAgICAnXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xuICAgICAgICAgICAgJ1xcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCdcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhL1xuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxuICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XG4gICAgfVxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHBvc3RmaXhlZCB0byBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCB0eXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgXCJ1bmRlZmluZWRcIiBvciBcIm9mIHR5cGUgYXJyYXlcIlxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiAnYW4gJyArIHR5cGU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlcztcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcblxuLyoqKi8gfSksXG4vKiAxNDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxNDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKTtcbiAgdmFyIHdhcm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0eSh0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGludmFyaWFudCh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gPT09ICdmdW5jdGlvbicsICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tICcgKyAndGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCVzYC4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSk7XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIHdhcm5pbmcoIWVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgRXJyb3IsICclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvcik7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkICVzIHR5cGU6ICVzJXMnLCBsb2NhdGlvbiwgZXJyb3IubWVzc2FnZSwgc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG5cbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KSkpXG5cbi8qKiovIH0pLFxuLyogMTQ3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cblxudmFyIGVtcHR5RnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKTtcbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW52YXJpYW50KFxuICAgICAgZmFsc2UsXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbVxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDE0OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaDsgfSk7XG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY3JlYXRlRWxlbWVudCAqL1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbG9uZUVsZW1lbnQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb21wb25lbnQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHJlcmVuZGVyICovXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG9wdGlvbnM7IH0pO1xuLyoqIFZpcnR1YWwgRE9NIE5vZGUgKi9cbmZ1bmN0aW9uIFZOb2RlKCkge31cblxuLyoqIEdsb2JhbCBvcHRpb25zXG4gKlx0QHB1YmxpY1xuICpcdEBuYW1lc3BhY2Ugb3B0aW9ucyB7T2JqZWN0fVxuICovXG52YXIgb3B0aW9ucyA9IHtcblxuXHQvKiogSWYgYHRydWVgLCBgcHJvcGAgY2hhbmdlcyB0cmlnZ2VyIHN5bmNocm9ub3VzIGNvbXBvbmVudCB1cGRhdGVzLlxuICAqXHRAbmFtZSBzeW5jQ29tcG9uZW50VXBkYXRlc1xuICAqXHRAdHlwZSBCb29sZWFuXG4gICpcdEBkZWZhdWx0IHRydWVcbiAgKi9cblx0Ly9zeW5jQ29tcG9uZW50VXBkYXRlczogdHJ1ZSxcblxuXHQvKiogUHJvY2Vzc2VzIGFsbCBjcmVhdGVkIFZOb2Rlcy5cbiAgKlx0QHBhcmFtIHtWTm9kZX0gdm5vZGVcdEEgbmV3bHktY3JlYXRlZCBWTm9kZSB0byBub3JtYWxpemUvcHJvY2Vzc1xuICAqL1xuXHQvL3Zub2RlKHZub2RlKSB7IH1cblxuXHQvKiogSG9vayBpbnZva2VkIGFmdGVyIGEgY29tcG9uZW50IGlzIG1vdW50ZWQuICovXG5cdC8vIGFmdGVyTW91bnQoY29tcG9uZW50KSB7IH1cblxuXHQvKiogSG9vayBpbnZva2VkIGFmdGVyIHRoZSBET00gaXMgdXBkYXRlZCB3aXRoIGEgY29tcG9uZW50J3MgbGF0ZXN0IHJlbmRlci4gKi9cblx0Ly8gYWZ0ZXJVcGRhdGUoY29tcG9uZW50KSB7IH1cblxuXHQvKiogSG9vayBpbnZva2VkIGltbWVkaWF0ZWx5IGJlZm9yZSBhIGNvbXBvbmVudCBpcyB1bm1vdW50ZWQuICovXG5cdC8vIGJlZm9yZVVubW91bnQoY29tcG9uZW50KSB7IH1cbn07XG5cbnZhciBzdGFjayA9IFtdO1xuXG52YXIgRU1QVFlfQ0hJTERSRU4gPSBbXTtcblxuLyoqXG4gKiBKU1gvaHlwZXJzY3JpcHQgcmV2aXZlci5cbiAqIEBzZWUgaHR0cDovL2phc29uZm9ybWF0LmNvbS93dGYtaXMtanN4XG4gKiBCZW5jaG1hcmtzOiBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzU3ZWU4ZjhlMzMwYWIwOTkwMGExYTFhMFxuICpcbiAqIE5vdGU6IHRoaXMgaXMgZXhwb3J0ZWQgYXMgYm90aCBgaCgpYCBhbmQgYGNyZWF0ZUVsZW1lbnQoKWAgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy5cbiAqXG4gKiBDcmVhdGVzIGEgVk5vZGUgKHZpcnR1YWwgRE9NIGVsZW1lbnQpLiBBIHRyZWUgb2YgVk5vZGVzIGNhbiBiZSB1c2VkIGFzIGEgbGlnaHR3ZWlnaHQgcmVwcmVzZW50YXRpb25cbiAqIG9mIHRoZSBzdHJ1Y3R1cmUgb2YgYSBET00gdHJlZS4gVGhpcyBzdHJ1Y3R1cmUgY2FuIGJlIHJlYWxpemVkIGJ5IHJlY3Vyc2l2ZWx5IGNvbXBhcmluZyBpdCBhZ2FpbnN0XG4gKiB0aGUgY3VycmVudCBfYWN0dWFsXyBET00gc3RydWN0dXJlLCBhbmQgYXBwbHlpbmcgb25seSB0aGUgZGlmZmVyZW5jZXMuXG4gKlxuICogYGgoKWAvYGNyZWF0ZUVsZW1lbnQoKWAgYWNjZXB0cyBhbiBlbGVtZW50IG5hbWUsIGEgbGlzdCBvZiBhdHRyaWJ1dGVzL3Byb3BzLFxuICogYW5kIG9wdGlvbmFsbHkgY2hpbGRyZW4gdG8gYXBwZW5kIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIEBleGFtcGxlIFRoZSBmb2xsb3dpbmcgRE9NIHRyZWVcbiAqXG4gKiBgPGRpdiBpZD1cImZvb1wiIG5hbWU9XCJiYXJcIj5IZWxsbyE8L2Rpdj5gXG4gKlxuICogY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHRoaXMgZnVuY3Rpb24gYXM6XG4gKlxuICogYGgoJ2RpdicsIHsgaWQ6ICdmb28nLCBuYW1lIDogJ2JhcicgfSwgJ0hlbGxvIScpO2BcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9kZU5hbWVcdEFuIGVsZW1lbnQgbmFtZS4gRXg6IGBkaXZgLCBgYWAsIGBzcGFuYCwgZXRjLlxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcdEFueSBhdHRyaWJ1dGVzL3Byb3BzIHRvIHNldCBvbiB0aGUgY3JlYXRlZCBlbGVtZW50LlxuICogQHBhcmFtIHJlc3RcdFx0XHRBZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgdGFrZW4gdG8gYmUgY2hpbGRyZW4gdG8gYXBwZW5kLiBDYW4gYmUgaW5maW5pdGVseSBuZXN0ZWQgQXJyYXlzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gaChub2RlTmFtZSwgYXR0cmlidXRlcykge1xuXHR2YXIgY2hpbGRyZW4gPSBFTVBUWV9DSElMRFJFTixcblx0ICAgIGxhc3RTaW1wbGUsXG5cdCAgICBjaGlsZCxcblx0ICAgIHNpbXBsZSxcblx0ICAgIGk7XG5cdGZvciAoaSA9IGFyZ3VtZW50cy5sZW5ndGg7IGktLSA+IDI7KSB7XG5cdFx0c3RhY2sucHVzaChhcmd1bWVudHNbaV0pO1xuXHR9XG5cdGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMuY2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdGlmICghc3RhY2subGVuZ3RoKSBzdGFjay5wdXNoKGF0dHJpYnV0ZXMuY2hpbGRyZW4pO1xuXHRcdGRlbGV0ZSBhdHRyaWJ1dGVzLmNoaWxkcmVuO1xuXHR9XG5cdHdoaWxlIChzdGFjay5sZW5ndGgpIHtcblx0XHRpZiAoKGNoaWxkID0gc3RhY2sucG9wKCkpICYmIGNoaWxkLnBvcCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGkgPSBjaGlsZC5sZW5ndGg7IGktLTspIHtcblx0XHRcdFx0c3RhY2sucHVzaChjaGlsZFtpXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlb2YgY2hpbGQgPT09ICdib29sZWFuJykgY2hpbGQgPSBudWxsO1xuXG5cdFx0XHRpZiAoc2ltcGxlID0gdHlwZW9mIG5vZGVOYW1lICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGlmIChjaGlsZCA9PSBudWxsKSBjaGlsZCA9ICcnO2Vsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ251bWJlcicpIGNoaWxkID0gU3RyaW5nKGNoaWxkKTtlbHNlIGlmICh0eXBlb2YgY2hpbGQgIT09ICdzdHJpbmcnKSBzaW1wbGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNpbXBsZSAmJiBsYXN0U2ltcGxlKSB7XG5cdFx0XHRcdGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdICs9IGNoaWxkO1xuXHRcdFx0fSBlbHNlIGlmIChjaGlsZHJlbiA9PT0gRU1QVFlfQ0hJTERSRU4pIHtcblx0XHRcdFx0Y2hpbGRyZW4gPSBbY2hpbGRdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cdFx0XHR9XG5cblx0XHRcdGxhc3RTaW1wbGUgPSBzaW1wbGU7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHAgPSBuZXcgVk5vZGUoKTtcblx0cC5ub2RlTmFtZSA9IG5vZGVOYW1lO1xuXHRwLmNoaWxkcmVuID0gY2hpbGRyZW47XG5cdHAuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGF0dHJpYnV0ZXM7XG5cdHAua2V5ID0gYXR0cmlidXRlcyA9PSBudWxsID8gdW5kZWZpbmVkIDogYXR0cmlidXRlcy5rZXk7XG5cblx0Ly8gaWYgYSBcInZub2RlIGhvb2tcIiBpcyBkZWZpbmVkLCBwYXNzIGV2ZXJ5IGNyZWF0ZWQgVk5vZGUgdG8gaXRcblx0aWYgKG9wdGlvbnMudm5vZGUgIT09IHVuZGVmaW5lZCkgb3B0aW9ucy52bm9kZShwKTtcblxuXHRyZXR1cm4gcDtcbn1cblxuLyoqXG4gKiAgQ29weSBhbGwgcHJvcGVydGllcyBmcm9tIGBwcm9wc2Agb250byBgb2JqYC5cbiAqICBAcGFyYW0ge09iamVjdH0gb2JqXHRcdE9iamVjdCBvbnRvIHdoaWNoIHByb3BlcnRpZXMgc2hvdWxkIGJlIGNvcGllZC5cbiAqICBAcGFyYW0ge09iamVjdH0gcHJvcHNcdE9iamVjdCBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydGllcy5cbiAqICBAcmV0dXJucyBvYmpcbiAqICBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBleHRlbmQob2JqLCBwcm9wcykge1xuICBmb3IgKHZhciBpIGluIHByb3BzKSB7XG4gICAgb2JqW2ldID0gcHJvcHNbaV07XG4gIH1yZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIENhbGwgYSBmdW5jdGlvbiBhc3luY2hyb25vdXNseSwgYXMgc29vbiBhcyBwb3NzaWJsZS4gTWFrZXNcbiAqIHVzZSBvZiBIVE1MIFByb21pc2UgdG8gc2NoZWR1bGUgdGhlIGNhbGxiYWNrIGlmIGF2YWlsYWJsZSxcbiAqIG90aGVyd2lzZSBmYWxsaW5nIGJhY2sgdG8gYHNldFRpbWVvdXRgIChtYWlubHkgZm9yIElFPDExKS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG52YXIgZGVmZXIgPSB0eXBlb2YgUHJvbWlzZSA9PSAnZnVuY3Rpb24nID8gUHJvbWlzZS5yZXNvbHZlKCkudGhlbi5iaW5kKFByb21pc2UucmVzb2x2ZSgpKSA6IHNldFRpbWVvdXQ7XG5cbi8qKlxuICogQ2xvbmVzIHRoZSBnaXZlbiBWTm9kZSwgb3B0aW9uYWxseSBhZGRpbmcgYXR0cmlidXRlcy9wcm9wcyBhbmQgcmVwbGFjaW5nIGl0cyBjaGlsZHJlbi5cbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlXHRcdFRoZSB2aXJ1dGFsIERPTSBlbGVtZW50IHRvIGNsb25lXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcdEF0dHJpYnV0ZXMvcHJvcHMgdG8gYWRkIHdoZW4gY2xvbmluZ1xuICogQHBhcmFtIHtWTm9kZX0gcmVzdFx0XHRBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgd2lsbCBiZSB1c2VkIGFzIHJlcGxhY2VtZW50IGNoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQodm5vZGUsIHByb3BzKSB7XG4gIHJldHVybiBoKHZub2RlLm5vZGVOYW1lLCBleHRlbmQoZXh0ZW5kKHt9LCB2bm9kZS5hdHRyaWJ1dGVzKSwgcHJvcHMpLCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IHZub2RlLmNoaWxkcmVuKTtcbn1cblxuLy8gRE9NIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgTk9UIGhhdmUgXCJweFwiIGFkZGVkIHdoZW4gbnVtZXJpY1xudmFyIElTX05PTl9ESU1FTlNJT05BTCA9IC9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZC9pO1xuXG4vKiogTWFuYWdlZCBxdWV1ZSBvZiBkaXJ0eSBjb21wb25lbnRzIHRvIGJlIHJlLXJlbmRlcmVkICovXG5cbnZhciBpdGVtcyA9IFtdO1xuXG5mdW5jdGlvbiBlbnF1ZXVlUmVuZGVyKGNvbXBvbmVudCkge1xuXHRpZiAoIWNvbXBvbmVudC5fZGlydHkgJiYgKGNvbXBvbmVudC5fZGlydHkgPSB0cnVlKSAmJiBpdGVtcy5wdXNoKGNvbXBvbmVudCkgPT0gMSkge1xuXHRcdChvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nIHx8IGRlZmVyKShyZXJlbmRlcik7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVyZW5kZXIoKSB7XG5cdHZhciBwLFxuXHQgICAgbGlzdCA9IGl0ZW1zO1xuXHRpdGVtcyA9IFtdO1xuXHR3aGlsZSAocCA9IGxpc3QucG9wKCkpIHtcblx0XHRpZiAocC5fZGlydHkpIHJlbmRlckNvbXBvbmVudChwKTtcblx0fVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byBub2RlcyBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcdFx0XHRET00gTm9kZSB0byBjb21wYXJlXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZVx0XHRcdFZpcnR1YWwgRE9NIG5vZGUgdG8gY29tcGFyZVxuICogQHBhcmFtIHtib29sZWFufSBbaHlyZGF0aW5nPWZhbHNlXVx0SWYgdHJ1ZSwgaWdub3JlcyBjb21wb25lbnQgY29uc3RydWN0b3JzIHdoZW4gY29tcGFyaW5nLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNTYW1lTm9kZVR5cGUobm9kZSwgdm5vZGUsIGh5ZHJhdGluZykge1xuICBpZiAodHlwZW9mIHZub2RlID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygdm5vZGUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIG5vZGUuc3BsaXRUZXh0ICE9PSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiB2bm9kZS5ub2RlTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gIW5vZGUuX2NvbXBvbmVudENvbnN0cnVjdG9yICYmIGlzTmFtZWROb2RlKG5vZGUsIHZub2RlLm5vZGVOYW1lKTtcbiAgfVxuICByZXR1cm4gaHlkcmF0aW5nIHx8IG5vZGUuX2NvbXBvbmVudENvbnN0cnVjdG9yID09PSB2bm9kZS5ub2RlTmFtZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhbiBFbGVtZW50IGhhcyBhIGdpdmVuIG5vZGVOYW1lLCBjYXNlLWluc2Vuc2l0aXZlbHkuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBub2RlXHRBIERPTSBFbGVtZW50IHRvIGluc3BlY3QgdGhlIG5hbWUgb2YuXG4gKiBAcGFyYW0ge1N0cmluZ30gbm9kZU5hbWVcdFVubm9ybWFsaXplZCBuYW1lIHRvIGNvbXBhcmUgYWdhaW5zdC5cbiAqL1xuZnVuY3Rpb24gaXNOYW1lZE5vZGUobm9kZSwgbm9kZU5hbWUpIHtcbiAgcmV0dXJuIG5vZGUubm9ybWFsaXplZE5vZGVOYW1lID09PSBub2RlTmFtZSB8fCBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogUmVjb25zdHJ1Y3QgQ29tcG9uZW50LXN0eWxlIGBwcm9wc2AgZnJvbSBhIFZOb2RlLlxuICogRW5zdXJlcyBkZWZhdWx0L2ZhbGxiYWNrIHZhbHVlcyBmcm9tIGBkZWZhdWx0UHJvcHNgOlxuICogT3duLXByb3BlcnRpZXMgb2YgYGRlZmF1bHRQcm9wc2Agbm90IHByZXNlbnQgaW4gYHZub2RlLmF0dHJpYnV0ZXNgIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZVxuICogQHJldHVybnMge09iamVjdH0gcHJvcHNcbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZVByb3BzKHZub2RlKSB7XG4gIHZhciBwcm9wcyA9IGV4dGVuZCh7fSwgdm5vZGUuYXR0cmlidXRlcyk7XG4gIHByb3BzLmNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG5cbiAgdmFyIGRlZmF1bHRQcm9wcyA9IHZub2RlLm5vZGVOYW1lLmRlZmF1bHRQcm9wcztcbiAgaWYgKGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yICh2YXIgaSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW2ldID0gZGVmYXVsdFByb3BzW2ldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9wcztcbn1cblxuLyoqIENyZWF0ZSBhbiBlbGVtZW50IHdpdGggdGhlIGdpdmVuIG5vZGVOYW1lLlxuICpcdEBwYXJhbSB7U3RyaW5nfSBub2RlTmFtZVxuICpcdEBwYXJhbSB7Qm9vbGVhbn0gW2lzU3ZnPWZhbHNlXVx0SWYgYHRydWVgLCBjcmVhdGVzIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBTVkcgbmFtZXNwYWNlLlxuICpcdEByZXR1cm5zIHtFbGVtZW50fSBub2RlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vZGUobm9kZU5hbWUsIGlzU3ZnKSB7XG5cdHZhciBub2RlID0gaXNTdmcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgbm9kZU5hbWUpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChub2RlTmFtZSk7XG5cdG5vZGUubm9ybWFsaXplZE5vZGVOYW1lID0gbm9kZU5hbWU7XG5cdHJldHVybiBub2RlO1xufVxuXG4vKiogUmVtb3ZlIGEgY2hpbGQgbm9kZSBmcm9tIGl0cyBwYXJlbnQgaWYgYXR0YWNoZWQuXG4gKlx0QHBhcmFtIHtFbGVtZW50fSBub2RlXHRcdFRoZSBub2RlIHRvIHJlbW92ZVxuICovXG5mdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUpIHtcblx0dmFyIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdGlmIChwYXJlbnROb2RlKSBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xufVxuXG4vKiogU2V0IGEgbmFtZWQgYXR0cmlidXRlIG9uIHRoZSBnaXZlbiBOb2RlLCB3aXRoIHNwZWNpYWwgYmVoYXZpb3IgZm9yIHNvbWUgbmFtZXMgYW5kIGV2ZW50IGhhbmRsZXJzLlxuICpcdElmIGB2YWx1ZWAgaXMgYG51bGxgLCB0aGUgYXR0cmlidXRlL2hhbmRsZXIgd2lsbCBiZSByZW1vdmVkLlxuICpcdEBwYXJhbSB7RWxlbWVudH0gbm9kZVx0QW4gZWxlbWVudCB0byBtdXRhdGVcbiAqXHRAcGFyYW0ge3N0cmluZ30gbmFtZVx0VGhlIG5hbWUva2V5IHRvIHNldCwgc3VjaCBhcyBhbiBldmVudCBvciBhdHRyaWJ1dGUgbmFtZVxuICpcdEBwYXJhbSB7YW55fSBvbGRcdFRoZSBsYXN0IHZhbHVlIHRoYXQgd2FzIHNldCBmb3IgdGhpcyBuYW1lL25vZGUgcGFpclxuICpcdEBwYXJhbSB7YW55fSB2YWx1ZVx0QW4gYXR0cmlidXRlIHZhbHVlLCBzdWNoIGFzIGEgZnVuY3Rpb24gdG8gYmUgdXNlZCBhcyBhbiBldmVudCBoYW5kbGVyXG4gKlx0QHBhcmFtIHtCb29sZWFufSBpc1N2Z1x0QXJlIHdlIGN1cnJlbnRseSBkaWZmaW5nIGluc2lkZSBhbiBzdmc/XG4gKlx0QHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0QWNjZXNzb3Iobm9kZSwgbmFtZSwgb2xkLCB2YWx1ZSwgaXNTdmcpIHtcblx0aWYgKG5hbWUgPT09ICdjbGFzc05hbWUnKSBuYW1lID0gJ2NsYXNzJztcblxuXHRpZiAobmFtZSA9PT0gJ2tleScpIHtcblx0XHQvLyBpZ25vcmVcblx0fSBlbHNlIGlmIChuYW1lID09PSAncmVmJykge1xuXHRcdGlmIChvbGQpIG9sZChudWxsKTtcblx0XHRpZiAodmFsdWUpIHZhbHVlKG5vZGUpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICdjbGFzcycgJiYgIWlzU3ZnKSB7XG5cdFx0bm9kZS5jbGFzc05hbWUgPSB2YWx1ZSB8fCAnJztcblx0fSBlbHNlIGlmIChuYW1lID09PSAnc3R5bGUnKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvbGQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRub2RlLnN0eWxlLmNzc1RleHQgPSB2YWx1ZSB8fCAnJztcblx0XHR9XG5cdFx0aWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGlmICh0eXBlb2Ygb2xkICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRmb3IgKHZhciBpIGluIG9sZCkge1xuXHRcdFx0XHRcdGlmICghKGkgaW4gdmFsdWUpKSBub2RlLnN0eWxlW2ldID0gJyc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAodmFyIGkgaW4gdmFsdWUpIHtcblx0XHRcdFx0bm9kZS5zdHlsZVtpXSA9IHR5cGVvZiB2YWx1ZVtpXSA9PT0gJ251bWJlcicgJiYgSVNfTk9OX0RJTUVOU0lPTkFMLnRlc3QoaSkgPT09IGZhbHNlID8gdmFsdWVbaV0gKyAncHgnIDogdmFsdWVbaV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcpIHtcblx0XHRpZiAodmFsdWUpIG5vZGUuaW5uZXJIVE1MID0gdmFsdWUuX19odG1sIHx8ICcnO1xuXHR9IGVsc2UgaWYgKG5hbWVbMF0gPT0gJ28nICYmIG5hbWVbMV0gPT0gJ24nKSB7XG5cdFx0dmFyIHVzZUNhcHR1cmUgPSBuYW1lICE9PSAobmFtZSA9IG5hbWUucmVwbGFjZSgvQ2FwdHVyZSQvLCAnJykpO1xuXHRcdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCkuc3Vic3RyaW5nKDIpO1xuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0aWYgKCFvbGQpIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBldmVudFByb3h5LCB1c2VDYXB0dXJlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGV2ZW50UHJveHksIHVzZUNhcHR1cmUpO1xuXHRcdH1cblx0XHQobm9kZS5fbGlzdGVuZXJzIHx8IChub2RlLl9saXN0ZW5lcnMgPSB7fSkpW25hbWVdID0gdmFsdWU7XG5cdH0gZWxzZSBpZiAobmFtZSAhPT0gJ2xpc3QnICYmIG5hbWUgIT09ICd0eXBlJyAmJiAhaXNTdmcgJiYgbmFtZSBpbiBub2RlKSB7XG5cdFx0c2V0UHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSBmYWxzZSkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIG5zID0gaXNTdmcgJiYgbmFtZSAhPT0gKG5hbWUgPSBuYW1lLnJlcGxhY2UoL154bGlua1xcOj8vLCAnJykpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSBmYWxzZSkge1xuXHRcdFx0aWYgKG5zKSBub2RlLnJlbW92ZUF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgbmFtZS50b0xvd2VyQ2FzZSgpKTtlbHNlIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRpZiAobnMpIG5vZGUuc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCBuYW1lLnRvTG93ZXJDYXNlKCksIHZhbHVlKTtlbHNlIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqIEF0dGVtcHQgdG8gc2V0IGEgRE9NIHByb3BlcnR5IHRvIHRoZSBnaXZlbiB2YWx1ZS5cbiAqXHRJRSAmIEZGIHRocm93IGZvciBjZXJ0YWluIHByb3BlcnR5LXZhbHVlIGNvbWJpbmF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gc2V0UHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUpIHtcblx0dHJ5IHtcblx0XHRub2RlW25hbWVdID0gdmFsdWU7XG5cdH0gY2F0Y2ggKGUpIHt9XG59XG5cbi8qKiBQcm94eSBhbiBldmVudCB0byBob29rZWQgZXZlbnQgaGFuZGxlcnNcbiAqXHRAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBldmVudFByb3h5KGUpIHtcblx0cmV0dXJuIHRoaXMuX2xpc3RlbmVyc1tlLnR5cGVdKG9wdGlvbnMuZXZlbnQgJiYgb3B0aW9ucy5ldmVudChlKSB8fCBlKTtcbn1cblxuLyoqIFF1ZXVlIG9mIGNvbXBvbmVudHMgdGhhdCBoYXZlIGJlZW4gbW91bnRlZCBhbmQgYXJlIGF3YWl0aW5nIGNvbXBvbmVudERpZE1vdW50ICovXG52YXIgbW91bnRzID0gW107XG5cbi8qKiBEaWZmIHJlY3Vyc2lvbiBjb3VudCwgdXNlZCB0byB0cmFjayB0aGUgZW5kIG9mIHRoZSBkaWZmIGN5Y2xlLiAqL1xudmFyIGRpZmZMZXZlbCA9IDA7XG5cbi8qKiBHbG9iYWwgZmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBkaWZmIGlzIGN1cnJlbnRseSB3aXRoaW4gYW4gU1ZHICovXG52YXIgaXNTdmdNb2RlID0gZmFsc2U7XG5cbi8qKiBHbG9iYWwgZmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBkaWZmIGlzIHBlcmZvcm1pbmcgaHlkcmF0aW9uICovXG52YXIgaHlkcmF0aW5nID0gZmFsc2U7XG5cbi8qKiBJbnZva2UgcXVldWVkIGNvbXBvbmVudERpZE1vdW50IGxpZmVjeWNsZSBtZXRob2RzICovXG5mdW5jdGlvbiBmbHVzaE1vdW50cygpIHtcblx0dmFyIGM7XG5cdHdoaWxlIChjID0gbW91bnRzLnBvcCgpKSB7XG5cdFx0aWYgKG9wdGlvbnMuYWZ0ZXJNb3VudCkgb3B0aW9ucy5hZnRlck1vdW50KGMpO1xuXHRcdGlmIChjLmNvbXBvbmVudERpZE1vdW50KSBjLmNvbXBvbmVudERpZE1vdW50KCk7XG5cdH1cbn1cblxuLyoqIEFwcGx5IGRpZmZlcmVuY2VzIGluIGEgZ2l2ZW4gdm5vZGUgKGFuZCBpdCdzIGRlZXAgY2hpbGRyZW4pIHRvIGEgcmVhbCBET00gTm9kZS5cbiAqXHRAcGFyYW0ge0VsZW1lbnR9IFtkb209bnVsbF1cdFx0QSBET00gbm9kZSB0byBtdXRhdGUgaW50byB0aGUgc2hhcGUgb2YgdGhlIGB2bm9kZWBcbiAqXHRAcGFyYW0ge1ZOb2RlfSB2bm9kZVx0XHRcdEEgVk5vZGUgKHdpdGggZGVzY2VuZGFudHMgZm9ybWluZyBhIHRyZWUpIHJlcHJlc2VudGluZyB0aGUgZGVzaXJlZCBET00gc3RydWN0dXJlXG4gKlx0QHJldHVybnMge0VsZW1lbnR9IGRvbVx0XHRcdFRoZSBjcmVhdGVkL211dGF0ZWQgZWxlbWVudFxuICpcdEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRpZmYoZG9tLCB2bm9kZSwgY29udGV4dCwgbW91bnRBbGwsIHBhcmVudCwgY29tcG9uZW50Um9vdCkge1xuXHQvLyBkaWZmTGV2ZWwgaGF2aW5nIGJlZW4gMCBoZXJlIGluZGljYXRlcyBpbml0aWFsIGVudHJ5IGludG8gdGhlIGRpZmYgKG5vdCBhIHN1YmRpZmYpXG5cdGlmICghZGlmZkxldmVsKyspIHtcblx0XHQvLyB3aGVuIGZpcnN0IHN0YXJ0aW5nIHRoZSBkaWZmLCBjaGVjayBpZiB3ZSdyZSBkaWZmaW5nIGFuIFNWRyBvciB3aXRoaW4gYW4gU1ZHXG5cdFx0aXNTdmdNb2RlID0gcGFyZW50ICE9IG51bGwgJiYgcGFyZW50Lm93bmVyU1ZHRWxlbWVudCAhPT0gdW5kZWZpbmVkO1xuXG5cdFx0Ly8gaHlkcmF0aW9uIGlzIGluZGljYXRlZCBieSB0aGUgZXhpc3RpbmcgZWxlbWVudCB0byBiZSBkaWZmZWQgbm90IGhhdmluZyBhIHByb3AgY2FjaGVcblx0XHRoeWRyYXRpbmcgPSBkb20gIT0gbnVsbCAmJiAhKCdfX3ByZWFjdGF0dHJfJyBpbiBkb20pO1xuXHR9XG5cblx0dmFyIHJldCA9IGlkaWZmKGRvbSwgdm5vZGUsIGNvbnRleHQsIG1vdW50QWxsLCBjb21wb25lbnRSb290KTtcblxuXHQvLyBhcHBlbmQgdGhlIGVsZW1lbnQgaWYgaXRzIGEgbmV3IHBhcmVudFxuXHRpZiAocGFyZW50ICYmIHJldC5wYXJlbnROb2RlICE9PSBwYXJlbnQpIHBhcmVudC5hcHBlbmRDaGlsZChyZXQpO1xuXG5cdC8vIGRpZmZMZXZlbCBiZWluZyByZWR1Y2VkIHRvIDAgbWVhbnMgd2UncmUgZXhpdGluZyB0aGUgZGlmZlxuXHRpZiAoISAtLWRpZmZMZXZlbCkge1xuXHRcdGh5ZHJhdGluZyA9IGZhbHNlO1xuXHRcdC8vIGludm9rZSBxdWV1ZWQgY29tcG9uZW50RGlkTW91bnQgbGlmZWN5Y2xlIG1ldGhvZHNcblx0XHRpZiAoIWNvbXBvbmVudFJvb3QpIGZsdXNoTW91bnRzKCk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG4vKiogSW50ZXJuYWxzIG9mIGBkaWZmKClgLCBzZXBhcmF0ZWQgdG8gYWxsb3cgYnlwYXNzaW5nIGRpZmZMZXZlbCAvIG1vdW50IGZsdXNoaW5nLiAqL1xuZnVuY3Rpb24gaWRpZmYoZG9tLCB2bm9kZSwgY29udGV4dCwgbW91bnRBbGwsIGNvbXBvbmVudFJvb3QpIHtcblx0dmFyIG91dCA9IGRvbSxcblx0ICAgIHByZXZTdmdNb2RlID0gaXNTdmdNb2RlO1xuXG5cdC8vIGVtcHR5IHZhbHVlcyAobnVsbCwgdW5kZWZpbmVkLCBib29sZWFucykgcmVuZGVyIGFzIGVtcHR5IFRleHQgbm9kZXNcblx0aWYgKHZub2RlID09IG51bGwgfHwgdHlwZW9mIHZub2RlID09PSAnYm9vbGVhbicpIHZub2RlID0gJyc7XG5cblx0Ly8gRmFzdCBjYXNlOiBTdHJpbmdzICYgTnVtYmVycyBjcmVhdGUvdXBkYXRlIFRleHQgbm9kZXMuXG5cdGlmICh0eXBlb2Ygdm5vZGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2bm9kZSA9PT0gJ251bWJlcicpIHtcblxuXHRcdC8vIHVwZGF0ZSBpZiBpdCdzIGFscmVhZHkgYSBUZXh0IG5vZGU6XG5cdFx0aWYgKGRvbSAmJiBkb20uc3BsaXRUZXh0ICE9PSB1bmRlZmluZWQgJiYgZG9tLnBhcmVudE5vZGUgJiYgKCFkb20uX2NvbXBvbmVudCB8fCBjb21wb25lbnRSb290KSkge1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGlmICovIC8qIEJyb3dzZXIgcXVpcmsgdGhhdCBjYW4ndCBiZSBjb3ZlcmVkOiBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC9jb21taXQvZmQ0ZjIxZjVjNDVkZmQ3NTE1MWJkMjdiNGMyMTdkODAwM2FhNWViOSAqL1xuXHRcdFx0aWYgKGRvbS5ub2RlVmFsdWUgIT0gdm5vZGUpIHtcblx0XHRcdFx0ZG9tLm5vZGVWYWx1ZSA9IHZub2RlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpdCB3YXNuJ3QgYSBUZXh0IG5vZGU6IHJlcGxhY2UgaXQgd2l0aCBvbmUgYW5kIHJlY3ljbGUgdGhlIG9sZCBFbGVtZW50XG5cdFx0XHRvdXQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2bm9kZSk7XG5cdFx0XHRpZiAoZG9tKSB7XG5cdFx0XHRcdGlmIChkb20ucGFyZW50Tm9kZSkgZG9tLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG91dCwgZG9tKTtcblx0XHRcdFx0cmVjb2xsZWN0Tm9kZVRyZWUoZG9tLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvdXRbJ19fcHJlYWN0YXR0cl8nXSA9IHRydWU7XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0Ly8gSWYgdGhlIFZOb2RlIHJlcHJlc2VudHMgYSBDb21wb25lbnQsIHBlcmZvcm0gYSBjb21wb25lbnQgZGlmZjpcblx0dmFyIHZub2RlTmFtZSA9IHZub2RlLm5vZGVOYW1lO1xuXHRpZiAodHlwZW9mIHZub2RlTmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBidWlsZENvbXBvbmVudEZyb21WTm9kZShkb20sIHZub2RlLCBjb250ZXh0LCBtb3VudEFsbCk7XG5cdH1cblxuXHQvLyBUcmFja3MgZW50ZXJpbmcgYW5kIGV4aXRpbmcgU1ZHIG5hbWVzcGFjZSB3aGVuIGRlc2NlbmRpbmcgdGhyb3VnaCB0aGUgdHJlZS5cblx0aXNTdmdNb2RlID0gdm5vZGVOYW1lID09PSAnc3ZnJyA/IHRydWUgOiB2bm9kZU5hbWUgPT09ICdmb3JlaWduT2JqZWN0JyA/IGZhbHNlIDogaXNTdmdNb2RlO1xuXG5cdC8vIElmIHRoZXJlJ3Mgbm8gZXhpc3RpbmcgZWxlbWVudCBvciBpdCdzIHRoZSB3cm9uZyB0eXBlLCBjcmVhdGUgYSBuZXcgb25lOlxuXHR2bm9kZU5hbWUgPSBTdHJpbmcodm5vZGVOYW1lKTtcblx0aWYgKCFkb20gfHwgIWlzTmFtZWROb2RlKGRvbSwgdm5vZGVOYW1lKSkge1xuXHRcdG91dCA9IGNyZWF0ZU5vZGUodm5vZGVOYW1lLCBpc1N2Z01vZGUpO1xuXG5cdFx0aWYgKGRvbSkge1xuXHRcdFx0Ly8gbW92ZSBjaGlsZHJlbiBpbnRvIHRoZSByZXBsYWNlbWVudCBub2RlXG5cdFx0XHR3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcblx0XHRcdFx0b3V0LmFwcGVuZENoaWxkKGRvbS5maXJzdENoaWxkKTtcblx0XHRcdH0gLy8gaWYgdGhlIHByZXZpb3VzIEVsZW1lbnQgd2FzIG1vdW50ZWQgaW50byB0aGUgRE9NLCByZXBsYWNlIGl0IGlubGluZVxuXHRcdFx0aWYgKGRvbS5wYXJlbnROb2RlKSBkb20ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQob3V0LCBkb20pO1xuXG5cdFx0XHQvLyByZWN5Y2xlIHRoZSBvbGQgZWxlbWVudCAoc2tpcHMgbm9uLUVsZW1lbnQgbm9kZSB0eXBlcylcblx0XHRcdHJlY29sbGVjdE5vZGVUcmVlKGRvbSwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIGZjID0gb3V0LmZpcnN0Q2hpbGQsXG5cdCAgICBwcm9wcyA9IG91dFsnX19wcmVhY3RhdHRyXyddLFxuXHQgICAgdmNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG5cblx0aWYgKHByb3BzID09IG51bGwpIHtcblx0XHRwcm9wcyA9IG91dFsnX19wcmVhY3RhdHRyXyddID0ge307XG5cdFx0Zm9yICh2YXIgYSA9IG91dC5hdHRyaWJ1dGVzLCBpID0gYS5sZW5ndGg7IGktLTspIHtcblx0XHRcdHByb3BzW2FbaV0ubmFtZV0gPSBhW2ldLnZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdC8vIE9wdGltaXphdGlvbjogZmFzdC1wYXRoIGZvciBlbGVtZW50cyBjb250YWluaW5nIGEgc2luZ2xlIFRleHROb2RlOlxuXHRpZiAoIWh5ZHJhdGluZyAmJiB2Y2hpbGRyZW4gJiYgdmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgdmNoaWxkcmVuWzBdID09PSAnc3RyaW5nJyAmJiBmYyAhPSBudWxsICYmIGZjLnNwbGl0VGV4dCAhPT0gdW5kZWZpbmVkICYmIGZjLm5leHRTaWJsaW5nID09IG51bGwpIHtcblx0XHRpZiAoZmMubm9kZVZhbHVlICE9IHZjaGlsZHJlblswXSkge1xuXHRcdFx0ZmMubm9kZVZhbHVlID0gdmNoaWxkcmVuWzBdO1xuXHRcdH1cblx0fVxuXHQvLyBvdGhlcndpc2UsIGlmIHRoZXJlIGFyZSBleGlzdGluZyBvciBuZXcgY2hpbGRyZW4sIGRpZmYgdGhlbTpcblx0ZWxzZSBpZiAodmNoaWxkcmVuICYmIHZjaGlsZHJlbi5sZW5ndGggfHwgZmMgIT0gbnVsbCkge1xuXHRcdFx0aW5uZXJEaWZmTm9kZShvdXQsIHZjaGlsZHJlbiwgY29udGV4dCwgbW91bnRBbGwsIGh5ZHJhdGluZyB8fCBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPSBudWxsKTtcblx0XHR9XG5cblx0Ly8gQXBwbHkgYXR0cmlidXRlcy9wcm9wcyBmcm9tIFZOb2RlIHRvIHRoZSBET00gRWxlbWVudDpcblx0ZGlmZkF0dHJpYnV0ZXMob3V0LCB2bm9kZS5hdHRyaWJ1dGVzLCBwcm9wcyk7XG5cblx0Ly8gcmVzdG9yZSBwcmV2aW91cyBTVkcgbW9kZTogKGluIGNhc2Ugd2UncmUgZXhpdGluZyBhbiBTVkcgbmFtZXNwYWNlKVxuXHRpc1N2Z01vZGUgPSBwcmV2U3ZnTW9kZTtcblxuXHRyZXR1cm4gb3V0O1xufVxuXG4vKiogQXBwbHkgY2hpbGQgYW5kIGF0dHJpYnV0ZSBjaGFuZ2VzIGJldHdlZW4gYSBWTm9kZSBhbmQgYSBET00gTm9kZSB0byB0aGUgRE9NLlxuICpcdEBwYXJhbSB7RWxlbWVudH0gZG9tXHRcdFx0RWxlbWVudCB3aG9zZSBjaGlsZHJlbiBzaG91bGQgYmUgY29tcGFyZWQgJiBtdXRhdGVkXG4gKlx0QHBhcmFtIHtBcnJheX0gdmNoaWxkcmVuXHRcdEFycmF5IG9mIFZOb2RlcyB0byBjb21wYXJlIHRvIGBkb20uY2hpbGROb2Rlc2BcbiAqXHRAcGFyYW0ge09iamVjdH0gY29udGV4dFx0XHRcdEltcGxpY2l0bHkgZGVzY2VuZGFudCBjb250ZXh0IG9iamVjdCAoZnJvbSBtb3N0IHJlY2VudCBgZ2V0Q2hpbGRDb250ZXh0KClgKVxuICpcdEBwYXJhbSB7Qm9vbGVhbn0gbW91bnRBbGxcbiAqXHRAcGFyYW0ge0Jvb2xlYW59IGlzSHlkcmF0aW5nXHRJZiBgdHJ1ZWAsIGNvbnN1bWVzIGV4dGVybmFsbHkgY3JlYXRlZCBlbGVtZW50cyBzaW1pbGFyIHRvIGh5ZHJhdGlvblxuICovXG5mdW5jdGlvbiBpbm5lckRpZmZOb2RlKGRvbSwgdmNoaWxkcmVuLCBjb250ZXh0LCBtb3VudEFsbCwgaXNIeWRyYXRpbmcpIHtcblx0dmFyIG9yaWdpbmFsQ2hpbGRyZW4gPSBkb20uY2hpbGROb2Rlcyxcblx0ICAgIGNoaWxkcmVuID0gW10sXG5cdCAgICBrZXllZCA9IHt9LFxuXHQgICAga2V5ZWRMZW4gPSAwLFxuXHQgICAgbWluID0gMCxcblx0ICAgIGxlbiA9IG9yaWdpbmFsQ2hpbGRyZW4ubGVuZ3RoLFxuXHQgICAgY2hpbGRyZW5MZW4gPSAwLFxuXHQgICAgdmxlbiA9IHZjaGlsZHJlbiA/IHZjaGlsZHJlbi5sZW5ndGggOiAwLFxuXHQgICAgaixcblx0ICAgIGMsXG5cdCAgICBmLFxuXHQgICAgdmNoaWxkLFxuXHQgICAgY2hpbGQ7XG5cblx0Ly8gQnVpbGQgdXAgYSBtYXAgb2Yga2V5ZWQgY2hpbGRyZW4gYW5kIGFuIEFycmF5IG9mIHVua2V5ZWQgY2hpbGRyZW46XG5cdGlmIChsZW4gIT09IDApIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHR2YXIgX2NoaWxkID0gb3JpZ2luYWxDaGlsZHJlbltpXSxcblx0XHRcdCAgICBwcm9wcyA9IF9jaGlsZFsnX19wcmVhY3RhdHRyXyddLFxuXHRcdFx0ICAgIGtleSA9IHZsZW4gJiYgcHJvcHMgPyBfY2hpbGQuX2NvbXBvbmVudCA/IF9jaGlsZC5fY29tcG9uZW50Ll9fa2V5IDogcHJvcHMua2V5IDogbnVsbDtcblx0XHRcdGlmIChrZXkgIT0gbnVsbCkge1xuXHRcdFx0XHRrZXllZExlbisrO1xuXHRcdFx0XHRrZXllZFtrZXldID0gX2NoaWxkO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wcyB8fCAoX2NoaWxkLnNwbGl0VGV4dCAhPT0gdW5kZWZpbmVkID8gaXNIeWRyYXRpbmcgPyBfY2hpbGQubm9kZVZhbHVlLnRyaW0oKSA6IHRydWUgOiBpc0h5ZHJhdGluZykpIHtcblx0XHRcdFx0Y2hpbGRyZW5bY2hpbGRyZW5MZW4rK10gPSBfY2hpbGQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZsZW4gIT09IDApIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZsZW47IGkrKykge1xuXHRcdFx0dmNoaWxkID0gdmNoaWxkcmVuW2ldO1xuXHRcdFx0Y2hpbGQgPSBudWxsO1xuXG5cdFx0XHQvLyBhdHRlbXB0IHRvIGZpbmQgYSBub2RlIGJhc2VkIG9uIGtleSBtYXRjaGluZ1xuXHRcdFx0dmFyIGtleSA9IHZjaGlsZC5rZXk7XG5cdFx0XHRpZiAoa2V5ICE9IG51bGwpIHtcblx0XHRcdFx0aWYgKGtleWVkTGVuICYmIGtleWVkW2tleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNoaWxkID0ga2V5ZWRba2V5XTtcblx0XHRcdFx0XHRrZXllZFtrZXldID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGtleWVkTGVuLS07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIGF0dGVtcHQgdG8gcGx1Y2sgYSBub2RlIG9mIHRoZSBzYW1lIHR5cGUgZnJvbSB0aGUgZXhpc3RpbmcgY2hpbGRyZW5cblx0XHRcdGVsc2UgaWYgKCFjaGlsZCAmJiBtaW4gPCBjaGlsZHJlbkxlbikge1xuXHRcdFx0XHRcdGZvciAoaiA9IG1pbjsgaiA8IGNoaWxkcmVuTGVuOyBqKyspIHtcblx0XHRcdFx0XHRcdGlmIChjaGlsZHJlbltqXSAhPT0gdW5kZWZpbmVkICYmIGlzU2FtZU5vZGVUeXBlKGMgPSBjaGlsZHJlbltqXSwgdmNoaWxkLCBpc0h5ZHJhdGluZykpIHtcblx0XHRcdFx0XHRcdFx0Y2hpbGQgPSBjO1xuXHRcdFx0XHRcdFx0XHRjaGlsZHJlbltqXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0aWYgKGogPT09IGNoaWxkcmVuTGVuIC0gMSkgY2hpbGRyZW5MZW4tLTtcblx0XHRcdFx0XHRcdFx0aWYgKGogPT09IG1pbikgbWluKys7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBtb3JwaCB0aGUgbWF0Y2hlZC9mb3VuZC9jcmVhdGVkIERPTSBjaGlsZCB0byBtYXRjaCB2Y2hpbGQgKGRlZXApXG5cdFx0XHRjaGlsZCA9IGlkaWZmKGNoaWxkLCB2Y2hpbGQsIGNvbnRleHQsIG1vdW50QWxsKTtcblxuXHRcdFx0ZiA9IG9yaWdpbmFsQ2hpbGRyZW5baV07XG5cdFx0XHRpZiAoY2hpbGQgJiYgY2hpbGQgIT09IGRvbSAmJiBjaGlsZCAhPT0gZikge1xuXHRcdFx0XHRpZiAoZiA9PSBudWxsKSB7XG5cdFx0XHRcdFx0ZG9tLmFwcGVuZENoaWxkKGNoaWxkKTtcblx0XHRcdFx0fSBlbHNlIGlmIChjaGlsZCA9PT0gZi5uZXh0U2libGluZykge1xuXHRcdFx0XHRcdHJlbW92ZU5vZGUoZik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZG9tLmluc2VydEJlZm9yZShjaGlsZCwgZik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyByZW1vdmUgdW51c2VkIGtleWVkIGNoaWxkcmVuOlxuXHRpZiAoa2V5ZWRMZW4pIHtcblx0XHRmb3IgKHZhciBpIGluIGtleWVkKSB7XG5cdFx0XHRpZiAoa2V5ZWRbaV0gIT09IHVuZGVmaW5lZCkgcmVjb2xsZWN0Tm9kZVRyZWUoa2V5ZWRbaV0sIGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvLyByZW1vdmUgb3JwaGFuZWQgdW5rZXllZCBjaGlsZHJlbjpcblx0d2hpbGUgKG1pbiA8PSBjaGlsZHJlbkxlbikge1xuXHRcdGlmICgoY2hpbGQgPSBjaGlsZHJlbltjaGlsZHJlbkxlbi0tXSkgIT09IHVuZGVmaW5lZCkgcmVjb2xsZWN0Tm9kZVRyZWUoY2hpbGQsIGZhbHNlKTtcblx0fVxufVxuXG4vKiogUmVjdXJzaXZlbHkgcmVjeWNsZSAob3IganVzdCB1bm1vdW50KSBhIG5vZGUgYW5kIGl0cyBkZXNjZW5kYW50cy5cbiAqXHRAcGFyYW0ge05vZGV9IG5vZGVcdFx0XHRcdFx0XHRET00gbm9kZSB0byBzdGFydCB1bm1vdW50L3JlbW92YWwgZnJvbVxuICpcdEBwYXJhbSB7Qm9vbGVhbn0gW3VubW91bnRPbmx5PWZhbHNlXVx0SWYgYHRydWVgLCBvbmx5IHRyaWdnZXJzIHVubW91bnQgbGlmZWN5Y2xlLCBza2lwcyByZW1vdmFsXG4gKi9cbmZ1bmN0aW9uIHJlY29sbGVjdE5vZGVUcmVlKG5vZGUsIHVubW91bnRPbmx5KSB7XG5cdHZhciBjb21wb25lbnQgPSBub2RlLl9jb21wb25lbnQ7XG5cdGlmIChjb21wb25lbnQpIHtcblx0XHQvLyBpZiBub2RlIGlzIG93bmVkIGJ5IGEgQ29tcG9uZW50LCB1bm1vdW50IHRoYXQgY29tcG9uZW50IChlbmRzIHVwIHJlY3Vyc2luZyBiYWNrIGhlcmUpXG5cdFx0dW5tb3VudENvbXBvbmVudChjb21wb25lbnQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIElmIHRoZSBub2RlJ3MgVk5vZGUgaGFkIGEgcmVmIGZ1bmN0aW9uLCBpbnZva2UgaXQgd2l0aCBudWxsIGhlcmUuXG5cdFx0Ly8gKHRoaXMgaXMgcGFydCBvZiB0aGUgUmVhY3Qgc3BlYywgYW5kIHNtYXJ0IGZvciB1bnNldHRpbmcgcmVmZXJlbmNlcylcblx0XHRpZiAobm9kZVsnX19wcmVhY3RhdHRyXyddICE9IG51bGwgJiYgbm9kZVsnX19wcmVhY3RhdHRyXyddLnJlZikgbm9kZVsnX19wcmVhY3RhdHRyXyddLnJlZihudWxsKTtcblxuXHRcdGlmICh1bm1vdW50T25seSA9PT0gZmFsc2UgfHwgbm9kZVsnX19wcmVhY3RhdHRyXyddID09IG51bGwpIHtcblx0XHRcdHJlbW92ZU5vZGUobm9kZSk7XG5cdFx0fVxuXG5cdFx0cmVtb3ZlQ2hpbGRyZW4obm9kZSk7XG5cdH1cbn1cblxuLyoqIFJlY29sbGVjdC91bm1vdW50IGFsbCBjaGlsZHJlbi5cbiAqXHQtIHdlIHVzZSAubGFzdENoaWxkIGhlcmUgYmVjYXVzZSBpdCBjYXVzZXMgbGVzcyByZWZsb3cgdGhhbiAuZmlyc3RDaGlsZFxuICpcdC0gaXQncyBhbHNvIGNoZWFwZXIgdGhhbiBhY2Nlc3NpbmcgdGhlIC5jaGlsZE5vZGVzIExpdmUgTm9kZUxpc3RcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2hpbGRyZW4obm9kZSkge1xuXHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdHdoaWxlIChub2RlKSB7XG5cdFx0dmFyIG5leHQgPSBub2RlLnByZXZpb3VzU2libGluZztcblx0XHRyZWNvbGxlY3ROb2RlVHJlZShub2RlLCB0cnVlKTtcblx0XHRub2RlID0gbmV4dDtcblx0fVxufVxuXG4vKiogQXBwbHkgZGlmZmVyZW5jZXMgaW4gYXR0cmlidXRlcyBmcm9tIGEgVk5vZGUgdG8gdGhlIGdpdmVuIERPTSBFbGVtZW50LlxuICpcdEBwYXJhbSB7RWxlbWVudH0gZG9tXHRcdEVsZW1lbnQgd2l0aCBhdHRyaWJ1dGVzIHRvIGRpZmYgYGF0dHJzYCBhZ2FpbnN0XG4gKlx0QHBhcmFtIHtPYmplY3R9IGF0dHJzXHRcdFRoZSBkZXNpcmVkIGVuZC1zdGF0ZSBrZXktdmFsdWUgYXR0cmlidXRlIHBhaXJzXG4gKlx0QHBhcmFtIHtPYmplY3R9IG9sZFx0XHRcdEN1cnJlbnQvcHJldmlvdXMgYXR0cmlidXRlcyAoZnJvbSBwcmV2aW91cyBWTm9kZSBvciBlbGVtZW50J3MgcHJvcCBjYWNoZSlcbiAqL1xuZnVuY3Rpb24gZGlmZkF0dHJpYnV0ZXMoZG9tLCBhdHRycywgb2xkKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIHJlbW92ZSBhdHRyaWJ1dGVzIG5vIGxvbmdlciBwcmVzZW50IG9uIHRoZSB2bm9kZSBieSBzZXR0aW5nIHRoZW0gdG8gdW5kZWZpbmVkXG5cdGZvciAobmFtZSBpbiBvbGQpIHtcblx0XHRpZiAoIShhdHRycyAmJiBhdHRyc1tuYW1lXSAhPSBudWxsKSAmJiBvbGRbbmFtZV0gIT0gbnVsbCkge1xuXHRcdFx0c2V0QWNjZXNzb3IoZG9tLCBuYW1lLCBvbGRbbmFtZV0sIG9sZFtuYW1lXSA9IHVuZGVmaW5lZCwgaXNTdmdNb2RlKTtcblx0XHR9XG5cdH1cblxuXHQvLyBhZGQgbmV3ICYgdXBkYXRlIGNoYW5nZWQgYXR0cmlidXRlc1xuXHRmb3IgKG5hbWUgaW4gYXR0cnMpIHtcblx0XHRpZiAobmFtZSAhPT0gJ2NoaWxkcmVuJyAmJiBuYW1lICE9PSAnaW5uZXJIVE1MJyAmJiAoIShuYW1lIGluIG9sZCkgfHwgYXR0cnNbbmFtZV0gIT09IChuYW1lID09PSAndmFsdWUnIHx8IG5hbWUgPT09ICdjaGVja2VkJyA/IGRvbVtuYW1lXSA6IG9sZFtuYW1lXSkpKSB7XG5cdFx0XHRzZXRBY2Nlc3Nvcihkb20sIG5hbWUsIG9sZFtuYW1lXSwgb2xkW25hbWVdID0gYXR0cnNbbmFtZV0sIGlzU3ZnTW9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKiBSZXRhaW5zIGEgcG9vbCBvZiBDb21wb25lbnRzIGZvciByZS11c2UsIGtleWVkIG9uIGNvbXBvbmVudCBuYW1lLlxuICpcdE5vdGU6IHNpbmNlIGNvbXBvbmVudCBuYW1lcyBhcmUgbm90IHVuaXF1ZSBvciBldmVuIG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSwgdGhlc2UgYXJlIHByaW1hcmlseSBhIGZvcm0gb2Ygc2hhcmRpbmcuXG4gKlx0QHByaXZhdGVcbiAqL1xudmFyIGNvbXBvbmVudHMgPSB7fTtcblxuLyoqIFJlY2xhaW0gYSBjb21wb25lbnQgZm9yIGxhdGVyIHJlLXVzZSBieSB0aGUgcmVjeWNsZXIuICovXG5mdW5jdGlvbiBjb2xsZWN0Q29tcG9uZW50KGNvbXBvbmVudCkge1xuXHR2YXIgbmFtZSA9IGNvbXBvbmVudC5jb25zdHJ1Y3Rvci5uYW1lO1xuXHQoY29tcG9uZW50c1tuYW1lXSB8fCAoY29tcG9uZW50c1tuYW1lXSA9IFtdKSkucHVzaChjb21wb25lbnQpO1xufVxuXG4vKiogQ3JlYXRlIGEgY29tcG9uZW50LiBOb3JtYWxpemVzIGRpZmZlcmVuY2VzIGJldHdlZW4gUEZDJ3MgYW5kIGNsYXNzZnVsIENvbXBvbmVudHMuICovXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnQoQ3RvciwgcHJvcHMsIGNvbnRleHQpIHtcblx0dmFyIGxpc3QgPSBjb21wb25lbnRzW0N0b3IubmFtZV0sXG5cdCAgICBpbnN0O1xuXG5cdGlmIChDdG9yLnByb3RvdHlwZSAmJiBDdG9yLnByb3RvdHlwZS5yZW5kZXIpIHtcblx0XHRpbnN0ID0gbmV3IEN0b3IocHJvcHMsIGNvbnRleHQpO1xuXHRcdENvbXBvbmVudC5jYWxsKGluc3QsIHByb3BzLCBjb250ZXh0KTtcblx0fSBlbHNlIHtcblx0XHRpbnN0ID0gbmV3IENvbXBvbmVudChwcm9wcywgY29udGV4dCk7XG5cdFx0aW5zdC5jb25zdHJ1Y3RvciA9IEN0b3I7XG5cdFx0aW5zdC5yZW5kZXIgPSBkb1JlbmRlcjtcblx0fVxuXG5cdGlmIChsaXN0KSB7XG5cdFx0Zm9yICh2YXIgaSA9IGxpc3QubGVuZ3RoOyBpLS07KSB7XG5cdFx0XHRpZiAobGlzdFtpXS5jb25zdHJ1Y3RvciA9PT0gQ3Rvcikge1xuXHRcdFx0XHRpbnN0Lm5leHRCYXNlID0gbGlzdFtpXS5uZXh0QmFzZTtcblx0XHRcdFx0bGlzdC5zcGxpY2UoaSwgMSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW5zdDtcbn1cblxuLyoqIFRoZSBgLnJlbmRlcigpYCBtZXRob2QgZm9yIGEgUEZDIGJhY2tpbmcgaW5zdGFuY2UuICovXG5mdW5jdGlvbiBkb1JlbmRlcihwcm9wcywgc3RhdGUsIGNvbnRleHQpIHtcblx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IocHJvcHMsIGNvbnRleHQpO1xufVxuXG4vKiogU2V0IGEgY29tcG9uZW50J3MgYHByb3BzYCAoZ2VuZXJhbGx5IGRlcml2ZWQgZnJvbSBKU1ggYXR0cmlidXRlcykuXG4gKlx0QHBhcmFtIHtPYmplY3R9IHByb3BzXG4gKlx0QHBhcmFtIHtPYmplY3R9IFtvcHRzXVxuICpcdEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMucmVuZGVyU3luYz1mYWxzZV1cdElmIGB0cnVlYCBhbmQge0BsaW5rIG9wdGlvbnMuc3luY0NvbXBvbmVudFVwZGF0ZXN9IGlzIGB0cnVlYCwgdHJpZ2dlcnMgc3luY2hyb25vdXMgcmVuZGVyaW5nLlxuICpcdEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMucmVuZGVyPXRydWVdXHRcdFx0SWYgYGZhbHNlYCwgbm8gcmVuZGVyIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICovXG5mdW5jdGlvbiBzZXRDb21wb25lbnRQcm9wcyhjb21wb25lbnQsIHByb3BzLCBvcHRzLCBjb250ZXh0LCBtb3VudEFsbCkge1xuXHRpZiAoY29tcG9uZW50Ll9kaXNhYmxlKSByZXR1cm47XG5cdGNvbXBvbmVudC5fZGlzYWJsZSA9IHRydWU7XG5cblx0aWYgKGNvbXBvbmVudC5fX3JlZiA9IHByb3BzLnJlZikgZGVsZXRlIHByb3BzLnJlZjtcblx0aWYgKGNvbXBvbmVudC5fX2tleSA9IHByb3BzLmtleSkgZGVsZXRlIHByb3BzLmtleTtcblxuXHRpZiAoIWNvbXBvbmVudC5iYXNlIHx8IG1vdW50QWxsKSB7XG5cdFx0aWYgKGNvbXBvbmVudC5jb21wb25lbnRXaWxsTW91bnQpIGNvbXBvbmVudC5jb21wb25lbnRXaWxsTW91bnQoKTtcblx0fSBlbHNlIGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcykge1xuXHRcdGNvbXBvbmVudC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHByb3BzLCBjb250ZXh0KTtcblx0fVxuXG5cdGlmIChjb250ZXh0ICYmIGNvbnRleHQgIT09IGNvbXBvbmVudC5jb250ZXh0KSB7XG5cdFx0aWYgKCFjb21wb25lbnQucHJldkNvbnRleHQpIGNvbXBvbmVudC5wcmV2Q29udGV4dCA9IGNvbXBvbmVudC5jb250ZXh0O1xuXHRcdGNvbXBvbmVudC5jb250ZXh0ID0gY29udGV4dDtcblx0fVxuXG5cdGlmICghY29tcG9uZW50LnByZXZQcm9wcykgY29tcG9uZW50LnByZXZQcm9wcyA9IGNvbXBvbmVudC5wcm9wcztcblx0Y29tcG9uZW50LnByb3BzID0gcHJvcHM7XG5cblx0Y29tcG9uZW50Ll9kaXNhYmxlID0gZmFsc2U7XG5cblx0aWYgKG9wdHMgIT09IDApIHtcblx0XHRpZiAob3B0cyA9PT0gMSB8fCBvcHRpb25zLnN5bmNDb21wb25lbnRVcGRhdGVzICE9PSBmYWxzZSB8fCAhY29tcG9uZW50LmJhc2UpIHtcblx0XHRcdHJlbmRlckNvbXBvbmVudChjb21wb25lbnQsIDEsIG1vdW50QWxsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZW5xdWV1ZVJlbmRlcihjb21wb25lbnQpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChjb21wb25lbnQuX19yZWYpIGNvbXBvbmVudC5fX3JlZihjb21wb25lbnQpO1xufVxuXG4vKiogUmVuZGVyIGEgQ29tcG9uZW50LCB0cmlnZ2VyaW5nIG5lY2Vzc2FyeSBsaWZlY3ljbGUgZXZlbnRzIGFuZCB0YWtpbmcgSGlnaC1PcmRlciBDb21wb25lbnRzIGludG8gYWNjb3VudC5cbiAqXHRAcGFyYW0ge0NvbXBvbmVudH0gY29tcG9uZW50XG4gKlx0QHBhcmFtIHtPYmplY3R9IFtvcHRzXVxuICpcdEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuYnVpbGQ9ZmFsc2VdXHRcdElmIGB0cnVlYCwgY29tcG9uZW50IHdpbGwgYnVpbGQgYW5kIHN0b3JlIGEgRE9NIG5vZGUgaWYgbm90IGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIG9uZS5cbiAqXHRAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZW5kZXJDb21wb25lbnQoY29tcG9uZW50LCBvcHRzLCBtb3VudEFsbCwgaXNDaGlsZCkge1xuXHRpZiAoY29tcG9uZW50Ll9kaXNhYmxlKSByZXR1cm47XG5cblx0dmFyIHByb3BzID0gY29tcG9uZW50LnByb3BzLFxuXHQgICAgc3RhdGUgPSBjb21wb25lbnQuc3RhdGUsXG5cdCAgICBjb250ZXh0ID0gY29tcG9uZW50LmNvbnRleHQsXG5cdCAgICBwcmV2aW91c1Byb3BzID0gY29tcG9uZW50LnByZXZQcm9wcyB8fCBwcm9wcyxcblx0ICAgIHByZXZpb3VzU3RhdGUgPSBjb21wb25lbnQucHJldlN0YXRlIHx8IHN0YXRlLFxuXHQgICAgcHJldmlvdXNDb250ZXh0ID0gY29tcG9uZW50LnByZXZDb250ZXh0IHx8IGNvbnRleHQsXG5cdCAgICBpc1VwZGF0ZSA9IGNvbXBvbmVudC5iYXNlLFxuXHQgICAgbmV4dEJhc2UgPSBjb21wb25lbnQubmV4dEJhc2UsXG5cdCAgICBpbml0aWFsQmFzZSA9IGlzVXBkYXRlIHx8IG5leHRCYXNlLFxuXHQgICAgaW5pdGlhbENoaWxkQ29tcG9uZW50ID0gY29tcG9uZW50Ll9jb21wb25lbnQsXG5cdCAgICBza2lwID0gZmFsc2UsXG5cdCAgICByZW5kZXJlZCxcblx0ICAgIGluc3QsXG5cdCAgICBjYmFzZTtcblxuXHQvLyBpZiB1cGRhdGluZ1xuXHRpZiAoaXNVcGRhdGUpIHtcblx0XHRjb21wb25lbnQucHJvcHMgPSBwcmV2aW91c1Byb3BzO1xuXHRcdGNvbXBvbmVudC5zdGF0ZSA9IHByZXZpb3VzU3RhdGU7XG5cdFx0Y29tcG9uZW50LmNvbnRleHQgPSBwcmV2aW91c0NvbnRleHQ7XG5cdFx0aWYgKG9wdHMgIT09IDIgJiYgY29tcG9uZW50LnNob3VsZENvbXBvbmVudFVwZGF0ZSAmJiBjb21wb25lbnQuc2hvdWxkQ29tcG9uZW50VXBkYXRlKHByb3BzLCBzdGF0ZSwgY29udGV4dCkgPT09IGZhbHNlKSB7XG5cdFx0XHRza2lwID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGNvbXBvbmVudC5jb21wb25lbnRXaWxsVXBkYXRlKSB7XG5cdFx0XHRjb21wb25lbnQuY29tcG9uZW50V2lsbFVwZGF0ZShwcm9wcywgc3RhdGUsIGNvbnRleHQpO1xuXHRcdH1cblx0XHRjb21wb25lbnQucHJvcHMgPSBwcm9wcztcblx0XHRjb21wb25lbnQuc3RhdGUgPSBzdGF0ZTtcblx0XHRjb21wb25lbnQuY29udGV4dCA9IGNvbnRleHQ7XG5cdH1cblxuXHRjb21wb25lbnQucHJldlByb3BzID0gY29tcG9uZW50LnByZXZTdGF0ZSA9IGNvbXBvbmVudC5wcmV2Q29udGV4dCA9IGNvbXBvbmVudC5uZXh0QmFzZSA9IG51bGw7XG5cdGNvbXBvbmVudC5fZGlydHkgPSBmYWxzZTtcblxuXHRpZiAoIXNraXApIHtcblx0XHRyZW5kZXJlZCA9IGNvbXBvbmVudC5yZW5kZXIocHJvcHMsIHN0YXRlLCBjb250ZXh0KTtcblxuXHRcdC8vIGNvbnRleHQgdG8gcGFzcyB0byB0aGUgY2hpbGQsIGNhbiBiZSB1cGRhdGVkIHZpYSAoZ3JhbmQtKXBhcmVudCBjb21wb25lbnRcblx0XHRpZiAoY29tcG9uZW50LmdldENoaWxkQ29udGV4dCkge1xuXHRcdFx0Y29udGV4dCA9IGV4dGVuZChleHRlbmQoe30sIGNvbnRleHQpLCBjb21wb25lbnQuZ2V0Q2hpbGRDb250ZXh0KCkpO1xuXHRcdH1cblxuXHRcdHZhciBjaGlsZENvbXBvbmVudCA9IHJlbmRlcmVkICYmIHJlbmRlcmVkLm5vZGVOYW1lLFxuXHRcdCAgICB0b1VubW91bnQsXG5cdFx0ICAgIGJhc2U7XG5cblx0XHRpZiAodHlwZW9mIGNoaWxkQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvLyBzZXQgdXAgaGlnaCBvcmRlciBjb21wb25lbnQgbGlua1xuXG5cdFx0XHR2YXIgY2hpbGRQcm9wcyA9IGdldE5vZGVQcm9wcyhyZW5kZXJlZCk7XG5cdFx0XHRpbnN0ID0gaW5pdGlhbENoaWxkQ29tcG9uZW50O1xuXG5cdFx0XHRpZiAoaW5zdCAmJiBpbnN0LmNvbnN0cnVjdG9yID09PSBjaGlsZENvbXBvbmVudCAmJiBjaGlsZFByb3BzLmtleSA9PSBpbnN0Ll9fa2V5KSB7XG5cdFx0XHRcdHNldENvbXBvbmVudFByb3BzKGluc3QsIGNoaWxkUHJvcHMsIDEsIGNvbnRleHQsIGZhbHNlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRvVW5tb3VudCA9IGluc3Q7XG5cblx0XHRcdFx0Y29tcG9uZW50Ll9jb21wb25lbnQgPSBpbnN0ID0gY3JlYXRlQ29tcG9uZW50KGNoaWxkQ29tcG9uZW50LCBjaGlsZFByb3BzLCBjb250ZXh0KTtcblx0XHRcdFx0aW5zdC5uZXh0QmFzZSA9IGluc3QubmV4dEJhc2UgfHwgbmV4dEJhc2U7XG5cdFx0XHRcdGluc3QuX3BhcmVudENvbXBvbmVudCA9IGNvbXBvbmVudDtcblx0XHRcdFx0c2V0Q29tcG9uZW50UHJvcHMoaW5zdCwgY2hpbGRQcm9wcywgMCwgY29udGV4dCwgZmFsc2UpO1xuXHRcdFx0XHRyZW5kZXJDb21wb25lbnQoaW5zdCwgMSwgbW91bnRBbGwsIHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRiYXNlID0gaW5zdC5iYXNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjYmFzZSA9IGluaXRpYWxCYXNlO1xuXG5cdFx0XHQvLyBkZXN0cm95IGhpZ2ggb3JkZXIgY29tcG9uZW50IGxpbmtcblx0XHRcdHRvVW5tb3VudCA9IGluaXRpYWxDaGlsZENvbXBvbmVudDtcblx0XHRcdGlmICh0b1VubW91bnQpIHtcblx0XHRcdFx0Y2Jhc2UgPSBjb21wb25lbnQuX2NvbXBvbmVudCA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbml0aWFsQmFzZSB8fCBvcHRzID09PSAxKSB7XG5cdFx0XHRcdGlmIChjYmFzZSkgY2Jhc2UuX2NvbXBvbmVudCA9IG51bGw7XG5cdFx0XHRcdGJhc2UgPSBkaWZmKGNiYXNlLCByZW5kZXJlZCwgY29udGV4dCwgbW91bnRBbGwgfHwgIWlzVXBkYXRlLCBpbml0aWFsQmFzZSAmJiBpbml0aWFsQmFzZS5wYXJlbnROb2RlLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaW5pdGlhbEJhc2UgJiYgYmFzZSAhPT0gaW5pdGlhbEJhc2UgJiYgaW5zdCAhPT0gaW5pdGlhbENoaWxkQ29tcG9uZW50KSB7XG5cdFx0XHR2YXIgYmFzZVBhcmVudCA9IGluaXRpYWxCYXNlLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoYmFzZVBhcmVudCAmJiBiYXNlICE9PSBiYXNlUGFyZW50KSB7XG5cdFx0XHRcdGJhc2VQYXJlbnQucmVwbGFjZUNoaWxkKGJhc2UsIGluaXRpYWxCYXNlKTtcblxuXHRcdFx0XHRpZiAoIXRvVW5tb3VudCkge1xuXHRcdFx0XHRcdGluaXRpYWxCYXNlLl9jb21wb25lbnQgPSBudWxsO1xuXHRcdFx0XHRcdHJlY29sbGVjdE5vZGVUcmVlKGluaXRpYWxCYXNlLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodG9Vbm1vdW50KSB7XG5cdFx0XHR1bm1vdW50Q29tcG9uZW50KHRvVW5tb3VudCk7XG5cdFx0fVxuXG5cdFx0Y29tcG9uZW50LmJhc2UgPSBiYXNlO1xuXHRcdGlmIChiYXNlICYmICFpc0NoaWxkKSB7XG5cdFx0XHR2YXIgY29tcG9uZW50UmVmID0gY29tcG9uZW50LFxuXHRcdFx0ICAgIHQgPSBjb21wb25lbnQ7XG5cdFx0XHR3aGlsZSAodCA9IHQuX3BhcmVudENvbXBvbmVudCkge1xuXHRcdFx0XHQoY29tcG9uZW50UmVmID0gdCkuYmFzZSA9IGJhc2U7XG5cdFx0XHR9XG5cdFx0XHRiYXNlLl9jb21wb25lbnQgPSBjb21wb25lbnRSZWY7XG5cdFx0XHRiYXNlLl9jb21wb25lbnRDb25zdHJ1Y3RvciA9IGNvbXBvbmVudFJlZi5jb25zdHJ1Y3Rvcjtcblx0XHR9XG5cdH1cblxuXHRpZiAoIWlzVXBkYXRlIHx8IG1vdW50QWxsKSB7XG5cdFx0bW91bnRzLnVuc2hpZnQoY29tcG9uZW50KTtcblx0fSBlbHNlIGlmICghc2tpcCkge1xuXHRcdC8vIEVuc3VyZSB0aGF0IHBlbmRpbmcgY29tcG9uZW50RGlkTW91bnQoKSBob29rcyBvZiBjaGlsZCBjb21wb25lbnRzXG5cdFx0Ly8gYXJlIGNhbGxlZCBiZWZvcmUgdGhlIGNvbXBvbmVudERpZFVwZGF0ZSgpIGhvb2sgaW4gdGhlIHBhcmVudC5cblx0XHQvLyBOb3RlOiBkaXNhYmxlZCBhcyBpdCBjYXVzZXMgZHVwbGljYXRlIGhvb2tzLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QvaXNzdWVzLzc1MFxuXHRcdC8vIGZsdXNoTW91bnRzKCk7XG5cblx0XHRpZiAoY29tcG9uZW50LmNvbXBvbmVudERpZFVwZGF0ZSkge1xuXHRcdFx0Y29tcG9uZW50LmNvbXBvbmVudERpZFVwZGF0ZShwcmV2aW91c1Byb3BzLCBwcmV2aW91c1N0YXRlLCBwcmV2aW91c0NvbnRleHQpO1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5hZnRlclVwZGF0ZSkgb3B0aW9ucy5hZnRlclVwZGF0ZShjb21wb25lbnQpO1xuXHR9XG5cblx0aWYgKGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzICE9IG51bGwpIHtcblx0XHR3aGlsZSAoY29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG5cdFx0XHRjb21wb25lbnQuX3JlbmRlckNhbGxiYWNrcy5wb3AoKS5jYWxsKGNvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFkaWZmTGV2ZWwgJiYgIWlzQ2hpbGQpIGZsdXNoTW91bnRzKCk7XG59XG5cbi8qKiBBcHBseSB0aGUgQ29tcG9uZW50IHJlZmVyZW5jZWQgYnkgYSBWTm9kZSB0byB0aGUgRE9NLlxuICpcdEBwYXJhbSB7RWxlbWVudH0gZG9tXHRUaGUgRE9NIG5vZGUgdG8gbXV0YXRlXG4gKlx0QHBhcmFtIHtWTm9kZX0gdm5vZGVcdEEgQ29tcG9uZW50LXJlZmVyZW5jaW5nIFZOb2RlXG4gKlx0QHJldHVybnMge0VsZW1lbnR9IGRvbVx0VGhlIGNyZWF0ZWQvbXV0YXRlZCBlbGVtZW50XG4gKlx0QHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYnVpbGRDb21wb25lbnRGcm9tVk5vZGUoZG9tLCB2bm9kZSwgY29udGV4dCwgbW91bnRBbGwpIHtcblx0dmFyIGMgPSBkb20gJiYgZG9tLl9jb21wb25lbnQsXG5cdCAgICBvcmlnaW5hbENvbXBvbmVudCA9IGMsXG5cdCAgICBvbGREb20gPSBkb20sXG5cdCAgICBpc0RpcmVjdE93bmVyID0gYyAmJiBkb20uX2NvbXBvbmVudENvbnN0cnVjdG9yID09PSB2bm9kZS5ub2RlTmFtZSxcblx0ICAgIGlzT3duZXIgPSBpc0RpcmVjdE93bmVyLFxuXHQgICAgcHJvcHMgPSBnZXROb2RlUHJvcHModm5vZGUpO1xuXHR3aGlsZSAoYyAmJiAhaXNPd25lciAmJiAoYyA9IGMuX3BhcmVudENvbXBvbmVudCkpIHtcblx0XHRpc093bmVyID0gYy5jb25zdHJ1Y3RvciA9PT0gdm5vZGUubm9kZU5hbWU7XG5cdH1cblxuXHRpZiAoYyAmJiBpc093bmVyICYmICghbW91bnRBbGwgfHwgYy5fY29tcG9uZW50KSkge1xuXHRcdHNldENvbXBvbmVudFByb3BzKGMsIHByb3BzLCAzLCBjb250ZXh0LCBtb3VudEFsbCk7XG5cdFx0ZG9tID0gYy5iYXNlO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChvcmlnaW5hbENvbXBvbmVudCAmJiAhaXNEaXJlY3RPd25lcikge1xuXHRcdFx0dW5tb3VudENvbXBvbmVudChvcmlnaW5hbENvbXBvbmVudCk7XG5cdFx0XHRkb20gPSBvbGREb20gPSBudWxsO1xuXHRcdH1cblxuXHRcdGMgPSBjcmVhdGVDb21wb25lbnQodm5vZGUubm9kZU5hbWUsIHByb3BzLCBjb250ZXh0KTtcblx0XHRpZiAoZG9tICYmICFjLm5leHRCYXNlKSB7XG5cdFx0XHRjLm5leHRCYXNlID0gZG9tO1xuXHRcdFx0Ly8gcGFzc2luZyBkb20vb2xkRG9tIGFzIG5leHRCYXNlIHdpbGwgcmVjeWNsZSBpdCBpZiB1bnVzZWQsIHNvIGJ5cGFzcyByZWN5Y2xpbmcgb24gTDIyOTpcblx0XHRcdG9sZERvbSA9IG51bGw7XG5cdFx0fVxuXHRcdHNldENvbXBvbmVudFByb3BzKGMsIHByb3BzLCAxLCBjb250ZXh0LCBtb3VudEFsbCk7XG5cdFx0ZG9tID0gYy5iYXNlO1xuXG5cdFx0aWYgKG9sZERvbSAmJiBkb20gIT09IG9sZERvbSkge1xuXHRcdFx0b2xkRG9tLl9jb21wb25lbnQgPSBudWxsO1xuXHRcdFx0cmVjb2xsZWN0Tm9kZVRyZWUob2xkRG9tLCBmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGRvbTtcbn1cblxuLyoqIFJlbW92ZSBhIGNvbXBvbmVudCBmcm9tIHRoZSBET00gYW5kIHJlY3ljbGUgaXQuXG4gKlx0QHBhcmFtIHtDb21wb25lbnR9IGNvbXBvbmVudFx0VGhlIENvbXBvbmVudCBpbnN0YW5jZSB0byB1bm1vdW50XG4gKlx0QHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudChjb21wb25lbnQpIHtcblx0aWYgKG9wdGlvbnMuYmVmb3JlVW5tb3VudCkgb3B0aW9ucy5iZWZvcmVVbm1vdW50KGNvbXBvbmVudCk7XG5cblx0dmFyIGJhc2UgPSBjb21wb25lbnQuYmFzZTtcblxuXHRjb21wb25lbnQuX2Rpc2FibGUgPSB0cnVlO1xuXG5cdGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbFVubW91bnQpIGNvbXBvbmVudC5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuXG5cdGNvbXBvbmVudC5iYXNlID0gbnVsbDtcblxuXHQvLyByZWN1cnNpdmVseSB0ZWFyIGRvd24gJiByZWNvbGxlY3QgaGlnaC1vcmRlciBjb21wb25lbnQgY2hpbGRyZW46XG5cdHZhciBpbm5lciA9IGNvbXBvbmVudC5fY29tcG9uZW50O1xuXHRpZiAoaW5uZXIpIHtcblx0XHR1bm1vdW50Q29tcG9uZW50KGlubmVyKTtcblx0fSBlbHNlIGlmIChiYXNlKSB7XG5cdFx0aWYgKGJhc2VbJ19fcHJlYWN0YXR0cl8nXSAmJiBiYXNlWydfX3ByZWFjdGF0dHJfJ10ucmVmKSBiYXNlWydfX3ByZWFjdGF0dHJfJ10ucmVmKG51bGwpO1xuXG5cdFx0Y29tcG9uZW50Lm5leHRCYXNlID0gYmFzZTtcblxuXHRcdHJlbW92ZU5vZGUoYmFzZSk7XG5cdFx0Y29sbGVjdENvbXBvbmVudChjb21wb25lbnQpO1xuXG5cdFx0cmVtb3ZlQ2hpbGRyZW4oYmFzZSk7XG5cdH1cblxuXHRpZiAoY29tcG9uZW50Ll9fcmVmKSBjb21wb25lbnQuX19yZWYobnVsbCk7XG59XG5cbi8qKiBCYXNlIENvbXBvbmVudCBjbGFzcy5cbiAqXHRQcm92aWRlcyBgc2V0U3RhdGUoKWAgYW5kIGBmb3JjZVVwZGF0ZSgpYCwgd2hpY2ggdHJpZ2dlciByZW5kZXJpbmcuXG4gKlx0QHB1YmxpY1xuICpcbiAqXHRAZXhhbXBsZVxuICpcdGNsYXNzIE15Rm9vIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAqXHRcdHJlbmRlcihwcm9wcywgc3RhdGUpIHtcbiAqXHRcdFx0cmV0dXJuIDxkaXYgLz47XG4gKlx0XHR9XG4gKlx0fVxuICovXG5mdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIGNvbnRleHQpIHtcblx0dGhpcy5fZGlydHkgPSB0cnVlO1xuXG5cdC8qKiBAcHVibGljXG4gICpcdEB0eXBlIHtvYmplY3R9XG4gICovXG5cdHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cblx0LyoqIEBwdWJsaWNcbiAgKlx0QHR5cGUge29iamVjdH1cbiAgKi9cblx0dGhpcy5wcm9wcyA9IHByb3BzO1xuXG5cdC8qKiBAcHVibGljXG4gICpcdEB0eXBlIHtvYmplY3R9XG4gICovXG5cdHRoaXMuc3RhdGUgPSB0aGlzLnN0YXRlIHx8IHt9O1xufVxuXG5leHRlbmQoQ29tcG9uZW50LnByb3RvdHlwZSwge1xuXG5cdC8qKiBSZXR1cm5zIGEgYGJvb2xlYW5gIGluZGljYXRpbmcgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgcmUtcmVuZGVyIHdoZW4gcmVjZWl2aW5nIHRoZSBnaXZlbiBgcHJvcHNgIGFuZCBgc3RhdGVgLlxuICAqXHRAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzXG4gICpcdEBwYXJhbSB7b2JqZWN0fSBuZXh0U3RhdGVcbiAgKlx0QHBhcmFtIHtvYmplY3R9IG5leHRDb250ZXh0XG4gICpcdEByZXR1cm5zIHtCb29sZWFufSBzaG91bGQgdGhlIGNvbXBvbmVudCByZS1yZW5kZXJcbiAgKlx0QG5hbWUgc2hvdWxkQ29tcG9uZW50VXBkYXRlXG4gICpcdEBmdW5jdGlvblxuICAqL1xuXG5cdC8qKiBVcGRhdGUgY29tcG9uZW50IHN0YXRlIGJ5IGNvcHlpbmcgcHJvcGVydGllcyBmcm9tIGBzdGF0ZWAgdG8gYHRoaXMuc3RhdGVgLlxuICAqXHRAcGFyYW0ge29iamVjdH0gc3RhdGVcdFx0QSBoYXNoIG9mIHN0YXRlIHByb3BlcnRpZXMgdG8gdXBkYXRlIHdpdGggbmV3IHZhbHVlc1xuICAqXHRAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1x0QSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb25jZSBjb21wb25lbnQgc3RhdGUgaXMgdXBkYXRlZFxuICAqL1xuXHRzZXRTdGF0ZTogZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUsIGNhbGxiYWNrKSB7XG5cdFx0dmFyIHMgPSB0aGlzLnN0YXRlO1xuXHRcdGlmICghdGhpcy5wcmV2U3RhdGUpIHRoaXMucHJldlN0YXRlID0gZXh0ZW5kKHt9LCBzKTtcblx0XHRleHRlbmQocywgdHlwZW9mIHN0YXRlID09PSAnZnVuY3Rpb24nID8gc3RhdGUocywgdGhpcy5wcm9wcykgOiBzdGF0ZSk7XG5cdFx0aWYgKGNhbGxiYWNrKSAodGhpcy5fcmVuZGVyQ2FsbGJhY2tzID0gdGhpcy5fcmVuZGVyQ2FsbGJhY2tzIHx8IFtdKS5wdXNoKGNhbGxiYWNrKTtcblx0XHRlbnF1ZXVlUmVuZGVyKHRoaXMpO1xuXHR9LFxuXG5cblx0LyoqIEltbWVkaWF0ZWx5IHBlcmZvcm0gYSBzeW5jaHJvbm91cyByZS1yZW5kZXIgb2YgdGhlIGNvbXBvbmVudC5cbiAgKlx0QHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcdFx0QSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHJlLXJlbmRlcmVkLlxuICAqXHRAcHJpdmF0ZVxuICAqL1xuXHRmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoY2FsbGJhY2spIHtcblx0XHRpZiAoY2FsbGJhY2spICh0aGlzLl9yZW5kZXJDYWxsYmFja3MgPSB0aGlzLl9yZW5kZXJDYWxsYmFja3MgfHwgW10pLnB1c2goY2FsbGJhY2spO1xuXHRcdHJlbmRlckNvbXBvbmVudCh0aGlzLCAyKTtcblx0fSxcblxuXG5cdC8qKiBBY2NlcHRzIGBwcm9wc2AgYW5kIGBzdGF0ZWAsIGFuZCByZXR1cm5zIGEgbmV3IFZpcnR1YWwgRE9NIHRyZWUgdG8gYnVpbGQuXG4gICpcdFZpcnR1YWwgRE9NIGlzIGdlbmVyYWxseSBjb25zdHJ1Y3RlZCB2aWEgW0pTWF0oaHR0cDovL2phc29uZm9ybWF0LmNvbS93dGYtaXMtanN4KS5cbiAgKlx0QHBhcmFtIHtvYmplY3R9IHByb3BzXHRcdFByb3BzIChlZzogSlNYIGF0dHJpYnV0ZXMpIHJlY2VpdmVkIGZyb20gcGFyZW50IGVsZW1lbnQvY29tcG9uZW50XG4gICpcdEBwYXJhbSB7b2JqZWN0fSBzdGF0ZVx0XHRUaGUgY29tcG9uZW50J3MgY3VycmVudCBzdGF0ZVxuICAqXHRAcGFyYW0ge29iamVjdH0gY29udGV4dFx0XHRDb250ZXh0IG9iamVjdCAoaWYgYSBwYXJlbnQgY29tcG9uZW50IGhhcyBwcm92aWRlZCBjb250ZXh0KVxuICAqXHRAcmV0dXJucyBWTm9kZVxuICAqL1xuXHRyZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHt9XG59KTtcblxuLyoqIFJlbmRlciBKU1ggaW50byBhIGBwYXJlbnRgIEVsZW1lbnQuXG4gKlx0QHBhcmFtIHtWTm9kZX0gdm5vZGVcdFx0QSAoSlNYKSBWTm9kZSB0byByZW5kZXJcbiAqXHRAcGFyYW0ge0VsZW1lbnR9IHBhcmVudFx0XHRET00gZWxlbWVudCB0byByZW5kZXIgaW50b1xuICpcdEBwYXJhbSB7RWxlbWVudH0gW21lcmdlXVx0QXR0ZW1wdCB0byByZS11c2UgYW4gZXhpc3RpbmcgRE9NIHRyZWUgcm9vdGVkIGF0IGBtZXJnZWBcbiAqXHRAcHVibGljXG4gKlxuICpcdEBleGFtcGxlXG4gKlx0Ly8gcmVuZGVyIGEgZGl2IGludG8gPGJvZHk+OlxuICpcdHJlbmRlcig8ZGl2IGlkPVwiaGVsbG9cIj5oZWxsbyE8L2Rpdj4sIGRvY3VtZW50LmJvZHkpO1xuICpcbiAqXHRAZXhhbXBsZVxuICpcdC8vIHJlbmRlciBhIFwiVGhpbmdcIiBjb21wb25lbnQgaW50byAjZm9vOlxuICpcdGNvbnN0IFRoaW5nID0gKHsgbmFtZSB9KSA9PiA8c3Bhbj57IG5hbWUgfTwvc3Bhbj47XG4gKlx0cmVuZGVyKDxUaGluZyBuYW1lPVwib25lXCIgLz4sIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNmb28nKSk7XG4gKi9cbmZ1bmN0aW9uIHJlbmRlcih2bm9kZSwgcGFyZW50LCBtZXJnZSkge1xuICByZXR1cm4gZGlmZihtZXJnZSwgdm5vZGUsIHt9LCBmYWxzZSwgcGFyZW50LCBmYWxzZSk7XG59XG5cbnZhciBwcmVhY3QgPSB7XG5cdGg6IGgsXG5cdGNyZWF0ZUVsZW1lbnQ6IGgsXG5cdGNsb25lRWxlbWVudDogY2xvbmVFbGVtZW50LFxuXHRDb21wb25lbnQ6IENvbXBvbmVudCxcblx0cmVuZGVyOiByZW5kZXIsXG5cdHJlcmVuZGVyOiByZXJlbmRlcixcblx0b3B0aW9uczogb3B0aW9uc1xufTtcblxuXG4vKiB1bnVzZWQgaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgX3VudXNlZF93ZWJwYWNrX2RlZmF1bHRfZXhwb3J0ID0gKHByZWFjdCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVhY3QuZXNtLmpzLm1hcFxuXG5cbi8qKiovIH0pLFxuLyogMTQ5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwpIHtcbnZhciBOYXRpdmVDdXN0b21FdmVudCA9IGdsb2JhbC5DdXN0b21FdmVudDtcblxuZnVuY3Rpb24gdXNlTmF0aXZlICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgcCA9IG5ldyBOYXRpdmVDdXN0b21FdmVudCgnY2F0JywgeyBkZXRhaWw6IHsgZm9vOiAnYmFyJyB9IH0pO1xuICAgIHJldHVybiAgJ2NhdCcgPT09IHAudHlwZSAmJiAnYmFyJyA9PT0gcC5kZXRhaWwuZm9vO1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENyb3NzLWJyb3dzZXIgYEN1c3RvbUV2ZW50YCBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3VzdG9tRXZlbnQuQ3VzdG9tRXZlbnRcbiAqXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSB1c2VOYXRpdmUoKSA/IE5hdGl2ZUN1c3RvbUV2ZW50IDpcblxuLy8gSUUgPj0gOVxuJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBkb2N1bWVudCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPyBmdW5jdGlvbiBDdXN0b21FdmVudCAodHlwZSwgcGFyYW1zKSB7XG4gIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBlLmluaXRDdXN0b21FdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUsIHBhcmFtcy5kZXRhaWwpO1xuICB9IGVsc2Uge1xuICAgIGUuaW5pdEN1c3RvbUV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSwgdm9pZCAwKTtcbiAgfVxuICByZXR1cm4gZTtcbn0gOlxuXG4vLyBJRSA8PSA4XG5mdW5jdGlvbiBDdXN0b21FdmVudCAodHlwZSwgcGFyYW1zKSB7XG4gIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTtcbiAgZS50eXBlID0gdHlwZTtcbiAgaWYgKHBhcmFtcykge1xuICAgIGUuYnViYmxlcyA9IEJvb2xlYW4ocGFyYW1zLmJ1YmJsZXMpO1xuICAgIGUuY2FuY2VsYWJsZSA9IEJvb2xlYW4ocGFyYW1zLmNhbmNlbGFibGUpO1xuICAgIGUuZGV0YWlsID0gcGFyYW1zLmRldGFpbDtcbiAgfSBlbHNlIHtcbiAgICBlLmJ1YmJsZXMgPSBmYWxzZTtcbiAgICBlLmNhbmNlbGFibGUgPSBmYWxzZTtcbiAgICBlLmRldGFpbCA9IHZvaWQgMDtcbiAgfVxuICByZXR1cm4gZTtcbn1cblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oNTApKSlcblxuLyoqKi8gfSksXG4vKiAxNTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXG4vKipcbiAqIEV4cG9zZSBgaXNVcmxgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gaXNVcmw7XG5cbi8qKlxuICogTWF0Y2hlci5cbiAqL1xuXG52YXIgbWF0Y2hlciA9IC9eKD86XFx3KzopP1xcL1xcLyhbXlxcc1xcLl0rXFwuXFxTezJ9fGxvY2FsaG9zdFtcXDo/XFxkXSopXFxTKiQvO1xuXG4vKipcbiAqIExvb3NlbHkgdmFsaWRhdGUgYSBVUkwgYHN0cmluZ2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBpc1VybChzdHJpbmcpe1xuICByZXR1cm4gbWF0Y2hlci50ZXN0KHN0cmluZyk7XG59XG5cblxuLyoqKi8gfSksXG4vKiAxNTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLyoqXG4gKiBDaGVjayBpZiB3ZSdyZSByZXF1aXJlZCB0byBhZGQgYSBwb3J0IG51bWJlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZGVmYXVsdC1wb3J0XG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IHBvcnQgUG9ydCBudW1iZXIgd2UgbmVlZCB0byBjaGVja1xuICogQHBhcmFtIHtTdHJpbmd9IHByb3RvY29sIFByb3RvY29sIHdlIG5lZWQgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJcyBpdCBhIGRlZmF1bHQgcG9ydCBmb3IgdGhlIGdpdmVuIHByb3RvY29sXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXF1aXJlZChwb3J0LCBwcm90b2NvbCkge1xuICBwcm90b2NvbCA9IHByb3RvY29sLnNwbGl0KCc6JylbMF07XG4gIHBvcnQgPSArcG9ydDtcblxuICBpZiAoIXBvcnQpIHJldHVybiBmYWxzZTtcblxuICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgY2FzZSAnaHR0cCc6XG4gICAgY2FzZSAnd3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA4MDtcblxuICAgIGNhc2UgJ2h0dHBzJzpcbiAgICBjYXNlICd3c3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA0NDM7XG5cbiAgICBjYXNlICdmdHAnOlxuICAgIHJldHVybiBwb3J0ICE9PSAyMTtcblxuICAgIGNhc2UgJ2dvcGhlcic6XG4gICAgcmV0dXJuIHBvcnQgIT09IDcwO1xuXG4gICAgY2FzZSAnZmlsZSc6XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQgIT09IDA7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTUyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIERlY29kZSBhIFVSSSBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFVSSSBlbmNvZGVkIHN0cmluZy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBkZWNvZGVkIHN0cmluZy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChpbnB1dC5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XG59XG5cbi8qKlxuICogU2ltcGxlIHF1ZXJ5IHN0cmluZyBwYXJzZXIuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBxdWVyeSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBwYXJzZWQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gcXVlcnlzdHJpbmcocXVlcnkpIHtcbiAgdmFyIHBhcnNlciA9IC8oW149PyZdKyk9PyhbXiZdKikvZ1xuICAgICwgcmVzdWx0ID0ge31cbiAgICAsIHBhcnQ7XG5cbiAgLy9cbiAgLy8gTGl0dGxlIG5pZnR5IHBhcnNpbmcgaGFjaywgbGV2ZXJhZ2UgdGhlIGZhY3QgdGhhdCBSZWdFeHAuZXhlYyBpbmNyZW1lbnRzXG4gIC8vIHRoZSBsYXN0SW5kZXggcHJvcGVydHkgc28gd2UgY2FuIGNvbnRpbnVlIGV4ZWN1dGluZyB0aGlzIGxvb3AgdW50aWwgd2UndmVcbiAgLy8gcGFyc2VkIGFsbCByZXN1bHRzLlxuICAvL1xuICBmb3IgKDtcbiAgICBwYXJ0ID0gcGFyc2VyLmV4ZWMocXVlcnkpO1xuICAgIHJlc3VsdFtkZWNvZGUocGFydFsxXSldID0gZGVjb2RlKHBhcnRbMl0pXG4gICk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBxdWVyeSBzdHJpbmcgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRoYXQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkLlxuICogQHBhcmFtIHtTdHJpbmd9IHByZWZpeCBPcHRpb25hbCBwcmVmaXguXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gcXVlcnlzdHJpbmdpZnkob2JqLCBwcmVmaXgpIHtcbiAgcHJlZml4ID0gcHJlZml4IHx8ICcnO1xuXG4gIHZhciBwYWlycyA9IFtdO1xuXG4gIC8vXG4gIC8vIE9wdGlvbmFsbHkgcHJlZml4IHdpdGggYSAnPycgaWYgbmVlZGVkXG4gIC8vXG4gIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIHByZWZpeCkgcHJlZml4ID0gJz8nO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICBwYWlycy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsnPScrIGVuY29kZVVSSUNvbXBvbmVudChvYmpba2V5XSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYWlycy5sZW5ndGggPyBwcmVmaXggKyBwYWlycy5qb2luKCcmJykgOiAnJztcbn1cblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmV4cG9ydHMuc3RyaW5naWZ5ID0gcXVlcnlzdHJpbmdpZnk7XG5leHBvcnRzLnBhcnNlID0gcXVlcnlzdHJpbmc7XG5cblxuLyoqKi8gfSksXG4vKiAxNTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiFcbiAqIGlzb2JqZWN0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pc29iamVjdD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHZhbCkgPT09IGZhbHNlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDE1NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QT1BVUF9NT0RFUyA9IGV4cG9ydHMuRFJBV0VSX1JJR0hUID0gZXhwb3J0cy5EUkFXRVIgPSBleHBvcnRzLlBPUFVQID0gdW5kZWZpbmVkO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX1BPUFVQX01PREVTO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX3N0eWxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xuXG52YXIgX3N0eWxlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHlsZXMpO1xuXG52YXIgX3Njcm9sbGJhcldpZHRoID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTgpO1xuXG52YXIgX3Njcm9sbGJhcldpZHRoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Njcm9sbGJhcldpZHRoKTtcblxudmFyIF9zcGlubmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7XG5cbnZhciBfc3Bpbm5lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zcGlubmVyKTtcblxudmFyIF91dGlsaXRpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9pZnJhbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcblxudmFyIF9pZnJhbWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWZyYW1lKTtcblxudmFyIF9jbG9zZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTYwKTtcblxudmFyIF9jbG9zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbG9zZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIEVTQ19LRVlfQ09ERSA9IDI3O1xudmFyIENMT1NFX0JVVFRPTl9XSURUSCA9IDMwO1xudmFyIERFRkFVTFRfQVVUT0NMT1NFX1RJTUVPVVQgPSA1O1xuXG52YXIgUE9QVVAgPSBleHBvcnRzLlBPUFVQID0gJ3BvcHVwJztcbnZhciBEUkFXRVIgPSBleHBvcnRzLkRSQVdFUiA9ICdkcmF3ZXJfbGVmdCc7XG52YXIgRFJBV0VSX1JJR0hUID0gZXhwb3J0cy5EUkFXRVJfUklHSFQgPSAnZHJhd2VyX3JpZ2h0JztcbnZhciBQT1BVUF9NT0RFUyA9IGV4cG9ydHMuUE9QVVBfTU9ERVMgPSAoX1BPUFVQX01PREVTID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfUE9QVVBfTU9ERVMsIFBPUFVQLCAncG9wdXAtYmxhbmsnKSwgX2RlZmluZVByb3BlcnR5KF9QT1BVUF9NT0RFUywgRFJBV0VSLCAncG9wdXAtY2xhc3NpYycpLCBfZGVmaW5lUHJvcGVydHkoX1BPUFVQX01PREVTLCBEUkFXRVJfUklHSFQsICdwb3B1cC1kcmF3ZXInKSwgX1BPUFVQX01PREVTKTtcblxudmFyIEJhc2VXcmFwcGVyID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KSgnZGl2Jywge1xuICB0YXJnZXQ6ICdlMW8zeXNmaTAnXG59KSgndmlzaWJpbGl0eTonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5vcGVuID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG59LCAnO29wYWNpdHk6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAub3BlbiA/IDEgOiAwO1xufSwgJztwb3NpdGlvbjonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5pc0NvbnRhaW5lZCA/ICdhYnNvbHV0ZScgOiAnZml4ZWQnO1xufSwgJzttYXgtd2lkdGg6MTAwJTt6LWluZGV4OjEwMDAxOycpO1xuXG52YXIgT3ZlcmxheSA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlczIuZGVmYXVsdCkoJ2RpdicsIHtcbiAgdGFyZ2V0OiAnZTFvM3lzZmkxJ1xufSkoJ3Zpc2liaWxpdHk6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYXBwZWFyaW5nID8gJ2hpZGRlbicgOiAndmlzaWJsZSc7XG59LCAnO29wYWNpdHk6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYXBwZWFyaW5nID8gMCA6IDE7XG59LCAnO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBlYXNlLHZpc2liaWxpdHkgMHMgbGluZWFyICcsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLmFwcGVhcmluZyA/ICcyMDBtcycgOiAnMHMnO1xufSwgJztiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC44NSk7cG9zaXRpb246JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuaXNDb250YWluZWQgPyAnYWJzb2x1dGUnIDogJ2ZpeGVkJztcbn0sICc7b3ZlcmZsb3c6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuaXNDb250YWluZWQgPyAnaGlkZGVuJyA6ICdhdXRvJztcbn0sICc7bGVmdDowO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7ei1pbmRleDoxMDAwMDttaW4taGVpZ2h0OjEwMCU7Jyk7XG5cbnZhciBwb3B1cFdyYXBwZXIgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKEJhc2VXcmFwcGVyLCB7XG4gIHRhcmdldDogJ2UxbzN5c2ZpMidcbn0pKCd3aWR0aDonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5pc0NvbnRhaW5lZCA/ICdjYWxjKDEwMCUgLSA4MHB4KScgOiAnY2FsYygxMDB2dyAtIDgwcHgpJztcbn0sICc7aGVpZ2h0OicsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLmlzQ29udGFpbmVkID8gJ2NhbGMoMTAwJSAtIDgwcHgpJyA6ICdjYWxjKDEwMHZoIC0gODBweCknO1xufSwgJzt0b3A6NDBweDtsZWZ0OjQwcHg7dHJhbnNpdGlvbjphbGwgMzAwbXMgZWFzZS1vdXQ7Jyk7XG5cbnZhciBkcmF3ZXJXcmFwcGVyID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KShCYXNlV3JhcHBlciwge1xuICB0YXJnZXQ6ICdlMW8zeXNmaTMnXG59KSgndHJhbnNpdGlvbjphbGwgNDAwbXMgZWFzZS1vdXQ7d2lkdGg6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAud2lkdGg7XG59LCAncHg7aGVpZ2h0OjEwMCU7dG9wOjA7Jyk7XG5cbnZhciBkcmF3ZXJMZWZ0V3JhcHBlciA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlczIuZGVmYXVsdCkoZHJhd2VyV3JhcHBlciwge1xuICB0YXJnZXQ6ICdlMW8zeXNmaTQnXG59KSgnbGVmdDonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gIXAub3BlbiA/IC0ocC53aWR0aCAtIENMT1NFX0JVVFRPTl9XSURUSCkgOiAwO1xufSwgJ3B4OycpO1xuXG52YXIgZHJhd2VyUmlnaHRXcmFwcGVyID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KShkcmF3ZXJXcmFwcGVyLCB7XG4gIHRhcmdldDogJ2UxbzN5c2ZpNSdcbn0pKCdyaWdodDonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gIXAub3BlbiA/IC0ocC53aWR0aCAtIENMT1NFX0JVVFRPTl9XSURUSCkgOiAwO1xufSwgJ3B4OycpO1xuXG52YXIgQmFzZUNsb3NlSW1hZ2UgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdpbWcnLCB7XG4gIHRhcmdldDogJ2UxbzN5c2ZpNidcbn0pKCdwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOjhweDtjdXJzb3I6cG9pbnRlcjt3aWR0aDppbml0aWFsO21heC13aWR0aDppbml0aWFsOycpO1xuXG52YXIgY2xvc2VJbWFnZVBvcHVwID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KShCYXNlQ2xvc2VJbWFnZSwge1xuICB0YXJnZXQ6ICdlMW8zeXNmaTcnXG59KSgndG9wOi0zNHB4O3JpZ2h0Oi0zNHB4OycpO1xuXG52YXIgY2xvc2VJbWFnZUxlZnQgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKEJhc2VDbG9zZUltYWdlLCB7XG4gIHRhcmdldDogJ2UxbzN5c2ZpOCdcbn0pKCd0b3A6MTJweDtyaWdodDotMzhweDsnKTtcblxudmFyIGNsb3NlSW1hZ2VSaWdodCA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlczIuZGVmYXVsdCkoQmFzZUNsb3NlSW1hZ2UsIHtcbiAgdGFyZ2V0OiAnZTFvM3lzZmk5J1xufSkoJ3RvcDoxMnB4O2xlZnQ6LTM4cHg7cmlnaHQ6YXV0bzsnKTtcblxudmFyIFBvcHVwID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFBvcHVwLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBQb3B1cChwcm9wcykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQb3B1cCk7XG5cbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUG9wdXAuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihQb3B1cCkpLmNhbGwodGhpcywgcHJvcHMpKTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgZnJhbWVBbmltYXRlOiBmYWxzZSxcbiAgICAgIGlmcmFtZUxvYWRlZDogZmFsc2UsXG4gICAgICBwb3B1cEFuaW1hdGU6IHRydWUsXG4gICAgICB0cmFuc2l0aW9uRW5kZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIF90aGlzLm9uSWZyYW1lTG9hZCA9IF90aGlzLm9uSWZyYW1lTG9hZC5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbktleURvd24gPSBfdGhpcy5vbktleURvd24uYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25BdXRvQ2xvc2UgPSBfdGhpcy5vbkF1dG9DbG9zZS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5hbmltYXRlQmVmb3JlQ2xvc2UgPSBfdGhpcy5hbmltYXRlQmVmb3JlQ2xvc2UuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25UcmFuc2l0aW9uRW5kID0gX3RoaXMub25UcmFuc2l0aW9uRW5kLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uRm9ybVN1Ym1pdCA9IF90aGlzLm9uRm9ybVN1Ym1pdC5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUG9wdXAsIFt7XG4gICAga2V5OiAnb25JZnJhbWVMb2FkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25JZnJhbWVMb2FkKGlmcmFtZVJlZikge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpZnJhbWVMb2FkZWQ6IHRydWUgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoeyBmcmFtZUFuaW1hdGU6IHRydWUgfSk7XG4gICAgICAgICAgaWYgKGlmcmFtZVJlZiAmJiBpZnJhbWVSZWYuY29udGVudFdpbmRvdykge1xuICAgICAgICAgICAgaWZyYW1lUmVmLmNvbnRlbnRXaW5kb3cuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdhbmltYXRlQmVmb3JlQ2xvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhbmltYXRlQmVmb3JlQ2xvc2UoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZyYW1lQW5pbWF0ZTogZmFsc2UsIHBvcHVwQW5pbWF0ZTogZmFsc2UgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMuc2V0U3RhdGUoeyBwb3B1cEFuaW1hdGU6IHRydWUgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChfdGhpczMucHJvcHMub25DbG9zZSwgNDAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgNDAwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uS2V5RG93bicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7XG4gICAgICB2YXIga2V5ID0gZG9jdW1lbnQuYWxsID8gZS5rZXlDb2RlIDogZS53aGljaDtcbiAgICAgIGlmIChrZXkgPT09IEVTQ19LRVlfQ09ERSkge1xuICAgICAgICB0aGlzLmFuaW1hdGVCZWZvcmVDbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uQXV0b0Nsb3NlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25BdXRvQ2xvc2UoZSkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBjYW5TZXRBdXRvY2xvc2VEZWxheSA9IGUuZGV0YWlsLmlzUHJvUGx1cyB8fCBlLmRldGFpbC5jYW5TZXRBdXRvY2xvc2VEZWxheTtcbiAgICAgIHZhciBfcHJvcHMkb3B0aW9ucyA9IHRoaXMucHJvcHMub3B0aW9ucyxcbiAgICAgICAgICBpc0F1dG9DbG9zZUVuYWJsZWQgPSBfcHJvcHMkb3B0aW9ucy5pc0F1dG9DbG9zZUVuYWJsZWQsXG4gICAgICAgICAgYXV0b0Nsb3NlID0gX3Byb3BzJG9wdGlvbnMuYXV0b0Nsb3NlO1xuXG4gICAgICB2YXIgdGltZW91dCA9IChjYW5TZXRBdXRvY2xvc2VEZWxheSA/IGF1dG9DbG9zZSA6IERFRkFVTFRfQVVUT0NMT1NFX1RJTUVPVVQpICogMTAwMDtcblxuICAgICAgaWYgKGlzQXV0b0Nsb3NlRW5hYmxlZCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczQuYW5pbWF0ZUJlZm9yZUNsb3NlKCk7XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uVHJhbnNpdGlvbkVuZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uVHJhbnNpdGlvbkVuZChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy53cmFwcGVyKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHRyYW5zaXRpb25FbmRlZDogdGhpcy5zdGF0ZS5mcmFtZUFuaW1hdGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25Gb3JtU3VibWl0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Gb3JtU3VibWl0KCkge1xuICAgICAgdmFyIG9uU3VibWl0ID0gdGhpcy5wcm9wcy5vcHRpb25zLm9uU3VibWl0O1xuXG4gICAgICBvblN1Ym1pdCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBfdXRpbGl0aWVzLm9uTWVzc2FnZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb3JtLWNsb3NlJywgdGhpcy5hbmltYXRlQmVmb3JlQ2xvc2UpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0VTQycsIHRoaXMuYW5pbWF0ZUJlZm9yZUNsb3NlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdlbWJlZC1hdXRvLWNsb3NlLXBvcHVwJywgdGhpcy5vbkF1dG9DbG9zZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9ybS1zdWJtaXQnLCB0aGlzLm9uRm9ybVN1Ym1pdCk7XG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczUuc2V0U3RhdGUoe1xuICAgICAgICAgIHBvcHVwQW5pbWF0ZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIF91dGlsaXRpZXMub25NZXNzYWdlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd24pO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Zvcm0tY2xvc2UnLCB0aGlzLmFuaW1hdGVCZWZvcmVDbG9zZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignRVNDJywgdGhpcy5hbmltYXRlQmVmb3JlQ2xvc2UpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2VtYmVkLWF1dG8tY2xvc2UtcG9wdXAnLCB0aGlzLm9uQXV0b0Nsb3NlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb3JtLXN1Ym1pdCcsIHRoaXMub25Gb3JtU3VibWl0KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRXcmFwcGVyQ29tcG9uZW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0V3JhcHBlckNvbXBvbmVudChtb2RlKSB7XG4gICAgICBpZiAobW9kZSA9PT0gRFJBV0VSX1JJR0hUKSByZXR1cm4gZHJhd2VyUmlnaHRXcmFwcGVyO1xuICAgICAgaWYgKG1vZGUgPT09IERSQVdFUikgcmV0dXJuIGRyYXdlckxlZnRXcmFwcGVyO1xuICAgICAgcmV0dXJuIHBvcHVwV3JhcHBlcjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRDbG9zZUltYWdlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2xvc2VJbWFnZShtb2RlKSB7XG4gICAgICBpZiAobW9kZSA9PT0gRFJBV0VSX1JJR0hUKSByZXR1cm4gY2xvc2VJbWFnZVJpZ2h0O1xuICAgICAgaWYgKG1vZGUgPT09IERSQVdFUikgcmV0dXJuIGNsb3NlSW1hZ2VMZWZ0O1xuICAgICAgcmV0dXJuIGNsb3NlSW1hZ2VQb3B1cDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgdmFyIGlmcmFtZVN0eWxlcyA9IG51bGw7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMucHJvcHMub3B0aW9ucztcbiAgICAgIHZhciBkcmF3ZXJXaWR0aCA9IG9wdGlvbnMuZHJhd2VyV2lkdGgsXG4gICAgICAgICAgaGlkZVNjcm9sbGJhcnMgPSBvcHRpb25zLmhpZGVTY3JvbGxiYXJzLFxuICAgICAgICAgIGlzQ29udGFpbmVkID0gb3B0aW9ucy5pc0NvbnRhaW5lZCxcbiAgICAgICAgICBtb2RlID0gb3B0aW9ucy5tb2RlO1xuXG5cbiAgICAgIGlmIChoaWRlU2Nyb2xsYmFycykge1xuICAgICAgICBpZnJhbWVTdHlsZXMgPSB7XG4gICAgICAgICAgd2lkdGg6ICdjYWxjKDEwMCUgKyAnICsgKDAsIF9zY3JvbGxiYXJXaWR0aDIuZGVmYXVsdCkoKSArICdweCknXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RlID09PSBQT1BVUCkge1xuICAgICAgICBpZnJhbWVTdHlsZXMgPSBfZXh0ZW5kcyh7fSwgaWZyYW1lU3R5bGVzLCB7XG4gICAgICAgICAgV2Via2l0TWFza0ltYWdlOiAnLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCB3aGl0ZSwgYmxhY2spJyxcbiAgICAgICAgICBXZWJraXRUcmFuc2Zvcm06ICd0cmFuc2xhdGVaKDApJ1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIFdyYXBwZXIgPSB0aGlzLmdldFdyYXBwZXJDb21wb25lbnQobW9kZSk7XG4gICAgICB2YXIgQ2xvc2VJbWFnZSA9IHRoaXMuZ2V0Q2xvc2VJbWFnZShtb2RlKTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBPdmVybGF5LFxuICAgICAgICB7IGFwcGVhcmluZzogdGhpcy5zdGF0ZS5wb3B1cEFuaW1hdGUsIGlzQ29udGFpbmVkOiBpc0NvbnRhaW5lZCB9LFxuICAgICAgICBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfc3Bpbm5lcjIuZGVmYXVsdCwgeyBzdG9wcGVkOiB0aGlzLnN0YXRlLmlmcmFtZUxvYWRlZCB9KSxcbiAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgV3JhcHBlcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2RlOiBtb2RlLFxuICAgICAgICAgICAgb3BlbjogdGhpcy5zdGF0ZS5mcmFtZUFuaW1hdGUsXG4gICAgICAgICAgICBpc0NvbnRhaW5lZDogaXNDb250YWluZWQsXG4gICAgICAgICAgICB3aWR0aDogZHJhd2VyV2lkdGgsXG4gICAgICAgICAgICBvblRyYW5zaXRpb25FbmQ6IHRoaXMub25UcmFuc2l0aW9uRW5kLFxuICAgICAgICAgICAgaW5uZXJSZWY6IGZ1bmN0aW9uIGlubmVyUmVmKG5vZGUpIHtcbiAgICAgICAgICAgICAgX3RoaXM2LndyYXBwZXIgPSBub2RlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkYXRhLXFhJzogJ3BvcHVwLW1vZGUtJyArIG1vZGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc3RhdGUuaWZyYW1lTG9hZGVkICYmIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KENsb3NlSW1hZ2UsIHtcbiAgICAgICAgICAgIG1vZGU6IG1vZGUsXG4gICAgICAgICAgICBzcmM6IF9jbG9zZTIuZGVmYXVsdCxcbiAgICAgICAgICAgIGFsdDogJ2Nsb3NlLXR5cGVmb3JtJyxcbiAgICAgICAgICAgICdkYXRhLXFhJzogJ3BvcHVwLWNsb3NlLWJ1dHRvbicsXG4gICAgICAgICAgICBvbkNsaWNrOiB0aGlzLmFuaW1hdGVCZWZvcmVDbG9zZVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9pZnJhbWUyLmRlZmF1bHQsIHtcbiAgICAgICAgICAgIHNyYzogdGhpcy5wcm9wcy51cmwsXG4gICAgICAgICAgICBzdHlsZTogaWZyYW1lU3R5bGVzLFxuICAgICAgICAgICAgb25Mb2FkOiB0aGlzLm9uSWZyYW1lTG9hZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBvcHVwO1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuUG9wdXAucHJvcFR5cGVzID0ge1xuICB1cmw6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIG9wdGlvbnM6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsXG4gIG9uQ2xvc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgd2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLFxuICBoZWlnaHQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyXG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBQb3B1cDtcblxuLyoqKi8gfSksXG4vKiAxNTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZW1vdGlvbl91dGlsc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDUpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9zdHlsaXNfcnVsZV9zaGVldF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTYpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9zdHlsaXNfcnVsZV9zaGVldF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3N0eWxpc19ydWxlX3NoZWV0X18pO1xuXG5cblxudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2Vtb3Rpb25fdXRpbHNfX1tcImRcIiAvKiBtZW1vaXplICovXSkoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lbW90aW9uX3V0aWxzX19bXCJlXCIgLyogdW5pdGxlc3MgKi9dW2tleV0gIT09IDEgJiYga2V5LmNoYXJDb2RlQXQoMSkgIT09IDQ1ICYmIC8vIGN1c3RvbSBwcm9wZXJ0aWVzXG4gICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgdG9BZGQgPSBjbGFzc25hbWVzKFthcmcoKV0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xudmFyIGlzQnJvd3NlciA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuLSAncG9seWZpbGxzJyBvbiBzZXJ2ZXIgc2lkZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgU3R5bGVTaGVldCBmcm9tICdnbGFtb3IvbGliL3NoZWV0J1xubGV0IHN0eWxlU2hlZXQgPSBuZXcgU3R5bGVTaGVldCgpXG5cbnN0eWxlU2hlZXQuaW5qZWN0KClcbi0gJ2luamVjdHMnIHRoZSBzdHlsZXNoZWV0IGludG8gdGhlIHBhZ2UgKG9yIGludG8gbWVtb3J5IGlmIG9uIHNlcnZlcilcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG4vLyAkRmxvd0ZpeE1lXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlID09PSB0YWcpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZVN0eWxlVGFnKG9wdHMpIHtcbiAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHRhZy50eXBlID0gJ3RleHQvY3NzJztcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0cy5rZXkgfHwgJycpO1xuXG4gIGlmIChvcHRzLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdHMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSkgLy8gJEZsb3dGaXhNZVxuICA7XG4gIChvcHRzLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkID8gb3B0cy5jb250YWluZXIgOiBkb2N1bWVudC5oZWFkKS5hcHBlbmRDaGlsZCh0YWcpO1xuICByZXR1cm4gdGFnO1xufVxuXG5mdW5jdGlvbiBfU3R5bGVTaGVldChvcHRpb25zKSB7XG4gIHRoaXMuaXNTcGVlZHkgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nOyAvLyB0aGUgYmlnIGRyYXdiYWNrIGhlcmUgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG5cbiAgdGhpcy50YWdzID0gW107XG4gIHRoaXMuY3RyID0gMDtcbiAgdGhpcy5vcHRzID0gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gX2luamVjdCgpIHtcbiAgaWYgKHRoaXMuaW5qZWN0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FscmVhZHkgaW5qZWN0ZWQhJyk7XG4gIH1cblxuICB0aGlzLnRhZ3NbMF0gPSBtYWtlU3R5bGVUYWcodGhpcy5vcHRzKTtcbiAgdGhpcy5pbmplY3RlZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIF9zcGVlZHkoYm9vbCkge1xuICBpZiAodGhpcy5jdHIgIT09IDApIHtcbiAgICAvLyBjYW5ub3QgY2hhbmdlIHNwZWVkeSBtb2RlIGFmdGVyIGluc2VydGluZyBhbnkgcnVsZSB0byBzaGVldC4gRWl0aGVyIGNhbGwgc3BlZWR5KCR7Ym9vbH0pIGVhcmxpZXIgaW4geW91ciBhcHAsIG9yIGNhbGwgZmx1c2goKSBiZWZvcmUgc3BlZWR5KCR7Ym9vbH0pXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IGNoYW5nZSBzcGVlZHkgbm93XCIpO1xuICB9XG5cbiAgdGhpcy5pc1NwZWVkeSA9ICEhYm9vbDtcbn1cblxuZnVuY3Rpb24gX2luc2VydChydWxlLCBzb3VyY2VNYXApIHtcbiAgLy8gdGhpcyBpcyB0aGUgdWx0cmFmYXN0IHZlcnNpb24sIHdvcmtzIGFjcm9zcyBicm93c2Vyc1xuICBpZiAodGhpcy5pc1NwZWVkeSkge1xuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICB0cnkge1xuICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignaWxsZWdhbCBydWxlJywgcnVsZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgX3RhZyA9IG1ha2VTdHlsZVRhZyh0aGlzLm9wdHMpO1xuXG4gICAgdGhpcy50YWdzLnB1c2goX3RhZyk7XG5cbiAgICBfdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUgKyAoc291cmNlTWFwIHx8ICcnKSkpO1xuICB9XG5cbiAgdGhpcy5jdHIrKztcblxuICBpZiAodGhpcy5jdHIgJSA2NTAwMCA9PT0gMCkge1xuICAgIHRoaXMudGFncy5wdXNoKG1ha2VTdHlsZVRhZyh0aGlzLm9wdHMpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVmKHRhZykge1xuICByZXR1cm4gdGFnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbn1cblxuZnVuY3Rpb24gX2ZsdXNoKCkge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHRoaXMudGFncy5mb3JFYWNoKF9yZWYpO1xuICB0aGlzLnRhZ3MgPSBbXTtcbiAgdGhpcy5jdHIgPSAwOyAvLyB0b2RvIC0gbG9vayBmb3IgcmVtbmFudHMgaW4gZG9jdW1lbnQuc3R5bGVTaGVldHNcblxuICB0aGlzLmluamVjdGVkID0gZmFsc2U7XG59XG5cbnZhciBTdHlsZVNoZWV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIF9wcm90byA9IF9TdHlsZVNoZWV0LnByb3RvdHlwZTtcbiAgX3Byb3RvLmluamVjdCA9IF9pbmplY3Q7XG4gIF9wcm90by5zcGVlZHkgPSBfc3BlZWR5O1xuICBfcHJvdG8uaW5zZXJ0ID0gX2luc2VydDtcbiAgX3Byb3RvLmZsdXNoID0gX2ZsdXNoO1xuICByZXR1cm4gX1N0eWxlU2hlZXQ7XG59KCk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSBvcHRpb25zID0ge307XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleSB8fCAnY3NzJztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICgvW15hLXotXS8udGVzdChrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbW90aW9uIGtleSBtdXN0IG9ubHkgY29udGFpbiBsb3dlciBjYXNlIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIGFuZCAtIGJ1dCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIHBhc3NlZFwiKTtcbiAgICB9XG4gIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgdmFyIGNhY2hlcyA9IGNvbnRleHQuX19TRUNSRVRfRU1PVElPTl9fO1xuICB2YXIgY3VycmVudDtcblxuICBmdW5jdGlvbiBpbnNlcnRSdWxlKHJ1bGUpIHtcbiAgICBjdXJyZW50ICs9IHJ1bGU7XG5cbiAgICBpZiAoaXNCcm93c2VyKSB7XG4gICAgICBzaGVldC5pbnNlcnQocnVsZSwgY3VycmVudFNvdXJjZU1hcCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGlvblBsdWdpbiA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9zdHlsaXNfcnVsZV9zaGVldF9fX2RlZmF1bHQoKShpbnNlcnRSdWxlKTtcblxuICBpZiAoY2FjaGVzID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgc3R5bGlzT3B0aW9ucyA9IHtcbiAgICAgIGtleWZyYW1lOiBmYWxzZSxcbiAgICAgIGdsb2JhbDogZmFsc2UsXG4gICAgICBwcmVmaXg6IG9wdGlvbnMucHJlZml4ID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9ucy5wcmVmaXgsXG4gICAgICBzZW1pY29sb246IHRydWVcbiAgICB9O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHN0eWxpc09wdGlvbnMuY29tcHJlc3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb250ZXh0Ll9fU0VDUkVUX0VNT1RJT05fXyA9IGNhY2hlcyA9IHtcbiAgICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgICAgaW5zZXJ0ZWQ6IHt9LFxuICAgICAgc2hlZXQ6IG5ldyBTdHlsZVNoZWV0KG9wdGlvbnMpLFxuICAgICAgc3R5bGlzOiBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2Vtb3Rpb25fdXRpbHNfX1tcImJcIiAvKiBTdHlsaXMgKi9dKHN0eWxpc09wdGlvbnMpLFxuICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICBrZXk6IGtleVxuICAgIH07XG4gICAgY2FjaGVzLnN0eWxpcy51c2Uob3B0aW9ucy5zdHlsaXNQbHVnaW5zKShpbnNlcnRpb25QbHVnaW4pOyAvLyDwn5qAXG5cbiAgICBpZiAoaXNCcm93c2VyKSB7XG4gICAgICBjYWNoZXMuc2hlZXQuaW5qZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0eWxpcyA9IGNhY2hlcy5zdHlsaXM7XG4gIHZhciBzaGVldCA9IGNhY2hlcy5zaGVldDtcbiAgdmFyIGN1cnJlbnRTb3VyY2VNYXAgPSAnJztcblxuICBmdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb24sIGNvdWxkQmVTZWxlY3RvckludGVycG9sYXRpb24pIHtcbiAgICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAnJztcblxuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZW1vdGlvbl91dGlsc19fW1wiYVwiIC8qIFNUWUxFU19LRVkgKi9dXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHNlbGVjdG9yID0gaW50ZXJwb2xhdGlvbi50b1N0cmluZygpO1xuXG4gICAgICAgICAgaWYgKHNlbGVjdG9yID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGJhYmVsLXBsdWdpbi1lbW90aW9uLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnBvbGF0aW9uLmNhbGwodGhpcywgdGhpcyA9PT0gdW5kZWZpbmVkID8gaW50ZXJwb2xhdGlvbigpIDogLy8gJEZsb3dGaXhNZVxuICAgICAgICBpbnRlcnBvbGF0aW9uKHRoaXMubWVyZ2VkUHJvcHMsIHRoaXMuY29udGV4dCksIGNvdWxkQmVTZWxlY3RvckludGVycG9sYXRpb24pO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdC5jYWxsKHRoaXMsIGludGVycG9sYXRpb24pO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgY2FjaGVkID0gY2FjaGVzLnJlZ2lzdGVyZWRbaW50ZXJwb2xhdGlvbl07XG4gICAgICAgIHJldHVybiBjb3VsZEJlU2VsZWN0b3JJbnRlcnBvbGF0aW9uID09PSBmYWxzZSAmJiBjYWNoZWQgIT09IHVuZGVmaW5lZCA/IGNhY2hlZCA6IGludGVycG9sYXRpb247XG4gICAgfVxuICB9XG5cbiAgdmFyIG9iamVjdFRvU3RyaW5nQ2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3Qob2JqKSB7XG4gICAgaWYgKG9iamVjdFRvU3RyaW5nQ2FjaGUuaGFzKG9iaikpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBvYmplY3RUb1N0cmluZ0NhY2hlLmdldChvYmopO1xuICAgIH1cblxuICAgIHZhciBzdHJpbmcgPSAnJztcblxuICAgIGZ1bmN0aW9uIF9yZWYoaW50ZXJwb2xhdGlvbikge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24uY2FsbCh0aGlzLCBpbnRlcnBvbGF0aW9uLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZjIoa2V5KSB7XG4gICAgICBpZiAodHlwZW9mIG9ialtrZXldICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoY2FjaGVzLnJlZ2lzdGVyZWRbb2JqW2tleV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHJpbmcgKz0ga2V5ICsgXCJ7XCIgKyBjYWNoZXMucmVnaXN0ZXJlZFtvYmpba2V5XV0gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShrZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIG9ialtrZXldKSArIFwiO1wiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoa2V5ID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBiYWJlbC1wbHVnaW4tZW1vdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIGhhbmRsZUludGVycG9sYXRpb24uY2FsbCh0aGlzLCBvYmpba2V5XSwgZmFsc2UpICsgXCJ9XCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgb2JqLmZvckVhY2goX3JlZiwgdGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChfcmVmMiwgdGhpcyk7XG4gICAgfVxuXG4gICAgb2JqZWN0VG9TdHJpbmdDYWNoZS5zZXQob2JqLCBzdHJpbmcpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICB2YXIgbmFtZTtcbiAgdmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqOy9nO1xuXG4gIHZhciBjcmVhdGVTdHlsZXMgPSBmdW5jdGlvbiBjcmVhdGVTdHlsZXMoc3RyaW5ncykge1xuICAgIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgICB2YXIgc3R5bGVzID0gJyc7XG4gICAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG5cbiAgICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uLmNhbGwodGhpcywgc3RyaW5ncywgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZXMgKz0gc3RyaW5nc1swXTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgaW50ZXJwb2xhdGlvbnMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgaW50ZXJwb2xhdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIGludGVycG9sYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVycG9sYXRpb24sIGkpIHtcbiAgICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uLmNhbGwodGhpcywgaW50ZXJwb2xhdGlvbiwgc3R5bGVzLmNoYXJDb2RlQXQoc3R5bGVzLmxlbmd0aCAtIDEpID09PSA0NiAvLyAuXG4gICAgICApO1xuXG4gICAgICBpZiAoc3RyaW5nTW9kZSA9PT0gdHJ1ZSAmJiBzdHJpbmdzW2kgKyAxXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHN0eWxlcyArPSBzdHJpbmdzW2kgKyAxXTtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgICBzdHlsZXMgPSBzdHlsZXMucmVwbGFjZShsYWJlbFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCwgcDEpIHtcbiAgICAgIGlkZW50aWZpZXJOYW1lICs9IFwiLVwiICsgcDE7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gICAgbmFtZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZW1vdGlvbl91dGlsc19fW1wiY1wiIC8qIGhhc2hTdHJpbmcgKi9dKShzdHlsZXMgKyBpZGVudGlmaWVyTmFtZSkgKyBpZGVudGlmaWVyTmFtZTtcbiAgICByZXR1cm4gc3R5bGVzO1xuICB9O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIHNvdXJjZU1hcFJlZ0V4ID0gL1xcL1xcKiNcXHNzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb25cXC9qc29uO1xcUytcXHMrXFwqXFwvLztcbiAgICB2YXIgb2xkU3R5bGlzID0gc3R5bGlzO1xuXG4gICAgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHNlbGVjdG9yLCBzdHlsZXMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBzb3VyY2VNYXBSZWdFeC5leGVjKHN0eWxlcyk7XG4gICAgICBjdXJyZW50U291cmNlTWFwID0gcmVzdWx0ID8gcmVzdWx0WzBdIDogJyc7XG4gICAgICBvbGRTdHlsaXMoc2VsZWN0b3IsIHN0eWxlcyk7XG4gICAgICBjdXJyZW50U291cmNlTWFwID0gJyc7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydChzY29wZSwgc3R5bGVzKSB7XG4gICAgaWYgKGNhY2hlcy5pbnNlcnRlZFtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdXJyZW50ID0gJyc7XG4gICAgICBzdHlsaXMoc2NvcGUsIHN0eWxlcyk7XG4gICAgICBjYWNoZXMuaW5zZXJ0ZWRbbmFtZV0gPSBjdXJyZW50O1xuICAgIH1cbiAgfVxuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgdmFyIHN0eWxlcyA9IGNyZWF0ZVN0eWxlcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHZhciBzZWxlY3RvciA9IGtleSArIFwiLVwiICsgbmFtZTtcblxuICAgIGlmIChjYWNoZXMucmVnaXN0ZXJlZFtzZWxlY3Rvcl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVzLnJlZ2lzdGVyZWRbc2VsZWN0b3JdID0gc3R5bGVzO1xuICAgIH1cblxuICAgIGluc2VydChcIi5cIiArIHNlbGVjdG9yLCBzdHlsZXMpO1xuICAgIHJldHVybiBzZWxlY3RvcjtcbiAgfTtcblxuICB2YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICAgIHZhciBzdHlsZXMgPSBjcmVhdGVTdHlsZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB2YXIgYW5pbWF0aW9uID0gXCJhbmltYXRpb24tXCIgKyBuYW1lO1xuICAgIGluc2VydCgnJywgXCJAa2V5ZnJhbWVzIFwiICsgYW5pbWF0aW9uICsgXCJ7XCIgKyBzdHlsZXMgKyBcIn1cIik7XG4gICAgcmV0dXJuIGFuaW1hdGlvbjtcbiAgfTtcblxuICB2YXIgaW5qZWN0R2xvYmFsID0gZnVuY3Rpb24gaW5qZWN0R2xvYmFsKCkge1xuICAgIHZhciBzdHlsZXMgPSBjcmVhdGVTdHlsZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpbnNlcnQoJycsIHN0eWxlcyk7XG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gICAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICAgIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgIGlmIChjYWNoZXMucmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlKGNsYXNzTmFtZSwgc291cmNlTWFwKSB7XG4gICAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gICAgaWYgKHJlZ2lzdGVyZWRTdHlsZXMubGVuZ3RoIDwgMikge1xuICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmF3Q2xhc3NOYW1lICsgY3NzKHJlZ2lzdGVyZWRTdHlsZXMsIHNvdXJjZU1hcCk7XG4gIH1cblxuICBmdW5jdGlvbiBjeCgpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNsYXNzTmFtZXMgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGNsYXNzTmFtZXNbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2xhc3NuYW1lcyhjbGFzc05hbWVzKSk7XG4gIH1cblxuICBmdW5jdGlvbiBoeWRyYXRlU2luZ2xlSWQoaWQpIHtcbiAgICBjYWNoZXMuaW5zZXJ0ZWRbaWRdID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGh5ZHJhdGUoaWRzKSB7XG4gICAgaWRzLmZvckVhY2goaHlkcmF0ZVNpbmdsZUlkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIGlmIChpc0Jyb3dzZXIpIHtcbiAgICAgIHNoZWV0LmZsdXNoKCk7XG4gICAgICBzaGVldC5pbmplY3QoKTtcbiAgICB9XG5cbiAgICBjYWNoZXMuaW5zZXJ0ZWQgPSB7fTtcbiAgICBjYWNoZXMucmVnaXN0ZXJlZCA9IHt9O1xuICB9XG5cbiAgZnVuY3Rpb24gX3JlZjMobm9kZSkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBzaGVldC50YWdzWzBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIHNoZWV0LnRhZ3NbMF0pOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvbi1cIiArIGtleSkuc3BsaXQoJyAnKS5mb3JFYWNoKGh5ZHJhdGVTaW5nbGVJZCk7XG4gIH1cblxuICBpZiAoaXNCcm93c2VyKSB7XG4gICAgdmFyIGNodW5rcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1lbW90aW9uLVwiICsga2V5ICsgXCJdXCIpO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoY2h1bmtzLCBfcmVmMyk7XG4gIH1cblxuICB2YXIgZW1vdGlvbiA9IHtcbiAgICBmbHVzaDogZmx1c2gsXG4gICAgaHlkcmF0ZTogaHlkcmF0ZSxcbiAgICBjeDogY3gsXG4gICAgbWVyZ2U6IG1lcmdlLFxuICAgIGdldFJlZ2lzdGVyZWRTdHlsZXM6IGdldFJlZ2lzdGVyZWRTdHlsZXMsXG4gICAgaW5qZWN0R2xvYmFsOiBpbmplY3RHbG9iYWwsXG4gICAga2V5ZnJhbWVzOiBrZXlmcmFtZXMsXG4gICAgY3NzOiBjc3MsXG4gICAgc2hlZXQ6IHNoZWV0LFxuICAgIGNhY2hlczogY2FjaGVzXG4gIH07XG4gIHJldHVybiBlbW90aW9uO1xufVxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNyZWF0ZUVtb3Rpb24pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguZXMuanMubWFwXG5cbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KSkpXG5cbi8qKiovIH0pLFxuLyogMTU2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuXHQgdHJ1ZSA/IChtb2R1bGVbJ2V4cG9ydHMnXSA9IGZhY3RvcnkoKSkgOlxuXHRcdHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSA/IGRlZmluZShmYWN0b3J5KCkpIDpcblx0XHRcdCh3aW5kb3dbJ3N0eWxpc1J1bGVTaGVldCddID0gZmFjdG9yeSgpKVxufShmdW5jdGlvbiAoKSB7XG5cblx0J3VzZSBzdHJpY3QnXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbnNlcnRSdWxlKSB7XG5cdFx0dmFyIGRlbGltaXRlciA9ICcvKnwqLydcblx0XHR2YXIgbmVlZGxlID0gZGVsaW1pdGVyKyd9J1xuXG5cdFx0ZnVuY3Rpb24gdG9TaGVldCAoYmxvY2spIHtcblx0XHRcdGlmIChibG9jaylcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRpbnNlcnRSdWxlKGJsb2NrICsgJ30nKVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdH1cblxuXHRcdHJldHVybiBmdW5jdGlvbiBydWxlU2hlZXQgKGNvbnRleHQsIGNvbnRlbnQsIHNlbGVjdG9ycywgcGFyZW50cywgbGluZSwgY29sdW1uLCBsZW5ndGgsIGF0LCBkZXB0aCkge1xuXHRcdFx0c3dpdGNoIChjb250ZXh0KSB7XG5cdFx0XHRcdC8vIHByb3BlcnR5XG5cdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHQvLyBAaW1wb3J0XG5cdFx0XHRcdFx0aWYgKGRlcHRoID09PSAwICYmIGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gNjQpXG5cdFx0XHRcdFx0XHRpbnNlcnRSdWxlKGNvbnRlbnQpXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0Ly8gc2VsZWN0b3Jcblx0XHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRcdGlmIChhdCA9PT0gMClcblx0XHRcdFx0XHRcdHJldHVybiBjb250ZW50ICsgZGVsaW1pdGVyXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0Ly8gYXQtcnVsZVxuXHRcdFx0XHRjYXNlIDM6XG5cdFx0XHRcdFx0c3dpdGNoIChhdCkge1xuXHRcdFx0XHRcdFx0Ly8gQGZvbnQtZmFjZSwgQHBhZ2Vcblx0XHRcdFx0XHRcdGNhc2UgMTAyOlxuXHRcdFx0XHRcdFx0Y2FzZSAxMTI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbnNlcnRSdWxlKHNlbGVjdG9yc1swXStjb250ZW50KSwgJydcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb250ZW50ICsgZGVsaW1pdGVyXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIC0yOlxuXHRcdFx0XHRcdGNvbnRlbnQuc3BsaXQobmVlZGxlKS5mb3JFYWNoKHRvU2hlZXQpXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59KSlcblxuXG4vKioqLyB9KSxcbi8qIDE1NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lbW90aW9uX3V0aWxzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fKTtcblxuXG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxudmFyIGNoYW5uZWwgPSAnX19FTU9USU9OX1RIRU1JTkdfXyc7XG5cbnZhciBfY29udGV4dFR5cGVzO1xuXG52YXIgY29udGV4dFR5cGVzID0gKF9jb250ZXh0VHlwZXMgPSB7fSwgX2NvbnRleHRUeXBlc1tjaGFubmVsXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLm9iamVjdCwgX2NvbnRleHRUeXBlcyk7XG5cbmZ1bmN0aW9uIHNldFRoZW1lKHRoZW1lKSB7XG4gIHRoaXMuc2V0U3RhdGUoe1xuICAgIHRoZW1lOiB0aGVtZVxuICB9KTtcbn1cbnZhciByZWFjdFByb3BzUmVnZXggPSAvXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8YWNjZXB0fGFjY2VwdENoYXJzZXR8YWNjZXNzS2V5fGFjdGlvbnxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYXJTZXR8Y2hlY2tlZHxjaXRlfGNsYXNzSUR8Y2xhc3NOYW1lfGNvbHN8Y29sU3Bhbnxjb250ZW50fGNvbnRlbnRFZGl0YWJsZXxjb250ZXh0TWVudXxjb250cm9sc3xjb250cm9sc0xpc3R8Y29vcmRzfGNyb3NzT3JpZ2lufGRhdGF8ZGF0ZVRpbWV8ZGVmYXVsdHxkZWZlcnxkaXJ8ZGlzYWJsZWR8ZG93bmxvYWR8ZHJhZ2dhYmxlfGVuY1R5cGV8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8cmVzdWx0c3xzZWN1cml0eXx1bnNlbGVjdGFibGV8YWNjZW50SGVpZ2h0fGFjY3VtdWxhdGV8YWRkaXRpdmV8YWxpZ25tZW50QmFzZWxpbmV8YWxsb3dSZW9yZGVyfGFscGhhYmV0aWN8YW1wbGl0dWRlfGFyYWJpY0Zvcm18YXNjZW50fGF0dHJpYnV0ZU5hbWV8YXR0cmlidXRlVHlwZXxhdXRvUmV2ZXJzZXxhemltdXRofGJhc2VGcmVxdWVuY3l8YmFzZWxpbmVTaGlmdHxiYXNlUHJvZmlsZXxiYm94fGJlZ2lufGJpYXN8Ynl8Y2FsY01vZGV8Y2FwSGVpZ2h0fGNsaXB8Y2xpcFBhdGhVbml0c3xjbGlwUGF0aHxjbGlwUnVsZXxjb2xvckludGVycG9sYXRpb258Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc3xjb2xvclByb2ZpbGV8Y29sb3JSZW5kZXJpbmd8Y29udGVudFNjcmlwdFR5cGV8Y29udGVudFN0eWxlVHlwZXxjdXJzb3J8Y3h8Y3l8ZHxkZWNlbGVyYXRlfGRlc2NlbnR8ZGlmZnVzZUNvbnN0YW50fGRpcmVjdGlvbnxkaXNwbGF5fGRpdmlzb3J8ZG9taW5hbnRCYXNlbGluZXxkdXJ8ZHh8ZHl8ZWRnZU1vZGV8ZWxldmF0aW9ufGVuYWJsZUJhY2tncm91bmR8ZW5kfGV4cG9uZW50fGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWR8ZmlsbHxmaWxsT3BhY2l0eXxmaWxsUnVsZXxmaWx0ZXJ8ZmlsdGVyUmVzfGZpbHRlclVuaXRzfGZsb29kQ29sb3J8Zmxvb2RPcGFjaXR5fGZvY3VzYWJsZXxmb250RmFtaWx5fGZvbnRTaXplfGZvbnRTaXplQWRqdXN0fGZvbnRTdHJldGNofGZvbnRTdHlsZXxmb250VmFyaWFudHxmb250V2VpZ2h0fGZvcm1hdHxmcm9tfGZyfGZ4fGZ5fGcxfGcyfGdseXBoTmFtZXxnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbHxnbHlwaE9yaWVudGF0aW9uVmVydGljYWx8Z2x5cGhSZWZ8Z3JhZGllbnRUcmFuc2Zvcm18Z3JhZGllbnRVbml0c3xoYW5naW5nfGhvcml6QWR2WHxob3Jpek9yaWdpblh8aWRlb2dyYXBoaWN8aW1hZ2VSZW5kZXJpbmd8aW58aW4yfGludGVyY2VwdHxrfGsxfGsyfGszfGs0fGtlcm5lbE1hdHJpeHxrZXJuZWxVbml0TGVuZ3RofGtlcm5pbmd8a2V5UG9pbnRzfGtleVNwbGluZXN8a2V5VGltZXN8bGVuZ3RoQWRqdXN0fGxldHRlclNwYWNpbmd8bGlnaHRpbmdDb2xvcnxsaW1pdGluZ0NvbmVBbmdsZXxsb2NhbHxtYXJrZXJFbmR8bWFya2VyTWlkfG1hcmtlclN0YXJ0fG1hcmtlckhlaWdodHxtYXJrZXJVbml0c3xtYXJrZXJXaWR0aHxtYXNrfG1hc2tDb250ZW50VW5pdHN8bWFza1VuaXRzfG1hdGhlbWF0aWNhbHxtb2RlfG51bU9jdGF2ZXN8b2Zmc2V0fG9wYWNpdHl8b3BlcmF0b3J8b3JkZXJ8b3JpZW50fG9yaWVudGF0aW9ufG9yaWdpbnxvdmVyZmxvd3xvdmVybGluZVBvc2l0aW9ufG92ZXJsaW5lVGhpY2tuZXNzfHBhbm9zZTF8cGFpbnRPcmRlcnxwYXRoTGVuZ3RofHBhdHRlcm5Db250ZW50VW5pdHN8cGF0dGVyblRyYW5zZm9ybXxwYXR0ZXJuVW5pdHN8cG9pbnRlckV2ZW50c3xwb2ludHN8cG9pbnRzQXRYfHBvaW50c0F0WXxwb2ludHNBdFp8cHJlc2VydmVBbHBoYXxwcmVzZXJ2ZUFzcGVjdFJhdGlvfHByaW1pdGl2ZVVuaXRzfHJ8cmFkaXVzfHJlZlh8cmVmWXxyZW5kZXJpbmdJbnRlbnR8cmVwZWF0Q291bnR8cmVwZWF0RHVyfHJlcXVpcmVkRXh0ZW5zaW9uc3xyZXF1aXJlZEZlYXR1cmVzfHJlc3RhcnR8cmVzdWx0fHJvdGF0ZXxyeHxyeXxzY2FsZXxzZWVkfHNoYXBlUmVuZGVyaW5nfHNsb3BlfHNwYWNpbmd8c3BlY3VsYXJDb25zdGFudHxzcGVjdWxhckV4cG9uZW50fHNwZWVkfHNwcmVhZE1ldGhvZHxzdGFydE9mZnNldHxzdGREZXZpYXRpb258c3RlbWh8c3RlbXZ8c3RpdGNoVGlsZXN8c3RvcENvbG9yfHN0b3BPcGFjaXR5fHN0cmlrZXRocm91Z2hQb3NpdGlvbnxzdHJpa2V0aHJvdWdoVGhpY2tuZXNzfHN0cmluZ3xzdHJva2V8c3Ryb2tlRGFzaGFycmF5fHN0cm9rZURhc2hvZmZzZXR8c3Ryb2tlTGluZWNhcHxzdHJva2VMaW5lam9pbnxzdHJva2VNaXRlcmxpbWl0fHN0cm9rZU9wYWNpdHl8c3Ryb2tlV2lkdGh8c3VyZmFjZVNjYWxlfHN5c3RlbUxhbmd1YWdlfHRhYmxlVmFsdWVzfHRhcmdldFh8dGFyZ2V0WXx0ZXh0QW5jaG9yfHRleHREZWNvcmF0aW9ufHRleHRSZW5kZXJpbmd8dGV4dExlbmd0aHx0b3x0cmFuc2Zvcm18dTF8dTJ8dW5kZXJsaW5lUG9zaXRpb258dW5kZXJsaW5lVGhpY2tuZXNzfHVuaWNvZGV8dW5pY29kZUJpZGl8dW5pY29kZVJhbmdlfHVuaXRzUGVyRW18dkFscGhhYmV0aWN8dkhhbmdpbmd8dklkZW9ncmFwaGljfHZNYXRoZW1hdGljYWx8dmFsdWVzfHZlY3RvckVmZmVjdHx2ZXJzaW9ufHZlcnRBZHZZfHZlcnRPcmlnaW5YfHZlcnRPcmlnaW5ZfHZpZXdCb3h8dmlld1RhcmdldHx2aXNpYmlsaXR5fHdpZHRoc3x3b3JkU3BhY2luZ3x3cml0aW5nTW9kZXx4fHhIZWlnaHR8eDF8eDJ8eENoYW5uZWxTZWxlY3Rvcnx4bGlua0FjdHVhdGV8eGxpbmtBcmNyb2xlfHhsaW5rSHJlZnx4bGlua1JvbGV8eGxpbmtTaG93fHhsaW5rVGl0bGV8eGxpbmtUeXBlfHhtbEJhc2V8eG1sbnN8eG1sbnNYbGlua3x4bWxMYW5nfHhtbFNwYWNlfHl8eTF8eTJ8eUNoYW5uZWxTZWxlY3Rvcnx6fHpvb21BbmRQYW4pfChvbltBLVpdLiopfCgoZGF0YXxhcmlhKS0uKikpJC87XG52YXIgdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lbW90aW9uX3V0aWxzX19bXCJkXCIgLyogbWVtb2l6ZSAqL10pKGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHJlYWN0UHJvcHNSZWdleC50ZXN0KGtleSk7XG59KTtcbnZhciB0ZXN0T21pdFByb3BzT25Db21wb25lbnQgPSBmdW5jdGlvbiB0ZXN0T21pdFByb3BzT25Db21wb25lbnQoa2V5KSB7XG4gIHJldHVybiBrZXkgIT09ICd0aGVtZScgJiYga2V5ICE9PSAnaW5uZXJSZWYnO1xufTtcbnZhciB0ZXN0QWx3YXlzVHJ1ZSA9IGZ1bmN0aW9uIHRlc3RBbHdheXNUcnVlKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgb21pdEFzc2lnbiA9IGZ1bmN0aW9uIG9taXRBc3NpZ24odGVzdEZuLCB0YXJnZXQpIHtcbiAgdmFyIGkgPSAyO1xuICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIHZhciBfa2V5ID0gdm9pZCAwO1xuXG4gICAgZm9yIChfa2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKHRlc3RGbihfa2V5KSkge1xuICAgICAgICB0YXJnZXRbX2tleV0gPSBzb3VyY2VbX2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbmZ1bmN0aW9uIF9jb21wb25lbnRXaWxsTW91bnQoKSB7XG4gIGlmICh0aGlzLmNvbnRleHRbY2hhbm5lbF0gIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUgPSB0aGlzLmNvbnRleHRbY2hhbm5lbF0uc3Vic2NyaWJlKHNldFRoZW1lLmJpbmQodGhpcykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgaWYgKHRoaXMudW5zdWJzY3JpYmUgIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuY29udGV4dFtjaGFubmVsXS51bnN1YnNjcmliZSh0aGlzLnVuc3Vic2NyaWJlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHkpIHtcbiAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgIC8vIHJlYWN0LWhvdC1sb2FkZXIgdHJpZXMgdG8gYWNjZXNzIHRoaXMgc3R1ZmZcbiAgICBjYXNlICdfX3Byb3RvX18nOlxuICAgIGNhc2UgJ25hbWUnOlxuICAgIGNhc2UgJ3Byb3RvdHlwZSc6XG4gICAgY2FzZSAnZGlzcGxheU5hbWUnOlxuICAgICAge1xuICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5XTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSdyZSB0cnlpbmcgdG8gdXNlIHRoZSBzdHlsZWQgc2hvcnRoYW5kIHdpdGhvdXQgYmFiZWwtcGx1Z2luLWVtb3Rpb24uXCIgKyAoXCJcXG5QbGVhc2UgaW5zdGFsbCBhbmQgc2V0dXAgYmFiZWwtcGx1Z2luLWVtb3Rpb24gb3IgdXNlIHRoZSBmdW5jdGlvbiBjYWxsIHN5bnRheChgc3R5bGVkKCdcIiArIHByb3BlcnR5ICsgXCInKWAgaW5zdGVhZCBvZiBgc3R5bGVkLlwiICsgcHJvcGVydHkgKyBcImApXCIpKTtcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbW90aW9uU3R5bGVkKGVtb3Rpb24sIHZpZXcpIHtcbiAgdmFyIF9jcmVhdGVTdHlsZWQgPSBmdW5jdGlvbiBjcmVhdGVTdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0YWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBhIHN0eWxlZCBlbGVtZW50IHdpdGggYW4gdW5kZWZpbmVkIGNvbXBvbmVudC5cXG5Zb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGltcG9ydCBpdC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3RhdGljQ2xhc3NOYW1lO1xuICAgIHZhciBpZGVudGlmaWVyTmFtZTtcbiAgICB2YXIgc3RhYmxlQ2xhc3NOYW1lO1xuXG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3RhdGljQ2xhc3NOYW1lID0gb3B0aW9ucy5lO1xuICAgICAgaWRlbnRpZmllck5hbWUgPSBvcHRpb25zLmxhYmVsO1xuICAgICAgc3RhYmxlQ2xhc3NOYW1lID0gb3B0aW9ucy50YXJnZXQ7XG4gICAgfVxuXG4gICAgdmFyIGlzUmVhbCA9IHRhZy5fX2Vtb3Rpb25fcmVhbCA9PT0gdGFnO1xuICAgIHZhciBiYXNlVGFnID0gc3RhdGljQ2xhc3NOYW1lID09PSB1bmRlZmluZWQgPyBpc1JlYWwgJiYgdGFnLl9fZW1vdGlvbl9iYXNlIHx8IHRhZyA6IHRhZztcbiAgICB2YXIgb21pdEZuID0gdHlwZW9mIGJhc2VUYWcgPT09ICdzdHJpbmcnICYmIGJhc2VUYWcuY2hhckF0KDApID09PSBiYXNlVGFnLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpID8gdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnIDogdGVzdE9taXRQcm9wc09uQ29tcG9uZW50O1xuXG4gICAgZnVuY3Rpb24gX3ZhbHVlKCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc3RhYmxlQ2xhc3NOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuICdOT19DT01QT05FTlRfU0VMRUNUT1InO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gXCIuXCIgKyBzdGFibGVDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgdmFyIHN0eWxlcyA9IGlzUmVhbCAmJiB0YWdbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2Vtb3Rpb25fdXRpbHNfX1tcImFcIiAvKiBTVFlMRVNfS0VZICovXV0gIT09IHVuZGVmaW5lZCA/IHRhZ1tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZW1vdGlvbl91dGlsc19fW1wiYVwiIC8qIFNUWUxFU19LRVkgKi9dXS5zbGljZSgwKSA6IFtdO1xuXG4gICAgICBpZiAoaWRlbnRpZmllck5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdHlsZXMucHVzaChcImxhYmVsOlwiICsgaWRlbnRpZmllck5hbWUgKyBcIjtcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0aWNDbGFzc05hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJnc1swXSA9PSBudWxsIHx8IGFyZ3NbMF0ucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHlsZXMucHVzaC5hcHBseShzdHlsZXMsIGFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0eWxlcy5wdXNoKGFyZ3NbMF1bMF0pO1xuICAgICAgICAgIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgICAgICAgICB2YXIgaSA9IDE7XG5cbiAgICAgICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBzdHlsZXMucHVzaChhcmdzW2ldLCBhcmdzWzBdW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3JlbmRlcigpIHtcbiAgICAgICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIHN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgdGhpcy5tZXJnZWRQcm9wcyA9IG9taXRBc3NpZ24odGVzdEFsd2F5c1RydWUsIHt9LCBwcm9wcywge1xuICAgICAgICAgIHRoZW1lOiBzdGF0ZSAhPT0gbnVsbCAmJiBzdGF0ZS50aGVtZSB8fCBwcm9wcy50aGVtZSB8fCB7fVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuICAgICAgICB2YXIgY2xhc3NJbnRlcnBvbGF0aW9ucyA9IFtdO1xuXG4gICAgICAgIGlmIChwcm9wcy5jbGFzc05hbWUpIHtcbiAgICAgICAgICBpZiAoc3RhdGljQ2xhc3NOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBlbW90aW9uLmdldFJlZ2lzdGVyZWRTdHlsZXMoY2xhc3NJbnRlcnBvbGF0aW9ucywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xhc3NOYW1lICs9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0aWNDbGFzc05hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNsYXNzTmFtZSArPSBlbW90aW9uLmNzcy5hcHBseSh0aGlzLCBzdHlsZXMuY29uY2F0KGNsYXNzSW50ZXJwb2xhdGlvbnMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGFzc05hbWUgKz0gc3RhdGljQ2xhc3NOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YWJsZUNsYXNzTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgc3RhYmxlQ2xhc3NOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZpZXcuY3JlYXRlRWxlbWVudChiYXNlVGFnLCBvbWl0QXNzaWduKG9taXRGbiwge30sIHByb3BzLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgICAgcmVmOiBwcm9wcy5pbm5lclJlZlxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBTdHlsZWQgPVxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgZnVuY3Rpb24gKF92aWV3JENvbXBvbmVudCkge1xuICAgICAgICBfaW5oZXJpdHNMb29zZShTdHlsZWQsIF92aWV3JENvbXBvbmVudCk7XG5cbiAgICAgICAgZnVuY3Rpb24gU3R5bGVkKCkge1xuICAgICAgICAgIHJldHVybiBfdmlldyRDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9wcm90byA9IFN0eWxlZC5wcm90b3R5cGU7XG4gICAgICAgIF9wcm90by5jb21wb25lbnRXaWxsTW91bnQgPSBfY29tcG9uZW50V2lsbE1vdW50O1xuICAgICAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBfY29tcG9uZW50V2lsbFVubW91bnQ7XG4gICAgICAgIF9wcm90by5yZW5kZXIgPSBfcmVuZGVyO1xuICAgICAgICByZXR1cm4gU3R5bGVkO1xuICAgICAgfSh2aWV3LkNvbXBvbmVudCk7XG5cbiAgICAgIFN0eWxlZC5kaXNwbGF5TmFtZSA9IGlkZW50aWZpZXJOYW1lICE9PSB1bmRlZmluZWQgPyBpZGVudGlmaWVyTmFtZSA6IFwiU3R5bGVkKFwiICsgKHR5cGVvZiBiYXNlVGFnID09PSAnc3RyaW5nJyA/IGJhc2VUYWcgOiBiYXNlVGFnLmRpc3BsYXlOYW1lIHx8IGJhc2VUYWcubmFtZSB8fCAnQ29tcG9uZW50JykgKyBcIilcIjtcbiAgICAgIFN0eWxlZC5jb250ZXh0VHlwZXMgPSBjb250ZXh0VHlwZXM7XG4gICAgICBTdHlsZWRbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2Vtb3Rpb25fdXRpbHNfX1tcImFcIiAvKiBTVFlMRVNfS0VZICovXV0gPSBzdHlsZXM7XG4gICAgICBTdHlsZWQuX19lbW90aW9uX2Jhc2UgPSBiYXNlVGFnO1xuICAgICAgU3R5bGVkLl9fZW1vdGlvbl9yZWFsID0gU3R5bGVkO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0eWxlZCwgJ3RvU3RyaW5nJywge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IF92YWx1ZVxuICAgICAgfSk7XG5cbiAgICAgIFN0eWxlZC53aXRoQ29tcG9uZW50ID0gZnVuY3Rpb24gKG5leHRUYWcsIG5leHRPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlU3R5bGVkKG5leHRUYWcsIG5leHRPcHRpb25zICE9PSB1bmRlZmluZWQgPyAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIG9taXRBc3NpZ24odGVzdEFsd2F5c1RydWUsIHt9LCBvcHRpb25zLCBuZXh0T3B0aW9ucykgOiBvcHRpb25zKS5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFN0eWxlZDtcbiAgICB9O1xuICB9O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBfY3JlYXRlU3R5bGVkID0gbmV3IFByb3h5KF9jcmVhdGVTdHlsZWQsIHtcbiAgICAgIGdldDogX2dldFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIF9jcmVhdGVTdHlsZWQ7XG59XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY3JlYXRlRW1vdGlvblN0eWxlZCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lcy5qcy5tYXBcblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcblxuLyoqKi8gfSksXG4vKiAxNTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18sIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fOy8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS45LjFcbihmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB2YXIgZ2V0U2Nyb2xsYmFyV2lkdGgsIHNjcm9sbGJhcldpZHRoO1xuXG4gIHNjcm9sbGJhcldpZHRoID0gbnVsbDtcblxuICBnZXRTY3JvbGxiYXJXaWR0aCA9IGZ1bmN0aW9uKHJlY2FsY3VsYXRlKSB7XG4gICAgdmFyIGRpdjEsIGRpdjI7XG4gICAgaWYgKHJlY2FsY3VsYXRlID09IG51bGwpIHtcbiAgICAgIHJlY2FsY3VsYXRlID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICgoc2Nyb2xsYmFyV2lkdGggIT0gbnVsbCkgJiYgIXJlY2FsY3VsYXRlKSB7XG4gICAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGg7XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBkaXYxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2MiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdjEuc3R5bGUud2lkdGggPSBkaXYyLnN0eWxlLndpZHRoID0gZGl2MS5zdHlsZS5oZWlnaHQgPSBkaXYyLnN0eWxlLmhlaWdodCA9ICcxMDBweCc7XG4gICAgZGl2MS5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuICAgIGRpdjIuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdjEpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2Mik7XG4gICAgc2Nyb2xsYmFyV2lkdGggPSBNYXRoLmFicyhkaXYxLnNjcm9sbEhlaWdodCAtIGRpdjIuc2Nyb2xsSGVpZ2h0KTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdjEpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2Mik7XG4gICAgcmV0dXJuIHNjcm9sbGJhcldpZHRoO1xuICB9O1xuXG4gIGlmICh0cnVlKSB7XG4gICAgIShfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fID0gW10sIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGdldFNjcm9sbGJhcldpZHRoO1xuICAgIH0pLmFwcGx5KGV4cG9ydHMsIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18pLFxuXHRcdFx0XHRfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyAhPT0gdW5kZWZpbmVkICYmIChtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBnZXRTY3JvbGxiYXJXaWR0aDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmdldFNjcm9sbGJhcldpZHRoID0gZ2V0U2Nyb2xsYmFyV2lkdGg7XG4gIH1cblxufSkuY2FsbCh0aGlzKTtcblxuXG4vKioqLyB9KSxcbi8qIDE1OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXzsvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMS0yMDE0IEZlbGl4IEduYXNzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHA6Ly9zcGluLmpzLm9yZy9cbiAqXG4gKiBFeGFtcGxlOlxuICAgIHZhciBvcHRzID0ge1xuICAgICAgbGluZXM6IDEyICAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgbGluZXMgdG8gZHJhd1xuICAgICwgbGVuZ3RoOiA3ICAgICAgICAgICAgIC8vIFRoZSBsZW5ndGggb2YgZWFjaCBsaW5lXG4gICAgLCB3aWR0aDogNSAgICAgICAgICAgICAgLy8gVGhlIGxpbmUgdGhpY2tuZXNzXG4gICAgLCByYWRpdXM6IDEwICAgICAgICAgICAgLy8gVGhlIHJhZGl1cyBvZiB0aGUgaW5uZXIgY2lyY2xlXG4gICAgLCBzY2FsZTogMS4wICAgICAgICAgICAgLy8gU2NhbGVzIG92ZXJhbGwgc2l6ZSBvZiB0aGUgc3Bpbm5lclxuICAgICwgY29ybmVyczogMSAgICAgICAgICAgIC8vIFJvdW5kbmVzcyAoMC4uMSlcbiAgICAsIGNvbG9yOiAnIzAwMCcgICAgICAgICAvLyAjcmdiIG9yICNycmdnYmJcbiAgICAsIG9wYWNpdHk6IDEvNCAgICAgICAgICAvLyBPcGFjaXR5IG9mIHRoZSBsaW5lc1xuICAgICwgcm90YXRlOiAwICAgICAgICAgICAgIC8vIFJvdGF0aW9uIG9mZnNldFxuICAgICwgZGlyZWN0aW9uOiAxICAgICAgICAgIC8vIDE6IGNsb2Nrd2lzZSwgLTE6IGNvdW50ZXJjbG9ja3dpc2VcbiAgICAsIHNwZWVkOiAxICAgICAgICAgICAgICAvLyBSb3VuZHMgcGVyIHNlY29uZFxuICAgICwgdHJhaWw6IDEwMCAgICAgICAgICAgIC8vIEFmdGVyZ2xvdyBwZXJjZW50YWdlXG4gICAgLCBmcHM6IDIwICAgICAgICAgICAgICAgLy8gRnJhbWVzIHBlciBzZWNvbmQgd2hlbiB1c2luZyBzZXRUaW1lb3V0KClcbiAgICAsIHpJbmRleDogMmU5ICAgICAgICAgICAvLyBVc2UgYSBoaWdoIHotaW5kZXggYnkgZGVmYXVsdFxuICAgICwgY2xhc3NOYW1lOiAnc3Bpbm5lcicgIC8vIENTUyBjbGFzcyB0byBhc3NpZ24gdG8gdGhlIGVsZW1lbnRcbiAgICAsIHRvcDogJzUwJScgICAgICAgICAgICAvLyBjZW50ZXIgdmVydGljYWxseVxuICAgICwgbGVmdDogJzUwJScgICAgICAgICAgIC8vIGNlbnRlciBob3Jpem9udGFsbHlcbiAgICAsIHNoYWRvdzogZmFsc2UgICAgICAgICAvLyBXaGV0aGVyIHRvIHJlbmRlciBhIHNoYWRvd1xuICAgICwgaHdhY2NlbDogZmFsc2UgICAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiAobWlnaHQgYmUgYnVnZ3kpXG4gICAgLCBwb3NpdGlvbjogJ2Fic29sdXRlJyAgLy8gRWxlbWVudCBwb3NpdGlvbmluZ1xuICAgIH1cbiAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZvbycpXG4gICAgdmFyIHNwaW5uZXIgPSBuZXcgU3Bpbm5lcihvcHRzKS5zcGluKHRhcmdldClcbiAqL1xuOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXG4gIC8qIENvbW1vbkpTICovXG4gIGlmICh0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKVxuXG4gIC8qIEFNRCBtb2R1bGUgKi9cbiAgZWxzZSBpZiAodHJ1ZSkgIShfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18gPSAoZmFjdG9yeSksXG5cdFx0XHRcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKHR5cGVvZiBfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18gPT09ICdmdW5jdGlvbicgP1xuXHRcdFx0XHQoX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fLmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXywgZXhwb3J0cywgbW9kdWxlKSkgOlxuXHRcdFx0XHRfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18pLFxuXHRcdFx0XHRfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyAhPT0gdW5kZWZpbmVkICYmIChtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fKSlcblxuICAvKiBCcm93c2VyIGdsb2JhbCAqL1xuICBlbHNlIHJvb3QuU3Bpbm5lciA9IGZhY3RvcnkoKVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gIFwidXNlIHN0cmljdFwiXG5cbiAgdmFyIHByZWZpeGVzID0gWyd3ZWJraXQnLCAnTW96JywgJ21zJywgJ08nXSAvKiBWZW5kb3IgcHJlZml4ZXMgKi9cbiAgICAsIGFuaW1hdGlvbnMgPSB7fSAvKiBBbmltYXRpb24gcnVsZXMga2V5ZWQgYnkgdGhlaXIgbmFtZSAqL1xuICAgICwgdXNlQ3NzQW5pbWF0aW9ucyAvKiBXaGV0aGVyIHRvIHVzZSBDU1MgYW5pbWF0aW9ucyBvciBzZXRUaW1lb3V0ICovXG4gICAgLCBzaGVldCAvKiBBIHN0eWxlc2hlZXQgdG8gaG9sZCB0aGUgQGtleWZyYW1lIG9yIFZNTCBydWxlcy4gKi9cblxuICAvKipcbiAgICogVXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgZWxlbWVudHMuIElmIG5vIHRhZyBuYW1lIGlzIGdpdmVuLFxuICAgKiBhIERJViBpcyBjcmVhdGVkLiBPcHRpb25hbGx5IHByb3BlcnRpZXMgY2FuIGJlIHBhc3NlZC5cbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsICh0YWcsIHByb3ApIHtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyB8fCAnZGl2JylcbiAgICAgICwgblxuXG4gICAgZm9yIChuIGluIHByb3ApIGVsW25dID0gcHJvcFtuXVxuICAgIHJldHVybiBlbFxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgY2hpbGRyZW4gYW5kIHJldHVybnMgdGhlIHBhcmVudC5cbiAgICovXG4gIGZ1bmN0aW9uIGlucyAocGFyZW50IC8qIGNoaWxkMSwgY2hpbGQyLCAuLi4qLykge1xuICAgIGZvciAodmFyIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGFyZ3VtZW50c1tpXSlcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBvcGFjaXR5IGtleWZyYW1lIGFuaW1hdGlvbiBydWxlIGFuZCByZXR1cm5zIGl0cyBuYW1lLlxuICAgKiBTaW5jZSBtb3N0IG1vYmlsZSBXZWJraXRzIGhhdmUgdGltaW5nIGlzc3VlcyB3aXRoIGFuaW1hdGlvbi1kZWxheSxcbiAgICogd2UgY3JlYXRlIHNlcGFyYXRlIHJ1bGVzIGZvciBlYWNoIGxpbmUvc2VnbWVudC5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZEFuaW1hdGlvbiAoYWxwaGEsIHRyYWlsLCBpLCBsaW5lcykge1xuICAgIHZhciBuYW1lID0gWydvcGFjaXR5JywgdHJhaWwsIH5+KGFscGhhICogMTAwKSwgaSwgbGluZXNdLmpvaW4oJy0nKVxuICAgICAgLCBzdGFydCA9IDAuMDEgKyBpL2xpbmVzICogMTAwXG4gICAgICAsIHogPSBNYXRoLm1heCgxIC0gKDEtYWxwaGEpIC8gdHJhaWwgKiAoMTAwLXN0YXJ0KSwgYWxwaGEpXG4gICAgICAsIHByZWZpeCA9IHVzZUNzc0FuaW1hdGlvbnMuc3Vic3RyaW5nKDAsIHVzZUNzc0FuaW1hdGlvbnMuaW5kZXhPZignQW5pbWF0aW9uJykpLnRvTG93ZXJDYXNlKClcbiAgICAgICwgcHJlID0gcHJlZml4ICYmICctJyArIHByZWZpeCArICctJyB8fCAnJ1xuXG4gICAgaWYgKCFhbmltYXRpb25zW25hbWVdKSB7XG4gICAgICBzaGVldC5pbnNlcnRSdWxlKFxuICAgICAgICAnQCcgKyBwcmUgKyAna2V5ZnJhbWVzICcgKyBuYW1lICsgJ3snICtcbiAgICAgICAgJzAle29wYWNpdHk6JyArIHogKyAnfScgK1xuICAgICAgICBzdGFydCArICcle29wYWNpdHk6JyArIGFscGhhICsgJ30nICtcbiAgICAgICAgKHN0YXJ0KzAuMDEpICsgJyV7b3BhY2l0eToxfScgK1xuICAgICAgICAoc3RhcnQrdHJhaWwpICUgMTAwICsgJyV7b3BhY2l0eTonICsgYWxwaGEgKyAnfScgK1xuICAgICAgICAnMTAwJXtvcGFjaXR5OicgKyB6ICsgJ30nICtcbiAgICAgICAgJ30nLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpXG5cbiAgICAgIGFuaW1hdGlvbnNbbmFtZV0gPSAxXG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWVcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmllcyB2YXJpb3VzIHZlbmRvciBwcmVmaXhlcyBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgc3VwcG9ydGVkIHByb3BlcnR5LlxuICAgKi9cbiAgZnVuY3Rpb24gdmVuZG9yIChlbCwgcHJvcCkge1xuICAgIHZhciBzID0gZWwuc3R5bGVcbiAgICAgICwgcHBcbiAgICAgICwgaVxuXG4gICAgcHJvcCA9IHByb3AuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wLnNsaWNlKDEpXG4gICAgaWYgKHNbcHJvcF0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIHByb3BcbiAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBwID0gcHJlZml4ZXNbaV0rcHJvcFxuICAgICAgaWYgKHNbcHBdICE9PSB1bmRlZmluZWQpIHJldHVybiBwcFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG11bHRpcGxlIHN0eWxlIHByb3BlcnRpZXMgYXQgb25jZS5cbiAgICovXG4gIGZ1bmN0aW9uIGNzcyAoZWwsIHByb3ApIHtcbiAgICBmb3IgKHZhciBuIGluIHByb3ApIHtcbiAgICAgIGVsLnN0eWxlW3ZlbmRvcihlbCwgbikgfHwgbl0gPSBwcm9wW25dXG4gICAgfVxuXG4gICAgcmV0dXJuIGVsXG4gIH1cblxuICAvKipcbiAgICogRmlsbHMgaW4gZGVmYXVsdCB2YWx1ZXMuXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZSAob2JqKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZWYgPSBhcmd1bWVudHNbaV1cbiAgICAgIGZvciAodmFyIG4gaW4gZGVmKSB7XG4gICAgICAgIGlmIChvYmpbbl0gPT09IHVuZGVmaW5lZCkgb2JqW25dID0gZGVmW25dXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmpcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaW5lIGNvbG9yIGZyb20gdGhlIGdpdmVuIHN0cmluZyBvciBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGdldENvbG9yIChjb2xvciwgaWR4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjb2xvciA9PSAnc3RyaW5nJyA/IGNvbG9yIDogY29sb3JbaWR4ICUgY29sb3IubGVuZ3RoXVxuICB9XG5cbiAgLy8gQnVpbHQtaW4gZGVmYXVsdHNcblxuICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgbGluZXM6IDEyICAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgbGluZXMgdG8gZHJhd1xuICAsIGxlbmd0aDogNyAgICAgICAgICAgICAvLyBUaGUgbGVuZ3RoIG9mIGVhY2ggbGluZVxuICAsIHdpZHRoOiA1ICAgICAgICAgICAgICAvLyBUaGUgbGluZSB0aGlja25lc3NcbiAgLCByYWRpdXM6IDEwICAgICAgICAgICAgLy8gVGhlIHJhZGl1cyBvZiB0aGUgaW5uZXIgY2lyY2xlXG4gICwgc2NhbGU6IDEuMCAgICAgICAgICAgIC8vIFNjYWxlcyBvdmVyYWxsIHNpemUgb2YgdGhlIHNwaW5uZXJcbiAgLCBjb3JuZXJzOiAxICAgICAgICAgICAgLy8gUm91bmRuZXNzICgwLi4xKVxuICAsIGNvbG9yOiAnIzAwMCcgICAgICAgICAvLyAjcmdiIG9yICNycmdnYmJcbiAgLCBvcGFjaXR5OiAxLzQgICAgICAgICAgLy8gT3BhY2l0eSBvZiB0aGUgbGluZXNcbiAgLCByb3RhdGU6IDAgICAgICAgICAgICAgLy8gUm90YXRpb24gb2Zmc2V0XG4gICwgZGlyZWN0aW9uOiAxICAgICAgICAgIC8vIDE6IGNsb2Nrd2lzZSwgLTE6IGNvdW50ZXJjbG9ja3dpc2VcbiAgLCBzcGVlZDogMSAgICAgICAgICAgICAgLy8gUm91bmRzIHBlciBzZWNvbmRcbiAgLCB0cmFpbDogMTAwICAgICAgICAgICAgLy8gQWZ0ZXJnbG93IHBlcmNlbnRhZ2VcbiAgLCBmcHM6IDIwICAgICAgICAgICAgICAgLy8gRnJhbWVzIHBlciBzZWNvbmQgd2hlbiB1c2luZyBzZXRUaW1lb3V0KClcbiAgLCB6SW5kZXg6IDJlOSAgICAgICAgICAgLy8gVXNlIGEgaGlnaCB6LWluZGV4IGJ5IGRlZmF1bHRcbiAgLCBjbGFzc05hbWU6ICdzcGlubmVyJyAgLy8gQ1NTIGNsYXNzIHRvIGFzc2lnbiB0byB0aGUgZWxlbWVudFxuICAsIHRvcDogJzUwJScgICAgICAgICAgICAvLyBjZW50ZXIgdmVydGljYWxseVxuICAsIGxlZnQ6ICc1MCUnICAgICAgICAgICAvLyBjZW50ZXIgaG9yaXpvbnRhbGx5XG4gICwgc2hhZG93OiBmYWxzZSAgICAgICAgIC8vIFdoZXRoZXIgdG8gcmVuZGVyIGEgc2hhZG93XG4gICwgaHdhY2NlbDogZmFsc2UgICAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiAobWlnaHQgYmUgYnVnZ3kpXG4gICwgcG9zaXRpb246ICdhYnNvbHV0ZScgIC8vIEVsZW1lbnQgcG9zaXRpb25pbmdcbiAgfVxuXG4gIC8qKiBUaGUgY29uc3RydWN0b3IgKi9cbiAgZnVuY3Rpb24gU3Bpbm5lciAobykge1xuICAgIHRoaXMub3B0cyA9IG1lcmdlKG8gfHwge30sIFNwaW5uZXIuZGVmYXVsdHMsIGRlZmF1bHRzKVxuICB9XG5cbiAgLy8gR2xvYmFsIGRlZmF1bHRzIHRoYXQgb3ZlcnJpZGUgdGhlIGJ1aWx0LWluczpcbiAgU3Bpbm5lci5kZWZhdWx0cyA9IHt9XG5cbiAgbWVyZ2UoU3Bpbm5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBzcGlubmVyIHRvIHRoZSBnaXZlbiB0YXJnZXQgZWxlbWVudC4gSWYgdGhpcyBpbnN0YW5jZSBpcyBhbHJlYWR5XG4gICAgICogc3Bpbm5pbmcsIGl0IGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIGl0cyBwcmV2aW91cyB0YXJnZXQgYiBjYWxsaW5nXG4gICAgICogc3RvcCgpIGludGVybmFsbHkuXG4gICAgICovXG4gICAgc3BpbjogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgdGhpcy5zdG9wKClcblxuICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgICwgbyA9IHNlbGYub3B0c1xuICAgICAgICAsIGVsID0gc2VsZi5lbCA9IGNyZWF0ZUVsKG51bGwsIHtjbGFzc05hbWU6IG8uY2xhc3NOYW1lfSlcblxuICAgICAgY3NzKGVsLCB7XG4gICAgICAgIHBvc2l0aW9uOiBvLnBvc2l0aW9uXG4gICAgICAsIHdpZHRoOiAwXG4gICAgICAsIHpJbmRleDogby56SW5kZXhcbiAgICAgICwgbGVmdDogby5sZWZ0XG4gICAgICAsIHRvcDogby50b3BcbiAgICAgIH0pXG5cbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0Lmluc2VydEJlZm9yZShlbCwgdGFyZ2V0LmZpcnN0Q2hpbGQgfHwgbnVsbClcbiAgICAgIH1cblxuICAgICAgZWwuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3Byb2dyZXNzYmFyJylcbiAgICAgIHNlbGYubGluZXMoZWwsIHNlbGYub3B0cylcblxuICAgICAgaWYgKCF1c2VDc3NBbmltYXRpb25zKSB7XG4gICAgICAgIC8vIE5vIENTUyBhbmltYXRpb24gc3VwcG9ydCwgdXNlIHNldFRpbWVvdXQoKSBpbnN0ZWFkXG4gICAgICAgIHZhciBpID0gMFxuICAgICAgICAgICwgc3RhcnQgPSAoby5saW5lcyAtIDEpICogKDEgLSBvLmRpcmVjdGlvbikgLyAyXG4gICAgICAgICAgLCBhbHBoYVxuICAgICAgICAgICwgZnBzID0gby5mcHNcbiAgICAgICAgICAsIGYgPSBmcHMgLyBvLnNwZWVkXG4gICAgICAgICAgLCBvc3RlcCA9ICgxIC0gby5vcGFjaXR5KSAvIChmICogby50cmFpbCAvIDEwMClcbiAgICAgICAgICAsIGFzdGVwID0gZiAvIG8ubGluZXNcblxuICAgICAgICA7KGZ1bmN0aW9uIGFuaW0gKCkge1xuICAgICAgICAgIGkrK1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgby5saW5lczsgaisrKSB7XG4gICAgICAgICAgICBhbHBoYSA9IE1hdGgubWF4KDEgLSAoaSArIChvLmxpbmVzIC0gaikgKiBhc3RlcCkgJSBmICogb3N0ZXAsIG8ub3BhY2l0eSlcblxuICAgICAgICAgICAgc2VsZi5vcGFjaXR5KGVsLCBqICogby5kaXJlY3Rpb24gKyBzdGFydCwgYWxwaGEsIG8pXG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYudGltZW91dCA9IHNlbGYuZWwgJiYgc2V0VGltZW91dChhbmltLCB+figxMDAwIC8gZnBzKSlcbiAgICAgICAgfSkoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGZcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9wcyBhbmQgcmVtb3ZlcyB0aGUgU3Bpbm5lci5cbiAgICAgKi9cbiAgLCBzdG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmVsXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICAgICAgaWYgKGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpXG4gICAgICAgIHRoaXMuZWwgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgZHJhd3MgdGhlIGluZGl2aWR1YWwgbGluZXMuIFdpbGwgYmUgb3ZlcndyaXR0ZW5cbiAgICAgKiBpbiBWTUwgZmFsbGJhY2sgbW9kZSBiZWxvdy5cbiAgICAgKi9cbiAgLCBsaW5lczogZnVuY3Rpb24gKGVsLCBvKSB7XG4gICAgICB2YXIgaSA9IDBcbiAgICAgICAgLCBzdGFydCA9IChvLmxpbmVzIC0gMSkgKiAoMSAtIG8uZGlyZWN0aW9uKSAvIDJcbiAgICAgICAgLCBzZWdcblxuICAgICAgZnVuY3Rpb24gZmlsbCAoY29sb3IsIHNoYWRvdykge1xuICAgICAgICByZXR1cm4gY3NzKGNyZWF0ZUVsKCksIHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgICAgICAsIHdpZHRoOiBvLnNjYWxlICogKG8ubGVuZ3RoICsgby53aWR0aCkgKyAncHgnXG4gICAgICAgICwgaGVpZ2h0OiBvLnNjYWxlICogby53aWR0aCArICdweCdcbiAgICAgICAgLCBiYWNrZ3JvdW5kOiBjb2xvclxuICAgICAgICAsIGJveFNoYWRvdzogc2hhZG93XG4gICAgICAgICwgdHJhbnNmb3JtT3JpZ2luOiAnbGVmdCdcbiAgICAgICAgLCB0cmFuc2Zvcm06ICdyb3RhdGUoJyArIH5+KDM2MC9vLmxpbmVzKmkgKyBvLnJvdGF0ZSkgKyAnZGVnKSB0cmFuc2xhdGUoJyArIG8uc2NhbGUqby5yYWRpdXMgKyAncHgnICsgJywwKSdcbiAgICAgICAgLCBib3JkZXJSYWRpdXM6IChvLmNvcm5lcnMgKiBvLnNjYWxlICogby53aWR0aCA+PiAxKSArICdweCdcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZm9yICg7IGkgPCBvLmxpbmVzOyBpKyspIHtcbiAgICAgICAgc2VnID0gY3NzKGNyZWF0ZUVsKCksIHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgICAgICAsIHRvcDogMSArIH4oby5zY2FsZSAqIG8ud2lkdGggLyAyKSArICdweCdcbiAgICAgICAgLCB0cmFuc2Zvcm06IG8uaHdhY2NlbCA/ICd0cmFuc2xhdGUzZCgwLDAsMCknIDogJydcbiAgICAgICAgLCBvcGFjaXR5OiBvLm9wYWNpdHlcbiAgICAgICAgLCBhbmltYXRpb246IHVzZUNzc0FuaW1hdGlvbnMgJiYgYWRkQW5pbWF0aW9uKG8ub3BhY2l0eSwgby50cmFpbCwgc3RhcnQgKyBpICogby5kaXJlY3Rpb24sIG8ubGluZXMpICsgJyAnICsgMSAvIG8uc3BlZWQgKyAncyBsaW5lYXIgaW5maW5pdGUnXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKG8uc2hhZG93KSBpbnMoc2VnLCBjc3MoZmlsbCgnIzAwMCcsICcwIDAgNHB4ICMwMDAnKSwge3RvcDogJzJweCd9KSlcbiAgICAgICAgaW5zKGVsLCBpbnMoc2VnLCBmaWxsKGdldENvbG9yKG8uY29sb3IsIGkpLCAnMCAwIDFweCByZ2JhKDAsMCwwLC4xKScpKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIG1ldGhvZCB0aGF0IGFkanVzdHMgdGhlIG9wYWNpdHkgb2YgYSBzaW5nbGUgbGluZS5cbiAgICAgKiBXaWxsIGJlIG92ZXJ3cml0dGVuIGluIFZNTCBmYWxsYmFjayBtb2RlIGJlbG93LlxuICAgICAqL1xuICAsIG9wYWNpdHk6IGZ1bmN0aW9uIChlbCwgaSwgdmFsKSB7XG4gICAgICBpZiAoaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoKSBlbC5jaGlsZE5vZGVzW2ldLnN0eWxlLm9wYWNpdHkgPSB2YWxcbiAgICB9XG5cbiAgfSlcblxuXG4gIGZ1bmN0aW9uIGluaXRWTUwgKCkge1xuXG4gICAgLyogVXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgYSBWTUwgdGFnICovXG4gICAgZnVuY3Rpb24gdm1sICh0YWcsIGF0dHIpIHtcbiAgICAgIHJldHVybiBjcmVhdGVFbCgnPCcgKyB0YWcgKyAnIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWxcIiBjbGFzcz1cInNwaW4tdm1sXCI+JywgYXR0cilcbiAgICB9XG5cbiAgICAvLyBObyBDU1MgdHJhbnNmb3JtcyBidXQgVk1MIHN1cHBvcnQsIGFkZCBhIENTUyBydWxlIGZvciBWTUwgZWxlbWVudHM6XG4gICAgc2hlZXQuYWRkUnVsZSgnLnNwaW4tdm1sJywgJ2JlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpJylcblxuICAgIFNwaW5uZXIucHJvdG90eXBlLmxpbmVzID0gZnVuY3Rpb24gKGVsLCBvKSB7XG4gICAgICB2YXIgciA9IG8uc2NhbGUgKiAoby5sZW5ndGggKyBvLndpZHRoKVxuICAgICAgICAsIHMgPSBvLnNjYWxlICogMiAqIHJcblxuICAgICAgZnVuY3Rpb24gZ3JwICgpIHtcbiAgICAgICAgcmV0dXJuIGNzcyhcbiAgICAgICAgICB2bWwoJ2dyb3VwJywge1xuICAgICAgICAgICAgY29vcmRzaXplOiBzICsgJyAnICsgc1xuICAgICAgICAgICwgY29vcmRvcmlnaW46IC1yICsgJyAnICsgLXJcbiAgICAgICAgICB9KVxuICAgICAgICAsIHsgd2lkdGg6IHMsIGhlaWdodDogcyB9XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgdmFyIG1hcmdpbiA9IC0oby53aWR0aCArIG8ubGVuZ3RoKSAqIG8uc2NhbGUgKiAyICsgJ3B4J1xuICAgICAgICAsIGcgPSBjc3MoZ3JwKCksIHtwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiBtYXJnaW4sIGxlZnQ6IG1hcmdpbn0pXG4gICAgICAgICwgaVxuXG4gICAgICBmdW5jdGlvbiBzZWcgKGksIGR4LCBmaWx0ZXIpIHtcbiAgICAgICAgaW5zKFxuICAgICAgICAgIGdcbiAgICAgICAgLCBpbnMoXG4gICAgICAgICAgICBjc3MoZ3JwKCksIHtyb3RhdGlvbjogMzYwIC8gby5saW5lcyAqIGkgKyAnZGVnJywgbGVmdDogfn5keH0pXG4gICAgICAgICAgLCBpbnMoXG4gICAgICAgICAgICAgIGNzcyhcbiAgICAgICAgICAgICAgICB2bWwoJ3JvdW5kcmVjdCcsIHthcmNzaXplOiBvLmNvcm5lcnN9KVxuICAgICAgICAgICAgICAsIHsgd2lkdGg6IHJcbiAgICAgICAgICAgICAgICAsIGhlaWdodDogby5zY2FsZSAqIG8ud2lkdGhcbiAgICAgICAgICAgICAgICAsIGxlZnQ6IG8uc2NhbGUgKiBvLnJhZGl1c1xuICAgICAgICAgICAgICAgICwgdG9wOiAtby5zY2FsZSAqIG8ud2lkdGggPj4gMVxuICAgICAgICAgICAgICAgICwgZmlsdGVyOiBmaWx0ZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICwgdm1sKCdmaWxsJywge2NvbG9yOiBnZXRDb2xvcihvLmNvbG9yLCBpKSwgb3BhY2l0eTogby5vcGFjaXR5fSlcbiAgICAgICAgICAgICwgdm1sKCdzdHJva2UnLCB7b3BhY2l0eTogMH0pIC8vIHRyYW5zcGFyZW50IHN0cm9rZSB0byBmaXggY29sb3IgYmxlZWRpbmcgdXBvbiBvcGFjaXR5IGNoYW5nZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoby5zaGFkb3cpXG4gICAgICAgIGZvciAoaSA9IDE7IGkgPD0gby5saW5lczsgaSsrKSB7XG4gICAgICAgICAgc2VnKGksIC0yLCAncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJsdXIocGl4ZWxyYWRpdXM9MixtYWtlc2hhZG93PTEsc2hhZG93b3BhY2l0eT0uMyknKVxuICAgICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDE7IGkgPD0gby5saW5lczsgaSsrKSBzZWcoaSlcbiAgICAgIHJldHVybiBpbnMoZWwsIGcpXG4gICAgfVxuXG4gICAgU3Bpbm5lci5wcm90b3R5cGUub3BhY2l0eSA9IGZ1bmN0aW9uIChlbCwgaSwgdmFsLCBvKSB7XG4gICAgICB2YXIgYyA9IGVsLmZpcnN0Q2hpbGRcbiAgICAgIG8gPSBvLnNoYWRvdyAmJiBvLmxpbmVzIHx8IDBcbiAgICAgIGlmIChjICYmIGkgKyBvIDwgYy5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICBjID0gYy5jaGlsZE5vZGVzW2kgKyBvXTsgYyA9IGMgJiYgYy5maXJzdENoaWxkOyBjID0gYyAmJiBjLmZpcnN0Q2hpbGRcbiAgICAgICAgaWYgKGMpIGMub3BhY2l0eSA9IHZhbFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgc2hlZXQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGVsID0gY3JlYXRlRWwoJ3N0eWxlJywge3R5cGUgOiAndGV4dC9jc3MnfSlcbiAgICAgIGlucyhkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLCBlbClcbiAgICAgIHJldHVybiBlbC5zaGVldCB8fCBlbC5zdHlsZVNoZWV0XG4gICAgfSgpKVxuXG4gICAgdmFyIHByb2JlID0gY3NzKGNyZWF0ZUVsKCdncm91cCcpLCB7YmVoYXZpb3I6ICd1cmwoI2RlZmF1bHQjVk1MKSd9KVxuXG4gICAgaWYgKCF2ZW5kb3IocHJvYmUsICd0cmFuc2Zvcm0nKSAmJiBwcm9iZS5hZGopIGluaXRWTUwoKVxuICAgIGVsc2UgdXNlQ3NzQW5pbWF0aW9ucyA9IHZlbmRvcihwcm9iZSwgJ2FuaW1hdGlvbicpXG4gIH1cblxuICByZXR1cm4gU3Bpbm5lclxuXG59KSk7XG5cblxuLyoqKi8gfSksXG4vKiAxNjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVRQVJBSUFBQU9EbjdQLy8veUg1QkFFSEFBRUFMQUFBQUFBUkFCRUFBQUlxQklLcGFiM3YzRU15VkhXdFdabHVmMHphMFhGTktESmZDcTVpNUpwb21kVXhxS0xRVm1JbnF5b0FBRHM9XCJcblxuLyoqKi8gfSksXG4vKiAxNjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgaWYgKHRydWUpIHtcbiAgICAhKF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18gPSBbZXhwb3J0cywgbW9kdWxlXSwgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fID0gKGZhY3RvcnkpLFxuXHRcdFx0XHRfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9ICh0eXBlb2YgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fID09PSAnZnVuY3Rpb24nID9cblx0XHRcdFx0KF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXy5hcHBseShleHBvcnRzLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fKSkgOiBfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18pLFxuXHRcdFx0XHRfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyAhPT0gdW5kZWZpbmVkICYmIChtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZmFjdG9yeShleHBvcnRzLCBtb2R1bGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtb2QgPSB7XG4gICAgICBleHBvcnRzOiB7fVxuICAgIH07XG4gICAgZmFjdG9yeShtb2QuZXhwb3J0cywgbW9kKTtcbiAgICBnbG9iYWwuZmV0Y2hKc29ucCA9IG1vZC5leHBvcnRzO1xuICB9XG59KSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cywgbW9kdWxlKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgdGltZW91dDogNTAwMCxcbiAgICBqc29ucENhbGxiYWNrOiAnY2FsbGJhY2snLFxuICAgIGpzb25wQ2FsbGJhY2tGdW5jdGlvbjogbnVsbFxuICB9O1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlQ2FsbGJhY2tGdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ2pzb25wXycgKyBEYXRlLm5vdygpICsgJ18nICsgTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiAxMDAwMDApO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJGdW5jdGlvbihmdW5jdGlvbk5hbWUpIHtcbiAgICAvLyBJRTggdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIHlvdSB0cnkgdG8gZGVsZXRlIGEgcHJvcGVydHkgb24gd2luZG93XG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTgyNDIyOC83NTEwODlcbiAgICB0cnkge1xuICAgICAgZGVsZXRlIHdpbmRvd1tmdW5jdGlvbk5hbWVdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHdpbmRvd1tmdW5jdGlvbk5hbWVdID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVNjcmlwdChzY3JpcHRJZCkge1xuICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzY3JpcHRJZCk7XG4gICAgaWYgKHNjcmlwdCkge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZldGNoSnNvbnAoX3VybCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07XG5cbiAgICAvLyB0byBhdm9pZCBwYXJhbSByZWFzc2lnblxuICAgIHZhciB1cmwgPSBfdXJsO1xuICAgIHZhciB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0IHx8IGRlZmF1bHRPcHRpb25zLnRpbWVvdXQ7XG4gICAgdmFyIGpzb25wQ2FsbGJhY2sgPSBvcHRpb25zLmpzb25wQ2FsbGJhY2sgfHwgZGVmYXVsdE9wdGlvbnMuanNvbnBDYWxsYmFjaztcblxuICAgIHZhciB0aW1lb3V0SWQgPSB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGNhbGxiYWNrRnVuY3Rpb24gPSBvcHRpb25zLmpzb25wQ2FsbGJhY2tGdW5jdGlvbiB8fCBnZW5lcmF0ZUNhbGxiYWNrRnVuY3Rpb24oKTtcbiAgICAgIHZhciBzY3JpcHRJZCA9IGpzb25wQ2FsbGJhY2sgKyAnXycgKyBjYWxsYmFja0Z1bmN0aW9uO1xuXG4gICAgICB3aW5kb3dbY2FsbGJhY2tGdW5jdGlvbl0gPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgb2s6IHRydWUsXG4gICAgICAgICAgLy8ga2VlcCBjb25zaXN0ZW50IHdpdGggZmV0Y2ggQVBJXG4gICAgICAgICAganNvbjogZnVuY3Rpb24ganNvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRpbWVvdXRJZCkgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cbiAgICAgICAgcmVtb3ZlU2NyaXB0KHNjcmlwdElkKTtcblxuICAgICAgICBjbGVhckZ1bmN0aW9uKGNhbGxiYWNrRnVuY3Rpb24pO1xuICAgICAgfTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIHVzZXIgc2V0IHRoZWlyIG93biBwYXJhbXMsIGFuZCBpZiBub3QgYWRkIGEgPyB0byBzdGFydCBhIGxpc3Qgb2YgcGFyYW1zXG4gICAgICB1cmwgKz0gdXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJic7XG5cbiAgICAgIHZhciBqc29ucFNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAganNvbnBTY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLCAnJyArIHVybCArIGpzb25wQ2FsbGJhY2sgKyAnPScgKyBjYWxsYmFja0Z1bmN0aW9uKTtcbiAgICAgIGlmIChvcHRpb25zLmNoYXJzZXQpIHtcbiAgICAgICAganNvbnBTY3JpcHQuc2V0QXR0cmlidXRlKCdjaGFyc2V0Jywgb3B0aW9ucy5jaGFyc2V0KTtcbiAgICAgIH1cbiAgICAgIGpzb25wU2NyaXB0LmlkID0gc2NyaXB0SWQ7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKGpzb25wU2NyaXB0KTtcblxuICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0pTT05QIHJlcXVlc3QgdG8gJyArIF91cmwgKyAnIHRpbWVkIG91dCcpKTtcblxuICAgICAgICBjbGVhckZ1bmN0aW9uKGNhbGxiYWNrRnVuY3Rpb24pO1xuICAgICAgICByZW1vdmVTY3JpcHQoc2NyaXB0SWQpO1xuICAgICAgICB3aW5kb3dbY2FsbGJhY2tGdW5jdGlvbl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2xlYXJGdW5jdGlvbihjYWxsYmFja0Z1bmN0aW9uKTtcbiAgICAgICAgfTtcbiAgICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgICAvLyBDYXVnaHQgaWYgZ290IDQwNC81MDBcbiAgICAgIGpzb25wU2NyaXB0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0pTT05QIHJlcXVlc3QgdG8gJyArIF91cmwgKyAnIGZhaWxlZCcpKTtcblxuICAgICAgICBjbGVhckZ1bmN0aW9uKGNhbGxiYWNrRnVuY3Rpb24pO1xuICAgICAgICByZW1vdmVTY3JpcHQoc2NyaXB0SWQpO1xuICAgICAgICBpZiAodGltZW91dElkKSBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvLyBleHBvcnQgYXMgZ2xvYmFsIGZ1bmN0aW9uXG4gIC8qXG4gIGxldCBsb2NhbDtcbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbG9jYWwgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbG9jYWwgPSBzZWxmO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBsb2NhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICB9XG4gIH1cbiAgbG9jYWwuZmV0Y2hKc29ucCA9IGZldGNoSnNvbnA7XG4gICovXG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmZXRjaEpzb25wO1xufSk7XG5cbi8qKiovIH0pLFxuLyogMTYyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IG1ha2VXaWRnZXQ7XG5cbnZhciBfcmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcmVhY3REb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcblxudmFyIF91dGlsaXRpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcblxudmFyIF93aWRnZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Myk7XG5cbnZhciBfd2lkZ2V0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dpZGdldCk7XG5cbnZhciBfcGxhY2Vob2xkZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2NCk7XG5cbnZhciBfcGxhY2Vob2xkZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGxhY2Vob2xkZXIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIG1vZGU6ICdlbWJlZC13aWRnZXQnLFxuICBoaWRlRm9vdGVyOiBmYWxzZSxcbiAgaGlkZUhlYWRlcnM6IGZhbHNlLFxuICBoaWRlU2Nyb2xsYmFyczogZmFsc2UsXG4gIGRpc2FibGVTdWJtaXQ6IGZhbHNlLFxuICBvblN1Ym1pdDogX3V0aWxpdGllcy5ub29wXG59O1xuXG52YXIgcXVlcnlTdHJpbmdLZXlzID0ge1xuICBtb2RlOiAndHlwZWZvcm0tZW1iZWQnLFxuICBoaWRlRm9vdGVyOiAnZW1iZWQtaGlkZS1mb290ZXInLFxuICBoaWRlSGVhZGVyczogJ2VtYmVkLWhpZGUtaGVhZGVycycsXG4gIG9wYWNpdHk6ICdlbWJlZC1vcGFjaXR5JyxcbiAgZGlzYWJsZVN1Ym1pdDogJ19fZGFuZ2Vyb3VzLWRpc2FibGUtc3VibWlzc2lvbnMnXG59O1xuXG5mdW5jdGlvbiBtYWtlV2lkZ2V0KGVsZW1lbnQsIHVybCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gX2V4dGVuZHMoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgdmFyIHVybFdpdGhRdWVyeVN0cmluZyA9ICgwLCBfdXRpbGl0aWVzLmFwcGVuZFBhcmFtc1RvVXJsKSh1cmwsICgwLCBfdXRpbGl0aWVzLnJlcGxhY2VFeGlzdGluZ0tleXMpKG9wdGlvbnMsIHF1ZXJ5U3RyaW5nS2V5cykpO1xuXG4gIGlmICgoMCwgX3V0aWxpdGllcy5pc01vYmlsZSkobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcbiAgICAoMCwgX3V0aWxpdGllcy5lbnN1cmVNZXRhVmlld3BvcnQpKCk7XG4gICAgKDAsIF9yZWFjdERvbS5yZW5kZXIpKF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9wbGFjZWhvbGRlcjIuZGVmYXVsdCwge1xuICAgICAgdXJsOiB1cmxXaXRoUXVlcnlTdHJpbmcsXG4gICAgICBidXR0b25UZXh0OiBvcHRpb25zLmJ1dHRvblRleHQsXG4gICAgICBhdXRvT3Blbjogb3B0aW9ucy5hdXRvT3BlbixcbiAgICAgIG9uU3VibWl0OiBvcHRpb25zLm9uU3VibWl0XG4gICAgfSksIGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgICgwLCBfcmVhY3REb20ucmVuZGVyKShfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfd2lkZ2V0Mi5kZWZhdWx0LCB7IHVybDogdXJsV2l0aFF1ZXJ5U3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIH0pLCBlbGVtZW50KTtcbiAgfVxufVxuXG4vKioqLyB9KSxcbi8qIDE2MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX3N0eWxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xuXG52YXIgX3N0eWxlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHlsZXMpO1xuXG52YXIgX3Rpbnljb2xvciA9IF9fd2VicGFja19yZXF1aXJlX18oMTA3KTtcblxudmFyIF90aW55Y29sb3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdGlueWNvbG9yKTtcblxudmFyIF91dGlsaXRpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9pZnJhbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcblxudmFyIF9pZnJhbWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWZyYW1lKTtcblxudmFyIF9zcGlubmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7XG5cbnZhciBfc3Bpbm5lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zcGlubmVyKTtcblxudmFyIF9kYXRhU2VydmljZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzQpO1xuXG52YXIgX2RhdGFTZXJ2aWNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RhdGFTZXJ2aWNlKTtcblxudmFyIF9zdG9yZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzUpO1xuXG52YXIgX3N0b3JlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0b3JlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgREVCT1VOQ0VfV0FJVCA9IDIwMDtcbnZhciBUUkFOU1BBUkVOVCA9ICd0cmFuc3BhcmVudCc7XG5cbnZhciBXaWRnZXRXcmFwcGVyID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KSgnZGl2Jywge1xuICB0YXJnZXQ6ICdlMTJiYWVuNjAnXG59KSgnaGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7Jyk7XG5cbnZhciBJZnJhbWVXcmFwcGVyID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KSgnZGl2Jywge1xuICB0YXJnZXQ6ICdlMTJiYWVuNjEnXG59KSgnaGVpZ2h0OjEwMCU7dmlzaWJpbGl0eTonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5vcGVuID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG59LCAnOycpO1xuXG52YXIgaGlkZGVuU3Bpbm5lciA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlcy5jc3MpKCd0cmFuc2l0aW9uOnZpc2liaWxpdHkgMHMgMC4yNXMsb3BhY2l0eSAwLjI1cyBsaW5lYXI7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eTowOycpO1xuXG52YXIgU3Bpbm5lcldyYXBwZXIgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdkaXYnLCB7XG4gIHRhcmdldDogJ2UxMmJhZW42Midcbn0pKCd3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQtY29sb3I6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYmdDb2xvcjtcbn0sICc7JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAudmlzaWJsZSA/ICcnIDogaGlkZGVuU3Bpbm5lcjtcbn0sICc7Jyk7XG5cbnZhciBXaWRnZXQgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoV2lkZ2V0LCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBXaWRnZXQocHJvcHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV2lkZ2V0KTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChXaWRnZXQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihXaWRnZXQpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGZvcm06IHtcbiAgICAgICAgJ3ByaW1hcnktY29sb3InOiAnZmZmZmZmJyxcbiAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBUUkFOU1BBUkVOVFxuICAgICAgfSxcbiAgICAgIGlmcmFtZUxvYWRlZDogZmFsc2UsXG4gICAgICBzcGlubmVyVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzRm9ybVJlYWR5OiBmYWxzZSxcbiAgICAgIGlzSWZyYW1lRm9jdXNlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgX3RoaXMub25Gb3JtUmVhZHkgPSBfdGhpcy5vbkZvcm1SZWFkeS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbklmcmFtZUxvYWQgPSBfdGhpcy5vbklmcmFtZUxvYWQuYmluZChfdGhpcyk7XG4gICAgX3RoaXMuZm9jdXNJZnJhbWUgPSBfdGhpcy5mb2N1c0lmcmFtZS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5kZWJvdW5jZWRTY3JvbGwgPSAoMCwgX3V0aWxpdGllcy5kZWJvdW5jZSkoX3RoaXMuZm9jdXNJZnJhbWUsIERFQk9VTkNFX1dBSVQsIF90aGlzKTtcbiAgICBfdGhpcy5vbkZvcm1TdWJtaXQgPSBfdGhpcy5vbkZvcm1TdWJtaXQuYmluZChfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFdpZGdldCwgW3tcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHVpZCA9IF9kYXRhU2VydmljZTIuZGVmYXVsdC5nZXRVaWRGcm9tVVJMKHRoaXMucHJvcHMudXJsKTtcbiAgICAgIF9kYXRhU2VydmljZTIuZGVmYXVsdC5nZXRGb3JtRGF0YSh1aWQsIF91dGlsaXRpZXMuRE9NQUlOKS50aGVuKGZ1bmN0aW9uIChyZXNwKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3N0b3JlMi5kZWZhdWx0KSh1aWQsICcnLCBfdGhpczIucHJvcHMudXJsLCAnJywgcmVzcCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7IGZvcm06IGRhdGEuZm9ybSB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIF91dGlsaXRpZXMub25NZXNzYWdlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb3JtLXJlYWR5JywgdGhpcy5vbkZvcm1SZWFkeSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5kZWJvdW5jZWRTY3JvbGwpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Zvcm0tc3VibWl0JywgdGhpcy5vbkZvcm1TdWJtaXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIF91dGlsaXRpZXMub25NZXNzYWdlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb3JtLXJlYWR5JywgdGhpcy5vbkZvcm1SZWFkeSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5kZWJvdW5jZWRTY3JvbGwpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Zvcm0tc3VibWl0JywgdGhpcy5vbkZvcm1TdWJtaXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRm9ybVJlYWR5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Gb3JtUmVhZHkoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzRm9ybVJlYWR5OiB0cnVlXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5mb2N1c0lmcmFtZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25Gb3JtU3VibWl0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Gb3JtU3VibWl0KCkge1xuICAgICAgdmFyIG9uU3VibWl0ID0gdGhpcy5wcm9wcy5vcHRpb25zLm9uU3VibWl0O1xuXG4gICAgICBvblN1Ym1pdCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uSWZyYW1lTG9hZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uSWZyYW1lTG9hZCgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaWZyYW1lTG9hZGVkOiB0cnVlXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzNC5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBzcGlubmVyVmlzaWJsZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2ZvY3VzSWZyYW1lJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNJZnJhbWUoKSB7XG4gICAgICB2YXIgaWZyYW1lUmVmID0gdGhpcy5pZnJhbWUuaWZyYW1lUmVmO1xuXG5cbiAgICAgIGlmICghaWZyYW1lUmVmIHx8ICFpZnJhbWVSZWYuY29udGVudFdpbmRvdykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0lmcmFtZUluVmlld3BvcnQgPSAoMCwgX3V0aWxpdGllcy5pc0VsZW1lbnRJblZpZXdwb3J0KShpZnJhbWVSZWYpO1xuICAgICAgdmFyIGNhblBvc3RNZXNzYWdlID0gdGhpcy5zdGF0ZS5pc0Zvcm1SZWFkeSAmJiAhdGhpcy5zdGF0ZS5pc0lmcmFtZUZvY3VzZWQgJiYgaXNJZnJhbWVJblZpZXdwb3J0ICYmIGlmcmFtZVJlZi5jb250ZW50V2luZG93ICE9IG51bGw7XG5cbiAgICAgIGlmIChjYW5Qb3N0TWVzc2FnZSkge1xuICAgICAgICBpZnJhbWVSZWYuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSgnZW1iZWQtZm9jdXMnLCAnKicpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc0lmcmFtZUZvY3VzZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBfc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGZvcm0gPSBfc3RhdGUuZm9ybSxcbiAgICAgICAgICBpZnJhbWVMb2FkZWQgPSBfc3RhdGUuaWZyYW1lTG9hZGVkLFxuICAgICAgICAgIHNwaW5uZXJWaXNpYmxlID0gX3N0YXRlLnNwaW5uZXJWaXNpYmxlO1xuXG5cbiAgICAgIHZhciBiZ0NvbG9yID0gdm9pZCAwO1xuICAgICAgaWYgKGZvcm1bJ2JhY2tncm91bmQtY29sb3InXSAhPT0gVFJBTlNQQVJFTlQpIHtcbiAgICAgICAgYmdDb2xvciA9ICgwLCBfdGlueWNvbG9yMi5kZWZhdWx0KSgnIycgKyBmb3JtWydiYWNrZ3JvdW5kLWNvbG9yJ10pLnNldEFscGhhKHRoaXMucHJvcHMub3B0aW9ucy5vcGFjaXR5IC8gMTAwKS50b1JnYlN0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmdDb2xvciA9ICcjJyArIGZvcm1bJ2JhY2tncm91bmQtY29sb3InXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNwaW5uZXJDb25maWcgPSB7XG4gICAgICAgIGNvbG9yOiAnIycgKyBmb3JtWydwcmltYXJ5LWNvbG9yJ11cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgV2lkZ2V0V3JhcHBlcixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgU3Bpbm5lcldyYXBwZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmlzaWJsZTogc3Bpbm5lclZpc2libGUsXG4gICAgICAgICAgICBiZ0NvbG9yOiBiZ0NvbG9yIH0sXG4gICAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX3NwaW5uZXIyLmRlZmF1bHQsIHtcbiAgICAgICAgICAgIGNvbmZpZzogc3Bpbm5lckNvbmZpZyxcbiAgICAgICAgICAgIHN0b3BwZWQ6IGlmcmFtZUxvYWRlZFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIElmcmFtZVdyYXBwZXIsXG4gICAgICAgICAgeyBvcGVuOiAhc3Bpbm5lclZpc2libGUgfSxcbiAgICAgICAgICBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfaWZyYW1lMi5kZWZhdWx0LCB7XG4gICAgICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgICAgIF90aGlzNS5pZnJhbWUgPSBub2RlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgIGZyYW1lQm9yZGVyOiAnMCcsXG4gICAgICAgICAgICBzcmM6IHRoaXMucHJvcHMudXJsLFxuICAgICAgICAgICAgb25Mb2FkOiB0aGlzLm9uSWZyYW1lTG9hZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFdpZGdldDtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cbldpZGdldC5wcm9wVHlwZXMgPSB7XG4gIHVybDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIG9wdGlvbnM6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0XG59O1xuXG5XaWRnZXQuZGVmYXVsdFByb3BzID0ge1xuICBvcHRpb25zOiB7fVxufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gV2lkZ2V0O1xuXG4vKioqLyB9KSxcbi8qIDE2NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX3N0eWxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xuXG52YXIgX3N0eWxlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHlsZXMpO1xuXG52YXIgX21vYmlsZU1vZGFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDYpO1xuXG52YXIgX21vYmlsZU1vZGFsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21vYmlsZU1vZGFsKTtcblxudmFyIF9zcGlubmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7XG5cbnZhciBfc3Bpbm5lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zcGlubmVyKTtcblxudmFyIF9jcmVhdGVQYWxldHRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjUpO1xuXG52YXIgX2NyZWF0ZVBhbGV0dGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlUGFsZXR0ZSk7XG5cbnZhciBfd2ViZm9udGxvYWRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTY2KTtcblxudmFyIF93ZWJmb250bG9hZGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dlYmZvbnRsb2FkZXIpO1xuXG52YXIgX2RhdGFTZXJ2aWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XG5cbnZhciBfZGF0YVNlcnZpY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGF0YVNlcnZpY2UpO1xuXG52YXIgX3N0b3JlMiA9IF9fd2VicGFja19yZXF1aXJlX18oNzUpO1xuXG52YXIgX3N0b3JlMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0b3JlMik7XG5cbnZhciBfdXRpbGl0aWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIFRZUEUgPSAnd2lkZ2V0JztcblxudmFyIFdyYXBwZXIgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdkaXYnLCB7XG4gIHRhcmdldDogJ2V1eGc2bjkwJ1xufSkoJ3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuaXNCYWNrZ3JvdW5kQnJpZ2h0ID8gJ3doaXRlJyA6ICdibGFjayc7XG59LCAnOycpO1xuXG52YXIgVGl0bGUgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdkaXYnLCB7XG4gIHRhcmdldDogJ2V1eGc2bjkxJ1xufSkoJ3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKDUwJSAtIDUwcHgpO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7ei1pbmRleDoyO2xpbmUtaGVpZ2h0OjE7Y29sb3I6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuY29sb3IgfHwgJyNGRkYnO1xufSwgJztmb250LWZhbWlseTonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5mb250ID8gJ1wiJyArIHAuZm9udCArICdcIiwnIDogJyc7XG59LCAnIFwiU291cmNlIFNhbnMgUHJvXCIsc2Fucy1zZXJpZjtmb250LXNpemU6MzBweDtAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NjAwcHgpe2ZvbnQtc2l6ZTo2MHB4O30nKTtcblxudmFyIEJ1dHRvbiA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlczIuZGVmYXVsdCkoJ2J1dHRvbicsIHtcbiAgdGFyZ2V0OiAnZXV4ZzZuOTInXG59KSgncG9zaXRpb246YWJzb2x1dGU7dG9wOmF1dG87Ym90dG9tOjIwcHg7bGVmdDoyMHB4O3dpZHRoOmNhbGMoMTAwJSAtIDQwcHgpO2ZvbnQtc2l6ZTozMHB4O3otaW5kZXg6NTtkaXNwbGF5OmJsb2NrO2JvcmRlci1yYWRpdXM6M3B4O291dGxpbmU6bm9uZTtoZWlnaHQ6NjFweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2ZvbnQtd2VpZ2h0OmJvbGQ7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciBlYXNlLW91dCAxMDBtcyAwbXM7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cGFkZGluZy1sZWZ0OjEycHg7cGFkZGluZy1yaWdodDoxMnB4O2JhY2tncm91bmQtY29sb3I6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYmFja2dyb3VuZENvbG9yIHx8ICcjYmJiJztcbn0sICc7Y29sb3I6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuY29sb3IgfHwgJ3JnYmEoMCwgMCwgMCwgMC44KSc7XG59LCAnO2JvcmRlcjoxcHggc29saWQgJywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYm9yZGVyQ29sb3IgfHwgJyMzMzMnO1xufSwgJztmb250LWZhbWlseTonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5mb250ID8gJ1wiJyArIHAuZm9udCArICdcIiwnIDogJyc7XG59LCAnIFwiU291cmNlIFNhbnMgUHJvXCIsc2Fucy1zZXJpZjsmOmFjdGl2ZXtib3gtc2hhZG93Omluc2V0IDAgMnB4IDFweCByZ2JhKDAsMCwwLDAuNCksaW5zZXQgIzAwMDAwMCAwIDAgMjEwcHggLTEwMHB4O30nKTtcblxudmFyIEJhY2tncm91bmQgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdkaXYnLCB7XG4gIHRhcmdldDogJ2V1eGc2bjkzJ1xufSkoJ3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTtsZWZ0OjA7cmlnaHQ6MDt0b3A6MDtib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOicsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLmJhY2tncm91bmRDb2xvciB8fCAndHJhbnNwYXJlbnQnO1xufSwgJztiYWNrZ3JvdW5kLWltYWdlOicsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLmltYWdlID8gJ3VybCgnICsgcC5pbWFnZSArICcpJyA6ICdub25lJztcbn0sICc7YmFja2dyb3VuZC1yZXBlYXQ6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYmFja2dyb3VuZFJlcGVhdDtcbn0sICc7b3BhY2l0eTonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5pbWFnZSA/IDEgLSBwLmJyaWdodG5lc3MgOiAxO1xufSwgJzsnKTtcblxudmFyIFNwaW5uZXJXcmFwcGVyID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KSgnZGl2Jywge1xuICB0YXJnZXQ6ICdldXhnNm45NCdcbn0pKCd3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Jyk7XG5cbnZhciBQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhQbGFjZWhvbGRlciwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUGxhY2Vob2xkZXIocHJvcHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGxhY2Vob2xkZXIpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFBsYWNlaG9sZGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUGxhY2Vob2xkZXIpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIG9wZW46ICEhX3RoaXMucHJvcHMuYXV0b09wZW4sXG4gICAgICBmb3JtOiB7XG4gICAgICAgIG5hbWU6ICdUeXBlZm9ybScsXG4gICAgICAgICdmb250LWdvb2dsZSc6ICdzYW5zLXNlcmlmJyxcbiAgICAgICAgJ3ByaW1hcnktY29sb3InOiAnIzIyMicsXG4gICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJzogJycsXG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNEREQnLFxuICAgICAgICAnYmFja2dyb3VuZC1yZXBlYXQnOiAnJyxcbiAgICAgICAgJ2J1dHRvbi1jb2xvcic6ICc0RkIwQUEnLFxuICAgICAgICAnYmFja2dyb3VuZC1icmlnaHRuZXNzJzogMC43MlxuICAgICAgfSxcbiAgICAgIHRoZW1lTG9hZGVkOiBmYWxzZVxuICAgIH07XG5cbiAgICBfdGhpcy5vcGVuID0gX3RoaXMub3Blbi5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5jbG9zZSA9IF90aGlzLmNsb3NlLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQbGFjZWhvbGRlciwgW3tcbiAgICBrZXk6ICdsb2FkR29vZ2xlRm9udCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRHb29nbGVGb250KGZvcm0pIHtcbiAgICAgIGlmIChmb3JtWydmb250LWdvb2dsZSddKSB7XG4gICAgICAgIF93ZWJmb250bG9hZGVyMi5kZWZhdWx0LmxvYWQoe1xuICAgICAgICAgIGdvb2dsZToge1xuICAgICAgICAgICAgZmFtaWxpZXM6IFtmb3JtWydmb250LWdvb2dsZSddXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciB1aWQgPSBfZGF0YVNlcnZpY2UyLmRlZmF1bHQuZ2V0VWlkRnJvbVVSTCh0aGlzLnByb3BzLnVybCk7XG5cbiAgICAgIF9kYXRhU2VydmljZTIuZGVmYXVsdC5nZXRGb3JtRGF0YSh1aWQsIF91dGlsaXRpZXMuRE9NQUlOKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHZhciBfc3RvcmUgPSAoMCwgX3N0b3JlMy5kZWZhdWx0KSh1aWQsIFRZUEUsIF90aGlzMi5wcm9wcy51cmwsIF90aGlzMi5wcm9wcy5idXR0b25UZXh0LCBkYXRhKSxcbiAgICAgICAgICAgIGZvcm0gPSBfc3RvcmUuZm9ybTtcblxuICAgICAgICBfdGhpczIubG9hZEdvb2dsZUZvbnQoZm9ybSk7XG4gICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7IGZvcm06IGZvcm0sIHRoZW1lTG9hZGVkOiB0cnVlIH0pO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLnNldFN0YXRlKHsgdGhlbWVMb2FkZWQ6IHRydWUgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvcGVuJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb3BlbigpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuOiB0cnVlIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Nsb3NlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgb3BlbjogZmFsc2UgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF9zdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgZm9ybSA9IF9zdGF0ZS5mb3JtLFxuICAgICAgICAgIHRoZW1lTG9hZGVkID0gX3N0YXRlLnRoZW1lTG9hZGVkO1xuXG4gICAgICB2YXIgYnV0dG9uQ29sb3JzID0gKDAsIF9jcmVhdGVQYWxldHRlMi5kZWZhdWx0KSgnIycgKyBmb3JtWydidXR0b24tY29sb3InXSk7XG4gICAgICB2YXIgZm9udEZhbWlseSA9IGZvcm1bJ2ZvbnQtZ29vZ2xlJ10uc3BsaXQoJzonKVswXS5zcGxpdCgnKycpLmpvaW4oJyAnKTtcbiAgICAgIHZhciBidXR0b25UZXh0ID0gdGhpcy5wcm9wcy5idXR0b25UZXh0ID8gdGhpcy5wcm9wcy5idXR0b25UZXh0IDogJ1N0YXJ0JztcblxuICAgICAgaWYgKCF0aGVtZUxvYWRlZCkge1xuICAgICAgICB2YXIgc3Bpbm5lckNvbmZpZyA9IHtcbiAgICAgICAgICBjb2xvcjogJyM3YjdiN2InLFxuICAgICAgICAgIGZhZGVDb2xvcjogJyNmZmZmZmYnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIFNwaW5uZXJXcmFwcGVyLFxuICAgICAgICAgIHsgdmlzaWJsZTogdHJ1ZSwgYmdDb2xvcjogJ3RyYW5zcGFyZW50JyB9LFxuICAgICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9zcGlubmVyMi5kZWZhdWx0LCB7IGNvbmZpZzogc3Bpbm5lckNvbmZpZyB9KVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFdyYXBwZXIsXG4gICAgICAgIHsgaXNCYWNrZ3JvdW5kQnJpZ2h0OiBmb3JtWydiYWNrZ3JvdW5kLWJyaWdodG5lc3MnXSA+PSAwIH0sXG4gICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9tb2JpbGVNb2RhbDIuZGVmYXVsdCwge1xuICAgICAgICAgIHVybDogdGhpcy5wcm9wcy51cmwsXG4gICAgICAgICAgb3BlbjogdGhpcy5zdGF0ZS5vcGVuLFxuICAgICAgICAgIG9uQ2xvc2U6IHRoaXMuY2xvc2UsXG4gICAgICAgICAgb25TdWJtaXQ6IHRoaXMucHJvcHMub25TdWJtaXQsXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIycgKyBmb3JtWydiYWNrZ3JvdW5kLWNvbG9yJ10sXG4gICAgICAgICAgYnV0dG9uQ29sb3I6ICcjJyArIGZvcm1bJ2J1dHRvbi1jb2xvciddXG4gICAgICAgIH0pLFxuICAgICAgICBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBUaXRsZSxcbiAgICAgICAgICB7IGNvbG9yOiAnIycgKyBmb3JtWydwcmltYXJ5LWNvbG9yJ10sIGZvbnQ6IGZvbnRGYW1pbHkgfSxcbiAgICAgICAgICBmb3JtLm5hbWVcbiAgICAgICAgKSxcbiAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgQnV0dG9uLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICdkYXRhLXFhJzogJ3N0YXJ0LWJ1dHRvbicsXG4gICAgICAgICAgICBjb2xvcjogYnV0dG9uQ29sb3JzLnRleHQsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJ1dHRvbkNvbG9ycy5iYWNrZ3JvdW5kLFxuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGJ1dHRvbkNvbG9ycy5ib3JkZXIsXG4gICAgICAgICAgICBmb250OiBmb250RmFtaWx5LFxuICAgICAgICAgICAgb25DbGljazogdGhpcy5vcGVuLFxuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbidcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJ1dHRvblRleHRcbiAgICAgICAgKSxcbiAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQmFja2dyb3VuZCwge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyMnICsgZm9ybVsnYmFja2dyb3VuZC1jb2xvciddLFxuICAgICAgICAgIGltYWdlOiBmb3JtWydiYWNrZ3JvdW5kLWltYWdlJ10sXG4gICAgICAgICAgYnJpZ2h0bmVzczogTWF0aC5hYnMoZm9ybVsnYmFja2dyb3VuZC1icmlnaHRuZXNzJ10pLFxuICAgICAgICAgIGJhY2tncm91bmRSZXBlYXQ6IGZvcm1bJ2JhY2tncm91bmQtcmVwZWF0J11cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBsYWNlaG9sZGVyO1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuUGxhY2Vob2xkZXIucHJvcFR5cGVzID0ge1xuICB1cmw6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuICBidXR0b25UZXh0OiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgYXV0b09wZW46IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgb25TdWJtaXQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuY1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUGxhY2Vob2xkZXI7XG5cbi8qKiovIH0pLFxuLyogMTY1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdGlueWNvbG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpO1xuXG52YXIgX3Rpbnljb2xvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90aW55Y29sb3IpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgY29sb3JhdGVCdXR0b24gPSBmdW5jdGlvbiBjb2xvcmF0ZUJ1dHRvbihidXR0b25IZXgpIHtcbiAgdmFyIGJ1dHRvbiA9ICgwLCBfdGlueWNvbG9yMi5kZWZhdWx0KShidXR0b25IZXgpLnRvSHN2KCk7XG5cbiAgdmFyIHRleHRTYXR1cmF0aW9uID0gMSAqIE1hdGgucG93KGJ1dHRvbi5zLCAwLjEpIC0gMyAqIE1hdGgucG93KGJ1dHRvbi5zLCAxKSArIDIgKiBNYXRoLnBvdyhidXR0b24ucywgMS4zKTtcbiAgdmFyIHRleHRCcmlnaHRuZXNzID0gdm9pZCAwO1xuXG4gIGlmIChidXR0b24udiA+IDAuNSArIE1hdGgucG93KGJ1dHRvbi5zLCAxLjYpICogMC41KSB7XG4gICAgdGV4dEJyaWdodG5lc3MgPSBNYXRoLm1pbigwLjEgKyBidXR0b24udiAvIDQgLSB0ZXh0U2F0dXJhdGlvbiAvIDggLSBidXR0b24ucyAvIDUsIDAuMjUpO1xuICAgIHRleHRCcmlnaHRuZXNzID0gTWF0aC5tYXgoMC4wNSwgdGV4dEJyaWdodG5lc3MpO1xuICB9IGVsc2Uge1xuICAgIHRleHRCcmlnaHRuZXNzID0gTWF0aC5tYXgoMC45IC0gKDEgLSBidXR0b24udikgLyA0ICsgdGV4dFNhdHVyYXRpb24gLyA4ICsgYnV0dG9uLnMgLyA1LCAwLjc1KTtcbiAgICB0ZXh0QnJpZ2h0bmVzcyA9IE1hdGgubWluKDAuOTUsIHRleHRCcmlnaHRuZXNzKTtcbiAgICB0ZXh0U2F0dXJhdGlvbiA9IHRleHRTYXR1cmF0aW9uIC8gMjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGV4dDogKDAsIF90aW55Y29sb3IyLmRlZmF1bHQpKCdoc3ZhKCcgKyBidXR0b24uaCArICcsJyArIE1hdGgubWF4KHRleHRTYXR1cmF0aW9uLCAwKSArICcsJyArIHRleHRCcmlnaHRuZXNzICsgJywwLjkpJykudG9SZ2JTdHJpbmcoKSxcbiAgICBiYWNrZ3JvdW5kOiAoMCwgX3Rpbnljb2xvcjIuZGVmYXVsdCkoJ2hzdmEoJyArIGJ1dHRvbi5oICsgJywnICsgYnV0dG9uLnMgKyAnLCcgKyBidXR0b24udiArICcsMSknKS50b1JnYlN0cmluZygpLFxuICAgIGJvcmRlcjogKDAsIF90aW55Y29sb3IyLmRlZmF1bHQpKCdoc3YoJyArIGJ1dHRvbi5oICsgJywnICsgTWF0aC5taW4oYnV0dG9uLnMgKiA1LCAxKSArICcsJyArIGJ1dHRvbi52IC8gMiArICcpJykudG9SZ2JTdHJpbmcoKVxuICB9O1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gY29sb3JhdGVCdXR0b247XG5cbi8qKiovIH0pLFxuLyogMTY2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXzsvKiBXZWIgRm9udCBMb2FkZXIgdjEuNi4yOCAtIChjKSBBZG9iZSBTeXN0ZW1zLCBHb29nbGUuIExpY2Vuc2U6IEFwYWNoZSAyLjAgKi8oZnVuY3Rpb24oKXtmdW5jdGlvbiBhYShhLGIsYyl7cmV0dXJuIGEuY2FsbC5hcHBseShhLmJpbmQsYXJndW1lbnRzKX1mdW5jdGlvbiBiYShhLGIsYyl7aWYoIWEpdGhyb3cgRXJyb3IoKTtpZigyPGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGMsZCk7cmV0dXJuIGEuYXBwbHkoYixjKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYixhcmd1bWVudHMpfX1mdW5jdGlvbiBwKGEsYixjKXtwPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiYtMSE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQudG9TdHJpbmcoKS5pbmRleE9mKFwibmF0aXZlIGNvZGVcIik/YWE6YmE7cmV0dXJuIHAuYXBwbHkobnVsbCxhcmd1bWVudHMpfXZhciBxPURhdGUubm93fHxmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX07ZnVuY3Rpb24gY2EoYSxiKXt0aGlzLmE9YTt0aGlzLm89Ynx8YTt0aGlzLmM9dGhpcy5vLmRvY3VtZW50fXZhciBkYT0hIXdpbmRvdy5Gb250RmFjZTtmdW5jdGlvbiB0KGEsYixjLGQpe2I9YS5jLmNyZWF0ZUVsZW1lbnQoYik7aWYoYylmb3IodmFyIGUgaW4gYyljLmhhc093blByb3BlcnR5KGUpJiYoXCJzdHlsZVwiPT1lP2Iuc3R5bGUuY3NzVGV4dD1jW2VdOmIuc2V0QXR0cmlidXRlKGUsY1tlXSkpO2QmJmIuYXBwZW5kQ2hpbGQoYS5jLmNyZWF0ZVRleHROb2RlKGQpKTtyZXR1cm4gYn1mdW5jdGlvbiB1KGEsYixjKXthPWEuYy5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXTthfHwoYT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO2EuaW5zZXJ0QmVmb3JlKGMsYS5sYXN0Q2hpbGQpfWZ1bmN0aW9uIHYoYSl7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSl9XG5mdW5jdGlvbiB3KGEsYixjKXtiPWJ8fFtdO2M9Y3x8W107Zm9yKHZhciBkPWEuY2xhc3NOYW1lLnNwbGl0KC9cXHMrLyksZT0wO2U8Yi5sZW5ndGg7ZSs9MSl7Zm9yKHZhciBmPSExLGc9MDtnPGQubGVuZ3RoO2crPTEpaWYoYltlXT09PWRbZ10pe2Y9ITA7YnJlYWt9Znx8ZC5wdXNoKGJbZV0pfWI9W107Zm9yKGU9MDtlPGQubGVuZ3RoO2UrPTEpe2Y9ITE7Zm9yKGc9MDtnPGMubGVuZ3RoO2crPTEpaWYoZFtlXT09PWNbZ10pe2Y9ITA7YnJlYWt9Znx8Yi5wdXNoKGRbZV0pfWEuY2xhc3NOYW1lPWIuam9pbihcIiBcIikucmVwbGFjZSgvXFxzKy9nLFwiIFwiKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC8sXCJcIil9ZnVuY3Rpb24geShhLGIpe2Zvcih2YXIgYz1hLmNsYXNzTmFtZS5zcGxpdCgvXFxzKy8pLGQ9MCxlPWMubGVuZ3RoO2Q8ZTtkKyspaWYoY1tkXT09YilyZXR1cm4hMDtyZXR1cm4hMX1cbmZ1bmN0aW9uIGVhKGEpe3JldHVybiBhLm8ubG9jYXRpb24uaG9zdG5hbWV8fGEuYS5sb2NhdGlvbi5ob3N0bmFtZX1mdW5jdGlvbiB6KGEsYixjKXtmdW5jdGlvbiBkKCl7bSYmZSYmZiYmKG0oZyksbT1udWxsKX1iPXQoYSxcImxpbmtcIix7cmVsOlwic3R5bGVzaGVldFwiLGhyZWY6YixtZWRpYTpcImFsbFwifSk7dmFyIGU9ITEsZj0hMCxnPW51bGwsbT1jfHxudWxsO2RhPyhiLm9ubG9hZD1mdW5jdGlvbigpe2U9ITA7ZCgpfSxiLm9uZXJyb3I9ZnVuY3Rpb24oKXtlPSEwO2c9RXJyb3IoXCJTdHlsZXNoZWV0IGZhaWxlZCB0byBsb2FkXCIpO2QoKX0pOnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlPSEwO2QoKX0sMCk7dShhLFwiaGVhZFwiLGIpfVxuZnVuY3Rpb24gQShhLGIsYyxkKXt2YXIgZT1hLmMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdO2lmKGUpe3ZhciBmPXQoYSxcInNjcmlwdFwiLHtzcmM6Yn0pLGc9ITE7Zi5vbmxvYWQ9Zi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtnfHx0aGlzLnJlYWR5U3RhdGUmJlwibG9hZGVkXCIhPXRoaXMucmVhZHlTdGF0ZSYmXCJjb21wbGV0ZVwiIT10aGlzLnJlYWR5U3RhdGV8fChnPSEwLGMmJmMobnVsbCksZi5vbmxvYWQ9Zi5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxcIkhFQURcIj09Zi5wYXJlbnROb2RlLnRhZ05hbWUmJmUucmVtb3ZlQ2hpbGQoZikpfTtlLmFwcGVuZENoaWxkKGYpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtnfHwoZz0hMCxjJiZjKEVycm9yKFwiU2NyaXB0IGxvYWQgdGltZW91dFwiKSkpfSxkfHw1RTMpO3JldHVybiBmfXJldHVybiBudWxsfTtmdW5jdGlvbiBCKCl7dGhpcy5hPTA7dGhpcy5jPW51bGx9ZnVuY3Rpb24gQyhhKXthLmErKztyZXR1cm4gZnVuY3Rpb24oKXthLmEtLTtEKGEpfX1mdW5jdGlvbiBFKGEsYil7YS5jPWI7RChhKX1mdW5jdGlvbiBEKGEpezA9PWEuYSYmYS5jJiYoYS5jKCksYS5jPW51bGwpfTtmdW5jdGlvbiBGKGEpe3RoaXMuYT1hfHxcIi1cIn1GLnByb3RvdHlwZS5jPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliLnB1c2goYXJndW1lbnRzW2NdLnJlcGxhY2UoL1tcXFdfXSsvZyxcIlwiKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gYi5qb2luKHRoaXMuYSl9O2Z1bmN0aW9uIEcoYSxiKXt0aGlzLmM9YTt0aGlzLmY9NDt0aGlzLmE9XCJuXCI7dmFyIGM9KGJ8fFwibjRcIikubWF0Y2goL14oW25pb10pKFsxLTldKSQvaSk7YyYmKHRoaXMuYT1jWzFdLHRoaXMuZj1wYXJzZUludChjWzJdLDEwKSl9ZnVuY3Rpb24gZmEoYSl7cmV0dXJuIEgoYSkrXCIgXCIrKGEuZitcIjAwXCIpK1wiIDMwMHB4IFwiK0koYS5jKX1mdW5jdGlvbiBJKGEpe3ZhciBiPVtdO2E9YS5zcGxpdCgvLFxccyovKTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXS5yZXBsYWNlKC9bJ1wiXS9nLFwiXCIpOy0xIT1kLmluZGV4T2YoXCIgXCIpfHwvXlxcZC8udGVzdChkKT9iLnB1c2goXCInXCIrZCtcIidcIik6Yi5wdXNoKGQpfXJldHVybiBiLmpvaW4oXCIsXCIpfWZ1bmN0aW9uIEooYSl7cmV0dXJuIGEuYSthLmZ9ZnVuY3Rpb24gSChhKXt2YXIgYj1cIm5vcm1hbFwiO1wib1wiPT09YS5hP2I9XCJvYmxpcXVlXCI6XCJpXCI9PT1hLmEmJihiPVwiaXRhbGljXCIpO3JldHVybiBifVxuZnVuY3Rpb24gZ2EoYSl7dmFyIGI9NCxjPVwiblwiLGQ9bnVsbDthJiYoKGQ9YS5tYXRjaCgvKG5vcm1hbHxvYmxpcXVlfGl0YWxpYykvaSkpJiZkWzFdJiYoYz1kWzFdLnN1YnN0cigwLDEpLnRvTG93ZXJDYXNlKCkpLChkPWEubWF0Y2goLyhbMS05XTAwfG5vcm1hbHxib2xkKS9pKSkmJmRbMV0mJigvYm9sZC9pLnRlc3QoZFsxXSk/Yj03Oi9bMS05XTAwLy50ZXN0KGRbMV0pJiYoYj1wYXJzZUludChkWzFdLnN1YnN0cigwLDEpLDEwKSkpKTtyZXR1cm4gYytifTtmdW5jdGlvbiBoYShhLGIpe3RoaXMuYz1hO3RoaXMuZj1hLm8uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuaD1iO3RoaXMuYT1uZXcgRihcIi1cIik7dGhpcy5qPSExIT09Yi5ldmVudHM7dGhpcy5nPSExIT09Yi5jbGFzc2VzfWZ1bmN0aW9uIGlhKGEpe2EuZyYmdyhhLmYsW2EuYS5jKFwid2ZcIixcImxvYWRpbmdcIildKTtLKGEsXCJsb2FkaW5nXCIpfWZ1bmN0aW9uIEwoYSl7aWYoYS5nKXt2YXIgYj15KGEuZixhLmEuYyhcIndmXCIsXCJhY3RpdmVcIikpLGM9W10sZD1bYS5hLmMoXCJ3ZlwiLFwibG9hZGluZ1wiKV07Ynx8Yy5wdXNoKGEuYS5jKFwid2ZcIixcImluYWN0aXZlXCIpKTt3KGEuZixjLGQpfUsoYSxcImluYWN0aXZlXCIpfWZ1bmN0aW9uIEsoYSxiLGMpe2lmKGEuaiYmYS5oW2JdKWlmKGMpYS5oW2JdKGMuYyxKKGMpKTtlbHNlIGEuaFtiXSgpfTtmdW5jdGlvbiBqYSgpe3RoaXMuYz17fX1mdW5jdGlvbiBrYShhLGIsYyl7dmFyIGQ9W10sZTtmb3IoZSBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZSkpe3ZhciBmPWEuY1tlXTtmJiZkLnB1c2goZihiW2VdLGMpKX1yZXR1cm4gZH07ZnVuY3Rpb24gTShhLGIpe3RoaXMuYz1hO3RoaXMuZj1iO3RoaXMuYT10KHRoaXMuYyxcInNwYW5cIix7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSx0aGlzLmYpfWZ1bmN0aW9uIE4oYSl7dShhLmMsXCJib2R5XCIsYS5hKX1mdW5jdGlvbiBPKGEpe3JldHVyblwiZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTk5OTlweDtsZWZ0Oi05OTk5cHg7Zm9udC1zaXplOjMwMHB4O3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowO3BhZGRpbmc6MDtmb250LXZhcmlhbnQ6bm9ybWFsO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LWZhbWlseTpcIitJKGEuYykrXCI7XCIrKFwiZm9udC1zdHlsZTpcIitIKGEpK1wiO2ZvbnQtd2VpZ2h0OlwiKyhhLmYrXCIwMFwiKStcIjtcIil9O2Z1bmN0aW9uIFAoYSxiLGMsZCxlLGYpe3RoaXMuZz1hO3RoaXMuaj1iO3RoaXMuYT1kO3RoaXMuYz1jO3RoaXMuZj1lfHwzRTM7dGhpcy5oPWZ8fHZvaWQgMH1QLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYy5vLmRvY3VtZW50LGI9dGhpcyxjPXEoKSxkPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGQsZSl7ZnVuY3Rpb24gZigpe3EoKS1jPj1iLmY/ZSgpOmEuZm9udHMubG9hZChmYShiLmEpLGIuaCkudGhlbihmdW5jdGlvbihhKXsxPD1hLmxlbmd0aD9kKCk6c2V0VGltZW91dChmLDI1KX0sZnVuY3Rpb24oKXtlKCl9KX1mKCl9KSxlPW51bGwsZj1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGQpe2U9c2V0VGltZW91dChkLGIuZil9KTtQcm9taXNlLnJhY2UoW2YsZF0pLnRoZW4oZnVuY3Rpb24oKXtlJiYoY2xlYXJUaW1lb3V0KGUpLGU9bnVsbCk7Yi5nKGIuYSl9LGZ1bmN0aW9uKCl7Yi5qKGIuYSl9KX07ZnVuY3Rpb24gUShhLGIsYyxkLGUsZixnKXt0aGlzLnY9YTt0aGlzLkI9Yjt0aGlzLmM9Yzt0aGlzLmE9ZDt0aGlzLnM9Z3x8XCJCRVNic3d5XCI7dGhpcy5mPXt9O3RoaXMudz1lfHwzRTM7dGhpcy51PWZ8fG51bGw7dGhpcy5tPXRoaXMuaj10aGlzLmg9dGhpcy5nPW51bGw7dGhpcy5nPW5ldyBNKHRoaXMuYyx0aGlzLnMpO3RoaXMuaD1uZXcgTSh0aGlzLmMsdGhpcy5zKTt0aGlzLmo9bmV3IE0odGhpcy5jLHRoaXMucyk7dGhpcy5tPW5ldyBNKHRoaXMuYyx0aGlzLnMpO2E9bmV3IEcodGhpcy5hLmMrXCIsc2VyaWZcIixKKHRoaXMuYSkpO2E9TyhhKTt0aGlzLmcuYS5zdHlsZS5jc3NUZXh0PWE7YT1uZXcgRyh0aGlzLmEuYytcIixzYW5zLXNlcmlmXCIsSih0aGlzLmEpKTthPU8oYSk7dGhpcy5oLmEuc3R5bGUuY3NzVGV4dD1hO2E9bmV3IEcoXCJzZXJpZlwiLEoodGhpcy5hKSk7YT1PKGEpO3RoaXMuai5hLnN0eWxlLmNzc1RleHQ9YTthPW5ldyBHKFwic2Fucy1zZXJpZlwiLEoodGhpcy5hKSk7YT1cbk8oYSk7dGhpcy5tLmEuc3R5bGUuY3NzVGV4dD1hO04odGhpcy5nKTtOKHRoaXMuaCk7Tih0aGlzLmopO04odGhpcy5tKX12YXIgUj17RDpcInNlcmlmXCIsQzpcInNhbnMtc2VyaWZcIn0sUz1udWxsO2Z1bmN0aW9uIFQoKXtpZihudWxsPT09Uyl7dmFyIGE9L0FwcGxlV2ViS2l0XFwvKFswLTldKykoPzpcXC4oWzAtOV0rKSkvLmV4ZWMod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1M9ISFhJiYoNTM2PnBhcnNlSW50KGFbMV0sMTApfHw1MzY9PT1wYXJzZUludChhWzFdLDEwKSYmMTE+PXBhcnNlSW50KGFbMl0sMTApKX1yZXR1cm4gU31RLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3RoaXMuZi5zZXJpZj10aGlzLmouYS5vZmZzZXRXaWR0aDt0aGlzLmZbXCJzYW5zLXNlcmlmXCJdPXRoaXMubS5hLm9mZnNldFdpZHRoO3RoaXMuQT1xKCk7VSh0aGlzKX07XG5mdW5jdGlvbiBsYShhLGIsYyl7Zm9yKHZhciBkIGluIFIpaWYoUi5oYXNPd25Qcm9wZXJ0eShkKSYmYj09PWEuZltSW2RdXSYmYz09PWEuZltSW2RdXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBVKGEpe3ZhciBiPWEuZy5hLm9mZnNldFdpZHRoLGM9YS5oLmEub2Zmc2V0V2lkdGgsZDsoZD1iPT09YS5mLnNlcmlmJiZjPT09YS5mW1wic2Fucy1zZXJpZlwiXSl8fChkPVQoKSYmbGEoYSxiLGMpKTtkP3EoKS1hLkE+PWEudz9UKCkmJmxhKGEsYixjKSYmKG51bGw9PT1hLnV8fGEudS5oYXNPd25Qcm9wZXJ0eShhLmEuYykpP1YoYSxhLnYpOlYoYSxhLkIpOm1hKGEpOlYoYSxhLnYpfWZ1bmN0aW9uIG1hKGEpe3NldFRpbWVvdXQocChmdW5jdGlvbigpe1UodGhpcyl9LGEpLDUwKX1mdW5jdGlvbiBWKGEsYil7c2V0VGltZW91dChwKGZ1bmN0aW9uKCl7dih0aGlzLmcuYSk7dih0aGlzLmguYSk7dih0aGlzLmouYSk7dih0aGlzLm0uYSk7Yih0aGlzLmEpfSxhKSwwKX07ZnVuY3Rpb24gVyhhLGIsYyl7dGhpcy5jPWE7dGhpcy5hPWI7dGhpcy5mPTA7dGhpcy5tPXRoaXMuaj0hMTt0aGlzLnM9Y312YXIgWD1udWxsO1cucHJvdG90eXBlLmc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hO2IuZyYmdyhiLmYsW2IuYS5jKFwid2ZcIixhLmMsSihhKS50b1N0cmluZygpLFwiYWN0aXZlXCIpXSxbYi5hLmMoXCJ3ZlwiLGEuYyxKKGEpLnRvU3RyaW5nKCksXCJsb2FkaW5nXCIpLGIuYS5jKFwid2ZcIixhLmMsSihhKS50b1N0cmluZygpLFwiaW5hY3RpdmVcIildKTtLKGIsXCJmb250YWN0aXZlXCIsYSk7dGhpcy5tPSEwO25hKHRoaXMpfTtcblcucHJvdG90eXBlLmg9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hO2lmKGIuZyl7dmFyIGM9eShiLmYsYi5hLmMoXCJ3ZlwiLGEuYyxKKGEpLnRvU3RyaW5nKCksXCJhY3RpdmVcIikpLGQ9W10sZT1bYi5hLmMoXCJ3ZlwiLGEuYyxKKGEpLnRvU3RyaW5nKCksXCJsb2FkaW5nXCIpXTtjfHxkLnB1c2goYi5hLmMoXCJ3ZlwiLGEuYyxKKGEpLnRvU3RyaW5nKCksXCJpbmFjdGl2ZVwiKSk7dyhiLmYsZCxlKX1LKGIsXCJmb250aW5hY3RpdmVcIixhKTtuYSh0aGlzKX07ZnVuY3Rpb24gbmEoYSl7MD09LS1hLmYmJmEuaiYmKGEubT8oYT1hLmEsYS5nJiZ3KGEuZixbYS5hLmMoXCJ3ZlwiLFwiYWN0aXZlXCIpXSxbYS5hLmMoXCJ3ZlwiLFwibG9hZGluZ1wiKSxhLmEuYyhcIndmXCIsXCJpbmFjdGl2ZVwiKV0pLEsoYSxcImFjdGl2ZVwiKSk6TChhLmEpKX07ZnVuY3Rpb24gb2EoYSl7dGhpcy5qPWE7dGhpcy5hPW5ldyBqYTt0aGlzLmg9MDt0aGlzLmY9dGhpcy5nPSEwfW9hLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe3RoaXMuYz1uZXcgY2EodGhpcy5qLGEuY29udGV4dHx8dGhpcy5qKTt0aGlzLmc9ITEhPT1hLmV2ZW50czt0aGlzLmY9ITEhPT1hLmNsYXNzZXM7cGEodGhpcyxuZXcgaGEodGhpcy5jLGEpLGEpfTtcbmZ1bmN0aW9uIHFhKGEsYixjLGQsZSl7dmFyIGY9MD09LS1hLmg7KGEuZnx8YS5nKSYmc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPWV8fG51bGwsbT1kfHxudWxsfHx7fTtpZigwPT09Yy5sZW5ndGgmJmYpTChiLmEpO2Vsc2V7Yi5mKz1jLmxlbmd0aDtmJiYoYi5qPWYpO3ZhciBoLGw9W107Zm9yKGg9MDtoPGMubGVuZ3RoO2grKyl7dmFyIGs9Y1toXSxuPW1bay5jXSxyPWIuYSx4PWs7ci5nJiZ3KHIuZixbci5hLmMoXCJ3ZlwiLHguYyxKKHgpLnRvU3RyaW5nKCksXCJsb2FkaW5nXCIpXSk7SyhyLFwiZm9udGxvYWRpbmdcIix4KTtyPW51bGw7aWYobnVsbD09PVgpaWYod2luZG93LkZvbnRGYWNlKXt2YXIgeD0vR2Vja28uKkZpcmVmb3hcXC8oXFxkKykvLmV4ZWMod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpLHhhPS9PUyBYLipWZXJzaW9uXFwvMTBcXC4uKlNhZmFyaS8uZXhlYyh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkmJi9BcHBsZS8uZXhlYyh3aW5kb3cubmF2aWdhdG9yLnZlbmRvcik7XG5YPXg/NDI8cGFyc2VJbnQoeFsxXSwxMCk6eGE/ITE6ITB9ZWxzZSBYPSExO1g/cj1uZXcgUChwKGIuZyxiKSxwKGIuaCxiKSxiLmMsayxiLnMsbik6cj1uZXcgUShwKGIuZyxiKSxwKGIuaCxiKSxiLmMsayxiLnMsYSxuKTtsLnB1c2gocil9Zm9yKGg9MDtoPGwubGVuZ3RoO2grKylsW2hdLnN0YXJ0KCl9fSwwKX1mdW5jdGlvbiBwYShhLGIsYyl7dmFyIGQ9W10sZT1jLnRpbWVvdXQ7aWEoYik7dmFyIGQ9a2EoYS5hLGMsYS5jKSxmPW5ldyBXKGEuYyxiLGUpO2EuaD1kLmxlbmd0aDtiPTA7Zm9yKGM9ZC5sZW5ndGg7YjxjO2IrKylkW2JdLmxvYWQoZnVuY3Rpb24oYixkLGMpe3FhKGEsZixiLGQsYyl9KX07ZnVuY3Rpb24gcmEoYSxiKXt0aGlzLmM9YTt0aGlzLmE9Yn1cbnJhLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoKXtpZihmW1wiX19tdGlfZm50THN0XCIrZF0pe3ZhciBjPWZbXCJfX210aV9mbnRMc3RcIitkXSgpLGU9W10saDtpZihjKWZvcih2YXIgbD0wO2w8Yy5sZW5ndGg7bCsrKXt2YXIgaz1jW2xdLmZvbnRmYW1pbHk7dm9pZCAwIT1jW2xdLmZvbnRTdHlsZSYmdm9pZCAwIT1jW2xdLmZvbnRXZWlnaHQ/KGg9Y1tsXS5mb250U3R5bGUrY1tsXS5mb250V2VpZ2h0LGUucHVzaChuZXcgRyhrLGgpKSk6ZS5wdXNoKG5ldyBHKGspKX1hKGUpfWVsc2Ugc2V0VGltZW91dChmdW5jdGlvbigpe2IoKX0sNTApfXZhciBjPXRoaXMsZD1jLmEucHJvamVjdElkLGU9Yy5hLnZlcnNpb247aWYoZCl7dmFyIGY9Yy5jLm87QSh0aGlzLmMsKGMuYS5hcGl8fFwiaHR0cHM6Ly9mYXN0LmZvbnRzLm5ldC9qc2FwaVwiKStcIi9cIitkK1wiLmpzXCIrKGU/XCI/dj1cIitlOlwiXCIpLGZ1bmN0aW9uKGUpe2U/YShbXSk6KGZbXCJfX01vbm90eXBlQ29uZmlndXJhdGlvbl9fXCIrXG5kXT1mdW5jdGlvbigpe3JldHVybiBjLmF9LGIoKSl9KS5pZD1cIl9fTW9ub3R5cGVBUElTY3JpcHRfX1wiK2R9ZWxzZSBhKFtdKX07ZnVuY3Rpb24gc2EoYSxiKXt0aGlzLmM9YTt0aGlzLmE9Yn1zYS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihhKXt2YXIgYixjLGQ9dGhpcy5hLnVybHN8fFtdLGU9dGhpcy5hLmZhbWlsaWVzfHxbXSxmPXRoaXMuYS50ZXN0U3RyaW5nc3x8e30sZz1uZXcgQjtiPTA7Zm9yKGM9ZC5sZW5ndGg7YjxjO2IrKyl6KHRoaXMuYyxkW2JdLEMoZykpO3ZhciBtPVtdO2I9MDtmb3IoYz1lLmxlbmd0aDtiPGM7YisrKWlmKGQ9ZVtiXS5zcGxpdChcIjpcIiksZFsxXSlmb3IodmFyIGg9ZFsxXS5zcGxpdChcIixcIiksbD0wO2w8aC5sZW5ndGg7bCs9MSltLnB1c2gobmV3IEcoZFswXSxoW2xdKSk7ZWxzZSBtLnB1c2gobmV3IEcoZFswXSkpO0UoZyxmdW5jdGlvbigpe2EobSxmKX0pfTtmdW5jdGlvbiB0YShhLGIpe2E/dGhpcy5jPWE6dGhpcy5jPXVhO3RoaXMuYT1bXTt0aGlzLmY9W107dGhpcy5nPWJ8fFwiXCJ9dmFyIHVhPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3NcIjtmdW5jdGlvbiB2YShhLGIpe2Zvcih2YXIgYz1iLmxlbmd0aCxkPTA7ZDxjO2QrKyl7dmFyIGU9YltkXS5zcGxpdChcIjpcIik7Mz09ZS5sZW5ndGgmJmEuZi5wdXNoKGUucG9wKCkpO3ZhciBmPVwiXCI7Mj09ZS5sZW5ndGgmJlwiXCIhPWVbMV0mJihmPVwiOlwiKTthLmEucHVzaChlLmpvaW4oZikpfX1cbmZ1bmN0aW9uIHdhKGEpe2lmKDA9PWEuYS5sZW5ndGgpdGhyb3cgRXJyb3IoXCJObyBmb250cyB0byBsb2FkIVwiKTtpZigtMSE9YS5jLmluZGV4T2YoXCJraXQ9XCIpKXJldHVybiBhLmM7Zm9yKHZhciBiPWEuYS5sZW5ndGgsYz1bXSxkPTA7ZDxiO2QrKyljLnB1c2goYS5hW2RdLnJlcGxhY2UoLyAvZyxcIitcIikpO2I9YS5jK1wiP2ZhbWlseT1cIitjLmpvaW4oXCIlN0NcIik7MDxhLmYubGVuZ3RoJiYoYis9XCImc3Vic2V0PVwiK2EuZi5qb2luKFwiLFwiKSk7MDxhLmcubGVuZ3RoJiYoYis9XCImdGV4dD1cIitlbmNvZGVVUklDb21wb25lbnQoYS5nKSk7cmV0dXJuIGJ9O2Z1bmN0aW9uIHlhKGEpe3RoaXMuZj1hO3RoaXMuYT1bXTt0aGlzLmM9e319XG52YXIgemE9e2xhdGluOlwiQkVTYnN3eVwiLFwibGF0aW4tZXh0XCI6XCJcXHUwMGU3XFx1MDBmNlxcdTAwZmNcXHUwMTFmXFx1MDE1ZlwiLGN5cmlsbGljOlwiXFx1MDQzOVxcdTA0NGZcXHUwNDE2XCIsZ3JlZWs6XCJcXHUwM2IxXFx1MDNiMlxcdTAzYTNcIixraG1lcjpcIlxcdTE3ODBcXHUxNzgxXFx1MTc4MlwiLEhhbnVtYW46XCJcXHUxNzgwXFx1MTc4MVxcdTE3ODJcIn0sQWE9e3RoaW46XCIxXCIsZXh0cmFsaWdodDpcIjJcIixcImV4dHJhLWxpZ2h0XCI6XCIyXCIsdWx0cmFsaWdodDpcIjJcIixcInVsdHJhLWxpZ2h0XCI6XCIyXCIsbGlnaHQ6XCIzXCIscmVndWxhcjpcIjRcIixib29rOlwiNFwiLG1lZGl1bTpcIjVcIixcInNlbWktYm9sZFwiOlwiNlwiLHNlbWlib2xkOlwiNlwiLFwiZGVtaS1ib2xkXCI6XCI2XCIsZGVtaWJvbGQ6XCI2XCIsYm9sZDpcIjdcIixcImV4dHJhLWJvbGRcIjpcIjhcIixleHRyYWJvbGQ6XCI4XCIsXCJ1bHRyYS1ib2xkXCI6XCI4XCIsdWx0cmFib2xkOlwiOFwiLGJsYWNrOlwiOVwiLGhlYXZ5OlwiOVwiLGw6XCIzXCIscjpcIjRcIixiOlwiN1wifSxCYT17aTpcImlcIixpdGFsaWM6XCJpXCIsbjpcIm5cIixub3JtYWw6XCJuXCJ9LFxuQ2E9L14odGhpbnwoPzooPzpleHRyYXx1bHRyYSktPyk/bGlnaHR8cmVndWxhcnxib29rfG1lZGl1bXwoPzooPzpzZW1pfGRlbWl8ZXh0cmF8dWx0cmEpLT8pP2JvbGR8YmxhY2t8aGVhdnl8bHxyfGJ8WzEtOV0wMCk/KG58aXxub3JtYWx8aXRhbGljKT8kLztcbmZ1bmN0aW9uIERhKGEpe2Zvcih2YXIgYj1hLmYubGVuZ3RoLGM9MDtjPGI7YysrKXt2YXIgZD1hLmZbY10uc3BsaXQoXCI6XCIpLGU9ZFswXS5yZXBsYWNlKC9cXCsvZyxcIiBcIiksZj1bXCJuNFwiXTtpZigyPD1kLmxlbmd0aCl7dmFyIGc7dmFyIG09ZFsxXTtnPVtdO2lmKG0pZm9yKHZhciBtPW0uc3BsaXQoXCIsXCIpLGg9bS5sZW5ndGgsbD0wO2w8aDtsKyspe3ZhciBrO2s9bVtsXTtpZihrLm1hdGNoKC9eW1xcdy1dKyQvKSl7dmFyIG49Q2EuZXhlYyhrLnRvTG93ZXJDYXNlKCkpO2lmKG51bGw9PW4paz1cIlwiO2Vsc2V7az1uWzJdO2s9bnVsbD09a3x8XCJcIj09az9cIm5cIjpCYVtrXTtuPW5bMV07aWYobnVsbD09bnx8XCJcIj09biluPVwiNFwiO2Vsc2UgdmFyIHI9QWFbbl0sbj1yP3I6aXNOYU4obik/XCI0XCI6bi5zdWJzdHIoMCwxKTtrPVtrLG5dLmpvaW4oXCJcIil9fWVsc2Ugaz1cIlwiO2smJmcucHVzaChrKX0wPGcubGVuZ3RoJiYoZj1nKTszPT1kLmxlbmd0aCYmKGQ9ZFsyXSxnPVtdLGQ9ZD9kLnNwbGl0KFwiLFwiKTpcbmcsMDxkLmxlbmd0aCYmKGQ9emFbZFswXV0pJiYoYS5jW2VdPWQpKX1hLmNbZV18fChkPXphW2VdKSYmKGEuY1tlXT1kKTtmb3IoZD0wO2Q8Zi5sZW5ndGg7ZCs9MSlhLmEucHVzaChuZXcgRyhlLGZbZF0pKX19O2Z1bmN0aW9uIEVhKGEsYil7dGhpcy5jPWE7dGhpcy5hPWJ9dmFyIEZhPXtBcmltbzohMCxDb3VzaW5lOiEwLFRpbm9zOiEwfTtFYS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihhKXt2YXIgYj1uZXcgQixjPXRoaXMuYyxkPW5ldyB0YSh0aGlzLmEuYXBpLHRoaXMuYS50ZXh0KSxlPXRoaXMuYS5mYW1pbGllczt2YShkLGUpO3ZhciBmPW5ldyB5YShlKTtEYShmKTt6KGMsd2EoZCksQyhiKSk7RShiLGZ1bmN0aW9uKCl7YShmLmEsZi5jLEZhKX0pfTtmdW5jdGlvbiBHYShhLGIpe3RoaXMuYz1hO3RoaXMuYT1ifUdhLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYS5pZCxjPXRoaXMuYy5vO2I/QSh0aGlzLmMsKHRoaXMuYS5hcGl8fFwiaHR0cHM6Ly91c2UudHlwZWtpdC5uZXRcIikrXCIvXCIrYitcIi5qc1wiLGZ1bmN0aW9uKGIpe2lmKGIpYShbXSk7ZWxzZSBpZihjLlR5cGVraXQmJmMuVHlwZWtpdC5jb25maWcmJmMuVHlwZWtpdC5jb25maWcuZm4pe2I9Yy5UeXBla2l0LmNvbmZpZy5mbjtmb3IodmFyIGU9W10sZj0wO2Y8Yi5sZW5ndGg7Zis9Milmb3IodmFyIGc9YltmXSxtPWJbZisxXSxoPTA7aDxtLmxlbmd0aDtoKyspZS5wdXNoKG5ldyBHKGcsbVtoXSkpO3RyeXtjLlR5cGVraXQubG9hZCh7ZXZlbnRzOiExLGNsYXNzZXM6ITEsYXN5bmM6ITB9KX1jYXRjaChsKXt9YShlKX19LDJFMyk6YShbXSl9O2Z1bmN0aW9uIEhhKGEsYil7dGhpcy5jPWE7dGhpcy5mPWI7dGhpcy5hPVtdfUhhLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZi5pZCxjPXRoaXMuYy5vLGQ9dGhpcztiPyhjLl9fd2ViZm9udGZvbnRkZWNrbW9kdWxlX198fChjLl9fd2ViZm9udGZvbnRkZWNrbW9kdWxlX189e30pLGMuX193ZWJmb250Zm9udGRlY2ttb2R1bGVfX1tiXT1mdW5jdGlvbihiLGMpe2Zvcih2YXIgZz0wLG09Yy5mb250cy5sZW5ndGg7ZzxtOysrZyl7dmFyIGg9Yy5mb250c1tnXTtkLmEucHVzaChuZXcgRyhoLm5hbWUsZ2EoXCJmb250LXdlaWdodDpcIitoLndlaWdodCtcIjtmb250LXN0eWxlOlwiK2guc3R5bGUpKSl9YShkLmEpfSxBKHRoaXMuYywodGhpcy5mLmFwaXx8XCJodHRwczovL2YuZm9udGRlY2suY29tL3MvY3NzL2pzL1wiKStlYSh0aGlzLmMpK1wiL1wiK2IrXCIuanNcIixmdW5jdGlvbihiKXtiJiZhKFtdKX0pKTphKFtdKX07dmFyIFk9bmV3IG9hKHdpbmRvdyk7WS5hLmMuY3VzdG9tPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBzYShiLGEpfTtZLmEuYy5mb250ZGVjaz1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgSGEoYixhKX07WS5hLmMubW9ub3R5cGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IHJhKGIsYSl9O1kuYS5jLnR5cGVraXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IEdhKGIsYSl9O1kuYS5jLmdvb2dsZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgRWEoYixhKX07dmFyIFo9e2xvYWQ6cChZLmxvYWQsWSl9OyB0cnVlPyEoX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gPSAoZnVuY3Rpb24oKXtyZXR1cm4gWn0pLmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXywgZXhwb3J0cywgbW9kdWxlKSxcblx0XHRcdFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpOlwidW5kZWZpbmVkXCIhPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1aOih3aW5kb3cuV2ViRm9udD1aLHdpbmRvdy5XZWJGb250Q29uZmlnJiZZLmxvYWQod2luZG93LldlYkZvbnRDb25maWcpKTt9KCkpO1xuXG5cbi8qKiovIH0pLFxuLyogMTY3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IG1ha2VGdWxsU2NyZWVuO1xuXG52YXIgX3V0aWxpdGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xuXG52YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIG1vZGU6ICdlbWJlZC1mdWxscGFnZScsXG4gIGRpc2FibGVTdWJtaXQ6IGZhbHNlLFxuICBvblN1Ym1pdDogX3V0aWxpdGllcy5ub29wXG59O1xuXG52YXIgcXVlcnlTdHJpbmdLZXlzID0ge1xuICBtb2RlOiAndHlwZWZvcm0tZW1iZWQnLFxuICBkaXNhYmxlU3VibWl0OiAnX19kYW5nZXJvdXMtZGlzYWJsZS1zdWJtaXNzaW9ucydcbn07XG5cbmZ1bmN0aW9uIG1ha2VGdWxsU2NyZWVuKGlmcmFtZSwgdXJsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gIGlmcmFtZS5zcmMgPSAoMCwgX3V0aWxpdGllcy5hcHBlbmRQYXJhbXNUb1VybCkodXJsLCAoMCwgX3V0aWxpdGllcy5yZXBsYWNlRXhpc3RpbmdLZXlzKShvcHRpb25zLCBxdWVyeVN0cmluZ0tleXMpKTtcblxuICB2YXIgb25Gb3JtU3VibWl0ID0gZnVuY3Rpb24gb25Gb3JtU3VibWl0KCkge1xuICAgIG9wdGlvbnMub25TdWJtaXQoKTtcbiAgfTtcblxuICAoMCwgX3V0aWxpdGllcy5lbnN1cmVNZXRhVmlld3BvcnQpKCk7XG4gICgwLCBfdXRpbGl0aWVzLmZpeFNhZmFyaVNjcm9sbCkoaWZyYW1lKTtcblxuICAvLyBGaXggc2Nyb2xsIGluc2lkZSB0aGUgaWZyYW1lIChyZW5kZXJlciB2MSlcbiAgaWZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmcmFtZS5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICgwLCBfdXRpbGl0aWVzLmFwcGx5SU9TRm9vdGVySGFjaykoaWZyYW1lKTtcbiAgICB9LCAxKTtcblxuICAgIGlmcmFtZS5jb250ZW50V2luZG93LmZvY3VzKCk7XG4gIH07XG5cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBfdXRpbGl0aWVzLm9uTWVzc2FnZSk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb3JtLXN1Ym1pdCcsIG9uRm9ybVN1Ym1pdCk7XG59XG5cbi8qKiovIH0pLFxuLyogMTY4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzY2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzNjcpO1xuXG5pZiAoZ2xvYmFsLl9iYWJlbFBvbHlmaWxsKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7XG59XG5nbG9iYWwuX2JhYmVsUG9seWZpbGwgPSB0cnVlO1xuXG52YXIgREVGSU5FX1BST1BFUlRZID0gXCJkZWZpbmVQcm9wZXJ0eVwiO1xuZnVuY3Rpb24gZGVmaW5lKE8sIGtleSwgdmFsdWUpIHtcbiAgT1trZXldIHx8IE9iamVjdFtERUZJTkVfUFJPUEVSVFldKE8sIGtleSwge1xuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSk7XG59XG5cbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZExlZnRcIiwgXCJcIi5wYWRTdGFydCk7XG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRSaWdodFwiLCBcIlwiLnBhZEVuZCk7XG5cblwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBbXVtrZXldICYmIGRlZmluZShBcnJheSwga2V5LCBGdW5jdGlvbi5jYWxsLmJpbmQoW11ba2V5XSkpO1xufSk7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyg1MCkpKVxuXG4vKioqLyB9KSxcbi8qIDE2OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3NSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3Nyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3OCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3OSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4MSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4NSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4OCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4OSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5MSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5NSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5Nyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5OCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5OSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwMCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwMSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwMik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwMyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwNCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwNSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwNik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwNyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwOCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwOSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxMCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxMSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxMyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxNCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxNSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxNik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxNyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxOSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyMCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyMSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyMik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyMyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyNCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyNSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyNik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyNyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyOCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyOSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzMCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzMSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzMik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzMyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzNCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzNSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzNik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzNyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzOCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzOSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0MSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0NSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0OCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1MSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1NSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1Nyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1OCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1OSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2MSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2NSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2OCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2OSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI3MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI3MSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI3Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI3Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDk3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjc0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjc1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMTI2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjc2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjc3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjc4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjc5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjgwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMTI5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMTMxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMTMyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjgxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjgyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjgzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjg0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjg1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjg2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjg3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjg4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjg5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjkwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjkxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjkyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjkzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjk0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjk1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjk2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjk3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjk4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjk5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzAwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzAxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzAyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzAzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzA0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzA1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzA2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzA3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzA4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzA5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzEwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzExKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzEyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzEzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzE0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzE1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzE2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzE3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzE4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzE5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzIwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzIxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzIyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzIzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzI0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzI1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzI2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzI3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzI4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzI5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzMwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzMxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzMyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzMzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzM0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzM1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzM2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzM3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzM4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzM5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQ0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQ1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQ2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQ3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQ4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQ5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzUwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzUxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzUyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzUzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzU0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzU1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzU2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzU3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzU4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzU5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzYwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzYxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzYyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzYzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzY0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzY1KTtcbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG5cblxuLyoqKi8gfSksXG4vKiAxNzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciByZWRlZmluZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xudmFyIE1FVEEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKS5LRVk7XG52YXIgJGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBzaGFyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1KTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xudmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xudmFyIHdrcyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG52YXIgd2tzRXh0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDkpO1xudmFyIHdrc0RlZmluZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzcpO1xudmFyIGVudW1LZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzEpO1xudmFyIGlzQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgY3JlYXRlRGVzYyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xudmFyIF9jcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcbnZhciBnT1BORXh0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTIpO1xudmFyICRHT1BEID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG52YXIgJERQID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbnZhciAka2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzgpO1xudmFyIGdPUEQgPSAkR09QRC5mO1xudmFyIGRQID0gJERQLmY7XG52YXIgZ09QTiA9IGdPUE5FeHQuZjtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciAkSlNPTiA9IGdsb2JhbC5KU09OO1xudmFyIF9zdHJpbmdpZnkgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG52YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xudmFyIGlzRW51bSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT1BTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIF9fd2VicGFja19yZXF1aXJlX18oNDEpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgX193ZWJwYWNrX3JlcXVpcmVfXyg1MikuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgX193ZWJwYWNrX3JlcXVpcmVfXyg1NykuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IF9fd2VicGFja19yZXF1aXJlX18oMTIpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuXG5cbi8qKiovIH0pLFxuLyogMTcxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzgpO1xudmFyIGdPUFMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KTtcbnZhciBwSUUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTcyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogX193ZWJwYWNrX3JlcXVpcmVfXyg0MCkgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAxNzMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIV9fd2VicGFja19yZXF1aXJlX18oNiksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLmYgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAxNzQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXyg2KSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogX193ZWJwYWNrX3JlcXVpcmVfXygxMTEpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTc1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbnZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNikuZjtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNikoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTc2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNikoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDE3NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgJGtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNikoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDE3OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuX193ZWJwYWNrX3JlcXVpcmVfXygyNikoJ2dldE93blByb3BlcnR5TmFtZXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMikuZjtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTc5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgbWV0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpLm9uRnJlZXplO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2KSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDE4MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgbWV0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpLm9uRnJlZXplO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2KSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTgxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgbWV0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpLm9uRnJlZXplO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2KSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAxODIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4yLjEyIE9iamVjdC5pc0Zyb3plbihPKVxudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNikoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTgzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjYpKCdpc1NlYWxlZCcsIGZ1bmN0aW9uICgkaXNTZWFsZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzU2VhbGVkKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc1NlYWxlZCA/ICRpc1NlYWxlZChpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDE4NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNikoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAxODUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogX193ZWJwYWNrX3JlcXVpcmVfXygxMTMpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTg2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMy4xMCBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IF9fd2VicGFja19yZXF1aXJlX18oMTg3KSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDE4NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vLyA3LjIuOSBTYW1lVmFsdWUoeCwgeSlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxODggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBzZXRQcm90b3R5cGVPZjogX193ZWJwYWNrX3JlcXVpcmVfXyg4MSkuc2V0IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTg5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIF9fd2VicGFja19yZXF1aXJlX18oMTMpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG5cblxuLyoqKi8gfSksXG4vKiAxOTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0Z1bmN0aW9uJywgeyBiaW5kOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNCkgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAxOTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGRQID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgX193ZWJwYWNrX3JlcXVpcmVfXyg2KSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAxOTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBIQVNfSU5TVEFOQ0UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKCdoYXNJbnN0YW5jZScpO1xudmFyIEZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyAxOS4yLjMuNiBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV0oVilcbmlmICghKEhBU19JTlNUQU5DRSBpbiBGdW5jdGlvblByb3RvKSkgX193ZWJwYWNrX3JlcXVpcmVfXyg3KS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAxOTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRwYXJzZUludCA9IF9fd2VicGFja19yZXF1aXJlX18oMTE2KTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTk0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkcGFyc2VGbG9hdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTE3KTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTk1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBjb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IF9fd2VicGFja19yZXF1aXJlX18oODMpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGdPUE4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxKS5mO1xudmFyIGdPUEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KS5mO1xudmFyIGRQID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KS5mO1xudmFyICR0cmltID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YoX193ZWJwYWNrX3JlcXVpcmVfXyg0MCkocHJvdG8pKSA9PSBOVU1CRVI7XG52YXIgVFJJTSA9ICd0cmltJyBpbiBTdHJpbmcucHJvdG90eXBlO1xuXG4vLyA3LjEuMyBUb051bWJlcihhcmd1bWVudClcbnZhciB0b051bWJlciA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgaXQgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgZmFsc2UpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IFRSSU0gPyBpdC50cmltKCkgOiAkdHJpbShpdCwgMyk7XG4gICAgdmFyIGZpcnN0ID0gaXQuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgdGhpcmQsIHJhZGl4LCBtYXhDb2RlO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGl0LmNoYXJDb2RlQXQoMik7XG4gICAgICBpZiAodGhpcmQgPT09IDg4IHx8IHRoaXJkID09PSAxMjApIHJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYgKGZpcnN0ID09PSA0OCkge1xuICAgICAgc3dpdGNoIChpdC5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgIGNhc2UgNjY6IGNhc2UgOTg6IHJhZGl4ID0gMjsgbWF4Q29kZSA9IDQ5OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA3OTogY2FzZSAxMTE6IHJhZGl4ID0gODsgbWF4Q29kZSA9IDU1OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBvWzAtN10rJC9pXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAraXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBkaWdpdHMgPSBpdC5zbGljZSgyKSwgaSA9IDAsIGwgPSBkaWdpdHMubGVuZ3RoLCBjb2RlOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbmlmICghJE51bWJlcignIDBvMScpIHx8ICEkTnVtYmVyKCcwYjEnKSB8fCAkTnVtYmVyKCcrMHgxJykpIHtcbiAgJE51bWJlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBpdCA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IHZhbHVlO1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gdGhhdCBpbnN0YW5jZW9mICROdW1iZXJcbiAgICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgICAgJiYgKEJST0tFTl9DT0YgPyBmYWlscyhmdW5jdGlvbiAoKSB7IHByb3RvLnZhbHVlT2YuY2FsbCh0aGF0KTsgfSkgOiBjb2YodGhhdCkgIT0gTlVNQkVSKVxuICAgICAgICA/IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKHRvTnVtYmVyKGl0KSksIHRoYXQsICROdW1iZXIpIDogdG9OdW1iZXIoaXQpO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KSA/IGdPUE4oQmFzZSkgOiAoXG4gICAgLy8gRVMzOlxuICAgICdNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSwnICtcbiAgICAvLyBFUzYgKGluIGNhc2UsIGlmIG1vZHVsZXMgd2l0aCBFUzYgTnVtYmVyIHN0YXRpY3MgcmVxdWlyZWQgYmVmb3JlKTpcbiAgICAnRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLCcgK1xuICAgICdNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhcyhCYXNlLCBrZXkgPSBrZXlzW2pdKSAmJiAhaGFzKCROdW1iZXIsIGtleSkpIHtcbiAgICAgIGRQKCROdW1iZXIsIGtleSwgZ09QRChCYXNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgJE51bWJlci5wcm90b3R5cGUgPSBwcm90bztcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkTnVtYmVyO1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG5cblxuLyoqKi8gfSksXG4vKiAxOTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciB0b0ludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcbnZhciBhTnVtYmVyVmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOCk7XG52YXIgcmVwZWF0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NCk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhX193ZWJwYWNrX3JlcXVpcmVfXygzKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDE5NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgYU51bWJlclZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTgpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAxOTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMS4yLjEgTnVtYmVyLkVQU0lMT05cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAxOTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMS4yLjIgTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBfaXNGaW5pdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIwMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IGlzSW50ZWdlcjogX193ZWJwYWNrX3JlcXVpcmVfXygxMTkpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc05hTjogZnVuY3Rpb24gaXNOYU4obnVtYmVyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiBudW1iZXIgIT0gbnVtYmVyO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIwMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgaXNJbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTkpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNTYWZlSW50ZWdlcjogZnVuY3Rpb24gaXNTYWZlSW50ZWdlcihudW1iZXIpIHtcbiAgICByZXR1cm4gaXNJbnRlZ2VyKG51bWJlcikgJiYgYWJzKG51bWJlcikgPD0gMHgxZmZmZmZmZmZmZmZmZjtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1BWF9TQUZFX0lOVEVHRVI6IDB4MWZmZmZmZmZmZmZmZmYgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNSU5fU0FGRV9JTlRFR0VSOiAtMHgxZmZmZmZmZmZmZmZmZiB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDIwNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJHBhcnNlRmxvYXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNyk7XG4vLyAyMC4xLjIuMTIgTnVtYmVyLnBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCAnTnVtYmVyJywgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDIwNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJHBhcnNlSW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTYpO1xuLy8gMjAuMS4yLjEzIE51bWJlci5wYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlSW50ICE9ICRwYXJzZUludCksICdOdW1iZXInLCB7IHBhcnNlSW50OiAkcGFyc2VJbnQgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGxvZzFwID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjApO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDIwOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJGF0YW5oID0gTWF0aC5hdGFuaDtcblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmF0YW5oKC0wKSAtPiAwXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGF0YW5oICYmIDEgLyAkYXRhbmgoLTApIDwgMCksICdNYXRoJywge1xuICBhdGFuaDogZnVuY3Rpb24gYXRhbmgoeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IE1hdGgubG9nKCgxICsgeCkgLyAoMSAtIHgpKSAvIDI7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIHNpZ24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjYnJ0OiBmdW5jdGlvbiBjYnJ0KHgpIHtcbiAgICByZXR1cm4gc2lnbih4ID0gK3gpICogTWF0aC5wb3coTWF0aC5hYnMoeCksIDEgLyAzKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNvc2g6IGZ1bmN0aW9uIGNvc2goeCkge1xuICAgIHJldHVybiAoZXhwKHggPSAreCkgKyBleHAoLXgpKSAvIDI7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJGV4cG0xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCRleHBtMSAhPSBNYXRoLmV4cG0xKSwgJ01hdGgnLCB7IGV4cG0xOiAkZXhwbTEgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgZnJvdW5kOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSkgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4yLjIuMTggTWF0aC5pbXVsKHgsIHkpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIF9fd2VicGFja19yZXF1aXJlX18oMykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjIxIE1hdGgubG9nMTAoeClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIxOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMCkgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjIyIE1hdGgubG9nMih4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogX193ZWJwYWNrX3JlcXVpcmVfXyg4NSkgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGV4cG0xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbi8vIFY4IG5lYXIgQ2hyb21pdW0gMzggaGFzIGEgcHJvYmxlbSB3aXRoIHZlcnkgc21hbGwgbnVtYmVyc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFNYXRoLnNpbmgoLTJlLTE3KSAhPSAtMmUtMTc7XG59KSwgJ01hdGgnLCB7XG4gIHNpbmg6IGZ1bmN0aW9uIHNpbmgoeCkge1xuICAgIHJldHVybiBNYXRoLmFicyh4ID0gK3gpIDwgMVxuICAgICAgPyAoZXhwbTEoeCkgLSBleHBtMSgteCkpIC8gMlxuICAgICAgOiAoZXhwKHggLSAxKSAtIGV4cCgteCAtIDEpKSAqIChNYXRoLkUgLyAyKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGV4cG0xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjIzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIwLjIuMi4zNCBNYXRoLnRydW5jKHgpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjI0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIyNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9JT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkYXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg3KSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxuX193ZWJwYWNrX3JlcXVpcmVfXyg4OCkoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRhdCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciB0b0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgY29udGV4dCA9IF9fd2VicGFja19yZXF1aXJlX18oOTApO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDkxKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgY29udGV4dCA9IF9fd2VicGFja19yZXF1aXJlX18oOTApO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDkxKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjMxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0KVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGNvbnRleHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkwKTtcbnZhciBTVEFSVFNfV0lUSCA9ICdzdGFydHNXaXRoJztcbnZhciAkc3RhcnRzV2l0aCA9ICcnW1NUQVJUU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDkxKShTVEFSVFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIHN0YXJ0c1dpdGg6IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgU1RBUlRTX1dJVEgpO1xuICAgIHZhciBpbmRleCA9IHRvTGVuZ3RoKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0aGF0Lmxlbmd0aCkpO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJHN0YXJ0c1dpdGhcbiAgICAgID8gJHN0YXJ0c1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGluZGV4KVxuICAgICAgOiB0aGF0LnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjMzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBCLjIuMy4yIFN0cmluZy5wcm90b3R5cGUuYW5jaG9yKG5hbWUpXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMzQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEIuMi4zLjMgU3RyaW5nLnByb3RvdHlwZS5iaWcoKVxuX193ZWJwYWNrX3JlcXVpcmVfXygxNCkoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIzNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gQi4yLjMuNCBTdHJpbmcucHJvdG90eXBlLmJsaW5rKClcbl9fd2VicGFja19yZXF1aXJlX18oMTQpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMzYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbl9fd2VicGFja19yZXF1aXJlX18oMTQpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMzcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjM4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxuX193ZWJwYWNrX3JlcXVpcmVfXygxNCkoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjM5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbl9fd2VicGFja19yZXF1aXJlX18oMTQpKCdmb250c2l6ZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250c2l6ZShzaXplKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnc2l6ZScsIHNpemUpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbl9fd2VicGFja19yZXF1aXJlX18oMTQpKCdpdGFsaWNzJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGl0YWxpY3MoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2knLCAnJywgJycpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEIuMi4zLjExIFN0cmluZy5wcm90b3R5cGUuc21hbGwoKVxuX193ZWJwYWNrX3JlcXVpcmVfXygxNCkoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI0MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxuX193ZWJwYWNrX3JlcXVpcmVfXygxNCkoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI0NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxuX193ZWJwYWNrX3JlcXVpcmVfXygxNCkoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI0NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxuX193ZWJwYWNrX3JlcXVpcmVfXygxNCkoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI0NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4zLjMuMSAvIDE1LjkuNC40IERhdGUubm93KClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdEYXRlJywgeyBub3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjQ3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogX193ZWJwYWNrX3JlcXVpcmVfXygzKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciB0b0lTT1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ5KTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAhPT0gdG9JU09TdHJpbmcpLCAnRGF0ZScsIHtcbiAgdG9JU09TdHJpbmc6IHRvSVNPU3RyaW5nXG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI0OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgZ2V0VGltZSA9IERhdGUucHJvdG90eXBlLmdldFRpbWU7XG52YXIgJHRvSVNPU3RyaW5nID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBseiA9IGZ1bmN0aW9uIChudW0pIHtcbiAgcmV0dXJuIG51bSA+IDkgPyBudW0gOiAnMCcgKyBudW07XG59O1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbm1vZHVsZS5leHBvcnRzID0gKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKC01ZTEzIC0gMSkpICE9ICcwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVonO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoTmFOKSk7XG59KSkgPyBmdW5jdGlvbiB0b0lTT1N0cmluZygpIHtcbiAgaWYgKCFpc0Zpbml0ZShnZXRUaW1lLmNhbGwodGhpcykpKSB0aHJvdyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgdmFyIGQgPSB0aGlzO1xuICB2YXIgeSA9IGQuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIG0gPSBkLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICB2YXIgcyA9IHkgPCAwID8gJy0nIDogeSA+IDk5OTkgPyAnKycgOiAnJztcbiAgcmV0dXJuIHMgKyAoJzAwMDAwJyArIE1hdGguYWJzKHkpKS5zbGljZShzID8gLTYgOiAtNCkgK1xuICAgICctJyArIGx6KGQuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0nICsgbHooZC5nZXRVVENEYXRlKCkpICtcbiAgICAnVCcgKyBseihkLmdldFVUQ0hvdXJzKCkpICsgJzonICsgbHooZC5nZXRVVENNaW51dGVzKCkpICtcbiAgICAnOicgKyBseihkLmdldFVUQ1NlY29uZHMoKSkgKyAnLicgKyAobSA+IDk5ID8gbSA6ICcwJyArIGx6KG0pKSArICdaJztcbn0gOiAkdG9JU09TdHJpbmc7XG5cblxuLyoqKi8gfSksXG4vKiAyNTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgX193ZWJwYWNrX3JlcXVpcmVfXygxMykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDI1MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgVE9fUFJJTUlUSVZFID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgndG9QcmltaXRpdmUnKTtcbnZhciBwcm90byA9IERhdGUucHJvdG90eXBlO1xuXG5pZiAoIShUT19QUklNSVRJVkUgaW4gcHJvdG8pKSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKShwcm90bywgVE9fUFJJTUlUSVZFLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MikpO1xuXG5cbi8qKiovIH0pLFxuLyogMjUyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjUzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnQXJyYXknLCB7IGlzQXJyYXk6IF9fd2VicGFja19yZXF1aXJlX18oNTgpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjU0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgY3R4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMik7XG52YXIgaXNBcnJheUl0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkyKTtcbnZhciB0b0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkzKTtcbnZhciBnZXRJdGVyRm4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXyg2MCkoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oOTMpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI1NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5qb2luKHNlcGFyYXRvcilcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoX193ZWJwYWNrX3JlcXVpcmVfXyg1MSkgIT0gT2JqZWN0IHx8ICFfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBodG1sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XG52YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjU4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIV9fd2VicGFja19yZXF1aXJlX18oMjEpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI1OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRmb3JFYWNoID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNykoMCk7XG52YXIgU1RSSUNUID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI2MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGlzQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcbnZhciBTUEVDSUVTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjYxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJG1hcCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkZmlsdGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIV9fd2VicGFja19yZXF1aXJlX18oMjEpKFtdLmZpbHRlciwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjcgLyAxNS40LjQuMjAgQXJyYXkucHJvdG90eXBlLmZpbHRlcihjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjYzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJHNvbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkZXZlcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjY1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJHJlZHVjZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkcmVkdWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKShbXS5yZWR1Y2VSaWdodCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE5IC8gMTUuNC40LjIyIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodChjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCB0cnVlKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkaW5kZXhPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjExIC8gMTUuNC40LjE0IEFycmF5LnByb3RvdHlwZS5pbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/ICRuYXRpdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjY4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9JT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNCAvIDE1LjQuNC4xNSBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IEBbKi0xXSAqLykge1xuICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICBpZiAoTkVHQVRJVkVfWkVSTykgcmV0dXJuICRuYXRpdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwO1xuICAgIHZhciBPID0gdG9JT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTtcbiAgICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICAgIGZvciAoO2luZGV4ID49IDA7IGluZGV4LS0pIGlmIChpbmRleCBpbiBPKSBpZiAoT1tpbmRleF0gPT09IHNlYXJjaEVsZW1lbnQpIHJldHVybiBpbmRleCB8fCAwO1xuICAgIHJldHVybiAtMTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGNvcHlXaXRoaW46IF9fd2VicGFja19yZXF1aXJlX18oMTI0KSB9KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzNCkoJ2NvcHlXaXRoaW4nKTtcblxuXG4vKioqLyB9KSxcbi8qIDI3MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogX193ZWJwYWNrX3JlcXVpcmVfXyg5NikgfSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzQpKCdmaWxsJyk7XG5cblxuLyoqKi8gfSksXG4vKiAyNzEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkZmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM0KShLRVkpO1xuXG5cbi8qKiovIH0pLFxuLyogMjcyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyAyMi4xLjMuOSBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkZmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM0KShLRVkpO1xuXG5cbi8qKiovIH0pLFxuLyogMjczICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDIpKCdBcnJheScpO1xuXG5cbi8qKiovIH0pLFxuLyogMjc0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XG52YXIgZFAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLmY7XG52YXIgZ09QTiA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpLmY7XG52YXIgaXNSZWdFeHAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcbnZhciAkZmxhZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxKTtcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcbnZhciBCYXNlID0gJFJlZ0V4cDtcbnZhciBwcm90byA9ICRSZWdFeHAucHJvdG90eXBlO1xudmFyIHJlMSA9IC9hL2c7XG52YXIgcmUyID0gL2EvZztcbi8vIFwibmV3XCIgY3JlYXRlcyBhIG5ldyBvYmplY3QsIG9sZCB3ZWJraXQgYnVnZ3kgaGVyZVxudmFyIENPUlJFQ1RfTkVXID0gbmV3ICRSZWdFeHAocmUxKSAhPT0gcmUxO1xuXG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXyg2KSAmJiAoIUNPUlJFQ1RfTkVXIHx8IF9fd2VicGFja19yZXF1aXJlX18oMykoZnVuY3Rpb24gKCkge1xuICByZTJbX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnbWF0Y2gnKV0gPSBmYWxzZTtcbiAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgcmV0dXJuICRSZWdFeHAocmUxKSAhPSByZTEgfHwgJFJlZ0V4cChyZTIpID09IHJlMiB8fCAkUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG59KSkpIHtcbiAgJFJlZ0V4cCA9IGZ1bmN0aW9uIFJlZ0V4cChwLCBmKSB7XG4gICAgdmFyIHRpUkUgPSB0aGlzIGluc3RhbmNlb2YgJFJlZ0V4cDtcbiAgICB2YXIgcGlSRSA9IGlzUmVnRXhwKHApO1xuICAgIHZhciBmaVUgPSBmID09PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICF0aVJFICYmIHBpUkUgJiYgcC5jb25zdHJ1Y3RvciA9PT0gJFJlZ0V4cCAmJiBmaVUgPyBwXG4gICAgICA6IGluaGVyaXRJZlJlcXVpcmVkKENPUlJFQ1RfTkVXXG4gICAgICAgID8gbmV3IEJhc2UocGlSRSAmJiAhZmlVID8gcC5zb3VyY2UgOiBwLCBmKVxuICAgICAgICA6IEJhc2UoKHBpUkUgPSBwIGluc3RhbmNlb2YgJFJlZ0V4cCkgPyBwLnNvdXJjZSA6IHAsIHBpUkUgJiYgZmlVID8gJGZsYWdzLmNhbGwocCkgOiBmKVxuICAgICAgLCB0aVJFID8gdGhpcyA6IHByb3RvLCAkUmVnRXhwKTtcbiAgfTtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSBpbiAkUmVnRXhwIHx8IGRQKCRSZWdFeHAsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYXNlW2tleV07IH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBCYXNlW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlKSwgaSA9IDA7IGtleXMubGVuZ3RoID4gaTspIHByb3h5KGtleXNbaSsrXSk7XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJFJlZ0V4cDtcbiAgJFJlZ0V4cC5wcm90b3R5cGUgPSBwcm90bztcbiAgX193ZWJwYWNrX3JlcXVpcmVfXygxMykoZ2xvYmFsLCAnUmVnRXhwJywgJFJlZ0V4cCk7XG59XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDIpKCdSZWdFeHAnKTtcblxuXG4vKioqLyB9KSxcbi8qIDI3NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygxMjYpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciAkZmxhZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxKTtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDI3NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDYyKSgnbWF0Y2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgTUFUQ0gsICRtYXRjaCkge1xuICAvLyAyMS4xLjMuMTEgU3RyaW5nLnByb3RvdHlwZS5tYXRjaChyZWdleHApXG4gIHJldHVybiBbZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgfSwgJG1hdGNoXTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjc3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xuX193ZWJwYWNrX3JlcXVpcmVfXyg2MikoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2UpIHtcbiAgLy8gMjEuMS4zLjE0IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKVxuICByZXR1cm4gW2Z1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgdmFyIGZuID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWRcbiAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgOiAkcmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gIH0sICRyZXBsYWNlXTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjc4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDYyKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCkge1xuICAvLyAyMS4xLjMuMTUgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2gocmVnZXhwKVxuICByZXR1cm4gW2Z1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gIH0sICRzZWFyY2hdO1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNzkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gQEBzcGxpdCBsb2dpY1xuX193ZWJwYWNrX3JlcXVpcmVfXyg2MikoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB2YXIgaXNSZWdFeHAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcbiAgdmFyIF9zcGxpdCA9ICRzcGxpdDtcbiAgdmFyICRwdXNoID0gW10ucHVzaDtcbiAgdmFyICRTUExJVCA9ICdzcGxpdCc7XG4gIHZhciBMRU5HVEggPSAnbGVuZ3RoJztcbiAgdmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICB2YXIgTlBDRyA9IC8oKT8/Ly5leGVjKCcnKVsxXSA9PT0gdW5kZWZpbmVkOyAvLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cFxuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgICRzcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gX3NwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyA0Mjk0OTY3Mjk1IDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBzZXBhcmF0b3IyLCBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoLCBpO1xuICAgICAgLy8gRG9lc24ndCBuZWVkIGZsYWdzIGd5LCBidXQgdGhleSBkb24ndCBodXJ0XG4gICAgICBpZiAoIU5QQ0cpIHNlcGFyYXRvcjIgPSBuZXcgUmVnRXhwKCdeJyArIHNlcGFyYXRvckNvcHkuc291cmNlICsgJyQoPyFcXFxccyknLCBmbGFncyk7XG4gICAgICB3aGlsZSAobWF0Y2ggPSBzZXBhcmF0b3JDb3B5LmV4ZWMoc3RyaW5nKSkge1xuICAgICAgICAvLyBgc2VwYXJhdG9yQ29weS5sYXN0SW5kZXhgIGlzIG5vdCByZWxpYWJsZSBjcm9zcy1icm93c2VyXG4gICAgICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYCBmb3IgTlBDR1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgICAgICBpZiAoIU5QQ0cgJiYgbWF0Y2hbTEVOR1RIXSA+IDEpIG1hdGNoWzBdLnJlcGxhY2Uoc2VwYXJhdG9yMiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50c1tMRU5HVEhdIC0gMjsgaSsrKSBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgICRzcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6IF9zcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH1cbiAgLy8gMjEuMS4zLjE3IFN0cmluZy5wcm90b3R5cGUuc3BsaXQoc2VwYXJhdG9yLCBsaW1pdClcbiAgcmV0dXJuIFtmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgIHZhciBmbiA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KSA6ICRzcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gIH0sICRzcGxpdF07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI4MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIExJQlJBUlkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKTtcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgYW5JbnN0YW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xudmFyIGZvck9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Myk7XG52YXIgdGFzayA9IF9fd2VicGFja19yZXF1aXJlX18oOTgpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk5KSgpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDApO1xudmFyIHBlcmZvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyOCk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW19fd2VicGFja19yZXF1aXJlX18oNSkoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhlbXB0eSwgZW1wdHkpO1xuICAgIH07XG4gICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIHJldHVybiAoaXNOb2RlIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJykgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGggPiBpKSBydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgIHByb21pc2UuX24gPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpIG9uVW5oYW5kbGVkKHByb21pc2UpO1xuICB9KTtcbn07XG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgdW5oYW5kbGVkID0gaXNVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgdmFyIHJlc3VsdCwgaGFuZGxlciwgY29uc29sZTtcbiAgICBpZiAodW5oYW5kbGVkKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pIHtcbiAgICAgICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgfSBwcm9taXNlLl9hID0gdW5kZWZpbmVkO1xuICAgIGlmICh1bmhhbmRsZWQgJiYgcmVzdWx0LmUpIHRocm93IHJlc3VsdC52O1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICByZXR1cm4gcHJvbWlzZS5faCAhPT0gMSAmJiAocHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jKS5sZW5ndGggPT09IDA7XG59O1xudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpIHtcbiAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHByb21pc2UuX3YgfSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICBwcm9taXNlLl9zID0gMjtcbiAgaWYgKCFwcm9taXNlLl9hKSBwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgdmFyIHRoZW47XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmICh0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgJHJlamVjdC5jYWxsKHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9LCBlKTsgLy8gd3JhcFxuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHRoaXMuX2MgPSBbXTsgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG4gICAgdGhpcy5fYSA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgIHRoaXMuX3MgPSAwOyAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICB0aGlzLl9kID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIGRvbmVcbiAgICB0aGlzLl92ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIHZhbHVlXG4gICAgdGhpcy5faCA9IDA7ICAgICAgICAgICAgICAvLyA8LSByZWplY3Rpb24gc3RhdGUsIDAgLSBkZWZhdWx0LCAxIC0gaGFuZGxlZCwgMiAtIHVuaGFuZGxlZFxuICAgIHRoaXMuX24gPSBmYWxzZTsgICAgICAgICAgLy8gPC0gbm90aWZ5XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpKCRQcm9taXNlLnByb3RvdHlwZSwge1xuICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9hKSB0aGlzLl9hLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgfTtcbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFByb21pc2U6ICRQcm9taXNlIH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXyg0NikoJFByb21pc2UsIFBST01JU0UpO1xuX193ZWJwYWNrX3JlcXVpcmVfXyg0MikoUFJPTUlTRSk7XG5XcmFwcGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMilbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgX193ZWJwYWNrX3JlcXVpcmVfXyg2MCkoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjgxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgd2VhayA9IF9fd2VicGFja19yZXF1aXJlX18oMTMzKTtcbnZhciB2YWxpZGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xuX193ZWJwYWNrX3JlcXVpcmVfXyg2NCkoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG5cblxuLyoqKi8gfSksXG4vKiAyODIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkdHlwZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcbnZhciBidWZmZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMSk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oMzkpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgQXJyYXlCdWZmZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xudmFyICRBcnJheUJ1ZmZlciA9IGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbnZhciAkRGF0YVZpZXcgPSBidWZmZXIuRGF0YVZpZXc7XG52YXIgJGlzVmlldyA9ICR0eXBlZC5BQlYgJiYgQXJyYXlCdWZmZXIuaXNWaWV3O1xudmFyICRzbGljZSA9ICRBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG52YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEFycmF5QnVmZmVyICE9PSAkQXJyYXlCdWZmZXIpLCB7IEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISR0eXBlZC5DT05TVFIsIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjMuMSBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJnKVxuICBpc1ZpZXc6IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICAgIHJldHVybiAkaXNWaWV3ICYmICRpc1ZpZXcoaXQpIHx8IGlzT2JqZWN0KGl0KSAmJiBWSUVXIGluIGl0O1xuICB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlUgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFuZXcgJEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS40LjMgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKCRzbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJHNsaWNlLmNhbGwoYW5PYmplY3QodGhpcyksIHN0YXJ0KTsgLy8gRkYgZml4XG4gICAgdmFyIGxlbiA9IGFuT2JqZWN0KHRoaXMpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGZpcnN0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBmaW5hbCA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluYWwgLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluYWwpIHtcbiAgICAgIHZpZXdULnNldFVpbnQ4KGluZGV4KyssIHZpZXdTLmdldFVpbnQ4KGZpcnN0KyspKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQyKShBUlJBWV9CVUZGRVIpO1xuXG5cbi8qKiovIH0pLFxuLyogMjgzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIV9fd2VicGFja19yZXF1aXJlX18oNjUpLkFCViwge1xuICBEYXRhVmlldzogX193ZWJwYWNrX3JlcXVpcmVfXygxMDEpLkRhdGFWaWV3XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI4NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMwKSgnSW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjg1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzApKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI4NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMwKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0sIHRydWUpO1xuXG5cbi8qKiovIH0pLFxuLyogMjg3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzApKCdJbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI4OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMwKSgnVWludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI4OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMwKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyOTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMCkoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyOTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMCkoJ0Zsb2F0MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI5MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMwKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjkzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDI2LjEuMSBSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciByQXBwbHkgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygyKS5SZWZsZWN0IHx8IHt9KS5hcHBseTtcbnZhciBmQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcbi8vIE1TIEVkZ2UgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXygzKShmdW5jdGlvbiAoKSB7XG4gIHJBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICB2YXIgVCA9IGFGdW5jdGlvbih0YXJnZXQpO1xuICAgIHZhciBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyOTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNCk7XG52YXIgckNvbnN0cnVjdCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjk1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIF9fd2VicGFja19yZXF1aXJlX18oMykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI5NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyNi4xLjQgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGdPUEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KS5mO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyOTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIDI2LjEuNSBSZWZsZWN0LmVudW1lcmF0ZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg5KShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI5OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyNi4xLjYgUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSBbLCByZWNlaXZlcl0pXG52YXIgZ09QRCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IGFyZ3VtZW50c1syXTtcbiAgdmFyIGRlc2MsIHByb3RvO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBpZiAoZGVzYyA9IGdPUEQuZih0YXJnZXQsIHByb3BlcnR5S2V5KSkgcmV0dXJuIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgID8gZGVzYy52YWx1ZVxuICAgIDogZGVzYy5nZXQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IGdldDogZ2V0IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjk5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDMwMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgZ2V0UHJvdG8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDI2LjEuMTAgUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IG93bktleXM6IF9fd2VicGFja19yZXF1aXJlX18oMTM1KSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDMwNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyNi4xLjEyIFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnModGFyZ2V0KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG52YXIgZ09QRCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgY3JlYXRlRGVzYyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDQgPyB0YXJnZXQgOiBhcmd1bWVudHNbM107XG4gIHZhciBvd25EZXNjID0gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgdmFyIGV4aXN0aW5nRGVzY3JpcHRvciwgcHJvdG87XG4gIGlmICghb3duRGVzYykge1xuICAgIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSB7XG4gICAgICByZXR1cm4gc2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgViwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICBvd25EZXNjID0gY3JlYXRlRGVzYygwKTtcbiAgfVxuICBpZiAoaGFzKG93bkRlc2MsICd2YWx1ZScpKSB7XG4gICAgaWYgKG93bkRlc2Mud3JpdGFibGUgPT09IGZhbHNlIHx8ICFpc09iamVjdChyZWNlaXZlcikpIHJldHVybiBmYWxzZTtcbiAgICBleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSB8fCBjcmVhdGVEZXNjKDApO1xuICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG93bkRlc2Muc2V0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IChvd25EZXNjLnNldC5jYWxsKHJlY2VpdmVyLCBWKSwgdHJ1ZSk7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgc2V0OiBzZXQgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgc2V0UHJvdG8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkaW5jbHVkZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2KSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzQpKCdpbmNsdWRlcycpO1xuXG5cbi8qKiovIH0pLFxuLyogMzA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdE1hcFxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM0KSgnZmxhdE1hcCcpO1xuXG5cbi8qKiovIH0pLFxuLyogMzA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdHRlblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciB0b0ludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzNCkoJ2ZsYXR0ZW4nKTtcblxuXG4vKioqLyB9KSxcbi8qIDMxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRhdCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJHBhZCA9IF9fd2VicGFja19yZXF1aXJlX18oMTM3KTtcbnZhciB1c2VyQWdlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMik7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDMxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkcGFkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzcpO1xudmFyIHVzZXJBZ2VudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTAyKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCksICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcblxuXG4vKioqLyB9KSxcbi8qIDMxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG5cblxuLyoqKi8gfSksXG4vKiAzMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBkZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGlzUmVnRXhwID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OSk7XG52YXIgZ2V0RmxhZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxKTtcbnZhciBSZWdFeHBQcm90byA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBmdW5jdGlvbiAocmVnZXhwLCBzdHJpbmcpIHtcbiAgdGhpcy5fciA9IHJlZ2V4cDtcbiAgdGhpcy5fcyA9IHN0cmluZztcbn07XG5cbl9fd2VicGFja19yZXF1aXJlX18oODkpKCRSZWdFeHBTdHJpbmdJdGVyYXRvciwgJ1JlZ0V4cCBTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgbWF0Y2ggPSB0aGlzLl9yLmV4ZWModGhpcy5fcyk7XG4gIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogbWF0Y2ggPT09IG51bGwgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIGRlZmluZWQodGhpcyk7XG4gICAgaWYgKCFpc1JlZ0V4cChyZWdleHApKSB0aHJvdyBUeXBlRXJyb3IocmVnZXhwICsgJyBpcyBub3QgYSByZWdleHAhJyk7XG4gICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgdmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSZWdFeHBQcm90byA/IFN0cmluZyhyZWdleHAuZmxhZ3MpIDogZ2V0RmxhZ3MuY2FsbChyZWdleHApO1xuICAgIHZhciByeCA9IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgfmZsYWdzLmluZGV4T2YoJ2cnKSA/IGZsYWdzIDogJ2cnICsgZmxhZ3MpO1xuICAgIHJ4Lmxhc3RJbmRleCA9IHRvTGVuZ3RoKHJlZ2V4cC5sYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJ4LCBTKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3NykoJ2FzeW5jSXRlcmF0b3InKTtcblxuXG4vKioqLyB9KSxcbi8qIDMxNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc3KSgnb2JzZXJ2YWJsZScpO1xuXG5cbi8qKiovIH0pLFxuLyogMzE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgb3duS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM1KTtcbnZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciBnT1BEID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG52YXIgY3JlYXRlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICR2YWx1ZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOCkoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzIwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRlbnRyaWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzgpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzIxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cbi8vIEIuMi4yLjIgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKFAsIGdldHRlcilcbl9fd2VicGFja19yZXF1aXJlX18oNikgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyBfX3dlYnBhY2tfcmVxdWlyZV9fKDY2KSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzIyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cbi8vIEIuMi4yLjMgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcilcbl9fd2VicGFja19yZXF1aXJlX18oNikgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyBfX3dlYnBhY2tfcmVxdWlyZV9fKDY2KSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVTZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBzZXQ6IGFGdW5jdGlvbihzZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzIzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KS5mO1xuXG4vLyBCLjIuMi40IE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBHZXR0ZXJfXyhQKVxuX193ZWJwYWNrX3JlcXVpcmVfXyg2KSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIF9fd2VicGFja19yZXF1aXJlX18oNjYpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDMyNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbnZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNikuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbl9fd2VicGFja19yZXF1aXJlX18oNikgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyBfX3dlYnBhY2tfcmVxdWlyZV9fKDY2KSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBTZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5zZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ01hcCcsIHsgdG9KU09OOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOSkoJ01hcCcpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzI2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogX193ZWJwYWNrX3JlcXVpcmVfXygxMzkpKCdTZXQnKSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDMyNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAub2Zcbl9fd2VicGFja19yZXF1aXJlX18oNjcpKCdNYXAnKTtcblxuXG4vKioqLyB9KSxcbi8qIDMyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQub2Zcbl9fd2VicGFja19yZXF1aXJlX18oNjcpKCdTZXQnKTtcblxuXG4vKioqLyB9KSxcbi8qIDMyOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLm9mXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDY3KSgnV2Vha01hcCcpO1xuXG5cbi8qKiovIH0pLFxuLyogMzMwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQub2Zcbl9fd2VicGFja19yZXF1aXJlX18oNjcpKCdXZWFrU2V0Jyk7XG5cblxuLyoqKi8gfSksXG4vKiAzMzEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbl9fd2VicGFja19yZXF1aXJlX18oNjgpKCdNYXAnKTtcblxuXG4vKioqLyB9KSxcbi8qIDMzMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxuX193ZWJwYWNrX3JlcXVpcmVfXyg2OCkoJ1NldCcpO1xuXG5cbi8qKiovIH0pLFxuLyogMzMzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAuZnJvbVxuX193ZWJwYWNrX3JlcXVpcmVfXyg2OCkoJ1dlYWtNYXAnKTtcblxuXG4vKioqLyB9KSxcbi8qIDMzNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbl9fd2VicGFja19yZXF1aXJlX18oNjgpKCdXZWFrU2V0Jyk7XG5cblxuLyoqKi8gfSksXG4vKiAzMzUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IGdsb2JhbDogX193ZWJwYWNrX3JlcXVpcmVfXygyKSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDMzNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogX193ZWJwYWNrX3JlcXVpcmVfXygyKSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDMzNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL3Byb3Bvc2FsLWlzLWVycm9yXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRXJyb3InLCB7XG4gIGlzRXJyb3I6IGZ1bmN0aW9uIGlzRXJyb3IoaXQpIHtcbiAgICByZXR1cm4gY29mKGl0KSA9PT0gJ0Vycm9yJztcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMzggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzM5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDM0MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzQxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBzY2FsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQxKTtcbnZhciBmcm91bmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDM0MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlzdWJoOiBmdW5jdGlvbiBpc3ViaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgLSAoeTEgPj4+IDApIC0gKCh+JHgwICYgJHkwIHwgfigkeDAgXiAkeTApICYgJHgwIC0gJHkwID4+PiAwKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpbXVsaDogZnVuY3Rpb24gaW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+PiAxNik7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzQ1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDM0NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzQ3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogX193ZWJwYWNrX3JlcXVpcmVfXygxNDEpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzQ4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbmJpdDogZnVuY3Rpb24gc2lnbmJpdCh4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpICE9IHggPyB4IDogeCA9PSAwID8gMSAvIHggPT0gSW5maW5pdHkgOiB4ID4gMDtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGNvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xudmFyIHByb21pc2VSZXNvbHZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjgpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDM1MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IF9fd2VicGFja19yZXF1aXJlX18oMTAwKTtcbnZhciBwZXJmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIG1ldGFkYXRhID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gbWV0YWRhdGEuc2V0O1xuXG5tZXRhZGF0YS5leHAoeyBkZWZpbmVNZXRhZGF0YTogZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIGFuT2JqZWN0KHRhcmdldCksIHRvTWV0YUtleSh0YXJnZXRLZXkpKTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIG1ldGFkYXRhID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIG1ldGFkYXRhID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5R2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiB1bmRlZmluZWQ7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YTogZnVuY3Rpb24gZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzU1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBTZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMSk7XG52YXIgZnJvbSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcbnZhciBtZXRhZGF0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIG1ldGFkYXRhID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YTogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzU3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBtZXRhZGF0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDM1OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgbWV0YWRhdGEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDM1OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgbWV0YWRhdGEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRtZXRhZGF0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgbWljcm90YXNrID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OSkoKTtcbnZhciBwcm9jZXNzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5wcm9jZXNzO1xudmFyIGlzTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHtcbiAgYXNhcDogZnVuY3Rpb24gYXNhcChmbikge1xuICAgIHZhciBkb21haW4gPSBpc05vZGUgJiYgcHJvY2Vzcy5kb21haW47XG4gICAgbWljcm90YXNrKGRvbWFpbiA/IGRvbWFpbi5iaW5kKGZuKSA6IGZuKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGNvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcbnZhciBtaWNyb3Rhc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk5KSgpO1xudmFyIE9CU0VSVkFCTEUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGFuSW5zdGFuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcbnZhciByZWRlZmluZUFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xudmFyIGhpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZhciBmb3JPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xudmFyIFJFVFVSTiA9IGZvck9mLlJFVFVSTjtcblxudmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZm4gPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFGdW5jdGlvbihmbik7XG59O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2M7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9jID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXAoKTtcbiAgfVxufTtcblxudmFyIHN1YnNjcmlwdGlvbkNsb3NlZCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbi5fbyA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgfVxufTtcblxudmFyIFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICBhbk9iamVjdChvYnNlcnZlcik7XG4gIHRoaXMuX2MgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX28gPSBvYnNlcnZlcjtcbiAgb2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcyk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKG9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgZWxzZSBhRnVuY3Rpb24oY2xlYW51cCk7XG4gICAgICB0aGlzLl9jID0gY2xlYW51cDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZCh0aGlzKSkgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbn07XG5cblN1YnNjcmlwdGlvbi5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7IGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpOyB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB0aGlzLl9zID0gc3Vic2NyaXB0aW9uO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLm5leHQpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB0aHJvdyB2YWx1ZTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5lcnJvcik7XG4gICAgICBpZiAoIW0pIHRocm93IHZhbHVlO1xuICAgICAgdmFsdWUgPSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuY29tcGxldGUpO1xuICAgICAgICB2YWx1ZSA9IG0gPyBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudmFyICRPYnNlcnZhYmxlID0gZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmVyKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgJE9ic2VydmFibGUsICdPYnNlcnZhYmxlJywgJ19mJykuX2YgPSBhRnVuY3Rpb24oc3Vic2NyaWJlcik7XG59O1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIHtcbiAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fZik7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyAoY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhRnVuY3Rpb24oZm4pO1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoYXQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlO1xuICAgIHZhciBtZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeClbT0JTRVJWQUJMRV0pO1xuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3QobWV0aG9kLmNhbGwoeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZm9yT2YoeCwgZmFsc2UsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybiBSRVRVUk47XG4gICAgICAgICAgICB9KSA9PT0gUkVUVVJOKSByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHRocm93IGU7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZW1zID0gbmV3IEFycmF5KGwpOyBpIDwgbDspIGl0ZW1zW2ldID0gYXJndW1lbnRzW2krK107XG4gICAgcmV0dXJuIG5ldyAodHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGUpKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbal0pO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5oaWRlKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IE9ic2VydmFibGU6ICRPYnNlcnZhYmxlIH0pO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQyKSgnT2JzZXJ2YWJsZScpO1xuXG5cbi8qKiovIH0pLFxuLyogMzYzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIHVzZXJBZ2VudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTAyKTtcbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIE1TSUUgPSAvTVNJRSAuXFwuLy50ZXN0KHVzZXJBZ2VudCk7IC8vIDwtIGRpcnR5IGllOS0gY2hlY2tcbnZhciB3cmFwID0gZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGZuLCB0aW1lIC8qICwgLi4uYXJncyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICB2YXIgYXJncyA9IGJvdW5kQXJncyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGZhbHNlO1xuICAgIHJldHVybiBzZXQoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGZuLCB0aW1lKTtcbiAgfTtcbn07XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiArICRleHBvcnQuRiAqIE1TSUUsIHtcbiAgc2V0VGltZW91dDogd3JhcChnbG9iYWwuc2V0VGltZW91dCksXG4gIHNldEludGVydmFsOiB3cmFwKGdsb2JhbC5zZXRJbnRlcnZhbClcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzY0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkdGFzayA9IF9fd2VicGFja19yZXF1aXJlX18oOTgpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRpdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3KTtcbnZhciBnZXRLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XG52YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGhpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcbnZhciB3a3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG5cblxuLyoqKi8gfSksXG4vKiAzNjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkgey8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvbWFzdGVyL0xJQ0VOU0UgZmlsZS4gQW5cbiAqIGFkZGl0aW9uYWwgZ3JhbnQgb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpblxuICogdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbiEoZnVuY3Rpb24oZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgdmFyIGluTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIjtcbiAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuICBpZiAocnVudGltZSkge1xuICAgIGlmIChpbk1vZHVsZSkge1xuICAgICAgLy8gSWYgcmVnZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxlLFxuICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cbiAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZWZpbmUgdGhlIHJ1bnRpbWUgZ2xvYmFsbHkgKGFzIGV4cGVjdGVkIGJ5IGdlbmVyYXRlZCBjb2RlKSBhcyBlaXRoZXJcbiAgLy8gbW9kdWxlLmV4cG9ydHMgKGlmIHdlJ3JlIGluIGEgbW9kdWxlKSBvciBhIG5ldywgZW1wdHkgb2JqZWN0LlxuICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIHJ1bnRpbWUubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi4gSWYgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQsIGhvd2V2ZXIsIHRoZVxuICAgICAgICAgIC8vIHJlc3VsdCBmb3IgdGhpcyBpdGVyYXRpb24gd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBzYW1lXG4gICAgICAgICAgLy8gcmVhc29uLiBOb3RlIHRoYXQgcmVqZWN0aW9ucyBvZiB5aWVsZGVkIFByb21pc2VzIGFyZSBub3RcbiAgICAgICAgICAvLyB0aHJvd24gYmFjayBpbnRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIGFzIGlzIHRoZSBjYXNlXG4gICAgICAgICAgLy8gd2hlbiBhbiBhd2FpdGVkIFByb21pc2UgaXMgcmVqZWN0ZWQuIFRoaXMgZGlmZmVyZW5jZSBpblxuICAgICAgICAgIC8vIGJlaGF2aW9yIGJldHdlZW4geWllbGQgYW5kIGF3YWl0IGlzIGltcG9ydGFudCwgYmVjYXVzZSBpdFxuICAgICAgICAgIC8vIGFsbG93cyB0aGUgY29uc3VtZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgeWllbGRlZFxuICAgICAgICAgIC8vIHJlamVjdGlvbiAoc3dhbGxvdyBpdCBhbmQgY29udGludWUsIG1hbnVhbGx5IC50aHJvdyBpdCBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgZ2VuZXJhdG9yLCBhYmFuZG9uIGl0ZXJhdGlvbiwgd2hhdGV2ZXIpLiBXaXRoXG4gICAgICAgICAgLy8gYXdhaXQsIGJ5IGNvbnRyYXN0LCB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBleGFtaW5lIHRoZVxuICAgICAgICAgIC8vIHJlamVjdGlvbiByZWFzb24gb3V0c2lkZSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBzbyB0aGVcbiAgICAgICAgICAvLyBvbmx5IG9wdGlvbiBpcyB0byB0aHJvdyBpdCBmcm9tIHRoZSBhd2FpdCBleHByZXNzaW9uLCBhbmRcbiAgICAgICAgICAvLyBsZXQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgZ2xvYmFsLnByb2Nlc3MuZG9tYWluKSB7XG4gICAgICBpbnZva2UgPSBnbG9iYWwucHJvY2Vzcy5kb21haW4uYmluZChpbnZva2UpO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yLnJldHVybikge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gQW1vbmcgdGhlIHZhcmlvdXMgdHJpY2tzIGZvciBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbFxuICAvLyBvYmplY3QsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vc3QgcmVsaWFibGUgdGVjaG5pcXVlIHRoYXQgZG9lcyBub3RcbiAgLy8gdXNlIGluZGlyZWN0IGV2YWwgKHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KS5cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzXG4pO1xuXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyg1MCkpKVxuXG4vKioqLyB9KSxcbi8qIDM2NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM2OCk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpLlJlZ0V4cC5lc2NhcGU7XG5cblxuLyoqKi8gfSksXG4vKiAzNjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRyZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzY5KSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzY5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlZ0V4cCwgcmVwbGFjZSkge1xuICB2YXIgcmVwbGFjZXIgPSByZXBsYWNlID09PSBPYmplY3QocmVwbGFjZSkgPyBmdW5jdGlvbiAocGFydCkge1xuICAgIHJldHVybiByZXBsYWNlW3BhcnRdO1xuICB9IDogcmVwbGFjZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBTdHJpbmcoaXQpLnJlcGxhY2UocmVnRXhwLCByZXBsYWNlcik7XG4gIH07XG59O1xuXG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2NyZWF0ZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9nZXQtcHJvdG90eXBlLW9mXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbFwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3JcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpO1xuXG52YXIgX2RlZmluZVByb3BlcnR5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZmluZVByb3BlcnR5KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiKTtcblxudmFyIF9zZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zZXRQcm90b3R5cGVPZik7XG5cbnZhciBfY3JlYXRlID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2NyZWF0ZVwiKTtcblxudmFyIF9jcmVhdGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlKTtcblxudmFyIF90eXBlb2YyID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgX3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90eXBlb2YyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArICh0eXBlb2Ygc3VwZXJDbGFzcyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiAoMCwgX3R5cGVvZjMuZGVmYXVsdCkoc3VwZXJDbGFzcykpKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9ICgwLCBfY3JlYXRlMi5kZWZhdWx0KShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mMi5kZWZhdWx0ID8gKDAsIF9zZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdHlwZW9mMiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIF90eXBlb2YzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHlwZW9mMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChzZWxmLCBjYWxsKSB7XG4gIGlmICghc2VsZikge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBjYWxsICYmICgodHlwZW9mIGNhbGwgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKGNhbGwpKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9pdGVyYXRvciA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvclwiKTtcblxudmFyIF9pdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pdGVyYXRvcik7XG5cbnZhciBfc3ltYm9sID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sXCIpO1xuXG52YXIgX3N5bWJvbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1ib2wpO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIF9pdGVyYXRvcjIuZGVmYXVsdCA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YoX2l0ZXJhdG9yMi5kZWZhdWx0KSA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufTsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKSB7XG4gIHJldHVybiAkT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuICRPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlN5bWJvbDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX3drcy1leHQnKS5mKCdpdGVyYXRvcicpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjYuOScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciBJU19XUkFQID0gdHlwZSAmICRleHBvcnQuVztcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGtleSwgb3duLCBvdXQ7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG93biAmJiBoYXMoZXhwb3J0cywga2V5KSkgY29udGludWU7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSBvd24gPyB0YXJnZXRba2V5XSA6IHNvdXJjZVtrZXldO1xuICAgIC8vIHByZXZlbnQgZ2xvYmFsIHBvbGx1dGlvbiBmb3IgbmFtZXNwYWNlc1xuICAgIGV4cG9ydHNba2V5XSA9IElTX0dMT0JBTCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0gJ2Z1bmN0aW9uJyA/IHNvdXJjZVtrZXldXG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICA6IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKVxuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2UgdGhlbSBpbiBsaWJyYXJ5XG4gICAgOiBJU19XUkFQICYmIHRhcmdldFtrZXldID09IG91dCA/IChmdW5jdGlvbiAoQykge1xuICAgICAgdmFyIEYgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEMpIHtcbiAgICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDKCk7XG4gICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQyhhKTtcbiAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDKGEsIGIpO1xuICAgICAgICAgIH0gcmV0dXJuIG5ldyBDKGEsIGIsIGMpO1xuICAgICAgICB9IHJldHVybiBDLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgICAgRltQUk9UT1RZUEVdID0gQ1tQUk9UT1RZUEVdO1xuICAgICAgcmV0dXJuIEY7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgfSkob3V0KSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5tZXRob2RzLiVOQU1FJVxuICAgIGlmIChJU19QUk9UTykge1xuICAgICAgKGV4cG9ydHMudmlydHVhbCB8fCAoZXhwb3J0cy52aXJ0dWFsID0ge30pKVtrZXldID0gb3V0O1xuICAgICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLnByb3RvdHlwZS4lTkFNRSVcbiAgICAgIGlmICh0eXBlICYgJGV4cG9ydC5SICYmIGV4cFByb3RvICYmICFleHBQcm90b1trZXldKSBoaWRlKGV4cFByb3RvLCBrZXksIG91dCk7XG4gICAgfVxuICB9XG59O1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faGlkZScpO1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiIsIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcbiIsInJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBUT19TVFJJTkdfVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbnZhciBET01JdGVyYWJsZXMgPSAoJ0NTU1J1bGVMaXN0LENTU1N0eWxlRGVjbGFyYXRpb24sQ1NTVmFsdWVMaXN0LENsaWVudFJlY3RMaXN0LERPTVJlY3RMaXN0LERPTVN0cmluZ0xpc3QsJyArXG4gICdET01Ub2tlbkxpc3QsRGF0YVRyYW5zZmVySXRlbUxpc3QsRmlsZUxpc3QsSFRNTEFsbENvbGxlY3Rpb24sSFRNTENvbGxlY3Rpb24sSFRNTEZvcm1FbGVtZW50LEhUTUxTZWxlY3RFbGVtZW50LCcgK1xuICAnTWVkaWFMaXN0LE1pbWVUeXBlQXJyYXksTmFtZWROb2RlTWFwLE5vZGVMaXN0LFBhaW50UmVxdWVzdExpc3QsUGx1Z2luLFBsdWdpbkFycmF5LFNWR0xlbmd0aExpc3QsU1ZHTnVtYmVyTGlzdCwnICtcbiAgJ1NWR1BhdGhTZWdMaXN0LFNWR1BvaW50TGlzdCxTVkdTdHJpbmdMaXN0LFNWR1RyYW5zZm9ybUxpc3QsU291cmNlQnVmZmVyTGlzdCxTdHlsZVNoZWV0TGlzdCxUZXh0VHJhY2tDdWVMaXN0LCcgK1xuICAnVGV4dFRyYWNrTGlzdCxUb3VjaExpc3QnKS5zcGxpdCgnLCcpO1xuXG5mb3IgKHZhciBpID0gMDsgaSA8IERPTUl0ZXJhYmxlcy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IERPTUl0ZXJhYmxlc1tpXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChwcm90byAmJiAhcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICBJdGVyYXRvcnNbTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCIvKiFcbiAgQ29weXJpZ2h0IChjKSAyMDE1IEplZCBXYXRzb24uXG4gIEJhc2VkIG9uIGNvZGUgdGhhdCBpcyBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBjYW5Vc2VET00gPSAhIShcblx0XHR0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuXHRcdHdpbmRvdy5kb2N1bWVudCAmJlxuXHRcdHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50XG5cdCk7XG5cblx0dmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0ge1xuXG5cdFx0Y2FuVXNlRE9NOiBjYW5Vc2VET00sXG5cblx0XHRjYW5Vc2VXb3JrZXJzOiB0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJyxcblxuXHRcdGNhblVzZUV2ZW50TGlzdGVuZXJzOlxuXHRcdFx0Y2FuVXNlRE9NICYmICEhKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyIHx8IHdpbmRvdy5hdHRhY2hFdmVudCksXG5cblx0XHRjYW5Vc2VWaWV3cG9ydDogY2FuVXNlRE9NICYmICEhd2luZG93LnNjcmVlblxuXG5cdH07XG5cblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIEV4ZWN1dGlvbkVudmlyb25tZW50O1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBFeGVjdXRpb25FbnZpcm9ubWVudDtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuRXhlY3V0aW9uRW52aXJvbm1lbnQgPSBFeGVjdXRpb25FbnZpcm9ubWVudDtcblx0fVxuXG59KCkpO1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cbiAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNrLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICAgICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAgICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICAgICAgICApO1xuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xuICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXG4gICAgICAgICAgICAvLyBBdm9pZCBzcGFtbWluZyB0aGUgY29uc29sZSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG5vdCBhY3Rpb25hYmxlIGV4Y2VwdCBmb3IgbGliIGF1dGhvcnNcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb21cbiAgICAgIC8vIHByb3BzLlxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gYWxsS2V5cykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjguNlxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7XG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpO1xufVxuXG4vKipcbiAqIEZvcmtlZCBmcm9tIGZianMvd2FybmluZzpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mYmpzL2Jsb2IvZTY2YmEyMGFkNWJlNDMzZWI1NDQyM2YyYjA5N2Q4MjkzMjRkOWRlNi9wYWNrYWdlcy9mYmpzL3NyYy9fX2ZvcmtzX18vd2FybmluZy5qc1xuICpcbiAqIE9ubHkgY2hhbmdlIGlzIHdlIHVzZSBjb25zb2xlLndhcm4gaW5zdGVhZCBvZiBjb25zb2xlLmVycm9yLFxuICogYW5kIGRvIG5vdGhpbmcgd2hlbiAnY29uc29sZScgaXMgbm90IHN1cHBvcnRlZC5cbiAqIFRoaXMgcmVhbGx5IHNpbXBsaWZpZXMgdGhlIGNvZGUuXG4gKiAtLS1cbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgbG93UHJpb3JpdHlXYXJuaW5nID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG5cbiAgbG93UHJpb3JpdHlXYXJuaW5nID0gZnVuY3Rpb24gKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Bsb3dQcmlvcml0eVdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZy5hcHBseSh1bmRlZmluZWQsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgbG93UHJpb3JpdHlXYXJuaW5nJDEgPSBsb3dQcmlvcml0eVdhcm5pbmc7XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuXG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTtcblxuLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTtcbiAgICAgIGxvd1ByaW9yaXR5V2FybmluZyQxKGZhbHNlLCAnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCB1bmRlZjtcblxuLyoqXG4gKiBEZWNvZGUgYSBVUkkgZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBVUkkgZW5jb2RlZCBzdHJpbmcuXG4gKiBAcmV0dXJucyB7U3RyaW5nfE51bGx9IFRoZSBkZWNvZGVkIHN0cmluZy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0LnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gZW5jb2RlIGEgZ2l2ZW4gaW5wdXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBlbmNvZGVkLlxuICogQHJldHVybnMge1N0cmluZ3xOdWxsfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFNpbXBsZSBxdWVyeSBzdHJpbmcgcGFyc2VyLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSBUaGUgcXVlcnkgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLlxuICogQHJldHVybnMge09iamVjdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5c3RyaW5nKHF1ZXJ5KSB7XG4gIHZhciBwYXJzZXIgPSAvKFtePT8mXSspPT8oW14mXSopL2dcbiAgICAsIHJlc3VsdCA9IHt9XG4gICAgLCBwYXJ0O1xuXG4gIHdoaWxlIChwYXJ0ID0gcGFyc2VyLmV4ZWMocXVlcnkpKSB7XG4gICAgdmFyIGtleSA9IGRlY29kZShwYXJ0WzFdKVxuICAgICAgLCB2YWx1ZSA9IGRlY29kZShwYXJ0WzJdKTtcblxuICAgIC8vXG4gICAgLy8gUHJldmVudCBvdmVycmlkaW5nIG9mIGV4aXN0aW5nIHByb3BlcnRpZXMuIFRoaXMgZW5zdXJlcyB0aGF0IGJ1aWxkLWluXG4gICAgLy8gbWV0aG9kcyBsaWtlIGB0b1N0cmluZ2Agb3IgX19wcm90b19fIGFyZSBub3Qgb3ZlcnJpZGVuIGJ5IG1hbGljaW91c1xuICAgIC8vIHF1ZXJ5c3RyaW5ncy5cbiAgICAvL1xuICAgIC8vIEluIHRoZSBjYXNlIGlmIGZhaWxlZCBkZWNvZGluZywgd2Ugd2FudCB0byBvbWl0IHRoZSBrZXkvdmFsdWUgcGFpcnNcbiAgICAvLyBmcm9tIHRoZSByZXN1bHQuXG4gICAgLy9cbiAgICBpZiAoa2V5ID09PSBudWxsIHx8IHZhbHVlID09PSBudWxsIHx8IGtleSBpbiByZXN1bHQpIGNvbnRpbnVlO1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhIHF1ZXJ5IHN0cmluZyB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdGhhdCBzaG91bGQgYmUgdHJhbnNmb3JtZWQuXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJlZml4IE9wdGlvbmFsIHByZWZpeC5cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBxdWVyeXN0cmluZ2lmeShvYmosIHByZWZpeCkge1xuICBwcmVmaXggPSBwcmVmaXggfHwgJyc7XG5cbiAgdmFyIHBhaXJzID0gW11cbiAgICAsIHZhbHVlXG4gICAgLCBrZXk7XG5cbiAgLy9cbiAgLy8gT3B0aW9uYWxseSBwcmVmaXggd2l0aCBhICc/JyBpZiBuZWVkZWRcbiAgLy9cbiAgaWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgcHJlZml4KSBwcmVmaXggPSAnPyc7XG5cbiAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgLy9cbiAgICAgIC8vIEVkZ2UgY2FzZXMgd2hlcmUgd2UgYWN0dWFsbHkgd2FudCB0byBlbmNvZGUgdGhlIHZhbHVlIHRvIGFuIGVtcHR5XG4gICAgICAvLyBzdHJpbmcgaW5zdGVhZCBvZiB0aGUgc3RyaW5naWZpZWQgdmFsdWUuXG4gICAgICAvL1xuICAgICAgaWYgKCF2YWx1ZSAmJiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmIHx8IGlzTmFOKHZhbHVlKSkpIHtcbiAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgIH1cblxuICAgICAga2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XG4gICAgICB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gZW5jb2RlIHRoZSBzdHJpbmdzLCB3ZSBzaG91bGQgYmFpbCBvdXQgYXMgd2UgZG9uJ3RcbiAgICAgIC8vIHdhbnQgdG8gYWRkIGludmFsaWQgc3RyaW5ncyB0byB0aGUgcXVlcnkuXG4gICAgICAvL1xuICAgICAgaWYgKGtleSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gbnVsbCkgY29udGludWU7XG4gICAgICBwYWlycy5wdXNoKGtleSArJz0nKyB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhaXJzLmxlbmd0aCA/IHByZWZpeCArIHBhaXJzLmpvaW4oJyYnKSA6ICcnO1xufVxuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuZXhwb3J0cy5zdHJpbmdpZnkgPSBxdWVyeXN0cmluZ2lmeTtcbmV4cG9ydHMucGFyc2UgPSBxdWVyeXN0cmluZztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAvLyBDYWxsIHRoaXMuY29uc3RydWN0b3IuZ0RTRlAgdG8gc3VwcG9ydCBzdWItY2xhc3Nlcy5cbiAgdmFyIHN0YXRlID0gdGhpcy5jb25zdHJ1Y3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHModGhpcy5wcm9wcywgdGhpcy5zdGF0ZSk7XG4gIGlmIChzdGF0ZSAhPT0gbnVsbCAmJiBzdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgLy8gQ2FsbCB0aGlzLmNvbnN0cnVjdG9yLmdEU0ZQIHRvIHN1cHBvcnQgc3ViLWNsYXNzZXMuXG4gIC8vIFVzZSB0aGUgc2V0U3RhdGUoKSB1cGRhdGVyIHRvIGVuc3VyZSBzdGF0ZSBpc24ndCBzdGFsZSBpbiBjZXJ0YWluIGVkZ2UgY2FzZXMuXG4gIGZ1bmN0aW9uIHVwZGF0ZXIocHJldlN0YXRlKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5jb25zdHJ1Y3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHJldHVybiBzdGF0ZSAhPT0gbnVsbCAmJiBzdGF0ZSAhPT0gdW5kZWZpbmVkID8gc3RhdGUgOiBudWxsO1xuICB9XG4gIC8vIEJpbmRpbmcgXCJ0aGlzXCIgaXMgaW1wb3J0YW50IGZvciBzaGFsbG93IHJlbmRlcmVyIHN1cHBvcnQuXG4gIHRoaXMuc2V0U3RhdGUodXBkYXRlci5iaW5kKHRoaXMpKTtcbn1cblxuZnVuY3Rpb24gY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICB0cnkge1xuICAgIHZhciBwcmV2UHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHZhciBwcmV2U3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHRoaXMucHJvcHMgPSBuZXh0UHJvcHM7XG4gICAgdGhpcy5zdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICB0aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90RmxhZyA9IHRydWU7XG4gICAgdGhpcy5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdCA9IHRoaXMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoXG4gICAgICBwcmV2UHJvcHMsXG4gICAgICBwcmV2U3RhdGVcbiAgICApO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMucHJvcHMgPSBwcmV2UHJvcHM7XG4gICAgdGhpcy5zdGF0ZSA9IHByZXZTdGF0ZTtcbiAgfVxufVxuXG4vLyBSZWFjdCBtYXkgd2FybiBhYm91dCBjV00vY1dSUC9jV1UgbWV0aG9kcyBiZWluZyBkZXByZWNhdGVkLlxuLy8gQWRkIGEgZmxhZyB0byBzdXBwcmVzcyB0aGVzZSB3YXJuaW5ncyBmb3IgdGhpcyBzcGVjaWFsIGNhc2UuXG5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyA9IHRydWU7XG5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgPSB0cnVlO1xuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nID0gdHJ1ZTtcblxuZnVuY3Rpb24gcG9seWZpbGwoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuXG4gIGlmICghcHJvdG90eXBlIHx8ICFwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgcG9seWZpbGwgY2xhc3MgY29tcG9uZW50cycpO1xuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb3RvdHlwZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm4gQ29tcG9uZW50O1xuICB9XG5cbiAgLy8gSWYgbmV3IGNvbXBvbmVudCBBUElzIGFyZSBkZWZpbmVkLCBcInVuc2FmZVwiIGxpZmVjeWNsZXMgd29uJ3QgYmUgY2FsbGVkLlxuICAvLyBFcnJvciBpZiBhbnkgb2YgdGhlc2UgbGlmZWN5Y2xlcyBhcmUgcHJlc2VudCxcbiAgLy8gQmVjYXVzZSB0aGV5IHdvdWxkIHdvcmsgZGlmZmVyZW50bHkgYmV0d2VlbiBvbGRlciBhbmQgbmV3ZXIgKDE2LjMrKSB2ZXJzaW9ucyBvZiBSZWFjdC5cbiAgdmFyIGZvdW5kV2lsbE1vdW50TmFtZSA9IG51bGw7XG4gIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgdmFyIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBudWxsO1xuICBpZiAodHlwZW9mIHByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnY29tcG9uZW50V2lsbE1vdW50JztcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvdG90eXBlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCc7XG4gIH1cbiAgaWYgKHR5cGVvZiBwcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb3RvdHlwZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICB9XG4gIGlmICh0eXBlb2YgcHJvdG90eXBlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm90b3R5cGUuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJztcbiAgfVxuICBpZiAoXG4gICAgZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsIHx8XG4gICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCB8fFxuICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGxcbiAgKSB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWU7XG4gICAgdmFyIG5ld0FwaU5hbWUgPVxuICAgICAgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyAnZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCknXG4gICAgICAgIDogJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlKCknO1xuXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICAnVW5zYWZlIGxlZ2FjeSBsaWZlY3ljbGVzIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgY29tcG9uZW50cyB1c2luZyBuZXcgY29tcG9uZW50IEFQSXMuXFxuXFxuJyArXG4gICAgICAgIGNvbXBvbmVudE5hbWUgK1xuICAgICAgICAnIHVzZXMgJyArXG4gICAgICAgIG5ld0FwaU5hbWUgK1xuICAgICAgICAnIGJ1dCBhbHNvIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbGVnYWN5IGxpZmVjeWNsZXM6JyArXG4gICAgICAgIChmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgPyAnXFxuICAnICsgZm91bmRXaWxsTW91bnROYW1lIDogJycpICtcbiAgICAgICAgKGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGxcbiAgICAgICAgICA/ICdcXG4gICcgKyBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lXG4gICAgICAgICAgOiAnJykgK1xuICAgICAgICAoZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCA/ICdcXG4gICcgKyBmb3VuZFdpbGxVcGRhdGVOYW1lIDogJycpICtcbiAgICAgICAgJ1xcblxcblRoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbicgK1xuICAgICAgICAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1hc3luYy1jb21wb25lbnQtbGlmZWN5Y2xlLWhvb2tzJ1xuICAgICk7XG4gIH1cblxuICAvLyBSZWFjdCA8PSAxNi4yIGRvZXMgbm90IHN1cHBvcnQgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy5cbiAgLy8gQXMgYSB3b3JrYXJvdW5kLCB1c2UgY1dNIGFuZCBjV1JQIHRvIGludm9rZSB0aGUgbmV3IHN0YXRpYyBsaWZlY3ljbGUuXG4gIC8vIE5ld2VyIHZlcnNpb25zIG9mIFJlYWN0IHdpbGwgaWdub3JlIHRoZXNlIGxpZmVjeWNsZXMgaWYgZ0RTRlAgZXhpc3RzLlxuICBpZiAodHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50ID0gY29tcG9uZW50V2lsbE1vdW50O1xuICAgIHByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcztcbiAgfVxuXG4gIC8vIFJlYWN0IDw9IDE2LjIgZG9lcyBub3Qgc3VwcG9ydCBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS5cbiAgLy8gQXMgYSB3b3JrYXJvdW5kLCB1c2UgY1dVIHRvIGludm9rZSB0aGUgbmV3IGxpZmVjeWNsZS5cbiAgLy8gTmV3ZXIgdmVyc2lvbnMgb2YgUmVhY3Qgd2lsbCBpZ25vcmUgdGhhdCBsaWZlY3ljbGUgaWYgZ1NCVSBleGlzdHMuXG4gIGlmICh0eXBlb2YgcHJvdG90eXBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgcG9seWZpbGwgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBmb3IgY29tcG9uZW50cyB0aGF0IGRvIG5vdCBkZWZpbmUgY29tcG9uZW50RGlkVXBkYXRlKCkgb24gdGhlIHByb3RvdHlwZSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdG90eXBlLmNvbXBvbmVudFdpbGxVcGRhdGUgPSBjb21wb25lbnRXaWxsVXBkYXRlO1xuXG4gICAgdmFyIGNvbXBvbmVudERpZFVwZGF0ZSA9IHByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU7XG5cbiAgICBwcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlUG9seWZpbGwoXG4gICAgICBwcmV2UHJvcHMsXG4gICAgICBwcmV2U3RhdGUsXG4gICAgICBtYXliZVNuYXBzaG90XG4gICAgKSB7XG4gICAgICAvLyAxNi4zKyB3aWxsIG5vdCBleGVjdXRlIG91ciB3aWxsLXVwZGF0ZSBtZXRob2Q7XG4gICAgICAvLyBJdCB3aWxsIHBhc3MgYSBzbmFwc2hvdCB2YWx1ZSB0byBkaWQtdXBkYXRlIHRob3VnaC5cbiAgICAgIC8vIE9sZGVyIHZlcnNpb25zIHdpbGwgcmVxdWlyZSBvdXIgcG9seWZpbGxlZCB3aWxsLXVwZGF0ZSB2YWx1ZS5cbiAgICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIGJvdGggY2FzZXMsIGJ1dCBjYW4ndCBqdXN0IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgXCJtYXliZVNuYXBzaG90XCIsXG4gICAgICAvLyBCZWNhdXNlIGZvciA8PSAxNS54IHZlcnNpb25zIHRoaXMgbWlnaHQgYmUgYSBcInByZXZDb250ZXh0XCIgb2JqZWN0LlxuICAgICAgLy8gV2UgYWxzbyBjYW4ndCBqdXN0IGNoZWNrIFwiX19yZWFjdEludGVybmFsU25hcHNob3RcIixcbiAgICAgIC8vIEJlY2F1c2UgZ2V0LXNuYXBzaG90IG1pZ2h0IHJldHVybiBhIGZhbHN5IHZhbHVlLlxuICAgICAgLy8gU28gY2hlY2sgZm9yIHRoZSBleHBsaWNpdCBfX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEZsYWcgZmxhZyB0byBkZXRlcm1pbmUgYmVoYXZpb3IuXG4gICAgICB2YXIgc25hcHNob3QgPSB0aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90RmxhZ1xuICAgICAgICA/IHRoaXMuX19yZWFjdEludGVybmFsU25hcHNob3RcbiAgICAgICAgOiBtYXliZVNuYXBzaG90O1xuXG4gICAgICBjb21wb25lbnREaWRVcGRhdGUuY2FsbCh0aGlzLCBwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gQ29tcG9uZW50O1xufVxuXG5leHBvcnQgeyBwb2x5ZmlsbCB9O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJvZHlPcGVuQ2xhc3NOYW1lID0gZXhwb3J0cy5wb3J0YWxDbGFzc05hbWUgPSB1bmRlZmluZWQ7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3JlYWN0RG9tID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcblxudmFyIF9yZWFjdERvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdERvbSk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBfTW9kYWxQb3J0YWwgPSByZXF1aXJlKFwiLi9Nb2RhbFBvcnRhbFwiKTtcblxudmFyIF9Nb2RhbFBvcnRhbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Nb2RhbFBvcnRhbCk7XG5cbnZhciBfYXJpYUFwcEhpZGVyID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvYXJpYUFwcEhpZGVyXCIpO1xuXG52YXIgYXJpYUFwcEhpZGVyID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2FyaWFBcHBIaWRlcik7XG5cbnZhciBfc2FmZUhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvc2FmZUhUTUxFbGVtZW50XCIpO1xuXG52YXIgX3NhZmVIVE1MRWxlbWVudDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zYWZlSFRNTEVsZW1lbnQpO1xuXG52YXIgX3JlYWN0TGlmZWN5Y2xlc0NvbXBhdCA9IHJlcXVpcmUoXCJyZWFjdC1saWZlY3ljbGVzLWNvbXBhdFwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBlbHNlIHsgdmFyIG5ld09iaiA9IHt9OyBpZiAob2JqICE9IG51bGwpIHsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IG5ld09iai5kZWZhdWx0ID0gb2JqOyByZXR1cm4gbmV3T2JqOyB9IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgcG9ydGFsQ2xhc3NOYW1lID0gZXhwb3J0cy5wb3J0YWxDbGFzc05hbWUgPSBcIlJlYWN0TW9kYWxQb3J0YWxcIjtcbnZhciBib2R5T3BlbkNsYXNzTmFtZSA9IGV4cG9ydHMuYm9keU9wZW5DbGFzc05hbWUgPSBcIlJlYWN0TW9kYWxfX0JvZHktLW9wZW5cIjtcblxudmFyIGlzUmVhY3QxNiA9IF9yZWFjdERvbTIuZGVmYXVsdC5jcmVhdGVQb3J0YWwgIT09IHVuZGVmaW5lZDtcbnZhciBjcmVhdGVQb3J0YWwgPSBpc1JlYWN0MTYgPyBfcmVhY3REb20yLmRlZmF1bHQuY3JlYXRlUG9ydGFsIDogX3JlYWN0RG9tMi5kZWZhdWx0LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyO1xuXG5mdW5jdGlvbiBnZXRQYXJlbnRFbGVtZW50KHBhcmVudFNlbGVjdG9yKSB7XG4gIHJldHVybiBwYXJlbnRTZWxlY3RvcigpO1xufVxuXG52YXIgTW9kYWwgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoTW9kYWwsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIE1vZGFsKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNb2RhbCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfcmVmID0gTW9kYWwuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihNb2RhbCkpLmNhbGwuYXBwbHkoX3JlZiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLnJlbW92ZVBvcnRhbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICFpc1JlYWN0MTYgJiYgX3JlYWN0RG9tMi5kZWZhdWx0LnVubW91bnRDb21wb25lbnRBdE5vZGUoX3RoaXMubm9kZSk7XG4gICAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50RWxlbWVudChfdGhpcy5wcm9wcy5wYXJlbnRTZWxlY3Rvcik7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoX3RoaXMubm9kZSk7XG4gICAgfSwgX3RoaXMucG9ydGFsUmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMucG9ydGFsID0gcmVmO1xuICAgIH0sIF90aGlzLnJlbmRlclBvcnRhbCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgdmFyIHBvcnRhbCA9IGNyZWF0ZVBvcnRhbChfdGhpcywgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX01vZGFsUG9ydGFsMi5kZWZhdWx0LCBfZXh0ZW5kcyh7IGRlZmF1bHRTdHlsZXM6IE1vZGFsLmRlZmF1bHRTdHlsZXMgfSwgcHJvcHMpKSwgX3RoaXMubm9kZSk7XG4gICAgICBfdGhpcy5wb3J0YWxSZWYocG9ydGFsKTtcbiAgICB9LCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhNb2RhbCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAoIV9zYWZlSFRNTEVsZW1lbnQuY2FuVXNlRE9NKSByZXR1cm47XG5cbiAgICAgIGlmICghaXNSZWFjdDE2KSB7XG4gICAgICAgIHRoaXMubm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB9XG4gICAgICB0aGlzLm5vZGUuY2xhc3NOYW1lID0gdGhpcy5wcm9wcy5wb3J0YWxDbGFzc05hbWU7XG5cbiAgICAgIHZhciBwYXJlbnQgPSBnZXRQYXJlbnRFbGVtZW50KHRoaXMucHJvcHMucGFyZW50U2VsZWN0b3IpO1xuICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHRoaXMubm9kZSk7XG5cbiAgICAgICFpc1JlYWN0MTYgJiYgdGhpcy5yZW5kZXJQb3J0YWwodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFNuYXBzaG90QmVmb3JlVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIHByZXZQYXJlbnQgPSBnZXRQYXJlbnRFbGVtZW50KHByZXZQcm9wcy5wYXJlbnRTZWxlY3Rvcik7XG4gICAgICB2YXIgbmV4dFBhcmVudCA9IGdldFBhcmVudEVsZW1lbnQodGhpcy5wcm9wcy5wYXJlbnRTZWxlY3Rvcik7XG4gICAgICByZXR1cm4geyBwcmV2UGFyZW50OiBwcmV2UGFyZW50LCBuZXh0UGFyZW50OiBuZXh0UGFyZW50IH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBfLCBzbmFwc2hvdCkge1xuICAgICAgaWYgKCFfc2FmZUhUTUxFbGVtZW50LmNhblVzZURPTSkgcmV0dXJuO1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNPcGVuID0gX3Byb3BzLmlzT3BlbixcbiAgICAgICAgICBwb3J0YWxDbGFzc05hbWUgPSBfcHJvcHMucG9ydGFsQ2xhc3NOYW1lO1xuXG5cbiAgICAgIGlmIChwcmV2UHJvcHMucG9ydGFsQ2xhc3NOYW1lICE9PSBwb3J0YWxDbGFzc05hbWUpIHtcbiAgICAgICAgdGhpcy5ub2RlLmNsYXNzTmFtZSA9IHBvcnRhbENsYXNzTmFtZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByZXZQYXJlbnQgPSBzbmFwc2hvdC5wcmV2UGFyZW50LFxuICAgICAgICAgIG5leHRQYXJlbnQgPSBzbmFwc2hvdC5uZXh0UGFyZW50O1xuXG4gICAgICBpZiAobmV4dFBhcmVudCAhPT0gcHJldlBhcmVudCkge1xuICAgICAgICBwcmV2UGFyZW50LnJlbW92ZUNoaWxkKHRoaXMubm9kZSk7XG4gICAgICAgIG5leHRQYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5ub2RlKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RvcCB1bm5lY2Vzc2FyeSByZW5kZXJzIGlmIG1vZGFsIGlzIHJlbWFpbmluZyBjbG9zZWRcbiAgICAgIGlmICghcHJldlByb3BzLmlzT3BlbiAmJiAhaXNPcGVuKSByZXR1cm47XG5cbiAgICAgICFpc1JlYWN0MTYgJiYgdGhpcy5yZW5kZXJQb3J0YWwodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKCFfc2FmZUhUTUxFbGVtZW50LmNhblVzZURPTSB8fCAhdGhpcy5ub2RlIHx8ICF0aGlzLnBvcnRhbCkgcmV0dXJuO1xuXG4gICAgICB2YXIgc3RhdGUgPSB0aGlzLnBvcnRhbC5zdGF0ZTtcbiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgdmFyIGNsb3Nlc0F0ID0gc3RhdGUuaXNPcGVuICYmIHRoaXMucHJvcHMuY2xvc2VUaW1lb3V0TVMgJiYgKHN0YXRlLmNsb3Nlc0F0IHx8IG5vdyArIHRoaXMucHJvcHMuY2xvc2VUaW1lb3V0TVMpO1xuXG4gICAgICBpZiAoY2xvc2VzQXQpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5iZWZvcmVDbG9zZSkge1xuICAgICAgICAgIHRoaXMucG9ydGFsLmNsb3NlV2l0aFRpbWVvdXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5yZW1vdmVQb3J0YWwsIGNsb3Nlc0F0IC0gbm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUG9ydGFsKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICBpZiAoIV9zYWZlSFRNTEVsZW1lbnQuY2FuVXNlRE9NIHx8ICFpc1JlYWN0MTYpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5ub2RlICYmIGlzUmVhY3QxNikge1xuICAgICAgICB0aGlzLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JlYXRlUG9ydGFsKF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9Nb2RhbFBvcnRhbDIuZGVmYXVsdCwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMucG9ydGFsUmVmLFxuICAgICAgICBkZWZhdWx0U3R5bGVzOiBNb2RhbC5kZWZhdWx0U3R5bGVzXG4gICAgICB9LCB0aGlzLnByb3BzKSksIHRoaXMubm9kZSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwic2V0QXBwRWxlbWVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRBcHBFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGFyaWFBcHBIaWRlci5zZXRFbGVtZW50KGVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzICovXG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzICovXG5cbiAgfV0pO1xuXG4gIHJldHVybiBNb2RhbDtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cbk1vZGFsLnByb3BUeXBlcyA9IHtcbiAgaXNPcGVuOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxcbiAgc3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc2hhcGUoe1xuICAgIGNvbnRlbnQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICAgIG92ZXJsYXk6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0XG4gIH0pLFxuICBwb3J0YWxDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuICBib2R5T3BlbkNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIGh0bWxPcGVuQ2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgY2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIF9wcm9wVHlwZXMyLmRlZmF1bHQuc2hhcGUoe1xuICAgIGJhc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYWZ0ZXJPcGVuOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGJlZm9yZUNsb3NlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkXG4gIH0pXSksXG4gIG92ZXJsYXlDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFtfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgX3Byb3BUeXBlczIuZGVmYXVsdC5zaGFwZSh7XG4gICAgYmFzZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhZnRlck9wZW46IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYmVmb3JlQ2xvc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWRcbiAgfSldKSxcbiAgYXBwRWxlbWVudDogX3Byb3BUeXBlczIuZGVmYXVsdC5pbnN0YW5jZU9mKF9zYWZlSFRNTEVsZW1lbnQyLmRlZmF1bHQpLFxuICBvbkFmdGVyT3BlbjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICBvblJlcXVlc3RDbG9zZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICBjbG9zZVRpbWVvdXRNUzogX3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsXG4gIGFyaWFIaWRlQXBwOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIHNob3VsZEZvY3VzQWZ0ZXJSZW5kZXI6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgc2hvdWxkQ2xvc2VPbk92ZXJsYXlDbGljazogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgcGFyZW50U2VsZWN0b3I6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgYXJpYTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG4gIGRhdGE6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICByb2xlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgY29udGVudExhYmVsOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgc2hvdWxkQ2xvc2VPbkVzYzogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBvdmVybGF5UmVmOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIGNvbnRlbnRSZWY6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuY1xufTtcbk1vZGFsLmRlZmF1bHRQcm9wcyA9IHtcbiAgaXNPcGVuOiBmYWxzZSxcbiAgcG9ydGFsQ2xhc3NOYW1lOiBwb3J0YWxDbGFzc05hbWUsXG4gIGJvZHlPcGVuQ2xhc3NOYW1lOiBib2R5T3BlbkNsYXNzTmFtZSxcbiAgYXJpYUhpZGVBcHA6IHRydWUsXG4gIGNsb3NlVGltZW91dE1TOiAwLFxuICBzaG91bGRGb2N1c0FmdGVyUmVuZGVyOiB0cnVlLFxuICBzaG91bGRDbG9zZU9uRXNjOiB0cnVlLFxuICBzaG91bGRDbG9zZU9uT3ZlcmxheUNsaWNrOiB0cnVlLFxuICBzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U6IHRydWUsXG4gIHBhcmVudFNlbGVjdG9yOiBmdW5jdGlvbiBwYXJlbnRTZWxlY3RvcigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbiAgfVxufTtcbk1vZGFsLmRlZmF1bHRTdHlsZXMgPSB7XG4gIG92ZXJsYXk6IHtcbiAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KVwiXG4gIH0sXG4gIGNvbnRlbnQ6IHtcbiAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgIHRvcDogXCI0MHB4XCIsXG4gICAgbGVmdDogXCI0MHB4XCIsXG4gICAgcmlnaHQ6IFwiNDBweFwiLFxuICAgIGJvdHRvbTogXCI0MHB4XCIsXG4gICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjXCIsXG4gICAgYmFja2dyb3VuZDogXCIjZmZmXCIsXG4gICAgb3ZlcmZsb3c6IFwiYXV0b1wiLFxuICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiBcInRvdWNoXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjRweFwiLFxuICAgIG91dGxpbmU6IFwibm9uZVwiLFxuICAgIHBhZGRpbmc6IFwiMjBweFwiXG4gIH1cbn07XG5cblxuKDAsIF9yZWFjdExpZmVjeWNsZXNDb21wYXQucG9seWZpbGwpKE1vZGFsKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gTW9kYWw7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBfZm9jdXNNYW5hZ2VyID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZm9jdXNNYW5hZ2VyXCIpO1xuXG52YXIgZm9jdXNNYW5hZ2VyID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2ZvY3VzTWFuYWdlcik7XG5cbnZhciBfc2NvcGVUYWIgPSByZXF1aXJlKFwiLi4vaGVscGVycy9zY29wZVRhYlwiKTtcblxudmFyIF9zY29wZVRhYjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zY29wZVRhYik7XG5cbnZhciBfYXJpYUFwcEhpZGVyID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvYXJpYUFwcEhpZGVyXCIpO1xuXG52YXIgYXJpYUFwcEhpZGVyID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2FyaWFBcHBIaWRlcik7XG5cbnZhciBfY2xhc3NMaXN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvY2xhc3NMaXN0XCIpO1xuXG52YXIgY2xhc3NMaXN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2NsYXNzTGlzdCk7XG5cbnZhciBfc2FmZUhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvc2FmZUhUTUxFbGVtZW50XCIpO1xuXG52YXIgX3NhZmVIVE1MRWxlbWVudDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zYWZlSFRNTEVsZW1lbnQpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGVsc2UgeyB2YXIgbmV3T2JqID0ge307IGlmIChvYmogIT0gbnVsbCkgeyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gbmV3T2JqLmRlZmF1bHQgPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbi8vIHNvIHRoYXQgb3VyIENTUyBpcyBzdGF0aWNhbGx5IGFuYWx5emFibGVcbnZhciBDTEFTU19OQU1FUyA9IHtcbiAgb3ZlcmxheTogXCJSZWFjdE1vZGFsX19PdmVybGF5XCIsXG4gIGNvbnRlbnQ6IFwiUmVhY3RNb2RhbF9fQ29udGVudFwiXG59O1xuXG52YXIgVEFCX0tFWSA9IDk7XG52YXIgRVNDX0tFWSA9IDI3O1xuXG52YXIgYXJpYUhpZGRlbkluc3RhbmNlcyA9IDA7XG5cbnZhciBNb2RhbFBvcnRhbCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhNb2RhbFBvcnRhbCwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTW9kYWxQb3J0YWwocHJvcHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTW9kYWxQb3J0YWwpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKE1vZGFsUG9ydGFsLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTW9kYWxQb3J0YWwpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfdGhpcy5zZXRPdmVybGF5UmVmID0gZnVuY3Rpb24gKG92ZXJsYXkpIHtcbiAgICAgIF90aGlzLm92ZXJsYXkgPSBvdmVybGF5O1xuICAgICAgX3RoaXMucHJvcHMub3ZlcmxheVJlZiAmJiBfdGhpcy5wcm9wcy5vdmVybGF5UmVmKG92ZXJsYXkpO1xuICAgIH07XG5cbiAgICBfdGhpcy5zZXRDb250ZW50UmVmID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgICAgIF90aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgICAgX3RoaXMucHJvcHMuY29udGVudFJlZiAmJiBfdGhpcy5wcm9wcy5jb250ZW50UmVmKGNvbnRlbnQpO1xuICAgIH07XG5cbiAgICBfdGhpcy5hZnRlckNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYXBwRWxlbWVudCA9IF90aGlzJHByb3BzLmFwcEVsZW1lbnQsXG4gICAgICAgICAgYXJpYUhpZGVBcHAgPSBfdGhpcyRwcm9wcy5hcmlhSGlkZUFwcCxcbiAgICAgICAgICBodG1sT3BlbkNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmh0bWxPcGVuQ2xhc3NOYW1lLFxuICAgICAgICAgIGJvZHlPcGVuQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuYm9keU9wZW5DbGFzc05hbWU7XG5cbiAgICAgIC8vIFJlbW92ZSBjbGFzc2VzLlxuXG4gICAgICBjbGFzc0xpc3QucmVtb3ZlKGRvY3VtZW50LmJvZHksIGJvZHlPcGVuQ2xhc3NOYW1lKTtcblxuICAgICAgaHRtbE9wZW5DbGFzc05hbWUgJiYgY2xhc3NMaXN0LnJlbW92ZShkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImh0bWxcIilbMF0sIGh0bWxPcGVuQ2xhc3NOYW1lKTtcblxuICAgICAgLy8gUmVzZXQgYXJpYS1oaWRkZW4gYXR0cmlidXRlIGlmIGFsbCBtb2RhbHMgaGF2ZSBiZWVuIHJlbW92ZWRcbiAgICAgIGlmIChhcmlhSGlkZUFwcCAmJiBhcmlhSGlkZGVuSW5zdGFuY2VzID4gMCkge1xuICAgICAgICBhcmlhSGlkZGVuSW5zdGFuY2VzIC09IDE7XG5cbiAgICAgICAgaWYgKGFyaWFIaWRkZW5JbnN0YW5jZXMgPT09IDApIHtcbiAgICAgICAgICBhcmlhQXBwSGlkZXIuc2hvdyhhcHBFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMucHJvcHMuc2hvdWxkRm9jdXNBZnRlclJlbmRlcikge1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMuc2hvdWxkUmV0dXJuRm9jdXNBZnRlckNsb3NlKSB7XG4gICAgICAgICAgZm9jdXNNYW5hZ2VyLnJldHVybkZvY3VzKCk7XG4gICAgICAgICAgZm9jdXNNYW5hZ2VyLnRlYXJkb3duU2NvcGVkRm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb2N1c01hbmFnZXIucG9wV2l0aG91dEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmJlZm9yZU9wZW4oKTtcbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5hZnRlck9wZW4gJiYgX3RoaXMuc3RhdGUuYmVmb3JlQ2xvc2UpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLmNsb3NlVGltZXIpO1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGJlZm9yZUNsb3NlOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5zaG91bGRGb2N1c0FmdGVyUmVuZGVyKSB7XG4gICAgICAgICAgZm9jdXNNYW5hZ2VyLnNldHVwU2NvcGVkRm9jdXMoX3RoaXMubm9kZSk7XG4gICAgICAgICAgZm9jdXNNYW5hZ2VyLm1hcmtGb3JGb2N1c0xhdGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGlzT3BlbjogdHJ1ZSB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoeyBhZnRlck9wZW46IHRydWUgfSk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMucHJvcHMuaXNPcGVuICYmIF90aGlzLnByb3BzLm9uQWZ0ZXJPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkFmdGVyT3BlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmNsb3NlVGltZW91dE1TID4gMCkge1xuICAgICAgICBfdGhpcy5jbG9zZVdpdGhUaW1lb3V0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5jbG9zZVdpdGhvdXRUaW1lb3V0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmZvY3VzQ29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5jb250ZW50ICYmICFfdGhpcy5jb250ZW50SGFzRm9jdXMoKSAmJiBfdGhpcy5jb250ZW50LmZvY3VzKCk7XG4gICAgfTtcblxuICAgIF90aGlzLmNsb3NlV2l0aFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY2xvc2VzQXQgPSBEYXRlLm5vdygpICsgX3RoaXMucHJvcHMuY2xvc2VUaW1lb3V0TVM7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7IGJlZm9yZUNsb3NlOiB0cnVlLCBjbG9zZXNBdDogY2xvc2VzQXQgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5jbG9zZVRpbWVyID0gc2V0VGltZW91dChfdGhpcy5jbG9zZVdpdGhvdXRUaW1lb3V0LCBfdGhpcy5zdGF0ZS5jbG9zZXNBdCAtIERhdGUubm93KCkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLmNsb3NlV2l0aG91dFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGJlZm9yZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgICAgYWZ0ZXJPcGVuOiBmYWxzZSxcbiAgICAgICAgY2xvc2VzQXQ6IG51bGxcbiAgICAgIH0sIF90aGlzLmFmdGVyQ2xvc2UpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVLZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVEFCX0tFWSkge1xuICAgICAgICAoMCwgX3Njb3BlVGFiMi5kZWZhdWx0KShfdGhpcy5jb250ZW50LCBldmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5zaG91bGRDbG9zZU9uRXNjICYmIGV2ZW50LmtleUNvZGUgPT09IEVTQ19LRVkpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIF90aGlzLnJlcXVlc3RDbG9zZShldmVudCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZU92ZXJsYXlPbkNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMuc2hvdWxkQ2xvc2UgPT09IG51bGwpIHtcbiAgICAgICAgX3RoaXMuc2hvdWxkQ2xvc2UgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMuc2hvdWxkQ2xvc2UgJiYgX3RoaXMucHJvcHMuc2hvdWxkQ2xvc2VPbk92ZXJsYXlDbGljaykge1xuICAgICAgICBpZiAoX3RoaXMub3duZXJIYW5kbGVzQ2xvc2UoKSkge1xuICAgICAgICAgIF90aGlzLnJlcXVlc3RDbG9zZShldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNDb250ZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIF90aGlzLnNob3VsZENsb3NlID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlQ29udGVudE9uTW91c2VVcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNob3VsZENsb3NlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZU92ZXJsYXlPbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5zaG91bGRDbG9zZU9uT3ZlcmxheUNsaWNrICYmIGV2ZW50LnRhcmdldCA9PSBfdGhpcy5vdmVybGF5KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUNvbnRlbnRPbkNsaWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2hvdWxkQ2xvc2UgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlQ29udGVudE9uTW91c2VEb3duID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2hvdWxkQ2xvc2UgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgX3RoaXMucmVxdWVzdENsb3NlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICByZXR1cm4gX3RoaXMub3duZXJIYW5kbGVzQ2xvc2UoKSAmJiBfdGhpcy5wcm9wcy5vblJlcXVlc3RDbG9zZShldmVudCk7XG4gICAgfTtcblxuICAgIF90aGlzLm93bmVySGFuZGxlc0Nsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uUmVxdWVzdENsb3NlO1xuICAgIH07XG5cbiAgICBfdGhpcy5zaG91bGRCZUNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhX3RoaXMuc3RhdGUuaXNPcGVuICYmICFfdGhpcy5zdGF0ZS5iZWZvcmVDbG9zZTtcbiAgICB9O1xuXG4gICAgX3RoaXMuY29udGVudEhhc0ZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLmNvbnRlbnQgfHwgX3RoaXMuY29udGVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICB9O1xuXG4gICAgX3RoaXMuYnVpbGRDbGFzc05hbWUgPSBmdW5jdGlvbiAod2hpY2gsIGFkZGl0aW9uYWwpIHtcbiAgICAgIHZhciBjbGFzc05hbWVzID0gKHR5cGVvZiBhZGRpdGlvbmFsID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoYWRkaXRpb25hbCkpID09PSBcIm9iamVjdFwiID8gYWRkaXRpb25hbCA6IHtcbiAgICAgICAgYmFzZTogQ0xBU1NfTkFNRVNbd2hpY2hdLFxuICAgICAgICBhZnRlck9wZW46IENMQVNTX05BTUVTW3doaWNoXSArIFwiLS1hZnRlci1vcGVuXCIsXG4gICAgICAgIGJlZm9yZUNsb3NlOiBDTEFTU19OQU1FU1t3aGljaF0gKyBcIi0tYmVmb3JlLWNsb3NlXCJcbiAgICAgIH07XG4gICAgICB2YXIgY2xhc3NOYW1lID0gY2xhc3NOYW1lcy5iYXNlO1xuICAgICAgaWYgKF90aGlzLnN0YXRlLmFmdGVyT3Blbikge1xuICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgKyBcIiBcIiArIGNsYXNzTmFtZXMuYWZ0ZXJPcGVuO1xuICAgICAgfVxuICAgICAgaWYgKF90aGlzLnN0YXRlLmJlZm9yZUNsb3NlKSB7XG4gICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSArIFwiIFwiICsgY2xhc3NOYW1lcy5iZWZvcmVDbG9zZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgYWRkaXRpb25hbCA9PT0gXCJzdHJpbmdcIiAmJiBhZGRpdGlvbmFsID8gY2xhc3NOYW1lICsgXCIgXCIgKyBhZGRpdGlvbmFsIDogY2xhc3NOYW1lO1xuICAgIH07XG5cbiAgICBfdGhpcy5hdHRyaWJ1dGVzRnJvbU9iamVjdCA9IGZ1bmN0aW9uIChwcmVmaXgsIGl0ZW1zKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbXMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XG4gICAgICAgIGFjY1twcmVmaXggKyBcIi1cIiArIG5hbWVdID0gaXRlbXNbbmFtZV07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gICAgfTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgYWZ0ZXJPcGVuOiBmYWxzZSxcbiAgICAgIGJlZm9yZUNsb3NlOiBmYWxzZVxuICAgIH07XG5cbiAgICBfdGhpcy5zaG91bGRDbG9zZSA9IG51bGw7XG4gICAgX3RoaXMubW92ZUZyb21Db250ZW50VG9PdmVybGF5ID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTW9kYWxQb3J0YWwsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmIChwcmV2UHJvcHMuYm9keU9wZW5DbGFzc05hbWUgIT09IHRoaXMucHJvcHMuYm9keU9wZW5DbGFzc05hbWUpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUud2FybignUmVhY3QtTW9kYWw6IFwiYm9keU9wZW5DbGFzc05hbWVcIiBwcm9wIGhhcyBiZWVuIG1vZGlmaWVkLiAnICsgXCJUaGlzIG1heSBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gbXVsdGlwbGUgbW9kYWxzIGFyZSBvcGVuLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlByb3BzLmh0bWxPcGVuQ2xhc3NOYW1lICE9PSB0aGlzLnByb3BzLmh0bWxPcGVuQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlYWN0LU1vZGFsOiBcImh0bWxPcGVuQ2xhc3NOYW1lXCIgcHJvcCBoYXMgYmVlbiBtb2RpZmllZC4gJyArIFwiVGhpcyBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvciB3aGVuIG11bHRpcGxlIG1vZGFscyBhcmUgb3Blbi5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuaXNPcGVuICYmICFwcmV2UHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5wcm9wcy5pc09wZW4gJiYgcHJldlByb3BzLmlzT3Blbikge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvY3VzIG9ubHkgbmVlZHMgdG8gYmUgc2V0IG9uY2Ugd2hlbiB0aGUgbW9kYWwgaXMgYmVpbmcgb3BlbmVkXG4gICAgICBpZiAodGhpcy5wcm9wcy5zaG91bGRGb2N1c0FmdGVyUmVuZGVyICYmIHRoaXMuc3RhdGUuaXNPcGVuICYmICFwcmV2U3RhdGUuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMuZm9jdXNDb250ZW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5hZnRlckNsb3NlKCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVyKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYmVmb3JlT3BlblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBiZWZvcmVPcGVuKCkge1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYXBwRWxlbWVudCA9IF9wcm9wcy5hcHBFbGVtZW50LFxuICAgICAgICAgIGFyaWFIaWRlQXBwID0gX3Byb3BzLmFyaWFIaWRlQXBwLFxuICAgICAgICAgIGh0bWxPcGVuQ2xhc3NOYW1lID0gX3Byb3BzLmh0bWxPcGVuQ2xhc3NOYW1lLFxuICAgICAgICAgIGJvZHlPcGVuQ2xhc3NOYW1lID0gX3Byb3BzLmJvZHlPcGVuQ2xhc3NOYW1lO1xuXG4gICAgICAvLyBBZGQgY2xhc3Nlcy5cblxuICAgICAgY2xhc3NMaXN0LmFkZChkb2N1bWVudC5ib2R5LCBib2R5T3BlbkNsYXNzTmFtZSk7XG5cbiAgICAgIGh0bWxPcGVuQ2xhc3NOYW1lICYmIGNsYXNzTGlzdC5hZGQoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJodG1sXCIpWzBdLCBodG1sT3BlbkNsYXNzTmFtZSk7XG5cbiAgICAgIGlmIChhcmlhSGlkZUFwcCkge1xuICAgICAgICBhcmlhSGlkZGVuSW5zdGFuY2VzICs9IDE7XG4gICAgICAgIGFyaWFBcHBIaWRlci5oaWRlKGFwcEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERvbid0IHN0ZWFsIGZvY3VzIGZyb20gaW5uZXIgZWxlbWVudHNcblxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3Byb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgb3ZlcmxheUNsYXNzTmFtZSA9IF9wcm9wczIub3ZlcmxheUNsYXNzTmFtZSxcbiAgICAgICAgICBkZWZhdWx0U3R5bGVzID0gX3Byb3BzMi5kZWZhdWx0U3R5bGVzO1xuXG4gICAgICB2YXIgY29udGVudFN0eWxlcyA9IGNsYXNzTmFtZSA/IHt9IDogZGVmYXVsdFN0eWxlcy5jb250ZW50O1xuICAgICAgdmFyIG92ZXJsYXlTdHlsZXMgPSBvdmVybGF5Q2xhc3NOYW1lID8ge30gOiBkZWZhdWx0U3R5bGVzLm92ZXJsYXk7XG5cbiAgICAgIHJldHVybiB0aGlzLnNob3VsZEJlQ2xvc2VkKCkgPyBudWxsIDogX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6IHRoaXMuc2V0T3ZlcmxheVJlZixcbiAgICAgICAgICBjbGFzc05hbWU6IHRoaXMuYnVpbGRDbGFzc05hbWUoXCJvdmVybGF5XCIsIG92ZXJsYXlDbGFzc05hbWUpLFxuICAgICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7fSwgb3ZlcmxheVN0eWxlcywgdGhpcy5wcm9wcy5zdHlsZS5vdmVybGF5KSxcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZU92ZXJsYXlPbkNsaWNrLFxuICAgICAgICAgIG9uTW91c2VEb3duOiB0aGlzLmhhbmRsZU92ZXJsYXlPbk1vdXNlRG93bixcbiAgICAgICAgICBcImFyaWEtbW9kYWxcIjogXCJ0cnVlXCJcbiAgICAgICAgfSxcbiAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICBfZXh0ZW5kcyh7XG4gICAgICAgICAgICByZWY6IHRoaXMuc2V0Q29udGVudFJlZixcbiAgICAgICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7fSwgY29udGVudFN0eWxlcywgdGhpcy5wcm9wcy5zdHlsZS5jb250ZW50KSxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogdGhpcy5idWlsZENsYXNzTmFtZShcImNvbnRlbnRcIiwgY2xhc3NOYW1lKSxcbiAgICAgICAgICAgIHRhYkluZGV4OiBcIi0xXCIsXG4gICAgICAgICAgICBvbktleURvd246IHRoaXMuaGFuZGxlS2V5RG93bixcbiAgICAgICAgICAgIG9uTW91c2VEb3duOiB0aGlzLmhhbmRsZUNvbnRlbnRPbk1vdXNlRG93bixcbiAgICAgICAgICAgIG9uTW91c2VVcDogdGhpcy5oYW5kbGVDb250ZW50T25Nb3VzZVVwLFxuICAgICAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVDb250ZW50T25DbGljayxcbiAgICAgICAgICAgIHJvbGU6IHRoaXMucHJvcHMucm9sZSxcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0aGlzLnByb3BzLmNvbnRlbnRMYWJlbFxuICAgICAgICAgIH0sIHRoaXMuYXR0cmlidXRlc0Zyb21PYmplY3QoXCJhcmlhXCIsIHRoaXMucHJvcHMuYXJpYSB8fCB7fSksIHRoaXMuYXR0cmlidXRlc0Zyb21PYmplY3QoXCJkYXRhXCIsIHRoaXMucHJvcHMuZGF0YSB8fCB7fSkpLFxuICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTW9kYWxQb3J0YWw7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5Nb2RhbFBvcnRhbC5kZWZhdWx0UHJvcHMgPSB7XG4gIHN0eWxlOiB7XG4gICAgb3ZlcmxheToge30sXG4gICAgY29udGVudDoge31cbiAgfSxcbiAgZGVmYXVsdFN0eWxlczoge31cbn07XG5Nb2RhbFBvcnRhbC5wcm9wVHlwZXMgPSB7XG4gIGlzT3BlbjogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsXG4gIGRlZmF1bHRTdHlsZXM6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc2hhcGUoe1xuICAgIGNvbnRlbnQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICAgIG92ZXJsYXk6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0XG4gIH0pLFxuICBzdHlsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zaGFwZSh7XG4gICAgY29udGVudDogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG4gICAgb3ZlcmxheTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3RcbiAgfSksXG4gIGNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoW19wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLCBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdF0pLFxuICBvdmVybGF5Q2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0XSksXG4gIGJvZHlPcGVuQ2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgaHRtbE9wZW5DbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuICBhcmlhSGlkZUFwcDogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBhcHBFbGVtZW50OiBfcHJvcFR5cGVzMi5kZWZhdWx0Lmluc3RhbmNlT2YoX3NhZmVIVE1MRWxlbWVudDIuZGVmYXVsdCksXG4gIG9uQWZ0ZXJPcGVuOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIG9uUmVxdWVzdENsb3NlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIGNsb3NlVGltZW91dE1TOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlcixcbiAgc2hvdWxkRm9jdXNBZnRlclJlbmRlcjogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBzaG91bGRDbG9zZU9uT3ZlcmxheUNsaWNrOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIHNob3VsZFJldHVybkZvY3VzQWZ0ZXJDbG9zZTogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICByb2xlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgY29udGVudExhYmVsOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgYXJpYTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG4gIGRhdGE6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICBjaGlsZHJlbjogX3Byb3BUeXBlczIuZGVmYXVsdC5ub2RlLFxuICBzaG91bGRDbG9zZU9uRXNjOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIG92ZXJsYXlSZWY6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgY29udGVudFJlZjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICB0ZXN0SWQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gTW9kYWxQb3J0YWw7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc3NlcnROb2RlTGlzdCA9IGFzc2VydE5vZGVMaXN0O1xuZXhwb3J0cy5zZXRFbGVtZW50ID0gc2V0RWxlbWVudDtcbmV4cG9ydHMudmFsaWRhdGVFbGVtZW50ID0gdmFsaWRhdGVFbGVtZW50O1xuZXhwb3J0cy5oaWRlID0gaGlkZTtcbmV4cG9ydHMuc2hvdyA9IHNob3c7XG5leHBvcnRzLmRvY3VtZW50Tm90UmVhZHlPclNTUlRlc3RpbmcgPSBkb2N1bWVudE5vdFJlYWR5T3JTU1JUZXN0aW5nO1xuZXhwb3J0cy5yZXNldEZvclRlc3RpbmcgPSByZXNldEZvclRlc3Rpbmc7XG5cbnZhciBfd2FybmluZyA9IHJlcXVpcmUoXCJ3YXJuaW5nXCIpO1xuXG52YXIgX3dhcm5pbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd2FybmluZyk7XG5cbnZhciBfc2FmZUhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vc2FmZUhUTUxFbGVtZW50XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgZ2xvYmFsRWxlbWVudCA9IG51bGw7XG5cbmZ1bmN0aW9uIGFzc2VydE5vZGVMaXN0KG5vZGVMaXN0LCBzZWxlY3Rvcikge1xuICBpZiAoIW5vZGVMaXN0IHx8ICFub2RlTGlzdC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWFjdC1tb2RhbDogTm8gZWxlbWVudHMgd2VyZSBmb3VuZCBmb3Igc2VsZWN0b3IgXCIgKyBzZWxlY3RvciArIFwiLlwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIHVzZUVsZW1lbnQgPSBlbGVtZW50O1xuICBpZiAodHlwZW9mIHVzZUVsZW1lbnQgPT09IFwic3RyaW5nXCIgJiYgX3NhZmVIVE1MRWxlbWVudC5jYW5Vc2VET00pIHtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHVzZUVsZW1lbnQpO1xuICAgIGFzc2VydE5vZGVMaXN0KGVsLCB1c2VFbGVtZW50KTtcbiAgICB1c2VFbGVtZW50ID0gXCJsZW5ndGhcIiBpbiBlbCA/IGVsWzBdIDogZWw7XG4gIH1cbiAgZ2xvYmFsRWxlbWVudCA9IHVzZUVsZW1lbnQgfHwgZ2xvYmFsRWxlbWVudDtcbiAgcmV0dXJuIGdsb2JhbEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRWxlbWVudChhcHBFbGVtZW50KSB7XG4gIGlmICghYXBwRWxlbWVudCAmJiAhZ2xvYmFsRWxlbWVudCkge1xuICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoZmFsc2UsIFtcInJlYWN0LW1vZGFsOiBBcHAgZWxlbWVudCBpcyBub3QgZGVmaW5lZC5cIiwgXCJQbGVhc2UgdXNlIGBNb2RhbC5zZXRBcHBFbGVtZW50KGVsKWAgb3Igc2V0IGBhcHBFbGVtZW50PXtlbH1gLlwiLCBcIlRoaXMgaXMgbmVlZGVkIHNvIHNjcmVlbiByZWFkZXJzIGRvbid0IHNlZSBtYWluIGNvbnRlbnRcIiwgXCJ3aGVuIG1vZGFsIGlzIG9wZW5lZC4gSXQgaXMgbm90IHJlY29tbWVuZGVkLCBidXQgeW91IGNhbiBvcHQtb3V0XCIsIFwiYnkgc2V0dGluZyBgYXJpYUhpZGVBcHA9e2ZhbHNlfWAuXCJdLmpvaW4oXCIgXCIpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBoaWRlKGFwcEVsZW1lbnQpIHtcbiAgaWYgKHZhbGlkYXRlRWxlbWVudChhcHBFbGVtZW50KSkge1xuICAgIChhcHBFbGVtZW50IHx8IGdsb2JhbEVsZW1lbnQpLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG93KGFwcEVsZW1lbnQpIHtcbiAgaWYgKHZhbGlkYXRlRWxlbWVudChhcHBFbGVtZW50KSkge1xuICAgIChhcHBFbGVtZW50IHx8IGdsb2JhbEVsZW1lbnQpLnJlbW92ZUF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRvY3VtZW50Tm90UmVhZHlPclNTUlRlc3RpbmcoKSB7XG4gIGdsb2JhbEVsZW1lbnQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiByZXNldEZvclRlc3RpbmcoKSB7XG4gIGdsb2JhbEVsZW1lbnQgPSBudWxsO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kdW1wQ2xhc3NMaXN0cyA9IGR1bXBDbGFzc0xpc3RzO1xudmFyIGh0bWxDbGFzc0xpc3QgPSB7fTtcbnZhciBkb2NCb2R5Q2xhc3NMaXN0ID0ge307XG5cbmZ1bmN0aW9uIGR1bXBDbGFzc0xpc3RzKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdmFyIGNsYXNzZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImh0bWxcIilbMF0uY2xhc3NOYW1lO1xuICAgIHZhciBidWZmZXIgPSBcIlNob3cgdHJhY2tlZCBjbGFzc2VzOlxcblxcblwiO1xuXG4gICAgYnVmZmVyICs9IFwiPGh0bWwgLz4gKFwiICsgY2xhc3NlcyArIFwiKTpcXG5cIjtcbiAgICBmb3IgKHZhciB4IGluIGh0bWxDbGFzc0xpc3QpIHtcbiAgICAgIGJ1ZmZlciArPSBcIiAgXCIgKyB4ICsgXCIgXCIgKyBodG1sQ2xhc3NMaXN0W3hdICsgXCJcXG5cIjtcbiAgICB9XG5cbiAgICBjbGFzc2VzID0gZG9jdW1lbnQuYm9keS5jbGFzc05hbWU7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgIGJ1ZmZlciArPSBcIlxcblxcbmRvYy5ib2R5IChcIiArIGNsYXNzZXMgKyBcIik6XFxuXCI7XG4gICAgZm9yICh2YXIgX3ggaW4gZG9jQm9keUNsYXNzTGlzdCkge1xuICAgICAgYnVmZmVyICs9IFwiICBcIiArIF94ICsgXCIgXCIgKyBkb2NCb2R5Q2xhc3NMaXN0W194XSArIFwiXFxuXCI7XG4gICAgfVxuXG4gICAgYnVmZmVyICs9IFwiXFxuXCI7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKGJ1ZmZlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFjayB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZSBvZiBhIGNsYXNzLlxuICogQHBhcmFtIHtvYmplY3R9IHBvbGwgVGhlIHBvbGwgdG8gcmVjZWl2ZSB0aGUgcmVmZXJlbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZS5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xudmFyIGluY3JlbWVudFJlZmVyZW5jZSA9IGZ1bmN0aW9uIGluY3JlbWVudFJlZmVyZW5jZShwb2xsLCBjbGFzc05hbWUpIHtcbiAgaWYgKCFwb2xsW2NsYXNzTmFtZV0pIHtcbiAgICBwb2xsW2NsYXNzTmFtZV0gPSAwO1xuICB9XG4gIHBvbGxbY2xhc3NOYW1lXSArPSAxO1xuICByZXR1cm4gY2xhc3NOYW1lO1xufTtcblxuLyoqXG4gKiBEcm9wIHRoZSByZWZlcmVuY2Ugb2YgYSBjbGFzcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwb2xsIFRoZSBwb2xsIHRvIHJlY2VpdmUgdGhlIHJlZmVyZW5jZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgVGhlIGNsYXNzIG5hbWUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnZhciBkZWNyZW1lbnRSZWZlcmVuY2UgPSBmdW5jdGlvbiBkZWNyZW1lbnRSZWZlcmVuY2UocG9sbCwgY2xhc3NOYW1lKSB7XG4gIGlmIChwb2xsW2NsYXNzTmFtZV0pIHtcbiAgICBwb2xsW2NsYXNzTmFtZV0gLT0gMTtcbiAgfVxuICByZXR1cm4gY2xhc3NOYW1lO1xufTtcblxuLyoqXG4gKiBUcmFjayBhIGNsYXNzIGFuZCBhZGQgdG8gdGhlIGdpdmVuIGNsYXNzIGxpc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gY2xhc3NMaXN0UmVmIEEgY2xhc3MgbGlzdCBvZiBhbiBlbGVtZW50LlxuICogQHBhcmFtIHtPYmplY3R9IHBvbGwgICAgICAgICBUaGUgcG9sbCB0byBiZSB1c2VkLlxuICogQHBhcmFtIHtBcnJheX0gIGNsYXNzZXMgICAgICBUaGUgbGlzdCBvZiBjbGFzc2VzIHRvIGJlIHRyYWNrZWQuXG4gKi9cbnZhciB0cmFja0NsYXNzID0gZnVuY3Rpb24gdHJhY2tDbGFzcyhjbGFzc0xpc3RSZWYsIHBvbGwsIGNsYXNzZXMpIHtcbiAgY2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpbmNyZW1lbnRSZWZlcmVuY2UocG9sbCwgY2xhc3NOYW1lKTtcbiAgICBjbGFzc0xpc3RSZWYuYWRkKGNsYXNzTmFtZSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBVbnRyYWNrIGEgY2xhc3MgYW5kIHJlbW92ZSBmcm9tIHRoZSBnaXZlbiBjbGFzcyBsaXN0IGlmIHRoZSByZWZlcmVuY2VcbiAqIHJlYWNoZXMgMC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjbGFzc0xpc3RSZWYgQSBjbGFzcyBsaXN0IG9mIGFuIGVsZW1lbnQuXG4gKiBAcGFyYW0ge09iamVjdH0gcG9sbCAgICAgICAgIFRoZSBwb2xsIHRvIGJlIHVzZWQuXG4gKiBAcGFyYW0ge0FycmF5fSAgY2xhc3NlcyAgICAgIFRoZSBsaXN0IG9mIGNsYXNzZXMgdG8gYmUgdW50cmFja2VkLlxuICovXG52YXIgdW50cmFja0NsYXNzID0gZnVuY3Rpb24gdW50cmFja0NsYXNzKGNsYXNzTGlzdFJlZiwgcG9sbCwgY2xhc3Nlcykge1xuICBjbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGRlY3JlbWVudFJlZmVyZW5jZShwb2xsLCBjbGFzc05hbWUpO1xuICAgIHBvbGxbY2xhc3NOYW1lXSA9PT0gMCAmJiBjbGFzc0xpc3RSZWYucmVtb3ZlKGNsYXNzTmFtZSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBQdWJsaWMgaW5mZXJmYWNlIHRvIGFkZCBjbGFzc2VzIHRvIHRoZSBkb2N1bWVudC5ib2R5LlxuICogQHBhcmFtIHtzdHJpbmd9IGJvZHlDbGFzcyBUaGUgY2xhc3Mgc3RyaW5nIHRvIGJlIGFkZGVkLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtYXkgY29udGFpbiBtb3JlIHRoZW4gb25lIGNsYXNzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggJyAnIGFzIHNlcGFyYXRvci5cbiAqL1xudmFyIGFkZCA9IGV4cG9ydHMuYWRkID0gZnVuY3Rpb24gYWRkKGVsZW1lbnQsIGNsYXNzU3RyaW5nKSB7XG4gIHJldHVybiB0cmFja0NsYXNzKGVsZW1lbnQuY2xhc3NMaXN0LCBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gXCJodG1sXCIgPyBodG1sQ2xhc3NMaXN0IDogZG9jQm9keUNsYXNzTGlzdCwgY2xhc3NTdHJpbmcuc3BsaXQoXCIgXCIpKTtcbn07XG5cbi8qKlxuICogUHVibGljIGluZmVyZmFjZSB0byByZW1vdmUgY2xhc3NlcyBmcm9tIHRoZSBkb2N1bWVudC5ib2R5LlxuICogQHBhcmFtIHtzdHJpbmd9IGJvZHlDbGFzcyBUaGUgY2xhc3Mgc3RyaW5nIHRvIGJlIGFkZGVkLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtYXkgY29udGFpbiBtb3JlIHRoZW4gb25lIGNsYXNzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggJyAnIGFzIHNlcGFyYXRvci5cbiAqL1xudmFyIHJlbW92ZSA9IGV4cG9ydHMucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGVsZW1lbnQsIGNsYXNzU3RyaW5nKSB7XG4gIHJldHVybiB1bnRyYWNrQ2xhc3MoZWxlbWVudC5jbGFzc0xpc3QsIGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSBcImh0bWxcIiA/IGh0bWxDbGFzc0xpc3QgOiBkb2NCb2R5Q2xhc3NMaXN0LCBjbGFzc1N0cmluZy5zcGxpdChcIiBcIikpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaGFuZGxlQmx1ciA9IGhhbmRsZUJsdXI7XG5leHBvcnRzLmhhbmRsZUZvY3VzID0gaGFuZGxlRm9jdXM7XG5leHBvcnRzLm1hcmtGb3JGb2N1c0xhdGVyID0gbWFya0ZvckZvY3VzTGF0ZXI7XG5leHBvcnRzLnJldHVybkZvY3VzID0gcmV0dXJuRm9jdXM7XG5leHBvcnRzLnBvcFdpdGhvdXRGb2N1cyA9IHBvcFdpdGhvdXRGb2N1cztcbmV4cG9ydHMuc2V0dXBTY29wZWRGb2N1cyA9IHNldHVwU2NvcGVkRm9jdXM7XG5leHBvcnRzLnRlYXJkb3duU2NvcGVkRm9jdXMgPSB0ZWFyZG93blNjb3BlZEZvY3VzO1xuXG52YXIgX3RhYmJhYmxlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdGFiYmFibGVcIik7XG5cbnZhciBfdGFiYmFibGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdGFiYmFibGUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgZm9jdXNMYXRlckVsZW1lbnRzID0gW107XG52YXIgbW9kYWxFbGVtZW50ID0gbnVsbDtcbnZhciBuZWVkVG9Gb2N1cyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBoYW5kbGVCbHVyKCkge1xuICBuZWVkVG9Gb2N1cyA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuICBpZiAobmVlZFRvRm9jdXMpIHtcbiAgICBuZWVkVG9Gb2N1cyA9IGZhbHNlO1xuICAgIGlmICghbW9kYWxFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIG5lZWQgdG8gc2VlIGhvdyBqUXVlcnkgc2hpbXMgZG9jdW1lbnQub24oJ2ZvY3VzaW4nKSBzbyB3ZSBkb24ndCBuZWVkIHRoZVxuICAgIC8vIHNldFRpbWVvdXQsIGZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IGZvY3VzaW4sIGlmIGl0IGRpZCwgd2UgY291bGQgZm9jdXNcbiAgICAvLyB0aGUgZWxlbWVudCBvdXRzaWRlIG9mIGEgc2V0VGltZW91dC4gU2lkZS1lZmZlY3Qgb2YgdGhpcyBpbXBsZW1lbnRhdGlvblxuICAgIC8vIGlzIHRoYXQgdGhlIGRvY3VtZW50LmJvZHkgZ2V0cyBmb2N1cywgYW5kIHRoZW4gd2UgZm9jdXMgb3VyIGVsZW1lbnQgcmlnaHRcbiAgICAvLyBhZnRlciwgc2VlbXMgZmluZS5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChtb2RhbEVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGVsID0gKDAsIF90YWJiYWJsZTIuZGVmYXVsdCkobW9kYWxFbGVtZW50KVswXSB8fCBtb2RhbEVsZW1lbnQ7XG4gICAgICBlbC5mb2N1cygpO1xuICAgIH0sIDApO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtGb3JGb2N1c0xhdGVyKCkge1xuICBmb2N1c0xhdGVyRWxlbWVudHMucHVzaChkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuZnVuY3Rpb24gcmV0dXJuRm9jdXMoKSB7XG4gIHZhciB0b0ZvY3VzID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBpZiAoZm9jdXNMYXRlckVsZW1lbnRzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdG9Gb2N1cyA9IGZvY3VzTGF0ZXJFbGVtZW50cy5wb3AoKTtcbiAgICAgIHRvRm9jdXMuZm9jdXMoKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKFtcIllvdSB0cmllZCB0byByZXR1cm4gZm9jdXMgdG9cIiwgdG9Gb2N1cywgXCJidXQgaXQgaXMgbm90IGluIHRoZSBET00gYW55bW9yZVwiXS5qb2luKFwiIFwiKSk7XG4gIH1cbn1cbi8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuXG5mdW5jdGlvbiBwb3BXaXRob3V0Rm9jdXMoKSB7XG4gIGZvY3VzTGF0ZXJFbGVtZW50cy5sZW5ndGggPiAwICYmIGZvY3VzTGF0ZXJFbGVtZW50cy5wb3AoKTtcbn1cblxuZnVuY3Rpb24gc2V0dXBTY29wZWRGb2N1cyhlbGVtZW50KSB7XG4gIG1vZGFsRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGhhbmRsZUJsdXIsIGZhbHNlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgaGFuZGxlRm9jdXMsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5hdHRhY2hFdmVudChcIm9uQmx1clwiLCBoYW5kbGVCbHVyKTtcbiAgICBkb2N1bWVudC5hdHRhY2hFdmVudChcIm9uRm9jdXNcIiwgaGFuZGxlRm9jdXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRlYXJkb3duU2NvcGVkRm9jdXMoKSB7XG4gIG1vZGFsRWxlbWVudCA9IG51bGw7XG5cbiAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGhhbmRsZUJsdXIpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBoYW5kbGVGb2N1cyk7XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LmRldGFjaEV2ZW50KFwib25CbHVyXCIsIGhhbmRsZUJsdXIpO1xuICAgIGRvY3VtZW50LmRldGFjaEV2ZW50KFwib25Gb2N1c1wiLCBoYW5kbGVGb2N1cyk7XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2FuVXNlRE9NID0gdW5kZWZpbmVkO1xuXG52YXIgX2V4ZW52ID0gcmVxdWlyZShcImV4ZW52XCIpO1xuXG52YXIgX2V4ZW52MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4ZW52KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIEVFID0gX2V4ZW52Mi5kZWZhdWx0O1xuXG52YXIgU2FmZUhUTUxFbGVtZW50ID0gRUUuY2FuVXNlRE9NID8gd2luZG93LkhUTUxFbGVtZW50IDoge307XG5cbnZhciBjYW5Vc2VET00gPSBleHBvcnRzLmNhblVzZURPTSA9IEVFLmNhblVzZURPTTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gU2FmZUhUTUxFbGVtZW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gc2NvcGVUYWI7XG5cbnZhciBfdGFiYmFibGUgPSByZXF1aXJlKFwiLi90YWJiYWJsZVwiKTtcblxudmFyIF90YWJiYWJsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90YWJiYWJsZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHNjb3BlVGFiKG5vZGUsIGV2ZW50KSB7XG4gIHZhciB0YWJiYWJsZSA9ICgwLCBfdGFiYmFibGUyLmRlZmF1bHQpKG5vZGUpO1xuXG4gIGlmICghdGFiYmFibGUubGVuZ3RoKSB7XG4gICAgLy8gRG8gbm90aGluZywgc2luY2UgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIHRoYXQgY2FuIHJlY2VpdmUgZm9jdXMuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2hpZnRLZXkgPSBldmVudC5zaGlmdEtleTtcbiAgdmFyIGhlYWQgPSB0YWJiYWJsZVswXTtcbiAgdmFyIHRhaWwgPSB0YWJiYWJsZVt0YWJiYWJsZS5sZW5ndGggLSAxXTtcblxuICAvLyBwcm9jZWVkIHdpdGggZGVmYXVsdCBicm93c2VyIGJlaGF2aW9yIG9uIHRhYi5cbiAgLy8gRm9jdXMgb24gbGFzdCBlbGVtZW50IG9uIHNoaWZ0ICsgdGFiLlxuICBpZiAobm9kZSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgIGlmICghc2hpZnRLZXkpIHJldHVybjtcbiAgICB0YXJnZXQgPSB0YWlsO1xuICB9XG5cbiAgdmFyIHRhcmdldDtcbiAgaWYgKHRhaWwgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgIXNoaWZ0S2V5KSB7XG4gICAgdGFyZ2V0ID0gaGVhZDtcbiAgfVxuXG4gIGlmIChoZWFkID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIHNoaWZ0S2V5KSB7XG4gICAgdGFyZ2V0ID0gdGFpbDtcbiAgfVxuXG4gIGlmICh0YXJnZXQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRhcmdldC5mb2N1cygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNhZmFyaSByYWRpbyBpc3N1ZS5cbiAgLy9cbiAgLy8gU2FmYXJpIGRvZXMgbm90IG1vdmUgdGhlIGZvY3VzIHRvIHRoZSByYWRpbyBidXR0b24sXG4gIC8vIHNvIHdlIG5lZWQgdG8gZm9yY2UgaXQgdG8gcmVhbGx5IHdhbGsgdGhyb3VnaCBhbGwgZWxlbWVudHMuXG4gIC8vXG4gIC8vIFRoaXMgaXMgdmVyeSBlcnJvciBwcm9uZSwgc2luY2Ugd2UgYXJlIHRyeWluZyB0byBndWVzc1xuICAvLyBpZiBpdCBpcyBhIHNhZmFyaSBicm93c2VyIGZyb20gdGhlIGZpcnN0IG9jY3VyZW5jZSBiZXR3ZWVuXG4gIC8vIGNocm9tZSBvciBzYWZhcmkuXG4gIC8vXG4gIC8vIFRoZSBjaHJvbWUgdXNlciBhZ2VudCBjb250YWlucyB0aGUgZmlyc3Qgb2N1cnJlbmNlXG4gIC8vIGFzIHRoZSAnY2hyb21lL3ZlcnNpb24nIGFuZCBsYXRlciB0aGUgJ3NhZmFyaS92ZXJzaW9uJy5cbiAgdmFyIGNoZWNrU2FmYXJpID0gLyhcXGJDaHJvbWVcXGJ8XFxiU2FmYXJpXFxiKVxcLy8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgdmFyIGlzU2FmYXJpRGVza3RvcCA9IGNoZWNrU2FmYXJpICE9IG51bGwgJiYgY2hlY2tTYWZhcmlbMV0gIT0gXCJDaHJvbWVcIiAmJiAvXFxiaVBvZFxcYnxcXGJpUGFkXFxiL2cuZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KSA9PSBudWxsO1xuXG4gIC8vIElmIHdlIGFyZSBub3QgaW4gc2FmYXJpIGRlc2t0b3AsIGxldCB0aGUgYnJvd3NlciBjb250cm9sXG4gIC8vIHRoZSBmb2N1c1xuICBpZiAoIWlzU2FmYXJpRGVza3RvcCkgcmV0dXJuO1xuXG4gIHZhciB4ID0gdGFiYmFibGUuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcblxuICBpZiAoeCA+IC0xKSB7XG4gICAgeCArPSBzaGlmdEtleSA/IC0xIDogMTtcbiAgfVxuXG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgdGFiYmFibGVbeF0uZm9jdXMoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBmaW5kVGFiYmFibGVEZXNjZW5kYW50cztcbi8qIVxuICogQWRhcHRlZCBmcm9tIGpRdWVyeSBVSSBjb3JlXG4gKlxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9jYXRlZ29yeS91aS1jb3JlL1xuICovXG5cbnZhciB0YWJiYWJsZU5vZGUgPSAvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QvO1xuXG5mdW5jdGlvbiBoaWRlc0NvbnRlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIHplcm9TaXplID0gZWxlbWVudC5vZmZzZXRXaWR0aCA8PSAwICYmIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDw9IDA7XG5cbiAgLy8gSWYgdGhlIG5vZGUgaXMgZW1wdHksIHRoaXMgaXMgZ29vZCBlbm91Z2hcbiAgaWYgKHplcm9TaXplICYmICFlbGVtZW50LmlubmVySFRNTCkgcmV0dXJuIHRydWU7XG5cbiAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgc29tZSBzdHlsZXNcbiAgdmFyIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiB6ZXJvU2l6ZSA/IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvdmVyZmxvd1wiKSAhPT0gXCJ2aXNpYmxlXCIgOiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVwiKSA9PSBcIm5vbmVcIjtcbn1cblxuZnVuY3Rpb24gdmlzaWJsZShlbGVtZW50KSB7XG4gIHZhciBwYXJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHtcbiAgICBpZiAocGFyZW50RWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkgYnJlYWs7XG4gICAgaWYgKGhpZGVzQ29udGVudHMocGFyZW50RWxlbWVudCkpIHJldHVybiBmYWxzZTtcbiAgICBwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmb2N1c2FibGUoZWxlbWVudCwgaXNUYWJJbmRleE5vdE5hTikge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHZhciByZXMgPSB0YWJiYWJsZU5vZGUudGVzdChub2RlTmFtZSkgJiYgIWVsZW1lbnQuZGlzYWJsZWQgfHwgKG5vZGVOYW1lID09PSBcImFcIiA/IGVsZW1lbnQuaHJlZiB8fCBpc1RhYkluZGV4Tm90TmFOIDogaXNUYWJJbmRleE5vdE5hTik7XG4gIHJldHVybiByZXMgJiYgdmlzaWJsZShlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gdGFiYmFibGUoZWxlbWVudCkge1xuICB2YXIgdGFiSW5kZXggPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpO1xuICBpZiAodGFiSW5kZXggPT09IG51bGwpIHRhYkluZGV4ID0gdW5kZWZpbmVkO1xuICB2YXIgaXNUYWJJbmRleE5hTiA9IGlzTmFOKHRhYkluZGV4KTtcbiAgcmV0dXJuIChpc1RhYkluZGV4TmFOIHx8IHRhYkluZGV4ID49IDApICYmIGZvY3VzYWJsZShlbGVtZW50LCAhaXNUYWJJbmRleE5hTik7XG59XG5cbmZ1bmN0aW9uIGZpbmRUYWJiYWJsZURlc2NlbmRhbnRzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSwgMCkuZmlsdGVyKHRhYmJhYmxlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfTW9kYWwgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL01vZGFsXCIpO1xuXG52YXIgX01vZGFsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX01vZGFsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gX01vZGFsMi5kZWZhdWx0O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciB3YXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgd2FybmluZyA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhcmdzKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gPiAyID8gbGVuIC0gMiA6IDApO1xuICAgIGZvciAodmFyIGtleSA9IDI7IGtleSA8IGxlbjsga2V5KyspIHtcbiAgICAgIGFyZ3Nba2V5IC0gMl0gPSBhcmd1bWVudHNba2V5XTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgJ21lc3NhZ2UgYXJndW1lbnQnXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQubGVuZ3RoIDwgMTAgfHwgKC9eW3NcXFddKiQvKS50ZXN0KGZvcm1hdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSB3YXJuaW5nIGZvcm1hdCBzaG91bGQgYmUgYWJsZSB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzICcgK1xuICAgICAgICAnd2FybmluZy4gUGxlYXNlLCB1c2UgYSBtb3JlIGRlc2NyaXB0aXZlIGZvcm1hdCB0aGFuOiAnICsgZm9ybWF0XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgICAgfSk7XG4gICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0gY2F0Y2goeCkge31cbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbiIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJpMThuXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJlbGVtZW50XCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZlbmRvclwiXVtcImNsYXNzbmFtZXNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJqUXVlcnlcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJSZWFjdFwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIlJlYWN0RE9NXCJdOyB9KCkpOyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9leGl0LW1vZGFsLXN1cnZleS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2V4aXQtbW9kYWwtc3VydmV5L3N0eWxlLmNzcz8yZGUzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvd3AtcGx1Z2lucy1wYWdlL2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvd3AtcGx1Z2lucy1wYWdlL3N0eWxlLmNzcz80NmYwIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZXZlbnRlc3ByZXNzby9yZWFjdC1leGl0LW1vZGFsLXR5cGVmb3JtL2J1aWxkLW1vZHVsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGV2ZW50ZXNwcmVzc28vcmVhY3QtZXhpdC1tb2RhbC10eXBlZm9ybS9idWlsZC1tb2R1bGUvbW9kYWwvYnV0dG9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZXZlbnRlc3ByZXNzby9yZWFjdC1leGl0LW1vZGFsLXR5cGVmb3JtL2J1aWxkLW1vZHVsZS9tb2RhbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGV2ZW50ZXNwcmVzc28vcmVhY3QtZXhpdC1tb2RhbC10eXBlZm9ybS9idWlsZC1tb2R1bGUvbW9kYWwvb3B0aW9uc3ZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BldmVudGVzcHJlc3NvL3JlYWN0LWV4aXQtbW9kYWwtdHlwZWZvcm0vYnVpbGQtbW9kdWxlL21vZGFsL3R5cGVGb3JtRW1iZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0eXBlZm9ybS9lbWJlZC9saWIvYXBpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1wcm90by5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MtZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2V4ZW52L2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWxpZmVjeWNsZXMtY29tcGF0L3JlYWN0LWxpZmVjeWNsZXMtY29tcGF0LmVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1tb2RhbC9saWIvY29tcG9uZW50cy9Nb2RhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtbW9kYWwvbGliL2NvbXBvbmVudHMvTW9kYWxQb3J0YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL2FyaWFBcHBIaWRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtbW9kYWwvbGliL2hlbHBlcnMvY2xhc3NMaXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1tb2RhbC9saWIvaGVscGVycy9mb2N1c01hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL3NhZmVIVE1MRWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtbW9kYWwvbGliL2hlbHBlcnMvc2NvcGVUYWIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL3RhYmJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1tb2RhbC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL25vZGVfbW9kdWxlcy93YXJuaW5nL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCJdfSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImkxOG5cIl19Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImVsZW1lbnRcIl19Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwidmVuZG9yXCIsXCJjbGFzc25hbWVzXCJdfSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOlwialF1ZXJ5XCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6XCJSZWFjdFwifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOlwiUmVhY3RET01cIn0iXSwibmFtZXMiOlsiZGF0YSIsImV4aXRNb2RhbEluZm8iLCJpbmZvIiwicXVlcnlTdHJpbmciLCJzdHJpbmdpZnkiLCJmaXJzdG5hbWUiLCJlbWFpbGFkZHJlc3MiLCJ3ZWJzaXRlIiwibW9kYWxQcm9wcyIsInN0eWxlcyIsImNvbnRlbnQiLCJkaXNwbGF5IiwidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0IiwiV2Via2l0VHJhbnNmb3JtIiwidHJhbnNmb3JtIiwidHlwZUZvcm1TdHlsZSIsIndpZHRoIiwiaGVpZ2h0IiwidHlwZUZvcm1VcmwiLCJpbnRyb1RleHQiLCJfXyIsImRvU3VydmV5QnV0dG9uVGV4dCIsInNraXBCdXR0b25UZXh0IiwiYnV0dG9uQ2xhc3MiLCJkb1N1cnZleSIsImNsb3NlTW9kYWwiLCJoYW5kbGVEZWFjdGl2YXRpb25DbGljayIsImUiLCJlbCIsInByZXZlbnREZWZhdWx0IiwibGluayIsIiQiLCJhdHRyIiwiYXBwQ29udGFpbmVyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsIlJlYWN0TW9kYWwiLCJzZXRBcHBFbGVtZW50IiwibW9kYWxDb250YWluZXIiLCJSZWFjdERPTSIsInJlbmRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJDTE9TRV9NT0RBTF9FVkVOVCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsIm9uY2UiLCJpc01vZGFsQWN0aXZlIiwib24iLCJsZW5ndGgiLCJhZGRDbGFzcyJdLCJtYXBwaW5n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STtBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlFQUFpRSxpQkFBaUI7QUFDbEY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxhQUFhO0FBQ2hGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsNEJBQTRCO0FBQzVCLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFtQiwwQkFBMEIsRUFBRSxFQUFFO0FBQ2xFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsZ0NBQWdDO0FBQ3pGO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSw2RUFBNkUsWUFBWTtBQUN6RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCw2Q0FBNkMsRUFBRTs7QUFFeEc7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLG1EQUFtRDtBQUNuRDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLG9DQUFvQztBQUNwQztBQUNBLEtBQUs7QUFDTCx3RUFBd0U7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCw4REFBOEQ7QUFDOUQ7QUFDQSxLQUFLO0FBQ0wsd0VBQXdFO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCx5QkFBeUIsc0JBQXNCLEVBQUUsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixhQUFhO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwQkFBMEI7QUFDaEQsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMLHlCQUF5QjtBQUN6QixLQUFLO0FBQ0wsdUJBQXVCO0FBQ3ZCLDJCQUEyQjtBQUMzQiwwQkFBMEI7QUFDMUIsMkJBQTJCO0FBQzNCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEIsYUFBYTtBQUN2QyxPQUFPO0FBQ1A7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUwsdURBQXVELDZCQUE2QixFQUFFO0FBQ3RGO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBLHVEQUF1RCxZQUFZOztBQUVuRTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSyxVQUFVLGdCQUFnQjs7QUFFL0I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUssV0FBVyxrQ0FBa0M7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBLENBQUMsb0NBQW9DOzs7QUFHckMsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGdCQUFnQixFQUFFO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEI7O0FBRTVCLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRCxDQUFDO0FBQ0Q7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxTQUFTO0FBQ1QsR0FBRyxFQUFFO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2RkFBNkY7QUFDN0Y7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixhQUFhO0FBQ25DLEdBQUc7QUFDSDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsaUJBQWlCLEVBQUU7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxnQkFBZ0I7QUFDbkY7QUFDQTtBQUNBLEdBQUcsNENBQTRDLGdDQUFnQztBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9FQUFvRSxpQ0FBaUM7QUFDckc7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUM7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUEsY0FBYzs7O0FBR2QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsa0JBQWtCLEVBQUU7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1QixPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0EsdUNBQXVDO0FBQ3ZDOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLFlBQVksZUFBZTtBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDLHFCQUFxQjtBQUN0RDtBQUNBLGlDQUFpQyxTQUFTLEVBQUU7QUFDNUMsQ0FBQyxZQUFZOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixTQUFTLHFCQUFxQjtBQUMzRCxpQ0FBaUMsYUFBYTtBQUM5QztBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixVQUFVO0FBQ3ZDO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFDQUFxQztBQUNyRTtBQUNBO0FBQ0EsMkJBQTJCLGdDQUFnQztBQUMzRDtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLG1DQUFtQyxnQ0FBZ0MsYUFBYTtBQUN2Riw4QkFBOEIsbUNBQW1DLGFBQWE7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBLGtEQUFrRCxpQkFBaUIsRUFBRTtBQUNyRTtBQUNBLHdEQUF3RCxhQUFhLEVBQUUsRUFBRTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0w7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRCQUE0Qjs7QUFFNUIsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1EQUFtRCxnQkFBZ0Isc0JBQXNCLE9BQU8sMkJBQTJCLDBCQUEwQix5REFBeUQsMkJBQTJCLEVBQUUsRUFBRSxFQUFFLGVBQWU7O0FBRTlQLGdDQUFnQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWpqQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosaURBQWlELGFBQWEsdUZBQXVGLEVBQUUsdUZBQXVGOztBQUU5TywwQ0FBMEMsK0RBQStELHFHQUFxRyxFQUFFLHlFQUF5RSxlQUFlLHlFQUF5RSxFQUFFLEVBQUUsdUhBQXVIOztBQUU1ZTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLG1EQUFtRDtBQUNuRDtBQUNBLFNBQVMsRUFBRTtBQUNYO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1EQUFtRCxnQkFBZ0Isc0JBQXNCLE9BQU8sMkJBQTJCLDBCQUEwQix5REFBeUQsMkJBQTJCLEVBQUUsRUFBRSxFQUFFLGVBQWU7O0FBRTlQLGdDQUFnQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWpqQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0YsOENBQThDLGlCQUFpQixxQkFBcUIsb0NBQW9DLDZEQUE2RCxvQkFBb0IsRUFBRSxlQUFlOztBQUUxTixpREFBaUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SixpREFBaUQsYUFBYSx1RkFBdUYsRUFBRSx1RkFBdUY7O0FBRTlPLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxnRUFBZ0U7QUFDaEU7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFlBQVk7QUFDckM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsMkNBQTJDLGdDQUFnQztBQUMzRTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDO0FBQzNDO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELHNCQUFzQjtBQUNoRixrRkFBa0Ysd0JBQXdCO0FBQzFHOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFlBQVksY0FBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxNQUFNO0FBQ2Q7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBOztBQUVBLDhCQUE4QixhQUFhOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG9DQUFvQztBQUM3RSw2Q0FBNkMsb0NBQW9DO0FBQ2pGLEtBQUssNEJBQTRCLG9DQUFvQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0Esa0NBQWtDLDJCQUEyQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEZBQTRGLGFBQWEsRUFBRTs7QUFFM0c7QUFDQSxxREFBcUQsNEJBQTRCO0FBQ2pGO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBLHNCQUFzQjtBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUssWUFBWTtBQUNqQixHQUFHO0FBQ0g7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsY0FBYztBQUNkLGlCQUFpQjtBQUNqQjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHVDQUF1QyxzQkFBc0IsRUFBRTtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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QUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtEQUFrRCxPQUFPO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlCQUF5QixPQUFPO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFVBQVU7QUFDeEM7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixVQUFVO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEIsT0FBTztBQUNqQztBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEIsVUFBVTs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkMsT0FBTztBQUNsRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsb0JBQW9CLE9BQU87QUFDM0IseUJBQXlCLE9BQU87QUFDaEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0VBQWtFLE9BQU87QUFDekUsK0NBQStDLFVBQVU7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsb0JBQW9CO0FBQ3BCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpREFBaUQ7QUFDakQ7O0FBRUE7QUFDQTtBQUNBLGtGQUFrRixxQ0FBcUMseUNBQXlDO0FBQ2hLOztBQUVBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpTUFBaU07QUFDak07O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCOztBQUVBO0FBQ0EsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsT0FBTztBQUNoRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsR0FBRztBQUN2QixnQkFBZ0I7QUFDaEIsZUFBZSxHQUFHLEtBQUssS0FBSztBQUM1QixlQUFlLEdBQUc7QUFDbEI7QUFDQSw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxnQ0FBZ0MsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVqakI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLGlEQUFpRCxhQUFhLHVGQUF1RixFQUFFLHVGQUF1Rjs7QUFFOU8sMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDLElBQUk7QUFDTDtBQUNBLENBQUMsSUFBSTtBQUNMO0FBQ0EsQ0FBQyxJQUFJLDBCQUEwQixhQUFhLGtCQUFrQixtQkFBbUIsaUJBQWlCLG9CQUFvQiwyQkFBMkIsWUFBWSwwQkFBMEI7O0FBRXZMO0FBQ0E7QUFDQSxDQUFDLHFCQUFxQixhQUFhLE1BQU0sUUFBUSxlQUFlLHVCQUF1QixXQUFXLFlBQVk7O0FBRTlHLGdFQUFnRSxjQUFjLFdBQVcsV0FBVyxrQkFBa0IsVUFBVSxRQUFROztBQUV4STtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQyxJQUFJLG9EQUFvRDs7QUFFekQ7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUMsSUFBSSxtREFBbUQ7O0FBRXhELCtEQUErRCwyQkFBMkIsMEJBQTBCLGlCQUFpQixrQkFBa0IsbUJBQW1CLHFCQUFxQjs7QUFFL0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxXQUFXLHdEQUF3RDtBQUNuRSxvREFBb0QsK0JBQStCO0FBQ25GLHFEQUFxRCwrQkFBK0I7QUFDcEY7QUFDQSxpRUFBaUUsV0FBVztBQUM1RTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxrQ0FBa0M7QUFDbEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsOEJBQThCO0FBQ3BELHNCQUFzQiw4QkFBOEI7QUFDcEQsc0JBQXNCLDhCQUE4Qjs7QUFFcEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0JBQStCLG1CQUFtQixPQUFPO0FBQ3pELCtCQUErQixtQkFBbUIsT0FBTztBQUN6RCwrQkFBK0IsbUJBQW1CLE9BQU87QUFDekQ7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsZ0JBQWdCO0FBQ2hCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGdCQUFnQjtBQUNoQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7O0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsS0FBSyxrQkFBa0IsWUFBWSxrQkFBa0I7QUFDckQ7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEIsWUFBWTs7QUFFeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFO0FBQ2pFLCtCQUErQixFQUFF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R0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHNDQUFzQztBQUM5QztBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNa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QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIscUJBQXFCO0FBQ3JCLDBCQUEwQjtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtREFBbUQsZ0JBQWdCLHNCQUFzQixPQUFPLDJCQUEyQiwwQkFBMEIseURBQXlELDJCQUEyQixFQUFFLEVBQUUsRUFBRSxlQUFlOztBQUU5UDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwwRUFBMEUsOERBQThEO0FBQ3hJLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDOztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsNkJBQTZCO0FBQzdCLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixLQUFLO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsNEJBQTRCO0FBQzVCLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsc0JBQXNCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLDJCQUEyQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGdDQUFnQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsZ0NBQWdDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsTUFBTTtBQUNqQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFD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QU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxzQkFBc0I7QUFDdEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4QkFBOEIsNEJBQTRCOzs7QUFHMUQsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4QkFBOEIsc0NBQXNDOzs7QUFH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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QixjQUFjO0FBQ2Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNEJBQTRCLG1CQUFtQiw2QkFBNkIsRUFBRSxFQUFFOzs7QUFHaEYsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUMsMkJBQTJCLFVBQVUsRUFBRSxFQUFFO0FBQzVFLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDZCQUE2QixtQ0FBbUM7OztBQUdoRSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBFQUEwRSxrQkFBa0IsRUFBRTtBQUM5RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxnQ0FBZ0M7QUFDdkY7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtDQUFrQyxnQkFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxVQUFVO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFdBQVc7QUFDckI7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNkJBQTZCLHVDQUF1Qzs7QUFFcEU7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNkJBQTZCLGdDQUFnQzs7QUFFN0Q7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxnQkFBZ0IsRUFBRTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCLEVBQUU7QUFDNUMsMEJBQTBCLGdCQUFnQjtBQUMxQyxLQUFLO0FBQ0w7QUFDQSxvQ0FBb0MsaUJBQWlCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDLHdCQUF3QiwwQkFBMEIsWUFBWSxFQUFFO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsMkJBQTJCO0FBQ2xELFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUZBQW1GO0FBQ25GO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxtQkFBbUIsa0NBQWtDO0FBQ3JELFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGVBQWUsdUNBQXVDO0FBQ3REO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsMEJBQTBCO0FBQ2pEO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsa0JBQWtCLHlCQUF5QixLQUFLO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsd0JBQXdCO0FBQ3hCLGdCQUFnQjtBQUNoQixvQkFBb0I7QUFDcEIsd0JBQXdCO0FBQ3hCLGdCQUFnQjtBQUNoQixvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwREFBMEQsb0JBQW9CO0FBQzlFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsbUVBQW1FO0FBQ2hHLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2RUFBNkUsNEJBQTRCOztBQUV6RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSw2RkFBNkY7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7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RzFDLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQywrREFBK0Q7QUFDekc7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsK0RBQStEO0FBQ3pHO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1Q0FB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ZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7O0FBR0gsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQSxDQUFDLEVBQUU7OztBQUdILE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRTs7O0FBR0gsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0E7QUFDQSxDQUFDLEVBQUU7OztBQUdILE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRTs7O0FBR0gsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFOzs7QUFHSCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRTs7O0FBR0gsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7OztBQUdILE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxVQUFVLEtBQXFDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHNCQUFzQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsSUFBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQkFBcUIsMkJBQTJCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQyw0RkFBNEYsU0FBTTtBQUM3STtBQUNBOztBQUVBLG1CQUFtQixnQ0FBZ0M7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLGdDQUFnQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7QUM5a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLElBQXFDO0FBQ3pDLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1RkFBMkI7QUFDdEQsQ0FBQyxNQUFNLEVBSU47Ozs7Ozs7Ozs7Ozs7QUNsQkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViOztBQUVBOzs7Ozs7Ozs7Ozs7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7OztBQUliLElBQUksSUFBcUM7QUFDekM7QUFDQTs7QUFFQSw4Q0FBOEMsY0FBYzs7QUFFNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNGQUFzRixhQUFhO0FBQ25HO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRGQUE0RixlQUFlO0FBQzNHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7Ozs7Ozs7Ozs7Ozs7QUNsT2E7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDO0FBQ0QsbUJBQW1CLG1CQUFPLENB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QUFDQTtBQUNBLHNCQUFzQix3Q0FBd0M7QUFDOUQ7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFJO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLFVBQVUsSUFBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QywrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNB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QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0M7Ozs7Ozs7Ozs7OztBQ3pEYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxhQUFhLG1CQUFPLENBQUMsOEVBQW9COztBQUV6Qzs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7QUFDQSxvQzs7Ozs7Ozs7Ozs7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSSxJQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsV0FBVztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0RBLGFBQWEsK0JBQStCLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBOUMsYUFBYSx1Q0FBdUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F0RCxhQUFhLHdDQUF3QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXZELGFBQWEsdURBQXVELEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBdEUsYUFBYSxpQ0FBaUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0FoRCxhQUFhLGdDQUFnQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQS9DLGFBQWEsbUNBQW1DLEVBQUUsSSIsImZpbGUiOiJlZS13cC1wbHVnaW5zLXBhZ2UuYjJlYWRlMTk3NzlhNGRhYmZlZTkuZGlzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFJlYWN0TW9kYWwgZnJvbSAncmVhY3QtbW9kYWwnO1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBFeGl0TW9kYWwsIHsgQ0xPU0VfTU9EQUxfRVZFTlQgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9yZWFjdC1leGl0LW1vZGFsLXR5cGVmb3JtJztcbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuaW1wb3J0IHsgZGF0YSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IH0gZnJvbSAncXVlcnlzdHJpbmdpZnknO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuY29uc3QgeyBleGl0TW9kYWxJbmZvOiBpbmZvID0ge30gfSA9IGRhdGE7XG5cbmNvbnN0IHF1ZXJ5U3RyaW5nID0gc3RyaW5naWZ5KCB7XG5cdGZpcnN0bmFtZTogaW5mby5maXJzdG5hbWUsXG5cdGVtYWlsYWRkcmVzczogaW5mby5lbWFpbGFkZHJlc3MsXG5cdHdlYnNpdGU6IGluZm8ud2Vic2l0ZSxcbn0gKTtcblxuY29uc3QgbW9kYWxQcm9wcyA9IHtcblx0c3R5bGVzOiB7XG5cdFx0Y29udGVudDoge1xuXHRcdFx0ZGlzcGxheTogJ2ZsZXgnLFxuXHRcdFx0dG9wOiAnODBweCcsXG5cdFx0XHRsZWZ0OiAnNTAlJyxcblx0XHRcdGJvdHRvbTogJ2F1dG8nLFxuXHRcdFx0cmlnaHQ6ICdhdXRvJyxcblx0XHRcdFdlYmtpdFRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoLTUwJSknLFxuXHRcdFx0dHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtNTAlKScsXG5cdFx0fSxcblx0XHR0eXBlRm9ybVN0eWxlOiB7XG5cdFx0XHR3aWR0aDogJzYwMHB4Jyxcblx0XHRcdGhlaWdodDogJzYwMHB4Jyxcblx0XHR9LFxuXHR9LFxuXHR0eXBlRm9ybVVybDogJ2h0dHBzOi8vZXZlbnRlc3ByZXNzby50eXBlZm9ybS5jb20vdG8vTzFERHltPycgKyBxdWVyeVN0cmluZyxcblx0aW50cm9UZXh0OiBfXyhcblx0XHQnRG8geW91IGhhdmUgYSBtb21lbnQgdG8gc2hhcmUgd2h5IHlvdSBhcmUgZGVhY3RpdmF0aW5nIEV2ZW50IEVzcHJlc3NvPycsXG5cdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0KSxcblx0ZG9TdXJ2ZXlCdXR0b25UZXh0OiBfXyhcblx0XHQnU3VyZSBJXFwnbGwgaGVscCcsXG5cdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0KSxcblx0c2tpcEJ1dHRvblRleHQ6IF9fKFxuXHRcdCdTa2lwJyxcblx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHQpLFxuXHRidXR0b25DbGFzczoge1xuXHRcdGRvU3VydmV5OiAnYnV0dG9uIGJ1dHRvbi1wcmltYXJ5Jyxcblx0XHRjbG9zZU1vZGFsOiAnYnV0dG9uIGJ1dHRvbi1zZWNvbmRhcnknLFxuXHR9LFxufTtcblxuLyoqXG4gKiBIYW5kbGVyIGZvciBkZWFjdGl2YXRpb24gdHJpZ2dlclxuICogQHBhcmFtIHtFdmVudH0gZVxuICogQHBhcmFtIHtlbGVtZW50fSBlbFxuICovXG5jb25zdCBoYW5kbGVEZWFjdGl2YXRpb25DbGljayA9ICggZSwgZWwgKSA9PiB7XG5cdGUucHJldmVudERlZmF1bHQoKTtcblx0Y29uc3QgbGluayA9ICQoIGVsICkuYXR0ciggJ2hyZWYnICk7XG5cdGNvbnN0IGFwcENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnZWUtZXhpdC1zdXJ2ZXktbW9kYWwnICk7XG5cdFJlYWN0TW9kYWwuc2V0QXBwRWxlbWVudCggYXBwQ29udGFpbmVyICk7XG5cdGNvbnN0IG1vZGFsQ29udGFpbmVyID0gUmVhY3RET00ucmVuZGVyKCA8RXhpdE1vZGFsIHsgLi4ubW9kYWxQcm9wcyB9IC8+LCAvL2VzbGludC1kaXNhYmxlLWxpbmUgcmVhY3Qvbm8tcmVuZGVyLXJldHVybi12YWx1ZVxuXHRcdGFwcENvbnRhaW5lcixcblx0KTtcblx0bW9kYWxDb250YWluZXIuZWwuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRDTE9TRV9NT0RBTF9FVkVOVCxcblx0XHRmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbGluaztcblx0XHR9LFxuXHRcdHsgb25jZTogdHJ1ZSB9LFxuXHQpO1xufTtcblxuLyoqXG4gKiBFRSBjYWZmZWluYXRlZCBjbGljayBjYXB0dXJlIGJ1dCBvbmx5IGlmIGZlYXR1cmUgaXMgYWN0aXZlXG4gKi9cbmlmICggaW5mby5pc01vZGFsQWN0aXZlICkge1xuXHQkKCAndHJbZGF0YS1zbHVnPVwiZXZlbnQtZXNwcmVzc29cIl0nIClcblx0XHQub24oICdjbGljaycsICdzcGFuLmRlYWN0aXZhdGUgPiBhJywgZnVuY3Rpb24oIGUgKSB7XG5cdFx0XHRoYW5kbGVEZWFjdGl2YXRpb25DbGljayggZSwgdGhpcyApO1xuXHRcdH0gKTtcblxuXHQvKipcblx0ICogRUUgZGVjYWYgY2xpY2sgY2FwdHVyZS5cblx0ICovXG5cdCQoICd0cltkYXRhLXNsdWc9XCJldmVudC1lc3ByZXNzby1kZWNhZlwiXScgKVxuXHRcdC5vbiggJ2NsaWNrJywgJ3NwYW4uZGVhY3RpdmF0ZSA+IGEnLCBmdW5jdGlvbiggZSApIHtcblx0XHRcdGhhbmRsZURlYWN0aXZhdGlvbkNsaWNrKCBlLCB0aGlzICk7XG5cdFx0fSApO1xufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWNhbmNlbC1wcm9tcHQtYnV0dG9uXCI6XCJlZS1jYW5jZWwtcHJvbXB0LWJ1dHRvblwiLFwiZXhpdC1tb2RhbC1jaG9pY2VzXCI6XCJleGl0LW1vZGFsLWNob2ljZXNcIixcImJ1dHRvblwiOlwiYnV0dG9uXCJ9OyIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgJy4uL2V4aXQtbW9kYWwtc3VydmV5JztcbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuaWYgKCAkKCAndHIuZWUtdXBzZWxsLXBsdWdpbi1saXN0LXRhYmxlJyApLmxlbmd0aCA+IDAgKSB7XG5cdCQoICd0cltkYXRhLXNsdWc9XCJldmVudC1lc3ByZXNzb1wiXSx0cltkYXRhLXNsdWc9XCJldmVudC1lc3ByZXNzby1kZWNhZlwiXScgKVxuXHRcdC5hZGRDbGFzcyggJ3VwZGF0ZScgKTtcbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS11cHNlbGwtY29udGFpbmVyXCI6XCJlZS11cHNlbGwtY29udGFpbmVyXCIsXCJlZS11cHNlbGwtaW5uZXItY29udGFpbmVyXCI6XCJlZS11cHNlbGwtaW5uZXItY29udGFpbmVyXCJ9OyIsImltcG9ydCBfT2JqZWN0JGdldFByb3RvdHlwZU9mIGZyb20gJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZic7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjayc7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcyc7XG5pbXBvcnQgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gZnJvbSAnYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tICdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnO1xuLyoqXG4gKiBFeHRlcm5hbCBEZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdE1vZGFsIGZyb20gJ3JlYWN0LW1vZGFsJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IEV4aXRNb2RhbE9wdGlvbnMsIFR5cGVGb3JtRW1iZWQgfSBmcm9tICcuL21vZGFsL2luZGV4JztcblxuZXhwb3J0IHZhciBDTE9TRV9NT0RBTF9FVkVOVCA9ICdjbG9zZU1vZGFsRXZlbnQnO1xuXG52YXIgRXhpdE1vZGFsID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHMoRXhpdE1vZGFsLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICAgIGZ1bmN0aW9uIEV4aXRNb2RhbCgpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV4aXRNb2RhbCk7XG5cbiAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEV4aXRNb2RhbC5fX3Byb3RvX18gfHwgX09iamVjdCRnZXRQcm90b3R5cGVPZihFeGl0TW9kYWwpKS5jYWxsKHRoaXMpKTtcblxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHNob3dNb2RhbDogdHJ1ZSxcbiAgICAgICAgICAgIGluaXRpYWxWaWV3OiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoRXhpdE1vZGFsLCBbe1xuICAgICAgICBrZXk6ICdjb21wb25lbnRXaWxsVXBkYXRlJyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMuc2hvd01vZGFsICE9PSB0aGlzLnN0YXRlLnNob3dNb2RhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzaG93TW9kYWw6IG5leHRQcm9wcy5zaG93TW9kYWwgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGluaXRpYWxWaWV3OiBuZXh0UHJvcHMuaW5pdGlhbFZpZXcgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1vZGFsRXZlbnQgPSBuZXcgRXZlbnQoQ0xPU0VfTU9EQUxfRVZFTlQsIHsgbW9kYWxPcGVuOiB0aGlzLnN0YXRlLnNob3dNb2RhbCB9KTtcbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTW9kYWxFdmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ2hhbmRsZUNsb3NlTW9kYWwnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2xvc2VNb2RhbCgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzaG93TW9kYWw6IGZhbHNlIH0pO1xuICAgICAgICAgICAgLy9zbyBleHRlcm5hbCBzY3JpcHRzIGxpc3RlbmluZyBvbiB0aGUgcmVhY3QgZWxlbWVudCBjYW4gcmVhY3QuXG4gICAgICAgICAgICB0aGlzLmVsLmRpc3BhdGNoRXZlbnQodGhpcy5jbG9zZU1vZGFsRXZlbnQpO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdvbkRvU3VydmV5JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRG9TdXJ2ZXkoKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaW5pdGlhbFZpZXc6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdyZW5kZXInLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5zdGF0ZS5pbml0aWFsVmlldyA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoRXhpdE1vZGFsT3B0aW9ucywge1xuICAgICAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQ2xvc2VNb2RhbCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25Eb1N1cnZleTogZnVuY3Rpb24gb25Eb1N1cnZleSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vbkRvU3VydmV5KCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbnRyb1RleHQ6IHRoaXMucHJvcHMuaW50cm9UZXh0LFxuICAgICAgICAgICAgICAgIGRvU3VydmV5QnV0dG9uVGV4dDogdGhpcy5wcm9wcy5kb1N1cnZleUJ1dHRvblRleHQsXG4gICAgICAgICAgICAgICAgc2tpcEJ1dHRvblRleHQ6IHRoaXMucHJvcHMuc2tpcEJ1dHRvblRleHQsXG4gICAgICAgICAgICAgICAgZG9TdXJ2ZXlCdXR0b25DbGFzczogdGhpcy5wcm9wcy5idXR0b25DbGFzcy5kb1N1cnZleSxcbiAgICAgICAgICAgICAgICBjbG9zZU1vZGFsQnV0dG9uQ2xhc3M6IHRoaXMucHJvcHMuYnV0dG9uQ2xhc3MuY2xvc2VNb2RhbFxuICAgICAgICAgICAgfSkgOiBSZWFjdC5jcmVhdGVFbGVtZW50KFR5cGVGb3JtRW1iZWQsIHtcbiAgICAgICAgICAgICAgICBvblN1Ym1pdDogZnVuY3Rpb24gb25TdWJtaXQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQ2xvc2VNb2RhbCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdXJsOiB0aGlzLnByb3BzLnR5cGVGb3JtVXJsLFxuICAgICAgICAgICAgICAgIHBvcHVwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlRm9ybVN0eWxlOiB0aGlzLnByb3BzLnN0eWxlcy50eXBlRm9ybVN0eWxlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICAgIHsgcmVmOiBmdW5jdGlvbiByZWYoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuZWwgPSBlbDtcbiAgICAgICAgICAgICAgICAgICAgfSB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0TW9kYWwsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT3BlbjogdGhpcy5zdGF0ZS5zaG93TW9kYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogdGhpcy5wcm9wcy5zdHlsZXNcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gRXhpdE1vZGFsO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGl0TW9kYWw7XG5cblxuRXhpdE1vZGFsLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBzaG93TW9kYWw6IHRydWUsXG4gICAgc2hvd1R5cGVGb3JtOiBmYWxzZSxcbiAgICBzdHlsZXM6IHtcbiAgICAgICAgb3ZlcmxheToge1xuICAgICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpJ1xuICAgICAgICB9LFxuICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIHRvcDogJzQwcHgnLFxuICAgICAgICAgICAgbGVmdDogJzQwcHgnLFxuICAgICAgICAgICAgcmlnaHQ6ICc0MHB4JyxcbiAgICAgICAgICAgIGJvdHRvbTogJzQwcHgnLFxuICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNjY2MnLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJyNmZmYnLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgIG91dGxpbmU6ICdub25lJyxcbiAgICAgICAgICAgIHBhZGRpbmc6ICcyMHB4J1xuICAgICAgICB9LFxuICAgICAgICB0eXBlRm9ybVN0eWxlOiB7XG4gICAgICAgICAgICB3aWR0aDogJzYwMHB4JyxcbiAgICAgICAgICAgIGhlaWdodDogJzQwMHB4J1xuICAgICAgICB9XG4gICAgfSxcbiAgICBidXR0b25DbGFzczoge1xuICAgICAgICBkb1N1cnZleTogJycsXG4gICAgICAgIGNsb3NlTW9kYWw6ICcnXG4gICAgfSxcbiAgICBtb2RhbENsYXNzTmFtZToge1xuICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgb3ZlcmxheTogJydcbiAgICB9LFxuICAgIHR5cGVGb3JtVXJsOiAnJyxcbiAgICBpbnRyb1RleHQ6IFwiV2UncmUgc29ycnkgdG8gc2VlIHlvdSBnbyEgV2lsbCB5b3Ugc2hhcmUgZmVlZGJhY2sgdGhyb3VnaCBhIHNob3J0IHN1cnZleSB0byBoZWxwIHVzIGltcHJvdmUgb3VyIHByb2R1Y3Q/XCIsXG4gICAgZG9TdXJ2ZXlCdXR0b25UZXh0OiBcIlN1cmUgSSdsbCBoZWxwIVwiLFxuICAgIHNraXBCdXR0b25UZXh0OiBcIlNraXBcIlxufTtcblxuRXhpdE1vZGFsLnByb3BUeXBlcyA9IHtcbiAgICBzaG93TW9kYWw6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dUeXBlRm9ybTogUHJvcFR5cGVzLmJvb2wsXG4gICAgc3R5bGVzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICBvdmVybGF5OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICBjb250ZW50OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICB0eXBlRm9ybVN0eWxlOiBQcm9wVHlwZXMub2JqZWN0XG4gICAgfSksXG4gICAgbW9kYWxDbGFzc05hbWU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIG92ZXJsYXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHR5cGVGb3JtU3R5bGU6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KSxcbiAgICBidXR0b25DbGFzczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgZG9TdXJ2ZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGNsb3NlTW9kYWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KSxcbiAgICB0eXBlRm9ybVVybDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGludHJvVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBza2lwQnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkb1N1cnZleUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwiLyoqXG4gKiBFeHRlcm5hbCBEZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnV0dG9uKF9yZWYpIHtcbiAgICB2YXIgaGFuZGxlT25DbGljayA9IF9yZWYuaGFuZGxlT25DbGljayxcbiAgICAgICAgYnV0dG9uVGV4dCA9IF9yZWYuYnV0dG9uVGV4dCxcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBfcmVmLmJ1dHRvbkNsYXNzO1xuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdidXR0b24nLFxuICAgICAgICB7IGNsYXNzTmFtZTogYnV0dG9uQ2xhc3MsIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcbiAgICAgICAgYnV0dG9uVGV4dFxuICAgICk7XG59IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBFeGl0TW9kYWxPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zdmlldyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFR5cGVGb3JtRW1iZWQgfSBmcm9tICcuL3R5cGVGb3JtRW1iZWQnOyIsIi8qKlxuICogRXh0ZXJuYWwgRGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJy4vYnV0dG9uJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFeGl0TW9kYWxPcHRpb25zKF9yZWYpIHtcbiAgICB2YXIgb25DbG9zZSA9IF9yZWYub25DbG9zZSxcbiAgICAgICAgb25Eb1N1cnZleSA9IF9yZWYub25Eb1N1cnZleSxcbiAgICAgICAgaW50cm9UZXh0ID0gX3JlZi5pbnRyb1RleHQsXG4gICAgICAgIGRvU3VydmV5QnV0dG9uVGV4dCA9IF9yZWYuZG9TdXJ2ZXlCdXR0b25UZXh0LFxuICAgICAgICBza2lwQnV0dG9uVGV4dCA9IF9yZWYuc2tpcEJ1dHRvblRleHQsXG4gICAgICAgIGRvU3VydmV5QnV0dG9uQ2xhc3MgPSBfcmVmLmRvU3VydmV5QnV0dG9uQ2xhc3MsXG4gICAgICAgIGNsb3NlTW9kYWxCdXR0b25DbGFzcyA9IF9yZWYuY2xvc2VNb2RhbEJ1dHRvbkNsYXNzO1xuXG4gICAgdmFyIGJ1dHRvbkNsYXNzID0gXCJlZS1jYW5jZWwtcHJvbXB0LWJ1dHRvblwiO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICdleGl0LW1vZGFsLWNob2ljZXMnIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAncCcsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW50cm9UZXh0XG4gICAgICAgICksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgICAgICAgICBrZXk6ICdkbyBzdXJ2ZXknLFxuICAgICAgICAgICAgaGFuZGxlT25DbGljazogb25Eb1N1cnZleSxcbiAgICAgICAgICAgIGJ1dHRvblRleHQ6IGRvU3VydmV5QnV0dG9uVGV4dCxcbiAgICAgICAgICAgIGJ1dHRvbkNsYXNzOiBjbGFzc05hbWVzKGJ1dHRvbkNsYXNzLCAnZG8tc3VydmV5JywgZG9TdXJ2ZXlCdXR0b25DbGFzcylcbiAgICAgICAgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgICAgICAgICBrZXk6ICdjbG9zZS1tb2RhbC1hbmQtY2FuY2VsJyxcbiAgICAgICAgICAgIGhhbmRsZU9uQ2xpY2s6IG9uQ2xvc2UsXG4gICAgICAgICAgICBidXR0b25UZXh0OiBza2lwQnV0dG9uVGV4dCxcbiAgICAgICAgICAgIGJ1dHRvbkNsYXNzOiBjbGFzc05hbWVzKGJ1dHRvbkNsYXNzLCAnY2xvc2UtbW9kYWwtYW5kLWNhbmNlbCcsIGNsb3NlTW9kYWxCdXR0b25DbGFzcylcbiAgICAgICAgfSlcbiAgICApO1xufTsiLCJpbXBvcnQgX09iamVjdCRnZXRQcm90b3R5cGVPZiBmcm9tICdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tICdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tICdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnO1xuaW1wb3J0IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIGZyb20gJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJztcbmltcG9ydCBfaW5oZXJpdHMgZnJvbSAnYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzJztcbi8qKlxuICogRXh0ZXJuYWwgRGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICogYXMgdGZFbWJlZCBmcm9tICdAdHlwZWZvcm0vZW1iZWQnO1xuXG52YXIgVHlwZUZvcm1FbWJlZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzKFR5cGVGb3JtRW1iZWQsIF9Db21wb25lbnQpO1xuXG4gICAgZnVuY3Rpb24gVHlwZUZvcm1FbWJlZCgpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFR5cGVGb3JtRW1iZWQpO1xuXG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoVHlwZUZvcm1FbWJlZC5fX3Byb3RvX18gfHwgX09iamVjdCRnZXRQcm90b3R5cGVPZihUeXBlRm9ybUVtYmVkKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNsYXNzKFR5cGVGb3JtRW1iZWQsIFt7XG4gICAgICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgdXJsID0gX3Byb3BzLnVybCxcbiAgICAgICAgICAgICAgICBoaWRlSGVhZGVycyA9IF9wcm9wcy5oaWRlSGVhZGVycyxcbiAgICAgICAgICAgICAgICBoaWRlRm9vdGVyID0gX3Byb3BzLmhpZGVGb290ZXIsXG4gICAgICAgICAgICAgICAgb3BhY2l0eSA9IF9wcm9wcy5vcGFjaXR5LFxuICAgICAgICAgICAgICAgIGJ1dHRvblRleHQgPSBfcHJvcHMuYnV0dG9uVGV4dCxcbiAgICAgICAgICAgICAgICBwb3B1cCA9IF9wcm9wcy5wb3B1cCxcbiAgICAgICAgICAgICAgICBtb2RlID0gX3Byb3BzLm1vZGUsXG4gICAgICAgICAgICAgICAgYXV0b09wZW4gPSBfcHJvcHMuYXV0b09wZW4sXG4gICAgICAgICAgICAgICAgYXV0b0Nsb3NlID0gX3Byb3BzLmF1dG9DbG9zZSxcbiAgICAgICAgICAgICAgICBvblN1Ym1pdCA9IF9wcm9wcy5vblN1Ym1pdDtcblxuICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgaGlkZUhlYWRlcnM6IGhpZGVIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGhpZGVGb290ZXI6IGhpZGVGb290ZXIsXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogb3BhY2l0eSxcbiAgICAgICAgICAgICAgICBidXR0b25UZXh0OiBidXR0b25UZXh0LFxuICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUsXG4gICAgICAgICAgICAgICAgYXV0b09wZW46IGF1dG9PcGVuLFxuICAgICAgICAgICAgICAgIGF1dG9DbG9zZTogYXV0b0Nsb3NlLFxuICAgICAgICAgICAgICAgIG9uU3VibWl0OiBvblN1Ym1pdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChwb3B1cCkge1xuICAgICAgICAgICAgICAgIHRoaXMudHlwZWZvcm0gPSB0ZkVtYmVkLm1ha2VQb3B1cCh1cmwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZWwgPSB0aGlzLnR5cGVmb3JtRWw7XG4gICAgICAgICAgICAgICAgdGZFbWJlZC5tYWtlV2lkZ2V0KGVsLCB1cmwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdyZW5kZXInLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnLCB7IGNsYXNzTmFtZTogJ3JlYWN0LXR5cGVmb3JtLWVtYmVkJywgcmVmOiBmdW5jdGlvbiByZWYodGYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi50eXBlZm9ybUVsID0gdGY7XG4gICAgICAgICAgICAgICAgfSwgc3R5bGU6IHRoaXMucHJvcHMudHlwZUZvcm1TdHlsZSB9KTtcbiAgICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBUeXBlRm9ybUVtYmVkO1xufShDb21wb25lbnQpO1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlRm9ybUVtYmVkO1xuXG5cblR5cGVGb3JtRW1iZWQucHJvcFR5cGVzID0ge1xuICAgIHR5cGVGb3JtU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdXJsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcG9wdXA6IFByb3BUeXBlcy5ib29sLFxuICAgIGhpZGVIZWFkZXJzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBoaWRlRm9vdGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8vIFdpZGdldCBvcHRpb25zXG4gICAgb3BhY2l0eTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBidXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLy8gUG9wdXAgb3B0aW9uc1xuICAgIG1vZGU6IFByb3BUeXBlcy5vbmVPZihbJ3BvcHVwJywgJ2RyYXdlcl9sZWZ0JywgJ2RyYXdlcl9yaWdodCddKSxcbiAgICBhdXRvT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgYXV0b0Nsb3NlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG9uU3VibWl0OiBQcm9wVHlwZXMuZnVuY1xufTtcblxuVHlwZUZvcm1FbWJlZC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgdHlwZUZvcm1TdHlsZToge30sXG4gICAgdXJsOiAnJyxcbiAgICBwb3B1cDogZmFsc2UsXG4gICAgaGlkZUhlYWRlcnM6IGZhbHNlLFxuICAgIGhpZGVGb290ZXI6IGZhbHNlLFxuICAgIG9wYWNpdHk6IDEwMCxcbiAgICBidXR0b25UZXh0OiAnU3RhcnQnLFxuICAgIG1vZGU6IFwicG9wdXBcIixcbiAgICBhdXRvT3BlbjogZmFsc2Vcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9cIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNDIpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBjb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG52YXIgaGlkZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgY3R4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuXG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgc3RvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1KSgnd2tzJyk7XG52YXIgdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XG52YXIgU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcblxuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhX193ZWJwYWNrX3JlcXVpcmVfXygzKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwOCk7XG52YXIgdG9QcmltaXRpdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuXG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBkUCA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG52YXIgY3JlYXRlRGVzYyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBoaWRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgU1JDID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNikoJ3NyYycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRnVuY3Rpb25bVE9fU1RSSU5HXTtcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjIpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcbnZhciBxdW90ID0gL1wiL2c7XG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbnZhciBjcmVhdGVIVE1MID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIGV4ZWMpIHtcbiAgdmFyIE8gPSB7fTtcbiAgT1tOQU1FXSA9IGV4ZWMoY3JlYXRlSFRNTCk7XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pLCAnU3RyaW5nJywgTyk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpO1xudmFyIGRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgcElFID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XG52YXIgY3JlYXRlRGVzYyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xudmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwOCk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IF9fd2VicGFja19yZXF1aXJlX18oNikgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgSUVfUFJPVE8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4KSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJ2ZXJzaW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdmVyc2lvbjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRE9NXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRE9NOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDaGlsZHJlblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENoaWxkcmVuOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXIkMTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlQ2xhc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDbGFzczsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlRmFjdG9yeVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUZhY3Rvcnk7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZUVsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVFbGVtZW50OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjbG9uZUVsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbG9uZUVsZW1lbnQkMTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiaXNWYWxpZEVsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1ZhbGlkRWxlbWVudDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZmluZERPTU5vZGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmaW5kRE9NTm9kZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwidW5tb3VudENvbXBvbmVudEF0Tm9kZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVubW91bnRDb21wb25lbnRBdE5vZGU7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvbXBvbmVudCQxOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQdXJlQ29tcG9uZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUHVyZUNvbXBvbmVudDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwidW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiX19zcHJlYWRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBleHRlbmQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3ByZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDgpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoZGVmYXVsdCBmcm9tIG5vbi1oYW1vcnkpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlByb3BUeXBlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hOyB9KTtcblxuXG5cbnZhciB2ZXJzaW9uID0gJzE1LjEuMCc7IC8vIHRyaWNrIGxpYnJhcmllcyB0byB0aGluayB3ZSBhcmUgcmVhY3RcblxudmFyIEVMRU1FTlRTID0gJ2EgYWJiciBhZGRyZXNzIGFyZWEgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiIGJhc2UgYmRpIGJkbyBiaWcgYmxvY2txdW90ZSBib2R5IGJyIGJ1dHRvbiBjYW52YXMgY2FwdGlvbiBjaXRlIGNvZGUgY29sIGNvbGdyb3VwIGRhdGEgZGF0YWxpc3QgZGQgZGVsIGRldGFpbHMgZGZuIGRpYWxvZyBkaXYgZGwgZHQgZW0gZW1iZWQgZmllbGRzZXQgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGZvcm0gaDEgaDIgaDMgaDQgaDUgaDYgaGVhZCBoZWFkZXIgaGdyb3VwIGhyIGh0bWwgaSBpZnJhbWUgaW1nIGlucHV0IGlucyBrYmQga2V5Z2VuIGxhYmVsIGxlZ2VuZCBsaSBsaW5rIG1haW4gbWFwIG1hcmsgbWVudSBtZW51aXRlbSBtZXRhIG1ldGVyIG5hdiBub3NjcmlwdCBvYmplY3Qgb2wgb3B0Z3JvdXAgb3B0aW9uIG91dHB1dCBwIHBhcmFtIHBpY3R1cmUgcHJlIHByb2dyZXNzIHEgcnAgcnQgcnVieSBzIHNhbXAgc2NyaXB0IHNlY3Rpb24gc2VsZWN0IHNtYWxsIHNvdXJjZSBzcGFuIHN0cm9uZyBzdHlsZSBzdWIgc3VtbWFyeSBzdXAgdGFibGUgdGJvZHkgdGQgdGV4dGFyZWEgdGZvb3QgdGggdGhlYWQgdGltZSB0aXRsZSB0ciB0cmFjayB1IHVsIHZhciB2aWRlbyB3YnIgY2lyY2xlIGNsaXBQYXRoIGRlZnMgZWxsaXBzZSBnIGltYWdlIGxpbmUgbGluZWFyR3JhZGllbnQgbWFzayBwYXRoIHBhdHRlcm4gcG9seWdvbiBwb2x5bGluZSByYWRpYWxHcmFkaWVudCByZWN0IHN0b3Agc3ZnIHRleHQgdHNwYW4nLnNwbGl0KCcgJyk7XG5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCE9PSd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgJiYgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fCAweGVhYzc7XG5cbnZhciBDT01QT05FTlRfV1JBUFBFUl9LRVkgPSAodHlwZW9mIFN5bWJvbCE9PSd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IpID8gU3ltYm9sLmZvcignX19wcmVhY3RDb21wYXRXcmFwcGVyJykgOiAnX19wcmVhY3RDb21wYXRXcmFwcGVyJztcblxuLy8gZG9uJ3QgYXV0b2JpbmQgdGhlc2UgbWV0aG9kcyBzaW5jZSB0aGV5IGFscmVhZHkgaGF2ZSBndWFyYW50ZWVkIGNvbnRleHQuXG52YXIgQVVUT0JJTkRfQkxBQ0tMSVNUID0ge1xuXHRjb25zdHJ1Y3RvcjogMSxcblx0cmVuZGVyOiAxLFxuXHRzaG91bGRDb21wb25lbnRVcGRhdGU6IDEsXG5cdGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6IDEsXG5cdGNvbXBvbmVudFdpbGxVcGRhdGU6IDEsXG5cdGNvbXBvbmVudERpZFVwZGF0ZTogMSxcblx0Y29tcG9uZW50V2lsbE1vdW50OiAxLFxuXHRjb21wb25lbnREaWRNb3VudDogMSxcblx0Y29tcG9uZW50V2lsbFVubW91bnQ6IDEsXG5cdGNvbXBvbmVudERpZFVubW91bnQ6IDFcbn07XG5cblxudmFyIENBTUVMX1BST1BTID0gL14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcHxjb2xvcnxmaWxsfGZsb29kfGZvbnR8Z2x5cGh8aG9yaXp8bWFya2VyfG92ZXJsaW5lfHBhaW50fHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dHx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KVtBLVpdLztcblxuXG52YXIgQllQQVNTX0hPT0sgPSB7fTtcblxuLypnbG9iYWwgcHJvY2VzcyovXG52YXIgREVWID0gdHlwZW9mIHByb2Nlc3M9PT0ndW5kZWZpbmVkJyB8fCAhcHJvY2Vzcy5lbnYgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYhPT0ncHJvZHVjdGlvbic7XG5cbi8vIGEgY29tcG9uZW50IHRoYXQgcmVuZGVycyBub3RoaW5nLiBVc2VkIHRvIHJlcGxhY2UgY29tcG9uZW50cyBmb3IgdW5tb3VudENvbXBvbmVudEF0Tm9kZS5cbmZ1bmN0aW9uIEVtcHR5Q29tcG9uZW50KCkgeyByZXR1cm4gbnVsbDsgfVxuXG5cblxuLy8gbWFrZSByZWFjdCB0aGluayB3ZSdyZSByZWFjdC5cbnZhciBWTm9kZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJlYWN0X19bXCJjXCIgLyogaCAqL10pKCdhJywgbnVsbCkuY29uc3RydWN0b3I7XG5WTm9kZS5wcm90b3R5cGUuJCR0eXBlb2YgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG5WTm9kZS5wcm90b3R5cGUucHJlYWN0Q29tcGF0VXBncmFkZWQgPSBmYWxzZTtcblZOb2RlLnByb3RvdHlwZS5wcmVhY3RDb21wYXROb3JtYWxpemVkID0gZmFsc2U7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWTm9kZS5wcm90b3R5cGUsICd0eXBlJywge1xuXHRnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5ub2RlTmFtZTsgfSxcblx0c2V0OiBmdW5jdGlvbih2KSB7IHRoaXMubm9kZU5hbWUgPSB2OyB9LFxuXHRjb25maWd1cmFibGU6dHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWTm9kZS5wcm90b3R5cGUsICdwcm9wcycsIHtcblx0Z2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuYXR0cmlidXRlczsgfSxcblx0c2V0OiBmdW5jdGlvbih2KSB7IHRoaXMuYXR0cmlidXRlcyA9IHY7IH0sXG5cdGNvbmZpZ3VyYWJsZTp0cnVlXG59KTtcblxuXG5cbnZhciBvbGRFdmVudEhvb2sgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJlYWN0X19bXCJkXCIgLyogb3B0aW9ucyAqL10uZXZlbnQ7XG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJlYWN0X19bXCJkXCIgLyogb3B0aW9ucyAqL10uZXZlbnQgPSBmdW5jdGlvbiAoZSkge1xuXHRpZiAob2xkRXZlbnRIb29rKSB7IGUgPSBvbGRFdmVudEhvb2soZSk7IH1cblx0ZS5wZXJzaXN0ID0gT2JqZWN0O1xuXHRlLm5hdGl2ZUV2ZW50ID0gZTtcblx0cmV0dXJuIGU7XG59O1xuXG5cbnZhciBvbGRWbm9kZUhvb2sgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJlYWN0X19bXCJkXCIgLyogb3B0aW9ucyAqL10udm5vZGU7XG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJlYWN0X19bXCJkXCIgLyogb3B0aW9ucyAqL10udm5vZGUgPSBmdW5jdGlvbiAodm5vZGUpIHtcblx0aWYgKCF2bm9kZS5wcmVhY3RDb21wYXRVcGdyYWRlZCkge1xuXHRcdHZub2RlLnByZWFjdENvbXBhdFVwZ3JhZGVkID0gdHJ1ZTtcblxuXHRcdHZhciB0YWcgPSB2bm9kZS5ub2RlTmFtZSxcblx0XHRcdGF0dHJzID0gdm5vZGUuYXR0cmlidXRlcyA9IGV4dGVuZCh7fSwgdm5vZGUuYXR0cmlidXRlcyk7XG5cblx0XHRpZiAodHlwZW9mIHRhZz09PSdmdW5jdGlvbicpIHtcblx0XHRcdGlmICh0YWdbQ09NUE9ORU5UX1dSQVBQRVJfS0VZXT09PXRydWUgfHwgKHRhZy5wcm90b3R5cGUgJiYgJ2lzUmVhY3RDb21wb25lbnQnIGluIHRhZy5wcm90b3R5cGUpKSB7XG5cdFx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbiAmJiBTdHJpbmcodm5vZGUuY2hpbGRyZW4pPT09JycpIHsgdm5vZGUuY2hpbGRyZW4gPSB1bmRlZmluZWQ7IH1cblx0XHRcdFx0aWYgKHZub2RlLmNoaWxkcmVuKSB7IGF0dHJzLmNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47IH1cblxuXHRcdFx0XHRpZiAoIXZub2RlLnByZWFjdENvbXBhdE5vcm1hbGl6ZWQpIHtcblx0XHRcdFx0XHRub3JtYWxpemVWTm9kZSh2bm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aGFuZGxlQ29tcG9uZW50Vk5vZGUodm5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbiAmJiBTdHJpbmcodm5vZGUuY2hpbGRyZW4pPT09JycpIHsgdm5vZGUuY2hpbGRyZW4gPSB1bmRlZmluZWQ7IH1cblx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbikgeyBhdHRycy5jaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuOyB9XG5cblx0XHRcdGlmIChhdHRycy5kZWZhdWx0VmFsdWUpIHtcblx0XHRcdFx0aWYgKCFhdHRycy52YWx1ZSAmJiBhdHRycy52YWx1ZSE9PTApIHtcblx0XHRcdFx0XHRhdHRycy52YWx1ZSA9IGF0dHJzLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWxldGUgYXR0cnMuZGVmYXVsdFZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRoYW5kbGVFbGVtZW50Vk5vZGUodm5vZGUsIGF0dHJzKTtcblx0XHR9XG5cdH1cblxuXHRpZiAob2xkVm5vZGVIb29rKSB7IG9sZFZub2RlSG9vayh2bm9kZSk7IH1cbn07XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbXBvbmVudFZOb2RlKHZub2RlKSB7XG5cdHZhciB0YWcgPSB2bm9kZS5ub2RlTmFtZSxcblx0XHRhID0gdm5vZGUuYXR0cmlidXRlcztcblxuXHR2bm9kZS5hdHRyaWJ1dGVzID0ge307XG5cdGlmICh0YWcuZGVmYXVsdFByb3BzKSB7IGV4dGVuZCh2bm9kZS5hdHRyaWJ1dGVzLCB0YWcuZGVmYXVsdFByb3BzKTsgfVxuXHRpZiAoYSkgeyBleHRlbmQodm5vZGUuYXR0cmlidXRlcywgYSk7IH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRWxlbWVudFZOb2RlKHZub2RlLCBhKSB7XG5cdHZhciBzaG91bGRTYW5pdGl6ZSwgYXR0cnMsIGk7XG5cdGlmIChhKSB7XG5cdFx0Zm9yIChpIGluIGEpIHsgaWYgKChzaG91bGRTYW5pdGl6ZSA9IENBTUVMX1BST1BTLnRlc3QoaSkpKSB7IGJyZWFrOyB9IH1cblx0XHRpZiAoc2hvdWxkU2FuaXRpemUpIHtcblx0XHRcdGF0dHJzID0gdm5vZGUuYXR0cmlidXRlcyA9IHt9O1xuXHRcdFx0Zm9yIChpIGluIGEpIHtcblx0XHRcdFx0aWYgKGEuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRhdHRyc1sgQ0FNRUxfUFJPUFMudGVzdChpKSA/IGkucmVwbGFjZSgvKFtBLVowLTldKS8sICctJDEnKS50b0xvd2VyQ2FzZSgpIDogaSBdID0gYVtpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5cblxuLy8gcHJveHkgcmVuZGVyKCkgc2luY2UgUmVhY3QgcmV0dXJucyBhIENvbXBvbmVudCByZWZlcmVuY2UuXG5mdW5jdGlvbiByZW5kZXIkMSh2bm9kZSwgcGFyZW50LCBjYWxsYmFjaykge1xuXHR2YXIgcHJldiA9IHBhcmVudCAmJiBwYXJlbnQuX3ByZWFjdENvbXBhdFJlbmRlcmVkICYmIHBhcmVudC5fcHJlYWN0Q29tcGF0UmVuZGVyZWQuYmFzZTtcblxuXHQvLyBpZ25vcmUgaW1wb3NzaWJsZSBwcmV2aW91cyByZW5kZXJzXG5cdGlmIChwcmV2ICYmIHByZXYucGFyZW50Tm9kZSE9PXBhcmVudCkgeyBwcmV2ID0gbnVsbDsgfVxuXG5cdC8vIGRlZmF1bHQgdG8gZmlyc3QgRWxlbWVudCBjaGlsZFxuXHRpZiAoIXByZXYgJiYgcGFyZW50KSB7IHByZXYgPSBwYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7IH1cblxuXHQvLyByZW1vdmUgdW5hZmZlY3RlZCBzaWJsaW5nc1xuXHRmb3IgKHZhciBpPXBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaS0tOyApIHtcblx0XHRpZiAocGFyZW50LmNoaWxkTm9kZXNbaV0hPT1wcmV2KSB7XG5cdFx0XHRwYXJlbnQucmVtb3ZlQ2hpbGQocGFyZW50LmNoaWxkTm9kZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdHZhciBvdXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3ByZWFjdF9fW1wiZVwiIC8qIHJlbmRlciAqL10pKHZub2RlLCBwYXJlbnQsIHByZXYpO1xuXHRpZiAocGFyZW50KSB7IHBhcmVudC5fcHJlYWN0Q29tcGF0UmVuZGVyZWQgPSBvdXQgJiYgKG91dC5fY29tcG9uZW50IHx8IHsgYmFzZTogb3V0IH0pOyB9XG5cdGlmICh0eXBlb2YgY2FsbGJhY2s9PT0nZnVuY3Rpb24nKSB7IGNhbGxiYWNrKCk7IH1cblx0cmV0dXJuIG91dCAmJiBvdXQuX2NvbXBvbmVudCB8fCBvdXQ7XG59XG5cblxudmFyIENvbnRleHRQcm92aWRlciA9IGZ1bmN0aW9uICgpIHt9O1xuXG5Db250ZXh0UHJvdmlkZXIucHJvdG90eXBlLmdldENoaWxkQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIHRoaXMucHJvcHMuY29udGV4dDtcbn07XG5Db250ZXh0UHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChwcm9wcykge1xuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW5bMF07XG59O1xuXG5mdW5jdGlvbiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIHZub2RlLCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG5cdHZhciB3cmFwID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcmVhY3RfX1tcImNcIiAvKiBoICovXSkoQ29udGV4dFByb3ZpZGVyLCB7IGNvbnRleHQ6IHBhcmVudENvbXBvbmVudC5jb250ZXh0IH0sIHZub2RlKTtcblx0dmFyIHJlbmRlckNvbnRhaW5lciA9IHJlbmRlciQxKHdyYXAsIGNvbnRhaW5lcik7XG5cdHZhciBjb21wb25lbnQgPSByZW5kZXJDb250YWluZXIuX2NvbXBvbmVudCB8fCByZW5kZXJDb250YWluZXIuYmFzZTtcblx0aWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrLmNhbGwoY29tcG9uZW50LCByZW5kZXJDb250YWluZXIpOyB9XG5cdHJldHVybiBjb21wb25lbnQ7XG59XG5cblxuZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpIHtcblx0dmFyIGV4aXN0aW5nID0gY29udGFpbmVyLl9wcmVhY3RDb21wYXRSZW5kZXJlZCAmJiBjb250YWluZXIuX3ByZWFjdENvbXBhdFJlbmRlcmVkLmJhc2U7XG5cdGlmIChleGlzdGluZyAmJiBleGlzdGluZy5wYXJlbnROb2RlPT09Y29udGFpbmVyKSB7XG5cdFx0T2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcmVhY3RfX1tcImVcIiAvKiByZW5kZXIgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3ByZWFjdF9fW1wiY1wiIC8qIGggKi9dKShFbXB0eUNvbXBvbmVudCksIGNvbnRhaW5lciwgZXhpc3RpbmcpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuXG5cbnZhciBBUlIgPSBbXTtcblxuLy8gVGhpcyBBUEkgaXMgY29tcGxldGVseSB1bm5lY2Vzc2FyeSBmb3IgUHJlYWN0LCBzbyBpdCdzIGJhc2ljYWxseSBwYXNzdGhyb3VnaC5cbnZhciBDaGlsZHJlbiA9IHtcblx0bWFwOiBmdW5jdGlvbihjaGlsZHJlbiwgZm4sIGN0eCkge1xuXHRcdGlmIChjaGlsZHJlbiA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cdFx0Y2hpbGRyZW4gPSBDaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKTtcblx0XHRpZiAoY3R4ICYmIGN0eCE9PWNoaWxkcmVuKSB7IGZuID0gZm4uYmluZChjdHgpOyB9XG5cdFx0cmV0dXJuIGNoaWxkcmVuLm1hcChmbik7XG5cdH0sXG5cdGZvckVhY2g6IGZ1bmN0aW9uKGNoaWxkcmVuLCBmbiwgY3R4KSB7XG5cdFx0aWYgKGNoaWxkcmVuID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cblx0XHRjaGlsZHJlbiA9IENoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xuXHRcdGlmIChjdHggJiYgY3R4IT09Y2hpbGRyZW4pIHsgZm4gPSBmbi5iaW5kKGN0eCk7IH1cblx0XHRjaGlsZHJlbi5mb3JFYWNoKGZuKTtcblx0fSxcblx0Y291bnQ6IGZ1bmN0aW9uKGNoaWxkcmVuKSB7XG5cdFx0cmV0dXJuIGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCB8fCAwO1xuXHR9LFxuXHRvbmx5OiBmdW5jdGlvbihjaGlsZHJlbikge1xuXHRcdGNoaWxkcmVuID0gQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbik7XG5cdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCE9PTEpIHsgdGhyb3cgbmV3IEVycm9yKCdDaGlsZHJlbi5vbmx5KCkgZXhwZWN0cyBvbmx5IG9uZSBjaGlsZC4nKTsgfVxuXHRcdHJldHVybiBjaGlsZHJlblswXTtcblx0fSxcblx0dG9BcnJheTogZnVuY3Rpb24oY2hpbGRyZW4pIHtcblx0XHRpZiAoY2hpbGRyZW4gPT0gbnVsbCkgeyByZXR1cm4gW107IH1cblx0XHRyZXR1cm4gQVJSLmNvbmNhdChjaGlsZHJlbik7XG5cdH1cbn07XG5cblxuLyoqIFRyYWNrIGN1cnJlbnQgcmVuZGVyKCkgY29tcG9uZW50IGZvciByZWYgYXNzaWdubWVudCAqL1xudmFyIGN1cnJlbnRDb21wb25lbnQ7XG5cblxuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSh0eXBlKSB7XG5cdHJldHVybiBjcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7XG59XG5cblxudmFyIERPTSA9IHt9O1xuZm9yICh2YXIgaT1FTEVNRU5UUy5sZW5ndGg7IGktLTsgKSB7XG5cdERPTVtFTEVNRU5UU1tpXV0gPSBjcmVhdGVGYWN0b3J5KEVMRU1FTlRTW2ldKTtcbn1cblxuZnVuY3Rpb24gdXBncmFkZVRvVk5vZGVzKGFyciwgb2Zmc2V0KSB7XG5cdGZvciAodmFyIGk9b2Zmc2V0IHx8IDA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIG9iaiA9IGFycltpXTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG5cdFx0XHR1cGdyYWRlVG9WTm9kZXMob2JqKTtcblx0XHR9XG5cdFx0ZWxzZSBpZiAob2JqICYmIHR5cGVvZiBvYmo9PT0nb2JqZWN0JyAmJiAhaXNWYWxpZEVsZW1lbnQob2JqKSAmJiAoKG9iai5wcm9wcyAmJiBvYmoudHlwZSkgfHwgKG9iai5hdHRyaWJ1dGVzICYmIG9iai5ub2RlTmFtZSkgfHwgb2JqLmNoaWxkcmVuKSkge1xuXHRcdFx0YXJyW2ldID0gY3JlYXRlRWxlbWVudChvYmoudHlwZSB8fCBvYmoubm9kZU5hbWUsIG9iai5wcm9wcyB8fCBvYmouYXR0cmlidXRlcywgb2JqLmNoaWxkcmVuKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaXNTdGF0ZWxlc3NDb21wb25lbnQoYykge1xuXHRyZXR1cm4gdHlwZW9mIGM9PT0nZnVuY3Rpb24nICYmICEoYy5wcm90b3R5cGUgJiYgYy5wcm90b3R5cGUucmVuZGVyKTtcbn1cblxuXG4vLyB3cmFwcyBzdGF0ZWxlc3MgZnVuY3Rpb25hbCBjb21wb25lbnRzIGluIGEgUHJvcFR5cGVzIHZhbGlkYXRvclxuZnVuY3Rpb24gd3JhcFN0YXRlbGVzc0NvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KSB7XG5cdHJldHVybiBjcmVhdGVDbGFzcyh7XG5cdFx0ZGlzcGxheU5hbWU6IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lLFxuXHRcdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gV3JhcHBlZENvbXBvbmVudCh0aGlzLnByb3BzLCB0aGlzLmNvbnRleHQpO1xuXHRcdH1cblx0fSk7XG59XG5cblxuZnVuY3Rpb24gc3RhdGVsZXNzQ29tcG9uZW50SG9vayhDdG9yKSB7XG5cdHZhciBXcmFwcGVkID0gQ3RvcltDT01QT05FTlRfV1JBUFBFUl9LRVldO1xuXHRpZiAoV3JhcHBlZCkgeyByZXR1cm4gV3JhcHBlZD09PXRydWUgPyBDdG9yIDogV3JhcHBlZDsgfVxuXG5cdFdyYXBwZWQgPSB3cmFwU3RhdGVsZXNzQ29tcG9uZW50KEN0b3IpO1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcmFwcGVkLCBDT01QT05FTlRfV1JBUFBFUl9LRVksIHsgY29uZmlndXJhYmxlOnRydWUsIHZhbHVlOnRydWUgfSk7XG5cdFdyYXBwZWQuZGlzcGxheU5hbWUgPSBDdG9yLmRpc3BsYXlOYW1lO1xuXHRXcmFwcGVkLnByb3BUeXBlcyA9IEN0b3IucHJvcFR5cGVzO1xuXHRXcmFwcGVkLmRlZmF1bHRQcm9wcyA9IEN0b3IuZGVmYXVsdFByb3BzO1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdG9yLCBDT01QT05FTlRfV1JBUFBFUl9LRVksIHsgY29uZmlndXJhYmxlOnRydWUsIHZhbHVlOldyYXBwZWQgfSk7XG5cblx0cmV0dXJuIFdyYXBwZWQ7XG59XG5cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0dmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblx0d2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuXHR1cGdyYWRlVG9WTm9kZXMoYXJncywgMik7XG5cdHJldHVybiBub3JtYWxpemVWTm9kZShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJlYWN0X19bXCJjXCIgLyogaCAqL10uYXBwbHkodm9pZCAwLCBhcmdzKSk7XG59XG5cblxuZnVuY3Rpb24gbm9ybWFsaXplVk5vZGUodm5vZGUpIHtcblx0dm5vZGUucHJlYWN0Q29tcGF0Tm9ybWFsaXplZCA9IHRydWU7XG5cblx0YXBwbHlDbGFzc05hbWUodm5vZGUpO1xuXG5cdGlmIChpc1N0YXRlbGVzc0NvbXBvbmVudCh2bm9kZS5ub2RlTmFtZSkpIHtcblx0XHR2bm9kZS5ub2RlTmFtZSA9IHN0YXRlbGVzc0NvbXBvbmVudEhvb2sodm5vZGUubm9kZU5hbWUpO1xuXHR9XG5cblx0dmFyIHJlZiA9IHZub2RlLmF0dHJpYnV0ZXMucmVmLFxuXHRcdHR5cGUgPSByZWYgJiYgdHlwZW9mIHJlZjtcblx0aWYgKGN1cnJlbnRDb21wb25lbnQgJiYgKHR5cGU9PT0nc3RyaW5nJyB8fCB0eXBlPT09J251bWJlcicpKSB7XG5cdFx0dm5vZGUuYXR0cmlidXRlcy5yZWYgPSBjcmVhdGVTdHJpbmdSZWZQcm94eShyZWYsIGN1cnJlbnRDb21wb25lbnQpO1xuXHR9XG5cblx0YXBwbHlFdmVudE5vcm1hbGl6YXRpb24odm5vZGUpO1xuXG5cdHJldHVybiB2bm9kZTtcbn1cblxuXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQkMShlbGVtZW50LCBwcm9wcykge1xuXHR2YXIgY2hpbGRyZW4gPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG5cdHdoaWxlICggbGVuLS0gPiAwICkgY2hpbGRyZW5bIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAyIF07XG5cblx0aWYgKCFpc1ZhbGlkRWxlbWVudChlbGVtZW50KSkgeyByZXR1cm4gZWxlbWVudDsgfVxuXHR2YXIgZWxlbWVudFByb3BzID0gZWxlbWVudC5hdHRyaWJ1dGVzIHx8IGVsZW1lbnQucHJvcHM7XG5cdHZhciBub2RlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcmVhY3RfX1tcImNcIiAvKiBoICovXSkoXG5cdFx0ZWxlbWVudC5ub2RlTmFtZSB8fCBlbGVtZW50LnR5cGUsXG5cdFx0ZXh0ZW5kKHt9LCBlbGVtZW50UHJvcHMpLFxuXHRcdGVsZW1lbnQuY2hpbGRyZW4gfHwgZWxlbWVudFByb3BzICYmIGVsZW1lbnRQcm9wcy5jaGlsZHJlblxuXHQpO1xuXHQvLyBPbmx5IHByb3ZpZGUgdGhlIDNyZCBhcmd1bWVudCBpZiBuZWVkZWQuXG5cdC8vIEFyZ3VtZW50cyAzKyBvdmVyd3JpdGUgZWxlbWVudC5jaGlsZHJlbiBpbiBwcmVhY3RDbG9uZUVsZW1lbnRcblx0dmFyIGNsb25lQXJncyA9IFtub2RlLCBwcm9wc107XG5cdGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRjbG9uZUFyZ3MucHVzaChjaGlsZHJlbik7XG5cdH1cblx0ZWxzZSBpZiAocHJvcHMgJiYgcHJvcHMuY2hpbGRyZW4pIHtcblx0XHRjbG9uZUFyZ3MucHVzaChwcm9wcy5jaGlsZHJlbik7XG5cdH1cblx0cmV0dXJuIG5vcm1hbGl6ZVZOb2RlKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcmVhY3RfX1tcImJcIiAvKiBjbG9uZUVsZW1lbnQgKi9dLmFwcGx5KHZvaWQgMCwgY2xvbmVBcmdzKSk7XG59XG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkge1xuXHRyZXR1cm4gZWxlbWVudCAmJiAoKGVsZW1lbnQgaW5zdGFuY2VvZiBWTm9kZSkgfHwgZWxlbWVudC4kJHR5cGVvZj09PVJFQUNUX0VMRU1FTlRfVFlQRSk7XG59XG5cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nUmVmUHJveHkobmFtZSwgY29tcG9uZW50KSB7XG5cdHJldHVybiBjb21wb25lbnQuX3JlZlByb3hpZXNbbmFtZV0gfHwgKGNvbXBvbmVudC5fcmVmUHJveGllc1tuYW1lXSA9IGZ1bmN0aW9uIChyZXNvbHZlZCkge1xuXHRcdGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LnJlZnMpIHtcblx0XHRcdGNvbXBvbmVudC5yZWZzW25hbWVdID0gcmVzb2x2ZWQ7XG5cdFx0XHRpZiAocmVzb2x2ZWQ9PT1udWxsKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb21wb25lbnQuX3JlZlByb3hpZXNbbmFtZV07XG5cdFx0XHRcdGNvbXBvbmVudCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuXG5mdW5jdGlvbiBhcHBseUV2ZW50Tm9ybWFsaXphdGlvbihyZWYpIHtcblx0dmFyIG5vZGVOYW1lID0gcmVmLm5vZGVOYW1lO1xuXHR2YXIgYXR0cmlidXRlcyA9IHJlZi5hdHRyaWJ1dGVzO1xuXG5cdGlmICghYXR0cmlidXRlcyB8fCB0eXBlb2Ygbm9kZU5hbWUhPT0nc3RyaW5nJykgeyByZXR1cm47IH1cblx0dmFyIHByb3BzID0ge307XG5cdGZvciAodmFyIGkgaW4gYXR0cmlidXRlcykge1xuXHRcdHByb3BzW2kudG9Mb3dlckNhc2UoKV0gPSBpO1xuXHR9XG5cdGlmIChwcm9wcy5vbmRvdWJsZWNsaWNrKSB7XG5cdFx0YXR0cmlidXRlcy5vbmRibGNsaWNrID0gYXR0cmlidXRlc1twcm9wcy5vbmRvdWJsZWNsaWNrXTtcblx0XHRkZWxldGUgYXR0cmlidXRlc1twcm9wcy5vbmRvdWJsZWNsaWNrXTtcblx0fVxuXHQvLyBmb3IgKnRleHR1YWwgaW5wdXRzKiAoaW5jbCB0ZXh0YXJlYSksIG5vcm1hbGl6ZSBgb25DaGFuZ2VgIC0+IGBvbklucHV0YDpcblx0aWYgKHByb3BzLm9uY2hhbmdlICYmIChub2RlTmFtZT09PSd0ZXh0YXJlYScgfHwgKG5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0naW5wdXQnICYmICEvXmZpbHxjaGV8cmFkL2kudGVzdChhdHRyaWJ1dGVzLnR5cGUpKSkpIHtcblx0XHR2YXIgbm9ybWFsaXplZCA9IHByb3BzLm9uaW5wdXQgfHwgJ29uaW5wdXQnO1xuXHRcdGlmICghYXR0cmlidXRlc1tub3JtYWxpemVkXSkge1xuXHRcdFx0YXR0cmlidXRlc1tub3JtYWxpemVkXSA9IG11bHRpaG9vayhbYXR0cmlidXRlc1tub3JtYWxpemVkXSwgYXR0cmlidXRlc1twcm9wcy5vbmNoYW5nZV1dKTtcblx0XHRcdGRlbGV0ZSBhdHRyaWJ1dGVzW3Byb3BzLm9uY2hhbmdlXTtcblx0XHR9XG5cdH1cbn1cblxuXG5mdW5jdGlvbiBhcHBseUNsYXNzTmFtZSh2bm9kZSkge1xuXHR2YXIgYSA9IHZub2RlLmF0dHJpYnV0ZXMgfHwgKHZub2RlLmF0dHJpYnV0ZXMgPSB7fSk7XG5cdGNsYXNzTmFtZURlc2NyaXB0b3IuZW51bWVyYWJsZSA9ICdjbGFzc05hbWUnIGluIGE7XG5cdGlmIChhLmNsYXNzTmFtZSkgeyBhLmNsYXNzID0gYS5jbGFzc05hbWU7IH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsICdjbGFzc05hbWUnLCBjbGFzc05hbWVEZXNjcmlwdG9yKTtcbn1cblxuXG52YXIgY2xhc3NOYW1lRGVzY3JpcHRvciA9IHtcblx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5jbGFzczsgfSxcblx0c2V0OiBmdW5jdGlvbih2KSB7IHRoaXMuY2xhc3MgPSB2OyB9XG59O1xuXG5mdW5jdGlvbiBleHRlbmQoYmFzZSwgcHJvcHMpIHtcblx0dmFyIGFyZ3VtZW50cyQxID0gYXJndW1lbnRzO1xuXG5cdGZvciAodmFyIGk9MSwgb2JqID0gKHZvaWQgMCk7IGk8YXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKChvYmogPSBhcmd1bWVudHMkMVtpXSkpIHtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmopIHtcblx0XHRcdFx0aWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0YmFzZVtrZXldID0gb2JqW2tleV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGJhc2U7XG59XG5cblxuZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMoYSwgYikge1xuXHRmb3IgKHZhciBpIGluIGEpIHsgaWYgKCEoaSBpbiBiKSkgeyByZXR1cm4gdHJ1ZTsgfSB9XG5cdGZvciAodmFyIGkkMSBpbiBiKSB7IGlmIChhW2kkMV0hPT1iW2kkMV0pIHsgcmV0dXJuIHRydWU7IH0gfVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cblxuZnVuY3Rpb24gZmluZERPTU5vZGUoY29tcG9uZW50KSB7XG5cdHJldHVybiBjb21wb25lbnQgJiYgY29tcG9uZW50LmJhc2UgfHwgY29tcG9uZW50O1xufVxuXG5cbmZ1bmN0aW9uIEYoKXt9XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsYXNzKG9iaikge1xuXHRmdW5jdGlvbiBjbChwcm9wcywgY29udGV4dCkge1xuXHRcdGJpbmRBbGwodGhpcyk7XG5cdFx0Q29tcG9uZW50JDEuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCwgQllQQVNTX0hPT0spO1xuXHRcdG5ld0NvbXBvbmVudEhvb2suY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCk7XG5cdH1cblxuXHRvYmogPSBleHRlbmQoeyBjb25zdHJ1Y3RvcjogY2wgfSwgb2JqKTtcblxuXHQvLyBXZSBuZWVkIHRvIGFwcGx5IG1peGlucyBoZXJlIHNvIHRoYXQgZ2V0RGVmYXVsdFByb3BzIGlzIGNvcnJlY3RseSBtaXhlZFxuXHRpZiAob2JqLm1peGlucykge1xuXHRcdGFwcGx5TWl4aW5zKG9iaiwgY29sbGF0ZU1peGlucyhvYmoubWl4aW5zKSk7XG5cdH1cblx0aWYgKG9iai5zdGF0aWNzKSB7XG5cdFx0ZXh0ZW5kKGNsLCBvYmouc3RhdGljcyk7XG5cdH1cblx0aWYgKG9iai5wcm9wVHlwZXMpIHtcblx0XHRjbC5wcm9wVHlwZXMgPSBvYmoucHJvcFR5cGVzO1xuXHR9XG5cdGlmIChvYmouZGVmYXVsdFByb3BzKSB7XG5cdFx0Y2wuZGVmYXVsdFByb3BzID0gb2JqLmRlZmF1bHRQcm9wcztcblx0fVxuXHRpZiAob2JqLmdldERlZmF1bHRQcm9wcykge1xuXHRcdGNsLmRlZmF1bHRQcm9wcyA9IG9iai5nZXREZWZhdWx0UHJvcHMuY2FsbChjbCk7XG5cdH1cblxuXHRGLnByb3RvdHlwZSA9IENvbXBvbmVudCQxLnByb3RvdHlwZTtcblx0Y2wucHJvdG90eXBlID0gZXh0ZW5kKG5ldyBGKCksIG9iaik7XG5cblx0Y2wuZGlzcGxheU5hbWUgPSBvYmouZGlzcGxheU5hbWUgfHwgJ0NvbXBvbmVudCc7XG5cblx0cmV0dXJuIGNsO1xufVxuXG5cbi8vIEZsYXR0ZW4gYW4gQXJyYXkgb2YgbWl4aW5zIHRvIGEgbWFwIG9mIG1ldGhvZCBuYW1lIHRvIG1peGluIGltcGxlbWVudGF0aW9uc1xuZnVuY3Rpb24gY29sbGF0ZU1peGlucyhtaXhpbnMpIHtcblx0dmFyIGtleWVkID0ge307XG5cdGZvciAodmFyIGk9MDsgaTxtaXhpbnMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgbWl4aW4gPSBtaXhpbnNbaV07XG5cdFx0Zm9yICh2YXIga2V5IGluIG1peGluKSB7XG5cdFx0XHRpZiAobWl4aW4uaGFzT3duUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgbWl4aW5ba2V5XT09PSdmdW5jdGlvbicpIHtcblx0XHRcdFx0KGtleWVkW2tleV0gfHwgKGtleWVkW2tleV09W10pKS5wdXNoKG1peGluW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4ga2V5ZWQ7XG59XG5cblxuLy8gYXBwbHkgYSBtYXBwaW5nIG9mIEFycmF5cyBvZiBtaXhpbiBtZXRob2RzIHRvIGEgY29tcG9uZW50IHByb3RvdHlwZVxuZnVuY3Rpb24gYXBwbHlNaXhpbnMocHJvdG8sIG1peGlucykge1xuXHRmb3IgKHZhciBrZXkgaW4gbWl4aW5zKSB7IGlmIChtaXhpbnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdHByb3RvW2tleV0gPSBtdWx0aWhvb2soXG5cdFx0XHRtaXhpbnNba2V5XS5jb25jYXQocHJvdG9ba2V5XSB8fCBBUlIpLFxuXHRcdFx0a2V5PT09J2dldERlZmF1bHRQcm9wcycgfHwga2V5PT09J2dldEluaXRpYWxTdGF0ZScgfHwga2V5PT09J2dldENoaWxkQ29udGV4dCdcblx0XHQpO1xuXHR9IH1cbn1cblxuXG5mdW5jdGlvbiBiaW5kQWxsKGN0eCkge1xuXHRmb3IgKHZhciBpIGluIGN0eCkge1xuXHRcdHZhciB2ID0gY3R4W2ldO1xuXHRcdGlmICh0eXBlb2Ygdj09PSdmdW5jdGlvbicgJiYgIXYuX19ib3VuZCAmJiAhQVVUT0JJTkRfQkxBQ0tMSVNULmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHQoY3R4W2ldID0gdi5iaW5kKGN0eCkpLl9fYm91bmQgPSB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5cbmZ1bmN0aW9uIGNhbGxNZXRob2QoY3R4LCBtLCBhcmdzKSB7XG5cdGlmICh0eXBlb2YgbT09PSdzdHJpbmcnKSB7XG5cdFx0bSA9IGN0eC5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbbV07XG5cdH1cblx0aWYgKHR5cGVvZiBtPT09J2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBtLmFwcGx5KGN0eCwgYXJncyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gbXVsdGlob29rKGhvb2tzLCBza2lwRHVwbGljYXRlcykge1xuXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGFyZ3VtZW50cyQxID0gYXJndW1lbnRzO1xuXHRcdHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cdFx0dmFyIHJldDtcblx0XHRmb3IgKHZhciBpPTA7IGk8aG9va3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciByID0gY2FsbE1ldGhvZCh0aGlzJDEsIGhvb2tzW2ldLCBhcmd1bWVudHMkMSk7XG5cblx0XHRcdGlmIChza2lwRHVwbGljYXRlcyAmJiByIT1udWxsKSB7XG5cdFx0XHRcdGlmICghcmV0KSB7IHJldCA9IHt9OyB9XG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiByKSB7IGlmIChyLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRyZXRba2V5XSA9IHJba2V5XTtcblx0XHRcdFx0fSB9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICh0eXBlb2YgciE9PSd1bmRlZmluZWQnKSB7IHJldCA9IHI7IH1cblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn1cblxuXG5mdW5jdGlvbiBuZXdDb21wb25lbnRIb29rKHByb3BzLCBjb250ZXh0KSB7XG5cdHByb3BzSG9vay5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KTtcblx0dGhpcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gbXVsdGlob29rKFtwcm9wc0hvb2ssIHRoaXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB8fCAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyddKTtcblx0dGhpcy5yZW5kZXIgPSBtdWx0aWhvb2soW3Byb3BzSG9vaywgYmVmb3JlUmVuZGVyLCB0aGlzLnJlbmRlciB8fCAncmVuZGVyJywgYWZ0ZXJSZW5kZXJdKTtcbn1cblxuXG5mdW5jdGlvbiBwcm9wc0hvb2socHJvcHMsIGNvbnRleHQpIHtcblx0aWYgKCFwcm9wcykgeyByZXR1cm47IH1cblxuXHQvLyBSZWFjdCBhbm5veWluZ2x5IHNwZWNpYWwtY2FzZXMgc2luZ2xlIGNoaWxkcmVuLCBhbmQgc29tZSByZWFjdCBjb21wb25lbnRzIGFyZSByaWRpY3Vsb3VzbHkgc3RyaWN0IGFib3V0IHRoaXMuXG5cdHZhciBjID0gcHJvcHMuY2hpbGRyZW47XG5cdGlmIChjICYmIEFycmF5LmlzQXJyYXkoYykgJiYgYy5sZW5ndGg9PT0xICYmICh0eXBlb2YgY1swXT09PSdzdHJpbmcnIHx8IHR5cGVvZiBjWzBdPT09J2Z1bmN0aW9uJyB8fCBjWzBdIGluc3RhbmNlb2YgVk5vZGUpKSB7XG5cdFx0cHJvcHMuY2hpbGRyZW4gPSBjWzBdO1xuXG5cdFx0Ly8gYnV0IGl0cyB0b3RhbGx5IHN0aWxsIGdvaW5nIHRvIGJlIGFuIEFycmF5LlxuXHRcdGlmIChwcm9wcy5jaGlsZHJlbiAmJiB0eXBlb2YgcHJvcHMuY2hpbGRyZW49PT0nb2JqZWN0Jykge1xuXHRcdFx0cHJvcHMuY2hpbGRyZW4ubGVuZ3RoID0gMTtcblx0XHRcdHByb3BzLmNoaWxkcmVuWzBdID0gcHJvcHMuY2hpbGRyZW47XG5cdFx0fVxuXHR9XG5cblx0Ly8gYWRkIHByb3B0eXBlIGNoZWNraW5nXG5cdGlmIChERVYpIHtcblx0XHR2YXIgY3RvciA9IHR5cGVvZiB0aGlzPT09J2Z1bmN0aW9uJyA/IHRoaXMgOiB0aGlzLmNvbnN0cnVjdG9yLFxuXHRcdFx0cHJvcFR5cGVzID0gdGhpcy5wcm9wVHlwZXMgfHwgY3Rvci5wcm9wVHlwZXM7XG5cdFx0dmFyIGRpc3BsYXlOYW1lID0gdGhpcy5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWU7XG5cblx0XHRpZiAocHJvcFR5cGVzKSB7XG5cdFx0XHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5jaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIHByb3BzLCAncHJvcCcsIGRpc3BsYXlOYW1lKTtcblx0XHR9XG5cdH1cbn1cblxuXG5mdW5jdGlvbiBiZWZvcmVSZW5kZXIocHJvcHMpIHtcblx0Y3VycmVudENvbXBvbmVudCA9IHRoaXM7XG59XG5cbmZ1bmN0aW9uIGFmdGVyUmVuZGVyKCkge1xuXHRpZiAoY3VycmVudENvbXBvbmVudD09PXRoaXMpIHtcblx0XHRjdXJyZW50Q29tcG9uZW50ID0gbnVsbDtcblx0fVxufVxuXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50JDEocHJvcHMsIGNvbnRleHQsIG9wdHMpIHtcblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3ByZWFjdF9fW1wiYVwiIC8qIENvbXBvbmVudCAqL10uY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCk7XG5cdHRoaXMuc3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSA/IHRoaXMuZ2V0SW5pdGlhbFN0YXRlKCkgOiB7fTtcblx0dGhpcy5yZWZzID0ge307XG5cdHRoaXMuX3JlZlByb3hpZXMgPSB7fTtcblx0aWYgKG9wdHMhPT1CWVBBU1NfSE9PSykge1xuXHRcdG5ld0NvbXBvbmVudEhvb2suY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCk7XG5cdH1cbn1cbmV4dGVuZChDb21wb25lbnQkMS5wcm90b3R5cGUgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3ByZWFjdF9fW1wiYVwiIC8qIENvbXBvbmVudCAqL10oKSwge1xuXHRjb25zdHJ1Y3RvcjogQ29tcG9uZW50JDEsXG5cblx0aXNSZWFjdENvbXBvbmVudDoge30sXG5cblx0cmVwbGFjZVN0YXRlOiBmdW5jdGlvbihzdGF0ZSwgY2FsbGJhY2spIHtcblx0XHR2YXIgdGhpcyQxID0gdGhpcztcblxuXHRcdHRoaXMuc2V0U3RhdGUoc3RhdGUsIGNhbGxiYWNrKTtcblx0XHRmb3IgKHZhciBpIGluIHRoaXMkMS5zdGF0ZSkge1xuXHRcdFx0aWYgKCEoaSBpbiBzdGF0ZSkpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMkMS5zdGF0ZVtpXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Z2V0RE9NTm9kZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuYmFzZTtcblx0fSxcblxuXHRpc01vdW50ZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiAhIXRoaXMuYmFzZTtcblx0fVxufSk7XG5cblxuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0KSB7XG5cdENvbXBvbmVudCQxLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpO1xufVxuRi5wcm90b3R5cGUgPSBDb21wb25lbnQkMS5wcm90b3R5cGU7XG5QdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBGKCk7XG5QdXJlQ29tcG9uZW50LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5QdXJlQ29tcG9uZW50LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmdW5jdGlvbihwcm9wcywgc3RhdGUpIHtcblx0cmV0dXJuIHNoYWxsb3dEaWZmZXJzKHRoaXMucHJvcHMsIHByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBzdGF0ZSk7XG59O1xuXG52YXIgaW5kZXggPSB7XG5cdHZlcnNpb246IHZlcnNpb24sXG5cdERPTTogRE9NLFxuXHRQcm9wVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLFxuXHRDaGlsZHJlbjogQ2hpbGRyZW4sXG5cdHJlbmRlcjogcmVuZGVyJDEsXG5cdGNyZWF0ZUNsYXNzOiBjcmVhdGVDbGFzcyxcblx0Y3JlYXRlRmFjdG9yeTogY3JlYXRlRmFjdG9yeSxcblx0Y3JlYXRlRWxlbWVudDogY3JlYXRlRWxlbWVudCxcblx0Y2xvbmVFbGVtZW50OiBjbG9uZUVsZW1lbnQkMSxcblx0aXNWYWxpZEVsZW1lbnQ6IGlzVmFsaWRFbGVtZW50LFxuXHRmaW5kRE9NTm9kZTogZmluZERPTU5vZGUsXG5cdHVubW91bnRDb21wb25lbnRBdE5vZGU6IHVubW91bnRDb21wb25lbnRBdE5vZGUsXG5cdENvbXBvbmVudDogQ29tcG9uZW50JDEsXG5cdFB1cmVDb21wb25lbnQ6IFB1cmVDb21wb25lbnQsXG5cdHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcixcblx0X19zcHJlYWQ6IGV4dGVuZFxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChpbmRleCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVhY3QtY29tcGF0LmVzLmpzLm1hcFxuXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygyOCkpKVxuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNS4zJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG4vKioqLyB9KSxcbi8qIDIzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDI1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgY29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIElPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGFzYyA9IF9fd2VicGFja19yZXF1aXJlX18oOTUpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG4vKioqLyB9KSxcbi8qIDI5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubm9vcCA9IGV4cG9ydHMuYXBwbHlJT1NGb290ZXJIYWNrID0gZXhwb3J0cy5kZWJvdW5jZSA9IGV4cG9ydHMuZml4U2FmYXJpU2Nyb2xsID0gZXhwb3J0cy5pc0lPU0RldmljZSA9IGV4cG9ydHMuaXNTYWZhcmkgPSBleHBvcnRzLmlzTW9iaWxlID0gZXhwb3J0cy5pc1NjcmVlbkJpZyA9IGV4cG9ydHMuaXNFbGVtZW50SW5WaWV3cG9ydCA9IGV4cG9ydHMub25NZXNzYWdlID0gZXhwb3J0cy5lbnN1cmVNZXRhVmlld3BvcnQgPSBleHBvcnRzLnJlcGxhY2VFeGlzdGluZ0tleXMgPSBleHBvcnRzLmFwcGVuZFBhcmFtc1RvVXJsID0gZXhwb3J0cy5ET01BSU4gPSB1bmRlZmluZWQ7XG5cbnZhciBfY3VzdG9tRXZlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0OSk7XG5cbnZhciBfY3VzdG9tRXZlbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3VzdG9tRXZlbnQpO1xuXG52YXIgX2lzVXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTApO1xuXG52YXIgX2lzVXJsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzVXJsKTtcblxudmFyIF91cmxQYXJzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTA0KTtcblxudmFyIF91cmxQYXJzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91cmxQYXJzZSk7XG5cbnZhciBfaXNvYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Myk7XG5cbnZhciBfaXNvYmplY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXNvYmplY3QpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgRE9NQUlOX1JFR0VYUCA9IC8oXFwudHlwZWZvcm0pXFwuKGNvbXxpbykkLztcbnZhciBET01BSU4gPSBleHBvcnRzLkRPTUFJTiA9ICdhZG1pbi50eXBlZm9ybS5jb20nO1xuXG52YXIgYXBwZW5kUGFyYW1zVG9VcmwgPSBleHBvcnRzLmFwcGVuZFBhcmFtc1RvVXJsID0gZnVuY3Rpb24gYXBwZW5kUGFyYW1zVG9VcmwodXJsLCBwYXJhbXMpIHtcbiAgdmFyIHF1ZXJ5UGFyYW1ldGVycyA9IFtdO1xuXG4gIHZhciBfVXJsUGFyc2UgPSAoMCwgX3VybFBhcnNlMi5kZWZhdWx0KSh1cmwsIHRydWUpLFxuICAgICAgcXVlcnkgPSBfVXJsUGFyc2UucXVlcnksXG4gICAgICBvcmlnaW4gPSBfVXJsUGFyc2Uub3JpZ2luLFxuICAgICAgcGF0aG5hbWUgPSBfVXJsUGFyc2UucGF0aG5hbWU7XG5cbiAgdmFyIHBhdGggPSBwYXRobmFtZS5yZXBsYWNlKC9cXC8kLywgJycpOyAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgdmFyIHBhcmFtZXRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBxdWVyeSwgcGFyYW1zKTtcblxuICBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBxdWVyeVBhcmFtZXRlcnMucHVzaChlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJzW2tleV0pKTtcbiAgfSk7XG5cbiAgcmV0dXJuICcnICsgb3JpZ2luICsgcGF0aCArICc/JyArIHF1ZXJ5UGFyYW1ldGVycy5qb2luKCcmJyk7XG59O1xuXG52YXIgcmVwbGFjZUV4aXN0aW5nS2V5cyA9IGV4cG9ydHMucmVwbGFjZUV4aXN0aW5nS2V5cyA9IGZ1bmN0aW9uIHJlcGxhY2VFeGlzdGluZ0tleXMob2JqLCByZXBsYWNlcikge1xuICByZXR1cm4gT2JqZWN0LmtleXMocmVwbGFjZXIpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBvbGRLZXkpIHtcbiAgICB2YXIgbmV3S2V5ID0gcmVwbGFjZXJbb2xkS2V5XTtcbiAgICBpZiAob2JqW29sZEtleV0gIT0gbnVsbCAmJiBvYmpbb2xkS2V5XSAhPT0gZmFsc2UpIHtcbiAgICAgIGFjY1tuZXdLZXldID0gb2JqW29sZEtleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufTtcblxudmFyIGVuc3VyZU1ldGFWaWV3cG9ydCA9IGV4cG9ydHMuZW5zdXJlTWV0YVZpZXdwb3J0ID0gZnVuY3Rpb24gZW5zdXJlTWV0YVZpZXdwb3J0KCkge1xuICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmlld3BvcnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9dmlld3BvcnRdJyk7XG4gIHZhciB2aWV3cG9ydENvbnRlbnQgPSAnd2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9MCc7XG5cbiAgaWYgKHZpZXdwb3J0KSB7XG4gICAgdmlld3BvcnQuc2V0QXR0cmlidXRlKCdjb250ZW50Jywgdmlld3BvcnRDb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbWV0YVRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTtcbiAgICBtZXRhVGFnLmNvbnRlbnQgPSB2aWV3cG9ydENvbnRlbnQ7XG4gICAgbWV0YVRhZy5uYW1lID0gJ3ZpZXdwb3J0JztcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGFUYWcpO1xuICB9XG59O1xuXG52YXIgYWNjZXB0TWVzc2FnZU9yaWdpbiA9IGZ1bmN0aW9uIGFjY2VwdE1lc3NhZ2VPcmlnaW4oZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIGRlYWwgd2l0aCBwb2x5bW9ycGhpc3RpYyBsZWdhY3k6IHNvbWUgZXZlbnRzIGNvbWUgZnJvbSBqUXVlcnksIG90aGVyIFZhbmlsbGEgSlNcbiAgdmFyIHJlID0gbmV3IFJlZ0V4cCgnXig/OmZ8aHQpdHAoPzpzKT86Ly8oW14vXSspJywgJ2ltJyk7XG4gIHZhciBtYXRjaGVzID0gZS5vcmlnaW4ubWF0Y2gocmUpO1xuICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDEpIHtcbiAgICB2YXIgZG9tYWluID0gbWF0Y2hlc1sxXS50b1N0cmluZygpO1xuXG4gICAgLy8gdG8gdGVzdCB0aGlzIGluIGxvY2FsIHlvdSB3aWxsIG5lZWQgdG8gd2hpdGVsaXN0IHlvdXIgbG9jYWwgZG9tYWluXG4gICAgaWYgKCFET01BSU5fUkVHRVhQLnRlc3QoZG9tYWluKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBvbk1lc3NhZ2UgPSBleHBvcnRzLm9uTWVzc2FnZSA9IGZ1bmN0aW9uIG9uTWVzc2FnZShlKSB7XG4gIGUgPSBlLm9yaWdpbmFsRXZlbnQgfHwgZTtcbiAgaWYgKCFhY2NlcHRNZXNzYWdlT3JpZ2luKGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCgwLCBfaXNVcmwyLmRlZmF1bHQpKGUuZGF0YSkpIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGUuZGF0YTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoKDAsIF9pc29iamVjdDIuZGVmYXVsdCkoZS5kYXRhKSAmJiBlLmRhdGEuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSkge1xuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBfY3VzdG9tRXZlbnQyLmRlZmF1bHQoZS5kYXRhLnR5cGUsIHsgZGV0YWlsOiBlLmRhdGEgfSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBfY3VzdG9tRXZlbnQyLmRlZmF1bHQoZS5kYXRhKSk7XG59O1xuXG52YXIgaXNFbGVtZW50SW5WaWV3cG9ydCA9IGV4cG9ydHMuaXNFbGVtZW50SW5WaWV3cG9ydCA9IGZ1bmN0aW9uIGlzRWxlbWVudEluVmlld3BvcnQoZWwpIHtcbiAgdmFyIHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIGRvY1dpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICB2YXIgZG9jSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHZhciBkb2NDZW50ZXJYID0gZG9jV2lkdGggLyAyO1xuICB2YXIgZG9jQ2VudGVyWSA9IGRvY0hlaWdodCAvIDI7XG5cbiAgLy8gQ2hlY2sgdGhhdCB0aGUgZWxlbWVudCBpcyBjb21wbGV0ZWx5IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0Li4uXG4gIHZhciBlbGVtZW50SXNGdWxseVZpc2libGUgPSByZWN0LnRvcCA+PSAwICYmIHJlY3QubGVmdCA+PSAwICYmIHJlY3QuYm90dG9tIDw9IGRvY0hlaWdodCAmJiByZWN0LnJpZ2h0IDw9IGRvY1dpZHRoO1xuXG4gIC8vIC4uLm9yIHRoYXQgaXQncyByaWdodCBhYm92ZSB0aGUgdmVydGljYWwgYW5kIGhvcml6b250YWwgY2VudGVycyBvZiB0aGUgcGFnZS4uLlxuICB2YXIgZWxlbWVudElzQWJvdmVUaGVGb2xkID0gcmVjdC50b3AgPD0gZG9jQ2VudGVyWSAmJiByZWN0LmxlZnQgPD0gZG9jQ2VudGVyWDtcblxuICAvLyAuLi5vciB0aGF0IGl0J3MgYXQgbGVhc3QgdGFraW5nIHVwIHRvIDEvMyBvZiB0aGUgcGFnZSFcbiAgdmFyIGVsZW1lbnRJc1BhcnRpYWxseVZpc2libGUgPSBkb2NIZWlnaHQgLSByZWN0LnRvcCA+PSBkb2NIZWlnaHQgLyAzO1xuXG4gIHJldHVybiBlbGVtZW50SXNGdWxseVZpc2libGUgfHwgZWxlbWVudElzQWJvdmVUaGVGb2xkIHx8IGVsZW1lbnRJc1BhcnRpYWxseVZpc2libGU7XG59O1xuXG52YXIgaXNTY3JlZW5CaWcgPSBleHBvcnRzLmlzU2NyZWVuQmlnID0gZnVuY3Rpb24gaXNTY3JlZW5CaWcoKSB7XG4gIHJldHVybiB3aW5kb3cuc2NyZWVuLndpZHRoID49IDEwMjQgJiYgd2luZG93LnNjcmVlbi5oZWlnaHQgPj0gNzY4O1xufTtcblxudmFyIGlzTW9iaWxlID0gZXhwb3J0cy5pc01vYmlsZSA9IGZ1bmN0aW9uIGlzTW9iaWxlKHVhKSB7XG4gIHJldHVybiAoL21vYmlsZXx0YWJsZXR8YW5kcm9pZC9pLnRlc3QodWEudG9Mb3dlckNhc2UoKSlcbiAgKTtcbn07XG5cbnZhciBpc1NhZmFyaSA9IGV4cG9ydHMuaXNTYWZhcmkgPSBmdW5jdGlvbiBpc1NhZmFyaSh1YSkge1xuICByZXR1cm4gKC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QodWEudG9Mb3dlckNhc2UoKSlcbiAgKTtcbn07XG5cbnZhciBpc0lPU0RldmljZSA9IGV4cG9ydHMuaXNJT1NEZXZpY2UgPSBmdW5jdGlvbiBpc0lPU0RldmljZSh1YSkge1xuICByZXR1cm4gKC9pcChob25lfG9kfGFkKS9pLnRlc3QodWEudG9Mb3dlckNhc2UoKSlcbiAgKTtcbn07XG5cbi8vIFJELTcxMlxudmFyIGZpeFNhZmFyaVNjcm9sbCA9IGV4cG9ydHMuZml4U2FmYXJpU2Nyb2xsID0gZnVuY3Rpb24gZml4U2FmYXJpU2Nyb2xsKGlmcmFtZSkge1xuICBpZiAoaXNNb2JpbGUobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgIWlzU2FmYXJpKG5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9yaWdpbmFsSGVpZ2h0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaWZyYW1lKS5oZWlnaHQ7XG4gICAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBpZnJhbWUub2Zmc2V0SGVpZ2h0ICsgMSArICdweCcpO1xuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBvcmlnaW5hbEhlaWdodCk7XG4gICAgICB9LCAxKTtcbiAgICB9LCAxMDAwKTtcbiAgfSk7XG59O1xuXG52YXIgZGVib3VuY2UgPSBleHBvcnRzLmRlYm91bmNlID0gZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgY29udGV4dCkge1xuICB2YXIgdGltZW91dCA9IHZvaWQgMDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGVib3VuY2VkID0gZnVuY3Rpb24gZGVib3VuY2VkKCkge1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBmdW5jLmNhbGwuYXBwbHkoZnVuYywgW2NvbnRleHRdLmNvbmNhdChhcmdzKSk7XG4gICAgfTtcblxuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dChkZWJvdW5jZWQsIHdhaXQpO1xuICB9O1xufTtcblxuLy8gRml4IFJELTczMSwgZm9vdGVyIG5vdCBmdWxseSB2aXNpYmxlIG9uIGlPUyBkZXZpY2VzXG52YXIgYXBwbHlJT1NGb290ZXJIYWNrID0gZXhwb3J0cy5hcHBseUlPU0Zvb3RlckhhY2sgPSBmdW5jdGlvbiBhcHBseUlPU0Zvb3RlckhhY2soZWxlbWVudCkge1xuICBpZiAoIWlzSU9TRGV2aWNlKG5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3Njcm9sbGluZycsICdubycpO1xuICBlbGVtZW50LnN0eWxlLmhlaWdodCA9ICcxcHgnO1xuICBlbGVtZW50LnN0eWxlLm1pbkhlaWdodCA9ICcxMDAlJztcbn07XG5cbnZhciBub29wID0gZXhwb3J0cy5ub29wID0gZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcblxuLyoqKi8gfSksXG4vKiAzMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuaWYgKF9fd2VicGFja19yZXF1aXJlX18oNikpIHtcbiAgdmFyIExJQlJBUlkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcbiAgdmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4gIHZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4gIHZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbiAgdmFyICR0eXBlZCA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xuICB2YXIgJGJ1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTAxKTtcbiAgdmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xuICB2YXIgYW5JbnN0YW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xuICB2YXIgcHJvcGVydHlEZXNjID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XG4gIHZhciBoaWRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG4gIHZhciByZWRlZmluZUFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xuICB2YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG4gIHZhciB0b0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG4gIHZhciB0b0luZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzQpO1xuICB2YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xuICB2YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG4gIHZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XG4gIHZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG4gIHZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG4gIHZhciBpc0FycmF5SXRlciA9IF9fd2VicGFja19yZXF1aXJlX18oOTIpO1xuICB2YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XG4gIHZhciBnZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xuICB2YXIgZ09QTiA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpLmY7XG4gIHZhciBnZXRJdGVyRm4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk0KTtcbiAgdmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xuICB2YXIgd2tzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbiAgdmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XG4gIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nyk7XG4gIHZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcbiAgdmFyICRpdGVyRGV0ZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCk7XG4gIHZhciBzZXRTcGVjaWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG4gIHZhciBhcnJheUZpbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk2KTtcbiAgdmFyIGFycmF5Q29weVdpdGhpbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0KTtcbiAgdmFyICREUCA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4gIHZhciAkR09QRCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xuICB2YXIgZFAgPSAkRFAuZjtcbiAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICB2YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgdmFyIFVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheTtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG4gIHZhciBTSEFSRURfQlVGRkVSID0gJ1NoYXJlZCcgKyBBUlJBWV9CVUZGRVI7XG4gIHZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG4gIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheVtQUk9UT1RZUEVdO1xuICB2YXIgJEFycmF5QnVmZmVyID0gJGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbiAgdmFyICREYXRhVmlldyA9ICRidWZmZXIuRGF0YVZpZXc7XG4gIHZhciBhcnJheUZvckVhY2ggPSBjcmVhdGVBcnJheU1ldGhvZCgwKTtcbiAgdmFyIGFycmF5RmlsdGVyID0gY3JlYXRlQXJyYXlNZXRob2QoMik7XG4gIHZhciBhcnJheVNvbWUgPSBjcmVhdGVBcnJheU1ldGhvZCgzKTtcbiAgdmFyIGFycmF5RXZlcnkgPSBjcmVhdGVBcnJheU1ldGhvZCg0KTtcbiAgdmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xuICB2YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbiAgdmFyIGFycmF5SW5jbHVkZXMgPSBjcmVhdGVBcnJheUluY2x1ZGVzKHRydWUpO1xuICB2YXIgYXJyYXlJbmRleE9mID0gY3JlYXRlQXJyYXlJbmNsdWRlcyhmYWxzZSk7XG4gIHZhciBhcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JzLnZhbHVlcztcbiAgdmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG4gIHZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xuICB2YXIgYXJyYXlMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2Y7XG4gIHZhciBhcnJheVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlO1xuICB2YXIgYXJyYXlSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQ7XG4gIHZhciBhcnJheUpvaW4gPSBBcnJheVByb3RvLmpvaW47XG4gIHZhciBhcnJheVNvcnQgPSBBcnJheVByb3RvLnNvcnQ7XG4gIHZhciBhcnJheVNsaWNlID0gQXJyYXlQcm90by5zbGljZTtcbiAgdmFyIGFycmF5VG9TdHJpbmcgPSBBcnJheVByb3RvLnRvU3RyaW5nO1xuICB2YXIgYXJyYXlUb0xvY2FsZVN0cmluZyA9IEFycmF5UHJvdG8udG9Mb2NhbGVTdHJpbmc7XG4gIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgdmFyIFRBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgdmFyIFRZUEVEX0NPTlNUUlVDVE9SID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpO1xuICB2YXIgREVGX0NPTlNUUlVDVE9SID0gdWlkKCdkZWZfY29uc3RydWN0b3InKTtcbiAgdmFyIEFMTF9DT05TVFJVQ1RPUlMgPSAkdHlwZWQuQ09OU1RSO1xuICB2YXIgVFlQRURfQVJSQVkgPSAkdHlwZWQuVFlQRUQ7XG4gIHZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG4gIHZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG5cbiAgdmFyICRtYXAgPSBjcmVhdGVBcnJheU1ldGhvZCgxLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXSA9PT0gMTtcbiAgfSk7XG5cbiAgdmFyIEZPUkNFRF9TRVQgPSAhIVVpbnQ4QXJyYXkgJiYgISFVaW50OEFycmF5W1BST1RPVFlQRV0uc2V0ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgVWludDhBcnJheSgxKS5zZXQoe30pO1xuICB9KTtcblxuICB2YXIgdG9PZmZzZXQgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIGlmIChpc09iamVjdChpdCkgJiYgVFlQRURfQVJSQVkgaW4gaXQpIHJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIChDLCBsZW5ndGgpIHtcbiAgICBpZiAoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEnKTtcbiAgICB9IHJldHVybiBuZXcgQyhsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBzcGVjaWVzRnJvbUxpc3QgPSBmdW5jdGlvbiAoTywgbGlzdCkge1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChpdCwga2V5LCBpbnRlcm5hbCkge1xuICAgIGRQKGl0LCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kW2ludGVybmFsXTsgfSB9KTtcbiAgfTtcblxuICB2YXIgJGZyb20gPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIWlzQXJyYXlJdGVyKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKykge1xuICAgICAgICB2YWx1ZXMucHVzaChzdGVwLnZhbHVlKTtcbiAgICAgIH0gTyA9IHZhbHVlcztcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcgJiYgYUxlbiA+IDIpIG1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKSwgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciAkb2YgPSBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gaU9TIFNhZmFyaSA2LnggZmFpbHMgaGVyZVxuICB2YXIgVE9fTE9DQUxFX0JVRyA9ICEhVWludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9Mb2NhbGVTdHJpbmcuY2FsbChuZXcgVWludDhBcnJheSgxKSk7IH0pO1xuXG4gIHZhciAkdG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlUb0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfQlVHID8gYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpKSA6IHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBwcm90byA9IHtcbiAgICBjb3B5V2l0aGluOiBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUNvcHlXaXRoaW4uY2FsbCh2YWxpZGF0ZSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5RmlsbC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5RmlsdGVyKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLFxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmRJbmRleCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICBhcnJheUZvckVhY2godmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluY2x1ZGVzKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiAkbWFwKHZhbGlkYXRlKHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2VSaWdodC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGUodGhhdCkubGVuZ3RoO1xuICAgICAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICAgICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5U29tZSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gICAgICB2YXIgTyA9IHZhbGlkYXRlKHRoaXMpO1xuICAgICAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICAgICAgdmFyICRiZWdpbiA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gJGJlZ2luKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyICRzbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICAgIHZhbGlkYXRlKHRoaXMpO1xuICAgIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHNbMV0sIDEpO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB2YXIgc3JjID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgoc3JjLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5RW50cmllcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlLZXlzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGFyZ2V0KVxuICAgICAgJiYgdGFyZ2V0W1RZUEVEX0FSUkFZXVxuICAgICAgJiYgdHlwZW9mIGtleSAhPSAnc3ltYm9sJ1xuICAgICAgJiYga2V5IGluIHRhcmdldFxuICAgICAgJiYgU3RyaW5nKCtrZXkpID09IFN0cmluZyhrZXkpO1xuICB9O1xuICB2YXIgJGdldERlc2MgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICBpZiAoaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgICYmIGlzT2JqZWN0KGRlc2MpXG4gICAgICAmJiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICAgICYmICFoYXMoZGVzYywgJ2dldCcpXG4gICAgICAmJiAhaGFzKGRlc2MsICdzZXQnKVxuICAgICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAgICYmICFkZXNjLmNvbmZpZ3VyYWJsZVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ3dyaXRhYmxlJykgfHwgZGVzYy53cml0YWJsZSlcbiAgICAgICYmICghaGFzKGRlc2MsICdlbnVtZXJhYmxlJykgfHwgZGVzYy5lbnVtZXJhYmxlKVxuICAgICkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IHJldHVybiBkUCh0YXJnZXQsIGtleSwgZGVzYyk7XG4gIH07XG5cbiAgaWYgKCFBTExfQ09OU1RSVUNUT1JTKSB7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mID0gJHNldERlc2M7XG4gIH1cblxuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFBTExfQ09OU1RSVUNUT1JTLCAnT2JqZWN0Jywge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldERlc2MsXG4gICAgZGVmaW5lUHJvcGVydHk6ICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gICAgYXJyYXlUb1N0cmluZyA9IGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0aGlzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogJHNsaWNlLFxuICAgIHNldDogJHNldCxcbiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKCkgeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6IGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbVFlQRURfQVJSQVldOyB9XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIEJZVEVTLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgQ0xBTVBFRCA9ICEhQ0xBTVBFRDtcbiAgICB2YXIgTkFNRSA9IEtFWSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBLRVk7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgS0VZO1xuICAgIHZhciBUeXBlZEFycmF5ID0gZ2xvYmFsW05BTUVdO1xuICAgIHZhciBCYXNlID0gVHlwZWRBcnJheSB8fCB7fTtcbiAgICB2YXIgVEFDID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KTtcbiAgICB2YXIgRk9SQ0VEID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlY7XG4gICAgdmFyIE8gPSB7fTtcbiAgICB2YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkgJiYgVHlwZWRBcnJheVtQUk9UT1RZUEVdO1xuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIHJldHVybiBkYXRhLnZbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhmZiA/IDB4ZmYgOiB2YWx1ZSAmIDB4ZmY7XG4gICAgICBkYXRhLnZbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCB2YWx1ZSwgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgZFAodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGgsIGtsYXNzO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3ICRBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIG9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSh0aGF0LCAnX2QnLCB7XG4gICAgICAgICAgYjogYnVmZmVyLFxuICAgICAgICAgIG86IG9mZnNldCxcbiAgICAgICAgICBsOiBieXRlTGVuZ3RoLFxuICAgICAgICAgIGU6IGxlbmd0aCxcbiAgICAgICAgICB2OiBuZXcgJERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5KDEpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSkgfHwgISRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheSgxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoaXRlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSwgdHJ1ZSkpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSk7XG4gICAgICAgIHZhciBrbGFzcztcbiAgICAgICAgLy8gYHdzYCBtb2R1bGUgYnVnLCB0ZW1wb3JhcmlseSByZW1vdmUgdmFsaWRhdGlvbiBsZW5ndGggZm9yIFVpbnQ4QXJyYXlcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC82NDVcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkgcmV0dXJuIG5ldyBCYXNlKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIHJldHVybiAkbGVuZ3RoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiAkb2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IEJhc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5KSkgaGlkZShUeXBlZEFycmF5LCBrZXksIEJhc2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IFR5cGVkQXJyYXlQcm90b3R5cGU7XG4gICAgICBpZiAoIUxJQlJBUlkpIFR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yID0gVHlwZWRBcnJheVByb3RvdHlwZVtJVEVSQVRPUl07XG4gICAgdmFyIENPUlJFQ1RfSVRFUl9OQU1FID0gISEkbmF0aXZlSXRlcmF0b3JcbiAgICAgICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpO1xuICAgIHZhciAkaXRlcmF0b3IgPSAkaXRlcmF0b3JzLnZhbHVlcztcbiAgICBoaWRlKFR5cGVkQXJyYXksIFRZUEVEX0NPTlNUUlVDVE9SLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRZUEVEX0FSUkFZLCBOQU1FKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgREVGX0NPTlNUUlVDVE9SLCBUeXBlZEFycmF5KTtcblxuICAgIGlmIChDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIHtcbiAgICAgIGRQKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRBRywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTXG4gICAgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgQmFzZS5vZi5jYWxsKFR5cGVkQXJyYXksIDEpOyB9KSwgTkFNRSwge1xuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAsIE5BTUUsIHByb3RvKTtcblxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRF9TRVQsIE5BTUUsIHsgc2V0OiAkc2V0IH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhQ09SUkVDVF9JVEVSX05BTUUsIE5BTUUsICRpdGVyYXRvcnMpO1xuXG4gICAgaWYgKCFMSUJSQVJZICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZykgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHsgc2xpY2U6ICRzbGljZSB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgVHlwZWRBcnJheShbMSwgMl0pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xuICAgIH0pKSwgTkFNRSwgeyB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nIH0pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYgKCFMSUJSQVJZICYmICFDT1JSRUNUX0lURVJfTkFNRSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBJVEVSQVRPUiwgJGl0ZXJhdG9yKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxuXG4vKioqLyB9KSxcbi8qIDMxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBNYXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyOSk7XG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgc2hhcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSkoJ21ldGFkYXRhJyk7XG52YXIgc3RvcmUgPSBzaGFyZWQuc3RvcmUgfHwgKHNoYXJlZC5zdG9yZSA9IG5ldyAoX193ZWJwYWNrX3JlcXVpcmVfXygxMzIpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuXG5cbi8qKiovIH0pLFxuLyogMzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIFN5bWJvbC5mb3IgJiZcbiAgICBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG4gICAgMHhlYWM3O1xuXG4gIHZhciBpc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXG4gICAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDQpKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0NykoKTtcbn1cblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcblxuLyoqKi8gfSksXG4vKiAzMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgTUVUQSA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xudmFyIHNldERlc2MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIV9fd2VicGFja19yZXF1aXJlX18oMykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5cbi8qKiovIH0pLFxuLyogMzQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgX193ZWJwYWNrX3JlcXVpcmVfXygxMikoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMzYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuXG5cbi8qKiovIH0pLFxuLyogMzggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMCk7XG52YXIgZW51bUJ1Z0tleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGRQcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcbnZhciBlbnVtQnVnS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oNzkpO1xudmFyIElFX1BST1RPID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OCkoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NikoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIF9fd2VicGFja19yZXF1aXJlX18oODApLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEwKTtcbnZhciBoaWRkZW5LZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSkuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGRQID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgU1BFQ0lFUyA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMik7XG52YXIgaXNBcnJheUl0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkyKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGdldEl0ZXJGbiA9IF9fd2VicGFja19yZXF1aXJlX18oOTQpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuXG5cbi8qKiovIH0pLFxuLyogNDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQ2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBkZWYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLmY7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgVEFHID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQ3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBkZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIHNwYWNlcyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuXG5cbi8qKiovIH0pLFxuLyogNDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuXG4vKioqLyB9KSxcbi8qIDQ5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDUwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbnZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG4vKioqLyB9KSxcbi8qIDUxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5leHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuXG4vKioqLyB9KSxcbi8qIDUzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG52YXIgVEFHID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmluamVjdEdsb2JhbCA9IGV4cG9ydHMuY3NzID0gdW5kZWZpbmVkO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX2NyZWF0ZUVtb3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NSk7XG5cbnZhciBfY3JlYXRlRW1vdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVFbW90aW9uKTtcblxudmFyIF9jcmVhdGVFbW90aW9uU3R5bGVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTcpO1xuXG52YXIgX2NyZWF0ZUVtb3Rpb25TdHlsZWQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlRW1vdGlvblN0eWxlZCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBjb250ZXh0ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB7fTtcblxudmFyIGVtb3Rpb24gPSAoMCwgX2NyZWF0ZUVtb3Rpb24yLmRlZmF1bHQpKGNvbnRleHQpO1xuXG52YXIgY3NzID0gZXhwb3J0cy5jc3MgPSBlbW90aW9uLmNzcztcbnZhciBpbmplY3RHbG9iYWwgPSBleHBvcnRzLmluamVjdEdsb2JhbCA9IGVtb3Rpb24uaW5qZWN0R2xvYmFsO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVFbW90aW9uU3R5bGVkMi5kZWZhdWx0KShlbW90aW9uLCBfcmVhY3QyLmRlZmF1bHQpO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oNTApKSlcblxuLyoqKi8gfSksXG4vKiA1NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHt9KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuXG4vKioqLyB9KSxcbi8qIDU4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGNvZiA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xudmFyIE1BVENIID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDYwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBJVEVSQVRPUiA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDYxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBoaWRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG52YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xudmFyIHdrcyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcbiAgdmFyIGZucyA9IGV4ZWMoZGVmaW5lZCwgU1lNQk9MLCAnJ1tLRVldKTtcbiAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICB2YXIgcnhmbiA9IGZuc1sxXTtcbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSkpIHtcbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcblxuXG4vKioqLyB9KSxcbi8qIDYzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBTUEVDSUVTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDY0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciByZWRlZmluZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xudmFyIHJlZGVmaW5lQWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XG52YXIgbWV0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xudmFyIGZvck9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG52YXIgYW5JbnN0YW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgJGl0ZXJEZXRlY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgaGlkZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xudmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xudmFyIFRZUEVEID0gdWlkKCd0eXBlZF9hcnJheScpO1xudmFyIFZJRVcgPSB1aWQoJ3ZpZXcnKTtcbnZhciBBQlYgPSAhIShnbG9iYWwuQXJyYXlCdWZmZXIgJiYgZ2xvYmFsLkRhdGFWaWV3KTtcbnZhciBDT05TVFIgPSBBQlY7XG52YXIgaSA9IDA7XG52YXIgbCA9IDk7XG52YXIgVHlwZWQ7XG5cbnZhciBUeXBlZEFycmF5Q29uc3RydWN0b3JzID0gKFxuICAnSW50OEFycmF5LFVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXknXG4pLnNwbGl0KCcsJyk7XG5cbndoaWxlIChpIDwgbCkge1xuICBpZiAoVHlwZWQgPSBnbG9iYWxbVHlwZWRBcnJheUNvbnN0cnVjdG9yc1tpKytdXSkge1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBUWVBFRCwgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICB9IGVsc2UgQ09OU1RSID0gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBQlY6IEFCVixcbiAgQ09OU1RSOiBDT05TVFIsXG4gIFRZUEVEOiBUWVBFRCxcbiAgVklFVzogVklFV1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDY2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpIHx8ICFfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEsgPSBNYXRoLnJhbmRvbSgpO1xuICAvLyBJbiBGRiB0aHJvd3Mgb25seSBkZWZpbmUgbWV0aG9kc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYsIG5vLXVzZWxlc3MtY2FsbFxuICBfX2RlZmluZVNldHRlcl9fLmNhbGwobnVsbCwgSywgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgZGVsZXRlIF9fd2VicGFja19yZXF1aXJlX18oMilbS107XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDY3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSBBW2xlbmd0aF0gPSBhcmd1bWVudHNbbGVuZ3RoXTtcbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBjdHggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcbnZhciBmb3JPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDY5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogXG4gKi9cblxuZnVuY3Rpb24gbWFrZUVtcHR5RnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFyZztcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW5kIGRpc2NhcmRzIGlucHV0czsgaXQgaGFzIG5vIHNpZGUgZWZmZWN0cy4gVGhpcyBpc1xuICogcHJpbWFyaWx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5IGZvciBvdmVycmlkYWJsZSBmdW5jdGlvbiBlbmRwb2ludHMgd2hpY2hcbiAqIGFsd2F5cyBuZWVkIHRvIGJlIGNhbGxhYmxlLCBzaW5jZSBKUyBsYWNrcyBhIG51bGwtY2FsbCBpZGlvbSBhbGEgQ29jb2EuXG4gKi9cbnZhciBlbXB0eUZ1bmN0aW9uID0gZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9O1xuXG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zID0gbWFrZUVtcHR5RnVuY3Rpb247XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UgPSBtYWtlRW1wdHlGdW5jdGlvbihmYWxzZSk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKHRydWUpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwgPSBtYWtlRW1wdHlGdW5jdGlvbihudWxsKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUaGlzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcztcbn07XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHJldHVybiBhcmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVtcHR5RnVuY3Rpb247XG5cbi8qKiovIH0pLFxuLyogNzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cblxuXG4vKipcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cbiAqXG4gKiBQcm92aWRlIHNwcmludGYtc3R5bGUgZm9ybWF0IChvbmx5ICVzIGlzIHN1cHBvcnRlZCkgYW5kIGFyZ3VtZW50c1xuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXG4gKiBleHBlY3RpbmcuXG4gKlxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcbiAqIHdpbGwgcmVtYWluIHRvIGVuc3VyZSBsb2dpYyBkb2VzIG5vdCBkaWZmZXIgaW4gcHJvZHVjdGlvbi5cbiAqL1xuXG52YXIgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCk7XG5cbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcignTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArICdmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgIH0pKTtcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgfVxuXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcblxuLyoqKi8gfSksXG4vKiA3MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG5cblxuLyoqKi8gfSksXG4vKiA3MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX3NwaW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OSk7XG5cbnZhciBfc3BpbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zcGluKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgbGluZXM6IDE2LFxuICBsZW5ndGg6IDMsXG4gIHdpZHRoOiAzLFxuICByYWRpdXM6IDE0LFxuICBjb2xvcjogJyNGRkZGRkYnLFxuICBzcGVlZDogMi4xLFxuICB0cmFpbDogNjAsXG4gIHNoYWRvdzogZmFsc2UsXG4gIGh3YWNjZWw6IGZhbHNlLFxuICB0b3A6ICc1MCUnLFxuICBsZWZ0OiAnNTAlJyxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHpJbmRleDogOTk5XG59O1xuXG52YXIgU3Bpbm5lciA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTcGlubmVyLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTcGlubmVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTcGlubmVyKTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoU3Bpbm5lci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFNwaW5uZXIpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTcGlubmVyLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLmluc3RhbnRpYXRlU3Bpbm5lcih0aGlzLnByb3BzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcykge1xuICAgICAgaWYgKG5ld1Byb3BzLmNvbmZpZy5jb2xvciAhPT0gdGhpcy5wcm9wcy5jb25maWcuY29sb3IpIHtcbiAgICAgICAgdGhpcy5zcGlubmVyLnN0b3AoKTtcbiAgICAgICAgLy8gdGhlIFNwaW5uZXIgQVBJIGRvZXNuJ3QgcHJvdmlkZSBhIG1ldGhvZCB0byBjaGFuZ2UgaXRzIG9wdGlvbnMgYWZ0ZXIgaW5zdGFudGlhdGlvbixcbiAgICAgICAgLy8gc28gdGhlIG9ubHkgd2F5IHRvIGRvIHNvIGlzIHRvIHJlaW5zdGFudGlhdGUgdGhlIHNwaW5uZXIgwq9cXF8o44OEKV8vwq9cbiAgICAgICAgdGhpcy5pbnN0YW50aWF0ZVNwaW5uZXIobmV3UHJvcHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld1Byb3BzLnN0b3BwZWQgPT09IHRydWUgJiYgIXRoaXMucHJvcHMuc3RvcHBlZCkge1xuICAgICAgICAgIHRoaXMuc3Bpbm5lci5zdG9wKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW5ld1Byb3BzLnN0b3BwZWQgJiYgdGhpcy5wcm9wcy5zdG9wcGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5zcGlubmVyLnNwaW4odGhpcy5jb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuc3Bpbm5lci5zdG9wKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaW5zdGFudGlhdGVTcGlubmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zdGFudGlhdGVTcGlubmVyKHByb3BzKSB7XG4gICAgICB0aGlzLnNwaW5uZXIgPSBuZXcgX3NwaW4yLmRlZmF1bHQoX2V4dGVuZHMoe30sIGRlZmF1bHRDb25maWcsIHByb3BzLmNvbmZpZykpO1xuICAgICAgaWYgKCFwcm9wcy5zdG9wcGVkKSB7XG4gICAgICAgIHRoaXMuc3Bpbm5lci5zcGluKHRoaXMuY29udGFpbmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdkaXYnLCB7IHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICBfdGhpczIuY29udGFpbmVyID0gbm9kZTtcbiAgICAgICAgfSB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3Bpbm5lcjtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cblNwaW5uZXIucHJvcFR5cGVzID0ge1xuICBjb25maWc6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICBzdG9wcGVkOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIGNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIHN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdFxufTtcblxuU3Bpbm5lci5kZWZhdWx0UHJvcHMgPSB7XG4gIGNvbmZpZzogZGVmYXVsdENvbmZpZyxcbiAgY2xhc3NOYW1lOiAnJyxcbiAgc3R5bGU6IHt9XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBTcGlubmVyO1xuXG4vKioqLyB9KSxcbi8qIDczICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcHJvcFR5cGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBfdXRpbGl0aWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgSWZyYW1lID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKElmcmFtZSwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gSWZyYW1lKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJZnJhbWUpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKElmcmFtZS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKElmcmFtZSkpLmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXMuaWZyYW1lUmVmID0gbnVsbDtcbiAgICBfdGhpcy5sb2FkSGFuZGxlciA9IF90aGlzLmxvYWRIYW5kbGVyLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIC8vIEZpeGVzIHNjcm9sbCBub3QgcmVzcG9uZGluZyBpbiByZW5kZXJlciB2MVxuXG5cbiAgX2NyZWF0ZUNsYXNzKElmcmFtZSwgW3tcbiAgICBrZXk6ICdsb2FkSGFuZGxlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuaWZyYW1lUmVmLnN0eWxlLmhlaWdodCA9IHRoaXMuaWZyYW1lUmVmLm9mZnNldEhlaWdodCArIDEgKyAncHgnO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5pZnJhbWVSZWYuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICAgICgwLCBfdXRpbGl0aWVzLmFwcGx5SU9TRm9vdGVySGFjaykoX3RoaXMyLmlmcmFtZVJlZik7XG5cbiAgICAgICAgX3RoaXMyLnByb3BzLm9uTG9hZCAmJiBfdGhpczIucHJvcHMub25Mb2FkKF90aGlzMi5pZnJhbWVSZWYpO1xuICAgICAgfSwgMSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgICAgcmV0dXJuIG5leHRQcm9wcy5zcmMgIT09IHRoaXMucHJvcHMuc3JjO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBzdHlsZSA9IF9wcm9wcy5zdHlsZSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wcywgWydzdHlsZSddKTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgZnJhbWVCb3JkZXI6ICcwJyxcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHsgYm9yZGVyOiAwIH0sIHN0eWxlKSxcbiAgICAgICAgc3JjOiB0aGlzLnByb3BzLnNyYyxcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIF90aGlzMy5pZnJhbWVSZWYgPSBub2RlO1xuICAgICAgICB9LFxuICAgICAgICAnZGF0YS1xYSc6ICdpZnJhbWUnLFxuICAgICAgICBvbkxvYWQ6IHRoaXMubG9hZEhhbmRsZXJcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gSWZyYW1lO1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuSWZyYW1lLnByb3BUeXBlcyA9IHtcbiAgc3JjOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLFxuICBvbkxvYWQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuY1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gSWZyYW1lO1xuXG4vKioqLyB9KSxcbi8qIDc0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZmV0Y2hKc29ucCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYxKTtcblxudmFyIF9mZXRjaEpzb25wMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ZldGNoSnNvbnApO1xuXG52YXIgX3VybFBhcnNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQpO1xuXG52YXIgX3VybFBhcnNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3VybFBhcnNlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIERhdGFTZXJ2aWNlID0ge1xuICBnZW5lcmF0ZVVSTDogZnVuY3Rpb24gZ2VuZXJhdGVVUkwodWlkLCBkb21haW4pIHtcbiAgICByZXR1cm4gJ2h0dHBzOi8vJyArIGRvbWFpbiArICcvYXBwL2VtYmVkLycgKyB1aWQgKyAnP2pzb25jYWxsYmFjaz0/JztcbiAgfSxcbiAgZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIGdldEZvcm1EYXRhKHVpZCwgZG9tYWluKSB7XG4gICAgdmFyIHVybCA9IHRoaXMuZ2VuZXJhdGVVUkwodWlkLCBkb21haW4pO1xuICAgIHJldHVybiAoMCwgX2ZldGNoSnNvbnAyLmRlZmF1bHQpKHVybCwgeyBqc29ucENhbGxiYWNrOiAnanNvbmNhbGxiYWNrJyB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIHJldHVybiByZXMuanNvbigpO1xuICAgIH0pO1xuICB9LFxuICBnZXRBY2NvdW50RnJvbVVSTDogZnVuY3Rpb24gZ2V0QWNjb3VudEZyb21VUkwodXJsKSB7XG4gICAgcmV0dXJuIHVybC5zcGxpdCgnLycpWzJdLnNwbGl0KCcuJylbMF07XG4gIH0sXG4gIGdldFVpZEZyb21VUkw6IGZ1bmN0aW9uIGdldFVpZEZyb21VUkwodXJsKSB7XG4gICAgdmFyIF9VcmxQYXJzZSA9ICgwLCBfdXJsUGFyc2UyLmRlZmF1bHQpKHVybCksXG4gICAgICAgIHBhdGhuYW1lID0gX1VybFBhcnNlLnBhdGhuYW1lO1xuXG4gICAgdmFyIHBhdGggPSBwYXRobmFtZS5yZXBsYWNlKC9cXC8kLywgJycpOyAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC90b1xcLyguKykkLywgJyQxJyk7XG4gIH0sXG4gIGdldERvbWFpbkZyb21Vcmw6IGZ1bmN0aW9uIGdldERvbWFpbkZyb21VcmwodXJsKSB7XG4gICAgcmV0dXJuIHVybC5zcGxpdCgnLycpWzJdO1xuICB9LFxuICBnZXRET01FbGVtZW50RGF0YTogZnVuY3Rpb24gZ2V0RE9NRWxlbWVudERhdGEoJGVsZW1lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXJsOiAkZWxlbWVudC5kYXRhKCd1cmwnKSxcbiAgICAgIHRleHQ6ICRlbGVtZW50LmRhdGEoJ3RleHQnKVxuICAgIH07XG4gIH1cbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IERhdGFTZXJ2aWNlO1xuXG4vKioqLyB9KSxcbi8qIDc1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdXRpbGl0aWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XG5cbnZhciBkZWZhdWx0RGF0YSA9IHtcbiAgJ2FjY291bnQtbmFtZSc6ICdhZG1pbicsXG4gICduYW1lJzogJ1R5cGVmb3JtJyxcbiAgJ3dlbGNvbWUtaW1hZ2UnOiAnJyxcbiAgJ2ZvbnQtZ29vZ2xlJzogJycsXG4gICdwcmltYXJ5LWNvbG9yJzogJyMyMjInLFxuICAnYmFja2dyb3VuZC1pbWFnZSc6ICcnLFxuICAnYmFja2dyb3VuZC1jb2xvcic6ICcjREREJyxcbiAgJ2JhY2tncm91bmQtcmVwZWF0JzogJycsXG4gICdiYWNrZ3JvdW5kLWJyaWdodG5lc3MnOiAnJyxcbiAgJ2J1dHRvbi1jb2xvcic6ICcjQUFBJ1xufTtcblxudmFyIHN0b3JlID0gZnVuY3Rpb24gc3RvcmUodWlkLCB0eXBlLCB1cmwsIGJ1dHRvblRleHQpIHtcbiAgdmFyIGRhdGEgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGRlZmF1bHREYXRhO1xuXG4gIHJldHVybiB7XG4gICAgaXNNb2JpbGU6ICgwLCBfdXRpbGl0aWVzLmlzTW9iaWxlKShuYXZpZ2F0b3IudXNlckFnZW50KSxcbiAgICAnYWNjb3VudC1uYW1lJzogZGF0YVsnYWNjb3VudC1uYW1lJ10gfHwgJ2FkbWluJyxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGZvcm06IHtcbiAgICAgIHVpZDogdWlkLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICByZWFkeTogZmFsc2UsIC8vIG5vdCBpbXBsZW1lbnRlZFxuICAgICAgYnV0dG9uVGV4dDogYnV0dG9uVGV4dCxcbiAgICAgIG5hbWU6IGRhdGFbJ25hbWUnXSB8fCAnJyxcbiAgICAgICd3ZWxjb21lLWltYWdlJzogZGF0YVsnd2VsY29tZS1pbWFnZSddLFxuICAgICAgJ2ZvbnQtZ29vZ2xlJzogZGF0YVsnZm9udC1nb29nbGUnXSxcbiAgICAgICdwcmltYXJ5LWNvbG9yJzogZGF0YVsncHJpbWFyeS1jb2xvciddLFxuICAgICAgJ2JhY2tncm91bmQtaW1hZ2UnOiBkYXRhWydiYWNrZ3JvdW5kLWltYWdlJ10sXG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGRhdGFbJ2JhY2tncm91bmQtY29sb3InXSxcbiAgICAgICdiYWNrZ3JvdW5kLXJlcGVhdCc6IGRhdGFbJ2JhY2tncm91bmQtcmVwZWF0J10sXG4gICAgICAnYmFja2dyb3VuZC1icmlnaHRuZXNzJzogZGF0YVsnYmFja2dyb3VuZC1icmlnaHRuZXNzJ10sXG4gICAgICAnYnV0dG9uLWNvbG9yJzogZGF0YVsnYnV0dG9uLWNvbG9yJ11cbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBzdG9yZTtcblxuLyoqKi8gfSksXG4vKiA3NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBjb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG52YXIgTElCUkFSWSA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xudmFyIHdrc0V4dCA9IF9fd2VicGFja19yZXF1aXJlX18oMTA5KTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oNykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDc4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBzaGFyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1KSgna2V5cycpO1xudmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG5cblxuLyoqKi8gfSksXG4vKiA4MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuLyoqKi8gfSksXG4vKiA4MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KShGdW5jdGlvbi5jYWxsLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDgyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcblxuXG4vKioqLyB9KSxcbi8qIDgzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDg0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG52YXIgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogODUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24gc2lnbih4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDg2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbm1vZHVsZS5leHBvcnRzID0gKCEkZXhwbTFcbiAgLy8gT2xkIEZGIGJ1Z1xuICB8fCAkZXhwbTEoMTApID4gMjIwMjUuNDY1Nzk0ODA2NzE5IHx8ICRleHBtMSgxMCkgPCAyMjAyNS40NjU3OTQ4MDY3MTY1MTY4XG4gIC8vIFRvciBCcm93c2VyIGJ1Z1xuICB8fCAkZXhwbTEoLTJlLTE3KSAhPSAtMmUtMTdcbikgPyBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuXG5cbi8qKiovIH0pLFxuLyogODcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHRvSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xudmFyIGRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIExJQlJBUlkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciByZWRlZmluZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xudmFyIGhpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZhciBoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcbnZhciAkaXRlckNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oODkpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBJVEVSQVRPUiA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gKCFCVUdHWSAmJiAkbmF0aXZlKSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgIWhhcyhJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IpKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xudmFyIGRlc2NyaXB0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDEyKShJdGVyYXRvclByb3RvdHlwZSwgX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA5MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OSk7XG52YXIgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBzZWFyY2hTdHJpbmcsIE5BTUUpIHtcbiAgaWYgKGlzUmVnRXhwKHNlYXJjaFN0cmluZykpIHRocm93IFR5cGVFcnJvcignU3RyaW5nIycgKyBOQU1FICsgXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO1xuICByZXR1cm4gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDkxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBNQVRDSCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIHJlID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW0tFWV0ocmUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICEnLy4vJ1tLRVldKHJlKTtcbiAgICB9IGNhdGNoIChmKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA5MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XG52YXIgSVRFUkFUT1IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogOTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xudmFyIGNyZWF0ZURlc2MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA5NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgY2xhc3NvZiA9IF9fd2VicGFja19yZXF1aXJlX18oNTMpO1xudmFyIElURVJBVE9SID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMikuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDk1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2MCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA5NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuXG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oMzkpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8qKiovIH0pLFxuLyogOTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XG52YXIgc3RlcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTI1KTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcbnZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4KShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG5cbi8qKiovIH0pLFxuLyogOTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIGludm9rZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTE1KTtcbnZhciBodG1sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XG52YXIgY2VsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoX193ZWJwYWNrX3JlcXVpcmVfXygyMCkocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDk5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIG1hY3JvdGFzayA9IF9fd2VicGFja19yZXF1aXJlX18oOTgpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgTElCUkFSWSA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xudmFyICR0eXBlZCA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xudmFyIGhpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZhciByZWRlZmluZUFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBhbkluc3RhbmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XG52YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIHRvSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XG52YXIgZ09QTiA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpLmY7XG52YXIgZFAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLmY7XG52YXIgYXJyYXlGaWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nik7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuXG5cbi8qKiovIH0pLFxuLyogMTAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG5cblxuLyoqKi8gfSksXG4vKiAxMDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cblxuXG52YXIgZW1wdHlGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgd2FybmluZyA9IGVtcHR5RnVuY3Rpb247XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbiBwcmludFdhcm5pbmcoZm9ybWF0KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICB3YXJuaW5nID0gZnVuY3Rpb24gd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCkge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0LmluZGV4T2YoJ0ZhaWxlZCBDb21wb3NpdGUgcHJvcFR5cGU6ICcpID09PSAwKSB7XG4gICAgICByZXR1cm47IC8vIElnbm9yZSBDb21wb3NpdGVDb21wb25lbnQgcHJvcHR5cGUgY2hlY2suXG4gICAgfVxuXG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KSkpXG5cbi8qKiovIH0pLFxuLyogMTA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkge1xuXG52YXIgcmVxdWlyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1MSlcbiAgLCBxcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUyKVxuICAsIHByb3RvY29scmUgPSAvXihbYS16XVthLXowLTkuKy1dKjopPyhcXC9cXC8pPyhbXFxTXFxzXSopL2lcbiAgLCBzbGFzaGVzID0gL15bQS1aYS16XVtBLVphLXowLTkrLS5dKjpcXC9cXC8vO1xuXG4vKipcbiAqIFRoZXNlIGFyZSB0aGUgcGFyc2UgcnVsZXMgZm9yIHRoZSBVUkwgcGFyc2VyLCBpdCBpbmZvcm1zIHRoZSBwYXJzZXJcbiAqIGFib3V0OlxuICpcbiAqIDAuIFRoZSBjaGFyIGl0IE5lZWRzIHRvIHBhcnNlLCBpZiBpdCdzIGEgc3RyaW5nIGl0IHNob3VsZCBiZSBkb25lIHVzaW5nXG4gKiAgICBpbmRleE9mLCBSZWdFeHAgdXNpbmcgZXhlYyBhbmQgTmFOIG1lYW5zIHNldCBhcyBjdXJyZW50IHZhbHVlLlxuICogMS4gVGhlIHByb3BlcnR5IHdlIHNob3VsZCBzZXQgd2hlbiBwYXJzaW5nIHRoaXMgdmFsdWUuXG4gKiAyLiBJbmRpY2F0aW9uIGlmIGl0J3MgYmFja3dhcmRzIG9yIGZvcndhcmQgcGFyc2luZywgd2hlbiBzZXQgYXMgbnVtYmVyIGl0J3NcbiAqICAgIHRoZSB2YWx1ZSBvZiBleHRyYSBjaGFycyB0aGF0IHNob3VsZCBiZSBzcGxpdCBvZmYuXG4gKiAzLiBJbmhlcml0IGZyb20gbG9jYXRpb24gaWYgbm9uIGV4aXN0aW5nIGluIHRoZSBwYXJzZXIuXG4gKiA0LiBgdG9Mb3dlckNhc2VgIHRoZSByZXN1bHRpbmcgdmFsdWUuXG4gKi9cbnZhciBydWxlcyA9IFtcbiAgWycjJywgJ2hhc2gnXSwgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIFsnPycsICdxdWVyeSddLCAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBbJy8nLCAncGF0aG5hbWUnXSwgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgWydAJywgJ2F1dGgnLCAxXSwgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGZyb250LlxuICBbTmFOLCAnaG9zdCcsIHVuZGVmaW5lZCwgMSwgMV0sICAgICAgIC8vIFNldCBsZWZ0IG92ZXIgdmFsdWUuXG4gIFsvOihcXGQrKSQvLCAncG9ydCcsIHVuZGVmaW5lZCwgMV0sICAgIC8vIFJlZ0V4cCB0aGUgYmFjay5cbiAgW05hTiwgJ2hvc3RuYW1lJywgdW5kZWZpbmVkLCAxLCAxXSAgICAvLyBTZXQgbGVmdCBvdmVyLlxuXTtcblxuLyoqXG4gKiBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgY29waWVkIG9yIGluaGVyaXRlZCBmcm9tLiBUaGlzIGlzIG9ubHkgbmVlZGVkXG4gKiBmb3IgYWxsIG5vbiBibG9iIFVSTCdzIGFzIGEgYmxvYiBVUkwgZG9lcyBub3QgaW5jbHVkZSBhIGhhc2gsIG9ubHkgdGhlXG4gKiBvcmlnaW4uXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBpZ25vcmUgPSB7IGhhc2g6IDEsIHF1ZXJ5OiAxIH07XG5cbi8qKlxuICogVGhlIGxvY2F0aW9uIG9iamVjdCBkaWZmZXJzIHdoZW4geW91ciBjb2RlIGlzIGxvYWRlZCB0aHJvdWdoIGEgbm9ybWFsIHBhZ2UsXG4gKiBXb3JrZXIgb3IgdGhyb3VnaCBhIHdvcmtlciB1c2luZyBhIGJsb2IuIEFuZCB3aXRoIHRoZSBibG9iYmxlIGJlZ2lucyB0aGVcbiAqIHRyb3VibGUgYXMgdGhlIGxvY2F0aW9uIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIFVSTCBvZiB0aGUgYmxvYiwgbm90IHRoZVxuICogbG9jYXRpb24gb2YgdGhlIHBhZ2Ugd2hlcmUgb3VyIGNvZGUgaXMgbG9hZGVkIGluLiBUaGUgYWN0dWFsIG9yaWdpbiBpc1xuICogZW5jb2RlZCBpbiB0aGUgYHBhdGhuYW1lYCBzbyB3ZSBjYW4gdGhhbmtmdWxseSBnZW5lcmF0ZSBhIGdvb2QgXCJkZWZhdWx0XCJcbiAqIGxvY2F0aW9uIGZyb20gaXQgc28gd2UgY2FuIGdlbmVyYXRlIHByb3BlciByZWxhdGl2ZSBVUkwncyBhZ2Fpbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGxvYyBPcHRpb25hbCBkZWZhdWx0IGxvY2F0aW9uIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IGxvbGNhdGlvbiBvYmplY3QuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBsb2xjYXRpb24obG9jKSB7XG4gIGxvYyA9IGxvYyB8fCBnbG9iYWwubG9jYXRpb24gfHwge307XG5cbiAgdmFyIGZpbmFsZGVzdGluYXRpb24gPSB7fVxuICAgICwgdHlwZSA9IHR5cGVvZiBsb2NcbiAgICAsIGtleTtcblxuICBpZiAoJ2Jsb2I6JyA9PT0gbG9jLnByb3RvY29sKSB7XG4gICAgZmluYWxkZXN0aW5hdGlvbiA9IG5ldyBVUkwodW5lc2NhcGUobG9jLnBhdGhuYW1lKSwge30pO1xuICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlKSB7XG4gICAgZmluYWxkZXN0aW5hdGlvbiA9IG5ldyBVUkwobG9jLCB7fSk7XG4gICAgZm9yIChrZXkgaW4gaWdub3JlKSBkZWxldGUgZmluYWxkZXN0aW5hdGlvbltrZXldO1xuICB9IGVsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlKSB7XG4gICAgZm9yIChrZXkgaW4gbG9jKSB7XG4gICAgICBpZiAoa2V5IGluIGlnbm9yZSkgY29udGludWU7XG4gICAgICBmaW5hbGRlc3RpbmF0aW9uW2tleV0gPSBsb2Nba2V5XTtcbiAgICB9XG5cbiAgICBpZiAoZmluYWxkZXN0aW5hdGlvbi5zbGFzaGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbmFsZGVzdGluYXRpb24uc2xhc2hlcyA9IHNsYXNoZXMudGVzdChsb2MuaHJlZik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbmFsZGVzdGluYXRpb247XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUHJvdG9jb2xFeHRyYWN0XG4gKiBAdHlwZSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBwcm90b2NvbCBQcm90b2NvbCBtYXRjaGVkIGluIHRoZSBVUkwsIGluIGxvd2VyY2FzZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2xhc2hlcyBgdHJ1ZWAgaWYgcHJvdG9jb2wgaXMgZm9sbG93ZWQgYnkgXCIvL1wiLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVzdCBSZXN0IG9mIHRoZSBVUkwgdGhhdCBpcyBub3QgcGFydCBvZiB0aGUgcHJvdG9jb2wuXG4gKi9cblxuLyoqXG4gKiBFeHRyYWN0IHByb3RvY29sIGluZm9ybWF0aW9uIGZyb20gYSBVUkwgd2l0aC93aXRob3V0IGRvdWJsZSBzbGFzaCAoXCIvL1wiKS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBleHRyYWN0IGZyb20uXG4gKiBAcmV0dXJuIHtQcm90b2NvbEV4dHJhY3R9IEV4dHJhY3RlZCBpbmZvcm1hdGlvbi5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2woYWRkcmVzcykge1xuICB2YXIgbWF0Y2ggPSBwcm90b2NvbHJlLmV4ZWMoYWRkcmVzcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm90b2NvbDogbWF0Y2hbMV0gPyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIDogJycsXG4gICAgc2xhc2hlczogISFtYXRjaFsyXSxcbiAgICByZXN0OiBtYXRjaFszXVxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSByZWxhdGl2ZSBVUkwgcGF0aG5hbWUgYWdhaW5zdCBhIGJhc2UgVVJMIHBhdGhuYW1lLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWxhdGl2ZSBQYXRobmFtZSBvZiB0aGUgcmVsYXRpdmUgVVJMLlxuICogQHBhcmFtIHtTdHJpbmd9IGJhc2UgUGF0aG5hbWUgb2YgdGhlIGJhc2UgVVJMLlxuICogQHJldHVybiB7U3RyaW5nfSBSZXNvbHZlZCBwYXRobmFtZS5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXNvbHZlKHJlbGF0aXZlLCBiYXNlKSB7XG4gIHZhciBwYXRoID0gKGJhc2UgfHwgJy8nKS5zcGxpdCgnLycpLnNsaWNlKDAsIC0xKS5jb25jYXQocmVsYXRpdmUuc3BsaXQoJy8nKSlcbiAgICAsIGkgPSBwYXRoLmxlbmd0aFxuICAgICwgbGFzdCA9IHBhdGhbaSAtIDFdXG4gICAgLCB1bnNoaWZ0ID0gZmFsc2VcbiAgICAsIHVwID0gMDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKHBhdGhbaV0gPT09ICcuJykge1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXRoW2ldID09PSAnLi4nKSB7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgaWYgKGkgPT09IDApIHVuc2hpZnQgPSB0cnVlO1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1bnNoaWZ0KSBwYXRoLnVuc2hpZnQoJycpO1xuICBpZiAobGFzdCA9PT0gJy4nIHx8IGxhc3QgPT09ICcuLicpIHBhdGgucHVzaCgnJyk7XG5cbiAgcmV0dXJuIHBhdGguam9pbignLycpO1xufVxuXG4vKipcbiAqIFRoZSBhY3R1YWwgVVJMIGluc3RhbmNlLiBJbnN0ZWFkIG9mIHJldHVybmluZyBhbiBvYmplY3Qgd2UndmUgb3B0ZWQtaW4gdG9cbiAqIGNyZWF0ZSBhbiBhY3R1YWwgY29uc3RydWN0b3IgYXMgaXQncyBtdWNoIG1vcmUgbWVtb3J5IGVmZmljaWVudCBhbmRcbiAqIGZhc3RlciBhbmQgaXQgcGxlYXNlcyBteSBPQ0QuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBwYXJzZS5cbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gbG9jYXRpb24gTG9jYXRpb24gZGVmYXVsdHMgZm9yIHJlbGF0aXZlIHBhdGhzLlxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSBwYXJzZXIgUGFyc2VyIGZvciB0aGUgcXVlcnkgc3RyaW5nLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gVVJMKGFkZHJlc3MsIGxvY2F0aW9uLCBwYXJzZXIpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICByZXR1cm4gbmV3IFVSTChhZGRyZXNzLCBsb2NhdGlvbiwgcGFyc2VyKTtcbiAgfVxuXG4gIHZhciByZWxhdGl2ZSwgZXh0cmFjdGVkLCBwYXJzZSwgaW5zdHJ1Y3Rpb24sIGluZGV4LCBrZXlcbiAgICAsIGluc3RydWN0aW9ucyA9IHJ1bGVzLnNsaWNlKClcbiAgICAsIHR5cGUgPSB0eXBlb2YgbG9jYXRpb25cbiAgICAsIHVybCA9IHRoaXNcbiAgICAsIGkgPSAwO1xuXG4gIC8vXG4gIC8vIFRoZSBmb2xsb3dpbmcgaWYgc3RhdGVtZW50cyBhbGxvd3MgdGhpcyBtb2R1bGUgdHdvIGhhdmUgY29tcGF0aWJpbGl0eSB3aXRoXG4gIC8vIDIgZGlmZmVyZW50IEFQSTpcbiAgLy9cbiAgLy8gMS4gTm9kZS5qcydzIGB1cmwucGFyc2VgIGFwaSB3aGljaCBhY2NlcHRzIGEgVVJMLCBib29sZWFuIGFzIGFyZ3VtZW50c1xuICAvLyAgICB3aGVyZSB0aGUgYm9vbGVhbiBpbmRpY2F0ZXMgdGhhdCB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZCBhbHNvIGJlIHBhcnNlZC5cbiAgLy9cbiAgLy8gMi4gVGhlIGBVUkxgIGludGVyZmFjZSBvZiB0aGUgYnJvd3NlciB3aGljaCBhY2NlcHRzIGEgVVJMLCBvYmplY3QgYXNcbiAgLy8gICAgYXJndW1lbnRzLiBUaGUgc3VwcGxpZWQgb2JqZWN0IHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0IHZhbHVlcyAvIGZhbGwtYmFja1xuICAvLyAgICBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gIC8vXG4gIGlmICgnb2JqZWN0JyAhPT0gdHlwZSAmJiAnc3RyaW5nJyAhPT0gdHlwZSkge1xuICAgIHBhcnNlciA9IGxvY2F0aW9uO1xuICAgIGxvY2F0aW9uID0gbnVsbDtcbiAgfVxuXG4gIGlmIChwYXJzZXIgJiYgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHBhcnNlcikgcGFyc2VyID0gcXMucGFyc2U7XG5cbiAgbG9jYXRpb24gPSBsb2xjYXRpb24obG9jYXRpb24pO1xuXG4gIC8vXG4gIC8vIEV4dHJhY3QgcHJvdG9jb2wgaW5mb3JtYXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIGluc3RydWN0aW9ucy5cbiAgLy9cbiAgZXh0cmFjdGVkID0gZXh0cmFjdFByb3RvY29sKGFkZHJlc3MgfHwgJycpO1xuICByZWxhdGl2ZSA9ICFleHRyYWN0ZWQucHJvdG9jb2wgJiYgIWV4dHJhY3RlZC5zbGFzaGVzO1xuICB1cmwuc2xhc2hlcyA9IGV4dHJhY3RlZC5zbGFzaGVzIHx8IHJlbGF0aXZlICYmIGxvY2F0aW9uLnNsYXNoZXM7XG4gIHVybC5wcm90b2NvbCA9IGV4dHJhY3RlZC5wcm90b2NvbCB8fCBsb2NhdGlvbi5wcm90b2NvbCB8fCAnJztcbiAgYWRkcmVzcyA9IGV4dHJhY3RlZC5yZXN0O1xuXG4gIC8vXG4gIC8vIFdoZW4gdGhlIGF1dGhvcml0eSBjb21wb25lbnQgaXMgYWJzZW50IHRoZSBVUkwgc3RhcnRzIHdpdGggYSBwYXRoXG4gIC8vIGNvbXBvbmVudC5cbiAgLy9cbiAgaWYgKCFleHRyYWN0ZWQuc2xhc2hlcykgaW5zdHJ1Y3Rpb25zWzJdID0gWy8oLiopLywgJ3BhdGhuYW1lJ107XG5cbiAgZm9yICg7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc1tpXTtcbiAgICBwYXJzZSA9IGluc3RydWN0aW9uWzBdO1xuICAgIGtleSA9IGluc3RydWN0aW9uWzFdO1xuXG4gICAgaWYgKHBhcnNlICE9PSBwYXJzZSkge1xuICAgICAgdXJsW2tleV0gPSBhZGRyZXNzO1xuICAgIH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBwYXJzZSkge1xuICAgICAgaWYgKH4oaW5kZXggPSBhZGRyZXNzLmluZGV4T2YocGFyc2UpKSkge1xuICAgICAgICBpZiAoJ251bWJlcicgPT09IHR5cGVvZiBpbnN0cnVjdGlvblsyXSkge1xuICAgICAgICAgIHVybFtrZXldID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoaW5kZXggKyBpbnN0cnVjdGlvblsyXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXJsW2tleV0gPSBhZGRyZXNzLnNsaWNlKGluZGV4KTtcbiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChpbmRleCA9IHBhcnNlLmV4ZWMoYWRkcmVzcykpKSB7XG4gICAgICB1cmxba2V5XSA9IGluZGV4WzFdO1xuICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXguaW5kZXgpO1xuICAgIH1cblxuICAgIHVybFtrZXldID0gdXJsW2tleV0gfHwgKFxuICAgICAgcmVsYXRpdmUgJiYgaW5zdHJ1Y3Rpb25bM10gPyBsb2NhdGlvbltrZXldIHx8ICcnIDogJydcbiAgICApO1xuXG4gICAgLy9cbiAgICAvLyBIb3N0bmFtZSwgaG9zdCBhbmQgcHJvdG9jb2wgc2hvdWxkIGJlIGxvd2VyY2FzZWQgc28gdGhleSBjYW4gYmUgdXNlZCB0b1xuICAgIC8vIGNyZWF0ZSBhIHByb3BlciBgb3JpZ2luYC5cbiAgICAvL1xuICAgIGlmIChpbnN0cnVjdGlvbls0XSkgdXJsW2tleV0gPSB1cmxba2V5XS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLy9cbiAgLy8gQWxzbyBwYXJzZSB0aGUgc3VwcGxpZWQgcXVlcnkgc3RyaW5nIGluIHRvIGFuIG9iamVjdC4gSWYgd2UncmUgc3VwcGxpZWRcbiAgLy8gd2l0aCBhIGN1c3RvbSBwYXJzZXIgYXMgZnVuY3Rpb24gdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBidWlsZC1pblxuICAvLyBwYXJzZXIuXG4gIC8vXG4gIGlmIChwYXJzZXIpIHVybC5xdWVyeSA9IHBhcnNlcih1cmwucXVlcnkpO1xuXG4gIC8vXG4gIC8vIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUsIHJlc29sdmUgdGhlIHBhdGhuYW1lIGFnYWluc3QgdGhlIGJhc2UgVVJMLlxuICAvL1xuICBpZiAoXG4gICAgICByZWxhdGl2ZVxuICAgICYmIGxvY2F0aW9uLnNsYXNoZXNcbiAgICAmJiB1cmwucGF0aG5hbWUuY2hhckF0KDApICE9PSAnLydcbiAgICAmJiAodXJsLnBhdGhuYW1lICE9PSAnJyB8fCBsb2NhdGlvbi5wYXRobmFtZSAhPT0gJycpXG4gICkge1xuICAgIHVybC5wYXRobmFtZSA9IHJlc29sdmUodXJsLnBhdGhuYW1lLCBsb2NhdGlvbi5wYXRobmFtZSk7XG4gIH1cblxuICAvL1xuICAvLyBXZSBzaG91bGQgbm90IGFkZCBwb3J0IG51bWJlcnMgaWYgdGhleSBhcmUgYWxyZWFkeSB0aGUgZGVmYXVsdCBwb3J0IG51bWJlclxuICAvLyBmb3IgYSBnaXZlbiBwcm90b2NvbC4gQXMgdGhlIGhvc3QgYWxzbyBjb250YWlucyB0aGUgcG9ydCBudW1iZXIgd2UncmUgZ29pbmdcbiAgLy8gb3ZlcnJpZGUgaXQgd2l0aCB0aGUgaG9zdG5hbWUgd2hpY2ggY29udGFpbnMgbm8gcG9ydCBudW1iZXIuXG4gIC8vXG4gIGlmICghcmVxdWlyZWQodXJsLnBvcnQsIHVybC5wcm90b2NvbCkpIHtcbiAgICB1cmwuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgICB1cmwucG9ydCA9ICcnO1xuICB9XG5cbiAgLy9cbiAgLy8gUGFyc2UgZG93biB0aGUgYGF1dGhgIGZvciB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxuICAvL1xuICB1cmwudXNlcm5hbWUgPSB1cmwucGFzc3dvcmQgPSAnJztcbiAgaWYgKHVybC5hdXRoKSB7XG4gICAgaW5zdHJ1Y3Rpb24gPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xuICAgIHVybC51c2VybmFtZSA9IGluc3RydWN0aW9uWzBdIHx8ICcnO1xuICAgIHVybC5wYXNzd29yZCA9IGluc3RydWN0aW9uWzFdIHx8ICcnO1xuICB9XG5cbiAgdXJsLm9yaWdpbiA9IHVybC5wcm90b2NvbCAmJiB1cmwuaG9zdCAmJiB1cmwucHJvdG9jb2wgIT09ICdmaWxlOidcbiAgICA/IHVybC5wcm90b2NvbCArJy8vJysgdXJsLmhvc3RcbiAgICA6ICdudWxsJztcblxuICAvL1xuICAvLyBUaGUgaHJlZiBpcyBqdXN0IHRoZSBjb21waWxlZCByZXN1bHQuXG4gIC8vXG4gIHVybC5ocmVmID0gdXJsLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogVGhpcyBpcyBjb252ZW5pZW5jZSBtZXRob2QgZm9yIGNoYW5naW5nIHByb3BlcnRpZXMgaW4gdGhlIFVSTCBpbnN0YW5jZSB0b1xuICogaW5zdXJlIHRoYXQgdGhleSBhbGwgcHJvcGFnYXRlIGNvcnJlY3RseS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFydCAgICAgICAgICBQcm9wZXJ0eSB3ZSBuZWVkIHRvIGFkanVzdC5cbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlICAgICAgICAgIFRoZSBuZXdseSBhc3NpZ25lZCB2YWx1ZS5cbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gZm4gIFdoZW4gc2V0dGluZyB0aGUgcXVlcnksIGl0IHdpbGwgYmUgdGhlIGZ1bmN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIHBhcnNlIHRoZSBxdWVyeS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0dGluZyB0aGUgcHJvdG9jb2wsIGRvdWJsZSBzbGFzaCB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHVybCBpZiBpdCBpcyB0cnVlLlxuICogQHJldHVybnMge1VSTH1cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHNldChwYXJ0LCB2YWx1ZSwgZm4pIHtcbiAgdmFyIHVybCA9IHRoaXM7XG5cbiAgc3dpdGNoIChwYXJ0KSB7XG4gICAgY2FzZSAncXVlcnknOlxuICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gKGZuIHx8IHFzLnBhcnNlKSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb3J0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAoIXJlcXVpcmVkKHZhbHVlLCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgICAgICB1cmxbcGFydF0gPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWUgKyc6JysgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaG9zdG5hbWUnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICh1cmwucG9ydCkgdmFsdWUgKz0gJzonKyB1cmwucG9ydDtcbiAgICAgIHVybC5ob3N0ID0gdmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICgvOlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgIHVybC5wb3J0ID0gdmFsdWUucG9wKCk7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlLmpvaW4oJzonKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlO1xuICAgICAgICB1cmwucG9ydCA9ICcnO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Byb3RvY29sJzpcbiAgICAgIHVybC5wcm90b2NvbCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICB1cmwuc2xhc2hlcyA9ICFmbjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncGF0aG5hbWUnOlxuICAgIGNhc2UgJ2hhc2gnOlxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhciBjaGFyID0gcGFydCA9PT0gJ3BhdGhuYW1lJyA/ICcvJyA6ICcjJztcbiAgICAgICAgdXJsW3BhcnRdID0gdmFsdWUuY2hhckF0KDApICE9PSBjaGFyID8gY2hhciArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpbnMgPSBydWxlc1tpXTtcblxuICAgIGlmIChpbnNbNF0pIHVybFtpbnNbMV1dID0gdXJsW2luc1sxXV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgJiYgdXJsLmhvc3QgJiYgdXJsLnByb3RvY29sICE9PSAnZmlsZTonXG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgdXJsLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcblxuICByZXR1cm4gdXJsO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgcHJvcGVydGllcyBiYWNrIGluIHRvIGEgdmFsaWQgYW5kIGZ1bGwgVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmdpZnkgT3B0aW9uYWwgcXVlcnkgc3RyaW5naWZ5IGZ1bmN0aW9uLlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHN0cmluZ2lmeSkge1xuICBpZiAoIXN0cmluZ2lmeSB8fCAnZnVuY3Rpb24nICE9PSB0eXBlb2Ygc3RyaW5naWZ5KSBzdHJpbmdpZnkgPSBxcy5zdHJpbmdpZnk7XG5cbiAgdmFyIHF1ZXJ5XG4gICAgLCB1cmwgPSB0aGlzXG4gICAgLCBwcm90b2NvbCA9IHVybC5wcm90b2NvbDtcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuY2hhckF0KHByb3RvY29sLmxlbmd0aCAtIDEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICB2YXIgcmVzdWx0ID0gcHJvdG9jb2wgKyAodXJsLnNsYXNoZXMgPyAnLy8nIDogJycpO1xuXG4gIGlmICh1cmwudXNlcm5hbWUpIHtcbiAgICByZXN1bHQgKz0gdXJsLnVzZXJuYW1lO1xuICAgIGlmICh1cmwucGFzc3dvcmQpIHJlc3VsdCArPSAnOicrIHVybC5wYXNzd29yZDtcbiAgICByZXN1bHQgKz0gJ0AnO1xuICB9XG5cbiAgcmVzdWx0ICs9IHVybC5ob3N0ICsgdXJsLnBhdGhuYW1lO1xuXG4gIHF1ZXJ5ID0gJ29iamVjdCcgPT09IHR5cGVvZiB1cmwucXVlcnkgPyBzdHJpbmdpZnkodXJsLnF1ZXJ5KSA6IHVybC5xdWVyeTtcbiAgaWYgKHF1ZXJ5KSByZXN1bHQgKz0gJz8nICE9PSBxdWVyeS5jaGFyQXQoMCkgPyAnPycrIHF1ZXJ5IDogcXVlcnk7XG5cbiAgaWYgKHVybC5oYXNoKSByZXN1bHQgKz0gdXJsLmhhc2g7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuVVJMLnByb3RvdHlwZSA9IHsgc2V0OiBzZXQsIHRvU3RyaW5nOiB0b1N0cmluZyB9O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBVUkwgcGFyc2VyIGFuZCBzb21lIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCBmb3Jcbi8vIG90aGVycyBvciB0ZXN0aW5nLlxuLy9cblVSTC5leHRyYWN0UHJvdG9jb2wgPSBleHRyYWN0UHJvdG9jb2w7XG5VUkwubG9jYXRpb24gPSBsb2xjYXRpb247XG5VUkwucXMgPSBxcztcblxubW9kdWxlLmV4cG9ydHMgPSBVUkw7XG5cbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKSkpXG5cbi8qKiovIH0pLFxuLyogMTA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBtZW1vaXplOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1RZTEVTX0tFWTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVuaXRsZXNzOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaGFzaFN0cmluZzsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHBhOyB9KTtcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBtdXJtdXJoYXNoMiB2aWEgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzL2Jsb2IvbWFzdGVyL211cm11cmhhc2gyX2djLmpzXG5mdW5jdGlvbiBoYXNoU3RyaW5nKHN0cikge1xuICByZXR1cm4gbXVybXVyaGFzaDJfMzJfZ2Moc3RyLCBzdHIubGVuZ3RoKS50b1N0cmluZygzNik7XG59XG5cbmZ1bmN0aW9uIG11cm11cmhhc2gyXzMyX2djKHN0ciwgc2VlZCkge1xuICB2YXIgbCA9IHN0ci5sZW5ndGgsXG4gICAgICBoID0gc2VlZCBeIGwsXG4gICAgICBpID0gMCxcbiAgICAgIGs7XG5cbiAgd2hpbGUgKGwgPj0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID0gKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoKGsgPj4+IDE2KSAqIDB4NWJkMWU5OTUgJiAweGZmZmYpIDw8IDE2KTtcbiAgICBrIF49IGsgPj4+IDI0O1xuICAgIGsgPSAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKCgoayA+Pj4gMTYpICogMHg1YmQxZTk5NSAmIDB4ZmZmZikgPDwgMTYpO1xuICAgIGggPSAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKCgoaCA+Pj4gMTYpICogMHg1YmQxZTk5NSAmIDB4ZmZmZikgPDwgMTYpIF4gaztcbiAgICBsIC09IDQ7XG4gICAgKytpO1xuICB9XG5cbiAgc3dpdGNoIChsKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID0gKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoKGggPj4+IDE2KSAqIDB4NWJkMWU5OTUgJiAweGZmZmYpIDw8IDE2KTtcbiAgfVxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPSAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKCgoaCA+Pj4gMTYpICogMHg1YmQxZTk5NSAmIDB4ZmZmZikgPDwgMTYpO1xuICBoIF49IGggPj4+IDE1O1xuICByZXR1cm4gaCA+Pj4gMDtcbn1cblxudmFyIHBhID0gZnVuY3Rpb24gZmEoaGEpIHtcbiAgZnVuY3Rpb24gVihiLCBjLCBkLCBrLCBsKSB7XG4gICAgZm9yICh2YXIgYSA9IDAsIGYgPSAwLCBuID0gMCwgZSA9IDAsIGgsIHEsIG0sIHYgPSAwLCBBID0gMCwgQiA9IDAsIHggPSAwLCBDID0gMCwgcCA9IDAsIEcgPSAwLCByID0gMCwgTiA9IHEgPSAwLCBMID0gMCwgdCA9IDAsIEQgPSBkLmxlbmd0aCwgRiA9IEQgLSAxLCBnID0gXCJcIiwgdSA9IFwiXCIsIFMgPSBcIlwiLCBNID0gXCJcIiwgSDsgciA8IEQ7KSB7XG4gICAgICBtID0gZC5jaGFyQ29kZUF0KHIpO1xuICAgICAgciA9PT0gRiAmJiAwICE9PSBmICsgZSArIG4gKyBhICYmICgwICE9PSBmICYmIChtID0gNDcgPT09IGYgPyAxMCA6IDQ3KSwgZSA9IG4gPSBhID0gMCwgRCsrLCBGKyspO1xuXG4gICAgICBpZiAoMCA9PT0gZiArIGUgKyBuICsgYSkge1xuICAgICAgICBpZiAociA9PT0gRiAmJiAoMCA8IHEgJiYgKGcgPSBnLnJlcGxhY2UoUCwgXCJcIikpLCAwIDwgZy50cmltKCkubGVuZ3RoKSkge1xuICAgICAgICAgIHN3aXRjaCAobSkge1xuICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGcgKz0gZC5jaGFyQXQocik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbSA9IDU5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKDEgPT09IE4pIHN3aXRjaCAobSkge1xuICAgICAgICAgIGNhc2UgMTIzOlxuICAgICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgTiA9IDA7XG5cbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBmb3IgKE4gPSAwLCB0ID0gciwgaCA9IG0sIHItLSwgbSA9IDU5OyB0IDwgRDspIHtcbiAgICAgICAgICAgICAgc3dpdGNoIChkLmNoYXJDb2RlQXQoKyt0KSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgICAgICAgcisrLCBtID0gaDtcblxuICAgICAgICAgICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgICAgICAgY2FzZSAxMjM6XG4gICAgICAgICAgICAgICAgICB0ID0gRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKG0pIHtcbiAgICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICAgIGcgPSBnLnRyaW0oKTtcbiAgICAgICAgICAgIGggPSBnLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICB4ID0gMTtcblxuICAgICAgICAgICAgZm9yICh0ID0gKytyOyByIDwgRDspIHtcbiAgICAgICAgICAgICAgbSA9IGQuY2hhckNvZGVBdChyKTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKG0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICAgICAgICAgIHgrKztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxMjU6XG4gICAgICAgICAgICAgICAgICB4LS07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoMCA9PT0geCkgYnJlYWs7XG4gICAgICAgICAgICAgIHIrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IGQuc3Vic3RyaW5nKHQsIHIpO1xuICAgICAgICAgICAgMCA9PT0gaCAmJiAoaCA9IChnID0gZy5yZXBsYWNlKHFhLCBcIlwiKS50cmltKCkpLmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGgpIHtcbiAgICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgICAgICAwIDwgcSAmJiAoZyA9IGcucmVwbGFjZShQLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgcSA9IGcuY2hhckNvZGVBdCgxKTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAocSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxMDA6XG4gICAgICAgICAgICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgICAgICAgICAgaCA9IGM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBoID0gVztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwID0gVihjLCBoLCBwLCBxLCBsICsgMSk7XG4gICAgICAgICAgICAgICAgdCA9IHAubGVuZ3RoO1xuICAgICAgICAgICAgICAgIDAgPCBYICYmIDAgPT09IHQgJiYgKHQgPSBnLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgMCA8IEUgJiYgKGggPSBpYShXLCBnLCBMKSwgSCA9IE8oMywgcCwgaCwgYywgSSwgeSwgdCwgcSwgbCksIGcgPSBoLmpvaW4oXCJcIiksIHZvaWQgMCAhPT0gSCAmJiAwID09PSAodCA9IChwID0gSC50cmltKCkpLmxlbmd0aCkgJiYgKHEgPSAwLCBwID0gXCJcIikpO1xuICAgICAgICAgICAgICAgIGlmICgwIDwgdCkgc3dpdGNoIChxKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgICAgICAgICAgZyA9IGcucmVwbGFjZShyYSwgc2EpO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIDEwMDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgICAgICAgICAgcCA9IGcgKyBcIntcIiArIHAgKyBcIn1cIjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgICAgICAgICAgICBnID0gZy5yZXBsYWNlKHRhLCBcIiQxICQyXCIgKyAoMCA8IFEgPyBUIDogXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICBwID0gZyArIFwie1wiICsgcCArIFwifVwiO1xuICAgICAgICAgICAgICAgICAgICBwID0gMSA9PT0gdyB8fCAyID09PSB3ICYmIFUoXCJAXCIgKyBwLCAzKSA/IFwiQC13ZWJraXQtXCIgKyBwICsgXCJAXCIgKyBwIDogXCJAXCIgKyBwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcCA9IGcgKyBwLCAxMTIgPT09IGsgJiYgKHAgPSAodSArPSBwLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHAgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcCA9IFYoYywgaWEoYywgZywgTCksIHAsIGssIGwgKyAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgUyArPSBwO1xuICAgICAgICAgICAgcCA9IEwgPSBxID0gRyA9IE4gPSBDID0gMDtcbiAgICAgICAgICAgIGcgPSBcIlwiO1xuICAgICAgICAgICAgbSA9IGQuY2hhckNvZGVBdCgrK3IpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDEyNTpcbiAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgZyA9ICgwIDwgcSA/IGcucmVwbGFjZShQLCBcIlwiKSA6IGcpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICgxIDwgKHQgPSBnLmxlbmd0aCkpIHN3aXRjaCAoMCA9PT0gRyAmJiAoaCA9IGcuY2hhckNvZGVBdCgwKSwgNDUgPT09IGggfHwgOTYgPCBoICYmIDEyMyA+IGgpICYmICh0ID0gKGcgPSBnLnJlcGxhY2UoXCIgXCIsIFwiOlwiKSkubGVuZ3RoKSwgMCA8IEUgJiYgdm9pZCAwICE9PSAoSCA9IE8oMSwgZywgYywgYiwgSSwgeSwgdS5sZW5ndGgsIGssIGwpKSAmJiAwID09PSAodCA9IChnID0gSC50cmltKCkpLmxlbmd0aCkgJiYgKGcgPSBcIlxceDAwXFx4MDBcIiksIGggPSBnLmNoYXJDb2RlQXQoMCksIHEgPSBnLmNoYXJDb2RlQXQoMSksIGggKyBxKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDE2OTpcbiAgICAgICAgICAgICAgY2FzZSAxNjM6XG4gICAgICAgICAgICAgICAgTSArPSBnICsgZC5jaGFyQXQocik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICA1OCAhPT0gZy5jaGFyQ29kZUF0KHQgLSAxKSAmJiAodSArPSBqYShnLCBoLCBxLCBnLmNoYXJDb2RlQXQoMikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEwgPSBxID0gRyA9IE4gPSBDID0gMDtcbiAgICAgICAgICAgIGcgPSBcIlwiO1xuICAgICAgICAgICAgbSA9IGQuY2hhckNvZGVBdCgrK3IpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAobSkge1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIGlmICgwID09PSBmICsgZSArIG4gKyBhICsga2EpIHN3aXRjaCAoQikge1xuICAgICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIGNhc2UgMTI2OlxuICAgICAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgMCA8IEcgJiYgKE4gPSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgNDcgPT09IGYgPyBmID0gMCA6IDAgPT09IHogKyBDICYmIChxID0gMSwgZyArPSBcIlxceDAwXCIpO1xuICAgICAgICAgIDAgPCBFICogbGEgJiYgTygwLCBnLCBjLCBiLCBJLCB5LCB1Lmxlbmd0aCwgaywgbCk7XG4gICAgICAgICAgeSA9IDE7XG4gICAgICAgICAgSSsrO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTk6XG4gICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgIGlmICgwID09PSBmICsgZSArIG4gKyBhKSB7XG4gICAgICAgICAgICB5Kys7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB5Kys7XG4gICAgICAgICAgaCA9IGQuY2hhckF0KHIpO1xuXG4gICAgICAgICAgc3dpdGNoIChtKSB7XG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICBpZiAoMCA9PT0gZSArIGEgKyBmKSBzd2l0Y2ggKHYpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgICAgICBoID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIDMyICE9PSBtICYmIChoID0gXCIgXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGggPSBcIlxcXFwwXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICBoID0gXCJcXFxcZlwiO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgaCA9IFwiXFxcXHZcIjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgIDAgPT09IGUgKyBmICsgYSAmJiAwIDwgeiAmJiAocSA9IEwgPSAxLCBoID0gXCJcXGZcIiArIGgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgICAgIGlmICgwID09PSBlICsgZiArIGEgKyBKICYmIDAgPCBHKSBzd2l0Y2ggKHIgLSBHKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgMTEyID09PSB2ICYmIDU4ID09PSBkLmNoYXJDb2RlQXQociAtIDMpICYmIChKID0gdik7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAxMTEgPT09IEEgJiYgKEogPSBBKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgICAgMCA9PT0gZSArIGYgKyBhICYmIChHID0gcik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgICAwID09PSBmICsgbiArIGUgKyBhICYmIChxID0gMSwgaCArPSBcIlxcclwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICAgIDAgPT09IGYgJiYgKGUgPSBlID09PSBtID8gMCA6IDAgPT09IGUgPyBtIDogZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAwID09PSBmICYmIChlID0gZSA9PT0gbSA/IDAgOiAwID09PSBlID8gbSA6IGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA5MTpcbiAgICAgICAgICAgICAgMCA9PT0gZSArIGYgKyBuICYmIGErKztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgOTM6XG4gICAgICAgICAgICAgIDAgPT09IGUgKyBmICsgbiAmJiBhLS07XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgICAwID09PSBlICsgZiArIGEgJiYgbi0tO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgaWYgKDAgPT09IGUgKyBmICsgYSkge1xuICAgICAgICAgICAgICAgIGlmICgwID09PSBDKSBzd2l0Y2ggKDIgKiB2ICsgMyAqIEEpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgNTMzOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgeCA9IDAsIEMgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuKys7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgICAgMCA9PT0gZiArIG4gKyBlICsgYSArIEcgKyBwICYmIChwID0gMSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgaWYgKCEoMCA8IGUgKyBhICsgbikpIHN3aXRjaCAoZikge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoMiAqIG0gKyAzICogZC5jaGFyQ29kZUF0KHIgKyAxKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDIzNTpcbiAgICAgICAgICAgICAgICAgICAgICBmID0gNDc7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjA6XG4gICAgICAgICAgICAgICAgICAgICAgdCA9IHIsIGYgPSA0MjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgICAgICAgNDcgPT09IG0gJiYgNDIgPT09IHYgJiYgKDMzID09PSBkLmNoYXJDb2RlQXQodCArIDIpICYmICh1ICs9IGQuc3Vic3RyaW5nKHQsIHIgKyAxKSksIGggPSBcIlwiLCBmID0gMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoMCA9PT0gZikge1xuICAgICAgICAgICAgaWYgKDAgPT09IHogKyBlICsgYSArIHAgJiYgMTA3ICE9PSBrICYmIDU5ICE9PSBtKSBzd2l0Y2ggKG0pIHtcbiAgICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgICAgY2FzZSAxMjY6XG4gICAgICAgICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IEMpIHtcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAodikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgICAgaCArPSBcIlxceDAwXCI7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICBoID0gXCJcXHgwMFwiICsgaCArICg0NCA9PT0gbSA/IFwiXCIgOiBcIlxceDAwXCIpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBxID0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Ugc3dpdGNoIChtKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgICBDID0gKyt4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgICAgICAgICAgMCA9PT0gKEMgPSAtLXgpICYmIChxID0gMSwgaCArPSBcIlxceDAwXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHYpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTIzOlxuICAgICAgICAgICAgICAgICAgY2FzZSAxMjU6XG4gICAgICAgICAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAwID09PSBDICYmIChxID0gMSwgaCArPSBcIlxceDAwXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZyArPSBoO1xuICAgICAgICAgICAgMzIgIT09IG0gJiYgOSAhPT0gbSAmJiAoQiA9IG0pO1xuICAgICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICBBID0gdjtcbiAgICAgIHYgPSBtO1xuICAgICAgcisrO1xuICAgIH1cblxuICAgIHQgPSB1Lmxlbmd0aDtcbiAgICAwIDwgWCAmJiAwID09PSB0ICYmIDAgPT09IFMubGVuZ3RoICYmIDAgPT09IGNbMF0ubGVuZ3RoID09PSAhMSAmJiAoMTA5ICE9PSBrIHx8IDEgPT09IGMubGVuZ3RoICYmICgwIDwgeiA/IEsgOiBSKSA9PT0gY1swXSkgJiYgKHQgPSBjLmpvaW4oXCIsXCIpLmxlbmd0aCArIDIpO1xuXG4gICAgaWYgKDAgPCB0KSB7XG4gICAgICBpZiAoMCA9PT0geiAmJiAxMDcgIT09IGspIHtcbiAgICAgICAgZCA9IDA7XG4gICAgICAgIGEgPSBjLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGYgPSBBcnJheShhKTsgZCA8IGE7ICsrZCkge1xuICAgICAgICAgIHYgPSBjW2RdLnNwbGl0KHVhKTtcbiAgICAgICAgICBBID0gXCJcIjtcbiAgICAgICAgICBCID0gMDtcblxuICAgICAgICAgIGZvciAoRCA9IHYubGVuZ3RoOyBCIDwgRDsgKytCKSB7XG4gICAgICAgICAgICBpZiAoISgwID09PSAoeCA9IChlID0gdltCXSkubGVuZ3RoKSAmJiAxIDwgRCkpIHtcbiAgICAgICAgICAgICAgciA9IEEuY2hhckNvZGVBdChBLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICBMID0gZS5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgICBuID0gXCJcIjtcbiAgICAgICAgICAgICAgaWYgKDAgIT09IEIpIHN3aXRjaCAocikge1xuICAgICAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICAgICAgY2FzZSAxMjY6XG4gICAgICAgICAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIG4gPSBcIiBcIjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN3aXRjaCAoTCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgICBlID0gbiArIEs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDEyNjpcbiAgICAgICAgICAgICAgICBjYXNlIDYyOlxuICAgICAgICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgOTE6XG4gICAgICAgICAgICAgICAgICBlID0gbiArIGUgKyBLO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgICAgICAgc3dpdGNoICgyICogZS5jaGFyQ29kZUF0KDEpICsgMyAqIGUuY2hhckNvZGVBdCgyKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDUzMDpcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA8IFkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuICsgZS5zdWJzdHJpbmcoOCwgeCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKDEgPiBCIHx8IDEgPiB2W0IgLSAxXS5sZW5ndGgpIGUgPSBuICsgSyArIGU7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgICAgICAgIG4gPSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGUgPSAxIDwgeCAmJiAwIDwgZS5pbmRleE9mKFwiOlwiKSA/IG4gKyBlLnJlcGxhY2UodmEsIFwiJDFcIiArIEsgKyBcIiQyXCIpIDogbiArIGUgKyBLO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgQSArPSBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZbZF0gPSBBLnJlcGxhY2UoUCwgXCJcIikudHJpbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgYyA9IGY7XG4gICAgICB9XG5cbiAgICAgIGggPSBjO1xuICAgICAgaWYgKDAgPCBFICYmIChIID0gTygyLCB1LCBoLCBiLCBJLCB5LCB0LCBrLCBsKSwgdm9pZCAwICE9PSBIICYmIDAgPT09ICh1ID0gSCkubGVuZ3RoKSkgcmV0dXJuIE0gKyB1ICsgUztcbiAgICAgIHUgPSBoLmpvaW4oXCIsXCIpICsgXCJ7XCIgKyB1ICsgXCJ9XCI7XG5cbiAgICAgIGlmICgwICE9PSB3ICogSikge1xuICAgICAgICAyICE9PSB3IHx8IFUodSwgMikgfHwgKEogPSAwKTtcblxuICAgICAgICBzd2l0Y2ggKEopIHtcbiAgICAgICAgICBjYXNlIDExMTpcbiAgICAgICAgICAgIHUgPSB1LnJlcGxhY2Uod2EsIFwiOi1tb3otJDFcIikgKyB1O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIHUgPSB1LnJlcGxhY2UoWiwgXCI6Oi13ZWJraXQtaW5wdXQtJDFcIikgKyB1LnJlcGxhY2UoWiwgXCI6Oi1tb3otJDFcIikgKyB1LnJlcGxhY2UoWiwgXCI6LW1zLWlucHV0LSQxXCIpICsgdTtcbiAgICAgICAgfVxuXG4gICAgICAgIEogPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBNICsgdSArIFM7XG4gIH1cblxuICBmdW5jdGlvbiBpYShiLCBjLCBkKSB7XG4gICAgdmFyIGsgPSBjLnRyaW0oKS5zcGxpdCh4YSk7XG4gICAgYyA9IGs7XG4gICAgdmFyIGwgPSBrLmxlbmd0aCxcbiAgICAgICAgYSA9IGIubGVuZ3RoO1xuXG4gICAgc3dpdGNoIChhKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHZhciBmID0gMDtcblxuICAgICAgICBmb3IgKGIgPSAwID09PSBhID8gXCJcIiA6IGJbMF0gKyBcIiBcIjsgZiA8IGw7ICsrZikge1xuICAgICAgICAgIGNbZl0gPSBtYShiLCBjW2ZdLCBkLCBhKS50cmltKCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIG4gPSBmID0gMDtcblxuICAgICAgICBmb3IgKGMgPSBbXTsgZiA8IGw7ICsrZikge1xuICAgICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgYTsgKytlKSB7XG4gICAgICAgICAgICBjW24rK10gPSBtYShiW2VdICsgXCIgXCIsIGtbZl0sIGQsIGEpLnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgZnVuY3Rpb24gbWEoYiwgYywgZCwgaykge1xuICAgIHZhciBsID0gYy5jaGFyQ29kZUF0KDApO1xuICAgIDMzID4gbCAmJiAobCA9IChjID0gYy50cmltKCkpLmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgc3dpdGNoIChsKSB7XG4gICAgICBjYXNlIDM4OlxuICAgICAgICBzd2l0Y2ggKHogKyBrKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGlmICgwID09PSBiLnRyaW0oKS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjLnJlcGxhY2UoTSwgXCIkMVwiICsgYi50cmltKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNTg6XG4gICAgICAgIHN3aXRjaCAoYy5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgICAgICBpZiAoMCA8IFkgJiYgMCA8IHopIHJldHVybiBjLnJlcGxhY2UoeWEsIFwiJDFcIikucmVwbGFjZShNLCBcIiQxXCIgKyBSKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBiLnRyaW0oKSArIGM7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKDAgPCBkICogeiAmJiAwIDwgYy5pbmRleE9mKFwiXFxmXCIpKSByZXR1cm4gYy5yZXBsYWNlKE0sICg1OCA9PT0gYi5jaGFyQ29kZUF0KDApID8gXCJcIiA6IFwiJDFcIikgKyBiLnRyaW0oKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGIgKyBjO1xuICB9XG5cbiAgZnVuY3Rpb24gamEoYiwgYywgZCwgaykge1xuICAgIHZhciBsID0gMCxcbiAgICAgICAgYSA9IGIgKyBcIjtcIjtcbiAgICBjID0gMiAqIGMgKyAzICogZCArIDQgKiBrO1xuXG4gICAgaWYgKDk0NCA9PT0gYykge1xuICAgICAgbCA9IGEubGVuZ3RoO1xuICAgICAgYiA9IGEuaW5kZXhPZihcIjpcIiwgOSkgKyAxO1xuICAgICAgZCA9IGEuc3Vic3RyaW5nKDAsIGIpLnRyaW0oKTtcbiAgICAgIGsgPSBhLnN1YnN0cmluZyhiLCBsIC0gMSkudHJpbSgpO1xuXG4gICAgICBzd2l0Y2ggKGEuY2hhckNvZGVBdCg5KSAqIFEpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgaWYgKDExMCAhPT0gYS5jaGFyQ29kZUF0KDEwKSkgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBmb3IgKGEgPSBrLnNwbGl0KChrID0gXCJcIiwgemEpKSwgYiA9IGMgPSAwLCBsID0gYS5sZW5ndGg7IGMgPCBsOyBiID0gMCwgKytjKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBmID0gYVtjXSwgbiA9IGYuc3BsaXQoQWEpOyBmID0gbltiXTspIHtcbiAgICAgICAgICAgICAgdmFyIGUgPSBmLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgIGlmICgxID09PSBRICYmICg2NCA8IGUgJiYgOTAgPiBlIHx8IDk2IDwgZSAmJiAxMjMgPiBlIHx8IDk1ID09PSBlIHx8IDQ1ID09PSBlICYmIDQ1ICE9PSBmLmNoYXJDb2RlQXQoMSkpKSBzd2l0Y2ggKGlzTmFOKHBhcnNlRmxvYXQoZikpICsgKC0xICE9PSBmLmluZGV4T2YoXCIoXCIpKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5maW5pdGVcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImFsdGVybmF0ZVwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYmFja3dhcmRzXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJub3JtYWxcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZvcndhcmRzXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib3RoXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJub25lXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJsaW5lYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVhc2VcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVhc2UtaW5cIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVhc2Utb3V0XCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlYXNlLWluLW91dFwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwicGF1c2VkXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyZXZlcnNlXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhbHRlcm5hdGUtcmV2ZXJzZVwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5oZXJpdFwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5pdGlhbFwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwidW5zZXRcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0ZXAtc3RhcnRcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0ZXAtZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICBmICs9IFQ7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBuW2IrK10gPSBmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBrICs9ICgwID09PSBjID8gXCJcIiA6IFwiLFwiKSArIG4uam9pbihcIiBcIik7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIGsgPSBkICsgayArIFwiO1wiO1xuICAgICAgcmV0dXJuIDEgPT09IHcgfHwgMiA9PT0gdyAmJiBVKGssIDEpID8gXCItd2Via2l0LVwiICsgayArIGsgOiBrO1xuICAgIH1cblxuICAgIGlmICgwID09PSB3IHx8IDIgPT09IHcgJiYgIVUoYSwgMSkpIHJldHVybiBhO1xuXG4gICAgc3dpdGNoIChjKSB7XG4gICAgICBjYXNlIDEwMTU6XG4gICAgICAgIHJldHVybiA0NSA9PT0gYS5jaGFyQ29kZUF0KDkpID8gXCItd2Via2l0LVwiICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDk1MTpcbiAgICAgICAgcmV0dXJuIDExNiA9PT0gYS5jaGFyQ29kZUF0KDMpID8gXCItd2Via2l0LVwiICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDk2MzpcbiAgICAgICAgcmV0dXJuIDExMCA9PT0gYS5jaGFyQ29kZUF0KDUpID8gXCItd2Via2l0LVwiICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDEwMDk6XG4gICAgICAgIGlmICgxMDAgIT09IGEuY2hhckNvZGVBdCg0KSkgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTY5OlxuICAgICAgY2FzZSA5NDI6XG4gICAgICAgIHJldHVybiBcIi13ZWJraXQtXCIgKyBhICsgYTtcblxuICAgICAgY2FzZSA5Nzg6XG4gICAgICAgIHJldHVybiBcIi13ZWJraXQtXCIgKyBhICsgXCItbW96LVwiICsgYSArIGE7XG5cbiAgICAgIGNhc2UgMTAxOTpcbiAgICAgIGNhc2UgOTgzOlxuICAgICAgICByZXR1cm4gXCItd2Via2l0LVwiICsgYSArIFwiLW1vei1cIiArIGEgKyBcIi1tcy1cIiArIGEgKyBhO1xuXG4gICAgICBjYXNlIDg4MzpcbiAgICAgICAgcmV0dXJuIDQ1ID09PSBhLmNoYXJDb2RlQXQoOCkgPyBcIi13ZWJraXQtXCIgKyBhICsgYSA6IGE7XG5cbiAgICAgIGNhc2UgOTMyOlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg0KSkgc3dpdGNoIChhLmNoYXJDb2RlQXQoNSkpIHtcbiAgICAgICAgICBjYXNlIDEwMzpcbiAgICAgICAgICAgIHJldHVybiBcIi13ZWJraXQtYm94LVwiICsgYS5yZXBsYWNlKFwiLWdyb3dcIiwgXCJcIikgKyBcIi13ZWJraXQtXCIgKyBhICsgXCItbXMtXCIgKyBhLnJlcGxhY2UoXCJncm93XCIsIFwicG9zaXRpdmVcIikgKyBhO1xuXG4gICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICByZXR1cm4gXCItd2Via2l0LVwiICsgYSArIFwiLW1zLVwiICsgYS5yZXBsYWNlKFwic2hyaW5rXCIsIFwibmVnYXRpdmVcIikgKyBhO1xuXG4gICAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICAgIHJldHVybiBcIi13ZWJraXQtXCIgKyBhICsgXCItbXMtXCIgKyBhLnJlcGxhY2UoXCJiYXNpc1wiLCBcInByZWZlcnJlZC1zaXplXCIpICsgYTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCItd2Via2l0LVwiICsgYSArIFwiLW1zLVwiICsgYSArIGE7XG5cbiAgICAgIGNhc2UgOTY0OlxuICAgICAgICByZXR1cm4gXCItd2Via2l0LVwiICsgYSArIFwiLW1zLWZsZXgtXCIgKyBhICsgYTtcblxuICAgICAgY2FzZSAxMDIzOlxuICAgICAgICBpZiAoOTkgIT09IGEuY2hhckNvZGVBdCg4KSkgYnJlYWs7XG4gICAgICAgIGIgPSBhLnN1YnN0cmluZyhhLmluZGV4T2YoXCI6XCIsIDE1KSkucmVwbGFjZShcImZsZXgtXCIsIFwiXCIpLnJlcGxhY2UoXCJzcGFjZS1iZXR3ZWVuXCIsIFwianVzdGlmeVwiKTtcbiAgICAgICAgcmV0dXJuIFwiLXdlYmtpdC1ib3gtcGFja1wiICsgYiArIFwiLXdlYmtpdC1cIiArIGEgKyBcIi1tcy1mbGV4LXBhY2tcIiArIGIgKyBhO1xuXG4gICAgICBjYXNlIDEwMDU6XG4gICAgICAgIHJldHVybiBCYS50ZXN0KGEpID8gYS5yZXBsYWNlKG5hLCBcIjotd2Via2l0LVwiKSArIGEucmVwbGFjZShuYSwgXCI6LW1vei1cIikgKyBhIDogYTtcblxuICAgICAgY2FzZSAxRTM6XG4gICAgICAgIGIgPSBhLnN1YnN0cmluZygxMykudHJpbSgpO1xuICAgICAgICBsID0gYi5pbmRleE9mKFwiLVwiKSArIDE7XG5cbiAgICAgICAgc3dpdGNoIChiLmNoYXJDb2RlQXQoMCkgKyBiLmNoYXJDb2RlQXQobCkpIHtcbiAgICAgICAgICBjYXNlIDIyNjpcbiAgICAgICAgICAgIGIgPSBhLnJlcGxhY2UoYWEsIFwidGJcIik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjMyOlxuICAgICAgICAgICAgYiA9IGEucmVwbGFjZShhYSwgXCJ0Yi1ybFwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMjA6XG4gICAgICAgICAgICBiID0gYS5yZXBsYWNlKGFhLCBcImxyXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gXCItd2Via2l0LVwiICsgYSArIFwiLW1zLVwiICsgYiArIGE7XG5cbiAgICAgIGNhc2UgMTAxNzpcbiAgICAgICAgaWYgKC0xID09PSBhLmluZGV4T2YoXCJzdGlja3lcIiwgOSkpIGJyZWFrO1xuXG4gICAgICBjYXNlIDk3NTpcbiAgICAgICAgbCA9IChhID0gYikubGVuZ3RoIC0gMTA7XG4gICAgICAgIGIgPSAoMzMgPT09IGEuY2hhckNvZGVBdChsKSA/IGEuc3Vic3RyaW5nKDAsIGwpIDogYSkuc3Vic3RyaW5nKGIuaW5kZXhPZihcIjpcIiwgNykgKyAxKS50cmltKCk7XG5cbiAgICAgICAgc3dpdGNoIChjID0gYi5jaGFyQ29kZUF0KDApICsgKGIuY2hhckNvZGVBdCg3KSB8IDApKSB7XG4gICAgICAgICAgY2FzZSAyMDM6XG4gICAgICAgICAgICBpZiAoMTExID4gYi5jaGFyQ29kZUF0KDgpKSBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgYSA9IGEucmVwbGFjZShiLCBcIi13ZWJraXQtXCIgKyBiKSArIFwiO1wiICsgYTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMDc6XG4gICAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgICBhID0gYS5yZXBsYWNlKGIsIFwiLXdlYmtpdC1cIiArICgxMDIgPCBjID8gXCJpbmxpbmUtXCIgOiBcIlwiKSArIFwiYm94XCIpICsgXCI7XCIgKyBhLnJlcGxhY2UoYiwgXCItd2Via2l0LVwiICsgYikgKyBcIjtcIiArIGEucmVwbGFjZShiLCBcIi1tcy1cIiArIGIgKyBcImJveFwiKSArIFwiO1wiICsgYTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhICsgXCI7XCI7XG5cbiAgICAgIGNhc2UgOTM4OlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg1KSkgc3dpdGNoIChhLmNoYXJDb2RlQXQoNikpIHtcbiAgICAgICAgICBjYXNlIDEwNTpcbiAgICAgICAgICAgIHJldHVybiBiID0gYS5yZXBsYWNlKFwiLWl0ZW1zXCIsIFwiXCIpLCBcIi13ZWJraXQtXCIgKyBhICsgXCItd2Via2l0LWJveC1cIiArIGIgKyBcIi1tcy1mbGV4LVwiICsgYiArIGE7XG5cbiAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgIHJldHVybiBcIi13ZWJraXQtXCIgKyBhICsgXCItbXMtZmxleC1pdGVtLVwiICsgYS5yZXBsYWNlKENhLCBcIlwiKSArIGE7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFwiLXdlYmtpdC1cIiArIGEgKyBcIi1tcy1mbGV4LWxpbmUtcGFja1wiICsgYS5yZXBsYWNlKFwiYWxpZ24tY29udGVudFwiLCBcIlwiKSArIGE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTUzOlxuICAgICAgICBpZiAoMCA8IChsID0gYS5pbmRleE9mKFwiLWNvbnRlbnRcIiwgOSkpICYmIDEwOSA9PT0gYS5jaGFyQ29kZUF0KGwgLSAzKSAmJiA0NSAhPT0gYS5jaGFyQ29kZUF0KGwgLSA0KSkgcmV0dXJuIGIgPSBhLnN1YnN0cmluZyhsIC0gMyksIFwid2lkdGg6LXdlYmtpdC1cIiArIGIgKyBcIndpZHRoOi1tb3otXCIgKyBiICsgXCJ3aWR0aDpcIiArIGI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDk2MjpcbiAgICAgICAgaWYgKGEgPSBcIi13ZWJraXQtXCIgKyBhICsgKDEwMiA9PT0gYS5jaGFyQ29kZUF0KDUpID8gXCItbXMtXCIgKyBhIDogXCJcIikgKyBhLCAyMTEgPT09IGQgKyBrICYmIDEwNSA9PT0gYS5jaGFyQ29kZUF0KDEzKSAmJiAwIDwgYS5pbmRleE9mKFwidHJhbnNmb3JtXCIsIDEwKSkgcmV0dXJuIGEuc3Vic3RyaW5nKDAsIGEuaW5kZXhPZihcIjtcIiwgMjcpICsgMSkucmVwbGFjZShEYSwgXCIkMS13ZWJraXQtJDJcIikgKyBhO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9XG5cbiAgZnVuY3Rpb24gVShiLCBjKSB7XG4gICAgdmFyIGQgPSBiLmluZGV4T2YoMSA9PT0gYyA/IFwiOlwiIDogXCJ7XCIpLFxuICAgICAgICBrID0gYi5zdWJzdHJpbmcoMCwgMyAhPT0gYyA/IGQgOiAxMCk7XG4gICAgZCA9IGIuc3Vic3RyaW5nKGQgKyAxLCBiLmxlbmd0aCAtIDEpO1xuICAgIHJldHVybiBiYSgyICE9PSBjID8gayA6IGsucmVwbGFjZShFYSwgXCIkMVwiKSwgZCwgYyk7XG4gIH1cblxuICBmdW5jdGlvbiBzYShiLCBjKSB7XG4gICAgdmFyIGQgPSBqYShjLCBjLmNoYXJDb2RlQXQoMCksIGMuY2hhckNvZGVBdCgxKSwgYy5jaGFyQ29kZUF0KDIpKTtcbiAgICByZXR1cm4gZCAhPT0gYyArIFwiO1wiID8gZC5yZXBsYWNlKEZhLCBcIiBvciAoJDEpXCIpLnN1YnN0cmluZyg0KSA6IFwiKFwiICsgYyArIFwiKVwiO1xuICB9XG5cbiAgZnVuY3Rpb24gTyhiLCBjLCBkLCBrLCBsLCBhLCBmLCBuLCBlKSB7XG4gICAgZm9yICh2YXIgaCA9IDAsIHEgPSBjLCBtOyBoIDwgRTsgKytoKSB7XG4gICAgICBzd2l0Y2ggKG0gPSBjYVtoXS5jYWxsKEYsIGIsIHEsIGQsIGssIGwsIGEsIGYsIG4sIGUpKSB7XG4gICAgICAgIGNhc2Ugdm9pZCAwOlxuICAgICAgICBjYXNlICExOlxuICAgICAgICBjYXNlICEwOlxuICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBxID0gbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHEpIHtcbiAgICAgIGNhc2Ugdm9pZCAwOlxuICAgICAgY2FzZSAhMTpcbiAgICAgIGNhc2UgITA6XG4gICAgICBjYXNlIG51bGw6XG4gICAgICBjYXNlIGM6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkYShiKSB7XG4gICAgc3dpdGNoIChiKSB7XG4gICAgICBjYXNlIHZvaWQgMDpcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgRSA9IGNhLmxlbmd0aCA9IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzd2l0Y2ggKGIuY29uc3RydWN0b3IpIHtcbiAgICAgICAgICBjYXNlIEFycmF5OlxuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDAsIGQgPSBiLmxlbmd0aDsgYyA8IGQ7ICsrYykge1xuICAgICAgICAgICAgICBkYShiW2NdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIEZ1bmN0aW9uOlxuICAgICAgICAgICAgY2FbRSsrXSA9IGI7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgQm9vbGVhbjpcbiAgICAgICAgICAgIGxhID0gISFiIHwgMDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIGRhO1xuICB9XG5cbiAgZnVuY3Rpb24gZWEoYikge1xuICAgIGZvciAodmFyIGMgaW4gYikge1xuICAgICAgdmFyIGQgPSBiW2NdO1xuXG4gICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgY2FzZSBcImtleWZyYW1lXCI6XG4gICAgICAgICAgUSA9IGQgfCAwO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJnbG9iYWxcIjpcbiAgICAgICAgICBZID0gZCB8IDA7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImNhc2NhZGVcIjpcbiAgICAgICAgICB6ID0gZCB8IDA7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImNvbXByZXNzXCI6XG4gICAgICAgICAgb2EgPSBkIHwgMDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwic2VtaWNvbG9uXCI6XG4gICAgICAgICAga2EgPSBkIHwgMDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwicHJlc2VydmVcIjpcbiAgICAgICAgICBYID0gZCB8IDA7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInByZWZpeFwiOlxuICAgICAgICAgIGJhID0gbnVsbCwgZCA/IFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGQgPyB3ID0gMSA6ICh3ID0gMiwgYmEgPSBkKSA6IHcgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlYTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEYoYiwgYykge1xuICAgIGlmICh2b2lkIDAgIT09IHRoaXMgJiYgdGhpcy5jb25zdHJ1Y3RvciA9PT0gRikgcmV0dXJuIGZhKGIpO1xuICAgIHZhciBkID0gYixcbiAgICAgICAgayA9IGQuY2hhckNvZGVBdCgwKTtcbiAgICAzMyA+IGsgJiYgKGsgPSAoZCA9IGQudHJpbSgpKS5jaGFyQ29kZUF0KDApKTtcbiAgICAwIDwgUSAmJiAoVCA9IGQucmVwbGFjZShHYSwgOTEgPT09IGsgPyBcIlwiIDogXCItXCIpKTtcbiAgICBrID0gMTtcbiAgICAxID09PSB6ID8gUiA9IGQgOiBLID0gZDtcbiAgICBkID0gW1JdO1xuXG4gICAgaWYgKDAgPCBFKSB7XG4gICAgICB2YXIgbCA9IE8oLTEsIGMsIGQsIGQsIEksIHksIDAsIDAsIDApO1xuICAgICAgdm9pZCAwICE9PSBsICYmIFwic3RyaW5nXCIgPT09IHR5cGVvZiBsICYmIChjID0gbCk7XG4gICAgfVxuXG4gICAgdmFyIGEgPSBWKFcsIGQsIGMsIDAsIDApO1xuICAgIDAgPCBFICYmIChsID0gTygtMiwgYSwgZCwgZCwgSSwgeSwgYS5sZW5ndGgsIDAsIDApLCB2b2lkIDAgIT09IGwgJiYgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIChhID0gbCkgJiYgKGsgPSAwKSk7XG4gICAgSyA9IFIgPSBUID0gXCJcIjtcbiAgICBKID0gMDtcbiAgICB5ID0gSSA9IDE7XG4gICAgcmV0dXJuIDAgPT09IG9hICogayA/IGEgOiBhLnJlcGxhY2UoUCwgXCJcIikucmVwbGFjZShIYSwgXCJcIikucmVwbGFjZShJYSwgXCIkMVwiKS5yZXBsYWNlKEphLCBcIiQxXCIpLnJlcGxhY2UoS2EsIFwiIFwiKTtcbiAgfVxuXG4gIHZhciBxYSA9IC9eXFwwKy9nLFxuICAgICAgUCA9IC9bXFwwXFxyXFxmXS9nLFxuICAgICAgbmEgPSAvOiAqL2csXG4gICAgICBCYSA9IC96b298Z3JhLyxcbiAgICAgIERhID0gLyhbLDogXSkodHJhbnNmb3JtKS9nLFxuICAgICAgemEgPSAvLCtcXHMqKD8hW14oXSpbKV0pL2csXG4gICAgICBBYSA9IC8gK1xccyooPyFbXihdKlspXSkvZyxcbiAgICAgIHVhID0gLyAqW1xcMF0gKi9nLFxuICAgICAgeGEgPSAvLFxccis/L2csXG4gICAgICBNID0gLyhbXFx0XFxyXFxuIF0pKlxcZj8mL2csXG4gICAgICB5YSA9IC86Z2xvYmFsXFwoKCg/OlteXFwoXFwpXFxbXFxdXSp8XFxbLipcXF18XFwoW15cXChcXCldKlxcKSkqKVxcKS9nLFxuICAgICAgR2EgPSAvXFxXKy9nLFxuICAgICAgdGEgPSAvQChrXFx3KylcXHMqKFxcUyopXFxzKi8sXG4gICAgICBaID0gLzo6KHBsYWNlKS9nLFxuICAgICAgd2EgPSAvOihyZWFkLW9ubHkpL2csXG4gICAgICBIYSA9IC9cXHMrKD89W3tcXF07PTo+XSkvZyxcbiAgICAgIElhID0gLyhbW309Oj5dKVxccysvZyxcbiAgICAgIEphID0gLyhcXHtbXntdKz8pOyg/PVxcfSkvZyxcbiAgICAgIEthID0gL1xcc3syLH0vZyxcbiAgICAgIHZhID0gLyhbXlxcKF0pKDorKSAqL2csXG4gICAgICBhYSA9IC9bc3ZoXVxcdystW3RibHJdezJ9LyxcbiAgICAgIHJhID0gL1xcKFxccyooLiopXFxzKlxcKS9nLFxuICAgICAgRmEgPSAvKFteXSo/KTsvZyxcbiAgICAgIENhID0gLy1zZWxmfGZsZXgtL2csXG4gICAgICBFYSA9IC9bXl0qPyg6W3JwXVtlbF1hW1xcdy1dKylbXl0qLyxcbiAgICAgIHkgPSAxLFxuICAgICAgSSA9IDEsXG4gICAgICBKID0gMCxcbiAgICAgIHogPSAxLFxuICAgICAgdyA9IDEsXG4gICAgICBZID0gMSxcbiAgICAgIG9hID0gMCxcbiAgICAgIGthID0gMCxcbiAgICAgIFggPSAwLFxuICAgICAgVyA9IFtdLFxuICAgICAgY2EgPSBbXSxcbiAgICAgIEUgPSAwLFxuICAgICAgYmEgPSBudWxsLFxuICAgICAgbGEgPSAwLFxuICAgICAgUSA9IDEsXG4gICAgICBUID0gXCJcIixcbiAgICAgIEsgPSBcIlwiLFxuICAgICAgUiA9IFwiXCI7XG4gIEYudXNlID0gZGE7XG4gIEYuc2V0ID0gZWE7XG4gIHZvaWQgMCAhPT0gaGEgJiYgZWEoaGEpO1xuICByZXR1cm4gRjtcbn07XG5cbnZhciBtZW1vaXplID0gZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn07XG52YXIgU1RZTEVTX0tFWSA9ICdfX2Vtb3Rpb25fc3R5bGVzJztcbnZhciB1bml0bGVzcyA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lcy5qcy5tYXBcblxuXG4vKioqLyB9KSxcbi8qIDEwNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX3N0eWxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xuXG52YXIgX3N0eWxlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHlsZXMpO1xuXG52YXIgX2RhdGFTZXJ2aWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XG5cbnZhciBfZGF0YVNlcnZpY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGF0YVNlcnZpY2UpO1xuXG52YXIgX3N0b3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7XG5cbnZhciBfc3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RvcmUpO1xuXG52YXIgX3V0aWxpdGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xuXG52YXIgX2lmcmFtZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzMpO1xuXG52YXIgX2lmcmFtZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pZnJhbWUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBET01BSU4gPSAnYWRtaW4udHlwZWZvcm0uY29tJztcbnZhciBUWVBFID0gJ3BvcHVwJztcbnZhciBERUZBVUxUX0FVVE9DTE9TRV9USU1FT1VUID0gNTtcblxudmFyIFdyYXBwZXIgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdkaXYnLCB7XG4gIHRhcmdldDogJ2U0NTUwaDQwJ1xufSkoJ3Zpc2liaWxpdHk6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAub3BlbiA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nO1xufSwgJztvcGFjaXR5OicsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLm9wZW4gPyAxIDogMDtcbn0sICc7YmFja2dyb3VuZC1jb2xvcjonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5iYWNrZ3JvdW5kQ29sb3I7XG59LCAnO3Bvc2l0aW9uOmZpeGVkICFpbXBvcnRhbnQ7ei1pbmRleDoxMDAwO2xlZnQ6MCAhaW1wb3J0YW50O3JpZ2h0OjAgIWltcG9ydGFudDt0b3A6MCAhaW1wb3J0YW50O2JvdHRvbTowICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnQ7aGVpZ2h0OjEwMCU7dHJhbnNpdGlvbjphbGwgNDAwbXMgZWFzZTsnKTtcblxudmFyIENsb3NlV3JhcHBlciA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlczIuZGVmYXVsdCkoJ2RpdicsIHtcbiAgdGFyZ2V0OiAnZTQ1NTBoNDEnXG59KSgncG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAxO3RvcDowO3JpZ2h0OjA7Zm9udC1zaXplOjIwcHg7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt3aWR0aDo1MHB4O2hlaWdodDo1MHB4OycpO1xuXG52YXIgY2xvc2VBcnJvdyA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlcy5jc3MpKCdib3JkZXItcmFkaXVzOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MnB4O3dpZHRoOjI1cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NnB4O3RvcDo2cHg7Jyk7XG5cbnZhciBBcnJvd0xlZnQgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdzcGFuJywge1xuICB0YXJnZXQ6ICdlNDU1MGg0Midcbn0pKGNsb3NlQXJyb3csICdcXG4gIGJhY2tncm91bmQtY29sb3I6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYmFja2dyb3VuZENvbG9yO1xufSwgJzt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMTNweCkgcm90YXRlM2QoMCwwLDEsLTEzNWRlZyk7Jyk7XG5cbnZhciBBcnJvd1JpZ2h0ID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KSgnc3BhbicsIHtcbiAgdGFyZ2V0OiAnZTQ1NTBoNDMnXG59KShjbG9zZUFycm93LCAnXFxuICBiYWNrZ3JvdW5kLWNvbG9yOicsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLmJhY2tncm91bmRDb2xvcjtcbn0sICc7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDEzcHgpIHJvdGF0ZTNkKDAsMCwxLC00NWRlZyk7Jyk7XG5cbigwLCBfc3R5bGVzLmluamVjdEdsb2JhbCkoJy5fX3R5cGVmb3JtLWVtYmVkLW1vYmlsZS1tb2RhbC1vcGVue292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50O3Bvc2l0aW9uOmZpeGVkICFpbXBvcnRhbnQ7dG9wOjAgIWltcG9ydGFudDtsZWZ0OjAgIWltcG9ydGFudDtyaWdodDowICFpbXBvcnRhbnQ7Ym90dG9tOjAgIWltcG9ydGFudDt9Jyk7XG5cbnZhciBNb2JpbGVNb2RhbCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhNb2JpbGVNb2RhbCwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTW9iaWxlTW9kYWwocHJvcHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTW9iaWxlTW9kYWwpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKE1vYmlsZU1vZGFsLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTW9iaWxlTW9kYWwpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgIGJ1dHRvbkNvbG9yOiAnI0ZGRidcbiAgICB9O1xuXG4gICAgX3RoaXMub25BdXRvQ2xvc2UgPSBfdGhpcy5vbkF1dG9DbG9zZS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkZvcm1TdWJtaXQgPSBfdGhpcy5vbkZvcm1TdWJtaXQuYmluZChfdGhpcyk7XG4gICAgX3RoaXMuY2xvc2UgPSBfdGhpcy5jbG9zZS5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTW9iaWxlTW9kYWwsIFt7XG4gICAga2V5OiAnb25BdXRvQ2xvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkF1dG9DbG9zZShlKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIGNhblNldEF1dG9jbG9zZURlbGF5ID0gZS5kZXRhaWwuaXNQcm9QbHVzIHx8IGUuZGV0YWlsLmNhblNldEF1dG9jbG9zZURlbGF5O1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNBdXRvQ2xvc2VFbmFibGVkID0gX3Byb3BzLmlzQXV0b0Nsb3NlRW5hYmxlZCxcbiAgICAgICAgICBhdXRvQ2xvc2UgPSBfcHJvcHMuYXV0b0Nsb3NlO1xuXG4gICAgICB2YXIgdGltZW91dCA9IChjYW5TZXRBdXRvY2xvc2VEZWxheSA/IGF1dG9DbG9zZSA6IERFRkFVTFRfQVVUT0NMT1NFX1RJTUVPVVQpICogMTAwMDtcblxuICAgICAgaWYgKGlzQXV0b0Nsb3NlRW5hYmxlZCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25Gb3JtU3VibWl0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Gb3JtU3VibWl0KCkge1xuICAgICAgdmFyIG9uU3VibWl0ID0gdGhpcy5wcm9wcy5vblN1Ym1pdDtcblxuICAgICAgb25TdWJtaXQgJiYgb25TdWJtaXQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIHVpZCA9IF9kYXRhU2VydmljZTIuZGVmYXVsdC5nZXRVaWRGcm9tVVJMKHRoaXMucHJvcHMudXJsKTtcblxuICAgICAgX2RhdGFTZXJ2aWNlMi5kZWZhdWx0LmdldEZvcm1EYXRhKHVpZCwgRE9NQUlOKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3N0b3JlMi5kZWZhdWx0KSh1aWQsIFRZUEUsIF90aGlzMy5wcm9wcy51cmwsIF90aGlzMy5wcm9wcy5idXR0b25UZXh0LCBkYXRhKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGZvcm0gPSBfcmVmLmZvcm07XG5cbiAgICAgICAgX3RoaXMzLnNldFN0YXRlKHtcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjJyArIGZvcm1bJ2JhY2tncm91bmQtY29sb3InXSxcbiAgICAgICAgICBidXR0b25Db2xvcjogJyMnICsgZm9ybVsnYnV0dG9uLWNvbG9yJ11cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBfdXRpbGl0aWVzLm9uTWVzc2FnZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZW1iZWQtYXV0by1jbG9zZS1wb3B1cCcsIHRoaXMub25BdXRvQ2xvc2UpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Zvcm0tc3VibWl0JywgdGhpcy5vbkZvcm1TdWJtaXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIF91dGlsaXRpZXMub25NZXNzYWdlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdlbWJlZC1hdXRvLWNsb3NlLXBvcHVwJywgdGhpcy5vbkF1dG9DbG9zZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9ybS1zdWJtaXQnLCB0aGlzLm9uRm9ybVN1Ym1pdCk7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnX190eXBlZm9ybS1lbWJlZC1tb2JpbGUtbW9kYWwtb3BlbicpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Nsb3NlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ19fdHlwZWZvcm0tZW1iZWQtbW9iaWxlLW1vZGFsLW9wZW4nKTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25DbG9zZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgdXJsID0gX3Byb3BzMi51cmwsXG4gICAgICAgICAgb3BlbiA9IF9wcm9wczIub3BlbjtcbiAgICAgIHZhciBfc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IF9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgYnV0dG9uQ29sb3IgPSBfc3RhdGUuYnV0dG9uQ29sb3I7XG5cblxuICAgICAgaWYgKHRoaXMucHJvcHMub3Blbikge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ19fdHlwZWZvcm0tZW1iZWQtbW9iaWxlLW1vZGFsLW9wZW4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBXcmFwcGVyLFxuICAgICAgICB7XG4gICAgICAgICAgb3Blbjogb3BlbixcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAnZGF0YS1xYSc6ICdtb2JpbGUtbW9kYWwnXG4gICAgICAgIH0sXG4gICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIENsb3NlV3JhcHBlcixcbiAgICAgICAgICB7ICdkYXRhLXFhJzogJ2Nsb3NlLWJ1dHRvbi1tb2JpbGUnLCBvbkNsaWNrOiB0aGlzLmNsb3NlIH0sXG4gICAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQXJyb3dMZWZ0LCB7IGJhY2tncm91bmRDb2xvcjogYnV0dG9uQ29sb3IgfSksXG4gICAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQXJyb3dSaWdodCwgeyBiYWNrZ3JvdW5kQ29sb3I6IGJ1dHRvbkNvbG9yIH0pXG4gICAgICAgICksXG4gICAgICAgIG9wZW4gJiYgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX2lmcmFtZTIuZGVmYXVsdCwgeyBzcmM6IHVybCB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTW9iaWxlTW9kYWw7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5Nb2JpbGVNb2RhbC5wcm9wVHlwZXMgPSB7XG4gIHVybDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIG9wZW46IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgYnV0dG9uVGV4dDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIG9uQ2xvc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgb25TdWJtaXQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgYXV0b0Nsb3NlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlclxufTtcblxuTW9iaWxlTW9kYWwuZGVmYXVsdFByb3BzID0ge1xuICBvcGVuOiBmYWxzZSxcbiAgYXV0b0Nsb3NlOiBudWxsXG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBNb2JpbGVNb2RhbDtcblxuLyoqKi8gfSksXG4vKiAxMDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fOy8vIFRpbnlDb2xvciB2MS40LjFcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZ3JpbnMvVGlueUNvbG9yXG4vLyBCcmlhbiBHcmluc3RlYWQsIE1JVCBMaWNlbnNlXG5cbihmdW5jdGlvbihNYXRoKSB7XG5cbnZhciB0cmltTGVmdCA9IC9eXFxzKy8sXG4gICAgdHJpbVJpZ2h0ID0gL1xccyskLyxcbiAgICB0aW55Q291bnRlciA9IDAsXG4gICAgbWF0aFJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICBtYXRoTWluID0gTWF0aC5taW4sXG4gICAgbWF0aE1heCA9IE1hdGgubWF4LFxuICAgIG1hdGhSYW5kb20gPSBNYXRoLnJhbmRvbTtcblxuZnVuY3Rpb24gdGlueWNvbG9yIChjb2xvciwgb3B0cykge1xuXG4gICAgY29sb3IgPSAoY29sb3IpID8gY29sb3IgOiAnJztcbiAgICBvcHRzID0gb3B0cyB8fCB7IH07XG5cbiAgICAvLyBJZiBpbnB1dCBpcyBhbHJlYWR5IGEgdGlueWNvbG9yLCByZXR1cm4gaXRzZWxmXG4gICAgaWYgKGNvbG9yIGluc3RhbmNlb2YgdGlueWNvbG9yKSB7XG4gICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGNhbGwgdXNpbmcgbmV3IGluc3RlYWRcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgdGlueWNvbG9yKSkge1xuICAgICAgICByZXR1cm4gbmV3IHRpbnljb2xvcihjb2xvciwgb3B0cyk7XG4gICAgfVxuXG4gICAgdmFyIHJnYiA9IGlucHV0VG9SR0IoY29sb3IpO1xuICAgIHRoaXMuX29yaWdpbmFsSW5wdXQgPSBjb2xvcixcbiAgICB0aGlzLl9yID0gcmdiLnIsXG4gICAgdGhpcy5fZyA9IHJnYi5nLFxuICAgIHRoaXMuX2IgPSByZ2IuYixcbiAgICB0aGlzLl9hID0gcmdiLmEsXG4gICAgdGhpcy5fcm91bmRBID0gbWF0aFJvdW5kKDEwMCp0aGlzLl9hKSAvIDEwMCxcbiAgICB0aGlzLl9mb3JtYXQgPSBvcHRzLmZvcm1hdCB8fCByZ2IuZm9ybWF0O1xuICAgIHRoaXMuX2dyYWRpZW50VHlwZSA9IG9wdHMuZ3JhZGllbnRUeXBlO1xuXG4gICAgLy8gRG9uJ3QgbGV0IHRoZSByYW5nZSBvZiBbMCwyNTVdIGNvbWUgYmFjayBpbiBbMCwxXS5cbiAgICAvLyBQb3RlbnRpYWxseSBsb3NlIGEgbGl0dGxlIGJpdCBvZiBwcmVjaXNpb24gaGVyZSwgYnV0IHdpbGwgZml4IGlzc3VlcyB3aGVyZVxuICAgIC8vIC41IGdldHMgaW50ZXJwcmV0ZWQgYXMgaGFsZiBvZiB0aGUgdG90YWwsIGluc3RlYWQgb2YgaGFsZiBvZiAxXG4gICAgLy8gSWYgaXQgd2FzIHN1cHBvc2VkIHRvIGJlIDEyOCwgdGhpcyB3YXMgYWxyZWFkeSB0YWtlbiBjYXJlIG9mIGJ5IGBpbnB1dFRvUmdiYFxuICAgIGlmICh0aGlzLl9yIDwgMSkgeyB0aGlzLl9yID0gbWF0aFJvdW5kKHRoaXMuX3IpOyB9XG4gICAgaWYgKHRoaXMuX2cgPCAxKSB7IHRoaXMuX2cgPSBtYXRoUm91bmQodGhpcy5fZyk7IH1cbiAgICBpZiAodGhpcy5fYiA8IDEpIHsgdGhpcy5fYiA9IG1hdGhSb3VuZCh0aGlzLl9iKTsgfVxuXG4gICAgdGhpcy5fb2sgPSByZ2Iub2s7XG4gICAgdGhpcy5fdGNfaWQgPSB0aW55Q291bnRlcisrO1xufVxuXG50aW55Y29sb3IucHJvdG90eXBlID0ge1xuICAgIGlzRGFyazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJyaWdodG5lc3MoKSA8IDEyODtcbiAgICB9LFxuICAgIGlzTGlnaHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNEYXJrKCk7XG4gICAgfSxcbiAgICBpc1ZhbGlkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29rO1xuICAgIH0sXG4gICAgZ2V0T3JpZ2luYWxJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dDtcbiAgICB9LFxuICAgIGdldEZvcm1hdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXQ7XG4gICAgfSxcbiAgICBnZXRBbHBoYTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hO1xuICAgIH0sXG4gICAgZ2V0QnJpZ2h0bmVzczogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vaHR0cDovL3d3dy53My5vcmcvVFIvQUVSVCNjb2xvci1jb250cmFzdFxuICAgICAgICB2YXIgcmdiID0gdGhpcy50b1JnYigpO1xuICAgICAgICByZXR1cm4gKHJnYi5yICogMjk5ICsgcmdiLmcgKiA1ODcgKyByZ2IuYiAqIDExNCkgLyAxMDAwO1xuICAgIH0sXG4gICAgZ2V0THVtaW5hbmNlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy9odHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICAgICAgIHZhciByZ2IgPSB0aGlzLnRvUmdiKCk7XG4gICAgICAgIHZhciBSc1JHQiwgR3NSR0IsIEJzUkdCLCBSLCBHLCBCO1xuICAgICAgICBSc1JHQiA9IHJnYi5yLzI1NTtcbiAgICAgICAgR3NSR0IgPSByZ2IuZy8yNTU7XG4gICAgICAgIEJzUkdCID0gcmdiLmIvMjU1O1xuXG4gICAgICAgIGlmIChSc1JHQiA8PSAwLjAzOTI4KSB7UiA9IFJzUkdCIC8gMTIuOTI7fSBlbHNlIHtSID0gTWF0aC5wb3coKChSc1JHQiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KTt9XG4gICAgICAgIGlmIChHc1JHQiA8PSAwLjAzOTI4KSB7RyA9IEdzUkdCIC8gMTIuOTI7fSBlbHNlIHtHID0gTWF0aC5wb3coKChHc1JHQiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KTt9XG4gICAgICAgIGlmIChCc1JHQiA8PSAwLjAzOTI4KSB7QiA9IEJzUkdCIC8gMTIuOTI7fSBlbHNlIHtCID0gTWF0aC5wb3coKChCc1JHQiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KTt9XG4gICAgICAgIHJldHVybiAoMC4yMTI2ICogUikgKyAoMC43MTUyICogRykgKyAoMC4wNzIyICogQik7XG4gICAgfSxcbiAgICBzZXRBbHBoYTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdGhpcy5fYSA9IGJvdW5kQWxwaGEodmFsdWUpO1xuICAgICAgICB0aGlzLl9yb3VuZEEgPSBtYXRoUm91bmQoMTAwKnRoaXMuX2EpIC8gMTAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHRvSHN2OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhzdiA9IHJnYlRvSHN2KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IpO1xuICAgICAgICByZXR1cm4geyBoOiBoc3YuaCAqIDM2MCwgczogaHN2LnMsIHY6IGhzdi52LCBhOiB0aGlzLl9hIH07XG4gICAgfSxcbiAgICB0b0hzdlN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBoc3YgPSByZ2JUb0hzdih0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iKTtcbiAgICAgICAgdmFyIGggPSBtYXRoUm91bmQoaHN2LmggKiAzNjApLCBzID0gbWF0aFJvdW5kKGhzdi5zICogMTAwKSwgdiA9IG1hdGhSb3VuZChoc3YudiAqIDEwMCk7XG4gICAgICAgIHJldHVybiAodGhpcy5fYSA9PSAxKSA/XG4gICAgICAgICAgXCJoc3YoXCIgICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgdiArIFwiJSlcIiA6XG4gICAgICAgICAgXCJoc3ZhKFwiICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgdiArIFwiJSwgXCIrIHRoaXMuX3JvdW5kQSArIFwiKVwiO1xuICAgIH0sXG4gICAgdG9Ic2w6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaHNsID0gcmdiVG9Ic2wodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYik7XG4gICAgICAgIHJldHVybiB7IGg6IGhzbC5oICogMzYwLCBzOiBoc2wucywgbDogaHNsLmwsIGE6IHRoaXMuX2EgfTtcbiAgICB9LFxuICAgIHRvSHNsU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhzbCA9IHJnYlRvSHNsKHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IpO1xuICAgICAgICB2YXIgaCA9IG1hdGhSb3VuZChoc2wuaCAqIDM2MCksIHMgPSBtYXRoUm91bmQoaHNsLnMgKiAxMDApLCBsID0gbWF0aFJvdW5kKGhzbC5sICogMTAwKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9hID09IDEpID9cbiAgICAgICAgICBcImhzbChcIiAgKyBoICsgXCIsIFwiICsgcyArIFwiJSwgXCIgKyBsICsgXCIlKVwiIDpcbiAgICAgICAgICBcImhzbGEoXCIgKyBoICsgXCIsIFwiICsgcyArIFwiJSwgXCIgKyBsICsgXCIlLCBcIisgdGhpcy5fcm91bmRBICsgXCIpXCI7XG4gICAgfSxcbiAgICB0b0hleDogZnVuY3Rpb24oYWxsb3czQ2hhcikge1xuICAgICAgICByZXR1cm4gcmdiVG9IZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgYWxsb3czQ2hhcik7XG4gICAgfSxcbiAgICB0b0hleFN0cmluZzogZnVuY3Rpb24oYWxsb3czQ2hhcikge1xuICAgICAgICByZXR1cm4gJyMnICsgdGhpcy50b0hleChhbGxvdzNDaGFyKTtcbiAgICB9LFxuICAgIHRvSGV4ODogZnVuY3Rpb24oYWxsb3c0Q2hhcikge1xuICAgICAgICByZXR1cm4gcmdiYVRvSGV4KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IsIHRoaXMuX2EsIGFsbG93NENoYXIpO1xuICAgIH0sXG4gICAgdG9IZXg4U3RyaW5nOiBmdW5jdGlvbihhbGxvdzRDaGFyKSB7XG4gICAgICAgIHJldHVybiAnIycgKyB0aGlzLnRvSGV4OChhbGxvdzRDaGFyKTtcbiAgICB9LFxuICAgIHRvUmdiOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHsgcjogbWF0aFJvdW5kKHRoaXMuX3IpLCBnOiBtYXRoUm91bmQodGhpcy5fZyksIGI6IG1hdGhSb3VuZCh0aGlzLl9iKSwgYTogdGhpcy5fYSB9O1xuICAgIH0sXG4gICAgdG9SZ2JTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2EgPT0gMSkgP1xuICAgICAgICAgIFwicmdiKFwiICArIG1hdGhSb3VuZCh0aGlzLl9yKSArIFwiLCBcIiArIG1hdGhSb3VuZCh0aGlzLl9nKSArIFwiLCBcIiArIG1hdGhSb3VuZCh0aGlzLl9iKSArIFwiKVwiIDpcbiAgICAgICAgICBcInJnYmEoXCIgKyBtYXRoUm91bmQodGhpcy5fcikgKyBcIiwgXCIgKyBtYXRoUm91bmQodGhpcy5fZykgKyBcIiwgXCIgKyBtYXRoUm91bmQodGhpcy5fYikgKyBcIiwgXCIgKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgICB9LFxuICAgIHRvUGVyY2VudGFnZVJnYjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7IHI6IG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX3IsIDI1NSkgKiAxMDApICsgXCIlXCIsIGc6IG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2csIDI1NSkgKiAxMDApICsgXCIlXCIsIGI6IG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2IsIDI1NSkgKiAxMDApICsgXCIlXCIsIGE6IHRoaXMuX2EgfTtcbiAgICB9LFxuICAgIHRvUGVyY2VudGFnZVJnYlN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fYSA9PSAxKSA/XG4gICAgICAgICAgXCJyZ2IoXCIgICsgbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fciwgMjU1KSAqIDEwMCkgKyBcIiUsIFwiICsgbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fZywgMjU1KSAqIDEwMCkgKyBcIiUsIFwiICsgbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fYiwgMjU1KSAqIDEwMCkgKyBcIiUpXCIgOlxuICAgICAgICAgIFwicmdiYShcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX3IsIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2csIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2IsIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIHRoaXMuX3JvdW5kQSArIFwiKVwiO1xuICAgIH0sXG4gICAgdG9OYW1lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2EgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoZXhOYW1lc1tyZ2JUb0hleCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iLCB0cnVlKV0gfHwgZmFsc2U7XG4gICAgfSxcbiAgICB0b0ZpbHRlcjogZnVuY3Rpb24oc2Vjb25kQ29sb3IpIHtcbiAgICAgICAgdmFyIGhleDhTdHJpbmcgPSAnIycgKyByZ2JhVG9BcmdiSGV4KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IsIHRoaXMuX2EpO1xuICAgICAgICB2YXIgc2Vjb25kSGV4OFN0cmluZyA9IGhleDhTdHJpbmc7XG4gICAgICAgIHZhciBncmFkaWVudFR5cGUgPSB0aGlzLl9ncmFkaWVudFR5cGUgPyBcIkdyYWRpZW50VHlwZSA9IDEsIFwiIDogXCJcIjtcblxuICAgICAgICBpZiAoc2Vjb25kQ29sb3IpIHtcbiAgICAgICAgICAgIHZhciBzID0gdGlueWNvbG9yKHNlY29uZENvbG9yKTtcbiAgICAgICAgICAgIHNlY29uZEhleDhTdHJpbmcgPSAnIycgKyByZ2JhVG9BcmdiSGV4KHMuX3IsIHMuX2csIHMuX2IsIHMuX2EpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KFwiK2dyYWRpZW50VHlwZStcInN0YXJ0Q29sb3JzdHI9XCIraGV4OFN0cmluZytcIixlbmRDb2xvcnN0cj1cIitzZWNvbmRIZXg4U3RyaW5nK1wiKVwiO1xuICAgIH0sXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICB2YXIgZm9ybWF0U2V0ID0gISFmb3JtYXQ7XG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCB0aGlzLl9mb3JtYXQ7XG5cbiAgICAgICAgdmFyIGZvcm1hdHRlZFN0cmluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgaGFzQWxwaGEgPSB0aGlzLl9hIDwgMSAmJiB0aGlzLl9hID49IDA7XG4gICAgICAgIHZhciBuZWVkc0FscGhhRm9ybWF0ID0gIWZvcm1hdFNldCAmJiBoYXNBbHBoYSAmJiAoZm9ybWF0ID09PSBcImhleFwiIHx8IGZvcm1hdCA9PT0gXCJoZXg2XCIgfHwgZm9ybWF0ID09PSBcImhleDNcIiB8fCBmb3JtYXQgPT09IFwiaGV4NFwiIHx8IGZvcm1hdCA9PT0gXCJoZXg4XCIgfHwgZm9ybWF0ID09PSBcIm5hbWVcIik7XG5cbiAgICAgICAgaWYgKG5lZWRzQWxwaGFGb3JtYXQpIHtcbiAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgXCJ0cmFuc3BhcmVudFwiLCBhbGwgb3RoZXIgbm9uLWFscGhhIGZvcm1hdHNcbiAgICAgICAgICAgIC8vIHdpbGwgcmV0dXJuIHJnYmEgd2hlbiB0aGVyZSBpcyB0cmFuc3BhcmVuY3kuXG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSBcIm5hbWVcIiAmJiB0aGlzLl9hID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9OYW1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b1JnYlN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwicmdiXCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9SZ2JTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInByZ2JcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhleFwiIHx8IGZvcm1hdCA9PT0gXCJoZXg2XCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9IZXhTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhleDNcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleFN0cmluZyh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhleDRcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleDhTdHJpbmcodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoZXg4XCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9IZXg4U3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJuYW1lXCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9OYW1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoc2xcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hzbFN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiaHN2XCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9Ic3ZTdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWRTdHJpbmcgfHwgdGhpcy50b0hleFN0cmluZygpO1xuICAgIH0sXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGlueWNvbG9yKHRoaXMudG9TdHJpbmcoKSk7XG4gICAgfSxcblxuICAgIF9hcHBseU1vZGlmaWNhdGlvbjogZnVuY3Rpb24oZm4sIGFyZ3MpIHtcbiAgICAgICAgdmFyIGNvbG9yID0gZm4uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3MpKSk7XG4gICAgICAgIHRoaXMuX3IgPSBjb2xvci5fcjtcbiAgICAgICAgdGhpcy5fZyA9IGNvbG9yLl9nO1xuICAgICAgICB0aGlzLl9iID0gY29sb3IuX2I7XG4gICAgICAgIHRoaXMuc2V0QWxwaGEoY29sb3IuX2EpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGxpZ2h0ZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obGlnaHRlbiwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGJyaWdodGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGJyaWdodGVuLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZGFya2VuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGRhcmtlbiwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGRlc2F0dXJhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZGVzYXR1cmF0ZSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHNhdHVyYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHNhdHVyYXRlLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZ3JleXNjYWxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGdyZXlzY2FsZSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHNwaW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oc3BpbiwgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgX2FwcGx5Q29tYmluYXRpb246IGZ1bmN0aW9uKGZuLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJncykpKTtcbiAgICB9LFxuICAgIGFuYWxvZ291czogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKGFuYWxvZ291cywgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGNvbXBsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihjb21wbGVtZW50LCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbW9ub2Nocm9tYXRpYzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKG1vbm9jaHJvbWF0aWMsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBzcGxpdGNvbXBsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihzcGxpdGNvbXBsZW1lbnQsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICB0cmlhZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHRyaWFkLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgdGV0cmFkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odGV0cmFkLCBhcmd1bWVudHMpO1xuICAgIH1cbn07XG5cbi8vIElmIGlucHV0IGlzIGFuIG9iamVjdCwgZm9yY2UgMSBpbnRvIFwiMS4wXCIgdG8gaGFuZGxlIHJhdGlvcyBwcm9wZXJseVxuLy8gU3RyaW5nIGlucHV0IHJlcXVpcmVzIFwiMS4wXCIgYXMgaW5wdXQsIHNvIDEgd2lsbCBiZSB0cmVhdGVkIGFzIDFcbnRpbnljb2xvci5mcm9tUmF0aW8gPSBmdW5jdGlvbihjb2xvciwgb3B0cykge1xuICAgIGlmICh0eXBlb2YgY29sb3IgPT0gXCJvYmplY3RcIikge1xuICAgICAgICB2YXIgbmV3Q29sb3IgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBjb2xvcikge1xuICAgICAgICAgICAgaWYgKGNvbG9yLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbG9yW2ldID0gY29sb3JbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdDb2xvcltpXSA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3JbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2xvciA9IG5ld0NvbG9yO1xuICAgIH1cblxuICAgIHJldHVybiB0aW55Y29sb3IoY29sb3IsIG9wdHMpO1xufTtcblxuLy8gR2l2ZW4gYSBzdHJpbmcgb3Igb2JqZWN0LCBjb252ZXJ0IHRoYXQgaW5wdXQgdG8gUkdCXG4vLyBQb3NzaWJsZSBzdHJpbmcgaW5wdXRzOlxuLy9cbi8vICAgICBcInJlZFwiXG4vLyAgICAgXCIjZjAwXCIgb3IgXCJmMDBcIlxuLy8gICAgIFwiI2ZmMDAwMFwiIG9yIFwiZmYwMDAwXCJcbi8vICAgICBcIiNmZjAwMDAwMFwiIG9yIFwiZmYwMDAwMDBcIlxuLy8gICAgIFwicmdiIDI1NSAwIDBcIiBvciBcInJnYiAoMjU1LCAwLCAwKVwiXG4vLyAgICAgXCJyZ2IgMS4wIDAgMFwiIG9yIFwicmdiICgxLCAwLCAwKVwiXG4vLyAgICAgXCJyZ2JhICgyNTUsIDAsIDAsIDEpXCIgb3IgXCJyZ2JhIDI1NSwgMCwgMCwgMVwiXG4vLyAgICAgXCJyZ2JhICgxLjAsIDAsIDAsIDEpXCIgb3IgXCJyZ2JhIDEuMCwgMCwgMCwgMVwiXG4vLyAgICAgXCJoc2woMCwgMTAwJSwgNTAlKVwiIG9yIFwiaHNsIDAgMTAwJSA1MCVcIlxuLy8gICAgIFwiaHNsYSgwLCAxMDAlLCA1MCUsIDEpXCIgb3IgXCJoc2xhIDAgMTAwJSA1MCUsIDFcIlxuLy8gICAgIFwiaHN2KDAsIDEwMCUsIDEwMCUpXCIgb3IgXCJoc3YgMCAxMDAlIDEwMCVcIlxuLy9cbmZ1bmN0aW9uIGlucHV0VG9SR0IoY29sb3IpIHtcblxuICAgIHZhciByZ2IgPSB7IHI6IDAsIGc6IDAsIGI6IDAgfTtcbiAgICB2YXIgYSA9IDE7XG4gICAgdmFyIHMgPSBudWxsO1xuICAgIHZhciB2ID0gbnVsbDtcbiAgICB2YXIgbCA9IG51bGw7XG4gICAgdmFyIG9rID0gZmFsc2U7XG4gICAgdmFyIGZvcm1hdCA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbG9yID0gc3RyaW5nSW5wdXRUb09iamVjdChjb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChpc1ZhbGlkQ1NTVW5pdChjb2xvci5yKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5nKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5iKSkge1xuICAgICAgICAgICAgcmdiID0gcmdiVG9SZ2IoY29sb3IuciwgY29sb3IuZywgY29sb3IuYik7XG4gICAgICAgICAgICBvayA9IHRydWU7XG4gICAgICAgICAgICBmb3JtYXQgPSBTdHJpbmcoY29sb3Iucikuc3Vic3RyKC0xKSA9PT0gXCIlXCIgPyBcInByZ2JcIiA6IFwicmdiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNWYWxpZENTU1VuaXQoY29sb3IuaCkgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IucykgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IudikpIHtcbiAgICAgICAgICAgIHMgPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yLnMpO1xuICAgICAgICAgICAgdiA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3Iudik7XG4gICAgICAgICAgICByZ2IgPSBoc3ZUb1JnYihjb2xvci5oLCBzLCB2KTtcbiAgICAgICAgICAgIG9rID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvcm1hdCA9IFwiaHN2XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNWYWxpZENTU1VuaXQoY29sb3IuaCkgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IucykgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IubCkpIHtcbiAgICAgICAgICAgIHMgPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yLnMpO1xuICAgICAgICAgICAgbCA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3IubCk7XG4gICAgICAgICAgICByZ2IgPSBoc2xUb1JnYihjb2xvci5oLCBzLCBsKTtcbiAgICAgICAgICAgIG9rID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvcm1hdCA9IFwiaHNsXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sb3IuaGFzT3duUHJvcGVydHkoXCJhXCIpKSB7XG4gICAgICAgICAgICBhID0gY29sb3IuYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGEgPSBib3VuZEFscGhhKGEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgb2s6IG9rLFxuICAgICAgICBmb3JtYXQ6IGNvbG9yLmZvcm1hdCB8fCBmb3JtYXQsXG4gICAgICAgIHI6IG1hdGhNaW4oMjU1LCBtYXRoTWF4KHJnYi5yLCAwKSksXG4gICAgICAgIGc6IG1hdGhNaW4oMjU1LCBtYXRoTWF4KHJnYi5nLCAwKSksXG4gICAgICAgIGI6IG1hdGhNaW4oMjU1LCBtYXRoTWF4KHJnYi5iLCAwKSksXG4gICAgICAgIGE6IGFcbiAgICB9O1xufVxuXG5cbi8vIENvbnZlcnNpb24gRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBgcmdiVG9Ic2xgLCBgcmdiVG9Ic3ZgLCBgaHNsVG9SZ2JgLCBgaHN2VG9SZ2JgIG1vZGlmaWVkIGZyb206XG4vLyA8aHR0cDovL21qaWphY2tzb24uY29tLzIwMDgvMDIvcmdiLXRvLWhzbC1hbmQtcmdiLXRvLWhzdi1jb2xvci1tb2RlbC1jb252ZXJzaW9uLWFsZ29yaXRobXMtaW4tamF2YXNjcmlwdD5cblxuLy8gYHJnYlRvUmdiYFxuLy8gSGFuZGxlIGJvdW5kcyAvIHBlcmNlbnRhZ2UgY2hlY2tpbmcgdG8gY29uZm9ybSB0byBDU1MgY29sb3Igc3BlY1xuLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvPlxuLy8gKkFzc3VtZXM6KiByLCBnLCBiIGluIFswLCAyNTVdIG9yIFswLCAxXVxuLy8gKlJldHVybnM6KiB7IHIsIGcsIGIgfSBpbiBbMCwgMjU1XVxuZnVuY3Rpb24gcmdiVG9SZ2IociwgZywgYil7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcjogYm91bmQwMShyLCAyNTUpICogMjU1LFxuICAgICAgICBnOiBib3VuZDAxKGcsIDI1NSkgKiAyNTUsXG4gICAgICAgIGI6IGJvdW5kMDEoYiwgMjU1KSAqIDI1NVxuICAgIH07XG59XG5cbi8vIGByZ2JUb0hzbGBcbi8vIENvbnZlcnRzIGFuIFJHQiBjb2xvciB2YWx1ZSB0byBIU0wuXG4vLyAqQXNzdW1lczoqIHIsIGcsIGFuZCBiIGFyZSBjb250YWluZWQgaW4gWzAsIDI1NV0gb3IgWzAsIDFdXG4vLyAqUmV0dXJuczoqIHsgaCwgcywgbCB9IGluIFswLDFdXG5mdW5jdGlvbiByZ2JUb0hzbChyLCBnLCBiKSB7XG5cbiAgICByID0gYm91bmQwMShyLCAyNTUpO1xuICAgIGcgPSBib3VuZDAxKGcsIDI1NSk7XG4gICAgYiA9IGJvdW5kMDEoYiwgMjU1KTtcblxuICAgIHZhciBtYXggPSBtYXRoTWF4KHIsIGcsIGIpLCBtaW4gPSBtYXRoTWluKHIsIGcsIGIpO1xuICAgIHZhciBoLCBzLCBsID0gKG1heCArIG1pbikgLyAyO1xuXG4gICAgaWYobWF4ID09IG1pbikge1xuICAgICAgICBoID0gcyA9IDA7IC8vIGFjaHJvbWF0aWNcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBkID0gbWF4IC0gbWluO1xuICAgICAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgICAgIHN3aXRjaChtYXgpIHtcbiAgICAgICAgICAgIGNhc2UgcjogaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgZzogaCA9IChiIC0gcikgLyBkICsgMjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGI6IGggPSAociAtIGcpIC8gZCArIDQ7IGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaCAvPSA2O1xuICAgIH1cblxuICAgIHJldHVybiB7IGg6IGgsIHM6IHMsIGw6IGwgfTtcbn1cblxuLy8gYGhzbFRvUmdiYFxuLy8gQ29udmVydHMgYW4gSFNMIGNvbG9yIHZhbHVlIHRvIFJHQi5cbi8vICpBc3N1bWVzOiogaCBpcyBjb250YWluZWQgaW4gWzAsIDFdIG9yIFswLCAzNjBdIGFuZCBzIGFuZCBsIGFyZSBjb250YWluZWQgWzAsIDFdIG9yIFswLCAxMDBdXG4vLyAqUmV0dXJuczoqIHsgciwgZywgYiB9IGluIHRoZSBzZXQgWzAsIDI1NV1cbmZ1bmN0aW9uIGhzbFRvUmdiKGgsIHMsIGwpIHtcbiAgICB2YXIgciwgZywgYjtcblxuICAgIGggPSBib3VuZDAxKGgsIDM2MCk7XG4gICAgcyA9IGJvdW5kMDEocywgMTAwKTtcbiAgICBsID0gYm91bmQwMShsLCAxMDApO1xuXG4gICAgZnVuY3Rpb24gaHVlMnJnYihwLCBxLCB0KSB7XG4gICAgICAgIGlmKHQgPCAwKSB0ICs9IDE7XG4gICAgICAgIGlmKHQgPiAxKSB0IC09IDE7XG4gICAgICAgIGlmKHQgPCAxLzYpIHJldHVybiBwICsgKHEgLSBwKSAqIDYgKiB0O1xuICAgICAgICBpZih0IDwgMS8yKSByZXR1cm4gcTtcbiAgICAgICAgaWYodCA8IDIvMykgcmV0dXJuIHAgKyAocSAtIHApICogKDIvMyAtIHQpICogNjtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuXG4gICAgaWYocyA9PT0gMCkge1xuICAgICAgICByID0gZyA9IGIgPSBsOyAvLyBhY2hyb21hdGljXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgcSA9IGwgPCAwLjUgPyBsICogKDEgKyBzKSA6IGwgKyBzIC0gbCAqIHM7XG4gICAgICAgIHZhciBwID0gMiAqIGwgLSBxO1xuICAgICAgICByID0gaHVlMnJnYihwLCBxLCBoICsgMS8zKTtcbiAgICAgICAgZyA9IGh1ZTJyZ2IocCwgcSwgaCk7XG4gICAgICAgIGIgPSBodWUycmdiKHAsIHEsIGggLSAxLzMpO1xuICAgIH1cblxuICAgIHJldHVybiB7IHI6IHIgKiAyNTUsIGc6IGcgKiAyNTUsIGI6IGIgKiAyNTUgfTtcbn1cblxuLy8gYHJnYlRvSHN2YFxuLy8gQ29udmVydHMgYW4gUkdCIGNvbG9yIHZhbHVlIHRvIEhTVlxuLy8gKkFzc3VtZXM6KiByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV0gb3IgWzAsIDFdXG4vLyAqUmV0dXJuczoqIHsgaCwgcywgdiB9IGluIFswLDFdXG5mdW5jdGlvbiByZ2JUb0hzdihyLCBnLCBiKSB7XG5cbiAgICByID0gYm91bmQwMShyLCAyNTUpO1xuICAgIGcgPSBib3VuZDAxKGcsIDI1NSk7XG4gICAgYiA9IGJvdW5kMDEoYiwgMjU1KTtcblxuICAgIHZhciBtYXggPSBtYXRoTWF4KHIsIGcsIGIpLCBtaW4gPSBtYXRoTWluKHIsIGcsIGIpO1xuICAgIHZhciBoLCBzLCB2ID0gbWF4O1xuXG4gICAgdmFyIGQgPSBtYXggLSBtaW47XG4gICAgcyA9IG1heCA9PT0gMCA/IDAgOiBkIC8gbWF4O1xuXG4gICAgaWYobWF4ID09IG1pbikge1xuICAgICAgICBoID0gMDsgLy8gYWNocm9tYXRpY1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3dpdGNoKG1heCkge1xuICAgICAgICAgICAgY2FzZSByOiBoID0gKGcgLSBiKSAvIGQgKyAoZyA8IGIgPyA2IDogMCk7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBnOiBoID0gKGIgLSByKSAvIGQgKyAyOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYjogaCA9IChyIC0gZykgLyBkICsgNDsgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaCAvPSA2O1xuICAgIH1cbiAgICByZXR1cm4geyBoOiBoLCBzOiBzLCB2OiB2IH07XG59XG5cbi8vIGBoc3ZUb1JnYmBcbi8vIENvbnZlcnRzIGFuIEhTViBjb2xvciB2YWx1ZSB0byBSR0IuXG4vLyAqQXNzdW1lczoqIGggaXMgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMzYwXSBhbmQgcyBhbmQgdiBhcmUgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMTAwXVxuLy8gKlJldHVybnM6KiB7IHIsIGcsIGIgfSBpbiB0aGUgc2V0IFswLCAyNTVdXG4gZnVuY3Rpb24gaHN2VG9SZ2IoaCwgcywgdikge1xuXG4gICAgaCA9IGJvdW5kMDEoaCwgMzYwKSAqIDY7XG4gICAgcyA9IGJvdW5kMDEocywgMTAwKTtcbiAgICB2ID0gYm91bmQwMSh2LCAxMDApO1xuXG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKGgpLFxuICAgICAgICBmID0gaCAtIGksXG4gICAgICAgIHAgPSB2ICogKDEgLSBzKSxcbiAgICAgICAgcSA9IHYgKiAoMSAtIGYgKiBzKSxcbiAgICAgICAgdCA9IHYgKiAoMSAtICgxIC0gZikgKiBzKSxcbiAgICAgICAgbW9kID0gaSAlIDYsXG4gICAgICAgIHIgPSBbdiwgcSwgcCwgcCwgdCwgdl1bbW9kXSxcbiAgICAgICAgZyA9IFt0LCB2LCB2LCBxLCBwLCBwXVttb2RdLFxuICAgICAgICBiID0gW3AsIHAsIHQsIHYsIHYsIHFdW21vZF07XG5cbiAgICByZXR1cm4geyByOiByICogMjU1LCBnOiBnICogMjU1LCBiOiBiICogMjU1IH07XG59XG5cbi8vIGByZ2JUb0hleGBcbi8vIENvbnZlcnRzIGFuIFJHQiBjb2xvciB0byBoZXhcbi8vIEFzc3VtZXMgciwgZywgYW5kIGIgYXJlIGNvbnRhaW5lZCBpbiB0aGUgc2V0IFswLCAyNTVdXG4vLyBSZXR1cm5zIGEgMyBvciA2IGNoYXJhY3RlciBoZXhcbmZ1bmN0aW9uIHJnYlRvSGV4KHIsIGcsIGIsIGFsbG93M0NoYXIpIHtcblxuICAgIHZhciBoZXggPSBbXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKHIpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGcpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGIpLnRvU3RyaW5nKDE2KSlcbiAgICBdO1xuXG4gICAgLy8gUmV0dXJuIGEgMyBjaGFyYWN0ZXIgaGV4IGlmIHBvc3NpYmxlXG4gICAgaWYgKGFsbG93M0NoYXIgJiYgaGV4WzBdLmNoYXJBdCgwKSA9PSBoZXhbMF0uY2hhckF0KDEpICYmIGhleFsxXS5jaGFyQXQoMCkgPT0gaGV4WzFdLmNoYXJBdCgxKSAmJiBoZXhbMl0uY2hhckF0KDApID09IGhleFsyXS5jaGFyQXQoMSkpIHtcbiAgICAgICAgcmV0dXJuIGhleFswXS5jaGFyQXQoMCkgKyBoZXhbMV0uY2hhckF0KDApICsgaGV4WzJdLmNoYXJBdCgwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGV4LmpvaW4oXCJcIik7XG59XG5cbi8vIGByZ2JhVG9IZXhgXG4vLyBDb252ZXJ0cyBhbiBSR0JBIGNvbG9yIHBsdXMgYWxwaGEgdHJhbnNwYXJlbmN5IHRvIGhleFxuLy8gQXNzdW1lcyByLCBnLCBiIGFyZSBjb250YWluZWQgaW4gdGhlIHNldCBbMCwgMjU1XSBhbmRcbi8vIGEgaW4gWzAsIDFdLiBSZXR1cm5zIGEgNCBvciA4IGNoYXJhY3RlciByZ2JhIGhleFxuZnVuY3Rpb24gcmdiYVRvSGV4KHIsIGcsIGIsIGEsIGFsbG93NENoYXIpIHtcblxuICAgIHZhciBoZXggPSBbXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKHIpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGcpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGIpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIoY29udmVydERlY2ltYWxUb0hleChhKSlcbiAgICBdO1xuXG4gICAgLy8gUmV0dXJuIGEgNCBjaGFyYWN0ZXIgaGV4IGlmIHBvc3NpYmxlXG4gICAgaWYgKGFsbG93NENoYXIgJiYgaGV4WzBdLmNoYXJBdCgwKSA9PSBoZXhbMF0uY2hhckF0KDEpICYmIGhleFsxXS5jaGFyQXQoMCkgPT0gaGV4WzFdLmNoYXJBdCgxKSAmJiBoZXhbMl0uY2hhckF0KDApID09IGhleFsyXS5jaGFyQXQoMSkgJiYgaGV4WzNdLmNoYXJBdCgwKSA9PSBoZXhbM10uY2hhckF0KDEpKSB7XG4gICAgICAgIHJldHVybiBoZXhbMF0uY2hhckF0KDApICsgaGV4WzFdLmNoYXJBdCgwKSArIGhleFsyXS5jaGFyQXQoMCkgKyBoZXhbM10uY2hhckF0KDApO1xuICAgIH1cblxuICAgIHJldHVybiBoZXguam9pbihcIlwiKTtcbn1cblxuLy8gYHJnYmFUb0FyZ2JIZXhgXG4vLyBDb252ZXJ0cyBhbiBSR0JBIGNvbG9yIHRvIGFuIEFSR0IgSGV4OCBzdHJpbmdcbi8vIFJhcmVseSB1c2VkLCBidXQgcmVxdWlyZWQgZm9yIFwidG9GaWx0ZXIoKVwiXG5mdW5jdGlvbiByZ2JhVG9BcmdiSGV4KHIsIGcsIGIsIGEpIHtcblxuICAgIHZhciBoZXggPSBbXG4gICAgICAgIHBhZDIoY29udmVydERlY2ltYWxUb0hleChhKSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKHIpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGcpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGIpLnRvU3RyaW5nKDE2KSlcbiAgICBdO1xuXG4gICAgcmV0dXJuIGhleC5qb2luKFwiXCIpO1xufVxuXG4vLyBgZXF1YWxzYFxuLy8gQ2FuIGJlIGNhbGxlZCB3aXRoIGFueSB0aW55Y29sb3IgaW5wdXRcbnRpbnljb2xvci5lcXVhbHMgPSBmdW5jdGlvbiAoY29sb3IxLCBjb2xvcjIpIHtcbiAgICBpZiAoIWNvbG9yMSB8fCAhY29sb3IyKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiB0aW55Y29sb3IoY29sb3IxKS50b1JnYlN0cmluZygpID09IHRpbnljb2xvcihjb2xvcjIpLnRvUmdiU3RyaW5nKCk7XG59O1xuXG50aW55Y29sb3IucmFuZG9tID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpbnljb2xvci5mcm9tUmF0aW8oe1xuICAgICAgICByOiBtYXRoUmFuZG9tKCksXG4gICAgICAgIGc6IG1hdGhSYW5kb20oKSxcbiAgICAgICAgYjogbWF0aFJhbmRvbSgpXG4gICAgfSk7XG59O1xuXG5cbi8vIE1vZGlmaWNhdGlvbiBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoYW5rcyB0byBsZXNzLmpzIGZvciBzb21lIG9mIHRoZSBiYXNpY3MgaGVyZVxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9jbG91ZGhlYWQvbGVzcy5qcy9ibG9iL21hc3Rlci9saWIvbGVzcy9mdW5jdGlvbnMuanM+XG5cbmZ1bmN0aW9uIGRlc2F0dXJhdGUoY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgaHNsLnMgLT0gYW1vdW50IC8gMTAwO1xuICAgIGhzbC5zID0gY2xhbXAwMShoc2wucyk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG5mdW5jdGlvbiBzYXR1cmF0ZShjb2xvciwgYW1vdW50KSB7XG4gICAgYW1vdW50ID0gKGFtb3VudCA9PT0gMCkgPyAwIDogKGFtb3VudCB8fCAxMCk7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICBoc2wucyArPSBhbW91bnQgLyAxMDA7XG4gICAgaHNsLnMgPSBjbGFtcDAxKGhzbC5zKTtcbiAgICByZXR1cm4gdGlueWNvbG9yKGhzbCk7XG59XG5cbmZ1bmN0aW9uIGdyZXlzY2FsZShjb2xvcikge1xuICAgIHJldHVybiB0aW55Y29sb3IoY29sb3IpLmRlc2F0dXJhdGUoMTAwKTtcbn1cblxuZnVuY3Rpb24gbGlnaHRlbiAoY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgaHNsLmwgKz0gYW1vdW50IC8gMTAwO1xuICAgIGhzbC5sID0gY2xhbXAwMShoc2wubCk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG5mdW5jdGlvbiBicmlnaHRlbihjb2xvciwgYW1vdW50KSB7XG4gICAgYW1vdW50ID0gKGFtb3VudCA9PT0gMCkgPyAwIDogKGFtb3VudCB8fCAxMCk7XG4gICAgdmFyIHJnYiA9IHRpbnljb2xvcihjb2xvcikudG9SZ2IoKTtcbiAgICByZ2IuciA9IG1hdGhNYXgoMCwgbWF0aE1pbigyNTUsIHJnYi5yIC0gbWF0aFJvdW5kKDI1NSAqIC0gKGFtb3VudCAvIDEwMCkpKSk7XG4gICAgcmdiLmcgPSBtYXRoTWF4KDAsIG1hdGhNaW4oMjU1LCByZ2IuZyAtIG1hdGhSb3VuZCgyNTUgKiAtIChhbW91bnQgLyAxMDApKSkpO1xuICAgIHJnYi5iID0gbWF0aE1heCgwLCBtYXRoTWluKDI1NSwgcmdiLmIgLSBtYXRoUm91bmQoMjU1ICogLSAoYW1vdW50IC8gMTAwKSkpKTtcbiAgICByZXR1cm4gdGlueWNvbG9yKHJnYik7XG59XG5cbmZ1bmN0aW9uIGRhcmtlbiAoY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgaHNsLmwgLT0gYW1vdW50IC8gMTAwO1xuICAgIGhzbC5sID0gY2xhbXAwMShoc2wubCk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG4vLyBTcGluIHRha2VzIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgYW1vdW50IHdpdGhpbiBbLTM2MCwgMzYwXSBpbmRpY2F0aW5nIHRoZSBjaGFuZ2Ugb2YgaHVlLlxuLy8gVmFsdWVzIG91dHNpZGUgb2YgdGhpcyByYW5nZSB3aWxsIGJlIHdyYXBwZWQgaW50byB0aGlzIHJhbmdlLlxuZnVuY3Rpb24gc3Bpbihjb2xvciwgYW1vdW50KSB7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICB2YXIgaHVlID0gKGhzbC5oICsgYW1vdW50KSAlIDM2MDtcbiAgICBoc2wuaCA9IGh1ZSA8IDAgPyAzNjAgKyBodWUgOiBodWU7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG4vLyBDb21iaW5hdGlvbiBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhhbmtzIHRvIGpRdWVyeSB4Q29sb3IgZm9yIHNvbWUgb2YgdGhlIGlkZWFzIGJlaGluZCB0aGVzZVxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9pbmZ1c2lvbi9qUXVlcnkteGNvbG9yL2Jsb2IvbWFzdGVyL2pxdWVyeS54Y29sb3IuanM+XG5cbmZ1bmN0aW9uIGNvbXBsZW1lbnQoY29sb3IpIHtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIGhzbC5oID0gKGhzbC5oICsgMTgwKSAlIDM2MDtcbiAgICByZXR1cm4gdGlueWNvbG9yKGhzbCk7XG59XG5cbmZ1bmN0aW9uIHRyaWFkKGNvbG9yKSB7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICB2YXIgaCA9IGhzbC5oO1xuICAgIHJldHVybiBbXG4gICAgICAgIHRpbnljb2xvcihjb2xvciksXG4gICAgICAgIHRpbnljb2xvcih7IGg6IChoICsgMTIwKSAlIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sIH0pLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDI0MCkgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubCB9KVxuICAgIF07XG59XG5cbmZ1bmN0aW9uIHRldHJhZChjb2xvcikge1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgdmFyIGggPSBoc2wuaDtcbiAgICByZXR1cm4gW1xuICAgICAgICB0aW55Y29sb3IoY29sb3IpLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDkwKSAlIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sIH0pLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDE4MCkgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubCB9KSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyAyNzApICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmwgfSlcbiAgICBdO1xufVxuXG5mdW5jdGlvbiBzcGxpdGNvbXBsZW1lbnQoY29sb3IpIHtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIHZhciBoID0gaHNsLmg7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgdGlueWNvbG9yKGNvbG9yKSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyA3MikgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubH0pLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDIxNikgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubH0pXG4gICAgXTtcbn1cblxuZnVuY3Rpb24gYW5hbG9nb3VzKGNvbG9yLCByZXN1bHRzLCBzbGljZXMpIHtcbiAgICByZXN1bHRzID0gcmVzdWx0cyB8fCA2O1xuICAgIHNsaWNlcyA9IHNsaWNlcyB8fCAzMDtcblxuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgdmFyIHBhcnQgPSAzNjAgLyBzbGljZXM7XG4gICAgdmFyIHJldCA9IFt0aW55Y29sb3IoY29sb3IpXTtcblxuICAgIGZvciAoaHNsLmggPSAoKGhzbC5oIC0gKHBhcnQgKiByZXN1bHRzID4+IDEpKSArIDcyMCkgJSAzNjA7IC0tcmVzdWx0czsgKSB7XG4gICAgICAgIGhzbC5oID0gKGhzbC5oICsgcGFydCkgJSAzNjA7XG4gICAgICAgIHJldC5wdXNoKHRpbnljb2xvcihoc2wpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gbW9ub2Nocm9tYXRpYyhjb2xvciwgcmVzdWx0cykge1xuICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IDY7XG4gICAgdmFyIGhzdiA9IHRpbnljb2xvcihjb2xvcikudG9Ic3YoKTtcbiAgICB2YXIgaCA9IGhzdi5oLCBzID0gaHN2LnMsIHYgPSBoc3YudjtcbiAgICB2YXIgcmV0ID0gW107XG4gICAgdmFyIG1vZGlmaWNhdGlvbiA9IDEgLyByZXN1bHRzO1xuXG4gICAgd2hpbGUgKHJlc3VsdHMtLSkge1xuICAgICAgICByZXQucHVzaCh0aW55Y29sb3IoeyBoOiBoLCBzOiBzLCB2OiB2fSkpO1xuICAgICAgICB2ID0gKHYgKyBtb2RpZmljYXRpb24pICUgMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufVxuXG4vLyBVdGlsaXR5IEZ1bmN0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRpbnljb2xvci5taXggPSBmdW5jdGlvbihjb2xvcjEsIGNvbG9yMiwgYW1vdW50KSB7XG4gICAgYW1vdW50ID0gKGFtb3VudCA9PT0gMCkgPyAwIDogKGFtb3VudCB8fCA1MCk7XG5cbiAgICB2YXIgcmdiMSA9IHRpbnljb2xvcihjb2xvcjEpLnRvUmdiKCk7XG4gICAgdmFyIHJnYjIgPSB0aW55Y29sb3IoY29sb3IyKS50b1JnYigpO1xuXG4gICAgdmFyIHAgPSBhbW91bnQgLyAxMDA7XG5cbiAgICB2YXIgcmdiYSA9IHtcbiAgICAgICAgcjogKChyZ2IyLnIgLSByZ2IxLnIpICogcCkgKyByZ2IxLnIsXG4gICAgICAgIGc6ICgocmdiMi5nIC0gcmdiMS5nKSAqIHApICsgcmdiMS5nLFxuICAgICAgICBiOiAoKHJnYjIuYiAtIHJnYjEuYikgKiBwKSArIHJnYjEuYixcbiAgICAgICAgYTogKChyZ2IyLmEgLSByZ2IxLmEpICogcCkgKyByZ2IxLmFcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRpbnljb2xvcihyZ2JhKTtcbn07XG5cblxuLy8gUmVhZGFiaWxpdHkgRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI2NvbnRyYXN0LXJhdGlvZGVmIChXQ0FHIFZlcnNpb24gMilcblxuLy8gYGNvbnRyYXN0YFxuLy8gQW5hbHl6ZSB0aGUgMiBjb2xvcnMgYW5kIHJldHVybnMgdGhlIGNvbG9yIGNvbnRyYXN0IGRlZmluZWQgYnkgKFdDQUcgVmVyc2lvbiAyKVxudGlueWNvbG9yLnJlYWRhYmlsaXR5ID0gZnVuY3Rpb24oY29sb3IxLCBjb2xvcjIpIHtcbiAgICB2YXIgYzEgPSB0aW55Y29sb3IoY29sb3IxKTtcbiAgICB2YXIgYzIgPSB0aW55Y29sb3IoY29sb3IyKTtcbiAgICByZXR1cm4gKE1hdGgubWF4KGMxLmdldEx1bWluYW5jZSgpLGMyLmdldEx1bWluYW5jZSgpKSswLjA1KSAvIChNYXRoLm1pbihjMS5nZXRMdW1pbmFuY2UoKSxjMi5nZXRMdW1pbmFuY2UoKSkrMC4wNSk7XG59O1xuXG4vLyBgaXNSZWFkYWJsZWBcbi8vIEVuc3VyZSB0aGF0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3IgY29tYmluYXRpb25zIG1lZXQgV0NBRzIgZ3VpZGVsaW5lcy5cbi8vIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBPYmplY3QuXG4vLyAgICAgIHRoZSAnbGV2ZWwnIHByb3BlcnR5IHN0YXRlcyAnQUEnIG9yICdBQUEnIC0gaWYgbWlzc2luZyBvciBpbnZhbGlkLCBpdCBkZWZhdWx0cyB0byAnQUEnO1xuLy8gICAgICB0aGUgJ3NpemUnIHByb3BlcnR5IHN0YXRlcyAnbGFyZ2UnIG9yICdzbWFsbCcgLSBpZiBtaXNzaW5nIG9yIGludmFsaWQsIGl0IGRlZmF1bHRzIHRvICdzbWFsbCcuXG4vLyBJZiB0aGUgZW50aXJlIG9iamVjdCBpcyBhYnNlbnQsIGlzUmVhZGFibGUgZGVmYXVsdHMgdG8ge2xldmVsOlwiQUFcIixzaXplOlwic21hbGxcIn0uXG5cbi8vICpFeGFtcGxlKlxuLy8gICAgdGlueWNvbG9yLmlzUmVhZGFibGUoXCIjMDAwXCIsIFwiIzExMVwiKSA9PiBmYWxzZVxuLy8gICAgdGlueWNvbG9yLmlzUmVhZGFibGUoXCIjMDAwXCIsIFwiIzExMVwiLHtsZXZlbDpcIkFBXCIsc2l6ZTpcImxhcmdlXCJ9KSA9PiBmYWxzZVxudGlueWNvbG9yLmlzUmVhZGFibGUgPSBmdW5jdGlvbihjb2xvcjEsIGNvbG9yMiwgd2NhZzIpIHtcbiAgICB2YXIgcmVhZGFiaWxpdHkgPSB0aW55Y29sb3IucmVhZGFiaWxpdHkoY29sb3IxLCBjb2xvcjIpO1xuICAgIHZhciB3Y2FnMlBhcm1zLCBvdXQ7XG5cbiAgICBvdXQgPSBmYWxzZTtcblxuICAgIHdjYWcyUGFybXMgPSB2YWxpZGF0ZVdDQUcyUGFybXMod2NhZzIpO1xuICAgIHN3aXRjaCAod2NhZzJQYXJtcy5sZXZlbCArIHdjYWcyUGFybXMuc2l6ZSkge1xuICAgICAgICBjYXNlIFwiQUFzbWFsbFwiOlxuICAgICAgICBjYXNlIFwiQUFBbGFyZ2VcIjpcbiAgICAgICAgICAgIG91dCA9IHJlYWRhYmlsaXR5ID49IDQuNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQUFsYXJnZVwiOlxuICAgICAgICAgICAgb3V0ID0gcmVhZGFiaWxpdHkgPj0gMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQUFBc21hbGxcIjpcbiAgICAgICAgICAgIG91dCA9IHJlYWRhYmlsaXR5ID49IDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcblxufTtcblxuLy8gYG1vc3RSZWFkYWJsZWBcbi8vIEdpdmVuIGEgYmFzZSBjb2xvciBhbmQgYSBsaXN0IG9mIHBvc3NpYmxlIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZFxuLy8gY29sb3JzIGZvciB0aGF0IGJhc2UsIHJldHVybnMgdGhlIG1vc3QgcmVhZGFibGUgY29sb3IuXG4vLyBPcHRpb25hbGx5IHJldHVybnMgQmxhY2sgb3IgV2hpdGUgaWYgdGhlIG1vc3QgcmVhZGFibGUgY29sb3IgaXMgdW5yZWFkYWJsZS5cbi8vICpFeGFtcGxlKlxuLy8gICAgdGlueWNvbG9yLm1vc3RSZWFkYWJsZSh0aW55Y29sb3IubW9zdFJlYWRhYmxlKFwiIzEyM1wiLCBbXCIjMTI0XCIsIFwiIzEyNVwiXSx7aW5jbHVkZUZhbGxiYWNrQ29sb3JzOmZhbHNlfSkudG9IZXhTdHJpbmcoKTsgLy8gXCIjMTEyMjU1XCJcbi8vICAgIHRpbnljb2xvci5tb3N0UmVhZGFibGUodGlueWNvbG9yLm1vc3RSZWFkYWJsZShcIiMxMjNcIiwgW1wiIzEyNFwiLCBcIiMxMjVcIl0se2luY2x1ZGVGYWxsYmFja0NvbG9yczp0cnVlfSkudG9IZXhTdHJpbmcoKTsgIC8vIFwiI2ZmZmZmZlwiXG4vLyAgICB0aW55Y29sb3IubW9zdFJlYWRhYmxlKFwiI2E4MDE1YVwiLCBbXCIjZmFmM2YzXCJdLHtpbmNsdWRlRmFsbGJhY2tDb2xvcnM6dHJ1ZSxsZXZlbDpcIkFBQVwiLHNpemU6XCJsYXJnZVwifSkudG9IZXhTdHJpbmcoKTsgLy8gXCIjZmFmM2YzXCJcbi8vICAgIHRpbnljb2xvci5tb3N0UmVhZGFibGUoXCIjYTgwMTVhXCIsIFtcIiNmYWYzZjNcIl0se2luY2x1ZGVGYWxsYmFja0NvbG9yczp0cnVlLGxldmVsOlwiQUFBXCIsc2l6ZTpcInNtYWxsXCJ9KS50b0hleFN0cmluZygpOyAvLyBcIiNmZmZmZmZcIlxudGlueWNvbG9yLm1vc3RSZWFkYWJsZSA9IGZ1bmN0aW9uKGJhc2VDb2xvciwgY29sb3JMaXN0LCBhcmdzKSB7XG4gICAgdmFyIGJlc3RDb2xvciA9IG51bGw7XG4gICAgdmFyIGJlc3RTY29yZSA9IDA7XG4gICAgdmFyIHJlYWRhYmlsaXR5O1xuICAgIHZhciBpbmNsdWRlRmFsbGJhY2tDb2xvcnMsIGxldmVsLCBzaXplIDtcbiAgICBhcmdzID0gYXJncyB8fCB7fTtcbiAgICBpbmNsdWRlRmFsbGJhY2tDb2xvcnMgPSBhcmdzLmluY2x1ZGVGYWxsYmFja0NvbG9ycyA7XG4gICAgbGV2ZWwgPSBhcmdzLmxldmVsO1xuICAgIHNpemUgPSBhcmdzLnNpemU7XG5cbiAgICBmb3IgKHZhciBpPSAwOyBpIDwgY29sb3JMaXN0Lmxlbmd0aCA7IGkrKykge1xuICAgICAgICByZWFkYWJpbGl0eSA9IHRpbnljb2xvci5yZWFkYWJpbGl0eShiYXNlQ29sb3IsIGNvbG9yTGlzdFtpXSk7XG4gICAgICAgIGlmIChyZWFkYWJpbGl0eSA+IGJlc3RTY29yZSkge1xuICAgICAgICAgICAgYmVzdFNjb3JlID0gcmVhZGFiaWxpdHk7XG4gICAgICAgICAgICBiZXN0Q29sb3IgPSB0aW55Y29sb3IoY29sb3JMaXN0W2ldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aW55Y29sb3IuaXNSZWFkYWJsZShiYXNlQ29sb3IsIGJlc3RDb2xvciwge1wibGV2ZWxcIjpsZXZlbCxcInNpemVcIjpzaXplfSkgfHwgIWluY2x1ZGVGYWxsYmFja0NvbG9ycykge1xuICAgICAgICByZXR1cm4gYmVzdENvbG9yO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXJncy5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ZmFsc2U7XG4gICAgICAgIHJldHVybiB0aW55Y29sb3IubW9zdFJlYWRhYmxlKGJhc2VDb2xvcixbXCIjZmZmXCIsIFwiIzAwMFwiXSxhcmdzKTtcbiAgICB9XG59O1xuXG5cbi8vIEJpZyBMaXN0IG9mIENvbG9yc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyA8aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jc3ZnLWNvbG9yPlxudmFyIG5hbWVzID0gdGlueWNvbG9yLm5hbWVzID0ge1xuICAgIGFsaWNlYmx1ZTogXCJmMGY4ZmZcIixcbiAgICBhbnRpcXVld2hpdGU6IFwiZmFlYmQ3XCIsXG4gICAgYXF1YTogXCIwZmZcIixcbiAgICBhcXVhbWFyaW5lOiBcIjdmZmZkNFwiLFxuICAgIGF6dXJlOiBcImYwZmZmZlwiLFxuICAgIGJlaWdlOiBcImY1ZjVkY1wiLFxuICAgIGJpc3F1ZTogXCJmZmU0YzRcIixcbiAgICBibGFjazogXCIwMDBcIixcbiAgICBibGFuY2hlZGFsbW9uZDogXCJmZmViY2RcIixcbiAgICBibHVlOiBcIjAwZlwiLFxuICAgIGJsdWV2aW9sZXQ6IFwiOGEyYmUyXCIsXG4gICAgYnJvd246IFwiYTUyYTJhXCIsXG4gICAgYnVybHl3b29kOiBcImRlYjg4N1wiLFxuICAgIGJ1cm50c2llbm5hOiBcImVhN2U1ZFwiLFxuICAgIGNhZGV0Ymx1ZTogXCI1ZjllYTBcIixcbiAgICBjaGFydHJldXNlOiBcIjdmZmYwMFwiLFxuICAgIGNob2NvbGF0ZTogXCJkMjY5MWVcIixcbiAgICBjb3JhbDogXCJmZjdmNTBcIixcbiAgICBjb3JuZmxvd2VyYmx1ZTogXCI2NDk1ZWRcIixcbiAgICBjb3Juc2lsazogXCJmZmY4ZGNcIixcbiAgICBjcmltc29uOiBcImRjMTQzY1wiLFxuICAgIGN5YW46IFwiMGZmXCIsXG4gICAgZGFya2JsdWU6IFwiMDAwMDhiXCIsXG4gICAgZGFya2N5YW46IFwiMDA4YjhiXCIsXG4gICAgZGFya2dvbGRlbnJvZDogXCJiODg2MGJcIixcbiAgICBkYXJrZ3JheTogXCJhOWE5YTlcIixcbiAgICBkYXJrZ3JlZW46IFwiMDA2NDAwXCIsXG4gICAgZGFya2dyZXk6IFwiYTlhOWE5XCIsXG4gICAgZGFya2toYWtpOiBcImJkYjc2YlwiLFxuICAgIGRhcmttYWdlbnRhOiBcIjhiMDA4YlwiLFxuICAgIGRhcmtvbGl2ZWdyZWVuOiBcIjU1NmIyZlwiLFxuICAgIGRhcmtvcmFuZ2U6IFwiZmY4YzAwXCIsXG4gICAgZGFya29yY2hpZDogXCI5OTMyY2NcIixcbiAgICBkYXJrcmVkOiBcIjhiMDAwMFwiLFxuICAgIGRhcmtzYWxtb246IFwiZTk5NjdhXCIsXG4gICAgZGFya3NlYWdyZWVuOiBcIjhmYmM4ZlwiLFxuICAgIGRhcmtzbGF0ZWJsdWU6IFwiNDgzZDhiXCIsXG4gICAgZGFya3NsYXRlZ3JheTogXCIyZjRmNGZcIixcbiAgICBkYXJrc2xhdGVncmV5OiBcIjJmNGY0ZlwiLFxuICAgIGRhcmt0dXJxdW9pc2U6IFwiMDBjZWQxXCIsXG4gICAgZGFya3Zpb2xldDogXCI5NDAwZDNcIixcbiAgICBkZWVwcGluazogXCJmZjE0OTNcIixcbiAgICBkZWVwc2t5Ymx1ZTogXCIwMGJmZmZcIixcbiAgICBkaW1ncmF5OiBcIjY5Njk2OVwiLFxuICAgIGRpbWdyZXk6IFwiNjk2OTY5XCIsXG4gICAgZG9kZ2VyYmx1ZTogXCIxZTkwZmZcIixcbiAgICBmaXJlYnJpY2s6IFwiYjIyMjIyXCIsXG4gICAgZmxvcmFsd2hpdGU6IFwiZmZmYWYwXCIsXG4gICAgZm9yZXN0Z3JlZW46IFwiMjI4YjIyXCIsXG4gICAgZnVjaHNpYTogXCJmMGZcIixcbiAgICBnYWluc2Jvcm86IFwiZGNkY2RjXCIsXG4gICAgZ2hvc3R3aGl0ZTogXCJmOGY4ZmZcIixcbiAgICBnb2xkOiBcImZmZDcwMFwiLFxuICAgIGdvbGRlbnJvZDogXCJkYWE1MjBcIixcbiAgICBncmF5OiBcIjgwODA4MFwiLFxuICAgIGdyZWVuOiBcIjAwODAwMFwiLFxuICAgIGdyZWVueWVsbG93OiBcImFkZmYyZlwiLFxuICAgIGdyZXk6IFwiODA4MDgwXCIsXG4gICAgaG9uZXlkZXc6IFwiZjBmZmYwXCIsXG4gICAgaG90cGluazogXCJmZjY5YjRcIixcbiAgICBpbmRpYW5yZWQ6IFwiY2Q1YzVjXCIsXG4gICAgaW5kaWdvOiBcIjRiMDA4MlwiLFxuICAgIGl2b3J5OiBcImZmZmZmMFwiLFxuICAgIGtoYWtpOiBcImYwZTY4Y1wiLFxuICAgIGxhdmVuZGVyOiBcImU2ZTZmYVwiLFxuICAgIGxhdmVuZGVyYmx1c2g6IFwiZmZmMGY1XCIsXG4gICAgbGF3bmdyZWVuOiBcIjdjZmMwMFwiLFxuICAgIGxlbW9uY2hpZmZvbjogXCJmZmZhY2RcIixcbiAgICBsaWdodGJsdWU6IFwiYWRkOGU2XCIsXG4gICAgbGlnaHRjb3JhbDogXCJmMDgwODBcIixcbiAgICBsaWdodGN5YW46IFwiZTBmZmZmXCIsXG4gICAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiZmFmYWQyXCIsXG4gICAgbGlnaHRncmF5OiBcImQzZDNkM1wiLFxuICAgIGxpZ2h0Z3JlZW46IFwiOTBlZTkwXCIsXG4gICAgbGlnaHRncmV5OiBcImQzZDNkM1wiLFxuICAgIGxpZ2h0cGluazogXCJmZmI2YzFcIixcbiAgICBsaWdodHNhbG1vbjogXCJmZmEwN2FcIixcbiAgICBsaWdodHNlYWdyZWVuOiBcIjIwYjJhYVwiLFxuICAgIGxpZ2h0c2t5Ymx1ZTogXCI4N2NlZmFcIixcbiAgICBsaWdodHNsYXRlZ3JheTogXCI3ODlcIixcbiAgICBsaWdodHNsYXRlZ3JleTogXCI3ODlcIixcbiAgICBsaWdodHN0ZWVsYmx1ZTogXCJiMGM0ZGVcIixcbiAgICBsaWdodHllbGxvdzogXCJmZmZmZTBcIixcbiAgICBsaW1lOiBcIjBmMFwiLFxuICAgIGxpbWVncmVlbjogXCIzMmNkMzJcIixcbiAgICBsaW5lbjogXCJmYWYwZTZcIixcbiAgICBtYWdlbnRhOiBcImYwZlwiLFxuICAgIG1hcm9vbjogXCI4MDAwMDBcIixcbiAgICBtZWRpdW1hcXVhbWFyaW5lOiBcIjY2Y2RhYVwiLFxuICAgIG1lZGl1bWJsdWU6IFwiMDAwMGNkXCIsXG4gICAgbWVkaXVtb3JjaGlkOiBcImJhNTVkM1wiLFxuICAgIG1lZGl1bXB1cnBsZTogXCI5MzcwZGJcIixcbiAgICBtZWRpdW1zZWFncmVlbjogXCIzY2IzNzFcIixcbiAgICBtZWRpdW1zbGF0ZWJsdWU6IFwiN2I2OGVlXCIsXG4gICAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiMDBmYTlhXCIsXG4gICAgbWVkaXVtdHVycXVvaXNlOiBcIjQ4ZDFjY1wiLFxuICAgIG1lZGl1bXZpb2xldHJlZDogXCJjNzE1ODVcIixcbiAgICBtaWRuaWdodGJsdWU6IFwiMTkxOTcwXCIsXG4gICAgbWludGNyZWFtOiBcImY1ZmZmYVwiLFxuICAgIG1pc3R5cm9zZTogXCJmZmU0ZTFcIixcbiAgICBtb2NjYXNpbjogXCJmZmU0YjVcIixcbiAgICBuYXZham93aGl0ZTogXCJmZmRlYWRcIixcbiAgICBuYXZ5OiBcIjAwMDA4MFwiLFxuICAgIG9sZGxhY2U6IFwiZmRmNWU2XCIsXG4gICAgb2xpdmU6IFwiODA4MDAwXCIsXG4gICAgb2xpdmVkcmFiOiBcIjZiOGUyM1wiLFxuICAgIG9yYW5nZTogXCJmZmE1MDBcIixcbiAgICBvcmFuZ2VyZWQ6IFwiZmY0NTAwXCIsXG4gICAgb3JjaGlkOiBcImRhNzBkNlwiLFxuICAgIHBhbGVnb2xkZW5yb2Q6IFwiZWVlOGFhXCIsXG4gICAgcGFsZWdyZWVuOiBcIjk4ZmI5OFwiLFxuICAgIHBhbGV0dXJxdW9pc2U6IFwiYWZlZWVlXCIsXG4gICAgcGFsZXZpb2xldHJlZDogXCJkYjcwOTNcIixcbiAgICBwYXBheWF3aGlwOiBcImZmZWZkNVwiLFxuICAgIHBlYWNocHVmZjogXCJmZmRhYjlcIixcbiAgICBwZXJ1OiBcImNkODUzZlwiLFxuICAgIHBpbms6IFwiZmZjMGNiXCIsXG4gICAgcGx1bTogXCJkZGEwZGRcIixcbiAgICBwb3dkZXJibHVlOiBcImIwZTBlNlwiLFxuICAgIHB1cnBsZTogXCI4MDAwODBcIixcbiAgICByZWJlY2NhcHVycGxlOiBcIjY2MzM5OVwiLFxuICAgIHJlZDogXCJmMDBcIixcbiAgICByb3N5YnJvd246IFwiYmM4ZjhmXCIsXG4gICAgcm95YWxibHVlOiBcIjQxNjllMVwiLFxuICAgIHNhZGRsZWJyb3duOiBcIjhiNDUxM1wiLFxuICAgIHNhbG1vbjogXCJmYTgwNzJcIixcbiAgICBzYW5keWJyb3duOiBcImY0YTQ2MFwiLFxuICAgIHNlYWdyZWVuOiBcIjJlOGI1N1wiLFxuICAgIHNlYXNoZWxsOiBcImZmZjVlZVwiLFxuICAgIHNpZW5uYTogXCJhMDUyMmRcIixcbiAgICBzaWx2ZXI6IFwiYzBjMGMwXCIsXG4gICAgc2t5Ymx1ZTogXCI4N2NlZWJcIixcbiAgICBzbGF0ZWJsdWU6IFwiNmE1YWNkXCIsXG4gICAgc2xhdGVncmF5OiBcIjcwODA5MFwiLFxuICAgIHNsYXRlZ3JleTogXCI3MDgwOTBcIixcbiAgICBzbm93OiBcImZmZmFmYVwiLFxuICAgIHNwcmluZ2dyZWVuOiBcIjAwZmY3ZlwiLFxuICAgIHN0ZWVsYmx1ZTogXCI0NjgyYjRcIixcbiAgICB0YW46IFwiZDJiNDhjXCIsXG4gICAgdGVhbDogXCIwMDgwODBcIixcbiAgICB0aGlzdGxlOiBcImQ4YmZkOFwiLFxuICAgIHRvbWF0bzogXCJmZjYzNDdcIixcbiAgICB0dXJxdW9pc2U6IFwiNDBlMGQwXCIsXG4gICAgdmlvbGV0OiBcImVlODJlZVwiLFxuICAgIHdoZWF0OiBcImY1ZGViM1wiLFxuICAgIHdoaXRlOiBcImZmZlwiLFxuICAgIHdoaXRlc21va2U6IFwiZjVmNWY1XCIsXG4gICAgeWVsbG93OiBcImZmMFwiLFxuICAgIHllbGxvd2dyZWVuOiBcIjlhY2QzMlwiXG59O1xuXG4vLyBNYWtlIGl0IGVhc3kgdG8gYWNjZXNzIGNvbG9ycyB2aWEgYGhleE5hbWVzW2hleF1gXG52YXIgaGV4TmFtZXMgPSB0aW55Y29sb3IuaGV4TmFtZXMgPSBmbGlwKG5hbWVzKTtcblxuXG4vLyBVdGlsaXRpZXNcbi8vIC0tLS0tLS0tLVxuXG4vLyBgeyAnbmFtZTEnOiAndmFsMScgfWAgYmVjb21lcyBgeyAndmFsMSc6ICduYW1lMScgfWBcbmZ1bmN0aW9uIGZsaXAobykge1xuICAgIHZhciBmbGlwcGVkID0geyB9O1xuICAgIGZvciAodmFyIGkgaW4gbykge1xuICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgZmxpcHBlZFtvW2ldXSA9IGk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZsaXBwZWQ7XG59XG5cbi8vIFJldHVybiBhIHZhbGlkIGFscGhhIHZhbHVlIFswLDFdIHdpdGggYWxsIGludmFsaWQgdmFsdWVzIGJlaW5nIHNldCB0byAxXG5mdW5jdGlvbiBib3VuZEFscGhhKGEpIHtcbiAgICBhID0gcGFyc2VGbG9hdChhKTtcblxuICAgIGlmIChpc05hTihhKSB8fCBhIDwgMCB8fCBhID4gMSkge1xuICAgICAgICBhID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbn1cblxuLy8gVGFrZSBpbnB1dCBmcm9tIFswLCBuXSBhbmQgcmV0dXJuIGl0IGFzIFswLCAxXVxuZnVuY3Rpb24gYm91bmQwMShuLCBtYXgpIHtcbiAgICBpZiAoaXNPbmVQb2ludFplcm8obikpIHsgbiA9IFwiMTAwJVwiOyB9XG5cbiAgICB2YXIgcHJvY2Vzc1BlcmNlbnQgPSBpc1BlcmNlbnRhZ2Uobik7XG4gICAgbiA9IG1hdGhNaW4obWF4LCBtYXRoTWF4KDAsIHBhcnNlRmxvYXQobikpKTtcblxuICAgIC8vIEF1dG9tYXRpY2FsbHkgY29udmVydCBwZXJjZW50YWdlIGludG8gbnVtYmVyXG4gICAgaWYgKHByb2Nlc3NQZXJjZW50KSB7XG4gICAgICAgIG4gPSBwYXJzZUludChuICogbWF4LCAxMCkgLyAxMDA7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9yc1xuICAgIGlmICgoTWF0aC5hYnMobiAtIG1heCkgPCAwLjAwMDAwMSkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBpbnRvIFswLCAxXSByYW5nZSBpZiBpdCBpc24ndCBhbHJlYWR5XG4gICAgcmV0dXJuIChuICUgbWF4KSAvIHBhcnNlRmxvYXQobWF4KTtcbn1cblxuLy8gRm9yY2UgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG5mdW5jdGlvbiBjbGFtcDAxKHZhbCkge1xuICAgIHJldHVybiBtYXRoTWluKDEsIG1hdGhNYXgoMCwgdmFsKSk7XG59XG5cbi8vIFBhcnNlIGEgYmFzZS0xNiBoZXggdmFsdWUgaW50byBhIGJhc2UtMTAgaW50ZWdlclxuZnVuY3Rpb24gcGFyc2VJbnRGcm9tSGV4KHZhbCkge1xuICAgIHJldHVybiBwYXJzZUludCh2YWwsIDE2KTtcbn1cblxuLy8gTmVlZCB0byBoYW5kbGUgMS4wIGFzIDEwMCUsIHNpbmNlIG9uY2UgaXQgaXMgYSBudW1iZXIsIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBpdCBhbmQgMVxuLy8gPGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzQyMjA3Mi9qYXZhc2NyaXB0LWhvdy10by1kZXRlY3QtbnVtYmVyLWFzLWEtZGVjaW1hbC1pbmNsdWRpbmctMS0wPlxuZnVuY3Rpb24gaXNPbmVQb2ludFplcm8obikge1xuICAgIHJldHVybiB0eXBlb2YgbiA9PSBcInN0cmluZ1wiICYmIG4uaW5kZXhPZignLicpICE9IC0xICYmIHBhcnNlRmxvYXQobikgPT09IDE7XG59XG5cbi8vIENoZWNrIHRvIHNlZSBpZiBzdHJpbmcgcGFzc2VkIGluIGlzIGEgcGVyY2VudGFnZVxuZnVuY3Rpb24gaXNQZXJjZW50YWdlKG4pIHtcbiAgICByZXR1cm4gdHlwZW9mIG4gPT09IFwic3RyaW5nXCIgJiYgbi5pbmRleE9mKCclJykgIT0gLTE7XG59XG5cbi8vIEZvcmNlIGEgaGV4IHZhbHVlIHRvIGhhdmUgMiBjaGFyYWN0ZXJzXG5mdW5jdGlvbiBwYWQyKGMpIHtcbiAgICByZXR1cm4gYy5sZW5ndGggPT0gMSA/ICcwJyArIGMgOiAnJyArIGM7XG59XG5cbi8vIFJlcGxhY2UgYSBkZWNpbWFsIHdpdGggaXQncyBwZXJjZW50YWdlIHZhbHVlXG5mdW5jdGlvbiBjb252ZXJ0VG9QZXJjZW50YWdlKG4pIHtcbiAgICBpZiAobiA8PSAxKSB7XG4gICAgICAgIG4gPSAobiAqIDEwMCkgKyBcIiVcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gbjtcbn1cblxuLy8gQ29udmVydHMgYSBkZWNpbWFsIHRvIGEgaGV4IHZhbHVlXG5mdW5jdGlvbiBjb252ZXJ0RGVjaW1hbFRvSGV4KGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGQpICogMjU1KS50b1N0cmluZygxNik7XG59XG4vLyBDb252ZXJ0cyBhIGhleCB2YWx1ZSB0byBhIGRlY2ltYWxcbmZ1bmN0aW9uIGNvbnZlcnRIZXhUb0RlY2ltYWwoaCkge1xuICAgIHJldHVybiAocGFyc2VJbnRGcm9tSGV4KGgpIC8gMjU1KTtcbn1cblxudmFyIG1hdGNoZXJzID0gKGZ1bmN0aW9uKCkge1xuXG4gICAgLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNpbnRlZ2Vycz5cbiAgICB2YXIgQ1NTX0lOVEVHRVIgPSBcIlstXFxcXCtdP1xcXFxkKyU/XCI7XG5cbiAgICAvLyA8aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy12YWx1ZXMvI251bWJlci12YWx1ZT5cbiAgICB2YXIgQ1NTX05VTUJFUiA9IFwiWy1cXFxcK10/XFxcXGQqXFxcXC5cXFxcZCslP1wiO1xuXG4gICAgLy8gQWxsb3cgcG9zaXRpdmUvbmVnYXRpdmUgaW50ZWdlci9udW1iZXIuICBEb24ndCBjYXB0dXJlIHRoZSBlaXRoZXIvb3IsIGp1c3QgdGhlIGVudGlyZSBvdXRjb21lLlxuICAgIHZhciBDU1NfVU5JVCA9IFwiKD86XCIgKyBDU1NfTlVNQkVSICsgXCIpfCg/OlwiICsgQ1NTX0lOVEVHRVIgKyBcIilcIjtcblxuICAgIC8vIEFjdHVhbCBtYXRjaGluZy5cbiAgICAvLyBQYXJlbnRoZXNlcyBhbmQgY29tbWFzIGFyZSBvcHRpb25hbCwgYnV0IG5vdCByZXF1aXJlZC5cbiAgICAvLyBXaGl0ZXNwYWNlIGNhbiB0YWtlIHRoZSBwbGFjZSBvZiBjb21tYXMgb3Igb3BlbmluZyBwYXJlblxuICAgIHZhciBQRVJNSVNTSVZFX01BVENIMyA9IFwiW1xcXFxzfFxcXFwoXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVxcXFxzKlxcXFwpP1wiO1xuICAgIHZhciBQRVJNSVNTSVZFX01BVENINCA9IFwiW1xcXFxzfFxcXFwoXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVxcXFxzKlxcXFwpP1wiO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgQ1NTX1VOSVQ6IG5ldyBSZWdFeHAoQ1NTX1VOSVQpLFxuICAgICAgICByZ2I6IG5ldyBSZWdFeHAoXCJyZ2JcIiArIFBFUk1JU1NJVkVfTUFUQ0gzKSxcbiAgICAgICAgcmdiYTogbmV3IFJlZ0V4cChcInJnYmFcIiArIFBFUk1JU1NJVkVfTUFUQ0g0KSxcbiAgICAgICAgaHNsOiBuZXcgUmVnRXhwKFwiaHNsXCIgKyBQRVJNSVNTSVZFX01BVENIMyksXG4gICAgICAgIGhzbGE6IG5ldyBSZWdFeHAoXCJoc2xhXCIgKyBQRVJNSVNTSVZFX01BVENINCksXG4gICAgICAgIGhzdjogbmV3IFJlZ0V4cChcImhzdlwiICsgUEVSTUlTU0lWRV9NQVRDSDMpLFxuICAgICAgICBoc3ZhOiBuZXcgUmVnRXhwKFwiaHN2YVwiICsgUEVSTUlTU0lWRV9NQVRDSDQpLFxuICAgICAgICBoZXgzOiAvXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8sXG4gICAgICAgIGhleDY6IC9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxcbiAgICAgICAgaGV4NDogL14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxcbiAgICAgICAgaGV4ODogL14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkL1xuICAgIH07XG59KSgpO1xuXG4vLyBgaXNWYWxpZENTU1VuaXRgXG4vLyBUYWtlIGluIGEgc2luZ2xlIHN0cmluZyAvIG51bWJlciBhbmQgY2hlY2sgdG8gc2VlIGlmIGl0IGxvb2tzIGxpa2UgYSBDU1MgdW5pdFxuLy8gKHNlZSBgbWF0Y2hlcnNgIGFib3ZlIGZvciBkZWZpbml0aW9uKS5cbmZ1bmN0aW9uIGlzVmFsaWRDU1NVbml0KGNvbG9yKSB7XG4gICAgcmV0dXJuICEhbWF0Y2hlcnMuQ1NTX1VOSVQuZXhlYyhjb2xvcik7XG59XG5cbi8vIGBzdHJpbmdJbnB1dFRvT2JqZWN0YFxuLy8gUGVybWlzc2l2ZSBzdHJpbmcgcGFyc2luZy4gIFRha2UgaW4gYSBudW1iZXIgb2YgZm9ybWF0cywgYW5kIG91dHB1dCBhbiBvYmplY3Rcbi8vIGJhc2VkIG9uIGRldGVjdGVkIGZvcm1hdC4gIFJldHVybnMgYHsgciwgZywgYiB9YCBvciBgeyBoLCBzLCBsIH1gIG9yIGB7IGgsIHMsIHZ9YFxuZnVuY3Rpb24gc3RyaW5nSW5wdXRUb09iamVjdChjb2xvcikge1xuXG4gICAgY29sb3IgPSBjb2xvci5yZXBsYWNlKHRyaW1MZWZ0LCcnKS5yZXBsYWNlKHRyaW1SaWdodCwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIG5hbWVkID0gZmFsc2U7XG4gICAgaWYgKG5hbWVzW2NvbG9yXSkge1xuICAgICAgICBjb2xvciA9IG5hbWVzW2NvbG9yXTtcbiAgICAgICAgbmFtZWQgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb2xvciA9PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgICAgIHJldHVybiB7IHI6IDAsIGc6IDAsIGI6IDAsIGE6IDAsIGZvcm1hdDogXCJuYW1lXCIgfTtcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gbWF0Y2ggc3RyaW5nIGlucHV0IHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gICAgLy8gS2VlcCBtb3N0IG9mIHRoZSBudW1iZXIgYm91bmRpbmcgb3V0IG9mIHRoaXMgZnVuY3Rpb24gLSBkb24ndCB3b3JyeSBhYm91dCBbMCwxXSBvciBbMCwxMDBdIG9yIFswLDM2MF1cbiAgICAvLyBKdXN0IHJldHVybiBhbiBvYmplY3QgYW5kIGxldCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMgaGFuZGxlIHRoYXQuXG4gICAgLy8gVGhpcyB3YXkgdGhlIHJlc3VsdCB3aWxsIGJlIHRoZSBzYW1lIHdoZXRoZXIgdGhlIHRpbnljb2xvciBpcyBpbml0aWFsaXplZCB3aXRoIHN0cmluZyBvciBvYmplY3QuXG4gICAgdmFyIG1hdGNoO1xuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5yZ2IuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IHI6IG1hdGNoWzFdLCBnOiBtYXRjaFsyXSwgYjogbWF0Y2hbM10gfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLnJnYmEuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IHI6IG1hdGNoWzFdLCBnOiBtYXRjaFsyXSwgYjogbWF0Y2hbM10sIGE6IG1hdGNoWzRdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oc2wuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IGg6IG1hdGNoWzFdLCBzOiBtYXRjaFsyXSwgbDogbWF0Y2hbM10gfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhzbGEuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IGg6IG1hdGNoWzFdLCBzOiBtYXRjaFsyXSwgbDogbWF0Y2hbM10sIGE6IG1hdGNoWzRdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oc3YuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IGg6IG1hdGNoWzFdLCBzOiBtYXRjaFsyXSwgdjogbWF0Y2hbM10gfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhzdmEuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IGg6IG1hdGNoWzFdLCBzOiBtYXRjaFsyXSwgdjogbWF0Y2hbM10sIGE6IG1hdGNoWzRdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oZXg4LmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzFdKSxcbiAgICAgICAgICAgIGc6IHBhcnNlSW50RnJvbUhleChtYXRjaFsyXSksXG4gICAgICAgICAgICBiOiBwYXJzZUludEZyb21IZXgobWF0Y2hbM10pLFxuICAgICAgICAgICAgYTogY29udmVydEhleFRvRGVjaW1hbChtYXRjaFs0XSksXG4gICAgICAgICAgICBmb3JtYXQ6IG5hbWVkID8gXCJuYW1lXCIgOiBcImhleDhcIlxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaGV4Ni5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSksXG4gICAgICAgICAgICBnOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMl0pLFxuICAgICAgICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdKSxcbiAgICAgICAgICAgIGZvcm1hdDogbmFtZWQgPyBcIm5hbWVcIiA6IFwiaGV4XCJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhleDQuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMV0gKyAnJyArIG1hdGNoWzFdKSxcbiAgICAgICAgICAgIGc6IHBhcnNlSW50RnJvbUhleChtYXRjaFsyXSArICcnICsgbWF0Y2hbMl0pLFxuICAgICAgICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdICsgJycgKyBtYXRjaFszXSksXG4gICAgICAgICAgICBhOiBjb252ZXJ0SGV4VG9EZWNpbWFsKG1hdGNoWzRdICsgJycgKyBtYXRjaFs0XSksXG4gICAgICAgICAgICBmb3JtYXQ6IG5hbWVkID8gXCJuYW1lXCIgOiBcImhleDhcIlxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaGV4My5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSArICcnICsgbWF0Y2hbMV0pLFxuICAgICAgICAgICAgZzogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzJdICsgJycgKyBtYXRjaFsyXSksXG4gICAgICAgICAgICBiOiBwYXJzZUludEZyb21IZXgobWF0Y2hbM10gKyAnJyArIG1hdGNoWzNdKSxcbiAgICAgICAgICAgIGZvcm1hdDogbmFtZWQgPyBcIm5hbWVcIiA6IFwiaGV4XCJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV0NBRzJQYXJtcyhwYXJtcykge1xuICAgIC8vIHJldHVybiB2YWxpZCBXQ0FHMiBwYXJtcyBmb3IgaXNSZWFkYWJsZS5cbiAgICAvLyBJZiBpbnB1dCBwYXJtcyBhcmUgaW52YWxpZCwgcmV0dXJuIHtcImxldmVsXCI6XCJBQVwiLCBcInNpemVcIjpcInNtYWxsXCJ9XG4gICAgdmFyIGxldmVsLCBzaXplO1xuICAgIHBhcm1zID0gcGFybXMgfHwge1wibGV2ZWxcIjpcIkFBXCIsIFwic2l6ZVwiOlwic21hbGxcIn07XG4gICAgbGV2ZWwgPSAocGFybXMubGV2ZWwgfHwgXCJBQVwiKS50b1VwcGVyQ2FzZSgpO1xuICAgIHNpemUgPSAocGFybXMuc2l6ZSB8fCBcInNtYWxsXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxldmVsICE9PSBcIkFBXCIgJiYgbGV2ZWwgIT09IFwiQUFBXCIpIHtcbiAgICAgICAgbGV2ZWwgPSBcIkFBXCI7XG4gICAgfVxuICAgIGlmIChzaXplICE9PSBcInNtYWxsXCIgJiYgc2l6ZSAhPT0gXCJsYXJnZVwiKSB7XG4gICAgICAgIHNpemUgPSBcInNtYWxsXCI7XG4gICAgfVxuICAgIHJldHVybiB7XCJsZXZlbFwiOmxldmVsLCBcInNpemVcIjpzaXplfTtcbn1cblxuLy8gTm9kZTogRXhwb3J0IGZ1bmN0aW9uXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gdGlueWNvbG9yO1xufVxuLy8gQU1EL3JlcXVpcmVqczogRGVmaW5lIHRoZSBtb2R1bGVcbmVsc2UgaWYgKHRydWUpIHtcbiAgICAhKF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uICgpIHtyZXR1cm4gdGlueWNvbG9yO30pLmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXywgZXhwb3J0cywgbW9kdWxlKSxcblx0XHRcdFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xufVxuLy8gQnJvd3NlcjogRXhwb3NlIHRvIHdpbmRvd1xuZWxzZSB7XG4gICAgd2luZG93LnRpbnljb2xvciA9IHRpbnljb2xvcjtcbn1cblxufSkoTWF0aCk7XG5cblxuLyoqKi8gfSksXG4vKiAxMDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxubW9kdWxlLmV4cG9ydHMgPSAhX193ZWJwYWNrX3JlcXVpcmVfXyg2KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXygzKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX3JlcXVpcmVfXyg3NikoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbmV4cG9ydHMuZiA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cblxuLyoqKi8gfSksXG4vKiAxMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xudmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIGFycmF5SW5kZXhPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDExMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZFAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBnZXRLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDExMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgZ09QTiA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDExMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIGdldEtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcbnZhciBnT1BTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XG52YXIgcElFID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIElPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IF9fd2VicGFja19yZXF1aXJlX18oMykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIGlmIChpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKSBUW2tleV0gPSBTW2tleV07XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcblxuXG4vKioqLyB9KSxcbi8qIDExNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBpbnZva2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNSk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDExNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJHBhcnNlSW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpLnRyaW07XG52YXIgd3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgyKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG5cblxuLyoqKi8gfSksXG4vKiAxMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRwYXJzZUZsb2F0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5wYXJzZUZsb2F0O1xudmFyICR0cmltID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQoX193ZWJwYWNrX3JlcXVpcmVfXyg4MikgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcblxuXG4vKioqLyB9KSxcbi8qIDExOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oODUpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDEyMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTIzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYUxlbiwgbWVtbywgaXNSaWdodCkge1xuICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gaXNSaWdodCA/IGxlbmd0aCAtIDEgOiAwO1xuICB2YXIgaSA9IGlzUmlnaHQgPyAtMSA6IDE7XG4gIGlmIChhTGVuIDwgMikgZm9yICg7Oykge1xuICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ICs9IGk7XG4gICAgaWYgKGlzUmlnaHQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIH1cbiAgfVxuICBmb3IgKDtpc1JpZ2h0ID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gIH1cbiAgcmV0dXJuIG1lbW87XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTI0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG5cbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtdLmNvcHlXaXRoaW4gfHwgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQgLyogPSAwICovLCBzdGFydCAvKiA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIHRvID0gdG9BYnNvbHV0ZUluZGV4KHRhcmdldCwgbGVuKTtcbiAgdmFyIGZyb20gPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNvdW50ID0gTWF0aC5taW4oKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKSkgLSBmcm9tLCBsZW4gLSB0byk7XG4gIHZhciBpbmMgPSAxO1xuICBpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7XG4gICAgaW5jID0gLTE7XG4gICAgZnJvbSArPSBjb3VudCAtIDE7XG4gICAgdG8gKz0gY291bnQgLSAxO1xuICB9XG4gIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICB0byArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTI1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTI2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzKClcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fKDYpICYmIC8uL2cuZmxhZ3MgIT0gJ2cnKSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogX193ZWJwYWNrX3JlcXVpcmVfXyg2MSlcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTI3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHJvbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMCk7XG52YXIgdmFsaWRhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5KTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KShNQVAsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjEuMy42IE1hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gc3Ryb25nLmdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnY7XG4gIH0sXG4gIC8vIDIzLjEuMy45IE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZywgdHJ1ZSk7XG5cblxuLyoqKi8gfSksXG4vKiAxMzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBkUCA9IF9fd2VicGFja19yZXF1aXJlX18oNykuZjtcbnZhciBjcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcbnZhciByZWRlZmluZUFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIGFuSW5zdGFuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcbnZhciBmb3JPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xudmFyICRpdGVyRGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XG52YXIgc3RlcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTI1KTtcbnZhciBzZXRTcGVjaWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIGZhc3RLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKS5mYXN0S2V5O1xudmFyIHZhbGlkYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcblxuXG4vKioqLyB9KSxcbi8qIDEzMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIHN0cm9uZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcbnZhciB2YWxpZGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xudmFyIFNFVCA9ICdTZXQnO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNjQpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuXG5cbi8qKiovIH0pLFxuLyogMTMyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZWFjaCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpKDApO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgbWV0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xudmFyIGFzc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTEzKTtcbnZhciB3ZWFrID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgdmFsaWRhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5KTtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciB0bXAgPSB7fTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCkoV0VBS19NQVAsIHdyYXBwZXIsIG1ldGhvZHMsIHdlYWssIHRydWUsIHRydWUpO1xuXG4vLyBJRTExIFdlYWtNYXAgZnJvemVuIGtleXMgZml4XG5pZiAoZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3ICRXZWFrTWFwKCkuc2V0KChPYmplY3QuZnJlZXplIHx8IE9iamVjdCkodG1wKSwgNykuZ2V0KHRtcCkgIT0gNzsgfSkpIHtcbiAgSW50ZXJuYWxNYXAgPSB3ZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIFdFQUtfTUFQKTtcbiAgYXNzaWduKEludGVybmFsTWFwLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gIG1ldGEuTkVFRCA9IHRydWU7XG4gIGVhY2goWydkZWxldGUnLCAnaGFzJywgJ2dldCcsICdzZXQnXSwgZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBwcm90byA9ICRXZWFrTWFwLnByb3RvdHlwZTtcbiAgICB2YXIgbWV0aG9kID0gcHJvdG9ba2V5XTtcbiAgICByZWRlZmluZShwcm90bywga2V5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgLy8gc3RvcmUgZnJvemVuIG9iamVjdHMgb24gaW50ZXJuYWwgd2Vha21hcCBzaGltXG4gICAgICBpZiAoaXNPYmplY3QoYSkgJiYgIWlzRXh0ZW5zaWJsZShhKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2YpIHRoaXMuX2YgPSBuZXcgSW50ZXJuYWxNYXAoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zba2V5XShhLCBiKTtcbiAgICAgICAgcmV0dXJuIGtleSA9PSAnc2V0JyA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAvLyBzdG9yZSBhbGwgdGhlIHJlc3Qgb24gbmF0aXZlIHdlYWttYXBcbiAgICAgIH0gcmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIGEsIGIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDEzMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIHJlZGVmaW5lQWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XG52YXIgZ2V0V2VhayA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBhbkluc3RhbmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XG52YXIgZm9yT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xudmFyICRoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciB2YWxpZGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcblxuXG4vKioqLyB9KSxcbi8qIDEzNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2luZGV4XG52YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDEzNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xudmFyIGdPUFMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgUmVmbGVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMikuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDEzNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuXG5cbi8qKiovIH0pLFxuLyogMTM3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIHJlcGVhdCA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xudmFyIGRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMzggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdldEtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcbnZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciBpc0VudW0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChPLCBrZXkgPSBrZXlzW2krK10pKSB7XG4gICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTM5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XG52YXIgZnJvbSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDE0MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZm9yT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlciwgSVRFUkFUT1IpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDE0MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFrZUZ1bGxTY3JlZW4gPSBleHBvcnRzLm1ha2VXaWRnZXQgPSBleHBvcnRzLm1ha2VQb3B1cCA9IHVuZGVmaW5lZDtcblxudmFyIF9tYWtlUG9wdXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Myk7XG5cbnZhciBfbWFrZVBvcHVwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21ha2VQb3B1cCk7XG5cbnZhciBfbWFrZVdpZGdldCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYyKTtcblxudmFyIF9tYWtlV2lkZ2V0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21ha2VXaWRnZXQpO1xuXG52YXIgX21ha2VGdWxsU2NyZWVuID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjcpO1xuXG52YXIgX21ha2VGdWxsU2NyZWVuMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21ha2VGdWxsU2NyZWVuKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuaWYgKCF3aW5kb3cuX2JhYmVsUG9seWZpbGwpIHtcbiAgX193ZWJwYWNrX3JlcXVpcmVfXygxNjgpO1xufVxuXG5leHBvcnRzLm1ha2VQb3B1cCA9IF9tYWtlUG9wdXAyLmRlZmF1bHQ7XG5leHBvcnRzLm1ha2VXaWRnZXQgPSBfbWFrZVdpZGdldDIuZGVmYXVsdDtcbmV4cG9ydHMubWFrZUZ1bGxTY3JlZW4gPSBfbWFrZUZ1bGxTY3JlZW4yLmRlZmF1bHQ7XG5cbi8qKiovIH0pLFxuLyogMTQzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IG1ha2VQb3B1cDtcblxudmFyIF9yZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9yZWFjdERvbSA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xuXG52YXIgX3V0aWxpdGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xuXG52YXIgX3BvcHVwID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTQpO1xuXG52YXIgX3BvcHVwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BvcHVwKTtcblxudmFyIF9tb2JpbGVNb2RhbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTA2KTtcblxudmFyIF9tb2JpbGVNb2RhbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tb2JpbGVNb2RhbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBERUZBVUxUX0RSQVdFUl9XSURUSCA9IDgwMDtcbnZhciBERUZBVUxUX0FVVE9DTE9TRV9USU1FT1VUID0gNTtcblxudmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICBtb2RlOiBfcG9wdXAuUE9QVVAsXG4gIGF1dG9PcGVuOiBmYWxzZSxcbiAgaXNNb2RhbE9wZW46IGZhbHNlLFxuICBhdXRvQ2xvc2U6IERFRkFVTFRfQVVUT0NMT1NFX1RJTUVPVVQsXG4gIGhpZGVGb290ZXI6IGZhbHNlLFxuICBoaWRlSGVhZGVyczogZmFsc2UsXG4gIGhpZGVTY3JvbGxiYXJzOiBmYWxzZSxcbiAgZGlzYWJsZVN1Ym1pdDogZmFsc2UsXG4gIGRyYXdlcldpZHRoOiBERUZBVUxUX0RSQVdFUl9XSURUSCxcbiAgb25TdWJtaXQ6IF91dGlsaXRpZXMubm9vcFxufTtcblxudmFyIHF1ZXJ5U3RyaW5nS2V5cyA9IHtcbiAgZW1iZWRUeXBlOiAndHlwZWZvcm0tZW1iZWQnLFxuICBoaWRlRm9vdGVyOiAnZW1iZWQtaGlkZS1mb290ZXInLFxuICBoaWRlSGVhZGVyczogJ2VtYmVkLWhpZGUtaGVhZGVycycsXG4gIGRpc2FibGVTdWJtaXQ6ICdfX2Rhbmdlcm91cy1kaXNhYmxlLXN1Ym1pc3Npb25zJ1xufTtcblxudmFyIHJlbmRlckNvbXBvbmVudCA9IGZ1bmN0aW9uIHJlbmRlckNvbXBvbmVudCh1cmwsIGRvbU5vZGUsIG9wdGlvbnMsIG9uQ2xvc2UpIHtcbiAgaWYgKCEoMCwgX3V0aWxpdGllcy5pc01vYmlsZSkobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgKDAsIF91dGlsaXRpZXMuaXNTY3JlZW5CaWcpKCkpIHtcbiAgICB2YXIgdXJsV2l0aFF1ZXJ5U3RyaW5nID0gKDAsIF91dGlsaXRpZXMuYXBwZW5kUGFyYW1zVG9VcmwpKHVybCwgKDAsIF91dGlsaXRpZXMucmVwbGFjZUV4aXN0aW5nS2V5cykob3B0aW9ucywgcXVlcnlTdHJpbmdLZXlzKSk7XG5cbiAgICAoMCwgX3JlYWN0RG9tLnJlbmRlcikoX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX3BvcHVwMi5kZWZhdWx0LCB7IHVybDogdXJsV2l0aFF1ZXJ5U3RyaW5nLCBvcHRpb25zOiBvcHRpb25zLCBvbkNsb3NlOiBvbkNsb3NlIH0pLCBkb21Ob2RlKTtcbiAgfSBlbHNlIHtcbiAgICAoMCwgX3V0aWxpdGllcy5lbnN1cmVNZXRhVmlld3BvcnQpKCk7XG4gICAgKDAsIF9yZWFjdERvbS5yZW5kZXIpKF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9tb2JpbGVNb2RhbDIuZGVmYXVsdCwge1xuICAgICAgdXJsOiB1cmwsXG4gICAgICBidXR0b25UZXh0OiBvcHRpb25zLmJ1dHRvblRleHQsXG4gICAgICBhdXRvQ2xvc2U6IG9wdGlvbnMuYXV0b0Nsb3NlLFxuICAgICAgb25DbG9zZTogb25DbG9zZSxcbiAgICAgIG9uU3VibWl0OiBvcHRpb25zLm9uU3VibWl0LFxuICAgICAgaXNBdXRvQ2xvc2VFbmFibGVkOiBvcHRpb25zLmlzQXV0b0Nsb3NlRW5hYmxlZCxcbiAgICAgIG9wZW46IHRydWVcbiAgICB9KSwgZG9tTm9kZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIG1ha2VQb3B1cCh1cmwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IF9leHRlbmRzKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucywge1xuICAgIGlzQXV0b0Nsb3NlRW5hYmxlZDogb3B0aW9ucy5pc0F1dG9DbG9zZUVuYWJsZWQsXG4gICAgZW1iZWRUeXBlOiBfcG9wdXAuUE9QVVBfTU9ERVNbb3B0aW9ucy5tb2RlXVxuICB9KTtcblxuICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG9wdGlvbnMuZHJhd2VyV2lkdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXaG9vcHMhIFlvdSBwcm92aWRlZCBhbiBpbnZhbGlkIFxcJ2RyYXdlcldpZHRoXFwnIG9wdGlvbjogXCInICsgb3B0aW9ucy5kcmF3ZXJXaWR0aCArICdcIi4gSXQgbXVzdCBiZSBhIG51bWJlci4nKTtcbiAgfVxuXG4gIHZhciBkb21Ob2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG9wdGlvbnMuaXNDb250YWluZWQgPSBvcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkO1xuICBvcHRpb25zLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHk7XG4gIG9wdGlvbnMuY29udGFpbmVyLmFwcGVuZENoaWxkKGRvbU5vZGUpO1xuXG4gIHZhciBwb3B1cCA9IHtcbiAgICBvcGVuOiBmdW5jdGlvbiBvcGVuKCkge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KHVybCwgZG9tTm9kZSwgb3B0aW9ucywgdGhpcy5jbG9zZSk7XG4gICAgfSxcbiAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoJ2Zvcm0tY2xvc2UnLCAnKicpO1xuICAgICAgKDAsIF9yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKShkb21Ob2RlKTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKG9wdGlvbnMuYXV0b09wZW4pIHtcbiAgICBwb3B1cC5vcGVuKCk7XG4gIH1cblxuICByZXR1cm4gcG9wdXA7XG59XG5cbi8qKiovIH0pLFxuLyogMTQ0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblxuXG52YXIgZW1wdHlGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xudmFyIGludmFyaWFudCA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xudmFyIHdhcm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDUpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcbiAgICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xuICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXG4gICAgICAgICAgICAvLyBBdm9pZCBzcGFtbWluZyB0aGUgY29uc29sZSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG5vdCBhY3Rpb25hYmxlIGV4Y2VwdCBmb3IgbGliIGF1dGhvcnNcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCVzYCBwcm9wIG9uIGAlc2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nLFxuICAgICAgICAgICAgICBwcm9wRnVsbE5hbWUsXG4gICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIHByb3BWYWx1ZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xuICAgICAgICAgICdyZWNlaXZlZCAlcyBhdCBpbmRleCAlcy4nLFxuICAgICAgICAgIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSxcbiAgICAgICAgICBpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIGlmIChjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbVxuICAgICAgLy8gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXG4gICAgICAgICAgICAnXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xuICAgICAgICAgICAgJ1xcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCdcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhL1xuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxuICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XG4gICAgfVxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHBvc3RmaXhlZCB0byBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCB0eXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgXCJ1bmRlZmluZWRcIiBvciBcIm9mIHR5cGUgYXJyYXlcIlxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiAnYW4gJyArIHR5cGU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlcztcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcblxuLyoqKi8gfSksXG4vKiAxNDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxNDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKTtcbiAgdmFyIHdhcm5pbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0eSh0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGludmFyaWFudCh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gPT09ICdmdW5jdGlvbicsICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tICcgKyAndGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCVzYC4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSk7XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIHdhcm5pbmcoIWVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgRXJyb3IsICclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvcik7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkICVzIHR5cGU6ICVzJXMnLCBsb2NhdGlvbiwgZXJyb3IubWVzc2FnZSwgc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG5cbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KSkpXG5cbi8qKiovIH0pLFxuLyogMTQ3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cblxudmFyIGVtcHR5RnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcbnZhciBpbnZhcmlhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKTtcbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW52YXJpYW50KFxuICAgICAgZmFsc2UsXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbVxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDE0OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaDsgfSk7XG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY3JlYXRlRWxlbWVudCAqL1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbG9uZUVsZW1lbnQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb21wb25lbnQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHJlcmVuZGVyICovXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG9wdGlvbnM7IH0pO1xuLyoqIFZpcnR1YWwgRE9NIE5vZGUgKi9cbmZ1bmN0aW9uIFZOb2RlKCkge31cblxuLyoqIEdsb2JhbCBvcHRpb25zXG4gKlx0QHB1YmxpY1xuICpcdEBuYW1lc3BhY2Ugb3B0aW9ucyB7T2JqZWN0fVxuICovXG52YXIgb3B0aW9ucyA9IHtcblxuXHQvKiogSWYgYHRydWVgLCBgcHJvcGAgY2hhbmdlcyB0cmlnZ2VyIHN5bmNocm9ub3VzIGNvbXBvbmVudCB1cGRhdGVzLlxuICAqXHRAbmFtZSBzeW5jQ29tcG9uZW50VXBkYXRlc1xuICAqXHRAdHlwZSBCb29sZWFuXG4gICpcdEBkZWZhdWx0IHRydWVcbiAgKi9cblx0Ly9zeW5jQ29tcG9uZW50VXBkYXRlczogdHJ1ZSxcblxuXHQvKiogUHJvY2Vzc2VzIGFsbCBjcmVhdGVkIFZOb2Rlcy5cbiAgKlx0QHBhcmFtIHtWTm9kZX0gdm5vZGVcdEEgbmV3bHktY3JlYXRlZCBWTm9kZSB0byBub3JtYWxpemUvcHJvY2Vzc1xuICAqL1xuXHQvL3Zub2RlKHZub2RlKSB7IH1cblxuXHQvKiogSG9vayBpbnZva2VkIGFmdGVyIGEgY29tcG9uZW50IGlzIG1vdW50ZWQuICovXG5cdC8vIGFmdGVyTW91bnQoY29tcG9uZW50KSB7IH1cblxuXHQvKiogSG9vayBpbnZva2VkIGFmdGVyIHRoZSBET00gaXMgdXBkYXRlZCB3aXRoIGEgY29tcG9uZW50J3MgbGF0ZXN0IHJlbmRlci4gKi9cblx0Ly8gYWZ0ZXJVcGRhdGUoY29tcG9uZW50KSB7IH1cblxuXHQvKiogSG9vayBpbnZva2VkIGltbWVkaWF0ZWx5IGJlZm9yZSBhIGNvbXBvbmVudCBpcyB1bm1vdW50ZWQuICovXG5cdC8vIGJlZm9yZVVubW91bnQoY29tcG9uZW50KSB7IH1cbn07XG5cbnZhciBzdGFjayA9IFtdO1xuXG52YXIgRU1QVFlfQ0hJTERSRU4gPSBbXTtcblxuLyoqXG4gKiBKU1gvaHlwZXJzY3JpcHQgcmV2aXZlci5cbiAqIEBzZWUgaHR0cDovL2phc29uZm9ybWF0LmNvbS93dGYtaXMtanN4XG4gKiBCZW5jaG1hcmtzOiBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzU3ZWU4ZjhlMzMwYWIwOTkwMGExYTFhMFxuICpcbiAqIE5vdGU6IHRoaXMgaXMgZXhwb3J0ZWQgYXMgYm90aCBgaCgpYCBhbmQgYGNyZWF0ZUVsZW1lbnQoKWAgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy5cbiAqXG4gKiBDcmVhdGVzIGEgVk5vZGUgKHZpcnR1YWwgRE9NIGVsZW1lbnQpLiBBIHRyZWUgb2YgVk5vZGVzIGNhbiBiZSB1c2VkIGFzIGEgbGlnaHR3ZWlnaHQgcmVwcmVzZW50YXRpb25cbiAqIG9mIHRoZSBzdHJ1Y3R1cmUgb2YgYSBET00gdHJlZS4gVGhpcyBzdHJ1Y3R1cmUgY2FuIGJlIHJlYWxpemVkIGJ5IHJlY3Vyc2l2ZWx5IGNvbXBhcmluZyBpdCBhZ2FpbnN0XG4gKiB0aGUgY3VycmVudCBfYWN0dWFsXyBET00gc3RydWN0dXJlLCBhbmQgYXBwbHlpbmcgb25seSB0aGUgZGlmZmVyZW5jZXMuXG4gKlxuICogYGgoKWAvYGNyZWF0ZUVsZW1lbnQoKWAgYWNjZXB0cyBhbiBlbGVtZW50IG5hbWUsIGEgbGlzdCBvZiBhdHRyaWJ1dGVzL3Byb3BzLFxuICogYW5kIG9wdGlvbmFsbHkgY2hpbGRyZW4gdG8gYXBwZW5kIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIEBleGFtcGxlIFRoZSBmb2xsb3dpbmcgRE9NIHRyZWVcbiAqXG4gKiBgPGRpdiBpZD1cImZvb1wiIG5hbWU9XCJiYXJcIj5IZWxsbyE8L2Rpdj5gXG4gKlxuICogY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHRoaXMgZnVuY3Rpb24gYXM6XG4gKlxuICogYGgoJ2RpdicsIHsgaWQ6ICdmb28nLCBuYW1lIDogJ2JhcicgfSwgJ0hlbGxvIScpO2BcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9kZU5hbWVcdEFuIGVsZW1lbnQgbmFtZS4gRXg6IGBkaXZgLCBgYWAsIGBzcGFuYCwgZXRjLlxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcdEFueSBhdHRyaWJ1dGVzL3Byb3BzIHRvIHNldCBvbiB0aGUgY3JlYXRlZCBlbGVtZW50LlxuICogQHBhcmFtIHJlc3RcdFx0XHRBZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgdGFrZW4gdG8gYmUgY2hpbGRyZW4gdG8gYXBwZW5kLiBDYW4gYmUgaW5maW5pdGVseSBuZXN0ZWQgQXJyYXlzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gaChub2RlTmFtZSwgYXR0cmlidXRlcykge1xuXHR2YXIgY2hpbGRyZW4gPSBFTVBUWV9DSElMRFJFTixcblx0ICAgIGxhc3RTaW1wbGUsXG5cdCAgICBjaGlsZCxcblx0ICAgIHNpbXBsZSxcblx0ICAgIGk7XG5cdGZvciAoaSA9IGFyZ3VtZW50cy5sZW5ndGg7IGktLSA+IDI7KSB7XG5cdFx0c3RhY2sucHVzaChhcmd1bWVudHNbaV0pO1xuXHR9XG5cdGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMuY2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdGlmICghc3RhY2subGVuZ3RoKSBzdGFjay5wdXNoKGF0dHJpYnV0ZXMuY2hpbGRyZW4pO1xuXHRcdGRlbGV0ZSBhdHRyaWJ1dGVzLmNoaWxkcmVuO1xuXHR9XG5cdHdoaWxlIChzdGFjay5sZW5ndGgpIHtcblx0XHRpZiAoKGNoaWxkID0gc3RhY2sucG9wKCkpICYmIGNoaWxkLnBvcCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGkgPSBjaGlsZC5sZW5ndGg7IGktLTspIHtcblx0XHRcdFx0c3RhY2sucHVzaChjaGlsZFtpXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlb2YgY2hpbGQgPT09ICdib29sZWFuJykgY2hpbGQgPSBudWxsO1xuXG5cdFx0XHRpZiAoc2ltcGxlID0gdHlwZW9mIG5vZGVOYW1lICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGlmIChjaGlsZCA9PSBudWxsKSBjaGlsZCA9ICcnO2Vsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ251bWJlcicpIGNoaWxkID0gU3RyaW5nKGNoaWxkKTtlbHNlIGlmICh0eXBlb2YgY2hpbGQgIT09ICdzdHJpbmcnKSBzaW1wbGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNpbXBsZSAmJiBsYXN0U2ltcGxlKSB7XG5cdFx0XHRcdGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdICs9IGNoaWxkO1xuXHRcdFx0fSBlbHNlIGlmIChjaGlsZHJlbiA9PT0gRU1QVFlfQ0hJTERSRU4pIHtcblx0XHRcdFx0Y2hpbGRyZW4gPSBbY2hpbGRdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cdFx0XHR9XG5cblx0XHRcdGxhc3RTaW1wbGUgPSBzaW1wbGU7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHAgPSBuZXcgVk5vZGUoKTtcblx0cC5ub2RlTmFtZSA9IG5vZGVOYW1lO1xuXHRwLmNoaWxkcmVuID0gY2hpbGRyZW47XG5cdHAuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGF0dHJpYnV0ZXM7XG5cdHAua2V5ID0gYXR0cmlidXRlcyA9PSBudWxsID8gdW5kZWZpbmVkIDogYXR0cmlidXRlcy5rZXk7XG5cblx0Ly8gaWYgYSBcInZub2RlIGhvb2tcIiBpcyBkZWZpbmVkLCBwYXNzIGV2ZXJ5IGNyZWF0ZWQgVk5vZGUgdG8gaXRcblx0aWYgKG9wdGlvbnMudm5vZGUgIT09IHVuZGVmaW5lZCkgb3B0aW9ucy52bm9kZShwKTtcblxuXHRyZXR1cm4gcDtcbn1cblxuLyoqXG4gKiAgQ29weSBhbGwgcHJvcGVydGllcyBmcm9tIGBwcm9wc2Agb250byBgb2JqYC5cbiAqICBAcGFyYW0ge09iamVjdH0gb2JqXHRcdE9iamVjdCBvbnRvIHdoaWNoIHByb3BlcnRpZXMgc2hvdWxkIGJlIGNvcGllZC5cbiAqICBAcGFyYW0ge09iamVjdH0gcHJvcHNcdE9iamVjdCBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydGllcy5cbiAqICBAcmV0dXJucyBvYmpcbiAqICBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBleHRlbmQob2JqLCBwcm9wcykge1xuICBmb3IgKHZhciBpIGluIHByb3BzKSB7XG4gICAgb2JqW2ldID0gcHJvcHNbaV07XG4gIH1yZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIENhbGwgYSBmdW5jdGlvbiBhc3luY2hyb25vdXNseSwgYXMgc29vbiBhcyBwb3NzaWJsZS4gTWFrZXNcbiAqIHVzZSBvZiBIVE1MIFByb21pc2UgdG8gc2NoZWR1bGUgdGhlIGNhbGxiYWNrIGlmIGF2YWlsYWJsZSxcbiAqIG90aGVyd2lzZSBmYWxsaW5nIGJhY2sgdG8gYHNldFRpbWVvdXRgIChtYWlubHkgZm9yIElFPDExKS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG52YXIgZGVmZXIgPSB0eXBlb2YgUHJvbWlzZSA9PSAnZnVuY3Rpb24nID8gUHJvbWlzZS5yZXNvbHZlKCkudGhlbi5iaW5kKFByb21pc2UucmVzb2x2ZSgpKSA6IHNldFRpbWVvdXQ7XG5cbi8qKlxuICogQ2xvbmVzIHRoZSBnaXZlbiBWTm9kZSwgb3B0aW9uYWxseSBhZGRpbmcgYXR0cmlidXRlcy9wcm9wcyBhbmQgcmVwbGFjaW5nIGl0cyBjaGlsZHJlbi5cbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlXHRcdFRoZSB2aXJ1dGFsIERPTSBlbGVtZW50IHRvIGNsb25lXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcdEF0dHJpYnV0ZXMvcHJvcHMgdG8gYWRkIHdoZW4gY2xvbmluZ1xuICogQHBhcmFtIHtWTm9kZX0gcmVzdFx0XHRBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgd2lsbCBiZSB1c2VkIGFzIHJlcGxhY2VtZW50IGNoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQodm5vZGUsIHByb3BzKSB7XG4gIHJldHVybiBoKHZub2RlLm5vZGVOYW1lLCBleHRlbmQoZXh0ZW5kKHt9LCB2bm9kZS5hdHRyaWJ1dGVzKSwgcHJvcHMpLCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IHZub2RlLmNoaWxkcmVuKTtcbn1cblxuLy8gRE9NIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgTk9UIGhhdmUgXCJweFwiIGFkZGVkIHdoZW4gbnVtZXJpY1xudmFyIElTX05PTl9ESU1FTlNJT05BTCA9IC9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZC9pO1xuXG4vKiogTWFuYWdlZCBxdWV1ZSBvZiBkaXJ0eSBjb21wb25lbnRzIHRvIGJlIHJlLXJlbmRlcmVkICovXG5cbnZhciBpdGVtcyA9IFtdO1xuXG5mdW5jdGlvbiBlbnF1ZXVlUmVuZGVyKGNvbXBvbmVudCkge1xuXHRpZiAoIWNvbXBvbmVudC5fZGlydHkgJiYgKGNvbXBvbmVudC5fZGlydHkgPSB0cnVlKSAmJiBpdGVtcy5wdXNoKGNvbXBvbmVudCkgPT0gMSkge1xuXHRcdChvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nIHx8IGRlZmVyKShyZXJlbmRlcik7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVyZW5kZXIoKSB7XG5cdHZhciBwLFxuXHQgICAgbGlzdCA9IGl0ZW1zO1xuXHRpdGVtcyA9IFtdO1xuXHR3aGlsZSAocCA9IGxpc3QucG9wKCkpIHtcblx0XHRpZiAocC5fZGlydHkpIHJlbmRlckNvbXBvbmVudChwKTtcblx0fVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byBub2RlcyBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcdFx0XHRET00gTm9kZSB0byBjb21wYXJlXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZVx0XHRcdFZpcnR1YWwgRE9NIG5vZGUgdG8gY29tcGFyZVxuICogQHBhcmFtIHtib29sZWFufSBbaHlyZGF0aW5nPWZhbHNlXVx0SWYgdHJ1ZSwgaWdub3JlcyBjb21wb25lbnQgY29uc3RydWN0b3JzIHdoZW4gY29tcGFyaW5nLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNTYW1lTm9kZVR5cGUobm9kZSwgdm5vZGUsIGh5ZHJhdGluZykge1xuICBpZiAodHlwZW9mIHZub2RlID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygdm5vZGUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIG5vZGUuc3BsaXRUZXh0ICE9PSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiB2bm9kZS5ub2RlTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gIW5vZGUuX2NvbXBvbmVudENvbnN0cnVjdG9yICYmIGlzTmFtZWROb2RlKG5vZGUsIHZub2RlLm5vZGVOYW1lKTtcbiAgfVxuICByZXR1cm4gaHlkcmF0aW5nIHx8IG5vZGUuX2NvbXBvbmVudENvbnN0cnVjdG9yID09PSB2bm9kZS5ub2RlTmFtZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhbiBFbGVtZW50IGhhcyBhIGdpdmVuIG5vZGVOYW1lLCBjYXNlLWluc2Vuc2l0aXZlbHkuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBub2RlXHRBIERPTSBFbGVtZW50IHRvIGluc3BlY3QgdGhlIG5hbWUgb2YuXG4gKiBAcGFyYW0ge1N0cmluZ30gbm9kZU5hbWVcdFVubm9ybWFsaXplZCBuYW1lIHRvIGNvbXBhcmUgYWdhaW5zdC5cbiAqL1xuZnVuY3Rpb24gaXNOYW1lZE5vZGUobm9kZSwgbm9kZU5hbWUpIHtcbiAgcmV0dXJuIG5vZGUubm9ybWFsaXplZE5vZGVOYW1lID09PSBub2RlTmFtZSB8fCBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogUmVjb25zdHJ1Y3QgQ29tcG9uZW50LXN0eWxlIGBwcm9wc2AgZnJvbSBhIFZOb2RlLlxuICogRW5zdXJlcyBkZWZhdWx0L2ZhbGxiYWNrIHZhbHVlcyBmcm9tIGBkZWZhdWx0UHJvcHNgOlxuICogT3duLXByb3BlcnRpZXMgb2YgYGRlZmF1bHRQcm9wc2Agbm90IHByZXNlbnQgaW4gYHZub2RlLmF0dHJpYnV0ZXNgIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZVxuICogQHJldHVybnMge09iamVjdH0gcHJvcHNcbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZVByb3BzKHZub2RlKSB7XG4gIHZhciBwcm9wcyA9IGV4dGVuZCh7fSwgdm5vZGUuYXR0cmlidXRlcyk7XG4gIHByb3BzLmNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG5cbiAgdmFyIGRlZmF1bHRQcm9wcyA9IHZub2RlLm5vZGVOYW1lLmRlZmF1bHRQcm9wcztcbiAgaWYgKGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yICh2YXIgaSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW2ldID0gZGVmYXVsdFByb3BzW2ldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9wcztcbn1cblxuLyoqIENyZWF0ZSBhbiBlbGVtZW50IHdpdGggdGhlIGdpdmVuIG5vZGVOYW1lLlxuICpcdEBwYXJhbSB7U3RyaW5nfSBub2RlTmFtZVxuICpcdEBwYXJhbSB7Qm9vbGVhbn0gW2lzU3ZnPWZhbHNlXVx0SWYgYHRydWVgLCBjcmVhdGVzIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBTVkcgbmFtZXNwYWNlLlxuICpcdEByZXR1cm5zIHtFbGVtZW50fSBub2RlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vZGUobm9kZU5hbWUsIGlzU3ZnKSB7XG5cdHZhciBub2RlID0gaXNTdmcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgbm9kZU5hbWUpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChub2RlTmFtZSk7XG5cdG5vZGUubm9ybWFsaXplZE5vZGVOYW1lID0gbm9kZU5hbWU7XG5cdHJldHVybiBub2RlO1xufVxuXG4vKiogUmVtb3ZlIGEgY2hpbGQgbm9kZSBmcm9tIGl0cyBwYXJlbnQgaWYgYXR0YWNoZWQuXG4gKlx0QHBhcmFtIHtFbGVtZW50fSBub2RlXHRcdFRoZSBub2RlIHRvIHJlbW92ZVxuICovXG5mdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUpIHtcblx0dmFyIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdGlmIChwYXJlbnROb2RlKSBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xufVxuXG4vKiogU2V0IGEgbmFtZWQgYXR0cmlidXRlIG9uIHRoZSBnaXZlbiBOb2RlLCB3aXRoIHNwZWNpYWwgYmVoYXZpb3IgZm9yIHNvbWUgbmFtZXMgYW5kIGV2ZW50IGhhbmRsZXJzLlxuICpcdElmIGB2YWx1ZWAgaXMgYG51bGxgLCB0aGUgYXR0cmlidXRlL2hhbmRsZXIgd2lsbCBiZSByZW1vdmVkLlxuICpcdEBwYXJhbSB7RWxlbWVudH0gbm9kZVx0QW4gZWxlbWVudCB0byBtdXRhdGVcbiAqXHRAcGFyYW0ge3N0cmluZ30gbmFtZVx0VGhlIG5hbWUva2V5IHRvIHNldCwgc3VjaCBhcyBhbiBldmVudCBvciBhdHRyaWJ1dGUgbmFtZVxuICpcdEBwYXJhbSB7YW55fSBvbGRcdFRoZSBsYXN0IHZhbHVlIHRoYXQgd2FzIHNldCBmb3IgdGhpcyBuYW1lL25vZGUgcGFpclxuICpcdEBwYXJhbSB7YW55fSB2YWx1ZVx0QW4gYXR0cmlidXRlIHZhbHVlLCBzdWNoIGFzIGEgZnVuY3Rpb24gdG8gYmUgdXNlZCBhcyBhbiBldmVudCBoYW5kbGVyXG4gKlx0QHBhcmFtIHtCb29sZWFufSBpc1N2Z1x0QXJlIHdlIGN1cnJlbnRseSBkaWZmaW5nIGluc2lkZSBhbiBzdmc/XG4gKlx0QHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0QWNjZXNzb3Iobm9kZSwgbmFtZSwgb2xkLCB2YWx1ZSwgaXNTdmcpIHtcblx0aWYgKG5hbWUgPT09ICdjbGFzc05hbWUnKSBuYW1lID0gJ2NsYXNzJztcblxuXHRpZiAobmFtZSA9PT0gJ2tleScpIHtcblx0XHQvLyBpZ25vcmVcblx0fSBlbHNlIGlmIChuYW1lID09PSAncmVmJykge1xuXHRcdGlmIChvbGQpIG9sZChudWxsKTtcblx0XHRpZiAodmFsdWUpIHZhbHVlKG5vZGUpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICdjbGFzcycgJiYgIWlzU3ZnKSB7XG5cdFx0bm9kZS5jbGFzc05hbWUgPSB2YWx1ZSB8fCAnJztcblx0fSBlbHNlIGlmIChuYW1lID09PSAnc3R5bGUnKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvbGQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRub2RlLnN0eWxlLmNzc1RleHQgPSB2YWx1ZSB8fCAnJztcblx0XHR9XG5cdFx0aWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGlmICh0eXBlb2Ygb2xkICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRmb3IgKHZhciBpIGluIG9sZCkge1xuXHRcdFx0XHRcdGlmICghKGkgaW4gdmFsdWUpKSBub2RlLnN0eWxlW2ldID0gJyc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAodmFyIGkgaW4gdmFsdWUpIHtcblx0XHRcdFx0bm9kZS5zdHlsZVtpXSA9IHR5cGVvZiB2YWx1ZVtpXSA9PT0gJ251bWJlcicgJiYgSVNfTk9OX0RJTUVOU0lPTkFMLnRlc3QoaSkgPT09IGZhbHNlID8gdmFsdWVbaV0gKyAncHgnIDogdmFsdWVbaV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcpIHtcblx0XHRpZiAodmFsdWUpIG5vZGUuaW5uZXJIVE1MID0gdmFsdWUuX19odG1sIHx8ICcnO1xuXHR9IGVsc2UgaWYgKG5hbWVbMF0gPT0gJ28nICYmIG5hbWVbMV0gPT0gJ24nKSB7XG5cdFx0dmFyIHVzZUNhcHR1cmUgPSBuYW1lICE9PSAobmFtZSA9IG5hbWUucmVwbGFjZSgvQ2FwdHVyZSQvLCAnJykpO1xuXHRcdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCkuc3Vic3RyaW5nKDIpO1xuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0aWYgKCFvbGQpIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBldmVudFByb3h5LCB1c2VDYXB0dXJlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGV2ZW50UHJveHksIHVzZUNhcHR1cmUpO1xuXHRcdH1cblx0XHQobm9kZS5fbGlzdGVuZXJzIHx8IChub2RlLl9saXN0ZW5lcnMgPSB7fSkpW25hbWVdID0gdmFsdWU7XG5cdH0gZWxzZSBpZiAobmFtZSAhPT0gJ2xpc3QnICYmIG5hbWUgIT09ICd0eXBlJyAmJiAhaXNTdmcgJiYgbmFtZSBpbiBub2RlKSB7XG5cdFx0c2V0UHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSBmYWxzZSkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIG5zID0gaXNTdmcgJiYgbmFtZSAhPT0gKG5hbWUgPSBuYW1lLnJlcGxhY2UoL154bGlua1xcOj8vLCAnJykpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSBmYWxzZSkge1xuXHRcdFx0aWYgKG5zKSBub2RlLnJlbW92ZUF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgbmFtZS50b0xvd2VyQ2FzZSgpKTtlbHNlIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRpZiAobnMpIG5vZGUuc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCBuYW1lLnRvTG93ZXJDYXNlKCksIHZhbHVlKTtlbHNlIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqIEF0dGVtcHQgdG8gc2V0IGEgRE9NIHByb3BlcnR5IHRvIHRoZSBnaXZlbiB2YWx1ZS5cbiAqXHRJRSAmIEZGIHRocm93IGZvciBjZXJ0YWluIHByb3BlcnR5LXZhbHVlIGNvbWJpbmF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gc2V0UHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUpIHtcblx0dHJ5IHtcblx0XHRub2RlW25hbWVdID0gdmFsdWU7XG5cdH0gY2F0Y2ggKGUpIHt9XG59XG5cbi8qKiBQcm94eSBhbiBldmVudCB0byBob29rZWQgZXZlbnQgaGFuZGxlcnNcbiAqXHRAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBldmVudFByb3h5KGUpIHtcblx0cmV0dXJuIHRoaXMuX2xpc3RlbmVyc1tlLnR5cGVdKG9wdGlvbnMuZXZlbnQgJiYgb3B0aW9ucy5ldmVudChlKSB8fCBlKTtcbn1cblxuLyoqIFF1ZXVlIG9mIGNvbXBvbmVudHMgdGhhdCBoYXZlIGJlZW4gbW91bnRlZCBhbmQgYXJlIGF3YWl0aW5nIGNvbXBvbmVudERpZE1vdW50ICovXG52YXIgbW91bnRzID0gW107XG5cbi8qKiBEaWZmIHJlY3Vyc2lvbiBjb3VudCwgdXNlZCB0byB0cmFjayB0aGUgZW5kIG9mIHRoZSBkaWZmIGN5Y2xlLiAqL1xudmFyIGRpZmZMZXZlbCA9IDA7XG5cbi8qKiBHbG9iYWwgZmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBkaWZmIGlzIGN1cnJlbnRseSB3aXRoaW4gYW4gU1ZHICovXG52YXIgaXNTdmdNb2RlID0gZmFsc2U7XG5cbi8qKiBHbG9iYWwgZmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBkaWZmIGlzIHBlcmZvcm1pbmcgaHlkcmF0aW9uICovXG52YXIgaHlkcmF0aW5nID0gZmFsc2U7XG5cbi8qKiBJbnZva2UgcXVldWVkIGNvbXBvbmVudERpZE1vdW50IGxpZmVjeWNsZSBtZXRob2RzICovXG5mdW5jdGlvbiBmbHVzaE1vdW50cygpIHtcblx0dmFyIGM7XG5cdHdoaWxlIChjID0gbW91bnRzLnBvcCgpKSB7XG5cdFx0aWYgKG9wdGlvbnMuYWZ0ZXJNb3VudCkgb3B0aW9ucy5hZnRlck1vdW50KGMpO1xuXHRcdGlmIChjLmNvbXBvbmVudERpZE1vdW50KSBjLmNvbXBvbmVudERpZE1vdW50KCk7XG5cdH1cbn1cblxuLyoqIEFwcGx5IGRpZmZlcmVuY2VzIGluIGEgZ2l2ZW4gdm5vZGUgKGFuZCBpdCdzIGRlZXAgY2hpbGRyZW4pIHRvIGEgcmVhbCBET00gTm9kZS5cbiAqXHRAcGFyYW0ge0VsZW1lbnR9IFtkb209bnVsbF1cdFx0QSBET00gbm9kZSB0byBtdXRhdGUgaW50byB0aGUgc2hhcGUgb2YgdGhlIGB2bm9kZWBcbiAqXHRAcGFyYW0ge1ZOb2RlfSB2bm9kZVx0XHRcdEEgVk5vZGUgKHdpdGggZGVzY2VuZGFudHMgZm9ybWluZyBhIHRyZWUpIHJlcHJlc2VudGluZyB0aGUgZGVzaXJlZCBET00gc3RydWN0dXJlXG4gKlx0QHJldHVybnMge0VsZW1lbnR9IGRvbVx0XHRcdFRoZSBjcmVhdGVkL211dGF0ZWQgZWxlbWVudFxuICpcdEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRpZmYoZG9tLCB2bm9kZSwgY29udGV4dCwgbW91bnRBbGwsIHBhcmVudCwgY29tcG9uZW50Um9vdCkge1xuXHQvLyBkaWZmTGV2ZWwgaGF2aW5nIGJlZW4gMCBoZXJlIGluZGljYXRlcyBpbml0aWFsIGVudHJ5IGludG8gdGhlIGRpZmYgKG5vdCBhIHN1YmRpZmYpXG5cdGlmICghZGlmZkxldmVsKyspIHtcblx0XHQvLyB3aGVuIGZpcnN0IHN0YXJ0aW5nIHRoZSBkaWZmLCBjaGVjayBpZiB3ZSdyZSBkaWZmaW5nIGFuIFNWRyBvciB3aXRoaW4gYW4gU1ZHXG5cdFx0aXNTdmdNb2RlID0gcGFyZW50ICE9IG51bGwgJiYgcGFyZW50Lm93bmVyU1ZHRWxlbWVudCAhPT0gdW5kZWZpbmVkO1xuXG5cdFx0Ly8gaHlkcmF0aW9uIGlzIGluZGljYXRlZCBieSB0aGUgZXhpc3RpbmcgZWxlbWVudCB0byBiZSBkaWZmZWQgbm90IGhhdmluZyBhIHByb3AgY2FjaGVcblx0XHRoeWRyYXRpbmcgPSBkb20gIT0gbnVsbCAmJiAhKCdfX3ByZWFjdGF0dHJfJyBpbiBkb20pO1xuXHR9XG5cblx0dmFyIHJldCA9IGlkaWZmKGRvbSwgdm5vZGUsIGNvbnRleHQsIG1vdW50QWxsLCBjb21wb25lbnRSb290KTtcblxuXHQvLyBhcHBlbmQgdGhlIGVsZW1lbnQgaWYgaXRzIGEgbmV3IHBhcmVudFxuXHRpZiAocGFyZW50ICYmIHJldC5wYXJlbnROb2RlICE9PSBwYXJlbnQpIHBhcmVudC5hcHBlbmRDaGlsZChyZXQpO1xuXG5cdC8vIGRpZmZMZXZlbCBiZWluZyByZWR1Y2VkIHRvIDAgbWVhbnMgd2UncmUgZXhpdGluZyB0aGUgZGlmZlxuXHRpZiAoISAtLWRpZmZMZXZlbCkge1xuXHRcdGh5ZHJhdGluZyA9IGZhbHNlO1xuXHRcdC8vIGludm9rZSBxdWV1ZWQgY29tcG9uZW50RGlkTW91bnQgbGlmZWN5Y2xlIG1ldGhvZHNcblx0XHRpZiAoIWNvbXBvbmVudFJvb3QpIGZsdXNoTW91bnRzKCk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG4vKiogSW50ZXJuYWxzIG9mIGBkaWZmKClgLCBzZXBhcmF0ZWQgdG8gYWxsb3cgYnlwYXNzaW5nIGRpZmZMZXZlbCAvIG1vdW50IGZsdXNoaW5nLiAqL1xuZnVuY3Rpb24gaWRpZmYoZG9tLCB2bm9kZSwgY29udGV4dCwgbW91bnRBbGwsIGNvbXBvbmVudFJvb3QpIHtcblx0dmFyIG91dCA9IGRvbSxcblx0ICAgIHByZXZTdmdNb2RlID0gaXNTdmdNb2RlO1xuXG5cdC8vIGVtcHR5IHZhbHVlcyAobnVsbCwgdW5kZWZpbmVkLCBib29sZWFucykgcmVuZGVyIGFzIGVtcHR5IFRleHQgbm9kZXNcblx0aWYgKHZub2RlID09IG51bGwgfHwgdHlwZW9mIHZub2RlID09PSAnYm9vbGVhbicpIHZub2RlID0gJyc7XG5cblx0Ly8gRmFzdCBjYXNlOiBTdHJpbmdzICYgTnVtYmVycyBjcmVhdGUvdXBkYXRlIFRleHQgbm9kZXMuXG5cdGlmICh0eXBlb2Ygdm5vZGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2bm9kZSA9PT0gJ251bWJlcicpIHtcblxuXHRcdC8vIHVwZGF0ZSBpZiBpdCdzIGFscmVhZHkgYSBUZXh0IG5vZGU6XG5cdFx0aWYgKGRvbSAmJiBkb20uc3BsaXRUZXh0ICE9PSB1bmRlZmluZWQgJiYgZG9tLnBhcmVudE5vZGUgJiYgKCFkb20uX2NvbXBvbmVudCB8fCBjb21wb25lbnRSb290KSkge1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGlmICovIC8qIEJyb3dzZXIgcXVpcmsgdGhhdCBjYW4ndCBiZSBjb3ZlcmVkOiBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC9jb21taXQvZmQ0ZjIxZjVjNDVkZmQ3NTE1MWJkMjdiNGMyMTdkODAwM2FhNWViOSAqL1xuXHRcdFx0aWYgKGRvbS5ub2RlVmFsdWUgIT0gdm5vZGUpIHtcblx0XHRcdFx0ZG9tLm5vZGVWYWx1ZSA9IHZub2RlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpdCB3YXNuJ3QgYSBUZXh0IG5vZGU6IHJlcGxhY2UgaXQgd2l0aCBvbmUgYW5kIHJlY3ljbGUgdGhlIG9sZCBFbGVtZW50XG5cdFx0XHRvdXQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2bm9kZSk7XG5cdFx0XHRpZiAoZG9tKSB7XG5cdFx0XHRcdGlmIChkb20ucGFyZW50Tm9kZSkgZG9tLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG91dCwgZG9tKTtcblx0XHRcdFx0cmVjb2xsZWN0Tm9kZVRyZWUoZG9tLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvdXRbJ19fcHJlYWN0YXR0cl8nXSA9IHRydWU7XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0Ly8gSWYgdGhlIFZOb2RlIHJlcHJlc2VudHMgYSBDb21wb25lbnQsIHBlcmZvcm0gYSBjb21wb25lbnQgZGlmZjpcblx0dmFyIHZub2RlTmFtZSA9IHZub2RlLm5vZGVOYW1lO1xuXHRpZiAodHlwZW9mIHZub2RlTmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBidWlsZENvbXBvbmVudEZyb21WTm9kZShkb20sIHZub2RlLCBjb250ZXh0LCBtb3VudEFsbCk7XG5cdH1cblxuXHQvLyBUcmFja3MgZW50ZXJpbmcgYW5kIGV4aXRpbmcgU1ZHIG5hbWVzcGFjZSB3aGVuIGRlc2NlbmRpbmcgdGhyb3VnaCB0aGUgdHJlZS5cblx0aXNTdmdNb2RlID0gdm5vZGVOYW1lID09PSAnc3ZnJyA/IHRydWUgOiB2bm9kZU5hbWUgPT09ICdmb3JlaWduT2JqZWN0JyA/IGZhbHNlIDogaXNTdmdNb2RlO1xuXG5cdC8vIElmIHRoZXJlJ3Mgbm8gZXhpc3RpbmcgZWxlbWVudCBvciBpdCdzIHRoZSB3cm9uZyB0eXBlLCBjcmVhdGUgYSBuZXcgb25lOlxuXHR2bm9kZU5hbWUgPSBTdHJpbmcodm5vZGVOYW1lKTtcblx0aWYgKCFkb20gfHwgIWlzTmFtZWROb2RlKGRvbSwgdm5vZGVOYW1lKSkge1xuXHRcdG91dCA9IGNyZWF0ZU5vZGUodm5vZGVOYW1lLCBpc1N2Z01vZGUpO1xuXG5cdFx0aWYgKGRvbSkge1xuXHRcdFx0Ly8gbW92ZSBjaGlsZHJlbiBpbnRvIHRoZSByZXBsYWNlbWVudCBub2RlXG5cdFx0XHR3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcblx0XHRcdFx0b3V0LmFwcGVuZENoaWxkKGRvbS5maXJzdENoaWxkKTtcblx0XHRcdH0gLy8gaWYgdGhlIHByZXZpb3VzIEVsZW1lbnQgd2FzIG1vdW50ZWQgaW50byB0aGUgRE9NLCByZXBsYWNlIGl0IGlubGluZVxuXHRcdFx0aWYgKGRvbS5wYXJlbnROb2RlKSBkb20ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQob3V0LCBkb20pO1xuXG5cdFx0XHQvLyByZWN5Y2xlIHRoZSBvbGQgZWxlbWVudCAoc2tpcHMgbm9uLUVsZW1lbnQgbm9kZSB0eXBlcylcblx0XHRcdHJlY29sbGVjdE5vZGVUcmVlKGRvbSwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIGZjID0gb3V0LmZpcnN0Q2hpbGQsXG5cdCAgICBwcm9wcyA9IG91dFsnX19wcmVhY3RhdHRyXyddLFxuXHQgICAgdmNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG5cblx0aWYgKHByb3BzID09IG51bGwpIHtcblx0XHRwcm9wcyA9IG91dFsnX19wcmVhY3RhdHRyXyddID0ge307XG5cdFx0Zm9yICh2YXIgYSA9IG91dC5hdHRyaWJ1dGVzLCBpID0gYS5sZW5ndGg7IGktLTspIHtcblx0XHRcdHByb3BzW2FbaV0ubmFtZV0gPSBhW2ldLnZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdC8vIE9wdGltaXphdGlvbjogZmFzdC1wYXRoIGZvciBlbGVtZW50cyBjb250YWluaW5nIGEgc2luZ2xlIFRleHROb2RlOlxuXHRpZiAoIWh5ZHJhdGluZyAmJiB2Y2hpbGRyZW4gJiYgdmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgdmNoaWxkcmVuWzBdID09PSAnc3RyaW5nJyAmJiBmYyAhPSBudWxsICYmIGZjLnNwbGl0VGV4dCAhPT0gdW5kZWZpbmVkICYmIGZjLm5leHRTaWJsaW5nID09IG51bGwpIHtcblx0XHRpZiAoZmMubm9kZVZhbHVlICE9IHZjaGlsZHJlblswXSkge1xuXHRcdFx0ZmMubm9kZVZhbHVlID0gdmNoaWxkcmVuWzBdO1xuXHRcdH1cblx0fVxuXHQvLyBvdGhlcndpc2UsIGlmIHRoZXJlIGFyZSBleGlzdGluZyBvciBuZXcgY2hpbGRyZW4sIGRpZmYgdGhlbTpcblx0ZWxzZSBpZiAodmNoaWxkcmVuICYmIHZjaGlsZHJlbi5sZW5ndGggfHwgZmMgIT0gbnVsbCkge1xuXHRcdFx0aW5uZXJEaWZmTm9kZShvdXQsIHZjaGlsZHJlbiwgY29udGV4dCwgbW91bnRBbGwsIGh5ZHJhdGluZyB8fCBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPSBudWxsKTtcblx0XHR9XG5cblx0Ly8gQXBwbHkgYXR0cmlidXRlcy9wcm9wcyBmcm9tIFZOb2RlIHRvIHRoZSBET00gRWxlbWVudDpcblx0ZGlmZkF0dHJpYnV0ZXMob3V0LCB2bm9kZS5hdHRyaWJ1dGVzLCBwcm9wcyk7XG5cblx0Ly8gcmVzdG9yZSBwcmV2aW91cyBTVkcgbW9kZTogKGluIGNhc2Ugd2UncmUgZXhpdGluZyBhbiBTVkcgbmFtZXNwYWNlKVxuXHRpc1N2Z01vZGUgPSBwcmV2U3ZnTW9kZTtcblxuXHRyZXR1cm4gb3V0O1xufVxuXG4vKiogQXBwbHkgY2hpbGQgYW5kIGF0dHJpYnV0ZSBjaGFuZ2VzIGJldHdlZW4gYSBWTm9kZSBhbmQgYSBET00gTm9kZSB0byB0aGUgRE9NLlxuICpcdEBwYXJhbSB7RWxlbWVudH0gZG9tXHRcdFx0RWxlbWVudCB3aG9zZSBjaGlsZHJlbiBzaG91bGQgYmUgY29tcGFyZWQgJiBtdXRhdGVkXG4gKlx0QHBhcmFtIHtBcnJheX0gdmNoaWxkcmVuXHRcdEFycmF5IG9mIFZOb2RlcyB0byBjb21wYXJlIHRvIGBkb20uY2hpbGROb2Rlc2BcbiAqXHRAcGFyYW0ge09iamVjdH0gY29udGV4dFx0XHRcdEltcGxpY2l0bHkgZGVzY2VuZGFudCBjb250ZXh0IG9iamVjdCAoZnJvbSBtb3N0IHJlY2VudCBgZ2V0Q2hpbGRDb250ZXh0KClgKVxuICpcdEBwYXJhbSB7Qm9vbGVhbn0gbW91bnRBbGxcbiAqXHRAcGFyYW0ge0Jvb2xlYW59IGlzSHlkcmF0aW5nXHRJZiBgdHJ1ZWAsIGNvbnN1bWVzIGV4dGVybmFsbHkgY3JlYXRlZCBlbGVtZW50cyBzaW1pbGFyIHRvIGh5ZHJhdGlvblxuICovXG5mdW5jdGlvbiBpbm5lckRpZmZOb2RlKGRvbSwgdmNoaWxkcmVuLCBjb250ZXh0LCBtb3VudEFsbCwgaXNIeWRyYXRpbmcpIHtcblx0dmFyIG9yaWdpbmFsQ2hpbGRyZW4gPSBkb20uY2hpbGROb2Rlcyxcblx0ICAgIGNoaWxkcmVuID0gW10sXG5cdCAgICBrZXllZCA9IHt9LFxuXHQgICAga2V5ZWRMZW4gPSAwLFxuXHQgICAgbWluID0gMCxcblx0ICAgIGxlbiA9IG9yaWdpbmFsQ2hpbGRyZW4ubGVuZ3RoLFxuXHQgICAgY2hpbGRyZW5MZW4gPSAwLFxuXHQgICAgdmxlbiA9IHZjaGlsZHJlbiA/IHZjaGlsZHJlbi5sZW5ndGggOiAwLFxuXHQgICAgaixcblx0ICAgIGMsXG5cdCAgICBmLFxuXHQgICAgdmNoaWxkLFxuXHQgICAgY2hpbGQ7XG5cblx0Ly8gQnVpbGQgdXAgYSBtYXAgb2Yga2V5ZWQgY2hpbGRyZW4gYW5kIGFuIEFycmF5IG9mIHVua2V5ZWQgY2hpbGRyZW46XG5cdGlmIChsZW4gIT09IDApIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHR2YXIgX2NoaWxkID0gb3JpZ2luYWxDaGlsZHJlbltpXSxcblx0XHRcdCAgICBwcm9wcyA9IF9jaGlsZFsnX19wcmVhY3RhdHRyXyddLFxuXHRcdFx0ICAgIGtleSA9IHZsZW4gJiYgcHJvcHMgPyBfY2hpbGQuX2NvbXBvbmVudCA/IF9jaGlsZC5fY29tcG9uZW50Ll9fa2V5IDogcHJvcHMua2V5IDogbnVsbDtcblx0XHRcdGlmIChrZXkgIT0gbnVsbCkge1xuXHRcdFx0XHRrZXllZExlbisrO1xuXHRcdFx0XHRrZXllZFtrZXldID0gX2NoaWxkO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wcyB8fCAoX2NoaWxkLnNwbGl0VGV4dCAhPT0gdW5kZWZpbmVkID8gaXNIeWRyYXRpbmcgPyBfY2hpbGQubm9kZVZhbHVlLnRyaW0oKSA6IHRydWUgOiBpc0h5ZHJhdGluZykpIHtcblx0XHRcdFx0Y2hpbGRyZW5bY2hpbGRyZW5MZW4rK10gPSBfY2hpbGQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZsZW4gIT09IDApIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZsZW47IGkrKykge1xuXHRcdFx0dmNoaWxkID0gdmNoaWxkcmVuW2ldO1xuXHRcdFx0Y2hpbGQgPSBudWxsO1xuXG5cdFx0XHQvLyBhdHRlbXB0IHRvIGZpbmQgYSBub2RlIGJhc2VkIG9uIGtleSBtYXRjaGluZ1xuXHRcdFx0dmFyIGtleSA9IHZjaGlsZC5rZXk7XG5cdFx0XHRpZiAoa2V5ICE9IG51bGwpIHtcblx0XHRcdFx0aWYgKGtleWVkTGVuICYmIGtleWVkW2tleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNoaWxkID0ga2V5ZWRba2V5XTtcblx0XHRcdFx0XHRrZXllZFtrZXldID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGtleWVkTGVuLS07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIGF0dGVtcHQgdG8gcGx1Y2sgYSBub2RlIG9mIHRoZSBzYW1lIHR5cGUgZnJvbSB0aGUgZXhpc3RpbmcgY2hpbGRyZW5cblx0XHRcdGVsc2UgaWYgKCFjaGlsZCAmJiBtaW4gPCBjaGlsZHJlbkxlbikge1xuXHRcdFx0XHRcdGZvciAoaiA9IG1pbjsgaiA8IGNoaWxkcmVuTGVuOyBqKyspIHtcblx0XHRcdFx0XHRcdGlmIChjaGlsZHJlbltqXSAhPT0gdW5kZWZpbmVkICYmIGlzU2FtZU5vZGVUeXBlKGMgPSBjaGlsZHJlbltqXSwgdmNoaWxkLCBpc0h5ZHJhdGluZykpIHtcblx0XHRcdFx0XHRcdFx0Y2hpbGQgPSBjO1xuXHRcdFx0XHRcdFx0XHRjaGlsZHJlbltqXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0aWYgKGogPT09IGNoaWxkcmVuTGVuIC0gMSkgY2hpbGRyZW5MZW4tLTtcblx0XHRcdFx0XHRcdFx0aWYgKGogPT09IG1pbikgbWluKys7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBtb3JwaCB0aGUgbWF0Y2hlZC9mb3VuZC9jcmVhdGVkIERPTSBjaGlsZCB0byBtYXRjaCB2Y2hpbGQgKGRlZXApXG5cdFx0XHRjaGlsZCA9IGlkaWZmKGNoaWxkLCB2Y2hpbGQsIGNvbnRleHQsIG1vdW50QWxsKTtcblxuXHRcdFx0ZiA9IG9yaWdpbmFsQ2hpbGRyZW5baV07XG5cdFx0XHRpZiAoY2hpbGQgJiYgY2hpbGQgIT09IGRvbSAmJiBjaGlsZCAhPT0gZikge1xuXHRcdFx0XHRpZiAoZiA9PSBudWxsKSB7XG5cdFx0XHRcdFx0ZG9tLmFwcGVuZENoaWxkKGNoaWxkKTtcblx0XHRcdFx0fSBlbHNlIGlmIChjaGlsZCA9PT0gZi5uZXh0U2libGluZykge1xuXHRcdFx0XHRcdHJlbW92ZU5vZGUoZik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZG9tLmluc2VydEJlZm9yZShjaGlsZCwgZik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyByZW1vdmUgdW51c2VkIGtleWVkIGNoaWxkcmVuOlxuXHRpZiAoa2V5ZWRMZW4pIHtcblx0XHRmb3IgKHZhciBpIGluIGtleWVkKSB7XG5cdFx0XHRpZiAoa2V5ZWRbaV0gIT09IHVuZGVmaW5lZCkgcmVjb2xsZWN0Tm9kZVRyZWUoa2V5ZWRbaV0sIGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvLyByZW1vdmUgb3JwaGFuZWQgdW5rZXllZCBjaGlsZHJlbjpcblx0d2hpbGUgKG1pbiA8PSBjaGlsZHJlbkxlbikge1xuXHRcdGlmICgoY2hpbGQgPSBjaGlsZHJlbltjaGlsZHJlbkxlbi0tXSkgIT09IHVuZGVmaW5lZCkgcmVjb2xsZWN0Tm9kZVRyZWUoY2hpbGQsIGZhbHNlKTtcblx0fVxufVxuXG4vKiogUmVjdXJzaXZlbHkgcmVjeWNsZSAob3IganVzdCB1bm1vdW50KSBhIG5vZGUgYW5kIGl0cyBkZXNjZW5kYW50cy5cbiAqXHRAcGFyYW0ge05vZGV9IG5vZGVcdFx0XHRcdFx0XHRET00gbm9kZSB0byBzdGFydCB1bm1vdW50L3JlbW92YWwgZnJvbVxuICpcdEBwYXJhbSB7Qm9vbGVhbn0gW3VubW91bnRPbmx5PWZhbHNlXVx0SWYgYHRydWVgLCBvbmx5IHRyaWdnZXJzIHVubW91bnQgbGlmZWN5Y2xlLCBza2lwcyByZW1vdmFsXG4gKi9cbmZ1bmN0aW9uIHJlY29sbGVjdE5vZGVUcmVlKG5vZGUsIHVubW91bnRPbmx5KSB7XG5cdHZhciBjb21wb25lbnQgPSBub2RlLl9jb21wb25lbnQ7XG5cdGlmIChjb21wb25lbnQpIHtcblx0XHQvLyBpZiBub2RlIGlzIG93bmVkIGJ5IGEgQ29tcG9uZW50LCB1bm1vdW50IHRoYXQgY29tcG9uZW50IChlbmRzIHVwIHJlY3Vyc2luZyBiYWNrIGhlcmUpXG5cdFx0dW5tb3VudENvbXBvbmVudChjb21wb25lbnQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIElmIHRoZSBub2RlJ3MgVk5vZGUgaGFkIGEgcmVmIGZ1bmN0aW9uLCBpbnZva2UgaXQgd2l0aCBudWxsIGhlcmUuXG5cdFx0Ly8gKHRoaXMgaXMgcGFydCBvZiB0aGUgUmVhY3Qgc3BlYywgYW5kIHNtYXJ0IGZvciB1bnNldHRpbmcgcmVmZXJlbmNlcylcblx0XHRpZiAobm9kZVsnX19wcmVhY3RhdHRyXyddICE9IG51bGwgJiYgbm9kZVsnX19wcmVhY3RhdHRyXyddLnJlZikgbm9kZVsnX19wcmVhY3RhdHRyXyddLnJlZihudWxsKTtcblxuXHRcdGlmICh1bm1vdW50T25seSA9PT0gZmFsc2UgfHwgbm9kZVsnX19wcmVhY3RhdHRyXyddID09IG51bGwpIHtcblx0XHRcdHJlbW92ZU5vZGUobm9kZSk7XG5cdFx0fVxuXG5cdFx0cmVtb3ZlQ2hpbGRyZW4obm9kZSk7XG5cdH1cbn1cblxuLyoqIFJlY29sbGVjdC91bm1vdW50IGFsbCBjaGlsZHJlbi5cbiAqXHQtIHdlIHVzZSAubGFzdENoaWxkIGhlcmUgYmVjYXVzZSBpdCBjYXVzZXMgbGVzcyByZWZsb3cgdGhhbiAuZmlyc3RDaGlsZFxuICpcdC0gaXQncyBhbHNvIGNoZWFwZXIgdGhhbiBhY2Nlc3NpbmcgdGhlIC5jaGlsZE5vZGVzIExpdmUgTm9kZUxpc3RcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2hpbGRyZW4obm9kZSkge1xuXHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdHdoaWxlIChub2RlKSB7XG5cdFx0dmFyIG5leHQgPSBub2RlLnByZXZpb3VzU2libGluZztcblx0XHRyZWNvbGxlY3ROb2RlVHJlZShub2RlLCB0cnVlKTtcblx0XHRub2RlID0gbmV4dDtcblx0fVxufVxuXG4vKiogQXBwbHkgZGlmZmVyZW5jZXMgaW4gYXR0cmlidXRlcyBmcm9tIGEgVk5vZGUgdG8gdGhlIGdpdmVuIERPTSBFbGVtZW50LlxuICpcdEBwYXJhbSB7RWxlbWVudH0gZG9tXHRcdEVsZW1lbnQgd2l0aCBhdHRyaWJ1dGVzIHRvIGRpZmYgYGF0dHJzYCBhZ2FpbnN0XG4gKlx0QHBhcmFtIHtPYmplY3R9IGF0dHJzXHRcdFRoZSBkZXNpcmVkIGVuZC1zdGF0ZSBrZXktdmFsdWUgYXR0cmlidXRlIHBhaXJzXG4gKlx0QHBhcmFtIHtPYmplY3R9IG9sZFx0XHRcdEN1cnJlbnQvcHJldmlvdXMgYXR0cmlidXRlcyAoZnJvbSBwcmV2aW91cyBWTm9kZSBvciBlbGVtZW50J3MgcHJvcCBjYWNoZSlcbiAqL1xuZnVuY3Rpb24gZGlmZkF0dHJpYnV0ZXMoZG9tLCBhdHRycywgb2xkKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIHJlbW92ZSBhdHRyaWJ1dGVzIG5vIGxvbmdlciBwcmVzZW50IG9uIHRoZSB2bm9kZSBieSBzZXR0aW5nIHRoZW0gdG8gdW5kZWZpbmVkXG5cdGZvciAobmFtZSBpbiBvbGQpIHtcblx0XHRpZiAoIShhdHRycyAmJiBhdHRyc1tuYW1lXSAhPSBudWxsKSAmJiBvbGRbbmFtZV0gIT0gbnVsbCkge1xuXHRcdFx0c2V0QWNjZXNzb3IoZG9tLCBuYW1lLCBvbGRbbmFtZV0sIG9sZFtuYW1lXSA9IHVuZGVmaW5lZCwgaXNTdmdNb2RlKTtcblx0XHR9XG5cdH1cblxuXHQvLyBhZGQgbmV3ICYgdXBkYXRlIGNoYW5nZWQgYXR0cmlidXRlc1xuXHRmb3IgKG5hbWUgaW4gYXR0cnMpIHtcblx0XHRpZiAobmFtZSAhPT0gJ2NoaWxkcmVuJyAmJiBuYW1lICE9PSAnaW5uZXJIVE1MJyAmJiAoIShuYW1lIGluIG9sZCkgfHwgYXR0cnNbbmFtZV0gIT09IChuYW1lID09PSAndmFsdWUnIHx8IG5hbWUgPT09ICdjaGVja2VkJyA/IGRvbVtuYW1lXSA6IG9sZFtuYW1lXSkpKSB7XG5cdFx0XHRzZXRBY2Nlc3Nvcihkb20sIG5hbWUsIG9sZFtuYW1lXSwgb2xkW25hbWVdID0gYXR0cnNbbmFtZV0sIGlzU3ZnTW9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKiBSZXRhaW5zIGEgcG9vbCBvZiBDb21wb25lbnRzIGZvciByZS11c2UsIGtleWVkIG9uIGNvbXBvbmVudCBuYW1lLlxuICpcdE5vdGU6IHNpbmNlIGNvbXBvbmVudCBuYW1lcyBhcmUgbm90IHVuaXF1ZSBvciBldmVuIG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSwgdGhlc2UgYXJlIHByaW1hcmlseSBhIGZvcm0gb2Ygc2hhcmRpbmcuXG4gKlx0QHByaXZhdGVcbiAqL1xudmFyIGNvbXBvbmVudHMgPSB7fTtcblxuLyoqIFJlY2xhaW0gYSBjb21wb25lbnQgZm9yIGxhdGVyIHJlLXVzZSBieSB0aGUgcmVjeWNsZXIuICovXG5mdW5jdGlvbiBjb2xsZWN0Q29tcG9uZW50KGNvbXBvbmVudCkge1xuXHR2YXIgbmFtZSA9IGNvbXBvbmVudC5jb25zdHJ1Y3Rvci5uYW1lO1xuXHQoY29tcG9uZW50c1tuYW1lXSB8fCAoY29tcG9uZW50c1tuYW1lXSA9IFtdKSkucHVzaChjb21wb25lbnQpO1xufVxuXG4vKiogQ3JlYXRlIGEgY29tcG9uZW50LiBOb3JtYWxpemVzIGRpZmZlcmVuY2VzIGJldHdlZW4gUEZDJ3MgYW5kIGNsYXNzZnVsIENvbXBvbmVudHMuICovXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnQoQ3RvciwgcHJvcHMsIGNvbnRleHQpIHtcblx0dmFyIGxpc3QgPSBjb21wb25lbnRzW0N0b3IubmFtZV0sXG5cdCAgICBpbnN0O1xuXG5cdGlmIChDdG9yLnByb3RvdHlwZSAmJiBDdG9yLnByb3RvdHlwZS5yZW5kZXIpIHtcblx0XHRpbnN0ID0gbmV3IEN0b3IocHJvcHMsIGNvbnRleHQpO1xuXHRcdENvbXBvbmVudC5jYWxsKGluc3QsIHByb3BzLCBjb250ZXh0KTtcblx0fSBlbHNlIHtcblx0XHRpbnN0ID0gbmV3IENvbXBvbmVudChwcm9wcywgY29udGV4dCk7XG5cdFx0aW5zdC5jb25zdHJ1Y3RvciA9IEN0b3I7XG5cdFx0aW5zdC5yZW5kZXIgPSBkb1JlbmRlcjtcblx0fVxuXG5cdGlmIChsaXN0KSB7XG5cdFx0Zm9yICh2YXIgaSA9IGxpc3QubGVuZ3RoOyBpLS07KSB7XG5cdFx0XHRpZiAobGlzdFtpXS5jb25zdHJ1Y3RvciA9PT0gQ3Rvcikge1xuXHRcdFx0XHRpbnN0Lm5leHRCYXNlID0gbGlzdFtpXS5uZXh0QmFzZTtcblx0XHRcdFx0bGlzdC5zcGxpY2UoaSwgMSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW5zdDtcbn1cblxuLyoqIFRoZSBgLnJlbmRlcigpYCBtZXRob2QgZm9yIGEgUEZDIGJhY2tpbmcgaW5zdGFuY2UuICovXG5mdW5jdGlvbiBkb1JlbmRlcihwcm9wcywgc3RhdGUsIGNvbnRleHQpIHtcblx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IocHJvcHMsIGNvbnRleHQpO1xufVxuXG4vKiogU2V0IGEgY29tcG9uZW50J3MgYHByb3BzYCAoZ2VuZXJhbGx5IGRlcml2ZWQgZnJvbSBKU1ggYXR0cmlidXRlcykuXG4gKlx0QHBhcmFtIHtPYmplY3R9IHByb3BzXG4gKlx0QHBhcmFtIHtPYmplY3R9IFtvcHRzXVxuICpcdEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMucmVuZGVyU3luYz1mYWxzZV1cdElmIGB0cnVlYCBhbmQge0BsaW5rIG9wdGlvbnMuc3luY0NvbXBvbmVudFVwZGF0ZXN9IGlzIGB0cnVlYCwgdHJpZ2dlcnMgc3luY2hyb25vdXMgcmVuZGVyaW5nLlxuICpcdEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMucmVuZGVyPXRydWVdXHRcdFx0SWYgYGZhbHNlYCwgbm8gcmVuZGVyIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICovXG5mdW5jdGlvbiBzZXRDb21wb25lbnRQcm9wcyhjb21wb25lbnQsIHByb3BzLCBvcHRzLCBjb250ZXh0LCBtb3VudEFsbCkge1xuXHRpZiAoY29tcG9uZW50Ll9kaXNhYmxlKSByZXR1cm47XG5cdGNvbXBvbmVudC5fZGlzYWJsZSA9IHRydWU7XG5cblx0aWYgKGNvbXBvbmVudC5fX3JlZiA9IHByb3BzLnJlZikgZGVsZXRlIHByb3BzLnJlZjtcblx0aWYgKGNvbXBvbmVudC5fX2tleSA9IHByb3BzLmtleSkgZGVsZXRlIHByb3BzLmtleTtcblxuXHRpZiAoIWNvbXBvbmVudC5iYXNlIHx8IG1vdW50QWxsKSB7XG5cdFx0aWYgKGNvbXBvbmVudC5jb21wb25lbnRXaWxsTW91bnQpIGNvbXBvbmVudC5jb21wb25lbnRXaWxsTW91bnQoKTtcblx0fSBlbHNlIGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcykge1xuXHRcdGNvbXBvbmVudC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHByb3BzLCBjb250ZXh0KTtcblx0fVxuXG5cdGlmIChjb250ZXh0ICYmIGNvbnRleHQgIT09IGNvbXBvbmVudC5jb250ZXh0KSB7XG5cdFx0aWYgKCFjb21wb25lbnQucHJldkNvbnRleHQpIGNvbXBvbmVudC5wcmV2Q29udGV4dCA9IGNvbXBvbmVudC5jb250ZXh0O1xuXHRcdGNvbXBvbmVudC5jb250ZXh0ID0gY29udGV4dDtcblx0fVxuXG5cdGlmICghY29tcG9uZW50LnByZXZQcm9wcykgY29tcG9uZW50LnByZXZQcm9wcyA9IGNvbXBvbmVudC5wcm9wcztcblx0Y29tcG9uZW50LnByb3BzID0gcHJvcHM7XG5cblx0Y29tcG9uZW50Ll9kaXNhYmxlID0gZmFsc2U7XG5cblx0aWYgKG9wdHMgIT09IDApIHtcblx0XHRpZiAob3B0cyA9PT0gMSB8fCBvcHRpb25zLnN5bmNDb21wb25lbnRVcGRhdGVzICE9PSBmYWxzZSB8fCAhY29tcG9uZW50LmJhc2UpIHtcblx0XHRcdHJlbmRlckNvbXBvbmVudChjb21wb25lbnQsIDEsIG1vdW50QWxsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZW5xdWV1ZVJlbmRlcihjb21wb25lbnQpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChjb21wb25lbnQuX19yZWYpIGNvbXBvbmVudC5fX3JlZihjb21wb25lbnQpO1xufVxuXG4vKiogUmVuZGVyIGEgQ29tcG9uZW50LCB0cmlnZ2VyaW5nIG5lY2Vzc2FyeSBsaWZlY3ljbGUgZXZlbnRzIGFuZCB0YWtpbmcgSGlnaC1PcmRlciBDb21wb25lbnRzIGludG8gYWNjb3VudC5cbiAqXHRAcGFyYW0ge0NvbXBvbmVudH0gY29tcG9uZW50XG4gKlx0QHBhcmFtIHtPYmplY3R9IFtvcHRzXVxuICpcdEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuYnVpbGQ9ZmFsc2VdXHRcdElmIGB0cnVlYCwgY29tcG9uZW50IHdpbGwgYnVpbGQgYW5kIHN0b3JlIGEgRE9NIG5vZGUgaWYgbm90IGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIG9uZS5cbiAqXHRAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZW5kZXJDb21wb25lbnQoY29tcG9uZW50LCBvcHRzLCBtb3VudEFsbCwgaXNDaGlsZCkge1xuXHRpZiAoY29tcG9uZW50Ll9kaXNhYmxlKSByZXR1cm47XG5cblx0dmFyIHByb3BzID0gY29tcG9uZW50LnByb3BzLFxuXHQgICAgc3RhdGUgPSBjb21wb25lbnQuc3RhdGUsXG5cdCAgICBjb250ZXh0ID0gY29tcG9uZW50LmNvbnRleHQsXG5cdCAgICBwcmV2aW91c1Byb3BzID0gY29tcG9uZW50LnByZXZQcm9wcyB8fCBwcm9wcyxcblx0ICAgIHByZXZpb3VzU3RhdGUgPSBjb21wb25lbnQucHJldlN0YXRlIHx8IHN0YXRlLFxuXHQgICAgcHJldmlvdXNDb250ZXh0ID0gY29tcG9uZW50LnByZXZDb250ZXh0IHx8IGNvbnRleHQsXG5cdCAgICBpc1VwZGF0ZSA9IGNvbXBvbmVudC5iYXNlLFxuXHQgICAgbmV4dEJhc2UgPSBjb21wb25lbnQubmV4dEJhc2UsXG5cdCAgICBpbml0aWFsQmFzZSA9IGlzVXBkYXRlIHx8IG5leHRCYXNlLFxuXHQgICAgaW5pdGlhbENoaWxkQ29tcG9uZW50ID0gY29tcG9uZW50Ll9jb21wb25lbnQsXG5cdCAgICBza2lwID0gZmFsc2UsXG5cdCAgICByZW5kZXJlZCxcblx0ICAgIGluc3QsXG5cdCAgICBjYmFzZTtcblxuXHQvLyBpZiB1cGRhdGluZ1xuXHRpZiAoaXNVcGRhdGUpIHtcblx0XHRjb21wb25lbnQucHJvcHMgPSBwcmV2aW91c1Byb3BzO1xuXHRcdGNvbXBvbmVudC5zdGF0ZSA9IHByZXZpb3VzU3RhdGU7XG5cdFx0Y29tcG9uZW50LmNvbnRleHQgPSBwcmV2aW91c0NvbnRleHQ7XG5cdFx0aWYgKG9wdHMgIT09IDIgJiYgY29tcG9uZW50LnNob3VsZENvbXBvbmVudFVwZGF0ZSAmJiBjb21wb25lbnQuc2hvdWxkQ29tcG9uZW50VXBkYXRlKHByb3BzLCBzdGF0ZSwgY29udGV4dCkgPT09IGZhbHNlKSB7XG5cdFx0XHRza2lwID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGNvbXBvbmVudC5jb21wb25lbnRXaWxsVXBkYXRlKSB7XG5cdFx0XHRjb21wb25lbnQuY29tcG9uZW50V2lsbFVwZGF0ZShwcm9wcywgc3RhdGUsIGNvbnRleHQpO1xuXHRcdH1cblx0XHRjb21wb25lbnQucHJvcHMgPSBwcm9wcztcblx0XHRjb21wb25lbnQuc3RhdGUgPSBzdGF0ZTtcblx0XHRjb21wb25lbnQuY29udGV4dCA9IGNvbnRleHQ7XG5cdH1cblxuXHRjb21wb25lbnQucHJldlByb3BzID0gY29tcG9uZW50LnByZXZTdGF0ZSA9IGNvbXBvbmVudC5wcmV2Q29udGV4dCA9IGNvbXBvbmVudC5uZXh0QmFzZSA9IG51bGw7XG5cdGNvbXBvbmVudC5fZGlydHkgPSBmYWxzZTtcblxuXHRpZiAoIXNraXApIHtcblx0XHRyZW5kZXJlZCA9IGNvbXBvbmVudC5yZW5kZXIocHJvcHMsIHN0YXRlLCBjb250ZXh0KTtcblxuXHRcdC8vIGNvbnRleHQgdG8gcGFzcyB0byB0aGUgY2hpbGQsIGNhbiBiZSB1cGRhdGVkIHZpYSAoZ3JhbmQtKXBhcmVudCBjb21wb25lbnRcblx0XHRpZiAoY29tcG9uZW50LmdldENoaWxkQ29udGV4dCkge1xuXHRcdFx0Y29udGV4dCA9IGV4dGVuZChleHRlbmQoe30sIGNvbnRleHQpLCBjb21wb25lbnQuZ2V0Q2hpbGRDb250ZXh0KCkpO1xuXHRcdH1cblxuXHRcdHZhciBjaGlsZENvbXBvbmVudCA9IHJlbmRlcmVkICYmIHJlbmRlcmVkLm5vZGVOYW1lLFxuXHRcdCAgICB0b1VubW91bnQsXG5cdFx0ICAgIGJhc2U7XG5cblx0XHRpZiAodHlwZW9mIGNoaWxkQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvLyBzZXQgdXAgaGlnaCBvcmRlciBjb21wb25lbnQgbGlua1xuXG5cdFx0XHR2YXIgY2hpbGRQcm9wcyA9IGdldE5vZGVQcm9wcyhyZW5kZXJlZCk7XG5cdFx0XHRpbnN0ID0gaW5pdGlhbENoaWxkQ29tcG9uZW50O1xuXG5cdFx0XHRpZiAoaW5zdCAmJiBpbnN0LmNvbnN0cnVjdG9yID09PSBjaGlsZENvbXBvbmVudCAmJiBjaGlsZFByb3BzLmtleSA9PSBpbnN0Ll9fa2V5KSB7XG5cdFx0XHRcdHNldENvbXBvbmVudFByb3BzKGluc3QsIGNoaWxkUHJvcHMsIDEsIGNvbnRleHQsIGZhbHNlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRvVW5tb3VudCA9IGluc3Q7XG5cblx0XHRcdFx0Y29tcG9uZW50Ll9jb21wb25lbnQgPSBpbnN0ID0gY3JlYXRlQ29tcG9uZW50KGNoaWxkQ29tcG9uZW50LCBjaGlsZFByb3BzLCBjb250ZXh0KTtcblx0XHRcdFx0aW5zdC5uZXh0QmFzZSA9IGluc3QubmV4dEJhc2UgfHwgbmV4dEJhc2U7XG5cdFx0XHRcdGluc3QuX3BhcmVudENvbXBvbmVudCA9IGNvbXBvbmVudDtcblx0XHRcdFx0c2V0Q29tcG9uZW50UHJvcHMoaW5zdCwgY2hpbGRQcm9wcywgMCwgY29udGV4dCwgZmFsc2UpO1xuXHRcdFx0XHRyZW5kZXJDb21wb25lbnQoaW5zdCwgMSwgbW91bnRBbGwsIHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRiYXNlID0gaW5zdC5iYXNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjYmFzZSA9IGluaXRpYWxCYXNlO1xuXG5cdFx0XHQvLyBkZXN0cm95IGhpZ2ggb3JkZXIgY29tcG9uZW50IGxpbmtcblx0XHRcdHRvVW5tb3VudCA9IGluaXRpYWxDaGlsZENvbXBvbmVudDtcblx0XHRcdGlmICh0b1VubW91bnQpIHtcblx0XHRcdFx0Y2Jhc2UgPSBjb21wb25lbnQuX2NvbXBvbmVudCA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbml0aWFsQmFzZSB8fCBvcHRzID09PSAxKSB7XG5cdFx0XHRcdGlmIChjYmFzZSkgY2Jhc2UuX2NvbXBvbmVudCA9IG51bGw7XG5cdFx0XHRcdGJhc2UgPSBkaWZmKGNiYXNlLCByZW5kZXJlZCwgY29udGV4dCwgbW91bnRBbGwgfHwgIWlzVXBkYXRlLCBpbml0aWFsQmFzZSAmJiBpbml0aWFsQmFzZS5wYXJlbnROb2RlLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaW5pdGlhbEJhc2UgJiYgYmFzZSAhPT0gaW5pdGlhbEJhc2UgJiYgaW5zdCAhPT0gaW5pdGlhbENoaWxkQ29tcG9uZW50KSB7XG5cdFx0XHR2YXIgYmFzZVBhcmVudCA9IGluaXRpYWxCYXNlLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoYmFzZVBhcmVudCAmJiBiYXNlICE9PSBiYXNlUGFyZW50KSB7XG5cdFx0XHRcdGJhc2VQYXJlbnQucmVwbGFjZUNoaWxkKGJhc2UsIGluaXRpYWxCYXNlKTtcblxuXHRcdFx0XHRpZiAoIXRvVW5tb3VudCkge1xuXHRcdFx0XHRcdGluaXRpYWxCYXNlLl9jb21wb25lbnQgPSBudWxsO1xuXHRcdFx0XHRcdHJlY29sbGVjdE5vZGVUcmVlKGluaXRpYWxCYXNlLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodG9Vbm1vdW50KSB7XG5cdFx0XHR1bm1vdW50Q29tcG9uZW50KHRvVW5tb3VudCk7XG5cdFx0fVxuXG5cdFx0Y29tcG9uZW50LmJhc2UgPSBiYXNlO1xuXHRcdGlmIChiYXNlICYmICFpc0NoaWxkKSB7XG5cdFx0XHR2YXIgY29tcG9uZW50UmVmID0gY29tcG9uZW50LFxuXHRcdFx0ICAgIHQgPSBjb21wb25lbnQ7XG5cdFx0XHR3aGlsZSAodCA9IHQuX3BhcmVudENvbXBvbmVudCkge1xuXHRcdFx0XHQoY29tcG9uZW50UmVmID0gdCkuYmFzZSA9IGJhc2U7XG5cdFx0XHR9XG5cdFx0XHRiYXNlLl9jb21wb25lbnQgPSBjb21wb25lbnRSZWY7XG5cdFx0XHRiYXNlLl9jb21wb25lbnRDb25zdHJ1Y3RvciA9IGNvbXBvbmVudFJlZi5jb25zdHJ1Y3Rvcjtcblx0XHR9XG5cdH1cblxuXHRpZiAoIWlzVXBkYXRlIHx8IG1vdW50QWxsKSB7XG5cdFx0bW91bnRzLnVuc2hpZnQoY29tcG9uZW50KTtcblx0fSBlbHNlIGlmICghc2tpcCkge1xuXHRcdC8vIEVuc3VyZSB0aGF0IHBlbmRpbmcgY29tcG9uZW50RGlkTW91bnQoKSBob29rcyBvZiBjaGlsZCBjb21wb25lbnRzXG5cdFx0Ly8gYXJlIGNhbGxlZCBiZWZvcmUgdGhlIGNvbXBvbmVudERpZFVwZGF0ZSgpIGhvb2sgaW4gdGhlIHBhcmVudC5cblx0XHQvLyBOb3RlOiBkaXNhYmxlZCBhcyBpdCBjYXVzZXMgZHVwbGljYXRlIGhvb2tzLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QvaXNzdWVzLzc1MFxuXHRcdC8vIGZsdXNoTW91bnRzKCk7XG5cblx0XHRpZiAoY29tcG9uZW50LmNvbXBvbmVudERpZFVwZGF0ZSkge1xuXHRcdFx0Y29tcG9uZW50LmNvbXBvbmVudERpZFVwZGF0ZShwcmV2aW91c1Byb3BzLCBwcmV2aW91c1N0YXRlLCBwcmV2aW91c0NvbnRleHQpO1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5hZnRlclVwZGF0ZSkgb3B0aW9ucy5hZnRlclVwZGF0ZShjb21wb25lbnQpO1xuXHR9XG5cblx0aWYgKGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzICE9IG51bGwpIHtcblx0XHR3aGlsZSAoY29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG5cdFx0XHRjb21wb25lbnQuX3JlbmRlckNhbGxiYWNrcy5wb3AoKS5jYWxsKGNvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFkaWZmTGV2ZWwgJiYgIWlzQ2hpbGQpIGZsdXNoTW91bnRzKCk7XG59XG5cbi8qKiBBcHBseSB0aGUgQ29tcG9uZW50IHJlZmVyZW5jZWQgYnkgYSBWTm9kZSB0byB0aGUgRE9NLlxuICpcdEBwYXJhbSB7RWxlbWVudH0gZG9tXHRUaGUgRE9NIG5vZGUgdG8gbXV0YXRlXG4gKlx0QHBhcmFtIHtWTm9kZX0gdm5vZGVcdEEgQ29tcG9uZW50LXJlZmVyZW5jaW5nIFZOb2RlXG4gKlx0QHJldHVybnMge0VsZW1lbnR9IGRvbVx0VGhlIGNyZWF0ZWQvbXV0YXRlZCBlbGVtZW50XG4gKlx0QHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYnVpbGRDb21wb25lbnRGcm9tVk5vZGUoZG9tLCB2bm9kZSwgY29udGV4dCwgbW91bnRBbGwpIHtcblx0dmFyIGMgPSBkb20gJiYgZG9tLl9jb21wb25lbnQsXG5cdCAgICBvcmlnaW5hbENvbXBvbmVudCA9IGMsXG5cdCAgICBvbGREb20gPSBkb20sXG5cdCAgICBpc0RpcmVjdE93bmVyID0gYyAmJiBkb20uX2NvbXBvbmVudENvbnN0cnVjdG9yID09PSB2bm9kZS5ub2RlTmFtZSxcblx0ICAgIGlzT3duZXIgPSBpc0RpcmVjdE93bmVyLFxuXHQgICAgcHJvcHMgPSBnZXROb2RlUHJvcHModm5vZGUpO1xuXHR3aGlsZSAoYyAmJiAhaXNPd25lciAmJiAoYyA9IGMuX3BhcmVudENvbXBvbmVudCkpIHtcblx0XHRpc093bmVyID0gYy5jb25zdHJ1Y3RvciA9PT0gdm5vZGUubm9kZU5hbWU7XG5cdH1cblxuXHRpZiAoYyAmJiBpc093bmVyICYmICghbW91bnRBbGwgfHwgYy5fY29tcG9uZW50KSkge1xuXHRcdHNldENvbXBvbmVudFByb3BzKGMsIHByb3BzLCAzLCBjb250ZXh0LCBtb3VudEFsbCk7XG5cdFx0ZG9tID0gYy5iYXNlO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChvcmlnaW5hbENvbXBvbmVudCAmJiAhaXNEaXJlY3RPd25lcikge1xuXHRcdFx0dW5tb3VudENvbXBvbmVudChvcmlnaW5hbENvbXBvbmVudCk7XG5cdFx0XHRkb20gPSBvbGREb20gPSBudWxsO1xuXHRcdH1cblxuXHRcdGMgPSBjcmVhdGVDb21wb25lbnQodm5vZGUubm9kZU5hbWUsIHByb3BzLCBjb250ZXh0KTtcblx0XHRpZiAoZG9tICYmICFjLm5leHRCYXNlKSB7XG5cdFx0XHRjLm5leHRCYXNlID0gZG9tO1xuXHRcdFx0Ly8gcGFzc2luZyBkb20vb2xkRG9tIGFzIG5leHRCYXNlIHdpbGwgcmVjeWNsZSBpdCBpZiB1bnVzZWQsIHNvIGJ5cGFzcyByZWN5Y2xpbmcgb24gTDIyOTpcblx0XHRcdG9sZERvbSA9IG51bGw7XG5cdFx0fVxuXHRcdHNldENvbXBvbmVudFByb3BzKGMsIHByb3BzLCAxLCBjb250ZXh0LCBtb3VudEFsbCk7XG5cdFx0ZG9tID0gYy5iYXNlO1xuXG5cdFx0aWYgKG9sZERvbSAmJiBkb20gIT09IG9sZERvbSkge1xuXHRcdFx0b2xkRG9tLl9jb21wb25lbnQgPSBudWxsO1xuXHRcdFx0cmVjb2xsZWN0Tm9kZVRyZWUob2xkRG9tLCBmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGRvbTtcbn1cblxuLyoqIFJlbW92ZSBhIGNvbXBvbmVudCBmcm9tIHRoZSBET00gYW5kIHJlY3ljbGUgaXQuXG4gKlx0QHBhcmFtIHtDb21wb25lbnR9IGNvbXBvbmVudFx0VGhlIENvbXBvbmVudCBpbnN0YW5jZSB0byB1bm1vdW50XG4gKlx0QHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudChjb21wb25lbnQpIHtcblx0aWYgKG9wdGlvbnMuYmVmb3JlVW5tb3VudCkgb3B0aW9ucy5iZWZvcmVVbm1vdW50KGNvbXBvbmVudCk7XG5cblx0dmFyIGJhc2UgPSBjb21wb25lbnQuYmFzZTtcblxuXHRjb21wb25lbnQuX2Rpc2FibGUgPSB0cnVlO1xuXG5cdGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbFVubW91bnQpIGNvbXBvbmVudC5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuXG5cdGNvbXBvbmVudC5iYXNlID0gbnVsbDtcblxuXHQvLyByZWN1cnNpdmVseSB0ZWFyIGRvd24gJiByZWNvbGxlY3QgaGlnaC1vcmRlciBjb21wb25lbnQgY2hpbGRyZW46XG5cdHZhciBpbm5lciA9IGNvbXBvbmVudC5fY29tcG9uZW50O1xuXHRpZiAoaW5uZXIpIHtcblx0XHR1bm1vdW50Q29tcG9uZW50KGlubmVyKTtcblx0fSBlbHNlIGlmIChiYXNlKSB7XG5cdFx0aWYgKGJhc2VbJ19fcHJlYWN0YXR0cl8nXSAmJiBiYXNlWydfX3ByZWFjdGF0dHJfJ10ucmVmKSBiYXNlWydfX3ByZWFjdGF0dHJfJ10ucmVmKG51bGwpO1xuXG5cdFx0Y29tcG9uZW50Lm5leHRCYXNlID0gYmFzZTtcblxuXHRcdHJlbW92ZU5vZGUoYmFzZSk7XG5cdFx0Y29sbGVjdENvbXBvbmVudChjb21wb25lbnQpO1xuXG5cdFx0cmVtb3ZlQ2hpbGRyZW4oYmFzZSk7XG5cdH1cblxuXHRpZiAoY29tcG9uZW50Ll9fcmVmKSBjb21wb25lbnQuX19yZWYobnVsbCk7XG59XG5cbi8qKiBCYXNlIENvbXBvbmVudCBjbGFzcy5cbiAqXHRQcm92aWRlcyBgc2V0U3RhdGUoKWAgYW5kIGBmb3JjZVVwZGF0ZSgpYCwgd2hpY2ggdHJpZ2dlciByZW5kZXJpbmcuXG4gKlx0QHB1YmxpY1xuICpcbiAqXHRAZXhhbXBsZVxuICpcdGNsYXNzIE15Rm9vIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAqXHRcdHJlbmRlcihwcm9wcywgc3RhdGUpIHtcbiAqXHRcdFx0cmV0dXJuIDxkaXYgLz47XG4gKlx0XHR9XG4gKlx0fVxuICovXG5mdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIGNvbnRleHQpIHtcblx0dGhpcy5fZGlydHkgPSB0cnVlO1xuXG5cdC8qKiBAcHVibGljXG4gICpcdEB0eXBlIHtvYmplY3R9XG4gICovXG5cdHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cblx0LyoqIEBwdWJsaWNcbiAgKlx0QHR5cGUge29iamVjdH1cbiAgKi9cblx0dGhpcy5wcm9wcyA9IHByb3BzO1xuXG5cdC8qKiBAcHVibGljXG4gICpcdEB0eXBlIHtvYmplY3R9XG4gICovXG5cdHRoaXMuc3RhdGUgPSB0aGlzLnN0YXRlIHx8IHt9O1xufVxuXG5leHRlbmQoQ29tcG9uZW50LnByb3RvdHlwZSwge1xuXG5cdC8qKiBSZXR1cm5zIGEgYGJvb2xlYW5gIGluZGljYXRpbmcgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgcmUtcmVuZGVyIHdoZW4gcmVjZWl2aW5nIHRoZSBnaXZlbiBgcHJvcHNgIGFuZCBgc3RhdGVgLlxuICAqXHRAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzXG4gICpcdEBwYXJhbSB7b2JqZWN0fSBuZXh0U3RhdGVcbiAgKlx0QHBhcmFtIHtvYmplY3R9IG5leHRDb250ZXh0XG4gICpcdEByZXR1cm5zIHtCb29sZWFufSBzaG91bGQgdGhlIGNvbXBvbmVudCByZS1yZW5kZXJcbiAgKlx0QG5hbWUgc2hvdWxkQ29tcG9uZW50VXBkYXRlXG4gICpcdEBmdW5jdGlvblxuICAqL1xuXG5cdC8qKiBVcGRhdGUgY29tcG9uZW50IHN0YXRlIGJ5IGNvcHlpbmcgcHJvcGVydGllcyBmcm9tIGBzdGF0ZWAgdG8gYHRoaXMuc3RhdGVgLlxuICAqXHRAcGFyYW0ge29iamVjdH0gc3RhdGVcdFx0QSBoYXNoIG9mIHN0YXRlIHByb3BlcnRpZXMgdG8gdXBkYXRlIHdpdGggbmV3IHZhbHVlc1xuICAqXHRAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1x0QSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb25jZSBjb21wb25lbnQgc3RhdGUgaXMgdXBkYXRlZFxuICAqL1xuXHRzZXRTdGF0ZTogZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUsIGNhbGxiYWNrKSB7XG5cdFx0dmFyIHMgPSB0aGlzLnN0YXRlO1xuXHRcdGlmICghdGhpcy5wcmV2U3RhdGUpIHRoaXMucHJldlN0YXRlID0gZXh0ZW5kKHt9LCBzKTtcblx0XHRleHRlbmQocywgdHlwZW9mIHN0YXRlID09PSAnZnVuY3Rpb24nID8gc3RhdGUocywgdGhpcy5wcm9wcykgOiBzdGF0ZSk7XG5cdFx0aWYgKGNhbGxiYWNrKSAodGhpcy5fcmVuZGVyQ2FsbGJhY2tzID0gdGhpcy5fcmVuZGVyQ2FsbGJhY2tzIHx8IFtdKS5wdXNoKGNhbGxiYWNrKTtcblx0XHRlbnF1ZXVlUmVuZGVyKHRoaXMpO1xuXHR9LFxuXG5cblx0LyoqIEltbWVkaWF0ZWx5IHBlcmZvcm0gYSBzeW5jaHJvbm91cyByZS1yZW5kZXIgb2YgdGhlIGNvbXBvbmVudC5cbiAgKlx0QHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcdFx0QSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHJlLXJlbmRlcmVkLlxuICAqXHRAcHJpdmF0ZVxuICAqL1xuXHRmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoY2FsbGJhY2spIHtcblx0XHRpZiAoY2FsbGJhY2spICh0aGlzLl9yZW5kZXJDYWxsYmFja3MgPSB0aGlzLl9yZW5kZXJDYWxsYmFja3MgfHwgW10pLnB1c2goY2FsbGJhY2spO1xuXHRcdHJlbmRlckNvbXBvbmVudCh0aGlzLCAyKTtcblx0fSxcblxuXG5cdC8qKiBBY2NlcHRzIGBwcm9wc2AgYW5kIGBzdGF0ZWAsIGFuZCByZXR1cm5zIGEgbmV3IFZpcnR1YWwgRE9NIHRyZWUgdG8gYnVpbGQuXG4gICpcdFZpcnR1YWwgRE9NIGlzIGdlbmVyYWxseSBjb25zdHJ1Y3RlZCB2aWEgW0pTWF0oaHR0cDovL2phc29uZm9ybWF0LmNvbS93dGYtaXMtanN4KS5cbiAgKlx0QHBhcmFtIHtvYmplY3R9IHByb3BzXHRcdFByb3BzIChlZzogSlNYIGF0dHJpYnV0ZXMpIHJlY2VpdmVkIGZyb20gcGFyZW50IGVsZW1lbnQvY29tcG9uZW50XG4gICpcdEBwYXJhbSB7b2JqZWN0fSBzdGF0ZVx0XHRUaGUgY29tcG9uZW50J3MgY3VycmVudCBzdGF0ZVxuICAqXHRAcGFyYW0ge29iamVjdH0gY29udGV4dFx0XHRDb250ZXh0IG9iamVjdCAoaWYgYSBwYXJlbnQgY29tcG9uZW50IGhhcyBwcm92aWRlZCBjb250ZXh0KVxuICAqXHRAcmV0dXJucyBWTm9kZVxuICAqL1xuXHRyZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHt9XG59KTtcblxuLyoqIFJlbmRlciBKU1ggaW50byBhIGBwYXJlbnRgIEVsZW1lbnQuXG4gKlx0QHBhcmFtIHtWTm9kZX0gdm5vZGVcdFx0QSAoSlNYKSBWTm9kZSB0byByZW5kZXJcbiAqXHRAcGFyYW0ge0VsZW1lbnR9IHBhcmVudFx0XHRET00gZWxlbWVudCB0byByZW5kZXIgaW50b1xuICpcdEBwYXJhbSB7RWxlbWVudH0gW21lcmdlXVx0QXR0ZW1wdCB0byByZS11c2UgYW4gZXhpc3RpbmcgRE9NIHRyZWUgcm9vdGVkIGF0IGBtZXJnZWBcbiAqXHRAcHVibGljXG4gKlxuICpcdEBleGFtcGxlXG4gKlx0Ly8gcmVuZGVyIGEgZGl2IGludG8gPGJvZHk+OlxuICpcdHJlbmRlcig8ZGl2IGlkPVwiaGVsbG9cIj5oZWxsbyE8L2Rpdj4sIGRvY3VtZW50LmJvZHkpO1xuICpcbiAqXHRAZXhhbXBsZVxuICpcdC8vIHJlbmRlciBhIFwiVGhpbmdcIiBjb21wb25lbnQgaW50byAjZm9vOlxuICpcdGNvbnN0IFRoaW5nID0gKHsgbmFtZSB9KSA9PiA8c3Bhbj57IG5hbWUgfTwvc3Bhbj47XG4gKlx0cmVuZGVyKDxUaGluZyBuYW1lPVwib25lXCIgLz4sIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNmb28nKSk7XG4gKi9cbmZ1bmN0aW9uIHJlbmRlcih2bm9kZSwgcGFyZW50LCBtZXJnZSkge1xuICByZXR1cm4gZGlmZihtZXJnZSwgdm5vZGUsIHt9LCBmYWxzZSwgcGFyZW50LCBmYWxzZSk7XG59XG5cbnZhciBwcmVhY3QgPSB7XG5cdGg6IGgsXG5cdGNyZWF0ZUVsZW1lbnQ6IGgsXG5cdGNsb25lRWxlbWVudDogY2xvbmVFbGVtZW50LFxuXHRDb21wb25lbnQ6IENvbXBvbmVudCxcblx0cmVuZGVyOiByZW5kZXIsXG5cdHJlcmVuZGVyOiByZXJlbmRlcixcblx0b3B0aW9uczogb3B0aW9uc1xufTtcblxuXG4vKiB1bnVzZWQgaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgX3VudXNlZF93ZWJwYWNrX2RlZmF1bHRfZXhwb3J0ID0gKHByZWFjdCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVhY3QuZXNtLmpzLm1hcFxuXG5cbi8qKiovIH0pLFxuLyogMTQ5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwpIHtcbnZhciBOYXRpdmVDdXN0b21FdmVudCA9IGdsb2JhbC5DdXN0b21FdmVudDtcblxuZnVuY3Rpb24gdXNlTmF0aXZlICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgcCA9IG5ldyBOYXRpdmVDdXN0b21FdmVudCgnY2F0JywgeyBkZXRhaWw6IHsgZm9vOiAnYmFyJyB9IH0pO1xuICAgIHJldHVybiAgJ2NhdCcgPT09IHAudHlwZSAmJiAnYmFyJyA9PT0gcC5kZXRhaWwuZm9vO1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENyb3NzLWJyb3dzZXIgYEN1c3RvbUV2ZW50YCBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3VzdG9tRXZlbnQuQ3VzdG9tRXZlbnRcbiAqXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSB1c2VOYXRpdmUoKSA/IE5hdGl2ZUN1c3RvbUV2ZW50IDpcblxuLy8gSUUgPj0gOVxuJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBkb2N1bWVudCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPyBmdW5jdGlvbiBDdXN0b21FdmVudCAodHlwZSwgcGFyYW1zKSB7XG4gIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBlLmluaXRDdXN0b21FdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUsIHBhcmFtcy5kZXRhaWwpO1xuICB9IGVsc2Uge1xuICAgIGUuaW5pdEN1c3RvbUV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSwgdm9pZCAwKTtcbiAgfVxuICByZXR1cm4gZTtcbn0gOlxuXG4vLyBJRSA8PSA4XG5mdW5jdGlvbiBDdXN0b21FdmVudCAodHlwZSwgcGFyYW1zKSB7XG4gIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTtcbiAgZS50eXBlID0gdHlwZTtcbiAgaWYgKHBhcmFtcykge1xuICAgIGUuYnViYmxlcyA9IEJvb2xlYW4ocGFyYW1zLmJ1YmJsZXMpO1xuICAgIGUuY2FuY2VsYWJsZSA9IEJvb2xlYW4ocGFyYW1zLmNhbmNlbGFibGUpO1xuICAgIGUuZGV0YWlsID0gcGFyYW1zLmRldGFpbDtcbiAgfSBlbHNlIHtcbiAgICBlLmJ1YmJsZXMgPSBmYWxzZTtcbiAgICBlLmNhbmNlbGFibGUgPSBmYWxzZTtcbiAgICBlLmRldGFpbCA9IHZvaWQgMDtcbiAgfVxuICByZXR1cm4gZTtcbn1cblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oNTApKSlcblxuLyoqKi8gfSksXG4vKiAxNTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXG4vKipcbiAqIEV4cG9zZSBgaXNVcmxgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gaXNVcmw7XG5cbi8qKlxuICogTWF0Y2hlci5cbiAqL1xuXG52YXIgbWF0Y2hlciA9IC9eKD86XFx3KzopP1xcL1xcLyhbXlxcc1xcLl0rXFwuXFxTezJ9fGxvY2FsaG9zdFtcXDo/XFxkXSopXFxTKiQvO1xuXG4vKipcbiAqIExvb3NlbHkgdmFsaWRhdGUgYSBVUkwgYHN0cmluZ2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBpc1VybChzdHJpbmcpe1xuICByZXR1cm4gbWF0Y2hlci50ZXN0KHN0cmluZyk7XG59XG5cblxuLyoqKi8gfSksXG4vKiAxNTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLyoqXG4gKiBDaGVjayBpZiB3ZSdyZSByZXF1aXJlZCB0byBhZGQgYSBwb3J0IG51bWJlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZGVmYXVsdC1wb3J0XG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IHBvcnQgUG9ydCBudW1iZXIgd2UgbmVlZCB0byBjaGVja1xuICogQHBhcmFtIHtTdHJpbmd9IHByb3RvY29sIFByb3RvY29sIHdlIG5lZWQgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJcyBpdCBhIGRlZmF1bHQgcG9ydCBmb3IgdGhlIGdpdmVuIHByb3RvY29sXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXF1aXJlZChwb3J0LCBwcm90b2NvbCkge1xuICBwcm90b2NvbCA9IHByb3RvY29sLnNwbGl0KCc6JylbMF07XG4gIHBvcnQgPSArcG9ydDtcblxuICBpZiAoIXBvcnQpIHJldHVybiBmYWxzZTtcblxuICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgY2FzZSAnaHR0cCc6XG4gICAgY2FzZSAnd3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA4MDtcblxuICAgIGNhc2UgJ2h0dHBzJzpcbiAgICBjYXNlICd3c3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA0NDM7XG5cbiAgICBjYXNlICdmdHAnOlxuICAgIHJldHVybiBwb3J0ICE9PSAyMTtcblxuICAgIGNhc2UgJ2dvcGhlcic6XG4gICAgcmV0dXJuIHBvcnQgIT09IDcwO1xuXG4gICAgY2FzZSAnZmlsZSc6XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQgIT09IDA7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTUyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIERlY29kZSBhIFVSSSBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFVSSSBlbmNvZGVkIHN0cmluZy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBkZWNvZGVkIHN0cmluZy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChpbnB1dC5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XG59XG5cbi8qKlxuICogU2ltcGxlIHF1ZXJ5IHN0cmluZyBwYXJzZXIuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBxdWVyeSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBwYXJzZWQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gcXVlcnlzdHJpbmcocXVlcnkpIHtcbiAgdmFyIHBhcnNlciA9IC8oW149PyZdKyk9PyhbXiZdKikvZ1xuICAgICwgcmVzdWx0ID0ge31cbiAgICAsIHBhcnQ7XG5cbiAgLy9cbiAgLy8gTGl0dGxlIG5pZnR5IHBhcnNpbmcgaGFjaywgbGV2ZXJhZ2UgdGhlIGZhY3QgdGhhdCBSZWdFeHAuZXhlYyBpbmNyZW1lbnRzXG4gIC8vIHRoZSBsYXN0SW5kZXggcHJvcGVydHkgc28gd2UgY2FuIGNvbnRpbnVlIGV4ZWN1dGluZyB0aGlzIGxvb3AgdW50aWwgd2UndmVcbiAgLy8gcGFyc2VkIGFsbCByZXN1bHRzLlxuICAvL1xuICBmb3IgKDtcbiAgICBwYXJ0ID0gcGFyc2VyLmV4ZWMocXVlcnkpO1xuICAgIHJlc3VsdFtkZWNvZGUocGFydFsxXSldID0gZGVjb2RlKHBhcnRbMl0pXG4gICk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBxdWVyeSBzdHJpbmcgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRoYXQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkLlxuICogQHBhcmFtIHtTdHJpbmd9IHByZWZpeCBPcHRpb25hbCBwcmVmaXguXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gcXVlcnlzdHJpbmdpZnkob2JqLCBwcmVmaXgpIHtcbiAgcHJlZml4ID0gcHJlZml4IHx8ICcnO1xuXG4gIHZhciBwYWlycyA9IFtdO1xuXG4gIC8vXG4gIC8vIE9wdGlvbmFsbHkgcHJlZml4IHdpdGggYSAnPycgaWYgbmVlZGVkXG4gIC8vXG4gIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIHByZWZpeCkgcHJlZml4ID0gJz8nO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICBwYWlycy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsnPScrIGVuY29kZVVSSUNvbXBvbmVudChvYmpba2V5XSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYWlycy5sZW5ndGggPyBwcmVmaXggKyBwYWlycy5qb2luKCcmJykgOiAnJztcbn1cblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmV4cG9ydHMuc3RyaW5naWZ5ID0gcXVlcnlzdHJpbmdpZnk7XG5leHBvcnRzLnBhcnNlID0gcXVlcnlzdHJpbmc7XG5cblxuLyoqKi8gfSksXG4vKiAxNTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiFcbiAqIGlzb2JqZWN0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pc29iamVjdD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHZhbCkgPT09IGZhbHNlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDE1NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QT1BVUF9NT0RFUyA9IGV4cG9ydHMuRFJBV0VSX1JJR0hUID0gZXhwb3J0cy5EUkFXRVIgPSBleHBvcnRzLlBPUFVQID0gdW5kZWZpbmVkO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX1BPUFVQX01PREVTO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX3N0eWxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xuXG52YXIgX3N0eWxlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHlsZXMpO1xuXG52YXIgX3Njcm9sbGJhcldpZHRoID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTgpO1xuXG52YXIgX3Njcm9sbGJhcldpZHRoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Njcm9sbGJhcldpZHRoKTtcblxudmFyIF9zcGlubmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7XG5cbnZhciBfc3Bpbm5lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zcGlubmVyKTtcblxudmFyIF91dGlsaXRpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9pZnJhbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcblxudmFyIF9pZnJhbWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWZyYW1lKTtcblxudmFyIF9jbG9zZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTYwKTtcblxudmFyIF9jbG9zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbG9zZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIEVTQ19LRVlfQ09ERSA9IDI3O1xudmFyIENMT1NFX0JVVFRPTl9XSURUSCA9IDMwO1xudmFyIERFRkFVTFRfQVVUT0NMT1NFX1RJTUVPVVQgPSA1O1xuXG52YXIgUE9QVVAgPSBleHBvcnRzLlBPUFVQID0gJ3BvcHVwJztcbnZhciBEUkFXRVIgPSBleHBvcnRzLkRSQVdFUiA9ICdkcmF3ZXJfbGVmdCc7XG52YXIgRFJBV0VSX1JJR0hUID0gZXhwb3J0cy5EUkFXRVJfUklHSFQgPSAnZHJhd2VyX3JpZ2h0JztcbnZhciBQT1BVUF9NT0RFUyA9IGV4cG9ydHMuUE9QVVBfTU9ERVMgPSAoX1BPUFVQX01PREVTID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfUE9QVVBfTU9ERVMsIFBPUFVQLCAncG9wdXAtYmxhbmsnKSwgX2RlZmluZVByb3BlcnR5KF9QT1BVUF9NT0RFUywgRFJBV0VSLCAncG9wdXAtY2xhc3NpYycpLCBfZGVmaW5lUHJvcGVydHkoX1BPUFVQX01PREVTLCBEUkFXRVJfUklHSFQsICdwb3B1cC1kcmF3ZXInKSwgX1BPUFVQX01PREVTKTtcblxudmFyIEJhc2VXcmFwcGVyID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KSgnZGl2Jywge1xuICB0YXJnZXQ6ICdlMW8zeXNmaTAnXG59KSgndmlzaWJpbGl0eTonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5vcGVuID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG59LCAnO29wYWNpdHk6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAub3BlbiA/IDEgOiAwO1xufSwgJztwb3NpdGlvbjonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5pc0NvbnRhaW5lZCA/ICdhYnNvbHV0ZScgOiAnZml4ZWQnO1xufSwgJzttYXgtd2lkdGg6MTAwJTt6LWluZGV4OjEwMDAxOycpO1xuXG52YXIgT3ZlcmxheSA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlczIuZGVmYXVsdCkoJ2RpdicsIHtcbiAgdGFyZ2V0OiAnZTFvM3lzZmkxJ1xufSkoJ3Zpc2liaWxpdHk6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYXBwZWFyaW5nID8gJ2hpZGRlbicgOiAndmlzaWJsZSc7XG59LCAnO29wYWNpdHk6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYXBwZWFyaW5nID8gMCA6IDE7XG59LCAnO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBlYXNlLHZpc2liaWxpdHkgMHMgbGluZWFyICcsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLmFwcGVhcmluZyA/ICcyMDBtcycgOiAnMHMnO1xufSwgJztiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC44NSk7cG9zaXRpb246JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuaXNDb250YWluZWQgPyAnYWJzb2x1dGUnIDogJ2ZpeGVkJztcbn0sICc7b3ZlcmZsb3c6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuaXNDb250YWluZWQgPyAnaGlkZGVuJyA6ICdhdXRvJztcbn0sICc7bGVmdDowO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7ei1pbmRleDoxMDAwMDttaW4taGVpZ2h0OjEwMCU7Jyk7XG5cbnZhciBwb3B1cFdyYXBwZXIgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKEJhc2VXcmFwcGVyLCB7XG4gIHRhcmdldDogJ2UxbzN5c2ZpMidcbn0pKCd3aWR0aDonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5pc0NvbnRhaW5lZCA/ICdjYWxjKDEwMCUgLSA4MHB4KScgOiAnY2FsYygxMDB2dyAtIDgwcHgpJztcbn0sICc7aGVpZ2h0OicsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLmlzQ29udGFpbmVkID8gJ2NhbGMoMTAwJSAtIDgwcHgpJyA6ICdjYWxjKDEwMHZoIC0gODBweCknO1xufSwgJzt0b3A6NDBweDtsZWZ0OjQwcHg7dHJhbnNpdGlvbjphbGwgMzAwbXMgZWFzZS1vdXQ7Jyk7XG5cbnZhciBkcmF3ZXJXcmFwcGVyID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KShCYXNlV3JhcHBlciwge1xuICB0YXJnZXQ6ICdlMW8zeXNmaTMnXG59KSgndHJhbnNpdGlvbjphbGwgNDAwbXMgZWFzZS1vdXQ7d2lkdGg6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAud2lkdGg7XG59LCAncHg7aGVpZ2h0OjEwMCU7dG9wOjA7Jyk7XG5cbnZhciBkcmF3ZXJMZWZ0V3JhcHBlciA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlczIuZGVmYXVsdCkoZHJhd2VyV3JhcHBlciwge1xuICB0YXJnZXQ6ICdlMW8zeXNmaTQnXG59KSgnbGVmdDonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gIXAub3BlbiA/IC0ocC53aWR0aCAtIENMT1NFX0JVVFRPTl9XSURUSCkgOiAwO1xufSwgJ3B4OycpO1xuXG52YXIgZHJhd2VyUmlnaHRXcmFwcGVyID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KShkcmF3ZXJXcmFwcGVyLCB7XG4gIHRhcmdldDogJ2UxbzN5c2ZpNSdcbn0pKCdyaWdodDonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gIXAub3BlbiA/IC0ocC53aWR0aCAtIENMT1NFX0JVVFRPTl9XSURUSCkgOiAwO1xufSwgJ3B4OycpO1xuXG52YXIgQmFzZUNsb3NlSW1hZ2UgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdpbWcnLCB7XG4gIHRhcmdldDogJ2UxbzN5c2ZpNidcbn0pKCdwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOjhweDtjdXJzb3I6cG9pbnRlcjt3aWR0aDppbml0aWFsO21heC13aWR0aDppbml0aWFsOycpO1xuXG52YXIgY2xvc2VJbWFnZVBvcHVwID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KShCYXNlQ2xvc2VJbWFnZSwge1xuICB0YXJnZXQ6ICdlMW8zeXNmaTcnXG59KSgndG9wOi0zNHB4O3JpZ2h0Oi0zNHB4OycpO1xuXG52YXIgY2xvc2VJbWFnZUxlZnQgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKEJhc2VDbG9zZUltYWdlLCB7XG4gIHRhcmdldDogJ2UxbzN5c2ZpOCdcbn0pKCd0b3A6MTJweDtyaWdodDotMzhweDsnKTtcblxudmFyIGNsb3NlSW1hZ2VSaWdodCA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlczIuZGVmYXVsdCkoQmFzZUNsb3NlSW1hZ2UsIHtcbiAgdGFyZ2V0OiAnZTFvM3lzZmk5J1xufSkoJ3RvcDoxMnB4O2xlZnQ6LTM4cHg7cmlnaHQ6YXV0bzsnKTtcblxudmFyIFBvcHVwID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFBvcHVwLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBQb3B1cChwcm9wcykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQb3B1cCk7XG5cbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUG9wdXAuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihQb3B1cCkpLmNhbGwodGhpcywgcHJvcHMpKTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgZnJhbWVBbmltYXRlOiBmYWxzZSxcbiAgICAgIGlmcmFtZUxvYWRlZDogZmFsc2UsXG4gICAgICBwb3B1cEFuaW1hdGU6IHRydWUsXG4gICAgICB0cmFuc2l0aW9uRW5kZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIF90aGlzLm9uSWZyYW1lTG9hZCA9IF90aGlzLm9uSWZyYW1lTG9hZC5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbktleURvd24gPSBfdGhpcy5vbktleURvd24uYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25BdXRvQ2xvc2UgPSBfdGhpcy5vbkF1dG9DbG9zZS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5hbmltYXRlQmVmb3JlQ2xvc2UgPSBfdGhpcy5hbmltYXRlQmVmb3JlQ2xvc2UuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25UcmFuc2l0aW9uRW5kID0gX3RoaXMub25UcmFuc2l0aW9uRW5kLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uRm9ybVN1Ym1pdCA9IF90aGlzLm9uRm9ybVN1Ym1pdC5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUG9wdXAsIFt7XG4gICAga2V5OiAnb25JZnJhbWVMb2FkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25JZnJhbWVMb2FkKGlmcmFtZVJlZikge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpZnJhbWVMb2FkZWQ6IHRydWUgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoeyBmcmFtZUFuaW1hdGU6IHRydWUgfSk7XG4gICAgICAgICAgaWYgKGlmcmFtZVJlZiAmJiBpZnJhbWVSZWYuY29udGVudFdpbmRvdykge1xuICAgICAgICAgICAgaWZyYW1lUmVmLmNvbnRlbnRXaW5kb3cuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdhbmltYXRlQmVmb3JlQ2xvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhbmltYXRlQmVmb3JlQ2xvc2UoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZyYW1lQW5pbWF0ZTogZmFsc2UsIHBvcHVwQW5pbWF0ZTogZmFsc2UgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMuc2V0U3RhdGUoeyBwb3B1cEFuaW1hdGU6IHRydWUgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChfdGhpczMucHJvcHMub25DbG9zZSwgNDAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgNDAwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uS2V5RG93bicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7XG4gICAgICB2YXIga2V5ID0gZG9jdW1lbnQuYWxsID8gZS5rZXlDb2RlIDogZS53aGljaDtcbiAgICAgIGlmIChrZXkgPT09IEVTQ19LRVlfQ09ERSkge1xuICAgICAgICB0aGlzLmFuaW1hdGVCZWZvcmVDbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uQXV0b0Nsb3NlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25BdXRvQ2xvc2UoZSkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBjYW5TZXRBdXRvY2xvc2VEZWxheSA9IGUuZGV0YWlsLmlzUHJvUGx1cyB8fCBlLmRldGFpbC5jYW5TZXRBdXRvY2xvc2VEZWxheTtcbiAgICAgIHZhciBfcHJvcHMkb3B0aW9ucyA9IHRoaXMucHJvcHMub3B0aW9ucyxcbiAgICAgICAgICBpc0F1dG9DbG9zZUVuYWJsZWQgPSBfcHJvcHMkb3B0aW9ucy5pc0F1dG9DbG9zZUVuYWJsZWQsXG4gICAgICAgICAgYXV0b0Nsb3NlID0gX3Byb3BzJG9wdGlvbnMuYXV0b0Nsb3NlO1xuXG4gICAgICB2YXIgdGltZW91dCA9IChjYW5TZXRBdXRvY2xvc2VEZWxheSA/IGF1dG9DbG9zZSA6IERFRkFVTFRfQVVUT0NMT1NFX1RJTUVPVVQpICogMTAwMDtcblxuICAgICAgaWYgKGlzQXV0b0Nsb3NlRW5hYmxlZCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczQuYW5pbWF0ZUJlZm9yZUNsb3NlKCk7XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uVHJhbnNpdGlvbkVuZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uVHJhbnNpdGlvbkVuZChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy53cmFwcGVyKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHRyYW5zaXRpb25FbmRlZDogdGhpcy5zdGF0ZS5mcmFtZUFuaW1hdGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25Gb3JtU3VibWl0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Gb3JtU3VibWl0KCkge1xuICAgICAgdmFyIG9uU3VibWl0ID0gdGhpcy5wcm9wcy5vcHRpb25zLm9uU3VibWl0O1xuXG4gICAgICBvblN1Ym1pdCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBfdXRpbGl0aWVzLm9uTWVzc2FnZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb3JtLWNsb3NlJywgdGhpcy5hbmltYXRlQmVmb3JlQ2xvc2UpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0VTQycsIHRoaXMuYW5pbWF0ZUJlZm9yZUNsb3NlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdlbWJlZC1hdXRvLWNsb3NlLXBvcHVwJywgdGhpcy5vbkF1dG9DbG9zZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9ybS1zdWJtaXQnLCB0aGlzLm9uRm9ybVN1Ym1pdCk7XG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczUuc2V0U3RhdGUoe1xuICAgICAgICAgIHBvcHVwQW5pbWF0ZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIF91dGlsaXRpZXMub25NZXNzYWdlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd24pO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Zvcm0tY2xvc2UnLCB0aGlzLmFuaW1hdGVCZWZvcmVDbG9zZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignRVNDJywgdGhpcy5hbmltYXRlQmVmb3JlQ2xvc2UpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2VtYmVkLWF1dG8tY2xvc2UtcG9wdXAnLCB0aGlzLm9uQXV0b0Nsb3NlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb3JtLXN1Ym1pdCcsIHRoaXMub25Gb3JtU3VibWl0KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRXcmFwcGVyQ29tcG9uZW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0V3JhcHBlckNvbXBvbmVudChtb2RlKSB7XG4gICAgICBpZiAobW9kZSA9PT0gRFJBV0VSX1JJR0hUKSByZXR1cm4gZHJhd2VyUmlnaHRXcmFwcGVyO1xuICAgICAgaWYgKG1vZGUgPT09IERSQVdFUikgcmV0dXJuIGRyYXdlckxlZnRXcmFwcGVyO1xuICAgICAgcmV0dXJuIHBvcHVwV3JhcHBlcjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRDbG9zZUltYWdlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2xvc2VJbWFnZShtb2RlKSB7XG4gICAgICBpZiAobW9kZSA9PT0gRFJBV0VSX1JJR0hUKSByZXR1cm4gY2xvc2VJbWFnZVJpZ2h0O1xuICAgICAgaWYgKG1vZGUgPT09IERSQVdFUikgcmV0dXJuIGNsb3NlSW1hZ2VMZWZ0O1xuICAgICAgcmV0dXJuIGNsb3NlSW1hZ2VQb3B1cDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgdmFyIGlmcmFtZVN0eWxlcyA9IG51bGw7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMucHJvcHMub3B0aW9ucztcbiAgICAgIHZhciBkcmF3ZXJXaWR0aCA9IG9wdGlvbnMuZHJhd2VyV2lkdGgsXG4gICAgICAgICAgaGlkZVNjcm9sbGJhcnMgPSBvcHRpb25zLmhpZGVTY3JvbGxiYXJzLFxuICAgICAgICAgIGlzQ29udGFpbmVkID0gb3B0aW9ucy5pc0NvbnRhaW5lZCxcbiAgICAgICAgICBtb2RlID0gb3B0aW9ucy5tb2RlO1xuXG5cbiAgICAgIGlmIChoaWRlU2Nyb2xsYmFycykge1xuICAgICAgICBpZnJhbWVTdHlsZXMgPSB7XG4gICAgICAgICAgd2lkdGg6ICdjYWxjKDEwMCUgKyAnICsgKDAsIF9zY3JvbGxiYXJXaWR0aDIuZGVmYXVsdCkoKSArICdweCknXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RlID09PSBQT1BVUCkge1xuICAgICAgICBpZnJhbWVTdHlsZXMgPSBfZXh0ZW5kcyh7fSwgaWZyYW1lU3R5bGVzLCB7XG4gICAgICAgICAgV2Via2l0TWFza0ltYWdlOiAnLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCB3aGl0ZSwgYmxhY2spJyxcbiAgICAgICAgICBXZWJraXRUcmFuc2Zvcm06ICd0cmFuc2xhdGVaKDApJ1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIFdyYXBwZXIgPSB0aGlzLmdldFdyYXBwZXJDb21wb25lbnQobW9kZSk7XG4gICAgICB2YXIgQ2xvc2VJbWFnZSA9IHRoaXMuZ2V0Q2xvc2VJbWFnZShtb2RlKTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBPdmVybGF5LFxuICAgICAgICB7IGFwcGVhcmluZzogdGhpcy5zdGF0ZS5wb3B1cEFuaW1hdGUsIGlzQ29udGFpbmVkOiBpc0NvbnRhaW5lZCB9LFxuICAgICAgICBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfc3Bpbm5lcjIuZGVmYXVsdCwgeyBzdG9wcGVkOiB0aGlzLnN0YXRlLmlmcmFtZUxvYWRlZCB9KSxcbiAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgV3JhcHBlcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2RlOiBtb2RlLFxuICAgICAgICAgICAgb3BlbjogdGhpcy5zdGF0ZS5mcmFtZUFuaW1hdGUsXG4gICAgICAgICAgICBpc0NvbnRhaW5lZDogaXNDb250YWluZWQsXG4gICAgICAgICAgICB3aWR0aDogZHJhd2VyV2lkdGgsXG4gICAgICAgICAgICBvblRyYW5zaXRpb25FbmQ6IHRoaXMub25UcmFuc2l0aW9uRW5kLFxuICAgICAgICAgICAgaW5uZXJSZWY6IGZ1bmN0aW9uIGlubmVyUmVmKG5vZGUpIHtcbiAgICAgICAgICAgICAgX3RoaXM2LndyYXBwZXIgPSBub2RlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkYXRhLXFhJzogJ3BvcHVwLW1vZGUtJyArIG1vZGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc3RhdGUuaWZyYW1lTG9hZGVkICYmIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KENsb3NlSW1hZ2UsIHtcbiAgICAgICAgICAgIG1vZGU6IG1vZGUsXG4gICAgICAgICAgICBzcmM6IF9jbG9zZTIuZGVmYXVsdCxcbiAgICAgICAgICAgIGFsdDogJ2Nsb3NlLXR5cGVmb3JtJyxcbiAgICAgICAgICAgICdkYXRhLXFhJzogJ3BvcHVwLWNsb3NlLWJ1dHRvbicsXG4gICAgICAgICAgICBvbkNsaWNrOiB0aGlzLmFuaW1hdGVCZWZvcmVDbG9zZVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9pZnJhbWUyLmRlZmF1bHQsIHtcbiAgICAgICAgICAgIHNyYzogdGhpcy5wcm9wcy51cmwsXG4gICAgICAgICAgICBzdHlsZTogaWZyYW1lU3R5bGVzLFxuICAgICAgICAgICAgb25Mb2FkOiB0aGlzLm9uSWZyYW1lTG9hZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBvcHVwO1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuUG9wdXAucHJvcFR5cGVzID0ge1xuICB1cmw6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIG9wdGlvbnM6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsXG4gIG9uQ2xvc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgd2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLFxuICBoZWlnaHQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyXG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBQb3B1cDtcblxuLyoqKi8gfSksXG4vKiAxNTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZW1vdGlvbl91dGlsc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDUpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9zdHlsaXNfcnVsZV9zaGVldF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTYpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9zdHlsaXNfcnVsZV9zaGVldF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3N0eWxpc19ydWxlX3NoZWV0X18pO1xuXG5cblxudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2Vtb3Rpb25fdXRpbHNfX1tcImRcIiAvKiBtZW1vaXplICovXSkoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lbW90aW9uX3V0aWxzX19bXCJlXCIgLyogdW5pdGxlc3MgKi9dW2tleV0gIT09IDEgJiYga2V5LmNoYXJDb2RlQXQoMSkgIT09IDQ1ICYmIC8vIGN1c3RvbSBwcm9wZXJ0aWVzXG4gICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgdG9BZGQgPSBjbGFzc25hbWVzKFthcmcoKV0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xudmFyIGlzQnJvd3NlciA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuLSAncG9seWZpbGxzJyBvbiBzZXJ2ZXIgc2lkZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgU3R5bGVTaGVldCBmcm9tICdnbGFtb3IvbGliL3NoZWV0J1xubGV0IHN0eWxlU2hlZXQgPSBuZXcgU3R5bGVTaGVldCgpXG5cbnN0eWxlU2hlZXQuaW5qZWN0KClcbi0gJ2luamVjdHMnIHRoZSBzdHlsZXNoZWV0IGludG8gdGhlIHBhZ2UgKG9yIGludG8gbWVtb3J5IGlmIG9uIHNlcnZlcilcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG4vLyAkRmxvd0ZpeE1lXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlID09PSB0YWcpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZVN0eWxlVGFnKG9wdHMpIHtcbiAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHRhZy50eXBlID0gJ3RleHQvY3NzJztcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0cy5rZXkgfHwgJycpO1xuXG4gIGlmIChvcHRzLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdHMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSkgLy8gJEZsb3dGaXhNZVxuICA7XG4gIChvcHRzLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkID8gb3B0cy5jb250YWluZXIgOiBkb2N1bWVudC5oZWFkKS5hcHBlbmRDaGlsZCh0YWcpO1xuICByZXR1cm4gdGFnO1xufVxuXG5mdW5jdGlvbiBfU3R5bGVTaGVldChvcHRpb25zKSB7XG4gIHRoaXMuaXNTcGVlZHkgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nOyAvLyB0aGUgYmlnIGRyYXdiYWNrIGhlcmUgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG5cbiAgdGhpcy50YWdzID0gW107XG4gIHRoaXMuY3RyID0gMDtcbiAgdGhpcy5vcHRzID0gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gX2luamVjdCgpIHtcbiAgaWYgKHRoaXMuaW5qZWN0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FscmVhZHkgaW5qZWN0ZWQhJyk7XG4gIH1cblxuICB0aGlzLnRhZ3NbMF0gPSBtYWtlU3R5bGVUYWcodGhpcy5vcHRzKTtcbiAgdGhpcy5pbmplY3RlZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIF9zcGVlZHkoYm9vbCkge1xuICBpZiAodGhpcy5jdHIgIT09IDApIHtcbiAgICAvLyBjYW5ub3QgY2hhbmdlIHNwZWVkeSBtb2RlIGFmdGVyIGluc2VydGluZyBhbnkgcnVsZSB0byBzaGVldC4gRWl0aGVyIGNhbGwgc3BlZWR5KCR7Ym9vbH0pIGVhcmxpZXIgaW4geW91ciBhcHAsIG9yIGNhbGwgZmx1c2goKSBiZWZvcmUgc3BlZWR5KCR7Ym9vbH0pXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IGNoYW5nZSBzcGVlZHkgbm93XCIpO1xuICB9XG5cbiAgdGhpcy5pc1NwZWVkeSA9ICEhYm9vbDtcbn1cblxuZnVuY3Rpb24gX2luc2VydChydWxlLCBzb3VyY2VNYXApIHtcbiAgLy8gdGhpcyBpcyB0aGUgdWx0cmFmYXN0IHZlcnNpb24sIHdvcmtzIGFjcm9zcyBicm93c2Vyc1xuICBpZiAodGhpcy5pc1NwZWVkeSkge1xuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICB0cnkge1xuICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignaWxsZWdhbCBydWxlJywgcnVsZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgX3RhZyA9IG1ha2VTdHlsZVRhZyh0aGlzLm9wdHMpO1xuXG4gICAgdGhpcy50YWdzLnB1c2goX3RhZyk7XG5cbiAgICBfdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUgKyAoc291cmNlTWFwIHx8ICcnKSkpO1xuICB9XG5cbiAgdGhpcy5jdHIrKztcblxuICBpZiAodGhpcy5jdHIgJSA2NTAwMCA9PT0gMCkge1xuICAgIHRoaXMudGFncy5wdXNoKG1ha2VTdHlsZVRhZyh0aGlzLm9wdHMpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVmKHRhZykge1xuICByZXR1cm4gdGFnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbn1cblxuZnVuY3Rpb24gX2ZsdXNoKCkge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHRoaXMudGFncy5mb3JFYWNoKF9yZWYpO1xuICB0aGlzLnRhZ3MgPSBbXTtcbiAgdGhpcy5jdHIgPSAwOyAvLyB0b2RvIC0gbG9vayBmb3IgcmVtbmFudHMgaW4gZG9jdW1lbnQuc3R5bGVTaGVldHNcblxuICB0aGlzLmluamVjdGVkID0gZmFsc2U7XG59XG5cbnZhciBTdHlsZVNoZWV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIF9wcm90byA9IF9TdHlsZVNoZWV0LnByb3RvdHlwZTtcbiAgX3Byb3RvLmluamVjdCA9IF9pbmplY3Q7XG4gIF9wcm90by5zcGVlZHkgPSBfc3BlZWR5O1xuICBfcHJvdG8uaW5zZXJ0ID0gX2luc2VydDtcbiAgX3Byb3RvLmZsdXNoID0gX2ZsdXNoO1xuICByZXR1cm4gX1N0eWxlU2hlZXQ7XG59KCk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSBvcHRpb25zID0ge307XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleSB8fCAnY3NzJztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICgvW15hLXotXS8udGVzdChrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbW90aW9uIGtleSBtdXN0IG9ubHkgY29udGFpbiBsb3dlciBjYXNlIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIGFuZCAtIGJ1dCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIHBhc3NlZFwiKTtcbiAgICB9XG4gIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgdmFyIGNhY2hlcyA9IGNvbnRleHQuX19TRUNSRVRfRU1PVElPTl9fO1xuICB2YXIgY3VycmVudDtcblxuICBmdW5jdGlvbiBpbnNlcnRSdWxlKHJ1bGUpIHtcbiAgICBjdXJyZW50ICs9IHJ1bGU7XG5cbiAgICBpZiAoaXNCcm93c2VyKSB7XG4gICAgICBzaGVldC5pbnNlcnQocnVsZSwgY3VycmVudFNvdXJjZU1hcCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGlvblBsdWdpbiA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9zdHlsaXNfcnVsZV9zaGVldF9fX2RlZmF1bHQoKShpbnNlcnRSdWxlKTtcblxuICBpZiAoY2FjaGVzID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgc3R5bGlzT3B0aW9ucyA9IHtcbiAgICAgIGtleWZyYW1lOiBmYWxzZSxcbiAgICAgIGdsb2JhbDogZmFsc2UsXG4gICAgICBwcmVmaXg6IG9wdGlvbnMucHJlZml4ID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9ucy5wcmVmaXgsXG4gICAgICBzZW1pY29sb246IHRydWVcbiAgICB9O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHN0eWxpc09wdGlvbnMuY29tcHJlc3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb250ZXh0Ll9fU0VDUkVUX0VNT1RJT05fXyA9IGNhY2hlcyA9IHtcbiAgICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgICAgaW5zZXJ0ZWQ6IHt9LFxuICAgICAgc2hlZXQ6IG5ldyBTdHlsZVNoZWV0KG9wdGlvbnMpLFxuICAgICAgc3R5bGlzOiBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2Vtb3Rpb25fdXRpbHNfX1tcImJcIiAvKiBTdHlsaXMgKi9dKHN0eWxpc09wdGlvbnMpLFxuICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICBrZXk6IGtleVxuICAgIH07XG4gICAgY2FjaGVzLnN0eWxpcy51c2Uob3B0aW9ucy5zdHlsaXNQbHVnaW5zKShpbnNlcnRpb25QbHVnaW4pOyAvLyDwn5qAXG5cbiAgICBpZiAoaXNCcm93c2VyKSB7XG4gICAgICBjYWNoZXMuc2hlZXQuaW5qZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0eWxpcyA9IGNhY2hlcy5zdHlsaXM7XG4gIHZhciBzaGVldCA9IGNhY2hlcy5zaGVldDtcbiAgdmFyIGN1cnJlbnRTb3VyY2VNYXAgPSAnJztcblxuICBmdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb24sIGNvdWxkQmVTZWxlY3RvckludGVycG9sYXRpb24pIHtcbiAgICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAnJztcblxuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZW1vdGlvbl91dGlsc19fW1wiYVwiIC8qIFNUWUxFU19LRVkgKi9dXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHNlbGVjdG9yID0gaW50ZXJwb2xhdGlvbi50b1N0cmluZygpO1xuXG4gICAgICAgICAgaWYgKHNlbGVjdG9yID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGJhYmVsLXBsdWdpbi1lbW90aW9uLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnBvbGF0aW9uLmNhbGwodGhpcywgdGhpcyA9PT0gdW5kZWZpbmVkID8gaW50ZXJwb2xhdGlvbigpIDogLy8gJEZsb3dGaXhNZVxuICAgICAgICBpbnRlcnBvbGF0aW9uKHRoaXMubWVyZ2VkUHJvcHMsIHRoaXMuY29udGV4dCksIGNvdWxkQmVTZWxlY3RvckludGVycG9sYXRpb24pO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdC5jYWxsKHRoaXMsIGludGVycG9sYXRpb24pO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgY2FjaGVkID0gY2FjaGVzLnJlZ2lzdGVyZWRbaW50ZXJwb2xhdGlvbl07XG4gICAgICAgIHJldHVybiBjb3VsZEJlU2VsZWN0b3JJbnRlcnBvbGF0aW9uID09PSBmYWxzZSAmJiBjYWNoZWQgIT09IHVuZGVmaW5lZCA/IGNhY2hlZCA6IGludGVycG9sYXRpb247XG4gICAgfVxuICB9XG5cbiAgdmFyIG9iamVjdFRvU3RyaW5nQ2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3Qob2JqKSB7XG4gICAgaWYgKG9iamVjdFRvU3RyaW5nQ2FjaGUuaGFzKG9iaikpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBvYmplY3RUb1N0cmluZ0NhY2hlLmdldChvYmopO1xuICAgIH1cblxuICAgIHZhciBzdHJpbmcgPSAnJztcblxuICAgIGZ1bmN0aW9uIF9yZWYoaW50ZXJwb2xhdGlvbikge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24uY2FsbCh0aGlzLCBpbnRlcnBvbGF0aW9uLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZjIoa2V5KSB7XG4gICAgICBpZiAodHlwZW9mIG9ialtrZXldICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoY2FjaGVzLnJlZ2lzdGVyZWRbb2JqW2tleV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHJpbmcgKz0ga2V5ICsgXCJ7XCIgKyBjYWNoZXMucmVnaXN0ZXJlZFtvYmpba2V5XV0gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShrZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIG9ialtrZXldKSArIFwiO1wiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoa2V5ID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBiYWJlbC1wbHVnaW4tZW1vdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIGhhbmRsZUludGVycG9sYXRpb24uY2FsbCh0aGlzLCBvYmpba2V5XSwgZmFsc2UpICsgXCJ9XCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgb2JqLmZvckVhY2goX3JlZiwgdGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChfcmVmMiwgdGhpcyk7XG4gICAgfVxuXG4gICAgb2JqZWN0VG9TdHJpbmdDYWNoZS5zZXQob2JqLCBzdHJpbmcpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICB2YXIgbmFtZTtcbiAgdmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqOy9nO1xuXG4gIHZhciBjcmVhdGVTdHlsZXMgPSBmdW5jdGlvbiBjcmVhdGVTdHlsZXMoc3RyaW5ncykge1xuICAgIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgICB2YXIgc3R5bGVzID0gJyc7XG4gICAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG5cbiAgICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uLmNhbGwodGhpcywgc3RyaW5ncywgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZXMgKz0gc3RyaW5nc1swXTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgaW50ZXJwb2xhdGlvbnMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgaW50ZXJwb2xhdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIGludGVycG9sYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVycG9sYXRpb24sIGkpIHtcbiAgICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uLmNhbGwodGhpcywgaW50ZXJwb2xhdGlvbiwgc3R5bGVzLmNoYXJDb2RlQXQoc3R5bGVzLmxlbmd0aCAtIDEpID09PSA0NiAvLyAuXG4gICAgICApO1xuXG4gICAgICBpZiAoc3RyaW5nTW9kZSA9PT0gdHJ1ZSAmJiBzdHJpbmdzW2kgKyAxXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHN0eWxlcyArPSBzdHJpbmdzW2kgKyAxXTtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgICBzdHlsZXMgPSBzdHlsZXMucmVwbGFjZShsYWJlbFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCwgcDEpIHtcbiAgICAgIGlkZW50aWZpZXJOYW1lICs9IFwiLVwiICsgcDE7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gICAgbmFtZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZW1vdGlvbl91dGlsc19fW1wiY1wiIC8qIGhhc2hTdHJpbmcgKi9dKShzdHlsZXMgKyBpZGVudGlmaWVyTmFtZSkgKyBpZGVudGlmaWVyTmFtZTtcbiAgICByZXR1cm4gc3R5bGVzO1xuICB9O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIHNvdXJjZU1hcFJlZ0V4ID0gL1xcL1xcKiNcXHNzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb25cXC9qc29uO1xcUytcXHMrXFwqXFwvLztcbiAgICB2YXIgb2xkU3R5bGlzID0gc3R5bGlzO1xuXG4gICAgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHNlbGVjdG9yLCBzdHlsZXMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBzb3VyY2VNYXBSZWdFeC5leGVjKHN0eWxlcyk7XG4gICAgICBjdXJyZW50U291cmNlTWFwID0gcmVzdWx0ID8gcmVzdWx0WzBdIDogJyc7XG4gICAgICBvbGRTdHlsaXMoc2VsZWN0b3IsIHN0eWxlcyk7XG4gICAgICBjdXJyZW50U291cmNlTWFwID0gJyc7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydChzY29wZSwgc3R5bGVzKSB7XG4gICAgaWYgKGNhY2hlcy5pbnNlcnRlZFtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdXJyZW50ID0gJyc7XG4gICAgICBzdHlsaXMoc2NvcGUsIHN0eWxlcyk7XG4gICAgICBjYWNoZXMuaW5zZXJ0ZWRbbmFtZV0gPSBjdXJyZW50O1xuICAgIH1cbiAgfVxuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgdmFyIHN0eWxlcyA9IGNyZWF0ZVN0eWxlcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHZhciBzZWxlY3RvciA9IGtleSArIFwiLVwiICsgbmFtZTtcblxuICAgIGlmIChjYWNoZXMucmVnaXN0ZXJlZFtzZWxlY3Rvcl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVzLnJlZ2lzdGVyZWRbc2VsZWN0b3JdID0gc3R5bGVzO1xuICAgIH1cblxuICAgIGluc2VydChcIi5cIiArIHNlbGVjdG9yLCBzdHlsZXMpO1xuICAgIHJldHVybiBzZWxlY3RvcjtcbiAgfTtcblxuICB2YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICAgIHZhciBzdHlsZXMgPSBjcmVhdGVTdHlsZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB2YXIgYW5pbWF0aW9uID0gXCJhbmltYXRpb24tXCIgKyBuYW1lO1xuICAgIGluc2VydCgnJywgXCJAa2V5ZnJhbWVzIFwiICsgYW5pbWF0aW9uICsgXCJ7XCIgKyBzdHlsZXMgKyBcIn1cIik7XG4gICAgcmV0dXJuIGFuaW1hdGlvbjtcbiAgfTtcblxuICB2YXIgaW5qZWN0R2xvYmFsID0gZnVuY3Rpb24gaW5qZWN0R2xvYmFsKCkge1xuICAgIHZhciBzdHlsZXMgPSBjcmVhdGVTdHlsZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpbnNlcnQoJycsIHN0eWxlcyk7XG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gICAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICAgIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgIGlmIChjYWNoZXMucmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlKGNsYXNzTmFtZSwgc291cmNlTWFwKSB7XG4gICAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gICAgaWYgKHJlZ2lzdGVyZWRTdHlsZXMubGVuZ3RoIDwgMikge1xuICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmF3Q2xhc3NOYW1lICsgY3NzKHJlZ2lzdGVyZWRTdHlsZXMsIHNvdXJjZU1hcCk7XG4gIH1cblxuICBmdW5jdGlvbiBjeCgpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNsYXNzTmFtZXMgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGNsYXNzTmFtZXNbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2xhc3NuYW1lcyhjbGFzc05hbWVzKSk7XG4gIH1cblxuICBmdW5jdGlvbiBoeWRyYXRlU2luZ2xlSWQoaWQpIHtcbiAgICBjYWNoZXMuaW5zZXJ0ZWRbaWRdID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGh5ZHJhdGUoaWRzKSB7XG4gICAgaWRzLmZvckVhY2goaHlkcmF0ZVNpbmdsZUlkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIGlmIChpc0Jyb3dzZXIpIHtcbiAgICAgIHNoZWV0LmZsdXNoKCk7XG4gICAgICBzaGVldC5pbmplY3QoKTtcbiAgICB9XG5cbiAgICBjYWNoZXMuaW5zZXJ0ZWQgPSB7fTtcbiAgICBjYWNoZXMucmVnaXN0ZXJlZCA9IHt9O1xuICB9XG5cbiAgZnVuY3Rpb24gX3JlZjMobm9kZSkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBzaGVldC50YWdzWzBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIHNoZWV0LnRhZ3NbMF0pOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvbi1cIiArIGtleSkuc3BsaXQoJyAnKS5mb3JFYWNoKGh5ZHJhdGVTaW5nbGVJZCk7XG4gIH1cblxuICBpZiAoaXNCcm93c2VyKSB7XG4gICAgdmFyIGNodW5rcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1lbW90aW9uLVwiICsga2V5ICsgXCJdXCIpO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoY2h1bmtzLCBfcmVmMyk7XG4gIH1cblxuICB2YXIgZW1vdGlvbiA9IHtcbiAgICBmbHVzaDogZmx1c2gsXG4gICAgaHlkcmF0ZTogaHlkcmF0ZSxcbiAgICBjeDogY3gsXG4gICAgbWVyZ2U6IG1lcmdlLFxuICAgIGdldFJlZ2lzdGVyZWRTdHlsZXM6IGdldFJlZ2lzdGVyZWRTdHlsZXMsXG4gICAgaW5qZWN0R2xvYmFsOiBpbmplY3RHbG9iYWwsXG4gICAga2V5ZnJhbWVzOiBrZXlmcmFtZXMsXG4gICAgY3NzOiBjc3MsXG4gICAgc2hlZXQ6IHNoZWV0LFxuICAgIGNhY2hlczogY2FjaGVzXG4gIH07XG4gIHJldHVybiBlbW90aW9uO1xufVxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNyZWF0ZUVtb3Rpb24pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguZXMuanMubWFwXG5cbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KSkpXG5cbi8qKiovIH0pLFxuLyogMTU2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuXHQgdHJ1ZSA/IChtb2R1bGVbJ2V4cG9ydHMnXSA9IGZhY3RvcnkoKSkgOlxuXHRcdHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSA/IGRlZmluZShmYWN0b3J5KCkpIDpcblx0XHRcdCh3aW5kb3dbJ3N0eWxpc1J1bGVTaGVldCddID0gZmFjdG9yeSgpKVxufShmdW5jdGlvbiAoKSB7XG5cblx0J3VzZSBzdHJpY3QnXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbnNlcnRSdWxlKSB7XG5cdFx0dmFyIGRlbGltaXRlciA9ICcvKnwqLydcblx0XHR2YXIgbmVlZGxlID0gZGVsaW1pdGVyKyd9J1xuXG5cdFx0ZnVuY3Rpb24gdG9TaGVldCAoYmxvY2spIHtcblx0XHRcdGlmIChibG9jaylcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRpbnNlcnRSdWxlKGJsb2NrICsgJ30nKVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdH1cblxuXHRcdHJldHVybiBmdW5jdGlvbiBydWxlU2hlZXQgKGNvbnRleHQsIGNvbnRlbnQsIHNlbGVjdG9ycywgcGFyZW50cywgbGluZSwgY29sdW1uLCBsZW5ndGgsIGF0LCBkZXB0aCkge1xuXHRcdFx0c3dpdGNoIChjb250ZXh0KSB7XG5cdFx0XHRcdC8vIHByb3BlcnR5XG5cdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHQvLyBAaW1wb3J0XG5cdFx0XHRcdFx0aWYgKGRlcHRoID09PSAwICYmIGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gNjQpXG5cdFx0XHRcdFx0XHRpbnNlcnRSdWxlKGNvbnRlbnQpXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0Ly8gc2VsZWN0b3Jcblx0XHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRcdGlmIChhdCA9PT0gMClcblx0XHRcdFx0XHRcdHJldHVybiBjb250ZW50ICsgZGVsaW1pdGVyXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0Ly8gYXQtcnVsZVxuXHRcdFx0XHRjYXNlIDM6XG5cdFx0XHRcdFx0c3dpdGNoIChhdCkge1xuXHRcdFx0XHRcdFx0Ly8gQGZvbnQtZmFjZSwgQHBhZ2Vcblx0XHRcdFx0XHRcdGNhc2UgMTAyOlxuXHRcdFx0XHRcdFx0Y2FzZSAxMTI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbnNlcnRSdWxlKHNlbGVjdG9yc1swXStjb250ZW50KSwgJydcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb250ZW50ICsgZGVsaW1pdGVyXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIC0yOlxuXHRcdFx0XHRcdGNvbnRlbnQuc3BsaXQobmVlZGxlKS5mb3JFYWNoKHRvU2hlZXQpXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59KSlcblxuXG4vKioqLyB9KSxcbi8qIDE1NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lbW90aW9uX3V0aWxzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fKTtcblxuXG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxudmFyIGNoYW5uZWwgPSAnX19FTU9USU9OX1RIRU1JTkdfXyc7XG5cbnZhciBfY29udGV4dFR5cGVzO1xuXG52YXIgY29udGV4dFR5cGVzID0gKF9jb250ZXh0VHlwZXMgPSB7fSwgX2NvbnRleHRUeXBlc1tjaGFubmVsXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLm9iamVjdCwgX2NvbnRleHRUeXBlcyk7XG5cbmZ1bmN0aW9uIHNldFRoZW1lKHRoZW1lKSB7XG4gIHRoaXMuc2V0U3RhdGUoe1xuICAgIHRoZW1lOiB0aGVtZVxuICB9KTtcbn1cbnZhciByZWFjdFByb3BzUmVnZXggPSAvXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8YWNjZXB0fGFjY2VwdENoYXJzZXR8YWNjZXNzS2V5fGFjdGlvbnxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYXJTZXR8Y2hlY2tlZHxjaXRlfGNsYXNzSUR8Y2xhc3NOYW1lfGNvbHN8Y29sU3Bhbnxjb250ZW50fGNvbnRlbnRFZGl0YWJsZXxjb250ZXh0TWVudXxjb250cm9sc3xjb250cm9sc0xpc3R8Y29vcmRzfGNyb3NzT3JpZ2lufGRhdGF8ZGF0ZVRpbWV8ZGVmYXVsdHxkZWZlcnxkaXJ8ZGlzYWJsZWR8ZG93bmxvYWR8ZHJhZ2dhYmxlfGVuY1R5cGV8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8cmVzdWx0c3xzZWN1cml0eXx1bnNlbGVjdGFibGV8YWNjZW50SGVpZ2h0fGFjY3VtdWxhdGV8YWRkaXRpdmV8YWxpZ25tZW50QmFzZWxpbmV8YWxsb3dSZW9yZGVyfGFscGhhYmV0aWN8YW1wbGl0dWRlfGFyYWJpY0Zvcm18YXNjZW50fGF0dHJpYnV0ZU5hbWV8YXR0cmlidXRlVHlwZXxhdXRvUmV2ZXJzZXxhemltdXRofGJhc2VGcmVxdWVuY3l8YmFzZWxpbmVTaGlmdHxiYXNlUHJvZmlsZXxiYm94fGJlZ2lufGJpYXN8Ynl8Y2FsY01vZGV8Y2FwSGVpZ2h0fGNsaXB8Y2xpcFBhdGhVbml0c3xjbGlwUGF0aHxjbGlwUnVsZXxjb2xvckludGVycG9sYXRpb258Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc3xjb2xvclByb2ZpbGV8Y29sb3JSZW5kZXJpbmd8Y29udGVudFNjcmlwdFR5cGV8Y29udGVudFN0eWxlVHlwZXxjdXJzb3J8Y3h8Y3l8ZHxkZWNlbGVyYXRlfGRlc2NlbnR8ZGlmZnVzZUNvbnN0YW50fGRpcmVjdGlvbnxkaXNwbGF5fGRpdmlzb3J8ZG9taW5hbnRCYXNlbGluZXxkdXJ8ZHh8ZHl8ZWRnZU1vZGV8ZWxldmF0aW9ufGVuYWJsZUJhY2tncm91bmR8ZW5kfGV4cG9uZW50fGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWR8ZmlsbHxmaWxsT3BhY2l0eXxmaWxsUnVsZXxmaWx0ZXJ8ZmlsdGVyUmVzfGZpbHRlclVuaXRzfGZsb29kQ29sb3J8Zmxvb2RPcGFjaXR5fGZvY3VzYWJsZXxmb250RmFtaWx5fGZvbnRTaXplfGZvbnRTaXplQWRqdXN0fGZvbnRTdHJldGNofGZvbnRTdHlsZXxmb250VmFyaWFudHxmb250V2VpZ2h0fGZvcm1hdHxmcm9tfGZyfGZ4fGZ5fGcxfGcyfGdseXBoTmFtZXxnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbHxnbHlwaE9yaWVudGF0aW9uVmVydGljYWx8Z2x5cGhSZWZ8Z3JhZGllbnRUcmFuc2Zvcm18Z3JhZGllbnRVbml0c3xoYW5naW5nfGhvcml6QWR2WHxob3Jpek9yaWdpblh8aWRlb2dyYXBoaWN8aW1hZ2VSZW5kZXJpbmd8aW58aW4yfGludGVyY2VwdHxrfGsxfGsyfGszfGs0fGtlcm5lbE1hdHJpeHxrZXJuZWxVbml0TGVuZ3RofGtlcm5pbmd8a2V5UG9pbnRzfGtleVNwbGluZXN8a2V5VGltZXN8bGVuZ3RoQWRqdXN0fGxldHRlclNwYWNpbmd8bGlnaHRpbmdDb2xvcnxsaW1pdGluZ0NvbmVBbmdsZXxsb2NhbHxtYXJrZXJFbmR8bWFya2VyTWlkfG1hcmtlclN0YXJ0fG1hcmtlckhlaWdodHxtYXJrZXJVbml0c3xtYXJrZXJXaWR0aHxtYXNrfG1hc2tDb250ZW50VW5pdHN8bWFza1VuaXRzfG1hdGhlbWF0aWNhbHxtb2RlfG51bU9jdGF2ZXN8b2Zmc2V0fG9wYWNpdHl8b3BlcmF0b3J8b3JkZXJ8b3JpZW50fG9yaWVudGF0aW9ufG9yaWdpbnxvdmVyZmxvd3xvdmVybGluZVBvc2l0aW9ufG92ZXJsaW5lVGhpY2tuZXNzfHBhbm9zZTF8cGFpbnRPcmRlcnxwYXRoTGVuZ3RofHBhdHRlcm5Db250ZW50VW5pdHN8cGF0dGVyblRyYW5zZm9ybXxwYXR0ZXJuVW5pdHN8cG9pbnRlckV2ZW50c3xwb2ludHN8cG9pbnRzQXRYfHBvaW50c0F0WXxwb2ludHNBdFp8cHJlc2VydmVBbHBoYXxwcmVzZXJ2ZUFzcGVjdFJhdGlvfHByaW1pdGl2ZVVuaXRzfHJ8cmFkaXVzfHJlZlh8cmVmWXxyZW5kZXJpbmdJbnRlbnR8cmVwZWF0Q291bnR8cmVwZWF0RHVyfHJlcXVpcmVkRXh0ZW5zaW9uc3xyZXF1aXJlZEZlYXR1cmVzfHJlc3RhcnR8cmVzdWx0fHJvdGF0ZXxyeHxyeXxzY2FsZXxzZWVkfHNoYXBlUmVuZGVyaW5nfHNsb3BlfHNwYWNpbmd8c3BlY3VsYXJDb25zdGFudHxzcGVjdWxhckV4cG9uZW50fHNwZWVkfHNwcmVhZE1ldGhvZHxzdGFydE9mZnNldHxzdGREZXZpYXRpb258c3RlbWh8c3RlbXZ8c3RpdGNoVGlsZXN8c3RvcENvbG9yfHN0b3BPcGFjaXR5fHN0cmlrZXRocm91Z2hQb3NpdGlvbnxzdHJpa2V0aHJvdWdoVGhpY2tuZXNzfHN0cmluZ3xzdHJva2V8c3Ryb2tlRGFzaGFycmF5fHN0cm9rZURhc2hvZmZzZXR8c3Ryb2tlTGluZWNhcHxzdHJva2VMaW5lam9pbnxzdHJva2VNaXRlcmxpbWl0fHN0cm9rZU9wYWNpdHl8c3Ryb2tlV2lkdGh8c3VyZmFjZVNjYWxlfHN5c3RlbUxhbmd1YWdlfHRhYmxlVmFsdWVzfHRhcmdldFh8dGFyZ2V0WXx0ZXh0QW5jaG9yfHRleHREZWNvcmF0aW9ufHRleHRSZW5kZXJpbmd8dGV4dExlbmd0aHx0b3x0cmFuc2Zvcm18dTF8dTJ8dW5kZXJsaW5lUG9zaXRpb258dW5kZXJsaW5lVGhpY2tuZXNzfHVuaWNvZGV8dW5pY29kZUJpZGl8dW5pY29kZVJhbmdlfHVuaXRzUGVyRW18dkFscGhhYmV0aWN8dkhhbmdpbmd8dklkZW9ncmFwaGljfHZNYXRoZW1hdGljYWx8dmFsdWVzfHZlY3RvckVmZmVjdHx2ZXJzaW9ufHZlcnRBZHZZfHZlcnRPcmlnaW5YfHZlcnRPcmlnaW5ZfHZpZXdCb3h8dmlld1RhcmdldHx2aXNpYmlsaXR5fHdpZHRoc3x3b3JkU3BhY2luZ3x3cml0aW5nTW9kZXx4fHhIZWlnaHR8eDF8eDJ8eENoYW5uZWxTZWxlY3Rvcnx4bGlua0FjdHVhdGV8eGxpbmtBcmNyb2xlfHhsaW5rSHJlZnx4bGlua1JvbGV8eGxpbmtTaG93fHhsaW5rVGl0bGV8eGxpbmtUeXBlfHhtbEJhc2V8eG1sbnN8eG1sbnNYbGlua3x4bWxMYW5nfHhtbFNwYWNlfHl8eTF8eTJ8eUNoYW5uZWxTZWxlY3Rvcnx6fHpvb21BbmRQYW4pfChvbltBLVpdLiopfCgoZGF0YXxhcmlhKS0uKikpJC87XG52YXIgdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lbW90aW9uX3V0aWxzX19bXCJkXCIgLyogbWVtb2l6ZSAqL10pKGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHJlYWN0UHJvcHNSZWdleC50ZXN0KGtleSk7XG59KTtcbnZhciB0ZXN0T21pdFByb3BzT25Db21wb25lbnQgPSBmdW5jdGlvbiB0ZXN0T21pdFByb3BzT25Db21wb25lbnQoa2V5KSB7XG4gIHJldHVybiBrZXkgIT09ICd0aGVtZScgJiYga2V5ICE9PSAnaW5uZXJSZWYnO1xufTtcbnZhciB0ZXN0QWx3YXlzVHJ1ZSA9IGZ1bmN0aW9uIHRlc3RBbHdheXNUcnVlKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgb21pdEFzc2lnbiA9IGZ1bmN0aW9uIG9taXRBc3NpZ24odGVzdEZuLCB0YXJnZXQpIHtcbiAgdmFyIGkgPSAyO1xuICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIHZhciBfa2V5ID0gdm9pZCAwO1xuXG4gICAgZm9yIChfa2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKHRlc3RGbihfa2V5KSkge1xuICAgICAgICB0YXJnZXRbX2tleV0gPSBzb3VyY2VbX2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbmZ1bmN0aW9uIF9jb21wb25lbnRXaWxsTW91bnQoKSB7XG4gIGlmICh0aGlzLmNvbnRleHRbY2hhbm5lbF0gIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUgPSB0aGlzLmNvbnRleHRbY2hhbm5lbF0uc3Vic2NyaWJlKHNldFRoZW1lLmJpbmQodGhpcykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgaWYgKHRoaXMudW5zdWJzY3JpYmUgIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuY29udGV4dFtjaGFubmVsXS51bnN1YnNjcmliZSh0aGlzLnVuc3Vic2NyaWJlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHkpIHtcbiAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgIC8vIHJlYWN0LWhvdC1sb2FkZXIgdHJpZXMgdG8gYWNjZXNzIHRoaXMgc3R1ZmZcbiAgICBjYXNlICdfX3Byb3RvX18nOlxuICAgIGNhc2UgJ25hbWUnOlxuICAgIGNhc2UgJ3Byb3RvdHlwZSc6XG4gICAgY2FzZSAnZGlzcGxheU5hbWUnOlxuICAgICAge1xuICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5XTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSdyZSB0cnlpbmcgdG8gdXNlIHRoZSBzdHlsZWQgc2hvcnRoYW5kIHdpdGhvdXQgYmFiZWwtcGx1Z2luLWVtb3Rpb24uXCIgKyAoXCJcXG5QbGVhc2UgaW5zdGFsbCBhbmQgc2V0dXAgYmFiZWwtcGx1Z2luLWVtb3Rpb24gb3IgdXNlIHRoZSBmdW5jdGlvbiBjYWxsIHN5bnRheChgc3R5bGVkKCdcIiArIHByb3BlcnR5ICsgXCInKWAgaW5zdGVhZCBvZiBgc3R5bGVkLlwiICsgcHJvcGVydHkgKyBcImApXCIpKTtcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbW90aW9uU3R5bGVkKGVtb3Rpb24sIHZpZXcpIHtcbiAgdmFyIF9jcmVhdGVTdHlsZWQgPSBmdW5jdGlvbiBjcmVhdGVTdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0YWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBhIHN0eWxlZCBlbGVtZW50IHdpdGggYW4gdW5kZWZpbmVkIGNvbXBvbmVudC5cXG5Zb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGltcG9ydCBpdC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3RhdGljQ2xhc3NOYW1lO1xuICAgIHZhciBpZGVudGlmaWVyTmFtZTtcbiAgICB2YXIgc3RhYmxlQ2xhc3NOYW1lO1xuXG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3RhdGljQ2xhc3NOYW1lID0gb3B0aW9ucy5lO1xuICAgICAgaWRlbnRpZmllck5hbWUgPSBvcHRpb25zLmxhYmVsO1xuICAgICAgc3RhYmxlQ2xhc3NOYW1lID0gb3B0aW9ucy50YXJnZXQ7XG4gICAgfVxuXG4gICAgdmFyIGlzUmVhbCA9IHRhZy5fX2Vtb3Rpb25fcmVhbCA9PT0gdGFnO1xuICAgIHZhciBiYXNlVGFnID0gc3RhdGljQ2xhc3NOYW1lID09PSB1bmRlZmluZWQgPyBpc1JlYWwgJiYgdGFnLl9fZW1vdGlvbl9iYXNlIHx8IHRhZyA6IHRhZztcbiAgICB2YXIgb21pdEZuID0gdHlwZW9mIGJhc2VUYWcgPT09ICdzdHJpbmcnICYmIGJhc2VUYWcuY2hhckF0KDApID09PSBiYXNlVGFnLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpID8gdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnIDogdGVzdE9taXRQcm9wc09uQ29tcG9uZW50O1xuXG4gICAgZnVuY3Rpb24gX3ZhbHVlKCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc3RhYmxlQ2xhc3NOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuICdOT19DT01QT05FTlRfU0VMRUNUT1InO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gXCIuXCIgKyBzdGFibGVDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgdmFyIHN0eWxlcyA9IGlzUmVhbCAmJiB0YWdbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2Vtb3Rpb25fdXRpbHNfX1tcImFcIiAvKiBTVFlMRVNfS0VZICovXV0gIT09IHVuZGVmaW5lZCA/IHRhZ1tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZW1vdGlvbl91dGlsc19fW1wiYVwiIC8qIFNUWUxFU19LRVkgKi9dXS5zbGljZSgwKSA6IFtdO1xuXG4gICAgICBpZiAoaWRlbnRpZmllck5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdHlsZXMucHVzaChcImxhYmVsOlwiICsgaWRlbnRpZmllck5hbWUgKyBcIjtcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0aWNDbGFzc05hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJnc1swXSA9PSBudWxsIHx8IGFyZ3NbMF0ucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHlsZXMucHVzaC5hcHBseShzdHlsZXMsIGFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0eWxlcy5wdXNoKGFyZ3NbMF1bMF0pO1xuICAgICAgICAgIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgICAgICAgICB2YXIgaSA9IDE7XG5cbiAgICAgICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBzdHlsZXMucHVzaChhcmdzW2ldLCBhcmdzWzBdW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3JlbmRlcigpIHtcbiAgICAgICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIHN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgdGhpcy5tZXJnZWRQcm9wcyA9IG9taXRBc3NpZ24odGVzdEFsd2F5c1RydWUsIHt9LCBwcm9wcywge1xuICAgICAgICAgIHRoZW1lOiBzdGF0ZSAhPT0gbnVsbCAmJiBzdGF0ZS50aGVtZSB8fCBwcm9wcy50aGVtZSB8fCB7fVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuICAgICAgICB2YXIgY2xhc3NJbnRlcnBvbGF0aW9ucyA9IFtdO1xuXG4gICAgICAgIGlmIChwcm9wcy5jbGFzc05hbWUpIHtcbiAgICAgICAgICBpZiAoc3RhdGljQ2xhc3NOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBlbW90aW9uLmdldFJlZ2lzdGVyZWRTdHlsZXMoY2xhc3NJbnRlcnBvbGF0aW9ucywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xhc3NOYW1lICs9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0aWNDbGFzc05hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNsYXNzTmFtZSArPSBlbW90aW9uLmNzcy5hcHBseSh0aGlzLCBzdHlsZXMuY29uY2F0KGNsYXNzSW50ZXJwb2xhdGlvbnMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGFzc05hbWUgKz0gc3RhdGljQ2xhc3NOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YWJsZUNsYXNzTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgc3RhYmxlQ2xhc3NOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZpZXcuY3JlYXRlRWxlbWVudChiYXNlVGFnLCBvbWl0QXNzaWduKG9taXRGbiwge30sIHByb3BzLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgICAgcmVmOiBwcm9wcy5pbm5lclJlZlxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBTdHlsZWQgPVxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgZnVuY3Rpb24gKF92aWV3JENvbXBvbmVudCkge1xuICAgICAgICBfaW5oZXJpdHNMb29zZShTdHlsZWQsIF92aWV3JENvbXBvbmVudCk7XG5cbiAgICAgICAgZnVuY3Rpb24gU3R5bGVkKCkge1xuICAgICAgICAgIHJldHVybiBfdmlldyRDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9wcm90byA9IFN0eWxlZC5wcm90b3R5cGU7XG4gICAgICAgIF9wcm90by5jb21wb25lbnRXaWxsTW91bnQgPSBfY29tcG9uZW50V2lsbE1vdW50O1xuICAgICAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBfY29tcG9uZW50V2lsbFVubW91bnQ7XG4gICAgICAgIF9wcm90by5yZW5kZXIgPSBfcmVuZGVyO1xuICAgICAgICByZXR1cm4gU3R5bGVkO1xuICAgICAgfSh2aWV3LkNvbXBvbmVudCk7XG5cbiAgICAgIFN0eWxlZC5kaXNwbGF5TmFtZSA9IGlkZW50aWZpZXJOYW1lICE9PSB1bmRlZmluZWQgPyBpZGVudGlmaWVyTmFtZSA6IFwiU3R5bGVkKFwiICsgKHR5cGVvZiBiYXNlVGFnID09PSAnc3RyaW5nJyA/IGJhc2VUYWcgOiBiYXNlVGFnLmRpc3BsYXlOYW1lIHx8IGJhc2VUYWcubmFtZSB8fCAnQ29tcG9uZW50JykgKyBcIilcIjtcbiAgICAgIFN0eWxlZC5jb250ZXh0VHlwZXMgPSBjb250ZXh0VHlwZXM7XG4gICAgICBTdHlsZWRbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2Vtb3Rpb25fdXRpbHNfX1tcImFcIiAvKiBTVFlMRVNfS0VZICovXV0gPSBzdHlsZXM7XG4gICAgICBTdHlsZWQuX19lbW90aW9uX2Jhc2UgPSBiYXNlVGFnO1xuICAgICAgU3R5bGVkLl9fZW1vdGlvbl9yZWFsID0gU3R5bGVkO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0eWxlZCwgJ3RvU3RyaW5nJywge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IF92YWx1ZVxuICAgICAgfSk7XG5cbiAgICAgIFN0eWxlZC53aXRoQ29tcG9uZW50ID0gZnVuY3Rpb24gKG5leHRUYWcsIG5leHRPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlU3R5bGVkKG5leHRUYWcsIG5leHRPcHRpb25zICE9PSB1bmRlZmluZWQgPyAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIG9taXRBc3NpZ24odGVzdEFsd2F5c1RydWUsIHt9LCBvcHRpb25zLCBuZXh0T3B0aW9ucykgOiBvcHRpb25zKS5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFN0eWxlZDtcbiAgICB9O1xuICB9O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBfY3JlYXRlU3R5bGVkID0gbmV3IFByb3h5KF9jcmVhdGVTdHlsZWQsIHtcbiAgICAgIGdldDogX2dldFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIF9jcmVhdGVTdHlsZWQ7XG59XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY3JlYXRlRW1vdGlvblN0eWxlZCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lcy5qcy5tYXBcblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcblxuLyoqKi8gfSksXG4vKiAxNTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18sIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fOy8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS45LjFcbihmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB2YXIgZ2V0U2Nyb2xsYmFyV2lkdGgsIHNjcm9sbGJhcldpZHRoO1xuXG4gIHNjcm9sbGJhcldpZHRoID0gbnVsbDtcblxuICBnZXRTY3JvbGxiYXJXaWR0aCA9IGZ1bmN0aW9uKHJlY2FsY3VsYXRlKSB7XG4gICAgdmFyIGRpdjEsIGRpdjI7XG4gICAgaWYgKHJlY2FsY3VsYXRlID09IG51bGwpIHtcbiAgICAgIHJlY2FsY3VsYXRlID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICgoc2Nyb2xsYmFyV2lkdGggIT0gbnVsbCkgJiYgIXJlY2FsY3VsYXRlKSB7XG4gICAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGg7XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBkaXYxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2MiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdjEuc3R5bGUud2lkdGggPSBkaXYyLnN0eWxlLndpZHRoID0gZGl2MS5zdHlsZS5oZWlnaHQgPSBkaXYyLnN0eWxlLmhlaWdodCA9ICcxMDBweCc7XG4gICAgZGl2MS5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuICAgIGRpdjIuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdjEpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2Mik7XG4gICAgc2Nyb2xsYmFyV2lkdGggPSBNYXRoLmFicyhkaXYxLnNjcm9sbEhlaWdodCAtIGRpdjIuc2Nyb2xsSGVpZ2h0KTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdjEpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2Mik7XG4gICAgcmV0dXJuIHNjcm9sbGJhcldpZHRoO1xuICB9O1xuXG4gIGlmICh0cnVlKSB7XG4gICAgIShfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fID0gW10sIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGdldFNjcm9sbGJhcldpZHRoO1xuICAgIH0pLmFwcGx5KGV4cG9ydHMsIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18pLFxuXHRcdFx0XHRfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyAhPT0gdW5kZWZpbmVkICYmIChtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBnZXRTY3JvbGxiYXJXaWR0aDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmdldFNjcm9sbGJhcldpZHRoID0gZ2V0U2Nyb2xsYmFyV2lkdGg7XG4gIH1cblxufSkuY2FsbCh0aGlzKTtcblxuXG4vKioqLyB9KSxcbi8qIDE1OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXzsvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMS0yMDE0IEZlbGl4IEduYXNzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHA6Ly9zcGluLmpzLm9yZy9cbiAqXG4gKiBFeGFtcGxlOlxuICAgIHZhciBvcHRzID0ge1xuICAgICAgbGluZXM6IDEyICAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgbGluZXMgdG8gZHJhd1xuICAgICwgbGVuZ3RoOiA3ICAgICAgICAgICAgIC8vIFRoZSBsZW5ndGggb2YgZWFjaCBsaW5lXG4gICAgLCB3aWR0aDogNSAgICAgICAgICAgICAgLy8gVGhlIGxpbmUgdGhpY2tuZXNzXG4gICAgLCByYWRpdXM6IDEwICAgICAgICAgICAgLy8gVGhlIHJhZGl1cyBvZiB0aGUgaW5uZXIgY2lyY2xlXG4gICAgLCBzY2FsZTogMS4wICAgICAgICAgICAgLy8gU2NhbGVzIG92ZXJhbGwgc2l6ZSBvZiB0aGUgc3Bpbm5lclxuICAgICwgY29ybmVyczogMSAgICAgICAgICAgIC8vIFJvdW5kbmVzcyAoMC4uMSlcbiAgICAsIGNvbG9yOiAnIzAwMCcgICAgICAgICAvLyAjcmdiIG9yICNycmdnYmJcbiAgICAsIG9wYWNpdHk6IDEvNCAgICAgICAgICAvLyBPcGFjaXR5IG9mIHRoZSBsaW5lc1xuICAgICwgcm90YXRlOiAwICAgICAgICAgICAgIC8vIFJvdGF0aW9uIG9mZnNldFxuICAgICwgZGlyZWN0aW9uOiAxICAgICAgICAgIC8vIDE6IGNsb2Nrd2lzZSwgLTE6IGNvdW50ZXJjbG9ja3dpc2VcbiAgICAsIHNwZWVkOiAxICAgICAgICAgICAgICAvLyBSb3VuZHMgcGVyIHNlY29uZFxuICAgICwgdHJhaWw6IDEwMCAgICAgICAgICAgIC8vIEFmdGVyZ2xvdyBwZXJjZW50YWdlXG4gICAgLCBmcHM6IDIwICAgICAgICAgICAgICAgLy8gRnJhbWVzIHBlciBzZWNvbmQgd2hlbiB1c2luZyBzZXRUaW1lb3V0KClcbiAgICAsIHpJbmRleDogMmU5ICAgICAgICAgICAvLyBVc2UgYSBoaWdoIHotaW5kZXggYnkgZGVmYXVsdFxuICAgICwgY2xhc3NOYW1lOiAnc3Bpbm5lcicgIC8vIENTUyBjbGFzcyB0byBhc3NpZ24gdG8gdGhlIGVsZW1lbnRcbiAgICAsIHRvcDogJzUwJScgICAgICAgICAgICAvLyBjZW50ZXIgdmVydGljYWxseVxuICAgICwgbGVmdDogJzUwJScgICAgICAgICAgIC8vIGNlbnRlciBob3Jpem9udGFsbHlcbiAgICAsIHNoYWRvdzogZmFsc2UgICAgICAgICAvLyBXaGV0aGVyIHRvIHJlbmRlciBhIHNoYWRvd1xuICAgICwgaHdhY2NlbDogZmFsc2UgICAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiAobWlnaHQgYmUgYnVnZ3kpXG4gICAgLCBwb3NpdGlvbjogJ2Fic29sdXRlJyAgLy8gRWxlbWVudCBwb3NpdGlvbmluZ1xuICAgIH1cbiAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZvbycpXG4gICAgdmFyIHNwaW5uZXIgPSBuZXcgU3Bpbm5lcihvcHRzKS5zcGluKHRhcmdldClcbiAqL1xuOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXG4gIC8qIENvbW1vbkpTICovXG4gIGlmICh0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKVxuXG4gIC8qIEFNRCBtb2R1bGUgKi9cbiAgZWxzZSBpZiAodHJ1ZSkgIShfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18gPSAoZmFjdG9yeSksXG5cdFx0XHRcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKHR5cGVvZiBfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18gPT09ICdmdW5jdGlvbicgP1xuXHRcdFx0XHQoX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fLmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXywgZXhwb3J0cywgbW9kdWxlKSkgOlxuXHRcdFx0XHRfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18pLFxuXHRcdFx0XHRfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyAhPT0gdW5kZWZpbmVkICYmIChtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fKSlcblxuICAvKiBCcm93c2VyIGdsb2JhbCAqL1xuICBlbHNlIHJvb3QuU3Bpbm5lciA9IGZhY3RvcnkoKVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gIFwidXNlIHN0cmljdFwiXG5cbiAgdmFyIHByZWZpeGVzID0gWyd3ZWJraXQnLCAnTW96JywgJ21zJywgJ08nXSAvKiBWZW5kb3IgcHJlZml4ZXMgKi9cbiAgICAsIGFuaW1hdGlvbnMgPSB7fSAvKiBBbmltYXRpb24gcnVsZXMga2V5ZWQgYnkgdGhlaXIgbmFtZSAqL1xuICAgICwgdXNlQ3NzQW5pbWF0aW9ucyAvKiBXaGV0aGVyIHRvIHVzZSBDU1MgYW5pbWF0aW9ucyBvciBzZXRUaW1lb3V0ICovXG4gICAgLCBzaGVldCAvKiBBIHN0eWxlc2hlZXQgdG8gaG9sZCB0aGUgQGtleWZyYW1lIG9yIFZNTCBydWxlcy4gKi9cblxuICAvKipcbiAgICogVXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgZWxlbWVudHMuIElmIG5vIHRhZyBuYW1lIGlzIGdpdmVuLFxuICAgKiBhIERJViBpcyBjcmVhdGVkLiBPcHRpb25hbGx5IHByb3BlcnRpZXMgY2FuIGJlIHBhc3NlZC5cbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsICh0YWcsIHByb3ApIHtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyB8fCAnZGl2JylcbiAgICAgICwgblxuXG4gICAgZm9yIChuIGluIHByb3ApIGVsW25dID0gcHJvcFtuXVxuICAgIHJldHVybiBlbFxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgY2hpbGRyZW4gYW5kIHJldHVybnMgdGhlIHBhcmVudC5cbiAgICovXG4gIGZ1bmN0aW9uIGlucyAocGFyZW50IC8qIGNoaWxkMSwgY2hpbGQyLCAuLi4qLykge1xuICAgIGZvciAodmFyIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGFyZ3VtZW50c1tpXSlcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBvcGFjaXR5IGtleWZyYW1lIGFuaW1hdGlvbiBydWxlIGFuZCByZXR1cm5zIGl0cyBuYW1lLlxuICAgKiBTaW5jZSBtb3N0IG1vYmlsZSBXZWJraXRzIGhhdmUgdGltaW5nIGlzc3VlcyB3aXRoIGFuaW1hdGlvbi1kZWxheSxcbiAgICogd2UgY3JlYXRlIHNlcGFyYXRlIHJ1bGVzIGZvciBlYWNoIGxpbmUvc2VnbWVudC5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZEFuaW1hdGlvbiAoYWxwaGEsIHRyYWlsLCBpLCBsaW5lcykge1xuICAgIHZhciBuYW1lID0gWydvcGFjaXR5JywgdHJhaWwsIH5+KGFscGhhICogMTAwKSwgaSwgbGluZXNdLmpvaW4oJy0nKVxuICAgICAgLCBzdGFydCA9IDAuMDEgKyBpL2xpbmVzICogMTAwXG4gICAgICAsIHogPSBNYXRoLm1heCgxIC0gKDEtYWxwaGEpIC8gdHJhaWwgKiAoMTAwLXN0YXJ0KSwgYWxwaGEpXG4gICAgICAsIHByZWZpeCA9IHVzZUNzc0FuaW1hdGlvbnMuc3Vic3RyaW5nKDAsIHVzZUNzc0FuaW1hdGlvbnMuaW5kZXhPZignQW5pbWF0aW9uJykpLnRvTG93ZXJDYXNlKClcbiAgICAgICwgcHJlID0gcHJlZml4ICYmICctJyArIHByZWZpeCArICctJyB8fCAnJ1xuXG4gICAgaWYgKCFhbmltYXRpb25zW25hbWVdKSB7XG4gICAgICBzaGVldC5pbnNlcnRSdWxlKFxuICAgICAgICAnQCcgKyBwcmUgKyAna2V5ZnJhbWVzICcgKyBuYW1lICsgJ3snICtcbiAgICAgICAgJzAle29wYWNpdHk6JyArIHogKyAnfScgK1xuICAgICAgICBzdGFydCArICcle29wYWNpdHk6JyArIGFscGhhICsgJ30nICtcbiAgICAgICAgKHN0YXJ0KzAuMDEpICsgJyV7b3BhY2l0eToxfScgK1xuICAgICAgICAoc3RhcnQrdHJhaWwpICUgMTAwICsgJyV7b3BhY2l0eTonICsgYWxwaGEgKyAnfScgK1xuICAgICAgICAnMTAwJXtvcGFjaXR5OicgKyB6ICsgJ30nICtcbiAgICAgICAgJ30nLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpXG5cbiAgICAgIGFuaW1hdGlvbnNbbmFtZV0gPSAxXG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWVcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmllcyB2YXJpb3VzIHZlbmRvciBwcmVmaXhlcyBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgc3VwcG9ydGVkIHByb3BlcnR5LlxuICAgKi9cbiAgZnVuY3Rpb24gdmVuZG9yIChlbCwgcHJvcCkge1xuICAgIHZhciBzID0gZWwuc3R5bGVcbiAgICAgICwgcHBcbiAgICAgICwgaVxuXG4gICAgcHJvcCA9IHByb3AuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wLnNsaWNlKDEpXG4gICAgaWYgKHNbcHJvcF0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIHByb3BcbiAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBwID0gcHJlZml4ZXNbaV0rcHJvcFxuICAgICAgaWYgKHNbcHBdICE9PSB1bmRlZmluZWQpIHJldHVybiBwcFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG11bHRpcGxlIHN0eWxlIHByb3BlcnRpZXMgYXQgb25jZS5cbiAgICovXG4gIGZ1bmN0aW9uIGNzcyAoZWwsIHByb3ApIHtcbiAgICBmb3IgKHZhciBuIGluIHByb3ApIHtcbiAgICAgIGVsLnN0eWxlW3ZlbmRvcihlbCwgbikgfHwgbl0gPSBwcm9wW25dXG4gICAgfVxuXG4gICAgcmV0dXJuIGVsXG4gIH1cblxuICAvKipcbiAgICogRmlsbHMgaW4gZGVmYXVsdCB2YWx1ZXMuXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZSAob2JqKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZWYgPSBhcmd1bWVudHNbaV1cbiAgICAgIGZvciAodmFyIG4gaW4gZGVmKSB7XG4gICAgICAgIGlmIChvYmpbbl0gPT09IHVuZGVmaW5lZCkgb2JqW25dID0gZGVmW25dXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmpcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaW5lIGNvbG9yIGZyb20gdGhlIGdpdmVuIHN0cmluZyBvciBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGdldENvbG9yIChjb2xvciwgaWR4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjb2xvciA9PSAnc3RyaW5nJyA/IGNvbG9yIDogY29sb3JbaWR4ICUgY29sb3IubGVuZ3RoXVxuICB9XG5cbiAgLy8gQnVpbHQtaW4gZGVmYXVsdHNcblxuICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgbGluZXM6IDEyICAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgbGluZXMgdG8gZHJhd1xuICAsIGxlbmd0aDogNyAgICAgICAgICAgICAvLyBUaGUgbGVuZ3RoIG9mIGVhY2ggbGluZVxuICAsIHdpZHRoOiA1ICAgICAgICAgICAgICAvLyBUaGUgbGluZSB0aGlja25lc3NcbiAgLCByYWRpdXM6IDEwICAgICAgICAgICAgLy8gVGhlIHJhZGl1cyBvZiB0aGUgaW5uZXIgY2lyY2xlXG4gICwgc2NhbGU6IDEuMCAgICAgICAgICAgIC8vIFNjYWxlcyBvdmVyYWxsIHNpemUgb2YgdGhlIHNwaW5uZXJcbiAgLCBjb3JuZXJzOiAxICAgICAgICAgICAgLy8gUm91bmRuZXNzICgwLi4xKVxuICAsIGNvbG9yOiAnIzAwMCcgICAgICAgICAvLyAjcmdiIG9yICNycmdnYmJcbiAgLCBvcGFjaXR5OiAxLzQgICAgICAgICAgLy8gT3BhY2l0eSBvZiB0aGUgbGluZXNcbiAgLCByb3RhdGU6IDAgICAgICAgICAgICAgLy8gUm90YXRpb24gb2Zmc2V0XG4gICwgZGlyZWN0aW9uOiAxICAgICAgICAgIC8vIDE6IGNsb2Nrd2lzZSwgLTE6IGNvdW50ZXJjbG9ja3dpc2VcbiAgLCBzcGVlZDogMSAgICAgICAgICAgICAgLy8gUm91bmRzIHBlciBzZWNvbmRcbiAgLCB0cmFpbDogMTAwICAgICAgICAgICAgLy8gQWZ0ZXJnbG93IHBlcmNlbnRhZ2VcbiAgLCBmcHM6IDIwICAgICAgICAgICAgICAgLy8gRnJhbWVzIHBlciBzZWNvbmQgd2hlbiB1c2luZyBzZXRUaW1lb3V0KClcbiAgLCB6SW5kZXg6IDJlOSAgICAgICAgICAgLy8gVXNlIGEgaGlnaCB6LWluZGV4IGJ5IGRlZmF1bHRcbiAgLCBjbGFzc05hbWU6ICdzcGlubmVyJyAgLy8gQ1NTIGNsYXNzIHRvIGFzc2lnbiB0byB0aGUgZWxlbWVudFxuICAsIHRvcDogJzUwJScgICAgICAgICAgICAvLyBjZW50ZXIgdmVydGljYWxseVxuICAsIGxlZnQ6ICc1MCUnICAgICAgICAgICAvLyBjZW50ZXIgaG9yaXpvbnRhbGx5XG4gICwgc2hhZG93OiBmYWxzZSAgICAgICAgIC8vIFdoZXRoZXIgdG8gcmVuZGVyIGEgc2hhZG93XG4gICwgaHdhY2NlbDogZmFsc2UgICAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiAobWlnaHQgYmUgYnVnZ3kpXG4gICwgcG9zaXRpb246ICdhYnNvbHV0ZScgIC8vIEVsZW1lbnQgcG9zaXRpb25pbmdcbiAgfVxuXG4gIC8qKiBUaGUgY29uc3RydWN0b3IgKi9cbiAgZnVuY3Rpb24gU3Bpbm5lciAobykge1xuICAgIHRoaXMub3B0cyA9IG1lcmdlKG8gfHwge30sIFNwaW5uZXIuZGVmYXVsdHMsIGRlZmF1bHRzKVxuICB9XG5cbiAgLy8gR2xvYmFsIGRlZmF1bHRzIHRoYXQgb3ZlcnJpZGUgdGhlIGJ1aWx0LWluczpcbiAgU3Bpbm5lci5kZWZhdWx0cyA9IHt9XG5cbiAgbWVyZ2UoU3Bpbm5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBzcGlubmVyIHRvIHRoZSBnaXZlbiB0YXJnZXQgZWxlbWVudC4gSWYgdGhpcyBpbnN0YW5jZSBpcyBhbHJlYWR5XG4gICAgICogc3Bpbm5pbmcsIGl0IGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIGl0cyBwcmV2aW91cyB0YXJnZXQgYiBjYWxsaW5nXG4gICAgICogc3RvcCgpIGludGVybmFsbHkuXG4gICAgICovXG4gICAgc3BpbjogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgdGhpcy5zdG9wKClcblxuICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgICwgbyA9IHNlbGYub3B0c1xuICAgICAgICAsIGVsID0gc2VsZi5lbCA9IGNyZWF0ZUVsKG51bGwsIHtjbGFzc05hbWU6IG8uY2xhc3NOYW1lfSlcblxuICAgICAgY3NzKGVsLCB7XG4gICAgICAgIHBvc2l0aW9uOiBvLnBvc2l0aW9uXG4gICAgICAsIHdpZHRoOiAwXG4gICAgICAsIHpJbmRleDogby56SW5kZXhcbiAgICAgICwgbGVmdDogby5sZWZ0XG4gICAgICAsIHRvcDogby50b3BcbiAgICAgIH0pXG5cbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0Lmluc2VydEJlZm9yZShlbCwgdGFyZ2V0LmZpcnN0Q2hpbGQgfHwgbnVsbClcbiAgICAgIH1cblxuICAgICAgZWwuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3Byb2dyZXNzYmFyJylcbiAgICAgIHNlbGYubGluZXMoZWwsIHNlbGYub3B0cylcblxuICAgICAgaWYgKCF1c2VDc3NBbmltYXRpb25zKSB7XG4gICAgICAgIC8vIE5vIENTUyBhbmltYXRpb24gc3VwcG9ydCwgdXNlIHNldFRpbWVvdXQoKSBpbnN0ZWFkXG4gICAgICAgIHZhciBpID0gMFxuICAgICAgICAgICwgc3RhcnQgPSAoby5saW5lcyAtIDEpICogKDEgLSBvLmRpcmVjdGlvbikgLyAyXG4gICAgICAgICAgLCBhbHBoYVxuICAgICAgICAgICwgZnBzID0gby5mcHNcbiAgICAgICAgICAsIGYgPSBmcHMgLyBvLnNwZWVkXG4gICAgICAgICAgLCBvc3RlcCA9ICgxIC0gby5vcGFjaXR5KSAvIChmICogby50cmFpbCAvIDEwMClcbiAgICAgICAgICAsIGFzdGVwID0gZiAvIG8ubGluZXNcblxuICAgICAgICA7KGZ1bmN0aW9uIGFuaW0gKCkge1xuICAgICAgICAgIGkrK1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgby5saW5lczsgaisrKSB7XG4gICAgICAgICAgICBhbHBoYSA9IE1hdGgubWF4KDEgLSAoaSArIChvLmxpbmVzIC0gaikgKiBhc3RlcCkgJSBmICogb3N0ZXAsIG8ub3BhY2l0eSlcblxuICAgICAgICAgICAgc2VsZi5vcGFjaXR5KGVsLCBqICogby5kaXJlY3Rpb24gKyBzdGFydCwgYWxwaGEsIG8pXG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYudGltZW91dCA9IHNlbGYuZWwgJiYgc2V0VGltZW91dChhbmltLCB+figxMDAwIC8gZnBzKSlcbiAgICAgICAgfSkoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGZcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9wcyBhbmQgcmVtb3ZlcyB0aGUgU3Bpbm5lci5cbiAgICAgKi9cbiAgLCBzdG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmVsXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICAgICAgaWYgKGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpXG4gICAgICAgIHRoaXMuZWwgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgZHJhd3MgdGhlIGluZGl2aWR1YWwgbGluZXMuIFdpbGwgYmUgb3ZlcndyaXR0ZW5cbiAgICAgKiBpbiBWTUwgZmFsbGJhY2sgbW9kZSBiZWxvdy5cbiAgICAgKi9cbiAgLCBsaW5lczogZnVuY3Rpb24gKGVsLCBvKSB7XG4gICAgICB2YXIgaSA9IDBcbiAgICAgICAgLCBzdGFydCA9IChvLmxpbmVzIC0gMSkgKiAoMSAtIG8uZGlyZWN0aW9uKSAvIDJcbiAgICAgICAgLCBzZWdcblxuICAgICAgZnVuY3Rpb24gZmlsbCAoY29sb3IsIHNoYWRvdykge1xuICAgICAgICByZXR1cm4gY3NzKGNyZWF0ZUVsKCksIHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgICAgICAsIHdpZHRoOiBvLnNjYWxlICogKG8ubGVuZ3RoICsgby53aWR0aCkgKyAncHgnXG4gICAgICAgICwgaGVpZ2h0OiBvLnNjYWxlICogby53aWR0aCArICdweCdcbiAgICAgICAgLCBiYWNrZ3JvdW5kOiBjb2xvclxuICAgICAgICAsIGJveFNoYWRvdzogc2hhZG93XG4gICAgICAgICwgdHJhbnNmb3JtT3JpZ2luOiAnbGVmdCdcbiAgICAgICAgLCB0cmFuc2Zvcm06ICdyb3RhdGUoJyArIH5+KDM2MC9vLmxpbmVzKmkgKyBvLnJvdGF0ZSkgKyAnZGVnKSB0cmFuc2xhdGUoJyArIG8uc2NhbGUqby5yYWRpdXMgKyAncHgnICsgJywwKSdcbiAgICAgICAgLCBib3JkZXJSYWRpdXM6IChvLmNvcm5lcnMgKiBvLnNjYWxlICogby53aWR0aCA+PiAxKSArICdweCdcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZm9yICg7IGkgPCBvLmxpbmVzOyBpKyspIHtcbiAgICAgICAgc2VnID0gY3NzKGNyZWF0ZUVsKCksIHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgICAgICAsIHRvcDogMSArIH4oby5zY2FsZSAqIG8ud2lkdGggLyAyKSArICdweCdcbiAgICAgICAgLCB0cmFuc2Zvcm06IG8uaHdhY2NlbCA/ICd0cmFuc2xhdGUzZCgwLDAsMCknIDogJydcbiAgICAgICAgLCBvcGFjaXR5OiBvLm9wYWNpdHlcbiAgICAgICAgLCBhbmltYXRpb246IHVzZUNzc0FuaW1hdGlvbnMgJiYgYWRkQW5pbWF0aW9uKG8ub3BhY2l0eSwgby50cmFpbCwgc3RhcnQgKyBpICogby5kaXJlY3Rpb24sIG8ubGluZXMpICsgJyAnICsgMSAvIG8uc3BlZWQgKyAncyBsaW5lYXIgaW5maW5pdGUnXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKG8uc2hhZG93KSBpbnMoc2VnLCBjc3MoZmlsbCgnIzAwMCcsICcwIDAgNHB4ICMwMDAnKSwge3RvcDogJzJweCd9KSlcbiAgICAgICAgaW5zKGVsLCBpbnMoc2VnLCBmaWxsKGdldENvbG9yKG8uY29sb3IsIGkpLCAnMCAwIDFweCByZ2JhKDAsMCwwLC4xKScpKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIG1ldGhvZCB0aGF0IGFkanVzdHMgdGhlIG9wYWNpdHkgb2YgYSBzaW5nbGUgbGluZS5cbiAgICAgKiBXaWxsIGJlIG92ZXJ3cml0dGVuIGluIFZNTCBmYWxsYmFjayBtb2RlIGJlbG93LlxuICAgICAqL1xuICAsIG9wYWNpdHk6IGZ1bmN0aW9uIChlbCwgaSwgdmFsKSB7XG4gICAgICBpZiAoaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoKSBlbC5jaGlsZE5vZGVzW2ldLnN0eWxlLm9wYWNpdHkgPSB2YWxcbiAgICB9XG5cbiAgfSlcblxuXG4gIGZ1bmN0aW9uIGluaXRWTUwgKCkge1xuXG4gICAgLyogVXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgYSBWTUwgdGFnICovXG4gICAgZnVuY3Rpb24gdm1sICh0YWcsIGF0dHIpIHtcbiAgICAgIHJldHVybiBjcmVhdGVFbCgnPCcgKyB0YWcgKyAnIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWxcIiBjbGFzcz1cInNwaW4tdm1sXCI+JywgYXR0cilcbiAgICB9XG5cbiAgICAvLyBObyBDU1MgdHJhbnNmb3JtcyBidXQgVk1MIHN1cHBvcnQsIGFkZCBhIENTUyBydWxlIGZvciBWTUwgZWxlbWVudHM6XG4gICAgc2hlZXQuYWRkUnVsZSgnLnNwaW4tdm1sJywgJ2JlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpJylcblxuICAgIFNwaW5uZXIucHJvdG90eXBlLmxpbmVzID0gZnVuY3Rpb24gKGVsLCBvKSB7XG4gICAgICB2YXIgciA9IG8uc2NhbGUgKiAoby5sZW5ndGggKyBvLndpZHRoKVxuICAgICAgICAsIHMgPSBvLnNjYWxlICogMiAqIHJcblxuICAgICAgZnVuY3Rpb24gZ3JwICgpIHtcbiAgICAgICAgcmV0dXJuIGNzcyhcbiAgICAgICAgICB2bWwoJ2dyb3VwJywge1xuICAgICAgICAgICAgY29vcmRzaXplOiBzICsgJyAnICsgc1xuICAgICAgICAgICwgY29vcmRvcmlnaW46IC1yICsgJyAnICsgLXJcbiAgICAgICAgICB9KVxuICAgICAgICAsIHsgd2lkdGg6IHMsIGhlaWdodDogcyB9XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgdmFyIG1hcmdpbiA9IC0oby53aWR0aCArIG8ubGVuZ3RoKSAqIG8uc2NhbGUgKiAyICsgJ3B4J1xuICAgICAgICAsIGcgPSBjc3MoZ3JwKCksIHtwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiBtYXJnaW4sIGxlZnQ6IG1hcmdpbn0pXG4gICAgICAgICwgaVxuXG4gICAgICBmdW5jdGlvbiBzZWcgKGksIGR4LCBmaWx0ZXIpIHtcbiAgICAgICAgaW5zKFxuICAgICAgICAgIGdcbiAgICAgICAgLCBpbnMoXG4gICAgICAgICAgICBjc3MoZ3JwKCksIHtyb3RhdGlvbjogMzYwIC8gby5saW5lcyAqIGkgKyAnZGVnJywgbGVmdDogfn5keH0pXG4gICAgICAgICAgLCBpbnMoXG4gICAgICAgICAgICAgIGNzcyhcbiAgICAgICAgICAgICAgICB2bWwoJ3JvdW5kcmVjdCcsIHthcmNzaXplOiBvLmNvcm5lcnN9KVxuICAgICAgICAgICAgICAsIHsgd2lkdGg6IHJcbiAgICAgICAgICAgICAgICAsIGhlaWdodDogby5zY2FsZSAqIG8ud2lkdGhcbiAgICAgICAgICAgICAgICAsIGxlZnQ6IG8uc2NhbGUgKiBvLnJhZGl1c1xuICAgICAgICAgICAgICAgICwgdG9wOiAtby5zY2FsZSAqIG8ud2lkdGggPj4gMVxuICAgICAgICAgICAgICAgICwgZmlsdGVyOiBmaWx0ZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICwgdm1sKCdmaWxsJywge2NvbG9yOiBnZXRDb2xvcihvLmNvbG9yLCBpKSwgb3BhY2l0eTogby5vcGFjaXR5fSlcbiAgICAgICAgICAgICwgdm1sKCdzdHJva2UnLCB7b3BhY2l0eTogMH0pIC8vIHRyYW5zcGFyZW50IHN0cm9rZSB0byBmaXggY29sb3IgYmxlZWRpbmcgdXBvbiBvcGFjaXR5IGNoYW5nZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoby5zaGFkb3cpXG4gICAgICAgIGZvciAoaSA9IDE7IGkgPD0gby5saW5lczsgaSsrKSB7XG4gICAgICAgICAgc2VnKGksIC0yLCAncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJsdXIocGl4ZWxyYWRpdXM9MixtYWtlc2hhZG93PTEsc2hhZG93b3BhY2l0eT0uMyknKVxuICAgICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDE7IGkgPD0gby5saW5lczsgaSsrKSBzZWcoaSlcbiAgICAgIHJldHVybiBpbnMoZWwsIGcpXG4gICAgfVxuXG4gICAgU3Bpbm5lci5wcm90b3R5cGUub3BhY2l0eSA9IGZ1bmN0aW9uIChlbCwgaSwgdmFsLCBvKSB7XG4gICAgICB2YXIgYyA9IGVsLmZpcnN0Q2hpbGRcbiAgICAgIG8gPSBvLnNoYWRvdyAmJiBvLmxpbmVzIHx8IDBcbiAgICAgIGlmIChjICYmIGkgKyBvIDwgYy5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICBjID0gYy5jaGlsZE5vZGVzW2kgKyBvXTsgYyA9IGMgJiYgYy5maXJzdENoaWxkOyBjID0gYyAmJiBjLmZpcnN0Q2hpbGRcbiAgICAgICAgaWYgKGMpIGMub3BhY2l0eSA9IHZhbFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgc2hlZXQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGVsID0gY3JlYXRlRWwoJ3N0eWxlJywge3R5cGUgOiAndGV4dC9jc3MnfSlcbiAgICAgIGlucyhkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLCBlbClcbiAgICAgIHJldHVybiBlbC5zaGVldCB8fCBlbC5zdHlsZVNoZWV0XG4gICAgfSgpKVxuXG4gICAgdmFyIHByb2JlID0gY3NzKGNyZWF0ZUVsKCdncm91cCcpLCB7YmVoYXZpb3I6ICd1cmwoI2RlZmF1bHQjVk1MKSd9KVxuXG4gICAgaWYgKCF2ZW5kb3IocHJvYmUsICd0cmFuc2Zvcm0nKSAmJiBwcm9iZS5hZGopIGluaXRWTUwoKVxuICAgIGVsc2UgdXNlQ3NzQW5pbWF0aW9ucyA9IHZlbmRvcihwcm9iZSwgJ2FuaW1hdGlvbicpXG4gIH1cblxuICByZXR1cm4gU3Bpbm5lclxuXG59KSk7XG5cblxuLyoqKi8gfSksXG4vKiAxNjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVRQVJBSUFBQU9EbjdQLy8veUg1QkFFSEFBRUFMQUFBQUFBUkFCRUFBQUlxQklLcGFiM3YzRU15VkhXdFdabHVmMHphMFhGTktESmZDcTVpNUpwb21kVXhxS0xRVm1JbnF5b0FBRHM9XCJcblxuLyoqKi8gfSksXG4vKiAxNjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgaWYgKHRydWUpIHtcbiAgICAhKF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18gPSBbZXhwb3J0cywgbW9kdWxlXSwgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fID0gKGZhY3RvcnkpLFxuXHRcdFx0XHRfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9ICh0eXBlb2YgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fID09PSAnZnVuY3Rpb24nID9cblx0XHRcdFx0KF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXy5hcHBseShleHBvcnRzLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fKSkgOiBfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18pLFxuXHRcdFx0XHRfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyAhPT0gdW5kZWZpbmVkICYmIChtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZmFjdG9yeShleHBvcnRzLCBtb2R1bGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtb2QgPSB7XG4gICAgICBleHBvcnRzOiB7fVxuICAgIH07XG4gICAgZmFjdG9yeShtb2QuZXhwb3J0cywgbW9kKTtcbiAgICBnbG9iYWwuZmV0Y2hKc29ucCA9IG1vZC5leHBvcnRzO1xuICB9XG59KSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cywgbW9kdWxlKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgdGltZW91dDogNTAwMCxcbiAgICBqc29ucENhbGxiYWNrOiAnY2FsbGJhY2snLFxuICAgIGpzb25wQ2FsbGJhY2tGdW5jdGlvbjogbnVsbFxuICB9O1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlQ2FsbGJhY2tGdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ2pzb25wXycgKyBEYXRlLm5vdygpICsgJ18nICsgTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiAxMDAwMDApO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJGdW5jdGlvbihmdW5jdGlvbk5hbWUpIHtcbiAgICAvLyBJRTggdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIHlvdSB0cnkgdG8gZGVsZXRlIGEgcHJvcGVydHkgb24gd2luZG93XG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTgyNDIyOC83NTEwODlcbiAgICB0cnkge1xuICAgICAgZGVsZXRlIHdpbmRvd1tmdW5jdGlvbk5hbWVdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHdpbmRvd1tmdW5jdGlvbk5hbWVdID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVNjcmlwdChzY3JpcHRJZCkge1xuICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzY3JpcHRJZCk7XG4gICAgaWYgKHNjcmlwdCkge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZldGNoSnNvbnAoX3VybCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07XG5cbiAgICAvLyB0byBhdm9pZCBwYXJhbSByZWFzc2lnblxuICAgIHZhciB1cmwgPSBfdXJsO1xuICAgIHZhciB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0IHx8IGRlZmF1bHRPcHRpb25zLnRpbWVvdXQ7XG4gICAgdmFyIGpzb25wQ2FsbGJhY2sgPSBvcHRpb25zLmpzb25wQ2FsbGJhY2sgfHwgZGVmYXVsdE9wdGlvbnMuanNvbnBDYWxsYmFjaztcblxuICAgIHZhciB0aW1lb3V0SWQgPSB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGNhbGxiYWNrRnVuY3Rpb24gPSBvcHRpb25zLmpzb25wQ2FsbGJhY2tGdW5jdGlvbiB8fCBnZW5lcmF0ZUNhbGxiYWNrRnVuY3Rpb24oKTtcbiAgICAgIHZhciBzY3JpcHRJZCA9IGpzb25wQ2FsbGJhY2sgKyAnXycgKyBjYWxsYmFja0Z1bmN0aW9uO1xuXG4gICAgICB3aW5kb3dbY2FsbGJhY2tGdW5jdGlvbl0gPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgb2s6IHRydWUsXG4gICAgICAgICAgLy8ga2VlcCBjb25zaXN0ZW50IHdpdGggZmV0Y2ggQVBJXG4gICAgICAgICAganNvbjogZnVuY3Rpb24ganNvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRpbWVvdXRJZCkgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cbiAgICAgICAgcmVtb3ZlU2NyaXB0KHNjcmlwdElkKTtcblxuICAgICAgICBjbGVhckZ1bmN0aW9uKGNhbGxiYWNrRnVuY3Rpb24pO1xuICAgICAgfTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIHVzZXIgc2V0IHRoZWlyIG93biBwYXJhbXMsIGFuZCBpZiBub3QgYWRkIGEgPyB0byBzdGFydCBhIGxpc3Qgb2YgcGFyYW1zXG4gICAgICB1cmwgKz0gdXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJic7XG5cbiAgICAgIHZhciBqc29ucFNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAganNvbnBTY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLCAnJyArIHVybCArIGpzb25wQ2FsbGJhY2sgKyAnPScgKyBjYWxsYmFja0Z1bmN0aW9uKTtcbiAgICAgIGlmIChvcHRpb25zLmNoYXJzZXQpIHtcbiAgICAgICAganNvbnBTY3JpcHQuc2V0QXR0cmlidXRlKCdjaGFyc2V0Jywgb3B0aW9ucy5jaGFyc2V0KTtcbiAgICAgIH1cbiAgICAgIGpzb25wU2NyaXB0LmlkID0gc2NyaXB0SWQ7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKGpzb25wU2NyaXB0KTtcblxuICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0pTT05QIHJlcXVlc3QgdG8gJyArIF91cmwgKyAnIHRpbWVkIG91dCcpKTtcblxuICAgICAgICBjbGVhckZ1bmN0aW9uKGNhbGxiYWNrRnVuY3Rpb24pO1xuICAgICAgICByZW1vdmVTY3JpcHQoc2NyaXB0SWQpO1xuICAgICAgICB3aW5kb3dbY2FsbGJhY2tGdW5jdGlvbl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2xlYXJGdW5jdGlvbihjYWxsYmFja0Z1bmN0aW9uKTtcbiAgICAgICAgfTtcbiAgICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgICAvLyBDYXVnaHQgaWYgZ290IDQwNC81MDBcbiAgICAgIGpzb25wU2NyaXB0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0pTT05QIHJlcXVlc3QgdG8gJyArIF91cmwgKyAnIGZhaWxlZCcpKTtcblxuICAgICAgICBjbGVhckZ1bmN0aW9uKGNhbGxiYWNrRnVuY3Rpb24pO1xuICAgICAgICByZW1vdmVTY3JpcHQoc2NyaXB0SWQpO1xuICAgICAgICBpZiAodGltZW91dElkKSBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvLyBleHBvcnQgYXMgZ2xvYmFsIGZ1bmN0aW9uXG4gIC8qXG4gIGxldCBsb2NhbDtcbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbG9jYWwgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbG9jYWwgPSBzZWxmO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBsb2NhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICB9XG4gIH1cbiAgbG9jYWwuZmV0Y2hKc29ucCA9IGZldGNoSnNvbnA7XG4gICovXG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmZXRjaEpzb25wO1xufSk7XG5cbi8qKiovIH0pLFxuLyogMTYyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IG1ha2VXaWRnZXQ7XG5cbnZhciBfcmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcmVhY3REb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcblxudmFyIF91dGlsaXRpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcblxudmFyIF93aWRnZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Myk7XG5cbnZhciBfd2lkZ2V0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dpZGdldCk7XG5cbnZhciBfcGxhY2Vob2xkZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2NCk7XG5cbnZhciBfcGxhY2Vob2xkZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGxhY2Vob2xkZXIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIG1vZGU6ICdlbWJlZC13aWRnZXQnLFxuICBoaWRlRm9vdGVyOiBmYWxzZSxcbiAgaGlkZUhlYWRlcnM6IGZhbHNlLFxuICBoaWRlU2Nyb2xsYmFyczogZmFsc2UsXG4gIGRpc2FibGVTdWJtaXQ6IGZhbHNlLFxuICBvblN1Ym1pdDogX3V0aWxpdGllcy5ub29wXG59O1xuXG52YXIgcXVlcnlTdHJpbmdLZXlzID0ge1xuICBtb2RlOiAndHlwZWZvcm0tZW1iZWQnLFxuICBoaWRlRm9vdGVyOiAnZW1iZWQtaGlkZS1mb290ZXInLFxuICBoaWRlSGVhZGVyczogJ2VtYmVkLWhpZGUtaGVhZGVycycsXG4gIG9wYWNpdHk6ICdlbWJlZC1vcGFjaXR5JyxcbiAgZGlzYWJsZVN1Ym1pdDogJ19fZGFuZ2Vyb3VzLWRpc2FibGUtc3VibWlzc2lvbnMnXG59O1xuXG5mdW5jdGlvbiBtYWtlV2lkZ2V0KGVsZW1lbnQsIHVybCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gX2V4dGVuZHMoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgdmFyIHVybFdpdGhRdWVyeVN0cmluZyA9ICgwLCBfdXRpbGl0aWVzLmFwcGVuZFBhcmFtc1RvVXJsKSh1cmwsICgwLCBfdXRpbGl0aWVzLnJlcGxhY2VFeGlzdGluZ0tleXMpKG9wdGlvbnMsIHF1ZXJ5U3RyaW5nS2V5cykpO1xuXG4gIGlmICgoMCwgX3V0aWxpdGllcy5pc01vYmlsZSkobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcbiAgICAoMCwgX3V0aWxpdGllcy5lbnN1cmVNZXRhVmlld3BvcnQpKCk7XG4gICAgKDAsIF9yZWFjdERvbS5yZW5kZXIpKF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9wbGFjZWhvbGRlcjIuZGVmYXVsdCwge1xuICAgICAgdXJsOiB1cmxXaXRoUXVlcnlTdHJpbmcsXG4gICAgICBidXR0b25UZXh0OiBvcHRpb25zLmJ1dHRvblRleHQsXG4gICAgICBhdXRvT3Blbjogb3B0aW9ucy5hdXRvT3BlbixcbiAgICAgIG9uU3VibWl0OiBvcHRpb25zLm9uU3VibWl0XG4gICAgfSksIGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgICgwLCBfcmVhY3REb20ucmVuZGVyKShfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfd2lkZ2V0Mi5kZWZhdWx0LCB7IHVybDogdXJsV2l0aFF1ZXJ5U3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIH0pLCBlbGVtZW50KTtcbiAgfVxufVxuXG4vKioqLyB9KSxcbi8qIDE2MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX3N0eWxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xuXG52YXIgX3N0eWxlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHlsZXMpO1xuXG52YXIgX3Rpbnljb2xvciA9IF9fd2VicGFja19yZXF1aXJlX18oMTA3KTtcblxudmFyIF90aW55Y29sb3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdGlueWNvbG9yKTtcblxudmFyIF91dGlsaXRpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9pZnJhbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcblxudmFyIF9pZnJhbWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWZyYW1lKTtcblxudmFyIF9zcGlubmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7XG5cbnZhciBfc3Bpbm5lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zcGlubmVyKTtcblxudmFyIF9kYXRhU2VydmljZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzQpO1xuXG52YXIgX2RhdGFTZXJ2aWNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RhdGFTZXJ2aWNlKTtcblxudmFyIF9zdG9yZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzUpO1xuXG52YXIgX3N0b3JlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0b3JlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgREVCT1VOQ0VfV0FJVCA9IDIwMDtcbnZhciBUUkFOU1BBUkVOVCA9ICd0cmFuc3BhcmVudCc7XG5cbnZhciBXaWRnZXRXcmFwcGVyID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KSgnZGl2Jywge1xuICB0YXJnZXQ6ICdlMTJiYWVuNjAnXG59KSgnaGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7Jyk7XG5cbnZhciBJZnJhbWVXcmFwcGVyID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KSgnZGl2Jywge1xuICB0YXJnZXQ6ICdlMTJiYWVuNjEnXG59KSgnaGVpZ2h0OjEwMCU7dmlzaWJpbGl0eTonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5vcGVuID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG59LCAnOycpO1xuXG52YXIgaGlkZGVuU3Bpbm5lciA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlcy5jc3MpKCd0cmFuc2l0aW9uOnZpc2liaWxpdHkgMHMgMC4yNXMsb3BhY2l0eSAwLjI1cyBsaW5lYXI7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eTowOycpO1xuXG52YXIgU3Bpbm5lcldyYXBwZXIgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdkaXYnLCB7XG4gIHRhcmdldDogJ2UxMmJhZW42Midcbn0pKCd3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQtY29sb3I6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYmdDb2xvcjtcbn0sICc7JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAudmlzaWJsZSA/ICcnIDogaGlkZGVuU3Bpbm5lcjtcbn0sICc7Jyk7XG5cbnZhciBXaWRnZXQgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoV2lkZ2V0LCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBXaWRnZXQocHJvcHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV2lkZ2V0KTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChXaWRnZXQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihXaWRnZXQpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGZvcm06IHtcbiAgICAgICAgJ3ByaW1hcnktY29sb3InOiAnZmZmZmZmJyxcbiAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBUUkFOU1BBUkVOVFxuICAgICAgfSxcbiAgICAgIGlmcmFtZUxvYWRlZDogZmFsc2UsXG4gICAgICBzcGlubmVyVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzRm9ybVJlYWR5OiBmYWxzZSxcbiAgICAgIGlzSWZyYW1lRm9jdXNlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgX3RoaXMub25Gb3JtUmVhZHkgPSBfdGhpcy5vbkZvcm1SZWFkeS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbklmcmFtZUxvYWQgPSBfdGhpcy5vbklmcmFtZUxvYWQuYmluZChfdGhpcyk7XG4gICAgX3RoaXMuZm9jdXNJZnJhbWUgPSBfdGhpcy5mb2N1c0lmcmFtZS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5kZWJvdW5jZWRTY3JvbGwgPSAoMCwgX3V0aWxpdGllcy5kZWJvdW5jZSkoX3RoaXMuZm9jdXNJZnJhbWUsIERFQk9VTkNFX1dBSVQsIF90aGlzKTtcbiAgICBfdGhpcy5vbkZvcm1TdWJtaXQgPSBfdGhpcy5vbkZvcm1TdWJtaXQuYmluZChfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFdpZGdldCwgW3tcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHVpZCA9IF9kYXRhU2VydmljZTIuZGVmYXVsdC5nZXRVaWRGcm9tVVJMKHRoaXMucHJvcHMudXJsKTtcbiAgICAgIF9kYXRhU2VydmljZTIuZGVmYXVsdC5nZXRGb3JtRGF0YSh1aWQsIF91dGlsaXRpZXMuRE9NQUlOKS50aGVuKGZ1bmN0aW9uIChyZXNwKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3N0b3JlMi5kZWZhdWx0KSh1aWQsICcnLCBfdGhpczIucHJvcHMudXJsLCAnJywgcmVzcCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7IGZvcm06IGRhdGEuZm9ybSB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIF91dGlsaXRpZXMub25NZXNzYWdlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb3JtLXJlYWR5JywgdGhpcy5vbkZvcm1SZWFkeSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5kZWJvdW5jZWRTY3JvbGwpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Zvcm0tc3VibWl0JywgdGhpcy5vbkZvcm1TdWJtaXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIF91dGlsaXRpZXMub25NZXNzYWdlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb3JtLXJlYWR5JywgdGhpcy5vbkZvcm1SZWFkeSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5kZWJvdW5jZWRTY3JvbGwpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Zvcm0tc3VibWl0JywgdGhpcy5vbkZvcm1TdWJtaXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRm9ybVJlYWR5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Gb3JtUmVhZHkoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzRm9ybVJlYWR5OiB0cnVlXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5mb2N1c0lmcmFtZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25Gb3JtU3VibWl0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Gb3JtU3VibWl0KCkge1xuICAgICAgdmFyIG9uU3VibWl0ID0gdGhpcy5wcm9wcy5vcHRpb25zLm9uU3VibWl0O1xuXG4gICAgICBvblN1Ym1pdCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uSWZyYW1lTG9hZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uSWZyYW1lTG9hZCgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaWZyYW1lTG9hZGVkOiB0cnVlXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzNC5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBzcGlubmVyVmlzaWJsZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2ZvY3VzSWZyYW1lJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNJZnJhbWUoKSB7XG4gICAgICB2YXIgaWZyYW1lUmVmID0gdGhpcy5pZnJhbWUuaWZyYW1lUmVmO1xuXG5cbiAgICAgIGlmICghaWZyYW1lUmVmIHx8ICFpZnJhbWVSZWYuY29udGVudFdpbmRvdykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0lmcmFtZUluVmlld3BvcnQgPSAoMCwgX3V0aWxpdGllcy5pc0VsZW1lbnRJblZpZXdwb3J0KShpZnJhbWVSZWYpO1xuICAgICAgdmFyIGNhblBvc3RNZXNzYWdlID0gdGhpcy5zdGF0ZS5pc0Zvcm1SZWFkeSAmJiAhdGhpcy5zdGF0ZS5pc0lmcmFtZUZvY3VzZWQgJiYgaXNJZnJhbWVJblZpZXdwb3J0ICYmIGlmcmFtZVJlZi5jb250ZW50V2luZG93ICE9IG51bGw7XG5cbiAgICAgIGlmIChjYW5Qb3N0TWVzc2FnZSkge1xuICAgICAgICBpZnJhbWVSZWYuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSgnZW1iZWQtZm9jdXMnLCAnKicpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc0lmcmFtZUZvY3VzZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBfc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGZvcm0gPSBfc3RhdGUuZm9ybSxcbiAgICAgICAgICBpZnJhbWVMb2FkZWQgPSBfc3RhdGUuaWZyYW1lTG9hZGVkLFxuICAgICAgICAgIHNwaW5uZXJWaXNpYmxlID0gX3N0YXRlLnNwaW5uZXJWaXNpYmxlO1xuXG5cbiAgICAgIHZhciBiZ0NvbG9yID0gdm9pZCAwO1xuICAgICAgaWYgKGZvcm1bJ2JhY2tncm91bmQtY29sb3InXSAhPT0gVFJBTlNQQVJFTlQpIHtcbiAgICAgICAgYmdDb2xvciA9ICgwLCBfdGlueWNvbG9yMi5kZWZhdWx0KSgnIycgKyBmb3JtWydiYWNrZ3JvdW5kLWNvbG9yJ10pLnNldEFscGhhKHRoaXMucHJvcHMub3B0aW9ucy5vcGFjaXR5IC8gMTAwKS50b1JnYlN0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmdDb2xvciA9ICcjJyArIGZvcm1bJ2JhY2tncm91bmQtY29sb3InXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNwaW5uZXJDb25maWcgPSB7XG4gICAgICAgIGNvbG9yOiAnIycgKyBmb3JtWydwcmltYXJ5LWNvbG9yJ11cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgV2lkZ2V0V3JhcHBlcixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgU3Bpbm5lcldyYXBwZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmlzaWJsZTogc3Bpbm5lclZpc2libGUsXG4gICAgICAgICAgICBiZ0NvbG9yOiBiZ0NvbG9yIH0sXG4gICAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX3NwaW5uZXIyLmRlZmF1bHQsIHtcbiAgICAgICAgICAgIGNvbmZpZzogc3Bpbm5lckNvbmZpZyxcbiAgICAgICAgICAgIHN0b3BwZWQ6IGlmcmFtZUxvYWRlZFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIElmcmFtZVdyYXBwZXIsXG4gICAgICAgICAgeyBvcGVuOiAhc3Bpbm5lclZpc2libGUgfSxcbiAgICAgICAgICBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfaWZyYW1lMi5kZWZhdWx0LCB7XG4gICAgICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgICAgIF90aGlzNS5pZnJhbWUgPSBub2RlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgIGZyYW1lQm9yZGVyOiAnMCcsXG4gICAgICAgICAgICBzcmM6IHRoaXMucHJvcHMudXJsLFxuICAgICAgICAgICAgb25Mb2FkOiB0aGlzLm9uSWZyYW1lTG9hZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFdpZGdldDtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cbldpZGdldC5wcm9wVHlwZXMgPSB7XG4gIHVybDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIG9wdGlvbnM6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0XG59O1xuXG5XaWRnZXQuZGVmYXVsdFByb3BzID0ge1xuICBvcHRpb25zOiB7fVxufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gV2lkZ2V0O1xuXG4vKioqLyB9KSxcbi8qIDE2NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX3N0eWxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xuXG52YXIgX3N0eWxlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHlsZXMpO1xuXG52YXIgX21vYmlsZU1vZGFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDYpO1xuXG52YXIgX21vYmlsZU1vZGFsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21vYmlsZU1vZGFsKTtcblxudmFyIF9zcGlubmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7XG5cbnZhciBfc3Bpbm5lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zcGlubmVyKTtcblxudmFyIF9jcmVhdGVQYWxldHRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjUpO1xuXG52YXIgX2NyZWF0ZVBhbGV0dGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlUGFsZXR0ZSk7XG5cbnZhciBfd2ViZm9udGxvYWRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTY2KTtcblxudmFyIF93ZWJmb250bG9hZGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dlYmZvbnRsb2FkZXIpO1xuXG52YXIgX2RhdGFTZXJ2aWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XG5cbnZhciBfZGF0YVNlcnZpY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGF0YVNlcnZpY2UpO1xuXG52YXIgX3N0b3JlMiA9IF9fd2VicGFja19yZXF1aXJlX18oNzUpO1xuXG52YXIgX3N0b3JlMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0b3JlMik7XG5cbnZhciBfdXRpbGl0aWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIFRZUEUgPSAnd2lkZ2V0JztcblxudmFyIFdyYXBwZXIgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdkaXYnLCB7XG4gIHRhcmdldDogJ2V1eGc2bjkwJ1xufSkoJ3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuaXNCYWNrZ3JvdW5kQnJpZ2h0ID8gJ3doaXRlJyA6ICdibGFjayc7XG59LCAnOycpO1xuXG52YXIgVGl0bGUgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdkaXYnLCB7XG4gIHRhcmdldDogJ2V1eGc2bjkxJ1xufSkoJ3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKDUwJSAtIDUwcHgpO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7ei1pbmRleDoyO2xpbmUtaGVpZ2h0OjE7Y29sb3I6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuY29sb3IgfHwgJyNGRkYnO1xufSwgJztmb250LWZhbWlseTonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5mb250ID8gJ1wiJyArIHAuZm9udCArICdcIiwnIDogJyc7XG59LCAnIFwiU291cmNlIFNhbnMgUHJvXCIsc2Fucy1zZXJpZjtmb250LXNpemU6MzBweDtAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NjAwcHgpe2ZvbnQtc2l6ZTo2MHB4O30nKTtcblxudmFyIEJ1dHRvbiA9IC8qI19fUFVSRV9fKi8oMCwgX3N0eWxlczIuZGVmYXVsdCkoJ2J1dHRvbicsIHtcbiAgdGFyZ2V0OiAnZXV4ZzZuOTInXG59KSgncG9zaXRpb246YWJzb2x1dGU7dG9wOmF1dG87Ym90dG9tOjIwcHg7bGVmdDoyMHB4O3dpZHRoOmNhbGMoMTAwJSAtIDQwcHgpO2ZvbnQtc2l6ZTozMHB4O3otaW5kZXg6NTtkaXNwbGF5OmJsb2NrO2JvcmRlci1yYWRpdXM6M3B4O291dGxpbmU6bm9uZTtoZWlnaHQ6NjFweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2ZvbnQtd2VpZ2h0OmJvbGQ7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciBlYXNlLW91dCAxMDBtcyAwbXM7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cGFkZGluZy1sZWZ0OjEycHg7cGFkZGluZy1yaWdodDoxMnB4O2JhY2tncm91bmQtY29sb3I6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYmFja2dyb3VuZENvbG9yIHx8ICcjYmJiJztcbn0sICc7Y29sb3I6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuY29sb3IgfHwgJ3JnYmEoMCwgMCwgMCwgMC44KSc7XG59LCAnO2JvcmRlcjoxcHggc29saWQgJywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYm9yZGVyQ29sb3IgfHwgJyMzMzMnO1xufSwgJztmb250LWZhbWlseTonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5mb250ID8gJ1wiJyArIHAuZm9udCArICdcIiwnIDogJyc7XG59LCAnIFwiU291cmNlIFNhbnMgUHJvXCIsc2Fucy1zZXJpZjsmOmFjdGl2ZXtib3gtc2hhZG93Omluc2V0IDAgMnB4IDFweCByZ2JhKDAsMCwwLDAuNCksaW5zZXQgIzAwMDAwMCAwIDAgMjEwcHggLTEwMHB4O30nKTtcblxudmFyIEJhY2tncm91bmQgPSAvKiNfX1BVUkVfXyovKDAsIF9zdHlsZXMyLmRlZmF1bHQpKCdkaXYnLCB7XG4gIHRhcmdldDogJ2V1eGc2bjkzJ1xufSkoJ3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTtsZWZ0OjA7cmlnaHQ6MDt0b3A6MDtib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOicsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLmJhY2tncm91bmRDb2xvciB8fCAndHJhbnNwYXJlbnQnO1xufSwgJztiYWNrZ3JvdW5kLWltYWdlOicsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLmltYWdlID8gJ3VybCgnICsgcC5pbWFnZSArICcpJyA6ICdub25lJztcbn0sICc7YmFja2dyb3VuZC1yZXBlYXQ6JywgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuYmFja2dyb3VuZFJlcGVhdDtcbn0sICc7b3BhY2l0eTonLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5pbWFnZSA/IDEgLSBwLmJyaWdodG5lc3MgOiAxO1xufSwgJzsnKTtcblxudmFyIFNwaW5uZXJXcmFwcGVyID0gLyojX19QVVJFX18qLygwLCBfc3R5bGVzMi5kZWZhdWx0KSgnZGl2Jywge1xuICB0YXJnZXQ6ICdldXhnNm45NCdcbn0pKCd3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Jyk7XG5cbnZhciBQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhQbGFjZWhvbGRlciwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUGxhY2Vob2xkZXIocHJvcHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGxhY2Vob2xkZXIpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFBsYWNlaG9sZGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUGxhY2Vob2xkZXIpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIG9wZW46ICEhX3RoaXMucHJvcHMuYXV0b09wZW4sXG4gICAgICBmb3JtOiB7XG4gICAgICAgIG5hbWU6ICdUeXBlZm9ybScsXG4gICAgICAgICdmb250LWdvb2dsZSc6ICdzYW5zLXNlcmlmJyxcbiAgICAgICAgJ3ByaW1hcnktY29sb3InOiAnIzIyMicsXG4gICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJzogJycsXG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNEREQnLFxuICAgICAgICAnYmFja2dyb3VuZC1yZXBlYXQnOiAnJyxcbiAgICAgICAgJ2J1dHRvbi1jb2xvcic6ICc0RkIwQUEnLFxuICAgICAgICAnYmFja2dyb3VuZC1icmlnaHRuZXNzJzogMC43MlxuICAgICAgfSxcbiAgICAgIHRoZW1lTG9hZGVkOiBmYWxzZVxuICAgIH07XG5cbiAgICBfdGhpcy5vcGVuID0gX3RoaXMub3Blbi5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5jbG9zZSA9IF90aGlzLmNsb3NlLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQbGFjZWhvbGRlciwgW3tcbiAgICBrZXk6ICdsb2FkR29vZ2xlRm9udCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRHb29nbGVGb250KGZvcm0pIHtcbiAgICAgIGlmIChmb3JtWydmb250LWdvb2dsZSddKSB7XG4gICAgICAgIF93ZWJmb250bG9hZGVyMi5kZWZhdWx0LmxvYWQoe1xuICAgICAgICAgIGdvb2dsZToge1xuICAgICAgICAgICAgZmFtaWxpZXM6IFtmb3JtWydmb250LWdvb2dsZSddXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciB1aWQgPSBfZGF0YVNlcnZpY2UyLmRlZmF1bHQuZ2V0VWlkRnJvbVVSTCh0aGlzLnByb3BzLnVybCk7XG5cbiAgICAgIF9kYXRhU2VydmljZTIuZGVmYXVsdC5nZXRGb3JtRGF0YSh1aWQsIF91dGlsaXRpZXMuRE9NQUlOKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHZhciBfc3RvcmUgPSAoMCwgX3N0b3JlMy5kZWZhdWx0KSh1aWQsIFRZUEUsIF90aGlzMi5wcm9wcy51cmwsIF90aGlzMi5wcm9wcy5idXR0b25UZXh0LCBkYXRhKSxcbiAgICAgICAgICAgIGZvcm0gPSBfc3RvcmUuZm9ybTtcblxuICAgICAgICBfdGhpczIubG9hZEdvb2dsZUZvbnQoZm9ybSk7XG4gICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7IGZvcm06IGZvcm0sIHRoZW1lTG9hZGVkOiB0cnVlIH0pO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLnNldFN0YXRlKHsgdGhlbWVMb2FkZWQ6IHRydWUgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvcGVuJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb3BlbigpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuOiB0cnVlIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Nsb3NlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgb3BlbjogZmFsc2UgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF9zdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgZm9ybSA9IF9zdGF0ZS5mb3JtLFxuICAgICAgICAgIHRoZW1lTG9hZGVkID0gX3N0YXRlLnRoZW1lTG9hZGVkO1xuXG4gICAgICB2YXIgYnV0dG9uQ29sb3JzID0gKDAsIF9jcmVhdGVQYWxldHRlMi5kZWZhdWx0KSgnIycgKyBmb3JtWydidXR0b24tY29sb3InXSk7XG4gICAgICB2YXIgZm9udEZhbWlseSA9IGZvcm1bJ2ZvbnQtZ29vZ2xlJ10uc3BsaXQoJzonKVswXS5zcGxpdCgnKycpLmpvaW4oJyAnKTtcbiAgICAgIHZhciBidXR0b25UZXh0ID0gdGhpcy5wcm9wcy5idXR0b25UZXh0ID8gdGhpcy5wcm9wcy5idXR0b25UZXh0IDogJ1N0YXJ0JztcblxuICAgICAgaWYgKCF0aGVtZUxvYWRlZCkge1xuICAgICAgICB2YXIgc3Bpbm5lckNvbmZpZyA9IHtcbiAgICAgICAgICBjb2xvcjogJyM3YjdiN2InLFxuICAgICAgICAgIGZhZGVDb2xvcjogJyNmZmZmZmYnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIFNwaW5uZXJXcmFwcGVyLFxuICAgICAgICAgIHsgdmlzaWJsZTogdHJ1ZSwgYmdDb2xvcjogJ3RyYW5zcGFyZW50JyB9LFxuICAgICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9zcGlubmVyMi5kZWZhdWx0LCB7IGNvbmZpZzogc3Bpbm5lckNvbmZpZyB9KVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFdyYXBwZXIsXG4gICAgICAgIHsgaXNCYWNrZ3JvdW5kQnJpZ2h0OiBmb3JtWydiYWNrZ3JvdW5kLWJyaWdodG5lc3MnXSA+PSAwIH0sXG4gICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9tb2JpbGVNb2RhbDIuZGVmYXVsdCwge1xuICAgICAgICAgIHVybDogdGhpcy5wcm9wcy51cmwsXG4gICAgICAgICAgb3BlbjogdGhpcy5zdGF0ZS5vcGVuLFxuICAgICAgICAgIG9uQ2xvc2U6IHRoaXMuY2xvc2UsXG4gICAgICAgICAgb25TdWJtaXQ6IHRoaXMucHJvcHMub25TdWJtaXQsXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIycgKyBmb3JtWydiYWNrZ3JvdW5kLWNvbG9yJ10sXG4gICAgICAgICAgYnV0dG9uQ29sb3I6ICcjJyArIGZvcm1bJ2J1dHRvbi1jb2xvciddXG4gICAgICAgIH0pLFxuICAgICAgICBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBUaXRsZSxcbiAgICAgICAgICB7IGNvbG9yOiAnIycgKyBmb3JtWydwcmltYXJ5LWNvbG9yJ10sIGZvbnQ6IGZvbnRGYW1pbHkgfSxcbiAgICAgICAgICBmb3JtLm5hbWVcbiAgICAgICAgKSxcbiAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgQnV0dG9uLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICdkYXRhLXFhJzogJ3N0YXJ0LWJ1dHRvbicsXG4gICAgICAgICAgICBjb2xvcjogYnV0dG9uQ29sb3JzLnRleHQsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJ1dHRvbkNvbG9ycy5iYWNrZ3JvdW5kLFxuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGJ1dHRvbkNvbG9ycy5ib3JkZXIsXG4gICAgICAgICAgICBmb250OiBmb250RmFtaWx5LFxuICAgICAgICAgICAgb25DbGljazogdGhpcy5vcGVuLFxuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbidcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJ1dHRvblRleHRcbiAgICAgICAgKSxcbiAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQmFja2dyb3VuZCwge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyMnICsgZm9ybVsnYmFja2dyb3VuZC1jb2xvciddLFxuICAgICAgICAgIGltYWdlOiBmb3JtWydiYWNrZ3JvdW5kLWltYWdlJ10sXG4gICAgICAgICAgYnJpZ2h0bmVzczogTWF0aC5hYnMoZm9ybVsnYmFja2dyb3VuZC1icmlnaHRuZXNzJ10pLFxuICAgICAgICAgIGJhY2tncm91bmRSZXBlYXQ6IGZvcm1bJ2JhY2tncm91bmQtcmVwZWF0J11cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBsYWNlaG9sZGVyO1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuUGxhY2Vob2xkZXIucHJvcFR5cGVzID0ge1xuICB1cmw6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuICBidXR0b25UZXh0OiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgYXV0b09wZW46IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgb25TdWJtaXQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuY1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUGxhY2Vob2xkZXI7XG5cbi8qKiovIH0pLFxuLyogMTY1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdGlueWNvbG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpO1xuXG52YXIgX3Rpbnljb2xvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90aW55Y29sb3IpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgY29sb3JhdGVCdXR0b24gPSBmdW5jdGlvbiBjb2xvcmF0ZUJ1dHRvbihidXR0b25IZXgpIHtcbiAgdmFyIGJ1dHRvbiA9ICgwLCBfdGlueWNvbG9yMi5kZWZhdWx0KShidXR0b25IZXgpLnRvSHN2KCk7XG5cbiAgdmFyIHRleHRTYXR1cmF0aW9uID0gMSAqIE1hdGgucG93KGJ1dHRvbi5zLCAwLjEpIC0gMyAqIE1hdGgucG93KGJ1dHRvbi5zLCAxKSArIDIgKiBNYXRoLnBvdyhidXR0b24ucywgMS4zKTtcbiAgdmFyIHRleHRCcmlnaHRuZXNzID0gdm9pZCAwO1xuXG4gIGlmIChidXR0b24udiA+IDAuNSArIE1hdGgucG93KGJ1dHRvbi5zLCAxLjYpICogMC41KSB7XG4gICAgdGV4dEJyaWdodG5lc3MgPSBNYXRoLm1pbigwLjEgKyBidXR0b24udiAvIDQgLSB0ZXh0U2F0dXJhdGlvbiAvIDggLSBidXR0b24ucyAvIDUsIDAuMjUpO1xuICAgIHRleHRCcmlnaHRuZXNzID0gTWF0aC5tYXgoMC4wNSwgdGV4dEJyaWdodG5lc3MpO1xuICB9IGVsc2Uge1xuICAgIHRleHRCcmlnaHRuZXNzID0gTWF0aC5tYXgoMC45IC0gKDEgLSBidXR0b24udikgLyA0ICsgdGV4dFNhdHVyYXRpb24gLyA4ICsgYnV0dG9uLnMgLyA1LCAwLjc1KTtcbiAgICB0ZXh0QnJpZ2h0bmVzcyA9IE1hdGgubWluKDAuOTUsIHRleHRCcmlnaHRuZXNzKTtcbiAgICB0ZXh0U2F0dXJhdGlvbiA9IHRleHRTYXR1cmF0aW9uIC8gMjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGV4dDogKDAsIF90aW55Y29sb3IyLmRlZmF1bHQpKCdoc3ZhKCcgKyBidXR0b24uaCArICcsJyArIE1hdGgubWF4KHRleHRTYXR1cmF0aW9uLCAwKSArICcsJyArIHRleHRCcmlnaHRuZXNzICsgJywwLjkpJykudG9SZ2JTdHJpbmcoKSxcbiAgICBiYWNrZ3JvdW5kOiAoMCwgX3Rpbnljb2xvcjIuZGVmYXVsdCkoJ2hzdmEoJyArIGJ1dHRvbi5oICsgJywnICsgYnV0dG9uLnMgKyAnLCcgKyBidXR0b24udiArICcsMSknKS50b1JnYlN0cmluZygpLFxuICAgIGJvcmRlcjogKDAsIF90aW55Y29sb3IyLmRlZmF1bHQpKCdoc3YoJyArIGJ1dHRvbi5oICsgJywnICsgTWF0aC5taW4oYnV0dG9uLnMgKiA1LCAxKSArICcsJyArIGJ1dHRvbi52IC8gMiArICcpJykudG9SZ2JTdHJpbmcoKVxuICB9O1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gY29sb3JhdGVCdXR0b247XG5cbi8qKiovIH0pLFxuLyogMTY2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXzsvKiBXZWIgRm9udCBMb2FkZXIgdjEuNi4yOCAtIChjKSBBZG9iZSBTeXN0ZW1zLCBHb29nbGUuIExpY2Vuc2U6IEFwYWNoZSAyLjAgKi8oZnVuY3Rpb24oKXtmdW5jdGlvbiBhYShhLGIsYyl7cmV0dXJuIGEuY2FsbC5hcHBseShhLmJpbmQsYXJndW1lbnRzKX1mdW5jdGlvbiBiYShhLGIsYyl7aWYoIWEpdGhyb3cgRXJyb3IoKTtpZigyPGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGMsZCk7cmV0dXJuIGEuYXBwbHkoYixjKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYixhcmd1bWVudHMpfX1mdW5jdGlvbiBwKGEsYixjKXtwPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiYtMSE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQudG9TdHJpbmcoKS5pbmRleE9mKFwibmF0aXZlIGNvZGVcIik/YWE6YmE7cmV0dXJuIHAuYXBwbHkobnVsbCxhcmd1bWVudHMpfXZhciBxPURhdGUubm93fHxmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX07ZnVuY3Rpb24gY2EoYSxiKXt0aGlzLmE9YTt0aGlzLm89Ynx8YTt0aGlzLmM9dGhpcy5vLmRvY3VtZW50fXZhciBkYT0hIXdpbmRvdy5Gb250RmFjZTtmdW5jdGlvbiB0KGEsYixjLGQpe2I9YS5jLmNyZWF0ZUVsZW1lbnQoYik7aWYoYylmb3IodmFyIGUgaW4gYyljLmhhc093blByb3BlcnR5KGUpJiYoXCJzdHlsZVwiPT1lP2Iuc3R5bGUuY3NzVGV4dD1jW2VdOmIuc2V0QXR0cmlidXRlKGUsY1tlXSkpO2QmJmIuYXBwZW5kQ2hpbGQoYS5jLmNyZWF0ZVRleHROb2RlKGQpKTtyZXR1cm4gYn1mdW5jdGlvbiB1KGEsYixjKXthPWEuYy5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXTthfHwoYT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO2EuaW5zZXJ0QmVmb3JlKGMsYS5sYXN0Q2hpbGQpfWZ1bmN0aW9uIHYoYSl7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSl9XG5mdW5jdGlvbiB3KGEsYixjKXtiPWJ8fFtdO2M9Y3x8W107Zm9yKHZhciBkPWEuY2xhc3NOYW1lLnNwbGl0KC9cXHMrLyksZT0wO2U8Yi5sZW5ndGg7ZSs9MSl7Zm9yKHZhciBmPSExLGc9MDtnPGQubGVuZ3RoO2crPTEpaWYoYltlXT09PWRbZ10pe2Y9ITA7YnJlYWt9Znx8ZC5wdXNoKGJbZV0pfWI9W107Zm9yKGU9MDtlPGQubGVuZ3RoO2UrPTEpe2Y9ITE7Zm9yKGc9MDtnPGMubGVuZ3RoO2crPTEpaWYoZFtlXT09PWNbZ10pe2Y9ITA7YnJlYWt9Znx8Yi5wdXNoKGRbZV0pfWEuY2xhc3NOYW1lPWIuam9pbihcIiBcIikucmVwbGFjZSgvXFxzKy9nLFwiIFwiKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC8sXCJcIil9ZnVuY3Rpb24geShhLGIpe2Zvcih2YXIgYz1hLmNsYXNzTmFtZS5zcGxpdCgvXFxzKy8pLGQ9MCxlPWMubGVuZ3RoO2Q8ZTtkKyspaWYoY1tkXT09YilyZXR1cm4hMDtyZXR1cm4hMX1cbmZ1bmN0aW9uIGVhKGEpe3JldHVybiBhLm8ubG9jYXRpb24uaG9zdG5hbWV8fGEuYS5sb2NhdGlvbi5ob3N0bmFtZX1mdW5jdGlvbiB6KGEsYixjKXtmdW5jdGlvbiBkKCl7bSYmZSYmZiYmKG0oZyksbT1udWxsKX1iPXQoYSxcImxpbmtcIix7cmVsOlwic3R5bGVzaGVldFwiLGhyZWY6YixtZWRpYTpcImFsbFwifSk7dmFyIGU9ITEsZj0hMCxnPW51bGwsbT1jfHxudWxsO2RhPyhiLm9ubG9hZD1mdW5jdGlvbigpe2U9ITA7ZCgpfSxiLm9uZXJyb3I9ZnVuY3Rpb24oKXtlPSEwO2c9RXJyb3IoXCJTdHlsZXNoZWV0IGZhaWxlZCB0byBsb2FkXCIpO2QoKX0pOnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlPSEwO2QoKX0sMCk7dShhLFwiaGVhZFwiLGIpfVxuZnVuY3Rpb24gQShhLGIsYyxkKXt2YXIgZT1hLmMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdO2lmKGUpe3ZhciBmPXQoYSxcInNjcmlwdFwiLHtzcmM6Yn0pLGc9ITE7Zi5vbmxvYWQ9Zi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtnfHx0aGlzLnJlYWR5U3RhdGUmJlwibG9hZGVkXCIhPXRoaXMucmVhZHlTdGF0ZSYmXCJjb21wbGV0ZVwiIT10aGlzLnJlYWR5U3RhdGV8fChnPSEwLGMmJmMobnVsbCksZi5vbmxvYWQ9Zi5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxcIkhFQURcIj09Zi5wYXJlbnROb2RlLnRhZ05hbWUmJmUucmVtb3ZlQ2hpbGQoZikpfTtlLmFwcGVuZENoaWxkKGYpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtnfHwoZz0hMCxjJiZjKEVycm9yKFwiU2NyaXB0IGxvYWQgdGltZW91dFwiKSkpfSxkfHw1RTMpO3JldHVybiBmfXJldHVybiBudWxsfTtmdW5jdGlvbiBCKCl7dGhpcy5hPTA7dGhpcy5jPW51bGx9ZnVuY3Rpb24gQyhhKXthLmErKztyZXR1cm4gZnVuY3Rpb24oKXthLmEtLTtEKGEpfX1mdW5jdGlvbiBFKGEsYil7YS5jPWI7RChhKX1mdW5jdGlvbiBEKGEpezA9PWEuYSYmYS5jJiYoYS5jKCksYS5jPW51bGwpfTtmdW5jdGlvbiBGKGEpe3RoaXMuYT1hfHxcIi1cIn1GLnByb3RvdHlwZS5jPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliLnB1c2goYXJndW1lbnRzW2NdLnJlcGxhY2UoL1tcXFdfXSsvZyxcIlwiKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gYi5qb2luKHRoaXMuYSl9O2Z1bmN0aW9uIEcoYSxiKXt0aGlzLmM9YTt0aGlzLmY9NDt0aGlzLmE9XCJuXCI7dmFyIGM9KGJ8fFwibjRcIikubWF0Y2goL14oW25pb10pKFsxLTldKSQvaSk7YyYmKHRoaXMuYT1jWzFdLHRoaXMuZj1wYXJzZUludChjWzJdLDEwKSl9ZnVuY3Rpb24gZmEoYSl7cmV0dXJuIEgoYSkrXCIgXCIrKGEuZitcIjAwXCIpK1wiIDMwMHB4IFwiK0koYS5jKX1mdW5jdGlvbiBJKGEpe3ZhciBiPVtdO2E9YS5zcGxpdCgvLFxccyovKTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXS5yZXBsYWNlKC9bJ1wiXS9nLFwiXCIpOy0xIT1kLmluZGV4T2YoXCIgXCIpfHwvXlxcZC8udGVzdChkKT9iLnB1c2goXCInXCIrZCtcIidcIik6Yi5wdXNoKGQpfXJldHVybiBiLmpvaW4oXCIsXCIpfWZ1bmN0aW9uIEooYSl7cmV0dXJuIGEuYSthLmZ9ZnVuY3Rpb24gSChhKXt2YXIgYj1cIm5vcm1hbFwiO1wib1wiPT09YS5hP2I9XCJvYmxpcXVlXCI6XCJpXCI9PT1hLmEmJihiPVwiaXRhbGljXCIpO3JldHVybiBifVxuZnVuY3Rpb24gZ2EoYSl7dmFyIGI9NCxjPVwiblwiLGQ9bnVsbDthJiYoKGQ9YS5tYXRjaCgvKG5vcm1hbHxvYmxpcXVlfGl0YWxpYykvaSkpJiZkWzFdJiYoYz1kWzFdLnN1YnN0cigwLDEpLnRvTG93ZXJDYXNlKCkpLChkPWEubWF0Y2goLyhbMS05XTAwfG5vcm1hbHxib2xkKS9pKSkmJmRbMV0mJigvYm9sZC9pLnRlc3QoZFsxXSk/Yj03Oi9bMS05XTAwLy50ZXN0KGRbMV0pJiYoYj1wYXJzZUludChkWzFdLnN1YnN0cigwLDEpLDEwKSkpKTtyZXR1cm4gYytifTtmdW5jdGlvbiBoYShhLGIpe3RoaXMuYz1hO3RoaXMuZj1hLm8uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuaD1iO3RoaXMuYT1uZXcgRihcIi1cIik7dGhpcy5qPSExIT09Yi5ldmVudHM7dGhpcy5nPSExIT09Yi5jbGFzc2VzfWZ1bmN0aW9uIGlhKGEpe2EuZyYmdyhhLmYsW2EuYS5jKFwid2ZcIixcImxvYWRpbmdcIildKTtLKGEsXCJsb2FkaW5nXCIpfWZ1bmN0aW9uIEwoYSl7aWYoYS5nKXt2YXIgYj15KGEuZixhLmEuYyhcIndmXCIsXCJhY3RpdmVcIikpLGM9W10sZD1bYS5hLmMoXCJ3ZlwiLFwibG9hZGluZ1wiKV07Ynx8Yy5wdXNoKGEuYS5jKFwid2ZcIixcImluYWN0aXZlXCIpKTt3KGEuZixjLGQpfUsoYSxcImluYWN0aXZlXCIpfWZ1bmN0aW9uIEsoYSxiLGMpe2lmKGEuaiYmYS5oW2JdKWlmKGMpYS5oW2JdKGMuYyxKKGMpKTtlbHNlIGEuaFtiXSgpfTtmdW5jdGlvbiBqYSgpe3RoaXMuYz17fX1mdW5jdGlvbiBrYShhLGIsYyl7dmFyIGQ9W10sZTtmb3IoZSBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZSkpe3ZhciBmPWEuY1tlXTtmJiZkLnB1c2goZihiW2VdLGMpKX1yZXR1cm4gZH07ZnVuY3Rpb24gTShhLGIpe3RoaXMuYz1hO3RoaXMuZj1iO3RoaXMuYT10KHRoaXMuYyxcInNwYW5cIix7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSx0aGlzLmYpfWZ1bmN0aW9uIE4oYSl7dShhLmMsXCJib2R5XCIsYS5hKX1mdW5jdGlvbiBPKGEpe3JldHVyblwiZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTk5OTlweDtsZWZ0Oi05OTk5cHg7Zm9udC1zaXplOjMwMHB4O3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowO3BhZGRpbmc6MDtmb250LXZhcmlhbnQ6bm9ybWFsO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LWZhbWlseTpcIitJKGEuYykrXCI7XCIrKFwiZm9udC1zdHlsZTpcIitIKGEpK1wiO2ZvbnQtd2VpZ2h0OlwiKyhhLmYrXCIwMFwiKStcIjtcIil9O2Z1bmN0aW9uIFAoYSxiLGMsZCxlLGYpe3RoaXMuZz1hO3RoaXMuaj1iO3RoaXMuYT1kO3RoaXMuYz1jO3RoaXMuZj1lfHwzRTM7dGhpcy5oPWZ8fHZvaWQgMH1QLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYy5vLmRvY3VtZW50LGI9dGhpcyxjPXEoKSxkPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGQsZSl7ZnVuY3Rpb24gZigpe3EoKS1jPj1iLmY/ZSgpOmEuZm9udHMubG9hZChmYShiLmEpLGIuaCkudGhlbihmdW5jdGlvbihhKXsxPD1hLmxlbmd0aD9kKCk6c2V0VGltZW91dChmLDI1KX0sZnVuY3Rpb24oKXtlKCl9KX1mKCl9KSxlPW51bGwsZj1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGQpe2U9c2V0VGltZW91dChkLGIuZil9KTtQcm9taXNlLnJhY2UoW2YsZF0pLnRoZW4oZnVuY3Rpb24oKXtlJiYoY2xlYXJUaW1lb3V0KGUpLGU9bnVsbCk7Yi5nKGIuYSl9LGZ1bmN0aW9uKCl7Yi5qKGIuYSl9KX07ZnVuY3Rpb24gUShhLGIsYyxkLGUsZixnKXt0aGlzLnY9YTt0aGlzLkI9Yjt0aGlzLmM9Yzt0aGlzLmE9ZDt0aGlzLnM9Z3x8XCJCRVNic3d5XCI7dGhpcy5mPXt9O3RoaXMudz1lfHwzRTM7dGhpcy51PWZ8fG51bGw7dGhpcy5tPXRoaXMuaj10aGlzLmg9dGhpcy5nPW51bGw7dGhpcy5nPW5ldyBNKHRoaXMuYyx0aGlzLnMpO3RoaXMuaD1uZXcgTSh0aGlzLmMsdGhpcy5zKTt0aGlzLmo9bmV3IE0odGhpcy5jLHRoaXMucyk7dGhpcy5tPW5ldyBNKHRoaXMuYyx0aGlzLnMpO2E9bmV3IEcodGhpcy5hLmMrXCIsc2VyaWZcIixKKHRoaXMuYSkpO2E9TyhhKTt0aGlzLmcuYS5zdHlsZS5jc3NUZXh0PWE7YT1uZXcgRyh0aGlzLmEuYytcIixzYW5zLXNlcmlmXCIsSih0aGlzLmEpKTthPU8oYSk7dGhpcy5oLmEuc3R5bGUuY3NzVGV4dD1hO2E9bmV3IEcoXCJzZXJpZlwiLEoodGhpcy5hKSk7YT1PKGEpO3RoaXMuai5hLnN0eWxlLmNzc1RleHQ9YTthPW5ldyBHKFwic2Fucy1zZXJpZlwiLEoodGhpcy5hKSk7YT1cbk8oYSk7dGhpcy5tLmEuc3R5bGUuY3NzVGV4dD1hO04odGhpcy5nKTtOKHRoaXMuaCk7Tih0aGlzLmopO04odGhpcy5tKX12YXIgUj17RDpcInNlcmlmXCIsQzpcInNhbnMtc2VyaWZcIn0sUz1udWxsO2Z1bmN0aW9uIFQoKXtpZihudWxsPT09Uyl7dmFyIGE9L0FwcGxlV2ViS2l0XFwvKFswLTldKykoPzpcXC4oWzAtOV0rKSkvLmV4ZWMod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1M9ISFhJiYoNTM2PnBhcnNlSW50KGFbMV0sMTApfHw1MzY9PT1wYXJzZUludChhWzFdLDEwKSYmMTE+PXBhcnNlSW50KGFbMl0sMTApKX1yZXR1cm4gU31RLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3RoaXMuZi5zZXJpZj10aGlzLmouYS5vZmZzZXRXaWR0aDt0aGlzLmZbXCJzYW5zLXNlcmlmXCJdPXRoaXMubS5hLm9mZnNldFdpZHRoO3RoaXMuQT1xKCk7VSh0aGlzKX07XG5mdW5jdGlvbiBsYShhLGIsYyl7Zm9yKHZhciBkIGluIFIpaWYoUi5oYXNPd25Qcm9wZXJ0eShkKSYmYj09PWEuZltSW2RdXSYmYz09PWEuZltSW2RdXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBVKGEpe3ZhciBiPWEuZy5hLm9mZnNldFdpZHRoLGM9YS5oLmEub2Zmc2V0V2lkdGgsZDsoZD1iPT09YS5mLnNlcmlmJiZjPT09YS5mW1wic2Fucy1zZXJpZlwiXSl8fChkPVQoKSYmbGEoYSxiLGMpKTtkP3EoKS1hLkE+PWEudz9UKCkmJmxhKGEsYixjKSYmKG51bGw9PT1hLnV8fGEudS5oYXNPd25Qcm9wZXJ0eShhLmEuYykpP1YoYSxhLnYpOlYoYSxhLkIpOm1hKGEpOlYoYSxhLnYpfWZ1bmN0aW9uIG1hKGEpe3NldFRpbWVvdXQocChmdW5jdGlvbigpe1UodGhpcyl9LGEpLDUwKX1mdW5jdGlvbiBWKGEsYil7c2V0VGltZW91dChwKGZ1bmN0aW9uKCl7dih0aGlzLmcuYSk7dih0aGlzLmguYSk7dih0aGlzLmouYSk7dih0aGlzLm0uYSk7Yih0aGlzLmEpfSxhKSwwKX07ZnVuY3Rpb24gVyhhLGIsYyl7dGhpcy5jPWE7dGhpcy5hPWI7dGhpcy5mPTA7dGhpcy5tPXRoaXMuaj0hMTt0aGlzLnM9Y312YXIgWD1udWxsO1cucHJvdG90eXBlLmc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hO2IuZyYmdyhiLmYsW2IuYS5jKFwid2ZcIixhLmMsSihhKS50b1N0cmluZygpLFwiYWN0aXZlXCIpXSxbYi5hLmMoXCJ3ZlwiLGEuYyxKKGEpLnRvU3RyaW5nKCksXCJsb2FkaW5nXCIpLGIuYS5jKFwid2ZcIixhLmMsSihhKS50b1N0cmluZygpLFwiaW5hY3RpdmVcIildKTtLKGIsXCJmb250YWN0aXZlXCIsYSk7dGhpcy5tPSEwO25hKHRoaXMpfTtcblcucHJvdG90eXBlLmg9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hO2lmKGIuZyl7dmFyIGM9eShiLmYsYi5hLmMoXCJ3ZlwiLGEuYyxKKGEpLnRvU3RyaW5nKCksXCJhY3RpdmVcIikpLGQ9W10sZT1bYi5hLmMoXCJ3ZlwiLGEuYyxKKGEpLnRvU3RyaW5nKCksXCJsb2FkaW5nXCIpXTtjfHxkLnB1c2goYi5hLmMoXCJ3ZlwiLGEuYyxKKGEpLnRvU3RyaW5nKCksXCJpbmFjdGl2ZVwiKSk7dyhiLmYsZCxlKX1LKGIsXCJmb250aW5hY3RpdmVcIixhKTtuYSh0aGlzKX07ZnVuY3Rpb24gbmEoYSl7MD09LS1hLmYmJmEuaiYmKGEubT8oYT1hLmEsYS5nJiZ3KGEuZixbYS5hLmMoXCJ3ZlwiLFwiYWN0aXZlXCIpXSxbYS5hLmMoXCJ3ZlwiLFwibG9hZGluZ1wiKSxhLmEuYyhcIndmXCIsXCJpbmFjdGl2ZVwiKV0pLEsoYSxcImFjdGl2ZVwiKSk6TChhLmEpKX07ZnVuY3Rpb24gb2EoYSl7dGhpcy5qPWE7dGhpcy5hPW5ldyBqYTt0aGlzLmg9MDt0aGlzLmY9dGhpcy5nPSEwfW9hLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe3RoaXMuYz1uZXcgY2EodGhpcy5qLGEuY29udGV4dHx8dGhpcy5qKTt0aGlzLmc9ITEhPT1hLmV2ZW50czt0aGlzLmY9ITEhPT1hLmNsYXNzZXM7cGEodGhpcyxuZXcgaGEodGhpcy5jLGEpLGEpfTtcbmZ1bmN0aW9uIHFhKGEsYixjLGQsZSl7dmFyIGY9MD09LS1hLmg7KGEuZnx8YS5nKSYmc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPWV8fG51bGwsbT1kfHxudWxsfHx7fTtpZigwPT09Yy5sZW5ndGgmJmYpTChiLmEpO2Vsc2V7Yi5mKz1jLmxlbmd0aDtmJiYoYi5qPWYpO3ZhciBoLGw9W107Zm9yKGg9MDtoPGMubGVuZ3RoO2grKyl7dmFyIGs9Y1toXSxuPW1bay5jXSxyPWIuYSx4PWs7ci5nJiZ3KHIuZixbci5hLmMoXCJ3ZlwiLHguYyxKKHgpLnRvU3RyaW5nKCksXCJsb2FkaW5nXCIpXSk7SyhyLFwiZm9udGxvYWRpbmdcIix4KTtyPW51bGw7aWYobnVsbD09PVgpaWYod2luZG93LkZvbnRGYWNlKXt2YXIgeD0vR2Vja28uKkZpcmVmb3hcXC8oXFxkKykvLmV4ZWMod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpLHhhPS9PUyBYLipWZXJzaW9uXFwvMTBcXC4uKlNhZmFyaS8uZXhlYyh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkmJi9BcHBsZS8uZXhlYyh3aW5kb3cubmF2aWdhdG9yLnZlbmRvcik7XG5YPXg/NDI8cGFyc2VJbnQoeFsxXSwxMCk6eGE/ITE6ITB9ZWxzZSBYPSExO1g/cj1uZXcgUChwKGIuZyxiKSxwKGIuaCxiKSxiLmMsayxiLnMsbik6cj1uZXcgUShwKGIuZyxiKSxwKGIuaCxiKSxiLmMsayxiLnMsYSxuKTtsLnB1c2gocil9Zm9yKGg9MDtoPGwubGVuZ3RoO2grKylsW2hdLnN0YXJ0KCl9fSwwKX1mdW5jdGlvbiBwYShhLGIsYyl7dmFyIGQ9W10sZT1jLnRpbWVvdXQ7aWEoYik7dmFyIGQ9a2EoYS5hLGMsYS5jKSxmPW5ldyBXKGEuYyxiLGUpO2EuaD1kLmxlbmd0aDtiPTA7Zm9yKGM9ZC5sZW5ndGg7YjxjO2IrKylkW2JdLmxvYWQoZnVuY3Rpb24oYixkLGMpe3FhKGEsZixiLGQsYyl9KX07ZnVuY3Rpb24gcmEoYSxiKXt0aGlzLmM9YTt0aGlzLmE9Yn1cbnJhLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoKXtpZihmW1wiX19tdGlfZm50THN0XCIrZF0pe3ZhciBjPWZbXCJfX210aV9mbnRMc3RcIitkXSgpLGU9W10saDtpZihjKWZvcih2YXIgbD0wO2w8Yy5sZW5ndGg7bCsrKXt2YXIgaz1jW2xdLmZvbnRmYW1pbHk7dm9pZCAwIT1jW2xdLmZvbnRTdHlsZSYmdm9pZCAwIT1jW2xdLmZvbnRXZWlnaHQ/KGg9Y1tsXS5mb250U3R5bGUrY1tsXS5mb250V2VpZ2h0LGUucHVzaChuZXcgRyhrLGgpKSk6ZS5wdXNoKG5ldyBHKGspKX1hKGUpfWVsc2Ugc2V0VGltZW91dChmdW5jdGlvbigpe2IoKX0sNTApfXZhciBjPXRoaXMsZD1jLmEucHJvamVjdElkLGU9Yy5hLnZlcnNpb247aWYoZCl7dmFyIGY9Yy5jLm87QSh0aGlzLmMsKGMuYS5hcGl8fFwiaHR0cHM6Ly9mYXN0LmZvbnRzLm5ldC9qc2FwaVwiKStcIi9cIitkK1wiLmpzXCIrKGU/XCI/dj1cIitlOlwiXCIpLGZ1bmN0aW9uKGUpe2U/YShbXSk6KGZbXCJfX01vbm90eXBlQ29uZmlndXJhdGlvbl9fXCIrXG5kXT1mdW5jdGlvbigpe3JldHVybiBjLmF9LGIoKSl9KS5pZD1cIl9fTW9ub3R5cGVBUElTY3JpcHRfX1wiK2R9ZWxzZSBhKFtdKX07ZnVuY3Rpb24gc2EoYSxiKXt0aGlzLmM9YTt0aGlzLmE9Yn1zYS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihhKXt2YXIgYixjLGQ9dGhpcy5hLnVybHN8fFtdLGU9dGhpcy5hLmZhbWlsaWVzfHxbXSxmPXRoaXMuYS50ZXN0U3RyaW5nc3x8e30sZz1uZXcgQjtiPTA7Zm9yKGM9ZC5sZW5ndGg7YjxjO2IrKyl6KHRoaXMuYyxkW2JdLEMoZykpO3ZhciBtPVtdO2I9MDtmb3IoYz1lLmxlbmd0aDtiPGM7YisrKWlmKGQ9ZVtiXS5zcGxpdChcIjpcIiksZFsxXSlmb3IodmFyIGg9ZFsxXS5zcGxpdChcIixcIiksbD0wO2w8aC5sZW5ndGg7bCs9MSltLnB1c2gobmV3IEcoZFswXSxoW2xdKSk7ZWxzZSBtLnB1c2gobmV3IEcoZFswXSkpO0UoZyxmdW5jdGlvbigpe2EobSxmKX0pfTtmdW5jdGlvbiB0YShhLGIpe2E/dGhpcy5jPWE6dGhpcy5jPXVhO3RoaXMuYT1bXTt0aGlzLmY9W107dGhpcy5nPWJ8fFwiXCJ9dmFyIHVhPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3NcIjtmdW5jdGlvbiB2YShhLGIpe2Zvcih2YXIgYz1iLmxlbmd0aCxkPTA7ZDxjO2QrKyl7dmFyIGU9YltkXS5zcGxpdChcIjpcIik7Mz09ZS5sZW5ndGgmJmEuZi5wdXNoKGUucG9wKCkpO3ZhciBmPVwiXCI7Mj09ZS5sZW5ndGgmJlwiXCIhPWVbMV0mJihmPVwiOlwiKTthLmEucHVzaChlLmpvaW4oZikpfX1cbmZ1bmN0aW9uIHdhKGEpe2lmKDA9PWEuYS5sZW5ndGgpdGhyb3cgRXJyb3IoXCJObyBmb250cyB0byBsb2FkIVwiKTtpZigtMSE9YS5jLmluZGV4T2YoXCJraXQ9XCIpKXJldHVybiBhLmM7Zm9yKHZhciBiPWEuYS5sZW5ndGgsYz1bXSxkPTA7ZDxiO2QrKyljLnB1c2goYS5hW2RdLnJlcGxhY2UoLyAvZyxcIitcIikpO2I9YS5jK1wiP2ZhbWlseT1cIitjLmpvaW4oXCIlN0NcIik7MDxhLmYubGVuZ3RoJiYoYis9XCImc3Vic2V0PVwiK2EuZi5qb2luKFwiLFwiKSk7MDxhLmcubGVuZ3RoJiYoYis9XCImdGV4dD1cIitlbmNvZGVVUklDb21wb25lbnQoYS5nKSk7cmV0dXJuIGJ9O2Z1bmN0aW9uIHlhKGEpe3RoaXMuZj1hO3RoaXMuYT1bXTt0aGlzLmM9e319XG52YXIgemE9e2xhdGluOlwiQkVTYnN3eVwiLFwibGF0aW4tZXh0XCI6XCJcXHUwMGU3XFx1MDBmNlxcdTAwZmNcXHUwMTFmXFx1MDE1ZlwiLGN5cmlsbGljOlwiXFx1MDQzOVxcdTA0NGZcXHUwNDE2XCIsZ3JlZWs6XCJcXHUwM2IxXFx1MDNiMlxcdTAzYTNcIixraG1lcjpcIlxcdTE3ODBcXHUxNzgxXFx1MTc4MlwiLEhhbnVtYW46XCJcXHUxNzgwXFx1MTc4MVxcdTE3ODJcIn0sQWE9e3RoaW46XCIxXCIsZXh0cmFsaWdodDpcIjJcIixcImV4dHJhLWxpZ2h0XCI6XCIyXCIsdWx0cmFsaWdodDpcIjJcIixcInVsdHJhLWxpZ2h0XCI6XCIyXCIsbGlnaHQ6XCIzXCIscmVndWxhcjpcIjRcIixib29rOlwiNFwiLG1lZGl1bTpcIjVcIixcInNlbWktYm9sZFwiOlwiNlwiLHNlbWlib2xkOlwiNlwiLFwiZGVtaS1ib2xkXCI6XCI2XCIsZGVtaWJvbGQ6XCI2XCIsYm9sZDpcIjdcIixcImV4dHJhLWJvbGRcIjpcIjhcIixleHRyYWJvbGQ6XCI4XCIsXCJ1bHRyYS1ib2xkXCI6XCI4XCIsdWx0cmFib2xkOlwiOFwiLGJsYWNrOlwiOVwiLGhlYXZ5OlwiOVwiLGw6XCIzXCIscjpcIjRcIixiOlwiN1wifSxCYT17aTpcImlcIixpdGFsaWM6XCJpXCIsbjpcIm5cIixub3JtYWw6XCJuXCJ9LFxuQ2E9L14odGhpbnwoPzooPzpleHRyYXx1bHRyYSktPyk/bGlnaHR8cmVndWxhcnxib29rfG1lZGl1bXwoPzooPzpzZW1pfGRlbWl8ZXh0cmF8dWx0cmEpLT8pP2JvbGR8YmxhY2t8aGVhdnl8bHxyfGJ8WzEtOV0wMCk/KG58aXxub3JtYWx8aXRhbGljKT8kLztcbmZ1bmN0aW9uIERhKGEpe2Zvcih2YXIgYj1hLmYubGVuZ3RoLGM9MDtjPGI7YysrKXt2YXIgZD1hLmZbY10uc3BsaXQoXCI6XCIpLGU9ZFswXS5yZXBsYWNlKC9cXCsvZyxcIiBcIiksZj1bXCJuNFwiXTtpZigyPD1kLmxlbmd0aCl7dmFyIGc7dmFyIG09ZFsxXTtnPVtdO2lmKG0pZm9yKHZhciBtPW0uc3BsaXQoXCIsXCIpLGg9bS5sZW5ndGgsbD0wO2w8aDtsKyspe3ZhciBrO2s9bVtsXTtpZihrLm1hdGNoKC9eW1xcdy1dKyQvKSl7dmFyIG49Q2EuZXhlYyhrLnRvTG93ZXJDYXNlKCkpO2lmKG51bGw9PW4paz1cIlwiO2Vsc2V7az1uWzJdO2s9bnVsbD09a3x8XCJcIj09az9cIm5cIjpCYVtrXTtuPW5bMV07aWYobnVsbD09bnx8XCJcIj09biluPVwiNFwiO2Vsc2UgdmFyIHI9QWFbbl0sbj1yP3I6aXNOYU4obik/XCI0XCI6bi5zdWJzdHIoMCwxKTtrPVtrLG5dLmpvaW4oXCJcIil9fWVsc2Ugaz1cIlwiO2smJmcucHVzaChrKX0wPGcubGVuZ3RoJiYoZj1nKTszPT1kLmxlbmd0aCYmKGQ9ZFsyXSxnPVtdLGQ9ZD9kLnNwbGl0KFwiLFwiKTpcbmcsMDxkLmxlbmd0aCYmKGQ9emFbZFswXV0pJiYoYS5jW2VdPWQpKX1hLmNbZV18fChkPXphW2VdKSYmKGEuY1tlXT1kKTtmb3IoZD0wO2Q8Zi5sZW5ndGg7ZCs9MSlhLmEucHVzaChuZXcgRyhlLGZbZF0pKX19O2Z1bmN0aW9uIEVhKGEsYil7dGhpcy5jPWE7dGhpcy5hPWJ9dmFyIEZhPXtBcmltbzohMCxDb3VzaW5lOiEwLFRpbm9zOiEwfTtFYS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihhKXt2YXIgYj1uZXcgQixjPXRoaXMuYyxkPW5ldyB0YSh0aGlzLmEuYXBpLHRoaXMuYS50ZXh0KSxlPXRoaXMuYS5mYW1pbGllczt2YShkLGUpO3ZhciBmPW5ldyB5YShlKTtEYShmKTt6KGMsd2EoZCksQyhiKSk7RShiLGZ1bmN0aW9uKCl7YShmLmEsZi5jLEZhKX0pfTtmdW5jdGlvbiBHYShhLGIpe3RoaXMuYz1hO3RoaXMuYT1ifUdhLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYS5pZCxjPXRoaXMuYy5vO2I/QSh0aGlzLmMsKHRoaXMuYS5hcGl8fFwiaHR0cHM6Ly91c2UudHlwZWtpdC5uZXRcIikrXCIvXCIrYitcIi5qc1wiLGZ1bmN0aW9uKGIpe2lmKGIpYShbXSk7ZWxzZSBpZihjLlR5cGVraXQmJmMuVHlwZWtpdC5jb25maWcmJmMuVHlwZWtpdC5jb25maWcuZm4pe2I9Yy5UeXBla2l0LmNvbmZpZy5mbjtmb3IodmFyIGU9W10sZj0wO2Y8Yi5sZW5ndGg7Zis9Milmb3IodmFyIGc9YltmXSxtPWJbZisxXSxoPTA7aDxtLmxlbmd0aDtoKyspZS5wdXNoKG5ldyBHKGcsbVtoXSkpO3RyeXtjLlR5cGVraXQubG9hZCh7ZXZlbnRzOiExLGNsYXNzZXM6ITEsYXN5bmM6ITB9KX1jYXRjaChsKXt9YShlKX19LDJFMyk6YShbXSl9O2Z1bmN0aW9uIEhhKGEsYil7dGhpcy5jPWE7dGhpcy5mPWI7dGhpcy5hPVtdfUhhLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZi5pZCxjPXRoaXMuYy5vLGQ9dGhpcztiPyhjLl9fd2ViZm9udGZvbnRkZWNrbW9kdWxlX198fChjLl9fd2ViZm9udGZvbnRkZWNrbW9kdWxlX189e30pLGMuX193ZWJmb250Zm9udGRlY2ttb2R1bGVfX1tiXT1mdW5jdGlvbihiLGMpe2Zvcih2YXIgZz0wLG09Yy5mb250cy5sZW5ndGg7ZzxtOysrZyl7dmFyIGg9Yy5mb250c1tnXTtkLmEucHVzaChuZXcgRyhoLm5hbWUsZ2EoXCJmb250LXdlaWdodDpcIitoLndlaWdodCtcIjtmb250LXN0eWxlOlwiK2guc3R5bGUpKSl9YShkLmEpfSxBKHRoaXMuYywodGhpcy5mLmFwaXx8XCJodHRwczovL2YuZm9udGRlY2suY29tL3MvY3NzL2pzL1wiKStlYSh0aGlzLmMpK1wiL1wiK2IrXCIuanNcIixmdW5jdGlvbihiKXtiJiZhKFtdKX0pKTphKFtdKX07dmFyIFk9bmV3IG9hKHdpbmRvdyk7WS5hLmMuY3VzdG9tPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBzYShiLGEpfTtZLmEuYy5mb250ZGVjaz1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgSGEoYixhKX07WS5hLmMubW9ub3R5cGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IHJhKGIsYSl9O1kuYS5jLnR5cGVraXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IEdhKGIsYSl9O1kuYS5jLmdvb2dsZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgRWEoYixhKX07dmFyIFo9e2xvYWQ6cChZLmxvYWQsWSl9OyB0cnVlPyEoX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gPSAoZnVuY3Rpb24oKXtyZXR1cm4gWn0pLmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXywgZXhwb3J0cywgbW9kdWxlKSxcblx0XHRcdFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpOlwidW5kZWZpbmVkXCIhPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1aOih3aW5kb3cuV2ViRm9udD1aLHdpbmRvdy5XZWJGb250Q29uZmlnJiZZLmxvYWQod2luZG93LldlYkZvbnRDb25maWcpKTt9KCkpO1xuXG5cbi8qKiovIH0pLFxuLyogMTY3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IG1ha2VGdWxsU2NyZWVuO1xuXG52YXIgX3V0aWxpdGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xuXG52YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIG1vZGU6ICdlbWJlZC1mdWxscGFnZScsXG4gIGRpc2FibGVTdWJtaXQ6IGZhbHNlLFxuICBvblN1Ym1pdDogX3V0aWxpdGllcy5ub29wXG59O1xuXG52YXIgcXVlcnlTdHJpbmdLZXlzID0ge1xuICBtb2RlOiAndHlwZWZvcm0tZW1iZWQnLFxuICBkaXNhYmxlU3VibWl0OiAnX19kYW5nZXJvdXMtZGlzYWJsZS1zdWJtaXNzaW9ucydcbn07XG5cbmZ1bmN0aW9uIG1ha2VGdWxsU2NyZWVuKGlmcmFtZSwgdXJsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gIGlmcmFtZS5zcmMgPSAoMCwgX3V0aWxpdGllcy5hcHBlbmRQYXJhbXNUb1VybCkodXJsLCAoMCwgX3V0aWxpdGllcy5yZXBsYWNlRXhpc3RpbmdLZXlzKShvcHRpb25zLCBxdWVyeVN0cmluZ0tleXMpKTtcblxuICB2YXIgb25Gb3JtU3VibWl0ID0gZnVuY3Rpb24gb25Gb3JtU3VibWl0KCkge1xuICAgIG9wdGlvbnMub25TdWJtaXQoKTtcbiAgfTtcblxuICAoMCwgX3V0aWxpdGllcy5lbnN1cmVNZXRhVmlld3BvcnQpKCk7XG4gICgwLCBfdXRpbGl0aWVzLmZpeFNhZmFyaVNjcm9sbCkoaWZyYW1lKTtcblxuICAvLyBGaXggc2Nyb2xsIGluc2lkZSB0aGUgaWZyYW1lIChyZW5kZXJlciB2MSlcbiAgaWZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmcmFtZS5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICgwLCBfdXRpbGl0aWVzLmFwcGx5SU9TRm9vdGVySGFjaykoaWZyYW1lKTtcbiAgICB9LCAxKTtcblxuICAgIGlmcmFtZS5jb250ZW50V2luZG93LmZvY3VzKCk7XG4gIH07XG5cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBfdXRpbGl0aWVzLm9uTWVzc2FnZSk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb3JtLXN1Ym1pdCcsIG9uRm9ybVN1Ym1pdCk7XG59XG5cbi8qKiovIH0pLFxuLyogMTY4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzY2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzNjcpO1xuXG5pZiAoZ2xvYmFsLl9iYWJlbFBvbHlmaWxsKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7XG59XG5nbG9iYWwuX2JhYmVsUG9seWZpbGwgPSB0cnVlO1xuXG52YXIgREVGSU5FX1BST1BFUlRZID0gXCJkZWZpbmVQcm9wZXJ0eVwiO1xuZnVuY3Rpb24gZGVmaW5lKE8sIGtleSwgdmFsdWUpIHtcbiAgT1trZXldIHx8IE9iamVjdFtERUZJTkVfUFJPUEVSVFldKE8sIGtleSwge1xuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSk7XG59XG5cbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZExlZnRcIiwgXCJcIi5wYWRTdGFydCk7XG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRSaWdodFwiLCBcIlwiLnBhZEVuZCk7XG5cblwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBbXVtrZXldICYmIGRlZmluZShBcnJheSwga2V5LCBGdW5jdGlvbi5jYWxsLmJpbmQoW11ba2V5XSkpO1xufSk7XG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyg1MCkpKVxuXG4vKioqLyB9KSxcbi8qIDE2OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3NSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3Nyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3OCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3OSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4MSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4NSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4OCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4OSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5MSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5NSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5Nyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5OCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE5OSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwMCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwMSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwMik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwMyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwNCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwNSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwNik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwNyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwOCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwOSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxMCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxMSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxMyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxNCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxNSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxNik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxNyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxOSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyMCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyMSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyMik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyMyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyNCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyNSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyNik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyNyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyOCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyOSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzMCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzMSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzMik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzMyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzNCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzNSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzNik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzNyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzOCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIzOSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0MSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0NSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0OCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1MSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1NSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1Nyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1OCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1OSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2MSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2NSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2OCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2OSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI3MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI3MSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI3Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI3Myk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDk3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjc0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjc1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMTI2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjc2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjc3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjc4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjc5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjgwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMTI5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMTMxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMTMyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjgxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjgyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjgzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjg0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjg1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjg2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjg3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjg4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjg5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjkwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjkxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjkyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjkzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMjk0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjk1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjk2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjk3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjk4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMjk5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzAwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzAxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzAyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzAzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzA0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzA1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzA2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzA3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzA4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzA5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzEwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzExKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzEyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzEzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzE0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzE1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzE2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzE3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzE4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzE5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzIwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzIxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzIyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzIzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzI0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzI1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzI2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzI3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzI4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzI5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzMwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzMxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzMyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzMzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzM0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzM1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzM2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzM3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzM4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzM5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQ0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQ1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQ2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQ3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQ4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzQ5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzUwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzUxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzUyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzUzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzU0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzU1KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzU2KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzU3KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzU4KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzU5KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzYwKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzYxKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzYyKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzYzKTtcbl9fd2VicGFja19yZXF1aXJlX18oMzY0KTtcbl9fd2VicGFja19yZXF1aXJlX18oMzY1KTtcbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG5cblxuLyoqKi8gfSksXG4vKiAxNzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciByZWRlZmluZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xudmFyIE1FVEEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKS5LRVk7XG52YXIgJGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBzaGFyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1KTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xudmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xudmFyIHdrcyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG52YXIgd2tzRXh0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDkpO1xudmFyIHdrc0RlZmluZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzcpO1xudmFyIGVudW1LZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzEpO1xudmFyIGlzQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgY3JlYXRlRGVzYyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xudmFyIF9jcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcbnZhciBnT1BORXh0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTIpO1xudmFyICRHT1BEID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG52YXIgJERQID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbnZhciAka2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzgpO1xudmFyIGdPUEQgPSAkR09QRC5mO1xudmFyIGRQID0gJERQLmY7XG52YXIgZ09QTiA9IGdPUE5FeHQuZjtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciAkSlNPTiA9IGdsb2JhbC5KU09OO1xudmFyIF9zdHJpbmdpZnkgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG52YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xudmFyIGlzRW51bSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT1BTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIF9fd2VicGFja19yZXF1aXJlX18oNDEpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgX193ZWJwYWNrX3JlcXVpcmVfXyg1MikuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgX193ZWJwYWNrX3JlcXVpcmVfXyg1NykuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IF9fd2VicGFja19yZXF1aXJlX18oMTIpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuXG5cbi8qKiovIH0pLFxuLyogMTcxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzgpO1xudmFyIGdPUFMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KTtcbnZhciBwSUUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTcyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogX193ZWJwYWNrX3JlcXVpcmVfXyg0MCkgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAxNzMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIV9fd2VicGFja19yZXF1aXJlX18oNiksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLmYgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAxNzQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXyg2KSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogX193ZWJwYWNrX3JlcXVpcmVfXygxMTEpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTc1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbnZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNikuZjtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNikoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTc2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNikoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDE3NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgJGtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNikoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDE3OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuX193ZWJwYWNrX3JlcXVpcmVfXygyNikoJ2dldE93blByb3BlcnR5TmFtZXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMikuZjtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTc5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgbWV0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpLm9uRnJlZXplO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2KSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDE4MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgbWV0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpLm9uRnJlZXplO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2KSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTgxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgbWV0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpLm9uRnJlZXplO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI2KSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAxODIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4yLjEyIE9iamVjdC5pc0Zyb3plbihPKVxudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNikoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTgzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjYpKCdpc1NlYWxlZCcsIGZ1bmN0aW9uICgkaXNTZWFsZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzU2VhbGVkKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc1NlYWxlZCA/ICRpc1NlYWxlZChpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDE4NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNikoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAxODUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogX193ZWJwYWNrX3JlcXVpcmVfXygxMTMpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTg2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMy4xMCBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IF9fd2VicGFja19yZXF1aXJlX18oMTg3KSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDE4NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vLyA3LjIuOSBTYW1lVmFsdWUoeCwgeSlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxODggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBzZXRQcm90b3R5cGVPZjogX193ZWJwYWNrX3JlcXVpcmVfXyg4MSkuc2V0IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTg5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIF9fd2VicGFja19yZXF1aXJlX18oMTMpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG5cblxuLyoqKi8gfSksXG4vKiAxOTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0Z1bmN0aW9uJywgeyBiaW5kOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNCkgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAxOTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGRQID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgX193ZWJwYWNrX3JlcXVpcmVfXyg2KSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAxOTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBIQVNfSU5TVEFOQ0UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKCdoYXNJbnN0YW5jZScpO1xudmFyIEZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyAxOS4yLjMuNiBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV0oVilcbmlmICghKEhBU19JTlNUQU5DRSBpbiBGdW5jdGlvblByb3RvKSkgX193ZWJwYWNrX3JlcXVpcmVfXyg3KS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAxOTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRwYXJzZUludCA9IF9fd2VicGFja19yZXF1aXJlX18oMTE2KTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTk0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkcGFyc2VGbG9hdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTE3KTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTk1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBjb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IF9fd2VicGFja19yZXF1aXJlX18oODMpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGdPUE4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxKS5mO1xudmFyIGdPUEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KS5mO1xudmFyIGRQID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KS5mO1xudmFyICR0cmltID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YoX193ZWJwYWNrX3JlcXVpcmVfXyg0MCkocHJvdG8pKSA9PSBOVU1CRVI7XG52YXIgVFJJTSA9ICd0cmltJyBpbiBTdHJpbmcucHJvdG90eXBlO1xuXG4vLyA3LjEuMyBUb051bWJlcihhcmd1bWVudClcbnZhciB0b051bWJlciA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgaXQgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgZmFsc2UpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IFRSSU0gPyBpdC50cmltKCkgOiAkdHJpbShpdCwgMyk7XG4gICAgdmFyIGZpcnN0ID0gaXQuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgdGhpcmQsIHJhZGl4LCBtYXhDb2RlO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGl0LmNoYXJDb2RlQXQoMik7XG4gICAgICBpZiAodGhpcmQgPT09IDg4IHx8IHRoaXJkID09PSAxMjApIHJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYgKGZpcnN0ID09PSA0OCkge1xuICAgICAgc3dpdGNoIChpdC5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgIGNhc2UgNjY6IGNhc2UgOTg6IHJhZGl4ID0gMjsgbWF4Q29kZSA9IDQ5OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA3OTogY2FzZSAxMTE6IHJhZGl4ID0gODsgbWF4Q29kZSA9IDU1OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBvWzAtN10rJC9pXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAraXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBkaWdpdHMgPSBpdC5zbGljZSgyKSwgaSA9IDAsIGwgPSBkaWdpdHMubGVuZ3RoLCBjb2RlOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbmlmICghJE51bWJlcignIDBvMScpIHx8ICEkTnVtYmVyKCcwYjEnKSB8fCAkTnVtYmVyKCcrMHgxJykpIHtcbiAgJE51bWJlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBpdCA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IHZhbHVlO1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gdGhhdCBpbnN0YW5jZW9mICROdW1iZXJcbiAgICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgICAgJiYgKEJST0tFTl9DT0YgPyBmYWlscyhmdW5jdGlvbiAoKSB7IHByb3RvLnZhbHVlT2YuY2FsbCh0aGF0KTsgfSkgOiBjb2YodGhhdCkgIT0gTlVNQkVSKVxuICAgICAgICA/IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKHRvTnVtYmVyKGl0KSksIHRoYXQsICROdW1iZXIpIDogdG9OdW1iZXIoaXQpO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KSA/IGdPUE4oQmFzZSkgOiAoXG4gICAgLy8gRVMzOlxuICAgICdNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSwnICtcbiAgICAvLyBFUzYgKGluIGNhc2UsIGlmIG1vZHVsZXMgd2l0aCBFUzYgTnVtYmVyIHN0YXRpY3MgcmVxdWlyZWQgYmVmb3JlKTpcbiAgICAnRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLCcgK1xuICAgICdNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhcyhCYXNlLCBrZXkgPSBrZXlzW2pdKSAmJiAhaGFzKCROdW1iZXIsIGtleSkpIHtcbiAgICAgIGRQKCROdW1iZXIsIGtleSwgZ09QRChCYXNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgJE51bWJlci5wcm90b3R5cGUgPSBwcm90bztcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkTnVtYmVyO1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG5cblxuLyoqKi8gfSksXG4vKiAxOTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciB0b0ludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcbnZhciBhTnVtYmVyVmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOCk7XG52YXIgcmVwZWF0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NCk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhX193ZWJwYWNrX3JlcXVpcmVfXygzKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDE5NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgYU51bWJlclZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTgpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAxOTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMS4yLjEgTnVtYmVyLkVQU0lMT05cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAxOTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMS4yLjIgTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBfaXNGaW5pdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIwMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IGlzSW50ZWdlcjogX193ZWJwYWNrX3JlcXVpcmVfXygxMTkpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc05hTjogZnVuY3Rpb24gaXNOYU4obnVtYmVyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiBudW1iZXIgIT0gbnVtYmVyO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIwMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgaXNJbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTkpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNTYWZlSW50ZWdlcjogZnVuY3Rpb24gaXNTYWZlSW50ZWdlcihudW1iZXIpIHtcbiAgICByZXR1cm4gaXNJbnRlZ2VyKG51bWJlcikgJiYgYWJzKG51bWJlcikgPD0gMHgxZmZmZmZmZmZmZmZmZjtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1BWF9TQUZFX0lOVEVHRVI6IDB4MWZmZmZmZmZmZmZmZmYgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNSU5fU0FGRV9JTlRFR0VSOiAtMHgxZmZmZmZmZmZmZmZmZiB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDIwNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJHBhcnNlRmxvYXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNyk7XG4vLyAyMC4xLjIuMTIgTnVtYmVyLnBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCAnTnVtYmVyJywgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDIwNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJHBhcnNlSW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTYpO1xuLy8gMjAuMS4yLjEzIE51bWJlci5wYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlSW50ICE9ICRwYXJzZUludCksICdOdW1iZXInLCB7IHBhcnNlSW50OiAkcGFyc2VJbnQgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGxvZzFwID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjApO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDIwOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJGF0YW5oID0gTWF0aC5hdGFuaDtcblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmF0YW5oKC0wKSAtPiAwXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGF0YW5oICYmIDEgLyAkYXRhbmgoLTApIDwgMCksICdNYXRoJywge1xuICBhdGFuaDogZnVuY3Rpb24gYXRhbmgoeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IE1hdGgubG9nKCgxICsgeCkgLyAoMSAtIHgpKSAvIDI7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIHNpZ24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjYnJ0OiBmdW5jdGlvbiBjYnJ0KHgpIHtcbiAgICByZXR1cm4gc2lnbih4ID0gK3gpICogTWF0aC5wb3coTWF0aC5hYnMoeCksIDEgLyAzKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNvc2g6IGZ1bmN0aW9uIGNvc2goeCkge1xuICAgIHJldHVybiAoZXhwKHggPSAreCkgKyBleHAoLXgpKSAvIDI7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJGV4cG0xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCRleHBtMSAhPSBNYXRoLmV4cG0xKSwgJ01hdGgnLCB7IGV4cG0xOiAkZXhwbTEgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgZnJvdW5kOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSkgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4yLjIuMTggTWF0aC5pbXVsKHgsIHkpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIF9fd2VicGFja19yZXF1aXJlX18oMykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjIxIE1hdGgubG9nMTAoeClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIxOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMCkgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjIyIE1hdGgubG9nMih4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogX193ZWJwYWNrX3JlcXVpcmVfXyg4NSkgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGV4cG0xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbi8vIFY4IG5lYXIgQ2hyb21pdW0gMzggaGFzIGEgcHJvYmxlbSB3aXRoIHZlcnkgc21hbGwgbnVtYmVyc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFNYXRoLnNpbmgoLTJlLTE3KSAhPSAtMmUtMTc7XG59KSwgJ01hdGgnLCB7XG4gIHNpbmg6IGZ1bmN0aW9uIHNpbmgoeCkge1xuICAgIHJldHVybiBNYXRoLmFicyh4ID0gK3gpIDwgMVxuICAgICAgPyAoZXhwbTEoeCkgLSBleHBtMSgteCkpIC8gMlxuICAgICAgOiAoZXhwKHggLSAxKSAtIGV4cCgteCAtIDEpKSAqIChNYXRoLkUgLyAyKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGV4cG0xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjIzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIwLjIuMi4zNCBNYXRoLnRydW5jKHgpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjI0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIyNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9JT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkYXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg3KSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxuX193ZWJwYWNrX3JlcXVpcmVfXyg4OCkoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRhdCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciB0b0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgY29udGV4dCA9IF9fd2VicGFja19yZXF1aXJlX18oOTApO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDkxKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgY29udGV4dCA9IF9fd2VicGFja19yZXF1aXJlX18oOTApO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDkxKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjMxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0KVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGNvbnRleHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkwKTtcbnZhciBTVEFSVFNfV0lUSCA9ICdzdGFydHNXaXRoJztcbnZhciAkc3RhcnRzV2l0aCA9ICcnW1NUQVJUU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDkxKShTVEFSVFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIHN0YXJ0c1dpdGg6IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgU1RBUlRTX1dJVEgpO1xuICAgIHZhciBpbmRleCA9IHRvTGVuZ3RoKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0aGF0Lmxlbmd0aCkpO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJHN0YXJ0c1dpdGhcbiAgICAgID8gJHN0YXJ0c1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGluZGV4KVxuICAgICAgOiB0aGF0LnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjMzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBCLjIuMy4yIFN0cmluZy5wcm90b3R5cGUuYW5jaG9yKG5hbWUpXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMzQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEIuMi4zLjMgU3RyaW5nLnByb3RvdHlwZS5iaWcoKVxuX193ZWJwYWNrX3JlcXVpcmVfXygxNCkoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDIzNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gQi4yLjMuNCBTdHJpbmcucHJvdG90eXBlLmJsaW5rKClcbl9fd2VicGFja19yZXF1aXJlX18oMTQpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMzYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbl9fd2VicGFja19yZXF1aXJlX18oMTQpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMzcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjM4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxuX193ZWJwYWNrX3JlcXVpcmVfXygxNCkoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjM5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbl9fd2VicGFja19yZXF1aXJlX18oMTQpKCdmb250c2l6ZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250c2l6ZShzaXplKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnc2l6ZScsIHNpemUpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbl9fd2VicGFja19yZXF1aXJlX18oMTQpKCdpdGFsaWNzJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGl0YWxpY3MoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2knLCAnJywgJycpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEIuMi4zLjExIFN0cmluZy5wcm90b3R5cGUuc21hbGwoKVxuX193ZWJwYWNrX3JlcXVpcmVfXygxNCkoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI0MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxuX193ZWJwYWNrX3JlcXVpcmVfXygxNCkoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI0NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxuX193ZWJwYWNrX3JlcXVpcmVfXygxNCkoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI0NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxuX193ZWJwYWNrX3JlcXVpcmVfXygxNCkoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI0NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMC4zLjMuMSAvIDE1LjkuNC40IERhdGUubm93KClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdEYXRlJywgeyBub3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjQ3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogX193ZWJwYWNrX3JlcXVpcmVfXygzKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciB0b0lTT1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ5KTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAhPT0gdG9JU09TdHJpbmcpLCAnRGF0ZScsIHtcbiAgdG9JU09TdHJpbmc6IHRvSVNPU3RyaW5nXG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI0OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgZ2V0VGltZSA9IERhdGUucHJvdG90eXBlLmdldFRpbWU7XG52YXIgJHRvSVNPU3RyaW5nID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBseiA9IGZ1bmN0aW9uIChudW0pIHtcbiAgcmV0dXJuIG51bSA+IDkgPyBudW0gOiAnMCcgKyBudW07XG59O1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbm1vZHVsZS5leHBvcnRzID0gKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKC01ZTEzIC0gMSkpICE9ICcwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVonO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoTmFOKSk7XG59KSkgPyBmdW5jdGlvbiB0b0lTT1N0cmluZygpIHtcbiAgaWYgKCFpc0Zpbml0ZShnZXRUaW1lLmNhbGwodGhpcykpKSB0aHJvdyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgdmFyIGQgPSB0aGlzO1xuICB2YXIgeSA9IGQuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIG0gPSBkLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICB2YXIgcyA9IHkgPCAwID8gJy0nIDogeSA+IDk5OTkgPyAnKycgOiAnJztcbiAgcmV0dXJuIHMgKyAoJzAwMDAwJyArIE1hdGguYWJzKHkpKS5zbGljZShzID8gLTYgOiAtNCkgK1xuICAgICctJyArIGx6KGQuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0nICsgbHooZC5nZXRVVENEYXRlKCkpICtcbiAgICAnVCcgKyBseihkLmdldFVUQ0hvdXJzKCkpICsgJzonICsgbHooZC5nZXRVVENNaW51dGVzKCkpICtcbiAgICAnOicgKyBseihkLmdldFVUQ1NlY29uZHMoKSkgKyAnLicgKyAobSA+IDk5ID8gbSA6ICcwJyArIGx6KG0pKSArICdaJztcbn0gOiAkdG9JU09TdHJpbmc7XG5cblxuLyoqKi8gfSksXG4vKiAyNTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgX193ZWJwYWNrX3JlcXVpcmVfXygxMykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDI1MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgVE9fUFJJTUlUSVZFID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgndG9QcmltaXRpdmUnKTtcbnZhciBwcm90byA9IERhdGUucHJvdG90eXBlO1xuXG5pZiAoIShUT19QUklNSVRJVkUgaW4gcHJvdG8pKSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKShwcm90bywgVE9fUFJJTUlUSVZFLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MikpO1xuXG5cbi8qKiovIH0pLFxuLyogMjUyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjUzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnQXJyYXknLCB7IGlzQXJyYXk6IF9fd2VicGFja19yZXF1aXJlX18oNTgpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjU0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgY3R4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMik7XG52YXIgaXNBcnJheUl0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkyKTtcbnZhciB0b0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkzKTtcbnZhciBnZXRJdGVyRm4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXyg2MCkoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oOTMpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI1NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5qb2luKHNlcGFyYXRvcilcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoX193ZWJwYWNrX3JlcXVpcmVfXyg1MSkgIT0gT2JqZWN0IHx8ICFfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBodG1sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XG52YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjU4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIV9fd2VicGFja19yZXF1aXJlX18oMjEpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI1OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRmb3JFYWNoID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNykoMCk7XG52YXIgU1RSSUNUID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI2MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGlzQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcbnZhciBTUEVDSUVTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjYxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJG1hcCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkZmlsdGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIV9fd2VicGFja19yZXF1aXJlX18oMjEpKFtdLmZpbHRlciwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjcgLyAxNS40LjQuMjAgQXJyYXkucHJvdG90eXBlLmZpbHRlcihjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjYzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJHNvbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkZXZlcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjY1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJHJlZHVjZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkcmVkdWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKShbXS5yZWR1Y2VSaWdodCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE5IC8gMTUuNC40LjIyIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodChjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCB0cnVlKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkaW5kZXhPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjExIC8gMTUuNC40LjE0IEFycmF5LnByb3RvdHlwZS5pbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/ICRuYXRpdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjY4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9JT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNCAvIDE1LjQuNC4xNSBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IEBbKi0xXSAqLykge1xuICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICBpZiAoTkVHQVRJVkVfWkVSTykgcmV0dXJuICRuYXRpdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwO1xuICAgIHZhciBPID0gdG9JT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTtcbiAgICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICAgIGZvciAoO2luZGV4ID49IDA7IGluZGV4LS0pIGlmIChpbmRleCBpbiBPKSBpZiAoT1tpbmRleF0gPT09IHNlYXJjaEVsZW1lbnQpIHJldHVybiBpbmRleCB8fCAwO1xuICAgIHJldHVybiAtMTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGNvcHlXaXRoaW46IF9fd2VicGFja19yZXF1aXJlX18oMTI0KSB9KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzNCkoJ2NvcHlXaXRoaW4nKTtcblxuXG4vKioqLyB9KSxcbi8qIDI3MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogX193ZWJwYWNrX3JlcXVpcmVfXyg5NikgfSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzQpKCdmaWxsJyk7XG5cblxuLyoqKi8gfSksXG4vKiAyNzEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkZmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM0KShLRVkpO1xuXG5cbi8qKiovIH0pLFxuLyogMjcyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyAyMi4xLjMuOSBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkZmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM0KShLRVkpO1xuXG5cbi8qKiovIH0pLFxuLyogMjczICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDIpKCdBcnJheScpO1xuXG5cbi8qKiovIH0pLFxuLyogMjc0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XG52YXIgZFAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLmY7XG52YXIgZ09QTiA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpLmY7XG52YXIgaXNSZWdFeHAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcbnZhciAkZmxhZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxKTtcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcbnZhciBCYXNlID0gJFJlZ0V4cDtcbnZhciBwcm90byA9ICRSZWdFeHAucHJvdG90eXBlO1xudmFyIHJlMSA9IC9hL2c7XG52YXIgcmUyID0gL2EvZztcbi8vIFwibmV3XCIgY3JlYXRlcyBhIG5ldyBvYmplY3QsIG9sZCB3ZWJraXQgYnVnZ3kgaGVyZVxudmFyIENPUlJFQ1RfTkVXID0gbmV3ICRSZWdFeHAocmUxKSAhPT0gcmUxO1xuXG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXyg2KSAmJiAoIUNPUlJFQ1RfTkVXIHx8IF9fd2VicGFja19yZXF1aXJlX18oMykoZnVuY3Rpb24gKCkge1xuICByZTJbX193ZWJwYWNrX3JlcXVpcmVfXyg1KSgnbWF0Y2gnKV0gPSBmYWxzZTtcbiAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgcmV0dXJuICRSZWdFeHAocmUxKSAhPSByZTEgfHwgJFJlZ0V4cChyZTIpID09IHJlMiB8fCAkUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG59KSkpIHtcbiAgJFJlZ0V4cCA9IGZ1bmN0aW9uIFJlZ0V4cChwLCBmKSB7XG4gICAgdmFyIHRpUkUgPSB0aGlzIGluc3RhbmNlb2YgJFJlZ0V4cDtcbiAgICB2YXIgcGlSRSA9IGlzUmVnRXhwKHApO1xuICAgIHZhciBmaVUgPSBmID09PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICF0aVJFICYmIHBpUkUgJiYgcC5jb25zdHJ1Y3RvciA9PT0gJFJlZ0V4cCAmJiBmaVUgPyBwXG4gICAgICA6IGluaGVyaXRJZlJlcXVpcmVkKENPUlJFQ1RfTkVXXG4gICAgICAgID8gbmV3IEJhc2UocGlSRSAmJiAhZmlVID8gcC5zb3VyY2UgOiBwLCBmKVxuICAgICAgICA6IEJhc2UoKHBpUkUgPSBwIGluc3RhbmNlb2YgJFJlZ0V4cCkgPyBwLnNvdXJjZSA6IHAsIHBpUkUgJiYgZmlVID8gJGZsYWdzLmNhbGwocCkgOiBmKVxuICAgICAgLCB0aVJFID8gdGhpcyA6IHByb3RvLCAkUmVnRXhwKTtcbiAgfTtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSBpbiAkUmVnRXhwIHx8IGRQKCRSZWdFeHAsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYXNlW2tleV07IH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBCYXNlW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlKSwgaSA9IDA7IGtleXMubGVuZ3RoID4gaTspIHByb3h5KGtleXNbaSsrXSk7XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJFJlZ0V4cDtcbiAgJFJlZ0V4cC5wcm90b3R5cGUgPSBwcm90bztcbiAgX193ZWJwYWNrX3JlcXVpcmVfXygxMykoZ2xvYmFsLCAnUmVnRXhwJywgJFJlZ0V4cCk7XG59XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDIpKCdSZWdFeHAnKTtcblxuXG4vKioqLyB9KSxcbi8qIDI3NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygxMjYpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciAkZmxhZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxKTtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDI3NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDYyKSgnbWF0Y2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgTUFUQ0gsICRtYXRjaCkge1xuICAvLyAyMS4xLjMuMTEgU3RyaW5nLnByb3RvdHlwZS5tYXRjaChyZWdleHApXG4gIHJldHVybiBbZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgfSwgJG1hdGNoXTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjc3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xuX193ZWJwYWNrX3JlcXVpcmVfXyg2MikoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2UpIHtcbiAgLy8gMjEuMS4zLjE0IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKVxuICByZXR1cm4gW2Z1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgdmFyIGZuID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWRcbiAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgOiAkcmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gIH0sICRyZXBsYWNlXTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjc4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDYyKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCkge1xuICAvLyAyMS4xLjMuMTUgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2gocmVnZXhwKVxuICByZXR1cm4gW2Z1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gIH0sICRzZWFyY2hdO1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNzkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gQEBzcGxpdCBsb2dpY1xuX193ZWJwYWNrX3JlcXVpcmVfXyg2MikoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB2YXIgaXNSZWdFeHAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcbiAgdmFyIF9zcGxpdCA9ICRzcGxpdDtcbiAgdmFyICRwdXNoID0gW10ucHVzaDtcbiAgdmFyICRTUExJVCA9ICdzcGxpdCc7XG4gIHZhciBMRU5HVEggPSAnbGVuZ3RoJztcbiAgdmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICB2YXIgTlBDRyA9IC8oKT8/Ly5leGVjKCcnKVsxXSA9PT0gdW5kZWZpbmVkOyAvLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cFxuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgICRzcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gX3NwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyA0Mjk0OTY3Mjk1IDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBzZXBhcmF0b3IyLCBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoLCBpO1xuICAgICAgLy8gRG9lc24ndCBuZWVkIGZsYWdzIGd5LCBidXQgdGhleSBkb24ndCBodXJ0XG4gICAgICBpZiAoIU5QQ0cpIHNlcGFyYXRvcjIgPSBuZXcgUmVnRXhwKCdeJyArIHNlcGFyYXRvckNvcHkuc291cmNlICsgJyQoPyFcXFxccyknLCBmbGFncyk7XG4gICAgICB3aGlsZSAobWF0Y2ggPSBzZXBhcmF0b3JDb3B5LmV4ZWMoc3RyaW5nKSkge1xuICAgICAgICAvLyBgc2VwYXJhdG9yQ29weS5sYXN0SW5kZXhgIGlzIG5vdCByZWxpYWJsZSBjcm9zcy1icm93c2VyXG4gICAgICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYCBmb3IgTlBDR1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgICAgICBpZiAoIU5QQ0cgJiYgbWF0Y2hbTEVOR1RIXSA+IDEpIG1hdGNoWzBdLnJlcGxhY2Uoc2VwYXJhdG9yMiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50c1tMRU5HVEhdIC0gMjsgaSsrKSBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgICRzcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6IF9zcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH1cbiAgLy8gMjEuMS4zLjE3IFN0cmluZy5wcm90b3R5cGUuc3BsaXQoc2VwYXJhdG9yLCBsaW1pdClcbiAgcmV0dXJuIFtmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgIHZhciBmbiA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KSA6ICRzcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gIH0sICRzcGxpdF07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI4MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIExJQlJBUlkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKTtcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgYW5JbnN0YW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xudmFyIGZvck9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Myk7XG52YXIgdGFzayA9IF9fd2VicGFja19yZXF1aXJlX18oOTgpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk5KSgpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDApO1xudmFyIHBlcmZvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyOCk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW19fd2VicGFja19yZXF1aXJlX18oNSkoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhlbXB0eSwgZW1wdHkpO1xuICAgIH07XG4gICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIHJldHVybiAoaXNOb2RlIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJykgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGggPiBpKSBydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgIHByb21pc2UuX24gPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpIG9uVW5oYW5kbGVkKHByb21pc2UpO1xuICB9KTtcbn07XG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgdW5oYW5kbGVkID0gaXNVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgdmFyIHJlc3VsdCwgaGFuZGxlciwgY29uc29sZTtcbiAgICBpZiAodW5oYW5kbGVkKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pIHtcbiAgICAgICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgfSBwcm9taXNlLl9hID0gdW5kZWZpbmVkO1xuICAgIGlmICh1bmhhbmRsZWQgJiYgcmVzdWx0LmUpIHRocm93IHJlc3VsdC52O1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICByZXR1cm4gcHJvbWlzZS5faCAhPT0gMSAmJiAocHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jKS5sZW5ndGggPT09IDA7XG59O1xudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpIHtcbiAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHByb21pc2UuX3YgfSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICBwcm9taXNlLl9zID0gMjtcbiAgaWYgKCFwcm9taXNlLl9hKSBwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgdmFyIHRoZW47XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmICh0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgJHJlamVjdC5jYWxsKHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9LCBlKTsgLy8gd3JhcFxuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHRoaXMuX2MgPSBbXTsgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG4gICAgdGhpcy5fYSA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgIHRoaXMuX3MgPSAwOyAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICB0aGlzLl9kID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIGRvbmVcbiAgICB0aGlzLl92ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIHZhbHVlXG4gICAgdGhpcy5faCA9IDA7ICAgICAgICAgICAgICAvLyA8LSByZWplY3Rpb24gc3RhdGUsIDAgLSBkZWZhdWx0LCAxIC0gaGFuZGxlZCwgMiAtIHVuaGFuZGxlZFxuICAgIHRoaXMuX24gPSBmYWxzZTsgICAgICAgICAgLy8gPC0gbm90aWZ5XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpKCRQcm9taXNlLnByb3RvdHlwZSwge1xuICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9hKSB0aGlzLl9hLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgfTtcbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFByb21pc2U6ICRQcm9taXNlIH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXyg0NikoJFByb21pc2UsIFBST01JU0UpO1xuX193ZWJwYWNrX3JlcXVpcmVfXyg0MikoUFJPTUlTRSk7XG5XcmFwcGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMilbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgX193ZWJwYWNrX3JlcXVpcmVfXyg2MCkoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjgxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgd2VhayA9IF9fd2VicGFja19yZXF1aXJlX18oMTMzKTtcbnZhciB2YWxpZGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xuX193ZWJwYWNrX3JlcXVpcmVfXyg2NCkoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG5cblxuLyoqKi8gfSksXG4vKiAyODIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkdHlwZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcbnZhciBidWZmZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMSk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oMzkpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgQXJyYXlCdWZmZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xudmFyICRBcnJheUJ1ZmZlciA9IGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbnZhciAkRGF0YVZpZXcgPSBidWZmZXIuRGF0YVZpZXc7XG52YXIgJGlzVmlldyA9ICR0eXBlZC5BQlYgJiYgQXJyYXlCdWZmZXIuaXNWaWV3O1xudmFyICRzbGljZSA9ICRBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG52YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEFycmF5QnVmZmVyICE9PSAkQXJyYXlCdWZmZXIpLCB7IEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISR0eXBlZC5DT05TVFIsIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjMuMSBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJnKVxuICBpc1ZpZXc6IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICAgIHJldHVybiAkaXNWaWV3ICYmICRpc1ZpZXcoaXQpIHx8IGlzT2JqZWN0KGl0KSAmJiBWSUVXIGluIGl0O1xuICB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlUgKyAkZXhwb3J0LkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFuZXcgJEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS40LjMgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKCRzbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJHNsaWNlLmNhbGwoYW5PYmplY3QodGhpcyksIHN0YXJ0KTsgLy8gRkYgZml4XG4gICAgdmFyIGxlbiA9IGFuT2JqZWN0KHRoaXMpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGZpcnN0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBmaW5hbCA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluYWwgLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluYWwpIHtcbiAgICAgIHZpZXdULnNldFVpbnQ4KGluZGV4KyssIHZpZXdTLmdldFVpbnQ4KGZpcnN0KyspKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQyKShBUlJBWV9CVUZGRVIpO1xuXG5cbi8qKiovIH0pLFxuLyogMjgzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIV9fd2VicGFja19yZXF1aXJlX18oNjUpLkFCViwge1xuICBEYXRhVmlldzogX193ZWJwYWNrX3JlcXVpcmVfXygxMDEpLkRhdGFWaWV3XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI4NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMwKSgnSW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjg1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzApKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI4NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMwKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0sIHRydWUpO1xuXG5cbi8qKiovIH0pLFxuLyogMjg3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzApKCdJbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI4OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMwKSgnVWludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI4OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMwKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyOTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMCkoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyOTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMCkoJ0Zsb2F0MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI5MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMwKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjkzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDI2LjEuMSBSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciByQXBwbHkgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygyKS5SZWZsZWN0IHx8IHt9KS5hcHBseTtcbnZhciBmQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcbi8vIE1TIEVkZ2UgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXygzKShmdW5jdGlvbiAoKSB7XG4gIHJBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICB2YXIgVCA9IGFGdW5jdGlvbih0YXJnZXQpO1xuICAgIHZhciBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyOTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNCk7XG52YXIgckNvbnN0cnVjdCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjk1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIF9fd2VicGFja19yZXF1aXJlX18oMykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI5NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyNi4xLjQgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGdPUEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KS5mO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyOTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIDI2LjEuNSBSZWZsZWN0LmVudW1lcmF0ZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg5KShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI5OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyNi4xLjYgUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSBbLCByZWNlaXZlcl0pXG52YXIgZ09QRCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IGFyZ3VtZW50c1syXTtcbiAgdmFyIGRlc2MsIHByb3RvO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBpZiAoZGVzYyA9IGdPUEQuZih0YXJnZXQsIHByb3BlcnR5S2V5KSkgcmV0dXJuIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgID8gZGVzYy52YWx1ZVxuICAgIDogZGVzYy5nZXQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IGdldDogZ2V0IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjk5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDMwMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgZ2V0UHJvdG8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDI2LjEuMTAgUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IG93bktleXM6IF9fd2VicGFja19yZXF1aXJlX18oMTM1KSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDMwNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyAyNi4xLjEyIFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnModGFyZ2V0KVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG52YXIgZ09QRCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgY3JlYXRlRGVzYyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDQgPyB0YXJnZXQgOiBhcmd1bWVudHNbM107XG4gIHZhciBvd25EZXNjID0gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgdmFyIGV4aXN0aW5nRGVzY3JpcHRvciwgcHJvdG87XG4gIGlmICghb3duRGVzYykge1xuICAgIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSB7XG4gICAgICByZXR1cm4gc2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgViwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICBvd25EZXNjID0gY3JlYXRlRGVzYygwKTtcbiAgfVxuICBpZiAoaGFzKG93bkRlc2MsICd2YWx1ZScpKSB7XG4gICAgaWYgKG93bkRlc2Mud3JpdGFibGUgPT09IGZhbHNlIHx8ICFpc09iamVjdChyZWNlaXZlcikpIHJldHVybiBmYWxzZTtcbiAgICBleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSB8fCBjcmVhdGVEZXNjKDApO1xuICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG93bkRlc2Muc2V0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IChvd25EZXNjLnNldC5jYWxsKHJlY2VpdmVyLCBWKSwgdHJ1ZSk7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgc2V0OiBzZXQgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgc2V0UHJvdG8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkaW5jbHVkZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2KSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzQpKCdpbmNsdWRlcycpO1xuXG5cbi8qKiovIH0pLFxuLyogMzA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdE1hcFxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM0KSgnZmxhdE1hcCcpO1xuXG5cbi8qKiovIH0pLFxuLyogMzA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdHRlblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciB0b0ludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzNCkoJ2ZsYXR0ZW4nKTtcblxuXG4vKioqLyB9KSxcbi8qIDMxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRhdCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgJHBhZCA9IF9fd2VicGFja19yZXF1aXJlX18oMTM3KTtcbnZhciB1c2VyQWdlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMik7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDMxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkcGFkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzcpO1xudmFyIHVzZXJBZ2VudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTAyKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCksICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcblxuXG4vKioqLyB9KSxcbi8qIDMxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG5cblxuLyoqKi8gfSksXG4vKiAzMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBkZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGlzUmVnRXhwID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OSk7XG52YXIgZ2V0RmxhZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxKTtcbnZhciBSZWdFeHBQcm90byA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBmdW5jdGlvbiAocmVnZXhwLCBzdHJpbmcpIHtcbiAgdGhpcy5fciA9IHJlZ2V4cDtcbiAgdGhpcy5fcyA9IHN0cmluZztcbn07XG5cbl9fd2VicGFja19yZXF1aXJlX18oODkpKCRSZWdFeHBTdHJpbmdJdGVyYXRvciwgJ1JlZ0V4cCBTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgbWF0Y2ggPSB0aGlzLl9yLmV4ZWModGhpcy5fcyk7XG4gIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogbWF0Y2ggPT09IG51bGwgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIGRlZmluZWQodGhpcyk7XG4gICAgaWYgKCFpc1JlZ0V4cChyZWdleHApKSB0aHJvdyBUeXBlRXJyb3IocmVnZXhwICsgJyBpcyBub3QgYSByZWdleHAhJyk7XG4gICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgdmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSZWdFeHBQcm90byA/IFN0cmluZyhyZWdleHAuZmxhZ3MpIDogZ2V0RmxhZ3MuY2FsbChyZWdleHApO1xuICAgIHZhciByeCA9IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgfmZsYWdzLmluZGV4T2YoJ2cnKSA/IGZsYWdzIDogJ2cnICsgZmxhZ3MpO1xuICAgIHJ4Lmxhc3RJbmRleCA9IHRvTGVuZ3RoKHJlZ2V4cC5sYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJ4LCBTKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3NykoJ2FzeW5jSXRlcmF0b3InKTtcblxuXG4vKioqLyB9KSxcbi8qIDMxNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc3KSgnb2JzZXJ2YWJsZScpO1xuXG5cbi8qKiovIH0pLFxuLyogMzE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgb3duS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM1KTtcbnZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciBnT1BEID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG52YXIgY3JlYXRlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICR2YWx1ZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOCkoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzIwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRlbnRyaWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzgpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzIxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cbi8vIEIuMi4yLjIgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKFAsIGdldHRlcilcbl9fd2VicGFja19yZXF1aXJlX18oNikgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyBfX3dlYnBhY2tfcmVxdWlyZV9fKDY2KSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzIyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cbi8vIEIuMi4yLjMgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcilcbl9fd2VicGFja19yZXF1aXJlX18oNikgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyBfX3dlYnBhY2tfcmVxdWlyZV9fKDY2KSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVTZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBzZXQ6IGFGdW5jdGlvbihzZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzIzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KS5mO1xuXG4vLyBCLjIuMi40IE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBHZXR0ZXJfXyhQKVxuX193ZWJwYWNrX3JlcXVpcmVfXyg2KSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIF9fd2VicGFja19yZXF1aXJlX18oNjYpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDMyNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbnZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNikuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbl9fd2VicGFja19yZXF1aXJlX18oNikgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyBfX3dlYnBhY2tfcmVxdWlyZV9fKDY2KSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBTZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5zZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ01hcCcsIHsgdG9KU09OOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOSkoJ01hcCcpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzI2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogX193ZWJwYWNrX3JlcXVpcmVfXygxMzkpKCdTZXQnKSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDMyNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAub2Zcbl9fd2VicGFja19yZXF1aXJlX18oNjcpKCdNYXAnKTtcblxuXG4vKioqLyB9KSxcbi8qIDMyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQub2Zcbl9fd2VicGFja19yZXF1aXJlX18oNjcpKCdTZXQnKTtcblxuXG4vKioqLyB9KSxcbi8qIDMyOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLm9mXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDY3KSgnV2Vha01hcCcpO1xuXG5cbi8qKiovIH0pLFxuLyogMzMwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQub2Zcbl9fd2VicGFja19yZXF1aXJlX18oNjcpKCdXZWFrU2V0Jyk7XG5cblxuLyoqKi8gfSksXG4vKiAzMzEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbl9fd2VicGFja19yZXF1aXJlX18oNjgpKCdNYXAnKTtcblxuXG4vKioqLyB9KSxcbi8qIDMzMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxuX193ZWJwYWNrX3JlcXVpcmVfXyg2OCkoJ1NldCcpO1xuXG5cbi8qKiovIH0pLFxuLyogMzMzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAuZnJvbVxuX193ZWJwYWNrX3JlcXVpcmVfXyg2OCkoJ1dlYWtNYXAnKTtcblxuXG4vKioqLyB9KSxcbi8qIDMzNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbl9fd2VicGFja19yZXF1aXJlX18oNjgpKCdXZWFrU2V0Jyk7XG5cblxuLyoqKi8gfSksXG4vKiAzMzUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IGdsb2JhbDogX193ZWJwYWNrX3JlcXVpcmVfXygyKSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDMzNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogX193ZWJwYWNrX3JlcXVpcmVfXygyKSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDMzNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL3Byb3Bvc2FsLWlzLWVycm9yXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRXJyb3InLCB7XG4gIGlzRXJyb3I6IGZ1bmN0aW9uIGlzRXJyb3IoaXQpIHtcbiAgICByZXR1cm4gY29mKGl0KSA9PT0gJ0Vycm9yJztcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzMzggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzM5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDM0MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzQxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBzY2FsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQxKTtcbnZhciBmcm91bmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDM0MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlzdWJoOiBmdW5jdGlvbiBpc3ViaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgLSAoeTEgPj4+IDApIC0gKCh+JHgwICYgJHkwIHwgfigkeDAgXiAkeTApICYgJHgwIC0gJHkwID4+PiAwKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpbXVsaDogZnVuY3Rpb24gaW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+PiAxNik7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzQ1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDM0NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzQ3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogX193ZWJwYWNrX3JlcXVpcmVfXygxNDEpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzQ4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbmJpdDogZnVuY3Rpb24gc2lnbmJpdCh4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpICE9IHggPyB4IDogeCA9PSAwID8gMSAvIHggPT0gSW5maW5pdHkgOiB4ID4gMDtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIGNvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xudmFyIHByb21pc2VSZXNvbHZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjgpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDM1MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IF9fd2VicGFja19yZXF1aXJlX18oMTAwKTtcbnZhciBwZXJmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIG1ldGFkYXRhID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gbWV0YWRhdGEuc2V0O1xuXG5tZXRhZGF0YS5leHAoeyBkZWZpbmVNZXRhZGF0YTogZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIGFuT2JqZWN0KHRhcmdldCksIHRvTWV0YUtleSh0YXJnZXRLZXkpKTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIG1ldGFkYXRhID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIG1ldGFkYXRhID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5R2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiB1bmRlZmluZWQ7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YTogZnVuY3Rpb24gZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzU1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBTZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMSk7XG52YXIgZnJvbSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcbnZhciBtZXRhZGF0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIG1ldGFkYXRhID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YTogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzU3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBtZXRhZGF0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDM1OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgbWV0YWRhdGEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDM1OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgbWV0YWRhdGEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRtZXRhZGF0YSA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgbWljcm90YXNrID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OSkoKTtcbnZhciBwcm9jZXNzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5wcm9jZXNzO1xudmFyIGlzTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHtcbiAgYXNhcDogZnVuY3Rpb24gYXNhcChmbikge1xuICAgIHZhciBkb21haW4gPSBpc05vZGUgJiYgcHJvY2Vzcy5kb21haW47XG4gICAgbWljcm90YXNrKGRvbWFpbiA/IGRvbWFpbi5iaW5kKGZuKSA6IGZuKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGNvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcbnZhciBtaWNyb3Rhc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk5KSgpO1xudmFyIE9CU0VSVkFCTEUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGFuSW5zdGFuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcbnZhciByZWRlZmluZUFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xudmFyIGhpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZhciBmb3JPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xudmFyIFJFVFVSTiA9IGZvck9mLlJFVFVSTjtcblxudmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZm4gPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFGdW5jdGlvbihmbik7XG59O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2M7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9jID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXAoKTtcbiAgfVxufTtcblxudmFyIHN1YnNjcmlwdGlvbkNsb3NlZCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbi5fbyA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgfVxufTtcblxudmFyIFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICBhbk9iamVjdChvYnNlcnZlcik7XG4gIHRoaXMuX2MgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX28gPSBvYnNlcnZlcjtcbiAgb2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcyk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKG9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgZWxzZSBhRnVuY3Rpb24oY2xlYW51cCk7XG4gICAgICB0aGlzLl9jID0gY2xlYW51cDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZCh0aGlzKSkgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbn07XG5cblN1YnNjcmlwdGlvbi5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7IGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpOyB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB0aGlzLl9zID0gc3Vic2NyaXB0aW9uO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLm5leHQpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB0aHJvdyB2YWx1ZTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5lcnJvcik7XG4gICAgICBpZiAoIW0pIHRocm93IHZhbHVlO1xuICAgICAgdmFsdWUgPSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuY29tcGxldGUpO1xuICAgICAgICB2YWx1ZSA9IG0gPyBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudmFyICRPYnNlcnZhYmxlID0gZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmVyKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgJE9ic2VydmFibGUsICdPYnNlcnZhYmxlJywgJ19mJykuX2YgPSBhRnVuY3Rpb24oc3Vic2NyaWJlcik7XG59O1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIHtcbiAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fZik7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyAoY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhRnVuY3Rpb24oZm4pO1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoYXQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlO1xuICAgIHZhciBtZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeClbT0JTRVJWQUJMRV0pO1xuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3QobWV0aG9kLmNhbGwoeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZm9yT2YoeCwgZmFsc2UsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybiBSRVRVUk47XG4gICAgICAgICAgICB9KSA9PT0gUkVUVVJOKSByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHRocm93IGU7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZW1zID0gbmV3IEFycmF5KGwpOyBpIDwgbDspIGl0ZW1zW2ldID0gYXJndW1lbnRzW2krK107XG4gICAgcmV0dXJuIG5ldyAodHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGUpKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbal0pO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5oaWRlKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IE9ic2VydmFibGU6ICRPYnNlcnZhYmxlIH0pO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQyKSgnT2JzZXJ2YWJsZScpO1xuXG5cbi8qKiovIH0pLFxuLyogMzYzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIHVzZXJBZ2VudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTAyKTtcbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIE1TSUUgPSAvTVNJRSAuXFwuLy50ZXN0KHVzZXJBZ2VudCk7IC8vIDwtIGRpcnR5IGllOS0gY2hlY2tcbnZhciB3cmFwID0gZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGZuLCB0aW1lIC8qICwgLi4uYXJncyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICB2YXIgYXJncyA9IGJvdW5kQXJncyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGZhbHNlO1xuICAgIHJldHVybiBzZXQoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGZuLCB0aW1lKTtcbiAgfTtcbn07XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiArICRleHBvcnQuRiAqIE1TSUUsIHtcbiAgc2V0VGltZW91dDogd3JhcChnbG9iYWwuc2V0VGltZW91dCksXG4gIHNldEludGVydmFsOiB3cmFwKGdsb2JhbC5zZXRJbnRlcnZhbClcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzY0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciAkdGFzayA9IF9fd2VicGFja19yZXF1aXJlX18oOTgpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG5cblxuLyoqKi8gfSksXG4vKiAzNjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRpdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3KTtcbnZhciBnZXRLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XG52YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGhpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcbnZhciB3a3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG5cblxuLyoqKi8gfSksXG4vKiAzNjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkgey8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvbWFzdGVyL0xJQ0VOU0UgZmlsZS4gQW5cbiAqIGFkZGl0aW9uYWwgZ3JhbnQgb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpblxuICogdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbiEoZnVuY3Rpb24oZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgdmFyIGluTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIjtcbiAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuICBpZiAocnVudGltZSkge1xuICAgIGlmIChpbk1vZHVsZSkge1xuICAgICAgLy8gSWYgcmVnZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxlLFxuICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cbiAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZWZpbmUgdGhlIHJ1bnRpbWUgZ2xvYmFsbHkgKGFzIGV4cGVjdGVkIGJ5IGdlbmVyYXRlZCBjb2RlKSBhcyBlaXRoZXJcbiAgLy8gbW9kdWxlLmV4cG9ydHMgKGlmIHdlJ3JlIGluIGEgbW9kdWxlKSBvciBhIG5ldywgZW1wdHkgb2JqZWN0LlxuICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIHJ1bnRpbWUubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi4gSWYgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQsIGhvd2V2ZXIsIHRoZVxuICAgICAgICAgIC8vIHJlc3VsdCBmb3IgdGhpcyBpdGVyYXRpb24gd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBzYW1lXG4gICAgICAgICAgLy8gcmVhc29uLiBOb3RlIHRoYXQgcmVqZWN0aW9ucyBvZiB5aWVsZGVkIFByb21pc2VzIGFyZSBub3RcbiAgICAgICAgICAvLyB0aHJvd24gYmFjayBpbnRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIGFzIGlzIHRoZSBjYXNlXG4gICAgICAgICAgLy8gd2hlbiBhbiBhd2FpdGVkIFByb21pc2UgaXMgcmVqZWN0ZWQuIFRoaXMgZGlmZmVyZW5jZSBpblxuICAgICAgICAgIC8vIGJlaGF2aW9yIGJldHdlZW4geWllbGQgYW5kIGF3YWl0IGlzIGltcG9ydGFudCwgYmVjYXVzZSBpdFxuICAgICAgICAgIC8vIGFsbG93cyB0aGUgY29uc3VtZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgeWllbGRlZFxuICAgICAgICAgIC8vIHJlamVjdGlvbiAoc3dhbGxvdyBpdCBhbmQgY29udGludWUsIG1hbnVhbGx5IC50aHJvdyBpdCBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgZ2VuZXJhdG9yLCBhYmFuZG9uIGl0ZXJhdGlvbiwgd2hhdGV2ZXIpLiBXaXRoXG4gICAgICAgICAgLy8gYXdhaXQsIGJ5IGNvbnRyYXN0LCB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBleGFtaW5lIHRoZVxuICAgICAgICAgIC8vIHJlamVjdGlvbiByZWFzb24gb3V0c2lkZSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBzbyB0aGVcbiAgICAgICAgICAvLyBvbmx5IG9wdGlvbiBpcyB0byB0aHJvdyBpdCBmcm9tIHRoZSBhd2FpdCBleHByZXNzaW9uLCBhbmRcbiAgICAgICAgICAvLyBsZXQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgZ2xvYmFsLnByb2Nlc3MuZG9tYWluKSB7XG4gICAgICBpbnZva2UgPSBnbG9iYWwucHJvY2Vzcy5kb21haW4uYmluZChpbnZva2UpO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yLnJldHVybikge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gQW1vbmcgdGhlIHZhcmlvdXMgdHJpY2tzIGZvciBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbFxuICAvLyBvYmplY3QsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vc3QgcmVsaWFibGUgdGVjaG5pcXVlIHRoYXQgZG9lcyBub3RcbiAgLy8gdXNlIGluZGlyZWN0IGV2YWwgKHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KS5cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzXG4pO1xuXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyg1MCkpKVxuXG4vKioqLyB9KSxcbi8qIDM2NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM2OCk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpLlJlZ0V4cC5lc2NhcGU7XG5cblxuLyoqKi8gfSksXG4vKiAzNjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyICRyZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzY5KSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMzY5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlZ0V4cCwgcmVwbGFjZSkge1xuICB2YXIgcmVwbGFjZXIgPSByZXBsYWNlID09PSBPYmplY3QocmVwbGFjZSkgPyBmdW5jdGlvbiAocGFydCkge1xuICAgIHJldHVybiByZXBsYWNlW3BhcnRdO1xuICB9IDogcmVwbGFjZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBTdHJpbmcoaXQpLnJlcGxhY2UocmVnRXhwLCByZXBsYWNlcik7XG4gIH07XG59O1xuXG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2NyZWF0ZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9nZXQtcHJvdG90eXBlLW9mXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbFwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3JcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpO1xuXG52YXIgX2RlZmluZVByb3BlcnR5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZmluZVByb3BlcnR5KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiKTtcblxudmFyIF9zZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zZXRQcm90b3R5cGVPZik7XG5cbnZhciBfY3JlYXRlID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2NyZWF0ZVwiKTtcblxudmFyIF9jcmVhdGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlKTtcblxudmFyIF90eXBlb2YyID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgX3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90eXBlb2YyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArICh0eXBlb2Ygc3VwZXJDbGFzcyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiAoMCwgX3R5cGVvZjMuZGVmYXVsdCkoc3VwZXJDbGFzcykpKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9ICgwLCBfY3JlYXRlMi5kZWZhdWx0KShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mMi5kZWZhdWx0ID8gKDAsIF9zZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdHlwZW9mMiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIF90eXBlb2YzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHlwZW9mMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChzZWxmLCBjYWxsKSB7XG4gIGlmICghc2VsZikge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBjYWxsICYmICgodHlwZW9mIGNhbGwgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKGNhbGwpKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9pdGVyYXRvciA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvclwiKTtcblxudmFyIF9pdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pdGVyYXRvcik7XG5cbnZhciBfc3ltYm9sID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sXCIpO1xuXG52YXIgX3N5bWJvbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1ib2wpO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIF9pdGVyYXRvcjIuZGVmYXVsdCA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YoX2l0ZXJhdG9yMi5kZWZhdWx0KSA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufTsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKSB7XG4gIHJldHVybiAkT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuICRPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlN5bWJvbDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX3drcy1leHQnKS5mKCdpdGVyYXRvcicpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjYuOScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciBJU19XUkFQID0gdHlwZSAmICRleHBvcnQuVztcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGtleSwgb3duLCBvdXQ7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG93biAmJiBoYXMoZXhwb3J0cywga2V5KSkgY29udGludWU7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSBvd24gPyB0YXJnZXRba2V5XSA6IHNvdXJjZVtrZXldO1xuICAgIC8vIHByZXZlbnQgZ2xvYmFsIHBvbGx1dGlvbiBmb3IgbmFtZXNwYWNlc1xuICAgIGV4cG9ydHNba2V5XSA9IElTX0dMT0JBTCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0gJ2Z1bmN0aW9uJyA/IHNvdXJjZVtrZXldXG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICA6IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKVxuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2UgdGhlbSBpbiBsaWJyYXJ5XG4gICAgOiBJU19XUkFQICYmIHRhcmdldFtrZXldID09IG91dCA/IChmdW5jdGlvbiAoQykge1xuICAgICAgdmFyIEYgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEMpIHtcbiAgICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDKCk7XG4gICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQyhhKTtcbiAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDKGEsIGIpO1xuICAgICAgICAgIH0gcmV0dXJuIG5ldyBDKGEsIGIsIGMpO1xuICAgICAgICB9IHJldHVybiBDLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgICAgRltQUk9UT1RZUEVdID0gQ1tQUk9UT1RZUEVdO1xuICAgICAgcmV0dXJuIEY7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgfSkob3V0KSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5tZXRob2RzLiVOQU1FJVxuICAgIGlmIChJU19QUk9UTykge1xuICAgICAgKGV4cG9ydHMudmlydHVhbCB8fCAoZXhwb3J0cy52aXJ0dWFsID0ge30pKVtrZXldID0gb3V0O1xuICAgICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLnByb3RvdHlwZS4lTkFNRSVcbiAgICAgIGlmICh0eXBlICYgJGV4cG9ydC5SICYmIGV4cFByb3RvICYmICFleHBQcm90b1trZXldKSBoaWRlKGV4cFByb3RvLCBrZXksIG91dCk7XG4gICAgfVxuICB9XG59O1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faGlkZScpO1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiIsIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcbiIsInJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBUT19TVFJJTkdfVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbnZhciBET01JdGVyYWJsZXMgPSAoJ0NTU1J1bGVMaXN0LENTU1N0eWxlRGVjbGFyYXRpb24sQ1NTVmFsdWVMaXN0LENsaWVudFJlY3RMaXN0LERPTVJlY3RMaXN0LERPTVN0cmluZ0xpc3QsJyArXG4gICdET01Ub2tlbkxpc3QsRGF0YVRyYW5zZmVySXRlbUxpc3QsRmlsZUxpc3QsSFRNTEFsbENvbGxlY3Rpb24sSFRNTENvbGxlY3Rpb24sSFRNTEZvcm1FbGVtZW50LEhUTUxTZWxlY3RFbGVtZW50LCcgK1xuICAnTWVkaWFMaXN0LE1pbWVUeXBlQXJyYXksTmFtZWROb2RlTWFwLE5vZGVMaXN0LFBhaW50UmVxdWVzdExpc3QsUGx1Z2luLFBsdWdpbkFycmF5LFNWR0xlbmd0aExpc3QsU1ZHTnVtYmVyTGlzdCwnICtcbiAgJ1NWR1BhdGhTZWdMaXN0LFNWR1BvaW50TGlzdCxTVkdTdHJpbmdMaXN0LFNWR1RyYW5zZm9ybUxpc3QsU291cmNlQnVmZmVyTGlzdCxTdHlsZVNoZWV0TGlzdCxUZXh0VHJhY2tDdWVMaXN0LCcgK1xuICAnVGV4dFRyYWNrTGlzdCxUb3VjaExpc3QnKS5zcGxpdCgnLCcpO1xuXG5mb3IgKHZhciBpID0gMDsgaSA8IERPTUl0ZXJhYmxlcy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IERPTUl0ZXJhYmxlc1tpXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChwcm90byAmJiAhcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICBJdGVyYXRvcnNbTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCIvKiFcbiAgQ29weXJpZ2h0IChjKSAyMDE1IEplZCBXYXRzb24uXG4gIEJhc2VkIG9uIGNvZGUgdGhhdCBpcyBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBjYW5Vc2VET00gPSAhIShcblx0XHR0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuXHRcdHdpbmRvdy5kb2N1bWVudCAmJlxuXHRcdHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50XG5cdCk7XG5cblx0dmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0ge1xuXG5cdFx0Y2FuVXNlRE9NOiBjYW5Vc2VET00sXG5cblx0XHRjYW5Vc2VXb3JrZXJzOiB0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJyxcblxuXHRcdGNhblVzZUV2ZW50TGlzdGVuZXJzOlxuXHRcdFx0Y2FuVXNlRE9NICYmICEhKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyIHx8IHdpbmRvdy5hdHRhY2hFdmVudCksXG5cblx0XHRjYW5Vc2VWaWV3cG9ydDogY2FuVXNlRE9NICYmICEhd2luZG93LnNjcmVlblxuXG5cdH07XG5cblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIEV4ZWN1dGlvbkVudmlyb25tZW50O1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBFeGVjdXRpb25FbnZpcm9ubWVudDtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuRXhlY3V0aW9uRW52aXJvbm1lbnQgPSBFeGVjdXRpb25FbnZpcm9ubWVudDtcblx0fVxuXG59KCkpO1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cbiAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNrLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICAgICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAgICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICAgICAgICApO1xuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xuICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXG4gICAgICAgICAgICAvLyBBdm9pZCBzcGFtbWluZyB0aGUgY29uc29sZSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG5vdCBhY3Rpb25hYmxlIGV4Y2VwdCBmb3IgbGliIGF1dGhvcnNcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb21cbiAgICAgIC8vIHByb3BzLlxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gYWxsS2V5cykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjguNlxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7XG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpO1xufVxuXG4vKipcbiAqIEZvcmtlZCBmcm9tIGZianMvd2FybmluZzpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mYmpzL2Jsb2IvZTY2YmEyMGFkNWJlNDMzZWI1NDQyM2YyYjA5N2Q4MjkzMjRkOWRlNi9wYWNrYWdlcy9mYmpzL3NyYy9fX2ZvcmtzX18vd2FybmluZy5qc1xuICpcbiAqIE9ubHkgY2hhbmdlIGlzIHdlIHVzZSBjb25zb2xlLndhcm4gaW5zdGVhZCBvZiBjb25zb2xlLmVycm9yLFxuICogYW5kIGRvIG5vdGhpbmcgd2hlbiAnY29uc29sZScgaXMgbm90IHN1cHBvcnRlZC5cbiAqIFRoaXMgcmVhbGx5IHNpbXBsaWZpZXMgdGhlIGNvZGUuXG4gKiAtLS1cbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgbG93UHJpb3JpdHlXYXJuaW5nID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG5cbiAgbG93UHJpb3JpdHlXYXJuaW5nID0gZnVuY3Rpb24gKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Bsb3dQcmlvcml0eVdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZy5hcHBseSh1bmRlZmluZWQsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgbG93UHJpb3JpdHlXYXJuaW5nJDEgPSBsb3dQcmlvcml0eVdhcm5pbmc7XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuXG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTtcblxuLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTtcbiAgICAgIGxvd1ByaW9yaXR5V2FybmluZyQxKGZhbHNlLCAnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCB1bmRlZjtcblxuLyoqXG4gKiBEZWNvZGUgYSBVUkkgZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBVUkkgZW5jb2RlZCBzdHJpbmcuXG4gKiBAcmV0dXJucyB7U3RyaW5nfE51bGx9IFRoZSBkZWNvZGVkIHN0cmluZy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0LnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gZW5jb2RlIGEgZ2l2ZW4gaW5wdXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBlbmNvZGVkLlxuICogQHJldHVybnMge1N0cmluZ3xOdWxsfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFNpbXBsZSBxdWVyeSBzdHJpbmcgcGFyc2VyLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSBUaGUgcXVlcnkgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLlxuICogQHJldHVybnMge09iamVjdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5c3RyaW5nKHF1ZXJ5KSB7XG4gIHZhciBwYXJzZXIgPSAvKFtePT8mXSspPT8oW14mXSopL2dcbiAgICAsIHJlc3VsdCA9IHt9XG4gICAgLCBwYXJ0O1xuXG4gIHdoaWxlIChwYXJ0ID0gcGFyc2VyLmV4ZWMocXVlcnkpKSB7XG4gICAgdmFyIGtleSA9IGRlY29kZShwYXJ0WzFdKVxuICAgICAgLCB2YWx1ZSA9IGRlY29kZShwYXJ0WzJdKTtcblxuICAgIC8vXG4gICAgLy8gUHJldmVudCBvdmVycmlkaW5nIG9mIGV4aXN0aW5nIHByb3BlcnRpZXMuIFRoaXMgZW5zdXJlcyB0aGF0IGJ1aWxkLWluXG4gICAgLy8gbWV0aG9kcyBsaWtlIGB0b1N0cmluZ2Agb3IgX19wcm90b19fIGFyZSBub3Qgb3ZlcnJpZGVuIGJ5IG1hbGljaW91c1xuICAgIC8vIHF1ZXJ5c3RyaW5ncy5cbiAgICAvL1xuICAgIC8vIEluIHRoZSBjYXNlIGlmIGZhaWxlZCBkZWNvZGluZywgd2Ugd2FudCB0byBvbWl0IHRoZSBrZXkvdmFsdWUgcGFpcnNcbiAgICAvLyBmcm9tIHRoZSByZXN1bHQuXG4gICAgLy9cbiAgICBpZiAoa2V5ID09PSBudWxsIHx8IHZhbHVlID09PSBudWxsIHx8IGtleSBpbiByZXN1bHQpIGNvbnRpbnVlO1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhIHF1ZXJ5IHN0cmluZyB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdGhhdCBzaG91bGQgYmUgdHJhbnNmb3JtZWQuXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJlZml4IE9wdGlvbmFsIHByZWZpeC5cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBxdWVyeXN0cmluZ2lmeShvYmosIHByZWZpeCkge1xuICBwcmVmaXggPSBwcmVmaXggfHwgJyc7XG5cbiAgdmFyIHBhaXJzID0gW11cbiAgICAsIHZhbHVlXG4gICAgLCBrZXk7XG5cbiAgLy9cbiAgLy8gT3B0aW9uYWxseSBwcmVmaXggd2l0aCBhICc/JyBpZiBuZWVkZWRcbiAgLy9cbiAgaWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgcHJlZml4KSBwcmVmaXggPSAnPyc7XG5cbiAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgLy9cbiAgICAgIC8vIEVkZ2UgY2FzZXMgd2hlcmUgd2UgYWN0dWFsbHkgd2FudCB0byBlbmNvZGUgdGhlIHZhbHVlIHRvIGFuIGVtcHR5XG4gICAgICAvLyBzdHJpbmcgaW5zdGVhZCBvZiB0aGUgc3RyaW5naWZpZWQgdmFsdWUuXG4gICAgICAvL1xuICAgICAgaWYgKCF2YWx1ZSAmJiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmIHx8IGlzTmFOKHZhbHVlKSkpIHtcbiAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgIH1cblxuICAgICAga2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XG4gICAgICB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gZW5jb2RlIHRoZSBzdHJpbmdzLCB3ZSBzaG91bGQgYmFpbCBvdXQgYXMgd2UgZG9uJ3RcbiAgICAgIC8vIHdhbnQgdG8gYWRkIGludmFsaWQgc3RyaW5ncyB0byB0aGUgcXVlcnkuXG4gICAgICAvL1xuICAgICAgaWYgKGtleSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gbnVsbCkgY29udGludWU7XG4gICAgICBwYWlycy5wdXNoKGtleSArJz0nKyB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhaXJzLmxlbmd0aCA/IHByZWZpeCArIHBhaXJzLmpvaW4oJyYnKSA6ICcnO1xufVxuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuZXhwb3J0cy5zdHJpbmdpZnkgPSBxdWVyeXN0cmluZ2lmeTtcbmV4cG9ydHMucGFyc2UgPSBxdWVyeXN0cmluZztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAvLyBDYWxsIHRoaXMuY29uc3RydWN0b3IuZ0RTRlAgdG8gc3VwcG9ydCBzdWItY2xhc3Nlcy5cbiAgdmFyIHN0YXRlID0gdGhpcy5jb25zdHJ1Y3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHModGhpcy5wcm9wcywgdGhpcy5zdGF0ZSk7XG4gIGlmIChzdGF0ZSAhPT0gbnVsbCAmJiBzdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgLy8gQ2FsbCB0aGlzLmNvbnN0cnVjdG9yLmdEU0ZQIHRvIHN1cHBvcnQgc3ViLWNsYXNzZXMuXG4gIC8vIFVzZSB0aGUgc2V0U3RhdGUoKSB1cGRhdGVyIHRvIGVuc3VyZSBzdGF0ZSBpc24ndCBzdGFsZSBpbiBjZXJ0YWluIGVkZ2UgY2FzZXMuXG4gIGZ1bmN0aW9uIHVwZGF0ZXIocHJldlN0YXRlKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5jb25zdHJ1Y3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHJldHVybiBzdGF0ZSAhPT0gbnVsbCAmJiBzdGF0ZSAhPT0gdW5kZWZpbmVkID8gc3RhdGUgOiBudWxsO1xuICB9XG4gIC8vIEJpbmRpbmcgXCJ0aGlzXCIgaXMgaW1wb3J0YW50IGZvciBzaGFsbG93IHJlbmRlcmVyIHN1cHBvcnQuXG4gIHRoaXMuc2V0U3RhdGUodXBkYXRlci5iaW5kKHRoaXMpKTtcbn1cblxuZnVuY3Rpb24gY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICB0cnkge1xuICAgIHZhciBwcmV2UHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHZhciBwcmV2U3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHRoaXMucHJvcHMgPSBuZXh0UHJvcHM7XG4gICAgdGhpcy5zdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICB0aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90RmxhZyA9IHRydWU7XG4gICAgdGhpcy5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdCA9IHRoaXMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoXG4gICAgICBwcmV2UHJvcHMsXG4gICAgICBwcmV2U3RhdGVcbiAgICApO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMucHJvcHMgPSBwcmV2UHJvcHM7XG4gICAgdGhpcy5zdGF0ZSA9IHByZXZTdGF0ZTtcbiAgfVxufVxuXG4vLyBSZWFjdCBtYXkgd2FybiBhYm91dCBjV00vY1dSUC9jV1UgbWV0aG9kcyBiZWluZyBkZXByZWNhdGVkLlxuLy8gQWRkIGEgZmxhZyB0byBzdXBwcmVzcyB0aGVzZSB3YXJuaW5ncyBmb3IgdGhpcyBzcGVjaWFsIGNhc2UuXG5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyA9IHRydWU7XG5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgPSB0cnVlO1xuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nID0gdHJ1ZTtcblxuZnVuY3Rpb24gcG9seWZpbGwoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuXG4gIGlmICghcHJvdG90eXBlIHx8ICFwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgcG9seWZpbGwgY2xhc3MgY29tcG9uZW50cycpO1xuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb3RvdHlwZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm4gQ29tcG9uZW50O1xuICB9XG5cbiAgLy8gSWYgbmV3IGNvbXBvbmVudCBBUElzIGFyZSBkZWZpbmVkLCBcInVuc2FmZVwiIGxpZmVjeWNsZXMgd29uJ3QgYmUgY2FsbGVkLlxuICAvLyBFcnJvciBpZiBhbnkgb2YgdGhlc2UgbGlmZWN5Y2xlcyBhcmUgcHJlc2VudCxcbiAgLy8gQmVjYXVzZSB0aGV5IHdvdWxkIHdvcmsgZGlmZmVyZW50bHkgYmV0d2VlbiBvbGRlciBhbmQgbmV3ZXIgKDE2LjMrKSB2ZXJzaW9ucyBvZiBSZWFjdC5cbiAgdmFyIGZvdW5kV2lsbE1vdW50TmFtZSA9IG51bGw7XG4gIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgdmFyIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBudWxsO1xuICBpZiAodHlwZW9mIHByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnY29tcG9uZW50V2lsbE1vdW50JztcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvdG90eXBlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCc7XG4gIH1cbiAgaWYgKHR5cGVvZiBwcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb3RvdHlwZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICB9XG4gIGlmICh0eXBlb2YgcHJvdG90eXBlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm90b3R5cGUuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJztcbiAgfVxuICBpZiAoXG4gICAgZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsIHx8XG4gICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCB8fFxuICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGxcbiAgKSB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWU7XG4gICAgdmFyIG5ld0FwaU5hbWUgPVxuICAgICAgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyAnZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCknXG4gICAgICAgIDogJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlKCknO1xuXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICAnVW5zYWZlIGxlZ2FjeSBsaWZlY3ljbGVzIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgY29tcG9uZW50cyB1c2luZyBuZXcgY29tcG9uZW50IEFQSXMuXFxuXFxuJyArXG4gICAgICAgIGNvbXBvbmVudE5hbWUgK1xuICAgICAgICAnIHVzZXMgJyArXG4gICAgICAgIG5ld0FwaU5hbWUgK1xuICAgICAgICAnIGJ1dCBhbHNvIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbGVnYWN5IGxpZmVjeWNsZXM6JyArXG4gICAgICAgIChmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgPyAnXFxuICAnICsgZm91bmRXaWxsTW91bnROYW1lIDogJycpICtcbiAgICAgICAgKGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGxcbiAgICAgICAgICA/ICdcXG4gICcgKyBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lXG4gICAgICAgICAgOiAnJykgK1xuICAgICAgICAoZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCA/ICdcXG4gICcgKyBmb3VuZFdpbGxVcGRhdGVOYW1lIDogJycpICtcbiAgICAgICAgJ1xcblxcblRoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbicgK1xuICAgICAgICAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1hc3luYy1jb21wb25lbnQtbGlmZWN5Y2xlLWhvb2tzJ1xuICAgICk7XG4gIH1cblxuICAvLyBSZWFjdCA8PSAxNi4yIGRvZXMgbm90IHN1cHBvcnQgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy5cbiAgLy8gQXMgYSB3b3JrYXJvdW5kLCB1c2UgY1dNIGFuZCBjV1JQIHRvIGludm9rZSB0aGUgbmV3IHN0YXRpYyBsaWZlY3ljbGUuXG4gIC8vIE5ld2VyIHZlcnNpb25zIG9mIFJlYWN0IHdpbGwgaWdub3JlIHRoZXNlIGxpZmVjeWNsZXMgaWYgZ0RTRlAgZXhpc3RzLlxuICBpZiAodHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50ID0gY29tcG9uZW50V2lsbE1vdW50O1xuICAgIHByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcztcbiAgfVxuXG4gIC8vIFJlYWN0IDw9IDE2LjIgZG9lcyBub3Qgc3VwcG9ydCBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS5cbiAgLy8gQXMgYSB3b3JrYXJvdW5kLCB1c2UgY1dVIHRvIGludm9rZSB0aGUgbmV3IGxpZmVjeWNsZS5cbiAgLy8gTmV3ZXIgdmVyc2lvbnMgb2YgUmVhY3Qgd2lsbCBpZ25vcmUgdGhhdCBsaWZlY3ljbGUgaWYgZ1NCVSBleGlzdHMuXG4gIGlmICh0eXBlb2YgcHJvdG90eXBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgcG9seWZpbGwgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBmb3IgY29tcG9uZW50cyB0aGF0IGRvIG5vdCBkZWZpbmUgY29tcG9uZW50RGlkVXBkYXRlKCkgb24gdGhlIHByb3RvdHlwZSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdG90eXBlLmNvbXBvbmVudFdpbGxVcGRhdGUgPSBjb21wb25lbnRXaWxsVXBkYXRlO1xuXG4gICAgdmFyIGNvbXBvbmVudERpZFVwZGF0ZSA9IHByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU7XG5cbiAgICBwcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlUG9seWZpbGwoXG4gICAgICBwcmV2UHJvcHMsXG4gICAgICBwcmV2U3RhdGUsXG4gICAgICBtYXliZVNuYXBzaG90XG4gICAgKSB7XG4gICAgICAvLyAxNi4zKyB3aWxsIG5vdCBleGVjdXRlIG91ciB3aWxsLXVwZGF0ZSBtZXRob2Q7XG4gICAgICAvLyBJdCB3aWxsIHBhc3MgYSBzbmFwc2hvdCB2YWx1ZSB0byBkaWQtdXBkYXRlIHRob3VnaC5cbiAgICAgIC8vIE9sZGVyIHZlcnNpb25zIHdpbGwgcmVxdWlyZSBvdXIgcG9seWZpbGxlZCB3aWxsLXVwZGF0ZSB2YWx1ZS5cbiAgICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIGJvdGggY2FzZXMsIGJ1dCBjYW4ndCBqdXN0IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgXCJtYXliZVNuYXBzaG90XCIsXG4gICAgICAvLyBCZWNhdXNlIGZvciA8PSAxNS54IHZlcnNpb25zIHRoaXMgbWlnaHQgYmUgYSBcInByZXZDb250ZXh0XCIgb2JqZWN0LlxuICAgICAgLy8gV2UgYWxzbyBjYW4ndCBqdXN0IGNoZWNrIFwiX19yZWFjdEludGVybmFsU25hcHNob3RcIixcbiAgICAgIC8vIEJlY2F1c2UgZ2V0LXNuYXBzaG90IG1pZ2h0IHJldHVybiBhIGZhbHN5IHZhbHVlLlxuICAgICAgLy8gU28gY2hlY2sgZm9yIHRoZSBleHBsaWNpdCBfX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEZsYWcgZmxhZyB0byBkZXRlcm1pbmUgYmVoYXZpb3IuXG4gICAgICB2YXIgc25hcHNob3QgPSB0aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90RmxhZ1xuICAgICAgICA/IHRoaXMuX19yZWFjdEludGVybmFsU25hcHNob3RcbiAgICAgICAgOiBtYXliZVNuYXBzaG90O1xuXG4gICAgICBjb21wb25lbnREaWRVcGRhdGUuY2FsbCh0aGlzLCBwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gQ29tcG9uZW50O1xufVxuXG5leHBvcnQgeyBwb2x5ZmlsbCB9O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJvZHlPcGVuQ2xhc3NOYW1lID0gZXhwb3J0cy5wb3J0YWxDbGFzc05hbWUgPSB1bmRlZmluZWQ7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3JlYWN0RG9tID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcblxudmFyIF9yZWFjdERvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdERvbSk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBfTW9kYWxQb3J0YWwgPSByZXF1aXJlKFwiLi9Nb2RhbFBvcnRhbFwiKTtcblxudmFyIF9Nb2RhbFBvcnRhbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Nb2RhbFBvcnRhbCk7XG5cbnZhciBfYXJpYUFwcEhpZGVyID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvYXJpYUFwcEhpZGVyXCIpO1xuXG52YXIgYXJpYUFwcEhpZGVyID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2FyaWFBcHBIaWRlcik7XG5cbnZhciBfc2FmZUhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvc2FmZUhUTUxFbGVtZW50XCIpO1xuXG52YXIgX3NhZmVIVE1MRWxlbWVudDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zYWZlSFRNTEVsZW1lbnQpO1xuXG52YXIgX3JlYWN0TGlmZWN5Y2xlc0NvbXBhdCA9IHJlcXVpcmUoXCJyZWFjdC1saWZlY3ljbGVzLWNvbXBhdFwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBlbHNlIHsgdmFyIG5ld09iaiA9IHt9OyBpZiAob2JqICE9IG51bGwpIHsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IG5ld09iai5kZWZhdWx0ID0gb2JqOyByZXR1cm4gbmV3T2JqOyB9IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgcG9ydGFsQ2xhc3NOYW1lID0gZXhwb3J0cy5wb3J0YWxDbGFzc05hbWUgPSBcIlJlYWN0TW9kYWxQb3J0YWxcIjtcbnZhciBib2R5T3BlbkNsYXNzTmFtZSA9IGV4cG9ydHMuYm9keU9wZW5DbGFzc05hbWUgPSBcIlJlYWN0TW9kYWxfX0JvZHktLW9wZW5cIjtcblxudmFyIGlzUmVhY3QxNiA9IF9yZWFjdERvbTIuZGVmYXVsdC5jcmVhdGVQb3J0YWwgIT09IHVuZGVmaW5lZDtcbnZhciBjcmVhdGVQb3J0YWwgPSBpc1JlYWN0MTYgPyBfcmVhY3REb20yLmRlZmF1bHQuY3JlYXRlUG9ydGFsIDogX3JlYWN0RG9tMi5kZWZhdWx0LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyO1xuXG5mdW5jdGlvbiBnZXRQYXJlbnRFbGVtZW50KHBhcmVudFNlbGVjdG9yKSB7XG4gIHJldHVybiBwYXJlbnRTZWxlY3RvcigpO1xufVxuXG52YXIgTW9kYWwgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoTW9kYWwsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIE1vZGFsKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNb2RhbCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfcmVmID0gTW9kYWwuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihNb2RhbCkpLmNhbGwuYXBwbHkoX3JlZiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLnJlbW92ZVBvcnRhbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICFpc1JlYWN0MTYgJiYgX3JlYWN0RG9tMi5kZWZhdWx0LnVubW91bnRDb21wb25lbnRBdE5vZGUoX3RoaXMubm9kZSk7XG4gICAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50RWxlbWVudChfdGhpcy5wcm9wcy5wYXJlbnRTZWxlY3Rvcik7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoX3RoaXMubm9kZSk7XG4gICAgfSwgX3RoaXMucG9ydGFsUmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMucG9ydGFsID0gcmVmO1xuICAgIH0sIF90aGlzLnJlbmRlclBvcnRhbCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgdmFyIHBvcnRhbCA9IGNyZWF0ZVBvcnRhbChfdGhpcywgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX01vZGFsUG9ydGFsMi5kZWZhdWx0LCBfZXh0ZW5kcyh7IGRlZmF1bHRTdHlsZXM6IE1vZGFsLmRlZmF1bHRTdHlsZXMgfSwgcHJvcHMpKSwgX3RoaXMubm9kZSk7XG4gICAgICBfdGhpcy5wb3J0YWxSZWYocG9ydGFsKTtcbiAgICB9LCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhNb2RhbCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAoIV9zYWZlSFRNTEVsZW1lbnQuY2FuVXNlRE9NKSByZXR1cm47XG5cbiAgICAgIGlmICghaXNSZWFjdDE2KSB7XG4gICAgICAgIHRoaXMubm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB9XG4gICAgICB0aGlzLm5vZGUuY2xhc3NOYW1lID0gdGhpcy5wcm9wcy5wb3J0YWxDbGFzc05hbWU7XG5cbiAgICAgIHZhciBwYXJlbnQgPSBnZXRQYXJlbnRFbGVtZW50KHRoaXMucHJvcHMucGFyZW50U2VsZWN0b3IpO1xuICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHRoaXMubm9kZSk7XG5cbiAgICAgICFpc1JlYWN0MTYgJiYgdGhpcy5yZW5kZXJQb3J0YWwodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFNuYXBzaG90QmVmb3JlVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIHByZXZQYXJlbnQgPSBnZXRQYXJlbnRFbGVtZW50KHByZXZQcm9wcy5wYXJlbnRTZWxlY3Rvcik7XG4gICAgICB2YXIgbmV4dFBhcmVudCA9IGdldFBhcmVudEVsZW1lbnQodGhpcy5wcm9wcy5wYXJlbnRTZWxlY3Rvcik7XG4gICAgICByZXR1cm4geyBwcmV2UGFyZW50OiBwcmV2UGFyZW50LCBuZXh0UGFyZW50OiBuZXh0UGFyZW50IH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBfLCBzbmFwc2hvdCkge1xuICAgICAgaWYgKCFfc2FmZUhUTUxFbGVtZW50LmNhblVzZURPTSkgcmV0dXJuO1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNPcGVuID0gX3Byb3BzLmlzT3BlbixcbiAgICAgICAgICBwb3J0YWxDbGFzc05hbWUgPSBfcHJvcHMucG9ydGFsQ2xhc3NOYW1lO1xuXG5cbiAgICAgIGlmIChwcmV2UHJvcHMucG9ydGFsQ2xhc3NOYW1lICE9PSBwb3J0YWxDbGFzc05hbWUpIHtcbiAgICAgICAgdGhpcy5ub2RlLmNsYXNzTmFtZSA9IHBvcnRhbENsYXNzTmFtZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByZXZQYXJlbnQgPSBzbmFwc2hvdC5wcmV2UGFyZW50LFxuICAgICAgICAgIG5leHRQYXJlbnQgPSBzbmFwc2hvdC5uZXh0UGFyZW50O1xuXG4gICAgICBpZiAobmV4dFBhcmVudCAhPT0gcHJldlBhcmVudCkge1xuICAgICAgICBwcmV2UGFyZW50LnJlbW92ZUNoaWxkKHRoaXMubm9kZSk7XG4gICAgICAgIG5leHRQYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5ub2RlKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RvcCB1bm5lY2Vzc2FyeSByZW5kZXJzIGlmIG1vZGFsIGlzIHJlbWFpbmluZyBjbG9zZWRcbiAgICAgIGlmICghcHJldlByb3BzLmlzT3BlbiAmJiAhaXNPcGVuKSByZXR1cm47XG5cbiAgICAgICFpc1JlYWN0MTYgJiYgdGhpcy5yZW5kZXJQb3J0YWwodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKCFfc2FmZUhUTUxFbGVtZW50LmNhblVzZURPTSB8fCAhdGhpcy5ub2RlIHx8ICF0aGlzLnBvcnRhbCkgcmV0dXJuO1xuXG4gICAgICB2YXIgc3RhdGUgPSB0aGlzLnBvcnRhbC5zdGF0ZTtcbiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgdmFyIGNsb3Nlc0F0ID0gc3RhdGUuaXNPcGVuICYmIHRoaXMucHJvcHMuY2xvc2VUaW1lb3V0TVMgJiYgKHN0YXRlLmNsb3Nlc0F0IHx8IG5vdyArIHRoaXMucHJvcHMuY2xvc2VUaW1lb3V0TVMpO1xuXG4gICAgICBpZiAoY2xvc2VzQXQpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5iZWZvcmVDbG9zZSkge1xuICAgICAgICAgIHRoaXMucG9ydGFsLmNsb3NlV2l0aFRpbWVvdXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5yZW1vdmVQb3J0YWwsIGNsb3Nlc0F0IC0gbm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUG9ydGFsKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICBpZiAoIV9zYWZlSFRNTEVsZW1lbnQuY2FuVXNlRE9NIHx8ICFpc1JlYWN0MTYpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5ub2RlICYmIGlzUmVhY3QxNikge1xuICAgICAgICB0aGlzLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JlYXRlUG9ydGFsKF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9Nb2RhbFBvcnRhbDIuZGVmYXVsdCwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMucG9ydGFsUmVmLFxuICAgICAgICBkZWZhdWx0U3R5bGVzOiBNb2RhbC5kZWZhdWx0U3R5bGVzXG4gICAgICB9LCB0aGlzLnByb3BzKSksIHRoaXMubm9kZSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwic2V0QXBwRWxlbWVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRBcHBFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGFyaWFBcHBIaWRlci5zZXRFbGVtZW50KGVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzICovXG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzICovXG5cbiAgfV0pO1xuXG4gIHJldHVybiBNb2RhbDtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cbk1vZGFsLnByb3BUeXBlcyA9IHtcbiAgaXNPcGVuOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxcbiAgc3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc2hhcGUoe1xuICAgIGNvbnRlbnQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICAgIG92ZXJsYXk6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0XG4gIH0pLFxuICBwb3J0YWxDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuICBib2R5T3BlbkNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIGh0bWxPcGVuQ2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgY2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIF9wcm9wVHlwZXMyLmRlZmF1bHQuc2hhcGUoe1xuICAgIGJhc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYWZ0ZXJPcGVuOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGJlZm9yZUNsb3NlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkXG4gIH0pXSksXG4gIG92ZXJsYXlDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFtfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgX3Byb3BUeXBlczIuZGVmYXVsdC5zaGFwZSh7XG4gICAgYmFzZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhZnRlck9wZW46IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYmVmb3JlQ2xvc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWRcbiAgfSldKSxcbiAgYXBwRWxlbWVudDogX3Byb3BUeXBlczIuZGVmYXVsdC5pbnN0YW5jZU9mKF9zYWZlSFRNTEVsZW1lbnQyLmRlZmF1bHQpLFxuICBvbkFmdGVyT3BlbjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICBvblJlcXVlc3RDbG9zZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICBjbG9zZVRpbWVvdXRNUzogX3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsXG4gIGFyaWFIaWRlQXBwOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIHNob3VsZEZvY3VzQWZ0ZXJSZW5kZXI6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgc2hvdWxkQ2xvc2VPbk92ZXJsYXlDbGljazogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgcGFyZW50U2VsZWN0b3I6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgYXJpYTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG4gIGRhdGE6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICByb2xlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgY29udGVudExhYmVsOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgc2hvdWxkQ2xvc2VPbkVzYzogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBvdmVybGF5UmVmOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIGNvbnRlbnRSZWY6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuY1xufTtcbk1vZGFsLmRlZmF1bHRQcm9wcyA9IHtcbiAgaXNPcGVuOiBmYWxzZSxcbiAgcG9ydGFsQ2xhc3NOYW1lOiBwb3J0YWxDbGFzc05hbWUsXG4gIGJvZHlPcGVuQ2xhc3NOYW1lOiBib2R5T3BlbkNsYXNzTmFtZSxcbiAgYXJpYUhpZGVBcHA6IHRydWUsXG4gIGNsb3NlVGltZW91dE1TOiAwLFxuICBzaG91bGRGb2N1c0FmdGVyUmVuZGVyOiB0cnVlLFxuICBzaG91bGRDbG9zZU9uRXNjOiB0cnVlLFxuICBzaG91bGRDbG9zZU9uT3ZlcmxheUNsaWNrOiB0cnVlLFxuICBzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U6IHRydWUsXG4gIHBhcmVudFNlbGVjdG9yOiBmdW5jdGlvbiBwYXJlbnRTZWxlY3RvcigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbiAgfVxufTtcbk1vZGFsLmRlZmF1bHRTdHlsZXMgPSB7XG4gIG92ZXJsYXk6IHtcbiAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KVwiXG4gIH0sXG4gIGNvbnRlbnQ6IHtcbiAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgIHRvcDogXCI0MHB4XCIsXG4gICAgbGVmdDogXCI0MHB4XCIsXG4gICAgcmlnaHQ6IFwiNDBweFwiLFxuICAgIGJvdHRvbTogXCI0MHB4XCIsXG4gICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjXCIsXG4gICAgYmFja2dyb3VuZDogXCIjZmZmXCIsXG4gICAgb3ZlcmZsb3c6IFwiYXV0b1wiLFxuICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiBcInRvdWNoXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjRweFwiLFxuICAgIG91dGxpbmU6IFwibm9uZVwiLFxuICAgIHBhZGRpbmc6IFwiMjBweFwiXG4gIH1cbn07XG5cblxuKDAsIF9yZWFjdExpZmVjeWNsZXNDb21wYXQucG9seWZpbGwpKE1vZGFsKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gTW9kYWw7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBfZm9jdXNNYW5hZ2VyID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZm9jdXNNYW5hZ2VyXCIpO1xuXG52YXIgZm9jdXNNYW5hZ2VyID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2ZvY3VzTWFuYWdlcik7XG5cbnZhciBfc2NvcGVUYWIgPSByZXF1aXJlKFwiLi4vaGVscGVycy9zY29wZVRhYlwiKTtcblxudmFyIF9zY29wZVRhYjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zY29wZVRhYik7XG5cbnZhciBfYXJpYUFwcEhpZGVyID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvYXJpYUFwcEhpZGVyXCIpO1xuXG52YXIgYXJpYUFwcEhpZGVyID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2FyaWFBcHBIaWRlcik7XG5cbnZhciBfY2xhc3NMaXN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvY2xhc3NMaXN0XCIpO1xuXG52YXIgY2xhc3NMaXN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2NsYXNzTGlzdCk7XG5cbnZhciBfc2FmZUhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvc2FmZUhUTUxFbGVtZW50XCIpO1xuXG52YXIgX3NhZmVIVE1MRWxlbWVudDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zYWZlSFRNTEVsZW1lbnQpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGVsc2UgeyB2YXIgbmV3T2JqID0ge307IGlmIChvYmogIT0gbnVsbCkgeyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gbmV3T2JqLmRlZmF1bHQgPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbi8vIHNvIHRoYXQgb3VyIENTUyBpcyBzdGF0aWNhbGx5IGFuYWx5emFibGVcbnZhciBDTEFTU19OQU1FUyA9IHtcbiAgb3ZlcmxheTogXCJSZWFjdE1vZGFsX19PdmVybGF5XCIsXG4gIGNvbnRlbnQ6IFwiUmVhY3RNb2RhbF9fQ29udGVudFwiXG59O1xuXG52YXIgVEFCX0tFWSA9IDk7XG52YXIgRVNDX0tFWSA9IDI3O1xuXG52YXIgYXJpYUhpZGRlbkluc3RhbmNlcyA9IDA7XG5cbnZhciBNb2RhbFBvcnRhbCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhNb2RhbFBvcnRhbCwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTW9kYWxQb3J0YWwocHJvcHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTW9kYWxQb3J0YWwpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKE1vZGFsUG9ydGFsLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTW9kYWxQb3J0YWwpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfdGhpcy5zZXRPdmVybGF5UmVmID0gZnVuY3Rpb24gKG92ZXJsYXkpIHtcbiAgICAgIF90aGlzLm92ZXJsYXkgPSBvdmVybGF5O1xuICAgICAgX3RoaXMucHJvcHMub3ZlcmxheVJlZiAmJiBfdGhpcy5wcm9wcy5vdmVybGF5UmVmKG92ZXJsYXkpO1xuICAgIH07XG5cbiAgICBfdGhpcy5zZXRDb250ZW50UmVmID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgICAgIF90aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgICAgX3RoaXMucHJvcHMuY29udGVudFJlZiAmJiBfdGhpcy5wcm9wcy5jb250ZW50UmVmKGNvbnRlbnQpO1xuICAgIH07XG5cbiAgICBfdGhpcy5hZnRlckNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYXBwRWxlbWVudCA9IF90aGlzJHByb3BzLmFwcEVsZW1lbnQsXG4gICAgICAgICAgYXJpYUhpZGVBcHAgPSBfdGhpcyRwcm9wcy5hcmlhSGlkZUFwcCxcbiAgICAgICAgICBodG1sT3BlbkNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmh0bWxPcGVuQ2xhc3NOYW1lLFxuICAgICAgICAgIGJvZHlPcGVuQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuYm9keU9wZW5DbGFzc05hbWU7XG5cbiAgICAgIC8vIFJlbW92ZSBjbGFzc2VzLlxuXG4gICAgICBjbGFzc0xpc3QucmVtb3ZlKGRvY3VtZW50LmJvZHksIGJvZHlPcGVuQ2xhc3NOYW1lKTtcblxuICAgICAgaHRtbE9wZW5DbGFzc05hbWUgJiYgY2xhc3NMaXN0LnJlbW92ZShkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImh0bWxcIilbMF0sIGh0bWxPcGVuQ2xhc3NOYW1lKTtcblxuICAgICAgLy8gUmVzZXQgYXJpYS1oaWRkZW4gYXR0cmlidXRlIGlmIGFsbCBtb2RhbHMgaGF2ZSBiZWVuIHJlbW92ZWRcbiAgICAgIGlmIChhcmlhSGlkZUFwcCAmJiBhcmlhSGlkZGVuSW5zdGFuY2VzID4gMCkge1xuICAgICAgICBhcmlhSGlkZGVuSW5zdGFuY2VzIC09IDE7XG5cbiAgICAgICAgaWYgKGFyaWFIaWRkZW5JbnN0YW5jZXMgPT09IDApIHtcbiAgICAgICAgICBhcmlhQXBwSGlkZXIuc2hvdyhhcHBFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMucHJvcHMuc2hvdWxkRm9jdXNBZnRlclJlbmRlcikge1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMuc2hvdWxkUmV0dXJuRm9jdXNBZnRlckNsb3NlKSB7XG4gICAgICAgICAgZm9jdXNNYW5hZ2VyLnJldHVybkZvY3VzKCk7XG4gICAgICAgICAgZm9jdXNNYW5hZ2VyLnRlYXJkb3duU2NvcGVkRm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb2N1c01hbmFnZXIucG9wV2l0aG91dEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmJlZm9yZU9wZW4oKTtcbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5hZnRlck9wZW4gJiYgX3RoaXMuc3RhdGUuYmVmb3JlQ2xvc2UpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLmNsb3NlVGltZXIpO1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGJlZm9yZUNsb3NlOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5zaG91bGRGb2N1c0FmdGVyUmVuZGVyKSB7XG4gICAgICAgICAgZm9jdXNNYW5hZ2VyLnNldHVwU2NvcGVkRm9jdXMoX3RoaXMubm9kZSk7XG4gICAgICAgICAgZm9jdXNNYW5hZ2VyLm1hcmtGb3JGb2N1c0xhdGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGlzT3BlbjogdHJ1ZSB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoeyBhZnRlck9wZW46IHRydWUgfSk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMucHJvcHMuaXNPcGVuICYmIF90aGlzLnByb3BzLm9uQWZ0ZXJPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkFmdGVyT3BlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmNsb3NlVGltZW91dE1TID4gMCkge1xuICAgICAgICBfdGhpcy5jbG9zZVdpdGhUaW1lb3V0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5jbG9zZVdpdGhvdXRUaW1lb3V0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmZvY3VzQ29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5jb250ZW50ICYmICFfdGhpcy5jb250ZW50SGFzRm9jdXMoKSAmJiBfdGhpcy5jb250ZW50LmZvY3VzKCk7XG4gICAgfTtcblxuICAgIF90aGlzLmNsb3NlV2l0aFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY2xvc2VzQXQgPSBEYXRlLm5vdygpICsgX3RoaXMucHJvcHMuY2xvc2VUaW1lb3V0TVM7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7IGJlZm9yZUNsb3NlOiB0cnVlLCBjbG9zZXNBdDogY2xvc2VzQXQgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5jbG9zZVRpbWVyID0gc2V0VGltZW91dChfdGhpcy5jbG9zZVdpdGhvdXRUaW1lb3V0LCBfdGhpcy5zdGF0ZS5jbG9zZXNBdCAtIERhdGUubm93KCkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLmNsb3NlV2l0aG91dFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGJlZm9yZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgICAgYWZ0ZXJPcGVuOiBmYWxzZSxcbiAgICAgICAgY2xvc2VzQXQ6IG51bGxcbiAgICAgIH0sIF90aGlzLmFmdGVyQ2xvc2UpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVLZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVEFCX0tFWSkge1xuICAgICAgICAoMCwgX3Njb3BlVGFiMi5kZWZhdWx0KShfdGhpcy5jb250ZW50LCBldmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5zaG91bGRDbG9zZU9uRXNjICYmIGV2ZW50LmtleUNvZGUgPT09IEVTQ19LRVkpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIF90aGlzLnJlcXVlc3RDbG9zZShldmVudCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZU92ZXJsYXlPbkNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMuc2hvdWxkQ2xvc2UgPT09IG51bGwpIHtcbiAgICAgICAgX3RoaXMuc2hvdWxkQ2xvc2UgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMuc2hvdWxkQ2xvc2UgJiYgX3RoaXMucHJvcHMuc2hvdWxkQ2xvc2VPbk92ZXJsYXlDbGljaykge1xuICAgICAgICBpZiAoX3RoaXMub3duZXJIYW5kbGVzQ2xvc2UoKSkge1xuICAgICAgICAgIF90aGlzLnJlcXVlc3RDbG9zZShldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNDb250ZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIF90aGlzLnNob3VsZENsb3NlID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlQ29udGVudE9uTW91c2VVcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNob3VsZENsb3NlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZU92ZXJsYXlPbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5zaG91bGRDbG9zZU9uT3ZlcmxheUNsaWNrICYmIGV2ZW50LnRhcmdldCA9PSBfdGhpcy5vdmVybGF5KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUNvbnRlbnRPbkNsaWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2hvdWxkQ2xvc2UgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlQ29udGVudE9uTW91c2VEb3duID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2hvdWxkQ2xvc2UgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgX3RoaXMucmVxdWVzdENsb3NlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICByZXR1cm4gX3RoaXMub3duZXJIYW5kbGVzQ2xvc2UoKSAmJiBfdGhpcy5wcm9wcy5vblJlcXVlc3RDbG9zZShldmVudCk7XG4gICAgfTtcblxuICAgIF90aGlzLm93bmVySGFuZGxlc0Nsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uUmVxdWVzdENsb3NlO1xuICAgIH07XG5cbiAgICBfdGhpcy5zaG91bGRCZUNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhX3RoaXMuc3RhdGUuaXNPcGVuICYmICFfdGhpcy5zdGF0ZS5iZWZvcmVDbG9zZTtcbiAgICB9O1xuXG4gICAgX3RoaXMuY29udGVudEhhc0ZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLmNvbnRlbnQgfHwgX3RoaXMuY29udGVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICB9O1xuXG4gICAgX3RoaXMuYnVpbGRDbGFzc05hbWUgPSBmdW5jdGlvbiAod2hpY2gsIGFkZGl0aW9uYWwpIHtcbiAgICAgIHZhciBjbGFzc05hbWVzID0gKHR5cGVvZiBhZGRpdGlvbmFsID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoYWRkaXRpb25hbCkpID09PSBcIm9iamVjdFwiID8gYWRkaXRpb25hbCA6IHtcbiAgICAgICAgYmFzZTogQ0xBU1NfTkFNRVNbd2hpY2hdLFxuICAgICAgICBhZnRlck9wZW46IENMQVNTX05BTUVTW3doaWNoXSArIFwiLS1hZnRlci1vcGVuXCIsXG4gICAgICAgIGJlZm9yZUNsb3NlOiBDTEFTU19OQU1FU1t3aGljaF0gKyBcIi0tYmVmb3JlLWNsb3NlXCJcbiAgICAgIH07XG4gICAgICB2YXIgY2xhc3NOYW1lID0gY2xhc3NOYW1lcy5iYXNlO1xuICAgICAgaWYgKF90aGlzLnN0YXRlLmFmdGVyT3Blbikge1xuICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgKyBcIiBcIiArIGNsYXNzTmFtZXMuYWZ0ZXJPcGVuO1xuICAgICAgfVxuICAgICAgaWYgKF90aGlzLnN0YXRlLmJlZm9yZUNsb3NlKSB7XG4gICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSArIFwiIFwiICsgY2xhc3NOYW1lcy5iZWZvcmVDbG9zZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgYWRkaXRpb25hbCA9PT0gXCJzdHJpbmdcIiAmJiBhZGRpdGlvbmFsID8gY2xhc3NOYW1lICsgXCIgXCIgKyBhZGRpdGlvbmFsIDogY2xhc3NOYW1lO1xuICAgIH07XG5cbiAgICBfdGhpcy5hdHRyaWJ1dGVzRnJvbU9iamVjdCA9IGZ1bmN0aW9uIChwcmVmaXgsIGl0ZW1zKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbXMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XG4gICAgICAgIGFjY1twcmVmaXggKyBcIi1cIiArIG5hbWVdID0gaXRlbXNbbmFtZV07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gICAgfTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgYWZ0ZXJPcGVuOiBmYWxzZSxcbiAgICAgIGJlZm9yZUNsb3NlOiBmYWxzZVxuICAgIH07XG5cbiAgICBfdGhpcy5zaG91bGRDbG9zZSA9IG51bGw7XG4gICAgX3RoaXMubW92ZUZyb21Db250ZW50VG9PdmVybGF5ID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTW9kYWxQb3J0YWwsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmIChwcmV2UHJvcHMuYm9keU9wZW5DbGFzc05hbWUgIT09IHRoaXMucHJvcHMuYm9keU9wZW5DbGFzc05hbWUpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUud2FybignUmVhY3QtTW9kYWw6IFwiYm9keU9wZW5DbGFzc05hbWVcIiBwcm9wIGhhcyBiZWVuIG1vZGlmaWVkLiAnICsgXCJUaGlzIG1heSBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gbXVsdGlwbGUgbW9kYWxzIGFyZSBvcGVuLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlByb3BzLmh0bWxPcGVuQ2xhc3NOYW1lICE9PSB0aGlzLnByb3BzLmh0bWxPcGVuQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlYWN0LU1vZGFsOiBcImh0bWxPcGVuQ2xhc3NOYW1lXCIgcHJvcCBoYXMgYmVlbiBtb2RpZmllZC4gJyArIFwiVGhpcyBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvciB3aGVuIG11bHRpcGxlIG1vZGFscyBhcmUgb3Blbi5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuaXNPcGVuICYmICFwcmV2UHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5wcm9wcy5pc09wZW4gJiYgcHJldlByb3BzLmlzT3Blbikge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvY3VzIG9ubHkgbmVlZHMgdG8gYmUgc2V0IG9uY2Ugd2hlbiB0aGUgbW9kYWwgaXMgYmVpbmcgb3BlbmVkXG4gICAgICBpZiAodGhpcy5wcm9wcy5zaG91bGRGb2N1c0FmdGVyUmVuZGVyICYmIHRoaXMuc3RhdGUuaXNPcGVuICYmICFwcmV2U3RhdGUuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMuZm9jdXNDb250ZW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5hZnRlckNsb3NlKCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVyKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYmVmb3JlT3BlblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBiZWZvcmVPcGVuKCkge1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYXBwRWxlbWVudCA9IF9wcm9wcy5hcHBFbGVtZW50LFxuICAgICAgICAgIGFyaWFIaWRlQXBwID0gX3Byb3BzLmFyaWFIaWRlQXBwLFxuICAgICAgICAgIGh0bWxPcGVuQ2xhc3NOYW1lID0gX3Byb3BzLmh0bWxPcGVuQ2xhc3NOYW1lLFxuICAgICAgICAgIGJvZHlPcGVuQ2xhc3NOYW1lID0gX3Byb3BzLmJvZHlPcGVuQ2xhc3NOYW1lO1xuXG4gICAgICAvLyBBZGQgY2xhc3Nlcy5cblxuICAgICAgY2xhc3NMaXN0LmFkZChkb2N1bWVudC5ib2R5LCBib2R5T3BlbkNsYXNzTmFtZSk7XG5cbiAgICAgIGh0bWxPcGVuQ2xhc3NOYW1lICYmIGNsYXNzTGlzdC5hZGQoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJodG1sXCIpWzBdLCBodG1sT3BlbkNsYXNzTmFtZSk7XG5cbiAgICAgIGlmIChhcmlhSGlkZUFwcCkge1xuICAgICAgICBhcmlhSGlkZGVuSW5zdGFuY2VzICs9IDE7XG4gICAgICAgIGFyaWFBcHBIaWRlci5oaWRlKGFwcEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERvbid0IHN0ZWFsIGZvY3VzIGZyb20gaW5uZXIgZWxlbWVudHNcblxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3Byb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgb3ZlcmxheUNsYXNzTmFtZSA9IF9wcm9wczIub3ZlcmxheUNsYXNzTmFtZSxcbiAgICAgICAgICBkZWZhdWx0U3R5bGVzID0gX3Byb3BzMi5kZWZhdWx0U3R5bGVzO1xuXG4gICAgICB2YXIgY29udGVudFN0eWxlcyA9IGNsYXNzTmFtZSA/IHt9IDogZGVmYXVsdFN0eWxlcy5jb250ZW50O1xuICAgICAgdmFyIG92ZXJsYXlTdHlsZXMgPSBvdmVybGF5Q2xhc3NOYW1lID8ge30gOiBkZWZhdWx0U3R5bGVzLm92ZXJsYXk7XG5cbiAgICAgIHJldHVybiB0aGlzLnNob3VsZEJlQ2xvc2VkKCkgPyBudWxsIDogX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6IHRoaXMuc2V0T3ZlcmxheVJlZixcbiAgICAgICAgICBjbGFzc05hbWU6IHRoaXMuYnVpbGRDbGFzc05hbWUoXCJvdmVybGF5XCIsIG92ZXJsYXlDbGFzc05hbWUpLFxuICAgICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7fSwgb3ZlcmxheVN0eWxlcywgdGhpcy5wcm9wcy5zdHlsZS5vdmVybGF5KSxcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZU92ZXJsYXlPbkNsaWNrLFxuICAgICAgICAgIG9uTW91c2VEb3duOiB0aGlzLmhhbmRsZU92ZXJsYXlPbk1vdXNlRG93bixcbiAgICAgICAgICBcImFyaWEtbW9kYWxcIjogXCJ0cnVlXCJcbiAgICAgICAgfSxcbiAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICBfZXh0ZW5kcyh7XG4gICAgICAgICAgICByZWY6IHRoaXMuc2V0Q29udGVudFJlZixcbiAgICAgICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7fSwgY29udGVudFN0eWxlcywgdGhpcy5wcm9wcy5zdHlsZS5jb250ZW50KSxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogdGhpcy5idWlsZENsYXNzTmFtZShcImNvbnRlbnRcIiwgY2xhc3NOYW1lKSxcbiAgICAgICAgICAgIHRhYkluZGV4OiBcIi0xXCIsXG4gICAgICAgICAgICBvbktleURvd246IHRoaXMuaGFuZGxlS2V5RG93bixcbiAgICAgICAgICAgIG9uTW91c2VEb3duOiB0aGlzLmhhbmRsZUNvbnRlbnRPbk1vdXNlRG93bixcbiAgICAgICAgICAgIG9uTW91c2VVcDogdGhpcy5oYW5kbGVDb250ZW50T25Nb3VzZVVwLFxuICAgICAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVDb250ZW50T25DbGljayxcbiAgICAgICAgICAgIHJvbGU6IHRoaXMucHJvcHMucm9sZSxcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0aGlzLnByb3BzLmNvbnRlbnRMYWJlbFxuICAgICAgICAgIH0sIHRoaXMuYXR0cmlidXRlc0Zyb21PYmplY3QoXCJhcmlhXCIsIHRoaXMucHJvcHMuYXJpYSB8fCB7fSksIHRoaXMuYXR0cmlidXRlc0Zyb21PYmplY3QoXCJkYXRhXCIsIHRoaXMucHJvcHMuZGF0YSB8fCB7fSkpLFxuICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTW9kYWxQb3J0YWw7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5Nb2RhbFBvcnRhbC5kZWZhdWx0UHJvcHMgPSB7XG4gIHN0eWxlOiB7XG4gICAgb3ZlcmxheToge30sXG4gICAgY29udGVudDoge31cbiAgfSxcbiAgZGVmYXVsdFN0eWxlczoge31cbn07XG5Nb2RhbFBvcnRhbC5wcm9wVHlwZXMgPSB7XG4gIGlzT3BlbjogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsXG4gIGRlZmF1bHRTdHlsZXM6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc2hhcGUoe1xuICAgIGNvbnRlbnQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICAgIG92ZXJsYXk6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0XG4gIH0pLFxuICBzdHlsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zaGFwZSh7XG4gICAgY29udGVudDogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG4gICAgb3ZlcmxheTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3RcbiAgfSksXG4gIGNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoW19wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLCBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdF0pLFxuICBvdmVybGF5Q2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0XSksXG4gIGJvZHlPcGVuQ2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgaHRtbE9wZW5DbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuICBhcmlhSGlkZUFwcDogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBhcHBFbGVtZW50OiBfcHJvcFR5cGVzMi5kZWZhdWx0Lmluc3RhbmNlT2YoX3NhZmVIVE1MRWxlbWVudDIuZGVmYXVsdCksXG4gIG9uQWZ0ZXJPcGVuOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIG9uUmVxdWVzdENsb3NlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIGNsb3NlVGltZW91dE1TOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlcixcbiAgc2hvdWxkRm9jdXNBZnRlclJlbmRlcjogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBzaG91bGRDbG9zZU9uT3ZlcmxheUNsaWNrOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIHNob3VsZFJldHVybkZvY3VzQWZ0ZXJDbG9zZTogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICByb2xlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgY29udGVudExhYmVsOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgYXJpYTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG4gIGRhdGE6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICBjaGlsZHJlbjogX3Byb3BUeXBlczIuZGVmYXVsdC5ub2RlLFxuICBzaG91bGRDbG9zZU9uRXNjOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIG92ZXJsYXlSZWY6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgY29udGVudFJlZjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICB0ZXN0SWQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gTW9kYWxQb3J0YWw7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc3NlcnROb2RlTGlzdCA9IGFzc2VydE5vZGVMaXN0O1xuZXhwb3J0cy5zZXRFbGVtZW50ID0gc2V0RWxlbWVudDtcbmV4cG9ydHMudmFsaWRhdGVFbGVtZW50ID0gdmFsaWRhdGVFbGVtZW50O1xuZXhwb3J0cy5oaWRlID0gaGlkZTtcbmV4cG9ydHMuc2hvdyA9IHNob3c7XG5leHBvcnRzLmRvY3VtZW50Tm90UmVhZHlPclNTUlRlc3RpbmcgPSBkb2N1bWVudE5vdFJlYWR5T3JTU1JUZXN0aW5nO1xuZXhwb3J0cy5yZXNldEZvclRlc3RpbmcgPSByZXNldEZvclRlc3Rpbmc7XG5cbnZhciBfd2FybmluZyA9IHJlcXVpcmUoXCJ3YXJuaW5nXCIpO1xuXG52YXIgX3dhcm5pbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd2FybmluZyk7XG5cbnZhciBfc2FmZUhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vc2FmZUhUTUxFbGVtZW50XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgZ2xvYmFsRWxlbWVudCA9IG51bGw7XG5cbmZ1bmN0aW9uIGFzc2VydE5vZGVMaXN0KG5vZGVMaXN0LCBzZWxlY3Rvcikge1xuICBpZiAoIW5vZGVMaXN0IHx8ICFub2RlTGlzdC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWFjdC1tb2RhbDogTm8gZWxlbWVudHMgd2VyZSBmb3VuZCBmb3Igc2VsZWN0b3IgXCIgKyBzZWxlY3RvciArIFwiLlwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIHVzZUVsZW1lbnQgPSBlbGVtZW50O1xuICBpZiAodHlwZW9mIHVzZUVsZW1lbnQgPT09IFwic3RyaW5nXCIgJiYgX3NhZmVIVE1MRWxlbWVudC5jYW5Vc2VET00pIHtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHVzZUVsZW1lbnQpO1xuICAgIGFzc2VydE5vZGVMaXN0KGVsLCB1c2VFbGVtZW50KTtcbiAgICB1c2VFbGVtZW50ID0gXCJsZW5ndGhcIiBpbiBlbCA/IGVsWzBdIDogZWw7XG4gIH1cbiAgZ2xvYmFsRWxlbWVudCA9IHVzZUVsZW1lbnQgfHwgZ2xvYmFsRWxlbWVudDtcbiAgcmV0dXJuIGdsb2JhbEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRWxlbWVudChhcHBFbGVtZW50KSB7XG4gIGlmICghYXBwRWxlbWVudCAmJiAhZ2xvYmFsRWxlbWVudCkge1xuICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoZmFsc2UsIFtcInJlYWN0LW1vZGFsOiBBcHAgZWxlbWVudCBpcyBub3QgZGVmaW5lZC5cIiwgXCJQbGVhc2UgdXNlIGBNb2RhbC5zZXRBcHBFbGVtZW50KGVsKWAgb3Igc2V0IGBhcHBFbGVtZW50PXtlbH1gLlwiLCBcIlRoaXMgaXMgbmVlZGVkIHNvIHNjcmVlbiByZWFkZXJzIGRvbid0IHNlZSBtYWluIGNvbnRlbnRcIiwgXCJ3aGVuIG1vZGFsIGlzIG9wZW5lZC4gSXQgaXMgbm90IHJlY29tbWVuZGVkLCBidXQgeW91IGNhbiBvcHQtb3V0XCIsIFwiYnkgc2V0dGluZyBgYXJpYUhpZGVBcHA9e2ZhbHNlfWAuXCJdLmpvaW4oXCIgXCIpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBoaWRlKGFwcEVsZW1lbnQpIHtcbiAgaWYgKHZhbGlkYXRlRWxlbWVudChhcHBFbGVtZW50KSkge1xuICAgIChhcHBFbGVtZW50IHx8IGdsb2JhbEVsZW1lbnQpLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG93KGFwcEVsZW1lbnQpIHtcbiAgaWYgKHZhbGlkYXRlRWxlbWVudChhcHBFbGVtZW50KSkge1xuICAgIChhcHBFbGVtZW50IHx8IGdsb2JhbEVsZW1lbnQpLnJlbW92ZUF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRvY3VtZW50Tm90UmVhZHlPclNTUlRlc3RpbmcoKSB7XG4gIGdsb2JhbEVsZW1lbnQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiByZXNldEZvclRlc3RpbmcoKSB7XG4gIGdsb2JhbEVsZW1lbnQgPSBudWxsO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kdW1wQ2xhc3NMaXN0cyA9IGR1bXBDbGFzc0xpc3RzO1xudmFyIGh0bWxDbGFzc0xpc3QgPSB7fTtcbnZhciBkb2NCb2R5Q2xhc3NMaXN0ID0ge307XG5cbmZ1bmN0aW9uIGR1bXBDbGFzc0xpc3RzKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdmFyIGNsYXNzZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImh0bWxcIilbMF0uY2xhc3NOYW1lO1xuICAgIHZhciBidWZmZXIgPSBcIlNob3cgdHJhY2tlZCBjbGFzc2VzOlxcblxcblwiO1xuXG4gICAgYnVmZmVyICs9IFwiPGh0bWwgLz4gKFwiICsgY2xhc3NlcyArIFwiKTpcXG5cIjtcbiAgICBmb3IgKHZhciB4IGluIGh0bWxDbGFzc0xpc3QpIHtcbiAgICAgIGJ1ZmZlciArPSBcIiAgXCIgKyB4ICsgXCIgXCIgKyBodG1sQ2xhc3NMaXN0W3hdICsgXCJcXG5cIjtcbiAgICB9XG5cbiAgICBjbGFzc2VzID0gZG9jdW1lbnQuYm9keS5jbGFzc05hbWU7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgIGJ1ZmZlciArPSBcIlxcblxcbmRvYy5ib2R5IChcIiArIGNsYXNzZXMgKyBcIik6XFxuXCI7XG4gICAgZm9yICh2YXIgX3ggaW4gZG9jQm9keUNsYXNzTGlzdCkge1xuICAgICAgYnVmZmVyICs9IFwiICBcIiArIF94ICsgXCIgXCIgKyBkb2NCb2R5Q2xhc3NMaXN0W194XSArIFwiXFxuXCI7XG4gICAgfVxuXG4gICAgYnVmZmVyICs9IFwiXFxuXCI7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKGJ1ZmZlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFjayB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZSBvZiBhIGNsYXNzLlxuICogQHBhcmFtIHtvYmplY3R9IHBvbGwgVGhlIHBvbGwgdG8gcmVjZWl2ZSB0aGUgcmVmZXJlbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZS5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xudmFyIGluY3JlbWVudFJlZmVyZW5jZSA9IGZ1bmN0aW9uIGluY3JlbWVudFJlZmVyZW5jZShwb2xsLCBjbGFzc05hbWUpIHtcbiAgaWYgKCFwb2xsW2NsYXNzTmFtZV0pIHtcbiAgICBwb2xsW2NsYXNzTmFtZV0gPSAwO1xuICB9XG4gIHBvbGxbY2xhc3NOYW1lXSArPSAxO1xuICByZXR1cm4gY2xhc3NOYW1lO1xufTtcblxuLyoqXG4gKiBEcm9wIHRoZSByZWZlcmVuY2Ugb2YgYSBjbGFzcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwb2xsIFRoZSBwb2xsIHRvIHJlY2VpdmUgdGhlIHJlZmVyZW5jZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgVGhlIGNsYXNzIG5hbWUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbnZhciBkZWNyZW1lbnRSZWZlcmVuY2UgPSBmdW5jdGlvbiBkZWNyZW1lbnRSZWZlcmVuY2UocG9sbCwgY2xhc3NOYW1lKSB7XG4gIGlmIChwb2xsW2NsYXNzTmFtZV0pIHtcbiAgICBwb2xsW2NsYXNzTmFtZV0gLT0gMTtcbiAgfVxuICByZXR1cm4gY2xhc3NOYW1lO1xufTtcblxuLyoqXG4gKiBUcmFjayBhIGNsYXNzIGFuZCBhZGQgdG8gdGhlIGdpdmVuIGNsYXNzIGxpc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gY2xhc3NMaXN0UmVmIEEgY2xhc3MgbGlzdCBvZiBhbiBlbGVtZW50LlxuICogQHBhcmFtIHtPYmplY3R9IHBvbGwgICAgICAgICBUaGUgcG9sbCB0byBiZSB1c2VkLlxuICogQHBhcmFtIHtBcnJheX0gIGNsYXNzZXMgICAgICBUaGUgbGlzdCBvZiBjbGFzc2VzIHRvIGJlIHRyYWNrZWQuXG4gKi9cbnZhciB0cmFja0NsYXNzID0gZnVuY3Rpb24gdHJhY2tDbGFzcyhjbGFzc0xpc3RSZWYsIHBvbGwsIGNsYXNzZXMpIHtcbiAgY2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpbmNyZW1lbnRSZWZlcmVuY2UocG9sbCwgY2xhc3NOYW1lKTtcbiAgICBjbGFzc0xpc3RSZWYuYWRkKGNsYXNzTmFtZSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBVbnRyYWNrIGEgY2xhc3MgYW5kIHJlbW92ZSBmcm9tIHRoZSBnaXZlbiBjbGFzcyBsaXN0IGlmIHRoZSByZWZlcmVuY2VcbiAqIHJlYWNoZXMgMC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjbGFzc0xpc3RSZWYgQSBjbGFzcyBsaXN0IG9mIGFuIGVsZW1lbnQuXG4gKiBAcGFyYW0ge09iamVjdH0gcG9sbCAgICAgICAgIFRoZSBwb2xsIHRvIGJlIHVzZWQuXG4gKiBAcGFyYW0ge0FycmF5fSAgY2xhc3NlcyAgICAgIFRoZSBsaXN0IG9mIGNsYXNzZXMgdG8gYmUgdW50cmFja2VkLlxuICovXG52YXIgdW50cmFja0NsYXNzID0gZnVuY3Rpb24gdW50cmFja0NsYXNzKGNsYXNzTGlzdFJlZiwgcG9sbCwgY2xhc3Nlcykge1xuICBjbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGRlY3JlbWVudFJlZmVyZW5jZShwb2xsLCBjbGFzc05hbWUpO1xuICAgIHBvbGxbY2xhc3NOYW1lXSA9PT0gMCAmJiBjbGFzc0xpc3RSZWYucmVtb3ZlKGNsYXNzTmFtZSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBQdWJsaWMgaW5mZXJmYWNlIHRvIGFkZCBjbGFzc2VzIHRvIHRoZSBkb2N1bWVudC5ib2R5LlxuICogQHBhcmFtIHtzdHJpbmd9IGJvZHlDbGFzcyBUaGUgY2xhc3Mgc3RyaW5nIHRvIGJlIGFkZGVkLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtYXkgY29udGFpbiBtb3JlIHRoZW4gb25lIGNsYXNzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggJyAnIGFzIHNlcGFyYXRvci5cbiAqL1xudmFyIGFkZCA9IGV4cG9ydHMuYWRkID0gZnVuY3Rpb24gYWRkKGVsZW1lbnQsIGNsYXNzU3RyaW5nKSB7XG4gIHJldHVybiB0cmFja0NsYXNzKGVsZW1lbnQuY2xhc3NMaXN0LCBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gXCJodG1sXCIgPyBodG1sQ2xhc3NMaXN0IDogZG9jQm9keUNsYXNzTGlzdCwgY2xhc3NTdHJpbmcuc3BsaXQoXCIgXCIpKTtcbn07XG5cbi8qKlxuICogUHVibGljIGluZmVyZmFjZSB0byByZW1vdmUgY2xhc3NlcyBmcm9tIHRoZSBkb2N1bWVudC5ib2R5LlxuICogQHBhcmFtIHtzdHJpbmd9IGJvZHlDbGFzcyBUaGUgY2xhc3Mgc3RyaW5nIHRvIGJlIGFkZGVkLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtYXkgY29udGFpbiBtb3JlIHRoZW4gb25lIGNsYXNzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggJyAnIGFzIHNlcGFyYXRvci5cbiAqL1xudmFyIHJlbW92ZSA9IGV4cG9ydHMucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGVsZW1lbnQsIGNsYXNzU3RyaW5nKSB7XG4gIHJldHVybiB1bnRyYWNrQ2xhc3MoZWxlbWVudC5jbGFzc0xpc3QsIGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSBcImh0bWxcIiA/IGh0bWxDbGFzc0xpc3QgOiBkb2NCb2R5Q2xhc3NMaXN0LCBjbGFzc1N0cmluZy5zcGxpdChcIiBcIikpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaGFuZGxlQmx1ciA9IGhhbmRsZUJsdXI7XG5leHBvcnRzLmhhbmRsZUZvY3VzID0gaGFuZGxlRm9jdXM7XG5leHBvcnRzLm1hcmtGb3JGb2N1c0xhdGVyID0gbWFya0ZvckZvY3VzTGF0ZXI7XG5leHBvcnRzLnJldHVybkZvY3VzID0gcmV0dXJuRm9jdXM7XG5leHBvcnRzLnBvcFdpdGhvdXRGb2N1cyA9IHBvcFdpdGhvdXRGb2N1cztcbmV4cG9ydHMuc2V0dXBTY29wZWRGb2N1cyA9IHNldHVwU2NvcGVkRm9jdXM7XG5leHBvcnRzLnRlYXJkb3duU2NvcGVkRm9jdXMgPSB0ZWFyZG93blNjb3BlZEZvY3VzO1xuXG52YXIgX3RhYmJhYmxlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdGFiYmFibGVcIik7XG5cbnZhciBfdGFiYmFibGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdGFiYmFibGUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgZm9jdXNMYXRlckVsZW1lbnRzID0gW107XG52YXIgbW9kYWxFbGVtZW50ID0gbnVsbDtcbnZhciBuZWVkVG9Gb2N1cyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBoYW5kbGVCbHVyKCkge1xuICBuZWVkVG9Gb2N1cyA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuICBpZiAobmVlZFRvRm9jdXMpIHtcbiAgICBuZWVkVG9Gb2N1cyA9IGZhbHNlO1xuICAgIGlmICghbW9kYWxFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIG5lZWQgdG8gc2VlIGhvdyBqUXVlcnkgc2hpbXMgZG9jdW1lbnQub24oJ2ZvY3VzaW4nKSBzbyB3ZSBkb24ndCBuZWVkIHRoZVxuICAgIC8vIHNldFRpbWVvdXQsIGZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IGZvY3VzaW4sIGlmIGl0IGRpZCwgd2UgY291bGQgZm9jdXNcbiAgICAvLyB0aGUgZWxlbWVudCBvdXRzaWRlIG9mIGEgc2V0VGltZW91dC4gU2lkZS1lZmZlY3Qgb2YgdGhpcyBpbXBsZW1lbnRhdGlvblxuICAgIC8vIGlzIHRoYXQgdGhlIGRvY3VtZW50LmJvZHkgZ2V0cyBmb2N1cywgYW5kIHRoZW4gd2UgZm9jdXMgb3VyIGVsZW1lbnQgcmlnaHRcbiAgICAvLyBhZnRlciwgc2VlbXMgZmluZS5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChtb2RhbEVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGVsID0gKDAsIF90YWJiYWJsZTIuZGVmYXVsdCkobW9kYWxFbGVtZW50KVswXSB8fCBtb2RhbEVsZW1lbnQ7XG4gICAgICBlbC5mb2N1cygpO1xuICAgIH0sIDApO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtGb3JGb2N1c0xhdGVyKCkge1xuICBmb2N1c0xhdGVyRWxlbWVudHMucHVzaChkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuZnVuY3Rpb24gcmV0dXJuRm9jdXMoKSB7XG4gIHZhciB0b0ZvY3VzID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBpZiAoZm9jdXNMYXRlckVsZW1lbnRzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdG9Gb2N1cyA9IGZvY3VzTGF0ZXJFbGVtZW50cy5wb3AoKTtcbiAgICAgIHRvRm9jdXMuZm9jdXMoKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKFtcIllvdSB0cmllZCB0byByZXR1cm4gZm9jdXMgdG9cIiwgdG9Gb2N1cywgXCJidXQgaXQgaXMgbm90IGluIHRoZSBET00gYW55bW9yZVwiXS5qb2luKFwiIFwiKSk7XG4gIH1cbn1cbi8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuXG5mdW5jdGlvbiBwb3BXaXRob3V0Rm9jdXMoKSB7XG4gIGZvY3VzTGF0ZXJFbGVtZW50cy5sZW5ndGggPiAwICYmIGZvY3VzTGF0ZXJFbGVtZW50cy5wb3AoKTtcbn1cblxuZnVuY3Rpb24gc2V0dXBTY29wZWRGb2N1cyhlbGVtZW50KSB7XG4gIG1vZGFsRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGhhbmRsZUJsdXIsIGZhbHNlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgaGFuZGxlRm9jdXMsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5hdHRhY2hFdmVudChcIm9uQmx1clwiLCBoYW5kbGVCbHVyKTtcbiAgICBkb2N1bWVudC5hdHRhY2hFdmVudChcIm9uRm9jdXNcIiwgaGFuZGxlRm9jdXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRlYXJkb3duU2NvcGVkRm9jdXMoKSB7XG4gIG1vZGFsRWxlbWVudCA9IG51bGw7XG5cbiAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGhhbmRsZUJsdXIpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBoYW5kbGVGb2N1cyk7XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LmRldGFjaEV2ZW50KFwib25CbHVyXCIsIGhhbmRsZUJsdXIpO1xuICAgIGRvY3VtZW50LmRldGFjaEV2ZW50KFwib25Gb2N1c1wiLCBoYW5kbGVGb2N1cyk7XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2FuVXNlRE9NID0gdW5kZWZpbmVkO1xuXG52YXIgX2V4ZW52ID0gcmVxdWlyZShcImV4ZW52XCIpO1xuXG52YXIgX2V4ZW52MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4ZW52KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIEVFID0gX2V4ZW52Mi5kZWZhdWx0O1xuXG52YXIgU2FmZUhUTUxFbGVtZW50ID0gRUUuY2FuVXNlRE9NID8gd2luZG93LkhUTUxFbGVtZW50IDoge307XG5cbnZhciBjYW5Vc2VET00gPSBleHBvcnRzLmNhblVzZURPTSA9IEVFLmNhblVzZURPTTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gU2FmZUhUTUxFbGVtZW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gc2NvcGVUYWI7XG5cbnZhciBfdGFiYmFibGUgPSByZXF1aXJlKFwiLi90YWJiYWJsZVwiKTtcblxudmFyIF90YWJiYWJsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90YWJiYWJsZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHNjb3BlVGFiKG5vZGUsIGV2ZW50KSB7XG4gIHZhciB0YWJiYWJsZSA9ICgwLCBfdGFiYmFibGUyLmRlZmF1bHQpKG5vZGUpO1xuXG4gIGlmICghdGFiYmFibGUubGVuZ3RoKSB7XG4gICAgLy8gRG8gbm90aGluZywgc2luY2UgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIHRoYXQgY2FuIHJlY2VpdmUgZm9jdXMuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2hpZnRLZXkgPSBldmVudC5zaGlmdEtleTtcbiAgdmFyIGhlYWQgPSB0YWJiYWJsZVswXTtcbiAgdmFyIHRhaWwgPSB0YWJiYWJsZVt0YWJiYWJsZS5sZW5ndGggLSAxXTtcblxuICAvLyBwcm9jZWVkIHdpdGggZGVmYXVsdCBicm93c2VyIGJlaGF2aW9yIG9uIHRhYi5cbiAgLy8gRm9jdXMgb24gbGFzdCBlbGVtZW50IG9uIHNoaWZ0ICsgdGFiLlxuICBpZiAobm9kZSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgIGlmICghc2hpZnRLZXkpIHJldHVybjtcbiAgICB0YXJnZXQgPSB0YWlsO1xuICB9XG5cbiAgdmFyIHRhcmdldDtcbiAgaWYgKHRhaWwgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgIXNoaWZ0S2V5KSB7XG4gICAgdGFyZ2V0ID0gaGVhZDtcbiAgfVxuXG4gIGlmIChoZWFkID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIHNoaWZ0S2V5KSB7XG4gICAgdGFyZ2V0ID0gdGFpbDtcbiAgfVxuXG4gIGlmICh0YXJnZXQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRhcmdldC5mb2N1cygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNhZmFyaSByYWRpbyBpc3N1ZS5cbiAgLy9cbiAgLy8gU2FmYXJpIGRvZXMgbm90IG1vdmUgdGhlIGZvY3VzIHRvIHRoZSByYWRpbyBidXR0b24sXG4gIC8vIHNvIHdlIG5lZWQgdG8gZm9yY2UgaXQgdG8gcmVhbGx5IHdhbGsgdGhyb3VnaCBhbGwgZWxlbWVudHMuXG4gIC8vXG4gIC8vIFRoaXMgaXMgdmVyeSBlcnJvciBwcm9uZSwgc2luY2Ugd2UgYXJlIHRyeWluZyB0byBndWVzc1xuICAvLyBpZiBpdCBpcyBhIHNhZmFyaSBicm93c2VyIGZyb20gdGhlIGZpcnN0IG9jY3VyZW5jZSBiZXR3ZWVuXG4gIC8vIGNocm9tZSBvciBzYWZhcmkuXG4gIC8vXG4gIC8vIFRoZSBjaHJvbWUgdXNlciBhZ2VudCBjb250YWlucyB0aGUgZmlyc3Qgb2N1cnJlbmNlXG4gIC8vIGFzIHRoZSAnY2hyb21lL3ZlcnNpb24nIGFuZCBsYXRlciB0aGUgJ3NhZmFyaS92ZXJzaW9uJy5cbiAgdmFyIGNoZWNrU2FmYXJpID0gLyhcXGJDaHJvbWVcXGJ8XFxiU2FmYXJpXFxiKVxcLy8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgdmFyIGlzU2FmYXJpRGVza3RvcCA9IGNoZWNrU2FmYXJpICE9IG51bGwgJiYgY2hlY2tTYWZhcmlbMV0gIT0gXCJDaHJvbWVcIiAmJiAvXFxiaVBvZFxcYnxcXGJpUGFkXFxiL2cuZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KSA9PSBudWxsO1xuXG4gIC8vIElmIHdlIGFyZSBub3QgaW4gc2FmYXJpIGRlc2t0b3AsIGxldCB0aGUgYnJvd3NlciBjb250cm9sXG4gIC8vIHRoZSBmb2N1c1xuICBpZiAoIWlzU2FmYXJpRGVza3RvcCkgcmV0dXJuO1xuXG4gIHZhciB4ID0gdGFiYmFibGUuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcblxuICBpZiAoeCA+IC0xKSB7XG4gICAgeCArPSBzaGlmdEtleSA/IC0xIDogMTtcbiAgfVxuXG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgdGFiYmFibGVbeF0uZm9jdXMoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBmaW5kVGFiYmFibGVEZXNjZW5kYW50cztcbi8qIVxuICogQWRhcHRlZCBmcm9tIGpRdWVyeSBVSSBjb3JlXG4gKlxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9jYXRlZ29yeS91aS1jb3JlL1xuICovXG5cbnZhciB0YWJiYWJsZU5vZGUgPSAvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QvO1xuXG5mdW5jdGlvbiBoaWRlc0NvbnRlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIHplcm9TaXplID0gZWxlbWVudC5vZmZzZXRXaWR0aCA8PSAwICYmIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDw9IDA7XG5cbiAgLy8gSWYgdGhlIG5vZGUgaXMgZW1wdHksIHRoaXMgaXMgZ29vZCBlbm91Z2hcbiAgaWYgKHplcm9TaXplICYmICFlbGVtZW50LmlubmVySFRNTCkgcmV0dXJuIHRydWU7XG5cbiAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgc29tZSBzdHlsZXNcbiAgdmFyIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiB6ZXJvU2l6ZSA/IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvdmVyZmxvd1wiKSAhPT0gXCJ2aXNpYmxlXCIgOiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVwiKSA9PSBcIm5vbmVcIjtcbn1cblxuZnVuY3Rpb24gdmlzaWJsZShlbGVtZW50KSB7XG4gIHZhciBwYXJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHtcbiAgICBpZiAocGFyZW50RWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkgYnJlYWs7XG4gICAgaWYgKGhpZGVzQ29udGVudHMocGFyZW50RWxlbWVudCkpIHJldHVybiBmYWxzZTtcbiAgICBwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmb2N1c2FibGUoZWxlbWVudCwgaXNUYWJJbmRleE5vdE5hTikge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHZhciByZXMgPSB0YWJiYWJsZU5vZGUudGVzdChub2RlTmFtZSkgJiYgIWVsZW1lbnQuZGlzYWJsZWQgfHwgKG5vZGVOYW1lID09PSBcImFcIiA/IGVsZW1lbnQuaHJlZiB8fCBpc1RhYkluZGV4Tm90TmFOIDogaXNUYWJJbmRleE5vdE5hTik7XG4gIHJldHVybiByZXMgJiYgdmlzaWJsZShlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gdGFiYmFibGUoZWxlbWVudCkge1xuICB2YXIgdGFiSW5kZXggPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpO1xuICBpZiAodGFiSW5kZXggPT09IG51bGwpIHRhYkluZGV4ID0gdW5kZWZpbmVkO1xuICB2YXIgaXNUYWJJbmRleE5hTiA9IGlzTmFOKHRhYkluZGV4KTtcbiAgcmV0dXJuIChpc1RhYkluZGV4TmFOIHx8IHRhYkluZGV4ID49IDApICYmIGZvY3VzYWJsZShlbGVtZW50LCAhaXNUYWJJbmRleE5hTik7XG59XG5cbmZ1bmN0aW9uIGZpbmRUYWJiYWJsZURlc2NlbmRhbnRzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSwgMCkuZmlsdGVyKHRhYmJhYmxlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfTW9kYWwgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL01vZGFsXCIpO1xuXG52YXIgX01vZGFsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX01vZGFsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gX01vZGFsMi5kZWZhdWx0O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciB3YXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgd2FybmluZyA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhcmdzKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gPiAyID8gbGVuIC0gMiA6IDApO1xuICAgIGZvciAodmFyIGtleSA9IDI7IGtleSA8IGxlbjsga2V5KyspIHtcbiAgICAgIGFyZ3Nba2V5IC0gMl0gPSBhcmd1bWVudHNba2V5XTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgJ21lc3NhZ2UgYXJndW1lbnQnXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQubGVuZ3RoIDwgMTAgfHwgKC9eW3NcXFddKiQvKS50ZXN0KGZvcm1hdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSB3YXJuaW5nIGZvcm1hdCBzaG91bGQgYmUgYWJsZSB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzICcgK1xuICAgICAgICAnd2FybmluZy4gUGxlYXNlLCB1c2UgYSBtb3JlIGRlc2NyaXB0aXZlIGZvcm1hdCB0aGFuOiAnICsgZm9ybWF0XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgICAgfSk7XG4gICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0gY2F0Y2goeCkge31cbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbiIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJpMThuXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJlbGVtZW50XCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZlbmRvclwiXVtcImNsYXNzbmFtZXNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJqUXVlcnlcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJSZWFjdFwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIlJlYWN0RE9NXCJdOyB9KCkpOyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/assets/dist/eventespresso-components.a397e3431e9283d42884.dist.deps.json b/assets/dist/eventespresso-components.332c68cccdbd210d4667.dist.deps.json similarity index 100% rename from assets/dist/eventespresso-components.a397e3431e9283d42884.dist.deps.json rename to assets/dist/eventespresso-components.332c68cccdbd210d4667.dist.deps.json diff --git a/assets/dist/eventespresso-components.a397e3431e9283d42884.dist.js b/assets/dist/eventespresso-components.332c68cccdbd210d4667.dist.js similarity index 59% rename from assets/dist/eventespresso-components.a397e3431e9283d42884.dist.js rename to assets/dist/eventespresso-components.332c68cccdbd210d4667.dist.js index 2b3f5c63e5f..e49eeb12702 100644 --- a/assets/dist/eventespresso-components.a397e3431e9283d42884.dist.js +++ b/assets/dist/eventespresso-components.332c68cccdbd210d4667.dist.js @@ -10077,54 +10077,75 @@ var assertDateTimeEntity = function assertDateTimeEntity(DateTimeEntity) { /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities + * @return {boolean} true if event date is valid entity or archive + */ + + +var isValidEntityOrArchive = function isValidEntityOrArchive(DateTimeEntity, includeTrashed) { + return includeTrashed && assertDateTimeEntity(DateTimeEntity) || !includeTrashed && !isTrashed(DateTimeEntity); +}; +/** + * @function + * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if event date is occurring NOW */ var isActive = function isActive(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - return DateTimeEntity.start.diffNow().asSeconds() < 0 && DateTimeEntity.end.diffNow().asSeconds() > 0; + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(DateTimeEntity, includeTrashed) && DateTimeEntity.start.diffNow().asSeconds() < 0 && DateTimeEntity.end.diffNow().asSeconds() > 0; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if end date is in the past */ var isExpired = function isExpired(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - return DateTimeEntity.end.diffNow().asSeconds() < 0; + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(DateTimeEntity, includeTrashed) && DateTimeEntity.end.diffNow().asSeconds() < 0; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if end date is in the past */ var isRecentlyExpired = function isRecentlyExpired(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - return DateTimeEntity.end.diffNow().asSeconds() < 0 && DateTimeEntity.end.diffNow().asSeconds() > _constants__WEBPACK_IMPORTED_MODULE_2__["MONTH_IN_SECONDS"] * -1; + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(DateTimeEntity, includeTrashed) && DateTimeEntity.end.diffNow().asSeconds() < 0 && DateTimeEntity.end.diffNow().asSeconds() > _constants__WEBPACK_IMPORTED_MODULE_2__["MONTH_IN_SECONDS"] * -1; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if tickets sold meets or exceeds registration limit */ var isSoldOut = function isSoldOut(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (includeTrashed && !assertDateTimeEntity(DateTimeEntity) || !includeTrashed && isTrashed(DateTimeEntity)) { + return false; + } + var cap = DateTimeEntity.regLimit; return cap !== null && cap !== 'INF' && cap !== Infinity && cap !== -1 && DateTimeEntity.sold >= cap; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if start date is in the future */ var isUpcoming = function isUpcoming(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - return DateTimeEntity.start.diffNow().asSeconds() > 0; + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(DateTimeEntity, includeTrashed) && DateTimeEntity.start.diffNow().asSeconds() > 0; }; /** * @function @@ -10166,8 +10187,6 @@ var isTrashed = function isTrashed(DateTimeEntity) { */ var status = function status(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - if (isTrashed(DateTimeEntity)) { return _constants__WEBPACK_IMPORTED_MODULE_2__["DATETIME_STATUS_ID"].TRASHED; } @@ -10195,6 +10214,7 @@ var status = function status(DateTimeEntity) { // } + assertDateTimeEntity(DateTimeEntity); return _constants__WEBPACK_IMPORTED_MODULE_2__["DATETIME_STATUS_ID"].INACTIVE; }; /** @@ -14105,45 +14125,65 @@ var assertTicketEntity = function assertTicketEntity(TicketEntity) { /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out trashed entities + * @return {boolean} true if event date is valid entity or archive + */ + + +var isValidEntityOrArchive = function isValidEntityOrArchive(TicketEntity, includeArchived) { + return includeArchived && assertTicketEntity(TicketEntity) || !includeArchived && !isArchived(TicketEntity); +}; +/** + * @function + * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if ticket is currently available for purchase */ var isOnSale = function isOnSale(TicketEntity) { - assertTicketEntity(TicketEntity); - return !isArchived(TicketEntity) && TicketEntity.startDate.diffNow() < 0 && TicketEntity.endDate.diffNow() > 0; + var includeArchived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(TicketEntity, includeArchived) && TicketEntity.startDate.diffNow() < 0 && TicketEntity.endDate.diffNow() > 0; }; /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if ticket can no longer be purchased */ var isExpired = function isExpired(TicketEntity) { - assertTicketEntity(TicketEntity); - return TicketEntity.endDate.diffNow() < 0; + var includeArchived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(TicketEntity, includeArchived) && TicketEntity.endDate.diffNow() < 0; }; /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if tickets sold meets or exceeds available quantity */ var isSoldOut = function isSoldOut(TicketEntity) { - assertTicketEntity(TicketEntity); + var includeArchived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (includeArchived && !assertTicketEntity(TicketEntity) || !includeArchived && isArchived(TicketEntity)) { + return false; + } + var qty = TicketEntity.qty; - return qty !== null && qty !== 'INF' && qty !== Infinity && TicketEntity.sold >= qty; + return qty !== null && qty !== 'INF' && qty !== Infinity && qty !== -1 && TicketEntity.sold >= qty; }; /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if ticket is not yet available for purchase, * but will be at some date in the future */ var isPending = function isPending(TicketEntity) { - assertTicketEntity(TicketEntity); - return !isArchived(TicketEntity) && TicketEntity.startDate.diffNow() > 0; + var includeArchived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(TicketEntity, includeArchived) && TicketEntity.startDate.diffNow() > 0; }; /** * @function @@ -14162,8 +14202,6 @@ var isArchived = function isArchived(TicketEntity) { */ var status = function status(TicketEntity) { - assertTicketEntity(TicketEntity); - if (isArchived(TicketEntity)) { return _constants__WEBPACK_IMPORTED_MODULE_2__["TICKET_STATUS_ID"].ARCHIVED; } @@ -28154,4 +28192,4 @@ module.exports = g; /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2V2ZW50LWF0dGVuZGVlcy9hdHRlbmRlZS1saXN0LWl0ZW0uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2V2ZW50LWF0dGVuZGVlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZXZlbnQtYXR0ZW5kZWVzL3N0eWxlLmNzcz9lOWZjIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2Jhc2UvYXV0by1mb3JtLXJvdy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL2Zvcm0tY2FuY2VsLWJ1dHRvbi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL2Zvcm0tY29udGFpbmVyLmNzcz82OTEyIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2Jhc2UvZm9ybS1jb250YWluZXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vYmFzZS9mb3JtLWRhdGEtZGVidWctZHVtcC5jc3M/ODIwNSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL2Zvcm0tZGF0YS1kZWJ1Zy1kdW1wLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2Jhc2UvZm9ybS1lcnJvci1ib3VuZGFyeS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL2Zvcm0taW5mby1iYXNlLmNzcz8zMjUxIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2Jhc2UvZm9ybS1pbmZvLWJhc2UuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vYmFzZS9mb3JtLXBsYWNlaG9sZGVyLmNzcz83ZGIyIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2Jhc2UvZm9ybS1wbGFjZWhvbGRlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL2Zvcm0tc3VibWl0LWJ1dHRvbi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL3N1Ym1pdHRpbmctbm90aWNlLmNzcz8yOWE2Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2Jhc2Uvc3VibWl0dGluZy1ub3RpY2UuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vYmFzZS93aXRoLWZvcm0tY29udGFpbmVyLWFuZC1wbGFjZWhvbGRlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL3dpdGgtZm9ybS1oYW5kbGVyLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2lucHV0cy9iYXNlL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS9kZWZhdWx0LWlucHV0LWxheW91dC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS9pbnB1dC1lcnJvci5jc3M/NjQyZSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS9pbnB1dC1lcnJvci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS9pbnB1dC1oZWxwLXRleHQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL2Jhc2UvaW5wdXQtbGFiZWwuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL2Jhc2Uvb3B0aW9uLWNoZWNrZWQtc3RhdGUuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL2Jhc2Uvb3B0aW9uLWlucHV0cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS9vcHRpb24tbGFiZWwtc2l6ZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS91dGlscy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvY2hlY2tib3gtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL2RhdGUtdGltZS1pbnB1dC5jc3M/ODZiNCIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvZGF0ZS10aW1lLWlucHV0LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2lucHV0cy9mb3JtLWlucHV0LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2lucHV0cy9oaWRkZW4taW5wdXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL2lubGluZS1lZGl0LWlucHV0LmNzcz9kZWNhIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2lucHV0cy9pbmxpbmUtZWRpdC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvcmFkaW8taW5wdXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL3NlbGVjdC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvdGV4dGFyZWEuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL3RvZ2dsZS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9sYXlvdXRzL3R3by1jb2x1bW4tYWRtaW4vYXV0by1jb2x1bW4tcm93LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2xheW91dHMvdHdvLWNvbHVtbi1hZG1pbi9mb3JtLWNvbHVtbi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9sYXlvdXRzL3R3by1jb2x1bW4tYWRtaW4vZm9ybS1pbmZvLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2xheW91dHMvdHdvLWNvbHVtbi1hZG1pbi9mb3JtLXJvdy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9sYXlvdXRzL3R3by1jb2x1bW4tYWRtaW4vZm9ybS1zYXZlLWNhbmNlbC1idXR0b25zLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2xheW91dHMvdHdvLWNvbHVtbi1hZG1pbi9mb3JtLXNlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbGF5b3V0cy90d28tY29sdW1uLWFkbWluL2Zvcm0td3JhcHBlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9sYXlvdXRzL3R3by1jb2x1bW4tYWRtaW4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbGF5b3V0cy90d28tY29sdW1uLWFkbWluL3R3by1jb2x1bW4tYWRtaW4uY3NzPzc5MmEiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbW9kZWwvYmFzZS9idWlsZC1vcHRpb25zLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL21vZGVsL2Jhc2UvY3JlYXRlLW1vZGVsLXNlbGVjdC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9tb2RlbC9iYXNlL2RlZmF1bHQtc2VsZWN0LWNvbmZpZ3VyYXRpb24uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbW9kZWwvYmFzZS9tb2RlbC1zZWxlY3QuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbW9kZWwvYmFzZS91dGlscy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9tb2RlbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9tb2RlbC9zZWxlY3QvZGF0ZXRpbWUuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbW9kZWwvc2VsZWN0L2V2ZW50LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL21vZGVsL3NlbGVjdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9tb2RlbC9zZWxlY3Qvc3RhdHVzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL21vZGVsL3NlbGVjdC90aWNrZXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vdmFsaWRhdGlvbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9xdWVyeS9saW1pdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZGF0ZXMtYW5kLXRpbWVzL2JpZ2dpZS1jYWxlbmRhci1kYXRlL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9kYXRlcy1hbmQtdGltZXMvYmlnZ2llLWNhbGVuZGFyLWRhdGUvc3R5bGUuY3NzP2NjY2MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2RhdGVzLWFuZC10aW1lcy9jYWxlbmRhci1kYXRlLXJhbmdlL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9kYXRlcy1hbmQtdGltZXMvY2FsZW5kYXItZGF0ZS1yYW5nZS9zdHlsZS5jc3M/MDlkNiIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZGF0ZXMtYW5kLXRpbWVzL2NhbGVuZGFyLXBhZ2UtZGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZGF0ZXMtYW5kLXRpbWVzL2NhbGVuZGFyLXBhZ2UtZGF0ZS9zdHlsZS5jc3M/OGJlMyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZGF0ZXMtYW5kLXRpbWVzL21lZGl1bS1jYWxlbmRhci1kYXRlL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9kYXRlcy1hbmQtdGltZXMvbWVkaXVtLWNhbGVuZGFyLWRhdGUvc3R5bGUuY3NzPzM1ZmIiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2Ryb3AtZG93bi1tZW51L2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9kcm9wLWRvd24tbWVudS9zdHlsZS5jc3M/MmM3MiIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZW50aXR5LWRldGFpbHMtcGFuZWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2VudGl0eS1kZXRhaWxzLXBhbmVsL3N0eWxlLmNzcz9hNmYyIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9lbnRpdHktbGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZW50aXR5LWxpc3Qvc3R5bGUuY3NzP2NjYjAiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2VudGl0eS1wYXBlci1mcmFtZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZW50aXR5LXBhcGVyLWZyYW1lL3N0eWxlLmNzcz9hYWY5Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9lc3ByZXNzby1idXR0b24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2ljb24tbWVudS1pdGVtL2VudGl0eS1hY3Rpb24tbWVudS1pdGVtLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9pY29uLW1lbnUtaXRlbS9pY29uLW1lbnUtaXRlbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvaWNvbi1tZW51LWl0ZW0vc3R5bGUuY3NzPzdjNjUiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2ltYWdlL2F2YXRhci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvaW1hZ2UvZXNwcmVzc28taWNvbi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvaW1hZ2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9tZW51L2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9tZW51L3N0ZXAtYnViYmxlL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9tZW51L3N0ZXAtYnViYmxlL3N0ZXAtYnViYmxlLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9tZW51L3N0ZXAtYnViYmxlL3N0ZXAtdGV4dC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvbWVudS9zdGVwLWJ1YmJsZS9zdHlsZS5jc3M/MDMxMiIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvcmVzcG9uc2l2ZS10YWJsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvcmVzcG9uc2l2ZS10YWJsZS9yZXNwb25zaXZlLWNlbGwuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3Jlc3BvbnNpdmUtdGFibGUvcmVzcG9uc2l2ZS10YWJsZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvcmVzcG9uc2l2ZS10YWJsZS9zdHlsZS5jc3M/YzRhMiIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvcmVzcG9uc2l2ZS10YWJsZS90YWJsZS1ib2R5LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9yZXNwb25zaXZlLXRhYmxlL3RhYmxlLWRhdGEtY2VsbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvcmVzcG9uc2l2ZS10YWJsZS90YWJsZS1mb290ZXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3Jlc3BvbnNpdmUtdGFibGUvdGFibGUtaGVhZGVyLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9yZXNwb25zaXZlLXRhYmxlL3RhYmxlLWhlYWRpbmctY2VsbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvcmVzcG9uc2l2ZS10YWJsZS90YWJsZS1yb3cuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3Jlc3BvbnNpdmUtdGFibGUvdGFibGUuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL2hlbHBlcnMvdmFsaWRhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2Fzc2VydGlvbnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2F0dGVuZGVlL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvYXR0ZW5kZWUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2F0dGVuZGVlL3F1ZXJ5LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9iYXNlLWRhdGUtZm9ybWF0dGVyLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9iYXNlLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9jaGVja2luL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvY2hlY2tpbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvY2hlY2tpbi9xdWVyeS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZGF0ZXRpbWUvY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9kYXRldGltZS9mb3JtYXR0ZXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2RhdGV0aW1lL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9kYXRldGltZS9xdWVyeS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZGF0ZXRpbWUvc3RhdHVzLWhlbHBlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZGVmYXVsdC1tb2RlbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW5kcG9pbnRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9hc3NlcnRpb25zLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9iYXNlLWVudGl0eS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvYm9vbGVhbnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvY3JlYXRlLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9leHRyYWN0b3JzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvdmFsaWRhdG9ycy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZXZlbnQvY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9ldmVudC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZXZlbnQvcXVlcnkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9tb2RlbC1uYW1lcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvbW9kZWxzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9wcmljZS10eXBlL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvcHJpY2UtdHlwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvcHJpbWFyeS1rZXlzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9yZWdpc3RyYXRpb24vY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9yZWdpc3RyYXRpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3JlZ2lzdHJhdGlvbi9xdWVyeS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvc3RhdHVzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvc3RhdHVzL2hlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3N0YXR1cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvc3RhdHVzL3F1ZXJ5LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC90aWNrZXQvY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC90aWNrZXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3RpY2tldC9xdWVyeS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvdGlja2V0L3N0YXR1cy1oZWxwZXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9iYXNlLWNvbnRyb2wuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9maWx0ZXItYmFyL2VudGl0eS1saXN0LWZpbHRlci1iYXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9maWx0ZXItYmFyL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvZmlsdGVyLWJhci9zdHlsZS5jc3M/MjFmMiIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL2ZpbHRlci1iYXIvd2l0aC1lbnRpdHktbGlzdC1maWx0ZXItYmFyLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvZmlsdGVyLWJhci93aXRoLWVudGl0eS1saXN0LWZpbHRlci1zdGF0ZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvbW9uZXkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9wYWdpbmF0aW9uL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvcGFnaW5hdGlvbi9zdHlsZS5jc3M/NzBlMyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL3dpdGgtbGF0ZXN0LWNoZWNraW4uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RTcHJlYWQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9jYWNoZS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxpcy9kaXN0L3N0eWxpcy5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY29yZS9kaXN0L2NvcmUuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2Nzcy9kaXN0L2Nzcy5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc2VyaWFsaXplL2Rpc3Qvc2VyaWFsaXplLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvbm9kZV9tb2R1bGVzL0BlbW90aW9uL2hhc2gvZGlzdC9oYXNoLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9tZW1vaXplLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvdW5pdGxlc3MuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3Qvc2hlZXQuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvdXRpbHMuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3dlYWstbWVtb2l6ZS9kaXN0L3dlYWstbWVtb2l6ZS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvZmluYWwtZm9ybS9kaXN0L2ZpbmFsLWZvcm0uZXMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2p3LXJlYWN0LXBhZ2luYXRpb24vbGliL0p3UGFnaW5hdGlvbi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvbWVtaXplL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9tZW1vaXplLW9uZS9kaXN0L21lbW9pemUtb25lLmVzbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcGVyZm9ybWFuY2Utbm93L2xpYi9wZXJmb3JtYW5jZS1ub3cuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3BsdXJhbGl6ZS9wbHVyYWxpemUuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3JhZi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcmVhY3QtZmluYWwtZm9ybS1saXN0ZW5lcnMvZGlzdC9yZWFjdC1maW5hbC1mb3JtLWxpc3RlbmVycy5lcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcmVhY3QtZmluYWwtZm9ybS9kaXN0L3JlYWN0LWZpbmFsLWZvcm0uZXMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlucHV0LWF1dG9zaXplL2xpYi9BdXRvc2l6ZUlucHV0LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9iYXNlL2Rpc3QvcmVhY3Qtc2VsZWN0LWEzNGU5ZDEyLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9jaHVuay01ZDIwMGE0MS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcmVhY3Qtc2VsZWN0L2Rpc3QvY2h1bmstYjM2YmFmMWEuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXNlbGVjdC9kaXN0L2NodW5rLWU4YWU0YjBmLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9yZWFjdC1zZWxlY3QuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3dhcm5pbmcvd2FybmluZy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy9leHRlcm5hbCB7XCJ0aGlzXCI6XCJyZWdlbmVyYXRvclJ1bnRpbWVcIn0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImhlbHBlcnNcIl19Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwiaTE4blwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJtb2RlbFwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2YWxpZGF0b3JzXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcInZhbHVlT2JqZWN0c1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiY29tcG9uZW50c1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiY29tcG9zZVwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiZGF0YVwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiZWxlbWVudFwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiaG9va3NcIl19Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImlzU2hhbGxvd0VxdWFsXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJrZXljb2Rlc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2ZW5kb3JcIixcImNsYXNzbmFtZXNcIl19Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwidmVuZG9yXCIsXCJjdWlkXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvZXh0ZXJuYWwge1widGhpc1wiOlwibG9kYXNoXCJ9Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwidmVuZG9yXCIsXCJtb21lbnRcIl19Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy9leHRlcm5hbCB7XCJ0aGlzXCI6XCJSZWFjdFwifSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvZXh0ZXJuYWwge1widGhpc1wiOlwiUmVhY3RET01cIn0iXSwibmFtZXMiOlsiQXR0ZW5kZWVMaXN0SXRlbSIsImlzTG9hZGluZyIsImF0dGVuZGVlIiwic2hvd0dyYXZhdGFyIiwiYXZhdGFyT3B0aW9ucyIsImdldEF2YXRhclVybCIsInVybCIsImhhc0NhbGN1bGF0ZWRGaWVsZCIsInVzZXJBdmF0YXIiLCJhdmF0YXJVcmwiLCJnZXRBdHRlbmRlZU5hbWUiLCJmbmFtZSIsImxuYW1lIiwiZ2V0QXZhdGFyIiwid2FybmluZyIsImlzTW9kZWxFbnRpdHlPZk1vZGVsIiwiRXZlbnRBdHRlbmRlZUxpc3QiLCJwcm9wcyIsImF0dGVuZGVlcyIsImlzRW1wdHkiLCJsaXN0SXRlbXMiLCJtYXAiLCJpZCIsImNvbnRhaW5lckNzc0NsYXNzIiwiY29udGFpbmVySWQiLCJjbGFzc05hbWVzIiwiZ2V0QXR0ZW5kZWVMaXN0IiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwiYm9vbCIsImFycmF5Iiwic3RyaW5nIiwiQXV0b0Zvcm1Sb3ciLCJGb3JtRWxlbWVudCIsIkF1dG9Db2x1bW5Sb3ciLCJsYWJlbCIsImlucHV0Iiwicm93IiwidHlwZSIsIm5hbWUiLCJ2YWxpZGF0aW9ucyIsIkFycmF5IiwiaXNBcnJheSIsImF0dHJpYnV0ZXMiLCJhZGRWYWxpZGF0b3JzVG9BdHRyaWJ1dGVzIiwicmVxdWlyZWQiLCJodG1sSWQiLCJGb3JtQ2FuY2VsQnV0dG9uIiwib25DbGljayIsInByaXN0aW5lIiwic3VibWl0dGluZyIsImJ1dHRvblRleHQiLCJodG1sQ2xhc3MiLCJfXyIsInByb3BUeXBlcyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwiZGVmYXVsdFByb3BzIiwiRm9ybUNvbnRhaW5lciIsImNoaWxkcmVuIiwibG9hZGluZyIsImNvbnRhaW5lckNsYXNzIiwiRm9ybURhdGFEZWJ1Z0R1bXAiLCJ2YWx1ZXMiLCJfX0RFVl9fIiwiSlNPTiIsInN0cmluZ2lmeSIsIkZvcm1FcnJvckJvdW5kYXJ5Iiwic3RhdGUiLCJlcnJvciIsImVycm9ySW5mbyIsImluZm8iLCJzZXRTdGF0ZSIsImVycm9yTWVzc2FnZSIsIndoaXRlU3BhY2UiLCJ0b1N0cmluZyIsImNvbXBvbmVudFN0YWNrIiwiRm9ybUluZm9CYXNlIiwiZm9ybUluZm8iLCJkYXNoaWNvbiIsIm9uRGlzbWlzcyIsImZvcm1JbmZvVmFycyIsInR5cGVJY29uIiwiZGlzbWlzcyIsImZvcm1JbmZvVGV4dCIsImNodW5rcyIsInNwbGl0IiwieCIsImxlbmd0aCIsInB1c2giLCJGb3JtUGxhY2Vob2xkZXIiLCJub3RpY2UiLCJzcHJpbnRmIiwiX3giLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJGb3JtU3VibWl0QnV0dG9uIiwiZGlzYWJsZWQiLCJidXR0b25JY29uIiwic3VibWl0dGluZ1RleHQiLCJzdWJtaXR0aW5nVGV4dFBvc2l0aW9uIiwibm90aWNlQ2xhc3MiLCJidXR0b25Qcm9wcyIsIlN1Ym1pdHRpbmdOb3RpY2UiLCJwb3NpdGlvbiIsInNpemUiLCJzdHlsZSIsIm9uZU9mIiwib2JqZWN0IiwiY29tcG9zZSIsIndpdGhJbnN0YW5jZUlkIiwiY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQiLCJGb3JtIiwiaW5zdGFuY2VJZCIsImxvYWRpbmdOb3RpY2UiLCJmb3JtUHJvcHMiLCJ3aXRoRm9ybUhhbmRsZXIiLCJGb3JtQ29tcG9uZW50IiwiRm9ybUhhbmRsZXIiLCJjaGFuZ2VzIiwiZGF0YSIsImlzRnVuY3Rpb24iLCJsb2FkSGFuZGxlciIsInN1Ym1pdEJ1dHRvblRleHQiLCJyZXNldEhhbmRsZXIiLCJjYW5jZWxCdXR0b25UZXh0IiwiZGVjb3JhdG9ycyIsIm11dGF0b3JzIiwiZm9ybUNoYW5nZXMiLCJzZXRNdXRhdG9yQ2FsbGJhY2tzIiwiZm9ybURhdGEiLCJzaG93U3VibWl0Iiwic3VibWl0SGFuZGxlciIsImNhc3RBcnJheSIsImZvcm0iLCJoYW5kbGVTdWJtaXQiLCJpbnZhbGlkIiwic3VibWl0QnV0dG9uIiwiZm9ybVJlc2V0IiwiZXZlbnQiLCJyZXNldCIsImNhbmNlbEJ1dHRvbiIsIm1hcmtDaGFuZ2VzIiwiSFRNTDVfSU5QVVRfVFlQRVMiLCJIVE1MNV9JTlBVVF9UWVBFU19URVhUIiwiRGVmYXVsdElucHV0TGF5b3V0IiwiZm9ybUlucHV0IiwiaW5wdXROYW1lIiwiaGVscFRleHRJRCIsImhlbHBUZXh0IiwiSW5wdXRFcnJvciIsInRvdWNoZWQiLCJtZXRhIiwiSW5wdXRIZWxwVGV4dCIsIklucHV0TGFiZWwiLCJodG1sRm9yIiwic3Ryb25nIiwiaGlkZGVuIiwiYXN0ZXJpc2siLCJ1bmRlZmluZWQiLCJvbmVPZlR5cGUiLCJudW1iZXIiLCJhcnJheU9mIiwiT3B0aW9uQ2hlY2tlZFN0YXRlIiwiaW5wdXRJZCIsIm9wdGlvbnMiLCJjaGVja2VkIiwiZm9yRWFjaCIsIm9wdGlvbiIsImluZGV4Iiwia2V5IiwiaXNTZWxlY3RlZCIsImluZGV4T2YiLCJ2YWx1ZSIsImRlZmF1bHRWYWx1ZSIsIk9wdGlvbklucHV0cyIsImNoZWNrZWRTdGF0ZSIsImxhYmVsQ2xhc3MiLCJkYXRhU2V0IiwiaW5pdGlhbFZhbHVlIiwiY291bnQiLCJzaGFwZSIsIm9uQ2hhbmdlIiwiT3B0aW9uTGFiZWxTaXplIiwibGFiZWxTaXplIiwiY2xlYW5VcElucHV0QXR0cmlidXRlcyIsIm9taXQiLCJjb21wb3NlVmFsaWRhdG9ycyIsInZhbGlkYXRvcnMiLCJyZWR1Y2UiLCJ2YWxpZGF0b3IiLCJnZXRWYWx1ZXNGb3JPcHRpb25zIiwicHJlcGFyZURhdGFTZXQiLCJoYXNPd25Qcm9wZXJ0eSIsInN0YXJ0c1dpdGgiLCJDaGVja2JveElucHV0IiwidGFyZ2V0IiwicmVzZXRTdGF0ZSIsImJ0bkdyb3VwIiwiaW5wdXRXaWR0aCIsImRpdkNsYXNzIiwidG9nZ2xlQ2hlY2tlZCIsIkRhdGVUaW1lRHJvcGRvd24iLCJEYXRlIiwiaXMxMkhvdXJUaW1lIiwidGVzdCIsIlRJTUVfRk9STUFUX1NJVEUiLCJ0b0xvd2VyQ2FzZSIsInJlcGxhY2UiLCJyZXZlcnNlIiwiam9pbiIsImVkaXRvck9wZW4iLCJpbnB1dFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJwcmV2U3RhdGUiLCJuZXdEYXRlIiwidG9JU09TdHJpbmciLCJpbnB1dENsYXNzIiwiU2VydmVyRGF0ZVRpbWUiLCJmcm9tSlNEYXRlIiwib25Ub2dnbGUiLCJ0b0Zvcm1hdCIsIkRBVEVfVElNRV9GT1JNQVRfU0lURSIsImtleUNvZGUiLCJFTlRFUiIsIlNQQUNFIiwiRVNQUkVTU09fSUNPTl9DQUxFTkRBUiIsIlNFUlZFUl9MT0NBTEUiLCJ1cGRhdGUiLCJjYW5jZWwiLCJEYXRlVGltZUlucHV0IiwiRm9ybUlucHV0IiwiSW5wdXRMYXlvdXQiLCJjaGFuZ2VMaXN0ZW5lciIsImFmdGVySW5wdXQiLCJyZXN0IiwiZm9ybUxpc3RlbmVyIiwiSGlkZGVuSW5wdXQiLCJJbmxpbmVFZGl0SW5wdXQiLCJwcmV2UHJvcHMiLCJzYXZpbmciLCJlZGl0aW5nIiwiY3VycmVudCIsImZvY3VzIiwiZG9uZSIsIm9yaWdWYWx1ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiZWRpdCIsIkVTQ0FQRSIsInZhbHVlVHlwZSIsImlucHV0UHJvcHMiLCJub3RpY2VTdHlsZSIsInRleHRDaGFuZ2UiLCJrZXlEb3duSW5wdXQiLCJzcGlubmVyIiwidmFsdWVGb3JtYXR0ZXIiLCJmb3JtYXR0ZXJTZXR0aW5ncyIsImtleVNlbGVjdCIsImNyZWF0ZVJlZiIsImVkaXRDb21wb25lbnQiLCJkaXNwbGF5Q29tcG9uZW50IiwiUmFkaW9JbnB1dCIsIlNlbGVjdElucHV0Iiwib3B0aW9uTGlzdCIsIlRleHRJbnB1dCIsIlRleHRhcmVhIiwiVG9nZ2xlIiwiaGVscFRleHRJZkNoZWNrZWQiLCJoZWxwVGV4dElmTm90Q2hlY2tlZCIsInRvZ2dsZSIsIlRvZ2dsZUlucHV0IiwiQ2hpbGRyZW4iLCJjaGlsZCIsImNvbFNpemUiLCJsYWJlbENvbFNpemUiLCJGb3JtQ29sdW1uIiwib2Zmc2V0IiwiYWxpZ24iLCJleHRyYUF0dHJpYnV0ZXMiLCJGb3JtSW5mbyIsImRpc21pc3NhYmxlIiwiRm9ybVJvdyIsIkZvcm1TYXZlQ2FuY2VsQnV0dG9ucyIsIkZvcm1TZWN0aW9uIiwiRm9ybVdyYXBwZXIiLCJ0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQiLCJidWlsZE9wdGlvbnMiLCJlbnRpdGllcyIsIm9wdGlvbnNFbnRpdHlNYXAiLCJtYXBTZWxlY3Rpb24iLCJpc01hcCIsImZyb20iLCJpc1VuZGVmaW5lZCIsInJlZHVjZXJDYWxsYmFjayIsImVudGl0eSIsImRlZmF1bHRQcm9wVHlwZXMiLCJzZWxlY3RlZCIsIm9uU2VsZWN0IiwiY3JlYXRlTW9kZWxTZWxlY3QiLCJtb2RlbE5hbWUiLCJNb2RlbFNlbGVjdENvbXBvbmVudCIsInF1ZXJ5RGF0YSIsInNlbGVjdE9wdGlvbnMiLCJzZWxlY3RDb25maWd1cmF0aW9uIiwiY29uc3RydWN0b3IiLCJkaXNwbGF5TmFtZSIsIm1vZGVsU2VsZWN0TmFtZSIsIlJFQUNUX1NFTEVDVF9UWVBFUyIsImF1dG9Gb2N1cyIsImJhY2tzcGFjZVJlbW92ZXNWYWx1ZSIsImJsdXJJbnB1dE9uU2VsZWN0IiwiY2FwdHVyZU1lbnVTY3JvbGwiLCJjbGFzc05hbWUiLCJjbGFzc05hbWVQcmVmaXgiLCJjbG9zZU1lbnVPblNlbGVjdCIsImNvbXBvbmVudHMiLCJjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUiLCJkZWxpbWl0ZXIiLCJlc2NhcGVDbGVhcnNWYWx1ZSIsImZpbHRlck9wdGlvbiIsImZvcm1hdEdyb3VwTGFiZWwiLCJmb3JtYXRPcHRpb25MYWJlbCIsImdldE9wdGlvbkxhYmVsIiwiZ2V0T3B0aW9uVmFsdWUiLCJoaWRlU2VsZWN0ZWRPcHRpb25zIiwiaXNDbGVhcmFibGUiLCJpc0Rpc2FibGVkIiwiaXNPcHRpb25EaXNhYmxlZCIsImlzT3B0aW9uU2VsZWN0ZWQiLCJpc011bHRpIiwiaXNTZWFyY2hhYmxlIiwibG9hZGluZ01lc3NhZ2UiLCJtaW5NZW51SGVpZ2h0IiwibWF4TWVudUhlaWdodCIsIm1lbnVJc09wZW4iLCJtZW51UGxhY2VtZW50IiwibWVudVBvc2l0aW9uIiwibWVudVBvcnRhbFRhcmdldCIsImVsZW1lbnQiLCJtZW51U2hvdWxkQmxvY2tTY3JvbGwiLCJtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXciLCJub09wdGlvbnNNZXNzYWdlIiwib25CbHVyIiwib25Gb2N1cyIsIm9uSW5wdXRDaGFuZ2UiLCJvbktleURvd24iLCJvbk1lbnVPcGVuIiwib25NZW51Q2xvc2UiLCJvbk1lbnVTY3JvbGxUb1RvcCIsIm9uTWVudVNjcm9sbFRvQm90dG9tIiwib3Blbk1lbnVPbkZvY3VzIiwib3Blbk1lbnVPbkNsaWNrIiwicGFnZVNpemUiLCJwbGFjZWhvbGRlciIsInNjcmVlblJlYWRlclN0YXR1cyIsInN0eWxlcyIsImNsZWFySW5kaWNhdG9yIiwiY29udGFpbmVyIiwiY29udHJvbCIsImRyb3Bkb3duSW5kaWNhdG9yIiwiZ3JvdXAiLCJncm91cEhlYWRpbmciLCJpbmRpY2F0b3JzQ29udGFpbmVyIiwiaW5kaWNhdG9yU2VwYXJhdG9yIiwibG9hZGluZ0luZGljYXRvciIsImxvYWRpbmdNZXNzYWdlQ1NTIiwibWVudSIsIm1lbnVMaXN0IiwibWVudVBvcnRhbCIsIm11bHRpVmFsdWUiLCJtdWx0aVZhbHVlTGFiZWwiLCJtdWx0aVZhbHVlUmVtb3ZlIiwibm9PcHRpb25zTWVzc2FnZUNTUyIsInNpbmdsZVZhbHVlIiwidmFsdWVDb250YWluZXIiLCJ0YWJJbmRleCIsInRhYlNlbGVjdHNWYWx1ZSIsIlJFQUNUX1NFTEVDVF9ERUZBVUxUUyIsIk1vZGVsU2VsZWN0Iiwic2V0U3RhdGVGcm9tUHJvcHMiLCJzaG91bGRVcGRhdGVTdGF0ZSIsImdldFNlbGVjdExhYmVsIiwiZ2V0T3B0aW9ucyIsInNlbGVjdGVkVmFsdWUiLCJnZXRPcHRpb25PYmplY3RGb3JWYWx1ZSIsInVwZGF0ZWQiLCJtYXBPcHRpb25zQ2FsbGJhY2siLCJtb2RlbEVudGl0aWVzIiwibWF0Y2giLCJmaW5kIiwibmV4dFByb3BzIiwicHJldkNvbmZpZ3VyYXRpb24iLCJuZXh0Q29uZmlndXJhdGlvbiIsImlzU2hhbGxvd0VxdWFsIiwia2V5cyIsIk1PREVMX05BTUVTIiwibGltaXQiLCJvcmRlckJ5Iiwib3JkZXIiLCJBTExPV0VEX09SREVSX1ZBTFVFUyIsImdldFF1ZXJ5U3RyaW5nIiwidW5pcXVlSWQiLCJRVUVSWV9PUkRFUl9ERVNDIiwid2l0aFNlbGVjdCIsInNlbGVjdCIsIm93blByb3BzIiwicXVlcnlTdHJpbmciLCJnZXRFbnRpdGllcyIsImlzUmVxdWVzdGluZ0VudGl0aWVzIiwidXBwZXJGaXJzdCIsImNhbWVsQ2FzZSIsImRlZmF1bHQiLCJtb2RlbCIsInByZXR0eURhdGVGcm9tRGF0ZVRpbWUiLCJEYXRldGltZVNlbGVjdCIsIk1PREVMX05BTUUiLCJkZWZhdWx0UXVlcnlEYXRhIiwicXVlcnlEYXRhVHlwZXMiLCJFZGl0b3JEYXRldGltZVNlbGVjdCIsIndpdGhCYXNlQ29udHJvbCIsIkV2ZW50U2VsZWN0IiwiRWRpdG9yRXZlbnRTZWxlY3QiLCJzdGF0dXNFbnRpdHkiLCJzdGF0dXNNb2RlbCIsInByZXR0eVN0YXR1cyIsIlNUU19JRCIsIlN0YXR1c1NlbGVjdCIsIkFMTF9TVEFUVVNfSURTIiwiRWRpdG9yU3RhdHVzU2VsZWN0IiwiVGlja2V0U2VsZWN0IiwiRWRpdG9yVGlja2V0U2VsZWN0IiwiaXNGbG9hdCIsImlzVmFsaWRGbG9hdCIsImlzSW50ZWdlciIsImlzVmFsaWRJbnRlZ2VyIiwiaXNOdW1lcmljIiwiaXNWYWxpZE51bWVyaWMiLCJtYXRjaGVzIiwiZmllbGRWYWx1ZSIsImZpZWxkTmFtZSIsInZhbHVlVG9NYXRjaCIsIm1heEZsb2F0IiwibWF4IiwiZmxvYXRMZXNzVGhhbk9yRXF1YWxUbyIsIl9uIiwibWF4TGVuZ3RoIiwic3RyaW5nTGVuZ3RoTGVzc1RoYW5PckVxdWFsVG8iLCJtYXhOdW1iZXIiLCJudW1iZXJMZXNzVGhhbk9yRXF1YWxUbyIsIm1pbkZsb2F0IiwibWluIiwiZmxvYXRHcmVhdGVyVGhhbk9yRXF1YWxUbyIsIm1pbkxlbmd0aCIsInN0cmluZ0xlbmd0aEdyZWF0ZXJUaGFuT3JFcXVhbFRvIiwibWluTnVtYmVyIiwibnVtYmVyR3JlYXRlclRoYW5PckVxdWFsVG8iLCJERUZBVUxUX0xJTUlUIiwiREVGQVVMVF9MQUJFTCIsIkRFRkFVTFRfTUlOIiwiREVGQVVMVF9NQVgiLCJRdWVyeUxpbWl0Iiwib25MaW1pdENoYW5nZSIsIndpdGhTbGlkZXIiLCJCaWdnaWVDYWxlbmRhckRhdGUiLCJkYXRlIiwiaGVhZGVyVGV4dCIsImZvb3RlclRleHQiLCJvbkVkaXQiLCJlZGl0QnV0dG9uIiwic2hvd1RpbWUiLCJlZGl0RGF0ZUJ1dHRvbiIsInRvb2x0aXAiLCJ0b29sdGlwUG9zaXRpb24iLCJpbnN0YW5jZU9mIiwiRGF0ZVRpbWUiLCJDYWxlbmRhckRhdGVSYW5nZSIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJ0aW1lIiwiQ2FsZW5kYXJQYWdlRGF0ZSIsInN0YXR1c0NsYXNzIiwicmVuZGVyQ2FsZW5kYXJQYWdlIiwic3RhcnRPckVuZCIsInBhZ2VDbGFzcyIsIm90aGVyUHJvcHMiLCJnZXRTdGFydERhdGUiLCJnZXREaXZpZGVyIiwiZ2V0RW5kRGF0ZSIsIk1lZGl1bUNhbGVuZGFyRGF0ZSIsImFkZFdyYXBwZXIiLCJtZWRpdW1EYXRlIiwiRHJvcERvd25NZW51IiwibWVudUl0ZW1zIiwiRW50aXR5RGV0YWlsc1BhbmVsIiwiZWRpdGFibGUiLCJJbmZpbml0eSIsImRldGFpbHMiLCJkZXRhaWwiLCJlbnRpdHlEZXRhaWwiLCJkZXRhaWxzU2VwYXJhdG9yIiwiRW50aXR5TGlzdCIsIkVudGl0eUdyaWRWaWV3IiwiRW50aXR5TGlzdFZpZXciLCJ2aWV3Iiwibm9SZXN1bHRzVGV4dCIsIndpdGhvdXQiLCJlbnRpdHlMaXN0Iiwid2l0aEZvcm1Db250YWluZXJBbmRQbGFjZWhvbGRlciIsIkVudGl0eSIsIkVzcHJlc3NvQnV0dG9uIiwiaWNvbiIsImljb25TaXplIiwiRW50aXR5QWN0aW9uTWVudUl0ZW0iLCJJY29uTWVudUl0ZW0iLCJpdGVtQ291bnQiLCJleHRlcm5hbEFwcCIsImJ0bkNsYXNzIiwicGFyc2VJbnQiLCJpdGVtQ291bnRDbGFzcyIsIm5vZGUiLCJBdmF0YXJJbWFnZSIsImF2YXRhckNsYXNzIiwiYXZhdGFySGVpZ2h0IiwiYXZhdGFyV2lkdGgiLCJhdmF0YXJBbHRUZXh0IiwiaGVpZ2h0Iiwid2lkdGgiLCJFU1BSRVNTT19JQ09OX0NBTENVTEFUT1IiLCJFU1BSRVNTT19JQ09OX1JFTSIsIkVTUFJFU1NPX0lDT05fU0FWRSIsImlzRXNwcmVzc29JY29uIiwiRXNwcmVzc29JY29uIiwicGF0aCIsImFzc2VydFN0ZXBDb25maWd1cmF0aW9uIiwiVHlwZUVycm9yIiwiZ2V0U3RlcEJ1YmJsZXMiLCJidWJibGVEYXRhIiwic3RlcEJ1YmJsZXMiLCJzbHVnIiwiYWN0aW9uIiwiY2xpY2thYmxlIiwiYWN0aXZlIiwiU3RlcEJ1YmJsZU1lbnUiLCJTdGVwQnViYmxlIiwiaXNBY3RpdmUiLCJzdGVwVmFsdWUiLCJjc3NDbGFzcyIsImNsaWNrQWN0aW9ucyIsIm9uS2V5UHJlc3MiLCJyb2xlIiwicHVyZSIsIlN0ZXBUZXh0IiwiY29udGVudCIsIkVzcHJlc3NvVGFibGUiLCJUYWJsZSIsIlRhYmxlSGVhZGVyIiwiVGFibGVCb2R5IiwiVGFibGVSb3ciLCJUYWJsZUZvb3RlciIsIlRhYmxlSGVhZGluZ0NlbGwiLCJUYWJsZURhdGFDZWxsIiwiUmVzcG9uc2l2ZVRhYmxlIiwiUmVzcG9uc2l2ZUNlbGwiLCJoZWFkaW5nIiwibWV0YURhdGEiLCJ0YWJsZUlkIiwiTWF0aCIsInJhbmRvbSIsInN1YnN0ciIsInRhYmxlQ2FwdGlvbiIsImNhcHRpb25JRCIsInNob3dUYWJsZUZvb3RlciIsImhhc1Jvd0hlYWRlcnMiLCJjbGFzc2VzIiwidGFibGVDbGFzcyIsImhlYWRlckNsYXNzIiwiaGVhZGVyUm93Q2xhc3MiLCJoZWFkZXJUaENsYXNzIiwiYm9keUNsYXNzIiwiYm9keVJvd0NsYXNzIiwiYm9keVRoQ2xhc3MiLCJib2R5VGRDbGFzcyIsImZvb3RlckNsYXNzIiwiZm9vdGVyUm93Q2xhc3MiLCJmb290ZXJUaENsYXNzIiwiY29sdW1ucyIsImlzRm9vdGVyIiwicm93TnVtYmVyIiwicm93VHlwZSIsInJvd1Byb3BzIiwiaW5kZXhNb2QiLCJoZWFkZXJDZWxscyIsImNvbHVtbiIsImNvbE51bWJlciIsImhhc1JlbmRlckNhbGxiYWNrIiwicmVuZGVyIiwicmVuZGVyQ2FsbGJhY2siLCJoZWFkaW5nQ2VsbCIsInRhYmxlUm93IiwiY2VsbHMiLCJjbGFzcyIsImNlbGxQcm9wcyIsImRhdGFSb3ciLCJyb3dDZWxscyIsImNlbGxEYXRhIiwiZGF0YUNlbGwiLCJyb3dEYXRhIiwiZm9vdGVyRGF0YSIsInNldE1ldGFEYXRhIiwic2V0Q3NzQ2xhc3NlcyIsInRhYmxlSGVhZGVyIiwiZXh0cmFQcm9wcyIsInNob3dGb290ZXIiLCJyb3dUeXBlQ2xhc3MiLCJzY29wZSIsImNhcHRpb25UZXh0IiwicmVnZXgxIiwicGFyc2VGbG9hdCIsIk51bWJlciIsImlzSW5maW5pdGUiLCJudWxsSXNJbmZpbml0eSIsImlzTmFOIiwiaXNGaW5pdGUiLCJhc3NlcnRFbnRpdHlIYXNLZXkiLCJtZXNzYWdlIiwiRXhjZXB0aW9uIiwiYXNzZXJ0SW1tdXRhYmxlT2JqZWN0SGFzUGF0aCIsImltbXV0YWJsZSIsImhhc0luIiwiYXNzZXJ0SXNBcnJheSIsIml0ZW1zIiwiYXNzZXJ0SXNOb3RFbXB0eSIsImFzc2VydElzTWFwIiwiaXRlbSIsIm9yZGVyQnlNYXAiLCJsYXN0TmFtZU9ubHkiLCJmaXJzdE5hbWVPbmx5IiwiZmlyc3RUaGVuTGFzdE5hbWUiLCJsYXN0VGhlbkZpcnN0TmFtZSIsImZvckV2ZW50SWQiLCJmb3JEYXRldGltZUlkIiwiZm9yVGlja2V0SWQiLCJmb3JTdGF0dXNJZCIsIlJFR0lTVFJBVElPTl9TVEFUVVNfSURTIiwiZm9yUmVnaXN0cmF0aW9uSWQiLCJPYmplY3QiLCJRVUVSWV9PUkRFUl9BU0MiLCJtYXBPcmRlckJ5Iiwid2hlcmVDb25kaXRpb25zIiwid2hlcmUiLCJpbmNsdWRlcyIsImJhc2VHZXRRdWVyeVN0cmluZyIsImZvcm1hdERhdGVzT25FbnRpdGllcyIsImVudGl0eURhdGVGaWVsZHMiLCJmb3JtYXQiLCJkYXRlRm9ybWF0cyIsImxvY2FsIiwiZm9ybWF0dGVkRW50aXRpZXMiLCJmb3JtYXREYXRlc09uRW50aXR5IiwibmV3RW50aXR5IiwiZGF0ZUZpZWxkIiwiZm9ybWF0RW50aXRpZXNEYXRlc1RvTXlzcWwiLCJmb3JtYXRFbnRpdHlEYXRlc1RvTXlzcWwiLCJmb3JtYXRFbnRpdGllc0RhdGVzVG9TaXRlIiwiZm9ybWF0RW50aXR5RGF0ZXNUb1NpdGUiLCJjb252ZXJ0RW50aXRpZXNEYXRlc1RvTW9tZW50IiwiY29udmVydEVudGl0eURhdGVzVG9Nb21lbnQiLCJHUkVBVEVSX1RIQU4iLCJlbmNvZGVVUklDb21wb25lbnQiLCJMRVNTX1RIQU4iLCJHUkVBVEVSX1RIQU5fQU5EX0VRVUFMIiwiTEVTU19USEFOX0FORF9FUVVBTCIsImRlZmF1bHRXaGVyZUNvbmRpdGlvbnMiLCJxdWVyeVBhcmFtcyIsImZpZWxkIiwiQ0hFQ0tJTl9TVEFUVVNfSUQiLCJTVEFUVVNfQ0hFQ0tFRF9PVVQiLCJTVEFUVVNfQ0hFQ0tFRF9JTiIsIlNUQVRVU19DSEVDS0VEX05FVkVSIiwiQ0hFQ0tJTl9TVEFUVVNfSURTIiwiY2hlY2tpblN0YXR1cyIsInRpbWVzdGFtcCIsIkRBVEVUSU1FX1NUQVRVU19JRCIsIkFDVElWRSIsIkNBTkNFTExFRCIsIkVYUElSRUQiLCJJTkFDVElWRSIsIlBPU1RQT05FRCIsIlNPTERfT1VUIiwiVFJBU0hFRCIsIlVQQ09NSU5HIiwiREFURVRJTUVfU1RBVFVTX0lEUyIsIk1JTlVURV9JTl9TRUNPTkRTIiwiSE9VUl9JTl9TRUNPTkRTIiwiREFZX0lOX1NFQ09ORFMiLCJXRUVLX0lOX1NFQ09ORFMiLCJNT05USF9JTl9TRUNPTkRTIiwiREFURV9GSUVMRFMiLCJmb3JtYXR0ZXJzIiwiZm9yT3duIiwiYmFzZUZvcm1hdHRlciIsImltcGxlbWVudGF0aW9uIiwiZnVuY3Rpb25OYW1lIiwiaW5jb21pbmdBcmdzIiwiZmlyc3RBcmciLCJwdWxsQXQiLCJEYXRlVGltZUVudGl0eSIsIkRUVF9FVlRfc3RhcnQiLCJoYXNTYW1lIiwiRFRUX0VWVF9lbmQiLCJhbGxEYXRlVGltZXNBc1N0cmluZyIsIlNFUEFSQVRPUl9TUEFDRV9EQVNIX1NQQUNFIiwiRFRUX25hbWUiLCJub3dEYXRlQW5kVGltZSIsIm1vbWVudCIsInNob3dFeHBpcmVkIiwibW9udGgiLCJzdGFydF9kYXRlIiwiZW5kX2RhdGUiLCJzdGFydE9mIiwiZW5kT2YiLCJhc3NlcnREYXRlVGltZUVudGl0eSIsInN0YXJ0IiwiZGlmZk5vdyIsImFzU2Vjb25kcyIsImVuZCIsImlzRXhwaXJlZCIsImlzUmVjZW50bHlFeHBpcmVkIiwiaXNTb2xkT3V0IiwiY2FwIiwicmVnTGltaXQiLCJzb2xkIiwiaXNVcGNvbWluZyIsImlzVHJhc2hlZCIsImRlbGV0ZWQiLCJzdGF0dXMiLCJnZXRCYWNrZ3JvdW5kQ29sb3JDbGFzcyIsImdldERhdGVUaW1lU3RhdHVzVGV4dExhYmVsIiwiZGF0ZVN0YXR1cyIsIm1hcFRvT2JqZWN0VmFsdWVzIiwibW9kZWxOYW1lRW5kcG9pbnRzIiwibWFwVmFsdWVzIiwiZ2V0RGVmYXVsdE1vZGVsRW50aXRpZXNPYmplY3QiLCJtZW1vaXplIiwiZW5kcG9pbnRzIiwiREVGQVVMVF9MSVNUU19TVEFURSIsIkRFRkFVTFRfQ09SRV9TVEFURSIsInJlbGF0aW9ucyIsImRpcnR5IiwiZGVsZXRlIiwiYWRkIiwidHJhc2giLCJERUZBVUxUX1NDSEVNQV9TVEFURSIsInNjaGVtYSIsImZhY3RvcnkiLCJyZWxhdGlvbkVuZHBvaW50cyIsInJlbGF0aW9uU2NoZW1hIiwicGF0aHMiLCJjb2xsZWN0aW9uX2VuZHBvaW50cyIsImJhc2VSZXN0Um91dGUiLCJiYXNlX3Jlc3Rfcm91dGUiLCJnZXRFbmRwb2ludCIsImFwcGx5UXVlcnlTdHJpbmciLCJzdHJpcEJhc2VSb3V0ZUZyb21VcmwiLCJtYXliZUFzc2VydFZhbHVlT2JqZWN0IiwiaXNEYXRlVGltZUZpZWxkIiwiYXNzZXJ0SXNEYXRlVGltZSIsImlzTW9uZXlGaWVsZCIsIk1vbmV5IiwiYXNzZXJ0TW9uZXkiLCJhc3NlcnRWYWxpZFNjaGVtYSIsImlzU2NoZW1hIiwiSW52YWxpZFNjaGVtYSIsImFzc2VydFZhbGlkU2NoZW1hRmllbGRQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsInJhdyIsImFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkIiwiaW5zdGFuY2UiLCJpc1ZhbGlkIiwiaXNTaGFsbG93VmFsaWRWYWx1ZUZvckZpZWxkIiwiZW51bSIsInZhbGlkYXRlRW51bVR5cGUiLCJ2YWxpZGF0ZVR5cGUiLCJtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyIsImFzc2VydFZhbGlkRmllbGRBbmRWYWx1ZUFnYWluc3RTY2hlbWEiLCJ2YWxpZGF0aW9uVHlwZSIsInZhbGlkYXRlVHlwZUZvckZpZWxkIiwiUFJJVkFURV9QUk9QRVJUSUVTIiwiU0FWRV9TVEFURSIsIlZBTElEQVRFX1RZUEVTIiwiQmFzZUVudGl0eSIsImVudGl0eUZpZWxkc0FuZFZhbHVlcyIsImZpZWxkUHJlZml4ZXMiLCJpc05ldyIsIkNMRUFOIiwiY3JlYXRlR2V0dGVyIiwic2V0U2F2ZVN0YXRlIiwiTkVXIiwiU2V0IiwiY3JlYXRlRW50aXR5R2V0dGVyc0FuZFNldHRlcnMiLCJjcmVhdGVQZXJzaXN0aW5nR2V0dGVyc0FuZFNldHRlcnMiLCJzZWFsIiwic2F2ZVN0YXRlIiwiRElSVFkiLCJwcm90ZWN0ZWRGaWVsZHMiLCJrZWVwSWQiLCJjcmVhdGVGYWN0b3J5IiwiY3JlYXRlRW50aXR5RmFjdG9yeSIsIiRzY2hlbWEiLCJjcmVhdGVOZXciLCJmb3JDbG9uZSIsIm5hbWVDbGFzcyIsImV4dGVuZGVkQ2xhc3MiLCJjbGFzc0RlZiIsImZpZWxkc0FuZFZhbHVlcyIsImZyb21FeGlzdGluZyIsImhhc1Jhd1Byb3BlcnR5IiwiaXNQbGFpbk9iamVjdCIsImhhc1ByZXR0eVByb3BlcnR5IiwicHJldHR5IiwiaGFzUmVuZGVyZWRQcm9wZXJ0eSIsInJlbmRlcmVkIiwiaGFzRm9ybWF0UHJvcGVydHkiLCJoYXNFbnVtUHJvcGVydHkiLCJpc1ZhbHVlT2JqZWN0RmllbGQiLCJpc1VUQ0RhdGVUaW1lRmllbGQiLCJkYXRlVGltZUZpZWxkTmFtZSIsImlzUHJpbWFyeUtleUZpZWxkIiwicHJpbWFyeV9rZXkiLCJpc1JlYWRPbmx5IiwicmVhZG9ubHkiLCJpc0VudGl0eUZpZWxkIiwiaXNFbnVtRmllbGQiLCJTeW1ib2wiLCJWQUxJREFURV9UWVBFIiwiUkFXIiwiUkVOREVSRUQiLCJQUkVUVFkiLCJNT0RFTF9QUkVGSVhFUyIsInByZWZpeE1hcCIsImFwcGx5RmlsdGVycyIsImFuc3dlciIsImNoYW5nZV9sb2ciLCJjaGVja2luIiwiY291bnRyeSIsImN1cnJlbmN5IiwiY3VycmVuY3lfcGF5bWVudF9tZXRob2QiLCJkYXRldGltZSIsImRhdGV0aW1lX3RpY2tldCIsImV2ZW50X21lc3NhZ2VfdGVtcGxhdGUiLCJldmVudF9xdWVzdGlvbl9ncm91cCIsImV2ZW50X3ZlbnVlIiwiZXh0cmFfam9pbiIsImV4dHJhX21ldGEiLCJsaW5lX2l0ZW0iLCJtZXNzYWdlX3RlbXBsYXRlIiwibWVzc2FnZV90ZW1wbGF0ZV9ncm91cCIsInBheW1lbnQiLCJwYXltZW50X21ldGhvZCIsInBvc3RfbWV0YSIsInByaWNlIiwicHJpY2VfdHlwZSIsInF1ZXN0aW9uIiwicXVlc3Rpb25fZ3JvdXAiLCJxdWVzdGlvbl9ncm91cF9xdWVzdGlvbiIsInF1ZXN0aW9uX29wdGlvbiIsInJlY3VycmVuY2UiLCJyZWdpc3RyYXRpb24iLCJyZWdpc3RyYXRpb25fcGF5bWVudCIsInRlcm0iLCJ0ZXJtX3JlbGF0aW9uc2hpcCIsInRlcm1fdGF4b25vbXkiLCJ0aWNrZXQiLCJ0aWNrZXRfcHJpY2UiLCJ0aWNrZXRfdGVtcGxhdGUiLCJ0cmFuc2FjdGlvbiIsInZlbnVlIiwid3BfdXNlciIsIm9wdHMiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsImNyZWF0ZUNhbGxiYWNrR2V0dGVyIiwicHJvcGVydHlOYW1lIiwiY2FsbEJhY2siLCJjcmVhdGVHZXR0ZXJBbmRTZXR0ZXIiLCJpbml0aWFsRmllbGRWYWx1ZSIsInByb3BlcnR5VmFsdWUiLCJzZXQiLCJyZWNlaXZlZFZhbHVlIiwiaXNQcmltYXJ5RmllbGQiLCJzZXRGaWVsZFRvUGVyc2lzdCIsImNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyIiwib3JpZ2luYWxGaWVsZE5hbWUiLCJhbGlhc0ZpZWxkTmFtZSIsImNyZWF0ZUFsaWFzR2V0dGVyIiwiY3JlYXRlRmx1ZW50U2V0dGVyIiwicHJpbWFyeUtleXMiLCJvcmlnaW5hbEZpZWxkc0FuZFZhbHVlcyIsImlzUHJpbWFyeUtleSIsInNldFZhbGlkYXRlVHlwZUZvckZpZWxkIiwic2V0SW5pdGlhbEVudGl0eUZpZWxkc0FuZFZhbHVlcyIsInNldENhbGN1bGF0ZWRGaWVsZEFuZFZhbHVlcyIsInBvcHVsYXRlUHJvdGVjdGVkRmllbGRzUHJvcGVydHkiLCJzZXRSZXNvdXJjZXMiLCJjcmVhdGVQcmltYXJ5S2V5RmllbGRHZXR0ZXJzIiwicG9wdWxhdGVQcmltYXJ5S2V5cyIsInBvcHVsYXRlTWlzc2luZ0ZpZWxkcyIsImNhbGN1bGF0ZWRGaWVsZHMiLCJfY2FsY3VsYXRlZF9maWVsZHMiLCJfcHJvdGVjdGVkIiwiZ2V0UHJpbWFyeUtleUZpZWxkc0Zyb21TY2hlbWEiLCJzY2hlbWFQcm9wZXJ0aWVzIiwic2NoZW1hRmllbGQiLCJjdWlkIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyRm9yRmllbGQiLCJkZXJpdmVWYWxpZGF0ZVR5cGVGb3JGaWVsZCIsImdldEVudGl0eUZpZWxkc0Zyb21TY2hlbWEiLCJnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yQ2xvbmluZyIsImZvclVwZGF0ZSIsImdldEJhc2VGaWVsZHNBbmRWYWx1ZXNGb3JQZXJzaXN0aW5nIiwiZm9ySW5zZXJ0IiwiZW50aXR5VmFsdWVzIiwicHJpbWFyeUtleSIsImZvclBlcnNpc3QiLCJnZXREZWZhdWx0VmFsdWVGb3JGaWVsZCIsImNyZWF0ZVJhd0VudGl0eUdldHRlcnNTZXR0ZXJzIiwiZGVyaXZlUHJlcGFyZWRWYWx1ZUZvckZpZWxkIiwiY3JlYXRlUmVuZGVyZWRHZXR0ZXJzIiwiZGVyaXZlUmVuZGVyZWRWYWx1ZSIsImNyZWF0ZUFsaWFzR2V0dGVyRm9yRmllbGQiLCJjcmVhdGVBbGlhc2VzRm9yTWV0aG9kIiwibWV0aG9kIiwibmV3RmllbGROYW1lIiwiZmllbGRQcmVmaXgiLCJnZXRSZW5kZXJlZENhbGxiYWNrIiwicmVxdWVzdGVkRmllbGROYW1lIiwicmVtb3ZlUHJlZml4ZXNGcm9tRmllbGQiLCJwcmVmaXhlc1RvUmVtb3ZlIiwic29ydEJ5IiwicHJlZml4IiwiZ2V0UmVuZGVyZWQiLCJoYXNNdWx0aXBsZVByaW1hcnlLZXlzQ2FsbGJhY2siLCJoYXNDYWxjdWxhdGVkRmllbGRDYWxsYmFjayIsImZpZWxkTmFtZVRvQ2hlY2siLCJjYWxjdWxhdGVkRmllbGRWYWx1ZSIsImNhbGN1bGF0ZWRGaWVsZE5hbWUiLCJyZWxhdGlvbk5hbWUiLCJyZXNvdXJjZVZhbHVlIiwicmVzb3VyY2VOYW1lIiwiaHJlZiIsImdldFJlbGF0aW9uTmFtZUZyb21MaW5rIiwic2V0UmVsYXRpb25zUmVzb3VyY2UiLCJnZXRSZWxhdGlvblJlc291cmNlQ2FsbGJhY2siLCJyZXNvdXJjZUluZm8iLCJyZXNvdXJjZUxpbmsiLCJzaW5nbGUiLCJnZXRSZWxhdGlvblJlc291cmNlIiwib3ZlcnJpZGUiLCJjdXJyZW50U3RhdGUiLCJJbnZhbGlkQXJndW1lbnQiLCJmaWVsZHNUb1BlcnNpc3RPbkluc2VydCIsIm1heWJlQ29udmVydFRvVmFsdWVPYmplY3QiLCJ2YWxpZGF0ZUlzRGF0ZVRpbWUiLCJmcm9tSVNPIiwiU2l0ZUN1cnJlbmN5IiwidG9JU08iLCJ0b051bWJlciIsIm1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdCIsInBsdXJhbE1vZGVsTmFtZSIsImxhc3QiLCJlbnRpdHlJbnN0YW5jZSIsIml0ZXJhdG9yIiwiZ2V0UHJpbWFyeUtleVZhbHVlcyIsInBpY2siLCJwaWNrQnkiLCJkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlIiwiZGVyaXZlVHlwZUZvckZpZWxkIiwidmFsaWQiLCJzaW5nbGVUeXBlIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsImlzQm9vbGVhbiIsImVudW1WYWx1ZXMiLCJleHBlY3RWYWx1ZU9iamVjdHMiLCJpc0VudW0iLCJpc1ZhbHVlT2JqZWN0IiwiRVZFTlRfU1RBVFVTX0lEIiwiRVZFTlRfU1RBVFVTX0lEUyIsImNhdGVnb3J5U2x1ZyIsInRpY2tldF9zdGFydCIsInRpY2tldF9lbmQiLCJwbHVyYWxpemUiLCJzaW5ndWxhck1vZGVsTmFtZSIsInNpbmd1bGFyIiwibW9kZWxOYW1lRm9yUXVlcnlTdHJpbmciLCJzdGFydENhc2UiLCJCQVNFX1BSSUNFX1RZUEVTIiwiQkFTRV9QUklDRSIsIkRJU0NPVU5UIiwiU1VSQ0hBUkdFIiwiVEFYIiwicHJpbWFyeV9rZXlzIiwidmFsdWVzRm9yQ29tYmluZWRQcmltYXJ5S2V5cyIsInJlc3VsdCIsInRyaW1FbmQiLCJ2YWx1ZUZvclByaW1hcnlLZXkiLCJnZXRQcmltYXJ5S2V5IiwiZ2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nIiwia2V5VmFsdWVzIiwiZ2V0RW50aXR5UHJpbWFyeUtleVZhbHVlcyIsImtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUiLCJtYXBwZWRFbnRpdGllcyIsIk1hcCIsImNyZWF0ZUFuZEtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUiLCJlbnRpdHlJZCIsImZvckF0dGVuZGVlSWQiLCJmb3JUcmFuc2FjdGlvbklkIiwicmVnX2lkIiwicmVnX2RhdGUiLCJTVEFUVVNfVFlQRV9FTUFJTCIsIlNUQVRVU19UWVBFX0VWRU5UIiwiU1RBVFVTX1RZUEVfTUVTU0FHRSIsIlNUQVRVU19UWVBFX1BBWU1FTlQiLCJTVEFUVVNfVFlQRV9SRUdJU1RSQVRJT04iLCJTVEFUVVNfVFlQRV9UUkFOU0FDVElPTiIsIkVNQUlMX1NUQVRVU19JRCIsIkRSQUZUIiwiU0VOVCIsIlJFR0lTVFJBVElPTl9DTE9TRUQiLCJERUxFVEVEIiwiREVOSUVEIiwiTk9UX0FDVElWRSIsIk5PVF9PUEVOIiwiT05HT0lORyIsIlJFR0lTVFJBVElPTl9PUEVOIiwiUEVORElORyIsIlNFQ09OREFSWSIsIk1FU1NBR0VfU1RBVFVTX0lEIiwiREVCVUciLCJFWEVDVVRJTkciLCJGQUlMIiwiSU5DT01QTEVURSIsIklETEUiLCJSRVNFTkQiLCJSRVRSWSIsIlBBWU1FTlRfU1RBVFVTX0lEIiwiQVBQUk9WRUQiLCJERUNMSU5FRCIsIkZBSUxFRCIsIlJFR0lTVFJBVElPTl9TVEFUVVNfSUQiLCJOT1RfQVBQUk9WRUQiLCJQRU5ESU5HX1BBWU1FTlQiLCJXQUlUX0xJU1QiLCJUUkFOU0FDVElPTl9TVEFUVVNfSUQiLCJBQkFORE9ORUQiLCJDT01QTEVURSIsIk9WRVJQQUlEIiwiQ1BUX1NUQVRVU19JRCIsIlBVQkxJU0giLCJGVVRVUkUiLCJQUklWQVRFIiwiVU5LTk9XTl9TVEFUVVNfSUQiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1JFR0lTVFJBVElPTiIsIkxhYmVsIiwiZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RSQU5TQUNUSU9OIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9QQVlNRU5UIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9NRVNTQUdFIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DUFQiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0VWRU5UIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9USUNLRVQiLCJUSUNLRVRfU1RBVFVTX0lEIiwiQVJDSElWRUQiLCJPTlNBTEUiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0RBVEVUSU1FIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DSEVDS0lOIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9BTEwiLCJzdGF0dXNDb2RlIiwiRk9STUFUX1NFTlRFTkNFX0NBU0UiLCJhc0Zvcm1hdHRlZCIsInByZXR0eVN0YXR1c2VzIiwic3RhdHVzQ29kZXMiLCJtYXBwZWRTdGF0dXNlcyIsInN0YXR1c1R5cGUiLCJUSUNLRVRfU1RBVFVTX0lEUyIsImFzc2VydFRpY2tldEVudGl0eSIsIlRpY2tldEVudGl0eSIsImlzT25TYWxlIiwiaXNBcmNoaXZlZCIsInF0eSIsImlzUGVuZGluZyIsImdldFRpY2tldFN0YXR1c1RleHRMYWJlbCIsInRpY2tldFN0YXR1cyIsImN1c3RvbUlkIiwiV3JhcHBlZENvbXBvbmVudCIsImhlbHAiLCJFbnRpdHlMaXN0RmlsdGVyQmFyIiwic2VhcmNoVGV4dCIsInNldFNlYXJjaFRleHQiLCJwZXJQYWdlIiwic2V0UGVyUGFnZSIsInNldExpc3RWaWV3Iiwic2V0R3JpZFZpZXciLCJlbnRpdHlGaWx0ZXJzIiwic2VhcmNoIiwibGlzdFZpZXciLCJncmlkVmlldyIsIlBhZ2luYXRlZEVudGl0eUxpc3RXaXRoRmlsdGVyQmFyIiwicGFnaW5hdGlvbkNvbmZpZyIsIndpdGhFbnRpdHlMaXN0RmlsdGVyQmFyIiwid2l0aEVudGl0eVBhZ2luYXRpb24iLCJQYWdpbmF0ZWRFbnRpdHlMaXN0V2l0aEZpbHRlckJhckFuZFN0YXRlIiwid2l0aEVudGl0eUxpc3RGaWx0ZXJTdGF0ZSIsImZpbHRlciIsImVudGl0eU5hbWUiLCJzZWFyY2hFbnRpdGllcyIsInN0b3JlIiwiZ2V0RmlsdGVyIiwid2l0aERpc3BhdGNoIiwiZGlzcGF0Y2giLCJzZXRGaWx0ZXIiLCJ2YWxpZGF0ZU5leHRTdGF0ZSIsIm5leHRTdGF0ZVJlc3BvbnNlIiwiY29udmVydGVkVmFsdWVzIiwid2l0aE1vbmV5IiwicHJvcE5hbWVNYXAiLCJFbmhhbmNlZENvbXBvbmVudCIsIm5leHRTdGF0ZSIsInByb3BOYW1lIiwiaXNTaGFsbG93RXF1YWxBcnJheXMiLCJnZXROZXh0U3RhdGUiLCJzaG91bGRVcGRhdGVTdGF0ZVdpdGhDb252ZXJ0ZWRWYWx1ZXMiLCJlbnRpdHlQYWdlIiwiaXNFcXVhbCIsImVudGl0aWVzUGVyUGFnZSIsImxhYmVscyIsImZpcnN0IiwicHJldmlvdXMiLCJuZXh0IiwicmV0dXJuQXNQcm9wIiwicGFnaW5hdGlvbiIsIm9uUGFnaW5hdGlvbkNoYW5nZSIsInRvcFBhZ2luYXRpb24iLCJib3R0b21QYWdpbmF0aW9uIiwid2l0aExhdGVzdENoZWNraW4iLCJkYXRldGltZUlkIiwiZ2V0TGF0ZXN0Q2hlY2tpbiIsImhhc0ZpbmlzaGVkUmVzb2x1dGlvbiIsImNoZWNrSW5FbnRpdHkiLCJjaGVja2luRW50aXR5IiwiaGFzUmVzb2x2ZWRDaGVja2luIiwidG9nZ2xlQ2hlY2tpbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUEwQyxnQ0FBZ0M7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBd0Qsa0JBQWtCO0FBQzFFO0FBQ0EseURBQWlELGNBQWM7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUF5QyxpQ0FBaUM7QUFDMUUsd0hBQWdILG1CQUFtQixFQUFFO0FBQ3JJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7OztBQUdBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEZBOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBOztBQUVBLElBQU1BLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUIsT0FLbEI7QUFBQSxNQUpOQyxTQUlNLFFBSk5BLFNBSU07QUFBQSxNQUhOQyxRQUdNLFFBSE5BLFFBR007QUFBQSxNQUZOQyxZQUVNLFFBRk5BLFlBRU07QUFBQSxnQ0FETkMsYUFDTTtBQUFBLE1BRE5BLGFBQ00sbUNBRFUsRUFDVjs7QUFDTixXQUFTQyxZQUFULEdBQXdCO0FBQ3ZCLFFBQU1DLEdBQUcsR0FBR0osUUFBUSxDQUFDSyxrQkFBVCxDQUE2QixZQUE3QixJQUNYTCxRQUFRLENBQUNNLFVBREUsR0FFWCxFQUZEO0FBR0EsV0FBT0YsR0FBRyxLQUFLLEVBQVIsSUFBY0YsYUFBYSxDQUFDSyxTQUE1QixHQUNOTCxhQUFhLENBQUNLLFNBRFIsR0FFTkgsR0FGRDtBQUdBOztBQUVELFdBQVNJLGVBQVQsR0FBMkI7QUFDMUIsV0FBT1IsUUFBUSxDQUFDUyxLQUFULEdBQWlCLEdBQWpCLEdBQXVCVCxRQUFRLENBQUNVLEtBQXZDO0FBQ0E7O0FBRUQsV0FBU0MsU0FBVCxHQUFxQjtBQUNwQixRQUFNUCxHQUFHLEdBQUdELFlBQVksRUFBeEI7O0FBQ0EsUUFBSyxDQUFFSixTQUFGLElBQWVFLFlBQWYsSUFBK0JHLEdBQUcsS0FBSyxFQUE1QyxFQUFpRDtBQUNoRFEsb0RBQU8sQ0FDTixLQURNLEVBRU4sOERBQ0EsMkRBSE0sQ0FBUDtBQUtBOztBQUNELFdBQU9YLFlBQVksR0FDbEIsb0JBQUMscURBQUQ7QUFBYSxlQUFTLEVBQUdHO0FBQXpCLE9BQW9DRixhQUFwQyxFQURrQixHQUVsQixJQUZEO0FBR0E7O0FBRUQsTUFBSyxDQUFFVyxzRkFBb0IsQ0FBRWIsUUFBRixFQUFZLFVBQVosQ0FBM0IsRUFBc0Q7QUFDckRZLGtEQUFPLENBQ04sS0FETSxFQUVOLCtEQUZNLENBQVA7QUFJQSxXQUFPLElBQVA7QUFDQTs7QUFFRCxTQUNDLG9CQUFDLDJEQUFELFFBQ0MsZ0NBQU1ELFNBQVMsRUFBZixFQUFtQixrQ0FBUUgsZUFBZSxFQUF2QixDQUFuQixDQURELENBREQ7QUFLQSxDQTlDRDs7QUErQ2VWLCtFQUFmLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzREE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUNBOztJQUVxQmdCLGlCOzs7Ozs7Ozs7Ozs7O3NDQWlCRjtBQUFBOztBQUFBLHdCQUM4QixLQUFLQyxLQURuQztBQUFBLFVBQ1RDLFNBRFMsZUFDVEEsU0FEUztBQUFBLFVBQ0VmLFlBREYsZUFDRUEsWUFERjtBQUFBLFVBQ2dCRixTQURoQixlQUNnQkEsU0FEaEI7O0FBRWpCLFVBQUtrQixzREFBTyxDQUFFRCxTQUFGLENBQVosRUFBNEI7QUFDM0IsZUFBTyxJQUFQO0FBQ0E7O0FBQ0QsVUFBTUUsU0FBUyxHQUFHRixTQUFTLENBQUNHLEdBQVYsQ0FDakIsVUFBRW5CLFFBQUYsRUFBZ0I7QUFDZixZQUFLQSxRQUFRLENBQUNvQixFQUFkLEVBQW1CO0FBQ2xCLGlCQUFPLG9CQUFDLDREQUFEO0FBQ04sZUFBRyxFQUFHcEIsUUFBUSxDQUFDb0IsRUFEVDtBQUVOLG9CQUFRLEVBQUdwQixRQUZMO0FBR04sd0JBQVksRUFBR0MsWUFIVDtBQUlOLHFCQUFTLEVBQUdGO0FBSk4sYUFLRCxLQUFJLENBQUNnQixLQUxKLEVBQVA7QUFPQTs7QUFDRCxlQUFPLElBQVA7QUFDQSxPQVpnQixDQUFsQjtBQWNBLGFBQ0MsZ0NBQ0dHLFNBREgsQ0FERDtBQUtBOzs7NkJBRVE7QUFBQSx5QkFDbUMsS0FBS0gsS0FEeEM7QUFBQSxVQUNBTSxpQkFEQSxnQkFDQUEsaUJBREE7QUFBQSxVQUNtQkMsV0FEbkIsZ0JBQ21CQSxXQURuQjtBQUVSLGFBQ0M7QUFDQyxVQUFFLEVBQUdBLFdBRE47QUFFQyxpQkFBUyxFQUNSQyxrREFBVSxDQUNURixpQkFEUyxFQUVULGlCQUZTO0FBSFosU0FTRyxLQUFLRyxlQUFMLEVBVEgsQ0FERDtBQWFBOzs7O0VBMUQ2Q0MsNEQ7OzZFQUExQlgsaUIsZUFDRDtBQUNsQmYsV0FBUyxFQUFFMkIsaURBQVMsQ0FBQ0MsSUFESDtBQUVsQlgsV0FBUyxFQUFFVSxpREFBUyxDQUFDRSxLQUZIO0FBR2xCM0IsY0FBWSxFQUFFeUIsaURBQVMsQ0FBQ0MsSUFITjtBQUlsQk4sbUJBQWlCLEVBQUVLLGlEQUFTLENBQUNHLE1BSlg7QUFLbEJQLGFBQVcsRUFBRUksaURBQVMsQ0FBQ0c7QUFMTCxDOzs2RUFEQ2YsaUIsa0JBU0U7QUFDckJFLFdBQVMsRUFBRSxFQURVO0FBRXJCZixjQUFZLEVBQUUsS0FGTztBQUdyQm9CLG1CQUFpQixFQUFFLEVBSEU7QUFJckJDLGFBQVcsRUFBRSxzQkFKUTtBQUtyQnZCLFdBQVMsRUFBRTtBQUxVLEM7Ozs7Ozs7Ozs7Ozs7O0FDdkJ2QjtBQUNBLGtCQUFrQix1TDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0RsQjs7O0FBR0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkEsSUFBTStCLFdBQVcsR0FBRyxTQUFkQSxXQUFjLE9BR2I7QUFBQSxNQUZOQyxXQUVNLFFBRk5BLFdBRU07QUFBQSxNQUROQyxhQUNNLFFBRE5BLGFBQ007QUFDTixNQUFJQyxLQUFLLEdBQUcsSUFBWjtBQUNBLE1BQUlDLEtBQUssR0FBRyxJQUFaO0FBQ0EsTUFBSUMsR0FBRyxHQUFHLElBQVY7O0FBQ0EsTUFBS0osV0FBVyxJQUFJQSxXQUFXLENBQUNLLElBQTNCLElBQW1DTCxXQUFXLENBQUNLLElBQVosQ0FBaUJDLElBQXpELEVBQWdFO0FBQy9ELFFBQU1BLElBQUksR0FBR04sV0FBVyxDQUFDSyxJQUFaLENBQWlCQyxJQUE5Qjs7QUFDQSxRQUNDQSxJQUFJLEtBQUssWUFBVCxJQUNBQSxJQUFJLEtBQUssV0FEVCxJQUVBQSxJQUFJLEtBQUssT0FIVixFQUlFO0FBQ0QsYUFBT04sV0FBUDtBQUNBOztBQUNELFFBQUtNLElBQUksS0FBSyxZQUFkLEVBQTZCO0FBQzVCSixXQUFLLEdBQUdGLFdBQVI7QUFDQSxLQUZELE1BRU87QUFDTkcsV0FBSyxHQUFHSCxXQUFSO0FBQ0EsVUFBTU8sV0FBVyxHQUFHQyxLQUFLLENBQUNDLE9BQU4sQ0FBZVQsV0FBVyxDQUFDaEIsS0FBWixDQUFrQnVCLFdBQWpDLElBQ25CUCxXQUFXLENBQUNoQixLQUFaLENBQWtCdUIsV0FEQyxHQUVuQixDQUFFUCxXQUFXLENBQUNoQixLQUFaLENBQWtCdUIsV0FBcEIsQ0FGRDtBQUdBLFVBQU1HLFVBQVUsR0FBR0Msb0ZBQXlCLENBQUMsK0VBQ3ZDWCxXQUFXLENBQUNoQixLQUQwQixHQUUzQ3VCLFdBRjJDLENBQTVDOztBQUlBLFVBQUtHLFVBQVUsQ0FBQ1IsS0FBaEIsRUFBd0I7QUFDdkIsWUFBTVUsUUFBUSxHQUFHRixVQUFVLENBQUNFLFFBQVgsR0FDaEJGLFVBQVUsQ0FBQ0UsUUFESyxHQUVoQixLQUZEO0FBR0FWLGFBQUssR0FDSixvQkFBQyxtRUFBRDtBQUNDLGlCQUFPLEVBQUdRLFVBQVUsQ0FBQ0csTUFEdEI7QUFFQyxlQUFLLEVBQUdILFVBQVUsQ0FBQ1IsS0FGcEI7QUFHQyxrQkFBUSxFQUFHVTtBQUhaLFVBREQ7QUFPQTtBQUNEOztBQUNELFFBQUtWLEtBQUssSUFBSUMsS0FBZCxFQUFzQjtBQUNyQkMsU0FBRyxHQUNGLG9CQUFDLGFBQUQsUUFDR0YsS0FESCxFQUVHQyxLQUZILENBREQ7QUFNQSxhQUFPQyxHQUFQO0FBQ0E7QUFDRDs7QUFDRCxTQUFPSixXQUFQO0FBQ0EsQ0FuREQ7O0FBcURlRCwwRUFBZixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBRUE7Ozs7Ozs7Ozs7O0FBVUEsSUFBTWUsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixPQU9sQjtBQUFBOztBQUFBLE1BTk5DLE9BTU0sUUFOTkEsT0FNTTtBQUFBLE1BTE5DLFFBS00sUUFMTkEsUUFLTTtBQUFBLE1BSk5DLFVBSU0sUUFKTkEsVUFJTTtBQUFBLE1BSE5DLFVBR00sUUFITkEsVUFHTTtBQUFBLE1BRk5MLE1BRU0sUUFGTkEsTUFFTTtBQUFBLE1BRE5NLFNBQ00sUUFETkEsU0FDTTtBQUNORCxZQUFVLEdBQUdBLFVBQVUsR0FBR0EsVUFBSCxHQUFnQkUsOERBQUUsQ0FBRSxRQUFGLEVBQVksZ0JBQVosQ0FBekM7QUFDQUQsV0FBUyxHQUFHM0IsaURBQVUsOEdBQ25CMkIsU0FEbUIsRUFDTkEsU0FETSw2RkFFckIsZ0JBRnFCLEVBRUgsSUFGRyw2RkFHckIsdUJBSHFCLEVBR0ksSUFISixnQkFBdEI7QUFLQSxTQUNDLG9CQUFDLGtEQUFEO0FBQ0MsY0FBVSxFQUFHRCxVQURkO0FBRUMsTUFBRSxFQUFHTCxNQUZOO0FBR0MsYUFBUyxFQUFHTSxTQUhiO0FBSUMsV0FBTyxFQUFHSixPQUpYO0FBS0MsWUFBUSxFQUFHRSxVQUFVLElBQUlEO0FBTDFCLElBREQ7QUFTQSxDQXZCRDs7QUF5QkFGLGdCQUFnQixDQUFDTyxTQUFqQixHQUE2QjtBQUM1Qk4sU0FBTyxFQUFFcEIsaURBQVMsQ0FBQzJCLElBQVYsQ0FBZUMsVUFESTtBQUU1QkwsWUFBVSxFQUFFdkIsaURBQVMsQ0FBQ0csTUFGTTtBQUc1QmtCLFVBQVEsRUFBRXJCLGlEQUFTLENBQUNDLElBSFE7QUFJNUJxQixZQUFVLEVBQUV0QixpREFBUyxDQUFDQyxJQUpNO0FBSzVCaUIsUUFBTSxFQUFFbEIsaURBQVMsQ0FBQ0csTUFMVTtBQU01QnFCLFdBQVMsRUFBRXhCLGlEQUFTLENBQUNHO0FBTk8sQ0FBN0I7QUFTQWdCLGdCQUFnQixDQUFDVSxZQUFqQixHQUFnQztBQUMvQk4sWUFBVSxFQUFFLEVBRG1CO0FBRS9CTCxRQUFNLEVBQUUsRUFGdUI7QUFHL0JNLFdBQVMsRUFBRTtBQUhvQixDQUFoQztBQU1lTCwrRUFBZixFOzs7Ozs7Ozs7Ozs7QUM5REE7QUFDQSxrQkFBa0IscUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEbEI7OztBQUdBO0FBRUE7Ozs7QUFHQTtBQUVBOzs7Ozs7Ozs7OztBQVVPLElBQU1XLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsT0FBd0M7QUFBQTs7QUFBQSxNQUFwQ0MsUUFBb0MsUUFBcENBLFFBQW9DO0FBQUEsTUFBMUJQLFNBQTBCLFFBQTFCQSxTQUEwQjtBQUFBLE1BQWZRLE9BQWUsUUFBZkEsT0FBZTtBQUNwRSxNQUFNQyxjQUFjLEdBQUdwQyxpREFBVTtBQUNoQyw2QkFBeUI7QUFETyx5R0FFMUIyQixTQUYwQixHQUVWQSxTQUZVLDZGQUdoQyxpQkFIZ0MsRUFHYixDQUFFUSxPQUhXLGdCQUFqQztBQUtBLFNBQ0M7QUFBSyxhQUFTLEVBQUdDO0FBQWpCLEtBQ0csQ0FBRUQsT0FBRixJQUFhRCxRQURoQixDQUREO0FBS0EsQ0FYTSxDOzs7Ozs7Ozs7Ozs7QUNwQlA7QUFDQSxrQkFBa0IsaUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEbEI7OztBQUdBO0FBRUE7Ozs7QUFHQTtBQUVBOzs7Ozs7OztBQU9PLElBQU1HLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsT0FBa0I7QUFBQSxNQUFkQyxNQUFjLFFBQWRBLE1BQWM7QUFDbEQsU0FBT0MsMkRBQU8sR0FDYjtBQUFLLGFBQVMsRUFBQztBQUFmLEtBQ0MsNENBREQsRUFFQztBQUFLLE1BQUUsRUFBQztBQUFSLEtBQ0dDLElBQUksQ0FBQ0MsU0FBTCxDQUFnQkgsTUFBaEIsRUFBd0IsQ0FBeEIsRUFBMkIsQ0FBM0IsQ0FESCxDQUZELENBRGEsR0FPVixJQVBKO0FBUUEsQ0FUTSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqQlA7OztBQUdBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUFVTyxJQUFNSSxpQkFBYjtBQUFBO0FBQUE7QUFBQTs7QUFDQyw2QkFBYWxELEtBQWIsRUFBcUI7QUFBQTs7QUFBQTs7QUFDcEIscU5BQU9BLEtBQVA7QUFDQSxVQUFLbUQsS0FBTCxHQUFhO0FBQ1pDLFdBQUssRUFBRSxJQURLO0FBRVpDLGVBQVMsRUFBRTtBQUZDLEtBQWI7QUFGb0I7QUFNcEI7QUFFRDs7Ozs7OztBQVREO0FBQUE7QUFBQSxzQ0Fjb0JELEtBZHBCLEVBYzJCRSxJQWQzQixFQWNrQztBQUNoQyxXQUFLQyxRQUFMLENBQWU7QUFDZEgsYUFBSyxFQUFMQSxLQURjO0FBRWRDLGlCQUFTLEVBQUVDO0FBRkcsT0FBZjtBQUlBO0FBbkJGO0FBQUE7QUFBQSw2QkFxQlU7QUFBQSxrQ0FDb0IsS0FBS3RELEtBRHpCLENBQ0Z3RCxZQURFO0FBQUEsVUFDRkEsWUFERSxzQ0FDYSxFQURiO0FBRVJBLGtCQUFZLEdBQUdBLFlBQVksS0FBSyxFQUFqQixHQUNkQSxZQURjLEdBRWRwQiw4REFBRSxDQUFFLG1DQUFGLEVBQXVDLGdCQUF2QyxDQUZIOztBQUdBLFVBQUssS0FBS2UsS0FBTCxDQUFXRSxTQUFoQixFQUE0QjtBQUMzQixlQUNDLGlDQUNDLGdDQUFNRyxZQUFOLENBREQsRUFFQztBQUFTLGVBQUssRUFBRztBQUFFQyxzQkFBVSxFQUFFO0FBQWQ7QUFBakIsV0FDRyxLQUFLTixLQUFMLENBQVdDLEtBQVgsSUFBb0IsS0FBS0QsS0FBTCxDQUFXQyxLQUFYLENBQWlCTSxRQUFqQixFQUR2QixFQUVDLCtCQUZELEVBR0csS0FBS1AsS0FBTCxDQUFXRSxTQUFYLENBQXFCTSxjQUh4QixDQUZELENBREQ7QUFVQTs7QUFDRCxhQUFPLEtBQUszRCxLQUFMLENBQVcwQyxRQUFsQjtBQUNBO0FBdkNGOztBQUFBO0FBQUEsRUFBdUNoQyw0REFBdkMsRTs7Ozs7Ozs7Ozs7O0FDaEJBO0FBQ0Esa0JBQWtCLDJVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRGxCOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBLElBQU1rRCxZQUFZLEdBQUcsU0FBZkEsWUFBZSxPQU1kO0FBQUEsTUFMTkMsUUFLTSxRQUxOQSxRQUtNO0FBQUEsMkJBSk5DLFFBSU07QUFBQSxNQUpOQSxRQUlNLDhCQUpLLEVBSUw7QUFBQSw0QkFITjNCLFNBR007QUFBQSxNQUhOQSxTQUdNLCtCQUhNLEVBR047QUFBQSw0QkFGTjRCLFNBRU07QUFBQSxNQUZOQSxTQUVNLCtCQUZNLElBRU47QUFBQSwrQkFETkMsWUFDTTtBQUFBLE1BRE5BLFlBQ00sa0NBRFMsRUFDVDtBQUNON0IsV0FBUyxHQUFHQSxTQUFTLGFBQ2hCQSxTQURnQixxQkFFcEIsY0FGRDtBQUdBQSxXQUFTLEdBQUcyQixRQUFRLGFBQ2YzQixTQURlLGdDQUNrQjJCLFFBRGxCLHNCQUVuQjNCLFNBRkQ7QUFHQSxNQUFNOEIsUUFBUSxHQUFHSCxRQUFRLEdBQ3hCLG9CQUFDLDhEQUFEO0FBQ0MsYUFBUyxFQUFDLG1CQURYO0FBRUMsUUFBSSxFQUFHQSxRQUZSO0FBR0MsUUFBSSxFQUFHO0FBSFIsSUFEd0IsR0FNckIsSUFOSjtBQU9BLE1BQU1JLE9BQU8sR0FBR0gsU0FBUyxHQUN4QixvQkFBQyxnRUFBRDtBQUNDLGFBQVMsRUFBQyxnQ0FEWDtBQUVDLFFBQUksRUFBQyxTQUZOO0FBR0MsV0FBTyxFQUFHQTtBQUhYLElBRHdCLEdBTXJCLElBTko7O0FBT0EsTUFBSyxDQUFFN0Qsc0RBQU8sQ0FBRThELFlBQUYsQ0FBZCxFQUFpQztBQUNoQyxRQUFNRyxZQUFZLEdBQUcsRUFBckI7QUFDQSxRQUFNQyxNQUFNLEdBQUdQLFFBQVEsQ0FBQ1EsS0FBVCxDQUFnQixTQUFoQixDQUFmOztBQUNBLFNBQU0sSUFBSUMsQ0FBQyxHQUFHLENBQWQsRUFBaUJBLENBQUMsR0FBR0YsTUFBTSxDQUFDRyxNQUE1QixFQUFvQ0QsQ0FBQyxFQUFyQyxFQUEwQztBQUN6QyxVQUFLRixNQUFNLENBQUVFLENBQUYsQ0FBWCxFQUFtQjtBQUNsQkgsb0JBQVksQ0FBQ0ssSUFBYixDQUFtQkosTUFBTSxDQUFFRSxDQUFGLENBQXpCO0FBQ0E7O0FBQ0QsVUFBS04sWUFBWSxDQUFFTSxDQUFGLENBQWpCLEVBQXlCO0FBQ3hCSCxvQkFBWSxDQUFDSyxJQUFiLENBQW1CUixZQUFZLENBQUVNLENBQUYsQ0FBL0I7QUFDQTtBQUNEOztBQUNEVCxZQUFRLEdBQUdNLFlBQVg7QUFDQTs7QUFDRCxTQUFPTixRQUFRLEdBQ2Q7QUFDQyxrQkFBYXpCLDhEQUFFLENBQUUsdUJBQUYsRUFBMkIsZ0JBQTNCLENBRGhCO0FBRUMsYUFBUyxFQUFHRDtBQUZiLEtBSUc4QixRQUpILEVBS0M7QUFBSyxhQUFTLEVBQUM7QUFBZixLQUFxQ0osUUFBckMsQ0FMRCxFQU1HSyxPQU5ILENBRGMsR0FTWCxJQVRKO0FBVUEsQ0FsREQ7O0FBb0RlTiwyRUFBZixFOzs7Ozs7Ozs7Ozs7QUNuRkE7QUFDQSxrQkFBa0IsaVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRGxCOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBRUE7Ozs7Ozs7Ozs7QUFTTyxJQUFNYSxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLE9BQWdDO0FBQUEsTUFBNUI5QixPQUE0QixRQUE1QkEsT0FBNEI7QUFBQSx5QkFBbkIrQixNQUFtQjtBQUFBLE1BQW5CQSxNQUFtQiw0QkFBVixFQUFVO0FBQzlEQSxRQUFNLEdBQUdBLE1BQU0sSUFDZEMsbUVBQU8sQ0FDTkMsOERBQUUsQ0FBRSxXQUFGLEVBQWUsWUFBZixFQUE2QixnQkFBN0IsQ0FESSxFQUVOQyxNQUFNLENBQUNDLFlBQVAsQ0FBcUIsTUFBckIsQ0FGTSxDQURSO0FBS0EsU0FDQztBQUNDLGFBQVMsRUFDUnRFLGlEQUFVLENBQUU7QUFDWCxpQ0FBMkIsSUFEaEI7QUFFWCwwQkFBb0IsQ0FBRW1DO0FBRlgsS0FBRjtBQUZaLEtBUUM7QUFBSyxhQUFTLEVBQUM7QUFBZixLQUNDLG9CQUFDLDZEQUFELE9BREQsRUFFQztBQUFNLGFBQVMsRUFBQztBQUFoQixLQUNHK0IsTUFESCxDQUZELENBUkQsQ0FERDtBQWlCQSxDQXZCTSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JCUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7O0FBY0EsSUFBTUssZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixPQVdsQjtBQUFBOztBQUFBLE1BVk45QyxVQVVNLFFBVk5BLFVBVU07QUFBQSxNQVROK0MsUUFTTSxRQVROQSxRQVNNO0FBQUEsTUFSTjlDLFVBUU0sUUFSTkEsVUFRTTtBQUFBLE1BUE4rQyxVQU9NLFFBUE5BLFVBT007QUFBQSxNQU5OQyxjQU1NLFFBTk5BLGNBTU07QUFBQSxNQUxOQyxzQkFLTSxRQUxOQSxzQkFLTTtBQUFBLE1BSk50RCxNQUlNLFFBSk5BLE1BSU07QUFBQSxNQUhOTSxTQUdNLFFBSE5BLFNBR007QUFBQSxNQUZOaUQsV0FFTSxRQUZOQSxXQUVNO0FBQUEsTUFESEMsV0FDRzs7QUFDTm5ELFlBQVUsR0FBR0EsVUFBVSxHQUFHQSxVQUFILEdBQWdCRSw4REFBRSxDQUFFLFFBQUYsRUFBWSxnQkFBWixDQUF6QztBQUNBRCxXQUFTLEdBQUczQixpREFBVSw4R0FDbkIyQixTQURtQixFQUNOQSxTQURNLDZGQUVyQixnQkFGcUIsRUFFSCxJQUZHLDZGQUdyQix1QkFIcUIsRUFHSSxJQUhKLGdCQUF0QjtBQUtBLFNBQ0Msb0JBQUMsMkRBQUQsUUFDQyxvQkFBQywwREFBRDtBQUNDLGNBQVUsRUFBR0YsVUFEZDtBQUVDLGtCQUFjLEVBQUdpRCxjQUZsQjtBQUdDLFlBQVEsRUFBR0Msc0JBSFo7QUFJQyxhQUFTLEVBQUdDO0FBSmIsSUFERCxFQU9DLG9CQUFDLDJEQUFEO0FBQ0MsUUFBSSxFQUFDLFFBRE47QUFFQyxTQUFLLEVBQUcsU0FGVDtBQUdDLGNBQVUsRUFBR2xELFVBSGQ7QUFJQyxZQUFRLEVBQUdELFVBQVUsSUFBSStDLFFBSjFCO0FBS0MsTUFBRSxFQUFHbkQsTUFMTjtBQU1DLGFBQVMsRUFBR00sU0FOYjtBQU9DLFFBQUksRUFBRzhDO0FBUFIsS0FRTUksV0FSTixFQVBELENBREQ7QUFvQkEsQ0F0Q0Q7O0FBd0NBTixnQkFBZ0IsQ0FBQzFDLFNBQWpCLEdBQTZCO0FBQzVCTixTQUFPLEVBQUVwQixpREFBUyxDQUFDMkIsSUFEUztBQUU1QjBDLFVBQVEsRUFBRXJFLGlEQUFTLENBQUNDLElBRlE7QUFHNUJxQixZQUFVLEVBQUV0QixpREFBUyxDQUFDQyxJQUhNO0FBSTVCc0IsWUFBVSxFQUFFdkIsaURBQVMsQ0FBQ0csTUFKTTtBQUs1Qm1FLFlBQVUsRUFBRXRFLGlEQUFTLENBQUNHLE1BTE07QUFNNUJvRSxnQkFBYyxFQUFFdkUsaURBQVMsQ0FBQ0csTUFORTtBQU81QnFFLHdCQUFzQixFQUFFeEUsaURBQVMsQ0FBQ0csTUFQTjtBQVE1QnNFLGFBQVcsRUFBRXpFLGlEQUFTLENBQUNHLE1BUks7QUFTNUJlLFFBQU0sRUFBRWxCLGlEQUFTLENBQUNHLE1BVFU7QUFVNUJxQixXQUFTLEVBQUV4QixpREFBUyxDQUFDRztBQVZPLENBQTdCO0FBYUFpRSxnQkFBZ0IsQ0FBQ3ZDLFlBQWpCLEdBQWdDO0FBQy9CVCxTQUFPLEVBQUU7QUFBQSxXQUFNLElBQU47QUFBQSxHQURzQjtBQUUvQkcsWUFBVSxFQUFFLEVBRm1CO0FBRy9CK0MsWUFBVSxFQUFFLE1BSG1CO0FBSS9CQyxnQkFBYyxFQUFFLEVBSmU7QUFLL0JDLHdCQUFzQixFQUFFLE9BTE87QUFNL0JDLGFBQVcsRUFBRSxFQU5rQjtBQU8vQnZELFFBQU0sRUFBRSxFQVB1QjtBQVEvQk0sV0FBUyxFQUFFO0FBUm9CLENBQWhDO0FBV2U0QywrRUFBZixFOzs7Ozs7Ozs7Ozs7QUM1RkE7QUFDQSxrQkFBa0IsMmhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEbEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUVBOzs7Ozs7Ozs7Ozs7O0FBWUEsSUFBTU8sZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixPQU9sQjtBQUFBOztBQUFBLE1BTk5yRCxVQU1NLFFBTk5BLFVBTU07QUFBQSxNQUxOaUQsY0FLTSxRQUxOQSxjQUtNO0FBQUEsTUFKTi9DLFNBSU0sUUFKTkEsU0FJTTtBQUFBLE1BSE5vRCxRQUdNLFFBSE5BLFFBR007QUFBQSxNQUZOQyxJQUVNLFFBRk5BLElBRU07QUFBQSxNQUROQyxLQUNNLFFBRE5BLEtBQ007QUFDTlAsZ0JBQWMsR0FBR0EsY0FBYyxHQUM5QkEsY0FEOEIsR0FFOUI5Qyw4REFBRSxDQUFFLFlBQUYsRUFBZ0IsZ0JBQWhCLENBRkg7QUFHQUQsV0FBUyxHQUFHM0IsaURBQVUsOEdBQ25CMkIsU0FEbUIsRUFDTkEsU0FETSw2RkFFckIsc0JBRnFCLEVBRUcsSUFGSCwwR0FHWnFELElBSFksR0FHREEsSUFIQyxtSEFJSEQsUUFKRyxHQUlZQSxRQUpaLGdCQUF0QjtBQU1BLFNBQU90RCxVQUFVLEdBQ2hCO0FBQUssYUFBUyxFQUFDO0FBQWYsS0FDQztBQUFLLGFBQVMsRUFBR0UsU0FBakI7QUFBNkIsU0FBSyxFQUFHc0Q7QUFBckMsS0FDQztBQUFNLGFBQVMsRUFBQztBQUFoQixLQUFxQyxvQkFBQyw2REFBRCxPQUFyQyxDQURELEVBRUM7QUFBTSxhQUFTLEVBQUM7QUFBaEIsS0FBb0NQLGNBQXBDLENBRkQsRUFHQztBQUFNLGFBQVMsRUFBQztBQUFoQixLQUNDO0FBQU0sYUFBUyxFQUFDO0FBQWhCLFNBREQsRUFFQztBQUFNLGFBQVMsRUFBQztBQUFoQixTQUZELEVBR0M7QUFBTSxhQUFTLEVBQUM7QUFBaEIsU0FIRCxDQUhELENBREQsQ0FEZ0IsR0FZaEIsSUFaRDtBQWFBLENBOUJEOztBQWdDQUksZ0JBQWdCLENBQUNqRCxTQUFqQixHQUE2QjtBQUM1QkosWUFBVSxFQUFFdEIsaURBQVMsQ0FBQ0MsSUFBVixDQUFlMkIsVUFEQztBQUU1QjJDLGdCQUFjLEVBQUV2RSxpREFBUyxDQUFDRyxNQUZFO0FBRzVCcUIsV0FBUyxFQUFFeEIsaURBQVMsQ0FBQ0csTUFITztBQUk1QnlFLFVBQVEsRUFBRTVFLGlEQUFTLENBQUMrRSxLQUFWLENBQWlCLENBQUUsT0FBRixFQUFXLE9BQVgsQ0FBakIsQ0FKa0I7QUFLNUJGLE1BQUksRUFBRTdFLGlEQUFTLENBQUMrRSxLQUFWLENBQWlCLENBQUUsT0FBRixFQUFXLFNBQVgsRUFBc0IsS0FBdEIsQ0FBakIsQ0FMc0I7QUFNNUJELE9BQUssRUFBRTlFLGlEQUFTLENBQUNnRjtBQU5XLENBQTdCO0FBU0FMLGdCQUFnQixDQUFDOUMsWUFBakIsR0FBZ0M7QUFDL0IwQyxnQkFBYyxFQUFFLEVBRGU7QUFFL0IvQyxXQUFTLEVBQUUsRUFGb0I7QUFHL0JvRCxVQUFRLEVBQUUsT0FIcUI7QUFJL0JDLE1BQUksRUFBRSxTQUp5QjtBQUsvQkMsT0FBSyxFQUFFO0FBTHdCLENBQWhDO0FBUWVILCtFQUFmLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7QUFTZU0saUlBQU8sQ0FBRSxDQUN2QkMsaUVBRHVCLEVBRXZCQyxxRkFBMEIsQ0FDekIsVUFBRUMsSUFBRixFQUFZO0FBQ1g7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSxpQ0FDVTtBQUFBLDRCQU1KLEtBQUsvRixLQU5EO0FBQUEsY0FFUGdHLFVBRk8sZUFFUEEsVUFGTztBQUFBLGNBR1ByRCxPQUhPLGVBR1BBLE9BSE87QUFBQSxjQUlQc0QsYUFKTyxlQUlQQSxhQUpPO0FBQUEsY0FLSkMsU0FMSTs7QUFPUixpQkFDQyxvQkFBQywyREFBRCxRQUNDLG9CQUFDLGlEQUFEO0FBQ0MsZUFBRyxFQUFHRixVQURQO0FBRUMsbUJBQU8sRUFBR3JELE9BRlg7QUFHQyxrQkFBTSxFQUFHc0Q7QUFIVixZQURELEVBTUMsb0JBQUMsK0NBQUQ7QUFBZSxtQkFBTyxFQUFHdEQ7QUFBekIsYUFDQyxvQkFBQyxJQUFELEVBQVd1RCxTQUFYLENBREQsQ0FORCxDQUREO0FBWUE7QUFwQkY7O0FBQUE7QUFBQSxNQUFxQnhGLDREQUFyQjtBQUFBO0FBc0JBLENBeEJ3QixFQXlCekIsaUNBekJ5QixDQUZILENBQUYsQ0FBdEIsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hCQTs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUFVTyxJQUFNeUYsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFFQyxhQUFGLEVBQXFCO0FBQ25EOzs7Ozs7Ozs7QUFEbUQsTUFVN0NDLFdBVjZDO0FBQUE7QUFBQTtBQUFBOztBQVdsRDs7OztBQUlBLHlCQUFhckcsS0FBYixFQUFxQjtBQUFBOztBQUFBOztBQUNwQixpTkFBT0EsS0FBUDs7QUFEb0IsOExBWVAsWUFBTTtBQUNuQixjQUFLdUQsUUFBTCxDQUFlO0FBQUUrQyxpQkFBTyxFQUFFO0FBQVgsU0FBZjtBQUNBLE9BZG9COztBQUFBLHdMQW1CYixZQUFNO0FBQ2IsY0FBSy9DLFFBQUwsQ0FBZTtBQUFFK0MsaUJBQU8sRUFBRTtBQUFYLFNBQWY7QUFDQSxPQXJCb0I7O0FBRXBCLFlBQUtuRCxLQUFMLEdBQWE7QUFDWlIsZUFBTyxFQUFFLEtBREc7QUFFWjJELGVBQU8sRUFBRSxLQUZHO0FBR1pDLFlBQUksRUFBRTtBQUhNLE9BQWI7QUFGb0I7QUFPcEI7QUFFRDs7Ozs7QUF4QmtEO0FBQUE7O0FBc0NsRDs7O0FBdENrRCwwQ0F5QzlCO0FBQ25CLFlBQUtDLDBEQUFVLENBQUUsS0FBS3hHLEtBQUwsQ0FBV3lHLFdBQWIsQ0FBZixFQUE0QztBQUMzQyxlQUFLbEQsUUFBTCxDQUFlO0FBQUVaLG1CQUFPLEVBQUU7QUFBWCxXQUFmO0FBQ0EsY0FBTTRELElBQUksR0FBRyxLQUFLdkcsS0FBTCxDQUFXeUcsV0FBWCxFQUFiO0FBQ0EsZUFBS2xELFFBQUwsQ0FBZTtBQUFFWixtQkFBTyxFQUFFLEtBQVg7QUFBa0I0RCxnQkFBSSxFQUFKQTtBQUFsQixXQUFmO0FBQ0E7QUFDRDtBQS9DaUQ7QUFBQTtBQUFBLCtCQWlEekM7QUFBQTs7QUFBQSwwQkFhSixLQUFLdkcsS0FiRDtBQUFBLFlBRVAyQyxPQUZPLGVBRVBBLE9BRk87QUFBQSxnREFHUCtELGdCQUhPO0FBQUEsWUFHUEEsZ0JBSE8sc0NBR1ksRUFIWjtBQUFBLFlBSVBDLFlBSk8sZUFJUEEsWUFKTztBQUFBLGdEQUtQQyxnQkFMTztBQUFBLFlBS1BBLGdCQUxPLHNDQUtZLEVBTFo7QUFBQSxnREFNUHBELFlBTk87QUFBQSxZQU1QQSxZQU5PLHNDQU1RLEVBTlI7QUFBQSxnREFPUHlDLGFBUE87QUFBQSxZQU9QQSxhQVBPLHNDQU9TLEVBUFQ7QUFBQSxnREFRUFksVUFSTztBQUFBLFlBUVBBLFVBUk8sc0NBUU0sRUFSTjtBQUFBLCtDQVNQQyxRQVRPO0FBQUEsWUFTUEEsUUFUTyxxQ0FTSSxFQVRKO0FBQUEsZ0RBVVBDLFdBVk87QUFBQSxZQVVQQSxXQVZPLHNDQVVPLEtBVlA7QUFBQSxnREFXUEMsbUJBWE87QUFBQSxZQVdQQSxtQkFYTyxzQ0FXZTtBQUFBLGlCQUFNLElBQU47QUFBQSxTQVhmO0FBQUEsWUFZSmQsU0FaSTs7QUFBQSxtQ0Fja0IsS0FBS2xHLEtBZHZCLENBY0ZpSCxRQWRFO0FBQUEsWUFjRkEsUUFkRSxxQ0FjUyxJQWRUO0FBZVJBLGdCQUFRLEdBQUdBLFFBQVEsS0FBSyxJQUFiLElBQXFCLENBQUUvRyx1REFBTyxDQUFFLEtBQUtpRCxLQUFMLENBQVdvRCxJQUFiLENBQTlCLEdBQ1YsS0FBS3BELEtBQUwsQ0FBV29ELElBREQsR0FFVlUsUUFGRDtBQUdBLFlBQU1DLFVBQVUsR0FBRyxPQUFPLEtBQUtsSCxLQUFMLENBQVdtSCxhQUFsQixLQUFvQyxVQUF2RDs7QUFDQSxZQUFNQSxhQUFhLEdBQUcsS0FBS25ILEtBQUwsQ0FBV21ILGFBQVgsSUFBOEI7QUFBQSxpQkFBTSxJQUFOO0FBQUEsU0FBcEQ7O0FBQ0EsZUFDQyxvQkFBQyx1RUFBRDtBQUFtQixzQkFBWSxFQUFHM0Q7QUFBbEMsV0FDQyxvQkFBQyxzREFBRDtBQUNDLGtCQUFRLEVBQUcyRCxhQURaO0FBRUMsdUJBQWEsRUFBR0YsUUFBUSxJQUFJLEVBRjdCO0FBR0Msb0JBQVUsRUFBR0cseURBQVMsQ0FBRVAsVUFBRixDQUh2QjtBQUlDLGtCQUFRLEVBQUdDLFFBSlo7QUFLQyxnQkFBTSxFQUFHLHNCQU9GO0FBQUEsZ0JBTk5PLElBTU0sUUFOTkEsSUFNTTtBQUFBLGdCQUxOdkUsTUFLTSxRQUxOQSxNQUtNO0FBQUEsZ0JBSk53RSxZQUlNLFFBSk5BLFlBSU07QUFBQSxnQkFITnJGLFVBR00sUUFITkEsVUFHTTtBQUFBLGdCQUZORCxRQUVNLFFBRk5BLFFBRU07QUFBQSxnQkFETnVGLE9BQ00sUUFETkEsT0FDTTtBQUNOUCwrQkFBbUIsQ0FBRUssSUFBSSxDQUFDUCxRQUFQLENBQW5CO0FBQ0E5RSxvQkFBUSxHQUFHQSxRQUFRLElBQUksQ0FBRSxNQUFJLENBQUNtQixLQUFMLENBQVdtRCxPQUFwQztBQUNBLGdCQUFNa0IsWUFBWSxHQUFHTixVQUFVLEdBQzlCLG9CQUFDLDREQUFEO0FBQ0Msd0JBQVUsRUFBR1IsZ0JBRGQ7QUFFQyx3QkFBVSxFQUFHekUsVUFGZDtBQUdDLHNCQUFRLEVBQ1AsQ0FDQ0QsUUFBUSxJQUFJdUYsT0FEYixLQUVLLENBQUVSO0FBTlQsY0FEOEIsR0FVOUIsSUFWRDs7QUFXQSxnQkFBTVUsU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBRUMsS0FBRixFQUFhO0FBQzlCLG9CQUFJLENBQUNDLEtBQUw7O0FBQ0FoQiwwQkFBWSxDQUFFZSxLQUFGLENBQVo7QUFDQUwsa0JBQUksQ0FBQ00sS0FBTCxDQUFZRCxLQUFaO0FBQ0EsYUFKRDs7QUFLQSxnQkFBTUUsWUFBWSxHQUFHakIsWUFBWSxHQUNoQyxvQkFBQyw0REFBRDtBQUNDLHdCQUFVLEVBQUdDLGdCQURkO0FBRUMscUJBQU8sRUFBR2EsU0FGWDtBQUdDLHNCQUFRLEVBQUd6RixRQUhaO0FBSUMsd0JBQVUsRUFBR0M7QUFKZCxjQURnQyxHQU9oQyxJQVBEO0FBUUEsbUJBQ0M7QUFBTSxzQkFBUSxFQUFHcUY7QUFBakIsZUFDQyxvQkFBQyxrRUFBRDtBQUNDLHFCQUFPLEVBQUczRSxPQURYO0FBRUMsb0JBQU0sRUFBR3NEO0FBRlYsY0FERCxFQUtDLG9CQUFDLDhEQUFEO0FBQWUscUJBQU8sRUFBR3REO0FBQXpCLGVBQ0Msb0JBQUMsYUFBRDtBQUNDLDJCQUFhLEVBQUdzRSxRQUFRLElBQUksRUFEN0I7QUFFQywyQkFBYSxFQUFHbkUsTUFGakI7QUFHQywwQkFBWSxFQUFHMEUsWUFIaEI7QUFJQywwQkFBWSxFQUFHSSxZQUpoQjtBQUtDLHVCQUFTLEVBQUdILFNBTGI7QUFNQyx5QkFBVyxFQUFHLE1BQUksQ0FBQ0ksV0FOcEI7QUFPQyxzQkFBUSxFQUFHN0Y7QUFQWixlQVFNa0UsU0FSTixFQURELENBTEQsRUFpQkMsb0JBQUMsd0VBQUQ7QUFBbUIsb0JBQU0sRUFBR3BEO0FBQTVCLGNBakJELENBREQ7QUFxQkE7QUE1REYsVUFERCxDQUREO0FBa0VBO0FBdklpRDs7QUFBQTtBQUFBLElBVXpCcEMsNERBVnlCOztBQTBJbkQsU0FBTzJGLFdBQVA7QUFDQSxDQTNJTSxDOzs7Ozs7Ozs7Ozs7O0FDM0JQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7Ozs7Ozs7Ozs7O0FDWEE7QUFBQTtBQUFBO0FBQU8sSUFBTXlCLGlCQUFpQixHQUFHLENBQ2hDLE9BRGdDLEVBRWhDLFVBRmdDLEVBR2hDLE1BSGdDLEVBSWhDLGdCQUpnQyxFQUtoQyxPQUxnQyxFQU1oQyxNQU5nQyxFQU9oQyxRQVBnQyxFQVFoQyxPQVJnQyxFQVNoQyxPQVRnQyxFQVVoQyxRQVZnQyxFQVdoQyxVQVhnQyxFQVloQyxPQVpnQyxFQWFoQyxPQWJnQyxFQWNoQyxPQWRnQyxFQWVoQyxRQWZnQyxFQWdCaEMsUUFoQmdDLEVBaUJoQyxLQWpCZ0MsRUFrQmhDLE1BbEJnQyxFQW1CaEMsVUFuQmdDLEVBb0JoQyxNQXBCZ0MsRUFxQmhDLEtBckJnQyxFQXNCaEMsTUF0QmdDLENBQTFCO0FBeUJBLElBQU1DLHNCQUFzQixHQUFHLENBQ3JDLE9BRHFDLEVBRXJDLE1BRnFDLEVBR3JDLGdCQUhxQyxFQUlyQyxPQUpxQyxFQUtyQyxNQUxxQyxFQU1yQyxRQU5xQyxFQU9yQyxPQVBxQyxFQVFyQyxPQVJxQyxFQVNyQyxRQVRxQyxFQVVyQyxVQVZxQyxFQVdyQyxPQVhxQyxFQVlyQyxPQVpxQyxFQWFyQyxRQWJxQyxFQWNyQyxLQWRxQyxFQWVyQyxNQWZxQyxFQWdCckMsTUFoQnFDLEVBaUJyQyxLQWpCcUMsRUFrQnJDLE1BbEJxQyxDQUEvQixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3pCUDs7O0FBR0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUFVTyxJQUFNQyxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQXFCLE9BSzNCO0FBQUEsTUFKTkMsU0FJTSxRQUpOQSxTQUlNO0FBQUEsTUFITkMsU0FHTSxRQUhOQSxTQUdNO0FBQUEsTUFGTkMsVUFFTSxRQUZOQSxVQUVNO0FBQUEsTUFETkMsUUFDTSxRQUROQSxRQUNNO0FBQ04sU0FBT0gsU0FBUyxJQUNmLG9CQUFDLDJEQUFELFFBQ0dBLFNBREgsRUFFQyxvQkFBQyx1REFBRDtBQUFZLGFBQVMsRUFBR0M7QUFBeEIsSUFGRCxFQUdDLG9CQUFDLDhEQUFEO0FBQ0MsY0FBVSxFQUFHQyxVQURkO0FBRUMsWUFBUSxFQUFHQztBQUZaLElBSEQsQ0FERDtBQVVBLENBaEJNLEM7Ozs7Ozs7Ozs7OztBQ3JCUDtBQUNBLGtCQUFrQiwrQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0RsQjtBQUNBO0FBRUE7Ozs7QUFHQTtBQUVBOzs7Ozs7QUFLTyxJQUFNQyxVQUFVLEdBQUcsU0FBYkEsVUFBYTtBQUFBLE1BQUlILFNBQUosUUFBSUEsU0FBSjtBQUFBLFNBQ3pCLG9CQUFDLHNEQUFEO0FBQ0MsUUFBSSxFQUFHQSxTQURSO0FBRUMsZ0JBQVksRUFBRztBQUFFSSxhQUFPLEVBQUUsSUFBWDtBQUFpQmxGLFdBQUssRUFBRTtBQUF4QixLQUZoQjtBQUdDLFVBQU0sRUFBRztBQUFBLDZCQUFJbUYsSUFBSjtBQUFBLFVBQVlELE9BQVosY0FBWUEsT0FBWjtBQUFBLFVBQXFCbEYsS0FBckIsY0FBcUJBLEtBQXJCO0FBQUEsYUFDUmtGLE9BQU8sSUFBSWxGLEtBQVgsR0FDQztBQUNDLFVBQUUsWUFBTzhFLFNBQVAsaUJBREg7QUFFQyxpQkFBUyxFQUFDO0FBRlgsU0FJQyxrQ0FBUTlFLEtBQVIsQ0FKRCxDQURELEdBT0MsSUFSTztBQUFBO0FBSFYsSUFEeUI7QUFBQSxDQUFuQjtBQWlCUGlGLFVBQVUsQ0FBQ2hHLFNBQVgsR0FBdUI7QUFBRTZGLFdBQVMsRUFBRXZILGlEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QjtBQUE5QixDQUF2QixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlCQTtBQUVBOzs7Ozs7O0FBTU8sSUFBTWlHLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsT0FBZ0M7QUFBQSxNQUE1QkwsVUFBNEIsUUFBNUJBLFVBQTRCO0FBQUEsTUFBaEJDLFFBQWdCLFFBQWhCQSxRQUFnQjtBQUM1RCxTQUFPQSxRQUFRLEdBQ2Q7QUFBRyxNQUFFLEVBQUdELFVBQVI7QUFBcUIsYUFBUyxFQUFDO0FBQS9CLEtBQ0dDLFFBREgsQ0FEYyxHQUlYLElBSko7QUFLQSxDQU5NO0FBUVBJLGFBQWEsQ0FBQ25HLFNBQWQsR0FBMEI7QUFDekI4RixZQUFVLEVBQUV4SCxpREFBUyxDQUFDRyxNQUFWLENBQWlCeUIsVUFESjtBQUV6QjZGLFVBQVEsRUFBRXpILGlEQUFTLENBQUNHO0FBRkssQ0FBMUIsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoQkE7OztBQUdBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7O0FBY08sSUFBTTJILFVBQVUsR0FBRyxTQUFiQSxVQUFhLE9BU25CO0FBQUE7O0FBQUEsTUFSTnZILEtBUU0sUUFSTkEsS0FRTTtBQUFBLE1BUE53SCxPQU9NLFFBUE5BLE9BT007QUFBQSw0QkFOTnZHLFNBTU07QUFBQSxNQU5OQSxTQU1NLCtCQU5NLEVBTU47QUFBQSwyQkFMTlAsUUFLTTtBQUFBLE1BTE5BLFFBS00sOEJBTEssS0FLTDtBQUFBLHlCQUpOK0csTUFJTTtBQUFBLE1BSk5BLE1BSU0sNEJBSkcsSUFJSDtBQUFBLHlCQUhOQyxNQUdNO0FBQUEsTUFITkEsTUFHTSw0QkFIRyxLQUdIO0FBQUEsTUFGTmxHLFFBRU0sUUFGTkEsUUFFTTtBQUFBLE1BREhoQixVQUNHOztBQUNOO0FBQ0EsTUFBTW1ILFFBQVEsR0FBR2pILFFBQVEsSUFBSWMsUUFBUSxLQUFLb0csU0FBekIsR0FDZDtBQUFNLGFBQVMsRUFBQztBQUFoQixTQURjLEdBRWhCLEVBRkQ7QUFHQTVILE9BQUssR0FBR3lILE1BQU0sR0FBSyxvQ0FBVXpILEtBQVYsQ0FBTCxHQUFvQ0EsS0FBbEQ7QUFFQWlCLFdBQVMsR0FBRzNCLGlEQUFVLDhHQUNuQjJCLFNBRG1CLEVBQ05BLFNBRE0sNkZBRW5CUCxRQUZtQixFQUVQQSxRQUZPLDZGQUdyQixnQkFIcUIsRUFHSCxDQUFFZ0gsTUFIQyw2RkFJckIsb0JBSnFCLEVBSUNBLE1BSkQsZ0JBQXRCO0FBT0EsU0FDQztBQUFPLFdBQU8sRUFBR0YsT0FBakI7QUFBMkIsYUFBUyxFQUFHdkc7QUFBdkMsS0FBd0RULFVBQXhELEdBQ0dnQixRQURILEVBRUd4QixLQUZILEVBRVkySCxRQUZaLENBREQ7QUFNQSxDQTdCTTtBQStCUEosVUFBVSxDQUFDcEcsU0FBWCxHQUF1QjtBQUN0Qm5CLE9BQUssRUFBRVAsaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDM0JwSSxpREFBUyxDQUFDcUksTUFEaUIsRUFFM0JySSxpREFBUyxDQUFDRyxNQUZpQixDQUFyQixFQUdIeUIsVUFKa0I7QUFLdEJtRyxTQUFPLEVBQUUvSCxpREFBUyxDQUFDRyxNQUFWLENBQWlCeUIsVUFMSjtBQU10QkosV0FBUyxFQUFFeEIsaURBQVMsQ0FBQ0csTUFOQztBQU90QmMsVUFBUSxFQUFFakIsaURBQVMsQ0FBQ0MsSUFQRTtBQVF0QitILFFBQU0sRUFBRWhJLGlEQUFTLENBQUNDLElBUkk7QUFTdEI4QixVQUFRLEVBQUUvQixpREFBUyxDQUFDb0ksU0FBVixDQUFxQixDQUM5QnBJLGlEQUFTLENBQUNnRixNQURvQixFQUU5QmhGLGlEQUFTLENBQUNzSSxPQUFWLENBQW1CdEksaURBQVMsQ0FBQ2dGLE1BQTdCLENBRjhCLENBQXJCO0FBVFksQ0FBdkIsQzs7Ozs7Ozs7Ozs7OztBQ25EQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBR0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7O0FBZU8sSUFBTXVELGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBcUIsQ0FBRUMsT0FBRixFQUFXQyxPQUFYLEVBQW9CdEcsTUFBcEIsRUFBNEI2RSxLQUE1QixFQUF1QztBQUN4RSxNQUFNMEIsT0FBTyxHQUFHLEVBQWhCO0FBQ0FELFNBQU8sR0FBRzNILHNEQUFPLENBQUUySCxPQUFGLENBQVAsR0FBcUJBLE9BQXJCLEdBQStCLEVBQXpDO0FBQ0F0RyxRQUFNLEdBQUdyQixzREFBTyxDQUFFcUIsTUFBRixDQUFQLEdBQW9CQSxNQUFwQixHQUE2QixDQUFFQSxNQUFGLENBQXRDO0FBQ0FzRyxTQUFPLENBQUNFLE9BQVIsQ0FBaUIsVUFBVUMsTUFBVixFQUFrQkMsS0FBbEIsRUFBMEI7QUFDMUMsUUFBTUMsR0FBRyxHQUFHTixPQUFPLEdBQUcsR0FBVixHQUFnQkssS0FBNUI7QUFDQSxRQUFNRSxVQUFVLEdBQUdDLHNEQUFPLENBQUU3RyxNQUFGLEVBQVV5RyxNQUFNLENBQUNLLEtBQWpCLENBQVAsS0FBb0MsQ0FBQyxDQUF4RDtBQUNBUCxXQUFPLENBQUVJLEdBQUYsQ0FBUCxHQUFpQjlCLEtBQUssS0FBS21CLFNBQVYsR0FBc0JZLFVBQXRCLEdBQW1DL0IsS0FBcEQ7QUFDQSxHQUpEO0FBS0EsU0FBTzBCLE9BQVA7QUFDQSxDQVZNO0FBWVBILGtCQUFrQixDQUFDN0csU0FBbkIsR0FBK0I7QUFDOUI4RyxTQUFPLEVBQUV4SSxpREFBUyxDQUFDRyxNQUFWLENBQWlCeUIsVUFESTtBQUU5QjZHLFNBQU8sRUFBRXpJLGlEQUFTLENBQUNFLEtBQVYsQ0FBZ0IwQixVQUZLO0FBRzlCc0gsY0FBWSxFQUFFbEosaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDbENwSSxpREFBUyxDQUFDcUksTUFEd0IsRUFFbENySSxpREFBUyxDQUFDRyxNQUZ3QixDQUFyQixDQUhnQjtBQU85QjhJLE9BQUssRUFBRWpKLGlEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQzNCcEksaURBQVMsQ0FBQ3FJLE1BRGlCLEVBRTNCckksaURBQVMsQ0FBQ0csTUFGaUIsQ0FBckI7QUFQdUIsQ0FBL0IsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJPLElBQU1nSixZQUFZLEdBQUcsU0FBZkEsWUFBZSxPQVlyQjtBQUFBLE1BWE56SSxJQVdNLFFBWE5BLElBV007QUFBQSxNQVZOQyxJQVVNLFFBVk5BLElBVU07QUFBQSxNQVROeUksWUFTTSxRQVROQSxZQVNNO0FBQUEsTUFSTmxJLE1BUU0sUUFSTkEsTUFRTTtBQUFBLE1BUE5NLFNBT00sUUFQTkEsU0FPTTtBQUFBLE1BTk42SCxVQU1NLFFBTk5BLFVBTU07QUFBQSxNQUxOWixPQUtNLFFBTE5BLE9BS007QUFBQSxNQUpOckgsT0FJTSxRQUpOQSxPQUlNO0FBQUEsTUFITm9HLFVBR00sUUFITkEsVUFHTTtBQUFBLE1BRk44QixPQUVNLFFBRk5BLE9BRU07QUFBQSxNQURIdkksVUFDRzs7QUFDTixTQUFPQSxVQUFVLENBQUN3SSxZQUFsQjtBQUNBZCxTQUFPLEdBQUczSCxzREFBTyxDQUFFMkgsT0FBRixDQUFQLEdBQXFCQSxPQUFyQixHQUErQixDQUFFQSxPQUFGLENBQXpDO0FBQ0EsTUFBTWUsS0FBSyxHQUFHZixPQUFPLENBQUM3RSxNQUF0QjtBQUNBLE1BQUk4RSxPQUFPLEdBQUcsS0FBZDtBQUNBLFNBQU9ELE9BQU8sQ0FBQ2hKLEdBQVIsQ0FBYSxVQUFFbUosTUFBRixFQUFVQyxLQUFWLEVBQXFCO0FBQ3hDLFFBQU1uSixFQUFFLGFBQU93QixNQUFQLGNBQW1CMkgsS0FBbkIsQ0FBUjtBQUNBSCxXQUFPLEdBQUdVLFlBQVksQ0FBRTFKLEVBQUYsQ0FBdEI7QUFDQSxXQUNDLG9CQUFDLHVEQUFEO0FBQ0MsU0FBRyxFQUFHbUosS0FEUDtBQUVDLFdBQUssRUFBR0QsTUFBTSxDQUFDckksS0FGaEI7QUFHQyxhQUFPLEVBQUdiLEVBSFg7QUFJQyxlQUFTLFlBQU8ySixVQUFQLGNBQXVCWCxPQUFPLEdBQUcsUUFBSCxHQUFjLEVBQTVDLENBSlY7QUFLQyxZQUFNLEVBQUcsS0FMVjtBQU1DLGFBQU8sRUFBR3RIO0FBTlgsT0FRQyxvQkFBQyxzREFBRDtBQUNDLGVBQVMsRUFBQyxPQURYO0FBRUMsVUFBSSxFQUFHVixJQUZSO0FBR0MsVUFBSSxFQUFHQyxJQUhSO0FBSUMsUUFBRSxFQUFHakIsRUFKTjtBQUtDLGVBQVMsRUFBRzhCLFNBTGI7QUFNQyxXQUFLLEVBQUdvSCxNQUFNLENBQUNLLEtBTmhCO0FBT0MsYUFBTyxFQUFHUCxPQVBYO0FBUUMsY0FBUSxFQUFHYyxLQUFLLEdBQUcsQ0FScEI7QUFTQywwQkFBbUJoQztBQVRwQixPQVVNOEIsT0FWTixFQVdNdkksVUFYTixFQVJELENBREQ7QUF3QkEsR0EzQk0sQ0FBUDtBQTRCQSxDQTdDTTtBQStDUG9JLFlBQVksQ0FBQ3pILFNBQWIsR0FBeUI7QUFDeEJoQixNQUFJLEVBQUVWLGlEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQURDO0FBRXhCakIsTUFBSSxFQUFFWCxpREFBUyxDQUFDRyxNQUFWLENBQWlCeUIsVUFGQztBQUd4QndILGNBQVksRUFBRXBKLGlEQUFTLENBQUNnRixNQUFWLENBQWlCcEQsVUFIUDtBQUl4QlYsUUFBTSxFQUFFbEIsaURBQVMsQ0FBQ0csTUFBVixDQUFpQnlCLFVBSkQ7QUFLeEJKLFdBQVMsRUFBRXhCLGlEQUFTLENBQUNHLE1BTEc7QUFNeEJrSixZQUFVLEVBQUVySixpREFBUyxDQUFDRyxNQUFWLENBQWlCeUIsVUFOTDtBQU94QjZHLFNBQU8sRUFBRXpJLGlEQUFTLENBQUNzSSxPQUFWLENBQ1J0SSxpREFBUyxDQUFDeUosS0FBVixDQUFpQjtBQUNoQmxKLFNBQUssRUFBRVAsaURBQVMsQ0FBQ0csTUFBVixDQUFpQnlCLFVBRFI7QUFFaEJxSCxTQUFLLEVBQUVqSixpREFBUyxDQUFDb0ksU0FBVixDQUFxQixDQUMzQnBJLGlEQUFTLENBQUNxSSxNQURpQixFQUUzQnJJLGlEQUFTLENBQUNHLE1BRmlCLENBQXJCO0FBRlMsR0FBakIsQ0FEUSxDQVBlO0FBZ0J4QnVKLFVBQVEsRUFBRTFKLGlEQUFTLENBQUMyQixJQWhCSTtBQWlCeEJQLFNBQU8sRUFBRXBCLGlEQUFTLENBQUMyQixJQUFWLENBQWVDLFVBakJBO0FBa0J4QjRGLFlBQVUsRUFBRXhILGlEQUFTLENBQUNHLE1BbEJFO0FBbUJ4Qm1KLFNBQU8sRUFBRXRKLGlEQUFTLENBQUNnRjtBQW5CSyxDQUF6QixDOzs7Ozs7Ozs7Ozs7O0FDOUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUFHQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT08sSUFBTTJFLGVBQWUsR0FBRyxTQUFsQkEsZUFBa0IsQ0FBRWxCLE9BQUYsRUFBZTtBQUM3QyxNQUFJNUQsSUFBSSxHQUFHLENBQVg7QUFDQTRELFNBQU8sR0FBRzNILHNEQUFPLENBQUUySCxPQUFGLENBQVAsR0FBcUJBLE9BQXJCLEdBQStCLEVBQXpDO0FBQ0FBLFNBQU8sQ0FBQ0UsT0FBUixDQUFpQixVQUFVQyxNQUFWLEVBQW1CO0FBQ25DL0QsUUFBSSxHQUFHK0QsTUFBTSxDQUFDckksS0FBUCxDQUFhcUQsTUFBYixHQUFzQmlCLElBQXRCLEdBQTZCK0QsTUFBTSxDQUFDckksS0FBUCxDQUFhcUQsTUFBMUMsR0FBbURpQixJQUExRDtBQUNBLEdBRkQ7QUFHQSxNQUFJK0UsU0FBUyxHQUFHLGFBQWhCOztBQUNBLE1BQUsvRSxJQUFJLEdBQUcsQ0FBWixFQUFnQjtBQUNmK0UsYUFBUyxHQUFHLFdBQVo7QUFDQSxHQUZELE1BRU8sSUFBSy9FLElBQUksR0FBRyxDQUFaLEVBQWdCO0FBQ3RCK0UsYUFBUyxHQUFHLFlBQVo7QUFDQSxHQUZNLE1BRUEsSUFBSy9FLElBQUksR0FBRyxFQUFaLEVBQWlCO0FBQ3ZCK0UsYUFBUyxHQUFHLFdBQVo7QUFDQSxHQUZNLE1BRUEsSUFBSy9FLElBQUksR0FBRyxFQUFaLEVBQWlCO0FBQ3ZCK0UsYUFBUyxHQUFHLFlBQVo7QUFDQSxHQUZNLE1BRUEsSUFBSy9FLElBQUksR0FBRyxFQUFaLEVBQWlCO0FBQ3ZCK0UsYUFBUyxHQUFHLGFBQVo7QUFDQSxHQUZNLE1BRUEsSUFBSy9FLElBQUksSUFBSSxHQUFiLEVBQW1CO0FBQ3pCK0UsYUFBUyxHQUFHLFVBQVo7QUFDQTs7QUFDRCxTQUFPQSxTQUFQO0FBQ0EsQ0FyQk07QUF1QlBELGVBQWUsQ0FBQ2pJLFNBQWhCLEdBQTRCO0FBQzNCK0csU0FBTyxFQUFFekksaURBQVMsQ0FBQ3NJLE9BQVYsQ0FDUnRJLGlEQUFTLENBQUN5SixLQUFWLENBQWlCO0FBQ2hCbEosU0FBSyxFQUFFUCxpREFBUyxDQUFDRyxNQUFWLENBQWlCeUIsVUFEUjtBQUVoQnFILFNBQUssRUFBRWpKLGlEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQzNCcEksaURBQVMsQ0FBQ3FJLE1BRGlCLEVBRTNCckksaURBQVMsQ0FBQ0csTUFGaUIsQ0FBckI7QUFGUyxHQUFqQixDQURRO0FBRGtCLENBQTVCLEM7Ozs7Ozs7Ozs7OztBQ3BDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQUdBO0FBRUE7Ozs7OztBQUtPLElBQU0wSixzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXlCLEdBQXVCO0FBQUEsTUFBckI5SSxVQUFxQix1RUFBUixFQUFRO0FBQzVELFNBQU8rSSxtREFBSSxDQUFFL0ksVUFBRixFQUFjLENBQ3hCLFVBRHdCLEVBRXhCLFNBRndCLEVBR3hCLFVBSHdCLEVBSXhCLFlBSndCLEVBS3hCLE9BTHdCLEVBTXhCLFFBTndCLEVBT3hCLGFBUHdCLENBQWQsQ0FBWDtBQVNBLENBVk07QUFZUDs7Ozs7O0FBS08sSUFBTWdKLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0I7QUFBQSxvQ0FBS0MsVUFBTDtBQUFLQSxjQUFMO0FBQUE7O0FBQUEsU0FBcUIsVUFBRWYsS0FBRixFQUFhO0FBQ2xFLFdBQU9lLFVBQVUsQ0FBQ0MsTUFBWCxDQUNOLFVBQUV4SCxLQUFGLEVBQVN5SCxTQUFUO0FBQUEsYUFBd0J6SCxLQUFLLElBQUl5SCxTQUFTLENBQUVqQixLQUFGLENBQTFDO0FBQUEsS0FETSxFQUVOZCxTQUZNLENBQVA7QUFJQSxHQUxnQztBQUFBLENBQTFCO0FBT1A7Ozs7Ozs7Ozs7O0FBVU8sSUFBTW5ILHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBNEIsR0FHcEM7QUFBQSxNQUZKRCxVQUVJLHVFQUZTLEVBRVQ7QUFBQSxNQURKaUosVUFDSSx1RUFEUyxFQUNUO0FBQ0pBLFlBQVUsQ0FBQ3JCLE9BQVgsQ0FDQyxVQUFFdUIsU0FBRixFQUFpQjtBQUNoQixRQUFNdkosSUFBSSxHQUFHdUosU0FBUyxJQUFJQSxTQUFTLENBQUN2SixJQUF2QixHQUE4QnVKLFNBQVMsQ0FBQ3ZKLElBQXhDLEdBQStDLEVBQTVEOztBQUNBLFlBQVNBLElBQVQ7QUFDQyxXQUFLLFVBQUw7QUFDQ0ksa0JBQVUsQ0FBQ0UsUUFBWCxHQUFzQixJQUF0QjtBQUNBO0FBSEY7QUFLQSxHQVJGO0FBVUEsU0FBT0YsVUFBUDtBQUNBLENBZk07QUFpQlA7Ozs7OztBQUtPLElBQU1vSixtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQXNCLENBQUUxQixPQUFGO0FBQUEsU0FBZUEsT0FBTyxDQUFDaEosR0FBUixDQUNqRCxVQUFFbUosTUFBRjtBQUFBLFdBQWNBLE1BQU0sQ0FBQ0ssS0FBckI7QUFBQSxHQURpRCxDQUFmO0FBQUEsQ0FBNUI7QUFJUDs7Ozs7O0FBS08sSUFBTW1CLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsR0FBb0I7QUFBQSxNQUFsQmQsT0FBa0IsdUVBQVIsRUFBUTs7QUFDakQsT0FBTSxJQUFNUixHQUFaLElBQW1CUSxPQUFuQixFQUE2QjtBQUM1QixRQUFLQSxPQUFPLENBQUNlLGNBQVIsQ0FBd0J2QixHQUF4QixDQUFMLEVBQXFDO0FBQ3BDLFVBQUssQ0FBRUEsR0FBRyxDQUFDd0IsVUFBSixDQUFnQixPQUFoQixDQUFQLEVBQW1DO0FBQ2xDaEIsZUFBTyxnQkFBV1IsR0FBWCxFQUFQLEdBQTZCUSxPQUFPLENBQUVSLEdBQUYsQ0FBcEM7QUFDQSxlQUFPUSxPQUFPLENBQUVSLEdBQUYsQ0FBZDtBQUNBO0FBQ0Q7QUFDRDs7QUFDRCxTQUFPUSxPQUFQO0FBQ0EsQ0FWTSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNFUDs7O0FBR0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JPLElBQU1pQixhQUFiO0FBQUE7QUFBQTtBQUFBOztBQWlCQyx5QkFBYWxMLEtBQWIsRUFBcUI7QUFBQTs7QUFBQTs7QUFDcEIsaU5BQU9BLEtBQVA7O0FBRG9CLDJMQVdSLFlBQU07QUFDbEIsYUFBT2tKLHNGQUFrQixDQUN4QixNQUFLbEosS0FBTCxDQUFXNkIsTUFEYSxFQUV4QixNQUFLN0IsS0FBTCxDQUFXb0osT0FGYSxFQUd4QixNQUFLcEosS0FBTCxDQUFXa0ssWUFIYSxDQUF6QjtBQUtBLEtBakJvQjs7QUFBQSw4TEF1QkwsVUFBRXhDLEtBQUYsRUFBYTtBQUM1QixVQUFLQSxLQUFLLENBQUN5RCxNQUFOLElBQ0p6RCxLQUFLLENBQUN5RCxNQUFOLENBQWE5SyxFQURULElBRUpxSCxLQUFLLENBQUN5RCxNQUFOLENBQWE5QixPQUFiLEtBQXlCUCxTQUYxQixFQUdFO0FBQ0QsWUFBTU8sT0FBTyxHQUFHLE1BQUtsRyxLQUFMLENBQVdrRyxPQUEzQjtBQUNBQSxlQUFPLENBQUUzQixLQUFLLENBQUN5RCxNQUFOLENBQWE5SyxFQUFmLENBQVAsR0FBNkJxSCxLQUFLLENBQUN5RCxNQUFOLENBQWE5QixPQUExQzs7QUFDQSxjQUFLOUYsUUFBTCxDQUFlO0FBQUU4RixpQkFBTyxFQUFQQTtBQUFGLFNBQWY7QUFDQTtBQUNELEtBaENvQjs7QUFFcEIsVUFBS2xHLEtBQUwsR0FBYTtBQUNaa0csYUFBTyxFQUFFLE1BQUsrQixVQUFMO0FBREcsS0FBYjtBQUZvQjtBQUtwQjtBQUVEOzs7Ozs7QUF4QkQ7QUFBQTtBQUFBLDZCQW1EVTtBQUFBLHdCQVVKLEtBQUtwTCxLQVZEO0FBQUEsVUFFUHNCLElBRk8sZUFFUEEsSUFGTztBQUFBLFVBR1BPLE1BSE8sZUFHUEEsTUFITztBQUFBLFVBSVB1SCxPQUpPLGVBSVBBLE9BSk87QUFBQSxVQUtQeEgsUUFMTyxlQUtQQSxRQUxPO0FBQUEsVUFNUHVHLFVBTk8sZUFNUEEsVUFOTztBQUFBLDZDQU9Qa0QsUUFQTztBQUFBLFVBT1BBLFFBUE8scUNBT0ksSUFQSjtBQUFBLDhDQVFQQyxVQVJPO0FBQUEsVUFRUEEsVUFSTyxzQ0FRTSxFQVJOO0FBQUEsVUFTSjVKLFVBVEk7O0FBQUEsVUFXRlMsU0FYRSxHQVdZLEtBQUtuQyxLQVhqQixDQVdGbUMsU0FYRTtBQWFSQSxlQUFTLEdBQUdQLFFBQVEsYUFDZk8sU0FEZSxtQ0FFbkJBLFNBRkQ7QUFHQSxVQUFNNkgsVUFBVSxHQUFHcUIsUUFBUSxHQUMxQixpQkFEMEIsR0FFMUIsNEJBQTRCZixnRkFBZSxDQUFFbEIsT0FBRixDQUY1QztBQUdBLFVBQUltQyxRQUFRLEdBQUdGLFFBQVEsR0FBRyxXQUFILEdBQWlCLG1CQUF4QztBQUNBRSxjQUFRLEdBQUdELFVBQVUsYUFDaEJDLFFBRGdCLDZCQUNhRCxVQURiLElBRXBCQyxRQUZEO0FBR0EsYUFDQztBQUFLLGlCQUFTLEVBQUdBO0FBQWpCLFNBQ0Msb0JBQUMsaUVBQUQ7QUFDQyxZQUFJLEVBQUMsVUFETjtBQUVDLFlBQUksRUFBR2pLLElBRlI7QUFHQyxvQkFBWSxFQUFHLEtBQUs2QixLQUFMLENBQVdrRyxPQUgzQjtBQUlDLGNBQU0sRUFBR3hILE1BSlY7QUFLQyxpQkFBUyxFQUFHTSxTQUxiO0FBTUMsa0JBQVUsRUFBRzZILFVBTmQ7QUFPQyxlQUFPLEVBQUdaLE9BUFg7QUFRQyxlQUFPLEVBQUcsS0FBS29DLGFBUmhCO0FBU0Msa0JBQVUsRUFBR3JEO0FBVGQsU0FVTXpHLFVBVk4sRUFERCxDQUREO0FBZ0JBO0FBMUZGOztBQUFBO0FBQUEsRUFBbUNoQiw0REFBbkM7OzZFQUFhd0ssYSxlQUNPO0FBQ2xCckosUUFBTSxFQUFFbEIsa0RBQVMsQ0FBQ0csTUFBVixDQUFpQnlCLFVBRFA7QUFFbEJKLFdBQVMsRUFBRXhCLGtEQUFTLENBQUNHLE1BRkg7QUFHbEI4SSxPQUFLLEVBQUVqSixrREFBUyxDQUFDb0ksU0FBVixDQUFxQixDQUMzQnBJLGtEQUFTLENBQUNFLEtBRGlCLEVBRTNCRixrREFBUyxDQUFDcUksTUFGaUIsRUFHM0JySSxrREFBUyxDQUFDRyxNQUhpQixDQUFyQixDQUhXO0FBUWxCc0ksU0FBTyxFQUFFekksa0RBQVMsQ0FBQ0UsS0FSRDtBQVNsQndKLFVBQVEsRUFBRTFKLGtEQUFTLENBQUMyQixJQVRGO0FBVWxCK0ksVUFBUSxFQUFFMUssa0RBQVMsQ0FBQ0MsSUFWRjtBQVdsQjBLLFlBQVUsRUFBRTNLLGtEQUFTLENBQUNHLE1BWEo7QUFZbEJxSCxZQUFVLEVBQUV4SCxrREFBUyxDQUFDRyxNQVpKO0FBYWxCbUosU0FBTyxFQUFFdEosa0RBQVMsQ0FBQ2dGO0FBYkQsQzs7Ozs7Ozs7Ozs7O0FDOUJwQjtBQUNBLGtCQUFrQiwyVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEbEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7SUFjTThGLGdCOzs7OztBQWlCTCw0QkFBYXpMLEtBQWIsRUFBcUI7QUFBQTs7QUFBQTs7QUFDcEIsb05BQU9BLEtBQVA7O0FBRG9CLGtNQWtCRCxZQUFNO0FBQ3pCLFVBQU1rSyxZQUFZLEdBQUcsTUFBS2xLLEtBQUwsQ0FBV2tLLFlBQVgsR0FDcEIsSUFBSXdCLElBQUosQ0FBVSxNQUFLMUwsS0FBTCxDQUFXa0ssWUFBckIsQ0FEb0IsR0FFcEIsSUFBSXdCLElBQUosRUFGRCxDQUR5QixDQUl6QjtBQUNBO0FBQ0E7O0FBQ0EsVUFBTUMsWUFBWSxHQUFHLFdBQVdDLElBQVgsQ0FDcEJDLHdFQUFnQixDQUNoQjtBQURnQixPQUVkQyxXQUZGLEdBR0M7QUFIRCxPQUlFQyxPQUpGLENBSVcsT0FKWCxFQUlvQixFQUpwQixFQUtDO0FBTEQsT0FNRTFILEtBTkYsQ0FNUyxFQU5ULEVBTWMySCxPQU5kLEdBTXdCQyxJQU54QixDQU04QixFQU45QixDQURvQixDQUFyQjs7QUFTQSxZQUFLMUksUUFBTCxDQUFlO0FBQ2RvSSxvQkFBWSxFQUFaQSxZQURjO0FBRWRPLGtCQUFVLEVBQUUsS0FGRTtBQUdkQyxrQkFBVSxFQUFFakMsWUFIRTtBQUlka0MsZ0JBQVEsRUFBRWxDLFlBSkk7QUFLZG1DLGlCQUFTLEVBQUVuQyxZQUxHO0FBTWRHLGdCQUFRLEVBQUUsTUFBS3JLLEtBQUwsQ0FBV21CLEtBQVgsSUFBb0IsTUFBS25CLEtBQUwsQ0FBV21CLEtBQVgsQ0FBaUJrSixRQUFyQyxHQUNULE1BQUtySyxLQUFMLENBQVdtQixLQUFYLENBQWlCa0osUUFEUixHQUVUO0FBUmEsT0FBZjtBQVVBLEtBNUNvQjs7QUFBQSw2TEFtRE4sWUFBTTtBQUNwQixZQUFLOUcsUUFBTCxDQUFlLFVBQUUrSSxTQUFGO0FBQUEsZUFDZDtBQUFFSixvQkFBVSxFQUFFLENBQUVJLFNBQVMsQ0FBQ0o7QUFBMUIsU0FEYztBQUFBLE9BQWY7QUFHQSxLQXZEb0I7O0FBQUEseUxBK0RWLFVBQUVLLE9BQUYsRUFBZTtBQUN6QixZQUFLaEosUUFBTCxDQUFlO0FBQUU2SSxnQkFBUSxFQUFFLElBQUlWLElBQUosQ0FBVWEsT0FBVjtBQUFaLE9BQWY7QUFDQSxLQWpFb0I7O0FBQUEsdUxBd0VaLFlBQU07QUFDZCxZQUFLaEosUUFBTCxDQUFlLFVBQUUrSSxTQUFGO0FBQUEsZUFDZDtBQUFFSCxvQkFBVSxFQUFFRyxTQUFTLENBQUNEO0FBQXhCLFNBRGM7QUFBQSxPQUFmO0FBR0EsS0E1RW9COztBQUFBLHVMQW1GWixZQUFNO0FBQ2QsWUFBSzlJLFFBQUwsQ0FBZSxVQUFFK0ksU0FBRixFQUFpQjtBQUMvQixZQUFLLE9BQU9BLFNBQVMsQ0FBQ2pDLFFBQWpCLEtBQThCLFVBQW5DLEVBQWdEO0FBQy9DaUMsbUJBQVMsQ0FBQ2pDLFFBQVYsQ0FBb0JpQyxTQUFTLENBQUNGLFFBQVYsQ0FBbUJJLFdBQW5CLEVBQXBCO0FBQ0E7O0FBQ0QsZUFBTztBQUNOTCxvQkFBVSxFQUFFRyxTQUFTLENBQUNGLFFBRGhCO0FBRU5DLG1CQUFTLEVBQUVDLFNBQVMsQ0FBQ0Y7QUFGZixTQUFQO0FBSUEsT0FSRDtBQVNBLEtBN0ZvQjs7QUFFcEIsUUFBTWxDLGFBQVksR0FBRyxJQUFJd0IsSUFBSixFQUFyQjs7QUFDQSxVQUFLdkksS0FBTCxHQUFhO0FBQ1p3SSxrQkFBWSxFQUFFLElBREY7QUFFWk8sZ0JBQVUsRUFBRSxLQUZBO0FBR1pDLGdCQUFVLEVBQUVqQyxhQUhBO0FBSVprQyxjQUFRLEVBQUVsQyxhQUpFO0FBS1ptQyxlQUFTLEVBQUVuQyxhQUxDO0FBTVpHLGNBQVEsRUFBRTtBQU5FLEtBQWI7QUFIb0I7QUFXcEI7QUFFRDs7Ozs7Ozs7OzZCQWtGUztBQUFBO0FBQUE7O0FBQUEsd0JBU0osS0FBS3JLLEtBVEQ7QUFBQSxVQUVQbUIsS0FGTyxlQUVQQSxLQUZPO0FBQUEsVUFHUFUsTUFITyxlQUdQQSxNQUhPO0FBQUEsVUFJUE0sU0FKTyxlQUlQQSxTQUpPO0FBQUEsVUFLUGdHLFVBTE8sZUFLUEEsVUFMTztBQUFBLFVBTVA4QixPQU5PLGVBTVBBLE9BTk87QUFBQSw4Q0FPUHFCLFVBUE87QUFBQSxVQU9QQSxVQVBPLHNDQU9NLEVBUE47QUFBQSxVQVFKNUosVUFSSTs7QUFVUixhQUFPQSxVQUFVLENBQUN3SSxZQUFsQjtBQUNBLFVBQU11QyxVQUFVLEdBQUdqTSxrREFBVSw4R0FDMUIyQixTQUQwQixFQUNiLElBRGEsNkZBRTVCLCtCQUY0QixFQUVLLElBRkwsNkZBRzVCLGNBSDRCLEVBR1osSUFIWSxzSEFJUG1KLFVBSk8sR0FJVUEsVUFKVixnQkFBN0I7QUFNQSxVQUFNYSxVQUFVLEdBQUdPLDRFQUFjLENBQUNDLFVBQWYsQ0FBMkIsS0FBS3hKLEtBQUwsQ0FBV2dKLFVBQXRDLENBQW5CO0FBQ0EsYUFDQyxvQkFBQywrREFBRDtBQUNDLGdCQUFRLEVBQUMsZUFEVjtBQUVDLHdCQUFnQixFQUFDLDJCQUZsQjtBQUdDLG9CQUFZLEVBQUc7QUFBQSxjQUFJUyxRQUFKLFFBQUlBLFFBQUo7QUFBQSxpQkFDZDtBQUFLLHFCQUFTLEVBQUc7QUFBakIsYUFDQztBQUNDLGdCQUFJLEVBQUMsTUFETjtBQUVDLGNBQUUsRUFBRy9LLE1BRk47QUFHQyxxQkFBUyxFQUFHNEssVUFIYjtBQUlDLGlCQUFLLEVBQUdOLFVBQVUsQ0FBQ1UsUUFBWCxDQUFxQkMsNkVBQXJCLENBSlQ7QUFLQyxtQkFBTyxFQUFHRixRQUxYO0FBTUMsb0JBQVEsRUFBR3pMLEtBQUssQ0FBQ2tKLFFBTmxCO0FBT0MscUJBQVMsRUFBRyxtQkFBRTNDLEtBQUYsRUFBYTtBQUN4QixrQkFDQ0EsS0FBSyxDQUFDcUYsT0FBTixLQUFrQkMsMERBQWxCLElBQ0F0RixLQUFLLENBQUNxRixPQUFOLEtBQWtCRSwwREFGbkIsRUFHRTtBQUNETCx3QkFBUSxDQUFFbEYsS0FBRixDQUFSO0FBQ0E7QUFDRCxhQWRGO0FBZUMsZ0NBQW1CUyxVQWZwQjtBQWdCQyx5QkFBVTtBQWhCWCxhQWlCTThCLE9BakJOLEVBa0JNdkksVUFsQk4sRUFERCxFQXFCQyxvQkFBQyxpRUFBRDtBQUNDLGdCQUFJLEVBQ0gsb0JBQUMscUVBQUQ7QUFDQyxrQkFBSSxFQUFHd0wsK0VBRFI7QUFFQyxxQkFBTyxFQUFHTjtBQUZYLGNBRkY7QUFPQyxpQkFBSyxFQUFHeEssK0RBQUUsQ0FDVCwrQkFEUyxFQUVULGdCQUZTO0FBUFgsWUFyQkQsQ0FEYztBQUFBLFNBSGhCO0FBdUNDLHFCQUFhLEVBQUc7QUFBQSxjQUFJd0ssUUFBSixTQUFJQSxRQUFKO0FBQUEsaUJBQ2Y7QUFBSyxxQkFBUyxFQUFHO0FBQWpCLGFBQ0Msb0JBQUMscUVBQUQ7QUFDQyxlQUFHLEVBQUMscUJBREw7QUFFQyx1QkFBVyxFQUFHLE1BQUksQ0FBQ3pKLEtBQUwsQ0FBV2lKLFFBRjFCO0FBR0Msb0JBQVEsRUFBRyxNQUFJLENBQUMvQixRQUhqQjtBQUlDLGtCQUFNLEVBQUc4QyxrRUFKVjtBQUtDLG9CQUFRLEVBQUcsTUFBSSxDQUFDaEssS0FBTCxDQUFXd0k7QUFMdkIsWUFERCxFQVFDO0FBQUsscUJBQVMsRUFBRztBQUFqQixhQUNDLG9CQUFDLDZEQUFEO0FBQVEscUJBQVMsTUFBakI7QUFDQyxtQkFBTyxFQUFHLG1CQUFNO0FBQ2Ysb0JBQUksQ0FBQ3lCLE1BQUw7O0FBQ0FSLHNCQUFRO0FBQ1IsYUFKRjtBQUtDLHFCQUFTLEVBQUM7QUFMWCxhQU9HeEssK0RBQUUsQ0FBRSxRQUFGLEVBQVksZ0JBQVosQ0FQTCxDQURELEVBVUMsb0JBQUMsNkRBQUQ7QUFBUSxxQkFBUyxNQUFqQjtBQUNDLG1CQUFPLEVBQUcsbUJBQU07QUFDZixvQkFBSSxDQUFDaUwsTUFBTDs7QUFDQVQsc0JBQVE7QUFDUixhQUpGO0FBS0MscUJBQVMsRUFBQztBQUxYLGFBT0d4SywrREFBRSxDQUFFLFFBQUYsRUFBWSxnQkFBWixDQVBMLENBVkQsQ0FSRCxDQURlO0FBQUE7QUF2Q2pCLFFBREQ7QUF5RUE7Ozs7RUEzTTZCMUIsNEQ7QUE4TS9COzs7Ozs7OzZFQTlNTStLLGdCLGVBQ2M7QUFDbEJ0SyxPQUFLLEVBQUVSLGtEQUFTLENBQUNnRixNQUFWLENBQWlCcEQsVUFETjtBQUVsQjJILGNBQVksRUFBRXZKLGtEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQ2xDcEksa0RBQVMsQ0FBQ2dGLE1BRHdCLEVBRWxDaEYsa0RBQVMsQ0FBQ0csTUFGd0IsQ0FBckIsRUFHVnlCLFVBTGM7QUFNbEJWLFFBQU0sRUFBRWxCLGtEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQU5QO0FBT2xCSixXQUFTLEVBQUV4QixrREFBUyxDQUFDRyxNQVBIO0FBUWxCcUgsWUFBVSxFQUFFeEgsa0RBQVMsQ0FBQ0csTUFSSjtBQVNsQm1KLFNBQU8sRUFBRXRKLGtEQUFTLENBQUNnRixNQVREO0FBVWxCMkYsWUFBVSxFQUFFM0ssa0RBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDaENwSSxrREFBUyxDQUFDcUksTUFEc0IsRUFFaENySSxrREFBUyxDQUFDRyxNQUZzQixDQUFyQjtBQVZNLEM7O0FBa05iLElBQU13TSxhQUFhLEdBQUcsU0FBaEJBLGFBQWdCLENBQUU1TCxVQUFGLEVBQWtCO0FBQzlDLFNBQ0Msb0JBQUMsdURBQUQ7QUFDQyxhQUFTLEVBQUcrSjtBQURiLEtBRU0vSixVQUZOLEVBREQ7QUFNQSxDQVBNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdFBQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Q0FRQTs7QUFDQW9HLGtFQUFpQixDQUFDdEQsSUFBbEIsQ0FBd0IsUUFBeEI7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJPLElBQU0rSSxTQUFiO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUEsNkJBb0JVO0FBQUEsd0JBU0osS0FBS3ZOLEtBVEQ7QUFBQSxVQUVQcUIsSUFGTyxlQUVQQSxJQUZPO0FBQUEsVUFHUEMsSUFITyxlQUdQQSxJQUhPO0FBQUEsVUFJUE8sTUFKTyxlQUlQQSxNQUpPO0FBQUEsVUFLUDJMLFdBTE8sZUFLUEEsV0FMTztBQUFBLDhDQU1QQyxjQU5PO0FBQUEsVUFNUEEsY0FOTyxzQ0FNVSxJQU5WO0FBQUEsOENBT1BDLFVBUE87QUFBQSxVQU9QQSxVQVBPLHNDQU9NLElBUE47QUFBQSxVQVFKQyxJQVJJOztBQUFBLHlCQWdCSixLQUFLM04sS0FoQkQ7QUFBQSxVQVdQbUksVUFYTyxnQkFXUEEsVUFYTztBQUFBLCtDQVlQQyxRQVpPO0FBQUEsVUFZUEEsUUFaTyxzQ0FZSSxFQVpKO0FBQUEsK0NBYVBqRyxTQWJPO0FBQUEsVUFhUEEsU0FiTyxzQ0FhSyxFQWJMO0FBQUEsOENBY1A4SCxPQWRPO0FBQUEsVUFjUEEsT0FkTyxxQ0FjRyxFQWRIO0FBQUEsK0NBZVAxSSxXQWZPO0FBQUEsVUFlUEEsV0FmTyxzQ0FlTyxFQWZQO0FBaUJSNEcsZ0JBQVUsR0FBR0EsVUFBVSxHQUFHQSxVQUFILGFBQW9CdEcsTUFBcEIsZUFBdkI7QUFDQU0sZUFBUyxHQUFHLEtBQUtuQyxLQUFMLENBQVc0QixRQUFYLGFBQTBCTyxTQUExQixpQkFBa0RBLFNBQTlELENBbEJRLENBbUJSOztBQUNBOEgsYUFBTyxHQUFHYyxtRUFBYyxDQUFFZCxPQUFGLENBQXhCO0FBQ0ExSSxpQkFBVyxHQUFHQyxLQUFLLENBQUNDLE9BQU4sQ0FBZUYsV0FBZixJQUErQkEsV0FBL0IsR0FBNkMsQ0FBRUEsV0FBRixDQUEzRCxDQXJCUSxDQXNCUjs7QUFDQSxVQUFJRyxVQUFVLEdBQUc4SSwyRUFBc0IsQ0FBRW1ELElBQUYsQ0FBdkMsQ0F2QlEsQ0F3QlI7O0FBQ0FqTSxnQkFBVSxHQUFHQyw4RUFBeUIsQ0FBRUQsVUFBRixFQUFjSCxXQUFkLENBQXRDLENBekJRLENBMEJSOztBQUNBQSxpQkFBVyxHQUFHbUosOERBQWlCLE1BQWpCLHlGQUFzQm5KLFdBQXRCLEVBQWQ7QUFDQSxVQUFJMEcsU0FBUyxHQUFHLElBQWhCOztBQUNBLGNBQVM1RyxJQUFUO0FBQ0MsYUFBSyxRQUFMO0FBQ0MsaUJBQ0Msb0JBQUMsMERBQUQ7QUFDQyxnQkFBSSxFQUFHQyxJQURSO0FBRUMsa0JBQU0sRUFBR08sTUFGVjtBQUdDLG1CQUFPLEVBQUdvSSxPQUhYO0FBSUMsb0JBQVEsRUFBRzFJO0FBSlosYUFLTUcsVUFMTixFQUREOztBQVNELGFBQUssVUFBTDtBQUNDdUcsbUJBQVMsR0FDUixvQkFBQyw4REFBRDtBQUNDLGdCQUFJLEVBQUczRyxJQURSO0FBRUMsa0JBQU0sRUFBR08sTUFGVjtBQUdDLHFCQUFTLEVBQUdNLFNBSGI7QUFJQyxtQkFBTyxFQUFHOEgsT0FKWDtBQUtDLHNCQUFVLEVBQUc5QixVQUxkO0FBTUMsb0JBQVEsRUFBRzVHO0FBTlosYUFPTUcsVUFQTixFQUREO0FBV0E7O0FBQ0QsYUFBSyxPQUFMO0FBQ0N1RyxtQkFBUyxHQUNSLG9CQUFDLHdEQUFEO0FBQ0MsZ0JBQUksRUFBRzNHLElBRFI7QUFFQyxrQkFBTSxFQUFHTyxNQUZWO0FBR0MscUJBQVMsRUFBR00sU0FIYjtBQUlDLG1CQUFPLEVBQUc4SCxPQUpYO0FBS0Msc0JBQVUsRUFBRzlCLFVBTGQ7QUFNQyxvQkFBUSxFQUFHNUc7QUFOWixhQU9NRyxVQVBOLEVBREQ7QUFXQTs7QUFDRCxhQUFLLFFBQUw7QUFDQyxpQkFBT0EsVUFBVSxDQUFDd0ksWUFBbEI7QUFDQWpDLG1CQUFTLEdBQ1Isb0JBQUMsMERBQUQ7QUFDQyxnQkFBSSxFQUFHM0csSUFEUjtBQUVDLGtCQUFNLEVBQUdPLE1BRlY7QUFHQyxxQkFBUyxFQUFHTSxTQUhiO0FBSUMsbUJBQU8sRUFBRzhILE9BSlg7QUFLQyxzQkFBVSxFQUFHOUIsVUFMZDtBQU1DLG9CQUFRLEVBQUc1RztBQU5aLGFBT01HLFVBUE4sRUFERDtBQVdBOztBQUNELGFBQUssVUFBTDtBQUNDLGlCQUFPQSxVQUFVLENBQUN3SSxZQUFsQjtBQUNBakMsbUJBQVMsR0FDUixvQkFBQyxtREFBRDtBQUNDLGdCQUFJLEVBQUczRyxJQURSO0FBRUMsa0JBQU0sRUFBR08sTUFGVjtBQUdDLHFCQUFTLEVBQUdNLFNBSGI7QUFJQyxtQkFBTyxFQUFHOEgsT0FKWDtBQUtDLHNCQUFVLEVBQUc5QixVQUxkO0FBTUMsb0JBQVEsRUFBRzVHO0FBTlosYUFPTUcsVUFQTixFQUREO0FBV0E7O0FBQ0QsYUFBSyxNQUFMO0FBQ0EsYUFBSyxPQUFMO0FBQ0EsYUFBSyxnQkFBTDtBQUNDdUcsbUJBQVMsR0FDUixvQkFBQywrREFBRDtBQUNDLGdCQUFJLEVBQUczRyxJQURSO0FBRUMsa0JBQU0sRUFBR08sTUFGVjtBQUdDLHFCQUFTLEVBQUdNLFNBSGI7QUFJQyxnQ0FBbUJnRztBQUpwQixhQUtNOEIsT0FMTixFQU1NdkksVUFOTixFQU9NSCxXQVBOLEVBREQ7QUFXQTs7QUFDRCxhQUFLLFFBQUw7QUFDQyxjQUFNOEgsT0FBTyxHQUFHLENBQUMsQ0FBRTNILFVBQVUsQ0FBQ3dJLFlBQTlCO0FBQ0EsaUJBQU94SSxVQUFVLENBQUN3SSxZQUFsQjtBQUNBLGlCQUFPeEksVUFBVSxDQUFDNEosVUFBbEI7QUFDQXJELG1CQUFTLEdBQ1Isb0JBQUMsMERBQUQ7QUFDQyxnQkFBSSxFQUFHM0csSUFEUjtBQUVDLG1CQUFPLEVBQUcrSCxPQUZYO0FBR0Msa0JBQU0sRUFBR3hILE1BSFY7QUFJQyxxQkFBUyxFQUFHTSxTQUpiO0FBS0MsZ0NBQW1CZ0c7QUFMcEIsYUFNTThCLE9BTk4sRUFPTXZJLFVBUE4sRUFRTUgsV0FSTixFQUREO0FBWUE2RyxrQkFBUSxHQUFHLEVBQVg7QUFDQTs7QUFDRDtBQUNDLGlCQUFPMUcsVUFBVSxDQUFDd0ksWUFBbEI7QUFDQWpDLG1CQUFTLEdBQ1Isb0JBQUMsc0RBQUQ7QUFDQyxnQkFBSSxFQUFHNUcsSUFEUjtBQUVDLGdCQUFJLEVBQUdDLElBRlI7QUFHQyxrQkFBTSxFQUFHTyxNQUhWO0FBSUMscUJBQVMsRUFBR00sU0FKYjtBQUtDLG1CQUFPLEVBQUc4SCxPQUxYO0FBTUMsc0JBQVUsRUFBRzlCLFVBTmQ7QUFPQyxvQkFBUSxFQUFHNUc7QUFQWixhQVFNRyxVQVJOLEVBREQ7QUFwR0Y7O0FBaUhBdUcsZUFBUyxHQUFHeUYsVUFBVSxHQUNyQjtBQUFLLGlCQUFTLEVBQUc7QUFBakIsU0FDR3pGLFNBREgsRUFFQztBQUFLLGlCQUFTLEVBQUc7QUFBakIsU0FBMEN5RixVQUExQyxDQUZELENBRHFCLEdBS2xCekYsU0FMSjtBQU1BLFVBQU0yRixZQUFZLEdBQUdwSCwwREFBVSxDQUFFaUgsY0FBRixDQUFWLEdBQ3BCLG9CQUFDLG9FQUFEO0FBQVUsWUFBSSxFQUFHbk07QUFBakIsU0FDR21NLGNBREgsQ0FEb0IsR0FJakIsSUFKSjtBQUtBLGFBQU9ELFdBQVcsR0FDakIsb0JBQUMsMkRBQUQsUUFDQyxvQkFBQyxXQUFEO0FBQ0MsaUJBQVMsRUFBR2xNLElBRGI7QUFFQyxpQkFBUyxFQUFHMkcsU0FGYjtBQUdDLGtCQUFVLEVBQUdFLFVBSGQ7QUFJQyxnQkFBUSxFQUFHQztBQUpaLFFBREQsRUFPR3dGLFlBUEgsQ0FEaUIsR0FXakIsb0JBQUMsMkRBQUQsUUFDQyxvQkFBQyw4RUFBRDtBQUNDLGlCQUFTLEVBQUd0TSxJQURiO0FBRUMsaUJBQVMsRUFBRzJHLFNBRmI7QUFHQyxrQkFBVSxFQUFHRSxVQUhkO0FBSUMsZ0JBQVEsRUFBR0M7QUFKWixRQURELEVBT0d3RixZQVBILENBWEQ7QUFxQkE7QUFsTUY7O0FBQUE7QUFBQSxFQUErQmxOLDREQUEvQjs7NkVBQWE2TSxTLGVBQ087QUFDbEJsTSxNQUFJLEVBQUVWLGtEQUFTLENBQUMrRSxLQUFWLENBQWlCb0Msa0VBQWpCLEVBQXFDdkYsVUFEekI7QUFFbEJqQixNQUFJLEVBQUVYLGtEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQUZMO0FBR2xCVixRQUFNLEVBQUVsQixrREFBUyxDQUFDRyxNQUFWLENBQWlCeUIsVUFIUDtBQUlsQkosV0FBUyxFQUFFeEIsa0RBQVMsQ0FBQ0csTUFKSDtBQUtsQjhJLE9BQUssRUFBRWpKLGtEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQzNCcEksa0RBQVMsQ0FBQ0MsSUFEaUIsRUFFM0JELGtEQUFTLENBQUNxSSxNQUZpQixFQUczQnJJLGtEQUFTLENBQUNHLE1BSGlCLENBQXJCLENBTFc7QUFVbEJ1SixVQUFRLEVBQUUxSixrREFBUyxDQUFDMkIsSUFWRjtBQVdsQjJILFNBQU8sRUFBRXRKLGtEQUFTLENBQUNnRixNQVhEO0FBWWxCeUQsU0FBTyxFQUFFekksa0RBQVMsQ0FBQ0UsS0FaRDtBQWFsQnVILFVBQVEsRUFBRXpILGtEQUFTLENBQUNHLE1BYkY7QUFjbEJxSCxZQUFVLEVBQUV4SCxrREFBUyxDQUFDRyxNQWRKO0FBZWxCME0sYUFBVyxFQUFFN00sa0RBQVMsQ0FBQ2dGLE1BZkw7QUFnQmxCOEgsZ0JBQWMsRUFBRTlNLGtEQUFTLENBQUMyQjtBQWhCUixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakRwQjs7O0FBR0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFXTyxJQUFNdUwsV0FBVyxHQUFHLFNBQWRBLFdBQWMsT0FLcEI7QUFBQSxNQUpOdk0sSUFJTSxRQUpOQSxJQUlNO0FBQUEsTUFITk8sTUFHTSxRQUhOQSxNQUdNO0FBQUEsTUFGTm9JLE9BRU0sUUFGTkEsT0FFTTtBQUFBLE1BREh2SSxVQUNHOztBQUNOLFNBQ0Msb0JBQUMsc0RBQUQ7QUFDQyxhQUFTLEVBQUMsT0FEWDtBQUVDLFFBQUksRUFBQyxRQUZOO0FBR0MsUUFBSSxFQUFHSixJQUhSO0FBSUMsTUFBRSxFQUFHTztBQUpOLEtBS01vSSxPQUxOLEVBTU12SSxVQU5OLEVBREQ7QUFVQSxDQWhCTTtBQWtCUG1NLFdBQVcsQ0FBQ3hMLFNBQVosR0FBd0I7QUFDdkJmLE1BQUksRUFBRVgsaURBQVMsQ0FBQ0csTUFBVixDQUFpQnlCLFVBREE7QUFFdkJWLFFBQU0sRUFBRWxCLGlEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQUZGO0FBR3ZCOEgsVUFBUSxFQUFFMUosaURBQVMsQ0FBQzJCLElBSEc7QUFJdkIySCxTQUFPLEVBQUV0SixpREFBUyxDQUFDZ0Y7QUFKSSxDQUF4QixDOzs7Ozs7Ozs7Ozs7QUNuQ0E7QUFDQSxrQkFBa0IsaVQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEbEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFXTyxJQUFNbUksZUFBYjtBQUFBO0FBQUE7QUFBQTs7QUEwQkMsMkJBQWE5TixLQUFiLEVBQXFCO0FBQUE7O0FBQUE7O0FBQ3BCLG1OQUFPQSxLQUFQOztBQURvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNkVBd0JBLGlCQUFRK04sU0FBUixFQUFtQnpCLFNBQW5CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxzQkFFbkIsQ0FBRXlCLFNBQVMsQ0FBQ0MsTUFBWixJQUNBLENBQUUsTUFBSzdLLEtBQUwsQ0FBVzZLLE1BRGIsSUFFQSxPQUFPMUIsU0FBUyxDQUFDMUMsS0FBakIsS0FBMkIsV0FGM0IsSUFHQTBDLFNBQVMsQ0FBQzFDLEtBQVYsS0FBb0IsTUFBS3pHLEtBQUwsQ0FBV3lHLEtBSC9CLElBSUFtRSxTQUFTLENBQUNuRSxLQUFWLEtBQW9CLE1BQUs1SixLQUFMLENBQVc0SixLQU5aO0FBQUE7QUFBQTtBQUFBOztBQVFuQjtBQUNBLHNCQUFLckcsUUFBTCxDQUFlO0FBQ2QwSyx5QkFBTyxFQUFFLE1BQUtqTyxLQUFMLENBQVc0SixLQUFYLEtBQXFCLEVBRGhCO0FBRWRBLHVCQUFLLEVBQUUsTUFBSzVKLEtBQUwsQ0FBVzRKO0FBRkosaUJBQWY7O0FBVG1CO0FBQUE7O0FBQUE7QUFBQSxxQkFhUixNQUFLekcsS0FBTCxDQUFXOEssT0FiSDtBQUFBO0FBQUE7QUFBQTs7QUFBQSxvQkFjWjNCLFNBQVMsQ0FBQzJCLE9BZEU7QUFBQTtBQUFBO0FBQUE7O0FBZWxCO0FBQ0Esc0JBQUs5TSxLQUFMLENBQVcrTSxPQUFYLENBQW1CQyxLQUFuQjs7QUFoQmtCO0FBQUE7O0FBQUE7QUFBQSxzQkFpQlBKLFNBQVMsQ0FBQ25FLEtBQVYsS0FBb0IsTUFBSzVKLEtBQUwsQ0FBVzRKLEtBakJ4QjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW1CWixNQUFLd0UsSUFBTCxFQW5CWTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQXhCQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQSxzTEFvRGQsWUFBTTtBQUNaLFlBQUs3SyxRQUFMLENBQWU7QUFBRTBLLGVBQU8sRUFBRTtBQUFYLE9BQWY7QUFDQSxLQXREb0I7O0FBQUEsd0xBNERaLFlBQU07QUFDZCxZQUFLMUssUUFBTCxDQUFlLFVBQUUrSSxTQUFGLEVBQWlCO0FBQy9CLGVBQU87QUFDTjJCLGlCQUFPLEVBQUUsS0FESDtBQUVOckUsZUFBSyxFQUFFMEMsU0FBUyxDQUFDK0I7QUFGWCxTQUFQO0FBSUEsT0FMRDtBQU1BLEtBbkVvQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDJFQXlFZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ04sb0JBQUs5SyxRQUFMLENBQWU7QUFBRXlLLHNCQUFNLEVBQUU7QUFBVixlQUFmOztBQURNLDZCQUVDTSxPQUZEO0FBQUE7QUFBQSxxQkFHQyxNQUFLbkwsS0FBTCxDQUFXa0gsUUFBWCxDQUFxQixNQUFLbEgsS0FBTCxDQUFXeUcsS0FBaEMsQ0FIRDs7QUFBQTtBQUFBOztBQUFBLDZCQUlFLFlBQU07QUFDYixzQkFBS3JHLFFBQUwsQ0FBZTtBQUNkMEsseUJBQU8sRUFBRSxNQUFLOUssS0FBTCxDQUFXeUcsS0FBWCxLQUFxQixFQURoQjtBQUVkb0Usd0JBQU0sRUFBRTtBQUZNLGlCQUFmO0FBSUEsZUFUSzs7QUFBQSw2REFFU08sT0FGVCxrQ0FJSkMsSUFKSTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQXpFYzs7QUFBQSwyTEEwRlQsVUFBRTlHLEtBQUYsRUFBYTtBQUN4QixVQUFLQSxLQUFLLENBQUNxRixPQUFOLEtBQWtCQywwREFBbEIsSUFBMkJ0RixLQUFLLENBQUNxRixPQUFOLEtBQWtCRSwwREFBbEQsRUFBMEQ7QUFDekR2RixhQUFLLENBQUMrRyxjQUFOO0FBQ0EvRyxhQUFLLENBQUNnSCxlQUFOOztBQUNBLGNBQUtDLElBQUw7QUFDQTtBQUNELEtBaEdvQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNkVBdUdOLGtCQUFRakgsS0FBUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsc0JBQ1RBLEtBQUssQ0FBQ3FGLE9BQU4sS0FBa0JDLDBEQURUO0FBQUE7QUFBQTtBQUFBOztBQUVidEYscUJBQUssQ0FBQytHLGNBQU47QUFDQS9HLHFCQUFLLENBQUNnSCxlQUFOO0FBSGE7QUFBQSx1QkFJUCxNQUFLTixJQUFMLEVBSk87O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBS1Asb0JBQUsxRyxLQUFLLENBQUNxRixPQUFOLEtBQWtCNkIsMkRBQXZCLEVBQWdDO0FBQ3RDbEgsdUJBQUssQ0FBQytHLGNBQU47QUFDQS9HLHVCQUFLLENBQUNnSCxlQUFOOztBQUNBLHdCQUFLckIsTUFBTDtBQUNBOztBQVRhO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BdkdNOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBLDRMQXdIUixVQUFFM0YsS0FBRixFQUFhO0FBQ3pCLFVBQ0NBLEtBQUssSUFDTEEsS0FBSyxDQUFDeUQsTUFETixJQUVBLE9BQU96RCxLQUFLLENBQUN5RCxNQUFOLENBQWF2QixLQUFwQixLQUE4QixXQUgvQixFQUlFO0FBQ0QsY0FBS3JHLFFBQUwsQ0FBZTtBQUFFcUcsZUFBSyxFQUFFbEMsS0FBSyxDQUFDeUQsTUFBTixDQUFhdkI7QUFBdEIsU0FBZjtBQUNBO0FBQ0QsS0FoSW9COztBQUFBLCtMQTZJTCxVQUNmL0gsTUFEZSxFQUVmK0gsS0FGZSxFQUdmdkksSUFIZSxFQUlmd04sU0FKZSxFQUtmM04sS0FMZSxFQU1mNE4sVUFOZSxFQU9mQyxXQVBlLEVBUVg7QUFDSixVQUFNNUMsVUFBVSxHQUFHLE9BQU8sTUFBS2hKLEtBQUwsQ0FBV3lHLEtBQWxCLEtBQTRCLFFBQTVCLElBQ25CLE9BQU8sTUFBS3pHLEtBQUwsQ0FBV3lHLEtBQWxCLEtBQTRCLFFBRFQsR0FFbEIsTUFBS3pHLEtBQUwsQ0FBV3lHLEtBRk8sR0FHbEIsRUFIRDtBQUlBLFVBQU16SCxTQUFTLEdBQUczQixrREFBVSxDQUMzQixpQkFEMkIsRUFFM0IsY0FGMkIsRUFHM0I7QUFDQyx1Q0FBK0JxTyxTQUFTLEtBQUs7QUFEOUMsT0FIMkIsQ0FBNUI7QUFPQSxVQUFNMU4sS0FBSyxHQUFHRSxJQUFJLEtBQUssVUFBVCxHQUNiLDBHQUNNeU4sVUFETjtBQUVDLFdBQUcsRUFBRyxNQUFLM04sS0FGWjtBQUdDLFVBQUUsRUFBR1UsTUFITjtBQUlDLGlCQUFTLEVBQUdNLFNBSmI7QUFLQyxjQUFNLEVBQUcsTUFBS2lNLElBTGY7QUFNQyxlQUFPLEVBQUcsTUFBS1ksVUFOaEI7QUFPQyxpQkFBUyxFQUFHLE1BQUtDLFlBUGxCO0FBUUMsb0JBQVksRUFBRzlDO0FBUmhCLFNBRGEsR0FZYix1R0FDTTJDLFVBRE47QUFFQyxXQUFHLEVBQUcsTUFBSzNOLEtBRlo7QUFHQyxVQUFFLEVBQUdVLE1BSE47QUFJQyxZQUFJLEVBQUdSLElBSlI7QUFLQyxpQkFBUyxFQUFHYyxTQUxiO0FBTUMsY0FBTSxFQUFHLE1BQUtpTSxJQU5mO0FBT0MsZUFBTyxFQUFHLE1BQUtZLFVBUGhCO0FBUUMsaUJBQVMsRUFBRyxNQUFLQyxZQVJsQjtBQVNDLG9CQUFZLEVBQUc5QztBQVRoQixTQVpEO0FBd0JBLGFBQU9qTCxLQUFLLEdBQ1gsb0JBQUMsNERBQUQsUUFDRyxNQUFLZ08sT0FBTCxDQUFjSCxXQUFkLENBREgsRUFFQztBQUNDLGVBQU8sRUFBR2xOLE1BRFg7QUFFQyxpQkFBUyxFQUFDO0FBRlgsU0FJR1gsS0FKSCxDQUZELEVBUUdDLEtBUkgsQ0FEVyxHQVdSQSxLQVhKO0FBWUEsS0FyTW9COztBQUFBLGtNQThNRixVQUFFZ08sY0FBRixFQUFrQkMsaUJBQWxCLEVBQXFDTCxXQUFyQyxFQUFzRDtBQUN4RSxVQUFNbkYsS0FBSyxHQUFHcEQsMERBQVUsQ0FBRTJJLGNBQUYsQ0FBVixHQUNiQSxjQUFjLENBQUUsTUFBS2hNLEtBQUwsQ0FBV3lHLEtBQWIsRUFBb0J3RixpQkFBcEIsQ0FERCxHQUViLE1BQUtqTSxLQUFMLENBQVd5RyxLQUZaO0FBR0EsYUFDQyxvQkFBQyw0REFBRCxRQUNHLE1BQUtzRixPQUFMLENBQWNILFdBQWQsQ0FESCxFQUVDO0FBQ0MsWUFBSSxFQUFDLFFBRE47QUFFQyxnQkFBUSxFQUFDLEdBRlY7QUFHQyxlQUFPLEVBQUcsTUFBS0osSUFIaEI7QUFJQyxlQUFPLEVBQUcsTUFBS0EsSUFKaEI7QUFLQyxpQkFBUyxFQUFHLE1BQUtVLFNBTGxCO0FBTUMsaUJBQVMsRUFBQywrQkFOWDtBQU9DLHNCQUFhak4sK0RBQUUsQ0FBRSxlQUFGLEVBQW1CLGdCQUFuQjtBQVBoQixTQVNHd0gsS0FUSCxDQUZELENBREQ7QUFnQkEsS0FsT29COztBQUFBLHlMQXdPWCxVQUFFbUYsV0FBRixFQUFtQjtBQUM1QixhQUNDLG9CQUFDLGdFQUFEO0FBQ0Msa0JBQVUsRUFBRyxNQUFLNUwsS0FBTCxDQUFXNkssTUFEekI7QUFFQyxzQkFBYyxFQUFHNUwsK0RBQUUsQ0FBRSxRQUFGLEVBQVksZ0JBQVosQ0FGcEI7QUFHQyxhQUFLLEVBQUcyTTtBQUhULFFBREQ7QUFPQSxLQWhQb0I7O0FBRXBCLFVBQUs1TixLQUFMLEdBQWFtTyxxRUFBUyxFQUF0QjtBQUNBLFVBQUtuTSxLQUFMLEdBQWE7QUFBRTZLLFlBQU0sRUFBRTtBQUFWLEtBQWI7QUFIb0I7QUFJcEI7O0FBOUJGO0FBQUE7QUFBQSx3Q0FnQ3FCO0FBQ25CLFdBQUt6SyxRQUFMLENBQ0M7QUFDQzBLLGVBQU8sRUFBRSxLQURWO0FBRUNJLGlCQUFTLEVBQUUsS0FBS3JPLEtBQUwsQ0FBVzRKLEtBRnZCO0FBR0NBLGFBQUssRUFBRSxLQUFLNUosS0FBTCxDQUFXNEosS0FIbkI7QUFJQ1MsZ0JBQVEsRUFBRSxLQUFLckssS0FBTCxDQUFXcUssUUFKdEI7QUFLQzJELGNBQU0sRUFBRTtBQUxULE9BREQ7QUFTQTtBQUVEOzs7Ozs7O0FBNUNEO0FBQUE7QUFBQSw2QkE0UVU7QUFBQSx3QkFXSixLQUFLaE8sS0FYRDtBQUFBLFVBRVA2QixNQUZPLGVBRVBBLE1BRk87QUFBQSxVQUdQK0gsS0FITyxlQUdQQSxLQUhPO0FBQUEsVUFJUHZJLElBSk8sZUFJUEEsSUFKTztBQUFBLFVBS1B3TixTQUxPLGVBS1BBLFNBTE87QUFBQSxVQU1QTSxjQU5PLGVBTVBBLGNBTk87QUFBQSxVQU9QQyxpQkFQTyxlQU9QQSxpQkFQTztBQUFBLFVBUVBMLFdBUk8sZUFRUEEsV0FSTztBQUFBLFVBU1A3TixLQVRPLGVBU1BBLEtBVE87QUFBQSxVQVVKNE4sVUFWSTs7QUFZUixhQUFPQSxVQUFVLENBQUN6RSxRQUFsQjtBQUNBLGFBQU8sS0FBS2xILEtBQUwsQ0FBVzhLLE9BQVgsR0FDTixLQUFLc0IsYUFBTCxDQUNDMU4sTUFERCxFQUVDK0gsS0FGRCxFQUdDdkksSUFIRCxFQUlDd04sU0FKRCxFQUtDM04sS0FMRCxFQU1DNE4sVUFORCxFQU9DQyxXQVBELENBRE0sR0FVTixLQUFLUyxnQkFBTCxDQUNDTCxjQURELEVBRUNDLGlCQUZELEVBR0NMLFdBSEQsQ0FWRDtBQWVBO0FBeFNGOztBQUFBO0FBQUEsRUFBcUNyTyw2REFBckM7OzhFQUFhb04sZSxlQUNPO0FBQ2xCak0sUUFBTSxFQUFFbEIsa0RBQVMsQ0FBQ0csTUFBVixDQUFpQnlCLFVBRFA7QUFFbEI4SCxVQUFRLEVBQUUxSixrREFBUyxDQUFDMkIsSUFBVixDQUFlQyxVQUZQO0FBR2xCcUgsT0FBSyxFQUFFakosa0RBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDM0JwSSxrREFBUyxDQUFDcUksTUFEaUIsRUFFM0JySSxrREFBUyxDQUFDZ0YsTUFGaUIsRUFHM0JoRixrREFBUyxDQUFDRyxNQUhpQixDQUFyQixFQUlIeUIsVUFQYztBQVFsQmxCLE1BQUksRUFBRVYsa0RBQVMsQ0FBQ0csTUFSRTtBQVNsQkksT0FBSyxFQUFFUCxrREFBUyxDQUFDRyxNQVRDO0FBVWxCK04sV0FBUyxFQUFFbE8sa0RBQVMsQ0FBQ0csTUFWSDtBQVdsQnFPLGdCQUFjLEVBQUV4TyxrREFBUyxDQUFDMkIsSUFYUjtBQVlsQjhNLG1CQUFpQixFQUFFek8sa0RBQVMsQ0FBQ2dGLE1BWlg7QUFhbEJvSixhQUFXLEVBQUVwTyxrREFBUyxDQUFDZ0Y7QUFiTCxDOzs4RUFEUG1JLGUsa0JBaUJVO0FBQ3JCek0sTUFBSSxFQUFFLEVBRGU7QUFFckJ3TixXQUFTLEVBQUUsUUFGVTtBQUdyQk0sZ0JBQWMsRUFBRSxJQUhLO0FBSXJCQyxtQkFBaUIsRUFBRSxFQUpFO0FBS3JCTCxhQUFXLEVBQUUsRUFMUTtBQU1yQjdOLE9BQUssRUFBRTtBQU5jLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVDdkI7OztBQUdBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWdCTyxJQUFNdU8sVUFBYjtBQUFBO0FBQUE7QUFBQTs7QUFnQkMsc0JBQWF6UCxLQUFiLEVBQXFCO0FBQUE7O0FBQUE7O0FBQ3BCLDhNQUFPQSxLQUFQOztBQURvQiw4TEFlTCxVQUFFMEgsS0FBRixFQUFhO0FBQzVCLFVBQUtBLEtBQUssQ0FBQ3lELE1BQU4sSUFDSnpELEtBQUssQ0FBQ3lELE1BQU4sQ0FBYTlLLEVBRFQsSUFFSnFILEtBQUssQ0FBQ3lELE1BQU4sQ0FBYTlCLE9BQWIsS0FBeUJQLFNBRjFCLEVBR0U7QUFDRCxZQUFNTyxPQUFPLEdBQUdILHNGQUFrQixDQUNqQyxNQUFLbEosS0FBTCxDQUFXNkIsTUFEc0IsRUFFakMsTUFBSzdCLEtBQUwsQ0FBV29KLE9BRnNCLEVBR2pDLE1BQUtwSixLQUFMLENBQVdrSyxZQUhzQixFQUlqQyxLQUppQyxDQUFsQztBQU1BYixlQUFPLENBQUUzQixLQUFLLENBQUN5RCxNQUFOLENBQWE5SyxFQUFmLENBQVAsR0FBNkJxSCxLQUFLLENBQUN5RCxNQUFOLENBQWE5QixPQUExQzs7QUFDQSxjQUFLOUYsUUFBTCxDQUFlO0FBQUU4RixpQkFBTyxFQUFQQTtBQUFGLFNBQWY7QUFDQTtBQUNELEtBN0JvQjs7QUFFcEIsVUFBS2xHLEtBQUwsR0FBYTtBQUNaa0csYUFBTyxFQUFFSCxzRkFBa0IsQ0FDMUJsSixLQUFLLENBQUM2QixNQURvQixFQUUxQjdCLEtBQUssQ0FBQ29KLE9BRm9CLEVBRzFCcEosS0FBSyxDQUFDa0ssWUFIb0I7QUFEZixLQUFiO0FBRm9CO0FBU3BCO0FBRUQ7Ozs7OztBQTNCRDtBQUFBO0FBQUEsNkJBK0NVO0FBQUEsd0JBVUosS0FBS2xLLEtBVkQ7QUFBQSxVQUVQc0IsSUFGTyxlQUVQQSxJQUZPO0FBQUEsVUFHUE8sTUFITyxlQUdQQSxNQUhPO0FBQUEsVUFJUE0sU0FKTyxlQUlQQSxTQUpPO0FBQUEsVUFLUGlILE9BTE8sZUFLUEEsT0FMTztBQUFBLFVBTVBqQixVQU5PLGVBTVBBLFVBTk87QUFBQSw2Q0FPUGtELFFBUE87QUFBQSxVQU9QQSxRQVBPLHFDQU9JLElBUEo7QUFBQSw4Q0FRUEMsVUFSTztBQUFBLFVBUVBBLFVBUk8sc0NBUU0sRUFSTjtBQUFBLFVBU0o1SixVQVRJOztBQVlSLFVBQU1zSSxVQUFVLEdBQUdxQixRQUFRLEdBQzFCLGlCQUQwQixHQUUxQix5QkFBeUJmLGdGQUFlLENBQUVsQixPQUFGLENBRnpDO0FBR0EsVUFBSW1DLFFBQVEsR0FBR0YsUUFBUSxHQUFHLFdBQUgsR0FBaUIsbUJBQXhDO0FBQ0FFLGNBQVEsR0FBR0QsVUFBVSxhQUNoQkMsUUFEZ0IsNkJBQ2FELFVBRGIsSUFFcEJDLFFBRkQ7QUFHQSxhQUNDO0FBQUssaUJBQVMsRUFBR0E7QUFBakIsU0FDQyxvQkFBQyxpRUFBRDtBQUNDLFlBQUksRUFBQyxPQUROO0FBRUMsWUFBSSxFQUFHakssSUFGUjtBQUdDLG9CQUFZLEVBQUcsS0FBSzZCLEtBQUwsQ0FBV2tHLE9BSDNCO0FBSUMsY0FBTSxFQUFHeEgsTUFKVjtBQUtDLGlCQUFTLEVBQUdNLFNBTGI7QUFNQyxrQkFBVSxFQUFHNkgsVUFOZDtBQU9DLGVBQU8sRUFBR1osT0FQWDtBQVFDLGVBQU8sRUFBRyxLQUFLb0MsYUFSaEI7QUFTQyxrQkFBVSxFQUFHckQ7QUFUZCxTQVVNekcsVUFWTixFQURELENBREQ7QUFnQkE7QUFsRkY7O0FBQUE7QUFBQSxFQUFnQ2hCLDREQUFoQzs7NkVBQWErTyxVLGVBQ087QUFDbEI1TixRQUFNLEVBQUVsQixrREFBUyxDQUFDRyxNQUFWLENBQWlCeUIsVUFEUDtBQUVsQkosV0FBUyxFQUFFeEIsa0RBQVMsQ0FBQ0csTUFGSDtBQUdsQjhJLE9BQUssRUFBRWpKLGtEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQzNCcEksa0RBQVMsQ0FBQ3FJLE1BRGlCLEVBRTNCckksa0RBQVMsQ0FBQ0csTUFGaUIsQ0FBckIsQ0FIVztBQU9sQnNJLFNBQU8sRUFBRXpJLGtEQUFTLENBQUNFLEtBUEQ7QUFRbEJ3SixVQUFRLEVBQUUxSixrREFBUyxDQUFDMkIsSUFSRjtBQVNsQitJLFVBQVEsRUFBRTFLLGtEQUFTLENBQUNDLElBVEY7QUFVbEIwSyxZQUFVLEVBQUUzSyxrREFBUyxDQUFDRyxNQVZKO0FBV2xCcUgsWUFBVSxFQUFFeEgsa0RBQVMsQ0FBQ0csTUFYSjtBQVlsQm1KLFNBQU8sRUFBRXRKLGtEQUFTLENBQUNnRjtBQVpELEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlCcEI7OztBQUdBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7OztBQWFPLElBQU0rSixXQUFXLEdBQUcsU0FBZEEsV0FBYyxPQVFwQjtBQUFBLE1BUE43TixNQU9NLFFBUE5BLE1BT007QUFBQSxNQU5OTSxTQU1NLFFBTk5BLFNBTU07QUFBQSxNQUxOaUgsT0FLTSxRQUxOQSxPQUtNO0FBQUEsTUFKTmpCLFVBSU0sUUFKTkEsVUFJTTtBQUFBLE1BSE44QixPQUdNLFFBSE5BLE9BR007QUFBQSw2QkFGTnFCLFVBRU07QUFBQSxNQUZOQSxVQUVNLGdDQUZPLEVBRVA7QUFBQSxNQURINUosVUFDRzs7QUFDTjBILFNBQU8sR0FBRzNILHNEQUFPLENBQUUySCxPQUFGLENBQVAsR0FBcUJBLE9BQXJCLEdBQStCLEVBQXpDO0FBQ0EsTUFBTXVHLFVBQVUsR0FBR3ZHLE9BQU8sQ0FBQ2hKLEdBQVIsQ0FBYSxVQUFFbUosTUFBRixFQUFVQyxLQUFWO0FBQUEsV0FDL0I7QUFBUSxTQUFHLEVBQUdBLEtBQWQ7QUFBc0IsV0FBSyxFQUFHRCxNQUFNLENBQUNLO0FBQXJDLE9BQ0dMLE1BQU0sQ0FBQ3JJLEtBRFYsQ0FEK0I7QUFBQSxHQUFiLENBQW5CO0FBS0FpQixXQUFTLEdBQUdtSixVQUFVLGFBQ2pCbkosU0FEaUIsNkJBQ2FtSixVQURiLElBRXJCbkosU0FGRDtBQUdBLFNBQ0Msb0JBQUMsc0RBQUQ7QUFDQyxhQUFTLEVBQUMsUUFEWDtBQUVDLE1BQUUsRUFBR04sTUFGTjtBQUdDLGFBQVMsWUFBT00sU0FBUCxrQkFIVjtBQUlDLHdCQUFtQmdHO0FBSnBCLEtBS004QixPQUxOLEVBTU12SSxVQU5OLEdBUUdpTyxVQVJILENBREQ7QUFZQSxDQTlCTTtBQWdDUEQsV0FBVyxDQUFDck4sU0FBWixHQUF3QjtBQUN2QlIsUUFBTSxFQUFFbEIsaURBQVMsQ0FBQ0csTUFBVixDQUFpQnlCLFVBREY7QUFFdkJKLFdBQVMsRUFBRXhCLGlEQUFTLENBQUNHLE1BRkU7QUFHdkI4SSxPQUFLLEVBQUVqSixpREFBUyxDQUFDb0ksU0FBVixDQUFxQixDQUMzQnBJLGlEQUFTLENBQUNxSSxNQURpQixFQUUzQnJJLGlEQUFTLENBQUNHLE1BRmlCLENBQXJCLENBSGdCO0FBT3ZCc0ksU0FBTyxFQUFFekksaURBQVMsQ0FBQ0UsS0FQSTtBQVF2QndKLFVBQVEsRUFBRTFKLGlEQUFTLENBQUMyQixJQVJHO0FBU3ZCNkYsWUFBVSxFQUFFeEgsaURBQVMsQ0FBQ0csTUFUQztBQVV2Qm1KLFNBQU8sRUFBRXRKLGlEQUFTLENBQUNnRixNQVZJO0FBV3ZCMkYsWUFBVSxFQUFFM0ssaURBQVMsQ0FBQ0c7QUFYQyxDQUF4QixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BEQTs7O0FBR0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFhTyxJQUFNOE8sU0FBUyxHQUFHLFNBQVpBLFNBQVksT0FRbEI7QUFBQSx1QkFQTnZPLElBT007QUFBQSxNQVBOQSxJQU9NLDBCQVBDLE1BT0Q7QUFBQSxNQU5OUSxNQU1NLFFBTk5BLE1BTU07QUFBQSxNQUxOTSxTQUtNLFFBTE5BLFNBS007QUFBQSxNQUpOZ0csVUFJTSxRQUpOQSxVQUlNO0FBQUEsTUFITjhCLE9BR00sUUFITkEsT0FHTTtBQUFBLDZCQUZOcUIsVUFFTTtBQUFBLE1BRk5BLFVBRU0sZ0NBRk8sRUFFUDtBQUFBLE1BREg1SixVQUNHOztBQUNOUyxXQUFTLEdBQUdtSixVQUFVLGFBQ2pCbkosU0FEaUIsNkJBQ2FtSixVQURiLElBRXJCbkosU0FGRDtBQUdBLFNBQ0Msb0JBQUMsc0RBQUQ7QUFDQyxhQUFTLEVBQUMsT0FEWDtBQUVDLFFBQUksRUFBR2QsSUFGUjtBQUdDLE1BQUUsRUFBR1EsTUFITjtBQUlDLGFBQVMsWUFBT00sU0FBUCxrQkFKVjtBQUtDLHdCQUFtQmdHO0FBTHBCLEtBTU04QixPQU5OLEVBT012SSxVQVBOLEVBREQ7QUFXQSxDQXZCTTtBQXlCUGtPLFNBQVMsQ0FBQ3ZOLFNBQVYsR0FBc0I7QUFDckJoQixNQUFJLEVBQUVWLGlEQUFTLENBQUMrRSxLQUFWLENBQWlCcUMsc0VBQWpCLENBRGU7QUFFckJsRyxRQUFNLEVBQUVsQixpREFBUyxDQUFDRyxNQUFWLENBQWlCeUIsVUFGSjtBQUdyQkosV0FBUyxFQUFFeEIsaURBQVMsQ0FBQ0csTUFIQTtBQUlyQnVKLFVBQVEsRUFBRTFKLGlEQUFTLENBQUMyQixJQUpDO0FBS3JCNkYsWUFBVSxFQUFFeEgsaURBQVMsQ0FBQ0csTUFMRDtBQU1yQm1KLFNBQU8sRUFBRXRKLGlEQUFTLENBQUNnRixNQU5FO0FBT3JCMkYsWUFBVSxFQUFFM0ssaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDaENwSSxpREFBUyxDQUFDcUksTUFEc0IsRUFFaENySSxpREFBUyxDQUFDRyxNQUZzQixDQUFyQjtBQVBTLENBQXRCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqREE7OztBQUdBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7OztBQVlPLElBQU0rTyxRQUFRLEdBQUcsU0FBWEEsUUFBVyxPQU9qQjtBQUFBLE1BTk5oTyxNQU1NLFFBTk5BLE1BTU07QUFBQSxNQUxOTSxTQUtNLFFBTE5BLFNBS007QUFBQSxNQUpOZ0csVUFJTSxRQUpOQSxVQUlNO0FBQUEsTUFITjhCLE9BR00sUUFITkEsT0FHTTtBQUFBLDZCQUZOcUIsVUFFTTtBQUFBLE1BRk5BLFVBRU0sZ0NBRk8sRUFFUDtBQUFBLE1BREg1SixVQUNHOztBQUNOUyxXQUFTLEdBQUdtSixVQUFVLGFBQ2pCbkosU0FEaUIsNkJBQ2FtSixVQURiLElBRXJCbkosU0FGRDtBQUdBLFNBQ0Msb0JBQUMsc0RBQUQ7QUFDQyxhQUFTLEVBQUMsVUFEWDtBQUVDLE1BQUUsRUFBR04sTUFGTjtBQUdDLGFBQVMsWUFBT00sU0FBUCxrQkFIVjtBQUlDLHdCQUFtQmdHO0FBSnBCLEtBS004QixPQUxOLEVBTU12SSxVQU5OLEVBREQ7QUFVQSxDQXJCTTtBQXVCUG1PLFFBQVEsQ0FBQ3hOLFNBQVQsR0FBcUI7QUFDcEJSLFFBQU0sRUFBRWxCLGlEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQURMO0FBRXBCSixXQUFTLEVBQUV4QixpREFBUyxDQUFDRyxNQUZEO0FBR3BCOEksT0FBSyxFQUFFakosaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDM0JwSSxpREFBUyxDQUFDcUksTUFEaUIsRUFFM0JySSxpREFBUyxDQUFDRyxNQUZpQixDQUFyQixDQUhhO0FBT3BCdUosVUFBUSxFQUFFMUosaURBQVMsQ0FBQzJCLElBUEE7QUFRcEI2RixZQUFVLEVBQUV4SCxpREFBUyxDQUFDRyxNQVJGO0FBU3BCbUosU0FBTyxFQUFFdEosaURBQVMsQ0FBQ2dGLE1BVEM7QUFVcEIyRixZQUFVLEVBQUUzSyxpREFBUyxDQUFDRztBQVZGLENBQXJCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3pDQTs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBLElBQU1nUCxNQUFNLEdBQUcsU0FBVEEsTUFBUyxPQVdSO0FBQUEsTUFWTjNPLEtBVU0sUUFWTkEsS0FVTTtBQUFBLE1BVE5rSSxPQVNNLFFBVE5BLE9BU007QUFBQSxNQVJOeEgsTUFRTSxRQVJOQSxNQVFNO0FBQUEsTUFQTk0sU0FPTSxRQVBOQSxTQU9NO0FBQUEsTUFOTmdHLFVBTU0sUUFOTkEsVUFNTTtBQUFBLE1BTE40SCxpQkFLTSxRQUxOQSxpQkFLTTtBQUFBLE1BSk5DLG9CQUlNLFFBSk5BLG9CQUlNO0FBQUEsTUFITi9GLE9BR00sUUFITkEsT0FHTTtBQUFBLHlCQUZOZ0csTUFFTTtBQUFBLE1BRk5BLE1BRU0sNEJBRkcsUUFFSDtBQUFBLE1BREh2TyxVQUNHOztBQUNOUyxXQUFTLEdBQUdBLFNBQVMsYUFDaEJBLFNBRGdCLHdCQUVwQixpQkFGRDtBQUdBLFNBQU84TixNQUFNLEtBQUssUUFBWCxHQUNOO0FBQUssYUFBUyxZQUFPOU4sU0FBUDtBQUFkLEtBQ0Msb0JBQUMsbUVBQUQ7QUFDQyxXQUFPLEVBQUdrSCxPQURYO0FBRUMsY0FBVSxFQUFHeEgsTUFGZDtBQUdDLHdCQUFtQnNHLFVBSHBCO0FBSUMsU0FBSyxFQUFHa0IsT0FBTyxHQUFHMEcsaUJBQUgsR0FBdUJDLG9CQUp2QztBQUtDLFlBQVEsRUFBRzdPLEtBQUssQ0FBQ2tKO0FBTGxCLEtBTU1KLE9BTk4sRUFPTXZJLFVBUE4sRUFERCxDQURNLEdBYU47QUFBSyxhQUFTLFlBQU9TLFNBQVA7QUFBZCxLQUNDLG9CQUFDLHFFQUFEO0FBQ0MsV0FBTyxFQUFHa0gsT0FEWDtBQUVDLGNBQVUsRUFBR3hILE1BRmQ7QUFHQyx3QkFBbUJzRyxVQUhwQjtBQUlDLFNBQUssRUFBR2tCLE9BQU8sR0FBRzBHLGlCQUFILEdBQXVCQyxvQkFKdkM7QUFLQyxZQUFRLEVBQUc3TyxLQUFLLENBQUNrSjtBQUxsQixLQU1NSixPQU5OLEVBT012SSxVQVBOLEVBREQsQ0FiRDtBQXlCQSxDQXhDRDs7QUEwQ0FvTyxNQUFNLENBQUN6TixTQUFQLEdBQW1CO0FBQ2xCZ0gsU0FBTyxFQUFFMUksaURBQVMsQ0FBQ0MsSUFBVixDQUFlMkIsVUFETjtBQUVsQlYsUUFBTSxFQUFFbEIsaURBQVMsQ0FBQ0csTUFBVixDQUFpQnlCLFVBRlA7QUFHbEJKLFdBQVMsRUFBRXhCLGlEQUFTLENBQUNHLE1BSEg7QUFJbEJ1SixVQUFRLEVBQUUxSixpREFBUyxDQUFDMkIsSUFKRjtBQUtsQjZGLFlBQVUsRUFBRXhILGlEQUFTLENBQUNHLE1BTEo7QUFNbEJpUCxtQkFBaUIsRUFBRXBQLGlEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQU5sQjtBQU9sQnlOLHNCQUFvQixFQUFFclAsaURBQVMsQ0FBQ0csTUFBVixDQUFpQnlCLFVBUHJCO0FBUWxCMEgsU0FBTyxFQUFFdEosaURBQVMsQ0FBQ2dGO0FBUkQsQ0FBbkI7QUFXQTs7Ozs7O0FBS08sSUFBTXVLLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUV4TyxVQUFGLEVBQWtCO0FBQzVDLFNBQ0Msb0JBQUMsc0RBQUQ7QUFDQyxhQUFTLEVBQUdvTztBQURiLEtBRU1wTyxVQUZOLEVBREQ7QUFNQSxDQVBNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqRlA7OztBQUdBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7OztJQVlNVCxhOzs7Ozs7Ozs7Ozs7OzZCQUNJO0FBQ1IsYUFDQyxvQkFBQyxpREFBRCxRQUVFa1AsMkRBQVEsQ0FBQy9QLEdBQVQsQ0FBYyxLQUFLSixLQUFMLENBQVcwQyxRQUF6QixFQUFtQyxVQUFFME4sS0FBRixFQUFTNUcsS0FBVCxFQUFvQjtBQUN0REEsYUFBSzs7QUFDTCxZQUFLQSxLQUFLLEdBQUcsQ0FBUixLQUFjLENBQW5CLEVBQXVCO0FBQ3RCLGNBQU02RyxRQUFPLEdBQUdELEtBQUssQ0FBQ3BRLEtBQU4sQ0FBWXNRLFlBQVosR0FDZkYsS0FBSyxDQUFDcFEsS0FBTixDQUFZc1EsWUFERyxHQUVmLENBRkQ7O0FBR0EsaUJBQ0Msb0JBQUMsb0RBQUQ7QUFBWSxpQkFBSyxFQUFDLE9BQWxCO0FBQTBCLG1CQUFPLEVBQUdEO0FBQXBDLGFBQ0dELEtBREgsQ0FERDtBQUtBOztBQUNELFlBQU1DLE9BQU8sR0FBR0QsS0FBSyxDQUFDcFEsS0FBTixDQUFZcVEsT0FBWixHQUNmRCxLQUFLLENBQUNwUSxLQUFOLENBQVlxUSxPQURHLEdBRWYsQ0FGRDtBQUdBLGVBQ0Msb0JBQUMsb0RBQUQ7QUFBWSxpQkFBTyxFQUFHQTtBQUF0QixXQUNHRCxLQURILENBREQ7QUFLQSxPQXBCRCxDQUZGLENBREQ7QUEyQkE7Ozs7RUE3QjBCMVAsNEQ7O0FBZ0M1Qk8sYUFBYSxDQUFDb0IsU0FBZCxHQUEwQjtBQUN6QkssVUFBUSxFQUFFL0IsaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDOUJwSSxpREFBUyxDQUFDZ0YsTUFEb0IsRUFFOUJoRixpREFBUyxDQUFDc0ksT0FBVixDQUFtQnRJLGlEQUFTLENBQUNnRixNQUE3QixDQUY4QixDQUFyQixDQURlO0FBS3pCMEssU0FBTyxFQUFFMVAsaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDN0JwSSxpREFBUyxDQUFDcUksTUFEbUIsRUFFN0JySSxpREFBUyxDQUFDRyxNQUZtQixDQUFyQjtBQUxnQixDQUExQjtBQVdlRyw0RUFBZixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkVBO0FBRUE7Ozs7Ozs7Ozs7Ozs7OztBQWNBLElBQU1zUCxVQUFVLEdBQUcsU0FBYkEsVUFBYSxPQU9aO0FBQUEsTUFOTjdOLFFBTU0sUUFOTkEsUUFNTTtBQUFBLE1BTE5QLFNBS00sUUFMTkEsU0FLTTtBQUFBLDBCQUpOa08sT0FJTTtBQUFBLE1BSk5BLE9BSU0sNkJBSkksQ0FJSjtBQUFBLHlCQUhORyxNQUdNO0FBQUEsTUFITkEsTUFHTSw0QkFIRyxDQUdIO0FBQUEsd0JBRk5DLEtBRU07QUFBQSxNQUZOQSxLQUVNLDJCQUZFLE1BRUY7QUFBQSxNQURIQyxlQUNHOztBQUNOLE1BQU12UCxLQUFLLEdBQUd1QixRQUFRLEdBQUdBLFFBQUgsR0FBYyxJQUFwQzs7QUFDQSxNQUNDLENBQUV2QixLQUFGLElBQ0VBLEtBQUssQ0FBQ0UsSUFBTixJQUFjRixLQUFLLENBQUNFLElBQU4sQ0FBV0MsSUFBekIsSUFBaUNILEtBQUssQ0FBQ0UsSUFBTixDQUFXQyxJQUFYLEtBQW9CLGFBRnhELEVBR0U7QUFDRCxXQUFPSCxLQUFQO0FBQ0E7O0FBQ0RnQixXQUFTLEdBQUdBLFNBQVMsYUFBT0EsU0FBUCxTQUF1QixFQUE1QztBQUNBQSxXQUFTLEdBQUdxTyxNQUFNLGFBQ2JyTyxTQURhLG9CQUNRa08sT0FEUix3QkFDK0JHLE1BRC9CLDhCQUVick8sU0FGYSxvQkFFUWtPLE9BRlIsaUJBQWxCO0FBR0FsTyxXQUFTLElBQUlzTyxLQUFLLEtBQUssT0FBVixHQUFvQixnQkFBcEIsR0FBdUMsRUFBcEQ7QUFDQSxTQUNDO0FBQUssYUFBUyxFQUFHdE87QUFBakIsS0FBa0N1TyxlQUFsQyxHQUNHdlAsS0FESCxDQUREO0FBS0EsQ0F6QkQ7O0FBMkJBb1AsVUFBVSxDQUFDbE8sU0FBWCxHQUF1QjtBQUN0QkssVUFBUSxFQUFFL0IsaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDOUJwSSxpREFBUyxDQUFDZ0YsTUFEb0IsRUFFOUJoRixpREFBUyxDQUFDc0ksT0FBVixDQUFtQnRJLGlEQUFTLENBQUNnRixNQUE3QixDQUY4QixDQUFyQixDQURZO0FBS3RCMEssU0FBTyxFQUFFMVAsaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDN0JwSSxpREFBUyxDQUFDcUksTUFEbUIsRUFFN0JySSxpREFBUyxDQUFDRyxNQUZtQixDQUFyQixDQUxhO0FBU3RCMFAsUUFBTSxFQUFFN1AsaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDNUJwSSxpREFBUyxDQUFDcUksTUFEa0IsRUFFNUJySSxpREFBUyxDQUFDRyxNQUZrQixDQUFyQixDQVRjO0FBYXRCMlAsT0FBSyxFQUFFOVAsaURBQVMsQ0FBQytFLEtBQVYsQ0FBaUIsQ0FBRSxNQUFGLEVBQVUsT0FBVixDQUFqQjtBQWJlLENBQXZCO0FBZ0JlNksseUVBQWYsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0RBOzs7QUFHQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7O0lBVU1JLFE7Ozs7O0FBQ0wsb0JBQWEzUSxLQUFiLEVBQXFCO0FBQUE7O0FBQUE7O0FBQ3BCLDRNQUFPQSxLQUFQOztBQURvQix3TEFPWCxZQUFNO0FBQ2YsWUFBS3VELFFBQUwsQ0FBZSxVQUFFK0ksU0FBRjtBQUFBLGVBQW1CO0FBQUVwSSxpQkFBTyxFQUFFLENBQUVvSSxTQUFTLENBQUNwSTtBQUF2QixTQUFuQjtBQUFBLE9BQWY7QUFDQSxLQVRvQjs7QUFFcEIsVUFBS2YsS0FBTCxHQUFhO0FBQ1plLGFBQU8sRUFBRTtBQURHLEtBQWI7QUFGb0I7QUFLcEI7Ozs7NkJBTVE7QUFBQSx3QkFRSixLQUFLbEUsS0FSRDtBQUFBLFVBRVA2RCxRQUZPLGVBRVBBLFFBRk87QUFBQSw2Q0FHUEMsUUFITztBQUFBLFVBR1BBLFFBSE8scUNBR0ksRUFISjtBQUFBLDhDQUlQOE0sV0FKTztBQUFBLFVBSVBBLFdBSk8sc0NBSU8sSUFKUDtBQUFBLDRDQUtQUCxPQUxPO0FBQUEsVUFLUEEsT0FMTyxvQ0FLRyxDQUxIO0FBQUEsMkNBTVBHLE1BTk87QUFBQSxVQU1QQSxNQU5PLG1DQU1FLENBTkY7QUFBQSw4Q0FPUHhNLFlBUE87QUFBQSxVQU9QQSxZQVBPLHNDQU9RLEVBUFI7QUFBQSxrQ0FTaUIsS0FBS2hFLEtBVHRCLENBU0ZtQyxTQVRFO0FBQUEsVUFTRkEsU0FURSxzQ0FTVSxFQVRWO0FBVVJBLGVBQVMsR0FBR0EsU0FBUyxLQUFLLEVBQWQsYUFDUEEsU0FETyx5QkFFWCxrQkFGRDtBQUdBQSxlQUFTLEdBQUcsS0FBS2dCLEtBQUwsQ0FBV2UsT0FBWCxhQUNQL0IsU0FETyxrQkFFWEEsU0FGRDtBQUdBQSxlQUFTLEdBQUd5TyxXQUFXLGFBQ2xCek8sU0FEa0IsdUJBRXRCQSxTQUZEO0FBR0EsYUFBTzBCLFFBQVEsR0FDZCxvQkFBQyxpREFBRDtBQUFTLGlCQUFTLEVBQUcxQjtBQUFyQixTQUNDLG9CQUFDLG9EQUFEO0FBQVksZUFBTyxFQUFHa08sT0FBdEI7QUFBZ0MsY0FBTSxFQUFHRztBQUF6QyxTQUNDLG9CQUFDLDZEQUFEO0FBQ0MsZ0JBQVEsRUFBRzNNLFFBRFo7QUFFQyxvQkFBWSxFQUFHRyxZQUZoQjtBQUdDLGdCQUFRLEVBQUdGLFFBSFo7QUFJQyxpQkFBUyxFQUFHOE0sV0FBVyxHQUFHLEtBQUsxTSxPQUFSLEdBQWtCO0FBSjFDLFFBREQsQ0FERCxDQURjLEdBV1gsSUFYSjtBQVlBOzs7O0VBM0NxQnhELDREOztBQThDUmlRLHVFQUFmLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwRUE7QUFFQTs7Ozs7Ozs7Ozs7QUFVQSxJQUFNRSxPQUFPLEdBQUcsU0FBVkEsT0FBVSxPQUFvQztBQUFBLE1BQWhDbk8sUUFBZ0MsUUFBaENBLFFBQWdDO0FBQUEsNEJBQXRCUCxTQUFzQjtBQUFBLE1BQXRCQSxTQUFzQiwrQkFBVixFQUFVO0FBQ25EQSxXQUFTLEdBQUdBLFNBQVMsYUFBT0EsU0FBUCxvQkFBa0MsYUFBdkQ7QUFDQSxTQUNDO0FBQUssYUFBUyxFQUFHQTtBQUFqQixLQUNHTyxRQURILENBREQ7QUFLQSxDQVBEOztBQVNBbU8sT0FBTyxDQUFDeE8sU0FBUixHQUFvQjtBQUNuQkssVUFBUSxFQUFFL0IsaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDOUJwSSxpREFBUyxDQUFDZ0YsTUFEb0IsRUFFOUJoRixpREFBUyxDQUFDc0ksT0FBVixDQUFtQnRJLGlEQUFTLENBQUNnRixNQUE3QixDQUY4QixDQUFyQixDQURTO0FBS25CeEQsV0FBUyxFQUFFeEIsaURBQVMsQ0FBQ0c7QUFMRixDQUFwQjtBQVFlK1Asc0VBQWYsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN0JBOzs7QUFHQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7SUFZTUMscUI7Ozs7Ozs7Ozs7Ozs7NkJBQ0k7QUFBQSx3QkFNSixLQUFLOVEsS0FORDtBQUFBLFVBRVB3SCxZQUZPLGVBRVBBLFlBRk87QUFBQSw4Q0FHUEksWUFITztBQUFBLFVBR1BBLFlBSE8sc0NBR1EsSUFIUjtBQUFBLDRDQUlQeUksT0FKTztBQUFBLFVBSVBBLE9BSk8sb0NBSUcsRUFKSDtBQUFBLDJDQUtQRyxNQUxPO0FBQUEsVUFLUEEsTUFMTyxtQ0FLRSxDQUxGO0FBQUEsVUFPRnJPLFNBUEUsR0FPWSxLQUFLbkMsS0FQakIsQ0FPRm1DLFNBUEU7QUFRUkEsZUFBUyxHQUFHQSxTQUFTLGFBQ2hCQSxTQURnQix3Q0FFcEIsaUNBRkQ7QUFHQSxhQUNDLG9CQUFDLHFEQUFEO0FBQWEsaUJBQVMsRUFBR0E7QUFBekIsU0FDQyxvQkFBQyxpREFBRDtBQUFTLGlCQUFTLEVBQUc7QUFBckIsU0FDQyxvQkFBQyxvREFBRDtBQUFZLGVBQU8sRUFBR2tPLE9BQXRCO0FBQWdDLGNBQU0sRUFBR0c7QUFBekMsU0FDR2hKLFlBREgsRUFFR0ksWUFGSCxDQURELENBREQsQ0FERDtBQVVBOzs7O0VBdEJrQ2xILDREOztBQXlCckJvUSxvRkFBZixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakRBOzs7QUFHQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7OztBQVdBLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFjLE9BQWlEO0FBQUEsTUFBN0NyTyxRQUE2QyxRQUE3Q0EsUUFBNkM7QUFBQSx5QkFBbkNiLE1BQW1DO0FBQUEsTUFBbkNBLE1BQW1DLDRCQUExQixFQUEwQjtBQUFBLDRCQUF0Qk0sU0FBc0I7QUFBQSxNQUF0QkEsU0FBc0IsK0JBQVYsRUFBVTtBQUNwRUEsV0FBUyxHQUFHQSxTQUFTLGFBQ2hCQSxTQURnQixpREFFcEIsMENBRkQ7QUFHQSxTQUNDO0FBQUssTUFBRSxFQUFHTixNQUFWO0FBQW1CLGFBQVMsRUFBR007QUFBL0IsS0FDQztBQUFLLGFBQVMsRUFBQztBQUFmLEtBRUVnTywyREFBUSxDQUFDL1AsR0FBVCxDQUFjc0MsUUFBZCxFQUF3QixVQUFFME4sS0FBRixFQUFTNUcsS0FBVCxFQUFvQjtBQUMzQyxXQUNDLG9CQUFDLDJEQUFEO0FBQ0MsU0FBRyxFQUFHQSxLQURQO0FBRUMsaUJBQVcsRUFBRzRHLEtBRmY7QUFHQyxtQkFBYSxFQUFHblAsd0RBQWFBO0FBSDlCLE1BREQ7QUFPQSxHQVJELENBRkYsQ0FERCxDQUREO0FBaUJBLENBckJEOztBQXVCQThQLFdBQVcsQ0FBQzFPLFNBQVosR0FBd0I7QUFDdkJLLFVBQVEsRUFBRS9CLGlEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQzlCcEksaURBQVMsQ0FBQ2dGLE1BRG9CLEVBRTlCaEYsaURBQVMsQ0FBQ3NJLE9BQVYsQ0FBbUJ0SSxpREFBUyxDQUFDZ0YsTUFBN0IsQ0FGOEIsQ0FBckIsQ0FEYTtBQUt2QjlELFFBQU0sRUFBRWxCLGlEQUFTLENBQUNHLE1BTEs7QUFNdkJxQixXQUFTLEVBQUV4QixpREFBUyxDQUFDRztBQU5FLENBQXhCO0FBU2VpUSwwRUFBZixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkRBO0FBRUE7Ozs7Ozs7Ozs7Ozs7QUFZQSxJQUFNQyxXQUFXLEdBQUcsU0FBZEEsV0FBYyxPQUFpRDtBQUFBLE1BQTdDdE8sUUFBNkMsUUFBN0NBLFFBQTZDO0FBQUEseUJBQW5DYixNQUFtQztBQUFBLE1BQW5DQSxNQUFtQyw0QkFBMUIsRUFBMEI7QUFBQSw0QkFBdEJNLFNBQXNCO0FBQUEsTUFBdEJBLFNBQXNCLCtCQUFWLEVBQVU7QUFDcEVBLFdBQVMsR0FBR0EsU0FBUyxhQUNoQkEsU0FEZ0IsNEJBRXBCLHFCQUZEO0FBR0EsU0FDQztBQUFLLE1BQUUsRUFBR04sTUFBVjtBQUFtQixhQUFTLEVBQUdNO0FBQS9CLEtBQ0dPLFFBREgsQ0FERDtBQUtBLENBVEQ7O0FBV0FzTyxXQUFXLENBQUMzTyxTQUFaLEdBQXdCO0FBQ3ZCSyxVQUFRLEVBQUUvQixpREFBUyxDQUFDb0ksU0FBVixDQUFxQixDQUM5QnBJLGlEQUFTLENBQUNnRixNQURvQixFQUU5QmhGLGlEQUFTLENBQUNzSSxPQUFWLENBQW1CdEksaURBQVMsQ0FBQ2dGLE1BQTdCLENBRjhCLENBQXJCLENBRGE7QUFLdkI5RCxRQUFNLEVBQUVsQixpREFBUyxDQUFDRyxNQUxLO0FBTXZCcUIsV0FBUyxFQUFFeEIsaURBQVMsQ0FBQ0c7QUFORSxDQUF4QjtBQVNla1EsMEVBQWYsRTs7Ozs7Ozs7Ozs7OztBQ2xDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQU1DLHdCQUF3QixHQUFHO0FBQ2hDeEksWUFBVSxFQUFWQSxtRUFEZ0M7QUFFaEM4RSxXQUFTLEVBQVRBLDREQUZnQztBQUdoQ2dELFlBQVUsRUFBVkEsb0RBSGdDO0FBSWhDTSxTQUFPLEVBQVBBLGlEQUpnQztBQUtoQ0UsYUFBVyxFQUFYQSxzREFMZ0M7QUFNaENDLGFBQVcsRUFBWEEsc0RBTmdDO0FBT2hDL1AsZUFBYSxFQUFiQSx3REFQZ0M7QUFRaEM2UCx1QkFBcUIsRUFBckJBLGlFQVJnQztBQVNoQ0gsVUFBUSxFQUFSQSxrREFUZ0M7QUFVaEM1TCxrQkFBZ0IsRUFBaEJBLGdFQVZnQztBQVdoQ2pELGtCQUFnQixFQUFoQkEsZ0VBWGdDO0FBWWhDd0Qsa0JBQWdCLEVBQWhCQSwrREFBZ0JBO0FBWmdCLENBQWpDO0FBZWUyTCx1RkFBZixFOzs7Ozs7Ozs7OztBQzdCQTtBQUNBLGtCQUFrQiw2M0Y7Ozs7Ozs7Ozs7OztBQ0RsQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQUdBO0FBUUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7O0FBY0EsSUFBTUMsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FDcEJDLFFBRG9CLEVBRXBCQyxnQkFGb0IsRUFJaEI7QUFBQSxNQURKQyxZQUNJLHVFQURXLFNBQ1g7O0FBQ0osTUFBS25SLHNEQUFPLENBQUVpUixRQUFGLENBQVosRUFBMkI7QUFDMUIsV0FBTyxFQUFQO0FBQ0E7O0FBQ0RBLFVBQVEsR0FBR0csb0RBQUssQ0FBRUgsUUFBRixDQUFMLEdBQW9CM1AsS0FBSyxDQUFDK1AsSUFBTixDQUFZSixRQUFRLENBQUNyTyxNQUFULEVBQVosQ0FBcEIsR0FBc0RxTyxRQUFqRTs7QUFDQSxNQUFLalIsc0RBQU8sQ0FBRWtSLGdCQUFGLENBQVosRUFBbUM7QUFDbEN2UixrREFBTyxDQUNOLEtBRE0sRUFFTiwrQ0FDQSx1REFITSxFQUlOdVIsZ0JBSk0sQ0FBUDtBQU1BLFdBQU8sRUFBUDtBQUNBOztBQUNELE1BQUtJLDBEQUFXLENBQUVKLGdCQUFnQixDQUFFQyxZQUFGLENBQWxCLENBQWhCLEVBQXVEO0FBQ3REeFIsa0RBQU8sQ0FDTixLQURNLEVBRU4sK0RBQ0EsdURBSE0sRUFJTnVSLGdCQUpNLEVBS05DLFlBTE0sQ0FBUDtBQU9BLFdBQU8sRUFBUDtBQUNBLEdBdkJHLENBd0JKOzs7QUFDQSxNQUFJalIsR0FBRyxHQUFHZ1IsZ0JBQWdCLENBQUVDLFlBQUYsQ0FBMUIsQ0F6QkksQ0EyQko7O0FBQ0EsTUFBSzdLLHlEQUFVLENBQUVwRyxHQUFGLENBQWYsRUFBeUI7QUFDeEIsUUFBTWdKLE9BQU8sR0FBR2hKLEdBQUcsQ0FBRStRLFFBQUYsQ0FBbkI7O0FBQ0EsUUFBSzFQLHNEQUFPLENBQUUySCxPQUFGLENBQVosRUFBMEI7QUFDekIsYUFBT0EsT0FBUDtBQUNBLEtBSnVCLENBS3hCO0FBQ0E7OztBQUNBaEosT0FBRyxHQUFHLEVBQU47QUFDQVAsa0RBQU8sQ0FDTixLQURNLEVBRU4sOEJBQThCd1IsWUFBOUIsR0FBNkMsb0JBQTdDLEdBQ0EsaUVBREEsR0FFQSxnRUFKTSxDQUFQO0FBTUE7O0FBQ0QsTUFBS25SLHNEQUFPLENBQUVFLEdBQUYsQ0FBWixFQUFzQjtBQUNyQixXQUFPLEVBQVA7QUFDQTs7QUFDRCxNQUFNcVIsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFFckksT0FBRixFQUFXc0ksTUFBWCxFQUF1QjtBQUM5QyxRQUFNeFEsS0FBSyxHQUFHc0YseURBQVUsQ0FBRXBHLEdBQUcsQ0FBQ2MsS0FBTixDQUFWLEdBQ2JkLEdBQUcsQ0FBQ2MsS0FBSixDQUFXd1EsTUFBWCxDQURhLEdBRWJBLE1BQU0sQ0FBRXRSLEdBQUcsQ0FBQ2MsS0FBTixDQUZQO0FBR0EsUUFBTTBJLEtBQUssR0FBR3BELHlEQUFVLENBQUVwRyxHQUFHLENBQUN3SixLQUFOLENBQVYsR0FDYnhKLEdBQUcsQ0FBQ3dKLEtBQUosQ0FBVzhILE1BQVgsQ0FEYSxHQUViQSxNQUFNLENBQUV0UixHQUFHLENBQUN3SixLQUFOLENBRlA7O0FBR0EsUUFBSzFJLEtBQUssSUFBSTBJLEtBQWQsRUFBc0I7QUFDckJSLGFBQU8sQ0FBQzVFLElBQVIsQ0FBYztBQUFFdEQsYUFBSyxFQUFMQSxLQUFGO0FBQVMwSSxhQUFLLEVBQUxBO0FBQVQsT0FBZDtBQUNBOztBQUNELFdBQU9SLE9BQVA7QUFDQSxHQVhEOztBQVlBLFNBQU8sQ0FBRTNILHNEQUFPLENBQUUwUCxRQUFGLENBQVQsR0FDTkEsUUFBUSxDQUFDdkcsTUFBVCxDQUFpQjZHLGVBQWpCLEVBQWtDLEVBQWxDLENBRE0sR0FFTjdHLHFEQUFNLENBQUV1RyxRQUFGLEVBQVlNLGVBQVosRUFBNkIsRUFBN0IsQ0FGUDtBQUdBLENBakVEOztBQW1FZVAsMkVBQWYsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUZBOzs7QUFHQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBRUEsSUFBTVMsZ0JBQWdCLEdBQUc7QUFDeEJDLFVBQVEsRUFBRWpSLGtEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQzlCcEksa0RBQVMsQ0FBQ3FJLE1BRG9CLEVBRTlCckksa0RBQVMsQ0FBQ0csTUFGb0IsQ0FBckIsQ0FEYztBQUt4QitRLFVBQVEsRUFBRWxSLGtEQUFTLENBQUMyQixJQUxJO0FBTXhCcEIsT0FBSyxFQUFFUCxrREFBUyxDQUFDRztBQU5PLENBQXpCO0FBU0E7Ozs7Ozs7OztBQVFBLElBQU1nUixpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQUVDLFNBQUYsRUFBb0Q7QUFBQSxNQUF2Q3ZQLFlBQXVDLHVFQUF4QixFQUF3QjtBQUFBLE1BQXBCSCxTQUFvQix1RUFBUixFQUFROztBQUFBLE1BQ3ZFMlAsb0JBRHVFO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUU1RTs7OztBQUtBOzs7O0FBS0E7OztBQVo0RSwrQkFvQm5FO0FBQUEsMEJBQ3VCLEtBQUtoUyxLQUQ1QjtBQUFBLFlBQ0E0UixRQURBLGVBQ0FBLFFBREE7QUFBQSxZQUNVQyxRQURWLGVBQ1VBLFFBRFY7QUFBQSxZQUVGSSxTQUZFLEdBRVksS0FBS2pTLEtBRmpCLENBRUZpUyxTQUZFO0FBR1IsWUFBTUMsYUFBYSxHQUFHO0FBQ3JCQyw2QkFBbUIsRUFBRTtBQUNwQnRJLHdCQUFZLEVBQUUrSCxRQURJO0FBRWxCdkgsb0JBQVEsRUFBRXdIO0FBRlEsYUFHZixLQUFLN1IsS0FBTCxDQUFXbVMsbUJBSEk7QUFERSxTQUF0Qjs7QUFRQSxZQUFLM1AsWUFBWSxDQUFDeVAsU0FBYixJQUEwQkEsU0FBL0IsRUFBMkM7QUFDMUNBLG1CQUFTLEdBQUcsK0VBQ1J6UCxZQUFZLENBQUN5UCxTQURSLEVBRUxBLFNBRkssQ0FBVDtBQUlBOztBQUVELFlBQU1qUyxLQUFLLEdBQUcsK0VBQ1YsS0FBS0EsS0FERSxFQUVQa1MsYUFGTztBQUdWRCxtQkFBUyxFQUFUQSxTQUhVO0FBSVZGLG1CQUFTLEVBQUUsS0FBS0ssV0FBTCxDQUFpQkw7QUFKbEIsVUFBWDs7QUFNQSxlQUFPLG9CQUFDLHFEQUFELEVBQWtCL1IsS0FBbEIsQ0FBUDtBQUNBO0FBN0MyRTs7QUFBQTtBQUFBLElBQzFDVSw0REFEMEM7O0FBQUEsK0VBQ3ZFc1Isb0JBRHVFLGVBS3pERCxTQUx5RDs7QUFBQSwrRUFDdkVDLG9CQUR1RSxrQkFVdER4UCxZQVZzRDs7QUFBQSwrRUFDdkV3UCxvQkFEdUUsOEZBZ0J4RUwsZ0JBaEJ3RSxFQWlCeEV0UCxTQWpCd0U7O0FBK0M3RTJQLHNCQUFvQixDQUFDSyxXQUFyQixHQUFtQ0MsOERBQWUsQ0FBRVAsU0FBRixDQUFsRDtBQUNBLFNBQU9DLG9CQUFQO0FBQ0EsQ0FqREQ7O0FBbURlRixnRkFBZixFOzs7Ozs7Ozs7Ozs7O0FDaEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQUdBO0FBQ0E7QUFFTyxJQUFNUyxrQkFBa0IsR0FBRztBQUNqQyxzQkFBb0I1UixpREFBUyxDQUFDRyxNQURHO0FBRWpDLGdCQUFjSCxpREFBUyxDQUFDRyxNQUZTO0FBR2pDLHFCQUFtQkgsaURBQVMsQ0FBQ0csTUFISTtBQUlqQzBSLFdBQVMsRUFBRTdSLGlEQUFTLENBQUNDLElBSlk7QUFLakM2Uix1QkFBcUIsRUFBRTlSLGlEQUFTLENBQUNDLElBTEE7QUFNakM4UixtQkFBaUIsRUFBRS9SLGlEQUFTLENBQUNDLElBTkk7QUFPakMrUixtQkFBaUIsRUFBRWhTLGlEQUFTLENBQUNDLElBUEk7QUFRakNnUyxXQUFTLEVBQUVqUyxpREFBUyxDQUFDRyxNQVJZO0FBU2pDK1IsaUJBQWUsRUFBRWxTLGlEQUFTLENBQUNHLE1BVE07QUFVakNnUyxtQkFBaUIsRUFBRW5TLGlEQUFTLENBQUNDLElBVkk7QUFXakNtUyxZQUFVLEVBQUVwUyxpREFBUyxDQUFDZ0YsTUFYVztBQVlqQ3FOLDBCQUF3QixFQUFFclMsaURBQVMsQ0FBQ0MsSUFaSDtBQWFqQ3FTLFdBQVMsRUFBRXRTLGlEQUFTLENBQUNHLE1BYlk7QUFjakNvUyxtQkFBaUIsRUFBRXZTLGlEQUFTLENBQUNDLElBZEk7QUFlakN1UyxjQUFZLEVBQUV4UyxpREFBUyxDQUFDMkIsSUFmUztBQWdCakM4USxrQkFBZ0IsRUFBRXpTLGlEQUFTLENBQUMyQixJQWhCSztBQWlCakMrUSxtQkFBaUIsRUFBRTFTLGlEQUFTLENBQUMyQixJQWpCSTtBQWtCakNnUixnQkFBYyxFQUFFM1MsaURBQVMsQ0FBQzJCLElBbEJPO0FBbUJqQ2lSLGdCQUFjLEVBQUU1UyxpREFBUyxDQUFDMkIsSUFuQk87QUFvQmpDa1IscUJBQW1CLEVBQUU3UyxpREFBUyxDQUFDQyxJQXBCRTtBQXFCakNQLElBQUUsRUFBRU0saURBQVMsQ0FBQ0csTUFyQm1CO0FBc0JqQ3FMLFlBQVUsRUFBRXhMLGlEQUFTLENBQUNHLE1BdEJXO0FBdUJqQ3FJLFNBQU8sRUFBRXhJLGlEQUFTLENBQUNHLE1BdkJjO0FBd0JqQ2tGLFlBQVUsRUFBRXJGLGlEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQ2hDcEksaURBQVMsQ0FBQ3FJLE1BRHNCLEVBRWhDckksaURBQVMsQ0FBQ0csTUFGc0IsQ0FBckIsQ0F4QnFCO0FBNEJqQzJTLGFBQVcsRUFBRTlTLGlEQUFTLENBQUNDLElBNUJVO0FBNkJqQzhTLFlBQVUsRUFBRS9TLGlEQUFTLENBQUNDLElBN0JXO0FBOEJqQzVCLFdBQVMsRUFBRTJCLGlEQUFTLENBQUNDLElBOUJZO0FBK0JqQytTLGtCQUFnQixFQUFFaFQsaURBQVMsQ0FBQzJCLElBL0JLO0FBZ0NqQ3NSLGtCQUFnQixFQUFFalQsaURBQVMsQ0FBQzJCLElBaENLO0FBaUNqQ3VSLFNBQU8sRUFBRWxULGlEQUFTLENBQUNDLElBakNjO0FBa0NqQ2tULGNBQVksRUFBRW5ULGlEQUFTLENBQUNDLElBbENTO0FBbUNqQ21ULGdCQUFjLEVBQUVwVCxpREFBUyxDQUFDMkIsSUFuQ087QUFvQ2pDMFIsZUFBYSxFQUFFclQsaURBQVMsQ0FBQ3FJLE1BcENRO0FBcUNqQ2lMLGVBQWEsRUFBRXRULGlEQUFTLENBQUNxSSxNQXJDUTtBQXNDakNrTCxZQUFVLEVBQUV2VCxpREFBUyxDQUFDQyxJQXRDVztBQXVDakN1VCxlQUFhLEVBQUV4VCxpREFBUyxDQUFDK0UsS0FBVixDQUFpQixDQUMvQixNQUQrQixFQUUvQixRQUYrQixFQUcvQixLQUgrQixDQUFqQixDQXZDa0I7QUE0Q2pDME8sY0FBWSxFQUFFelQsaURBQVMsQ0FBQytFLEtBQVYsQ0FBaUIsQ0FDOUIsVUFEOEIsRUFFOUIsT0FGOEIsQ0FBakIsQ0E1Q21CO0FBZ0RqQzJPLGtCQUFnQixFQUFFMVQsaURBQVMsQ0FBQzJULE9BaERLO0FBaURqQ0MsdUJBQXFCLEVBQUU1VCxpREFBUyxDQUFDQyxJQWpEQTtBQWtEakM0VCwwQkFBd0IsRUFBRTdULGlEQUFTLENBQUNDLElBbERIO0FBbURqQ1UsTUFBSSxFQUFFWCxpREFBUyxDQUFDRyxNQW5EaUI7QUFvRGpDMlQsa0JBQWdCLEVBQUU5VCxpREFBUyxDQUFDMkIsSUFwREs7QUFxRGpDb1MsUUFBTSxFQUFFL1QsaURBQVMsQ0FBQzJCLElBckRlO0FBc0RqQytILFVBQVEsRUFBRTFKLGlEQUFTLENBQUMyQixJQXREYTtBQXVEakNxUyxTQUFPLEVBQUVoVSxpREFBUyxDQUFDMkIsSUF2RGM7QUF3RGpDc1MsZUFBYSxFQUFFalUsaURBQVMsQ0FBQzJCLElBeERRO0FBeURqQ3VTLFdBQVMsRUFBRWxVLGlEQUFTLENBQUMyQixJQXpEWTtBQTBEakN3UyxZQUFVLEVBQUVuVSxpREFBUyxDQUFDMkIsSUExRFc7QUEyRGpDeVMsYUFBVyxFQUFFcFUsaURBQVMsQ0FBQzJCLElBM0RVO0FBNERqQzBTLG1CQUFpQixFQUFFclUsaURBQVMsQ0FBQzJCLElBNURJO0FBNkRqQzJTLHNCQUFvQixFQUFFdFUsaURBQVMsQ0FBQzJCLElBN0RDO0FBOERqQzRTLGlCQUFlLEVBQUV2VSxpREFBUyxDQUFDQyxJQTlETTtBQStEakN1VSxpQkFBZSxFQUFFeFUsaURBQVMsQ0FBQ0MsSUEvRE07QUFnRWpDd0ksU0FBTyxFQUFFekksaURBQVMsQ0FBQ0UsS0FoRWM7QUFpRWpDdVUsVUFBUSxFQUFFelUsaURBQVMsQ0FBQ3FJLE1BakVhO0FBa0VqQ3FNLGFBQVcsRUFBRTFVLGlEQUFTLENBQUNHLE1BbEVVO0FBbUVqQ3dVLG9CQUFrQixFQUFFM1UsaURBQVMsQ0FBQzJCLElBbkVHO0FBb0VqQ2lULFFBQU0sRUFBRTVVLGlEQUFTLENBQUN5SixLQUFWLENBQWlCO0FBQ3hCb0wsa0JBQWMsRUFBRTdVLGlEQUFTLENBQUMyQixJQURGO0FBRXhCbVQsYUFBUyxFQUFFOVUsaURBQVMsQ0FBQzJCLElBRkc7QUFHeEJvVCxXQUFPLEVBQUUvVSxpREFBUyxDQUFDMkIsSUFISztBQUl4QnFULHFCQUFpQixFQUFFaFYsaURBQVMsQ0FBQzJCLElBSkw7QUFLeEJzVCxTQUFLLEVBQUVqVixpREFBUyxDQUFDMkIsSUFMTztBQU14QnVULGdCQUFZLEVBQUVsVixpREFBUyxDQUFDMkIsSUFOQTtBQU94QndULHVCQUFtQixFQUFFblYsaURBQVMsQ0FBQzJCLElBUFA7QUFReEJ5VCxzQkFBa0IsRUFBRXBWLGlEQUFTLENBQUMyQixJQVJOO0FBU3hCbkIsU0FBSyxFQUFFUixpREFBUyxDQUFDMkIsSUFUTztBQVV4QjBULG9CQUFnQixFQUFFclYsaURBQVMsQ0FBQzJCLElBVko7QUFXeEIyVCxxQkFBaUIsRUFBRXRWLGlEQUFTLENBQUMyQixJQVhMO0FBWXhCNFQsUUFBSSxFQUFFdlYsaURBQVMsQ0FBQzJCLElBWlE7QUFheEI2VCxZQUFRLEVBQUV4VixpREFBUyxDQUFDMkIsSUFiSTtBQWN4QjhULGNBQVUsRUFBRXpWLGlEQUFTLENBQUMyQixJQWRFO0FBZXhCK1QsY0FBVSxFQUFFMVYsaURBQVMsQ0FBQzJCLElBZkU7QUFnQnhCZ1UsbUJBQWUsRUFBRTNWLGlEQUFTLENBQUMyQixJQWhCSDtBQWlCeEJpVSxvQkFBZ0IsRUFBRTVWLGlEQUFTLENBQUMyQixJQWpCSjtBQWtCeEJrVSx1QkFBbUIsRUFBRTdWLGlEQUFTLENBQUMyQixJQWxCUDtBQW1CeEJpSCxVQUFNLEVBQUU1SSxpREFBUyxDQUFDMkIsSUFuQk07QUFvQnhCK1MsZUFBVyxFQUFFMVUsaURBQVMsQ0FBQzJCLElBcEJDO0FBcUJ4Qm1VLGVBQVcsRUFBRTlWLGlEQUFTLENBQUMyQixJQXJCQztBQXNCeEJvVSxrQkFBYyxFQUFFL1YsaURBQVMsQ0FBQzJCO0FBdEJGLEdBQWpCLENBcEV5QjtBQTRGakNxVSxVQUFRLEVBQUVoVyxpREFBUyxDQUFDRyxNQTVGYTtBQTZGakM4VixpQkFBZSxFQUFFalcsaURBQVMsQ0FBQ0MsSUE3Rk07QUE4RmpDZ0osT0FBSyxFQUFFakosaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDM0JwSSxpREFBUyxDQUFDZ0YsTUFEaUIsRUFFM0JoRixpREFBUyxDQUFDRSxLQUZpQixDQUFyQjtBQTlGMEIsQ0FBM0I7QUFvR0EsSUFBTWdXLHFCQUFxQixHQUFHO0FBQ3BDcEQsYUFBVyxFQUFFLElBRHVCO0FBRXBDelUsV0FBUyxFQUFFLElBRnlCO0FBR3BDcVcsYUFBVyxFQUFFalQsOERBQUUsQ0FBRSxXQUFGLEVBQWUsZ0JBQWY7QUFIcUIsQ0FBOUIsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFHUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUlBO0FBS0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQk8sSUFBTTBVLFdBQWI7QUFBQTtBQUFBO0FBQUE7O0FBcUNDLHVCQUFhOVcsS0FBYixFQUFxQjtBQUFBOztBQUFBOztBQUNwQiwrTUFBT0EsS0FBUDs7QUFEb0Isc0xBcENiLEVBb0NhOztBQUVwQixVQUFLbUQsS0FBTCxHQUFhMlQsV0FBVyxDQUFDQyxpQkFBWixDQUErQi9XLEtBQS9CLENBQWI7QUFGb0I7QUFHcEI7QUFFRDs7Ozs7Ozs7Ozs7Ozs7QUExQ0Q7QUFBQTtBQUFBLHdDQThKcUI7QUFDbkIsV0FBS3VELFFBQUwsQ0FDQ3VULFdBQVcsQ0FBQ0MsaUJBQVosQ0FBK0IsS0FBSy9XLEtBQXBDLENBREQ7QUFHQTtBQWxLRjtBQUFBO0FBQUEsdUNBb0txQitOLFNBcEtyQixFQW9LaUM7QUFDL0IsVUFBSytJLFdBQVcsQ0FBQ0UsaUJBQVosQ0FBK0JqSixTQUEvQixFQUEwQyxLQUFLL04sS0FBL0MsQ0FBTCxFQUE4RDtBQUM3RCxhQUFLdUQsUUFBTCxDQUNDdVQsV0FBVyxDQUFDQyxpQkFBWixDQUErQixLQUFLL1csS0FBcEMsQ0FERDtBQUdBO0FBQ0Q7QUFFRDs7Ozs7O0FBNUtEO0FBQUE7QUFBQSxxQ0FpTGtCO0FBQUEsd0JBQ3VCLEtBQUtBLEtBRDVCO0FBQUEsVUFDUmtCLEtBRFEsZUFDUkEsS0FEUTtBQUFBLFVBQ0RpUixtQkFEQyxlQUNEQSxtQkFEQztBQUVoQixhQUFPalIsS0FBSyxHQUNYO0FBQU8sZUFBTyxFQUFHaVIsbUJBQW1CLENBQUM3UTtBQUFyQyxTQUE4Q0osS0FBOUMsQ0FEVyxHQUVYLEVBRkQ7QUFHQTtBQXRMRjtBQUFBO0FBQUEsNkJBd0xVO0FBQ1IsYUFDQyxvQkFBQywyREFBRCxRQUNHLEtBQUsrVixjQUFMLEVBREgsRUFFQyxvQkFBQyxvREFBRCxFQUFhLEtBQUs5VCxLQUFsQixDQUZELENBREQ7QUFNQTtBQS9MRjtBQUFBO0FBQUEsc0NBc0QyQm5ELEtBdEQzQixFQXNEbUM7QUFBQSxVQUN6Qm1TLG1CQUR5QixHQUNEblMsS0FEQyxDQUN6Qm1TLG1CQUR5QjtBQUVqQyxVQUFNL0ksT0FBTyxHQUFHME4sV0FBVyxDQUFDSSxVQUFaLENBQXdCbFgsS0FBeEIsQ0FBaEI7QUFDQSxVQUFNbVgsYUFBYSxHQUFHTCxXQUFXLENBQUNNLHVCQUFaLENBQ3JCakYsbUJBQW1CLENBQUN0SSxZQURDLEVBQ2FULE9BRGIsQ0FBdEI7QUFHQSxVQUFNaU8sT0FBTyxHQUFHO0FBQ2ZqTyxlQUFPLEVBQVBBLE9BRGU7QUFFZlEsYUFBSyxFQUFFdU47QUFGUSxPQUFoQjtBQUtBLDRGQUNJTixvRkFESixFQUVJMUUsbUJBRkosRUFHSWtGLE9BSEo7QUFLQTtBQUVEOzs7Ozs7QUF4RUQ7QUFBQTtBQUFBLCtCQTZFb0JyWCxLQTdFcEIsRUE2RTRCO0FBQUEsVUFFekJzWCxrQkFGeUIsR0FNdEJ0WCxLQU5zQixDQUV6QnNYLGtCQUZ5QjtBQUFBLFVBR3pCQyxhQUh5QixHQU10QnZYLEtBTnNCLENBR3pCdVgsYUFIeUI7QUFBQSxVQUl6Qm5HLGdCQUp5QixHQU10QnBSLEtBTnNCLENBSXpCb1IsZ0JBSnlCO0FBQUEsVUFLekJDLFlBTHlCLEdBTXRCclIsS0FOc0IsQ0FLekJxUixZQUx5Qjs7QUFPMUIsVUFBSzdLLDBEQUFVLENBQUU4USxrQkFBRixDQUFWLElBQW9DLENBQUVwWCx1REFBTyxDQUFFcVgsYUFBRixDQUFsRCxFQUFzRTtBQUNyRSxlQUFPRCxrQkFBa0IsQ0FDeEJDLGFBRHdCLEVBRXhCbkcsZ0JBRndCLEVBR3hCQyxZQUh3QixDQUF6QjtBQUtBOztBQUNELGFBQU8sRUFBUDtBQUNBO0FBRUQ7Ozs7Ozs7QUE5RkQ7QUFBQTtBQUFBLDRDQW9HaUN6SCxLQXBHakMsRUFvR3dDUixPQXBHeEMsRUFvR2tEO0FBQ2hELFVBQUssQ0FBRWxKLHVEQUFPLENBQUVrSixPQUFGLENBQWQsRUFBNEI7QUFDM0IsWUFBTW9PLEtBQUssR0FBR0Msb0RBQUksQ0FBRXJPLE9BQUYsRUFBVyxVQUFVRyxNQUFWLEVBQW1CO0FBQy9DLGlCQUFPQSxNQUFNLENBQUNLLEtBQVAsS0FBaUJBLEtBQXhCO0FBQ0EsU0FGaUIsQ0FBbEI7QUFHQSxlQUFPLENBQUU0SCwyREFBVyxDQUFFZ0csS0FBRixDQUFiLEdBQ05BLEtBRE0sR0FFTixJQUZEO0FBR0E7O0FBQ0QsYUFBTyxJQUFQO0FBQ0E7QUFFRDs7Ozs7Ozs7OztBQWhIRDtBQUFBO0FBQUEsc0NBeUgyQnpKLFNBekgzQixFQXlIc0MySixTQXpIdEMsRUF5SGtEO0FBQ2hELFVBQUszSixTQUFTLEtBQUsySixTQUFuQixFQUErQjtBQUM5QixlQUFPLEtBQVA7QUFDQTs7QUFIK0MsVUFLbkJDLGlCQUxtQixHQUtHNUosU0FMSCxDQUt4Q29FLG1CQUx3QztBQUFBLFVBTW5CeUYsaUJBTm1CLEdBTUdGLFNBTkgsQ0FNeEN2RixtQkFOd0MsRUFRaEQ7O0FBQ0EsVUFDQ3dGLGlCQUFpQixDQUFDOU4sWUFBbEIsS0FBbUMrTixpQkFBaUIsQ0FBQy9OLFlBRHRELEVBRUU7QUFDRCxlQUFPLElBQVA7QUFDQTs7QUFFRCxVQUFLOE4saUJBQWlCLENBQUMzWSxTQUFsQixLQUFnQzRZLGlCQUFpQixDQUFDNVksU0FBdkQsRUFBbUU7QUFDbEUsZUFBTyxJQUFQO0FBQ0EsT0FqQitDLENBbUJoRDs7O0FBQ0EsVUFDQyxDQUFFc1MscURBQUssQ0FBRXZELFNBQVMsQ0FBQ3dKLGFBQVosQ0FBUCxJQUNBLENBQUVqRyxxREFBSyxDQUFFb0csU0FBUyxDQUFDSCxhQUFaLENBRlIsRUFHRTtBQUNELGVBQU8sSUFBUDtBQUNBOztBQUVELFVBQ0MsQ0FBRU0sbUVBQWMsQ0FDZnJXLEtBQUssQ0FBQytQLElBQU4sQ0FBWXhELFNBQVMsQ0FBQ3dKLGFBQVYsQ0FBd0JPLElBQXhCLEVBQVosQ0FEZSxFQUVmdFcsS0FBSyxDQUFDK1AsSUFBTixDQUFZbUcsU0FBUyxDQUFDSCxhQUFWLENBQXdCTyxJQUF4QixFQUFaLENBRmUsQ0FEakIsRUFLRTtBQUNELGVBQU8sSUFBUDtBQUNBO0FBQ0Q7QUE1SkY7O0FBQUE7QUFBQSxFQUFpQ3BYLDREQUFqQztBQWtNQTs7Ozs7OzZFQWxNYW9XLFcsZUFHTztBQUNsQjNFLHFCQUFtQixFQUFFeFIsa0RBQVMsQ0FBQ3lKLEtBQVYsZ0ZBQ2pCbUksaUZBRGlCLEVBREg7QUFJbEJnRixlQUFhLEVBQUU1VyxrREFBUyxDQUFDRSxLQUpQO0FBS2xCa1IsV0FBUyxFQUFFcFIsa0RBQVMsQ0FBQytFLEtBQVYsQ0FBaUJxUyw4REFBakIsRUFBK0J4VixVQUx4QjtBQU1sQitVLG9CQUFrQixFQUFFM1csa0RBQVMsQ0FBQzJCLElBTlo7QUFPbEI4TyxrQkFBZ0IsRUFBRXpRLGtEQUFTLENBQUNnRixNQVBWO0FBUWxCMEwsY0FBWSxFQUFFMVEsa0RBQVMsQ0FBQ0csTUFSTjtBQVNsQm1SLFdBQVMsRUFBRXRSLGtEQUFTLENBQUN5SixLQUFWLENBQWlCO0FBQzNCNE4sU0FBSyxFQUFFclgsa0RBQVMsQ0FBQ3FJLE1BRFU7QUFFM0JpUCxXQUFPLEVBQUV0WCxrREFBUyxDQUFDRyxNQUZRO0FBRzNCb1gsU0FBSyxFQUFFdlgsa0RBQVMsQ0FBQytFLEtBQVYsQ0FBaUJ5UyxzRUFBakI7QUFIb0IsR0FBakIsQ0FUTztBQWNsQkMsZ0JBQWMsRUFBRXpYLGtEQUFTLENBQUMyQixJQWRSO0FBZWxCcEIsT0FBSyxFQUFFUCxrREFBUyxDQUFDRztBQWZDLEM7OzZFQUhQZ1csVyxrQkFxQlU7QUFDckIzRSxxQkFBbUIsRUFBRSwrRUFDakIwRSxvRkFEZTtBQUVsQnZWLFFBQUksRUFBRStXLHdEQUFRLENBQUUsZUFBRjtBQUZJLElBREU7QUFLckJkLGVBQWEsRUFBRSxFQUxNO0FBTXJCRCxvQkFBa0IsRUFBRXBHLHVEQU5DO0FBT3JCRyxjQUFZLEVBQUUsU0FQTztBQVFyQlksV0FBUyxFQUFFO0FBQ1YrRixTQUFLLEVBQUUsR0FERztBQUVWRSxTQUFLLEVBQUVJLGtFQUFnQkE7QUFGYixHQVJVO0FBWXJCcFgsT0FBSyxFQUFFLEVBWmM7QUFhckJrWCxnQkFBYyxFQUFFO0FBQUEsV0FBTSxFQUFOO0FBQUE7QUFiSyxDOztBQWtMUkcsa0lBQVUsQ0FBRSxVQUFFQyxNQUFGLEVBQVVDLFFBQVYsRUFBd0I7QUFBQSxNQUMxQ0wsY0FEMEMsR0FDU0ssUUFEVCxDQUMxQ0wsY0FEMEM7QUFBQSxNQUMxQnJHLFNBRDBCLEdBQ1MwRyxRQURULENBQzFCMUcsU0FEMEI7QUFBQSxNQUNmSSxtQkFEZSxHQUNTc0csUUFEVCxDQUNmdEcsbUJBRGU7QUFFbEQsTUFBTXVHLFdBQVcsR0FBR04sY0FBYyxDQUFFSyxRQUFRLENBQUN4RyxTQUFYLENBQWxDOztBQUZrRCxnQkFHSnVHLE1BQU0sQ0FBRSxxQkFBRixDQUhGO0FBQUEsTUFHMUNHLFdBSDBDLFdBRzFDQSxXQUgwQztBQUFBLE1BRzdCQyxvQkFINkIsV0FHN0JBLG9CQUg2Qjs7QUFJbEQsd0ZBQ0k5QixXQUFXLENBQUN0VSxZQURoQixFQUVJaVcsUUFGSjtBQUdDbEIsaUJBQWEsRUFBRW9CLFdBQVcsQ0FBRTVHLFNBQUYsRUFBYTJHLFdBQWIsQ0FIM0I7QUFJQ3ZHLHVCQUFtQixFQUFFLCtFQUNqQjJFLFdBQVcsQ0FBQ3RVLFlBQVosQ0FBeUIyUCxtQkFEVixFQUVmQSxtQkFGZTtBQUdsQm5ULGVBQVMsRUFBRTRaLG9CQUFvQixDQUFFN0csU0FBRixFQUFhMkcsV0FBYjtBQUhiO0FBSnBCO0FBVUEsQ0Fkd0IsQ0FBVixDQWNWNUIsV0FkVSxDQUFmLEU7Ozs7Ozs7Ozs7Ozs7QUN4UEE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBR0E7QUFFQTs7Ozs7Ozs7QUFPTyxJQUFNeEUsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFFUCxTQUFGLEVBQWlCO0FBQy9DLFNBQU84Ryx5REFBVSxDQUFFQyx3REFBUyxDQUFFL0csU0FBRixDQUFYLENBQVYsR0FBdUMsUUFBOUM7QUFDQSxDQUZNLEM7Ozs7Ozs7Ozs7OztBQ1pQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNGQTs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBRUEsSUFBTVgsZ0JBQWdCLEdBQUc7QUFDeEIySCxTQUFPLEVBQUU7QUFDUm5QLFNBQUssRUFBRSxRQURDO0FBRVIxSSxTQUFLLEVBQUUsZUFBRXdRLE1BQUYsRUFBYztBQUNwQixhQUFPc0gseURBQUssQ0FBQ0Msc0JBQU4sQ0FBOEJ2SCxNQUE5QixDQUFQO0FBQ0E7QUFKTyxHQURlO0FBT3hCcFEsTUFBSSxFQUFFO0FBQ0xzSSxTQUFLLEVBQUUsUUFERjtBQUVMMUksU0FBSyxFQUFFO0FBRkY7QUFQa0IsQ0FBekI7QUFhQSxJQUFNZ1ksY0FBYyxHQUFHcEgseUVBQWlCLENBQ3ZDa0gseURBQUssQ0FBQ0csVUFEaUM7QUFHdENoSCxxQkFBbUIsRUFBRTtBQUNwQjRCLGtCQUFjLEVBQUU7QUFBQSxhQUFNM1IsOERBQUUsQ0FBRSx1QkFBRixFQUEyQixnQkFBM0IsQ0FBUjtBQUFBLEtBREk7QUFFcEJxUyxvQkFBZ0IsRUFBRTtBQUFBLGFBQU1yUyw4REFBRSxDQUN6QixlQUR5QixFQUV6QixnQkFGeUIsQ0FBUjtBQUFBLEtBRkU7QUFNcEJpVCxlQUFXLEVBQUVqVCw4REFBRSxDQUFFLG9CQUFGLEVBQXdCLGdCQUF4QjtBQU5LO0FBSGlCLEdBV25DNFcseURBQUssQ0FBQ0ksZ0JBWDZCO0FBWXRDaEIsZ0JBQWMsRUFBRVkseURBQUssQ0FBQ1osY0FaZ0I7QUFhdENsWCxPQUFLLEVBQUVrQiw4REFBRSxDQUFFLGlCQUFGLEVBQXFCLGdCQUFyQixDQWI2QjtBQWN0Q2dQLGtCQUFnQixFQUFoQkE7QUFkc0MsbUZBaUJuQzRILHlEQUFLLENBQUNLLGNBakI2QjtBQWtCdENqSSxrQkFBZ0IsRUFBRXpRLGlEQUFTLENBQUNnRjtBQWxCVSxHQUF4QztBQXNCZXVULDZFQUFmO0FBRUE7Ozs7QUFHTyxJQUFNSSxvQkFBb0IsR0FBR0MsZ0ZBQWUsQ0FDbEQsaUJBRGtELENBQWYsQ0FFakNMLGNBRmlDLENBQTdCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckRQOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBRUEsSUFBTTlILGdCQUFnQixHQUFHO0FBQ3hCMkgsU0FBTyxFQUFFO0FBQ1JuUCxTQUFLLEVBQUUsUUFEQztBQUVSMUksU0FBSyxFQUFFO0FBRkM7QUFEZSxDQUF6QjtBQU9BLElBQU1zWSxXQUFXLEdBQUcxSCx5RUFBaUIsQ0FDcENrSCxzREFBSyxDQUFDRyxVQUQ4QjtBQUduQ2hILHFCQUFtQixFQUFFO0FBQ3BCNEIsa0JBQWMsRUFBRTtBQUFBLGFBQU0zUiw4REFBRSxDQUFFLG9CQUFGLEVBQXdCLGdCQUF4QixDQUFSO0FBQUEsS0FESTtBQUVwQnFTLG9CQUFnQixFQUFFO0FBQUEsYUFBTXJTLDhEQUFFLENBQ3pCLFlBRHlCLEVBRXpCLGdCQUZ5QixDQUFSO0FBQUEsS0FGRTtBQU1wQmlULGVBQVcsRUFBRWpULDhEQUFFLENBQUUsaUJBQUYsRUFBcUIsZ0JBQXJCO0FBTks7QUFIYyxHQVdoQzRXLHNEQUFLLENBQUNJLGdCQVgwQjtBQVluQ2hCLGdCQUFjLEVBQUVZLHNEQUFLLENBQUNaLGNBWmE7QUFhbkNsWCxPQUFLLEVBQUVrQiw4REFBRSxDQUFFLGNBQUYsRUFBa0IsZ0JBQWxCLENBYjBCO0FBY25DZ1Asa0JBQWdCLEVBQWhCQTtBQWRtQyxtRkFpQmhDNEgsc0RBQUssQ0FBQ0ssY0FqQjBCLEVBQXJDO0FBcUJlRywwRUFBZjtBQUVBOzs7O0FBR08sSUFBTUMsaUJBQWlCLEdBQUdGLGdGQUFlLENBQy9DLGNBRCtDLENBQWYsQ0FFOUJDLFdBRjhCLENBQTFCLEM7Ozs7Ozs7Ozs7OztBQzdDUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNGQTs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFFQSxJQUFNcEksZ0JBQWdCLEdBQUc7QUFDeEIySCxTQUFPLEVBQUU7QUFDUm5QLFNBQUssRUFBRSxRQURDO0FBRVIxSSxTQUFLLEVBQUUsZUFBRXdZLFlBQUY7QUFBQSxhQUFvQkMsZ0VBQVcsQ0FBQ0MsWUFBWixDQUMxQkYsWUFBWSxDQUFDRyxNQURhLENBQXBCO0FBQUE7QUFGQztBQURlLENBQXpCO0FBU0E7Ozs7QUFHQSxJQUFNQyxZQUFZLEdBQUdoSSx5RUFBaUIsQ0FDckNrSCx1REFBSyxDQUFDRyxVQUQrQjtBQUdwQ2hILHFCQUFtQixFQUFFO0FBQ3BCNEIsa0JBQWMsRUFBRTtBQUFBLGFBQU0zUiw4REFBRSxDQUFFLHNCQUFGLEVBQ3ZCLGdCQUR1QixDQUFSO0FBQUEsS0FESTtBQUlwQnFTLG9CQUFnQixFQUFFO0FBQUEsYUFBTXJTLDhEQUFFLENBQUUsY0FBRixFQUFrQixnQkFBbEIsQ0FBUjtBQUFBLEtBSkU7QUFLcEJpVCxlQUFXLEVBQUVqVCw4REFBRSxDQUFFLGtCQUFGLEVBQXNCLGdCQUF0QjtBQUxLO0FBSGUsR0FVakM0Vyx1REFBSyxDQUFDSSxnQkFWMkI7QUFXcENoQixnQkFBYyxFQUFFWSx1REFBSyxDQUFDWixjQVhjO0FBWXBDbFgsT0FBSyxFQUFFa0IsOERBQUUsQ0FBRSxlQUFGLEVBQW1CLGdCQUFuQixDQVoyQjtBQWFwQ2dQLGtCQUFnQixFQUFoQkE7QUFib0MsbUZBZ0JqQzRILHVEQUFLLENBQUNLLGNBaEIyQjtBQWlCcEN6SCxVQUFRLEVBQUVqUixpREFBUyxDQUFDK0UsS0FBVixDQUNUc1QsdURBQUssQ0FBQ2UsY0FERyxDQWpCMEI7QUFvQnBDM0ksa0JBQWdCLEVBQUV6USxpREFBUyxDQUFDZ0Y7QUFwQlEsR0FBdEM7QUF3QmVtVSwyRUFBZjtBQUVBOzs7O0FBR08sSUFBTUUsa0JBQWtCLEdBQUdULGdGQUFlLENBQ2hELGVBRGdELENBQWYsQ0FFL0JPLFlBRitCLENBQTNCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2RFA7OztBQUdBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUVBLElBQU0xSSxnQkFBZ0IsR0FBRztBQUN4QjJILFNBQU8sRUFBRTtBQUNSblAsU0FBSyxFQUFFLFFBREM7QUFFUjFJLFNBQUssRUFBRTtBQUZDO0FBRGUsQ0FBekI7QUFPQSxJQUFNK1ksWUFBWSxHQUFHbkkseUVBQWlCLENBQ3JDa0gsdURBQUssQ0FBQ0csVUFEK0I7QUFHcENoSCxxQkFBbUIsRUFBRTtBQUNwQjRCLGtCQUFjLEVBQUU7QUFBQSxhQUFNM1IsOERBQUUsQ0FBRSxxQkFBRixFQUF5QixnQkFBekIsQ0FBUjtBQUFBLEtBREk7QUFFcEJxUyxvQkFBZ0IsRUFBRTtBQUFBLGFBQU1yUyw4REFBRSxDQUFFLGFBQUYsRUFBaUIsZ0JBQWpCLENBQVI7QUFBQSxLQUZFO0FBR3BCaVQsZUFBVyxFQUFFalQsOERBQUUsQ0FBRSxrQkFBRixFQUFzQixnQkFBdEI7QUFISztBQUhlLEdBUWpDNFcsdURBQUssQ0FBQ0ksZ0JBUjJCO0FBU3BDaEIsZ0JBQWMsRUFBRVksdURBQUssQ0FBQ1osY0FUYztBQVVwQ2xYLE9BQUssRUFBRWtCLDhEQUFFLENBQUUsZUFBRixFQUFtQixnQkFBbkIsQ0FWMkI7QUFXcENnUCxrQkFBZ0IsRUFBaEJBO0FBWG9DLG1GQWNqQzRILHVEQUFLLENBQUNLLGNBZDJCO0FBZXBDakksa0JBQWdCLEVBQUV6USxpREFBUyxDQUFDZ0Y7QUFmUSxHQUF0QztBQW1CZXNVLDJFQUFmO0FBRUE7Ozs7QUFHTyxJQUFNQyxrQkFBa0IsR0FBR1gsZ0ZBQWUsQ0FDaEQsZUFEZ0QsQ0FBZixDQUUvQlUsWUFGK0IsQ0FBM0IsQzs7Ozs7Ozs7Ozs7O0FDNUNQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUFHQTtBQUNBO0FBWUE7Ozs7OztBQUtPLElBQU1FLE9BQU8sR0FBRyxTQUFWQSxPQUFVLENBQUV2USxLQUFGO0FBQUEsU0FBYSxDQUFFd1EseUVBQVksQ0FBRSxDQUFDeFEsS0FBSCxDQUFkLEdBQ25DeEgsOERBQUUsQ0FBRSx1QkFBRixFQUEyQixnQkFBM0IsQ0FEaUMsR0FFbkMsSUFGc0I7QUFBQSxDQUFoQjtBQUlQOzs7Ozs7QUFLTyxJQUFNaVksU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBRXpRLEtBQUY7QUFBQSxTQUFhLENBQUUwUSwyRUFBYyxDQUFFLENBQUMxUSxLQUFILENBQWhCLEdBQ3JDeEgsOERBQUUsQ0FBRSwwQkFBRixFQUE4QixnQkFBOUIsQ0FEbUMsR0FFckMsSUFGd0I7QUFBQSxDQUFsQjtBQUlQOzs7Ozs7QUFLTyxJQUFNbVksU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBRTNRLEtBQUY7QUFBQSxTQUFhLENBQUU0USwyRUFBYyxDQUFFLENBQUM1USxLQUFILENBQWhCLEdBQ3JDeEgsOERBQUUsQ0FBRSx3QkFBRixFQUE0QixnQkFBNUIsQ0FEbUMsR0FFckMsSUFGd0I7QUFBQSxDQUFsQjtBQUlQOzs7Ozs7O0FBTU8sSUFBTXFZLE9BQU8sR0FBRyxTQUFWQSxPQUFVLENBQUVDLFVBQUYsRUFBY0MsU0FBZDtBQUFBLFNBQTZCLFVBQUVDLFlBQUY7QUFBQSxXQUNuRCxDQUFFQSxZQUFGLElBQWtCRixVQUFVLEtBQUtFLFlBQWpDLEdBQ0NqVyxtRUFBTyxDQUNOdkMsOERBQUUsQ0FBRSx1QkFBRixFQUEyQixnQkFBM0IsQ0FESSxFQUVOdVksU0FGTSxDQURSLEdBSUssSUFMOEM7QUFBQSxHQUE3QjtBQUFBLENBQWhCO0FBT1A7Ozs7OztBQUtPLElBQU1FLFFBQVEsR0FBRyxTQUFYQSxRQUFXLENBQUVDLEdBQUY7QUFBQSxTQUFXLFVBQUVsUixLQUFGO0FBQUEsV0FDbEMsQ0FBRW1SLHdGQUFzQixDQUFFLENBQUNELEdBQUgsRUFBUSxDQUFDbFIsS0FBVCxDQUF4QixHQUNDakYsbUVBQU8sQ0FDTnFXLDhEQUFFLENBQ0Qsc0NBREMsRUFFRCxzQ0FGQyxFQUdERixHQUhDLEVBSUQsZ0JBSkMsQ0FESSxFQU9OQSxHQVBNLENBRFIsR0FTSyxJQVY2QjtBQUFBLEdBQVg7QUFBQSxDQUFqQjtBQVlQOzs7Ozs7QUFLTyxJQUFNRyxTQUFTLEdBQUcsU0FBWkEsU0FBWTtBQUFBLE1BQUVILEdBQUYsdUVBQVEsSUFBUjtBQUFBLFNBQWtCLFVBQUVsUixLQUFGO0FBQUEsV0FDMUMsQ0FBRXNSLCtGQUE2QixDQUFFLENBQUNKLEdBQUgsRUFBUWxSLEtBQVIsQ0FBL0IsR0FDQ2pGLG1FQUFPLENBQ05xVyw4REFBRSxDQUNELGdEQURDLEVBRUQsaURBRkMsRUFHREYsR0FIQyxFQUlELGdCQUpDLENBREksRUFPTkEsR0FQTSxDQURSLEdBU0ssSUFWcUM7QUFBQSxHQUFsQjtBQUFBLENBQWxCO0FBYVA7Ozs7OztBQUtPLElBQU1LLFNBQVMsR0FBRyxTQUFaQSxTQUFZLENBQUVMLEdBQUY7QUFBQSxTQUFXLFVBQUVsUixLQUFGO0FBQUEsV0FDbkMsQ0FBRXdSLHlGQUF1QixDQUFFLENBQUNOLEdBQUgsRUFBUSxDQUFDbFIsS0FBVCxDQUF6QixHQUNDakYsbUVBQU8sQ0FDTnFXLDhEQUFFLENBQ0Qsc0NBREMsRUFFRCxzQ0FGQyxFQUdERixHQUhDLEVBSUQsZ0JBSkMsQ0FESSxFQU9OQSxHQVBNLENBRFIsR0FTSyxJQVY4QjtBQUFBLEdBQVg7QUFBQSxDQUFsQjtBQWFQOzs7Ozs7QUFLTyxJQUFNTyxRQUFRLEdBQUcsU0FBWEEsUUFBVyxDQUFFQyxHQUFGO0FBQUEsU0FBVyxVQUFFMVIsS0FBRjtBQUFBLFdBQ2xDLENBQUUyUiwyRkFBeUIsQ0FBRSxDQUFDRCxHQUFILEVBQVEsQ0FBQzFSLEtBQVQsQ0FBM0IsR0FDQ2pGLG1FQUFPLENBQ05xVyw4REFBRSxDQUNELG1DQURDLEVBRUQsbUNBRkMsRUFHRE0sR0FIQyxFQUlELGdCQUpDLENBREksRUFPTkEsR0FQTSxDQURSLEdBU0ssSUFWNkI7QUFBQSxHQUFYO0FBQUEsQ0FBakI7QUFhUDs7Ozs7O0FBS08sSUFBTUUsU0FBUyxHQUFHLFNBQVpBLFNBQVk7QUFBQSxNQUFFRixHQUFGLHVFQUFRLENBQVI7QUFBQSxTQUFlLFVBQUUxUixLQUFGO0FBQUEsV0FDdkMsQ0FBRTZSLGtHQUFnQyxDQUFFLENBQUNILEdBQUgsRUFBUTFSLEtBQVIsQ0FBbEMsR0FDQ2pGLG1FQUFPLENBQ05xVyw4REFBRSxDQUNELGlEQURDLEVBRUQsa0RBRkMsRUFHRE0sR0FIQyxFQUlELGdCQUpDLENBREksRUFPTkEsR0FQTSxDQURSLEdBU0ssSUFWa0M7QUFBQSxHQUFmO0FBQUEsQ0FBbEI7QUFhUDs7Ozs7O0FBS08sSUFBTUksU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBRUosR0FBRjtBQUFBLFNBQVcsVUFBRTFSLEtBQUY7QUFBQSxXQUNuQyxDQUFFK1IsNEZBQTBCLENBQUUsQ0FBQ0wsR0FBSCxFQUFRLENBQUMxUixLQUFULENBQTVCLEdBQ0NqRixtRUFBTyxDQUNOcVcsOERBQUUsQ0FDRCxtQ0FEQyxFQUVELG1DQUZDLEVBR0RNLEdBSEMsRUFJRCxnQkFKQyxDQURJLEVBT05BLEdBUE0sQ0FEUixHQVNLLElBVjhCO0FBQUEsR0FBWDtBQUFBLENBQWxCO0FBYVA7Ozs7OztBQUtPLElBQU0xWixRQUFRLEdBQUcsU0FBWEEsUUFBVyxDQUFFZ0ksS0FBRjtBQUFBLFNBQWEsQ0FBRUEsS0FBRixHQUNwQ3hILDhEQUFFLENBQUUsc0JBQUYsRUFBMEIsZ0JBQTFCLENBRGtDLEdBRXBDLElBRnVCO0FBQUEsQ0FBakI7QUFJUCxJQUFNYixXQUFXLEdBQUc7QUFDbkI0WSxTQUFPLEVBQVBBLE9BRG1CO0FBRW5CRSxXQUFTLEVBQVRBLFNBRm1CO0FBR25CRSxXQUFTLEVBQVRBLFNBSG1CO0FBSW5CRSxTQUFPLEVBQVBBLE9BSm1CO0FBS25CSSxVQUFRLEVBQVJBLFFBTG1CO0FBTW5CSSxXQUFTLEVBQVRBLFNBTm1CO0FBT25CRSxXQUFTLEVBQVRBLFNBUG1CO0FBUW5CRSxVQUFRLEVBQVJBLFFBUm1CO0FBU25CRyxXQUFTLEVBQVRBLFNBVG1CO0FBVW5CRSxXQUFTLEVBQVRBLFNBVm1CO0FBV25COVosVUFBUSxFQUFSQTtBQVhtQixDQUFwQjtBQWFlTCwwRUFBZixFOzs7Ozs7Ozs7Ozs7QUN6TEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtDQUVBOztDQUVBOztDQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNOQTs7O0FBR0E7QUFFQTs7OztBQUdBO0FBRUEsSUFBTXFhLGFBQWEsR0FBRyxFQUF0Qjs7QUFDQSxJQUFNQyxhQUFhLEdBQUd6Wiw4REFBRSxDQUFFLE9BQUYsRUFBVyxnQkFBWCxDQUF4Qjs7QUFDQSxJQUFNMFosV0FBVyxHQUFHLENBQXBCO0FBQ0EsSUFBTUMsV0FBVyxHQUFHLElBQXBCO0FBRU8sSUFBTUMsVUFBVSxHQUFHLFNBQWJBLFVBQWEsT0FRbkI7QUFBQSxNQVBOQyxhQU9NLFFBUE5BLGFBT007QUFBQSx3QkFOTmpFLEtBTU07QUFBQSxNQU5OQSxLQU1NLDJCQU5FNEQsYUFNRjtBQUFBLHdCQUxOMWEsS0FLTTtBQUFBLE1BTE5BLEtBS00sMkJBTEUyYSxhQUtGO0FBQUEsc0JBSk5QLEdBSU07QUFBQSxNQUpOQSxHQUlNLHlCQUpBUSxXQUlBO0FBQUEsc0JBSE5oQixHQUdNO0FBQUEsTUFITkEsR0FHTSx5QkFIQWlCLFdBR0E7QUFBQSw2QkFGTkcsVUFFTTtBQUFBLE1BRk5BLFVBRU0sZ0NBRk8sSUFFUDtBQUFBLE1BREh2TyxJQUNHOztBQUNOLFNBQU91TyxVQUFVLEdBQ2Qsb0JBQUMsa0VBQUQ7QUFDRCxPQUFHLEVBQUcsYUFETDtBQUVELFNBQUssRUFBR2xFLEtBRlA7QUFHRCxTQUFLLEVBQUc5VyxLQUhQO0FBSUQsT0FBRyxFQUFHb2EsR0FKTDtBQUtELE9BQUcsRUFBR1IsR0FMTDtBQU1ELFlBQVEsRUFBR21CO0FBTlYsS0FPSXRPLElBUEosRUFEYyxHQVVkLG9CQUFDLGlFQUFEO0FBQ0QsUUFBSSxFQUFDLFFBREo7QUFFRCxTQUFLLEVBQUdxSyxLQUZQO0FBR0QsU0FBSyxFQUFHOVcsS0FIUDtBQUlELE9BQUcsRUFBR29hLEdBSkw7QUFLRCxPQUFHLEVBQUdSLEdBTEw7QUFNRCxZQUFRLEVBQUdtQjtBQU5WLEtBT0l0TyxJQVBKLEVBVkg7QUFtQkEsQ0E1Qk0sQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7OztBQWNBLElBQU13TyxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQXFCLE9BU3BCO0FBQUEsTUFSTkMsSUFRTSxRQVJOQSxJQVFNO0FBQUEsTUFQTmphLFNBT00sUUFQTkEsU0FPTTtBQUFBLE1BTk5rYSxVQU1NLFFBTk5BLFVBTU07QUFBQSxNQUxOQyxVQUtNLFFBTE5BLFVBS007QUFBQSwyQkFKTi9XLFFBSU07QUFBQSxNQUpOQSxRQUlNLDhCQUpLLE1BSUw7QUFBQSx5QkFITmdYLE1BR007QUFBQSxNQUhOQSxNQUdNLDRCQUhHLElBR0g7QUFBQSw2QkFGTkMsVUFFTTtBQUFBLE1BRk5BLFVBRU0sZ0NBRk8sRUFFUDtBQUFBLDJCQUROQyxRQUNNO0FBQUEsTUFETkEsUUFDTSw4QkFESyxLQUNMO0FBQ050YSxXQUFTLEdBQUczQixpREFBVSxDQUNyQix5QkFEcUIsRUFFckIyQixTQUZxQixFQUdyQjtBQUNDLG9CQUFnQm9ELFFBQVEsS0FBSyxNQUQ5QjtBQUVDLHFCQUFpQkEsUUFBUSxLQUFLO0FBRi9CLEdBSHFCLENBQXRCO0FBUUEsTUFBTW1YLGNBQWMsR0FBR2xXLHlEQUFVLENBQUUrVixNQUFGLENBQVYsR0FDdEIsb0JBQUMsZ0VBQUQ7QUFDQyxhQUFTLEVBQUMsMkJBRFg7QUFFQyxXQUFPLEVBQUcsaUJBQUU3VSxLQUFGO0FBQUEsYUFBYTZVLE1BQU0sQ0FBRTdVLEtBQUYsQ0FBbkI7QUFBQSxLQUZYO0FBR0MsY0FBVSxFQUFHLG9CQUFFQSxLQUFGO0FBQUEsYUFBYTZVLE1BQU0sQ0FBRTdVLEtBQUYsQ0FBbkI7QUFBQSxLQUhkO0FBSUMsV0FBTyxFQUFHOFUsVUFBVSxDQUFDRyxPQUp0QjtBQUtDLGlCQUFhLEVBQUdILFVBQVUsQ0FBQ0ksZUFMNUI7QUFNQyxRQUFJLEVBQUcsb0JBQUMsaUVBQUQ7QUFBYyxVQUFJLEVBQUM7QUFBbkI7QUFOUixJQURzQixHQVNwQixJQVRIO0FBVUEsU0FDQztBQUFLLGFBQVMsRUFBR3phO0FBQWpCLEtBRUVrYSxVQUFVLElBQ1Q7QUFBSyxhQUFTLEVBQUM7QUFBZixLQUNHQSxVQURILENBSEgsRUFRQztBQUFLLGFBQVMsRUFBQztBQUFmLEtBQ0M7QUFBSyxhQUFTLEVBQUM7QUFBZixLQUNHRCxJQUFJLENBQUN2UCxRQUFMLENBQWUsTUFBZixDQURILENBREQsRUFJQztBQUFLLGFBQVMsRUFBQztBQUFmLEtBQ0d1UCxJQUFJLENBQUN2UCxRQUFMLENBQWUsTUFBZixDQURILENBSkQsRUFPQztBQUFLLGFBQVMsRUFBQztBQUFmLElBUEQsRUFRQztBQUFLLGFBQVMsRUFBQztBQUFmLEtBQ0d1UCxJQUFJLENBQUN2UCxRQUFMLENBQWUsSUFBZixDQURILENBUkQsRUFXQztBQUFLLGFBQVMsRUFBQztBQUFmLEtBQ0d1UCxJQUFJLENBQUN2UCxRQUFMLENBQWUsTUFBZixDQURILENBWEQsRUFlRTRQLFFBQVEsSUFDUDtBQUFLLGFBQVMsRUFBQztBQUFmLEtBQ0dMLElBQUksQ0FBQ3ZQLFFBQUwsQ0FBZSxRQUFmLENBREgsQ0FoQkgsQ0FSRCxFQStCRXlQLFVBQVUsSUFDVDtBQUFLLGFBQVMsRUFBQztBQUFmLEtBQ0dBLFVBREgsQ0FoQ0gsRUFxQ0dJLGNBckNILENBREQ7QUF5Q0EsQ0FyRUQ7O0FBdUVBUCxrQkFBa0IsQ0FBQzlaLFNBQW5CLEdBQStCO0FBQzlCK1osTUFBSSxFQUFFemIsaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDMUJwSSxpREFBUyxDQUFDZ0YsTUFEZ0IsRUFFMUJoRixpREFBUyxDQUFDa2MsVUFBVixDQUFzQkMscUVBQXRCLENBRjBCLENBQXJCLENBRHdCO0FBSzlCM2EsV0FBUyxFQUFFeEIsaURBQVMsQ0FBQ0csTUFMUztBQU05QnViLFlBQVUsRUFBRTFiLGlEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQ2hDcEksaURBQVMsQ0FBQ0UsS0FEc0IsRUFFaENGLGlEQUFTLENBQUNnRixNQUZzQixFQUdoQ2hGLGlEQUFTLENBQUNHLE1BSHNCLENBQXJCLENBTmtCO0FBVzlCd2IsWUFBVSxFQUFFM2IsaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDaENwSSxpREFBUyxDQUFDRSxLQURzQixFQUVoQ0YsaURBQVMsQ0FBQ2dGLE1BRnNCLEVBR2hDaEYsaURBQVMsQ0FBQ0csTUFIc0IsQ0FBckIsQ0FYa0I7QUFnQjlCeWIsUUFBTSxFQUFFNWIsaURBQVMsQ0FBQzJCLElBaEJZO0FBaUI5QmthLFlBQVUsRUFBRTdiLGlEQUFTLENBQUNnRixNQWpCUTtBQWtCOUI4VyxVQUFRLEVBQUU5YixpREFBUyxDQUFDQztBQWxCVSxDQUEvQjtBQXFCZXViLGlGQUFmLEU7Ozs7Ozs7Ozs7OztBQ3pIQTtBQUNBLGtCQUFrQixxZ0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0RsQjs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFhQSxJQUFNWSxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLE9BUW5CO0FBQUEsTUFQTkMsU0FPTSxRQVBOQSxTQU9NO0FBQUEsTUFOTkMsT0FNTSxRQU5OQSxPQU1NO0FBQUEsNkJBTE5aLFVBS007QUFBQSxNQUxOQSxVQUtNLGdDQUxPLEVBS1A7QUFBQSw2QkFKTkMsVUFJTTtBQUFBLE1BSk5BLFVBSU0sZ0NBSk8sRUFJUDtBQUFBLDRCQUhObmEsU0FHTTtBQUFBLE1BSE5BLFNBR00sK0JBSE0sRUFHTjtBQUFBLDJCQUZOb0QsUUFFTTtBQUFBLE1BRk5BLFFBRU0sOEJBRkssTUFFTDtBQUFBLDJCQUROa1gsUUFDTTtBQUFBLE1BRE5BLFFBQ00sOEJBREssS0FDTDs7QUFDTixNQUNDTyxTQUFTLENBQUNuUSxRQUFWLENBQW9CLFVBQXBCLE1BQXFDb1EsT0FBTyxDQUFDcFEsUUFBUixDQUFrQixVQUFsQixDQUR0QyxFQUVFO0FBQ0QsV0FDQyxvQkFBQyw2REFBRDtBQUNDLFVBQUksRUFBR21RLFNBRFI7QUFFQyxlQUFTLEVBQUc3YSxTQUZiO0FBR0MsY0FBUSxFQUFHb0QsUUFIWjtBQUlDLGNBQVEsRUFBR2tYLFFBSlo7QUFLQyxnQkFBVSxNQUxYO0FBTUMsZ0JBQVUsRUFDVCxvQkFBQyw2REFBRDtBQUNDLFdBQUcsRUFBRyxVQURQO0FBRUMsWUFBSSxFQUFHUSxPQUZSO0FBR0Msa0JBQVUsRUFBRzdhLDhEQUFFLENBQUUsSUFBRixFQUFRLGdCQUFSLENBSGhCO0FBSUMsZ0JBQVEsRUFBR3FhLFFBSlo7QUFLQyxrQkFBVSxFQUFHSDtBQUxkO0FBUEYsTUFERDtBQWtCQTs7QUFDRCxNQUFJWSxJQUFJLEdBQUdGLFNBQVMsQ0FBQ25RLFFBQVYsQ0FBb0IsV0FBcEIsQ0FBWDtBQUNBcVEsTUFBSSxJQUFJRCxPQUFPLENBQUNwUSxRQUFSLENBQWtCLFFBQWxCLENBQVI7QUFDQXdQLFlBQVUsR0FBR0EsVUFBVSxHQUFHQSxVQUFILEdBQWdCLHlDQUF2QztBQUNBLFNBQ0Msb0JBQUMsNkRBQUQ7QUFDQyxRQUFJLEVBQUdXLFNBRFI7QUFFQyxhQUFTLEVBQUc3YSxTQUZiO0FBR0MsY0FBVSxFQUFHa2EsVUFIZDtBQUlDLGNBQVUsRUFBRyxDQUFFYSxJQUFGLEVBQVFaLFVBQVIsQ0FKZDtBQUtDLFlBQVEsRUFBRy9XO0FBTFosSUFERDtBQVNBLENBM0NEOztBQTZDQXdYLGlCQUFpQixDQUFDMWEsU0FBbEIsR0FBOEI7QUFDN0IyYSxXQUFTLEVBQUVyYyxpREFBUyxDQUFDb0ksU0FBVixDQUFxQixDQUMvQnBJLGlEQUFTLENBQUNnRixNQURxQixFQUUvQmhGLGlEQUFTLENBQUNrYyxVQUFWLENBQXNCQyxxRUFBdEIsQ0FGK0IsQ0FBckIsRUFHUHZhLFVBSnlCO0FBSzdCMGEsU0FBTyxFQUFFdGMsaURBQVMsQ0FBQ2tjLFVBQVYsQ0FBc0JDLHFFQUF0QixFQUFpQ3ZhLFVBTGI7QUFNN0I4WixZQUFVLEVBQUUxYixpREFBUyxDQUFDb0ksU0FBVixDQUFxQixDQUNoQ3BJLGlEQUFTLENBQUNFLEtBRHNCLEVBRWhDRixpREFBUyxDQUFDZ0YsTUFGc0IsRUFHaENoRixpREFBUyxDQUFDRyxNQUhzQixDQUFyQixDQU5pQjtBQVc3QndiLFlBQVUsRUFBRTNiLGlEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQ2hDcEksaURBQVMsQ0FBQ0UsS0FEc0IsRUFFaENGLGlEQUFTLENBQUNnRixNQUZzQixFQUdoQ2hGLGlEQUFTLENBQUNHLE1BSHNCLENBQXJCLENBWGlCO0FBZ0I3QnFCLFdBQVMsRUFBRXhCLGlEQUFTLENBQUNHLE1BaEJRO0FBaUI3QnlFLFVBQVEsRUFBRTVFLGlEQUFTLENBQUNHLE1BakJTO0FBa0I3QjJiLFVBQVEsRUFBRTliLGlEQUFTLENBQUNDO0FBbEJTLENBQTlCO0FBcUJlbWMsZ0ZBQWYsRTs7Ozs7Ozs7Ozs7O0FDN0ZBO0FBQ0Esa0JBQWtCLG1tQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0RsQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBRUE7Ozs7Ozs7Ozs7OztJQVdNSSxnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZMQXNCVSxVQUFFSCxTQUFGLEVBQWFJLFdBQWIsRUFBOEI7QUFDNUMsYUFBT1AsNkVBQVUsQ0FBRUcsU0FBRixFQUFhLGdCQUFiLENBQVYsR0FDTjtBQUFLLGlCQUFTLEVBQUM7QUFBZixTQUNHLE1BQUtLLGtCQUFMLENBQXlCTCxTQUF6QixFQUFvQ0ksV0FBcEMsQ0FESCxDQURNLEdBSUgsSUFKSjtBQUtBLEs7OzJMQVVZLFVBQUVILE9BQUYsRUFBV0csV0FBWCxFQUE0QjtBQUN4QyxhQUFPUCw2RUFBVSxDQUFFSSxPQUFGLEVBQVcsZ0JBQVgsQ0FBVixHQUNOO0FBQUssaUJBQVMsRUFBQztBQUFmLFNBQ0csTUFBS0ksa0JBQUwsQ0FBeUJKLE9BQXpCLEVBQWtDRyxXQUFsQyxFQUErQyxLQUEvQyxDQURILENBRE0sR0FJSCxJQUpKO0FBS0EsSzs7MkxBVVksVUFBRUosU0FBRixFQUFhQyxPQUFiLEVBQTBCO0FBQ3RDLGFBQU9ELFNBQVMsSUFBSUMsT0FBYixHQUNOO0FBQUssaUJBQVMsRUFBQztBQUFmLFNBQ0c3YSwrREFBRSxDQUFFLElBQUYsRUFBUSxnQkFBUixDQURMLENBRE0sR0FJSCxJQUpKO0FBS0EsSzs7bU1BV29CLFVBQUVnYSxJQUFGLEVBQVFnQixXQUFSLEVBQStDO0FBQUE7O0FBQUEsVUFBMUJFLFVBQTBCLHVFQUFiLE9BQWE7QUFDbkUsVUFBTUMsU0FBUyxHQUFHL2Msa0RBQVU7QUFDM0Isc0NBQThCO0FBREgsbUlBRUM4YyxVQUZELEdBRWtCLElBRmxCLDZGQUd6QkYsV0FIeUIsRUFHVkEsV0FBVyxLQUFLLEVBSE4sZ0JBQTVCO0FBS0EsYUFDQyxvQkFBQyw4REFBRDtBQUFTLFlBQUksRUFBR2hCLElBQUksQ0FBQ3ZQLFFBQUwsQ0FBZSxNQUFmO0FBQWhCLFNBQ0M7QUFBSyxpQkFBUyxFQUFHMFE7QUFBakIsU0FDQztBQUFLLGlCQUFTLEVBQUc7QUFBakIsU0FDR25CLElBQUksQ0FBQ3ZQLFFBQUwsQ0FBZSxLQUFmLENBREgsQ0FERCxFQUlDO0FBQUssaUJBQVMsRUFBRztBQUFqQixTQUNHdVAsSUFBSSxDQUFDdlAsUUFBTCxDQUFlLElBQWYsQ0FESCxDQUpELENBREQsQ0FERDtBQVlBLEs7Ozs7Ozs7NkJBRVE7QUFBQSx3QkFPSixLQUFLN00sS0FQRDtBQUFBLDhDQUVQZ2QsU0FGTztBQUFBLFVBRVBBLFNBRk8sc0NBRUssSUFGTDtBQUFBLDRDQUdQQyxPQUhPO0FBQUEsVUFHUEEsT0FITyxvQ0FHRyxJQUhIO0FBQUEseUNBSVB6WCxJQUpPO0FBQUEsVUFJUEEsSUFKTyxpQ0FJQSxPQUpBO0FBQUEsOENBS1A0WCxXQUxPO0FBQUEsVUFLUEEsV0FMTyxzQ0FLTyxFQUxQO0FBQUEsVUFNSkksVUFOSTs7QUFRUixVQUFNcmIsU0FBUyxHQUFHM0Isa0RBQVUsQ0FBQztBQUM1Qix5Q0FBaUM7QUFETix5Q0FFQ2dGLElBRkQsR0FFWSxJQUZaLEVBQTVCO0FBS0EsYUFDQztBQUFLLGlCQUFTLEVBQUdyRDtBQUFqQixTQUFrQ3FiLFVBQWxDLEdBQ0csS0FBS0MsWUFBTCxDQUFtQlQsU0FBbkIsRUFBOEJJLFdBQTlCLENBREgsRUFFRyxLQUFLTSxVQUFMLENBQWlCVixTQUFqQixFQUE0QkMsT0FBNUIsQ0FGSCxFQUdHLEtBQUtVLFVBQUwsQ0FBaUJWLE9BQWpCLEVBQTBCRyxXQUExQixDQUhILENBREQ7QUFPQTs7OztFQS9HNkIxYyw0RDs7NkVBQXpCeWMsZ0IsZUFDYztBQUNsQkgsV0FBUyxFQUFFcmMsa0RBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDL0JwSSxrREFBUyxDQUFDZ0YsTUFEcUIsRUFFL0JoRixrREFBUyxDQUFDa2MsVUFBVixDQUFzQm5RLDRFQUF0QixDQUYrQixDQUFyQixDQURPO0FBS2xCdVEsU0FBTyxFQUFFdGMsa0RBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDN0JwSSxrREFBUyxDQUFDZ0YsTUFEbUIsRUFFN0JoRixrREFBUyxDQUFDa2MsVUFBVixDQUFzQm5RLDRFQUF0QixDQUY2QixDQUFyQixDQUxTO0FBU2xCbEgsTUFBSSxFQUFFN0Usa0RBQVMsQ0FBQytFLEtBQVYsQ0FBaUIsQ0FBRSxNQUFGLEVBQVUsT0FBVixFQUFtQixRQUFuQixFQUE2QixLQUE3QixDQUFqQixDQVRZO0FBVWxCMFgsYUFBVyxFQUFFemMsa0RBQVMsQ0FBQ0c7QUFWTCxDOztBQWlITHFjLCtFQUFmLEU7Ozs7Ozs7Ozs7OztBQzdJQTtBQUNBLGtCQUFrQixxcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEbEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUVBOzs7Ozs7Ozs7Ozs7OztBQWFBLElBQU1TLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBcUIsT0FRcEI7QUFBQSxNQVBOeEIsSUFPTSxRQVBOQSxJQU9NO0FBQUEsTUFOTkMsVUFNTSxRQU5OQSxVQU1NO0FBQUEsTUFMTkMsVUFLTSxRQUxOQSxVQUtNO0FBQUEsNEJBSk5uYSxTQUlNO0FBQUEsTUFKTkEsU0FJTSwrQkFKTSxFQUlOO0FBQUEsMkJBSE5vRCxRQUdNO0FBQUEsTUFITkEsUUFHTSw4QkFISyxNQUdMO0FBQUEsNkJBRk5zWSxVQUVNO0FBQUEsTUFGTkEsVUFFTSxnQ0FGTyxLQUVQO0FBQUEsMkJBRE5wQixRQUNNO0FBQUEsTUFETkEsUUFDTSw4QkFESyxLQUNMO0FBRU50YSxXQUFTLEdBQUczQixpREFBVSxDQUNyQjJCLFNBRHFCLEVBRXJCLGlDQUZxQixFQUdyQjtBQUNDLHVCQUFtQm9ELFFBQVEsS0FBSyxNQURqQztBQUVDLHdCQUFvQkEsUUFBUSxLQUFLO0FBRmxDLEdBSHFCLENBQXRCO0FBUUEsTUFBTXVZLFVBQVUsR0FDZixvQkFBQywyREFBRCxRQUVFekIsVUFBVSxJQUNUO0FBQUssYUFBUyxFQUFDO0FBQWYsS0FDR0EsVUFESCxDQUhILEVBUUM7QUFBSyxhQUFTLEVBQUM7QUFBZixLQUNDO0FBQUssYUFBUyxFQUFDO0FBQWYsS0FDR0QsSUFBSSxDQUFDdlAsUUFBTCxDQUFlLE1BQWYsQ0FESCxDQURELEVBSUM7QUFBSyxhQUFTLEVBQUM7QUFBZixLQUNDO0FBQU0sYUFBUyxFQUFDO0FBQWhCLEtBQ0d1UCxJQUFJLENBQUN2UCxRQUFMLENBQWUsS0FBZixDQURILENBREQsRUFJQztBQUFNLGFBQVMsRUFBQztBQUFoQixLQUNHdVAsSUFBSSxDQUFDdlAsUUFBTCxDQUFlLElBQWYsQ0FESCxDQUpELENBSkQsRUFZQztBQUFLLGFBQVMsRUFBQztBQUFmLEtBQ0d1UCxJQUFJLENBQUN2UCxRQUFMLENBQWUsTUFBZixDQURILEVBR0M0UCxRQUFRLElBQ1A7QUFBTSxhQUFTLEVBQUM7QUFBaEIsYUFDU0wsSUFBSSxDQUFDdlAsUUFBTCxDQUFlLFFBQWYsQ0FEVCxDQUpGLENBWkQsRUF1QkV5UCxVQUFVLElBQ1Q7QUFBSyxhQUFTLEVBQUM7QUFBZixLQUNHQSxVQURILENBeEJILENBUkQsQ0FERDtBQXlDQSxTQUFPdUIsVUFBVSxHQUNoQjtBQUFLLGFBQVMsRUFBRzFiO0FBQWpCLEtBQStCMmIsVUFBL0IsQ0FEZ0IsR0FFYkEsVUFGSjtBQUdBLENBOUREOztBQWdFQUYsa0JBQWtCLENBQUN2YixTQUFuQixHQUErQjtBQUM5QitaLE1BQUksRUFBRXpiLGlEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQzFCcEksaURBQVMsQ0FBQ2dGLE1BRGdCLEVBRTFCaEYsaURBQVMsQ0FBQ2tjLFVBQVYsQ0FBc0JDLHFFQUF0QixDQUYwQixDQUFyQixFQUdGdmEsVUFKMEI7QUFLOUI4WixZQUFVLEVBQUUxYixpREFBUyxDQUFDb0ksU0FBVixDQUFxQixDQUNoQ3BJLGlEQUFTLENBQUNFLEtBRHNCLEVBRWhDRixpREFBUyxDQUFDZ0YsTUFGc0IsRUFHaENoRixpREFBUyxDQUFDRyxNQUhzQixDQUFyQixDQUxrQjtBQVU5QndiLFlBQVUsRUFBRTNiLGlEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQ2hDcEksaURBQVMsQ0FBQ0UsS0FEc0IsRUFFaENGLGlEQUFTLENBQUNnRixNQUZzQixFQUdoQ2hGLGlEQUFTLENBQUNHLE1BSHNCLENBQXJCLENBVmtCO0FBZTlCcUIsV0FBUyxFQUFFeEIsaURBQVMsQ0FBQ0csTUFmUztBQWdCOUJ5RSxVQUFRLEVBQUU1RSxpREFBUyxDQUFDRyxNQWhCVTtBQWlCOUIrYyxZQUFVLEVBQUVsZCxpREFBUyxDQUFDQyxJQWpCUTtBQWtCOUI2YixVQUFRLEVBQUU5YixpREFBUyxDQUFDQztBQWxCVSxDQUEvQjtBQXFCZWdkLGlGQUFmLEU7Ozs7Ozs7Ozs7OztBQy9HQTtBQUNBLGtCQUFrQixpZ0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRGxCOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUVBOzs7Ozs7Ozs7SUFRTUcsWTs7Ozs7Ozs7Ozs7Ozs2QkFVSTtBQUFBLHdCQU1KLEtBQUsvZCxLQU5EO0FBQUEsVUFFUGdlLFNBRk8sZUFFUEEsU0FGTztBQUFBLDhDQUdQcEIsZUFITztBQUFBLFVBR1BBLGVBSE8sc0NBR1csVUFIWDtBQUFBLDBDQUlQcFQsS0FKTztBQUFBLFVBSVBBLEtBSk8sa0NBSUMsQ0FKRDtBQUFBLFVBS0pnVSxVQUxJOztBQUFBLFVBT0ZyYixTQVBFLEdBT1ksS0FBS25DLEtBUGpCLENBT0ZtQyxTQVBFO0FBUVIsYUFBT3FiLFVBQVUsQ0FBQ3JiLFNBQWxCO0FBQ0FBLGVBQVMsR0FBR0EsU0FBUyxhQUFPQSxTQUFQLFNBQXVCLEVBQTVDO0FBQ0FBLGVBQVMsZ0NBQTBCcUgsS0FBMUIsQ0FBVDtBQUNBckgsZUFBUyxJQUFJLDhCQUFiO0FBQ0EsYUFDQyxvQkFBQyxtRUFBRDtBQUNDLGdCQUFRLEVBQUdxSCxLQURaO0FBRUMsaUJBQVMsRUFBR3JILFNBRmI7QUFHQyxxQkFBYSxFQUFHeWEsZUFIakI7QUFJQyxnQkFBUSxFQUFHb0I7QUFKWixTQUtNUixVQUxOLEVBREQ7QUFTQTs7OztFQS9CeUI5Yyw0RDs7NkVBQXJCcWQsWSxlQUNjO0FBQ2xCQyxXQUFTLEVBQUVyZCxpREFBUyxDQUFDc0ksT0FBVixDQUFtQnRJLGlEQUFTLENBQUNnRixNQUE3QixFQUFzQ3BELFVBRC9CO0FBRWxCSixXQUFTLEVBQUV4QixpREFBUyxDQUFDRyxNQUFWLENBQWlCeUIsVUFGVjtBQUdsQm9hLFNBQU8sRUFBRWhjLGlEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQUhSO0FBSWxCaUgsT0FBSyxFQUFFN0ksaURBQVMsQ0FBQ3FJLE1BSkM7QUFLbEJsRixVQUFRLEVBQUVuRCxpREFBUyxDQUFDRyxNQUxGO0FBTWxCOGIsaUJBQWUsRUFBRWpjLGlEQUFTLENBQUNHO0FBTlQsQzs7QUFpQ0xpZCwyRUFBZixFOzs7Ozs7Ozs7Ozs7QUNuREE7QUFDQSxrQkFBa0IsbW1COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0RsQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztJQVNNRSxrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZMQWlDVSxnQkFBMkQ7QUFBQSxVQUF2RDVkLEVBQXVELFFBQXZEQSxFQUF1RDtBQUFBLFVBQW5EYSxLQUFtRCxRQUFuREEsS0FBbUQ7QUFBQSxVQUE1QzBJLEtBQTRDLFFBQTVDQSxLQUE0QztBQUFBLGdDQUFyQ3pILFNBQXFDO0FBQUEsVUFBckNBLFNBQXFDLCtCQUF6QixFQUF5QjtBQUFBLCtCQUFyQitiLFFBQXFCO0FBQUEsVUFBckJBLFFBQXFCLDhCQUFWLEVBQVU7QUFDekV0VSxXQUFLLEdBQUdBLEtBQUssS0FBSyxLQUFWLElBQW1CQSxLQUFLLEtBQUt1VSxRQUE3QixHQUNQO0FBQU0saUJBQVMsRUFBRztBQUFsQixrQkFETyxHQUVQdlUsS0FGRDtBQUdBQSxXQUFLLEdBQUcsQ0FBRTFKLHVEQUFPLENBQUVnZSxRQUFGLENBQVQsR0FDUCxvQkFBQywrRUFBRDtBQUNDLGNBQU0sRUFBRzdkLEVBRFY7QUFFQyxhQUFLLEVBQUd1SjtBQUZULFNBR01zVSxRQUhOLEVBRE8sR0FNUHRVLEtBTkQ7QUFPQSxhQUNDO0FBQUssaUJBQVMsa0NBQTZCdkosRUFBN0Isa0JBQXlDOEIsU0FBekM7QUFBZCxTQUNDO0FBQUssaUJBQVMsd0NBQW1DOUIsRUFBbkM7QUFBZCxTQUNHYSxLQURILENBREQsRUFJQztBQUFLLGlCQUFTLHdDQUFtQ2IsRUFBbkM7QUFBZCxTQUNHdUosS0FESCxDQUpELENBREQ7QUFVQSxLOztpTUFRa0IsWUFBTTtBQUN4QixhQUNDO0FBQUssWUFBSSxFQUFDLFdBQVY7QUFDQyxpQkFBUyxFQUFDO0FBRFgsUUFERDtBQUtBLEs7Ozs7Ozs7NkJBRVE7QUFBQTs7QUFBQSxVQUNBd1UsT0FEQSxHQUNZLEtBQUtwZSxLQURqQixDQUNBb2UsT0FEQTtBQUFBLFVBRUZqYyxTQUZFLEdBRVksS0FBS25DLEtBRmpCLENBRUZtQyxTQUZFO0FBR1JBLGVBQVMsR0FBRzNCLGtEQUFVLENBQUUyQixTQUFGLEVBQWEsNkJBQWIsQ0FBdEI7QUFDQSxhQUNDO0FBQUssaUJBQVMsRUFBR0E7QUFBakIsU0FFRWljLE9BQU8sQ0FBQ2hlLEdBQVIsQ0FDQyxVQUFFaWUsTUFBRixFQUFVN1UsS0FBVixFQUFxQjtBQUNwQixlQUNDLG9CQUFDLDJEQUFEO0FBQVUsYUFBRyxFQUFHQTtBQUFoQixXQUNHLE1BQUksQ0FBQzhVLFlBQUwsQ0FBbUJELE1BQW5CLENBREgsRUFHRTdVLEtBQUssS0FBSzRVLE9BQU8sQ0FBQzdaLE1BQVIsR0FBaUIsQ0FBM0IsR0FDQyxNQUFJLENBQUNnYSxnQkFBTCxFQURELEdBRUMsSUFMSCxDQUREO0FBVUEsT0FaRixDQUZGLENBREQ7QUFvQkE7Ozs7RUE5RitCN2QsNEQ7OzZFQUEzQnVkLGtCLGVBQ2M7QUFDbEJHLFNBQU8sRUFBRXpkLGlEQUFTLENBQUNzSSxPQUFWLENBQ1J0SSxpREFBUyxDQUFDeUosS0FBVixDQUFpQjtBQUNoQi9KLE1BQUUsRUFBRU0saURBQVMsQ0FBQ0csTUFBVixDQUFpQnlCLFVBREw7QUFFaEJyQixTQUFLLEVBQUVQLGlEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQUZSO0FBR2hCcUgsU0FBSyxFQUFFakosaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDM0JwSSxpREFBUyxDQUFDQyxJQURpQixFQUUzQkQsaURBQVMsQ0FBQ3FJLE1BRmlCLEVBRzNCckksaURBQVMsQ0FBQ2dGLE1BSGlCLEVBSTNCaEYsaURBQVMsQ0FBQ0csTUFKaUIsQ0FBckIsRUFLSHlCLFVBUlk7QUFTaEJKLGFBQVMsRUFBRXhCLGlEQUFTLENBQUNHLE1BVEw7QUFVaEJvZCxZQUFRLEVBQUV2ZCxpREFBUyxDQUFDeUosS0FBVixDQUFpQjtBQUMxQkMsY0FBUSxFQUFFMUosaURBQVMsQ0FBQzJCLElBQVYsQ0FBZUMsVUFEQztBQUUxQjhTLGlCQUFXLEVBQUUxVSxpREFBUyxDQUFDRztBQUZHLEtBQWpCO0FBVk0sR0FBakIsQ0FEUSxFQWdCUHlCLFVBakJnQjtBQWtCbEJKLFdBQVMsRUFBRXhCLGlEQUFTLENBQUNHO0FBbEJILEM7O0FBZ0dMbWQsaUZBQWYsRTs7Ozs7Ozs7Ozs7O0FDeEhBO0FBQ0Esa0JBQWtCLHViOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0RsQjs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFNTyxVQUFVLEdBQUcsU0FBYkEsVUFBYSxPQVFaO0FBQUEsTUFQTnJOLFFBT00sUUFQTkEsUUFPTTtBQUFBLE1BTk5zTixjQU1NLFFBTk5BLGNBTU07QUFBQSxNQUxOQyxjQUtNLFFBTE5BLGNBS007QUFBQSxNQUpOdmMsU0FJTSxRQUpOQSxTQUlNO0FBQUEsdUJBSE53YyxJQUdNO0FBQUEsTUFITkEsSUFHTSwwQkFIQyxNQUdEO0FBQUEsZ0NBRk5DLGFBRU07QUFBQSxNQUZOQSxhQUVNLG1DQUZVLEVBRVY7QUFBQSxNQURIcEIsVUFDRzs7QUFDTnJNLFVBQVEsR0FBRzNQLEtBQUssQ0FBQ0MsT0FBTixDQUFlMFAsUUFBZixJQUE0QkEsUUFBNUIsR0FBdUMsRUFBbEQsQ0FETSxDQUVOOztBQUNBQSxVQUFRLEdBQUcwTixzREFBTyxDQUFFMU4sUUFBRixFQUFZckksU0FBWixDQUFsQjtBQUNBM0csV0FBUyxHQUFHM0IsaURBQVUsQ0FBRSx1QkFBRixFQUEyQjJCLFNBQTNCLENBQXRCO0FBQ0EsTUFBSTJjLFVBQVUsR0FBR0gsSUFBSSxLQUFLLE1BQVQsR0FDaEIsb0JBQUMsY0FBRDtBQUNDLFlBQVEsRUFBR3hOLFFBRFo7QUFFQyxhQUFTLEVBQUdoUDtBQUZiLEtBR01xYixVQUhOLEVBRGdCLEdBT2hCLG9CQUFDLGNBQUQ7QUFDQyxZQUFRLEVBQUdyTSxRQURaO0FBRUMsYUFBUyxFQUFHaFA7QUFGYixLQUdNcWIsVUFITixFQVBEOztBQWFBLE1BQUtyTSxRQUFRLENBQUM1TSxNQUFULEtBQW9CLENBQXpCLEVBQTZCO0FBQzVCcWEsaUJBQWEsR0FBR0EsYUFBYSxLQUFLLEVBQWxCLEdBQ2ZBLGFBRGUsR0FFZnhjLDhEQUFFLENBQUUsa0JBQUYsRUFBc0IsZ0JBQXRCLENBRkg7QUFHQTBjLGNBQVUsR0FDVDtBQUFLLGVBQVMsRUFBQztBQUFmLE9BQ0dGLGFBREgsQ0FERDtBQUtBOztBQUNELFNBQU9FLFVBQVA7QUFDQSxDQXJDRDs7QUF1Q2VDLDZKQUErQixDQUFFUCxVQUFGLENBQTlDLEU7Ozs7Ozs7Ozs7OztBQ25FQTtBQUNBLGtCQUFrQix5Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRGxCOzs7QUFHQTtBQUtBO0FBRUE7Ozs7QUFHQTtBQUVBOzs7Ozs7Ozs7QUFRZTFZLG9KQUEwQixDQUN4Q0Ysa0VBQU8sQ0FBRSxDQUNSQyxpRUFEUSxFQUVSLFVBQUVtWixNQUFGLEVBQWM7QUFDYjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBLGlDQUNVO0FBQUEsNEJBSUosS0FBS2hmLEtBSkQ7QUFBQSxjQUVQZ0csVUFGTyxlQUVQQSxVQUZPO0FBQUEsY0FHSndYLFVBSEk7O0FBS1IsaUJBQ0M7QUFBSyxjQUFFLGtDQUE2QnhYLFVBQTdCLENBQVA7QUFDRSxxQkFBUyxFQUFDO0FBRFosYUFHQztBQUFLLHFCQUFTLEVBQUM7QUFBZixZQUhELEVBS0M7QUFBSyxxQkFBUyxFQUFDO0FBQWYsYUFDQyxvQkFBQyxNQUFELEVBQWF3WCxVQUFiLENBREQsQ0FMRCxDQUREO0FBV0E7QUFqQkY7O0FBQUE7QUFBQSxNQUFzQzljLDREQUF0QztBQUFBO0FBbUJBLENBdEJPLENBQUYsQ0FEaUMsRUF5QnhDLHNCQXpCd0MsQ0FBekMsRTs7Ozs7Ozs7Ozs7O0FDdkJBO0FBQ0Esa0JBQWtCLHlKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRGxCOzs7QUFHQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUVBOzs7Ozs7Ozs7Ozs7OztBQWFBLElBQU11ZSxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLE9BUWhCO0FBQUE7O0FBQUEsTUFQTi9jLFVBT00sUUFQTkEsVUFPTTtBQUFBLE1BTk5nZCxJQU1NLFFBTk5BLElBTU07QUFBQSxNQUxObmQsT0FLTSxRQUxOQSxPQUtNO0FBQUEsTUFKTnlELElBSU0sUUFKTkEsSUFJTTtBQUFBLE1BSE5DLEtBR00sUUFITkEsS0FHTTtBQUFBLE1BRk50RCxTQUVNLFFBRk5BLFNBRU07QUFBQSxNQURIa0QsV0FDRzs7QUFDTmxELFdBQVMsR0FBRzNCLGlEQUFVLDhHQUNuQjJCLFNBRG1CLEVBQ0xBLFNBREssNkZBRXJCLGNBRnFCLEVBRUwsSUFGSyw2RkFHckIsa0JBSHFCLEVBR0RzRCxLQUFLLEtBQUssUUFIVCw2RkFJckIsbUJBSnFCLEVBSUFBLEtBQUssS0FBSyxTQUpWLDZGQUtyQixtQkFMcUIsRUFLQUEsS0FBSyxLQUFLLFNBTFYsNkZBTXJCLHFCQU5xQixFQU1FQSxLQUFLLEtBQUssV0FOWiw2RkFPckIsZ0JBUHFCLEVBT0hELElBQUksS0FBSyxNQVBOLDZGQVFyQixpQkFScUIsRUFRRkEsSUFBSSxLQUFLLE9BUlAsNkZBU3JCLGVBVHFCLEVBU0pBLElBQUksS0FBSyxLQVRMLDZGQVVyQixnQkFWcUIsRUFVSEEsSUFBSSxLQUFLLE1BVk4sZ0JBQXRCO0FBWUEsTUFBSTJaLFFBQVEsR0FBRyxFQUFmOztBQUNBLFVBQVMzWixJQUFUO0FBQ0MsU0FBSyxNQUFMO0FBQ0MyWixjQUFRLEdBQUcsRUFBWDtBQUNBOztBQUNELFNBQUssT0FBTDtBQUNDQSxjQUFRLEdBQUcsRUFBWDtBQUNBOztBQUNELFNBQUssS0FBTDtBQUNDQSxjQUFRLEdBQUcsRUFBWDtBQUNBOztBQUNELFNBQUssTUFBTDtBQUNDQSxjQUFRLEdBQUcsRUFBWDtBQUNBO0FBWkY7O0FBY0EsTUFBS0QsSUFBTCxFQUFZO0FBQ1hBLFFBQUksR0FDSDtBQUFNLGVBQVMsRUFBQztBQUFoQixPQUNDLG9CQUFDLDhDQUFEO0FBQWMsVUFBSSxFQUFHQSxJQUFyQjtBQUE0QixVQUFJLEVBQUdDO0FBQW5DLE1BREQsQ0FERDtBQUtBLEdBTkQsTUFNTztBQUNOaGQsYUFBUyxJQUFJLFlBQWI7QUFDQTs7QUFDRCxTQUNDLHdHQUFha0QsV0FBYjtBQUEyQixhQUFTLEVBQUdsRCxTQUF2QztBQUFtRCxXQUFPLEVBQUdKO0FBQTdELE1BQ0M7QUFBTSxhQUFTLEVBQUM7QUFBaEIsS0FBOEJHLFVBQTlCLENBREQsRUFDb0RnZCxJQURwRCxDQUREO0FBS0EsQ0FsREQ7O0FBb0RBRCxjQUFjLENBQUM1YyxTQUFmLEdBQTJCO0FBQzFCSCxZQUFVLEVBQUV2QixpREFBUyxDQUFDRyxNQUFWLENBQWlCeUIsVUFESDtBQUUxQlIsU0FBTyxFQUFFcEIsaURBQVMsQ0FBQzJCLElBQVYsQ0FBZUMsVUFGRTtBQUcxQjJjLE1BQUksRUFBRXZlLGlEQUFTLENBQUNHLE1BSFU7QUFJMUIwRSxNQUFJLEVBQUU3RSxpREFBUyxDQUFDRyxNQUpVO0FBSzFCMkUsT0FBSyxFQUFFOUUsaURBQVMsQ0FBQ0csTUFMUztBQU0xQnFCLFdBQVMsRUFBRXhCLGlEQUFTLENBQUNHO0FBTkssQ0FBM0I7QUFTQW1lLGNBQWMsQ0FBQ3pjLFlBQWYsR0FBOEI7QUFDN0IwYyxNQUFJLEVBQUUsRUFEdUI7QUFFN0IxWixNQUFJLEVBQUUsU0FGdUI7QUFHN0JDLE9BQUssRUFBRSxTQUhzQjtBQUk3QnRELFdBQVMsRUFBRTtBQUprQixDQUE5QjtBQU9lOGMsNkVBQWYsRTs7Ozs7Ozs7Ozs7OztBQzVGQTtBQUFBOzs7OztBQUtBLElBQU1HLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUI7QUFBQSxNQUFJMWMsUUFBSixRQUFJQSxRQUFKO0FBQUEsU0FBb0JBLFFBQXBCO0FBQUEsQ0FBN0I7O0FBRWUwYyxtRkFBZixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDUEE7OztBQUdBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsSUFBTUMsWUFBWSxHQUFHLFNBQWZBLFlBQWUsT0FXZDtBQUFBOztBQUFBLE1BVk43VixLQVVNLFFBVk5BLEtBVU07QUFBQSxNQVRObkosRUFTTSxRQVROQSxFQVNNO0FBQUEsTUFSTnNjLE9BUU0sUUFSTkEsT0FRTTtBQUFBLE1BUE43WSxRQU9NLFFBUE5BLFFBT007QUFBQSxNQU5OL0IsUUFNTSxRQU5OQSxPQU1NO0FBQUEsTUFMTkksU0FLTSxRQUxOQSxTQUtNO0FBQUEsTUFKTnlhLGVBSU0sUUFKTkEsZUFJTTtBQUFBLE1BSE4wQyxTQUdNLFFBSE5BLFNBR007QUFBQSxNQUZOQyxXQUVNLFFBRk5BLFdBRU07QUFBQSxNQURIL0IsVUFDRzs7QUFDTixNQUFNZ0MsUUFBUSxHQUFHaGYsaURBQVUsMElBQ0ZnSixLQURFLEdBQ1UsSUFEVix5SEFFRnJILFNBRkUsR0FFY0EsU0FGZCw2RkFHMUIsbUJBSDBCLEVBR0wsSUFISyw2RkFJMUIsV0FKMEIsRUFJYixJQUphLGdCQUEzQjs7QUFNQSxNQUFLbWQsU0FBUyxLQUFLLElBQW5CLEVBQTBCO0FBQ3pCQSxhQUFTLEdBQUdHLFFBQVEsQ0FBRUgsU0FBRixFQUFhLEVBQWIsQ0FBcEI7QUFDQSxRQUFNSSxjQUFjLEdBQUdsZixpREFBVSxDQUFFO0FBQ2xDLGlDQUEyQixJQURPO0FBRWxDLHNCQUFnQjhlLFNBQVMsR0FBRyxDQUZNO0FBR2xDLHFCQUFlQSxTQUFTLEdBQUc7QUFITyxLQUFGLENBQWpDO0FBS0FBLGFBQVMsR0FDUjtBQUFLLGVBQVMsRUFBR0k7QUFBakIsT0FDR0osU0FBUyxHQUFHLENBQVosR0FBZ0JBLFNBQWhCLEdBQTRCLEdBRC9CLENBREQ7QUFLQTs7QUFDRCxTQUNDO0FBQUssYUFBUyxFQUFHO0FBQWpCLEtBQ0Msb0JBQUMsZ0VBQUQsNEVBQ005QixVQUROO0FBRUMsTUFBRSw4QkFBeUJuZCxFQUF6QixDQUZIO0FBR0MsYUFBUyxFQUFHbWYsUUFIYjtBQUlDLFdBQU8sRUFBRyxpQkFBRTlYLEtBQUY7QUFBQSxhQUFhM0YsUUFBTyxDQUFFMkYsS0FBRixDQUFwQjtBQUFBLEtBSlg7QUFLQyxjQUFVLEVBQUcsb0JBQUVBLEtBQUY7QUFBQSxhQUFhM0YsUUFBTyxDQUFFMkYsS0FBRixDQUFwQjtBQUFBLEtBTGQ7QUFNQyxXQUFPLEVBQUdpVixPQU5YO0FBT0MsaUJBQWEsRUFBR0MsZUFQakI7QUFRQyxRQUFJLEVBQUc5WTtBQVJSLEtBREQsRUFXR3diLFNBWEgsRUFZR0MsV0FaSCxDQUREO0FBZ0JBLENBL0NEOztBQWlEQUYsWUFBWSxDQUFDaGQsU0FBYixHQUF5QjtBQUN4Qm1ILE9BQUssRUFBRTdJLGlEQUFTLENBQUNxSSxNQUFWLENBQWlCekcsVUFEQTtBQUV4QmxDLElBQUUsRUFBRU0saURBQVMsQ0FBQ0csTUFBVixDQUFpQnlCLFVBRkc7QUFHeEJKLFdBQVMsRUFBRXhCLGlEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQUhKO0FBSXhCdUIsVUFBUSxFQUFFbkQsaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDOUJwSSxpREFBUyxDQUFDZ0YsTUFEb0IsRUFFOUJoRixpREFBUyxDQUFDRyxNQUZvQixDQUFyQixFQUdOeUIsVUFQb0I7QUFReEIrYyxXQUFTLEVBQUUzZSxpREFBUyxDQUFDb0ksU0FBVixDQUFxQixDQUMvQnBJLGlEQUFTLENBQUNxSSxNQURxQixFQUUvQnJJLGlEQUFTLENBQUNHLE1BRnFCLEVBRy9CSCxpREFBUyxDQUFDZ2YsSUFIcUIsQ0FBckIsQ0FSYTtBQWF4QmhELFNBQU8sRUFBRWhjLGlEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQWJGO0FBY3hCcWEsaUJBQWUsRUFBRWpjLGlEQUFTLENBQUNHLE1BZEg7QUFleEJpQixTQUFPLEVBQUVwQixpREFBUyxDQUFDMkIsSUFBVixDQUFlQyxVQWZBO0FBZ0J4QmdkLGFBQVcsRUFBRTVlLGlEQUFTLENBQUNnRjtBQWhCQyxDQUF6QjtBQW1CQTBaLFlBQVksQ0FBQzdjLFlBQWIsR0FBNEI7QUFDM0I4YyxXQUFTLEVBQUUsSUFEZ0I7QUFFM0JDLGFBQVcsRUFBRSxJQUZjO0FBRzNCM0MsaUJBQWUsRUFBRSxVQUhVO0FBSTNCemEsV0FBUyxFQUFFO0FBSmdCLENBQTVCO0FBT2VrZCwyRUFBZixFOzs7Ozs7Ozs7Ozs7QUN2R0E7QUFDQSxrQkFBa0IsK007Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEbEI7OztBQUdBO0FBQ0E7QUFFQTs7OztBQUdBO0FBRUE7Ozs7Ozs7Ozs7OztBQVdPLElBQU1PLFdBQWI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSw2QkFlVTtBQUFBLHdCQU9KLEtBQUs1ZixLQVBEO0FBQUEsVUFFUFIsU0FGTyxlQUVQQSxTQUZPO0FBQUEsVUFHUHFnQixXQUhPLGVBR1BBLFdBSE87QUFBQSxVQUlQQyxZQUpPLGVBSVBBLFlBSk87QUFBQSxVQUtQQyxXQUxPLGVBS1BBLFdBTE87QUFBQSxVQU1QQyxhQU5PLGVBTVBBLGFBTk87QUFTUixVQUFNdmEsS0FBSyxHQUFHO0FBQ2J3YSxjQUFNLEVBQUVILFlBREs7QUFFYkksYUFBSyxFQUFFSDtBQUZNLE9BQWQ7QUFJQSxhQUFPdmdCLFNBQVMsR0FDZjtBQUFLLGlCQUFTLEVBQUdxZ0IsV0FBVyxHQUFHO0FBQS9CLFNBQ0M7QUFDQyxpQkFBUyxFQUFHQSxXQUFXLEdBQUcsb0JBRDNCO0FBRUMsV0FBRyxFQUFHcmdCLFNBRlA7QUFHQyxhQUFLLEVBQUdpRyxLQUhUO0FBSUMsV0FBRyxFQUFHdWE7QUFKUCxRQURELENBRGUsR0FVZixJQVZEO0FBWUE7QUF4Q0Y7O0FBQUE7QUFBQSxFQUFpQ3RmLDREQUFqQzs7NkVBQWFrZixXLGVBQ087QUFDbEJwZ0IsV0FBUyxFQUFFbUIsaURBQVMsQ0FBQ0csTUFESDtBQUVsQitlLGFBQVcsRUFBRWxmLGlEQUFTLENBQUNHLE1BRkw7QUFHbEJnZixjQUFZLEVBQUVuZixpREFBUyxDQUFDcUksTUFITjtBQUlsQitXLGFBQVcsRUFBRXBmLGlEQUFTLENBQUNxSSxNQUpMO0FBS2xCZ1gsZUFBYSxFQUFFcmYsaURBQVMsQ0FBQ0c7QUFMUCxDOzs2RUFEUDhlLFcsa0JBUVU7QUFDckJwZ0IsV0FBUyxFQUFFLEVBRFU7QUFFckJxZ0IsYUFBVyxFQUFFLFNBRlE7QUFHckJDLGNBQVksRUFBRSxFQUhPO0FBSXJCQyxhQUFXLEVBQUUsRUFKUTtBQUtyQkMsZUFBYSxFQUFFNWQsOERBQUUsQ0FBRSxnQkFBRixFQUFvQixnQkFBcEI7QUFMSSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUJ2Qjs7O0FBR0E7QUFDQTtBQUNBO0FBRU8sSUFBTStkLHdCQUF3QixHQUFHLFlBQWpDO0FBQ0EsSUFBTWpULHNCQUFzQixHQUFHLFVBQS9CO0FBQ0EsSUFBTWtULGlCQUFpQixHQUFHLGdCQUExQjtBQUNBLElBQU1DLGtCQUFrQixHQUFHLE1BQTNCO0FBRVA7Ozs7OztBQUtPLElBQU1DLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsQ0FBRXBCLElBQUYsRUFBWTtBQUN6QyxVQUFTQSxJQUFUO0FBQ0MsU0FBS2lCLHdCQUFMO0FBQ0EsU0FBS2pULHNCQUFMO0FBQ0EsU0FBS21ULGtCQUFMO0FBQ0MsYUFBTyxJQUFQOztBQUNEO0FBQ0MsYUFBTyxLQUFQO0FBTkY7QUFRQSxDQVRNO0FBV1A7Ozs7Ozs7OztBQVFPLElBQU1FLFlBQWI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSw2QkFDVTtBQUFBLHdCQUM4QyxLQUFLdmdCLEtBRG5EO0FBQUEsVUFDQWtmLElBREEsZUFDQUEsSUFEQTtBQUFBLHlDQUNNMVosSUFETjtBQUFBLFVBQ01BLElBRE4saUNBQ2EsRUFEYjtBQUFBLFVBQ2lCb04sU0FEakIsZUFDaUJBLFNBRGpCO0FBQUEsVUFDK0I0SyxVQUQvQjs7QUFFUixVQUFJZ0QsSUFBSjs7QUFFQSxjQUFTdEIsSUFBVDtBQUVDLGFBQUtpQix3QkFBTDtBQUNDSyxjQUFJLEdBQUcsK0JBQ04sNEJBRE0sR0FFTiw4QkFGTSxHQUdOLGdDQUhNLEdBSU4sZ0NBSk0sR0FLTixrQ0FMTSxHQU1OLGdDQU5NLEdBT04sZ0NBUE0sR0FRTixtQ0FSTSxHQVNOLGdDQVRNLEdBVU4sZ0NBVk0sR0FXTixtQ0FYTSxHQVlOLGdDQVpNLEdBYU4sZ0NBYkQ7QUFjQTs7QUFFRCxhQUFLdFQsc0JBQUw7QUFDQ3NULGNBQUksR0FBRywwQkFDTiwyQkFETSxHQUVOLHlEQUZNLEdBR04saURBSE0sR0FJTixXQUpNLEdBS04sdURBTE0sR0FNTixtQ0FOTSxHQU9OLFlBUE0sR0FRTix3REFSTSxHQVNOLGlEQVRNLEdBVU4sc0JBVk0sR0FXTixTQVhNLEdBWU4sU0FaTSxHQWFOLFFBYk0sR0FjTix1REFkTSxHQWVOLHVEQWZNLEdBZ0JOLG1CQWhCTSxHQWlCTix3QkFqQk0sR0FrQk4sU0FsQk0sR0FtQk4sdURBbkJNLEdBb0JOLDREQXBCTSxHQXFCTix3QkFyQk0sR0FzQk4sU0F0Qk0sR0F1Qk4sMkRBdkJNLEdBd0JOLHdCQXhCTSxHQXlCTix3QkF6QkQ7QUEwQkE7O0FBRUQsYUFBSyxjQUFMO0FBQ0NBLGNBQUksR0FBRyxrQkFDTiwyQkFETSxHQUVOLG1CQUZNLEdBR04sK0JBSE0sR0FJTixjQUpNLEdBS04saURBTE0sR0FNTixjQU5NLEdBT04sNEJBUE0sR0FRTixXQVJNLEdBU04sU0FUTSxHQVVOLE9BVk0sR0FXTixhQVhNLEdBWU4sa0NBWkQ7QUFhQTs7QUFFRCxhQUFLSixpQkFBTDtBQUNDSSxjQUFJLEdBQUcsZUFDTiw4QkFETSxHQUVOLGtCQUZNLEdBR04sZ0NBSE0sR0FJTixnQkFKTSxHQUtOLHlEQUxNLEdBTU4sZ0JBTk0sR0FPTiw0QkFQTSxHQVFOLGVBUk0sR0FTTixjQVRNLEdBVU4sVUFWTSxHQVdOLGFBWE0sR0FZTix5Q0FaRDtBQWFBOztBQUVELGFBQUtILGtCQUFMO0FBQ0NHLGNBQUksR0FBRyxpUEFBUDtBQUNBOztBQUVEO0FBQ0MsaUJBQ0Msb0JBQUMsOERBQUQ7QUFDQyxnQkFBSSxFQUFHdEIsSUFEUjtBQUVDLGdCQUFJLEVBQUcxWixJQUZSO0FBR0MscUJBQVMsRUFBR29OO0FBSGIsYUFJTTRLLFVBSk4sRUFERDtBQXJGRjs7QUErRkEsVUFBSyxDQUFFZ0QsSUFBUCxFQUFjO0FBQ2IsZUFBTyxJQUFQO0FBQ0E7O0FBQ0QsYUFDQyxvQkFBQyx5REFBRDtBQUNDLDJCQUREO0FBRUMsWUFBSSxFQUFDLEtBRk47QUFHQyxpQkFBUyxFQUFDLE9BSFg7QUFJQyxpQkFBUyxFQUNSaGdCLGlEQUFVLENBQ1RvUyxTQURTLEVBRVQsVUFGUyxzQkFHS3NNLElBSEwsR0FJVCxlQUpTLENBTFo7QUFZQyxhQUFLLEVBQUMsNEJBWlA7QUFhQyxhQUFLLEVBQUcxWixJQWJUO0FBY0MsY0FBTSxFQUFHQSxJQWRWO0FBZUMsZUFBTyxFQUFDO0FBZlQsU0FnQk1nWSxVQWhCTixHQWtCQyxvQkFBQywwREFBRDtBQUFNLFNBQUMsRUFBR2dEO0FBQVYsUUFsQkQsQ0FERDtBQXNCQTtBQTdIRjs7QUFBQTtBQUFBLEVBQWtDOWYsNERBQWxDLEU7Ozs7Ozs7Ozs7Ozs7QUNwQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDWkE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7O0FBR0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUVBOzs7Ozs7O0FBTUEsSUFBTStmLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBMEIsT0FBd0I7QUFBQSxNQUFwQnZmLEtBQW9CLFFBQXBCQSxLQUFvQjtBQUFBLE1BQWIwSSxLQUFhLFFBQWJBLEtBQWE7O0FBQ3ZELE1BQUssT0FBTzFJLEtBQVAsS0FBaUIsUUFBdEIsRUFBaUM7QUFDaEMsVUFBTSxJQUFJd2YsU0FBSixDQUNML2IsbUVBQU8sQ0FDTixnRUFDQSx5QkFGTSxFQUdOLE9BSE0sRUFJTnpELEtBSk0sQ0FERixDQUFOO0FBUUE7O0FBQ0QsTUFBSzBJLEtBQUssS0FBS2QsU0FBZixFQUEyQjtBQUMxQixVQUFNLElBQUk0WCxTQUFKLENBQ0wvYixtRUFBTyxDQUNOLGdFQUNBLG9CQUZNLEVBR04sT0FITSxFQUlOaUYsS0FKTSxDQURGLENBQU47QUFRQTtBQUNELENBckJEOztBQXVCQSxJQUFNK1csY0FBYyxHQUFHLFNBQWpCQSxjQUFpQixDQUFFQyxVQUFGLEVBQWtCO0FBQ3hDLE1BQU1DLFdBQVcsR0FBRyxFQUFwQjs7QUFDQSxPQUFNLElBQU1DLElBQVosSUFBb0JGLFVBQXBCLEVBQWlDO0FBQ2hDSCwyQkFBdUIsQ0FBRUcsVUFBVSxDQUFFRSxJQUFGLENBQVosQ0FBdkI7QUFEZ0MsMkJBUTVCRixVQUFVLENBQUVFLElBQUYsQ0FSa0I7QUFBQSxRQUcvQjVmLEtBSCtCLG9CQUcvQkEsS0FIK0I7QUFBQSxRQUkvQjBJLEtBSitCLG9CQUkvQkEsS0FKK0I7QUFBQSxRQUsvQm1YLE1BTCtCLG9CQUsvQkEsTUFMK0I7QUFBQSxRQU0vQkMsU0FOK0Isb0JBTS9CQSxTQU4rQjtBQUFBLFFBTy9CQyxNQVArQixvQkFPL0JBLE1BUCtCO0FBU2hDSixlQUFXLENBQUNyYyxJQUFaLENBQ0Msb0JBQUMsb0RBQUQ7QUFDQyxTQUFHLEVBQUdzYyxJQURQO0FBRUMsV0FBSyxFQUFHNWYsS0FGVDtBQUdDLFVBQUksRUFBRzRmLElBSFI7QUFJQyxZQUFNLEVBQUdDLE1BSlY7QUFLQyxlQUFTLEVBQUduWCxLQUxiO0FBTUMsZUFBUyxFQUFHb1gsU0FOYjtBQU9DLGNBQVEsRUFBR0M7QUFQWixNQUREO0FBV0E7O0FBQ0QsU0FBT0osV0FBUDtBQUNBLENBeEJEOztBQTBCQSxJQUFNSyxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLFFBQXNCO0FBQUEsTUFBbEJOLFVBQWtCLFNBQWxCQSxVQUFrQjtBQUM1QyxTQUNDO0FBQUssYUFBUyxFQUFDO0FBQWYsS0FDQztBQUFLLGFBQVMsRUFBQyx3QkFBZjtBQUF3QyxRQUFJLEVBQUMsTUFBN0M7QUFBb0QsWUFBUSxFQUFHO0FBQS9ELEtBQ0VELGNBQWMsQ0FBRUMsVUFBRixDQURoQixDQURELENBREQ7QUFPQSxDQVJEOztBQVVBTSxjQUFjLENBQUM3ZSxTQUFmLEdBQTJCO0FBQUV1ZSxZQUFVLEVBQUVqZ0IsaURBQVMsQ0FBQ2dGO0FBQXhCLENBQTNCO0FBQ0F1YixjQUFjLENBQUMxZSxZQUFmLEdBQThCO0FBQUVvZSxZQUFVLEVBQUU7QUFBZCxDQUE5QjtBQUVlTSw2RUFBZixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEZBOzs7QUFHQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFTyxJQUFNQyxVQUFVLEdBQUcsU0FBYkEsVUFBYSxPQU9uQjtBQUFBLE1BTk5qZ0IsS0FNTSxRQU5OQSxLQU1NO0FBQUEsTUFMTjRmLElBS00sUUFMTkEsSUFLTTtBQUFBLE1BSk5NLFFBSU0sUUFKTkEsUUFJTTtBQUFBLE1BSE5DLFNBR00sUUFITkEsU0FHTTtBQUFBLE1BRk5MLFNBRU0sUUFGTkEsU0FFTTtBQUFBLE1BRE5ELE1BQ00sUUFETkEsTUFDTTtBQUNOLE1BQU1PLFFBQVEsR0FBRzlnQixpREFBVSxDQUMxQixxQkFEMEIsRUFFMUI7QUFBRSw2QkFBeUI0Z0I7QUFBM0IsR0FGMEIsRUFHMUI7QUFBRSxvQkFBZ0JKO0FBQWxCLEdBSDBCLENBQTNCO0FBS0EsTUFBTU8sWUFBWSxHQUFHUCxTQUFTLElBQUl4YSx5REFBVSxDQUFFdWEsTUFBRixDQUF2QixHQUNwQjtBQUNDaGYsV0FBTyxFQUFFO0FBQUEsYUFBTWdmLE1BQU0sQ0FBRUQsSUFBRixDQUFaO0FBQUEsS0FEVjtBQUVDVSxjQUFVLEVBQUUsb0JBQUU5WixLQUFGLEVBQWE7QUFDeEIsVUFBS0EsS0FBSyxDQUFDK0IsR0FBTixLQUFjLE9BQW5CLEVBQTZCO0FBQzVCc1gsY0FBTSxDQUFFRCxJQUFGLENBQU47QUFDQTtBQUNELEtBTkY7QUFPQ1csUUFBSSxFQUFFO0FBUFAsR0FEb0IsR0FVcEIsRUFWRDtBQVdBLFNBQU87QUFDTixhQUFTLEVBQUdILFFBRE47QUFFTixZQUFRLEVBQUcsQ0FBQztBQUZOLEtBR0RDLFlBSEMsR0FLTDtBQUFLLGFBQVMsRUFBQztBQUFmLElBTEssRUFNTDtBQUFLLGFBQVMsRUFBQztBQUFmLEtBQ0MsK0JBQUtGLFNBQUwsQ0FERCxDQU5LLEVBU0wsb0JBQUMsa0RBQUQ7QUFBVSxXQUFPLEVBQUduZ0I7QUFBcEIsSUFUSyxDQUFQO0FBV0EsQ0FuQ007QUFxQ1BpZ0IsVUFBVSxDQUFDOWUsU0FBWCxHQUF1QjtBQUN0Qm5CLE9BQUssRUFBRVAsaURBQVMsQ0FBQ0csTUFBVixDQUFpQnlCLFVBREY7QUFFdEJ1ZSxNQUFJLEVBQUVuZ0IsaURBQVMsQ0FBQ0csTUFBVixDQUFpQnlCLFVBRkQ7QUFHdEI2ZSxVQUFRLEVBQUV6Z0IsaURBQVMsQ0FBQ0MsSUFIRTtBQUl0QnlnQixXQUFTLEVBQUUxZ0IsaURBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDL0JwSSxpREFBUyxDQUFDcUksTUFEcUIsRUFFL0JySSxpREFBUyxDQUFDRyxNQUZxQixDQUFyQixDQUpXO0FBUXRCa2dCLFdBQVMsRUFBRXJnQixpREFBUyxDQUFDQyxJQVJDO0FBU3RCbWdCLFFBQU0sRUFBRXBnQixpREFBUyxDQUFDMkI7QUFUSSxDQUF2QjtBQVlBNmUsVUFBVSxDQUFDM2UsWUFBWCxHQUEwQjtBQUN6QjRlLFVBQVEsRUFBRSxLQURlO0FBRXpCQyxXQUFTLEVBQUUsQ0FGYztBQUd6QkwsV0FBUyxFQUFFLElBSGM7QUFJekJELFFBQU0sRUFBRTtBQUFBLFdBQU0sSUFBTjtBQUFBO0FBSmlCLENBQTFCO0FBT2VXLDhIQUFJLENBQUVQLFVBQUYsQ0FBbkIsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyRUE7OztBQUdBO0FBQ0E7QUFHTyxJQUFNUSxRQUFRLEdBQUcsU0FBWEEsUUFBVyxPQUFtQjtBQUFBLE1BQWZDLE9BQWUsUUFBZkEsT0FBZTtBQUMxQyxTQUFPO0FBQU0sYUFBUyxFQUFDO0FBQWhCLEtBQ0pBLE9BREksQ0FBUDtBQUdBLENBSk07QUFNUEQsUUFBUSxDQUFDdGYsU0FBVCxHQUFxQjtBQUFFdWYsU0FBTyxFQUFFamhCLGlEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QjtBQUE1QixDQUFyQjtBQUVlbWYsOEhBQUksQ0FBRUMsUUFBRixDQUFuQixFOzs7Ozs7Ozs7Ozs7QUNmQTtBQUNBLGtCQUFrQiwrVzs7Ozs7Ozs7Ozs7O0FDRGxCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVPLElBQU1FLGFBQWEsR0FBRztBQUM1QkMsT0FBSyxFQUFMQSw4Q0FENEI7QUFFNUJDLGFBQVcsRUFBWEEscURBRjRCO0FBRzVCQyxXQUFTLEVBQVRBLG1EQUg0QjtBQUk1QkMsVUFBUSxFQUFSQSxrREFKNEI7QUFLNUJDLGFBQVcsRUFBWEEscURBTDRCO0FBTTVCQyxrQkFBZ0IsRUFBaEJBLDJEQU40QjtBQU81QkMsZUFBYSxFQUFiQSx3REFBYUE7QUFQZSxDQUF0QjtBQVVRQyx3SEFBZixFOzs7Ozs7Ozs7Ozs7Ozs7OztBQ25CQTs7O0FBR0E7QUFFQTs7Ozs7OztBQU1BLElBQU1DLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsT0FBb0M7QUFBQSwwQkFBaENDLE9BQWdDO0FBQUEsTUFBaENBLE9BQWdDLDZCQUF0QixFQUFzQjtBQUFBLHdCQUFsQjNZLEtBQWtCO0FBQUEsTUFBbEJBLEtBQWtCLDJCQUFWLEVBQVU7QUFDMUQsU0FDQyxvQkFBQywyREFBRCxRQUNDO0FBQUssdUJBQUw7QUFDQyxhQUFTLEVBQUc7QUFEYixLQUdHMlksT0FISCxDQURELEVBTUM7QUFBSyxhQUFTLEVBQUc7QUFBakIsS0FDRzNZLEtBREgsQ0FORCxDQUREO0FBWUEsQ0FiRDs7QUFlZTBZLDZFQUFmLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFCQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7O0lBVU1ELGU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs0TEF1RFMsWUFBcUI7QUFBQSxVQUFuQkcsUUFBbUIsdUVBQVIsRUFBUTtBQUNsQyxZQUFLQyxPQUFMLEdBQWUsZUFDZEMsSUFBSSxDQUFDQyxNQUFMLEdBQWNqZixRQUFkLENBQXdCLEVBQXhCLEVBQTZCa2YsTUFBN0IsQ0FBcUMsQ0FBckMsRUFBd0MsQ0FBeEMsQ0FERDtBQUVBLFlBQUtDLFlBQUwsR0FBb0JMLFFBQVEsQ0FBQ0ssWUFBVCxJQUF5QixFQUE3QztBQUNBLFlBQUtDLFNBQUwsYUFBcUIsTUFBS0wsT0FBMUI7QUFDQSxZQUFLTSxlQUFMLEdBQXVCLE9BQU9QLFFBQVEsQ0FBQ08sZUFBaEIsS0FBb0MsV0FBcEMsR0FDdEIsSUFEc0IsR0FDZlAsUUFBUSxDQUFDTyxlQURqQjtBQUVBLFlBQUtDLGFBQUwsR0FBcUIsQ0FBQyxDQUFFUixRQUFRLENBQUNRLGFBQWpDO0FBQ0EsSzs7OExBTWUsVUFBRUMsT0FBRixFQUFlO0FBQzlCLFlBQUtBLE9BQUwsR0FBZTtBQUNkQyxrQkFBVSxFQUFFRCxPQUFPLENBQUNDLFVBQVIsSUFBc0IsRUFEcEI7QUFFZEMsbUJBQVcsRUFBRUYsT0FBTyxDQUFDRSxXQUFSLElBQXVCLEVBRnRCO0FBR2RDLHNCQUFjLEVBQUVILE9BQU8sQ0FBQ0csY0FBUixJQUEwQixFQUg1QjtBQUlkQyxxQkFBYSxFQUFFSixPQUFPLENBQUNJLGFBQVIsSUFBeUIsRUFKMUI7QUFLZEMsaUJBQVMsRUFBRUwsT0FBTyxDQUFDSyxTQUFSLElBQXFCLEVBTGxCO0FBTWRDLG9CQUFZLEVBQUVOLE9BQU8sQ0FBQ00sWUFBUixJQUF3QixFQU54QjtBQU9kQyxtQkFBVyxFQUFFUCxPQUFPLENBQUNPLFdBQVIsSUFBdUIsRUFQdEI7QUFRZEMsbUJBQVcsRUFBRVIsT0FBTyxDQUFDUSxXQUFSLElBQXVCLEVBUnRCO0FBU2RDLG1CQUFXLEVBQUVULE9BQU8sQ0FBQ1MsV0FBUixJQUF1QixFQVR0QjtBQVVkQyxzQkFBYyxFQUFFVixPQUFPLENBQUNVLGNBQVIsSUFBMEIsRUFWNUI7QUFXZEMscUJBQWEsRUFBRVgsT0FBTyxDQUFDVyxhQUFSLElBQXlCO0FBWDFCLE9BQWY7QUFhQSxZQUFLWCxPQUFMLENBQWFDLFVBQWIsR0FBMEIxaUIsa0RBQVUsQ0FDbkMsTUFBS3lpQixPQUFMLENBQWFDLFVBRHNCLEVBRW5DO0FBQ0MscUNBQTZCLE1BQUtGO0FBRG5DLE9BRm1DLENBQXBDO0FBTUEsSzs7NExBUWEsVUFBRWEsT0FBRixFQUFpQztBQUFBLFVBQXRCQyxRQUFzQix1RUFBWCxLQUFXO0FBQzlDLFlBQUtDLFNBQUw7QUFDQSxVQUFNQyxPQUFPLEdBQUdGLFFBQVEsS0FBSyxJQUFiLEdBQW9CLFFBQXBCLEdBQStCLFFBQS9DO0FBQ0EsVUFBSUcsUUFBUSxHQUFHLEVBQWY7QUFDQSxVQUFJQyxRQUFRLEdBQUcsQ0FBZjtBQUNBLFVBQU1DLFdBQVcsR0FBR04sT0FBTyxDQUFDempCLEdBQVIsQ0FDbkIsVUFBRWdrQixNQUFGLEVBQVVDLFNBQVYsRUFBeUI7QUFDeEJELGNBQU0sQ0FBQ0osT0FBUCxHQUFpQkksTUFBTSxDQUFDSixPQUFQLElBQWtCQSxPQUFuQzs7QUFDQSxZQUFLSSxNQUFNLENBQUMvaUIsSUFBUCxJQUFlK2lCLE1BQU0sQ0FBQy9pQixJQUFQLEtBQWdCLEtBQXBDLEVBQTRDO0FBQzNDNGlCLGtCQUFRLEdBQUdHLE1BQVg7QUFDQUYsa0JBQVE7QUFDUixpQkFBTyxJQUFQO0FBQ0E7O0FBQ0QsY0FBS0wsT0FBTCxDQUFhcmYsSUFBYixDQUFtQjRmLE1BQW5COztBQUNBQyxpQkFBUyxJQUFJSCxRQUFiO0FBQ0EsWUFBTUksaUJBQWlCLEdBQUc5ZCx5REFBVSxDQUFFNGQsTUFBTSxDQUFDRyxNQUFULENBQXBDO0FBQ0Exa0Isc0RBQU8sQ0FDTnlrQixpQkFBaUIsSUFBSUYsTUFBTSxDQUFDcFosY0FBUCxDQUF1QixPQUF2QixDQURmLDJDQUUyQmdaLE9BRjNCLHFCQUUrQ0ssU0FGL0MsT0FBUDtBQUlBLFlBQU1HLGNBQWMsR0FBR0YsaUJBQWlCLEdBQ3ZDRixNQUFNLENBQUNHLE1BRGdDLEdBRXZDLE1BQUtFLFdBRk47QUFHQSxlQUFPRCxjQUFjLENBQUUsTUFBS1QsU0FBUCxFQUFrQk0sU0FBbEIsRUFBNkJELE1BQTdCLENBQXJCO0FBQ0EsT0FuQmtCLENBQXBCO0FBcUJBLGFBQU8sTUFBS00sUUFBTCxDQUFlUCxXQUFmLEVBQTRCRixRQUE1QixDQUFQO0FBQ0EsSzs7eUxBUVUsVUFBRVUsS0FBRixFQUE0QjtBQUFBLFVBQW5CVixRQUFtQix1RUFBUixFQUFRO0FBQ3RDLGFBQ0Msb0JBQUMsbURBQUQ7QUFDQyxXQUFHLGdCQUFXLE1BQUtGLFNBQWhCLENBREo7QUFFQyxpQkFBUyxFQUFHLE1BQUtBLFNBRmxCO0FBR0MsZUFBTyxFQUFHRSxRQUFRLENBQUNELE9BQVQsSUFBb0IsTUFIL0I7QUFJQyxjQUFNLEVBQUdDLFFBQVEsQ0FBQzVqQixFQUFULElBQWUsTUFBS29pQixPQUo5QjtBQUtDLGlCQUFTLEVBQUd3QixRQUFRLENBQUNXLEtBQVQsSUFBa0IsRUFML0I7QUFNQyxlQUFPLEVBQUcsTUFBSzNCO0FBTmhCLFNBUUcwQixLQVJILENBREQ7QUFZQSxLOzs0TEFTYSxVQUFFWixTQUFGLEVBQWFNLFNBQWIsRUFBd0JRLFNBQXhCLEVBQXVDO0FBQ3BELGFBQ0Msb0JBQUMsNERBQUQ7QUFDQyxXQUFHLGdCQUFXZCxTQUFYLGtCQUE4Qk0sU0FBOUIsQ0FESjtBQUVDLGlCQUFTLEVBQUdOLFNBRmI7QUFHQyxpQkFBUyxFQUFHTSxTQUhiO0FBSUMsZUFBTyxFQUFHUSxTQUFTLENBQUNiLE9BQVYsSUFBcUIsTUFKaEM7QUFLQyxjQUFNLEVBQUdhLFNBQVMsQ0FBQ3hrQixFQUFWLElBQWdCLE1BQUtvaUIsT0FML0I7QUFNQyxpQkFBUyxFQUFHb0MsU0FBUyxDQUFDRCxLQUFWLElBQW1CLEVBTmhDO0FBT0MsZUFBTyxFQUFHLE1BQUszQjtBQVBoQixTQVNHNEIsU0FBUyxDQUFDamIsS0FBVixJQUFtQixFQVR0QixDQUREO0FBYUEsSzs7d0xBT1MsVUFBRWtiLE9BQUYsRUFBZTtBQUN4QixZQUFLZixTQUFMO0FBQ0Fsa0Isb0RBQU8sQ0FDTjRCLHNEQUFPLENBQUVxakIsT0FBRixDQURELHlCQUVXLE1BQUtmLFNBRmhCLHVCQUFQO0FBSUEsVUFBSUUsUUFBUSxHQUFHLEVBQWY7QUFDQSxVQUFJQyxRQUFRLEdBQUcsQ0FBZjtBQUNBLFVBQU1hLFFBQVEsR0FBR0QsT0FBTyxDQUFDMWtCLEdBQVIsQ0FDaEIsVUFBRTRrQixRQUFGLEVBQVlYLFNBQVosRUFBMkI7QUFDMUJXLGdCQUFRLENBQUNoQixPQUFULEdBQW1CZ0IsUUFBUSxDQUFDaEIsT0FBVCxJQUFvQixNQUF2Qzs7QUFDQSxZQUFLZ0IsUUFBUSxDQUFDM2pCLElBQVQsSUFBaUIyakIsUUFBUSxDQUFDM2pCLElBQVQsS0FBa0IsS0FBeEMsRUFBZ0Q7QUFDL0M0aUIsa0JBQVEsR0FBR2UsUUFBWDtBQUNBZCxrQkFBUTtBQUNSLGlCQUFPLElBQVA7QUFDQSxTQU55QixDQU8xQjtBQUNBOzs7QUFDQUcsaUJBQVMsSUFBSUgsUUFBYjtBQUNBLFlBQU1FLE1BQU0sR0FBRyxNQUFLUCxPQUFMLENBQWNRLFNBQWQsQ0FBZjs7QUFDQSxZQUFLLENBQUVELE1BQVAsRUFBZ0I7QUFDZnZrQix3REFBTyxDQUNOLEtBRE0sRUFFTixrQ0FBNEJ3a0IsU0FBNUIsMEJBQ1csTUFBS04sU0FEaEIsTUFGTSxDQUFQO0FBS0EsaUJBQU8sSUFBUDtBQUNBOztBQUNELFlBQU1PLGlCQUFpQixHQUFHOWQseURBQVUsQ0FBRXdlLFFBQVEsQ0FBQ1QsTUFBWCxDQUFwQztBQUNBMWtCLHNEQUFPLENBQ055a0IsaUJBQWlCLElBQUlVLFFBQVEsQ0FBQ2hhLGNBQVQsQ0FBeUIsT0FBekIsQ0FEZixFQUVOLGdFQUNRLE1BQUsrWSxTQURiLHFCQUNtQ00sU0FEbkMsTUFGTSxDQUFQO0FBS0EsWUFBTUcsY0FBYyxHQUFHRixpQkFBaUIsR0FDdkNVLFFBQVEsQ0FBQ1QsTUFEOEIsR0FFdkMsTUFBS1UsUUFGTjtBQUdBLGVBQU9ULGNBQWMsQ0FDcEIsTUFBS1QsU0FEZSxFQUVwQk0sU0FGb0IsRUFHcEJELE1BSG9CLEVBSXBCWSxRQUpvQixDQUFyQjtBQU1BLE9BbkNlLENBQWpCO0FBcUNBLGFBQU8sTUFBS04sUUFBTCxDQUFlSyxRQUFmLEVBQXlCZCxRQUF6QixDQUFQO0FBQ0EsSzs7eUxBVVUsVUFBRUYsU0FBRixFQUFhTSxTQUFiLEVBQXdCRCxNQUF4QixFQUFnQ1ksUUFBaEMsRUFBOEM7QUFDeEQsYUFBTyxNQUFLaEMsYUFBTCxJQUFzQnFCLFNBQVMsS0FBSyxDQUFwQyxHQUNOLE1BQUtJLFdBQUwsQ0FBa0JWLFNBQWxCLEVBQTZCTSxTQUE3QixFQUF3Q1csUUFBeEMsQ0FETSxHQUdOLG9CQUFDLHlEQUFEO0FBQ0MsV0FBRyxnQkFBV2pCLFNBQVgsa0JBQThCTSxTQUE5QixDQURKO0FBRUMsaUJBQVMsRUFBR04sU0FGYjtBQUdDLGlCQUFTLEVBQUdNLFNBSGI7QUFJQyxjQUFNLEVBQUdXLFFBQVEsQ0FBQzNrQixFQUFULElBQWUsTUFBS29pQixPQUo5QjtBQUtDLGlCQUFTLEVBQUd1QyxRQUFRLENBQUNKLEtBQVQsSUFBa0IsRUFML0I7QUFNQyxlQUFPLEVBQUcsTUFBSzNCO0FBTmhCLFNBUUMsb0JBQUMseURBQUQ7QUFDQyxlQUFPLEVBQUdtQixNQUFNLENBQUN4YSxLQURsQjtBQUVDLGFBQUssRUFBR29iLFFBQVEsQ0FBQ3BiO0FBRmxCLFFBUkQsQ0FIRDtBQWlCQSxLOzs7Ozs7OzZCQUVRO0FBQUE7O0FBQUEsd0JBT0osS0FBSzVKLEtBUEQ7QUFBQSw0Q0FFUDZqQixPQUZPO0FBQUEsVUFFUEEsT0FGTyxvQ0FFRyxFQUZIO0FBQUEsNENBR1BxQixPQUhPO0FBQUEsVUFHUEEsT0FITyxvQ0FHRyxFQUhIO0FBQUEsOENBSVBDLFVBSk87QUFBQSxVQUlQQSxVQUpPLHNDQUlNLEVBSk47QUFBQSw2Q0FLUDNDLFFBTE87QUFBQSxVQUtQQSxRQUxPLHFDQUtJLEVBTEo7QUFBQSw0Q0FNUFMsT0FOTztBQUFBLFVBTVBBLE9BTk8sb0NBTUcsRUFOSDs7QUFRUixVQUFLL2lCLHNEQUFPLENBQUUyakIsT0FBRixDQUFaLEVBQTBCO0FBQ3pCLGVBQU8sSUFBUDtBQUNBOztBQUNELFdBQUt1QixXQUFMLENBQWtCNUMsUUFBbEI7QUFDQSxXQUFLNkMsYUFBTCxDQUFvQnBDLE9BQU8sSUFBSSxFQUEvQjtBQUNBLFdBQUtZLE9BQUwsR0FBZSxFQUFmO0FBQ0EsV0FBS0UsU0FBTCxHQUFpQixDQUFDLENBQWxCO0FBQ0EsVUFBTXVCLFdBQVcsR0FBRyxLQUFLQSxXQUFMLENBQWtCekIsT0FBbEIsQ0FBcEI7QUFDQSxXQUFLWixPQUFMLENBQWFDLFVBQWIsR0FBMEIxaUIsa0RBQVUsQ0FDbkMsS0FBS3lpQixPQUFMLENBQWFDLFVBRHNCLG1DQUVSLEtBQUtXLE9BQUwsQ0FBYXRmLE1BRkwsRUFBcEM7QUFJQSxXQUFLd2UsZUFBTCxHQUF1QixLQUFLQSxlQUFMLElBQXdCLENBQUU3aUIsc0RBQU8sQ0FBRWlsQixVQUFGLENBQXhEO0FBQ0EsYUFDQyxvQkFBQywrQ0FBRDtBQUNDLGVBQU8sRUFBRyxLQUFLMUMsT0FEaEI7QUFFQyxrQkFBVSxFQUFHLEtBQUtRLE9BQUwsQ0FBYUMsVUFGM0I7QUFHQyxpQkFBUyxFQUFHLEtBQUtKLFNBSGxCO0FBSUMsbUJBQVcsRUFBRyxLQUFLRDtBQUpwQixTQU1DLG9CQUFDLHNEQUFEO0FBQWEsaUJBQVMsRUFBRyxLQUFLSSxPQUFMLENBQWFFO0FBQXRDLFNBQ0dtQyxXQURILENBTkQsRUFTQyxvQkFBQyxvREFBRDtBQUFXLGlCQUFTLEVBQUcsS0FBS3JDLE9BQUwsQ0FBYUs7QUFBcEMsU0FDRzRCLE9BQU8sQ0FBQzlrQixHQUFSLENBQ0QsVUFBRTBrQixPQUFGO0FBQUEsZUFBZSxNQUFJLENBQUNBLE9BQUwsQ0FBY0EsT0FBZCxDQUFmO0FBQUEsT0FEQyxDQURILENBVEQsRUFjQyxvQkFBQyxzREFBRDtBQUNDLGtCQUFVLEVBQUcsS0FBSy9CLGVBRG5CO0FBRUMsaUJBQVMsRUFBRyxLQUFLRSxPQUFMLENBQWFTO0FBRjFCLFNBSUcsS0FBSzRCLFdBQUwsQ0FBa0JILFVBQWxCLEVBQThCLElBQTlCLENBSkgsQ0FkRCxDQUREO0FBdUJBOzs7O0VBdlM0QnprQiw0RDs7NkVBQXhCMmhCLGUsZUFDYztBQUNsQndCLFNBQU8sRUFBRWxqQixrREFBUyxDQUFDc0ksT0FBVixDQUNSdEksa0RBQVMsQ0FBQ3lKLEtBQVYsQ0FBaUI7QUFDaEIvSSxRQUFJLEVBQUVWLGtEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQURQO0FBRWhCcUgsU0FBSyxFQUFFakosa0RBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDM0JwSSxrREFBUyxDQUFDZ0YsTUFEaUIsRUFFM0JoRixrREFBUyxDQUFDcUksTUFGaUIsRUFHM0JySSxrREFBUyxDQUFDRyxNQUhpQixDQUFyQixFQUlIeUIsVUFOWTtBQU9oQmxDLE1BQUUsRUFBRU0sa0RBQVMsQ0FBQ0csTUFQRTtBQVFoQjhqQixTQUFLLEVBQUVqa0Isa0RBQVMsQ0FBQ0csTUFSRDtBQVNoQnlrQixjQUFVLEVBQUU1a0Isa0RBQVMsQ0FBQ2dGO0FBVE4sR0FBakIsQ0FEUSxFQVlQcEQsVUFiZ0I7QUFjbEIyaUIsU0FBTyxFQUFFdmtCLGtEQUFTLENBQUNzSSxPQUFWLENBQ1J0SSxrREFBUyxDQUFDc0ksT0FBVixDQUNDdEksa0RBQVMsQ0FBQ3lKLEtBQVYsQ0FBaUI7QUFDaEIvSSxRQUFJLEVBQUVWLGtEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQURQO0FBRWhCcUgsU0FBSyxFQUFFakosa0RBQVMsQ0FBQ29JLFNBQVYsQ0FBcUIsQ0FDM0JwSSxrREFBUyxDQUFDZ0YsTUFEaUIsRUFFM0JoRixrREFBUyxDQUFDcUksTUFGaUIsRUFHM0JySSxrREFBUyxDQUFDRyxNQUhpQixDQUFyQixFQUlIeUIsVUFOWTtBQU9oQmxDLE1BQUUsRUFBRU0sa0RBQVMsQ0FBQ0csTUFQRTtBQVFoQjhqQixTQUFLLEVBQUVqa0Isa0RBQVMsQ0FBQ0csTUFSRDtBQVNoQnlqQixVQUFNLEVBQUU1akIsa0RBQVMsQ0FBQzJCLElBVEY7QUFVaEJpakIsY0FBVSxFQUFFNWtCLGtEQUFTLENBQUNnRjtBQVZOLEdBQWpCLENBREQsQ0FEUSxFQWVQcEQsVUE3QmdCO0FBOEJsQmlnQixVQUFRLEVBQUU3aEIsa0RBQVMsQ0FBQ3lKLEtBQVYsQ0FBaUI7QUFDMUJ5WSxnQkFBWSxFQUFFbGlCLGtEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQURMO0FBRTFCd2dCLG1CQUFlLEVBQUVwaUIsa0RBQVMsQ0FBQ0MsSUFGRDtBQUcxQm9pQixpQkFBYSxFQUFFcmlCLGtEQUFTLENBQUNDO0FBSEMsR0FBakIsRUFJTjJCLFVBbENjO0FBbUNsQjBnQixTQUFPLEVBQUV0aUIsa0RBQVMsQ0FBQ3lKLEtBQVYsQ0FBaUI7QUFDekI4WSxjQUFVLEVBQUV2aUIsa0RBQVMsQ0FBQ0csTUFERztBQUV6QnFpQixlQUFXLEVBQUV4aUIsa0RBQVMsQ0FBQ0csTUFGRTtBQUd6QnNpQixrQkFBYyxFQUFFemlCLGtEQUFTLENBQUNHLE1BSEQ7QUFJekJ1aUIsaUJBQWEsRUFBRTFpQixrREFBUyxDQUFDRyxNQUpBO0FBS3pCd2lCLGFBQVMsRUFBRTNpQixrREFBUyxDQUFDRyxNQUxJO0FBTXpCeWlCLGdCQUFZLEVBQUU1aUIsa0RBQVMsQ0FBQ0csTUFOQztBQU96QjBpQixlQUFXLEVBQUU3aUIsa0RBQVMsQ0FBQ0csTUFQRTtBQVF6QjJpQixlQUFXLEVBQUU5aUIsa0RBQVMsQ0FBQ0csTUFSRTtBQVN6QjRpQixlQUFXLEVBQUUvaUIsa0RBQVMsQ0FBQ0csTUFURTtBQVV6QjZpQixrQkFBYyxFQUFFaGpCLGtEQUFTLENBQUNHLE1BVkQ7QUFXekI4aUIsaUJBQWEsRUFBRWpqQixrREFBUyxDQUFDRztBQVhBLEdBQWpCO0FBbkNTLEM7O0FBeVNMdWhCLDhFQUFmLEU7Ozs7Ozs7Ozs7OztBQzFVQTtBQUNBLGtCQUFrQixtak07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEbEI7OztBQUdBO0FBRUE7Ozs7Ozs7QUFNQSxJQUFNTCxTQUFTLEdBQUcsU0FBWkEsU0FBWSxPQUE4QztBQUFBLE1BQTFDdGYsUUFBMEMsUUFBMUNBLFFBQTBDO0FBQUEsTUFBaENQLFNBQWdDLFFBQWhDQSxTQUFnQztBQUFBLE1BQWxCb2pCLFVBQWtCOztBQUMvRHBqQixXQUFTLEdBQUczQixpREFBVSxDQUNyQjJCLFNBRHFCLEVBRXJCLGdCQUZxQixDQUF0QjtBQUlBLFNBQ0M7QUFBTyxhQUFTLEVBQUdBO0FBQW5CLEtBQW9Db2pCLFVBQXBDLEdBQ0c3aUIsUUFESCxDQUREO0FBS0EsQ0FWRDs7QUFZZXNmLHdFQUFmLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkJBOzs7QUFHQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFXQSxJQUFNSSxhQUFhLEdBQUcsU0FBaEJBLGFBQWdCLE9BUWY7QUFBQSxNQVBOMWYsUUFPTSxRQVBOQSxRQU9NO0FBQUEsTUFOTnFoQixTQU1NLFFBTk5BLFNBTU07QUFBQSxNQUxOTSxTQUtNLFFBTE5BLFNBS007QUFBQSx5QkFKTnhpQixNQUlNO0FBQUEsTUFKTkEsTUFJTSw0QkFKRyxFQUlIO0FBQUEsNEJBSE5NLFNBR007QUFBQSxNQUhOQSxTQUdNLCtCQUhNLEVBR047QUFBQSwwQkFGTjhnQixPQUVNO0FBQUEsTUFGTkEsT0FFTSw2QkFGSSxFQUVKO0FBQUEsTUFESHNDLFVBQ0c7O0FBQ04xakIsUUFBTSxHQUFHQSxNQUFNLGFBQ1ZBLE1BRFUsa0JBQ01raUIsU0FETixrQkFDeUJNLFNBRHpCLDRCQUVJTixTQUZKLGtCQUV1Qk0sU0FGdkIsQ0FBZjtBQUdBbGlCLFdBQVMsR0FBRzNCLGlEQUFVLENBQ3JCMkIsU0FEcUIsRUFFckIsbUJBRnFCLGdCQUdia2lCLFNBSGEsR0FJckJwQixPQUFPLENBQUNRLFdBSmEsQ0FBdEI7QUFNQSxTQUNDO0FBQUksTUFBRSxFQUFHNWhCLE1BQVQ7QUFBa0IsYUFBUyxFQUFHTTtBQUE5QixLQUErQ29qQixVQUEvQyxHQUNHN2lCLFFBREgsQ0FERDtBQUtBLENBdkJEOztBQXlCZTBmLDRFQUFmLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekNBOzs7QUFHQTtBQUVBOzs7Ozs7OztBQU9BLElBQU1GLFdBQVcsR0FBRyxTQUFkQSxXQUFjLE9BQTBEO0FBQUEsTUFBdERzRCxVQUFzRCxRQUF0REEsVUFBc0Q7QUFBQSxNQUExQzlpQixRQUEwQyxRQUExQ0EsUUFBMEM7QUFBQSxNQUFoQ1AsU0FBZ0MsUUFBaENBLFNBQWdDO0FBQUEsTUFBbEJvakIsVUFBa0I7O0FBQzdFcGpCLFdBQVMsR0FBRzNCLGlEQUFVLENBQ3JCMkIsU0FEcUIsRUFFckIsa0JBRnFCLENBQXRCO0FBSUEsU0FBT3FqQixVQUFVLEdBQ2hCO0FBQU8sYUFBUyxFQUFHcmpCO0FBQW5CLEtBQW9Db2pCLFVBQXBDLEdBQ0c3aUIsUUFESCxDQURnQixHQUliLElBSko7QUFLQSxDQVZEOztBQVlld2YsMEVBQWYsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4QkE7OztBQUdBO0FBRUE7Ozs7Ozs7QUFNQSxJQUFNSCxXQUFXLEdBQUcsU0FBZEEsV0FBYyxPQUE4QztBQUFBLE1BQTFDcmYsUUFBMEMsUUFBMUNBLFFBQTBDO0FBQUEsTUFBaENQLFNBQWdDLFFBQWhDQSxTQUFnQztBQUFBLE1BQWxCb2pCLFVBQWtCOztBQUNqRXBqQixXQUFTLEdBQUczQixpREFBVSxDQUNyQjJCLFNBRHFCLEVBRXJCLGtCQUZxQixDQUF0QjtBQUlBLFNBQ0M7QUFBTyxhQUFTLEVBQUdBO0FBQW5CLEtBQW9Db2pCLFVBQXBDLEdBQ0c3aUIsUUFESCxDQUREO0FBS0EsQ0FWRDs7QUFZZXFmLDBFQUFmLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZCQTs7Ozs7Ozs7Ozs7QUFXQSxJQUFNSSxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQW1CLE9BU2xCO0FBQUEsTUFSTnpmLFFBUU0sUUFSTkEsUUFRTTtBQUFBLE1BUE5xaEIsU0FPTSxRQVBOQSxTQU9NO0FBQUEsTUFOTk0sU0FNTSxRQU5OQSxTQU1NO0FBQUEsTUFMTkwsT0FLTSxRQUxOQSxPQUtNO0FBQUEseUJBSk5uaUIsTUFJTTtBQUFBLE1BSk5BLE1BSU0sNEJBSkcsRUFJSDtBQUFBLDRCQUhOTSxTQUdNO0FBQUEsTUFITkEsU0FHTSwrQkFITSxFQUdOO0FBQUEsMEJBRk44Z0IsT0FFTTtBQUFBLE1BRk5BLE9BRU0sNkJBRkksRUFFSjtBQUFBLE1BREhzQyxVQUNHOztBQUNOMWpCLFFBQU0sR0FBR0EsTUFBTSxhQUNWQSxNQURVLGNBQ0VtaUIsT0FERixrQkFDbUJELFNBRG5CLGtCQUNzQ00sU0FEdEMsd0JBRUFMLE9BRkEsa0JBRWlCRCxTQUZqQixrQkFFb0NNLFNBRnBDLENBQWY7QUFHQWxpQixXQUFTLEdBQUdBLFNBQVMsYUFDaEJBLFNBRGdCLHdCQUNTNmhCLE9BRFQscUJBQzZCSyxTQUQ3Qix3QkFFTkwsT0FGTSxxQkFFY0ssU0FGZCxDQUFyQjtBQUdBLE1BQU1vQixZQUFZLEdBQUd6QixPQUFPLEdBQUcsU0FBL0I7QUFDQTdoQixXQUFTLEdBQUc4Z0IsT0FBTyxDQUFFd0MsWUFBRixDQUFQLGFBQ1B0akIsU0FETyxjQUNROGdCLE9BQU8sQ0FBRXdDLFlBQUYsQ0FEZixJQUVYdGpCLFNBRkQ7O0FBR0EsTUFBSzZoQixPQUFPLEtBQUssUUFBakIsRUFBNEI7QUFDM0J1QixjQUFVLENBQUM5RCxJQUFYLEdBQWtCLGNBQWxCO0FBQ0E4RCxjQUFVLENBQUNHLEtBQVgsR0FBbUIsS0FBbkI7QUFDQSxHQUhELE1BR08sSUFBSzFCLE9BQU8sS0FBSyxNQUFqQixFQUEwQjtBQUNoQ3VCLGNBQVUsQ0FBQ0csS0FBWCxHQUFtQixLQUFuQjtBQUNBOztBQUNELFNBQ0M7QUFBSSxNQUFFLEVBQUc3akIsTUFBVDtBQUFrQixhQUFTLEVBQUdNO0FBQTlCLEtBQStDb2pCLFVBQS9DLEdBQ0c3aUIsUUFESCxDQUREO0FBS0EsQ0EvQkQ7O0FBaUNleWYsK0VBQWYsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1Q0E7OztBQUdBO0FBRUE7Ozs7Ozs7Ozs7OztBQVdBLElBQU1GLFFBQVEsR0FBRyxTQUFYQSxRQUFXLE9BUVY7QUFBQSxNQVBOdmYsUUFPTSxRQVBOQSxRQU9NO0FBQUEsTUFOTnFoQixTQU1NLFFBTk5BLFNBTU07QUFBQSx5QkFMTmxpQixNQUtNO0FBQUEsTUFMTkEsTUFLTSw0QkFMRyxFQUtIO0FBQUEsNEJBSk5NLFNBSU07QUFBQSxNQUpOQSxTQUlNLCtCQUpNLEVBSU47QUFBQSwwQkFITjhnQixPQUdNO0FBQUEsTUFITkEsT0FHTSw2QkFISSxFQUdKO0FBQUEsMEJBRk5lLE9BRU07QUFBQSxNQUZOQSxPQUVNLDZCQUZJLE1BRUo7QUFBQSxNQURIdUIsVUFDRzs7QUFDTnZCLFNBQU8sSUFBSSxVQUFYO0FBQ0FuaUIsUUFBTSxHQUFHQSxNQUFNLGFBQ1ZBLE1BRFUsa0JBQ01raUIsU0FETiw0QkFFSUEsU0FGSixDQUFmO0FBR0E1aEIsV0FBUyxHQUFHM0IsaURBQVUsQ0FDckIyQixTQURxQixzQkFFUDZoQixPQUZPLHlCQUdiRCxTQUhhLEdBSXJCZCxPQUFPLENBQUVlLE9BQUYsQ0FKYyxDQUF0QjtBQU1BLFNBQ0M7QUFBSSxNQUFFLEVBQUduaUIsTUFBVDtBQUFrQixhQUFTLEVBQUdNO0FBQTlCLEtBQStDb2pCLFVBQS9DLEdBQ0c3aUIsUUFESCxDQUREO0FBS0EsQ0F4QkQ7O0FBMEJldWYsdUVBQWYsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUNBOzs7Ozs7Ozs7O0FBVUEsSUFBTUgsS0FBSyxHQUFHLFNBQVJBLEtBQVEsT0FPUDtBQUFBLE1BTk5wZixRQU1NLFFBTk5BLFFBTU07QUFBQSxNQUxOK2YsT0FLTSxRQUxOQSxPQUtNO0FBQUEsTUFKTlMsVUFJTSxRQUpOQSxVQUlNO0FBQUEsTUFITkosU0FHTSxRQUhOQSxTQUdNO0FBQUEsTUFGTjZDLFdBRU0sUUFGTkEsV0FFTTtBQUFBLE1BREhKLFVBQ0c7O0FBQ05yQyxZQUFVLEdBQUdBLFVBQVUsYUFDbEJBLFVBRGtCLGtCQUV0QixXQUZEO0FBR0EsU0FDQztBQUNDLFFBQUksRUFBRyxRQURSO0FBRUMsdUJBQWtCSixTQUZuQjtBQUdDLFlBQVEsRUFBQztBQUhWLEtBS0M7QUFBTyxNQUFFLEVBQUdMLE9BQVo7QUFBc0IsYUFBUyxFQUFHUztBQUFsQyxLQUFvRHFDLFVBQXBELEdBQ0M7QUFDQyxNQUFFLEVBQUd6QyxTQUROO0FBRUMsYUFBUyxFQUFHO0FBRmIsS0FJRzZDLFdBSkgsQ0FERCxFQU9HampCLFFBUEgsQ0FMRCxDQUREO0FBaUJBLENBNUJEOztBQThCZW9mLG9FQUFmLEU7Ozs7Ozs7Ozs7Ozs7QUN4Q0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7OztBQUtPLElBQU0zSCxPQUFPLEdBQUcsU0FBVkEsT0FBVSxDQUFFdlEsS0FBRixFQUFhO0FBQ25DLE1BQU1nYyxNQUFNLEdBQUcsdUNBQWY7QUFDQSxTQUFPQSxNQUFNLENBQUNoYSxJQUFQLENBQWEsQ0FBQ2hDLEtBQWQsS0FDTmljLFVBQVUsQ0FBRWpjLEtBQUYsQ0FBVixLQUF3QkEsS0FEbEIsSUFFTmtjLE1BQU0sQ0FBRWxjLEtBQUYsQ0FBTixLQUFvQkEsS0FGZCxJQUdOQSxLQUFLLEdBQUcsQ0FBUixLQUFjLENBSGY7QUFJQSxDQU5NO0FBUVA7Ozs7OztBQUtPLElBQU15USxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFFelEsS0FBRixFQUFhO0FBQ3JDLFNBQU82VixRQUFRLENBQUU3VixLQUFGLEVBQVMsRUFBVCxDQUFSLEtBQTBCQSxLQUExQixJQUNOa2MsTUFBTSxDQUFFbGMsS0FBRixDQUFOLEtBQW9CQSxLQURkLElBRU5BLEtBQUssR0FBRyxDQUFSLEtBQWMsQ0FGZjtBQUdBLENBSk07QUFNUDs7Ozs7OztBQU1PLElBQU1tYyxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFFbmMsS0FBRixFQUFvQztBQUFBLE1BQTNCb2MsY0FBMkIsdUVBQVYsSUFBVTtBQUM3RCxTQUFPcGMsS0FBSyxLQUFLLEtBQVYsSUFBbUJBLEtBQUssS0FBS3VVLFFBQTdCLElBQ0o2SCxjQUFjLElBQUlwYyxLQUFLLEtBQUssSUFEL0I7QUFFQSxDQUhNO0FBS1A7Ozs7OztBQUtPLElBQU0yUSxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFFM1EsS0FBRixFQUFhO0FBQ3JDLFNBQU8sRUFBSUEsS0FBSyxZQUFZcEksS0FBckIsS0FDTixDQUFFeWtCLEtBQUssQ0FBRUosVUFBVSxDQUFFamMsS0FBRixDQUFaLENBREQsSUFFTnNjLFFBQVEsQ0FBRXRjLEtBQUYsQ0FGVDtBQUdBLENBSk07QUFNUDs7Ozs7OztBQU1PLElBQU1tUixzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXlCLENBQUVELEdBQUYsRUFBT2xSLEtBQVAsRUFBa0I7QUFDdkQsU0FBT2ljLFVBQVUsQ0FBRWpjLEtBQUYsQ0FBVixJQUF1QmljLFVBQVUsQ0FBRS9LLEdBQUYsQ0FBeEM7QUFDQSxDQUZNO0FBSVA7Ozs7Ozs7QUFNTyxJQUFNSSw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQWdDLEdBQXlCO0FBQUEsTUFBdkJKLEdBQXVCLHVFQUFqQixJQUFpQjtBQUFBLE1BQVhsUixLQUFXO0FBQ3JFLFNBQU9BLEtBQUssS0FBSyxJQUFWLElBQ05BLEtBQUssS0FBS2QsU0FESixJQUVOLE9BQU9jLEtBQVAsS0FBaUIsV0FGWCxJQUdKLE9BQU9BLEtBQVAsS0FBaUIsV0FBakIsSUFBZ0MsT0FBT0EsS0FBSyxDQUFDckYsTUFBYixLQUF3QixXQUhwRCxJQUlOO0FBQ0UsU0FBT3FGLEtBQUssQ0FBQ3JGLE1BQWIsS0FBd0IsV0FBeEIsSUFDRGtiLFFBQVEsQ0FBRTdWLEtBQUssQ0FBQ3JGLE1BQVIsRUFBZ0IsRUFBaEIsQ0FBUixJQUFnQ2tiLFFBQVEsQ0FBRTNFLEdBQUYsRUFBTyxFQUFQLENBTjFDO0FBUUEsQ0FUTTtBQVdQOzs7Ozs7O0FBTU8sSUFBTU0sdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUEwQixDQUFFTixHQUFGLEVBQU9sUixLQUFQLEVBQWtCO0FBQ3hELFNBQU82VixRQUFRLENBQUU3VixLQUFGLEVBQVMsRUFBVCxDQUFSLElBQXlCNlYsUUFBUSxDQUFFM0UsR0FBRixFQUFPLEVBQVAsQ0FBeEM7QUFDQSxDQUZNO0FBSVA7Ozs7Ozs7QUFNTyxJQUFNUyx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQTRCLENBQUVELEdBQUYsRUFBTzFSLEtBQVAsRUFBa0I7QUFDMUQsU0FBT2ljLFVBQVUsQ0FBRWpjLEtBQUYsQ0FBVixJQUF1QmljLFVBQVUsQ0FBRXZLLEdBQUYsQ0FBeEM7QUFDQSxDQUZNO0FBSVA7Ozs7Ozs7QUFNTyxJQUFNRyxnQ0FBZ0MsR0FBRyxTQUFuQ0EsZ0NBQW1DLENBQUVILEdBQUYsRUFBTzFSLEtBQVAsRUFBa0I7QUFDakUsU0FBT0EsS0FBSyxLQUFLLElBQVYsSUFDTkEsS0FBSyxLQUFLZCxTQURKLElBRU4sT0FBT2MsS0FBUCxLQUFpQixXQUZYLElBR04sT0FBT0EsS0FBSyxDQUFDckYsTUFBYixLQUF3QixXQUhsQixJQUlOa2IsUUFBUSxDQUFFN1YsS0FBSyxDQUFDckYsTUFBUixFQUFnQixFQUFoQixDQUFSLElBQWdDa2IsUUFBUSxDQUFFbkUsR0FBRixFQUFPLEVBQVAsQ0FKekM7QUFLQSxDQU5NO0FBUVA7Ozs7Ozs7QUFNTyxJQUFNSywwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTZCLENBQUVMLEdBQUYsRUFBTzFSLEtBQVAsRUFBa0I7QUFDM0QsU0FBTzZWLFFBQVEsQ0FBRTdWLEtBQUYsRUFBUyxFQUFULENBQVIsSUFBeUI2VixRQUFRLENBQUVuRSxHQUFGLEVBQU8sRUFBUCxDQUF4QztBQUNBLENBRk0sQzs7Ozs7Ozs7Ozs7O0FDakhQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUFVTyxJQUFNNkssa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFxQixDQUFFMWMsR0FBRixFQUFPaUksTUFBUCxFQUFpQztBQUFBLE1BQWxCMFUsT0FBa0IsdUVBQVIsRUFBUTs7QUFDbEUsTUFBS0EsT0FBTyxLQUFLLEVBQWpCLEVBQXNCO0FBQ3JCQSxXQUFPLEdBQUd6aEIsbUVBQU8sQ0FDaEJ2Qyw4REFBRSxDQUNELGdFQURDLEVBRUQsZ0JBRkMsQ0FEYyxFQUtoQnNQLE1BTGdCLEVBTWhCakksR0FOZ0IsQ0FBakI7QUFRQTs7QUFDRCxNQUFLLENBQUVpSSxNQUFNLENBQUMxRyxjQUFQLENBQXVCdkIsR0FBdkIsQ0FBUCxFQUFzQztBQUNyQyxVQUFNLElBQUk0Yyw2REFBSixDQUFlRCxPQUFmLENBQU47QUFDQTtBQUNELENBZE07QUFnQlA7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCTyxJQUFNRSw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQStCLENBQzNDOUYsSUFEMkMsRUFFM0MrRixTQUYyQyxFQUl2QztBQUFBLE1BREpILE9BQ0ksdUVBRE0sRUFDTjs7QUFDSixNQUFLQSxPQUFPLEtBQUssRUFBakIsRUFBc0I7QUFDckJBLFdBQU8sR0FBR3poQixtRUFBTyxDQUNoQnZDLDhEQUFFLENBQ0Qsc0VBREMsRUFFRCxnQkFGQyxDQURjLEVBS2hCbWtCLFNBTGdCLEVBTWhCL0YsSUFOZ0IsQ0FBakI7QUFRQTs7QUFDRCxNQUFLLENBQUUrRixTQUFTLENBQUNDLEtBQVYsQ0FBaUJoRyxJQUFqQixDQUFQLEVBQWlDO0FBQ2hDLFVBQU0sSUFBSTZGLDZEQUFKLENBQWVELE9BQWYsQ0FBTjtBQUNBO0FBQ0QsQ0FsQk07QUFvQlA7Ozs7Ozs7OztBQVFPLElBQU1LLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsQ0FBRUMsS0FBRixFQUEyQjtBQUFBLE1BQWxCTixPQUFrQix1RUFBUixFQUFROztBQUN2RCxNQUFLQSxPQUFPLEtBQUssRUFBakIsRUFBc0I7QUFDckJBLFdBQU8sR0FBR2hrQiw4REFBRSxDQUFFLHFDQUFGLEVBQXlDLGdCQUF6QyxDQUFaO0FBQ0E7O0FBQ0QsTUFBSyxDQUFFWCxzREFBTyxDQUFFaWxCLEtBQUYsQ0FBZCxFQUEwQjtBQUN6QixVQUFNLElBQUlMLDZEQUFKLENBQWVELE9BQWYsQ0FBTjtBQUNBO0FBQ0QsQ0FQTTtBQVNQOzs7Ozs7Ozs7O0FBU08sSUFBTU8sZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFFRCxLQUFGLEVBQTJCO0FBQUEsTUFBbEJOLE9BQWtCLHVFQUFSLEVBQVE7O0FBQzFELE1BQUtBLE9BQU8sS0FBSyxFQUFqQixFQUFzQjtBQUNyQkEsV0FBTyxHQUFHaGtCLDhEQUFFLENBQ1gsc0NBRFcsRUFFWCxnQkFGVyxDQUFaO0FBSUE7O0FBQ0QsTUFBS2xDLHNEQUFPLENBQUV3bUIsS0FBRixDQUFaLEVBQXdCO0FBQ3ZCLFVBQU0sSUFBSUwsNkRBQUosQ0FBZUQsT0FBZixDQUFOO0FBQ0E7QUFDRCxDQVZNO0FBWVA7Ozs7Ozs7O0FBT08sSUFBTVEsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBRUMsSUFBRixFQUEwQjtBQUFBLE1BQWxCVCxPQUFrQix1RUFBUixFQUFROztBQUNwRCxNQUFLQSxPQUFPLEtBQUssRUFBakIsRUFBc0I7QUFDckJBLFdBQU8sR0FBR2hrQiw4REFBRSxDQUNYLHdDQURXLEVBRVgsZ0JBRlcsQ0FBWjtBQUlBOztBQUNELE1BQUssQ0FBRWtQLG9EQUFLLENBQUV1VixJQUFGLENBQVosRUFBdUI7QUFDdEIsVUFBTSxJQUFJUiw2REFBSixDQUFlRCxPQUFmLENBQU47QUFDQTtBQUNELENBVk0sQzs7Ozs7Ozs7Ozs7O0FDbkhQO0FBQUE7QUFBTyxJQUFNak4sVUFBVSxHQUFHLFVBQW5CLEM7Ozs7Ozs7Ozs7OztBQ0FQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUE7OztBQUdBO0FBQ0E7QUFFQTtBQUtBO0FBRU8sSUFBTTJOLFVBQVUsR0FBRztBQUN6QnptQixJQUFFLEVBQUUsUUFEcUI7QUFFekIwbUIsY0FBWSxFQUFFLFdBRlc7QUFHekJDLGVBQWEsRUFBRSxXQUhVO0FBSXpCQyxtQkFBaUIsRUFBRSxDQUFFLFdBQUYsRUFBZSxXQUFmLENBSk07QUFLekJDLG1CQUFpQixFQUFFLENBQUUsV0FBRixFQUFlLFdBQWY7QUFMTSxDQUFuQjtBQVFQOzs7OztBQUlPLElBQU03TixjQUFjLEdBQUc7QUFDN0I4TixZQUFVLEVBQUV4bUIsaURBQVMsQ0FBQ3FJLE1BRE87QUFFN0JvZSxlQUFhLEVBQUV6bUIsaURBQVMsQ0FBQ3FJLE1BRkk7QUFHN0JxZSxhQUFXLEVBQUUxbUIsaURBQVMsQ0FBQ3FJLE1BSE07QUFJN0JzZSxhQUFXLEVBQUUzbUIsaURBQVMsQ0FBQytFLEtBQVYsQ0FBaUI2aEIsK0VBQWpCLENBSmdCO0FBSzdCQyxtQkFBaUIsRUFBRTdtQixpREFBUyxDQUFDcUksTUFMQTtBQU03QjlKLGNBQVksRUFBRXlCLGlEQUFTLENBQUNDLElBTks7QUFPN0JxUixXQUFTLEVBQUV0UixpREFBUyxDQUFDeUosS0FBVixDQUFpQjtBQUMzQjROLFNBQUssRUFBRXJYLGlEQUFTLENBQUNxSSxNQURVO0FBRTNCaVAsV0FBTyxFQUFFdFgsaURBQVMsQ0FBQytFLEtBQVYsQ0FBaUIraEIsTUFBTSxDQUFDM1AsSUFBUCxDQUFhZ1AsVUFBYixDQUFqQixDQUZrQjtBQUczQjVPLFNBQUssRUFBRXZYLGlEQUFTLENBQUMrRSxLQUFWLENBQWlCeVMsMERBQWpCO0FBSG9CLEdBQWpCO0FBUGtCLENBQXZCO0FBY1A7Ozs7Ozs7Ozs7Ozs7QUFZTyxJQUFNaUIsZ0JBQWdCLEdBQUc7QUFDL0JuSCxXQUFTLEVBQUU7QUFDVitGLFNBQUssRUFBRSxHQURHO0FBRVZDLFdBQU8sRUFBRSxtQkFGQztBQUdWQyxTQUFLLEVBQUV3UCxxREFBZUE7QUFIWjtBQURvQixDQUF6QjtBQVFQOzs7Ozs7Ozs7QUFRTyxJQUFNQyxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFFMVAsT0FBRixFQUFlO0FBQ3hDLFNBQU96RywwREFBVyxDQUFFc1YsVUFBVSxDQUFFN08sT0FBRixDQUFaLENBQVgsR0FDTkEsT0FETSxHQUVONk8sVUFBVSxDQUFFN08sT0FBRixDQUZYO0FBR0EsQ0FKTTtBQU1QOzs7Ozs7Ozs7Ozs7QUFXTyxJQUFNMlAsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixPQU94QjtBQUFBLDZCQU5OVCxVQU1NO0FBQUEsTUFOTkEsVUFNTSxnQ0FOTyxDQU1QO0FBQUEsZ0NBTE5DLGFBS007QUFBQSxNQUxOQSxhQUtNLG1DQUxVLENBS1Y7QUFBQSw4QkFKTkMsV0FJTTtBQUFBLE1BSk5BLFdBSU0saUNBSlEsQ0FJUjtBQUFBLG1DQUhORyxpQkFHTTtBQUFBLE1BSE5BLGlCQUdNLHNDQUhjLENBR2Q7QUFBQSw4QkFGTkYsV0FFTTtBQUFBLE1BRk5BLFdBRU0saUNBRlEsS0FFUjtBQUFBLCtCQUROcG9CLFlBQ007QUFBQSxNQUROQSxZQUNNLGtDQURTLEtBQ1Q7QUFDTixNQUFNMm9CLEtBQUssR0FBRyxFQUFkLENBRE0sQ0FHTjs7QUFDQUwsbUJBQWlCLEdBQUcvSCxRQUFRLENBQUUrSCxpQkFBRixFQUFxQixFQUFyQixDQUE1QjtBQUNBSCxhQUFXLEdBQUc1SCxRQUFRLENBQUU0SCxXQUFGLEVBQWUsRUFBZixDQUF0QjtBQUNBRCxlQUFhLEdBQUczSCxRQUFRLENBQUUySCxhQUFGLEVBQWlCLEVBQWpCLENBQXhCO0FBQ0FELFlBQVUsR0FBRzFILFFBQVEsQ0FBRTBILFVBQUYsRUFBYyxFQUFkLENBQXJCLENBUE0sQ0FTTjs7QUFDQSxNQUFLSyxpQkFBaUIsS0FBSyxDQUF0QixJQUEyQixDQUFFdkIsS0FBSyxDQUFFdUIsaUJBQUYsQ0FBdkMsRUFBK0Q7QUFDOURLLFNBQUssQ0FBQ3JqQixJQUFOLHNDQUEyQ2dqQixpQkFBM0M7QUFDQSxHQUZELE1BRU8sSUFBS0gsV0FBVyxLQUFLLENBQWhCLElBQXFCLENBQUVwQixLQUFLLENBQUVvQixXQUFGLENBQWpDLEVBQW1EO0FBQ3pEUSxTQUFLLENBQUNyakIsSUFBTiw2Q0FBa0Q2aUIsV0FBbEQ7QUFDQSxHQUZNLE1BRUEsSUFBS0QsYUFBYSxLQUFLLENBQWxCLElBQXVCLENBQUVuQixLQUFLLENBQUVtQixhQUFGLENBQW5DLEVBQXVEO0FBQzdEUyxTQUFLLENBQUNyakIsSUFBTixzREFBMkQ0aUIsYUFBM0Q7QUFDQSxHQUZNLE1BRUEsSUFBS0QsVUFBVSxLQUFLLENBQWYsSUFBb0IsQ0FBRWxCLEtBQUssQ0FBRWtCLFVBQUYsQ0FBaEMsRUFBaUQ7QUFDdkRVLFNBQUssQ0FBQ3JqQixJQUFOLHNDQUEyQzJpQixVQUEzQztBQUNBOztBQUVELE1BQUtJLCtFQUF1QixDQUFDTyxRQUF4QixDQUFrQ1IsV0FBbEMsQ0FBTCxFQUF1RDtBQUN0RE8sU0FBSyxDQUFDcmpCLElBQU4sNkNBQWtEOGlCLFdBQWxEO0FBQ0E7O0FBQ0QsTUFBS3BvQixZQUFZLEtBQUssSUFBdEIsRUFBNkI7QUFDNUIyb0IsU0FBSyxDQUFDcmpCLElBQU4sQ0FBWSx1QkFBWjtBQUNBOztBQUNELFNBQU9xakIsS0FBSyxDQUFDNWIsSUFBTixDQUFZLEdBQVosQ0FBUDtBQUNBLENBbENNO0FBb0NQOzs7Ozs7QUFLTyxJQUFNbU0sY0FBYyxHQUFHLFNBQWpCQSxjQUFpQixHQUFzQjtBQUFBLE1BQXBCbkcsU0FBb0IsdUVBQVIsRUFBUTtBQUNuREEsV0FBUyxHQUFHLCtFQUFLbUgsZ0JBQWdCLENBQUNuSCxTQUF6QixFQUF1Q0EsU0FBdkMsQ0FBVDtBQUNBLFNBQU84Viw0REFBa0IsQ0FBRTlWLFNBQUYsRUFBYTJWLGVBQWIsRUFBOEJELFVBQTlCLENBQXpCO0FBQ0EsQ0FITSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdIUDs7O0FBR0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7OztBQWFPLElBQU1LLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBd0IsR0FLaEM7QUFBQSxNQUpKN1csUUFJSSx1RUFKTyxFQUlQO0FBQUEsTUFISjhXLGdCQUdJLHVFQUhlLEVBR2Y7QUFBQSxNQUZKQyxNQUVJLHVFQUZLQywrRUFFTDtBQUFBLE1BREpDLEtBQ0ksdUVBREksSUFDSjs7QUFDSixNQUFLbG9CLHNEQUFPLENBQUVpUixRQUFGLENBQVAsSUFBdUJqUixzREFBTyxDQUFFK25CLGdCQUFGLENBQW5DLEVBQTBEO0FBQ3pELFdBQU85VyxRQUFQO0FBQ0E7O0FBQ0QsTUFBTWtYLGlCQUFpQixHQUFHLEVBQTFCO0FBQ0FsWCxVQUFRLENBQUM3SCxPQUFULENBQWtCLFVBQUVvSSxNQUFGLEVBQWM7QUFDL0IyVyxxQkFBaUIsQ0FBQzdqQixJQUFsQixDQUF3QjhqQixtQkFBbUIsQ0FDMUM1VyxNQUQwQyxFQUUxQ3VXLGdCQUYwQyxFQUcxQ0MsTUFIMEMsRUFJMUNFLEtBSjBDLENBQTNDO0FBTUEsR0FQRDtBQVFBLFNBQU9DLGlCQUFQO0FBQ0EsQ0FuQk07QUFxQlA7Ozs7Ozs7Ozs7Ozs7QUFZTyxJQUFNQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQXNCLEdBSzlCO0FBQUEsTUFKSjVXLE1BSUksdUVBSkssRUFJTDtBQUFBLE1BSEp1VyxnQkFHSSx1RUFIZSxFQUdmO0FBQUEsTUFGSkMsTUFFSSx1RUFGS0MsK0VBRUw7QUFBQSxNQURKQyxLQUNJLHVFQURJLElBQ0o7O0FBQ0osTUFBTUcsU0FBUyxHQUFHLCtFQUFLN1csTUFBUixDQUFmOztBQUNBdVcsa0JBQWdCLENBQUMzZSxPQUFqQixDQUEwQixVQUFFa2YsU0FBRixFQUFpQjtBQUMxQyxRQUFLRCxTQUFTLENBQUVDLFNBQUYsQ0FBZCxFQUE4QjtBQUM3QkQsZUFBUyxDQUFFQyxTQUFGLENBQVQsR0FBeUJMLHVFQUFBLENBQ3hCSSxTQUFTLENBQUVDLFNBQUYsQ0FEZSxFQUV4Qk4sTUFGd0IsRUFHeEJFLEtBSHdCLENBQXpCO0FBS0E7QUFDRCxHQVJEO0FBU0EsU0FBT0csU0FBUDtBQUNBLENBakJNO0FBbUJQOzs7Ozs7Ozs7Ozs7O0FBWU8sSUFBTUUsMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUE2QixHQUlyQztBQUFBLE1BSEp0WCxRQUdJLHVFQUhPLEVBR1A7QUFBQSxNQUZKOFcsZ0JBRUksdUVBRmUsRUFFZjtBQUFBLE1BREpHLEtBQ0ksdUVBREksSUFDSjtBQUNKLFNBQU9KLHFCQUFxQixDQUMzQjdXLFFBRDJCLEVBRTNCOFcsZ0JBRjJCLEVBRzNCRSw2RUFIMkIsRUFJM0JDLEtBSjJCLENBQTVCO0FBTUEsQ0FYTTtBQWFQOzs7Ozs7Ozs7Ozs7QUFXTyxJQUFNTSx3QkFBd0IsR0FBRyxTQUEzQkEsd0JBQTJCLEdBSW5DO0FBQUEsTUFISmhYLE1BR0ksdUVBSEssRUFHTDtBQUFBLE1BRkp1VyxnQkFFSSx1RUFGZSxFQUVmO0FBQUEsTUFESkcsS0FDSSx1RUFESSxJQUNKO0FBQ0osU0FBT0UsbUJBQW1CLENBQ3pCNVcsTUFEeUIsRUFFekJ1VyxnQkFGeUIsRUFHekJFLDZFQUh5QixFQUl6QkMsS0FKeUIsQ0FBMUI7QUFNQSxDQVhNO0FBYVA7Ozs7Ozs7Ozs7Ozs7QUFZTyxJQUFNTyx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQTRCLEdBSXBDO0FBQUEsTUFISnhYLFFBR0ksdUVBSE8sRUFHUDtBQUFBLE1BRko4VyxnQkFFSSx1RUFGZSxFQUVmO0FBQUEsTUFESkcsS0FDSSx1RUFESSxJQUNKO0FBQ0osU0FBT0oscUJBQXFCLENBQzNCN1csUUFEMkIsRUFFM0I4VyxnQkFGMkIsRUFHM0JFLDRFQUgyQixFQUkzQkMsS0FKMkIsQ0FBNUI7QUFNQSxDQVhNO0FBYVA7Ozs7Ozs7Ozs7OztBQVdPLElBQU1RLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBMEIsR0FJbEM7QUFBQSxNQUhKbFgsTUFHSSx1RUFISyxFQUdMO0FBQUEsTUFGSnVXLGdCQUVJLHVFQUZlLEVBRWY7QUFBQSxNQURKRyxLQUNJLHVFQURJLElBQ0o7QUFDSixTQUFPRSxtQkFBbUIsQ0FDekI1VyxNQUR5QixFQUV6QnVXLGdCQUZ5QixFQUd6QkUsNEVBSHlCLEVBSXpCQyxLQUp5QixDQUExQjtBQU1BLENBWE07QUFhUDs7Ozs7Ozs7Ozs7QUFVTyxJQUFNUyw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQStCLEdBR3ZDO0FBQUEsTUFGSjFYLFFBRUksdUVBRk8sRUFFUDtBQUFBLE1BREo4VyxnQkFDSSx1RUFEZSxFQUNmOztBQUNKLE1BQUsvbkIsc0RBQU8sQ0FBRWlSLFFBQUYsQ0FBUCxJQUF1QmpSLHNEQUFPLENBQUUrbkIsZ0JBQUYsQ0FBbkMsRUFBMEQ7QUFDekQsV0FBTzlXLFFBQVA7QUFDQTs7QUFDRCxNQUFNa1gsaUJBQWlCLEdBQUcsRUFBMUI7QUFDQWxYLFVBQVEsQ0FBQzdILE9BQVQsQ0FBa0IsVUFBRW9JLE1BQUYsRUFBYztBQUMvQjJXLHFCQUFpQixDQUFDN2pCLElBQWxCLENBQXdCc2tCLDBCQUEwQixDQUNqRHBYLE1BRGlELEVBRWpEdVcsZ0JBRmlELENBQWxEO0FBSUEsR0FMRDtBQU1BLFNBQU9JLGlCQUFQO0FBQ0EsQ0FmTTtBQWlCUDs7Ozs7Ozs7Ozs7QUFVTyxJQUFNUywwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTZCLEdBR3JDO0FBQUEsTUFGSnBYLE1BRUksdUVBRkssRUFFTDtBQUFBLE1BREp1VyxnQkFDSSx1RUFEZSxFQUNmOztBQUNKLE1BQU1NLFNBQVMsR0FBRywrRUFBSzdXLE1BQVIsQ0FBZjs7QUFDQXVXLGtCQUFnQixDQUFDM2UsT0FBakIsQ0FBMEIsVUFBRWtmLFNBQUYsRUFBaUI7QUFDMUMsUUFBS0QsU0FBUyxDQUFFQyxTQUFGLENBQWQsRUFBOEI7QUFDN0JELGVBQVMsQ0FBRUMsU0FBRixDQUFULEdBQXlCTCxxRUFBQSxDQUN4QkksU0FBUyxDQUFFQyxTQUFGLENBRGUsQ0FBekI7QUFHQTtBQUNELEdBTkQ7QUFPQSxTQUFPRCxTQUFQO0FBQ0EsQ0FiTSxDOzs7Ozs7Ozs7Ozs7QUM5TVA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUFHQTtBQUVPLElBQU1iLGVBQWUsR0FBRyxLQUF4QjtBQUNBLElBQU1wUCxnQkFBZ0IsR0FBRyxNQUF6QjtBQUNBLElBQU1ILG9CQUFvQixHQUFHLENBQUUsS0FBRixFQUFTLE1BQVQsRUFBaUIsS0FBakIsRUFBd0IsTUFBeEIsQ0FBN0I7QUFDQSxJQUFNNFEsWUFBWSxHQUFHQyxrQkFBa0IsQ0FBRSxHQUFGLENBQXZDO0FBQ0EsSUFBTUMsU0FBUyxHQUFHRCxrQkFBa0IsQ0FBRSxHQUFGLENBQXBDO0FBQ0EsSUFBTUUsc0JBQXNCLEdBQUdGLGtCQUFrQixDQUFFLElBQUYsQ0FBakQ7QUFDQSxJQUFNRyxtQkFBbUIsR0FBR0gsa0JBQWtCLENBQUUsSUFBRixDQUE5QztBQUVQOzs7Ozs7Ozs7OztBQVVPLElBQU01USxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLEdBSXpCO0FBQUEsTUFISm5HLFNBR0ksdUVBSFEsRUFHUjtBQUFBLE1BRkoyVixlQUVJLHVFQUZjO0FBQUEsV0FBTSxJQUFOO0FBQUEsR0FFZDtBQUFBLE1BREpELFVBQ0ksdUVBRFMsVUFBRTFQLE9BQUY7QUFBQSxXQUFlQSxPQUFmO0FBQUEsR0FDVDtBQUNKLE1BQU00UCxLQUFLLEdBQUdELGVBQWUsQ0FBRTNWLFNBQUYsQ0FBN0I7QUFESSxNQUVJK0YsS0FGSixHQUVzRC9GLFNBRnRELENBRUkrRixLQUZKO0FBQUEsTUFFV0UsS0FGWCxHQUVzRGpHLFNBRnRELENBRVdpRyxLQUZYO0FBQUEsTUFFa0JELE9BRmxCLEdBRXNEaEcsU0FGdEQsQ0FFa0JnRyxPQUZsQjtBQUFBLE1BRTJCbVIsc0JBRjNCLEdBRXNEblgsU0FGdEQsQ0FFMkJtWCxzQkFGM0I7QUFHSixNQUFNQyxXQUFXLEdBQUcsRUFBcEI7O0FBQ0EsTUFBSyxDQUFFN1gsMERBQVcsQ0FBRXdHLEtBQUYsQ0FBbEIsRUFBOEI7QUFDN0JxUixlQUFXLENBQUM3a0IsSUFBWixpQkFBNEJ3VCxLQUE1QjtBQUNBOztBQUNELE1BQUssQ0FBRXhHLDBEQUFXLENBQUU0WCxzQkFBRixDQUFsQixFQUErQztBQUM5Q0MsZUFBVyxDQUFDN2tCLElBQVosb0NBQzhCNGtCLHNCQUQ5QjtBQUdBOztBQUNELE1BQUssQ0FBRTVYLDBEQUFXLENBQUVtVyxVQUFVLENBQUUxUCxPQUFGLENBQVosQ0FBbEIsRUFBOEM7QUFDN0MsUUFBS3hXLHNEQUFPLENBQUVrbUIsVUFBVSxDQUFFMVAsT0FBRixDQUFaLENBQVosRUFBd0M7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFDdkMsNkJBQXFCMFAsVUFBVSxDQUFFMVAsT0FBRixDQUEvQiw4SEFBNkM7QUFBQSxjQUFqQ3FSLEtBQWlDO0FBQzVDRCxxQkFBVyxDQUFDN2tCLElBQVosb0JBQStCOGtCLEtBQS9CLGVBQTJDcFIsS0FBM0M7QUFDQTtBQUhzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSXZDLEtBSkQsTUFJTztBQUNObVIsaUJBQVcsQ0FBQzdrQixJQUFaLGlCQUE0QjBULEtBQTVCO0FBQ0FtUixpQkFBVyxDQUFDN2tCLElBQVosb0JBQStCbWpCLFVBQVUsQ0FBRTFQLE9BQUYsQ0FBekM7QUFDQTtBQUNEOztBQUNELE1BQUlTLFdBQVcsR0FBRzJRLFdBQVcsQ0FBQ3BkLElBQVosQ0FBa0IsR0FBbEIsQ0FBbEI7O0FBQ0EsTUFBSzRiLEtBQUwsRUFBYTtBQUNablAsZUFBVyxJQUFJLE1BQU1tUCxLQUFyQjtBQUNBOztBQUNELFNBQU9uUCxXQUFQO0FBQ0EsQ0EvQk0sQzs7Ozs7Ozs7Ozs7O0FDdkJQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUFHQTtBQUVPLElBQU1TLFVBQVUsR0FBRyxTQUFuQjtBQUVBLElBQU1vUSxpQkFBaUIsR0FBRztBQUNoQ0Msb0JBQWtCLEVBQUUsS0FEWTtBQUVoQ0MsbUJBQWlCLEVBQUUsSUFGYTtBQUdoQ0Msc0JBQW9CLEVBQUU7QUFIVSxDQUExQjtBQU1BLElBQU1DLGtCQUFrQixHQUFHN21CLHFEQUFNLENBQ3ZDeW1CLGlCQUR1QyxDQUFqQyxDOzs7Ozs7Ozs7Ozs7QUNiUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FBOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBS0E7QUFFQTs7Ozs7QUFJTyxJQUFNbFEsY0FBYyxHQUFHO0FBQzdCK04sZUFBYSxFQUFFem1CLGlEQUFTLENBQUNxSSxNQURJO0FBRTdCbWUsWUFBVSxFQUFFeG1CLGlEQUFTLENBQUNxSSxNQUZPO0FBRzdCd2UsbUJBQWlCLEVBQUU3bUIsaURBQVMsQ0FBQ3FJLE1BSEE7QUFJN0JxZSxhQUFXLEVBQUUxbUIsaURBQVMsQ0FBQ3FJLE1BSk07QUFLN0JzZSxhQUFXLEVBQUUzbUIsaURBQVMsQ0FBQytFLEtBQVYsQ0FBaUJra0IsNkRBQWpCLENBTGdCO0FBTTdCM1gsV0FBUyxFQUFFdFIsaURBQVMsQ0FBQ3lKLEtBQVYsQ0FBaUI7QUFDM0I0TixTQUFLLEVBQUVyWCxpREFBUyxDQUFDcUksTUFEVTtBQUUzQmlQLFdBQU8sRUFBRXRYLGlEQUFTLENBQUMrRSxLQUFWLENBQWlCLENBQ3pCLFFBRHlCLEVBRXpCLFFBRnlCLEVBR3pCLGVBSHlCLEVBSXpCLFFBSnlCLENBQWpCLENBRmtCO0FBUTNCd1MsU0FBSyxFQUFFdlgsaURBQVMsQ0FBQytFLEtBQVYsQ0FBaUJ5UywwREFBakI7QUFSb0IsR0FBakI7QUFOa0IsQ0FBdkI7QUFrQkEsSUFBTS9HLGdCQUFnQixHQUFHO0FBQy9CMkgsU0FBTyxFQUFFLG9CQUFNO0FBQ2QsV0FBTyxDQUNOO0FBQ0M3WCxXQUFLLEVBQUUwWSw0REFBWSxDQUNsQmdRLDREQUFBLENBQWdDSixrQkFEZCxDQURwQjtBQUlDNWYsV0FBSyxFQUFFZ2dCLDREQUFBLENBQWdDSjtBQUp4QyxLQURNLEVBT047QUFDQ3RvQixXQUFLLEVBQUUwWSw0REFBWSxDQUNsQmdRLDREQUFBLENBQWdDSCxpQkFEZCxDQURwQjtBQUlDN2YsV0FBSyxFQUFFZ2dCLDREQUFBLENBQWdDSDtBQUp4QyxLQVBNLENBQVA7QUFjQTtBQWhCOEIsQ0FBekI7QUFtQlA7Ozs7Ozs7Ozs7Ozs7QUFZTyxJQUFNclEsZ0JBQWdCLEdBQUc7QUFDL0JuSCxXQUFTLEVBQUU7QUFDVitGLFNBQUssRUFBRSxHQURHO0FBRVZDLFdBQU8sRUFBRSxlQUZDO0FBR1ZDLFNBQUssRUFBRUksc0RBQWdCQTtBQUhiO0FBRG9CLENBQXpCO0FBUVA7Ozs7Ozs7Ozs7QUFTTyxJQUFNcVAsVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBRTFQLE9BQUYsRUFBZTtBQUN4QyxNQUFNNk8sVUFBVSxHQUFHO0FBQ2xCK0MsYUFBUyxFQUFFLGVBRE87QUFFbEJ4cEIsTUFBRSxFQUFFO0FBRmMsR0FBbkI7QUFJQSxTQUFPbVIsMERBQVcsQ0FBRXNWLFVBQVUsQ0FBRTdPLE9BQUYsQ0FBWixDQUFYLEdBQ05BLE9BRE0sR0FFTjZPLFVBQVUsQ0FBRTdPLE9BQUYsQ0FGWDtBQUdBLENBUk07QUFVUDs7Ozs7Ozs7Ozs7QUFVTyxJQUFNMlAsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixPQU14QjtBQUFBLGdDQUxOUixhQUtNO0FBQUEsTUFMTkEsYUFLTSxtQ0FMVSxDQUtWO0FBQUEsNkJBSk5ELFVBSU07QUFBQSxNQUpOQSxVQUlNLGdDQUpPLENBSVA7QUFBQSxtQ0FITkssaUJBR007QUFBQSxNQUhOQSxpQkFHTSxzQ0FIYyxDQUdkO0FBQUEsOEJBRk5ILFdBRU07QUFBQSxNQUZOQSxXQUVNLGlDQUZRLENBRVI7QUFBQSw4QkFETkMsV0FDTTtBQUFBLE1BRE5BLFdBQ00saUNBRFEsRUFDUjtBQUNOLE1BQU1PLEtBQUssR0FBRyxFQUFkO0FBQ0FWLFlBQVUsR0FBRzFILFFBQVEsQ0FBRTBILFVBQUYsRUFBYyxFQUFkLENBQXJCOztBQUNBLE1BQUtBLFVBQVUsS0FBSyxDQUFmLElBQW9CLENBQUVsQixLQUFLLENBQUVrQixVQUFGLENBQWhDLEVBQWlEO0FBQ2hEVSxTQUFLLENBQUNyakIsSUFBTixDQUFZLGdDQUFnQzJpQixVQUE1QztBQUNBOztBQUNEQyxlQUFhLEdBQUczSCxRQUFRLENBQUUySCxhQUFGLEVBQWlCLEVBQWpCLENBQXhCOztBQUNBLE1BQUtBLGFBQWEsS0FBSyxDQUFsQixJQUF1QixDQUFFbkIsS0FBSyxDQUFFbUIsYUFBRixDQUFuQyxFQUF1RDtBQUN0RFMsU0FBSyxDQUFDcmpCLElBQU4sQ0FBWSxtQkFBbUI0aUIsYUFBL0I7QUFDQTs7QUFDREksbUJBQWlCLEdBQUcvSCxRQUFRLENBQUUrSCxpQkFBRixFQUFxQixFQUFyQixDQUE1Qjs7QUFDQSxNQUFLQSxpQkFBaUIsS0FBSyxDQUF0QixJQUEyQixDQUFFdkIsS0FBSyxDQUFFdUIsaUJBQUYsQ0FBdkMsRUFBK0Q7QUFDOURLLFNBQUssQ0FBQ3JqQixJQUFOLENBQVksbUJBQW1CZ2pCLGlCQUEvQjtBQUNBOztBQUNESCxhQUFXLEdBQUc1SCxRQUFRLENBQUU0SCxXQUFGLEVBQWUsRUFBZixDQUF0Qjs7QUFDQSxNQUFLQSxXQUFXLEtBQUssQ0FBaEIsSUFBcUIsQ0FBRXBCLEtBQUssQ0FBRW9CLFdBQUYsQ0FBakMsRUFBbUQ7QUFDbERRLFNBQUssQ0FBQ3JqQixJQUFOLENBQVksZ0NBQWdDNmlCLFdBQTVDO0FBQ0E7O0FBQ0QsTUFBS0MsV0FBVyxLQUFLLEVBQWhCLElBQXNCQSxXQUFXLEtBQUssSUFBM0MsRUFBa0Q7QUFDakRPLFNBQUssQ0FBQ3JqQixJQUFOLENBQVksbUJBQW1COGlCLFdBQS9CO0FBQ0E7O0FBQ0QsU0FBT08sS0FBSyxDQUFDNWIsSUFBTixDQUFZLEdBQVosQ0FBUDtBQUNBLENBNUJNO0FBOEJQOzs7Ozs7QUFLTyxJQUFNbU0sY0FBYyxHQUFHLFNBQWpCQSxjQUFpQixHQUFzQjtBQUFBLE1BQXBCbkcsU0FBb0IsdUVBQVIsRUFBUTtBQUNuREEsV0FBUyxHQUFHLCtFQUFLbUgsZ0JBQWdCLENBQUNuSCxTQUF6QixFQUF1Q0EsU0FBdkMsQ0FBVDtBQUNBLFNBQU84Viw0REFBa0IsQ0FBRTlWLFNBQUYsRUFBYTJWLGVBQWIsRUFBOEJELFVBQTlCLENBQXpCO0FBQ0EsQ0FITSxDOzs7Ozs7Ozs7Ozs7QUM5SVA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRU8sSUFBTXhPLFVBQVUsR0FBRyxVQUFuQjtBQUVBLElBQU0yUSxrQkFBa0IsR0FBRztBQUNqQ0MsUUFBTSxFQUFFLEtBRHlCO0FBRWpDQyxXQUFTLEVBQUUsS0FGc0I7QUFHakNDLFNBQU8sRUFBRSxLQUh3QjtBQUlqQ0MsVUFBUSxFQUFFLEtBSnVCO0FBS2pDQyxXQUFTLEVBQUUsS0FMc0I7QUFNakNDLFVBQVEsRUFBRSxLQU51QjtBQU9qQ0MsU0FBTyxFQUFFLEtBUHdCO0FBUWpDQyxVQUFRLEVBQUU7QUFSdUIsQ0FBM0I7QUFXQSxJQUFNQyxtQkFBbUIsR0FBR3puQixxREFBTSxDQUFFZ25CLGtCQUFGLENBQWxDO0FBRUEsSUFBTVUsaUJBQWlCLEdBQUcsRUFBMUI7QUFDQSxJQUFNQyxlQUFlLEdBQUdELGlCQUFpQixHQUFHLEVBQTVDO0FBQ0EsSUFBTUUsY0FBYyxHQUFHRCxlQUFlLEdBQUcsRUFBekM7QUFDQSxJQUFNRSxlQUFlLEdBQUdGLGVBQWUsR0FBRyxDQUExQztBQUNBLElBQU1HLGdCQUFnQixHQUFHRixjQUFjLEdBQUcsRUFBMUMsQzs7Ozs7Ozs7Ozs7O0FDckJQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQUdBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBTUE7QUFFQTs7Ozs7QUFJTyxJQUFNRyxXQUFXLEdBQUcsQ0FDMUIsZUFEMEIsRUFFMUIsYUFGMEIsQ0FBcEI7QUFLUDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxJQUFNQyxVQUFVLEdBQUcsRUFBbkI7QUFFQUMscURBQU0sQ0FBRUMsaURBQUYsRUFBaUIsVUFBRUMsY0FBRixFQUFrQkMsWUFBbEIsRUFBb0M7QUFDMURKLFlBQVUsQ0FBRUksWUFBRixDQUFWLEdBQTZCLFlBQXVCO0FBQUEsc0NBQWxCQyxZQUFrQjtBQUFsQkEsa0JBQWtCO0FBQUE7O0FBQ25ELFFBQU1DLFFBQVEsR0FBR0MscURBQU0sQ0FBRUYsWUFBRixFQUFnQixDQUFoQixDQUF2QjtBQUNBLFdBQU9GLGNBQWMsTUFBZCxVQUFnQkcsUUFBUSxDQUFFLENBQUYsQ0FBeEIsRUFBK0JQLFdBQS9CLFNBQStDTSxZQUEvQyxFQUFQO0FBQ0EsR0FIRDtBQUlBLENBTEssQ0FBTjtBQU9BOzs7Ozs7Ozs7Ozs7Ozs7OztBQWdCTyxJQUFNbFMsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUF5QixDQUFFcVMsY0FBRixFQUFzQjtBQUMzRCxNQUFJMUosT0FBTyxHQUFHLEVBQWQ7O0FBQ0EsTUFBSzloQixzRkFBb0IsQ0FBRXdyQixjQUFGLEVBQWtCLFVBQWxCLENBQXpCLEVBQTBEO0FBQ3pELFFBQUtBLGNBQWMsQ0FBQ0MsYUFBZixDQUE2QkMsT0FBN0IsQ0FDSkYsY0FBYyxDQUFDRyxXQURYLEVBRUosS0FGSSxDQUFMLEVBR0k7QUFDSDdKLGFBQU8sSUFBSThKLG1GQUFvQixDQUM5QkMsaUZBRDhCLEVBRTlCTCxjQUFjLENBQUNDLGFBQWYsQ0FBNkIxZSxRQUE3QixDQUNDQyw0RUFERCxDQUY4QixFQUs5QndlLGNBQWMsQ0FBQ0csV0FBZixDQUEyQjVlLFFBQTNCLENBQ0NoQix1RUFERCxDQUw4QixDQUEvQjtBQVNBLEtBYkQsTUFhTztBQUNOK1YsYUFBTyxJQUFJOEosbUZBQW9CLENBQzlCQyxpRkFEOEIsRUFFOUJMLGNBQWMsQ0FBQ0MsYUFBZixDQUE2QjFlLFFBQTdCLENBQ0NDLDRFQURELENBRjhCLEVBSzlCd2UsY0FBYyxDQUFDRyxXQUFmLENBQTJCNWUsUUFBM0IsQ0FDQ0MsNEVBREQsQ0FMOEIsQ0FBL0I7QUFTQTs7QUFDRDhVLFdBQU8sR0FBRzBKLGNBQWMsQ0FBQ00sUUFBZixhQUNMTixjQUFjLENBQUNNLFFBRFYsZUFDeUJoSyxPQUR6QixTQUVUQSxPQUZEO0FBR0E7O0FBQ0QsU0FBT0EsT0FBUDtBQUNBLENBaENNO0FBa0NRa0oseUVBQWYsRTs7Ozs7Ozs7Ozs7O0FDdkdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRkE7OztBQUdBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFTTyxJQUFNZSxjQUFjLEdBQUdDLHNEQUFNLEVBQTdCO0FBRVA7Ozs7O0FBSU8sSUFBTXpTLGNBQWMsR0FBRztBQUM3QnBILFdBQVMsRUFBRXRSLGlEQUFTLENBQUN5SixLQUFWLENBQWlCO0FBQzNCNE4sU0FBSyxFQUFFclgsaURBQVMsQ0FBQ3FJLE1BRFU7QUFFM0JpUCxXQUFPLEVBQUV0WCxpREFBUyxDQUFDK0UsS0FBVixDQUFpQixDQUN6QixVQUR5QixFQUV6QixRQUZ5QixFQUd6QixZQUh5QixFQUl6QixVQUp5QixDQUFqQixDQUZrQjtBQVEzQndTLFNBQUssRUFBRXZYLGlEQUFTLENBQUMrRSxLQUFWLENBQWlCeVMsMERBQWpCLENBUm9CO0FBUzNCNFQsZUFBVyxFQUFFcHJCLGlEQUFTLENBQUNDLElBVEk7QUFVM0JvckIsU0FBSyxFQUFFcnJCLGlEQUFTLENBQUNxckI7QUFWVSxHQUFqQjtBQURrQixDQUF2QjtBQWVQOzs7Ozs7Ozs7Ozs7OztBQWFPLElBQU01UyxnQkFBZ0IsR0FBRztBQUMvQm5ILFdBQVMsRUFBRTtBQUNWK0YsU0FBSyxFQUFFLEdBREc7QUFFVkMsV0FBTyxFQUFFLFlBRkM7QUFHVkMsU0FBSyxFQUFFSSxzREFIRztBQUlWeVQsZUFBVyxFQUFFO0FBSkg7QUFEb0IsQ0FBekI7QUFTUDs7Ozs7Ozs7OztBQVNPLElBQU1wRSxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFFMVAsT0FBRixFQUFlO0FBQ3hDLE1BQU02TyxVQUFVLEdBQUc7QUFDbEJtRixjQUFVLEVBQUUsZUFETTtBQUVsQkMsWUFBUSxFQUFFO0FBRlEsR0FBbkI7QUFJQSxTQUFPMWEsMERBQVcsQ0FBRXNWLFVBQVUsQ0FBRTdPLE9BQUYsQ0FBWixDQUFYLEdBQ05BLE9BRE0sR0FFTjZPLFVBQVUsQ0FBRTdPLE9BQUYsQ0FGWDtBQUdBLENBUk07QUFVUDs7Ozs7Ozs7Ozs7QUFVTyxJQUFNMlAsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixPQUl4QjtBQUFBLDZCQUhOVCxVQUdNO0FBQUEsTUFITkEsVUFHTSxnQ0FITyxDQUdQO0FBQUEsOEJBRk40RSxXQUVNO0FBQUEsTUFGTkEsV0FFTSxpQ0FGUSxLQUVSO0FBQUEsd0JBRE5DLEtBQ007QUFBQSxNQUROQSxLQUNNLDJCQURFLE1BQ0Y7QUFDTixNQUFNbkUsS0FBSyxHQUFHLEVBQWQ7O0FBQ0EsTUFBSyxDQUFFa0UsV0FBUCxFQUFxQjtBQUNwQmxFLFNBQUssQ0FBQ3JqQixJQUFOLENBQ0MsbUNBQW1DdWtCLGtEQUFuQyxHQUNBLGlDQURBLEdBRUE4QyxjQUFjLENBQUN6RCxLQUFmLEdBQXVCRixNQUF2QixFQUhEO0FBS0E7O0FBQ0QsTUFBSzhELEtBQUssSUFBSUEsS0FBSyxLQUFLLE1BQXhCLEVBQWlDO0FBQ2hDbkUsU0FBSyxDQUFDcmpCLElBQU4sQ0FDQyw0QkFBNEIwa0IsNERBQTVCLEdBQ0EsMEJBREEsR0FFQTRDLHNEQUFNLEdBQUdFLEtBQVQsQ0FBZ0JBLEtBQWhCLEVBQXdCRyxPQUF4QixDQUFpQyxPQUFqQyxFQUEyQy9ELEtBQTNDLEdBQW1ERixNQUFuRCxFQUhEO0FBS0FMLFNBQUssQ0FBQ3JqQixJQUFOLENBQ0MsMEJBQTBCMmtCLHlEQUExQixHQUNBLHdCQURBLEdBRUEyQyxzREFBTSxHQUFHRSxLQUFULENBQWdCQSxLQUFoQixFQUF3QkksS0FBeEIsQ0FBK0IsT0FBL0IsRUFBeUNoRSxLQUF6QyxHQUFpREYsTUFBakQsRUFIRDtBQUtBOztBQUNELE1BQUt6SSxRQUFRLENBQUUwSCxVQUFGLEVBQWMsRUFBZCxDQUFSLEtBQStCLENBQXBDLEVBQXdDO0FBQ3ZDVSxTQUFLLENBQUNyakIsSUFBTixDQUFZLHlCQUF5QjJpQixVQUFyQztBQUNBOztBQUNELFNBQU9VLEtBQUssQ0FBQzViLElBQU4sQ0FBWSxHQUFaLENBQVA7QUFDQSxDQTdCTTtBQStCUDs7Ozs7O0FBS08sSUFBTW1NLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsR0FBc0I7QUFBQSxNQUFwQm5HLFNBQW9CLHVFQUFSLEVBQVE7QUFDbkRBLFdBQVMsR0FBRywrRUFBS21ILGdCQUFnQixDQUFDbkgsU0FBekIsRUFBdUNBLFNBQXZDLENBQVQ7QUFDQSxTQUFPOFYsNERBQWtCLENBQUU5VixTQUFGLEVBQWEyVixlQUFiLEVBQThCRCxVQUE5QixDQUF6QjtBQUNBLENBSE0sQzs7Ozs7Ozs7Ozs7O0FDL0hQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUFHQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUVBOzs7Ozs7QUFLQSxJQUFNMEUsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUF1QixDQUFFZixjQUFGLEVBQXNCO0FBQ2xELE1BQUssQ0FBRXhyQixzRkFBb0IsQ0FBRXdyQixjQUFGLEVBQWtCblMscURBQWxCLENBQTNCLEVBQTREO0FBQzNELFVBQU0sSUFBSXVILFNBQUosQ0FDTCxnREFESyxDQUFOO0FBR0E7QUFDRCxDQU5EO0FBUUE7Ozs7Ozs7QUFLTyxJQUFNVSxRQUFRLEdBQUcsU0FBWEEsUUFBVyxDQUFFa0ssY0FBRixFQUFzQjtBQUM3Q2Usc0JBQW9CLENBQUVmLGNBQUYsQ0FBcEI7QUFDQSxTQUFPQSxjQUFjLENBQUNnQixLQUFmLENBQXFCQyxPQUFyQixHQUErQkMsU0FBL0IsS0FBNkMsQ0FBN0MsSUFDTmxCLGNBQWMsQ0FBQ21CLEdBQWYsQ0FBbUJGLE9BQW5CLEdBQTZCQyxTQUE3QixLQUEyQyxDQUQ1QztBQUVBLENBSk07QUFNUDs7Ozs7O0FBS08sSUFBTUUsU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBRXBCLGNBQUYsRUFBc0I7QUFDOUNlLHNCQUFvQixDQUFFZixjQUFGLENBQXBCO0FBQ0EsU0FBT0EsY0FBYyxDQUFDbUIsR0FBZixDQUFtQkYsT0FBbkIsR0FBNkJDLFNBQTdCLEtBQTJDLENBQWxEO0FBQ0EsQ0FITTtBQUtQOzs7Ozs7QUFLTyxJQUFNRyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQUVyQixjQUFGLEVBQXNCO0FBQ3REZSxzQkFBb0IsQ0FBRWYsY0FBRixDQUFwQjtBQUNBLFNBQU9BLGNBQWMsQ0FBQ21CLEdBQWYsQ0FBbUJGLE9BQW5CLEdBQTZCQyxTQUE3QixLQUEyQyxDQUEzQyxJQUNObEIsY0FBYyxDQUFDbUIsR0FBZixDQUFtQkYsT0FBbkIsR0FBNkJDLFNBQTdCLEtBQTZDNUIsMkRBQWdCLEdBQUcsQ0FBQyxDQURsRTtBQUVBLENBSk07QUFNUDs7Ozs7O0FBS08sSUFBTWdDLFNBQVMsR0FBRyxTQUFaQSxTQUFZLENBQUV0QixjQUFGLEVBQXNCO0FBQzlDZSxzQkFBb0IsQ0FBRWYsY0FBRixDQUFwQjtBQUNBLE1BQU11QixHQUFHLEdBQUd2QixjQUFjLENBQUN3QixRQUEzQjtBQUNBLFNBQVNELEdBQUcsS0FBSyxJQUFSLElBQWdCQSxHQUFHLEtBQUssS0FBeEIsSUFBaUNBLEdBQUcsS0FBSzFPLFFBQXpDLElBQXFEME8sR0FBRyxLQUFLLENBQUMsQ0FBaEUsSUFDTnZCLGNBQWMsQ0FBQ3lCLElBQWYsSUFBdUJGLEdBRHhCO0FBRUEsQ0FMTTtBQU9QOzs7Ozs7QUFLTyxJQUFNRyxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFFMUIsY0FBRixFQUFzQjtBQUMvQ2Usc0JBQW9CLENBQUVmLGNBQUYsQ0FBcEI7QUFDQSxTQUFPQSxjQUFjLENBQUNnQixLQUFmLENBQXFCQyxPQUFyQixHQUErQkMsU0FBL0IsS0FBNkMsQ0FBcEQ7QUFDQSxDQUhNO0FBS1A7Ozs7OztBQUtPLElBQU1TLFNBQVMsR0FBRyxTQUFaQSxTQUFZLENBQUUzQixjQUFGLEVBQXNCO0FBQzlDZSxzQkFBb0IsQ0FBRWYsY0FBRixDQUFwQjtBQUNBLFNBQU9BLGNBQWMsQ0FBQzRCLE9BQXRCO0FBQ0EsQ0FITSxDLENBS1A7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7O0FBS08sSUFBTUMsTUFBTSxHQUFHLFNBQVRBLE1BQVMsQ0FBRTdCLGNBQUYsRUFBc0I7QUFDM0NlLHNCQUFvQixDQUFFZixjQUFGLENBQXBCOztBQUNBLE1BQUsyQixTQUFTLENBQUUzQixjQUFGLENBQWQsRUFBbUM7QUFDbEMsV0FBT3hCLDZEQUFrQixDQUFDTyxPQUExQjtBQUNBOztBQUNELE1BQUtxQyxTQUFTLENBQUVwQixjQUFGLENBQWQsRUFBbUM7QUFDbEMsV0FBT3hCLDZEQUFrQixDQUFDRyxPQUExQjtBQUNBOztBQUNELE1BQUsyQyxTQUFTLENBQUV0QixjQUFGLENBQWQsRUFBbUM7QUFDbEMsV0FBT3hCLDZEQUFrQixDQUFDTSxRQUExQjtBQUNBOztBQUNELE1BQUs0QyxVQUFVLENBQUUxQixjQUFGLENBQWYsRUFBb0M7QUFDbkMsV0FBT3hCLDZEQUFrQixDQUFDUSxRQUExQjtBQUNBOztBQUNELE1BQUtsSixRQUFRLENBQUVrSyxjQUFGLENBQWIsRUFBa0M7QUFDakMsV0FBT3hCLDZEQUFrQixDQUFDQyxNQUExQjtBQUNBLEdBaEIwQyxDQWlCM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQU9ELDZEQUFrQixDQUFDSSxRQUExQjtBQUNBLENBekJNO0FBMkJQOzs7Ozs7QUFLTyxJQUFNa0QsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUEwQixDQUFFOUIsY0FBRixFQUFzQjtBQUM1RCw4Q0FBc0M2QixNQUFNLENBQUU3QixjQUFGLENBQTVDO0FBQ0EsQ0FGTTtBQUlQOzs7Ozs7QUFLTyxJQUFNK0IsMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUE2QixDQUFFL0IsY0FBRixFQUFzQjtBQUMvRCxNQUFJZ0MsVUFBVSxHQUFHLEVBQWpCOztBQUNBLFVBQVNILE1BQU0sQ0FBRTdCLGNBQUYsQ0FBZjtBQUNDLFNBQUt4Qiw2REFBa0IsQ0FBQ00sUUFBeEI7QUFDQ2tELGdCQUFVLEdBQUdsckIsOERBQUUsQ0FBRSxVQUFGLEVBQWMsZ0JBQWQsQ0FBZjtBQUNBOztBQUNELFNBQUswbkIsNkRBQWtCLENBQUNHLE9BQXhCO0FBQ0NxRCxnQkFBVSxHQUFHbHJCLDhEQUFFLENBQUUsU0FBRixFQUFhLGdCQUFiLENBQWY7QUFDQTs7QUFDRCxTQUFLMG5CLDZEQUFrQixDQUFDUSxRQUF4QjtBQUNDZ0QsZ0JBQVUsR0FBR2xyQiw4REFBRSxDQUFFLFVBQUYsRUFBYyxnQkFBZCxDQUFmO0FBQ0E7O0FBQ0QsU0FBSzBuQiw2REFBa0IsQ0FBQ0MsTUFBeEI7QUFDQ3VELGdCQUFVLEdBQUdsckIsOERBQUUsQ0FBRSxRQUFGLEVBQVksZ0JBQVosQ0FBZjtBQUNBOztBQUNELFNBQUswbkIsNkRBQWtCLENBQUNPLE9BQXhCO0FBQ0NpRCxnQkFBVSxHQUFHbHJCLDhEQUFFLENBQUUsVUFBRixFQUFjLGdCQUFkLENBQWY7QUFDQTs7QUFDRCxTQUFLMG5CLDZEQUFrQixDQUFDRSxTQUF4QjtBQUNDc0QsZ0JBQVUsR0FBR2xyQiw4REFBRSxDQUFFLFdBQUYsRUFBZSxnQkFBZixDQUFmO0FBQ0E7O0FBQ0QsU0FBSzBuQiw2REFBa0IsQ0FBQ0ssU0FBeEI7QUFDQ21ELGdCQUFVLEdBQUdsckIsOERBQUUsQ0FBRSxXQUFGLEVBQWUsZ0JBQWYsQ0FBZjtBQUNBOztBQUNELFNBQUswbkIsNkRBQWtCLENBQUNJLFFBQXhCO0FBQ0E7QUFDQ29ELGdCQUFVLEdBQUdsckIsOERBQUUsQ0FBRSxVQUFGLEVBQWMsZ0JBQWQsQ0FBZjtBQUNBO0FBekJGOztBQTJCQSxTQUFPa3JCLFVBQVA7QUFDQSxDQTlCTSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0pQOzs7QUFHQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUVBOzs7Ozs7OztBQU9BLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsQ0FBRUMsa0JBQUYsRUFBMEI7QUFDbkQsU0FBT0Msd0RBQVMsQ0FBRUQsa0JBQUYsRUFDZixZQUFXO0FBQ1YsV0FBTyxFQUFQO0FBQ0EsR0FIYyxDQUFoQjtBQUtBLENBTkQ7O0FBUUEsSUFBTUUsNkJBQTZCLEdBQUdDLDZDQUFPLENBQzVDO0FBQUEsU0FBTUosaUJBQWlCLENBQUVLLHVEQUFGLENBQXZCO0FBQUEsQ0FENEMsQ0FBN0M7QUFJQTs7Ozs7O0FBS08sSUFBTUMsbUJBQW1CLEdBQUdOLGlCQUFpQixDQUFFSyx1REFBRixDQUE3QztBQUVQOzs7Ozs7QUFLTyxJQUFNRSxrQkFBa0IsR0FBRztBQUNqQzNjLFVBQVEsRUFBRSwrRUFDTnVjLDZCQUE2QixFQUR6QixDQUR5QjtBQUlqQ0ssV0FBUyxFQUFFLEVBSnNCO0FBS2pDQyxPQUFLLEVBQUU7QUFDTkQsYUFBUyxFQUFFO0FBQ1Z2a0IsV0FBSyxFQUFFLEVBREc7QUFFVnlrQixZQUFNLEVBQUUsRUFGRTtBQUdWQyxTQUFHLEVBQUU7QUFISyxLQURMO0FBTU5DLFNBQUssRUFBRSxFQU5EO0FBT05GLFVBQU0sRUFBRTtBQVBGO0FBTDBCLENBQTNCO0FBZ0JQOzs7OztBQUlPLElBQU1HLG9CQUFvQixHQUFHO0FBQ25DQyxRQUFNLEVBQUUsK0VBQ0pYLDZCQUE2QixFQUQzQixDQUQ2QjtBQUluQ1ksU0FBTyxFQUFFLCtFQUNMWiw2QkFBNkIsRUFEMUIsQ0FKNEI7QUFPbkNhLG1CQUFpQixFQUFFLCtFQUNmYiw2QkFBNkIsRUFEaEIsQ0FQa0I7QUFVbkNjLGdCQUFjLEVBQUU7QUFWbUIsQ0FBN0IsQzs7Ozs7Ozs7Ozs7O0FDOURQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUFHQTtBQUVBOzs7O0FBR0E7QUFFQTs7Ozs7O2tCQVFJam9CLHdEQUFJLENBQUNrb0IsSzt3Q0FGUkMsb0I7SUFBc0JkLFMsc0NBQVksRTtJQUNqQmUsYSxlQUFqQkMsZTtBQUdEOzs7Ozs7Ozs7QUFPTyxJQUFNQyxXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFFOWMsU0FBRixFQUFpQjtBQUMzQ29VLHdFQUFrQixDQUFFcFUsU0FBRixFQUFhNmIsU0FBYixDQUFsQjtBQUNBLFNBQU9BLFNBQVMsQ0FBRTdiLFNBQUYsQ0FBaEI7QUFDQSxDQUhNO0FBS1A7Ozs7Ozs7QUFNTyxJQUFNK2MsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFFL2MsU0FBRixFQUFtQztBQUFBLE1BQXRCMkcsV0FBc0IsdUVBQVIsRUFBUTtBQUNsRSxTQUFPQSxXQUFXLEtBQUssRUFBaEIsR0FDTm1XLFdBQVcsQ0FBRTljLFNBQUYsQ0FBWCxHQUEyQixHQUEzQixHQUFpQzJHLFdBRDNCLEdBRU5tVyxXQUFXLENBQUU5YyxTQUFGLENBRlo7QUFHQSxDQUpNO0FBTVA7Ozs7Ozs7O0FBT08sSUFBTWdkLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBd0IsQ0FBRTF2QixHQUFGLEVBQVc7QUFDL0MsU0FBT0EsR0FBRyxDQUFDME0sT0FBSixDQUFhNGlCLGFBQWIsRUFBNEIsRUFBNUIsQ0FBUDtBQUNBLENBRk0sQzs7Ozs7Ozs7Ozs7O0FDbkRQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7OztBQUdBO0FBSUE7QUFNQTtBQUVBOzs7Ozs7Ozs7Ozs7O0FBWU8sSUFBTUssc0JBQXNCLEdBQUcsU0FBekJBLHNCQUF5QixDQUFFclUsU0FBRixFQUFhRCxVQUFiLEVBQXlCMlQsTUFBekIsRUFBcUM7QUFDMUUsTUFBS1ksaUVBQWUsQ0FBRXRVLFNBQUYsRUFBYTBULE1BQWIsQ0FBcEIsRUFBNEM7QUFDM0N2UiwrRUFBUSxDQUFDb1MsZ0JBQVQsQ0FBMkJ4VSxVQUEzQjtBQUNBOztBQUNELE1BQUt5VSw4REFBWSxDQUFFeFUsU0FBRixFQUFhMFQsTUFBYixDQUFqQixFQUF5QztBQUN4Q2Usc0VBQUssQ0FBQ0MsV0FBTixDQUFtQjNVLFVBQW5CO0FBQ0E7QUFDRCxDQVBNO0FBU1A7Ozs7Ozs7Ozs7QUFTTyxJQUFNNFUsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFvQixDQUFFakIsTUFBRixFQUFjO0FBQzlDLE1BQUssQ0FBRWtCLDBFQUFRLENBQUVsQixNQUFGLENBQWYsRUFBNEI7QUFDM0IsVUFBTSxJQUFJbUIsaUVBQUosQ0FDTCx3Q0FESyxDQUFOO0FBR0E7QUFDRCxDQU5NO0FBUVA7Ozs7Ozs7Ozs7OztBQVdPLElBQU1DLGdDQUFnQyxHQUFHLFNBQW5DQSxnQ0FBbUMsQ0FDL0MxZCxTQUQrQyxFQUUvQzRJLFNBRitDLEVBRy9DMFQsTUFIK0MsRUFJM0M7QUFDSixNQUFLN2MsMERBQVcsQ0FBRTZjLE1BQU0sQ0FBRTFULFNBQUYsQ0FBUixDQUFoQixFQUEwQztBQUN6QyxVQUFNLElBQUkrRixTQUFKLENBQ0wvYixtRUFBTyxDQUNOLDRFQURNLEVBRU5nVyxTQUZNLEVBR041SSxTQUhNLENBREYsQ0FBTjtBQU9BOztBQUNELE1BQUtzYyxNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0J0WixJQUFwQixLQUE2QixRQUFsQyxFQUE2QztBQUM1QyxRQUFLbVEsMERBQVcsQ0FBRTZjLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQitVLFVBQXRCLENBQWhCLEVBQXFEO0FBQ3BELFlBQU0sSUFBSUYsaUVBQUosQ0FDTDdxQixtRUFBTyxDQUNOLDBHQURNLEVBRU5nVyxTQUZNLEVBR041SSxTQUhNLENBREYsQ0FBTjtBQU9BOztBQUNELFFBQUtQLDBEQUFXLENBQUU2YyxNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0IrVSxVQUFwQixDQUErQkMsR0FBakMsQ0FBaEIsRUFBeUQ7QUFDeEQsWUFBTSxJQUFJSCxpRUFBSixDQUNMN3FCLG1FQUFPLENBQ04sa0lBRE0sRUFFTmdXLFNBRk0sRUFHTjVJLFNBSE0sQ0FERixDQUFOO0FBT0E7O0FBQ0QsUUFBS1AsMERBQVcsQ0FBRTZjLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQitVLFVBQXBCLENBQStCQyxHQUEvQixDQUFtQ3R1QixJQUFyQyxDQUFoQixFQUE4RDtBQUM3RCxZQUFNLElBQUltdUIsaUVBQUosQ0FDTDdxQixtRUFBTyxDQUNOLDZKQURNLEVBRU5nVyxTQUZNLEVBR041SSxTQUhNLENBREYsQ0FBTjtBQU9BO0FBQ0Q7QUFDRCxDQTNDTTtBQTZDUDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCTyxJQUFNNmQsZ0NBQWdDLEdBQUcsU0FBbkNBLGdDQUFtQyxDQUMvQ2pWLFNBRCtDLEVBRS9DRCxVQUYrQyxFQUcvQ21WLFFBSCtDLEVBSTNDO0FBQUEsTUFDSXhCLE1BREosR0FDZXdCLFFBRGYsQ0FDSXhCLE1BREo7QUFFSixNQUFJeUIsT0FBTyxHQUFHQywrRUFBMkIsQ0FDeENwVixTQUR3QyxFQUV4Q0QsVUFGd0MsRUFHeEMyVCxNQUh3QyxDQUF6Qzs7QUFLQSxNQUFLLENBQUV5QixPQUFGLElBQWF6QixNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0J0WixJQUFwQixLQUE2QixRQUExQyxJQUNKZ3RCLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQitVLFVBRHJCLEVBRUU7QUFDREksV0FBTyxHQUFHekIsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CK1UsVUFBcEIsQ0FBK0JDLEdBQS9CLENBQW1DSyxJQUFuQyxHQUNUQyxvRUFBZ0IsQ0FDZjVCLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQitVLFVBQXBCLENBQStCQyxHQUEvQixDQUFtQ3R1QixJQURwQixFQUVmZ3RCLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQitVLFVBQXBCLENBQStCQyxHQUEvQixDQUFtQ0ssSUFGcEIsRUFHZnRWLFVBSGUsQ0FEUCxHQU1Ud1YsZ0VBQVksQ0FDWDdCLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQitVLFVBQXBCLENBQStCQyxHQUEvQixDQUFtQ3R1QixJQUR4QixFQUVYOHVCLDZGQUF5QyxDQUN4Q3hWLFNBRHdDLEVBRXhDRCxVQUZ3QyxFQUd4QzJULE1BSHdDLENBRjlCLENBTmI7O0FBY0EsUUFBSyxDQUFFeUIsT0FBUCxFQUFpQjtBQUNoQixZQUFNLElBQUlwUCxTQUFKLENBQ0wvYixtRUFBTyxDQUNOLDBJQURNLEVBRU5nVyxTQUZNLEVBR05ELFVBSE0sRUFJTjJULE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQitVLFVBQXBCLENBQStCQyxHQUEvQixDQUFtQ3R1QixJQUo3QixDQURGLENBQU47QUFRQTtBQUNEOztBQUNELE1BQUssQ0FBRXl1QixPQUFQLEVBQWlCO0FBQ2hCLFVBQU0sSUFBSXBQLFNBQUosQ0FDTC9iLG1FQUFPLENBQ04seUZBRE0sRUFFTmdXLFNBRk0sRUFHTkQsVUFITSxFQUlOMlQsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CdFosSUFKZCxDQURGLENBQU47QUFRQTtBQUNELENBakRNO0FBbURQOzs7Ozs7Ozs7Ozs7Ozs7OztBQWdCTyxJQUFNK3VCLHFDQUFxQyxHQUFHLFNBQXhDQSxxQ0FBd0MsQ0FDcERyZSxTQURvRCxFQUVwRDRJLFNBRm9ELEVBR3BERCxVQUhvRCxFQUlwRG1WLFFBSm9ELEVBS2hEO0FBQ0osTUFBTXhCLE1BQU0sR0FBR3dCLFFBQVEsQ0FBQ3hCLE1BQXhCO0FBQ0EsTUFBTWdDLGNBQWMsR0FBR0Msd0VBQW9CLENBQUUzVixTQUFGLEVBQWFrVixRQUFiLENBQTNDO0FBQ0FKLGtDQUFnQyxDQUFFMWQsU0FBRixFQUFhNEksU0FBYixFQUF3QjBULE1BQXhCLENBQWhDO0FBQ0EsTUFBSXlCLE9BQU8sR0FBR0MsK0VBQTJCLENBQ3hDcFYsU0FEd0MsRUFFeENELFVBRndDLEVBR3hDMlQsTUFId0MsRUFJeEMsS0FKd0MsQ0FBekMsQ0FKSSxDQVVKO0FBQ0E7O0FBQ0EsTUFBS0EsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CdFosSUFBcEIsS0FBNkIsUUFBN0IsSUFDSmd0QixNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0IrVSxVQURyQixFQUVFO0FBQ0QsUUFBS2xlLDBEQUFXLENBQUVrSixVQUFVLENBQUUyVixjQUFGLENBQVosQ0FBaEIsRUFBbUQ7QUFDbEQsWUFBTSxJQUFJM1AsU0FBSixDQUNML2IsbUVBQU8sQ0FDTixpSEFETSxFQUVOZ1csU0FGTSxFQUdOMFYsY0FITSxDQURGLENBQU47QUFPQTs7QUFDRFAsV0FBTyxHQUFHekIsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CK1UsVUFBcEIsQ0FBZ0NXLGNBQWhDLEVBQWlETCxJQUFqRCxHQUNUQyxvRUFBZ0IsQ0FDZjVCLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQitVLFVBQXBCLENBQWdDVyxjQUFoQyxFQUFpRGh2QixJQURsQyxFQUVmZ3RCLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQitVLFVBQXBCLENBQStCQyxHQUEvQixDQUFtQ0ssSUFGcEIsRUFHZnRWLFVBQVUsQ0FBRTJWLGNBQUYsQ0FISyxDQURQLEdBTVRILGdFQUFZLENBQ1g3QixNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0IrVSxVQUFwQixDQUFnQ1csY0FBaEMsRUFBaURodkIsSUFEdEMsRUFFWHFaLFVBQVUsQ0FBRTJWLGNBQUYsQ0FGQyxDQU5iOztBQVVBLFFBQUssQ0FBRVAsT0FBUCxFQUFpQjtBQUNoQixZQUFNLElBQUlwUCxTQUFKLENBQ0wvYixtRUFBTyxDQUNOLDBJQURNLEVBRU5nVyxTQUZNLEVBR04wVixjQUhNLEVBSU4zVixVQUpNLEVBS04yVCxNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0IrVSxVQUFwQixDQUFnQ1csY0FBaEMsRUFBaURodkIsSUFMM0MsQ0FERixDQUFOO0FBU0E7QUFDRDs7QUFDRCxNQUFLLENBQUV5dUIsT0FBUCxFQUFpQjtBQUNoQixVQUFNLElBQUlwUCxTQUFKLENBQ0wvYixtRUFBTyxDQUNOLHlGQURNLEVBRU5nVyxTQUZNLEVBR05ELFVBSE0sRUFJTjJULE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQnRaLElBSmQsQ0FERixDQUFOO0FBUUE7QUFDRCxDQTdETSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuTlA7OztBQUdBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFNQTtBQUtBOzs7Ozs7NEJBTUdrdkIsOERBQWtCLENBQUNDLFU7NEJBQ25CRCw4REFBa0IsQ0FBQ0UsYzs7SUFGaEJDLFU7OztBQUlMOzs7Ozs7OztBQVFBLHNCQUNDM2UsU0FERCxFQUVDNGUscUJBRkQsRUFHQ3RDLE1BSEQsRUFNRTtBQUFBLFFBRkR1QyxhQUVDLHVFQUZlLEVBRWY7QUFBQSxRQUREQyxLQUNDLHVFQURPLEtBQ1A7O0FBQUE7O0FBQUEsOEdBakJrQ0wsc0RBQVUsQ0FBQ00sS0FpQjdDOztBQUFBLDhHQWhCc0MsRUFnQnRDOztBQUNEeEIseUVBQWlCLENBQUVqQixNQUFGLENBQWpCO0FBQ0F1QyxpQkFBYSxHQUFHbnZCLHNEQUFPLENBQUVtdkIsYUFBRixDQUFQLEdBQTJCQSxhQUEzQixHQUEyQyxFQUEzRDtBQUNBRyxnRUFBWSxDQUFFLElBQUYsRUFBUSxlQUFSLEVBQXlCSCxhQUF6QixDQUFaO0FBQ0FHLGdFQUFZLENBQUUsSUFBRixFQUFRLFFBQVIsRUFBa0IxQyxNQUFNLENBQUNxQixVQUF6QixDQUFaO0FBQ0FzQixnRUFBWSxDQUNYLElBRFcsRUFFWEgsS0FBSyxHQUFHTCxzREFBVSxDQUFDUyxHQUFkLEdBQW9CVCxzREFBVSxDQUFDTSxLQUZ6QixDQUFaO0FBSUFDLGdFQUFZLENBQUUsSUFBRixFQUFRLFdBQVIsRUFBcUJoZixTQUFyQixDQUFaO0FBQ0FnZixnRUFBWSxDQUFFLElBQUYsRUFBUSx5QkFBUixFQUFtQ0oscUJBQW5DLENBQVo7QUFDQUksZ0VBQVksQ0FDWCxJQURXLEVBRVgseUJBRlcsRUFHWCxJQUFJRyxHQUFKLENBQVN6SixNQUFNLENBQUMzUCxJQUFQLENBQWE2WSxxQkFBYixDQUFULENBSFcsQ0FBWjtBQUtBUSxpRkFBNkIsQ0FBRSxJQUFGLENBQTdCO0FBQ0FDLHFGQUFpQyxDQUFFLElBQUYsQ0FBakM7QUFDQTNKLFVBQU0sQ0FBQzRKLElBQVAsQ0FBYSxJQUFiO0FBQ0E7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozt3QkFZZ0I7QUFDZixhQUFPLEtBQU1kLDhEQUFrQixDQUFDQyxVQUF6QixDQUFQO0FBQ0E7QUFFRDs7Ozs7Ozt3QkFJWTtBQUNYLGFBQU8sS0FBS2MsU0FBTCxLQUFtQmQsc0RBQVUsQ0FBQ1MsR0FBckM7QUFDQTtBQUVEOzs7Ozs7O3dCQUljO0FBQ2IsYUFBTyxLQUFLSyxTQUFMLEtBQW1CZCxzREFBVSxDQUFDZSxLQUFyQztBQUNBO0FBRUQ7Ozs7Ozs7d0JBSWM7QUFDYixhQUFPLEtBQUtELFNBQUwsS0FBbUJkLHNEQUFVLENBQUNNLEtBQXJDO0FBQ0E7QUFFRDs7Ozs7Ozt3QkFJMEI7QUFDekIsYUFBTyxLQUFLVSxlQUFMLENBQXFCanRCLE1BQXJCLEdBQThCLENBQXJDO0FBQ0E7QUFFRDs7Ozs7Ozs7d0JBSytCO0FBQUE7O0FBQzlCLGFBQU8sVUFBRW9XLFNBQUY7QUFBQSxlQUFpQixLQUFJLENBQUM2VyxlQUFMLENBQXFCN25CLE9BQXJCLENBQThCZ1IsU0FBOUIsSUFBNEMsQ0FBQyxDQUE5RDtBQUFBLE9BQVA7QUFDQTtBQUVEOzs7Ozs7Ozs7O3dCQU9ZO0FBQUE7O0FBQ1gsYUFBTyxZQUFzQjtBQUFBLFlBQXBCOFcsTUFBb0IsdUVBQVgsS0FBVztBQUM1QixZQUFNQyxhQUFhLEdBQUcvRCw2Q0FBTyxDQUFFO0FBQUEsaUJBQU1nRSxtQkFBbUIsQ0FDdkQsTUFBSSxDQUFDNWYsU0FEa0QsRUFFdkQ7QUFBRTZmLG1CQUFPLEVBQUUsRUFBWDtBQUFlbEMsc0JBQVUsRUFBRSxNQUFJLENBQUNyQjtBQUFoQyxXQUZ1RCxFQUd2RCxNQUFJLENBQUN1QyxhQUhrRCxDQUF6QjtBQUFBLFNBQUYsQ0FBN0I7QUFLQSxZQUFNdEMsT0FBTyxHQUFHb0QsYUFBYSxFQUE3QjtBQUNBLFlBQU1uSixTQUFTLEdBQUcrRixPQUFPLENBQUN1RCxTQUFSLENBQW1CLE1BQUksQ0FBQ0MsUUFBeEIsQ0FBbEI7O0FBQ0EsWUFBS0wsTUFBTCxFQUFjO0FBQ2JsSixtQkFBUyxDQUFDbG9CLEVBQVYsR0FBZSxNQUFJLENBQUNBLEVBQXBCO0FBQ0Eyd0Isc0VBQVksQ0FBRXpJLFNBQUYsRUFBYSxNQUFJLENBQUMrSSxTQUFsQixFQUE2QixJQUE3QixDQUFaO0FBQ0E7O0FBQ0QsZUFBTy9JLFNBQVA7QUFDQSxPQWJEO0FBY0E7Ozs7O0FBS0Y7Ozs7Ozs7Ozs2RUEzSE1tSSxVLFVBd0hTLFk7O0FBVWYsSUFBTXFCLFNBQVMsR0FBRyxTQUFaQSxTQUFZLENBQUV6d0IsSUFBRixFQUFRMHdCLGFBQVIsRUFBMkI7QUFDNUM7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSw0QkFDbUI7QUFDakIsaUJBQU8xd0IsSUFBUDtBQUNBO0FBSEY7O0FBQUE7QUFBQSxNQUFxQjB3QixhQUFyQjtBQUFBO0FBS0EsQ0FORDtBQVFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxJQUFNTCxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQXNCLENBQUU1ZixTQUFGLEVBQWFzYyxNQUFiLEVBQTZDO0FBQUEsTUFBeEJ1QyxhQUF3Qix1RUFBUixFQUFRO0FBQ3hFLE1BQU01UixNQUFNLEdBQUcrUyxTQUFTLENBQ3ZCbFoseURBQVUsQ0FBRUMsd0RBQVMsQ0FBRS9HLFNBQUYsQ0FBWCxDQURhLEVBRXZCMmUsVUFGdUIsQ0FBeEI7QUFJQSxTQUFPO0FBQ047Ozs7O0FBS0EzZSxhQUFTLEVBQVRBLFNBTk07O0FBT047Ozs7QUFJQWtnQixZQUFRLEVBQUVqVCxNQVhKOztBQVlOOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkE2UyxhQUFTLEVBQUUsbUJBQUVLLGVBQUY7QUFBQSxhQUF1QixJQUFJbFQsTUFBSixDQUNqQ2pOLFNBRGlDLEVBRWpDbWdCLGVBRmlDLEVBR2pDN0QsTUFIaUMsRUFJakN1QyxhQUppQyxFQUtqQyxJQUxpQyxDQUF2QjtBQUFBLEtBakNMOztBQXdDTjs7Ozs7Ozs7Ozs7Ozs7QUFjQXVCLGdCQUFZLEVBQUUsc0JBQUVELGVBQUY7QUFBQSxhQUF1QixJQUFJbFQsTUFBSixDQUNwQ2pOLFNBRG9DLEVBRXBDbWdCLGVBRm9DLEVBR3BDN0QsTUFIb0MsRUFJcEN1QyxhQUpvQyxDQUF2QjtBQUFBO0FBdERSLEdBQVA7QUE2REEsQ0FsRUQ7O0FBbUVlZSxrRkFBZixFOzs7Ozs7Ozs7Ozs7QUN6UEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBR0E7QUFFQTs7Ozs7OztBQU1PLElBQU1TLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsQ0FBRXhvQixLQUFGO0FBQUEsU0FBYXlvQiw0REFBYSxDQUFFem9CLEtBQUYsQ0FBYixJQUMxQyxDQUFFNEgsMERBQVcsQ0FBRTVILEtBQUssQ0FBQytsQixHQUFSLENBRGdCO0FBQUEsQ0FBdkI7QUFHUDs7Ozs7OztBQU1PLElBQU0yQyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQUUxb0IsS0FBRjtBQUFBLFNBQWF5b0IsNERBQWEsQ0FBRXpvQixLQUFGLENBQWIsSUFDN0MsQ0FBRTRILDBEQUFXLENBQUU1SCxLQUFLLENBQUMyb0IsTUFBUixDQURtQjtBQUFBLENBQTFCO0FBR1A7Ozs7Ozs7QUFNTyxJQUFNQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQXNCLENBQUU1b0IsS0FBRjtBQUFBLFNBQWF5b0IsNERBQWEsQ0FBRXpvQixLQUFGLENBQWIsSUFDL0MsQ0FBRTRILDBEQUFXLENBQUU1SCxLQUFLLENBQUM2b0IsUUFBUixDQURxQjtBQUFBLENBQTVCO0FBR1A7Ozs7Ozs7QUFNTyxJQUFNQyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQUU5b0IsS0FBRjtBQUFBLFNBQWF5b0IsNERBQWEsQ0FBRXpvQixLQUFGLENBQWIsSUFDN0MsQ0FBRTRILDBEQUFXLENBQUU1SCxLQUFLLENBQUNzZSxNQUFSLENBRG1CO0FBQUEsQ0FBMUI7QUFHUDs7Ozs7Ozs7QUFPTyxJQUFNeUssZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFFL29CLEtBQUY7QUFBQSxTQUFheW9CLDREQUFhLENBQUV6b0IsS0FBRixDQUFiLElBQzNDLENBQUU0SCwwREFBVyxDQUFFNUgsS0FBSyxDQUFDb21CLElBQVIsQ0FEaUI7QUFBQSxDQUF4QjtBQUdQOzs7Ozs7OztBQU9PLElBQU00QyxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQXFCLENBQUV0SixLQUFGLEVBQVMrRSxNQUFULEVBQXFCO0FBQ3RELFNBQU9ZLGVBQWUsQ0FBRTNGLEtBQUYsRUFBUytFLE1BQVQsQ0FBZixJQUFvQ2MsWUFBWSxDQUFFN0YsS0FBRixFQUFTK0UsTUFBVCxDQUF2RDtBQUNBLENBRk07QUFJUDs7Ozs7Ozs7O0FBUU8sSUFBTVksZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFFM0YsS0FBRixFQUFTK0UsTUFBVDtBQUFBLFNBQzlCLENBQUU3YywwREFBVyxDQUFFNmMsTUFBTSxDQUFFL0UsS0FBRixDQUFSLENBQWIsSUFDQW9KLGlCQUFpQixDQUFFckUsTUFBTSxDQUFFL0UsS0FBRixDQUFSLENBRGpCLElBRUErRSxNQUFNLENBQUUvRSxLQUFGLENBQU4sQ0FBZ0JwQixNQUFoQixLQUEyQixXQUhHO0FBQUEsQ0FBeEI7QUFLUDs7Ozs7Ozs7Ozs7QUFVTyxJQUFNMkssa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFxQixDQUFFQyxpQkFBRixFQUF3QztBQUFBLE1BQW5CekUsTUFBbUIsdUVBQVYsSUFBVTtBQUN6RSxTQUFPQSxNQUFNLEtBQUssSUFBWCxHQUNOWSxlQUFlLENBQUU2RCxpQkFBRixFQUFxQnpFLE1BQXJCLENBQWYsSUFDQ3lFLGlCQUFpQixDQUFDbnBCLE9BQWxCLENBQTJCLE1BQTNCLElBQXNDLENBRmpDLEdBR05tcEIsaUJBQWlCLENBQUNucEIsT0FBbEIsQ0FBMkIsTUFBM0IsSUFBc0MsQ0FIdkM7QUFJQSxDQUxNO0FBT1A7Ozs7Ozs7OztBQVFPLElBQU1vcEIsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFvQixDQUFFcFksU0FBRixFQUFhMFQsTUFBYjtBQUFBLFNBQ2hDLENBQUU3YywwREFBVyxDQUFFNmMsTUFBTSxDQUFFMVQsU0FBRixDQUFSLENBQWIsSUFDQSxDQUFFbkosMERBQVcsQ0FBRTZjLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQnFZLFdBQXRCLENBRm1CO0FBQUEsQ0FBMUI7QUFJUDs7Ozs7Ozs7O0FBUU8sSUFBTUMsVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBRXRZLFNBQUYsRUFBYTBULE1BQWI7QUFBQSxTQUN6QixDQUFFN2MsMERBQVcsQ0FBRTZjLE1BQU0sQ0FBRTFULFNBQUYsQ0FBUixDQUFiLElBQ0EsQ0FBRW5KLDBEQUFXLENBQUU2YyxNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0J1WSxRQUF0QixDQURiLElBRUE3RSxNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0J1WSxRQUhLO0FBQUEsQ0FBbkI7QUFLUDs7Ozs7Ozs7Ozs7Ozs7O0FBY08sSUFBTUMsYUFBYSxHQUFHLFNBQWhCQSxhQUFnQixDQUFFeFksU0FBRixFQUFhMFQsTUFBYjtBQUFBLFNBQzVCLENBQUU3YywwREFBVyxDQUFFNmMsTUFBTSxDQUFFMVQsU0FBRixDQUFSLENBQWIsS0FDRSxDQUFFc1ksVUFBVSxDQUFFdFksU0FBRixFQUFhMFQsTUFBYixDQUFaLElBQ0QwRSxpQkFBaUIsQ0FBRXBZLFNBQUYsRUFBYTBULE1BQWIsQ0FGbEIsS0FJQSxDQUFFd0Usa0JBQWtCLENBQUVsWSxTQUFGLENBSnBCLElBS0FBLFNBQVMsS0FBSyxZQU5jO0FBQUEsQ0FBdEI7QUFRUDs7Ozs7Ozs7Ozs7Ozs7OztBQWVPLElBQU13VSxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFFeFUsU0FBRixFQUFhMFQsTUFBYjtBQUFBLFNBQzNCLENBQUU3YywwREFBVyxDQUFFNmMsTUFBTSxDQUFFMVQsU0FBRixDQUFSLENBQWIsSUFDQSxDQUFFbkosMERBQVcsQ0FBRTZjLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQitVLFVBQXRCLENBRGIsSUFFQTRDLGlCQUFpQixDQUFFakUsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CK1UsVUFBdEIsQ0FGakIsSUFHQWdELGlCQUFpQixDQUFFckUsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CK1UsVUFBcEIsQ0FBK0I2QyxNQUFqQyxDQUhqQixJQUlBbEUsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CK1UsVUFBcEIsQ0FBK0I2QyxNQUEvQixDQUFzQ3JLLE1BQXRDLEtBQWlELE9BTHRCO0FBQUEsQ0FBckI7QUFPUDs7Ozs7Ozs7Ozs7OztBQVlPLElBQU1rTCxXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFFelksU0FBRixFQUFhMFQsTUFBYjtBQUFBLFNBQzFCLENBQUU3YywwREFBVyxDQUFFNmMsTUFBTSxDQUFFMVQsU0FBRixDQUFSLENBQWIsSUFDQWdZLGVBQWUsQ0FBRXRFLE1BQU0sQ0FBRTFULFNBQUYsQ0FBUixDQURmLElBRUEsQ0FBRW5KLDBEQUFXLENBQUU2YyxNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0JxVixJQUFwQixDQUF5QnpyQixNQUEzQixDQUZiLElBR0E4cEIsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CcVYsSUFBcEIsQ0FBeUJ6ckIsTUFBekIsR0FBa0MsQ0FKUjtBQUFBLENBQXBCLEM7Ozs7Ozs7Ozs7OztBQzdLUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBR0E7QUFDQTtBQUVBOzs7Ozs7QUFLTyxJQUFNaXNCLFVBQVUsR0FBRztBQUN6Qk0sT0FBSyxFQUFFdUMsTUFBTSxDQUFFLHNCQUFGLENBRFk7QUFFekJwQyxLQUFHLEVBQUVvQyxNQUFNLENBQUUsZ0JBQUYsQ0FGYztBQUd6QjlCLE9BQUssRUFBRThCLE1BQU0sQ0FBRSxrREFBRjtBQUhZLENBQW5CO0FBTVA7Ozs7O0FBSU8sSUFBTUMsYUFBYSxHQUFHO0FBQzVCQyxLQUFHLEVBQUUsS0FEdUI7QUFFNUJDLFVBQVEsRUFBRSxVQUZrQjtBQUc1QkMsUUFBTSxFQUFFO0FBSG9CLENBQXRCO0FBTVA7Ozs7O0FBSU8sSUFBTWxELGtCQUFrQixHQUFHO0FBQ2pDQyxZQUFVLEVBQUU2QyxNQUFNLENBQUUsc0NBQUYsQ0FEZTtBQUVqQzVDLGdCQUFjLEVBQUU0QyxNQUFNLENBQUUsMENBQUY7QUFGVyxDQUEzQjtBQUtQOzs7Ozs7Ozs7Ozs7QUFXTyxJQUFNSyxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLENBQUUzaEIsU0FBRixFQUFpQjtBQUM5QyxNQUFNNGhCLFNBQVMsR0FBR0MscUVBQVksQ0FDN0IsaURBRDZCLEVBRTdCO0FBQ0NDLFVBQU0sRUFBRSxDQUFFLEtBQUYsQ0FEVDtBQUVDNTBCLFlBQVEsRUFBRSxDQUFFLEtBQUYsQ0FGWDtBQUdDNjBCLGNBQVUsRUFBRSxDQUFFLEtBQUYsQ0FIYjtBQUlDQyxXQUFPLEVBQUUsQ0FBRSxLQUFGLENBSlY7QUFLQ0MsV0FBTyxFQUFFLENBQUUsS0FBRixDQUxWO0FBTUNDLFlBQVEsRUFBRSxDQUFFLEtBQUYsQ0FOWDtBQU9DQywyQkFBdUIsRUFBRSxDQUFFLEtBQUYsQ0FQMUI7QUFRQ0MsWUFBUSxFQUFFLENBQUUsS0FBRixFQUFTLFNBQVQsQ0FSWDtBQVNDQyxtQkFBZSxFQUFFLENBQUUsS0FBRixDQVRsQjtBQVVDMXNCLFNBQUssRUFBRSxDQUFFLEtBQUYsQ0FWUjtBQVdDMnNCLDBCQUFzQixFQUFFLENBQUUsS0FBRixDQVh6QjtBQVlDQyx3QkFBb0IsRUFBRSxDQUFFLEtBQUYsQ0FadkI7QUFhQ0MsZUFBVyxFQUFFLENBQUUsS0FBRixDQWJkO0FBY0NDLGNBQVUsRUFBRSxDQUFFLEtBQUYsQ0FkYjtBQWVDQyxjQUFVLEVBQUUsQ0FBRSxLQUFGLENBZmI7QUFnQkNDLGFBQVMsRUFBRSxDQUFFLEtBQUYsQ0FoQlo7QUFpQkN0TyxXQUFPLEVBQUUsQ0FBRSxLQUFGLENBakJWO0FBa0JDdU8sb0JBQWdCLEVBQUUsQ0FBRSxLQUFGLENBbEJuQjtBQW1CQ0MsMEJBQXNCLEVBQUUsQ0FBRSxLQUFGLEVBQVMsS0FBVCxDQW5CekI7QUFvQkNDLFdBQU8sRUFBRSxDQUFFLEtBQUYsQ0FwQlY7QUFxQkNDLGtCQUFjLEVBQUUsQ0FBRSxLQUFGLENBckJqQjtBQXNCQ0MsYUFBUyxFQUFFLENBQUUsTUFBRixDQXRCWjtBQXVCQ0MsU0FBSyxFQUFFLENBQUUsS0FBRixDQXZCUjtBQXdCQ0MsY0FBVSxFQUFFLENBQUUsS0FBRixDQXhCYjtBQXlCQ0MsWUFBUSxFQUFFLENBQUUsS0FBRixDQXpCWDtBQTBCQ0Msa0JBQWMsRUFBRSxDQUFFLEtBQUYsQ0ExQmpCO0FBMkJDQywyQkFBdUIsRUFBRSxDQUFFLEtBQUYsQ0EzQjFCO0FBNEJDQyxtQkFBZSxFQUFFLENBQUUsS0FBRixDQTVCbEI7QUE2QkNDLGNBQVUsRUFBRSxDQUFFLEtBQUYsQ0E3QmI7QUE4QkNDLGdCQUFZLEVBQUUsQ0FBRSxLQUFGLENBOUJmO0FBK0JDQyx3QkFBb0IsRUFBRSxDQUFFLEtBQUYsQ0EvQnZCO0FBZ0NDcnlCLFNBQUssRUFBRSxDQUFFLEtBQUYsQ0FoQ1I7QUFpQ0NncUIsVUFBTSxFQUFFLENBQUUsS0FBRixDQWpDVDtBQWtDQ3NJLFFBQUksRUFBRSxDQUFFLE1BQUYsQ0FsQ1A7QUFtQ0NDLHFCQUFpQixFQUFFLEVBbkNwQjtBQW9DQ0MsaUJBQWEsRUFBRSxDQUFFLGVBQUYsQ0FwQ2hCO0FBcUNDQyxVQUFNLEVBQUUsQ0FBRSxLQUFGLENBckNUO0FBc0NDQyxnQkFBWSxFQUFFLENBQUUsS0FBRixDQXRDZjtBQXVDQ0MsbUJBQWUsRUFBRSxDQUFFLEtBQUYsQ0F2Q2xCO0FBd0NDQyxlQUFXLEVBQUUsQ0FBRSxLQUFGLENBeENkO0FBeUNDQyxTQUFLLEVBQUUsQ0FBRSxLQUFGLENBekNSO0FBMENDQyxXQUFPLEVBQUUsQ0FBRSxNQUFGO0FBMUNWLEdBRjZCLENBQTlCO0FBOENBLFNBQU8sQ0FBRXprQiwwREFBVyxDQUFFbWlCLFNBQVMsQ0FBRTVoQixTQUFGLENBQVgsQ0FBYixHQUNONGhCLFNBQVMsQ0FBRTVoQixTQUFGLENBREgsR0FFTixFQUZEO0FBR0EsQ0FsRE0sQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0NQOzs7QUFHQTtBQVNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBSUE7QUFXQTtBQUlBO0FBRUE7Ozs7Ozs7Ozs7QUFTTyxJQUFNZ2YsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBRWxCLFFBQUYsRUFBWWxWLFNBQVosRUFBdUJELFVBQXZCLEVBQWtEO0FBQUEsTUFBZndiLElBQWUsdUVBQVIsRUFBUTtBQUM3RXpPLFFBQU0sQ0FBQzBPLGNBQVAsQ0FBdUJ0RyxRQUF2QixFQUFpQ2xWLFNBQWpDO0FBQ0N5YixPQURELGlCQUNPO0FBQ0wsYUFBTzFiLFVBQVA7QUFDQTtBQUhGLEtBSUl3YixJQUpKO0FBTUEsQ0FQTTtBQVNQOzs7Ozs7Ozs7OztBQVVPLElBQU1HLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FDbkN4RyxRQURtQyxFQUVuQ3lHLFlBRm1DLEVBR25DQyxRQUhtQyxFQUsvQjtBQUFBLE1BREpMLElBQ0ksdUVBREcsRUFDSDtBQUNKek8sUUFBTSxDQUFDME8sY0FBUCxDQUF1QnRHLFFBQXZCLEVBQWlDeUcsWUFBakM7QUFDQ0YsT0FERCxpQkFDTztBQUNMLGFBQU9HLFFBQVEsQ0FBRTFHLFFBQUYsQ0FBZjtBQUNBO0FBSEYsS0FJSXFHLElBSko7QUFNQSxDQVpNO0FBY1A7Ozs7Ozs7Ozs7QUFTTyxJQUFNTSxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXdCLENBQ3BDM0csUUFEb0MsRUFFcENsVixTQUZvQyxFQUdwQzhiLGlCQUhvQyxFQUtoQztBQUFBLE1BREpQLElBQ0ksdUVBREcsRUFDSDtBQUNKLE1BQUlRLGFBQWEsR0FBR0QsaUJBQXBCO0FBQ0FoUCxRQUFNLENBQUMwTyxjQUFQLENBQXVCdEcsUUFBdkIsRUFBaUNsVixTQUFqQztBQUNDeWIsT0FERCxpQkFDTztBQUNMLGFBQU9NLGFBQVA7QUFDQSxLQUhGO0FBSUNDLE9BSkQsZUFJTUMsYUFKTixFQUlzQjtBQUNwQixVQUFNQyxjQUFjLEdBQUc5RCxtRUFBaUIsQ0FBRXBZLFNBQUYsRUFBYWtWLFFBQVEsQ0FBQ3hCLE1BQXRCLENBQXhDOztBQUNBLFVBQUssQ0FBRXdCLFFBQVEsQ0FBQ2dCLEtBQVgsSUFBb0JnRyxjQUF6QixFQUEwQztBQUN6QztBQUNBOztBQUNEakgsMEZBQWdDLENBQy9CalYsU0FEK0IsRUFFL0JpYyxhQUYrQixFQUcvQi9HLFFBSCtCLENBQWhDOztBQUtBLFVBQUssQ0FBRWdILGNBQVAsRUFBd0I7QUFDdkI3RixvQkFBWSxDQUFFbkIsUUFBRixFQUFZVyxxREFBVSxDQUFDZSxLQUF2QixDQUFaO0FBQ0F1Rix5QkFBaUIsQ0FBRWpILFFBQUYsRUFBWWxWLFNBQVosQ0FBakI7QUFDQTs7QUFDRCtiLG1CQUFhLEdBQUdFLGFBQWhCO0FBQ0E7QUFuQkYsS0FvQklWLElBcEJKO0FBc0JBLENBN0JNO0FBK0JQOzs7Ozs7Ozs7QUFRTyxJQUFNYSwwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTZCLENBQ3pDbEgsUUFEeUMsRUFFekNtSCxpQkFGeUMsRUFHekNDLGNBSHlDLEVBS3JDO0FBQUEsTUFESmYsSUFDSSx1RUFERyxFQUNIOztBQUNKLE1BQUtjLGlCQUFpQixLQUFLQyxjQUEzQixFQUE0QztBQUMzQ3hQLFVBQU0sQ0FBQzBPLGNBQVAsQ0FBdUJ0RyxRQUF2QixFQUFpQ29ILGNBQWpDO0FBQ0NiLFNBREQsaUJBQ087QUFDTCxlQUFPdkcsUUFBUSxDQUFFbUgsaUJBQUYsQ0FBZjtBQUNBLE9BSEY7QUFJQ0wsU0FKRCxlQUlNQyxhQUpOLEVBSXNCO0FBQ3BCLGVBQU8vRyxRQUFRLENBQUVtSCxpQkFBRixDQUFSLEdBQWdDSixhQUF2QztBQUNBO0FBTkYsT0FPSVYsSUFQSjtBQVNBO0FBQ0QsQ0FqQk07QUFtQlA7Ozs7Ozs7OztBQVFPLElBQU1nQixpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQ2hDckgsUUFEZ0MsRUFFaENtSCxpQkFGZ0MsRUFHaENDLGNBSGdDLEVBSzVCO0FBQUEsTUFESmYsSUFDSSx1RUFERyxFQUNIOztBQUNKLE1BQUtjLGlCQUFpQixLQUFLQyxjQUEzQixFQUE0QztBQUMzQ3hQLFVBQU0sQ0FBQzBPLGNBQVAsQ0FBdUJ0RyxRQUF2QixFQUFpQ29ILGNBQWpDO0FBQ0NiLFNBREQsaUJBQ087QUFDTCxlQUFPdkcsUUFBUSxDQUFFbUgsaUJBQUYsQ0FBZjtBQUNBO0FBSEYsT0FJSWQsSUFKSjtBQU1BO0FBQ0QsQ0FkTTtBQWdCUDs7Ozs7Ozs7QUFPTyxJQUFNaUIsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFxQixDQUFFdEgsUUFBRixFQUFZbFYsU0FBWixFQUFzQztBQUFBLE1BQWZ1YixJQUFlLHVFQUFSLEVBQVE7QUFDdkV6TyxRQUFNLENBQUMwTyxjQUFQLENBQXVCdEcsUUFBdkIsRUFBaUMsUUFBUWhYLHlEQUFVLENBQUU4QixTQUFGLENBQW5EO0FBQ0N5YixPQURELGlCQUNPO0FBQ0wsYUFBTyxVQUFFUSxhQUFGLEVBQXFCO0FBQzNCL0csZ0JBQVEsQ0FBRWxWLFNBQUYsQ0FBUixHQUF3QmljLGFBQXhCO0FBQ0EsZUFBTy9HLFFBQVA7QUFDQSxPQUhEO0FBSUE7QUFORixLQU9JcUcsSUFQSjtBQVNBLENBVk07QUFZUDs7Ozs7OztBQU1PLElBQU0vRSw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQWdDLENBQUV0QixRQUFGLEVBQWdCO0FBQzVELE1BQU11SCxXQUFXLEdBQUcsRUFBcEI7QUFDQTl0Qix3REFBTyxDQUNOdW1CLFFBQVEsQ0FBQ3dILHVCQURILEVBRU4sVUFBRTNjLFVBQUYsRUFBY0MsU0FBZCxFQUE2QjtBQUM1QixRQUFNMmMsWUFBWSxHQUFHdkUsbUVBQWlCLENBQUVwWSxTQUFGLEVBQWFrVixRQUFRLENBQUN4QixNQUF0QixDQUF0QztBQUNBa0osMkJBQXVCLENBQUUxSCxRQUFGLEVBQVlsVixTQUFaLEVBQXVCRCxVQUF2QixDQUF2Qjs7QUFDQSxRQUFLeVksK0RBQWEsQ0FBRXhZLFNBQUYsRUFBYWtWLFFBQVEsQ0FBQ3hCLE1BQXRCLENBQWxCLEVBQW1EO0FBQ2xELFVBQUt3QixRQUFRLENBQUNnQixLQUFkLEVBQXNCO0FBQ3JCakIsNEZBQWdDLENBQy9CalYsU0FEK0IsRUFFL0JELFVBRitCLEVBRy9CbVYsUUFIK0IsQ0FBaEM7QUFLQSxPQU5ELE1BTU87QUFDTk8saUdBQXFDLENBQ3BDUCxRQUFRLENBQUM5ZCxTQUQyQixFQUVwQzRJLFNBRm9DLEVBR3BDRCxVQUhvQyxFQUlwQ21WLFFBSm9DLENBQXJDO0FBTUE7O0FBQ0QySCxxQ0FBK0IsQ0FDOUIzSCxRQUQ4QixFQUU5QmxWLFNBRjhCLEVBRzlCRCxVQUg4QixFQUk5QjRjLFlBSjhCLENBQS9CO0FBTUE7O0FBQ0QsUUFBSzNjLFNBQVMsS0FBSyxvQkFBbkIsRUFBMEM7QUFDekM4YyxpQ0FBMkIsQ0FBRTVILFFBQUYsRUFBWW5WLFVBQVosQ0FBM0I7QUFDQTs7QUFDRCxRQUFLQyxTQUFTLEtBQUssWUFBbkIsRUFBa0M7QUFDakMrYyxxQ0FBK0IsQ0FBRTdILFFBQUYsRUFBWW5WLFVBQVosQ0FBL0I7QUFDQTs7QUFDRCxRQUFLQyxTQUFTLEtBQUssTUFBbkIsRUFBNEI7QUFDM0JvVyxrQkFBWSxDQUFFbEIsUUFBRixFQUFZLE1BQVosRUFBb0JuVixVQUFwQixDQUFaO0FBQ0E7O0FBQ0QsUUFBS0MsU0FBUyxLQUFLLFFBQW5CLEVBQThCO0FBQzdCZ2Qsa0JBQVksQ0FBRTlILFFBQUYsRUFBWW5WLFVBQVosQ0FBWjtBQUNBOztBQUNELFFBQUssQ0FBRW1WLFFBQVEsQ0FBQ2dCLEtBQVgsSUFBb0J5RyxZQUF6QixFQUF3QztBQUN2Q0YsaUJBQVcsQ0FBQzV5QixJQUFaLENBQWtCbVcsU0FBbEI7QUFDQTtBQUNELEdBMUNLLENBQVA7O0FBNENBLE1BQUssQ0FBRWtWLFFBQVEsQ0FBQ2dCLEtBQVgsSUFBb0J1RyxXQUFXLENBQUM3eUIsTUFBckMsRUFBOEM7QUFDN0NxekIsZ0NBQTRCLENBQUUvSCxRQUFGLEVBQVl1SCxXQUFaLENBQTVCO0FBQ0E7O0FBRURTLHFCQUFtQixDQUFFaEksUUFBRixDQUFuQjtBQUNBaUksdUJBQXFCLENBQUVqSSxRQUFGLENBQXJCO0FBQ0EsQ0FwRE07QUFzRFA7Ozs7Ozs7QUFNQSxJQUFNNkgsK0JBQStCLEdBQUcsU0FBbENBLCtCQUFrQyxDQUFFN0gsUUFBRixFQUFZMkIsZUFBWixFQUFpQztBQUN4RTtBQUNBLE1BQU11RyxnQkFBZ0IsR0FBR2xJLFFBQVEsQ0FDL0J3SCx1QkFEdUIsQ0FFdkJXLGtCQUZ1QixJQUVELEVBRnhCOztBQUdBLE1BQ0NELGdCQUFnQixDQUFDRSxVQUFqQixJQUNBeDJCLHNEQUFPLENBQUVzMkIsZ0JBQWdCLENBQUNFLFVBQW5CLENBRlIsRUFHRTtBQUNEekcsbUJBQWUsNkZBQ1hBLGVBRFcsbUZBRVh1RyxnQkFBZ0IsQ0FBQ0UsVUFGTixFQUFmO0FBSUE7O0FBQ0RsSCxjQUFZLENBQUVsQixRQUFGLEVBQVksaUJBQVosRUFBK0IyQixlQUEvQixDQUFaO0FBQ0EsQ0FmRDtBQWlCQTs7Ozs7Ozs7O0FBT0EsSUFBTXFHLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBc0IsQ0FBRWhJLFFBQUYsRUFBZ0I7QUFDM0MsTUFBSyxDQUFFQSxRQUFRLENBQUNnQixLQUFoQixFQUF3QjtBQUN2QjtBQUNBOztBQUNELE1BQU11RyxXQUFXLEdBQUdjLGlGQUE2QixDQUFFckksUUFBRixDQUFqRDtBQUNBdm1CLHdEQUFPLENBQUU4dEIsV0FBRixFQUFlLFVBQ3JCZSxnQkFEcUIsRUFFckJDLFdBRnFCLEVBR2pCO0FBQ0o7QUFDQSxRQUFLdkksUUFBUSxDQUFFdUksV0FBRixDQUFiLEVBQStCO0FBQzlCLGFBQU92SSxRQUFRLENBQUV1SSxXQUFGLENBQWY7QUFDQTs7QUFDRDVCLHlCQUFxQixDQUNwQjNHLFFBRG9CLEVBRXBCdUksV0FGb0IsRUFHcEJDLDJDQUFJLEVBSGdCLEVBSXBCO0FBQUVDLGtCQUFZLEVBQUUsSUFBaEI7QUFBc0JDLGdCQUFVLEVBQUU7QUFBbEMsS0FKb0IsQ0FBckI7QUFNQUMsc0NBQWtDLENBQUUzSSxRQUFGLEVBQVl1SSxXQUFaLENBQWxDO0FBQ0EsR0FmTSxDQUFQO0FBZ0JBUiw4QkFBNEIsQ0FDM0IvSCxRQUQyQixFQUUzQi9YLG1EQUFJLENBQUVzZixXQUFGLENBRnVCLENBQTVCO0FBSUEsQ0F6QkQ7QUEyQkE7Ozs7Ozs7O0FBTUEsSUFBTUcsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUEwQixDQUFFMUgsUUFBRixFQUFZbFYsU0FBWixFQUF1QkQsVUFBdkIsRUFBdUM7QUFDdEVtVixVQUFRLENBQUVVLDZEQUFrQixDQUFDRSxjQUFyQixDQUFSLENBQStDOVYsU0FBL0MsSUFDQzhkLDhFQUEwQixDQUFFOWQsU0FBRixFQUFhRCxVQUFiLEVBQXlCbVYsUUFBUSxDQUFDeEIsTUFBbEMsQ0FEM0I7QUFFQSxDQUhEO0FBS0E7Ozs7Ozs7OztBQU9BLElBQU15SixxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXdCLENBQUVqSSxRQUFGLEVBQWdCO0FBQzdDLE1BQUssT0FBT0EsUUFBUSxDQUFDMkIsZUFBaEIsS0FBb0MsV0FBekMsRUFBdUQ7QUFDdERrRyxtQ0FBK0IsQ0FBRTdILFFBQUYsRUFBWSxFQUFaLENBQS9CO0FBQ0E7O0FBQ0QsTUFBSyxDQUFFQSxRQUFRLENBQUNnQixLQUFoQixFQUF3QjtBQUN2QjtBQUNBOztBQUNEdm5CLHdEQUFPLENBQ05vdkIsNkVBQXlCLENBQUU3SSxRQUFGLENBRG5CLEVBRU4sVUFBRXNJLGdCQUFGLEVBQW9CeGQsU0FBcEIsRUFBbUM7QUFDbEMsUUFDQyxPQUFPa1YsUUFBUSxDQUFFbFYsU0FBRixDQUFmLEtBQWlDLFdBQWpDLElBQ0EsQ0FBRW9ZLG1FQUFpQixDQUFFcFksU0FBRixFQUFha1YsUUFBUSxDQUFDeEIsTUFBdEIsQ0FGcEIsRUFHRTtBQUNEbUoscUNBQStCLENBQzlCM0gsUUFEOEIsRUFFOUJsVixTQUY4QixFQUc5QjdSLFNBSDhCLENBQS9CO0FBS0E7QUFDRCxHQWJLLENBQVA7QUFlQSxDQXRCRDtBQXdCQTs7Ozs7Ozs7OztBQVFBLElBQU1ncEIsUUFBUSxHQUFHLFNBQVhBLFFBQVcsQ0FBRWpDLFFBQUYsRUFBZ0I7QUFDaEMsU0FBTzhJLG9GQUFnQyxDQUFFOUksUUFBRixDQUF2QztBQUNBLENBRkQ7QUFJQTs7Ozs7Ozs7O0FBT0EsSUFBTStJLFNBQVMsR0FBRyxTQUFaQSxTQUFZLENBQUUvSSxRQUFGLEVBQWdCO0FBQ2pDLFNBQU9nSix1RkFBbUMsQ0FBRWhKLFFBQUYsQ0FBMUM7QUFDQSxDQUZEO0FBSUE7Ozs7Ozs7OztBQU9BLElBQU1pSixTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFFakosUUFBRixFQUFnQjtBQUNqQyxNQUFNa0osWUFBWSxHQUFHRix1RkFBbUMsQ0FDdkRoSixRQUR1RCxFQUV2RCxJQUZ1RCxDQUF4RDtBQUlBQSxVQUFRLENBQUN1SCxXQUFULENBQXFCOXRCLE9BQXJCLENBQThCLFVBQUUwdkIsVUFBRixFQUFrQjtBQUMvQ0QsZ0JBQVksQ0FBRUMsVUFBRixDQUFaLEdBQTZCbkosUUFBUSxDQUFFbUosVUFBRixDQUFyQztBQUNBLEdBRkQ7QUFHQSxTQUFPRCxZQUFQO0FBQ0EsQ0FURDtBQVdBOzs7Ozs7Ozs7OztBQVNBLElBQU1FLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUVwSixRQUFGLEVBQWdCO0FBQ2xDLE1BQUtBLFFBQVEsQ0FBQ2dCLEtBQWQsRUFBc0I7QUFDckIsV0FBT2lJLFNBQVMsQ0FBRWpKLFFBQUYsQ0FBaEI7QUFDQTs7QUFDRCxTQUFPK0ksU0FBUyxDQUFFL0ksUUFBRixDQUFoQjtBQUNBLENBTEQ7QUFPQTs7Ozs7Ozs7QUFNTyxJQUFNdUIsaUNBQWlDLEdBQUcsU0FBcENBLGlDQUFvQyxDQUFFdkIsUUFBRixFQUFnQjtBQUNoRXdHLHNCQUFvQixDQUFFeEcsUUFBRixFQUFZLFdBQVosRUFBeUIrSSxTQUF6QixDQUFwQjtBQUNBdkMsc0JBQW9CLENBQUV4RyxRQUFGLEVBQVksV0FBWixFQUF5QmlKLFNBQXpCLENBQXBCO0FBQ0F6QyxzQkFBb0IsQ0FBRXhHLFFBQUYsRUFBWSxZQUFaLEVBQTBCb0osVUFBMUIsQ0FBcEI7QUFDQTVDLHNCQUFvQixDQUFFeEcsUUFBRixFQUFZLFVBQVosRUFBd0JpQyxRQUF4QixDQUFwQjtBQUNBLENBTE07QUFPUDs7Ozs7Ozs7O0FBUUEsSUFBTTBGLCtCQUErQixHQUFHLFNBQWxDQSwrQkFBa0MsQ0FDdkMzSCxRQUR1QyxFQUV2Q2xWLFNBRnVDLEVBR3ZDRCxVQUh1QyxFQUtuQztBQUFBLE1BREo0YyxZQUNJLHVFQURXLEtBQ1g7O0FBQ0osTUFBSzlsQiwwREFBVyxDQUFFa0osVUFBRixDQUFoQixFQUFpQztBQUNoQ0EsY0FBVSxHQUFHd2UsMkVBQXVCLENBQUV2ZSxTQUFGLEVBQWFrVixRQUFRLENBQUN4QixNQUF0QixDQUFwQztBQUNBa0osMkJBQXVCLENBQUUxSCxRQUFGLEVBQVlsVixTQUFaLEVBQXVCRCxVQUF2QixDQUF2QjtBQUNBOztBQUNEeWUsK0JBQTZCLENBQzVCdEosUUFENEIsRUFFNUJsVixTQUY0QixFQUc1QnllLCtFQUEyQixDQUFFemUsU0FBRixFQUFhRCxVQUFiLEVBQXlCbVYsUUFBekIsQ0FIQyxFQUk1QnlILFlBSjRCLENBQTdCOztBQU1BLE1BQUssQ0FBRUEsWUFBUCxFQUFzQjtBQUNyQitCLHlCQUFxQixDQUNwQnhKLFFBRG9CLEVBRXBCbFYsU0FGb0IsRUFHcEIyZSx1RUFBbUIsQ0FBRTVlLFVBQUYsQ0FIQyxDQUFyQjtBQUtBO0FBQ0QsQ0F2QkQ7QUF5QkE7Ozs7Ozs7Ozs7O0FBU08sSUFBTXllLDZCQUE2QixHQUFHLFNBQWhDQSw2QkFBZ0MsQ0FDNUN0SixRQUQ0QyxFQUU1Q2xWLFNBRjRDLEVBRzVDRCxVQUg0QyxFQUt4QztBQUFBLE1BREo0YyxZQUNJLHVFQURXLEtBQ1g7QUFDSixNQUFNcEIsSUFBSSxHQUFHO0FBQUVxQyxjQUFVLEVBQUU7QUFBZCxHQUFiLENBREksQ0FFSjs7QUFDQSxNQUFLakIsWUFBTCxFQUFvQjtBQUNuQnZHLGdCQUFZLENBQ1hsQixRQURXLEVBRVhsVixTQUZXLEVBR1hELFVBSFcsRUFJWHdiLElBSlcsQ0FBWjtBQU1BcUQsNkJBQXlCLENBQUUxSixRQUFGLEVBQVlsVixTQUFaLENBQXpCO0FBQ0EsR0FSRCxNQVFPO0FBQ042Yix5QkFBcUIsQ0FDcEIzRyxRQURvQixFQUVwQmxWLFNBRm9CLEVBR3BCRCxVQUhvQixFQUlwQndiLElBSm9CLENBQXJCO0FBTUFpQixzQkFBa0IsQ0FBRXRILFFBQUYsRUFBWWxWLFNBQVosQ0FBbEI7QUFDQTZkLHNDQUFrQyxDQUFFM0ksUUFBRixFQUFZbFYsU0FBWixDQUFsQztBQUNBO0FBQ0QsQ0ExQk07QUE0QlA7Ozs7OztBQUtPLElBQU00ZSx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQTRCLENBQUUxSixRQUFGLEVBQVlsVixTQUFaLEVBQTJCO0FBQ25FNmUsd0JBQXNCLENBQUUzSixRQUFGLEVBQVlsVixTQUFaLEVBQXVCdWMsaUJBQXZCLENBQXRCO0FBQ0EsQ0FGTTtBQUlQOzs7Ozs7Ozs7Ozs7Ozs7QUFjTyxJQUFNc0Isa0NBQWtDLEdBQUcsU0FBckNBLGtDQUFxQyxDQUFFM0ksUUFBRixFQUFZbFYsU0FBWixFQUEyQjtBQUM1RTZlLHdCQUFzQixDQUFFM0osUUFBRixFQUFZbFYsU0FBWixFQUF1Qm9jLDBCQUF2QixDQUF0QjtBQUNBLENBRk07QUFJUDs7Ozs7OztBQU1BLElBQU15QyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXlCLENBQUUzSixRQUFGLEVBQVlsVixTQUFaLEVBQXVCOGUsTUFBdkIsRUFBbUM7QUFDakU7QUFDQUEsUUFBTSxDQUFFNUosUUFBRixFQUFZbFYsU0FBWixFQUF1QjdCLHdEQUFTLENBQUU2QixTQUFGLENBQWhDLENBQU4sQ0FGaUUsQ0FHakU7QUFDQTs7QUFDQSxNQUFLa1YsUUFBUSxDQUFDZSxhQUFkLEVBQThCO0FBQzdCLFFBQUk4SSxZQUFZLEdBQUcsRUFBbkIsQ0FENkIsQ0FFN0I7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E3SixZQUFRLENBQUNlLGFBQVQsQ0FBdUJ0bkIsT0FBdkIsQ0FBZ0MsVUFBRXF3QixXQUFGLEVBQW1CO0FBQ2xERCxrQkFBWSxHQUFHL2UsU0FBUyxDQUFDNU8sT0FBVixDQUFtQjR0QixXQUFXLEdBQUcsR0FBakMsRUFBc0MsRUFBdEMsQ0FBZjs7QUFDQSxVQUFLRCxZQUFZLEtBQUsvZSxTQUF0QixFQUFrQztBQUNqQzhlLGNBQU0sQ0FDTDVKLFFBREssRUFFTGxWLFNBRkssRUFHTDdCLHdEQUFTLENBQUU0Z0IsWUFBRixDQUhKLENBQU47QUFLQTtBQUNELEtBVEQ7QUFVQTtBQUNELENBdEJEO0FBd0JBOzs7Ozs7O0FBS0EsSUFBTUUsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFzQixDQUFFL0osUUFBRjtBQUFBLFNBQWdCLFVBQUVnSyxrQkFBRjtBQUFBLFdBQzNDaEssUUFBUSxDQUFFZ0ssa0JBQWtCLEdBQUcsVUFBdkIsQ0FEbUM7QUFBQSxHQUFoQjtBQUFBLENBQTVCO0FBR0E7Ozs7Ozs7OztBQU9BLElBQU1DLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBMEIsQ0FBRWpLLFFBQUYsRUFBWWxWLFNBQVosRUFBMkI7QUFDMUQsTUFBTW9mLGdCQUFnQixHQUFHQyxxREFBTSxDQUM5Qm5LLFFBQVEsQ0FBQ2UsYUFEcUIsRUFFOUIsVUFBRXFKLE1BQUY7QUFBQSxXQUFjQSxNQUFNLENBQUMxMUIsTUFBUCxHQUFnQixDQUFDLENBQS9CO0FBQUEsR0FGOEIsQ0FBL0I7QUFJQSxNQUFJbTFCLFlBQVksR0FBRy9lLFNBQW5CO0FBQ0FyUix3REFBTyxDQUFFeXdCLGdCQUFGLEVBQW9CLFVBQUVFLE1BQUYsRUFBYztBQUN4Q1AsZ0JBQVksR0FBRy9lLFNBQVMsQ0FBQzVPLE9BQVYsQ0FBbUJrdUIsTUFBbkIsRUFBMkIsRUFBM0IsQ0FBZjs7QUFDQSxRQUFLUCxZQUFZLEtBQUsvZSxTQUF0QixFQUFrQztBQUNqQyxhQUFPLEtBQVA7QUFDQTtBQUNELEdBTE0sQ0FBUDtBQU1BLFNBQU8rZSxZQUFQO0FBQ0EsQ0FiRDtBQWVBOzs7Ozs7Ozs7QUFPTyxJQUFNTCxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXdCLENBQUV4SixRQUFGLEVBQVlsVixTQUFaLEVBQXVCRCxVQUF2QixFQUF1QztBQUMzRXFXLGNBQVksQ0FDWGxCLFFBRFcsRUFFWC9XLHdEQUFTLENBQUVnaEIsdUJBQXVCLENBQUVqSyxRQUFGLEVBQVlsVixTQUFaLENBQXpCLENBQVQsR0FDQSxVQUhXLEVBSVhELFVBSlcsQ0FBWjs7QUFNQSxNQUFLbEosMERBQVcsQ0FBRXFlLFFBQVEsQ0FBQ3FLLFdBQVgsQ0FBaEIsRUFBMkM7QUFDMUM3RCx3QkFBb0IsQ0FDbkJ4RyxRQURtQixFQUVuQixhQUZtQixFQUduQitKLG1CQUhtQixDQUFwQjtBQUtBO0FBQ0QsQ0FkTTtBQWdCUDs7Ozs7OztBQU1BLElBQU1PLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBaUMsQ0FBRXRLLFFBQUY7QUFBQSxTQUN0Q0EsUUFBUSxDQUFDdUgsV0FBVCxDQUFxQjd5QixNQUFyQixHQUE4QixDQURRO0FBQUEsQ0FBdkM7QUFHQTs7Ozs7Ozs7QUFNTyxJQUFNcXpCLDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBK0IsQ0FBRS9ILFFBQUYsRUFBWXVILFdBQVosRUFBNkI7QUFDeEUsTUFBTWxCLElBQUksR0FBRztBQUFFb0MsZ0JBQVksRUFBRTtBQUFoQixHQUFiOztBQUNBLE1BQUs3MkIsc0RBQU8sQ0FBRTIxQixXQUFGLENBQVosRUFBOEI7QUFDN0JyRyxnQkFBWSxDQUNYbEIsUUFEVyxFQUVYLFlBRlcsRUFHWHVILFdBQVcsQ0FBRSxDQUFGLENBSEEsRUFJWGxCLElBSlcsQ0FBWjtBQU1BTSx5QkFBcUIsQ0FDcEIzRyxRQURvQixFQUVwQixhQUZvQixFQUdwQnVILFdBSG9CLEVBSXBCbEIsSUFKb0IsQ0FBckI7QUFNQUcsd0JBQW9CLENBQ25CeEcsUUFEbUIsRUFFbkIsd0JBRm1CLEVBR25Cc0ssOEJBSG1CLEVBSW5CakUsSUFKbUIsQ0FBcEI7QUFNQTtBQUNELENBdEJNO0FBd0JQOzs7Ozs7QUFLQSxJQUFNa0UsMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUE2QixDQUFFdkssUUFBRjtBQUFBLFNBQ2xDLFVBQUV3SyxnQkFBRjtBQUFBLFdBQXdCLENBQUU3b0IsMERBQVcsQ0FBRXFlLFFBQVEsQ0FBRXdLLGdCQUFGLENBQVYsQ0FBckM7QUFBQSxHQURrQztBQUFBLENBQW5DO0FBR0E7Ozs7Ozs7QUFLTyxJQUFNNUMsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUE4QixDQUFFNUgsUUFBRixFQUFZcUMsZUFBWixFQUFpQztBQUMzRTVvQix3REFBTyxDQUFFNG9CLGVBQUYsRUFBbUIsVUFBRW9JLG9CQUFGLEVBQXdCQyxtQkFBeEIsRUFBaUQ7QUFDMUUsUUFBS0EsbUJBQW1CLEtBQUssWUFBN0IsRUFBNEM7QUFDM0N4SixrQkFBWSxDQUNYbEIsUUFEVyxFQUVYL1csd0RBQVMsQ0FBRXloQixtQkFBRixDQUZFLEVBR1hELG9CQUhXLENBQVo7QUFLQTtBQUNELEdBUk0sQ0FBUDtBQVNBakUsc0JBQW9CLENBQ25CeEcsUUFEbUIsRUFFbkIsb0JBRm1CLEVBR25CdUssMEJBSG1CLENBQXBCO0FBS0EsQ0FmTTtBQWlCUDs7Ozs7OztBQU1PLElBQU16QyxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFFOUgsUUFBRixFQUFZcUMsZUFBWixFQUFpQztBQUM1RCxNQUFNbkUsU0FBUyxHQUFHLEVBQWxCO0FBQ0EsTUFBSXlNLFlBQUo7QUFDQWx4Qix3REFBTyxDQUFFNG9CLGVBQUYsRUFBbUIsVUFBRXVJLGFBQUYsRUFBaUJDLFlBQWpCLEVBQW1DO0FBQzVELFFBQUtBLFlBQVksS0FBSyxNQUF0QixFQUErQjtBQUM5QjNKLGtCQUFZLENBQUVsQixRQUFGLEVBQVksY0FBWixFQUE0QjRLLGFBQWEsQ0FBRSxDQUFGLENBQWIsQ0FBbUJFLElBQS9DLENBQVo7QUFDQSxLQUZELE1BRU8sSUFBS0QsWUFBWSxLQUFLLFlBQXRCLEVBQXFDO0FBQzNDM0osa0JBQVksQ0FDWGxCLFFBRFcsRUFFWCx3QkFGVyxFQUdYNEssYUFBYSxDQUFFLENBQUYsQ0FBYixDQUFtQkUsSUFIUixDQUFaO0FBS0EsS0FOTSxNQU1BO0FBQ05ILGtCQUFZLEdBQUdJLDJFQUF1QixDQUFFRixZQUFGLENBQXRDO0FBQ0EzTSxlQUFTLENBQUN2cEIsSUFBVixDQUFnQmcyQixZQUFoQjtBQUNBSywwQkFBb0IsQ0FDbkJoTCxRQURtQixFQUVuQjJLLFlBQVksR0FBRyxVQUZJLEVBR25CQyxhQUhtQixDQUFwQjtBQUtBO0FBQ0QsR0FsQk0sQ0FBUCxDQUg0RCxDQXNCNUQ7O0FBQ0ExSixjQUFZLENBQUVsQixRQUFGLEVBQVksY0FBWixFQUE0QjlCLFNBQTVCLENBQVo7QUFDQSxDQXhCTTtBQTBCUDs7Ozs7O0FBS0EsSUFBTStNLDJCQUEyQixHQUFHLFNBQTlCQSwyQkFBOEIsQ0FBRWpMLFFBQUY7QUFBQSxTQUNuQyxVQUFFMkssWUFBRjtBQUFBLFdBQW9CM0ssUUFBUSxDQUFFMkssWUFBWSxDQUFDenVCLE9BQWIsQ0FBc0IsVUFBdEIsRUFBa0MsRUFBbEMsQ0FBRixDQUE1QjtBQUFBLEdBRG1DO0FBQUEsQ0FBcEM7QUFHQTs7Ozs7Ozs7O0FBT08sSUFBTTh1QixvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQXVCLENBQ25DaEwsUUFEbUMsRUFFbkMySyxZQUZtQyxFQUduQ08sWUFIbUMsRUFJL0I7QUFDSmhLLGNBQVksQ0FDWGxCLFFBRFcsRUFFWDJLLFlBRlcsRUFHWDtBQUNDUSxnQkFBWSxFQUFFRCxZQUFZLENBQUUsQ0FBRixDQUFaLENBQWtCSixJQURqQztBQUVDTSxVQUFNLEVBQUVGLFlBQVksQ0FBRSxDQUFGLENBQVosQ0FBa0JFO0FBRjNCLEdBSFcsQ0FBWjs7QUFRQSxNQUFLenBCLDBEQUFXLENBQUVxZSxRQUFRLENBQUNxTCxtQkFBWCxDQUFoQixFQUFtRDtBQUNsRDdFLHdCQUFvQixDQUFFeEcsUUFBRixFQUNuQixxQkFEbUIsRUFFbkJpTCwyQkFGbUIsQ0FBcEI7QUFJQTtBQUNELENBbkJNO0FBcUJQOzs7Ozs7Ozs7OztBQVVPLElBQU05SixZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFFbkIsUUFBRixFQUFZeUIsU0FBWixFQUE2QztBQUFBLE1BQXRCNkosUUFBc0IsdUVBQVgsS0FBVztBQUN4RSxNQUFNQyxZQUFZLEdBQUd2TCxRQUFRLENBQUVVLDZEQUFrQixDQUFDQyxVQUFyQixDQUE3Qjs7QUFDQSxVQUFTYyxTQUFUO0FBQ0MsU0FBS2QscURBQVUsQ0FBQ2UsS0FBaEI7QUFDQSxTQUFLZixxREFBVSxDQUFDUyxHQUFoQjtBQUNBLFNBQUtULHFEQUFVLENBQUNNLEtBQWhCO0FBQ0MsVUFBS3FLLFFBQUwsRUFBZ0I7QUFDZnRMLGdCQUFRLENBQUVVLDZEQUFrQixDQUFDQyxVQUFyQixDQUFSLEdBQTRDYyxTQUE1QztBQUNBO0FBQ0E7O0FBQ0R6QixjQUFRLENBQUVVLDZEQUFrQixDQUFDQyxVQUFyQixDQUFSLEdBQ0M0SyxZQUFZLEtBQUs1SyxxREFBVSxDQUFDTSxLQUE1QixHQUNDUSxTQURELEdBRUM4SixZQUhGO0FBSUE7O0FBQ0Q7QUFDQyxZQUFNLElBQUlDLG1FQUFKLENBQ0wscURBQ0Esc0RBRkssQ0FBTjtBQWRGO0FBbUJBLENBckJNO0FBdUJQOzs7Ozs7OztBQU9PLElBQU12RSxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQUVqSCxRQUFGLEVBQVlsVixTQUFaLEVBQTJCO0FBQzNELE1BQUtrVixRQUFRLENBQUN5TCx1QkFBZCxFQUF3QztBQUN2Q3pMLFlBQVEsQ0FBQ3lMLHVCQUFULENBQWlDcE4sR0FBakMsQ0FBc0N2VCxTQUF0QztBQUNBO0FBQ0QsQ0FKTSxDOzs7Ozs7Ozs7Ozs7QUN6d0JQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBR0E7QUFRQTtBQUVBOzs7O0FBR0E7QUFNQTtBQUVBO0FBU0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFXTyxJQUFNNGdCLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBNEIsQ0FBRTVnQixTQUFGLEVBQWFELFVBQWIsRUFBeUIyVCxNQUF6QixFQUFxQztBQUM3RSxNQUNDWSxpRUFBZSxDQUFFdFUsU0FBRixFQUFhMFQsTUFBYixDQUFmLElBQ0EsQ0FBRXZSLDJFQUFRLENBQUMwZSxrQkFBVCxDQUE2QjlnQixVQUE3QixDQUZILEVBR0U7QUFDRCxXQUFPb0MsMkVBQVEsQ0FBQzJlLE9BQVQsQ0FBa0IvZ0IsVUFBbEIsQ0FBUDtBQUNBOztBQUNELE1BQ0N5VSw4REFBWSxDQUFFeFUsU0FBRixFQUFhMFQsTUFBYixDQUFaLElBQ0EsQ0FBSXhSLDRFQUFVLENBQUVuQyxVQUFGLEVBQWMsT0FBZCxDQUZmLEVBR0U7QUFDRCxXQUFPLElBQUkwVSxrRUFBSixDQUFXMVUsVUFBWCxFQUF1QmdoQix5RUFBdkIsQ0FBUDtBQUNBLEdBWjRFLENBYTdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFPaGhCLFVBQVA7QUFDQSxDQXJCTTtBQXVCUDs7Ozs7Ozs7Ozs7Ozs7QUFhTyxJQUFNeVYseUNBQXlDLEdBQUcsU0FBNUNBLHlDQUE0QyxDQUN4RHhWLFNBRHdELEVBRXhERCxVQUZ3RCxFQUd4RDJULE1BSHdELEVBSXBEO0FBQ0osTUFBS1ksaUVBQWUsQ0FBRXRVLFNBQUYsRUFBYTBULE1BQWIsQ0FBcEIsRUFBNEM7QUFDM0N2UiwrRUFBUSxDQUFDb1MsZ0JBQVQsQ0FBMkJ4VSxVQUEzQjtBQUNBQSxjQUFVLEdBQUdBLFVBQVUsQ0FBQ2loQixLQUFYLEVBQWI7QUFDQSxHQUhELE1BR08sSUFBS3hNLDhEQUFZLENBQUV4VSxTQUFGLEVBQWEwVCxNQUFiLENBQWpCLEVBQXlDO0FBQy9DZSxzRUFBSyxDQUFDQyxXQUFOLENBQW1CM1UsVUFBbkI7QUFDQUEsY0FBVSxHQUFHQSxVQUFVLENBQUNraEIsUUFBWCxFQUFiO0FBQ0E7O0FBQ0QsU0FBT2xoQixVQUFQO0FBQ0EsQ0FiTTtBQWVQOzs7Ozs7Ozs7QUFRTyxJQUFNbWhCLDJCQUEyQixHQUFHLFNBQTlCQSwyQkFBOEIsQ0FBRW5oQixVQUFGLEVBQWtCO0FBQzVELE1BQUtvQywyRUFBUSxDQUFDMGUsa0JBQVQsQ0FBNkI5Z0IsVUFBN0IsQ0FBTCxFQUFpRDtBQUNoREEsY0FBVSxHQUFHQSxVQUFVLENBQUNpaEIsS0FBWCxFQUFiO0FBQ0EsR0FGRCxNQUVPLElBQUs5ZSw0RUFBVSxDQUFFbkMsVUFBRixFQUFjLE9BQWQsQ0FBZixFQUF5QztBQUMvQ0EsY0FBVSxHQUFHQSxVQUFVLENBQUNraEIsUUFBWCxFQUFiO0FBQ0E7O0FBQ0QsU0FBT2xoQixVQUFQO0FBQ0EsQ0FQTTtBQVNQOzs7Ozs7Ozs7Ozs7Ozs7OztBQWdCTyxJQUFNMGUsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUE4QixDQUMxQ3plLFNBRDBDLEVBRTFDRCxVQUYwQyxFQUcxQ21WLFFBSDBDLEVBSXRDO0FBQ0osTUFBTVEsY0FBYyxHQUFHQyx3RUFBb0IsQ0FBRTNWLFNBQUYsRUFBYWtWLFFBQWIsQ0FBM0M7QUFDQW5WLFlBQVUsR0FBRzJYLDREQUFhLENBQUUzWCxVQUFGLENBQWIsR0FDWkEsVUFBVSxDQUFFMlYsY0FBRixDQURFLEdBRVozVixVQUZEO0FBR0EsU0FBTzZnQix5QkFBeUIsQ0FBRTVnQixTQUFGLEVBQWFELFVBQWIsRUFBeUJtVixRQUFRLENBQUN4QixNQUFsQyxDQUFoQztBQUNBLENBVk07QUFZUDs7Ozs7Ozs7Ozs7QUFVTyxJQUFNaUwsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFzQixDQUFFMXZCLEtBQUYsRUFBYTtBQUMvQyxNQUFLLENBQUV5b0IsNERBQWEsQ0FBRXpvQixLQUFGLENBQXBCLEVBQWdDO0FBQy9CLFdBQU9BLEtBQVA7QUFDQTs7QUFDREEsT0FBSyxHQUFHMG9CLG1FQUFpQixDQUFFMW9CLEtBQUYsQ0FBakIsR0FBNkJBLEtBQUssQ0FBQzJvQixNQUFuQyxHQUE0QzNvQixLQUFwRDtBQUNBQSxPQUFLLEdBQUc0b0IscUVBQW1CLENBQUU1b0IsS0FBRixDQUFuQixHQUErQkEsS0FBSyxDQUFDNm9CLFFBQXJDLEdBQWdEN29CLEtBQXhEO0FBQ0EsU0FBT3dvQixnRUFBYyxDQUFFeG9CLEtBQUYsQ0FBZCxHQUEwQkEsS0FBSyxDQUFDK2xCLEdBQWhDLEdBQXNDL2xCLEtBQTdDO0FBQ0EsQ0FQTTtBQVNQOzs7Ozs7Ozs7O0FBU08sSUFBTWd4Qix1QkFBdUIsR0FBRyxTQUExQkEsdUJBQTBCLENBQUVJLFlBQUYsRUFBb0I7QUFDMUQsU0FBT2Msb0VBQWUsQ0FBRWhqQix3REFBUyxDQUFFaWpCLG1EQUFJLENBQUVmLFlBQVksQ0FBQzMyQixLQUFiLENBQW9CLEdBQXBCLENBQUYsQ0FBTixDQUFYLENBQXRCO0FBQ0EsQ0FGTTtBQUlQOzs7Ozs7Ozs7O0FBU08sSUFBTXMwQixnQ0FBZ0MsR0FBRyxTQUFuQ0EsZ0NBQW1DLENBQUVxRCxjQUFGLEVBQXNCO0FBQ3JFLFNBQU92VSxNQUFNLENBQUMzUCxJQUFQLENBQWFra0IsY0FBYixFQUE4QnB4QixNQUE5QixDQUFzQyxVQUM1Q3NuQixlQUQ0QyxFQUU1Q3ZYLFNBRjRDLEVBR3hDO0FBQ0osUUFDQ3dZLCtEQUFhLENBQUV4WSxTQUFGLEVBQWFxaEIsY0FBYyxDQUFDM04sTUFBNUIsQ0FBYixJQUNBLENBQUUwRSxtRUFBaUIsQ0FBRXBZLFNBQUYsRUFBYXFoQixjQUFjLENBQUMzTixNQUE1QixDQUZwQixFQUdFO0FBQ0Q2RCxxQkFBZSxDQUFFdlgsU0FBRixDQUFmLEdBQStCcWhCLGNBQWMsQ0FBRXJoQixTQUFGLENBQTdDO0FBQ0EsYUFBT3VYLGVBQVA7QUFDQTs7QUFDRCxXQUFPQSxlQUFQO0FBQ0EsR0FaTSxFQVlKLEVBWkksQ0FBUDtBQWFBLENBZE07QUFnQlA7Ozs7Ozs7OztBQVFPLElBQU0yRyxtQ0FBbUMsR0FBRyxTQUF0Q0EsbUNBQXNDLENBQ2xEbUQsY0FEa0QsRUFHOUM7QUFBQSxNQURKbEQsU0FDSSx1RUFEUSxLQUNSO0FBQ0osTUFBTW1ELFFBQVEsR0FBR25ELFNBQVMsR0FDekJ0M0IsS0FBSyxDQUFDK1AsSUFBTixDQUFZeXFCLGNBQWMsQ0FBQ1YsdUJBQWYsQ0FBdUN4NEIsTUFBdkMsRUFBWixDQUR5QixHQUV6QjJrQixNQUFNLENBQUMzUCxJQUFQLENBQWFra0IsY0FBYixDQUZEO0FBSUEsU0FBT0MsUUFBUSxDQUFDcnhCLE1BQVQsQ0FBaUIsVUFDdkJzbkIsZUFEdUIsRUFFdkJ2WCxTQUZ1QixFQUduQjtBQUNKLFFBQ0N3WSwrREFBYSxDQUFFeFksU0FBRixFQUFhcWhCLGNBQWMsQ0FBQzNOLE1BQTVCLENBQWIsSUFDQSxDQUFFMEUsbUVBQWlCLENBQUVwWSxTQUFGLEVBQWFxaEIsY0FBYyxDQUFDM04sTUFBNUIsQ0FGcEIsRUFHRTtBQUNENkQscUJBQWUsQ0FBRXZYLFNBQUYsQ0FBZixHQUErQmtoQiwyQkFBMkIsQ0FDekRHLGNBQWMsQ0FBRXJoQixTQUFGLENBRDJDLENBQTFEO0FBR0EsYUFBT3VYLGVBQVA7QUFDQTs7QUFDRCxXQUFPQSxlQUFQO0FBQ0EsR0FkTSxFQWNKLEVBZEksQ0FBUDtBQWVBLENBdkJNO0FBeUJQOzs7Ozs7O0FBTU8sSUFBTWdLLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBc0IsQ0FBRUYsY0FBRjtBQUFBLFNBQXNCRyxtREFBSSxDQUM1REgsY0FENEQsRUFFNURBLGNBQWMsQ0FBQzVFLFdBRjZDLENBQTFCO0FBQUEsQ0FBNUI7QUFLUDs7Ozs7Ozs7O0FBUU8sSUFBTXNCLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBNEIsQ0FBRXNELGNBQUY7QUFBQSxTQUFzQkkscURBQU0sQ0FDcEVKLGNBQWMsQ0FBQzNOLE1BRHFELEVBRXBFLFVBQUUzVCxVQUFGLEVBQWNDLFNBQWQ7QUFBQSxXQUE2QndZLCtEQUFhLENBQ3pDeFksU0FEeUMsRUFFekNxaEIsY0FBYyxDQUFDM04sTUFGMEIsQ0FBMUM7QUFBQSxHQUZvRSxDQUE1QjtBQUFBLENBQWxDO0FBUVA7Ozs7Ozs7OztBQVFPLElBQU02Siw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQWdDLENBQUU4RCxjQUFGO0FBQUEsU0FBc0JJLHFEQUFNLENBQ3hFSixjQUFjLENBQUMzTixNQUR5RCxFQUV4RSxVQUFFM1QsVUFBRixFQUFjQyxTQUFkO0FBQUEsV0FBNkJvWSxtRUFBaUIsQ0FDN0NwWSxTQUQ2QyxFQUU3Q3FoQixjQUFjLENBQUMzTixNQUY4QixDQUE5QztBQUFBLEdBRndFLENBQTVCO0FBQUEsQ0FBdEM7QUFRUDs7Ozs7OztBQU1PLElBQU1nTyx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQTRCLENBQUVoN0IsSUFBRixFQUFZO0FBQ3BELE1BQUtJLHNEQUFPLENBQUVKLElBQUYsQ0FBWixFQUF1QjtBQUN0QixXQUFPQSxJQUFJLENBQUNzSSxPQUFMLENBQWMsTUFBZCxJQUF5QixDQUFDLENBQTFCLEdBQ04sSUFETSxHQUVOMHlCLHlCQUF5QixDQUFFaDdCLElBQUksQ0FBRSxDQUFGLENBQU4sQ0FGMUI7QUFHQTs7QUFDRCxVQUFTQSxJQUFUO0FBQ0MsU0FBSyxRQUFMO0FBQ0MsYUFBTyxFQUFQOztBQUNELFNBQUssUUFBTDtBQUNBLFNBQUssU0FBTDtBQUNDLGFBQU8sQ0FBUDs7QUFDRCxTQUFLLE1BQUw7QUFDQSxTQUFLLFFBQUw7QUFDQyxhQUFPLElBQVA7O0FBQ0QsU0FBSyxTQUFMO0FBQ0EsU0FBSyxNQUFMO0FBQ0MsYUFBTyxLQUFQOztBQUNELFNBQUssV0FBTDtBQUNDLGFBQVMsSUFBSXFLLElBQUosRUFBRixDQUFlYyxXQUFmLEVBQVA7QUFiRjs7QUFlQSxTQUFPLElBQVA7QUFDQSxDQXRCTTtBQXdCUDs7Ozs7Ozs7Ozs7QUFVTyxJQUFNOHZCLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBcUIsQ0FBRTNoQixTQUFGLEVBQWEwVCxNQUFiLEVBQXlCO0FBQzFELE1BQUtZLGlFQUFlLENBQUV0VSxTQUFGLEVBQWEwVCxNQUFiLENBQXBCLEVBQTRDO0FBQzNDLFdBQU8sV0FBUDtBQUNBOztBQUNELE1BQUtBLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixJQUF1QjBULE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQnRaLElBQWhELEVBQXVEO0FBQ3RELFFBQUtndEIsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CdFosSUFBcEIsS0FBNkIsUUFBbEMsRUFBNkM7QUFDNUMsVUFDQ2d0QixNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0IrVSxVQUFwQixJQUNBMEMsZ0VBQWMsQ0FBRS9ELE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQitVLFVBQXRCLENBRmYsRUFHRTtBQUNELGVBQU9yQixNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0IrVSxVQUFwQixDQUErQkMsR0FBL0IsQ0FBbUN0dUIsSUFBbkMsR0FDTmd0QixNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0IrVSxVQUFwQixDQUErQkMsR0FBL0IsQ0FBbUN0dUIsSUFEN0IsR0FFTixJQUZEO0FBR0E7O0FBQ0QsYUFBTyxJQUFQO0FBQ0E7O0FBQ0QsV0FBT2d0QixNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0J0WixJQUEzQjtBQUNBOztBQUNELFNBQU8sSUFBUDtBQUNBLENBbkJNO0FBcUJQOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQk8sSUFBTW8zQiwwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTZCLENBQUU5ZCxTQUFGLEVBQWFELFVBQWIsRUFBeUIyVCxNQUF6QixFQUFxQztBQUM5RSxNQUFLK0QsZ0VBQWMsQ0FBRTFYLFVBQUYsQ0FBbkIsRUFBb0M7QUFDbkMsV0FBTzRZLHdEQUFhLENBQUNDLEdBQXJCO0FBQ0E7O0FBQ0QsTUFBS2xGLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixJQUF1QjBULE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQnRaLElBQWhELEVBQXVEO0FBQ3RELFFBQ0NndEIsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CdFosSUFBcEIsS0FBNkIsUUFBN0IsSUFDQWd4Qiw0REFBYSxDQUFFM1gsVUFBRixDQUZkLEVBR0U7QUFDRCxhQUFPOFgscUVBQW1CLENBQUU5WCxVQUFGLENBQW5CLEdBQ040WSx3REFBYSxDQUFDRSxRQURSLEdBRU5GLHdEQUFhLENBQUNHLE1BRmY7QUFHQTtBQUNEOztBQUNELFNBQU9ILHdEQUFhLENBQUNDLEdBQXJCO0FBQ0EsQ0FmTTtBQWlCUDs7Ozs7Ozs7O0FBUU8sSUFBTTJGLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBMEIsQ0FBRXZlLFNBQUYsRUFBYTBULE1BQWIsRUFBeUI7QUFDL0QsTUFBS0EsTUFBTSxDQUFFMVQsU0FBRixDQUFYLEVBQTJCO0FBQzFCLFdBQU8wVCxNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0I1QixPQUFwQixHQUNOc1YsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CNUIsT0FEZCxHQUVOc2pCLHlCQUF5QixDQUFFaE8sTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CdFosSUFBdEIsQ0FGMUI7QUFHQTs7QUFDRCxTQUFPLElBQVA7QUFDQSxDQVBNLEM7Ozs7Ozs7Ozs7OztBQzlYUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUFHQTtBQVFBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JPLElBQU02dUIsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBRTd1QixJQUFGLEVBQVF1SSxLQUFSLEVBQW1CO0FBQzlDLE1BQUkyeUIsS0FBSyxHQUFHLEtBQVosQ0FEOEMsQ0FFOUM7O0FBQ0EsTUFBSzk2QixzREFBTyxDQUFFSixJQUFGLENBQVosRUFBdUI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFDdEIsMkJBQTBCQSxJQUExQiw4SEFBaUM7QUFBQSxZQUFyQm03QixVQUFxQjtBQUNoQ0QsYUFBSyxHQUFHck0sWUFBWSxDQUFFc00sVUFBRixFQUFjNXlCLEtBQWQsQ0FBcEI7O0FBQ0EsWUFBSzJ5QixLQUFMLEVBQWE7QUFDWjtBQUNBO0FBQ0QsT0FOcUIsQ0FPdEI7O0FBUHNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBUXRCLFdBQU9BLEtBQVA7QUFDQTs7QUFDRCxVQUFTbDdCLElBQVQ7QUFDQyxTQUFLLFNBQUw7QUFDQ2s3QixXQUFLLEdBQUdsaUIsd0RBQVMsQ0FBRXpRLEtBQUYsQ0FBakI7QUFDQTs7QUFDRCxTQUFLLFFBQUw7QUFDQzJ5QixXQUFLLEdBQUdFLHVEQUFRLENBQUU3eUIsS0FBRixDQUFoQjtBQUNBOztBQUNELFNBQUssUUFBTDtBQUNDMnlCLFdBQUssR0FBR0csdURBQVEsQ0FBRTl5QixLQUFGLENBQWhCO0FBQ0E7O0FBQ0QsU0FBSyxRQUFMO0FBQ0MyeUIsV0FBSyxHQUFHbEssNERBQWEsQ0FBRXpvQixLQUFGLENBQXJCO0FBQ0E7O0FBQ0QsU0FBSyxTQUFMO0FBQ0EsU0FBSyxNQUFMO0FBQ0MyeUIsV0FBSyxHQUFHSSx3REFBUyxDQUFFL3lCLEtBQUYsQ0FBakI7QUFDQTs7QUFDRCxTQUFLLE1BQUw7QUFDQzJ5QixXQUFLLEdBQUczeUIsS0FBSyxLQUFLLElBQWxCO0FBQ0E7QUFuQkY7O0FBcUJBLFNBQU8yeUIsS0FBUDtBQUNBLENBbkNNO0FBcUNQOzs7Ozs7Ozs7Ozs7QUFXTyxJQUFNdE0sZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFFNXVCLElBQUYsRUFBUXU3QixVQUFSLEVBQW9CaHpCLEtBQXBCLEVBQStCO0FBQzlELFNBQU9zbUIsWUFBWSxDQUFFN3VCLElBQUYsRUFBUXVJLEtBQVIsQ0FBWixJQUNObkksc0RBQU8sQ0FBRW03QixVQUFGLENBREQsSUFFTkEsVUFBVSxDQUFDanpCLE9BQVgsQ0FBb0JDLEtBQXBCLElBQThCLENBQUMsQ0FGaEM7QUFHQSxDQUpNO0FBTVA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQk8sSUFBTW1tQiwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQThCLENBQzFDcFYsU0FEMEMsRUFFMUNELFVBRjBDLEVBRzFDMlQsTUFIMEMsRUFLdEM7QUFBQSxNQURKd08sa0JBQ0ksdUVBRGlCLElBQ2pCOztBQUNKO0FBQ0E7QUFDQSxNQUFLOUosbUVBQWlCLENBQUVwWSxTQUFGLEVBQWEwVCxNQUFiLENBQXRCLEVBQThDO0FBQzdDLFdBQU82QixZQUFZLENBQUUsUUFBRixFQUFZeFYsVUFBWixDQUFaLElBQ053VixZQUFZLENBQUUsUUFBRixFQUFZeFYsVUFBWixDQURiO0FBRUE7O0FBQ0QsTUFBTW9pQixNQUFNLEdBQUcxSiw2REFBVyxDQUFFelksU0FBRixFQUFhMFQsTUFBYixDQUExQjtBQUNBLE1BQU0wTyxhQUFhLEdBQUduSyxvRUFBa0IsQ0FBRWpZLFNBQUYsRUFBYTBULE1BQWIsQ0FBeEM7QUFDQTNULFlBQVUsR0FBR21pQixrQkFBa0IsSUFBSUUsYUFBdEIsR0FDWjVNLDZGQUF5QyxDQUN4Q3hWLFNBRHdDLEVBRXhDRCxVQUZ3QyxFQUd4QzJULE1BSHdDLENBRDdCLEdBTVozVCxVQU5EO0FBT0FBLFlBQVUsR0FBR21pQixrQkFBa0IsSUFDN0J4TyxNQUFNLENBQUUxVCxTQUFGLENBQU4sQ0FBb0J0WixJQUFwQixLQUE2QixRQURsQixJQUVYMDdCLGFBRlcsR0FHWjtBQUFFcE4sT0FBRyxFQUFFalY7QUFBUCxHQUhZLEdBSVpBLFVBSkQ7QUFLQSxNQUFNb1YsT0FBTyxHQUFHZ04sTUFBTSxHQUNyQjdNLGdCQUFnQixDQUNmNUIsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CdFosSUFETCxFQUVmZ3RCLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQnFWLElBRkwsRUFHZnRWLFVBSGUsQ0FESyxHQU1yQndWLFlBQVksQ0FBRTdCLE1BQU0sQ0FBRTFULFNBQUYsQ0FBTixDQUFvQnRaLElBQXRCLEVBQTRCcVosVUFBNUIsQ0FOYixDQXJCSSxDQTRCSjs7QUFDQSxNQUFLb2lCLE1BQU0sSUFBSSxDQUFFaE4sT0FBakIsRUFBMkI7QUFDMUIsVUFBTSxJQUFJcFAsU0FBSixDQUNML2IsbUVBQU8sQ0FDTiw0SUFETSxFQUVOZ1csU0FGTSxFQUdOMFQsTUFBTSxDQUFFMVQsU0FBRixDQUFOLENBQW9CcVYsSUFBcEIsQ0FBeUIvakIsSUFBekIsRUFITSxFQUlOeU8sVUFKTSxDQURGLENBQU47QUFRQTs7QUFDRCxTQUFPb1YsT0FBUDtBQUNBLENBN0NNO0FBK0NQOzs7Ozs7OztBQU9PLElBQU1RLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FBRTNWLFNBQUYsRUFBYWtWLFFBQWIsRUFBMkI7QUFDOUQsU0FBT0EsUUFBUSxDQUFFVSw2REFBa0IsQ0FBQ0UsY0FBckIsQ0FBUixDQUErQzlWLFNBQS9DLElBQ05rVixRQUFRLENBQUVVLDZEQUFrQixDQUFDRSxjQUFyQixDQUFSLENBQStDOVYsU0FBL0MsQ0FETSxHQUVOMlksd0RBQWEsQ0FBQ0MsR0FGZjtBQUdBLENBSk0sQzs7Ozs7Ozs7Ozs7O0FDdEtQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUFHQTtBQUVPLElBQU1wYSxVQUFVLEdBQUcsT0FBbkI7QUFFQSxJQUFNNmpCLGVBQWUsR0FBRztBQUM5QjVTLFVBQVEsRUFBRSxVQURvQjtBQUU5QkQsV0FBUyxFQUFFLFdBRm1CO0FBRzlCSCxXQUFTLEVBQUU7QUFIbUIsQ0FBeEI7QUFNQSxJQUFNaVQsZ0JBQWdCLEdBQUduNkIscURBQU0sQ0FBRWs2QixlQUFGLENBQS9CLEM7Ozs7Ozs7Ozs7OztBQ2JQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUE7OztBQUdBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFTTyxJQUFNblIsY0FBYyxHQUFHQyxzREFBTSxFQUE3QjtBQUVQOzs7OztBQUlPLElBQU16UyxjQUFjLEdBQUc7QUFDN0JwSCxXQUFTLEVBQUV0UixpREFBUyxDQUFDeUosS0FBVixDQUFpQjtBQUMzQjROLFNBQUssRUFBRXJYLGlEQUFTLENBQUNxSSxNQURVO0FBRTNCaVAsV0FBTyxFQUFFdFgsaURBQVMsQ0FBQytFLEtBQVYsQ0FBaUIsQ0FDekIsVUFEeUIsRUFFekIsUUFGeUIsRUFHekIsWUFIeUIsRUFJekIsVUFKeUIsRUFLekIsY0FMeUIsRUFNekIsWUFOeUIsQ0FBakIsQ0FGa0I7QUFVM0J3UyxTQUFLLEVBQUV2WCxpREFBUyxDQUFDK0UsS0FBVixDQUFpQnlTLDBEQUFqQixDQVZvQjtBQVczQjRULGVBQVcsRUFBRXByQixpREFBUyxDQUFDQyxJQVhJO0FBWTNCczhCLGdCQUFZLEVBQUV2OEIsaURBQVMsQ0FBQ0csTUFaRztBQWEzQmtyQixTQUFLLEVBQUVyckIsaURBQVMsQ0FBQ3FyQjtBQWJVLEdBQWpCO0FBRGtCLENBQXZCO0FBa0JQOzs7Ozs7Ozs7Ozs7OztBQWFPLElBQU01UyxnQkFBZ0IsR0FBRztBQUMvQm5ILFdBQVMsRUFBRTtBQUNWK0YsU0FBSyxFQUFFLEdBREc7QUFFVkMsV0FBTyxFQUFFLFlBRkM7QUFHVkMsU0FBSyxFQUFFSSxzREFIRztBQUlWeVQsZUFBVyxFQUFFO0FBSkg7QUFEb0IsQ0FBekI7QUFTUDs7Ozs7Ozs7OztBQVNPLElBQU1wRSxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFFMVAsT0FBRixFQUFlO0FBQ3hDLE1BQU02TyxVQUFVLEdBQUc7QUFDbEJtRixjQUFVLEVBQUUsd0JBRE07QUFFbEJDLFlBQVEsRUFBRSxzQkFGUTtBQUdsQmlSLGdCQUFZLEVBQUUsZ0NBSEk7QUFJbEJDLGNBQVUsRUFBRTtBQUpNLEdBQW5CO0FBTUEsU0FBTzVyQiwwREFBVyxDQUFFc1YsVUFBVSxDQUFFN08sT0FBRixDQUFaLENBQVgsR0FDTkEsT0FETSxHQUVONk8sVUFBVSxDQUFFN08sT0FBRixDQUZYO0FBR0EsQ0FWTTtBQVlQOzs7Ozs7Ozs7OztBQVVPLElBQU0yUCxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLE9BSXhCO0FBQUEsOEJBSE5tRSxXQUdNO0FBQUEsTUFITkEsV0FHTSxpQ0FIUSxLQUdSO0FBQUEsTUFGTm1SLFlBRU0sUUFGTkEsWUFFTTtBQUFBLHdCQURObFIsS0FDTTtBQUFBLE1BRE5BLEtBQ00sMkJBREUsTUFDRjtBQUNOLE1BQU1uRSxLQUFLLEdBQUcsRUFBZDs7QUFFQSxNQUFLLENBQUVrRSxXQUFQLEVBQXFCO0FBQ3BCbEUsU0FBSyxDQUFDcmpCLElBQU4sQ0FDQyw0Q0FBNEN1a0Isa0RBQTVDLEdBQ0EsMENBREEsR0FFQThDLGNBQWMsQ0FBQ3pELEtBQWYsR0FBdUJGLE1BQXZCLEVBSEQ7QUFLQTs7QUFDRCxNQUFLZ1YsWUFBTCxFQUFvQjtBQUNuQnJWLFNBQUssQ0FBQ3JqQixJQUFOLENBQ0Msc0RBQXNEMDRCLFlBRHZEO0FBR0E7O0FBQ0QsTUFBS2xSLEtBQUssSUFBSUEsS0FBSyxLQUFLLE1BQXhCLEVBQWlDO0FBQ2hDbkUsU0FBSyxDQUFDcmpCLElBQU4sQ0FDQyxxQ0FBcUMwa0IsNERBQXJDLEdBQ0EsbUNBREEsR0FFQTRDLHNEQUFNLEdBQUdFLEtBQVQsQ0FBZ0JBLEtBQWhCLEVBQXdCRyxPQUF4QixDQUFpQyxPQUFqQyxFQUEyQy9ELEtBQTNDLEdBQW1ERixNQUFuRCxFQUhEO0FBS0FMLFNBQUssQ0FBQ3JqQixJQUFOLENBQ0MsbUNBQW1DMmtCLHlEQUFuQyxHQUNBLGlDQURBLEdBRUEyQyxzREFBTSxHQUFHRSxLQUFULENBQWdCQSxLQUFoQixFQUF3QkksS0FBeEIsQ0FBK0IsT0FBL0IsRUFBeUNoRSxLQUF6QyxHQUFpREYsTUFBakQsRUFIRDtBQUtBOztBQUNELFNBQU9MLEtBQUssQ0FBQzViLElBQU4sQ0FBWSxHQUFaLENBQVA7QUFDQSxDQWhDTTtBQWtDUDs7Ozs7O0FBS08sSUFBTW1NLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsR0FBc0I7QUFBQSxNQUFwQm5HLFNBQW9CLHVFQUFSLEVBQVE7QUFDbkRBLFdBQVMsR0FBRywrRUFBS21ILGdCQUFnQixDQUFDbkgsU0FBekIsRUFBdUNBLFNBQXZDLENBQVQ7QUFDQSxTQUFPOFYsNERBQWtCLENBQUU5VixTQUFGLEVBQWEyVixlQUFiLEVBQThCRCxVQUE5QixDQUF6QjtBQUNBLENBSE0sQzs7Ozs7Ozs7Ozs7O0FDdklQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNOQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBR0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR08sSUFBTTVQLFdBQVcsR0FBR0QsbURBQUksQ0FBRXNmLDREQUFGLENBQXhCO0FBRVA7Ozs7OztBQUtPLElBQU0wRSxlQUFlLEdBQUduTyw2Q0FBTyxDQUNyQyxVQUFFNWIsU0FBRjtBQUFBLFNBQWlCc3JCLGdEQUFTLENBQUV0ckIsU0FBRixDQUExQjtBQUFBLENBRHFDLENBQS9CO0FBSVA7Ozs7OztBQUtPLElBQU11ckIsaUJBQWlCLEdBQUczUCw2Q0FBTyxDQUN2QyxVQUFFNWIsU0FBRjtBQUFBLFNBQWlCc3JCLGdEQUFTLENBQUNFLFFBQVYsQ0FBb0J4ckIsU0FBcEIsQ0FBakI7QUFBQSxDQUR1QyxDQUFqQztBQUlQOzs7Ozs7Ozs7Ozs7O0FBWU8sSUFBTXlyQix1QkFBdUIsR0FBRzdQLDZDQUFPLENBQzdDLFVBQUU1YixTQUFGLEVBQWlCO0FBQ2hCQSxXQUFTLEdBQUd1ckIsaUJBQWlCLENBQUV2ckIsU0FBRixDQUE3QjtBQUNBQSxXQUFTLEdBQUcwckIsd0RBQVMsQ0FBRTFyQixTQUFGLENBQXJCO0FBQ0EsU0FBT0EsU0FBUyxDQUFDaEcsT0FBVixDQUFtQixLQUFuQixFQUEwQixHQUExQixDQUFQO0FBQ0EsQ0FMNEMsQ0FBdkMsQzs7Ozs7Ozs7Ozs7O0FDL0NQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDTkE7QUFBQTtBQUFBO0FBQU8sSUFBTW9OLFVBQVUsR0FBRyxZQUFuQjtBQUVBLElBQU11a0IsZ0JBQWdCLEdBQUc7QUFDL0JDLFlBQVUsRUFBRSxDQURtQjtBQUUvQkMsVUFBUSxFQUFFLENBRnFCO0FBRy9CQyxXQUFTLEVBQUUsQ0FIb0I7QUFJL0JDLEtBQUcsRUFBRTtBQUowQixDQUF6QixDOzs7Ozs7Ozs7Ozs7QUNIUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBT0E7Ozs7Ozs7NEJBTWtEdjNCLHdEQUFJLENBQUNrb0IsSyxDQUF4Q3NQLFk7SUFBYzNHLFcsc0NBQWMsRTtBQUUzQzs7Ozs7Ozs7Ozs7QUFTTyxJQUFNNEcsNEJBQTRCLEdBQUdyUSw2Q0FBTyxDQUFFLFVBQUU3VixJQUFGLEVBQVFwRyxNQUFSLEVBQW9CO0FBQ3hFK1UsbUVBQWEsQ0FBRTNPLElBQUYsQ0FBYjtBQUNBLE1BQU1raEIsVUFBVSxHQUFHcHVCLHFEQUFNLENBQUVrTixJQUFGLEVBQVEsVUFBVW1tQixNQUFWLEVBQWtCeDBCLEdBQWxCLEVBQXdCO0FBQ3hEMGMsMEVBQWtCLENBQUUxYyxHQUFGLEVBQU9pSSxNQUFQLENBQWxCO0FBQ0EsV0FBT0EsTUFBTSxDQUFFdXNCLE1BQUYsQ0FBTixHQUFtQixHQUFuQixHQUF5QnZzQixNQUFNLENBQUVqSSxHQUFGLENBQXRDO0FBQ0EsR0FId0IsQ0FBekI7QUFJQSxTQUFPeTBCLHNEQUFPLENBQUVsRixVQUFGLEVBQWMsR0FBZCxDQUFkO0FBQ0EsQ0FQa0QsQ0FBNUM7QUFTUDs7Ozs7Ozs7O0FBUU8sSUFBTW1GLGtCQUFrQixHQUFHeFEsNkNBQU8sQ0FBRSxVQUFFbGtCLEdBQUYsRUFBT2lJLE1BQVAsRUFBbUI7QUFDN0R5VSx3RUFBa0IsQ0FBRTFjLEdBQUYsRUFBT2lJLE1BQVAsQ0FBbEI7QUFDQSxTQUFPQSxNQUFNLENBQUVqSSxHQUFGLENBQWI7QUFDQSxDQUh3QyxDQUFsQztBQUtQOzs7Ozs7OztBQU9PLElBQU0yMEIsYUFBYSxHQUFHelEsNkNBQU8sQ0FBRSxVQUFFNWIsU0FBRixFQUFpQjtBQUN0RG9VLHdFQUFrQixDQUFFcFUsU0FBRixFQUFhcWxCLFdBQWIsQ0FBbEI7QUFDQSxTQUFPQSxXQUFXLENBQUVybEIsU0FBRixDQUFsQjtBQUNBLENBSG1DLENBQTdCO0FBS1A7Ozs7Ozs7QUFNTyxJQUFNc3NCLHdCQUF3QixHQUFHMVEsNkNBQU8sQ0FDOUMsVUFBRTViLFNBQUYsRUFBaUM7QUFBQSxNQUFwQnVzQixTQUFvQix1RUFBUixFQUFRO0FBQ2hDLE1BQU10RixVQUFVLEdBQUdvRixhQUFhLENBQUVyc0IsU0FBRixDQUFoQztBQUNBLFNBQU8sV0FBS2luQixVQUFMLGNBQTJCc0YsU0FBUyxDQUFDcnlCLElBQVYsRUFBbEM7QUFDQSxDQUo2QyxDQUF4QztBQU9QOzs7Ozs7Ozs7O0FBU08sSUFBTXN5Qix5QkFBeUIsR0FBRzVRLDZDQUFPLENBQUUsVUFBRTViLFNBQUYsRUFBYUwsTUFBYixFQUF5QjtBQUMxRSxNQUFNb0csSUFBSSxHQUFHc21CLGFBQWEsQ0FBRXJzQixTQUFGLENBQTFCO0FBQ0EsU0FBT3RRLHNEQUFPLENBQUVxVyxJQUFGLENBQVAsR0FDTmttQiw0QkFBNEIsQ0FBRWxtQixJQUFGLEVBQVFwRyxNQUFSLENBRHRCLEdBRU55c0Isa0JBQWtCLENBQUVybUIsSUFBRixFQUFRcEcsTUFBUixDQUZuQjtBQUdBLENBTCtDLENBQXpDO0FBT1A7Ozs7Ozs7Ozs7QUFTTyxJQUFNOHNCLDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBK0IsQ0FBRXpzQixTQUFGLEVBQWdDO0FBQUEsTUFBbkJaLFFBQW1CLHVFQUFSLEVBQVE7QUFDM0V3VixzRUFBZ0IsQ0FDZnhWLFFBRGUsRUFFZi9PLDhEQUFFLENBQ0Qsa0RBREMsRUFFRCxnQkFGQyxDQUZhLENBQWhCO0FBT0Fxa0IsbUVBQWEsQ0FBRXRWLFFBQUYsQ0FBYjtBQUVBLE1BQU1zdEIsY0FBYyxHQUFHLElBQUlDLEdBQUosRUFBdkI7QUFDQXZ0QixVQUFRLENBQUM3SCxPQUFULENBQWtCLFVBQUVvSSxNQUFGLEVBQWM7QUFDL0Irc0Isa0JBQWMsQ0FBQzlILEdBQWYsQ0FDQzRILHlCQUF5QixDQUFFeHNCLFNBQUYsRUFBYUwsTUFBYixDQUQxQixFQUVDQSxNQUZEO0FBSUEsR0FMRDtBQU1BLFNBQU8rc0IsY0FBUDtBQUNBLENBbEJNO0FBb0JQOzs7Ozs7Ozs7O0FBU08sSUFBTUUscUNBQXFDLEdBQUcsU0FBeENBLHFDQUF3QyxDQUNwRHJRLE9BRG9ELEVBRXBEbmQsUUFGb0QsRUFHaEQ7QUFDSnlWLGlFQUFXLENBQ1Z6VixRQURVLEVBRVYvTyw4REFBRSxDQUNELHNEQURDLEVBRUQsZ0JBRkMsQ0FGUSxDQUFYO0FBT0ErTyxVQUFRLENBQUM3SCxPQUFULENBQWtCLFVBQUVvSSxNQUFGLEVBQVVrdEIsUUFBVixFQUF3QjtBQUN6Q3p0QixZQUFRLENBQUN3bEIsR0FBVCxDQUFjaUksUUFBZCxFQUF3QnRRLE9BQU8sQ0FBQzZELFlBQVIsQ0FBc0J6Z0IsTUFBdEIsQ0FBeEI7QUFDQSxHQUZEO0FBR0EsU0FBT1AsUUFBUDtBQUNBLENBZk0sQzs7Ozs7Ozs7Ozs7O0FDeElQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUFHQTtBQUVBOzs7O0FBR0E7QUFFTyxJQUFNZ0ksVUFBVSxHQUFHLGNBQW5CO0FBRUEsSUFBTW9PLHVCQUF1QixHQUFHemtCLHFEQUFNLENBQzVDNlcsd0VBRDRDLENBQXRDLEM7Ozs7Ozs7Ozs7OztBQ1pQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FBOzs7QUFHQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUtBO0FBRUE7Ozs7O0FBSU8sSUFBTU4sY0FBYyxHQUFHO0FBQzdCOE4sWUFBVSxFQUFFeG1CLGlEQUFTLENBQUNxSSxNQURPO0FBRTdCNjFCLGVBQWEsRUFBRWwrQixpREFBUyxDQUFDcUksTUFGSTtBQUc3QjgxQixrQkFBZ0IsRUFBRW4rQixpREFBUyxDQUFDcUksTUFIQztBQUk3QnFlLGFBQVcsRUFBRTFtQixpREFBUyxDQUFDcUksTUFKTTtBQUs3QnNlLGFBQVcsRUFBRTNtQixpREFBUyxDQUFDK0UsS0FBVixDQUFpQjVDLHFEQUFNLENBQUU2Vyx3RUFBRixDQUF2QixDQUxnQjtBQU03QjFILFdBQVMsRUFBRXRSLGlEQUFTLENBQUN5SixLQUFWLENBQWlCO0FBQzNCNE4sU0FBSyxFQUFFclgsaURBQVMsQ0FBQ3FJLE1BRFU7QUFFM0JpUCxXQUFPLEVBQUV0WCxpREFBUyxDQUFDK0UsS0FBVixDQUFpQixDQUN6QixRQUR5QixFQUV6QixVQUZ5QixDQUFqQixDQUZrQjtBQU0zQndTLFNBQUssRUFBRXZYLGlEQUFTLENBQUMrRSxLQUFWLENBQWlCeVMsMERBQWpCO0FBTm9CLEdBQWpCO0FBTmtCLENBQXZCO0FBZ0JBLElBQU0vRyxnQkFBZ0IsR0FBRztBQUMvQjJILFNBQU8sRUFBRTtBQUNSblAsU0FBSyxFQUFFLFFBREM7QUFFUjFJLFNBQUssRUFBRTtBQUZDO0FBRHNCLENBQXpCO0FBT1A7Ozs7Ozs7Ozs7Ozs7QUFZTyxJQUFNa1ksZ0JBQWdCLEdBQUc7QUFDL0JuSCxXQUFTLEVBQUU7QUFDVitGLFNBQUssRUFBRSxHQURHO0FBRVZDLFdBQU8sRUFBRSxVQUZDO0FBR1ZDLFNBQUssRUFBRUksc0RBQWdCQTtBQUhiO0FBRG9CLENBQXpCO0FBUVA7Ozs7Ozs7Ozs7QUFTTyxJQUFNcVAsVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBRTFQLE9BQUYsRUFBZTtBQUN4QyxNQUFNNk8sVUFBVSxHQUFHO0FBQ2xCaVksVUFBTSxFQUFFLFFBRFU7QUFFbEJDLFlBQVEsRUFBRTtBQUZRLEdBQW5CO0FBSUEsU0FBT3h0QiwwREFBVyxDQUFFc1YsVUFBVSxDQUFFN08sT0FBRixDQUFaLENBQVgsR0FDTkEsT0FETSxHQUVONk8sVUFBVSxDQUFFN08sT0FBRixDQUZYO0FBR0EsQ0FSTTtBQVVQOzs7Ozs7Ozs7OztBQVVPLElBQU0yUCxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLE9BTXhCO0FBQUEsNkJBTE5ULFVBS007QUFBQSxNQUxOQSxVQUtNLGdDQUxPLENBS1A7QUFBQSxnQ0FKTjBYLGFBSU07QUFBQSxNQUpOQSxhQUlNLG1DQUpVLENBSVY7QUFBQSxtQ0FITkMsZ0JBR007QUFBQSxNQUhOQSxnQkFHTSxzQ0FIYSxDQUdiO0FBQUEsOEJBRk56WCxXQUVNO0FBQUEsTUFGTkEsV0FFTSxpQ0FGUSxDQUVSO0FBQUEsOEJBRE5DLFdBQ007QUFBQSxNQUROQSxXQUNNLGlDQURRLEVBQ1I7QUFDTixNQUFNTyxLQUFLLEdBQUcsRUFBZDtBQUNBVixZQUFVLEdBQUcxSCxRQUFRLENBQUUwSCxVQUFGLEVBQWMsRUFBZCxDQUFyQjs7QUFDQSxNQUFLQSxVQUFVLEtBQUssQ0FBZixJQUFvQixDQUFFbEIsS0FBSyxDQUFFa0IsVUFBRixDQUFoQyxFQUFpRDtBQUNoRFUsU0FBSyxDQUFDcmpCLElBQU4sQ0FBWSxtQkFBbUIyaUIsVUFBL0I7QUFDQTs7QUFDRDBYLGVBQWEsR0FBR3BmLFFBQVEsQ0FBRW9mLGFBQUYsRUFBaUIsRUFBakIsQ0FBeEI7O0FBQ0EsTUFBS0EsYUFBYSxLQUFLLENBQWxCLElBQXVCLENBQUU1WSxLQUFLLENBQUU0WSxhQUFGLENBQW5DLEVBQXVEO0FBQ3REaFgsU0FBSyxDQUFDcmpCLElBQU4sQ0FBWSxtQkFBbUJxNkIsYUFBL0I7QUFDQTs7QUFDREMsa0JBQWdCLEdBQUdyZixRQUFRLENBQUVxZixnQkFBRixFQUFvQixFQUFwQixDQUEzQjs7QUFDQSxNQUFLQSxnQkFBZ0IsS0FBSyxDQUFyQixJQUEwQixDQUFFN1ksS0FBSyxDQUFFNlksZ0JBQUYsQ0FBdEMsRUFBNkQ7QUFDNURqWCxTQUFLLENBQUNyakIsSUFBTixDQUFZLG1CQUFtQnM2QixnQkFBL0I7QUFDQTs7QUFDRHpYLGFBQVcsR0FBRzVILFFBQVEsQ0FBRTRILFdBQUYsRUFBZSxFQUFmLENBQXRCOztBQUNBLE1BQUtBLFdBQVcsS0FBSyxDQUFoQixJQUFxQixDQUFFcEIsS0FBSyxDQUFFb0IsV0FBRixDQUFqQyxFQUFtRDtBQUNsRFEsU0FBSyxDQUFDcmpCLElBQU4sQ0FBWSxtQkFBbUI2aUIsV0FBL0I7QUFDQTs7QUFDRCxNQUFLQyxXQUFXLEtBQUssRUFBaEIsSUFBc0JBLFdBQVcsS0FBSyxJQUEzQyxFQUFrRDtBQUNqRE8sU0FBSyxDQUFDcmpCLElBQU4sQ0FBWSxtQkFBbUI4aUIsV0FBL0I7QUFDQTs7QUFDRCxTQUFPTyxLQUFLLENBQUM1YixJQUFOLENBQVksR0FBWixDQUFQO0FBQ0EsQ0E1Qk07QUE4QlA7Ozs7OztBQUtPLElBQU1tTSxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLEdBQXNCO0FBQUEsTUFBcEJuRyxTQUFvQix1RUFBUixFQUFRO0FBQ25EQSxXQUFTLEdBQUcsK0VBQUttSCxnQkFBZ0IsQ0FBQ25ILFNBQXpCLEVBQXVDQSxTQUF2QyxDQUFUO0FBQ0EsU0FBTzhWLDREQUFrQixDQUFFOVYsU0FBRixFQUFhMlYsZUFBYixFQUE4QkQsVUFBOUIsQ0FBekI7QUFDQSxDQUhNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0hQOzs7QUFHQTtBQUVPLElBQU14TyxVQUFVLEdBQUcsUUFBbkIsQyxDQUNQOztBQUNPLElBQU04bEIsaUJBQWlCLEdBQUcsT0FBMUI7QUFDQSxJQUFNQyxpQkFBaUIsR0FBRyxPQUExQjtBQUNBLElBQU1DLG1CQUFtQixHQUFHLFNBQTVCO0FBQ0EsSUFBTUMsbUJBQW1CLEdBQUcsU0FBNUI7QUFDQSxJQUFNQyx3QkFBd0IsR0FBRyxjQUFqQztBQUNBLElBQU1DLHVCQUF1QixHQUFHLGFBQWhDLEMsQ0FDUDs7QUFDTyxJQUFNQyxlQUFlLEdBQUc7QUFDOUJDLE9BQUssRUFBRSxLQUR1QjtBQUU5QkMsTUFBSSxFQUFFLEtBRndCO0FBRzlCeFYsU0FBTyxFQUFFO0FBSHFCLENBQXhCLEMsQ0FLUDs7QUFDTyxJQUFNK1MsZUFBZSxHQUFHO0FBQzlCalQsUUFBTSxFQUFFLEtBRHNCO0FBRTlCMlYscUJBQW1CLEVBQUUsS0FGUztBQUc5QkMsU0FBTyxFQUFFLEtBSHFCO0FBSTlCQyxRQUFNLEVBQUUsS0FKc0I7QUFLOUJKLE9BQUssRUFBRSxLQUx1QjtBQU05QkssWUFBVSxFQUFFLEtBTmtCO0FBTzlCQyxVQUFRLEVBQUUsS0FQb0I7QUFROUJDLFNBQU8sRUFBRSxLQVJxQjtBQVM5QkMsbUJBQWlCLEVBQUUsS0FUVztBQVU5QkMsU0FBTyxFQUFFLEtBVnFCO0FBVzlCQyxXQUFTLEVBQUU7QUFYbUIsQ0FBeEIsQyxDQWFQOztBQUNPLElBQU1DLGlCQUFpQixHQUFHO0FBQ2hDQyxPQUFLLEVBQUUsS0FEeUI7QUFFaENDLFdBQVMsRUFBRSxLQUZxQjtBQUdoQ0MsTUFBSSxFQUFFLEtBSDBCO0FBSWhDQyxZQUFVLEVBQUUsS0FKb0I7QUFLaENDLE1BQUksRUFBRSxLQUwwQjtBQU1oQ0MsUUFBTSxFQUFFLEtBTndCO0FBT2hDQyxPQUFLLEVBQUUsS0FQeUI7QUFRaENqQixNQUFJLEVBQUU7QUFSMEIsQ0FBMUIsQyxDQVVQOztBQUNPLElBQU1rQixpQkFBaUIsR0FBRztBQUNoQ0MsVUFBUSxFQUFFLEtBRHNCO0FBRWhDNVcsV0FBUyxFQUFFLEtBRnFCO0FBR2hDNlcsVUFBUSxFQUFFLEtBSHNCO0FBSWhDQyxRQUFNLEVBQUUsS0FKd0I7QUFLaENiLFNBQU8sRUFBRTtBQUx1QixDQUExQixDLENBT1A7O0FBQ08sSUFBTWMsc0JBQXNCLEdBQUc7QUFDckNILFVBQVEsRUFBRSxLQUQyQjtBQUVyQzVXLFdBQVMsRUFBRSxLQUYwQjtBQUdyQzZXLFVBQVEsRUFBRSxLQUgyQjtBQUlyQ04sWUFBVSxFQUFFLEtBSnlCO0FBS3JDUyxjQUFZLEVBQUUsS0FMdUI7QUFNckNDLGlCQUFlLEVBQUUsS0FOb0I7QUFPckNDLFdBQVMsRUFBRTtBQVAwQixDQUEvQixDLENBU1A7O0FBQ08sSUFBTUMscUJBQXFCLEdBQUc7QUFDcENDLFdBQVMsRUFBRSxLQUR5QjtBQUVwQ0MsVUFBUSxFQUFFLEtBRjBCO0FBR3BDUCxRQUFNLEVBQUUsS0FINEI7QUFJcENQLFlBQVUsRUFBRSxLQUp3QjtBQUtwQ2UsVUFBUSxFQUFFO0FBTDBCLENBQTlCLEMsQ0FRUDtBQUNBO0FBRUE7O0FBQ08sSUFBTUMsYUFBYSxHQUFHO0FBQzVCQyxTQUFPLEVBQUUsU0FEbUI7QUFFNUJDLFFBQU0sRUFBRSxRQUZvQjtBQUc1QmpDLE9BQUssRUFBRSxPQUhxQjtBQUk1QlMsU0FBTyxFQUFFLFNBSm1CO0FBSzVCeUIsU0FBTyxFQUFFLFNBTG1CO0FBTTVCclgsU0FBTyxFQUFFO0FBTm1CLENBQXRCO0FBU0EsSUFBTXNYLGlCQUFpQixHQUFHLFNBQTFCO0FBRUEsSUFBTTVuQixjQUFjLDZGQUN2QmpYLHFEQUFNLENBQUV5OEIsZUFBRixDQURpQixtRkFFdkJ6OEIscURBQU0sQ0FBRWs2QixlQUFGLENBRmlCLG1GQUd2Qmw2QixxREFBTSxDQUFFcTlCLGlCQUFGLENBSGlCLG1GQUl2QnI5QixxREFBTSxDQUFFNjlCLGlCQUFGLENBSmlCLG1GQUt2Qjc5QixxREFBTSxDQUFFaStCLHNCQUFGLENBTGlCLG1GQU12QmorQixxREFBTSxDQUFFcStCLHFCQUFGLENBTmlCLG1GQU92QnIrQixxREFBTSxDQUFFeStCLGFBQUYsQ0FQaUIsSUFRMUJJLGlCQVIwQixFQUFwQixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RGUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBSUEsSUFBTUMsbUNBQW1DLG9JQUN0Q3pVLGlFQUFBLENBQThCOFQsZUFEUSxFQUNXLElBQUlZLGtFQUFKLENBQ2xEei9CLDhEQUFFLENBQUUsaUJBQUYsRUFBcUIsZ0JBQXJCLENBRGdELEVBRWxEQSw4REFBRSxDQUFFLGtCQUFGLEVBQXNCLGdCQUF0QixDQUZnRCxDQURYLHVHQUt0QytxQixpRUFBQSxDQUE4QnlULFFBTFEsRUFLSWlCLGtFQUFLLENBQUNDLHVCQUFOLENBQzNDMS9CLDhEQUFFLENBQUUsVUFBRixFQUFjLGdCQUFkLENBRHlDLENBTEosdUdBUXRDK3FCLGlFQUFBLENBQThCNlQsWUFSUSxFQVFRYSxrRUFBSyxDQUFDQyx1QkFBTixDQUMvQzEvQiw4REFBRSxDQUFFLGNBQUYsRUFBa0IsZ0JBQWxCLENBRDZDLENBUlIsdUdBV3RDK3FCLGlFQUFBLENBQThCbkQsU0FYUSxFQVdLNlgsa0VBQUssQ0FBQ0MsdUJBQU4sQ0FDNUMxL0IsOERBQUUsQ0FBRSxXQUFGLEVBQWUsZ0JBQWYsQ0FEMEMsQ0FYTCx1R0FjdEMrcUIsaUVBQUEsQ0FBOEJvVCxVQWRRLEVBY01zQixrRUFBSyxDQUFDQyx1QkFBTixDQUM3QzEvQiw4REFBRSxDQUFFLFlBQUYsRUFBZ0IsZ0JBQWhCLENBRDJDLENBZE4sdUdBaUJ0QytxQixpRUFBQSxDQUE4QjBULFFBakJRLEVBaUJJZ0Isa0VBQUssQ0FBQ0MsdUJBQU4sQ0FDM0MxL0IsOERBQUUsQ0FBRSxVQUFGLEVBQWMsZ0JBQWQsQ0FEeUMsQ0FqQkosdUdBb0J0QytxQixpRUFBQSxDQUE4QitULFNBcEJRLEVBb0JLLElBQUlXLGtFQUFKLENBQzVDei9CLDhEQUFFLENBQUUsV0FBRixFQUFlLGdCQUFmLENBRDBDLEVBRTVDQSw4REFBRSxDQUFFLFlBQUYsRUFBZ0IsZ0JBQWhCLENBRjBDLENBcEJMLHlCQUF6QztBQTBCQTs7Ozs7O0FBS0EsSUFBTTIvQixrQ0FBa0Msc0lBQ3JDNVUsZ0VBQUEsQ0FBNkJtVSxRQURRLEVBQ0lPLGtFQUFLLENBQUNDLHVCQUFOLENBQzFDMS9CLDhEQUFFLENBQUUsVUFBRixFQUFjLGdCQUFkLENBRHdDLENBREosd0dBSXJDK3FCLGdFQUFBLENBQTZCa1UsUUFKUSxFQUlJUSxrRUFBSyxDQUFDQyx1QkFBTixDQUMxQzEvQiw4REFBRSxDQUFFLFVBQUYsRUFBYyxnQkFBZCxDQUR3QyxDQUpKLHdHQU9yQytxQixnRUFBQSxDQUE2Qm9ULFVBUFEsRUFPTXNCLGtFQUFLLENBQUNDLHVCQUFOLENBQzVDMS9CLDhEQUFFLENBQUUsWUFBRixFQUFnQixnQkFBaEIsQ0FEMEMsQ0FQTix3R0FVckMrcUIsZ0VBQUEsQ0FBNkIyVCxNQVZRLEVBVUVlLGtFQUFLLENBQUNDLHVCQUFOLENBQ3hDMS9CLDhEQUFFLENBQUUsUUFBRixFQUFZLGdCQUFaLENBRHNDLENBVkYsd0dBYXJDK3FCLGdFQUFBLENBQTZCaVUsU0FiUSxFQWFLUyxrRUFBSyxDQUFDQyx1QkFBTixDQUMzQzEvQiw4REFBRSxDQUFFLFdBQUYsRUFBZSxnQkFBZixDQUR5QyxDQWJMLDBCQUF4QztBQWtCQTs7Ozs7QUFJQSxJQUFNNC9CLDhCQUE4QixzSUFDakM3VSw0REFBQSxDQUF5QnlULFFBRFEsRUFDSWlCLGtFQUFLLENBQUNDLHVCQUFOLENBQ3RDMS9CLDhEQUFFLENBQUUsVUFBRixFQUFjLGdCQUFkLENBRG9DLENBREosd0dBSWpDK3FCLDREQUFBLENBQXlCOFMsT0FKUSxFQUlHNEIsa0VBQUssQ0FBQ0MsdUJBQU4sQ0FDckMxL0IsOERBQUUsQ0FBRSxTQUFGLEVBQWEsZ0JBQWIsQ0FEbUMsQ0FKSCx3R0FPakMrcUIsNERBQUEsQ0FBeUJuRCxTQVBRLEVBT0s2WCxrRUFBSyxDQUFDQyx1QkFBTixDQUN2QzEvQiw4REFBRSxDQUFFLFdBQUYsRUFBZSxnQkFBZixDQURxQyxDQVBMLHdHQVVqQytxQiw0REFBQSxDQUF5QjBULFFBVlEsRUFVSWdCLGtFQUFLLENBQUNDLHVCQUFOLENBQ3RDMS9CLDhEQUFFLENBQUUsVUFBRixFQUFjLGdCQUFkLENBRG9DLENBVkosd0dBYWpDK3FCLDREQUFBLENBQXlCMlQsTUFiUSxFQWFFZSxrRUFBSyxDQUFDQyx1QkFBTixDQUNwQzEvQiw4REFBRSxDQUFFLFFBQUYsRUFBWSxnQkFBWixDQURrQyxDQWJGLDBCQUFwQztBQWtCQTs7Ozs7QUFJQSxJQUFNNi9CLDhCQUE4QixzSUFDakM5VSw0REFBQSxDQUF5QnNTLElBRFEsRUFDQW9DLGtFQUFLLENBQUNDLHVCQUFOLENBQ2xDMS9CLDhEQUFFLENBQUUsTUFBRixFQUFVLGdCQUFWLENBRGdDLENBREEsd0dBSWpDK3FCLDREQUFBLENBQXlCcVQsSUFKUSxFQUlBcUIsa0VBQUssQ0FBQ0MsdUJBQU4sQ0FDbEMxL0IsOERBQUUsQ0FBRSxvQkFBRixFQUF3QixnQkFBeEIsQ0FEZ0MsQ0FKQSx3R0FPakMrcUIsNERBQUEsQ0FBeUJtVCxJQVBRLEVBT0F1QixrRUFBSyxDQUFDQyx1QkFBTixDQUNsQzEvQiw4REFBRSxDQUFFLFFBQUYsRUFBWSxnQkFBWixDQURnQyxDQVBBLHdHQVVqQytxQiw0REFBQSxDQUF5QmlULEtBVlEsRUFVQ3lCLGtFQUFLLENBQUNDLHVCQUFOLENBQ25DMS9CLDhEQUFFLENBQUUsWUFBRixFQUFnQixnQkFBaEIsQ0FEaUMsQ0FWRCx3R0FhakMrcUIsNERBQUEsQ0FBeUJrVCxTQWJRLEVBYUt3QixrRUFBSyxDQUFDQyx1QkFBTixDQUN2QzEvQiw4REFBRSxDQUFFLHdCQUFGLEVBQTRCLGdCQUE1QixDQURxQyxDQWJMLHdHQWdCakMrcUIsNERBQUEsQ0FBeUJzVCxNQWhCUSxFQWdCRW9CLGtFQUFLLENBQUNDLHVCQUFOLENBQ3BDMS9CLDhEQUFFLENBQUUsc0JBQUYsRUFBMEIsZ0JBQTFCLENBRGtDLENBaEJGLHdHQW1CakMrcUIsNERBQUEsQ0FBeUJvVCxVQW5CUSxFQW1CTXNCLGtFQUFLLENBQUNDLHVCQUFOLENBQ3hDMS9CLDhEQUFFLENBQUUsdUJBQUYsRUFBMkIsZ0JBQTNCLENBRHNDLENBbkJOLHdHQXNCakMrcUIsNERBQUEsQ0FBeUJ1VCxLQXRCUSxFQXNCQ21CLGtFQUFLLENBQUNDLHVCQUFOLENBQ25DMS9CLDhEQUFFLENBQUUsZ0NBQUYsRUFBb0MsZ0JBQXBDLENBRGlDLENBdEJELDBCQUFwQztBQTJCQTs7Ozs7QUFJQSxJQUFNOC9CLDBCQUEwQixzSUFDN0IvVSx3REFBQSxDQUFxQnFVLE9BRFEsRUFDR0ssa0VBQUssQ0FBQ0MsdUJBQU4sQ0FDakMxL0IsOERBQUUsQ0FBRSxXQUFGLEVBQWUsZ0JBQWYsQ0FEK0IsQ0FESCx3R0FJN0IrcUIsd0RBQUEsQ0FBcUJzVSxNQUpRLEVBSUVJLGtFQUFLLENBQUNDLHVCQUFOLENBQ2hDMS9CLDhEQUFFLENBQUUsV0FBRixFQUFlLGdCQUFmLENBRDhCLENBSkYsd0dBTzdCK3FCLHdEQUFBLENBQXFCcVMsS0FQUSxFQU9DcUMsa0VBQUssQ0FBQ0MsdUJBQU4sQ0FDL0IxL0IsOERBQUUsQ0FBRSxPQUFGLEVBQVcsZ0JBQVgsQ0FENkIsQ0FQRCx3R0FVN0IrcUIsd0RBQUEsQ0FBcUI4UyxPQVZRLEVBVUc0QixrRUFBSyxDQUFDQyx1QkFBTixDQUNqQzEvQiw4REFBRSxDQUFFLFNBQUYsRUFBYSxnQkFBYixDQUQrQixDQVZILHdHQWE3QitxQix3REFBQSxDQUFxQnVVLE9BYlEsRUFhR0csa0VBQUssQ0FBQ0MsdUJBQU4sQ0FDakMxL0IsOERBQUUsQ0FBRSxTQUFGLEVBQWEsZ0JBQWIsQ0FEK0IsQ0FiSCx3R0FnQjdCK3FCLHdEQUFBLENBQXFCOUMsT0FoQlEsRUFnQkd3WCxrRUFBSyxDQUFDQyx1QkFBTixDQUNqQzEvQiw4REFBRSxDQUFFLFNBQUYsRUFBYSxnQkFBYixDQUQrQixDQWhCSCwwQkFBaEMsQyxDQXFCQTtBQUNBOztBQUVBOzs7OztBQUlBLElBQU0rL0IsNEJBQTRCLHNJQUMvQm5GLHNEQUFlLENBQUM1UyxRQURlLEVBQ0h5WCxrRUFBSyxDQUFDQyx1QkFBTixDQUM3QjEvQiw4REFBRSxDQUFFLFVBQUYsRUFBYyxnQkFBZCxDQUQyQixDQURHLHdHQUkvQjQ2QixzREFBZSxDQUFDN1MsU0FKZSxFQUlGMFgsa0VBQUssQ0FBQ0MsdUJBQU4sQ0FDOUIxL0IsOERBQUUsQ0FBRSxXQUFGLEVBQWUsZ0JBQWYsQ0FENEIsQ0FKRSx3R0FPL0I0NkIsc0RBQWUsQ0FBQ2hULFNBUGUsRUFPRjZYLGtFQUFLLENBQUNDLHVCQUFOLENBQzlCMS9CLDhEQUFFLENBQUUsV0FBRixFQUFlLGdCQUFmLENBRDRCLENBUEUsMEJBQWxDO0FBWUE7Ozs7O0FBSUEsSUFBTWdnQyw2QkFBNkIsc0lBQ2hDQyx3REFBZ0IsQ0FBQ0MsUUFEZSxFQUNIVCxrRUFBSyxDQUFDQyx1QkFBTixDQUM5QjEvQiw4REFBRSxDQUFFLFVBQUYsRUFBYyxnQkFBZCxDQUQ0QixDQURHLHdHQUloQ2lnQyx3REFBZ0IsQ0FBQ3BZLE9BSmUsRUFJSjRYLGtFQUFLLENBQUNDLHVCQUFOLENBQzdCMS9CLDhEQUFFLENBQUUsU0FBRixFQUFhLGdCQUFiLENBRDJCLENBSkksd0dBT2hDaWdDLHdEQUFnQixDQUFDalksUUFQZSxFQU9IeVgsa0VBQUssQ0FBQ0MsdUJBQU4sQ0FDOUIxL0IsOERBQUUsQ0FBRSxVQUFGLEVBQWMsZ0JBQWQsQ0FENEIsQ0FQRyx3R0FVaENpZ0Msd0RBQWdCLENBQUNwQyxPQVZlLEVBVUo0QixrRUFBSyxDQUFDQyx1QkFBTixDQUM3QjEvQiw4REFBRSxDQUFFLFVBQUYsRUFBYyxnQkFBZCxDQUQyQixDQVZJLHdHQWFoQ2lnQyx3REFBZ0IsQ0FBQ0UsTUFiZSxFQWFMVixrRUFBSyxDQUFDQyx1QkFBTixDQUM1QjEvQiw4REFBRSxDQUFFLFNBQUYsRUFBYSxnQkFBYixDQUQwQixDQWJLLDBCQUFuQztBQWtCQTs7Ozs7QUFJQSxJQUFNb2dDLCtCQUErQixzSUFDbEMxWSw0REFBa0IsQ0FBQ0UsU0FEZSxFQUNGNlgsa0VBQUssQ0FBQ0MsdUJBQU4sQ0FDakMxL0IsOERBQUUsQ0FBRSxXQUFGLEVBQWUsZ0JBQWYsQ0FEK0IsQ0FERSx3R0FJbEMwbkIsNERBQWtCLENBQUNNLFFBSmUsRUFJSHlYLGtFQUFLLENBQUNDLHVCQUFOLENBQ2hDMS9CLDhEQUFFLENBQUUsVUFBRixFQUFjLGdCQUFkLENBRDhCLENBSkcsd0dBT2xDMG5CLDREQUFrQixDQUFDRyxPQVBlLEVBT0o0WCxrRUFBSyxDQUFDQyx1QkFBTixDQUMvQjEvQiw4REFBRSxDQUFFLFNBQUYsRUFBYSxnQkFBYixDQUQ2QixDQVBJLHdHQVVsQzBuQiw0REFBa0IsQ0FBQ0ksUUFWZSxFQVVIMlgsa0VBQUssQ0FBQ0MsdUJBQU4sQ0FDaEMxL0IsOERBQUUsQ0FBRSxVQUFGLEVBQWMsZ0JBQWQsQ0FEOEIsQ0FWRyx3R0FhbEMwbkIsNERBQWtCLENBQUNRLFFBYmUsRUFhSHVYLGtFQUFLLENBQUNDLHVCQUFOLENBQ2hDMS9CLDhEQUFFLENBQUUsVUFBRixFQUFjLGdCQUFkLENBRDhCLENBYkcsd0dBZ0JsQzBuQiw0REFBa0IsQ0FBQ0MsTUFoQmUsRUFnQkw4WCxrRUFBSyxDQUFDQyx1QkFBTixDQUM5QjEvQiw4REFBRSxDQUFFLFFBQUYsRUFBWSxnQkFBWixDQUQ0QixDQWhCSyx3R0FtQmxDMG5CLDREQUFrQixDQUFDSyxTQW5CZSxFQW1CRjBYLGtFQUFLLENBQUNDLHVCQUFOLENBQ2pDMS9CLDhEQUFFLENBQUUsV0FBRixFQUFlLGdCQUFmLENBRCtCLENBbkJFLDBCQUFyQztBQXdCQTs7Ozs7O0FBS0EsSUFBTXFnQyw4QkFBOEIsc0lBQ2pDbFosMERBQWlCLENBQUNFLGlCQURlLEVBQ00sSUFBSW9ZLGtFQUFKLENBQ3hDei9CLDhEQUFFLENBQUUsVUFBRixFQUFjLGdCQUFkLENBRHNDLEVBRXhDQSw4REFBRSxDQUFFLFdBQUYsRUFBZSxnQkFBZixDQUZzQyxDQUROLHdHQUtqQ21uQiwwREFBaUIsQ0FBQ0Msa0JBTGUsRUFLTyxJQUFJcVksa0VBQUosQ0FDekN6L0IsOERBQUUsQ0FBRSxXQUFGLEVBQWUsZ0JBQWYsQ0FEdUMsRUFFekNBLDhEQUFFLENBQUUsWUFBRixFQUFnQixnQkFBaEIsQ0FGdUMsQ0FMUCx3R0FTakNtbkIsMERBQWlCLENBQUNHLG9CQVRlLEVBU1NtWSxrRUFBSyxDQUFDQyx1QkFBTixDQUMzQzEvQiw4REFBRSxDQUFFLGtCQUFGLEVBQXNCLGdCQUF0QixDQUR5QyxDQVRULDBCQUFwQztBQWNBOzs7OztBQUlBLElBQU1zZ0MsMEJBQTBCLEdBQUcsK0VBQy9CZCxtQ0FENEIsRUFFNUJHLGtDQUY0QixFQUc1QkMsOEJBSDRCLEVBSTVCQyw4QkFKNEIsRUFLNUJDLDBCQUw0QixFQU01QkMsNEJBTjRCLEVBTzVCQyw2QkFQNEIsRUFRNUJJLCtCQVI0QixFQVM1QkMsOEJBVDRCLG1GQVU3QnRWLDREQVY2QixFQVVEMFUsa0VBQUssQ0FBQ0MsdUJBQU4sQ0FDN0IxL0IsOERBQUUsQ0FBRSxTQUFGLEVBQWEsZ0JBQWIsQ0FEMkIsQ0FWQyxFQUFoQztBQWVBOzs7Ozs7Ozs7Ozs7QUFVTyxJQUFNd1gsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FDM0Irb0IsVUFEMkIsRUFJdkI7QUFBQSxNQUZKcEYsUUFFSSx1RUFGTyxJQUVQO0FBQUEsTUFESmxQLE1BQ0ksdUVBREt3VCxrRUFBSyxDQUFDZSxvQkFDWDtBQUNKLFNBQU9GLDBCQUEwQixDQUFFQyxVQUFGLENBQTFCLEdBQ05ELDBCQUEwQixDQUFFQyxVQUFGLENBQTFCLENBQXlDRSxXQUF6QyxDQUFzRHRGLFFBQXRELEVBQWdFbFAsTUFBaEUsQ0FETSxHQUVOcVUsMEJBQTBCLENBQUV2Viw0REFBRixDQUExQixDQUF1RDBWLFdBQXZELENBQ0N0RixRQURELEVBRUNsUCxNQUZELENBRkQ7QUFNQSxDQVhNO0FBYVA7Ozs7Ozs7Ozs7O0FBVU8sSUFBTXlVLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsQ0FDN0JDLFdBRDZCLEVBSXpCO0FBQUEsTUFGSnhGLFFBRUksdUVBRk8sSUFFUDtBQUFBLE1BREpsUCxNQUNJLHVFQURLd1Qsa0VBQUssQ0FBQ2Usb0JBQ1g7O0FBQ0osTUFBSyxDQUFFbmhDLHNEQUFPLENBQUVzaEMsV0FBRixDQUFkLEVBQWdDO0FBQy9CLFVBQU0sSUFBSXJpQixTQUFKLENBQWUseUNBQ3BCLGlCQURLLENBQU47QUFFQTs7QUFDRCxNQUFNc2lCLGNBQWMsR0FBRyxFQUF2QjtBQUNBRCxhQUFXLENBQUN6NUIsT0FBWixDQUFxQixVQUFFcTVCLFVBQUYsRUFBa0I7QUFDdENLLGtCQUFjLENBQUVMLFVBQUYsQ0FBZCxHQUErQi9vQixZQUFZLENBQzFDK29CLFVBRDBDLEVBRTFDcEYsUUFGMEMsRUFHMUNsUCxNQUgwQyxDQUEzQztBQUtBLEdBTkQ7QUFPQSxTQUFPMlUsY0FBUDtBQUNBLENBbEJNLEM7Ozs7Ozs7Ozs7OztBQy9SUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0RBOzs7QUFHQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQU1BOzs7OztBQUlPLElBQU0zcEIsY0FBYyxHQUFHO0FBQzdCcEgsV0FBUyxFQUFFdFIsaURBQVMsQ0FBQ3lKLEtBQVYsQ0FBaUI7QUFDM0I0TixTQUFLLEVBQUVyWCxpREFBUyxDQUFDcUksTUFEVTtBQUUzQmlQLFdBQU8sRUFBRXRYLGlEQUFTLENBQUNHLE1BRlE7QUFHM0JvWCxTQUFLLEVBQUV2WCxpREFBUyxDQUFDK0UsS0FBVixDQUFpQnlTLDBEQUFqQjtBQUhvQixHQUFqQjtBQURrQixDQUF2QjtBQVFQOzs7Ozs7Ozs7Ozs7O0FBWU8sSUFBTWlCLGdCQUFnQixHQUFHO0FBQy9CbkgsV0FBUyxFQUFFO0FBQ1YrRixTQUFLLEVBQUUsRUFERztBQUVWQyxXQUFPLEVBQUUsWUFGQztBQUdWQyxTQUFLLEVBQUV3UCxxREFBZUE7QUFIWjtBQURvQixDQUF6QjtBQVFQOzs7Ozs7Ozs7O0FBU08sSUFBTUMsVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBRTFQLE9BQUYsRUFBZTtBQUN4QyxNQUFNNk8sVUFBVSxHQUFHO0FBQ2xCNmIsY0FBVSxFQUFFO0FBRE0sR0FBbkI7QUFHQSxTQUFPbnhCLDBEQUFXLENBQUVzVixVQUFVLENBQUU3TyxPQUFGLENBQVosQ0FBWCxHQUNOQSxPQURNLEdBRU42TyxVQUFVLENBQUU3TyxPQUFGLENBRlg7QUFHQSxDQVBNO0FBU1A7Ozs7Ozs7O0FBT08sSUFBTTJQLGVBQWUsR0FBRyxTQUFsQkEsZUFBa0IsT0FBc0I7QUFBQSxNQUFsQnFiLFVBQWtCLFFBQWxCQSxVQUFrQjtBQUNwRCxNQUFNcGIsS0FBSyxHQUFHLEVBQWQ7O0FBQ0EsTUFBS29iLFVBQUwsRUFBa0I7QUFDakJwYixTQUFLLENBQUNyakIsSUFBTixDQUFZLHFCQUFxQnkrQixVQUFqQztBQUNBOztBQUNELFNBQU9wYixLQUFLLENBQUM1YixJQUFOLENBQVksR0FBWixDQUFQO0FBQ0EsQ0FOTTtBQVFQOzs7Ozs7QUFLTyxJQUFNbU0sY0FBYyxHQUFHLFNBQWpCQSxjQUFpQixHQUFzQjtBQUFBLE1BQXBCbkcsU0FBb0IsdUVBQVIsRUFBUTtBQUNuREEsV0FBUyxHQUFHLCtFQUFLbUgsZ0JBQWdCLENBQUNuSCxTQUF6QixFQUF1Q0EsU0FBdkMsQ0FBVDtBQUNBLFNBQU84Viw0REFBa0IsQ0FBRTlWLFNBQUYsRUFBYTJWLGVBQWIsRUFBOEJELFVBQTlCLENBQXpCO0FBQ0EsQ0FITSxDOzs7Ozs7Ozs7Ozs7QUNyRlA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQUdBO0FBRU8sSUFBTXhPLFVBQVUsR0FBRyxRQUFuQjtBQUVBLElBQU1rcEIsZ0JBQWdCLEdBQUc7QUFDL0JqWSxVQUFRLEVBQUUsS0FEcUI7QUFFL0JILFNBQU8sRUFBRSxLQUZzQjtBQUcvQnFZLFVBQVEsRUFBRSxLQUhxQjtBQUkvQnJDLFNBQU8sRUFBRSxLQUpzQjtBQUsvQnNDLFFBQU0sRUFBRTtBQUx1QixDQUF6QjtBQVFBLElBQU1XLGlCQUFpQixHQUFHcGdDLHFEQUFNLENBQUV1L0IsZ0JBQUYsQ0FBaEMsQzs7Ozs7Ozs7Ozs7O0FDZlA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEQTs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFTTyxJQUFNeFcsY0FBYyxHQUFHQyxzREFBTSxFQUE3QjtBQUVQOzs7OztBQUlPLElBQU16UyxjQUFjLEdBQUc7QUFDN0JwSCxXQUFTLEVBQUV0UixpREFBUyxDQUFDeUosS0FBVixDQUFpQjtBQUMzQjROLFNBQUssRUFBRXJYLGlEQUFTLENBQUNxSSxNQURVO0FBRTNCaVAsV0FBTyxFQUFFdFgsaURBQVMsQ0FBQytFLEtBQVYsQ0FBaUIsQ0FDekIsVUFEeUIsRUFFekIsUUFGeUIsRUFHekIsWUFIeUIsRUFJekIsVUFKeUIsQ0FBakIsQ0FGa0I7QUFRM0J3UyxTQUFLLEVBQUV2WCxpREFBUyxDQUFDK0UsS0FBVixDQUFpQnlTLDBEQUFqQixDQVJvQjtBQVMzQjRULGVBQVcsRUFBRXByQixpREFBUyxDQUFDQyxJQVRJO0FBVTNCb3JCLFNBQUssRUFBRXJyQixpREFBUyxDQUFDcXJCO0FBVlUsR0FBakI7QUFEa0IsQ0FBdkI7QUFlUDs7Ozs7Ozs7Ozs7Ozs7QUFhTyxJQUFNNVMsZ0JBQWdCLEdBQUc7QUFDL0JuSCxXQUFTLEVBQUU7QUFDVitGLFNBQUssRUFBRSxHQURHO0FBRVZDLFdBQU8sRUFBRSxZQUZDO0FBR1ZDLFNBQUssRUFBRUksc0RBSEc7QUFJVnlULGVBQVcsRUFBRTtBQUpIO0FBRG9CLENBQXpCO0FBU1A7Ozs7Ozs7Ozs7QUFTTyxJQUFNcEUsVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBRTFQLE9BQUYsRUFBZTtBQUN4QyxNQUFNNk8sVUFBVSxHQUFHO0FBQ2xCbUYsY0FBVSxFQUFFLGdCQURNO0FBRWxCQyxZQUFRLEVBQUU7QUFGUSxHQUFuQjtBQUlBLFNBQU8xYSwwREFBVyxDQUFFc1YsVUFBVSxDQUFFN08sT0FBRixDQUFaLENBQVgsR0FDTkEsT0FETSxHQUVONk8sVUFBVSxDQUFFN08sT0FBRixDQUZYO0FBR0EsQ0FSTTtBQVVQOzs7Ozs7Ozs7Ozs7QUFXTyxJQUFNMlAsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixPQUt4QjtBQUFBLDZCQUpOVCxVQUlNO0FBQUEsTUFKTkEsVUFJTSxnQ0FKTyxDQUlQO0FBQUEsZ0NBSE5DLGFBR007QUFBQSxNQUhOQSxhQUdNLG1DQUhVLENBR1Y7QUFBQSw4QkFGTjJFLFdBRU07QUFBQSxNQUZOQSxXQUVNLGlDQUZRLEtBRVI7QUFBQSx3QkFETkMsS0FDTTtBQUFBLE1BRE5BLEtBQ00sMkJBREUsTUFDRjtBQUNOLE1BQU1uRSxLQUFLLEdBQUcsRUFBZDs7QUFDQSxNQUFLLENBQUVrRSxXQUFQLEVBQXFCO0FBQ3BCbEUsU0FBSyxDQUFDcmpCLElBQU4sQ0FDQyxvQ0FBb0N1a0Isa0RBQXBDLEdBQ0Esa0NBREEsR0FFQThDLGNBQWMsQ0FBQ3pELEtBQWYsR0FBdUJGLE1BQXZCLEVBSEQ7QUFLQTs7QUFDRCxNQUFLOEQsS0FBSyxJQUFJQSxLQUFLLEtBQUssTUFBeEIsRUFBaUM7QUFDaENuRSxTQUFLLENBQUNyakIsSUFBTixDQUNDLDZCQUE2QjBrQiw0REFBN0IsR0FDQSwyQkFEQSxHQUVBNEMsc0RBQU0sR0FBR0UsS0FBVCxDQUFnQkEsS0FBaEIsRUFBd0JHLE9BQXhCLENBQWlDLE9BQWpDLEVBQTJDL0QsS0FBM0MsR0FBbURGLE1BQW5ELEVBSEQ7QUFLQUwsU0FBSyxDQUFDcmpCLElBQU4sQ0FDQywyQkFBMkIya0IseURBQTNCLEdBQ0EseUJBREEsR0FFQTJDLHNEQUFNLEdBQUdFLEtBQVQsQ0FBZ0JBLEtBQWhCLEVBQXdCSSxLQUF4QixDQUErQixPQUEvQixFQUF5Q2hFLEtBQXpDLEdBQWlERixNQUFqRCxFQUhEO0FBS0E7O0FBQ0RmLFlBQVUsR0FBRzFILFFBQVEsQ0FBRTBILFVBQUYsRUFBYyxFQUFkLENBQXJCOztBQUNBLE1BQUtBLFVBQVUsS0FBSyxDQUFmLElBQW9CLENBQUVsQixLQUFLLENBQUVrQixVQUFGLENBQWhDLEVBQWlEO0FBQ2hEVSxTQUFLLENBQUNyakIsSUFBTixDQUFZLGtDQUFrQzJpQixVQUE5QztBQUNBOztBQUNEQyxlQUFhLEdBQUczSCxRQUFRLENBQUUySCxhQUFGLEVBQWlCLEVBQWpCLENBQXhCOztBQUNBLE1BQUtBLGFBQWEsS0FBSyxDQUFsQixJQUF1QixDQUFFbkIsS0FBSyxDQUFFbUIsYUFBRixDQUFuQyxFQUF1RDtBQUN0RFMsU0FBSyxDQUFDcmpCLElBQU4sQ0FBWSw0QkFBNEI0aUIsYUFBeEM7QUFDQTs7QUFDRCxTQUFPUyxLQUFLLENBQUM1YixJQUFOLENBQVksR0FBWixDQUFQO0FBQ0EsQ0FuQ007QUFxQ1A7Ozs7OztBQUtPLElBQU1tTSxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLEdBQXNCO0FBQUEsTUFBcEJuRyxTQUFvQix1RUFBUixFQUFRO0FBQ25EQSxXQUFTLEdBQUcsK0VBQUttSCxnQkFBZ0IsQ0FBQ25ILFNBQXpCLEVBQXVDQSxTQUF2QyxDQUFUO0FBQ0EsU0FBTzhWLDREQUFrQixDQUFFOVYsU0FBRixFQUFhMlYsZUFBYixFQUE4QkQsVUFBOUIsQ0FBekI7QUFDQSxDQUhNLEM7Ozs7Ozs7Ozs7OztBQ25JUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQUdBO0FBQ0E7QUFFQTs7OztBQUdBO0FBRUE7Ozs7OztBQUtBLElBQU13YixrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQXFCLENBQUVDLFlBQUYsRUFBb0I7QUFDOUMsTUFBSyxDQUFFdGpDLHNGQUFvQixDQUFFc2pDLFlBQUYsRUFBZ0JqcUIscURBQWhCLENBQTNCLEVBQTBEO0FBQ3pELFVBQU0sSUFBSXVILFNBQUosQ0FDTCw4Q0FESyxDQUFOO0FBR0E7QUFDRCxDQU5EO0FBUUE7Ozs7Ozs7QUFLTyxJQUFNMmlCLFFBQVEsR0FBRyxTQUFYQSxRQUFXLENBQUVELFlBQUYsRUFBb0I7QUFDM0NELG9CQUFrQixDQUFFQyxZQUFGLENBQWxCO0FBQ0EsU0FBTyxDQUFFRSxVQUFVLENBQUVGLFlBQUYsQ0FBWixJQUNOQSxZQUFZLENBQUNwbUIsU0FBYixDQUF1QnVQLE9BQXZCLEtBQW1DLENBRDdCLElBRU42VyxZQUFZLENBQUNubUIsT0FBYixDQUFxQnNQLE9BQXJCLEtBQWlDLENBRmxDO0FBR0EsQ0FMTTtBQU9QOzs7Ozs7QUFLTyxJQUFNRyxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFFMFcsWUFBRixFQUFvQjtBQUM1Q0Qsb0JBQWtCLENBQUVDLFlBQUYsQ0FBbEI7QUFDQSxTQUFPQSxZQUFZLENBQUNubUIsT0FBYixDQUFxQnNQLE9BQXJCLEtBQWlDLENBQXhDO0FBQ0EsQ0FITTtBQUtQOzs7Ozs7QUFLTyxJQUFNSyxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFFd1csWUFBRixFQUFvQjtBQUM1Q0Qsb0JBQWtCLENBQUVDLFlBQUYsQ0FBbEI7QUFDQSxNQUFNRyxHQUFHLEdBQUdILFlBQVksQ0FBQ0csR0FBekI7QUFDQSxTQUFTQSxHQUFHLEtBQUssSUFBUixJQUFnQkEsR0FBRyxLQUFLLEtBQXhCLElBQWlDQSxHQUFHLEtBQUtwbEIsUUFBM0MsSUFDTmlsQixZQUFZLENBQUNyVyxJQUFiLElBQXFCd1csR0FEdEI7QUFFQSxDQUxNO0FBT1A7Ozs7Ozs7QUFNTyxJQUFNQyxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFFSixZQUFGLEVBQW9CO0FBQzVDRCxvQkFBa0IsQ0FBRUMsWUFBRixDQUFsQjtBQUNBLFNBQU8sQ0FBRUUsVUFBVSxDQUFFRixZQUFGLENBQVosSUFDTkEsWUFBWSxDQUFDcG1CLFNBQWIsQ0FBdUJ1UCxPQUF2QixLQUFtQyxDQURwQztBQUVBLENBSk07QUFNUDs7Ozs7O0FBS08sSUFBTStXLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUVGLFlBQUYsRUFBb0I7QUFDN0NELG9CQUFrQixDQUFFQyxZQUFGLENBQWxCO0FBQ0EsU0FBT0EsWUFBWSxDQUFDbFcsT0FBcEI7QUFDQSxDQUhNO0FBS1A7Ozs7OztBQUtPLElBQU1DLE1BQU0sR0FBRyxTQUFUQSxNQUFTLENBQUVpVyxZQUFGLEVBQW9CO0FBQ3pDRCxvQkFBa0IsQ0FBRUMsWUFBRixDQUFsQjs7QUFDQSxNQUFLRSxVQUFVLENBQUVGLFlBQUYsQ0FBZixFQUFrQztBQUNqQyxXQUFPZiwyREFBZ0IsQ0FBQ0MsUUFBeEI7QUFDQTs7QUFDRCxNQUFLMVYsU0FBUyxDQUFFd1csWUFBRixDQUFkLEVBQWlDO0FBQ2hDLFdBQU9mLDJEQUFnQixDQUFDalksUUFBeEI7QUFDQTs7QUFDRCxNQUFLc0MsU0FBUyxDQUFFMFcsWUFBRixDQUFkLEVBQWlDO0FBQ2hDLFdBQU9mLDJEQUFnQixDQUFDcFksT0FBeEI7QUFDQTs7QUFDRCxNQUFLdVosU0FBUyxDQUFFSixZQUFGLENBQWQsRUFBaUM7QUFDaEMsV0FBT2YsMkRBQWdCLENBQUNwQyxPQUF4QjtBQUNBOztBQUNELE1BQUtvRCxRQUFRLENBQUVELFlBQUYsQ0FBYixFQUFnQztBQUMvQixXQUFPZiwyREFBZ0IsQ0FBQ0UsTUFBeEI7QUFDQTs7QUFDRCxTQUFPLEVBQVA7QUFDQSxDQWxCTTtBQW9CUDs7Ozs7O0FBS08sSUFBTWtCLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBMkIsQ0FBRUwsWUFBRixFQUFvQjtBQUMzRCxNQUFJTSxZQUFZLEdBQUcsRUFBbkI7O0FBQ0EsVUFBU3ZXLE1BQU0sQ0FBRWlXLFlBQUYsQ0FBZjtBQUNDLFNBQUtmLDJEQUFnQixDQUFDalksUUFBdEI7QUFDQ3NaLGtCQUFZLEdBQUd0aEMsOERBQUUsQ0FBRSxVQUFGLEVBQWMsZ0JBQWQsQ0FBakI7QUFDQTs7QUFDRCxTQUFLaWdDLDJEQUFnQixDQUFDcFksT0FBdEI7QUFDQ3laLGtCQUFZLEdBQUd0aEMsOERBQUUsQ0FBRSxTQUFGLEVBQWEsZ0JBQWIsQ0FBakI7QUFDQTs7QUFDRCxTQUFLaWdDLDJEQUFnQixDQUFDcEMsT0FBdEI7QUFDQ3lELGtCQUFZLEdBQUd0aEMsOERBQUUsQ0FBRSxTQUFGLEVBQWEsZ0JBQWIsQ0FBakI7QUFDQTs7QUFDRCxTQUFLaWdDLDJEQUFnQixDQUFDRSxNQUF0QjtBQUNDbUIsa0JBQVksR0FBR3RoQyw4REFBRSxDQUFFLFNBQUYsRUFBYSxnQkFBYixDQUFqQjtBQUNBOztBQUNELFNBQUtpZ0MsMkRBQWdCLENBQUNDLFFBQXRCO0FBQ0NvQixrQkFBWSxHQUFHdGhDLDhEQUFFLENBQUUsVUFBRixFQUFjLGdCQUFkLENBQWpCO0FBQ0E7QUFmRjs7QUFpQkEsU0FBT3NoQyxZQUFQO0FBQ0EsQ0FwQk07QUFzQlA7Ozs7OztBQUtPLElBQU10Vyx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQTBCLENBQUVnVyxZQUFGLEVBQW9CO0FBQzFELDhDQUFzQ2pXLE1BQU0sQ0FBRWlXLFlBQUYsQ0FBNUM7QUFDQSxDQUZNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeklQOzs7QUFHQTtBQUtBO0FBQ0E7QUFFQTs7OztBQUdBO0FBRWU7QUFBQSxNQUFFTyxRQUFGLHVFQUFhLEVBQWI7QUFBQSxTQUFxQjc5QixxRkFBMEIsQ0FDN0RGLGtFQUFPLENBQUUsQ0FDUkMsaUVBRFEsRUFFUixVQUFFKzlCLGdCQUFGLEVBQXdCO0FBQUE7O0FBQ3ZCO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUEsaUNBa0JVO0FBQUEsNEJBTUosS0FBSzVqQyxLQU5EO0FBQUEsY0FFUGtCLEtBRk8sZUFFUEEsS0FGTztBQUFBLGNBR1A4RSxVQUhPLGVBR1BBLFVBSE87QUFBQSxjQUlQNE0sU0FKTyxlQUlQQSxTQUpPO0FBQUEsY0FLUGl4QixJQUxPLGVBS1BBLElBTE87QUFPUixjQUFNeGpDLEVBQUUsdUJBQWlCc2pDLFFBQWpCLHNCQUF1QzM5QixVQUF2QyxDQUFSO0FBQ0EsaUJBQ0Msb0JBQUMsaUVBQUQ7QUFDQyxpQkFBSyxFQUFHOUUsS0FEVDtBQUVDLGNBQUUsRUFBR2IsRUFGTjtBQUdDLHFCQUFTLEVBQUd1UyxTQUhiO0FBSUMsZ0JBQUksRUFBR2l4QjtBQUpSLGFBTUMsb0JBQUMsZ0JBQUQsNEVBQXVCLEtBQUs3akMsS0FBNUI7QUFBb0MsaUJBQUssRUFBRyxFQUE1QztBQUFpRCxjQUFFLEVBQUdLO0FBQXRELGFBTkQsQ0FERDtBQVVBO0FBcENGOztBQUFBO0FBQUEsTUFBcUJLLDREQUFyQixxR0FDb0I7QUFDbEJRLFdBQUssRUFBRVAsa0RBQVMsQ0FBQ0csTUFEQztBQUVsQmtGLGdCQUFVLEVBQUVyRixrREFBUyxDQUFDb0ksU0FBVixDQUFxQixDQUNoQ3BJLGtEQUFTLENBQUNxSSxNQURzQixFQUVoQ3JJLGtEQUFTLENBQUNHLE1BRnNCLENBQXJCLENBRk07QUFNbEI4UixlQUFTLEVBQUVqUyxrREFBUyxDQUFDRyxNQU5IO0FBT2xCK2lDLFVBQUksRUFBRWxqQyxrREFBUyxDQUFDRztBQVBFLEtBRHBCLHdHQVd1QjtBQUNyQkksV0FBSyxFQUFFMGlDLGdCQUFnQixDQUFDcGhDLFlBQWpCLElBQ05vaEMsZ0JBQWdCLENBQUNwaEMsWUFBakIsQ0FBOEJ0QixLQUR4QixHQUVOMGlDLGdCQUFnQixDQUFDcGhDLFlBQWpCLENBQThCdEIsS0FGeEIsR0FHTjtBQUpvQixLQVh2QjtBQXNDQSxHQXpDTyxDQUFGLENBRHNELEVBNEM3RCxpQkE1QzZELENBQS9DO0FBQUEsQ0FBZixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEJBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUVBOzs7Ozs7Ozs7Ozs7O0lBWU00aUMsbUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt1TEFlSSxVQUFFQyxVQUFGLEVBQWNDLGFBQWQsRUFBaUM7QUFDekMsYUFBT3g5Qix5REFBVSxDQUFFdzlCLGFBQUYsQ0FBVixHQUNOLG9CQUFDLDJEQUFELFFBQ0Msb0JBQUMsa0VBQUQ7QUFDQyxhQUFLLEVBQUc1aEMsK0RBQUUsQ0FBRSxRQUFGLEVBQVksZ0JBQVosQ0FEWDtBQUVDLGlCQUFTLEVBQUMsa0NBRlg7QUFHQyxhQUFLLEVBQUcyaEMsVUFIVDtBQUlDLGdCQUFRLEVBQUdDO0FBSlosUUFERCxDQURNLEdBU0gsSUFUSjtBQVVBLEs7O3dMQU9TLFVBQUVDLE9BQUYsRUFBV0MsVUFBWDtBQUFBLGFBQ1Qsb0JBQUMsb0VBQUQ7QUFDQyxhQUFLLEVBQUc5aEMsK0RBQUUsQ0FBRSxVQUFGLEVBQWMsZ0JBQWQsQ0FEWDtBQUVDLGlCQUFTLEVBQUMsMENBRlg7QUFHQyxhQUFLLEVBQUc2aEMsT0FIVDtBQUlDLGVBQU8sRUFBRyxDQUNUO0FBQUVyNkIsZUFBSyxFQUFFLENBQVQ7QUFBWTFJLGVBQUssRUFBRTtBQUFuQixTQURTLEVBRVQ7QUFBRTBJLGVBQUssRUFBRSxDQUFUO0FBQVkxSSxlQUFLLEVBQUU7QUFBbkIsU0FGUyxFQUdUO0FBQUUwSSxlQUFLLEVBQUUsRUFBVDtBQUFhMUksZUFBSyxFQUFFO0FBQXBCLFNBSFMsRUFJVDtBQUFFMEksZUFBSyxFQUFFLEVBQVQ7QUFBYTFJLGVBQUssRUFBRTtBQUFwQixTQUpTLEVBS1Q7QUFBRTBJLGVBQUssRUFBRSxFQUFUO0FBQWExSSxlQUFLLEVBQUU7QUFBcEIsU0FMUyxDQUpYO0FBV0MsZ0JBQVEsRUFBR2dqQztBQVhaLFFBRFM7QUFBQSxLOzt5TEFxQkMsVUFBRXZsQixJQUFGLEVBQVF3bEIsV0FBUjtBQUFBLGFBQ1Ysb0JBQUMsaUVBQUQ7QUFDQyxpQkFBUyxFQUFHeGxCLElBQUksS0FBSyxNQUFULEdBQWtCLGFBQWxCLEdBQWtDLEVBRC9DO0FBRUMsWUFBSSxFQUFDLGdCQUZOO0FBR0MsZUFBTyxFQUFHdmMsK0RBQUUsQ0FBRSxXQUFGLEVBQWUsZ0JBQWYsQ0FIYjtBQUlDLGVBQU8sRUFBRytoQztBQUpYLFFBRFU7QUFBQSxLOzt5TEFjQSxVQUFFeGxCLElBQUYsRUFBUXlsQixXQUFSO0FBQUEsYUFDVixvQkFBQyxpRUFBRDtBQUNDLGlCQUFTLEVBQUd6bEIsSUFBSSxLQUFLLE1BQVQsR0FBa0IsYUFBbEIsR0FBa0MsRUFEL0M7QUFFQyxZQUFJLEVBQUMsZUFGTjtBQUdDLGVBQU8sRUFBR3ZjLCtEQUFFLENBQUUsV0FBRixFQUFlLGdCQUFmLENBSGI7QUFJQyxlQUFPLEVBQUdnaUM7QUFKWCxRQURVO0FBQUEsSzs7Ozs7Ozs2QkFTRjtBQUFBLHdCQVNKLEtBQUtwa0MsS0FURDtBQUFBLDhDQUVQK2pDLFVBRk87QUFBQSxVQUVQQSxVQUZPLHNDQUVNLEVBRk47QUFBQSxVQUdQQyxhQUhPLGVBR1BBLGFBSE87QUFBQSxVQUlQQyxPQUpPLGVBSVBBLE9BSk87QUFBQSxVQUtQdGxCLElBTE8sZUFLUEEsSUFMTztBQUFBLFVBTVB1bEIsVUFOTyxlQU1QQSxVQU5PO0FBQUEsVUFPUEMsV0FQTyxlQU9QQSxXQVBPO0FBQUEsVUFRUEMsV0FSTyxlQVFQQSxXQVJPO0FBVVIsVUFBTUMsYUFBYSxHQUFHLEtBQUtya0MsS0FBTCxDQUFXcWtDLGFBQVgsR0FDckI7QUFBSyxpQkFBUyxFQUFDO0FBQWYsU0FDRyxLQUFLcmtDLEtBQUwsQ0FBV3FrQyxhQURkLENBRHFCLEdBSXJCLElBSkQ7QUFLQSxhQUNDO0FBQUssaUJBQVMsRUFBQztBQUFmLFNBQ0dBLGFBREgsRUFFQztBQUFLLGlCQUFTLEVBQUM7QUFBZixTQUNDO0FBQ0MsaUJBQVMsRUFBQztBQURYLFNBRUcsS0FBS0MsTUFBTCxDQUFhUCxVQUFiLEVBQXlCQyxhQUF6QixDQUZILENBREQsRUFLQztBQUNDLGlCQUFTLEVBQUM7QUFEWCxTQUVHLEtBQUtDLE9BQUwsQ0FBY0EsT0FBZCxFQUF1QkMsVUFBdkIsQ0FGSCxDQUxELEVBU0M7QUFDQyxpQkFBUyxFQUFDO0FBRFgsU0FFRyxLQUFLSyxRQUFMLENBQWU1bEIsSUFBZixFQUFxQndsQixXQUFyQixDQUZILEVBR0csS0FBS0ssUUFBTCxDQUFlN2xCLElBQWYsRUFBcUJ5bEIsV0FBckIsQ0FISCxDQVRELENBRkQsQ0FERDtBQW9CQTs7OztFQWhIZ0MxakMsNEQ7OzZFQUE1Qm9qQyxtQixlQUNjO0FBQ2xCTyxlQUFhLEVBQUUxakMsaURBQVMsQ0FBQ2dGLE1BRFA7QUFFbEJzK0IsU0FBTyxFQUFFdGpDLGlEQUFTLENBQUNxSSxNQUFWLENBQWlCekcsVUFGUjtBQUdsQm9jLE1BQUksRUFBRWhlLGlEQUFTLENBQUNHLE1BQVYsQ0FBaUJ5QixVQUhMO0FBSWxCMmhDLFlBQVUsRUFBRXZqQyxpREFBUyxDQUFDMkIsSUFBVixDQUFlQyxVQUpUO0FBS2xCNGhDLGFBQVcsRUFBRXhqQyxpREFBUyxDQUFDMkIsSUFBVixDQUFlQyxVQUxWO0FBTWxCNmhDLGFBQVcsRUFBRXpqQyxpREFBUyxDQUFDMkIsSUFBVixDQUFlQztBQU5WLEM7O0FBa0hMdWhDLGtGQUFmLEU7Ozs7Ozs7Ozs7Ozs7QUM3SUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQUdBO0FBRUE7Ozs7QUFHQTtBQUdBO0FBSU8sSUFBTVcsZ0NBQWdDLEdBQUcsU0FBbkNBLGdDQUFtQyxDQUMvQ2ptQixVQUQrQztBQUFBLE1BRS9Da21CLGdCQUYrQyx1RUFFNUIsRUFGNEI7QUFBQSxTQUczQ0MsNEVBQXVCLENBQzNCQywyREFBb0IsQ0FBRUYsZ0JBQUYsQ0FBcEIsQ0FBMENsbUIsVUFBMUMsQ0FEMkIsQ0FIb0I7QUFBQSxDQUF6QztBQU9BLElBQU1xbUIsd0NBQXdDLEdBQUcsU0FBM0NBLHdDQUEyQyxDQUN2RHJtQixVQUR1RDtBQUFBLE1BRXZEa21CLGdCQUZ1RCx1RUFFcEMsRUFGb0M7QUFBQSxTQUduREksOEVBQXlCLENBQUVILDRFQUF1QixDQUN0REMsMkRBQW9CLENBQUVGLGdCQUFGLENBQXBCLENBQTBDbG1CLFVBQTFDLENBRHNELENBQXpCLENBSDBCO0FBQUEsQ0FBakQ7Ozs7Ozs7Ozs7OztBQ3RCUDtBQUNBLGtCQUFrQix5dkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0RsQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBRUE7Ozs7Ozs7O0FBT2UxWSxxSkFBMEIsQ0FDeEMsVUFBRTBZLFVBQUYsRUFBa0I7QUFBQTs7QUFDakI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7O0FBQUEsaU1BQ2tCLFVBQUV1bEIsVUFBRixFQUFjNXlCLFFBQWQsRUFBNEI7QUFDNUMsZUFBTzR5QixVQUFVLEtBQUssRUFBZixHQUNONXlCLFFBQVEsQ0FBQzR6QixNQUFULENBQWlCLFVBQUVyekIsTUFBRixFQUFjO0FBQzlCLGNBQU1zekIsVUFBVSxHQUFHdHpCLE1BQU0sQ0FBQ3BRLElBQVAsR0FBY29RLE1BQU0sQ0FBQ3BRLElBQXJCLEdBQTRCLEVBQS9DO0FBQ0EsaUJBQU8wakMsVUFBVSxDQUFDbDVCLFdBQVgsR0FBeUJ3NEIsTUFBekIsQ0FDTlAsVUFBVSxDQUFDajRCLFdBQVgsRUFETSxNQUN5QixDQUFDLENBRGpDO0FBRUEsU0FKRCxDQURNLEdBTU5xRixRQU5EO0FBT0EsT0FURjs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSwrQkFXVTtBQUFBLFlBQ0ZBLFFBREUsR0FDVyxLQUFLblIsS0FEaEIsQ0FDRm1SLFFBREU7O0FBQUEsMEJBV0osS0FBS25SLEtBWEQ7QUFBQSxZQUdQK2pDLFVBSE8sZUFHUEEsVUFITztBQUFBLFlBSVBDLGFBSk8sZUFJUEEsYUFKTztBQUFBLFlBS1BDLE9BTE8sZUFLUEEsT0FMTztBQUFBLFlBTVB0bEIsSUFOTyxlQU1QQSxJQU5PO0FBQUEsWUFPUHVsQixVQVBPLGVBT1BBLFVBUE87QUFBQSxZQVFQQyxXQVJPLGVBUVBBLFdBUk87QUFBQSxZQVNQQyxXQVRPLGVBU1BBLFdBVE87QUFBQSxZQVVKNW1CLFVBVkk7O0FBWVJyTSxnQkFBUSxHQUFHM0ssMERBQVUsQ0FBRXc5QixhQUFGLENBQVYsR0FDVixLQUFLaUIsY0FBTCxDQUFxQmxCLFVBQXJCLEVBQWlDNXlCLFFBQWpDLENBRFUsR0FFVkEsUUFGRDtBQUdBLGVBQ0Msb0JBQUMsMkRBQUQsUUFDQyxvQkFBQyxnRUFBRDtBQUNDLG9CQUFVLEVBQUc0eUIsVUFEZDtBQUVDLHVCQUFhLEVBQUdDLGFBRmpCO0FBR0MsaUJBQU8sRUFBR0MsT0FIWDtBQUlDLGNBQUksRUFBR3RsQixJQUpSO0FBS0Msb0JBQVUsRUFBR3VsQixVQUxkO0FBTUMscUJBQVcsRUFBR0MsV0FOZjtBQU9DLHFCQUFXLEVBQUdDO0FBUGYsVUFERCxFQVVDLG9CQUFDLFVBQUQ7QUFDQyxrQkFBUSxFQUFHanpCLFFBRFo7QUFFQyx5QkFBZSxFQUFHOHlCLE9BRm5CO0FBR0MsY0FBSSxFQUFHdGxCLElBSFI7QUFJQyx1QkFBYSxFQUNadmMsK0RBQUUsQ0FDRCx5Q0FEQyxFQUVELGdCQUZDO0FBTEosV0FVTW9iLFVBVk4sRUFWRCxDQUREO0FBeUJBO0FBbkRGOztBQUFBO0FBQUEsSUFBcUI5Yyw0REFBckI7QUFxREEsQ0F2RHVDLEVBd0R4Qyx5QkF4RHdDLENBQXpDLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BCQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBUWVvRixvSkFBMEIsQ0FDeENGLGtFQUFPLENBQUUsQ0FDUjJTLGtFQUFVLENBQUUsVUFBRUMsTUFBRixFQUFVQyxRQUFWLEVBQXdCO0FBQUEsNkJBSy9CQSxRQUwrQixDQUVsQ3NyQixVQUZrQztBQUFBLE1BRWxDQSxVQUZrQyxxQ0FFckIsRUFGcUI7QUFBQSwwQkFLL0J0ckIsUUFMK0IsQ0FHbEN3ckIsT0FIa0M7QUFBQSxNQUdsQ0EsT0FIa0Msa0NBR3hCLENBSHdCO0FBQUEsdUJBSy9CeHJCLFFBTCtCLENBSWxDa0csSUFKa0M7QUFBQSxNQUlsQ0EsSUFKa0MsK0JBSTNCLE1BSjJCO0FBTW5DLE1BQU11bUIsS0FBSyxHQUFHMXNCLE1BQU0sQ0FBRSw0QkFBRixDQUFwQjtBQUNBLFNBQU87QUFDTnVyQixjQUFVLEVBQUVtQixLQUFLLENBQUNDLFNBQU4sQ0FDWCxhQURXLEVBRVgsWUFGVyxFQUdYcEIsVUFIVyxDQUROO0FBTU5FLFdBQU8sRUFBRXhrQixRQUFRLENBQ2hCeWxCLEtBQUssQ0FBQ0MsU0FBTixDQUNDLGFBREQsRUFFQyxTQUZELEVBR0NsQixPQUhELENBRGdCLEVBTWhCLEVBTmdCLENBTlg7QUFjTnRsQixRQUFJLEVBQUV1bUIsS0FBSyxDQUFDQyxTQUFOLENBQ0wsYUFESyxFQUVMLE1BRkssRUFHTHhtQixJQUhLO0FBZEEsR0FBUDtBQW9CQSxDQTNCUyxDQURGLEVBNkJSeW1CLG9FQUFZLENBQUUsVUFBRUMsUUFBRixFQUFnQjtBQUM3QixNQUFNSCxLQUFLLEdBQUdHLFFBQVEsQ0FBRSw0QkFBRixDQUF0QjtBQUNBLFNBQU87QUFDTnJCLGlCQUFhLEVBQUUsdUJBQUVELFVBQUY7QUFBQSxhQUFrQm1CLEtBQUssQ0FBQ0ksU0FBTixDQUNoQyxhQURnQyxFQUVoQyxZQUZnQyxFQUdoQ3ZCLFVBSGdDLENBQWxCO0FBQUEsS0FEVDtBQU1ORyxjQUFVLEVBQUUsb0JBQUVELE9BQUY7QUFBQSxhQUFlaUIsS0FBSyxDQUFDSSxTQUFOLENBQzFCLGFBRDBCLEVBRTFCLFNBRjBCLEVBRzFCN2xCLFFBQVEsQ0FBRXdrQixPQUFGLEVBQVcsRUFBWCxDQUhrQixDQUFmO0FBQUEsS0FOTjtBQVdORSxlQUFXLEVBQUU7QUFBQSxhQUFNZSxLQUFLLENBQUNJLFNBQU4sQ0FDbEIsYUFEa0IsRUFFbEIsTUFGa0IsRUFHbEIsTUFIa0IsQ0FBTjtBQUFBLEtBWFA7QUFnQk5sQixlQUFXLEVBQUU7QUFBQSxhQUFNYyxLQUFLLENBQUNJLFNBQU4sQ0FDbEIsYUFEa0IsRUFFbEIsTUFGa0IsRUFHbEIsTUFIa0IsQ0FBTjtBQUFBO0FBaEJQLEdBQVA7QUFzQkEsQ0F4QlcsQ0E3QkosRUFzRFIsVUFBRTFCLGdCQUFGLEVBQXdCO0FBQUE7O0FBQ3ZCO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUEsK0JBSVU7QUFDUixlQUFPLG9CQUFDLGdCQUFELEVBQXVCLEtBQUs1akMsS0FBNUIsQ0FBUDtBQUNBO0FBTkY7O0FBQUE7QUFBQSxJQUFxQlUsNERBQXJCLHFHQUNvQjtBQUNsQnlRLFlBQVEsRUFBRXhRLGlEQUFTLENBQUNzSSxPQUFWLENBQW1CdEksaURBQVMsQ0FBQ2dGLE1BQTdCLEVBQXNDcEQ7QUFEOUIsR0FEcEI7QUFRQSxDQS9ETyxDQUFGLENBRGlDLEVBa0V4QywyQkFsRXdDLENBQXpDLEU7Ozs7Ozs7Ozs7Ozs7QUNoQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1BBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0EsSUFBTWdqQyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQUVDLGlCQUFGLEVBQXlCO0FBQ2xEM2xDLGlEQUFPLENBQ04ybEMsaUJBQWlCLElBQ2pCQSxpQkFBaUIsQ0FBQ3g2QixjQUFsQixDQUFrQyxpQkFBbEMsQ0FGTSxFQUdOLG9FQUNBLHVDQUpNLENBQVA7O0FBTUEsTUFBS3c2QixpQkFBaUIsSUFDckJBLGlCQUFpQixDQUFDeDZCLGNBQWxCLENBQWtDLGlCQUFsQyxDQURELEVBQ3lEO0FBQ3hEbkwsbURBQU8sQ0FDTjRCLHVEQUFPLENBQUUrakMsaUJBQWlCLENBQUNDLGVBQXBCLENBREQsRUFFTixxRUFDQSx1REFEQSxHQUVBLDJCQUpNLENBQVA7QUFNQTs7QUFDRDVsQyxpREFBTyxDQUNOMmxDLGlCQUFpQixJQUFJQSxpQkFBaUIsQ0FBQ3g2QixjQUFsQixDQUFrQyxPQUFsQyxDQURmLEVBRU4sbUVBQ0EsNkJBSE0sQ0FBUDtBQUtBLENBckJEO0FBdUJBOzs7Ozs7Ozs7O0FBUUEsSUFBTTA2QixTQUFTLEdBQUcsU0FBWkEsU0FBWTtBQUFBLE1BQUVDLFdBQUYsdUVBQWdCLEVBQWhCO0FBQUEsU0FBd0IsVUFBRS9CLGdCQUFGLEVBQXdCO0FBQUEsUUFDM0RnQyxpQkFEMkQ7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7O0FBQUEsMExBRXhEO0FBQ1BILHlCQUFlLEVBQUU7QUFEVixTQUZ3RDs7QUFBQSxpTUFZakQsVUFBRXpsQyxLQUFGLEVBQWE7QUFDM0IsY0FBSXdsQyxpQkFBSjtBQUFBLGNBQ0NLLFNBQVMsR0FBRyxFQURiO0FBQUEsY0FFQ0osZUFBZSxHQUFHLEVBRm5COztBQUdBLGNBQUtqL0IsMERBQVUsQ0FBRW0vQixXQUFGLENBQWYsRUFBaUM7QUFDaENILDZCQUFpQixHQUFHRyxXQUFXLENBQUUzbEMsS0FBRixFQUFTb3ZCLG1FQUFULENBQS9CO0FBQ0FtVyw2QkFBaUIsQ0FBRUMsaUJBQUYsQ0FBakI7O0FBQ0EsZ0JBQUtBLGlCQUFpQixJQUFJQSxpQkFBaUIsQ0FBQ3hsQyxLQUE1QyxFQUFvRDtBQUNuRDZsQyx1QkFBUyxHQUFHLCtFQUFLTCxpQkFBaUIsQ0FBQ3hsQyxLQUExQixDQUFUO0FBQ0E7O0FBQ0R5bEMsMkJBQWUsR0FBR0QsaUJBQWlCLENBQUNDLGVBQWxCLElBQ2pCQSxlQUREO0FBRUEsV0FSRCxNQVFPLElBQUtoa0MsdURBQU8sQ0FBRWtrQyxXQUFGLENBQVosRUFBOEI7QUFDcENBLHVCQUFXLENBQUNyOEIsT0FBWixDQUFxQixVQUFFdzhCLFFBQUYsRUFBZ0I7QUFDcEMsa0JBQUs5bEMsS0FBSyxDQUFFOGxDLFFBQUYsQ0FBVixFQUF5QjtBQUN4QkQseUJBQVMsQ0FBRUMsUUFBRixDQUFULEdBQ0MsSUFBSTFXLG1FQUFKLENBQ0NwdkIsS0FBSyxDQUFFOGxDLFFBQUYsQ0FETixFQUVDcEssMEVBRkQsQ0FERDtBQUtBK0osK0JBQWUsQ0FBQ2poQyxJQUFoQixDQUNDcWhDLFNBQVMsQ0FBRUMsUUFBRixDQUFULENBQXNCbEssUUFBdEIsRUFERDtBQUdBO0FBQ0QsYUFYRDtBQVlBLFdBYk0sTUFhQTtBQUNOLzdCLDJEQUFPLENBQ04sS0FETSxFQUVOLG9FQUNBLHVCQUhNLENBQVA7QUFLQTs7QUFDRGdtQyxtQkFBUyxDQUFDSixlQUFWLEdBQTRCQSxlQUE1QjtBQUNBLGlCQUFPSSxTQUFQO0FBQ0EsU0E5QytEOztBQUFBLHlOQTJEekIsVUFDdEM5M0IsU0FEc0MsRUFFdEN6QixTQUZzQyxFQUd0Q3U1QixTQUhzQyxFQUlsQztBQUNKLGlCQUFPLENBQUVFLG1FQUFvQixDQUM1QkYsU0FBUyxDQUFDSixlQURrQixFQUU1Qm41QixTQUFTLENBQUNtNUIsZUFGa0IsQ0FBdEIsSUFJTkksU0FBUyxDQUFDSixlQUFWLENBQTJCLENBQTNCLE1BQ0FuNUIsU0FBUyxDQUFDbTVCLGVBQVYsQ0FBMkIsQ0FBM0IsQ0FMRDtBQU1BLFNBdEUrRDs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSw0Q0F3RTVDO0FBQ25CLGVBQUtsaUMsUUFBTCxDQUFlLEtBQUt5aUMsWUFBTCxDQUFtQixLQUFLaG1DLEtBQXhCLENBQWY7QUFDQTtBQTFFK0Q7QUFBQTtBQUFBLDJDQTRFNUMrTixTQTVFNEMsRUE0RWpDekIsU0E1RWlDLEVBNEVyQjtBQUMxQyxjQUFNdTVCLFNBQVMsR0FBRyxLQUFLRyxZQUFMLENBQW1CLEtBQUtobUMsS0FBeEIsQ0FBbEI7O0FBQ0EsY0FBSyxLQUFLaW1DLG9DQUFMLENBQ0psNEIsU0FESSxFQUVKekIsU0FGSSxFQUdKdTVCLFNBSEksQ0FBTCxFQUlJO0FBQ0gsaUJBQUt0aUMsUUFBTCxDQUFlc2lDLFNBQWY7QUFDQTtBQUNEO0FBckYrRDtBQUFBO0FBQUEsaUNBdUZ2RDtBQUNSLGlCQUFPLG9CQUFDLGdCQUFELDRFQUF1QixLQUFLN2xDLEtBQTVCLEVBQXlDLEtBQUttRCxLQUE5QyxFQUFQO0FBQ0E7QUF6RitEOztBQUFBO0FBQUEsTUFDakN6Qyw0REFEaUM7O0FBNEZqRSxXQUFPa2xDLGlCQUFQO0FBQ0EsR0E3RmlCO0FBQUEsQ0FBbEI7O0FBK0ZlRix3RUFBZixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5SUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFFQTs7Ozs7Ozs7OztBQVNlO0FBQUEsTUFBRWhCLGdCQUFGLHVFQUFxQixFQUFyQjtBQUFBLFNBQTZCNStCLHNGQUEwQixDQUNyRUYsbUVBQU8sQ0FBRSxDQUNSQyxrRUFEUSxFQUVSLFVBQUUyWSxVQUFGLEVBQWtCO0FBQUE7O0FBQ2pCO0FBQUE7QUFBQTtBQUFBOztBQVdDLGdDQUFheGUsS0FBYixFQUFxQjtBQUFBOztBQUFBOztBQUNwQix3TkFBT0EsS0FBUDs7QUFEb0IsdU1Ba0JBLFVBQUVrbUMsVUFBRixFQUFrQjtBQUN0QztBQUNBLGdCQUFLM2lDLFFBQUwsQ0FBZTtBQUFFMmlDLHNCQUFVLEVBQVZBO0FBQUYsV0FBZjtBQUNBLFNBckJvQjs7QUFFcEIsY0FBSy9pQyxLQUFMLEdBQWE7QUFDWitpQyxvQkFBVSxFQUFFO0FBREEsU0FBYjtBQUZvQjtBQUtwQjs7QUFoQkY7QUFBQTtBQUFBLDhDQWtCd0J4dUIsU0FsQnhCLEVBa0JtQ211QixTQWxCbkMsRUFrQitDO0FBQzdDLGlCQUFPLEVBQ05NLHVEQUFPLENBQUV6dUIsU0FBRixFQUFhLEtBQUsxWCxLQUFsQixDQUFQLElBQ0FtbUMsdURBQU8sQ0FBRU4sU0FBUyxDQUFDSyxVQUFaLEVBQXdCLEtBQUsvaUMsS0FBTCxDQUFXK2lDLFVBQW5DLENBRkQsQ0FBUDtBQUlBO0FBRUQ7Ozs7O0FBekJEO0FBQUE7QUFBQSxpQ0FrQ1U7QUFBQSw0QkFPSixLQUFLbG1DLEtBUEQ7QUFBQSxjQUVQbVIsUUFGTyxlQUVQQSxRQUZPO0FBQUEsY0FHUG5MLFVBSE8sZUFHUEEsVUFITztBQUFBLGtEQUlQb2dDLGVBSk87QUFBQSxjQUlQQSxlQUpPLHNDQUlXLEVBSlg7QUFBQSxpREFLUDdnQyxRQUxPO0FBQUEsY0FLUEEsUUFMTyxxQ0FLSSxLQUxKO0FBQUEsY0FNSmlZLFVBTkk7O0FBUVJrbkIsMEJBQWdCLENBQUMyQixNQUFqQixHQUEwQjNCLGdCQUFnQixDQUFDMkIsTUFBakIsSUFDekIzQixnQkFBZ0IsQ0FBQzJCLE1BQWpCLENBQXdCQyxLQURDLElBRXpCNUIsZ0JBQWdCLENBQUMyQixNQUFqQixDQUF3QnRLLElBRkMsSUFHekIySSxnQkFBZ0IsQ0FBQzJCLE1BQWpCLENBQXdCRSxRQUhDLElBSXpCN0IsZ0JBQWdCLENBQUMyQixNQUFqQixDQUF3QkcsSUFKQyxHQUt6QjlCLGdCQUFnQixDQUFDMkIsTUFMUSxHQU16QjtBQUNDQyxpQkFBSyxFQUFFbGtDLCtEQUFFLENBQUUsT0FBRixFQUFXLGdCQUFYLENBRFY7QUFFQzI1QixnQkFBSSxFQUFFMzVCLCtEQUFFLENBQUUsTUFBRixFQUFVLGdCQUFWLENBRlQ7QUFHQ21rQyxvQkFBUSxFQUFFbmtDLCtEQUFFLENBQUUsTUFBRixFQUFVLGdCQUFWLENBSGI7QUFJQ29rQyxnQkFBSSxFQUFFcGtDLCtEQUFFLENBQUUsTUFBRixFQUFVLGdCQUFWO0FBSlQsV0FORDtBQVlBLGNBQU13YyxhQUFhLEdBQUc4bEIsZ0JBQWdCLENBQUM5bEIsYUFBakIsR0FDckI4bEIsZ0JBQWdCLENBQUM5bEIsYUFESSxHQUVyQnhjLCtEQUFFLENBQ0QseUNBREMsRUFFRCxnQkFGQyxDQUZIO0FBTUEsY0FBTXFrQyxZQUFZLEdBQUcvQixnQkFBZ0IsQ0FBQytCLFlBQWpCLEdBQ3BCL0IsZ0JBQWdCLENBQUMrQixZQURHLEdBRXBCLEtBRkQ7QUFHQSxjQUFNQyxVQUFVLEdBQ2Y7QUFBSyxjQUFFLGlDQUE0QjFnQyxVQUE1QixDQUFQO0FBQ0MscUJBQVMsRUFBQztBQURYLGFBR0Msb0JBQUMsMkRBQUQ7QUFDQyxpQkFBSyxFQUFHbUwsUUFEVDtBQUVDLHdCQUFZLEVBQUcsS0FBS3cxQixrQkFGckI7QUFHQyxvQkFBUSxFQUFHbG5CLFFBQVEsQ0FBRTJtQixlQUFGLEVBQW1CLEVBQW5CO0FBSHBCLGFBSU0xQixnQkFKTixFQUhELENBREQ7QUFZQSxjQUFNa0MsYUFBYSxHQUFHcmhDLFFBQVEsTUFBTyxTQUFTLEtBQWhCLENBQVIsR0FDckJtaEMsVUFEcUIsR0FFckIsSUFGRDtBQUdBLGNBQU1HLGdCQUFnQixHQUFHdGhDLFFBQVEsTUFBTyxZQUFZLEtBQW5CLENBQVIsR0FDeEJtaEMsVUFEd0IsR0FFeEIsSUFGRDtBQUdBLGlCQUFPRCxZQUFZLEdBQ2xCLG9CQUFDLFVBQUQ7QUFDQyxzQkFBVSxFQUFHQyxVQURkO0FBRUMsb0JBQVEsRUFBRyxLQUFLdmpDLEtBQUwsQ0FBVytpQyxVQUZ2QjtBQUdDLHlCQUFhLEVBQUd0bkI7QUFIakIsYUFJTXBCLFVBSk4sRUFEa0IsR0FRbEIsb0JBQUMsMkRBQUQsUUFDR29wQixhQURILEVBRUMsb0JBQUMsVUFBRDtBQUNDLG9CQUFRLEVBQUcsS0FBS3pqQyxLQUFMLENBQVcraUMsVUFEdkI7QUFFQyx5QkFBYSxFQUFHdG5CO0FBRmpCLGFBR01wQixVQUhOLEVBRkQsRUFPR3FwQixnQkFQSCxDQVJEO0FBa0JBO0FBbkdGOztBQUFBO0FBQUEsTUFBc0NubUMsNERBQXRDLHFHQUNvQjtBQUNsQnlRLGNBQVEsRUFBRXhRLGtEQUFTLENBQUNFLEtBQVYsQ0FBZ0IwQixVQURSO0FBRWxCeUQsZ0JBQVUsRUFBRXJGLGtEQUFTLENBQUNxSSxNQUFWLENBQWlCekcsVUFGWDtBQUdsQjZqQyxxQkFBZSxFQUFFemxDLGtEQUFTLENBQUNvSSxTQUFWLENBQXFCLENBQ3JDcEksa0RBQVMsQ0FBQ0csTUFEMkIsRUFFckNILGtEQUFTLENBQUNxSSxNQUYyQixDQUFyQixDQUhDO0FBT2xCekQsY0FBUSxFQUFFNUUsa0RBQVMsQ0FBQ0c7QUFQRixLQURwQjtBQXFHQSxHQXhHTyxDQUFGLENBRDhELEVBMkdyRSxzQkEzR3FFLENBQXZEO0FBQUEsQ0FBZixFOzs7Ozs7Ozs7Ozs7QUM1QkE7QUFDQSxrQkFBa0IsaUg7Ozs7Ozs7Ozs7OztBQ0RsQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLElBQU1nbUMsaUJBQWlCLEdBQUdoaEMscUZBQTBCLENBQ25ERixrRUFBTyxDQUFFLENBQ1IyUyxrRUFBVSxDQUNULFVBQUVDLE1BQUYsUUFBNEM7QUFBQSxNQUFoQytjLFlBQWdDLFFBQWhDQSxZQUFnQztBQUFBLE1BQWxCd1IsVUFBa0IsUUFBbEJBLFVBQWtCOztBQUMzQyxNQUFLLENBQUVqbkMsc0ZBQW9CLENBQzFCeTFCLFlBRDBCLEVBRTFCLGNBRjBCLENBQTNCLEVBR0k7QUFDSCxXQUFPLEVBQVA7QUFDQTs7QUFOMEMsZ0JBT2QvYyxNQUFNLENBQUUsb0JBQUYsQ0FQUTtBQUFBLE1BT25Dd3VCLGdCQVBtQyxXQU9uQ0EsZ0JBUG1DOztBQUFBLGlCQVFUeHVCLE1BQU0sQ0FBRSxXQUFGLENBUkc7QUFBQSxNQVFuQ3l1QixxQkFSbUMsWUFRbkNBLHFCQVJtQzs7QUFTM0MsTUFBTUMsYUFBYSxHQUFHRixnQkFBZ0IsQ0FDckN6UixZQUFZLENBQUNsMUIsRUFEd0IsRUFFckMwbUMsVUFGcUMsQ0FBdEM7QUFJQSxTQUFPO0FBQ05JLGlCQUFhLEVBQUVELGFBQWEsSUFBSSxJQUQxQjtBQUVORSxzQkFBa0IsRUFBRUgscUJBQXFCLENBQ3hDLG9CQUR3QyxFQUV4QyxrQkFGd0MsRUFHeEMsQ0FBRTFSLFlBQVksQ0FBQ2wxQixFQUFmLEVBQW1CMG1DLFVBQW5CLENBSHdDO0FBRm5DLEdBQVA7QUFRQSxDQXRCUSxDQURGLEVBeUJSM0Isb0VBQVksQ0FDWCxVQUFFQyxRQUFGLFNBQThDO0FBQUEsTUFBaEM5UCxZQUFnQyxTQUFoQ0EsWUFBZ0M7QUFBQSxNQUFsQndSLFVBQWtCLFNBQWxCQSxVQUFrQjs7QUFBQSxrQkFDbkIxQixRQUFRLENBQUUsb0JBQUYsQ0FEVztBQUFBLE1BQ3JDZ0MsYUFEcUMsYUFDckNBLGFBRHFDOztBQUU3QyxTQUFPO0FBQ050bEMsV0FETSxxQkFDSTtBQUNULFVBQ0NqQyxzRkFBb0IsQ0FDbkJ5MUIsWUFEbUIsRUFFbkIsY0FGbUIsQ0FEckIsRUFLRTtBQUNEOFIscUJBQWEsQ0FBRTlSLFlBQVksQ0FBQ2wxQixFQUFmLEVBQW1CMG1DLFVBQW5CLENBQWI7QUFDQTtBQUNEO0FBVkssR0FBUDtBQVlBLENBZlUsQ0F6QkosQ0FBRixDQUQ0QyxFQTRDbkQsbUJBNUNtRCxDQUFwRDtBQStDZUQsZ0ZBQWYsRTs7Ozs7Ozs7Ozs7QUMxRUE7QUFDQTtBQUNBLGlEQUFpRCxnQkFBZ0I7QUFDakU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0M7Ozs7Ozs7Ozs7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3Qzs7Ozs7Ozs7Ozs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxtQzs7Ozs7Ozs7Ozs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQzs7Ozs7Ozs7Ozs7QUNOQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Qjs7Ozs7Ozs7Ozs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQzs7Ozs7Ozs7Ozs7O0FDZkE7QUFBQTtBQUFlO0FBQ2Y7QUFDQSxpREFBaUQsZ0JBQWdCO0FBQ2pFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7OztBQ1JBO0FBQUE7QUFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEM7Ozs7Ozs7Ozs7OztBQ05BO0FBQUE7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7OztBQ0pBO0FBQUE7QUFBQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxDOzs7Ozs7Ozs7Ozs7QUNkQTtBQUFBO0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxDOzs7Ozs7Ozs7Ozs7QUNiQTtBQUFBO0FBQWU7QUFDZjtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDOzs7Ozs7Ozs7Ozs7QUNoQkE7QUFBQTtBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDOzs7Ozs7Ozs7Ozs7QUNMQTtBQUFBO0FBQUE7QUFBOEM7QUFDL0I7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGtCQUFrQiwrREFBYztBQUNoQyxDOzs7Ozs7Ozs7Ozs7QUNkQTtBQUFBO0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxDOzs7Ozs7Ozs7Ozs7QUNKQTtBQUFBO0FBQWU7QUFDZjtBQUNBLEM7Ozs7Ozs7Ozs7OztBQ0ZBO0FBQUE7QUFBZTtBQUNmO0FBQ0EsQzs7Ozs7Ozs7Ozs7O0FDRkE7QUFBQTtBQUFBO0FBQThDO0FBQy9CO0FBQ2YsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBLE1BQU0sK0RBQWM7QUFDcEIsS0FBSztBQUNMOztBQUVBO0FBQ0EsQzs7Ozs7Ozs7Ozs7O0FDbEJBO0FBQUE7QUFBQTtBQUEwRTtBQUMzRDtBQUNmO0FBQ0EsZUFBZSw2RUFBNEI7QUFDM0M7O0FBRUE7QUFDQTs7QUFFQSxlQUFlLDZCQUE2QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDOzs7Ozs7Ozs7Ozs7QUNsQkE7QUFBQTtBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSx1QkFBdUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDOzs7Ozs7Ozs7Ozs7QUNiQTtBQUFBO0FBQUE7QUFBQTtBQUErQztBQUNhO0FBQzdDO0FBQ2YsZUFBZSxtRUFBTztBQUN0QjtBQUNBOztBQUVBLFNBQVMsc0VBQXFCO0FBQzlCLEM7Ozs7Ozs7Ozs7OztBQ1JBO0FBQUE7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQzs7Ozs7Ozs7Ozs7O0FDUEE7QUFBQTtBQUFlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEM7Ozs7Ozs7Ozs7OztBQ1ZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBb0Q7QUFDSjtBQUNJO0FBQ3JDO0FBQ2YsU0FBUyxrRUFBaUIsU0FBUyxnRUFBZSxTQUFTLGtFQUFpQjtBQUM1RSxDOzs7Ozs7Ozs7Ozs7QUNMQTtBQUFBO0FBQUEsd0JBQXdCLDJFQUEyRSxvQ0FBb0MsbUJBQW1CLEdBQUcsRUFBRSxPQUFPLG9DQUFvQyw4SEFBOEgsR0FBRyxFQUFFLHNCQUFzQjs7QUFFcFY7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEM7Ozs7Ozs7Ozs7O0FDZEE7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwwQjs7Ozs7Ozs7Ozs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDOzs7Ozs7Ozs7OztBQ1BBLHFCQUFxQixtQkFBTyxDQUFDLGlGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsMkI7Ozs7Ozs7Ozs7O0FDakJBO0FBQ0E7QUFDQTs7QUFFQSxrQzs7Ozs7Ozs7Ozs7QUNKQTtBQUNBO0FBQ0E7O0FBRUEsb0M7Ozs7Ozs7Ozs7O0FDSkEscUJBQXFCLG1CQUFPLENBQUMsaUZBQWtCOztBQUUvQztBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBLCtCOzs7Ozs7Ozs7OztBQ3JCQSxtQ0FBbUMsbUJBQU8sQ0FBQyw2R0FBZ0M7O0FBRTNFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZUFBZSw2QkFBNkI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMEM7Ozs7Ozs7Ozs7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSx1QkFBdUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwrQzs7Ozs7Ozs7Ozs7QUNmQSxjQUFjLG1CQUFPLENBQUMsMEVBQW1COztBQUV6Qyw0QkFBNEIsbUJBQU8sQ0FBQywrRkFBeUI7O0FBRTdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNEM7Ozs7Ozs7Ozs7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlDOzs7Ozs7Ozs7OztBQ1RBLHdCQUF3QixtQkFBTyxDQUFDLHVGQUFxQjs7QUFFckQsc0JBQXNCLG1CQUFPLENBQUMsbUZBQW1COztBQUVqRCx3QkFBd0IsbUJBQU8sQ0FBQyx1RkFBcUI7O0FBRXJEO0FBQ0E7QUFDQTs7QUFFQSxvQzs7Ozs7Ozs7Ozs7QUNWQSx3QkFBd0IsMkVBQTJFLG9DQUFvQyxtQkFBbUIsR0FBRyxFQUFFLE9BQU8sb0NBQW9DLDhIQUE4SCxHQUFHLEVBQUUsc0JBQXNCOztBQUVuVztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEseUI7Ozs7Ozs7Ozs7OztBQ2hCQTtBQUFBO0FBQUE7QUFBQTtBQUE0QztBQUNQO0FBQ047O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHVEQUFNOztBQUV6QixNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9COztBQUVwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDs7QUFFNUQ7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFVBQVUsS0FBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxlQUFlLHlEQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRWUsMEVBQVcsRUFBQzs7Ozs7Ozs7Ozs7OztBQ2pOM0I7QUFBQTtBQUNBO0FBQ0EseUtBQXlLLE9BQU87QUFDaEw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxPQUFPO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QixrQ0FBa0M7QUFDMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsVUFBVTtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLFVBQVU7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixvQkFBb0I7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLGFBQWE7QUFDcEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUNBQXFDOztBQUVyQztB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7Ozs7Ozs7Ozs7OztBQ3RmRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBLFNBQVMsVUFBVSxLQUFxQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixzQkFBc0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLElBQXFDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLDJCQUEyQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sS0FBcUMsNEZBQTRGLFNBQU07QUFDN0k7QUFDQTs7QUFFQSxtQkFBbUIsZ0NBQWdDO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixnQ0FBZ0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLHVGQUFhO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLE1BQXFDLEdBQUcsU0FHbEQ7QUFDRDtBQUNBLDBCQUEwQixhQUFhLFNBQVMsOEJBQThCLFdBQVcsVUFBVSxrQkFBa0IsZ0JBQWdCLFVBQVUsbUJBQW1CO0FBQ2xLLG1EQUFtRCxjQUFjO0FBQ2pFOztBQUVBO0FBQ0EsU0FBUywwREFBRyxTQUFTLGtGQUFRO0FBQzdCO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsbUZBQVM7O0FBRVg7QUFDQSxJQUFJLHlGQUFlOztBQUVuQixXQUFXLG9HQUEwQixPQUFPLHlGQUFlO0FBQzNEOztBQUVBLEVBQUUsc0ZBQVk7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGtHQUF3Qjs7QUFFMUMsYUFBYSwwREFBRyxVQUFVLGtGQUFRO0FBQ2xDO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxRQUFRLDZEQUFJO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLEVBQUUsTUFBcUMsR0FBRyxTQUFFLCtDQUErQyxjQUFjO0FBQ2xILE9BQU87QUFDUDtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDLENBQUMsZ0RBQVM7O0FBRVg7QUFDQTtBQUNBO0FBQ0EsRUFBRSxtRkFBUzs7QUFFWDtBQUNBLElBQUkseUZBQWU7O0FBRW5CLFdBQVcsb0dBQTBCLE9BQU8seUZBQWU7QUFDM0Q7O0FBRUEsRUFBRSxzRkFBWTtBQUNkO0FBQ0E7QUFDQSwwQkFBMEIsOERBQVc7QUFDckM7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQyxDQUFDLGdEQUFTOztBQUVYO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRSxtRkFBUzs7QUFFWDtBQUNBOztBQUVBOztBQUVBLElBQUkseUZBQWU7O0FBRW5CLHVFQUF1RSxhQUFhO0FBQ3BGO0FBQ0E7O0FBRUEsWUFBWSxvR0FBMEIsMkJBQTJCLHlGQUFlOztBQUVoRixJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCLDhCQUE4Qjs7QUFFL0YsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBLEVBQUUsc0ZBQVk7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQSxrQ0FBa0MsbUJBQW1CO0FBQ3JELHFGQUFxRjs7QUFFckY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDOztBQUUvQyw2REFBNkQ7O0FBRTdEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTzs7O0FBR1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQyxDQUFDLGdEQUFTOztBQUVYLDBGQUFlO0FBQ2Y7QUFDQSxDQUFDOztBQUVELGFBQWEsTUFBcUMsR0FBRyxTQUdwRDtBQUNEO0FBQ0EsMEJBQTBCLE9BQU8sU0FBUyxRQUFRLE1BQU07QUFDeEQsbURBQW1ELGNBQWM7QUFDakU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1GQUFTOztBQUVYO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSSx5RkFBZTs7QUFFbkIsdUVBQXVFLGFBQWE7QUFDcEY7QUFDQTs7QUFFQSxZQUFZLG9HQUEwQiwyQkFBMkIseUZBQWU7O0FBRWhGLElBQUksMEZBQWUsQ0FBQyxnR0FBc0IsQ0FBQyxnR0FBc0I7QUFDakU7QUFDQSxLQUFLOztBQUVMLElBQUksMEZBQWUsQ0FBQyxnR0FBc0IsQ0FBQyxnR0FBc0I7QUFDakU7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMLElBQUksMEZBQWUsQ0FBQyxnR0FBc0IsQ0FBQyxnR0FBc0I7QUFDakU7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBLEVBQUUsc0ZBQVk7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLDBEQUFHLGNBQWMsMERBQUc7QUFDakM7QUFDQTtBQUNBLE9BQU8sR0FBRywwREFBRztBQUNiO0FBQ0EsT0FBTyxpQ0FBaUMsMERBQUc7QUFDM0M7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQyxDQUFDLG9EQUFhOztBQUVmO0FBQ0E7QUFDQTtBQUNBLEVBQUUsbUZBQVM7O0FBRVg7QUFDQTs7QUFFQTs7QUFFQSxJQUFJLHlGQUFlOztBQUVuQix1RUFBdUUsYUFBYTtBQUNwRjtBQUNBOztBQUVBLFlBQVksb0dBQTBCLDJCQUEyQix5RkFBZTs7QUFFaEYsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QixPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFOztBQUVBO0FBQ0EsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBLEVBQUUsc0ZBQVk7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDs7QUFFckQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7O0FBRXJEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLGFBQWEsNkNBQUs7QUFDbEI7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQyxDQUFDLGdEQUFTOztBQUVYO0FBQ0E7QUFDQTtBQUNBLEVBQUUsbUZBQVM7O0FBRVg7QUFDQSxJQUFJLHlGQUFlOztBQUVuQixXQUFXLG9HQUEwQixPQUFPLHlGQUFlO0FBQzNEOztBQUVBLEVBQUUsc0ZBQVk7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixrR0FBd0I7O0FBRTFDLHlCQUF5Qiw2Q0FBSztBQUM5QjtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDLENBQUMsZ0RBQVM7O0FBRVgsMEZBQWU7QUFDZjtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLGlFQUFpQjtBQUNuQyxhQUFhLGlFQUFZO0FBQ3pCLFdBQVcsaUVBQUc7QUFDZCxxQkFBcUIsaUVBQW9CO0FBQ3pDLFNBQVMsaUVBQVE7QUFDakIsZ0JBQWdCLGlFQUFlO0FBQy9CLHVCQUF1QixpRUFBc0I7QUFDN0Msc0JBQXNCLGlFQUFxQjtBQUMzQyxTQUFTLGlFQUFRO0FBQ2pCLG9CQUFvQixpRUFBbUI7QUFDdkMsa0JBQWtCLGlFQUFpQjtBQUNuQyxRQUFRLGlFQUFPO0FBQ2YsWUFBWSxpRUFBVztBQUN2QixjQUFjLGlFQUFhO0FBQzNCLGNBQWMsaUVBQWE7QUFDM0IsbUJBQW1CLGlFQUFrQjtBQUNyQyxvQkFBb0IsaUVBQW1CO0FBQ3ZDLG9CQUFvQixpRUFBbUI7QUFDdkMsVUFBVSxpRUFBUztBQUNuQixlQUFlLGlFQUFjO0FBQzdCLGVBQWUsaUVBQUs7QUFDcEIsa0JBQWtCLGlFQUFpQjtBQUNuQyxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGVBQWUsdUZBQWEsR0FBRyxVQUFVOzs7QUFHekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCLGlCQUFpQjs7QUFFakIsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQkFBcUIseUVBQWM7QUFDbkMsc0JBQXNCLHlFQUFjO0FBQ3BDO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIseUVBQWM7QUFDM0M7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1GQUFTOztBQUVYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLHlGQUFlOztBQUVuQixZQUFZLG9HQUEwQixPQUFPLHlGQUFlOztBQUU1RCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRSx5QkFBeUIseUVBQWlCO0FBQzFDO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjs7QUFFakUsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsdUZBQWEsR0FBRztBQUN6QztBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMLElBQUksMEZBQWUsQ0FBQyxnR0FBc0IsQ0FBQyxnR0FBc0I7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0EsT0FBTzs7O0FBR1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxxQ0FBcUMsNEZBQWtCOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLElBQUksMEZBQWUsQ0FBQyxnR0FBc0IsQ0FBQyxnR0FBc0I7QUFDakU7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMLElBQUksMEZBQWUsQ0FBQyxnR0FBc0IsQ0FBQyxnR0FBc0I7QUFDakU7QUFDQTs7QUFFQTtBQUNBLHdEQUF3RCx1RkFBYSxHQUFHO0FBQ3hFO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLOztBQUVMLElBQUksMEZBQWUsQ0FBQyxnR0FBc0IsQ0FBQyxnR0FBc0I7QUFDakU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMLElBQUksMEZBQWUsQ0FBQyxnR0FBc0IsQ0FBQyxnR0FBc0I7QUFDakU7QUFDQSxLQUFLOztBQUVMLElBQUksMEZBQWUsQ0FBQyxnR0FBc0IsQ0FBQyxnR0FBc0I7QUFDakU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0EsbURBQW1ELHlFQUFpQjtBQUNwRTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0EsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0EsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRSx1Q0FBdUM7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTs7QUFFQTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTs7QUFFQTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTs7QUFFQTtBQUNBLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMLElBQUksMEZBQWUsQ0FBQyxnR0FBc0IsQ0FBQyxnR0FBc0I7QUFDakU7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUwsSUFBSSwwRkFBZSxDQUFDLGdHQUFzQixDQUFDLGdHQUFzQjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxJQUFJLDBGQUFlLENBQUMsZ0dBQXNCLENBQUMsZ0dBQXNCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDRCQUE0Qiw0REFBVSx3QkFBd0IsaUVBQWEsT0FBTyxnR0FBc0IsQ0FBQyxnR0FBc0I7O0FBRS9IOztBQUVBOztBQUVBLHVCQUF1Qix5RUFBVTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRSxzRkFBWTtBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQzs7QUFFL0MsaURBQWlEOztBQUVqRDtBQUNBLDBCQUEwQix5RUFBVTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQSxRQUFRLHlFQUFjO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EOztBQUVuRDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qjs7QUFFeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7O0FBR0EsYUFBYSx1RkFBYSxHQUFHO0FBQzdCO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLGlFQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLGlGQUFPO0FBQ2I7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDOztBQUV2Qzs7QUFFQSw0QkFBNEIsK0JBQStCO0FBQzNEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSwwQ0FBRztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFZ1I7Ozs7Ozs7Ozs7Ozs7QUN2TWhS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YSxtREFBbUQsRUFBRSxJOzs7Ozs7Ozs7OztBQ0FsRSxhQUFhLGdDQUFnQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQS9DLGFBQWEsbUNBQW1DLEVBQUUsSSIsImZpbGUiOiJldmVudGVzcHJlc3NvLWNvbXBvbmVudHMuYTM5N2UzNDMxZTkyODNkNDI4ODQuZGlzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2luZGV4LmpzXCIpO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEF2YXRhckltYWdlIH0gZnJvbSAnLi4vdWkvaW1hZ2UnO1xuXG5jb25zdCBBdHRlbmRlZUxpc3RJdGVtID0gKCB7XG5cdGlzTG9hZGluZyxcblx0YXR0ZW5kZWUsXG5cdHNob3dHcmF2YXRhcixcblx0YXZhdGFyT3B0aW9ucyA9IHt9LFxufSApID0+IHtcblx0ZnVuY3Rpb24gZ2V0QXZhdGFyVXJsKCkge1xuXHRcdGNvbnN0IHVybCA9IGF0dGVuZGVlLmhhc0NhbGN1bGF0ZWRGaWVsZCggJ3VzZXJBdmF0YXInICkgP1xuXHRcdFx0YXR0ZW5kZWUudXNlckF2YXRhciA6XG5cdFx0XHQnJztcblx0XHRyZXR1cm4gdXJsID09PSAnJyAmJiBhdmF0YXJPcHRpb25zLmF2YXRhclVybCA/XG5cdFx0XHRhdmF0YXJPcHRpb25zLmF2YXRhclVybCA6XG5cdFx0XHR1cmw7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRBdHRlbmRlZU5hbWUoKSB7XG5cdFx0cmV0dXJuIGF0dGVuZGVlLmZuYW1lICsgJyAnICsgYXR0ZW5kZWUubG5hbWU7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRBdmF0YXIoKSB7XG5cdFx0Y29uc3QgdXJsID0gZ2V0QXZhdGFyVXJsKCk7XG5cdFx0aWYgKCAhIGlzTG9hZGluZyAmJiBzaG93R3JhdmF0YXIgJiYgdXJsID09PSAnJyApIHtcblx0XHRcdHdhcm5pbmcoXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHQnc2hvd0dyYXZhdGFyIGlzIHRydWUgYnV0IHRoZXJlIGlzIG5vIGF2YXRhciB1cmwgaW5jbHVkZWQgJyArXG5cdFx0XHRcdCd3aXRoIGVpdGhlciB0aGUgYXR0ZW5kZWUgZW50aXR5IG9yIHRoZSBhdmF0YXJPcHRpb25zIHByb3AnXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2hvd0dyYXZhdGFyID9cblx0XHRcdDxBdmF0YXJJbWFnZSBhdmF0YXJVcmw9eyB1cmwgfSB7IC4uLmF2YXRhck9wdGlvbnMgfSAvPiA6XG5cdFx0XHRudWxsO1xuXHR9XG5cblx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBhdHRlbmRlZSwgJ2F0dGVuZGVlJyApICkge1xuXHRcdHdhcm5pbmcoXG5cdFx0XHRmYWxzZSxcblx0XHRcdCdUaGUgRXZlbnRBdHRlbmRlZSBjb21wb25lbnQgZXhwZWN0cyBhbiBhdHRlbmRlZSBtb2RlbCBlbnRpdHkuJ1xuXHRcdCk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxGcmFnbWVudD5cblx0XHRcdDxsaT57IGdldEF2YXRhcigpIH08c3Bhbj57IGdldEF0dGVuZGVlTmFtZSgpIH08L3NwYW4+PC9saT5cblx0XHQ8L0ZyYWdtZW50PlxuXHQpO1xufTtcbmV4cG9ydCBkZWZhdWx0IEF0dGVuZGVlTGlzdEl0ZW07XG4iLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQgQXR0ZW5kZWVMaXN0SXRlbSBmcm9tICcuL2F0dGVuZGVlLWxpc3QtaXRlbSc7XG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRBdHRlbmRlZUxpc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cdFx0YXR0ZW5kZWVzOiBQcm9wVHlwZXMuYXJyYXksXG5cdFx0c2hvd0dyYXZhdGFyOiBQcm9wVHlwZXMuYm9vbCxcblx0XHRjb250YWluZXJDc3NDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRjb250YWluZXJJZDogUHJvcFR5cGVzLnN0cmluZyxcblx0fTtcblxuXHRzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuXHRcdGF0dGVuZGVlczogW10sXG5cdFx0c2hvd0dyYXZhdGFyOiBmYWxzZSxcblx0XHRjb250YWluZXJDc3NDbGFzczogJycsXG5cdFx0Y29udGFpbmVySWQ6ICdldmVudC1hdHRlbmRlZXMtbGlzdCcsXG5cdFx0aXNMb2FkaW5nOiBmYWxzZSxcblx0fTtcblxuXHRnZXRBdHRlbmRlZUxpc3QoKSB7XG5cdFx0Y29uc3QgeyBhdHRlbmRlZXMsIHNob3dHcmF2YXRhciwgaXNMb2FkaW5nIH0gPSB0aGlzLnByb3BzO1xuXHRcdGlmICggaXNFbXB0eSggYXR0ZW5kZWVzICkgKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgbGlzdEl0ZW1zID0gYXR0ZW5kZWVzLm1hcChcblx0XHRcdCggYXR0ZW5kZWUgKSA9PiB7XG5cdFx0XHRcdGlmICggYXR0ZW5kZWUuaWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDxBdHRlbmRlZUxpc3RJdGVtXG5cdFx0XHRcdFx0XHRrZXk9eyBhdHRlbmRlZS5pZCB9XG5cdFx0XHRcdFx0XHRhdHRlbmRlZT17IGF0dGVuZGVlIH1cblx0XHRcdFx0XHRcdHNob3dHcmF2YXRhcj17IHNob3dHcmF2YXRhciB9XG5cdFx0XHRcdFx0XHRpc0xvYWRpbmc9eyBpc0xvYWRpbmcgfVxuXHRcdFx0XHRcdFx0eyAuLi50aGlzLnByb3BzIH1cblx0XHRcdFx0XHQvPjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8dWw+XG5cdFx0XHRcdHsgbGlzdEl0ZW1zIH1cblx0XHRcdDwvdWw+XG5cdFx0KTtcblx0fVxuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7IGNvbnRhaW5lckNzc0NsYXNzLCBjb250YWluZXJJZCB9ID0gdGhpcy5wcm9wcztcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRpZD17IGNvbnRhaW5lcklkIH1cblx0XHRcdFx0Y2xhc3NOYW1lPXtcblx0XHRcdFx0XHRjbGFzc05hbWVzKFxuXHRcdFx0XHRcdFx0Y29udGFpbmVyQ3NzQ2xhc3MsXG5cdFx0XHRcdFx0XHQnZXZlbnQtYXR0ZW5kZWVzJyxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH1cblx0XHRcdD5cblx0XHRcdFx0eyB0aGlzLmdldEF0dGVuZGVlTGlzdCgpIH1cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH1cbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1ibG9jay1ldmVudC1hdHRlbmRlZXNcIjpcImVlLWJsb2NrLWV2ZW50LWF0dGVuZGVlc1wiLFwiZXZlbnQtYXR0ZW5kZWVzXCI6XCJldmVudC1hdHRlbmRlZXNcIixcImNvbnRhY3QtaW1hZ2Utd3JhcC1kaXZcIjpcImNvbnRhY3QtaW1hZ2Utd3JhcC1kaXZcIixcImNvbnRhY3QtYXZhdGFyLWltZ1wiOlwiY29udGFjdC1hdmF0YXItaW1nXCJ9OyIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBhZGRWYWxpZGF0b3JzVG9BdHRyaWJ1dGVzIH0gZnJvbSAnLi4vaW5wdXRzL2Jhc2UvdXRpbHMnO1xuaW1wb3J0IHsgSW5wdXRMYWJlbCB9IGZyb20gJy4uL2lucHV0cy9iYXNlL2lucHV0LWxhYmVsJztcblxuLyoqXG4gKiBBdXRvRm9ybVJvd1xuICogVGhpcyBjb21wb25lbnQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBpbmNvbWluZyBmb3JtIGVsZW1lbnRcbiAqIGlzIGFuIGlucHV0LCBsYWJlbCwgb3Igcm93IGNvbXBvbmVudCBhbmQgcmVzcG9uZHMgYWNjb3JkaW5nbHkuXG4gKiBGb3JtUm93IGNvbXBvbmVudHMgZnJvbSBhIGZvcm0gbGF5b3V0IHN0cmF0ZWd5IHdpbGwgc2ltcGx5IGJlXG4gKiByZXR1cm5lZCBhcyBpcywgc2luY2UgdGhleSByZXF1aXJlIG5vIGZ1cnRoZXIgbWFuaXB1bGF0aW9uLlxuICogSW5wdXRzIGFuZCBMYWJlbHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHN1cHBsaWVkIGZvcm0gbGF5b3V0XG4gKiBzdHJhdGVneSBBdXRvQ29sdW1uUm93IGNvbXBvbmVudCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuICogSWYgYSBMYWJlbCBjb21wb25lbnQgaXMgbm90IHByb3ZpZGVkIGJ1dCB0aGUgc3VwcGxpZWQgSW5wdXRcbiAqIGhhcyBhIFwibGFiZWxcIiBwcm9wLCB0aGVuIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIGFuXG4gKiBJbnB1dExhYmVsIHVzaW5nIHRoZSBzdXBwbGllZCBmb3JtIGxheW91dCBzdHJhdGVneSBjb21wb25lbnQuXG4gKlxuICogQGNvbXBvbmVudFxuICogQHBhcmFtIHtPYmplY3R9IEZvcm1FbGVtZW50IGVpdGhlciBhbiBpbnB1dCwgbGFiZWwsIG9yIGZvcm0gcm93IGNvbXBvbmVudFxuICogQHBhcmFtIHtPYmplY3R9IEF1dG9Db2x1bW5Sb3cgZm9ybSBsYXlvdXQgc3RyYXRlZ3kgcm93IGNvbXBvbmVudFxuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBmb3JtIHJvd1xuICovXG5jb25zdCBBdXRvRm9ybVJvdyA9ICgge1xuXHRGb3JtRWxlbWVudCxcblx0QXV0b0NvbHVtblJvdyxcbn0gKSA9PiB7XG5cdGxldCBsYWJlbCA9IG51bGw7XG5cdGxldCBpbnB1dCA9IG51bGw7XG5cdGxldCByb3cgPSBudWxsO1xuXHRpZiAoIEZvcm1FbGVtZW50ICYmIEZvcm1FbGVtZW50LnR5cGUgJiYgRm9ybUVsZW1lbnQudHlwZS5uYW1lICkge1xuXHRcdGNvbnN0IG5hbWUgPSBGb3JtRWxlbWVudC50eXBlLm5hbWU7XG5cdFx0aWYgKFxuXHRcdFx0bmFtZSAhPT0gJ0lucHV0TGFiZWwnICYmXG5cdFx0XHRuYW1lICE9PSAnRm9ybUlucHV0JyAmJlxuXHRcdFx0bmFtZSAhPT0gJ0ZpZWxkJ1xuXHRcdCkge1xuXHRcdFx0cmV0dXJuIEZvcm1FbGVtZW50O1xuXHRcdH1cblx0XHRpZiAoIG5hbWUgPT09ICdJbnB1dExhYmVsJyApIHtcblx0XHRcdGxhYmVsID0gRm9ybUVsZW1lbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlucHV0ID0gRm9ybUVsZW1lbnQ7XG5cdFx0XHRjb25zdCB2YWxpZGF0aW9ucyA9IEFycmF5LmlzQXJyYXkoIEZvcm1FbGVtZW50LnByb3BzLnZhbGlkYXRpb25zICkgP1xuXHRcdFx0XHRGb3JtRWxlbWVudC5wcm9wcy52YWxpZGF0aW9ucyA6XG5cdFx0XHRcdFsgRm9ybUVsZW1lbnQucHJvcHMudmFsaWRhdGlvbnMgXTtcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBhZGRWYWxpZGF0b3JzVG9BdHRyaWJ1dGVzKFxuXHRcdFx0XHR7IC4uLkZvcm1FbGVtZW50LnByb3BzIH0sXG5cdFx0XHRcdHZhbGlkYXRpb25zXG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBhdHRyaWJ1dGVzLmxhYmVsICkge1xuXHRcdFx0XHRjb25zdCByZXF1aXJlZCA9IGF0dHJpYnV0ZXMucmVxdWlyZWQgP1xuXHRcdFx0XHRcdGF0dHJpYnV0ZXMucmVxdWlyZWQgOlxuXHRcdFx0XHRcdGZhbHNlO1xuXHRcdFx0XHRsYWJlbCA9IChcblx0XHRcdFx0XHQ8SW5wdXRMYWJlbFxuXHRcdFx0XHRcdFx0aHRtbEZvcj17IGF0dHJpYnV0ZXMuaHRtbElkIH1cblx0XHRcdFx0XHRcdGxhYmVsPXsgYXR0cmlidXRlcy5sYWJlbCB9XG5cdFx0XHRcdFx0XHRyZXF1aXJlZD17IHJlcXVpcmVkIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIGxhYmVsICYmIGlucHV0ICkge1xuXHRcdFx0cm93ID0gKFxuXHRcdFx0XHQ8QXV0b0NvbHVtblJvdz5cblx0XHRcdFx0XHR7IGxhYmVsIH1cblx0XHRcdFx0XHR7IGlucHV0IH1cblx0XHRcdFx0PC9BdXRvQ29sdW1uUm93PlxuXHRcdFx0KTtcblx0XHRcdHJldHVybiByb3c7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBGb3JtRWxlbWVudDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF1dG9Gb3JtUm93O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBFc3ByZXNzb0J1dHRvbiB9IGZyb20gJy4uLy4uL3VpJztcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uQ2xpY2tcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VibWl0dGluZ1xuICogQHBhcmFtIHtib29sZWFufSBwcmlzdGluZVxuICogQHBhcmFtIHtzdHJpbmd9IGJ1dHRvblRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgc3VibWl0IGJ1dHRvbiBmb3IgZm9ybVxuICovXG5jb25zdCBGb3JtQ2FuY2VsQnV0dG9uID0gKCB7XG5cdG9uQ2xpY2ssXG5cdHByaXN0aW5lLFxuXHRzdWJtaXR0aW5nLFxuXHRidXR0b25UZXh0LFxuXHRodG1sSWQsXG5cdGh0bWxDbGFzcyxcbn0gKSA9PiB7XG5cdGJ1dHRvblRleHQgPSBidXR0b25UZXh0ID8gYnV0dG9uVGV4dCA6IF9fKCAnQ2FuY2VsJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRodG1sQ2xhc3MgPSBjbGFzc05hbWVzKCB7XG5cdFx0WyBodG1sQ2xhc3MgXTogaHRtbENsYXNzLFxuXHRcdCdlZS1mb3JtLWJ1dHRvbic6IHRydWUsXG5cdFx0J2VlLWZvcm0tYnV0dG9uLWNhbmNlbCc6IHRydWUsXG5cdH0gKTtcblx0cmV0dXJuIChcblx0XHQ8RXNwcmVzc29CdXR0b25cblx0XHRcdGJ1dHRvblRleHQ9eyBidXR0b25UZXh0IH1cblx0XHRcdGlkPXsgaHRtbElkIH1cblx0XHRcdGh0bWxDbGFzcz17IGh0bWxDbGFzcyB9XG5cdFx0XHRvbkNsaWNrPXsgb25DbGljayB9XG5cdFx0XHRkaXNhYmxlZD17IHN1Ym1pdHRpbmcgfHwgcHJpc3RpbmUgfVxuXHRcdC8+XG5cdCk7XG59O1xuXG5Gb3JtQ2FuY2VsQnV0dG9uLnByb3BUeXBlcyA9IHtcblx0b25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblx0YnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcblx0cHJpc3RpbmU6IFByb3BUeXBlcy5ib29sLFxuXHRzdWJtaXR0aW5nOiBQcm9wVHlwZXMuYm9vbCxcblx0aHRtbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5Gb3JtQ2FuY2VsQnV0dG9uLmRlZmF1bHRQcm9wcyA9IHtcblx0YnV0dG9uVGV4dDogJycsXG5cdGh0bWxJZDogJycsXG5cdGh0bWxDbGFzczogJycsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb3JtQ2FuY2VsQnV0dG9uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWZvcm0tY29udGFpbmVyLWRpdlwiOlwiZWUtZm9ybS1jb250YWluZXItZGl2XCIsXCJlZS1mb3JtLWZhZGUtaW5cIjpcImVlLWZvcm0tZmFkZS1pblwifTsiLCIvKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICcuL2Zvcm0tY29udGFpbmVyLmNzcyc7XG5cbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqXG4gKiBGb3JtQ29udGFpbmVyIGlzIGEgd3JhcHBlciB0aGF0IGhpZGVzIHRoZSBmb3JtIHdoaWxlIGl0IGlzIGxvYWRpbmcsXG4gKiB0aGVuIGZhZGVzIGl0IGluIG9uY2UgbG9hZGluZyBpcyBjb21wbGV0ZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1cbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9hZGluZ1xuICogQHJldHVybiB7T2JqZWN0fSBmb3JtXG4gKi9cbmV4cG9ydCBjb25zdCBGb3JtQ29udGFpbmVyID0gKCB7IGNoaWxkcmVuLCBodG1sQ2xhc3MsIGxvYWRpbmcgfSApID0+IHtcblx0Y29uc3QgY29udGFpbmVyQ2xhc3MgPSBjbGFzc05hbWVzKCB7XG5cdFx0J2VlLWZvcm0tY29udGFpbmVyLWRpdic6IHRydWUsXG5cdFx0WyBgJHsgaHRtbENsYXNzIH1gIF06IGh0bWxDbGFzcyxcblx0XHQnZWUtZm9ybS1mYWRlLWluJzogISBsb2FkaW5nLFxuXHR9ICk7XG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9eyBjb250YWluZXJDbGFzcyB9ID5cblx0XHRcdHsgISBsb2FkaW5nICYmIGNoaWxkcmVuIH1cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZm9ybS1kYXRhLWR1bXAtZGl2XCI6XCJlZS1mb3JtLWRhdGEtZHVtcC1kaXZcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fREVWX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAnLi9mb3JtLWRhdGEtZGVidWctZHVtcC5jc3MnO1xuXG4vKipcbiAqIERpc3BsYXlzIGZvcm0gZGF0YSBpbiBub24tcHJvZHVjdGlvbiBlbnZpcm9ubWVudHNcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXNcbiAqIEByZXR1cm4ge09iamVjdH0gZm9ybSBkYXRhXG4gKi9cbmV4cG9ydCBjb25zdCBGb3JtRGF0YURlYnVnRHVtcCA9ICggeyB2YWx1ZXMgfSApID0+IHtcblx0cmV0dXJuIF9fREVWX18gPyAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1mb3JtLWRhdGEtZHVtcC1kaXZcIj5cblx0XHRcdDxoMz5Gb3JtIERhdGE8L2gzPlxuXHRcdFx0PHByZSBpZD1cImZvcm0tZGF0YVwiPlxuXHRcdFx0XHR7IEpTT04uc3RyaW5naWZ5KCB2YWx1ZXMsIDAsIDIgKSB9XG5cdFx0XHQ8L3ByZT5cblx0XHQ8L2Rpdj5cblx0KSA6IG51bGw7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuXG4vKipcbiAqIEZvcm1FcnJvckJvdW5kYXJ5XG4gKiBjYXRjaGVzIEphdmFTY3JpcHQgZXJyb3JzIHByb2R1Y2VkIGJ5IHRoZSBmb3JtXG4gKiBhbmQgZGlzcGxheXMgYSBmYWxsYmFjayBVSVxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IEZvcm1Db21wb25lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxvYWRIYW5kbGVyIGEgZnVuY3Rpb24gdGhhdCBzdXBwbGllcyB0aGUgZm9ybSBkYXRhXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdWJtaXRIYW5kbGVyIGEgZnVuY3Rpb24gdGhhdCBwcm9jZXNzZXMgdGhlIHN1Ym1pdHRlZCBmb3JtXG4gKiBAcmV0dXJuIHtPYmplY3R9IEZvcm1Db21wb25lbnQgd2l0aCBhZGRlZCBmb3JtIGhhbmRsaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBGb3JtRXJyb3JCb3VuZGFyeSBleHRlbmRzIENvbXBvbmVudCB7XG5cdGNvbnN0cnVjdG9yKCBwcm9wcyApIHtcblx0XHRzdXBlciggcHJvcHMgKTtcblx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0ZXJyb3I6IG51bGwsXG5cdFx0XHRlcnJvckluZm86IG51bGwsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IGVycm9yXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBpbmZvXG5cdCAqL1xuXHRjb21wb25lbnREaWRDYXRjaCggZXJyb3IsIGluZm8gKSB7XG5cdFx0dGhpcy5zZXRTdGF0ZSgge1xuXHRcdFx0ZXJyb3IsXG5cdFx0XHRlcnJvckluZm86IGluZm8sXG5cdFx0fSApO1xuXHR9XG5cblx0cmVuZGVyKCkge1xuXHRcdGxldCB7IGVycm9yTWVzc2FnZSA9ICcnIH0gPSB0aGlzLnByb3BzO1xuXHRcdGVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZSAhPT0gJycgP1xuXHRcdFx0ZXJyb3JNZXNzYWdlIDpcblx0XHRcdF9fKCAnQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJyZWQuJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdGlmICggdGhpcy5zdGF0ZS5lcnJvckluZm8gKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdDxoMj57IGVycm9yTWVzc2FnZSB9PC9oMj5cblx0XHRcdFx0XHQ8ZGV0YWlscyBzdHlsZT17IHsgd2hpdGVTcGFjZTogJ3ByZS13cmFwJyB9IH0+XG5cdFx0XHRcdFx0XHR7IHRoaXMuc3RhdGUuZXJyb3IgJiYgdGhpcy5zdGF0ZS5lcnJvci50b1N0cmluZygpIH1cblx0XHRcdFx0XHRcdDxiciAvPlxuXHRcdFx0XHRcdFx0eyB0aGlzLnN0YXRlLmVycm9ySW5mby5jb21wb25lbnRTdGFjayB9XG5cdFx0XHRcdFx0PC9kZXRhaWxzPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuXHR9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZm9ybS1pbmZvLXJvd1wiOlwiZWUtZm9ybS1pbmZvLXJvd1wiLFwiaXMtZGlzbWlzc2FibGVcIjpcImlzLWRpc21pc3NhYmxlXCIsXCJkaXNtaXNzZWRcIjpcImRpc21pc3NlZFwiLFwiZWUtZm9ybS1pbmZvXCI6XCJlZS1mb3JtLWluZm9cIixcImVlLWZvcm0taW5mby10ZXh0XCI6XCJlZS1mb3JtLWluZm8tdGV4dFwiLFwiZWUtZm9ybS1pbmZvLXR5cGVcIjpcImVlLWZvcm0taW5mby10eXBlXCIsXCJlZS1mb3JtLWluZm8tdHlwZS13YXJuaW5nXCI6XCJlZS1mb3JtLWluZm8tdHlwZS13YXJuaW5nXCIsXCJkYXNoaWNvblwiOlwiZGFzaGljb25cIixcImVlLWZvcm0taW5mby1kaXNtaXNzXCI6XCJlZS1mb3JtLWluZm8tZGlzbWlzc1wifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgRGFzaGljb24sIEljb25CdXR0b24gfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgJy4vZm9ybS1pbmZvLWJhc2UuY3NzJztcblxuLyoqXG4gKiBGb3JtSW5mb0Jhc2VcbiAqIGRpc3BsYXlzIGluc3RydWN0aW9ucyBvciBvdGhlciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cbiAqIHRoYXQgdXNlcnMgbWF5IHJlcXVpcmUgdG8gcHJvcGVybHkgY29tcGxldGUgYSBmb3JtLlxuICogISEhIElNUE9SVEFOVCAhISFcbiAqIGlmIHRoZSBmb3JtIGluZm8gbmVlZHMgdG8gYmUgZGlzbWlzc2FibGUsIHRoZW4gdGhlXG4gKiBjb21wb25lbnQgd3JhcHBpbmcgdGhpcyAoaWU6IEZvcm1Sb3cpIHNob3VsZCBkbyB0aGUgZm9sbG93aW5nOlxuICogIC0gaGF2ZSBhbiBodG1sIENTUyBjbGFzcyBvZiBcImVlLWZvcm0taW5mby1yb3dcIlxuICogIC0gbWFuYWdlIHRoZSBcImRpc21pc3NcIiBzdGF0ZSBmb3IgdGhlIGNvbXBvbmVudFxuICogICAgd2hpY2ggY2FuIGJlIHRvZ2dsZWQgdmlhIHRoZSBvbkRpc21pc3MgY2FsbGJhY2tcbiAqICAtIGFkZCBhbiBodG1sIGNzcyBjbGFzcyBvZiBcImRpc21pc3NlZFwiIHRvIGhpZGUgdGhlIGZvcm0gaW5mb1xuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSBmb3JtSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IGRhc2hpY29uXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkRpc21pc3NcbiAqIEBwYXJhbSB7QXJyYXl9IGZvcm1JbmZvVmFyc1xuICovXG5jb25zdCBGb3JtSW5mb0Jhc2UgPSAoIHtcblx0Zm9ybUluZm8sXG5cdGRhc2hpY29uID0gJycsXG5cdGh0bWxDbGFzcyA9ICcnLFxuXHRvbkRpc21pc3MgPSBudWxsLFxuXHRmb3JtSW5mb1ZhcnMgPSBbXSxcbn0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyA/XG5cdFx0YCR7IGh0bWxDbGFzcyB9IGVlLWZvcm0taW5mb2AgOlxuXHRcdCdlZS1mb3JtLWluZm8nO1xuXHRodG1sQ2xhc3MgPSBkYXNoaWNvbiA/XG5cdFx0YCR7IGh0bWxDbGFzcyB9IGVlLWZvcm0taW5mby10eXBlLSR7IGRhc2hpY29uIH0gaGFzLWluZm8tdHlwZWAgOlxuXHRcdGh0bWxDbGFzcztcblx0Y29uc3QgdHlwZUljb24gPSBkYXNoaWNvbiA/IChcblx0XHQ8RGFzaGljb25cblx0XHRcdGNsYXNzTmFtZT1cImVlLWZvcm0taW5mby10eXBlXCJcblx0XHRcdGljb249eyBkYXNoaWNvbiB9XG5cdFx0XHRzaXplPXsgMzYgfVxuXHRcdC8+XG5cdCkgOiBudWxsO1xuXHRjb25zdCBkaXNtaXNzID0gb25EaXNtaXNzID8gKFxuXHRcdDxJY29uQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9XCJlZS1mb3JtLWluZm8tZGlzbWlzcyBjbGlja2FibGVcIlxuXHRcdFx0aWNvbj1cImRpc21pc3NcIlxuXHRcdFx0b25DbGljaz17IG9uRGlzbWlzcyB9XG5cdFx0Lz5cblx0KSA6IG51bGw7XG5cdGlmICggISBpc0VtcHR5KCBmb3JtSW5mb1ZhcnMgKSApIHtcblx0XHRjb25zdCBmb3JtSW5mb1RleHQgPSBbXTtcblx0XHRjb25zdCBjaHVua3MgPSBmb3JtSW5mby5zcGxpdCggJyUldmFyJSUnICk7XG5cdFx0Zm9yICggbGV0IHggPSAwOyB4IDwgY2h1bmtzLmxlbmd0aDsgeCsrICkge1xuXHRcdFx0aWYgKCBjaHVua3NbIHggXSApIHtcblx0XHRcdFx0Zm9ybUluZm9UZXh0LnB1c2goIGNodW5rc1sgeCBdICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGZvcm1JbmZvVmFyc1sgeCBdICkge1xuXHRcdFx0XHRmb3JtSW5mb1RleHQucHVzaCggZm9ybUluZm9WYXJzWyB4IF0gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9ybUluZm8gPSBmb3JtSW5mb1RleHQ7XG5cdH1cblx0cmV0dXJuIGZvcm1JbmZvID8gKFxuXHRcdDxkaXZcblx0XHRcdGFyaWEtbGFiZWw9eyBfXyggJ2ltcG9ydGFudCBpbmZvcm1hdGlvbicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRjbGFzc05hbWU9eyBodG1sQ2xhc3MgfVxuXHRcdD5cblx0XHRcdHsgdHlwZUljb24gfVxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1mb3JtLWluZm8tdGV4dFwiPnsgZm9ybUluZm8gfTwvZGl2PlxuXHRcdFx0eyBkaXNtaXNzIH1cblx0XHQ8L2Rpdj5cblx0KSA6IG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb3JtSW5mb0Jhc2U7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZm9ybS1wbGFjZWhvbGRlci1kaXZcIjpcImVlLWZvcm0tcGxhY2Vob2xkZXItZGl2XCIsXCJlZS1lZGl0b3ItZGl2XCI6XCJlZS1lZGl0b3ItZGl2XCIsXCJlZS1mb3JtLWZhZGUtb3V0XCI6XCJlZS1mb3JtLWZhZGUtb3V0XCIsXCJlZS1sb2FkaW5nLWRpdlwiOlwiZWUtbG9hZGluZy1kaXZcIixcImNvbXBvbmVudHMtc3Bpbm5lclwiOlwiY29tcG9uZW50cy1zcGlubmVyXCIsXCJlZS1mb3JtLXBsYWNlaG9sZGVyLW5vdGljZVwiOlwiZWUtZm9ybS1wbGFjZWhvbGRlci1ub3RpY2VcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX3gsIHNwcmludGYgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICcuL2Zvcm0tcGxhY2Vob2xkZXIuY3NzJztcblxuLyoqXG4gKiBEaXNwbGF5cyBhIG5vdGljZSB3aGlsZSB0aGUgZm9ybSBpcyBsb2FkaW5nXG4gKiB0aGVuIGZhZGVzIGF3YXkgd2hlbiBsb2FkaW5nIGlzIGNvbXBsZXRlXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxvYWRpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBub3RpY2VcbiAqIEByZXR1cm4ge09iamVjdH0gc3Bpbm5lclxuICovXG5leHBvcnQgY29uc3QgRm9ybVBsYWNlaG9sZGVyID0gKCB7IGxvYWRpbmcsIG5vdGljZSA9ICcnIH0gKSA9PiB7XG5cdG5vdGljZSA9IG5vdGljZSB8fFxuXHRcdHNwcmludGYoXG5cdFx0XHRfeCggJ2xvYWRpbmclcycsICdsb2FkaW5nLi4uJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggJzgyMzAnIClcblx0XHQpO1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17XG5cdFx0XHRcdGNsYXNzTmFtZXMoIHtcblx0XHRcdFx0XHQnZWUtZm9ybS1wbGFjZWhvbGRlci1kaXYnOiB0cnVlLFxuXHRcdFx0XHRcdCdlZS1mb3JtLWZhZGUtb3V0JzogISBsb2FkaW5nLFxuXHRcdFx0XHR9IClcblx0XHRcdH1cblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWxvYWRpbmctZGl2XCI+XG5cdFx0XHRcdDxTcGlubmVyIC8+XG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWZvcm0tcGxhY2Vob2xkZXItbm90aWNlXCI+XG5cdFx0XHRcdFx0eyBub3RpY2UgfVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBTdWJtaXR0aW5nTm90aWNlIGZyb20gJy4vc3VibWl0dGluZy1ub3RpY2UnO1xuaW1wb3J0IEVzcHJlc3NvQnV0dG9uIGZyb20gJy4uLy4uL3VpL2VzcHJlc3NvLWJ1dHRvbic7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHN1Ym1pdHRpbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZGlzYWJsZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBidXR0b25UZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gYnV0dG9uSWNvblxuICogQHBhcmFtIHtzdHJpbmd9IHN1Ym1pdHRpbmdUZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3VibWl0dGluZ1RleHRQb3NpdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxJZFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IG5vdGljZUNsYXNzXG4gKiBAcGFyYW0ge09iamVjdH0gYnV0dG9uUHJvcHNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgc3VibWl0IGJ1dHRvbiBmb3IgZm9ybVxuICovXG5jb25zdCBGb3JtU3VibWl0QnV0dG9uID0gKCB7XG5cdHN1Ym1pdHRpbmcsXG5cdGRpc2FibGVkLFxuXHRidXR0b25UZXh0LFxuXHRidXR0b25JY29uLFxuXHRzdWJtaXR0aW5nVGV4dCxcblx0c3VibWl0dGluZ1RleHRQb3NpdGlvbixcblx0aHRtbElkLFxuXHRodG1sQ2xhc3MsXG5cdG5vdGljZUNsYXNzLFxuXHQuLi5idXR0b25Qcm9wc1xufSApID0+IHtcblx0YnV0dG9uVGV4dCA9IGJ1dHRvblRleHQgPyBidXR0b25UZXh0IDogX18oICdTdWJtaXQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdGh0bWxDbGFzcyA9IGNsYXNzTmFtZXMoIHtcblx0XHRbIGh0bWxDbGFzcyBdOiBodG1sQ2xhc3MsXG5cdFx0J2VlLWZvcm0tYnV0dG9uJzogdHJ1ZSxcblx0XHQnZWUtZm9ybS1idXR0b24tc3VibWl0JzogdHJ1ZSxcblx0fSApO1xuXHRyZXR1cm4gKFxuXHRcdDxGcmFnbWVudD5cblx0XHRcdDxTdWJtaXR0aW5nTm90aWNlXG5cdFx0XHRcdHN1Ym1pdHRpbmc9eyBzdWJtaXR0aW5nIH1cblx0XHRcdFx0c3VibWl0dGluZ1RleHQ9eyBzdWJtaXR0aW5nVGV4dCB9XG5cdFx0XHRcdHBvc2l0aW9uPXsgc3VibWl0dGluZ1RleHRQb3NpdGlvbiB9XG5cdFx0XHRcdGh0bWxDbGFzcz17IG5vdGljZUNsYXNzIH1cblx0XHRcdC8+XG5cdFx0XHQ8RXNwcmVzc29CdXR0b25cblx0XHRcdFx0dHlwZT1cInN1Ym1pdFwiXG5cdFx0XHRcdHN0eWxlPXsgJ3ByaW1hcnknIH1cblx0XHRcdFx0YnV0dG9uVGV4dD17IGJ1dHRvblRleHQgfVxuXHRcdFx0XHRkaXNhYmxlZD17IHN1Ym1pdHRpbmcgfHwgZGlzYWJsZWQgfVxuXHRcdFx0XHRpZD17IGh0bWxJZCB9XG5cdFx0XHRcdGh0bWxDbGFzcz17IGh0bWxDbGFzcyB9XG5cdFx0XHRcdGljb249eyBidXR0b25JY29uIH1cblx0XHRcdFx0eyAuLi5idXR0b25Qcm9wcyB9XG5cdFx0XHQvPlxuXHRcdDwvRnJhZ21lbnQ+XG5cdCk7XG59O1xuXG5Gb3JtU3VibWl0QnV0dG9uLnByb3BUeXBlcyA9IHtcblx0b25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cdGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblx0c3VibWl0dGluZzogUHJvcFR5cGVzLmJvb2wsXG5cdGJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGJ1dHRvbkljb246IFByb3BUeXBlcy5zdHJpbmcsXG5cdHN1Ym1pdHRpbmdUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRzdWJtaXR0aW5nVGV4dFBvc2l0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRub3RpY2VDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0aHRtbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5Gb3JtU3VibWl0QnV0dG9uLmRlZmF1bHRQcm9wcyA9IHtcblx0b25DbGljazogKCkgPT4gbnVsbCxcblx0YnV0dG9uVGV4dDogJycsXG5cdGJ1dHRvbkljb246ICdzYXZlJyxcblx0c3VibWl0dGluZ1RleHQ6ICcnLFxuXHRzdWJtaXR0aW5nVGV4dFBvc2l0aW9uOiAnYWJvdmUnLFxuXHRub3RpY2VDbGFzczogJycsXG5cdGh0bWxJZDogJycsXG5cdGh0bWxDbGFzczogJycsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb3JtU3VibWl0QnV0dG9uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLXN1Ym1pdHRpbmctbm90aWNlLXdyYXBwZXJcIjpcImVlLXN1Ym1pdHRpbmctbm90aWNlLXdyYXBwZXJcIixcImVlLXN1Ym1pdHRpbmctbm90aWNlXCI6XCJlZS1zdWJtaXR0aW5nLW5vdGljZVwiLFwiZWUtc21hbGxcIjpcImVlLXNtYWxsXCIsXCJlZS1zcGlubmVyLXdyYXBwZXJcIjpcImVlLXNwaW5uZXItd3JhcHBlclwiLFwiZWUtZGVmYXVsdFwiOlwiZWUtZGVmYXVsdFwiLFwiZWUtYmlnXCI6XCJlZS1iaWdcIixcImNvbXBvbmVudHMtc3Bpbm5lclwiOlwiY29tcG9uZW50cy1zcGlubmVyXCIsXCJlZS1lbGxpcHNpcy13cmFwcGVyXCI6XCJlZS1lbGxpcHNpcy13cmFwcGVyXCIsXCJlZS1lbGxpcHNpcy1zcGFuLTFcIjpcImVlLWVsbGlwc2lzLXNwYW4tMVwiLFwiZWxsaXBzaXMtZG90XCI6XCJlbGxpcHNpcy1kb3RcIixcImVlLWVsbGlwc2lzLXNwYW4tMlwiOlwiZWUtZWxsaXBzaXMtc3Bhbi0yXCIsXCJlZS1lbGxpcHNpcy1zcGFuLTNcIjpcImVlLWVsbGlwc2lzLXNwYW4tM1wiLFwiZWUtcG9zaXRpb24tYWJvdmVcIjpcImVlLXBvc2l0aW9uLWFib3ZlXCIsXCJlZS1wb3NpdGlvbi1iZWxvd1wiOlwiZWUtcG9zaXRpb24tYmVsb3dcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAnLi9zdWJtaXR0aW5nLW5vdGljZS5jc3MnO1xuXG4vKipcbiAqIEEgbm90aWNlIGluZGljYXRpbmcgdGhhdCBhbiBpbnB1dCBvciBmb3JtIGlzIHNhdmluZyBvciBzdWJtaXR0aW5nXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHN1Ym1pdHRpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJtaXR0aW5nVGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IHBvc2l0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gc2l6ZVxuICogQHBhcmFtIHtPYmplY3R9IHN0eWxlXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHN1Ym1pdHRpbmcgbm90aWNlXG4gKi9cbmNvbnN0IFN1Ym1pdHRpbmdOb3RpY2UgPSAoIHtcblx0c3VibWl0dGluZyxcblx0c3VibWl0dGluZ1RleHQsXG5cdGh0bWxDbGFzcyxcblx0cG9zaXRpb24sXG5cdHNpemUsXG5cdHN0eWxlLFxufSApID0+IHtcblx0c3VibWl0dGluZ1RleHQgPSBzdWJtaXR0aW5nVGV4dCA/XG5cdFx0c3VibWl0dGluZ1RleHQgOlxuXHRcdF9fKCAnc3VibWl0dGluZycsICdldmVudF9lc3ByZXNzbycgKTtcblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcygge1xuXHRcdFsgaHRtbENsYXNzIF06IGh0bWxDbGFzcyxcblx0XHQnZWUtc3VibWl0dGluZy1ub3RpY2UnOiB0cnVlLFxuXHRcdFsgYGVlLSR7IHNpemUgfWAgXTogc2l6ZSxcblx0XHRbIGBlZS1wb3NpdGlvbi0keyBwb3NpdGlvbiB9YCBdOiBwb3NpdGlvbixcblx0fSApO1xuXHRyZXR1cm4gc3VibWl0dGluZyA/XG5cdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1zdWJtaXR0aW5nLW5vdGljZS13cmFwcGVyXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9IHN0eWxlPXsgc3R5bGUgfT5cblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtc3Bpbm5lci13cmFwcGVyXCI+PFNwaW5uZXIgLz48L3NwYW4+XG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRleHQtd3JhcHBlclwiPnsgc3VibWl0dGluZ1RleHQgfTwvc3Bhbj5cblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZWxsaXBzaXMtd3JhcHBlclwiPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWVsbGlwc2lzLXNwYW4tMVwiPi48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZWxsaXBzaXMtc3Bhbi0yXCI+Ljwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1lbGxpcHNpcy1zcGFuLTNcIj4uPC9zcGFuPlxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj4gOlxuXHRcdG51bGw7XG59O1xuXG5TdWJtaXR0aW5nTm90aWNlLnByb3BUeXBlcyA9IHtcblx0c3VibWl0dGluZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblx0c3VibWl0dGluZ1RleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0cG9zaXRpb246IFByb3BUeXBlcy5vbmVPZiggWyAnYWJvdmUnLCAnYmVsb3cnIF0gKSxcblx0c2l6ZTogUHJvcFR5cGVzLm9uZU9mKCBbICdzbWFsbCcsICdkZWZhdWx0JywgJ2JpZycgXSApLFxuXHRzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbn07XG5cblN1Ym1pdHRpbmdOb3RpY2UuZGVmYXVsdFByb3BzID0ge1xuXHRzdWJtaXR0aW5nVGV4dDogJycsXG5cdGh0bWxDbGFzczogJycsXG5cdHBvc2l0aW9uOiAnYWJvdmUnLFxuXHRzaXplOiAnZGVmYXVsdCcsXG5cdHN0eWxlOiB7fSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFN1Ym1pdHRpbmdOb3RpY2U7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgY29tcG9zZSwgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQsIHdpdGhJbnN0YW5jZUlkIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgRm9ybUNvbnRhaW5lciwgRm9ybVBsYWNlaG9sZGVyIH0gZnJvbSAnLi4vJztcblxuLyoqXG4gKiB3aXRoRm9ybUNvbnRhaW5lckFuZFBsYWNlaG9sZGVyXG4gKiBIaWdoZXItT3JkZXItQ29tcG9uZW50IHRoYXQgd3JhcHMgYW4gRXNwcmVzc28gRm9ybSBjb21wb25lbnRcbiAqIHdpdGggYSBGb3JtQ29udGFpbmVyIGNvbXBvbmVudCBhbmQgYWRkcyBhIEZvcm1QbGFjZWhvbGRlclxuICogZm9yIGRpc3BsYXlpbmcgYSBsb2FkaW5nIG5vdGljZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBGb3JtXG4gKiBAcmV0dXJuIHtPYmplY3R9IEZvcm0gd2l0aCBhZGRlZCBGb3JtQ29udGFpbmVyIGFuZCBGb3JtUGxhY2Vob2xkZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY29tcG9zZSggW1xuXHR3aXRoSW5zdGFuY2VJZCxcblx0Y3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdFx0KCBGb3JtICkgPT4ge1xuXHRcdFx0cmV0dXJuIGNsYXNzIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0XHRcdFx0cmVuZGVyKCkge1xuXHRcdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRcdGluc3RhbmNlSWQsXG5cdFx0XHRcdFx0XHRsb2FkaW5nLFxuXHRcdFx0XHRcdFx0bG9hZGluZ05vdGljZSxcblx0XHRcdFx0XHRcdC4uLmZvcm1Qcm9wc1xuXHRcdFx0XHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdFx0XHRcdDxGb3JtUGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRrZXk9eyBpbnN0YW5jZUlkIH1cblx0XHRcdFx0XHRcdFx0XHRsb2FkaW5nPXsgbG9hZGluZyB9XG5cdFx0XHRcdFx0XHRcdFx0bm90aWNlPXsgbG9hZGluZ05vdGljZSB9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDxGb3JtQ29udGFpbmVyIGxvYWRpbmc9eyBsb2FkaW5nIH0+XG5cdFx0XHRcdFx0XHRcdFx0PEZvcm0geyAuLi5mb3JtUHJvcHMgfSAvPlxuXHRcdFx0XHRcdFx0XHQ8L0Zvcm1Db250YWluZXI+XG5cdFx0XHRcdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSxcblx0XHQnd2l0aEZvcm1Db250YWluZXJBbmRQbGFjZWhvbGRlcidcblx0KSxcbl0gKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBjYXN0QXJyYXksIGlzRW1wdHksIGlzRnVuY3Rpb24gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IEZvcm0gfSBmcm9tICdyZWFjdC1maW5hbC1mb3JtJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEZvcm1Db250YWluZXIgfSBmcm9tICcuL2Zvcm0tY29udGFpbmVyJztcbmltcG9ydCB7IEZvcm1EYXRhRGVidWdEdW1wIH0gZnJvbSAnLi9mb3JtLWRhdGEtZGVidWctZHVtcCc7XG5pbXBvcnQgeyBGb3JtRXJyb3JCb3VuZGFyeSB9IGZyb20gJy4vZm9ybS1lcnJvci1ib3VuZGFyeSc7XG5pbXBvcnQgeyBGb3JtUGxhY2Vob2xkZXIgfSBmcm9tICcuL2Zvcm0tcGxhY2Vob2xkZXInO1xuaW1wb3J0IEZvcm1TdWJtaXRCdXR0b24gZnJvbSAnLi9mb3JtLXN1Ym1pdC1idXR0b24nO1xuaW1wb3J0IEZvcm1DYW5jZWxCdXR0b24gZnJvbSAnLi9mb3JtLWNhbmNlbC1idXR0b24nO1xuXG4vKipcbiAqIHdpdGhGb3JtSGFuZGxlclxuICogSGlnaGVyLU9yZGVyLUNvbXBvbmVudCB0aGF0IHdyYXBzIHRoZSBzdXBwbGllZCBmb3JtIGNvbXBvbmVudFxuICogd2l0aCBhIFJlYWN0LUZpbmFsLUZvcm0gRm9ybSBjb21wb25lbnQgYW5kIGNvbm5lY3RzIGl0IHRvIHRoZVxuICogc3VwcGxpZWQgbG9hZCwgU3VibWl0LCBhbmQgUmVzZXQgaGFuZGxlcnMsIHdoaWNoIGFyZVxuICogcGFzc2VkIGFzIHByb3BzIHRvIHRoZSBmaW5hbCB3cmFwcGVkIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBGb3JtQ29tcG9uZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9IEZvcm1Db21wb25lbnQgd2l0aCBhZGRlZCBmb3JtIGhhbmRsaW5nXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoRm9ybUhhbmRsZXIgPSAoIEZvcm1Db21wb25lbnQgKSA9PiB7XG5cdC8qKlxuXHQgKiBGb3JtSGFuZGxlclxuXHQgKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmb3JtIGNvbXBvbmVudFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsb2FkSGFuZGxlciBjYWxsYmFjayB0aGF0IHN1cHBsaWVzIHRoZSBmb3JtIGRhdGFcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gc3VibWl0SGFuZGxlciBjYWxsYmFjayB0aGF0IHByb2Nlc3NlcyB0aGUgZm9ybVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNldEhhbmRsZXIgY2FsbGJhY2sgZm9yIHJlc2V0dGluZyB0aGUgZm9ybVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZXJyb3JNZXNzYWdlIGN1c3RvbSBtZXNzYWdlIGRpc3BsYXllZCB3aGVuIHRoaW5ncyBnbyBiYWRcblx0ICovXG5cdGNsYXNzIEZvcm1IYW5kbGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0XHQvKipcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcblx0XHQgKi9cblx0XHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0XHRzdXBlciggcHJvcHMgKTtcblx0XHRcdHRoaXMuc3RhdGUgPSB7XG5cdFx0XHRcdGxvYWRpbmc6IGZhbHNlLFxuXHRcdFx0XHRjaGFuZ2VzOiBmYWxzZSxcblx0XHRcdFx0ZGF0YToge30sXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBmdW5jdGlvblxuXHRcdCAqL1xuXHRcdG1hcmtDaGFuZ2VzID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5zZXRTdGF0ZSggeyBjaGFuZ2VzOiB0cnVlIH0gKTtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogQGZ1bmN0aW9uXG5cdFx0ICovXG5cdFx0cmVzZXQgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLnNldFN0YXRlKCB7IGNoYW5nZXM6IGZhbHNlIH0gKTtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogQGZ1bmN0aW9uXG5cdFx0ICovXG5cdFx0Y29tcG9uZW50RGlkTW91bnQoKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXMucHJvcHMubG9hZEhhbmRsZXIgKSApIHtcblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSggeyBsb2FkaW5nOiB0cnVlIH0gKTtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHRoaXMucHJvcHMubG9hZEhhbmRsZXIoKTtcblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSggeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRsb2FkaW5nLFxuXHRcdFx0XHRzdWJtaXRCdXR0b25UZXh0ID0gJycsXG5cdFx0XHRcdHJlc2V0SGFuZGxlcixcblx0XHRcdFx0Y2FuY2VsQnV0dG9uVGV4dCA9ICcnLFxuXHRcdFx0XHRlcnJvck1lc3NhZ2UgPSAnJyxcblx0XHRcdFx0bG9hZGluZ05vdGljZSA9ICcnLFxuXHRcdFx0XHRkZWNvcmF0b3JzID0gW10sXG5cdFx0XHRcdG11dGF0b3JzID0ge30sXG5cdFx0XHRcdGZvcm1DaGFuZ2VzID0gZmFsc2UsXG5cdFx0XHRcdHNldE11dGF0b3JDYWxsYmFja3MgPSAoKSA9PiBudWxsLFxuXHRcdFx0XHQuLi5mb3JtUHJvcHNcblx0XHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdFx0bGV0IHsgZm9ybURhdGEgPSBudWxsIH0gPSB0aGlzLnByb3BzO1xuXHRcdFx0Zm9ybURhdGEgPSBmb3JtRGF0YSA9PT0gbnVsbCAmJiAhIGlzRW1wdHkoIHRoaXMuc3RhdGUuZGF0YSApID9cblx0XHRcdFx0dGhpcy5zdGF0ZS5kYXRhIDpcblx0XHRcdFx0Zm9ybURhdGE7XG5cdFx0XHRjb25zdCBzaG93U3VibWl0ID0gdHlwZW9mIHRoaXMucHJvcHMuc3VibWl0SGFuZGxlciA9PT0gJ2Z1bmN0aW9uJztcblx0XHRcdGNvbnN0IHN1Ym1pdEhhbmRsZXIgPSB0aGlzLnByb3BzLnN1Ym1pdEhhbmRsZXIgfHwgKCAoKSA9PiBudWxsICk7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8Rm9ybUVycm9yQm91bmRhcnkgZXJyb3JNZXNzYWdlPXsgZXJyb3JNZXNzYWdlIH0gPlxuXHRcdFx0XHRcdDxGb3JtXG5cdFx0XHRcdFx0XHRvblN1Ym1pdD17IHN1Ym1pdEhhbmRsZXIgfVxuXHRcdFx0XHRcdFx0aW5pdGlhbFZhbHVlcz17IGZvcm1EYXRhIHx8IHt9IH1cblx0XHRcdFx0XHRcdGRlY29yYXRvcnM9eyBjYXN0QXJyYXkoIGRlY29yYXRvcnMgKSB9XG5cdFx0XHRcdFx0XHRtdXRhdG9ycz17IG11dGF0b3JzIH1cblx0XHRcdFx0XHRcdHJlbmRlcj17ICgge1xuXHRcdFx0XHRcdFx0XHRmb3JtLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZXMsXG5cdFx0XHRcdFx0XHRcdGhhbmRsZVN1Ym1pdCxcblx0XHRcdFx0XHRcdFx0c3VibWl0dGluZyxcblx0XHRcdFx0XHRcdFx0cHJpc3RpbmUsXG5cdFx0XHRcdFx0XHRcdGludmFsaWQsXG5cdFx0XHRcdFx0XHR9ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRzZXRNdXRhdG9yQ2FsbGJhY2tzKCBmb3JtLm11dGF0b3JzICk7XG5cdFx0XHRcdFx0XHRcdHByaXN0aW5lID0gcHJpc3RpbmUgJiYgISB0aGlzLnN0YXRlLmNoYW5nZXM7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IHNob3dTdWJtaXQgP1xuXHRcdFx0XHRcdFx0XHRcdDxGb3JtU3VibWl0QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRidXR0b25UZXh0PXsgc3VibWl0QnV0dG9uVGV4dCB9XG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJtaXR0aW5nPXsgc3VibWl0dGluZyB9XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17XG5cdFx0XHRcdFx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlzdGluZSB8fCBpbnZhbGlkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkgJiYgISBmb3JtQ2hhbmdlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8+IDpcblx0XHRcdFx0XHRcdFx0XHRudWxsO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmb3JtUmVzZXQgPSAoIGV2ZW50ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucmVzZXQoKTtcblx0XHRcdFx0XHRcdFx0XHRyZXNldEhhbmRsZXIoIGV2ZW50ICk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9ybS5yZXNldCggZXZlbnQgKTtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2FuY2VsQnV0dG9uID0gcmVzZXRIYW5kbGVyID9cblx0XHRcdFx0XHRcdFx0XHQ8Rm9ybUNhbmNlbEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uVGV4dD17IGNhbmNlbEJ1dHRvblRleHQgfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17IGZvcm1SZXNldCB9XG5cdFx0XHRcdFx0XHRcdFx0XHRwcmlzdGluZT17IHByaXN0aW5lIH1cblx0XHRcdFx0XHRcdFx0XHRcdHN1Ym1pdHRpbmc9eyBzdWJtaXR0aW5nIH1cblx0XHRcdFx0XHRcdFx0XHQvPiA6XG5cdFx0XHRcdFx0XHRcdFx0bnVsbDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQ8Zm9ybSBvblN1Ym1pdD17IGhhbmRsZVN1Ym1pdCB9ID5cblx0XHRcdFx0XHRcdFx0XHRcdDxGb3JtUGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bG9hZGluZz17IGxvYWRpbmcgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub3RpY2U9eyBsb2FkaW5nTm90aWNlIH1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Rm9ybUNvbnRhaW5lciBsb2FkaW5nPXsgbG9hZGluZyB9ID5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PEZvcm1Db21wb25lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbml0aWFsVmFsdWVzPXsgZm9ybURhdGEgfHwge30gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZXM9eyB2YWx1ZXMgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN1Ym1pdEJ1dHRvbj17IHN1Ym1pdEJ1dHRvbiB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FuY2VsQnV0dG9uPXsgY2FuY2VsQnV0dG9uIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtUmVzZXQ9eyBmb3JtUmVzZXQgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1hcmtDaGFuZ2VzPXsgdGhpcy5tYXJrQ2hhbmdlcyB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpc3RpbmU9eyBwcmlzdGluZSB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0eyAuLi5mb3JtUHJvcHMgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9Gb3JtQ29udGFpbmVyPlxuXHRcdFx0XHRcdFx0XHRcdFx0PEZvcm1EYXRhRGVidWdEdW1wIHZhbHVlcz17IHZhbHVlcyB9IC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9mb3JtPlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Gb3JtRXJyb3JCb3VuZGFyeT5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIEZvcm1IYW5kbGVyO1xufTtcbiIsImV4cG9ydCAqIGZyb20gJy4vbW9kZWwnO1xuZXhwb3J0IHsgRm9ybUNvbnRhaW5lciB9IGZyb20gJy4vYmFzZS9mb3JtLWNvbnRhaW5lcic7XG5leHBvcnQgeyBGb3JtUGxhY2Vob2xkZXIgfSBmcm9tICcuL2Jhc2UvZm9ybS1wbGFjZWhvbGRlcic7XG5leHBvcnQgeyB3aXRoRm9ybUhhbmRsZXIgfSBmcm9tICcuL2Jhc2Uvd2l0aC1mb3JtLWhhbmRsZXInO1xuZXhwb3J0IHsgRm9ybUlucHV0IH0gZnJvbSAnLi9pbnB1dHMvZm9ybS1pbnB1dCc7XG5leHBvcnQgeyBIaWRkZW5JbnB1dCB9IGZyb20gJy4vaW5wdXRzL2hpZGRlbi1pbnB1dCc7XG5leHBvcnQgeyBJbmxpbmVFZGl0SW5wdXQgfSBmcm9tICcuL2lucHV0cy9pbmxpbmUtZWRpdC1pbnB1dCc7XG5leHBvcnQgeyBJbnB1dExhYmVsIH0gZnJvbSAnLi9pbnB1dHMvYmFzZS9pbnB1dC1sYWJlbCc7XG5leHBvcnQge1xuXHRkZWZhdWx0IGFzIHR3b0NvbHVtbkFkbWluRm9ybUxheW91dCxcbn0gZnJvbSAnLi9sYXlvdXRzL3R3by1jb2x1bW4tYWRtaW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB2YWxpZGF0aW9ucyB9IGZyb20gJy4vdmFsaWRhdGlvbnMnO1xuZXhwb3J0IHtcblx0ZGVmYXVsdCBhcyB3aXRoRm9ybUNvbnRhaW5lckFuZFBsYWNlaG9sZGVyLFxufSBmcm9tICcuL2Jhc2Uvd2l0aC1mb3JtLWNvbnRhaW5lci1hbmQtcGxhY2Vob2xkZXInO1xuIiwiZXhwb3J0IGNvbnN0IEhUTUw1X0lOUFVUX1RZUEVTID0gW1xuXHQnY29sb3InLFxuXHQnY2hlY2tib3gnLFxuXHQnZGF0ZScsXG5cdCdkYXRldGltZS1sb2NhbCcsXG5cdCdlbWFpbCcsXG5cdCdmaWxlJyxcblx0J2hpZGRlbicsXG5cdCdpbWFnZScsXG5cdCdtb250aCcsXG5cdCdudW1iZXInLFxuXHQncGFzc3dvcmQnLFxuXHQncmFkaW8nLFxuXHQncmFuZ2UnLFxuXHQncmVzZXQnLFxuXHQnc2VhcmNoJyxcblx0J3NlbGVjdCcsXG5cdCd0ZWwnLFxuXHQndGV4dCcsXG5cdCd0ZXh0YXJlYScsXG5cdCd0aW1lJyxcblx0J3VybCcsXG5cdCd3ZWVrJyxcbl07XG5cbmV4cG9ydCBjb25zdCBIVE1MNV9JTlBVVF9UWVBFU19URVhUID0gW1xuXHQnY29sb3InLFxuXHQnZGF0ZScsXG5cdCdkYXRldGltZS1sb2NhbCcsXG5cdCdlbWFpbCcsXG5cdCdmaWxlJyxcblx0J2hpZGRlbicsXG5cdCdpbWFnZScsXG5cdCdtb250aCcsXG5cdCdudW1iZXInLFxuXHQncGFzc3dvcmQnLFxuXHQncmFuZ2UnLFxuXHQncmVzZXQnLFxuXHQnc2VhcmNoJyxcblx0J3RlbCcsXG5cdCd0ZXh0Jyxcblx0J3RpbWUnLFxuXHQndXJsJyxcblx0J3dlZWsnLFxuXTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBJbnB1dEVycm9yIH0gZnJvbSAnLi9pbnB1dC1lcnJvcic7XG5pbXBvcnQgeyBJbnB1dEhlbHBUZXh0IH0gZnJvbSAnLi9pbnB1dC1oZWxwLXRleHQnO1xuXG4vKipcbiAqIEJhc2ljIGZvcm0gaW5wdXQgbGF5b3V0IHdoZXJlIGlucHV0IGlzIGZvbGxvd2VkIGJ5IGlucHV0IGVycm9yIGFuZCBoZWxwIHRleHRcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtSW5wdXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWxwVGV4dElEXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZm9ybSBpbnB1dFxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdElucHV0TGF5b3V0ID0gKCB7XG5cdGZvcm1JbnB1dCxcblx0aW5wdXROYW1lLFxuXHRoZWxwVGV4dElELFxuXHRoZWxwVGV4dCxcbn0gKSA9PiB7XG5cdHJldHVybiBmb3JtSW5wdXQgJiYgKFxuXHRcdDxGcmFnbWVudD5cblx0XHRcdHsgZm9ybUlucHV0IH1cblx0XHRcdDxJbnB1dEVycm9yIGlucHV0TmFtZT17IGlucHV0TmFtZSB9IC8+XG5cdFx0XHQ8SW5wdXRIZWxwVGV4dFxuXHRcdFx0XHRoZWxwVGV4dElEPXsgaGVscFRleHRJRCB9XG5cdFx0XHRcdGhlbHBUZXh0PXsgaGVscFRleHQgfVxuXHRcdFx0Lz5cblx0XHQ8L0ZyYWdtZW50PlxuXHQpO1xufTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlc3ByZXNzby1pbnB1dC1lcnJvclwiOlwiZXNwcmVzc28taW5wdXQtZXJyb3JcIn07IiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEZpZWxkIH0gZnJvbSAncmVhY3QtZmluYWwtZm9ybSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgJy4vaW5wdXQtZXJyb3IuY3NzJztcblxuLyoqXG4gKiBAZnVuY3Rpb24gSW5wdXRFcnJvclxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0TmFtZVxuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBoZWxwIHRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IElucHV0RXJyb3IgPSAoIHsgaW5wdXROYW1lIH0gKSA9PiAoXG5cdDxGaWVsZFxuXHRcdG5hbWU9eyBpbnB1dE5hbWUgfVxuXHRcdHN1YnNjcmlwdGlvbj17IHsgdG91Y2hlZDogdHJ1ZSwgZXJyb3I6IHRydWUgfSB9XG5cdFx0cmVuZGVyPXsgKCB7IG1ldGE6IHsgdG91Y2hlZCwgZXJyb3IgfSB9ICkgPT5cblx0XHRcdHRvdWNoZWQgJiYgZXJyb3IgP1xuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0aWQ9eyBgJHsgaW5wdXROYW1lIH0taW5wdXQtZXJyb3JgIH1cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJlc3ByZXNzby1pbnB1dC1lcnJvclwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3Bhbj57IGVycm9yIH08L3NwYW4+XG5cdFx0XHRcdDwvZGl2PiA6XG5cdFx0XHRcdG51bGxcblx0XHR9XG5cdC8+XG4pO1xuXG5JbnB1dEVycm9yLnByb3BUeXBlcyA9IHsgaW5wdXROYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQgfTtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogQGZ1bmN0aW9uIElucHV0SGVscFRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWxwVGV4dElEXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgaGVscCB0ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBJbnB1dEhlbHBUZXh0ID0gKCB7IGhlbHBUZXh0SUQsIGhlbHBUZXh0IH0gKSA9PiB7XG5cdHJldHVybiBoZWxwVGV4dCA/IChcblx0XHQ8cCBpZD17IGhlbHBUZXh0SUQgfSBjbGFzc05hbWU9XCJlc3ByZXNzby1pbnB1dC1oZWxwLXRleHRcIiA+XG5cdFx0XHR7IGhlbHBUZXh0IH1cblx0XHQ8L3A+XG5cdCkgOiBudWxsO1xufTtcblxuSW5wdXRIZWxwVGV4dC5wcm9wVHlwZXMgPSB7XG5cdGhlbHBUZXh0SUQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0aGVscFRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBnZW5lcmF0ZXMgYW4gaHRtbCA8bGFiZWw+IHRhZ1xuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbEZvclxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtib29sZWFufSByZXF1aXJlZFxuICogQHBhcmFtIHtib29sZWFufSBzdHJvbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaGlkZGVuXG4gKiBAcGFyYW0ge09iamVjdH0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJlbmRlcmVkIGZvcm0gbGFiZWxcbiAqL1xuZXhwb3J0IGNvbnN0IElucHV0TGFiZWwgPSAoIHtcblx0bGFiZWwsXG5cdGh0bWxGb3IsXG5cdGh0bWxDbGFzcyA9ICcnLFxuXHRyZXF1aXJlZCA9IGZhbHNlLFxuXHRzdHJvbmcgPSB0cnVlLFxuXHRoaWRkZW4gPSBmYWxzZSxcblx0Y2hpbGRyZW4sXG5cdC4uLmF0dHJpYnV0ZXNcbn0gKSA9PiB7XG5cdC8vIGFkZCBhc3RlcmlzayB0byBsYWJlbCBidXQgbm90IGlmIGl0IGlzIGZvciBhIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvblxuXHRjb25zdCBhc3RlcmlzayA9IHJlcXVpcmVkICYmIGNoaWxkcmVuID09PSB1bmRlZmluZWQgP1xuXHRcdCggPHNwYW4gY2xhc3NOYW1lPVwicmVxdWlyZWRcIj4qPC9zcGFuPiApIDpcblx0XHQnJztcblx0bGFiZWwgPSBzdHJvbmcgPyAoIDxzdHJvbmc+eyBsYWJlbCB9PC9zdHJvbmc+ICkgOiBsYWJlbDtcblxuXHRodG1sQ2xhc3MgPSBjbGFzc05hbWVzKCB7XG5cdFx0WyBodG1sQ2xhc3MgXTogaHRtbENsYXNzLFxuXHRcdFsgcmVxdWlyZWQgXTogcmVxdWlyZWQsXG5cdFx0J2NvbC1mb3JtLWxhYmVsJzogISBoaWRkZW4sXG5cdFx0J3NjcmVlbi1yZWFkZXItdGV4dCc6IGhpZGRlbixcblx0fSApO1xuXG5cdHJldHVybiAoXG5cdFx0PGxhYmVsIGh0bWxGb3I9eyBodG1sRm9yIH0gY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0geyAuLi5hdHRyaWJ1dGVzIH0+XG5cdFx0XHR7IGNoaWxkcmVuIH1cblx0XHRcdHsgbGFiZWwgfXsgYXN0ZXJpc2sgfVxuXHRcdDwvbGFiZWw+XG5cdCk7XG59O1xuXG5JbnB1dExhYmVsLnByb3BUeXBlcyA9IHtcblx0bGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKS5pc1JlcXVpcmVkLFxuXHRodG1sRm9yOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0cmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXHRzdHJvbmc6IFByb3BUeXBlcy5ib29sLFxuXHRjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0UHJvcFR5cGVzLmFycmF5T2YoIFByb3BUeXBlcy5vYmplY3QgKSxcblx0XSApLFxufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0FycmF5LCBpbmRleE9mIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogZ2VuZXJhdGVzIHRoZSBpbml0aWFsIGNoZWNrZWQgc3RhdGVcbiAqIGZvciBhIHNldCBvZiBjaGVja2JveCBvciByYWRpbyBidXR0b25cbiAqIG9wdGlvbnMgYmFzZWQgb24gdGhlIHNldCBkZWZhdWx0VmFsdWUuXG4gKiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHN1cHBseWluZ1xuICogYW4gYWx0ZXJuYXRlIHZhbHVlIHZpYSB0aGUgZm91cnRoIHBhcmFtLFxuICogd2hpY2ggaXMgdXNlZCB0byByZXNldCBhbGwgdmFsdWVzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0SWRcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdGlvbnNcbiAqIEBwYXJhbSB7bWl4ZWR9IHZhbHVlc1xuICogQHBhcmFtIHttaXhlZH0gcmVzZXRcbiAqIEByZXR1cm4ge09iamVjdH0gc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IE9wdGlvbkNoZWNrZWRTdGF0ZSA9ICggaW5wdXRJZCwgb3B0aW9ucywgdmFsdWVzLCByZXNldCApID0+IHtcblx0Y29uc3QgY2hlY2tlZCA9IHt9O1xuXHRvcHRpb25zID0gaXNBcnJheSggb3B0aW9ucyApID8gb3B0aW9ucyA6IFtdO1xuXHR2YWx1ZXMgPSBpc0FycmF5KCB2YWx1ZXMgKSA/IHZhbHVlcyA6IFsgdmFsdWVzIF07XG5cdG9wdGlvbnMuZm9yRWFjaCggZnVuY3Rpb24oIG9wdGlvbiwgaW5kZXggKSB7XG5cdFx0Y29uc3Qga2V5ID0gaW5wdXRJZCArICctJyArIGluZGV4O1xuXHRcdGNvbnN0IGlzU2VsZWN0ZWQgPSBpbmRleE9mKCB2YWx1ZXMsIG9wdGlvbi52YWx1ZSApICE9PSAtMTtcblx0XHRjaGVja2VkWyBrZXkgXSA9IHJlc2V0ID09PSB1bmRlZmluZWQgPyBpc1NlbGVjdGVkIDogcmVzZXQ7XG5cdH0gKTtcblx0cmV0dXJuIGNoZWNrZWQ7XG59O1xuXG5PcHRpb25DaGVja2VkU3RhdGUucHJvcFR5cGVzID0ge1xuXHRpbnB1dElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuXHRkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcblx0dmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tICdyZWFjdC1maW5hbC1mb3JtJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IElucHV0TGFiZWwgfSBmcm9tICcuL2lucHV0LWxhYmVsJztcblxuLyoqXG4gKiBnZW5lcmF0ZXMgdGhlIDxsYWJlbD48aW5wdXQ+IHBhaXJpbmdzIGZvclxuICogYSBzZXQgb2YgaHRtbCBjaGVja2JveCBvciByYWRpbyBpbnB1dHNcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtPYmplY3R9IGNoZWNrZWRTdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxJZFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsQ2xhc3NcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdGlvbnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uQ2hhbmdlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkNsaWNrXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRJRFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFTZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGNzcyBjbGFzcyBkZXNjcmliaW5nIGxhYmVsIHNpemVcbiAqL1xuZXhwb3J0IGNvbnN0IE9wdGlvbklucHV0cyA9ICgge1xuXHR0eXBlLFxuXHRuYW1lLFxuXHRjaGVja2VkU3RhdGUsXG5cdGh0bWxJZCxcblx0aHRtbENsYXNzLFxuXHRsYWJlbENsYXNzLFxuXHRvcHRpb25zLFxuXHRvbkNsaWNrLFxuXHRoZWxwVGV4dElELFxuXHRkYXRhU2V0LFxuXHQuLi5hdHRyaWJ1dGVzXG59ICkgPT4ge1xuXHRkZWxldGUgYXR0cmlidXRlcy5pbml0aWFsVmFsdWU7XG5cdG9wdGlvbnMgPSBpc0FycmF5KCBvcHRpb25zICkgPyBvcHRpb25zIDogWyBvcHRpb25zIF07XG5cdGNvbnN0IGNvdW50ID0gb3B0aW9ucy5sZW5ndGg7XG5cdGxldCBjaGVja2VkID0gZmFsc2U7XG5cdHJldHVybiBvcHRpb25zLm1hcCggKCBvcHRpb24sIGluZGV4ICkgPT4ge1xuXHRcdGNvbnN0IGlkID0gYCR7IGh0bWxJZCB9LSR7IGluZGV4IH1gO1xuXHRcdGNoZWNrZWQgPSBjaGVja2VkU3RhdGVbIGlkIF07XG5cdFx0cmV0dXJuIChcblx0XHRcdDxJbnB1dExhYmVsXG5cdFx0XHRcdGtleT17IGluZGV4IH1cblx0XHRcdFx0bGFiZWw9eyBvcHRpb24ubGFiZWwgfVxuXHRcdFx0XHRodG1sRm9yPXsgaWQgfVxuXHRcdFx0XHRodG1sQ2xhc3M9eyBgJHsgbGFiZWxDbGFzcyB9ICR7IGNoZWNrZWQgPyAnYWN0aXZlJyA6ICcnIH1gIH1cblx0XHRcdFx0c3Ryb25nPXsgZmFsc2UgfVxuXHRcdFx0XHRvbkNsaWNrPXsgb25DbGljayB9XG5cdFx0XHQ+XG5cdFx0XHRcdDxGaWVsZFxuXHRcdFx0XHRcdGNvbXBvbmVudD1cImlucHV0XCJcblx0XHRcdFx0XHR0eXBlPXsgdHlwZSB9XG5cdFx0XHRcdFx0bmFtZT17IG5hbWUgfVxuXHRcdFx0XHRcdGlkPXsgaWQgfVxuXHRcdFx0XHRcdGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9XG5cdFx0XHRcdFx0dmFsdWU9eyBvcHRpb24udmFsdWUgfVxuXHRcdFx0XHRcdGNoZWNrZWQ9eyBjaGVja2VkIH1cblx0XHRcdFx0XHRtdWx0aXBsZT17IGNvdW50ID4gMSB9XG5cdFx0XHRcdFx0YXJpYS1kZXNjcmliZWRieT17IGhlbHBUZXh0SUQgfVxuXHRcdFx0XHRcdHsgLi4uZGF0YVNldCB9XG5cdFx0XHRcdFx0eyAuLi5hdHRyaWJ1dGVzIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvSW5wdXRMYWJlbD5cblx0XHQpO1xuXHR9ICk7XG59O1xuXG5PcHRpb25JbnB1dHMucHJvcFR5cGVzID0ge1xuXHR0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdG5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0Y2hlY2tlZFN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG5cdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGxhYmVsQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0b3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoXG5cdFx0UHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0XHRsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdFx0dmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRcdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdF0gKSxcblx0XHR9ICksXG5cdCksXG5cdG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblx0b25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblx0aGVscFRleHRJRDogUHJvcFR5cGVzLnN0cmluZyxcblx0ZGF0YVNldDogUHJvcFR5cGVzLm9iamVjdCxcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIGZpbmRzIG1heGltdW0gb3B0aW9uIHZhbHVlIGxlbmd0aCB0byBkZXRlcm1pbmUgbGFiZWwgc2l6ZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtBcnJheX0gb3B0aW9uc1xuICogQHJldHVybiB7c3RyaW5nfSBjc3MgY2xhc3MgZGVzY3JpYmluZyBsYWJlbCBzaXplXG4gKi9cbmV4cG9ydCBjb25zdCBPcHRpb25MYWJlbFNpemUgPSAoIG9wdGlvbnMgKSA9PiB7XG5cdGxldCBzaXplID0gMDtcblx0b3B0aW9ucyA9IGlzQXJyYXkoIG9wdGlvbnMgKSA/IG9wdGlvbnMgOiBbXTtcblx0b3B0aW9ucy5mb3JFYWNoKCBmdW5jdGlvbiggb3B0aW9uICkge1xuXHRcdHNpemUgPSBvcHRpb24ubGFiZWwubGVuZ3RoID4gc2l6ZSA/IG9wdGlvbi5sYWJlbC5sZW5ndGggOiBzaXplO1xuXHR9ICk7XG5cdGxldCBsYWJlbFNpemUgPSAnIG1lZGl1bS1sYmwnO1xuXHRpZiAoIHNpemUgPCAzICkge1xuXHRcdGxhYmVsU2l6ZSA9ICcgbmFuby1sYmwnO1xuXHR9IGVsc2UgaWYgKCBzaXplIDwgNiApIHtcblx0XHRsYWJlbFNpemUgPSAnIG1pY3JvLWxibCc7XG5cdH0gZWxzZSBpZiAoIHNpemUgPCAxMiApIHtcblx0XHRsYWJlbFNpemUgPSAnIHRpbnktbGJsJztcblx0fSBlbHNlIGlmICggc2l6ZSA8IDI1ICkge1xuXHRcdGxhYmVsU2l6ZSA9ICcgc21hbGwtbGJsJztcblx0fSBlbHNlIGlmICggc2l6ZSA8IDUwICkge1xuXHRcdGxhYmVsU2l6ZSA9ICcgbWVkaXVtLWxibCc7XG5cdH0gZWxzZSBpZiAoIHNpemUgPj0gMTAwICkge1xuXHRcdGxhYmVsU2l6ZSA9ICcgYmlnLWxibCc7XG5cdH1cblx0cmV0dXJuIGxhYmVsU2l6ZTtcbn07XG5cbk9wdGlvbkxhYmVsU2l6ZS5wcm9wVHlwZXMgPSB7XG5cdG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFxuXHRcdFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdFx0bGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRcdHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRdICksXG5cdFx0fSApLFxuXHQpLFxufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFuVXBJbnB1dEF0dHJpYnV0ZXMgPSAoIGF0dHJpYnV0ZXMgPSB7fSApID0+IHtcblx0cmV0dXJuIG9taXQoIGF0dHJpYnV0ZXMsIFtcblx0XHQnY2hpbGRyZW4nLFxuXHRcdCdjb2xTaXplJyxcblx0XHQnaGVscFRleHQnLFxuXHRcdCdoZWxwVGV4dElEJyxcblx0XHQnbGFiZWwnLFxuXHRcdCdyZW5kZXInLFxuXHRcdCd2YWxpZGF0aW9ucycsXG5cdF0gKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fSB2YWxpZGF0b3JzXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gY29tYmluZWQgdmFsaWRhdGlvbiBmdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgY29tcG9zZVZhbGlkYXRvcnMgPSAoIC4uLnZhbGlkYXRvcnMgKSA9PiAoIHZhbHVlICkgPT4ge1xuXHRyZXR1cm4gdmFsaWRhdG9ycy5yZWR1Y2UoXG5cdFx0KCBlcnJvciwgdmFsaWRhdG9yICkgPT4gZXJyb3IgfHwgdmFsaWRhdG9yKCB2YWx1ZSApLFxuXHRcdHVuZGVmaW5lZFxuXHQpO1xufTtcblxuLyoqXG4gKiBsb29wcyB0aHJvdWdoIHRoZSBpbnB1dCdzIHNldCB2YWxpZGF0b3JzIGFuZFxuICogYWRkcyBhdHRyaWJ1dGVzIGZvciBjb3JyZXNwb25kaW5nIEhUTUwgYXR0cmlidXRlcyBhY2NvcmRpbmdseS5cbiAqIFJpZ2h0IG5vdywgdGhpcyBpcyBvbmx5IGRvaW5nIHNvIGZvciB0aGUgXCJyZXF1aXJlZFwiIHZhbGlkYXRvci5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0FycmF5fSB2YWxpZGF0b3JzXG4gKiBAcmV0dXJuIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZFZhbGlkYXRvcnNUb0F0dHJpYnV0ZXMgPSAoXG5cdGF0dHJpYnV0ZXMgPSB7fSxcblx0dmFsaWRhdG9ycyA9IFtdLFxuKSA9PiB7XG5cdHZhbGlkYXRvcnMuZm9yRWFjaChcblx0XHQoIHZhbGlkYXRvciApID0+IHtcblx0XHRcdGNvbnN0IG5hbWUgPSB2YWxpZGF0b3IgJiYgdmFsaWRhdG9yLm5hbWUgPyB2YWxpZGF0b3IubmFtZSA6ICcnO1xuXHRcdFx0c3dpdGNoICggbmFtZSApIHtcblx0XHRcdFx0Y2FzZSAncmVxdWlyZWQnIDpcblx0XHRcdFx0XHRhdHRyaWJ1dGVzLnJlcXVpcmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdCk7XG5cdHJldHVybiBhdHRyaWJ1dGVzO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl9IG9wdGlvbnNcbiAqIEByZXR1cm4ge0FycmF5fSB2YWx1ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFZhbHVlc0Zvck9wdGlvbnMgPSAoIG9wdGlvbnMgKSA9PiBvcHRpb25zLm1hcChcblx0KCBvcHRpb24gKSA9PiBvcHRpb24udmFsdWVcbik7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVNldFxuICogQHJldHVybiB7T2JqZWN0fSBkYXRhU2V0XG4gKi9cbmV4cG9ydCBjb25zdCBwcmVwYXJlRGF0YVNldCA9ICggZGF0YVNldCA9IHt9ICkgPT4ge1xuXHRmb3IgKCBjb25zdCBrZXkgaW4gZGF0YVNldCApIHtcblx0XHRpZiAoIGRhdGFTZXQuaGFzT3duUHJvcGVydHkoIGtleSApICkge1xuXHRcdFx0aWYgKCAhIGtleS5zdGFydHNXaXRoKCAnZGF0YS0nICkgKSB7XG5cdFx0XHRcdGRhdGFTZXRbIGBkYXRhLSR7IGtleSB9YCBdID0gZGF0YVNldFsga2V5IF07XG5cdFx0XHRcdGRlbGV0ZSBkYXRhU2V0WyBrZXkgXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGFTZXQ7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgT3B0aW9uQ2hlY2tlZFN0YXRlIH0gZnJvbSAnLi9iYXNlL29wdGlvbi1jaGVja2VkLXN0YXRlJztcbmltcG9ydCB7IE9wdGlvbklucHV0cyB9IGZyb20gJy4vYmFzZS9vcHRpb24taW5wdXRzJztcbmltcG9ydCB7IE9wdGlvbkxhYmVsU2l6ZSB9IGZyb20gJy4vYmFzZS9vcHRpb24tbGFiZWwtc2l6ZSc7XG5cbi8qKlxuICogZ2VuZXJhdGVzIG9uZSBvciBtb3JlIGh0bWwgY2hlY2tib3ggaW5wdXRzXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbElkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdGlvbnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uQ2hhbmdlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJ0bkdyb3VwXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRJRFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFTZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFdpZHRoXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogQHJldHVybiB7c3RyaW5nfSByZW5kZXJlZCBkYXRlIG5hbWUgZm9ybSByb3dcbiAqL1xuZXhwb3J0IGNsYXNzIENoZWNrYm94SW5wdXQgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHR2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XSApLFxuXHRcdG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheSxcblx0XHRvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0YnRuR3JvdXA6IFByb3BUeXBlcy5ib29sLFxuXHRcdGlucHV0V2lkdGg6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0aGVscFRleHRJRDogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRkYXRhU2V0OiBQcm9wVHlwZXMub2JqZWN0LFxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKCBwcm9wcyApIHtcblx0XHRzdXBlciggcHJvcHMgKTtcblx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0Y2hlY2tlZDogdGhpcy5yZXNldFN0YXRlKCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHJldHVybiB7T2JqZWN0fSBzdGF0ZVxuXHQgKi9cblx0cmVzZXRTdGF0ZSA9ICgpID0+IHtcblx0XHRyZXR1cm4gT3B0aW9uQ2hlY2tlZFN0YXRlKFxuXHRcdFx0dGhpcy5wcm9wcy5odG1sSWQsXG5cdFx0XHR0aGlzLnByb3BzLm9wdGlvbnMsXG5cdFx0XHR0aGlzLnByb3BzLmluaXRpYWxWYWx1ZSxcblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHR0b2dnbGVDaGVja2VkID0gKCBldmVudCApID0+IHtcblx0XHRpZiAoIGV2ZW50LnRhcmdldCAmJlxuXHRcdFx0ZXZlbnQudGFyZ2V0LmlkICYmXG5cdFx0XHRldmVudC50YXJnZXQuY2hlY2tlZCAhPT0gdW5kZWZpbmVkXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBjaGVja2VkID0gdGhpcy5zdGF0ZS5jaGVja2VkO1xuXHRcdFx0Y2hlY2tlZFsgZXZlbnQudGFyZ2V0LmlkIF0gPSBldmVudC50YXJnZXQuY2hlY2tlZDtcblx0XHRcdHRoaXMuc2V0U3RhdGUoIHsgY2hlY2tlZCB9ICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0aHRtbElkLFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHJlcXVpcmVkLFxuXHRcdFx0aGVscFRleHRJRCxcblx0XHRcdGJ0bkdyb3VwID0gdHJ1ZSxcblx0XHRcdGlucHV0V2lkdGggPSAnJyxcblx0XHRcdC4uLmF0dHJpYnV0ZXNcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRsZXQgeyBodG1sQ2xhc3MgfSA9IHRoaXMucHJvcHM7XG5cblx0XHRodG1sQ2xhc3MgPSByZXF1aXJlZCA/XG5cdFx0XHRgJHsgaHRtbENsYXNzIH0gZWUtY2hlY2tib3gtZ3JvdXAtcmVxdWlyZWRgIDpcblx0XHRcdGh0bWxDbGFzcztcblx0XHRjb25zdCBsYWJlbENsYXNzID0gYnRuR3JvdXAgP1xuXHRcdFx0J2J0biBidG4tcHJpbWFyeScgOlxuXHRcdFx0J2VlLWNoZWNrYm94LWxhYmVsLWFmdGVyJyArIE9wdGlvbkxhYmVsU2l6ZSggb3B0aW9ucyApO1xuXHRcdGxldCBkaXZDbGFzcyA9IGJ0bkdyb3VwID8gJ2J0bi1ncm91cCcgOiAnZWUtY2hlY2tib3gtZ3JvdXAnO1xuXHRcdGRpdkNsYXNzID0gaW5wdXRXaWR0aCA/XG5cdFx0XHRgJHsgZGl2Q2xhc3MgfSBlZS1pbnB1dC13aWR0aC0keyBpbnB1dFdpZHRoIH1gIDpcblx0XHRcdGRpdkNsYXNzO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGRpdkNsYXNzIH0+XG5cdFx0XHRcdDxPcHRpb25JbnB1dHNcblx0XHRcdFx0XHR0eXBlPVwiY2hlY2tib3hcIlxuXHRcdFx0XHRcdG5hbWU9eyBuYW1lIH1cblx0XHRcdFx0XHRjaGVja2VkU3RhdGU9eyB0aGlzLnN0YXRlLmNoZWNrZWQgfVxuXHRcdFx0XHRcdGh0bWxJZD17IGh0bWxJZCB9XG5cdFx0XHRcdFx0aHRtbENsYXNzPXsgaHRtbENsYXNzIH1cblx0XHRcdFx0XHRsYWJlbENsYXNzPXsgbGFiZWxDbGFzcyB9XG5cdFx0XHRcdFx0b3B0aW9ucz17IG9wdGlvbnMgfVxuXHRcdFx0XHRcdG9uQ2xpY2s9eyB0aGlzLnRvZ2dsZUNoZWNrZWQgfVxuXHRcdFx0XHRcdGhlbHBUZXh0SUQ9eyBoZWxwVGV4dElEIH1cblx0XHRcdFx0XHR7IC4uLmF0dHJpYnV0ZXMgfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWRhdGUtdGltZS1pbnB1dC10ZXh0LWZpZWxkLXdyYXBwZXJcIjpcImVlLWRhdGUtdGltZS1pbnB1dC10ZXh0LWZpZWxkLXdyYXBwZXJcIixcImVlLWRhdGUtdGltZS1pbnB1dC10ZXh0LWZpZWxkXCI6XCJlZS1kYXRlLXRpbWUtaW5wdXQtdGV4dC1maWVsZFwiLFwiZWUtZGF0ZS10aW1lLWlucHV0LWRpYWxvZ1wiOlwiZWUtZGF0ZS10aW1lLWlucHV0LWRpYWxvZ1wiLFwiZWUtZGF0ZS10aW1lLWlucHV0LXBpY2tlci13cmFwcGVyXCI6XCJlZS1kYXRlLXRpbWUtaW5wdXQtcGlja2VyLXdyYXBwZXJcIixcImVlLWRhdGUtdGltZS1pbnB1dC1idXR0b25zLXdyYXBwZXJcIjpcImVlLWRhdGUtdGltZS1pbnB1dC1idXR0b25zLXdyYXBwZXJcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJ3JlYWN0LWZpbmFsLWZvcm0nO1xuaW1wb3J0IHtcblx0QnV0dG9uLFxuXHREYXRlVGltZVBpY2tlcixcblx0RHJvcGRvd24sXG5cdEljb25CdXR0b24sXG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBFTlRFUiwgU1BBQ0UgfSBmcm9tICdAd29yZHByZXNzL2tleWNvZGVzJztcbmltcG9ydCB7IEVzcHJlc3NvSWNvbiwgRVNQUkVTU09fSUNPTl9DQUxFTkRBUiB9IGZyb20gJy4uLy4uL3VpL2ltYWdlL2VzcHJlc3NvLWljb24nO1xuaW1wb3J0IHsgU0VSVkVSX0xPQ0FMRSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuaW1wb3J0IHsgREFURV9USU1FX0ZPUk1BVF9TSVRFLCBUSU1FX0ZPUk1BVF9TSVRFIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgU2VydmVyRGF0ZVRpbWUgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcblxuaW1wb3J0ICcuL2RhdGUtdGltZS1pbnB1dC5jc3MnO1xuLyoqXG4gKiBnZW5lcmF0ZXMgYW4gSFRNTDUgdGV4dCBpbnB1dCB0aGF0IG9wZW5zIGEgV1AgRHJvcGRvd24gKyBEYXRlVGltZVBpY2tlclxuICogZm9yIHBvcHVsYXRpbmcgdGhlIGlucHV0IHdpdGggYSBkYXRlIGFuZCB0aW1lXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWxwVGV4dElEXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVNldFxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBpbnB1dFdpZHRoXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogQHJldHVybiB7c3RyaW5nfSByZW5kZXJlZCBkYXRlIG5hbWUgZm9ybSByb3dcbiAqL1xuY2xhc3MgRGF0ZVRpbWVEcm9wZG93biBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0aW5wdXQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcblx0XHRpbml0aWFsVmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdF0gKS5pc1JlcXVpcmVkLFxuXHRcdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRoZWxwVGV4dElEOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdGRhdGFTZXQ6IFByb3BUeXBlcy5vYmplY3QsXG5cdFx0aW5wdXRXaWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XSApLFxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKCBwcm9wcyApIHtcblx0XHRzdXBlciggcHJvcHMgKTtcblx0XHRjb25zdCBpbml0aWFsVmFsdWUgPSBuZXcgRGF0ZSgpO1xuXHRcdHRoaXMuc3RhdGUgPSB7XG5cdFx0XHRpczEySG91clRpbWU6IHRydWUsXG5cdFx0XHRlZGl0b3JPcGVuOiBmYWxzZSxcblx0XHRcdGlucHV0VmFsdWU6IGluaXRpYWxWYWx1ZSxcblx0XHRcdG5ld1ZhbHVlOiBpbml0aWFsVmFsdWUsXG5cdFx0XHRwcmV2VmFsdWU6IGluaXRpYWxWYWx1ZSxcblx0XHRcdG9uQ2hhbmdlOiBudWxsLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogb3BlbnMgYW5kIGNsb3NlcyBEYXRlVGltZVBpY2tlciBNb2RhbFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICovXG5cdGNvbXBvbmVudERpZE1vdW50ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGluaXRpYWxWYWx1ZSA9IHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlID9cblx0XHRcdG5ldyBEYXRlKCB0aGlzLnByb3BzLmluaXRpYWxWYWx1ZSApIDpcblx0XHRcdG5ldyBEYXRlKCk7XG5cdFx0Ly8gVG8ga25vdyBpZiB0aGUgY3VycmVudCB0aW1lem9uZSBpcyBhIDEyIGhvdXIgdGltZVxuXHRcdC8vIHdlIGxvb2sgZm9yIFwiYVwiIGluIHRoZSB0aW1lIGZvcm1hdFxuXHRcdC8vIFdlIGFsc28gbWFrZSBzdXJlIHRoaXMgYSBpcyBub3QgZXNjYXBlZCBieSBhIFwiL1wiXG5cdFx0Y29uc3QgaXMxMkhvdXJUaW1lID0gL2EoPyFcXFxcKS9pLnRlc3QoXG5cdFx0XHRUSU1FX0ZPUk1BVF9TSVRFXG5cdFx0XHQvLyBUZXN0IG9ubHkgdGhlIGxvd2VyIGNhc2UgYVxuXHRcdFx0XHQudG9Mb3dlckNhc2UoKVxuXHRcdFx0XHQvLyBSZXBsYWNlIFwiLy9cIiB3aXRoIGVtcHR5IHN0cmluZ3Ncblx0XHRcdFx0LnJlcGxhY2UoIC9cXFxcXFxcXC9nLCAnJyApXG5cdFx0XHRcdC8vIFJldmVyc2UgdGhlIHN0cmluZyBhbmQgdGVzdCBmb3IgXCJhXCIgbm90IGZvbGxvd2VkIGJ5IGEgc2xhc2hcblx0XHRcdFx0LnNwbGl0KCAnJyApLnJldmVyc2UoKS5qb2luKCAnJyApXG5cdFx0KTtcblx0XHR0aGlzLnNldFN0YXRlKCB7XG5cdFx0XHRpczEySG91clRpbWUsXG5cdFx0XHRlZGl0b3JPcGVuOiBmYWxzZSxcblx0XHRcdGlucHV0VmFsdWU6IGluaXRpYWxWYWx1ZSxcblx0XHRcdG5ld1ZhbHVlOiBpbml0aWFsVmFsdWUsXG5cdFx0XHRwcmV2VmFsdWU6IGluaXRpYWxWYWx1ZSxcblx0XHRcdG9uQ2hhbmdlOiB0aGlzLnByb3BzLmlucHV0ICYmIHRoaXMucHJvcHMuaW5wdXQub25DaGFuZ2UgP1xuXHRcdFx0XHR0aGlzLnByb3BzLmlucHV0Lm9uQ2hhbmdlIDpcblx0XHRcdFx0bnVsbCxcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIG9wZW5zIGFuZCBjbG9zZXMgRGF0ZVRpbWVQaWNrZXIgTW9kYWxcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqL1xuXHR0b2dnbGVFZGl0b3IgPSAoKSA9PiB7XG5cdFx0dGhpcy5zZXRTdGF0ZSggKCBwcmV2U3RhdGUgKSA9PiAoXG5cdFx0XHR7IGVkaXRvck9wZW46ICEgcHJldlN0YXRlLmVkaXRvck9wZW4gfVxuXHRcdCkgKTtcblx0fTtcblxuXHQvKipcblx0ICogb3BlbnMgYW5kIGNsb3NlcyBEYXRlVGltZVBpY2tlciBNb2RhbFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld0RhdGVcblx0ICovXG5cdG9uQ2hhbmdlID0gKCBuZXdEYXRlICkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoIHsgbmV3VmFsdWU6IG5ldyBEYXRlKCBuZXdEYXRlICkgfSApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBvcGVucyBhbmQgY2xvc2VzIERhdGVUaW1lUGlja2VyIE1vZGFsXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKi9cblx0Y2FuY2VsID0gKCkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoICggcHJldlN0YXRlICkgPT4gKFxuXHRcdFx0eyBpbnB1dFZhbHVlOiBwcmV2U3RhdGUucHJldlZhbHVlIH1cblx0XHQpICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIHN1Ym1pdHMgdGhlIHZhbHVlIGZyb20gdGhlIERhdGVwaWNrZXJcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqL1xuXHR1cGRhdGUgPSAoKSA9PiB7XG5cdFx0dGhpcy5zZXRTdGF0ZSggKCBwcmV2U3RhdGUgKSA9PiB7XG5cdFx0XHRpZiAoIHR5cGVvZiBwcmV2U3RhdGUub25DaGFuZ2UgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHRcdHByZXZTdGF0ZS5vbkNoYW5nZSggcHJldlN0YXRlLm5ld1ZhbHVlLnRvSVNPU3RyaW5nKCkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlucHV0VmFsdWU6IHByZXZTdGF0ZS5uZXdWYWx1ZSxcblx0XHRcdFx0cHJldlZhbHVlOiBwcmV2U3RhdGUubmV3VmFsdWUsXG5cdFx0XHR9O1xuXHRcdH0gKTtcblx0fTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0aW5wdXQsXG5cdFx0XHRodG1sSWQsXG5cdFx0XHRodG1sQ2xhc3MsXG5cdFx0XHRoZWxwVGV4dElELFxuXHRcdFx0ZGF0YVNldCxcblx0XHRcdGlucHV0V2lkdGggPSAnJyxcblx0XHRcdC4uLmF0dHJpYnV0ZXNcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRkZWxldGUgYXR0cmlidXRlcy5pbml0aWFsVmFsdWU7XG5cdFx0Y29uc3QgaW5wdXRDbGFzcyA9IGNsYXNzTmFtZXMoIHtcblx0XHRcdFsgaHRtbENsYXNzIF06IHRydWUsXG5cdFx0XHQnZWUtZGF0ZS10aW1lLWlucHV0LXRleHQtZmllbGQnOiB0cnVlLFxuXHRcdFx0J2Zvcm0tY29udHJvbCc6IHRydWUsXG5cdFx0XHRbIGBlZS1pbnB1dC13aWR0aC0keyBpbnB1dFdpZHRoIH1gIF06IGlucHV0V2lkdGgsXG5cdFx0fSApO1xuXHRcdGNvbnN0IGlucHV0VmFsdWUgPSBTZXJ2ZXJEYXRlVGltZS5mcm9tSlNEYXRlKCB0aGlzLnN0YXRlLmlucHV0VmFsdWUgKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PERyb3Bkb3duXG5cdFx0XHRcdHBvc2l0aW9uPVwiYm90dG9tIGNlbnRlclwiXG5cdFx0XHRcdGNvbnRlbnRDbGFzc05hbWU9XCJlZS1kYXRlLXRpbWUtaW5wdXQtZGlhbG9nXCJcblx0XHRcdFx0cmVuZGVyVG9nZ2xlPXsgKCB7IG9uVG9nZ2xlIH0gKSA9PiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyAnZWUtZGF0ZS10aW1lLWlucHV0LXRleHQtZmllbGQtd3JhcHBlcicgfT5cblx0XHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdFx0XHRcdGlkPXsgaHRtbElkIH1cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXsgaW5wdXRDbGFzcyB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXsgaW5wdXRWYWx1ZS50b0Zvcm1hdCggREFURV9USU1FX0ZPUk1BVF9TSVRFICkgfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsgb25Ub2dnbGUgfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17IGlucHV0Lm9uQ2hhbmdlIH1cblx0XHRcdFx0XHRcdFx0b25LZXlEb3duPXsgKCBldmVudCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRldmVudC5rZXlDb2RlID09PSBFTlRFUiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnQua2V5Q29kZSA9PT0gU1BBQ0Vcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9uVG9nZ2xlKCBldmVudCApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdGFyaWEtZGVzY3JpYmVkYnk9eyBoZWxwVGV4dElEIH1cblx0XHRcdFx0XHRcdFx0YXJpYS1saXZlPVwicG9saXRlXCJcblx0XHRcdFx0XHRcdFx0eyAuLi5kYXRhU2V0IH1cblx0XHRcdFx0XHRcdFx0eyAuLi5hdHRyaWJ1dGVzIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8SWNvbkJ1dHRvblxuXHRcdFx0XHRcdFx0XHRpY29uPXtcblx0XHRcdFx0XHRcdFx0XHQ8RXNwcmVzc29JY29uXG5cdFx0XHRcdFx0XHRcdFx0XHRpY29uPXsgRVNQUkVTU09fSUNPTl9DQUxFTkRBUiB9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsgb25Ub2dnbGUgfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyhcblx0XHRcdFx0XHRcdFx0XHQnQ2xpY2sgdG8gY2hvb3NlIGRhdGUgYW5kIHRpbWUnLFxuXHRcdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdFx0KSB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpIH1cblx0XHRcdFx0cmVuZGVyQ29udGVudD17ICggeyBvblRvZ2dsZSB9ICkgPT4gKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgJ2VlLWRhdGUtdGltZS1pbnB1dC1waWNrZXItd3JhcHBlcicgfSA+XG5cdFx0XHRcdFx0XHQ8RGF0ZVRpbWVQaWNrZXJcblx0XHRcdFx0XHRcdFx0a2V5PVwiZWUtZGF0ZS10aW1lLXBpY2tlclwiXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnREYXRlPXsgdGhpcy5zdGF0ZS5uZXdWYWx1ZSB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgdGhpcy5vbkNoYW5nZSB9XG5cdFx0XHRcdFx0XHRcdGxvY2FsZT17IFNFUlZFUl9MT0NBTEUgfVxuXHRcdFx0XHRcdFx0XHRpczEySG91cj17IHRoaXMuc3RhdGUuaXMxMkhvdXJUaW1lIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17ICdlZS1kYXRlLXRpbWUtaW5wdXQtYnV0dG9ucy13cmFwcGVyJyB9ID5cblx0XHRcdFx0XHRcdFx0PEJ1dHRvbiBpc1ByaW1hcnlcblx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy51cGRhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdG9uVG9nZ2xlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtZm9ybS1idXR0b24tc3VibWl0IGVlLWZvcm0tYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHsgX18oICdTdWJtaXQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdFx0PEJ1dHRvbiBpc0RlZmF1bHRcblx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5jYW5jZWwoKTtcblx0XHRcdFx0XHRcdFx0XHRcdG9uVG9nZ2xlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtZm9ybS1idXR0b24tc3VibWl0IGVlLWZvcm0tYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHsgX18oICdDYW5jZWwnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgaW5wdXRcbiAqL1xuZXhwb3J0IGNvbnN0IERhdGVUaW1lSW5wdXQgPSAoIGF0dHJpYnV0ZXMgKSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PEZpZWxkXG5cdFx0XHRjb21wb25lbnQ9eyBEYXRlVGltZURyb3Bkb3duIH1cblx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0Lz5cblx0KTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBPbkNoYW5nZSB9IGZyb20gJ3JlYWN0LWZpbmFsLWZvcm0tbGlzdGVuZXJzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEhUTUw1X0lOUFVUX1RZUEVTIH0gZnJvbSAnLi9iYXNlL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDaGVja2JveElucHV0IH0gZnJvbSAnLi9jaGVja2JveC1pbnB1dCc7XG5pbXBvcnQgeyBEYXRlVGltZUlucHV0IH0gZnJvbSAnLi9kYXRlLXRpbWUtaW5wdXQnO1xuaW1wb3J0IHsgSGlkZGVuSW5wdXQgfSBmcm9tICcuL2hpZGRlbi1pbnB1dCc7XG5pbXBvcnQgeyBSYWRpb0lucHV0IH0gZnJvbSAnLi9yYWRpby1pbnB1dCc7XG5pbXBvcnQgeyBTZWxlY3RJbnB1dCB9IGZyb20gJy4vc2VsZWN0LWlucHV0JztcbmltcG9ydCB7IFRleHRhcmVhIH0gZnJvbSAnLi90ZXh0YXJlYSc7XG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuL3RleHQtaW5wdXQnO1xuaW1wb3J0IHsgVG9nZ2xlSW5wdXQgfSBmcm9tICcuL3RvZ2dsZS1pbnB1dCc7XG5pbXBvcnQgeyBEZWZhdWx0SW5wdXRMYXlvdXQgfSBmcm9tICcuL2Jhc2UvZGVmYXVsdC1pbnB1dC1sYXlvdXQnO1xuaW1wb3J0IHtcblx0Y2xlYW5VcElucHV0QXR0cmlidXRlcyxcblx0Y29tcG9zZVZhbGlkYXRvcnMsXG5cdGFkZFZhbGlkYXRvcnNUb0F0dHJpYnV0ZXMsXG5cdHByZXBhcmVEYXRhU2V0LFxufSBmcm9tICcuL2Jhc2UvdXRpbHMnO1xuXG4vLyBhZGQgc29tZSBleHRyYSBpbnB1dCB0eXBlc1xuSFRNTDVfSU5QVVRfVFlQRVMucHVzaCggJ3RvZ2dsZScgKTtcblxuLyoqXG4gKiBGb3JtSW5wdXRcbiAqIGdlbmVyYXRlcyBlaXRoZXIgYW4gaHRtbCBjaGVja2JveCwgcmFkaW8gYnV0dG9uLCBzZWxlY3QsIHRleHRhcmVhLFxuICogb3IgSFRNTDUgdGV4dCB2YXJpYW50IGlucHV0IGxpa2UgdGV4dCwgZGF0ZSwgZW1haWwsIGV0Y1xuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25DaGFuZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhU2V0XG4gKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0hlbHBUZXh0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGFuZ2VMaXN0ZW5lclxuICogQHJldHVybiB7c3RyaW5nfSByZW5kZXJlZCBkYXRlIG5hbWUgZm9ybSByb3dcbiAqL1xuZXhwb3J0IGNsYXNzIEZvcm1JbnB1dCBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0dHlwZTogUHJvcFR5cGVzLm9uZU9mKCBIVE1MNV9JTlBVVF9UWVBFUyApLmlzUmVxdWlyZWQsXG5cdFx0bmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHR2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0UHJvcFR5cGVzLmJvb2wsXG5cdFx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRdICksXG5cdFx0b25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGRhdGFTZXQ6IFByb3BUeXBlcy5vYmplY3QsXG5cdFx0b3B0aW9uczogUHJvcFR5cGVzLmFycmF5LFxuXHRcdGhlbHBUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdGhlbHBUZXh0SUQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0SW5wdXRMYXlvdXQ6IFByb3BUeXBlcy5vYmplY3QsXG5cdFx0Y2hhbmdlTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHR0eXBlLFxuXHRcdFx0bmFtZSxcblx0XHRcdGh0bWxJZCxcblx0XHRcdElucHV0TGF5b3V0LFxuXHRcdFx0Y2hhbmdlTGlzdGVuZXIgPSBudWxsLFxuXHRcdFx0YWZ0ZXJJbnB1dCA9IG51bGwsXG5cdFx0XHQuLi5yZXN0XG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0bGV0IHtcblx0XHRcdGhlbHBUZXh0SUQsXG5cdFx0XHRoZWxwVGV4dCA9ICcnLFxuXHRcdFx0aHRtbENsYXNzID0gJycsXG5cdFx0XHRkYXRhU2V0ID0ge30sXG5cdFx0XHR2YWxpZGF0aW9ucyA9IFtdLFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdGhlbHBUZXh0SUQgPSBoZWxwVGV4dElEID8gaGVscFRleHRJRCA6IGAkeyBodG1sSWQgfS1oZWxwLXRleHRgO1xuXHRcdGh0bWxDbGFzcyA9IHRoaXMucHJvcHMucmVxdWlyZWQgPyBgJHsgaHRtbENsYXNzIH0gcmVxdWlyZWRgIDogaHRtbENsYXNzO1xuXHRcdC8vIGVuc3VyZSBkYXRhIGF0dHJpYnV0ZXMgYXJlIHByb3Blcmx5IG5hbWVkXG5cdFx0ZGF0YVNldCA9IHByZXBhcmVEYXRhU2V0KCBkYXRhU2V0ICk7XG5cdFx0dmFsaWRhdGlvbnMgPSBBcnJheS5pc0FycmF5KCB2YWxpZGF0aW9ucyApID8gdmFsaWRhdGlvbnMgOiBbIHZhbGlkYXRpb25zIF07XG5cdFx0Ly8gcmVtb3ZlIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgbm90IGJlIHBhc3NlZCB0byBpbnB1dHNcblx0XHRsZXQgYXR0cmlidXRlcyA9IGNsZWFuVXBJbnB1dEF0dHJpYnV0ZXMoIHJlc3QgKTtcblx0XHQvLyBhZGQgYXR0cmlidXRlcyBiYXNlZCBvbiB2YWxpZGF0aW9uc1xuXHRcdGF0dHJpYnV0ZXMgPSBhZGRWYWxpZGF0b3JzVG9BdHRyaWJ1dGVzKCBhdHRyaWJ1dGVzLCB2YWxpZGF0aW9ucyApO1xuXHRcdC8vIHJlZHVjZSB2YWxpZGF0aW9ucyB0byBhIHNpbmdsZSBjYWxsYmFja1xuXHRcdHZhbGlkYXRpb25zID0gY29tcG9zZVZhbGlkYXRvcnMoIC4uLnZhbGlkYXRpb25zICk7XG5cdFx0bGV0IGZvcm1JbnB1dCA9IG51bGw7XG5cdFx0c3dpdGNoICggdHlwZSApIHtcblx0XHRcdGNhc2UgJ2hpZGRlbicgOlxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxIaWRkZW5JbnB1dFxuXHRcdFx0XHRcdFx0bmFtZT17IG5hbWUgfVxuXHRcdFx0XHRcdFx0aHRtbElkPXsgaHRtbElkIH1cblx0XHRcdFx0XHRcdGRhdGFTZXQ9eyBkYXRhU2V0IH1cblx0XHRcdFx0XHRcdHZhbGlkYXRlPXsgdmFsaWRhdGlvbnMgfVxuXHRcdFx0XHRcdFx0eyAuLi5hdHRyaWJ1dGVzIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSAnY2hlY2tib3gnIDpcblx0XHRcdFx0Zm9ybUlucHV0ID0gKFxuXHRcdFx0XHRcdDxDaGVja2JveElucHV0XG5cdFx0XHRcdFx0XHRuYW1lPXsgbmFtZSB9XG5cdFx0XHRcdFx0XHRodG1sSWQ9eyBodG1sSWQgfVxuXHRcdFx0XHRcdFx0aHRtbENsYXNzPXsgaHRtbENsYXNzIH1cblx0XHRcdFx0XHRcdGRhdGFTZXQ9eyBkYXRhU2V0IH1cblx0XHRcdFx0XHRcdGhlbHBUZXh0SUQ9eyBoZWxwVGV4dElEIH1cblx0XHRcdFx0XHRcdHZhbGlkYXRlPXsgdmFsaWRhdGlvbnMgfVxuXHRcdFx0XHRcdFx0eyAuLi5hdHRyaWJ1dGVzIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JhZGlvJyA6XG5cdFx0XHRcdGZvcm1JbnB1dCA9IChcblx0XHRcdFx0XHQ8UmFkaW9JbnB1dFxuXHRcdFx0XHRcdFx0bmFtZT17IG5hbWUgfVxuXHRcdFx0XHRcdFx0aHRtbElkPXsgaHRtbElkIH1cblx0XHRcdFx0XHRcdGh0bWxDbGFzcz17IGh0bWxDbGFzcyB9XG5cdFx0XHRcdFx0XHRkYXRhU2V0PXsgZGF0YVNldCB9XG5cdFx0XHRcdFx0XHRoZWxwVGV4dElEPXsgaGVscFRleHRJRCB9XG5cdFx0XHRcdFx0XHR2YWxpZGF0ZT17IHZhbGlkYXRpb25zIH1cblx0XHRcdFx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdzZWxlY3QnIDpcblx0XHRcdFx0ZGVsZXRlIGF0dHJpYnV0ZXMuaW5pdGlhbFZhbHVlO1xuXHRcdFx0XHRmb3JtSW5wdXQgPSAoXG5cdFx0XHRcdFx0PFNlbGVjdElucHV0XG5cdFx0XHRcdFx0XHRuYW1lPXsgbmFtZSB9XG5cdFx0XHRcdFx0XHRodG1sSWQ9eyBodG1sSWQgfVxuXHRcdFx0XHRcdFx0aHRtbENsYXNzPXsgaHRtbENsYXNzIH1cblx0XHRcdFx0XHRcdGRhdGFTZXQ9eyBkYXRhU2V0IH1cblx0XHRcdFx0XHRcdGhlbHBUZXh0SUQ9eyBoZWxwVGV4dElEIH1cblx0XHRcdFx0XHRcdHZhbGlkYXRlPXsgdmFsaWRhdGlvbnMgfVxuXHRcdFx0XHRcdFx0eyAuLi5hdHRyaWJ1dGVzIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3RleHRhcmVhJyA6XG5cdFx0XHRcdGRlbGV0ZSBhdHRyaWJ1dGVzLmluaXRpYWxWYWx1ZTtcblx0XHRcdFx0Zm9ybUlucHV0ID0gKFxuXHRcdFx0XHRcdDxUZXh0YXJlYVxuXHRcdFx0XHRcdFx0bmFtZT17IG5hbWUgfVxuXHRcdFx0XHRcdFx0aHRtbElkPXsgaHRtbElkIH1cblx0XHRcdFx0XHRcdGh0bWxDbGFzcz17IGh0bWxDbGFzcyB9XG5cdFx0XHRcdFx0XHRkYXRhU2V0PXsgZGF0YVNldCB9XG5cdFx0XHRcdFx0XHRoZWxwVGV4dElEPXsgaGVscFRleHRJRCB9XG5cdFx0XHRcdFx0XHR2YWxpZGF0ZT17IHZhbGlkYXRpb25zIH1cblx0XHRcdFx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdkYXRlJyA6XG5cdFx0XHRjYXNlICdtb250aCcgOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUtbG9jYWwnIDpcblx0XHRcdFx0Zm9ybUlucHV0ID0gKFxuXHRcdFx0XHRcdDxEYXRlVGltZUlucHV0XG5cdFx0XHRcdFx0XHRuYW1lPXsgbmFtZSB9XG5cdFx0XHRcdFx0XHRodG1sSWQ9eyBodG1sSWQgfVxuXHRcdFx0XHRcdFx0aHRtbENsYXNzPXsgaHRtbENsYXNzIH1cblx0XHRcdFx0XHRcdGFyaWEtZGVzY3JpYmVkYnk9eyBoZWxwVGV4dElEIH1cblx0XHRcdFx0XHRcdHsgLi4uZGF0YVNldCB9XG5cdFx0XHRcdFx0XHR7IC4uLmF0dHJpYnV0ZXMgfVxuXHRcdFx0XHRcdFx0eyAuLi52YWxpZGF0aW9ucyB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnIDpcblx0XHRcdFx0Y29uc3QgY2hlY2tlZCA9ICEhIGF0dHJpYnV0ZXMuaW5pdGlhbFZhbHVlO1xuXHRcdFx0XHRkZWxldGUgYXR0cmlidXRlcy5pbml0aWFsVmFsdWU7XG5cdFx0XHRcdGRlbGV0ZSBhdHRyaWJ1dGVzLmlucHV0V2lkdGg7XG5cdFx0XHRcdGZvcm1JbnB1dCA9IChcblx0XHRcdFx0XHQ8VG9nZ2xlSW5wdXRcblx0XHRcdFx0XHRcdG5hbWU9eyBuYW1lIH1cblx0XHRcdFx0XHRcdGNoZWNrZWQ9eyBjaGVja2VkIH1cblx0XHRcdFx0XHRcdGh0bWxJZD17IGh0bWxJZCB9XG5cdFx0XHRcdFx0XHRodG1sQ2xhc3M9eyBodG1sQ2xhc3MgfVxuXHRcdFx0XHRcdFx0YXJpYS1kZXNjcmliZWRieT17IGhlbHBUZXh0SUQgfVxuXHRcdFx0XHRcdFx0eyAuLi5kYXRhU2V0IH1cblx0XHRcdFx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0XHRcdFx0XHR7IC4uLnZhbGlkYXRpb25zIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRoZWxwVGV4dCA9ICcnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQgOlxuXHRcdFx0XHRkZWxldGUgYXR0cmlidXRlcy5pbml0aWFsVmFsdWU7XG5cdFx0XHRcdGZvcm1JbnB1dCA9IChcblx0XHRcdFx0XHQ8VGV4dElucHV0XG5cdFx0XHRcdFx0XHR0eXBlPXsgdHlwZSB9XG5cdFx0XHRcdFx0XHRuYW1lPXsgbmFtZSB9XG5cdFx0XHRcdFx0XHRodG1sSWQ9eyBodG1sSWQgfVxuXHRcdFx0XHRcdFx0aHRtbENsYXNzPXsgaHRtbENsYXNzIH1cblx0XHRcdFx0XHRcdGRhdGFTZXQ9eyBkYXRhU2V0IH1cblx0XHRcdFx0XHRcdGhlbHBUZXh0SUQ9eyBoZWxwVGV4dElEIH1cblx0XHRcdFx0XHRcdHZhbGlkYXRlPXsgdmFsaWRhdGlvbnMgfVxuXHRcdFx0XHRcdFx0eyAuLi5hdHRyaWJ1dGVzIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdH1cblx0XHRmb3JtSW5wdXQgPSBhZnRlcklucHV0ID8gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eyAnZWUtYWZ0ZXItaW5wdXQtd3JhcHBlcicgfT5cblx0XHRcdFx0eyBmb3JtSW5wdXQgfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17ICdlZS1hZnRlci1pbnB1dC1kaXYnIH0+eyBhZnRlcklucHV0IH08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdCkgOiBmb3JtSW5wdXQ7XG5cdFx0Y29uc3QgZm9ybUxpc3RlbmVyID0gaXNGdW5jdGlvbiggY2hhbmdlTGlzdGVuZXIgKSA/IChcblx0XHRcdDxPbkNoYW5nZSBuYW1lPXsgbmFtZSB9PlxuXHRcdFx0XHR7IGNoYW5nZUxpc3RlbmVyIH1cblx0XHRcdDwvT25DaGFuZ2U+XG5cdFx0KSA6IG51bGw7XG5cdFx0cmV0dXJuIElucHV0TGF5b3V0ID8gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8SW5wdXRMYXlvdXRcblx0XHRcdFx0XHRpbnB1dE5hbWU9eyBuYW1lIH1cblx0XHRcdFx0XHRmb3JtSW5wdXQ9eyBmb3JtSW5wdXQgfVxuXHRcdFx0XHRcdGhlbHBUZXh0SUQ9eyBoZWxwVGV4dElEIH1cblx0XHRcdFx0XHRoZWxwVGV4dD17IGhlbHBUZXh0IH1cblx0XHRcdFx0Lz5cblx0XHRcdFx0eyBmb3JtTGlzdGVuZXIgfVxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpIDogKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8RGVmYXVsdElucHV0TGF5b3V0XG5cdFx0XHRcdFx0aW5wdXROYW1lPXsgbmFtZSB9XG5cdFx0XHRcdFx0Zm9ybUlucHV0PXsgZm9ybUlucHV0IH1cblx0XHRcdFx0XHRoZWxwVGV4dElEPXsgaGVscFRleHRJRCB9XG5cdFx0XHRcdFx0aGVscFRleHQ9eyBoZWxwVGV4dCB9XG5cdFx0XHRcdC8+XG5cdFx0XHRcdHsgZm9ybUxpc3RlbmVyIH1cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KTtcblx0fVxufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEZpZWxkIH0gZnJvbSAncmVhY3QtZmluYWwtZm9ybSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIGdlbmVyYXRlcyBhbiBIVE1MNSB0ZXh0IHZhcmlhbnQgPGlucHV0PlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbElkXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVNldFxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqIEByZXR1cm4ge3N0cmluZ30gcmVuZGVyZWQgZGF0ZSBuYW1lIGZvcm0gcm93XG4gKi9cbmV4cG9ydCBjb25zdCBIaWRkZW5JbnB1dCA9ICgge1xuXHRuYW1lLFxuXHRodG1sSWQsXG5cdGRhdGFTZXQsXG5cdC4uLmF0dHJpYnV0ZXNcbn0gKSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PEZpZWxkXG5cdFx0XHRjb21wb25lbnQ9XCJpbnB1dFwiXG5cdFx0XHR0eXBlPVwiaGlkZGVuXCJcblx0XHRcdG5hbWU9eyBuYW1lIH1cblx0XHRcdGlkPXsgaHRtbElkIH1cblx0XHRcdHsgLi4uZGF0YVNldCB9XG5cdFx0XHR7IC4uLmF0dHJpYnV0ZXMgfVxuXHRcdC8+XG5cdCk7XG59O1xuXG5IaWRkZW5JbnB1dC5wcm9wVHlwZXMgPSB7XG5cdG5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0aHRtbElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblx0ZGF0YVNldDogUHJvcFR5cGVzLm9iamVjdCxcbn07XG5cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlc3ByZXNzby1lZGl0b3JcIjpcImVzcHJlc3NvLWVkaXRvclwiLFwiZWUtaW5saW5lLWVkaXQtdGV4dFwiOlwiZWUtaW5saW5lLWVkaXQtdGV4dFwiLFwiZWUtaW5saW5lLWVkaXQtaW5wdXRcIjpcImVlLWlubGluZS1lZGl0LWlucHV0XCIsXCJmb3JtLWNvbnRyb2xcIjpcImZvcm0tY29udHJvbFwiLFwiZWUtaW5saW5lLWVkaXQtaW5wdXQtbnVtYmVyXCI6XCJlZS1pbmxpbmUtZWRpdC1pbnB1dC1udW1iZXJcIixcImVlLWlubGluZS1lZGl0LWxhYmVsXCI6XCJlZS1pbmxpbmUtZWRpdC1sYWJlbFwiLFwiY29tcG9uZW50cy10b29sdGlwXCI6XCJjb21wb25lbnRzLXRvb2x0aXBcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IENvbXBvbmVudCwgY3JlYXRlUmVmLCBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBFTlRFUiwgRVNDQVBFLCBTUEFDRSB9IGZyb20gJ0B3b3JkcHJlc3Mva2V5Y29kZXMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICcuL2lubGluZS1lZGl0LWlucHV0LmNzcyc7XG5pbXBvcnQgU3VibWl0dGluZ05vdGljZSBmcm9tICcuLi9iYXNlL3N1Ym1pdHRpbmctbm90aWNlJztcblxuLyoqXG4gKiBJbmxpbmVFZGl0SW5wdXRcbiAqIGRpc3BsYXlzIGEgdGV4dCBzcGFuIHRoYXQgd2hlbiBjbGlja2VkLFxuICogY29udmVydHMgaW50byBhIHRleHQgaW5wdXQgb3IgdGV4dGFyZWEgdG8gYWxsb3cgdGhlIHRleHQgdG8gYmUgZWRpdGVkXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkNoYW5nZSAgICBcdGNhbGxiYWNrIGZvciBzZXR0aW5nIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHZhbHVlIFx0Y3VycmVudCB2YWx1ZSBmb3IgaW5wdXRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFx0XHRcdHRleHQgaW5wdXQgKGRlZmF1bHQpIG9yIHRleHRhcmVhXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVUeXBlIFx0XHRkYXRhIHR5cGUgZm9yIHZhbHVlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbmxpbmVFZGl0SW5wdXQgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHRcdHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XSApLmlzUmVxdWlyZWQsXG5cdFx0dHlwZTogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblx0XHR2YWx1ZVR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0dmFsdWVGb3JtYXR0ZXI6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGZvcm1hdHRlclNldHRpbmdzOiBQcm9wVHlwZXMub2JqZWN0LFxuXHRcdG5vdGljZVN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXHR9O1xuXG5cdHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG5cdFx0dHlwZTogJycsXG5cdFx0dmFsdWVUeXBlOiAnc3RyaW5nJyxcblx0XHR2YWx1ZUZvcm1hdHRlcjogbnVsbCxcblx0XHRmb3JtYXR0ZXJTZXR0aW5nczoge30sXG5cdFx0bm90aWNlU3R5bGU6IHt9LFxuXHRcdGxhYmVsOiAnJyxcblx0fTtcblxuXHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0c3VwZXIoIHByb3BzICk7XG5cdFx0dGhpcy5pbnB1dCA9IGNyZWF0ZVJlZigpO1xuXHRcdHRoaXMuc3RhdGUgPSB7IHNhdmluZzogZmFsc2UgfTtcblx0fVxuXG5cdGNvbXBvbmVudERpZE1vdW50KCkge1xuXHRcdHRoaXMuc2V0U3RhdGUoXG5cdFx0XHR7XG5cdFx0XHRcdGVkaXRpbmc6IGZhbHNlLFxuXHRcdFx0XHRvcmlnVmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG5cdFx0XHRcdHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuXHRcdFx0XHRvbkNoYW5nZTogdGhpcy5wcm9wcy5vbkNoYW5nZSxcblx0XHRcdFx0c2F2aW5nOiBmYWxzZSxcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIHVzZWQgdG8gZGV0ZWN0IGNoYW5nZXMgYW5kIHdoZXRoZXIgdG8gZm9jdXMgdGhlIGlucHV0IG9yIGVuZCBlZGl0aW5nXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gcHJldlByb3BzXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwcmV2U3RhdGVcblx0ICovXG5cdGNvbXBvbmVudERpZFVwZGF0ZSA9IGFzeW5jICggcHJldlByb3BzLCBwcmV2U3RhdGUgKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0ISBwcmV2UHJvcHMuc2F2aW5nICYmXG5cdFx0XHQhIHRoaXMuc3RhdGUuc2F2aW5nICYmXG5cdFx0XHR0eXBlb2YgcHJldlN0YXRlLnZhbHVlICE9PSAndW5kZWZpbmVkJyAmJlxuXHRcdFx0cHJldlN0YXRlLnZhbHVlID09PSB0aGlzLnN0YXRlLnZhbHVlICYmXG5cdFx0XHRwcmV2UHJvcHMudmFsdWUgIT09IHRoaXMucHJvcHMudmFsdWVcblx0XHQpIHtcblx0XHRcdC8vIHZhbHVlIHdhcyBjaGFuZ2VkIGV4dGVybmFsbHksIHNvIHVwZGF0ZSBpdFxuXHRcdFx0dGhpcy5zZXRTdGF0ZSgge1xuXHRcdFx0XHRlZGl0aW5nOiB0aGlzLnByb3BzLnZhbHVlID09PSAnJyxcblx0XHRcdFx0dmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG5cdFx0XHR9ICk7XG5cdFx0fSBlbHNlIGlmICggdGhpcy5zdGF0ZS5lZGl0aW5nICkge1xuXHRcdFx0aWYgKCAhIHByZXZTdGF0ZS5lZGl0aW5nICkge1xuXHRcdFx0XHQvLyBmb2N1cyBvbiBpbnB1dCB3aGVuIGVkaXRpbmcgYmVnaW5zXG5cdFx0XHRcdHRoaXMuaW5wdXQuY3VycmVudC5mb2N1cygpO1xuXHRcdFx0fSBlbHNlIGlmICggcHJldlByb3BzLnZhbHVlICE9PSB0aGlzLnByb3BzLnZhbHVlICkge1xuXHRcdFx0XHQvLyBlZGl0aW5nIGlzIGNvbXBsZXRlXG5cdFx0XHRcdGF3YWl0IHRoaXMuZG9uZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogc2V0cyBlZGl0aW5nIG1vZGUgdG8gdHJ1ZVxuXHQgKiBAZnVuY3Rpb25cblx0ICovXG5cdGVkaXQgPSAoKSA9PiB7XG5cdFx0dGhpcy5zZXRTdGF0ZSggeyBlZGl0aW5nOiB0cnVlIH0gKTtcblx0fTtcblxuXHQvKipcblx0ICogc2V0cyBlZGl0aW5nIG1vZGUgdG8gZmFsc2UgYW5kIHJldmVydHMgY2hhbmdlcyBtYWRlIHRvIGlucHV0IHZhbHVlXG5cdCAqIEBmdW5jdGlvblxuXHQgKi9cblx0Y2FuY2VsID0gKCkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoICggcHJldlN0YXRlICkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZWRpdGluZzogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiBwcmV2U3RhdGUub3JpZ1ZhbHVlLFxuXHRcdFx0fTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIHNldHMgZWRpdGluZyBtb2RlIHRvIGZhbHNlXG5cdCAqIEBmdW5jdGlvblxuXHQgKi9cblx0ZG9uZSA9IGFzeW5jICgpID0+IHtcblx0XHR0aGlzLnNldFN0YXRlKCB7IHNhdmluZzogdHJ1ZSB9ICk7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcblx0XHRcdGF3YWl0IHRoaXMuc3RhdGUub25DaGFuZ2UoIHRoaXMuc3RhdGUudmFsdWUgKVxuXHRcdCkudGhlbiggKCkgPT4ge1xuXHRcdFx0dGhpcy5zZXRTdGF0ZSgge1xuXHRcdFx0XHRlZGl0aW5nOiB0aGlzLnN0YXRlLnZhbHVlID09PSAnJyxcblx0XHRcdFx0c2F2aW5nOiBmYWxzZSxcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIGRldGVjdHMga2V5Ym9hcmQgY29tbWFuZHMgdG8gZW50ZXIgZWRpdGluZ1xuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHRrZXlTZWxlY3QgPSAoIGV2ZW50ICkgPT4ge1xuXHRcdGlmICggZXZlbnQua2V5Q29kZSA9PT0gRU5URVIgfHwgZXZlbnQua2V5Q29kZSA9PT0gU1BBQ0UgKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHR0aGlzLmVkaXQoKTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIGRldGVjdHMga2V5Ym9hcmQgY29tbWFuZHMgdG8gZXhpdCBlZGl0aW5nXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdGtleURvd25JbnB1dCA9IGFzeW5jICggZXZlbnQgKSA9PiB7XG5cdFx0aWYgKCBldmVudC5rZXlDb2RlID09PSBFTlRFUiApIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdGF3YWl0IHRoaXMuZG9uZSgpO1xuXHRcdH0gZWxzZSBpZiAoIGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSApIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdHRoaXMuY2FuY2VsKCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBkZXRlY3RzIHRleHQgY2hhbmdlcyBhbmQgdXBkYXRlcyBpbnB1dCB2YWx1ZVxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHR0ZXh0Q2hhbmdlID0gKCBldmVudCApID0+IHtcblx0XHRpZiAoXG5cdFx0XHRldmVudCAmJlxuXHRcdFx0ZXZlbnQudGFyZ2V0ICYmXG5cdFx0XHR0eXBlb2YgZXZlbnQudGFyZ2V0LnZhbHVlICE9PSAndW5kZWZpbmVkJ1xuXHRcdCkge1xuXHRcdFx0dGhpcy5zZXRTdGF0ZSggeyB2YWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlIH0gKTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIHJlbmRlcnMgdGhlIGlucHV0IGluIGVkaXQgbW9kZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaHRtbElkIFx0XHRcdGlucHV0IGlkZW50aWZpZXJcblx0ICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB2YWx1ZSBcdGN1cnJlbnQgdmFsdWUgZm9yIGlucHV0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFx0XHRcdHRleHQgaW5wdXQgb3IgdGV4dGFyZWFcblx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlVHlwZSBcdFx0ZGF0YSB0eXBlIGZvciB2YWx1ZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgXHRcdFx0ZGlzcGxheWVkIHdoZW4gZWRpdGluZ1xuXHQgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRQcm9wc1x0XHRhZGRpdGlvbmFsIHBhc3NlZCBwcm9wc1xuXHQgKiBAcGFyYW0ge09iamVjdH0gbm90aWNlU3R5bGVcblx0ICogQHJldHVybiB7T2JqZWN0fVx0XHRcdFx0XHR0aGUgcmVuZGVyZWQgaW5wdXRcblx0ICovXG5cdGVkaXRDb21wb25lbnQgPSAoXG5cdFx0aHRtbElkLFxuXHRcdHZhbHVlLFxuXHRcdHR5cGUsXG5cdFx0dmFsdWVUeXBlLFxuXHRcdGxhYmVsLFxuXHRcdGlucHV0UHJvcHMsXG5cdFx0bm90aWNlU3R5bGVcblx0KSA9PiB7XG5cdFx0Y29uc3QgaW5wdXRWYWx1ZSA9IHR5cGVvZiB0aGlzLnN0YXRlLnZhbHVlID09PSAnc3RyaW5nJyB8fFxuXHRcdHR5cGVvZiB0aGlzLnN0YXRlLnZhbHVlID09PSAnbnVtYmVyJyA/XG5cdFx0XHR0aGlzLnN0YXRlLnZhbHVlIDpcblx0XHRcdCcnO1xuXHRcdGNvbnN0IGh0bWxDbGFzcyA9IGNsYXNzTmFtZXMoXG5cdFx0XHQnZWUtaW5saW5lLWlucHV0Jyxcblx0XHRcdCdmb3JtLWNvbnRyb2wnLFxuXHRcdFx0e1xuXHRcdFx0XHQnZWUtaW5saW5lLWVkaXQtaW5wdXQtbnVtYmVyJzogdmFsdWVUeXBlID09PSAnbnVtYmVyJyxcblx0XHRcdH0sXG5cdFx0KTtcblx0XHRjb25zdCBpbnB1dCA9IHR5cGUgPT09ICd0ZXh0YXJlYScgPyAoXG5cdFx0XHQ8dGV4dGFyZWFcblx0XHRcdFx0eyAuLi5pbnB1dFByb3BzIH1cblx0XHRcdFx0cmVmPXsgdGhpcy5pbnB1dCB9XG5cdFx0XHRcdGlkPXsgaHRtbElkIH1cblx0XHRcdFx0Y2xhc3NOYW1lPXsgaHRtbENsYXNzIH1cblx0XHRcdFx0b25CbHVyPXsgdGhpcy5kb25lIH1cblx0XHRcdFx0b25JbnB1dD17IHRoaXMudGV4dENoYW5nZSB9XG5cdFx0XHRcdG9uS2V5RG93bj17IHRoaXMua2V5RG93bklucHV0IH1cblx0XHRcdFx0ZGVmYXVsdFZhbHVlPXsgaW5wdXRWYWx1ZSB9XG5cdFx0XHQvPlxuXHRcdCkgOiAoXG5cdFx0XHQ8aW5wdXRcblx0XHRcdFx0eyAuLi5pbnB1dFByb3BzIH1cblx0XHRcdFx0cmVmPXsgdGhpcy5pbnB1dCB9XG5cdFx0XHRcdGlkPXsgaHRtbElkIH1cblx0XHRcdFx0dHlwZT17IHR5cGUgfVxuXHRcdFx0XHRjbGFzc05hbWU9eyBodG1sQ2xhc3MgfVxuXHRcdFx0XHRvbkJsdXI9eyB0aGlzLmRvbmUgfVxuXHRcdFx0XHRvbklucHV0PXsgdGhpcy50ZXh0Q2hhbmdlIH1cblx0XHRcdFx0b25LZXlEb3duPXsgdGhpcy5rZXlEb3duSW5wdXQgfVxuXHRcdFx0XHRkZWZhdWx0VmFsdWU9eyBpbnB1dFZhbHVlIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRyZXR1cm4gbGFiZWwgPyAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdHsgdGhpcy5zcGlubmVyKCBub3RpY2VTdHlsZSApIH1cblx0XHRcdFx0PGxhYmVsXG5cdFx0XHRcdFx0aHRtbEZvcj17IGh0bWxJZCB9XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtaW5saW5lLWVkaXQtbGFiZWxcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0eyBsYWJlbCB9XG5cdFx0XHRcdDwvbGFiZWw+XG5cdFx0XHRcdHsgaW5wdXQgfVxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpIDogaW5wdXQ7XG5cdH07XG5cblx0LyoqXG5cdCAqIHJlbmRlcnMgdGhlIHRleHQgaW4gZGlzcGxheSBtb2RlXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHZhbHVlRm9ybWF0dGVyIGZvcm1hdHRpbmcgY2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IGZvcm1hdHRlclNldHRpbmdzXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgc3BhbiB0YWdcblx0ICogQHBhcmFtIHtPYmplY3R9IG5vdGljZVN0eWxlXG5cdCAqL1xuXHRkaXNwbGF5Q29tcG9uZW50ID0gKCB2YWx1ZUZvcm1hdHRlciwgZm9ybWF0dGVyU2V0dGluZ3MsIG5vdGljZVN0eWxlICkgPT4ge1xuXHRcdGNvbnN0IHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVGb3JtYXR0ZXIgKSA/XG5cdFx0XHR2YWx1ZUZvcm1hdHRlciggdGhpcy5zdGF0ZS52YWx1ZSwgZm9ybWF0dGVyU2V0dGluZ3MgKSA6XG5cdFx0XHR0aGlzLnN0YXRlLnZhbHVlO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdHsgdGhpcy5zcGlubmVyKCBub3RpY2VTdHlsZSApIH1cblx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRyb2xlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHR0YWJJbmRleD1cIjBcIlxuXHRcdFx0XHRcdG9uQ2xpY2s9eyB0aGlzLmVkaXQgfVxuXHRcdFx0XHRcdG9uRm9jdXM9eyB0aGlzLmVkaXQgfVxuXHRcdFx0XHRcdG9uS2V5RG93bj17IHRoaXMua2V5U2VsZWN0IH1cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS1pbmxpbmUtZWRpdC10ZXh0IGNsaWNrYWJsZVwiXG5cdFx0XHRcdFx0YXJpYS1sYWJlbD17IF9fKCAnY2xpY2sgdG8gZWRpdCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7IHZhbHVlIH1cblx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gbm90aWNlU3R5bGVcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBzcGlubmVyXG5cdCAqL1xuXHRzcGlubmVyID0gKCBub3RpY2VTdHlsZSApID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFN1Ym1pdHRpbmdOb3RpY2Vcblx0XHRcdFx0c3VibWl0dGluZz17IHRoaXMuc3RhdGUuc2F2aW5nIH1cblx0XHRcdFx0c3VibWl0dGluZ1RleHQ9eyBfXyggJ3NhdmluZycsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdHN0eWxlPXsgbm90aWNlU3R5bGUgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRodG1sSWQsXG5cdFx0XHR2YWx1ZSxcblx0XHRcdHR5cGUsXG5cdFx0XHR2YWx1ZVR5cGUsXG5cdFx0XHR2YWx1ZUZvcm1hdHRlcixcblx0XHRcdGZvcm1hdHRlclNldHRpbmdzLFxuXHRcdFx0bm90aWNlU3R5bGUsXG5cdFx0XHRsYWJlbCxcblx0XHRcdC4uLmlucHV0UHJvcHNcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRkZWxldGUgaW5wdXRQcm9wcy5vbkNoYW5nZTtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZS5lZGl0aW5nID9cblx0XHRcdHRoaXMuZWRpdENvbXBvbmVudChcblx0XHRcdFx0aHRtbElkLFxuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0dmFsdWVUeXBlLFxuXHRcdFx0XHRsYWJlbCxcblx0XHRcdFx0aW5wdXRQcm9wcyxcblx0XHRcdFx0bm90aWNlU3R5bGVcblx0XHRcdCkgOlxuXHRcdFx0dGhpcy5kaXNwbGF5Q29tcG9uZW50KFxuXHRcdFx0XHR2YWx1ZUZvcm1hdHRlcixcblx0XHRcdFx0Zm9ybWF0dGVyU2V0dGluZ3MsXG5cdFx0XHRcdG5vdGljZVN0eWxlLFxuXHRcdFx0KTtcblx0fVxufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgT3B0aW9uQ2hlY2tlZFN0YXRlIH0gZnJvbSAnLi9iYXNlL29wdGlvbi1jaGVja2VkLXN0YXRlJztcbmltcG9ydCB7IE9wdGlvbklucHV0cyB9IGZyb20gJy4vYmFzZS9vcHRpb24taW5wdXRzJztcbmltcG9ydCB7IE9wdGlvbkxhYmVsU2l6ZSB9IGZyb20gJy4vYmFzZS9vcHRpb24tbGFiZWwtc2l6ZSc7XG5cbi8qKlxuICogZ2VuZXJhdGVzIG9uZSBvciBtb3JlIGh0bWwgcmFkaW8gaW5wdXRzXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbElkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdGlvbnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uQ2hhbmdlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJ0bkdyb3VwXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRJRFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFTZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFdpZHRoXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogQHJldHVybiB7c3RyaW5nfSByZW5kZXJlZCBkYXRlIG5hbWUgZm9ybSByb3dcbiAqL1xuZXhwb3J0IGNsYXNzIFJhZGlvSW5wdXQgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHR2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XSApLFxuXHRcdG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheSxcblx0XHRvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0YnRuR3JvdXA6IFByb3BUeXBlcy5ib29sLFxuXHRcdGlucHV0V2lkdGg6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0aGVscFRleHRJRDogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRkYXRhU2V0OiBQcm9wVHlwZXMub2JqZWN0LFxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKCBwcm9wcyApIHtcblx0XHRzdXBlciggcHJvcHMgKTtcblx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0Y2hlY2tlZDogT3B0aW9uQ2hlY2tlZFN0YXRlKFxuXHRcdFx0XHRwcm9wcy5odG1sSWQsXG5cdFx0XHRcdHByb3BzLm9wdGlvbnMsXG5cdFx0XHRcdHByb3BzLmluaXRpYWxWYWx1ZSxcblx0XHRcdCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHR0b2dnbGVDaGVja2VkID0gKCBldmVudCApID0+IHtcblx0XHRpZiAoIGV2ZW50LnRhcmdldCAmJlxuXHRcdFx0ZXZlbnQudGFyZ2V0LmlkICYmXG5cdFx0XHRldmVudC50YXJnZXQuY2hlY2tlZCAhPT0gdW5kZWZpbmVkXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBjaGVja2VkID0gT3B0aW9uQ2hlY2tlZFN0YXRlKFxuXHRcdFx0XHR0aGlzLnByb3BzLmh0bWxJZCxcblx0XHRcdFx0dGhpcy5wcm9wcy5vcHRpb25zLFxuXHRcdFx0XHR0aGlzLnByb3BzLmluaXRpYWxWYWx1ZSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdCk7XG5cdFx0XHRjaGVja2VkWyBldmVudC50YXJnZXQuaWQgXSA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuXHRcdFx0dGhpcy5zZXRTdGF0ZSggeyBjaGVja2VkIH0gKTtcblx0XHR9XG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdG5hbWUsXG5cdFx0XHRodG1sSWQsXG5cdFx0XHRodG1sQ2xhc3MsXG5cdFx0XHRvcHRpb25zLFxuXHRcdFx0aGVscFRleHRJRCxcblx0XHRcdGJ0bkdyb3VwID0gdHJ1ZSxcblx0XHRcdGlucHV0V2lkdGggPSAnJyxcblx0XHRcdC4uLmF0dHJpYnV0ZXNcblx0XHR9ID0gdGhpcy5wcm9wcztcblxuXHRcdGNvbnN0IGxhYmVsQ2xhc3MgPSBidG5Hcm91cCA/XG5cdFx0XHQnYnRuIGJ0bi1wcmltYXJ5JyA6XG5cdFx0XHQnZWUtcmFkaW8tbGFiZWwtYWZ0ZXInICsgT3B0aW9uTGFiZWxTaXplKCBvcHRpb25zICk7XG5cdFx0bGV0IGRpdkNsYXNzID0gYnRuR3JvdXAgPyAnYnRuLWdyb3VwJyA6ICdlZS1jaGVja2JveC1ncm91cCc7XG5cdFx0ZGl2Q2xhc3MgPSBpbnB1dFdpZHRoID9cblx0XHRcdGAkeyBkaXZDbGFzcyB9IGVlLWlucHV0LXdpZHRoLSR7IGlucHV0V2lkdGggfWAgOlxuXHRcdFx0ZGl2Q2xhc3M7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgZGl2Q2xhc3MgfT5cblx0XHRcdFx0PE9wdGlvbklucHV0c1xuXHRcdFx0XHRcdHR5cGU9XCJyYWRpb1wiXG5cdFx0XHRcdFx0bmFtZT17IG5hbWUgfVxuXHRcdFx0XHRcdGNoZWNrZWRTdGF0ZT17IHRoaXMuc3RhdGUuY2hlY2tlZCB9XG5cdFx0XHRcdFx0aHRtbElkPXsgaHRtbElkIH1cblx0XHRcdFx0XHRodG1sQ2xhc3M9eyBodG1sQ2xhc3MgfVxuXHRcdFx0XHRcdGxhYmVsQ2xhc3M9eyBsYWJlbENsYXNzIH1cblx0XHRcdFx0XHRvcHRpb25zPXsgb3B0aW9ucyB9XG5cdFx0XHRcdFx0b25DbGljaz17IHRoaXMudG9nZ2xlQ2hlY2tlZCB9XG5cdFx0XHRcdFx0aGVscFRleHRJRD17IGhlbHBUZXh0SUQgfVxuXHRcdFx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpO1xuXHR9XG59XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tICdyZWFjdC1maW5hbC1mb3JtJztcblxuLyoqXG4gKiBnZW5lcmF0ZXMgYW4gaHRtbCA8c2VsZWN0PiBpbnB1dFxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRJRFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFTZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFdpZHRoXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogQHJldHVybiB7c3RyaW5nfSByZW5kZXJlZCBkYXRlIG5hbWUgZm9ybSByb3dcbiAqL1xuZXhwb3J0IGNvbnN0IFNlbGVjdElucHV0ID0gKCB7XG5cdGh0bWxJZCxcblx0aHRtbENsYXNzLFxuXHRvcHRpb25zLFxuXHRoZWxwVGV4dElELFxuXHRkYXRhU2V0LFxuXHRpbnB1dFdpZHRoID0gJycsXG5cdC4uLmF0dHJpYnV0ZXNcbn0gKSA9PiB7XG5cdG9wdGlvbnMgPSBpc0FycmF5KCBvcHRpb25zICkgPyBvcHRpb25zIDogW107XG5cdGNvbnN0IG9wdGlvbkxpc3QgPSBvcHRpb25zLm1hcCggKCBvcHRpb24sIGluZGV4ICkgPT4gKFxuXHRcdDxvcHRpb24ga2V5PXsgaW5kZXggfSB2YWx1ZT17IG9wdGlvbi52YWx1ZSB9PlxuXHRcdFx0eyBvcHRpb24ubGFiZWwgfVxuXHRcdDwvb3B0aW9uPlxuXHQpICk7XG5cdGh0bWxDbGFzcyA9IGlucHV0V2lkdGggP1xuXHRcdGAkeyBodG1sQ2xhc3MgfSBlZS1pbnB1dC13aWR0aC0keyBpbnB1dFdpZHRoIH1gIDpcblx0XHRodG1sQ2xhc3M7XG5cdHJldHVybiAoXG5cdFx0PEZpZWxkXG5cdFx0XHRjb21wb25lbnQ9XCJzZWxlY3RcIlxuXHRcdFx0aWQ9eyBodG1sSWQgfVxuXHRcdFx0Y2xhc3NOYW1lPXsgYCR7IGh0bWxDbGFzcyB9IGZvcm0tY29udHJvbGAgfVxuXHRcdFx0YXJpYS1kZXNjcmliZWRieT17IGhlbHBUZXh0SUQgfVxuXHRcdFx0eyAuLi5kYXRhU2V0IH1cblx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0PlxuXHRcdFx0eyBvcHRpb25MaXN0IH1cblx0XHQ8L0ZpZWxkPlxuXHQpO1xufTtcblxuU2VsZWN0SW5wdXQucHJvcFR5cGVzID0ge1xuXHRodG1sSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHR2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxuXHRvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXksXG5cdG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblx0aGVscFRleHRJRDogUHJvcFR5cGVzLnN0cmluZyxcblx0ZGF0YVNldDogUHJvcFR5cGVzLm9iamVjdCxcblx0aW5wdXRXaWR0aDogUHJvcFR5cGVzLnN0cmluZyxcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEZpZWxkIH0gZnJvbSAncmVhY3QtZmluYWwtZm9ybSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBIVE1MNV9JTlBVVF9UWVBFU19URVhUIH0gZnJvbSAnLi9iYXNlL2NvbnN0YW50cyc7XG5cbi8qKlxuICogZ2VuZXJhdGVzIGFuIEhUTUw1IHRleHQgdmFyaWFudCA8aW5wdXQ+XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxJZFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IGhlbHBUZXh0SURcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhU2V0XG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGlucHV0V2lkdGhcbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJlbmRlcmVkIGRhdGUgbmFtZSBmb3JtIHJvd1xuICovXG5leHBvcnQgY29uc3QgVGV4dElucHV0ID0gKCB7XG5cdHR5cGUgPSAndGV4dCcsXG5cdGh0bWxJZCxcblx0aHRtbENsYXNzLFxuXHRoZWxwVGV4dElELFxuXHRkYXRhU2V0LFxuXHRpbnB1dFdpZHRoID0gJycsXG5cdC4uLmF0dHJpYnV0ZXNcbn0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGlucHV0V2lkdGggP1xuXHRcdGAkeyBodG1sQ2xhc3MgfSBlZS1pbnB1dC13aWR0aC0keyBpbnB1dFdpZHRoIH1gIDpcblx0XHRodG1sQ2xhc3M7XG5cdHJldHVybiAoXG5cdFx0PEZpZWxkXG5cdFx0XHRjb21wb25lbnQ9XCJpbnB1dFwiXG5cdFx0XHR0eXBlPXsgdHlwZSB9XG5cdFx0XHRpZD17IGh0bWxJZCB9XG5cdFx0XHRjbGFzc05hbWU9eyBgJHsgaHRtbENsYXNzIH0gZm9ybS1jb250cm9sYCB9XG5cdFx0XHRhcmlhLWRlc2NyaWJlZGJ5PXsgaGVscFRleHRJRCB9XG5cdFx0XHR7IC4uLmRhdGFTZXQgfVxuXHRcdFx0eyAuLi5hdHRyaWJ1dGVzIH1cblx0XHQvPlxuXHQpO1xufTtcblxuVGV4dElucHV0LnByb3BUeXBlcyA9IHtcblx0dHlwZTogUHJvcFR5cGVzLm9uZU9mKCBIVE1MNV9JTlBVVF9UWVBFU19URVhUICksXG5cdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblx0aGVscFRleHRJRDogUHJvcFR5cGVzLnN0cmluZyxcblx0ZGF0YVNldDogUHJvcFR5cGVzLm9iamVjdCxcblx0aW5wdXRXaWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tICdyZWFjdC1maW5hbC1mb3JtJztcblxuLyoqXG4gKiBnZW5lcmF0ZXMgYW4gaHRtbCA8dGV4dGFyZWE+IGlucHV0XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbElkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRJRFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFTZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFdpZHRoXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogQHJldHVybiB7c3RyaW5nfSByZW5kZXJlZCBkYXRlIG5hbWUgZm9ybSByb3dcbiAqL1xuZXhwb3J0IGNvbnN0IFRleHRhcmVhID0gKCB7XG5cdGh0bWxJZCxcblx0aHRtbENsYXNzLFxuXHRoZWxwVGV4dElELFxuXHRkYXRhU2V0LFxuXHRpbnB1dFdpZHRoID0gJycsXG5cdC4uLmF0dHJpYnV0ZXNcbn0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGlucHV0V2lkdGggP1xuXHRcdGAkeyBodG1sQ2xhc3MgfSBlZS1pbnB1dC13aWR0aC0keyBpbnB1dFdpZHRoIH1gIDpcblx0XHRodG1sQ2xhc3M7XG5cdHJldHVybiAoXG5cdFx0PEZpZWxkXG5cdFx0XHRjb21wb25lbnQ9XCJ0ZXh0YXJlYVwiXG5cdFx0XHRpZD17IGh0bWxJZCB9XG5cdFx0XHRjbGFzc05hbWU9eyBgJHsgaHRtbENsYXNzIH0gZm9ybS1jb250cm9sYCB9XG5cdFx0XHRhcmlhLWRlc2NyaWJlZGJ5PXsgaGVscFRleHRJRCB9XG5cdFx0XHR7IC4uLmRhdGFTZXQgfVxuXHRcdFx0eyAuLi5hdHRyaWJ1dGVzIH1cblx0XHQvPlxuXHQpO1xufTtcblxuVGV4dGFyZWEucHJvcFR5cGVzID0ge1xuXHRodG1sSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHR2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxuXHRvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cdGhlbHBUZXh0SUQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGRhdGFTZXQ6IFByb3BUeXBlcy5vYmplY3QsXG5cdGlucHV0V2lkdGg6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJ3JlYWN0LWZpbmFsLWZvcm0nO1xuaW1wb3J0IHsgQ2hlY2tib3hDb250cm9sLCBUb2dnbGVDb250cm9sIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcblxuLyoqXG4gKiBjb25uZWN0cyBhIFdQIENoZWNrYm94Q29udHJvbCBvciBUb2dnbGVDb250cm9sIHdpdGggUmVhY3QtRmluYWwtRm9ybVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWxwVGV4dElEXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRJZkNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWxwVGV4dElmTm90Q2hlY2tlZFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFTZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2dnbGUgJ3RvZ2dsZScgb3IgJ2NoZWNrYm94J1xuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqIEByZXR1cm4ge3N0cmluZ30gcmVuZGVyZWQgZGF0ZSBuYW1lIGZvcm0gcm93XG4gKi9cbmNvbnN0IFRvZ2dsZSA9ICgge1xuXHRpbnB1dCxcblx0Y2hlY2tlZCxcblx0aHRtbElkLFxuXHRodG1sQ2xhc3MsXG5cdGhlbHBUZXh0SUQsXG5cdGhlbHBUZXh0SWZDaGVja2VkLFxuXHRoZWxwVGV4dElmTm90Q2hlY2tlZCxcblx0ZGF0YVNldCxcblx0dG9nZ2xlID0gJ3RvZ2dsZScsIC8vICd0b2dnbGUnIG9yICdjaGVja2JveCdcblx0Li4uYXR0cmlidXRlc1xufSApID0+IHtcblx0aHRtbENsYXNzID0gaHRtbENsYXNzID9cblx0XHRgJHsgaHRtbENsYXNzIH0gZWUtdG9nZ2xlLWlucHV0YCA6XG5cdFx0J2VlLXRvZ2dsZS1pbnB1dCc7XG5cdHJldHVybiB0b2dnbGUgPT09ICd0b2dnbGUnID8gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXsgYCR7IGh0bWxDbGFzcyB9IGVlLXN3aXRjaC10b2dnbGVgIH0gPlxuXHRcdFx0PFRvZ2dsZUNvbnRyb2xcblx0XHRcdFx0Y2hlY2tlZD17IGNoZWNrZWQgfVxuXHRcdFx0XHRpbnN0YW5jZUlkPXsgaHRtbElkIH1cblx0XHRcdFx0YXJpYS1kZXNjcmliZWRieT17IGhlbHBUZXh0SUQgfVxuXHRcdFx0XHRsYWJlbD17IGNoZWNrZWQgPyBoZWxwVGV4dElmQ2hlY2tlZCA6IGhlbHBUZXh0SWZOb3RDaGVja2VkIH1cblx0XHRcdFx0b25DaGFuZ2U9eyBpbnB1dC5vbkNoYW5nZSB9XG5cdFx0XHRcdHsgLi4uZGF0YVNldCB9XG5cdFx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0XHQvPlxuXHRcdDwvZGl2PlxuXHQpIDogKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXsgYCR7IGh0bWxDbGFzcyB9IGVlLWNoZWNrYm94LXRvZ2dsZWAgfT5cblx0XHRcdDxDaGVja2JveENvbnRyb2xcblx0XHRcdFx0Y2hlY2tlZD17IGNoZWNrZWQgfVxuXHRcdFx0XHRpbnN0YW5jZUlkPXsgaHRtbElkIH1cblx0XHRcdFx0YXJpYS1kZXNjcmliZWRieT17IGhlbHBUZXh0SUQgfVxuXHRcdFx0XHRsYWJlbD17IGNoZWNrZWQgPyBoZWxwVGV4dElmQ2hlY2tlZCA6IGhlbHBUZXh0SWZOb3RDaGVja2VkIH1cblx0XHRcdFx0b25DaGFuZ2U9eyBpbnB1dC5vbkNoYW5nZSB9XG5cdFx0XHRcdHsgLi4uZGF0YVNldCB9XG5cdFx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0XHQvPlxuXHRcdDwvZGl2PlxuXHQpO1xufTtcblxuVG9nZ2xlLnByb3BUeXBlcyA9IHtcblx0Y2hlY2tlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblx0aHRtbElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0b25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXHRoZWxwVGV4dElEOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRoZWxwVGV4dElmQ2hlY2tlZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRoZWxwVGV4dElmTm90Q2hlY2tlZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRkYXRhU2V0OiBQcm9wVHlwZXMub2JqZWN0LFxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGlucHV0XG4gKi9cbmV4cG9ydCBjb25zdCBUb2dnbGVJbnB1dCA9ICggYXR0cmlidXRlcyApID0+IHtcblx0cmV0dXJuIChcblx0XHQ8RmllbGRcblx0XHRcdGNvbXBvbmVudD17IFRvZ2dsZSB9XG5cdFx0XHR7IC4uLmF0dHJpYnV0ZXMgfVxuXHRcdC8+XG5cdCk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IENoaWxkcmVuLCBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRlZmF1bHQgYXMgRm9ybUNvbHVtbiB9IGZyb20gJy4vZm9ybS1jb2x1bW4nO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBGb3JtUm93IH0gZnJvbSAnLi9mb3JtLXJvdyc7XG5cbi8qKlxuICogQXV0b0NvbHVtblJvd1xuICogXCJ0d28tY29sdW1uLWFkbWluXCIgZm9ybSBsYXlvdXQgc3RyYXRlZ3kgY29tcG9uZW50XG4gKiBmb3IgYXV0b21hdGljYWxseSBnZW5lcmF0aW5nIEZvcm1Db2x1bW5zIGZvciBsYWJlbHMgYW5kIGlucHV0c1xuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9mZnNldFxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBjb2xTaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpZ25cbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZm9ybSByb3cgY29sdW1uXG4gKi9cbmNsYXNzIEF1dG9Db2x1bW5Sb3cgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRyZW5kZXIoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtUm93PlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Q2hpbGRyZW4ubWFwKCB0aGlzLnByb3BzLmNoaWxkcmVuLCAoIGNoaWxkLCBpbmRleCApID0+IHtcblx0XHRcdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4ICUgMiAhPT0gMCApIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY29sU2l6ZSA9IGNoaWxkLnByb3BzLmxhYmVsQ29sU2l6ZSA/XG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGQucHJvcHMubGFiZWxDb2xTaXplIDpcblx0XHRcdFx0XHRcdFx0XHQzO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdDxGb3JtQ29sdW1uIGFsaWduPVwicmlnaHRcIiBjb2xTaXplPXsgY29sU2l6ZSB9PlxuXHRcdFx0XHRcdFx0XHRcdFx0eyBjaGlsZCB9XG5cdFx0XHRcdFx0XHRcdFx0PC9Gb3JtQ29sdW1uPlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3QgY29sU2l6ZSA9IGNoaWxkLnByb3BzLmNvbFNpemUgP1xuXHRcdFx0XHRcdFx0XHRjaGlsZC5wcm9wcy5jb2xTaXplIDpcblx0XHRcdFx0XHRcdFx0Nztcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxGb3JtQ29sdW1uIGNvbFNpemU9eyBjb2xTaXplIH0+XG5cdFx0XHRcdFx0XHRcdFx0eyBjaGlsZCB9XG5cdFx0XHRcdFx0XHRcdDwvRm9ybUNvbHVtbj5cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApXG5cdFx0XHRcdH1cblx0XHRcdDwvRm9ybVJvdz5cblx0XHQpO1xuXHR9XG59XG5cbkF1dG9Db2x1bW5Sb3cucHJvcFR5cGVzID0ge1xuXHRjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0UHJvcFR5cGVzLmFycmF5T2YoIFByb3BUeXBlcy5vYmplY3QgKSxcblx0XSApLFxuXHRjb2xTaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRdICksXG59O1xuXG5leHBvcnQgZGVmYXVsdCBBdXRvQ29sdW1uUm93O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBGb3JtQ29sdW1uXG4gKiBcInR3by1jb2x1bW4tYWRtaW5cIiBmb3JtIGxheW91dCBzdHJhdGVneSBjb21wb25lbnRcbiAqIGZvciBkaXNwbGF5aW5nIGEgc2luZ2xlIFwiY29sdW1uXCIgd2l0aGluIGEgZm9ybSByb3dcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBjaGlsZHJlblxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBjb2xTaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpZ25cbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRyYUF0dHJpYnV0ZXNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZm9ybSByb3cgY29sdW1uXG4gKi9cbmNvbnN0IEZvcm1Db2x1bW4gPSAoIHtcblx0Y2hpbGRyZW4sXG5cdGh0bWxDbGFzcyxcblx0Y29sU2l6ZSA9IDMsXG5cdG9mZnNldCA9IDAsXG5cdGFsaWduID0gJ2xlZnQnLFxuXHQuLi5leHRyYUF0dHJpYnV0ZXNcbn0gKSA9PiB7XG5cdGNvbnN0IGlucHV0ID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IG51bGw7XG5cdGlmIChcblx0XHQhIGlucHV0IHx8XG5cdFx0KCBpbnB1dC50eXBlICYmIGlucHV0LnR5cGUubmFtZSAmJiBpbnB1dC50eXBlLm5hbWUgPT09ICdIaWRkZW5JbnB1dCcgKVxuXHQpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aHRtbENsYXNzID0gaHRtbENsYXNzID8gYCR7IGh0bWxDbGFzcyB9IGAgOiAnJztcblx0aHRtbENsYXNzID0gb2Zmc2V0ID9cblx0XHRgJHsgaHRtbENsYXNzIH1jb2wtc20tJHsgY29sU2l6ZSB9IG9mZnNldC1zbS0keyBvZmZzZXQgfSBlZS1mb3JtLWNvbGAgOlxuXHRcdGAkeyBodG1sQ2xhc3MgfWNvbC1zbS0keyBjb2xTaXplIH0gZWUtZm9ybS1jb2xgO1xuXHRodG1sQ2xhc3MgKz0gYWxpZ24gPT09ICdyaWdodCcgPyAnIHRleHQtc20tcmlnaHQnIDogJyc7XG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfSB7IC4uLmV4dHJhQXR0cmlidXRlcyB9PlxuXHRcdFx0eyBpbnB1dCB9XG5cdFx0PC9kaXY+XG5cdCk7XG59O1xuXG5Gb3JtQ29sdW1uLnByb3BUeXBlcyA9IHtcblx0Y2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5hcnJheU9mKCBQcm9wVHlwZXMub2JqZWN0ICksXG5cdF0gKSxcblx0Y29sU2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxuXHRvZmZzZXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcblx0YWxpZ246IFByb3BUeXBlcy5vbmVPZiggWyAnbGVmdCcsICdyaWdodCcgXSApLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbHVtbjtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBkZWZhdWx0IGFzIEZvcm1Db2x1bW4gfSBmcm9tICcuL2Zvcm0tY29sdW1uJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgRm9ybVJvdyB9IGZyb20gJy4vZm9ybS1yb3cnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBGb3JtSW5mb0Jhc2UgfSBmcm9tICcuLi8uLi9iYXNlL2Zvcm0taW5mby1iYXNlJztcblxuLyoqXG4gKiBGb3JtSW5mb1xuICogZGlzcGxheXMgaW5zdHJ1Y3Rpb25zIG9yIG90aGVyIGltcG9ydGFudCBpbmZvcm1hdGlvblxuICogdGhhdCB1c2VycyBtYXkgcmVxdWlyZSB0byBwcm9wZXJseSBjb21wbGV0ZSBhIGZvcm0uXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IGZvcm1JbmZvXG4gKiBAcGFyYW0ge3N0cmluZ30gZGFzaGljb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqL1xuY2xhc3MgRm9ybUluZm8gZXh0ZW5kcyBDb21wb25lbnQge1xuXHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0c3VwZXIoIHByb3BzICk7XG5cdFx0dGhpcy5zdGF0ZSA9IHtcblx0XHRcdGRpc21pc3M6IGZhbHNlLFxuXHRcdH07XG5cdH1cblxuXHRkaXNtaXNzID0gKCkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoICggcHJldlN0YXRlICkgPT4gKCB7IGRpc21pc3M6ICEgcHJldlN0YXRlLmRpc21pc3MgfSApICk7XG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdGZvcm1JbmZvLFxuXHRcdFx0ZGFzaGljb24gPSAnJyxcblx0XHRcdGRpc21pc3NhYmxlID0gdHJ1ZSxcblx0XHRcdGNvbFNpemUgPSA2LFxuXHRcdFx0b2Zmc2V0ID0gMyxcblx0XHRcdGZvcm1JbmZvVmFycyA9IFtdLFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdGxldCB7IGh0bWxDbGFzcyA9ICcnIH0gPSB0aGlzLnByb3BzO1xuXHRcdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyAhPT0gJycgP1xuXHRcdFx0YCR7IGh0bWxDbGFzcyB9IGVlLWZvcm0taW5mby1yb3dgIDpcblx0XHRcdCdlZS1mb3JtLWluZm8tcm93Jztcblx0XHRodG1sQ2xhc3MgPSB0aGlzLnN0YXRlLmRpc21pc3MgP1xuXHRcdFx0YCR7IGh0bWxDbGFzcyB9IGRpc21pc3NlZGAgOlxuXHRcdFx0aHRtbENsYXNzO1xuXHRcdGh0bWxDbGFzcyA9IGRpc21pc3NhYmxlID9cblx0XHRcdGAkeyBodG1sQ2xhc3MgfSBpcy1kaXNtaXNzYWJsZWAgOlxuXHRcdFx0aHRtbENsYXNzO1xuXHRcdHJldHVybiBmb3JtSW5mbyA/IChcblx0XHRcdDxGb3JtUm93IGh0bWxDbGFzcz17IGh0bWxDbGFzcyB9PlxuXHRcdFx0XHQ8Rm9ybUNvbHVtbiBjb2xTaXplPXsgY29sU2l6ZSB9IG9mZnNldD17IG9mZnNldCB9PlxuXHRcdFx0XHRcdDxGb3JtSW5mb0Jhc2Vcblx0XHRcdFx0XHRcdGZvcm1JbmZvPXsgZm9ybUluZm8gfVxuXHRcdFx0XHRcdFx0Zm9ybUluZm9WYXJzPXsgZm9ybUluZm9WYXJzIH1cblx0XHRcdFx0XHRcdGRhc2hpY29uPXsgZGFzaGljb24gfVxuXHRcdFx0XHRcdFx0b25EaXNtaXNzPXsgZGlzbWlzc2FibGUgPyB0aGlzLmRpc21pc3MgOiBudWxsIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L0Zvcm1Db2x1bW4+XG5cdFx0XHQ8L0Zvcm1Sb3c+XG5cdFx0KSA6IG51bGw7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9ybUluZm87XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEZvcm1Sb3dcbiAqIFwidHdvLWNvbHVtbi1hZG1pblwiIGZvcm0gbGF5b3V0IHN0cmF0ZWd5IGNvbXBvbmVudCBmb3JcbiAqIGRpc3BsYXlpbmcgYSBzaW5nbGUgXCJyb3dcIiBpbiB0aGUgZm9ybVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGZvcm0gcm93XG4gKi9cbmNvbnN0IEZvcm1Sb3cgPSAoIHsgY2hpbGRyZW4sIGh0bWxDbGFzcyA9ICcnIH0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyA/IGAkeyBodG1sQ2xhc3MgfSBlZS1mb3JtLXJvd2AgOiAnZWUtZm9ybS1yb3cnO1xuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0+XG5cdFx0XHR7IGNoaWxkcmVuIH1cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cbkZvcm1Sb3cucHJvcFR5cGVzID0ge1xuXHRjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0UHJvcFR5cGVzLmFycmF5T2YoIFByb3BUeXBlcy5vYmplY3QgKSxcblx0XSApLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb3JtUm93O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGRlZmF1bHQgYXMgRm9ybUNvbHVtbiB9IGZyb20gJy4vZm9ybS1jb2x1bW4nO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBGb3JtUm93IH0gZnJvbSAnLi9mb3JtLXJvdyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEZvcm1TZWN0aW9uIH0gZnJvbSAnLi9mb3JtLXNlY3Rpb24nO1xuXG4vKipcbiAqIEVkaXRvclNhdmVDYW5jZWxCdXR0b25zXG4gKiByZXVzYWJsZSBmb3JtIGJ1dHRvbnNcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWJtaXRCdXR0b25cbiAqIEBwYXJhbSB7T2JqZWN0fSBjYW5jZWxCdXR0b25cbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2xTaXplXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGZvcm0gYnV0dG9uc1xuICovXG5jbGFzcyBGb3JtU2F2ZUNhbmNlbEJ1dHRvbnMgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0c3VibWl0QnV0dG9uLFxuXHRcdFx0Y2FuY2VsQnV0dG9uID0gbnVsbCxcblx0XHRcdGNvbFNpemUgPSAxMixcblx0XHRcdG9mZnNldCA9IDAsXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0bGV0IHsgaHRtbENsYXNzIH0gPSB0aGlzLnByb3BzO1xuXHRcdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyA/XG5cdFx0XHRgJHsgaHRtbENsYXNzIH0gZWUtZm9ybS1zYXZlLWNhbmNlbC1idXR0b25zLWRpdmAgOlxuXHRcdFx0J2VlLWZvcm0tc2F2ZS1jYW5jZWwtYnV0dG9ucy1kaXYnO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8Rm9ybVNlY3Rpb24gaHRtbENsYXNzPXsgaHRtbENsYXNzIH0+XG5cdFx0XHRcdDxGb3JtUm93IGh0bWxDbGFzcz17ICdlZS1mb3JtLWJ1dHRvbi1yb3cnIH0+XG5cdFx0XHRcdFx0PEZvcm1Db2x1bW4gY29sU2l6ZT17IGNvbFNpemUgfSBvZmZzZXQ9eyBvZmZzZXQgfT5cblx0XHRcdFx0XHRcdHsgc3VibWl0QnV0dG9uIH1cblx0XHRcdFx0XHRcdHsgY2FuY2VsQnV0dG9uIH1cblx0XHRcdFx0XHQ8L0Zvcm1Db2x1bW4+XG5cdFx0XHRcdDwvRm9ybVJvdz5cblx0XHRcdDwvRm9ybVNlY3Rpb24+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBGb3JtU2F2ZUNhbmNlbEJ1dHRvbnM7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IENoaWxkcmVuIH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRlZmF1bHQgYXMgQXV0b0Zvcm1Sb3cgfSBmcm9tICcuLi8uLi9iYXNlL2F1dG8tZm9ybS1yb3cnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBBdXRvQ29sdW1uUm93IH0gZnJvbSAnLi9hdXRvLWNvbHVtbi1yb3cnO1xuXG4vKipcbiAqIEZvcm1TZWN0aW9uXG4gKiBcInR3by1jb2x1bW4tYWRtaW5cIiBmb3JtIGxheW91dCBzdHJhdGVneSBjb21wb25lbnQgZm9yXG4gKiBzZXBhcmF0aW5nIHBhcnRzIG9mIHRoZSBmb3JtIGludG8gaWRlbnRpZmlhYmxlIHNlY3Rpb25zXG4gKlxuICogQGNvbXBvbmVudFxuICogQHBhcmFtIHtPYmplY3R9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbElkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGZvcm0gc2VjdGlvblxuICovXG5jb25zdCBGb3JtU2VjdGlvbiA9ICggeyBjaGlsZHJlbiwgaHRtbElkID0gJycsIGh0bWxDbGFzcyA9ICcnIH0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyA/XG5cdFx0YCR7IGh0bWxDbGFzcyB9IGVlLWZvcm0tc2VjdGlvbiBweC0wIHB0LTMgYm9yZGVyIHJvdW5kZWRgIDpcblx0XHQnZWUtZm9ybS1zZWN0aW9uIHB4LTAgcHQtMyBib3JkZXIgcm91bmRlZCc7XG5cdHJldHVybiAoXG5cdFx0PGRpdiBpZD17IGh0bWxJZCB9IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJweC0zXCI+XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRDaGlsZHJlbi5tYXAoIGNoaWxkcmVuLCAoIGNoaWxkLCBpbmRleCApID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBdXRvRm9ybVJvd1xuXHRcdFx0XHRcdFx0XHRcdGtleT17IGluZGV4IH1cblx0XHRcdFx0XHRcdFx0XHRGb3JtRWxlbWVudD17IGNoaWxkIH1cblx0XHRcdFx0XHRcdFx0XHRBdXRvQ29sdW1uUm93PXsgQXV0b0NvbHVtblJvdyB9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cbkZvcm1TZWN0aW9uLnByb3BUeXBlcyA9IHtcblx0Y2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5hcnJheU9mKCBQcm9wVHlwZXMub2JqZWN0ICksXG5cdF0gKSxcblx0aHRtbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb3JtU2VjdGlvbjtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogRm9ybVdyYXBwZXJcbiAqIFwidHdvLWNvbHVtbi1hZG1pblwiIGZvcm0gbGF5b3V0IHN0cmF0ZWd5IGNvbXBvbmVudFxuICogdGhhdCB3cmFwcyB0aGUgbWFpbiBmb3JtIGluIGEgZGl2IG9yZGVyIHRvIGFwcGx5XG4gKiBhbiBIVE1MIGNsYXNzIGZvciBzdHlsaW5nIHB1cnBvc2VzXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZm9ybSBzZWN0aW9uXG4gKi9cbmNvbnN0IEZvcm1XcmFwcGVyID0gKCB7IGNoaWxkcmVuLCBodG1sSWQgPSAnJywgaHRtbENsYXNzID0gJycgfSApID0+IHtcblx0aHRtbENsYXNzID0gaHRtbENsYXNzID9cblx0XHRgJHsgaHRtbENsYXNzIH0gZWUtdHdvLWNvbHVtbi1hZG1pbmAgOlxuXHRcdCdlZS10d28tY29sdW1uLWFkbWluJztcblx0cmV0dXJuIChcblx0XHQ8ZGl2IGlkPXsgaHRtbElkIH0gY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0+XG5cdFx0XHR7IGNoaWxkcmVuIH1cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cbkZvcm1XcmFwcGVyLnByb3BUeXBlcyA9IHtcblx0Y2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5hcnJheU9mKCBQcm9wVHlwZXMub2JqZWN0ICksXG5cdF0gKSxcblx0aHRtbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb3JtV3JhcHBlcjtcbiIsImltcG9ydCB7IEZvcm1JbnB1dCB9IGZyb20gJy4uLy4uL2lucHV0cy9mb3JtLWlucHV0JztcbmltcG9ydCB7IElucHV0TGFiZWwgfSBmcm9tICcuLi8uLi9pbnB1dHMvYmFzZS9pbnB1dC1sYWJlbCc7XG5pbXBvcnQgQXV0b0NvbHVtblJvdyBmcm9tICcuL2F1dG8tY29sdW1uLXJvdyc7XG5pbXBvcnQgRm9ybUNvbHVtbiBmcm9tICcuL2Zvcm0tY29sdW1uJztcbmltcG9ydCBGb3JtSW5mbyBmcm9tICcuL2Zvcm0taW5mbyc7XG5pbXBvcnQgRm9ybVJvdyBmcm9tICcuL2Zvcm0tcm93JztcbmltcG9ydCBGb3JtU2F2ZUNhbmNlbEJ1dHRvbnMgZnJvbSAnLi9mb3JtLXNhdmUtY2FuY2VsLWJ1dHRvbnMnO1xuaW1wb3J0IEZvcm1TdWJtaXRCdXR0b24gZnJvbSAnLi4vLi4vYmFzZS9mb3JtLXN1Ym1pdC1idXR0b24nO1xuaW1wb3J0IEZvcm1DYW5jZWxCdXR0b24gZnJvbSAnLi4vLi4vYmFzZS9mb3JtLWNhbmNlbC1idXR0b24nO1xuaW1wb3J0IFN1Ym1pdHRpbmdOb3RpY2UgZnJvbSAnLi4vLi4vYmFzZS9zdWJtaXR0aW5nLW5vdGljZSc7XG5pbXBvcnQgRm9ybVNlY3Rpb24gZnJvbSAnLi9mb3JtLXNlY3Rpb24nO1xuaW1wb3J0IEZvcm1XcmFwcGVyIGZyb20gJy4vZm9ybS13cmFwcGVyJztcbmltcG9ydCAnLi90d28tY29sdW1uLWFkbWluLmNzcyc7XG5cbmNvbnN0IHR3b0NvbHVtbkFkbWluRm9ybUxheW91dCA9IHtcblx0SW5wdXRMYWJlbCxcblx0Rm9ybUlucHV0LFxuXHRGb3JtQ29sdW1uLFxuXHRGb3JtUm93LFxuXHRGb3JtU2VjdGlvbixcblx0Rm9ybVdyYXBwZXIsXG5cdEF1dG9Db2x1bW5Sb3csXG5cdEZvcm1TYXZlQ2FuY2VsQnV0dG9ucyxcblx0Rm9ybUluZm8sXG5cdEZvcm1TdWJtaXRCdXR0b24sXG5cdEZvcm1DYW5jZWxCdXR0b24sXG5cdFN1Ym1pdHRpbmdOb3RpY2UsXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtdHdvLWNvbHVtbi1hZG1pblwiOlwiZWUtdHdvLWNvbHVtbi1hZG1pblwiLFwiZWUtZm9ybS1yb3dcIjpcImVlLWZvcm0tcm93XCIsXCJlZS1mb3JtLXNlY3Rpb25cIjpcImVlLWZvcm0tc2VjdGlvblwiLFwicHgtMFwiOlwicHgtMFwiLFwicHgtM1wiOlwicHgtM1wiLFwib3BhY2l0eS01MFwiOlwib3BhY2l0eS01MFwiLFwiYm9yZGVyXCI6XCJib3JkZXJcIixcInJvdW5kZWRcIjpcInJvdW5kZWRcIixcInB0LTNcIjpcInB0LTNcIixcInB5LTNcIjpcInB5LTNcIixcInBsLTBcIjpcInBsLTBcIixcInByLTBcIjpcInByLTBcIixcInBsLTNcIjpcInBsLTNcIixcInByLTNcIjpcInByLTNcIixcIm0tMFwiOlwibS0wXCIsXCJ0ZXh0LXNtLXJpZ2h0XCI6XCJ0ZXh0LXNtLXJpZ2h0XCIsXCJjb2wtZm9ybS1sYWJlbFwiOlwiY29sLWZvcm0tbGFiZWxcIixcImZvcm0tY29udHJvbFwiOlwiZm9ybS1jb250cm9sXCIsXCJmb3JtLWNvbnRyb2wtd3BcIjpcImZvcm0tY29udHJvbC13cFwiLFwiY29tcG9uZW50cy1zZWxlY3QtY29udHJvbF9faW5wdXRcIjpcImNvbXBvbmVudHMtc2VsZWN0LWNvbnRyb2xfX2lucHV0XCIsXCJlZS1tb25leS1maWVsZFwiOlwiZWUtbW9uZXktZmllbGRcIixcImVlLXNpZ24tYWZ0ZXJcIjpcImVlLXNpZ24tYWZ0ZXJcIixcImVlLXNpZ24tYmVmb3JlXCI6XCJlZS1zaWduLWJlZm9yZVwiLFwiZWUtY3VyU2lnbi0yXCI6XCJlZS1jdXJTaWduLTJcIixcImVlLW1vbmV5LWZpZWxkLTJcIjpcImVlLW1vbmV5LWZpZWxkLTJcIixcImVlLWN1clNpZ24tM1wiOlwiZWUtY3VyU2lnbi0zXCIsXCJlZS1jdXJTaWduLTRcIjpcImVlLWN1clNpZ24tNFwiLFwiZWUtY3VycmVuY3ktc2lnblwiOlwiZWUtY3VycmVuY3ktc2lnblwiLFwiZWUtcGVyY2VudC1zaWduXCI6XCJlZS1wZXJjZW50LXNpZ25cIixcImFsaWduLWl0ZW1zLXNtLWNlbnRlclwiOlwiYWxpZ24taXRlbXMtc20tY2VudGVyXCIsXCJkLWZsZXhcIjpcImQtZmxleFwiLFwiYnRuXCI6XCJidG5cIixcImJ0bi1ncm91cFwiOlwiYnRuLWdyb3VwXCIsXCJvZmZzZXQtc20tMlwiOlwib2Zmc2V0LXNtLTJcIixcImJ0bi1ncm91cC12ZXJ0aWNhbFwiOlwiYnRuLWdyb3VwLXZlcnRpY2FsXCIsXCJkcm9wZG93bi10b2dnbGVcIjpcImRyb3Bkb3duLXRvZ2dsZVwiLFwiZGlzYWJsZWRcIjpcImRpc2FibGVkXCIsXCJidG4tcHJpbWFyeVwiOlwiYnRuLXByaW1hcnlcIixcImFjdGl2ZVwiOlwiYWN0aXZlXCIsXCJzaG93XCI6XCJzaG93XCIsXCJlZS1jaGVja2JveC1sYWJlbC1hZnRlclwiOlwiZWUtY2hlY2tib3gtbGFiZWwtYWZ0ZXJcIixcImVlLXJhZGlvLWxhYmVsLWFmdGVyXCI6XCJlZS1yYWRpby1sYWJlbC1hZnRlclwiLFwiZXNwcmVzc28taW5wdXQtaGVscC10ZXh0XCI6XCJlc3ByZXNzby1pbnB1dC1oZWxwLXRleHRcIixcImxlZnRcIjpcImxlZnRcIixcImVlLWZvcm0tc2F2ZS1jYW5jZWwtYnV0dG9ucy1kaXZcIjpcImVlLWZvcm0tc2F2ZS1jYW5jZWwtYnV0dG9ucy1kaXZcIixcImVlLWZvcm0tYnV0dG9uLXJvd1wiOlwiZWUtZm9ybS1idXR0b24tcm93XCIsXCJidXR0b24tcHJpbWFyeVwiOlwiYnV0dG9uLXByaW1hcnlcIixcImJ1dHRvbi1zZWNvbmRhcnlcIjpcImJ1dHRvbi1zZWNvbmRhcnlcIixcImVlLWZvcm0tYnV0dG9uXCI6XCJlZS1mb3JtLWJ1dHRvblwiLFwiZWUtaW5wdXQtd2lkdGgtMVwiOlwiZWUtaW5wdXQtd2lkdGgtMVwiLFwiZWUtaW5wdXQtd2lkdGgtMlwiOlwiZWUtaW5wdXQtd2lkdGgtMlwiLFwiZWUtaW5wdXQtd2lkdGgtM1wiOlwiZWUtaW5wdXQtd2lkdGgtM1wiLFwiZWUtaW5wdXQtd2lkdGgtNFwiOlwiZWUtaW5wdXQtd2lkdGgtNFwiLFwiZWUtaW5wdXQtd2lkdGgtNVwiOlwiZWUtaW5wdXQtd2lkdGgtNVwiLFwiZWUtaW5wdXQtd2lkdGgtNlwiOlwiZWUtaW5wdXQtd2lkdGgtNlwiLFwiZWUtdG9nZ2xlLWlucHV0XCI6XCJlZS10b2dnbGUtaW5wdXRcIixcImNvbXBvbmVudHMtdG9nZ2xlLWNvbnRyb2xfX2xhYmVsXCI6XCJjb21wb25lbnRzLXRvZ2dsZS1jb250cm9sX19sYWJlbFwiLFwiZWUtY2hlY2tib3gtdG9nZ2xlXCI6XCJlZS1jaGVja2JveC10b2dnbGVcIixcImVlLXN3aXRjaC10b2dnbGVcIjpcImVlLXN3aXRjaC10b2dnbGVcIixcImNvbXBvbmVudHMtZm9ybS10b2dnbGVcIjpcImNvbXBvbmVudHMtZm9ybS10b2dnbGVcIixcImVlLWhpZGRlbi1sYWJlbFwiOlwiZWUtaGlkZGVuLWxhYmVsXCIsXCJlZS1hZnRlci1pbnB1dC13cmFwcGVyXCI6XCJlZS1hZnRlci1pbnB1dC13cmFwcGVyXCIsXCJlZS1hZnRlci1pbnB1dC1kaXZcIjpcImVlLWFmdGVyLWlucHV0LWRpdlwiLFwiY29tcG9uZW50cy10b29sdGlwXCI6XCJjb21wb25lbnRzLXRvb2x0aXBcIixcImNvbXBvbmVudHMtcGFuZWxfX2JvZHlcIjpcImNvbXBvbmVudHMtcGFuZWxfX2JvZHlcIixcImlzLW9wZW5lZFwiOlwiaXMtb3BlbmVkXCIsXCJlZS1mb3JtLWluZm8tcm93XCI6XCJlZS1mb3JtLWluZm8tcm93XCIsXCJjb2wtc20tMVwiOlwiY29sLXNtLTFcIixcImNvbC1zbS0xaFwiOlwiY29sLXNtLTFoXCIsXCJjb2wtc20tMXFcIjpcImNvbC1zbS0xcVwiLFwiY29sLXNtLTJcIjpcImNvbC1zbS0yXCIsXCJjb2wtc20tMi0zcVwiOlwiY29sLXNtLTItM3FcIixcImNvbC1zbS0yaFwiOlwiY29sLXNtLTJoXCIsXCJjb2wtc20tM1wiOlwiY29sLXNtLTNcIixcImNvbC1zbS0zaFwiOlwiY29sLXNtLTNoXCIsXCJjb2wtc20tNFwiOlwiY29sLXNtLTRcIixcImNvbC1zbS01XCI6XCJjb2wtc20tNVwiLFwiY29sLXNtLTZcIjpcImNvbC1zbS02XCIsXCJjb2wtc20tN1wiOlwiY29sLXNtLTdcIixcImNvbC1zbS04XCI6XCJjb2wtc20tOFwiLFwiY29sLXNtLTlcIjpcImNvbC1zbS05XCIsXCJjb2wtc20tMTBcIjpcImNvbC1zbS0xMFwiLFwiY29sLXNtLTExXCI6XCJjb2wtc20tMTFcIixcImNvbC1zbS0xMlwiOlwiY29sLXNtLTEyXCIsXCJjb2wtc20taFwiOlwiY29sLXNtLWhcIixcIm9mZnNldC1zbS0xXCI6XCJvZmZzZXQtc20tMVwiLFwib2Zmc2V0LXNtLTNcIjpcIm9mZnNldC1zbS0zXCIsXCJvZmZzZXQtc20tNFwiOlwib2Zmc2V0LXNtLTRcIixcIm9mZnNldC1zbS01XCI6XCJvZmZzZXQtc20tNVwiLFwib2Zmc2V0LXNtLTZcIjpcIm9mZnNldC1zbS02XCIsXCJvZmZzZXQtc20tN1wiOlwib2Zmc2V0LXNtLTdcIixcIm9mZnNldC1zbS04XCI6XCJvZmZzZXQtc20tOFwiLFwib2Zmc2V0LXNtLTlcIjpcIm9mZnNldC1zbS05XCIsXCJvZmZzZXQtc20tMTBcIjpcIm9mZnNldC1zbS0xMFwiLFwib2Zmc2V0LXNtLWhcIjpcIm9mZnNldC1zbS1oXCIsXCJjb2wtc20tN2hcIjpcImNvbC1zbS03aFwifTsiLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQge1xuXHRpc0VtcHR5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc1VuZGVmaW5lZCxcblx0cmVkdWNlLFxuXHRpc0FycmF5LFxuXHRpc01hcCxcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuXG4vKipcbiAqIFJlY2VpdmVzIGFuIGFycmF5fE9iamVjdHxNYXAgb2YgZXZlbnQgZW50aXRpZXMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2Ygc2ltcGxlXG4gKiBvYmplY3RzIHRoYXQgY2FuIGJlIHBhc3NlZCBhbG9uZyB0byB0aGUgb3B0aW9ucyBhcnJheSB1c2VkIGZvciBhXG4gKiBTZWxlY3RDb250cm9sIGNvbXBvbmVudFxuICpcbiAqIEBwYXJhbSB7IE1hcHxPYmplY3R8QXJyYXkgfSAgZW50aXRpZXNcbiAqIEBwYXJhbSB7IE9iamVjdCB9IG9wdGlvbnNFbnRpdHlNYXAgT2JqZWN0IG9mIGtleSB2YWx1ZSBwYWlycyB3aGVyZSB2YWx1ZXNcbiAqIGFyZSB0aGUgJ2xhYmVsOnZhbHVlJyBwYWlyaW5ncyB1c2VkIHRvIHBvcHVsYXRlIHRoZSBTZWxlY3QgaW5wdXQuXG4gKiBAcGFyYW0geyBzdHJpbmcgfSBtYXBTZWxlY3Rpb24gRGV0ZXJtaW5lcyB3aGljaCBvcHRpb25FbnRpdHlNYXAgcGFpcmluZyB0b1xuICogdXNlLlxuICogQHJldHVybiB7IEFycmF5IH0gUmV0dXJucyBhbiBhcnJheSBvZiBzaW1wbGUgb2JqZWN0cyBmb3JtYXR0ZWQgZm9yIGFueVxuICogc2VsZWN0IGNvbnRyb2wgdGhhdCByZWNlaXZlcyBpdHMgb3B0aW9ucyBpbiB0aGUgZm9ybWF0IG9mIGFuIGFycmF5IG9mIG9iamVjdHNcbiAqIHdpdGggbGFiZWwgYW5kIHZhbHVlIGtleXMuXG4gKi9cbmNvbnN0IGJ1aWxkT3B0aW9ucyA9IChcblx0ZW50aXRpZXMsXG5cdG9wdGlvbnNFbnRpdHlNYXAsXG5cdG1hcFNlbGVjdGlvbiA9ICdkZWZhdWx0JyxcbikgPT4ge1xuXHRpZiAoIGlzRW1wdHkoIGVudGl0aWVzICkgKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGVudGl0aWVzID0gaXNNYXAoIGVudGl0aWVzICkgPyBBcnJheS5mcm9tKCBlbnRpdGllcy52YWx1ZXMoKSApIDogZW50aXRpZXM7XG5cdGlmICggaXNFbXB0eSggb3B0aW9uc0VudGl0eU1hcCApICkge1xuXHRcdHdhcm5pbmcoXG5cdFx0XHRmYWxzZSxcblx0XHRcdCdBIHZhbGlkIG9wdGlvbnNFbnRpdHlNYXAgbXVzdCBiZSBzdXBwbGllZCAnICtcblx0XHRcdCdpbiBvcmRlciB0byBidWlsZCBvcHRpb25zIGZvciBhIE1vZGVsU2VsZWN0IGNvbXBvbmVudCcsXG5cdFx0XHRvcHRpb25zRW50aXR5TWFwLFxuXHRcdCk7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmICggaXNVbmRlZmluZWQoIG9wdGlvbnNFbnRpdHlNYXBbIG1hcFNlbGVjdGlvbiBdICkgKSB7XG5cdFx0d2FybmluZyhcblx0XHRcdGZhbHNlLFxuXHRcdFx0J0EgdmFsaWQgb3B0aW9uc0VudGl0eU1hcFsgbWFwU2VsZWN0aW9uIF0gbXVzdCBiZSBzdXBwbGllZCAnICtcblx0XHRcdCdpbiBvcmRlciB0byBidWlsZCBvcHRpb25zIGZvciBhIE1vZGVsU2VsZWN0IGNvbXBvbmVudCcsXG5cdFx0XHRvcHRpb25zRW50aXR5TWFwLFxuXHRcdFx0bWFwU2VsZWN0aW9uLFxuXHRcdCk7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdC8vIGlmIHJlcXVlc3RlZCBtYXBTZWxlY3Rpb24gZXhpc3RzIHRoZW4gdXNlIHRoYXRcblx0bGV0IG1hcCA9IG9wdGlvbnNFbnRpdHlNYXBbIG1hcFNlbGVjdGlvbiBdO1xuXG5cdC8vIGlmIG1hcCBpcyBmdW5jdGlvbiB0aGVuIHNpbXBseSBwYXNzIHRocm91Z2ggZW50aXRpZXMgdG8gdGhhdCBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIG1hcCApICkge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBtYXAoIGVudGl0aWVzICk7XG5cdFx0aWYgKCBpc0FycmF5KCBvcHRpb25zICkgKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucztcblx0XHR9XG5cdFx0Ly8gc2V0IG1hcCB0byBlbXB0eSBvYmplY3QgYmVjYXVzZSB0aGUgZnVuY3Rpb24gb24gaXQgcmV0dXJuZWQgc29tZXRoaW5nXG5cdFx0Ly8gb3RoZXIgdGhhbiBhbiBhcnJheVxuXHRcdG1hcCA9IHt9O1xuXHRcdHdhcm5pbmcoXG5cdFx0XHRmYWxzZSxcblx0XHRcdCdUaGUgb3B0aW9uc0VudGl0eU1hcCBmb3IgJyArIG1hcFNlbGVjdGlvbiArICd3YXMgYSBmdW5jdGlvbiBidXQnICtcblx0XHRcdCcgaXQgZGlkIG5vdCByZXR1cm4gYW4gYXJyYXkgb2Ygb3B0aW9ucy4gIE1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24nICtcblx0XHRcdCcgcmV0dXJucyBhbiBhcnJheSBvZiBzaW1wbGUgb2JqZWN0cyB3aXRoIGxhYmVsIGFuZCB2YWx1ZSBrZXlzLicsXG5cdFx0KTtcblx0fVxuXHRpZiAoIGlzRW1wdHkoIG1hcCApICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRjb25zdCByZWR1Y2VyQ2FsbGJhY2sgPSAoIG9wdGlvbnMsIGVudGl0eSApID0+IHtcblx0XHRjb25zdCBsYWJlbCA9IGlzRnVuY3Rpb24oIG1hcC5sYWJlbCApID9cblx0XHRcdG1hcC5sYWJlbCggZW50aXR5ICkgOlxuXHRcdFx0ZW50aXR5WyBtYXAubGFiZWwgXTtcblx0XHRjb25zdCB2YWx1ZSA9IGlzRnVuY3Rpb24oIG1hcC52YWx1ZSApID9cblx0XHRcdG1hcC52YWx1ZSggZW50aXR5ICkgOlxuXHRcdFx0ZW50aXR5WyBtYXAudmFsdWUgXTtcblx0XHRpZiAoIGxhYmVsICYmIHZhbHVlICkge1xuXHRcdFx0b3B0aW9ucy5wdXNoKCB7IGxhYmVsLCB2YWx1ZSB9ICk7XG5cdFx0fVxuXHRcdHJldHVybiBvcHRpb25zO1xuXHR9O1xuXHRyZXR1cm4gISBpc0FycmF5KCBlbnRpdGllcyApID9cblx0XHRlbnRpdGllcy5yZWR1Y2UoIHJlZHVjZXJDYWxsYmFjaywgW10gKSA6XG5cdFx0cmVkdWNlKCBlbnRpdGllcywgcmVkdWNlckNhbGxiYWNrLCBbXSApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRPcHRpb25zO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgTW9kZWxTZWxlY3QgZnJvbSAnLi9tb2RlbC1zZWxlY3QnO1xuaW1wb3J0IHsgbW9kZWxTZWxlY3ROYW1lIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5jb25zdCBkZWZhdWx0UHJvcFR5cGVzID0ge1xuXHRzZWxlY3RlZDogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxuXHRvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMsXG5cdGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTW9kZWwgU2VsZWN0IGNvbXBvbmVudCB1c2luZyB0aGUgZ2l2ZW4gYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0UHJvcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wVHlwZXNcbiAqIEByZXR1cm4ge01vZGVsU2VsZWN0Q29tcG9uZW50fSBBIG1vZGVsIHNlbGVjdCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IGNyZWF0ZU1vZGVsU2VsZWN0ID0gKCBtb2RlbE5hbWUsIGRlZmF1bHRQcm9wcyA9IHt9LCBwcm9wVHlwZXMgPSB7fSApID0+IHtcblx0Y2xhc3MgTW9kZWxTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRcdC8qKlxuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0c3RhdGljIG1vZGVsTmFtZSA9IG1vZGVsTmFtZTtcblxuXHRcdC8qKlxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdFx0c3RhdGljIGRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcblxuXHRcdC8qKlxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdFx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRcdC4uLmRlZmF1bHRQcm9wVHlwZXMsXG5cdFx0XHQuLi5wcm9wVHlwZXMsXG5cdFx0fTtcblxuXHRcdHJlbmRlcigpIHtcblx0XHRcdGNvbnN0IHsgc2VsZWN0ZWQsIG9uU2VsZWN0IH0gPSB0aGlzLnByb3BzO1xuXHRcdFx0bGV0IHsgcXVlcnlEYXRhIH0gPSB0aGlzLnByb3BzO1xuXHRcdFx0Y29uc3Qgc2VsZWN0T3B0aW9ucyA9IHtcblx0XHRcdFx0c2VsZWN0Q29uZmlndXJhdGlvbjoge1xuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZTogc2VsZWN0ZWQsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IG9uU2VsZWN0LFxuXHRcdFx0XHRcdC4uLnRoaXMucHJvcHMuc2VsZWN0Q29uZmlndXJhdGlvbixcblx0XHRcdFx0fSxcblx0XHRcdH07XG5cblx0XHRcdGlmICggZGVmYXVsdFByb3BzLnF1ZXJ5RGF0YSAmJiBxdWVyeURhdGEgKSB7XG5cdFx0XHRcdHF1ZXJ5RGF0YSA9IHtcblx0XHRcdFx0XHQuLi5kZWZhdWx0UHJvcHMucXVlcnlEYXRhLFxuXHRcdFx0XHRcdC4uLnF1ZXJ5RGF0YSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcHJvcHMgPSB7XG5cdFx0XHRcdC4uLnRoaXMucHJvcHMsXG5cdFx0XHRcdC4uLnNlbGVjdE9wdGlvbnMsXG5cdFx0XHRcdHF1ZXJ5RGF0YSxcblx0XHRcdFx0bW9kZWxOYW1lOiB0aGlzLmNvbnN0cnVjdG9yLm1vZGVsTmFtZSxcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gPE1vZGVsU2VsZWN0IHsgLi4ucHJvcHMgfSAvPjtcblx0XHR9XG5cdH1cblx0TW9kZWxTZWxlY3RDb21wb25lbnQuZGlzcGxheU5hbWUgPSBtb2RlbFNlbGVjdE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZXR1cm4gTW9kZWxTZWxlY3RDb21wb25lbnQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVNb2RlbFNlbGVjdDtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuZXhwb3J0IGNvbnN0IFJFQUNUX1NFTEVDVF9UWVBFUyA9IHtcblx0J2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQnYXJpYS1sYWJlbCc6IFByb3BUeXBlcy5zdHJpbmcsXG5cdCdhcmlhLWxhYmVsbGVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXHRiYWNrc3BhY2VSZW1vdmVzVmFsdWU6IFByb3BUeXBlcy5ib29sLFxuXHRibHVySW5wdXRPblNlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG5cdGNhcHR1cmVNZW51U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcblx0Y2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRjbGFzc05hbWVQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGNsb3NlTWVudU9uU2VsZWN0OiBQcm9wVHlwZXMuYm9vbCxcblx0Y29tcG9uZW50czogUHJvcFR5cGVzLm9iamVjdCxcblx0Y29udHJvbFNob3VsZFJlbmRlclZhbHVlOiBQcm9wVHlwZXMuYm9vbCxcblx0ZGVsaW1pdGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRlc2NhcGVDbGVhcnNWYWx1ZTogUHJvcFR5cGVzLmJvb2wsXG5cdGZpbHRlck9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG5cdGZvcm1hdEdyb3VwTGFiZWw6IFByb3BUeXBlcy5mdW5jLFxuXHRmb3JtYXRPcHRpb25MYWJlbDogUHJvcFR5cGVzLmZ1bmMsXG5cdGdldE9wdGlvbkxhYmVsOiBQcm9wVHlwZXMuZnVuYyxcblx0Z2V0T3B0aW9uVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuXHRoaWRlU2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYm9vbCxcblx0aWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGlucHV0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGlucHV0SWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGluc3RhbmNlSWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcblx0aXNDbGVhcmFibGU6IFByb3BUeXBlcy5ib29sLFxuXHRpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblx0aXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblx0aXNPcHRpb25EaXNhYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG5cdGlzT3B0aW9uU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuXHRpc011bHRpOiBQcm9wVHlwZXMuYm9vbCxcblx0aXNTZWFyY2hhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblx0bG9hZGluZ01lc3NhZ2U6IFByb3BUeXBlcy5mdW5jLFxuXHRtaW5NZW51SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRtYXhNZW51SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRtZW51SXNPcGVuOiBQcm9wVHlwZXMuYm9vbCxcblx0bWVudVBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0J2F1dG8nLFxuXHRcdCdib3R0b20nLFxuXHRcdCd0b3AnLFxuXHRdICksXG5cdG1lbnVQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0J2Fic29sdXRlJyxcblx0XHQnZml4ZWQnLFxuXHRdICksXG5cdG1lbnVQb3J0YWxUYXJnZXQ6IFByb3BUeXBlcy5lbGVtZW50LFxuXHRtZW51U2hvdWxkQmxvY2tTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuXHRtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXc6IFByb3BUeXBlcy5ib29sLFxuXHRuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRub09wdGlvbnNNZXNzYWdlOiBQcm9wVHlwZXMuZnVuYyxcblx0b25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcblx0b25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXHRvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcblx0b25JbnB1dENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cdG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG5cdG9uTWVudU9wZW46IFByb3BUeXBlcy5mdW5jLFxuXHRvbk1lbnVDbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG5cdG9uTWVudVNjcm9sbFRvVG9wOiBQcm9wVHlwZXMuZnVuYyxcblx0b25NZW51U2Nyb2xsVG9Cb3R0b206IFByb3BUeXBlcy5mdW5jLFxuXHRvcGVuTWVudU9uRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXHRvcGVuTWVudU9uQ2xpY2s6IFByb3BUeXBlcy5ib29sLFxuXHRvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXksXG5cdHBhZ2VTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcblx0c2NyZWVuUmVhZGVyU3RhdHVzOiBQcm9wVHlwZXMuZnVuYyxcblx0c3R5bGVzOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRjbGVhckluZGljYXRvcjogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0Y29udGFpbmVyOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRjb250cm9sOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRkcm9wZG93bkluZGljYXRvcjogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0Z3JvdXA6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGdyb3VwSGVhZGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0aW5kaWNhdG9yc0NvbnRhaW5lcjogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0aW5kaWNhdG9yU2VwYXJhdG9yOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRpbnB1dDogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0bG9hZGluZ0luZGljYXRvcjogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0bG9hZGluZ01lc3NhZ2VDU1M6IFByb3BUeXBlcy5mdW5jLFxuXHRcdG1lbnU6IFByb3BUeXBlcy5mdW5jLFxuXHRcdG1lbnVMaXN0OiBQcm9wVHlwZXMuZnVuYyxcblx0XHRtZW51UG9ydGFsOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRtdWx0aVZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRtdWx0aVZhbHVlTGFiZWw6IFByb3BUeXBlcy5mdW5jLFxuXHRcdG11bHRpVmFsdWVSZW1vdmU6IFByb3BUeXBlcy5mdW5jLFxuXHRcdG5vT3B0aW9uc01lc3NhZ2VDU1M6IFByb3BUeXBlcy5mdW5jLFxuXHRcdG9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0cGxhY2Vob2xkZXI6IFByb3BUeXBlcy5mdW5jLFxuXHRcdHNpbmdsZVZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcblx0XHR2YWx1ZUNvbnRhaW5lcjogUHJvcFR5cGVzLmZ1bmMsXG5cdH0gKSxcblx0dGFiSW5kZXg6IFByb3BUeXBlcy5zdHJpbmcsXG5cdHRhYlNlbGVjdHNWYWx1ZTogUHJvcFR5cGVzLmJvb2wsXG5cdHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRQcm9wVHlwZXMuYXJyYXksXG5cdF0gKSxcbn07XG5cbmV4cG9ydCBjb25zdCBSRUFDVF9TRUxFQ1RfREVGQVVMVFMgPSB7XG5cdGlzQ2xlYXJhYmxlOiB0cnVlLFxuXHRpc0xvYWRpbmc6IHRydWUsXG5cdHBsYWNlaG9sZGVyOiBfXyggJ1NlbGVjdC4uLicsICdldmVudF9lc3ByZXNzbycgKSxcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBpc0VtcHR5LCB1bmlxdWVJZCwgZmluZCwgaXNVbmRlZmluZWQsIGlzRnVuY3Rpb24sIGlzTWFwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgaXNTaGFsbG93RXF1YWwgZnJvbSAnQHdvcmRwcmVzcy9pcy1zaGFsbG93LWVxdWFsJztcblxuLyoqXG4gKiBXUCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgd2l0aFNlbGVjdCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgYnVpbGRPcHRpb25zIGZyb20gJy4vYnVpbGQtb3B0aW9ucyc7XG5pbXBvcnQgeyBNT0RFTF9OQU1FUyB9IGZyb20gJy4uLy4uLy4uLy4uL2RhdGEvbW9kZWwvaW5kZXgnO1xuaW1wb3J0IHtcblx0UkVBQ1RfU0VMRUNUX0RFRkFVTFRTLFxuXHRSRUFDVF9TRUxFQ1RfVFlQRVMsXG59IGZyb20gJy4vZGVmYXVsdC1zZWxlY3QtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1xuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcblx0UVVFUllfT1JERVJfREVTQyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vZGF0YS9tb2RlbC9iYXNlJztcblxuLyoqXG4gKiBNb2RlbFNlbGVjdCBjb21wb25lbnQuXG4gKiBUaGlzIGlzIGEgY29tcG9uZW50IHRoYXQgd2lsbCBnZW5lcmF0ZSBhIHJlYWN0LXNlbGVjdCBpbnB1dCBmb3IgYSBnaXZlblxuICogbW9kZWwgYW5kIGl0cyBlbnRpdGllcyAocHJvdmlkZWQgdmlhIHByb3BzKS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGVwbG95LXByZXZpZXctMjI4OS0tcmVhY3Qtc2VsZWN0Lm5ldGxpZnkuY29tL3Byb3BzI3Byb3AtdHlwZXNcbiAqICAgZm9yIG9wdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRocm91Z2ggdmlhIHRoZSBzZWxlY3RDb25maWd1cmF0aW9uIHByb3AuXG4gKlxuICogQHBhcmFtIHsgT2JqZWN0IH0gc2VsZWN0Q29uZmlndXJhdGlvbiBcdEFuIG9iamVjdCBjb250YWluaW5nIG9wdGlvbnMgZm9yIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjdC1zZWxlY3QgY29tcG9uZW50LlxuICogQHBhcmFtIHsgQXJyYXkgfSBtb2RlbEVudGl0aWVzICAgICAgICAgIFx0QXJyYXkgb2YgbW9kZWwgZW50aXRpZXNcbiAqIEBwYXJhbSB7IHN0cmluZyB9IG1vZGVsTmFtZSAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIE1vZGVsIHRoZSBlbnRpdGllc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxvbmcgdG8uXG4gKiBAcGFyYW0geyBmdW5jdGlvbiB9IG1hcE9wdGlvbnNDYWxsYmFjayAgXHRUaGlzIGZ1bmN0aW9uIHdpbGwgcmVjZWl2ZSBieSBkZWZhdWx0XG4gKiBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlIG1vZGVsRW50aXRpZXMgYW5kIG9wdGlvbnNFbnRpdHlNYXAsXG4gKiBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YW5kIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhbiBhcnJheSBvZiBvcHRpb25zXG4gKiBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG8gYmUgdXNlZCBmb3IgdGhlIHJlYWN0LXNlbGVjdCBjb21wb25lbnQuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBvcHRpb25zRW50aXR5TWFwICAgIFx0T2JqZWN0IG9mIGtleSB2YWx1ZSBwYWlycyB3aGVyZSB2YWx1ZXMgYXJlIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHQnbGFiZWw6dmFsdWUnIHBhaXJpbmdzIHVzZWQgYnkgYG1hcE9wdGlvbnNDYWxsYmFja2BcbiAqIEBwYXJhbSB7IHN0cmluZyB9IG1hcFNlbGVjdGlvbiAgICAgICAgXHREZXRlcm1pbmVzIHdoaWNoIG9wdGlvbkVudGl0eU1hcCBwYWlyaW5nIHRvIHVzZVxuICovXG5leHBvcnQgY2xhc3MgTW9kZWxTZWxlY3QgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRzdGF0ZSA9IHt9O1xuXG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0c2VsZWN0Q29uZmlndXJhdGlvbjogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0XHQuLi5SRUFDVF9TRUxFQ1RfVFlQRVMsXG5cdFx0fSApLFxuXHRcdG1vZGVsRW50aXRpZXM6IFByb3BUeXBlcy5hcnJheSxcblx0XHRtb2RlbE5hbWU6IFByb3BUeXBlcy5vbmVPZiggTU9ERUxfTkFNRVMgKS5pc1JlcXVpcmVkLFxuXHRcdG1hcE9wdGlvbnNDYWxsYmFjazogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0b3B0aW9uc0VudGl0eU1hcDogUHJvcFR5cGVzLm9iamVjdCxcblx0XHRtYXBTZWxlY3Rpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRcdGxpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0b3JkZXJCeTogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdFx0fSApLFxuXHRcdGdldFF1ZXJ5U3RyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblx0fTtcblxuXHRzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuXHRcdHNlbGVjdENvbmZpZ3VyYXRpb246IHtcblx0XHRcdC4uLlJFQUNUX1NFTEVDVF9ERUZBVUxUUyxcblx0XHRcdG5hbWU6IHVuaXF1ZUlkKCAnbW9kZWwtc2VsZWN0LScgKSxcblx0XHR9LFxuXHRcdG1vZGVsRW50aXRpZXM6IFtdLFxuXHRcdG1hcE9wdGlvbnNDYWxsYmFjazogYnVpbGRPcHRpb25zLFxuXHRcdG1hcFNlbGVjdGlvbjogJ2RlZmF1bHQnLFxuXHRcdHF1ZXJ5RGF0YToge1xuXHRcdFx0bGltaXQ6IDEwMCxcblx0XHRcdG9yZGVyOiBRVUVSWV9PUkRFUl9ERVNDLFxuXHRcdH0sXG5cdFx0bGFiZWw6ICcnLFxuXHRcdGdldFF1ZXJ5U3RyaW5nOiAoKSA9PiAnJyxcblx0fTtcblxuXHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0c3VwZXIoIHByb3BzICk7XG5cdFx0dGhpcy5zdGF0ZSA9IE1vZGVsU2VsZWN0LnNldFN0YXRlRnJvbVByb3BzKCBwcm9wcyApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHN0YXRlIGZyb20gcHJvdmlkZWQgcHJvcHNcblx0ICogQHBhcmFtIHtPYmplY3R9IHByb3BzXG5cdCAqIEByZXR1cm4ge3tcblx0ICogaXNDbGVhcmFibGUsXG5cdCAqIGlzTG9hZGluZyxcblx0ICogcGxhY2Vob2xkZXIsXG5cdCAqIG9wdGlvbnM6ICgqfEFycmF5KSxcblx0ICogdmFsdWU6ICpcblx0ICogfX1cblx0ICogT2JqZWN0IHRvIHJlcGxhY2Ugc3RhdGUuXG5cdCAqL1xuXHRzdGF0aWMgc2V0U3RhdGVGcm9tUHJvcHMoIHByb3BzICkge1xuXHRcdGNvbnN0IHsgc2VsZWN0Q29uZmlndXJhdGlvbiB9ID0gcHJvcHM7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IE1vZGVsU2VsZWN0LmdldE9wdGlvbnMoIHByb3BzICk7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IE1vZGVsU2VsZWN0LmdldE9wdGlvbk9iamVjdEZvclZhbHVlKFxuXHRcdFx0c2VsZWN0Q29uZmlndXJhdGlvbi5kZWZhdWx0VmFsdWUsIG9wdGlvbnNcblx0XHQpO1xuXHRcdGNvbnN0IHVwZGF0ZWQgPSB7XG5cdFx0XHRvcHRpb25zLFxuXHRcdFx0dmFsdWU6IHNlbGVjdGVkVmFsdWUsXG5cdFx0fTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5SRUFDVF9TRUxFQ1RfREVGQVVMVFMsXG5cdFx0XHQuLi5zZWxlY3RDb25maWd1cmF0aW9uLFxuXHRcdFx0Li4udXBkYXRlZCxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdXAgb3B0aW9ucyBmb3IgdGhlIHNlbGVjdCBjb250cm9sIGZyb20gdGhlIGluY29taW5nIHByb3BzLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcblx0ICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gQXJyYXkgb2Ygb3B0aW9ucyBmb3Igc2VsZWN0IGNvbnRyb2xcblx0ICovXG5cdHN0YXRpYyBnZXRPcHRpb25zKCBwcm9wcyApIHtcblx0XHRjb25zdCB7XG5cdFx0XHRtYXBPcHRpb25zQ2FsbGJhY2ssXG5cdFx0XHRtb2RlbEVudGl0aWVzLFxuXHRcdFx0b3B0aW9uc0VudGl0eU1hcCxcblx0XHRcdG1hcFNlbGVjdGlvbixcblx0XHR9ID0gcHJvcHM7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBtYXBPcHRpb25zQ2FsbGJhY2sgKSAmJiAhIGlzRW1wdHkoIG1vZGVsRW50aXRpZXMgKSApIHtcblx0XHRcdHJldHVybiBtYXBPcHRpb25zQ2FsbGJhY2soXG5cdFx0XHRcdG1vZGVsRW50aXRpZXMsXG5cdFx0XHRcdG9wdGlvbnNFbnRpdHlNYXAsXG5cdFx0XHRcdG1hcFNlbGVjdGlvblxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdpdmVuIGEgdmFsdWUsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgb3B0aW9uIG9iamVjdC5cblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IG9wdGlvbnNcblx0ICogQHJldHVybiB7T2JqZWN0fG51bGx9IFRoZSBvcHRpb24gb2JqZWN0IGZvciB0aGUgZ2l2ZW4gdmFsdWUgb3IgbnVsbC5cblx0ICovXG5cdHN0YXRpYyBnZXRPcHRpb25PYmplY3RGb3JWYWx1ZSggdmFsdWUsIG9wdGlvbnMgKSB7XG5cdFx0aWYgKCAhIGlzRW1wdHkoIG9wdGlvbnMgKSApIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gZmluZCggb3B0aW9ucywgZnVuY3Rpb24oIG9wdGlvbiApIHtcblx0XHRcdFx0cmV0dXJuIG9wdGlvbi52YWx1ZSA9PT0gdmFsdWU7XG5cdFx0XHR9ICk7XG5cdFx0XHRyZXR1cm4gISBpc1VuZGVmaW5lZCggbWF0Y2ggKSA/XG5cdFx0XHRcdG1hdGNoIDpcblx0XHRcdFx0bnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogSGVscGVyIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBzdGF0ZSBzaG91bGQgYmUgdXBkYXRlZC5cblx0ICogQ3JpdGVyaWEgaXMgd2hldGhlciB0aGUga2V5cyBmcm9tIHRoZSBpbmNvbWluZyBlbnRpdGllcyBhcmUgZXF1aXZhbGVudFxuXHQgKiAoZXF1aXZhbGVuY3kgbWVhbnMgaW4gc2FtZSBvcmRlciBhcyB3ZWxsKVxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcHJldlByb3BzXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBuZXh0UHJvcHNcblx0ICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyBzdGF0ZSBzaG91bGQgYmUgdXBkYXRlZC5cblx0ICovXG5cdHN0YXRpYyBzaG91bGRVcGRhdGVTdGF0ZSggcHJldlByb3BzLCBuZXh0UHJvcHMgKSB7XG5cdFx0aWYgKCBwcmV2UHJvcHMgPT09IG5leHRQcm9wcyApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCB7IHNlbGVjdENvbmZpZ3VyYXRpb246IHByZXZDb25maWd1cmF0aW9uIH0gPSBwcmV2UHJvcHM7XG5cdFx0Y29uc3QgeyBzZWxlY3RDb25maWd1cmF0aW9uOiBuZXh0Q29uZmlndXJhdGlvbiB9ID0gbmV4dFByb3BzO1xuXG5cdFx0Ly8gaWYgZGVmYXVsdFZhbHVlIGhhcyBjaGFuZ2VkIChzZWxlY3RlZCB2YWx1ZSkgdGhlbiB1cGRhdGUgc3RhdGVcblx0XHRpZiAoXG5cdFx0XHRwcmV2Q29uZmlndXJhdGlvbi5kZWZhdWx0VmFsdWUgIT09IG5leHRDb25maWd1cmF0aW9uLmRlZmF1bHRWYWx1ZVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBwcmV2Q29uZmlndXJhdGlvbi5pc0xvYWRpbmcgIT09IG5leHRDb25maWd1cmF0aW9uLmlzTG9hZGluZyApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIHNoYWxsb3cgY29tcGFyZSBvZiBrZXlzIGJ1dCBvbmx5IGlmIHdlIGNhblxuXHRcdGlmIChcblx0XHRcdCEgaXNNYXAoIHByZXZQcm9wcy5tb2RlbEVudGl0aWVzICkgfHxcblx0XHRcdCEgaXNNYXAoIG5leHRQcm9wcy5tb2RlbEVudGl0aWVzIClcblx0XHQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdCEgaXNTaGFsbG93RXF1YWwoXG5cdFx0XHRcdEFycmF5LmZyb20oIHByZXZQcm9wcy5tb2RlbEVudGl0aWVzLmtleXMoKSApLFxuXHRcdFx0XHRBcnJheS5mcm9tKCBuZXh0UHJvcHMubW9kZWxFbnRpdGllcy5rZXlzKCkgKVxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0Y29tcG9uZW50RGlkTW91bnQoKSB7XG5cdFx0dGhpcy5zZXRTdGF0ZShcblx0XHRcdE1vZGVsU2VsZWN0LnNldFN0YXRlRnJvbVByb3BzKCB0aGlzLnByb3BzIClcblx0XHQpO1xuXHR9XG5cblx0Y29tcG9uZW50RGlkVXBkYXRlKCBwcmV2UHJvcHMgKSB7XG5cdFx0aWYgKCBNb2RlbFNlbGVjdC5zaG91bGRVcGRhdGVTdGF0ZSggcHJldlByb3BzLCB0aGlzLnByb3BzICkgKSB7XG5cdFx0XHR0aGlzLnNldFN0YXRlKFxuXHRcdFx0XHRNb2RlbFNlbGVjdC5zZXRTdGF0ZUZyb21Qcm9wcyggdGhpcy5wcm9wcyApXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNlbGVjdCBjb250cm9sXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGxhYmVsIHRvIHVzZS5cblx0ICovXG5cdGdldFNlbGVjdExhYmVsKCkge1xuXHRcdGNvbnN0IHsgbGFiZWwsIHNlbGVjdENvbmZpZ3VyYXRpb24gfSA9IHRoaXMucHJvcHM7XG5cdFx0cmV0dXJuIGxhYmVsID9cblx0XHRcdDxsYWJlbCBodG1sRm9yPXsgc2VsZWN0Q29uZmlndXJhdGlvbi5uYW1lIH0+eyBsYWJlbCB9PC9sYWJlbD4gOlxuXHRcdFx0Jyc7XG5cdH1cblxuXHRyZW5kZXIoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0eyB0aGlzLmdldFNlbGVjdExhYmVsKCkgfVxuXHRcdFx0XHQ8U2VsZWN0IHsgLi4udGhpcy5zdGF0ZSB9IC8+XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgTW9kZWxTZWxlY3QgQ29tcG9uZW50IHdyYXBwZWQgaW4gdGhlIGB3aXRoU2VsZWN0YCBoaWdoZXIgb3JkZXIgY29tcG9uZW50LlxuICogVGhpcyBzdWJzY3JpYmVzIHRoZSBNb2RlbFNlbGVjdCBjb21wb25lbnQgdG8gdGhlIHN0YXRlIG1haW50YWluZWQgdmlhIHRoZVxuICogZXZlbnRlc3ByZXNzby9saXN0cyBzdG9yZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgd2l0aFNlbGVjdCggKCBzZWxlY3QsIG93blByb3BzICkgPT4ge1xuXHRjb25zdCB7IGdldFF1ZXJ5U3RyaW5nLCBtb2RlbE5hbWUsIHNlbGVjdENvbmZpZ3VyYXRpb24gfSA9IG93blByb3BzO1xuXHRjb25zdCBxdWVyeVN0cmluZyA9IGdldFF1ZXJ5U3RyaW5nKCBvd25Qcm9wcy5xdWVyeURhdGEgKTtcblx0Y29uc3QgeyBnZXRFbnRpdGllcywgaXNSZXF1ZXN0aW5nRW50aXRpZXMgfSA9IHNlbGVjdCggJ2V2ZW50ZXNwcmVzc28vbGlzdHMnICk7XG5cdHJldHVybiB7XG5cdFx0Li4uTW9kZWxTZWxlY3QuZGVmYXVsdFByb3BzLFxuXHRcdC4uLm93blByb3BzLFxuXHRcdG1vZGVsRW50aXRpZXM6IGdldEVudGl0aWVzKCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nICksXG5cdFx0c2VsZWN0Q29uZmlndXJhdGlvbjoge1xuXHRcdFx0Li4uTW9kZWxTZWxlY3QuZGVmYXVsdFByb3BzLnNlbGVjdENvbmZpZ3VyYXRpb24sXG5cdFx0XHQuLi5zZWxlY3RDb25maWd1cmF0aW9uLFxuXHRcdFx0aXNMb2FkaW5nOiBpc1JlcXVlc3RpbmdFbnRpdGllcyggbW9kZWxOYW1lLCBxdWVyeVN0cmluZyApLFxuXHRcdH0sXG5cdH07XG59ICkoIE1vZGVsU2VsZWN0ICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdXBwZXJGaXJzdCwgY2FtZWxDYXNlIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBSZXR1cm4gYSBuYW1lIGZvciBhIG1vZGVsIHNlbGVjdCBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSBSZWNlaXZlcyBzb21ldGhpbmcgbGlrZSAnbWVzc2FnZV90ZW1wbGF0ZScgYW5kIHJldHVybnNcbiAqIE1lc3NhZ2VUZW1wbGF0ZVNlbGVjdFxuICovXG5leHBvcnQgY29uc3QgbW9kZWxTZWxlY3ROYW1lID0gKCBtb2RlbE5hbWUgKSA9PiB7XG5cdHJldHVybiB1cHBlckZpcnN0KCBjYW1lbENhc2UoIG1vZGVsTmFtZSApICkgKyAnU2VsZWN0Jztcbn07XG4iLCJleHBvcnQgeyBNb2RlbFNlbGVjdCwgZGVmYXVsdCBhcyBNb2RlbEVuaGFuY2VkU2VsZWN0IH0gZnJvbSAnLi9iYXNlL21vZGVsLXNlbGVjdCc7XG5leHBvcnQgKiBmcm9tICcuL3NlbGVjdCc7XG5leHBvcnQgKiBmcm9tICcuL2Jhc2UvYnVpbGQtb3B0aW9ucyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZU1vZGVsU2VsZWN0IH0gZnJvbSAnLi9iYXNlL2NyZWF0ZS1tb2RlbC1zZWxlY3QnO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjcmVhdGVNb2RlbFNlbGVjdCBmcm9tICcuLi9iYXNlL2NyZWF0ZS1tb2RlbC1zZWxlY3QnO1xuaW1wb3J0IHsgZGF0ZVRpbWVNb2RlbCBhcyBtb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2RhdGEvbW9kZWwnO1xuaW1wb3J0IHsgd2l0aEJhc2VDb250cm9sIH0gZnJvbSAnLi4vLi4vLi4vLi4vaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmNvbnN0IG9wdGlvbnNFbnRpdHlNYXAgPSB7XG5cdGRlZmF1bHQ6IHtcblx0XHR2YWx1ZTogJ0RUVF9JRCcsXG5cdFx0bGFiZWw6ICggZW50aXR5ICkgPT4ge1xuXHRcdFx0cmV0dXJuIG1vZGVsLnByZXR0eURhdGVGcm9tRGF0ZVRpbWUoIGVudGl0eSApO1xuXHRcdH0sXG5cdH0sXG5cdG5hbWU6IHtcblx0XHR2YWx1ZTogJ0RUVF9JRCcsXG5cdFx0bGFiZWw6ICdEVFRfbmFtZScsXG5cdH0sXG59O1xuXG5jb25zdCBEYXRldGltZVNlbGVjdCA9IGNyZWF0ZU1vZGVsU2VsZWN0KFxuXHRtb2RlbC5NT0RFTF9OQU1FLFxuXHR7XG5cdFx0c2VsZWN0Q29uZmlndXJhdGlvbjoge1xuXHRcdFx0bG9hZGluZ01lc3NhZ2U6ICgpID0+IF9fKCAnUmV0cmlldmluZyBEYXRldGltZXMuJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0bm9PcHRpb25zTWVzc2FnZTogKCkgPT4gX18oXG5cdFx0XHRcdCdObyBEYXRldGltZXMuJyxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdCksXG5cdFx0XHRwbGFjZWhvbGRlcjogX18oICdTZWxlY3QgRGF0ZXRpbWUuLi4nLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0fSxcblx0XHQuLi5tb2RlbC5kZWZhdWx0UXVlcnlEYXRhLFxuXHRcdGdldFF1ZXJ5U3RyaW5nOiBtb2RlbC5nZXRRdWVyeVN0cmluZyxcblx0XHRsYWJlbDogX18oICdTZWxlY3QgRGF0ZXRpbWUnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0b3B0aW9uc0VudGl0eU1hcCxcblx0fSxcblx0e1xuXHRcdC4uLm1vZGVsLnF1ZXJ5RGF0YVR5cGVzLFxuXHRcdG9wdGlvbnNFbnRpdHlNYXA6IFByb3BUeXBlcy5vYmplY3QsXG5cdH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IERhdGV0aW1lU2VsZWN0O1xuXG4vKipcbiAqIEVuaGFuY2VkIERhdGV0aW1lIFNlbGVjdCBmb3IgdGhlIFdvcmRQcmVzcyBlZGl0b3JcbiAqL1xuZXhwb3J0IGNvbnN0IEVkaXRvckRhdGV0aW1lU2VsZWN0ID0gd2l0aEJhc2VDb250cm9sKFxuXHQnc2VsZWN0LWRhdGV0aW1lJ1xuKSggRGF0ZXRpbWVTZWxlY3QgKTtcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY3JlYXRlTW9kZWxTZWxlY3QgZnJvbSAnLi4vYmFzZS9jcmVhdGUtbW9kZWwtc2VsZWN0JztcbmltcG9ydCB7IGV2ZW50TW9kZWwgYXMgbW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXRhL21vZGVsJztcbmltcG9ydCB7IHdpdGhCYXNlQ29udHJvbCB9IGZyb20gJy4uLy4uLy4uLy4uL2hpZ2hlci1vcmRlci1jb21wb25lbnRzJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbmNvbnN0IG9wdGlvbnNFbnRpdHlNYXAgPSB7XG5cdGRlZmF1bHQ6IHtcblx0XHR2YWx1ZTogJ0VWVF9JRCcsXG5cdFx0bGFiZWw6ICdFVlRfbmFtZScsXG5cdH0sXG59O1xuXG5jb25zdCBFdmVudFNlbGVjdCA9IGNyZWF0ZU1vZGVsU2VsZWN0KFxuXHRtb2RlbC5NT0RFTF9OQU1FLFxuXHR7XG5cdFx0c2VsZWN0Q29uZmlndXJhdGlvbjoge1xuXHRcdFx0bG9hZGluZ01lc3NhZ2U6ICgpID0+IF9fKCAnUmV0cmlldmluZyBFdmVudHMuJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0bm9PcHRpb25zTWVzc2FnZTogKCkgPT4gX18oXG5cdFx0XHRcdCdObyBFdmVudHMuJyxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdCksXG5cdFx0XHRwbGFjZWhvbGRlcjogX18oICdTZWxlY3QgRXZlbnQuLi4nLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0fSxcblx0XHQuLi5tb2RlbC5kZWZhdWx0UXVlcnlEYXRhLFxuXHRcdGdldFF1ZXJ5U3RyaW5nOiBtb2RlbC5nZXRRdWVyeVN0cmluZyxcblx0XHRsYWJlbDogX18oICdTZWxlY3QgRXZlbnQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0b3B0aW9uc0VudGl0eU1hcCxcblx0fSxcblx0e1xuXHRcdC4uLm1vZGVsLnF1ZXJ5RGF0YVR5cGVzLFxuXHR9XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBFdmVudFNlbGVjdDtcblxuLyoqXG4gKiBFbmhhbmNlZCBFdmVudFNlbGVjdCBmb3IgdGhlIFdvcmRQcmVzcyBlZGl0b3IuXG4gKi9cbmV4cG9ydCBjb25zdCBFZGl0b3JFdmVudFNlbGVjdCA9IHdpdGhCYXNlQ29udHJvbChcblx0J3NlbGVjdC1ldmVudCdcbikoIEV2ZW50U2VsZWN0ICk7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEV2ZW50U2VsZWN0LCBFZGl0b3JFdmVudFNlbGVjdCB9IGZyb20gJy4vZXZlbnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEYXRldGltZVNlbGVjdCwgRWRpdG9yRGF0ZXRpbWVTZWxlY3QgfSBmcm9tICcuL2RhdGV0aW1lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhdHVzU2VsZWN0LCBFZGl0b3JTdGF0dXNTZWxlY3QgfSBmcm9tICcuL3N0YXR1cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRpY2tldFNlbGVjdCwgRWRpdG9yVGlja2V0U2VsZWN0IH0gZnJvbSAnLi90aWNrZXQnO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjcmVhdGVNb2RlbFNlbGVjdCBmcm9tICcuLi9iYXNlL2NyZWF0ZS1tb2RlbC1zZWxlY3QnO1xuaW1wb3J0IHsgc3RhdHVzTW9kZWwgYXMgbW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXRhL21vZGVsJztcbmltcG9ydCB7IHdpdGhCYXNlQ29udHJvbCB9IGZyb20gJy4uLy4uLy4uLy4uL2hpZ2hlci1vcmRlci1jb21wb25lbnRzJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgc3RhdHVzTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5cbmNvbnN0IG9wdGlvbnNFbnRpdHlNYXAgPSB7XG5cdGRlZmF1bHQ6IHtcblx0XHR2YWx1ZTogJ1NUU19JRCcsXG5cdFx0bGFiZWw6ICggc3RhdHVzRW50aXR5ICkgPT4gc3RhdHVzTW9kZWwucHJldHR5U3RhdHVzKFxuXHRcdFx0c3RhdHVzRW50aXR5LlNUU19JRFxuXHRcdCksXG5cdH0sXG59O1xuXG4vKipcbiAqIEB0eXBlIHtNb2RlbFNlbGVjdENvbXBvbmVudH1cbiAqL1xuY29uc3QgU3RhdHVzU2VsZWN0ID0gY3JlYXRlTW9kZWxTZWxlY3QoXG5cdG1vZGVsLk1PREVMX05BTUUsXG5cdHtcblx0XHRzZWxlY3RDb25maWd1cmF0aW9uOiB7XG5cdFx0XHRsb2FkaW5nTWVzc2FnZTogKCkgPT4gX18oICdSZXRyaWV2aW5nIFN0YXR1c2VzLicsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHQpLFxuXHRcdFx0bm9PcHRpb25zTWVzc2FnZTogKCkgPT4gX18oICdObyBTdGF0dXNlcy4nLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRwbGFjZWhvbGRlcjogX18oICdTZWxlY3QgU3RhdHVzLi4uJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdH0sXG5cdFx0Li4ubW9kZWwuZGVmYXVsdFF1ZXJ5RGF0YSxcblx0XHRnZXRRdWVyeVN0cmluZzogbW9kZWwuZ2V0UXVlcnlTdHJpbmcsXG5cdFx0bGFiZWw6IF9fKCAnU2VsZWN0IFN0YXR1cycsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRvcHRpb25zRW50aXR5TWFwLFxuXHR9LFxuXHR7XG5cdFx0Li4ubW9kZWwucXVlcnlEYXRhVHlwZXMsXG5cdFx0c2VsZWN0ZWQ6IFByb3BUeXBlcy5vbmVPZihcblx0XHRcdG1vZGVsLkFMTF9TVEFUVVNfSURTXG5cdFx0KSxcblx0XHRvcHRpb25zRW50aXR5TWFwOiBQcm9wVHlwZXMub2JqZWN0LFxuXHR9LFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgU3RhdHVzU2VsZWN0O1xuXG4vKipcbiAqIEVuaGFuY2VkIFN0YXR1cyBTZWxlY3QgZm9yIHRoZSBXb3JkUHJlc3MgZWRpdG9yXG4gKi9cbmV4cG9ydCBjb25zdCBFZGl0b3JTdGF0dXNTZWxlY3QgPSB3aXRoQmFzZUNvbnRyb2woXG5cdCdzZWxlY3Qtc3RhdHVzJ1xuKSggU3RhdHVzU2VsZWN0ICk7XG4iLCIvKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IGNyZWF0ZU1vZGVsU2VsZWN0IGZyb20gJy4uL2Jhc2UvY3JlYXRlLW1vZGVsLXNlbGVjdCc7XG5pbXBvcnQgeyB0aWNrZXRNb2RlbCBhcyBtb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2RhdGEvbW9kZWwnO1xuaW1wb3J0IHsgd2l0aEJhc2VDb250cm9sIH0gZnJvbSAnLi4vLi4vLi4vLi4vaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmNvbnN0IG9wdGlvbnNFbnRpdHlNYXAgPSB7XG5cdGRlZmF1bHQ6IHtcblx0XHR2YWx1ZTogJ1RLVF9JRCcsXG5cdFx0bGFiZWw6ICdUS1RfbmFtZScsXG5cdH0sXG59O1xuXG5jb25zdCBUaWNrZXRTZWxlY3QgPSBjcmVhdGVNb2RlbFNlbGVjdChcblx0bW9kZWwuTU9ERUxfTkFNRSxcblx0e1xuXHRcdHNlbGVjdENvbmZpZ3VyYXRpb246IHtcblx0XHRcdGxvYWRpbmdNZXNzYWdlOiAoKSA9PiBfXyggJ1JldHJpZXZpbmcgVGlja2V0cy4nLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRub09wdGlvbnNNZXNzYWdlOiAoKSA9PiBfXyggJ05vIFRpY2tldHMuJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0cGxhY2Vob2xkZXI6IF9fKCAnU2VsZWN0IFRpY2tldC4uLicsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHR9LFxuXHRcdC4uLm1vZGVsLmRlZmF1bHRRdWVyeURhdGEsXG5cdFx0Z2V0UXVlcnlTdHJpbmc6IG1vZGVsLmdldFF1ZXJ5U3RyaW5nLFxuXHRcdGxhYmVsOiBfXyggJ1NlbGVjdCBUaWNrZXQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0b3B0aW9uc0VudGl0eU1hcCxcblx0fSxcblx0e1xuXHRcdC4uLm1vZGVsLnF1ZXJ5RGF0YVR5cGVzLFxuXHRcdG9wdGlvbnNFbnRpdHlNYXA6IFByb3BUeXBlcy5vYmplY3QsXG5cdH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFRpY2tldFNlbGVjdDtcblxuLyoqXG4gKiBFbmhhbmNlZCBUaWNrZXQgU2VsZWN0IGZvciB0aGUgV29yZFByZXNzIGVkaXRvclxuICovXG5leHBvcnQgY29uc3QgRWRpdG9yVGlja2V0U2VsZWN0ID0gd2l0aEJhc2VDb250cm9sKFxuXHQnc2VsZWN0LXRpY2tldCdcbikoIFRpY2tldFNlbGVjdCApO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fLCBfbiwgc3ByaW50ZiB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHtcblx0aXNGbG9hdCBhcyBpc1ZhbGlkRmxvYXQsXG5cdGlzSW50ZWdlciBhcyBpc1ZhbGlkSW50ZWdlcixcblx0aXNOdW1lcmljIGFzIGlzVmFsaWROdW1lcmljLFxuXHRmbG9hdExlc3NUaGFuT3JFcXVhbFRvLFxuXHRzdHJpbmdMZW5ndGhMZXNzVGhhbk9yRXF1YWxUbyxcblx0bnVtYmVyTGVzc1RoYW5PckVxdWFsVG8sXG5cdGZsb2F0R3JlYXRlclRoYW5PckVxdWFsVG8sXG5cdHN0cmluZ0xlbmd0aEdyZWF0ZXJUaGFuT3JFcXVhbFRvLFxuXHRudW1iZXJHcmVhdGVyVGhhbk9yRXF1YWxUbyxcbn0gZnJvbSAnLi4vLi4vLi4vZGF0YS9oZWxwZXJzL3ZhbGlkYXRpb25zJztcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bWl4ZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gZXJyb3Igc3RyaW5nIG9uIGZhaWxcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRmxvYXQgPSAoIHZhbHVlICkgPT4gISBpc1ZhbGlkRmxvYXQoICt2YWx1ZSApID9cblx0X18oICdWYWx1ZSBtdXN0IGJlIGEgZmxvYXQnLCAnZXZlbnRfZXNwcmVzc28nICkgOlxuXHRudWxsO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHttaXhlZH0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ3xudWxsfSBlcnJvciBzdHJpbmcgb24gZmFpbFxuICovXG5leHBvcnQgY29uc3QgaXNJbnRlZ2VyID0gKCB2YWx1ZSApID0+ICEgaXNWYWxpZEludGVnZXIoICt2YWx1ZSApID9cblx0X18oICdWYWx1ZSBtdXN0IGJlIGFuIGludGVnZXInLCAnZXZlbnRfZXNwcmVzc28nICkgOlxuXHRudWxsO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHttaXhlZH0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9IGVycm9yIHN0cmluZyBvbiBmYWlsXG4gKi9cbmV4cG9ydCBjb25zdCBpc051bWVyaWMgPSAoIHZhbHVlICkgPT4gISBpc1ZhbGlkTnVtZXJpYyggK3ZhbHVlICkgP1xuXHRfXyggJ1ZhbHVlIG11c3QgYmUgYSBudW1iZXInLCAnZXZlbnRfZXNwcmVzc28nICkgOlxuXHRudWxsO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHttaXhlZH0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH0gZXJyb3Igc3RyaW5nIG9uIGZhaWxcbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGNoZXMgPSAoIGZpZWxkVmFsdWUsIGZpZWxkTmFtZSApID0+ICggdmFsdWVUb01hdGNoICkgPT5cblx0ISB2YWx1ZVRvTWF0Y2ggfHwgZmllbGRWYWx1ZSAhPT0gdmFsdWVUb01hdGNoID9cblx0XHRzcHJpbnRmKFxuXHRcdFx0X18oICdWYWx1ZSBzaG91bGQgbWF0Y2ggJXMnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRmaWVsZE5hbWVcblx0XHQpIDogbnVsbDtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhcbiAqIEByZXR1cm4ge3N0cmluZ3xudWxsfSBlcnJvciBzdHJpbmcgb24gZmFpbFxuICovXG5leHBvcnQgY29uc3QgbWF4RmxvYXQgPSAoIG1heCApID0+ICggdmFsdWUgKSA9PlxuXHQhIGZsb2F0TGVzc1RoYW5PckVxdWFsVG8oICttYXgsICt2YWx1ZSApID9cblx0XHRzcHJpbnRmKFxuXHRcdFx0X24oXG5cdFx0XHRcdCdOdW1iZXIgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gJWYnLFxuXHRcdFx0XHQnTnVtYmVyIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuICVmJyxcblx0XHRcdFx0bWF4LFxuXHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHQpLFxuXHRcdFx0bWF4XG5cdFx0KSA6IG51bGw7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gZXJyb3Igc3RyaW5nIG9uIGZhaWxcbiAqL1xuZXhwb3J0IGNvbnN0IG1heExlbmd0aCA9ICggbWF4ID0gMTAyNCApID0+ICggdmFsdWUgKSA9PiAoXG5cdCEgc3RyaW5nTGVuZ3RoTGVzc1RoYW5PckVxdWFsVG8oICttYXgsIHZhbHVlICkgP1xuXHRcdHNwcmludGYoXG5cdFx0XHRfbihcblx0XHRcdFx0J1ZhbHVlIHNob3VsZCBub3QgZXhjZWVkICVkIGNoYXJhY3RlciBpbiBsZW5ndGgnLFxuXHRcdFx0XHQnVmFsdWUgc2hvdWxkIG5vdCBleGNlZWQgJWQgY2hhcmFjdGVycyBpbiBsZW5ndGgnLFxuXHRcdFx0XHRtYXgsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdCksXG5cdFx0XHRtYXhcblx0XHQpIDogbnVsbFxuKTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhcbiAqIEByZXR1cm4ge3N0cmluZ3xudWxsfSBlcnJvciBzdHJpbmcgb24gZmFpbFxuICovXG5leHBvcnQgY29uc3QgbWF4TnVtYmVyID0gKCBtYXggKSA9PiAoIHZhbHVlICkgPT4gKFxuXHQhIG51bWJlckxlc3NUaGFuT3JFcXVhbFRvKCArbWF4LCArdmFsdWUgKSA/XG5cdFx0c3ByaW50Zihcblx0XHRcdF9uKFxuXHRcdFx0XHQnTnVtYmVyIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuICVkJyxcblx0XHRcdFx0J051bWJlciBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiAlZCcsXG5cdFx0XHRcdG1heCxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0KSxcblx0XHRcdG1heFxuXHRcdCkgOiBudWxsXG4pO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IG1pblxuICogQHJldHVybiB7c3RyaW5nfG51bGx9IGVycm9yIHN0cmluZyBvbiBmYWlsXG4gKi9cbmV4cG9ydCBjb25zdCBtaW5GbG9hdCA9ICggbWluICkgPT4gKCB2YWx1ZSApID0+IChcblx0ISBmbG9hdEdyZWF0ZXJUaGFuT3JFcXVhbFRvKCArbWluLCArdmFsdWUgKSA/XG5cdFx0c3ByaW50Zihcblx0XHRcdF9uKFxuXHRcdFx0XHQnTnVtYmVyIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuICVmJyxcblx0XHRcdFx0J051bWJlciBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiAlZicsXG5cdFx0XHRcdG1pbixcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0KSxcblx0XHRcdG1pblxuXHRcdCkgOiBudWxsXG4pO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IG1pblxuICogQHJldHVybiB7c3RyaW5nfG51bGx9IGVycm9yIHN0cmluZyBvbiBmYWlsXG4gKi9cbmV4cG9ydCBjb25zdCBtaW5MZW5ndGggPSAoIG1pbiA9IDEgKSA9PiAoIHZhbHVlICkgPT4gKFxuXHQhIHN0cmluZ0xlbmd0aEdyZWF0ZXJUaGFuT3JFcXVhbFRvKCArbWluLCB2YWx1ZSApID9cblx0XHRzcHJpbnRmKFxuXHRcdFx0X24oXG5cdFx0XHRcdCdWYWx1ZSBzaG91bGQgYmUgYXQgbGVhc3QgJWQgY2hhcmFjdGVyIGluIGxlbmd0aCcsXG5cdFx0XHRcdCdWYWx1ZSBzaG91bGQgYmUgYXQgbGVhc3QgJWQgY2hhcmFjdGVycyBpbiBsZW5ndGgnLFxuXHRcdFx0XHRtaW4sXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdCksXG5cdFx0XHRtaW5cblx0XHQpIDogbnVsbFxuKTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cbiAqIEByZXR1cm4ge3N0cmluZ3xudWxsfSBlcnJvciBzdHJpbmcgb24gZmFpbFxuICovXG5leHBvcnQgY29uc3QgbWluTnVtYmVyID0gKCBtaW4gKSA9PiAoIHZhbHVlICkgPT4gKFxuXHQhIG51bWJlckdyZWF0ZXJUaGFuT3JFcXVhbFRvKCArbWluLCArdmFsdWUgKSA/XG5cdFx0c3ByaW50Zihcblx0XHRcdF9uKFxuXHRcdFx0XHQnTnVtYmVyIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuICVkJyxcblx0XHRcdFx0J051bWJlciBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiAlZCcsXG5cdFx0XHRcdG1pbixcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0KSxcblx0XHRcdG1pblxuXHRcdCkgOiBudWxsXG4pO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHttaXhlZH0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ3xudWxsfSBlcnJvciBzdHJpbmcgb24gZmFpbFxuICovXG5leHBvcnQgY29uc3QgcmVxdWlyZWQgPSAoIHZhbHVlICkgPT4gISB2YWx1ZSA/XG5cdF9fKCAnUGxlYXNlIGVudGVyIGEgdmFsdWUnLCAnZXZlbnRfZXNwcmVzc28nICkgOlxuXHRudWxsO1xuXG5jb25zdCB2YWxpZGF0aW9ucyA9IHtcblx0aXNGbG9hdCxcblx0aXNJbnRlZ2VyLFxuXHRpc051bWVyaWMsXG5cdG1hdGNoZXMsXG5cdG1heEZsb2F0LFxuXHRtYXhMZW5ndGgsXG5cdG1heE51bWJlcixcblx0bWluRmxvYXQsXG5cdG1pbkxlbmd0aCxcblx0bWluTnVtYmVyLFxuXHRyZXF1aXJlZCxcbn07XG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0aW9ucztcbiIsIi8vIHF1ZXJ5IGNvbXBvbmVudHNcbmV4cG9ydCB7IFF1ZXJ5TGltaXQgfSBmcm9tICcuL3F1ZXJ5L2xpbWl0Jztcbi8vIHNlbGVjdGlvbiBjb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL2Zvcm0nO1xuLy8gZ2VuZXJhbCB1aSBjb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL3VpJztcbi8vIG90aGVyXG5leHBvcnQgeyBkZWZhdWx0IGFzIEV2ZW50QXR0ZW5kZWVMaXN0IH0gZnJvbSAnLi9ldmVudC1hdHRlbmRlZXMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBXb3JkUHJlc3MgZGVwZW5kZW5jaWVzXG4gKiovXG5pbXBvcnQgeyBSYW5nZUNvbnRyb2wsIFRleHRDb250cm9sIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcblxuY29uc3QgREVGQVVMVF9MSU1JVCA9IDEwO1xuY29uc3QgREVGQVVMVF9MQUJFTCA9IF9fKCAnTGltaXQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5jb25zdCBERUZBVUxUX01JTiA9IDE7XG5jb25zdCBERUZBVUxUX01BWCA9IDEwMDA7XG5cbmV4cG9ydCBjb25zdCBRdWVyeUxpbWl0ID0gKCB7XG5cdG9uTGltaXRDaGFuZ2UsXG5cdGxpbWl0ID0gREVGQVVMVF9MSU1JVCxcblx0bGFiZWwgPSBERUZBVUxUX0xBQkVMLFxuXHRtaW4gPSBERUZBVUxUX01JTixcblx0bWF4ID0gREVGQVVMVF9NQVgsXG5cdHdpdGhTbGlkZXIgPSB0cnVlLFxuXHQuLi5yZXN0XG59ICkgPT4ge1xuXHRyZXR1cm4gd2l0aFNsaWRlciA/XG5cdFx0KCA8UmFuZ2VDb250cm9sXG5cdFx0XHRrZXk9eyAncXVlcnktbGltaXQnIH1cblx0XHRcdHZhbHVlPXsgbGltaXQgfVxuXHRcdFx0bGFiZWw9eyBsYWJlbCB9XG5cdFx0XHRtaW49eyBtaW4gfVxuXHRcdFx0bWF4PXsgbWF4IH1cblx0XHRcdG9uQ2hhbmdlPXsgb25MaW1pdENoYW5nZSB9XG5cdFx0XHR7IC4uLnJlc3QgfVxuXHRcdC8+ICkgOlxuXHRcdCggPFRleHRDb250cm9sXG5cdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdHZhbHVlPXsgbGltaXQgfVxuXHRcdFx0bGFiZWw9eyBsYWJlbCB9XG5cdFx0XHRtaW49eyBtaW4gfVxuXHRcdFx0bWF4PXsgbWF4IH1cblx0XHRcdG9uQ2hhbmdlPXsgb25MaW1pdENoYW5nZSB9XG5cdFx0XHR7IC4uLnJlc3QgfVxuXHRcdC8+ICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbHVlLW9iamVjdHMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcbmltcG9ydCB7IEVzcHJlc3NvSWNvbiB9IGZyb20gJy4uLy4uL2ltYWdlL2VzcHJlc3NvLWljb24nO1xuXG4vKipcbiAqIERpc3BsYXlzIGEgZnVsbCBjYWxlbmRhciBkYXRlLCBidXQgUkVBTExZIEJJRyEhIVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHBvc2l0aW9uXG4gKiBAcGFyYW0ge0RhdGVUaW1lfSBkYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyVGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IGZvb3RlclRleHRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uRWRpdFxuICogQHBhcmFtIHtPYmplY3R9IGVkaXRCdXR0b25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd1RpbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gcmVuZGVyZWQgZGF0ZVxuICovXG5jb25zdCBCaWdnaWVDYWxlbmRhckRhdGUgPSAoIHtcblx0ZGF0ZSxcblx0aHRtbENsYXNzLFxuXHRoZWFkZXJUZXh0LFxuXHRmb290ZXJUZXh0LFxuXHRwb3NpdGlvbiA9ICdsZWZ0Jyxcblx0b25FZGl0ID0gbnVsbCxcblx0ZWRpdEJ1dHRvbiA9IHt9LFxuXHRzaG93VGltZSA9IGZhbHNlLFxufSApID0+IHtcblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcyhcblx0XHQnYmlnZ2llLWNhbGVuZGFyLWRhdGUtYmcnLFxuXHRcdGh0bWxDbGFzcyxcblx0XHR7XG5cdFx0XHQnYmNkLXBvcy1sZWZ0JzogcG9zaXRpb24gPT09ICdsZWZ0Jyxcblx0XHRcdCdiY2QtcG9zLXJpZ2h0JzogcG9zaXRpb24gIT09ICdsZWZ0J1xuXHRcdH1cblx0KTtcblx0Y29uc3QgZWRpdERhdGVCdXR0b24gPSBpc0Z1bmN0aW9uKCBvbkVkaXQgKSA/IChcblx0XHQ8SWNvbkJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPVwiZWUtZWRpdC1jYWxlbmRhci1kYXRlLWJ0blwiXG5cdFx0XHRvbkNsaWNrPXsgKCBldmVudCApID0+IG9uRWRpdCggZXZlbnQgKSB9XG5cdFx0XHRvbktleVByZXNzPXsgKCBldmVudCApID0+IG9uRWRpdCggZXZlbnQgKSB9XG5cdFx0XHR0b29sdGlwPXsgZWRpdEJ1dHRvbi50b29sdGlwIH1cblx0XHRcdGxhYmVsUG9zaXRpb249eyBlZGl0QnV0dG9uLnRvb2x0aXBQb3NpdGlvbiB9XG5cdFx0XHRpY29uPXsgPEVzcHJlc3NvSWNvbiBpY29uPVwiY2FsZW5kYXJcIi8+IH1cblx0XHQvPlxuXHQpOiBudWxsO1xuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0+XG5cdFx0XHR7XG5cdFx0XHRcdGhlYWRlclRleHQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYmlnZ2llLWNhbGVuZGFyLWRhdGUtaGVhZGVyXCI+XG5cdFx0XHRcdFx0XHR7IGhlYWRlclRleHQgfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJpZ2dpZS1jYWxlbmRhci1kYXRlXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwid2Vla2RheVwiPlxuXHRcdFx0XHRcdHsgZGF0ZS50b0Zvcm1hdCggJ2RkZGQnICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtb250aFwiPlxuXHRcdFx0XHRcdHsgZGF0ZS50b0Zvcm1hdCggJ01NTU0nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtb250aC1kYXktc2VwXCI+PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZGF5XCI+XG5cdFx0XHRcdFx0eyBkYXRlLnRvRm9ybWF0KCAnREQnICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ5ZWFyXCI+XG5cdFx0XHRcdFx0eyBkYXRlLnRvRm9ybWF0KCAnWVlZWScgKSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0c2hvd1RpbWUgJiYgKFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1tY2QtdGltZVwiPlxuXHRcdFx0XHRcdFx0XHR7IGRhdGUudG9Gb3JtYXQoICdoOm1tIGEnICkgfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHtcblx0XHRcdFx0Zm9vdGVyVGV4dCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJiaWdnaWUtY2FsZW5kYXItZGF0ZS1mb290ZXJcIj5cblx0XHRcdFx0XHRcdHsgZm9vdGVyVGV4dCB9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHRcdHsgZWRpdERhdGVCdXR0b24gfVxuXHRcdDwvZGl2PlxuXHQpO1xufTtcblxuQmlnZ2llQ2FsZW5kYXJEYXRlLnByb3BUeXBlcyA9IHtcblx0ZGF0ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0UHJvcFR5cGVzLmluc3RhbmNlT2YoIERhdGVUaW1lIClcblx0XSApLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGhlYWRlclRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMuYXJyYXksXG5cdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRdICksXG5cdGZvb3RlclRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMuYXJyYXksXG5cdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRdICksXG5cdG9uRWRpdDogUHJvcFR5cGVzLmZ1bmMsXG5cdGVkaXRCdXR0b246IFByb3BUeXBlcy5vYmplY3QsXG5cdHNob3dUaW1lOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJpZ2dpZUNhbGVuZGFyRGF0ZTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJiaWdnaWUtY2FsZW5kYXItZGF0ZS1iZ1wiOlwiYmlnZ2llLWNhbGVuZGFyLWRhdGUtYmdcIixcImJjZC1wb3MtbGVmdFwiOlwiYmNkLXBvcy1sZWZ0XCIsXCJiY2QtcG9zLXJpZ2h0XCI6XCJiY2QtcG9zLXJpZ2h0XCIsXCJiaWdnaWUtY2FsZW5kYXItZGF0ZS1oZWFkZXJcIjpcImJpZ2dpZS1jYWxlbmRhci1kYXRlLWhlYWRlclwiLFwiYmlnZ2llLWNhbGVuZGFyLWRhdGVcIjpcImJpZ2dpZS1jYWxlbmRhci1kYXRlXCIsXCJ3ZWVrZGF5XCI6XCJ3ZWVrZGF5XCIsXCJtb250aFwiOlwibW9udGhcIixcIm1vbnRoLWRheS1zZXBcIjpcIm1vbnRoLWRheS1zZXBcIixcImRheVwiOlwiZGF5XCIsXCJ5ZWFyXCI6XCJ5ZWFyXCIsXCJiaWdnaWUtY2FsZW5kYXItZGF0ZS1mb290ZXJcIjpcImJpZ2dpZS1jYWxlbmRhci1kYXRlLWZvb3RlclwiLFwiZWUtbWNkLXRpbWVcIjpcImVlLW1jZC10aW1lXCIsXCJlZS1zdGF0dXMtdGFnXCI6XCJlZS1zdGF0dXMtdGFnXCIsXCJlZS1lZGl0LWNhbGVuZGFyLWRhdGUtYnRuXCI6XCJlZS1lZGl0LWNhbGVuZGFyLWRhdGUtYnRuXCIsXCJpcy1kZWZhdWx0XCI6XCJpcy1kZWZhdWx0XCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuaW1wb3J0IEJpZ2dpZUNhbGVuZGFyRGF0ZSBmcm9tICcuLi9iaWdnaWUtY2FsZW5kYXItZGF0ZSc7XG5pbXBvcnQgTWVkaXVtQ2FsZW5kYXJEYXRlIGZyb20gJy4uL21lZGl1bS1jYWxlbmRhci1kYXRlJztcblxuLyoqXG4gKiBEaXNwbGF5cyBhIHBhaXIgb2YgY2FsZW5kYXIgZGF0ZXMgcmVwcmVzZW50aW5nIGEgZGF0ZSByYW5nZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtEYXRlVGltZX0gc3RhcnREYXRlXG4gKiBAcGFyYW0ge0RhdGVUaW1lfSBlbmREYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyVGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IGZvb3RlclRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3NpdGlvblxuICogQHBhcmFtIHtib29sZWFufSBzaG93VGltZVxuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBkYXRlXG4gKi9cbmNvbnN0IENhbGVuZGFyRGF0ZVJhbmdlID0gKCB7XG5cdHN0YXJ0RGF0ZSxcblx0ZW5kRGF0ZSxcblx0aGVhZGVyVGV4dCA9ICcnLFxuXHRmb290ZXJUZXh0ID0gJycsXG5cdGh0bWxDbGFzcyA9ICcnLFxuXHRwb3NpdGlvbiA9ICdsZWZ0Jyxcblx0c2hvd1RpbWUgPSBmYWxzZSxcbn0gKSA9PiB7XG5cdGlmIChcblx0XHRzdGFydERhdGUudG9Gb3JtYXQoICdZWS1NTS1ERCcgKSAhPT0gZW5kRGF0ZS50b0Zvcm1hdCggJ1lZLU1NLUREJyApXG5cdCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVkaXVtQ2FsZW5kYXJEYXRlXG5cdFx0XHRcdGRhdGU9eyBzdGFydERhdGUgfVxuXHRcdFx0XHRodG1sQ2xhc3M9eyBodG1sQ2xhc3MgfVxuXHRcdFx0XHRwb3NpdGlvbj17IHBvc2l0aW9uIH1cblx0XHRcdFx0c2hvd1RpbWU9eyBzaG93VGltZSB9XG5cdFx0XHRcdGFkZFdyYXBwZXJcblx0XHRcdFx0Zm9vdGVyVGV4dD17XG5cdFx0XHRcdFx0PE1lZGl1bUNhbGVuZGFyRGF0ZVxuXHRcdFx0XHRcdFx0a2V5PXsgJ2VuZC1kYXRlJyB9XG5cdFx0XHRcdFx0XHRkYXRlPXsgZW5kRGF0ZSB9XG5cdFx0XHRcdFx0XHRoZWFkZXJUZXh0PXsgX18oICd0bycsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHRzaG93VGltZT17IHNob3dUaW1lIH1cblx0XHRcdFx0XHRcdGZvb3RlclRleHQ9eyBmb290ZXJUZXh0IH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHR9XG5cdFx0XHQvPlxuXHRcdClcblx0fVxuXHRsZXQgdGltZSA9IHN0YXJ0RGF0ZS50b0Zvcm1hdCggJ2g6bW0gYSAtICcgKTtcblx0dGltZSArPSBlbmREYXRlLnRvRm9ybWF0KCAnaDptbSBhJyApO1xuXHRoZWFkZXJUZXh0ID0gaGVhZGVyVGV4dCA/IGhlYWRlclRleHQgOiA8c3Bhbj4mbmJzcDs8L3NwYW4+O1xuXHRyZXR1cm4gKFxuXHRcdDxCaWdnaWVDYWxlbmRhckRhdGVcblx0XHRcdGRhdGU9eyBzdGFydERhdGUgfVxuXHRcdFx0aHRtbENsYXNzPXsgaHRtbENsYXNzIH1cblx0XHRcdGhlYWRlclRleHQ9eyBoZWFkZXJUZXh0IH1cblx0XHRcdGZvb3RlclRleHQ9eyBbIHRpbWUsIGZvb3RlclRleHQgXSB9XG5cdFx0XHRwb3NpdGlvbj17IHBvc2l0aW9uIH1cblx0XHQvPlxuXHQpO1xufTtcblxuQ2FsZW5kYXJEYXRlUmFuZ2UucHJvcFR5cGVzID0ge1xuXHRzdGFydERhdGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5pbnN0YW5jZU9mKCBEYXRlVGltZSApXG5cdF0gKS5pc1JlcXVpcmVkLFxuXHRlbmREYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZiggRGF0ZVRpbWUgKS5pc1JlcXVpcmVkLFxuXHRoZWFkZXJUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxuXHRmb290ZXJUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdHBvc2l0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRzaG93VGltZTogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDYWxlbmRhckRhdGVSYW5nZTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1jYWxlbmRhci1kYXRlLXJhbmdlLXdyYXBwZXJcIjpcImVlLWNhbGVuZGFyLWRhdGUtcmFuZ2Utd3JhcHBlclwiLFwiY2RyLXBvcy1sZWZ0XCI6XCJjZHItcG9zLWxlZnRcIixcImNkci1wb3MtcmlnaHRcIjpcImNkci1wb3MtcmlnaHRcIixcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVyXCI6XCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlclwiLFwiZWUtY2RyLXdlZWtkYXlcIjpcImVlLWNkci13ZWVrZGF5XCIsXCJlZS1jZHItbW9udGgtYW5kLWRheVwiOlwiZWUtY2RyLW1vbnRoLWFuZC1kYXlcIixcImVlLWNkci1kYXlcIjpcImVlLWNkci1kYXlcIixcImVlLWNkci15ZWFyXCI6XCJlZS1jZHIteWVhclwiLFwiZWUtY2FsZW5kYXItZGF0ZS1yYW5nZS1zZXBhcmF0b3JcIjpcImVlLWNhbGVuZGFyLWRhdGUtcmFuZ2Utc2VwYXJhdG9yXCIsXCJlZS1jZHItdGltZVwiOlwiZWUtY2RyLXRpbWVcIixcImVlLWNhbGVuZGFyLXRpbWUtc2VwYXJhdG9yXCI6XCJlZS1jYWxlbmRhci10aW1lLXNlcGFyYXRvclwiLFwiZWUtY2FsZW5kYXItZGF0ZS1yYW5nZS1mb290ZXJcIjpcImVlLWNhbGVuZGFyLWRhdGUtcmFuZ2UtZm9vdGVyXCIsXCJlZS1jYWxlbmRhci1kYXRlLXJhbmdlLWhlYWRlclwiOlwiZWUtY2FsZW5kYXItZGF0ZS1yYW5nZS1oZWFkZXJcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBTZXJ2ZXJEYXRlVGltZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbHVlLW9iamVjdHMnO1xuaW1wb3J0IHsgaW5zdGFuY2VPZiB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcblxuLyoqXG4gKiBDYWxlbmRhclBhZ2VEYXRlXG4gKiBEaXNwbGF5cyBhIGRhdGUgYXMgaWYgaXQgd2VyZSBhIHBhZ2UgZnJvbVxuICogb25lIG9mIHRob3NlIG1pbmkgY2FsZW5kYXJzIHdoZXJlIGVhY2ggcGFnZSBpcyBhIGRheVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtTZXJ2ZXJEYXRlVGltZX0gc3RhcnREYXRlIFx0RGF0ZVRpbWUgZGVmaW5pbmcgdGhlIHN0YXJ0IG9mIGFuIEV2ZW50XG4gKiBAcGFyYW0ge1NlcnZlckRhdGVUaW1lfSBlbmREYXRlIFx0RGF0ZVRpbWUgZGVmaW5pbmcgdGhlIGVuZCBvZiBhbiBFdmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1c0NsYXNzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFx0XHRcdFRoZSBkYXRlIHJlbmRlcmVkIHRvIGxvb2sgbGlrZSBhIGNhbGVuZGFyIHBhZ2VcbiAqL1xuY2xhc3MgQ2FsZW5kYXJQYWdlRGF0ZSBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0c3RhcnREYXRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFx0UHJvcFR5cGVzLmluc3RhbmNlT2YoIFNlcnZlckRhdGVUaW1lICksXG5cdFx0XSApLFxuXHRcdGVuZERhdGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0XHRQcm9wVHlwZXMuaW5zdGFuY2VPZiggU2VydmVyRGF0ZVRpbWUgKSxcblx0XHRdICksXG5cdFx0c2l6ZTogUHJvcFR5cGVzLm9uZU9mKCBbICd0aW55JywgJ3NtYWxsJywgJ21lZGl1bScsICdiaWcnIF0gKSxcblx0XHRzdGF0dXNDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0fTtcblxuXHQvKipcblx0ICogU3RhcnREYXRlXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge1NlcnZlckRhdGVUaW1lfSBzdGFydERhdGUgb2JqZWN0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0dXNDbGFzc1xuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdGFydCBkYXRlIGZvcm1hdHRlZCB0byBsb29rIGxpa2UgYSBjYWxlbmRhciBwYWdlXG5cdCAqL1xuXHRnZXRTdGFydERhdGUgPSAoIHN0YXJ0RGF0ZSwgc3RhdHVzQ2xhc3MgKSA9PiB7XG5cdFx0cmV0dXJuIGluc3RhbmNlT2YoIHN0YXJ0RGF0ZSwgJ1NlcnZlckRhdGVUaW1lJyApID8gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1zdGFydFwiID5cblx0XHRcdFx0eyB0aGlzLnJlbmRlckNhbGVuZGFyUGFnZSggc3RhcnREYXRlLCBzdGF0dXNDbGFzcyApIH1cblx0XHRcdDwvZGl2PlxuXHRcdCkgOiBudWxsO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBFbmREYXRlXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge1NlcnZlckRhdGVUaW1lfSBlbmREYXRlIG9iamVjdFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzQ2xhc3Ncblx0ICogQHJldHVybiB7c3RyaW5nfSBUaGUgZW5kIGRhdGUgZm9ybWF0dGVkIHRvIGxvb2sgbGlrZSBhIGNhbGVuZGFyIHBhZ2Vcblx0ICovXG5cdGdldEVuZERhdGUgPSAoIGVuZERhdGUsIHN0YXR1c0NsYXNzICkgPT4ge1xuXHRcdHJldHVybiBpbnN0YW5jZU9mKCBlbmREYXRlLCAnU2VydmVyRGF0ZVRpbWUnICkgPyAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVyLWVuZFwiID5cblx0XHRcdFx0eyB0aGlzLnJlbmRlckNhbGVuZGFyUGFnZSggZW5kRGF0ZSwgc3RhdHVzQ2xhc3MsICdlbmQnICkgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KSA6IG51bGw7XG5cdH07XG5cblx0LyoqXG5cdCAqIGdldERpdmlkZXJcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7U2VydmVyRGF0ZVRpbWV9IHN0YXJ0RGF0ZSBvYmplY3Rcblx0ICogQHBhcmFtIHtTZXJ2ZXJEYXRlVGltZX0gZW5kRGF0ZSBvYmplY3Rcblx0ICogQHJldHVybiB7c3RyaW5nfSBhIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVcblx0ICovXG5cdGdldERpdmlkZXIgPSAoIHN0YXJ0RGF0ZSwgZW5kRGF0ZSApID0+IHtcblx0XHRyZXR1cm4gc3RhcnREYXRlICYmIGVuZERhdGUgPyAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS10b1wiPlxuXHRcdFx0XHR7IF9fKCAnVE8nLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KSA6IG51bGw7XG5cdH07XG5cblx0LyoqXG5cdCAqIHJlbmRlckNhbGVuZGFyUGFnZVxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtTZXJ2ZXJEYXRlVGltZX0gZGF0ZSBvYmplY3Rcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1c0NsYXNzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGFydE9yRW5kIHdoZXRoZXIgZGF0ZSBpcyBhIHN0YXJ0IGRhdGUgb3IgZW5kIGRhdGVcblx0ICogQHJldHVybiB7c3RyaW5nfSBUaGUgZGF5IGZvcm1hdHRlZCB0byBsb29rIGxpa2UgYSBjYWxlbmRhciBwYWdlXG5cdCAqL1xuXHRyZW5kZXJDYWxlbmRhclBhZ2UgPSAoIGRhdGUsIHN0YXR1c0NsYXNzLCBzdGFydE9yRW5kID0gJ3N0YXJ0JyApID0+IHtcblx0XHRjb25zdCBwYWdlQ2xhc3MgPSBjbGFzc05hbWVzKCB7XG5cdFx0XHQnZWUtY2FsZW5kYXItcGFnZS1kYXRlLXBhZ2UnOiB0cnVlLFxuXHRcdFx0WyBgZWUtY2FsZW5kYXItcGFnZS1kYXRlLSR7IHN0YXJ0T3JFbmQgfWAgXTogdHJ1ZSxcblx0XHRcdFsgc3RhdHVzQ2xhc3MgXTogc3RhdHVzQ2xhc3MgIT09ICcnLFxuXHRcdH0gKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRvb2x0aXAgdGV4dD17IGRhdGUudG9Gb3JtYXQoICdMTExMJyApIH0gPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IHBhZ2VDbGFzcyB9ID5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17ICdlZS1jYWxlbmRhci1wYWdlLWRhdGUtbW9udGgnIH0+XG5cdFx0XHRcdFx0XHR7IGRhdGUudG9Gb3JtYXQoICdNTU0nICkgfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgJ2VlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1kYXknIH0+XG5cdFx0XHRcdFx0XHR7IGRhdGUudG9Gb3JtYXQoICdERCcgKSB9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9Ub29sdGlwPlxuXHRcdCk7XG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdHN0YXJ0RGF0ZSA9IG51bGwsXG5cdFx0XHRlbmREYXRlID0gbnVsbCxcblx0XHRcdHNpemUgPSAnc21hbGwnLFxuXHRcdFx0c3RhdHVzQ2xhc3MgPSAnJyxcblx0XHRcdC4uLm90aGVyUHJvcHNcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRjb25zdCBodG1sQ2xhc3MgPSBjbGFzc05hbWVzKCB7XG5cdFx0XHQnZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXInOiB0cnVlLFxuXHRcdFx0WyBgZWUtY2FsZW5kYXItcGFnZS1kYXRlLSR7IHNpemUgfWAgXTogdHJ1ZSxcblxuXHRcdH0gKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfSB7IC4uLm90aGVyUHJvcHMgfSA+XG5cdFx0XHRcdHsgdGhpcy5nZXRTdGFydERhdGUoIHN0YXJ0RGF0ZSwgc3RhdHVzQ2xhc3MgKSB9XG5cdFx0XHRcdHsgdGhpcy5nZXREaXZpZGVyKCBzdGFydERhdGUsIGVuZERhdGUgKSB9XG5cdFx0XHRcdHsgdGhpcy5nZXRFbmREYXRlKCBlbmREYXRlLCBzdGF0dXNDbGFzcyApIH1cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FsZW5kYXJQYWdlRGF0ZTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlclwiOlwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXJcIixcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS10aW55XCI6XCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtdGlueVwiLFwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXItZW5kXCI6XCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1lbmRcIixcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVyLXN0YXJ0XCI6XCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1zdGFydFwiLFwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXNtYWxsXCI6XCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtc21hbGxcIixcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1tZWRpdW1cIjpcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1tZWRpdW1cIixcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1iaWdcIjpcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1iaWdcIixcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1tb250aFwiOlwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLW1vbnRoXCIsXCJlZS1uby1zdGF0dXMtY2xhc3NcIjpcImVlLW5vLXN0YXR1cy1jbGFzc1wiLFwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLWRheVwiOlwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLWRheVwiLFwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXRvXCI6XCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtdG9cIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vKipcbiAqIERpc3BsYXlzIGEgZnVsbCBjYWxlbmRhciBkYXRlLi4uIGp1c3Qgbm90IHNvIGJpZ2x5XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0RhdGVUaW1lfSBkYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyVGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IGZvb3RlclRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3NpdGlvblxuICogQHBhcmFtIHtib29sZWFufSBhZGRXcmFwcGVyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dUaW1lXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJlbmRlcmVkIGRhdGVcbiAqL1xuY29uc3QgTWVkaXVtQ2FsZW5kYXJEYXRlID0gKCB7XG5cdGRhdGUsXG5cdGhlYWRlclRleHQsXG5cdGZvb3RlclRleHQsXG5cdGh0bWxDbGFzcyA9ICcnLFxuXHRwb3NpdGlvbiA9ICdsZWZ0Jyxcblx0YWRkV3JhcHBlciA9IGZhbHNlLFxuXHRzaG93VGltZSA9IGZhbHNlLFxufSApID0+IHtcblxuXHRodG1sQ2xhc3MgPSBjbGFzc05hbWVzKFxuXHRcdGh0bWxDbGFzcyxcblx0XHQnZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUtd3JhcHBlcicsXG5cdFx0e1xuXHRcdFx0J2VlLW1jZC1wb3MtbGVmdCc6IHBvc2l0aW9uID09PSAnbGVmdCcsXG5cdFx0XHQnZWUtbWNkLXBvcy1yaWdodCc6IHBvc2l0aW9uICE9PSAnbGVmdCdcblx0XHR9XG5cdCk7XG5cdGNvbnN0IG1lZGl1bURhdGUgPSAoXG5cdFx0PEZyYWdtZW50PlxuXHRcdFx0e1xuXHRcdFx0XHRoZWFkZXJUZXh0ICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLW1lZGl1bS1jYWxlbmRhci1kYXRlLWhlYWRlclwiPlxuXHRcdFx0XHRcdFx0eyBoZWFkZXJUZXh0IH1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fVxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1tZWRpdW0tY2FsZW5kYXItZGF0ZVwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLW1jZC13ZWVrZGF5XCI+XG5cdFx0XHRcdFx0eyBkYXRlLnRvRm9ybWF0KCAnZGRkZCcgKSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLW1jZC1tb250aC1kYXlcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1tY2QtbW9udGhcIj5cblx0XHRcdFx0XHRcdHsgZGF0ZS50b0Zvcm1hdCggJ01NTScgKSB9XG5cdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLW1jZC1kYXlcIj5cblx0XHRcdFx0XHRcdHsgZGF0ZS50b0Zvcm1hdCggJ0REJyApIH1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLW1jZC15ZWFyXCI+XG5cdFx0XHRcdFx0eyBkYXRlLnRvRm9ybWF0KCAnWVlZWScgKSB9XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRzaG93VGltZSAmJiAoXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1tY2QtdGltZVwiPlxuXHRcdFx0XHRcdFx0XHQmbmJzcDt7IGRhdGUudG9Gb3JtYXQoICdoOm1tIGEnICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0e1xuXHRcdFx0XHRcdGZvb3RlclRleHQgJiYgKFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1tZWRpdW0tY2FsZW5kYXItZGF0ZS1mb290ZXJcIj5cblx0XHRcdFx0XHRcdFx0eyBmb290ZXJUZXh0IH1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9GcmFnbWVudD5cblx0KTtcblx0cmV0dXJuIGFkZFdyYXBwZXIgPyAoXG5cdFx0PGRpdiBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfT57IG1lZGl1bURhdGUgfTwvZGl2PlxuXHQpIDogbWVkaXVtRGF0ZTtcbn07XG5cbk1lZGl1bUNhbGVuZGFyRGF0ZS5wcm9wVHlwZXMgPSB7XG5cdGRhdGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5pbnN0YW5jZU9mKCBEYXRlVGltZSApXG5cdF0gKS5pc1JlcXVpcmVkLFxuXHRoZWFkZXJUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxuXHRmb290ZXJUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdHBvc2l0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRhZGRXcmFwcGVyOiBQcm9wVHlwZXMuYm9vbCxcblx0c2hvd1RpbWU6IFByb3BUeXBlcy5ib29sLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTWVkaXVtQ2FsZW5kYXJEYXRlO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLW1lZGl1bS1jYWxlbmRhci1kYXRlLXdyYXBwZXJcIjpcImVlLW1lZGl1bS1jYWxlbmRhci1kYXRlLXdyYXBwZXJcIixcImVlLW1jZC1wb3MtbGVmdFwiOlwiZWUtbWNkLXBvcy1sZWZ0XCIsXCJlZS1tY2QtcG9zLXJpZ2h0XCI6XCJlZS1tY2QtcG9zLXJpZ2h0XCIsXCJlZS1tZWRpdW0tY2FsZW5kYXItZGF0ZS1oZWFkZXJcIjpcImVlLW1lZGl1bS1jYWxlbmRhci1kYXRlLWhlYWRlclwiLFwiZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGVcIjpcImVlLW1lZGl1bS1jYWxlbmRhci1kYXRlXCIsXCJlZS1tY2Qtd2Vla2RheVwiOlwiZWUtbWNkLXdlZWtkYXlcIixcImVlLW1jZC1tb250aC1kYXlcIjpcImVlLW1jZC1tb250aC1kYXlcIixcImVlLW1jZC1kYXlcIjpcImVlLW1jZC1kYXlcIixcImVlLW1jZC15ZWFyXCI6XCJlZS1tY2QteWVhclwiLFwiZWUtbWNkLXRpbWVcIjpcImVlLW1jZC10aW1lXCIsXCJlZS1tZWRpdW0tY2FsZW5kYXItZGF0ZS1mb290ZXJcIjpcImVlLW1lZGl1bS1jYWxlbmRhci1kYXRlLWZvb3RlclwiLFwiZWUtc3RhdHVzLXRhZ1wiOlwiZWUtc3RhdHVzLXRhZ1wifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCB7IERyb3Bkb3duTWVudSB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5cbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vKipcbiAqIERyb3BEb3duTWVudVxuICogd3JhcHBlciBmb3IgYSBXUCBEcm9wZG93bk1lbnUgY29tcG9uZW50IHRoYXQgYXBwbGllcyBFRSBzdHlsZXMgYW5kIGRlZmF1bHRzXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnREYXRlICBkYXRhIHJlcHJlc2VudGluZyBhbiBFRV9EYXRldGltZSBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgbWVudVxuICovXG5jbGFzcyBEcm9wRG93bk1lbnUgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdG1lbnVJdGVtczogUHJvcFR5cGVzLmFycmF5T2YoIFByb3BUeXBlcy5vYmplY3QgKS5pc1JlcXVpcmVkLFxuXHRcdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdHRvb2x0aXA6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRpbmRleDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRkYXNoaWNvbjogUHJvcFR5cGVzLnN0cmluZyxcblx0XHR0b29sdGlwUG9zaXRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdG1lbnVJdGVtcyxcblx0XHRcdHRvb2x0aXBQb3NpdGlvbiA9ICd0b3AgbGVmdCcsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHQuLi5vdGhlclByb3BzXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0bGV0IHsgaHRtbENsYXNzIH0gPSB0aGlzLnByb3BzO1xuXHRcdGRlbGV0ZSBvdGhlclByb3BzLmh0bWxDbGFzcztcblx0XHRodG1sQ2xhc3MgPSBodG1sQ2xhc3MgPyBgJHsgaHRtbENsYXNzIH0gYCA6ICcnO1xuXHRcdGh0bWxDbGFzcyArPSBgZWUtZHJvcC1kb3duLW1lbnUtJHsgaW5kZXggfWA7XG5cdFx0aHRtbENsYXNzICs9ICcgZWUtZHJvcC1kb3duLW1lbnUgY2xpY2thYmxlJztcblx0XHRyZXR1cm4gKFxuXHRcdFx0PERyb3Bkb3duTWVudVxuXHRcdFx0XHR0YWJJbmRleD17IGluZGV4IH1cblx0XHRcdFx0Y2xhc3NOYW1lPXsgaHRtbENsYXNzIH1cblx0XHRcdFx0bGFiZWxQb3NpdGlvbj17IHRvb2x0aXBQb3NpdGlvbiB9XG5cdFx0XHRcdGNvbnRyb2xzPXsgbWVudUl0ZW1zIH1cblx0XHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wRG93bk1lbnU7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZHJvcC1kb3duLW1lbnVcIjpcImVlLWRyb3AtZG93bi1tZW51XCIsXCJjb21wb25lbnRzLWRyb3Bkb3duLW1lbnVcIjpcImNvbXBvbmVudHMtZHJvcGRvd24tbWVudVwiLFwiY29tcG9uZW50cy1kcm9wZG93bi1tZW51X190b2dnbGVcIjpcImNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fdG9nZ2xlXCIsXCJpcy1kZWZhdWx0XCI6XCJpcy1kZWZhdWx0XCIsXCJjb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX3BvcG92ZXJcIjpcImNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fcG9wb3ZlclwiLFwiY29tcG9uZW50cy1wb3BvdmVyX19jb250ZW50XCI6XCJjb21wb25lbnRzLXBvcG92ZXJfX2NvbnRlbnRcIixcImNvbXBvbmVudHMtcG9wb3ZlclwiOlwiY29tcG9uZW50cy1wb3BvdmVyXCIsXCJpcy1tb2JpbGVcIjpcImlzLW1vYmlsZVwiLFwiaXMtd2l0aG91dC1hcnJvd1wiOlwiaXMtd2l0aG91dC1hcnJvd1wiLFwiaXMtdG9wXCI6XCJpcy10b3BcIixcImlzLWJvdHRvbVwiOlwiaXMtYm90dG9tXCIsXCJjb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX21lbnVcIjpcImNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fbWVudVwiLFwiY29tcG9uZW50cy1kcm9wZG93bi1tZW51X19tZW51LWl0ZW1cIjpcImNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fbWVudS1pdGVtXCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcbmltcG9ydCB7IElubGluZUVkaXRJbnB1dCB9IGZyb20gJy4uLy4uL2Zvcm0vaW5wdXRzL2lubGluZS1lZGl0LWlucHV0JztcblxuLyoqXG4gKiBFbnRpdHlEZXRhaWxzUGFuZWxcbiAqIGJpZyBib2xkIHJlc3BvbnNpdmUgZGlzcGxheSBmb3IgZGV0YWlscyBsaWtlIHF1YW50aXRpZXMgc29sZCwgZXRjXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fSBkZXRhaWxzICAgIGFycmF5IG9mIGRldGFpbCBvYmplY3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgIHJlbmRlcmVkIGRldGFpbHNcbiAqL1xuY2xhc3MgRW50aXR5RGV0YWlsc1BhbmVsIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRkZXRhaWxzOiBQcm9wVHlwZXMuYXJyYXlPZihcblx0XHRcdFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdFx0XHRpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdFx0XHRsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdFx0XHR2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0XHRcdFByb3BUeXBlcy5ib29sLFxuXHRcdFx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRcdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRcdFx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRdICkuaXNSZXF1aXJlZCxcblx0XHRcdFx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRlZGl0YWJsZTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0XHRcdFx0b25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRcdH0gKSxcblx0XHRcdH0gKSxcblx0XHQpLmlzUmVxdWlyZWQsXG5cdFx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHR9O1xuXG5cdC8qKlxuXHQgKiBlbnRpdHlEZXRhaWxcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAgIFx0XHRpZGVudGlmaWVyIGZvciBkYXRhIGl0ZW0gYmVpbmcgZGlzcGxheWVkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAgIFx0XHRsYWJlbCBmb3IgdGhlIGRhdGEgaXRlbSBiZWluZyBkaXNwbGF5ZWRcblx0ICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBcdFx0dmFsdWUgdmFsdWUgZm9yIHRoZSBkYXRhIGl0ZW0gYmVpbmcgZGlzcGxheWVkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3MgXHRvcHRpb25hbCBjc3MgY2xhc3MgZm9yIGRhdGEgaXRlbVxuXHQgKiBAcGFyYW0ge09iamVjdH0gZWRpdGFibGUgXHRJbmxpbmVFZGl0SW5wdXQgcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJuIHtzdHJpbmd9ICAgIFx0XHRcdHJlbmRlcmVkIGRldGFpbHNcblx0ICovXG5cdGVudGl0eURldGFpbCA9ICggeyBpZCwgbGFiZWwsIHZhbHVlLCBodG1sQ2xhc3MgPSAnJywgZWRpdGFibGUgPSB7fSB9ICkgPT4ge1xuXHRcdHZhbHVlID0gdmFsdWUgPT09ICdJTkYnIHx8IHZhbHVlID09PSBJbmZpbml0eSA/XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9eyAnZWUtaW5maW5pdHktc2lnbicgfT4maW5maW47PC9zcGFuPiA6XG5cdFx0XHR2YWx1ZTtcblx0XHR2YWx1ZSA9ICEgaXNFbXB0eSggZWRpdGFibGUgKSA/XG5cdFx0XHQ8SW5saW5lRWRpdElucHV0XG5cdFx0XHRcdGh0bWxJZD17IGlkIH1cblx0XHRcdFx0dmFsdWU9eyB2YWx1ZSB9XG5cdFx0XHRcdHsgLi4uZWRpdGFibGUgfVxuXHRcdFx0Lz4gOlxuXHRcdFx0dmFsdWU7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgYGVlLWVudGl0eS1kZXRhaWxzLWRpdiAkeyBpZCB9LWRpdiAkeyBodG1sQ2xhc3MgfWAgfT5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyBgZWUtZW50aXR5LWRldGFpbHMtbGFiZWwtZGl2ICR7IGlkIH0tbGFiZWxgIH0+XG5cdFx0XHRcdFx0eyBsYWJlbCB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGBlZS1lbnRpdHktZGV0YWlscy12YWx1ZS1kaXYgJHsgaWQgfS12YWx1ZWAgfT5cblx0XHRcdFx0XHR7IHZhbHVlIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBkZXRhaWxzU2VwYXJhdG9yIC0gYSB2ZXJ0aWNhbCBsaW5lIHRoYXQgc2VwYXJhdGVzIGRldGFpbHNcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gdmVydGljYWwgbGluZSBmb3Igc2VwYXJhdGluZyBkYXRlIGRldGFpbHNcblx0ICovXG5cdGRldGFpbHNTZXBhcmF0b3IgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgcm9sZT1cInNlcGFyYXRvclwiXG5cdFx0XHRcdGNsYXNzTmFtZT1cImVlLWVudGl0eS1kZXRhaWxzLXNlcGFyYXRvclwiXG5cdFx0XHQ+PC9kaXY+XG5cdFx0KTtcblx0fTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3QgeyBkZXRhaWxzIH0gPSB0aGlzLnByb3BzO1xuXHRcdGxldCB7IGh0bWxDbGFzcyB9ID0gdGhpcy5wcm9wcztcblx0XHRodG1sQ2xhc3MgPSBjbGFzc05hbWVzKCBodG1sQ2xhc3MsICdlZS1lbnRpdHktZGV0YWlscy1wYW5lbC1kaXYnICk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0+XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRkZXRhaWxzLm1hcChcblx0XHRcdFx0XHRcdCggZGV0YWlsLCBpbmRleCApID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQ8RnJhZ21lbnQga2V5PXsgaW5kZXggfT5cblx0XHRcdFx0XHRcdFx0XHRcdHsgdGhpcy5lbnRpdHlEZXRhaWwoIGRldGFpbCApIH1cblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW5kZXggIT09IGRldGFpbHMubGVuZ3RoIC0gMSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kZXRhaWxzU2VwYXJhdG9yKCkgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG51bGxcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBFbnRpdHlEZXRhaWxzUGFuZWw7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZW50aXR5LWRldGFpbHMtcGFuZWwtZGl2XCI6XCJlZS1lbnRpdHktZGV0YWlscy1wYW5lbC1kaXZcIixcImVlLWlubGluZS1lZGl0LXRleHRcIjpcImVlLWlubGluZS1lZGl0LXRleHRcIixcImVlLWVudGl0eS1kZXRhaWxzLWRpdlwiOlwiZWUtZW50aXR5LWRldGFpbHMtZGl2XCIsXCJlZS1pbmxpbmUtZWRpdC1pbnB1dFwiOlwiZWUtaW5saW5lLWVkaXQtaW5wdXRcIixcImVlLWVudGl0eS1kZXRhaWxzLWxhYmVsLWRpdlwiOlwiZWUtZW50aXR5LWRldGFpbHMtbGFiZWwtZGl2XCIsXCJlZS1lbnRpdHktZGV0YWlscy12YWx1ZS1kaXZcIjpcImVlLWVudGl0eS1kZXRhaWxzLXZhbHVlLWRpdlwiLFwiZWUtZW50aXR5LWRldGFpbHMtc2VwYXJhdG9yXCI6XCJlZS1lbnRpdHktZGV0YWlscy1zZXBhcmF0b3JcIixcImVlLWluZmluaXR5LXNpZ25cIjpcImVlLWluZmluaXR5LXNpZ25cIixcImRhc2hpY29uXCI6XCJkYXNoaWNvblwifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgd2l0aG91dCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuaW1wb3J0IHdpdGhGb3JtQ29udGFpbmVyQW5kUGxhY2Vob2xkZXIgZnJvbSAnLi4vLi4vZm9ybS9iYXNlL3dpdGgtZm9ybS1jb250YWluZXItYW5kLXBsYWNlaG9sZGVyJztcblxuLyoqXG4gKiBFbnRpdHlMaXN0XG4gKiBiYXNlIGNvbXBvbmVudCBmb3IgZGlzcGxheWluZyBhIGxpc3Qgb2YgZW50aXRpZXMgKGRhdGVzLCB0aWNrZXRzLCBldGMpXG4gKiBhcyBlaXRoZXIgYSBsaXN0IHRhYmxlIG9yIGdyaWQgb2YgZW50aXR5IGJsb2Nrc1xuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtBcnJheX0gZW50aXRpZXNcbiAqIEBwYXJhbSB7bWl4ZWR9IG90aGVyUHJvcHNcbiAqIEBwYXJhbSB7Q29tcG9uZW50fSBFbnRpdHlHcmlkVmlld1xuICogQHBhcmFtIHtDb21wb25lbnR9IEVudGl0eUxpc3RWaWV3XG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gdmlld1xuICogQHBhcmFtIHtzdHJpbmd9IG5vUmVzdWx0c1RleHRcbiAqIEByZXR1cm4ge0NvbXBvbmVudH0gbGlzdCBvZiByZW5kZXJlZCBlbnRpdGllc1xuICovXG5jb25zdCBFbnRpdHlMaXN0ID0gKCB7XG5cdGVudGl0aWVzLFxuXHRFbnRpdHlHcmlkVmlldyxcblx0RW50aXR5TGlzdFZpZXcsXG5cdGh0bWxDbGFzcyxcblx0dmlldyA9ICdncmlkJyxcblx0bm9SZXN1bHRzVGV4dCA9ICcnLFxuXHQuLi5vdGhlclByb3BzXG59ICkgPT4ge1xuXHRlbnRpdGllcyA9IEFycmF5LmlzQXJyYXkoIGVudGl0aWVzICkgPyBlbnRpdGllcyA6IFtdO1xuXHQvLyBSZW1vdmUgdW5kZWZpbmVkIGZyb20gdGhlIGFycmF5XG5cdGVudGl0aWVzID0gd2l0aG91dCggZW50aXRpZXMsIHVuZGVmaW5lZCApO1xuXHRodG1sQ2xhc3MgPSBjbGFzc05hbWVzKCAnZWUtZWRpdG9yLWVudGl0eS1saXN0JywgaHRtbENsYXNzICk7XG5cdGxldCBlbnRpdHlMaXN0ID0gdmlldyA9PT0gJ2dyaWQnID8gKFxuXHRcdDxFbnRpdHlHcmlkVmlld1xuXHRcdFx0ZW50aXRpZXM9eyBlbnRpdGllcyB9XG5cdFx0XHRodG1sQ2xhc3M9eyBodG1sQ2xhc3MgfVxuXHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHQvPlxuXHQpIDogKFxuXHRcdDxFbnRpdHlMaXN0Vmlld1xuXHRcdFx0ZW50aXRpZXM9eyBlbnRpdGllcyB9XG5cdFx0XHRodG1sQ2xhc3M9eyBodG1sQ2xhc3MgfVxuXHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHQvPlxuXHQpO1xuXHRpZiAoIGVudGl0aWVzLmxlbmd0aCA9PT0gMCApIHtcblx0XHRub1Jlc3VsdHNUZXh0ID0gbm9SZXN1bHRzVGV4dCAhPT0gJycgP1xuXHRcdFx0bm9SZXN1bHRzVGV4dCA6XG5cdFx0XHRfXyggJ25vIHJlc3VsdHMgZm91bmQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0ZW50aXR5TGlzdCA9IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZW50aXR5LWxpc3Qtbm8tcmVzdWx0c1wiPlxuXHRcdFx0XHR7IG5vUmVzdWx0c1RleHQgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gZW50aXR5TGlzdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhGb3JtQ29udGFpbmVyQW5kUGxhY2Vob2xkZXIoIEVudGl0eUxpc3QgKTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1lZGl0b3ItZW50aXR5LWxpc3RcIjpcImVlLWVkaXRvci1lbnRpdHktbGlzdFwiLFwiZWUtZW50aXR5LWxpc3Qtbm8tcmVzdWx0c1wiOlwiZWUtZW50aXR5LWxpc3Qtbm8tcmVzdWx0c1wifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Y29tcG9zZSxcblx0Y3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQsXG5cdHdpdGhJbnN0YW5jZUlkLFxufSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5cbi8qKlxuICogd2l0aEVudGl0eVBhcGVyRnJhbWVcbiAqIEhpZ2hlci1PcmRlci1Db21wb25lbnQgdGhhdCB3cmFwcyBhbiBcImVudGl0eVwiIGNvbXBvbmVudFxuICogd2l0aCBhbiBFbnRpdHlQYXBlckZyYW1lIGNvbXBvbmVudCB0aGF0IGFkZHMgYSBzdHlsZWQgZnJhbWVcbiAqIHRoYXQgZ2l2ZXMgdGhlIGFwcGVhcmFuY2Ugb2YgYSBwaWVjZSBvZiBwYXBlciBvbiBhIHN1cmZhY2VcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IEVudGl0eSB3aXRoIGFkZGVkIEVudGl0eVBhcGVyRnJhbWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoSW5zdGFuY2VJZCxcblx0XHQoIEVudGl0eSApID0+IHtcblx0XHRcdHJldHVybiBjbGFzcyBFbnRpdHlQYXBlckZyYW1lIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0XHRcdFx0cmVuZGVyKCkge1xuXHRcdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRcdGluc3RhbmNlSWQsXG5cdFx0XHRcdFx0XHQuLi5vdGhlclByb3BzXG5cdFx0XHRcdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXYgaWQ9eyBgZWUtZW50aXR5LXBhcGVyLWZyYW1lLSR7IGluc3RhbmNlSWQgfWAgfVxuXHRcdFx0XHRcdFx0XHQgY2xhc3NOYW1lPVwiZWUtZW50aXR5LXBhcGVyLWZyYW1lLXdyYXBwZXJcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWVudGl0eS1wYXBlci1mcmFtZVwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1lbnRpdHktd3JhcHBlclwiPlxuXHRcdFx0XHRcdFx0XHRcdDxFbnRpdHkgeyAuLi5vdGhlclByb3BzIH0gLz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0sXG5cdF0gKSxcblx0J3dpdGhFbnRpdHlQYXBlckZyYW1lJ1xuKTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1lbnRpdHktcGFwZXItZnJhbWUtd3JhcHBlclwiOlwiZWUtZW50aXR5LXBhcGVyLWZyYW1lLXdyYXBwZXJcIixcImVlLWVudGl0eS13cmFwcGVyXCI6XCJlZS1lbnRpdHktd3JhcHBlclwiLFwiZWUtZW50aXR5LXBhcGVyLWZyYW1lXCI6XCJlZS1lbnRpdHktcGFwZXItZnJhbWVcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgRXNwcmVzc29JY29uIH0gZnJvbSAnLi4vJztcblxuLyoqXG4gKiBFc3ByZXNzb0J1dHRvblxuICogIFdQIEJ1dHRvbiB3cmFwcGVyIGZvciBhZGRpbmcgc3R5bGVzXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gYnV0dG9uVGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IGljb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uQ2xpY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBzaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBidXR0b25Qcm9wc1xuICovXG5jb25zdCBFc3ByZXNzb0J1dHRvbiA9ICgge1xuXHRidXR0b25UZXh0LFxuXHRpY29uLFxuXHRvbkNsaWNrLFxuXHRzaXplLFxuXHRzdHlsZSxcblx0aHRtbENsYXNzLFxuXHQuLi5idXR0b25Qcm9wc1xufSApID0+IHtcblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcygge1xuXHRcdFsgaHRtbENsYXNzIF0gOiBodG1sQ2xhc3MsXG5cdFx0J2VzcHJzLWJ1dHRvbic6IHRydWUsXG5cdFx0J2VzcHJzLWJ0bi1hY2NlbnQnOiBzdHlsZSA9PT0gJ2FjY2VudCcsXG5cdFx0J2VzcHJzLWJ0bi1kZWZhdWx0Jzogc3R5bGUgPT09ICdkZWZhdWx0Jyxcblx0XHQnZXNwcnMtYnRuLXByaW1hcnknOiBzdHlsZSA9PT0gJ3ByaW1hcnknLFxuXHRcdCdlc3Bycy1idG4tc2Vjb25kYXJ5Jzogc3R5bGUgPT09ICdzZWNvbmRhcnknLFxuXHRcdCdlc3Bycy1idG4tdGlueSc6IHNpemUgPT09ICd0aW55Jyxcblx0XHQnZXNwcnMtYnRuLXNtYWxsJzogc2l6ZSA9PT0gJ3NtYWxsJyxcblx0XHQnZXNwcnMtYnRuLWJpZyc6IHNpemUgPT09ICdiaWcnLFxuXHRcdCdlc3Bycy1idG4taHVnZSc6IHNpemUgPT09ICdodWdlJyxcblx0fSApO1xuXHRsZXQgaWNvblNpemUgPSAyNDtcblx0c3dpdGNoICggc2l6ZSApIHtcblx0XHRjYXNlICd0aW55Jzpcblx0XHRcdGljb25TaXplID0gMTg7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdzbWFsbCc6XG5cdFx0XHRpY29uU2l6ZSA9IDIxO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnYmlnJzpcblx0XHRcdGljb25TaXplID0gMjc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdodWdlJzpcblx0XHRcdGljb25TaXplID0gMzA7XG5cdFx0XHRicmVhaztcblx0fVxuXHRpZiAoIGljb24gKSB7XG5cdFx0aWNvbiA9IChcblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImltZy13cmFwXCI+XG5cdFx0XHRcdDxFc3ByZXNzb0ljb24gaWNvbj17IGljb24gfSBzaXplPXsgaWNvblNpemUgfS8+XG5cdFx0XHQ8L3NwYW4+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRodG1sQ2xhc3MgKz0gJyBlZS1ub0ljb24nO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0PGJ1dHRvbiB7IC4uLmJ1dHRvblByb3BzIH0gY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0gb25DbGljaz17IG9uQ2xpY2sgfT5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtd3JhcFwiPnsgYnV0dG9uVGV4dCB9PC9zcGFuPnsgaWNvbiB9XG5cdFx0PC9idXR0b24+XG5cdCk7XG59O1xuXG5Fc3ByZXNzb0J1dHRvbi5wcm9wVHlwZXMgPSB7XG5cdGJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0b25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblx0aWNvbjogUHJvcFR5cGVzLnN0cmluZyxcblx0c2l6ZTogUHJvcFR5cGVzLnN0cmluZyxcblx0c3R5bGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cbkVzcHJlc3NvQnV0dG9uLmRlZmF1bHRQcm9wcyA9IHtcblx0aWNvbjogJycsXG5cdHNpemU6ICdkZWZhdWx0Jyxcblx0c3R5bGU6ICdkZWZhdWx0Jyxcblx0aHRtbENsYXNzOiAnJyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVzcHJlc3NvQnV0dG9uO1xuIiwiLyoqXG4gKiBFbnRpdHlBY3Rpb25NZW51SXRlbVxuICoganVzdCBhIHdyYXBwZXIgZm9yIGFuIEljb25CdXR0b24gYW5kIGFkZGl0aW9uYWwgY29tcG9uZW50XG4gKiAobW9zdCBsaWtlbHkgYSBtb2RhbCBjb21wb25lbnQpIHNvIHRoYXQgaXQgY2FuIGJlIGFkZGVkIHRvIGEgbWVudVxuICovXG5jb25zdCBFbnRpdHlBY3Rpb25NZW51SXRlbSA9ICggeyBjaGlsZHJlbiB9ICkgPT4gY2hpbGRyZW47XG5cbmV4cG9ydCBkZWZhdWx0IEVudGl0eUFjdGlvbk1lbnVJdGVtOyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5cbi8qKlxuICogSWNvbk1lbnVJdGVtXG4gKiB3cmFwcGVyIGZvciBXUCBJY29uQnV0dG9uIHRoYXQgYWRkcyBFRSBzdHlsZXMgYW5kIGRlZmF1bHRzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge3N0cmluZ30gaWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7b2JqZWN0fHN0cmluZ30gZGFzaGljb25cbiAqIEBwYXJhbSB7c3RyaW5nfSB0b29sdGlwXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9vbHRpcFBvc2l0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkNsaWNrXG4gKiBAcGFyYW0ge251bGx8bnVtYmVyfHN0cmluZ30gaXRlbUNvdW50XG4gKiBAcGFyYW0ge09iamVjdH0gZXh0ZXJuYWxBcHBcbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlclByb3BzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJlbmRlcmVkIEljb25NZW51SXRlbVxuICovXG5jb25zdCBJY29uTWVudUl0ZW0gPSAoIHtcblx0aW5kZXgsXG5cdGlkLFxuXHR0b29sdGlwLFxuXHRkYXNoaWNvbixcblx0b25DbGljayxcblx0aHRtbENsYXNzLFxuXHR0b29sdGlwUG9zaXRpb24sXG5cdGl0ZW1Db3VudCxcblx0ZXh0ZXJuYWxBcHAsXG5cdC4uLm90aGVyUHJvcHNcbn0gKSA9PiB7XG5cdGNvbnN0IGJ0bkNsYXNzID0gY2xhc3NOYW1lcygge1xuXHRcdFsgYGVlLWljb24tbWVudS1pdGVtLSR7IGluZGV4IH1gIF06IHRydWUsXG5cdFx0WyBgZWUtaWNvbi1tZW51LWl0ZW0tJHsgaHRtbENsYXNzIH1gIF06IGh0bWxDbGFzcyxcblx0XHQnZWUtaWNvbi1tZW51LWl0ZW0nOiB0cnVlLFxuXHRcdCdjbGlja2FibGUnOiB0cnVlLFxuXHR9ICk7XG5cdGlmICggaXRlbUNvdW50ICE9PSBudWxsICkge1xuXHRcdGl0ZW1Db3VudCA9IHBhcnNlSW50KCBpdGVtQ291bnQsIDEwICk7XG5cdFx0Y29uc3QgaXRlbUNvdW50Q2xhc3MgPSBjbGFzc05hbWVzKCB7XG5cdFx0XHQnZWUtaWNvbi1tZW51LWl0ZW0tY291bnQnOiB0cnVlLFxuXHRcdFx0J2VlLWhhcy1pdGVtcyc6IGl0ZW1Db3VudCA+IDAsXG5cdFx0XHQnZWUtbm8taXRlbXMnOiBpdGVtQ291bnQgPCAxLFxuXHRcdH0gKTtcblx0XHRpdGVtQ291bnQgPSAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGl0ZW1Db3VudENsYXNzIH0+XG5cdFx0XHRcdHsgaXRlbUNvdW50ID4gMCA/IGl0ZW1Db3VudCA6ICc/JyB9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9eyAnZWUtaWNvbi1tZW51LWl0ZW0td3JhcHBlcicgfT5cblx0XHRcdDxJY29uQnV0dG9uXG5cdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHRcdGlkPXsgYGVlLWljb24tbWVudS1pdGVtLSR7IGlkIH1gIH1cblx0XHRcdFx0Y2xhc3NOYW1lPXsgYnRuQ2xhc3MgfVxuXHRcdFx0XHRvbkNsaWNrPXsgKCBldmVudCApID0+IG9uQ2xpY2soIGV2ZW50ICkgfVxuXHRcdFx0XHRvbktleVByZXNzPXsgKCBldmVudCApID0+IG9uQ2xpY2soIGV2ZW50ICkgfVxuXHRcdFx0XHR0b29sdGlwPXsgdG9vbHRpcCB9XG5cdFx0XHRcdGxhYmVsUG9zaXRpb249eyB0b29sdGlwUG9zaXRpb24gfVxuXHRcdFx0XHRpY29uPXsgZGFzaGljb24gfVxuXHRcdFx0Lz5cblx0XHRcdHsgaXRlbUNvdW50IH1cblx0XHRcdHsgZXh0ZXJuYWxBcHAgfVxuXHRcdDwvZGl2PlxuXHQpO1xufTtcblxuSWNvbk1lbnVJdGVtLnByb3BUeXBlcyA9IHtcblx0aW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblx0aWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdGRhc2hpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRdICkuaXNSZXF1aXJlZCxcblx0aXRlbUNvdW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFByb3BUeXBlcy5ub2RlLFxuXHRdICksXG5cdHRvb2x0aXA6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0dG9vbHRpcFBvc2l0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHRleHRlcm5hbEFwcDogUHJvcFR5cGVzLm9iamVjdCxcbn07XG5cbkljb25NZW51SXRlbS5kZWZhdWx0UHJvcHMgPSB7XG5cdGl0ZW1Db3VudDogbnVsbCxcblx0ZXh0ZXJuYWxBcHA6IG51bGwsXG5cdHRvb2x0aXBQb3NpdGlvbjogJ3RvcCBsZWZ0Jyxcblx0aHRtbENsYXNzOiAnJyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEljb25NZW51SXRlbTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1pY29uLW1lbnUtaXRlbS13cmFwcGVyXCI6XCJlZS1pY29uLW1lbnUtaXRlbS13cmFwcGVyXCIsXCJlZS1pY29uLW1lbnUtaXRlbVwiOlwiZWUtaWNvbi1tZW51LWl0ZW1cIixcImVlLWljb24tbWVudS1pdGVtLWNvdW50XCI6XCJlZS1pY29uLW1lbnUtaXRlbS1jb3VudFwiLFwiZWUtaGFzLWl0ZW1zXCI6XCJlZS1oYXMtaXRlbXNcIixcImVlLW5vLWl0ZW1zXCI6XCJlZS1uby1pdGVtc1wifTsiLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBXb3JkUHJlc3MgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbi8qKlxuICogQXZhdGFySW1hZ2VcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdmF0YXJVcmwgICAgICAgIGdyYXZhdGFyIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IGF2YXRhckNsYXNzXHRcdGJhc2UgQ1NTIGNsYXNzIHRvIGFwcGx5XG4gKiBAcGFyYW0ge251bWJlcn0gYXZhdGFySGVpZ2h0XHRcdGltYWdlIGhlaWdodCAoZGVmYXVsdCA9IDMycHgpXG4gKiBAcGFyYW0ge251bWJlcn0gYXZhdGFyV2lkdGggXHRcdGltYWdlIHdpZHRoIChkZWZhdWx0ID0gMzJweClcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdmF0YXJBbHRUZXh0XHRpbWFnZSBhbHQgdGV4dFxuICogQHJldHVybiB7RnVuY3Rpb259ICBcdFx0XHRcdEEgcHVyZSBjb21wb25lbnQgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBdmF0YXJJbWFnZSBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0YXZhdGFyVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdGF2YXRhckNsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdGF2YXRhckhlaWdodDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRhdmF0YXJXaWR0aDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRhdmF0YXJBbHRUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuXHR9O1xuXHRzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuXHRcdGF2YXRhclVybDogJycsXG5cdFx0YXZhdGFyQ2xhc3M6ICdjb250YWN0Jyxcblx0XHRhdmF0YXJIZWlnaHQ6IDMyLFxuXHRcdGF2YXRhcldpZHRoOiAzMixcblx0XHRhdmF0YXJBbHRUZXh0OiBfXyggJ2NvbnRhY3QgYXZhdGFyJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHR9O1xuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0YXZhdGFyVXJsLFxuXHRcdFx0YXZhdGFyQ2xhc3MsXG5cdFx0XHRhdmF0YXJIZWlnaHQsXG5cdFx0XHRhdmF0YXJXaWR0aCxcblx0XHRcdGF2YXRhckFsdFRleHQsXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cblx0XHRjb25zdCBzdHlsZSA9IHtcblx0XHRcdGhlaWdodDogYXZhdGFySGVpZ2h0LFxuXHRcdFx0d2lkdGg6IGF2YXRhcldpZHRoLFxuXHRcdH07XG5cdFx0cmV0dXJuIGF2YXRhclVybCA/IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgYXZhdGFyQ2xhc3MgKyAnLWltYWdlLXdyYXAtZGl2JyB9PlxuXHRcdFx0XHQ8aW1nXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXsgYXZhdGFyQ2xhc3MgKyAnLWF2YXRhci1pbWcgYXZhdGFyJyB9XG5cdFx0XHRcdFx0c3JjPXsgYXZhdGFyVXJsIH1cblx0XHRcdFx0XHRzdHlsZT17IHN0eWxlIH1cblx0XHRcdFx0XHRhbHQ9eyBhdmF0YXJBbHRUZXh0IH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvZGl2PlxuXHRcdCkgOiAoXG5cdFx0XHRudWxsXG5cdFx0KTtcblx0fVxufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IERhc2hpY29uLCBQYXRoLCBTVkcgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmV4cG9ydCBjb25zdCBFU1BSRVNTT19JQ09OX0NBTENVTEFUT1IgPSAnY2FsY3VsYXRvcic7XG5leHBvcnQgY29uc3QgRVNQUkVTU09fSUNPTl9DQUxFTkRBUiA9ICdjYWxlbmRhcic7XG5leHBvcnQgY29uc3QgRVNQUkVTU09fSUNPTl9SRU0gPSAncmVjdXJyaW5nLWRhdGUnO1xuZXhwb3J0IGNvbnN0IEVTUFJFU1NPX0lDT05fU0FWRSA9ICdzYXZlJztcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBpY29uXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGljb24gaXMgYW4gRXNwcmVzc29JY29uXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VzcHJlc3NvSWNvbiA9ICggaWNvbiApID0+IHtcblx0c3dpdGNoICggaWNvbiApIHtcblx0XHRjYXNlIEVTUFJFU1NPX0lDT05fQ0FMQ1VMQVRPUjpcblx0XHRjYXNlIEVTUFJFU1NPX0lDT05fQ0FMRU5EQVI6XG5cdFx0Y2FzZSBFU1BSRVNTT19JQ09OX1NBVkU6XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIEN1c3RvbSBFdmVudCBFc3ByZXNzbyBEYXNoaWNvbnNcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBpY29uXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuICovXG5leHBvcnQgY2xhc3MgRXNwcmVzc29JY29uIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHsgaWNvbiwgc2l6ZSA9IDIwLCBjbGFzc05hbWUsIC4uLm90aGVyUHJvcHMgfSA9IHRoaXMucHJvcHM7XG5cdFx0bGV0IHBhdGg7XG5cblx0XHRzd2l0Y2ggKCBpY29uICkge1xuXG5cdFx0XHRjYXNlIEVTUFJFU1NPX0lDT05fQ0FMQ1VMQVRPUjpcblx0XHRcdFx0cGF0aCA9ICdNIDMgMCB2MjAgaDE0IHYtMjAgaC0xNCB6ICcgK1xuXHRcdFx0XHRcdCdtIDIuNSAyLjUgaDkgdjIgaC05IHYtMiB6ICcgK1xuXHRcdFx0XHRcdCdtIDAgNCBoMiB2MS43NSBoLTIgdi0xLjc1IHogJyArXG5cdFx0XHRcdFx0J20gMy41IDAgaDIgdjEuNzUgaC0yIHYtMS43NSB6ICcgK1xuXHRcdFx0XHRcdCdtIDMuNSAwIGgyIHYxLjc1IGgtMiB2LTEuNzUgeiAnICtcblx0XHRcdFx0XHQnTSA1LjUgOS41IGgyIHYxLjc1IGgtMiB2LTEuNzUgeiAnICtcblx0XHRcdFx0XHQnbSAzLjUgMCBoMiB2MS43NSBoLTIgdi0xLjc1IHogJyArXG5cdFx0XHRcdFx0J20gMy41IDAgaDIgdjEuNzUgaC0yIHYtMS43NSB6ICcgK1xuXHRcdFx0XHRcdCdNIDUuNSAxMi41IGgyIHYxLjc1IGgtMiB2LTEuNzUgeiAnICtcblx0XHRcdFx0XHQnbSAzLjUgMCBoMiB2MS43NSBoLTIgdi0xLjc1IHogJyArXG5cdFx0XHRcdFx0J20gMy41IDAgaDIgdjEuNzUgaC0yIHYtMS43NSB6ICcgK1xuXHRcdFx0XHRcdCdNIDUuNSAxNS41IGgyIHYxLjc1IGgtMiB2LTEuNzUgeiAnICtcblx0XHRcdFx0XHQnbSAzLjUgMCBoMiB2MS43NSBoLTIgdi0xLjc1IHogJyArXG5cdFx0XHRcdFx0J20gMy41IDAgaDIgdjEuNzUgaC0yIHYtMS43NSB6ICc7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEVTUFJFU1NPX0lDT05fQ0FMRU5EQVI6XG5cdFx0XHRcdHBhdGggPSAnTSAwIDIgdjE4IGgyMCB2LTE4IHogJyArXG5cdFx0XHRcdFx0J00gMiA2LjUgaDE2IHYxMS41IGgtMTYgeiAnICtcblx0XHRcdFx0XHQnTSAxNS41IDAgVjggaC0xLjM4IEwxMS41NCAxMC4wNiBsIC44IDEuMiAuOTIgLS43NCBjIC4xMicgK1xuXHRcdFx0XHRcdCcgLS4xIC4zMiAtLjI4IC42IC0uNTYgbCAtLjA0IC44NCBWMTYuNSBIMTUuNSB6ICcgK1xuXHRcdFx0XHRcdCdNIDkuNSAxMCAnICtcblx0XHRcdFx0XHQnYyAwIC0uNiAtLjI0IC0xLjA4IC0uNzQgLTEuNDIgLS40OCAtLjM0IC0xLjE2IC0uNTIgLTInICtcblx0XHRcdFx0XHQnIC0uNTIgLTEuMDQgMCAtMS45MiAuMjYgLTIuNjYgLjggJyArXG5cdFx0XHRcdFx0J2wgLjggMS4yICAnICtcblx0XHRcdFx0XHQnYyAuMzQgLS4yMiAuNjQgLS4zOCAuOTIgLS40NiAuMjggLS4xIC41NCAtLjE0IC44MiAtLjE0JyArXG5cdFx0XHRcdFx0JyAuNzYgMCAxLjE2IC4zIDEuMTYgLjkyIDAgLjQgLS4xNCAuNyAtLjQ0IC44NiAgJyArXG5cdFx0XHRcdFx0J3MgLS43NiAuMjQgLTEuNCAuMjQgJyArXG5cdFx0XHRcdFx0J2ggLS42MiAnICtcblx0XHRcdFx0XHQndiAxLjMyICcgK1xuXHRcdFx0XHRcdCdoIC42MiAnICtcblx0XHRcdFx0XHQnYyAuNjggMCAxLjE4IC4wOCAxLjUgLjI0IC4zIC4xNiAuNDYgLjQ0IC40NiAuODIgMCAuNDQnICtcblx0XHRcdFx0XHQnIC0uMTQgLjc0IC0uNCAuOTQgLS4yOCAuMiAtLjcgLjMgLTEuMjYgLjMgLS4zOCAwIC0uNzYnICtcblx0XHRcdFx0XHQnIC0uMDYgLTEuMTQgLS4xNiAnICtcblx0XHRcdFx0XHQncyAtLjcyIC0uMjQgLTEuMDQgLS40ICcgK1xuXHRcdFx0XHRcdCd2IDEuNDggJyArXG5cdFx0XHRcdFx0J2MgLjY4IC4zIDEuNDggLjQ0IDIuMzYgLjQ0IDEuMDYgMCAxLjg4IC0uMjIgMi40NCAtLjY2JyArXG5cdFx0XHRcdFx0JyAuNTggLS40NCAuODYgLTEuMDQgLjg2IC0xLjg0IDAgLS41NCAtLjE4IC0uOTYgLS41MiAtMS4yOCAnICtcblx0XHRcdFx0XHQncyAtLjg0IC0uNTIgLTEuNDggLS42ICcgK1xuXHRcdFx0XHRcdCd2IC0uMDQgJyArXG5cdFx0XHRcdFx0J2MgLjU0IC0uMTIgLjk4IC0uMzggMS4zIC0uNzQgLjMgLS4zNiAuNDYgLS43OCAuNDYgLTEuMyB6ICcgK1xuXHRcdFx0XHRcdCdNIDQgMCBoMiB2MiBoLTIgdi0yIHogJyArXG5cdFx0XHRcdFx0J00gMTQgMCBoMiB2MiBoLTIgdi0yIHonO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnaW1hZ2Utcm90YXRlJzpcblx0XHRcdFx0cGF0aCA9ICdNIDEwLjI1IDEuMDIgJyArXG5cdFx0XHRcdFx0J2MgNS4xIDAgOC43NSA0LjA0IDguNzUgOSAnICtcblx0XHRcdFx0XHQncyAtMy42NSA5LTguNzUgOSAnICtcblx0XHRcdFx0XHQnYyAtMy4yIDAtNi4wMi0xLjU5LTcuNjgtMy45OSAnICtcblx0XHRcdFx0XHQnbCAyLjU5LTEuNTIgJyArXG5cdFx0XHRcdFx0J2MgMS4xIDEuNSAyLjg2IDIuNTEgNC44NCAyLjUxIDMuMyAwIDYtMi43OSA2LTYgJyArXG5cdFx0XHRcdFx0J3MtMi43LTYtNi02ICcgK1xuXHRcdFx0XHRcdCdjLTEuOTcgMC0zLjcyIDEtNC44MiAyLjQ5ICcgK1xuXHRcdFx0XHRcdCdMIDcgOC4wMiAnICtcblx0XHRcdFx0XHQnbCAtNiAyICcgK1xuXHRcdFx0XHRcdCd2IC03ICcgK1xuXHRcdFx0XHRcdCdMIDIuODkgNC42ICcgK1xuXHRcdFx0XHRcdCdjIDEuNjktMi4xNyA0LjM2LTMuNTggNy4zNi0zLjU4eic7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEVTUFJFU1NPX0lDT05fUkVNOlxuXHRcdFx0XHRwYXRoID0gJ00gMTAgMS4wMiAnICtcblx0XHRcdFx0XHQnYyAtNS4xIDAgLTguNzUgNC4wNCAtOC43NSA5ICcgK1xuXHRcdFx0XHRcdCdzIDMuNjUgOSA4Ljc1IDkgJyArXG5cdFx0XHRcdFx0J2MgMy4yIDAgNi4wMiAtMS41OSA3LjY4IC0zLjk5ICcgK1xuXHRcdFx0XHRcdCdsIC0yLjU5IC0xLjUyICcgK1xuXHRcdFx0XHRcdCdjIC0xLjEgMS41IC0yLjg2IDIuNTEgLTQuODQgMi41MSAtMy4zIDAgLTYgLTIuNzkgLTYgLTYgJyArXG5cdFx0XHRcdFx0J3MgMi43IC02IDYgLTYgJyArXG5cdFx0XHRcdFx0J2MgMS45NyAwIDMuNzIgMSA0LjgyIDIuNDkgJyArXG5cdFx0XHRcdFx0J0wgMTMuMTUgOC4xNSAnICtcblx0XHRcdFx0XHQnbCA2LjE4IDEuMDkgJyArXG5cdFx0XHRcdFx0J3YgLTYuMjUgJyArXG5cdFx0XHRcdFx0J0wgMTcuNCA0LjYgJyArXG5cdFx0XHRcdFx0J2MgLTEuNjkgLTIuMTcgLTQuMzYgLTMuNTggLTcuMzYgLTMuNTggeic7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEVTUFJFU1NPX0lDT05fU0FWRTpcblx0XHRcdFx0cGF0aCA9ICdNIDEgMTcuNSB2IC0xNiBsIDAuNSAtMC41IGggMTQuNSBsIDMgMyB2IDE0LjUgbCAtMC41IDAuNSBoIC0xNyBsIC0wLjUgLTAuNSB6IE0gNSA3IGggOSBsIDAuNSAtMC41IHYgLTQuNSBoIC05IHYgNC41IGwgMC41IDAuNSB6IE0gMTEgNi41IHYgLTMuNSBoIDIgdiAzIGggLTIgeiBNIDQgMTEuNSB2IDAuNSBoIDEyIHYgLTAuNSB6IG0gMCAyIHYgMC41IGggMTIgdiAtMC41IHogbSAwIDIgdiAwLjUgaCAxMiB2IC0wLjUgeic7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxEYXNoaWNvblxuXHRcdFx0XHRcdFx0aWNvbj17IGljb24gfVxuXHRcdFx0XHRcdFx0c2l6ZT17IHNpemUgfVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXsgY2xhc3NOYW1lIH1cblx0XHRcdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoICEgcGF0aCApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFNWR1xuXHRcdFx0XHRhcmlhLWhpZGRlblxuXHRcdFx0XHRyb2xlPVwiaW1nXCJcblx0XHRcdFx0Zm9jdXNhYmxlPVwiZmFsc2VcIlxuXHRcdFx0XHRjbGFzc05hbWU9e1xuXHRcdFx0XHRcdGNsYXNzTmFtZXMoXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdFx0XHQnZGFzaGljb24nLFxuXHRcdFx0XHRcdFx0YGRhc2hpY29ucy0keyBpY29uIH1gLFxuXHRcdFx0XHRcdFx0J2VzcHJlc3NvLWljb24nXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9XG5cdFx0XHRcdHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuXHRcdFx0XHR3aWR0aD17IHNpemUgfVxuXHRcdFx0XHRoZWlnaHQ9eyBzaXplIH1cblx0XHRcdFx0dmlld0JveD1cIjAgMCAyMCAyMFwiXG5cdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHQ+XG5cdFx0XHRcdDxQYXRoIGQ9eyBwYXRoIH0vPlxuXHRcdFx0PC9TVkc+XG5cdFx0KTtcblx0fVxufSIsImV4cG9ydCB7IEF2YXRhckltYWdlIH0gZnJvbSAnLi9hdmF0YXInO1xuZXhwb3J0IHtcblx0RXNwcmVzc29JY29uLFxuXHRFU1BSRVNTT19JQ09OX0NBTENVTEFUT1IsXG5cdEVTUFJFU1NPX0lDT05fQ0FMRU5EQVIsXG5cdEVTUFJFU1NPX0lDT05fU0FWRSxcblx0aXNFc3ByZXNzb0ljb24sXG59IGZyb20gJy4vZXNwcmVzc28taWNvbic7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJpZ2dpZUNhbGVuZGFyRGF0ZSB9IGZyb20gJy4vZGF0ZXMtYW5kLXRpbWVzL2JpZ2dpZS1jYWxlbmRhci1kYXRlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2FsZW5kYXJEYXRlUmFuZ2UgfSBmcm9tICcuL2RhdGVzLWFuZC10aW1lcy9jYWxlbmRhci1kYXRlLXJhbmdlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2FsZW5kYXJQYWdlRGF0ZSB9IGZyb20gJy4vZGF0ZXMtYW5kLXRpbWVzL2NhbGVuZGFyLXBhZ2UtZGF0ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lZGl1bUNhbGVuZGFyRGF0ZSB9IGZyb20gJy4vZGF0ZXMtYW5kLXRpbWVzL21lZGl1bS1jYWxlbmRhci1kYXRlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRHJvcERvd25NZW51IH0gZnJvbSAnLi9kcm9wLWRvd24tbWVudSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVudGl0eURldGFpbHNQYW5lbCB9IGZyb20gJy4vZW50aXR5LWRldGFpbHMtcGFuZWwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbnRpdHlMaXN0IH0gZnJvbSAnLi9lbnRpdHktbGlzdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhFbnRpdHlQYXBlckZyYW1lIH0gZnJvbSAnLi9lbnRpdHktcGFwZXItZnJhbWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFc3ByZXNzb0J1dHRvbiB9IGZyb20gJy4vZXNwcmVzc28tYnV0dG9uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbk1lbnVJdGVtIH0gZnJvbSAnLi9pY29uLW1lbnUtaXRlbS9pY29uLW1lbnUtaXRlbSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVudGl0eUFjdGlvbk1lbnVJdGVtIH0gZnJvbSAnLi9pY29uLW1lbnUtaXRlbS9lbnRpdHktYWN0aW9uLW1lbnUtaXRlbSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlc3BvbnNpdmVUYWJsZSwgRXNwcmVzc29UYWJsZSB9IGZyb20gJy4vcmVzcG9uc2l2ZS10YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL2ltYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vbWVudSc7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFN0ZXBCdWJibGVNZW51IH0gZnJvbSAnLi9zdGVwLWJ1YmJsZSc7XG4iLCIvKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5pbXBvcnQgU3RlcEJ1YmJsZSBmcm9tICcuL3N0ZXAtYnViYmxlJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGFzc2VydGluZyBhIFN0ZXBDb25maWd1cmF0aW9uIG9iamVjdCBpcyB2YWxpZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuY29uc3QgYXNzZXJ0U3RlcENvbmZpZ3VyYXRpb24gPSAoIHsgbGFiZWwsIHZhbHVlIH0gKSA9PiB7XG5cdGlmICggdHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJyApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0c3ByaW50Zihcblx0XHRcdFx0J1N0ZXAgYnViYmxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHJlcXVpcmVzIGEgc3RyaW5nIGZvciB0aGUgJyArXG5cdFx0XHRcdCckMSRzLiAlMiRzIHdhcyBwcm92aWRlZCcsXG5cdFx0XHRcdCdsYWJlbCcsXG5cdFx0XHRcdGxhYmVsXG5cdFx0XHQpXG5cdFx0KVxuXHR9XG5cdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0c3ByaW50Zihcblx0XHRcdFx0J1N0ZXAgYnViYmxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHJlcXVpcmVzIGEgJTEkcyBwcm9wZXJ0eSwgJyArXG5cdFx0XHRcdCclMiRzIHdhcyBwcm92aWRlZC4nLFxuXHRcdFx0XHQndmFsdWUnLFxuXHRcdFx0XHR2YWx1ZVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cbn07XG5cbmNvbnN0IGdldFN0ZXBCdWJibGVzID0gKCBidWJibGVEYXRhICkgPT4ge1xuXHRjb25zdCBzdGVwQnViYmxlcyA9IFtdO1xuXHRmb3IgKCBjb25zdCBzbHVnIGluIGJ1YmJsZURhdGEgKSB7XG5cdFx0YXNzZXJ0U3RlcENvbmZpZ3VyYXRpb24oIGJ1YmJsZURhdGFbIHNsdWcgXSApO1xuXHRcdGNvbnN0IHtcblx0XHRcdGxhYmVsLFxuXHRcdFx0dmFsdWUsXG5cdFx0XHRhY3Rpb24sXG5cdFx0XHRjbGlja2FibGUsXG5cdFx0XHRhY3RpdmUsXG5cdFx0fSA9IGJ1YmJsZURhdGFbIHNsdWcgXTtcblx0XHRzdGVwQnViYmxlcy5wdXNoKFxuXHRcdFx0PFN0ZXBCdWJibGVcblx0XHRcdFx0a2V5PXsgc2x1ZyB9XG5cdFx0XHRcdGxhYmVsPXsgbGFiZWwgfVxuXHRcdFx0XHRzbHVnPXsgc2x1ZyB9XG5cdFx0XHRcdGFjdGlvbj17IGFjdGlvbiB9XG5cdFx0XHRcdHN0ZXBWYWx1ZT17IHZhbHVlIH1cblx0XHRcdFx0Y2xpY2thYmxlPXsgY2xpY2thYmxlIH1cblx0XHRcdFx0aXNBY3RpdmU9eyBhY3RpdmUgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiBzdGVwQnViYmxlcztcbn07XG5cbmNvbnN0IFN0ZXBCdWJibGVNZW51ID0gKCB7IGJ1YmJsZURhdGEgfSApID0+IHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXN0ZXAtYnViYmxlLW1lbnUtY29udGFpbmVyXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInN0ZXAtYnViYmxlcy1jb250YWluZXJcIiByb2xlPVwibWVudVwiIHRhYkluZGV4PXsgMSB9PlxuXHRcdFx0eyBnZXRTdGVwQnViYmxlcyggYnViYmxlRGF0YSApIH1cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpO1xufTtcblxuU3RlcEJ1YmJsZU1lbnUucHJvcFR5cGVzID0geyBidWJibGVEYXRhOiBQcm9wVHlwZXMub2JqZWN0IH07XG5TdGVwQnViYmxlTWVudS5kZWZhdWx0UHJvcHMgPSB7IGJ1YmJsZURhdGE6IHt9IH07XG5cbmV4cG9ydCBkZWZhdWx0IFN0ZXBCdWJibGVNZW51O1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBTdGVwVGV4dCBmcm9tICcuL3N0ZXAtdGV4dCc7XG5cbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgcHVyZSB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSdcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBTdGVwQnViYmxlID0gKCB7XG5cdGxhYmVsLFxuXHRzbHVnLFxuXHRpc0FjdGl2ZSxcblx0c3RlcFZhbHVlLFxuXHRjbGlja2FibGUsXG5cdGFjdGlvbixcbn0gKSA9PiB7XG5cdGNvbnN0IGNzc0NsYXNzID0gY2xhc3NOYW1lcyhcblx0XHQnZWUtc3RlcC1idWJibGUtaXRlbScsXG5cdFx0eyAnZWUtc3RlcC1idWJibGUtYWN0aXZlJzogaXNBY3RpdmUgfSxcblx0XHR7ICdlZS1jbGlja2FibGUnOiBjbGlja2FibGUgfSxcblx0KTtcblx0Y29uc3QgY2xpY2tBY3Rpb25zID0gY2xpY2thYmxlICYmIGlzRnVuY3Rpb24oIGFjdGlvbiApID9cblx0XHR7XG5cdFx0XHRvbkNsaWNrOiAoKSA9PiBhY3Rpb24oIHNsdWcgKSxcblx0XHRcdG9uS2V5UHJlc3M6ICggZXZlbnQgKSA9PiB7XG5cdFx0XHRcdGlmICggZXZlbnQua2V5ID09PSAnRW50ZXInICkge1xuXHRcdFx0XHRcdGFjdGlvbiggc2x1ZyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0cm9sZTogJ21lbnVpdGVtJyxcblx0XHR9IDpcblx0XHR7fTtcblx0cmV0dXJuIDxidXR0b25cblx0XHRjbGFzc05hbWU9eyBjc3NDbGFzcyB9XG5cdFx0dGFiSW5kZXg9eyAtMSB9XG5cdFx0eyAuLi5jbGlja0FjdGlvbnMgfVxuXHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInByb2dyZXNzLXN0ZXAtbGluZVwiIC8+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXN0ZXAtYnViYmxlXCI+XG5cdFx0XHRcdDxwPnsgc3RlcFZhbHVlIH08L3A+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxTdGVwVGV4dCBjb250ZW50PXsgbGFiZWwgfSAvPlxuXHRcdDwvYnV0dG9uPjtcbn07XG5cblN0ZXBCdWJibGUucHJvcFR5cGVzID0ge1xuXHRsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRzbHVnOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdGlzQWN0aXZlOiBQcm9wVHlwZXMuYm9vbCxcblx0c3RlcFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRdICksXG5cdGNsaWNrYWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cdGFjdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5TdGVwQnViYmxlLmRlZmF1bHRQcm9wcyA9IHtcblx0aXNBY3RpdmU6IGZhbHNlLFxuXHRzdGVwVmFsdWU6IDEsXG5cdGNsaWNrYWJsZTogdHJ1ZSxcblx0YWN0aW9uOiAoKSA9PiBudWxsLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgcHVyZSggU3RlcEJ1YmJsZSApO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBwdXJlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcblxuXG5leHBvcnQgY29uc3QgU3RlcFRleHQgPSAoIHsgY29udGVudCB9ICkgPT4ge1xuXHRyZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwiZWUtc3RlcC1idWJibGUtc3RlcC10ZXh0XCI+XG5cdFx0eyBjb250ZW50IH1cblx0PC9zcGFuPjtcbn07XG5cblN0ZXBUZXh0LnByb3BUeXBlcyA9IHsgY29udGVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkIH07XG5cbmV4cG9ydCBkZWZhdWx0IHB1cmUoIFN0ZXBUZXh0ICk7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtc3RlcC1idWJibGUtbWVudS1jb250YWluZXJcIjpcImVlLXN0ZXAtYnViYmxlLW1lbnUtY29udGFpbmVyXCIsXCJzdGVwLWJ1YmJsZXMtY29udGFpbmVyXCI6XCJzdGVwLWJ1YmJsZXMtY29udGFpbmVyXCIsXCJlZS1zdGVwLWJ1YmJsZS1pdGVtXCI6XCJlZS1zdGVwLWJ1YmJsZS1pdGVtXCIsXCJwcm9ncmVzcy1zdGVwLWxpbmVcIjpcInByb2dyZXNzLXN0ZXAtbGluZVwiLFwiZWUtc3RlcC1idWJibGVcIjpcImVlLXN0ZXAtYnViYmxlXCIsXCJlZS1jbGlja2FibGVcIjpcImVlLWNsaWNrYWJsZVwiLFwiZWUtc3RlcC1idWJibGUtYWN0aXZlXCI6XCJlZS1zdGVwLWJ1YmJsZS1hY3RpdmVcIixcImVlLXN0ZXAtYnViYmxlLXN0ZXAtdGV4dFwiOlwiZWUtc3RlcC1idWJibGUtc3RlcC10ZXh0XCJ9OyIsImltcG9ydCB7IGRlZmF1bHQgYXMgUmVzcG9uc2l2ZVRhYmxlIH0gZnJvbSAnLi9yZXNwb25zaXZlLXRhYmxlJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgVGFibGUgfSBmcm9tICcuL3RhYmxlJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgVGFibGVIZWFkZXIgfSBmcm9tICcuL3RhYmxlLWhlYWRlcic7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFRhYmxlQm9keSB9IGZyb20gJy4vdGFibGUtYm9keSc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFRhYmxlRm9vdGVyIH0gZnJvbSAnLi90YWJsZS1mb290ZXInO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBUYWJsZVJvdyB9IGZyb20gJy4vdGFibGUtcm93JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgVGFibGVIZWFkaW5nQ2VsbCB9IGZyb20gJy4vdGFibGUtaGVhZGluZy1jZWxsJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgVGFibGVEYXRhQ2VsbCB9IGZyb20gJy4vdGFibGUtZGF0YS1jZWxsJztcblxuZXhwb3J0IGNvbnN0IEVzcHJlc3NvVGFibGUgPSB7XG5cdFRhYmxlLFxuXHRUYWJsZUhlYWRlcixcblx0VGFibGVCb2R5LFxuXHRUYWJsZVJvdyxcblx0VGFibGVGb290ZXIsXG5cdFRhYmxlSGVhZGluZ0NlbGwsXG5cdFRhYmxlRGF0YUNlbGwsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZXNwb25zaXZlVGFibGU7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBoZWFkaW5ncyByb3dcbiAqL1xuY29uc3QgUmVzcG9uc2l2ZUNlbGwgPSAoIHsgaGVhZGluZyA9ICcnLCB2YWx1ZSA9ICcnIH0gKSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PEZyYWdtZW50PlxuXHRcdFx0PGRpdiBhcmlhLWhpZGRlblxuXHRcdFx0XHRjbGFzc05hbWU9eyAnZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi1oZWFkZXInIH1cblx0XHRcdD5cblx0XHRcdFx0eyBoZWFkaW5nIH1cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eyAnZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZScgfSA+XG5cdFx0XHRcdHsgdmFsdWUgfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9GcmFnbWVudD5cblx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlc3BvbnNpdmVDZWxsO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGZpcnN0LCBpc0FycmF5LCBpc0VtcHR5LCBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IFRhYmxlIGZyb20gJy4vdGFibGUnO1xuaW1wb3J0IFRhYmxlSGVhZGVyIGZyb20gJy4vdGFibGUtaGVhZGVyJztcbmltcG9ydCBUYWJsZUJvZHkgZnJvbSAnLi90YWJsZS1ib2R5JztcbmltcG9ydCBUYWJsZUZvb3RlciBmcm9tICcuL3RhYmxlLWZvb3Rlcic7XG5pbXBvcnQgVGFibGVSb3cgZnJvbSAnLi90YWJsZS1yb3cnO1xuaW1wb3J0IFRhYmxlSGVhZGluZ0NlbGwgZnJvbSAnLi90YWJsZS1oZWFkaW5nLWNlbGwnO1xuaW1wb3J0IFRhYmxlRGF0YUNlbGwgZnJvbSAnLi90YWJsZS1kYXRhLWNlbGwnO1xuaW1wb3J0IFJlc3BvbnNpdmVDZWxsIGZyb20gJy4vcmVzcG9uc2l2ZS1jZWxsJztcbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vKipcbiAqIFJlc3BvbnNpdmVEYXRhR3JpZCByZXNwb25zaXZlLXRhYmxlXG4gKiBwcm9kdWNlcyBhIHRhYmxlIGxpa2Ugc3RydWN0dXJlIGZvciBkaXNwbGF5aW5nIHRhYnVsYXIgZGF0YVxuICogaW4gYSBncmlkIHRoYXQgY29sbGFwc2VzIHByb3Blcmx5IG9uIHNtYWxsZXIgc2NyZWVuc1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGNvbHVtbkhlYWRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IHJvd0hlYWRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IHRhYmxlRGF0YVxuICogQHBhcmFtIHtPYmplY3R9IG1ldGFEYXRhXG4gKi9cbmNsYXNzIFJlc3BvbnNpdmVUYWJsZSBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0Y29sdW1uczogUHJvcFR5cGVzLmFycmF5T2YoXG5cdFx0XHRQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRcdFx0dHlwZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdFx0XHR2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0XHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0XHRcdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRcdFx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRdICkuaXNSZXF1aXJlZCxcblx0XHRcdFx0aWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRcdGNsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRleHRyYVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFx0fSApXG5cdFx0KS5pc1JlcXVpcmVkLFxuXHRcdHJvd0RhdGE6IFByb3BUeXBlcy5hcnJheU9mKFxuXHRcdFx0UHJvcFR5cGVzLmFycmF5T2YoXG5cdFx0XHRcdFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdFx0XHRcdHR5cGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRcdFx0XHR2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0XHRcdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRcdFx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRcdFx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRcdF0gKS5pc1JlcXVpcmVkLFxuXHRcdFx0XHRcdGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRcdGNsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRcdHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0XHRcdFx0ZXh0cmFQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblx0XHRcdFx0fSApXG5cdFx0XHQpXG5cdFx0KS5pc1JlcXVpcmVkLFxuXHRcdG1ldGFEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRcdHRhYmxlQ2FwdGlvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdFx0c2hvd1RhYmxlRm9vdGVyOiBQcm9wVHlwZXMuYm9vbCxcblx0XHRcdGhhc1Jvd0hlYWRlcnM6IFByb3BUeXBlcy5ib29sLFxuXHRcdH0gKS5pc1JlcXVpcmVkLFxuXHRcdGNsYXNzZXM6IFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdFx0dGFibGVDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdGhlYWRlckNsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0aGVhZGVyUm93Q2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRoZWFkZXJUaENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0Ym9keUNsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0Ym9keVJvd0NsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0Ym9keVRoQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRib2R5VGRDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdGZvb3RlckNsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0Zm9vdGVyUm93Q2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRmb290ZXJUaENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdH0gKSxcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBtZXRhRGF0YVxuXHQgKi9cblx0c2V0TWV0YURhdGEgPSAoIG1ldGFEYXRhID0ge30gKSA9PiB7XG5cdFx0dGhpcy50YWJsZUlkID0gJ2VlLXJUYWJsZS0nICtcblx0XHRcdE1hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc3Vic3RyKCAyLCA5ICk7XG5cdFx0dGhpcy50YWJsZUNhcHRpb24gPSBtZXRhRGF0YS50YWJsZUNhcHRpb24gfHwgJyc7XG5cdFx0dGhpcy5jYXB0aW9uSUQgPSBgJHsgdGhpcy50YWJsZUlkIH0tY2FwdGlvbmA7XG5cdFx0dGhpcy5zaG93VGFibGVGb290ZXIgPSB0eXBlb2YgbWV0YURhdGEuc2hvd1RhYmxlRm9vdGVyID09PSAndW5kZWZpbmVkJyA/XG5cdFx0XHR0cnVlIDogbWV0YURhdGEuc2hvd1RhYmxlRm9vdGVyO1xuXHRcdHRoaXMuaGFzUm93SGVhZGVycyA9ICEhIG1ldGFEYXRhLmhhc1Jvd0hlYWRlcnM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gY2xhc3Nlc1xuXHQgKi9cblx0c2V0Q3NzQ2xhc3NlcyA9ICggY2xhc3NlcyApID0+IHtcblx0XHR0aGlzLmNsYXNzZXMgPSB7XG5cdFx0XHR0YWJsZUNsYXNzOiBjbGFzc2VzLnRhYmxlQ2xhc3MgfHwgJycsXG5cdFx0XHRoZWFkZXJDbGFzczogY2xhc3Nlcy5oZWFkZXJDbGFzcyB8fCAnJyxcblx0XHRcdGhlYWRlclJvd0NsYXNzOiBjbGFzc2VzLmhlYWRlclJvd0NsYXNzIHx8ICcnLFxuXHRcdFx0aGVhZGVyVGhDbGFzczogY2xhc3Nlcy5oZWFkZXJUaENsYXNzIHx8ICcnLFxuXHRcdFx0Ym9keUNsYXNzOiBjbGFzc2VzLmJvZHlDbGFzcyB8fCAnJyxcblx0XHRcdGJvZHlSb3dDbGFzczogY2xhc3Nlcy5ib2R5Um93Q2xhc3MgfHwgJycsXG5cdFx0XHRib2R5VGhDbGFzczogY2xhc3Nlcy5ib2R5VGhDbGFzcyB8fCAnJyxcblx0XHRcdGJvZHlUZENsYXNzOiBjbGFzc2VzLmJvZHlUZENsYXNzIHx8ICcnLFxuXHRcdFx0Zm9vdGVyQ2xhc3M6IGNsYXNzZXMuZm9vdGVyQ2xhc3MgfHwgJycsXG5cdFx0XHRmb290ZXJSb3dDbGFzczogY2xhc3Nlcy5mb290ZXJSb3dDbGFzcyB8fCAnJyxcblx0XHRcdGZvb3RlclRoQ2xhc3M6IGNsYXNzZXMuZm9vdGVyVGhDbGFzcyB8fCAnJyxcblx0XHR9O1xuXHRcdHRoaXMuY2xhc3Nlcy50YWJsZUNsYXNzID0gY2xhc3NOYW1lcyhcblx0XHRcdHRoaXMuY2xhc3Nlcy50YWJsZUNsYXNzLFxuXHRcdFx0e1xuXHRcdFx0XHQnZWUtclRhYmxlLWhhcy1yb3ctaGVhZGVycyc6IHRoaXMuaGFzUm93SGVhZGVyc1xuXHRcdFx0fVxuXHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2x1bW5zXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNGb290ZXJcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBoZWFkaW5ncyByb3dcblx0ICovXG5cdHRhYmxlSGVhZGVyID0gKCBjb2x1bW5zLCBpc0Zvb3RlciA9IGZhbHNlICkgPT4ge1xuXHRcdHRoaXMucm93TnVtYmVyKys7XG5cdFx0Y29uc3Qgcm93VHlwZSA9IGlzRm9vdGVyID09PSB0cnVlID8gJ2Zvb3RlcicgOiAnaGVhZGVyJztcblx0XHRsZXQgcm93UHJvcHMgPSB7fTtcblx0XHRsZXQgaW5kZXhNb2QgPSAwO1xuXHRcdGNvbnN0IGhlYWRlckNlbGxzID0gY29sdW1ucy5tYXAoXG5cdFx0XHQoIGNvbHVtbiwgY29sTnVtYmVyICkgPT4ge1xuXHRcdFx0XHRjb2x1bW4ucm93VHlwZSA9IGNvbHVtbi5yb3dUeXBlIHx8IHJvd1R5cGU7XG5cdFx0XHRcdGlmICggY29sdW1uLnR5cGUgJiYgY29sdW1uLnR5cGUgPT09ICdyb3cnICkge1xuXHRcdFx0XHRcdHJvd1Byb3BzID0gY29sdW1uO1xuXHRcdFx0XHRcdGluZGV4TW9kKys7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5jb2x1bW5zLnB1c2goIGNvbHVtbiApO1xuXHRcdFx0XHRjb2xOdW1iZXIgLT0gaW5kZXhNb2Q7XG5cdFx0XHRcdGNvbnN0IGhhc1JlbmRlckNhbGxiYWNrID0gaXNGdW5jdGlvbiggY29sdW1uLnJlbmRlciApO1xuXHRcdFx0XHR3YXJuaW5nKFxuXHRcdFx0XHRcdGhhc1JlbmRlckNhbGxiYWNrIHx8IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSggJ3ZhbHVlJyApLFxuXHRcdFx0XHRcdGBNaXNzaW5nIFwidmFsdWVcIiBwcm9wZXJ0eSBmb3IgJHsgcm93VHlwZSB9IGNvbHVtbiAkeyBjb2xOdW1iZXIgfS5gXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IHJlbmRlckNhbGxiYWNrID0gaGFzUmVuZGVyQ2FsbGJhY2sgP1xuXHRcdFx0XHRcdGNvbHVtbi5yZW5kZXIgOlxuXHRcdFx0XHRcdHRoaXMuaGVhZGluZ0NlbGw7XG5cdFx0XHRcdHJldHVybiByZW5kZXJDYWxsYmFjayggdGhpcy5yb3dOdW1iZXIsIGNvbE51bWJlciwgY29sdW1uICk7XG5cdFx0XHR9XG5cdFx0KTtcblx0XHRyZXR1cm4gdGhpcy50YWJsZVJvdyggaGVhZGVyQ2VsbHMsIHJvd1Byb3BzICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge0FycmF5fSBjZWxsc1xuXHQgKiBAcGFyYW0ge09iamVjdH0gcm93UHJvcHNcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCA8dHI+IGVsZW1lbnRcblx0ICovXG5cdHRhYmxlUm93ID0gKCBjZWxscywgcm93UHJvcHMgPSB7fSApID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRhYmxlUm93XG5cdFx0XHRcdGtleT17IGByb3ctJHsgdGhpcy5yb3dOdW1iZXIgfWAgfVxuXHRcdFx0XHRyb3dOdW1iZXI9eyB0aGlzLnJvd051bWJlciB9XG5cdFx0XHRcdHJvd1R5cGU9eyByb3dQcm9wcy5yb3dUeXBlIHx8ICdib2R5JyB9XG5cdFx0XHRcdGh0bWxJZD17IHJvd1Byb3BzLmlkIHx8IHRoaXMudGFibGVJZCB9XG5cdFx0XHRcdGh0bWxDbGFzcz17IHJvd1Byb3BzLmNsYXNzIHx8ICcnIH1cblx0XHRcdFx0Y2xhc3Nlcz17IHRoaXMuY2xhc3NlcyB9XG5cdFx0XHQ+XG5cdFx0XHRcdHsgY2VsbHMgfVxuXHRcdFx0PC9UYWJsZVJvdz5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtudW1iZXJ9IHJvd051bWJlclxuXHQgKiBAcGFyYW0ge251bWJlcn0gY29sTnVtYmVyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBjZWxsUHJvcHNcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBjb2x1bW4gaGVhZGVyIGNlbGxcblx0ICovXG5cdGhlYWRpbmdDZWxsID0gKCByb3dOdW1iZXIsIGNvbE51bWJlciwgY2VsbFByb3BzICkgPT4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VGFibGVIZWFkaW5nQ2VsbFxuXHRcdFx0XHRrZXk9eyBgcm93LSR7IHJvd051bWJlciB9LWNvbC0keyBjb2xOdW1iZXIgfWAgfVxuXHRcdFx0XHRyb3dOdW1iZXI9eyByb3dOdW1iZXIgfVxuXHRcdFx0XHRjb2xOdW1iZXI9eyBjb2xOdW1iZXIgfVxuXHRcdFx0XHRyb3dUeXBlPXsgY2VsbFByb3BzLnJvd1R5cGUgfHwgJ2JvZHknIH1cblx0XHRcdFx0aHRtbElkPXsgY2VsbFByb3BzLmlkIHx8IHRoaXMudGFibGVJZCB9XG5cdFx0XHRcdGh0bWxDbGFzcz17IGNlbGxQcm9wcy5jbGFzcyB8fCAnJyB9XG5cdFx0XHRcdGNsYXNzZXM9eyB0aGlzLmNsYXNzZXMgfVxuXHRcdFx0PlxuXHRcdFx0XHR7IGNlbGxQcm9wcy52YWx1ZSB8fCAnJyB9XG5cdFx0XHQ8L1RhYmxlSGVhZGluZ0NlbGw+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGRhdGFSb3dcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBkYXRhIHJvd1xuXHQgKi9cblx0ZGF0YVJvdyA9ICggZGF0YVJvdyApID0+IHtcblx0XHR0aGlzLnJvd051bWJlcisrO1xuXHRcdHdhcm5pbmcoXG5cdFx0XHRpc0FycmF5KCBkYXRhUm93ICksXG5cdFx0XHRgRGF0YSBmb3Igcm93ICR7IHRoaXMucm93TnVtYmVyIH0gaXMgbm90IGFuIGFycmF5LmBcblx0XHQpO1xuXHRcdGxldCByb3dQcm9wcyA9IHt9O1xuXHRcdGxldCBpbmRleE1vZCA9IDA7XG5cdFx0Y29uc3Qgcm93Q2VsbHMgPSBkYXRhUm93Lm1hcChcblx0XHRcdCggY2VsbERhdGEsIGNvbE51bWJlciApID0+IHtcblx0XHRcdFx0Y2VsbERhdGEucm93VHlwZSA9IGNlbGxEYXRhLnJvd1R5cGUgfHwgJ2JvZHknO1xuXHRcdFx0XHRpZiAoIGNlbGxEYXRhLnR5cGUgJiYgY2VsbERhdGEudHlwZSA9PT0gJ3JvdycgKSB7XG5cdFx0XHRcdFx0cm93UHJvcHMgPSBjZWxsRGF0YTtcblx0XHRcdFx0XHRpbmRleE1vZCsrO1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGFkanVzdCBjb2x1bW4gbnVtYmVyIHVzZWQgaW4gSURzXG5cdFx0XHRcdC8vIGJlZm9yZSBncmFiYmluZyBlbGVtZW50IGZyb20gY29sdW1uIGRhdGFcblx0XHRcdFx0Y29sTnVtYmVyIC09IGluZGV4TW9kO1xuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbIGNvbE51bWJlciBdO1xuXHRcdFx0XHRpZiAoICEgY29sdW1uICkge1xuXHRcdFx0XHRcdHdhcm5pbmcoXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGBNaXNzaW5nIGRhdGEgZm9yIGNvbHVtbiAkeyBjb2xOdW1iZXIgfSBgICtcblx0XHRcdFx0XHRcdGBpbiByb3cgJHsgdGhpcy5yb3dOdW1iZXIgfS5gXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBoYXNSZW5kZXJDYWxsYmFjayA9IGlzRnVuY3Rpb24oIGNlbGxEYXRhLnJlbmRlciApO1xuXHRcdFx0XHR3YXJuaW5nKFxuXHRcdFx0XHRcdGhhc1JlbmRlckNhbGxiYWNrIHx8IGNlbGxEYXRhLmhhc093blByb3BlcnR5KCAndmFsdWUnICksXG5cdFx0XHRcdFx0YE1pc3NpbmcgXCJ2YWx1ZVwiIHByb3BlcnR5IGZvciB0YWJsZSBjZWxsIGF0IGAgK1xuXHRcdFx0XHRcdGByb3cgJHsgdGhpcy5yb3dOdW1iZXIgfSBjb2x1bW4gJHsgY29sTnVtYmVyIH0uYFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCByZW5kZXJDYWxsYmFjayA9IGhhc1JlbmRlckNhbGxiYWNrID9cblx0XHRcdFx0XHRjZWxsRGF0YS5yZW5kZXIgOlxuXHRcdFx0XHRcdHRoaXMuZGF0YUNlbGw7XG5cdFx0XHRcdHJldHVybiByZW5kZXJDYWxsYmFjayhcblx0XHRcdFx0XHR0aGlzLnJvd051bWJlcixcblx0XHRcdFx0XHRjb2xOdW1iZXIsXG5cdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdGNlbGxEYXRhXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0KTtcblx0XHRyZXR1cm4gdGhpcy50YWJsZVJvdyggcm93Q2VsbHMsIHJvd1Byb3BzICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge251bWJlcn0gcm93TnVtYmVyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBjb2xOdW1iZXJcblx0ICogQHBhcmFtIHtPYmplY3R9IGNvbHVtblxuXHQgKiBAcGFyYW0ge09iamVjdH0gY2VsbERhdGFcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBoZWFkaW5ncyByb3dcblx0ICovXG5cdGRhdGFDZWxsID0gKCByb3dOdW1iZXIsIGNvbE51bWJlciwgY29sdW1uLCBjZWxsRGF0YSApID0+IHtcblx0XHRyZXR1cm4gdGhpcy5oYXNSb3dIZWFkZXJzICYmIGNvbE51bWJlciA9PT0gMCA/IChcblx0XHRcdHRoaXMuaGVhZGluZ0NlbGwoIHJvd051bWJlciwgY29sTnVtYmVyLCBjZWxsRGF0YSApXG5cdFx0KSA6IChcblx0XHRcdDxUYWJsZURhdGFDZWxsXG5cdFx0XHRcdGtleT17IGByb3ctJHsgcm93TnVtYmVyIH0tY29sLSR7IGNvbE51bWJlciB9YCB9XG5cdFx0XHRcdHJvd051bWJlcj17IHJvd051bWJlciB9XG5cdFx0XHRcdGNvbE51bWJlcj17IGNvbE51bWJlciB9XG5cdFx0XHRcdGh0bWxJZD17IGNlbGxEYXRhLmlkIHx8IHRoaXMudGFibGVJZCB9XG5cdFx0XHRcdGh0bWxDbGFzcz17IGNlbGxEYXRhLmNsYXNzIHx8ICcnIH1cblx0XHRcdFx0Y2xhc3Nlcz17IHRoaXMuY2xhc3NlcyB9XG5cdFx0XHQ+XG5cdFx0XHRcdDxSZXNwb25zaXZlQ2VsbFxuXHRcdFx0XHRcdGhlYWRpbmc9eyBjb2x1bW4udmFsdWUgfVxuXHRcdFx0XHRcdHZhbHVlPXsgY2VsbERhdGEudmFsdWUgfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9UYWJsZURhdGFDZWxsPlxuXHRcdCk7XG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdGNvbHVtbnMgPSBbXSxcblx0XHRcdHJvd0RhdGEgPSBbXSxcblx0XHRcdGZvb3RlckRhdGEgPSBbXSxcblx0XHRcdG1ldGFEYXRhID0ge30sXG5cdFx0XHRjbGFzc2VzID0ge30sXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0aWYgKCBpc0VtcHR5KCBjb2x1bW5zICkgKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dGhpcy5zZXRNZXRhRGF0YSggbWV0YURhdGEgKTtcblx0XHR0aGlzLnNldENzc0NsYXNzZXMoIGNsYXNzZXMgfHwge30gKTtcblx0XHR0aGlzLmNvbHVtbnMgPSBbXTtcblx0XHR0aGlzLnJvd051bWJlciA9IC0xO1xuXHRcdGNvbnN0IHRhYmxlSGVhZGVyID0gdGhpcy50YWJsZUhlYWRlciggY29sdW1ucyApO1xuXHRcdHRoaXMuY2xhc3Nlcy50YWJsZUNsYXNzID0gY2xhc3NOYW1lcyhcblx0XHRcdHRoaXMuY2xhc3Nlcy50YWJsZUNsYXNzLFxuXHRcdFx0YGVlLXJUYWJsZS1jb2x1bW4tY291bnQtJHsgdGhpcy5jb2x1bW5zLmxlbmd0aCB9YFxuXHRcdCk7XG5cdFx0dGhpcy5zaG93VGFibGVGb290ZXIgPSB0aGlzLnNob3dUYWJsZUZvb3RlciAmJiAhIGlzRW1wdHkoIGZvb3RlckRhdGEgKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRhYmxlXG5cdFx0XHRcdHRhYmxlSWQ9eyB0aGlzLnRhYmxlSWQgfVxuXHRcdFx0XHR0YWJsZUNsYXNzPXsgdGhpcy5jbGFzc2VzLnRhYmxlQ2xhc3MgfVxuXHRcdFx0XHRjYXB0aW9uSUQ9eyB0aGlzLmNhcHRpb25JRCB9XG5cdFx0XHRcdGNhcHRpb25UZXh0PXsgdGhpcy50YWJsZUNhcHRpb24gfVxuXHRcdFx0PlxuXHRcdFx0XHQ8VGFibGVIZWFkZXIgaHRtbENsYXNzPXsgdGhpcy5jbGFzc2VzLmhlYWRlckNsYXNzIH0gPlxuXHRcdFx0XHRcdHsgdGFibGVIZWFkZXIgfVxuXHRcdFx0XHQ8L1RhYmxlSGVhZGVyPlxuXHRcdFx0XHQ8VGFibGVCb2R5IGh0bWxDbGFzcz17IHRoaXMuY2xhc3Nlcy5ib2R5Q2xhc3MgfT5cblx0XHRcdFx0XHR7IHJvd0RhdGEubWFwKFxuXHRcdFx0XHRcdFx0KCBkYXRhUm93ICkgPT4gdGhpcy5kYXRhUm93KCBkYXRhUm93IClcblx0XHRcdFx0XHQpIH1cblx0XHRcdFx0PC9UYWJsZUJvZHk+XG5cdFx0XHRcdDxUYWJsZUZvb3RlclxuXHRcdFx0XHRcdHNob3dGb290ZXI9eyB0aGlzLnNob3dUYWJsZUZvb3RlciB9XG5cdFx0XHRcdFx0aHRtbENsYXNzPXsgdGhpcy5jbGFzc2VzLmZvb3RlckNsYXNzIH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHsgdGhpcy50YWJsZUhlYWRlciggZm9vdGVyRGF0YSwgdHJ1ZSApIH1cblx0XHRcdFx0PC9UYWJsZUZvb3Rlcj5cblx0XHRcdDwvVGFibGU+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXNwb25zaXZlVGFibGU7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtclRhYmxlXCI6XCJlZS1yVGFibGVcIixcImVlLXJUYWJsZS1oZWFkZXJcIjpcImVlLXJUYWJsZS1oZWFkZXJcIixcImVlLXJUYWJsZS1ib2R5XCI6XCJlZS1yVGFibGUtYm9keVwiLFwiZWUtclRhYmxlLWJvZHktcm93XCI6XCJlZS1yVGFibGUtYm9keS1yb3dcIixcImVlLXJUYWJsZS1mb290ZXJcIjpcImVlLXJUYWJsZS1mb290ZXJcIixcImVlLXJUYWJsZS1mb290ZXItcm93XCI6XCJlZS1yVGFibGUtZm9vdGVyLXJvd1wiLFwiZWUtclRhYmxlLWhlYWRlci1yb3dcIjpcImVlLXJUYWJsZS1oZWFkZXItcm93XCIsXCJlZS1yVGFibGUtYm9keS10ZFwiOlwiZWUtclRhYmxlLWJvZHktdGRcIixcImVlLXJUYWJsZS1mb290ZXItdGRcIjpcImVlLXJUYWJsZS1mb290ZXItdGRcIixcImVlLXJUYWJsZS1mb290ZXItdGhcIjpcImVlLXJUYWJsZS1mb290ZXItdGhcIixcImVlLXJUYWJsZS1oZWFkZXItdGhcIjpcImVlLXJUYWJsZS1oZWFkZXItdGhcIixcImVlLXJUYWJsZS1oYXMtcm93LWhlYWRlcnNcIjpcImVlLXJUYWJsZS1oYXMtcm93LWhlYWRlcnNcIixcImVlLXJUYWJsZS1ib2R5LXRoXCI6XCJlZS1yVGFibGUtYm9keS10aFwiLFwiZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZVwiOlwiZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZVwiLFwiZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi1oZWFkZXJcIjpcImVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVyXCIsXCJlZS1udW1iZXItY29sdW1uXCI6XCJlZS1udW1iZXItY29sdW1uXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTFcIjpcImVlLXJUYWJsZS1jb2x1bW4tY291bnQtMVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTJcIixcImVlLXJUYWJsZS1jb2x1bW4tY291bnQtM1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTRcIjpcImVlLXJUYWJsZS1jb2x1bW4tY291bnQtNFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTVcIixcImVlLXJUYWJsZS1jb2x1bW4tY291bnQtNlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTdcIjpcImVlLXJUYWJsZS1jb2x1bW4tY291bnQtN1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LThcIixcImVlLXJUYWJsZS1jb2x1bW4tY291bnQtOVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTEwXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTEwXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTExXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTExXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTEyXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTEyXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTEzXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTEzXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTE0XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTE0XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTE1XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTE1XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTE2XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTE2XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTE3XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTE3XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTE4XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTE4XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTE5XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTE5XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTIwXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTIwXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTIxXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTIxXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTIyXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTIyXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTIzXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTIzXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTI0XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTI0XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTI1XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTI1XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTI2XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTI2XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTI3XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTI3XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTI4XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTI4XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTI5XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTI5XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTMwXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTMwXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTMxXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTMxXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTMyXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTMyXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTMzXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTMzXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTM0XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTM0XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTM1XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTM1XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTM2XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTM2XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTM3XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTM3XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTM4XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTM4XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTM5XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTM5XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQwXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQwXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQxXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQxXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQyXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQyXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQzXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQzXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQ0XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQ0XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQ1XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQ1XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQ2XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQ2XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQ3XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQ3XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQ4XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQ4XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQ5XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTQ5XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTUwXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTUwXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTUxXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTUxXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTUyXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTUyXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTUzXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTUzXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTU0XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTU0XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTU1XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTU1XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTU2XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTU2XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTU3XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTU3XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTU4XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTU4XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTU5XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTU5XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTYwXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTYwXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTYxXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTYxXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTYyXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTYyXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTYzXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTYzXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTY0XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTY0XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTY1XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTY1XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTY2XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTY2XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTY3XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTY3XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTY4XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTY4XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTY5XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTY5XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTcwXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTcwXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTcxXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTcxXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTcyXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTcyXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTczXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTczXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTc0XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTc0XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTc1XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTc1XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTc2XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTc2XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTc3XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTc3XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTc4XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTc4XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTc5XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTc5XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTgwXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTgwXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTgxXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTgxXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTgyXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTgyXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTgzXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTgzXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTg0XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTg0XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTg1XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTg1XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTg2XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTg2XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTg3XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTg3XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTg4XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTg4XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTg5XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTg5XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTkwXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTkwXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTkxXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTkxXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTkyXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTkyXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTkzXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTkzXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTk0XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTk0XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTk1XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTk1XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTk2XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTk2XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTk3XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTk3XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTk4XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTk4XCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5fSBjaGlsZHJlblxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtPYmplY3R9IGV4dHJhUHJvcHNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgdGhlYWRcbiAqL1xuY29uc3QgVGFibGVCb2R5ID0gKCB7IGNoaWxkcmVuLCBodG1sQ2xhc3MsIC4uLmV4dHJhUHJvcHMgfSApID0+IHtcblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcyhcblx0XHRodG1sQ2xhc3MsXG5cdFx0J2VlLXJUYWJsZS1ib2R5J1xuXHQpO1xuXHRyZXR1cm4gKFxuXHRcdDx0Ym9keSBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfSB7IC4uLmV4dHJhUHJvcHMgfT5cblx0XHRcdHsgY2hpbGRyZW4gfVxuXHRcdDwvdGJvZHk+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUJvZHk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbi8qKlxuICogQHBhcmFtIHttaXhlZH0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3dOdW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2xOdW1iZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSByb3dUeXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbElkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge09iamVjdH0gY2xhc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IGV4dHJhUHJvcHNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgPHRoPiBoZWFkaW5nIGNlbGxcbiAqL1xuY29uc3QgVGFibGVEYXRhQ2VsbCA9ICgge1xuXHRjaGlsZHJlbixcblx0cm93TnVtYmVyLFxuXHRjb2xOdW1iZXIsXG5cdGh0bWxJZCA9ICcnLFxuXHRodG1sQ2xhc3MgPSAnJyxcblx0Y2xhc3NlcyA9IHt9LFxuXHQuLi5leHRyYVByb3BzXG59ICkgPT4ge1xuXHRodG1sSWQgPSBodG1sSWQgP1xuXHRcdGAkeyBodG1sSWQgfS1yb3ctJHsgcm93TnVtYmVyIH0tY29sLSR7IGNvbE51bWJlciB9YCA6XG5cdFx0YGVlLXJUYWJsZS1yb3ctJHsgcm93TnVtYmVyIH0tY29sLSR7IGNvbE51bWJlciB9YDtcblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcyhcblx0XHRodG1sQ2xhc3MsXG5cdFx0J2VlLXJUYWJsZS1ib2R5LXRkJyxcblx0XHRgY29sLSR7IGNvbE51bWJlciB9YCxcblx0XHRjbGFzc2VzLmJvZHlUZENsYXNzXG5cdCk7XG5cdHJldHVybiAoXG5cdFx0PHRkIGlkPXsgaHRtbElkIH0gY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0geyAuLi5leHRyYVByb3BzIH0gPlxuXHRcdFx0eyBjaGlsZHJlbiB9XG5cdFx0PC90ZD5cblx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlRGF0YUNlbGw7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBzaG93Rm9vdGVyXG4gKiBAcGFyYW0ge0FycmF5fSBjaGlsZHJlblxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtPYmplY3R9IGV4dHJhUHJvcHNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgdGhlYWRcbiAqL1xuY29uc3QgVGFibGVGb290ZXIgPSAoIHsgc2hvd0Zvb3RlciwgY2hpbGRyZW4sIGh0bWxDbGFzcywgLi4uZXh0cmFQcm9wcyB9ICkgPT4ge1xuXHRodG1sQ2xhc3MgPSBjbGFzc05hbWVzKFxuXHRcdGh0bWxDbGFzcyxcblx0XHQnZWUtclRhYmxlLWZvb3Rlcidcblx0KTtcblx0cmV0dXJuIHNob3dGb290ZXIgPyAoXG5cdFx0PHRmb290IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9IHsgLi4uZXh0cmFQcm9wcyB9PlxuXHRcdFx0eyBjaGlsZHJlbiB9XG5cdFx0PC90Zm9vdD5cblx0KSA6IG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUZvb3RlcjtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5fSBjaGlsZHJlblxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtPYmplY3R9IGV4dHJhUHJvcHNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgdGhlYWRcbiAqL1xuY29uc3QgVGFibGVIZWFkZXIgPSAoIHsgY2hpbGRyZW4sIGh0bWxDbGFzcywgLi4uZXh0cmFQcm9wcyB9ICkgPT4ge1xuXHRodG1sQ2xhc3MgPSBjbGFzc05hbWVzKFxuXHRcdGh0bWxDbGFzcyxcblx0XHQnZWUtclRhYmxlLWhlYWRlcidcblx0KTtcblx0cmV0dXJuIChcblx0XHQ8dGhlYWQgY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0geyAuLi5leHRyYVByb3BzIH0+XG5cdFx0XHR7IGNoaWxkcmVuIH1cblx0XHQ8L3RoZWFkPlxuXHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXI7XG4iLCIvKipcbiAqIEBwYXJhbSB7bWl4ZWR9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gcm93TnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0gY29sTnVtYmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gcm93VHlwZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxJZFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtPYmplY3R9IGNsYXNzZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRyYVByb3BzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIDx0aD4gaGVhZGluZyBjZWxsXG4gKi9cbmNvbnN0IFRhYmxlSGVhZGluZ0NlbGwgPSAoIHtcblx0Y2hpbGRyZW4sXG5cdHJvd051bWJlcixcblx0Y29sTnVtYmVyLFxuXHRyb3dUeXBlLFxuXHRodG1sSWQgPSAnJyxcblx0aHRtbENsYXNzID0gJycsXG5cdGNsYXNzZXMgPSB7fSxcblx0Li4uZXh0cmFQcm9wc1xufSApID0+IHtcblx0aHRtbElkID0gaHRtbElkID9cblx0XHRgJHsgaHRtbElkIH0tJHsgcm93VHlwZSB9LXJvdy0keyByb3dOdW1iZXIgfS1jb2wtJHsgY29sTnVtYmVyIH1gIDpcblx0XHRgZWUtclRhYmxlLSR7IHJvd1R5cGUgfS1yb3ctJHsgcm93TnVtYmVyIH0tY29sLSR7IGNvbE51bWJlciB9YDtcblx0aHRtbENsYXNzID0gaHRtbENsYXNzID9cblx0XHRgJHsgaHRtbENsYXNzIH0gZWUtclRhYmxlLSR7IHJvd1R5cGUgfS10aCBjb2wtJHsgY29sTnVtYmVyIH1gIDpcblx0XHRgZWUtclRhYmxlLSR7IHJvd1R5cGUgfS10aCBjb2wtJHsgY29sTnVtYmVyIH1gO1xuXHRjb25zdCByb3dUeXBlQ2xhc3MgPSByb3dUeXBlICsgJ1RoQ2xhc3MnO1xuXHRodG1sQ2xhc3MgPSBjbGFzc2VzWyByb3dUeXBlQ2xhc3MgXSA/XG5cdFx0YCR7IGh0bWxDbGFzcyB9ICR7IGNsYXNzZXNbIHJvd1R5cGVDbGFzcyBdIH1gIDpcblx0XHRodG1sQ2xhc3M7XG5cdGlmICggcm93VHlwZSA9PT0gJ2hlYWRlcicgKSB7XG5cdFx0ZXh0cmFQcm9wcy5yb2xlID0gXCJjb2x1bW5oZWFkZXJcIjtcblx0XHRleHRyYVByb3BzLnNjb3BlID0gXCJjb2xcIlxuXHR9IGVsc2UgaWYgKCByb3dUeXBlID09PSAnYm9keScgKSB7XG5cdFx0ZXh0cmFQcm9wcy5zY29wZSA9IFwicm93XCI7XG5cdH1cblx0cmV0dXJuIChcblx0XHQ8dGggaWQ9eyBodG1sSWQgfSBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfSB7IC4uLmV4dHJhUHJvcHMgfSA+XG5cdFx0XHR7IGNoaWxkcmVuIH1cblx0XHQ8L3RoPlxuXHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkaW5nQ2VsbDtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5fSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IHJvd051bWJlclxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxJZFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtPYmplY3R9IGNsYXNzZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBjbGFzc2VzXG4gKiBAcGFyYW0ge3N0cmluZ30gcm93VHlwZVxuICogQHBhcmFtIHtPYmplY3R9IGV4dHJhUHJvcHNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgdHJcbiAqL1xuY29uc3QgVGFibGVSb3cgPSAoIHtcblx0Y2hpbGRyZW4sXG5cdHJvd051bWJlcixcblx0aHRtbElkID0gJycsXG5cdGh0bWxDbGFzcyA9ICcnLFxuXHRjbGFzc2VzID0ge30sXG5cdHJvd1R5cGUgPSAnYm9keScsXG5cdC4uLmV4dHJhUHJvcHNcbn0gKSA9PiB7XG5cdHJvd1R5cGUgKz0gJ1Jvd0NsYXNzJztcblx0aHRtbElkID0gaHRtbElkID9cblx0XHRgJHsgaHRtbElkIH0tcm93LSR7IHJvd051bWJlciB9YCA6XG5cdFx0YGVlLXJUYWJsZS1yb3ctJHsgcm93TnVtYmVyIH1gO1xuXHRodG1sQ2xhc3MgPSBjbGFzc05hbWVzKFxuXHRcdGh0bWxDbGFzcyxcblx0XHRgZWUtclRhYmxlLSR7IHJvd1R5cGUgfS1yb3dgLFxuXHRcdGByb3ctJHsgcm93TnVtYmVyIH1gLFxuXHRcdGNsYXNzZXNbIHJvd1R5cGUgXSxcblx0KTtcblx0cmV0dXJuIChcblx0XHQ8dHIgaWQ9eyBodG1sSWQgfSBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfSB7IC4uLmV4dHJhUHJvcHMgfSA+XG5cdFx0XHR7IGNoaWxkcmVuIH1cblx0XHQ8L3RyPlxuXHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3c7XG4iLCIvKipcbiAqIEBwYXJhbSB7QXJyYXl9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFibGVJZFxuICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBjYXB0aW9uSURcbiAqIEBwYXJhbSB7c3RyaW5nfSBjYXB0aW9uVGV4dFxuICogQHBhcmFtIHtPYmplY3R9IGV4dHJhUHJvcHNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgdGhlYWRcblxuICovXG5jb25zdCBUYWJsZSA9ICgge1xuXHRjaGlsZHJlbixcblx0dGFibGVJZCxcblx0dGFibGVDbGFzcyxcblx0Y2FwdGlvbklELFxuXHRjYXB0aW9uVGV4dCxcblx0Li4uZXh0cmFQcm9wcyxcbn0gKSA9PiB7XG5cdHRhYmxlQ2xhc3MgPSB0YWJsZUNsYXNzID9cblx0XHRgJHsgdGFibGVDbGFzcyB9IGVlLXJUYWJsZWAgOlxuXHRcdCdlZS1yVGFibGUnO1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdHJvbGU9eyAncmVnaW9uJyB9XG5cdFx0XHRhcmlhLWxhYmVsbGVkYnk9eyBjYXB0aW9uSUQgfVxuXHRcdFx0dGFiSW5kZXg9XCIwXCJcblx0XHQ+XG5cdFx0XHQ8dGFibGUgaWQ9eyB0YWJsZUlkIH0gY2xhc3NOYW1lPXsgdGFibGVDbGFzcyB9IHsgLi4uZXh0cmFQcm9wcyB9PlxuXHRcdFx0XHQ8Y2FwdGlvblxuXHRcdFx0XHRcdGlkPXsgY2FwdGlvbklEIH1cblx0XHRcdFx0XHRjbGFzc05hbWU9eyAnc2NyZWVuLXJlYWRlci10ZXh0JyB9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7IGNhcHRpb25UZXh0IH1cblx0XHRcdFx0PC9jYXB0aW9uPlxuXHRcdFx0XHR7IGNoaWxkcmVuIH1cblx0XHRcdDwvdGFibGU+XG5cdFx0PC9kaXY+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZTtcbiIsIi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBmYWxzZSBvbiBmYWlsXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Zsb2F0ID0gKCB2YWx1ZSApID0+IHtcblx0Y29uc3QgcmVnZXgxID0gL14oWy0rXSk/KFswLTldKyhcXC5bMC05XSspP3xJbmZpbml0eSkkLztcblx0cmV0dXJuIHJlZ2V4MS50ZXN0KCArdmFsdWUgKSAmJlxuXHRcdHBhcnNlRmxvYXQoIHZhbHVlICkgPT09IHZhbHVlICYmXG5cdFx0TnVtYmVyKCB2YWx1ZSApID09PSB2YWx1ZSAmJlxuXHRcdHZhbHVlICUgMSAhPT0gMDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBmYWxzZSBvbiBmYWlsXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ludGVnZXIgPSAoIHZhbHVlICkgPT4ge1xuXHRyZXR1cm4gcGFyc2VJbnQoIHZhbHVlLCAxMCApID09PSB2YWx1ZSAmJlxuXHRcdE51bWJlciggdmFsdWUgKSA9PT0gdmFsdWUgJiZcblx0XHR2YWx1ZSAlIDEgPT09IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtib29sZWFufSBudWxsSXNJbmZpbml0eVxuICogQHJldHVybiB7Ym9vbGVhbn0gZmFsc2Ugb24gZmFpbFxuICovXG5leHBvcnQgY29uc3QgaXNJbmZpbml0ZSA9ICggdmFsdWUsIG51bGxJc0luZmluaXR5ID0gdHJ1ZSApID0+IHtcblx0cmV0dXJuIHZhbHVlID09PSAnSU5GJyB8fCB2YWx1ZSA9PT0gSW5maW5pdHkgfHxcblx0XHQoIG51bGxJc0luZmluaXR5ICYmIHZhbHVlID09PSBudWxsICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gZmFsc2Ugb24gZmFpbFxuICovXG5leHBvcnQgY29uc3QgaXNOdW1lcmljID0gKCB2YWx1ZSApID0+IHtcblx0cmV0dXJuICEgKCB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgJiZcblx0XHQhIGlzTmFOKCBwYXJzZUZsb2F0KCB2YWx1ZSApICkgJiZcblx0XHRpc0Zpbml0ZSggdmFsdWUgKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IG1heFxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4XG4gKi9cbmV4cG9ydCBjb25zdCBmbG9hdExlc3NUaGFuT3JFcXVhbFRvID0gKCBtYXgsIHZhbHVlICkgPT4ge1xuXHRyZXR1cm4gcGFyc2VGbG9hdCggdmFsdWUgKSA8PSBwYXJzZUZsb2F0KCBtYXggKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IG1heFxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4XG4gKi9cbmV4cG9ydCBjb25zdCBzdHJpbmdMZW5ndGhMZXNzVGhhbk9yRXF1YWxUbyA9ICggbWF4ID0gMTAyNCwgdmFsdWUgKSA9PiB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdHZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnIHx8XG5cdFx0KCB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICd1bmRlZmluZWQnICkgfHxcblx0XHQvLyBhbGwgb2YgYWJvdmUgZXF1YWwgdG86IHplcm8gb3Igbm8gbGVuZ3RoIDw9IG1heCBsZW5ndGhcblx0XHQoIHR5cGVvZiB2YWx1ZS5sZW5ndGggIT09ICd1bmRlZmluZWQnICYmXG5cdFx0XHRwYXJzZUludCggdmFsdWUubGVuZ3RoLCAxMCApIDw9IHBhcnNlSW50KCBtYXgsIDEwIClcblx0XHQpO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gbWF4XG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBtYXhcbiAqL1xuZXhwb3J0IGNvbnN0IG51bWJlckxlc3NUaGFuT3JFcXVhbFRvID0gKCBtYXgsIHZhbHVlICkgPT4ge1xuXHRyZXR1cm4gcGFyc2VJbnQoIHZhbHVlLCAxMCApIDw9IHBhcnNlSW50KCBtYXgsIDEwICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBtaW5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1pblxuICovXG5leHBvcnQgY29uc3QgZmxvYXRHcmVhdGVyVGhhbk9yRXF1YWxUbyA9ICggbWluLCB2YWx1ZSApID0+IHtcblx0cmV0dXJuIHBhcnNlRmxvYXQoIHZhbHVlICkgPj0gcGFyc2VGbG9hdCggbWluICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBtaW5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1pblxuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nTGVuZ3RoR3JlYXRlclRoYW5PckVxdWFsVG8gPSAoIG1pbiwgdmFsdWUgKSA9PiB7XG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdHZhbHVlICE9PSB1bmRlZmluZWQgJiZcblx0XHR0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmXG5cdFx0dHlwZW9mIHZhbHVlLmxlbmd0aCAhPT0gJ3VuZGVmaW5lZCcgJiZcblx0XHRwYXJzZUludCggdmFsdWUubGVuZ3RoLCAxMCApID49IHBhcnNlSW50KCBtaW4sIDEwICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBtaW5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1pblxuICovXG5leHBvcnQgY29uc3QgbnVtYmVyR3JlYXRlclRoYW5PckVxdWFsVG8gPSAoIG1pbiwgdmFsdWUgKSA9PiB7XG5cdHJldHVybiBwYXJzZUludCggdmFsdWUsIDEwICkgPj0gcGFyc2VJbnQoIG1pbiwgMTAgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgRXhjZXB0aW9uIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5pbXBvcnQgeyBzcHJpbnRmLCBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNFbXB0eSwgaXNNYXAgfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgZ2l2ZW4ga2V5IGV4aXN0cyBpbiB0aGUgcHJvdmlkZWQgZW50aXR5IG9iamVjdC5cbiAqIFRoaXMgaXMgdXNlZCB3aGVuIGNhbGxpbmcgY29kZSB3YW50cyBhbiBleGNlcHRpb24gdG8gYmUgdGhyb3duLlxuICpcbiAqIEBwYXJhbSB7IHN0cmluZyB9IGtleVxuICogQHBhcmFtIHsgT2JqZWN0IH0gZW50aXR5XG4gKiBAcGFyYW0geyBzdHJpbmcgfSBtZXNzYWdlXG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH0gIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHByb3ZpZGVkIGVudGl0eSBkb2VzIG5vdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgdGhlIGdpdmVuIGtleS5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydEVudGl0eUhhc0tleSA9ICgga2V5LCBlbnRpdHksIG1lc3NhZ2UgPSAnJyApID0+IHtcblx0aWYgKCBtZXNzYWdlID09PSAnJyApIHtcblx0XHRtZXNzYWdlID0gc3ByaW50Zihcblx0XHRcdF9fKFxuXHRcdFx0XHQnVGhlIHByb3ZpZGVkIGVudGl0eSAoJXMpIGRvZXMgbm90IGhhdmUgdGhlIGdpdmVuIHByb3BlcnR5ICglcyknLFxuXHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0KSxcblx0XHRcdGVudGl0eSxcblx0XHRcdGtleSxcblx0XHQpO1xuXHR9XG5cdGlmICggISBlbnRpdHkuaGFzT3duUHJvcGVydHkoIGtleSApICkge1xuXHRcdHRocm93IG5ldyBFeGNlcHRpb24oIG1lc3NhZ2UgKTtcblx0fVxufTtcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIGdpdmVuIHBhdGggaW4gdGhlIHByb3ZpZGVkIGltbXV0YWJsZSBvYmplY3QgZXhpc3RzLlxuICogVGhpcyBpcyB1c2VkIHdoZW4gY2FsbGluZyBjb2RlIHdhbnRzIGFuIGV4Y2VwdGlvbiB0byBiZSB0aHJvd24gaWYgdGhlIGdpdmVuXG4gKiBzZWFyY2ggcGF0aCBhcnJheSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW1tdXRhYmxlIG9iamVjdC5cbiAqXG4gKiBJZiB0aGUgaW1tdXRhYmxlIG9iamVjdCBpcyBzZXR1cCBsaWtlIHRoaXM6XG4gKlxuICogaW1tdXRhYmxlID0gSW1tdXRhYmxlLk1hcCgpLnNldCggJ2V2ZW50JywgSW1tdXRhYmxlLk1hcCgpLnNldCggMTAsIEV2ZW50ICkgKTtcbiAqXG4gKiBUaGVuIGEgdmFsaWQgc2VhcmNoYWJsZSBwYXRoIGNvdWxkIGJlIGBbICdldmVudCcsIDEwIF1gLiAgQW4gaW52YWxpZCBwYXRoXG4gKiB3b3VsZCBiZSBgWyAnZGF0ZXRpbWUnLCAxMCBdYFxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggIFNlYXJjaGFibGUgcGF0aCBmb3IgdGhlIGltbXV0YWJsZSBvamJlY3QgdG8gdmVyaWZ5LlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfEltbXV0YWJsZS5TZXR9IGltbXV0YWJsZSAgQW4gaW1tdXRhYmxlIG9iamVjdCAoTWFwLCBTZXQsIExpc3QgZXRjKVxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgQSBjdXN0b20gbWVzc2FnZSB0byB1c2UuXG4gKiBAdGhyb3dzIEV4Y2VwdGlvblxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0SW1tdXRhYmxlT2JqZWN0SGFzUGF0aCA9IChcblx0cGF0aCxcblx0aW1tdXRhYmxlLFxuXHRtZXNzYWdlID0gJydcbikgPT4ge1xuXHRpZiAoIG1lc3NhZ2UgPT09ICcnICkge1xuXHRcdG1lc3NhZ2UgPSBzcHJpbnRmKFxuXHRcdFx0X18oXG5cdFx0XHRcdCdUaGUgcHJvdmlkZWQgaW1tdXRhYmxlIG9iamVjdCAoJXMpIGRvZXMgbm90IGhhdmUgdGhlIGdpdmVuIHBhdGggKCVzKScsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHQpLFxuXHRcdFx0aW1tdXRhYmxlLFxuXHRcdFx0cGF0aCxcblx0XHQpO1xuXHR9XG5cdGlmICggISBpbW11dGFibGUuaGFzSW4oIHBhdGggKSApIHtcblx0XHR0aHJvdyBuZXcgRXhjZXB0aW9uKCBtZXNzYWdlICk7XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0geyp9IGl0ZW1zXG4gKiBAcGFyYW0geyBzdHJpbmcgfSAgbWVzc2FnZVxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9IFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LlxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0SXNBcnJheSA9ICggaXRlbXMsIG1lc3NhZ2UgPSAnJyApID0+IHtcblx0aWYgKCBtZXNzYWdlID09PSAnJyApIHtcblx0XHRtZXNzYWdlID0gX18oICdUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IGFuIGFycmF5LicsICdldmVudF9lc3ByZXNzbycgKTtcblx0fVxuXHRpZiAoICEgaXNBcnJheSggaXRlbXMgKSApIHtcblx0XHR0aHJvdyBuZXcgRXhjZXB0aW9uKCBtZXNzYWdlICk7XG5cdH1cbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGVtcHR5IG9yIG5vdC5cbiAqXG4gKiBDYWxsIHRoaXMgdmFsaWRhdG9yIHdoZW4geW91IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSB2YWx1ZSBpcyBOT1QgZW1wdHkuXG4gKlxuICogQHBhcmFtIHsqfSBpdGVtc1xuICogQHBhcmFtIHsgc3RyaW5nIH0gbWVzc2FnZVxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9IFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGVtcHR5LlxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0SXNOb3RFbXB0eSA9ICggaXRlbXMsIG1lc3NhZ2UgPSAnJyApID0+IHtcblx0aWYgKCBtZXNzYWdlID09PSAnJyApIHtcblx0XHRtZXNzYWdlID0gX18oXG5cdFx0XHQnVGhlIHByb3ZpZGVkIGl0ZW1zIG11c3Qgbm90IGJlIGVtcHR5Jyxcblx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0KTtcblx0fVxuXHRpZiAoIGlzRW1wdHkoIGl0ZW1zICkgKSB7XG5cdFx0dGhyb3cgbmV3IEV4Y2VwdGlvbiggbWVzc2FnZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBNYXAgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7Kn0gaXRlbVxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfVxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0SXNNYXAgPSAoIGl0ZW0sIG1lc3NhZ2UgPSAnJyApID0+IHtcblx0aWYgKCBtZXNzYWdlID09PSAnJyApIHtcblx0XHRtZXNzYWdlID0gX18oXG5cdFx0XHQnVGhlIHByb3ZpZGVkIGl0ZW0gbXVzdCBiZSBhIE1hcCBvYmplY3QnLFxuXHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdCk7XG5cdH1cblx0aWYgKCAhIGlzTWFwKCBpdGVtICkgKSB7XG5cdFx0dGhyb3cgbmV3IEV4Y2VwdGlvbiggbWVzc2FnZSApO1xuXHR9XG59O1xuIiwiZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAnYXR0ZW5kZWUnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9BU0MsXG5cdEFMTE9XRURfT1JERVJfVkFMVUVTLFxufSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCB7IFJFR0lTVFJBVElPTl9TVEFUVVNfSURTIH0gZnJvbSAnLi4vcmVnaXN0cmF0aW9uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRpZDogJ0FUVF9JRCcsXG5cdGxhc3ROYW1lT25seTogJ0FUVF9sbmFtZScsXG5cdGZpcnN0TmFtZU9ubHk6ICdBVFRfZm5hbWUnLFxuXHRmaXJzdFRoZW5MYXN0TmFtZTogWyAnQVRUX2ZuYW1lJywgJ0FUVF9sbmFtZScgXSxcblx0bGFzdFRoZW5GaXJzdE5hbWU6IFsgJ0FUVF9sbmFtZScsICdBVFRfZm5hbWUnIF0sXG59O1xuXG4vKipcbiAqIERlc2NyaWJlZCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7e2F0dHJpYnV0ZXM6ICp9fVxuICovXG5leHBvcnQgY29uc3QgcXVlcnlEYXRhVHlwZXMgPSB7XG5cdGZvckV2ZW50SWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvckRhdGV0aW1lSWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclRpY2tldElkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JTdGF0dXNJZDogUHJvcFR5cGVzLm9uZU9mKCBSRUdJU1RSQVRJT05fU1RBVFVTX0lEUyApLFxuXHRmb3JSZWdpc3RyYXRpb25JZDogUHJvcFR5cGVzLm51bWJlcixcblx0c2hvd0dyYXZhdGFyOiBQcm9wVHlwZXMuYm9vbCxcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIE9iamVjdC5rZXlzKCBvcmRlckJ5TWFwICkgKSxcblx0XHRvcmRlcjogUHJvcFR5cGVzLm9uZU9mKCBBTExPV0VEX09SREVSX1ZBTFVFUyApLFxuXHR9ICksXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdsYXN0VGhlbkZpcnN0TmFtZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0FTQyxcblx0fSxcbn07XG5cbi8qKlxuICogVXNlZCB0byBtYXAgYW4gb3JkZXJCeSBzdHJpbmcgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkXG4gKiBpbiBhIFJFU1QgcXVlcnkgZnJvbSB0aGUgY29udGV4dCBvZiBhIGF0dGVuZGVlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBcdFx0b3JkZXJCeVxuICogQHJldHVybiB7IHN0cmluZyB9IFx0UmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmdcbiAqIFx0XHRcdFx0XHRcdGZvciB0aGUgUkVTVCBxdWVyeSBmb3IgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiBhdHRlbmRlZXMgZW5kcG9pbnQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JFdmVudElkICAgIFx0SUQgb2YgRXZlbnQgdG8gcmV0cmlldmUgYXR0ZW5kZWVzIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvckRhdGV0aW1lSWQgXHRJRCBvZiBEYXRldGltZSB0byByZXRyaWV2ZSBhdHRlbmRlZXMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yVGlja2V0SWQgXHRcdElEIG9mIFRpY2tldCB0byByZXRyaWV2ZSBhdHRlbmRlZXMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yUmVnaXN0cmF0aW9uSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JTdGF0dXNJZCBcdFx0SUQgb2YgU3RhdHVzIHRvIHJldHJpZXZlIGF0dGVuZGVlcyBmb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBzaG93R3JhdmF0YXIgXHRCb29sZWFuIHRvZ2dsZSBmb3Igd2hldGhlciB0byBkaXNwbGF5IHVzZXIgR3JhdmF0YXJcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAgXHRUaGUgYXNzZW1ibGVkIHdoZXJlIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCB3aGVyZUNvbmRpdGlvbnMgPSAoIHtcblx0Zm9yRXZlbnRJZCA9IDAsXG5cdGZvckRhdGV0aW1lSWQgPSAwLFxuXHRmb3JUaWNrZXRJZCA9IDAsXG5cdGZvclJlZ2lzdHJhdGlvbklkID0gMCxcblx0Zm9yU3RhdHVzSWQgPSAnUkFQJyxcblx0c2hvd0dyYXZhdGFyID0gZmFsc2UsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXG5cdC8vIGVuc3VyZSB0aGF0IGVudGl0eSBJRHMgYXJlIGludGVnZXJzXG5cdGZvclJlZ2lzdHJhdGlvbklkID0gcGFyc2VJbnQoIGZvclJlZ2lzdHJhdGlvbklkLCAxMCApO1xuXHRmb3JUaWNrZXRJZCA9IHBhcnNlSW50KCBmb3JUaWNrZXRJZCwgMTAgKTtcblx0Zm9yRGF0ZXRpbWVJZCA9IHBhcnNlSW50KCBmb3JEYXRldGltZUlkLCAxMCApO1xuXHRmb3JFdmVudElkID0gcGFyc2VJbnQoIGZvckV2ZW50SWQsIDEwICk7XG5cblx0Ly8gb3JkZXIgb2YgcHJpb3JpdHkgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cblx0aWYgKCBmb3JSZWdpc3RyYXRpb25JZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JSZWdpc3RyYXRpb25JZCApICkge1xuXHRcdHdoZXJlLnB1c2goIGB3aGVyZVtSZWdpc3RyYXRpb24uUkVHX0lEXT0keyBmb3JSZWdpc3RyYXRpb25JZCB9YCApO1xuXHR9IGVsc2UgaWYgKCBmb3JUaWNrZXRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JUaWNrZXRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goIGB3aGVyZVtSZWdpc3RyYXRpb24uVGlja2V0LlRLVF9JRF09JHsgZm9yVGlja2V0SWQgfWAgKTtcblx0fSBlbHNlIGlmICggZm9yRGF0ZXRpbWVJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JEYXRldGltZUlkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggYHdoZXJlW1JlZ2lzdHJhdGlvbi5UaWNrZXQuRGF0ZXRpbWUuRFRUX0lEXT0keyBmb3JEYXRldGltZUlkIH1gICk7XG5cdH0gZWxzZSBpZiAoIGZvckV2ZW50SWQgIT09IDAgJiYgISBpc05hTiggZm9yRXZlbnRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goIGB3aGVyZVtSZWdpc3RyYXRpb24uRVZUX0lEXT0keyBmb3JFdmVudElkIH1gICk7XG5cdH1cblxuXHRpZiAoIFJFR0lTVFJBVElPTl9TVEFUVVNfSURTLmluY2x1ZGVzKCBmb3JTdGF0dXNJZCApICkge1xuXHRcdHdoZXJlLnB1c2goIGB3aGVyZVtSZWdpc3RyYXRpb24uU3RhdHVzLlNUU19JRF09JHsgZm9yU3RhdHVzSWQgfWAgKTtcblx0fVxuXHRpZiAoIHNob3dHcmF2YXRhciA9PT0gdHJ1ZSApIHtcblx0XHR3aGVyZS5wdXNoKCAnY2FsY3VsYXRlPXVzZXJfYXZhdGFyJyApO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAqIGFzIGRhdGVGb3JtYXRzIGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGF0ZSBmaWVsZHMgb24gcHJvdmlkZWQgZW50aXRpZXMuICBEb2VzIG5vdCBtdXRhdGUgb3JpZ2luYWxcbiAqIGVudGl0aWVzLlxuICpcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXRpZXMgIEFuIGFycmF5IG9mIGVudGl0eSBvYmplY3RzXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHBhcmFtIHsgc3RyaW5nIH0gZm9ybWF0ICBUaGUgZm9ybWF0IHRvIHRyYW5zZm9ybSB0aGUgZGF0ZSBmaWVsZCB2YWx1ZXMgdG8uXG4gKiBAcGFyYW0geyBib29sZWFuIH0gbG9jYWwgICAgICBXaGV0aGVyIG9yIG5vdCB0byBjb252ZXJ0IHRoZSBkYXRlIGZpZWxkIHZhbHVlXG4gKiAgIHRvIHRoZSBsb2NhbCB0aW1lem9uZSBmb3IgdGhlIGhvc3QuXG4gKiBAcmV0dXJuIHsgQXJyYXkgfSAgUmV0dXJucyBhIG5ldyBhcnJheSBvZiBuZXcgZW50aXRpZXMgd2l0aCB0aGUgZGF0ZSBmaWVsZFxuICogICB2YWx1ZXMgZm9ybWF0dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXREYXRlc09uRW50aXRpZXMgPSAoXG5cdGVudGl0aWVzID0gW10sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcblx0Zm9ybWF0ID0gZGF0ZUZvcm1hdHMuREFURV9USU1FX0ZPUk1BVF9JU084NjAxLFxuXHRsb2NhbCA9IHRydWUsXG4pID0+IHtcblx0aWYgKCBpc0VtcHR5KCBlbnRpdGllcyApIHx8IGlzRW1wdHkoIGVudGl0eURhdGVGaWVsZHMgKSApIHtcblx0XHRyZXR1cm4gZW50aXRpZXM7XG5cdH1cblx0Y29uc3QgZm9ybWF0dGVkRW50aXRpZXMgPSBbXTtcblx0ZW50aXRpZXMuZm9yRWFjaCggKCBlbnRpdHkgKSA9PiB7XG5cdFx0Zm9ybWF0dGVkRW50aXRpZXMucHVzaCggZm9ybWF0RGF0ZXNPbkVudGl0eShcblx0XHRcdGVudGl0eSxcblx0XHRcdGVudGl0eURhdGVGaWVsZHMsXG5cdFx0XHRmb3JtYXQsXG5cdFx0XHRsb2NhbCxcblx0XHQpICk7XG5cdH0gKTtcblx0cmV0dXJuIGZvcm1hdHRlZEVudGl0aWVzO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBkYXRlIGZpZWxkcyBvbiB0aGUgcHJvdmlkZWQgZW50aXR5LiAgRG9lcyBub3QgbXV0YXRlIG9yaWdpbmFsXG4gKiBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHsgT2JqZWN0IH0gZW50aXR5ICBBbiBlbnRpdHlcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyAgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcGFyYW0geyBzdHJpbmcgfSBmb3JtYXQgIFRoZSBmb3JtYXQgdG8gdHJhbnNmb3JtIHRoZSBkYXRlIGZpZWxkIHZhbHVlcyB0by5cbiAqIEBwYXJhbSB7IGJvb2xlYW4gfSBsb2NhbCAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbnZlcnQgdGhlIGRhdGUgZmllbGQgdmFsdWVcbiAqICAgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGZvciB0aGUgaG9zdC5cbiAqIEByZXR1cm4geyBPYmplY3QgfSAgUmV0dXJucyBhIG5ldyBlbnRpdHkgd2l0aCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZXMgZm9ybWF0dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXREYXRlc09uRW50aXR5ID0gKFxuXHRlbnRpdHkgPSB7fSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuXHRmb3JtYXQgPSBkYXRlRm9ybWF0cy5EQVRFX1RJTUVfRk9STUFUX0lTTzg2MDEsXG5cdGxvY2FsID0gdHJ1ZSxcbikgPT4ge1xuXHRjb25zdCBuZXdFbnRpdHkgPSB7IC4uLmVudGl0eSB9O1xuXHRlbnRpdHlEYXRlRmllbGRzLmZvckVhY2goICggZGF0ZUZpZWxkICkgPT4ge1xuXHRcdGlmICggbmV3RW50aXR5WyBkYXRlRmllbGQgXSApIHtcblx0XHRcdG5ld0VudGl0eVsgZGF0ZUZpZWxkIF0gPSBkYXRlRm9ybWF0cy5mb3JtYXREYXRlU3RyaW5nKFxuXHRcdFx0XHRuZXdFbnRpdHlbIGRhdGVGaWVsZCBdLFxuXHRcdFx0XHRmb3JtYXQsXG5cdFx0XHRcdGxvY2FsLFxuXHRcdFx0KTtcblx0XHR9XG5cdH0gKTtcblx0cmV0dXJuIG5ld0VudGl0eTtcbn07XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGF0ZSBmaWVsZHMgdG8gbXlzcWwgZm9ybWF0IG9uIHByb3ZpZGVkIGVudGl0aWVzLiAgRG9lcyBub3RcbiAqIG11dGF0ZSBvcmlnaW5hbCBlbnRpdGllcy5cbiAqXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0aWVzICBBbiBhcnJheSBvZiBlbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzICBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEBwYXJhbSB7IGJvb2xlYW4gfSBsb2NhbCAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbnZlcnQgdGhlIGRhdGUgZmllbGQgdmFsdWVcbiAqICAgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGZvciB0aGUgaG9zdC5cbiAqIEByZXR1cm4geyBBcnJheSB9ICBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIG5ldyBlbnRpdGllcyB3aXRoIHRoZSBkYXRlIGZpZWxkXG4gKiAgIHZhbHVlcyBmb3JtYXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdEVudGl0aWVzRGF0ZXNUb015c3FsID0gKFxuXHRlbnRpdGllcyA9IFtdLFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG5cdGxvY2FsID0gdHJ1ZSxcbikgPT4ge1xuXHRyZXR1cm4gZm9ybWF0RGF0ZXNPbkVudGl0aWVzKFxuXHRcdGVudGl0aWVzLFxuXHRcdGVudGl0eURhdGVGaWVsZHMsXG5cdFx0ZGF0ZUZvcm1hdHMuREFURV9USU1FX0ZPUk1BVF9NWVNRTCxcblx0XHRsb2NhbCxcblx0KTtcbn07XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGF0ZSBmaWVsZHMgdG8gbXlzcWwgZm9ybWF0IG9uIHByb3ZpZGVkIGVudGl0eS4gIERvZXMgbm90XG4gKiBtdXRhdGUgb3JpZ2luYWwgZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7IE9iamVjdCB9IGVudGl0eSAgQW4gYXJyYXkgb2YgZW50aXR5IG9iamVjdHNcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyAgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcGFyYW0geyBib29sZWFuIH0gbG9jYWwgICAgICBXaGV0aGVyIG9yIG5vdCB0byBjb252ZXJ0IHRoZSBkYXRlIGZpZWxkIHZhbHVlXG4gKiAgIHRvIHRoZSBsb2NhbCB0aW1lem9uZSBmb3IgdGhlIGhvc3QuXG4gKiBAcmV0dXJuIHsgT2JqZWN0IH0gIFJldHVybnMgYSBuZXcgZW50aXR5IHdpdGggdGhlIGRhdGUgZmllbGQgdmFsdWVzIGZvcm1hdHRlZFxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RW50aXR5RGF0ZXNUb015c3FsID0gKFxuXHRlbnRpdHkgPSB7fSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuXHRsb2NhbCA9IHRydWUsXG4pID0+IHtcblx0cmV0dXJuIGZvcm1hdERhdGVzT25FbnRpdHkoXG5cdFx0ZW50aXR5LFxuXHRcdGVudGl0eURhdGVGaWVsZHMsXG5cdFx0ZGF0ZUZvcm1hdHMuREFURV9USU1FX0ZPUk1BVF9NWVNRTCxcblx0XHRsb2NhbCxcblx0KTtcbn07XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGF0ZSBmaWVsZHMgdG8gdGhlIHNpdGUgZm9ybWF0IG9uIHByb3ZpZGVkIGVudGl0aWVzLiAgRG9lcyBub3RcbiAqIG11dGF0ZSBvcmlnaW5hbCBlbnRpdGllcy5cbiAqXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0aWVzICBBbiBhcnJheSBvZiBlbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzICBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEBwYXJhbSB7IGJvb2xlYW4gfSBsb2NhbCAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbnZlcnQgdGhlIGRhdGUgZmllbGQgdmFsdWVcbiAqICAgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGZvciB0aGUgaG9zdC5cbiAqIEByZXR1cm4geyBBcnJheSB9ICBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIG5ldyBlbnRpdGllcyB3aXRoIHRoZSBkYXRlIGZpZWxkXG4gKiAgIHZhbHVlcyBmb3JtYXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdEVudGl0aWVzRGF0ZXNUb1NpdGUgPSAoXG5cdGVudGl0aWVzID0gW10sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcblx0bG9jYWwgPSB0cnVlLFxuKSA9PiB7XG5cdHJldHVybiBmb3JtYXREYXRlc09uRW50aXRpZXMoXG5cdFx0ZW50aXRpZXMsXG5cdFx0ZW50aXR5RGF0ZUZpZWxkcyxcblx0XHRkYXRlRm9ybWF0cy5EQVRFX1RJTUVfRk9STUFUX1NJVEUsXG5cdFx0bG9jYWwsXG5cdCk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGRhdGUgZmllbGRzIHRvIHRoZSBzaXRlIGZvcm1hdCBvbiBwcm92aWRlZCBlbnRpdHkuICBEb2VzIG5vdFxuICogbXV0YXRlIG9yaWdpbmFsIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0geyBPYmplY3QgfSBlbnRpdHkgIEFuIGFycmF5IG9mIGVudGl0eSBvYmplY3RzXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHBhcmFtIHsgYm9vbGVhbiB9IGxvY2FsICAgICAgV2hldGhlciBvciBub3QgdG8gY29udmVydCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZVxuICogICB0byB0aGUgbG9jYWwgdGltZXpvbmUgZm9yIHRoZSBob3N0LlxuICogQHJldHVybiB7IE9iamVjdCB9ICBSZXR1cm5zIGEgbmV3IGVudGl0eSB3aXRoIHRoZSBkYXRlIGZpZWxkIHZhbHVlcyBmb3JtYXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdEVudGl0eURhdGVzVG9TaXRlID0gKFxuXHRlbnRpdHkgPSB7fSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuXHRsb2NhbCA9IHRydWUsXG4pID0+IHtcblx0cmV0dXJuIGZvcm1hdERhdGVzT25FbnRpdHkoXG5cdFx0ZW50aXR5LFxuXHRcdGVudGl0eURhdGVGaWVsZHMsXG5cdFx0ZGF0ZUZvcm1hdHMuREFURV9USU1FX0ZPUk1BVF9TSVRFLFxuXHRcdGxvY2FsLFxuXHQpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBkYXRlIGZpZWxkIHZhbHVlcyB0byBtb21lbnQgb2JqZWN0cyBmb3IgdGhlIHByb3ZpZGVkIGVudGl0aWVzLlxuICogRG9lcyBub3QgbXV0YXRlIG9yaWdpbmFsIGVudGl0aWVzLlxuICpcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXRpZXMgQW4gYXJyYXkgb2YgZW50aXR5IG9iamVjdHNcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEByZXR1cm4geyBBcnJheSB9IFJldHVybnMgYSBuZXcgYXJyYXkgb2YgbmV3IGVudGl0aWVzIHdpdGggdGhlIGRhdGUgZmllbGRcbiAqICAgdmFsdWVzIGNvbnZlcnRlZCB0byBtb21lbnQgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRFbnRpdGllc0RhdGVzVG9Nb21lbnQgPSAoXG5cdGVudGl0aWVzID0gW10sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcbikgPT4ge1xuXHRpZiAoIGlzRW1wdHkoIGVudGl0aWVzICkgfHwgaXNFbXB0eSggZW50aXR5RGF0ZUZpZWxkcyApICkge1xuXHRcdHJldHVybiBlbnRpdGllcztcblx0fVxuXHRjb25zdCBmb3JtYXR0ZWRFbnRpdGllcyA9IFtdO1xuXHRlbnRpdGllcy5mb3JFYWNoKCAoIGVudGl0eSApID0+IHtcblx0XHRmb3JtYXR0ZWRFbnRpdGllcy5wdXNoKCBjb252ZXJ0RW50aXR5RGF0ZXNUb01vbWVudChcblx0XHRcdGVudGl0eSxcblx0XHRcdGVudGl0eURhdGVGaWVsZHMsXG5cdFx0KSApO1xuXHR9ICk7XG5cdHJldHVybiBmb3JtYXR0ZWRFbnRpdGllcztcbn07XG5cbi8qKlxuICogQ29udmVydHMgZGF0ZSBmaWVsZCB2YWx1ZXMgdG8gbW9tZW50IG9iamVjdHMgZm9yIHRoZSBwcm92aWRlZCBlbnRpdHkuXG4gKiBEb2VzIG5vdCBtdXRhdGUgb3JpZ2luYWwgZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7IE9iamVjdCB9IGVudGl0eSBBbiBlbnRpdHkuXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcmV0dXJuIHsgT2JqZWN0IH0gUmV0dXJucyBhIG5ldyBlbnRpdHkgd2l0aCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZXMgY29udmVydGVkXG4gKiAgIHRvIG1vbWVudCBvYmplY3RzLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydEVudGl0eURhdGVzVG9Nb21lbnQgPSAoXG5cdGVudGl0eSA9IHt9LFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG4pID0+IHtcblx0Y29uc3QgbmV3RW50aXR5ID0geyAuLi5lbnRpdHkgfTtcblx0ZW50aXR5RGF0ZUZpZWxkcy5mb3JFYWNoKCAoIGRhdGVGaWVsZCApID0+IHtcblx0XHRpZiAoIG5ld0VudGl0eVsgZGF0ZUZpZWxkIF0gKSB7XG5cdFx0XHRuZXdFbnRpdHlbIGRhdGVGaWVsZCBdID0gZGF0ZUZvcm1hdHMuc3RyaW5nVG9Nb21lbnQoXG5cdFx0XHRcdG5ld0VudGl0eVsgZGF0ZUZpZWxkIF0sXG5cdFx0XHQpO1xuXHRcdH1cblx0fSApO1xuXHRyZXR1cm4gbmV3RW50aXR5O1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0FycmF5LCBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBRVUVSWV9PUkRFUl9BU0MgPSAnQVNDJztcbmV4cG9ydCBjb25zdCBRVUVSWV9PUkRFUl9ERVNDID0gJ0RFU0MnO1xuZXhwb3J0IGNvbnN0IEFMTE9XRURfT1JERVJfVkFMVUVTID0gWyAnYXNjJywgJ2Rlc2MnLCAnQVNDJywgJ0RFU0MnIF07XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOID0gZW5jb2RlVVJJQ29tcG9uZW50KCAnPicgKTtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU4gPSBlbmNvZGVVUklDb21wb25lbnQoICc8JyApO1xuZXhwb3J0IGNvbnN0IEdSRUFURVJfVEhBTl9BTkRfRVFVQUwgPSBlbmNvZGVVUklDb21wb25lbnQoICc+PScgKTtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU5fQU5EX0VRVUFMID0gZW5jb2RlVVJJQ29tcG9uZW50KCAnPD0nICk7XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcGFyYW0geyBmdW5jdGlvbiB9IHdoZXJlQ29uZGl0aW9ucyAgQSBmdW5jdGlvbiBmb3IgcHJlcHBpbmcgdGhlIHdoZXJlXG4gKiBcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmRpdGlvbnMgZnJvbSB0aGUgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgZnVuY3Rpb24gfSBtYXBPcmRlckJ5XHRcdEEgZnVuY3Rpb24gZm9yIG1hcHBpbmcgaW5jb21pbmcgb3JkZXJfYnlcbiAqIFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaW5ncyB0byB0aGUgdmFsdWUgbmVlZGVkIGZvciB0aGVcbiAqIFx0XHRcdFx0XHRcdFx0XHRcdFx0cXVlcnlfc3RyaW5nLlxuICogQHJldHVybiB7IHN0cmluZyB9ICBcdFx0XHRcdFx0UmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoXG5cdHF1ZXJ5RGF0YSA9IHt9LFxuXHR3aGVyZUNvbmRpdGlvbnMgPSAoKSA9PiBudWxsLFxuXHRtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4gb3JkZXJCeSxcbikgPT4ge1xuXHRjb25zdCB3aGVyZSA9IHdoZXJlQ29uZGl0aW9ucyggcXVlcnlEYXRhICk7XG5cdGNvbnN0IHsgbGltaXQsIG9yZGVyLCBvcmRlckJ5LCBkZWZhdWx0V2hlcmVDb25kaXRpb25zIH0gPSBxdWVyeURhdGE7XG5cdGNvbnN0IHF1ZXJ5UGFyYW1zID0gW107XG5cdGlmICggISBpc1VuZGVmaW5lZCggbGltaXQgKSApIHtcblx0XHRxdWVyeVBhcmFtcy5wdXNoKCBgbGltaXQ9JHsgbGltaXQgfWAgKTtcblx0fVxuXHRpZiAoICEgaXNVbmRlZmluZWQoIGRlZmF1bHRXaGVyZUNvbmRpdGlvbnMgKSApIHtcblx0XHRxdWVyeVBhcmFtcy5wdXNoKFxuXHRcdFx0YGRlZmF1bHRfd2hlcmVfY29uZGl0aW9ucz0keyBkZWZhdWx0V2hlcmVDb25kaXRpb25zIH1gXG5cdFx0KTtcblx0fVxuXHRpZiAoICEgaXNVbmRlZmluZWQoIG1hcE9yZGVyQnkoIG9yZGVyQnkgKSApICkge1xuXHRcdGlmICggaXNBcnJheSggbWFwT3JkZXJCeSggb3JkZXJCeSApICkgKSB7XG5cdFx0XHRmb3IgKCBjb25zdCBmaWVsZCBvZiBtYXBPcmRlckJ5KCBvcmRlckJ5ICkgKSB7XG5cdFx0XHRcdHF1ZXJ5UGFyYW1zLnB1c2goIGBvcmRlcl9ieVskeyBmaWVsZCB9XT0keyBvcmRlciB9YCApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRxdWVyeVBhcmFtcy5wdXNoKCBgb3JkZXI9JHsgb3JkZXIgfWAgKTtcblx0XHRcdHF1ZXJ5UGFyYW1zLnB1c2goIGBvcmRlcl9ieT0keyBtYXBPcmRlckJ5KCBvcmRlckJ5ICkgfWAgKTtcblx0XHR9XG5cdH1cblx0bGV0IHF1ZXJ5U3RyaW5nID0gcXVlcnlQYXJhbXMuam9pbiggJyYnICk7XG5cdGlmICggd2hlcmUgKSB7XG5cdFx0cXVlcnlTdHJpbmcgKz0gJyYnICsgd2hlcmU7XG5cdH1cblx0cmV0dXJuIHF1ZXJ5U3RyaW5nO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgTU9ERUxfTkFNRSA9ICdjaGVja2luJztcblxuZXhwb3J0IGNvbnN0IENIRUNLSU5fU1RBVFVTX0lEID0ge1xuXHRTVEFUVVNfQ0hFQ0tFRF9PVVQ6IGZhbHNlLFxuXHRTVEFUVVNfQ0hFQ0tFRF9JTjogdHJ1ZSxcblx0U1RBVFVTX0NIRUNLRURfTkVWRVI6IDIsXG59O1xuXG5leHBvcnQgY29uc3QgQ0hFQ0tJTl9TVEFUVVNfSURTID0gdmFsdWVzKFxuXHRDSEVDS0lOX1NUQVRVU19JRFxuKTtcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnknO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBwcmV0dHlTdGF0dXMgfSBmcm9tICcuLi9zdGF0dXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcbn0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgKiBhcyBjaGVja2luU3RhdHVzIGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBEZXNjcmliZWQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge3thdHRyaWJ1dGVzOiAqfX1cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5RGF0YVR5cGVzID0ge1xuXHRmb3JEYXRldGltZUlkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JFdmVudElkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JSZWdpc3RyYXRpb25JZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yVGlja2V0SWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclN0YXR1c0lkOiBQcm9wVHlwZXMub25lT2YoIGNoZWNraW5TdGF0dXMuQ0hFQ0tJTl9TVEFUVVNfSURTICksXG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnQ0hLX0lEJyxcblx0XHRcdCdSRUdfSUQnLFxuXHRcdFx0J0NIS190aW1lc3RhbXAnLFxuXHRcdFx0J0RUVF9JRCcsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdH0gKSxcbn07XG5cbmV4cG9ydCBjb25zdCBvcHRpb25zRW50aXR5TWFwID0ge1xuXHRkZWZhdWx0OiAoKSA9PiB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0bGFiZWw6IHByZXR0eVN0YXR1cyhcblx0XHRcdFx0XHRjaGVja2luU3RhdHVzLkNIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX09VVFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR2YWx1ZTogY2hlY2tpblN0YXR1cy5DSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9PVVQsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRsYWJlbDogcHJldHR5U3RhdHVzKFxuXHRcdFx0XHRcdGNoZWNraW5TdGF0dXMuQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfSU5cblx0XHRcdFx0KSxcblx0XHRcdFx0dmFsdWU6IGNoZWNraW5TdGF0dXMuQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfSU4sXG5cdFx0XHR9LFxuXHRcdF07XG5cdH0sXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdDSEtfdGltZXN0YW1wJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfREVTQyxcblx0fSxcbn07XG5cbi8qKlxuICogVXNlZCB0byBtYXAgYW4gb3JkZXJCeSBzdHJpbmcgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkIGluIGEgUkVTVCBxdWVyeSBmcm9tXG4gKiB0aGUgY29udGV4dCBvZiBhIHJlZ2lzdHJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JkZXJCeVxuICpcbiAqIEByZXR1cm4geyBzdHJpbmcgfSBSZXR1cm5zIGFuIGFjdHVhbCBvcmRlckJ5IHN0cmluZyBmb3IgdGhlIFJFU1QgcXVlcnkgZm9yXG4gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvdmlkZWQgYWxpYXNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcE9yZGVyQnkgPSAoIG9yZGVyQnkgKSA9PiB7XG5cdGNvbnN0IG9yZGVyQnlNYXAgPSB7XG5cdFx0dGltZXN0YW1wOiAnQ0hLX3RpbWVzdGFtcCcsXG5cdFx0aWQ6ICdDSEtfSUQnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiByZWdpc3RyYXRpb25zIGVuZHBvaW50IHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRGF0ZXRpbWVJZCAgICBcdElEIG9mIEV2ZW50IHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRXZlbnRJZCAgICBJRCBvZiBBdHRlbmRlZSB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclJlZ2lzdHJhdGlvbklkIElEIG9mIFRyYW5zYWN0aW9uIHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yVGlja2V0SWQgXHRcdElEIG9mIFRpY2tldCB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtzdHJpbmd9IGZvclN0YXR1c0lkIFx0XHRJRCBvZiBTdGF0dXMgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAgXHRUaGUgYXNzZW1ibGVkIHdoZXJlIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCB3aGVyZUNvbmRpdGlvbnMgPSAoIHtcblx0Zm9yRGF0ZXRpbWVJZCA9IDAsXG5cdGZvckV2ZW50SWQgPSAwLFxuXHRmb3JSZWdpc3RyYXRpb25JZCA9IDAsXG5cdGZvclRpY2tldElkID0gMCxcblx0Zm9yU3RhdHVzSWQgPSAnJyxcbn0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGZvckV2ZW50SWQgPSBwYXJzZUludCggZm9yRXZlbnRJZCwgMTAgKTtcblx0aWYgKCBmb3JFdmVudElkICE9PSAwICYmICEgaXNOYU4oIGZvckV2ZW50SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbUmVnaXN0cmF0aW9uLkVWVF9JRF09JyArIGZvckV2ZW50SWQgKTtcblx0fVxuXHRmb3JEYXRldGltZUlkID0gcGFyc2VJbnQoIGZvckRhdGV0aW1lSWQsIDEwICk7XG5cdGlmICggZm9yRGF0ZXRpbWVJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JEYXRldGltZUlkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW0RUVF9JRF09JyArIGZvckRhdGV0aW1lSWQgKTtcblx0fVxuXHRmb3JSZWdpc3RyYXRpb25JZCA9IHBhcnNlSW50KCBmb3JSZWdpc3RyYXRpb25JZCwgMTAgKTtcblx0aWYgKCBmb3JSZWdpc3RyYXRpb25JZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JSZWdpc3RyYXRpb25JZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtSRUdfSURdPScgKyBmb3JSZWdpc3RyYXRpb25JZCApO1xuXHR9XG5cdGZvclRpY2tldElkID0gcGFyc2VJbnQoIGZvclRpY2tldElkLCAxMCApO1xuXHRpZiAoIGZvclRpY2tldElkICE9PSAwICYmICEgaXNOYU4oIGZvclRpY2tldElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1JlZ2lzdHJhdGlvbi5US1RfSURdPScgKyBmb3JUaWNrZXRJZCApO1xuXHR9XG5cdGlmICggZm9yU3RhdHVzSWQgIT09ICcnICYmIGZvclN0YXR1c0lkICE9PSBudWxsICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtDSEtfaW5dPScgKyBmb3JTdGF0dXNJZCApO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAnZGF0ZXRpbWUnO1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfU1RBVFVTX0lEID0ge1xuXHRBQ1RJVkU6ICdEVEEnLFxuXHRDQU5DRUxMRUQ6ICdEVEMnLFxuXHRFWFBJUkVEOiAnRFRFJyxcblx0SU5BQ1RJVkU6ICdEVEknLFxuXHRQT1NUUE9ORUQ6ICdEVFAnLFxuXHRTT0xEX09VVDogJ0RUUycsXG5cdFRSQVNIRUQ6ICdEVFQnLFxuXHRVUENPTUlORzogJ0RUVScsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfU1RBVFVTX0lEUyA9IHZhbHVlcyggREFURVRJTUVfU1RBVFVTX0lEICk7XG5cbmV4cG9ydCBjb25zdCBNSU5VVEVfSU5fU0VDT05EUyA9IDYwO1xuZXhwb3J0IGNvbnN0IEhPVVJfSU5fU0VDT05EUyA9IE1JTlVURV9JTl9TRUNPTkRTICogNjA7XG5leHBvcnQgY29uc3QgREFZX0lOX1NFQ09ORFMgPSBIT1VSX0lOX1NFQ09ORFMgKiAyNDtcbmV4cG9ydCBjb25zdCBXRUVLX0lOX1NFQ09ORFMgPSBIT1VSX0lOX1NFQ09ORFMgKiA3O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0lOX1NFQ09ORFMgPSBEQVlfSU5fU0VDT05EUyAqIDMwO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAqIGFzIGJhc2VGb3JtYXR0ZXIgZnJvbSAnLi4vYmFzZS1kYXRlLWZvcm1hdHRlcic7XG5cbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBmb3JPd24sIHB1bGxBdCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuXHRUSU1FX0ZPUk1BVF9TSVRFLFxuXHREQVRFX1RJTUVfRk9STUFUX1NJVEUsXG5cdGFsbERhdGVUaW1lc0FzU3RyaW5nLFxuXHRTRVBBUkFUT1JfU1BBQ0VfREFTSF9TUEFDRSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEFycmF5IG9mIGZpZWxkcyB0aGF0IGhhdmUgZGF0ZSBpbmZvcm1hdGlvblxuICogQHR5cGUgeyBzdHJpbmdbXSB9XG4gKi9cbmV4cG9ydCBjb25zdCBEQVRFX0ZJRUxEUyA9IFtcblx0J0RUVF9FVlRfc3RhcnQnLFxuXHQnRFRUX0VWVF9lbmQnLFxuXTtcblxuLyoqXG4gKiBXaWxsIGhvbGQgdGhlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBsaXN0IG9mIGZvcm1hdHRlcnMgZm9yIGRhdGVzLiAgRm9ybWF0dGVyc1xuICogYXJlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGAuLi9iYXNlLWRhdGUtZm9ybWF0dGVyYCBidXQgd3JhcHBlZCBieSBkeW5hbWljYWxseVxuICogZ2VuZXJhdGVkIGZ1bmN0aW9ucyAoY2FsbGFibGUgdmlhIHNhbWUgbmFtZSkgdGhhdCBhdXRvbWF0aWNhbGx5IHJlY2VpdmUgdGhlXG4gKiBjb3JyZWN0IGRhdGVGaWVsZHNNYXAgYXJndW1lbnQuXG4gKlxuICogRWcuICBgLi4vYmFzZS1kYXRlLWZvcm1hdHRlciBoYXNcbiAqIGZvcm1hdERhdGVzT25FbnRpdGllcyggZW50aXRpZXMsIGVudGl0eURhdGVGaWVsZHMsIGZvcm1hdCwgbG9jYWwgKTtcbiAqIFdoZW4gaW1wb3J0aW5nIGBmb3JtYXREYXRlc09uRW50aXRpZXNgIGZyb20gdGhpcyBmaWxlLCB5b3UgY2FuIGNhbGwgaXQgc2ltcGx5XG4gKiBieSBkb2luZyB0aGlzOlxuICpcbiAqIGZvcm1hdERhdGVzT25FbnRpdGllcyggZGF0ZVRpbWVPYmplY3RzLCBmb3JtYXQsIGxvY2FsICk7XG4gKlxuICogTm90aWNlIHRoYXQgaXQncyBjYWxsZWQgd2l0aG91dCB0aGUgZW50aXR5RGF0ZUZpZWxkcyBhcmd1bWVudCBiZWNhdXNlIHRoYXQnc1xuICogcHJvdmlkZWQgYnkgdGhpcyBnZW5lcmF0b3IuXG4gKlxuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBmb3JtYXR0ZXJzID0ge307XG5cbmZvck93biggYmFzZUZvcm1hdHRlciwgKCBpbXBsZW1lbnRhdGlvbiwgZnVuY3Rpb25OYW1lICkgPT4ge1xuXHRmb3JtYXR0ZXJzWyBmdW5jdGlvbk5hbWUgXSA9ICggLi4uaW5jb21pbmdBcmdzICkgPT4ge1xuXHRcdGNvbnN0IGZpcnN0QXJnID0gcHVsbEF0KCBpbmNvbWluZ0FyZ3MsIDAgKTtcblx0XHRyZXR1cm4gaW1wbGVtZW50YXRpb24oIGZpcnN0QXJnWyAwIF0sIERBVEVfRklFTERTLCAuLi5pbmNvbWluZ0FyZ3MgKTtcblx0fTtcbn0gKTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgc3BpdCBvdXQgYSBwcmV0dGlmaWVkIGxhYmVsIGZvciB0aGUgcHJvdmlkZWQgRGF0ZVRpbWUgZW50aXR5LlxuICpcbiAqIElmIHRoZXJlIGlzIGEgRFRUX25hbWUsIHRoZSBmb3JtYXQgd2lsbCBiZTpcbiAqIGBEVFRfbmFtZSAoRFRUX0VWVF9zdGFydCAtIERUVF9FVlRfZW5kKWBcbiAqXG4gKiBJZiBubyBEVFRfbmFtZSB0aGVuOlxuICogYERUVF9FVlRfc3RhcnQgLSBEVFRfRVZUX2VuZGBcbiAqXG4gKiBUaGlzIHdpbGwgYWNjb3VudCBmb3IgaWYgYm90aCBzdGFydCBhbmQgZW5kIGFyZSBpbiB0aGUgc2FtZSBkYXkgYW5kIHNpbXBseVxuICogdXNlIHRpbWUgZm9yIHRoZSBlbmQgcGFydC5cbiAqXG4gKiBAcGFyYW0geyBCYXNlRW50aXR5IH0gRGF0ZVRpbWVFbnRpdHlcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgQSBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcHJvdmlkZWRcbiAqICAgIERhdGVUaW1lRW50aXR5LlxuICovXG5leHBvcnQgY29uc3QgcHJldHR5RGF0ZUZyb21EYXRlVGltZSA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG5cdGxldCBjb250ZW50ID0gJyc7XG5cdGlmICggaXNNb2RlbEVudGl0eU9mTW9kZWwoIERhdGVUaW1lRW50aXR5LCAnZGF0ZXRpbWUnICkgKSB7XG5cdFx0aWYgKCBEYXRlVGltZUVudGl0eS5EVFRfRVZUX3N0YXJ0Lmhhc1NhbWUoXG5cdFx0XHREYXRlVGltZUVudGl0eS5EVFRfRVZUX2VuZCxcblx0XHRcdCdkYXknXG5cdFx0KSApIHtcblx0XHRcdGNvbnRlbnQgKz0gYWxsRGF0ZVRpbWVzQXNTdHJpbmcoXG5cdFx0XHRcdFNFUEFSQVRPUl9TUEFDRV9EQVNIX1NQQUNFLFxuXHRcdFx0XHREYXRlVGltZUVudGl0eS5EVFRfRVZUX3N0YXJ0LnRvRm9ybWF0KFxuXHRcdFx0XHRcdERBVEVfVElNRV9GT1JNQVRfU0lURVxuXHRcdFx0XHQpLFxuXHRcdFx0XHREYXRlVGltZUVudGl0eS5EVFRfRVZUX2VuZC50b0Zvcm1hdChcblx0XHRcdFx0XHRUSU1FX0ZPUk1BVF9TSVRFXG5cdFx0XHRcdCksXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZW50ICs9IGFsbERhdGVUaW1lc0FzU3RyaW5nKFxuXHRcdFx0XHRTRVBBUkFUT1JfU1BBQ0VfREFTSF9TUEFDRSxcblx0XHRcdFx0RGF0ZVRpbWVFbnRpdHkuRFRUX0VWVF9zdGFydC50b0Zvcm1hdChcblx0XHRcdFx0XHREQVRFX1RJTUVfRk9STUFUX1NJVEVcblx0XHRcdFx0KSxcblx0XHRcdFx0RGF0ZVRpbWVFbnRpdHkuRFRUX0VWVF9lbmQudG9Gb3JtYXQoXG5cdFx0XHRcdFx0REFURV9USU1FX0ZPUk1BVF9TSVRFXG5cdFx0XHRcdCksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRjb250ZW50ID0gRGF0ZVRpbWVFbnRpdHkuRFRUX25hbWUgP1xuXHRcdFx0YCR7IERhdGVUaW1lRW50aXR5LkRUVF9uYW1lIH0gKCR7IGNvbnRlbnQgfSlgIDpcblx0XHRcdGNvbnRlbnQ7XG5cdH1cblx0cmV0dXJuIGNvbnRlbnQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm1hdHRlcic7XG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cy1oZWxwZXInO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG5cdEdSRUFURVJfVEhBTixcblx0R1JFQVRFUl9USEFOX0FORF9FUVVBTCxcblx0TEVTU19USEFOX0FORF9FUVVBTCxcbn0gZnJvbSAnLi4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBub3dEYXRlQW5kVGltZSA9IG1vbWVudCgpO1xuXG4vKipcbiAqIERlc2NyaWJlZCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7e2F0dHJpYnV0ZXM6ICp9fVxuICovXG5leHBvcnQgY29uc3QgcXVlcnlEYXRhVHlwZXMgPSB7XG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnRFRUX25hbWUnLFxuXHRcdFx0J0RUVF9JRCcsXG5cdFx0XHQnc3RhcnRfZGF0ZScsXG5cdFx0XHQnZW5kX2RhdGUnLFxuXHRcdF0gKSxcblx0XHRvcmRlcjogUHJvcFR5cGVzLm9uZU9mKCBBTExPV0VEX09SREVSX1ZBTFVFUyApLFxuXHRcdHNob3dFeHBpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblx0XHRtb250aDogUHJvcFR5cGVzLm1vbnRoLFxuXHR9ICksXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0XHRzaG93RXhwaXJlZDogYm9vbGVhblxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAnc3RhcnRfZGF0ZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdFx0c2hvd0V4cGlyZWQ6IGZhbHNlLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGFuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRzdGFydF9kYXRlOiAnRFRUX0VWVF9zdGFydCcsXG5cdFx0ZW5kX2RhdGU6ICdEVFRfRVZUX2VuZCcsXG5cdH07XG5cdHJldHVybiBpc1VuZGVmaW5lZCggb3JkZXJCeU1hcFsgb3JkZXJCeSBdICkgP1xuXHRcdG9yZGVyQnkgOlxuXHRcdG9yZGVyQnlNYXBbIG9yZGVyQnkgXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHdoZXJlIGNvbmRpdGlvbnMgZm9yIGFuIGV2ZW50cyBlbmRwb2ludCByZXF1ZXN0IHVzaW5nIHByb3ZpZGVkXG4gKiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRXZlbnRJZCAgSUQgZm9yIEV2ZW50IHRvIHJldHJpZXZlIGRhdGV0aW1lcyBmcm9tXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dFeHBpcmVkICBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGV4cGlyZWQgZXZlbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vbnRoICAgICAgICAgUmV0dXJuIGV2ZW50cyBmb3IgdGhlIGdpdmVuIG1vbnRoLiAgQ2FuIGJlIGFueVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhbnkgbW9udGggZm9ybWF0IHJlY29nbml6ZWQgYnkgbW9tZW50LlxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICBUaGUgYXNzZW1ibGVkIHdoZXJlIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCB3aGVyZUNvbmRpdGlvbnMgPSAoIHtcblx0Zm9yRXZlbnRJZCA9IDAsXG5cdHNob3dFeHBpcmVkID0gZmFsc2UsXG5cdG1vbnRoID0gJ25vbmUnLFxufSApID0+IHtcblx0Y29uc3Qgd2hlcmUgPSBbXTtcblx0aWYgKCAhIHNob3dFeHBpcmVkICkge1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbRFRUX0VWVF9lbmQqKmV4cGlyZWRdW109JyArIEdSRUFURVJfVEhBTiArXG5cdFx0XHQnJndoZXJlW0RUVF9FVlRfZW5kKipleHBpcmVkXVtdPScgK1xuXHRcdFx0bm93RGF0ZUFuZFRpbWUubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0aWYgKCBtb250aCAmJiBtb250aCAhPT0gJ25vbmUnICkge1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbRFRUX0VWVF9zdGFydF1bXT0nICsgR1JFQVRFUl9USEFOX0FORF9FUVVBTCArXG5cdFx0XHQnJndoZXJlW0RUVF9FVlRfc3RhcnRdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5zdGFydE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtEVFRfRVZUX2VuZF1bXT0nICsgTEVTU19USEFOX0FORF9FUVVBTCArXG5cdFx0XHQnJndoZXJlW0RUVF9FVlRfZW5kXVtdPScgK1xuXHRcdFx0bW9tZW50KCkubW9udGgoIG1vbnRoICkuZW5kT2YoICdtb250aCcgKS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0fVxuXHRpZiAoIHBhcnNlSW50KCBmb3JFdmVudElkLCAxMCApICE9PSAwICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtFdmVudC5FVlRfSURdPScgKyBmb3JFdmVudElkICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBEQVRFVElNRV9TVEFUVVNfSUQsIE1PREVMX05BTUUsIE1PTlRIX0lOX1NFQ09ORFMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9XG4gKi9cbmNvbnN0IGFzc2VydERhdGVUaW1lRW50aXR5ID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBEYXRlVGltZUVudGl0eSwgTU9ERUxfTkFNRSApICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHQnVGhlIHByb3ZpZGVkIGVudGl0eSBpcyBub3QgYSBkYXRldGltZSBpbnN0YW5jZSdcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBldmVudCBkYXRlIGlzIG9jY3VycmluZyBOT1dcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQWN0aXZlID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdHJldHVybiBEYXRlVGltZUVudGl0eS5zdGFydC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPCAwICYmXG5cdFx0RGF0ZVRpbWVFbnRpdHkuZW5kLmRpZmZOb3coKS5hc1NlY29uZHMoKSA+IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlbmQgZGF0ZSBpcyBpbiB0aGUgcGFzdFxuICovXG5leHBvcnQgY29uc3QgaXNFeHBpcmVkID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdHJldHVybiBEYXRlVGltZUVudGl0eS5lbmQuZGlmZk5vdygpLmFzU2Vjb25kcygpIDwgMDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGVuZCBkYXRlIGlzIGluIHRoZSBwYXN0XG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlY2VudGx5RXhwaXJlZCA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG5cdGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApO1xuXHRyZXR1cm4gRGF0ZVRpbWVFbnRpdHkuZW5kLmRpZmZOb3coKS5hc1NlY29uZHMoKSA8IDAgJiZcblx0XHREYXRlVGltZUVudGl0eS5lbmQuZGlmZk5vdygpLmFzU2Vjb25kcygpID4gKCBNT05USF9JTl9TRUNPTkRTICogLTEgKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldHMgc29sZCBtZWV0cyBvciBleGNlZWRzIHJlZ2lzdHJhdGlvbiBsaW1pdFxuICovXG5leHBvcnQgY29uc3QgaXNTb2xkT3V0ID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdGNvbnN0IGNhcCA9IERhdGVUaW1lRW50aXR5LnJlZ0xpbWl0O1xuXHRyZXR1cm4gKCBjYXAgIT09IG51bGwgJiYgY2FwICE9PSAnSU5GJyAmJiBjYXAgIT09IEluZmluaXR5ICYmIGNhcCAhPT0gLTEgKSAmJlxuXHRcdERhdGVUaW1lRW50aXR5LnNvbGQgPj0gY2FwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgc3RhcnQgZGF0ZSBpcyBpbiB0aGUgZnV0dXJlXG4gKi9cbmV4cG9ydCBjb25zdCBpc1VwY29taW5nID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdHJldHVybiBEYXRlVGltZUVudGl0eS5zdGFydC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPiAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZGF0ZSBpcyBhcmNoaXZlZFxuICovXG5leHBvcnQgY29uc3QgaXNUcmFzaGVkID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdHJldHVybiBEYXRlVGltZUVudGl0eS5kZWxldGVkO1xufTtcblxuLy8gUExaIE5PVEU6XG4vLyBsZWF2aW5nIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBiZWNhdXNlIGl0IGNhbiBiZSB1c2VkIGlmL3doZW4gd2UgZGVjaWRlXG4vLyB0byBmdWxseSBzdXBwb3J0IHRoZXNlIGRhdGV0aW1lIHN0YXR1c2VzIHdoaWNoIGFyZSBjdXJyZW50bHkgZGVmaW5lZFxuLy8gb24gdGhlIEVFX0RhdGV0aW1lIG1vZGVsIG9iamVjdCBjbGFzcyBidXQgbm90IHlldCB1c2VkXG5cbi8vIC8qKlxuLy8gICogQGZ1bmN0aW9uXG4vLyAgKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4vLyAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGRhdGUgaXMgY2FuY2VsbGVkXG4vLyAgKi9cbi8vIGV4cG9ydCBjb25zdCBpc0NhbmNlbGxlZCA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG4vLyBcdGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApO1xuLy8gXHRyZXR1cm4gRGF0ZVRpbWVFbnRpdHkuY2FuY2VsbGVkO1xuLy8gfTtcbi8vXG4vLyAvKipcbi8vICAqIEBmdW5jdGlvblxuLy8gICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuLy8gICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBkYXRlIGhhcyBiZWVuIHBvc3Rwb25lZFxuLy8gICovXG4vLyBleHBvcnQgY29uc3QgaXNQb3N0cG9uZWQgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuLy8gXHRhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKTtcbi8vIFx0cmV0dXJuIERhdGVUaW1lRW50aXR5LnBvc3Rwb25lZDtcbi8vIH07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9IHN0YXR1cyBJRFxuICovXG5leHBvcnQgY29uc3Qgc3RhdHVzID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdGlmICggaXNUcmFzaGVkKCBEYXRlVGltZUVudGl0eSApICkge1xuXHRcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuVFJBU0hFRDtcblx0fVxuXHRpZiAoIGlzRXhwaXJlZCggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELkVYUElSRUQ7XG5cdH1cblx0aWYgKCBpc1NvbGRPdXQoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5TT0xEX09VVDtcblx0fVxuXHRpZiAoIGlzVXBjb21pbmcoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5VUENPTUlORztcblx0fVxuXHRpZiAoIGlzQWN0aXZlKCBEYXRlVGltZUVudGl0eSApICkge1xuXHRcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuQUNUSVZFO1xuXHR9XG5cdC8vIFBMWiBTRUUgTk9URSBBQk9WRVxuXHQvLyBpZiAoIGlzQ2FuY2VsbGVkKCBEYXRlVGltZUVudGl0eSApICkge1xuXHQvLyBcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuQ0FOQ0VMTEVEO1xuXHQvLyB9XG5cdC8vIGlmICggaXNQb3N0cG9uZWQoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdC8vIFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5QT1NUUE9ORUQ7XG5cdC8vIH1cblx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5JTkFDVElWRTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgIENTUyBjbGFzcyBmb3IgdGhlIGJhY2tncm91bmQgY29sb3JcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJhY2tncm91bmRDb2xvckNsYXNzID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0cmV0dXJuIGBlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci0keyBzdGF0dXMoIERhdGVUaW1lRW50aXR5ICkgfWA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSBkYXRlIHN0YXR1c1xuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0ZVRpbWVTdGF0dXNUZXh0TGFiZWwgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRsZXQgZGF0ZVN0YXR1cyA9ICcnO1xuXHRzd2l0Y2ggKCBzdGF0dXMoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0Y2FzZSBEQVRFVElNRV9TVEFUVVNfSUQuU09MRF9PVVQgOlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnc29sZCBvdXQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5FWFBJUkVEIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2V4cGlyZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5VUENPTUlORyA6XG5cdFx0XHRkYXRlU3RhdHVzID0gX18oICd1cGNvbWluZycsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELkFDVElWRSA6XG5cdFx0XHRkYXRlU3RhdHVzID0gX18oICdhY3RpdmUnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5UUkFTSEVEIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2FyY2hpdmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBEQVRFVElNRV9TVEFUVVNfSUQuQ0FOQ0VMTEVEIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2NhbmNlbGxlZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELlBPU1RQT05FRCA6XG5cdFx0XHRkYXRlU3RhdHVzID0gX18oICdwb3N0cG9uZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5JTkFDVElWRSA6XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2luYWN0aXZlJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGRhdGVTdGF0dXM7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgbWFwVmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGVuZHBvaW50cyB9IGZyb20gJy4vZW5kcG9pbnRzLmpzJztcblxuLyoqXG4gKiBSZWNlaXZlcyBhbiBvYmplY3QgbWFwIG9mIG1vZGVsTmFtZSB0byBlbmRwb2ludCBhbmQgbWFwcyB0aGF0IHRvIGEgZGVmYXVsdFxuICogbWFwIG9mIG1vZGVsTmFtZSB0byBlbXB0eSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHsgT2JqZWN0IH0gbW9kZWxOYW1lRW5kcG9pbnRzXG4gKiBAcmV0dXJuIHsgT2JqZWN0IH0gQW4gb2JqZWN0IG9mIHsgeyBtb2RlbE5hbWUgfSA6IHt9IH1cbiAqL1xuY29uc3QgbWFwVG9PYmplY3RWYWx1ZXMgPSAoIG1vZGVsTmFtZUVuZHBvaW50cyApID0+IHtcblx0cmV0dXJuIG1hcFZhbHVlcyggbW9kZWxOYW1lRW5kcG9pbnRzLFxuXHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH0sXG5cdCk7XG59O1xuXG5jb25zdCBnZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCA9IG1lbW9pemUoXG5cdCgpID0+IG1hcFRvT2JqZWN0VmFsdWVzKCBlbmRwb2ludHMgKVxuKTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgZGVmYXVsdCBzdGF0ZSB0byBiZSB1c2VkIGJ5IHN0b3JlcyBjb250YWluaW5nIGxpc3RzLlxuICpcbiAqIEB0eXBlIHsgT2JqZWN0IH1cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElTVFNfU1RBVEUgPSBtYXBUb09iamVjdFZhbHVlcyggZW5kcG9pbnRzICk7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIGRlZmF1bHQgc3RhdGUgdG8gYmUgdXNlZCBieSB0aGUgY29yZSBzdG9yZS5cbiAqXG4gKiBAdHlwZSB7e2VudGl0aWVzOiB7fSwgZW50aXR5SWRzOiB7fSwgZGlydHk6IHt9fX1cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09SRV9TVEFURSA9IHtcblx0ZW50aXRpZXM6IHtcblx0XHQuLi5nZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCgpLFxuXHR9LFxuXHRyZWxhdGlvbnM6IHt9LFxuXHRkaXJ0eToge1xuXHRcdHJlbGF0aW9uczoge1xuXHRcdFx0aW5kZXg6IHt9LFxuXHRcdFx0ZGVsZXRlOiB7fSxcblx0XHRcdGFkZDoge30sXG5cdFx0fSxcblx0XHR0cmFzaDoge30sXG5cdFx0ZGVsZXRlOiB7fSxcblx0fSxcbn07XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIGRlZmF1bHQgc3RhdGUgdG8gYmUgdXNlZCBieSB0aGUgc2NoZW1hIHN0b3JlLlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0NIRU1BX1NUQVRFID0ge1xuXHRzY2hlbWE6IHtcblx0XHQuLi5nZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCgpLFxuXHR9LFxuXHRmYWN0b3J5OiB7XG5cdFx0Li4uZ2V0RGVmYXVsdE1vZGVsRW50aXRpZXNPYmplY3QoKSxcblx0fSxcblx0cmVsYXRpb25FbmRwb2ludHM6IHtcblx0XHQuLi5nZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCgpLFxuXHR9LFxuXHRyZWxhdGlvblNjaGVtYToge30sXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRhdGEgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGFzc2VydEVudGl0eUhhc0tleSB9IGZyb20gJy4vYXNzZXJ0aW9ucyc7XG5cbi8qKlxuICogQWxsIGF2YWlsYWJsZSBlbmRwb2ludHMgZXhwb3NlZCB2aWEgdGhlIGVlanMuZGF0YSBnbG9iYWwgZnJvbSB0aGUgc2VydmVyLlxuICpcbiAqIEB0eXBlIHt7fX1cbiAqL1xuZXhwb3J0IGNvbnN0IHtcblx0Y29sbGVjdGlvbl9lbmRwb2ludHM6IGVuZHBvaW50cyA9IHt9LFxuXHRiYXNlX3Jlc3Rfcm91dGU6IGJhc2VSZXN0Um91dGUsXG59ID0gZGF0YS5wYXRocztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGVuZHBvaW50IGZvciB0aGUgcHJvdmlkZWQgbW9kZWwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgV2hhdCBtb2RlbCB0byByZXRyaWV2ZSB0aGUgZW5kcG9pbnQgZm9yLlxuICogQHJldHVybiB7c3RyaW5nfSAgVGhlIGVuZHBvaW50IGZvciB0aGUgcHJvdmlkZWQgbW9kZWwuXG4gKiBAdGhyb3dzIHtFeGNlcHRpb259XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbmRwb2ludCA9ICggbW9kZWxOYW1lICkgPT4ge1xuXHRhc3NlcnRFbnRpdHlIYXNLZXkoIG1vZGVsTmFtZSwgZW5kcG9pbnRzICk7XG5cdHJldHVybiBlbmRwb2ludHNbIG1vZGVsTmFtZSBdO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBwcm92aWRlZCBxdWVyeVN0cmluZyB0byB0aGUgZW5kcG9pbnQgZm9yIHRoZSBwcm92aWRlZCBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgV2hhdCBtb2RlbCB0aGUgZmluYWwgc3RyaW5nIGlzIGZvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZyAgVGhlIHF1ZXJ5IGJlaW5nIGFwcGVuZGVkIHRvIHRoZSBlbmRwb2ludC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZpbmFsIGFzc2VtYmxlZCBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseVF1ZXJ5U3RyaW5nID0gKCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nID0gJycgKSA9PiB7XG5cdHJldHVybiBxdWVyeVN0cmluZyAhPT0gJycgP1xuXHRcdGdldEVuZHBvaW50KCBtb2RlbE5hbWUgKSArICc/JyArIHF1ZXJ5U3RyaW5nIDpcblx0XHRnZXRFbmRwb2ludCggbW9kZWxOYW1lICk7XG59O1xuXG4vKipcbiAqIFN0cmlwcyB0aGUgYmFzZV9yZXN0X3JvdXRlIChpLmUuIGh0dHBzOi8vbXl1cmwuY29tL3dwLWpzb24vKSBmcm9tIHRoZSBwcm92aWRlZFxuICogdXJsIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSB1cmwgd2l0aCB0aGUgYmFzZSByZXN0IHJvdXRlIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBzdHJpcEJhc2VSb3V0ZUZyb21VcmwgPSAoIHVybCApID0+IHtcblx0cmV0dXJuIHVybC5yZXBsYWNlKCBiYXNlUmVzdFJvdXRlLCAnJyApO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBJbnZhbGlkU2NoZW1hIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5pbXBvcnQgeyBpc1NjaGVtYSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtcblx0TW9uZXksXG5cdFNlcnZlckRhdGVUaW1lIGFzIERhdGVUaW1lLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRpc0RhdGVUaW1lRmllbGQsXG5cdGlzTW9uZXlGaWVsZCxcbn0gZnJvbSAnLi9ib29sZWFucyc7XG5pbXBvcnQge1xuXHRpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQsXG5cdHZhbGlkYXRlRW51bVR5cGUsXG5cdHZhbGlkYXRlVHlwZSxcblx0dmFsaWRhdGVUeXBlRm9yRmllbGQsXG59IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyB9IGZyb20gJy4vZXh0cmFjdG9ycyc7XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBwcm92aWRlZCBmaWVsZCB2YWx1ZSBpcyBhIGtub3duIHZhbHVlIG9iamVjdC5cbiAqXG4gKiBOb3RlOiB0aGlzIG9ubHkgYXNzZXJ0cyBrbm93biB2YWx1ZSBvYmplY3RzLCBpZiB0aGUgdmFsdWUgaXMgbm90IGRldGVjdGVkIGFzXG4gKiBhIGtub3duIHZhbHVlIG9iamVjdCBpdCBpcyBwYXNzZWQgYmFjayBhcyBpcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEB0aHJvd3MgSW52YWxpZERhdGVUaW1lXG4gKiBAdGhyb3dzIFR5cGVFcnJvclxuICovXG5leHBvcnQgY29uc3QgbWF5YmVBc3NlcnRWYWx1ZU9iamVjdCA9ICggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBzY2hlbWEgKSA9PiB7XG5cdGlmICggaXNEYXRlVGltZUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICkge1xuXHRcdERhdGVUaW1lLmFzc2VydElzRGF0ZVRpbWUoIGZpZWxkVmFsdWUgKTtcblx0fVxuXHRpZiAoIGlzTW9uZXlGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSApIHtcblx0XHRNb25leS5hc3NlcnRNb25leSggZmllbGRWYWx1ZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgcHJvdmlkZWQgb2JqZWN0IGlzIGEgdmFsaWQgbW9kZWwgc2NoZW1hIG9iamVjdC5cbiAqXG4gKiBDdXJyZW50bHksIGFuIG9iamVjdCBpcyBjb25zaWRlcmVkIGEgdmFsaWQgbW9kZWwgc2NoZW1hIGlmIGl0IGhhcyBhXG4gKiAncHJvcGVydGllcycgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHsqfSBzY2hlbWFcbiAqIEB0aHJvd3MgSW52YWxpZFNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0VmFsaWRTY2hlbWEgPSAoIHNjaGVtYSApID0+IHtcblx0aWYgKCAhIGlzU2NoZW1hKCBzY2hlbWEgKSApIHtcblx0XHR0aHJvdyBuZXcgSW52YWxpZFNjaGVtYShcblx0XHRcdCdUaGlzIGlzIGFuIGludmFsaWQgc2NoZW1hIGZvciBhIG1vZGVsLicsXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBBc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGZpZWxkIGV4aXN0cyBpbiB0aGUgcHJvdmlkZWQgc2NoZW1hIGFuZCB0aGUgc2hhcGUgZm9yXG4gKiB0aGUgc2NoZW1hIGVudHJ5IG9uIHRoYXQgZmllbGQgaXMgZXhwZWN0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgVGhlIG1vZGVsIHRoZSBzY2hlbWEgYmVsb25ncyB0bywgdGhpcyBpcyB1c2VkIGZvclxuICogZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lICBUaGUgZmllbGQgYmVpbmcgY2hlY2tlZCBhZ2FpbnN0IHRoZSBzY2hlbWFcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgICAgIFRoZSBzY2hlbWEgZm9yIHRoZSBtb2RlbCB1c2VkIGZvciB2YWxpZGF0aW9uXG4gKiBAdGhyb3dzIEludmFsaWRTY2hlbWFcbiAqIEB0aHJvd3MgVHlwZUVycm9yXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRWYWxpZFNjaGVtYUZpZWxkUHJvcGVydGllcyA9IChcblx0bW9kZWxOYW1lLFxuXHRmaWVsZE5hbWUsXG5cdHNjaGVtYSxcbikgPT4ge1xuXHRpZiAoIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdHNwcmludGYoXG5cdFx0XHRcdCdUaGUgZ2l2ZW4gXCIlc1wiIGZpZWxkTmFtZSBkb2VzIG5vdCBoYXZlIGEgZGVmaW5lZCBzY2hlbWEgZm9yIHRoZSBtb2RlbCBcIiVzXCInLFxuXHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCksXG5cdFx0KTtcblx0fVxuXHRpZiAoIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgKSB7XG5cdFx0aWYgKCBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzICkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgSW52YWxpZFNjaGVtYShcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIHNjaGVtYSBmb3IgdGhlIGZpZWxkICVzIG9uIHRoZSBtb2RlbCAlcyBpcyBvZiB0eXBlIFwib2JqZWN0XCIgYnV0IGRvZXMgbm90IGhhdmUgYSBwcm9wZXJ0aWVzIHByb3BlcnR5LicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdG1vZGVsTmFtZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpZiAoIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3ICkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgSW52YWxpZFNjaGVtYShcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIHNjaGVtYSBmb3IgdGhlIGZpZWxkICVzIG9uIHRoZSBtb2RlbCAlcyBpcyBvZiB0eXBlIFwib2JqZWN0XCIgYnV0IGRvZXMgbm90IGhhdmUgYSByYXcgcHJvcGVydHkgaW4gaXRcXCdzIFwicHJvcGVydGllc1wiIHByb3BlcnR5LicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdG1vZGVsTmFtZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpZiAoIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LnR5cGUgKSApIHtcblx0XHRcdHRocm93IG5ldyBJbnZhbGlkU2NoZW1hKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgc2NoZW1hIGZvciB0aGUgZmllbGQgJXMgb24gdGhlIG1vZGVsICVzIGlzIG9mIHR5cGUgXCJvYmplY3RcIiBhbmQgaGFzIGEgcHJvcGVydGllcy5yYXcgcHJvcGVydHksIGhvd2V2ZXIgdGhlcmUgaXMgbm8gXCJ0eXBlXCIgZGVmaW5lZCBmb3IgdGhlIHJhdyBwcm9wZXJ0eS4nLFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRtb2RlbE5hbWVcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgdmFsdWUgcHJvdmlkZWQgZm9yIHRoZSBwcmVwYXJlZCBmaWVsZCBpcyB2YWxpZCBhY2NvcmRpbmcgdG9cbiAqIHRoZSBzY2hlbWEuXG4gKlxuICogUHJlcGFyZWQgZmllbGRzIGFyZTpcbiAqXG4gKiAtIGZpZWxkcyBoYXZpbmcgdmFsdWVzIHRoYXQgYXJlIHNldCBhcyBhIHZhbHVlIG9iamVjdCBhbmQgZXhwZWN0IGEgdmFsdWVcbiAqICAgb2JqZWN0IG9uIHVwZGF0ZXMvaW5zZXJ0cy5cbiAqIC0gZmllbGRzIHRoYXQgYXJlIHRoZSBlcXVpdmFsZW50IGByYXdgIHZhbHVlIHdoZW4gdGhlIGZpZWxkIGluIHRoZSBzY2hlbWEgaXNcbiAqICAgZGVmaW5lZCB0byBoYXZlIHJhdyBhbmQgcmVuZGVyZWQvcHJldHR5IHZhbHVlcy5cbiAqXG4gKiBOb3RlOiAgVGhpcyB2YWxpZGF0ZXMgYWdhaW5zdCBwcmVwYXJlZCBmaWVsZHMgd2hpY2ggbWVhbnMgdGhhdDpcbiAqXG4gKiAtIGlmIHRoZSBwcmVwYXJlZCBmaWVsZCBoYXMgYSB2YWx1ZSBvYmplY3QgYXMgaXRzIHZhbHVlLCB0aGVuIHRoYXQgdmFsdWVcbiAqICAgb2JqZWN0IGlzIHZhbGlkYXRlZCBiZWZvcmUgYW55IG90aGVyIHZhbGlkYXRpb24uXG4gKiAtIGlmIHRoZSBwcmVwYXJlZCBmaWVsZCByZXByZXNlbnRzIGFuIG9iamVjdCBpbiB0aGUgc2NoZW1hLCB0aGVuIGl0cyB2YWx1ZSBpc1xuICogICB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgYHJhd2AgdHlwZSBpbiB0aGUgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAdGhyb3dzIFR5cGVFcnJvclxuICogQHRocm93cyBJbnZhbGlkRGF0ZVRpbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkID0gKFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGluc3RhbmNlLFxuKSA9PiB7XG5cdGNvbnN0IHsgc2NoZW1hIH0gPSBpbnN0YW5jZTtcblx0bGV0IGlzVmFsaWQgPSBpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQoXG5cdFx0ZmllbGROYW1lLFxuXHRcdGZpZWxkVmFsdWUsXG5cdFx0c2NoZW1hLFxuXHQpO1xuXHRpZiAoICEgaXNWYWxpZCAmJiBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgPT09ICdvYmplY3QnICYmXG5cdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzXG5cdCkge1xuXHRcdGlzVmFsaWQgPSBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LmVudW0gP1xuXHRcdFx0dmFsaWRhdGVFbnVtVHlwZShcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LmVudW0sXG5cdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHQpIDpcblx0XHRcdHZhbGlkYXRlVHlwZShcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlLFxuXHRcdFx0XHRtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyhcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdFx0XHRzY2hlbWFcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRpZiAoICEgaXNWYWxpZCApIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcdHNwcmludGYoXG5cdFx0XHRcdFx0J1RoZSBnaXZlbiBcIiUxJHNcIiBmaWVsZCAgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEuICBJdFxcJ3MgYHJhd2AgcHJvcGVydHkgVmFsdWUgKCUyJHMpIGlzIG5vdCB0aGUgY29ycmVjdCBleHBlY3RlZCB0eXBlICglMyRzKS4nLFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcudHlwZSxcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdGlmICggISBpc1ZhbGlkICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIGZpZWxkXFwncyBWYWx1ZSAoJTIkcykgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEgdHlwZSAoJTMkcykuJyxcblx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkIGlzIHZhbGlkIGFjY29yZGluZyB0byB0aGVcbiAqIHNjaGVtYS5cbiAqXG4gKiBUaGlzIGlzIHVzZWQgb24gZW50aXR5IGNvbnN0cnVjdGlvbiBhbmQgZG9lcyBub3QgdmFsaWRhdGUgcHJlcGFyZWQgZmllbGRcbiAqIHZhbHVlcyAoc2VlIGFzc2VydCBhc3NlcnRWYWxpZFZhbHVlRm9yUHJlcGFyZWRGaWVsZCkuXG4gKlxuICogVGhpcyBtZXRob2QgYWxzbyBhc3NlcnRzIHRoYXQgdGhlIHNjaGVtYSBoYXMgdmFsaWQgc2NoZW1hIGZpZWxkIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEB0aHJvd3MgVHlwZUVycm9yXG4gKiBAdGhyb3dzIEludmFsaWRTY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydFZhbGlkRmllbGRBbmRWYWx1ZUFnYWluc3RTY2hlbWEgPSAoXG5cdG1vZGVsTmFtZSxcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRpbnN0YW5jZSxcbikgPT4ge1xuXHRjb25zdCBzY2hlbWEgPSBpbnN0YW5jZS5zY2hlbWE7XG5cdGNvbnN0IHZhbGlkYXRpb25UeXBlID0gdmFsaWRhdGVUeXBlRm9yRmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2UgKTtcblx0YXNzZXJ0VmFsaWRTY2hlbWFGaWVsZFByb3BlcnRpZXMoIG1vZGVsTmFtZSwgZmllbGROYW1lLCBzY2hlbWEgKTtcblx0bGV0IGlzVmFsaWQgPSBpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQoXG5cdFx0ZmllbGROYW1lLFxuXHRcdGZpZWxkVmFsdWUsXG5cdFx0c2NoZW1hLFxuXHRcdGZhbHNlLFxuXHQpO1xuXHQvLyBhY2NvdW50IGZvciBmaWVsZE5hbWUgZmllbGRWYWx1ZXMgdGhhdCBoYXZlIHByb3BlcnR5IHNjaGVtYS4gRm9yIE1vZGVsXG5cdC8vIEVudGl0aWVzLCBvbmx5IHRoZSBWQUxJREFURV9UWVBFIHByb3BlcnR5IGlzIGNhcmVkIGFib3V0LlxuXHRpZiAoIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgJiZcblx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNcblx0KSB7XG5cdFx0aWYgKCBpc1VuZGVmaW5lZCggZmllbGRWYWx1ZVsgdmFsaWRhdGlvblR5cGUgXSApICkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIHZhbHVlIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGRlZmluZWQgc2NoZW1hLiBJdCBtdXN0IGJlIGFuIG9iamVjdCBhbmQgaXQgbXVzdCBoYXZlIGEgYCUyJHNgIGtleS4nLFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHR2YWxpZGF0aW9uVHlwZSxcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlzVmFsaWQgPSBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNbIHZhbGlkYXRpb25UeXBlIF0uZW51bSA/XG5cdFx0XHR2YWxpZGF0ZUVudW1UeXBlKFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNbIHZhbGlkYXRpb25UeXBlIF0udHlwZSxcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy5lbnVtLFxuXHRcdFx0XHRmaWVsZFZhbHVlWyB2YWxpZGF0aW9uVHlwZSBdLFxuXHRcdFx0KSA6XG5cdFx0XHR2YWxpZGF0ZVR5cGUoXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllc1sgdmFsaWRhdGlvblR5cGUgXS50eXBlLFxuXHRcdFx0XHRmaWVsZFZhbHVlWyB2YWxpZGF0aW9uVHlwZSBdXG5cdFx0XHQpO1xuXHRcdGlmICggISBpc1ZhbGlkICkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIHZhbHVlIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGRlZmluZWQgc2NoZW1hLiAgSXRcXCdzIGAlMiRzYCBwcm9wZXJ0eSB2YWx1ZSAoJTMkcykgaXMgbm90IHRoZSBjb3JyZWN0IGV4cGVjdGVkIHR5cGUgKCU0JHMpLicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdHZhbGlkYXRpb25UeXBlLFxuXHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzWyB2YWxpZGF0aW9uVHlwZSBdLnR5cGUsXG5cdFx0XHRcdCksXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRpZiAoICEgaXNWYWxpZCApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0c3ByaW50Zihcblx0XHRcdFx0J1RoZSBnaXZlbiBcIiUxJHNcIiBmaWVsZFxcJ3MgdmFsdWUgKCUyJHMpIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGRlZmluZWQgc2NoZW1hIHR5cGUgKCUzJHMpLicsXG5cdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlLFxuXHRcdFx0KSxcblx0XHQpO1xuXHR9XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzQXJyYXksIHVwcGVyRmlyc3QsIGNhbWVsQ2FzZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdtZW1pemUnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgYXNzZXJ0VmFsaWRTY2hlbWEgfSBmcm9tICcuL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHtcblx0Y3JlYXRlR2V0dGVyLFxuXHRjcmVhdGVFbnRpdHlHZXR0ZXJzQW5kU2V0dGVycyxcblx0Y3JlYXRlUGVyc2lzdGluZ0dldHRlcnNBbmRTZXR0ZXJzLFxuXHRzZXRTYXZlU3RhdGUsXG59IGZyb20gJy4vY3JlYXRlJztcbmltcG9ydCB7XG5cdFNBVkVfU1RBVEUsXG5cdFBSSVZBVEVfUFJPUEVSVElFUyxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEJhc2VFbnRpdHkgaXMgdGhlIGJhc2ljIGNsYXNzIGZvciBhbGwgZW50aXRpZXMuICBjcmVhdGVFbnRpdHlGYWN0b3J5IHJldHVybnNcbiAqIGFuIGluc3RhbmNlIG9mIHRoaXMgYW5kIGFsbCB0aGUgZ2V0dGVycy9zZXR0ZXJzIGZvciBmaWVsZHMgZXRjIGFyZVxuICogZHluYW1pY2FsbHkgY3JlYXRlZCB2aWEgdGhlIGNvbnN0cnVjdG9yLlxuICovXG5jbGFzcyBCYXNlRW50aXR5IHtcblx0WyBQUklWQVRFX1BST1BFUlRJRVMuU0FWRV9TVEFURSBdID0gU0FWRV9TVEFURS5DTEVBTjtcblx0WyBQUklWQVRFX1BST1BFUlRJRVMuVkFMSURBVEVfVFlQRVMgXSA9IHt9O1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RvciBmb3IgQmFzZSBFbnRpdHlcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gZW50aXR5RmllbGRzQW5kVmFsdWVzXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcblx0ICogQHBhcmFtIHtBcnJheX1maWVsZFByZWZpeGVzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNOZXdcblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlGaWVsZHNBbmRWYWx1ZXMsXG5cdFx0c2NoZW1hLFxuXHRcdGZpZWxkUHJlZml4ZXMgPSBbXSxcblx0XHRpc05ldyA9IGZhbHNlLFxuXHQpIHtcblx0XHRhc3NlcnRWYWxpZFNjaGVtYSggc2NoZW1hICk7XG5cdFx0ZmllbGRQcmVmaXhlcyA9IGlzQXJyYXkoIGZpZWxkUHJlZml4ZXMgKSA/IGZpZWxkUHJlZml4ZXMgOiBbXTtcblx0XHRjcmVhdGVHZXR0ZXIoIHRoaXMsICdmaWVsZFByZWZpeGVzJywgZmllbGRQcmVmaXhlcyApO1xuXHRcdGNyZWF0ZUdldHRlciggdGhpcywgJ3NjaGVtYScsIHNjaGVtYS5wcm9wZXJ0aWVzICk7XG5cdFx0c2V0U2F2ZVN0YXRlKFxuXHRcdFx0dGhpcyxcblx0XHRcdGlzTmV3ID8gU0FWRV9TVEFURS5ORVcgOiBTQVZFX1NUQVRFLkNMRUFOXG5cdFx0KTtcblx0XHRjcmVhdGVHZXR0ZXIoIHRoaXMsICdtb2RlbE5hbWUnLCBtb2RlbE5hbWUgKTtcblx0XHRjcmVhdGVHZXR0ZXIoIHRoaXMsICdvcmlnaW5hbEZpZWxkc0FuZFZhbHVlcycsIGVudGl0eUZpZWxkc0FuZFZhbHVlcyApO1xuXHRcdGNyZWF0ZUdldHRlcihcblx0XHRcdHRoaXMsXG5cdFx0XHQnZmllbGRzVG9QZXJzaXN0T25JbnNlcnQnLFxuXHRcdFx0bmV3IFNldCggT2JqZWN0LmtleXMoIGVudGl0eUZpZWxkc0FuZFZhbHVlcyApIClcblx0XHQpO1xuXHRcdGNyZWF0ZUVudGl0eUdldHRlcnNBbmRTZXR0ZXJzKCB0aGlzICk7XG5cdFx0Y3JlYXRlUGVyc2lzdGluZ0dldHRlcnNBbmRTZXR0ZXJzKCB0aGlzICk7XG5cdFx0T2JqZWN0LnNlYWwoIHRoaXMgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNhdmUgc3RhdGUgb24gdGhlIGVudGl0eS5cblx0ICpcblx0ICogU2F2ZSBzdGF0ZSBkZXNjcmliZXMgd2hldGhlciB0aGUgZW50aXR5IGlzOlxuXHQgKlxuXHQgKiAtIFNBVkVfU1RBVEUuTkVXOiBUaGUgZW50aXR5IGhhcyBuZXZlciBiZWVuIHBlcnNpc3RlZCB0byBzdG9yYWdlLlxuXHQgKiAtIFNBVkVfU1RBVEUuQ0xFQU46IFRoZSBlbnRpdHkgZXhpc3RzIGluIHN0b3JhZ2UgYW5kIGhhcyBub3QgYmVlbiBtdXRhdGVkLlxuXHQgKiAtIFNBVkVfU1RBVEUuRElSVFk6IFRoZSBlbnRpdHkgaXMgbXV0YXRlZCBhbmQgY2hhbmdlcyBoYXZlIG5vdCBiZWVuXG5cdCAqIHBlcnNpc3RlZCB0byBzdG9yYWdlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtTeW1ib2x9ICBSZXR1cm5zIHRoZSBjdXJyZW50IHNhdmUgc3RhdGUgZm9yIHRoZSBlbnRpdHkuXG5cdCAqL1xuXHRnZXQgc2F2ZVN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzWyBQUklWQVRFX1BST1BFUlRJRVMuU0FWRV9TVEFURSBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBpcyBTQVZFX1NUQVRFLk5FV1xuXHQgKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBTQVZFX1NUQVRFLk5FVyBpcyB0aGUgc2F2ZSBzdGF0ZS5cblx0ICovXG5cdGdldCBpc05ldygpIHtcblx0XHRyZXR1cm4gdGhpcy5zYXZlU3RhdGUgPT09IFNBVkVfU1RBVEUuTkVXO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBpcyBTQVZFX1NUQVRFLkRJUlRZXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIFNBVkVfU1RBVEUuRElSVFkgaXMgdGhlIHNhdmUgc3RhdGUuXG5cdCAqL1xuXHRnZXQgaXNEaXJ0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zYXZlU3RhdGUgPT09IFNBVkVfU1RBVEUuRElSVFk7XG5cdH1cblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgY3VycmVudCBzYXZlIHN0YXRlIGlzIFNBVkVfU1RBVEUuQ0xFQU5cblx0ICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgU0FWRV9TVEFURS5DTEVBTiBpcyB0aGUgc2F2ZSBzdGF0ZS5cblx0ICovXG5cdGdldCBpc0NsZWFuKCkge1xuXHRcdHJldHVybiB0aGlzLnNhdmVTdGF0ZSA9PT0gU0FWRV9TVEFURS5DTEVBTjtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBlbnRpdHkgaGFzIGFueSBwYXNzd29yZCBwcm90ZWN0ZWQgZmllbGRzLlxuXHQgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIGl0IGRvZXMsIGZhbHNlIG1lYW5zIGl0IGRvZXNuJ3QuXG5cdCAqL1xuXHRnZXQgaXNQYXNzd29yZFByb3RlY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5wcm90ZWN0ZWRGaWVsZHMubGVuZ3RoID4gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBnaXZlbiBmaWVsZE5hbWUgaXMgYSBwYXNzd29yZCBwcm90ZWN0ZWQgZmllbGQuXG5cdCAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6IGJvb2xlYW59ICBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZFxuXHQgKiB0byBjaGVjayBpZiB0aGUgZ2l2ZW4gZmllbGQgbmFtZSBpcyBhIHByb3RlY3RlZCBmaWVsZCBpbiB0aGlzIGVudGl0eS5cblx0ICovXG5cdGdldCBpc0ZpZWxkUGFzc3dvcmRQcm90ZWN0ZWQoKSB7XG5cdFx0cmV0dXJuICggZmllbGROYW1lICkgPT4gdGhpcy5wcm90ZWN0ZWRGaWVsZHMuaW5kZXhPZiggZmllbGROYW1lICkgPiAtMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVc2VkIHRvIGNsb25lIHRoZSBjdXJyZW50IGVudGl0eSBvYmplY3QuICBUaGlzIHJlc3VsdHMgaW4gYW4gaW5zdGFuY2Ugb2Zcblx0ICogQmFzZUVudGl0eSB0aGF0IGlzIGVxdWl2YWxlbnQgYXMgdGhpcyBjdXJyZW50IGluc3RhbmNlIChleGNlcHQgaXQgd2lsbFxuXHQgKiBoYXZlIGEgbmV3IGdlbmVyYXRlZCBpZCkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0Jhc2VFbnRpdHl9IEEgbmV3IGluc3RhbmNlIG9mIEJhc2VFbnRpdHlcblx0ICovXG5cdGdldCBjbG9uZSgpIHtcblx0XHRyZXR1cm4gKCBrZWVwSWQgPSBmYWxzZSApID0+IHtcblx0XHRcdGNvbnN0IGNyZWF0ZUZhY3RvcnkgPSBtZW1vaXplKCAoKSA9PiBjcmVhdGVFbnRpdHlGYWN0b3J5KFxuXHRcdFx0XHR0aGlzLm1vZGVsTmFtZSxcblx0XHRcdFx0eyAkc2NoZW1hOiB7fSwgcHJvcGVydGllczogdGhpcy5zY2hlbWEgfSxcblx0XHRcdFx0dGhpcy5maWVsZFByZWZpeGVzXG5cdFx0XHQpICk7XG5cdFx0XHRjb25zdCBmYWN0b3J5ID0gY3JlYXRlRmFjdG9yeSgpO1xuXHRcdFx0Y29uc3QgbmV3RW50aXR5ID0gZmFjdG9yeS5jcmVhdGVOZXcoIHRoaXMuZm9yQ2xvbmUgKTtcblx0XHRcdGlmICgga2VlcElkICkge1xuXHRcdFx0XHRuZXdFbnRpdHkuaWQgPSB0aGlzLmlkO1xuXHRcdFx0XHRzZXRTYXZlU3RhdGUoIG5ld0VudGl0eSwgdGhpcy5zYXZlU3RhdGUsIHRydWUgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBuZXdFbnRpdHk7XG5cdFx0fTtcblx0fVxuXG5cdHN0YXRpYyBuYW1lID0gJ0Jhc2VFbnRpdHknXG59XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGdpdmVzIGEgY2xhc3MgdGhlIHByb3ZpZGVkIG5hbWVcbiAqIChhbmQgb3B0aW9uYWxseSBleHRlbmRzIHRoZSBwcm92aWRlZCBvYmplY3QpLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRlbmRlZENsYXNzXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBmdW5jdGlvblxuICovXG5jb25zdCBuYW1lQ2xhc3MgPSAoIG5hbWUsIGV4dGVuZGVkQ2xhc3MgKSA9PiB7XG5cdHJldHVybiBjbGFzcyBleHRlbmRzIGV4dGVuZGVkQ2xhc3Mge1xuXHRcdHN0YXRpYyBnZXQgbmFtZSgpIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fTtcbn07XG5cbi8qKlxuICogQSBmYWN0b3J5IGZvciBlbnRpdHkgZmFjdG9yaWVzLlxuICpcbiAqIENhbGxpbmcgdGhpcyByZXR1cm5zIGFuIG9iamVjdCBvZiBmYWN0b3J5IGZ1bmN0aW9ucyB0aGF0IGluc3RhbnRpYXRlIGFuXG4gKiBpbnN0YW5jZSBvZiBhIG5hbWVkIEVudGl0eS4gIFRoZSBtb2RlbE5hbWUgaXMgdXNlZCBhcyB0aGUgbmFtZSBmb3IgdGhlIG5ld1xuICogZW50aXR5LlxuICpcbiAqIFR3byBtZXRob2RzIGFyZSBhdmFpbGFibGUgb24gdGhlIG9iamVjdCByZXR1cm5lZDogYGNyZWF0ZU5ld2AgYW5kXG4gKiBgZnJvbUV4aXN0aW5nYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lICBUaGUgbW9kZWwgZm9yIHRoZSBlbnRpdHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgICAgIFRoZSBzY2hlbWEgZm9yIHRoZSBtb2RlbC4gVGhpcyBpcyB0aGUgc2NoZW1hXG4gKiBwcm92aWRlZCBieSB0aGUgT1BUSU9OUyBlbmRwb2ludCBmb3IgdGhlIG1vZGVsLlxuICogQHBhcmFtIHtBcnJheX0gZmllbGRQcmVmaXhlcyBBbiBhcnJheSBvZiBmaWVsZCBwcmVmaXhlcyBmb3IgYmFzZSBmaWVsZHMgb25cbiAqIG9uIHRoZSBtb2RlbCAoZWcuIEV2ZW50IG1vZGVsIGhhcyBgWyBFVlQgXWAgcHJlZml4ZXMgb24gZmllbGRzLCBEYXRldGltZSBtb2RlbFxuICogaGFzIFsgYERUVGAsIGBEVFRfRVZUYCBdXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgZmFjdG9yeSBmb3IgaW5zdGFudGlhdGluZyBhbiBlbnRpdHkgaW5zdGFuY2UuXG4gKi9cbmNvbnN0IGNyZWF0ZUVudGl0eUZhY3RvcnkgPSAoIG1vZGVsTmFtZSwgc2NoZW1hLCBmaWVsZFByZWZpeGVzID0gW10gKSA9PiB7XG5cdGNvbnN0IEVudGl0eSA9IG5hbWVDbGFzcyhcblx0XHR1cHBlckZpcnN0KCBjYW1lbENhc2UoIG1vZGVsTmFtZSApICksXG5cdFx0QmFzZUVudGl0eVxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdC8qKlxuXHRcdCAqIEV4cG9zZXMgbW9kZWxOYW1lIHNvIGNsaWVudCBjb2RlIGNhbiBkZXJpdmUgd2hhdCBtb2RlbCB0aGlzIGZhY3Rvcnlcblx0XHQgKiBpcyBmb3IgZnJvbSBhbnkgZ2l2ZW4gZmFjdG9yeS5cblx0XHQgKiBAdHlwZSBzdHJpbmdcblx0XHQgKi9cblx0XHRtb2RlbE5hbWUsXG5cdFx0LyoqXG5cdFx0ICogVGhpcyBpcyB0aGUgY2xhc3MgZGVmaW5pdGlvbiBmb3IgdGhlIEVudGl0eS4gIFR5cGljYWxseSB0aGlzIGlzXG5cdFx0ICogcmV0cmlldmVkIGZvciB0aGUgYWJpbGl0eSB0byBkbyBpbnN0YW5jZW9mIGNoZWNrcy5cblx0XHQgKi9cblx0XHRjbGFzc0RlZjogRW50aXR5LFxuXHRcdC8qKlxuXHRcdCAqIFRoaXMgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBFbnRpdHkgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMgd2l0aCB0aGVcblx0XHQgKiBpbmRpY2F0aW9uIHRoaXMgaXMgYSBuZXcgbm9uLXBlcnNpc3RlZCBlbnRpdHkuICBUaGlzIG1lYW5zOlxuXHRcdCAqXG5cdFx0ICogLSBBbGwgZmllbGQgdmFsdWVzIGFyZSBwb3B1bGF0ZWQgYW5kIGFueSBub3QgcHJvdmlkZWQgd2lsbCBiZVxuXHRcdCAqICAgcG9wdWxhdGVkIHdpdGggZGVmYXVsdCB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgc2NoZW1hLlxuXHRcdCAqIC0gR2VuZXJhdGVzIHRlbXBvcmFyeSB1bmlxdWUgaWRzIGZvciB0aGUgcHJpbWFyeSBrZXkgZmllbGRzIG9uIHRoZVxuXHRcdCAqICAgZW50aXR5ICh1c2luZyBjdWlkKS5cblx0XHQgKiAtIFNldHMgdGhlIGBpc05ld2AgZmxhZyB0byB0cnVlIGZvciB0aGUgZW50aXR5IHNvIGNsaWVudCBjb2RlIGlzIGFibGVcblx0XHQgKiAgIHRvIGRpc2NvdmVyIHdoaWNoIGVudGl0aWVzIGhhdmUgbmV2ZXIgYmVlbiBwZXJzaXN0ZWQuXG5cdFx0ICogLSBUaGlzIGZhY3RvcnkgbWV0aG9kIGV4cGVjdHMgZmllbGRzIGFuZCB2YWx1ZXMgdG8gYmUgXCJwcmVwYXJlZFwiLlxuXHRcdCAqICAgV2hhdCB0aGF0IG1lYW5zIGlzIHRoYXQgZm9yIGFueSBmaWVsZHMgdGhhdCB0aGUgc2NoZW1hIGRlc2NyaWJlZCBhc1xuXHRcdCAqICAgaGF2aW5nIGEgYHJhd2AgcHJvcGVydHkgKGkuZS4geyBFVlRfZGVzYzogeyByYXc6ICdzb21ldGhpbmcnIH0gfSlcblx0XHQgKiAgIHRoZSB2YWx1ZSBzaG91bGQgYmUgb2YgdGhlIGNvcnJlY3QgdHlwZSBmb3IgdGhhdCByYXcgcHJvcGVydHkgYW5kLlxuXHRcdCAqICAgVGhpcyBhbHNvIG1lYW5zIGlzIHRoYXQgZm9yIGFueSBmaWVsZHMgdGhlIHNjaGVtYSBkZXNjcmliZXMgYXMgYVxuXHRcdCAqICAgZGF0ZS10aW1lIChmb3JtYXQpIG9yIG1vbmV5IChmb3JtYXQpIGZpZWxkLCB0aGUgdmFsdWUgaXMgZXhwZWN0ZWRcblx0XHQgKiAgIHRvIGJlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9iamVjdC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZHNBbmRWYWx1ZXNcblx0XHQgKiBAcmV0dXJuIHtFbnRpdHl9IGFuIGluc3RhbmNlIG9mIEVudGl0eVxuXHRcdCAqL1xuXHRcdGNyZWF0ZU5ldzogKCBmaWVsZHNBbmRWYWx1ZXMgKSA9PiBuZXcgRW50aXR5KFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZmllbGRzQW5kVmFsdWVzLFxuXHRcdFx0c2NoZW1hLFxuXHRcdFx0ZmllbGRQcmVmaXhlcyxcblx0XHRcdHRydWVcblx0XHQpLFxuXHRcdC8qKlxuXHRcdCAqIFRoaXMgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBFbnRpdHkgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMgd2l0aCB0aGVcblx0XHQgKiBpbmRpY2F0aW9uIHRoaXMgcmVwcmVzZW50cyB0aGUgZW50aXR5IGFzIGlzIGluIHRoZSBkYi4gIFRoaXMgbWVhbnM6XG5cdFx0ICpcblx0XHQgKiAtIEFsbCBmaWVsZCB2YWx1ZXMgYXJlIE5PVCBwb3B1bGF0ZWQgaWYgbWlzc2luZyB2YWx1ZXMuICBUaGlzIGlzXG5cdFx0ICogICBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgY29udGV4dHMgbGlrZSB1bmF1dGhvcml6ZWQgdmlld3Mgd2hlcmVcblx0XHQgKiAgIG9ubHkgcGFydGlhbCBlbnRpdGllcyBhcmUgcmV0dXJuZWQgaW4gUkVTVCByZXNwb25zZXMuXG5cdFx0ICogLSBpc05ldyBmbGFnIGlzIHNldCB0byBmYWxzZSAoYW5kIG5ldmVyIGNoYW5nZXMgZm9yIHRoaXMgZW50aXR5KVxuXHRcdCAqIC0gVGhlIGluY29taW5nIHZhbHVlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIGV4YWN0IHNoYXBlIGFzXG5cdFx0ICogICBkZXNjcmliZWQgYnkgdGhlIHNjaGVtYSBmb3IgdGhlIGVudGl0eSBtb2RlbC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZHNBbmRWYWx1ZXNcblx0XHQgKiBAcmV0dXJuIHtFbnRpdHl9IGFuIGluc3RhbmNlIG9mIEVudGl0eVxuXHRcdCAqL1xuXHRcdGZyb21FeGlzdGluZzogKCBmaWVsZHNBbmRWYWx1ZXMgKSA9PiBuZXcgRW50aXR5KFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZmllbGRzQW5kVmFsdWVzLFxuXHRcdFx0c2NoZW1hLFxuXHRcdFx0ZmllbGRQcmVmaXhlc1xuXHRcdCksXG5cdH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRW50aXR5RmFjdG9yeTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0LCBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGhhcyBhIFwicmF3XCIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QgYW5kIGhhcyBhIGByYXdgIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgaGFzUmF3UHJvcGVydHkgPSAoIHZhbHVlICkgPT4gaXNQbGFpbk9iamVjdCggdmFsdWUgKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCB2YWx1ZS5yYXcgKTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgdmFsdWUgaGFzIGEgXCJwcmV0dHlcIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGEgYHByZXR0eWAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNQcmV0dHlQcm9wZXJ0eSA9ICggdmFsdWUgKSA9PiBpc1BsYWluT2JqZWN0KCB2YWx1ZSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHZhbHVlLnByZXR0eSApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgYSBcInJlbmRlcmVkXCIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QgYW5kIGhhcyBhIGByZW5kZXJlZGAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNSZW5kZXJlZFByb3BlcnR5ID0gKCB2YWx1ZSApID0+IGlzUGxhaW5PYmplY3QoIHZhbHVlICkgJiZcblx0ISBpc1VuZGVmaW5lZCggdmFsdWUucmVuZGVyZWQgKTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgdmFsdWUgaGFzIGEgXCJmb3JtYXRcIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGEgYGZvcm1hdGAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNGb3JtYXRQcm9wZXJ0eSA9ICggdmFsdWUgKSA9PiBpc1BsYWluT2JqZWN0KCB2YWx1ZSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHZhbHVlLmZvcm1hdCApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgYSBcImVudW1cIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGFuIGVudW1cbiAqIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgaGFzRW51bVByb3BlcnR5ID0gKCB2YWx1ZSApID0+IGlzUGxhaW5PYmplY3QoIHZhbHVlICkgJiZcblx0ISBpc1VuZGVmaW5lZCggdmFsdWUuZW51bSApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBhIFwidmFsdWUgb2JqZWN0XCIgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHZhbHVlIG9iamVjdCBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVmFsdWVPYmplY3RGaWVsZCA9ICggZmllbGQsIHNjaGVtYSApID0+IHtcblx0cmV0dXJuIGlzRGF0ZVRpbWVGaWVsZCggZmllbGQsIHNjaGVtYSApIHx8IGlzTW9uZXlGaWVsZCggZmllbGQsIHNjaGVtYSApO1xufTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgaXMgYSBkYXRlLXRpbWUgZmllbGQgYWNjb3JkaW5nIHRvIHRoZVxuICogcHJvdmlkZWQgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZFxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyBpdCBpcyBhIGRhdGUtdGltZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGF0ZVRpbWVGaWVsZCA9ICggZmllbGQsIHNjaGVtYSApID0+XG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGQgXSApICYmXG5cdGhhc0Zvcm1hdFByb3BlcnR5KCBzY2hlbWFbIGZpZWxkIF0gKSAmJlxuXHRzY2hlbWFbIGZpZWxkIF0uZm9ybWF0ID09PSAnZGF0ZS10aW1lJztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgaXMgYSBVVEMgZGF0ZS10aW1lIGZpZWxkLlxuICpcbiAqIElmIHNjaGVtYSBpcyBwcm92aWRlZCwgdGhpcyBhbHNvIGNvbnNpZGVycyB3aGV0aGVyIHRoaXMgaXMgYSBkYXRlLXRpbWUgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGVUaW1lRmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hIFtvcHRpb25hbF1cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgbWVhbnMgdGhpcyBpcyBhIFVUQyBmaWVsZC4gIElmIHNjaGVtYSBpcyBwcm92aWRlZCBpdFxuICogbWVhbnMgdGhpcyBpcyBhbHNvIGEgZGF0ZS10aW1lIGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNVVENEYXRlVGltZUZpZWxkID0gKCBkYXRlVGltZUZpZWxkTmFtZSwgc2NoZW1hID0gbnVsbCApID0+IHtcblx0cmV0dXJuIHNjaGVtYSAhPT0gbnVsbCA/XG5cdFx0aXNEYXRlVGltZUZpZWxkKCBkYXRlVGltZUZpZWxkTmFtZSwgc2NoZW1hICkgJiZcblx0XHRcdGRhdGVUaW1lRmllbGROYW1lLmluZGV4T2YoICdfZ210JyApID4gMCA6XG5cdFx0ZGF0ZVRpbWVGaWVsZE5hbWUuaW5kZXhPZiggJ19nbXQnICkgPiAwO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZpZWxkIHJlcHJlc2VudHMgYSBwcmltYXJ5IGtleSBmaWVsZCB1c2luZyB0aGVcbiAqIHByb3ZpZGVkIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBpdCBpcyBhIHByaW1hcnkga2V5IGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNQcmltYXJ5S2V5RmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJpbWFyeV9rZXkgKTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZpZWxkIHJlcHJlc2VudHMgYSByZWFkb25seSBmaWVsZCB1c2luZyB0aGVcbiAqIHByb3ZpZGVkIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBpdCBpcyBhIHJlYWRvbmx5IGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNSZWFkT25seSA9ICggZmllbGROYW1lLCBzY2hlbWEgKSA9PlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkgJiZcblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXS5yZWFkb25seSApICYmXG5cdHNjaGVtYVsgZmllbGROYW1lIF0ucmVhZG9ubHk7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZpZWxkIGlzIGEgXCJlbnRpdHlcIiBmaWVsZCB1c2luZyB0aGUgcHJvdmlkZWRcbiAqIHNjaGVtYS5cbiAqXG4gKiBBbiBcImVudGl0eVwiIGZpZWxkIGlzIGFueSBmaWVsZCB0aGF0IHNhdGlzZmllcyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogLSBmaWVsZCBleGlzdHMgaW4gdGhlIHNjaGVtYVxuICogLSBpdCBpcyBub3QgcmVhZG9ubHkgb3IgaXMgYSBwcmltYXJ5IGtleSBmaWVsZC5cbiAqIC0gaXQgaXMgbm90IGEgdXRjIGZpZWxkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBpcyBhbiBlbnRpdHkgZmllbGRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRW50aXR5RmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdCggISBpc1JlYWRPbmx5KCBmaWVsZE5hbWUsIHNjaGVtYSApIHx8XG5cdFx0aXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hIClcblx0KSAmJlxuXHQhIGlzVVRDRGF0ZVRpbWVGaWVsZCggZmllbGROYW1lICkgJiZcblx0ZmllbGROYW1lICE9PSAnX3Byb3RlY3RlZCc7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpZWxkIHJlcHJlc2VudHMgYSB2YWx1ZSBvZiBtb25leSBmcm9tIHRoZSBwcm92aWRlZFxuICogc2NoZW1hLlxuICpcbiAqIEEgZmllbGQgaXMgYSBtb25leSBmaWVsZCBpZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHNhdGlzZmllZDpcbiAqXG4gKiAtIEl0IGV4aXN0cyBpbiB0aGUgc2NoZW1hXG4gKiAtIEl0IGhhcyBhIHByZXR0eSBwcm9wZXJ0eVxuICogLSBUaGUgcHJldHR5IHByb3BlcnR5IHZhbHVlIGhhcyBhIGZvcm1hdCBwcm9wZXJ0eS5cbiAqIC0gVGhlIGZvcm1hdCBwcm9wZXJ0eSBpcyBlcXVhbCB0byAnbW9uZXknXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBpdCBpcyBhIG1vbmV5IGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNNb25leUZpZWxkID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+XG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0gKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMgKSAmJlxuXHRoYXNQcmV0dHlQcm9wZXJ0eSggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzICkgJiZcblx0aGFzRm9ybWF0UHJvcGVydHkoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5wcmV0dHkgKSAmJlxuXHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucHJldHR5LmZvcm1hdCA9PT0gJ21vbmV5JztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZmllbGQgaXMgYW4gZW51bSB0eXBlIGZpZWxkIGFzIGRlZmluZWQgaW4gdGhlIHByb3ZpZGVkXG4gKiBzY2hlbWEuXG4gKlxuICogTm90ZTogdGhpcyBvbmx5IGV2YWx1YXRlcyB0aGUgdG9wLWxldmVsIGZvciB0aGUgZmllbGQgc2NoZW1hLiAgSWYgdGhlIGZpZWxkXG4gKiBpbiB0aGUgc2NoZW1hIGlzIG9mIHR5cGUgJ29iamVjdCcgYW5kIG9uZSBvZiB0aGUgb2JqZWN0IHByb3BlcnRpZXMgaXMgb2YgdHlwZVxuICogJ2VudW0nIHRoaXMgd2lsbCBub3QgY29uc2lkZXIgaXQgYW4gXCJlbnVtXCIgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgaWYgdGhlIGZpZWxkIGlzIGFuIGVudW0gdHlwZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRW51bUZpZWxkID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+XG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0gKSAmJlxuXHRoYXNFbnVtUHJvcGVydHkoIHNjaGVtYVsgZmllbGROYW1lIF0gKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLmVudW0ubGVuZ3RoICkgJiZcblx0c2NoZW1hWyBmaWVsZE5hbWUgXS5lbnVtLmxlbmd0aCA+IDA7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgYXBwbHlGaWx0ZXJzIH0gZnJvbSAnQHdvcmRwcmVzcy9ob29rcyc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogQ29uc3RhbnRzIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgXCJzYXZlIHN0YXRlXCIgZm9yIGFuIGVudGl0eS5cbiAqXG4gKiBAdHlwZSB7e0NMRUFOOiBTeW1ib2wsIE5FVzogU3ltYm9sLCBESVJUWTogU3ltYm9sfX1cbiAqL1xuZXhwb3J0IGNvbnN0IFNBVkVfU1RBVEUgPSB7XG5cdENMRUFOOiBTeW1ib2woICdFbnRpdHkgaXMgcGVyc2lzdGVkLicgKSxcblx0TkVXOiBTeW1ib2woICdFbnRpdHkgaXMgbmV3LicgKSxcblx0RElSVFk6IFN5bWJvbCggJ0V4aXN0aW5nIGVudGl0eSBoYXMgY2hhbmdlcyBhbmQgbmVlZHMgcGVyc2lzdGVkLicgKSxcbn07XG5cbi8qKlxuICogVmFsaWRhdGlvbiB0eXBlcyBhcmUgZm9yIHNjaGVtYSdzIHRoYXQgaGF2ZSB2YWx1ZSB2YXJpYXRpb25zLlxuICogQHR5cGUge3tSQVc6IHN0cmluZywgUkVOREVSRUQ6IHN0cmluZywgUFJFVFRZOiBzdHJpbmd9fVxuICovXG5leHBvcnQgY29uc3QgVkFMSURBVEVfVFlQRSA9IHtcblx0UkFXOiAncmF3Jyxcblx0UkVOREVSRUQ6ICdyZW5kZXJlZCcsXG5cdFBSRVRUWTogJ3ByZXR0eScsXG59O1xuXG4vKipcbiAqIFByaXZhdGUgcHJvcGVydGllcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIEJhc2UgRW50aXR5IENsYXNzXG4gKiBAdHlwZSB7e3NhdmVTdGF0ZTogYm9vbGVhbn19XG4gKi9cbmV4cG9ydCBjb25zdCBQUklWQVRFX1BST1BFUlRJRVMgPSB7XG5cdFNBVkVfU1RBVEU6IFN5bWJvbCggJ2Jhc2VFbnRpdHlQcml2YXRlUHJvcGVydGllc1NhdmVTdGF0ZScgKSxcblx0VkFMSURBVEVfVFlQRVM6IFN5bWJvbCggJ2Jhc2VFbnRpdHlQcml2YXRlUHJvcGVydGllc1ZhbGlkYXRlVHlwZXMnICksXG59O1xuXG4vKipcbiAqIEhhcmRjb2RlZCBsaXN0IG9mIG1vZGVsIHByZWZpeGVzIGZvciBmaWVsZHMgb24gbW9kZWxzLlxuXG4gKiBBIG1vZGVsIHByZWZpeCBpcyBzb21ldGhpbmcgdGhhdCBcIm5hbWVzcGFjZXNcIiBhIGZpZWxkIG9uIGEgbW9kZWwuICBGb3JcbiAqIGV4YW1wbGUsIGlmIHRoZSBmaWVsZCBpcyBcIkVWVF9JRFwiLCB0aGVuIHRoZSBwcmVmaXggaXMgXCJFVlRcIjsgaWYgdGhlIGZpZWxkIGlzXG4gKiBcIkRUVF9FVlRfc3RhcnRcIiwgdGhlbiB0aGUgcHJlZml4ZXMgYXJlIFwiRFRUXCIsIGFuZCBcIkRUVF9FVlRcIi5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7T2JqZWN0fSBBIGZpbHRlcmVkIG9iamVjdCBpbmRleGVkIGJ5IG1vZGVsIG5hbWUgYW5kIHRoZSB2YWx1ZXMgYXJlXG4gKiBhbiBhcnJheSBvZiBtb2RlbCBwcmVmaXhlcyBmb3IgdGhhdCBtb2RlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX1BSRUZJWEVTID0gKCBtb2RlbE5hbWUgKSA9PiB7XG5cdGNvbnN0IHByZWZpeE1hcCA9IGFwcGx5RmlsdGVycyhcblx0XHQnRkhFRV9fRU5USVRZX0ZBQ1RPUllfX0NPTlNUQU5UU19fTU9ERUxfUFJFRklYRVMnLFxuXHRcdHtcblx0XHRcdGFuc3dlcjogWyAnQU5TJyBdLFxuXHRcdFx0YXR0ZW5kZWU6IFsgJ0FUVCcgXSxcblx0XHRcdGNoYW5nZV9sb2c6IFsgJ0xPRycgXSxcblx0XHRcdGNoZWNraW46IFsgJ0NISycgXSxcblx0XHRcdGNvdW50cnk6IFsgJ0NOVCcgXSxcblx0XHRcdGN1cnJlbmN5OiBbICdDVVInIF0sXG5cdFx0XHRjdXJyZW5jeV9wYXltZW50X21ldGhvZDogWyAnQ1BNJyBdLFxuXHRcdFx0ZGF0ZXRpbWU6IFsgJ0RUVCcsICdEVFRfRVZUJyBdLFxuXHRcdFx0ZGF0ZXRpbWVfdGlja2V0OiBbICdEVEsnIF0sXG5cdFx0XHRldmVudDogWyAnRVZUJyBdLFxuXHRcdFx0ZXZlbnRfbWVzc2FnZV90ZW1wbGF0ZTogWyAnRU1UJyBdLFxuXHRcdFx0ZXZlbnRfcXVlc3Rpb25fZ3JvdXA6IFsgJ0VRRycgXSxcblx0XHRcdGV2ZW50X3ZlbnVlOiBbICdFVlYnIF0sXG5cdFx0XHRleHRyYV9qb2luOiBbICdFWEonIF0sXG5cdFx0XHRleHRyYV9tZXRhOiBbICdFWE0nIF0sXG5cdFx0XHRsaW5lX2l0ZW06IFsgJ0xJTicgXSxcblx0XHRcdG1lc3NhZ2U6IFsgJ01TRycgXSxcblx0XHRcdG1lc3NhZ2VfdGVtcGxhdGU6IFsgJ01UUCcgXSxcblx0XHRcdG1lc3NhZ2VfdGVtcGxhdGVfZ3JvdXA6IFsgJ0dSUCcsICdNVFAnIF0sXG5cdFx0XHRwYXltZW50OiBbICdQQVknIF0sXG5cdFx0XHRwYXltZW50X21ldGhvZDogWyAnUE1EJyBdLFxuXHRcdFx0cG9zdF9tZXRhOiBbICdtZXRhJyBdLFxuXHRcdFx0cHJpY2U6IFsgJ1BSQycgXSxcblx0XHRcdHByaWNlX3R5cGU6IFsgJ1BSVCcgXSxcblx0XHRcdHF1ZXN0aW9uOiBbICdRU1QnIF0sXG5cdFx0XHRxdWVzdGlvbl9ncm91cDogWyAnUVNHJyBdLFxuXHRcdFx0cXVlc3Rpb25fZ3JvdXBfcXVlc3Rpb246IFsgJ1FHUScgXSxcblx0XHRcdHF1ZXN0aW9uX29wdGlvbjogWyAnUVNPJyBdLFxuXHRcdFx0cmVjdXJyZW5jZTogWyAnUkNSJyBdLFxuXHRcdFx0cmVnaXN0cmF0aW9uOiBbICdSRUcnIF0sXG5cdFx0XHRyZWdpc3RyYXRpb25fcGF5bWVudDogWyAnUlBZJyBdLFxuXHRcdFx0c3RhdGU6IFsgJ1NUQScgXSxcblx0XHRcdHN0YXR1czogWyAnU1RTJyBdLFxuXHRcdFx0dGVybTogWyAndGVybScgXSxcblx0XHRcdHRlcm1fcmVsYXRpb25zaGlwOiBbXSxcblx0XHRcdHRlcm1fdGF4b25vbXk6IFsgJ3Rlcm1fdGF4b25vbXknIF0sXG5cdFx0XHR0aWNrZXQ6IFsgJ1RLVCcgXSxcblx0XHRcdHRpY2tldF9wcmljZTogWyAnVEtQJyBdLFxuXHRcdFx0dGlja2V0X3RlbXBsYXRlOiBbICdUVE0nIF0sXG5cdFx0XHR0cmFuc2FjdGlvbjogWyAnVFhOJyBdLFxuXHRcdFx0dmVudWU6IFsgJ1ZOVScgXSxcblx0XHRcdHdwX3VzZXI6IFsgJ3VzZXInIF0sXG5cdFx0fSApO1xuXHRyZXR1cm4gISBpc1VuZGVmaW5lZCggcHJlZml4TWFwWyBtb2RlbE5hbWUgXSApID9cblx0XHRwcmVmaXhNYXBbIG1vZGVsTmFtZSBdIDpcblx0XHRbXTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Y2FtZWxDYXNlLFxuXHR1cHBlckZpcnN0LFxuXHRmb3JFYWNoLFxuXHRpc1VuZGVmaW5lZCxcblx0aXNBcnJheSxcblx0a2V5cyxcblx0c29ydEJ5LFxufSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGN1aWQgZnJvbSAnY3VpZCc7XG5pbXBvcnQgeyBJbnZhbGlkQXJndW1lbnQgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGFzc2VydFZhbGlkRmllbGRBbmRWYWx1ZUFnYWluc3RTY2hlbWEsXG5cdGFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkLFxufSBmcm9tICcuL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHtcblx0ZGVyaXZlUmVuZGVyZWRWYWx1ZSxcblx0ZGVyaXZlUHJlcGFyZWRWYWx1ZUZvckZpZWxkLFxuXHRnZXRSZWxhdGlvbk5hbWVGcm9tTGluayxcblx0Z2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvckNsb25pbmcsXG5cdGdldEJhc2VGaWVsZHNBbmRWYWx1ZXNGb3JQZXJzaXN0aW5nLFxuXHRnZXRQcmltYXJ5S2V5RmllbGRzRnJvbVNjaGVtYSxcblx0Z2V0RW50aXR5RmllbGRzRnJvbVNjaGVtYSxcblx0Z2V0RGVmYXVsdFZhbHVlRm9yRmllbGQsXG5cdGRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkLFxufSBmcm9tICcuL2V4dHJhY3RvcnMnO1xuaW1wb3J0IHtcblx0aXNFbnRpdHlGaWVsZCxcblx0aXNQcmltYXJ5S2V5RmllbGQsXG59IGZyb20gJy4vYm9vbGVhbnMnO1xuaW1wb3J0IHsgUFJJVkFURV9QUk9QRVJUSUVTLCBTQVZFX1NUQVRFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKiooXG4gKiBBIGdlbmVyaWMgZ2V0dGVyIGNyZWF0b3IgZm9yIGEgcHJvdmlkZWQgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lICBUaGUgbmFtZSBvZiB0aGUgYWNjZXNzb3IuXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIHVzZWQgdG8gcGFzcyB0aHJvdWdoIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlXG4gKiBPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUdldHRlciA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSwgb3B0cyA9IHt9ICkgPT4ge1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGluc3RhbmNlLCBmaWVsZE5hbWUsIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRWYWx1ZTtcblx0XHR9LFxuXHRcdC4uLm9wdHMsXG5cdH0gKTtcbn07XG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIGEgZ2V0dGVyIHRoYXQgY2FsbHMgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIHdoZW4gaW52b2tlZC5cbiAqXG4gKiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgdGhlIGBpbnN0YW5jZWAgYXJndW1lbnQgcGFzc2VkIHRocm91Z2hcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oT2JqZWN0KX0gY2FsbEJhY2tcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVDYWxsYmFja0dldHRlciA9IChcblx0aW5zdGFuY2UsXG5cdHByb3BlcnR5TmFtZSxcblx0Y2FsbEJhY2ssXG5cdG9wdHMgPSB7fVxuKSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggaW5zdGFuY2UsIHByb3BlcnR5TmFtZSwge1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiBjYWxsQmFjayggaW5zdGFuY2UgKTtcblx0XHR9LFxuXHRcdC4uLm9wdHMsXG5cdH0gKTtcbn07XG5cbi8qKlxuICogQSBnZW5lcmljIGdldHRlciBhbmQgc2V0dGVyIGNyZWF0b3IgZm9yIGEgcHJvdmlkZWQgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gIGluaXRpYWxGaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCwgcGFzcyB0aHJvdWdoIG9wdGlvbnMgdXNlZCBieVxuICogT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVHZXR0ZXJBbmRTZXR0ZXIgPSAoXG5cdGluc3RhbmNlLFxuXHRmaWVsZE5hbWUsXG5cdGluaXRpYWxGaWVsZFZhbHVlLFxuXHRvcHRzID0ge30sXG4pID0+IHtcblx0bGV0IHByb3BlcnR5VmFsdWUgPSBpbml0aWFsRmllbGRWYWx1ZTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgZmllbGROYW1lLCB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWU7XG5cdFx0fSxcblx0XHRzZXQoIHJlY2VpdmVkVmFsdWUgKSB7XG5cdFx0XHRjb25zdCBpc1ByaW1hcnlGaWVsZCA9IGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGluc3RhbmNlLnNjaGVtYSApO1xuXHRcdFx0aWYgKCAhIGluc3RhbmNlLmlzTmV3ICYmIGlzUHJpbWFyeUZpZWxkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhc3NlcnRWYWxpZFZhbHVlRm9yUHJlcGFyZWRGaWVsZChcblx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRyZWNlaXZlZFZhbHVlLFxuXHRcdFx0XHRpbnN0YW5jZVxuXHRcdFx0KTtcblx0XHRcdGlmICggISBpc1ByaW1hcnlGaWVsZCApIHtcblx0XHRcdFx0c2V0U2F2ZVN0YXRlKCBpbnN0YW5jZSwgU0FWRV9TVEFURS5ESVJUWSApO1xuXHRcdFx0XHRzZXRGaWVsZFRvUGVyc2lzdCggaW5zdGFuY2UsIGZpZWxkTmFtZSApO1xuXHRcdFx0fVxuXHRcdFx0cHJvcGVydHlWYWx1ZSA9IHJlY2VpdmVkVmFsdWU7XG5cdFx0fSxcblx0XHQuLi5vcHRzLFxuXHR9ICk7XG59O1xuXG4vKipcbiAqIEEgZ2V0dGVyIGFuZCBzZXR0ZXIgY3JlYXRvciBmb3IgYW4gZmllbGQgYWxpYXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxGaWVsZE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbGlhc0ZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyID0gKFxuXHRpbnN0YW5jZSxcblx0b3JpZ2luYWxGaWVsZE5hbWUsXG5cdGFsaWFzRmllbGROYW1lLFxuXHRvcHRzID0ge30sXG4pID0+IHtcblx0aWYgKCBvcmlnaW5hbEZpZWxkTmFtZSAhPT0gYWxpYXNGaWVsZE5hbWUgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgYWxpYXNGaWVsZE5hbWUsIHtcblx0XHRcdGdldCgpIHtcblx0XHRcdFx0cmV0dXJuIGluc3RhbmNlWyBvcmlnaW5hbEZpZWxkTmFtZSBdO1xuXHRcdFx0fSxcblx0XHRcdHNldCggcmVjZWl2ZWRWYWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuIGluc3RhbmNlWyBvcmlnaW5hbEZpZWxkTmFtZSBdID0gcmVjZWl2ZWRWYWx1ZTtcblx0XHRcdH0sXG5cdFx0XHQuLi5vcHRzLFxuXHRcdH0gKTtcblx0fVxufTtcblxuLyoqXG4gKiBBIGdldHRlciBjcmVhdG9yIGZvciBhIGZpZWxkIGFsaWFzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpbmFsRmllbGROYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpYXNGaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBbGlhc0dldHRlciA9IChcblx0aW5zdGFuY2UsXG5cdG9yaWdpbmFsRmllbGROYW1lLFxuXHRhbGlhc0ZpZWxkTmFtZSxcblx0b3B0cyA9IHt9LFxuKSA9PiB7XG5cdGlmICggb3JpZ2luYWxGaWVsZE5hbWUgIT09IGFsaWFzRmllbGROYW1lICkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggaW5zdGFuY2UsIGFsaWFzRmllbGROYW1lLCB7XG5cdFx0XHRnZXQoKSB7XG5cdFx0XHRcdHJldHVybiBpbnN0YW5jZVsgb3JpZ2luYWxGaWVsZE5hbWUgXTtcblx0XHRcdH0sXG5cdFx0XHQuLi5vcHRzLFxuXHRcdH0gKTtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZmx1ZW50IHNldHRlciBvbiB0aGUgcHJvdmlkZWQgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBmaWVsZCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgIE9wdGlvbnMgZm9yIE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRmx1ZW50U2V0dGVyID0gKCBpbnN0YW5jZSwgZmllbGROYW1lLCBvcHRzID0ge30gKSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggaW5zdGFuY2UsICdzZXQnICsgdXBwZXJGaXJzdCggZmllbGROYW1lICksIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gKCByZWNlaXZlZFZhbHVlICkgPT4ge1xuXHRcdFx0XHRpbnN0YW5jZVsgZmllbGROYW1lIF0gPSByZWNlaXZlZFZhbHVlO1xuXHRcdFx0XHRyZXR1cm4gaW5zdGFuY2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0Li4ub3B0cyxcblx0fSApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGluaXRpYWwgZ2V0dGVycyBhbmQgc2V0dGVycyBmb3IgZW50aXRpZXMgb24gdGhlIHByb3ZpZGVkIGVudGl0eVxuICogaW5zdGFuY2UgdXNpbmcgdGhlIGdpdmVuIGRhdGEuXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIGtleXMgb24gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVFbnRpdHlHZXR0ZXJzQW5kU2V0dGVycyA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdGNvbnN0IHByaW1hcnlLZXlzID0gW107XG5cdGZvckVhY2goXG5cdFx0aW5zdGFuY2Uub3JpZ2luYWxGaWVsZHNBbmRWYWx1ZXMsXG5cdFx0KCBmaWVsZFZhbHVlLCBmaWVsZE5hbWUgKSA9PiB7XG5cdFx0XHRjb25zdCBpc1ByaW1hcnlLZXkgPSBpc1ByaW1hcnlLZXlGaWVsZCggZmllbGROYW1lLCBpbnN0YW5jZS5zY2hlbWEgKTtcblx0XHRcdHNldFZhbGlkYXRlVHlwZUZvckZpZWxkKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlICk7XG5cdFx0XHRpZiAoIGlzRW50aXR5RmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2Uuc2NoZW1hICkgKSB7XG5cdFx0XHRcdGlmICggaW5zdGFuY2UuaXNOZXcgKSB7XG5cdFx0XHRcdFx0YXNzZXJ0VmFsaWRWYWx1ZUZvclByZXBhcmVkRmllbGQoXG5cdFx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFzc2VydFZhbGlkRmllbGRBbmRWYWx1ZUFnYWluc3RTY2hlbWEoXG5cdFx0XHRcdFx0XHRpbnN0YW5jZS5tb2RlbE5hbWUsXG5cdFx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNldEluaXRpYWxFbnRpdHlGaWVsZHNBbmRWYWx1ZXMoXG5cdFx0XHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0aXNQcmltYXJ5S2V5XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGZpZWxkTmFtZSA9PT0gJ19jYWxjdWxhdGVkX2ZpZWxkcycgKSB7XG5cdFx0XHRcdHNldENhbGN1bGF0ZWRGaWVsZEFuZFZhbHVlcyggaW5zdGFuY2UsIGZpZWxkVmFsdWUgKTtcblx0XHRcdH1cblx0XHRcdGlmICggZmllbGROYW1lID09PSAnX3Byb3RlY3RlZCcgKSB7XG5cdFx0XHRcdHBvcHVsYXRlUHJvdGVjdGVkRmllbGRzUHJvcGVydHkoIGluc3RhbmNlLCBmaWVsZFZhbHVlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGZpZWxkTmFtZSA9PT0gJ2xpbmsnICkge1xuXHRcdFx0XHRjcmVhdGVHZXR0ZXIoIGluc3RhbmNlLCAnbGluaycsIGZpZWxkVmFsdWUgKTtcblx0XHRcdH1cblx0XHRcdGlmICggZmllbGROYW1lID09PSAnX2xpbmtzJyApIHtcblx0XHRcdFx0c2V0UmVzb3VyY2VzKCBpbnN0YW5jZSwgZmllbGRWYWx1ZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhIGluc3RhbmNlLmlzTmV3ICYmIGlzUHJpbWFyeUtleSApIHtcblx0XHRcdFx0cHJpbWFyeUtleXMucHVzaCggZmllbGROYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXHRpZiAoICEgaW5zdGFuY2UuaXNOZXcgJiYgcHJpbWFyeUtleXMubGVuZ3RoICkge1xuXHRcdGNyZWF0ZVByaW1hcnlLZXlGaWVsZEdldHRlcnMoIGluc3RhbmNlLCBwcmltYXJ5S2V5cyApO1xuXHR9XG5cblx0cG9wdWxhdGVQcmltYXJ5S2V5cyggaW5zdGFuY2UgKTtcblx0cG9wdWxhdGVNaXNzaW5nRmllbGRzKCBpbnN0YW5jZSApO1xufTtcblxuLyoqXG4gKiBQb3B1bGF0ZXMgdGhlIGBwcm90ZWN0ZWRGaWVsZHNgIHByb3BlcnR5IG9uIHRoZSBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3RlY3RlZEZpZWxkc1xuICovXG5jb25zdCBwb3B1bGF0ZVByb3RlY3RlZEZpZWxkc1Byb3BlcnR5ID0gKCBpbnN0YW5jZSwgcHJvdGVjdGVkRmllbGRzICkgPT4ge1xuXHQvLyBnZXQgYW55IGNhbGN1bGF0ZWQgcHJvdGVjdGVkIGZpZWxkcy5cblx0Y29uc3QgY2FsY3VsYXRlZEZpZWxkcyA9IGluc3RhbmNlXG5cdFx0Lm9yaWdpbmFsRmllbGRzQW5kVmFsdWVzXG5cdFx0Ll9jYWxjdWxhdGVkX2ZpZWxkcyB8fCB7fTtcblx0aWYgKFxuXHRcdGNhbGN1bGF0ZWRGaWVsZHMuX3Byb3RlY3RlZCAmJlxuXHRcdGlzQXJyYXkoIGNhbGN1bGF0ZWRGaWVsZHMuX3Byb3RlY3RlZCApXG5cdCkge1xuXHRcdHByb3RlY3RlZEZpZWxkcyA9IFtcblx0XHRcdC4uLnByb3RlY3RlZEZpZWxkcyxcblx0XHRcdC4uLmNhbGN1bGF0ZWRGaWVsZHMuX3Byb3RlY3RlZCxcblx0XHRdO1xuXHR9XG5cdGNyZWF0ZUdldHRlciggaW5zdGFuY2UsICdwcm90ZWN0ZWRGaWVsZHMnLCBwcm90ZWN0ZWRGaWVsZHMgKTtcbn07XG5cbi8qKlxuICogVGhpcyBwb3B1bGF0ZXMgcHJpbWFyeSBrZXkgZmllbGRzLlxuICogTm90ZSB0aGF0IGl0IGFsc28gb3ZlcnJpZGVzIGFueSBwcmltYXJ5IGtleSB2YWx1ZXMvcHJvcGVydGllcyB0aGF0IGFyZVxuICogYWxyZWFkeSBzZXQgaW4gdGhlIGVudGl0eSBzbyBpcyBvbmx5IHByb2Nlc3NlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBuZXcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKi9cbmNvbnN0IHBvcHVsYXRlUHJpbWFyeUtleXMgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRpZiAoICEgaW5zdGFuY2UuaXNOZXcgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IHByaW1hcnlLZXlzID0gZ2V0UHJpbWFyeUtleUZpZWxkc0Zyb21TY2hlbWEoIGluc3RhbmNlICk7XG5cdGZvckVhY2goIHByaW1hcnlLZXlzLCAoXG5cdFx0c2NoZW1hUHJvcGVydGllcyxcblx0XHRzY2hlbWFGaWVsZFxuXHQpID0+IHtcblx0XHQvLyBhbHdheXMgZGVsZXRlIGFuZCBvdmVycmlkZSB3aGF0IGlzIGV4aXN0aW5nLlxuXHRcdGlmICggaW5zdGFuY2VbIHNjaGVtYUZpZWxkIF0gKSB7XG5cdFx0XHRkZWxldGUgaW5zdGFuY2VbIHNjaGVtYUZpZWxkIF07XG5cdFx0fVxuXHRcdGNyZWF0ZUdldHRlckFuZFNldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0c2NoZW1hRmllbGQsXG5cdFx0XHRjdWlkKCksXG5cdFx0XHR7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9XG5cdFx0KTtcblx0XHRjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlckZvckZpZWxkKCBpbnN0YW5jZSwgc2NoZW1hRmllbGQgKTtcblx0fSApO1xuXHRjcmVhdGVQcmltYXJ5S2V5RmllbGRHZXR0ZXJzKFxuXHRcdGluc3RhbmNlLFxuXHRcdGtleXMoIHByaW1hcnlLZXlzIClcblx0KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgdmFsaWRhdGUgdHlwZSBmb3IgYSBmaWVsZCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKi9cbmNvbnN0IHNldFZhbGlkYXRlVHlwZUZvckZpZWxkID0gKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlICkgPT4ge1xuXHRpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlZBTElEQVRFX1RZUEVTIF1bIGZpZWxkTmFtZSBdID1cblx0XHRkZXJpdmVWYWxpZGF0ZVR5cGVGb3JGaWVsZCggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBpbnN0YW5jZS5zY2hlbWEgKTtcbn07XG5cbi8qKlxuICogIFBvcHVsYXRlcyBtaXNzaW5nIGZpZWxkcyBhbmQgdmFsdWVzIHVzaW5nIGRlZmF1bHRzIHByb3ZpZGVkIGJ5IHNjaGVtYS4gIElmXG4gKiAgc2NoZW1hIGRvZXNuJ3QgcHJvdmlkZSBhIGRlZmF1bHQgdGhlbiB0aGlzIHdpbGwgcG9wdWxhdGUgdGhlIGZpZWxkIHdpdGggYVxuICogIGRlZmF1bHQgdmFsdWUgdGhhdCBtYXRjaGVzIHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICovXG5jb25zdCBwb3B1bGF0ZU1pc3NpbmdGaWVsZHMgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRpZiAoIHR5cGVvZiBpbnN0YW5jZS5wcm90ZWN0ZWRGaWVsZHMgPT09ICd1bmRlZmluZWQnICkge1xuXHRcdHBvcHVsYXRlUHJvdGVjdGVkRmllbGRzUHJvcGVydHkoIGluc3RhbmNlLCBbXSApO1xuXHR9XG5cdGlmICggISBpbnN0YW5jZS5pc05ldyApIHtcblx0XHRyZXR1cm47XG5cdH1cblx0Zm9yRWFjaChcblx0XHRnZXRFbnRpdHlGaWVsZHNGcm9tU2NoZW1hKCBpbnN0YW5jZSApLFxuXHRcdCggc2NoZW1hUHJvcGVydGllcywgZmllbGROYW1lICkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0eXBlb2YgaW5zdGFuY2VbIGZpZWxkTmFtZSBdID09PSAndW5kZWZpbmVkJyAmJlxuXHRcdFx0XHQhIGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGluc3RhbmNlLnNjaGVtYSApXG5cdFx0XHQpIHtcblx0XHRcdFx0c2V0SW5pdGlhbEVudGl0eUZpZWxkc0FuZFZhbHVlcyhcblx0XHRcdFx0XHRpbnN0YW5jZSxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiBlbnRpdHkgZmllbGRzIGFuZCB2YWx1ZXMgZnJvbSB0aGlzIGVudGl0eSBpbnN0YW5jZVxuICogZm9yIHVzZSBpbiBjbG9uaW5nIHRoZSBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtCYXNlRW50aXR5fSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gUGxhaW4gb2JqZWN0IG9mIGFsbCBmaWVsZDp2YWx1ZSBwYWlycy5cbiAqL1xuY29uc3QgZm9yQ2xvbmUgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRyZXR1cm4gZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvckNsb25pbmcoIGluc3RhbmNlICk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwbGFpbiBvYmplY3Qgb2YgdGhlIGVudGl0eSBmaWVsZHMgYW5kIHZhbHVlcyBmcm9tIHRoaXMgZW50aXR5XG4gKiBpbnN0YW5jZSBwcmVwYXJlZCBmb3IgdXNlIGluIGFuIHVwZGF0ZSByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7T2JqZWN0fSBQbGFpbiBvYmplY3Qgb2YgZmllbGQ6dmFsdWUgcGFpcnMuXG4gKi9cbmNvbnN0IGZvclVwZGF0ZSA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdHJldHVybiBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yUGVyc2lzdGluZyggaW5zdGFuY2UgKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiB0aGUgZW50aXR5IGZpZWxkcyBhbmQgdmFsdWVzIGZyb20gdGhpcyBlbnRpdHlcbiAqIGluc3RhbmNlIHByZXBhcmVkIGZvciB1c2UgaW4gYW4gaW5zZXJ0IHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IFBsYWluIG9iamVjdCBvZiBmaWVsZDp2YWx1ZSBwYWlycy5cbiAqL1xuY29uc3QgZm9ySW5zZXJ0ID0gKCBpbnN0YW5jZSApID0+IHtcblx0Y29uc3QgZW50aXR5VmFsdWVzID0gZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmcoXG5cdFx0aW5zdGFuY2UsXG5cdFx0dHJ1ZVxuXHQpO1xuXHRpbnN0YW5jZS5wcmltYXJ5S2V5cy5mb3JFYWNoKCAoIHByaW1hcnlLZXkgKSA9PiB7XG5cdFx0ZW50aXR5VmFsdWVzWyBwcmltYXJ5S2V5IF0gPSBpbnN0YW5jZVsgcHJpbWFyeUtleSBdO1xuXHR9ICk7XG5cdHJldHVybiBlbnRpdHlWYWx1ZXM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwbGFpbiBvYmplY3Qgb2YgdGhlIGVudGl0eSBmaWVsZHMgYW5kIHZhbHVlcyBmcm9tIHRoaXMgZW50aXR5XG4gKiBpbnN0YW5jZSBwcmVwYXJlZCBmb3IgdXNlIGluIGVpdGhlciBhbiBpbnNlcnQgb3IgdXBkYXRlIHJlcXVlc3QuICBUaGUgdHlwZVxuICogaXMgYXV0b21hdGljYWxseSBkZXJpdmVkIGZyb20gdGhlIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGVudGl0eSBpcyBcIm5ld1wiIG9yXG4gKiBub3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IFBsYWluIG9iamVjdCBvZiBmaWVsZDp2YWx1ZSBwYWlycy5cbiAqL1xuY29uc3QgZm9yUGVyc2lzdCA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdGlmICggaW5zdGFuY2UuaXNOZXcgKSB7XG5cdFx0cmV0dXJuIGZvckluc2VydCggaW5zdGFuY2UgKTtcblx0fVxuXHRyZXR1cm4gZm9yVXBkYXRlKCBpbnN0YW5jZSApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGdldHRlcnMgZm9yIHJldHJpZXZpbmcgdGhlIGZpZWxkcyBhbmQgdmFsdWVzIG9mIHRoZSBlbnRpdHkgaW5zdGFuY2VcbiAqIGZvciBpbnNlcnQgb3IgdXBkYXRlIHJlcXVlc3RzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUGVyc2lzdGluZ0dldHRlcnNBbmRTZXR0ZXJzID0gKCBpbnN0YW5jZSApID0+IHtcblx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoIGluc3RhbmNlLCAnZm9yVXBkYXRlJywgZm9yVXBkYXRlICk7XG5cdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKCBpbnN0YW5jZSwgJ2Zvckluc2VydCcsIGZvckluc2VydCApO1xuXHRjcmVhdGVDYWxsYmFja0dldHRlciggaW5zdGFuY2UsICdmb3JQZXJzaXN0JywgZm9yUGVyc2lzdCApO1xuXHRjcmVhdGVDYWxsYmFja0dldHRlciggaW5zdGFuY2UsICdmb3JDbG9uZScsIGZvckNsb25lICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgaW5pdGlhbCBlbnRpdHkgZmllbGQgYWNjZXNzb3JzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJpbWFyeUtleVxuICovXG5jb25zdCBzZXRJbml0aWFsRW50aXR5RmllbGRzQW5kVmFsdWVzID0gKFxuXHRpbnN0YW5jZSxcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRpc1ByaW1hcnlLZXkgPSBmYWxzZSxcbikgPT4ge1xuXHRpZiAoIGlzVW5kZWZpbmVkKCBmaWVsZFZhbHVlICkgKSB7XG5cdFx0ZmllbGRWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZUZvckZpZWxkKCBmaWVsZE5hbWUsIGluc3RhbmNlLnNjaGVtYSApO1xuXHRcdHNldFZhbGlkYXRlVHlwZUZvckZpZWxkKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlICk7XG5cdH1cblx0Y3JlYXRlUmF3RW50aXR5R2V0dGVyc1NldHRlcnMoXG5cdFx0aW5zdGFuY2UsXG5cdFx0ZmllbGROYW1lLFxuXHRcdGRlcml2ZVByZXBhcmVkVmFsdWVGb3JGaWVsZCggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBpbnN0YW5jZSApLFxuXHRcdGlzUHJpbWFyeUtleVxuXHQpO1xuXHRpZiAoICEgaXNQcmltYXJ5S2V5ICkge1xuXHRcdGNyZWF0ZVJlbmRlcmVkR2V0dGVycyhcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0ZGVyaXZlUmVuZGVyZWRWYWx1ZSggZmllbGRWYWx1ZSApXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIHJhdyBlbnRpdHkgZ2V0dGVycyBhbmQgc2V0dGVycy4gIFRoZXNlIGFyZSB0aGUgcHJvcGVydGllcyBvZiBhblxuICogZW50aXR5IHRoYXQgaGF2ZSB0aGUgdmFsdWVzIHVzZWQgZm9yIG5vdCBvbmx5IGdldHRpbmcgYnV0IGFsc28gc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtib29sZWFufSBpc1ByaW1hcnlLZXkgc2V0IHRvIHRydWUgaWYgZmllbGQgaXMgdGhlIG1vZGVsJ3MgcHJpbWFyeSBrZXlcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVJhd0VudGl0eUdldHRlcnNTZXR0ZXJzID0gKFxuXHRpbnN0YW5jZSxcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRpc1ByaW1hcnlLZXkgPSBmYWxzZSxcbikgPT4ge1xuXHRjb25zdCBvcHRzID0geyBlbnVtZXJhYmxlOiB0cnVlIH07XG5cdC8vIHByaW1hcnkga2V5IGlzIGltbXV0YWJsZVxuXHRpZiAoIGlzUHJpbWFyeUtleSApIHtcblx0XHRjcmVhdGVHZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRvcHRzXG5cdFx0KTtcblx0XHRjcmVhdGVBbGlhc0dldHRlckZvckZpZWxkKCBpbnN0YW5jZSwgZmllbGROYW1lICk7XG5cdH0gZWxzZSB7XG5cdFx0Y3JlYXRlR2V0dGVyQW5kU2V0dGVyKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0b3B0c1xuXHRcdCk7XG5cdFx0Y3JlYXRlRmx1ZW50U2V0dGVyKCBpbnN0YW5jZSwgZmllbGROYW1lICk7XG5cdFx0Y3JlYXRlQWxpYXNHZXR0ZXJBbmRTZXR0ZXJGb3JGaWVsZCggaW5zdGFuY2UsIGZpZWxkTmFtZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgXCJhbGlhc1wiIGdldHRlciBmb3IgdGhlIGdpdmVuIGZpZWxkIG5hbWUgb24gdGhlIGVudGl0eSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQWxpYXNHZXR0ZXJGb3JGaWVsZCA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSApID0+IHtcblx0Y3JlYXRlQWxpYXNlc0Zvck1ldGhvZCggaW5zdGFuY2UsIGZpZWxkTmFtZSwgY3JlYXRlQWxpYXNHZXR0ZXIgKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBcImFsaWFzXCIgZ2V0dGVycyBhbmQgc2V0dGVycyBmb3IgdGhlIGdpdmVuIGZpZWxkIG9uIHRoZSBlbnRpdHlcbiAqIGluc3RhbmNlLlxuICpcbiAqIEV4YW1wbGU6IERhdGV0aW1lIGVudGl0aWVzIGhhdmUgYSBgRFRUX0VWVF9zdGFydGAgZmllbGQuICBPbiB0aGUgZW50aXR5XG4gKiBpbnN0YW5jZSwgeW91IHdpbGwgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHZhbHVlIG9mIHRoYXQgZmllbGQgdmlhOlxuICogLSBkYXRldGltZS5EVFRfRVZUX3N0YXJ0XG4gKiAtIGRhdGV0aW1lLmR0dEV2dFN0YXJ0XG4gKiAtIGRhdGV0aW1lLmV2dFN0YXJ0XG4gKiAtIGRhdGV0aW1lLnN0YXJ0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlckZvckZpZWxkID0gKCBpbnN0YW5jZSwgZmllbGROYW1lICkgPT4ge1xuXHRjcmVhdGVBbGlhc2VzRm9yTWV0aG9kKCBpbnN0YW5jZSwgZmllbGROYW1lLCBjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlciApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIEFsaWFzZXMgdXNpbmcgdGhlIHByb3ZpZGVkIG1ldGhvZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kXG4gKi9cbmNvbnN0IGNyZWF0ZUFsaWFzZXNGb3JNZXRob2QgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUsIG1ldGhvZCApID0+IHtcblx0Ly8gY2FtZWxDYXNlIGdldHRlciAob3Igc2V0dGVyKSBmb3IgZnVsbCBmaWVsZCBuYW1lIChlZy4gRVZUX2Rlc2MgPT4gZXZ0RGVzYylcblx0bWV0aG9kKCBpbnN0YW5jZSwgZmllbGROYW1lLCBjYW1lbENhc2UoIGZpZWxkTmFtZSApICk7XG5cdC8vIHN0cmlwIGZpZWxkIHByZWZpeGVzIGFuZCBjYW1lbENhc2UgKGlmIHRoZXJlIGFyZSBmaWVsZCBwcmVmaXhlcyBmb3IgdGhlXG5cdC8vIGVudGl0eS4gKGVnLiBFVlRfZGVzYyA9PiBkZXNjKTtcblx0aWYgKCBpbnN0YW5jZS5maWVsZFByZWZpeGVzICkge1xuXHRcdGxldCBuZXdGaWVsZE5hbWUgPSAnJztcblx0XHQvLyBZZXMsIGl0cyBpbnRlbmRlZCB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBwcmVmaXhlcywgdGhpcyBjb3VsZFxuXHRcdC8vIGVuZCB1cCBjcmVhdGluZyBtdWx0aXBsZSBhbGlhc2VkIGdldHRlcnMgKG9yIHNldHRlcnMpXG5cdFx0Ly8gKGVnIERhdGV0aW1lOiBEVFRfRVZUX3N0YXJ0IHdvdWxkIGVuZCB1cCB3aXRoIGBldnRTdGFydGAgYW5kIGBzdGFydGBcblx0XHQvLyBhcyBnZXR0ZXIgYWNjZXNzb3JzKS5cblx0XHRpbnN0YW5jZS5maWVsZFByZWZpeGVzLmZvckVhY2goICggZmllbGRQcmVmaXggKSA9PiB7XG5cdFx0XHRuZXdGaWVsZE5hbWUgPSBmaWVsZE5hbWUucmVwbGFjZSggZmllbGRQcmVmaXggKyAnXycsICcnICk7XG5cdFx0XHRpZiAoIG5ld0ZpZWxkTmFtZSAhPT0gZmllbGROYW1lICkge1xuXHRcdFx0XHRtZXRob2QoXG5cdFx0XHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdGNhbWVsQ2FzZSggbmV3RmllbGROYW1lIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGNhbGxiYWNrIHRoYXQgaXMgdXNlZCBpbiB0aGUgYGdldFJlbmRlcmVkYCBmaWVsZCBnZXR0ZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6ICp9ICBBIGNhbGxiYWNrLlxuICovXG5jb25zdCBnZXRSZW5kZXJlZENhbGxiYWNrID0gKCBpbnN0YW5jZSApID0+ICggcmVxdWVzdGVkRmllbGROYW1lICkgPT5cblx0aW5zdGFuY2VbIHJlcXVlc3RlZEZpZWxkTmFtZSArICdSZW5kZXJlZCcgXTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZmllbGROYW1lIHN0cmlwcGVkIG9mIGFsbCBwb3NzaWJsZSBwcmVmaXhlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHByZWZpeCBmcmVlIGZpZWxkTmFtZS5cbiAqL1xuY29uc3QgcmVtb3ZlUHJlZml4ZXNGcm9tRmllbGQgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUgKSA9PiB7XG5cdGNvbnN0IHByZWZpeGVzVG9SZW1vdmUgPSBzb3J0QnkoXG5cdFx0aW5zdGFuY2UuZmllbGRQcmVmaXhlcyxcblx0XHQoIHByZWZpeCApID0+IHByZWZpeC5sZW5ndGggKiAtMVxuXHQpO1xuXHRsZXQgbmV3RmllbGROYW1lID0gZmllbGROYW1lO1xuXHRmb3JFYWNoKCBwcmVmaXhlc1RvUmVtb3ZlLCAoIHByZWZpeCApID0+IHtcblx0XHRuZXdGaWVsZE5hbWUgPSBmaWVsZE5hbWUucmVwbGFjZSggcHJlZml4LCAnJyApO1xuXHRcdGlmICggbmV3RmllbGROYW1lICE9PSBmaWVsZE5hbWUgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9ICk7XG5cdHJldHVybiBuZXdGaWVsZE5hbWU7XG59O1xuXG4vKipcbiAqIFRoaXMgY3JlYXRlcyB0aGUgZ2V0dGVycyBmb3IgdGhlIHJlbmRlcmVkIHByb3BlcnR5IG9mIG1vZGVsIGZpZWxkcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gIGZpZWxkVmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlbmRlcmVkR2V0dGVycyA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSApID0+IHtcblx0Y3JlYXRlR2V0dGVyKFxuXHRcdGluc3RhbmNlLFxuXHRcdGNhbWVsQ2FzZSggcmVtb3ZlUHJlZml4ZXNGcm9tRmllbGQoIGluc3RhbmNlLCBmaWVsZE5hbWUgKSApICtcblx0XHQnUmVuZGVyZWQnLFxuXHRcdGZpZWxkVmFsdWVcblx0KTtcblx0aWYgKCBpc1VuZGVmaW5lZCggaW5zdGFuY2UuZ2V0UmVuZGVyZWQgKSApIHtcblx0XHRjcmVhdGVDYWxsYmFja0dldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0J2dldFJlbmRlcmVkJyxcblx0XHRcdGdldFJlbmRlcmVkQ2FsbGJhY2ssXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgdGhlIGBoYXNNdWx0aXBsZVByaW1hcnlLZXlzYCBnZXR0ZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbigpOiBib29sZWFufSBUaGUgY2FsbGJhY2sgZm9yIGhhc011bHRpcGxlUHJpbWFyeUtleXMgZ2V0dGVyXG4gKi9cbmNvbnN0IGhhc011bHRpcGxlUHJpbWFyeUtleXNDYWxsYmFjayA9ICggaW5zdGFuY2UgKSA9PlxuXHRpbnN0YW5jZS5wcmltYXJ5S2V5cy5sZW5ndGggPiAxO1xuXG4vKipcbiAqIENyZWF0ZXMgZ2V0dGVycyBmb3IgcHJpbWFyeSBrZXkgcmVsYXRlZCBkYXRhLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtBcnJheX0gcHJpbWFyeUtleXNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVByaW1hcnlLZXlGaWVsZEdldHRlcnMgPSAoIGluc3RhbmNlLCBwcmltYXJ5S2V5cyApID0+IHtcblx0Y29uc3Qgb3B0cyA9IHsgY29uZmlndXJhYmxlOiB0cnVlIH07XG5cdGlmICggaXNBcnJheSggcHJpbWFyeUtleXMgKSApIHtcblx0XHRjcmVhdGVHZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdCdwcmltYXJ5S2V5Jyxcblx0XHRcdHByaW1hcnlLZXlzWyAwIF0sXG5cdFx0XHRvcHRzXG5cdFx0KTtcblx0XHRjcmVhdGVHZXR0ZXJBbmRTZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdCdwcmltYXJ5S2V5cycsXG5cdFx0XHRwcmltYXJ5S2V5cyxcblx0XHRcdG9wdHNcblx0XHQpO1xuXHRcdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHQnaGFzTXVsdGlwbGVQcmltYXJ5S2V5cycsXG5cdFx0XHRoYXNNdWx0aXBsZVByaW1hcnlLZXlzQ2FsbGJhY2ssXG5cdFx0XHRvcHRzXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6IGJvb2xlYW59IFJldHVybnMgYSBjYWxsYmFjayBmb3IgdGhlXG4gKiBoYXNDYWxjdWxhdGVkRmllbGQgZ2V0dGVyXG4gKi9cbmNvbnN0IGhhc0NhbGN1bGF0ZWRGaWVsZENhbGxiYWNrID0gKCBpbnN0YW5jZSApID0+XG5cdCggZmllbGROYW1lVG9DaGVjayApID0+ICEgaXNVbmRlZmluZWQoIGluc3RhbmNlWyBmaWVsZE5hbWVUb0NoZWNrIF0gKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBnZXR0ZXJzIGZvciBhbGwgdGhlIGNhbGN1bGF0ZWQgZmllbGRzIGFuZCB2YWx1ZSBvbiB0aGUgZW50aXR5LlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fWZpZWxkc0FuZFZhbHVlc1xuICovXG5leHBvcnQgY29uc3Qgc2V0Q2FsY3VsYXRlZEZpZWxkQW5kVmFsdWVzID0gKCBpbnN0YW5jZSwgZmllbGRzQW5kVmFsdWVzICkgPT4ge1xuXHRmb3JFYWNoKCBmaWVsZHNBbmRWYWx1ZXMsICggY2FsY3VsYXRlZEZpZWxkVmFsdWUsIGNhbGN1bGF0ZWRGaWVsZE5hbWUgKSA9PiB7XG5cdFx0aWYgKCBjYWxjdWxhdGVkRmllbGROYW1lICE9PSAnX3Byb3RlY3RlZCcgKSB7XG5cdFx0XHRjcmVhdGVHZXR0ZXIoXG5cdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHRjYW1lbENhc2UoIGNhbGN1bGF0ZWRGaWVsZE5hbWUgKSxcblx0XHRcdFx0Y2FsY3VsYXRlZEZpZWxkVmFsdWVcblx0XHRcdCk7XG5cdFx0fVxuXHR9ICk7XG5cdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKFxuXHRcdGluc3RhbmNlLFxuXHRcdCdoYXNDYWxjdWxhdGVkRmllbGQnLFxuXHRcdGhhc0NhbGN1bGF0ZWRGaWVsZENhbGxiYWNrXG5cdCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBnZXR0ZXJzIGZvciB0aGUgdmFyaW91cyByZXNvdXJjZSBsaW5rcyBvbiB0aGUgZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn1maWVsZHNBbmRWYWx1ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFJlc291cmNlcyA9ICggaW5zdGFuY2UsIGZpZWxkc0FuZFZhbHVlcyApID0+IHtcblx0Y29uc3QgcmVsYXRpb25zID0gW107XG5cdGxldCByZWxhdGlvbk5hbWU7XG5cdGZvckVhY2goIGZpZWxkc0FuZFZhbHVlcywgKCByZXNvdXJjZVZhbHVlLCByZXNvdXJjZU5hbWUgKSA9PiB7XG5cdFx0aWYgKCByZXNvdXJjZU5hbWUgPT09ICdzZWxmJyApIHtcblx0XHRcdGNyZWF0ZUdldHRlciggaW5zdGFuY2UsICdyZXNvdXJjZUxpbmsnLCByZXNvdXJjZVZhbHVlWyAwIF0uaHJlZiApO1xuXHRcdH0gZWxzZSBpZiAoIHJlc291cmNlTmFtZSA9PT0gJ2NvbGxlY3Rpb24nICkge1xuXHRcdFx0Y3JlYXRlR2V0dGVyKFxuXHRcdFx0XHRpbnN0YW5jZSxcblx0XHRcdFx0J2NvbGxlY3Rpb25SZXNvdXJjZUxpbmsnLFxuXHRcdFx0XHRyZXNvdXJjZVZhbHVlWyAwIF0uaHJlZlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVsYXRpb25OYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUxpbmsoIHJlc291cmNlTmFtZSApO1xuXHRcdFx0cmVsYXRpb25zLnB1c2goIHJlbGF0aW9uTmFtZSApO1xuXHRcdFx0c2V0UmVsYXRpb25zUmVzb3VyY2UoXG5cdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHRyZWxhdGlvbk5hbWUgKyAnUmVzb3VyY2UnLFxuXHRcdFx0XHRyZXNvdXJjZVZhbHVlXG5cdFx0XHQpO1xuXHRcdH1cblx0fSApO1xuXHQvL3NldCByZWxhdGlvbnMgZ2V0dGVyXG5cdGNyZWF0ZUdldHRlciggaW5zdGFuY2UsICdnZXRSZWxhdGlvbnMnLCByZWxhdGlvbnMgKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihzdHJpbmcpOiBPYmplY3R9IFJldHVybnMgdGhlIGNhbGxiYWNrIGZvciBnZXR0aW5nIGFcbiAqIHJlbGF0aW9uIHJlc291cmNlXG4gKi9cbmNvbnN0IGdldFJlbGF0aW9uUmVzb3VyY2VDYWxsYmFjayA9ICggaW5zdGFuY2UgKSA9PlxuXHQoIHJlbGF0aW9uTmFtZSApID0+IGluc3RhbmNlWyByZWxhdGlvbk5hbWUucmVwbGFjZSggJ1Jlc291cmNlJywgJycgKSBdO1xuXG4vKipcbiAqIENyZWF0ZXMgZ2V0dGVycyBmb3IgdGhlIHJlbGF0aW9ucyByZXNvdXJjZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCBzdHJpbmc+fSByZXNvdXJjZUluZm9cbiAqL1xuZXhwb3J0IGNvbnN0IHNldFJlbGF0aW9uc1Jlc291cmNlID0gKFxuXHRpbnN0YW5jZSxcblx0cmVsYXRpb25OYW1lLFxuXHRyZXNvdXJjZUluZm9cbikgPT4ge1xuXHRjcmVhdGVHZXR0ZXIoXG5cdFx0aW5zdGFuY2UsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHtcblx0XHRcdHJlc291cmNlTGluazogcmVzb3VyY2VJbmZvWyAwIF0uaHJlZixcblx0XHRcdHNpbmdsZTogcmVzb3VyY2VJbmZvWyAwIF0uc2luZ2xlLFxuXHRcdH1cblx0KTtcblx0aWYgKCBpc1VuZGVmaW5lZCggaW5zdGFuY2UuZ2V0UmVsYXRpb25SZXNvdXJjZSApICkge1xuXHRcdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKCBpbnN0YW5jZSxcblx0XHRcdCdnZXRSZWxhdGlvblJlc291cmNlJyxcblx0XHRcdGdldFJlbGF0aW9uUmVzb3VyY2VDYWxsYmFja1xuXHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogU2V0cyB0aGUgaW50ZXJuYWwgc2F2ZSBzdGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgd2hlbiBjdXJyZW50IHN0YXRlIGlzXG4gKiBTQVZFX1NUQVRFLmNsZWFuIG90aGVyd2lzZSBjdXJyZW50IHNhdmUgc3RhdGUgaXMgcmV0YWluZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2F2ZVN0YXRlIEV4cGVjdGVkIHRvIGJlIG9uZSBvZiBTQVZFX1NUQVRFIGNvbnN0YW50IHZhbHVlcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3ZlcnJpZGUgU2V0IHRvIHRydWUgd2hlbiBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGxvZ2ljIGZvclxuICogc2V0dGluZyBzdGF0ZS4gIFdoZW4gdHJ1ZSwgdGhlIHNhdmVTdGF0ZSBpcyBzZXQgdG8gd2hhdGV2ZXIgdGhlIGluY29taW5nXG4gKiBzYXZlU3RhdGUgdmFsdWUgaXMuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTYXZlU3RhdGUgPSAoIGluc3RhbmNlLCBzYXZlU3RhdGUsIG92ZXJyaWRlID0gZmFsc2UgKSA9PiB7XG5cdGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGluc3RhbmNlWyBQUklWQVRFX1BST1BFUlRJRVMuU0FWRV9TVEFURSBdO1xuXHRzd2l0Y2ggKCBzYXZlU3RhdGUgKSB7XG5cdFx0Y2FzZSBTQVZFX1NUQVRFLkRJUlRZOlxuXHRcdGNhc2UgU0FWRV9TVEFURS5ORVc6XG5cdFx0Y2FzZSBTQVZFX1NUQVRFLkNMRUFOOlxuXHRcdFx0aWYgKCBvdmVycmlkZSApIHtcblx0XHRcdFx0aW5zdGFuY2VbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF0gPSBzYXZlU3RhdGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aW5zdGFuY2VbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF0gPVxuXHRcdFx0XHRjdXJyZW50U3RhdGUgPT09IFNBVkVfU1RBVEUuQ0xFQU4gP1xuXHRcdFx0XHRcdHNhdmVTdGF0ZSA6XG5cdFx0XHRcdFx0Y3VycmVudFN0YXRlO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnQoXG5cdFx0XHRcdCdTYXZlIHN0YXRlIGZvciBlbnRpdHkgY2FuIG9ubHkgYmUgc2V0IHRvIGVpdGhlciAnICtcblx0XHRcdFx0J1NBVkVfU1RBVEUuRElSVFksIFNBVkVfU1RBVEUuTkVXIG9yIFNBVkVfU1RBVEUuQ0xFQU4nXG5cdFx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZmllbGQgbmFtZSB0byB0aGUgZmllbGRUb1BlcnNpc3RPbkluc2VydCBwcm9wZXJ0eSBvbiB0aGUgaW5zdGFuY2VcbiAqIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpZWxkVG9QZXJzaXN0ID0gKCBpbnN0YW5jZSwgZmllbGROYW1lICkgPT4ge1xuXHRpZiAoIGluc3RhbmNlLmZpZWxkc1RvUGVyc2lzdE9uSW5zZXJ0ICkge1xuXHRcdGluc3RhbmNlLmZpZWxkc1RvUGVyc2lzdE9uSW5zZXJ0LmFkZCggZmllbGROYW1lICk7XG5cdH1cbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0aXNQbGFpbk9iamVjdCxcblx0Y2FtZWxDYXNlLFxuXHRsYXN0LFxuXHRwaWNrLFxuXHRwaWNrQnksXG5cdGlzQXJyYXksXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBpbnN0YW5jZU9mIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRNb25leSxcblx0U2l0ZUN1cnJlbmN5LFxuXHRTZXJ2ZXJEYXRlVGltZSBhcyBEYXRlVGltZSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5cbmltcG9ydCB7IHBsdXJhbE1vZGVsTmFtZSB9IGZyb20gJy4uL21vZGVsLW5hbWVzJztcblxuaW1wb3J0IHtcblx0aGFzUmF3UHJvcGVydHksXG5cdGhhc1ByZXR0eVByb3BlcnR5LFxuXHRoYXNSZW5kZXJlZFByb3BlcnR5LFxuXHRpc0RhdGVUaW1lRmllbGQsXG5cdGlzTW9uZXlGaWVsZCxcblx0aXNQcmltYXJ5S2V5RmllbGQsXG5cdGlzRW50aXR5RmllbGQsXG59IGZyb20gJy4vYm9vbGVhbnMnO1xuaW1wb3J0IHsgdmFsaWRhdGVUeXBlRm9yRmllbGQgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgVkFMSURBVEVfVFlQRSB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBUaGlzIHJlY2VpdmVzIGEgZmllbGQgbmFtZSwgaXQncyB2YWx1ZSBhbmQgdGhlIHNjaGVtYSBhbmQgY29udmVydHMgaXQgdG8gdGhlXG4gKiByZWxhdGVkIHZhbHVlIG9iamVjdCBJRiB0aGUgc2NoZW1hIGluZGljYXRlcyBpdCBpcyBvZiBhIHR5cGUgdGhhdCB0aGVyZSBpcyBhXG4gKiBrbm93biB2YWx1ZSBvYmplY3QgZm9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7RGF0ZVRpbWV8TW9uZXl8Kn0gIElmIHRoaXMgaXMgbm90IGEgdmFsdWUgb2JqZWN0LCB0aGUgb3JpZ2luYWwgZmllbGRcbiAqIHZhbHVlIGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgbWF5YmVDb252ZXJ0VG9WYWx1ZU9iamVjdCA9ICggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBzY2hlbWEgKSA9PiB7XG5cdGlmIChcblx0XHRpc0RhdGVUaW1lRmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgJiZcblx0XHQhIERhdGVUaW1lLnZhbGlkYXRlSXNEYXRlVGltZSggZmllbGRWYWx1ZSApXG5cdCkge1xuXHRcdHJldHVybiBEYXRlVGltZS5mcm9tSVNPKCBmaWVsZFZhbHVlICk7XG5cdH1cblx0aWYgKFxuXHRcdGlzTW9uZXlGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSAmJlxuXHRcdCEgKCBpbnN0YW5jZU9mKCBmaWVsZFZhbHVlLCAnTW9uZXknICkgKVxuXHQpIHtcblx0XHRyZXR1cm4gbmV3IE1vbmV5KCBmaWVsZFZhbHVlLCBTaXRlQ3VycmVuY3kgKTtcblx0fVxuXHQvLyBpZiBtb3JlIFZPcyBnZXQgYWRkZWQsIHRoZW4gaW5zdGVhZCBvZiBhZGRpbmcgbW9yZSBpZiBlbHNlIGJsb2Nrc1xuXHQvLyB0byB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgb25lcyBiZWxvdywgYWxsIFZPIGxvZ2ljIHNob3VsZCBiZSBleHRyYWN0ZWRcblx0Ly8gaW50byBzb21lIGtpbmQgb2YgIFZhbHVlT2JqZWN0RXh0cmFjdG9yIG9iamVjdCB0aGF0IHdvdWxkIGhvbGQgYWxsIG9mXG5cdC8vIHRoZSBuZWNlc3NhcnkgY2FsbGJhY2tzIGZvciBtYW5hZ2luZyB0aGUgZGV0ZWN0aW9uIG9mIFZPIGZpZWxkcyBhbmRcblx0Ly8gY29udmVyc2lvbiBvZiBkYXRhIHRvIGFuZCBmcm9tIHRoZSB2YXJpb3VzIFZPc1xuXHQvLyBwbHogc2VlOlxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vZXZlbnRlc3ByZXNzby9ldmVudC1lc3ByZXNzby1jb3JlL3B1bGwvNjM3L2ZpbGVzI3IyMjg2OTA3ODlcblx0cmV0dXJuIGZpZWxkVmFsdWU7XG59O1xuXG4vKipcbiAqIFRoaXMgY29udmVydHMgdGhlIGluY29taW5nIHZhbHVlIGZvciBhIGZpZWxkIHRvIGl0cyBlcXVpdmFsZW50IFwicmF3XCIgdmFsdWVcbiAqIGZyb20gYSB2YWx1ZSBvYmplY3QgaWYgaXQgaXMgYSB2YWx1ZSBvYmplY3QuICBPdGhlcndpc2UgaXQganVzdCByZXR1cm5zIHRoZVxuICogb3JpZ2luYWwgaW5jb21pbmcgdmFsdWUuICBUaGlzIGFsc28gYXNzZXJ0cyB0aGF0IGlmIHRoZSBwcm92aWRlZCBmaWVsZCBpc1xuICogZXhwZWN0ZWQgdG8gYmUgYSB2YWx1ZSBvYmplY3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgSVMgYSB2YWxpZCB2YWx1ZSBvYmplY3RcbiAqIGFuZCBpdCBpcyB0aGUgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYSB2YWx1ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfE1vbmV5fERhdGVUaW1lfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtzdHJpbmd8bnVtYmVyfCp9ICBJZiB0aGUgdmFsdWUgaXMgbm90IGEgdmFsdWUgb2JqZWN0LCByZXR1cm5zIHRoZVxuICogb3JpZ2luYWwgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zID0gKFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdHNjaGVtYVxuKSA9PiB7XG5cdGlmICggaXNEYXRlVGltZUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICkge1xuXHRcdERhdGVUaW1lLmFzc2VydElzRGF0ZVRpbWUoIGZpZWxkVmFsdWUgKTtcblx0XHRmaWVsZFZhbHVlID0gZmllbGRWYWx1ZS50b0lTTygpO1xuXHR9IGVsc2UgaWYgKCBpc01vbmV5RmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0TW9uZXkuYXNzZXJ0TW9uZXkoIGZpZWxkVmFsdWUgKTtcblx0XHRmaWVsZFZhbHVlID0gZmllbGRWYWx1ZS50b051bWJlcigpO1xuXHR9XG5cdHJldHVybiBmaWVsZFZhbHVlO1xufTtcblxuLyoqXG4gKiBUaGlzIGNvbnZlcnRzIHRoZSBpbmNvbWluZyB2YWx1ZSBmb3IgYSBmaWVsZCB0byBpdHMgZXF1aXZhbGVudCBcInJhd1wiIHZhbHVlXG4gKiBpZiB0aGUgaW5jb21pbmcgdmFsdWUgIGlzIGEgdmFsdWUgb2JqZWN0LiAgT3RoZXJ3aXNlIGl0IGp1c3QgcmV0dXJucyB0aGVcbiAqIG9yaWdpbmFsIGluY29taW5nIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7KnxEYXRlVGltZXxNb25leX1maWVsZFZhbHVlXG4gKiBAcmV0dXJuIHsqfSBUaGUgcmF3IHZhbHVlIGZvciB0aGUgdmFsdWUgb2JqZWN0IG9yIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdCA9ICggZmllbGRWYWx1ZSApID0+IHtcblx0aWYgKCBEYXRlVGltZS52YWxpZGF0ZUlzRGF0ZVRpbWUoIGZpZWxkVmFsdWUgKSApIHtcblx0XHRmaWVsZFZhbHVlID0gZmllbGRWYWx1ZS50b0lTTygpO1xuXHR9IGVsc2UgaWYgKCBpbnN0YW5jZU9mKCBmaWVsZFZhbHVlLCAnTW9uZXknICkgKSB7XG5cdFx0ZmllbGRWYWx1ZSA9IGZpZWxkVmFsdWUudG9OdW1iZXIoKTtcblx0fVxuXHRyZXR1cm4gZmllbGRWYWx1ZTtcbn07XG5cbi8qKlxuICogVGhpcyBkZXJpdmVzIHRoZSBcInByZXBhcmVkXCIgdmFsdWUgZm9yIHRoZSBnaXZlbiBmaWVsZCBhbmQgdmFsdWUuXG4gKlxuICogXCJQcmVwYXJlZFwiIG1lYW5zOlxuICpcbiAqIC0gY29udmVydGluZyB0byBhIHZhbHVlIG9iamVjdCBpZiB0aGlzIGlzIGEgZmllbGQgdGhhdCB0aGVyZSBhcmUgZGVmaW5lZFxuICogICB2YWx1ZSBvYmplY3RzIGZvci5cbiAqIC0gcmV0cmlldmluZyB0aGUgXCJyYXdcIiB2YWx1ZSBmcm9tIGZpZWxkIHZhbHVlcyB0aGF0IGhhdmUgYHJhd2AgYW5kIGByZW5kZXJlZGBcbiAqICAgb3IgYHByZXR0eWAgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9ICBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge0RhdGVUaW1lfE1vbmV5fCp9ICBSZXR1cm5zIHRoZSBvcmlnaW5hbCBpbmNvbWluZyB2YWx1ZSBpZiBpdCBkb2VzXG4gKiBub3QgaGF2ZSBhIHJhdyBlcXVpdmFsZW50IG9yIGlzIG5vdCBhIHZhbHVlIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlcml2ZVByZXBhcmVkVmFsdWVGb3JGaWVsZCA9IChcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRpbnN0YW5jZVxuKSA9PiB7XG5cdGNvbnN0IHZhbGlkYXRpb25UeXBlID0gdmFsaWRhdGVUeXBlRm9yRmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2UgKTtcblx0ZmllbGRWYWx1ZSA9IGlzUGxhaW5PYmplY3QoIGZpZWxkVmFsdWUgKSA/XG5cdFx0ZmllbGRWYWx1ZVsgdmFsaWRhdGlvblR5cGUgXSA6XG5cdFx0ZmllbGRWYWx1ZTtcblx0cmV0dXJuIG1heWJlQ29udmVydFRvVmFsdWVPYmplY3QoIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSwgaW5zdGFuY2Uuc2NoZW1hICk7XG59O1xuXG4vKipcbiAqIFRoaXMgcmV0dXJucyB0aGUgXCJyZW5kZXJlZFwiIG9yIFwicHJldHR5XCIgZXF1aXZhbGVudCBmcm9tIGEgdmFsdWUgaWYgaXQgZXhpc3RzXG4gKiBhcyBhIHByb3BlcnR5IG9uIGl0LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9ICBUaGUgb3JpZ2luYWwgdmFsdWUgaXMgcmV0dXJuZWQgaWYgaXRzIG5vdCBhIHBsYWluIG9iamVjdCBvciBpZlxuICogaXQgaGFzIG5vIGByZW5kZXJlZGAgb3IgYHByZXR0eWAgcHJvcGVydHkuICBIb3dldmVyLCBpZiBpdCBpcyBhIHBsYWluIG9iamVjdFxuICogYW5kIGhhcyBubyBwcmV0dHkvcmVuZGVyZWQgcHJvcGVydGllcyBidXQgRE9FUyBoYXZlIGEgcmF3IHByb3BlcnR5LCB0aGVuIHRoYXRcbiAqIGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgZGVyaXZlUmVuZGVyZWRWYWx1ZSA9ICggdmFsdWUgKSA9PiB7XG5cdGlmICggISBpc1BsYWluT2JqZWN0KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHR2YWx1ZSA9IGhhc1ByZXR0eVByb3BlcnR5KCB2YWx1ZSApID8gdmFsdWUucHJldHR5IDogdmFsdWU7XG5cdHZhbHVlID0gaGFzUmVuZGVyZWRQcm9wZXJ0eSggdmFsdWUgKSA/IHZhbHVlLnJlbmRlcmVkIDogdmFsdWU7XG5cdHJldHVybiBoYXNSYXdQcm9wZXJ0eSggdmFsdWUgKSA/IHZhbHVlLnJhdyA6IHZhbHVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgcmVzb3VyY2UgZnJvbSB0aGUgZ2l2ZW4gYHJlc291cmNlTGlua2AuXG4gKlxuICogZWcuIFwiaHR0cHM6Ly9hcGkuZXZlbnRlc3ByZXNzby5jb20vcmVnaXN0cmF0aW9uXCIgd2lsbCByZXR1cm4gJ3JlZ2lzdHJhdGlvbic7XG5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXNvdXJjZUxpbmtcbiAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgZnJvbSBhIHByb3ZpZGVkIHJlc291cmNlXG4gKiBsaW5rLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVsYXRpb25OYW1lRnJvbUxpbmsgPSAoIHJlc291cmNlTGluayApID0+IHtcblx0cmV0dXJuIHBsdXJhbE1vZGVsTmFtZSggY2FtZWxDYXNlKCBsYXN0KCByZXNvdXJjZUxpbmsuc3BsaXQoICcvJyApICkgKSApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVudGl0eSBmaWVsZCBuYW1lcyBhbmQgdmFsdWVzIGZyb20gdGhlXG4gKiBwcm92aWRlZCBlbnRpdHkgaW5zdGFuY2UuICBUaGUgdmFsdWVzIGFyZSBub3QgcHJlcGFyZWQgYW5kIG1hdGNoIGV4YWN0bHkgd2hhdFxuICogaXMgY3VycmVudGx5IHNldCBvbiB0aGlzIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eUluc3RhbmNlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBBIHBsYWluIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvckNsb25pbmcgPSAoIGVudGl0eUluc3RhbmNlICkgPT4ge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMoIGVudGl0eUluc3RhbmNlICkucmVkdWNlKCAoXG5cdFx0ZmllbGRzQW5kVmFsdWVzLFxuXHRcdGZpZWxkTmFtZVxuXHQpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRpc0VudGl0eUZpZWxkKCBmaWVsZE5hbWUsIGVudGl0eUluc3RhbmNlLnNjaGVtYSApICYmXG5cdFx0XHQhIGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGVudGl0eUluc3RhbmNlLnNjaGVtYSApXG5cdFx0KSB7XG5cdFx0XHRmaWVsZHNBbmRWYWx1ZXNbIGZpZWxkTmFtZSBdID0gZW50aXR5SW5zdGFuY2VbIGZpZWxkTmFtZSBdO1xuXHRcdFx0cmV0dXJuIGZpZWxkc0FuZFZhbHVlcztcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkc0FuZFZhbHVlcztcblx0fSwge30gKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBjb250YWluaW5nIHRoZSBlbnRpdHkgZmllbGQgbmFtZSBhbmQgdmFsdWVzIGZyb20gdGhlXG4gKiBwcm92aWRlZCBlbnRpdHkgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbnRpdHlJbnN0YW5jZVxuICogQHBhcmFtIHtib29sZWFufSBmb3JJbnNlcnQgIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSBmaWVsZHMgYW5kIHZhbHVlcyBmb3JcbiAqIGluc2VydCBvciBmb3IgdXBkYXRlLlxuICogQHJldHVybiB7T2JqZWN0fSBBIHBsYWluIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmcgPSAoXG5cdGVudGl0eUluc3RhbmNlLFxuXHRmb3JJbnNlcnQgPSBmYWxzZVxuKSA9PiB7XG5cdGNvbnN0IGl0ZXJhdG9yID0gZm9ySW5zZXJ0ID9cblx0XHRBcnJheS5mcm9tKCBlbnRpdHlJbnN0YW5jZS5maWVsZHNUb1BlcnNpc3RPbkluc2VydC52YWx1ZXMoKSApIDpcblx0XHRPYmplY3Qua2V5cyggZW50aXR5SW5zdGFuY2UgKTtcblxuXHRyZXR1cm4gaXRlcmF0b3IucmVkdWNlKCAoXG5cdFx0ZmllbGRzQW5kVmFsdWVzLFxuXHRcdGZpZWxkTmFtZVxuXHQpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRpc0VudGl0eUZpZWxkKCBmaWVsZE5hbWUsIGVudGl0eUluc3RhbmNlLnNjaGVtYSApICYmXG5cdFx0XHQhIGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGVudGl0eUluc3RhbmNlLnNjaGVtYSApXG5cdFx0KSB7XG5cdFx0XHRmaWVsZHNBbmRWYWx1ZXNbIGZpZWxkTmFtZSBdID0gbWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0KFxuXHRcdFx0XHRlbnRpdHlJbnN0YW5jZVsgZmllbGROYW1lIF0sXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGZpZWxkc0FuZFZhbHVlcztcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkc0FuZFZhbHVlcztcblx0fSwge30gKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJpbWFyeSBrZXkocykgYW5kIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGVudGl0eUluc3RhbmNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eUluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFuIGFycmF5IG9mIHZhbHVlcyBmb3IgdGhlIHByaW1hcnkga2V5cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByaW1hcnlLZXlWYWx1ZXMgPSAoIGVudGl0eUluc3RhbmNlICkgPT4gcGljayhcblx0ZW50aXR5SW5zdGFuY2UsXG5cdGVudGl0eUluc3RhbmNlLnByaW1hcnlLZXlzXG4pO1xuXG4vKipcbiAqIFRoaXMgcmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiBlbnRpdHkgZmllbGRzIGZyb20gdGhlIHNjaGVtYSBmb3IgdGhlIGVudGl0eVxuICogaW5zdGFuY2UgKHNjaGVtYSBmb3IgZmllbGRzIGFyZSBleHRyYWN0ZWQgYXMgd2VsbCkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eUluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgcGxhaW4gb2JqZWN0IHdpdGggZmllbGRzIGFuZCBzY2hlbWEgcHJvcGVydGllcyB0aGF0IGFyZVxuICogZW50aXR5IHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbnRpdHlGaWVsZHNGcm9tU2NoZW1hID0gKCBlbnRpdHlJbnN0YW5jZSApID0+IHBpY2tCeShcblx0ZW50aXR5SW5zdGFuY2Uuc2NoZW1hLFxuXHQoIGZpZWxkVmFsdWUsIGZpZWxkTmFtZSApID0+IGlzRW50aXR5RmllbGQoXG5cdFx0ZmllbGROYW1lLFxuXHRcdGVudGl0eUluc3RhbmNlLnNjaGVtYVxuXHQpXG4pO1xuXG4vKipcbiAqIFRoaXMgcmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiBleHRyYWN0ZWQgcHJpbWFyeUtleSBmaWVsZHMgZnJvbSB0aGUgc2NoZW1hXG4gKiBmb3IgdGhlIGVudGl0eSBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZW50aXR5SW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gQSBwbGFpbiBvYmplY3Qgd2l0aCBmaWVsZHMgYW5kIHNjaGVtYSBwcm9wZXJ0aWVzIHRoYXRcbiAqIFx0XHRcdFx0XHRyZXByZXNlbnQgcHJpbWFyeSBrZXkgZmllbGRzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJpbWFyeUtleUZpZWxkc0Zyb21TY2hlbWEgPSAoIGVudGl0eUluc3RhbmNlICkgPT4gcGlja0J5KFxuXHRlbnRpdHlJbnN0YW5jZS5zY2hlbWEsXG5cdCggZmllbGRWYWx1ZSwgZmllbGROYW1lICkgPT4gaXNQcmltYXJ5S2V5RmllbGQoXG5cdFx0ZmllbGROYW1lLFxuXHRcdGVudGl0eUluc3RhbmNlLnNjaGVtYVxuXHQpXG4pO1xuXG4vKipcbiAqIERlcml2ZXMgdGhlIGRlZmF1bHQgdmFsdWUgdG8gdXNlIGZvciBhIGdpdmVuIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4geyp9ICBBIHZhbHVlIHRvIHVzZSBmb3IgdGhlIGdpdmVuIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlID0gKCB0eXBlICkgPT4ge1xuXHRpZiAoIGlzQXJyYXkoIHR5cGUgKSApIHtcblx0XHRyZXR1cm4gdHlwZS5pbmRleE9mKCAnbnVsbCcgKSA+IC0xID9cblx0XHRcdG51bGwgOlxuXHRcdFx0ZGVyaXZlRGVmYXVsdFZhbHVlRm9yVHlwZSggdHlwZVsgMCBdICk7XG5cdH1cblx0c3dpdGNoICggdHlwZSApIHtcblx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0cmV0dXJuICcnO1xuXHRcdGNhc2UgJ251bWJlcic6XG5cdFx0Y2FzZSAnaW50ZWdlcic6XG5cdFx0XHRyZXR1cm4gMDtcblx0XHRjYXNlICdudWxsJzpcblx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0Y2FzZSAnYm9vbGVhbic6XG5cdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Y2FzZSAnZGF0ZS10aW1lJzpcblx0XHRcdHJldHVybiAoIG5ldyBEYXRlKCkgKS50b0lTT1N0cmluZygpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBEZXJpdmVzIHdoYXQgYHR5cGVgIGEgZmllbGQgaXMgZnJvbSB0aGUgc2NoZW1hLlxuICogSXQgYWNjb3VudHMgZm9yIGNhc2VzIHdoZXJlIHRoZSBcInR5cGVcIiBvZiBhIGZpZWxkIG1pZ2h0IGJlIGBkYXRlLXRpbWVgIG9yXG4gKiB3aGVyZSB0aGUgdHlwZSBpcyBhbiBvYmplY3QgYW5kIHRodXMgdGhlIGB0eXBlYCBmb3IgdGhlIHB1cnBvc2VzIG9mIG1vZGVsXG4gKiBlbnRpdGllcyBpcyBkZWZpbmVkIGJ5IHRoZSBgcmF3YCBwcm9wZXJ0eSBmb3IgdGhlIGZpZWxkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4geyp9ICBXaGF0IHR5cGUgdGhlIGZpbGVkIGlzLlxuICovXG5leHBvcnQgY29uc3QgZGVyaXZlVHlwZUZvckZpZWxkID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+IHtcblx0aWYgKCBpc0RhdGVUaW1lRmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0cmV0dXJuICdkYXRlLXRpbWUnO1xuXHR9XG5cdGlmICggc2NoZW1hWyBmaWVsZE5hbWUgXSAmJiBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgKSB7XG5cdFx0aWYgKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgPT09ICdvYmplY3QnICkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMgJiZcblx0XHRcdFx0aGFzUmF3UHJvcGVydHkoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcyApXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcudHlwZSA/XG5cdFx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlIDpcblx0XHRcdFx0XHRudWxsO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGU7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFRoaXMgZGVyaXZlcyB0aGUgdmFsaWRhdGUgdHlwZSBmcm9tIHRoZSBpbmNvbWluZyBmaWVsZCBhbmQgdmFsdWUgYWNjb3JkaW5nXG4gKiB0byB0aGUgc2NoZW1hIGFuZCBpbmNvbWluZyB2YWx1ZS5cbiAqXG4gKiBUaGlzIGFjY291bnRzIGZvciB0aGUgZmFjdCB0aGF0IGVudGl0aWVzIG1heSBiZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZVxuICogZm9sbG93aW5nIGNvbnRleHRzOlxuICpcbiAqIDEuIEF1dGhlZCBSRVNUIHJlc3BvbnNlICh3aGljaCBjb3VsZCBoYXZlIGJvdGggcmF3LCByZW5kZXJlZCBvciBwcmV0dHlcbiAqICAgIHZhbHVlcyBpbiB0aGUgZmllbGQgdmFsdWUpLlxuICogMi4gTm9uLWF1dGhlZCBSRVNUIHJlc3BvbnNlICh3aGljaCB3aWxsIG5vdCBoYXZlIGEgcmF3IHZhbHVlLCBidXQgY291bGQgaGF2ZVxuICogICAgYSBwcmV0dHkgb3IgcmVuZGVyZWQgdmFsdWUpLiAgVGhpcyBpcyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBpZiB0aGVcbiAqICAgIHJlbmRlcmVkIG9yIHByZXR0eSB2YWx1ZSBpcyBvZiBhIGRpZmZlcmVudCBkYXRhIHR5cGUgdGhhbiB0aGUgcmF3IHZhbHVlLlxuICogMy4gTmV3IGVudGl0aWVzIGJ1aWx0IGNsaWVudCBzaWRlLCB3aGljaCB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgcHJlcGFyZWRcbiAqICAgIGFnYWluc3QgdGhlIFwicmF3XCIgdmFsaWRhdGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge1N5bWJvbH0gIFRoZSB2YWxpZGF0ZSB0eXBlIGZvciB0aGUgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVWYWxpZGF0ZVR5cGVGb3JGaWVsZCA9ICggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBzY2hlbWEgKSA9PiB7XG5cdGlmICggaGFzUmF3UHJvcGVydHkoIGZpZWxkVmFsdWUgKSApIHtcblx0XHRyZXR1cm4gVkFMSURBVEVfVFlQRS5SQVc7XG5cdH1cblx0aWYgKCBzY2hlbWFbIGZpZWxkTmFtZSBdICYmIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSApIHtcblx0XHRpZiAoXG5cdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgPT09ICdvYmplY3QnICYmXG5cdFx0XHRpc1BsYWluT2JqZWN0KCBmaWVsZFZhbHVlIClcblx0XHQpIHtcblx0XHRcdHJldHVybiBoYXNSZW5kZXJlZFByb3BlcnR5KCBmaWVsZFZhbHVlICkgP1xuXHRcdFx0XHRWQUxJREFURV9UWVBFLlJFTkRFUkVEIDpcblx0XHRcdFx0VkFMSURBVEVfVFlQRS5QUkVUVFk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBWQUxJREFURV9UWVBFLlJBVztcbn07XG5cbi8qKlxuICogVGhpcyBnZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIGZpZWxkIGZyb20gdGhlIHByb3ZpZGVkIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHsqfSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGZpZWxkIGZyb20gdGhlIHNjaGVtYSBvciBpZiBub3RcbiAqIHByZXNlbnQgaW4gdGhlIHNjaGVtYSwgYSBkZXJpdmVkIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgc2NoZW1hIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0VmFsdWVGb3JGaWVsZCA9ICggZmllbGROYW1lLCBzY2hlbWEgKSA9PiB7XG5cdGlmICggc2NoZW1hWyBmaWVsZE5hbWUgXSApIHtcblx0XHRyZXR1cm4gc2NoZW1hWyBmaWVsZE5hbWUgXS5kZWZhdWx0ID9cblx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0uZGVmYXVsdCA6XG5cdFx0XHRkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgKTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZUVudGl0eUZhY3RvcnkgfSBmcm9tICcuL2Jhc2UtZW50aXR5JztcbmV4cG9ydCB7IE1PREVMX1BSRUZJWEVTLCBTQVZFX1NUQVRFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzSW50ZWdlcixcblx0aXNTdHJpbmcsXG5cdGlzUGxhaW5PYmplY3QsXG5cdGlzQm9vbGVhbixcblx0aXNOdW1iZXIsXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0VudW1GaWVsZCwgaXNQcmltYXJ5S2V5RmllbGQsIGlzVmFsdWVPYmplY3RGaWVsZCB9IGZyb20gJy4vYm9vbGVhbnMnO1xuaW1wb3J0IHsgbWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0V2l0aEFzc2VydGlvbnMgfSBmcm9tICcuL2V4dHJhY3RvcnMnO1xuaW1wb3J0IHsgUFJJVkFURV9QUk9QRVJUSUVTLCBWQUxJREFURV9UWVBFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgaW5jb21pbmcgdmFsdWUgZm9yIGdpdmVuIHR5cGUuICBUeXBlcyBhbGxvd2VkIGFyZTpcbiAqXG4gKiAtIGludGVnZXI6IGNoZWNrcyBpZiB2YWx1ZSBpcyBhbiBpbnRlZ2VyLlxuICogLSBudW1iZXI6IGNoZWNrcyBpZiB2YWx1ZSBpcyBjbGFzc2lmaWVkIGFzIGEgTnVtYmVyIHByaW1pdGl2ZSBvciBvYmplY3QgKHRoaXNcbiAqICAgbWVhbnMgYEluZmluaXR5YCwgYC1JbmZpbml0eWAsIGFuZCBgTmFOYCBhcmUgY29uc2lkZXJlZCB2YWxpZCBmb3IgdGhpcyB0eXBlXG4gKiAtIHN0cmluZ1xuICogLSBvYmplY3QgLSB0aGlzIHZhbGlkYXRlcyBhcyBhIFwicGxhaW5PYmplY3RcIiwgdGhhdCBpcyBhbiBvYmplY3QgY3JlYXRlZCBieVxuICogICB0aGUgT2JqZWN0IGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgW1tQcm90b3R5cGVdXSBvZiBudWxsLlxuICogLSBib29sZWFuXG4gKiAtIGJvb2w6IChzYW1lIGFzIGJvb2xlYW4gY2hlY2spXG4gKiAtIG51bGw6IHZhbHVlIG11c3QgZXhwbGljaXRseSBiZSBgbnVsbGBcbiAqXG4gKiBOb3RlOiBpZiB0aGUgcGFzc2VkIGluIHR5cGUgZG9lcyBub3QgZXhpc3QsIHRoZW4gdGhlIHZhbHVlIGlzIGNvbnNpZGVyZWRcbiAqIGludmFsaWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QXJyYXl9IHR5cGUgIFRoZSB0eXBlIG9yIHR5cGVzIHRvIGNoZWNrXG4gKiBAcGFyYW0geyp9IHZhbHVlICBUaGUgdmFsdWUgYmVpbmcgdmFsaWRhdGVkXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyB0aGUgdmFsdWUgaXMgdmFsaWQgZm9yIHRoZSBnaXZlbiB0eXBlLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUeXBlID0gKCB0eXBlLCB2YWx1ZSApID0+IHtcblx0bGV0IHZhbGlkID0gZmFsc2U7XG5cdC8vIGFjY291bnQgZm9yIHR5cGUgZGVmaW5pdGlvbnMgdGhhdCBhcmUgYW4gYXJyYXkgb2YgYWxsb3dlZCB0eXBlcy5cblx0aWYgKCBpc0FycmF5KCB0eXBlICkgKSB7XG5cdFx0Zm9yICggY29uc3Qgc2luZ2xlVHlwZSBvZiB0eXBlICkge1xuXHRcdFx0dmFsaWQgPSB2YWxpZGF0ZVR5cGUoIHNpbmdsZVR5cGUsIHZhbHVlICk7XG5cdFx0XHRpZiAoIHZhbGlkICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gcmV0dXJuIHJpZ2h0IGF3YXkgYmVjYXVzZSB3ZSd2ZSBkZXRlcm1pbmVkIHRoZSB2YWxpZGl0eSBvZiB0aGUgdHlwZS5cblx0XHRyZXR1cm4gdmFsaWQ7XG5cdH1cblx0c3dpdGNoICggdHlwZSApIHtcblx0XHRjYXNlICdpbnRlZ2VyJzpcblx0XHRcdHZhbGlkID0gaXNJbnRlZ2VyKCB2YWx1ZSApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdHZhbGlkID0gaXNOdW1iZXIoIHZhbHVlICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0dmFsaWQgPSBpc1N0cmluZyggdmFsdWUgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHR2YWxpZCA9IGlzUGxhaW5PYmplY3QoIHZhbHVlICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdib29sZWFuJzpcblx0XHRjYXNlICdib29sJzpcblx0XHRcdHZhbGlkID0gaXNCb29sZWFuKCB2YWx1ZSApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnbnVsbCc6XG5cdFx0XHR2YWxpZCA9IHZhbHVlID09PSBudWxsO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIHZhbGlkO1xufTtcblxuLyoqXG4gKiBUaGlzIHZhbGlkYXRlcyBlbnVtIHR5cGUgb2YgdmFsdWVzLlxuICpcbiAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbXVzdCBiZSBvbmUgb2YgdGhlIHByb3ZpZGVkIGFycmF5IG9mIGVudW1WYWx1ZXMgYXNcbiAqIHdlbGwgYXMgYmVpbmcgb2YgdGhlIGV4cGVjdGVkIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7QXJyYXl9IGVudW1WYWx1ZXNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIHRoaXMgdmFsdWUgaXMgdmFsaWQuXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVudW1UeXBlID0gKCB0eXBlLCBlbnVtVmFsdWVzLCB2YWx1ZSApID0+IHtcblx0cmV0dXJuIHZhbGlkYXRlVHlwZSggdHlwZSwgdmFsdWUgKSAmJlxuXHRcdGlzQXJyYXkoIGVudW1WYWx1ZXMgKSAmJlxuXHRcdGVudW1WYWx1ZXMuaW5kZXhPZiggdmFsdWUgKSA+IC0xO1xufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBkb2VzIGEgc2hhbGxvdyB2YWxpZGF0aW9uIGZvciB0aGUgZ2l2ZW4gdmFsdWUgYW5kIGZpZWxkLlxuICpcbiAqIFwiU2hhbGxvd1wiIGhlcmUgbWVhbnMgdGhhdCBpZiB0aGUgZmllbGQgc2NoZW1hIGlzIG9mIHR5cGUgJ29iamVjdCcsIHRoZW4gdGhlXG4gKiB2YWxpZGF0aW9uIG9ubHkgdmVyaWZpZXMgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAgVGhlIG9iamVjdCBjb250ZW50c1xuICogYXJlIG5vdCB2YWxpZGF0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4cGVjdFZhbHVlT2JqZWN0cyAgSWYgdHJ1ZSwgdGhlbiB0aGlzIGZsYWdzIHRoZSB2YWxpZGF0b3JcbiAqIHRvIGFzc3VtZSB0aGUgdmFsdWUgbWlnaHQgYmUgYSB2YWx1ZSBvYmplY3QgYW5kIGF0dGVtcHQgdG8gcmV0cmlldmUgdGhlIHJhd1xuICogdmFsdWUgZnJvbSB0aGF0IHZhbHVlIG9iamVjdCBmb3IgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZSBleHBlY3RlZCB0eXBlIGluIHRoZVxuICogc2NoZW1hIGZvciB0aGF0IGZpZWxkLlxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgdGhlIHZhbHVlIGlzIHZhbGlkLlxuICogQHRocm93cyBUeXBlRXJyb3JcbiAqIEB0aHJvd3MgSW52YWxpZERhdGVUaW1lXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQgPSAoXG5cdGZpZWxkTmFtZSxcblx0ZmllbGRWYWx1ZSxcblx0c2NoZW1hLFxuXHRleHBlY3RWYWx1ZU9iamVjdHMgPSB0cnVlXG4pID0+IHtcblx0Ly8gaWYgZmllbGQgaXMgYSBwcmltYXJ5IEtleSBmaWVsZCB0aGVuIHdlIG92ZXJyaWRlIHRoZSB2YWxpZGF0aW9uIHNvIGl0IGNhblxuXHQvLyBiZSBlaXRoZXIgc3RyaW5nIG9yIG51bWJlclxuXHRpZiAoIGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICkge1xuXHRcdHJldHVybiB2YWxpZGF0ZVR5cGUoICdzdHJpbmcnLCBmaWVsZFZhbHVlICkgfHxcblx0XHRcdHZhbGlkYXRlVHlwZSggJ251bWJlcicsIGZpZWxkVmFsdWUgKTtcblx0fVxuXHRjb25zdCBpc0VudW0gPSBpc0VudW1GaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKTtcblx0Y29uc3QgaXNWYWx1ZU9iamVjdCA9IGlzVmFsdWVPYmplY3RGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKTtcblx0ZmllbGRWYWx1ZSA9IGV4cGVjdFZhbHVlT2JqZWN0cyAmJiBpc1ZhbHVlT2JqZWN0ID9cblx0XHRtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyhcblx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRzY2hlbWFcblx0XHQpIDpcblx0XHRmaWVsZFZhbHVlO1xuXHRmaWVsZFZhbHVlID0gZXhwZWN0VmFsdWVPYmplY3RzICYmXG5cdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgPT09ICdvYmplY3QnICYmXG5cdFx0XHRpc1ZhbHVlT2JqZWN0ID9cblx0XHR7IHJhdzogZmllbGRWYWx1ZSB9IDpcblx0XHRmaWVsZFZhbHVlO1xuXHRjb25zdCBpc1ZhbGlkID0gaXNFbnVtID9cblx0XHR2YWxpZGF0ZUVudW1UeXBlKFxuXHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlLFxuXHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5lbnVtLFxuXHRcdFx0ZmllbGRWYWx1ZVxuXHRcdCkgOlxuXHRcdHZhbGlkYXRlVHlwZSggc2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlLCBmaWVsZFZhbHVlICk7XG5cdC8vIGlmIGlzRW51bSBhbmQgbm90IHZhbGlkLCB0aGVuIGxldHMgYmFpbCB3aXRoIGVycm9yXG5cdGlmICggaXNFbnVtICYmICEgaXNWYWxpZCApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0c3ByaW50Zihcblx0XHRcdFx0J1RoZSBnaXZlbiBcIiVzXCIgZmllbGROYW1lIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGRlZmluZWQgc2NoZW1hLiAgSXQgbXVzdCBiZSBhIFwiJXNcIiBhbmQgaXQgbXVzdCBiZSBvbmUgb2YgXCIlc1wiLiBUaGUgZmllbGRWYWx1ZSBnaXZlbiB3YXMgXCIlc1wiJyxcblx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLmVudW0uam9pbigpLFxuXHRcdFx0XHRmaWVsZFZhbHVlXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gaXNWYWxpZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB3aGF0IGlzIHNldCBhcyB0aGUgdmFsaWRhdGVUeXBlIGZvciB0aGUgZ2l2ZW4gZmllbGQgYW5kIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdmFsaWRhdGlvbiB0eXBlIGZvciB0aGUgZ2l2ZW4gZmllbGQgYW5kIGluc3RhbmNlLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUeXBlRm9yRmllbGQgPSAoIGZpZWxkTmFtZSwgaW5zdGFuY2UgKSA9PiB7XG5cdHJldHVybiBpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlZBTElEQVRFX1RZUEVTIF1bIGZpZWxkTmFtZSBdID9cblx0XHRpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlZBTElEQVRFX1RZUEVTIF1bIGZpZWxkTmFtZSBdIDpcblx0XHRWQUxJREFURV9UWVBFLlJBVztcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAnZXZlbnQnO1xuXG5leHBvcnQgY29uc3QgRVZFTlRfU1RBVFVTX0lEID0ge1xuXHRTT0xEX09VVDogJ3NvbGRfb3V0Jyxcblx0UE9TVFBPTkVEOiAncG9zdHBvbmVkJyxcblx0Q0FOQ0VMTEVEOiAnY2FuY2VsbGVkJyxcbn07XG5cbmV4cG9ydCBjb25zdCBFVkVOVF9TVEFUVVNfSURTID0gdmFsdWVzKCBFVkVOVF9TVEFUVVNfSUQgKTtcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnknO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG5cdEdSRUFURVJfVEhBTixcblx0R1JFQVRFUl9USEFOX0FORF9FUVVBTCxcblx0TEVTU19USEFOX0FORF9FUVVBTCxcbn0gZnJvbSAnLi4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBub3dEYXRlQW5kVGltZSA9IG1vbWVudCgpO1xuXG4vKipcbiAqIERlc2NyaWJlZCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7e2F0dHJpYnV0ZXM6ICp9fVxuICovXG5leHBvcnQgY29uc3QgcXVlcnlEYXRhVHlwZXMgPSB7XG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnRVZUX25hbWUnLFxuXHRcdFx0J0VWVF9JRCcsXG5cdFx0XHQnc3RhcnRfZGF0ZScsXG5cdFx0XHQnZW5kX2RhdGUnLFxuXHRcdFx0J3RpY2tldF9zdGFydCcsXG5cdFx0XHQndGlja2V0X2VuZCcsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdFx0c2hvd0V4cGlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXHRcdGNhdGVnb3J5U2x1ZzogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRtb250aDogUHJvcFR5cGVzLm1vbnRoLFxuXHR9ICksXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0XHRzaG93RXhwaXJlZDogYm9vbGVhblxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAnc3RhcnRfZGF0ZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdFx0c2hvd0V4cGlyZWQ6IGZhbHNlLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGFuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRzdGFydF9kYXRlOiAnRGF0ZXRpbWUuRFRUX0VWVF9zdGFydCcsXG5cdFx0ZW5kX2RhdGU6ICdEYXRldGltZS5EVFRfRVZUX2VuZCcsXG5cdFx0dGlja2V0X3N0YXJ0OiAnRGF0ZXRpbWUuVGlja2V0LlRLVF9zdGFydF9kYXRlJyxcblx0XHR0aWNrZXRfZW5kOiAnRGF0ZXRpbWUuVGlja2V0LlRLVF9lbmRfZGF0ZScsXG5cdH07XG5cdHJldHVybiBpc1VuZGVmaW5lZCggb3JkZXJCeU1hcFsgb3JkZXJCeSBdICkgP1xuXHRcdG9yZGVyQnkgOlxuXHRcdG9yZGVyQnlNYXBbIG9yZGVyQnkgXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHdoZXJlIGNvbmRpdGlvbnMgZm9yIGFuIGV2ZW50cyBlbmRwb2ludCByZXF1ZXN0IHVzaW5nIHByb3ZpZGVkXG4gKiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dFeHBpcmVkICBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGV4cGlyZWQgZXZlbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGNhdGVnb3J5U2x1ZyAgUmV0dXJuIGV2ZW50cyBmb3IgdGhlIGdpdmVuIGNhdGVnb3J5U2x1Z1xuICogQHBhcmFtIHtzdHJpbmd9IG1vbnRoICAgICAgICAgUmV0dXJuIGV2ZW50cyBmb3IgdGhlIGdpdmVuIG1vbnRoLlxuICogXHRcdFx0XHRcdFx0XHRcdCBDYW4gYmUgYW55IG1vbnRoIGZvcm1hdCByZWNvZ25pemVkIGJ5IG1vbWVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgIFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICgge1xuXHRzaG93RXhwaXJlZCA9IGZhbHNlLFxuXHRjYXRlZ29yeVNsdWcsXG5cdG1vbnRoID0gJ25vbmUnLFxufSApID0+IHtcblx0Y29uc3Qgd2hlcmUgPSBbXTtcblxuXHRpZiAoICEgc2hvd0V4cGlyZWQgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtEYXRldGltZS5EVFRfRVZUX2VuZCoqZXhwaXJlZF1bXT0nICsgR1JFQVRFUl9USEFOICtcblx0XHRcdCcmd2hlcmVbRGF0ZXRpbWUuRFRUX0VWVF9lbmQqKmV4cGlyZWRdW109JyArXG5cdFx0XHRub3dEYXRlQW5kVGltZS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0fVxuXHRpZiAoIGNhdGVnb3J5U2x1ZyApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW1Rlcm1fUmVsYXRpb25zaGlwLlRlcm1fVGF4b25vbXkuVGVybS5zbHVnXT0nICsgY2F0ZWdvcnlTbHVnXG5cdFx0KTtcblx0fVxuXHRpZiAoIG1vbnRoICYmIG1vbnRoICE9PSAnbm9uZScgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtEYXRldGltZS5EVFRfRVZUX3N0YXJ0XVtdPScgKyBHUkVBVEVSX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbRGF0ZXRpbWUuRFRUX0VWVF9zdGFydF1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLnN0YXJ0T2YoICdtb250aCcgKS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RhdGV0aW1lLkRUVF9FVlRfZW5kXVtdPScgKyBMRVNTX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbRGF0ZXRpbWUuRFRUX0VWVF9lbmRdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5lbmRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9hc3NlcnRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vYmFzZSc7XG5leHBvcnQgKiBmcm9tICcuL2RlZmF1bHQtbW9kZWwtc3RhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9lbmRwb2ludHMnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnRpdHktZmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL3ByaW1hcnkta2V5cyc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVsLW5hbWVzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBwcmltYXJ5S2V5cyB9IGZyb20gJy4vcHJpbWFyeS1rZXlzLmpzJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGtleXMsIHN0YXJ0Q2FzZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGx1cmFsaXplIGZyb20gJ3BsdXJhbGl6ZSc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdtZW1pemUnO1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgbW9kZWwgbmFtZXMgY3VycmVudGx5IGV4cG9zZWQgZm9yIFJFU1QgQVBJIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FUyA9IGtleXMoIHByaW1hcnlLZXlzICk7XG5cbi8qKlxuICogVXNlZCB0byBub3JtYWxpemUgdGhlIHBsdXJhbCBmb3JtIG9mIGEgZ2l2ZW4gbW9kZWwgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gIEVuc3VyZXMgdGhlIGdpdmVuIG1vZGVsTmFtZSBpcyBpdHMgcGx1cmFsIGZvcm0uXG4gKi9cbmV4cG9ydCBjb25zdCBwbHVyYWxNb2RlbE5hbWUgPSBtZW1vaXplKFxuXHQoIG1vZGVsTmFtZSApID0+IHBsdXJhbGl6ZSggbW9kZWxOYW1lIClcbik7XG5cbi8qKlxuICogVXNlZCB0byBub3JtYWxpemUgdGhlIHNpbmd1bGFyIGZvcm0gb2YgYSBnaXZlbiBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSBFbnN1cmVzIHRoZSBnaXZlbiBtb2RlbE5hbWUgaXMgaW4gaXRzIHNpbmd1bGFyIGZvcm0uXG4gKi9cbmV4cG9ydCBjb25zdCBzaW5ndWxhck1vZGVsTmFtZSA9IG1lbW9pemUoXG5cdCggbW9kZWxOYW1lICkgPT4gcGx1cmFsaXplLnNpbmd1bGFyKCBtb2RlbE5hbWUgKVxuKTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgY2FwaXRhbGl6ZWQgc25ha2VjYXNlIGZvcm1hdCBmb3IgdGhlIGdpdmVuIG1vZGVsIG5hbWUgdHlwaWNhbGx5XG4gKiB1c2VkIGluIHF1ZXJ5IHN0cmluZ3MuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBtb2RlbE5hbWVGb3JRdWVyeVN0cmluZyggJ21lc3NhZ2VfdGVtcGxhdGVfZ3JvdXAnICk7XG4gKiAvLyBNZXNzYWdlX1RlbXBsYXRlX0dyb3VwXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZm9ybWF0dGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nID0gbWVtb2l6ZShcblx0KCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdG1vZGVsTmFtZSA9IHN0YXJ0Q2FzZSggbW9kZWxOYW1lICk7XG5cdFx0cmV0dXJuIG1vZGVsTmFtZS5yZXBsYWNlKCAvXFxzL2csICdfJyApO1xuXHR9XG4pO1xuIiwiaW1wb3J0ICogYXMgYXR0ZW5kZWVNb2RlbCBmcm9tICcuL2F0dGVuZGVlJztcbmltcG9ydCAqIGFzIGNoZWNrSW5Nb2RlbCBmcm9tICcuL2NoZWNraW4nO1xuaW1wb3J0ICogYXMgZGF0ZVRpbWVNb2RlbCBmcm9tICcuL2RhdGV0aW1lJztcbmltcG9ydCAqIGFzIGV2ZW50TW9kZWwgZnJvbSAnLi9ldmVudCc7XG5pbXBvcnQgKiBhcyBwcmljZVR5cGVNb2RlbCBmcm9tICcuL3ByaWNlLXR5cGUnO1xuaW1wb3J0ICogYXMgcmVnaXN0cmF0aW9uTW9kZWwgZnJvbSAnLi9yZWdpc3RyYXRpb24nO1xuaW1wb3J0ICogYXMgc3RhdHVzTW9kZWwgZnJvbSAnLi9zdGF0dXMnO1xuaW1wb3J0ICogYXMgdGlja2V0TW9kZWwgZnJvbSAnLi90aWNrZXQnO1xuZXhwb3J0IHtcblx0YXR0ZW5kZWVNb2RlbCxcblx0Y2hlY2tJbk1vZGVsLFxuXHRkYXRlVGltZU1vZGVsLFxuXHRldmVudE1vZGVsLFxuXHRwcmljZVR5cGVNb2RlbCxcblx0cmVnaXN0cmF0aW9uTW9kZWwsXG5cdHN0YXR1c01vZGVsLFxuXHR0aWNrZXRNb2RlbCxcbn07XG4iLCJcbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ3ByaWNlX3R5cGUnO1xuXG5leHBvcnQgY29uc3QgQkFTRV9QUklDRV9UWVBFUyA9IHtcblx0QkFTRV9QUklDRTogMSxcblx0RElTQ09VTlQ6IDIsXG5cdFNVUkNIQVJHRTogMyxcblx0VEFYOiA0LFxufTtcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBkYXRhIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgaXNBcnJheSwgcmVkdWNlLCB0cmltRW5kIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRhc3NlcnRFbnRpdHlIYXNLZXksXG5cdGFzc2VydElzQXJyYXksXG5cdGFzc2VydElzTm90RW1wdHksXG5cdGFzc2VydElzTWFwLFxufSBmcm9tICcuL2Fzc2VydGlvbnMnO1xuXG4vKipcbiAqIEV4cG9zZXMgYSBtYXAgb2YgbW9kZWxuYW1lIHRvIHByaW1hcnkga2V5IGV4cG9zZWQgYnkgdGhlIGVlanMuZGF0YSBnbG9iYWxcbiAqIHZpYSB0aGUgc2VydmVyLlxuICpcbiAqIEB0eXBlIHt7fX1cbiAqL1xuZXhwb3J0IGNvbnN0IHsgcHJpbWFyeV9rZXlzOiBwcmltYXJ5S2V5cyA9IHt9IH0gPSBkYXRhLnBhdGhzO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGtleXMgZnJvbSB0aGUgcHJvdmlkZWQgZW50aXR5LlxuICogVGhpcyBmdW5jdGlvbiB3b3VsZCBiZSB1c2VkIGZvciBtb2RlbHMgdGhhdCBoYXZlIGNvbWJpbmVkIHByaW1hcnkga2V5c1xuICogKGRlbGl2ZXJlZCBhcyBhbiBhcnJheSkuXG4gKlxuICogQHR5cGUgeyBtZW1vaXplZCB9XG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHZhbHVlcy5cbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfVxuICovXG5leHBvcnQgY29uc3QgdmFsdWVzRm9yQ29tYmluZWRQcmltYXJ5S2V5cyA9IG1lbW9pemUoICgga2V5cywgZW50aXR5ICkgPT4ge1xuXHRhc3NlcnRJc0FycmF5KCBrZXlzICk7XG5cdGNvbnN0IHByaW1hcnlLZXkgPSByZWR1Y2UoIGtleXMsIGZ1bmN0aW9uKCByZXN1bHQsIGtleSApIHtcblx0XHRhc3NlcnRFbnRpdHlIYXNLZXkoIGtleSwgZW50aXR5ICk7XG5cdFx0cmV0dXJuIGVudGl0eVsgcmVzdWx0IF0gKyAnOicgKyBlbnRpdHlbIGtleSBdO1xuXHR9ICk7XG5cdHJldHVybiB0cmltRW5kKCBwcmltYXJ5S2V5LCAnOicgKTtcbn0gKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGtleSBmcm9tIHRoZSBwcm92aWRlZCBlbnRpdHkuXG4gKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHVzZWQgZm9yIG1vZGVscyB0aGF0IGhhdmUgb25seSBvbmUgcHJpbWFyeSBrZXkuXG4gKlxuICogQHR5cGUge21lbW9pemVkfVxuICogQHJldHVybiB7IGZ1bmN0aW9uIH0gVGhlIHZhbHVlIGZvciB0aGUga2V5IGluIHRoZSBwcm92aWRlZCBlbnRpdHkuXG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH1cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbHVlRm9yUHJpbWFyeUtleSA9IG1lbW9pemUoICgga2V5LCBlbnRpdHkgKSA9PiB7XG5cdGFzc2VydEVudGl0eUhhc0tleSgga2V5LCBlbnRpdHkgKTtcblx0cmV0dXJuIGVudGl0eVsga2V5IF07XG59ICk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJpbWFyeSBrZXkgKG9yIGNvbWJpbmVkIHByaW1hcnkga2V5cykgZnJvbSB0aGUgYXZhaWxhYmxlIGRhdGEuXG4gKlxuICogQHR5cGUge21lbW9pemVkfVxuICogQHJldHVybiB7IGZ1bmN0aW9uKHN0cmluZykgfVxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmltYXJ5S2V5ID0gbWVtb2l6ZSggKCBtb2RlbE5hbWUgKSA9PiB7XG5cdGFzc2VydEVudGl0eUhhc0tleSggbW9kZWxOYW1lLCBwcmltYXJ5S2V5cyApO1xuXHRyZXR1cm4gcHJpbWFyeUtleXNbIG1vZGVsTmFtZSBdO1xufSApO1xuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSBzdHJpbmcgZm9yIGdldHRpbmcgdGhlIGVudGl0aWVzIGJlbG9uZ2luZyB0byBhIG1vZGVsIGZvciB0aGVcbiAqIGdpdmVuIHByaW1hcnkga2V5IHZhbHVlc1xuICpcbiAqIEB0eXBlIHttZW1vaXplZH1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByaW1hcnlLZXlRdWVyeVN0cmluZyA9IG1lbW9pemUoXG5cdCggbW9kZWxOYW1lLCBrZXlWYWx1ZXMgPSBbXSApID0+IHtcblx0XHRjb25zdCBwcmltYXJ5S2V5ID0gZ2V0UHJpbWFyeUtleSggbW9kZWxOYW1lICk7XG5cdFx0cmV0dXJuIGBbJHsgcHJpbWFyeUtleSB9XVtJTl09YCArIGtleVZhbHVlcy5qb2luKCk7XG5cdH1cbik7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWVzIGZvciB0aGUgcHJpbWFyeSBrZXlzIGZyb20gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAqXG4gKiBAdHlwZSB7bWVtb2l6ZWR9XG4gKiBAcmV0dXJuIHsgZnVuY3Rpb24gfSAgSWYgdGhlIG1vZGVsIGhhcyBvbmx5IG9uZSBwcmltYXJ5IGtleSB0aGVuIHRoZSB2YWx1ZSB3aWxsXG4gKiBiZSBhIHNpbXBsZSBzdHJpbmcuICBJZiB0aGUgbW9kZWwgaGFzIGNvbWJpbmVkIHByaW1hcnkga2V5cywgdGhlbiB0aGUgdmFsdWVcbiAqIHdpbGwgYmUgYXMgc3RyaW5nIGluIHRoZSBmb3JtYXQgYCVzLiVzYCBmb3IgdGhlIHByaW1hcnkga2V5IHZhbHVlcy5cbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfVxuICovXG5leHBvcnQgY29uc3QgZ2V0RW50aXR5UHJpbWFyeUtleVZhbHVlcyA9IG1lbW9pemUoICggbW9kZWxOYW1lLCBlbnRpdHkgKSA9PiB7XG5cdGNvbnN0IGtleXMgPSBnZXRQcmltYXJ5S2V5KCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIGlzQXJyYXkoIGtleXMgKSA/XG5cdFx0dmFsdWVzRm9yQ29tYmluZWRQcmltYXJ5S2V5cygga2V5cywgZW50aXR5ICkgOlxuXHRcdHZhbHVlRm9yUHJpbWFyeUtleSgga2V5cywgZW50aXR5ICk7XG59ICk7XG5cbi8qKlxuICogVGhpcyByZWNlaXZlcyBhbiBhcnJheSBvZiBlbnRpdGllcyBhbmQgcmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgdGhvc2Ugc2FtZVxuICogZW50aXRpZXMgaW5kZXhlZCBieSB0aGUgcHJpbWFyeSBrZXkgdmFsdWUgZm9yIGVhY2ggZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IGVudGl0aWVzXG4gKiBAcmV0dXJuIHtNYXB9ICBBIGNvbGxlY3Rpb24gaW5kZXhlZCBieSB0aGUgcHJpbWFyeSBrZXkgdmFsdWVzIGZvciBlYWNoIGVudGl0eS5cbiAqIEB0aHJvd3Mge0V4Y2VwdGlvbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUgPSAoIG1vZGVsTmFtZSwgZW50aXRpZXMgPSBbXSApID0+IHtcblx0YXNzZXJ0SXNOb3RFbXB0eShcblx0XHRlbnRpdGllcyxcblx0XHRfXyhcblx0XHRcdCdUaGUgcHJvdmlkZWQgYXJyYXkgb2YgZW50aXRpZXMgbXVzdCBub3QgYmUgZW1wdHknLFxuXHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHQpXG5cdCk7XG5cdGFzc2VydElzQXJyYXkoIGVudGl0aWVzICk7XG5cblx0Y29uc3QgbWFwcGVkRW50aXRpZXMgPSBuZXcgTWFwKCk7XG5cdGVudGl0aWVzLmZvckVhY2goICggZW50aXR5ICkgPT4ge1xuXHRcdG1hcHBlZEVudGl0aWVzLnNldChcblx0XHRcdGdldEVudGl0eVByaW1hcnlLZXlWYWx1ZXMoIG1vZGVsTmFtZSwgZW50aXR5ICksXG5cdFx0XHRlbnRpdHlcblx0XHQpO1xuXHR9ICk7XG5cdHJldHVybiBtYXBwZWRFbnRpdGllcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbnRpdHkgaW5zdGFuY2VzIHVzaW5nIHRoZSBnaXZlbiBmYWN0b3J5IGFuZCBhcnJheVxuICogb2YgZW50aXR5IHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZmFjdG9yeVxuICogQHBhcmFtIHtNYXB9IGVudGl0aWVzXG4gKiBAcmV0dXJuIHtNYXB9ICBBbiBhcnJheSBvZiBlbnRpdHkgaW5zdGFuY2VzIGluZGV4ZWQgYnlcbiAqIHRoZWlyIHByaW1hcnkga2V5IHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBbmRLZXlFbnRpdGllc0J5UHJpbWFyeUtleVZhbHVlID0gKFxuXHRmYWN0b3J5LFxuXHRlbnRpdGllcyxcbikgPT4ge1xuXHRhc3NlcnRJc01hcChcblx0XHRlbnRpdGllcyxcblx0XHRfXyhcblx0XHRcdCdUaGUgcHJvdmlkZWQgb2JqZWN0IG9mIGVudGl0aWVzIG11c3QgYmUgYSBNYXAgb2JqZWN0Jyxcblx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0KVxuXHQpO1xuXHRlbnRpdGllcy5mb3JFYWNoKCAoIGVudGl0eSwgZW50aXR5SWQgKSA9PiB7XG5cdFx0ZW50aXRpZXMuc2V0KCBlbnRpdHlJZCwgZmFjdG9yeS5mcm9tRXhpc3RpbmcoIGVudGl0eSApICk7XG5cdH0gKTtcblx0cmV0dXJuIGVudGl0aWVzO1xufTtcbiIsIi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQgKiBhcyBzdGF0dXNNb2RlbCBmcm9tICcuLi9zdGF0dXMvY29uc3RhbnRzJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ3JlZ2lzdHJhdGlvbic7XG5cbmV4cG9ydCBjb25zdCBSRUdJU1RSQVRJT05fU1RBVFVTX0lEUyA9IHZhbHVlcyhcblx0c3RhdHVzTW9kZWwuUkVHSVNUUkFUSU9OX1NUQVRVU19JRFxuKTtcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnknO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkLCB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG59IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0ICogYXMgc3RhdHVzTW9kZWwgZnJvbSAnLi4vc3RhdHVzL2NvbnN0YW50cyc7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0Zm9yRXZlbnRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yQXR0ZW5kZWVJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yVHJhbnNhY3Rpb25JZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yVGlja2V0SWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclN0YXR1c0lkOiBQcm9wVHlwZXMub25lT2YoIHZhbHVlcyggc3RhdHVzTW9kZWwuUkVHSVNUUkFUSU9OX1NUQVRVU19JRCApICksXG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnUkVHX0lEJyxcblx0XHRcdCdSRUdfZGF0ZScsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdH0gKSxcbn07XG5cbmV4cG9ydCBjb25zdCBvcHRpb25zRW50aXR5TWFwID0ge1xuXHRkZWZhdWx0OiB7XG5cdFx0dmFsdWU6ICdSRUdfSUQnLFxuXHRcdGxhYmVsOiAnUkVHX2NvZGUnLFxuXHR9LFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHtcbiAqIFx0e1xuICogXHRcdGF0dHJpYnV0ZXM6IHtcbiAqIFx0XHRcdGxpbWl0OiBudW1iZXIsXG4gKiBcdFx0XHRvcmRlckJ5OiBzdHJpbmcsXG4gKiBcdFx0XHRvcmRlcjogc3RyaW5nLFxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAncmVnX2RhdGUnLFxuXHRcdG9yZGVyOiBRVUVSWV9PUkRFUl9ERVNDLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGEgcmVnaXN0cmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRyZWdfaWQ6ICdSRUdfSUQnLFxuXHRcdHJlZ19kYXRlOiAnUkVHX2RhdGUnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiByZWdpc3RyYXRpb25zIGVuZHBvaW50IHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRXZlbnRJZCAgICBcdElEIG9mIEV2ZW50IHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yQXR0ZW5kZWVJZCAgICBJRCBvZiBBdHRlbmRlZSB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclRyYW5zYWN0aW9uSWQgSUQgb2YgVHJhbnNhY3Rpb24gdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JUaWNrZXRJZCBcdFx0SUQgb2YgVGlja2V0IHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yU3RhdHVzSWQgXHRcdElEIG9mIFN0YXR1cyB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgICBcdFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICgge1xuXHRmb3JFdmVudElkID0gMCxcblx0Zm9yQXR0ZW5kZWVJZCA9IDAsXG5cdGZvclRyYW5zYWN0aW9uSWQgPSAwLFxuXHRmb3JUaWNrZXRJZCA9IDAsXG5cdGZvclN0YXR1c0lkID0gJycsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXHRmb3JFdmVudElkID0gcGFyc2VJbnQoIGZvckV2ZW50SWQsIDEwICk7XG5cdGlmICggZm9yRXZlbnRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JFdmVudElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW0VWVF9JRF09JyArIGZvckV2ZW50SWQgKTtcblx0fVxuXHRmb3JBdHRlbmRlZUlkID0gcGFyc2VJbnQoIGZvckF0dGVuZGVlSWQsIDEwICk7XG5cdGlmICggZm9yQXR0ZW5kZWVJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JBdHRlbmRlZUlkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW0FUVF9JRF09JyArIGZvckF0dGVuZGVlSWQgKTtcblx0fVxuXHRmb3JUcmFuc2FjdGlvbklkID0gcGFyc2VJbnQoIGZvclRyYW5zYWN0aW9uSWQsIDEwICk7XG5cdGlmICggZm9yVHJhbnNhY3Rpb25JZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JUcmFuc2FjdGlvbklkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1RYTl9JRF09JyArIGZvclRyYW5zYWN0aW9uSWQgKTtcblx0fVxuXHRmb3JUaWNrZXRJZCA9IHBhcnNlSW50KCBmb3JUaWNrZXRJZCwgMTAgKTtcblx0aWYgKCBmb3JUaWNrZXRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JUaWNrZXRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtUS1RfSURdPScgKyBmb3JUaWNrZXRJZCApO1xuXHR9XG5cdGlmICggZm9yU3RhdHVzSWQgIT09ICcnICYmIGZvclN0YXR1c0lkICE9PSBudWxsICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtTVFNfSURdPScgKyBmb3JTdGF0dXNJZCApO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ3N0YXR1cyc7XG4vLyB0eXBlc1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX0VNQUlMID0gJ2VtYWlsJztcbmV4cG9ydCBjb25zdCBTVEFUVVNfVFlQRV9FVkVOVCA9ICdldmVudCc7XG5leHBvcnQgY29uc3QgU1RBVFVTX1RZUEVfTUVTU0FHRSA9ICdtZXNzYWdlJztcbmV4cG9ydCBjb25zdCBTVEFUVVNfVFlQRV9QQVlNRU5UID0gJ3BheW1lbnQnO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX1JFR0lTVFJBVElPTiA9ICdyZWdpc3RyYXRpb24nO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX1RSQU5TQUNUSU9OID0gJ3RyYW5zYWN0aW9uJztcbi8vIGVtYWlsXG5leHBvcnQgY29uc3QgRU1BSUxfU1RBVFVTX0lEID0ge1xuXHREUkFGVDogJ0VEUicsXG5cdFNFTlQ6ICdFU04nLFxuXHRFWFBJUkVEOiAnRVhQJyxcbn07XG4vLyBldmVudFxuZXhwb3J0IGNvbnN0IEVWRU5UX1NUQVRVU19JRCA9IHtcblx0QUNUSVZFOiAnQUNUJyxcblx0UkVHSVNUUkFUSU9OX0NMT1NFRDogJ0NMUycsXG5cdERFTEVURUQ6ICdERUwnLFxuXHRERU5JRUQ6ICdERU4nLFxuXHREUkFGVDogJ0RSRicsXG5cdE5PVF9BQ1RJVkU6ICdOQUMnLFxuXHROT1RfT1BFTjogJ05PUCcsXG5cdE9OR09JTkc6ICdPTkcnLFxuXHRSRUdJU1RSQVRJT05fT1BFTjogJ09QTicsXG5cdFBFTkRJTkc6ICdQTkQnLFxuXHRTRUNPTkRBUlk6ICdTRUMnLFxufTtcbi8vIG1lc3NhZ2VcbmV4cG9ydCBjb25zdCBNRVNTQUdFX1NUQVRVU19JRCA9IHtcblx0REVCVUc6ICdNRE8nLFxuXHRFWEVDVVRJTkc6ICdNRVgnLFxuXHRGQUlMOiAnTUZMJyxcblx0SU5DT01QTEVURTogJ01JQycsXG5cdElETEU6ICdNSUQnLFxuXHRSRVNFTkQ6ICdNUlMnLFxuXHRSRVRSWTogJ01SVCcsXG5cdFNFTlQ6ICdNU04nLFxufTtcbi8vIHBheW1lbnRcbmV4cG9ydCBjb25zdCBQQVlNRU5UX1NUQVRVU19JRCA9IHtcblx0QVBQUk9WRUQ6ICdQQVAnLFxuXHRDQU5DRUxMRUQ6ICdQQ04nLFxuXHRERUNMSU5FRDogJ1BEQycsXG5cdEZBSUxFRDogJ1BGTCcsXG5cdFBFTkRJTkc6ICdQUE4nLFxufTtcbi8vIHJlZ2lzdHJhdGlvblxuZXhwb3J0IGNvbnN0IFJFR0lTVFJBVElPTl9TVEFUVVNfSUQgPSB7XG5cdEFQUFJPVkVEOiAnUkFQJyxcblx0Q0FOQ0VMTEVEOiAnUkNOJyxcblx0REVDTElORUQ6ICdSREMnLFxuXHRJTkNPTVBMRVRFOiAnUklDJyxcblx0Tk9UX0FQUFJPVkVEOiAnUk5BJyxcblx0UEVORElOR19QQVlNRU5UOiAnUlBQJyxcblx0V0FJVF9MSVNUOiAnUldMJyxcbn07XG4vLyB0cmFuc2FjdGlvblxuZXhwb3J0IGNvbnN0IFRSQU5TQUNUSU9OX1NUQVRVU19JRCA9IHtcblx0QUJBTkRPTkVEOiAnVEFCJyxcblx0Q09NUExFVEU6ICdUQ00nLFxuXHRGQUlMRUQ6ICdURkwnLFxuXHRJTkNPTVBMRVRFOiAnVElOJyxcblx0T1ZFUlBBSUQ6ICdUT1AnLFxufTtcblxuLy8gdGhlIGZvbGxvd2luZyBhcmUgbm90IGluIHRoZSBzdGF0dXMgZGF0YWJhc2UgYnV0IGFyZSBrZXB0IGhlcmUgZm9yXG4vLyBjb252ZW5pZW5jZVxuXG4vLyBjdXN0b20gcG9zdCB0eXBlc1xuZXhwb3J0IGNvbnN0IENQVF9TVEFUVVNfSUQgPSB7XG5cdFBVQkxJU0g6ICdwdWJsaXNoJyxcblx0RlVUVVJFOiAnZnV0dXJlJyxcblx0RFJBRlQ6ICdkcmFmdCcsXG5cdFBFTkRJTkc6ICdwZW5kaW5nJyxcblx0UFJJVkFURTogJ3ByaXZhdGUnLFxuXHRUUkFTSEVEOiAndHJhc2gnLFxufTtcblxuZXhwb3J0IGNvbnN0IFVOS05PV05fU1RBVFVTX0lEID0gJ3Vua25vd24nO1xuXG5leHBvcnQgY29uc3QgQUxMX1NUQVRVU19JRFMgPSBbXG5cdC4uLnZhbHVlcyggRU1BSUxfU1RBVFVTX0lEICksXG5cdC4uLnZhbHVlcyggRVZFTlRfU1RBVFVTX0lEICksXG5cdC4uLnZhbHVlcyggTUVTU0FHRV9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBQQVlNRU5UX1NUQVRVU19JRCApLFxuXHQuLi52YWx1ZXMoIFJFR0lTVFJBVElPTl9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBUUkFOU0FDVElPTl9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBDUFRfU1RBVFVTX0lEICksXG5cdFVOS05PV05fU1RBVFVTX0lELFxuXTtcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgKiBhcyBzdGF0dXMgZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRVZFTlRfU1RBVFVTX0lEIH0gZnJvbSAnLi4vZXZlbnQnO1xuaW1wb3J0IHsgVElDS0VUX1NUQVRVU19JRCB9IGZyb20gJy4uL3RpY2tldCc7XG5pbXBvcnQgeyBEQVRFVElNRV9TVEFUVVNfSUQgfSBmcm9tICcuLi9kYXRldGltZSc7XG5pbXBvcnQgeyBDSEVDS0lOX1NUQVRVU19JRCB9IGZyb20gJy4uL2NoZWNraW4nO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIFJlZ2lzdHJhdGlvbiBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1JFR0lTVFJBVElPTiA9IHtcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5QRU5ESU5HX1BBWU1FTlQgXTogbmV3IExhYmVsKFxuXHRcdF9fKCAncGVuZGluZyBwYXltZW50JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdF9fKCAncGVuZGluZyBwYXltZW50cycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELkFQUFJPVkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYXBwcm92ZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5OT1RfQVBQUk9WRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdub3QgYXBwcm92ZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5DQU5DRUxMRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdjYW5jZWxsZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5JTkNPTVBMRVRFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnaW5jb21wbGV0ZScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELkRFQ0xJTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZGVjbGluZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5XQUlUX0xJU1QgXTogbmV3IExhYmVsKFxuXHRcdF9fKCAnd2FpdCBsaXN0JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdF9fKCAnd2FpdCBsaXN0cycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIFRyYW5zYWN0aW9uIHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKlxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RSQU5TQUNUSU9OID0ge1xuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuT1ZFUlBBSUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdvdmVycGFpZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuQ09NUExFVEUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdjb21wbGV0ZScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuSU5DT01QTEVURSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2luY29tcGxldGUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuVFJBTlNBQ1RJT05fU1RBVFVTX0lELkZBSUxFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2ZhaWxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuQUJBTkRPTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYWJhbmRvbmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgcGF5bWVudCBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1BBWU1FTlQgPSB7XG5cdFsgc3RhdHVzLlBBWU1FTlRfU1RBVFVTX0lELkFQUFJPVkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYWNjZXB0ZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUEFZTUVOVF9TVEFUVVNfSUQuUEVORElORyBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3BlbmRpbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUEFZTUVOVF9TVEFUVVNfSUQuQ0FOQ0VMTEVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnY2FuY2VsbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHQpLFxuXHRbIHN0YXR1cy5QQVlNRU5UX1NUQVRVU19JRC5ERUNMSU5FRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2RlY2xpbmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHQpLFxuXHRbIHN0YXR1cy5QQVlNRU5UX1NUQVRVU19JRC5GQUlMRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdmYWlsZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gbWFwIGZvciBNZXNzYWdlIHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfTUVTU0FHRSA9IHtcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuU0VOVCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3NlbnQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuSURMRSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3F1ZXVlZCBmb3Igc2VuZGluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5GQUlMIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZmFpbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELkRFQlVHIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZGVidWcgb25seScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5FWEVDVVRJTkcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdtZXNzZW5nZXIgaXMgZXhlY3V0aW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELlJFU0VORCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3F1ZXVlZCBmb3IgcmVzZW5kaW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELklOQ09NUExFVEUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdxdWV1ZWQgZm9yIGdlbmVyYXRpbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuUkVUUlkgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdmYWlsZWQgc2VuZGluZywgY2FuIGJlIHJldHJpZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gbWFwIGZvciBDUFQgc3RhdHVzZXNcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DUFQgPSB7XG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuUFVCTElTSCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3B1Ymxpc2hlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5DUFRfU1RBVFVTX0lELkZVVFVSRSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3NjaGVkdWxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5DUFRfU1RBVFVTX0lELkRSQUZUIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZHJhZnQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuQ1BUX1NUQVRVU19JRC5QRU5ESU5HIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncGVuZGluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5DUFRfU1RBVFVTX0lELlBSSVZBVEUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdwcml2YXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuVFJBU0hFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3RyYXNoZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8vIHRoZSBmb2xsb3dpbmcgc3RhdHVzIG1hcHMgYXJlIGZvciBtb2RlbCBzdGF0dXNlcyB0aGF0IGFyZSBub3Qgc2F2ZWQgaW4gdGhlXG4vLyBzdGF0dXMgdGFibGUgYnV0IGZvciBjb252ZW5pZW5jZSBoYXZlIHRoZWlyIGxhYmVscyByZXRyaWV2YWJsZSB2aWEgaGVyZS5cblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIEV2ZW50IFN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfRVZFTlQgPSB7XG5cdFsgRVZFTlRfU1RBVFVTX0lELlNPTERfT1VUIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnc29sZCBvdXQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBFVkVOVF9TVEFUVVNfSUQuUE9TVFBPTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncG9zdHBvbmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgRVZFTlRfU1RBVFVTX0lELkNBTkNFTExFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2NhbmNlbGxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIFRpY2tldCBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RJQ0tFVCA9IHtcblx0WyBUSUNLRVRfU1RBVFVTX0lELkFSQ0hJVkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYXJjaGl2ZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBUSUNLRVRfU1RBVFVTX0lELkVYUElSRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdleHBpcmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgVElDS0VUX1NUQVRVU19JRC5TT0xEX09VVCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3NvbGQgb3V0JywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgVElDS0VUX1NUQVRVU19JRC5QRU5ESU5HIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAndXBjb21pbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBUSUNLRVRfU1RBVFVTX0lELk9OU0FMRSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ29uIHNhbGUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gbWFwIGZvciBkYXRldGltZSBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0RBVEVUSU1FID0ge1xuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5DQU5DRUxMRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdjYW5jZWxsZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBEQVRFVElNRV9TVEFUVVNfSUQuU09MRF9PVVQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdzb2xkIG91dCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5FWFBJUkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZXhwaXJlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5JTkFDVElWRSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2luYWN0aXZlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgREFURVRJTUVfU1RBVFVTX0lELlVQQ09NSU5HIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAndXBjb21pbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBEQVRFVElNRV9TVEFUVVNfSUQuQUNUSVZFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYWN0aXZlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgREFURVRJTUVfU1RBVFVTX0lELlBPU1RQT05FRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3Bvc3Rwb25lZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIGNoZWNraW4gc3RhdHVzZXNcbiAqXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ0hFQ0tJTiA9IHtcblx0WyBDSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9JTiBdOiBuZXcgTGFiZWwoXG5cdFx0X18oICdjaGVjay1pbicsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRfXyggJ2NoZWNrLWlucycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIENIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX09VVCBdOiBuZXcgTGFiZWwoXG5cdFx0X18oICdjaGVjay1vdXQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0X18oICdjaGVjay1vdXRzJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfTkVWRVIgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICduZXZlciBjaGVja2VkIGluJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIENvbWJpbmVkIHRyYW5zbGF0aW9uIG1hcCBmb3IgYWxsIHN0YXR1c2VzLlxuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0FMTCA9IHtcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9SRUdJU1RSQVRJT04sXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfVFJBTlNBQ1RJT04sXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfUEFZTUVOVCxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9NRVNTQUdFLFxuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX0NQVCxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9FVkVOVCxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9USUNLRVQsXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfREFURVRJTUUsXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ0hFQ0tJTixcblx0WyBzdGF0dXMuVU5LTk9XTl9TVEFUVVNfSUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICd1bmtub3duJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHByZXR0eSBzdGF0dXMgbGFiZWwgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0dXNDb2RlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNpbmd1bGFyICBXaGV0aGVyIHRvIHJldHVybiB0aGUgc2luZ3VsYXIgb3IgcGx1cmFsIGxhYmVsXG4gKiB2YWx1ZVxuICogQHBhcmFtIHsoc2VudGVuY2V8bG93ZXJ8dXBwZXIpfSBzY2hlbWFcbiAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyB0aGUgbWFwcGVkIHByZXR0eSBsYWJlbCBmb3IgdGhlIGdpdmVuIHN0YXR1cyBjb2RlIG9yXG4gKiBhIGZvcm1hdHRlZCAndW5rb3duJyBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gbWFwcGVkIHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZXR0eVN0YXR1cyA9IChcblx0c3RhdHVzQ29kZSxcblx0c2luZ3VsYXIgPSB0cnVlLFxuXHRzY2hlbWEgPSBMYWJlbC5GT1JNQVRfU0VOVEVOQ0VfQ0FTRVxuKSA9PiB7XG5cdHJldHVybiBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0FMTFsgc3RhdHVzQ29kZSBdID9cblx0XHRTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0FMTFsgc3RhdHVzQ29kZSBdLmFzRm9ybWF0dGVkKCBzaW5ndWxhciwgc2NoZW1hICkgOlxuXHRcdFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMWyBzdGF0dXMuVU5LTk9XTl9TVEFUVVNfSUQgXS5hc0Zvcm1hdHRlZChcblx0XHRcdHNpbmd1bGFyLFxuXHRcdFx0c2NoZW1hXG5cdFx0KTtcbn07XG5cbi8qKlxuICogRXhwZWN0cyBhbiBhcnJheSBvZiBzdGF0dXMgY29kZXMgYW5kIHJldHVybnMgYW4gb2JqZWN0IGluZGV4ZWQgYnkgY29kZXMgd2l0aFxuICogdmFsdWVzIGJlaW5nIHRoZSBmb3JtYXR0ZWQgcHJldHR5IGxhYmVscyBmb3IgZWFjaCBjb2RlIGFjY29yZGluZyB0byB0aGVcbiAqIHByb3ZpZGVkIGFyZ3VtZW50c1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXR1c0NvZGVzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNpbmd1bGFyXG4gKiBAcGFyYW0geyhzZW50ZW5jZXxsb3dlcnx1cHBlcil9IHNjaGVtYVxuICogQHJldHVybiB7T2JqZWN0fSBBbiBvYmplY3QgbWFwcGluZyBzdGF0dXMgY29kZSB0byBwcmV0dHkgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBwcmV0dHlTdGF0dXNlcyA9IChcblx0c3RhdHVzQ29kZXMsXG5cdHNpbmd1bGFyID0gdHJ1ZSxcblx0c2NoZW1hID0gTGFiZWwuRk9STUFUX1NFTlRFTkNFX0NBU0VcbikgPT4ge1xuXHRpZiAoICEgaXNBcnJheSggc3RhdHVzQ29kZXMgKSApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCAnRXhwZWN0IGluY29taW5nIHN0YXR1c0NvZGVzIGFyZ3VtZW50JyArXG5cdFx0XHQnIHRvIGJlIGFuIGFycmF5JyApO1xuXHR9XG5cdGNvbnN0IG1hcHBlZFN0YXR1c2VzID0ge307XG5cdHN0YXR1c0NvZGVzLmZvckVhY2goICggc3RhdHVzQ29kZSApID0+IHtcblx0XHRtYXBwZWRTdGF0dXNlc1sgc3RhdHVzQ29kZSBdID0gcHJldHR5U3RhdHVzKFxuXHRcdFx0c3RhdHVzQ29kZSxcblx0XHRcdHNpbmd1bGFyLFxuXHRcdFx0c2NoZW1hXG5cdFx0KTtcblx0fSApO1xuXHRyZXR1cm4gbWFwcGVkU3RhdHVzZXM7XG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfQVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcbn0gZnJvbSAnLi4vYmFzZSc7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHR9XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRRdWVyeURhdGEgPSB7XG5cdHF1ZXJ5RGF0YToge1xuXHRcdGxpbWl0OiAyNSxcblx0XHRvcmRlckJ5OiAnc3RhdHVzQ29kZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0FTQyxcblx0fSxcbn07XG5cbi8qKlxuICogVXNlZCB0byBtYXAgYW4gb3JkZXJCeSBzdHJpbmcgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkIGluIGEgUkVTVCBxdWVyeSBmcm9tXG4gKiB0aGUgY29udGV4dCBvZiBhbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JkZXJCeVxuICpcbiAqIEByZXR1cm4geyBzdHJpbmcgfSBSZXR1cm5zIGFuIGFjdHVhbCBvcmRlckJ5IHN0cmluZyBmb3IgdGhlIFJFU1QgcXVlcnkgZm9yXG4gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvdmlkZWQgYWxpYXNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcE9yZGVyQnkgPSAoIG9yZGVyQnkgKSA9PiB7XG5cdGNvbnN0IG9yZGVyQnlNYXAgPSB7XG5cdFx0c3RhdHVzQ29kZTogJ1NUU19jb2RlJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gZXZlbnRzIGVuZHBvaW50IHJlcXVlc3QgdXNpbmcgcHJvdmlkZWRcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGF0dXNUeXBlIFx0SUQgZm9yIHR5cGUgb2YgU3RhdHVzIHRvIHJldHJpZXZlXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgIFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICggeyBzdGF0dXNUeXBlIH0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGlmICggc3RhdHVzVHlwZSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbU1RTX3R5cGVdPScgKyBzdGF0dXNUeXBlICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG5cbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgTU9ERUxfTkFNRSA9ICd0aWNrZXQnO1xuXG5leHBvcnQgY29uc3QgVElDS0VUX1NUQVRVU19JRCA9IHtcblx0U09MRF9PVVQ6ICdUS1MnLFxuXHRFWFBJUkVEOiAnVEtFJyxcblx0QVJDSElWRUQ6ICdUS0EnLFxuXHRQRU5ESU5HOiAnVEtQJyxcblx0T05TQUxFOiAnVEtPJyxcbn07XG5cbmV4cG9ydCBjb25zdCBUSUNLRVRfU1RBVFVTX0lEUyA9IHZhbHVlcyggVElDS0VUX1NUQVRVU19JRCApO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cy1oZWxwZXInO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG5cdEdSRUFURVJfVEhBTixcblx0R1JFQVRFUl9USEFOX0FORF9FUVVBTCxcblx0TEVTU19USEFOX0FORF9FUVVBTCxcbn0gZnJvbSAnLi4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBub3dEYXRlQW5kVGltZSA9IG1vbWVudCgpO1xuXG4vKipcbiAqIERlc2NyaWJlZCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7e2F0dHJpYnV0ZXM6ICp9fVxuICovXG5leHBvcnQgY29uc3QgcXVlcnlEYXRhVHlwZXMgPSB7XG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnVEtUX25hbWUnLFxuXHRcdFx0J1RLVF9JRCcsXG5cdFx0XHQnc3RhcnRfZGF0ZScsXG5cdFx0XHQnZW5kX2RhdGUnLFxuXHRcdF0gKSxcblx0XHRvcmRlcjogUHJvcFR5cGVzLm9uZU9mKCBBTExPV0VEX09SREVSX1ZBTFVFUyApLFxuXHRcdHNob3dFeHBpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblx0XHRtb250aDogUHJvcFR5cGVzLm1vbnRoLFxuXHR9ICksXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0XHRzaG93RXhwaXJlZDogYm9vbGVhblxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAnc3RhcnRfZGF0ZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdFx0c2hvd0V4cGlyZWQ6IGZhbHNlLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGEgdGlja2V0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRzdGFydF9kYXRlOiAnVEtUX3N0YXJ0X2RhdGUnLFxuXHRcdGVuZF9kYXRlOiAnVEtUX2VuZF9kYXRlJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gdGlja2V0cyBlbmRwb2ludCByZXF1ZXN0IHVzaW5nIHByb3ZpZGVkXG4gKiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dFeHBpcmVkIFx0V2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBleHBpcmVkIHRpY2tldHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9udGggICAgICAgICAgICBSZXR1cm4gdGlja2V0cyBmb3IgdGhlIGdpdmVuIG1vbnRoLiBDYW4gYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdGluIGFueSBtb250aCBmb3JtYXQgcmVjb2duaXplZCBieSBtb21lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JFdmVudElkICAgIFx0SUQgb2YgRXZlbnQgdG8gcmV0cmlldmUgdGlja2V0cyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JEYXRldGltZUlkICAgIElEIG9mIERhdGV0aW1lIHRvIHJldHJpZXZlIHRpY2tldHMgZm9yXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgIFx0VGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdGZvckV2ZW50SWQgPSAwLFxuXHRmb3JEYXRldGltZUlkID0gMCxcblx0c2hvd0V4cGlyZWQgPSBmYWxzZSxcblx0bW9udGggPSAnbm9uZScsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXHRpZiAoICEgc2hvd0V4cGlyZWQgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtUS1RfZW5kX2RhdGUqKmV4cGlyZWRdW109JyArIEdSRUFURVJfVEhBTiArXG5cdFx0XHQnJndoZXJlW1RLVF9lbmRfZGF0ZSoqZXhwaXJlZF1bXT0nICtcblx0XHRcdG5vd0RhdGVBbmRUaW1lLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGlmICggbW9udGggJiYgbW9udGggIT09ICdub25lJyApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW1RLVF9zdGFydF9kYXRlXVtdPScgKyBHUkVBVEVSX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbVEtUX3N0YXJ0X2RhdGVdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5zdGFydE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtUS1RfZW5kX2RhdGVdW109JyArIExFU1NfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtUS1RfZW5kX2RhdGVdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5lbmRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGZvckV2ZW50SWQgPSBwYXJzZUludCggZm9yRXZlbnRJZCwgMTAgKTtcblx0aWYgKCBmb3JFdmVudElkICE9PSAwICYmICEgaXNOYU4oIGZvckV2ZW50SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRGF0ZXRpbWUuRXZlbnQuRVZUX0lEXT0nICsgZm9yRXZlbnRJZCApO1xuXHR9XG5cdGZvckRhdGV0aW1lSWQgPSBwYXJzZUludCggZm9yRGF0ZXRpbWVJZCwgMTAgKTtcblx0aWYgKCBmb3JEYXRldGltZUlkICE9PSAwICYmICEgaXNOYU4oIGZvckRhdGV0aW1lSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRGF0ZXRpbWUuRFRUX0lEXT0nICsgZm9yRGF0ZXRpbWVJZCApO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgTU9ERUxfTkFNRSwgVElDS0VUX1NUQVRVU19JRCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9XG4gKi9cbmNvbnN0IGFzc2VydFRpY2tldEVudGl0eSA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIFRpY2tldEVudGl0eSwgTU9ERUxfTkFNRSApICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHQnVGhlIHByb3ZpZGVkIGVudGl0eSBpcyBub3QgYSB0aWNrZXQgaW5zdGFuY2UnXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciBwdXJjaGFzZVxuICovXG5leHBvcnQgY29uc3QgaXNPblNhbGUgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0YXNzZXJ0VGlja2V0RW50aXR5KCBUaWNrZXRFbnRpdHkgKTtcblx0cmV0dXJuICEgaXNBcmNoaXZlZCggVGlja2V0RW50aXR5ICkgJiZcblx0XHRUaWNrZXRFbnRpdHkuc3RhcnREYXRlLmRpZmZOb3coKSA8IDAgJiZcblx0XHRUaWNrZXRFbnRpdHkuZW5kRGF0ZS5kaWZmTm93KCkgPiAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldCBjYW4gbm8gbG9uZ2VyIGJlIHB1cmNoYXNlZFxuICovXG5leHBvcnQgY29uc3QgaXNFeHBpcmVkID0gKCBUaWNrZXRFbnRpdHkgKSA9PiB7XG5cdGFzc2VydFRpY2tldEVudGl0eSggVGlja2V0RW50aXR5ICk7XG5cdHJldHVybiBUaWNrZXRFbnRpdHkuZW5kRGF0ZS5kaWZmTm93KCkgPCAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldHMgc29sZCBtZWV0cyBvciBleGNlZWRzIGF2YWlsYWJsZSBxdWFudGl0eVxuICovXG5leHBvcnQgY29uc3QgaXNTb2xkT3V0ID0gKCBUaWNrZXRFbnRpdHkgKSA9PiB7XG5cdGFzc2VydFRpY2tldEVudGl0eSggVGlja2V0RW50aXR5ICk7XG5cdGNvbnN0IHF0eSA9IFRpY2tldEVudGl0eS5xdHk7XG5cdHJldHVybiAoIHF0eSAhPT0gbnVsbCAmJiBxdHkgIT09ICdJTkYnICYmIHF0eSAhPT0gSW5maW5pdHkgKSAmJlxuXHRcdFRpY2tldEVudGl0eS5zb2xkID49IHF0eTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gXHR0cnVlIGlmIHRpY2tldCBpcyBub3QgeWV0IGF2YWlsYWJsZSBmb3IgcHVyY2hhc2UsXG4gKiBcdFx0XHRcdFx0XHRidXQgd2lsbCBiZSBhdCBzb21lIGRhdGUgaW4gdGhlIGZ1dHVyZVxuICovXG5leHBvcnQgY29uc3QgaXNQZW5kaW5nID0gKCBUaWNrZXRFbnRpdHkgKSA9PiB7XG5cdGFzc2VydFRpY2tldEVudGl0eSggVGlja2V0RW50aXR5ICk7XG5cdHJldHVybiAhIGlzQXJjaGl2ZWQoIFRpY2tldEVudGl0eSApICYmXG5cdFx0VGlja2V0RW50aXR5LnN0YXJ0RGF0ZS5kaWZmTm93KCkgPiAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldCBpcyBhcmNoaXZlZFxuICovXG5leHBvcnQgY29uc3QgaXNBcmNoaXZlZCA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRhc3NlcnRUaWNrZXRFbnRpdHkoIFRpY2tldEVudGl0eSApO1xuXHRyZXR1cm4gVGlja2V0RW50aXR5LmRlbGV0ZWQ7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gc3RhdHVzIElEXG4gKi9cbmV4cG9ydCBjb25zdCBzdGF0dXMgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0YXNzZXJ0VGlja2V0RW50aXR5KCBUaWNrZXRFbnRpdHkgKTtcblx0aWYgKCBpc0FyY2hpdmVkKCBUaWNrZXRFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gVElDS0VUX1NUQVRVU19JRC5BUkNISVZFRDtcblx0fVxuXHRpZiAoIGlzU29sZE91dCggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIFRJQ0tFVF9TVEFUVVNfSUQuU09MRF9PVVQ7XG5cdH1cblx0aWYgKCBpc0V4cGlyZWQoIFRpY2tldEVudGl0eSApICkge1xuXHRcdHJldHVybiBUSUNLRVRfU1RBVFVTX0lELkVYUElSRUQ7XG5cdH1cblx0aWYgKCBpc1BlbmRpbmcoIFRpY2tldEVudGl0eSApICkge1xuXHRcdHJldHVybiBUSUNLRVRfU1RBVFVTX0lELlBFTkRJTkc7XG5cdH1cblx0aWYgKCBpc09uU2FsZSggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIFRJQ0tFVF9TVEFUVVNfSUQuT05TQUxFO1xuXHR9XG5cdHJldHVybiAnJztcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSB0aWNrZXQgc3RhdHVzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUaWNrZXRTdGF0dXNUZXh0TGFiZWwgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0bGV0IHRpY2tldFN0YXR1cyA9ICcnO1xuXHRzd2l0Y2ggKCBzdGF0dXMoIFRpY2tldEVudGl0eSApICkge1xuXHRcdGNhc2UgVElDS0VUX1NUQVRVU19JRC5TT0xEX09VVCA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ3NvbGQgb3V0JywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUSUNLRVRfU1RBVFVTX0lELkVYUElSRUQgOlxuXHRcdFx0dGlja2V0U3RhdHVzID0gX18oICdleHBpcmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUSUNLRVRfU1RBVFVTX0lELlBFTkRJTkcgOlxuXHRcdFx0dGlja2V0U3RhdHVzID0gX18oICdwZW5kaW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUSUNLRVRfU1RBVFVTX0lELk9OU0FMRSA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ29uIHNhbGUnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRJQ0tFVF9TVEFUVVNfSUQuQVJDSElWRUQgOlxuXHRcdFx0dGlja2V0U3RhdHVzID0gX18oICdhcmNoaXZlZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiB0aWNrZXRTdGF0dXM7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgQ1NTIGNsYXNzIGZvciB0aGUgYmFja2dyb3VuZCBjb2xvclxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0cmV0dXJuIGBlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci0keyBzdGF0dXMoIFRpY2tldEVudGl0eSApIH1gO1xufTtcbiIsIi8qKlxuICogV29yZFByZXNzIEltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Y29tcG9zZSxcblx0Y3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQsXG5cdHdpdGhJbnN0YW5jZUlkLFxufSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IEJhc2VDb250cm9sIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcblxuLyoqXG4gKiBFeHRlcm5hbCBJbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0ICggY3VzdG9tSWQgPSAnJyApID0+IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHRjb21wb3NlKCBbXG5cdFx0d2l0aEluc3RhbmNlSWQsXG5cdFx0KCBXcmFwcGVkQ29tcG9uZW50ICkgPT4ge1xuXHRcdFx0cmV0dXJuIGNsYXNzIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0XHRcdFx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRcdFx0XHRsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0XHRpbnN0YW5jZUlkOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0XHRcdFx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0XHRcdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0XHRdICksXG5cdFx0XHRcdFx0Y2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRcdGhlbHA6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0c3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcblx0XHRcdFx0XHRsYWJlbDogV3JhcHBlZENvbXBvbmVudC5kZWZhdWx0UHJvcHMgJiZcblx0XHRcdFx0XHRcdFdyYXBwZWRDb21wb25lbnQuZGVmYXVsdFByb3BzLmxhYmVsID9cblx0XHRcdFx0XHRcdFdyYXBwZWRDb21wb25lbnQuZGVmYXVsdFByb3BzLmxhYmVsIDpcblx0XHRcdFx0XHRcdCcnLFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHJlbmRlcigpIHtcblx0XHRcdFx0XHRjb25zdCB7XG5cdFx0XHRcdFx0XHRsYWJlbCxcblx0XHRcdFx0XHRcdGluc3RhbmNlSWQsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdFx0XHRoZWxwLFxuXHRcdFx0XHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdFx0XHRcdGNvbnN0IGlkID0gYGluc3BlY3Rvci0keyBjdXN0b21JZCB9LWNvbnRyb2wtJHsgaW5zdGFuY2VJZCB9YDtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEJhc2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgbGFiZWwgfVxuXHRcdFx0XHRcdFx0XHRpZD17IGlkIH1cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXsgY2xhc3NOYW1lIH1cblx0XHRcdFx0XHRcdFx0aGVscD17IGhlbHAgfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8V3JhcHBlZENvbXBvbmVudCB7IC4uLnRoaXMucHJvcHMgfSBsYWJlbD17ICcnIH0gaWQ9eyBpZCB9IC8+XG5cdFx0XHRcdFx0XHQ8L0Jhc2VDb250cm9sPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSxcblx0XSApLFxuXHQnd2l0aEJhc2VDb250cm9sJ1xuKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IEljb25CdXR0b24sIFNlbGVjdENvbnRyb2wsIFRleHRDb250cm9sIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vKipcbiAqIEVudGl0eUxpc3RGaWx0ZXJCYXJcbiAqIGEgZ3JvdXAgb2YgaW5wdXRzIGZvciBjb250cm9sbGluZyBob3cgYSBsaXN0IG9mIGVudGl0aWVzIGlzIGRpc3BsYXllZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbnRpdHlGaWx0ZXJzIGFkZGl0aW9uYWwgZW50aXR5IHNwZWNpZmljIGZpbHRlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBwZXJQYWdlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmlld1xuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0UGVyUGFnZSBjYWxsYmFjayBmb3IgcGVyUGFnZSBpbnB1dFxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0TGlzdFZpZXcgY2FsbGJhY2sgZm9yIGxpc3QgdmlldyBpY29uIGJ1dHRvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0R3JpZFZpZXcgY2FsbGJhY2sgZm9yIGdyaWQgdmlldyBpY29uIGJ1dHRvblxuICogQHJldHVybiB7T2JqZWN0fSBFbnRpdHlMaXN0RmlsdGVyQmFyXG4gKi9cbmNsYXNzIEVudGl0eUxpc3RGaWx0ZXJCYXIgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdGVudGl0eUZpbHRlcnM6IFByb3BUeXBlcy5vYmplY3QsXG5cdFx0cGVyUGFnZTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXHRcdHZpZXc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRzZXRQZXJQYWdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHRcdHNldExpc3RWaWV3OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHRcdHNldEdyaWRWaWV3OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGV4dFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRTZWFyY2hUZXh0XG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgc2VhcmNoIGlucHV0XG5cdCAqL1xuXHRzZWFyY2ggPSAoIHNlYXJjaFRleHQsIHNldFNlYXJjaFRleHQgKSA9PiB7XG5cdFx0cmV0dXJuIGlzRnVuY3Rpb24oIHNldFNlYXJjaFRleHQgKSA/IChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PFRleHRDb250cm9sXG5cdFx0XHRcdFx0bGFiZWw9eyBfXyggJ3NlYXJjaCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci1zZWFyY2hcIlxuXHRcdFx0XHRcdHZhbHVlPXsgc2VhcmNoVGV4dCB9XG5cdFx0XHRcdFx0b25DaGFuZ2U9eyBzZXRTZWFyY2hUZXh0IH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KSA6IG51bGw7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwZXJQYWdlXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldFBlclBhZ2Vcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBwZXJQYWdlIHNlbGVjdCBpbnB1dFxuXHQgKi9cblx0cGVyUGFnZSA9ICggcGVyUGFnZSwgc2V0UGVyUGFnZSApID0+IChcblx0XHQ8U2VsZWN0Q29udHJvbFxuXHRcdFx0bGFiZWw9eyBfXyggJ3BlciBwYWdlJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdGNsYXNzTmFtZT1cImVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItcGVyUGFnZS1zZWxlY3RcIlxuXHRcdFx0dmFsdWU9eyBwZXJQYWdlIH1cblx0XHRcdG9wdGlvbnM9eyBbXG5cdFx0XHRcdHsgdmFsdWU6IDIsIGxhYmVsOiAyIH0sXG5cdFx0XHRcdHsgdmFsdWU6IDYsIGxhYmVsOiA2IH0sXG5cdFx0XHRcdHsgdmFsdWU6IDEyLCBsYWJlbDogMTIgfSxcblx0XHRcdFx0eyB2YWx1ZTogMjQsIGxhYmVsOiAyNCB9LFxuXHRcdFx0XHR7IHZhbHVlOiA0OCwgbGFiZWw6IDQ4IH0sXG5cdFx0XHRdIH1cblx0XHRcdG9uQ2hhbmdlPXsgc2V0UGVyUGFnZSB9XG5cdFx0Lz5cblx0KTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHZpZXdcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0TGlzdFZpZXdcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBsaXN0IHZpZXcgaWNvbiBidXR0b25cblx0ICovXG5cdGxpc3RWaWV3ID0gKCB2aWV3LCBzZXRMaXN0VmlldyApID0+IChcblx0XHQ8SWNvbkJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXsgdmlldyA9PT0gJ2xpc3QnID8gJ2FjdGl2ZS1saXN0JyA6ICcnIH1cblx0XHRcdGljb249XCJlZGl0b3ItanVzdGlmeVwiXG5cdFx0XHR0b29sdGlwPXsgX18oICdsaXN0IHZpZXcnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0b25DbGljaz17IHNldExpc3RWaWV3IH1cblx0XHQvPlxuXHQpO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdmlld1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRHcmlkVmlld1xuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGdyaWQgdmlldyBpY29uIGJ1dHRvblxuXHQgKi9cblx0Z3JpZFZpZXcgPSAoIHZpZXcsIHNldEdyaWRWaWV3ICkgPT4gKFxuXHRcdDxJY29uQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9eyB2aWV3ID09PSAnZ3JpZCcgPyAnYWN0aXZlLWxpc3QnIDogJycgfVxuXHRcdFx0aWNvbj1cInNjcmVlbm9wdGlvbnNcIlxuXHRcdFx0dG9vbHRpcD17IF9fKCAnZ3JpZCB2aWV3JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdG9uQ2xpY2s9eyBzZXRHcmlkVmlldyB9XG5cdFx0Lz5cblx0KTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0c2VhcmNoVGV4dCA9ICcnLFxuXHRcdFx0c2V0U2VhcmNoVGV4dCxcblx0XHRcdHBlclBhZ2UsXG5cdFx0XHR2aWV3LFxuXHRcdFx0c2V0UGVyUGFnZSxcblx0XHRcdHNldExpc3RWaWV3LFxuXHRcdFx0c2V0R3JpZFZpZXcsXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0Y29uc3QgZW50aXR5RmlsdGVycyA9IHRoaXMucHJvcHMuZW50aXR5RmlsdGVycyA/XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWVudGl0eS1saXN0LWZpbHRlci1iYXJcIj5cblx0XHRcdFx0eyB0aGlzLnByb3BzLmVudGl0eUZpbHRlcnMgfVxuXHRcdFx0PC9kaXY+IDpcblx0XHRcdG51bGw7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyXCI+XG5cdFx0XHRcdHsgZW50aXR5RmlsdGVycyB9XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJcIj5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS1zZWFyY2gtZmlsdGVyIGVlLWZpbHRlci1iYXItZmlsdGVyXCI+XG5cdFx0XHRcdFx0XHR7IHRoaXMuc2VhcmNoKCBzZWFyY2hUZXh0LCBzZXRTZWFyY2hUZXh0ICkgfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImVlLXBlci1wYWdlLWZpbHRlciBlZS1maWx0ZXItYmFyLWZpbHRlclwiPlxuXHRcdFx0XHRcdFx0eyB0aGlzLnBlclBhZ2UoIHBlclBhZ2UsIHNldFBlclBhZ2UgKSB9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtdmlldy1maWx0ZXIgZWUtZmlsdGVyLWJhci1maWx0ZXJcIj5cblx0XHRcdFx0XHRcdHsgdGhpcy5saXN0Vmlldyggdmlldywgc2V0TGlzdFZpZXcgKSB9XG5cdFx0XHRcdFx0XHR7IHRoaXMuZ3JpZFZpZXcoIHZpZXcsIHNldEdyaWRWaWV3ICkgfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRW50aXR5TGlzdEZpbHRlckJhcjtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBkZWZhdWx0IGFzIHdpdGhFbnRpdHlQYWdpbmF0aW9uIH0gZnJvbSAnLi4vcGFnaW5hdGlvbic7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdGRlZmF1bHQgYXMgd2l0aEVudGl0eUxpc3RGaWx0ZXJCYXIsXG59IGZyb20gJy4vd2l0aC1lbnRpdHktbGlzdC1maWx0ZXItYmFyJztcbmltcG9ydCB7XG5cdGRlZmF1bHQgYXMgd2l0aEVudGl0eUxpc3RGaWx0ZXJTdGF0ZSxcbn0gZnJvbSAnLi93aXRoLWVudGl0eS1saXN0LWZpbHRlci1zdGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0ZWRFbnRpdHlMaXN0V2l0aEZpbHRlckJhciA9IChcblx0RW50aXR5TGlzdCxcblx0cGFnaW5hdGlvbkNvbmZpZyA9IHt9LFxuKSA9PiB3aXRoRW50aXR5TGlzdEZpbHRlckJhcihcblx0d2l0aEVudGl0eVBhZ2luYXRpb24oIHBhZ2luYXRpb25Db25maWcgKSggRW50aXR5TGlzdCApXG4pO1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGVkRW50aXR5TGlzdFdpdGhGaWx0ZXJCYXJBbmRTdGF0ZSA9IChcblx0RW50aXR5TGlzdCxcblx0cGFnaW5hdGlvbkNvbmZpZyA9IHt9LFxuKSA9PiB3aXRoRW50aXR5TGlzdEZpbHRlclN0YXRlKCB3aXRoRW50aXR5TGlzdEZpbHRlckJhcihcblx0d2l0aEVudGl0eVBhZ2luYXRpb24oIHBhZ2luYXRpb25Db25maWcgKSggRW50aXR5TGlzdCApXG4pICk7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW50aXR5TGlzdEZpbHRlckJhciB9IGZyb20gJy4vZW50aXR5LWxpc3QtZmlsdGVyLWJhcic7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyXCI6XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXJcIixcImVlLWVudGl0eS1saXN0LWZpbHRlci1iYXJcIjpcImVlLWVudGl0eS1saXN0LWZpbHRlci1iYXJcIixcImVlLWVudGl0eS1saXN0LXZpZXctYmFyXCI6XCJlZS1lbnRpdHktbGlzdC12aWV3LWJhclwiLFwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci1wZXJQYWdlLXNlbGVjdFwiOlwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci1wZXJQYWdlLXNlbGVjdFwiLFwiZWUtZmlsdGVyLWJhci1maWx0ZXJcIjpcImVlLWZpbHRlci1iYXItZmlsdGVyXCIsXCJlZS1zZWFyY2gtZmlsdGVyXCI6XCJlZS1zZWFyY2gtZmlsdGVyXCIsXCJlZS1wZXItcGFnZS1maWx0ZXJcIjpcImVlLXBlci1wYWdlLWZpbHRlclwiLFwiZWUtZ3JpZC12aWV3LWZpbHRlclwiOlwiZWUtZ3JpZC12aWV3LWZpbHRlclwiLFwiZWUtbGlzdC12aWV3LWZpbHRlclwiOlwiZWUtbGlzdC12aWV3LWZpbHRlclwiLFwiY29tcG9uZW50cy1pY29uLWJ1dHRvblwiOlwiY29tcG9uZW50cy1pY29uLWJ1dHRvblwiLFwiYWN0aXZlLWxpc3RcIjpcImFjdGl2ZS1saXN0XCIsXCJjb21wb25lbnRzLWJhc2UtY29udHJvbF9fbGFiZWxcIjpcImNvbXBvbmVudHMtYmFzZS1jb250cm9sX19sYWJlbFwiLFwiY29tcG9uZW50cy1zZWxlY3QtY29udHJvbF9faW5wdXRcIjpcImNvbXBvbmVudHMtc2VsZWN0LWNvbnRyb2xfX2lucHV0XCIsXCJjb21wb25lbnRzLXRleHQtY29udHJvbF9faW5wdXRcIjpcImNvbXBvbmVudHMtdGV4dC1jb250cm9sX19pbnB1dFwifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGRlZmF1bHQgYXMgRW50aXR5TGlzdEZpbHRlckJhciB9IGZyb20gJy4vZW50aXR5LWxpc3QtZmlsdGVyLWJhcic7XG5cbi8qKlxuICogd2l0aEVudGl0eUxpc3RGaWx0ZXJCYXJcbiAqIEhpZ2hlci1PcmRlci1Db21wb25lbnQgdGhhdCB3cmFwcyBhbiBFbnRpdHlMaXN0IGNvbXBvbmVudFxuICogZm9yIGNoYW5naW5nIGhvdyB0aGUgRW50aXR5TGlzdCBpcyB2aWV3ZWRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IEVudGl0eUxpc3Qgd2l0aCBhZGRlZCBFbnRpdHlMaXN0RmlsdGVyQmFyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHQoIEVudGl0eUxpc3QgKSA9PiB7XG5cdFx0cmV0dXJuIGNsYXNzIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0XHRcdHNlYXJjaEVudGl0aWVzID0gKCBzZWFyY2hUZXh0LCBlbnRpdGllcyApID0+IHtcblx0XHRcdFx0cmV0dXJuIHNlYXJjaFRleHQgIT09ICcnID9cblx0XHRcdFx0XHRlbnRpdGllcy5maWx0ZXIoICggZW50aXR5ICkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgZW50aXR5TmFtZSA9IGVudGl0eS5uYW1lID8gZW50aXR5Lm5hbWUgOiAnJztcblx0XHRcdFx0XHRcdHJldHVybiBlbnRpdHlOYW1lLnRvTG93ZXJDYXNlKCkuc2VhcmNoKFxuXHRcdFx0XHRcdFx0XHRzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkgKSAhPT0gLTE7XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRlbnRpdGllcztcblx0XHRcdH07XG5cblx0XHRcdHJlbmRlcigpIHtcblx0XHRcdFx0bGV0IHsgZW50aXRpZXMgfSA9IHRoaXMucHJvcHM7XG5cdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRzZWFyY2hUZXh0LFxuXHRcdFx0XHRcdHNldFNlYXJjaFRleHQsXG5cdFx0XHRcdFx0cGVyUGFnZSxcblx0XHRcdFx0XHR2aWV3LFxuXHRcdFx0XHRcdHNldFBlclBhZ2UsXG5cdFx0XHRcdFx0c2V0TGlzdFZpZXcsXG5cdFx0XHRcdFx0c2V0R3JpZFZpZXcsXG5cdFx0XHRcdFx0Li4ub3RoZXJQcm9wc1xuXHRcdFx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRcdFx0ZW50aXRpZXMgPSBpc0Z1bmN0aW9uKCBzZXRTZWFyY2hUZXh0ICkgP1xuXHRcdFx0XHRcdHRoaXMuc2VhcmNoRW50aXRpZXMoIHNlYXJjaFRleHQsIGVudGl0aWVzICkgOlxuXHRcdFx0XHRcdGVudGl0aWVzO1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0XHRcdDxFbnRpdHlMaXN0RmlsdGVyQmFyXG5cdFx0XHRcdFx0XHRcdHNlYXJjaFRleHQ9eyBzZWFyY2hUZXh0IH1cblx0XHRcdFx0XHRcdFx0c2V0U2VhcmNoVGV4dD17IHNldFNlYXJjaFRleHQgfVxuXHRcdFx0XHRcdFx0XHRwZXJQYWdlPXsgcGVyUGFnZSB9XG5cdFx0XHRcdFx0XHRcdHZpZXc9eyB2aWV3IH1cblx0XHRcdFx0XHRcdFx0c2V0UGVyUGFnZT17IHNldFBlclBhZ2UgfVxuXHRcdFx0XHRcdFx0XHRzZXRMaXN0Vmlldz17IHNldExpc3RWaWV3IH1cblx0XHRcdFx0XHRcdFx0c2V0R3JpZFZpZXc9eyBzZXRHcmlkVmlldyB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PEVudGl0eUxpc3Rcblx0XHRcdFx0XHRcdFx0ZW50aXRpZXM9eyBlbnRpdGllcyB9XG5cdFx0XHRcdFx0XHRcdGVudGl0aWVzUGVyUGFnZT17IHBlclBhZ2UgfVxuXHRcdFx0XHRcdFx0XHR2aWV3PXsgdmlldyB9XG5cdFx0XHRcdFx0XHRcdG5vUmVzdWx0c1RleHQ9e1xuXHRcdFx0XHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0XHRcdFx0J25vIHJlc3VsdHMgZm91bmQgKHRyeSBjaGFuZ2luZyBmaWx0ZXJzKScsXG5cdFx0XHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSxcblx0J3dpdGhFbnRpdHlMaXN0RmlsdGVyQmFyJ1xuKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50LCBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhTZWxlY3QsIHdpdGhEaXNwYXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbi8qKlxuICogd2l0aEVudGl0eUxpc3RGaWx0ZXJTdGF0ZVxuICogSGlnaGVyLU9yZGVyLUNvbXBvbmVudCB0aGF0IHdyYXBzIGFuIFwiRW50aXR5TGlzdEZpbHRlckJhclwiIGNvbXBvbmVudFxuICogaW4gb3JkZXIgdG8gcHJvdmlkZSBzdGF0ZSBtYW5hZ2VtZW50IGZvciBpdCBhbmQgaXRzIGNoaWxkcmVuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFdyYXBwZWRDb21wb25lbnRcbiAqIEByZXR1cm4ge09iamVjdH0gV3JhcHBlZENvbXBvbmVudCB3aXRoIGFkZGVkIEVudGl0eUxpc3RGaWx0ZXJTdGF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0Y29tcG9zZSggW1xuXHRcdHdpdGhTZWxlY3QoICggc2VsZWN0LCBvd25Qcm9wcyApID0+IHtcblx0XHRcdGNvbnN0IHtcblx0XHRcdFx0c2VhcmNoVGV4dCA9ICcnLFxuXHRcdFx0XHRwZXJQYWdlID0gNixcblx0XHRcdFx0dmlldyA9ICdncmlkJyxcblx0XHRcdH0gPSBvd25Qcm9wcztcblx0XHRcdGNvbnN0IHN0b3JlID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9maWx0ZXItc3RhdGUnICk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWFyY2hUZXh0OiBzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2VudGl0eS1saXN0Jyxcblx0XHRcdFx0XHQnc2VhcmNoVGV4dCcsXG5cdFx0XHRcdFx0c2VhcmNoVGV4dFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRwZXJQYWdlOiBwYXJzZUludChcblx0XHRcdFx0XHRzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdFx0J3BlclBhZ2UnLFxuXHRcdFx0XHRcdFx0cGVyUGFnZVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0MTBcblx0XHRcdFx0KSxcblx0XHRcdFx0dmlldzogc3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdlbnRpdHktbGlzdCcsXG5cdFx0XHRcdFx0J3ZpZXcnLFxuXHRcdFx0XHRcdHZpZXdcblx0XHRcdFx0KSxcblx0XHRcdH07XG5cdFx0fSApLFxuXHRcdHdpdGhEaXNwYXRjaCggKCBkaXNwYXRjaCApID0+IHtcblx0XHRcdGNvbnN0IHN0b3JlID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNldFNlYXJjaFRleHQ6ICggc2VhcmNoVGV4dCApID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdzZWFyY2hUZXh0Jyxcblx0XHRcdFx0XHRzZWFyY2hUZXh0XG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldFBlclBhZ2U6ICggcGVyUGFnZSApID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdwZXJQYWdlJyxcblx0XHRcdFx0XHRwYXJzZUludCggcGVyUGFnZSwgMTAgKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRzZXRMaXN0VmlldzogKCkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdlbnRpdHktbGlzdCcsXG5cdFx0XHRcdFx0J3ZpZXcnLFxuXHRcdFx0XHRcdCdsaXN0J1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRzZXRHcmlkVmlldzogKCkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdlbnRpdHktbGlzdCcsXG5cdFx0XHRcdFx0J3ZpZXcnLFxuXHRcdFx0XHRcdCdncmlkJ1xuXHRcdFx0XHQpLFxuXHRcdFx0fTtcblx0XHR9ICksXG5cdFx0KCBXcmFwcGVkQ29tcG9uZW50ICkgPT4ge1xuXHRcdFx0cmV0dXJuIGNsYXNzIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0XHRcdFx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRcdFx0XHRlbnRpdGllczogUHJvcFR5cGVzLmFycmF5T2YoIFByb3BUeXBlcy5vYmplY3QgKS5pc1JlcXVpcmVkLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZW5kZXIoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDxXcmFwcGVkQ29tcG9uZW50IHsgLi4udGhpcy5wcm9wcyB9IC8+O1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0sXG5cdF0gKSxcblx0J3dpdGhFbnRpdHlMaXN0RmlsdGVyU3RhdGUnXG4pO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoQmFzZUNvbnRyb2wgfSBmcm9tICcuL2Jhc2UtY29udHJvbCc7XG5leHBvcnQge1xuXHRQYWdpbmF0ZWRFbnRpdHlMaXN0V2l0aEZpbHRlckJhcixcblx0UGFnaW5hdGVkRW50aXR5TGlzdFdpdGhGaWx0ZXJCYXJBbmRTdGF0ZSxcblx0RW50aXR5TGlzdEZpbHRlckJhcixcbn0gZnJvbSAnLi9maWx0ZXItYmFyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aEVudGl0eVBhZ2luYXRpb24gfSBmcm9tICcuL3BhZ2luYXRpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoTGF0ZXN0Q2hlY2tpbiB9IGZyb20gJy4vd2l0aC1sYXRlc3QtY2hlY2tpbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhNb25leSB9IGZyb20gJy4vbW9uZXknO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc0FycmF5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBpc1NoYWxsb3dFcXVhbEFycmF5cyBmcm9tICdAd29yZHByZXNzL2lzLXNoYWxsb3ctZXF1YWwnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnd2FybmluZyc7XG5pbXBvcnQgeyBNb25leSwgU2l0ZUN1cnJlbmN5IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5cbi8qKlxuICogVGhpcyB2YWxpZGF0ZXMgd2hldGhlciB0aGUgbmV4dFN0YXRlUmVzcG9uc2UgaXMgaW4gdGhlIGV4cGVjdGVkIHNoYXBlLlxuICogSWYgYW55IG9mIHRoZSB2YWxpZGF0aW9uIGZhaWxzLCB0aGVuIGEgY29uc29sZS5lcnJvciBpcyB0cmlnZ2VyZWQgKHZpYVxuICogd2FybmluZylcbiAqXG4gKiBAcGFyYW0ge3t9fSBuZXh0U3RhdGVSZXNwb25zZVxuICovXG5jb25zdCB2YWxpZGF0ZU5leHRTdGF0ZSA9ICggbmV4dFN0YXRlUmVzcG9uc2UgKSA9PiB7XG5cdHdhcm5pbmcoXG5cdFx0bmV4dFN0YXRlUmVzcG9uc2UgJiZcblx0XHRuZXh0U3RhdGVSZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSggJ2NvbnZlcnRlZFZhbHVlcycgKSxcblx0XHQnVGhlIHByb3BOYW1lTWFwIGNhbGxiYWNrIGZvciB0aGUgd2l0aE1vbmV5IEhPQyBzaG91bGQgcmV0dXJuIGFuJyArXG5cdFx0JyBvYmplY3Qgd2l0aCBhIFwiY29udmVydGVkVmFsdWVzXCIga2V5Lidcblx0KTtcblx0aWYgKCBuZXh0U3RhdGVSZXNwb25zZSAmJlxuXHRcdG5leHRTdGF0ZVJlc3BvbnNlLmhhc093blByb3BlcnR5KCAnY29udmVydGVkVmFsdWVzJyApICkge1xuXHRcdHdhcm5pbmcoXG5cdFx0XHRpc0FycmF5KCBuZXh0U3RhdGVSZXNwb25zZS5jb252ZXJ0ZWRWYWx1ZXMgKSxcblx0XHRcdCdUaGUgcHJvcE5hbWVNYXAgY2FsbGJhY2sgZm9yIHRoZSB3aXRoTW9uZXkgSE9DIHNob3VsZCByZXR1cm4gYW4gJyArXG5cdFx0XHQnb2JqZWN0IHdpdGggYSBcImNvbnZlcnRlZFZhbHVlc1wiIGtleSB0aGF0IGhhcyBhbiBhcnJheScgK1xuXHRcdFx0JyBvZiBudW1iZXJzIGFzIHRoZSB2YWx1ZS4nXG5cdFx0KTtcblx0fVxuXHR3YXJuaW5nKFxuXHRcdG5leHRTdGF0ZVJlc3BvbnNlICYmIG5leHRTdGF0ZVJlc3BvbnNlLmhhc093blByb3BlcnR5KCAncHJvcHMnICksXG5cdFx0J1RoZSBwcm9wTmFtZU1hcCBjYWxsYmFjayBmb3IgdGhlIHdpdGhNb25leUhPQyBzaG91bGQgcmV0dXJuIGFuJyArXG5cdFx0JyBvYmplY3Qgd2l0aCBhIFwicHJvcHNcIiBrZXkuJ1xuXHQpO1xufTtcblxuLyoqXG4gKiBBIGhpZ2hlciBvcmRlciBjb21wb25lbnQgdGhhdCBjb252ZXJ0cyBhbnkgcHJvcHMgbWF0Y2hpbmcgdGhlIG1hcCBwcm92aWRlZFxuICogYXMgYW4gYXJndW1lbnQgdG8gTW9uZXkgdmFsdWUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZW0gdG8gdGhlIFdyYXBwZWRDb21wb25lbnRcbiAqXG4gKiBAcGFyYW0ge0FycmF5fGZ1bmN0aW9ufSBwcm9wTmFtZU1hcFxuICogQHJldHVybiB7ZnVuY3Rpb24oKik6IEVuaGFuY2VkQ29tcG9uZW50fSAgUmV0dXJucyBhbiBlbmhhbmNlZCBjb21wb25lbnQgd2hlcmVcbiAqIHByb3BzIHRoYXQgcmVwcmVzZW50IG1vbmV5IHZhbHVlcyBoYXZlIGJlZW4gY29udmVydGVkIHRvIGEgTW9uZXkgdmFsdWUgb2JqZWN0XG4gKi9cbmNvbnN0IHdpdGhNb25leSA9ICggcHJvcE5hbWVNYXAgPSBbXSApID0+ICggV3JhcHBlZENvbXBvbmVudCApID0+IHtcblx0Y2xhc3MgRW5oYW5jZWRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRcdHN0YXRlID0ge1xuXHRcdFx0Y29udmVydGVkVmFsdWVzOiBbXSxcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogVGhpcyBwcm92aWRlcyB0aGUgbmV4dCBzdGF0ZSBvbiBhbnkgcHJvcCBjaGFuZ2UuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3t9fSBwcm9wc1xuXHRcdCAqIEByZXR1cm4ge3t9fSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuZXh0U3RhdGUgZm9yIHRoZSBjb21wb25lbnQuXG5cdFx0ICovXG5cdFx0Z2V0TmV4dFN0YXRlID0gKCBwcm9wcyApID0+IHtcblx0XHRcdGxldCBuZXh0U3RhdGVSZXNwb25zZSxcblx0XHRcdFx0bmV4dFN0YXRlID0ge30sXG5cdFx0XHRcdGNvbnZlcnRlZFZhbHVlcyA9IFtdO1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wTmFtZU1hcCApICkge1xuXHRcdFx0XHRuZXh0U3RhdGVSZXNwb25zZSA9IHByb3BOYW1lTWFwKCBwcm9wcywgTW9uZXkgKTtcblx0XHRcdFx0dmFsaWRhdGVOZXh0U3RhdGUoIG5leHRTdGF0ZVJlc3BvbnNlICk7XG5cdFx0XHRcdGlmICggbmV4dFN0YXRlUmVzcG9uc2UgJiYgbmV4dFN0YXRlUmVzcG9uc2UucHJvcHMgKSB7XG5cdFx0XHRcdFx0bmV4dFN0YXRlID0geyAuLi5uZXh0U3RhdGVSZXNwb25zZS5wcm9wcyB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnZlcnRlZFZhbHVlcyA9IG5leHRTdGF0ZVJlc3BvbnNlLmNvbnZlcnRlZFZhbHVlcyB8fFxuXHRcdFx0XHRcdGNvbnZlcnRlZFZhbHVlcztcblx0XHRcdH0gZWxzZSBpZiAoIGlzQXJyYXkoIHByb3BOYW1lTWFwICkgKSB7XG5cdFx0XHRcdHByb3BOYW1lTWFwLmZvckVhY2goICggcHJvcE5hbWUgKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCBwcm9wc1sgcHJvcE5hbWUgXSApIHtcblx0XHRcdFx0XHRcdG5leHRTdGF0ZVsgcHJvcE5hbWUgXSA9XG5cdFx0XHRcdFx0XHRcdG5ldyBNb25leShcblx0XHRcdFx0XHRcdFx0XHRwcm9wc1sgcHJvcE5hbWUgXSxcblx0XHRcdFx0XHRcdFx0XHRTaXRlQ3VycmVuY3lcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGNvbnZlcnRlZFZhbHVlcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRuZXh0U3RhdGVbIHByb3BOYW1lIF0udG9OdW1iZXIoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdhcm5pbmcoXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0J1RoZSBwcm9wTmFtZU1hcCBhcmd1bWVudCBwcm92aWRlZCB0byB3aXRoTW9uZXkgbXVzdCBiZSBlaXRoZXIgYScgK1xuXHRcdFx0XHRcdCcgZnVuY3Rpb24gb3IgYW4gYXJyYXknXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRuZXh0U3RhdGUuY29udmVydGVkVmFsdWVzID0gY29udmVydGVkVmFsdWVzO1xuXHRcdFx0cmV0dXJuIG5leHRTdGF0ZTtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogQ2FsY3VsYXRlcyB3aGV0aGVyIHRoZSBzdGF0ZSBzaG91bGQgYmUgdXBkYXRlZCB1c2luZyB0aGUgcHJvdmlkZWRcblx0XHQgKiBhcmd1bWVudHMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3t9fSBwcmV2UHJvcHNcblx0XHQgKiBAcGFyYW0ge3t9fSBwcmV2U3RhdGVcblx0XHQgKiBAcGFyYW0ge3t9fSBuZXh0U3RhdGVcblx0XHQgKiBAcmV0dXJuIHtib29sZWFufSAgSWYgYSBzaGFsbG93IGNvbXBhcmUgb2YgcHJldlN0YXRlLmNvbnZlcnRlZFZhbHVlc1xuXHRcdCAqIGFuZCBuZXh0U3RhdGUuY29udmVydGVkVmFsdWVzIGlzIGZhbHNlLCB0aGVuIHRoaXMgcmV0dXJucyB0cnVlIHRvXG5cdFx0ICogc2lnbmFsIHN0YXRlIHNob3VsZCBiZSB1cGRhdGVkLlxuXHRcdCAqL1xuXHRcdHNob3VsZFVwZGF0ZVN0YXRlV2l0aENvbnZlcnRlZFZhbHVlcyA9IChcblx0XHRcdHByZXZQcm9wcyxcblx0XHRcdHByZXZTdGF0ZSxcblx0XHRcdG5leHRTdGF0ZVxuXHRcdCkgPT4ge1xuXHRcdFx0cmV0dXJuICEgaXNTaGFsbG93RXF1YWxBcnJheXMoXG5cdFx0XHRcdG5leHRTdGF0ZS5jb252ZXJ0ZWRWYWx1ZXMsXG5cdFx0XHRcdHByZXZTdGF0ZS5jb252ZXJ0ZWRWYWx1ZXNcblx0XHRcdCkgJiZcblx0XHRcdFx0bmV4dFN0YXRlLmNvbnZlcnRlZFZhbHVlc1sgMCBdICE9PVxuXHRcdFx0XHRwcmV2U3RhdGUuY29udmVydGVkVmFsdWVzWyAwIF07XG5cdFx0fTtcblxuXHRcdGNvbXBvbmVudERpZE1vdW50KCkge1xuXHRcdFx0dGhpcy5zZXRTdGF0ZSggdGhpcy5nZXROZXh0U3RhdGUoIHRoaXMucHJvcHMgKSApO1xuXHRcdH1cblxuXHRcdGNvbXBvbmVudERpZFVwZGF0ZSggcHJldlByb3BzLCBwcmV2U3RhdGUgKSB7XG5cdFx0XHRjb25zdCBuZXh0U3RhdGUgPSB0aGlzLmdldE5leHRTdGF0ZSggdGhpcy5wcm9wcyApO1xuXHRcdFx0aWYgKCB0aGlzLnNob3VsZFVwZGF0ZVN0YXRlV2l0aENvbnZlcnRlZFZhbHVlcyhcblx0XHRcdFx0cHJldlByb3BzLFxuXHRcdFx0XHRwcmV2U3RhdGUsXG5cdFx0XHRcdG5leHRTdGF0ZVxuXHRcdFx0KSApIHtcblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSggbmV4dFN0YXRlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0cmV0dXJuIDxXcmFwcGVkQ29tcG9uZW50IHsgLi4udGhpcy5wcm9wcyB9IHsgLi4udGhpcy5zdGF0ZSB9IC8+O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBFbmhhbmNlZENvbXBvbmVudDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhNb25leTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgSndQYWdpbmF0aW9uIGZyb20gJ2p3LXJlYWN0LXBhZ2luYXRpb24nO1xuaW1wb3J0IHtcblx0Y29tcG9zZSxcblx0Y3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQsXG5cdHdpdGhJbnN0YW5jZUlkLFxufSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcblxuLyoqXG4gKiB3aXRoRW50aXR5UGFnaW5hdGlvblxuICogSGlnaGVyLU9yZGVyLUNvbXBvbmVudCB0aGF0IHdyYXBzIGFuIFwiRW50aXR5TGlzdFwiIGNvbXBvbmVudFxuICogd2l0aCBhbiBFbnRpdHlQYWdpbmF0aW9uIGNvbXBvbmVudCB0aGF0IGFkZHMgYSBwYWdpbmF0aW9uIGNvbnRhaW5lclxuICogYmVsb3cgdGhlIEVudGl0eUxpc3QgYW5kIGNvbnRyb2xzIHdoYXQgZW50aXRpZXMgYXJlIGRpc3BsYXllZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYWdpbmF0aW9uQ29uZmlnXG4gKiBAcmV0dXJuIHtPYmplY3R9IEVudGl0eUxpc3Qgd2l0aCBhZGRlZCBFbnRpdHlQYWdpbmF0aW9uXG4gKi9cbmV4cG9ydCBkZWZhdWx0ICggcGFnaW5hdGlvbkNvbmZpZyA9IHt9ICkgPT4gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoSW5zdGFuY2VJZCxcblx0XHQoIEVudGl0eUxpc3QgKSA9PiB7XG5cdFx0XHRyZXR1cm4gY2xhc3MgRW50aXR5UGFnaW5hdGlvbiBleHRlbmRzIENvbXBvbmVudCB7XG5cdFx0XHRcdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0XHRcdFx0ZW50aXRpZXM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuXHRcdFx0XHRcdGluc3RhbmNlSWQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblx0XHRcdFx0XHRlbnRpdGllc1BlclBhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFx0XHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRcdFx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0XHRcdF0gKSxcblx0XHRcdFx0XHRwb3NpdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0XHRcdFx0c3VwZXIoIHByb3BzICk7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9IHtcblx0XHRcdFx0XHRcdGVudGl0eVBhZ2U6IFtdLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzaG91bGRDb21wb25lbnRVcGRhdGUoIG5leHRQcm9wcywgbmV4dFN0YXRlICkge1xuXHRcdFx0XHRcdHJldHVybiAhIChcblx0XHRcdFx0XHRcdGlzRXF1YWwoIG5leHRQcm9wcywgdGhpcy5wcm9wcyApICYmXG5cdFx0XHRcdFx0XHRpc0VxdWFsKCBuZXh0U3RhdGUuZW50aXR5UGFnZSwgdGhpcy5zdGF0ZS5lbnRpdHlQYWdlIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIEBmdW5jdGlvblxuXHRcdFx0XHQgKiBAcGFyYW0ge0FycmF5fSBlbnRpdHlQYWdlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRvblBhZ2luYXRpb25DaGFuZ2UgPSAoIGVudGl0eVBhZ2UgKSA9PiB7XG5cdFx0XHRcdFx0Ly8gdXBkYXRlIGxvY2FsIHN0YXRlIHdpdGggbmV3IHBhZ2Ugb2YgaXRlbXNcblx0XHRcdFx0XHR0aGlzLnNldFN0YXRlKCB7IGVudGl0eVBhZ2UgfSApO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHJlbmRlcigpIHtcblx0XHRcdFx0XHRjb25zdCB7XG5cdFx0XHRcdFx0XHRlbnRpdGllcyxcblx0XHRcdFx0XHRcdGluc3RhbmNlSWQsXG5cdFx0XHRcdFx0XHRlbnRpdGllc1BlclBhZ2UgPSAxMCxcblx0XHRcdFx0XHRcdHBvc2l0aW9uID0gJ3RvcCcsXG5cdFx0XHRcdFx0XHQuLi5vdGhlclByb3BzXG5cdFx0XHRcdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5sYWJlbHMgPSBwYWdpbmF0aW9uQ29uZmlnLmxhYmVscyAmJlxuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5sYWJlbHMuZmlyc3QgJiZcblx0XHRcdFx0XHRcdHBhZ2luYXRpb25Db25maWcubGFiZWxzLmxhc3QgJiZcblx0XHRcdFx0XHRcdHBhZ2luYXRpb25Db25maWcubGFiZWxzLnByZXZpb3VzICYmXG5cdFx0XHRcdFx0XHRwYWdpbmF0aW9uQ29uZmlnLmxhYmVscy5uZXh0ID9cblx0XHRcdFx0XHRcdHBhZ2luYXRpb25Db25maWcubGFiZWxzIDpcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Zmlyc3Q6IF9fKCAnRmlyc3QnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdFx0XHRcdGxhc3Q6IF9fKCAnTGFzdCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHRcdFx0cHJldmlvdXM6IF9fKCAnUHJldicsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHRcdFx0bmV4dDogX18oICdOZXh0JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBub1Jlc3VsdHNUZXh0ID0gcGFnaW5hdGlvbkNvbmZpZy5ub1Jlc3VsdHNUZXh0ID9cblx0XHRcdFx0XHRcdHBhZ2luYXRpb25Db25maWcubm9SZXN1bHRzVGV4dCA6XG5cdFx0XHRcdFx0XHRfXyhcblx0XHRcdFx0XHRcdFx0J25vIHJlc3VsdHMgZm91bmQgKHRyeSBjaGFuZ2luZyBmaWx0ZXJzKScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgcmV0dXJuQXNQcm9wID0gcGFnaW5hdGlvbkNvbmZpZy5yZXR1cm5Bc1Byb3AgP1xuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5yZXR1cm5Bc1Byb3AgOlxuXHRcdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHRcdFx0Y29uc3QgcGFnaW5hdGlvbiA9IChcblx0XHRcdFx0XHRcdDxkaXYgaWQ9eyBgZWUtZW50aXR5LXBhZ2luYXRpb24tJHsgaW5zdGFuY2VJZCB9YCB9XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImVlLWVudGl0eS1wYWdpbmF0aW9uXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PEp3UGFnaW5hdGlvblxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zPXsgZW50aXRpZXMgfVxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlUGFnZT17IHRoaXMub25QYWdpbmF0aW9uQ2hhbmdlIH1cblx0XHRcdFx0XHRcdFx0XHRwYWdlU2l6ZT17IHBhcnNlSW50KCBlbnRpdGllc1BlclBhZ2UsIDEwICkgfVxuXHRcdFx0XHRcdFx0XHRcdHsgLi4ucGFnaW5hdGlvbkNvbmZpZyB9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHRvcFBhZ2luYXRpb24gPSBwb3NpdGlvbiA9PT0gKCAndG9wJyB8fCAnYm90aCcgKSA/XG5cdFx0XHRcdFx0XHRwYWdpbmF0aW9uIDpcblx0XHRcdFx0XHRcdG51bGw7XG5cdFx0XHRcdFx0Y29uc3QgYm90dG9tUGFnaW5hdGlvbiA9IHBvc2l0aW9uID09PSAoICdib3R0b20nIHx8ICdib3RoJyApID9cblx0XHRcdFx0XHRcdHBhZ2luYXRpb24gOlxuXHRcdFx0XHRcdFx0bnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gcmV0dXJuQXNQcm9wID8gKFxuXHRcdFx0XHRcdFx0PEVudGl0eUxpc3Rcblx0XHRcdFx0XHRcdFx0cGFnaW5hdGlvbj17IHBhZ2luYXRpb24gfVxuXHRcdFx0XHRcdFx0XHRlbnRpdGllcz17IHRoaXMuc3RhdGUuZW50aXR5UGFnZSB9XG5cdFx0XHRcdFx0XHRcdG5vUmVzdWx0c1RleHQ9eyBub1Jlc3VsdHNUZXh0IH1cblx0XHRcdFx0XHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0XHRcdFx0eyB0b3BQYWdpbmF0aW9uIH1cblx0XHRcdFx0XHRcdFx0PEVudGl0eUxpc3Rcblx0XHRcdFx0XHRcdFx0XHRlbnRpdGllcz17IHRoaXMuc3RhdGUuZW50aXR5UGFnZSB9XG5cdFx0XHRcdFx0XHRcdFx0bm9SZXN1bHRzVGV4dD17IG5vUmVzdWx0c1RleHQgfVxuXHRcdFx0XHRcdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdHsgYm90dG9tUGFnaW5hdGlvbiB9XG5cdFx0XHRcdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSxcblx0XSApLFxuXHQnd2l0aEVudGl0eVBhZ2luYXRpb24nXG4pO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWVudGl0eS1wYWdpbmF0aW9uXCI6XCJlZS1lbnRpdHktcGFnaW5hdGlvblwiLFwicGFnaW5hdGlvblwiOlwicGFnaW5hdGlvblwiLFwiZGlzYWJsZWRcIjpcImRpc2FibGVkXCIsXCJhY3RpdmVcIjpcImFjdGl2ZVwifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgd2l0aFNlbGVjdCwgd2l0aERpc3BhdGNoIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50LCBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogRXhwb3NlcyBwcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gdGhlIGxhdGVzdCBjaGVjay1pbiBlbnRpdHkgZm9yIGEgZ2l2ZW5cbiAqIHJlZ2lzdHJhdGlvbiBhbmQgZGF0ZXRpbWUuXG4gKlxuICogUHJvcGVydGllcyBwYXNzZWQgdGhyb3VnaCB0byB3cmFwcGVkIGNvbXBvbmVudCBhcmU6XG4gKlxuICogLSBjaGVja0luRW50aXR5IHtCYXNlRW50aXR5fG51bGx9IFRoZSBjaGVjay1pbiBlbnRpdHkgdGhhdCBpcyByZWxhdGVkIHRvIHRoZVxuICogZ2l2ZW4gcmVnaXN0cmF0aW9uIGFuZCBkYXRldGltZSBpZC5cbiAqIC0gaGFzUmVzb2x2ZWRDaGVja2luIHtib29sZWFufSBXaGV0aGVyIHRoZSBjaGVjay1pbiBlbnRpdHkgc2VsZWN0b3IgaGFzXG4gKiByZXNvbHZlZC4gIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXRzIHBvc3NpYmxlIHRoZXJlIGlzIG5vIGVudGl0eSBmb3JcbiAqIHRoaXMgcmVnaXN0cmF0aW9uIGFuZCBkYXRldGltZSBpZiB0aGF0IHJlZ2lzdHJhdGlvbiBoYXNuIG5ldmVyIGJlZW4gY2hlY2tlZFxuICogaW4uXG4gKiAtIG9uQ2xpY2sge2Z1bmN0aW9ufSBBIGNsaWNrIGhhbmRsZXIgd2hpY2ggd2hlbiBpbnZva2VkLCB3aWxsIHRvZ2dsZSB0aGVcbiAqIGNoZWNrLWluIHN0YXRlIGZvciB0aGUgZ2l2ZW4gcmVnaXN0cmF0aW9uIGFuZCBkYXRldGltZUlkLiBOb3RlOiB0aGlzIHdpbGxcbiAqIHJlcGxhY2UgdGhlIHN0b3JlIGxhdGVzdENoZWNraW4gcmVjb3JkIGluIHRoZSBzdGF0ZSBmb3IgdGhpcyBnaXZlblxuICogcmVnaXN0cmF0aW9uIGFuZCBkYXRldGltZSBpZCB3aGljaCB3aWxsIGdldCBwaWNrZWQgdXAgYnkgdGhlIGB3aXRoU2VsZWN0YFxuICogSE9DIGluIHRoZSBjb21wb3NlZCBjb21wb25lbnQuXG4gKlxuICogQHR5cGUge1dQQ29tcG9uZW50fVxuICovXG5jb25zdCB3aXRoTGF0ZXN0Q2hlY2tpbiA9IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHRjb21wb3NlKCBbXG5cdFx0d2l0aFNlbGVjdChcblx0XHRcdCggc2VsZWN0LCB7IHJlZ2lzdHJhdGlvbiwgZGF0ZXRpbWVJZCB9ICkgPT4ge1xuXHRcdFx0XHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoXG5cdFx0XHRcdFx0cmVnaXN0cmF0aW9uLFxuXHRcdFx0XHRcdCdyZWdpc3RyYXRpb24nXG5cdFx0XHRcdCkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHsgZ2V0TGF0ZXN0Q2hlY2tpbiB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0XHRjb25zdCB7IGhhc0ZpbmlzaGVkUmVzb2x1dGlvbiB9ID0gc2VsZWN0KCAnY29yZS9kYXRhJyApO1xuXHRcdFx0XHRjb25zdCBjaGVja0luRW50aXR5ID0gZ2V0TGF0ZXN0Q2hlY2tpbihcblx0XHRcdFx0XHRyZWdpc3RyYXRpb24uaWQsXG5cdFx0XHRcdFx0ZGF0ZXRpbWVJZFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGNoZWNraW5FbnRpdHk6IGNoZWNrSW5FbnRpdHkgfHwgbnVsbCxcblx0XHRcdFx0XHRoYXNSZXNvbHZlZENoZWNraW46IGhhc0ZpbmlzaGVkUmVzb2x1dGlvbihcblx0XHRcdFx0XHRcdCdldmVudGVzcHJlc3NvL2NvcmUnLFxuXHRcdFx0XHRcdFx0J2dldExhdGVzdENoZWNraW4nLFxuXHRcdFx0XHRcdFx0WyByZWdpc3RyYXRpb24uaWQsIGRhdGV0aW1lSWQgXVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0KSxcblx0XHR3aXRoRGlzcGF0Y2goXG5cdFx0XHQoIGRpc3BhdGNoLCB7IHJlZ2lzdHJhdGlvbiwgZGF0ZXRpbWVJZCB9ICkgPT4ge1xuXHRcdFx0XHRjb25zdCB7IHRvZ2dsZUNoZWNraW4gfSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdG9uQ2xpY2soKSB7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdGlzTW9kZWxFbnRpdHlPZk1vZGVsKFxuXHRcdFx0XHRcdFx0XHRcdHJlZ2lzdHJhdGlvbixcblx0XHRcdFx0XHRcdFx0XHQncmVnaXN0cmF0aW9uJ1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0dG9nZ2xlQ2hlY2tpbiggcmVnaXN0cmF0aW9uLmlkLCBkYXRldGltZUlkICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHQpLFxuXHRdICksXG5cdCd3aXRoTGF0ZXN0Q2hlY2tpbidcbik7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhMYXRlc3RDaGVja2luO1xuIiwiZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycjJbaV0gPSBhcnJbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXM7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcblxuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBhcnIyO1xuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2ZcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVyKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIikgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG59IiwiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gXCIuL2RlZmluZVByb3BlcnR5XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3duS2V5cyA9IG93bktleXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBvd25LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59IiwiaW1wb3J0IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIi4vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuICB2YXIga2V5LCBpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuLi8uLi9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7XG4gIGlmICghcmF3KSB7XG4gICAgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0cmluZ3MsIHtcbiAgICByYXc6IHtcbiAgICAgIHZhbHVlOiBPYmplY3QuZnJlZXplKHJhdylcbiAgICB9XG4gIH0pKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5XCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWRcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn0iLCJmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcikgPT09IFwic3ltYm9sXCIpIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogX3R5cGVvZjIob2JqKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn0iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mXCIpO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcikgPT09IFwiW29iamVjdCBBcmd1bWVudHNdXCIpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXk7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkOyIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL2RlZmluZVByb3BlcnR5XCIpO1xuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3duS2V5cyA9IG93bktleXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBvd25LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFNwcmVhZDsiLCJ2YXIgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSA9IHJlcXVpcmUoXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIik7XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcbiAgdmFyIGtleSwgaTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07XG4gICAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXM7IiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2U7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi4vaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIik7XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm47IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2Y7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkXCIpO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5OyIsImZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mMihvYmopOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZjIoU3ltYm9sLml0ZXJhdG9yKSA9PT0gXCJzeW1ib2xcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gX3R5cGVvZjIob2JqKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogX3R5cGVvZjIob2JqKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mOyIsImltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCc7XG5pbXBvcnQgU3R5bGlzIGZyb20gJ0BlbW90aW9uL3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90aHlzdWx0YW4vc3R5bGlzLmpzL3RyZWUvbWFzdGVyL3BsdWdpbnMvcnVsZS1zaGVldFxuLy8gaW5saW5lZCB0byBhdm9pZCB1bWQgd3JhcHBlciBhbmQgcGVlckRlcCB3YXJuaW5ncy9pbnN0YWxsaW5nIHN0eWxpc1xuLy8gc2luY2Ugd2UgdXNlIHN0eWxpcyBhZnRlciBjbG9zdXJlIGNvbXBpbGVyXG52YXIgZGVsaW1pdGVyID0gJy8qfCovJztcbnZhciBuZWVkbGUgPSBkZWxpbWl0ZXIgKyAnfSc7XG5cbmZ1bmN0aW9uIHRvU2hlZXQoYmxvY2spIHtcbiAgaWYgKGJsb2NrKSB7XG4gICAgU2hlZXQuY3VycmVudC5pbnNlcnQoYmxvY2sgKyAnfScpO1xuICB9XG59XG5cbnZhciBTaGVldCA9IHtcbiAgY3VycmVudDogbnVsbFxufTtcbnZhciBydWxlU2hlZXQgPSBmdW5jdGlvbiBydWxlU2hlZXQoY29udGV4dCwgY29udGVudCwgc2VsZWN0b3JzLCBwYXJlbnRzLCBsaW5lLCBjb2x1bW4sIGxlbmd0aCwgbnMsIGRlcHRoLCBhdCkge1xuICBzd2l0Y2ggKGNvbnRleHQpIHtcbiAgICAvLyBwcm9wZXJ0eVxuICAgIGNhc2UgMTpcbiAgICAgIHtcbiAgICAgICAgc3dpdGNoIChjb250ZW50LmNoYXJDb2RlQXQoMCkpIHtcbiAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyBAaW1wb3J0XG4gICAgICAgICAgICAgIFNoZWV0LmN1cnJlbnQuaW5zZXJ0KGNvbnRlbnQgKyAnOycpO1xuICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgLy8gY2hhcmNvZGUgZm9yIGxcblxuICAgICAgICAgIGNhc2UgMTA4OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyBjaGFyY29kZSBmb3IgYlxuICAgICAgICAgICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgyKSA9PT0gOTgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIC8vIHNlbGVjdG9yXG5cbiAgICBjYXNlIDI6XG4gICAgICB7XG4gICAgICAgIGlmIChucyA9PT0gMCkgcmV0dXJuIGNvbnRlbnQgKyBkZWxpbWl0ZXI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIC8vIGF0LXJ1bGVcblxuICAgIGNhc2UgMzpcbiAgICAgIHtcbiAgICAgICAgc3dpdGNoIChucykge1xuICAgICAgICAgIC8vIEBmb250LWZhY2UsIEBwYWdlXG4gICAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgY2FzZSAxMTI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFNoZWV0LmN1cnJlbnQuaW5zZXJ0KHNlbGVjdG9yc1swXSArIGNvbnRlbnQpO1xuICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXR1cm4gY29udGVudCArIChhdCA9PT0gMCA/IGRlbGltaXRlciA6ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgY2FzZSAtMjpcbiAgICAgIHtcbiAgICAgICAgY29udGVudC5zcGxpdChuZWVkbGUpLmZvckVhY2godG9TaGVldCk7XG4gICAgICB9XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgb3B0aW9ucyA9IHt9O1xuICB2YXIga2V5ID0gb3B0aW9ucy5rZXkgfHwgJ2Nzcyc7XG4gIHZhciBzdHlsaXNPcHRpb25zO1xuXG4gIGlmIChvcHRpb25zLnByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc3R5bGlzT3B0aW9ucyA9IHtcbiAgICAgIHByZWZpeDogb3B0aW9ucy5wcmVmaXhcbiAgICB9O1xuICB9XG5cbiAgdmFyIHN0eWxpcyA9IG5ldyBTdHlsaXMoc3R5bGlzT3B0aW9ucyk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgaWYgKC9bXmEtei1dLy50ZXN0KGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtb3Rpb24ga2V5IG11c3Qgb25seSBjb250YWluIGxvd2VyIGNhc2UgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgYW5kIC0gYnV0IFxcXCJcIiArIGtleSArIFwiXFxcIiB3YXMgcGFzc2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbnNlcnRlZCA9IHt9OyAvLyAkRmxvd0ZpeE1lXG5cbiAgdmFyIGNvbnRhaW5lcjtcblxuICB7XG4gICAgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgfHwgZG9jdW1lbnQuaGVhZDtcbiAgICB2YXIgbm9kZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uLVwiICsga2V5ICsgXCJdXCIpO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwobm9kZXMsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb24tXCIgKyBrZXkpOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgIGF0dHJpYi5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIGluc2VydGVkW2lkXSA9IHRydWU7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHtcbiAgICBzdHlsaXMudXNlKG9wdGlvbnMuc3R5bGlzUGx1Z2lucykocnVsZVNoZWV0KTtcblxuICAgIF9pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQoc2VsZWN0b3IsIHNlcmlhbGl6ZWQsIHNoZWV0LCBzaG91bGRDYWNoZSkge1xuICAgICAgdmFyIG5hbWUgPSBzZXJpYWxpemVkLm5hbWU7XG4gICAgICBTaGVldC5jdXJyZW50ID0gc2hlZXQ7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHNlcmlhbGl6ZWQubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG1hcCA9IHNlcmlhbGl6ZWQubWFwO1xuICAgICAgICBTaGVldC5jdXJyZW50ID0ge1xuICAgICAgICAgIGluc2VydDogZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAgICAgICAgIHNoZWV0Lmluc2VydChydWxlICsgbWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0eWxpcyhzZWxlY3Rvciwgc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbbmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWJmNzM3MWE0Y2Q3ZTYwMDllZjYxZDBhXG4gICAgdmFyIGNvbW1lbnRTdGFydCA9IC9cXC9cXCovZztcbiAgICB2YXIgY29tbWVudEVuZCA9IC9cXCpcXC8vZztcbiAgICBzdHlsaXMudXNlKGZ1bmN0aW9uIChjb250ZXh0LCBjb250ZW50KSB7XG4gICAgICBzd2l0Y2ggKGNvbnRleHQpIHtcbiAgICAgICAgY2FzZSAtMTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3aGlsZSAoY29tbWVudFN0YXJ0LnRlc3QoY29udGVudCkpIHtcbiAgICAgICAgICAgICAgY29tbWVudEVuZC5sYXN0SW5kZXggPSBjb21tZW50U3RhcnQubGFzdEluZGV4O1xuXG4gICAgICAgICAgICAgIGlmIChjb21tZW50RW5kLnRlc3QoY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICBjb21tZW50U3RhcnQubGFzdEluZGV4ID0gY29tbWVudEVuZC5sYXN0SW5kZXg7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdXIgc3R5bGVzIGhhdmUgYW4gdW50ZXJtaW5hdGVkIGNvbW1lbnQgKFwiLypcIiB3aXRob3V0IGNvcnJlc3BvbmRpbmcgXCIqL1wiKS4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29tbWVudFN0YXJ0Lmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgc3R5bGlzLnVzZShmdW5jdGlvbiAoY29udGV4dCwgY29udGVudCwgc2VsZWN0b3JzKSB7XG4gICAgICBzd2l0Y2ggKGNvbnRleHQpIHtcbiAgICAgICAgY2FzZSAtMTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZmxhZyA9ICdlbW90aW9uLWRpc2FibGUtc2VydmVyLXJlbmRlcmluZy11bnNhZmUtc2VsZWN0b3Itd2FybmluZy1wbGVhc2UtZG8tbm90LXVzZS10aGlzLXRoZS13YXJuaW5nLWV4aXN0cy1mb3ItYS1yZWFzb24nO1xuICAgICAgICAgICAgdmFyIHVuc2FmZVBzZXVkb0NsYXNzZXMgPSBjb250ZW50Lm1hdGNoKC8oOmZpcnN0fDpudGh8Om50aC1sYXN0KS1jaGlsZC9nKTtcblxuICAgICAgICAgICAgaWYgKHVuc2FmZVBzZXVkb0NsYXNzZXMpIHtcbiAgICAgICAgICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICAgICAgICAgIHZhciBpZ25vcmVSZWdFeHAgPSBuZXcgUmVnRXhwKHVuc2FmZVBzZXVkb0NsYXNzICsgXCIuKlxcXFwvXFxcXCogXCIgKyBmbGFnICsgXCIgXFxcXCpcXFxcL1wiKTtcbiAgICAgICAgICAgICAgICB2YXIgaWdub3JlID0gaWdub3JlUmVnRXhwLnRlc3QoY29udGVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3MgJiYgIWlnbm9yZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBwc2V1ZG8gY2xhc3MgXFxcIlwiICsgdW5zYWZlUHNldWRvQ2xhc3MgKyBcIlxcXCIgaXMgcG90ZW50aWFsbHkgdW5zYWZlIHdoZW4gZG9pbmcgc2VydmVyLXNpZGUgcmVuZGVyaW5nLiBUcnkgY2hhbmdpbmcgaXQgdG8gXFxcIlwiICsgdW5zYWZlUHNldWRvQ2xhc3Muc3BsaXQoJy1jaGlsZCcpWzBdICsgXCItb2YtdHlwZVxcXCIuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeVxuICAgIH0pLFxuICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgIGluc2VydGVkOiBpbnNlcnRlZCxcbiAgICByZWdpc3RlcmVkOiB7fSxcbiAgICBpbnNlcnQ6IF9pbnNlcnRcbiAgfTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ2FjaGU7XG4iLCJmdW5jdGlvbiBzdHlsaXNfbWluIChXKSB7XG4gIGZ1bmN0aW9uIE0oZCwgYywgZSwgaCwgYSkge1xuICAgIGZvciAodmFyIG0gPSAwLCBiID0gMCwgdiA9IDAsIG4gPSAwLCBxLCBnLCB4ID0gMCwgSyA9IDAsIGssIHUgPSBrID0gcSA9IDAsIGwgPSAwLCByID0gMCwgSSA9IDAsIHQgPSAwLCBCID0gZS5sZW5ndGgsIEogPSBCIC0gMSwgeSwgZiA9ICcnLCBwID0gJycsIEYgPSAnJywgRyA9ICcnLCBDOyBsIDwgQjspIHtcbiAgICAgIGcgPSBlLmNoYXJDb2RlQXQobCk7XG4gICAgICBsID09PSBKICYmIDAgIT09IGIgKyBuICsgdiArIG0gJiYgKDAgIT09IGIgJiYgKGcgPSA0NyA9PT0gYiA/IDEwIDogNDcpLCBuID0gdiA9IG0gPSAwLCBCKyssIEorKyk7XG5cbiAgICAgIGlmICgwID09PSBiICsgbiArIHYgKyBtKSB7XG4gICAgICAgIGlmIChsID09PSBKICYmICgwIDwgciAmJiAoZiA9IGYucmVwbGFjZShOLCAnJykpLCAwIDwgZi50cmltKCkubGVuZ3RoKSkge1xuICAgICAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGYgKz0gZS5jaGFyQXQobCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZyA9IDU5O1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgICAgY2FzZSAxMjM6XG4gICAgICAgICAgICBmID0gZi50cmltKCk7XG4gICAgICAgICAgICBxID0gZi5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgayA9IDE7XG5cbiAgICAgICAgICAgIGZvciAodCA9ICsrbDsgbCA8IEI7KSB7XG4gICAgICAgICAgICAgIHN3aXRjaCAoZyA9IGUuY2hhckNvZGVBdChsKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTIzOlxuICAgICAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDEyNTpcbiAgICAgICAgICAgICAgICAgIGstLTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZyA9IGUuY2hhckNvZGVBdChsICsgMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSBsICsgMTsgdSA8IEo7ICsrdSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGUuY2hhckNvZGVBdCh1KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoNDIgPT09IGcgJiYgNDIgPT09IGUuY2hhckNvZGVBdCh1IC0gMSkgJiYgbCArIDIgIT09IHUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHUgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoNDcgPT09IGcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHUgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA5MTpcbiAgICAgICAgICAgICAgICAgIGcrKztcblxuICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICBnKys7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICAgICAgICBmb3IgKDsgbCsrIDwgSiAmJiBlLmNoYXJDb2RlQXQobCkgIT09IGc7KSB7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICgwID09PSBrKSBicmVhaztcbiAgICAgICAgICAgICAgbCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBrID0gZS5zdWJzdHJpbmcodCwgbCk7XG4gICAgICAgICAgICAwID09PSBxICYmIChxID0gKGYgPSBmLnJlcGxhY2UoY2EsICcnKS50cmltKCkpLmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHEpIHtcbiAgICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgICAgICAwIDwgciAmJiAoZiA9IGYucmVwbGFjZShOLCAnJykpO1xuICAgICAgICAgICAgICAgIGcgPSBmLmNoYXJDb2RlQXQoMSk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxuICAgICAgICAgICAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICAgICAgICAgIHIgPSBjO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgciA9IE87XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgayA9IE0oYywgciwgaywgZywgYSArIDEpO1xuICAgICAgICAgICAgICAgIHQgPSBrLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAwIDwgQSAmJiAociA9IFgoTywgZiwgSSksIEMgPSBIKDMsIGssIHIsIGMsIEQsIHosIHQsIGcsIGEsIGgpLCBmID0gci5qb2luKCcnKSwgdm9pZCAwICE9PSBDICYmIDAgPT09ICh0ID0gKGsgPSBDLnRyaW0oKSkubGVuZ3RoKSAmJiAoZyA9IDAsIGsgPSAnJykpO1xuICAgICAgICAgICAgICAgIGlmICgwIDwgdCkgc3dpdGNoIChnKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgICAgICAgICAgZiA9IGYucmVwbGFjZShkYSwgZWEpO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIDEwMDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgICAgICAgICAgayA9IGYgKyAneycgKyBrICsgJ30nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgY2FzZSAxMDc6XG4gICAgICAgICAgICAgICAgICAgIGYgPSBmLnJlcGxhY2UoZmEsICckMSAkMicpO1xuICAgICAgICAgICAgICAgICAgICBrID0gZiArICd7JyArIGsgKyAnfSc7XG4gICAgICAgICAgICAgICAgICAgIGsgPSAxID09PSB3IHx8IDIgPT09IHcgJiYgTCgnQCcgKyBrLCAzKSA/ICdALXdlYmtpdC0nICsgayArICdAJyArIGsgOiAnQCcgKyBrO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgayA9IGYgKyBrLCAxMTIgPT09IGggJiYgKGsgPSAocCArPSBrLCAnJykpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBrID0gJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBrID0gTShjLCBYKGMsIGYsIEkpLCBrLCBoLCBhICsgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEYgKz0gaztcbiAgICAgICAgICAgIGsgPSBJID0gciA9IHUgPSBxID0gMDtcbiAgICAgICAgICAgIGYgPSAnJztcbiAgICAgICAgICAgIGcgPSBlLmNoYXJDb2RlQXQoKytsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMjU6XG4gICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIGYgPSAoMCA8IHIgPyBmLnJlcGxhY2UoTiwgJycpIDogZikudHJpbSgpO1xuICAgICAgICAgICAgaWYgKDEgPCAodCA9IGYubGVuZ3RoKSkgc3dpdGNoICgwID09PSB1ICYmIChxID0gZi5jaGFyQ29kZUF0KDApLCA0NSA9PT0gcSB8fCA5NiA8IHEgJiYgMTIzID4gcSkgJiYgKHQgPSAoZiA9IGYucmVwbGFjZSgnICcsICc6JykpLmxlbmd0aCksIDAgPCBBICYmIHZvaWQgMCAhPT0gKEMgPSBIKDEsIGYsIGMsIGQsIEQsIHosIHAubGVuZ3RoLCBoLCBhLCBoKSkgJiYgMCA9PT0gKHQgPSAoZiA9IEMudHJpbSgpKS5sZW5ndGgpICYmIChmID0gJ1xceDAwXFx4MDAnKSwgcSA9IGYuY2hhckNvZGVBdCgwKSwgZyA9IGYuY2hhckNvZGVBdCgxKSwgcSkge1xuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgICAgICBpZiAoMTA1ID09PSBnIHx8IDk5ID09PSBnKSB7XG4gICAgICAgICAgICAgICAgICBHICs9IGYgKyBlLmNoYXJBdChsKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIDU4ICE9PSBmLmNoYXJDb2RlQXQodCAtIDEpICYmIChwICs9IFAoZiwgcSwgZywgZi5jaGFyQ29kZUF0KDIpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBJID0gciA9IHUgPSBxID0gMDtcbiAgICAgICAgICAgIGYgPSAnJztcbiAgICAgICAgICAgIGcgPSBlLmNoYXJDb2RlQXQoKytsKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICA0NyA9PT0gYiA/IGIgPSAwIDogMCA9PT0gMSArIHEgJiYgMTA3ICE9PSBoICYmIDAgPCBmLmxlbmd0aCAmJiAociA9IDEsIGYgKz0gJ1xceDAwJyk7XG4gICAgICAgICAgMCA8IEEgKiBZICYmIEgoMCwgZiwgYywgZCwgRCwgeiwgcC5sZW5ndGgsIGgsIGEsIGgpO1xuICAgICAgICAgIHogPSAxO1xuICAgICAgICAgIEQrKztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDU5OlxuICAgICAgICBjYXNlIDEyNTpcbiAgICAgICAgICBpZiAoMCA9PT0gYiArIG4gKyB2ICsgbSkge1xuICAgICAgICAgICAgeisrO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgeisrO1xuICAgICAgICAgIHkgPSBlLmNoYXJBdChsKTtcblxuICAgICAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgaWYgKDAgPT09IG4gKyBtICsgYikgc3dpdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICAgICAgeSA9ICcnO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgMzIgIT09IGcgJiYgKHkgPSAnICcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHkgPSAnXFxcXDAnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgeSA9ICdcXFxcZic7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICB5ID0gJ1xcXFx2JztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgIDAgPT09IG4gKyBiICsgbSAmJiAociA9IEkgPSAxLCB5ID0gJ1xcZicgKyB5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTA4OlxuICAgICAgICAgICAgICBpZiAoMCA9PT0gbiArIGIgKyBtICsgRSAmJiAwIDwgdSkgc3dpdGNoIChsIC0gdSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgIDExMiA9PT0geCAmJiA1OCA9PT0gZS5jaGFyQ29kZUF0KGwgLSAzKSAmJiAoRSA9IHgpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgMTExID09PSBLICYmIChFID0gSyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgICAgIDAgPT09IG4gKyBiICsgbSAmJiAodSA9IGwpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgICAgMCA9PT0gYiArIHYgKyBuICsgbSAmJiAociA9IDEsIHkgKz0gJ1xccicpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICAgIDAgPT09IGIgJiYgKG4gPSBuID09PSBnID8gMCA6IDAgPT09IG4gPyBnIDogbik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDkxOlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIHYgJiYgbSsrO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA5MzpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyB2ICYmIG0tLTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICAgIDAgPT09IG4gKyBiICsgbSAmJiB2LS07XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICBpZiAoMCA9PT0gbiArIGIgKyBtKSB7XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IHEpIHN3aXRjaCAoMiAqIHggKyAzICogSykge1xuICAgICAgICAgICAgICAgICAgY2FzZSA1MzM6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBxID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdisrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICAgIDAgPT09IGIgKyB2ICsgbiArIG0gKyB1ICsgayAmJiAoayA9IDEpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICAgIGlmICghKDAgPCBuICsgbSArIHYpKSBzd2l0Y2ggKGIpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKDIgKiBnICsgMyAqIGUuY2hhckNvZGVBdChsICsgMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMzU6XG4gICAgICAgICAgICAgICAgICAgICAgYiA9IDQ3O1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjIwOlxuICAgICAgICAgICAgICAgICAgICAgIHQgPSBsLCBiID0gNDI7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgICAgICAgIDQ3ID09PSBnICYmIDQyID09PSB4ICYmIHQgKyAyICE9PSBsICYmICgzMyA9PT0gZS5jaGFyQ29kZUF0KHQgKyAyKSAmJiAocCArPSBlLnN1YnN0cmluZyh0LCBsICsgMSkpLCB5ID0gJycsIGIgPSAwKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIDAgPT09IGIgJiYgKGYgKz0geSk7XG4gICAgICB9XG5cbiAgICAgIEsgPSB4O1xuICAgICAgeCA9IGc7XG4gICAgICBsKys7XG4gICAgfVxuXG4gICAgdCA9IHAubGVuZ3RoO1xuXG4gICAgaWYgKDAgPCB0KSB7XG4gICAgICByID0gYztcbiAgICAgIGlmICgwIDwgQSAmJiAoQyA9IEgoMiwgcCwgciwgZCwgRCwgeiwgdCwgaCwgYSwgaCksIHZvaWQgMCAhPT0gQyAmJiAwID09PSAocCA9IEMpLmxlbmd0aCkpIHJldHVybiBHICsgcCArIEY7XG4gICAgICBwID0gci5qb2luKCcsJykgKyAneycgKyBwICsgJ30nO1xuXG4gICAgICBpZiAoMCAhPT0gdyAqIEUpIHtcbiAgICAgICAgMiAhPT0gdyB8fCBMKHAsIDIpIHx8IChFID0gMCk7XG5cbiAgICAgICAgc3dpdGNoIChFKSB7XG4gICAgICAgICAgY2FzZSAxMTE6XG4gICAgICAgICAgICBwID0gcC5yZXBsYWNlKGhhLCAnOi1tb3otJDEnKSArIHA7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTEyOlxuICAgICAgICAgICAgcCA9IHAucmVwbGFjZShRLCAnOjotd2Via2l0LWlucHV0LSQxJykgKyBwLnJlcGxhY2UoUSwgJzo6LW1vei0kMScpICsgcC5yZXBsYWNlKFEsICc6LW1zLWlucHV0LSQxJykgKyBwO1xuICAgICAgICB9XG5cbiAgICAgICAgRSA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEcgKyBwICsgRjtcbiAgfVxuXG4gIGZ1bmN0aW9uIFgoZCwgYywgZSkge1xuICAgIHZhciBoID0gYy50cmltKCkuc3BsaXQoaWEpO1xuICAgIGMgPSBoO1xuICAgIHZhciBhID0gaC5sZW5ndGgsXG4gICAgICAgIG0gPSBkLmxlbmd0aDtcblxuICAgIHN3aXRjaCAobSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxOlxuICAgICAgICB2YXIgYiA9IDA7XG5cbiAgICAgICAgZm9yIChkID0gMCA9PT0gbSA/ICcnIDogZFswXSArICcgJzsgYiA8IGE7ICsrYikge1xuICAgICAgICAgIGNbYl0gPSBaKGQsIGNbYl0sIGUsIG0pLnRyaW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgdiA9IGIgPSAwO1xuXG4gICAgICAgIGZvciAoYyA9IFtdOyBiIDwgYTsgKytiKSB7XG4gICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBtOyArK24pIHtcbiAgICAgICAgICAgIGNbdisrXSA9IFooZFtuXSArICcgJywgaFtiXSwgZSwgbSkudHJpbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIGM7XG4gIH1cblxuICBmdW5jdGlvbiBaKGQsIGMsIGUpIHtcbiAgICB2YXIgaCA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICAzMyA+IGggJiYgKGggPSAoYyA9IGMudHJpbSgpKS5jaGFyQ29kZUF0KDApKTtcblxuICAgIHN3aXRjaCAoaCkge1xuICAgICAgY2FzZSAzODpcbiAgICAgICAgcmV0dXJuIGMucmVwbGFjZShGLCAnJDEnICsgZC50cmltKCkpO1xuXG4gICAgICBjYXNlIDU4OlxuICAgICAgICByZXR1cm4gZC50cmltKCkgKyBjLnJlcGxhY2UoRiwgJyQxJyArIGQudHJpbSgpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKDAgPCAxICogZSAmJiAwIDwgYy5pbmRleE9mKCdcXGYnKSkgcmV0dXJuIGMucmVwbGFjZShGLCAoNTggPT09IGQuY2hhckNvZGVBdCgwKSA/ICcnIDogJyQxJykgKyBkLnRyaW0oKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGQgKyBjO1xuICB9XG5cbiAgZnVuY3Rpb24gUChkLCBjLCBlLCBoKSB7XG4gICAgdmFyIGEgPSBkICsgJzsnLFxuICAgICAgICBtID0gMiAqIGMgKyAzICogZSArIDQgKiBoO1xuXG4gICAgaWYgKDk0NCA9PT0gbSkge1xuICAgICAgZCA9IGEuaW5kZXhPZignOicsIDkpICsgMTtcbiAgICAgIHZhciBiID0gYS5zdWJzdHJpbmcoZCwgYS5sZW5ndGggLSAxKS50cmltKCk7XG4gICAgICBiID0gYS5zdWJzdHJpbmcoMCwgZCkudHJpbSgpICsgYiArICc7JztcbiAgICAgIHJldHVybiAxID09PSB3IHx8IDIgPT09IHcgJiYgTChiLCAxKSA/ICctd2Via2l0LScgKyBiICsgYiA6IGI7XG4gICAgfVxuXG4gICAgaWYgKDAgPT09IHcgfHwgMiA9PT0gdyAmJiAhTChhLCAxKSkgcmV0dXJuIGE7XG5cbiAgICBzd2l0Y2ggKG0pIHtcbiAgICAgIGNhc2UgMTAxNTpcbiAgICAgICAgcmV0dXJuIDk3ID09PSBhLmNoYXJDb2RlQXQoMTApID8gJy13ZWJraXQtJyArIGEgKyBhIDogYTtcblxuICAgICAgY2FzZSA5NTE6XG4gICAgICAgIHJldHVybiAxMTYgPT09IGEuY2hhckNvZGVBdCgzKSA/ICctd2Via2l0LScgKyBhICsgYSA6IGE7XG5cbiAgICAgIGNhc2UgOTYzOlxuICAgICAgICByZXR1cm4gMTEwID09PSBhLmNoYXJDb2RlQXQoNSkgPyAnLXdlYmtpdC0nICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDEwMDk6XG4gICAgICAgIGlmICgxMDAgIT09IGEuY2hhckNvZGVBdCg0KSkgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTY5OlxuICAgICAgY2FzZSA5NDI6XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgOTc4OlxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1vei0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgMTAxOTpcbiAgICAgIGNhc2UgOTgzOlxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1vei0nICsgYSArICctbXMtJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDg4MzpcbiAgICAgICAgaWYgKDQ1ID09PSBhLmNoYXJDb2RlQXQoOCkpIHJldHVybiAnLXdlYmtpdC0nICsgYSArIGE7XG4gICAgICAgIGlmICgwIDwgYS5pbmRleE9mKCdpbWFnZS1zZXQoJywgMTEpKSByZXR1cm4gYS5yZXBsYWNlKGphLCAnJDEtd2Via2l0LSQyJykgKyBhO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA5MzI6XG4gICAgICAgIGlmICg0NSA9PT0gYS5jaGFyQ29kZUF0KDQpKSBzd2l0Y2ggKGEuY2hhckNvZGVBdCg1KSkge1xuICAgICAgICAgIGNhc2UgMTAzOlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LWJveC0nICsgYS5yZXBsYWNlKCctZ3JvdycsICcnKSArICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYS5yZXBsYWNlKCdncm93JywgJ3Bvc2l0aXZlJykgKyBhO1xuXG4gICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBhLnJlcGxhY2UoJ3NocmluaycsICduZWdhdGl2ZScpICsgYTtcblxuICAgICAgICAgIGNhc2UgOTg6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBhLnJlcGxhY2UoJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyBhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDk2NDpcbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy1mbGV4LScgKyBhICsgYTtcblxuICAgICAgY2FzZSAxMDIzOlxuICAgICAgICBpZiAoOTkgIT09IGEuY2hhckNvZGVBdCg4KSkgYnJlYWs7XG4gICAgICAgIGIgPSBhLnN1YnN0cmluZyhhLmluZGV4T2YoJzonLCAxNSkpLnJlcGxhY2UoJ2ZsZXgtJywgJycpLnJlcGxhY2UoJ3NwYWNlLWJldHdlZW4nLCAnanVzdGlmeScpO1xuICAgICAgICByZXR1cm4gJy13ZWJraXQtYm94LXBhY2snICsgYiArICctd2Via2l0LScgKyBhICsgJy1tcy1mbGV4LXBhY2snICsgYiArIGE7XG5cbiAgICAgIGNhc2UgMTAwNTpcbiAgICAgICAgcmV0dXJuIGthLnRlc3QoYSkgPyBhLnJlcGxhY2UoYWEsICc6LXdlYmtpdC0nKSArIGEucmVwbGFjZShhYSwgJzotbW96LScpICsgYSA6IGE7XG5cbiAgICAgIGNhc2UgMWUzOlxuICAgICAgICBiID0gYS5zdWJzdHJpbmcoMTMpLnRyaW0oKTtcbiAgICAgICAgYyA9IGIuaW5kZXhPZignLScpICsgMTtcblxuICAgICAgICBzd2l0Y2ggKGIuY2hhckNvZGVBdCgwKSArIGIuY2hhckNvZGVBdChjKSkge1xuICAgICAgICAgIGNhc2UgMjI2OlxuICAgICAgICAgICAgYiA9IGEucmVwbGFjZShHLCAndGInKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMzI6XG4gICAgICAgICAgICBiID0gYS5yZXBsYWNlKEcsICd0Yi1ybCcpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDIyMDpcbiAgICAgICAgICAgIGIgPSBhLnJlcGxhY2UoRywgJ2xyJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGIgKyBhO1xuXG4gICAgICBjYXNlIDEwMTc6XG4gICAgICAgIGlmICgtMSA9PT0gYS5pbmRleE9mKCdzdGlja3knLCA5KSkgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTc1OlxuICAgICAgICBjID0gKGEgPSBkKS5sZW5ndGggLSAxMDtcbiAgICAgICAgYiA9ICgzMyA9PT0gYS5jaGFyQ29kZUF0KGMpID8gYS5zdWJzdHJpbmcoMCwgYykgOiBhKS5zdWJzdHJpbmcoZC5pbmRleE9mKCc6JywgNykgKyAxKS50cmltKCk7XG5cbiAgICAgICAgc3dpdGNoIChtID0gYi5jaGFyQ29kZUF0KDApICsgKGIuY2hhckNvZGVBdCg3KSB8IDApKSB7XG4gICAgICAgICAgY2FzZSAyMDM6XG4gICAgICAgICAgICBpZiAoMTExID4gYi5jaGFyQ29kZUF0KDgpKSBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgYSA9IGEucmVwbGFjZShiLCAnLXdlYmtpdC0nICsgYikgKyAnOycgKyBhO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDIwNzpcbiAgICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICAgIGEgPSBhLnJlcGxhY2UoYiwgJy13ZWJraXQtJyArICgxMDIgPCBtID8gJ2lubGluZS0nIDogJycpICsgJ2JveCcpICsgJzsnICsgYS5yZXBsYWNlKGIsICctd2Via2l0LScgKyBiKSArICc7JyArIGEucmVwbGFjZShiLCAnLW1zLScgKyBiICsgJ2JveCcpICsgJzsnICsgYTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhICsgJzsnO1xuXG4gICAgICBjYXNlIDkzODpcbiAgICAgICAgaWYgKDQ1ID09PSBhLmNoYXJDb2RlQXQoNSkpIHN3aXRjaCAoYS5jaGFyQ29kZUF0KDYpKSB7XG4gICAgICAgICAgY2FzZSAxMDU6XG4gICAgICAgICAgICByZXR1cm4gYiA9IGEucmVwbGFjZSgnLWl0ZW1zJywgJycpLCAnLXdlYmtpdC0nICsgYSArICctd2Via2l0LWJveC0nICsgYiArICctbXMtZmxleC0nICsgYiArIGE7XG5cbiAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtZmxleC1pdGVtLScgKyBhLnJlcGxhY2UoYmEsICcnKSArIGE7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy1mbGV4LWxpbmUtcGFjaycgKyBhLnJlcGxhY2UoJ2FsaWduLWNvbnRlbnQnLCAnJykucmVwbGFjZShiYSwgJycpICsgYTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA5NzM6XG4gICAgICBjYXNlIDk4OTpcbiAgICAgICAgaWYgKDQ1ICE9PSBhLmNoYXJDb2RlQXQoMykgfHwgMTIyID09PSBhLmNoYXJDb2RlQXQoNCkpIGJyZWFrO1xuXG4gICAgICBjYXNlIDkzMTpcbiAgICAgIGNhc2UgOTUzOlxuICAgICAgICBpZiAoITAgPT09IGxhLnRlc3QoZCkpIHJldHVybiAxMTUgPT09IChiID0gZC5zdWJzdHJpbmcoZC5pbmRleE9mKCc6JykgKyAxKSkuY2hhckNvZGVBdCgwKSA/IFAoZC5yZXBsYWNlKCdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGMsIGUsIGgpLnJlcGxhY2UoJzpmaWxsLWF2YWlsYWJsZScsICc6c3RyZXRjaCcpIDogYS5yZXBsYWNlKGIsICctd2Via2l0LScgKyBiKSArIGEucmVwbGFjZShiLCAnLW1vei0nICsgYi5yZXBsYWNlKCdmaWxsLScsICcnKSkgKyBhO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA5NjI6XG4gICAgICAgIGlmIChhID0gJy13ZWJraXQtJyArIGEgKyAoMTAyID09PSBhLmNoYXJDb2RlQXQoNSkgPyAnLW1zLScgKyBhIDogJycpICsgYSwgMjExID09PSBlICsgaCAmJiAxMDUgPT09IGEuY2hhckNvZGVBdCgxMykgJiYgMCA8IGEuaW5kZXhPZigndHJhbnNmb3JtJywgMTApKSByZXR1cm4gYS5zdWJzdHJpbmcoMCwgYS5pbmRleE9mKCc7JywgMjcpICsgMSkucmVwbGFjZShtYSwgJyQxLXdlYmtpdC0kMicpICsgYTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEwoZCwgYykge1xuICAgIHZhciBlID0gZC5pbmRleE9mKDEgPT09IGMgPyAnOicgOiAneycpLFxuICAgICAgICBoID0gZC5zdWJzdHJpbmcoMCwgMyAhPT0gYyA/IGUgOiAxMCk7XG4gICAgZSA9IGQuc3Vic3RyaW5nKGUgKyAxLCBkLmxlbmd0aCAtIDEpO1xuICAgIHJldHVybiBSKDIgIT09IGMgPyBoIDogaC5yZXBsYWNlKG5hLCAnJDEnKSwgZSwgYyk7XG4gIH1cblxuICBmdW5jdGlvbiBlYShkLCBjKSB7XG4gICAgdmFyIGUgPSBQKGMsIGMuY2hhckNvZGVBdCgwKSwgYy5jaGFyQ29kZUF0KDEpLCBjLmNoYXJDb2RlQXQoMikpO1xuICAgIHJldHVybiBlICE9PSBjICsgJzsnID8gZS5yZXBsYWNlKG9hLCAnIG9yICgkMSknKS5zdWJzdHJpbmcoNCkgOiAnKCcgKyBjICsgJyknO1xuICB9XG5cbiAgZnVuY3Rpb24gSChkLCBjLCBlLCBoLCBhLCBtLCBiLCB2LCBuLCBxKSB7XG4gICAgZm9yICh2YXIgZyA9IDAsIHggPSBjLCB3OyBnIDwgQTsgKytnKSB7XG4gICAgICBzd2l0Y2ggKHcgPSBTW2ddLmNhbGwoQiwgZCwgeCwgZSwgaCwgYSwgbSwgYiwgdiwgbiwgcSkpIHtcbiAgICAgICAgY2FzZSB2b2lkIDA6XG4gICAgICAgIGNhc2UgITE6XG4gICAgICAgIGNhc2UgITA6XG4gICAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHggPSB3O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh4ICE9PSBjKSByZXR1cm4geDtcbiAgfVxuXG4gIGZ1bmN0aW9uIFQoZCkge1xuICAgIHN3aXRjaCAoZCkge1xuICAgICAgY2FzZSB2b2lkIDA6XG4gICAgICBjYXNlIG51bGw6XG4gICAgICAgIEEgPSBTLmxlbmd0aCA9IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGQpIFNbQSsrXSA9IGQ7ZWxzZSBpZiAoJ29iamVjdCcgPT09IHR5cGVvZiBkKSBmb3IgKHZhciBjID0gMCwgZSA9IGQubGVuZ3RoOyBjIDwgZTsgKytjKSB7XG4gICAgICAgICAgVChkW2NdKTtcbiAgICAgICAgfSBlbHNlIFkgPSAhIWQgfCAwO1xuICAgIH1cblxuICAgIHJldHVybiBUO1xuICB9XG5cbiAgZnVuY3Rpb24gVShkKSB7XG4gICAgZCA9IGQucHJlZml4O1xuICAgIHZvaWQgMCAhPT0gZCAmJiAoUiA9IG51bGwsIGQgPyAnZnVuY3Rpb24nICE9PSB0eXBlb2YgZCA/IHcgPSAxIDogKHcgPSAyLCBSID0gZCkgOiB3ID0gMCk7XG4gICAgcmV0dXJuIFU7XG4gIH1cblxuICBmdW5jdGlvbiBCKGQsIGMpIHtcbiAgICB2YXIgZSA9IGQ7XG4gICAgMzMgPiBlLmNoYXJDb2RlQXQoMCkgJiYgKGUgPSBlLnRyaW0oKSk7XG4gICAgViA9IGU7XG4gICAgZSA9IFtWXTtcblxuICAgIGlmICgwIDwgQSkge1xuICAgICAgdmFyIGggPSBIKC0xLCBjLCBlLCBlLCBELCB6LCAwLCAwLCAwLCAwKTtcbiAgICAgIHZvaWQgMCAhPT0gaCAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIGggJiYgKGMgPSBoKTtcbiAgICB9XG5cbiAgICB2YXIgYSA9IE0oTywgZSwgYywgMCwgMCk7XG4gICAgMCA8IEEgJiYgKGggPSBIKC0yLCBhLCBlLCBlLCBELCB6LCBhLmxlbmd0aCwgMCwgMCwgMCksIHZvaWQgMCAhPT0gaCAmJiAoYSA9IGgpKTtcbiAgICBWID0gJyc7XG4gICAgRSA9IDA7XG4gICAgeiA9IEQgPSAxO1xuICAgIHJldHVybiBhO1xuICB9XG5cbiAgdmFyIGNhID0gL15cXDArL2csXG4gICAgICBOID0gL1tcXDBcXHJcXGZdL2csXG4gICAgICBhYSA9IC86ICovZyxcbiAgICAgIGthID0gL3pvb3xncmEvLFxuICAgICAgbWEgPSAvKFssOiBdKSh0cmFuc2Zvcm0pL2csXG4gICAgICBpYSA9IC8sXFxyKz8vZyxcbiAgICAgIEYgPSAvKFtcXHRcXHJcXG4gXSkqXFxmPyYvZyxcbiAgICAgIGZhID0gL0Aoa1xcdyspXFxzKihcXFMqKVxccyovLFxuICAgICAgUSA9IC86OihwbGFjZSkvZyxcbiAgICAgIGhhID0gLzoocmVhZC1vbmx5KS9nLFxuICAgICAgRyA9IC9bc3ZoXVxcdystW3RibHJdezJ9LyxcbiAgICAgIGRhID0gL1xcKFxccyooLiopXFxzKlxcKS9nLFxuICAgICAgb2EgPSAvKFtcXHNcXFNdKj8pOy9nLFxuICAgICAgYmEgPSAvLXNlbGZ8ZmxleC0vZyxcbiAgICAgIG5hID0gL1teXSo/KDpbcnBdW2VsXWFbXFx3LV0rKVteXSovLFxuICAgICAgbGEgPSAvc3RyZXRjaHw6XFxzKlxcdytcXC0oPzpjb250ZXxhdmFpbCkvLFxuICAgICAgamEgPSAvKFteLV0pKGltYWdlLXNldFxcKCkvLFxuICAgICAgeiA9IDEsXG4gICAgICBEID0gMSxcbiAgICAgIEUgPSAwLFxuICAgICAgdyA9IDEsXG4gICAgICBPID0gW10sXG4gICAgICBTID0gW10sXG4gICAgICBBID0gMCxcbiAgICAgIFIgPSBudWxsLFxuICAgICAgWSA9IDAsXG4gICAgICBWID0gJyc7XG4gIEIudXNlID0gVDtcbiAgQi5zZXQgPSBVO1xuICB2b2lkIDAgIT09IFcgJiYgVShXKTtcbiAgcmV0dXJuIEI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxpc19taW47XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCBjcmVhdGVFbGVtZW50LCBmb3J3YXJkUmVmLCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCc7XG5pbXBvcnQgY3NzIGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNzcyB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxudmFyIEVtb3Rpb25DYWNoZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KGNyZWF0ZUNhY2hlKCkpO1xudmFyIFRoZW1lQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30pO1xudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICB2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHByb3BzLCByZWYpIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChFbW90aW9uQ2FjaGVDb250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoIC8vICRGbG93Rml4TWUgd2Uga25vdyBpdCB3b24ndCBiZSBudWxsXG4gICAgY2FjaGUpIHtcbiAgICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgICB9KTtcbiAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgcmV0dXJuIGZvcndhcmRSZWYocmVuZGVyKTtcbn07XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgbGFiZWxQcm9wTmFtZSA9ICdfX0VNT1RJT05fTEFCRUxfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKGNhY2hlLCBwcm9wcywgdGhlbWUsIHJlZikge1xuICB2YXIgdHlwZSA9IHByb3BzW3R5cGVQcm9wTmFtZV07XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW107XG4gIHZhciBjbGFzc05hbWUgPSAnJztcbiAgdmFyIGNzc1Byb3AgPSB0aGVtZSA9PT0gbnVsbCA/IHByb3BzLmNzcyA6IHByb3BzLmNzcyh0aGVtZSk7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChjc3NQcm9wKTtcblxuICBpZiAocHJvcHMuY2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhyZWdpc3RlcmVkU3R5bGVzKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHZhciBsYWJlbEZyb21TdGFjayA9IHByb3BzW2xhYmVsUHJvcE5hbWVdO1xuXG4gICAgaWYgKGxhYmVsRnJvbVN0YWNrKSB7XG4gICAgICBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzZXJpYWxpemVkLCAnbGFiZWw6JyArIGxhYmVsRnJvbVN0YWNrICsgJzsnXSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJ1bGVzID0gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpO1xuICBjbGFzc05hbWUgKz0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpICYmIGtleSAhPT0gJ2NzcycgJiYga2V5ICE9PSB0eXBlUHJvcE5hbWUgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgfHwga2V5ICE9PSBsYWJlbFByb3BOYW1lKSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHMucmVmID0gcmVmO1xuICBuZXdQcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gIHZhciBlbGUgPSBjcmVhdGVFbGVtZW50KHR5cGUsIG5ld1Byb3BzKTtcblxuICByZXR1cm4gZWxlO1xufTtcblxudmFyIEVtb3Rpb24gPSB3aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICAvLyB1c2UgQ29udGV4dC5yZWFkIGZvciB0aGUgdGhlbWUgd2hlbiBpdCdzIHN0YWJsZVxuICBpZiAodHlwZW9mIHByb3BzLmNzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFRoZW1lQ29udGV4dC5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgICByZXR1cm4gcmVuZGVyKGNhY2hlLCBwcm9wcywgdGhlbWUsIHJlZik7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyKGNhY2hlLCBwcm9wcywgbnVsbCwgcmVmKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBFbW90aW9uLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25Dc3NQcm9wSW50ZXJuYWwnO1xufSAvLyAkRmxvd0ZpeE1lXG5cblxudmFyIGpzeCA9IGZ1bmN0aW9uIGpzeCh0eXBlLCBwcm9wcykge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuICBpZiAocHJvcHMgPT0gbnVsbCB8fCBwcm9wcy5jc3MgPT0gbnVsbCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudC5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIHByb3BzLmNzcyA9PT0gJ3N0cmluZycgJiYgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBjc3MgZGVjbGFyYXRpb25cbiAgcHJvcHMuY3NzLmluZGV4T2YoJzonKSAhPT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpbmdzIGFyZSBub3QgYWxsb3dlZCBhcyBjc3MgcHJvcCB2YWx1ZXMsIHBsZWFzZSB3cmFwIGl0IGluIGEgY3NzIHRlbXBsYXRlIGxpdGVyYWwgZnJvbSAnQGVtb3Rpb24vY3NzJyBsaWtlIHRoaXM6IGNzc2BcIiArIHByb3BzLmNzcyArIFwiYFwiKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wc1t0eXBlUHJvcE5hbWVdID0gdHlwZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigpO1xuXG4gICAgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgICAvLyBjaHJvbWVcbiAgICAgIHZhciBtYXRjaCA9IGVycm9yLnN0YWNrLm1hdGNoKC9hdCBqc3guKlxcblxccythdCAoW0EtWl1bQS1aYS16XSspIC8pO1xuXG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIC8vIHNhZmFyaSBhbmQgZmlyZWZveFxuICAgICAgICBtYXRjaCA9IGVycm9yLnN0YWNrLm1hdGNoKC9eLipcXG4oW0EtWl1bQS1aYS16XSspQC8pO1xuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgbmV3UHJvcHNbbGFiZWxQcm9wTmFtZV0gPSBtYXRjaFsxXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMV0gPSBuZXdQcm9wcztcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3NMZW5ndGg7IGkrKykge1xuICAgIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVtpXSA9IGFyZ3NbaV07XG4gIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQuYXBwbHkobnVsbCwgY3JlYXRlRWxlbWVudEFyZ0FycmF5KTtcbn07XG5cbnZhciB3YXJuZWRBYm91dENzc1Byb3BGb3JHbG9iYWwgPSBmYWxzZTtcbnZhciBHbG9iYWwgPVxuLyogI19fUFVSRV9fICovXG53aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCAmJiAoIC8vIGNoZWNrIGZvciBjbGFzc05hbWUgYXMgd2VsbCBzaW5jZSB0aGUgdXNlciBpc1xuICAvLyBwcm9iYWJseSB1c2luZyB0aGUgY3VzdG9tIGNyZWF0ZUVsZW1lbnQgd2hpY2hcbiAgLy8gbWVhbnMgaXQgd2lsbCBiZSB0dXJuZWQgaW50byBhIGNsYXNzTmFtZSBwcm9wXG4gIC8vICRGbG93Rml4TWUgSSBkb24ndCByZWFsbHkgd2FudCB0byBhZGQgaXQgdG8gdGhlIHR5cGUgc2luY2UgaXQgc2hvdWxkbid0IGJlIHVzZWRcbiAgcHJvcHMuY2xhc3NOYW1lIHx8IHByb3BzLmNzcykpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIGNzcyBwcm9wIG9uIEdsb2JhbCwgZGlkIHlvdSBtZWFuIHRvIHVzZSB0aGUgc3R5bGVzIHByb3AgaW5zdGVhZD9cIik7XG4gICAgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzdHlsZXMgPSBwcm9wcy5zdHlsZXM7XG5cbiAgaWYgKHR5cGVvZiBzdHlsZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uICh0aGVtZSkge1xuICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoW3N0eWxlcyh0aGVtZSldKTtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KElubmVyR2xvYmFsLCB7XG4gICAgICAgIHNlcmlhbGl6ZWQ6IHNlcmlhbGl6ZWQsXG4gICAgICAgIGNhY2hlOiBjYWNoZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhbc3R5bGVzXSk7XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KElubmVyR2xvYmFsLCB7XG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBjYWNoZTogY2FjaGVcbiAgfSk7XG59KTtcblxuLy8gbWFpbnRhaW4gcGxhY2Ugb3ZlciByZXJlbmRlcnMuXG4vLyBpbml0aWFsIHJlbmRlciBmcm9tIGJyb3dzZXIsIGluc2VydEJlZm9yZSBjb250ZXh0LnNoZWV0LnRhZ3NbMF0gb3IgaWYgYSBzdHlsZSBoYXNuJ3QgYmVlbiBpbnNlcnRlZCB0aGVyZSB5ZXQsIGFwcGVuZENoaWxkXG4vLyBpbml0aWFsIGNsaWVudC1zaWRlIHJlbmRlciBmcm9tIFNTUiwgdXNlIHBsYWNlIG9mIGh5ZHJhdGluZyB0YWdcbnZhciBJbm5lckdsb2JhbCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShJbm5lckdsb2JhbCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gSW5uZXJHbG9iYWwocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgICByZXR1cm4gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IElubmVyR2xvYmFsLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiB0aGlzLnByb3BzLmNhY2hlLmtleSArIFwiLWdsb2JhbFwiLFxuICAgICAgbm9uY2U6IHRoaXMucHJvcHMuY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IHRoaXMucHJvcHMuY2FjaGUuc2hlZXQuY29udGFpbmVyXG4gICAgfSk7IC8vICRGbG93Rml4TWVcblxuICAgIHZhciBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInN0eWxlW2RhdGEtZW1vdGlvbi1cIiArIHRoaXMucHJvcHMuY2FjaGUua2V5ICsgXCI9XFxcIlwiICsgdGhpcy5wcm9wcy5zZXJpYWxpemVkLm5hbWUgKyBcIlxcXCJdXCIpO1xuXG4gICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuc2hlZXQudGFncy5wdXNoKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmNhY2hlLnNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNoZWV0LmJlZm9yZSA9IHRoaXMucHJvcHMuY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICB0aGlzLmluc2VydFN0eWxlcygpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgaWYgKHByZXZQcm9wcy5zZXJpYWxpemVkLm5hbWUgIT09IHRoaXMucHJvcHMuc2VyaWFsaXplZC5uYW1lKSB7XG4gICAgICB0aGlzLmluc2VydFN0eWxlcygpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzJCQxKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnNlcmlhbGl6ZWQubmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpbnNlcnQga2V5ZnJhbWVzXG4gICAgICBpbnNlcnRTdHlsZXModGhpcy5wcm9wcy5jYWNoZSwgdGhpcy5wcm9wcy5zZXJpYWxpemVkLm5leHQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICAvLyBpZiB0aGlzIGRvZXNuJ3QgZXhpc3QgdGhlbiBpdCB3aWxsIGJlIG51bGwgc28gdGhlIHN0eWxlIGVsZW1lbnQgd2lsbCBiZSBhcHBlbmRlZFxuICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnNoZWV0LnRhZ3NbdGhpcy5zaGVldC50YWdzLmxlbmd0aCAtIDFdLm5leHRFbGVtZW50U2libGluZztcbiAgICAgIHRoaXMuc2hlZXQuYmVmb3JlID0gZWxlbWVudDtcbiAgICAgIHRoaXMuc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLmNhY2hlLmluc2VydChcIlwiLCB0aGlzLnByb3BzLnNlcmlhbGl6ZWQsIHRoaXMuc2hlZXQsIGZhbHNlKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnNoZWV0LmZsdXNoKCk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHJldHVybiBJbm5lckdsb2JhbDtcbn0oQ29tcG9uZW50KTtcblxudmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uIGtleWZyYW1lcygpIHtcbiAgdmFyIGluc2VydGFibGUgPSBjc3MuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB2YXIgbmFtZSA9IFwiYW5pbWF0aW9uLVwiICsgaW5zZXJ0YWJsZS5uYW1lOyAvLyAkRmxvd0ZpeE1lXG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogXCJAa2V5ZnJhbWVzIFwiICsgbmFtZSArIFwie1wiICsgaW5zZXJ0YWJsZS5zdHlsZXMgKyBcIn1cIixcbiAgICBhbmltOiAxLFxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBcIl9FTU9fXCIgKyB0aGlzLm5hbWUgKyBcIl9cIiArIHRoaXMuc3R5bGVzICsgXCJfRU1PX1wiO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSAnJztcblxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBhcmcpIHtcbiAgICAgICAgICAgICAgaWYgKGFyZ1trXSAmJiBrKSB7XG4gICAgICAgICAgICAgICAgdG9BZGQgJiYgKHRvQWRkICs9ICcgJyk7XG4gICAgICAgICAgICAgICAgdG9BZGQgKz0gaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICB0b0FkZCA9IGFyZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b0FkZCkge1xuICAgICAgY2xzICYmIChjbHMgKz0gJyAnKTtcbiAgICAgIGNscyArPSB0b0FkZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xzO1xufTtcblxuZnVuY3Rpb24gbWVyZ2UocmVnaXN0ZXJlZCwgY3NzJCQxLCBjbGFzc05hbWUpIHtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lKTtcblxuICBpZiAocmVnaXN0ZXJlZFN0eWxlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiByYXdDbGFzc05hbWUgKyBjc3MkJDEocmVnaXN0ZXJlZFN0eWxlcyk7XG59XG5cbnZhciBDbGFzc05hbWVzID0gd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNvbnRleHQpIHtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAodGhlbWUpIHtcbiAgICB2YXIgaGFzUmVuZGVyZWQgPSBmYWxzZTtcblxuICAgIHZhciBjc3MkJDEgPSBmdW5jdGlvbiBjc3MkJDEoKSB7XG4gICAgICBpZiAoaGFzUmVuZGVyZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NzcyBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNvbnRleHQucmVnaXN0ZXJlZCk7XG5cbiAgICAgIHtcbiAgICAgICAgaW5zZXJ0U3R5bGVzKGNvbnRleHQsIHNlcmlhbGl6ZWQsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRleHQua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gICAgfTtcblxuICAgIHZhciBjeCA9IGZ1bmN0aW9uIGN4KCkge1xuICAgICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lcmdlKGNvbnRleHQucmVnaXN0ZXJlZCwgY3NzJCQxLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgICB9O1xuXG4gICAgdmFyIGNvbnRlbnQgPSB7XG4gICAgICBjc3M6IGNzcyQkMSxcbiAgICAgIGN4OiBjeCxcbiAgICAgIHRoZW1lOiB0aGVtZVxuICAgIH07XG4gICAgdmFyIGVsZSA9IHByb3BzLmNoaWxkcmVuKGNvbnRlbnQpO1xuICAgIGhhc1JlbmRlcmVkID0gdHJ1ZTtcblxuICAgIHJldHVybiBlbGU7XG4gIH0pO1xufSk7XG5cbmV4cG9ydCB7IHdpdGhFbW90aW9uQ2FjaGUsIENhY2hlUHJvdmlkZXIsIFRoZW1lQ29udGV4dCwganN4LCBHbG9iYWwsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9O1xuIiwiaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcblxuZnVuY3Rpb24gY3NzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZVN0eWxlcyhhcmdzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3NzO1xuIiwiaW1wb3J0IGhhc2hTdHJpbmcgZnJvbSAnQGVtb3Rpb24vaGFzaCc7XG5pbXBvcnQgdW5pdGxlc3MgZnJvbSAnQGVtb3Rpb24vdW5pdGxlc3MnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSBtZW1vaXplKGZ1bmN0aW9uIChzdHlsZU5hbWUpIHtcbiAgcmV0dXJuIHN0eWxlTmFtZS5yZXBsYWNlKGh5cGhlbmF0ZVJlZ2V4LCAnLSQmJykudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdhbmltYXRpb24nOlxuICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcDEsXG4gICAgICAgICAgICAgIHN0eWxlczogcDIsXG4gICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgaWYgKHVuaXRsZXNzW2tleV0gIT09IDEgJiYga2V5LmNoYXJDb2RlQXQoMSkgIT09IDQ1ICYmIC8vIGN1c3RvbSBwcm9wZXJ0aWVzXG4gIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGNvbnRlbnRWYWx1ZVBhdHRlcm4gPSAvKGF0dHJ8Y2FsY3xjb3VudGVycz98dXJsKVxcKC87XG4gIHZhciBjb250ZW50VmFsdWVzID0gWydub3JtYWwnLCAnbm9uZScsICdjb3VudGVyJywgJ29wZW4tcXVvdGUnLCAnY2xvc2UtcXVvdGUnLCAnbm8tb3Blbi1xdW90ZScsICduby1jbG9zZS1xdW90ZScsICdpbml0aWFsJywgJ2luaGVyaXQnLCAndW5zZXQnXTtcbiAgdmFyIG9sZFByb2Nlc3NTdHlsZVZhbHVlID0gcHJvY2Vzc1N0eWxlVmFsdWU7XG4gIHZhciBtc1BhdHRlcm4gPSAvXi1tcy0vO1xuICB2YXIgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7XG4gIHZhciBoeXBoZW5hdGVkQ2FjaGUgPSB7fTtcblxuICBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ID09PSAnY29udGVudCcpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8IGNvbnRlbnRWYWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xICYmICFjb250ZW50VmFsdWVQYXR0ZXJuLnRlc3QodmFsdWUpICYmICh2YWx1ZS5jaGFyQXQoMCkgIT09IHZhbHVlLmNoYXJBdCh2YWx1ZS5sZW5ndGggLSAxKSB8fCB2YWx1ZS5jaGFyQXQoMCkgIT09ICdcIicgJiYgdmFsdWUuY2hhckF0KDApICE9PSBcIidcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIllvdSBzZWVtIHRvIGJlIHVzaW5nIGEgdmFsdWUgZm9yICdjb250ZW50JyB3aXRob3V0IHF1b3RlcywgdHJ5IHJlcGxhY2luZyBpdCB3aXRoIGBjb250ZW50OiAnXFxcIlwiICsgdmFsdWUgKyBcIlxcXCInYFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvY2Vzc2VkID0gb2xkUHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgdmFyIGlzQ3NzVmFyaWFibGUgPSBrZXkuY2hhckNvZGVBdCgxKSA9PT0gNDU7XG5cbiAgICBpZiAocHJvY2Vzc2VkICE9PSAnJyAmJiAhaXNDc3NWYXJpYWJsZSAmJiBrZXkuaW5kZXhPZignLScpICE9PSAtMSAmJiBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFwiVXNpbmcga2ViYWItY2FzZSBmb3IgY3NzIHByb3BlcnRpZXMgaW4gb2JqZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiBEaWQgeW91IG1lYW4gXCIgKyBrZXkucmVwbGFjZShtc1BhdHRlcm4sICdtcy0nKS5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChzdHIsIGNoYXIpIHtcbiAgICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKTtcbiAgICAgIH0pICsgXCI/XCIpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWQ7XG4gIH07XG59XG5cbnZhciBzaG91bGRXYXJuQWJvdXRJbnRlcnBvbGF0aW5nQ2xhc3NOYW1lRnJvbUNzcyA9IHRydWU7XG5cbmZ1bmN0aW9uIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24sIGNvdWxkQmVTZWxlY3RvckludGVycG9sYXRpb24pIHtcbiAgaWYgKGludGVycG9sYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChpbnRlcnBvbGF0aW9uLl9fZW1vdGlvbl9zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24udG9TdHJpbmcoKSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYmFiZWwtcGx1Z2luLWVtb3Rpb24uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVycG9sYXRpb247XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiBpbnRlcnBvbGF0aW9uKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB7XG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLmFuaW0gPT09IDEpIHtcbiAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICBuYW1lOiBpbnRlcnBvbGF0aW9uLm5hbWUsXG4gICAgICAgICAgICBzdHlsZXM6IGludGVycG9sYXRpb24uc3R5bGVzLFxuICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGlvbi5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVycG9sYXRpb24uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGludGVycG9sYXRpb24ubmV4dDtcblxuICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgdGhpbmcgZXZlciBidXQgdGhpcyBpcyBhIHByZXR0eSByYXJlIGNhc2VcbiAgICAgICAgICAgIC8vIGFuZCB0aGVyZSB3aWxsIGJlIHZlcnkgZmV3IGl0ZXJhdGlvbnMgb2YgdGhpcyBnZW5lcmFsbHlcbiAgICAgICAgICAgIHdoaWxlIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IG5leHQubmFtZSxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IG5leHQuc3R5bGVzLFxuICAgICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHlsZXMgPSBpbnRlcnBvbGF0aW9uLnN0eWxlcztcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24ubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0eWxlcyArPSBpbnRlcnBvbGF0aW9uLm1hcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICBpZiAobWVyZ2VkUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0N1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgY3Vyc29yID0gcHJldmlvdXNDdXJzb3I7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHJlc3VsdCwgY291bGRCZVNlbGVjdG9ySW50ZXJwb2xhdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Z1bmN0aW9ucyB0aGF0IGFyZSBpbnRlcnBvbGF0ZWQgaW4gY3NzIGNhbGxzIHdpbGwgYmUgc3RyaW5naWZpZWQuXFxuJyArICdJZiB5b3Ugd2FudCB0byBoYXZlIGEgY3NzIGNhbGwgYmFzZWQgb24gcHJvcHMsIGNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNzcyBjYWxsIGxpa2UgdGhpc1xcbicgKyAnbGV0IGR5bmFtaWNTdHlsZSA9IChwcm9wcykgPT4gY3NzYGNvbG9yOiAke3Byb3BzLmNvbG9yfWBcXG4nICsgJ0l0IGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgd2l0aCBwcm9wcyBvciBpbnRlcnBvbGF0ZWQgaW4gYSBzdHlsZWQgY2FsbCBsaWtlIHRoaXNcXG4nICsgXCJsZXQgU29tZUNvbXBvbmVudCA9IHN0eWxlZCgnZGl2JylgJHtkeW5hbWljU3R5bGV9YFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBpbnRlcnBvbGF0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNhY2hlZCA9IHJlZ2lzdGVyZWRbaW50ZXJwb2xhdGlvbl07XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY291bGRCZVNlbGVjdG9ySW50ZXJwb2xhdGlvbiAmJiBzaG91bGRXYXJuQWJvdXRJbnRlcnBvbGF0aW5nQ2xhc3NOYW1lRnJvbUNzcyAmJiBjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludGVycG9sYXRpbmcgYSBjbGFzc05hbWUgZnJvbSBjc3NgYCBpcyBub3QgcmVjb21tZW5kZWQgYW5kIHdpbGwgY2F1c2UgcHJvYmxlbXMgd2l0aCBjb21wb3NpdGlvbi5cXG4nICsgJ0ludGVycG9sYXRpbmcgYSBjbGFzc05hbWUgZnJvbSBjc3NgYCB3aWxsIGJlIGNvbXBsZXRlbHkgdW5zdXBwb3J0ZWQgaW4gYSBmdXR1cmUgbWFqb3IgdmVyc2lvbiBvZiBFbW90aW9uJyk7XG4gICAgICAgICAgc2hvdWxkV2FybkFib3V0SW50ZXJwb2xhdGluZ0NsYXNzTmFtZUZyb21Dc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWNoZWQgIT09IHVuZGVmaW5lZCAmJiAhY291bGRCZVNlbGVjdG9ySW50ZXJwb2xhdGlvbiA/IGNhY2hlZCA6IGludGVycG9sYXRpb247XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqKSB7XG4gIHZhciBzdHJpbmcgPSAnJztcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN0cmluZyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmpbaV0sIGZhbHNlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2tleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtfa2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIHJlZ2lzdGVyZWRbdmFsdWVdICsgXCJ9XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKF9rZXksIHZhbHVlKSArIFwiO1wiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoX2tleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYmFiZWwtcGx1Z2luLWVtb3Rpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKF9rZXksIHZhbHVlW19pXSkgKyBcIjtcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHZhbHVlLCBmYWxzZSkgKyBcIn1cIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbnZhciBsYWJlbFBhdHRlcm4gPSAvbGFiZWw6XFxzKihbXlxccztcXG57XSspXFxzKjsvZztcbnZhciBzb3VyY2VNYXBQYXR0ZXJuO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzb3VyY2VNYXBQYXR0ZXJuID0gL1xcL1xcKiNcXHNzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb25cXC9qc29uO1xcUytcXHMrXFwqXFwvLztcbn0gLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbnZhciBzZXJpYWxpemVTdHlsZXMgPSBmdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZXMgKz0gc3RyaW5nc1swXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSwgc3R5bGVzLmNoYXJDb2RlQXQoc3R5bGVzLmxlbmd0aCAtIDEpID09PSA0Nik7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgc3R5bGVzICs9IHN0cmluZ3NbaV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHNvdXJjZU1hcDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHN0eWxlcyA9IHN0eWxlcy5yZXBsYWNlKHNvdXJjZU1hcFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgc291cmNlTWFwID0gbWF0Y2g7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gIH0gLy8gdXNpbmcgYSBnbG9iYWwgcmVnZXggd2l0aCAuZXhlYyBpcyBzdGF0ZWZ1bCBzbyBsYXN0SW5kZXggaGFzIHRvIGJlIHJlc2V0IGVhY2ggdGltZVxuXG5cbiAgbGFiZWxQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBpZGVudGlmaWVyTmFtZSA9ICcnO1xuICB2YXIgbWF0Y2g7IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWI4MDljMmNmMjk0OTgwMGEwZjYxZmI1XG5cbiAgd2hpbGUgKChtYXRjaCA9IGxhYmVsUGF0dGVybi5leGVjKHN0eWxlcykpICE9PSBudWxsKSB7XG4gICAgaWRlbnRpZmllck5hbWUgKz0gJy0nICsgLy8gJEZsb3dGaXhNZSB3ZSBrbm93IGl0J3Mgbm90IG51bGxcbiAgICBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHN0eWxlczogc3R5bGVzLFxuICAgICAgbWFwOiBzb3VyY2VNYXAsXG4gICAgICBuZXh0OiBjdXJzb3JcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufTtcblxuZXhwb3J0IHsgc2VyaWFsaXplU3R5bGVzIH07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gbXVybXVyaGFzaDIgdmlhIGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qcy9ibG9iL21hc3Rlci9tdXJtdXJoYXNoMl9nYy5qc1xuZnVuY3Rpb24gbXVybXVyaGFzaDJfMzJfZ2Moc3RyKSB7XG4gIHZhciBsID0gc3RyLmxlbmd0aCxcbiAgICAgIGggPSBsIF4gbCxcbiAgICAgIGkgPSAwLFxuICAgICAgaztcblxuICB3aGlsZSAobCA+PSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPSAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKCgoayA+Pj4gMTYpICogMHg1YmQxZTk5NSAmIDB4ZmZmZikgPDwgMTYpO1xuICAgIGsgXj0gayA+Pj4gMjQ7XG4gICAgayA9IChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKChrID4+PiAxNikgKiAweDViZDFlOTk1ICYgMHhmZmZmKSA8PCAxNik7XG4gICAgaCA9IChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKChoID4+PiAxNikgKiAweDViZDFlOTk1ICYgMHhmZmZmKSA8PCAxNikgXiBrO1xuICAgIGwgLT0gNDtcbiAgICArK2k7XG4gIH1cblxuICBzd2l0Y2ggKGwpIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPSAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKCgoaCA+Pj4gMTYpICogMHg1YmQxZTk5NSAmIDB4ZmZmZikgPDwgMTYpO1xuICB9XG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9IChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKChoID4+PiAxNikgKiAweDViZDFlOTk1ICYgMHhmZmZmKSA8PCAxNik7XG4gIGggXj0gaCA+Pj4gMTU7XG4gIHJldHVybiAoaCA+Pj4gMCkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtdXJtdXJoYXNoMl8zMl9nYztcbiIsImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0ge307XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemU7XG4iLCJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdW5pdGxlc3NLZXlzO1xuIiwiLypcblxuQmFzZWQgb2ZmIGdsYW1vcidzIFN0eWxlU2hlZXQsIHRoYW5rcyBTdW5pbCDinaTvuI9cblxuaGlnaCBwZXJmb3JtYW5jZSBTdHlsZVNoZWV0IGZvciBjc3MtaW4tanMgc3lzdGVtc1xuXG4tIHVzZXMgbXVsdGlwbGUgc3R5bGUgdGFncyBiZWhpbmQgdGhlIHNjZW5lcyBmb3IgbWlsbGlvbnMgb2YgcnVsZXNcbi0gdXNlcyBgaW5zZXJ0UnVsZWAgZm9yIGFwcGVuZGluZyBpbiBwcm9kdWN0aW9uIGZvciAqbXVjaCogZmFzdGVyIHBlcmZvcm1hbmNlXG5cbi8vIHVzYWdlXG5cbmltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCdcblxubGV0IHN0eWxlU2hlZXQgPSBuZXcgU3R5bGVTaGVldCh7IGtleTogJycsIGNvbnRhaW5lcjogZG9jdW1lbnQuaGVhZCB9KVxuXG5zdHlsZVNoZWV0Lmluc2VydCgnI2JveCB7IGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgfScpXG4tIGFwcGVuZHMgYSBjc3MgcnVsZSBpbnRvIHRoZSBzdHlsZXNoZWV0XG5cbnN0eWxlU2hlZXQuZmx1c2goKVxuLSBlbXB0aWVzIHRoZSBzdHlsZXNoZWV0IG9mIGFsbCBpdHMgY29udGVudHNcblxuKi9cbi8vICRGbG93Rml4TWVcbmZ1bmN0aW9uIHNoZWV0Rm9yVGFnKHRhZykge1xuICBpZiAodGFnLnNoZWV0KSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciB0YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBvcHRpb25zLmtleSk7XG5cbiAgaWYgKG9wdGlvbnMubm9uY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgb3B0aW9ucy5ub25jZSk7XG4gIH1cblxuICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdHlsZVNoZWV0KG9wdGlvbnMpIHtcbiAgICB0aGlzLmlzU3BlZWR5ID0gb3B0aW9ucy5zcGVlZHkgPT09IHVuZGVmaW5lZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgOiBvcHRpb25zLnNwZWVkeTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gICAgdGhpcy5ub25jZSA9IG9wdGlvbnMubm9uY2U7IC8vIGtleSBpcyB0aGUgdmFsdWUgb2YgdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUsIGl0J3MgdXNlZCB0byBpZGVudGlmeSBkaWZmZXJlbnQgc2hlZXRzXG5cbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHZhciBfdGFnID0gY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpO1xuXG4gICAgICB2YXIgYmVmb3JlO1xuXG4gICAgICBpZiAodGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBiZWZvcmUgPSB0aGlzLmJlZm9yZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlZm9yZSA9IHRoaXMudGFnc1t0aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29udGFpbmVyLmluc2VydEJlZm9yZShfdGFnLCBiZWZvcmUpO1xuICAgICAgdGhpcy50YWdzLnB1c2goX3RhZyk7XG4gICAgfVxuXG4gICAgdmFyIHRhZyA9IHRoaXMudGFnc1t0aGlzLnRhZ3MubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAodGhpcy5pc1NwZWVkeSkge1xuICAgICAgdmFyIHNoZWV0ID0gc2hlZXRGb3JUYWcodGFnKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gdGhpcyBpcyBhIHJlYWxseSBob3QgcGF0aFxuICAgICAgICAvLyB3ZSBjaGVjayB0aGUgc2Vjb25kIGNoYXJhY3RlciBmaXJzdCBiZWNhdXNlIGhhdmluZyBcImlcIlxuICAgICAgICAvLyBhcyB0aGUgc2Vjb25kIGNoYXJhY3RlciB3aWxsIGhhcHBlbiBsZXNzIG9mdGVuIHRoYW5cbiAgICAgICAgLy8gaGF2aW5nIFwiQFwiIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXJcbiAgICAgICAgdmFyIGlzSW1wb3J0UnVsZSA9IHJ1bGUuY2hhckNvZGVBdCgxKSA9PT0gMTA1ICYmIHJ1bGUuY2hhckNvZGVBdCgwKSA9PT0gNjQ7IC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcblxuICAgICAgICBzaGVldC5pbnNlcnRSdWxlKHJ1bGUsIC8vIHdlIG5lZWQgdG8gaW5zZXJ0IEBpbXBvcnQgcnVsZXMgYmVmb3JlIGFueXRoaW5nIGVsc2VcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYW4gZXJyb3JcbiAgICAgICAgLy8gdGVjaG5pY2FsbHkgdGhpcyBtZWFucyB0aGF0IHRoZSBAaW1wb3J0IHJ1bGVzIHdpbGxcbiAgICAgICAgLy8gX3VzdWFsbHlfKG5vdCBhbHdheXMgc2luY2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgc3R5bGUgdGFncylcbiAgICAgICAgLy8gYmUgdGhlIGZpcnN0IG9uZXMgaW4gcHJvZCBhbmQgZ2VuZXJhbGx5IGxhdGVyIGluIGRldlxuICAgICAgICAvLyB0aGlzIHNob3VsZG4ndCByZWFsbHkgbWF0dGVyIGluIHRoZSByZWFsIHdvcmxkIHRob3VnaFxuICAgICAgICAvLyBAaW1wb3J0IGlzIGdlbmVyYWxseSBvbmx5IHVzZWQgZm9yIGZvbnQgZmFjZXMgZnJvbSBnb29nbGUgZm9udHMgYW5kIGV0Yy5cbiAgICAgICAgLy8gc28gd2hpbGUgdGhpcyBjb3VsZCBiZSB0ZWNobmljYWxseSBjb3JyZWN0IHRoZW4gaXQgd291bGQgYmUgc2xvd2VyIGFuZCBsYXJnZXJcbiAgICAgICAgLy8gZm9yIGEgdGlueSBiaXQgb2YgY29ycmVjdG5lc3MgdGhhdCB3b24ndCBtYXR0ZXIgaW4gdGhlIHJlYWwgd29ybGRcbiAgICAgICAgaXNJbXBvcnRSdWxlID8gMCA6IHNoZWV0LmNzc1J1bGVzLmxlbmd0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiVGhlcmUgd2FzIGEgcHJvYmxlbSBpbnNlcnRpbmcgdGhlIGZvbGxvd2luZyBydWxlOiBcXFwiXCIgKyBydWxlICsgXCJcXFwiXCIsIGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShydWxlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5jdHIrKztcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdGhpcy50YWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZykge1xuICAgICAgcmV0dXJuIHRhZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRhZyk7XG4gICAgfSk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZVNoZWV0O1xufSgpO1xuXG5leHBvcnQgeyBTdHlsZVNoZWV0IH07XG4iLCJ2YXIgaXNCcm93c2VyID0gXCJvYmplY3RcIiAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZXMpIHtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgaWYgKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWdpc3RlcmVkU3R5bGVzLnB1c2gocmVnaXN0ZXJlZFtjbGFzc05hbWVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKCAvLyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgaWYgdGhlXG4gIC8vIGNsYXNzIG5hbWUgY291bGQgYmUgdXNlZCBmdXJ0aGVyIGRvd25cbiAgLy8gdGhlIHRyZWUgYnV0IGlmIGl0J3MgYSBzdHJpbmcgdGFnLCB3ZSBrbm93IGl0IHdvbid0XG4gIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIGl0IHRvIHJlZ2lzdGVyZWQgY2FjaGUuXG4gIC8vIHRoaXMgaW1wcm92ZXMgbWVtb3J5IHVzYWdlIHNpbmNlIHdlIGNhbiBhdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBzdHlsZSBzdHJpbmdcbiAgKGlzU3RyaW5nVGFnID09PSBmYWxzZSB8fCAvLyB3ZSBuZWVkIHRvIGFsd2F5cyBzdG9yZSBpdCBpZiB3ZSdyZSBpbiBjb21wYXQgbW9kZSBhbmRcbiAgLy8gaW4gbm9kZSBzaW5jZSBlbW90aW9uLXNlcnZlciByZWxpZXMgb24gd2hldGhlciBhIHN0eWxlIGlzIGluXG4gIC8vIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIGtub3cgd2hldGhlciBhIHN0eWxlIGlzIGdsb2JhbCBvciBub3RcbiAgLy8gYWxzbywgbm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZCBpbiB0aGUgYnJvd3NlclxuICBpc0Jyb3dzZXIgPT09IGZhbHNlICYmIGNhY2hlLmNvbXBhdCAhPT0gdW5kZWZpbmVkKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIHZhciBtYXliZVN0eWxlcyA9IGNhY2hlLmluc2VydChcIi5cIiArIGNsYXNzTmFtZSwgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcyB9O1xuIiwidmFyIHdlYWtNZW1vaXplID0gZnVuY3Rpb24gd2Vha01lbW9pemUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lIGZsb3cgZG9lc24ndCBpbmNsdWRlIGFsbCBub24tcHJpbWl0aXZlIHR5cGVzIGFzIGFsbG93ZWQgZm9yIHdlYWttYXBzXG4gIHZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlLmhhcyhhcmcpKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGFyZyk7XG4gICAgfVxuXG4gICAgdmFyIHJldCA9IGZ1bmMoYXJnKTtcbiAgICBjYWNoZS5zZXQoYXJnLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3ZWFrTWVtb2l6ZTtcbiIsImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJztcblxuLy8gICAgICBcbnZhciB0b1BhdGggPSBmdW5jdGlvbiB0b1BhdGgoa2V5KSB7XG4gIGlmIChrZXkgPT09IG51bGwgfHwga2V5ID09PSB1bmRlZmluZWQgfHwgIWtleS5sZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvUGF0aCgpIGV4cGVjdHMgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIHJldHVybiBrZXkuc3BsaXQoL1suW1xcXV0rLykuZmlsdGVyKEJvb2xlYW4pO1xufTtcblxuLy8gICAgICBcblxudmFyIGdldEluID0gZnVuY3Rpb24gZ2V0SW4oc3RhdGUsIGNvbXBsZXhLZXkpIHtcbiAgLy8gSW50ZW50aW9uYWxseSB1c2luZyBpdGVyYXRpb24gcmF0aGVyIHRoYW4gcmVjdXJzaW9uXG4gIHZhciBwYXRoID0gdG9QYXRoKGNvbXBsZXhLZXkpO1xuICB2YXIgY3VycmVudCA9IHN0YXRlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuXG4gICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fCBjdXJyZW50ID09PSBudWxsIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGN1cnJlbnQpICYmIGlzTmFOKGtleSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50O1xufTtcblxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7IHZhciBrZXkgPSBfdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTsgcmV0dXJuIHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTsgfVxuXG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHsgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0OyB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmIChwcmltICE9PSB1bmRlZmluZWQpIHsgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7IGlmICh0eXBlb2YgcmVzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7IH1cblxudmFyIHNldEluUmVjdXJzb3IgPSBmdW5jdGlvbiBzZXRJblJlY3Vyc29yKGN1cnJlbnQsIGluZGV4LCBwYXRoLCB2YWx1ZSwgZGVzdHJveUFycmF5cykge1xuICBpZiAoaW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcbiAgICAvLyBlbmQgb2YgcmVjdXJzaW9uXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIGtleSA9IHBhdGhbaW5kZXhdOyAvLyBkZXRlcm1pbmUgdHlwZSBvZiBrZXlcblxuICBpZiAoaXNOYU4oa2V5KSkge1xuICAgIHZhciBfZXh0ZW5kczI7XG5cbiAgICAvLyBvYmplY3Qgc2V0XG4gICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fCBjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICB2YXIgX3JlZjtcblxuICAgICAgLy8gcmVjdXJzZVxuICAgICAgdmFyIF9yZXN1bHQyID0gc2V0SW5SZWN1cnNvcih1bmRlZmluZWQsIGluZGV4ICsgMSwgcGF0aCwgdmFsdWUsIGRlc3Ryb3lBcnJheXMpOyAvLyBkZWxldGUgb3IgY3JlYXRlIGFuIG9iamVjdFxuXG5cbiAgICAgIHJldHVybiBfcmVzdWx0MiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogKF9yZWYgPSB7fSwgX3JlZltrZXldID0gX3Jlc3VsdDIsIF9yZWYpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgYSBub24tbnVtZXJpYyBwcm9wZXJ0eSBvbiBhbiBhcnJheScpO1xuICAgIH0gLy8gY3VycmVudCBleGlzdHMsIHNvIG1ha2UgYSBjb3B5IG9mIGFsbCBpdHMgdmFsdWVzLCBhbmQgYWRkL3VwZGF0ZSB0aGUgbmV3IG9uZVxuXG5cbiAgICB2YXIgX3Jlc3VsdCA9IHNldEluUmVjdXJzb3IoY3VycmVudFtrZXldLCBpbmRleCArIDEsIHBhdGgsIHZhbHVlLCBkZXN0cm95QXJyYXlzKTtcblxuICAgIGlmIChfcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBudW1LZXlzID0gT2JqZWN0LmtleXMoY3VycmVudCkubGVuZ3RoO1xuXG4gICAgICBpZiAoY3VycmVudFtrZXldID09PSB1bmRlZmluZWQgJiYgbnVtS2V5cyA9PT0gMCkge1xuICAgICAgICAvLyBvYmplY3Qgd2FzIGFscmVhZHkgZW1wdHlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnRba2V5XSAhPT0gdW5kZWZpbmVkICYmIG51bUtleXMgPD0gMSkge1xuICAgICAgICAvLyBvbmx5IGtleSB3ZSBoYWQgd2FzIHRoZSBvbmUgd2UgYXJlIGRlbGV0aW5nXG4gICAgICAgIGlmICghaXNOYU4ocGF0aFtpbmRleCAtIDFdKSAmJiAhZGVzdHJveUFycmF5cykge1xuICAgICAgICAgIC8vIHdlIGFyZSBpbiBhbiBhcnJheSwgc28gcmV0dXJuIGFuIGVtcHR5IG9iamVjdFxuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBfcmVtb3ZlZCA9IGN1cnJlbnRba2V5XSxcbiAgICAgICAgICBfZmluYWwgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShjdXJyZW50LCBba2V5XS5tYXAoX3RvUHJvcGVydHlLZXkpKTtcblxuICAgICAgcmV0dXJuIF9maW5hbDtcbiAgICB9IC8vIHNldCByZXN1bHQgaW4ga2V5XG5cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgY3VycmVudCwgKF9leHRlbmRzMiA9IHt9LCBfZXh0ZW5kczJba2V5XSA9IF9yZXN1bHQsIF9leHRlbmRzMikpO1xuICB9IC8vIGFycmF5IHNldFxuXG5cbiAgdmFyIG51bWVyaWNLZXkgPSBOdW1iZXIoa2V5KTtcblxuICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyByZWN1cnNlXG4gICAgdmFyIF9yZXN1bHQzID0gc2V0SW5SZWN1cnNvcih1bmRlZmluZWQsIGluZGV4ICsgMSwgcGF0aCwgdmFsdWUsIGRlc3Ryb3lBcnJheXMpOyAvLyBpZiBub3RoaW5nIHJldHVybmVkLCBkZWxldGUgaXRcblxuXG4gICAgaWYgKF9yZXN1bHQzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSAvLyBjcmVhdGUgYW4gYXJyYXlcblxuXG4gICAgdmFyIF9hcnJheSA9IFtdO1xuICAgIF9hcnJheVtudW1lcmljS2V5XSA9IF9yZXN1bHQzO1xuICAgIHJldHVybiBfYXJyYXk7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgYSBudW1lcmljIHByb3BlcnR5IG9uIGFuIG9iamVjdCcpO1xuICB9IC8vIHJlY3Vyc2VcblxuXG4gIHZhciBleGlzdGluZ1ZhbHVlID0gY3VycmVudFtudW1lcmljS2V5XTtcbiAgdmFyIHJlc3VsdCA9IHNldEluUmVjdXJzb3IoZXhpc3RpbmdWYWx1ZSwgaW5kZXggKyAxLCBwYXRoLCB2YWx1ZSwgZGVzdHJveUFycmF5cyk7IC8vIGN1cnJlbnQgZXhpc3RzLCBzbyBtYWtlIGEgY29weSBvZiBhbGwgaXRzIHZhbHVlcywgYW5kIGFkZC91cGRhdGUgdGhlIG5ldyBvbmVcblxuICB2YXIgYXJyYXkgPSBbXS5jb25jYXQoY3VycmVudCk7XG5cbiAgaWYgKGRlc3Ryb3lBcnJheXMgJiYgcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheS5zcGxpY2UobnVtZXJpY0tleSwgMSk7XG5cbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhcnJheVtudW1lcmljS2V5XSA9IHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn07XG5cbnZhciBzZXRJbiA9IGZ1bmN0aW9uIHNldEluKHN0YXRlLCBrZXksIHZhbHVlLCBkZXN0cm95QXJyYXlzKSB7XG4gIGlmIChkZXN0cm95QXJyYXlzID09PSB2b2lkIDApIHtcbiAgICBkZXN0cm95QXJyYXlzID0gZmFsc2U7XG4gIH1cblxuICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCB8fCBzdGF0ZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjYWxsIHNldEluKCkgd2l0aCBcIiArIFN0cmluZyhzdGF0ZSkgKyBcIiBzdGF0ZVwiKTtcbiAgfVxuXG4gIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY2FsbCBzZXRJbigpIHdpdGggXCIgKyBTdHJpbmcoa2V5KSArIFwiIGtleVwiKTtcbiAgfSAvLyBSZWN1cnNpdmUgZnVuY3Rpb24gbmVlZHMgdG8gYWNjZXB0IGFuZCByZXR1cm4gU3RhdGUsIGJ1dCBwdWJsaWMgQVBJIHNob3VsZFxuICAvLyBvbmx5IGRlYWwgd2l0aCBPYmplY3RzXG5cblxuICByZXR1cm4gc2V0SW5SZWN1cnNvcihzdGF0ZSwgMCwgdG9QYXRoKGtleSksIHZhbHVlLCBkZXN0cm95QXJyYXlzKTtcbn07XG5cbnZhciBGT1JNX0VSUk9SID0gJ0ZJTkFMX0ZPUk0vZm9ybS1lcnJvcic7XG52YXIgQVJSQVlfRVJST1IgPSAnRklOQUxfRk9STS9hcnJheS1lcnJvcic7XG5cbi8vICAgICAgXG4vKipcbiAqIENvbnZlcnRzIGludGVybmFsIGZpZWxkIHN0YXRlIHRvIHB1Ymxpc2hlZCBmaWVsZCBzdGF0ZVxuICovXG5cbnZhciBwdWJsaXNoRmllbGRTdGF0ZSA9IGZ1bmN0aW9uIHB1Ymxpc2hGaWVsZFN0YXRlKGZvcm1TdGF0ZSwgZmllbGQpIHtcbiAgdmFyIGVycm9ycyA9IGZvcm1TdGF0ZS5lcnJvcnMsXG4gICAgICBpbml0aWFsVmFsdWVzID0gZm9ybVN0YXRlLmluaXRpYWxWYWx1ZXMsXG4gICAgICBsYXN0U3VibWl0dGVkVmFsdWVzID0gZm9ybVN0YXRlLmxhc3RTdWJtaXR0ZWRWYWx1ZXMsXG4gICAgICBzdWJtaXRFcnJvcnMgPSBmb3JtU3RhdGUuc3VibWl0RXJyb3JzLFxuICAgICAgc3VibWl0RmFpbGVkID0gZm9ybVN0YXRlLnN1Ym1pdEZhaWxlZCxcbiAgICAgIHN1Ym1pdFN1Y2NlZWRlZCA9IGZvcm1TdGF0ZS5zdWJtaXRTdWNjZWVkZWQsXG4gICAgICBzdWJtaXR0aW5nID0gZm9ybVN0YXRlLnN1Ym1pdHRpbmcsXG4gICAgICB2YWx1ZXMgPSBmb3JtU3RhdGUudmFsdWVzO1xuICB2YXIgYWN0aXZlID0gZmllbGQuYWN0aXZlLFxuICAgICAgYmx1ciA9IGZpZWxkLmJsdXIsXG4gICAgICBjaGFuZ2UgPSBmaWVsZC5jaGFuZ2UsXG4gICAgICBkYXRhID0gZmllbGQuZGF0YSxcbiAgICAgIGZvY3VzID0gZmllbGQuZm9jdXMsXG4gICAgICBtb2RpZmllZCA9IGZpZWxkLm1vZGlmaWVkLFxuICAgICAgbmFtZSA9IGZpZWxkLm5hbWUsXG4gICAgICB0b3VjaGVkID0gZmllbGQudG91Y2hlZCxcbiAgICAgIHZpc2l0ZWQgPSBmaWVsZC52aXNpdGVkO1xuICB2YXIgdmFsdWUgPSBnZXRJbih2YWx1ZXMsIG5hbWUpO1xuICB2YXIgZXJyb3IgPSBnZXRJbihlcnJvcnMsIG5hbWUpO1xuXG4gIGlmIChlcnJvciAmJiBlcnJvcltBUlJBWV9FUlJPUl0pIHtcbiAgICBlcnJvciA9IGVycm9yW0FSUkFZX0VSUk9SXTtcbiAgfVxuXG4gIHZhciBzdWJtaXRFcnJvciA9IHN1Ym1pdEVycm9ycyAmJiBnZXRJbihzdWJtaXRFcnJvcnMsIG5hbWUpO1xuICB2YXIgaW5pdGlhbCA9IGluaXRpYWxWYWx1ZXMgJiYgZ2V0SW4oaW5pdGlhbFZhbHVlcywgbmFtZSk7XG4gIHZhciBwcmlzdGluZSA9IGZpZWxkLmlzRXF1YWwoaW5pdGlhbCwgdmFsdWUpO1xuICB2YXIgZGlydHlTaW5jZUxhc3RTdWJtaXQgPSAhIShsYXN0U3VibWl0dGVkVmFsdWVzICYmICFmaWVsZC5pc0VxdWFsKGdldEluKGxhc3RTdWJtaXR0ZWRWYWx1ZXMsIG5hbWUpLCB2YWx1ZSkpO1xuICB2YXIgdmFsaWQgPSAhZXJyb3IgJiYgIXN1Ym1pdEVycm9yO1xuICByZXR1cm4ge1xuICAgIGFjdGl2ZTogYWN0aXZlLFxuICAgIGJsdXI6IGJsdXIsXG4gICAgY2hhbmdlOiBjaGFuZ2UsXG4gICAgZGF0YTogZGF0YSxcbiAgICBkaXJ0eTogIXByaXN0aW5lLFxuICAgIGRpcnR5U2luY2VMYXN0U3VibWl0OiBkaXJ0eVNpbmNlTGFzdFN1Ym1pdCxcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgZm9jdXM6IGZvY3VzLFxuICAgIGluaXRpYWw6IGluaXRpYWwsXG4gICAgaW52YWxpZDogIXZhbGlkLFxuICAgIGxlbmd0aDogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5sZW5ndGggOiB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IG1vZGlmaWVkLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcHJpc3RpbmU6IHByaXN0aW5lLFxuICAgIHN1Ym1pdEVycm9yOiBzdWJtaXRFcnJvcixcbiAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcbiAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcbiAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxuICAgIHRvdWNoZWQ6IHRvdWNoZWQsXG4gICAgdmFsaWQ6IHZhbGlkLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB2aXNpdGVkOiB2aXNpdGVkXG4gIH07XG59O1xuXG4vLyAgICAgIFxudmFyIGZpZWxkU3Vic2NyaXB0aW9uSXRlbXMgPSBbJ2FjdGl2ZScsICdkYXRhJywgJ2RpcnR5JywgJ2RpcnR5U2luY2VMYXN0U3VibWl0JywgJ2Vycm9yJywgJ2luaXRpYWwnLCAnaW52YWxpZCcsICdsZW5ndGgnLCAnbW9kaWZpZWQnLCAncHJpc3RpbmUnLCAnc3VibWl0RXJyb3InLCAnc3VibWl0RmFpbGVkJywgJ3N1Ym1pdFN1Y2NlZWRlZCcsICdzdWJtaXR0aW5nJywgJ3RvdWNoZWQnLCAndmFsaWQnLCAndmFsdWUnLCAndmlzaXRlZCddO1xuXG4vLyAgICAgIFxudmFyIHNoYWxsb3dFcXVhbCA9IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnIHx8ICFhIHx8IHR5cGVvZiBiICE9PSAnb2JqZWN0JyB8fCAhYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgYkhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5iaW5kKGIpO1xuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGtleXNBLmxlbmd0aDsgaWR4KyspIHtcbiAgICB2YXIga2V5ID0ga2V5c0FbaWR4XTtcblxuICAgIGlmICghYkhhc093blByb3BlcnR5KGtleSkgfHwgYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vICAgICAgXG5mdW5jdGlvbiBzdWJzY3JpcHRpb25GaWx0ZXIgKGRlc3QsIHNyYywgcHJldmlvdXMsIHN1YnNjcmlwdGlvbiwga2V5cywgc2hhbGxvd0VxdWFsS2V5cykge1xuICB2YXIgZGlmZmVyZW50ID0gZmFsc2U7XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHN1YnNjcmlwdGlvbltrZXldKSB7XG4gICAgICBkZXN0W2tleV0gPSBzcmNba2V5XTtcblxuICAgICAgaWYgKCFwcmV2aW91cyB8fCAofnNoYWxsb3dFcXVhbEtleXMuaW5kZXhPZihrZXkpID8gIXNoYWxsb3dFcXVhbChzcmNba2V5XSwgcHJldmlvdXNba2V5XSkgOiBzcmNba2V5XSAhPT0gcHJldmlvdXNba2V5XSkpIHtcbiAgICAgICAgZGlmZmVyZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGlmZmVyZW50O1xufVxuXG4vLyAgICAgIFxudmFyIHNoYWxsb3dFcXVhbEtleXMgPSBbJ2RhdGEnXTtcbi8qKlxuICogRmlsdGVycyBpdGVtcyBpbiBhIEZpZWxkU3RhdGUgYmFzZWQgb24gYSBGaWVsZFN1YnNjcmlwdGlvblxuICovXG5cbnZhciBmaWx0ZXJGaWVsZFN0YXRlID0gZnVuY3Rpb24gZmlsdGVyRmllbGRTdGF0ZShzdGF0ZSwgcHJldmlvdXNTdGF0ZSwgc3Vic2NyaXB0aW9uLCBmb3JjZSkge1xuICB2YXIgcmVzdWx0ID0ge1xuICAgIGJsdXI6IHN0YXRlLmJsdXIsXG4gICAgY2hhbmdlOiBzdGF0ZS5jaGFuZ2UsXG4gICAgZm9jdXM6IHN0YXRlLmZvY3VzLFxuICAgIG5hbWU6IHN0YXRlLm5hbWVcbiAgfTtcbiAgdmFyIGRpZmZlcmVudCA9IHN1YnNjcmlwdGlvbkZpbHRlcihyZXN1bHQsIHN0YXRlLCBwcmV2aW91c1N0YXRlLCBzdWJzY3JpcHRpb24sIGZpZWxkU3Vic2NyaXB0aW9uSXRlbXMsIHNoYWxsb3dFcXVhbEtleXMpIHx8ICFwcmV2aW91c1N0YXRlO1xuICByZXR1cm4gZGlmZmVyZW50IHx8IGZvcmNlID8gcmVzdWx0IDogdW5kZWZpbmVkO1xufTtcblxuLy8gICAgICBcbnZhciBmb3JtU3Vic2NyaXB0aW9uSXRlbXMgPSBbJ2FjdGl2ZScsICdkaXJ0eScsICdkaXJ0eUZpZWxkcycsICdkaXJ0eVNpbmNlTGFzdFN1Ym1pdCcsICdlcnJvcicsICdlcnJvcnMnLCAnaGFzU3VibWl0RXJyb3JzJywgJ2hhc1ZhbGlkYXRpb25FcnJvcnMnLCAnaW5pdGlhbFZhbHVlcycsICdpbnZhbGlkJywgJ21vZGlmaWVkJywgJ3ByaXN0aW5lJywgJ3N1Ym1pdHRpbmcnLCAnc3VibWl0RXJyb3InLCAnc3VibWl0RXJyb3JzJywgJ3N1Ym1pdEZhaWxlZCcsICdzdWJtaXRTdWNjZWVkZWQnLCAndG91Y2hlZCcsICd2YWxpZCcsICd2YWxpZGF0aW5nJywgJ3ZhbHVlcycsICd2aXNpdGVkJ107XG5cbi8vICAgICAgXG52YXIgc2hhbGxvd0VxdWFsS2V5cyQxID0gWyd0b3VjaGVkJywgJ3Zpc2l0ZWQnXTtcbi8qKlxuICogRmlsdGVycyBpdGVtcyBpbiBhIEZvcm1TdGF0ZSBiYXNlZCBvbiBhIEZvcm1TdWJzY3JpcHRpb25cbiAqL1xuXG52YXIgZmlsdGVyRm9ybVN0YXRlID0gZnVuY3Rpb24gZmlsdGVyRm9ybVN0YXRlKHN0YXRlLCBwcmV2aW91c1N0YXRlLCBzdWJzY3JpcHRpb24sIGZvcmNlKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIGRpZmZlcmVudCA9IHN1YnNjcmlwdGlvbkZpbHRlcihyZXN1bHQsIHN0YXRlLCBwcmV2aW91c1N0YXRlLCBzdWJzY3JpcHRpb24sIGZvcm1TdWJzY3JpcHRpb25JdGVtcywgc2hhbGxvd0VxdWFsS2V5cyQxKSB8fCAhcHJldmlvdXNTdGF0ZTtcbiAgcmV0dXJuIGRpZmZlcmVudCB8fCBmb3JjZSA/IHJlc3VsdCA6IHVuZGVmaW5lZDtcbn07XG5cbi8vICAgICAgXG5cbnZhciBtZW1vaXplID0gZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgbGFzdEFyZ3M7XG4gIHZhciBsYXN0UmVzdWx0O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAoIWxhc3RBcmdzIHx8IGFyZ3MubGVuZ3RoICE9PSBsYXN0QXJncy5sZW5ndGggfHwgYXJncy5zb21lKGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChsYXN0QXJnc1tpbmRleF0sIGFyZyk7XG4gICAgfSkpIHtcbiAgICAgIGxhc3RBcmdzID0gYXJncztcbiAgICAgIGxhc3RSZXN1bHQgPSBmbi5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICB9O1xufTtcblxudmFyIGlzUHJvbWlzZSA9IChmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiAhIW9iaiAmJiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykgJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nO1xufSk7XG5cbnZhciBjb25maWdPcHRpb25zID0gWydkZWJ1ZycsICdpbml0aWFsVmFsdWVzJywgJ2tlZXBEaXJ0eU9uUmVpbml0aWFsaXplJywgJ211dGF0b3JzJywgJ29uU3VibWl0JywgJ3ZhbGlkYXRlJywgJ3ZhbGlkYXRlT25CbHVyJ107XG52YXIgdmVyc2lvbiA9ICc0LjEzLjAnO1xuXG52YXIgdHJpcGxlRXF1YWxzID0gZnVuY3Rpb24gdHJpcGxlRXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGI7XG59O1xuXG52YXIgaGFzQW55RXJyb3IgPSBmdW5jdGlvbiBoYXNBbnlFcnJvcihlcnJvcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycykuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbHVlID0gZXJyb3JzW2tleV07XG5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGhhc0FueUVycm9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcbiAgfSk7XG59O1xuXG52YXIgY29udmVydFRvRXh0ZXJuYWxGb3JtU3RhdGUgPSBmdW5jdGlvbiBjb252ZXJ0VG9FeHRlcm5hbEZvcm1TdGF0ZShfcmVmKSB7XG4gIHZhciBhY3RpdmUgPSBfcmVmLmFjdGl2ZSxcbiAgICAgIGRpcnR5U2luY2VMYXN0U3VibWl0ID0gX3JlZi5kaXJ0eVNpbmNlTGFzdFN1Ym1pdCxcbiAgICAgIGVycm9yID0gX3JlZi5lcnJvcixcbiAgICAgIGVycm9ycyA9IF9yZWYuZXJyb3JzLFxuICAgICAgaW5pdGlhbFZhbHVlcyA9IF9yZWYuaW5pdGlhbFZhbHVlcyxcbiAgICAgIHByaXN0aW5lID0gX3JlZi5wcmlzdGluZSxcbiAgICAgIHN1Ym1pdHRpbmcgPSBfcmVmLnN1Ym1pdHRpbmcsXG4gICAgICBzdWJtaXRGYWlsZWQgPSBfcmVmLnN1Ym1pdEZhaWxlZCxcbiAgICAgIHN1Ym1pdFN1Y2NlZWRlZCA9IF9yZWYuc3VibWl0U3VjY2VlZGVkLFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxuICAgICAgc3VibWl0RXJyb3JzID0gX3JlZi5zdWJtaXRFcnJvcnMsXG4gICAgICB2YWxpZCA9IF9yZWYudmFsaWQsXG4gICAgICB2YWxpZGF0aW5nID0gX3JlZi52YWxpZGF0aW5nLFxuICAgICAgdmFsdWVzID0gX3JlZi52YWx1ZXM7XG4gIHJldHVybiB7XG4gICAgYWN0aXZlOiBhY3RpdmUsXG4gICAgZGlydHk6ICFwcmlzdGluZSxcbiAgICBkaXJ0eVNpbmNlTGFzdFN1Ym1pdDogZGlydHlTaW5jZUxhc3RTdWJtaXQsXG4gICAgZXJyb3I6IGVycm9yLFxuICAgIGVycm9yczogZXJyb3JzLFxuICAgIGhhc1N1Ym1pdEVycm9yczogISEoc3VibWl0RXJyb3IgfHwgc3VibWl0RXJyb3JzICYmIGhhc0FueUVycm9yKHN1Ym1pdEVycm9ycykpLFxuICAgIGhhc1ZhbGlkYXRpb25FcnJvcnM6ICEhKGVycm9yIHx8IGhhc0FueUVycm9yKGVycm9ycykpLFxuICAgIGludmFsaWQ6ICF2YWxpZCxcbiAgICBpbml0aWFsVmFsdWVzOiBpbml0aWFsVmFsdWVzLFxuICAgIHByaXN0aW5lOiBwcmlzdGluZSxcbiAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxuICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxuICAgIHN1Ym1pdFN1Y2NlZWRlZDogc3VibWl0U3VjY2VlZGVkLFxuICAgIHN1Ym1pdEVycm9yOiBzdWJtaXRFcnJvcixcbiAgICBzdWJtaXRFcnJvcnM6IHN1Ym1pdEVycm9ycyxcbiAgICB2YWxpZDogdmFsaWQsXG4gICAgdmFsaWRhdGluZzogdmFsaWRhdGluZyA+IDAsXG4gICAgdmFsdWVzOiB2YWx1ZXNcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIG5vdGlmeVN1YnNjcmliZXIoc3Vic2NyaWJlciwgc3Vic2NyaXB0aW9uLCBzdGF0ZSwgbGFzdFN0YXRlLCBmaWx0ZXIsIGZvcmNlKSB7XG4gIGlmIChmb3JjZSA9PT0gdm9pZCAwKSB7XG4gICAgZm9yY2UgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBub3RpZmljYXRpb24gPSBmaWx0ZXIoc3RhdGUsIGxhc3RTdGF0ZSwgc3Vic2NyaXB0aW9uLCBmb3JjZSk7XG5cbiAgaWYgKG5vdGlmaWNhdGlvbikge1xuICAgIHN1YnNjcmliZXIobm90aWZpY2F0aW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3RpZnkoX3JlZjIsIHN0YXRlLCBsYXN0U3RhdGUsIGZpbHRlcikge1xuICB2YXIgZW50cmllcyA9IF9yZWYyLmVudHJpZXM7XG4gIE9iamVjdC5rZXlzKGVudHJpZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbTnVtYmVyKGtleSldOyAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gZW50cnkuc3Vic2NyaXB0aW9uLFxuICAgICAgICAgIHN1YnNjcmliZXIgPSBlbnRyeS5zdWJzY3JpYmVyO1xuICAgICAgbm90aWZ5U3Vic2NyaWJlcihzdWJzY3JpYmVyLCBzdWJzY3JpcHRpb24sIHN0YXRlLCBsYXN0U3RhdGUsIGZpbHRlcik7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIGNyZWF0ZUZvcm0gPSBmdW5jdGlvbiBjcmVhdGVGb3JtKGNvbmZpZykge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gY29uZmlnIHNwZWNpZmllZCcpO1xuICB9XG5cbiAgdmFyIGRlYnVnID0gY29uZmlnLmRlYnVnLFxuICAgICAgZGVzdHJveU9uVW5yZWdpc3RlciA9IGNvbmZpZy5kZXN0cm95T25VbnJlZ2lzdGVyLFxuICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBjb25maWcua2VlcERpcnR5T25SZWluaXRpYWxpemUsXG4gICAgICBpbml0aWFsVmFsdWVzID0gY29uZmlnLmluaXRpYWxWYWx1ZXMsXG4gICAgICBtdXRhdG9ycyA9IGNvbmZpZy5tdXRhdG9ycyxcbiAgICAgIG9uU3VibWl0ID0gY29uZmlnLm9uU3VibWl0LFxuICAgICAgdmFsaWRhdGUgPSBjb25maWcudmFsaWRhdGUsXG4gICAgICB2YWxpZGF0ZU9uQmx1ciA9IGNvbmZpZy52YWxpZGF0ZU9uQmx1cjtcblxuICBpZiAoIW9uU3VibWl0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBvblN1Ym1pdCBmdW5jdGlvbiBzcGVjaWZpZWQnKTtcbiAgfVxuXG4gIHZhciBzdGF0ZSA9IHtcbiAgICBzdWJzY3JpYmVyczoge1xuICAgICAgaW5kZXg6IDAsXG4gICAgICBlbnRyaWVzOiB7fVxuICAgIH0sXG4gICAgZmllbGRTdWJzY3JpYmVyczoge30sXG4gICAgZmllbGRzOiB7fSxcbiAgICBmb3JtU3RhdGU6IHtcbiAgICAgIGRpcnR5U2luY2VMYXN0U3VibWl0OiBmYWxzZSxcbiAgICAgIGVycm9yczoge30sXG4gICAgICBpbml0aWFsVmFsdWVzOiBpbml0aWFsVmFsdWVzICYmIF9leHRlbmRzKHt9LCBpbml0aWFsVmFsdWVzKSxcbiAgICAgIGludmFsaWQ6IGZhbHNlLFxuICAgICAgcHJpc3RpbmU6IHRydWUsXG4gICAgICBzdWJtaXR0aW5nOiBmYWxzZSxcbiAgICAgIHN1Ym1pdEZhaWxlZDogZmFsc2UsXG4gICAgICBzdWJtaXRTdWNjZWVkZWQ6IGZhbHNlLFxuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW5nOiAwLFxuICAgICAgdmFsdWVzOiBpbml0aWFsVmFsdWVzID8gX2V4dGVuZHMoe30sIGluaXRpYWxWYWx1ZXMpIDoge31cbiAgICB9LFxuICAgIGxhc3RGb3JtU3RhdGU6IHVuZGVmaW5lZFxuICB9O1xuICB2YXIgaW5CYXRjaCA9IGZhbHNlO1xuICB2YXIgdmFsaWRhdGlvblBhdXNlZCA9IGZhbHNlO1xuICB2YXIgdmFsaWRhdGlvbkJsb2NrZWQgPSBmYWxzZTtcbiAgdmFyIG5leHRBc3luY1ZhbGlkYXRpb25LZXkgPSAwO1xuICB2YXIgYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXMgPSB7fTtcblxuICB2YXIgY2xlYXJBc3luY1ZhbGlkYXRpb25Qcm9taXNlID0gZnVuY3Rpb24gY2xlYXJBc3luY1ZhbGlkYXRpb25Qcm9taXNlKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICBkZWxldGUgYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgY2hhbmdlVmFsdWUgPSBmdW5jdGlvbiBjaGFuZ2VWYWx1ZShzdGF0ZSwgbmFtZSwgbXV0YXRlKSB7XG4gICAgdmFyIGJlZm9yZSA9IGdldEluKHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIG5hbWUpO1xuICAgIHZhciBhZnRlciA9IG11dGF0ZShiZWZvcmUpO1xuICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCBuYW1lLCBhZnRlcikgfHwge307XG4gIH07XG5cbiAgdmFyIHJlbmFtZUZpZWxkID0gZnVuY3Rpb24gcmVuYW1lRmllbGQoc3RhdGUsIGZyb20sIHRvKSB7XG4gICAgaWYgKHN0YXRlLmZpZWxkc1tmcm9tXSkge1xuICAgICAgdmFyIF9leHRlbmRzMiwgX2V4dGVuZHMzO1xuXG4gICAgICBzdGF0ZS5maWVsZHMgPSBfZXh0ZW5kcyh7fSwgc3RhdGUuZmllbGRzLCAoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMlt0b10gPSBfZXh0ZW5kcyh7fSwgc3RhdGUuZmllbGRzW2Zyb21dLCB7XG4gICAgICAgIG5hbWU6IHRvLFxuICAgICAgICBsYXN0RmllbGRTdGF0ZTogdW5kZWZpbmVkXG4gICAgICB9KSwgX2V4dGVuZHMyKSk7XG4gICAgICBkZWxldGUgc3RhdGUuZmllbGRzW2Zyb21dO1xuICAgICAgc3RhdGUuZmllbGRTdWJzY3JpYmVycyA9IF9leHRlbmRzKHt9LCBzdGF0ZS5maWVsZFN1YnNjcmliZXJzLCAoX2V4dGVuZHMzID0ge30sIF9leHRlbmRzM1t0b10gPSBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW2Zyb21dLCBfZXh0ZW5kczMpKTtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW2Zyb21dO1xuICAgICAgdmFyIHZhbHVlID0gZ2V0SW4oc3RhdGUuZm9ybVN0YXRlLnZhbHVlcywgZnJvbSk7XG4gICAgICBzdGF0ZS5mb3JtU3RhdGUudmFsdWVzID0gc2V0SW4oc3RhdGUuZm9ybVN0YXRlLnZhbHVlcywgZnJvbSwgdW5kZWZpbmVkKSB8fCB7fTtcbiAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCB0bywgdmFsdWUpO1xuICAgICAgZGVsZXRlIHN0YXRlLmxhc3RGb3JtU3RhdGU7XG4gICAgfVxuICB9OyAvLyBiaW5kIHN0YXRlIHRvIG11dGF0b3JzXG5cblxuICB2YXIgZ2V0TXV0YXRvckFwaSA9IGZ1bmN0aW9uIGdldE11dGF0b3JBcGkoa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICBpZiAobXV0YXRvcnMpIHtcbiAgICAgICAgLy8gXl4gY2F1c2VzIGJyYW5jaCBjb3ZlcmFnZSB3YXJuaW5nLCBidXQgbmVlZGVkIHRvIGFwcGVhc2UgdGhlIEZsb3cgZ29kc1xuICAgICAgICB2YXIgbXV0YXRhYmxlU3RhdGUgPSB7XG4gICAgICAgICAgZm9ybVN0YXRlOiBzdGF0ZS5mb3JtU3RhdGUsXG4gICAgICAgICAgZmllbGRzOiBzdGF0ZS5maWVsZHMsXG4gICAgICAgICAgZmllbGRTdWJzY3JpYmVyczogc3RhdGUuZmllbGRTdWJzY3JpYmVycyxcbiAgICAgICAgICBsYXN0Rm9ybVN0YXRlOiBzdGF0ZS5sYXN0Rm9ybVN0YXRlXG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG11dGF0b3JzW2tleV0oYXJncywgbXV0YXRhYmxlU3RhdGUsIHtcbiAgICAgICAgICBjaGFuZ2VWYWx1ZTogY2hhbmdlVmFsdWUsXG4gICAgICAgICAgZ2V0SW46IGdldEluLFxuICAgICAgICAgIHJlbmFtZUZpZWxkOiByZW5hbWVGaWVsZCxcbiAgICAgICAgICBzZXRJbjogc2V0SW4sXG4gICAgICAgICAgc2hhbGxvd0VxdWFsOiBzaGFsbG93RXF1YWxcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXRlLmZvcm1TdGF0ZSA9IG11dGF0YWJsZVN0YXRlLmZvcm1TdGF0ZTtcbiAgICAgICAgc3RhdGUuZmllbGRzID0gbXV0YXRhYmxlU3RhdGUuZmllbGRzO1xuICAgICAgICBzdGF0ZS5maWVsZFN1YnNjcmliZXJzID0gbXV0YXRhYmxlU3RhdGUuZmllbGRTdWJzY3JpYmVycztcbiAgICAgICAgc3RhdGUubGFzdEZvcm1TdGF0ZSA9IG11dGF0YWJsZVN0YXRlLmxhc3RGb3JtU3RhdGU7XG4gICAgICAgIHJ1blZhbGlkYXRpb24odW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICB2YXIgbXV0YXRvcnNBcGkgPSBtdXRhdG9ycyA/IE9iamVjdC5rZXlzKG11dGF0b3JzKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSBnZXRNdXRhdG9yQXBpKGtleSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pIDoge307XG5cbiAgdmFyIHJ1blJlY29yZExldmVsVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHJ1blJlY29yZExldmVsVmFsaWRhdGlvbihzZXRFcnJvcnMpIHtcbiAgICB2YXIgcHJvbWlzZXMgPSBbXTtcblxuICAgIGlmICh2YWxpZGF0ZSkge1xuICAgICAgdmFyIGVycm9yc09yUHJvbWlzZSA9IHZhbGlkYXRlKF9leHRlbmRzKHt9LCBzdGF0ZS5mb3JtU3RhdGUudmFsdWVzKSk7IC8vIGNsb25lIHRvIGF2b2lkIHdyaXRpbmdcblxuICAgICAgaWYgKGlzUHJvbWlzZShlcnJvcnNPclByb21pc2UpKSB7XG4gICAgICAgIHZhciBhc3luY1ZhbGlkYXRpb25Qcm9taXNlS2V5ID0gbmV4dEFzeW5jVmFsaWRhdGlvbktleSsrO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IGVycm9yc09yUHJvbWlzZS50aGVuKHNldEVycm9ycykudGhlbihjbGVhckFzeW5jVmFsaWRhdGlvblByb21pc2UoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZUtleSkpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgICAgICBhc3luY1ZhbGlkYXRpb25Qcm9taXNlc1thc3luY1ZhbGlkYXRpb25Qcm9taXNlS2V5XSA9IHByb21pc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRFcnJvcnMoZXJyb3JzT3JQcm9taXNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZXM7XG4gIH07XG5cbiAgdmFyIGdldFZhbGlkYXRvcnMgPSBmdW5jdGlvbiBnZXRWYWxpZGF0b3JzKGZpZWxkKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpZWxkLnZhbGlkYXRvcnMpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkge1xuICAgICAgdmFyIHZhbGlkYXRvciA9IGZpZWxkLnZhbGlkYXRvcnNbTnVtYmVyKGluZGV4KV0oKTtcblxuICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICByZXN1bHQucHVzaCh2YWxpZGF0b3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKTtcbiAgfTtcblxuICB2YXIgcnVuRmllbGRMZXZlbFZhbGlkYXRpb24gPSBmdW5jdGlvbiBydW5GaWVsZExldmVsVmFsaWRhdGlvbihmaWVsZCwgc2V0RXJyb3IpIHtcbiAgICB2YXIgcHJvbWlzZXMgPSBbXTtcbiAgICB2YXIgdmFsaWRhdG9ycyA9IGdldFZhbGlkYXRvcnMoZmllbGQpO1xuXG4gICAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgICB2YXIgZXJyb3I7XG4gICAgICB2YWxpZGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKHZhbGlkYXRvcikge1xuICAgICAgICB2YXIgZXJyb3JPclByb21pc2UgPSB2YWxpZGF0b3IoZ2V0SW4oc3RhdGUuZm9ybVN0YXRlLnZhbHVlcywgZmllbGQubmFtZSksIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIHZhbGlkYXRvci5sZW5ndGggPT09IDMgPyBwdWJsaXNoRmllbGRTdGF0ZShzdGF0ZS5mb3JtU3RhdGUsIHN0YXRlLmZpZWxkc1tmaWVsZC5uYW1lXSkgOiB1bmRlZmluZWQpO1xuXG4gICAgICAgIGlmIChlcnJvck9yUHJvbWlzZSAmJiBpc1Byb21pc2UoZXJyb3JPclByb21pc2UpKSB7XG4gICAgICAgICAgdmFyIGFzeW5jVmFsaWRhdGlvblByb21pc2VLZXkgPSBuZXh0QXN5bmNWYWxpZGF0aW9uS2V5Kys7XG4gICAgICAgICAgdmFyIHByb21pc2UgPSBlcnJvck9yUHJvbWlzZS50aGVuKHNldEVycm9yKSAvLyBlcnJvcnMgbXVzdCBiZSByZXNvbHZlZCwgbm90IHJlamVjdGVkXG4gICAgICAgICAgLnRoZW4oY2xlYXJBc3luY1ZhbGlkYXRpb25Qcm9taXNlKGFzeW5jVmFsaWRhdGlvblByb21pc2VLZXkpKTtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgICAgICAgIGFzeW5jVmFsaWRhdGlvblByb21pc2VzW2FzeW5jVmFsaWRhdGlvblByb21pc2VLZXldID0gcHJvbWlzZTtcbiAgICAgICAgfSBlbHNlIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAvLyBmaXJzdCByZWdpc3RlcmVkIHZhbGlkYXRvciB3aW5zXG4gICAgICAgICAgZXJyb3IgPSBlcnJvck9yUHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZXRFcnJvcihlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2VzO1xuICB9O1xuXG4gIHZhciBydW5WYWxpZGF0aW9uID0gZnVuY3Rpb24gcnVuVmFsaWRhdGlvbihmaWVsZENoYW5nZWQsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHZhbGlkYXRpb25QYXVzZWQpIHtcbiAgICAgIHZhbGlkYXRpb25CbG9ja2VkID0gdHJ1ZTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGZpZWxkcyA9IHN0YXRlLmZpZWxkcyxcbiAgICAgICAgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlO1xuXG4gICAgdmFyIHNhZmVGaWVsZHMgPSBfZXh0ZW5kcyh7fSwgZmllbGRzKTtcblxuICAgIHZhciBmaWVsZEtleXMgPSBPYmplY3Qua2V5cyhzYWZlRmllbGRzKTtcblxuICAgIGlmICghdmFsaWRhdGUgJiYgIWZpZWxkS2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBnZXRWYWxpZGF0b3JzKHNhZmVGaWVsZHNba2V5XSkubGVuZ3RoO1xuICAgIH0pKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuOyAvLyBubyB2YWxpZGF0aW9uIHJ1bGVzXG4gICAgfSAvLyBwYXJlIGRvd24gZmllbGQga2V5cyB0byBhY3R1YWxseSB2YWxpZGF0ZVxuXG5cbiAgICB2YXIgbGltaXRlZEZpZWxkTGV2ZWxWYWxpZGF0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoZmllbGRDaGFuZ2VkKSB7XG4gICAgICB2YXIgY2hhbmdlZEZpZWxkID0gc2FmZUZpZWxkc1tmaWVsZENoYW5nZWRdO1xuXG4gICAgICBpZiAoY2hhbmdlZEZpZWxkKSB7XG4gICAgICAgIHZhciB2YWxpZGF0ZUZpZWxkcyA9IGNoYW5nZWRGaWVsZC52YWxpZGF0ZUZpZWxkcztcblxuICAgICAgICBpZiAodmFsaWRhdGVGaWVsZHMpIHtcbiAgICAgICAgICBsaW1pdGVkRmllbGRMZXZlbFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgIGZpZWxkS2V5cyA9IHZhbGlkYXRlRmllbGRzLmxlbmd0aCA/IHZhbGlkYXRlRmllbGRzLmNvbmNhdChmaWVsZENoYW5nZWQpIDogW2ZpZWxkQ2hhbmdlZF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkTGV2ZWxFcnJvcnMgPSB7fTtcbiAgICB2YXIgZmllbGRMZXZlbEVycm9ycyA9IHt9O1xuICAgIHZhciBwcm9taXNlcyA9IFtdLmNvbmNhdChydW5SZWNvcmRMZXZlbFZhbGlkYXRpb24oZnVuY3Rpb24gKGVycm9ycykge1xuICAgICAgcmVjb3JkTGV2ZWxFcnJvcnMgPSBlcnJvcnMgfHwge307XG4gICAgfSksIGZpZWxkS2V5cy5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwgbmFtZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5jb25jYXQocnVuRmllbGRMZXZlbFZhbGlkYXRpb24oc2FmZUZpZWxkc1tuYW1lXSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGZpZWxkTGV2ZWxFcnJvcnNbbmFtZV0gPSBlcnJvcjtcbiAgICAgIH0pKTtcbiAgICB9LCBbXSkpO1xuXG4gICAgdmFyIHByb2Nlc3NFcnJvcnMgPSBmdW5jdGlvbiBwcm9jZXNzRXJyb3JzKCkge1xuICAgICAgdmFyIG1lcmdlZCA9IF9leHRlbmRzKHt9LCBsaW1pdGVkRmllbGRMZXZlbFZhbGlkYXRpb24gPyBmb3JtU3RhdGUuZXJyb3JzIDoge30sIHJlY29yZExldmVsRXJyb3JzKTtcblxuICAgICAgdmFyIGZvckVhY2hFcnJvciA9IGZ1bmN0aW9uIGZvckVhY2hFcnJvcihmbikge1xuICAgICAgICBmaWVsZEtleXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIGlmIChmaWVsZHNbbmFtZV0pIHtcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBmaWVsZCBpcyBzdGlsbCByZWdpc3RlcmVkXG4gICAgICAgICAgICAvLyBmaWVsZC1sZXZlbCBlcnJvcnMgdGFrZSBwcmVjZWRlbnQgb3ZlciByZWNvcmQtbGV2ZWwgZXJyb3JzXG4gICAgICAgICAgICB2YXIgcmVjb3JkTGV2ZWxFcnJvciA9IGdldEluKHJlY29yZExldmVsRXJyb3JzLCBuYW1lKTtcbiAgICAgICAgICAgIHZhciBlcnJvckZyb21QYXJlbnQgPSBnZXRJbihtZXJnZWQsIG5hbWUpO1xuICAgICAgICAgICAgdmFyIGhhc0ZpZWxkTGV2ZWxWYWxpZGF0aW9uID0gZ2V0VmFsaWRhdG9ycyhzYWZlRmllbGRzW25hbWVdKS5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZmllbGRMZXZlbEVycm9yID0gZmllbGRMZXZlbEVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIGZuKG5hbWUsIGhhc0ZpZWxkTGV2ZWxWYWxpZGF0aW9uICYmIGZpZWxkTGV2ZWxFcnJvciB8fCB2YWxpZGF0ZSAmJiByZWNvcmRMZXZlbEVycm9yIHx8ICghcmVjb3JkTGV2ZWxFcnJvciAmJiAhbGltaXRlZEZpZWxkTGV2ZWxWYWxpZGF0aW9uID8gZXJyb3JGcm9tUGFyZW50IDogdW5kZWZpbmVkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGZvckVhY2hFcnJvcihmdW5jdGlvbiAobmFtZSwgZXJyb3IpIHtcbiAgICAgICAgbWVyZ2VkID0gc2V0SW4obWVyZ2VkLCBuYW1lLCBlcnJvcikgfHwge307XG4gICAgICB9KTtcbiAgICAgIGZvckVhY2hFcnJvcihmdW5jdGlvbiAobmFtZSwgZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yW0FSUkFZX0VSUk9SXSkge1xuICAgICAgICAgIHZhciBleGlzdGluZyA9IGdldEluKG1lcmdlZCwgbmFtZSk7XG4gICAgICAgICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoZXhpc3RpbmcpO1xuICAgICAgICAgIGNvcHlbQVJSQVlfRVJST1JdID0gZXJyb3JbQVJSQVlfRVJST1JdO1xuICAgICAgICAgIG1lcmdlZCA9IHNldEluKG1lcmdlZCwgbmFtZSwgY29weSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXNoYWxsb3dFcXVhbChmb3JtU3RhdGUuZXJyb3JzLCBtZXJnZWQpKSB7XG4gICAgICAgIGZvcm1TdGF0ZS5lcnJvcnMgPSBtZXJnZWQ7XG4gICAgICB9XG5cbiAgICAgIGZvcm1TdGF0ZS5lcnJvciA9IHJlY29yZExldmVsRXJyb3JzW0ZPUk1fRVJST1JdO1xuICAgIH07IC8vIHByb2Nlc3Mgc3luYyBlcnJvcnNcblxuXG4gICAgcHJvY2Vzc0Vycm9ycygpO1xuXG4gICAgaWYgKHByb21pc2VzLmxlbmd0aCkge1xuICAgICAgLy8gc3luYyBlcnJvcnMgaGF2ZSBiZWVuIHNldC4gbm90aWZ5IGxpc3RlbmVycyB3aGlsZSB3ZSB3YWl0IGZvciBvdGhlcnNcbiAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWxpZGF0aW5nKys7XG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWZ0ZXJQcm9taXNlcyA9IGZ1bmN0aW9uIGFmdGVyUHJvbWlzZXMoKSB7XG4gICAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWxpZGF0aW5nLS07XG4gICAgICAgIHByb2Nlc3NFcnJvcnMoKTtcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihhZnRlclByb21pc2VzLCBhZnRlclByb21pc2VzKTtcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgbm90aWZ5RmllbGRMaXN0ZW5lcnMgPSBmdW5jdGlvbiBub3RpZnlGaWVsZExpc3RlbmVycyhmb3JjZSkge1xuICAgIGlmIChpbkJhdGNoIHx8IHZhbGlkYXRpb25QYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICBmaWVsZFN1YnNjcmliZXJzID0gc3RhdGUuZmllbGRTdWJzY3JpYmVycyxcbiAgICAgICAgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlO1xuXG4gICAgdmFyIHNhZmVGaWVsZHMgPSBfZXh0ZW5kcyh7fSwgZmllbGRzKTtcblxuICAgIE9iamVjdC5rZXlzKHNhZmVGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBmaWVsZCA9IHNhZmVGaWVsZHNbbmFtZV07XG4gICAgICB2YXIgZmllbGRTdGF0ZSA9IHB1Ymxpc2hGaWVsZFN0YXRlKGZvcm1TdGF0ZSwgZmllbGQpO1xuICAgICAgdmFyIGxhc3RGaWVsZFN0YXRlID0gZmllbGQubGFzdEZpZWxkU3RhdGU7XG5cbiAgICAgIGlmICghc2hhbGxvd0VxdWFsKGZpZWxkU3RhdGUsIGxhc3RGaWVsZFN0YXRlKSkge1xuICAgICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAvLyBDdXJpb3VzIGFib3V0IHdoeSBhIGZpZWxkIGlzIGdldHRpbmcgbm90aWZpZWQ/IFVuY29tbWVudCB0aGlzLlxuICAgICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAvLyBjb25zdCBkaWZmS2V5cyA9IE9iamVjdC5rZXlzKGZpZWxkU3RhdGUpLmZpbHRlcihcbiAgICAgICAgLy8gICBrZXkgPT4gZmllbGRTdGF0ZVtrZXldICE9PSAobGFzdEZpZWxkU3RhdGUgJiYgbGFzdEZpZWxkU3RhdGVba2V5XSlcbiAgICAgICAgLy8gKVxuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKFxuICAgICAgICAvLyAgICdub3RpZnlpbmcnLFxuICAgICAgICAvLyAgIGZpZWxkLm5hbWUsXG4gICAgICAgIC8vICAgJ1xcbkZpZWxkIFN0YXRlXFxuJyxcbiAgICAgICAgLy8gICBkaWZmS2V5cy5yZWR1Y2UoXG4gICAgICAgIC8vICAgICAocmVzdWx0LCBrZXkpID0+ICh7IC4uLnJlc3VsdCwgW2tleV06IGZpZWxkU3RhdGVba2V5XSB9KSxcbiAgICAgICAgLy8gICAgIHt9XG4gICAgICAgIC8vICAgKSxcbiAgICAgICAgLy8gICAnXFxuTGFzdCBGaWVsZCBTdGF0ZVxcbicsXG4gICAgICAgIC8vICAgZGlmZktleXMucmVkdWNlKFxuICAgICAgICAvLyAgICAgKHJlc3VsdCwga2V5KSA9PiAoe1xuICAgICAgICAvLyAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgIC8vICAgICAgIFtrZXldOiBsYXN0RmllbGRTdGF0ZSAmJiBsYXN0RmllbGRTdGF0ZVtrZXldXG4gICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgLy8gICAgIHt9XG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyApXG4gICAgICAgIGZpZWxkLmxhc3RGaWVsZFN0YXRlID0gZmllbGRTdGF0ZTtcbiAgICAgICAgdmFyIGZpZWxkU3Vic2NyaWJlciA9IGZpZWxkU3Vic2NyaWJlcnNbbmFtZV07XG5cbiAgICAgICAgaWYgKGZpZWxkU3Vic2NyaWJlcikge1xuICAgICAgICAgIG5vdGlmeShmaWVsZFN1YnNjcmliZXIsIGZpZWxkU3RhdGUsIGxhc3RGaWVsZFN0YXRlLCBmaWx0ZXJGaWVsZFN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHZhciBtYXJrQWxsRmllbGRzVG91Y2hlZCA9IGZ1bmN0aW9uIG1hcmtBbGxGaWVsZHNUb3VjaGVkKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBzdGF0ZS5maWVsZHNba2V5XS50b3VjaGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgaGFzU3luY0Vycm9ycyA9IGZ1bmN0aW9uIGhhc1N5bmNFcnJvcnMoKSB7XG4gICAgcmV0dXJuICEhKHN0YXRlLmZvcm1TdGF0ZS5lcnJvciB8fCBoYXNBbnlFcnJvcihzdGF0ZS5mb3JtU3RhdGUuZXJyb3JzKSk7XG4gIH07XG5cbiAgdmFyIGNhbGN1bGF0ZU5leHRGb3JtU3RhdGUgPSBmdW5jdGlvbiBjYWxjdWxhdGVOZXh0Rm9ybVN0YXRlKCkge1xuICAgIHZhciBmaWVsZHMgPSBzdGF0ZS5maWVsZHMsXG4gICAgICAgIGZvcm1TdGF0ZSA9IHN0YXRlLmZvcm1TdGF0ZSxcbiAgICAgICAgbGFzdEZvcm1TdGF0ZSA9IHN0YXRlLmxhc3RGb3JtU3RhdGU7XG5cbiAgICB2YXIgc2FmZUZpZWxkcyA9IF9leHRlbmRzKHt9LCBmaWVsZHMpO1xuXG4gICAgdmFyIHNhZmVGaWVsZEtleXMgPSBPYmplY3Qua2V5cyhzYWZlRmllbGRzKTsgLy8gY2FsY3VsYXRlIGRpcnR5L3ByaXN0aW5lXG5cbiAgICB2YXIgZm91bmREaXJ0eSA9IGZhbHNlO1xuICAgIHZhciBkaXJ0eUZpZWxkcyA9IHNhZmVGaWVsZEtleXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgdmFyIGRpcnR5ID0gIXNhZmVGaWVsZHNba2V5XS5pc0VxdWFsKGdldEluKGZvcm1TdGF0ZS52YWx1ZXMsIGtleSksIGdldEluKGZvcm1TdGF0ZS5pbml0aWFsVmFsdWVzIHx8IHt9LCBrZXkpKTtcblxuICAgICAgaWYgKGRpcnR5KSB7XG4gICAgICAgIGZvdW5kRGlydHkgPSB0cnVlO1xuICAgICAgICByZXN1bHRba2V5XSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pO1xuICAgIGZvcm1TdGF0ZS5wcmlzdGluZSA9ICFmb3VuZERpcnR5O1xuICAgIGZvcm1TdGF0ZS5kaXJ0eVNpbmNlTGFzdFN1Ym1pdCA9ICEhKGZvcm1TdGF0ZS5sYXN0U3VibWl0dGVkVmFsdWVzICYmICFzYWZlRmllbGRLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICB2YXIgbm9uTnVsbExhc3RTdWJtaXR0ZWRWYWx1ZXMgPSBmb3JtU3RhdGUubGFzdFN1Ym1pdHRlZFZhbHVlcyB8fCB7fTsgLy8gfHwge30gaXMgZm9yIGZsb3csIGJ1dCBjYXVzZXMgYnJhbmNoIGNvdmVyYWdlIGNvbXBsYWludFxuXG4gICAgICByZXR1cm4gc2FmZUZpZWxkc1trZXldLmlzRXF1YWwoZ2V0SW4oZm9ybVN0YXRlLnZhbHVlcywga2V5KSwgZ2V0SW4obm9uTnVsbExhc3RTdWJtaXR0ZWRWYWx1ZXMsIGtleSkpO1xuICAgIH0pKTtcbiAgICBmb3JtU3RhdGUudmFsaWQgPSAhZm9ybVN0YXRlLmVycm9yICYmICFmb3JtU3RhdGUuc3VibWl0RXJyb3IgJiYgIWhhc0FueUVycm9yKGZvcm1TdGF0ZS5lcnJvcnMpICYmICEoZm9ybVN0YXRlLnN1Ym1pdEVycm9ycyAmJiBoYXNBbnlFcnJvcihmb3JtU3RhdGUuc3VibWl0RXJyb3JzKSk7XG4gICAgdmFyIG5leHRGb3JtU3RhdGUgPSBjb252ZXJ0VG9FeHRlcm5hbEZvcm1TdGF0ZShmb3JtU3RhdGUpO1xuXG4gICAgdmFyIF9zYWZlRmllbGRLZXlzJHJlZHVjZSA9IHNhZmVGaWVsZEtleXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgcmVzdWx0Lm1vZGlmaWVkW2tleV0gPSBzYWZlRmllbGRzW2tleV0ubW9kaWZpZWQ7XG4gICAgICByZXN1bHQudG91Y2hlZFtrZXldID0gc2FmZUZpZWxkc1trZXldLnRvdWNoZWQ7XG4gICAgICByZXN1bHQudmlzaXRlZFtrZXldID0gc2FmZUZpZWxkc1trZXldLnZpc2l0ZWQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHtcbiAgICAgIG1vZGlmaWVkOiB7fSxcbiAgICAgIHRvdWNoZWQ6IHt9LFxuICAgICAgdmlzaXRlZDoge31cbiAgICB9KSxcbiAgICAgICAgbW9kaWZpZWQgPSBfc2FmZUZpZWxkS2V5cyRyZWR1Y2UubW9kaWZpZWQsXG4gICAgICAgIHRvdWNoZWQgPSBfc2FmZUZpZWxkS2V5cyRyZWR1Y2UudG91Y2hlZCxcbiAgICAgICAgdmlzaXRlZCA9IF9zYWZlRmllbGRLZXlzJHJlZHVjZS52aXNpdGVkO1xuXG4gICAgbmV4dEZvcm1TdGF0ZS5kaXJ0eUZpZWxkcyA9IGxhc3RGb3JtU3RhdGUgJiYgc2hhbGxvd0VxdWFsKGxhc3RGb3JtU3RhdGUuZGlydHlGaWVsZHMsIGRpcnR5RmllbGRzKSA/IGxhc3RGb3JtU3RhdGUuZGlydHlGaWVsZHMgOiBkaXJ0eUZpZWxkcztcbiAgICBuZXh0Rm9ybVN0YXRlLm1vZGlmaWVkID0gbGFzdEZvcm1TdGF0ZSAmJiBzaGFsbG93RXF1YWwobGFzdEZvcm1TdGF0ZS5tb2RpZmllZCwgbW9kaWZpZWQpID8gbGFzdEZvcm1TdGF0ZS5tb2RpZmllZCA6IG1vZGlmaWVkO1xuICAgIG5leHRGb3JtU3RhdGUudG91Y2hlZCA9IGxhc3RGb3JtU3RhdGUgJiYgc2hhbGxvd0VxdWFsKGxhc3RGb3JtU3RhdGUudG91Y2hlZCwgdG91Y2hlZCkgPyBsYXN0Rm9ybVN0YXRlLnRvdWNoZWQgOiB0b3VjaGVkO1xuICAgIG5leHRGb3JtU3RhdGUudmlzaXRlZCA9IGxhc3RGb3JtU3RhdGUgJiYgc2hhbGxvd0VxdWFsKGxhc3RGb3JtU3RhdGUudmlzaXRlZCwgdmlzaXRlZCkgPyBsYXN0Rm9ybVN0YXRlLnZpc2l0ZWQgOiB2aXNpdGVkO1xuICAgIHJldHVybiBsYXN0Rm9ybVN0YXRlICYmIHNoYWxsb3dFcXVhbChsYXN0Rm9ybVN0YXRlLCBuZXh0Rm9ybVN0YXRlKSA/IGxhc3RGb3JtU3RhdGUgOiBuZXh0Rm9ybVN0YXRlO1xuICB9O1xuXG4gIHZhciBjYWxsRGVidWcgPSBmdW5jdGlvbiBjYWxsRGVidWcoKSB7XG4gICAgcmV0dXJuIGRlYnVnICYmIFwiZGV2ZWxvcG1lbnRcIiAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRlYnVnKGNhbGN1bGF0ZU5leHRGb3JtU3RhdGUoKSwgT2JqZWN0LmtleXMoc3RhdGUuZmllbGRzKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHN0YXRlLmZpZWxkc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSkpO1xuICB9O1xuXG4gIHZhciBub3RpZnlpbmcgPSBmYWxzZTtcbiAgdmFyIHNjaGVkdWxlTm90aWZpY2F0aW9uID0gZmFsc2U7XG5cbiAgdmFyIG5vdGlmeUZvcm1MaXN0ZW5lcnMgPSBmdW5jdGlvbiBub3RpZnlGb3JtTGlzdGVuZXJzKCkge1xuICAgIGlmIChub3RpZnlpbmcpIHtcbiAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm90aWZ5aW5nID0gdHJ1ZTtcbiAgICAgIGNhbGxEZWJ1ZygpO1xuXG4gICAgICBpZiAoIWluQmF0Y2ggJiYgIXZhbGlkYXRpb25QYXVzZWQpIHtcbiAgICAgICAgdmFyIGxhc3RGb3JtU3RhdGUgPSBzdGF0ZS5sYXN0Rm9ybVN0YXRlO1xuICAgICAgICB2YXIgbmV4dEZvcm1TdGF0ZSA9IGNhbGN1bGF0ZU5leHRGb3JtU3RhdGUoKTtcblxuICAgICAgICBpZiAobmV4dEZvcm1TdGF0ZSAhPT0gbGFzdEZvcm1TdGF0ZSkge1xuICAgICAgICAgIHN0YXRlLmxhc3RGb3JtU3RhdGUgPSBuZXh0Rm9ybVN0YXRlO1xuICAgICAgICAgIG5vdGlmeShzdGF0ZS5zdWJzY3JpYmVycywgbmV4dEZvcm1TdGF0ZSwgbGFzdEZvcm1TdGF0ZSwgZmlsdGVyRm9ybVN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub3RpZnlpbmcgPSBmYWxzZTtcblxuICAgICAgaWYgKHNjaGVkdWxlTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uID0gZmFsc2U7XG4gICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIGJlZm9yZVN1Ym1pdCA9IGZ1bmN0aW9uIGJlZm9yZVN1Ym1pdCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc3RhdGUuZmllbGRzKS5maW5kKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gc3RhdGUuZmllbGRzW25hbWVdLmJlZm9yZVN1Ym1pdCAmJiBzdGF0ZS5maWVsZHNbbmFtZV0uYmVmb3JlU3VibWl0KCkgPT09IGZhbHNlO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciBhZnRlclN1Ym1pdCA9IGZ1bmN0aW9uIGFmdGVyU3VibWl0KCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzdGF0ZS5maWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5maWVsZHNbbmFtZV0uYWZ0ZXJTdWJtaXQgJiYgc3RhdGUuZmllbGRzW25hbWVdLmFmdGVyU3VibWl0KCk7XG4gICAgfSk7XG4gIH07IC8vIGdlbmVyYXRlIGluaXRpYWwgZXJyb3JzXG5cblxuICBydW5WYWxpZGF0aW9uKCk7XG4gIHZhciBhcGkgPSB7XG4gICAgYmF0Y2g6IGZ1bmN0aW9uIGJhdGNoKGZuKSB7XG4gICAgICBpbkJhdGNoID0gdHJ1ZTtcbiAgICAgIGZuKCk7XG4gICAgICBpbkJhdGNoID0gZmFsc2U7XG4gICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuICAgIH0sXG4gICAgYmx1cjogZnVuY3Rpb24gYmx1cihuYW1lKSB7XG4gICAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICAgIGZvcm1TdGF0ZSA9IHN0YXRlLmZvcm1TdGF0ZTtcbiAgICAgIHZhciBwcmV2aW91cyA9IGZpZWxkc1tuYW1lXTtcblxuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgIC8vIGNhbiBvbmx5IGJsdXIgcmVnaXN0ZXJlZCBmaWVsZHNcbiAgICAgICAgZGVsZXRlIGZvcm1TdGF0ZS5hY3RpdmU7XG4gICAgICAgIGZpZWxkc1tuYW1lXSA9IF9leHRlbmRzKHt9LCBwcmV2aW91cywge1xuICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgdG91Y2hlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodmFsaWRhdGVPbkJsdXIpIHtcbiAgICAgICAgICBydW5WYWxpZGF0aW9uKG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNoYW5nZTogZnVuY3Rpb24gY2hhbmdlKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICAgIGZvcm1TdGF0ZSA9IHN0YXRlLmZvcm1TdGF0ZTtcblxuICAgICAgaWYgKGdldEluKGZvcm1TdGF0ZS52YWx1ZXMsIG5hbWUpICE9PSB2YWx1ZSkge1xuICAgICAgICBjaGFuZ2VWYWx1ZShzdGF0ZSwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBwcmV2aW91cyA9IGZpZWxkc1tuYW1lXTtcblxuICAgICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgICAvLyBvbmx5IHRyYWNrIG1vZGlmaWVkIGZvciByZWdpc3RlcmVkIGZpZWxkc1xuICAgICAgICAgIGZpZWxkc1tuYW1lXSA9IF9leHRlbmRzKHt9LCBwcmV2aW91cywge1xuICAgICAgICAgICAgbW9kaWZpZWQ6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZU9uQmx1cikge1xuICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJ1blZhbGlkYXRpb24obmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZm9jdXM6IGZ1bmN0aW9uIGZvY3VzKG5hbWUpIHtcbiAgICAgIHZhciBmaWVsZCA9IHN0YXRlLmZpZWxkc1tuYW1lXTtcblxuICAgICAgaWYgKGZpZWxkICYmICFmaWVsZC5hY3RpdmUpIHtcbiAgICAgICAgc3RhdGUuZm9ybVN0YXRlLmFjdGl2ZSA9IG5hbWU7XG4gICAgICAgIGZpZWxkLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGZpZWxkLnZpc2l0ZWQgPSB0cnVlO1xuICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtdXRhdG9yczogbXV0YXRvcnNBcGksXG4gICAgZ2V0RmllbGRTdGF0ZTogZnVuY3Rpb24gZ2V0RmllbGRTdGF0ZShuYW1lKSB7XG4gICAgICB2YXIgZmllbGQgPSBzdGF0ZS5maWVsZHNbbmFtZV07XG4gICAgICByZXR1cm4gZmllbGQgJiYgZmllbGQubGFzdEZpZWxkU3RhdGU7XG4gICAgfSxcbiAgICBnZXRSZWdpc3RlcmVkRmllbGRzOiBmdW5jdGlvbiBnZXRSZWdpc3RlcmVkRmllbGRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHN0YXRlLmZpZWxkcyk7XG4gICAgfSxcbiAgICBnZXRTdGF0ZTogZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gICAgICByZXR1cm4gY2FsY3VsYXRlTmV4dEZvcm1TdGF0ZSgpO1xuICAgIH0sXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZShkYXRhKSB7XG4gICAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICAgIGZvcm1TdGF0ZSA9IHN0YXRlLmZvcm1TdGF0ZTtcblxuICAgICAgdmFyIHNhZmVGaWVsZHMgPSBfZXh0ZW5kcyh7fSwgZmllbGRzKTtcblxuICAgICAgdmFyIHZhbHVlcyA9IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nID8gZGF0YShmb3JtU3RhdGUudmFsdWVzKSA6IGRhdGE7XG5cbiAgICAgIGlmICgha2VlcERpcnR5T25SZWluaXRpYWxpemUpIHtcbiAgICAgICAgZm9ybVN0YXRlLnZhbHVlcyA9IHZhbHVlcztcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmtleXMoc2FmZUZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBmaWVsZCA9IHNhZmVGaWVsZHNba2V5XTtcbiAgICAgICAgZmllbGQubW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgZmllbGQudG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICBmaWVsZC52aXNpdGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplKSB7XG4gICAgICAgICAgdmFyIHByaXN0aW5lID0gZmllbGQuaXNFcXVhbChnZXRJbihmb3JtU3RhdGUudmFsdWVzLCBrZXkpLCBnZXRJbihmb3JtU3RhdGUuaW5pdGlhbFZhbHVlcyB8fCB7fSwga2V5KSk7XG5cbiAgICAgICAgICBpZiAocHJpc3RpbmUpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgdXBkYXRlIHByaXN0aW5lIHZhbHVlc1xuICAgICAgICAgICAgZm9ybVN0YXRlLnZhbHVlcyA9IHNldEluKGZvcm1TdGF0ZS52YWx1ZXMsIGtleSwgZ2V0SW4odmFsdWVzLCBrZXkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9ybVN0YXRlLmluaXRpYWxWYWx1ZXMgPSB2YWx1ZXM7XG4gICAgICBydW5WYWxpZGF0aW9uKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGlzVmFsaWRhdGlvblBhdXNlZDogZnVuY3Rpb24gaXNWYWxpZGF0aW9uUGF1c2VkKCkge1xuICAgICAgcmV0dXJuIHZhbGlkYXRpb25QYXVzZWQ7XG4gICAgfSxcbiAgICBwYXVzZVZhbGlkYXRpb246IGZ1bmN0aW9uIHBhdXNlVmFsaWRhdGlvbigpIHtcbiAgICAgIHZhbGlkYXRpb25QYXVzZWQgPSB0cnVlO1xuICAgIH0sXG4gICAgcmVnaXN0ZXJGaWVsZDogZnVuY3Rpb24gcmVnaXN0ZXJGaWVsZChuYW1lLCBzdWJzY3JpYmVyLCBzdWJzY3JpcHRpb24sIGZpZWxkQ29uZmlnKSB7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uID09PSB2b2lkIDApIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmICghc3RhdGUuZmllbGRTdWJzY3JpYmVyc1tuYW1lXSkge1xuICAgICAgICBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW25hbWVdID0ge1xuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIGVudHJpZXM6IHt9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBpbmRleCA9IHN0YXRlLmZpZWxkU3Vic2NyaWJlcnNbbmFtZV0uaW5kZXgrKzsgLy8gc2F2ZSBmaWVsZCBzdWJzY3JpYmVyIGNhbGxiYWNrXG5cbiAgICAgIHN0YXRlLmZpZWxkU3Vic2NyaWJlcnNbbmFtZV0uZW50cmllc1tpbmRleF0gPSB7XG4gICAgICAgIHN1YnNjcmliZXI6IG1lbW9pemUoc3Vic2NyaWJlciksXG4gICAgICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXN0YXRlLmZpZWxkc1tuYW1lXSkge1xuICAgICAgICAvLyBjcmVhdGUgaW5pdGlhbCBmaWVsZCBzdGF0ZVxuICAgICAgICBzdGF0ZS5maWVsZHNbbmFtZV0gPSB7XG4gICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBhZnRlclN1Ym1pdDogZmllbGRDb25maWcgJiYgZmllbGRDb25maWcuYWZ0ZXJTdWJtaXQsXG4gICAgICAgICAgYmVmb3JlU3VibWl0OiBmaWVsZENvbmZpZyAmJiBmaWVsZENvbmZpZy5iZWZvcmVTdWJtaXQsXG4gICAgICAgICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGkuYmx1cihuYW1lKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gY2hhbmdlKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBpLmNoYW5nZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICBmb2N1czogZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBpLmZvY3VzKG5hbWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaXNFcXVhbDogZmllbGRDb25maWcgJiYgZmllbGRDb25maWcuaXNFcXVhbCB8fCB0cmlwbGVFcXVhbHMsXG4gICAgICAgICAgbGFzdEZpZWxkU3RhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtb2RpZmllZDogZmFsc2UsXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICB0b3VjaGVkOiBmYWxzZSxcbiAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICB2YWxpZGF0ZUZpZWxkczogZmllbGRDb25maWcgJiYgZmllbGRDb25maWcudmFsaWRhdGVGaWVsZHMsXG4gICAgICAgICAgdmFsaWRhdG9yczoge30sXG4gICAgICAgICAgdmlzaXRlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkQ29uZmlnKSB7XG4gICAgICAgIGlmIChmaWVsZENvbmZpZy5nZXRWYWxpZGF0b3IpIHtcbiAgICAgICAgICBzdGF0ZS5maWVsZHNbbmFtZV0udmFsaWRhdG9yc1tpbmRleF0gPSBmaWVsZENvbmZpZy5nZXRWYWxpZGF0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGRDb25maWcuaW5pdGlhbFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdGF0ZS5mb3JtU3RhdGUuaW5pdGlhbFZhbHVlcyA9IHNldEluKHN0YXRlLmZvcm1TdGF0ZS5pbml0aWFsVmFsdWVzIHx8IHt9LCBuYW1lLCBmaWVsZENvbmZpZy5pbml0aWFsVmFsdWUpO1xuICAgICAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCBuYW1lLCBmaWVsZENvbmZpZy5pbml0aWFsVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkQ29uZmlnLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RhdGUuZm9ybVN0YXRlLnZhbHVlcyA9IHNldEluKHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIG5hbWUsIGZpZWxkQ29uZmlnLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHNlbnRGaXJzdE5vdGlmaWNhdGlvbiA9IGZhbHNlO1xuXG4gICAgICB2YXIgZmlyc3ROb3RpZmljYXRpb24gPSBmdW5jdGlvbiBmaXJzdE5vdGlmaWNhdGlvbigpIHtcbiAgICAgICAgdmFyIGZpZWxkU3RhdGUgPSBwdWJsaXNoRmllbGRTdGF0ZShzdGF0ZS5mb3JtU3RhdGUsIHN0YXRlLmZpZWxkc1tuYW1lXSk7XG4gICAgICAgIG5vdGlmeVN1YnNjcmliZXIoc3Vic2NyaWJlciwgc3Vic2NyaXB0aW9uLCBmaWVsZFN0YXRlLCB1bmRlZmluZWQsIGZpbHRlckZpZWxkU3RhdGUsIHRydWUpO1xuICAgICAgICBzdGF0ZS5maWVsZHNbbmFtZV0ubGFzdEZpZWxkU3RhdGUgPSBmaWVsZFN0YXRlO1xuICAgICAgICBzZW50Rmlyc3ROb3RpZmljYXRpb24gPSB0cnVlO1xuICAgICAgfTtcblxuICAgICAgcnVuVmFsaWRhdGlvbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuXG4gICAgICAgIGlmICghc2VudEZpcnN0Tm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgZmlyc3ROb3RpZmljYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlbGV0ZSBzdGF0ZS5maWVsZHNbbmFtZV0udmFsaWRhdG9yc1tpbmRleF07XG4gICAgICAgIGRlbGV0ZSBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW25hbWVdLmVudHJpZXNbaW5kZXhdO1xuXG4gICAgICAgIGlmICghT2JqZWN0LmtleXMoc3RhdGUuZmllbGRTdWJzY3JpYmVyc1tuYW1lXS5lbnRyaWVzKS5sZW5ndGgpIHtcbiAgICAgICAgICBkZWxldGUgc3RhdGUuZmllbGRTdWJzY3JpYmVyc1tuYW1lXTtcbiAgICAgICAgICBkZWxldGUgc3RhdGUuZmllbGRzW25hbWVdO1xuICAgICAgICAgIHN0YXRlLmZvcm1TdGF0ZS5lcnJvcnMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUuZXJyb3JzLCBuYW1lLCB1bmRlZmluZWQpIHx8IHt9O1xuXG4gICAgICAgICAgaWYgKGRlc3Ryb3lPblVucmVnaXN0ZXIpIHtcbiAgICAgICAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCBuYW1lLCB1bmRlZmluZWQsIHRydWUpIHx8IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJ1blZhbGlkYXRpb24odW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChpbml0aWFsVmFsdWVzKSB7XG4gICAgICBpZiAoaW5pdGlhbFZhbHVlcyA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBzdGF0ZS5mb3JtU3RhdGUuaW5pdGlhbFZhbHVlcztcbiAgICAgIH1cblxuICAgICAgc3RhdGUuZm9ybVN0YXRlLnN1Ym1pdEZhaWxlZCA9IGZhbHNlO1xuICAgICAgc3RhdGUuZm9ybVN0YXRlLnN1Ym1pdFN1Y2NlZWRlZCA9IGZhbHNlO1xuICAgICAgZGVsZXRlIHN0YXRlLmZvcm1TdGF0ZS5zdWJtaXRFcnJvcjtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5mb3JtU3RhdGUuc3VibWl0RXJyb3JzO1xuICAgICAgZGVsZXRlIHN0YXRlLmZvcm1TdGF0ZS5sYXN0U3VibWl0dGVkVmFsdWVzO1xuICAgICAgYXBpLmluaXRpYWxpemUoaW5pdGlhbFZhbHVlcyB8fCB7fSk7XG4gICAgfSxcbiAgICByZXN1bWVWYWxpZGF0aW9uOiBmdW5jdGlvbiByZXN1bWVWYWxpZGF0aW9uKCkge1xuICAgICAgdmFsaWRhdGlvblBhdXNlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodmFsaWRhdGlvbkJsb2NrZWQpIHtcbiAgICAgICAgLy8gdmFsaWRhdGlvbiB3YXMgYXR0ZW1wdGVkIHdoaWxlIGl0IHdhcyBwYXVzZWQsIHNvIHJ1biBpdCBub3dcbiAgICAgICAgcnVuVmFsaWRhdGlvbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhbGlkYXRpb25CbG9ja2VkID0gZmFsc2U7XG4gICAgfSxcbiAgICBzZXRDb25maWc6IGZ1bmN0aW9uIHNldENvbmZpZyhuYW1lLCB2YWx1ZSkge1xuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIGNhc2UgJ2RlYnVnJzpcbiAgICAgICAgICBkZWJ1ZyA9IHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Rlc3Ryb3lPblVucmVnaXN0ZXInOlxuICAgICAgICAgIGRlc3Ryb3lPblVucmVnaXN0ZXIgPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdpbml0aWFsVmFsdWVzJzpcbiAgICAgICAgICBhcGkuaW5pdGlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAna2VlcERpcnR5T25SZWluaXRpYWxpemUnOlxuICAgICAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbXV0YXRvcnMnOlxuICAgICAgICAgIG11dGF0b3JzID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG11dGF0b3JzQXBpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBtdXRhdG9yc0FwaVtrZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgbXV0YXRvcnNBcGlba2V5XSA9IGdldE11dGF0b3JBcGkoa2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhtdXRhdG9yc0FwaSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBtdXRhdG9yc0FwaVtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnb25TdWJtaXQnOlxuICAgICAgICAgIG9uU3VibWl0ID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAndmFsaWRhdGUnOlxuICAgICAgICAgIHZhbGlkYXRlID0gdmFsdWU7XG4gICAgICAgICAgcnVuVmFsaWRhdGlvbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAndmFsaWRhdGVPbkJsdXInOlxuICAgICAgICAgIHZhbGlkYXRlT25CbHVyID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXNlZCBvcHRpb24gJyArIG5hbWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3VibWl0OiBmdW5jdGlvbiBzdWJtaXQoKSB7XG4gICAgICB2YXIgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlO1xuXG4gICAgICBpZiAoZm9ybVN0YXRlLnN1Ym1pdHRpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzU3luY0Vycm9ycygpKSB7XG4gICAgICAgIG1hcmtBbGxGaWVsZHNUb3VjaGVkKCk7XG4gICAgICAgIHN0YXRlLmZvcm1TdGF0ZS5zdWJtaXRGYWlsZWQgPSB0cnVlO1xuICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgIHJldHVybjsgLy8gbm8gc3VibWl0IGZvciB5b3UhIVxuICAgICAgfVxuXG4gICAgICB2YXIgYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNLZXlzID0gT2JqZWN0LmtleXMoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXMpO1xuXG4gICAgICBpZiAoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNLZXlzLmxlbmd0aCkge1xuICAgICAgICAvLyBzdGlsbCB3YWl0aW5nIG9uIGFzeW5jIHZhbGlkYXRpb24gdG8gY29tcGxldGUuLi5cbiAgICAgICAgUHJvbWlzZS5hbGwoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNLZXlzLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChhc3luY1ZhbGlkYXRpb25Qcm9taXNlc1tOdW1iZXIoa2V5KV0pO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIFtdKSkudGhlbihhcGkuc3VibWl0LCBhcGkuc3VibWl0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmllbGRCbG9ja2luZ1N1Ym1pdCA9IGJlZm9yZVN1Ym1pdCgpO1xuXG4gICAgICBpZiAoZmllbGRCbG9ja2luZ1N1Ym1pdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgICAgIHZhciBjb21wbGV0ZUNhbGxlZCA9IGZhbHNlO1xuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZShlcnJvcnMpIHtcbiAgICAgICAgZm9ybVN0YXRlLnN1Ym1pdHRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAoZXJyb3JzICYmIGhhc0FueUVycm9yKGVycm9ycykpIHtcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0RmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0U3VjY2VlZGVkID0gZmFsc2U7XG4gICAgICAgICAgZm9ybVN0YXRlLnN1Ym1pdEVycm9ycyA9IGVycm9ycztcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0RXJyb3IgPSBlcnJvcnNbRk9STV9FUlJPUl07XG4gICAgICAgICAgbWFya0FsbEZpZWxkc1RvdWNoZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZm9ybVN0YXRlLnN1Ym1pdEVycm9ycztcbiAgICAgICAgICBkZWxldGUgZm9ybVN0YXRlLnN1Ym1pdEVycm9yO1xuICAgICAgICAgIGZvcm1TdGF0ZS5zdWJtaXRGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0U3VjY2VlZGVkID0gdHJ1ZTtcbiAgICAgICAgICBhZnRlclN1Ym1pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICBjb21wbGV0ZUNhbGxlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHJlc29sdmVQcm9taXNlKSB7XG4gICAgICAgICAgcmVzb2x2ZVByb21pc2UoZXJyb3JzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgICB9O1xuXG4gICAgICBmb3JtU3RhdGUuc3VibWl0dGluZyA9IHRydWU7XG4gICAgICBmb3JtU3RhdGUuc3VibWl0RmFpbGVkID0gZmFsc2U7XG4gICAgICBmb3JtU3RhdGUuc3VibWl0U3VjY2VlZGVkID0gZmFsc2U7XG4gICAgICBmb3JtU3RhdGUubGFzdFN1Ym1pdHRlZFZhbHVlcyA9IF9leHRlbmRzKHt9LCBmb3JtU3RhdGUudmFsdWVzKTsgLy8gb25TdWJtaXQgaXMgZWl0aGVyIHN5bmMsIGNhbGxiYWNrIG9yIGFzeW5jIHdpdGggYSBQcm9taXNlXG5cbiAgICAgIHZhciByZXN1bHQgPSBvblN1Ym1pdChmb3JtU3RhdGUudmFsdWVzLCBhcGksIGNvbXBsZXRlKTtcblxuICAgICAgaWYgKCFjb21wbGV0ZUNhbGxlZCkge1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgLy8gb25TdWJtaXQgaXMgYXN5bmMgd2l0aCBhIFByb21pc2VcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7IC8vIGxldCBldmVyeW9uZSBrbm93IHdlIGFyZSBzdWJtaXR0aW5nXG5cbiAgICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpOyAvLyBub3RpZnkgZmllbGRzIGFsc29cblxuICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbihjb21wbGV0ZSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAob25TdWJtaXQubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAvLyBtdXN0IGJlIGFzeW5jLCBzbyB3ZSBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZVxuICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTsgLy8gbGV0IGV2ZXJ5b25lIGtub3cgd2UgYXJlIHN1Ym1pdHRpbmdcblxuICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7IC8vIG5vdGlmeSBmaWVsZHMgYWxzb1xuXG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb25TdWJtaXQgaXMgc3luY1xuICAgICAgICAgIGNvbXBsZXRlKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKHN1YnNjcmliZXIsIHN1YnNjcmlwdGlvbikge1xuICAgICAgaWYgKCFzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY2FsbGJhY2sgZ2l2ZW4uJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc3Vic2NyaXB0aW9uIHByb3ZpZGVkLiBXaGF0IHZhbHVlcyBkbyB5b3Ugd2FudCB0byBsaXN0ZW4gdG8/Jyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBtZW1vaXplZCA9IG1lbW9pemUoc3Vic2NyaWJlcik7XG4gICAgICB2YXIgc3Vic2NyaWJlcnMgPSBzdGF0ZS5zdWJzY3JpYmVycyxcbiAgICAgICAgICBsYXN0Rm9ybVN0YXRlID0gc3RhdGUubGFzdEZvcm1TdGF0ZTtcbiAgICAgIHZhciBpbmRleCA9IHN1YnNjcmliZXJzLmluZGV4Kys7XG4gICAgICBzdWJzY3JpYmVycy5lbnRyaWVzW2luZGV4XSA9IHtcbiAgICAgICAgc3Vic2NyaWJlcjogbWVtb2l6ZWQsXG4gICAgICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uXG4gICAgICB9O1xuICAgICAgdmFyIG5leHRGb3JtU3RhdGUgPSBjYWxjdWxhdGVOZXh0Rm9ybVN0YXRlKCk7XG5cbiAgICAgIGlmIChuZXh0Rm9ybVN0YXRlICE9PSBsYXN0Rm9ybVN0YXRlKSB7XG4gICAgICAgIHN0YXRlLmxhc3RGb3JtU3RhdGUgPSBuZXh0Rm9ybVN0YXRlO1xuICAgICAgfVxuXG4gICAgICBub3RpZnlTdWJzY3JpYmVyKG1lbW9pemVkLCBzdWJzY3JpcHRpb24sIG5leHRGb3JtU3RhdGUsIG5leHRGb3JtU3RhdGUsIGZpbHRlckZvcm1TdGF0ZSwgdHJ1ZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWxldGUgc3Vic2NyaWJlcnMuZW50cmllc1tpbmRleF07XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGFwaTtcbn07XG5cbi8vXG5cbmV4cG9ydCB7IEFSUkFZX0VSUk9SLCBGT1JNX0VSUk9SLCBjb25maWdPcHRpb25zLCBjcmVhdGVGb3JtLCBmaWVsZFN1YnNjcmlwdGlvbkl0ZW1zLCBmb3JtU3Vic2NyaXB0aW9uSXRlbXMsIGdldEluLCBzZXRJbiwgdmVyc2lvbiB9O1xuIiwibW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuKXtpZih0W25dKXJldHVybiB0W25dLmV4cG9ydHM7dmFyIG89dFtuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbbl0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsciksby5sPSEwLG8uZXhwb3J0c31yZXR1cm4gci5tPWUsci5jPXQsci5kPWZ1bmN0aW9uKGUsdCxuKXtyLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxyLnI9ZnVuY3Rpb24oZSl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sci50PWZ1bmN0aW9uKGUsdCl7aWYoMSZ0JiYoZT1yKGUpKSw4JnQpcmV0dXJuIGU7aWYoNCZ0JiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoci5yKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KSwyJnQmJlwic3RyaW5nXCIhPXR5cGVvZiBlKWZvcih2YXIgbyBpbiBlKXIuZChuLG8sZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19LmJpbmQobnVsbCxvKSk7cmV0dXJuIG59LHIubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gci5kKHQsXCJhXCIsdCksdH0sci5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxyLnA9XCJcIixyKHIucz0wKX0oW2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gciYmZSh0LnByb3RvdHlwZSxyKSxuJiZlKHQsbiksdH19KCksYT1pKHIoMSkpLHU9aShyKDQpKSxsPWkocig3KSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIHM9e2l0ZW1zOnUuZGVmYXVsdC5hcnJheS5pc1JlcXVpcmVkLG9uQ2hhbmdlUGFnZTp1LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGluaXRpYWxQYWdlOnUuZGVmYXVsdC5udW1iZXIscGFnZVNpemU6dS5kZWZhdWx0Lm51bWJlcixtYXhQYWdlczp1LmRlZmF1bHQubnVtYmVyLGxhYmVsczp1LmRlZmF1bHQub2JqZWN0LHN0eWxlczp1LmRlZmF1bHQub2JqZWN0LGRpc2FibGVEZWZhdWx0U3R5bGVzOnUuZGVmYXVsdC5ib29sfSxjPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyx0KTt2YXIgcj1mdW5jdGlvbihlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hdHx8XCJvYmplY3RcIiE9dHlwZW9mIHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQ/ZTp0fSh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsKHRoaXMsZSkpO3JldHVybiByLnN0YXRlPXtwYWdlcjp7fX0sci5zdHlsZXM9e30sZS5kaXNhYmxlRGVmYXVsdFN0eWxlc3x8KHIuc3R5bGVzPXt1bDp7bWFyZ2luOjAscGFkZGluZzowLGRpc3BsYXk6XCJpbmxpbmUtYmxvY2tcIn0sbGk6e2xpc3RTdHlsZTpcIm5vbmVcIixkaXNwbGF5OlwiaW5saW5lXCIsdGV4dEFsaWduOlwiY2VudGVyXCJ9LGE6e2N1cnNvcjpcInBvaW50ZXJcIixwYWRkaW5nOlwiNnB4IDEycHhcIixkaXNwbGF5OlwiYmxvY2tcIixmbG9hdDpcImxlZnRcIn19KSxlLnN0eWxlcyYmKHIuc3R5bGVzPXt1bDpuKHt9LHIuc3R5bGVzLnVsLGUuc3R5bGVzLnVsKSxsaTpuKHt9LHIuc3R5bGVzLmxpLGUuc3R5bGVzLmxpKSxhOm4oe30sci5zdHlsZXMuYSxlLnN0eWxlcy5hKX0pLHJ9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9KHQsYS5kZWZhdWx0LkNvbXBvbmVudCksbyh0LFt7a2V5OlwiY29tcG9uZW50V2lsbE1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLml0ZW1zJiZ0aGlzLnByb3BzLml0ZW1zLmxlbmd0aCYmdGhpcy5zZXRQYWdlKHRoaXMucHJvcHMuaW5pdGlhbFBhZ2UpfX0se2tleTpcImNvbXBvbmVudERpZFVwZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5wcm9wcy5pdGVtcyE9PWUuaXRlbXMmJnRoaXMuc2V0UGFnZSh0aGlzLnByb3BzLmluaXRpYWxQYWdlKX19LHtrZXk6XCJzZXRQYWdlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxyPXQuaXRlbXMsbj10LnBhZ2VTaXplLG89dC5tYXhQYWdlcyxhPXRoaXMuc3RhdGUucGFnZXI7YT0oMCxsLmRlZmF1bHQpKHIubGVuZ3RoLGUsbixvKTt2YXIgdT1yLnNsaWNlKGEuc3RhcnRJbmRleCxhLmVuZEluZGV4KzEpO3RoaXMuc2V0U3RhdGUoe3BhZ2VyOmF9KSx0aGlzLnByb3BzLm9uQ2hhbmdlUGFnZSh1KX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnN0YXRlLnBhZ2VyLHI9dGhpcy5wcm9wcy5sYWJlbHMsbj10aGlzLnN0eWxlcztyZXR1cm4hdC5wYWdlc3x8dC5wYWdlcy5sZW5ndGg8PTE/bnVsbDphLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInVsXCIse2NsYXNzTmFtZTpcInBhZ2luYXRpb25cIixzdHlsZTpuLnVsfSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImxpXCIse2NsYXNzTmFtZTpcInBhZ2UtaXRlbSBmaXJzdCBcIisoMT09PXQuY3VycmVudFBhZ2U/XCJkaXNhYmxlZFwiOlwiXCIpLHN0eWxlOm4ubGl9LGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYVwiLHtjbGFzc05hbWU6XCJwYWdlLWxpbmtcIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0UGFnZSgxKX0sc3R5bGU6bi5hfSxyLmZpcnN0KSksYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLHtjbGFzc05hbWU6XCJwYWdlLWl0ZW0gcHJldmlvdXMgXCIrKDE9PT10LmN1cnJlbnRQYWdlP1wiZGlzYWJsZWRcIjpcIlwiKSxzdHlsZTpuLmxpfSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIix7Y2xhc3NOYW1lOlwicGFnZS1saW5rXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldFBhZ2UodC5jdXJyZW50UGFnZS0xKX0sc3R5bGU6bi5hfSxyLnByZXZpb3VzKSksdC5wYWdlcy5tYXAoZnVuY3Rpb24ocixvKXtyZXR1cm4gYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLHtrZXk6byxjbGFzc05hbWU6XCJwYWdlLWl0ZW0gcGFnZS1udW1iZXIgXCIrKHQuY3VycmVudFBhZ2U9PT1yP1wiYWN0aXZlXCI6XCJcIiksc3R5bGU6bi5saX0sYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJhXCIse2NsYXNzTmFtZTpcInBhZ2UtbGlua1wiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXRQYWdlKHIpfSxzdHlsZTpuLmF9LHIpKX0pLGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGlcIix7Y2xhc3NOYW1lOlwicGFnZS1pdGVtIG5leHQgXCIrKHQuY3VycmVudFBhZ2U9PT10LnRvdGFsUGFnZXM/XCJkaXNhYmxlZFwiOlwiXCIpLHN0eWxlOm4ubGl9LGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYVwiLHtjbGFzc05hbWU6XCJwYWdlLWxpbmtcIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0UGFnZSh0LmN1cnJlbnRQYWdlKzEpfSxzdHlsZTpuLmF9LHIubmV4dCkpLGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGlcIix7Y2xhc3NOYW1lOlwicGFnZS1pdGVtIGxhc3QgXCIrKHQuY3VycmVudFBhZ2U9PT10LnRvdGFsUGFnZXM/XCJkaXNhYmxlZFwiOlwiXCIpLHN0eWxlOm4ubGl9LGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYVwiLHtjbGFzc05hbWU6XCJwYWdlLWxpbmtcIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0UGFnZSh0LnRvdGFsUGFnZXMpfSxzdHlsZTpuLmF9LHIubGFzdCkpKX19XSksdH0oKTtjLnByb3BUeXBlcz1zLGMuZGVmYXVsdFByb3BzPXtpbml0aWFsUGFnZToxLHBhZ2VTaXplOjEwLG1heFBhZ2VzOjEwLGxhYmVsczp7Zmlyc3Q6XCJGaXJzdFwiLGxhc3Q6XCJMYXN0XCIscHJldmlvdXM6XCJQcmV2aW91c1wiLG5leHQ6XCJOZXh0XCJ9fSx0LmRlZmF1bHQ9Y30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1yKDIpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7XG4vKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjguNlxuICogcmVhY3QucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL3ZhciBuPXIoMyksbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IsYT1vP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLHU9bz9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LGw9bz9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsaT1vP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCxzPW8/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LGM9bz9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksZj1vP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLHA9bz9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLHk9bz9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIsZD1vP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyxtPW8/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsZz1vP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LGI9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7ZnVuY3Rpb24gdihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aC0xLHI9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIitlLG49MDtuPHQ7bisrKXIrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW24rMV0pOyFmdW5jdGlvbihlLHQscixuLG8sYSx1LGwpe2lmKCFlKXtpZihlPXZvaWQgMCx2b2lkIDA9PT10KWU9RXJyb3IoXCJNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwiKTtlbHNle3ZhciBpPVtyLG4sbyxhLHUsbF0scz0wOyhlPUVycm9yKHQucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiBpW3MrK119KSkpLm5hbWU9XCJJbnZhcmlhbnQgVmlvbGF0aW9uXCJ9dGhyb3cgZS5mcmFtZXNUb1BvcD0xLGV9fSghMSxcIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIitlK1wiOyB2aXNpdCAlcyBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIFwiLHIpfXZhciBoPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxQPXt9O2Z1bmN0aW9uIF8oZSx0LHIpe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9UCx0aGlzLnVwZGF0ZXI9cnx8aH1mdW5jdGlvbiBPKCl7fWZ1bmN0aW9uIFMoZSx0LHIpe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9UCx0aGlzLnVwZGF0ZXI9cnx8aH1fLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LF8ucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPWUmJnYoXCI4NVwiKSx0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsZSx0LFwic2V0U3RhdGVcIil9LF8ucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxlLFwiZm9yY2VVcGRhdGVcIil9LE8ucHJvdG90eXBlPV8ucHJvdG90eXBlO3ZhciBrPVMucHJvdG90eXBlPW5ldyBPO2suY29uc3RydWN0b3I9UyxuKGssXy5wcm90b3R5cGUpLGsuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIGo9e2N1cnJlbnQ6bnVsbH0seD17Y3VycmVudDpudWxsfSx3PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksRT17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIEMoZSx0LHIpe3ZhciBuPXZvaWQgMCxvPXt9LHU9bnVsbCxsPW51bGw7aWYobnVsbCE9dClmb3IobiBpbiB2b2lkIDAhPT10LnJlZiYmKGw9dC5yZWYpLHZvaWQgMCE9PXQua2V5JiYodT1cIlwiK3Qua2V5KSx0KXcuY2FsbCh0LG4pJiYhRS5oYXNPd25Qcm9wZXJ0eShuKSYmKG9bbl09dFtuXSk7dmFyIGk9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1pKW8uY2hpbGRyZW49cjtlbHNlIGlmKDE8aSl7Zm9yKHZhciBzPUFycmF5KGkpLGM9MDtjPGk7YysrKXNbY109YXJndW1lbnRzW2MrMl07by5jaGlsZHJlbj1zfWlmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihuIGluIGk9ZS5kZWZhdWx0UHJvcHMpdm9pZCAwPT09b1tuXSYmKG9bbl09aVtuXSk7cmV0dXJueyQkdHlwZW9mOmEsdHlwZTplLGtleTp1LHJlZjpsLHByb3BzOm8sX293bmVyOnguY3VycmVudH19ZnVuY3Rpb24gUihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1hfXZhciAkPS9cXC8rL2csVD1bXTtmdW5jdGlvbiBNKGUsdCxyLG4pe2lmKFQubGVuZ3RoKXt2YXIgbz1ULnBvcCgpO3JldHVybiBvLnJlc3VsdD1lLG8ua2V5UHJlZml4PXQsby5mdW5jPXIsby5jb250ZXh0PW4sby5jb3VudD0wLG99cmV0dXJue3Jlc3VsdDplLGtleVByZWZpeDp0LGZ1bmM6cixjb250ZXh0Om4sY291bnQ6MH19ZnVuY3Rpb24gTihlKXtlLnJlc3VsdD1udWxsLGUua2V5UHJlZml4PW51bGwsZS5mdW5jPW51bGwsZS5jb250ZXh0PW51bGwsZS5jb3VudD0wLDEwPlQubGVuZ3RoJiZULnB1c2goZSl9ZnVuY3Rpb24gSShlLHQscil7cmV0dXJuIG51bGw9PWU/MDpmdW5jdGlvbiBlKHQscixuLG8pe3ZhciBsPXR5cGVvZiB0O1widW5kZWZpbmVkXCIhPT1sJiZcImJvb2xlYW5cIiE9PWx8fCh0PW51bGwpO3ZhciBpPSExO2lmKG51bGw9PT10KWk9ITA7ZWxzZSBzd2l0Y2gobCl7Y2FzZVwic3RyaW5nXCI6Y2FzZVwibnVtYmVyXCI6aT0hMDticmVhaztjYXNlXCJvYmplY3RcIjpzd2l0Y2godC4kJHR5cGVvZil7Y2FzZSBhOmNhc2UgdTppPSEwfX1pZihpKXJldHVybiBuKG8sdCxcIlwiPT09cj9cIi5cIitBKHQsMCk6ciksMTtpZihpPTAscj1cIlwiPT09cj9cIi5cIjpyK1wiOlwiLEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBjPXIrQShsPXRbc10scyk7aSs9ZShsLGMsbixvKX1lbHNlIGlmKGM9bnVsbD09PXR8fFwib2JqZWN0XCIhPXR5cGVvZiB0P251bGw6XCJmdW5jdGlvblwiPT10eXBlb2YoYz1iJiZ0W2JdfHx0W1wiQEBpdGVyYXRvclwiXSk/YzpudWxsLFwiZnVuY3Rpb25cIj09dHlwZW9mIGMpZm9yKHQ9Yy5jYWxsKHQpLHM9MDshKGw9dC5uZXh0KCkpLmRvbmU7KWkrPWUobD1sLnZhbHVlLGM9citBKGwscysrKSxuLG8pO2Vsc2VcIm9iamVjdFwiPT09bCYmdihcIjMxXCIsXCJbb2JqZWN0IE9iamVjdF1cIj09KG49XCJcIit0KT9cIm9iamVjdCB3aXRoIGtleXMge1wiK09iamVjdC5rZXlzKHQpLmpvaW4oXCIsIFwiKStcIn1cIjpuLFwiXCIpO3JldHVybiBpfShlLFwiXCIsdCxyKX1mdW5jdGlvbiBBKGUsdCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT1lLmtleT9mdW5jdGlvbihlKXt2YXIgdD17XCI9XCI6XCI9MFwiLFwiOlwiOlwiPTJcIn07cmV0dXJuXCIkXCIrKFwiXCIrZSkucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9KGUua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBxKGUsdCl7ZS5mdW5jLmNhbGwoZS5jb250ZXh0LHQsZS5jb3VudCsrKX1mdW5jdGlvbiBVKGUsdCxyKXt2YXIgbj1lLnJlc3VsdCxvPWUua2V5UHJlZml4O2U9ZS5mdW5jLmNhbGwoZS5jb250ZXh0LHQsZS5jb3VudCsrKSxBcnJheS5pc0FycmF5KGUpP0QoZSxuLHIsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTpudWxsIT1lJiYoUihlKSYmKGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6YSx0eXBlOmUudHlwZSxrZXk6dCxyZWY6ZS5yZWYscHJvcHM6ZS5wcm9wcyxfb3duZXI6ZS5fb3duZXJ9fShlLG8rKCFlLmtleXx8dCYmdC5rZXk9PT1lLmtleT9cIlwiOihcIlwiK2Uua2V5KS5yZXBsYWNlKCQsXCIkJi9cIikrXCIvXCIpK3IpKSxuLnB1c2goZSkpfWZ1bmN0aW9uIEQoZSx0LHIsbixvKXt2YXIgYT1cIlwiO251bGwhPXImJihhPShcIlwiK3IpLnJlcGxhY2UoJCxcIiQmL1wiKStcIi9cIiksSShlLFUsdD1NKHQsYSxuLG8pKSxOKHQpfWZ1bmN0aW9uIEwoKXt2YXIgZT1qLmN1cnJlbnQ7cmV0dXJuIG51bGw9PT1lJiZ2KFwiMzIxXCIpLGV9dmFyIEY9e0NoaWxkcmVuOnttYXA6ZnVuY3Rpb24oZSx0LHIpe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIG49W107cmV0dXJuIEQoZSxuLG51bGwsdCxyKSxufSxmb3JFYWNoOmZ1bmN0aW9uKGUsdCxyKXtpZihudWxsPT1lKXJldHVybiBlO0koZSxxLHQ9TShudWxsLG51bGwsdCxyKSksTih0KX0sY291bnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIEkoZSxmdW5jdGlvbigpe3JldHVybiBudWxsfSxudWxsKX0sdG9BcnJheTpmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gRChlLHQsbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHR9LG9ubHk6ZnVuY3Rpb24oZSl7cmV0dXJuIFIoZSl8fHYoXCIxNDNcIiksZX19LGNyZWF0ZVJlZjpmdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fSxDb21wb25lbnQ6XyxQdXJlQ29tcG9uZW50OlMsY3JlYXRlQ29udGV4dDpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1udWxsKSwoZT17JCR0eXBlb2Y6ZixfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6dCxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9KS5Qcm92aWRlcj17JCR0eXBlb2Y6YyxfY29udGV4dDplfSxlLkNvbnN1bWVyPWV9LGZvcndhcmRSZWY6ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOnkscmVuZGVyOmV9fSxsYXp5OmZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpnLF9jdG9yOmUsX3N0YXR1czotMSxfcmVzdWx0Om51bGx9fSxtZW1vOmZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOm0sdHlwZTplLGNvbXBhcmU6dm9pZCAwPT09dD9udWxsOnR9fSx1c2VDYWxsYmFjazpmdW5jdGlvbihlLHQpe3JldHVybiBMKCkudXNlQ2FsbGJhY2soZSx0KX0sdXNlQ29udGV4dDpmdW5jdGlvbihlLHQpe3JldHVybiBMKCkudXNlQ29udGV4dChlLHQpfSx1c2VFZmZlY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTCgpLnVzZUVmZmVjdChlLHQpfSx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTCgpLnVzZUltcGVyYXRpdmVIYW5kbGUoZSx0LHIpfSx1c2VEZWJ1Z1ZhbHVlOmZ1bmN0aW9uKCl7fSx1c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTCgpLnVzZUxheW91dEVmZmVjdChlLHQpfSx1c2VNZW1vOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEwoKS51c2VNZW1vKGUsdCl9LHVzZVJlZHVjZXI6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBMKCkudXNlUmVkdWNlcihlLHQscil9LHVzZVJlZjpmdW5jdGlvbihlKXtyZXR1cm4gTCgpLnVzZVJlZihlKX0sdXNlU3RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIEwoKS51c2VTdGF0ZShlKX0sRnJhZ21lbnQ6bCxTdHJpY3RNb2RlOmksU3VzcGVuc2U6ZCxjcmVhdGVFbGVtZW50OkMsY2xvbmVFbGVtZW50OmZ1bmN0aW9uKGUsdCxyKXtudWxsPT1lJiZ2KFwiMjY3XCIsZSk7dmFyIG89dm9pZCAwLHU9bih7fSxlLnByb3BzKSxsPWUua2V5LGk9ZS5yZWYscz1lLl9vd25lcjtpZihudWxsIT10KXt2b2lkIDAhPT10LnJlZiYmKGk9dC5yZWYscz14LmN1cnJlbnQpLHZvaWQgMCE9PXQua2V5JiYobD1cIlwiK3Qua2V5KTt2YXIgYz12b2lkIDA7Zm9yKG8gaW4gZS50eXBlJiZlLnR5cGUuZGVmYXVsdFByb3BzJiYoYz1lLnR5cGUuZGVmYXVsdFByb3BzKSx0KXcuY2FsbCh0LG8pJiYhRS5oYXNPd25Qcm9wZXJ0eShvKSYmKHVbb109dm9pZCAwPT09dFtvXSYmdm9pZCAwIT09Yz9jW29dOnRbb10pfWlmKDE9PT0obz1hcmd1bWVudHMubGVuZ3RoLTIpKXUuY2hpbGRyZW49cjtlbHNlIGlmKDE8byl7Yz1BcnJheShvKTtmb3IodmFyIGY9MDtmPG87ZisrKWNbZl09YXJndW1lbnRzW2YrMl07dS5jaGlsZHJlbj1jfXJldHVybnskJHR5cGVvZjphLHR5cGU6ZS50eXBlLGtleTpsLHJlZjppLHByb3BzOnUsX293bmVyOnN9fSxjcmVhdGVGYWN0b3J5OmZ1bmN0aW9uKGUpe3ZhciB0PUMuYmluZChudWxsLGUpO3JldHVybiB0LnR5cGU9ZSx0fSxpc1ZhbGlkRWxlbWVudDpSLHZlcnNpb246XCIxNi44LjZcIix1bnN0YWJsZV9Db25jdXJyZW50TW9kZTpwLHVuc3RhYmxlX1Byb2ZpbGVyOnMsX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6aixSZWFjdEN1cnJlbnRPd25lcjp4LGFzc2lnbjpufX0sej17ZGVmYXVsdDpGfSxWPXomJkZ8fHo7ZS5leHBvcnRzPVYuZGVmYXVsdHx8Vn0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO1xuLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovdmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgZT1uZXcgU3RyaW5nKFwiYWJjXCIpO2lmKGVbNV09XCJkZVwiLFwiNVwiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSlbMF0pcmV0dXJuITE7Zm9yKHZhciB0PXt9LHI9MDtyPDEwO3IrKyl0W1wiX1wiK1N0cmluZy5mcm9tQ2hhckNvZGUocildPXI7aWYoXCIwMTIzNDU2Nzg5XCIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KS5qb2luKFwiXCIpKXJldHVybiExO3ZhciBuPXt9O3JldHVyblwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIi5zcGxpdChcIlwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZV09ZX0pLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oXCJcIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsdSxsPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QoZSl9KGUpLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXtmb3IodmFyIHMgaW4gcj1PYmplY3QoYXJndW1lbnRzW2ldKSlvLmNhbGwocixzKSYmKGxbc109cltzXSk7aWYobil7dT1uKHIpO2Zvcih2YXIgYz0wO2M8dS5sZW5ndGg7YysrKWEuY2FsbChyLHVbY10pJiYobFt1W2NdXT1yW3VbY11dKX19cmV0dXJuIGx9fSxmdW5jdGlvbihlLHQscil7ZS5leHBvcnRzPXIoNSkoKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNik7ZnVuY3Rpb24gbygpe31mdW5jdGlvbiBhKCl7fWEucmVzZXRXYXJuaW5nQ2FjaGU9byxlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG8sYSx1KXtpZih1IT09bil7dmFyIGw9bmV3IEVycm9yKFwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlc1wiKTt0aHJvdyBsLm5hbWU9XCJJbnZhcmlhbnQgVmlvbGF0aW9uXCIsbH19ZnVuY3Rpb24gdCgpe3JldHVybiBlfWUuaXNSZXF1aXJlZD1lO3ZhciByPXthcnJheTplLGJvb2w6ZSxmdW5jOmUsbnVtYmVyOmUsb2JqZWN0OmUsc3RyaW5nOmUsc3ltYm9sOmUsYW55OmUsYXJyYXlPZjp0LGVsZW1lbnQ6ZSxlbGVtZW50VHlwZTplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnQsZXhhY3Q6dCxjaGVja1Byb3BUeXBlczphLHJlc2V0V2FybmluZ0NhY2hlOm99O3JldHVybiByLlByb3BUeXBlcz1yLHJ9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPVwiU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRURcIn0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT10JiYodD0xKSx2b2lkIDA9PT1yJiYocj0xMCksdm9pZCAwPT09biYmKG49MTApO3ZhciBvLGEsdT1NYXRoLmNlaWwoZS9yKTtpZih0PDE/dD0xOnQ+dSYmKHQ9dSksdTw9bilvPTEsYT11O2Vsc2V7dmFyIGw9TWF0aC5mbG9vcihuLzIpLGk9TWF0aC5jZWlsKG4vMiktMTt0PD1sPyhvPTEsYT1uKTp0K2k+PXU/KG89dS1uKzEsYT11KToobz10LWwsYT10K2kpfXZhciBzPSh0LTEpKnIsYz1NYXRoLm1pbihzK3ItMSxlLTEpLGY9QXJyYXkuZnJvbShBcnJheShhKzEtbykua2V5cygpKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG8rZX0pO3JldHVybnt0b3RhbEl0ZW1zOmUsY3VycmVudFBhZ2U6dCxwYWdlU2l6ZTpyLHRvdGFsUGFnZXM6dSxzdGFydFBhZ2U6byxlbmRQYWdlOmEsc3RhcnRJbmRleDpzLGVuZEluZGV4OmMscGFnZXM6Zn19fV0pOyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVtaXplKCBmbiwgb3B0aW9ucyApIHtcblx0dmFyIHNpemUgPSAwLFxuXHRcdG1heFNpemUsIGhlYWQsIHRhaWw7XG5cblx0aWYgKCBvcHRpb25zICYmIG9wdGlvbnMubWF4U2l6ZSApIHtcblx0XHRtYXhTaXplID0gb3B0aW9ucy5tYXhTaXplO1xuXHR9XG5cblx0ZnVuY3Rpb24gbWVtb2l6ZWQoIC8qIC4uLmFyZ3MgKi8gKSB7XG5cdFx0dmFyIG5vZGUgPSBoZWFkLFxuXHRcdFx0bGVuID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRcdGFyZ3MsIGk7XG5cblx0XHRzZWFyY2hDYWNoZTogd2hpbGUgKCBub2RlICkge1xuXHRcdFx0Ly8gUGVyZm9ybSBhIHNoYWxsb3cgZXF1YWxpdHkgdGVzdCB0byBjb25maXJtIHRoYXQgd2hldGhlciB0aGUgbm9kZVxuXHRcdFx0Ly8gdW5kZXIgdGVzdCBpcyBhIGNhbmRpZGF0ZSBmb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQuIFR3byBhcnJheXNcblx0XHRcdC8vIGFyZSBzaGFsbG93bHkgZXF1YWwgaWYgdGhlaXIgbGVuZ3RoIG1hdGNoZXMgYW5kIGVhY2ggZW50cnkgaXNcblx0XHRcdC8vIHN0cmljdGx5IGVxdWFsIGJldHdlZW4gdGhlIHR3byBzZXRzLiBBdm9pZCBhYnN0cmFjdGluZyB0byBhXG5cdFx0XHQvLyBmdW5jdGlvbiB3aGljaCBjb3VsZCBpbmN1ciBhbiBhcmd1bWVudHMgbGVha2luZyBkZW9wdGltaXphdGlvbi5cblxuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciBub2RlIGFyZ3VtZW50cyBtYXRjaCBhcmd1bWVudHMgbGVuZ3RoXG5cdFx0XHRpZiAoIG5vZGUuYXJncy5sZW5ndGggIT09IGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdG5vZGUgPSBub2RlLm5leHQ7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIG5vZGUgYXJndW1lbnRzIG1hdGNoIGFyZ3VtZW50cyB2YWx1ZXNcblx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGlmICggbm9kZS5hcmdzWyBpIF0gIT09IGFyZ3VtZW50c1sgaSBdICkge1xuXHRcdFx0XHRcdG5vZGUgPSBub2RlLm5leHQ7XG5cdFx0XHRcdFx0Y29udGludWUgc2VhcmNoQ2FjaGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCB3ZSBjYW4gYXNzdW1lIHdlJ3ZlIGZvdW5kIGEgbWF0Y2hcblxuXHRcdFx0Ly8gU3VyZmFjZSBtYXRjaGVkIG5vZGUgdG8gaGVhZCBpZiBub3QgYWxyZWFkeVxuXHRcdFx0aWYgKCBub2RlICE9PSBoZWFkICkge1xuXHRcdFx0XHQvLyBBcyB0YWlsLCBzaGlmdCB0byBwcmV2aW91cy4gTXVzdCBvbmx5IHNoaWZ0IGlmIG5vdCBhbHNvXG5cdFx0XHRcdC8vIGhlYWQsIHNpbmNlIGlmIGJvdGggaGVhZCBhbmQgdGFpbCwgdGhlcmUgaXMgbm8gcHJldmlvdXMuXG5cdFx0XHRcdGlmICggbm9kZSA9PT0gdGFpbCApIHtcblx0XHRcdFx0XHR0YWlsID0gbm9kZS5wcmV2O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRqdXN0IHNpYmxpbmdzIHRvIHBvaW50IHRvIGVhY2ggb3RoZXIuIElmIG5vZGUgd2FzIHRhaWwsXG5cdFx0XHRcdC8vIHRoaXMgYWxzbyBoYW5kbGVzIG5ldyB0YWlsJ3MgZW1wdHkgYG5leHRgIGFzc2lnbm1lbnQuXG5cdFx0XHRcdG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuXHRcdFx0XHRpZiAoIG5vZGUubmV4dCApIHtcblx0XHRcdFx0XHRub2RlLm5leHQucHJldiA9IG5vZGUucHJldjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG5vZGUubmV4dCA9IGhlYWQ7XG5cdFx0XHRcdG5vZGUucHJldiA9IG51bGw7XG5cdFx0XHRcdGhlYWQucHJldiA9IG5vZGU7XG5cdFx0XHRcdGhlYWQgPSBub2RlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gaW1tZWRpYXRlbHlcblx0XHRcdHJldHVybiBub2RlLnZhbDtcblx0XHR9XG5cblx0XHQvLyBObyBjYWNoZWQgdmFsdWUgZm91bmQuIENvbnRpbnVlIHRvIGluc2VydGlvbiBwaGFzZTpcblxuXHRcdC8vIENyZWF0ZSBhIGNvcHkgb2YgYXJndW1lbnRzIChhdm9pZCBsZWFraW5nIGRlb3B0aW1pemF0aW9uKVxuXHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGxlbiApO1xuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRub2RlID0ge1xuXHRcdFx0YXJnczogYXJncyxcblxuXHRcdFx0Ly8gR2VuZXJhdGUgdGhlIHJlc3VsdCBmcm9tIG9yaWdpbmFsIGZ1bmN0aW9uXG5cdFx0XHR2YWw6IGZuLmFwcGx5KCBudWxsLCBhcmdzIClcblx0XHR9O1xuXG5cdFx0Ly8gRG9uJ3QgbmVlZCB0byBjaGVjayB3aGV0aGVyIG5vZGUgaXMgYWxyZWFkeSBoZWFkLCBzaW5jZSBpdCB3b3VsZFxuXHRcdC8vIGhhdmUgYmVlbiByZXR1cm5lZCBhYm92ZSBhbHJlYWR5IGlmIGl0IHdhc1xuXG5cdFx0Ly8gU2hpZnQgZXhpc3RpbmcgaGVhZCBkb3duIGxpc3Rcblx0XHRpZiAoIGhlYWQgKSB7XG5cdFx0XHRoZWFkLnByZXYgPSBub2RlO1xuXHRcdFx0bm9kZS5uZXh0ID0gaGVhZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSWYgbm8gaGVhZCwgZm9sbG93cyB0aGF0IHRoZXJlJ3Mgbm8gdGFpbCAoYXQgaW5pdGlhbCBvciByZXNldClcblx0XHRcdHRhaWwgPSBub2RlO1xuXHRcdH1cblxuXHRcdC8vIFRyaW0gdGFpbCBpZiB3ZSdyZSByZWFjaGVkIG1heCBzaXplIGFuZCBhcmUgcGVuZGluZyBjYWNoZSBpbnNlcnRpb25cblx0XHRpZiAoIHNpemUgPT09IG1heFNpemUgKSB7XG5cdFx0XHR0YWlsID0gdGFpbC5wcmV2O1xuXHRcdFx0dGFpbC5uZXh0ID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2l6ZSsrO1xuXHRcdH1cblxuXHRcdGhlYWQgPSBub2RlO1xuXG5cdFx0cmV0dXJuIG5vZGUudmFsO1xuXHR9XG5cblx0bWVtb2l6ZWQuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0XHRoZWFkID0gbnVsbDtcblx0XHR0YWlsID0gbnVsbDtcblx0XHRzaXplID0gMDtcblx0fTtcblxuXHRpZiAoIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcgKSB7XG5cdFx0Ly8gQ2FjaGUgaXMgbm90IGV4cG9zZWQgaW4gdGhlIHB1YmxpYyBBUEksIGJ1dCB1c2VkIGluIHRlc3RzIHRvIGVuc3VyZVxuXHRcdC8vIGV4cGVjdGVkIGxpc3QgcHJvZ3Jlc3Npb25cblx0XHRtZW1vaXplZC5nZXRDYWNoZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgaGVhZCwgdGFpbCwgc2l6ZSBdO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gbWVtb2l6ZWQ7XG59O1xuIiwiZnVuY3Rpb24gYXJlSW5wdXRzRXF1YWwobmV3SW5wdXRzLCBsYXN0SW5wdXRzKSB7XG4gIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5ld0lucHV0c1tpXSAhPT0gbGFzdElucHV0c1tpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpbmRleCAocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkge1xuICAgIGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDtcbiAgfVxuXG4gIHZhciBsYXN0VGhpcztcbiAgdmFyIGxhc3RBcmdzID0gW107XG4gIHZhciBsYXN0UmVzdWx0O1xuICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuXG4gIHZhciByZXN1bHQgPSBmdW5jdGlvbiByZXN1bHQoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG5ld0FyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBuZXdBcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICB9XG5cbiAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgY2FsbGVkT25jZSA9IHRydWU7XG4gICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgfTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbmRleDtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuMlxuKGZ1bmN0aW9uKCkge1xuICB2YXIgZ2V0TmFub1NlY29uZHMsIGhydGltZSwgbG9hZFRpbWUsIG1vZHVsZUxvYWRUaW1lLCBub2RlTG9hZFRpbWUsIHVwVGltZTtcblxuICBpZiAoKHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwZXJmb3JtYW5jZSAhPT0gbnVsbCkgJiYgcGVyZm9ybWFuY2Uubm93KSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKCh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzICE9PSBudWxsKSAmJiBwcm9jZXNzLmhydGltZSkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gKGdldE5hbm9TZWNvbmRzKCkgLSBub2RlTG9hZFRpbWUpIC8gMWU2O1xuICAgIH07XG4gICAgaHJ0aW1lID0gcHJvY2Vzcy5ocnRpbWU7XG4gICAgZ2V0TmFub1NlY29uZHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBocjtcbiAgICAgIGhyID0gaHJ0aW1lKCk7XG4gICAgICByZXR1cm4gaHJbMF0gKiAxZTkgKyBoclsxXTtcbiAgICB9O1xuICAgIG1vZHVsZUxvYWRUaW1lID0gZ2V0TmFub1NlY29uZHMoKTtcbiAgICB1cFRpbWUgPSBwcm9jZXNzLnVwdGltZSgpICogMWU5O1xuICAgIG5vZGVMb2FkVGltZSA9IG1vZHVsZUxvYWRUaW1lIC0gdXBUaW1lO1xuICB9IGVsc2UgaWYgKERhdGUubm93KSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gbG9hZFRpbWU7XG4gICAgfTtcbiAgICBsb2FkVGltZSA9IERhdGUubm93KCk7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIGxvYWRUaW1lO1xuICAgIH07XG4gICAgbG9hZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfVxuXG59KS5jYWxsKHRoaXMpO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmb3JtYW5jZS1ub3cuanMubWFwXG4iLCIvKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAocm9vdCwgcGx1cmFsaXplKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlLlxuICAgIG1vZHVsZS5leHBvcnRzID0gcGx1cmFsaXplKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gQU1ELCByZWdpc3RlcnMgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHBsdXJhbGl6ZSgpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsLlxuICAgIHJvb3QucGx1cmFsaXplID0gcGx1cmFsaXplKCk7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgLy8gUnVsZSBzdG9yYWdlIC0gcGx1cmFsaXplIGFuZCBzaW5ndWxhcml6ZSBuZWVkIHRvIGJlIHJ1biBzZXF1ZW50aWFsbHksXG4gIC8vIHdoaWxlIG90aGVyIHJ1bGVzIGNhbiBiZSBvcHRpbWl6ZWQgdXNpbmcgYW4gb2JqZWN0IGZvciBpbnN0YW50IGxvb2t1cHMuXG4gIHZhciBwbHVyYWxSdWxlcyA9IFtdO1xuICB2YXIgc2luZ3VsYXJSdWxlcyA9IFtdO1xuICB2YXIgdW5jb3VudGFibGVzID0ge307XG4gIHZhciBpcnJlZ3VsYXJQbHVyYWxzID0ge307XG4gIHZhciBpcnJlZ3VsYXJTaW5nbGVzID0ge307XG5cbiAgLyoqXG4gICAqIFNhbml0aXplIGEgcGx1cmFsaXphdGlvbiBydWxlIHRvIGEgdXNhYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtICB7KFJlZ0V4cHxzdHJpbmcpfSBydWxlXG4gICAqIEByZXR1cm4ge1JlZ0V4cH1cbiAgICovXG4gIGZ1bmN0aW9uIHNhbml0aXplUnVsZSAocnVsZSkge1xuICAgIGlmICh0eXBlb2YgcnVsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKCdeJyArIHJ1bGUgKyAnJCcsICdpJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICAvKipcbiAgICogUGFzcyBpbiBhIHdvcmQgdG9rZW4gdG8gcHJvZHVjZSBhIGZ1bmN0aW9uIHRoYXQgY2FuIHJlcGxpY2F0ZSB0aGUgY2FzZSBvblxuICAgKiBhbm90aGVyIHdvcmQuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB3b3JkXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB0b2tlblxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc3RvcmVDYXNlICh3b3JkLCB0b2tlbikge1xuICAgIC8vIFRva2VucyBhcmUgYW4gZXhhY3QgbWF0Y2guXG4gICAgaWYgKHdvcmQgPT09IHRva2VuKSByZXR1cm4gdG9rZW47XG5cbiAgICAvLyBMb3dlciBjYXNlZCB3b3Jkcy4gRS5nLiBcImhlbGxvXCIuXG4gICAgaWYgKHdvcmQgPT09IHdvcmQudG9Mb3dlckNhc2UoKSkgcmV0dXJuIHRva2VuLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBVcHBlciBjYXNlZCB3b3Jkcy4gRS5nLiBcIldISVNLWVwiLlxuICAgIGlmICh3b3JkID09PSB3b3JkLnRvVXBwZXJDYXNlKCkpIHJldHVybiB0b2tlbi50b1VwcGVyQ2FzZSgpO1xuXG4gICAgLy8gVGl0bGUgY2FzZWQgd29yZHMuIEUuZy4gXCJUaXRsZVwiLlxuICAgIGlmICh3b3JkWzBdID09PSB3b3JkWzBdLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiB0b2tlbi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRva2VuLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8vIExvd2VyIGNhc2VkIHdvcmRzLiBFLmcuIFwidGVzdFwiLlxuICAgIHJldHVybiB0b2tlbi50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVycG9sYXRlIGEgcmVnZXhwIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtICB7QXJyYXl9ICBhcmdzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIGludGVycG9sYXRlIChzdHIsIGFyZ3MpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcJChcXGR7MSwyfSkvZywgZnVuY3Rpb24gKG1hdGNoLCBpbmRleCkge1xuICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdIHx8ICcnO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSB3b3JkIHVzaW5nIGEgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSB3b3JkXG4gICAqIEBwYXJhbSAge0FycmF5fSAgcnVsZVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiByZXBsYWNlICh3b3JkLCBydWxlKSB7XG4gICAgcmV0dXJuIHdvcmQucmVwbGFjZShydWxlWzBdLCBmdW5jdGlvbiAobWF0Y2gsIGluZGV4KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGUocnVsZVsxXSwgYXJndW1lbnRzKTtcblxuICAgICAgaWYgKG1hdGNoID09PSAnJykge1xuICAgICAgICByZXR1cm4gcmVzdG9yZUNhc2Uod29yZFtpbmRleCAtIDFdLCByZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdG9yZUNhc2UobWF0Y2gsIHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2FuaXRpemUgYSB3b3JkIGJ5IHBhc3NpbmcgaW4gdGhlIHdvcmQgYW5kIHNhbml0aXphdGlvbiBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIHRva2VuXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB3b3JkXG4gICAqIEBwYXJhbSAge0FycmF5fSAgICBydWxlc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBzYW5pdGl6ZVdvcmQgKHRva2VuLCB3b3JkLCBydWxlcykge1xuICAgIC8vIEVtcHR5IHN0cmluZyBvciBkb2Vzbid0IG5lZWQgZml4aW5nLlxuICAgIGlmICghdG9rZW4ubGVuZ3RoIHx8IHVuY291bnRhYmxlcy5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcbiAgICAgIHJldHVybiB3b3JkO1xuICAgIH1cblxuICAgIHZhciBsZW4gPSBydWxlcy5sZW5ndGg7XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHNhbml0aXphdGlvbiBydWxlcyBhbmQgdXNlIHRoZSBmaXJzdCBvbmUgdG8gbWF0Y2guXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICB2YXIgcnVsZSA9IHJ1bGVzW2xlbl07XG5cbiAgICAgIGlmIChydWxlWzBdLnRlc3Qod29yZCkpIHJldHVybiByZXBsYWNlKHdvcmQsIHJ1bGUpO1xuICAgIH1cblxuICAgIHJldHVybiB3b3JkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSB3b3JkIHdpdGggdGhlIHVwZGF0ZWQgd29yZC5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgIHJlcGxhY2VNYXBcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgIGtlZXBNYXBcbiAgICogQHBhcmFtICB7QXJyYXl9ICAgIHJ1bGVzXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZVdvcmQgKHJlcGxhY2VNYXAsIGtlZXBNYXAsIHJ1bGVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh3b3JkKSB7XG4gICAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdG9rZW4gYW5kIGNhc2UgcmVzdG9yYXRpb24gZnVuY3Rpb25zLlxuICAgICAgdmFyIHRva2VuID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAvLyBDaGVjayBhZ2FpbnN0IHRoZSBrZWVwIG9iamVjdCBtYXAuXG4gICAgICBpZiAoa2VlcE1hcC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVDYXNlKHdvcmQsIHRva2VuKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYWdhaW5zdCB0aGUgcmVwbGFjZW1lbnQgbWFwIGZvciBhIGRpcmVjdCB3b3JkIHJlcGxhY2VtZW50LlxuICAgICAgaWYgKHJlcGxhY2VNYXAuaGFzT3duUHJvcGVydHkodG9rZW4pKSB7XG4gICAgICAgIHJldHVybiByZXN0b3JlQ2FzZSh3b3JkLCByZXBsYWNlTWFwW3Rva2VuXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJ1biBhbGwgdGhlIHJ1bGVzIGFnYWluc3QgdGhlIHdvcmQuXG4gICAgICByZXR1cm4gc2FuaXRpemVXb3JkKHRva2VuLCB3b3JkLCBydWxlcyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHdvcmQgaXMgcGFydCBvZiB0aGUgbWFwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2tXb3JkIChyZXBsYWNlTWFwLCBrZWVwTWFwLCBydWxlcywgYm9vbCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAod29yZCkge1xuICAgICAgdmFyIHRva2VuID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAoa2VlcE1hcC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHJlcGxhY2VNYXAuaGFzT3duUHJvcGVydHkodG9rZW4pKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiBzYW5pdGl6ZVdvcmQodG9rZW4sIHRva2VuLCBydWxlcykgPT09IHRva2VuO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUGx1cmFsaXplIG9yIHNpbmd1bGFyaXplIGEgd29yZCBiYXNlZCBvbiB0aGUgcGFzc2VkIGluIGNvdW50LlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICB3b3JkICAgICAgVGhlIHdvcmQgdG8gcGx1cmFsaXplXG4gICAqIEBwYXJhbSAge251bWJlcn0gIGNvdW50ICAgICBIb3cgbWFueSBvZiB0aGUgd29yZCBleGlzdFxuICAgKiBAcGFyYW0gIHtib29sZWFufSBpbmNsdXNpdmUgV2hldGhlciB0byBwcmVmaXggd2l0aCB0aGUgbnVtYmVyIChlLmcuIDMgZHVja3MpXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIHBsdXJhbGl6ZSAod29yZCwgY291bnQsIGluY2x1c2l2ZSkge1xuICAgIHZhciBwbHVyYWxpemVkID0gY291bnQgPT09IDFcbiAgICAgID8gcGx1cmFsaXplLnNpbmd1bGFyKHdvcmQpIDogcGx1cmFsaXplLnBsdXJhbCh3b3JkKTtcblxuICAgIHJldHVybiAoaW5jbHVzaXZlID8gY291bnQgKyAnICcgOiAnJykgKyBwbHVyYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsdXJhbGl6ZSBhIHdvcmQuXG4gICAqXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHBsdXJhbGl6ZS5wbHVyYWwgPSByZXBsYWNlV29yZChcbiAgICBpcnJlZ3VsYXJTaW5nbGVzLCBpcnJlZ3VsYXJQbHVyYWxzLCBwbHVyYWxSdWxlc1xuICApO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHdvcmQgaXMgcGx1cmFsLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBwbHVyYWxpemUuaXNQbHVyYWwgPSBjaGVja1dvcmQoXG4gICAgaXJyZWd1bGFyU2luZ2xlcywgaXJyZWd1bGFyUGx1cmFscywgcGx1cmFsUnVsZXNcbiAgKTtcblxuICAvKipcbiAgICogU2luZ3VsYXJpemUgYSB3b3JkLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBwbHVyYWxpemUuc2luZ3VsYXIgPSByZXBsYWNlV29yZChcbiAgICBpcnJlZ3VsYXJQbHVyYWxzLCBpcnJlZ3VsYXJTaW5nbGVzLCBzaW5ndWxhclJ1bGVzXG4gICk7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgd29yZCBpcyBzaW5ndWxhci5cbiAgICpcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgcGx1cmFsaXplLmlzU2luZ3VsYXIgPSBjaGVja1dvcmQoXG4gICAgaXJyZWd1bGFyUGx1cmFscywgaXJyZWd1bGFyU2luZ2xlcywgc2luZ3VsYXJSdWxlc1xuICApO1xuXG4gIC8qKlxuICAgKiBBZGQgYSBwbHVyYWxpemF0aW9uIHJ1bGUgdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBydWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICByZXBsYWNlbWVudFxuICAgKi9cbiAgcGx1cmFsaXplLmFkZFBsdXJhbFJ1bGUgPSBmdW5jdGlvbiAocnVsZSwgcmVwbGFjZW1lbnQpIHtcbiAgICBwbHVyYWxSdWxlcy5wdXNoKFtzYW5pdGl6ZVJ1bGUocnVsZSksIHJlcGxhY2VtZW50XSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpbmd1bGFyaXphdGlvbiBydWxlIHRvIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcnVsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgcmVwbGFjZW1lbnRcbiAgICovXG4gIHBsdXJhbGl6ZS5hZGRTaW5ndWxhclJ1bGUgPSBmdW5jdGlvbiAocnVsZSwgcmVwbGFjZW1lbnQpIHtcbiAgICBzaW5ndWxhclJ1bGVzLnB1c2goW3Nhbml0aXplUnVsZShydWxlKSwgcmVwbGFjZW1lbnRdKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGFuIHVuY291bnRhYmxlIHdvcmQgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHdvcmRcbiAgICovXG4gIHBsdXJhbGl6ZS5hZGRVbmNvdW50YWJsZVJ1bGUgPSBmdW5jdGlvbiAod29yZCkge1xuICAgIGlmICh0eXBlb2Ygd29yZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHVuY291bnRhYmxlc1t3b3JkLnRvTG93ZXJDYXNlKCldID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZXQgc2luZ3VsYXIgYW5kIHBsdXJhbCByZWZlcmVuY2VzIGZvciB0aGUgd29yZC5cbiAgICBwbHVyYWxpemUuYWRkUGx1cmFsUnVsZSh3b3JkLCAnJDAnKTtcbiAgICBwbHVyYWxpemUuYWRkU2luZ3VsYXJSdWxlKHdvcmQsICckMCcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gaXJyZWd1bGFyIHdvcmQgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpbmdsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGx1cmFsXG4gICAqL1xuICBwbHVyYWxpemUuYWRkSXJyZWd1bGFyUnVsZSA9IGZ1bmN0aW9uIChzaW5nbGUsIHBsdXJhbCkge1xuICAgIHBsdXJhbCA9IHBsdXJhbC50b0xvd2VyQ2FzZSgpO1xuICAgIHNpbmdsZSA9IHNpbmdsZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaXJyZWd1bGFyU2luZ2xlc1tzaW5nbGVdID0gcGx1cmFsO1xuICAgIGlycmVndWxhclBsdXJhbHNbcGx1cmFsXSA9IHNpbmdsZTtcbiAgfTtcblxuICAvKipcbiAgICogSXJyZWd1bGFyIHJ1bGVzLlxuICAgKi9cbiAgW1xuICAgIC8vIFByb25vdW5zLlxuICAgIFsnSScsICd3ZSddLFxuICAgIFsnbWUnLCAndXMnXSxcbiAgICBbJ2hlJywgJ3RoZXknXSxcbiAgICBbJ3NoZScsICd0aGV5J10sXG4gICAgWyd0aGVtJywgJ3RoZW0nXSxcbiAgICBbJ215c2VsZicsICdvdXJzZWx2ZXMnXSxcbiAgICBbJ3lvdXJzZWxmJywgJ3lvdXJzZWx2ZXMnXSxcbiAgICBbJ2l0c2VsZicsICd0aGVtc2VsdmVzJ10sXG4gICAgWydoZXJzZWxmJywgJ3RoZW1zZWx2ZXMnXSxcbiAgICBbJ2hpbXNlbGYnLCAndGhlbXNlbHZlcyddLFxuICAgIFsndGhlbXNlbGYnLCAndGhlbXNlbHZlcyddLFxuICAgIFsnaXMnLCAnYXJlJ10sXG4gICAgWyd3YXMnLCAnd2VyZSddLFxuICAgIFsnaGFzJywgJ2hhdmUnXSxcbiAgICBbJ3RoaXMnLCAndGhlc2UnXSxcbiAgICBbJ3RoYXQnLCAndGhvc2UnXSxcbiAgICAvLyBXb3JkcyBlbmRpbmcgaW4gd2l0aCBhIGNvbnNvbmFudCBhbmQgYG9gLlxuICAgIFsnZWNobycsICdlY2hvZXMnXSxcbiAgICBbJ2RpbmdvJywgJ2RpbmdvZXMnXSxcbiAgICBbJ3ZvbGNhbm8nLCAndm9sY2Fub2VzJ10sXG4gICAgWyd0b3JuYWRvJywgJ3Rvcm5hZG9lcyddLFxuICAgIFsndG9ycGVkbycsICd0b3JwZWRvZXMnXSxcbiAgICAvLyBFbmRzIHdpdGggYHVzYC5cbiAgICBbJ2dlbnVzJywgJ2dlbmVyYSddLFxuICAgIFsndmlzY3VzJywgJ3Zpc2NlcmEnXSxcbiAgICAvLyBFbmRzIHdpdGggYG1hYC5cbiAgICBbJ3N0aWdtYScsICdzdGlnbWF0YSddLFxuICAgIFsnc3RvbWEnLCAnc3RvbWF0YSddLFxuICAgIFsnZG9nbWEnLCAnZG9nbWF0YSddLFxuICAgIFsnbGVtbWEnLCAnbGVtbWF0YSddLFxuICAgIFsnc2NoZW1hJywgJ3NjaGVtYXRhJ10sXG4gICAgWydhbmF0aGVtYScsICdhbmF0aGVtYXRhJ10sXG4gICAgLy8gT3RoZXIgaXJyZWd1bGFyIHJ1bGVzLlxuICAgIFsnb3gnLCAnb3hlbiddLFxuICAgIFsnYXhlJywgJ2F4ZXMnXSxcbiAgICBbJ2RpZScsICdkaWNlJ10sXG4gICAgWyd5ZXMnLCAneWVzZXMnXSxcbiAgICBbJ2Zvb3QnLCAnZmVldCddLFxuICAgIFsnZWF2ZScsICdlYXZlcyddLFxuICAgIFsnZ29vc2UnLCAnZ2Vlc2UnXSxcbiAgICBbJ3Rvb3RoJywgJ3RlZXRoJ10sXG4gICAgWydxdWl6JywgJ3F1aXp6ZXMnXSxcbiAgICBbJ2h1bWFuJywgJ2h1bWFucyddLFxuICAgIFsncHJvb2YnLCAncHJvb2ZzJ10sXG4gICAgWydjYXJ2ZScsICdjYXJ2ZXMnXSxcbiAgICBbJ3ZhbHZlJywgJ3ZhbHZlcyddLFxuICAgIFsnbG9vZXknLCAnbG9vaWVzJ10sXG4gICAgWyd0aGllZicsICd0aGlldmVzJ10sXG4gICAgWydncm9vdmUnLCAnZ3Jvb3ZlcyddLFxuICAgIFsncGlja2F4ZScsICdwaWNrYXhlcyddLFxuICAgIFsncGFzc2VyYnknLCAncGFzc2Vyc2J5J11cbiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZS5hZGRJcnJlZ3VsYXJSdWxlKHJ1bGVbMF0sIHJ1bGVbMV0pO1xuICB9KTtcblxuICAvKipcbiAgICogUGx1cmFsaXphdGlvbiBydWxlcy5cbiAgICovXG4gIFtcbiAgICBbL3M/JC9pLCAncyddLFxuICAgIFsvW15cXHUwMDAwLVxcdTAwN0ZdJC9pLCAnJDAnXSxcbiAgICBbLyhbXmFlaW91XWVzZSkkL2ksICckMSddLFxuICAgIFsvKGF4fHRlc3QpaXMkL2ksICckMWVzJ10sXG4gICAgWy8oYWxpYXN8W15hb3VddXN8dFtsbV1hc3xnYXN8cmlzKSQvaSwgJyQxZXMnXSxcbiAgICBbLyhlW21uXXUpcz8kL2ksICckMXMnXSxcbiAgICBbLyhbXmxdaWFzfFthZWlvdV1sYXN8W2VqenJdYXN8W2l1XWFtKSQvaSwgJyQxJ10sXG4gICAgWy8oYWx1bW58c3lsbGFifHZpcnxyYWRpfG51Y2xlfGZ1bmd8Y2FjdHxzdGltdWx8dGVybWlufGJhY2lsbHxmb2N8dXRlcnxsb2N8c3RyYXQpKD86dXN8aSkkL2ksICckMWknXSxcbiAgICBbLyhhbHVtbnxhbGd8dmVydGVicikoPzphfGFlKSQvaSwgJyQxYWUnXSxcbiAgICBbLyhzZXJhcGh8Y2hlcnViKSg/OmltKT8kL2ksICckMWltJ10sXG4gICAgWy8oaGVyfGF0fGdyKW8kL2ksICckMW9lcyddLFxuICAgIFsvKGFnZW5kfGFkZGVuZHxtaWxsZW5uaXxkYXR8ZXh0cmVtfGJhY3Rlcml8ZGVzaWRlcmF0fHN0cmF0fGNhbmRlbGFicnxlcnJhdHxvdnxzeW1wb3NpfGN1cnJpY3VsfGF1dG9tYXR8cXVvcikoPzphfHVtKSQvaSwgJyQxYSddLFxuICAgIFsvKGFwaGVsaXxoeXBlcmJhdHxwZXJpaGVsaXxhc3luZGV0fG5vdW1lbnxwaGVub21lbnxjcml0ZXJpfG9yZ2FufHByb2xlZ29tZW58aGVkcnxhdXRvbWF0KSg/OmF8b24pJC9pLCAnJDFhJ10sXG4gICAgWy9zaXMkL2ksICdzZXMnXSxcbiAgICBbLyg/Oihrbml8d2l8bGkpZmV8KGFyfGx8ZWF8ZW98b2F8aG9vKWYpJC9pLCAnJDEkMnZlcyddLFxuICAgIFsvKFteYWVpb3V5XXxxdSl5JC9pLCAnJDFpZXMnXSxcbiAgICBbLyhbXmNoXVtpZW9dW2xuXSlleSQvaSwgJyQxaWVzJ10sXG4gICAgWy8oeHxjaHxzc3xzaHx6eikkL2ksICckMWVzJ10sXG4gICAgWy8obWF0cnxjb2R8bXVyfHNpbHx2ZXJ0fGluZHxhcHBlbmQpKD86aXh8ZXgpJC9pLCAnJDFpY2VzJ10sXG4gICAgWy9cXGIoKD86dGl0KT9tfGwpKD86aWNlfG91c2UpJC9pLCAnJDFpY2UnXSxcbiAgICBbLyhwZSkoPzpyc29ufG9wbGUpJC9pLCAnJDFvcGxlJ10sXG4gICAgWy8oY2hpbGQpKD86cmVuKT8kL2ksICckMXJlbiddLFxuICAgIFsvZWF1eCQvaSwgJyQwJ10sXG4gICAgWy9tW2FlXW4kL2ksICdtZW4nXSxcbiAgICBbJ3Rob3UnLCAneW91J11cbiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZS5hZGRQbHVyYWxSdWxlKHJ1bGVbMF0sIHJ1bGVbMV0pO1xuICB9KTtcblxuICAvKipcbiAgICogU2luZ3VsYXJpemF0aW9uIHJ1bGVzLlxuICAgKi9cbiAgW1xuICAgIFsvcyQvaSwgJyddLFxuICAgIFsvKHNzKSQvaSwgJyQxJ10sXG4gICAgWy8od2l8a25pfCg/OmFmdGVyfGhhbGZ8aGlnaHxsb3d8bWlkfG5vbnxuaWdodHxbXlxcd118XilsaSl2ZXMkL2ksICckMWZlJ10sXG4gICAgWy8oYXJ8KD86d298W2FlXSlsfFtlb11bYW9dKXZlcyQvaSwgJyQxZiddLFxuICAgIFsvaWVzJC9pLCAneSddLFxuICAgIFsvXFxiKFtwbF18em9tYnwoPzpuZWNrfGNyb3NzKT90fGNvbGx8ZmFlcnxmb29kfGdlbnxnb29ufGdyb3VwfGxhc3N8dGFsa3xnb2FsfGN1dClpZXMkL2ksICckMWllJ10sXG4gICAgWy9cXGIobW9ufHNtaWwpaWVzJC9pLCAnJDFleSddLFxuICAgIFsvXFxiKCg/OnRpdCk/bXxsKWljZSQvaSwgJyQxb3VzZSddLFxuICAgIFsvKHNlcmFwaHxjaGVydWIpaW0kL2ksICckMSddLFxuICAgIFsvKHh8Y2h8c3N8c2h8enp8dHRvfGdvfGNob3xhbGlhc3xbXmFvdV11c3x0W2xtXWFzfGdhc3woPzpoZXJ8YXR8Z3Ipb3xbYWVpb3VdcmlzKSg/OmVzKT8kL2ksICckMSddLFxuICAgIFsvKGFuYWx5fGRpYWdub3xwYXJlbnRoZXxwcm9nbm98c3lub3B8dGhlfGVtcGhhfGNyaXxuZSkoPzpzaXN8c2VzKSQvaSwgJyQxc2lzJ10sXG4gICAgWy8obW92aWV8dHdlbHZlfGFidXNlfGVbbW5ddSlzJC9pLCAnJDEnXSxcbiAgICBbLyh0ZXN0KSg/OmlzfGVzKSQvaSwgJyQxaXMnXSxcbiAgICBbLyhhbHVtbnxzeWxsYWJ8dmlyfHJhZGl8bnVjbGV8ZnVuZ3xjYWN0fHN0aW11bHx0ZXJtaW58YmFjaWxsfGZvY3x1dGVyfGxvY3xzdHJhdCkoPzp1c3xpKSQvaSwgJyQxdXMnXSxcbiAgICBbLyhhZ2VuZHxhZGRlbmR8bWlsbGVubml8ZGF0fGV4dHJlbXxiYWN0ZXJpfGRlc2lkZXJhdHxzdHJhdHxjYW5kZWxhYnJ8ZXJyYXR8b3Z8c3ltcG9zaXxjdXJyaWN1bHxxdW9yKWEkL2ksICckMXVtJ10sXG4gICAgWy8oYXBoZWxpfGh5cGVyYmF0fHBlcmloZWxpfGFzeW5kZXR8bm91bWVufHBoZW5vbWVufGNyaXRlcml8b3JnYW58cHJvbGVnb21lbnxoZWRyfGF1dG9tYXQpYSQvaSwgJyQxb24nXSxcbiAgICBbLyhhbHVtbnxhbGd8dmVydGVicilhZSQvaSwgJyQxYSddLFxuICAgIFsvKGNvZHxtdXJ8c2lsfHZlcnR8aW5kKWljZXMkL2ksICckMWV4J10sXG4gICAgWy8obWF0cnxhcHBlbmQpaWNlcyQvaSwgJyQxaXgnXSxcbiAgICBbLyhwZSkocnNvbnxvcGxlKSQvaSwgJyQxcnNvbiddLFxuICAgIFsvKGNoaWxkKXJlbiQvaSwgJyQxJ10sXG4gICAgWy8oZWF1KXg/JC9pLCAnJDEnXSxcbiAgICBbL21lbiQvaSwgJ21hbiddXG4gIF0uZm9yRWFjaChmdW5jdGlvbiAocnVsZSkge1xuICAgIHJldHVybiBwbHVyYWxpemUuYWRkU2luZ3VsYXJSdWxlKHJ1bGVbMF0sIHJ1bGVbMV0pO1xuICB9KTtcblxuICAvKipcbiAgICogVW5jb3VudGFibGUgcnVsZXMuXG4gICAqL1xuICBbXG4gICAgLy8gU2luZ3VsYXIgd29yZHMgd2l0aCBubyBwbHVyYWxzLlxuICAgICdhZHVsdGhvb2QnLFxuICAgICdhZHZpY2UnLFxuICAgICdhZ2VuZGEnLFxuICAgICdhaWQnLFxuICAgICdhaXJjcmFmdCcsXG4gICAgJ2FsY29ob2wnLFxuICAgICdhbW1vJyxcbiAgICAnYW5hbHl0aWNzJyxcbiAgICAnYW5pbWUnLFxuICAgICdhdGhsZXRpY3MnLFxuICAgICdhdWRpbycsXG4gICAgJ2Jpc29uJyxcbiAgICAnYmxvb2QnLFxuICAgICdicmVhbScsXG4gICAgJ2J1ZmZhbG8nLFxuICAgICdidXR0ZXInLFxuICAgICdjYXJwJyxcbiAgICAnY2FzaCcsXG4gICAgJ2NoYXNzaXMnLFxuICAgICdjaGVzcycsXG4gICAgJ2Nsb3RoaW5nJyxcbiAgICAnY29kJyxcbiAgICAnY29tbWVyY2UnLFxuICAgICdjb29wZXJhdGlvbicsXG4gICAgJ2NvcnBzJyxcbiAgICAnZGVicmlzJyxcbiAgICAnZGlhYmV0ZXMnLFxuICAgICdkaWdlc3Rpb24nLFxuICAgICdlbGsnLFxuICAgICdlbmVyZ3knLFxuICAgICdlcXVpcG1lbnQnLFxuICAgICdleGNyZXRpb24nLFxuICAgICdleHBlcnRpc2UnLFxuICAgICdmaXJtd2FyZScsXG4gICAgJ2Zsb3VuZGVyJyxcbiAgICAnZnVuJyxcbiAgICAnZ2FsbG93cycsXG4gICAgJ2dhcmJhZ2UnLFxuICAgICdncmFmZml0aScsXG4gICAgJ2hhcmR3YXJlJyxcbiAgICAnaGVhZHF1YXJ0ZXJzJyxcbiAgICAnaGVhbHRoJyxcbiAgICAnaGVycGVzJyxcbiAgICAnaGlnaGppbmtzJyxcbiAgICAnaG9tZXdvcmsnLFxuICAgICdob3VzZXdvcmsnLFxuICAgICdpbmZvcm1hdGlvbicsXG4gICAgJ2plYW5zJyxcbiAgICAnanVzdGljZScsXG4gICAgJ2t1ZG9zJyxcbiAgICAnbGFib3VyJyxcbiAgICAnbGl0ZXJhdHVyZScsXG4gICAgJ21hY2hpbmVyeScsXG4gICAgJ21hY2tlcmVsJyxcbiAgICAnbWFpbCcsXG4gICAgJ21lZGlhJyxcbiAgICAnbWV3cycsXG4gICAgJ21vb3NlJyxcbiAgICAnbXVzaWMnLFxuICAgICdtdWQnLFxuICAgICdtYW5nYScsXG4gICAgJ25ld3MnLFxuICAgICdvbmx5JyxcbiAgICAncGVyc29ubmVsJyxcbiAgICAncGlrZScsXG4gICAgJ3BsYW5rdG9uJyxcbiAgICAncGxpZXJzJyxcbiAgICAncG9saWNlJyxcbiAgICAncG9sbHV0aW9uJyxcbiAgICAncHJlbWlzZXMnLFxuICAgICdyYWluJyxcbiAgICAncmVzZWFyY2gnLFxuICAgICdyaWNlJyxcbiAgICAnc2FsbW9uJyxcbiAgICAnc2Npc3NvcnMnLFxuICAgICdzZXJpZXMnLFxuICAgICdzZXdhZ2UnLFxuICAgICdzaGFtYmxlcycsXG4gICAgJ3NocmltcCcsXG4gICAgJ3NvZnR3YXJlJyxcbiAgICAnc3BlY2llcycsXG4gICAgJ3N0YWZmJyxcbiAgICAnc3dpbmUnLFxuICAgICd0ZW5uaXMnLFxuICAgICd0cmFmZmljJyxcbiAgICAndHJhbnNwb3J0YXRpb24nLFxuICAgICd0cm91dCcsXG4gICAgJ3R1bmEnLFxuICAgICd3ZWFsdGgnLFxuICAgICd3ZWxmYXJlJyxcbiAgICAnd2hpdGluZycsXG4gICAgJ3dpbGRlYmVlc3QnLFxuICAgICd3aWxkbGlmZScsXG4gICAgJ3lvdScsXG4gICAgL3Bva1tlw6ldbW9uJC9pLFxuICAgIC8vIFJlZ2V4ZXMuXG4gICAgL1teYWVpb3VdZXNlJC9pLCAvLyBcImNoaW5lc2VcIiwgXCJqYXBhbmVzZVwiXG4gICAgL2RlZXIkL2ksIC8vIFwiZGVlclwiLCBcInJlaW5kZWVyXCJcbiAgICAvZmlzaCQvaSwgLy8gXCJmaXNoXCIsIFwiYmxvd2Zpc2hcIiwgXCJhbmdlbGZpc2hcIlxuICAgIC9tZWFzbGVzJC9pLFxuICAgIC9vW2l1XXMkL2ksIC8vIFwiY2Fybml2b3JvdXNcIlxuICAgIC9wb3gkL2ksIC8vIFwiY2hpY2twb3hcIiwgXCJzbWFsbHBveFwiXG4gICAgL3NoZWVwJC9pXG4gIF0uZm9yRWFjaChwbHVyYWxpemUuYWRkVW5jb3VudGFibGVSdWxlKTtcblxuICByZXR1cm4gcGx1cmFsaXplO1xufSk7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xudmFyIGNoZWNrUHJvcFR5cGVzID0gcmVxdWlyZSgnLi9jaGVja1Byb3BUeXBlcycpO1xuXG52YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSAgKyAnYC4gVGhpcyBpcyBkZXByZWNhdGVkICcgK1xuICAgICAgICAgICAgICAnYW5kIHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcbiAgICAgICAgICAgICAgJ2xpYnJhcnkuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmctZG9udC1jYWxsLXByb3B0eXBlcyAnICsgJ2ZvciBkZXRhaWxzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIVJlYWN0SXMuaXNWYWxpZEVsZW1lbnRUeXBlKHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50IHR5cGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LCBnb3QgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIGFyZ3VtZW50cy4gJyArXG4gICAgICAgICAgICAnQSBjb21tb24gbWlzdGFrZSBpcyB0byB3cml0ZSBvbmVPZih4LCB5LCB6KSBpbnN0ZWFkIG9mIG9uZU9mKFt4LCB5LCB6XSkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMsIGZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3ltYm9sJykge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIFN0cmluZyhwcm9wVmFsdWUpICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChoYXMocHJvcFZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xuICAgICAgICAgICdyZWNlaXZlZCAnICsgZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKGNoZWNrZXIpICsgJyBhdCBpbmRleCAnICsgaSArICcuJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIGlmIChjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbVxuICAgICAgLy8gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXG4gICAgICAgICAgICAnXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xuICAgICAgICAgICAgJ1xcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuOC42XG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcblxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTtcbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8XG4gIC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSk7XG59XG5cbi8qKlxuICogRm9ya2VkIGZyb20gZmJqcy93YXJuaW5nOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZianMvYmxvYi9lNjZiYTIwYWQ1YmU0MzNlYjU0NDIzZjJiMDk3ZDgyOTMyNGQ5ZGU2L3BhY2thZ2VzL2ZianMvc3JjL19fZm9ya3NfXy93YXJuaW5nLmpzXG4gKlxuICogT25seSBjaGFuZ2UgaXMgd2UgdXNlIGNvbnNvbGUud2FybiBpbnN0ZWFkIG9mIGNvbnNvbGUuZXJyb3IsXG4gKiBhbmQgZG8gbm90aGluZyB3aGVuICdjb25zb2xlJyBpcyBub3Qgc3VwcG9ydGVkLlxuICogVGhpcyByZWFsbHkgc2ltcGxpZmllcyB0aGUgY29kZS5cbiAqIC0tLVxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGxvd1ByaW9yaXR5V2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmckMSA9IGxvd1ByaW9yaXR5V2FybmluZztcblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG5cbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xuXG4vLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlO1xuICAgICAgbG93UHJpb3JpdHlXYXJuaW5nJDEoZmFsc2UsICdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwidmFyIG5vdyA9IHJlcXVpcmUoJ3BlcmZvcm1hbmNlLW5vdycpXG4gICwgcm9vdCA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93XG4gICwgdmVuZG9ycyA9IFsnbW96JywgJ3dlYmtpdCddXG4gICwgc3VmZml4ID0gJ0FuaW1hdGlvbkZyYW1lJ1xuICAsIHJhZiA9IHJvb3RbJ3JlcXVlc3QnICsgc3VmZml4XVxuICAsIGNhZiA9IHJvb3RbJ2NhbmNlbCcgKyBzdWZmaXhdIHx8IHJvb3RbJ2NhbmNlbFJlcXVlc3QnICsgc3VmZml4XVxuXG5mb3IodmFyIGkgPSAwOyAhcmFmICYmIGkgPCB2ZW5kb3JzLmxlbmd0aDsgaSsrKSB7XG4gIHJhZiA9IHJvb3RbdmVuZG9yc1tpXSArICdSZXF1ZXN0JyArIHN1ZmZpeF1cbiAgY2FmID0gcm9vdFt2ZW5kb3JzW2ldICsgJ0NhbmNlbCcgKyBzdWZmaXhdXG4gICAgICB8fCByb290W3ZlbmRvcnNbaV0gKyAnQ2FuY2VsUmVxdWVzdCcgKyBzdWZmaXhdXG59XG5cbi8vIFNvbWUgdmVyc2lvbnMgb2YgRkYgaGF2ZSByQUYgYnV0IG5vdCBjQUZcbmlmKCFyYWYgfHwgIWNhZikge1xuICB2YXIgbGFzdCA9IDBcbiAgICAsIGlkID0gMFxuICAgICwgcXVldWUgPSBbXVxuICAgICwgZnJhbWVEdXJhdGlvbiA9IDEwMDAgLyA2MFxuXG4gIHJhZiA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgaWYocXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgX25vdyA9IG5vdygpXG4gICAgICAgICwgbmV4dCA9IE1hdGgubWF4KDAsIGZyYW1lRHVyYXRpb24gLSAoX25vdyAtIGxhc3QpKVxuICAgICAgbGFzdCA9IG5leHQgKyBfbm93XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY3AgPSBxdWV1ZS5zbGljZSgwKVxuICAgICAgICAvLyBDbGVhciBxdWV1ZSBoZXJlIHRvIHByZXZlbnRcbiAgICAgICAgLy8gY2FsbGJhY2tzIGZyb20gYXBwZW5kaW5nIGxpc3RlbmVyc1xuICAgICAgICAvLyB0byB0aGUgY3VycmVudCBmcmFtZSdzIHF1ZXVlXG4gICAgICAgIHF1ZXVlLmxlbmd0aCA9IDBcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGNwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYoIWNwW2ldLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICBjcFtpXS5jYWxsYmFjayhsYXN0KVxuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRocm93IGUgfSwgMClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIE1hdGgucm91bmQobmV4dCkpXG4gICAgfVxuICAgIHF1ZXVlLnB1c2goe1xuICAgICAgaGFuZGxlOiArK2lkLFxuICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgY2FuY2VsbGVkOiBmYWxzZVxuICAgIH0pXG4gICAgcmV0dXJuIGlkXG4gIH1cblxuICBjYWYgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmKHF1ZXVlW2ldLmhhbmRsZSA9PT0gaGFuZGxlKSB7XG4gICAgICAgIHF1ZXVlW2ldLmNhbmNlbGxlZCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbikge1xuICAvLyBXcmFwIGluIGEgbmV3IGZ1bmN0aW9uIHRvIHByZXZlbnRcbiAgLy8gYGNhbmNlbGAgcG90ZW50aWFsbHkgYmVpbmcgYXNzaWduZWRcbiAgLy8gdG8gdGhlIG5hdGl2ZSByQUYgZnVuY3Rpb25cbiAgcmV0dXJuIHJhZi5jYWxsKHJvb3QsIGZuKVxufVxubW9kdWxlLmV4cG9ydHMuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gIGNhZi5hcHBseShyb290LCBhcmd1bWVudHMpXG59XG5tb2R1bGUuZXhwb3J0cy5wb2x5ZmlsbCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAoIW9iamVjdCkge1xuICAgIG9iamVjdCA9IHJvb3Q7XG4gIH1cbiAgb2JqZWN0LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHJhZlxuICBvYmplY3QuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBjYWZcbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZpZWxkIH0gZnJvbSAncmVhY3QtZmluYWwtZm9ybSc7XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxudmFyIEV4dGVybmFsbHlDaGFuZ2VkU3RhdGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoRXh0ZXJuYWxseUNoYW5nZWRTdGF0ZSwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gRXh0ZXJuYWxseUNoYW5nZWRTdGF0ZShwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgcHJldmlvdXM6IHByb3BzLmlucHV0LnZhbHVlLFxuICAgICAgZXh0ZXJuYWxseUNoYW5nZWQ6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gRXh0ZXJuYWxseUNoYW5nZWRTdGF0ZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICB2YWx1ZSA9IF90aGlzJHByb3BzLmlucHV0LnZhbHVlLFxuICAgICAgICBhY3RpdmUgPSBfdGhpcyRwcm9wcy5tZXRhLmFjdGl2ZTtcbiAgICB2YXIgcHJldmlvdXMgPSB0aGlzLnN0YXRlLnByZXZpb3VzO1xuXG4gICAgaWYgKHZhbHVlICE9PSBwcmV2aW91cykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHByZXZpb3VzOiB2YWx1ZSxcbiAgICAgICAgZXh0ZXJuYWxseUNoYW5nZWQ6ICFhY3RpdmVcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuKHRoaXMuc3RhdGUuZXh0ZXJuYWxseUNoYW5nZWQpO1xuICB9O1xuXG4gIHJldHVybiBFeHRlcm5hbGx5Q2hhbmdlZFN0YXRlO1xufShDb21wb25lbnQpO1xuXG52YXIgRXh0ZXJuYWxseUNoYW5nZWQgPSBmdW5jdGlvbiBFeHRlcm5hbGx5Q2hhbmdlZChfcmVmKSB7XG4gIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gY3JlYXRlRWxlbWVudChGaWVsZCwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3Vic2NyaXB0aW9uOiB7XG4gICAgICBhY3RpdmU6IHRydWUsXG4gICAgICB2YWx1ZTogdHJ1ZVxuICAgIH0sXG4gICAgYWxsb3dOdWxsOiB0cnVlLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHByb3BzKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChFeHRlcm5hbGx5Q2hhbmdlZFN0YXRlLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICB9KSk7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBPbkJsdXJTdGF0ZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShPbkJsdXJTdGF0ZSwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gT25CbHVyU3RhdGUocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHByZXZpb3VzOiAhIXByb3BzLm1ldGEuYWN0aXZlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gT25CbHVyU3RhdGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgYWN0aXZlID0gX3RoaXMkcHJvcHMubWV0YS5hY3RpdmU7XG4gICAgdmFyIHByZXZpb3VzID0gdGhpcy5zdGF0ZS5wcmV2aW91cztcblxuICAgIGlmIChwcmV2aW91cyAmJiAhYWN0aXZlKSB7XG4gICAgICBjaGlsZHJlbigpO1xuICAgIH1cblxuICAgIGlmIChwcmV2aW91cyAhPT0gYWN0aXZlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcHJldmlvdXM6IGFjdGl2ZVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE9uQmx1clN0YXRlO1xufShDb21wb25lbnQpO1xuXG52YXIgT25CbHVyID0gZnVuY3Rpb24gT25CbHVyKF9yZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KEZpZWxkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdWJzY3JpcHRpb246IHtcbiAgICAgIGFjdGl2ZTogdHJ1ZVxuICAgIH0sXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIocHJvcHMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KE9uQmx1clN0YXRlLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICB9KSk7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBPbkNoYW5nZVN0YXRlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKE9uQ2hhbmdlU3RhdGUsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIE9uQ2hhbmdlU3RhdGUocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHByZXZpb3VzOiBwcm9wcy5pbnB1dC52YWx1ZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE9uQ2hhbmdlU3RhdGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgdmFsdWUgPSBfdGhpcyRwcm9wcy5pbnB1dC52YWx1ZTtcbiAgICB2YXIgcHJldmlvdXMgPSB0aGlzLnN0YXRlLnByZXZpb3VzO1xuXG4gICAgaWYgKHZhbHVlICE9PSBwcmV2aW91cykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHByZXZpb3VzOiB2YWx1ZVxuICAgICAgfSk7XG4gICAgICBjaGlsZHJlbih2YWx1ZSwgcHJldmlvdXMpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHJldHVybiBPbkNoYW5nZVN0YXRlO1xufShDb21wb25lbnQpO1xuXG52YXIgT25DaGFuZ2UgPSBmdW5jdGlvbiBPbkNoYW5nZShfcmVmKSB7XG4gIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gY3JlYXRlRWxlbWVudChGaWVsZCwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3Vic2NyaXB0aW9uOiB7XG4gICAgICB2YWx1ZTogdHJ1ZVxuICAgIH0sXG4gICAgYWxsb3dOdWxsOiB0cnVlLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHByb3BzKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChPbkNoYW5nZVN0YXRlLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICB9KSk7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBPbkZvY3VzU3RhdGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoT25Gb2N1c1N0YXRlLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBPbkZvY3VzU3RhdGUocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHByZXZpb3VzOiAhIXByb3BzLm1ldGEuYWN0aXZlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gT25Gb2N1c1N0YXRlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGFjdGl2ZSA9IF90aGlzJHByb3BzLm1ldGEuYWN0aXZlO1xuICAgIHZhciBwcmV2aW91cyA9IHRoaXMuc3RhdGUucHJldmlvdXM7XG5cbiAgICBpZiAoYWN0aXZlICYmICFwcmV2aW91cykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHByZXZpb3VzOiBhY3RpdmVcbiAgICAgIH0pO1xuICAgICAgY2hpbGRyZW4oKTtcbiAgICB9IGVsc2UgaWYgKCFhY3RpdmUgJiYgcHJldmlvdXMpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwcmV2aW91czogYWN0aXZlXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gT25Gb2N1c1N0YXRlO1xufShDb21wb25lbnQpO1xuXG52YXIgT25Gb2N1cyA9IGZ1bmN0aW9uIE9uRm9jdXMoX3JlZikge1xuICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoRmllbGQsIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN1YnNjcmlwdGlvbjoge1xuICAgICAgYWN0aXZlOiB0cnVlXG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihwcm9wcykge1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoT25Gb2N1c1N0YXRlLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICB9KSk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8vXG5cbmV4cG9ydCB7IEV4dGVybmFsbHlDaGFuZ2VkLCBPbkJsdXIsIE9uQ2hhbmdlLCBPbkZvY3VzIH07XG4iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSc7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBjcmVhdGVDb250ZXh0LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmaWVsZFN1YnNjcmlwdGlvbkl0ZW1zLCBmb3JtU3Vic2NyaXB0aW9uSXRlbXMsIGNyZWF0ZUZvcm0sIGNvbmZpZ09wdGlvbnMsIHZlcnNpb24gYXMgdmVyc2lvbiQxIH0gZnJvbSAnZmluYWwtZm9ybSc7XG5cbi8vICAgICAgXG5mdW5jdGlvbiBkaWZmU3Vic2NyaXB0aW9uIChhLCBiLCBrZXlzKSB7XG4gIGlmIChhKSB7XG4gICAgaWYgKGIpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBrZXlzLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gYVtrZXldICE9PSBiW2tleV07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAhIWI7XG4gIH1cbn1cblxuLy8gY2hpbGRyZW4gcmVuZGVyIGZ1bmN0aW9uLCBvciBjb21wb25lbnQgcHJvcFxuXG5mdW5jdGlvbiByZW5kZXJDb21wb25lbnQocHJvcHMsIG5hbWUpIHtcbiAgdmFyIHJlbmRlciA9IHByb3BzLnJlbmRlcixcbiAgICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBjb21wb25lbnQgPSBwcm9wcy5jb21wb25lbnQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIFtcInJlbmRlclwiLCBcImNoaWxkcmVuXCIsIFwiY29tcG9uZW50XCJdKTtcblxuICBpZiAoY29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICB9KSk7XG4gIH1cblxuICBpZiAocmVuZGVyKSB7XG4gICAgcmV0dXJuIHJlbmRlcihfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpOyAvLyBpbmplY3QgY2hpbGRyZW4gYmFjayBpblxuICB9XG5cbiAgaWYgKHR5cGVvZiBjaGlsZHJlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJXYXJuaW5nOiBNdXN0IHNwZWNpZnkgZWl0aGVyIGEgcmVuZGVyIHByb3AsIGEgcmVuZGVyIGZ1bmN0aW9uIGFzIGNoaWxkcmVuLCBvciBhIGNvbXBvbmVudCBwcm9wIHRvIFwiICsgbmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7IC8vIHdhcm5pbmcgd2lsbCBhbGVydCBkZXZlbG9wZXIgdG8gdGhlaXIgbWlzdGFrZVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuKHJlc3QpO1xufVxuXG4vLyAgICAgIFxudmFyIGlzUmVhY3ROYXRpdmUgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIHdpbmRvdy5uYXZpZ2F0b3IucHJvZHVjdCAmJiB3aW5kb3cubmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZSc7XG5cbi8vICAgICAgXG52YXIgZ2V0U2VsZWN0ZWRWYWx1ZXMgPSBmdW5jdGlvbiBnZXRTZWxlY3RlZFZhbHVlcyhvcHRpb25zKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBvcHRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaW5kZXhdO1xuXG4gICAgICBpZiAob3B0aW9uLnNlbGVjdGVkKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbi52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBnZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKGV2ZW50LCBjdXJyZW50VmFsdWUsIHZhbHVlUHJvcCwgaXNSZWFjdE5hdGl2ZSkge1xuICBpZiAoIWlzUmVhY3ROYXRpdmUgJiYgZXZlbnQubmF0aXZlRXZlbnQgJiYgZXZlbnQubmF0aXZlRXZlbnQudGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQ7XG4gIH1cblxuICBpZiAoaXNSZWFjdE5hdGl2ZSAmJiBldmVudC5uYXRpdmVFdmVudCkge1xuICAgIHJldHVybiBldmVudC5uYXRpdmVFdmVudC50ZXh0O1xuICB9XG5cbiAgdmFyIGRldHlwZWRFdmVudCA9IGV2ZW50O1xuICB2YXIgX2RldHlwZWRFdmVudCR0YXJnZXQgPSBkZXR5cGVkRXZlbnQudGFyZ2V0LFxuICAgICAgdHlwZSA9IF9kZXR5cGVkRXZlbnQkdGFyZ2V0LnR5cGUsXG4gICAgICB2YWx1ZSA9IF9kZXR5cGVkRXZlbnQkdGFyZ2V0LnZhbHVlLFxuICAgICAgY2hlY2tlZCA9IF9kZXR5cGVkRXZlbnQkdGFyZ2V0LmNoZWNrZWQ7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgaWYgKHZhbHVlUHJvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHdlIGFyZSBtYWludGFpbmluZyBhbiBhcnJheSwgbm90IGp1c3QgYSBib29sZWFuXG4gICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgLy8gYWRkIHZhbHVlIHRvIGN1cnJlbnQgYXJyYXkgdmFsdWVcbiAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpID8gY3VycmVudFZhbHVlLmNvbmNhdCh2YWx1ZVByb3ApIDogW3ZhbHVlUHJvcF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIGZyb20gY3VycmVudCBhcnJheSB2YWx1ZVxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpbmRleCA9IGN1cnJlbnRWYWx1ZS5pbmRleE9mKHZhbHVlUHJvcCk7XG5cbiAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlLnNsaWNlKDAsIGluZGV4KS5jb25jYXQoY3VycmVudFZhbHVlLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaXQncyBqdXN0IGEgYm9vbGVhblxuICAgICAgICByZXR1cm4gISFjaGVja2VkO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc2VsZWN0LW11bHRpcGxlJzpcbiAgICAgIHJldHVybiBnZXRTZWxlY3RlZFZhbHVlcyhldmVudC50YXJnZXQub3B0aW9ucyk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuXG52YXIgUmVhY3RGaW5hbEZvcm1Db250ZXh0ID0gY3JlYXRlQ29udGV4dChudWxsKTtcbnZhciBnZXREaXNwbGF5TmFtZSA9IGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKENvbXBvbmVudCkge1xuICB2YXIgZGlzcGxheU5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gIHJldHVybiBcIlJlYWN0RmluYWxGb3JtKFwiICsgZGlzcGxheU5hbWUgKyBcIilcIjtcbn07XG52YXIgd2l0aFJlYWN0RmluYWxGb3JtID0gZnVuY3Rpb24gd2l0aFJlYWN0RmluYWxGb3JtKENvbXBvbmVudCQxKSB7XG4gIHZhciBfY2xhc3MsIF90ZW1wO1xuXG4gIHJldHVybiBfdGVtcCA9IF9jbGFzcyA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShfY2xhc3MsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gICAgZnVuY3Rpb24gX2NsYXNzKCkge1xuICAgICAgcmV0dXJuIF9SZWFjdCRDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cblxuICAgIHZhciBfcHJvdG8gPSBfY2xhc3MucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFJlYWN0RmluYWxGb3JtQ29udGV4dC5Db25zdW1lciwge1xuICAgICAgICBjaGlsZHJlbjogZnVuY3Rpb24gY2hpbGRyZW4ocmVhY3RGaW5hbEZvcm0pIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChDb21wb25lbnQkMSwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcmVhY3RGaW5hbEZvcm06IHJlYWN0RmluYWxGb3JtXG4gICAgICAgICAgfSwgX3RoaXMucHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBfY2xhc3M7XG4gIH0oQ29tcG9uZW50KSwgX2NsYXNzLmRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUoQ29tcG9uZW50JDEpLCBfdGVtcDtcbn07XG5cbnZhciBhbGwgPSBmaWVsZFN1YnNjcmlwdGlvbkl0ZW1zLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgcmVzdWx0W2tleV0gPSB0cnVlO1xuICByZXR1cm4gcmVzdWx0O1xufSwge30pO1xuXG52YXIgRmllbGQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoRmllbGQsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEZpZWxkKF9wcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIF9wcm9wcykgfHwgdGhpcztcblxuICAgIF90aGlzLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChfcmVmLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IF9yZWYuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIGluaXRpYWxWYWx1ZSA9IF9yZWYuaW5pdGlhbFZhbHVlLFxuICAgICAgICAgIGlzRXF1YWwgPSBfcmVmLmlzRXF1YWwsXG4gICAgICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgICBzdWJzY3JpcHRpb24gPSBfcmVmLnN1YnNjcmlwdGlvbixcbiAgICAgICAgICB2YWxpZGF0ZUZpZWxkcyA9IF9yZWYudmFsaWRhdGVGaWVsZHM7XG4gICAgICBfdGhpcy51bnN1YnNjcmliZSA9IF90aGlzLnByb3BzLnJlYWN0RmluYWxGb3JtLnJlZ2lzdGVyRmllbGQobmFtZSwgbGlzdGVuZXIsIHN1YnNjcmlwdGlvbiB8fCBhbGwsIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIGdldFZhbGlkYXRvcjogZnVuY3Rpb24gZ2V0VmFsaWRhdG9yKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy52YWxpZGF0ZTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBpbml0aWFsVmFsdWUsXG4gICAgICAgIGlzRXF1YWw6IGlzRXF1YWwsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzOiB2YWxpZGF0ZUZpZWxkc1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLm5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgcmV0dXJuIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc3RhdGU6IHN0YXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlcnMgPSB7XG4gICAgICBvbkJsdXI6IGZ1bmN0aW9uIG9uQmx1cihldmVudCkge1xuICAgICAgICB2YXIgc3RhdGUgPSBfdGhpcy5zdGF0ZS5zdGF0ZTsgLy8gdGhpcyBpcyB0byBhcHBlYXNlIHRoZSBGbG93IGdvZHNcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgZm9ybWF0ID0gX3RoaXMkcHJvcHMuZm9ybWF0LFxuICAgICAgICAgICAgICBmb3JtYXRPbkJsdXIgPSBfdGhpcyRwcm9wcy5mb3JtYXRPbkJsdXI7XG4gICAgICAgICAgc3RhdGUuYmx1cigpO1xuXG4gICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXRPbkJsdXIpIHtcbiAgICAgICAgICAgIHN0YXRlLmNoYW5nZShmb3JtYXQoc3RhdGUudmFsdWUsIHN0YXRlLm5hbWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgICAgcGFyc2UgPSBfdGhpcyRwcm9wczIucGFyc2UsXG4gICAgICAgICAgICBfdmFsdWUgPSBfdGhpcyRwcm9wczIudmFsdWU7IC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB7XG4gICAgICAgICAgdmFyIHRhcmdldFR5cGUgPSBldmVudC50YXJnZXQudHlwZTtcbiAgICAgICAgICB2YXIgcHJvcHMgPSBfdGhpcy5wcm9wcztcbiAgICAgICAgICB2YXIgdW5rbm93biA9IH5bJ2NoZWNrYm94JywgJ3JhZGlvJywgJ3NlbGVjdC1tdWx0aXBsZSddLmluZGV4T2YodGFyZ2V0VHlwZSkgJiYgIXByb3BzLnR5cGU7XG4gICAgICAgICAgdmFyIHR5cGUgPSB0YXJnZXRUeXBlID09PSAnc2VsZWN0LW11bHRpcGxlJyA/ICdzZWxlY3QnIDogdGFyZ2V0VHlwZTtcblxuICAgICAgICAgIHZhciBfcmVmMiA9IHRhcmdldFR5cGUgPT09ICdzZWxlY3QtbXVsdGlwbGUnID8gX3RoaXMuc3RhdGUuc3RhdGUgfHwge30gOiBwcm9wcyxcbiAgICAgICAgICAgICAgX3ZhbHVlMiA9IF9yZWYyLnZhbHVlO1xuXG4gICAgICAgICAgaWYgKHVua25vd24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXYXJuaW5nOiBZb3UgbXVzdCBwYXNzIGB0eXBlPVxcXCJcIiArIHR5cGUgKyBcIlxcXCJgIHByb3AgdG8geW91ciBGaWVsZChcIiArIHByb3BzLm5hbWUgKyBcIikgY29tcG9uZW50LlxcblwiICsgKFwiV2l0aG91dCBpdCB3ZSBkb24ndCBrbm93IGhvdyB0byB1bnBhY2sgeW91ciBgdmFsdWVgIHByb3AgLSBcIiArIChBcnJheS5pc0FycmF5KF92YWx1ZTIpID8gXCJbXCIgKyBfdmFsdWUyICsgXCJdXCIgOiBcIlxcXCJcIiArIF92YWx1ZTIgKyBcIlxcXCJcIikgKyBcIi5cIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB2YWx1ZSA9IGV2ZW50ICYmIGV2ZW50LnRhcmdldCA/IGdldFZhbHVlKGV2ZW50LCBfdGhpcy5zdGF0ZS5zdGF0ZSAmJiBfdGhpcy5zdGF0ZS5zdGF0ZS52YWx1ZSwgX3ZhbHVlLCBpc1JlYWN0TmF0aXZlKSA6IGV2ZW50O1xuICAgICAgICBfdGhpcy5zdGF0ZS5zdGF0ZSAmJiBfdGhpcy5zdGF0ZS5zdGF0ZS5jaGFuZ2UocGFyc2UgPyBwYXJzZSh2YWx1ZSwgX3RoaXMucHJvcHMubmFtZSkgOiB2YWx1ZSk7XG4gICAgICB9LFxuICAgICAgb25Gb2N1czogZnVuY3Rpb24gb25Gb2N1cyhldmVudCkge1xuICAgICAgICBfdGhpcy5zdGF0ZS5zdGF0ZSAmJiBfdGhpcy5zdGF0ZS5zdGF0ZS5mb2N1cygpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIGluaXRpYWxTdGF0ZTsgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFfdGhpcy5wcm9wcy5yZWFjdEZpbmFsRm9ybSkge1xuICAgICAgY29uc29sZS5lcnJvcignV2FybmluZzogRmllbGQgbXVzdCBiZSB1c2VkIGluc2lkZSBvZiBhIFJlYWN0RmluYWxGb3JtIGNvbXBvbmVudCcpO1xuICAgIH1cblxuICAgIGlmIChfdGhpcy5wcm9wcy5yZWFjdEZpbmFsRm9ybSkge1xuICAgICAgLy8gYXZvaWQgZXJyb3IsIHdhcm5pbmcgd2lsbCBhbGVydCBkZXZlbG9wZXIgdG8gdGhlaXIgbWlzdGFrZVxuICAgICAgX3RoaXMuc3Vic2NyaWJlKF9wcm9wcywgZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIGlmIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICBfdGhpcy5ub3RpZnkoc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluaXRpYWxTdGF0ZSA9IHN0YXRlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBGaWVsZC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzMy5uYW1lLFxuICAgICAgICBzdWJzY3JpcHRpb24gPSBfdGhpcyRwcm9wczMuc3Vic2NyaXB0aW9uO1xuXG4gICAgaWYgKHByZXZQcm9wcy5uYW1lICE9PSBuYW1lIHx8IGRpZmZTdWJzY3JpcHRpb24ocHJldlByb3BzLnN1YnNjcmlwdGlvbiwgc3Vic2NyaXB0aW9uLCBmaWVsZFN1YnNjcmlwdGlvbkl0ZW1zKSkge1xuICAgICAgaWYgKHRoaXMucHJvcHMucmVhY3RGaW5hbEZvcm0pIHtcbiAgICAgICAgLy8gYXZvaWQgZXJyb3IsIHdhcm5pbmcgd2lsbCBhbGVydCBkZXZlbG9wZXIgdG8gdGhlaXIgbWlzdGFrZVxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKHRoaXMucHJvcHMsIHRoaXMubm90aWZ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGFsbG93TnVsbCA9IF90aGlzJHByb3BzNC5hbGxvd051bGwsXG4gICAgICAgIGNvbXBvbmVudCA9IF90aGlzJHByb3BzNC5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM0LmNoaWxkcmVuLFxuICAgICAgICBmb3JtYXQgPSBfdGhpcyRwcm9wczQuZm9ybWF0LFxuICAgICAgICBmb3JtYXRPbkJsdXIgPSBfdGhpcyRwcm9wczQuZm9ybWF0T25CbHVyLFxuICAgICAgICBwYXJzZSA9IF90aGlzJHByb3BzNC5wYXJzZSxcbiAgICAgICAgaXNFcXVhbCA9IF90aGlzJHByb3BzNC5pc0VxdWFsLFxuICAgICAgICBuYW1lID0gX3RoaXMkcHJvcHM0Lm5hbWUsXG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IF90aGlzJHByb3BzNC5zdWJzY3JpcHRpb24sXG4gICAgICAgIHZhbGlkYXRlID0gX3RoaXMkcHJvcHM0LnZhbGlkYXRlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyA9IF90aGlzJHByb3BzNC52YWxpZGF0ZUZpZWxkcyxcbiAgICAgICAgcmVhY3RGaW5hbEZvcm0gPSBfdGhpcyRwcm9wczQucmVhY3RGaW5hbEZvcm0sXG4gICAgICAgIF92YWx1ZSA9IF90aGlzJHByb3BzNC52YWx1ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzNCwgW1wiYWxsb3dOdWxsXCIsIFwiY29tcG9uZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJmb3JtYXRcIiwgXCJmb3JtYXRPbkJsdXJcIiwgXCJwYXJzZVwiLCBcImlzRXF1YWxcIiwgXCJuYW1lXCIsIFwic3Vic2NyaXB0aW9uXCIsIFwidmFsaWRhdGVcIiwgXCJ2YWxpZGF0ZUZpZWxkc1wiLCBcInJlYWN0RmluYWxGb3JtXCIsIFwidmFsdWVcIl0pO1xuXG4gICAgdmFyIF9yZWYzID0gdGhpcy5zdGF0ZS5zdGF0ZSB8fCB7fSxcbiAgICAgICAgYmx1ciA9IF9yZWYzLmJsdXIsXG4gICAgICAgIGNoYW5nZSA9IF9yZWYzLmNoYW5nZSxcbiAgICAgICAgZm9jdXMgPSBfcmVmMy5mb2N1cyxcbiAgICAgICAgdmFsdWUgPSBfcmVmMy52YWx1ZSxcbiAgICAgICAgaWdub3JlTmFtZSA9IF9yZWYzLm5hbWUsXG4gICAgICAgIG90aGVyU3RhdGUgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmMywgW1wiYmx1clwiLCBcImNoYW5nZVwiLCBcImZvY3VzXCIsIFwidmFsdWVcIiwgXCJuYW1lXCJdKTtcblxuICAgIHZhciBtZXRhID0ge1xuICAgICAgLy8gdGhpcyBpcyB0byBhcHBlYXNlIHRoZSBGbG93IGdvZHNcbiAgICAgIGFjdGl2ZTogb3RoZXJTdGF0ZS5hY3RpdmUsXG4gICAgICBkYXRhOiBvdGhlclN0YXRlLmRhdGEsXG4gICAgICBkaXJ0eTogb3RoZXJTdGF0ZS5kaXJ0eSxcbiAgICAgIGRpcnR5U2luY2VMYXN0U3VibWl0OiBvdGhlclN0YXRlLmRpcnR5U2luY2VMYXN0U3VibWl0LFxuICAgICAgZXJyb3I6IG90aGVyU3RhdGUuZXJyb3IsXG4gICAgICBpbml0aWFsOiBvdGhlclN0YXRlLmluaXRpYWwsXG4gICAgICBpbnZhbGlkOiBvdGhlclN0YXRlLmludmFsaWQsXG4gICAgICBtb2RpZmllZDogb3RoZXJTdGF0ZS5tb2RpZmllZCxcbiAgICAgIHByaXN0aW5lOiBvdGhlclN0YXRlLnByaXN0aW5lLFxuICAgICAgc3VibWl0RXJyb3I6IG90aGVyU3RhdGUuc3VibWl0RXJyb3IsXG4gICAgICBzdWJtaXRGYWlsZWQ6IG90aGVyU3RhdGUuc3VibWl0RmFpbGVkLFxuICAgICAgc3VibWl0U3VjY2VlZGVkOiBvdGhlclN0YXRlLnN1Ym1pdFN1Y2NlZWRlZCxcbiAgICAgIHN1Ym1pdHRpbmc6IG90aGVyU3RhdGUuc3VibWl0dGluZyxcbiAgICAgIHRvdWNoZWQ6IG90aGVyU3RhdGUudG91Y2hlZCxcbiAgICAgIHZhbGlkOiBvdGhlclN0YXRlLnZhbGlkLFxuICAgICAgdmlzaXRlZDogb3RoZXJTdGF0ZS52aXNpdGVkXG4gICAgfTtcblxuICAgIGlmIChmb3JtYXRPbkJsdXIpIHtcbiAgICAgIHZhbHVlID0gRmllbGQuZGVmYXVsdFByb3BzLmZvcm1hdCh2YWx1ZSwgbmFtZSk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQpIHtcbiAgICAgIHZhbHVlID0gZm9ybWF0KHZhbHVlLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgJiYgIWFsbG93TnVsbCkge1xuICAgICAgdmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICB2YXIgaW5wdXQgPSBfZXh0ZW5kcyh7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfSwgdGhpcy5oYW5kbGVycyk7XG5cbiAgICBpZiAocmVzdC50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICBpZiAoX3ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5wdXQuY2hlY2tlZCA9ICEhdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dC5jaGVja2VkID0gISEoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgfnZhbHVlLmluZGV4T2YoX3ZhbHVlKSk7XG4gICAgICAgIGlucHV0LnZhbHVlID0gX3ZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVzdC50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICBpbnB1dC5jaGVja2VkID0gdmFsdWUgPT09IF92YWx1ZTtcbiAgICAgIGlucHV0LnZhbHVlID0gX3ZhbHVlO1xuICAgIH0gZWxzZSBpZiAoY29tcG9uZW50ID09PSAnc2VsZWN0JyAmJiByZXN0Lm11bHRpcGxlKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IGlucHV0LnZhbHVlIHx8IFtdO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbihfZXh0ZW5kcyh7XG4gICAgICAgIGlucHV0OiBpbnB1dCxcbiAgICAgICAgbWV0YTogbWV0YVxuICAgICAgfSwgcmVzdCkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gaWdub3JlIG1ldGEsIGNvbWJpbmUgaW5wdXQgd2l0aCBhbnkgb3RoZXIgcHJvcHNcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIGlucHV0LCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgfSwgcmVzdCkpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJQcm9wcyA9IHtcbiAgICAgIGlucHV0OiBpbnB1dCxcbiAgICAgIG1ldGE6IG1ldGEgLy8gYXNzaWduIHRvIGZvcmNlIEZsb3cgY2hlY2tcblxuICAgIH07XG4gICAgcmV0dXJuIHJlbmRlckNvbXBvbmVudChfZXh0ZW5kcyh7fSwgcmVuZGVyUHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50XG4gICAgfSwgcmVzdCksIFwiRmllbGQoXCIgKyBuYW1lICsgXCIpXCIpO1xuICB9O1xuXG4gIHJldHVybiBGaWVsZDtcbn0oQ29tcG9uZW50KTtcblxuRmllbGQuZGVmYXVsdFByb3BzID0ge1xuICBmb3JtYXQ6IGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgbmFtZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJycgOiB2YWx1ZTtcbiAgfSxcbiAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKHZhbHVlLCBuYW1lKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnJyA/IHVuZGVmaW5lZCA6IHZhbHVlO1xuICB9XG59O1xudmFyIEZpZWxkJDEgPSB3aXRoUmVhY3RGaW5hbEZvcm0oRmllbGQpO1xuXG4vLyAgICAgIFxudmFyIHNoYWxsb3dFcXVhbCA9IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnIHx8ICFhIHx8IHR5cGVvZiBiICE9PSAnb2JqZWN0JyB8fCAhYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgYkhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5iaW5kKGIpO1xuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGtleXNBLmxlbmd0aDsgaWR4KyspIHtcbiAgICB2YXIga2V5ID0ga2V5c0FbaWR4XTtcblxuICAgIGlmICghYkhhc093blByb3BlcnR5KGtleSkgfHwgYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vICAgICAgXG52YXIgaXNTeW50aGV0aWNFdmVudCA9IGZ1bmN0aW9uIGlzU3ludGhldGljRXZlbnQoY2FuZGlkYXRlKSB7XG4gIHJldHVybiAhIShjYW5kaWRhdGUgJiYgdHlwZW9mIGNhbmRpZGF0ZS5zdG9wUHJvcGFnYXRpb24gPT09ICdmdW5jdGlvbicpO1xufTtcblxudmFyIHZlcnNpb24gPSAnNC4xLjAnO1xudmFyIHZlcnNpb25zID0ge1xuICAnZmluYWwtZm9ybSc6IHZlcnNpb24kMSxcbiAgJ3JlYWN0LWZpbmFsLWZvcm0nOiB2ZXJzaW9uXG59O1xudmFyIGFsbCQxID0gZm9ybVN1YnNjcmlwdGlvbkl0ZW1zLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgcmVzdWx0W2tleV0gPSB0cnVlO1xuICByZXR1cm4gcmVzdWx0O1xufSwge30pO1xuXG52YXIgUmVhY3RGaW5hbEZvcm0gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUmVhY3RGaW5hbEZvcm0sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJlYWN0RmluYWxGb3JtKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5ub3RpZnkgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmIChfdGhpcy5tb3VudGVkKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0ZTogc3RhdGVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVTdWJtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICAvLyBzb21ldGltZXMgbm90IHRydWUsIGUuZy4gUmVhY3QgTmF0aXZlXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQucHJldmVudERlZmF1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5zdG9wUHJvcGFnYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBwcmV2ZW50IGFueSBvdXRlciBmb3JtcyBmcm9tIHJlY2VpdmluZyB0aGUgZXZlbnQgdG9vXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmZvcm0uc3VibWl0KCk7XG4gICAgfTtcblxuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBjb21wb25lbnQgPSBwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIHJlbmRlciA9IHByb3BzLnJlbmRlcixcbiAgICAgICAgc3Vic2NyaXB0aW9uID0gcHJvcHMuc3Vic2NyaXB0aW9uLFxuICAgICAgICBkZWNvcmF0b3JzID0gcHJvcHMuZGVjb3JhdG9ycyxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImNvbXBvbmVudFwiLCBcInJlbmRlclwiLCBcInN1YnNjcmlwdGlvblwiLCBcImRlY29yYXRvcnNcIl0pO1xuXG4gICAgdmFyIGNvbmZpZyA9IHJlc3Q7XG4gICAgX3RoaXMubW91bnRlZCA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIF90aGlzLmZvcm0gPSBjcmVhdGVGb3JtKGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXYXJuaW5nOiBcIiArIGUubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMudW5zdWJzY3JpcHRpb25zID0gW107XG5cbiAgICBpZiAoX3RoaXMuZm9ybSkge1xuICAgICAgLy8gc2V0IGluaXRpYWwgc3RhdGVcbiAgICAgIHZhciBpbml0aWFsU3RhdGUgPSB7fTtcblxuICAgICAgX3RoaXMuZm9ybS5zdWJzY3JpYmUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIGluaXRpYWxTdGF0ZSA9IHN0YXRlO1xuICAgICAgfSwgc3Vic2NyaXB0aW9uIHx8IGFsbCQxKSgpO1xuXG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgc3RhdGU6IGluaXRpYWxTdGF0ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdG9ycykge1xuICAgICAgZGVjb3JhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChkZWNvcmF0b3IpIHtcbiAgICAgICAgX3RoaXMudW5zdWJzY3JpcHRpb25zLnB1c2goZGVjb3JhdG9yKF90aGlzLmZvcm0pKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSZWFjdEZpbmFsRm9ybS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICB0aGlzLmZvcm0ucGF1c2VWYWxpZGF0aW9uKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5mb3JtLnN1YnNjcmliZSh0aGlzLm5vdGlmeSwgdGhpcy5wcm9wcy5zdWJzY3JpcHRpb24gfHwgYWxsJDEpKTtcbiAgICAgIHRoaXMuZm9ybS5yZXN1bWVWYWxpZGF0aW9uKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVwZGF0ZSgpIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgIHRoaXMucmVzdW1lVmFsaWRhdGlvbiA9IHRoaXMucmVzdW1lVmFsaWRhdGlvbiB8fCAhdGhpcy5mb3JtLmlzVmFsaWRhdGlvblBhdXNlZCgpO1xuICAgICAgdGhpcy5mb3JtLnBhdXNlVmFsaWRhdGlvbigpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMucmVzdW1lVmFsaWRhdGlvbikge1xuICAgICAgdGhpcy5mb3JtLnJlc3VtZVZhbGlkYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzICYmICEodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzRXF1YWwgfHwgc2hhbGxvd0VxdWFsKShwcmV2UHJvcHMuaW5pdGlhbFZhbHVlcywgdGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzKSkge1xuICAgICAgdGhpcy5mb3JtLmluaXRpYWxpemUodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzKTtcbiAgICB9XG5cbiAgICBjb25maWdPcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKGtleSA9PT0gJ2luaXRpYWxWYWx1ZXMnIHx8IHByZXZQcm9wc1trZXldID09PSBfdGhpczIucHJvcHNba2V5XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5mb3JtLnNldENvbmZpZyhrZXksIF90aGlzMi5wcm9wc1trZXldKTtcbiAgICB9KTsgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIXNoYWxsb3dFcXVhbChwcmV2UHJvcHMuZGVjb3JhdG9ycywgdGhpcy5wcm9wcy5kZWNvcmF0b3JzKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdXYXJuaW5nOiBGb3JtIGRlY29yYXRvcnMgc2hvdWxkIG5vdCBjaGFuZ2UgZnJvbSBvbmUgcmVuZGVyIHRvIHRoZSBuZXh0IGFzIG5ldyB2YWx1ZXMgd2lsbCBiZSBpZ25vcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc2hhbGxvd0VxdWFsKHByZXZQcm9wcy5zdWJzY3JpcHRpb24sIHRoaXMucHJvcHMuc3Vic2NyaXB0aW9uKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdXYXJuaW5nOiBGb3JtIHN1YnNjcmlwdGlvbiBzaG91bGQgbm90IGNoYW5nZSBmcm9tIG9uZSByZW5kZXIgdG8gdGhlIG5leHQgYXMgbmV3IHZhbHVlcyB3aWxsIGJlIGlnbm9yZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy51bnN1YnNjcmlwdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAodW5zdWJzY3JpYmUpIHtcbiAgICAgIHJldHVybiB1bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAvLyByZW1vdmUgY29uZmlnIHByb3BzXG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgZGVidWcgPSBfdGhpcyRwcm9wcy5kZWJ1ZyxcbiAgICAgICAgaW5pdGlhbFZhbHVlcyA9IF90aGlzJHByb3BzLmluaXRpYWxWYWx1ZXMsXG4gICAgICAgIG11dGF0b3JzID0gX3RoaXMkcHJvcHMubXV0YXRvcnMsXG4gICAgICAgIG9uU3VibWl0ID0gX3RoaXMkcHJvcHMub25TdWJtaXQsXG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IF90aGlzJHByb3BzLnN1YnNjcmlwdGlvbixcbiAgICAgICAgdmFsaWRhdGUgPSBfdGhpcyRwcm9wcy52YWxpZGF0ZSxcbiAgICAgICAgdmFsaWRhdGVPbkJsdXIgPSBfdGhpcyRwcm9wcy52YWxpZGF0ZU9uQmx1cixcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiZGVidWdcIiwgXCJpbml0aWFsVmFsdWVzXCIsIFwibXV0YXRvcnNcIiwgXCJvblN1Ym1pdFwiLCBcInN1YnNjcmlwdGlvblwiLCBcInZhbGlkYXRlXCIsIFwidmFsaWRhdGVPbkJsdXJcIl0pO1xuXG4gICAgdmFyIHJlbmRlclByb3BzID0gX2V4dGVuZHMoe30sIHRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLnN0YXRlIDoge30sIHtcbiAgICAgIGJhdGNoOiB0aGlzLmZvcm0gJiYgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IEFzIG9mIFJlYWN0IEZpbmFsIEZvcm0gdjMuMy4wLCBwcm9wcy5iYXRjaCgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIFJlYWN0IEZpbmFsIEZvcm0uIFVzZTogcHJvcHMuZm9ybS5iYXRjaCgpIGluc3RlYWQuIENoZWNrIHlvdXIgUmVhY3RGaW5hbEZvcm0gcmVuZGVyIHByb3AuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMy5mb3JtLmJhdGNoKGZuKTtcbiAgICAgIH0sXG4gICAgICBibHVyOiB0aGlzLmZvcm0gJiYgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogQXMgb2YgUmVhY3QgRmluYWwgRm9ybSB2My4zLjAsIHByb3BzLmJsdXIoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBSZWFjdCBGaW5hbCBGb3JtLiBVc2U6IHByb3BzLmZvcm0uYmx1cigpIGluc3RlYWQuIENoZWNrIHlvdXIgUmVhY3RGaW5hbEZvcm0gcmVuZGVyIHByb3AuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMy5mb3JtLmJsdXIobmFtZSk7XG4gICAgICB9LFxuICAgICAgY2hhbmdlOiB0aGlzLmZvcm0gJiYgZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IEFzIG9mIFJlYWN0IEZpbmFsIEZvcm0gdjMuMy4wLCBwcm9wcy5jaGFuZ2UoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBSZWFjdCBGaW5hbCBGb3JtLiBVc2U6IHByb3BzLmZvcm0uY2hhbmdlKCkgaW5zdGVhZC4gQ2hlY2sgeW91ciBSZWFjdEZpbmFsRm9ybSByZW5kZXIgcHJvcC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX3RoaXMzLmZvcm0uY2hhbmdlKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBmb2N1czogdGhpcy5mb3JtICYmIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IEFzIG9mIFJlYWN0IEZpbmFsIEZvcm0gdjMuMy4wLCBwcm9wcy5mb2N1cygpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIFJlYWN0IEZpbmFsIEZvcm0uIFVzZTogcHJvcHMuZm9ybS5mb2N1cygpIGluc3RlYWQuIENoZWNrIHlvdXIgUmVhY3RGaW5hbEZvcm0gcmVuZGVyIHByb3AuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMy5mb3JtLmZvY3VzKG5hbWUpO1xuICAgICAgfSxcbiAgICAgIGZvcm06IF9leHRlbmRzKHt9LCB0aGlzLmZvcm0sIHtcbiAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGV2ZW50T3JWYWx1ZXMpIHtcbiAgICAgICAgICBpZiAoaXNTeW50aGV0aWNFdmVudChldmVudE9yVmFsdWVzKSkge1xuICAgICAgICAgICAgLy8gaXQncyBhIFJlYWN0IFN5bnRoZXRpY0V2ZW50LCBjYWxsIHJlc2V0IHdpdGggbm8gYXJndW1lbnRzXG4gICAgICAgICAgICBfdGhpczMuZm9ybS5yZXNldCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpczMuZm9ybS5yZXNldChldmVudE9yVmFsdWVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgaGFuZGxlU3VibWl0OiB0aGlzLmhhbmRsZVN1Ym1pdCxcbiAgICAgIGluaXRpYWxpemU6IHRoaXMuZm9ybSAmJiBmdW5jdGlvbiAodmFsdWVzKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IEFzIG9mIFJlYWN0IEZpbmFsIEZvcm0gdjMuMy4wLCBwcm9wcy5pbml0aWFsaXplKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgUmVhY3QgRmluYWwgRm9ybS4gVXNlOiBwcm9wcy5mb3JtLmluaXRpYWxpemUoKSBpbnN0ZWFkLiBDaGVjayB5b3VyIFJlYWN0RmluYWxGb3JtIHJlbmRlciBwcm9wLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfdGhpczMuZm9ybS5pbml0aWFsaXplKHZhbHVlcyk7XG4gICAgICB9LFxuICAgICAgbXV0YXRvcnM6IHRoaXMuZm9ybSAmJiBPYmplY3Qua2V5cyh0aGlzLmZvcm0ubXV0YXRvcnMpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzMyRmb3JtJG11dGF0b3JzO1xuXG4gICAgICAgICAgKF90aGlzMyRmb3JtJG11dGF0b3JzID0gX3RoaXMzLmZvcm0ubXV0YXRvcnMpW2tleV0uYXBwbHkoX3RoaXMzJGZvcm0kbXV0YXRvcnMsIGFyZ3VtZW50cyk7IC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogQXMgb2YgUmVhY3QgRmluYWwgRm9ybSB2My4zLjAsIHByb3BzLm11dGF0b3JzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIFJlYWN0IEZpbmFsIEZvcm0uIFVzZTogcHJvcHMuZm9ybS5tdXRhdG9ycyBpbnN0ZWFkLiBDaGVjayB5b3VyIFJlYWN0RmluYWxGb3JtIHJlbmRlciBwcm9wLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sIHt9KSxcbiAgICAgIHJlc2V0OiB0aGlzLmZvcm0gJiYgZnVuY3Rpb24gKHZhbHVlcykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXYXJuaW5nOiBBcyBvZiBSZWFjdCBGaW5hbCBGb3JtIHYzLjMuMCwgcHJvcHMucmVzZXQoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBSZWFjdCBGaW5hbCBGb3JtLiBVc2U6IHByb3BzLmZvcm0ucmVzZXQoKSBpbnN0ZWFkLiBDaGVjayB5b3VyIFJlYWN0RmluYWxGb3JtIHJlbmRlciBwcm9wLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfdGhpczMuZm9ybS5yZXNldCh2YWx1ZXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoUmVhY3RGaW5hbEZvcm1Db250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogdGhpcy5mb3JtXG4gICAgfSwgcmVuZGVyQ29tcG9uZW50KF9leHRlbmRzKHt9LCBwcm9wcywgcmVuZGVyUHJvcHMsIHtcbiAgICAgIF9fdmVyc2lvbnM6IHZlcnNpb25zXG4gICAgfSksICdSZWFjdEZpbmFsRm9ybScpKTtcbiAgfTtcblxuICByZXR1cm4gUmVhY3RGaW5hbEZvcm07XG59KENvbXBvbmVudCk7XG5cbnZhciBGb3JtU3B5ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKEZvcm1TcHksIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEZvcm1TcHkocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcblxuICAgIF90aGlzLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChfcmVmLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IF9yZWYuc3Vic2NyaXB0aW9uO1xuICAgICAgX3RoaXMudW5zdWJzY3JpYmUgPSBfdGhpcy5wcm9wcy5yZWFjdEZpbmFsRm9ybS5zdWJzY3JpYmUobGlzdGVuZXIsIHN1YnNjcmlwdGlvbiB8fCBhbGwkMSk7XG4gICAgfTtcblxuICAgIF90aGlzLm5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0ZTogc3RhdGVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25DaGFuZ2Uoc3RhdGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgaW5pdGlhbFN0YXRlOyAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIV90aGlzLnByb3BzLnJlYWN0RmluYWxGb3JtKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdXYXJuaW5nOiBGb3JtU3B5IG11c3QgYmUgdXNlZCBpbnNpZGUgb2YgYSBSZWFjdEZpbmFsRm9ybSBjb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoX3RoaXMucHJvcHMucmVhY3RGaW5hbEZvcm0pIHtcbiAgICAgIC8vIGF2b2lkIGVycm9yLCB3YXJuaW5nIHdpbGwgYWxlcnQgZGV2ZWxvcGVyIHRvIHRoZWlyIG1pc3Rha2VcbiAgICAgIF90aGlzLnN1YnNjcmliZShwcm9wcywgZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIGlmIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICBfdGhpcy5ub3RpZnkoc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluaXRpYWxTdGF0ZSA9IHN0YXRlO1xuXG4gICAgICAgICAgaWYgKHByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBwcm9wcy5vbkNoYW5nZShzdGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgc3RhdGU6IGluaXRpYWxTdGF0ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gRm9ybVNweS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5wcm9wcy5zdWJzY3JpcHRpb247XG5cbiAgICBpZiAoZGlmZlN1YnNjcmlwdGlvbihwcmV2UHJvcHMuc3Vic2NyaXB0aW9uLCBzdWJzY3JpcHRpb24sIGZvcm1TdWJzY3JpcHRpb25JdGVtcykpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLnJlYWN0RmluYWxGb3JtKSB7XG4gICAgICAgIC8vIGF2b2lkIGVycm9yLCB3YXJuaW5nIHdpbGwgYWxlcnQgZGV2ZWxvcGVyIHRvIHRoZWlyIG1pc3Rha2VcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZSh0aGlzLnByb3BzLCB0aGlzLm5vdGlmeSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgIHJlYWN0RmluYWxGb3JtID0gX3RoaXMkcHJvcHMucmVhY3RGaW5hbEZvcm0sXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wib25DaGFuZ2VcIiwgXCJyZWFjdEZpbmFsRm9ybVwiXSk7XG5cbiAgICB2YXIgcmVuZGVyUHJvcHMgPSB7XG4gICAgICBiYXRjaDogcmVhY3RGaW5hbEZvcm0gJiYgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IEFzIG9mIFJlYWN0IEZpbmFsIEZvcm0gdjMuMy4wLCBwcm9wcy5iYXRjaCgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIFJlYWN0IEZpbmFsIEZvcm0uIFVzZTogcHJvcHMuZm9ybS5iYXRjaCgpIGluc3RlYWQuIENoZWNrIHlvdXIgRm9ybVNweSByZW5kZXIgcHJvcC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVhY3RGaW5hbEZvcm0uYmF0Y2goZm4pO1xuICAgICAgfSxcbiAgICAgIGJsdXI6IHJlYWN0RmluYWxGb3JtICYmIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IEFzIG9mIFJlYWN0IEZpbmFsIEZvcm0gdjMuMy4wLCBwcm9wcy5ibHVyKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgUmVhY3QgRmluYWwgRm9ybS4gVXNlOiBwcm9wcy5mb3JtLmJsdXIoKSBpbnN0ZWFkLiBDaGVjayB5b3VyIEZvcm1TcHkgcmVuZGVyIHByb3AuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlYWN0RmluYWxGb3JtLmJsdXIobmFtZSk7XG4gICAgICB9LFxuICAgICAgY2hhbmdlOiByZWFjdEZpbmFsRm9ybSAmJiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogQXMgb2YgUmVhY3QgRmluYWwgRm9ybSB2My4zLjAsIHByb3BzLmNoYW5nZSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIFJlYWN0IEZpbmFsIEZvcm0uIFVzZTogcHJvcHMuZm9ybS5jaGFuZ2UoKSBpbnN0ZWFkLiBDaGVjayB5b3VyIEZvcm1TcHkgcmVuZGVyIHByb3AuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlYWN0RmluYWxGb3JtLmNoYW5nZShuYW1lLCB2YWx1ZSk7XG4gICAgICB9LFxuICAgICAgZm9jdXM6IHJlYWN0RmluYWxGb3JtICYmIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IEFzIG9mIFJlYWN0IEZpbmFsIEZvcm0gdjMuMy4wLCBwcm9wcy5mb2N1cygpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIFJlYWN0IEZpbmFsIEZvcm0uIFVzZTogcHJvcHMuZm9ybS5mb2N1cygpIGluc3RlYWQuIENoZWNrIHlvdXIgRm9ybVNweSByZW5kZXIgcHJvcC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVhY3RGaW5hbEZvcm0uZm9jdXMobmFtZSk7XG4gICAgICB9LFxuICAgICAgZm9ybTogX2V4dGVuZHMoe30sIHJlYWN0RmluYWxGb3JtLCB7XG4gICAgICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChldmVudE9yVmFsdWVzKSB7XG4gICAgICAgICAgaWYgKGlzU3ludGhldGljRXZlbnQoZXZlbnRPclZhbHVlcykpIHtcbiAgICAgICAgICAgIC8vIGl0J3MgYSBSZWFjdCBTeW50aGV0aWNFdmVudCwgY2FsbCByZXNldCB3aXRoIG5vIGFyZ3VtZW50c1xuICAgICAgICAgICAgcmVhY3RGaW5hbEZvcm0ucmVzZXQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVhY3RGaW5hbEZvcm0ucmVzZXQoZXZlbnRPclZhbHVlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGluaXRpYWxpemU6IHJlYWN0RmluYWxGb3JtICYmIGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogQXMgb2YgUmVhY3QgRmluYWwgRm9ybSB2My4zLjAsIHByb3BzLmluaXRpYWxpemUoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBSZWFjdCBGaW5hbCBGb3JtLiBVc2U6IHByb3BzLmZvcm0uaW5pdGlhbGl6ZSgpIGluc3RlYWQuIENoZWNrIHlvdXIgRm9ybVNweSByZW5kZXIgcHJvcC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVhY3RGaW5hbEZvcm0uaW5pdGlhbGl6ZSh2YWx1ZXMpO1xuICAgICAgfSxcbiAgICAgIG11dGF0b3JzOiByZWFjdEZpbmFsRm9ybSAmJiBPYmplY3Qua2V5cyhyZWFjdEZpbmFsRm9ybS5tdXRhdG9ycykucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgX3JlYWN0RmluYWxGb3JtJG11dGF0O1xuXG4gICAgICAgICAgKF9yZWFjdEZpbmFsRm9ybSRtdXRhdCA9IHJlYWN0RmluYWxGb3JtLm11dGF0b3JzKVtrZXldLmFwcGx5KF9yZWFjdEZpbmFsRm9ybSRtdXRhdCwgYXJndW1lbnRzKTsgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXYXJuaW5nOiBBcyBvZiBSZWFjdCBGaW5hbCBGb3JtIHYzLjMuMCwgcHJvcHMubXV0YXRvcnMgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgUmVhY3QgRmluYWwgRm9ybS4gVXNlOiBwcm9wcy5mb3JtLm11dGF0b3JzIGluc3RlYWQuIENoZWNrIHlvdXIgRm9ybVNweSByZW5kZXIgcHJvcC5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LCB7fSksXG4gICAgICByZXNldDogcmVhY3RGaW5hbEZvcm0gJiYgZnVuY3Rpb24gKHZhbHVlcykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXYXJuaW5nOiBBcyBvZiBSZWFjdCBGaW5hbCBGb3JtIHYzLjMuMCwgcHJvcHMucmVzZXQoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBSZWFjdCBGaW5hbCBGb3JtLiBVc2U6IHByb3BzLmZvcm0ucmVzZXQoKSBpbnN0ZWFkLiBDaGVjayB5b3VyIEZvcm1TcHkgcmVuZGVyIHByb3AuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlYWN0RmluYWxGb3JtLnJlc2V0KHZhbHVlcyk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gb25DaGFuZ2UgPyBudWxsIDogcmVuZGVyQ29tcG9uZW50KF9leHRlbmRzKHt9LCByZXN0LCB0aGlzLnN0YXRlID8gdGhpcy5zdGF0ZS5zdGF0ZSA6IHt9LCByZW5kZXJQcm9wcyksICdGb3JtU3B5Jyk7XG4gIH07XG5cbiAgcmV0dXJuIEZvcm1TcHk7XG59KENvbXBvbmVudCk7XG5cbnZhciBGb3JtU3B5JDEgPSB3aXRoUmVhY3RGaW5hbEZvcm0oRm9ybVNweSk7XG5cbi8vXG5cbmV4cG9ydCB7IEZpZWxkJDEgYXMgRmllbGQsIFJlYWN0RmluYWxGb3JtIGFzIEZvcm0sIHZlcnNpb24sIEZvcm1TcHkkMSBhcyBGb3JtU3B5LCB3aXRoUmVhY3RGaW5hbEZvcm0sIFJlYWN0RmluYWxGb3JtQ29udGV4dCB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcblx0dmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZSgncHJvcC10eXBlcycpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIHNpemVyU3R5bGUgPSB7XG5cdHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuXHR0b3A6IDAsXG5cdGxlZnQ6IDAsXG5cdHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuXHRoZWlnaHQ6IDAsXG5cdG92ZXJmbG93OiAnc2Nyb2xsJyxcblx0d2hpdGVTcGFjZTogJ3ByZSdcbn07XG5cbnZhciBJTlBVVF9QUk9QU19CTEFDS0xJU1QgPSBbJ2V4dHJhV2lkdGgnLCAnaW5qZWN0U3R5bGVzJywgJ2lucHV0Q2xhc3NOYW1lJywgJ2lucHV0UmVmJywgJ2lucHV0U3R5bGUnLCAnbWluV2lkdGgnLCAnb25BdXRvc2l6ZScsICdwbGFjZWhvbGRlcklzTWluV2lkdGgnXTtcblxudmFyIGNsZWFuSW5wdXRQcm9wcyA9IGZ1bmN0aW9uIGNsZWFuSW5wdXRQcm9wcyhpbnB1dFByb3BzKSB7XG5cdElOUFVUX1BST1BTX0JMQUNLTElTVC5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuXHRcdHJldHVybiBkZWxldGUgaW5wdXRQcm9wc1tmaWVsZF07XG5cdH0pO1xuXHRyZXR1cm4gaW5wdXRQcm9wcztcbn07XG5cbnZhciBjb3B5U3R5bGVzID0gZnVuY3Rpb24gY29weVN0eWxlcyhzdHlsZXMsIG5vZGUpIHtcblx0bm9kZS5zdHlsZS5mb250U2l6ZSA9IHN0eWxlcy5mb250U2l6ZTtcblx0bm9kZS5zdHlsZS5mb250RmFtaWx5ID0gc3R5bGVzLmZvbnRGYW1pbHk7XG5cdG5vZGUuc3R5bGUuZm9udFdlaWdodCA9IHN0eWxlcy5mb250V2VpZ2h0O1xuXHRub2RlLnN0eWxlLmZvbnRTdHlsZSA9IHN0eWxlcy5mb250U3R5bGU7XG5cdG5vZGUuc3R5bGUubGV0dGVyU3BhY2luZyA9IHN0eWxlcy5sZXR0ZXJTcGFjaW5nO1xuXHRub2RlLnN0eWxlLnRleHRUcmFuc2Zvcm0gPSBzdHlsZXMudGV4dFRyYW5zZm9ybTtcbn07XG5cbnZhciBpc0lFID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciA/IC9NU0lFIHxUcmlkZW50XFwvfEVkZ2VcXC8vLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpIDogZmFsc2U7XG5cbnZhciBnZW5lcmF0ZUlkID0gZnVuY3Rpb24gZ2VuZXJhdGVJZCgpIHtcblx0Ly8gd2Ugb25seSBuZWVkIGFuIGF1dG8tZ2VuZXJhdGVkIElEIGZvciBzdHlsZXNoZWV0IGluamVjdGlvbiwgd2hpY2ggaXMgb25seVxuXHQvLyB1c2VkIGZvciBJRS4gc28gaWYgdGhlIGJyb3dzZXIgaXMgbm90IElFLCB0aGlzIHNob3VsZCByZXR1cm4gdW5kZWZpbmVkLlxuXHRyZXR1cm4gaXNJRSA/ICdfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCAxMikgOiB1bmRlZmluZWQ7XG59O1xuXG52YXIgQXV0b3NpemVJbnB1dCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG5cdF9pbmhlcml0cyhBdXRvc2l6ZUlucHV0LCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBBdXRvc2l6ZUlucHV0KHByb3BzKSB7XG5cdFx0X2NsYXNzQ2FsbENoZWNrKHRoaXMsIEF1dG9zaXplSW5wdXQpO1xuXG5cdFx0dmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEF1dG9zaXplSW5wdXQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihBdXRvc2l6ZUlucHV0KSkuY2FsbCh0aGlzLCBwcm9wcykpO1xuXG5cdFx0X3RoaXMuaW5wdXRSZWYgPSBmdW5jdGlvbiAoZWwpIHtcblx0XHRcdF90aGlzLmlucHV0ID0gZWw7XG5cdFx0XHRpZiAodHlwZW9mIF90aGlzLnByb3BzLmlucHV0UmVmID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdF90aGlzLnByb3BzLmlucHV0UmVmKGVsKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0X3RoaXMucGxhY2VIb2xkZXJTaXplclJlZiA9IGZ1bmN0aW9uIChlbCkge1xuXHRcdFx0X3RoaXMucGxhY2VIb2xkZXJTaXplciA9IGVsO1xuXHRcdH07XG5cblx0XHRfdGhpcy5zaXplclJlZiA9IGZ1bmN0aW9uIChlbCkge1xuXHRcdFx0X3RoaXMuc2l6ZXIgPSBlbDtcblx0XHR9O1xuXG5cdFx0X3RoaXMuc3RhdGUgPSB7XG5cdFx0XHRpbnB1dFdpZHRoOiBwcm9wcy5taW5XaWR0aCxcblx0XHRcdGlucHV0SWQ6IHByb3BzLmlkIHx8IGdlbmVyYXRlSWQoKVxuXHRcdH07XG5cdFx0cmV0dXJuIF90aGlzO1xuXHR9XG5cblx0X2NyZWF0ZUNsYXNzKEF1dG9zaXplSW5wdXQsIFt7XG5cdFx0a2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcblx0XHRcdHRoaXMubW91bnRlZCA9IHRydWU7XG5cdFx0XHR0aGlzLmNvcHlJbnB1dFN0eWxlcygpO1xuXHRcdFx0dGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG5cdFx0XHR2YXIgaWQgPSBuZXh0UHJvcHMuaWQ7XG5cblx0XHRcdGlmIChpZCAhPT0gdGhpcy5wcm9wcy5pZCkge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHsgaW5wdXRJZDogaWQgfHwgZ2VuZXJhdGVJZCgpIH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2NvbXBvbmVudERpZFVwZGF0ZScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuXHRcdFx0aWYgKHByZXZTdGF0ZS5pbnB1dFdpZHRoICE9PSB0aGlzLnN0YXRlLmlucHV0V2lkdGgpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uQXV0b3NpemUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aGlzLnByb3BzLm9uQXV0b3NpemUodGhpcy5zdGF0ZS5pbnB1dFdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcblx0XHRcdHRoaXMubW91bnRlZCA9IGZhbHNlO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2NvcHlJbnB1dFN0eWxlcycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvcHlJbnB1dFN0eWxlcygpIHtcblx0XHRcdGlmICghdGhpcy5tb3VudGVkIHx8ICF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgaW5wdXRTdHlsZXMgPSB0aGlzLmlucHV0ICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaW5wdXQpO1xuXHRcdFx0aWYgKCFpbnB1dFN0eWxlcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb3B5U3R5bGVzKGlucHV0U3R5bGVzLCB0aGlzLnNpemVyKTtcblx0XHRcdGlmICh0aGlzLnBsYWNlSG9sZGVyU2l6ZXIpIHtcblx0XHRcdFx0Y29weVN0eWxlcyhpbnB1dFN0eWxlcywgdGhpcy5wbGFjZUhvbGRlclNpemVyKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICd1cGRhdGVJbnB1dFdpZHRoJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gdXBkYXRlSW5wdXRXaWR0aCgpIHtcblx0XHRcdGlmICghdGhpcy5tb3VudGVkIHx8ICF0aGlzLnNpemVyIHx8IHR5cGVvZiB0aGlzLnNpemVyLnNjcm9sbFdpZHRoID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgbmV3SW5wdXRXaWR0aCA9IHZvaWQgMDtcblx0XHRcdGlmICh0aGlzLnByb3BzLnBsYWNlaG9sZGVyICYmICghdGhpcy5wcm9wcy52YWx1ZSB8fCB0aGlzLnByb3BzLnZhbHVlICYmIHRoaXMucHJvcHMucGxhY2Vob2xkZXJJc01pbldpZHRoKSkge1xuXHRcdFx0XHRuZXdJbnB1dFdpZHRoID0gTWF0aC5tYXgodGhpcy5zaXplci5zY3JvbGxXaWR0aCwgdGhpcy5wbGFjZUhvbGRlclNpemVyLnNjcm9sbFdpZHRoKSArIDI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdJbnB1dFdpZHRoID0gdGhpcy5zaXplci5zY3JvbGxXaWR0aCArIDI7XG5cdFx0XHR9XG5cdFx0XHQvLyBhZGQgZXh0cmFXaWR0aCB0byB0aGUgZGV0ZWN0ZWQgd2lkdGguIGZvciBudW1iZXIgdHlwZXMsIHRoaXMgZGVmYXVsdHMgdG8gMTYgdG8gYWxsb3cgZm9yIHRoZSBzdGVwcGVyIFVJXG5cdFx0XHR2YXIgZXh0cmFXaWR0aCA9IHRoaXMucHJvcHMudHlwZSA9PT0gJ251bWJlcicgJiYgdGhpcy5wcm9wcy5leHRyYVdpZHRoID09PSB1bmRlZmluZWQgPyAxNiA6IHBhcnNlSW50KHRoaXMucHJvcHMuZXh0cmFXaWR0aCkgfHwgMDtcblx0XHRcdG5ld0lucHV0V2lkdGggKz0gZXh0cmFXaWR0aDtcblx0XHRcdGlmIChuZXdJbnB1dFdpZHRoIDwgdGhpcy5wcm9wcy5taW5XaWR0aCkge1xuXHRcdFx0XHRuZXdJbnB1dFdpZHRoID0gdGhpcy5wcm9wcy5taW5XaWR0aDtcblx0XHRcdH1cblx0XHRcdGlmIChuZXdJbnB1dFdpZHRoICE9PSB0aGlzLnN0YXRlLmlucHV0V2lkdGgpIHtcblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdFx0aW5wdXRXaWR0aDogbmV3SW5wdXRXaWR0aFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdnZXRJbnB1dCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldElucHV0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuaW5wdXQ7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZm9jdXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBmb2N1cygpIHtcblx0XHRcdHRoaXMuaW5wdXQuZm9jdXMoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdibHVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gYmx1cigpIHtcblx0XHRcdHRoaXMuaW5wdXQuYmx1cigpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3NlbGVjdCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHNlbGVjdCgpIHtcblx0XHRcdHRoaXMuaW5wdXQuc2VsZWN0KCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyU3R5bGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyU3R5bGVzKCkge1xuXHRcdFx0Ly8gdGhpcyBtZXRob2QgaW5qZWN0cyBzdHlsZXMgdG8gaGlkZSBJRSdzIGNsZWFyIGluZGljYXRvciwgd2hpY2ggbWVzc2VzXG5cdFx0XHQvLyB3aXRoIGlucHV0IHNpemUgZGV0ZWN0aW9uLiB0aGUgc3R5bGVzaGVldCBpcyBvbmx5IGluamVjdGVkIHdoZW4gdGhlXG5cdFx0XHQvLyBicm93c2VyIGlzIElFLCBhbmQgY2FuIGFsc28gYmUgZGlzYWJsZWQgYnkgdGhlIGBpbmplY3RTdHlsZXNgIHByb3AuXG5cdFx0XHR2YXIgaW5qZWN0U3R5bGVzID0gdGhpcy5wcm9wcy5pbmplY3RTdHlsZXM7XG5cblx0XHRcdHJldHVybiBpc0lFICYmIGluamVjdFN0eWxlcyA/IF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdzdHlsZScsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcblx0XHRcdFx0XHRfX2h0bWw6ICdpbnB1dCMnICsgdGhpcy5zdGF0ZS5pbnB1dElkICsgJzo6LW1zLWNsZWFyIHtkaXNwbGF5OiBub25lO30nXG5cdFx0XHRcdH0gfSkgOiBudWxsO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3JlbmRlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdHZhciBzaXplclZhbHVlID0gW3RoaXMucHJvcHMuZGVmYXVsdFZhbHVlLCB0aGlzLnByb3BzLnZhbHVlLCAnJ10ucmVkdWNlKGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUpIHtcblx0XHRcdFx0aWYgKHByZXZpb3VzVmFsdWUgIT09IG51bGwgJiYgcHJldmlvdXNWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGN1cnJlbnRWYWx1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHR2YXIgd3JhcHBlclN0eWxlID0gX2V4dGVuZHMoe30sIHRoaXMucHJvcHMuc3R5bGUpO1xuXHRcdFx0aWYgKCF3cmFwcGVyU3R5bGUuZGlzcGxheSkgd3JhcHBlclN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcblxuXHRcdFx0dmFyIGlucHV0U3R5bGUgPSBfZXh0ZW5kcyh7XG5cdFx0XHRcdGJveFNpemluZzogJ2NvbnRlbnQtYm94Jyxcblx0XHRcdFx0d2lkdGg6IHRoaXMuc3RhdGUuaW5wdXRXaWR0aCArICdweCdcblx0XHRcdH0sIHRoaXMucHJvcHMuaW5wdXRTdHlsZSk7XG5cblx0XHRcdHZhciBpbnB1dFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHRoaXMucHJvcHMsIFtdKTtcblxuXHRcdFx0Y2xlYW5JbnB1dFByb3BzKGlucHV0UHJvcHMpO1xuXHRcdFx0aW5wdXRQcm9wcy5jbGFzc05hbWUgPSB0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lO1xuXHRcdFx0aW5wdXRQcm9wcy5pZCA9IHRoaXMuc3RhdGUuaW5wdXRJZDtcblx0XHRcdGlucHV0UHJvcHMuc3R5bGUgPSBpbnB1dFN0eWxlO1xuXG5cdFx0XHRyZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHR7IGNsYXNzTmFtZTogdGhpcy5wcm9wcy5jbGFzc05hbWUsIHN0eWxlOiB3cmFwcGVyU3R5bGUgfSxcblx0XHRcdFx0dGhpcy5yZW5kZXJTdHlsZXMoKSxcblx0XHRcdFx0X3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgX2V4dGVuZHMoe30sIGlucHV0UHJvcHMsIHsgcmVmOiB0aGlzLmlucHV0UmVmIH0pKSxcblx0XHRcdFx0X3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdFx0eyByZWY6IHRoaXMuc2l6ZXJSZWYsIHN0eWxlOiBzaXplclN0eWxlIH0sXG5cdFx0XHRcdFx0c2l6ZXJWYWx1ZVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0aGlzLnByb3BzLnBsYWNlaG9sZGVyID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdFx0eyByZWY6IHRoaXMucGxhY2VIb2xkZXJTaXplclJlZiwgc3R5bGU6IHNpemVyU3R5bGUgfSxcblx0XHRcdFx0XHR0aGlzLnByb3BzLnBsYWNlaG9sZGVyXG5cdFx0XHRcdCkgOiBudWxsXG5cdFx0XHQpO1xuXHRcdH1cblx0fV0pO1xuXG5cdHJldHVybiBBdXRvc2l6ZUlucHV0O1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuQXV0b3NpemVJbnB1dC5wcm9wVHlwZXMgPSB7XG5cdGNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIC8vIGNsYXNzTmFtZSBmb3IgdGhlIG91dGVyIGVsZW1lbnRcblx0ZGVmYXVsdFZhbHVlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmFueSwgLy8gZGVmYXVsdCBmaWVsZCB2YWx1ZVxuXHRleHRyYVdpZHRoOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbLy8gYWRkaXRpb25hbCB3aWR0aCBmb3IgaW5wdXQgZWxlbWVudFxuXHRfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlciwgX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmddKSxcblx0aWQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLCAvLyBpZCB0byB1c2UgZm9yIHRoZSBpbnB1dCwgY2FuIGJlIHNldCBmb3IgY29uc2lzdGVudCBzbmFwc2hvdHNcblx0aW5qZWN0U3R5bGVzOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsIC8vIGluamVjdCB0aGUgY3VzdG9tIHN0eWxlc2hlZXQgdG8gaGlkZSBjbGVhciBVSSwgZGVmYXVsdHMgdG8gdHJ1ZVxuXHRpbnB1dENsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIC8vIGNsYXNzTmFtZSBmb3IgdGhlIGlucHV0IGVsZW1lbnRcblx0aW5wdXRSZWY6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gcmVmIGNhbGxiYWNrIGZvciB0aGUgaW5wdXQgZWxlbWVudFxuXHRpbnB1dFN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCwgLy8gY3NzIHN0eWxlcyBmb3IgdGhlIGlucHV0IGVsZW1lbnRcblx0bWluV2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFsvLyBtaW5pbXVtIHdpZHRoIGZvciBpbnB1dCBlbGVtZW50XG5cdF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLCBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZ10pLFxuXHRvbkF1dG9zaXplOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsIC8vIG9uQXV0b3NpemUgaGFuZGxlcjogZnVuY3Rpb24obmV3V2lkdGgpIHt9XG5cdG9uQ2hhbmdlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsIC8vIG9uQ2hhbmdlIGhhbmRsZXI6IGZ1bmN0aW9uKGV2ZW50KSB7fVxuXHRwbGFjZWhvbGRlcjogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIC8vIHBsYWNlaG9sZGVyIHRleHRcblx0cGxhY2Vob2xkZXJJc01pbldpZHRoOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsIC8vIGRvbid0IGNvbGxhcHNlIHNpemUgdG8gbGVzcyB0aGFuIHRoZSBwbGFjZWhvbGRlclxuXHRzdHlsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsIC8vIGNzcyBzdHlsZXMgZm9yIHRoZSBvdXRlciBlbGVtZW50XG5cdHZhbHVlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmFueSAvLyBmaWVsZCB2YWx1ZVxufTtcbkF1dG9zaXplSW5wdXQuZGVmYXVsdFByb3BzID0ge1xuXHRtaW5XaWR0aDogMSxcblx0aW5qZWN0U3R5bGVzOiB0cnVlXG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBBdXRvc2l6ZUlucHV0OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMnO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheSc7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQnO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjayc7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzJztcbmltcG9ydCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJztcbmltcG9ydCBfZ2V0UHJvdG90eXBlT2YgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YnO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cyc7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eSc7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vY29yZSc7XG5pbXBvcnQgeyBmaW5kRE9NTm9kZSB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBpIGFzIGlzVG91Y2hDYXBhYmxlLCBkIGFzIGlzTW9iaWxlRGV2aWNlLCBlIGFzIGlzRG9jdW1lbnRFbGVtZW50LCBmIGFzIGNsZWFuVmFsdWUsIGggYXMgc2Nyb2xsSW50b1ZpZXcsIGogYXMgY2xhc3NOYW1lcywgbiBhcyBub29wIH0gZnJvbSAnLi4vLi4vY2h1bmstZThhZTRiMGYuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0IHsgYyBhcyBjbGVhckluZGljYXRvckNTUywgYSBhcyBjb250YWluZXJDU1MsIGIgYXMgY3NzLCBkIGFzIGRyb3Bkb3duSW5kaWNhdG9yQ1NTLCBnIGFzIGdyb3VwQ1NTLCBlIGFzIGdyb3VwSGVhZGluZ0NTUywgaSBhcyBpbmRpY2F0b3JzQ29udGFpbmVyQ1NTLCBmIGFzIGluZGljYXRvclNlcGFyYXRvckNTUywgaCBhcyBpbnB1dENTUywgbCBhcyBsb2FkaW5nSW5kaWNhdG9yQ1NTLCBqIGFzIGxvYWRpbmdNZXNzYWdlQ1NTLCBtIGFzIG1lbnVDU1MsIGsgYXMgbWVudUxpc3RDU1MsIG4gYXMgbWVudVBvcnRhbENTUywgbyBhcyBtdWx0aVZhbHVlQ1NTLCBwIGFzIG11bHRpVmFsdWVMYWJlbENTUywgcSBhcyBtdWx0aVZhbHVlUmVtb3ZlQ1NTLCByIGFzIG5vT3B0aW9uc01lc3NhZ2VDU1MsIHMgYXMgb3B0aW9uQ1NTLCB0IGFzIHBsYWNlaG9sZGVyQ1NTLCB1IGFzIGNzcyQxLCB2IGFzIHZhbHVlQ29udGFpbmVyQ1NTLCB3IGFzIGRlZmF1bHRDb21wb25lbnRzLCB4IGFzIGV4cG9ydGVkRXF1YWwsIE0gYXMgTWVudVBsYWNlciB9IGZyb20gJy4uLy4uL2NodW5rLTVkMjAwYTQxLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCBfY3NzIGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5cbnZhciBkaWFjcml0aWNzID0gW3tcbiAgYmFzZTogJ0EnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNDFcXHUyNEI2XFx1RkYyMVxcdTAwQzBcXHUwMEMxXFx1MDBDMlxcdTFFQTZcXHUxRUE0XFx1MUVBQVxcdTFFQThcXHUwMEMzXFx1MDEwMFxcdTAxMDJcXHUxRUIwXFx1MUVBRVxcdTFFQjRcXHUxRUIyXFx1MDIyNlxcdTAxRTBcXHUwMEM0XFx1MDFERVxcdTFFQTJcXHUwMEM1XFx1MDFGQVxcdTAxQ0RcXHUwMjAwXFx1MDIwMlxcdTFFQTBcXHUxRUFDXFx1MUVCNlxcdTFFMDBcXHUwMTA0XFx1MDIzQVxcdTJDNkZdL2dcbn0sIHtcbiAgYmFzZTogJ0FBJyxcbiAgbGV0dGVyczogL1tcXHVBNzMyXS9nXG59LCB7XG4gIGJhc2U6ICdBRScsXG4gIGxldHRlcnM6IC9bXFx1MDBDNlxcdTAxRkNcXHUwMUUyXS9nXG59LCB7XG4gIGJhc2U6ICdBTycsXG4gIGxldHRlcnM6IC9bXFx1QTczNF0vZ1xufSwge1xuICBiYXNlOiAnQVUnLFxuICBsZXR0ZXJzOiAvW1xcdUE3MzZdL2dcbn0sIHtcbiAgYmFzZTogJ0FWJyxcbiAgbGV0dGVyczogL1tcXHVBNzM4XFx1QTczQV0vZ1xufSwge1xuICBiYXNlOiAnQVknLFxuICBsZXR0ZXJzOiAvW1xcdUE3M0NdL2dcbn0sIHtcbiAgYmFzZTogJ0InLFxuICBsZXR0ZXJzOiAvW1xcdTAwNDJcXHUyNEI3XFx1RkYyMlxcdTFFMDJcXHUxRTA0XFx1MUUwNlxcdTAyNDNcXHUwMTgyXFx1MDE4MV0vZ1xufSwge1xuICBiYXNlOiAnQycsXG4gIGxldHRlcnM6IC9bXFx1MDA0M1xcdTI0QjhcXHVGRjIzXFx1MDEwNlxcdTAxMDhcXHUwMTBBXFx1MDEwQ1xcdTAwQzdcXHUxRTA4XFx1MDE4N1xcdTAyM0JcXHVBNzNFXS9nXG59LCB7XG4gIGJhc2U6ICdEJyxcbiAgbGV0dGVyczogL1tcXHUwMDQ0XFx1MjRCOVxcdUZGMjRcXHUxRTBBXFx1MDEwRVxcdTFFMENcXHUxRTEwXFx1MUUxMlxcdTFFMEVcXHUwMTEwXFx1MDE4QlxcdTAxOEFcXHUwMTg5XFx1QTc3OV0vZ1xufSwge1xuICBiYXNlOiAnRFonLFxuICBsZXR0ZXJzOiAvW1xcdTAxRjFcXHUwMUM0XS9nXG59LCB7XG4gIGJhc2U6ICdEeicsXG4gIGxldHRlcnM6IC9bXFx1MDFGMlxcdTAxQzVdL2dcbn0sIHtcbiAgYmFzZTogJ0UnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNDVcXHUyNEJBXFx1RkYyNVxcdTAwQzhcXHUwMEM5XFx1MDBDQVxcdTFFQzBcXHUxRUJFXFx1MUVDNFxcdTFFQzJcXHUxRUJDXFx1MDExMlxcdTFFMTRcXHUxRTE2XFx1MDExNFxcdTAxMTZcXHUwMENCXFx1MUVCQVxcdTAxMUFcXHUwMjA0XFx1MDIwNlxcdTFFQjhcXHUxRUM2XFx1MDIyOFxcdTFFMUNcXHUwMTE4XFx1MUUxOFxcdTFFMUFcXHUwMTkwXFx1MDE4RV0vZ1xufSwge1xuICBiYXNlOiAnRicsXG4gIGxldHRlcnM6IC9bXFx1MDA0NlxcdTI0QkJcXHVGRjI2XFx1MUUxRVxcdTAxOTFcXHVBNzdCXS9nXG59LCB7XG4gIGJhc2U6ICdHJyxcbiAgbGV0dGVyczogL1tcXHUwMDQ3XFx1MjRCQ1xcdUZGMjdcXHUwMUY0XFx1MDExQ1xcdTFFMjBcXHUwMTFFXFx1MDEyMFxcdTAxRTZcXHUwMTIyXFx1MDFFNFxcdTAxOTNcXHVBN0EwXFx1QTc3RFxcdUE3N0VdL2dcbn0sIHtcbiAgYmFzZTogJ0gnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNDhcXHUyNEJEXFx1RkYyOFxcdTAxMjRcXHUxRTIyXFx1MUUyNlxcdTAyMUVcXHUxRTI0XFx1MUUyOFxcdTFFMkFcXHUwMTI2XFx1MkM2N1xcdTJDNzVcXHVBNzhEXS9nXG59LCB7XG4gIGJhc2U6ICdJJyxcbiAgbGV0dGVyczogL1tcXHUwMDQ5XFx1MjRCRVxcdUZGMjlcXHUwMENDXFx1MDBDRFxcdTAwQ0VcXHUwMTI4XFx1MDEyQVxcdTAxMkNcXHUwMTMwXFx1MDBDRlxcdTFFMkVcXHUxRUM4XFx1MDFDRlxcdTAyMDhcXHUwMjBBXFx1MUVDQVxcdTAxMkVcXHUxRTJDXFx1MDE5N10vZ1xufSwge1xuICBiYXNlOiAnSicsXG4gIGxldHRlcnM6IC9bXFx1MDA0QVxcdTI0QkZcXHVGRjJBXFx1MDEzNFxcdTAyNDhdL2dcbn0sIHtcbiAgYmFzZTogJ0snLFxuICBsZXR0ZXJzOiAvW1xcdTAwNEJcXHUyNEMwXFx1RkYyQlxcdTFFMzBcXHUwMUU4XFx1MUUzMlxcdTAxMzZcXHUxRTM0XFx1MDE5OFxcdTJDNjlcXHVBNzQwXFx1QTc0MlxcdUE3NDRcXHVBN0EyXS9nXG59LCB7XG4gIGJhc2U6ICdMJyxcbiAgbGV0dGVyczogL1tcXHUwMDRDXFx1MjRDMVxcdUZGMkNcXHUwMTNGXFx1MDEzOVxcdTAxM0RcXHUxRTM2XFx1MUUzOFxcdTAxM0JcXHUxRTNDXFx1MUUzQVxcdTAxNDFcXHUwMjNEXFx1MkM2MlxcdTJDNjBcXHVBNzQ4XFx1QTc0NlxcdUE3ODBdL2dcbn0sIHtcbiAgYmFzZTogJ0xKJyxcbiAgbGV0dGVyczogL1tcXHUwMUM3XS9nXG59LCB7XG4gIGJhc2U6ICdMaicsXG4gIGxldHRlcnM6IC9bXFx1MDFDOF0vZ1xufSwge1xuICBiYXNlOiAnTScsXG4gIGxldHRlcnM6IC9bXFx1MDA0RFxcdTI0QzJcXHVGRjJEXFx1MUUzRVxcdTFFNDBcXHUxRTQyXFx1MkM2RVxcdTAxOUNdL2dcbn0sIHtcbiAgYmFzZTogJ04nLFxuICBsZXR0ZXJzOiAvW1xcdTAwNEVcXHUyNEMzXFx1RkYyRVxcdTAxRjhcXHUwMTQzXFx1MDBEMVxcdTFFNDRcXHUwMTQ3XFx1MUU0NlxcdTAxNDVcXHUxRTRBXFx1MUU0OFxcdTAyMjBcXHUwMTlEXFx1QTc5MFxcdUE3QTRdL2dcbn0sIHtcbiAgYmFzZTogJ05KJyxcbiAgbGV0dGVyczogL1tcXHUwMUNBXS9nXG59LCB7XG4gIGJhc2U6ICdOaicsXG4gIGxldHRlcnM6IC9bXFx1MDFDQl0vZ1xufSwge1xuICBiYXNlOiAnTycsXG4gIGxldHRlcnM6IC9bXFx1MDA0RlxcdTI0QzRcXHVGRjJGXFx1MDBEMlxcdTAwRDNcXHUwMEQ0XFx1MUVEMlxcdTFFRDBcXHUxRUQ2XFx1MUVENFxcdTAwRDVcXHUxRTRDXFx1MDIyQ1xcdTFFNEVcXHUwMTRDXFx1MUU1MFxcdTFFNTJcXHUwMTRFXFx1MDIyRVxcdTAyMzBcXHUwMEQ2XFx1MDIyQVxcdTFFQ0VcXHUwMTUwXFx1MDFEMVxcdTAyMENcXHUwMjBFXFx1MDFBMFxcdTFFRENcXHUxRURBXFx1MUVFMFxcdTFFREVcXHUxRUUyXFx1MUVDQ1xcdTFFRDhcXHUwMUVBXFx1MDFFQ1xcdTAwRDhcXHUwMUZFXFx1MDE4NlxcdTAxOUZcXHVBNzRBXFx1QTc0Q10vZ1xufSwge1xuICBiYXNlOiAnT0knLFxuICBsZXR0ZXJzOiAvW1xcdTAxQTJdL2dcbn0sIHtcbiAgYmFzZTogJ09PJyxcbiAgbGV0dGVyczogL1tcXHVBNzRFXS9nXG59LCB7XG4gIGJhc2U6ICdPVScsXG4gIGxldHRlcnM6IC9bXFx1MDIyMl0vZ1xufSwge1xuICBiYXNlOiAnUCcsXG4gIGxldHRlcnM6IC9bXFx1MDA1MFxcdTI0QzVcXHVGRjMwXFx1MUU1NFxcdTFFNTZcXHUwMUE0XFx1MkM2M1xcdUE3NTBcXHVBNzUyXFx1QTc1NF0vZ1xufSwge1xuICBiYXNlOiAnUScsXG4gIGxldHRlcnM6IC9bXFx1MDA1MVxcdTI0QzZcXHVGRjMxXFx1QTc1NlxcdUE3NThcXHUwMjRBXS9nXG59LCB7XG4gIGJhc2U6ICdSJyxcbiAgbGV0dGVyczogL1tcXHUwMDUyXFx1MjRDN1xcdUZGMzJcXHUwMTU0XFx1MUU1OFxcdTAxNThcXHUwMjEwXFx1MDIxMlxcdTFFNUFcXHUxRTVDXFx1MDE1NlxcdTFFNUVcXHUwMjRDXFx1MkM2NFxcdUE3NUFcXHVBN0E2XFx1QTc4Ml0vZ1xufSwge1xuICBiYXNlOiAnUycsXG4gIGxldHRlcnM6IC9bXFx1MDA1M1xcdTI0QzhcXHVGRjMzXFx1MUU5RVxcdTAxNUFcXHUxRTY0XFx1MDE1Q1xcdTFFNjBcXHUwMTYwXFx1MUU2NlxcdTFFNjJcXHUxRTY4XFx1MDIxOFxcdTAxNUVcXHUyQzdFXFx1QTdBOFxcdUE3ODRdL2dcbn0sIHtcbiAgYmFzZTogJ1QnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNTRcXHUyNEM5XFx1RkYzNFxcdTFFNkFcXHUwMTY0XFx1MUU2Q1xcdTAyMUFcXHUwMTYyXFx1MUU3MFxcdTFFNkVcXHUwMTY2XFx1MDFBQ1xcdTAxQUVcXHUwMjNFXFx1QTc4Nl0vZ1xufSwge1xuICBiYXNlOiAnVFonLFxuICBsZXR0ZXJzOiAvW1xcdUE3MjhdL2dcbn0sIHtcbiAgYmFzZTogJ1UnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNTVcXHUyNENBXFx1RkYzNVxcdTAwRDlcXHUwMERBXFx1MDBEQlxcdTAxNjhcXHUxRTc4XFx1MDE2QVxcdTFFN0FcXHUwMTZDXFx1MDBEQ1xcdTAxREJcXHUwMUQ3XFx1MDFENVxcdTAxRDlcXHUxRUU2XFx1MDE2RVxcdTAxNzBcXHUwMUQzXFx1MDIxNFxcdTAyMTZcXHUwMUFGXFx1MUVFQVxcdTFFRThcXHUxRUVFXFx1MUVFQ1xcdTFFRjBcXHUxRUU0XFx1MUU3MlxcdTAxNzJcXHUxRTc2XFx1MUU3NFxcdTAyNDRdL2dcbn0sIHtcbiAgYmFzZTogJ1YnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNTZcXHUyNENCXFx1RkYzNlxcdTFFN0NcXHUxRTdFXFx1MDFCMlxcdUE3NUVcXHUwMjQ1XS9nXG59LCB7XG4gIGJhc2U6ICdWWScsXG4gIGxldHRlcnM6IC9bXFx1QTc2MF0vZ1xufSwge1xuICBiYXNlOiAnVycsXG4gIGxldHRlcnM6IC9bXFx1MDA1N1xcdTI0Q0NcXHVGRjM3XFx1MUU4MFxcdTFFODJcXHUwMTc0XFx1MUU4NlxcdTFFODRcXHUxRTg4XFx1MkM3Ml0vZ1xufSwge1xuICBiYXNlOiAnWCcsXG4gIGxldHRlcnM6IC9bXFx1MDA1OFxcdTI0Q0RcXHVGRjM4XFx1MUU4QVxcdTFFOENdL2dcbn0sIHtcbiAgYmFzZTogJ1knLFxuICBsZXR0ZXJzOiAvW1xcdTAwNTlcXHUyNENFXFx1RkYzOVxcdTFFRjJcXHUwMEREXFx1MDE3NlxcdTFFRjhcXHUwMjMyXFx1MUU4RVxcdTAxNzhcXHUxRUY2XFx1MUVGNFxcdTAxQjNcXHUwMjRFXFx1MUVGRV0vZ1xufSwge1xuICBiYXNlOiAnWicsXG4gIGxldHRlcnM6IC9bXFx1MDA1QVxcdTI0Q0ZcXHVGRjNBXFx1MDE3OVxcdTFFOTBcXHUwMTdCXFx1MDE3RFxcdTFFOTJcXHUxRTk0XFx1MDFCNVxcdTAyMjRcXHUyQzdGXFx1MkM2QlxcdUE3NjJdL2dcbn0sIHtcbiAgYmFzZTogJ2EnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNjFcXHUyNEQwXFx1RkY0MVxcdTFFOUFcXHUwMEUwXFx1MDBFMVxcdTAwRTJcXHUxRUE3XFx1MUVBNVxcdTFFQUJcXHUxRUE5XFx1MDBFM1xcdTAxMDFcXHUwMTAzXFx1MUVCMVxcdTFFQUZcXHUxRUI1XFx1MUVCM1xcdTAyMjdcXHUwMUUxXFx1MDBFNFxcdTAxREZcXHUxRUEzXFx1MDBFNVxcdTAxRkJcXHUwMUNFXFx1MDIwMVxcdTAyMDNcXHUxRUExXFx1MUVBRFxcdTFFQjdcXHUxRTAxXFx1MDEwNVxcdTJDNjVcXHUwMjUwXS9nXG59LCB7XG4gIGJhc2U6ICdhYScsXG4gIGxldHRlcnM6IC9bXFx1QTczM10vZ1xufSwge1xuICBiYXNlOiAnYWUnLFxuICBsZXR0ZXJzOiAvW1xcdTAwRTZcXHUwMUZEXFx1MDFFM10vZ1xufSwge1xuICBiYXNlOiAnYW8nLFxuICBsZXR0ZXJzOiAvW1xcdUE3MzVdL2dcbn0sIHtcbiAgYmFzZTogJ2F1JyxcbiAgbGV0dGVyczogL1tcXHVBNzM3XS9nXG59LCB7XG4gIGJhc2U6ICdhdicsXG4gIGxldHRlcnM6IC9bXFx1QTczOVxcdUE3M0JdL2dcbn0sIHtcbiAgYmFzZTogJ2F5JyxcbiAgbGV0dGVyczogL1tcXHVBNzNEXS9nXG59LCB7XG4gIGJhc2U6ICdiJyxcbiAgbGV0dGVyczogL1tcXHUwMDYyXFx1MjREMVxcdUZGNDJcXHUxRTAzXFx1MUUwNVxcdTFFMDdcXHUwMTgwXFx1MDE4M1xcdTAyNTNdL2dcbn0sIHtcbiAgYmFzZTogJ2MnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNjNcXHUyNEQyXFx1RkY0M1xcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHUwMEU3XFx1MUUwOVxcdTAxODhcXHUwMjNDXFx1QTczRlxcdTIxODRdL2dcbn0sIHtcbiAgYmFzZTogJ2QnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNjRcXHUyNEQzXFx1RkY0NFxcdTFFMEJcXHUwMTBGXFx1MUUwRFxcdTFFMTFcXHUxRTEzXFx1MUUwRlxcdTAxMTFcXHUwMThDXFx1MDI1NlxcdTAyNTdcXHVBNzdBXS9nXG59LCB7XG4gIGJhc2U6ICdkeicsXG4gIGxldHRlcnM6IC9bXFx1MDFGM1xcdTAxQzZdL2dcbn0sIHtcbiAgYmFzZTogJ2UnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNjVcXHUyNEQ0XFx1RkY0NVxcdTAwRThcXHUwMEU5XFx1MDBFQVxcdTFFQzFcXHUxRUJGXFx1MUVDNVxcdTFFQzNcXHUxRUJEXFx1MDExM1xcdTFFMTVcXHUxRTE3XFx1MDExNVxcdTAxMTdcXHUwMEVCXFx1MUVCQlxcdTAxMUJcXHUwMjA1XFx1MDIwN1xcdTFFQjlcXHUxRUM3XFx1MDIyOVxcdTFFMURcXHUwMTE5XFx1MUUxOVxcdTFFMUJcXHUwMjQ3XFx1MDI1QlxcdTAxRERdL2dcbn0sIHtcbiAgYmFzZTogJ2YnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNjZcXHUyNEQ1XFx1RkY0NlxcdTFFMUZcXHUwMTkyXFx1QTc3Q10vZ1xufSwge1xuICBiYXNlOiAnZycsXG4gIGxldHRlcnM6IC9bXFx1MDA2N1xcdTI0RDZcXHVGRjQ3XFx1MDFGNVxcdTAxMURcXHUxRTIxXFx1MDExRlxcdTAxMjFcXHUwMUU3XFx1MDEyM1xcdTAxRTVcXHUwMjYwXFx1QTdBMVxcdTFENzlcXHVBNzdGXS9nXG59LCB7XG4gIGJhc2U6ICdoJyxcbiAgbGV0dGVyczogL1tcXHUwMDY4XFx1MjREN1xcdUZGNDhcXHUwMTI1XFx1MUUyM1xcdTFFMjdcXHUwMjFGXFx1MUUyNVxcdTFFMjlcXHUxRTJCXFx1MUU5NlxcdTAxMjdcXHUyQzY4XFx1MkM3NlxcdTAyNjVdL2dcbn0sIHtcbiAgYmFzZTogJ2h2JyxcbiAgbGV0dGVyczogL1tcXHUwMTk1XS9nXG59LCB7XG4gIGJhc2U6ICdpJyxcbiAgbGV0dGVyczogL1tcXHUwMDY5XFx1MjREOFxcdUZGNDlcXHUwMEVDXFx1MDBFRFxcdTAwRUVcXHUwMTI5XFx1MDEyQlxcdTAxMkRcXHUwMEVGXFx1MUUyRlxcdTFFQzlcXHUwMUQwXFx1MDIwOVxcdTAyMEJcXHUxRUNCXFx1MDEyRlxcdTFFMkRcXHUwMjY4XFx1MDEzMV0vZ1xufSwge1xuICBiYXNlOiAnaicsXG4gIGxldHRlcnM6IC9bXFx1MDA2QVxcdTI0RDlcXHVGRjRBXFx1MDEzNVxcdTAxRjBcXHUwMjQ5XS9nXG59LCB7XG4gIGJhc2U6ICdrJyxcbiAgbGV0dGVyczogL1tcXHUwMDZCXFx1MjREQVxcdUZGNEJcXHUxRTMxXFx1MDFFOVxcdTFFMzNcXHUwMTM3XFx1MUUzNVxcdTAxOTlcXHUyQzZBXFx1QTc0MVxcdUE3NDNcXHVBNzQ1XFx1QTdBM10vZ1xufSwge1xuICBiYXNlOiAnbCcsXG4gIGxldHRlcnM6IC9bXFx1MDA2Q1xcdTI0REJcXHVGRjRDXFx1MDE0MFxcdTAxM0FcXHUwMTNFXFx1MUUzN1xcdTFFMzlcXHUwMTNDXFx1MUUzRFxcdTFFM0JcXHUwMTdGXFx1MDE0MlxcdTAxOUFcXHUwMjZCXFx1MkM2MVxcdUE3NDlcXHVBNzgxXFx1QTc0N10vZ1xufSwge1xuICBiYXNlOiAnbGonLFxuICBsZXR0ZXJzOiAvW1xcdTAxQzldL2dcbn0sIHtcbiAgYmFzZTogJ20nLFxuICBsZXR0ZXJzOiAvW1xcdTAwNkRcXHUyNERDXFx1RkY0RFxcdTFFM0ZcXHUxRTQxXFx1MUU0M1xcdTAyNzFcXHUwMjZGXS9nXG59LCB7XG4gIGJhc2U6ICduJyxcbiAgbGV0dGVyczogL1tcXHUwMDZFXFx1MjRERFxcdUZGNEVcXHUwMUY5XFx1MDE0NFxcdTAwRjFcXHUxRTQ1XFx1MDE0OFxcdTFFNDdcXHUwMTQ2XFx1MUU0QlxcdTFFNDlcXHUwMTlFXFx1MDI3MlxcdTAxNDlcXHVBNzkxXFx1QTdBNV0vZ1xufSwge1xuICBiYXNlOiAnbmonLFxuICBsZXR0ZXJzOiAvW1xcdTAxQ0NdL2dcbn0sIHtcbiAgYmFzZTogJ28nLFxuICBsZXR0ZXJzOiAvW1xcdTAwNkZcXHUyNERFXFx1RkY0RlxcdTAwRjJcXHUwMEYzXFx1MDBGNFxcdTFFRDNcXHUxRUQxXFx1MUVEN1xcdTFFRDVcXHUwMEY1XFx1MUU0RFxcdTAyMkRcXHUxRTRGXFx1MDE0RFxcdTFFNTFcXHUxRTUzXFx1MDE0RlxcdTAyMkZcXHUwMjMxXFx1MDBGNlxcdTAyMkJcXHUxRUNGXFx1MDE1MVxcdTAxRDJcXHUwMjBEXFx1MDIwRlxcdTAxQTFcXHUxRUREXFx1MUVEQlxcdTFFRTFcXHUxRURGXFx1MUVFM1xcdTFFQ0RcXHUxRUQ5XFx1MDFFQlxcdTAxRURcXHUwMEY4XFx1MDFGRlxcdTAyNTRcXHVBNzRCXFx1QTc0RFxcdTAyNzVdL2dcbn0sIHtcbiAgYmFzZTogJ29pJyxcbiAgbGV0dGVyczogL1tcXHUwMUEzXS9nXG59LCB7XG4gIGJhc2U6ICdvdScsXG4gIGxldHRlcnM6IC9bXFx1MDIyM10vZ1xufSwge1xuICBiYXNlOiAnb28nLFxuICBsZXR0ZXJzOiAvW1xcdUE3NEZdL2dcbn0sIHtcbiAgYmFzZTogJ3AnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNzBcXHUyNERGXFx1RkY1MFxcdTFFNTVcXHUxRTU3XFx1MDFBNVxcdTFEN0RcXHVBNzUxXFx1QTc1M1xcdUE3NTVdL2dcbn0sIHtcbiAgYmFzZTogJ3EnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNzFcXHUyNEUwXFx1RkY1MVxcdTAyNEJcXHVBNzU3XFx1QTc1OV0vZ1xufSwge1xuICBiYXNlOiAncicsXG4gIGxldHRlcnM6IC9bXFx1MDA3MlxcdTI0RTFcXHVGRjUyXFx1MDE1NVxcdTFFNTlcXHUwMTU5XFx1MDIxMVxcdTAyMTNcXHUxRTVCXFx1MUU1RFxcdTAxNTdcXHUxRTVGXFx1MDI0RFxcdTAyN0RcXHVBNzVCXFx1QTdBN1xcdUE3ODNdL2dcbn0sIHtcbiAgYmFzZTogJ3MnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNzNcXHUyNEUyXFx1RkY1M1xcdTAwREZcXHUwMTVCXFx1MUU2NVxcdTAxNURcXHUxRTYxXFx1MDE2MVxcdTFFNjdcXHUxRTYzXFx1MUU2OVxcdTAyMTlcXHUwMTVGXFx1MDIzRlxcdUE3QTlcXHVBNzg1XFx1MUU5Ql0vZ1xufSwge1xuICBiYXNlOiAndCcsXG4gIGxldHRlcnM6IC9bXFx1MDA3NFxcdTI0RTNcXHVGRjU0XFx1MUU2QlxcdTFFOTdcXHUwMTY1XFx1MUU2RFxcdTAyMUJcXHUwMTYzXFx1MUU3MVxcdTFFNkZcXHUwMTY3XFx1MDFBRFxcdTAyODhcXHUyQzY2XFx1QTc4N10vZ1xufSwge1xuICBiYXNlOiAndHonLFxuICBsZXR0ZXJzOiAvW1xcdUE3MjldL2dcbn0sIHtcbiAgYmFzZTogJ3UnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNzVcXHUyNEU0XFx1RkY1NVxcdTAwRjlcXHUwMEZBXFx1MDBGQlxcdTAxNjlcXHUxRTc5XFx1MDE2QlxcdTFFN0JcXHUwMTZEXFx1MDBGQ1xcdTAxRENcXHUwMUQ4XFx1MDFENlxcdTAxREFcXHUxRUU3XFx1MDE2RlxcdTAxNzFcXHUwMUQ0XFx1MDIxNVxcdTAyMTdcXHUwMUIwXFx1MUVFQlxcdTFFRTlcXHUxRUVGXFx1MUVFRFxcdTFFRjFcXHUxRUU1XFx1MUU3M1xcdTAxNzNcXHUxRTc3XFx1MUU3NVxcdTAyODldL2dcbn0sIHtcbiAgYmFzZTogJ3YnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNzZcXHUyNEU1XFx1RkY1NlxcdTFFN0RcXHUxRTdGXFx1MDI4QlxcdUE3NUZcXHUwMjhDXS9nXG59LCB7XG4gIGJhc2U6ICd2eScsXG4gIGxldHRlcnM6IC9bXFx1QTc2MV0vZ1xufSwge1xuICBiYXNlOiAndycsXG4gIGxldHRlcnM6IC9bXFx1MDA3N1xcdTI0RTZcXHVGRjU3XFx1MUU4MVxcdTFFODNcXHUwMTc1XFx1MUU4N1xcdTFFODVcXHUxRTk4XFx1MUU4OVxcdTJDNzNdL2dcbn0sIHtcbiAgYmFzZTogJ3gnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNzhcXHUyNEU3XFx1RkY1OFxcdTFFOEJcXHUxRThEXS9nXG59LCB7XG4gIGJhc2U6ICd5JyxcbiAgbGV0dGVyczogL1tcXHUwMDc5XFx1MjRFOFxcdUZGNTlcXHUxRUYzXFx1MDBGRFxcdTAxNzdcXHUxRUY5XFx1MDIzM1xcdTFFOEZcXHUwMEZGXFx1MUVGN1xcdTFFOTlcXHUxRUY1XFx1MDFCNFxcdTAyNEZcXHUxRUZGXS9nXG59LCB7XG4gIGJhc2U6ICd6JyxcbiAgbGV0dGVyczogL1tcXHUwMDdBXFx1MjRFOVxcdUZGNUFcXHUwMTdBXFx1MUU5MVxcdTAxN0NcXHUwMTdFXFx1MUU5M1xcdTFFOTVcXHUwMUI2XFx1MDIyNVxcdTAyNDBcXHUyQzZDXFx1QTc2M10vZ1xufV07XG52YXIgc3RyaXBEaWFjcml0aWNzID0gZnVuY3Rpb24gc3RyaXBEaWFjcml0aWNzKHN0cikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRpYWNyaXRpY3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZShkaWFjcml0aWNzW2ldLmxldHRlcnMsIGRpYWNyaXRpY3NbaV0uYmFzZSk7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxudmFyIHRyaW1TdHJpbmcgPSBmdW5jdGlvbiB0cmltU3RyaW5nKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbn07XG5cbnZhciBkZWZhdWx0U3RyaW5naWZ5ID0gZnVuY3Rpb24gZGVmYXVsdFN0cmluZ2lmeShvcHRpb24pIHtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KG9wdGlvbi5sYWJlbCwgXCIgXCIpLmNvbmNhdChvcHRpb24udmFsdWUpO1xufTtcblxudmFyIGNyZWF0ZUZpbHRlciA9IGZ1bmN0aW9uIGNyZWF0ZUZpbHRlcihjb25maWcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvcHRpb24sIHJhd0lucHV0KSB7XG4gICAgdmFyIF9pZ25vcmVDYXNlJGlnbm9yZUFjYyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbiAgICAgIGlnbm9yZUFjY2VudHM6IHRydWUsXG4gICAgICBzdHJpbmdpZnk6IGRlZmF1bHRTdHJpbmdpZnksXG4gICAgICB0cmltOiB0cnVlLFxuICAgICAgbWF0Y2hGcm9tOiAnYW55J1xuICAgIH0sIGNvbmZpZyksXG4gICAgICAgIGlnbm9yZUNhc2UgPSBfaWdub3JlQ2FzZSRpZ25vcmVBY2MuaWdub3JlQ2FzZSxcbiAgICAgICAgaWdub3JlQWNjZW50cyA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5pZ25vcmVBY2NlbnRzLFxuICAgICAgICBzdHJpbmdpZnkgPSBfaWdub3JlQ2FzZSRpZ25vcmVBY2Muc3RyaW5naWZ5LFxuICAgICAgICB0cmltID0gX2lnbm9yZUNhc2UkaWdub3JlQWNjLnRyaW0sXG4gICAgICAgIG1hdGNoRnJvbSA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5tYXRjaEZyb207XG5cbiAgICB2YXIgaW5wdXQgPSB0cmltID8gdHJpbVN0cmluZyhyYXdJbnB1dCkgOiByYXdJbnB1dDtcbiAgICB2YXIgY2FuZGlkYXRlID0gdHJpbSA/IHRyaW1TdHJpbmcoc3RyaW5naWZ5KG9wdGlvbikpIDogc3RyaW5naWZ5KG9wdGlvbik7XG5cbiAgICBpZiAoaWdub3JlQ2FzZSkge1xuICAgICAgaW5wdXQgPSBpbnB1dC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FuZGlkYXRlID0gY2FuZGlkYXRlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgaWYgKGlnbm9yZUFjY2VudHMpIHtcbiAgICAgIGlucHV0ID0gc3RyaXBEaWFjcml0aWNzKGlucHV0KTtcbiAgICAgIGNhbmRpZGF0ZSA9IHN0cmlwRGlhY3JpdGljcyhjYW5kaWRhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaEZyb20gPT09ICdzdGFydCcgPyBjYW5kaWRhdGUuc3Vic3RyKDAsIGlucHV0Lmxlbmd0aCkgPT09IGlucHV0IDogY2FuZGlkYXRlLmluZGV4T2YoaW5wdXQpID4gLTE7XG4gIH07XG59O1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxbGFhbzIxLWExMXlUZXh0XCIsXG4gIHN0eWxlczogXCJsYWJlbDphMTF5VGV4dDt6LWluZGV4Ojk5OTk7Ym9yZGVyOjA7Y2xpcDpyZWN0KDFweCwgMXB4LCAxcHgsIDFweCk7aGVpZ2h0OjFweDt3aWR0aDoxcHg7cG9zaXRpb246YWJzb2x1dGU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDt3aGl0ZS1zcGFjZTpub3dyYXA7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWxhYW8yMS1hMTF5VGV4dFwiLFxuICBzdHlsZXM6IFwibGFiZWw6YTExeVRleHQ7ei1pbmRleDo5OTk5O2JvcmRlcjowO2NsaXA6cmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpO2hlaWdodDoxcHg7d2lkdGg6MXB4O3Bvc2l0aW9uOmFic29sdXRlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7d2hpdGUtc3BhY2U6bm93cmFwO1wiLFxuICBtYXA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtFeE1YbFVaWGgwTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFWRk5JaXdpWm1sc1pTSTZJa0V4TVhsVVpYaDBMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5OGdRR1pzYjNkY2JpOHFLaUJBYW5ONElHcHplQ0FxTDF4dWFXMXdiM0owSUhzZ2RIbHdaU0JGYkdWdFpXNTBRMjl1Wm1sbklIMGdabkp2YlNBbmNtVmhZM1FuTzF4dWFXMXdiM0owSUhzZ2FuTjRJSDBnWm5KdmJTQW5RR1Z0YjNScGIyNHZZMjl5WlNjN1hHNWNiaTh2SUVGemMybHpkR2wyWlNCMFpYaDBJSFJ2SUdSbGMyTnlhV0psSUhacGMzVmhiQ0JsYkdWdFpXNTBjeTRnU0dsa1pHVnVJR1p2Y2lCemFXZG9kR1ZrSUhWelpYSnpMbHh1WTI5dWMzUWdRVEV4ZVZSbGVIUWdQU0FvY0hKdmNITTZJRVZzWlcxbGJuUkRiMjVtYVdjOEozTndZVzRuUGlrZ1BUNGdLRnh1SUNBZ0lEeHpjR0Z1WEc0Z0lDQWdJQ0JqYzNNOWUzdGNiaUFnSUNBZ0lDQWdiR0ZpWld3NklDZGhNVEY1VkdWNGRDY3NYRzRnSUNBZ0lDQWdJSHBKYm1SbGVEb2dPVGs1T1N4Y2JpQWdJQ0FnSUNBZ1ltOXlaR1Z5T2lBd0xGeHVJQ0FnSUNBZ0lDQmpiR2x3T2lBbmNtVmpkQ2d4Y0hnc0lERndlQ3dnTVhCNExDQXhjSGdwSnl4Y2JpQWdJQ0FnSUNBZ2FHVnBaMmgwT2lBeExGeHVJQ0FnSUNBZ0lDQjNhV1IwYURvZ01TeGNiaUFnSUNBZ0lDQWdjRzl6YVhScGIyNDZJQ2RoWW5OdmJIVjBaU2NzWEc0Z0lDQWdJQ0FnSUc5MlpYSm1iRzkzT2lBbmFHbGtaR1Z1Snl4Y2JpQWdJQ0FnSUNBZ2NHRmtaR2x1WnpvZ01DeGNiaUFnSUNBZ0lDQWdkMmhwZEdWVGNHRmpaVG9nSjI1dmQzSmhjQ2NzWEc0Z0lDQWdJQ0I5ZlZ4dUlDQWdJQ0FnZXk0dUxuQnliM0J6ZlZ4dUlDQWdJQzgrWEc0cE8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQkJNVEY1VkdWNGREdGNiaUpkZlE9PSAqL1wiXG59O1xuXG52YXIgQTExeVRleHQgPSBmdW5jdGlvbiBBMTF5VGV4dChwcm9wcykge1xuICByZXR1cm4ganN4KFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBfcmVmXG4gIH0sIHByb3BzKSk7XG59O1xuXG52YXIgRHVtbXlJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRHVtbXlJbnB1dCwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gRHVtbXlJbnB1dCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRHVtbXlJbnB1dCk7XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKER1bW15SW5wdXQpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKER1bW15SW5wdXQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGluUHJvcCA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICAgIG91dCA9IF90aGlzJHByb3BzLm91dCxcbiAgICAgICAgICBvbkV4aXRlZCA9IF90aGlzJHByb3BzLm9uRXhpdGVkLFxuICAgICAgICAgIGFwcGVhciA9IF90aGlzJHByb3BzLmFwcGVhcixcbiAgICAgICAgICBlbnRlciA9IF90aGlzJHByb3BzLmVudGVyLFxuICAgICAgICAgIGV4aXQgPSBfdGhpcyRwcm9wcy5leGl0LFxuICAgICAgICAgIGlubmVyUmVmID0gX3RoaXMkcHJvcHMuaW5uZXJSZWYsXG4gICAgICAgICAgZW1vdGlvbiA9IF90aGlzJHByb3BzLmVtb3Rpb24sXG4gICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIFtcImluXCIsIFwib3V0XCIsIFwib25FeGl0ZWRcIiwgXCJhcHBlYXJcIiwgXCJlbnRlclwiLCBcImV4aXRcIiwgXCJpbm5lclJlZlwiLCBcImVtb3Rpb25cIl0pO1xuXG4gICAgICByZXR1cm4ganN4KFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IGlubmVyUmVmXG4gICAgICB9LCBwcm9wcywge1xuICAgICAgICBjc3M6XG4gICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgX2Nzcyh7XG4gICAgICAgICAgbGFiZWw6ICdkdW1teUlucHV0JyxcbiAgICAgICAgICAvLyBnZXQgcmlkIG9mIGFueSBkZWZhdWx0IHN0eWxlc1xuICAgICAgICAgIGJhY2tncm91bmQ6IDAsXG4gICAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgICAgICAgb3V0bGluZTogMCxcbiAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgIC8vIGltcG9ydGFudCEgd2l0aG91dCBgd2lkdGhgIGJyb3dzZXJzIHdvbid0IGFsbG93IGZvY3VzXG4gICAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBkZXNrdG9wXG4gICAgICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBtb2JpbGUgd2hpbHN0IG1haW50YWluaW5nIFwic2Nyb2xsIGludG8gdmlld1wiIGJlaGF2aW91clxuICAgICAgICAgIGxlZnQ6IC0xMDAsXG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwKSdcbiAgICAgICAgfSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtSMWJXMTVTVzV3ZFhRdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJXVkVpTENKbWFXeGxJam9pUkhWdGJYbEpibkIxZEM1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaTh2SUVCbWJHOTNYRzR2S2lvZ1FHcHplQ0JxYzNnZ0tpOWNibWx0Y0c5eWRDQjdJRU52YlhCdmJtVnVkQ0I5SUdaeWIyMGdKM0psWVdOMEp6dGNibWx0Y0c5eWRDQjdJR3B6ZUNCOUlHWnliMjBnSjBCbGJXOTBhVzl1TDJOdmNtVW5PMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QkVkVzF0ZVVsdWNIVjBJR1Y0ZEdWdVpITWdRMjl0Y0c5dVpXNTBQR0Z1ZVQ0Z2UxeHVJQ0J5Wlc1a1pYSWdLQ2tnZTF4dUlDQWdJR052Ym5OMElIc2dhVzQ2SUdsdVVISnZjQ3dnYjNWMExDQnZia1Y0YVhSbFpDd2dZWEJ3WldGeUxDQmxiblJsY2l3Z1pYaHBkQ3dnYVc1dVpYSlNaV1lzSUdWdGIzUnBiMjRzSUM0dUxuQnliM0J6SUgwZ1BTQjBhR2x6TG5CeWIzQnpPMXh1SUNBZ0lISmxkSFZ5YmloY2JpQWdJQ0FnSUR4cGJuQjFkRnh1SUNBZ0lDQWdJQ0J5WldZOWUybHVibVZ5VW1WbWZWeHVJQ0FnSUNBZ0lDQjdMaTR1Y0hKdmNITjlYRzRnSUNBZ0lDQWdJR056Y3oxN2UxeHVJQ0FnSUNBZ0lDQWdJR3hoWW1Wc09pQW5aSFZ0YlhsSmJuQjFkQ2NzWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdaMlYwSUhKcFpDQnZaaUJoYm5rZ1pHVm1ZWFZzZENCemRIbHNaWE5jYmlBZ0lDQWdJQ0FnSUNCaVlXTnJaM0p2ZFc1a09pQXdMRnh1SUNBZ0lDQWdJQ0FnSUdKdmNtUmxjam9nTUN4Y2JpQWdJQ0FnSUNBZ0lDQm1iMjUwVTJsNlpUb2dKMmx1YUdWeWFYUW5MRnh1SUNBZ0lDQWdJQ0FnSUc5MWRHeHBibVU2SURBc1hHNGdJQ0FnSUNBZ0lDQWdjR0ZrWkdsdVp6b2dNQ3hjYmlBZ0lDQWdJQ0FnSUNBdkx5QnBiWEJ2Y25SaGJuUWhJSGRwZEdodmRYUWdZSGRwWkhSb1lDQmljbTkzYzJWeWN5QjNiMjRuZENCaGJHeHZkeUJtYjJOMWMxeHVJQ0FnSUNBZ0lDQWdJSGRwWkhSb09pQXhMRnh1WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdjbVZ0YjNabElHTjFjbk52Y2lCdmJpQmtaWE5yZEc5d1hHNGdJQ0FnSUNBZ0lDQWdZMjlzYjNJNklDZDBjbUZ1YzNCaGNtVnVkQ2NzWEc1Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJ5WlcxdmRtVWdZM1Z5YzI5eUlHOXVJRzF2WW1sc1pTQjNhR2xzYzNRZ2JXRnBiblJoYVc1cGJtY2dYQ0p6WTNKdmJHd2dhVzUwYnlCMmFXVjNYQ0lnWW1Wb1lYWnBiM1Z5WEc0Z0lDQWdJQ0FnSUNBZ2JHVm1kRG9nTFRFd01DeGNiaUFnSUNBZ0lDQWdJQ0J2Y0dGamFYUjVPaUF3TEZ4dUlDQWdJQ0FnSUNBZ0lIQnZjMmwwYVc5dU9pQW5jbVZzWVhScGRtVW5MRnh1SUNBZ0lDQWdJQ0FnSUhSeVlXNXpabTl5YlRvZ0ozTmpZV3hsS0RBcEp5eGNiaUFnSUNBZ0lDQWdmWDFjYmlBZ0lDQWdJQzgrWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVnh1SWwxOSAqL1wiKVxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBEdW1teUlucHV0O1xufShDb21wb25lbnQpO1xuXG52YXIgTm9kZVJlc29sdmVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhOb2RlUmVzb2x2ZXIsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIE5vZGVSZXNvbHZlcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTm9kZVJlc29sdmVyKTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoTm9kZVJlc29sdmVyKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhOb2RlUmVzb2x2ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5wcm9wcy5pbm5lclJlZihmaW5kRE9NTm9kZSh0aGlzKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5wcm9wcy5pbm5lclJlZihudWxsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBOb2RlUmVzb2x2ZXI7XG59KENvbXBvbmVudCk7XG5cbnZhciBTVFlMRV9LRVlTID0gWydib3hTaXppbmcnLCAnaGVpZ2h0JywgJ292ZXJmbG93JywgJ3BhZGRpbmdSaWdodCcsICdwb3NpdGlvbiddO1xudmFyIExPQ0tfU1RZTEVTID0ge1xuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgLy8gYWNjb3VudCBmb3IgcG9zc2libGUgZGVjbGFyYXRpb24gYHdpZHRoOiAxMDAlO2Agb24gYm9keVxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBoZWlnaHQ6ICcxMDAlJ1xufTtcblxuZnVuY3Rpb24gcHJldmVudFRvdWNoTW92ZShlKSB7XG4gIGUucHJldmVudERlZmF1bHQoKTtcbn1cbmZ1bmN0aW9uIGFsbG93VG91Y2hNb3ZlKGUpIHtcbiAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbn1cbmZ1bmN0aW9uIHByZXZlbnRJbmVydGlhU2Nyb2xsKCkge1xuICB2YXIgdG9wID0gdGhpcy5zY3JvbGxUb3A7XG4gIHZhciB0b3RhbFNjcm9sbCA9IHRoaXMuc2Nyb2xsSGVpZ2h0O1xuICB2YXIgY3VycmVudFNjcm9sbCA9IHRvcCArIHRoaXMub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmICh0b3AgPT09IDApIHtcbiAgICB0aGlzLnNjcm9sbFRvcCA9IDE7XG4gIH0gZWxzZSBpZiAoY3VycmVudFNjcm9sbCA9PT0gdG90YWxTY3JvbGwpIHtcbiAgICB0aGlzLnNjcm9sbFRvcCA9IHRvcCAtIDE7XG4gIH1cbn0gLy8gYG9udG91Y2hzdGFydGAgY2hlY2sgd29ya3Mgb24gbW9zdCBicm93c2Vyc1xuLy8gYG1heFRvdWNoUG9pbnRzYCB3b3JrcyBvbiBJRTEwLzExIGFuZCBTdXJmYWNlXG5cbmZ1bmN0aW9uIGlzVG91Y2hEZXZpY2UoKSB7XG4gIHJldHVybiAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzO1xufVxuXG52YXIgY2FuVXNlRE9NID0gISEod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbnZhciBhY3RpdmVTY3JvbGxMb2NrcyA9IDA7XG5cbnZhciBTY3JvbGxMb2NrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTY3JvbGxMb2NrLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTY3JvbGxMb2NrKCkge1xuICAgIHZhciBfZ2V0UHJvdG90eXBlT2YyO1xuXG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNjcm9sbExvY2spO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9nZXRQcm90b3R5cGVPZjIgPSBfZ2V0UHJvdG90eXBlT2YoU2Nyb2xsTG9jaykpLmNhbGwuYXBwbHkoX2dldFByb3RvdHlwZU9mMiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9yaWdpbmFsU3R5bGVzXCIsIHt9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJsaXN0ZW5lck9wdGlvbnNcIiwge1xuICAgICAgY2FwdHVyZTogZmFsc2UsXG4gICAgICBwYXNzaXZlOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFNjcm9sbExvY2ssIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghY2FuVXNlRE9NKSByZXR1cm47XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFjY291bnRGb3JTY3JvbGxiYXJzID0gX3RoaXMkcHJvcHMuYWNjb3VudEZvclNjcm9sbGJhcnMsXG4gICAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQgPSBfdGhpcyRwcm9wcy50b3VjaFNjcm9sbFRhcmdldDtcbiAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgdmFyIHRhcmdldFN0eWxlID0gdGFyZ2V0ICYmIHRhcmdldC5zdHlsZTtcblxuICAgICAgaWYgKGFjY291bnRGb3JTY3JvbGxiYXJzKSB7XG4gICAgICAgIC8vIHN0b3JlIGFueSBzdHlsZXMgYWxyZWFkeSBhcHBsaWVkIHRvIHRoZSBib2R5XG4gICAgICAgIFNUWUxFX0tFWVMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgdmFyIHZhbCA9IHRhcmdldFN0eWxlICYmIHRhcmdldFN0eWxlW2tleV07XG4gICAgICAgICAgX3RoaXMyLm9yaWdpbmFsU3R5bGVzW2tleV0gPSB2YWw7XG4gICAgICAgIH0pO1xuICAgICAgfSAvLyBhcHBseSB0aGUgbG9jayBzdHlsZXMgYW5kIHBhZGRpbmcgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgc2Nyb2xsIGxvY2tcblxuXG4gICAgICBpZiAoYWNjb3VudEZvclNjcm9sbGJhcnMgJiYgYWN0aXZlU2Nyb2xsTG9ja3MgPCAxKSB7XG4gICAgICAgIHZhciBjdXJyZW50UGFkZGluZyA9IHBhcnNlSW50KHRoaXMub3JpZ2luYWxTdHlsZXMucGFkZGluZ1JpZ2h0LCAxMCkgfHwgMDtcbiAgICAgICAgdmFyIGNsaWVudFdpZHRoID0gZG9jdW1lbnQuYm9keSA/IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggOiAwO1xuICAgICAgICB2YXIgYWRqdXN0ZWRQYWRkaW5nID0gd2luZG93LmlubmVyV2lkdGggLSBjbGllbnRXaWR0aCArIGN1cnJlbnRQYWRkaW5nIHx8IDA7XG4gICAgICAgIE9iamVjdC5rZXlzKExPQ0tfU1RZTEVTKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICB2YXIgdmFsID0gTE9DS19TVFlMRVNba2V5XTtcblxuICAgICAgICAgIGlmICh0YXJnZXRTdHlsZSkge1xuICAgICAgICAgICAgdGFyZ2V0U3R5bGVba2V5XSA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0YXJnZXRTdHlsZSkge1xuICAgICAgICAgIHRhcmdldFN0eWxlLnBhZGRpbmdSaWdodCA9IFwiXCIuY29uY2F0KGFkanVzdGVkUGFkZGluZywgXCJweFwiKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBhY2NvdW50IGZvciB0b3VjaCBkZXZpY2VzXG5cblxuICAgICAgaWYgKHRhcmdldCAmJiBpc1RvdWNoRGV2aWNlKCkpIHtcbiAgICAgICAgLy8gTW9iaWxlIFNhZmFyaSBpZ25vcmVzIHsgb3ZlcmZsb3c6IGhpZGRlbiB9IGRlY2xhcmF0aW9uIG9uIHRoZSBib2R5LlxuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgcHJldmVudFRvdWNoTW92ZSwgdGhpcy5saXN0ZW5lck9wdGlvbnMpOyAvLyBBbGxvdyBzY3JvbGwgb24gcHJvdmlkZWQgdGFyZ2V0XG5cbiAgICAgICAgaWYgKHRvdWNoU2Nyb2xsVGFyZ2V0KSB7XG4gICAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHByZXZlbnRJbmVydGlhU2Nyb2xsLCB0aGlzLmxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgYWxsb3dUb3VjaE1vdmUsIHRoaXMubGlzdGVuZXJPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBpbmNyZW1lbnQgYWN0aXZlIHNjcm9sbCBsb2Nrc1xuXG5cbiAgICAgIGFjdGl2ZVNjcm9sbExvY2tzICs9IDE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICghY2FuVXNlRE9NKSByZXR1cm47XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhY2NvdW50Rm9yU2Nyb2xsYmFycyA9IF90aGlzJHByb3BzMi5hY2NvdW50Rm9yU2Nyb2xsYmFycyxcbiAgICAgICAgICB0b3VjaFNjcm9sbFRhcmdldCA9IF90aGlzJHByb3BzMi50b3VjaFNjcm9sbFRhcmdldDtcbiAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgdmFyIHRhcmdldFN0eWxlID0gdGFyZ2V0ICYmIHRhcmdldC5zdHlsZTsgLy8gc2FmZWx5IGRlY3JlbWVudCBhY3RpdmUgc2Nyb2xsIGxvY2tzXG5cbiAgICAgIGFjdGl2ZVNjcm9sbExvY2tzID0gTWF0aC5tYXgoYWN0aXZlU2Nyb2xsTG9ja3MgLSAxLCAwKTsgLy8gcmVhcHBseSBvcmlnaW5hbCBib2R5IHN0eWxlcywgaWYgYW55XG5cbiAgICAgIGlmIChhY2NvdW50Rm9yU2Nyb2xsYmFycyAmJiBhY3RpdmVTY3JvbGxMb2NrcyA8IDEpIHtcbiAgICAgICAgU1RZTEVfS0VZUy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICB2YXIgdmFsID0gX3RoaXMzLm9yaWdpbmFsU3R5bGVzW2tleV07XG5cbiAgICAgICAgICBpZiAodGFyZ2V0U3R5bGUpIHtcbiAgICAgICAgICAgIHRhcmdldFN0eWxlW2tleV0gPSB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gcmVtb3ZlIHRvdWNoIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmICh0YXJnZXQgJiYgaXNUb3VjaERldmljZSgpKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBwcmV2ZW50VG91Y2hNb3ZlLCB0aGlzLmxpc3RlbmVyT3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHRvdWNoU2Nyb2xsVGFyZ2V0KSB7XG4gICAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHByZXZlbnRJbmVydGlhU2Nyb2xsLCB0aGlzLmxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgYWxsb3dUb3VjaE1vdmUsIHRoaXMubGlzdGVuZXJPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNjcm9sbExvY2s7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShTY3JvbGxMb2NrLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGFjY291bnRGb3JTY3JvbGxiYXJzOiB0cnVlXG59KTtcblxudmFyIF9yZWYkMSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxZHNicGNwXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDt0b3A6MDtcIlxufSA6IHtcbiAgbmFtZTogXCIxZHNicGNwXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDt0b3A6MDtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsTmpjbTlzYkVKc2IyTnJMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVRaRVZTSXNJbVpwYkdVaU9pSlRZM0p2Ykd4Q2JHOWpheTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHZJRUJtYkc5M1hHNHZLaW9nUUdwemVDQnFjM2dnS2k5Y2JtbHRjRzl5ZENCN0lGQjFjbVZEYjIxd2IyNWxiblFzSUhSNWNHVWdSV3hsYldWdWRDQjlJR1p5YjIwZ0ozSmxZV04wSnp0Y2JtbHRjRzl5ZENCN0lHcHplQ0I5SUdaeWIyMGdKMEJsYlc5MGFXOXVMMk52Y21Vbk8xeHVhVzF3YjNKMElFNXZaR1ZTWlhOdmJIWmxjaUJtY205dElDY3VMMDV2WkdWU1pYTnZiSFpsY2ljN1hHNXBiWEJ2Y25RZ1UyTnliMnhzVEc5amF5Qm1jbTl0SUNjdUwxTmpjbTlzYkV4dlkyc3ZhVzVrWlhnbk8xeHVYRzUwZVhCbElGQnliM0J6SUQwZ2UxeHVJQ0JqYUdsc1pISmxiam9nUld4bGJXVnVkRHdxUGl4Y2JpQWdhWE5GYm1GaWJHVmtPaUJpYjI5c1pXRnVMRnh1ZlR0Y2JuUjVjR1VnVTNSaGRHVWdQU0I3WEc0Z0lIUnZkV05vVTJOeWIyeHNWR0Z5WjJWME9pQklWRTFNUld4bGJXVnVkQ0I4SUc1MWJHd3NYRzU5TzF4dVhHNHZMeUJPVDFSRk9seHVMeThnVjJVZ2MyaHZkV3hrYmlkMElHNWxaV1FnZEdocGN5QmhablJsY2lCMWNHUmhkR2x1WnlCMGJ5QlNaV0ZqZENCMk1UWXVNeTR3TENCM2FHbGphQ0JwYm5SeWIyUjFZMlZ6T2x4dUx5OGdMU0JqY21WaGRHVlNaV1lvS1NCb2RIUndjem92TDNKbFlXTjBhbk11YjNKbkwyUnZZM012Y21WaFkzUXRZWEJwTG1oMGJXd2pjbVZoWTNSamNtVmhkR1Z5WldaY2JpOHZJQzBnWm05eWQyRnlaRkpsWmlncElHaDBkSEJ6T2k4dmNtVmhZM1JxY3k1dmNtY3ZaRzlqY3k5eVpXRmpkQzFoY0drdWFIUnRiQ055WldGamRHWnZjbmRoY21SeVpXWmNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1UyTnliMnhzUW14dlkyc2daWGgwWlc1a2N5QlFkWEpsUTI5dGNHOXVaVzUwUEZCeWIzQnpMQ0JUZEdGMFpUNGdlMXh1SUNCemRHRjBaU0E5SUhzZ2RHOTFZMmhUWTNKdmJHeFVZWEpuWlhRNklHNTFiR3dnZlR0Y2JseHVJQ0F2THlCdGRYTjBJR0psSUdsdUlITjBZWFJsSUhSdklIUnlhV2RuWlhJZ1lTQnlaUzF5Wlc1a1pYSXNJRzl1YkhrZ2NuVnVjeUJ2Ym1ObElIQmxjaUJwYm5OMFlXNWpaVnh1SUNCblpYUlRZM0p2Ykd4VVlYSm5aWFFnUFNBb2NtVm1PaUJJVkUxTVJXeGxiV1Z1ZENrZ1BUNGdlMXh1SUNBZ0lHbG1JQ2h5WldZZ1BUMDlJSFJvYVhNdWMzUmhkR1V1ZEc5MVkyaFRZM0p2Ykd4VVlYSm5aWFFwSUhKbGRIVnlianRjYmlBZ0lDQjBhR2x6TG5ObGRGTjBZWFJsS0hzZ2RHOTFZMmhUWTNKdmJHeFVZWEpuWlhRNklISmxaaUI5S1R0Y2JpQWdmVHRjYmx4dUlDQXZMeUIwYUdseklIZHBiR3dnWTJ4dmMyVWdkR2hsSUcxbGJuVWdkMmhsYmlCaElIVnpaWElnWTJ4cFkydHpJRzkxZEhOcFpHVmNiaUFnWW14MWNsTmxiR1ZqZEVsdWNIVjBJRDBnS0NrZ1BUNGdlMXh1SUNBZ0lHbG1JQ2hrYjJOMWJXVnVkQzVoWTNScGRtVkZiR1Z0Wlc1MEtTQjdYRzRnSUNBZ0lDQmtiMk4xYldWdWRDNWhZM1JwZG1WRmJHVnRaVzUwTG1Kc2RYSW9LVHRjYmlBZ0lDQjlYRzRnSUgwN1hHNWNiaUFnY21WdVpHVnlLQ2tnZTF4dUlDQWdJR052Ym5OMElIc2dZMmhwYkdSeVpXNHNJR2x6Ulc1aFlteGxaQ0I5SUQwZ2RHaHBjeTV3Y205d2N6dGNiaUFnSUNCamIyNXpkQ0I3SUhSdmRXTm9VMk55YjJ4c1ZHRnlaMlYwSUgwZ1BTQjBhR2x6TG5OMFlYUmxPMXh1WEc0Z0lDQWdMeThnWW1GcGJDQmxZWEpzZVNCcFppQnViM1FnWlc1aFlteGxaRnh1SUNBZ0lHbG1JQ2doYVhORmJtRmliR1ZrS1NCeVpYUjFjbTRnWTJocGJHUnlaVzQ3WEc1Y2JpQWdJQ0F2S2x4dUlDQWdJQ0FxSUVScGRseHVJQ0FnSUNBcUlDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMVnh1SUNBZ0lDQXFJR0pzYjJOcmN5QnpZM0p2Ykd4cGJtY2diMjRnYm05dUxXSnZaSGtnWld4bGJXVnVkSE1nWW1Wb2FXNWtJSFJvWlNCdFpXNTFYRzVjYmlBZ0lDQWdLaUJPYjJSbFVtVnpiMngyWlhKY2JpQWdJQ0FnS2lBdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNiaUFnSUNBZ0tpQjNaU0J1WldWa0lHRWdjbVZtWlhKbGJtTmxJSFJ2SUhSb1pTQnpZM0p2Ykd4aFlteGxJR1ZzWlcxbGJuUWdkRzhnWENKMWJteHZZMnRjSWlCelkzSnZiR3dnYjI1Y2JpQWdJQ0FnS2lCdGIySnBiR1VnWkdWMmFXTmxjMXh1WEc0Z0lDQWdJQ29nVTJOeWIyeHNURzlqYTF4dUlDQWdJQ0FxSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExWeHVJQ0FnSUNBcUlHRmpkSFZoYkd4NUlHUnZaWE1nZEdobElITmpjbTlzYkNCc2IyTnJhVzVuWEc0Z0lDQWdJQ292WEc0Z0lDQWdjbVYwZFhKdUlDaGNiaUFnSUNBZ0lEeGthWFkrWEc0Z0lDQWdJQ0FnSUR4a2FYWmNiaUFnSUNBZ0lDQWdJQ0J2YmtOc2FXTnJQWHQwYUdsekxtSnNkWEpUWld4bFkzUkpibkIxZEgxY2JpQWdJQ0FnSUNBZ0lDQmpjM005ZTNzZ2NHOXphWFJwYjI0NklDZG1hWGhsWkNjc0lHeGxablE2SURBc0lHSnZkSFJ2YlRvZ01Dd2djbWxuYUhRNklEQXNJSFJ2Y0RvZ01DQjlmVnh1SUNBZ0lDQWdJQ0F2UGx4dUlDQWdJQ0FnSUNBOFRtOWtaVkpsYzI5c2RtVnlJR2x1Ym1WeVVtVm1QWHQwYUdsekxtZGxkRk5qY205c2JGUmhjbWRsZEgwK2UyTm9hV3hrY21WdWZUd3ZUbTlrWlZKbGMyOXNkbVZ5UGx4dUlDQWdJQ0FnSUNCN2RHOTFZMmhUWTNKdmJHeFVZWEpuWlhRZ1B5QW9YRzRnSUNBZ0lDQWdJQ0FnUEZOamNtOXNiRXh2WTJzZ2RHOTFZMmhUWTNKdmJHeFVZWEpuWlhROWUzUnZkV05vVTJOeWIyeHNWR0Z5WjJWMGZTQXZQbHh1SUNBZ0lDQWdJQ0FwSURvZ2JuVnNiSDFjYmlBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUNrN1hHNGdJSDFjYm4xY2JpSmRmUT09ICovXCJcbn07XG5cbi8vIE5PVEU6XG4vLyBXZSBzaG91bGRuJ3QgbmVlZCB0aGlzIGFmdGVyIHVwZGF0aW5nIHRvIFJlYWN0IHYxNi4zLjAsIHdoaWNoIGludHJvZHVjZXM6XG4vLyAtIGNyZWF0ZVJlZigpIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNyZWF0ZXJlZlxuLy8gLSBmb3J3YXJkUmVmKCkgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Zm9yd2FyZHJlZlxudmFyIFNjcm9sbEJsb2NrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU2Nyb2xsQmxvY2ssIF9QdXJlQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTY3JvbGxCbG9jaygpIHtcbiAgICB2YXIgX2dldFByb3RvdHlwZU9mMjtcblxuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTY3JvbGxCbG9jayk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX2dldFByb3RvdHlwZU9mMiA9IF9nZXRQcm90b3R5cGVPZihTY3JvbGxCbG9jaykpLmNhbGwuYXBwbHkoX2dldFByb3RvdHlwZU9mMiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcInN0YXRlXCIsIHtcbiAgICAgIHRvdWNoU2Nyb2xsVGFyZ2V0OiBudWxsXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiZ2V0U2Nyb2xsVGFyZ2V0XCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIGlmIChyZWYgPT09IF90aGlzLnN0YXRlLnRvdWNoU2Nyb2xsVGFyZ2V0KSByZXR1cm47XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQ6IHJlZlxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiYmx1clNlbGVjdElucHV0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFNjcm9sbEJsb2NrLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGlzRW5hYmxlZCA9IF90aGlzJHByb3BzLmlzRW5hYmxlZDtcbiAgICAgIHZhciB0b3VjaFNjcm9sbFRhcmdldCA9IHRoaXMuc3RhdGUudG91Y2hTY3JvbGxUYXJnZXQ7IC8vIGJhaWwgZWFybHkgaWYgbm90IGVuYWJsZWRcblxuICAgICAgaWYgKCFpc0VuYWJsZWQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgIC8qXG4gICAgICAgKiBEaXZcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogYmxvY2tzIHNjcm9sbGluZyBvbiBub24tYm9keSBlbGVtZW50cyBiZWhpbmQgdGhlIG1lbnVcbiAgICAgICAgKiBOb2RlUmVzb2x2ZXJcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogd2UgbmVlZCBhIHJlZmVyZW5jZSB0byB0aGUgc2Nyb2xsYWJsZSBlbGVtZW50IHRvIFwidW5sb2NrXCIgc2Nyb2xsIG9uXG4gICAgICAgKiBtb2JpbGUgZGV2aWNlc1xuICAgICAgICAqIFNjcm9sbExvY2tcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogYWN0dWFsbHkgZG9lcyB0aGUgc2Nyb2xsIGxvY2tpbmdcbiAgICAgICAqL1xuXG4gICAgICByZXR1cm4ganN4KFwiZGl2XCIsIG51bGwsIGpzeChcImRpdlwiLCB7XG4gICAgICAgIG9uQ2xpY2s6IHRoaXMuYmx1clNlbGVjdElucHV0LFxuICAgICAgICBjc3M6IF9yZWYkMVxuICAgICAgfSksIGpzeChOb2RlUmVzb2x2ZXIsIHtcbiAgICAgICAgaW5uZXJSZWY6IHRoaXMuZ2V0U2Nyb2xsVGFyZ2V0XG4gICAgICB9LCBjaGlsZHJlbiksIHRvdWNoU2Nyb2xsVGFyZ2V0ID8ganN4KFNjcm9sbExvY2ssIHtcbiAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQ6IHRvdWNoU2Nyb2xsVGFyZ2V0XG4gICAgICB9KSA6IG51bGwpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTY3JvbGxCbG9jaztcbn0oUHVyZUNvbXBvbmVudCk7XG5cbnZhciBTY3JvbGxDYXB0b3IgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFNjcm9sbENhcHRvciwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU2Nyb2xsQ2FwdG9yKCkge1xuICAgIHZhciBfZ2V0UHJvdG90eXBlT2YyO1xuXG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNjcm9sbENhcHRvcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX2dldFByb3RvdHlwZU9mMiA9IF9nZXRQcm90b3R5cGVPZihTY3JvbGxDYXB0b3IpKS5jYWxsLmFwcGx5KF9nZXRQcm90b3R5cGVPZjIsIFt0aGlzXS5jb25jYXQoYXJncykpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJpc0JvdHRvbVwiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiaXNUb3BcIiwgZmFsc2UpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcInNjcm9sbFRhcmdldFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcInRvdWNoU3RhcnRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJjYW5jZWxTY3JvbGxcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiaGFuZGxlRXZlbnREZWx0YVwiLCBmdW5jdGlvbiAoZXZlbnQsIGRlbHRhKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkJvdHRvbUFycml2ZSA9IF90aGlzJHByb3BzLm9uQm90dG9tQXJyaXZlLFxuICAgICAgICAgIG9uQm90dG9tTGVhdmUgPSBfdGhpcyRwcm9wcy5vbkJvdHRvbUxlYXZlLFxuICAgICAgICAgIG9uVG9wQXJyaXZlID0gX3RoaXMkcHJvcHMub25Ub3BBcnJpdmUsXG4gICAgICAgICAgb25Ub3BMZWF2ZSA9IF90aGlzJHByb3BzLm9uVG9wTGVhdmU7XG4gICAgICB2YXIgX3RoaXMkc2Nyb2xsVGFyZ2V0ID0gX3RoaXMuc2Nyb2xsVGFyZ2V0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHNjcm9sbFRhcmdldC5zY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gX3RoaXMkc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCxcbiAgICAgICAgICBjbGllbnRIZWlnaHQgPSBfdGhpcyRzY3JvbGxUYXJnZXQuY2xpZW50SGVpZ2h0O1xuICAgICAgdmFyIHRhcmdldCA9IF90aGlzLnNjcm9sbFRhcmdldDtcbiAgICAgIHZhciBpc0RlbHRhUG9zaXRpdmUgPSBkZWx0YSA+IDA7XG4gICAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsID0gc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0IC0gc2Nyb2xsVG9wO1xuICAgICAgdmFyIHNob3VsZENhbmNlbFNjcm9sbCA9IGZhbHNlOyAvLyByZXNldCBib3R0b20vdG9wIGZsYWdzXG5cbiAgICAgIGlmIChhdmFpbGFibGVTY3JvbGwgPiBkZWx0YSAmJiBfdGhpcy5pc0JvdHRvbSkge1xuICAgICAgICBpZiAob25Cb3R0b21MZWF2ZSkgb25Cb3R0b21MZWF2ZShldmVudCk7XG4gICAgICAgIF90aGlzLmlzQm90dG9tID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0RlbHRhUG9zaXRpdmUgJiYgX3RoaXMuaXNUb3ApIHtcbiAgICAgICAgaWYgKG9uVG9wTGVhdmUpIG9uVG9wTGVhdmUoZXZlbnQpO1xuICAgICAgICBfdGhpcy5pc1RvcCA9IGZhbHNlO1xuICAgICAgfSAvLyBib3R0b20gbGltaXRcblxuXG4gICAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmIGRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsKSB7XG4gICAgICAgIGlmIChvbkJvdHRvbUFycml2ZSAmJiAhX3RoaXMuaXNCb3R0b20pIHtcbiAgICAgICAgICBvbkJvdHRvbUFycml2ZShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXQuc2Nyb2xsVG9wID0gc2Nyb2xsSGVpZ2h0O1xuICAgICAgICBzaG91bGRDYW5jZWxTY3JvbGwgPSB0cnVlO1xuICAgICAgICBfdGhpcy5pc0JvdHRvbSA9IHRydWU7IC8vIHRvcCBsaW1pdFxuICAgICAgfSBlbHNlIGlmICghaXNEZWx0YVBvc2l0aXZlICYmIC1kZWx0YSA+IHNjcm9sbFRvcCkge1xuICAgICAgICBpZiAob25Ub3BBcnJpdmUgJiYgIV90aGlzLmlzVG9wKSB7XG4gICAgICAgICAgb25Ub3BBcnJpdmUoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0LnNjcm9sbFRvcCA9IDA7XG4gICAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgICAgIF90aGlzLmlzVG9wID0gdHJ1ZTtcbiAgICAgIH0gLy8gY2FuY2VsIHNjcm9sbFxuXG5cbiAgICAgIGlmIChzaG91bGRDYW5jZWxTY3JvbGwpIHtcbiAgICAgICAgX3RoaXMuY2FuY2VsU2Nyb2xsKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbldoZWVsXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMuaGFuZGxlRXZlbnREZWx0YShldmVudCwgZXZlbnQuZGVsdGFZKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvblRvdWNoU3RhcnRcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBzZXQgdG91Y2ggc3RhcnQgc28gd2UgY2FuIGNhbGN1bGF0ZSB0b3VjaG1vdmUgZGVsdGFcbiAgICAgIF90aGlzLnRvdWNoU3RhcnQgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uVG91Y2hNb3ZlXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIGRlbHRhWSA9IF90aGlzLnRvdWNoU3RhcnQgLSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuXG4gICAgICBfdGhpcy5oYW5kbGVFdmVudERlbHRhKGV2ZW50LCBkZWx0YVkpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImdldFNjcm9sbFRhcmdldFwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5zY3JvbGxUYXJnZXQgPSByZWY7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU2Nyb2xsQ2FwdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc3RhcnRMaXN0ZW5pbmcodGhpcy5zY3JvbGxUYXJnZXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZyh0aGlzLnNjcm9sbFRhcmdldCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0YXJ0TGlzdGVuaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nKGVsKSB7XG4gICAgICAvLyBiYWlsIGVhcmx5IGlmIG5vIHNjcm9sbCBhdmFpbGFibGVcbiAgICAgIGlmICghZWwpIHJldHVybjtcbiAgICAgIGlmIChlbC5zY3JvbGxIZWlnaHQgPD0gZWwuY2xpZW50SGVpZ2h0KSByZXR1cm47IC8vIGFsbCB0aGUgaWYgc3RhdGVtZW50cyBhcmUgdG8gYXBwZWFzZSBGbG93IPCfmKJcblxuICAgICAgaWYgKHR5cGVvZiBlbC5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgdGhpcy5vbldoZWVsLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZWwuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBlbC5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RvcExpc3RlbmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdG9wTGlzdGVuaW5nKGVsKSB7XG4gICAgICAvLyBiYWlsIGVhcmx5IGlmIG5vIHNjcm9sbCBhdmFpbGFibGVcbiAgICAgIGlmIChlbC5zY3JvbGxIZWlnaHQgPD0gZWwuY2xpZW50SGVpZ2h0KSByZXR1cm47IC8vIGFsbCB0aGUgaWYgc3RhdGVtZW50cyBhcmUgdG8gYXBwZWFzZSBGbG93IPCfmKJcblxuICAgICAgaWYgKHR5cGVvZiBlbC5yZW1vdmVFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgdGhpcy5vbldoZWVsLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBlbC5yZW1vdmVFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE5vZGVSZXNvbHZlciwge1xuICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRTY3JvbGxUYXJnZXRcbiAgICAgIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTY3JvbGxDYXB0b3I7XG59KENvbXBvbmVudCk7XG5cbnZhciBTY3JvbGxDYXB0b3JTd2l0Y2ggPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQyKSB7XG4gIF9pbmhlcml0cyhTY3JvbGxDYXB0b3JTd2l0Y2gsIF9Db21wb25lbnQyKTtcblxuICBmdW5jdGlvbiBTY3JvbGxDYXB0b3JTd2l0Y2goKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNjcm9sbENhcHRvclN3aXRjaCk7XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFNjcm9sbENhcHRvclN3aXRjaCkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU2Nyb2xsQ2FwdG9yU3dpdGNoLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNFbmFibGVkID0gX3RoaXMkcHJvcHMyLmlzRW5hYmxlZCxcbiAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIFtcImlzRW5hYmxlZFwiXSk7XG5cbiAgICAgIHJldHVybiBpc0VuYWJsZWQgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbENhcHRvciwgcHJvcHMpIDogdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU2Nyb2xsQ2FwdG9yU3dpdGNoO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoU2Nyb2xsQ2FwdG9yU3dpdGNoLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGlzRW5hYmxlZDogdHJ1ZVxufSk7XG5cbnZhciBpbnN0cnVjdGlvbnNBcmlhTWVzc2FnZSA9IGZ1bmN0aW9uIGluc3RydWN0aW9uc0FyaWFNZXNzYWdlKGV2ZW50KSB7XG4gIHZhciBjb250ZXh0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIGlzU2VhcmNoYWJsZSA9IGNvbnRleHQuaXNTZWFyY2hhYmxlLFxuICAgICAgaXNNdWx0aSA9IGNvbnRleHQuaXNNdWx0aSxcbiAgICAgIGxhYmVsID0gY29udGV4dC5sYWJlbCxcbiAgICAgIGlzRGlzYWJsZWQgPSBjb250ZXh0LmlzRGlzYWJsZWQ7XG5cbiAgc3dpdGNoIChldmVudCkge1xuICAgIGNhc2UgJ21lbnUnOlxuICAgICAgcmV0dXJuIFwiVXNlIFVwIGFuZCBEb3duIHRvIGNob29zZSBvcHRpb25zXCIuY29uY2F0KGlzRGlzYWJsZWQgPyAnJyA6ICcsIHByZXNzIEVudGVyIHRvIHNlbGVjdCB0aGUgY3VycmVudGx5IGZvY3VzZWQgb3B0aW9uJywgXCIsIHByZXNzIEVzY2FwZSB0byBleGl0IHRoZSBtZW51LCBwcmVzcyBUYWIgdG8gc2VsZWN0IHRoZSBvcHRpb24gYW5kIGV4aXQgdGhlIG1lbnUuXCIpO1xuXG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGxhYmVsID8gbGFiZWwgOiAnU2VsZWN0JywgXCIgaXMgZm9jdXNlZCBcIikuY29uY2F0KGlzU2VhcmNoYWJsZSA/ICcsdHlwZSB0byByZWZpbmUgbGlzdCcgOiAnJywgXCIsIHByZXNzIERvd24gdG8gb3BlbiB0aGUgbWVudSwgXCIpLmNvbmNhdChpc011bHRpID8gJyBwcmVzcyBsZWZ0IHRvIGZvY3VzIHNlbGVjdGVkIHZhbHVlcycgOiAnJyk7XG5cbiAgICBjYXNlICd2YWx1ZSc6XG4gICAgICByZXR1cm4gJ1VzZSBsZWZ0IGFuZCByaWdodCB0byB0b2dnbGUgYmV0d2VlbiBmb2N1c2VkIHZhbHVlcywgcHJlc3MgQmFja3NwYWNlIHRvIHJlbW92ZSB0aGUgY3VycmVudGx5IGZvY3VzZWQgdmFsdWUnO1xuICB9XG59O1xudmFyIHZhbHVlRXZlbnRBcmlhTWVzc2FnZSA9IGZ1bmN0aW9uIHZhbHVlRXZlbnRBcmlhTWVzc2FnZShldmVudCwgY29udGV4dCkge1xuICB2YXIgdmFsdWUgPSBjb250ZXh0LnZhbHVlLFxuICAgICAgaXNEaXNhYmxlZCA9IGNvbnRleHQuaXNEaXNhYmxlZDtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gIHN3aXRjaCAoZXZlbnQpIHtcbiAgICBjYXNlICdkZXNlbGVjdC1vcHRpb24nOlxuICAgIGNhc2UgJ3BvcC12YWx1ZSc6XG4gICAgY2FzZSAncmVtb3ZlLXZhbHVlJzpcbiAgICAgIHJldHVybiBcIm9wdGlvbiBcIi5jb25jYXQodmFsdWUsIFwiLCBkZXNlbGVjdGVkLlwiKTtcblxuICAgIGNhc2UgJ3NlbGVjdC1vcHRpb24nOlxuICAgICAgcmV0dXJuIGlzRGlzYWJsZWQgPyBcIm9wdGlvbiBcIi5jb25jYXQodmFsdWUsIFwiIGlzIGRpc2FibGVkLiBTZWxlY3QgYW5vdGhlciBvcHRpb24uXCIpIDogXCJvcHRpb24gXCIuY29uY2F0KHZhbHVlLCBcIiwgc2VsZWN0ZWQuXCIpO1xuICB9XG59O1xudmFyIHZhbHVlRm9jdXNBcmlhTWVzc2FnZSA9IGZ1bmN0aW9uIHZhbHVlRm9jdXNBcmlhTWVzc2FnZShfcmVmKSB7XG4gIHZhciBmb2N1c2VkVmFsdWUgPSBfcmVmLmZvY3VzZWRWYWx1ZSxcbiAgICAgIGdldE9wdGlvbkxhYmVsID0gX3JlZi5nZXRPcHRpb25MYWJlbCxcbiAgICAgIHNlbGVjdFZhbHVlID0gX3JlZi5zZWxlY3RWYWx1ZTtcbiAgcmV0dXJuIFwidmFsdWUgXCIuY29uY2F0KGdldE9wdGlvbkxhYmVsKGZvY3VzZWRWYWx1ZSksIFwiIGZvY3VzZWQsIFwiKS5jb25jYXQoc2VsZWN0VmFsdWUuaW5kZXhPZihmb2N1c2VkVmFsdWUpICsgMSwgXCIgb2YgXCIpLmNvbmNhdChzZWxlY3RWYWx1ZS5sZW5ndGgsIFwiLlwiKTtcbn07XG52YXIgb3B0aW9uRm9jdXNBcmlhTWVzc2FnZSA9IGZ1bmN0aW9uIG9wdGlvbkZvY3VzQXJpYU1lc3NhZ2UoX3JlZjIpIHtcbiAgdmFyIGZvY3VzZWRPcHRpb24gPSBfcmVmMi5mb2N1c2VkT3B0aW9uLFxuICAgICAgZ2V0T3B0aW9uTGFiZWwgPSBfcmVmMi5nZXRPcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zO1xuICByZXR1cm4gXCJvcHRpb24gXCIuY29uY2F0KGdldE9wdGlvbkxhYmVsKGZvY3VzZWRPcHRpb24pLCBcIiBmb2N1c2VkXCIpLmNvbmNhdChmb2N1c2VkT3B0aW9uLmlzRGlzYWJsZWQgPyAnIGRpc2FibGVkJyA6ICcnLCBcIiwgXCIpLmNvbmNhdChvcHRpb25zLmluZGV4T2YoZm9jdXNlZE9wdGlvbikgKyAxLCBcIiBvZiBcIikuY29uY2F0KG9wdGlvbnMubGVuZ3RoLCBcIi5cIik7XG59O1xudmFyIHJlc3VsdHNBcmlhTWVzc2FnZSA9IGZ1bmN0aW9uIHJlc3VsdHNBcmlhTWVzc2FnZShfcmVmMykge1xuICB2YXIgaW5wdXRWYWx1ZSA9IF9yZWYzLmlucHV0VmFsdWUsXG4gICAgICBzY3JlZW5SZWFkZXJNZXNzYWdlID0gX3JlZjMuc2NyZWVuUmVhZGVyTWVzc2FnZTtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KHNjcmVlblJlYWRlck1lc3NhZ2UpLmNvbmNhdChpbnB1dFZhbHVlID8gJyBmb3Igc2VhcmNoIHRlcm0gJyArIGlucHV0VmFsdWUgOiAnJywgXCIuXCIpO1xufTtcblxudmFyIGZvcm1hdEdyb3VwTGFiZWwgPSBmdW5jdGlvbiBmb3JtYXRHcm91cExhYmVsKGdyb3VwKSB7XG4gIHJldHVybiBncm91cC5sYWJlbDtcbn07XG52YXIgZ2V0T3B0aW9uTGFiZWwgPSBmdW5jdGlvbiBnZXRPcHRpb25MYWJlbChvcHRpb24pIHtcbiAgcmV0dXJuIG9wdGlvbi5sYWJlbDtcbn07XG52YXIgZ2V0T3B0aW9uVmFsdWUgPSBmdW5jdGlvbiBnZXRPcHRpb25WYWx1ZShvcHRpb24pIHtcbiAgcmV0dXJuIG9wdGlvbi52YWx1ZTtcbn07XG52YXIgaXNPcHRpb25EaXNhYmxlZCA9IGZ1bmN0aW9uIGlzT3B0aW9uRGlzYWJsZWQob3B0aW9uKSB7XG4gIHJldHVybiAhIW9wdGlvbi5pc0Rpc2FibGVkO1xufTtcblxudmFyIGRlZmF1bHRTdHlsZXMgPSB7XG4gIGNsZWFySW5kaWNhdG9yOiBjbGVhckluZGljYXRvckNTUyxcbiAgY29udGFpbmVyOiBjb250YWluZXJDU1MsXG4gIGNvbnRyb2w6IGNzcyxcbiAgZHJvcGRvd25JbmRpY2F0b3I6IGRyb3Bkb3duSW5kaWNhdG9yQ1NTLFxuICBncm91cDogZ3JvdXBDU1MsXG4gIGdyb3VwSGVhZGluZzogZ3JvdXBIZWFkaW5nQ1NTLFxuICBpbmRpY2F0b3JzQ29udGFpbmVyOiBpbmRpY2F0b3JzQ29udGFpbmVyQ1NTLFxuICBpbmRpY2F0b3JTZXBhcmF0b3I6IGluZGljYXRvclNlcGFyYXRvckNTUyxcbiAgaW5wdXQ6IGlucHV0Q1NTLFxuICBsb2FkaW5nSW5kaWNhdG9yOiBsb2FkaW5nSW5kaWNhdG9yQ1NTLFxuICBsb2FkaW5nTWVzc2FnZTogbG9hZGluZ01lc3NhZ2VDU1MsXG4gIG1lbnU6IG1lbnVDU1MsXG4gIG1lbnVMaXN0OiBtZW51TGlzdENTUyxcbiAgbWVudVBvcnRhbDogbWVudVBvcnRhbENTUyxcbiAgbXVsdGlWYWx1ZTogbXVsdGlWYWx1ZUNTUyxcbiAgbXVsdGlWYWx1ZUxhYmVsOiBtdWx0aVZhbHVlTGFiZWxDU1MsXG4gIG11bHRpVmFsdWVSZW1vdmU6IG11bHRpVmFsdWVSZW1vdmVDU1MsXG4gIG5vT3B0aW9uc01lc3NhZ2U6IG5vT3B0aW9uc01lc3NhZ2VDU1MsXG4gIG9wdGlvbjogb3B0aW9uQ1NTLFxuICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJDU1MsXG4gIHNpbmdsZVZhbHVlOiBjc3MkMSxcbiAgdmFsdWVDb250YWluZXI6IHZhbHVlQ29udGFpbmVyQ1NTXG59OyAvLyBNZXJnZSBVdGlsaXR5XG4vLyBBbGxvd3MgY29uc3VtZXJzIHRvIGV4dGVuZCBhIGJhc2UgU2VsZWN0IHdpdGggYWRkaXRpb25hbCBzdHlsZXNcblxuZnVuY3Rpb24gbWVyZ2VTdHlsZXMoc291cmNlKSB7XG4gIHZhciB0YXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIC8vIGluaXRpYWxpemUgd2l0aCBzb3VyY2Ugc3R5bGVzXG4gIHZhciBzdHlsZXMgPSBfb2JqZWN0U3ByZWFkKHt9LCBzb3VyY2UpOyAvLyBtYXNzYWdlIGluIHRhcmdldCBzdHlsZXNcblxuXG4gIE9iamVjdC5rZXlzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHNvdXJjZVtrZXldKSB7XG4gICAgICBzdHlsZXNba2V5XSA9IGZ1bmN0aW9uIChyc0NzcywgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldKHNvdXJjZVtrZXldKHJzQ3NzLCBwcm9wcyksIHByb3BzKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlc1trZXldID0gdGFyZ2V0W2tleV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHN0eWxlcztcbn1cblxudmFyIGNvbG9ycyA9IHtcbiAgcHJpbWFyeTogJyMyNjg0RkYnLFxuICBwcmltYXJ5NzU6ICcjNEM5QUZGJyxcbiAgcHJpbWFyeTUwOiAnI0IyRDRGRicsXG4gIHByaW1hcnkyNTogJyNERUVCRkYnLFxuICBkYW5nZXI6ICcjREUzNTBCJyxcbiAgZGFuZ2VyTGlnaHQ6ICcjRkZCREFEJyxcbiAgbmV1dHJhbDA6ICdoc2woMCwgMCUsIDEwMCUpJyxcbiAgbmV1dHJhbDU6ICdoc2woMCwgMCUsIDk1JSknLFxuICBuZXV0cmFsMTA6ICdoc2woMCwgMCUsIDkwJSknLFxuICBuZXV0cmFsMjA6ICdoc2woMCwgMCUsIDgwJSknLFxuICBuZXV0cmFsMzA6ICdoc2woMCwgMCUsIDcwJSknLFxuICBuZXV0cmFsNDA6ICdoc2woMCwgMCUsIDYwJSknLFxuICBuZXV0cmFsNTA6ICdoc2woMCwgMCUsIDUwJSknLFxuICBuZXV0cmFsNjA6ICdoc2woMCwgMCUsIDQwJSknLFxuICBuZXV0cmFsNzA6ICdoc2woMCwgMCUsIDMwJSknLFxuICBuZXV0cmFsODA6ICdoc2woMCwgMCUsIDIwJSknLFxuICBuZXV0cmFsOTA6ICdoc2woMCwgMCUsIDEwJSknXG59O1xudmFyIGJvcmRlclJhZGl1cyA9IDQ7IC8vIFVzZWQgdG8gY2FsY3VsYXRlIGNvbnNpc3RlbnQgbWFyZ2luL3BhZGRpbmcgb24gZWxlbWVudHNcblxudmFyIGJhc2VVbml0ID0gNDsgLy8gVGhlIG1pbmltdW0gaGVpZ2h0IG9mIHRoZSBjb250cm9sXG5cbnZhciBjb250cm9sSGVpZ2h0ID0gMzg7IC8vIFRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgY29udHJvbCBhbmQgbWVudSAqL1xuXG52YXIgbWVudUd1dHRlciA9IGJhc2VVbml0ICogMjtcbnZhciBzcGFjaW5nID0ge1xuICBiYXNlVW5pdDogYmFzZVVuaXQsXG4gIGNvbnRyb2xIZWlnaHQ6IGNvbnRyb2xIZWlnaHQsXG4gIG1lbnVHdXR0ZXI6IG1lbnVHdXR0ZXJcbn07XG52YXIgZGVmYXVsdFRoZW1lID0ge1xuICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyxcbiAgY29sb3JzOiBjb2xvcnMsXG4gIHNwYWNpbmc6IHNwYWNpbmdcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGJhY2tzcGFjZVJlbW92ZXNWYWx1ZTogdHJ1ZSxcbiAgYmx1cklucHV0T25TZWxlY3Q6IGlzVG91Y2hDYXBhYmxlKCksXG4gIGNhcHR1cmVNZW51U2Nyb2xsOiAhaXNUb3VjaENhcGFibGUoKSxcbiAgY2xvc2VNZW51T25TZWxlY3Q6IHRydWUsXG4gIGNsb3NlTWVudU9uU2Nyb2xsOiBmYWxzZSxcbiAgY29tcG9uZW50czoge30sXG4gIGNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZTogdHJ1ZSxcbiAgZXNjYXBlQ2xlYXJzVmFsdWU6IGZhbHNlLFxuICBmaWx0ZXJPcHRpb246IGNyZWF0ZUZpbHRlcigpLFxuICBmb3JtYXRHcm91cExhYmVsOiBmb3JtYXRHcm91cExhYmVsLFxuICBnZXRPcHRpb25MYWJlbDogZ2V0T3B0aW9uTGFiZWwsXG4gIGdldE9wdGlvblZhbHVlOiBnZXRPcHRpb25WYWx1ZSxcbiAgaXNEaXNhYmxlZDogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGlzTXVsdGk6IGZhbHNlLFxuICBpc1J0bDogZmFsc2UsXG4gIGlzU2VhcmNoYWJsZTogdHJ1ZSxcbiAgaXNPcHRpb25EaXNhYmxlZDogaXNPcHRpb25EaXNhYmxlZCxcbiAgbG9hZGluZ01lc3NhZ2U6IGZ1bmN0aW9uIGxvYWRpbmdNZXNzYWdlKCkge1xuICAgIHJldHVybiAnTG9hZGluZy4uLic7XG4gIH0sXG4gIG1heE1lbnVIZWlnaHQ6IDMwMCxcbiAgbWluTWVudUhlaWdodDogMTQwLFxuICBtZW51SXNPcGVuOiBmYWxzZSxcbiAgbWVudVBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1lbnVQb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgbWVudVNob3VsZEJsb2NrU2Nyb2xsOiBmYWxzZSxcbiAgbWVudVNob3VsZFNjcm9sbEludG9WaWV3OiAhaXNNb2JpbGVEZXZpY2UoKSxcbiAgbm9PcHRpb25zTWVzc2FnZTogZnVuY3Rpb24gbm9PcHRpb25zTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gJ05vIG9wdGlvbnMnO1xuICB9LFxuICBvcGVuTWVudU9uRm9jdXM6IGZhbHNlLFxuICBvcGVuTWVudU9uQ2xpY2s6IHRydWUsXG4gIG9wdGlvbnM6IFtdLFxuICBwYWdlU2l6ZTogNSxcbiAgcGxhY2Vob2xkZXI6ICdTZWxlY3QuLi4nLFxuICBzY3JlZW5SZWFkZXJTdGF0dXM6IGZ1bmN0aW9uIHNjcmVlblJlYWRlclN0YXR1cyhfcmVmKSB7XG4gICAgdmFyIGNvdW50ID0gX3JlZi5jb3VudDtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoY291bnQsIFwiIHJlc3VsdFwiKS5jb25jYXQoY291bnQgIT09IDEgPyAncycgOiAnJywgXCIgYXZhaWxhYmxlXCIpO1xuICB9LFxuICBzdHlsZXM6IHt9LFxuICB0YWJJbmRleDogJzAnLFxuICB0YWJTZWxlY3RzVmFsdWU6IHRydWVcbn07XG52YXIgaW5zdGFuY2VJZCA9IDE7XG5cbnZhciBTZWxlY3QgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFNlbGVjdCwgX0NvbXBvbmVudCk7XG5cbiAgLy8gTWlzYy4gSW5zdGFuY2UgUHJvcGVydGllc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVE9ET1xuICAvLyBSZWZzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBMaWZlY3ljbGVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGZ1bmN0aW9uIFNlbGVjdChfcHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2VsZWN0KTtcblxuICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFNlbGVjdCkuY2FsbCh0aGlzLCBfcHJvcHMpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBhcmlhTGl2ZVNlbGVjdGlvbjogJycsXG4gICAgICBhcmlhTGl2ZUNvbnRleHQ6ICcnLFxuICAgICAgZm9jdXNlZE9wdGlvbjogbnVsbCxcbiAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbCxcbiAgICAgIGlucHV0SXNIaWRkZW46IGZhbHNlLFxuICAgICAgaXNGb2N1c2VkOiBmYWxzZSxcbiAgICAgIG1lbnVPcHRpb25zOiB7XG4gICAgICAgIHJlbmRlcjogW10sXG4gICAgICAgIGZvY3VzYWJsZTogW11cbiAgICAgIH0sXG4gICAgICBzZWxlY3RWYWx1ZTogW11cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJibG9ja09wdGlvbkhvdmVyXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJpc0NvbXBvc2luZ1wiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGVcIiwgZmFsc2UpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImNvbW1vblByb3BzXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiY29tcG9uZW50c1wiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImhhc0dyb3Vwc1wiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiaW5pdGlhbFRvdWNoWFwiLCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJpbml0aWFsVG91Y2hZXCIsIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZVwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImluc3RhbmNlUHJlZml4XCIsICcnKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvcGVuQWZ0ZXJGb2N1c1wiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwic2Nyb2xsVG9Gb2N1c2VkT3B0aW9uT25VcGRhdGVcIiwgZmFsc2UpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcInVzZXJJc0RyYWdnaW5nXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiY29udHJvbFJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJnZXRDb250cm9sUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmNvbnRyb2xSZWYgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiZm9jdXNlZE9wdGlvblJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJnZXRGb2N1c2VkT3B0aW9uUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmZvY3VzZWRPcHRpb25SZWYgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwibWVudUxpc3RSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiZ2V0TWVudUxpc3RSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubWVudUxpc3RSZWYgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiaW5wdXRSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiZ2V0SW5wdXRSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuaW5wdXRSZWYgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiY2FjaGVDb21wb25lbnRzXCIsIGZ1bmN0aW9uIChjb21wb25lbnRzKSB7XG4gICAgICBfdGhpcy5jb21wb25lbnRzID0gZGVmYXVsdENvbXBvbmVudHMoe1xuICAgICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJmb2N1c1wiLCBfdGhpcy5mb2N1c0lucHV0KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJibHVyXCIsIF90aGlzLmJsdXJJbnB1dCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25DaGFuZ2VcIiwgZnVuY3Rpb24gKG5ld1ZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzLm9uQ2hhbmdlLFxuICAgICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wcy5uYW1lO1xuICAgICAgb25DaGFuZ2UobmV3VmFsdWUsIF9vYmplY3RTcHJlYWQoe30sIGFjdGlvbk1ldGEsIHtcbiAgICAgICAgbmFtZTogbmFtZVxuICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcInNldFZhbHVlXCIsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ3NldC12YWx1ZSc7XG4gICAgICB2YXIgb3B0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgY2xvc2VNZW51T25TZWxlY3QgPSBfdGhpcyRwcm9wczIuY2xvc2VNZW51T25TZWxlY3QsXG4gICAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzMi5pc011bHRpO1xuXG4gICAgICBfdGhpcy5vbklucHV0Q2hhbmdlKCcnLCB7XG4gICAgICAgIGFjdGlvbjogJ3NldC12YWx1ZSdcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoY2xvc2VNZW51T25TZWxlY3QpIHtcbiAgICAgICAgX3RoaXMuaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlID0gIWlzTXVsdGk7XG5cbiAgICAgICAgX3RoaXMub25NZW51Q2xvc2UoKTtcbiAgICAgIH0gLy8gd2hlbiB0aGUgc2VsZWN0IHZhbHVlIHNob3VsZCBjaGFuZ2UsIHdlIHNob3VsZCByZXNldCBmb2N1c2VkVmFsdWVcblxuXG4gICAgICBfdGhpcy5jbGVhckZvY3VzVmFsdWVPblVwZGF0ZSA9IHRydWU7XG5cbiAgICAgIF90aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlLCB7XG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBvcHRpb246IG9wdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwic2VsZWN0T3B0aW9uXCIsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGJsdXJJbnB1dE9uU2VsZWN0ID0gX3RoaXMkcHJvcHMzLmJsdXJJbnB1dE9uU2VsZWN0LFxuICAgICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczMuaXNNdWx0aTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuXG4gICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICBpZiAoX3RoaXMuaXNPcHRpb25TZWxlY3RlZChuZXdWYWx1ZSwgc2VsZWN0VmFsdWUpKSB7XG4gICAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF90aGlzLmdldE9wdGlvblZhbHVlKG5ld1ZhbHVlKTtcblxuICAgICAgICAgIF90aGlzLnNldFZhbHVlKHNlbGVjdFZhbHVlLmZpbHRlcihmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmdldE9wdGlvblZhbHVlKGkpICE9PSBjYW5kaWRhdGU7XG4gICAgICAgICAgfSksICdkZXNlbGVjdC1vcHRpb24nLCBuZXdWYWx1ZSk7XG5cbiAgICAgICAgICBfdGhpcy5hbm5vdW5jZUFyaWFMaXZlU2VsZWN0aW9uKHtcbiAgICAgICAgICAgIGV2ZW50OiAnZGVzZWxlY3Qtb3B0aW9uJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IF90aGlzLmdldE9wdGlvbkxhYmVsKG5ld1ZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghX3RoaXMuaXNPcHRpb25EaXNhYmxlZChuZXdWYWx1ZSwgc2VsZWN0VmFsdWUpKSB7XG4gICAgICAgICAgICBfdGhpcy5zZXRWYWx1ZShbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHNlbGVjdFZhbHVlKSwgW25ld1ZhbHVlXSksICdzZWxlY3Qtb3B0aW9uJywgbmV3VmFsdWUpO1xuXG4gICAgICAgICAgICBfdGhpcy5hbm5vdW5jZUFyaWFMaXZlU2VsZWN0aW9uKHtcbiAgICAgICAgICAgICAgZXZlbnQ6ICdzZWxlY3Qtb3B0aW9uJyxcbiAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBfdGhpcy5nZXRPcHRpb25MYWJlbChuZXdWYWx1ZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGFubm91bmNlIHRoYXQgb3B0aW9uIGlzIGRpc2FibGVkXG4gICAgICAgICAgICBfdGhpcy5hbm5vdW5jZUFyaWFMaXZlU2VsZWN0aW9uKHtcbiAgICAgICAgICAgICAgZXZlbnQ6ICdzZWxlY3Qtb3B0aW9uJyxcbiAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBfdGhpcy5nZXRPcHRpb25MYWJlbChuZXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghX3RoaXMuaXNPcHRpb25EaXNhYmxlZChuZXdWYWx1ZSwgc2VsZWN0VmFsdWUpKSB7XG4gICAgICAgICAgX3RoaXMuc2V0VmFsdWUobmV3VmFsdWUsICdzZWxlY3Qtb3B0aW9uJyk7XG5cbiAgICAgICAgICBfdGhpcy5hbm5vdW5jZUFyaWFMaXZlU2VsZWN0aW9uKHtcbiAgICAgICAgICAgIGV2ZW50OiAnc2VsZWN0LW9wdGlvbicsXG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBfdGhpcy5nZXRPcHRpb25MYWJlbChuZXdWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBhbm5vdW5jZSB0aGF0IG9wdGlvbiBpcyBkaXNhYmxlZFxuICAgICAgICAgIF90aGlzLmFubm91bmNlQXJpYUxpdmVTZWxlY3Rpb24oe1xuICAgICAgICAgICAgZXZlbnQ6ICdzZWxlY3Qtb3B0aW9uJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IF90aGlzLmdldE9wdGlvbkxhYmVsKG5ld1ZhbHVlKSxcbiAgICAgICAgICAgICAgaXNEaXNhYmxlZDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChibHVySW5wdXRPblNlbGVjdCkge1xuICAgICAgICBfdGhpcy5ibHVySW5wdXQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJyZW1vdmVWYWx1ZVwiLCBmdW5jdGlvbiAocmVtb3ZlZFZhbHVlKSB7XG4gICAgICB2YXIgc2VsZWN0VmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcblxuICAgICAgdmFyIGNhbmRpZGF0ZSA9IF90aGlzLmdldE9wdGlvblZhbHVlKHJlbW92ZWRWYWx1ZSk7XG5cbiAgICAgIHZhciBuZXdWYWx1ZSA9IHNlbGVjdFZhbHVlLmZpbHRlcihmdW5jdGlvbiAoaSkge1xuICAgICAgICByZXR1cm4gX3RoaXMuZ2V0T3B0aW9uVmFsdWUoaSkgIT09IGNhbmRpZGF0ZTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5vbkNoYW5nZShuZXdWYWx1ZS5sZW5ndGggPyBuZXdWYWx1ZSA6IG51bGwsIHtcbiAgICAgICAgYWN0aW9uOiAncmVtb3ZlLXZhbHVlJyxcbiAgICAgICAgcmVtb3ZlZFZhbHVlOiByZW1vdmVkVmFsdWVcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5hbm5vdW5jZUFyaWFMaXZlU2VsZWN0aW9uKHtcbiAgICAgICAgZXZlbnQ6ICdyZW1vdmUtdmFsdWUnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdmFsdWU6IHJlbW92ZWRWYWx1ZSA/IF90aGlzLmdldE9wdGlvbkxhYmVsKHJlbW92ZWRWYWx1ZSkgOiAnJ1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuZm9jdXNJbnB1dCgpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImNsZWFyVmFsdWVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGlzTXVsdGkgPSBfdGhpcy5wcm9wcy5pc011bHRpO1xuXG4gICAgICBfdGhpcy5vbkNoYW5nZShpc011bHRpID8gW10gOiBudWxsLCB7XG4gICAgICAgIGFjdGlvbjogJ2NsZWFyJ1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwicG9wVmFsdWVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICB2YXIgbGFzdFNlbGVjdGVkVmFsdWUgPSBzZWxlY3RWYWx1ZVtzZWxlY3RWYWx1ZS5sZW5ndGggLSAxXTtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IHNlbGVjdFZhbHVlLnNsaWNlKDAsIHNlbGVjdFZhbHVlLmxlbmd0aCAtIDEpO1xuXG4gICAgICBfdGhpcy5hbm5vdW5jZUFyaWFMaXZlU2VsZWN0aW9uKHtcbiAgICAgICAgZXZlbnQ6ICdwb3AtdmFsdWUnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdmFsdWU6IGxhc3RTZWxlY3RlZFZhbHVlID8gX3RoaXMuZ2V0T3B0aW9uTGFiZWwobGFzdFNlbGVjdGVkVmFsdWUpIDogJydcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlLmxlbmd0aCA/IG5ld1ZhbHVlIDogbnVsbCwge1xuICAgICAgICBhY3Rpb246ICdwb3AtdmFsdWUnLFxuICAgICAgICByZW1vdmVkVmFsdWU6IGxhc3RTZWxlY3RlZFZhbHVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJnZXRPcHRpb25MYWJlbFwiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLmdldE9wdGlvbkxhYmVsKGRhdGEpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImdldE9wdGlvblZhbHVlXCIsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMuZ2V0T3B0aW9uVmFsdWUoZGF0YSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiZ2V0U3R5bGVzXCIsIGZ1bmN0aW9uIChrZXksIHByb3BzKSB7XG4gICAgICB2YXIgYmFzZSA9IGRlZmF1bHRTdHlsZXNba2V5XShwcm9wcyk7XG4gICAgICBiYXNlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICAgIHZhciBjdXN0b20gPSBfdGhpcy5wcm9wcy5zdHlsZXNba2V5XTtcbiAgICAgIHJldHVybiBjdXN0b20gPyBjdXN0b20oYmFzZSwgcHJvcHMpIDogYmFzZTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJnZXRFbGVtZW50SWRcIiwgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdChfdGhpcy5pbnN0YW5jZVByZWZpeCwgXCItXCIpLmNvbmNhdChlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJnZXRBY3RpdmVEZXNjZW5kZW50SWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG1lbnVJc09wZW4gPSBfdGhpcy5wcm9wcy5tZW51SXNPcGVuO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gX3RoaXMuc3RhdGUsXG4gICAgICAgICAgbWVudU9wdGlvbnMgPSBfdGhpcyRzdGF0ZS5tZW51T3B0aW9ucyxcbiAgICAgICAgICBmb2N1c2VkT3B0aW9uID0gX3RoaXMkc3RhdGUuZm9jdXNlZE9wdGlvbjtcbiAgICAgIGlmICghZm9jdXNlZE9wdGlvbiB8fCAhbWVudUlzT3BlbikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHZhciBpbmRleCA9IG1lbnVPcHRpb25zLmZvY3VzYWJsZS5pbmRleE9mKGZvY3VzZWRPcHRpb24pO1xuICAgICAgdmFyIG9wdGlvbiA9IG1lbnVPcHRpb25zLnJlbmRlcltpbmRleF07XG4gICAgICByZXR1cm4gb3B0aW9uICYmIG9wdGlvbi5rZXk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiYW5ub3VuY2VBcmlhTGl2ZVNlbGVjdGlvblwiLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciBldmVudCA9IF9yZWYyLmV2ZW50LFxuICAgICAgICAgIGNvbnRleHQgPSBfcmVmMi5jb250ZXh0O1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGFyaWFMaXZlU2VsZWN0aW9uOiB2YWx1ZUV2ZW50QXJpYU1lc3NhZ2UoZXZlbnQsIGNvbnRleHQpXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJhbm5vdW5jZUFyaWFMaXZlQ29udGV4dFwiLCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgIHZhciBldmVudCA9IF9yZWYzLmV2ZW50LFxuICAgICAgICAgIGNvbnRleHQgPSBfcmVmMy5jb250ZXh0O1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGFyaWFMaXZlQ29udGV4dDogaW5zdHJ1Y3Rpb25zQXJpYU1lc3NhZ2UoZXZlbnQsIF9vYmplY3RTcHJlYWQoe30sIGNvbnRleHQsIHtcbiAgICAgICAgICBsYWJlbDogX3RoaXMucHJvcHNbJ2FyaWEtbGFiZWwnXVxuICAgICAgICB9KSlcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uTWVudU1vdXNlRG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbk1lbnVNb3VzZU1vdmVcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5ibG9ja09wdGlvbkhvdmVyID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25Db250cm9sTW91c2VEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIG9wZW5NZW51T25DbGljayA9IF90aGlzLnByb3BzLm9wZW5NZW51T25DbGljaztcblxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0ZvY3VzZWQpIHtcbiAgICAgICAgaWYgKG9wZW5NZW51T25DbGljaykge1xuICAgICAgICAgIF90aGlzLm9wZW5BZnRlckZvY3VzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoIV90aGlzLnByb3BzLm1lbnVJc09wZW4pIHtcbiAgICAgICAgaWYgKG9wZW5NZW51T25DbGljaykge1xuICAgICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyRGbG93Rml4TWVcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lICE9PSAnSU5QVVQnKSB7XG4gICAgICAgICAgX3RoaXMub25NZW51Q2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyRGbG93Rml4TWVcblxuXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbkRyb3Bkb3duSW5kaWNhdG9yTW91c2VEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gaWdub3JlIG1vdXNlIGV2ZW50cyB0aGF0IHdlcmVuJ3QgdHJpZ2dlcmVkIGJ5IHRoZSBwcmltYXJ5IGJ1dHRvblxuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pc0Rpc2FibGVkKSByZXR1cm47XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNC5pc011bHRpLFxuICAgICAgICAgIG1lbnVJc09wZW4gPSBfdGhpcyRwcm9wczQubWVudUlzT3BlbjtcblxuICAgICAgX3RoaXMuZm9jdXNJbnB1dCgpO1xuXG4gICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICBfdGhpcy5pbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUgPSAhaXNNdWx0aTtcblxuICAgICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbkNsZWFySW5kaWNhdG9yTW91c2VEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gaWdub3JlIG1vdXNlIGV2ZW50cyB0aGF0IHdlcmVuJ3QgdHJpZ2dlcmVkIGJ5IHRoZSBwcmltYXJ5IGJ1dHRvblxuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNsZWFyVmFsdWUoKTtcblxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBfdGhpcy5vcGVuQWZ0ZXJGb2N1cyA9IGZhbHNlO1xuXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNoZW5kJykge1xuICAgICAgICBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvblNjcm9sbFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICh0eXBlb2YgX3RoaXMucHJvcHMuY2xvc2VNZW51T25TY3JvbGwgPT09ICdib29sZWFuJykge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgaXNEb2N1bWVudEVsZW1lbnQoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgIF90aGlzLnByb3BzLm9uTWVudUNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIF90aGlzLnByb3BzLmNsb3NlTWVudU9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5jbG9zZU1lbnVPblNjcm9sbChldmVudCkpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25Db21wb3NpdGlvblN0YXJ0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmlzQ29tcG9zaW5nID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbkNvbXBvc2l0aW9uRW5kXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25Ub3VjaFN0YXJ0XCIsIGZ1bmN0aW9uIChfcmVmNCkge1xuICAgICAgdmFyIHRvdWNoZXMgPSBfcmVmNC50b3VjaGVzO1xuICAgICAgdmFyIHRvdWNoID0gdG91Y2hlcy5pdGVtKDApO1xuXG4gICAgICBpZiAoIXRvdWNoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuaW5pdGlhbFRvdWNoWCA9IHRvdWNoLmNsaWVudFg7XG4gICAgICBfdGhpcy5pbml0aWFsVG91Y2hZID0gdG91Y2guY2xpZW50WTtcbiAgICAgIF90aGlzLnVzZXJJc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25Ub3VjaE1vdmVcIiwgZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICB2YXIgdG91Y2hlcyA9IF9yZWY1LnRvdWNoZXM7XG4gICAgICB2YXIgdG91Y2ggPSB0b3VjaGVzLml0ZW0oMCk7XG5cbiAgICAgIGlmICghdG91Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGVsdGFYID0gTWF0aC5hYnModG91Y2guY2xpZW50WCAtIF90aGlzLmluaXRpYWxUb3VjaFgpO1xuICAgICAgdmFyIGRlbHRhWSA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFkgLSBfdGhpcy5pbml0aWFsVG91Y2hZKTtcbiAgICAgIHZhciBtb3ZlVGhyZXNob2xkID0gNTtcbiAgICAgIF90aGlzLnVzZXJJc0RyYWdnaW5nID0gZGVsdGFYID4gbW92ZVRocmVzaG9sZCB8fCBkZWx0YVkgPiBtb3ZlVGhyZXNob2xkO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uVG91Y2hFbmRcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMudXNlcklzRHJhZ2dpbmcpIHJldHVybjsgLy8gY2xvc2UgdGhlIG1lbnUgaWYgdGhlIHVzZXIgdGFwcyBvdXRzaWRlXG4gICAgICAvLyB3ZSdyZSBjaGVja2luZyBvbiBldmVudC50YXJnZXQgaGVyZSBpbnN0ZWFkIG9mIGV2ZW50LmN1cnJlbnRUYXJnZXQsIGJlY2F1c2Ugd2Ugd2FudCB0byBhc3NlcnQgaW5mb3JtYXRpb25cbiAgICAgIC8vIG9uIGV2ZW50cyBvbiBjaGlsZCBlbGVtZW50cywgbm90IHRoZSBkb2N1bWVudCAod2hpY2ggd2UndmUgYXR0YWNoZWQgdGhpcyBoYW5kbGVyIHRvKS5cblxuICAgICAgaWYgKF90aGlzLmNvbnRyb2xSZWYgJiYgIV90aGlzLmNvbnRyb2xSZWYuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiBfdGhpcy5tZW51TGlzdFJlZiAmJiAhX3RoaXMubWVudUxpc3RSZWYuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICBfdGhpcy5ibHVySW5wdXQoKTtcbiAgICAgIH0gLy8gcmVzZXQgbW92ZSB2YXJzXG5cblxuICAgICAgX3RoaXMuaW5pdGlhbFRvdWNoWCA9IDA7XG4gICAgICBfdGhpcy5pbml0aWFsVG91Y2hZID0gMDtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbkNvbnRyb2xUb3VjaEVuZFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy51c2VySXNEcmFnZ2luZykgcmV0dXJuO1xuXG4gICAgICBfdGhpcy5vbkNvbnRyb2xNb3VzZURvd24oZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uQ2xlYXJJbmRpY2F0b3JUb3VjaEVuZFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy51c2VySXNEcmFnZ2luZykgcmV0dXJuO1xuXG4gICAgICBfdGhpcy5vbkNsZWFySW5kaWNhdG9yTW91c2VEb3duKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbkRyb3Bkb3duSW5kaWNhdG9yVG91Y2hFbmRcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMudXNlcklzRHJhZ2dpbmcpIHJldHVybjtcblxuICAgICAgX3RoaXMub25Ecm9wZG93bkluZGljYXRvck1vdXNlRG93bihldmVudCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiaGFuZGxlSW5wdXRDaGFuZ2VcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgaW5wdXRWYWx1ZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWU7XG4gICAgICBfdGhpcy5pbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUgPSBmYWxzZTtcblxuICAgICAgX3RoaXMub25JbnB1dENoYW5nZShpbnB1dFZhbHVlLCB7XG4gICAgICAgIGFjdGlvbjogJ2lucHV0LWNoYW5nZSdcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5vbk1lbnVPcGVuKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25JbnB1dEZvY3VzXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGlzU2VhcmNoYWJsZSA9IF90aGlzJHByb3BzNS5pc1NlYXJjaGFibGUsXG4gICAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNS5pc011bHRpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25Gb2N1cykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlID0gZmFsc2U7XG5cbiAgICAgIF90aGlzLmFubm91bmNlQXJpYUxpdmVDb250ZXh0KHtcbiAgICAgICAgZXZlbnQ6ICdpbnB1dCcsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBpc1NlYXJjaGFibGU6IGlzU2VhcmNoYWJsZSxcbiAgICAgICAgICBpc011bHRpOiBpc011bHRpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChfdGhpcy5vcGVuQWZ0ZXJGb2N1cyB8fCBfdGhpcy5wcm9wcy5vcGVuTWVudU9uRm9jdXMpIHtcbiAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLm9wZW5BZnRlckZvY3VzID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25JbnB1dEJsdXJcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMubWVudUxpc3RSZWYgJiYgX3RoaXMubWVudUxpc3RSZWYuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgX3RoaXMuaW5wdXRSZWYuZm9jdXMoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMub25JbnB1dENoYW5nZSgnJywge1xuICAgICAgICBhY3Rpb246ICdpbnB1dC1ibHVyJ1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLm9uTWVudUNsb3NlKCk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBudWxsLFxuICAgICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbk9wdGlvbkhvdmVyXCIsIGZ1bmN0aW9uIChmb2N1c2VkT3B0aW9uKSB7XG4gICAgICBpZiAoX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciB8fCBfdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uID09PSBmb2N1c2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkT3B0aW9uOiBmb2N1c2VkT3B0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJzaG91bGRIaWRlU2VsZWN0ZWRPcHRpb25zXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBoaWRlU2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM2LmhpZGVTZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNi5pc011bHRpO1xuICAgICAgaWYgKGhpZGVTZWxlY3RlZE9wdGlvbnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGlzTXVsdGk7XG4gICAgICByZXR1cm4gaGlkZVNlbGVjdGVkT3B0aW9ucztcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNy5pc011bHRpLFxuICAgICAgICAgIGJhY2tzcGFjZVJlbW92ZXNWYWx1ZSA9IF90aGlzJHByb3BzNy5iYWNrc3BhY2VSZW1vdmVzVmFsdWUsXG4gICAgICAgICAgZXNjYXBlQ2xlYXJzVmFsdWUgPSBfdGhpcyRwcm9wczcuZXNjYXBlQ2xlYXJzVmFsdWUsXG4gICAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzNy5pbnB1dFZhbHVlLFxuICAgICAgICAgIGlzQ2xlYXJhYmxlID0gX3RoaXMkcHJvcHM3LmlzQ2xlYXJhYmxlLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczcuaXNEaXNhYmxlZCxcbiAgICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM3Lm1lbnVJc09wZW4sXG4gICAgICAgICAgb25LZXlEb3duID0gX3RoaXMkcHJvcHM3Lm9uS2V5RG93bixcbiAgICAgICAgICB0YWJTZWxlY3RzVmFsdWUgPSBfdGhpcyRwcm9wczcudGFiU2VsZWN0c1ZhbHVlLFxuICAgICAgICAgIG9wZW5NZW51T25Gb2N1cyA9IF90aGlzJHByb3BzNy5vcGVuTWVudU9uRm9jdXM7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gX3RoaXMuc3RhdGUsXG4gICAgICAgICAgZm9jdXNlZE9wdGlvbiA9IF90aGlzJHN0YXRlMi5mb2N1c2VkT3B0aW9uLFxuICAgICAgICAgIGZvY3VzZWRWYWx1ZSA9IF90aGlzJHN0YXRlMi5mb2N1c2VkVmFsdWUsXG4gICAgICAgICAgc2VsZWN0VmFsdWUgPSBfdGhpcyRzdGF0ZTIuc2VsZWN0VmFsdWU7XG4gICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICBpZiAodHlwZW9mIG9uS2V5RG93biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvbktleURvd24oZXZlbnQpO1xuXG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IC8vIEJsb2NrIG9wdGlvbiBob3ZlciBldmVudHMgd2hlbiB0aGUgdXNlciBoYXMganVzdCBwcmVzc2VkIGEga2V5XG5cblxuICAgICAgX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciA9IHRydWU7XG5cbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgICAgaWYgKCFpc011bHRpIHx8IGlucHV0VmFsdWUpIHJldHVybjtcblxuICAgICAgICAgIF90aGlzLmZvY3VzVmFsdWUoJ3ByZXZpb3VzJyk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICBpZiAoIWlzTXVsdGkgfHwgaW5wdXRWYWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgICAgX3RoaXMuZm9jdXNWYWx1ZSgnbmV4dCcpO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnRGVsZXRlJzpcbiAgICAgICAgY2FzZSAnQmFja3NwYWNlJzpcbiAgICAgICAgICBpZiAoaW5wdXRWYWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgICAgaWYgKGZvY3VzZWRWYWx1ZSkge1xuICAgICAgICAgICAgX3RoaXMucmVtb3ZlVmFsdWUoZm9jdXNlZFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFiYWNrc3BhY2VSZW1vdmVzVmFsdWUpIHJldHVybjtcblxuICAgICAgICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgICAgICAgX3RoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNDbGVhcmFibGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgaWYgKF90aGlzLmlzQ29tcG9zaW5nKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgfHwgIW1lbnVJc09wZW4gfHwgIXRhYlNlbGVjdHNWYWx1ZSB8fCAhZm9jdXNlZE9wdGlvbiB8fCAvLyBkb24ndCBjYXB0dXJlIHRoZSBldmVudCBpZiB0aGUgbWVudSBvcGVucyBvbiBmb2N1cyBhbmQgdGhlIGZvY3VzZWRcbiAgICAgICAgICAvLyBvcHRpb24gaXMgYWxyZWFkeSBzZWxlY3RlZDsgaXQgYnJlYWtzIHRoZSBmbG93IG9mIG5hdmlnYXRpb25cbiAgICAgICAgICBvcGVuTWVudU9uRm9jdXMgJiYgX3RoaXMuaXNPcHRpb25TZWxlY3RlZChmb2N1c2VkT3B0aW9uLCBzZWxlY3RWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpcy5zZWxlY3RPcHRpb24oZm9jdXNlZE9wdGlvbik7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDIyOSkge1xuICAgICAgICAgICAgLy8gaWdub3JlIHRoZSBrZXlkb3duIGV2ZW50IGZyb20gYW4gSW5wdXQgTWV0aG9kIEVkaXRvcihJTUUpXG4gICAgICAgICAgICAvLyByZWYuIGh0dHBzOi8vd3d3LnczLm9yZy9UUi91aWV2ZW50cy8jZGV0ZXJtaW5lLWtleWRvd24ta2V5dXAta2V5Q29kZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIGlmICghZm9jdXNlZE9wdGlvbikgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzQ29tcG9zaW5nKSByZXR1cm47XG5cbiAgICAgICAgICAgIF90aGlzLnNlbGVjdE9wdGlvbihmb2N1c2VkT3B0aW9uKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgaWYgKG1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLmlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBfdGhpcy5vbklucHV0Q2hhbmdlKCcnLCB7XG4gICAgICAgICAgICAgIGFjdGlvbjogJ21lbnUtY2xvc2UnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgX3RoaXMub25NZW51Q2xvc2UoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2xlYXJhYmxlICYmIGVzY2FwZUNsZWFyc1ZhbHVlKSB7XG4gICAgICAgICAgICBfdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgLy8gc3BhY2VcbiAgICAgICAgICBpZiAoaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghbWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZm9jdXNlZE9wdGlvbikgcmV0dXJuO1xuXG4gICAgICAgICAgX3RoaXMuc2VsZWN0T3B0aW9uKGZvY3VzZWRPcHRpb24pO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgaWYgKG1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCd1cCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuTWVudSgnbGFzdCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgaWYgKG1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdkb3duJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgICAgaWYgKCFtZW51SXNPcGVuKSByZXR1cm47XG5cbiAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbigncGFnZXVwJyk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgICAgaWYgKCFtZW51SXNPcGVuKSByZXR1cm47XG5cbiAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbigncGFnZWRvd24nKTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuO1xuXG4gICAgICAgICAgX3RoaXMuZm9jdXNPcHRpb24oJ2ZpcnN0Jyk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdFbmQnOlxuICAgICAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuO1xuXG4gICAgICAgICAgX3RoaXMuZm9jdXNPcHRpb24oJ2xhc3QnKTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0pO1xuXG4gICAgdmFyIHZhbHVlID0gX3Byb3BzLnZhbHVlO1xuICAgIF90aGlzLmNhY2hlQ29tcG9uZW50cyA9IG1lbW9pemVPbmUoX3RoaXMuY2FjaGVDb21wb25lbnRzLCBleHBvcnRlZEVxdWFsKS5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpKTtcblxuICAgIF90aGlzLmNhY2hlQ29tcG9uZW50cyhfcHJvcHMuY29tcG9uZW50cyk7XG5cbiAgICBfdGhpcy5pbnN0YW5jZVByZWZpeCA9ICdyZWFjdC1zZWxlY3QtJyArIChfdGhpcy5wcm9wcy5pbnN0YW5jZUlkIHx8ICsraW5zdGFuY2VJZCk7XG5cbiAgICB2YXIgX3NlbGVjdFZhbHVlID0gY2xlYW5WYWx1ZSh2YWx1ZSk7XG5cbiAgICB2YXIgX21lbnVPcHRpb25zID0gX3Byb3BzLm1lbnVJc09wZW4gPyBfdGhpcy5idWlsZE1lbnVPcHRpb25zKF9wcm9wcywgX3NlbGVjdFZhbHVlKSA6IHtcbiAgICAgIHJlbmRlcjogW10sXG4gICAgICBmb2N1c2FibGU6IFtdXG4gICAgfTtcblxuICAgIF90aGlzLnN0YXRlLm1lbnVPcHRpb25zID0gX21lbnVPcHRpb25zO1xuICAgIF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlID0gX3NlbGVjdFZhbHVlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTZWxlY3QsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5zdGFydExpc3RlbmluZ0NvbXBvc2l0aW9uKCk7XG4gICAgICB0aGlzLnN0YXJ0TGlzdGVuaW5nVG9Ub3VjaCgpO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5jbG9zZU1lbnVPblNjcm9sbCAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIC8vIExpc3RlbiB0byBhbGwgc2Nyb2xsIGV2ZW50cywgYW5kIGZpbHRlciB0aGVtIG91dCBpbnNpZGUgb2YgJ29uU2Nyb2xsJ1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM4ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM4Lm9wdGlvbnMsXG4gICAgICAgICAgdmFsdWUgPSBfdGhpcyRwcm9wczgudmFsdWUsXG4gICAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzOC5tZW51SXNPcGVuLFxuICAgICAgICAgIGlucHV0VmFsdWUgPSBfdGhpcyRwcm9wczguaW5wdXRWYWx1ZTsgLy8gcmUtY2FjaGUgY3VzdG9tIGNvbXBvbmVudHNcblxuICAgICAgdGhpcy5jYWNoZUNvbXBvbmVudHMobmV4dFByb3BzLmNvbXBvbmVudHMpOyAvLyByZWJ1aWxkIHRoZSBtZW51IG9wdGlvbnNcblxuICAgICAgaWYgKG5leHRQcm9wcy52YWx1ZSAhPT0gdmFsdWUgfHwgbmV4dFByb3BzLm9wdGlvbnMgIT09IG9wdGlvbnMgfHwgbmV4dFByb3BzLm1lbnVJc09wZW4gIT09IG1lbnVJc09wZW4gfHwgbmV4dFByb3BzLmlucHV0VmFsdWUgIT09IGlucHV0VmFsdWUpIHtcbiAgICAgICAgdmFyIHNlbGVjdFZhbHVlID0gY2xlYW5WYWx1ZShuZXh0UHJvcHMudmFsdWUpO1xuICAgICAgICB2YXIgbWVudU9wdGlvbnMgPSBuZXh0UHJvcHMubWVudUlzT3BlbiA/IHRoaXMuYnVpbGRNZW51T3B0aW9ucyhuZXh0UHJvcHMsIHNlbGVjdFZhbHVlKSA6IHtcbiAgICAgICAgICByZW5kZXI6IFtdLFxuICAgICAgICAgIGZvY3VzYWJsZTogW11cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGZvY3VzZWRWYWx1ZSA9IHRoaXMuZ2V0TmV4dEZvY3VzZWRWYWx1ZShzZWxlY3RWYWx1ZSk7XG4gICAgICAgIHZhciBmb2N1c2VkT3B0aW9uID0gdGhpcy5nZXROZXh0Rm9jdXNlZE9wdGlvbihtZW51T3B0aW9ucy5mb2N1c2FibGUpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBtZW51T3B0aW9uczogbWVudU9wdGlvbnMsXG4gICAgICAgICAgc2VsZWN0VmFsdWU6IHNlbGVjdFZhbHVlLFxuICAgICAgICAgIGZvY3VzZWRPcHRpb246IGZvY3VzZWRPcHRpb24sXG4gICAgICAgICAgZm9jdXNlZFZhbHVlOiBmb2N1c2VkVmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIHNvbWUgdXBkYXRlcyBzaG91bGQgdG9nZ2xlIHRoZSBzdGF0ZSBvZiB0aGUgaW5wdXQgdmlzaWJpbGl0eVxuXG5cbiAgICAgIGlmICh0aGlzLmlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlucHV0SXNIaWRkZW46IHRoaXMuaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlXG4gICAgICAgIH0pO1xuICAgICAgICBkZWxldGUgdGhpcy5pbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM5ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM5LmlzRGlzYWJsZWQsXG4gICAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzOS5tZW51SXNPcGVuO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuXG4gICAgICBpZiAoIC8vIGVuc3VyZSBmb2N1cyBpcyByZXN0b3JlZCBjb3JyZWN0bHkgd2hlbiB0aGUgY29udHJvbCBiZWNvbWVzIGVuYWJsZWRcbiAgICAgIGlzRm9jdXNlZCAmJiAhaXNEaXNhYmxlZCAmJiBwcmV2UHJvcHMuaXNEaXNhYmxlZCB8fCAvLyBlbnN1cmUgZm9jdXMgaXMgb24gdGhlIElucHV0IHdoZW4gdGhlIG1lbnUgb3BlbnNcbiAgICAgIGlzRm9jdXNlZCAmJiBtZW51SXNPcGVuICYmICFwcmV2UHJvcHMubWVudUlzT3Blbikge1xuICAgICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIH0gLy8gc2Nyb2xsIHRoZSBmb2N1c2VkIG9wdGlvbiBpbnRvIHZpZXcgaWYgbmVjZXNzYXJ5XG5cblxuICAgICAgaWYgKHRoaXMubWVudUxpc3RSZWYgJiYgdGhpcy5mb2N1c2VkT3B0aW9uUmVmICYmIHRoaXMuc2Nyb2xsVG9Gb2N1c2VkT3B0aW9uT25VcGRhdGUpIHtcbiAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGhpcy5tZW51TGlzdFJlZiwgdGhpcy5mb2N1c2VkT3B0aW9uUmVmKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZ0NvbXBvc2l0aW9uKCk7XG4gICAgICB0aGlzLnN0b3BMaXN0ZW5pbmdUb1RvdWNoKCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25NZW51T3BlblwiLFxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENvbnN1bWVyIEhhbmRsZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uTWVudU9wZW4oKSB7XG4gICAgICB0aGlzLnByb3BzLm9uTWVudU9wZW4oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25NZW51Q2xvc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25NZW51Q2xvc2UoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNTZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMxMC5pc1NlYXJjaGFibGUsXG4gICAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzMTAuaXNNdWx0aTtcbiAgICAgIHRoaXMuYW5ub3VuY2VBcmlhTGl2ZUNvbnRleHQoe1xuICAgICAgICBldmVudDogJ2lucHV0JyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGlzU2VhcmNoYWJsZTogaXNTZWFyY2hhYmxlLFxuICAgICAgICAgIGlzTXVsdGk6IGlzTXVsdGlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgYWN0aW9uOiAnbWVudS1jbG9zZSdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9wcy5vbk1lbnVDbG9zZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbklucHV0Q2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uSW5wdXRDaGFuZ2UobmV3VmFsdWUsIGFjdGlvbk1ldGEpIHtcbiAgICAgIHRoaXMucHJvcHMub25JbnB1dENoYW5nZShuZXdWYWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgfSAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBNZXRob2RzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgfSwge1xuICAgIGtleTogXCJmb2N1c0lucHV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvY3VzSW5wdXQoKSB7XG4gICAgICBpZiAoIXRoaXMuaW5wdXRSZWYpIHJldHVybjtcbiAgICAgIHRoaXMuaW5wdXRSZWYuZm9jdXMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYmx1cklucHV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJsdXJJbnB1dCgpIHtcbiAgICAgIGlmICghdGhpcy5pbnB1dFJlZikgcmV0dXJuO1xuICAgICAgdGhpcy5pbnB1dFJlZi5ibHVyKCk7XG4gICAgfSAvLyBhbGlhc2VkIGZvciBjb25zdW1lcnNcblxuICB9LCB7XG4gICAga2V5OiBcIm9wZW5NZW51XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9wZW5NZW51KGZvY3VzT3B0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUzID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBtZW51T3B0aW9ucyA9IF90aGlzJHN0YXRlMy5tZW51T3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlMy5zZWxlY3RWYWx1ZSxcbiAgICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRzdGF0ZTMuaXNGb2N1c2VkO1xuICAgICAgdmFyIGlzTXVsdGkgPSB0aGlzLnByb3BzLmlzTXVsdGk7XG4gICAgICB2YXIgb3BlbkF0SW5kZXggPSBmb2N1c09wdGlvbiA9PT0gJ2ZpcnN0JyA/IDAgOiBtZW51T3B0aW9ucy5mb2N1c2FibGUubGVuZ3RoIC0gMTtcblxuICAgICAgaWYgKCFpc011bHRpKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZEluZGV4ID0gbWVudU9wdGlvbnMuZm9jdXNhYmxlLmluZGV4T2Yoc2VsZWN0VmFsdWVbMF0pO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICBvcGVuQXRJbmRleCA9IHNlbGVjdGVkSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gb25seSBzY3JvbGwgaWYgdGhlIG1lbnUgaXNuJ3QgYWxyZWFkeSBvcGVuXG5cblxuICAgICAgdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSA9ICEoaXNGb2N1c2VkICYmIHRoaXMubWVudUxpc3RSZWYpO1xuICAgICAgdGhpcy5pbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUgPSBmYWxzZTtcbiAgICAgIHRoaXMub25NZW51T3BlbigpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogbWVudU9wdGlvbnMuZm9jdXNhYmxlW29wZW5BdEluZGV4XVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFubm91bmNlQXJpYUxpdmVDb250ZXh0KHtcbiAgICAgICAgZXZlbnQ6ICdtZW51J1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvY3VzVmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNWYWx1ZShkaXJlY3Rpb24pIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczExID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHMxMS5pc011bHRpLFxuICAgICAgICAgIGlzU2VhcmNoYWJsZSA9IF90aGlzJHByb3BzMTEuaXNTZWFyY2hhYmxlO1xuICAgICAgdmFyIF90aGlzJHN0YXRlNCA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2VsZWN0VmFsdWUgPSBfdGhpcyRzdGF0ZTQuc2VsZWN0VmFsdWUsXG4gICAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGU0LmZvY3VzZWRWYWx1ZTsgLy8gT25seSBtdWx0aXNlbGVjdHMgc3VwcG9ydCB2YWx1ZSBmb2N1c2luZ1xuXG4gICAgICBpZiAoIWlzTXVsdGkpIHJldHVybjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkT3B0aW9uOiBudWxsXG4gICAgICB9KTtcbiAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBzZWxlY3RWYWx1ZS5pbmRleE9mKGZvY3VzZWRWYWx1ZSk7XG5cbiAgICAgIGlmICghZm9jdXNlZFZhbHVlKSB7XG4gICAgICAgIGZvY3VzZWRJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLmFubm91bmNlQXJpYUxpdmVDb250ZXh0KHtcbiAgICAgICAgICBldmVudDogJ3ZhbHVlJ1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxhc3RJbmRleCA9IHNlbGVjdFZhbHVlLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbmV4dEZvY3VzID0gLTE7XG4gICAgICBpZiAoIXNlbGVjdFZhbHVlLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlICdwcmV2aW91cyc6XG4gICAgICAgICAgaWYgKGZvY3VzZWRJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gZG9uJ3QgY3ljbGUgZnJvbSB0aGUgc3RhcnQgdG8gdGhlIGVuZFxuICAgICAgICAgICAgbmV4dEZvY3VzID0gMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZvY3VzZWRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIGlmIG5vdGhpbmcgaXMgZm9jdXNlZCwgZm9jdXMgdGhlIGxhc3QgdmFsdWUgZmlyc3RcbiAgICAgICAgICAgIG5leHRGb2N1cyA9IGxhc3RJbmRleDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV4dEZvY3VzID0gZm9jdXNlZEluZGV4IC0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID4gLTEgJiYgZm9jdXNlZEluZGV4IDwgbGFzdEluZGV4KSB7XG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggKyAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dEZvY3VzID09PSAtMSkge1xuICAgICAgICB0aGlzLmFubm91bmNlQXJpYUxpdmVDb250ZXh0KHtcbiAgICAgICAgICBldmVudDogJ2lucHV0JyxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBpc1NlYXJjaGFibGU6IGlzU2VhcmNoYWJsZSxcbiAgICAgICAgICAgIGlzTXVsdGk6IGlzTXVsdGlcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaW5wdXRJc0hpZGRlbjogbmV4dEZvY3VzICE9PSAtMSxcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBzZWxlY3RWYWx1ZVtuZXh0Rm9jdXNdXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9jdXNPcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNPcHRpb24oKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnZmlyc3QnO1xuICAgICAgdmFyIHBhZ2VTaXplID0gdGhpcy5wcm9wcy5wYWdlU2l6ZTtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGZvY3VzZWRPcHRpb24gPSBfdGhpcyRzdGF0ZTUuZm9jdXNlZE9wdGlvbixcbiAgICAgICAgICBtZW51T3B0aW9ucyA9IF90aGlzJHN0YXRlNS5tZW51T3B0aW9ucztcbiAgICAgIHZhciBvcHRpb25zID0gbWVudU9wdGlvbnMuZm9jdXNhYmxlO1xuICAgICAgaWYgKCFvcHRpb25zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgdmFyIG5leHRGb2N1cyA9IDA7IC8vIGhhbmRsZXMgJ2ZpcnN0J1xuXG4gICAgICB2YXIgZm9jdXNlZEluZGV4ID0gb3B0aW9ucy5pbmRleE9mKGZvY3VzZWRPcHRpb24pO1xuXG4gICAgICBpZiAoIWZvY3VzZWRPcHRpb24pIHtcbiAgICAgICAgZm9jdXNlZEluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuYW5ub3VuY2VBcmlhTGl2ZUNvbnRleHQoe1xuICAgICAgICAgIGV2ZW50OiAnbWVudSdcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHtcbiAgICAgICAgbmV4dEZvY3VzID0gZm9jdXNlZEluZGV4ID4gMCA/IGZvY3VzZWRJbmRleCAtIDEgOiBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2Rvd24nKSB7XG4gICAgICAgIG5leHRGb2N1cyA9IChmb2N1c2VkSW5kZXggKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdwYWdldXAnKSB7XG4gICAgICAgIG5leHRGb2N1cyA9IGZvY3VzZWRJbmRleCAtIHBhZ2VTaXplO1xuICAgICAgICBpZiAobmV4dEZvY3VzIDwgMCkgbmV4dEZvY3VzID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncGFnZWRvd24nKSB7XG4gICAgICAgIG5leHRGb2N1cyA9IGZvY3VzZWRJbmRleCArIHBhZ2VTaXplO1xuICAgICAgICBpZiAobmV4dEZvY3VzID4gb3B0aW9ucy5sZW5ndGggLSAxKSBuZXh0Rm9jdXMgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xhc3QnKSB7XG4gICAgICAgIG5leHRGb2N1cyA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSA9IHRydWU7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogb3B0aW9uc1tuZXh0Rm9jdXNdLFxuICAgICAgICBmb2N1c2VkVmFsdWU6IG51bGxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hbm5vdW5jZUFyaWFMaXZlQ29udGV4dCh7XG4gICAgICAgIGV2ZW50OiAnbWVudScsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBpc0Rpc2FibGVkOiBpc09wdGlvbkRpc2FibGVkKG9wdGlvbnNbbmV4dEZvY3VzXSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFRoZW1lXCIsXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gR2V0dGVyc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUaGVtZSgpIHtcbiAgICAgIC8vIFVzZSB0aGUgZGVmYXVsdCB0aGVtZSBpZiB0aGVyZSBhcmUgbm8gY3VzdG9taXphdGlvbnMuXG4gICAgICBpZiAoIXRoaXMucHJvcHMudGhlbWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRUaGVtZTtcbiAgICAgIH0gLy8gSWYgdGhlIHRoZW1lIHByb3AgaXMgYSBmdW5jdGlvbiwgYXNzdW1lIHRoZSBmdW5jdGlvblxuICAgICAgLy8ga25vd3MgaG93IHRvIG1lcmdlIHRoZSBwYXNzZWQtaW4gZGVmYXVsdCB0aGVtZSB3aXRoXG4gICAgICAvLyBpdHMgb3duIG1vZGlmaWNhdGlvbnMuXG5cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gICAgICB9IC8vIE90aGVyd2lzZSwgaWYgYSBwbGFpbiB0aGVtZSBvYmplY3Qgd2FzIHBhc3NlZCBpbixcbiAgICAgIC8vIG92ZXJsYXkgaXQgd2l0aCB0aGUgZGVmYXVsdCB0aGVtZS5cblxuXG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7fSwgZGVmYXVsdFRoZW1lLCB0aGlzLnByb3BzLnRoZW1lKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Q29tbW9uUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29tbW9uUHJvcHMoKSB7XG4gICAgICB2YXIgY2xlYXJWYWx1ZSA9IHRoaXMuY2xlYXJWYWx1ZSxcbiAgICAgICAgICBnZXRTdHlsZXMgPSB0aGlzLmdldFN0eWxlcyxcbiAgICAgICAgICBzZXRWYWx1ZSA9IHRoaXMuc2V0VmFsdWUsXG4gICAgICAgICAgc2VsZWN0T3B0aW9uID0gdGhpcy5zZWxlY3RPcHRpb24sXG4gICAgICAgICAgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgdmFyIGNsYXNzTmFtZVByZWZpeCA9IHByb3BzLmNsYXNzTmFtZVByZWZpeCxcbiAgICAgICAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aSxcbiAgICAgICAgICBpc1J0bCA9IHByb3BzLmlzUnRsLFxuICAgICAgICAgIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zO1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIHZhciBoYXNWYWx1ZSA9IHRoaXMuaGFzVmFsdWUoKTtcblxuICAgICAgdmFyIGdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RWYWx1ZTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBjeCA9IGNsYXNzTmFtZXMuYmluZChudWxsLCBjbGFzc05hbWVQcmVmaXgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3g6IGN4LFxuICAgICAgICBjbGVhclZhbHVlOiBjbGVhclZhbHVlLFxuICAgICAgICBnZXRTdHlsZXM6IGdldFN0eWxlcyxcbiAgICAgICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgICAgICBoYXNWYWx1ZTogaGFzVmFsdWUsXG4gICAgICAgIGlzTXVsdGk6IGlzTXVsdGksXG4gICAgICAgIGlzUnRsOiBpc1J0bCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgc2VsZWN0T3B0aW9uOiBzZWxlY3RPcHRpb24sXG4gICAgICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICAgICAgc2VsZWN0UHJvcHM6IHByb3BzLFxuICAgICAgICB0aGVtZTogdGhpcy5nZXRUaGVtZSgpXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXROZXh0Rm9jdXNlZFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE5leHRGb2N1c2VkVmFsdWUobmV4dFNlbGVjdFZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5jbGVhckZvY3VzVmFsdWVPblVwZGF0ZSkge1xuICAgICAgICB0aGlzLmNsZWFyRm9jdXNWYWx1ZU9uVXBkYXRlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3RoaXMkc3RhdGU2ID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBmb2N1c2VkVmFsdWUgPSBfdGhpcyRzdGF0ZTYuZm9jdXNlZFZhbHVlLFxuICAgICAgICAgIGxhc3RTZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlNi5zZWxlY3RWYWx1ZTtcbiAgICAgIHZhciBsYXN0Rm9jdXNlZEluZGV4ID0gbGFzdFNlbGVjdFZhbHVlLmluZGV4T2YoZm9jdXNlZFZhbHVlKTtcblxuICAgICAgaWYgKGxhc3RGb2N1c2VkSW5kZXggPiAtMSkge1xuICAgICAgICB2YXIgbmV4dEZvY3VzZWRJbmRleCA9IG5leHRTZWxlY3RWYWx1ZS5pbmRleE9mKGZvY3VzZWRWYWx1ZSk7XG5cbiAgICAgICAgaWYgKG5leHRGb2N1c2VkSW5kZXggPiAtMSkge1xuICAgICAgICAgIC8vIHRoZSBmb2N1c2VkIHZhbHVlIGlzIHN0aWxsIGluIHRoZSBzZWxlY3RWYWx1ZSwgcmV0dXJuIGl0XG4gICAgICAgICAgcmV0dXJuIGZvY3VzZWRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXN0Rm9jdXNlZEluZGV4IDwgbmV4dFNlbGVjdFZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIC8vIHRoZSBmb2N1c2VkVmFsdWUgaXMgbm90IHByZXNlbnQgaW4gdGhlIG5leHQgc2VsZWN0VmFsdWUgYXJyYXkgYnlcbiAgICAgICAgICAvLyByZWZlcmVuY2UsIHNvIHJldHVybiB0aGUgbmV3IHZhbHVlIGF0IHRoZSBzYW1lIGluZGV4XG4gICAgICAgICAgcmV0dXJuIG5leHRTZWxlY3RWYWx1ZVtsYXN0Rm9jdXNlZEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0TmV4dEZvY3VzZWRPcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TmV4dEZvY3VzZWRPcHRpb24ob3B0aW9ucykge1xuICAgICAgdmFyIGxhc3RGb2N1c2VkT3B0aW9uID0gdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uO1xuICAgICAgcmV0dXJuIGxhc3RGb2N1c2VkT3B0aW9uICYmIG9wdGlvbnMuaW5kZXhPZihsYXN0Rm9jdXNlZE9wdGlvbikgPiAtMSA/IGxhc3RGb2N1c2VkT3B0aW9uIDogb3B0aW9uc1swXTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzVmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzVmFsdWUoKSB7XG4gICAgICB2YXIgc2VsZWN0VmFsdWUgPSB0aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgICAgcmV0dXJuIHNlbGVjdFZhbHVlLmxlbmd0aCA+IDA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc09wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuc3RhdGUubWVudU9wdGlvbnMucmVuZGVyLmxlbmd0aDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY291bnRPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvdW50T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLm1lbnVPcHRpb25zLmZvY3VzYWJsZS5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzQ2xlYXJhYmxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzQ2xlYXJhYmxlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMTIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzQ2xlYXJhYmxlID0gX3RoaXMkcHJvcHMxMi5pc0NsZWFyYWJsZSxcbiAgICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHMxMi5pc011bHRpOyAvLyBzaW5nbGUgc2VsZWN0LCBieSBkZWZhdWx0LCBJUyBOT1QgY2xlYXJhYmxlXG4gICAgICAvLyBtdWx0aSBzZWxlY3QsIGJ5IGRlZmF1bHQsIElTIGNsZWFyYWJsZVxuXG4gICAgICBpZiAoaXNDbGVhcmFibGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGlzTXVsdGk7XG4gICAgICByZXR1cm4gaXNDbGVhcmFibGU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzT3B0aW9uRGlzYWJsZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNPcHRpb25EaXNhYmxlZChvcHRpb24sIHNlbGVjdFZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHRoaXMucHJvcHMuaXNPcHRpb25EaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMucHJvcHMuaXNPcHRpb25EaXNhYmxlZChvcHRpb24sIHNlbGVjdFZhbHVlKSA6IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc09wdGlvblNlbGVjdGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmIChzZWxlY3RWYWx1ZS5pbmRleE9mKG9wdGlvbikgPiAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5pc09wdGlvblNlbGVjdGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjYW5kaWRhdGUgPSB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbik7XG4gICAgICByZXR1cm4gc2VsZWN0VmFsdWUuc29tZShmdW5jdGlvbiAoaSkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLmdldE9wdGlvblZhbHVlKGkpID09PSBjYW5kaWRhdGU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmlsdGVyT3B0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbHRlck9wdGlvbihvcHRpb24sIGlucHV0VmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmZpbHRlck9wdGlvbiA/IHRoaXMucHJvcHMuZmlsdGVyT3B0aW9uKG9wdGlvbiwgaW5wdXRWYWx1ZSkgOiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb3JtYXRPcHRpb25MYWJlbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JtYXRPcHRpb25MYWJlbChkYXRhLCBjb250ZXh0KSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMuZm9ybWF0T3B0aW9uTGFiZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGlucHV0VmFsdWUgPSB0aGlzLnByb3BzLmlucHV0VmFsdWU7XG4gICAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IHRoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1hdE9wdGlvbkxhYmVsKGRhdGEsIHtcbiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgIGlucHV0VmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICAgICAgc2VsZWN0VmFsdWU6IHNlbGVjdFZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uTGFiZWwoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvcm1hdEdyb3VwTGFiZWxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9ybWF0R3JvdXBMYWJlbChkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5mb3JtYXRHcm91cExhYmVsKGRhdGEpO1xuICAgIH0gLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTW91c2UgSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB9LCB7XG4gICAga2V5OiBcInN0YXJ0TGlzdGVuaW5nQ29tcG9zaXRpb25cIixcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBDb21wb3NpdGlvbiBIYW5kbGVyc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydExpc3RlbmluZ0NvbXBvc2l0aW9uKCkge1xuICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25zdGFydCcsIHRoaXMub25Db21wb3NpdGlvblN0YXJ0LCBmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgdGhpcy5vbkNvbXBvc2l0aW9uRW5kLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0b3BMaXN0ZW5pbmdDb21wb3NpdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdG9wTGlzdGVuaW5nQ29tcG9zaXRpb24oKSB7XG4gICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0JywgdGhpcy5vbkNvbXBvc2l0aW9uU3RhcnQpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbmVuZCcsIHRoaXMub25Db21wb3NpdGlvbkVuZCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0YXJ0TGlzdGVuaW5nVG9Ub3VjaFwiLFxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFRvdWNoIEhhbmRsZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nVG9Ub3VjaCgpIHtcbiAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCBmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0b3BMaXN0ZW5pbmdUb1RvdWNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BMaXN0ZW5pbmdUb1RvdWNoKCkge1xuICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0KTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYnVpbGRNZW51T3B0aW9uc1wiLFxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE1lbnUgT3B0aW9uc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZE1lbnVPcHRpb25zKHByb3BzLCBzZWxlY3RWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBfcHJvcHMkaW5wdXRWYWx1ZSA9IHByb3BzLmlucHV0VmFsdWUsXG4gICAgICAgICAgaW5wdXRWYWx1ZSA9IF9wcm9wcyRpbnB1dFZhbHVlID09PSB2b2lkIDAgPyAnJyA6IF9wcm9wcyRpbnB1dFZhbHVlLFxuICAgICAgICAgIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zO1xuXG4gICAgICB2YXIgdG9PcHRpb24gPSBmdW5jdGlvbiB0b09wdGlvbihvcHRpb24sIGlkKSB7XG4gICAgICAgIHZhciBpc0Rpc2FibGVkID0gX3RoaXMzLmlzT3B0aW9uRGlzYWJsZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSk7XG5cbiAgICAgICAgdmFyIGlzU2VsZWN0ZWQgPSBfdGhpczMuaXNPcHRpb25TZWxlY3RlZChvcHRpb24sIHNlbGVjdFZhbHVlKTtcblxuICAgICAgICB2YXIgbGFiZWwgPSBfdGhpczMuZ2V0T3B0aW9uTGFiZWwob3B0aW9uKTtcblxuICAgICAgICB2YXIgdmFsdWUgPSBfdGhpczMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uKTtcblxuICAgICAgICBpZiAoX3RoaXMzLnNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMoKSAmJiBpc1NlbGVjdGVkIHx8ICFfdGhpczMuZmlsdGVyT3B0aW9uKHtcbiAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIGRhdGE6IG9wdGlvblxuICAgICAgICB9LCBpbnB1dFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvbkhvdmVyID0gaXNEaXNhYmxlZCA/IHVuZGVmaW5lZCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMzLm9uT3B0aW9uSG92ZXIob3B0aW9uKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uU2VsZWN0ID0gaXNEaXNhYmxlZCA/IHVuZGVmaW5lZCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMzLnNlbGVjdE9wdGlvbihvcHRpb24pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb3B0aW9uSWQgPSBcIlwiLmNvbmNhdChfdGhpczMuZ2V0RWxlbWVudElkKCdvcHRpb24nKSwgXCItXCIpLmNvbmNhdChpZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgICAgaWQ6IG9wdGlvbklkLFxuICAgICAgICAgICAgb25DbGljazogb25TZWxlY3QsXG4gICAgICAgICAgICBvbk1vdXNlTW92ZTogb25Ib3ZlcixcbiAgICAgICAgICAgIG9uTW91c2VPdmVyOiBvbkhvdmVyLFxuICAgICAgICAgICAgdGFiSW5kZXg6IC0xXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkYXRhOiBvcHRpb24sXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkLFxuICAgICAgICAgIGtleTogb3B0aW9uSWQsXG4gICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgIHR5cGU6ICdvcHRpb24nLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG9wdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGl0ZW0sIGl0ZW1JbmRleCkge1xuICAgICAgICBpZiAoaXRlbS5vcHRpb25zKSB7XG4gICAgICAgICAgLy8gVE9ETyBuZWVkcyBhIHRpZGllciBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgIGlmICghX3RoaXMzLmhhc0dyb3VwcykgX3RoaXMzLmhhc0dyb3VwcyA9IHRydWU7XG4gICAgICAgICAgdmFyIGl0ZW1zID0gaXRlbS5vcHRpb25zO1xuICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGl0ZW1zLm1hcChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgICAgIHZhciBvcHRpb24gPSB0b09wdGlvbihjaGlsZCwgXCJcIi5jb25jYXQoaXRlbUluZGV4LCBcIi1cIikuY29uY2F0KGkpKTtcbiAgICAgICAgICAgIGlmIChvcHRpb24pIGFjYy5mb2N1c2FibGUucHVzaChjaGlsZCk7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBncm91cElkID0gXCJcIi5jb25jYXQoX3RoaXMzLmdldEVsZW1lbnRJZCgnZ3JvdXAnKSwgXCItXCIpLmNvbmNhdChpdGVtSW5kZXgpO1xuICAgICAgICAgICAgYWNjLnJlbmRlci5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogJ2dyb3VwJyxcbiAgICAgICAgICAgICAga2V5OiBncm91cElkLFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgICBvcHRpb25zOiBjaGlsZHJlblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBvcHRpb24gPSB0b09wdGlvbihpdGVtLCBcIlwiLmNvbmNhdChpdGVtSW5kZXgpKTtcblxuICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgIGFjYy5yZW5kZXIucHVzaChvcHRpb24pO1xuICAgICAgICAgICAgYWNjLmZvY3VzYWJsZS5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7XG4gICAgICAgIHJlbmRlcjogW10sXG4gICAgICAgIGZvY3VzYWJsZTogW11cbiAgICAgIH0pO1xuICAgIH0gLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gUmVuZGVyZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgfSwge1xuICAgIGtleTogXCJjb25zdHJ1Y3RBcmlhTGl2ZU1lc3NhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29uc3RydWN0QXJpYUxpdmVNZXNzYWdlKCkge1xuICAgICAgdmFyIF90aGlzJHN0YXRlNyA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgYXJpYUxpdmVDb250ZXh0ID0gX3RoaXMkc3RhdGU3LmFyaWFMaXZlQ29udGV4dCxcbiAgICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlNy5zZWxlY3RWYWx1ZSxcbiAgICAgICAgICBmb2N1c2VkVmFsdWUgPSBfdGhpcyRzdGF0ZTcuZm9jdXNlZFZhbHVlLFxuICAgICAgICAgIGZvY3VzZWRPcHRpb24gPSBfdGhpcyRzdGF0ZTcuZm9jdXNlZE9wdGlvbjtcbiAgICAgIHZhciBfdGhpcyRwcm9wczEzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMxMy5vcHRpb25zLFxuICAgICAgICAgIG1lbnVJc09wZW4gPSBfdGhpcyRwcm9wczEzLm1lbnVJc09wZW4sXG4gICAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzMTMuaW5wdXRWYWx1ZSxcbiAgICAgICAgICBzY3JlZW5SZWFkZXJTdGF0dXMgPSBfdGhpcyRwcm9wczEzLnNjcmVlblJlYWRlclN0YXR1czsgLy8gQW4gYXJpYSBsaXZlIG1lc3NhZ2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50bHkgZm9jdXNlZCB2YWx1ZSBpbiB0aGUgc2VsZWN0LlxuXG4gICAgICB2YXIgZm9jdXNlZFZhbHVlTXNnID0gZm9jdXNlZFZhbHVlID8gdmFsdWVGb2N1c0FyaWFNZXNzYWdlKHtcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBmb2N1c2VkVmFsdWUsXG4gICAgICAgIGdldE9wdGlvbkxhYmVsOiB0aGlzLmdldE9wdGlvbkxhYmVsLFxuICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWVcbiAgICAgIH0pIDogJyc7IC8vIEFuIGFyaWEgbGl2ZSBtZXNzYWdlIHJlcHJlc2VudGluZyB0aGUgY3VycmVudGx5IGZvY3VzZWQgb3B0aW9uIGluIHRoZSBzZWxlY3QuXG5cbiAgICAgIHZhciBmb2N1c2VkT3B0aW9uTXNnID0gZm9jdXNlZE9wdGlvbiAmJiBtZW51SXNPcGVuID8gb3B0aW9uRm9jdXNBcmlhTWVzc2FnZSh7XG4gICAgICAgIGZvY3VzZWRPcHRpb246IGZvY3VzZWRPcHRpb24sXG4gICAgICAgIGdldE9wdGlvbkxhYmVsOiB0aGlzLmdldE9wdGlvbkxhYmVsLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICB9KSA6ICcnOyAvLyBBbiBhcmlhIGxpdmUgbWVzc2FnZSByZXByZXNlbnRpbmcgdGhlIHNldCBvZiBmb2N1c2FibGUgcmVzdWx0cyBhbmQgY3VycmVudCBzZWFyY2h0ZXJtL2lucHV0dmFsdWUuXG5cbiAgICAgIHZhciByZXN1bHRzTXNnID0gcmVzdWx0c0FyaWFNZXNzYWdlKHtcbiAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgICAgc2NyZWVuUmVhZGVyTWVzc2FnZTogc2NyZWVuUmVhZGVyU3RhdHVzKHtcbiAgICAgICAgICBjb3VudDogdGhpcy5jb3VudE9wdGlvbnMoKVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQoZm9jdXNlZFZhbHVlTXNnLCBcIiBcIikuY29uY2F0KGZvY3VzZWRPcHRpb25Nc2csIFwiIFwiKS5jb25jYXQocmVzdWx0c01zZywgXCIgXCIpLmNvbmNhdChhcmlhTGl2ZUNvbnRleHQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJbnB1dFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJbnB1dCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczE0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMxNC5pc0Rpc2FibGVkLFxuICAgICAgICAgIGlzU2VhcmNoYWJsZSA9IF90aGlzJHByb3BzMTQuaXNTZWFyY2hhYmxlLFxuICAgICAgICAgIGlucHV0SWQgPSBfdGhpcyRwcm9wczE0LmlucHV0SWQsXG4gICAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzMTQuaW5wdXRWYWx1ZSxcbiAgICAgICAgICB0YWJJbmRleCA9IF90aGlzJHByb3BzMTQudGFiSW5kZXg7XG4gICAgICB2YXIgSW5wdXQgPSB0aGlzLmNvbXBvbmVudHMuSW5wdXQ7XG4gICAgICB2YXIgaW5wdXRJc0hpZGRlbiA9IHRoaXMuc3RhdGUuaW5wdXRJc0hpZGRlbjtcbiAgICAgIHZhciBpZCA9IGlucHV0SWQgfHwgdGhpcy5nZXRFbGVtZW50SWQoJ2lucHV0Jyk7XG5cbiAgICAgIGlmICghaXNTZWFyY2hhYmxlKSB7XG4gICAgICAgIC8vIHVzZSBhIGR1bW15IGlucHV0IHRvIG1haW50YWluIGZvY3VzL2JsdXIgZnVuY3Rpb25hbGl0eVxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChEdW1teUlucHV0LCB7XG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIGlubmVyUmVmOiB0aGlzLmdldElucHV0UmVmLFxuICAgICAgICAgIG9uQmx1cjogdGhpcy5vbklucHV0Qmx1cixcbiAgICAgICAgICBvbkNoYW5nZTogbm9vcCxcbiAgICAgICAgICBvbkZvY3VzOiB0aGlzLm9uSW5wdXRGb2N1cyxcbiAgICAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICAgICAgdmFsdWU6IFwiXCJcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIGFyaWEgYXR0cmlidXRlcyBtYWtlcyB0aGUgSlNYIFwibm9pc3lcIiwgc2VwYXJhdGVkIGZvciBjbGFyaXR5XG5cblxuICAgICAgdmFyIGFyaWFBdHRyaWJ1dGVzID0ge1xuICAgICAgICAnYXJpYS1hdXRvY29tcGxldGUnOiAnbGlzdCcsXG4gICAgICAgICdhcmlhLWxhYmVsJzogdGhpcy5wcm9wc1snYXJpYS1sYWJlbCddLFxuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogdGhpcy5wcm9wc1snYXJpYS1sYWJlbGxlZGJ5J11cbiAgICAgIH07XG4gICAgICB2YXIgX3RoaXMkY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzLFxuICAgICAgICAgIGN4ID0gX3RoaXMkY29tbW9uUHJvcHMuY3gsXG4gICAgICAgICAgdGhlbWUgPSBfdGhpcyRjb21tb25Qcm9wcy50aGVtZSxcbiAgICAgICAgICBzZWxlY3RQcm9wcyA9IF90aGlzJGNvbW1vblByb3BzLnNlbGVjdFByb3BzO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5wdXQsIF9leHRlbmRzKHtcbiAgICAgICAgYXV0b0NhcGl0YWxpemU6IFwibm9uZVwiLFxuICAgICAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgICAgIGF1dG9Db3JyZWN0OiBcIm9mZlwiLFxuICAgICAgICBjeDogY3gsXG4gICAgICAgIGdldFN0eWxlczogdGhpcy5nZXRTdHlsZXMsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgaW5uZXJSZWY6IHRoaXMuZ2V0SW5wdXRSZWYsXG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGlzSGlkZGVuOiBpbnB1dElzSGlkZGVuLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25JbnB1dEJsdXIsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uSW5wdXRGb2N1cyxcbiAgICAgICAgc2VsZWN0UHJvcHM6IHNlbGVjdFByb3BzLFxuICAgICAgICBzcGVsbENoZWNrOiBcImZhbHNlXCIsXG4gICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdmFsdWU6IGlucHV0VmFsdWVcbiAgICAgIH0sIGFyaWFBdHRyaWJ1dGVzKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclBsYWNlaG9sZGVyT3JWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJQbGFjZWhvbGRlck9yVmFsdWUoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJGNvbXBvbmVudHMgPSB0aGlzLmNvbXBvbmVudHMsXG4gICAgICAgICAgTXVsdGlWYWx1ZSA9IF90aGlzJGNvbXBvbmVudHMuTXVsdGlWYWx1ZSxcbiAgICAgICAgICBNdWx0aVZhbHVlQ29udGFpbmVyID0gX3RoaXMkY29tcG9uZW50cy5NdWx0aVZhbHVlQ29udGFpbmVyLFxuICAgICAgICAgIE11bHRpVmFsdWVMYWJlbCA9IF90aGlzJGNvbXBvbmVudHMuTXVsdGlWYWx1ZUxhYmVsLFxuICAgICAgICAgIE11bHRpVmFsdWVSZW1vdmUgPSBfdGhpcyRjb21wb25lbnRzLk11bHRpVmFsdWVSZW1vdmUsXG4gICAgICAgICAgU2luZ2xlVmFsdWUgPSBfdGhpcyRjb21wb25lbnRzLlNpbmdsZVZhbHVlLFxuICAgICAgICAgIFBsYWNlaG9sZGVyID0gX3RoaXMkY29tcG9uZW50cy5QbGFjZWhvbGRlcjtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxNSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29udHJvbFNob3VsZFJlbmRlclZhbHVlID0gX3RoaXMkcHJvcHMxNS5jb250cm9sU2hvdWxkUmVuZGVyVmFsdWUsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMTUuaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHMxNS5pc011bHRpLFxuICAgICAgICAgIGlucHV0VmFsdWUgPSBfdGhpcyRwcm9wczE1LmlucHV0VmFsdWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczE1LnBsYWNlaG9sZGVyO1xuICAgICAgdmFyIF90aGlzJHN0YXRlOCA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2VsZWN0VmFsdWUgPSBfdGhpcyRzdGF0ZTguc2VsZWN0VmFsdWUsXG4gICAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGU4LmZvY3VzZWRWYWx1ZSxcbiAgICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRzdGF0ZTguaXNGb2N1c2VkO1xuXG4gICAgICBpZiAoIXRoaXMuaGFzVmFsdWUoKSB8fCAhY29udHJvbFNob3VsZFJlbmRlclZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dFZhbHVlID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGxhY2Vob2xkZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgIGtleTogXCJwbGFjZWhvbGRlclwiLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgICAgfSksIHBsYWNlaG9sZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgdmFyIHNlbGVjdFZhbHVlcyA9IHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgICAgdmFyIGlzT3B0aW9uRm9jdXNlZCA9IG9wdCA9PT0gZm9jdXNlZFZhbHVlO1xuICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE11bHRpVmFsdWUsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICBDb250YWluZXI6IE11bHRpVmFsdWVDb250YWluZXIsXG4gICAgICAgICAgICAgIExhYmVsOiBNdWx0aVZhbHVlTGFiZWwsXG4gICAgICAgICAgICAgIFJlbW92ZTogTXVsdGlWYWx1ZVJlbW92ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzRm9jdXNlZDogaXNPcHRpb25Gb2N1c2VkLFxuICAgICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIGtleTogX3RoaXM0LmdldE9wdGlvblZhbHVlKG9wdCksXG4gICAgICAgICAgICByZW1vdmVQcm9wczoge1xuICAgICAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczQucmVtb3ZlVmFsdWUob3B0KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25Ub3VjaEVuZDogZnVuY3Rpb24gb25Ub3VjaEVuZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM0LnJlbW92ZVZhbHVlKG9wdCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uTW91c2VEb3duOiBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRhOiBvcHRcbiAgICAgICAgICB9KSwgX3RoaXM0LmZvcm1hdE9wdGlvbkxhYmVsKG9wdCwgJ3ZhbHVlJykpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdFZhbHVlcztcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaW5nbGVWYWx1ZSA9IHNlbGVjdFZhbHVlWzBdO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2luZ2xlVmFsdWUsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBkYXRhOiBzaW5nbGVWYWx1ZSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgfSksIHRoaXMuZm9ybWF0T3B0aW9uTGFiZWwoc2luZ2xlVmFsdWUsICd2YWx1ZScpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyQ2xlYXJJbmRpY2F0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ2xlYXJJbmRpY2F0b3IoKSB7XG4gICAgICB2YXIgQ2xlYXJJbmRpY2F0b3IgPSB0aGlzLmNvbXBvbmVudHMuQ2xlYXJJbmRpY2F0b3I7XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczE2LmlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMxNi5pc0xvYWRpbmc7XG4gICAgICB2YXIgaXNGb2N1c2VkID0gdGhpcy5zdGF0ZS5pc0ZvY3VzZWQ7XG5cbiAgICAgIGlmICghdGhpcy5pc0NsZWFyYWJsZSgpIHx8ICFDbGVhckluZGljYXRvciB8fCBpc0Rpc2FibGVkIHx8ICF0aGlzLmhhc1ZhbHVlKCkgfHwgaXNMb2FkaW5nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5uZXJQcm9wcyA9IHtcbiAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25DbGVhckluZGljYXRvck1vdXNlRG93bixcbiAgICAgICAgb25Ub3VjaEVuZDogdGhpcy5vbkNsZWFySW5kaWNhdG9yVG91Y2hFbmQsXG4gICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENsZWFySW5kaWNhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTG9hZGluZ0luZGljYXRvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJMb2FkaW5nSW5kaWNhdG9yKCkge1xuICAgICAgdmFyIExvYWRpbmdJbmRpY2F0b3IgPSB0aGlzLmNvbXBvbmVudHMuTG9hZGluZ0luZGljYXRvcjtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMTcuaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczE3LmlzTG9hZGluZztcbiAgICAgIHZhciBpc0ZvY3VzZWQgPSB0aGlzLnN0YXRlLmlzRm9jdXNlZDtcbiAgICAgIGlmICghTG9hZGluZ0luZGljYXRvciB8fCAhaXNMb2FkaW5nKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBpbm5lclByb3BzID0ge1xuICAgICAgICAnYXJpYS1oaWRkZW4nOiAndHJ1ZSdcbiAgICAgIH07XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2FkaW5nSW5kaWNhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySW5kaWNhdG9yU2VwYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckluZGljYXRvclNlcGFyYXRvcigpIHtcbiAgICAgIHZhciBfdGhpcyRjb21wb25lbnRzMiA9IHRoaXMuY29tcG9uZW50cyxcbiAgICAgICAgICBEcm9wZG93bkluZGljYXRvciA9IF90aGlzJGNvbXBvbmVudHMyLkRyb3Bkb3duSW5kaWNhdG9yLFxuICAgICAgICAgIEluZGljYXRvclNlcGFyYXRvciA9IF90aGlzJGNvbXBvbmVudHMyLkluZGljYXRvclNlcGFyYXRvcjsgLy8gc2VwYXJhdG9yIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IHRoZSBkcm9wZG93biBpbmRpY2F0b3JcblxuICAgICAgaWYgKCFEcm9wZG93bkluZGljYXRvciB8fCAhSW5kaWNhdG9yU2VwYXJhdG9yKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMucHJvcHMuaXNEaXNhYmxlZDtcbiAgICAgIHZhciBpc0ZvY3VzZWQgPSB0aGlzLnN0YXRlLmlzRm9jdXNlZDtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEluZGljYXRvclNlcGFyYXRvciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRyb3Bkb3duSW5kaWNhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckRyb3Bkb3duSW5kaWNhdG9yKCkge1xuICAgICAgdmFyIERyb3Bkb3duSW5kaWNhdG9yID0gdGhpcy5jb21wb25lbnRzLkRyb3Bkb3duSW5kaWNhdG9yO1xuICAgICAgaWYgKCFEcm9wZG93bkluZGljYXRvcikgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzO1xuICAgICAgdmFyIGlzRGlzYWJsZWQgPSB0aGlzLnByb3BzLmlzRGlzYWJsZWQ7XG4gICAgICB2YXIgaXNGb2N1c2VkID0gdGhpcy5zdGF0ZS5pc0ZvY3VzZWQ7XG4gICAgICB2YXIgaW5uZXJQcm9wcyA9IHtcbiAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25Ecm9wZG93bkluZGljYXRvck1vdXNlRG93bixcbiAgICAgICAgb25Ub3VjaEVuZDogdGhpcy5vbkRyb3Bkb3duSW5kaWNhdG9yVG91Y2hFbmQsXG4gICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KERyb3Bkb3duSW5kaWNhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTWVudVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJNZW51KCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRjb21wb25lbnRzMyA9IHRoaXMuY29tcG9uZW50cyxcbiAgICAgICAgICBHcm91cCA9IF90aGlzJGNvbXBvbmVudHMzLkdyb3VwLFxuICAgICAgICAgIEdyb3VwSGVhZGluZyA9IF90aGlzJGNvbXBvbmVudHMzLkdyb3VwSGVhZGluZyxcbiAgICAgICAgICBNZW51ID0gX3RoaXMkY29tcG9uZW50czMuTWVudSxcbiAgICAgICAgICBNZW51TGlzdCA9IF90aGlzJGNvbXBvbmVudHMzLk1lbnVMaXN0LFxuICAgICAgICAgIE1lbnVQb3J0YWwgPSBfdGhpcyRjb21wb25lbnRzMy5NZW51UG9ydGFsLFxuICAgICAgICAgIExvYWRpbmdNZXNzYWdlID0gX3RoaXMkY29tcG9uZW50czMuTG9hZGluZ01lc3NhZ2UsXG4gICAgICAgICAgTm9PcHRpb25zTWVzc2FnZSA9IF90aGlzJGNvbXBvbmVudHMzLk5vT3B0aW9uc01lc3NhZ2UsXG4gICAgICAgICAgT3B0aW9uID0gX3RoaXMkY29tcG9uZW50czMuT3B0aW9uO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTkgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGZvY3VzZWRPcHRpb24gPSBfdGhpcyRzdGF0ZTkuZm9jdXNlZE9wdGlvbixcbiAgICAgICAgICBtZW51T3B0aW9ucyA9IF90aGlzJHN0YXRlOS5tZW51T3B0aW9ucztcbiAgICAgIHZhciBfdGhpcyRwcm9wczE4ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjYXB0dXJlTWVudVNjcm9sbCA9IF90aGlzJHByb3BzMTguY2FwdHVyZU1lbnVTY3JvbGwsXG4gICAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzMTguaW5wdXRWYWx1ZSxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczE4LmlzTG9hZGluZyxcbiAgICAgICAgICBsb2FkaW5nTWVzc2FnZSA9IF90aGlzJHByb3BzMTgubG9hZGluZ01lc3NhZ2UsXG4gICAgICAgICAgbWluTWVudUhlaWdodCA9IF90aGlzJHByb3BzMTgubWluTWVudUhlaWdodCxcbiAgICAgICAgICBtYXhNZW51SGVpZ2h0ID0gX3RoaXMkcHJvcHMxOC5tYXhNZW51SGVpZ2h0LFxuICAgICAgICAgIG1lbnVJc09wZW4gPSBfdGhpcyRwcm9wczE4Lm1lbnVJc09wZW4sXG4gICAgICAgICAgbWVudVBsYWNlbWVudCA9IF90aGlzJHByb3BzMTgubWVudVBsYWNlbWVudCxcbiAgICAgICAgICBtZW51UG9zaXRpb24gPSBfdGhpcyRwcm9wczE4Lm1lbnVQb3NpdGlvbixcbiAgICAgICAgICBtZW51UG9ydGFsVGFyZ2V0ID0gX3RoaXMkcHJvcHMxOC5tZW51UG9ydGFsVGFyZ2V0LFxuICAgICAgICAgIG1lbnVTaG91bGRCbG9ja1Njcm9sbCA9IF90aGlzJHByb3BzMTgubWVudVNob3VsZEJsb2NrU2Nyb2xsLFxuICAgICAgICAgIG1lbnVTaG91bGRTY3JvbGxJbnRvVmlldyA9IF90aGlzJHByb3BzMTgubWVudVNob3VsZFNjcm9sbEludG9WaWV3LFxuICAgICAgICAgIG5vT3B0aW9uc01lc3NhZ2UgPSBfdGhpcyRwcm9wczE4Lm5vT3B0aW9uc01lc3NhZ2UsXG4gICAgICAgICAgb25NZW51U2Nyb2xsVG9Ub3AgPSBfdGhpcyRwcm9wczE4Lm9uTWVudVNjcm9sbFRvVG9wLFxuICAgICAgICAgIG9uTWVudVNjcm9sbFRvQm90dG9tID0gX3RoaXMkcHJvcHMxOC5vbk1lbnVTY3JvbGxUb0JvdHRvbTtcbiAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuIG51bGw7IC8vIFRPRE86IEludGVybmFsIE9wdGlvbiBUeXBlIGhlcmVcblxuICAgICAgdmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihwcm9wcykge1xuICAgICAgICAvLyBmb3IgcGVyZm9ybWFuY2UsIHRoZSBtZW51IG9wdGlvbnMgaW4gc3RhdGUgYXJlbid0IGNoYW5nZWQgd2hlbiB0aGVcbiAgICAgICAgLy8gZm9jdXNlZCBvcHRpb24gY2hhbmdlcyBzbyB3ZSBjYWxjdWxhdGUgYWRkaXRpb25hbCBwcm9wcyBiYXNlZCBvbiB0aGF0XG4gICAgICAgIHZhciBpc0ZvY3VzZWQgPSBmb2N1c2VkT3B0aW9uID09PSBwcm9wcy5kYXRhO1xuICAgICAgICBwcm9wcy5pbm5lclJlZiA9IGlzRm9jdXNlZCA/IF90aGlzNS5nZXRGb2N1c2VkT3B0aW9uUmVmIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChPcHRpb24sIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywgcHJvcHMsIHtcbiAgICAgICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZFxuICAgICAgICB9KSwgX3RoaXM1LmZvcm1hdE9wdGlvbkxhYmVsKHByb3BzLmRhdGEsICdtZW51JykpO1xuICAgICAgfTtcblxuICAgICAgdmFyIG1lbnVVSTtcblxuICAgICAgaWYgKHRoaXMuaGFzT3B0aW9ucygpKSB7XG4gICAgICAgIG1lbnVVSSA9IG1lbnVPcHRpb25zLnJlbmRlci5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGl0ZW0udHlwZSxcbiAgICAgICAgICAgICAgICBncm91cCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhpdGVtLCBbXCJ0eXBlXCJdKTtcblxuICAgICAgICAgICAgdmFyIGhlYWRpbmdJZCA9IFwiXCIuY29uY2F0KGl0ZW0ua2V5LCBcIi1oZWFkaW5nXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoR3JvdXAsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywgZ3JvdXAsIHtcbiAgICAgICAgICAgICAgSGVhZGluZzogR3JvdXBIZWFkaW5nLFxuICAgICAgICAgICAgICBoZWFkaW5nUHJvcHM6IHtcbiAgICAgICAgICAgICAgICBpZDogaGVhZGluZ0lkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxhYmVsOiBfdGhpczUuZm9ybWF0R3JvdXBMYWJlbChpdGVtLmRhdGEpXG4gICAgICAgICAgICB9KSwgaXRlbS5vcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZW5kZXIob3B0aW9uKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ29wdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXIoaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gbG9hZGluZ01lc3NhZ2Uoe1xuICAgICAgICAgIGlucHV0VmFsdWU6IGlucHV0VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChtZXNzYWdlID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgbWVudVVJID0gUmVhY3QuY3JlYXRlRWxlbWVudChMb2FkaW5nTWVzc2FnZSwgY29tbW9uUHJvcHMsIG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9tZXNzYWdlID0gbm9PcHRpb25zTWVzc2FnZSh7XG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoX21lc3NhZ2UgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBtZW51VUkgPSBSZWFjdC5jcmVhdGVFbGVtZW50KE5vT3B0aW9uc01lc3NhZ2UsIGNvbW1vblByb3BzLCBfbWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBtZW51UGxhY2VtZW50UHJvcHMgPSB7XG4gICAgICAgIG1pbk1lbnVIZWlnaHQ6IG1pbk1lbnVIZWlnaHQsXG4gICAgICAgIG1heE1lbnVIZWlnaHQ6IG1heE1lbnVIZWlnaHQsXG4gICAgICAgIG1lbnVQbGFjZW1lbnQ6IG1lbnVQbGFjZW1lbnQsXG4gICAgICAgIG1lbnVQb3NpdGlvbjogbWVudVBvc2l0aW9uLFxuICAgICAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXc6IG1lbnVTaG91bGRTY3JvbGxJbnRvVmlld1xuICAgICAgfTtcbiAgICAgIHZhciBtZW51RWxlbWVudCA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudVBsYWNlciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCBtZW51UGxhY2VtZW50UHJvcHMpLCBmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICAgICAgdmFyIHJlZiA9IF9yZWY2LnJlZixcbiAgICAgICAgICAgIF9yZWY2JHBsYWNlclByb3BzID0gX3JlZjYucGxhY2VyUHJvcHMsXG4gICAgICAgICAgICBwbGFjZW1lbnQgPSBfcmVmNiRwbGFjZXJQcm9wcy5wbGFjZW1lbnQsXG4gICAgICAgICAgICBtYXhIZWlnaHQgPSBfcmVmNiRwbGFjZXJQcm9wcy5tYXhIZWlnaHQ7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE1lbnUsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywgbWVudVBsYWNlbWVudFByb3BzLCB7XG4gICAgICAgICAgaW5uZXJSZWY6IHJlZixcbiAgICAgICAgICBpbm5lclByb3BzOiB7XG4gICAgICAgICAgICBvbk1vdXNlRG93bjogX3RoaXM1Lm9uTWVudU1vdXNlRG93bixcbiAgICAgICAgICAgIG9uTW91c2VNb3ZlOiBfdGhpczUub25NZW51TW91c2VNb3ZlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICAgICAgICB9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxDYXB0b3JTd2l0Y2gsIHtcbiAgICAgICAgICBpc0VuYWJsZWQ6IGNhcHR1cmVNZW51U2Nyb2xsLFxuICAgICAgICAgIG9uVG9wQXJyaXZlOiBvbk1lbnVTY3JvbGxUb1RvcCxcbiAgICAgICAgICBvbkJvdHRvbUFycml2ZTogb25NZW51U2Nyb2xsVG9Cb3R0b21cbiAgICAgICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxCbG9jaywge1xuICAgICAgICAgIGlzRW5hYmxlZDogbWVudVNob3VsZEJsb2NrU2Nyb2xsXG4gICAgICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudUxpc3QsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgIGlubmVyUmVmOiBfdGhpczUuZ2V0TWVudUxpc3RSZWYsXG4gICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHRcbiAgICAgICAgfSksIG1lbnVVSSkpKSk7XG4gICAgICB9KTsgLy8gcG9zaXRpb25pbmcgYmVoYXZpb3VyIGlzIGFsbW9zdCBpZGVudGljYWwgZm9yIHBvcnRhbGxlZCBhbmQgZml4ZWQsXG4gICAgICAvLyBzbyB3ZSB1c2UgdGhlIHNhbWUgY29tcG9uZW50LiB0aGUgYWN0dWFsIHBvcnRhbGxpbmcgbG9naWMgaXMgZm9ya2VkXG4gICAgICAvLyB3aXRoaW4gdGhlIGNvbXBvbmVudCBiYXNlZCBvbiBgbWVudVBvc2l0aW9uYFxuXG4gICAgICByZXR1cm4gbWVudVBvcnRhbFRhcmdldCB8fCBtZW51UG9zaXRpb24gPT09ICdmaXhlZCcgPyBSZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVQb3J0YWwsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBhcHBlbmRUbzogbWVudVBvcnRhbFRhcmdldCxcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6IHRoaXMuY29udHJvbFJlZixcbiAgICAgICAgbWVudVBsYWNlbWVudDogbWVudVBsYWNlbWVudCxcbiAgICAgICAgbWVudVBvc2l0aW9uOiBtZW51UG9zaXRpb25cbiAgICAgIH0pLCBtZW51RWxlbWVudCkgOiBtZW51RWxlbWVudDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRm9ybUZpZWxkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckZvcm1GaWVsZCgpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMxOSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGVsaW1pdGVyID0gX3RoaXMkcHJvcHMxOS5kZWxpbWl0ZXIsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMTkuaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHMxOS5pc011bHRpLFxuICAgICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wczE5Lm5hbWU7XG4gICAgICB2YXIgc2VsZWN0VmFsdWUgPSB0aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgICAgaWYgKCFuYW1lIHx8IGlzRGlzYWJsZWQpIHJldHVybjtcblxuICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgaWYgKGRlbGltaXRlcikge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM2LmdldE9wdGlvblZhbHVlKG9wdCk7XG4gICAgICAgICAgfSkuam9pbihkZWxpbWl0ZXIpO1xuICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW5wdXQgPSBzZWxlY3RWYWx1ZS5sZW5ndGggPiAwID8gc2VsZWN0VmFsdWUubWFwKGZ1bmN0aW9uIChvcHQsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICBrZXk6IFwiaS1cIi5jb25jYXQoaSksXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdGhpczYuZ2V0T3B0aW9uVmFsdWUob3B0KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkgOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfdmFsdWUgPSBzZWxlY3RWYWx1ZVswXSA/IHRoaXMuZ2V0T3B0aW9uVmFsdWUoc2VsZWN0VmFsdWVbMF0pIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgIHZhbHVlOiBfdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckxpdmVSZWdpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTGl2ZVJlZ2lvbigpIHtcbiAgICAgIGlmICghdGhpcy5zdGF0ZS5pc0ZvY3VzZWQpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQTExeVRleHQsIHtcbiAgICAgICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIlxuICAgICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInBcIiwge1xuICAgICAgICBpZDogXCJhcmlhLXNlbGVjdGlvbi1ldmVudFwiXG4gICAgICB9LCBcIlxceEEwXCIsIHRoaXMuc3RhdGUuYXJpYUxpdmVTZWxlY3Rpb24pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7XG4gICAgICAgIGlkOiBcImFyaWEtY29udGV4dFwiXG4gICAgICB9LCBcIlxceEEwXCIsIHRoaXMuY29uc3RydWN0QXJpYUxpdmVNZXNzYWdlKCkpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRjb21wb25lbnRzNCA9IHRoaXMuY29tcG9uZW50cyxcbiAgICAgICAgICBDb250cm9sID0gX3RoaXMkY29tcG9uZW50czQuQ29udHJvbCxcbiAgICAgICAgICBJbmRpY2F0b3JzQ29udGFpbmVyID0gX3RoaXMkY29tcG9uZW50czQuSW5kaWNhdG9yc0NvbnRhaW5lcixcbiAgICAgICAgICBTZWxlY3RDb250YWluZXIgPSBfdGhpcyRjb21wb25lbnRzNC5TZWxlY3RDb250YWluZXIsXG4gICAgICAgICAgVmFsdWVDb250YWluZXIgPSBfdGhpcyRjb21wb25lbnRzNC5WYWx1ZUNvbnRhaW5lcjtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIwID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIwLmNsYXNzTmFtZSxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzMjAuaWQsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMjAuaXNEaXNhYmxlZCxcbiAgICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHMyMC5tZW51SXNPcGVuO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcyA9IHRoaXMuZ2V0Q29tbW9uUHJvcHMoKTtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbnRhaW5lciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBpbm5lclByb3BzOiB7XG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIG9uS2V5RG93bjogdGhpcy5vbktleURvd25cbiAgICAgICAgfSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pLCB0aGlzLnJlbmRlckxpdmVSZWdpb24oKSwgUmVhY3QuY3JlYXRlRWxlbWVudChDb250cm9sLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJSZWY6IHRoaXMuZ2V0Q29udHJvbFJlZixcbiAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgIG9uTW91c2VEb3duOiB0aGlzLm9uQ29udHJvbE1vdXNlRG93bixcbiAgICAgICAgICBvblRvdWNoRW5kOiB0aGlzLm9uQ29udHJvbFRvdWNoRW5kXG4gICAgICAgIH0sXG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkLFxuICAgICAgICBtZW51SXNPcGVuOiBtZW51SXNPcGVuXG4gICAgICB9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChWYWx1ZUNvbnRhaW5lciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgICAgIH0pLCB0aGlzLnJlbmRlclBsYWNlaG9sZGVyT3JWYWx1ZSgpLCB0aGlzLnJlbmRlcklucHV0KCkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KEluZGljYXRvcnNDb250YWluZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkXG4gICAgICB9KSwgdGhpcy5yZW5kZXJDbGVhckluZGljYXRvcigpLCB0aGlzLnJlbmRlckxvYWRpbmdJbmRpY2F0b3IoKSwgdGhpcy5yZW5kZXJJbmRpY2F0b3JTZXBhcmF0b3IoKSwgdGhpcy5yZW5kZXJEcm9wZG93bkluZGljYXRvcigpKSksIHRoaXMucmVuZGVyTWVudSgpLCB0aGlzLnJlbmRlckZvcm1GaWVsZCgpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU2VsZWN0O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoU2VsZWN0LCBcImRlZmF1bHRQcm9wc1wiLCBkZWZhdWx0UHJvcHMpO1xuXG5leHBvcnQgeyBTZWxlY3QgYXMgUywgZGVmYXVsdFRoZW1lIGFzIGEsIGNyZWF0ZUZpbHRlciBhcyBjLCBkZWZhdWx0UHJvcHMgYXMgZCwgbWVyZ2VTdHlsZXMgYXMgbSB9O1xuIiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcyc7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQnO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjayc7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzJztcbmltcG9ydCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJztcbmltcG9ydCBfZ2V0UHJvdG90eXBlT2YgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YnO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cyc7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eSc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgX3R5cGVvZiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YnO1xuaW1wb3J0IHsgZyBhcyBnZXRCb3VuZGluZ0NsaWVudE9iaiwgYSBhcyBnZXRTY3JvbGxQYXJlbnQsIGIgYXMgZ2V0U2Nyb2xsVG9wLCBjIGFzIGFuaW1hdGVkU2Nyb2xsVG8sIHMgYXMgc2Nyb2xsVG8gfSBmcm9tICcuL2NodW5rLWU4YWU0YjBmLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCBfY3NzIGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90YWdnZWRUZW1wbGF0ZUxpdGVyYWwnO1xuaW1wb3J0IEF1dG9zaXplSW5wdXQgZnJvbSAncmVhY3QtaW5wdXQtYXV0b3NpemUnO1xuXG5mdW5jdGlvbiBnZXRNZW51UGxhY2VtZW50KF9yZWYpIHtcbiAgdmFyIG1heEhlaWdodCA9IF9yZWYubWF4SGVpZ2h0LFxuICAgICAgbWVudUVsID0gX3JlZi5tZW51RWwsXG4gICAgICBtaW5IZWlnaHQgPSBfcmVmLm1pbkhlaWdodCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50LFxuICAgICAgc2hvdWxkU2Nyb2xsID0gX3JlZi5zaG91bGRTY3JvbGwsXG4gICAgICBpc0ZpeGVkUG9zaXRpb24gPSBfcmVmLmlzRml4ZWRQb3NpdGlvbixcbiAgICAgIHRoZW1lID0gX3JlZi50aGVtZTtcbiAgdmFyIHNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nO1xuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KG1lbnVFbCk7XG4gIHZhciBkZWZhdWx0U3RhdGUgPSB7XG4gICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICBtYXhIZWlnaHQ6IG1heEhlaWdodFxuICB9OyAvLyBzb21ldGhpbmcgd2VudCB3cm9uZywgcmV0dXJuIGRlZmF1bHQgc3RhdGVcblxuICBpZiAoIW1lbnVFbCB8fCAhbWVudUVsLm9mZnNldFBhcmVudCkgcmV0dXJuIGRlZmF1bHRTdGF0ZTsgLy8gd2UgY2FuJ3QgdHJ1c3QgYHNjcm9sbFBhcmVudC5zY3JvbGxIZWlnaHRgIC0tPiBpdCBtYXkgaW5jcmVhc2Ugd2hlblxuICAvLyB0aGUgbWVudSBpcyByZW5kZXJlZFxuXG4gIHZhciBfc2Nyb2xsUGFyZW50JGdldEJvdW4gPSBzY3JvbGxQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICBzY3JvbGxIZWlnaHQgPSBfc2Nyb2xsUGFyZW50JGdldEJvdW4uaGVpZ2h0O1xuXG4gIHZhciBfbWVudUVsJGdldEJvdW5kaW5nQ2wgPSBtZW51RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICBtZW51Qm90dG9tID0gX21lbnVFbCRnZXRCb3VuZGluZ0NsLmJvdHRvbSxcbiAgICAgIG1lbnVIZWlnaHQgPSBfbWVudUVsJGdldEJvdW5kaW5nQ2wuaGVpZ2h0LFxuICAgICAgbWVudVRvcCA9IF9tZW51RWwkZ2V0Qm91bmRpbmdDbC50b3A7XG5cbiAgdmFyIF9tZW51RWwkb2Zmc2V0UGFyZW50JCA9IG1lbnVFbC5vZmZzZXRQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICBjb250YWluZXJUb3AgPSBfbWVudUVsJG9mZnNldFBhcmVudCQudG9wO1xuXG4gIHZhciB2aWV3SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsVG9wKHNjcm9sbFBhcmVudCk7XG4gIHZhciBtYXJnaW5Cb3R0b20gPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKG1lbnVFbCkubWFyZ2luQm90dG9tLCAxMCk7XG4gIHZhciBtYXJnaW5Ub3AgPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKG1lbnVFbCkubWFyZ2luVG9wLCAxMCk7XG4gIHZhciB2aWV3U3BhY2VBYm92ZSA9IGNvbnRhaW5lclRvcCAtIG1hcmdpblRvcDtcbiAgdmFyIHZpZXdTcGFjZUJlbG93ID0gdmlld0hlaWdodCAtIG1lbnVUb3A7XG4gIHZhciBzY3JvbGxTcGFjZUFib3ZlID0gdmlld1NwYWNlQWJvdmUgKyBzY3JvbGxUb3A7XG4gIHZhciBzY3JvbGxTcGFjZUJlbG93ID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gbWVudVRvcDtcbiAgdmFyIHNjcm9sbERvd24gPSBtZW51Qm90dG9tIC0gdmlld0hlaWdodCArIHNjcm9sbFRvcCArIG1hcmdpbkJvdHRvbTtcbiAgdmFyIHNjcm9sbFVwID0gc2Nyb2xsVG9wICsgbWVudVRvcCAtIG1hcmdpblRvcDtcbiAgdmFyIHNjcm9sbER1cmF0aW9uID0gMTYwO1xuXG4gIHN3aXRjaCAocGxhY2VtZW50KSB7XG4gICAgY2FzZSAnYXV0byc6XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIC8vIDE6IHRoZSBtZW51IHdpbGwgZml0LCBkbyBub3RoaW5nXG4gICAgICBpZiAodmlld1NwYWNlQmVsb3cgPj0gbWVudUhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gMjogdGhlIG1lbnUgd2lsbCBmaXQsIGlmIHNjcm9sbGVkXG5cblxuICAgICAgaWYgKHNjcm9sbFNwYWNlQmVsb3cgPj0gbWVudUhlaWdodCAmJiAhaXNGaXhlZFBvc2l0aW9uKSB7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGwpIHtcbiAgICAgICAgICBhbmltYXRlZFNjcm9sbFRvKHNjcm9sbFBhcmVudCwgc2Nyb2xsRG93biwgc2Nyb2xsRHVyYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9IC8vIDM6IHRoZSBtZW51IHdpbGwgZml0LCBpZiBjb25zdHJhaW5lZFxuXG5cbiAgICAgIGlmICghaXNGaXhlZFBvc2l0aW9uICYmIHNjcm9sbFNwYWNlQmVsb3cgPj0gbWluSGVpZ2h0IHx8IGlzRml4ZWRQb3NpdGlvbiAmJiB2aWV3U3BhY2VCZWxvdyA+PSBtaW5IZWlnaHQpIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxEb3duLCBzY3JvbGxEdXJhdGlvbik7XG4gICAgICAgIH0gLy8gd2Ugd2FudCB0byBwcm92aWRlIGFzIG11Y2ggb2YgdGhlIG1lbnUgYXMgcG9zc2libGUgdG8gdGhlIHVzZXIsXG4gICAgICAgIC8vIHNvIGdpdmUgdGhlbSB3aGF0ZXZlciBpcyBhdmFpbGFibGUgYmVsb3cgcmF0aGVyIHRoYW4gdGhlIG1pbkhlaWdodC5cblxuXG4gICAgICAgIHZhciBjb25zdHJhaW5lZEhlaWdodCA9IGlzRml4ZWRQb3NpdGlvbiA/IHZpZXdTcGFjZUJlbG93IC0gbWFyZ2luQm90dG9tIDogc2Nyb2xsU3BhY2VCZWxvdyAtIG1hcmdpbkJvdHRvbTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIG1heEhlaWdodDogY29uc3RyYWluZWRIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gNC4gRm9ya2VkIGJldmlvdXIgd2hlbiB0aGVyZSBpc24ndCBlbm91Z2ggc3BhY2UgYmVsb3dcbiAgICAgIC8vIEFVVE86IGZsaXAgdGhlIG1lbnUsIHJlbmRlciBhYm92ZVxuXG5cbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICdhdXRvJyB8fCBpc0ZpeGVkUG9zaXRpb24pIHtcbiAgICAgICAgLy8gbWF5IG5lZWQgdG8gYmUgY29uc3RyYWluZWQgYWZ0ZXIgZmxpcHBpbmdcbiAgICAgICAgdmFyIF9jb25zdHJhaW5lZEhlaWdodCA9IG1heEhlaWdodDtcbiAgICAgICAgdmFyIHNwYWNlQWJvdmUgPSBpc0ZpeGVkUG9zaXRpb24gPyB2aWV3U3BhY2VBYm92ZSA6IHNjcm9sbFNwYWNlQWJvdmU7XG5cbiAgICAgICAgaWYgKHNwYWNlQWJvdmUgPj0gbWluSGVpZ2h0KSB7XG4gICAgICAgICAgX2NvbnN0cmFpbmVkSGVpZ2h0ID0gTWF0aC5taW4oc3BhY2VBYm92ZSAtIG1hcmdpbkJvdHRvbSAtIHNwYWNpbmcuY29udHJvbEhlaWdodCwgbWF4SGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IF9jb25zdHJhaW5lZEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfSAvLyBCT1RUT006IGFsbG93IGJyb3dzZXIgdG8gaW5jcmVhc2Ugc2Nyb2xsYWJsZSBhcmVhIGFuZCBpbW1lZGlhdGVseSBzZXQgc2Nyb2xsXG5cblxuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgc2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxEb3duKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndG9wJzpcbiAgICAgIC8vIDE6IHRoZSBtZW51IHdpbGwgZml0LCBkbyBub3RoaW5nXG4gICAgICBpZiAodmlld1NwYWNlQWJvdmUgPj0gbWVudUhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gMjogdGhlIG1lbnUgd2lsbCBmaXQsIGlmIHNjcm9sbGVkXG5cblxuICAgICAgaWYgKHNjcm9sbFNwYWNlQWJvdmUgPj0gbWVudUhlaWdodCAmJiAhaXNGaXhlZFBvc2l0aW9uKSB7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGwpIHtcbiAgICAgICAgICBhbmltYXRlZFNjcm9sbFRvKHNjcm9sbFBhcmVudCwgc2Nyb2xsVXAsIHNjcm9sbER1cmF0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfSAvLyAzOiB0aGUgbWVudSB3aWxsIGZpdCwgaWYgY29uc3RyYWluZWRcblxuXG4gICAgICBpZiAoIWlzRml4ZWRQb3NpdGlvbiAmJiBzY3JvbGxTcGFjZUFib3ZlID49IG1pbkhlaWdodCB8fCBpc0ZpeGVkUG9zaXRpb24gJiYgdmlld1NwYWNlQWJvdmUgPj0gbWluSGVpZ2h0KSB7XG4gICAgICAgIHZhciBfY29uc3RyYWluZWRIZWlnaHQyID0gbWF4SGVpZ2h0OyAvLyB3ZSB3YW50IHRvIHByb3ZpZGUgYXMgbXVjaCBvZiB0aGUgbWVudSBhcyBwb3NzaWJsZSB0byB0aGUgdXNlcixcbiAgICAgICAgLy8gc28gZ2l2ZSB0aGVtIHdoYXRldmVyIGlzIGF2YWlsYWJsZSBiZWxvdyByYXRoZXIgdGhhbiB0aGUgbWluSGVpZ2h0LlxuXG4gICAgICAgIGlmICghaXNGaXhlZFBvc2l0aW9uICYmIHNjcm9sbFNwYWNlQWJvdmUgPj0gbWluSGVpZ2h0IHx8IGlzRml4ZWRQb3NpdGlvbiAmJiB2aWV3U3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQpIHtcbiAgICAgICAgICBfY29uc3RyYWluZWRIZWlnaHQyID0gaXNGaXhlZFBvc2l0aW9uID8gdmlld1NwYWNlQWJvdmUgLSBtYXJnaW5Ub3AgOiBzY3JvbGxTcGFjZUFib3ZlIC0gbWFyZ2luVG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxVcCwgc2Nyb2xsRHVyYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgICAgIG1heEhlaWdodDogX2NvbnN0cmFpbmVkSGVpZ2h0MlxuICAgICAgICB9O1xuICAgICAgfSAvLyA0LiBub3QgZW5vdWdoIHNwYWNlLCB0aGUgYnJvd3NlciBXSUxMIE5PVCBpbmNyZWFzZSBzY3JvbGxhYmxlIGFyZWEgd2hlblxuICAgICAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGVsZW1lbnQgcmVuZGVyZWQgYWJvdmUgdGhlIHZpZXdwb3J0IChvbmx5IGJlbG93KS5cbiAgICAgIC8vIEZsaXAgdGhlIG1lbnUsIHJlbmRlciBiZWxvd1xuXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0XG4gICAgICB9O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcGxhY2VtZW50IHByb3ZpZGVkIFxcXCJcIi5jb25jYXQocGxhY2VtZW50LCBcIlxcXCIuXCIpKTtcbiAgfSAvLyBmdWxmaWwgY29udHJhY3Qgd2l0aCBmbG93OiBpbXBsaWNpdCByZXR1cm4gdmFsdWUgb2YgdW5kZWZpbmVkXG5cblxuICByZXR1cm4gZGVmYXVsdFN0YXRlO1xufSAvLyBNZW51IENvbXBvbmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGFsaWduVG9Db250cm9sKHBsYWNlbWVudCkge1xuICB2YXIgcGxhY2VtZW50VG9DU1NQcm9wID0ge1xuICAgIGJvdHRvbTogJ3RvcCcsXG4gICAgdG9wOiAnYm90dG9tJ1xuICB9O1xuICByZXR1cm4gcGxhY2VtZW50ID8gcGxhY2VtZW50VG9DU1NQcm9wW3BsYWNlbWVudF0gOiAnYm90dG9tJztcbn1cblxudmFyIGNvZXJjZVBsYWNlbWVudCA9IGZ1bmN0aW9uIGNvZXJjZVBsYWNlbWVudChwKSB7XG4gIHJldHVybiBwID09PSAnYXV0bycgPyAnYm90dG9tJyA6IHA7XG59O1xuXG52YXIgbWVudUNTUyA9IGZ1bmN0aW9uIG1lbnVDU1MoX3JlZjIpIHtcbiAgdmFyIF9yZWYzO1xuXG4gIHZhciBwbGFjZW1lbnQgPSBfcmVmMi5wbGFjZW1lbnQsXG4gICAgICBfcmVmMiR0aGVtZSA9IF9yZWYyLnRoZW1lLFxuICAgICAgYm9yZGVyUmFkaXVzID0gX3JlZjIkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgICAgc3BhY2luZyA9IF9yZWYyJHRoZW1lLnNwYWNpbmcsXG4gICAgICBjb2xvcnMgPSBfcmVmMiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfcmVmMyA9IHtcbiAgICBsYWJlbDogJ21lbnUnXG4gIH0sIF9kZWZpbmVQcm9wZXJ0eShfcmVmMywgYWxpZ25Ub0NvbnRyb2wocGxhY2VtZW50KSwgJzEwMCUnKSwgX2RlZmluZVByb3BlcnR5KF9yZWYzLCBcImJhY2tncm91bmRDb2xvclwiLCBjb2xvcnMubmV1dHJhbDApLCBfZGVmaW5lUHJvcGVydHkoX3JlZjMsIFwiYm9yZGVyUmFkaXVzXCIsIGJvcmRlclJhZGl1cyksIF9kZWZpbmVQcm9wZXJ0eShfcmVmMywgXCJib3hTaGFkb3dcIiwgJzAgMCAwIDFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKSwgMCA0cHggMTFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKScpLCBfZGVmaW5lUHJvcGVydHkoX3JlZjMsIFwibWFyZ2luQm90dG9tXCIsIHNwYWNpbmcubWVudUd1dHRlciksIF9kZWZpbmVQcm9wZXJ0eShfcmVmMywgXCJtYXJnaW5Ub3BcIiwgc3BhY2luZy5tZW51R3V0dGVyKSwgX2RlZmluZVByb3BlcnR5KF9yZWYzLCBcInBvc2l0aW9uXCIsICdhYnNvbHV0ZScpLCBfZGVmaW5lUHJvcGVydHkoX3JlZjMsIFwid2lkdGhcIiwgJzEwMCUnKSwgX2RlZmluZVByb3BlcnR5KF9yZWYzLCBcInpJbmRleFwiLCAxKSwgX3JlZjM7XG59OyAvLyBOT1RFOiBpbnRlcm5hbCBvbmx5XG5cbnZhciBNZW51UGxhY2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhNZW51UGxhY2VyLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBNZW51UGxhY2VyKCkge1xuICAgIHZhciBfZ2V0UHJvdG90eXBlT2YyO1xuXG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1lbnVQbGFjZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9nZXRQcm90b3R5cGVPZjIgPSBfZ2V0UHJvdG90eXBlT2YoTWVudVBsYWNlcikpLmNhbGwuYXBwbHkoX2dldFByb3RvdHlwZU9mMiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcInN0YXRlXCIsIHtcbiAgICAgIG1heEhlaWdodDogX3RoaXMucHJvcHMubWF4TWVudUhlaWdodCxcbiAgICAgIHBsYWNlbWVudDogbnVsbFxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImdldFBsYWNlbWVudFwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBtaW5NZW51SGVpZ2h0ID0gX3RoaXMkcHJvcHMubWluTWVudUhlaWdodCxcbiAgICAgICAgICBtYXhNZW51SGVpZ2h0ID0gX3RoaXMkcHJvcHMubWF4TWVudUhlaWdodCxcbiAgICAgICAgICBtZW51UGxhY2VtZW50ID0gX3RoaXMkcHJvcHMubWVudVBsYWNlbWVudCxcbiAgICAgICAgICBtZW51UG9zaXRpb24gPSBfdGhpcyRwcm9wcy5tZW51UG9zaXRpb24sXG4gICAgICAgICAgbWVudVNob3VsZFNjcm9sbEludG9WaWV3ID0gX3RoaXMkcHJvcHMubWVudVNob3VsZFNjcm9sbEludG9WaWV3LFxuICAgICAgICAgIHRoZW1lID0gX3RoaXMkcHJvcHMudGhlbWU7XG4gICAgICB2YXIgZ2V0UG9ydGFsUGxhY2VtZW50ID0gX3RoaXMuY29udGV4dC5nZXRQb3J0YWxQbGFjZW1lbnQ7XG4gICAgICBpZiAoIXJlZikgcmV0dXJuOyAvLyBETyBOT1Qgc2Nyb2xsIGlmIHBvc2l0aW9uIGlzIGZpeGVkXG5cbiAgICAgIHZhciBpc0ZpeGVkUG9zaXRpb24gPSBtZW51UG9zaXRpb24gPT09ICdmaXhlZCc7XG4gICAgICB2YXIgc2hvdWxkU2Nyb2xsID0gbWVudVNob3VsZFNjcm9sbEludG9WaWV3ICYmICFpc0ZpeGVkUG9zaXRpb247XG4gICAgICB2YXIgc3RhdGUgPSBnZXRNZW51UGxhY2VtZW50KHtcbiAgICAgICAgbWF4SGVpZ2h0OiBtYXhNZW51SGVpZ2h0LFxuICAgICAgICBtZW51RWw6IHJlZixcbiAgICAgICAgbWluSGVpZ2h0OiBtaW5NZW51SGVpZ2h0LFxuICAgICAgICBwbGFjZW1lbnQ6IG1lbnVQbGFjZW1lbnQsXG4gICAgICAgIHNob3VsZFNjcm9sbDogc2hvdWxkU2Nyb2xsLFxuICAgICAgICBpc0ZpeGVkUG9zaXRpb246IGlzRml4ZWRQb3NpdGlvbixcbiAgICAgICAgdGhlbWU6IHRoZW1lXG4gICAgICB9KTtcbiAgICAgIGlmIChnZXRQb3J0YWxQbGFjZW1lbnQpIGdldFBvcnRhbFBsYWNlbWVudChzdGF0ZSk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHN0YXRlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJnZXRVcGRhdGVkUHJvcHNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG1lbnVQbGFjZW1lbnQgPSBfdGhpcy5wcm9wcy5tZW51UGxhY2VtZW50O1xuICAgICAgdmFyIHBsYWNlbWVudCA9IF90aGlzLnN0YXRlLnBsYWNlbWVudCB8fCBjb2VyY2VQbGFjZW1lbnQobWVudVBsYWNlbWVudCk7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7fSwgX3RoaXMucHJvcHMsIHtcbiAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICAgIG1heEhlaWdodDogX3RoaXMuc3RhdGUubWF4SGVpZ2h0XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhNZW51UGxhY2VyLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICAgIHJldHVybiBjaGlsZHJlbih7XG4gICAgICAgIHJlZjogdGhpcy5nZXRQbGFjZW1lbnQsXG4gICAgICAgIHBsYWNlclByb3BzOiB0aGlzLmdldFVwZGF0ZWRQcm9wcygpXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTWVudVBsYWNlcjtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KE1lbnVQbGFjZXIsIFwiY29udGV4dFR5cGVzXCIsIHtcbiAgZ2V0UG9ydGFsUGxhY2VtZW50OiBQcm9wVHlwZXMuZnVuY1xufSk7XG5cbnZhciBNZW51ID0gZnVuY3Rpb24gTWVudShwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpbm5lclJlZiA9IHByb3BzLmlubmVyUmVmLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogZ2V0U3R5bGVzKCdtZW51JywgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgbWVudTogdHJ1ZVxuICAgIH0sIGNsYXNzTmFtZSlcbiAgfSwgaW5uZXJQcm9wcywge1xuICAgIHJlZjogaW5uZXJSZWZcbiAgfSksIGNoaWxkcmVuKTtcbn07XG4vLyBNZW51IExpc3Rcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbWVudUxpc3RDU1MgPSBmdW5jdGlvbiBtZW51TGlzdENTUyhfcmVmNCkge1xuICB2YXIgbWF4SGVpZ2h0ID0gX3JlZjQubWF4SGVpZ2h0LFxuICAgICAgYmFzZVVuaXQgPSBfcmVmNC50aGVtZS5zcGFjaW5nLmJhc2VVbml0O1xuICByZXR1cm4ge1xuICAgIG1heEhlaWdodDogbWF4SGVpZ2h0LFxuICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgIHBhZGRpbmdCb3R0b206IGJhc2VVbml0LFxuICAgIHBhZGRpbmdUb3A6IGJhc2VVbml0LFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIC8vIHJlcXVpcmVkIGZvciBvZmZzZXRbSGVpZ2h0LCBUb3BdID4ga2V5Ym9hcmQgc2Nyb2xsXG4gICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbiAgfTtcbn07XG52YXIgTWVudUxpc3QgPSBmdW5jdGlvbiBNZW51TGlzdChwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aSxcbiAgICAgIGlubmVyUmVmID0gcHJvcHMuaW5uZXJSZWY7XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNzczogZ2V0U3R5bGVzKCdtZW51TGlzdCcsIHByb3BzKSxcbiAgICBjbGFzc05hbWU6IGN4KHtcbiAgICAgICdtZW51LWxpc3QnOiB0cnVlLFxuICAgICAgJ21lbnUtbGlzdC0taXMtbXVsdGknOiBpc011bHRpXG4gICAgfSwgY2xhc3NOYW1lKSxcbiAgICByZWY6IGlubmVyUmVmXG4gIH0sIGNoaWxkcmVuKTtcbn07IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTWVudSBOb3RpY2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIG5vdGljZUNTUyA9IGZ1bmN0aW9uIG5vdGljZUNTUyhfcmVmNSkge1xuICB2YXIgX3JlZjUkdGhlbWUgPSBfcmVmNS50aGVtZSxcbiAgICAgIGJhc2VVbml0ID0gX3JlZjUkdGhlbWUuc3BhY2luZy5iYXNlVW5pdCxcbiAgICAgIGNvbG9ycyA9IF9yZWY1JHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIHtcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw0MCxcbiAgICBwYWRkaW5nOiBcIlwiLmNvbmNhdChiYXNlVW5pdCAqIDIsIFwicHggXCIpLmNvbmNhdChiYXNlVW5pdCAqIDMsIFwicHhcIiksXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJ1xuICB9O1xufTtcblxudmFyIG5vT3B0aW9uc01lc3NhZ2VDU1MgPSBub3RpY2VDU1M7XG52YXIgbG9hZGluZ01lc3NhZ2VDU1MgPSBub3RpY2VDU1M7XG52YXIgTm9PcHRpb25zTWVzc2FnZSA9IGZ1bmN0aW9uIE5vT3B0aW9uc01lc3NhZ2UocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBjeCA9IHByb3BzLmN4LFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogZ2V0U3R5bGVzKCdub09wdGlvbnNNZXNzYWdlJywgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgJ21lbnUtbm90aWNlJzogdHJ1ZSxcbiAgICAgICdtZW51LW5vdGljZS0tbm8tb3B0aW9ucyc6IHRydWVcbiAgICB9LCBjbGFzc05hbWUpXG4gIH0sIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xuTm9PcHRpb25zTWVzc2FnZS5kZWZhdWx0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiAnTm8gb3B0aW9ucydcbn07XG52YXIgTG9hZGluZ01lc3NhZ2UgPSBmdW5jdGlvbiBMb2FkaW5nTWVzc2FnZShwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBnZXRTdHlsZXMoJ2xvYWRpbmdNZXNzYWdlJywgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgJ21lbnUtbm90aWNlJzogdHJ1ZSxcbiAgICAgICdtZW51LW5vdGljZS0tbG9hZGluZyc6IHRydWVcbiAgICB9LCBjbGFzc05hbWUpXG4gIH0sIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xuTG9hZGluZ01lc3NhZ2UuZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogJ0xvYWRpbmcuLi4nXG59OyAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1lbnUgUG9ydGFsXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIG1lbnVQb3J0YWxDU1MgPSBmdW5jdGlvbiBtZW51UG9ydGFsQ1NTKF9yZWY2KSB7XG4gIHZhciByZWN0ID0gX3JlZjYucmVjdCxcbiAgICAgIG9mZnNldCA9IF9yZWY2Lm9mZnNldCxcbiAgICAgIHBvc2l0aW9uID0gX3JlZjYucG9zaXRpb247XG4gIHJldHVybiB7XG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICB0b3A6IG9mZnNldCxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICB6SW5kZXg6IDFcbiAgfTtcbn07XG52YXIgTWVudVBvcnRhbCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcbiAgX2luaGVyaXRzKE1lbnVQb3J0YWwsIF9Db21wb25lbnQyKTtcblxuICBmdW5jdGlvbiBNZW51UG9ydGFsKCkge1xuICAgIHZhciBfZ2V0UHJvdG90eXBlT2YzO1xuXG4gICAgdmFyIF90aGlzMjtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNZW51UG9ydGFsKTtcblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIF90aGlzMiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfZ2V0UHJvdG90eXBlT2YzID0gX2dldFByb3RvdHlwZU9mKE1lbnVQb3J0YWwpKS5jYWxsLmFwcGx5KF9nZXRQcm90b3R5cGVPZjMsIFt0aGlzXS5jb25jYXQoYXJncykpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMyKSksIFwic3RhdGVcIiwge1xuICAgICAgcGxhY2VtZW50OiBudWxsXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzMikpLCBcImdldFBvcnRhbFBsYWNlbWVudFwiLCBmdW5jdGlvbiAoX3JlZjcpIHtcbiAgICAgIHZhciBwbGFjZW1lbnQgPSBfcmVmNy5wbGFjZW1lbnQ7XG4gICAgICB2YXIgaW5pdGlhbFBsYWNlbWVudCA9IGNvZXJjZVBsYWNlbWVudChfdGhpczIucHJvcHMubWVudVBsYWNlbWVudCk7IC8vIGF2b2lkIHJlLXJlbmRlcnMgaWYgdGhlIHBsYWNlbWVudCBoYXMgbm90IGNoYW5nZWRcblxuICAgICAgaWYgKHBsYWNlbWVudCAhPT0gaW5pdGlhbFBsYWNlbWVudCkge1xuICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzMjtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhNZW51UG9ydGFsLCBbe1xuICAgIGtleTogXCJnZXRDaGlsZENvbnRleHRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0UG9ydGFsUGxhY2VtZW50OiB0aGlzLmdldFBvcnRhbFBsYWNlbWVudFxuICAgICAgfTtcbiAgICB9IC8vIGNhbGxiYWNrIGZvciBvY2Nhc3Npb25zIHdoZXJlIHRoZSBtZW51IG11c3QgXCJmbGlwXCJcblxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhcHBlbmRUbyA9IF90aGlzJHByb3BzMi5hcHBlbmRUbyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMi5jaGlsZHJlbixcbiAgICAgICAgICBjb250cm9sRWxlbWVudCA9IF90aGlzJHByb3BzMi5jb250cm9sRWxlbWVudCxcbiAgICAgICAgICBtZW51UGxhY2VtZW50ID0gX3RoaXMkcHJvcHMyLm1lbnVQbGFjZW1lbnQsXG4gICAgICAgICAgcG9zaXRpb24gPSBfdGhpcyRwcm9wczIubWVudVBvc2l0aW9uLFxuICAgICAgICAgIGdldFN0eWxlcyA9IF90aGlzJHByb3BzMi5nZXRTdHlsZXM7XG4gICAgICB2YXIgaXNGaXhlZCA9IHBvc2l0aW9uID09PSAnZml4ZWQnOyAvLyBiYWlsIGVhcmx5IGlmIHJlcXVpcmVkIGVsZW1lbnRzIGFyZW4ndCBwcmVzZW50XG5cbiAgICAgIGlmICghYXBwZW5kVG8gJiYgIWlzRml4ZWQgfHwgIWNvbnRyb2xFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGxhY2VtZW50ID0gdGhpcy5zdGF0ZS5wbGFjZW1lbnQgfHwgY29lcmNlUGxhY2VtZW50KG1lbnVQbGFjZW1lbnQpO1xuICAgICAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudE9iaihjb250cm9sRWxlbWVudCk7XG4gICAgICB2YXIgc2Nyb2xsRGlzdGFuY2UgPSBpc0ZpeGVkID8gMCA6IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICAgIHZhciBvZmZzZXQgPSByZWN0W3BsYWNlbWVudF0gKyBzY3JvbGxEaXN0YW5jZTtcbiAgICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgcmVjdDogcmVjdFxuICAgICAgfTsgLy8gc2FtZSB3cmFwcGVyIGVsZW1lbnQgd2hldGhlciBmaXhlZCBvciBwb3J0YWxsZWRcblxuICAgICAgdmFyIG1lbnVXcmFwcGVyID0ganN4KFwiZGl2XCIsIHtcbiAgICAgICAgY3NzOiBnZXRTdHlsZXMoJ21lbnVQb3J0YWwnLCBzdGF0ZSlcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICAgIHJldHVybiBhcHBlbmRUbyA/IGNyZWF0ZVBvcnRhbChtZW51V3JhcHBlciwgYXBwZW5kVG8pIDogbWVudVdyYXBwZXI7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE1lbnVQb3J0YWw7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShNZW51UG9ydGFsLCBcImNoaWxkQ29udGV4dFR5cGVzXCIsIHtcbiAgZ2V0UG9ydGFsUGxhY2VtZW50OiBQcm9wVHlwZXMuZnVuY1xufSk7XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbnZhciBrZXlMaXN0ID0gT2JqZWN0LmtleXM7XG52YXIgaGFzUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIGVxdWFsKGEsIGIpIHtcbiAgLy8gZmFzdC1kZWVwLWVxdWFsIGluZGV4LmpzIDIuMC4xXG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoYSAmJiBiICYmIF90eXBlb2YoYSkgPT0gJ29iamVjdCcgJiYgX3R5cGVvZihiKSA9PSAnb2JqZWN0Jykge1xuICAgIHZhciBhcnJBID0gaXNBcnJheShhKSxcbiAgICAgICAgYXJyQiA9IGlzQXJyYXkoYiksXG4gICAgICAgIGksXG4gICAgICAgIGxlbmd0aCxcbiAgICAgICAga2V5O1xuXG4gICAgaWYgKGFyckEgJiYgYXJyQikge1xuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOykge1xuICAgICAgICBpZiAoIWVxdWFsKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChhcnJBICE9IGFyckIpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgZGF0ZUEgPSBhIGluc3RhbmNlb2YgRGF0ZSxcbiAgICAgICAgZGF0ZUIgPSBiIGluc3RhbmNlb2YgRGF0ZTtcbiAgICBpZiAoZGF0ZUEgIT0gZGF0ZUIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZGF0ZUEgJiYgZGF0ZUIpIHJldHVybiBhLmdldFRpbWUoKSA9PSBiLmdldFRpbWUoKTtcbiAgICB2YXIgcmVnZXhwQSA9IGEgaW5zdGFuY2VvZiBSZWdFeHAsXG4gICAgICAgIHJlZ2V4cEIgPSBiIGluc3RhbmNlb2YgUmVnRXhwO1xuICAgIGlmIChyZWdleHBBICE9IHJlZ2V4cEIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocmVnZXhwQSAmJiByZWdleHBCKSByZXR1cm4gYS50b1N0cmluZygpID09IGIudG9TdHJpbmcoKTtcbiAgICB2YXIga2V5cyA9IGtleUxpc3QoYSk7XG4gICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG5cbiAgICBpZiAobGVuZ3RoICE9PSBrZXlMaXN0KGIpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOykge1xuICAgICAgaWYgKCFoYXNQcm9wLmNhbGwoYiwga2V5c1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIGVuZCBmYXN0LWRlZXAtZXF1YWxcbiAgICAvLyBDdXN0b20gaGFuZGxpbmcgZm9yIFJlYWN0XG5cblxuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSA9PT0gJ19vd25lcicgJiYgYS4kJHR5cGVvZikge1xuICAgICAgICAvLyBSZWFjdC1zcGVjaWZpYzogYXZvaWQgdHJhdmVyc2luZyBSZWFjdCBlbGVtZW50cycgX293bmVyLlxuICAgICAgICAvLyAgX293bmVyIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAgICAgICAgLy8gYW5kIGlzIG5vdCBuZWVkZWQgd2hlbiBjb21wYXJpbmcgdGhlIGFjdHVhbCBlbGVtZW50cyAoYW5kIG5vdCB0aGVpciBvd25lcnMpXG4gICAgICAgIC8vIC4kJHR5cGVvZiBhbmQgLl9zdG9yZSBvbiBqdXN0IHJlYXNvbmFibGUgbWFya2VycyBvZiBhIHJlYWN0IGVsZW1lbnRcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhbGwgb3RoZXIgcHJvcGVydGllcyBzaG91bGQgYmUgdHJhdmVyc2VkIGFzIHVzdWFsXG4gICAgICAgIGlmICghZXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSAvLyBmYXN0LWRlZXAtZXF1YWwgaW5kZXguanMgMi4wLjFcblxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gYSAhPT0gYSAmJiBiICE9PSBiO1xufSAvLyBlbmQgZmFzdC1kZWVwLWVxdWFsXG5cblxuZnVuY3Rpb24gZXhwb3J0ZWRFcXVhbChhLCBiKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVxdWFsKGEsIGIpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvci5tZXNzYWdlICYmIGVycm9yLm1lc3NhZ2UubWF0Y2goL3N0YWNrfHJlY3Vyc2lvbi9pKSkge1xuICAgICAgLy8gd2FybiBvbiBjaXJjdWxhciByZWZlcmVuY2VzLCBkb24ndCBjcmFzaFxuICAgICAgLy8gYnJvd3NlcnMgZ2l2ZSB0aGlzIGRpZmZlcmVudCBlcnJvcnMgbmFtZSBhbmQgbWVzc2FnZXM6XG4gICAgICAvLyBjaHJvbWUvc2FmYXJpOiBcIlJhbmdlRXJyb3JcIiwgXCJNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiXG4gICAgICAvLyBmaXJlZm94OiBcIkludGVybmFsRXJyb3JcIiwgdG9vIG11Y2ggcmVjdXJzaW9uXCJcbiAgICAgIC8vIGVkZ2U6IFwiRXJyb3JcIiwgXCJPdXQgb2Ygc3RhY2sgc3BhY2VcIlxuICAgICAgY29uc29sZS53YXJuKCdXYXJuaW5nOiByZWFjdC1mYXN0LWNvbXBhcmUgZG9lcyBub3QgaGFuZGxlIGNpcmN1bGFyIHJlZmVyZW5jZXMuJywgZXJyb3IubmFtZSwgZXJyb3IubWVzc2FnZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBzb21lIG90aGVyIGVycm9yLiB3ZSBzaG91bGQgZGVmaW5pdGVseSBrbm93IGFib3V0IHRoZXNlXG5cblxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbnZhciBjb250YWluZXJDU1MgPSBmdW5jdGlvbiBjb250YWluZXJDU1MoX3JlZikge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIGlzUnRsID0gX3JlZi5pc1J0bDtcbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogJ2NvbnRhaW5lcicsXG4gICAgZGlyZWN0aW9uOiBpc1J0bCA/ICdydGwnIDogbnVsbCxcbiAgICBwb2ludGVyRXZlbnRzOiBpc0Rpc2FibGVkID8gJ25vbmUnIDogbnVsbCxcbiAgICAvLyBjYW5jZWwgbW91c2UgZXZlbnRzIHdoZW4gZGlzYWJsZWRcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9O1xufTtcbnZhciBTZWxlY3RDb250YWluZXIgPSBmdW5jdGlvbiBTZWxlY3RDb250YWluZXIocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBjeCA9IHByb3BzLmN4LFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgIGlzUnRsID0gcHJvcHMuaXNSdGw7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogZ2V0U3R5bGVzKCdjb250YWluZXInLCBwcm9wcyksXG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICAnLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgICAnLS1pcy1ydGwnOiBpc1J0bFxuICAgIH0sIGNsYXNzTmFtZSlcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVmFsdWUgQ29udGFpbmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIHZhbHVlQ29udGFpbmVyQ1NTID0gZnVuY3Rpb24gdmFsdWVDb250YWluZXJDU1MoX3JlZjIpIHtcbiAgdmFyIHNwYWNpbmcgPSBfcmVmMi50aGVtZS5zcGFjaW5nO1xuICByZXR1cm4ge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4OiAxLFxuICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgcGFkZGluZzogXCJcIi5jb25jYXQoc3BhY2luZy5iYXNlVW5pdCAvIDIsIFwicHggXCIpLmNvbmNhdChzcGFjaW5nLmJhc2VVbml0ICogMiwgXCJweFwiKSxcbiAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgfTtcbn07XG52YXIgVmFsdWVDb250YWluZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFZhbHVlQ29udGFpbmVyLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBWYWx1ZUNvbnRhaW5lcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVmFsdWVDb250YWluZXIpO1xuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihWYWx1ZUNvbnRhaW5lcikuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVmFsdWVDb250YWluZXIsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGN4ID0gX3RoaXMkcHJvcHMuY3gsXG4gICAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzLmlzTXVsdGksXG4gICAgICAgICAgZ2V0U3R5bGVzID0gX3RoaXMkcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgICAgIGhhc1ZhbHVlID0gX3RoaXMkcHJvcHMuaGFzVmFsdWU7XG4gICAgICByZXR1cm4ganN4KFwiZGl2XCIsIHtcbiAgICAgICAgY3NzOiBnZXRTdHlsZXMoJ3ZhbHVlQ29udGFpbmVyJywgdGhpcy5wcm9wcyksXG4gICAgICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgICAgICd2YWx1ZS1jb250YWluZXInOiB0cnVlLFxuICAgICAgICAgICd2YWx1ZS1jb250YWluZXItLWlzLW11bHRpJzogaXNNdWx0aSxcbiAgICAgICAgICAndmFsdWUtY29udGFpbmVyLS1oYXMtdmFsdWUnOiBoYXNWYWx1ZVxuICAgICAgICB9LCBjbGFzc05hbWUpXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFZhbHVlQ29udGFpbmVyO1xufShDb21wb25lbnQpOyAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEluZGljYXRvciBDb250YWluZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgaW5kaWNhdG9yc0NvbnRhaW5lckNTUyA9IGZ1bmN0aW9uIGluZGljYXRvcnNDb250YWluZXJDU1MoKSB7XG4gIHJldHVybiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhTaHJpbms6IDBcbiAgfTtcbn07XG52YXIgSW5kaWNhdG9yc0NvbnRhaW5lciA9IGZ1bmN0aW9uIEluZGljYXRvcnNDb250YWluZXIocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBjeCA9IHByb3BzLmN4LFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIHtcbiAgICBjc3M6IGdldFN0eWxlcygnaW5kaWNhdG9yc0NvbnRhaW5lcicsIHByb3BzKSxcbiAgICBjbGFzc05hbWU6IGN4KHtcbiAgICAgIGluZGljYXRvcnM6IHRydWVcbiAgICB9LCBjbGFzc05hbWUpXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5cbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdCgpIHtcbiAgdmFyIGRhdGEgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUsIDgwJSwgMTAwJSB7IG9wYWNpdHk6IDA7IH1cXG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cXG5cIl0pO1xuXG4gIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdCgpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE5YnFoMnJcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lLWJsb2NrO2ZpbGw6Y3VycmVudENvbG9yO2xpbmUtaGVpZ2h0OjE7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MDtcIlxufSA6IHtcbiAgbmFtZTogXCIxOWJxaDJyXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtsaW5lLWhlaWdodDoxO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjA7XCIsXG4gIG1hcDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbWx1WkdsallYUnZjbk11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQmEwSkpJaXdpWm1sc1pTSTZJbWx1WkdsallYUnZjbk11YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZMeUJBWm14dmQxeHVMeW9xSUVCcWMzZ2dhbk40SUNvdlhHNXBiWEJ2Y25RZ2V5QjBlWEJsSUU1dlpHVWdmU0JtY205dElDZHlaV0ZqZENjN1hHNXBiWEJ2Y25RZ2V5QnFjM2dzSUd0bGVXWnlZVzFsY3lCOUlHWnliMjBnSjBCbGJXOTBhVzl1TDJOdmNtVW5PMXh1WEc1cGJYQnZjblFnZEhsd1pTQjdJRU52YlcxdmJsQnliM0J6TENCVWFHVnRaU0I5SUdaeWIyMGdKeTR1TDNSNWNHVnpKenRjYmx4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0dkx5QkVjbTl3Wkc5M2JpQW1JRU5zWldGeUlFbGpiMjV6WEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVkyOXVjM1FnVTNabklEMGdLSHNnYzJsNlpTd2dMaTR1Y0hKdmNITWdmVG9nZXlCemFYcGxPaUJ1ZFcxaVpYSWdmU2tnUFQ0Z0tGeHVJQ0E4YzNablhHNGdJQ0FnYUdWcFoyaDBQWHR6YVhwbGZWeHVJQ0FnSUhkcFpIUm9QWHR6YVhwbGZWeHVJQ0FnSUhacFpYZENiM2c5WENJd0lEQWdNakFnTWpCY0lseHVJQ0FnSUdGeWFXRXRhR2xrWkdWdVBWd2lkSEoxWlZ3aVhHNGdJQ0FnWm05amRYTmhZbXhsUFZ3aVptRnNjMlZjSWx4dUlDQWdJR056Y3oxN2UxeHVJQ0FnSUNBZ1pHbHpjR3hoZVRvZ0oybHViR2x1WlMxaWJHOWpheWNzWEc0Z0lDQWdJQ0JtYVd4c09pQW5ZM1Z5Y21WdWRFTnZiRzl5Snl4Y2JpQWdJQ0FnSUd4cGJtVklaV2xuYUhRNklERXNYRzRnSUNBZ0lDQnpkSEp2YTJVNklDZGpkWEp5Wlc1MFEyOXNiM0luTEZ4dUlDQWdJQ0FnYzNSeWIydGxWMmxrZEdnNklEQXNYRzRnSUNBZ2ZYMWNiaUFnSUNCN0xpNHVjSEp2Y0hOOVhHNGdJQzgrWEc0cE8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1EzSnZjM05KWTI5dUlEMGdLSEJ5YjNCek9pQmhibmtwSUQwK0lDaGNiaUFnUEZOMlp5QnphWHBsUFhzeU1IMGdleTR1TG5CeWIzQnpmVDVjYmlBZ0lDQThjR0YwYUNCa1BWd2lUVEUwTGpNME9DQXhOQzQ0TkRsakxUQXVORFk1SURBdU5EWTVMVEV1TWpJNUlEQXVORFk1TFRFdU5qazNJREJzTFRJdU5qVXhMVE11TURNd0xUSXVOalV4SURNdU1ESTVZeTB3TGpRMk9TQXdMalEyT1MweExqSXlPU0F3TGpRMk9TMHhMalk1TnlBd0xUQXVORFk1TFRBdU5EWTVMVEF1TkRZNUxURXVNakk1SURBdE1TNDJPVGRzTWk0M05UZ3RNeTR4TlMweUxqYzFPUzB6TGpFMU1tTXRNQzQwTmprdE1DNDBOamt0TUM0ME5qa3RNUzR5TWpnZ01DMHhMalk1TjNNeExqSXlPQzB3TGpRMk9TQXhMalk1TnlBd2JESXVOalV5SURNdU1ETXhJREl1TmpVeExUTXVNRE14WXpBdU5EWTVMVEF1TkRZNUlERXVNakk0TFRBdU5EWTVJREV1TmprM0lEQnpNQzQwTmprZ01TNHlNamtnTUNBeExqWTVOMnd0TWk0M05UZ2dNeTR4TlRJZ01pNDNOVGdnTXk0eE5XTXdMalEyT1NBd0xqUTJPU0F3TGpRMk9TQXhMakl5T1NBd0lERXVOams0ZWx3aUlDOCtYRzRnSUR3dlUzWm5QbHh1S1R0Y2JtVjRjRzl5ZENCamIyNXpkQ0JFYjNkdVEyaGxkbkp2YmlBOUlDaHdjbTl3Y3pvZ1lXNTVLU0E5UGlBb1hHNGdJRHhUZG1jZ2MybDZaVDE3TWpCOUlIc3VMaTV3Y205d2MzMCtYRzRnSUNBZ1BIQmhkR2dnWkQxY0lrMDBMalV4TmlBM0xqVTBPR013TGpRek5pMHdMalEwTmlBeExqQTBNeTB3TGpRNE1TQXhMalUzTmlBd2JETXVPVEE0SURNdU56UTNJRE11T1RBNExUTXVOelEzWXpBdU5UTXpMVEF1TkRneElERXVNVFF4TFRBdU5EUTJJREV1TlRjMElEQWdNQzQwTXpZZ01DNDBORFVnTUM0ME1EZ2dNUzR4T1RjZ01DQXhMall4TlMwd0xqUXdOaUF3TGpReE9DMDBMalk1TlNBMExqVXdNaTAwTGpZNU5TQTBMalV3TWkwd0xqSXhOeUF3TGpJeU15MHdMalV3TWlBd0xqTXpOUzB3TGpjNE55QXdMak16TlhNdE1DNDFOeTB3TGpFeE1pMHdMamM0T1Mwd0xqTXpOV013SURBdE5DNHlPRGN0TkM0d09EUXROQzQyT1RVdE5DNDFNREp6TFRBdU5ETTJMVEV1TVRjZ01DMHhMall4TlhwY0lpQXZQbHh1SUNBOEwxTjJaejVjYmlrN1hHNWNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVMeThnUkhKdmNHUnZkMjRnSmlCRGJHVmhjaUJDZFhSMGIyNXpYRzR2THlBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNibHh1Wlhod2IzSjBJSFI1Y0dVZ1NXNWthV05oZEc5eVVISnZjSE1nUFNCRGIyMXRiMjVRY205d2N5QW1JSHRjYmlBZ0x5b3FJRlJvWlNCamFHbHNaSEpsYmlCMGJ5QmlaU0J5Wlc1a1pYSmxaQ0JwYm5OcFpHVWdkR2hsSUdsdVpHbGpZWFJ2Y2k0Z0tpOWNiaUFnWTJocGJHUnlaVzQ2SUU1dlpHVXNYRzRnSUM4cUtpQlFjbTl3Y3lCMGFHRjBJSGRwYkd3Z1ltVWdjR0Z6YzJWa0lHOXVJSFJ2SUhSb1pTQmphR2xzWkhKbGJpNGdLaTljYmlBZ2FXNXVaWEpRY205d2N6b2dZVzU1TEZ4dUlDQXZLaW9nVkdobElHWnZZM1Z6WldRZ2MzUmhkR1VnYjJZZ2RHaGxJSE5sYkdWamRDNGdLaTljYmlBZ2FYTkdiMk4xYzJWa09pQmliMjlzWldGdUxGeHVJQ0F2S2lvZ1YyaGxkR2hsY2lCMGFHVWdkR1Y0ZENCcGN5QnlhV2RvZENCMGJ5QnNaV1owSUNvdlhHNGdJR2x6VW5Sc09pQmliMjlzWldGdUxGeHVmVHRjYmx4dVkyOXVjM1FnWW1GelpVTlRVeUE5SUNoN1hHNGdJR2x6Um05amRYTmxaQ3hjYmlBZ2RHaGxiV1U2SUh0Y2JpQWdJQ0J6Y0dGamFXNW5PaUI3SUdKaGMyVlZibWwwSUgwc1hHNGdJQ0FnWTI5c2IzSnpMRnh1SUNCOUxGeHVmVG9nU1c1a2FXTmhkRzl5VUhKdmNITXBJRDArSUNoN1hHNGdJR3hoWW1Wc09pQW5hVzVrYVdOaGRHOXlRMjl1ZEdGcGJtVnlKeXhjYmlBZ1kyOXNiM0k2SUdselJtOWpkWE5sWkNBL0lHTnZiRzl5Y3k1dVpYVjBjbUZzTmpBZ09pQmpiMnh2Y25NdWJtVjFkSEpoYkRJd0xGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUhCaFpHUnBibWM2SUdKaGMyVlZibWwwSUNvZ01peGNiaUFnZEhKaGJuTnBkR2x2YmpvZ0oyTnZiRzl5SURFMU1HMXpKeXhjYmx4dUlDQW5PbWh2ZG1WeUp6b2dlMXh1SUNBZ0lHTnZiRzl5T2lCcGMwWnZZM1Z6WldRZ1B5QmpiMnh2Y25NdWJtVjFkSEpoYkRnd0lEb2dZMjlzYjNKekxtNWxkWFJ5WVd3ME1DeGNiaUFnZlN4Y2JuMHBPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdaSEp2Y0dSdmQyNUpibVJwWTJGMGIzSkRVMU1nUFNCaVlYTmxRMU5UTzF4dVpYaHdiM0owSUdOdmJuTjBJRVJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlJRDBnS0hCeWIzQnpPaUJKYm1ScFkyRjBiM0pRY205d2N5a2dQVDRnZTF4dUlDQmpiMjV6ZENCN0lHTm9hV3hrY21WdUxDQmpiR0Z6YzA1aGJXVXNJR040TENCblpYUlRkSGxzWlhNc0lHbHVibVZ5VUhKdmNITWdmU0E5SUhCeWIzQnpPMXh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHhrYVhaY2JpQWdJQ0FnSUhzdUxpNXBibTVsY2xCeWIzQnpmVnh1SUNBZ0lDQWdZM056UFh0blpYUlRkSGxzWlhNb0oyUnliM0JrYjNkdVNXNWthV05oZEc5eUp5d2djSEp2Y0hNcGZWeHVJQ0FnSUNBZ1kyeGhjM05PWVcxbFBYdGplQ2hjYmlBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lHbHVaR2xqWVhSdmNqb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ0lDQW5aSEp2Y0dSdmQyNHRhVzVrYVdOaGRHOXlKem9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnWTJ4aGMzTk9ZVzFsWEc0Z0lDQWdJQ0FwZlZ4dUlDQWdJRDVjYmlBZ0lDQWdJSHRqYUdsc1pISmxiaUI4ZkNBOFJHOTNia05vWlhaeWIyNGdMejU5WEc0Z0lDQWdQQzlrYVhZK1hHNGdJQ2s3WEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1kyeGxZWEpKYm1ScFkyRjBiM0pEVTFNZ1BTQmlZWE5sUTFOVE8xeHVaWGh3YjNKMElHTnZibk4wSUVOc1pXRnlTVzVrYVdOaGRHOXlJRDBnS0hCeWIzQnpPaUJKYm1ScFkyRjBiM0pRY205d2N5a2dQVDRnZTF4dUlDQmpiMjV6ZENCN0lHTm9hV3hrY21WdUxDQmpiR0Z6YzA1aGJXVXNJR040TENCblpYUlRkSGxzWlhNc0lHbHVibVZ5VUhKdmNITWdmU0E5SUhCeWIzQnpPMXh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHhrYVhaY2JpQWdJQ0FnSUhzdUxpNXBibTVsY2xCeWIzQnpmVnh1SUNBZ0lDQWdZM056UFh0blpYUlRkSGxzWlhNb0oyTnNaV0Z5U1c1a2FXTmhkRzl5Snl3Z2NISnZjSE1wZlZ4dUlDQWdJQ0FnWTJ4aGMzTk9ZVzFsUFh0amVDaGNiaUFnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUdsdVpHbGpZWFJ2Y2pvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnSUNBblkyeGxZWEl0YVc1a2FXTmhkRzl5SnpvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ1kyeGhjM05PWVcxbFhHNGdJQ0FnSUNBcGZWeHVJQ0FnSUQ1Y2JpQWdJQ0FnSUh0amFHbHNaSEpsYmlCOGZDQThRM0p2YzNOSlkyOXVJQzgrZlZ4dUlDQWdJRHd2WkdsMlBseHVJQ0FwTzF4dWZUdGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCVFpYQmhjbUYwYjNKY2JpOHZJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dVhHNTBlWEJsSUZObGNHRnlZWFJ2Y2xOMFlYUmxJRDBnZXlCcGMwUnBjMkZpYkdWa09pQmliMjlzWldGdUlIMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnBibVJwWTJGMGIzSlRaWEJoY21GMGIzSkRVMU1nUFNBb2UxeHVJQ0JwYzBScGMyRmliR1ZrTEZ4dUlDQjBhR1Z0WlRvZ2UxeHVJQ0FnSUhOd1lXTnBibWM2SUhzZ1ltRnpaVlZ1YVhRZ2ZTeGNiaUFnSUNCamIyeHZjbk1zWEc0Z0lIMHNYRzU5T2lCRGIyMXRiMjVRY205d2N5QW1JRk5sY0dGeVlYUnZjbE4wWVhSbEtTQTlQaUFvZTF4dUlDQnNZV0psYkRvZ0oybHVaR2xqWVhSdmNsTmxjR0Z5WVhSdmNpY3NYRzRnSUdGc2FXZHVVMlZzWmpvZ0ozTjBjbVYwWTJnbkxGeHVJQ0JpWVdOclozSnZkVzVrUTI5c2IzSTZJR2x6UkdsellXSnNaV1FnUHlCamIyeHZjbk11Ym1WMWRISmhiREV3SURvZ1kyOXNiM0p6TG01bGRYUnlZV3d5TUN4Y2JpQWdiV0Z5WjJsdVFtOTBkRzl0T2lCaVlYTmxWVzVwZENBcUlESXNYRzRnSUcxaGNtZHBibFJ2Y0RvZ1ltRnpaVlZ1YVhRZ0tpQXlMRnh1SUNCM2FXUjBhRG9nTVN4Y2JuMHBPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdTVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlJRDBnS0hCeWIzQnpPaUJKYm1ScFkyRjBiM0pRY205d2N5a2dQVDRnZTF4dUlDQmpiMjV6ZENCN0lHTnNZWE56VG1GdFpTd2dZM2dzSUdkbGRGTjBlV3hsY3l3Z2FXNXVaWEpRY205d2N5QjlJRDBnY0hKdmNITTdYRzRnSUhKbGRIVnliaUFvWEc0Z0lDQWdQSE53WVc1Y2JpQWdJQ0FnSUhzdUxpNXBibTVsY2xCeWIzQnpmVnh1SUNBZ0lDQWdZM056UFh0blpYUlRkSGxzWlhNb0oybHVaR2xqWVhSdmNsTmxjR0Z5WVhSdmNpY3NJSEJ5YjNCektYMWNiaUFnSUNBZ0lHTnNZWE56VG1GdFpUMTdZM2dvZXlBbmFXNWthV05oZEc5eUxYTmxjR0Z5WVhSdmNpYzZJSFJ5ZFdVZ2ZTd2dZMnhoYzNOT1lXMWxLWDFjYmlBZ0lDQXZQbHh1SUNBcE8xeHVmVHRjYmx4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0dkx5Qk1iMkZrYVc1blhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JseHVZMjl1YzNRZ2JHOWhaR2x1WjBSdmRFRnVhVzFoZEdsdmJuTWdQU0JyWlhsbWNtRnRaWE5nWEc0Z0lEQWxMQ0E0TUNVc0lERXdNQ1VnZXlCdmNHRmphWFI1T2lBd095QjlYRzRnSURRd0pTQjdJRzl3WVdOcGRIazZJREU3SUgxY2JtQTdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnNiMkZrYVc1blNXNWthV05oZEc5eVExTlRJRDBnS0h0Y2JpQWdhWE5HYjJOMWMyVmtMRnh1SUNCemFYcGxMRnh1SUNCMGFHVnRaVG9nZTF4dUlDQWdJR052Ykc5eWN5eGNiaUFnSUNCemNHRmphVzVuT2lCN0lHSmhjMlZWYm1sMElIMHNYRzRnSUgwc1hHNTlPaUI3WEc0Z0lHbHpSbTlqZFhObFpEb2dZbTl2YkdWaGJpeGNiaUFnYzJsNlpUb2diblZ0WW1WeUxGeHVJQ0IwYUdWdFpUb2dWR2hsYldVc1hHNTlLU0E5UGlBb2UxeHVJQ0JzWVdKbGJEb2dKMnh2WVdScGJtZEpibVJwWTJGMGIzSW5MRnh1SUNCamIyeHZjam9nYVhOR2IyTjFjMlZrSUQ4Z1kyOXNiM0p6TG01bGRYUnlZV3cyTUNBNklHTnZiRzl5Y3k1dVpYVjBjbUZzTWpBc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnY0dGa1pHbHVaem9nWW1GelpWVnVhWFFnS2lBeUxGeHVJQ0IwY21GdWMybDBhVzl1T2lBblkyOXNiM0lnTVRVd2JYTW5MRnh1SUNCaGJHbG5ibE5sYkdZNklDZGpaVzUwWlhJbkxGeHVJQ0JtYjI1MFUybDZaVG9nYzJsNlpTeGNiaUFnYkdsdVpVaGxhV2RvZERvZ01TeGNiaUFnYldGeVoybHVVbWxuYUhRNklITnBlbVVzWEc0Z0lIUmxlSFJCYkdsbmJqb2dKMk5sYm5SbGNpY3NYRzRnSUhabGNuUnBZMkZzUVd4cFoyNDZJQ2R0YVdSa2JHVW5MRnh1ZlNrN1hHNWNiblI1Y0dVZ1JHOTBVSEp2Y0hNZ1BTQjdJR052Ykc5eU9pQnpkSEpwYm1jc0lHUmxiR0Y1T2lCdWRXMWlaWElzSUc5bVpuTmxkRG9nWW05dmJHVmhiaUI5TzF4dVkyOXVjM1FnVEc5aFpHbHVaMFJ2ZENBOUlDaDdJR052Ykc5eUxDQmtaV3hoZVN3Z2IyWm1jMlYwSUgwNklFUnZkRkJ5YjNCektTQTlQaUFvWEc0Z0lEeHpjR0Z1WEc0Z0lDQWdZM056UFh0N1hHNGdJQ0FnSUNCaGJtbHRZWFJwYjI0NklHQWtlMnh2WVdScGJtZEViM1JCYm1sdFlYUnBiMjV6ZlNBeGN5QmxZWE5sTFdsdUxXOTFkQ0FrZTJSbGJHRjVmVzF6SUdsdVptbHVhWFJsTzJBc1hHNGdJQ0FnSUNCaVlXTnJaM0p2ZFc1a1EyOXNiM0k2SUdOdmJHOXlMRnh1SUNBZ0lDQWdZbTl5WkdWeVVtRmthWFZ6T2lBbk1XVnRPeWNzWEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUFuYVc1c2FXNWxMV0pzYjJOck95Y3NYRzRnSUNBZ0lDQnRZWEpuYVc1TVpXWjBPaUJ2Wm1aelpYUWdQeUFuTVdWdE95Y2dPaUJ1ZFd4c0xGeHVJQ0FnSUNBZ2FHVnBaMmgwT2lBbk1XVnRPeWNzWEc0Z0lDQWdJQ0IyWlhKMGFXTmhiRUZzYVdkdU9pQW5kRzl3T3ljc1hHNGdJQ0FnSUNCM2FXUjBhRG9nSnpGbGJUc25MRnh1SUNBZ0lIMTlYRzRnSUM4K1hHNHBPMXh1WEc1bGVIQnZjblFnZEhsd1pTQk1iMkZrYVc1blNXTnZibEJ5YjNCeklEMGdlMXh1SUNBdktpb2dVSEp2Y0hNZ2RHaGhkQ0IzYVd4c0lHSmxJSEJoYzNObFpDQnZiaUIwYnlCMGFHVWdZMmhwYkdSeVpXNHVJQ292WEc0Z0lHbHVibVZ5VUhKdmNITTZJR0Z1ZVN4Y2JpQWdMeW9xSUZSb1pTQm1iMk4xYzJWa0lITjBZWFJsSUc5bUlIUm9aU0J6Wld4bFkzUXVJQ292WEc0Z0lHbHpSbTlqZFhObFpEb2dZbTl2YkdWaGJpeGNiaUFnTHlvcUlGZG9aWFJvWlhJZ2RHaGxJSFJsZUhRZ2FYTWdjbWxuYUhRZ2RHOGdiR1ZtZENBcUwxeHVJQ0JwYzFKMGJEb2dZbTl2YkdWaGJpeGNibjBnSmlCRGIyMXRiMjVRY205d2N5QW1JSHRjYmlBZ0lDQXZLaW9nVTJWMElITnBlbVVnYjJZZ2RHaGxJR052Ym5SaGFXNWxjaTRnS2k5Y2JpQWdJQ0J6YVhwbE9pQnVkVzFpWlhJc1hHNGdJSDA3WEc1bGVIQnZjblFnWTI5dWMzUWdURzloWkdsdVowbHVaR2xqWVhSdmNpQTlJQ2h3Y205d2N6b2dURzloWkdsdVowbGpiMjVRY205d2N5a2dQVDRnZTF4dUlDQmpiMjV6ZENCN1hHNGdJQ0FnWTJ4aGMzTk9ZVzFsTEZ4dUlDQWdJR040TEZ4dUlDQWdJR2RsZEZOMGVXeGxjeXhjYmlBZ0lDQnBibTVsY2xCeWIzQnpMRnh1SUNBZ0lHbHpSbTlqZFhObFpDeGNiaUFnSUNCcGMxSjBiQ3hjYmlBZ0lDQjBhR1Z0WlRvZ2V5QmpiMnh2Y25NZ2ZTeGNiaUFnZlNBOUlIQnliM0J6TzF4dUlDQmpiMjV6ZENCamIyeHZjaUE5SUdselJtOWpkWE5sWkNBL0lHTnZiRzl5Y3k1dVpYVjBjbUZzT0RBZ09pQmpiMnh2Y25NdWJtVjFkSEpoYkRJd08xeHVYRzRnSUhKbGRIVnliaUFvWEc0Z0lDQWdQR1JwZGx4dUlDQWdJQ0FnZXk0dUxtbHVibVZ5VUhKdmNITjlYRzRnSUNBZ0lDQmpjM005ZTJkbGRGTjBlV3hsY3lnbmJHOWhaR2x1WjBsdVpHbGpZWFJ2Y2ljc0lIQnliM0J6S1gxY2JpQWdJQ0FnSUdOc1lYTnpUbUZ0WlQxN1kzZ29YRzRnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNCcGJtUnBZMkYwYjNJNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUNBZ0oyeHZZV1JwYm1jdGFXNWthV05oZEc5eUp6b2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdZMnhoYzNOT1lXMWxYRzRnSUNBZ0lDQXBmVnh1SUNBZ0lENWNiaUFnSUNBZ0lEeE1iMkZrYVc1blJHOTBJR052Ykc5eVBYdGpiMnh2Y24wZ1pHVnNZWGs5ZXpCOUlHOW1abk5sZEQxN2FYTlNkR3g5SUM4K1hHNGdJQ0FnSUNBOFRHOWhaR2x1WjBSdmRDQmpiMnh2Y2oxN1kyOXNiM0o5SUdSbGJHRjVQWHN4TmpCOUlHOW1abk5sZENBdlBseHVJQ0FnSUNBZ1BFeHZZV1JwYm1kRWIzUWdZMjlzYjNJOWUyTnZiRzl5ZlNCa1pXeGhlVDE3TXpJd2ZTQnZabVp6WlhROWV5RnBjMUowYkgwZ0x6NWNiaUFnSUNBOEwyUnBkajVjYmlBZ0tUdGNibjA3WEc1TWIyRmthVzVuU1c1a2FXTmhkRzl5TG1SbFptRjFiSFJRY205d2N5QTlJSHNnYzJsNlpUb2dOQ0I5TzF4dUlsMTkgKi9cIlxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEljb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbnZhciBTdmcgPSBmdW5jdGlvbiBTdmcoX3JlZikge1xuICB2YXIgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcInNpemVcIl0pO1xuXG4gIHJldHVybiBqc3goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIGhlaWdodDogc2l6ZSxcbiAgICB3aWR0aDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyMCAyMFwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgZm9jdXNhYmxlOiBcImZhbHNlXCIsXG4gICAgY3NzOiBfcmVmMlxuICB9LCBwcm9wcykpO1xufTtcblxudmFyIENyb3NzSWNvbiA9IGZ1bmN0aW9uIENyb3NzSWNvbihwcm9wcykge1xuICByZXR1cm4ganN4KFN2ZywgX2V4dGVuZHMoe1xuICAgIHNpemU6IDIwXG4gIH0sIHByb3BzKSwganN4KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuMzQ4IDE0Ljg0OWMtMC40NjkgMC40NjktMS4yMjkgMC40NjktMS42OTcgMGwtMi42NTEtMy4wMzAtMi42NTEgMy4wMjljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDAtMC40NjktMC40NjktMC40NjktMS4yMjkgMC0xLjY5N2wyLjc1OC0zLjE1LTIuNzU5LTMuMTUyYy0wLjQ2OS0wLjQ2OS0wLjQ2OS0xLjIyOCAwLTEuNjk3czEuMjI4LTAuNDY5IDEuNjk3IDBsMi42NTIgMy4wMzEgMi42NTEtMy4wMzFjMC40NjktMC40NjkgMS4yMjgtMC40NjkgMS42OTcgMHMwLjQ2OSAxLjIyOSAwIDEuNjk3bC0yLjc1OCAzLjE1MiAyLjc1OCAzLjE1YzAuNDY5IDAuNDY5IDAuNDY5IDEuMjI5IDAgMS42OTh6XCJcbiAgfSkpO1xufTtcbnZhciBEb3duQ2hldnJvbiA9IGZ1bmN0aW9uIERvd25DaGV2cm9uKHByb3BzKSB7XG4gIHJldHVybiBqc3goU3ZnLCBfZXh0ZW5kcyh7XG4gICAgc2l6ZTogMjBcbiAgfSwgcHJvcHMpLCBqc3goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjUxNiA3LjU0OGMwLjQzNi0wLjQ0NiAxLjA0My0wLjQ4MSAxLjU3NiAwbDMuOTA4IDMuNzQ3IDMuOTA4LTMuNzQ3YzAuNTMzLTAuNDgxIDEuMTQxLTAuNDQ2IDEuNTc0IDAgMC40MzYgMC40NDUgMC40MDggMS4xOTcgMCAxLjYxNS0wLjQwNiAwLjQxOC00LjY5NSA0LjUwMi00LjY5NSA0LjUwMi0wLjIxNyAwLjIyMy0wLjUwMiAwLjMzNS0wLjc4NyAwLjMzNXMtMC41Ny0wLjExMi0wLjc4OS0wLjMzNWMwIDAtNC4yODctNC4wODQtNC42OTUtNC41MDJzLTAuNDM2LTEuMTcgMC0xLjYxNXpcIlxuICB9KSk7XG59OyAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgQnV0dG9uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBiYXNlQ1NTID0gZnVuY3Rpb24gYmFzZUNTUyhfcmVmMykge1xuICB2YXIgaXNGb2N1c2VkID0gX3JlZjMuaXNGb2N1c2VkLFxuICAgICAgX3JlZjMkdGhlbWUgPSBfcmVmMy50aGVtZSxcbiAgICAgIGJhc2VVbml0ID0gX3JlZjMkdGhlbWUuc3BhY2luZy5iYXNlVW5pdCxcbiAgICAgIGNvbG9ycyA9IF9yZWYzJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogJ2luZGljYXRvckNvbnRhaW5lcicsXG4gICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDIsXG4gICAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcbiAgICAnOmhvdmVyJzoge1xuICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwXG4gICAgfVxuICB9O1xufTtcblxudmFyIGRyb3Bkb3duSW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbnZhciBEcm9wZG93bkluZGljYXRvciA9IGZ1bmN0aW9uIERyb3Bkb3duSW5kaWNhdG9yKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgY3ggPSBwcm9wcy5jeCxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBpbm5lclByb3BzLCB7XG4gICAgY3NzOiBnZXRTdHlsZXMoJ2Ryb3Bkb3duSW5kaWNhdG9yJywgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgJ2Ryb3Bkb3duLWluZGljYXRvcic6IHRydWVcbiAgICB9LCBjbGFzc05hbWUpXG4gIH0pLCBjaGlsZHJlbiB8fCBqc3goRG93bkNoZXZyb24sIG51bGwpKTtcbn07XG52YXIgY2xlYXJJbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xudmFyIENsZWFySW5kaWNhdG9yID0gZnVuY3Rpb24gQ2xlYXJJbmRpY2F0b3IocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBjeCA9IHByb3BzLmN4LFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGlubmVyUHJvcHMsIHtcbiAgICBjc3M6IGdldFN0eWxlcygnY2xlYXJJbmRpY2F0b3InLCBwcm9wcyksXG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAnY2xlYXItaW5kaWNhdG9yJzogdHJ1ZVxuICAgIH0sIGNsYXNzTmFtZSlcbiAgfSksIGNoaWxkcmVuIHx8IGpzeChDcm9zc0ljb24sIG51bGwpKTtcbn07IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VwYXJhdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGluZGljYXRvclNlcGFyYXRvckNTUyA9IGZ1bmN0aW9uIGluZGljYXRvclNlcGFyYXRvckNTUyhfcmVmNCkge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWY0LmlzRGlzYWJsZWQsXG4gICAgICBfcmVmNCR0aGVtZSA9IF9yZWY0LnRoZW1lLFxuICAgICAgYmFzZVVuaXQgPSBfcmVmNCR0aGVtZS5zcGFjaW5nLmJhc2VVbml0LFxuICAgICAgY29sb3JzID0gX3JlZjQkdGhlbWUuY29sb3JzO1xuICByZXR1cm4ge1xuICAgIGxhYmVsOiAnaW5kaWNhdG9yU2VwYXJhdG9yJyxcbiAgICBhbGlnblNlbGY6ICdzdHJldGNoJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBtYXJnaW5Cb3R0b206IGJhc2VVbml0ICogMixcbiAgICBtYXJnaW5Ub3A6IGJhc2VVbml0ICogMixcbiAgICB3aWR0aDogMVxuICB9O1xufTtcbnZhciBJbmRpY2F0b3JTZXBhcmF0b3IgPSBmdW5jdGlvbiBJbmRpY2F0b3JTZXBhcmF0b3IocHJvcHMpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGlubmVyUHJvcHMsIHtcbiAgICBjc3M6IGdldFN0eWxlcygnaW5kaWNhdG9yU2VwYXJhdG9yJywgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgJ2luZGljYXRvci1zZXBhcmF0b3InOiB0cnVlXG4gICAgfSwgY2xhc3NOYW1lKVxuICB9KSk7XG59OyAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIExvYWRpbmdcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0KCkpO1xudmFyIGxvYWRpbmdJbmRpY2F0b3JDU1MgPSBmdW5jdGlvbiBsb2FkaW5nSW5kaWNhdG9yQ1NTKF9yZWY1KSB7XG4gIHZhciBpc0ZvY3VzZWQgPSBfcmVmNS5pc0ZvY3VzZWQsXG4gICAgICBzaXplID0gX3JlZjUuc2l6ZSxcbiAgICAgIF9yZWY1JHRoZW1lID0gX3JlZjUudGhlbWUsXG4gICAgICBjb2xvcnMgPSBfcmVmNSR0aGVtZS5jb2xvcnMsXG4gICAgICBiYXNlVW5pdCA9IF9yZWY1JHRoZW1lLnNwYWNpbmcuYmFzZVVuaXQ7XG4gIHJldHVybiB7XG4gICAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICAgIGFsaWduU2VsZjogJ2NlbnRlcicsXG4gICAgZm9udFNpemU6IHNpemUsXG4gICAgbGluZUhlaWdodDogMSxcbiAgICBtYXJnaW5SaWdodDogc2l6ZSxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnXG4gIH07XG59O1xuXG52YXIgTG9hZGluZ0RvdCA9IGZ1bmN0aW9uIExvYWRpbmdEb3QoX3JlZjYpIHtcbiAgdmFyIGNvbG9yID0gX3JlZjYuY29sb3IsXG4gICAgICBkZWxheSA9IF9yZWY2LmRlbGF5LFxuICAgICAgb2Zmc2V0ID0gX3JlZjYub2Zmc2V0O1xuICByZXR1cm4ganN4KFwic3BhblwiLCB7XG4gICAgY3NzOlxuICAgIC8qI19fUFVSRV9fKi9cbiAgICBfY3NzKHtcbiAgICAgIGFuaW1hdGlvbjogXCJcIi5jb25jYXQobG9hZGluZ0RvdEFuaW1hdGlvbnMsIFwiIDFzIGVhc2UtaW4tb3V0IFwiKS5jb25jYXQoZGVsYXksIFwibXMgaW5maW5pdGU7XCIpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcixcbiAgICAgIGJvcmRlclJhZGl1czogJzFlbTsnLFxuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jazsnLFxuICAgICAgbWFyZ2luTGVmdDogb2Zmc2V0ID8gJzFlbTsnIDogbnVsbCxcbiAgICAgIGhlaWdodDogJzFlbTsnLFxuICAgICAgdmVydGljYWxBbGlnbjogJ3RvcDsnLFxuICAgICAgd2lkdGg6ICcxZW07J1xuICAgIH0sIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltbHVaR2xqWVhSdmNuTXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCYzB4Sklpd2labWxzWlNJNkltbHVaR2xqWVhSdmNuTXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdkx5QkFabXh2ZDF4dUx5b3FJRUJxYzNnZ2FuTjRJQ292WEc1cGJYQnZjblFnZXlCMGVYQmxJRTV2WkdVZ2ZTQm1jbTl0SUNkeVpXRmpkQ2M3WEc1cGJYQnZjblFnZXlCcWMzZ3NJR3RsZVdaeVlXMWxjeUI5SUdaeWIyMGdKMEJsYlc5MGFXOXVMMk52Y21Vbk8xeHVYRzVwYlhCdmNuUWdkSGx3WlNCN0lFTnZiVzF2YmxCeWIzQnpMQ0JVYUdWdFpTQjlJR1p5YjIwZ0p5NHVMM1I1Y0dWekp6dGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCRWNtOXdaRzkzYmlBbUlFTnNaV0Z5SUVsamIyNXpYRzR2THlBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNibHh1WTI5dWMzUWdVM1puSUQwZ0tIc2djMmw2WlN3Z0xpNHVjSEp2Y0hNZ2ZUb2dleUJ6YVhwbE9pQnVkVzFpWlhJZ2ZTa2dQVDRnS0Z4dUlDQThjM1puWEc0Z0lDQWdhR1ZwWjJoMFBYdHphWHBsZlZ4dUlDQWdJSGRwWkhSb1BYdHphWHBsZlZ4dUlDQWdJSFpwWlhkQ2IzZzlYQ0l3SURBZ01qQWdNakJjSWx4dUlDQWdJR0Z5YVdFdGFHbGtaR1Z1UFZ3aWRISjFaVndpWEc0Z0lDQWdabTlqZFhOaFlteGxQVndpWm1Gc2MyVmNJbHh1SUNBZ0lHTnpjejE3ZTF4dUlDQWdJQ0FnWkdsemNHeGhlVG9nSjJsdWJHbHVaUzFpYkc5amF5Y3NYRzRnSUNBZ0lDQm1hV3hzT2lBblkzVnljbVZ1ZEVOdmJHOXlKeXhjYmlBZ0lDQWdJR3hwYm1WSVpXbG5hSFE2SURFc1hHNGdJQ0FnSUNCemRISnZhMlU2SUNkamRYSnlaVzUwUTI5c2IzSW5MRnh1SUNBZ0lDQWdjM1J5YjJ0bFYybGtkR2c2SURBc1hHNGdJQ0FnZlgxY2JpQWdJQ0I3TGk0dWNISnZjSE45WEc0Z0lDOCtYRzRwTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnUTNKdmMzTkpZMjl1SUQwZ0tIQnliM0J6T2lCaGJua3BJRDArSUNoY2JpQWdQRk4yWnlCemFYcGxQWHN5TUgwZ2V5NHVMbkJ5YjNCemZUNWNiaUFnSUNBOGNHRjBhQ0JrUFZ3aVRURTBMak0wT0NBeE5DNDRORGxqTFRBdU5EWTVJREF1TkRZNUxURXVNakk1SURBdU5EWTVMVEV1TmprM0lEQnNMVEl1TmpVeExUTXVNRE13TFRJdU5qVXhJRE11TURJNVl5MHdMalEyT1NBd0xqUTJPUzB4TGpJeU9TQXdMalEyT1MweExqWTVOeUF3TFRBdU5EWTVMVEF1TkRZNUxUQXVORFk1TFRFdU1qSTVJREF0TVM0Mk9UZHNNaTQzTlRndE15NHhOUzB5TGpjMU9TMHpMakUxTW1NdE1DNDBOamt0TUM0ME5qa3RNQzQwTmprdE1TNHlNamdnTUMweExqWTVOM014TGpJeU9DMHdMalEyT1NBeExqWTVOeUF3YkRJdU5qVXlJRE11TURNeElESXVOalV4TFRNdU1ETXhZekF1TkRZNUxUQXVORFk1SURFdU1qSTRMVEF1TkRZNUlERXVOamszSURCek1DNDBOamtnTVM0eU1qa2dNQ0F4TGpZNU4yd3RNaTQzTlRnZ015NHhOVElnTWk0M05UZ2dNeTR4TldNd0xqUTJPU0F3TGpRMk9TQXdMalEyT1NBeExqSXlPU0F3SURFdU5qazRlbHdpSUM4K1hHNGdJRHd2VTNablBseHVLVHRjYm1WNGNHOXlkQ0JqYjI1emRDQkViM2R1UTJobGRuSnZiaUE5SUNod2NtOXdjem9nWVc1NUtTQTlQaUFvWEc0Z0lEeFRkbWNnYzJsNlpUMTdNakI5SUhzdUxpNXdjbTl3YzMwK1hHNGdJQ0FnUEhCaGRHZ2daRDFjSWswMExqVXhOaUEzTGpVME9HTXdMalF6Tmkwd0xqUTBOaUF4TGpBME15MHdMalE0TVNBeExqVTNOaUF3YkRNdU9UQTRJRE11TnpRM0lETXVPVEE0TFRNdU56UTNZekF1TlRNekxUQXVORGd4SURFdU1UUXhMVEF1TkRRMklERXVOVGMwSURBZ01DNDBNellnTUM0ME5EVWdNQzQwTURnZ01TNHhPVGNnTUNBeExqWXhOUzB3TGpRd05pQXdMalF4T0MwMExqWTVOU0EwTGpVd01pMDBMalk1TlNBMExqVXdNaTB3TGpJeE55QXdMakl5TXkwd0xqVXdNaUF3TGpNek5TMHdMamM0TnlBd0xqTXpOWE10TUM0MU55MHdMakV4TWkwd0xqYzRPUzB3TGpNek5XTXdJREF0TkM0eU9EY3ROQzR3T0RRdE5DNDJPVFV0TkM0MU1ESnpMVEF1TkRNMkxURXVNVGNnTUMweExqWXhOWHBjSWlBdlBseHVJQ0E4TDFOMlp6NWNiaWs3WEc1Y2JpOHZJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dUx5OGdSSEp2Y0dSdmQyNGdKaUJEYkdWaGNpQkNkWFIwYjI1elhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JseHVaWGh3YjNKMElIUjVjR1VnU1c1a2FXTmhkRzl5VUhKdmNITWdQU0JEYjIxdGIyNVFjbTl3Y3lBbUlIdGNiaUFnTHlvcUlGUm9aU0JqYUdsc1pISmxiaUIwYnlCaVpTQnlaVzVrWlhKbFpDQnBibk5wWkdVZ2RHaGxJR2x1WkdsallYUnZjaTRnS2k5Y2JpQWdZMmhwYkdSeVpXNDZJRTV2WkdVc1hHNGdJQzhxS2lCUWNtOXdjeUIwYUdGMElIZHBiR3dnWW1VZ2NHRnpjMlZrSUc5dUlIUnZJSFJvWlNCamFHbHNaSEpsYmk0Z0tpOWNiaUFnYVc1dVpYSlFjbTl3Y3pvZ1lXNTVMRnh1SUNBdktpb2dWR2hsSUdadlkzVnpaV1FnYzNSaGRHVWdiMllnZEdobElITmxiR1ZqZEM0Z0tpOWNiaUFnYVhOR2IyTjFjMlZrT2lCaWIyOXNaV0Z1TEZ4dUlDQXZLaW9nVjJobGRHaGxjaUIwYUdVZ2RHVjRkQ0JwY3lCeWFXZG9kQ0IwYnlCc1pXWjBJQ292WEc0Z0lHbHpVblJzT2lCaWIyOXNaV0Z1TEZ4dWZUdGNibHh1WTI5dWMzUWdZbUZ6WlVOVFV5QTlJQ2g3WEc0Z0lHbHpSbTlqZFhObFpDeGNiaUFnZEdobGJXVTZJSHRjYmlBZ0lDQnpjR0ZqYVc1bk9pQjdJR0poYzJWVmJtbDBJSDBzWEc0Z0lDQWdZMjlzYjNKekxGeHVJQ0I5TEZ4dWZUb2dTVzVrYVdOaGRHOXlVSEp2Y0hNcElEMCtJQ2g3WEc0Z0lHeGhZbVZzT2lBbmFXNWthV05oZEc5eVEyOXVkR0ZwYm1WeUp5eGNiaUFnWTI5c2IzSTZJR2x6Um05amRYTmxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNOakFnT2lCamIyeHZjbk11Ym1WMWRISmhiREl3TEZ4dUlDQmthWE53YkdGNU9pQW5abXhsZUNjc1hHNGdJSEJoWkdScGJtYzZJR0poYzJWVmJtbDBJQ29nTWl4Y2JpQWdkSEpoYm5OcGRHbHZiam9nSjJOdmJHOXlJREUxTUcxekp5eGNibHh1SUNBbk9taHZkbVZ5SnpvZ2UxeHVJQ0FnSUdOdmJHOXlPaUJwYzBadlkzVnpaV1FnUHlCamIyeHZjbk11Ym1WMWRISmhiRGd3SURvZ1kyOXNiM0p6TG01bGRYUnlZV3cwTUN4Y2JpQWdmU3hjYm4wcE8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1pISnZjR1J2ZDI1SmJtUnBZMkYwYjNKRFUxTWdQU0JpWVhObFExTlRPMXh1Wlhod2IzSjBJR052Ym5OMElFUnliM0JrYjNkdVNXNWthV05oZEc5eUlEMGdLSEJ5YjNCek9pQkpibVJwWTJGMGIzSlFjbTl3Y3lrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOb2FXeGtjbVZ1TENCamJHRnpjMDVoYldVc0lHTjRMQ0JuWlhSVGRIbHNaWE1zSUdsdWJtVnlVSEp2Y0hNZ2ZTQTlJSEJ5YjNCek8xeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJSHN1TGk1cGJtNWxjbEJ5YjNCemZWeHVJQ0FnSUNBZ1kzTnpQWHRuWlhSVGRIbHNaWE1vSjJSeWIzQmtiM2R1U1c1a2FXTmhkRzl5Snl3Z2NISnZjSE1wZlZ4dUlDQWdJQ0FnWTJ4aGMzTk9ZVzFsUFh0amVDaGNiaUFnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUdsdVpHbGpZWFJ2Y2pvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnSUNBblpISnZjR1J2ZDI0dGFXNWthV05oZEc5eUp6b2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdZMnhoYzNOT1lXMWxYRzRnSUNBZ0lDQXBmVnh1SUNBZ0lENWNiaUFnSUNBZ0lIdGphR2xzWkhKbGJpQjhmQ0E4Ukc5M2JrTm9aWFp5YjI0Z0x6NTlYRzRnSUNBZ1BDOWthWFkrWEc0Z0lDazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWTJ4bFlYSkpibVJwWTJGMGIzSkRVMU1nUFNCaVlYTmxRMU5UTzF4dVpYaHdiM0owSUdOdmJuTjBJRU5zWldGeVNXNWthV05oZEc5eUlEMGdLSEJ5YjNCek9pQkpibVJwWTJGMGIzSlFjbTl3Y3lrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOb2FXeGtjbVZ1TENCamJHRnpjMDVoYldVc0lHTjRMQ0JuWlhSVGRIbHNaWE1zSUdsdWJtVnlVSEp2Y0hNZ2ZTQTlJSEJ5YjNCek8xeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJSHN1TGk1cGJtNWxjbEJ5YjNCemZWeHVJQ0FnSUNBZ1kzTnpQWHRuWlhSVGRIbHNaWE1vSjJOc1pXRnlTVzVrYVdOaGRHOXlKeXdnY0hKdmNITXBmVnh1SUNBZ0lDQWdZMnhoYzNOT1lXMWxQWHRqZUNoY2JpQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJR2x1WkdsallYUnZjam9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdJQ0FuWTJ4bFlYSXRhVzVrYVdOaGRHOXlKem9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnWTJ4aGMzTk9ZVzFsWEc0Z0lDQWdJQ0FwZlZ4dUlDQWdJRDVjYmlBZ0lDQWdJSHRqYUdsc1pISmxiaUI4ZkNBOFEzSnZjM05KWTI5dUlDOCtmVnh1SUNBZ0lEd3ZaR2wyUGx4dUlDQXBPMXh1ZlR0Y2JseHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMeUJUWlhCaGNtRjBiM0pjYmk4dklEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1WEc1MGVYQmxJRk5sY0dGeVlYUnZjbE4wWVhSbElEMGdleUJwYzBScGMyRmliR1ZrT2lCaWIyOXNaV0Z1SUgwN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCcGJtUnBZMkYwYjNKVFpYQmhjbUYwYjNKRFUxTWdQU0FvZTF4dUlDQnBjMFJwYzJGaWJHVmtMRnh1SUNCMGFHVnRaVG9nZTF4dUlDQWdJSE53WVdOcGJtYzZJSHNnWW1GelpWVnVhWFFnZlN4Y2JpQWdJQ0JqYjJ4dmNuTXNYRzRnSUgwc1hHNTlPaUJEYjIxdGIyNVFjbTl3Y3lBbUlGTmxjR0Z5WVhSdmNsTjBZWFJsS1NBOVBpQW9lMXh1SUNCc1lXSmxiRG9nSjJsdVpHbGpZWFJ2Y2xObGNHRnlZWFJ2Y2ljc1hHNGdJR0ZzYVdkdVUyVnNaam9nSjNOMGNtVjBZMmduTEZ4dUlDQmlZV05yWjNKdmRXNWtRMjlzYjNJNklHbHpSR2x6WVdKc1pXUWdQeUJqYjJ4dmNuTXVibVYxZEhKaGJERXdJRG9nWTI5c2IzSnpMbTVsZFhSeVlXd3lNQ3hjYmlBZ2JXRnlaMmx1UW05MGRHOXRPaUJpWVhObFZXNXBkQ0FxSURJc1hHNGdJRzFoY21kcGJsUnZjRG9nWW1GelpWVnVhWFFnS2lBeUxGeHVJQ0IzYVdSMGFEb2dNU3hjYm4wcE8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1NXNWthV05oZEc5eVUyVndZWEpoZEc5eUlEMGdLSEJ5YjNCek9pQkpibVJwWTJGMGIzSlFjbTl3Y3lrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOc1lYTnpUbUZ0WlN3Z1kzZ3NJR2RsZEZOMGVXeGxjeXdnYVc1dVpYSlFjbTl3Y3lCOUlEMGdjSEp2Y0hNN1hHNGdJSEpsZEhWeWJpQW9YRzRnSUNBZ1BITndZVzVjYmlBZ0lDQWdJSHN1TGk1cGJtNWxjbEJ5YjNCemZWeHVJQ0FnSUNBZ1kzTnpQWHRuWlhSVGRIbHNaWE1vSjJsdVpHbGpZWFJ2Y2xObGNHRnlZWFJ2Y2ljc0lIQnliM0J6S1gxY2JpQWdJQ0FnSUdOc1lYTnpUbUZ0WlQxN1kzZ29leUFuYVc1a2FXTmhkRzl5TFhObGNHRnlZWFJ2Y2ljNklIUnlkV1VnZlN3Z1kyeGhjM05PWVcxbEtYMWNiaUFnSUNBdlBseHVJQ0FwTzF4dWZUdGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCTWIyRmthVzVuWEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVkyOXVjM1FnYkc5aFpHbHVaMFJ2ZEVGdWFXMWhkR2x2Ym5NZ1BTQnJaWGxtY21GdFpYTmdYRzRnSURBbExDQTRNQ1VzSURFd01DVWdleUJ2Y0dGamFYUjVPaUF3T3lCOVhHNGdJRFF3SlNCN0lHOXdZV05wZEhrNklERTdJSDFjYm1BN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCc2IyRmthVzVuU1c1a2FXTmhkRzl5UTFOVElEMGdLSHRjYmlBZ2FYTkdiMk4xYzJWa0xGeHVJQ0J6YVhwbExGeHVJQ0IwYUdWdFpUb2dlMXh1SUNBZ0lHTnZiRzl5Y3l4Y2JpQWdJQ0J6Y0dGamFXNW5PaUI3SUdKaGMyVlZibWwwSUgwc1hHNGdJSDBzWEc1OU9pQjdYRzRnSUdselJtOWpkWE5sWkRvZ1ltOXZiR1ZoYml4Y2JpQWdjMmw2WlRvZ2JuVnRZbVZ5TEZ4dUlDQjBhR1Z0WlRvZ1ZHaGxiV1VzWEc1OUtTQTlQaUFvZTF4dUlDQnNZV0psYkRvZ0oyeHZZV1JwYm1kSmJtUnBZMkYwYjNJbkxGeHVJQ0JqYjJ4dmNqb2dhWE5HYjJOMWMyVmtJRDhnWTI5c2IzSnpMbTVsZFhSeVlXdzJNQ0E2SUdOdmJHOXljeTV1WlhWMGNtRnNNakFzWEc0Z0lHUnBjM0JzWVhrNklDZG1iR1Y0Snl4Y2JpQWdjR0ZrWkdsdVp6b2dZbUZ6WlZWdWFYUWdLaUF5TEZ4dUlDQjBjbUZ1YzJsMGFXOXVPaUFuWTI5c2IzSWdNVFV3YlhNbkxGeHVJQ0JoYkdsbmJsTmxiR1k2SUNkalpXNTBaWEluTEZ4dUlDQm1iMjUwVTJsNlpUb2djMmw2WlN4Y2JpQWdiR2x1WlVobGFXZG9kRG9nTVN4Y2JpQWdiV0Z5WjJsdVVtbG5hSFE2SUhOcGVtVXNYRzRnSUhSbGVIUkJiR2xuYmpvZ0oyTmxiblJsY2ljc1hHNGdJSFpsY25ScFkyRnNRV3hwWjI0NklDZHRhV1JrYkdVbkxGeHVmU2s3WEc1Y2JuUjVjR1VnUkc5MFVISnZjSE1nUFNCN0lHTnZiRzl5T2lCemRISnBibWNzSUdSbGJHRjVPaUJ1ZFcxaVpYSXNJRzltWm5ObGREb2dZbTl2YkdWaGJpQjlPMXh1WTI5dWMzUWdURzloWkdsdVowUnZkQ0E5SUNoN0lHTnZiRzl5TENCa1pXeGhlU3dnYjJabWMyVjBJSDA2SUVSdmRGQnliM0J6S1NBOVBpQW9YRzRnSUR4emNHRnVYRzRnSUNBZ1kzTnpQWHQ3WEc0Z0lDQWdJQ0JoYm1sdFlYUnBiMjQ2SUdBa2UyeHZZV1JwYm1kRWIzUkJibWx0WVhScGIyNXpmU0F4Y3lCbFlYTmxMV2x1TFc5MWRDQWtlMlJsYkdGNWZXMXpJR2x1Wm1sdWFYUmxPMkFzWEc0Z0lDQWdJQ0JpWVdOclozSnZkVzVrUTI5c2IzSTZJR052Ykc5eUxGeHVJQ0FnSUNBZ1ltOXlaR1Z5VW1Ga2FYVnpPaUFuTVdWdE95Y3NYRzRnSUNBZ0lDQmthWE53YkdGNU9pQW5hVzVzYVc1bExXSnNiMk5yT3ljc1hHNGdJQ0FnSUNCdFlYSm5hVzVNWldaME9pQnZabVp6WlhRZ1B5QW5NV1Z0T3ljZ09pQnVkV3hzTEZ4dUlDQWdJQ0FnYUdWcFoyaDBPaUFuTVdWdE95Y3NYRzRnSUNBZ0lDQjJaWEowYVdOaGJFRnNhV2R1T2lBbmRHOXdPeWNzWEc0Z0lDQWdJQ0IzYVdSMGFEb2dKekZsYlRzbkxGeHVJQ0FnSUgxOVhHNGdJQzgrWEc0cE8xeHVYRzVsZUhCdmNuUWdkSGx3WlNCTWIyRmthVzVuU1dOdmJsQnliM0J6SUQwZ2UxeHVJQ0F2S2lvZ1VISnZjSE1nZEdoaGRDQjNhV3hzSUdKbElIQmhjM05sWkNCdmJpQjBieUIwYUdVZ1kyaHBiR1J5Wlc0dUlDb3ZYRzRnSUdsdWJtVnlVSEp2Y0hNNklHRnVlU3hjYmlBZ0x5b3FJRlJvWlNCbWIyTjFjMlZrSUhOMFlYUmxJRzltSUhSb1pTQnpaV3hsWTNRdUlDb3ZYRzRnSUdselJtOWpkWE5sWkRvZ1ltOXZiR1ZoYml4Y2JpQWdMeW9xSUZkb1pYUm9aWElnZEdobElIUmxlSFFnYVhNZ2NtbG5hSFFnZEc4Z2JHVm1kQ0FxTDF4dUlDQnBjMUowYkRvZ1ltOXZiR1ZoYml4Y2JuMGdKaUJEYjIxdGIyNVFjbTl3Y3lBbUlIdGNiaUFnSUNBdktpb2dVMlYwSUhOcGVtVWdiMllnZEdobElHTnZiblJoYVc1bGNpNGdLaTljYmlBZ0lDQnphWHBsT2lCdWRXMWlaWElzWEc0Z0lIMDdYRzVsZUhCdmNuUWdZMjl1YzNRZ1RHOWhaR2x1WjBsdVpHbGpZWFJ2Y2lBOUlDaHdjbTl3Y3pvZ1RHOWhaR2x1WjBsamIyNVFjbTl3Y3lrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3WEc0Z0lDQWdZMnhoYzNOT1lXMWxMRnh1SUNBZ0lHTjRMRnh1SUNBZ0lHZGxkRk4wZVd4bGN5eGNiaUFnSUNCcGJtNWxjbEJ5YjNCekxGeHVJQ0FnSUdselJtOWpkWE5sWkN4Y2JpQWdJQ0JwYzFKMGJDeGNiaUFnSUNCMGFHVnRaVG9nZXlCamIyeHZjbk1nZlN4Y2JpQWdmU0E5SUhCeWIzQnpPMXh1SUNCamIyNXpkQ0JqYjJ4dmNpQTlJR2x6Um05amRYTmxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNPREFnT2lCamIyeHZjbk11Ym1WMWRISmhiREl3TzF4dVhHNGdJSEpsZEhWeWJpQW9YRzRnSUNBZ1BHUnBkbHh1SUNBZ0lDQWdleTR1TG1sdWJtVnlVSEp2Y0hOOVhHNGdJQ0FnSUNCamMzTTllMmRsZEZOMGVXeGxjeWduYkc5aFpHbHVaMGx1WkdsallYUnZjaWNzSUhCeWIzQnpLWDFjYmlBZ0lDQWdJR05zWVhOelRtRnRaVDE3WTNnb1hHNGdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0JwYm1ScFkyRjBiM0k2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ0FnSjJ4dllXUnBibWN0YVc1a2FXTmhkRzl5SnpvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ1kyeGhjM05PWVcxbFhHNGdJQ0FnSUNBcGZWeHVJQ0FnSUQ1Y2JpQWdJQ0FnSUR4TWIyRmthVzVuUkc5MElHTnZiRzl5UFh0amIyeHZjbjBnWkdWc1lYazllekI5SUc5bVpuTmxkRDE3YVhOU2RHeDlJQzgrWEc0Z0lDQWdJQ0E4VEc5aFpHbHVaMFJ2ZENCamIyeHZjajE3WTI5c2IzSjlJR1JsYkdGNVBYc3hOakI5SUc5bVpuTmxkQ0F2UGx4dUlDQWdJQ0FnUEV4dllXUnBibWRFYjNRZ1kyOXNiM0k5ZTJOdmJHOXlmU0JrWld4aGVUMTdNekl3ZlNCdlptWnpaWFE5ZXlGcGMxSjBiSDBnTHo1Y2JpQWdJQ0E4TDJScGRqNWNiaUFnS1R0Y2JuMDdYRzVNYjJGa2FXNW5TVzVrYVdOaGRHOXlMbVJsWm1GMWJIUlFjbTl3Y3lBOUlIc2djMmw2WlRvZ05DQjlPMXh1SWwxOSAqL1wiKVxuICB9KTtcbn07XG5cbnZhciBMb2FkaW5nSW5kaWNhdG9yID0gZnVuY3Rpb24gTG9hZGluZ0luZGljYXRvcihwcm9wcykge1xuICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgY3ggPSBwcm9wcy5jeCxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzLFxuICAgICAgaXNGb2N1c2VkID0gcHJvcHMuaXNGb2N1c2VkLFxuICAgICAgaXNSdGwgPSBwcm9wcy5pc1J0bCxcbiAgICAgIGNvbG9ycyA9IHByb3BzLnRoZW1lLmNvbG9ycztcbiAgdmFyIGNvbG9yID0gaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw4MCA6IGNvbG9ycy5uZXV0cmFsMjA7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGlubmVyUHJvcHMsIHtcbiAgICBjc3M6IGdldFN0eWxlcygnbG9hZGluZ0luZGljYXRvcicsIHByb3BzKSxcbiAgICBjbGFzc05hbWU6IGN4KHtcbiAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICdsb2FkaW5nLWluZGljYXRvcic6IHRydWVcbiAgICB9LCBjbGFzc05hbWUpXG4gIH0pLCBqc3goTG9hZGluZ0RvdCwge1xuICAgIGNvbG9yOiBjb2xvcixcbiAgICBkZWxheTogMCxcbiAgICBvZmZzZXQ6IGlzUnRsXG4gIH0pLCBqc3goTG9hZGluZ0RvdCwge1xuICAgIGNvbG9yOiBjb2xvcixcbiAgICBkZWxheTogMTYwLFxuICAgIG9mZnNldDogdHJ1ZVxuICB9KSwganN4KExvYWRpbmdEb3QsIHtcbiAgICBjb2xvcjogY29sb3IsXG4gICAgZGVsYXk6IDMyMCxcbiAgICBvZmZzZXQ6ICFpc1J0bFxuICB9KSk7XG59O1xuTG9hZGluZ0luZGljYXRvci5kZWZhdWx0UHJvcHMgPSB7XG4gIHNpemU6IDRcbn07XG5cbnZhciBjc3MgPSBmdW5jdGlvbiBjc3MoX3JlZikge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIGlzRm9jdXNlZCA9IF9yZWYuaXNGb2N1c2VkLFxuICAgICAgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycyxcbiAgICAgIGJvcmRlclJhZGl1cyA9IF9yZWYkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgICAgc3BhY2luZyA9IF9yZWYkdGhlbWUuc3BhY2luZztcbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogJ2NvbnRyb2wnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsNSA6IGNvbG9ycy5uZXV0cmFsMCxcbiAgICBib3JkZXJDb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMTAgOiBpc0ZvY3VzZWQgPyBjb2xvcnMucHJpbWFyeSA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gICAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm94U2hhZG93OiBpc0ZvY3VzZWQgPyBcIjAgMCAwIDFweCBcIi5jb25jYXQoY29sb3JzLnByaW1hcnkpIDogbnVsbCxcbiAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIG1pbkhlaWdodDogc3BhY2luZy5jb250cm9sSGVpZ2h0LFxuICAgIG91dGxpbmU6ICcwICFpbXBvcnRhbnQnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHRyYW5zaXRpb246ICdhbGwgMTAwbXMnLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgYm9yZGVyQ29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5wcmltYXJ5IDogY29sb3JzLm5ldXRyYWwzMFxuICAgIH1cbiAgfTtcbn07XG5cbnZhciBDb250cm9sID0gZnVuY3Rpb24gQ29udHJvbChwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgIGlzRm9jdXNlZCA9IHByb3BzLmlzRm9jdXNlZCxcbiAgICAgIGlubmVyUmVmID0gcHJvcHMuaW5uZXJSZWYsXG4gICAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICAgIG1lbnVJc09wZW4gPSBwcm9wcy5tZW51SXNPcGVuO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByZWY6IGlubmVyUmVmLFxuICAgIGNzczogZ2V0U3R5bGVzKCdjb250cm9sJywgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgY29udHJvbDogdHJ1ZSxcbiAgICAgICdjb250cm9sLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgICAnY29udHJvbC0taXMtZm9jdXNlZCc6IGlzRm9jdXNlZCxcbiAgICAgICdjb250cm9sLS1tZW51LWlzLW9wZW4nOiBtZW51SXNPcGVuXG4gICAgfSwgY2xhc3NOYW1lKVxuICB9LCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxudmFyIGdyb3VwQ1NTID0gZnVuY3Rpb24gZ3JvdXBDU1MoX3JlZikge1xuICB2YXIgc3BhY2luZyA9IF9yZWYudGhlbWUuc3BhY2luZztcbiAgcmV0dXJuIHtcbiAgICBwYWRkaW5nQm90dG9tOiBzcGFjaW5nLmJhc2VVbml0ICogMixcbiAgICBwYWRkaW5nVG9wOiBzcGFjaW5nLmJhc2VVbml0ICogMlxuICB9O1xufTtcblxudmFyIEdyb3VwID0gZnVuY3Rpb24gR3JvdXAocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBjeCA9IHByb3BzLmN4LFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgSGVhZGluZyA9IHByb3BzLkhlYWRpbmcsXG4gICAgICBoZWFkaW5nUHJvcHMgPSBwcm9wcy5oZWFkaW5nUHJvcHMsXG4gICAgICBsYWJlbCA9IHByb3BzLmxhYmVsLFxuICAgICAgdGhlbWUgPSBwcm9wcy50aGVtZSxcbiAgICAgIHNlbGVjdFByb3BzID0gcHJvcHMuc2VsZWN0UHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNzczogZ2V0U3R5bGVzKCdncm91cCcsIHByb3BzKSxcbiAgICBjbGFzc05hbWU6IGN4KHtcbiAgICAgIGdyb3VwOiB0cnVlXG4gICAgfSwgY2xhc3NOYW1lKVxuICB9LCBqc3goSGVhZGluZywgX2V4dGVuZHMoe30sIGhlYWRpbmdQcm9wcywge1xuICAgIHNlbGVjdFByb3BzOiBzZWxlY3RQcm9wcyxcbiAgICB0aGVtZTogdGhlbWUsXG4gICAgZ2V0U3R5bGVzOiBnZXRTdHlsZXMsXG4gICAgY3g6IGN4XG4gIH0pLCBsYWJlbCksIGpzeChcImRpdlwiLCBudWxsLCBjaGlsZHJlbikpO1xufTtcblxudmFyIGdyb3VwSGVhZGluZ0NTUyA9IGZ1bmN0aW9uIGdyb3VwSGVhZGluZ0NTUyhfcmVmMikge1xuICB2YXIgc3BhY2luZyA9IF9yZWYyLnRoZW1lLnNwYWNpbmc7XG4gIHJldHVybiB7XG4gICAgbGFiZWw6ICdncm91cCcsXG4gICAgY29sb3I6ICcjOTk5JyxcbiAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIGZvbnRTaXplOiAnNzUlJyxcbiAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICBtYXJnaW5Cb3R0b206ICcwLjI1ZW0nLFxuICAgIHBhZGRpbmdMZWZ0OiBzcGFjaW5nLmJhc2VVbml0ICogMyxcbiAgICBwYWRkaW5nUmlnaHQ6IHNwYWNpbmcuYmFzZVVuaXQgKiAzLFxuICAgIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG4gIH07XG59O1xudmFyIEdyb3VwSGVhZGluZyA9IGZ1bmN0aW9uIEdyb3VwSGVhZGluZyhwcm9wcykge1xuICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgY3ggPSBwcm9wcy5jeCxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIHRoZW1lID0gcHJvcHMudGhlbWUsXG4gICAgICBzZWxlY3RQcm9wcyA9IHByb3BzLnNlbGVjdFByb3BzLFxuICAgICAgY2xlYW5Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgW1wiY2xhc3NOYW1lXCIsIFwiY3hcIiwgXCJnZXRTdHlsZXNcIiwgXCJ0aGVtZVwiLCBcInNlbGVjdFByb3BzXCJdKTtcblxuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGdldFN0eWxlcygnZ3JvdXBIZWFkaW5nJywgX29iamVjdFNwcmVhZCh7XG4gICAgICB0aGVtZTogdGhlbWVcbiAgICB9LCBjbGVhblByb3BzKSksXG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICAnZ3JvdXAtaGVhZGluZyc6IHRydWVcbiAgICB9LCBjbGFzc05hbWUpXG4gIH0sIGNsZWFuUHJvcHMpKTtcbn07XG5cbnZhciBpbnB1dENTUyA9IGZ1bmN0aW9uIGlucHV0Q1NTKF9yZWYpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIHtcbiAgICBtYXJnaW46IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIHBhZGRpbmdCb3R0b206IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIHBhZGRpbmdUb3A6IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIHZpc2liaWxpdHk6IGlzRGlzYWJsZWQgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyxcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw4MFxuICB9O1xufTtcblxudmFyIGlucHV0U3R5bGUgPSBmdW5jdGlvbiBpbnB1dFN0eWxlKGlzSGlkZGVuKSB7XG4gIHJldHVybiB7XG4gICAgbGFiZWw6ICdpbnB1dCcsXG4gICAgYmFja2dyb3VuZDogMCxcbiAgICBib3JkZXI6IDAsXG4gICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICBvcGFjaXR5OiBpc0hpZGRlbiA/IDAgOiAxLFxuICAgIG91dGxpbmU6IDAsXG4gICAgcGFkZGluZzogMCxcbiAgICBjb2xvcjogJ2luaGVyaXQnXG4gIH07XG59O1xuXG52YXIgSW5wdXQgPSBmdW5jdGlvbiBJbnB1dChfcmVmMikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgY3ggPSBfcmVmMi5jeCxcbiAgICAgIGdldFN0eWxlcyA9IF9yZWYyLmdldFN0eWxlcyxcbiAgICAgIGlubmVyUmVmID0gX3JlZjIuaW5uZXJSZWYsXG4gICAgICBpc0hpZGRlbiA9IF9yZWYyLmlzSGlkZGVuLFxuICAgICAgaXNEaXNhYmxlZCA9IF9yZWYyLmlzRGlzYWJsZWQsXG4gICAgICB0aGVtZSA9IF9yZWYyLnRoZW1lLFxuICAgICAgc2VsZWN0UHJvcHMgPSBfcmVmMi5zZWxlY3RQcm9wcyxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBbXCJjbGFzc05hbWVcIiwgXCJjeFwiLCBcImdldFN0eWxlc1wiLCBcImlubmVyUmVmXCIsIFwiaXNIaWRkZW5cIiwgXCJpc0Rpc2FibGVkXCIsIFwidGhlbWVcIiwgXCJzZWxlY3RQcm9wc1wiXSk7XG5cbiAgcmV0dXJuIGpzeChcImRpdlwiLCB7XG4gICAgY3NzOiBnZXRTdHlsZXMoJ2lucHV0JywgX29iamVjdFNwcmVhZCh7XG4gICAgICB0aGVtZTogdGhlbWVcbiAgICB9LCBwcm9wcykpXG4gIH0sIGpzeChBdXRvc2l6ZUlucHV0LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICBpbnB1dDogdHJ1ZVxuICAgIH0sIGNsYXNzTmFtZSksXG4gICAgaW5wdXRSZWY6IGlubmVyUmVmLFxuICAgIGlucHV0U3R5bGU6IGlucHV0U3R5bGUoaXNIaWRkZW4pLFxuICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkXG4gIH0sIHByb3BzKSkpO1xufTtcblxudmFyIG11bHRpVmFsdWVDU1MgPSBmdW5jdGlvbiBtdWx0aVZhbHVlQ1NTKF9yZWYpIHtcbiAgdmFyIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgICAgc3BhY2luZyA9IF9yZWYkdGhlbWUuc3BhY2luZyxcbiAgICAgIGJvcmRlclJhZGl1cyA9IF9yZWYkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiB7XG4gICAgbGFiZWw6ICdtdWx0aVZhbHVlJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5uZXV0cmFsMTAsXG4gICAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMgLyAyLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBtYXJnaW46IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIG1pbldpZHRoOiAwIC8vIHJlc29sdmVzIGZsZXgvdGV4dC1vdmVyZmxvdyBidWdcblxuICB9O1xufTtcbnZhciBtdWx0aVZhbHVlTGFiZWxDU1MgPSBmdW5jdGlvbiBtdWx0aVZhbHVlTGFiZWxDU1MoX3JlZjIpIHtcbiAgdmFyIF9yZWYyJHRoZW1lID0gX3JlZjIudGhlbWUsXG4gICAgICBib3JkZXJSYWRpdXMgPSBfcmVmMiR0aGVtZS5ib3JkZXJSYWRpdXMsXG4gICAgICBjb2xvcnMgPSBfcmVmMiR0aGVtZS5jb2xvcnMsXG4gICAgICBjcm9wV2l0aEVsbGlwc2lzID0gX3JlZjIuY3JvcFdpdGhFbGxpcHNpcztcbiAgcmV0dXJuIHtcbiAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyAvIDIsXG4gICAgY29sb3I6IGNvbG9ycy5uZXV0cmFsODAsXG4gICAgZm9udFNpemU6ICc4NSUnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBwYWRkaW5nOiAzLFxuICAgIHBhZGRpbmdMZWZ0OiA2LFxuICAgIHRleHRPdmVyZmxvdzogY3JvcFdpdGhFbGxpcHNpcyA/ICdlbGxpcHNpcycgOiBudWxsLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnXG4gIH07XG59O1xudmFyIG11bHRpVmFsdWVSZW1vdmVDU1MgPSBmdW5jdGlvbiBtdWx0aVZhbHVlUmVtb3ZlQ1NTKF9yZWYzKSB7XG4gIHZhciBfcmVmMyR0aGVtZSA9IF9yZWYzLnRoZW1lLFxuICAgICAgc3BhY2luZyA9IF9yZWYzJHRoZW1lLnNwYWNpbmcsXG4gICAgICBib3JkZXJSYWRpdXMgPSBfcmVmMyR0aGVtZS5ib3JkZXJSYWRpdXMsXG4gICAgICBjb2xvcnMgPSBfcmVmMyR0aGVtZS5jb2xvcnMsXG4gICAgICBpc0ZvY3VzZWQgPSBfcmVmMy5pc0ZvY3VzZWQ7XG4gIHJldHVybiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMgLyAyLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNGb2N1c2VkICYmIGNvbG9ycy5kYW5nZXJMaWdodCxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgcGFkZGluZ0xlZnQ6IHNwYWNpbmcuYmFzZVVuaXQsXG4gICAgcGFkZGluZ1JpZ2h0OiBzcGFjaW5nLmJhc2VVbml0LFxuICAgICc6aG92ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5kYW5nZXJMaWdodCxcbiAgICAgIGNvbG9yOiBjb2xvcnMuZGFuZ2VyXG4gICAgfVxuICB9O1xufTtcbnZhciBNdWx0aVZhbHVlR2VuZXJpYyA9IGZ1bmN0aW9uIE11bHRpVmFsdWVHZW5lcmljKF9yZWY0KSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWY0LmNoaWxkcmVuLFxuICAgICAgaW5uZXJQcm9wcyA9IF9yZWY0LmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgaW5uZXJQcm9wcywgY2hpbGRyZW4pO1xufTtcbnZhciBNdWx0aVZhbHVlQ29udGFpbmVyID0gTXVsdGlWYWx1ZUdlbmVyaWM7XG52YXIgTXVsdGlWYWx1ZUxhYmVsID0gTXVsdGlWYWx1ZUdlbmVyaWM7XG52YXIgTXVsdGlWYWx1ZVJlbW92ZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoTXVsdGlWYWx1ZVJlbW92ZSwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTXVsdGlWYWx1ZVJlbW92ZSgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTXVsdGlWYWx1ZVJlbW92ZSk7XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKE11bHRpVmFsdWVSZW1vdmUpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE11bHRpVmFsdWVSZW1vdmUsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgaW5uZXJQcm9wcyA9IF90aGlzJHByb3BzLmlubmVyUHJvcHM7XG4gICAgICByZXR1cm4ganN4KFwiZGl2XCIsIGlubmVyUHJvcHMsIGNoaWxkcmVuIHx8IGpzeChDcm9zc0ljb24sIHtcbiAgICAgICAgc2l6ZTogMTRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTXVsdGlWYWx1ZVJlbW92ZTtcbn0oQ29tcG9uZW50KTtcblxudmFyIE11bHRpVmFsdWUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQyKSB7XG4gIF9pbmhlcml0cyhNdWx0aVZhbHVlLCBfQ29tcG9uZW50Mik7XG5cbiAgZnVuY3Rpb24gTXVsdGlWYWx1ZSgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTXVsdGlWYWx1ZSk7XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKE11bHRpVmFsdWUpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE11bHRpVmFsdWUsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMi5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbXBvbmVudHMgPSBfdGhpcyRwcm9wczIuY29tcG9uZW50cyxcbiAgICAgICAgICBjeCA9IF90aGlzJHByb3BzMi5jeCxcbiAgICAgICAgICBkYXRhID0gX3RoaXMkcHJvcHMyLmRhdGEsXG4gICAgICAgICAgZ2V0U3R5bGVzID0gX3RoaXMkcHJvcHMyLmdldFN0eWxlcyxcbiAgICAgICAgICBpbm5lclByb3BzID0gX3RoaXMkcHJvcHMyLmlubmVyUHJvcHMsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMi5pc0Rpc2FibGVkLFxuICAgICAgICAgIHJlbW92ZVByb3BzID0gX3RoaXMkcHJvcHMyLnJlbW92ZVByb3BzLFxuICAgICAgICAgIHNlbGVjdFByb3BzID0gX3RoaXMkcHJvcHMyLnNlbGVjdFByb3BzO1xuICAgICAgdmFyIENvbnRhaW5lciA9IGNvbXBvbmVudHMuQ29udGFpbmVyLFxuICAgICAgICAgIExhYmVsID0gY29tcG9uZW50cy5MYWJlbCxcbiAgICAgICAgICBSZW1vdmUgPSBjb21wb25lbnRzLlJlbW92ZTtcbiAgICAgIHJldHVybiBqc3goQ2xhc3NOYW1lcywgbnVsbCwgZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICAgIHZhciBjc3MgPSBfcmVmNS5jc3MsXG4gICAgICAgICAgICBlbW90aW9uQ3ggPSBfcmVmNS5jeDtcbiAgICAgICAgcmV0dXJuIGpzeChDb250YWluZXIsIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGlubmVyUHJvcHM6IF9vYmplY3RTcHJlYWQoe30sIGlubmVyUHJvcHMsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogZW1vdGlvbkN4KGNzcyhnZXRTdHlsZXMoJ211bHRpVmFsdWUnLCBfdGhpcy5wcm9wcykpLCBjeCh7XG4gICAgICAgICAgICAgICdtdWx0aS12YWx1ZSc6IHRydWUsXG4gICAgICAgICAgICAgICdtdWx0aS12YWx1ZS0taXMtZGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gICAgICAgICAgICB9LCBjbGFzc05hbWUpKVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNlbGVjdFByb3BzOiBzZWxlY3RQcm9wc1xuICAgICAgICB9LCBqc3goTGFiZWwsIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogZW1vdGlvbkN4KGNzcyhnZXRTdHlsZXMoJ211bHRpVmFsdWVMYWJlbCcsIF90aGlzLnByb3BzKSksIGN4KHtcbiAgICAgICAgICAgICAgJ211bHRpLXZhbHVlX19sYWJlbCc6IHRydWVcbiAgICAgICAgICAgIH0sIGNsYXNzTmFtZSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3RQcm9wczogc2VsZWN0UHJvcHNcbiAgICAgICAgfSwgY2hpbGRyZW4pLCBqc3goUmVtb3ZlLCB7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBpbm5lclByb3BzOiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogZW1vdGlvbkN4KGNzcyhnZXRTdHlsZXMoJ211bHRpVmFsdWVSZW1vdmUnLCBfdGhpcy5wcm9wcykpLCBjeCh7XG4gICAgICAgICAgICAgICdtdWx0aS12YWx1ZV9fcmVtb3ZlJzogdHJ1ZVxuICAgICAgICAgICAgfSwgY2xhc3NOYW1lKSlcbiAgICAgICAgICB9LCByZW1vdmVQcm9wcyksXG4gICAgICAgICAgc2VsZWN0UHJvcHM6IHNlbGVjdFByb3BzXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBNdWx0aVZhbHVlO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoTXVsdGlWYWx1ZSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBjcm9wV2l0aEVsbGlwc2lzOiB0cnVlXG59KTtcblxudmFyIG9wdGlvbkNTUyA9IGZ1bmN0aW9uIG9wdGlvbkNTUyhfcmVmKSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgaXNGb2N1c2VkID0gX3JlZi5pc0ZvY3VzZWQsXG4gICAgICBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgICAgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiB7XG4gICAgbGFiZWw6ICdvcHRpb24nLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNTZWxlY3RlZCA/IGNvbG9ycy5wcmltYXJ5IDogaXNGb2N1c2VkID8gY29sb3JzLnByaW1hcnkyNSA6ICd0cmFuc3BhcmVudCcsXG4gICAgY29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDIwIDogaXNTZWxlY3RlZCA/IGNvbG9ycy5uZXV0cmFsMCA6ICdpbmhlcml0JyxcbiAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgcGFkZGluZzogXCJcIi5jb25jYXQoc3BhY2luZy5iYXNlVW5pdCAqIDIsIFwicHggXCIpLmNvbmNhdChzcGFjaW5nLmJhc2VVbml0ICogMywgXCJweFwiKSxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMCknLFxuICAgIC8vIHByb3ZpZGUgc29tZSBhZmZvcmRhbmNlIG9uIHRvdWNoIGRldmljZXNcbiAgICAnOmFjdGl2ZSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogIWlzRGlzYWJsZWQgJiYgKGlzU2VsZWN0ZWQgPyBjb2xvcnMucHJpbWFyeSA6IGNvbG9ycy5wcmltYXJ5NTApXG4gICAgfVxuICB9O1xufTtcblxudmFyIE9wdGlvbiA9IGZ1bmN0aW9uIE9wdGlvbihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgIGlzRm9jdXNlZCA9IHByb3BzLmlzRm9jdXNlZCxcbiAgICAgIGlzU2VsZWN0ZWQgPSBwcm9wcy5pc1NlbGVjdGVkLFxuICAgICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZixcbiAgICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGdldFN0eWxlcygnb3B0aW9uJywgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgb3B0aW9uOiB0cnVlLFxuICAgICAgJ29wdGlvbi0taXMtZGlzYWJsZWQnOiBpc0Rpc2FibGVkLFxuICAgICAgJ29wdGlvbi0taXMtZm9jdXNlZCc6IGlzRm9jdXNlZCxcbiAgICAgICdvcHRpb24tLWlzLXNlbGVjdGVkJzogaXNTZWxlY3RlZFxuICAgIH0sIGNsYXNzTmFtZSksXG4gICAgcmVmOiBpbm5lclJlZlxuICB9LCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxudmFyIHBsYWNlaG9sZGVyQ1NTID0gZnVuY3Rpb24gcGxhY2Vob2xkZXJDU1MoX3JlZikge1xuICB2YXIgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiB7XG4gICAgbGFiZWw6ICdwbGFjZWhvbGRlcicsXG4gICAgY29sb3I6IGNvbG9ycy5uZXV0cmFsNTAsXG4gICAgbWFyZ2luTGVmdDogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgbWFyZ2luUmlnaHQ6IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzUwJScsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKSdcbiAgfTtcbn07XG5cbnZhciBQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIFBsYWNlaG9sZGVyKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgY3ggPSBwcm9wcy5jeCxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGdldFN0eWxlcygncGxhY2Vob2xkZXInLCBwcm9wcyksXG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICBwbGFjZWhvbGRlcjogdHJ1ZVxuICAgIH0sIGNsYXNzTmFtZSlcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG5cbnZhciBjc3MkMSA9IGZ1bmN0aW9uIGNzcyhfcmVmKSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiB7XG4gICAgbGFiZWw6ICdzaW5nbGVWYWx1ZScsXG4gICAgY29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDQwIDogY29sb3JzLm5ldXRyYWw4MCxcbiAgICBtYXJnaW5MZWZ0OiBzcGFjaW5nLmJhc2VVbml0IC8gMixcbiAgICBtYXJnaW5SaWdodDogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgbWF4V2lkdGg6IFwiY2FsYygxMDAlIC0gXCIuY29uY2F0KHNwYWNpbmcuYmFzZVVuaXQgKiAyLCBcInB4KVwiKSxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIHRvcDogJzUwJScsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKSdcbiAgfTtcbn07XG5cbnZhciBTaW5nbGVWYWx1ZSA9IGZ1bmN0aW9uIFNpbmdsZVZhbHVlKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgY3ggPSBwcm9wcy5jeCxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogZ2V0U3R5bGVzKCdzaW5nbGVWYWx1ZScsIHByb3BzKSxcbiAgICBjbGFzc05hbWU6IGN4KHtcbiAgICAgICdzaW5nbGUtdmFsdWUnOiB0cnVlLFxuICAgICAgJ3NpbmdsZS12YWx1ZS0taXMtZGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gICAgfSwgY2xhc3NOYW1lKVxuICB9LCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxudmFyIGNvbXBvbmVudHMgPSB7XG4gIENsZWFySW5kaWNhdG9yOiBDbGVhckluZGljYXRvcixcbiAgQ29udHJvbDogQ29udHJvbCxcbiAgRHJvcGRvd25JbmRpY2F0b3I6IERyb3Bkb3duSW5kaWNhdG9yLFxuICBEb3duQ2hldnJvbjogRG93bkNoZXZyb24sXG4gIENyb3NzSWNvbjogQ3Jvc3NJY29uLFxuICBHcm91cDogR3JvdXAsXG4gIEdyb3VwSGVhZGluZzogR3JvdXBIZWFkaW5nLFxuICBJbmRpY2F0b3JzQ29udGFpbmVyOiBJbmRpY2F0b3JzQ29udGFpbmVyLFxuICBJbmRpY2F0b3JTZXBhcmF0b3I6IEluZGljYXRvclNlcGFyYXRvcixcbiAgSW5wdXQ6IElucHV0LFxuICBMb2FkaW5nSW5kaWNhdG9yOiBMb2FkaW5nSW5kaWNhdG9yLFxuICBNZW51OiBNZW51LFxuICBNZW51TGlzdDogTWVudUxpc3QsXG4gIE1lbnVQb3J0YWw6IE1lbnVQb3J0YWwsXG4gIExvYWRpbmdNZXNzYWdlOiBMb2FkaW5nTWVzc2FnZSxcbiAgTm9PcHRpb25zTWVzc2FnZTogTm9PcHRpb25zTWVzc2FnZSxcbiAgTXVsdGlWYWx1ZTogTXVsdGlWYWx1ZSxcbiAgTXVsdGlWYWx1ZUNvbnRhaW5lcjogTXVsdGlWYWx1ZUNvbnRhaW5lcixcbiAgTXVsdGlWYWx1ZUxhYmVsOiBNdWx0aVZhbHVlTGFiZWwsXG4gIE11bHRpVmFsdWVSZW1vdmU6IE11bHRpVmFsdWVSZW1vdmUsXG4gIE9wdGlvbjogT3B0aW9uLFxuICBQbGFjZWhvbGRlcjogUGxhY2Vob2xkZXIsXG4gIFNlbGVjdENvbnRhaW5lcjogU2VsZWN0Q29udGFpbmVyLFxuICBTaW5nbGVWYWx1ZTogU2luZ2xlVmFsdWUsXG4gIFZhbHVlQ29udGFpbmVyOiBWYWx1ZUNvbnRhaW5lclxufTtcbnZhciBkZWZhdWx0Q29tcG9uZW50cyA9IGZ1bmN0aW9uIGRlZmF1bHRDb21wb25lbnRzKHByb3BzKSB7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHt9LCBjb21wb25lbnRzLCBwcm9wcy5jb21wb25lbnRzKTtcbn07XG5cbmV4cG9ydCB7IE1lbnVQbGFjZXIgYXMgTSwgY29udGFpbmVyQ1NTIGFzIGEsIGNzcyBhcyBiLCBjbGVhckluZGljYXRvckNTUyBhcyBjLCBkcm9wZG93bkluZGljYXRvckNTUyBhcyBkLCBncm91cEhlYWRpbmdDU1MgYXMgZSwgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTIGFzIGYsIGdyb3VwQ1NTIGFzIGcsIGlucHV0Q1NTIGFzIGgsIGluZGljYXRvcnNDb250YWluZXJDU1MgYXMgaSwgbG9hZGluZ01lc3NhZ2VDU1MgYXMgaiwgbWVudUxpc3RDU1MgYXMgaywgbG9hZGluZ0luZGljYXRvckNTUyBhcyBsLCBtZW51Q1NTIGFzIG0sIG1lbnVQb3J0YWxDU1MgYXMgbiwgbXVsdGlWYWx1ZUNTUyBhcyBvLCBtdWx0aVZhbHVlTGFiZWxDU1MgYXMgcCwgbXVsdGlWYWx1ZVJlbW92ZUNTUyBhcyBxLCBub09wdGlvbnNNZXNzYWdlQ1NTIGFzIHIsIG9wdGlvbkNTUyBhcyBzLCBwbGFjZWhvbGRlckNTUyBhcyB0LCBjc3MkMSBhcyB1LCB2YWx1ZUNvbnRhaW5lckNTUyBhcyB2LCBkZWZhdWx0Q29tcG9uZW50cyBhcyB3LCBleHBvcnRlZEVxdWFsIGFzIHgsIGNvbXBvbmVudHMgYXMgeSB9O1xuIiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcyc7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrJztcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MnO1xuaW1wb3J0IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nO1xuaW1wb3J0IF9nZXRQcm90b3R5cGVPZiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZic7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzJztcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCc7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5JztcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGRlZmF1bHRJbnB1dFZhbHVlOiAnJyxcbiAgZGVmYXVsdE1lbnVJc09wZW46IGZhbHNlLFxuICBkZWZhdWx0VmFsdWU6IG51bGxcbn07XG5cbnZhciBtYW5hZ2VTdGF0ZSA9IGZ1bmN0aW9uIG1hbmFnZVN0YXRlKFNlbGVjdENvbXBvbmVudCkge1xuICB2YXIgX2NsYXNzLCBfdGVtcDtcblxuICByZXR1cm4gX3RlbXAgPSBfY2xhc3MgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzKFN0YXRlTWFuYWdlciwgX0NvbXBvbmVudCk7XG5cbiAgICBmdW5jdGlvbiBTdGF0ZU1hbmFnZXIoKSB7XG4gICAgICB2YXIgX2dldFByb3RvdHlwZU9mMjtcblxuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RhdGVNYW5hZ2VyKTtcblxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9nZXRQcm90b3R5cGVPZjIgPSBfZ2V0UHJvdG90eXBlT2YoU3RhdGVNYW5hZ2VyKSkuY2FsbC5hcHBseShfZ2V0UHJvdG90eXBlT2YyLCBbdGhpc10uY29uY2F0KGFyZ3MpKSk7XG5cbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJzZWxlY3RcIiwgdm9pZCAwKTtcblxuICAgICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcInN0YXRlXCIsIHtcbiAgICAgICAgaW5wdXRWYWx1ZTogX3RoaXMucHJvcHMuaW5wdXRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gX3RoaXMucHJvcHMuaW5wdXRWYWx1ZSA6IF90aGlzLnByb3BzLmRlZmF1bHRJbnB1dFZhbHVlLFxuICAgICAgICBtZW51SXNPcGVuOiBfdGhpcy5wcm9wcy5tZW51SXNPcGVuICE9PSB1bmRlZmluZWQgPyBfdGhpcy5wcm9wcy5tZW51SXNPcGVuIDogX3RoaXMucHJvcHMuZGVmYXVsdE1lbnVJc09wZW4sXG4gICAgICAgIHZhbHVlOiBfdGhpcy5wcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkID8gX3RoaXMucHJvcHMudmFsdWUgOiBfdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWVcbiAgICAgIH0pO1xuXG4gICAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25DaGFuZ2VcIiwgZnVuY3Rpb24gKHZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgICAgIF90aGlzLmNhbGxQcm9wKCdvbkNoYW5nZScsIHZhbHVlLCBhY3Rpb25NZXRhKTtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbklucHV0Q2hhbmdlXCIsIGZ1bmN0aW9uICh2YWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgICAgICAvLyBUT0RPOiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdlIGFsbG93IHRoZSBwcm9wIHRvIHJldHVybiBhIG5ld1xuICAgICAgICAvLyB2YWx1ZSwgYnV0IG5vdyBpbnB1dFZhbHVlIGlzIGEgY29udHJvbGxhYmxlIHByb3Agd2UgcHJvYmFibHkgc2hvdWxkbid0XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IF90aGlzLmNhbGxQcm9wKCdvbklucHV0Q2hhbmdlJywgdmFsdWUsIGFjdGlvbk1ldGEpO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbnB1dFZhbHVlOiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkID8gbmV3VmFsdWUgOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25NZW51T3BlblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmNhbGxQcm9wKCdvbk1lbnVPcGVuJyk7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIG1lbnVJc09wZW46IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uTWVudUNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuY2FsbFByb3AoJ29uTWVudUNsb3NlJyk7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIG1lbnVJc09wZW46IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoU3RhdGVNYW5hZ2VyLCBbe1xuICAgICAga2V5OiBcImZvY3VzXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImJsdXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgICB0aGlzLnNlbGVjdC5ibHVyKCk7XG4gICAgICB9IC8vIEZJWE1FOiB1bnR5cGVkIGZsb3cgY29kZSwgcmV0dXJuIGFueVxuXG4gICAgfSwge1xuICAgICAga2V5OiBcImdldFByb3BcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQcm9wKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wc1trZXldICE9PSB1bmRlZmluZWQgPyB0aGlzLnByb3BzW2tleV0gOiB0aGlzLnN0YXRlW2tleV07XG4gICAgICB9IC8vIEZJWE1FOiB1bnR5cGVkIGZsb3cgY29kZSwgcmV0dXJuIGFueVxuXG4gICAgfSwge1xuICAgICAga2V5OiBcImNhbGxQcm9wXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY2FsbFByb3AobmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHNbbmFtZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkcHJvcHM7XG5cbiAgICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKF90aGlzJHByb3BzID0gdGhpcy5wcm9wcylbbmFtZV0uYXBwbHkoX3RoaXMkcHJvcHMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgICBkZWZhdWx0SW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzMi5kZWZhdWx0SW5wdXRWYWx1ZSxcbiAgICAgICAgICAgIGRlZmF1bHRNZW51SXNPcGVuID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRNZW51SXNPcGVuLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgW1wiZGVmYXVsdElucHV0VmFsdWVcIiwgXCJkZWZhdWx0TWVudUlzT3BlblwiLCBcImRlZmF1bHRWYWx1ZVwiXSk7XG5cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0Q29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihfcmVmKSB7XG4gICAgICAgICAgICBfdGhpczIuc2VsZWN0ID0gX3JlZjtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlucHV0VmFsdWU6IHRoaXMuZ2V0UHJvcCgnaW5wdXRWYWx1ZScpLFxuICAgICAgICAgIG1lbnVJc09wZW46IHRoaXMuZ2V0UHJvcCgnbWVudUlzT3BlbicpLFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLFxuICAgICAgICAgIG9uSW5wdXRDaGFuZ2U6IHRoaXMub25JbnB1dENoYW5nZSxcbiAgICAgICAgICBvbk1lbnVDbG9zZTogdGhpcy5vbk1lbnVDbG9zZSxcbiAgICAgICAgICBvbk1lbnVPcGVuOiB0aGlzLm9uTWVudU9wZW4sXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0UHJvcCgndmFsdWUnKVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIFN0YXRlTWFuYWdlcjtcbiAgfShDb21wb25lbnQpLCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzLCBcImRlZmF1bHRQcm9wc1wiLCBkZWZhdWx0UHJvcHMpLCBfdGVtcDtcbn07XG5cbmV4cG9ydCB7IG1hbmFnZVN0YXRlIGFzIG0gfTtcbiIsImltcG9ydCBfdHlwZW9mIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZic7XG5pbXBvcnQgcmFmIGZyb20gJ3JhZic7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTk8gT1Bcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG4vLyBDbGFzcyBOYW1lIFByZWZpeGVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNvbXBvbmVudCBzdGF0ZSBmb3Igc3R5bGluZyB3aXRoIGNsYXNzIG5hbWVzLlxuXG4gRXhwZWN0cyBhbiBhcnJheSBvZiBzdHJpbmdzIE9SIGEgc3RyaW5nL29iamVjdCBwYWlyOlxuIC0gY2xhc3NOYW1lKFsnY29tcCcsICdjb21wLWFyZycsICdjb21wLWFyZy0yJ10pXG4gICBAcmV0dXJucyAncmVhY3Qtc2VsZWN0X19jb21wIHJlYWN0LXNlbGVjdF9fY29tcC1hcmcgcmVhY3Qtc2VsZWN0X19jb21wLWFyZy0yJ1xuIC0gY2xhc3NOYW1lKCdjb21wJywgeyBzb21lOiB0cnVlLCBzdGF0ZTogZmFsc2UgfSlcbiAgIEByZXR1cm5zICdyZWFjdC1zZWxlY3RfX2NvbXAgcmVhY3Qtc2VsZWN0X19jb21wLS1zb21lJ1xuKi9cblxuZnVuY3Rpb24gYXBwbHlQcmVmaXhUb05hbWUocHJlZml4LCBuYW1lKSB7XG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiBwcmVmaXg7XG4gIH0gZWxzZSBpZiAobmFtZVswXSA9PT0gJy0nKSB7XG4gICAgcmV0dXJuIHByZWZpeCArIG5hbWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdfXycgKyBuYW1lO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsYXNzTmFtZXMocHJlZml4LCBzdGF0ZSwgY2xhc3NOYW1lKSB7XG4gIHZhciBhcnIgPSBbY2xhc3NOYW1lXTtcblxuICBpZiAoc3RhdGUgJiYgcHJlZml4KSB7XG4gICAgZm9yICh2YXIga2V5IGluIHN0YXRlKSB7XG4gICAgICBpZiAoc3RhdGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBzdGF0ZVtrZXldKSB7XG4gICAgICAgIGFyci5wdXNoKFwiXCIuY29uY2F0KGFwcGx5UHJlZml4VG9OYW1lKHByZWZpeCwga2V5KSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcnIuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIGk7XG4gIH0pLm1hcChmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBTdHJpbmcoaSkudHJpbSgpO1xuICB9KS5qb2luKCcgJyk7XG59IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ2xlYW4gVmFsdWVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgY2xlYW5WYWx1ZSA9IGZ1bmN0aW9uIGNsZWFuVmFsdWUodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAoX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSByZXR1cm4gW3ZhbHVlXTtcbiAgcmV0dXJuIFtdO1xufTsgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIYW5kbGUgSW5wdXQgQ2hhbmdlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gaGFuZGxlSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSwgYWN0aW9uTWV0YSwgb25JbnB1dENoYW5nZSkge1xuICBpZiAob25JbnB1dENoYW5nZSkge1xuICAgIHZhciBuZXdWYWx1ZSA9IG9uSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiBuZXdWYWx1ZTtcbiAgfVxuXG4gIHJldHVybiBpbnB1dFZhbHVlO1xufSAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNjcm9sbCBIZWxwZXJzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gaXNEb2N1bWVudEVsZW1lbnQoZWwpIHtcbiAgcmV0dXJuIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LmJvZHksIHdpbmRvd10uaW5kZXhPZihlbCkgPiAtMTtcbn0gLy8gTm9ybWFsaXplZCBTY3JvbGwgVG9wXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsVG9wKGVsKSB7XG4gIGlmIChpc0RvY3VtZW50RWxlbWVudChlbCkpIHtcbiAgICByZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICB9XG5cbiAgcmV0dXJuIGVsLnNjcm9sbFRvcDtcbn1cbmZ1bmN0aW9uIHNjcm9sbFRvKGVsLCB0b3ApIHtcbiAgLy8gd2l0aCBhIHNjcm9sbCBkaXN0YW5jZSwgd2UgcGVyZm9ybSBzY3JvbGwgb24gdGhlIGVsZW1lbnRcbiAgaWYgKGlzRG9jdW1lbnRFbGVtZW50KGVsKSkge1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCB0b3ApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVsLnNjcm9sbFRvcCA9IHRvcDtcbn0gLy8gR2V0IFNjcm9sbCBQYXJlbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICB2YXIgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICB2YXIgZXhjbHVkZVN0YXRpY1BhcmVudCA9IHN0eWxlLnBvc2l0aW9uID09PSAnYWJzb2x1dGUnO1xuICB2YXIgb3ZlcmZsb3dSeCA9IC8oYXV0b3xzY3JvbGwpLztcbiAgdmFyIGRvY0VsID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OyAvLyBzdWNrIGl0LCBmbG93Li4uXG5cbiAgaWYgKHN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSByZXR1cm4gZG9jRWw7XG5cbiAgZm9yICh2YXIgcGFyZW50ID0gZWxlbWVudDsgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7KSB7XG4gICAgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHBhcmVudCk7XG5cbiAgICBpZiAoZXhjbHVkZVN0YXRpY1BhcmVudCAmJiBzdHlsZS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvdmVyZmxvd1J4LnRlc3Qoc3R5bGUub3ZlcmZsb3cgKyBzdHlsZS5vdmVyZmxvd1kgKyBzdHlsZS5vdmVyZmxvd1gpKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb2NFbDtcbn0gLy8gQW5pbWF0ZWQgU2Nyb2xsIFRvXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gIEBwYXJhbSB0OiB0aW1lIChlbGFwc2VkKVxuICBAcGFyYW0gYjogaW5pdGlhbCB2YWx1ZVxuICBAcGFyYW0gYzogYW1vdW50IG9mIGNoYW5nZVxuICBAcGFyYW0gZDogZHVyYXRpb25cbiovXG5cbmZ1bmN0aW9uIGVhc2VPdXRDdWJpYyh0LCBiLCBjLCBkKSB7XG4gIHJldHVybiBjICogKCh0ID0gdCAvIGQgLSAxKSAqIHQgKiB0ICsgMSkgKyBiO1xufVxuXG5mdW5jdGlvbiBhbmltYXRlZFNjcm9sbFRvKGVsZW1lbnQsIHRvKSB7XG4gIHZhciBkdXJhdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogMjAwO1xuICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IG5vb3A7XG4gIHZhciBzdGFydCA9IGdldFNjcm9sbFRvcChlbGVtZW50KTtcbiAgdmFyIGNoYW5nZSA9IHRvIC0gc3RhcnQ7XG4gIHZhciBpbmNyZW1lbnQgPSAxMDtcbiAgdmFyIGN1cnJlbnRUaW1lID0gMDtcblxuICBmdW5jdGlvbiBhbmltYXRlU2Nyb2xsKCkge1xuICAgIGN1cnJlbnRUaW1lICs9IGluY3JlbWVudDtcbiAgICB2YXIgdmFsID0gZWFzZU91dEN1YmljKGN1cnJlbnRUaW1lLCBzdGFydCwgY2hhbmdlLCBkdXJhdGlvbik7XG4gICAgc2Nyb2xsVG8oZWxlbWVudCwgdmFsKTtcblxuICAgIGlmIChjdXJyZW50VGltZSA8IGR1cmF0aW9uKSB7XG4gICAgICByYWYoYW5pbWF0ZVNjcm9sbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIGFuaW1hdGVTY3JvbGwoKTtcbn0gLy8gU2Nyb2xsIEludG8gVmlld1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KG1lbnVFbCwgZm9jdXNlZEVsKSB7XG4gIHZhciBtZW51UmVjdCA9IG1lbnVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIGZvY3VzZWRSZWN0ID0gZm9jdXNlZEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgb3ZlclNjcm9sbCA9IGZvY3VzZWRFbC5vZmZzZXRIZWlnaHQgLyAzO1xuXG4gIGlmIChmb2N1c2VkUmVjdC5ib3R0b20gKyBvdmVyU2Nyb2xsID4gbWVudVJlY3QuYm90dG9tKSB7XG4gICAgc2Nyb2xsVG8obWVudUVsLCBNYXRoLm1pbihmb2N1c2VkRWwub2Zmc2V0VG9wICsgZm9jdXNlZEVsLmNsaWVudEhlaWdodCAtIG1lbnVFbC5vZmZzZXRIZWlnaHQgKyBvdmVyU2Nyb2xsLCBtZW51RWwuc2Nyb2xsSGVpZ2h0KSk7XG4gIH0gZWxzZSBpZiAoZm9jdXNlZFJlY3QudG9wIC0gb3ZlclNjcm9sbCA8IG1lbnVSZWN0LnRvcCkge1xuICAgIHNjcm9sbFRvKG1lbnVFbCwgTWF0aC5tYXgoZm9jdXNlZEVsLm9mZnNldFRvcCAtIG92ZXJTY3JvbGwsIDApKTtcbiAgfVxufSAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEdldCBib3VuZGluZyBjbGllbnQgb2JqZWN0XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIGNhbm5vdCBnZXQga2V5cyB1c2luZyBhcnJheSBub3RhdGlvbiB3aXRoIERPTVJlY3RcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRPYmooZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICByaWdodDogcmVjdC5yaWdodCxcbiAgICB0b3A6IHJlY3QudG9wLFxuICAgIHdpZHRoOiByZWN0LndpZHRoXG4gIH07XG59XG4vLyBUb3VjaCBDYXBhYmlsaXR5IERldGVjdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gaXNUb3VjaENhcGFibGUoKSB7XG4gIHRyeSB7XG4gICAgZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ1RvdWNoRXZlbnQnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1vYmlsZSBEZXZpY2UgRGV0ZWN0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBpc01vYmlsZURldmljZSgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCB7IGdldFNjcm9sbFBhcmVudCBhcyBhLCBnZXRTY3JvbGxUb3AgYXMgYiwgYW5pbWF0ZWRTY3JvbGxUbyBhcyBjLCBpc01vYmlsZURldmljZSBhcyBkLCBpc0RvY3VtZW50RWxlbWVudCBhcyBlLCBjbGVhblZhbHVlIGFzIGYsIGdldEJvdW5kaW5nQ2xpZW50T2JqIGFzIGcsIHNjcm9sbEludG9WaWV3IGFzIGgsIGlzVG91Y2hDYXBhYmxlIGFzIGksIGNsYXNzTmFtZXMgYXMgaiwgaGFuZGxlSW5wdXRDaGFuZ2UgYXMgaywgbm9vcCBhcyBuLCBzY3JvbGxUbyBhcyBzIH07XG4iLCJpbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5JztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkJztcbmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2snO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcyc7XG5pbXBvcnQgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybic7XG5pbXBvcnQgX2dldFByb3RvdHlwZU9mIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mJztcbmltcG9ydCBfaW5oZXJpdHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMnO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkJztcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IENhY2hlUHJvdmlkZXIgfSBmcm9tICdAZW1vdGlvbi9jb3JlJztcbmltcG9ydCAncmVhY3QtZG9tJztcbmltcG9ydCAncHJvcC10eXBlcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZic7XG5pbXBvcnQgJ3JhZic7XG5pbXBvcnQgJy4vY2h1bmstZThhZTRiMGYuYnJvd3Nlci5lc20uanMnO1xuZXhwb3J0IHsgeSBhcyBjb21wb25lbnRzIH0gZnJvbSAnLi9jaHVuay01ZDIwMGE0MS5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBTIGFzIFNlbGVjdCB9IGZyb20gJy4vYmFzZS9kaXN0L3JlYWN0LXNlbGVjdC1hMzRlOWQxMi5icm93c2VyLmVzbS5qcyc7XG5leHBvcnQgeyBjIGFzIGNyZWF0ZUZpbHRlciwgYSBhcyBkZWZhdWx0VGhlbWUsIG0gYXMgbWVyZ2VTdHlsZXMgfSBmcm9tICcuL2Jhc2UvZGlzdC9yZWFjdC1zZWxlY3QtYTM0ZTlkMTIuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdAZW1vdGlvbi9jc3MnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90YWdnZWRUZW1wbGF0ZUxpdGVyYWwnO1xuaW1wb3J0ICdyZWFjdC1pbnB1dC1hdXRvc2l6ZSc7XG5pbXBvcnQgeyBtIGFzIG1hbmFnZVN0YXRlIH0gZnJvbSAnLi9jaHVuay1iMzZiYWYxYS5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuXG52YXIgTm9uY2VQcm92aWRlciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoTm9uY2VQcm92aWRlciwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTm9uY2VQcm92aWRlcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOb25jZVByb3ZpZGVyKTtcblxuICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKE5vbmNlUHJvdmlkZXIpLmNhbGwodGhpcywgcHJvcHMpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJjcmVhdGVFbW90aW9uQ2FjaGVcIiwgZnVuY3Rpb24gKG5vbmNlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQ2FjaGUoe1xuICAgICAgICBub25jZTogbm9uY2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuY3JlYXRlRW1vdGlvbkNhY2hlID0gbWVtb2l6ZU9uZShfdGhpcy5jcmVhdGVFbW90aW9uQ2FjaGUpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhOb25jZVByb3ZpZGVyLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGVtb3Rpb25DYWNoZSA9IHRoaXMuY3JlYXRlRW1vdGlvbkNhY2hlKHRoaXMucHJvcHMubm9uY2UpO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FjaGVQcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogZW1vdGlvbkNhY2hlXG4gICAgICB9LCB0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTm9uY2VQcm92aWRlcjtcbn0oQ29tcG9uZW50KTtcblxudmFyIGluZGV4ID0gbWFuYWdlU3RhdGUoU2VsZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG5leHBvcnQgeyBOb25jZVByb3ZpZGVyIH07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIF9fREVWX18gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nO1xuXG52YXIgd2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChfX0RFVl9fKSB7XG4gIHZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbiBwcmludFdhcm5pbmcoZm9ybWF0LCBhcmdzKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gPiAxID8gbGVuIC0gMSA6IDApO1xuICAgIGZvciAodmFyIGtleSA9IDE7IGtleSA8IGxlbjsga2V5KyspIHtcbiAgICAgIGFyZ3Nba2V5IC0gMV0gPSBhcmd1bWVudHNba2V5XTtcbiAgICB9XG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICtcbiAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICB9KTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9XG5cbiAgd2FybmluZyA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhcmdzKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gPiAyID8gbGVuIC0gMiA6IDApO1xuICAgIGZvciAodmFyIGtleSA9IDI7IGtleSA8IGxlbjsga2V5KyspIHtcbiAgICAgIGFyZ3Nba2V5IC0gMl0gPSBhcmd1bWVudHNba2V5XTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ2B3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgK1xuICAgICAgICAgICdtZXNzYWdlIGFyZ3VtZW50J1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIHByaW50V2FybmluZy5hcHBseShudWxsLCBbZm9ybWF0XS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3YXJuaW5nO1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJyZWdlbmVyYXRvclJ1bnRpbWVcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcImhlbHBlcnNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1wiaTE4blwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJtb2RlbFwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJ2YWxpZGF0b3JzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZhbHVlT2JqZWN0c1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIndwXCJdW1wiY29tcG9uZW50c1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIndwXCJdW1wiY29tcG9zZVwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIndwXCJdW1wiZGF0YVwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIndwXCJdW1wiZWxlbWVudFwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIndwXCJdW1wiaG9va3NcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImlzU2hhbGxvd0VxdWFsXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJrZXljb2Rlc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJ2ZW5kb3JcIl1bXCJjbGFzc25hbWVzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZlbmRvclwiXVtcImN1aWRcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJsb2Rhc2hcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmVuZG9yXCJdW1wibW9tZW50XCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiUmVhY3RcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJSZWFjdERPTVwiXTsgfSgpKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2V2ZW50LWF0dGVuZGVlcy9hdHRlbmRlZS1saXN0LWl0ZW0uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2V2ZW50LWF0dGVuZGVlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZXZlbnQtYXR0ZW5kZWVzL3N0eWxlLmNzcz9lOWZjIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2Jhc2UvYXV0by1mb3JtLXJvdy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL2Zvcm0tY2FuY2VsLWJ1dHRvbi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL2Zvcm0tY29udGFpbmVyLmNzcz82OTEyIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2Jhc2UvZm9ybS1jb250YWluZXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vYmFzZS9mb3JtLWRhdGEtZGVidWctZHVtcC5jc3M/ODIwNSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL2Zvcm0tZGF0YS1kZWJ1Zy1kdW1wLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2Jhc2UvZm9ybS1lcnJvci1ib3VuZGFyeS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL2Zvcm0taW5mby1iYXNlLmNzcz8zMjUxIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2Jhc2UvZm9ybS1pbmZvLWJhc2UuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vYmFzZS9mb3JtLXBsYWNlaG9sZGVyLmNzcz83ZGIyIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2Jhc2UvZm9ybS1wbGFjZWhvbGRlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL2Zvcm0tc3VibWl0LWJ1dHRvbi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL3N1Ym1pdHRpbmctbm90aWNlLmNzcz8yOWE2Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2Jhc2Uvc3VibWl0dGluZy1ub3RpY2UuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vYmFzZS93aXRoLWZvcm0tY29udGFpbmVyLWFuZC1wbGFjZWhvbGRlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL3dpdGgtZm9ybS1oYW5kbGVyLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2lucHV0cy9iYXNlL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS9kZWZhdWx0LWlucHV0LWxheW91dC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS9pbnB1dC1lcnJvci5jc3M/NjQyZSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS9pbnB1dC1lcnJvci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS9pbnB1dC1oZWxwLXRleHQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL2Jhc2UvaW5wdXQtbGFiZWwuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL2Jhc2Uvb3B0aW9uLWNoZWNrZWQtc3RhdGUuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL2Jhc2Uvb3B0aW9uLWlucHV0cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS9vcHRpb24tbGFiZWwtc2l6ZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS91dGlscy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvY2hlY2tib3gtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL2RhdGUtdGltZS1pbnB1dC5jc3M/ODZiNCIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvZGF0ZS10aW1lLWlucHV0LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2lucHV0cy9mb3JtLWlucHV0LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2lucHV0cy9oaWRkZW4taW5wdXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL2lubGluZS1lZGl0LWlucHV0LmNzcz9kZWNhIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2lucHV0cy9pbmxpbmUtZWRpdC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvcmFkaW8taW5wdXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL3NlbGVjdC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvdGV4dGFyZWEuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL3RvZ2dsZS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9sYXlvdXRzL3R3by1jb2x1bW4tYWRtaW4vYXV0by1jb2x1bW4tcm93LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2xheW91dHMvdHdvLWNvbHVtbi1hZG1pbi9mb3JtLWNvbHVtbi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9sYXlvdXRzL3R3by1jb2x1bW4tYWRtaW4vZm9ybS1pbmZvLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2xheW91dHMvdHdvLWNvbHVtbi1hZG1pbi9mb3JtLXJvdy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9sYXlvdXRzL3R3by1jb2x1bW4tYWRtaW4vZm9ybS1zYXZlLWNhbmNlbC1idXR0b25zLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL2xheW91dHMvdHdvLWNvbHVtbi1hZG1pbi9mb3JtLXNlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbGF5b3V0cy90d28tY29sdW1uLWFkbWluL2Zvcm0td3JhcHBlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9sYXlvdXRzL3R3by1jb2x1bW4tYWRtaW4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbGF5b3V0cy90d28tY29sdW1uLWFkbWluL3R3by1jb2x1bW4tYWRtaW4uY3NzPzc5MmEiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbW9kZWwvYmFzZS9idWlsZC1vcHRpb25zLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL21vZGVsL2Jhc2UvY3JlYXRlLW1vZGVsLXNlbGVjdC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9tb2RlbC9iYXNlL2RlZmF1bHQtc2VsZWN0LWNvbmZpZ3VyYXRpb24uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbW9kZWwvYmFzZS9tb2RlbC1zZWxlY3QuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbW9kZWwvYmFzZS91dGlscy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9tb2RlbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9tb2RlbC9zZWxlY3QvZGF0ZXRpbWUuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbW9kZWwvc2VsZWN0L2V2ZW50LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL21vZGVsL3NlbGVjdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9tb2RlbC9zZWxlY3Qvc3RhdHVzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9mb3JtL21vZGVsL3NlbGVjdC90aWNrZXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vdmFsaWRhdGlvbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9xdWVyeS9saW1pdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZGF0ZXMtYW5kLXRpbWVzL2JpZ2dpZS1jYWxlbmRhci1kYXRlL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9kYXRlcy1hbmQtdGltZXMvYmlnZ2llLWNhbGVuZGFyLWRhdGUvc3R5bGUuY3NzP2NjY2MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2RhdGVzLWFuZC10aW1lcy9jYWxlbmRhci1kYXRlLXJhbmdlL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9kYXRlcy1hbmQtdGltZXMvY2FsZW5kYXItZGF0ZS1yYW5nZS9zdHlsZS5jc3M/MDlkNiIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZGF0ZXMtYW5kLXRpbWVzL2NhbGVuZGFyLXBhZ2UtZGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZGF0ZXMtYW5kLXRpbWVzL2NhbGVuZGFyLXBhZ2UtZGF0ZS9zdHlsZS5jc3M/OGJlMyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZGF0ZXMtYW5kLXRpbWVzL21lZGl1bS1jYWxlbmRhci1kYXRlL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9kYXRlcy1hbmQtdGltZXMvbWVkaXVtLWNhbGVuZGFyLWRhdGUvc3R5bGUuY3NzPzM1ZmIiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2Ryb3AtZG93bi1tZW51L2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9kcm9wLWRvd24tbWVudS9zdHlsZS5jc3M/MmM3MiIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZW50aXR5LWRldGFpbHMtcGFuZWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2VudGl0eS1kZXRhaWxzLXBhbmVsL3N0eWxlLmNzcz9hNmYyIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9lbnRpdHktbGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZW50aXR5LWxpc3Qvc3R5bGUuY3NzP2NjYjAiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2VudGl0eS1wYXBlci1mcmFtZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZW50aXR5LXBhcGVyLWZyYW1lL3N0eWxlLmNzcz9hYWY5Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9lc3ByZXNzby1idXR0b24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2ljb24tbWVudS1pdGVtL2VudGl0eS1hY3Rpb24tbWVudS1pdGVtLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9pY29uLW1lbnUtaXRlbS9pY29uLW1lbnUtaXRlbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvaWNvbi1tZW51LWl0ZW0vc3R5bGUuY3NzPzdjNjUiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2ltYWdlL2F2YXRhci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvaW1hZ2UvZXNwcmVzc28taWNvbi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvaW1hZ2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9tZW51L2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9tZW51L3N0ZXAtYnViYmxlL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9tZW51L3N0ZXAtYnViYmxlL3N0ZXAtYnViYmxlLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9tZW51L3N0ZXAtYnViYmxlL3N0ZXAtdGV4dC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvbWVudS9zdGVwLWJ1YmJsZS9zdHlsZS5jc3M/MDMxMiIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvcmVzcG9uc2l2ZS10YWJsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvcmVzcG9uc2l2ZS10YWJsZS9yZXNwb25zaXZlLWNlbGwuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3Jlc3BvbnNpdmUtdGFibGUvcmVzcG9uc2l2ZS10YWJsZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvcmVzcG9uc2l2ZS10YWJsZS9zdHlsZS5jc3M/YzRhMiIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvcmVzcG9uc2l2ZS10YWJsZS90YWJsZS1ib2R5LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9yZXNwb25zaXZlLXRhYmxlL3RhYmxlLWRhdGEtY2VsbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvcmVzcG9uc2l2ZS10YWJsZS90YWJsZS1mb290ZXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3Jlc3BvbnNpdmUtdGFibGUvdGFibGUtaGVhZGVyLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9yZXNwb25zaXZlLXRhYmxlL3RhYmxlLWhlYWRpbmctY2VsbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvcmVzcG9uc2l2ZS10YWJsZS90YWJsZS1yb3cuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3Jlc3BvbnNpdmUtdGFibGUvdGFibGUuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL2hlbHBlcnMvdmFsaWRhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2Fzc2VydGlvbnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2F0dGVuZGVlL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvYXR0ZW5kZWUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2F0dGVuZGVlL3F1ZXJ5LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9iYXNlLWRhdGUtZm9ybWF0dGVyLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9iYXNlLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9jaGVja2luL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvY2hlY2tpbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvY2hlY2tpbi9xdWVyeS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZGF0ZXRpbWUvY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9kYXRldGltZS9mb3JtYXR0ZXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2RhdGV0aW1lL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9kYXRldGltZS9xdWVyeS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZGF0ZXRpbWUvc3RhdHVzLWhlbHBlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZGVmYXVsdC1tb2RlbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW5kcG9pbnRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9hc3NlcnRpb25zLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9iYXNlLWVudGl0eS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvYm9vbGVhbnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvY3JlYXRlLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9leHRyYWN0b3JzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvdmFsaWRhdG9ycy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZXZlbnQvY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9ldmVudC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZXZlbnQvcXVlcnkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9tb2RlbC1uYW1lcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvbW9kZWxzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9wcmljZS10eXBlL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvcHJpY2UtdHlwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvcHJpbWFyeS1rZXlzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9yZWdpc3RyYXRpb24vY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9yZWdpc3RyYXRpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3JlZ2lzdHJhdGlvbi9xdWVyeS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvc3RhdHVzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvc3RhdHVzL2hlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3N0YXR1cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvc3RhdHVzL3F1ZXJ5LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC90aWNrZXQvY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC90aWNrZXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3RpY2tldC9xdWVyeS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvdGlja2V0L3N0YXR1cy1oZWxwZXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9iYXNlLWNvbnRyb2wuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9maWx0ZXItYmFyL2VudGl0eS1saXN0LWZpbHRlci1iYXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9maWx0ZXItYmFyL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvZmlsdGVyLWJhci9zdHlsZS5jc3M/MjFmMiIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL2ZpbHRlci1iYXIvd2l0aC1lbnRpdHktbGlzdC1maWx0ZXItYmFyLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvZmlsdGVyLWJhci93aXRoLWVudGl0eS1saXN0LWZpbHRlci1zdGF0ZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvbW9uZXkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9wYWdpbmF0aW9uL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvcGFnaW5hdGlvbi9zdHlsZS5jc3M/NzBlMyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL3dpdGgtbGF0ZXN0LWNoZWNraW4uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RTcHJlYWQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9jYWNoZS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxpcy9kaXN0L3N0eWxpcy5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY29yZS9kaXN0L2NvcmUuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2Nzcy9kaXN0L2Nzcy5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc2VyaWFsaXplL2Rpc3Qvc2VyaWFsaXplLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvbm9kZV9tb2R1bGVzL0BlbW90aW9uL2hhc2gvZGlzdC9oYXNoLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9tZW1vaXplLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvdW5pdGxlc3MuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3Qvc2hlZXQuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvdXRpbHMuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3dlYWstbWVtb2l6ZS9kaXN0L3dlYWstbWVtb2l6ZS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvZmluYWwtZm9ybS9kaXN0L2ZpbmFsLWZvcm0uZXMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2p3LXJlYWN0LXBhZ2luYXRpb24vbGliL0p3UGFnaW5hdGlvbi5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvbWVtaXplL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9tZW1vaXplLW9uZS9kaXN0L21lbW9pemUtb25lLmVzbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcGVyZm9ybWFuY2Utbm93L2xpYi9wZXJmb3JtYW5jZS1ub3cuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3BsdXJhbGl6ZS9wbHVyYWxpemUuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3JhZi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcmVhY3QtZmluYWwtZm9ybS1saXN0ZW5lcnMvZGlzdC9yZWFjdC1maW5hbC1mb3JtLWxpc3RlbmVycy5lcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcmVhY3QtZmluYWwtZm9ybS9kaXN0L3JlYWN0LWZpbmFsLWZvcm0uZXMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlucHV0LWF1dG9zaXplL2xpYi9BdXRvc2l6ZUlucHV0LmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9iYXNlL2Rpc3QvcmVhY3Qtc2VsZWN0LWEzNGU5ZDEyLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9jaHVuay01ZDIwMGE0MS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvcmVhY3Qtc2VsZWN0L2Rpc3QvY2h1bmstYjM2YmFmMWEuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXNlbGVjdC9kaXN0L2NodW5rLWU4YWU0YjBmLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9yZWFjdC1zZWxlY3QuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3dhcm5pbmcvd2FybmluZy5qcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy9leHRlcm5hbCB7XCJ0aGlzXCI6XCJyZWdlbmVyYXRvclJ1bnRpbWVcIn0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImhlbHBlcnNcIl19Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwiaTE4blwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJtb2RlbFwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2YWxpZGF0b3JzXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcInZhbHVlT2JqZWN0c1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiY29tcG9uZW50c1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiY29tcG9zZVwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiZGF0YVwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiZWxlbWVudFwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiaG9va3NcIl19Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImlzU2hhbGxvd0VxdWFsXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJrZXljb2Rlc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2ZW5kb3JcIixcImNsYXNzbmFtZXNcIl19Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwidmVuZG9yXCIsXCJjdWlkXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvZXh0ZXJuYWwge1widGhpc1wiOlwibG9kYXNoXCJ9Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwidmVuZG9yXCIsXCJtb21lbnRcIl19Iiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy9leHRlcm5hbCB7XCJ0aGlzXCI6XCJSZWFjdFwifSIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvZXh0ZXJuYWwge1widGhpc1wiOlwiUmVhY3RET01cIn0iXSwibmFtZXMiOlsiQXR0ZW5kZWVMaXN0SXRlbSIsImlzTG9hZGluZyIsImF0dGVuZGVlIiwic2hvd0dyYXZhdGFyIiwiYXZhdGFyT3B0aW9ucyIsImdldEF2YXRhclVybCIsInVybCIsImhhc0NhbGN1bGF0ZWRGaWVsZCIsInVzZXJBdmF0YXIiLCJhdmF0YXJVcmwiLCJnZXRBdHRlbmRlZU5hbWUiLCJmbmFtZSIsImxuYW1lIiwiZ2V0QXZhdGFyIiwid2FybmluZyIsImlzTW9kZWxFbnRpdHlPZk1vZGVsIiwiRXZlbnRBdHRlbmRlZUxpc3QiLCJwcm9wcyIsImF0dGVuZGVlcyIsImlzRW1wdHkiLCJsaXN0SXRlbXMiLCJtYXAiLCJpZCIsImNvbnRhaW5lckNzc0NsYXNzIiwiY29udGFpbmVySWQiLCJjbGFzc05hbWVzIiwiZ2V0QXR0ZW5kZWVMaXN0IiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwiYm9vbCIsImFycmF5Iiwic3RyaW5nIiwiQXV0b0Zvcm1Sb3ciLCJGb3JtRWxlbWVudCIsIkF1dG9Db2x1bW5Sb3ciLCJsYWJlbCIsImlucHV0Iiwicm93IiwidHlwZSIsIm5hbWUiLCJ2YWxpZGF0aW9ucyIsIkFycmF5IiwiaXNBcnJheSIsImF0dHJpYnV0ZXMiLCJhZGRWYWxpZGF0b3JzVG9BdHRyaWJ1dGVzIiwicmVxdWlyZWQiLCJodG1sSWQiLCJGb3JtQ2FuY2VsQnV0dG9uIiwib25DbGljayIsInByaXN0aW5lIiwic3VibWl0dGluZyIsImJ1dHRvblRleHQiLCJodG1sQ2xhc3MiLCJfXyIsInByb3BUeXBlcyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwiZGVmYXVsdFByb3BzIiwiRm9ybUNvbnRhaW5lciIsImNoaWxkcmVuIiwibG9hZGluZyIsImNvbnRhaW5lckNsYXNzIiwiRm9ybURhdGFEZWJ1Z0R1bXAiLCJ2YWx1ZXMiLCJfX0RFVl9fIiwiSlNPTiIsInN0cmluZ2lmeSIsIkZvcm1FcnJvckJvdW5kYXJ5Iiwic3RhdGUiLCJlcnJvciIsImVycm9ySW5mbyIsImluZm8iLCJzZXRTdGF0ZSIsImVycm9yTWVzc2FnZSIsIndoaXRlU3BhY2UiLCJ0b1N0cmluZyIsImNvbXBvbmVudFN0YWNrIiwiRm9ybUluZm9CYXNlIiwiZm9ybUluZm8iLCJkYXNoaWNvbiIsIm9uRGlzbWlzcyIsImZvcm1JbmZvVmFycyIsInR5cGVJY29uIiwiZGlzbWlzcyIsImZvcm1JbmZvVGV4dCIsImNodW5rcyIsInNwbGl0IiwieCIsImxlbmd0aCIsInB1c2giLCJGb3JtUGxhY2Vob2xkZXIiLCJub3RpY2UiLCJzcHJpbnRmIiwiX3giLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJGb3JtU3VibWl0QnV0dG9uIiwiZGlzYWJsZWQiLCJidXR0b25JY29uIiwic3VibWl0dGluZ1RleHQiLCJzdWJtaXR0aW5nVGV4dFBvc2l0aW9uIiwibm90aWNlQ2xhc3MiLCJidXR0b25Qcm9wcyIsIlN1Ym1pdHRpbmdOb3RpY2UiLCJwb3NpdGlvbiIsInNpemUiLCJzdHlsZSIsIm9uZU9mIiwib2JqZWN0IiwiY29tcG9zZSIsIndpdGhJbnN0YW5jZUlkIiwiY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQiLCJGb3JtIiwiaW5zdGFuY2VJZCIsImxvYWRpbmdOb3RpY2UiLCJmb3JtUHJvcHMiLCJ3aXRoRm9ybUhhbmRsZXIiLCJGb3JtQ29tcG9uZW50IiwiRm9ybUhhbmRsZXIiLCJjaGFuZ2VzIiwiZGF0YSIsImlzRnVuY3Rpb24iLCJsb2FkSGFuZGxlciIsInN1Ym1pdEJ1dHRvblRleHQiLCJyZXNldEhhbmRsZXIiLCJjYW5jZWxCdXR0b25UZXh0IiwiZGVjb3JhdG9ycyIsIm11dGF0b3JzIiwiZm9ybUNoYW5nZXMiLCJzZXRNdXRhdG9yQ2FsbGJhY2tzIiwiZm9ybURhdGEiLCJzaG93U3VibWl0Iiwic3VibWl0SGFuZGxlciIsImNhc3RBcnJheSIsImZvcm0iLCJoYW5kbGVTdWJtaXQiLCJpbnZhbGlkIiwic3VibWl0QnV0dG9uIiwiZm9ybVJlc2V0IiwiZXZlbnQiLCJyZXNldCIsImNhbmNlbEJ1dHRvbiIsIm1hcmtDaGFuZ2VzIiwiSFRNTDVfSU5QVVRfVFlQRVMiLCJIVE1MNV9JTlBVVF9UWVBFU19URVhUIiwiRGVmYXVsdElucHV0TGF5b3V0IiwiZm9ybUlucHV0IiwiaW5wdXROYW1lIiwiaGVscFRleHRJRCIsImhlbHBUZXh0IiwiSW5wdXRFcnJvciIsInRvdWNoZWQiLCJtZXRhIiwiSW5wdXRIZWxwVGV4dCIsIklucHV0TGFiZWwiLCJodG1sRm9yIiwic3Ryb25nIiwiaGlkZGVuIiwiYXN0ZXJpc2siLCJ1bmRlZmluZWQiLCJvbmVPZlR5cGUiLCJudW1iZXIiLCJhcnJheU9mIiwiT3B0aW9uQ2hlY2tlZFN0YXRlIiwiaW5wdXRJZCIsIm9wdGlvbnMiLCJjaGVja2VkIiwiZm9yRWFjaCIsIm9wdGlvbiIsImluZGV4Iiwia2V5IiwiaXNTZWxlY3RlZCIsImluZGV4T2YiLCJ2YWx1ZSIsImRlZmF1bHRWYWx1ZSIsIk9wdGlvbklucHV0cyIsImNoZWNrZWRTdGF0ZSIsImxhYmVsQ2xhc3MiLCJkYXRhU2V0IiwiaW5pdGlhbFZhbHVlIiwiY291bnQiLCJzaGFwZSIsIm9uQ2hhbmdlIiwiT3B0aW9uTGFiZWxTaXplIiwibGFiZWxTaXplIiwiY2xlYW5VcElucHV0QXR0cmlidXRlcyIsIm9taXQiLCJjb21wb3NlVmFsaWRhdG9ycyIsInZhbGlkYXRvcnMiLCJyZWR1Y2UiLCJ2YWxpZGF0b3IiLCJnZXRWYWx1ZXNGb3JPcHRpb25zIiwicHJlcGFyZURhdGFTZXQiLCJoYXNPd25Qcm9wZXJ0eSIsInN0YXJ0c1dpdGgiLCJDaGVja2JveElucHV0IiwidGFyZ2V0IiwicmVzZXRTdGF0ZSIsImJ0bkdyb3VwIiwiaW5wdXRXaWR0aCIsImRpdkNsYXNzIiwidG9nZ2xlQ2hlY2tlZCIsIkRhdGVUaW1lRHJvcGRvd24iLCJEYXRlIiwiaXMxMkhvdXJUaW1lIiwidGVzdCIsIlRJTUVfRk9STUFUX1NJVEUiLCJ0b0xvd2VyQ2FzZSIsInJlcGxhY2UiLCJyZXZlcnNlIiwiam9pbiIsImVkaXRvck9wZW4iLCJpbnB1dFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJwcmV2U3RhdGUiLCJuZXdEYXRlIiwidG9JU09TdHJpbmciLCJpbnB1dENsYXNzIiwiU2VydmVyRGF0ZVRpbWUiLCJmcm9tSlNEYXRlIiwib25Ub2dnbGUiLCJ0b0Zvcm1hdCIsIkRBVEVfVElNRV9GT1JNQVRfU0lURSIsImtleUNvZGUiLCJFTlRFUiIsIlNQQUNFIiwiRVNQUkVTU09fSUNPTl9DQUxFTkRBUiIsIlNFUlZFUl9MT0NBTEUiLCJ1cGRhdGUiLCJjYW5jZWwiLCJEYXRlVGltZUlucHV0IiwiRm9ybUlucHV0IiwiSW5wdXRMYXlvdXQiLCJjaGFuZ2VMaXN0ZW5lciIsImFmdGVySW5wdXQiLCJyZXN0IiwiZm9ybUxpc3RlbmVyIiwiSGlkZGVuSW5wdXQiLCJJbmxpbmVFZGl0SW5wdXQiLCJwcmV2UHJvcHMiLCJzYXZpbmciLCJlZGl0aW5nIiwiY3VycmVudCIsImZvY3VzIiwiZG9uZSIsIm9yaWdWYWx1ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiZWRpdCIsIkVTQ0FQRSIsInZhbHVlVHlwZSIsImlucHV0UHJvcHMiLCJub3RpY2VTdHlsZSIsInRleHRDaGFuZ2UiLCJrZXlEb3duSW5wdXQiLCJzcGlubmVyIiwidmFsdWVGb3JtYXR0ZXIiLCJmb3JtYXR0ZXJTZXR0aW5ncyIsImtleVNlbGVjdCIsImNyZWF0ZVJlZiIsImVkaXRDb21wb25lbnQiLCJkaXNwbGF5Q29tcG9uZW50IiwiUmFkaW9JbnB1dCIsIlNlbGVjdElucHV0Iiwib3B0aW9uTGlzdCIsIlRleHRJbnB1dCIsIlRleHRhcmVhIiwiVG9nZ2xlIiwiaGVscFRleHRJZkNoZWNrZWQiLCJoZWxwVGV4dElmTm90Q2hlY2tlZCIsInRvZ2dsZSIsIlRvZ2dsZUlucHV0IiwiQ2hpbGRyZW4iLCJjaGlsZCIsImNvbFNpemUiLCJsYWJlbENvbFNpemUiLCJGb3JtQ29sdW1uIiwib2Zmc2V0IiwiYWxpZ24iLCJleHRyYUF0dHJpYnV0ZXMiLCJGb3JtSW5mbyIsImRpc21pc3NhYmxlIiwiRm9ybVJvdyIsIkZvcm1TYXZlQ2FuY2VsQnV0dG9ucyIsIkZvcm1TZWN0aW9uIiwiRm9ybVdyYXBwZXIiLCJ0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQiLCJidWlsZE9wdGlvbnMiLCJlbnRpdGllcyIsIm9wdGlvbnNFbnRpdHlNYXAiLCJtYXBTZWxlY3Rpb24iLCJpc01hcCIsImZyb20iLCJpc1VuZGVmaW5lZCIsInJlZHVjZXJDYWxsYmFjayIsImVudGl0eSIsImRlZmF1bHRQcm9wVHlwZXMiLCJzZWxlY3RlZCIsIm9uU2VsZWN0IiwiY3JlYXRlTW9kZWxTZWxlY3QiLCJtb2RlbE5hbWUiLCJNb2RlbFNlbGVjdENvbXBvbmVudCIsInF1ZXJ5RGF0YSIsInNlbGVjdE9wdGlvbnMiLCJzZWxlY3RDb25maWd1cmF0aW9uIiwiY29uc3RydWN0b3IiLCJkaXNwbGF5TmFtZSIsIm1vZGVsU2VsZWN0TmFtZSIsIlJFQUNUX1NFTEVDVF9UWVBFUyIsImF1dG9Gb2N1cyIsImJhY2tzcGFjZVJlbW92ZXNWYWx1ZSIsImJsdXJJbnB1dE9uU2VsZWN0IiwiY2FwdHVyZU1lbnVTY3JvbGwiLCJjbGFzc05hbWUiLCJjbGFzc05hbWVQcmVmaXgiLCJjbG9zZU1lbnVPblNlbGVjdCIsImNvbXBvbmVudHMiLCJjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUiLCJkZWxpbWl0ZXIiLCJlc2NhcGVDbGVhcnNWYWx1ZSIsImZpbHRlck9wdGlvbiIsImZvcm1hdEdyb3VwTGFiZWwiLCJmb3JtYXRPcHRpb25MYWJlbCIsImdldE9wdGlvbkxhYmVsIiwiZ2V0T3B0aW9uVmFsdWUiLCJoaWRlU2VsZWN0ZWRPcHRpb25zIiwiaXNDbGVhcmFibGUiLCJpc0Rpc2FibGVkIiwiaXNPcHRpb25EaXNhYmxlZCIsImlzT3B0aW9uU2VsZWN0ZWQiLCJpc011bHRpIiwiaXNTZWFyY2hhYmxlIiwibG9hZGluZ01lc3NhZ2UiLCJtaW5NZW51SGVpZ2h0IiwibWF4TWVudUhlaWdodCIsIm1lbnVJc09wZW4iLCJtZW51UGxhY2VtZW50IiwibWVudVBvc2l0aW9uIiwibWVudVBvcnRhbFRhcmdldCIsImVsZW1lbnQiLCJtZW51U2hvdWxkQmxvY2tTY3JvbGwiLCJtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXciLCJub09wdGlvbnNNZXNzYWdlIiwib25CbHVyIiwib25Gb2N1cyIsIm9uSW5wdXRDaGFuZ2UiLCJvbktleURvd24iLCJvbk1lbnVPcGVuIiwib25NZW51Q2xvc2UiLCJvbk1lbnVTY3JvbGxUb1RvcCIsIm9uTWVudVNjcm9sbFRvQm90dG9tIiwib3Blbk1lbnVPbkZvY3VzIiwib3Blbk1lbnVPbkNsaWNrIiwicGFnZVNpemUiLCJwbGFjZWhvbGRlciIsInNjcmVlblJlYWRlclN0YXR1cyIsInN0eWxlcyIsImNsZWFySW5kaWNhdG9yIiwiY29udGFpbmVyIiwiY29udHJvbCIsImRyb3Bkb3duSW5kaWNhdG9yIiwiZ3JvdXAiLCJncm91cEhlYWRpbmciLCJpbmRpY2F0b3JzQ29udGFpbmVyIiwiaW5kaWNhdG9yU2VwYXJhdG9yIiwibG9hZGluZ0luZGljYXRvciIsImxvYWRpbmdNZXNzYWdlQ1NTIiwibWVudSIsIm1lbnVMaXN0IiwibWVudVBvcnRhbCIsIm11bHRpVmFsdWUiLCJtdWx0aVZhbHVlTGFiZWwiLCJtdWx0aVZhbHVlUmVtb3ZlIiwibm9PcHRpb25zTWVzc2FnZUNTUyIsInNpbmdsZVZhbHVlIiwidmFsdWVDb250YWluZXIiLCJ0YWJJbmRleCIsInRhYlNlbGVjdHNWYWx1ZSIsIlJFQUNUX1NFTEVDVF9ERUZBVUxUUyIsIk1vZGVsU2VsZWN0Iiwic2V0U3RhdGVGcm9tUHJvcHMiLCJzaG91bGRVcGRhdGVTdGF0ZSIsImdldFNlbGVjdExhYmVsIiwiZ2V0T3B0aW9ucyIsInNlbGVjdGVkVmFsdWUiLCJnZXRPcHRpb25PYmplY3RGb3JWYWx1ZSIsInVwZGF0ZWQiLCJtYXBPcHRpb25zQ2FsbGJhY2siLCJtb2RlbEVudGl0aWVzIiwibWF0Y2giLCJmaW5kIiwibmV4dFByb3BzIiwicHJldkNvbmZpZ3VyYXRpb24iLCJuZXh0Q29uZmlndXJhdGlvbiIsImlzU2hhbGxvd0VxdWFsIiwia2V5cyIsIk1PREVMX05BTUVTIiwibGltaXQiLCJvcmRlckJ5Iiwib3JkZXIiLCJBTExPV0VEX09SREVSX1ZBTFVFUyIsImdldFF1ZXJ5U3RyaW5nIiwidW5pcXVlSWQiLCJRVUVSWV9PUkRFUl9ERVNDIiwid2l0aFNlbGVjdCIsInNlbGVjdCIsIm93blByb3BzIiwicXVlcnlTdHJpbmciLCJnZXRFbnRpdGllcyIsImlzUmVxdWVzdGluZ0VudGl0aWVzIiwidXBwZXJGaXJzdCIsImNhbWVsQ2FzZSIsImRlZmF1bHQiLCJtb2RlbCIsInByZXR0eURhdGVGcm9tRGF0ZVRpbWUiLCJEYXRldGltZVNlbGVjdCIsIk1PREVMX05BTUUiLCJkZWZhdWx0UXVlcnlEYXRhIiwicXVlcnlEYXRhVHlwZXMiLCJFZGl0b3JEYXRldGltZVNlbGVjdCIsIndpdGhCYXNlQ29udHJvbCIsIkV2ZW50U2VsZWN0IiwiRWRpdG9yRXZlbnRTZWxlY3QiLCJzdGF0dXNFbnRpdHkiLCJzdGF0dXNNb2RlbCIsInByZXR0eVN0YXR1cyIsIlNUU19JRCIsIlN0YXR1c1NlbGVjdCIsIkFMTF9TVEFUVVNfSURTIiwiRWRpdG9yU3RhdHVzU2VsZWN0IiwiVGlja2V0U2VsZWN0IiwiRWRpdG9yVGlja2V0U2VsZWN0IiwiaXNGbG9hdCIsImlzVmFsaWRGbG9hdCIsImlzSW50ZWdlciIsImlzVmFsaWRJbnRlZ2VyIiwiaXNOdW1lcmljIiwiaXNWYWxpZE51bWVyaWMiLCJtYXRjaGVzIiwiZmllbGRWYWx1ZSIsImZpZWxkTmFtZSIsInZhbHVlVG9NYXRjaCIsIm1heEZsb2F0IiwibWF4IiwiZmxvYXRMZXNzVGhhbk9yRXF1YWxUbyIsIl9uIiwibWF4TGVuZ3RoIiwic3RyaW5nTGVuZ3RoTGVzc1RoYW5PckVxdWFsVG8iLCJtYXhOdW1iZXIiLCJudW1iZXJMZXNzVGhhbk9yRXF1YWxUbyIsIm1pbkZsb2F0IiwibWluIiwiZmxvYXRHcmVhdGVyVGhhbk9yRXF1YWxUbyIsIm1pbkxlbmd0aCIsInN0cmluZ0xlbmd0aEdyZWF0ZXJUaGFuT3JFcXVhbFRvIiwibWluTnVtYmVyIiwibnVtYmVyR3JlYXRlclRoYW5PckVxdWFsVG8iLCJERUZBVUxUX0xJTUlUIiwiREVGQVVMVF9MQUJFTCIsIkRFRkFVTFRfTUlOIiwiREVGQVVMVF9NQVgiLCJRdWVyeUxpbWl0Iiwib25MaW1pdENoYW5nZSIsIndpdGhTbGlkZXIiLCJCaWdnaWVDYWxlbmRhckRhdGUiLCJkYXRlIiwiaGVhZGVyVGV4dCIsImZvb3RlclRleHQiLCJvbkVkaXQiLCJlZGl0QnV0dG9uIiwic2hvd1RpbWUiLCJlZGl0RGF0ZUJ1dHRvbiIsInRvb2x0aXAiLCJ0b29sdGlwUG9zaXRpb24iLCJpbnN0YW5jZU9mIiwiRGF0ZVRpbWUiLCJDYWxlbmRhckRhdGVSYW5nZSIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJ0aW1lIiwiQ2FsZW5kYXJQYWdlRGF0ZSIsInN0YXR1c0NsYXNzIiwicmVuZGVyQ2FsZW5kYXJQYWdlIiwic3RhcnRPckVuZCIsInBhZ2VDbGFzcyIsIm90aGVyUHJvcHMiLCJnZXRTdGFydERhdGUiLCJnZXREaXZpZGVyIiwiZ2V0RW5kRGF0ZSIsIk1lZGl1bUNhbGVuZGFyRGF0ZSIsImFkZFdyYXBwZXIiLCJtZWRpdW1EYXRlIiwiRHJvcERvd25NZW51IiwibWVudUl0ZW1zIiwiRW50aXR5RGV0YWlsc1BhbmVsIiwiZWRpdGFibGUiLCJJbmZpbml0eSIsImRldGFpbHMiLCJkZXRhaWwiLCJlbnRpdHlEZXRhaWwiLCJkZXRhaWxzU2VwYXJhdG9yIiwiRW50aXR5TGlzdCIsIkVudGl0eUdyaWRWaWV3IiwiRW50aXR5TGlzdFZpZXciLCJ2aWV3Iiwibm9SZXN1bHRzVGV4dCIsIndpdGhvdXQiLCJlbnRpdHlMaXN0Iiwid2l0aEZvcm1Db250YWluZXJBbmRQbGFjZWhvbGRlciIsIkVudGl0eSIsIkVzcHJlc3NvQnV0dG9uIiwiaWNvbiIsImljb25TaXplIiwiRW50aXR5QWN0aW9uTWVudUl0ZW0iLCJJY29uTWVudUl0ZW0iLCJpdGVtQ291bnQiLCJleHRlcm5hbEFwcCIsImJ0bkNsYXNzIiwicGFyc2VJbnQiLCJpdGVtQ291bnRDbGFzcyIsIm5vZGUiLCJBdmF0YXJJbWFnZSIsImF2YXRhckNsYXNzIiwiYXZhdGFySGVpZ2h0IiwiYXZhdGFyV2lkdGgiLCJhdmF0YXJBbHRUZXh0IiwiaGVpZ2h0Iiwid2lkdGgiLCJFU1BSRVNTT19JQ09OX0NBTENVTEFUT1IiLCJFU1BSRVNTT19JQ09OX1JFTSIsIkVTUFJFU1NPX0lDT05fU0FWRSIsImlzRXNwcmVzc29JY29uIiwiRXNwcmVzc29JY29uIiwicGF0aCIsImFzc2VydFN0ZXBDb25maWd1cmF0aW9uIiwiVHlwZUVycm9yIiwiZ2V0U3RlcEJ1YmJsZXMiLCJidWJibGVEYXRhIiwic3RlcEJ1YmJsZXMiLCJzbHVnIiwiYWN0aW9uIiwiY2xpY2thYmxlIiwiYWN0aXZlIiwiU3RlcEJ1YmJsZU1lbnUiLCJTdGVwQnViYmxlIiwiaXNBY3RpdmUiLCJzdGVwVmFsdWUiLCJjc3NDbGFzcyIsImNsaWNrQWN0aW9ucyIsIm9uS2V5UHJlc3MiLCJyb2xlIiwicHVyZSIsIlN0ZXBUZXh0IiwiY29udGVudCIsIkVzcHJlc3NvVGFibGUiLCJUYWJsZSIsIlRhYmxlSGVhZGVyIiwiVGFibGVCb2R5IiwiVGFibGVSb3ciLCJUYWJsZUZvb3RlciIsIlRhYmxlSGVhZGluZ0NlbGwiLCJUYWJsZURhdGFDZWxsIiwiUmVzcG9uc2l2ZVRhYmxlIiwiUmVzcG9uc2l2ZUNlbGwiLCJoZWFkaW5nIiwibWV0YURhdGEiLCJ0YWJsZUlkIiwiTWF0aCIsInJhbmRvbSIsInN1YnN0ciIsInRhYmxlQ2FwdGlvbiIsImNhcHRpb25JRCIsInNob3dUYWJsZUZvb3RlciIsImhhc1Jvd0hlYWRlcnMiLCJjbGFzc2VzIiwidGFibGVDbGFzcyIsImhlYWRlckNsYXNzIiwiaGVhZGVyUm93Q2xhc3MiLCJoZWFkZXJUaENsYXNzIiwiYm9keUNsYXNzIiwiYm9keVJvd0NsYXNzIiwiYm9keVRoQ2xhc3MiLCJib2R5VGRDbGFzcyIsImZvb3RlckNsYXNzIiwiZm9vdGVyUm93Q2xhc3MiLCJmb290ZXJUaENsYXNzIiwiY29sdW1ucyIsImlzRm9vdGVyIiwicm93TnVtYmVyIiwicm93VHlwZSIsInJvd1Byb3BzIiwiaW5kZXhNb2QiLCJoZWFkZXJDZWxscyIsImNvbHVtbiIsImNvbE51bWJlciIsImhhc1JlbmRlckNhbGxiYWNrIiwicmVuZGVyIiwicmVuZGVyQ2FsbGJhY2siLCJoZWFkaW5nQ2VsbCIsInRhYmxlUm93IiwiY2VsbHMiLCJjbGFzcyIsImNlbGxQcm9wcyIsImRhdGFSb3ciLCJyb3dDZWxscyIsImNlbGxEYXRhIiwiZGF0YUNlbGwiLCJyb3dEYXRhIiwiZm9vdGVyRGF0YSIsInNldE1ldGFEYXRhIiwic2V0Q3NzQ2xhc3NlcyIsInRhYmxlSGVhZGVyIiwiZXh0cmFQcm9wcyIsInNob3dGb290ZXIiLCJyb3dUeXBlQ2xhc3MiLCJzY29wZSIsImNhcHRpb25UZXh0IiwicmVnZXgxIiwicGFyc2VGbG9hdCIsIk51bWJlciIsImlzSW5maW5pdGUiLCJudWxsSXNJbmZpbml0eSIsImlzTmFOIiwiaXNGaW5pdGUiLCJhc3NlcnRFbnRpdHlIYXNLZXkiLCJtZXNzYWdlIiwiRXhjZXB0aW9uIiwiYXNzZXJ0SW1tdXRhYmxlT2JqZWN0SGFzUGF0aCIsImltbXV0YWJsZSIsImhhc0luIiwiYXNzZXJ0SXNBcnJheSIsIml0ZW1zIiwiYXNzZXJ0SXNOb3RFbXB0eSIsImFzc2VydElzTWFwIiwiaXRlbSIsIm9yZGVyQnlNYXAiLCJsYXN0TmFtZU9ubHkiLCJmaXJzdE5hbWVPbmx5IiwiZmlyc3RUaGVuTGFzdE5hbWUiLCJsYXN0VGhlbkZpcnN0TmFtZSIsImZvckV2ZW50SWQiLCJmb3JEYXRldGltZUlkIiwiZm9yVGlja2V0SWQiLCJmb3JTdGF0dXNJZCIsIlJFR0lTVFJBVElPTl9TVEFUVVNfSURTIiwiZm9yUmVnaXN0cmF0aW9uSWQiLCJPYmplY3QiLCJRVUVSWV9PUkRFUl9BU0MiLCJtYXBPcmRlckJ5Iiwid2hlcmVDb25kaXRpb25zIiwid2hlcmUiLCJpbmNsdWRlcyIsImJhc2VHZXRRdWVyeVN0cmluZyIsImZvcm1hdERhdGVzT25FbnRpdGllcyIsImVudGl0eURhdGVGaWVsZHMiLCJmb3JtYXQiLCJkYXRlRm9ybWF0cyIsImxvY2FsIiwiZm9ybWF0dGVkRW50aXRpZXMiLCJmb3JtYXREYXRlc09uRW50aXR5IiwibmV3RW50aXR5IiwiZGF0ZUZpZWxkIiwiZm9ybWF0RW50aXRpZXNEYXRlc1RvTXlzcWwiLCJmb3JtYXRFbnRpdHlEYXRlc1RvTXlzcWwiLCJmb3JtYXRFbnRpdGllc0RhdGVzVG9TaXRlIiwiZm9ybWF0RW50aXR5RGF0ZXNUb1NpdGUiLCJjb252ZXJ0RW50aXRpZXNEYXRlc1RvTW9tZW50IiwiY29udmVydEVudGl0eURhdGVzVG9Nb21lbnQiLCJHUkVBVEVSX1RIQU4iLCJlbmNvZGVVUklDb21wb25lbnQiLCJMRVNTX1RIQU4iLCJHUkVBVEVSX1RIQU5fQU5EX0VRVUFMIiwiTEVTU19USEFOX0FORF9FUVVBTCIsImRlZmF1bHRXaGVyZUNvbmRpdGlvbnMiLCJxdWVyeVBhcmFtcyIsImZpZWxkIiwiQ0hFQ0tJTl9TVEFUVVNfSUQiLCJTVEFUVVNfQ0hFQ0tFRF9PVVQiLCJTVEFUVVNfQ0hFQ0tFRF9JTiIsIlNUQVRVU19DSEVDS0VEX05FVkVSIiwiQ0hFQ0tJTl9TVEFUVVNfSURTIiwiY2hlY2tpblN0YXR1cyIsInRpbWVzdGFtcCIsIkRBVEVUSU1FX1NUQVRVU19JRCIsIkFDVElWRSIsIkNBTkNFTExFRCIsIkVYUElSRUQiLCJJTkFDVElWRSIsIlBPU1RQT05FRCIsIlNPTERfT1VUIiwiVFJBU0hFRCIsIlVQQ09NSU5HIiwiREFURVRJTUVfU1RBVFVTX0lEUyIsIk1JTlVURV9JTl9TRUNPTkRTIiwiSE9VUl9JTl9TRUNPTkRTIiwiREFZX0lOX1NFQ09ORFMiLCJXRUVLX0lOX1NFQ09ORFMiLCJNT05USF9JTl9TRUNPTkRTIiwiREFURV9GSUVMRFMiLCJmb3JtYXR0ZXJzIiwiZm9yT3duIiwiYmFzZUZvcm1hdHRlciIsImltcGxlbWVudGF0aW9uIiwiZnVuY3Rpb25OYW1lIiwiaW5jb21pbmdBcmdzIiwiZmlyc3RBcmciLCJwdWxsQXQiLCJEYXRlVGltZUVudGl0eSIsIkRUVF9FVlRfc3RhcnQiLCJoYXNTYW1lIiwiRFRUX0VWVF9lbmQiLCJhbGxEYXRlVGltZXNBc1N0cmluZyIsIlNFUEFSQVRPUl9TUEFDRV9EQVNIX1NQQUNFIiwiRFRUX25hbWUiLCJub3dEYXRlQW5kVGltZSIsIm1vbWVudCIsInNob3dFeHBpcmVkIiwibW9udGgiLCJzdGFydF9kYXRlIiwiZW5kX2RhdGUiLCJzdGFydE9mIiwiZW5kT2YiLCJhc3NlcnREYXRlVGltZUVudGl0eSIsImlzVmFsaWRFbnRpdHlPckFyY2hpdmUiLCJpbmNsdWRlVHJhc2hlZCIsImlzVHJhc2hlZCIsInN0YXJ0IiwiZGlmZk5vdyIsImFzU2Vjb25kcyIsImVuZCIsImlzRXhwaXJlZCIsImlzUmVjZW50bHlFeHBpcmVkIiwiaXNTb2xkT3V0IiwiY2FwIiwicmVnTGltaXQiLCJzb2xkIiwiaXNVcGNvbWluZyIsImRlbGV0ZWQiLCJzdGF0dXMiLCJnZXRCYWNrZ3JvdW5kQ29sb3JDbGFzcyIsImdldERhdGVUaW1lU3RhdHVzVGV4dExhYmVsIiwiZGF0ZVN0YXR1cyIsIm1hcFRvT2JqZWN0VmFsdWVzIiwibW9kZWxOYW1lRW5kcG9pbnRzIiwibWFwVmFsdWVzIiwiZ2V0RGVmYXVsdE1vZGVsRW50aXRpZXNPYmplY3QiLCJtZW1vaXplIiwiZW5kcG9pbnRzIiwiREVGQVVMVF9MSVNUU19TVEFURSIsIkRFRkFVTFRfQ09SRV9TVEFURSIsInJlbGF0aW9ucyIsImRpcnR5IiwiZGVsZXRlIiwiYWRkIiwidHJhc2giLCJERUZBVUxUX1NDSEVNQV9TVEFURSIsInNjaGVtYSIsImZhY3RvcnkiLCJyZWxhdGlvbkVuZHBvaW50cyIsInJlbGF0aW9uU2NoZW1hIiwicGF0aHMiLCJjb2xsZWN0aW9uX2VuZHBvaW50cyIsImJhc2VSZXN0Um91dGUiLCJiYXNlX3Jlc3Rfcm91dGUiLCJnZXRFbmRwb2ludCIsImFwcGx5UXVlcnlTdHJpbmciLCJzdHJpcEJhc2VSb3V0ZUZyb21VcmwiLCJtYXliZUFzc2VydFZhbHVlT2JqZWN0IiwiaXNEYXRlVGltZUZpZWxkIiwiYXNzZXJ0SXNEYXRlVGltZSIsImlzTW9uZXlGaWVsZCIsIk1vbmV5IiwiYXNzZXJ0TW9uZXkiLCJhc3NlcnRWYWxpZFNjaGVtYSIsImlzU2NoZW1hIiwiSW52YWxpZFNjaGVtYSIsImFzc2VydFZhbGlkU2NoZW1hRmllbGRQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsInJhdyIsImFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkIiwiaW5zdGFuY2UiLCJpc1ZhbGlkIiwiaXNTaGFsbG93VmFsaWRWYWx1ZUZvckZpZWxkIiwiZW51bSIsInZhbGlkYXRlRW51bVR5cGUiLCJ2YWxpZGF0ZVR5cGUiLCJtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyIsImFzc2VydFZhbGlkRmllbGRBbmRWYWx1ZUFnYWluc3RTY2hlbWEiLCJ2YWxpZGF0aW9uVHlwZSIsInZhbGlkYXRlVHlwZUZvckZpZWxkIiwiUFJJVkFURV9QUk9QRVJUSUVTIiwiU0FWRV9TVEFURSIsIlZBTElEQVRFX1RZUEVTIiwiQmFzZUVudGl0eSIsImVudGl0eUZpZWxkc0FuZFZhbHVlcyIsImZpZWxkUHJlZml4ZXMiLCJpc05ldyIsIkNMRUFOIiwiY3JlYXRlR2V0dGVyIiwic2V0U2F2ZVN0YXRlIiwiTkVXIiwiU2V0IiwiY3JlYXRlRW50aXR5R2V0dGVyc0FuZFNldHRlcnMiLCJjcmVhdGVQZXJzaXN0aW5nR2V0dGVyc0FuZFNldHRlcnMiLCJzZWFsIiwic2F2ZVN0YXRlIiwiRElSVFkiLCJwcm90ZWN0ZWRGaWVsZHMiLCJrZWVwSWQiLCJjcmVhdGVGYWN0b3J5IiwiY3JlYXRlRW50aXR5RmFjdG9yeSIsIiRzY2hlbWEiLCJjcmVhdGVOZXciLCJmb3JDbG9uZSIsIm5hbWVDbGFzcyIsImV4dGVuZGVkQ2xhc3MiLCJjbGFzc0RlZiIsImZpZWxkc0FuZFZhbHVlcyIsImZyb21FeGlzdGluZyIsImhhc1Jhd1Byb3BlcnR5IiwiaXNQbGFpbk9iamVjdCIsImhhc1ByZXR0eVByb3BlcnR5IiwicHJldHR5IiwiaGFzUmVuZGVyZWRQcm9wZXJ0eSIsInJlbmRlcmVkIiwiaGFzRm9ybWF0UHJvcGVydHkiLCJoYXNFbnVtUHJvcGVydHkiLCJpc1ZhbHVlT2JqZWN0RmllbGQiLCJpc1VUQ0RhdGVUaW1lRmllbGQiLCJkYXRlVGltZUZpZWxkTmFtZSIsImlzUHJpbWFyeUtleUZpZWxkIiwicHJpbWFyeV9rZXkiLCJpc1JlYWRPbmx5IiwicmVhZG9ubHkiLCJpc0VudGl0eUZpZWxkIiwiaXNFbnVtRmllbGQiLCJTeW1ib2wiLCJWQUxJREFURV9UWVBFIiwiUkFXIiwiUkVOREVSRUQiLCJQUkVUVFkiLCJNT0RFTF9QUkVGSVhFUyIsInByZWZpeE1hcCIsImFwcGx5RmlsdGVycyIsImFuc3dlciIsImNoYW5nZV9sb2ciLCJjaGVja2luIiwiY291bnRyeSIsImN1cnJlbmN5IiwiY3VycmVuY3lfcGF5bWVudF9tZXRob2QiLCJkYXRldGltZSIsImRhdGV0aW1lX3RpY2tldCIsImV2ZW50X21lc3NhZ2VfdGVtcGxhdGUiLCJldmVudF9xdWVzdGlvbl9ncm91cCIsImV2ZW50X3ZlbnVlIiwiZXh0cmFfam9pbiIsImV4dHJhX21ldGEiLCJsaW5lX2l0ZW0iLCJtZXNzYWdlX3RlbXBsYXRlIiwibWVzc2FnZV90ZW1wbGF0ZV9ncm91cCIsInBheW1lbnQiLCJwYXltZW50X21ldGhvZCIsInBvc3RfbWV0YSIsInByaWNlIiwicHJpY2VfdHlwZSIsInF1ZXN0aW9uIiwicXVlc3Rpb25fZ3JvdXAiLCJxdWVzdGlvbl9ncm91cF9xdWVzdGlvbiIsInF1ZXN0aW9uX29wdGlvbiIsInJlY3VycmVuY2UiLCJyZWdpc3RyYXRpb24iLCJyZWdpc3RyYXRpb25fcGF5bWVudCIsInRlcm0iLCJ0ZXJtX3JlbGF0aW9uc2hpcCIsInRlcm1fdGF4b25vbXkiLCJ0aWNrZXQiLCJ0aWNrZXRfcHJpY2UiLCJ0aWNrZXRfdGVtcGxhdGUiLCJ0cmFuc2FjdGlvbiIsInZlbnVlIiwid3BfdXNlciIsIm9wdHMiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsImNyZWF0ZUNhbGxiYWNrR2V0dGVyIiwicHJvcGVydHlOYW1lIiwiY2FsbEJhY2siLCJjcmVhdGVHZXR0ZXJBbmRTZXR0ZXIiLCJpbml0aWFsRmllbGRWYWx1ZSIsInByb3BlcnR5VmFsdWUiLCJzZXQiLCJyZWNlaXZlZFZhbHVlIiwiaXNQcmltYXJ5RmllbGQiLCJzZXRGaWVsZFRvUGVyc2lzdCIsImNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyIiwib3JpZ2luYWxGaWVsZE5hbWUiLCJhbGlhc0ZpZWxkTmFtZSIsImNyZWF0ZUFsaWFzR2V0dGVyIiwiY3JlYXRlRmx1ZW50U2V0dGVyIiwicHJpbWFyeUtleXMiLCJvcmlnaW5hbEZpZWxkc0FuZFZhbHVlcyIsImlzUHJpbWFyeUtleSIsInNldFZhbGlkYXRlVHlwZUZvckZpZWxkIiwic2V0SW5pdGlhbEVudGl0eUZpZWxkc0FuZFZhbHVlcyIsInNldENhbGN1bGF0ZWRGaWVsZEFuZFZhbHVlcyIsInBvcHVsYXRlUHJvdGVjdGVkRmllbGRzUHJvcGVydHkiLCJzZXRSZXNvdXJjZXMiLCJjcmVhdGVQcmltYXJ5S2V5RmllbGRHZXR0ZXJzIiwicG9wdWxhdGVQcmltYXJ5S2V5cyIsInBvcHVsYXRlTWlzc2luZ0ZpZWxkcyIsImNhbGN1bGF0ZWRGaWVsZHMiLCJfY2FsY3VsYXRlZF9maWVsZHMiLCJfcHJvdGVjdGVkIiwiZ2V0UHJpbWFyeUtleUZpZWxkc0Zyb21TY2hlbWEiLCJzY2hlbWFQcm9wZXJ0aWVzIiwic2NoZW1hRmllbGQiLCJjdWlkIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyRm9yRmllbGQiLCJkZXJpdmVWYWxpZGF0ZVR5cGVGb3JGaWVsZCIsImdldEVudGl0eUZpZWxkc0Zyb21TY2hlbWEiLCJnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yQ2xvbmluZyIsImZvclVwZGF0ZSIsImdldEJhc2VGaWVsZHNBbmRWYWx1ZXNGb3JQZXJzaXN0aW5nIiwiZm9ySW5zZXJ0IiwiZW50aXR5VmFsdWVzIiwicHJpbWFyeUtleSIsImZvclBlcnNpc3QiLCJnZXREZWZhdWx0VmFsdWVGb3JGaWVsZCIsImNyZWF0ZVJhd0VudGl0eUdldHRlcnNTZXR0ZXJzIiwiZGVyaXZlUHJlcGFyZWRWYWx1ZUZvckZpZWxkIiwiY3JlYXRlUmVuZGVyZWRHZXR0ZXJzIiwiZGVyaXZlUmVuZGVyZWRWYWx1ZSIsImNyZWF0ZUFsaWFzR2V0dGVyRm9yRmllbGQiLCJjcmVhdGVBbGlhc2VzRm9yTWV0aG9kIiwibWV0aG9kIiwibmV3RmllbGROYW1lIiwiZmllbGRQcmVmaXgiLCJnZXRSZW5kZXJlZENhbGxiYWNrIiwicmVxdWVzdGVkRmllbGROYW1lIiwicmVtb3ZlUHJlZml4ZXNGcm9tRmllbGQiLCJwcmVmaXhlc1RvUmVtb3ZlIiwic29ydEJ5IiwicHJlZml4IiwiZ2V0UmVuZGVyZWQiLCJoYXNNdWx0aXBsZVByaW1hcnlLZXlzQ2FsbGJhY2siLCJoYXNDYWxjdWxhdGVkRmllbGRDYWxsYmFjayIsImZpZWxkTmFtZVRvQ2hlY2siLCJjYWxjdWxhdGVkRmllbGRWYWx1ZSIsImNhbGN1bGF0ZWRGaWVsZE5hbWUiLCJyZWxhdGlvbk5hbWUiLCJyZXNvdXJjZVZhbHVlIiwicmVzb3VyY2VOYW1lIiwiaHJlZiIsImdldFJlbGF0aW9uTmFtZUZyb21MaW5rIiwic2V0UmVsYXRpb25zUmVzb3VyY2UiLCJnZXRSZWxhdGlvblJlc291cmNlQ2FsbGJhY2siLCJyZXNvdXJjZUluZm8iLCJyZXNvdXJjZUxpbmsiLCJzaW5nbGUiLCJnZXRSZWxhdGlvblJlc291cmNlIiwib3ZlcnJpZGUiLCJjdXJyZW50U3RhdGUiLCJJbnZhbGlkQXJndW1lbnQiLCJmaWVsZHNUb1BlcnNpc3RPbkluc2VydCIsIm1heWJlQ29udmVydFRvVmFsdWVPYmplY3QiLCJ2YWxpZGF0ZUlzRGF0ZVRpbWUiLCJmcm9tSVNPIiwiU2l0ZUN1cnJlbmN5IiwidG9JU08iLCJ0b051bWJlciIsIm1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdCIsInBsdXJhbE1vZGVsTmFtZSIsImxhc3QiLCJlbnRpdHlJbnN0YW5jZSIsIml0ZXJhdG9yIiwiZ2V0UHJpbWFyeUtleVZhbHVlcyIsInBpY2siLCJwaWNrQnkiLCJkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlIiwiZGVyaXZlVHlwZUZvckZpZWxkIiwidmFsaWQiLCJzaW5nbGVUeXBlIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsImlzQm9vbGVhbiIsImVudW1WYWx1ZXMiLCJleHBlY3RWYWx1ZU9iamVjdHMiLCJpc0VudW0iLCJpc1ZhbHVlT2JqZWN0IiwiRVZFTlRfU1RBVFVTX0lEIiwiRVZFTlRfU1RBVFVTX0lEUyIsImNhdGVnb3J5U2x1ZyIsInRpY2tldF9zdGFydCIsInRpY2tldF9lbmQiLCJwbHVyYWxpemUiLCJzaW5ndWxhck1vZGVsTmFtZSIsInNpbmd1bGFyIiwibW9kZWxOYW1lRm9yUXVlcnlTdHJpbmciLCJzdGFydENhc2UiLCJCQVNFX1BSSUNFX1RZUEVTIiwiQkFTRV9QUklDRSIsIkRJU0NPVU5UIiwiU1VSQ0hBUkdFIiwiVEFYIiwicHJpbWFyeV9rZXlzIiwidmFsdWVzRm9yQ29tYmluZWRQcmltYXJ5S2V5cyIsInJlc3VsdCIsInRyaW1FbmQiLCJ2YWx1ZUZvclByaW1hcnlLZXkiLCJnZXRQcmltYXJ5S2V5IiwiZ2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nIiwia2V5VmFsdWVzIiwiZ2V0RW50aXR5UHJpbWFyeUtleVZhbHVlcyIsImtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUiLCJtYXBwZWRFbnRpdGllcyIsIk1hcCIsImNyZWF0ZUFuZEtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUiLCJlbnRpdHlJZCIsImZvckF0dGVuZGVlSWQiLCJmb3JUcmFuc2FjdGlvbklkIiwicmVnX2lkIiwicmVnX2RhdGUiLCJTVEFUVVNfVFlQRV9FTUFJTCIsIlNUQVRVU19UWVBFX0VWRU5UIiwiU1RBVFVTX1RZUEVfTUVTU0FHRSIsIlNUQVRVU19UWVBFX1BBWU1FTlQiLCJTVEFUVVNfVFlQRV9SRUdJU1RSQVRJT04iLCJTVEFUVVNfVFlQRV9UUkFOU0FDVElPTiIsIkVNQUlMX1NUQVRVU19JRCIsIkRSQUZUIiwiU0VOVCIsIlJFR0lTVFJBVElPTl9DTE9TRUQiLCJERUxFVEVEIiwiREVOSUVEIiwiTk9UX0FDVElWRSIsIk5PVF9PUEVOIiwiT05HT0lORyIsIlJFR0lTVFJBVElPTl9PUEVOIiwiUEVORElORyIsIlNFQ09OREFSWSIsIk1FU1NBR0VfU1RBVFVTX0lEIiwiREVCVUciLCJFWEVDVVRJTkciLCJGQUlMIiwiSU5DT01QTEVURSIsIklETEUiLCJSRVNFTkQiLCJSRVRSWSIsIlBBWU1FTlRfU1RBVFVTX0lEIiwiQVBQUk9WRUQiLCJERUNMSU5FRCIsIkZBSUxFRCIsIlJFR0lTVFJBVElPTl9TVEFUVVNfSUQiLCJOT1RfQVBQUk9WRUQiLCJQRU5ESU5HX1BBWU1FTlQiLCJXQUlUX0xJU1QiLCJUUkFOU0FDVElPTl9TVEFUVVNfSUQiLCJBQkFORE9ORUQiLCJDT01QTEVURSIsIk9WRVJQQUlEIiwiQ1BUX1NUQVRVU19JRCIsIlBVQkxJU0giLCJGVVRVUkUiLCJQUklWQVRFIiwiVU5LTk9XTl9TVEFUVVNfSUQiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1JFR0lTVFJBVElPTiIsIkxhYmVsIiwiZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RSQU5TQUNUSU9OIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9QQVlNRU5UIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9NRVNTQUdFIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DUFQiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0VWRU5UIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9USUNLRVQiLCJUSUNLRVRfU1RBVFVTX0lEIiwiQVJDSElWRUQiLCJPTlNBTEUiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0RBVEVUSU1FIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DSEVDS0lOIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9BTEwiLCJzdGF0dXNDb2RlIiwiRk9STUFUX1NFTlRFTkNFX0NBU0UiLCJhc0Zvcm1hdHRlZCIsInByZXR0eVN0YXR1c2VzIiwic3RhdHVzQ29kZXMiLCJtYXBwZWRTdGF0dXNlcyIsInN0YXR1c1R5cGUiLCJUSUNLRVRfU1RBVFVTX0lEUyIsImFzc2VydFRpY2tldEVudGl0eSIsIlRpY2tldEVudGl0eSIsImluY2x1ZGVBcmNoaXZlZCIsImlzQXJjaGl2ZWQiLCJpc09uU2FsZSIsInF0eSIsImlzUGVuZGluZyIsImdldFRpY2tldFN0YXR1c1RleHRMYWJlbCIsInRpY2tldFN0YXR1cyIsImN1c3RvbUlkIiwiV3JhcHBlZENvbXBvbmVudCIsImhlbHAiLCJFbnRpdHlMaXN0RmlsdGVyQmFyIiwic2VhcmNoVGV4dCIsInNldFNlYXJjaFRleHQiLCJwZXJQYWdlIiwic2V0UGVyUGFnZSIsInNldExpc3RWaWV3Iiwic2V0R3JpZFZpZXciLCJlbnRpdHlGaWx0ZXJzIiwic2VhcmNoIiwibGlzdFZpZXciLCJncmlkVmlldyIsIlBhZ2luYXRlZEVudGl0eUxpc3RXaXRoRmlsdGVyQmFyIiwicGFnaW5hdGlvbkNvbmZpZyIsIndpdGhFbnRpdHlMaXN0RmlsdGVyQmFyIiwid2l0aEVudGl0eVBhZ2luYXRpb24iLCJQYWdpbmF0ZWRFbnRpdHlMaXN0V2l0aEZpbHRlckJhckFuZFN0YXRlIiwid2l0aEVudGl0eUxpc3RGaWx0ZXJTdGF0ZSIsImZpbHRlciIsImVudGl0eU5hbWUiLCJzZWFyY2hFbnRpdGllcyIsInN0b3JlIiwiZ2V0RmlsdGVyIiwid2l0aERpc3BhdGNoIiwiZGlzcGF0Y2giLCJzZXRGaWx0ZXIiLCJ2YWxpZGF0ZU5leHRTdGF0ZSIsIm5leHRTdGF0ZVJlc3BvbnNlIiwiY29udmVydGVkVmFsdWVzIiwid2l0aE1vbmV5IiwicHJvcE5hbWVNYXAiLCJFbmhhbmNlZENvbXBvbmVudCIsIm5leHRTdGF0ZSIsInByb3BOYW1lIiwiaXNTaGFsbG93RXF1YWxBcnJheXMiLCJnZXROZXh0U3RhdGUiLCJzaG91bGRVcGRhdGVTdGF0ZVdpdGhDb252ZXJ0ZWRWYWx1ZXMiLCJlbnRpdHlQYWdlIiwiaXNFcXVhbCIsImVudGl0aWVzUGVyUGFnZSIsImxhYmVscyIsImZpcnN0IiwicHJldmlvdXMiLCJuZXh0IiwicmV0dXJuQXNQcm9wIiwicGFnaW5hdGlvbiIsIm9uUGFnaW5hdGlvbkNoYW5nZSIsInRvcFBhZ2luYXRpb24iLCJib3R0b21QYWdpbmF0aW9uIiwid2l0aExhdGVzdENoZWNraW4iLCJkYXRldGltZUlkIiwiZ2V0TGF0ZXN0Q2hlY2tpbiIsImhhc0ZpbmlzaGVkUmVzb2x1dGlvbiIsImNoZWNrSW5FbnRpdHkiLCJjaGVja2luRW50aXR5IiwiaGFzUmVzb2x2ZWRDaGVja2luIiwidG9nZ2xlQ2hlY2tpbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVB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O0FBQzFEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFVBQVU7QUFDeEM7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixVQUFVO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxhQUFhO0FBQ3BGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7QUN0ZkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTs7Ozs7Ozs7Ozs7OztBQ3ZMdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViOztBQUVBLElBQUksSUFBcUM7QUFDekMsNkJBQTZCLG1CQUFPLENBQUMseUZBQTRCO0FBQ2pFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEdBQTRHO0FBQzVHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7QUNyR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLGNBQWMsbUJBQU8sQ0FBQywwRUFBVTtBQUNoQyxhQUFhLG1CQUFPLENBQUMsNERBQWU7O0FBRXBDLDJCQUEyQixtQkFBTyxDQUFDLHlGQUE0QjtBQUMvRCxxQkFBcUIsbUJBQU8sQ0FBQyxxRUFBa0I7O0FBRS9DO0FBQ0E7O0FBRUEsSUFBSSxJQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDViw2QkFBNkI7QUFDN0IsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEtBQUs7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCw0QkFBNEI7QUFDNUIsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFVBQVUsS0FBcUM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsc0JBQXNCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxJQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQiwyQkFBMkI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDLDRGQUE0RixTQUFNO0FBQzdJO0FBQ0E7O0FBRUEsbUJBQW1CLGdDQUFnQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsZ0NBQWdDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLGlCQUFpQix1QkFBdUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdDQUFnQyx1RkFBYTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7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Q0w7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7OztBQUdBLGFBQWEsdUZBQWEsR0FBRztBQUM3QjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSxpRUFBVTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxPQUFPOztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxPQUFPOztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtB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QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTSxpRkFBTztBQUNiO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7O0FBRUEsNEJBQTRCLCtCQUErQjtBQUMzRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0sMENBQUc7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdB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Q0FoRSxhQUFhLGlDQUFpQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQWhELGFBQWEsbURBQW1ELEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBbEUsYUFBYSxnQ0FBZ0MsRUFBRSxJOzs7Ozs7Ozs7OztBQ0EvQyxhQUFhLG1DQUFtQyxFQUFFLEkiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1jb21wb25lbnRzLjMzMmM2OGNjY2RiZDIxMGQ0NjY3LmRpc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9pbmRleC5qc1wiKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnd2FybmluZyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBBdmF0YXJJbWFnZSB9IGZyb20gJy4uL3VpL2ltYWdlJztcblxuY29uc3QgQXR0ZW5kZWVMaXN0SXRlbSA9ICgge1xuXHRpc0xvYWRpbmcsXG5cdGF0dGVuZGVlLFxuXHRzaG93R3JhdmF0YXIsXG5cdGF2YXRhck9wdGlvbnMgPSB7fSxcbn0gKSA9PiB7XG5cdGZ1bmN0aW9uIGdldEF2YXRhclVybCgpIHtcblx0XHRjb25zdCB1cmwgPSBhdHRlbmRlZS5oYXNDYWxjdWxhdGVkRmllbGQoICd1c2VyQXZhdGFyJyApID9cblx0XHRcdGF0dGVuZGVlLnVzZXJBdmF0YXIgOlxuXHRcdFx0Jyc7XG5cdFx0cmV0dXJuIHVybCA9PT0gJycgJiYgYXZhdGFyT3B0aW9ucy5hdmF0YXJVcmwgP1xuXHRcdFx0YXZhdGFyT3B0aW9ucy5hdmF0YXJVcmwgOlxuXHRcdFx0dXJsO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0QXR0ZW5kZWVOYW1lKCkge1xuXHRcdHJldHVybiBhdHRlbmRlZS5mbmFtZSArICcgJyArIGF0dGVuZGVlLmxuYW1lO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0QXZhdGFyKCkge1xuXHRcdGNvbnN0IHVybCA9IGdldEF2YXRhclVybCgpO1xuXHRcdGlmICggISBpc0xvYWRpbmcgJiYgc2hvd0dyYXZhdGFyICYmIHVybCA9PT0gJycgKSB7XG5cdFx0XHR3YXJuaW5nKFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0J3Nob3dHcmF2YXRhciBpcyB0cnVlIGJ1dCB0aGVyZSBpcyBubyBhdmF0YXIgdXJsIGluY2x1ZGVkICcgK1xuXHRcdFx0XHQnd2l0aCBlaXRoZXIgdGhlIGF0dGVuZGVlIGVudGl0eSBvciB0aGUgYXZhdGFyT3B0aW9ucyBwcm9wJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHNob3dHcmF2YXRhciA/XG5cdFx0XHQ8QXZhdGFySW1hZ2UgYXZhdGFyVXJsPXsgdXJsIH0geyAuLi5hdmF0YXJPcHRpb25zIH0gLz4gOlxuXHRcdFx0bnVsbDtcblx0fVxuXG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggYXR0ZW5kZWUsICdhdHRlbmRlZScgKSApIHtcblx0XHR3YXJuaW5nKFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHQnVGhlIEV2ZW50QXR0ZW5kZWUgY29tcG9uZW50IGV4cGVjdHMgYW4gYXR0ZW5kZWUgbW9kZWwgZW50aXR5Lidcblx0XHQpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHQ8bGk+eyBnZXRBdmF0YXIoKSB9PHNwYW4+eyBnZXRBdHRlbmRlZU5hbWUoKSB9PC9zcGFuPjwvbGk+XG5cdFx0PC9GcmFnbWVudD5cblx0KTtcbn07XG5leHBvcnQgZGVmYXVsdCBBdHRlbmRlZUxpc3RJdGVtO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG4vKipcbiAqIEludGVybmFsIEltcG9ydHNcbiAqL1xuaW1wb3J0IEF0dGVuZGVlTGlzdEl0ZW0gZnJvbSAnLi9hdHRlbmRlZS1saXN0LWl0ZW0nO1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50QXR0ZW5kZWVMaXN0IGV4dGVuZHMgQ29tcG9uZW50IHtcblx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXHRcdGF0dGVuZGVlczogUHJvcFR5cGVzLmFycmF5LFxuXHRcdHNob3dHcmF2YXRhcjogUHJvcFR5cGVzLmJvb2wsXG5cdFx0Y29udGFpbmVyQ3NzQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0Y29udGFpbmVySWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdH07XG5cblx0c3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcblx0XHRhdHRlbmRlZXM6IFtdLFxuXHRcdHNob3dHcmF2YXRhcjogZmFsc2UsXG5cdFx0Y29udGFpbmVyQ3NzQ2xhc3M6ICcnLFxuXHRcdGNvbnRhaW5lcklkOiAnZXZlbnQtYXR0ZW5kZWVzLWxpc3QnLFxuXHRcdGlzTG9hZGluZzogZmFsc2UsXG5cdH07XG5cblx0Z2V0QXR0ZW5kZWVMaXN0KCkge1xuXHRcdGNvbnN0IHsgYXR0ZW5kZWVzLCBzaG93R3JhdmF0YXIsIGlzTG9hZGluZyB9ID0gdGhpcy5wcm9wcztcblx0XHRpZiAoIGlzRW1wdHkoIGF0dGVuZGVlcyApICkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNvbnN0IGxpc3RJdGVtcyA9IGF0dGVuZGVlcy5tYXAoXG5cdFx0XHQoIGF0dGVuZGVlICkgPT4ge1xuXHRcdFx0XHRpZiAoIGF0dGVuZGVlLmlkICkge1xuXHRcdFx0XHRcdHJldHVybiA8QXR0ZW5kZWVMaXN0SXRlbVxuXHRcdFx0XHRcdFx0a2V5PXsgYXR0ZW5kZWUuaWQgfVxuXHRcdFx0XHRcdFx0YXR0ZW5kZWU9eyBhdHRlbmRlZSB9XG5cdFx0XHRcdFx0XHRzaG93R3JhdmF0YXI9eyBzaG93R3JhdmF0YXIgfVxuXHRcdFx0XHRcdFx0aXNMb2FkaW5nPXsgaXNMb2FkaW5nIH1cblx0XHRcdFx0XHRcdHsgLi4udGhpcy5wcm9wcyB9XG5cdFx0XHRcdFx0Lz47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PHVsPlxuXHRcdFx0XHR7IGxpc3RJdGVtcyB9XG5cdFx0XHQ8L3VsPlxuXHRcdCk7XG5cdH1cblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJDc3NDbGFzcywgY29udGFpbmVySWQgfSA9IHRoaXMucHJvcHM7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXZcblx0XHRcdFx0aWQ9eyBjb250YWluZXJJZCB9XG5cdFx0XHRcdGNsYXNzTmFtZT17XG5cdFx0XHRcdFx0Y2xhc3NOYW1lcyhcblx0XHRcdFx0XHRcdGNvbnRhaW5lckNzc0NsYXNzLFxuXHRcdFx0XHRcdFx0J2V2ZW50LWF0dGVuZGVlcycsXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9XG5cdFx0XHQ+XG5cdFx0XHRcdHsgdGhpcy5nZXRBdHRlbmRlZUxpc3QoKSB9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpO1xuXHR9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtYmxvY2stZXZlbnQtYXR0ZW5kZWVzXCI6XCJlZS1ibG9jay1ldmVudC1hdHRlbmRlZXNcIixcImV2ZW50LWF0dGVuZGVlc1wiOlwiZXZlbnQtYXR0ZW5kZWVzXCIsXCJjb250YWN0LWltYWdlLXdyYXAtZGl2XCI6XCJjb250YWN0LWltYWdlLXdyYXAtZGl2XCIsXCJjb250YWN0LWF2YXRhci1pbWdcIjpcImNvbnRhY3QtYXZhdGFyLWltZ1wifTsiLCIvKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgYWRkVmFsaWRhdG9yc1RvQXR0cmlidXRlcyB9IGZyb20gJy4uL2lucHV0cy9iYXNlL3V0aWxzJztcbmltcG9ydCB7IElucHV0TGFiZWwgfSBmcm9tICcuLi9pbnB1dHMvYmFzZS9pbnB1dC1sYWJlbCc7XG5cbi8qKlxuICogQXV0b0Zvcm1Sb3dcbiAqIFRoaXMgY29tcG9uZW50IGRldGVybWluZXMgd2hldGhlciB0aGUgaW5jb21pbmcgZm9ybSBlbGVtZW50XG4gKiBpcyBhbiBpbnB1dCwgbGFiZWwsIG9yIHJvdyBjb21wb25lbnQgYW5kIHJlc3BvbmRzIGFjY29yZGluZ2x5LlxuICogRm9ybVJvdyBjb21wb25lbnRzIGZyb20gYSBmb3JtIGxheW91dCBzdHJhdGVneSB3aWxsIHNpbXBseSBiZVxuICogcmV0dXJuZWQgYXMgaXMsIHNpbmNlIHRoZXkgcmVxdWlyZSBubyBmdXJ0aGVyIG1hbmlwdWxhdGlvbi5cbiAqIElucHV0cyBhbmQgTGFiZWxzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzdXBwbGllZCBmb3JtIGxheW91dFxuICogc3RyYXRlZ3kgQXV0b0NvbHVtblJvdyBjb21wb25lbnQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiAqIElmIGEgTGFiZWwgY29tcG9uZW50IGlzIG5vdCBwcm92aWRlZCBidXQgdGhlIHN1cHBsaWVkIElucHV0XG4gKiBoYXMgYSBcImxhYmVsXCIgcHJvcCwgdGhlbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhblxuICogSW5wdXRMYWJlbCB1c2luZyB0aGUgc3VwcGxpZWQgZm9ybSBsYXlvdXQgc3RyYXRlZ3kgY29tcG9uZW50LlxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBGb3JtRWxlbWVudCBlaXRoZXIgYW4gaW5wdXQsIGxhYmVsLCBvciBmb3JtIHJvdyBjb21wb25lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBBdXRvQ29sdW1uUm93IGZvcm0gbGF5b3V0IHN0cmF0ZWd5IHJvdyBjb21wb25lbnRcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZm9ybSByb3dcbiAqL1xuY29uc3QgQXV0b0Zvcm1Sb3cgPSAoIHtcblx0Rm9ybUVsZW1lbnQsXG5cdEF1dG9Db2x1bW5Sb3csXG59ICkgPT4ge1xuXHRsZXQgbGFiZWwgPSBudWxsO1xuXHRsZXQgaW5wdXQgPSBudWxsO1xuXHRsZXQgcm93ID0gbnVsbDtcblx0aWYgKCBGb3JtRWxlbWVudCAmJiBGb3JtRWxlbWVudC50eXBlICYmIEZvcm1FbGVtZW50LnR5cGUubmFtZSApIHtcblx0XHRjb25zdCBuYW1lID0gRm9ybUVsZW1lbnQudHlwZS5uYW1lO1xuXHRcdGlmIChcblx0XHRcdG5hbWUgIT09ICdJbnB1dExhYmVsJyAmJlxuXHRcdFx0bmFtZSAhPT0gJ0Zvcm1JbnB1dCcgJiZcblx0XHRcdG5hbWUgIT09ICdGaWVsZCdcblx0XHQpIHtcblx0XHRcdHJldHVybiBGb3JtRWxlbWVudDtcblx0XHR9XG5cdFx0aWYgKCBuYW1lID09PSAnSW5wdXRMYWJlbCcgKSB7XG5cdFx0XHRsYWJlbCA9IEZvcm1FbGVtZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbnB1dCA9IEZvcm1FbGVtZW50O1xuXHRcdFx0Y29uc3QgdmFsaWRhdGlvbnMgPSBBcnJheS5pc0FycmF5KCBGb3JtRWxlbWVudC5wcm9wcy52YWxpZGF0aW9ucyApID9cblx0XHRcdFx0Rm9ybUVsZW1lbnQucHJvcHMudmFsaWRhdGlvbnMgOlxuXHRcdFx0XHRbIEZvcm1FbGVtZW50LnByb3BzLnZhbGlkYXRpb25zIF07XG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gYWRkVmFsaWRhdG9yc1RvQXR0cmlidXRlcyhcblx0XHRcdFx0eyAuLi5Gb3JtRWxlbWVudC5wcm9wcyB9LFxuXHRcdFx0XHR2YWxpZGF0aW9uc1xuXHRcdFx0KTtcblx0XHRcdGlmICggYXR0cmlidXRlcy5sYWJlbCApIHtcblx0XHRcdFx0Y29uc3QgcmVxdWlyZWQgPSBhdHRyaWJ1dGVzLnJlcXVpcmVkID9cblx0XHRcdFx0XHRhdHRyaWJ1dGVzLnJlcXVpcmVkIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdFx0bGFiZWwgPSAoXG5cdFx0XHRcdFx0PElucHV0TGFiZWxcblx0XHRcdFx0XHRcdGh0bWxGb3I9eyBhdHRyaWJ1dGVzLmh0bWxJZCB9XG5cdFx0XHRcdFx0XHRsYWJlbD17IGF0dHJpYnV0ZXMubGFiZWwgfVxuXHRcdFx0XHRcdFx0cmVxdWlyZWQ9eyByZXF1aXJlZCB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCBsYWJlbCAmJiBpbnB1dCApIHtcblx0XHRcdHJvdyA9IChcblx0XHRcdFx0PEF1dG9Db2x1bW5Sb3c+XG5cdFx0XHRcdFx0eyBsYWJlbCB9XG5cdFx0XHRcdFx0eyBpbnB1dCB9XG5cdFx0XHRcdDwvQXV0b0NvbHVtblJvdz5cblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gcm93O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gRm9ybUVsZW1lbnQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBdXRvRm9ybVJvdztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgRXNwcmVzc29CdXR0b24gfSBmcm9tICcuLi8uLi91aSc7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkNsaWNrXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHN1Ym1pdHRpbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJpc3RpbmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBidXR0b25UZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbElkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHN1Ym1pdCBidXR0b24gZm9yIGZvcm1cbiAqL1xuY29uc3QgRm9ybUNhbmNlbEJ1dHRvbiA9ICgge1xuXHRvbkNsaWNrLFxuXHRwcmlzdGluZSxcblx0c3VibWl0dGluZyxcblx0YnV0dG9uVGV4dCxcblx0aHRtbElkLFxuXHRodG1sQ2xhc3MsXG59ICkgPT4ge1xuXHRidXR0b25UZXh0ID0gYnV0dG9uVGV4dCA/IGJ1dHRvblRleHQgOiBfXyggJ0NhbmNlbCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcygge1xuXHRcdFsgaHRtbENsYXNzIF06IGh0bWxDbGFzcyxcblx0XHQnZWUtZm9ybS1idXR0b24nOiB0cnVlLFxuXHRcdCdlZS1mb3JtLWJ1dHRvbi1jYW5jZWwnOiB0cnVlLFxuXHR9ICk7XG5cdHJldHVybiAoXG5cdFx0PEVzcHJlc3NvQnV0dG9uXG5cdFx0XHRidXR0b25UZXh0PXsgYnV0dG9uVGV4dCB9XG5cdFx0XHRpZD17IGh0bWxJZCB9XG5cdFx0XHRodG1sQ2xhc3M9eyBodG1sQ2xhc3MgfVxuXHRcdFx0b25DbGljaz17IG9uQ2xpY2sgfVxuXHRcdFx0ZGlzYWJsZWQ9eyBzdWJtaXR0aW5nIHx8IHByaXN0aW5lIH1cblx0XHQvPlxuXHQpO1xufTtcblxuRm9ybUNhbmNlbEJ1dHRvbi5wcm9wVHlwZXMgPSB7XG5cdG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdGJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdHByaXN0aW5lOiBQcm9wVHlwZXMuYm9vbCxcblx0c3VibWl0dGluZzogUHJvcFR5cGVzLmJvb2wsXG5cdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZyxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuRm9ybUNhbmNlbEJ1dHRvbi5kZWZhdWx0UHJvcHMgPSB7XG5cdGJ1dHRvblRleHQ6ICcnLFxuXHRodG1sSWQ6ICcnLFxuXHRodG1sQ2xhc3M6ICcnLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9ybUNhbmNlbEJ1dHRvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1mb3JtLWNvbnRhaW5lci1kaXZcIjpcImVlLWZvcm0tY29udGFpbmVyLWRpdlwiLFwiZWUtZm9ybS1mYWRlLWluXCI6XCJlZS1mb3JtLWZhZGUtaW5cIn07IiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAnLi9mb3JtLWNvbnRhaW5lci5jc3MnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbi8qKlxuICogRm9ybUNvbnRhaW5lciBpcyBhIHdyYXBwZXIgdGhhdCBoaWRlcyB0aGUgZm9ybSB3aGlsZSBpdCBpcyBsb2FkaW5nLFxuICogdGhlbiBmYWRlcyBpdCBpbiBvbmNlIGxvYWRpbmcgaXMgY29tcGxldGVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxvYWRpbmdcbiAqIEByZXR1cm4ge09iamVjdH0gZm9ybVxuICovXG5leHBvcnQgY29uc3QgRm9ybUNvbnRhaW5lciA9ICggeyBjaGlsZHJlbiwgaHRtbENsYXNzLCBsb2FkaW5nIH0gKSA9PiB7XG5cdGNvbnN0IGNvbnRhaW5lckNsYXNzID0gY2xhc3NOYW1lcygge1xuXHRcdCdlZS1mb3JtLWNvbnRhaW5lci1kaXYnOiB0cnVlLFxuXHRcdFsgYCR7IGh0bWxDbGFzcyB9YCBdOiBodG1sQ2xhc3MsXG5cdFx0J2VlLWZvcm0tZmFkZS1pbic6ICEgbG9hZGluZyxcblx0fSApO1xuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXsgY29udGFpbmVyQ2xhc3MgfSA+XG5cdFx0XHR7ICEgbG9hZGluZyAmJiBjaGlsZHJlbiB9XG5cdFx0PC9kaXY+XG5cdCk7XG59O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWZvcm0tZGF0YS1kdW1wLWRpdlwiOlwiZWUtZm9ybS1kYXRhLWR1bXAtZGl2XCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfX0RFVl9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgJy4vZm9ybS1kYXRhLWRlYnVnLWR1bXAuY3NzJztcblxuLyoqXG4gKiBEaXNwbGF5cyBmb3JtIGRhdGEgaW4gbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnRzXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzXG4gKiBAcmV0dXJuIHtPYmplY3R9IGZvcm0gZGF0YVxuICovXG5leHBvcnQgY29uc3QgRm9ybURhdGFEZWJ1Z0R1bXAgPSAoIHsgdmFsdWVzIH0gKSA9PiB7XG5cdHJldHVybiBfX0RFVl9fID8gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZm9ybS1kYXRhLWR1bXAtZGl2XCI+XG5cdFx0XHQ8aDM+Rm9ybSBEYXRhPC9oMz5cblx0XHRcdDxwcmUgaWQ9XCJmb3JtLWRhdGFcIj5cblx0XHRcdFx0eyBKU09OLnN0cmluZ2lmeSggdmFsdWVzLCAwLCAyICkgfVxuXHRcdFx0PC9wcmU+XG5cdFx0PC9kaXY+XG5cdCkgOiBudWxsO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBGb3JtRXJyb3JCb3VuZGFyeVxuICogY2F0Y2hlcyBKYXZhU2NyaXB0IGVycm9ycyBwcm9kdWNlZCBieSB0aGUgZm9ybVxuICogYW5kIGRpc3BsYXlzIGEgZmFsbGJhY2sgVUlcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBGb3JtQ29tcG9uZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBsb2FkSGFuZGxlciBhIGZ1bmN0aW9uIHRoYXQgc3VwcGxpZXMgdGhlIGZvcm0gZGF0YVxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3VibWl0SGFuZGxlciBhIGZ1bmN0aW9uIHRoYXQgcHJvY2Vzc2VzIHRoZSBzdWJtaXR0ZWQgZm9ybVxuICogQHJldHVybiB7T2JqZWN0fSBGb3JtQ29tcG9uZW50IHdpdGggYWRkZWQgZm9ybSBoYW5kbGluZ1xuICovXG5leHBvcnQgY2xhc3MgRm9ybUVycm9yQm91bmRhcnkgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0c3VwZXIoIHByb3BzICk7XG5cdFx0dGhpcy5zdGF0ZSA9IHtcblx0XHRcdGVycm9yOiBudWxsLFxuXHRcdFx0ZXJyb3JJbmZvOiBudWxsLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvclxuXHQgKiBAcGFyYW0ge09iamVjdH0gaW5mb1xuXHQgKi9cblx0Y29tcG9uZW50RGlkQ2F0Y2goIGVycm9yLCBpbmZvICkge1xuXHRcdHRoaXMuc2V0U3RhdGUoIHtcblx0XHRcdGVycm9yLFxuXHRcdFx0ZXJyb3JJbmZvOiBpbmZvLFxuXHRcdH0gKTtcblx0fVxuXG5cdHJlbmRlcigpIHtcblx0XHRsZXQgeyBlcnJvck1lc3NhZ2UgPSAnJyB9ID0gdGhpcy5wcm9wcztcblx0XHRlcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UgIT09ICcnID9cblx0XHRcdGVycm9yTWVzc2FnZSA6XG5cdFx0XHRfXyggJ0FuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkLicsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRpZiAoIHRoaXMuc3RhdGUuZXJyb3JJbmZvICkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHQ8aDI+eyBlcnJvck1lc3NhZ2UgfTwvaDI+XG5cdFx0XHRcdFx0PGRldGFpbHMgc3R5bGU9eyB7IHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcgfSB9PlxuXHRcdFx0XHRcdFx0eyB0aGlzLnN0YXRlLmVycm9yICYmIHRoaXMuc3RhdGUuZXJyb3IudG9TdHJpbmcoKSB9XG5cdFx0XHRcdFx0XHQ8YnIgLz5cblx0XHRcdFx0XHRcdHsgdGhpcy5zdGF0ZS5lcnJvckluZm8uY29tcG9uZW50U3RhY2sgfVxuXHRcdFx0XHRcdDwvZGV0YWlscz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcblx0fVxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWZvcm0taW5mby1yb3dcIjpcImVlLWZvcm0taW5mby1yb3dcIixcImlzLWRpc21pc3NhYmxlXCI6XCJpcy1kaXNtaXNzYWJsZVwiLFwiZGlzbWlzc2VkXCI6XCJkaXNtaXNzZWRcIixcImVlLWZvcm0taW5mb1wiOlwiZWUtZm9ybS1pbmZvXCIsXCJlZS1mb3JtLWluZm8tdGV4dFwiOlwiZWUtZm9ybS1pbmZvLXRleHRcIixcImVlLWZvcm0taW5mby10eXBlXCI6XCJlZS1mb3JtLWluZm8tdHlwZVwiLFwiZWUtZm9ybS1pbmZvLXR5cGUtd2FybmluZ1wiOlwiZWUtZm9ybS1pbmZvLXR5cGUtd2FybmluZ1wiLFwiZGFzaGljb25cIjpcImRhc2hpY29uXCIsXCJlZS1mb3JtLWluZm8tZGlzbWlzc1wiOlwiZWUtZm9ybS1pbmZvLWRpc21pc3NcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IERhc2hpY29uLCBJY29uQnV0dG9uIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0ICcuL2Zvcm0taW5mby1iYXNlLmNzcyc7XG5cbi8qKlxuICogRm9ybUluZm9CYXNlXG4gKiBkaXNwbGF5cyBpbnN0cnVjdGlvbnMgb3Igb3RoZXIgaW1wb3J0YW50IGluZm9ybWF0aW9uXG4gKiB0aGF0IHVzZXJzIG1heSByZXF1aXJlIHRvIHByb3Blcmx5IGNvbXBsZXRlIGEgZm9ybS5cbiAqICEhISBJTVBPUlRBTlQgISEhXG4gKiBpZiB0aGUgZm9ybSBpbmZvIG5lZWRzIHRvIGJlIGRpc21pc3NhYmxlLCB0aGVuIHRoZVxuICogY29tcG9uZW50IHdyYXBwaW5nIHRoaXMgKGllOiBGb3JtUm93KSBzaG91bGQgZG8gdGhlIGZvbGxvd2luZzpcbiAqICAtIGhhdmUgYW4gaHRtbCBDU1MgY2xhc3Mgb2YgXCJlZS1mb3JtLWluZm8tcm93XCJcbiAqICAtIG1hbmFnZSB0aGUgXCJkaXNtaXNzXCIgc3RhdGUgZm9yIHRoZSBjb21wb25lbnRcbiAqICAgIHdoaWNoIGNhbiBiZSB0b2dnbGVkIHZpYSB0aGUgb25EaXNtaXNzIGNhbGxiYWNrXG4gKiAgLSBhZGQgYW4gaHRtbCBjc3MgY2xhc3Mgb2YgXCJkaXNtaXNzZWRcIiB0byBoaWRlIHRoZSBmb3JtIGluZm9cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gZm9ybUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXNoaWNvblxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gb25EaXNtaXNzXG4gKiBAcGFyYW0ge0FycmF5fSBmb3JtSW5mb1ZhcnNcbiAqL1xuY29uc3QgRm9ybUluZm9CYXNlID0gKCB7XG5cdGZvcm1JbmZvLFxuXHRkYXNoaWNvbiA9ICcnLFxuXHRodG1sQ2xhc3MgPSAnJyxcblx0b25EaXNtaXNzID0gbnVsbCxcblx0Zm9ybUluZm9WYXJzID0gW10sXG59ICkgPT4ge1xuXHRodG1sQ2xhc3MgPSBodG1sQ2xhc3MgP1xuXHRcdGAkeyBodG1sQ2xhc3MgfSBlZS1mb3JtLWluZm9gIDpcblx0XHQnZWUtZm9ybS1pbmZvJztcblx0aHRtbENsYXNzID0gZGFzaGljb24gP1xuXHRcdGAkeyBodG1sQ2xhc3MgfSBlZS1mb3JtLWluZm8tdHlwZS0keyBkYXNoaWNvbiB9IGhhcy1pbmZvLXR5cGVgIDpcblx0XHRodG1sQ2xhc3M7XG5cdGNvbnN0IHR5cGVJY29uID0gZGFzaGljb24gPyAoXG5cdFx0PERhc2hpY29uXG5cdFx0XHRjbGFzc05hbWU9XCJlZS1mb3JtLWluZm8tdHlwZVwiXG5cdFx0XHRpY29uPXsgZGFzaGljb24gfVxuXHRcdFx0c2l6ZT17IDM2IH1cblx0XHQvPlxuXHQpIDogbnVsbDtcblx0Y29uc3QgZGlzbWlzcyA9IG9uRGlzbWlzcyA/IChcblx0XHQ8SWNvbkJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPVwiZWUtZm9ybS1pbmZvLWRpc21pc3MgY2xpY2thYmxlXCJcblx0XHRcdGljb249XCJkaXNtaXNzXCJcblx0XHRcdG9uQ2xpY2s9eyBvbkRpc21pc3MgfVxuXHRcdC8+XG5cdCkgOiBudWxsO1xuXHRpZiAoICEgaXNFbXB0eSggZm9ybUluZm9WYXJzICkgKSB7XG5cdFx0Y29uc3QgZm9ybUluZm9UZXh0ID0gW107XG5cdFx0Y29uc3QgY2h1bmtzID0gZm9ybUluZm8uc3BsaXQoICclJXZhciUlJyApO1xuXHRcdGZvciAoIGxldCB4ID0gMDsgeCA8IGNodW5rcy5sZW5ndGg7IHgrKyApIHtcblx0XHRcdGlmICggY2h1bmtzWyB4IF0gKSB7XG5cdFx0XHRcdGZvcm1JbmZvVGV4dC5wdXNoKCBjaHVua3NbIHggXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBmb3JtSW5mb1ZhcnNbIHggXSApIHtcblx0XHRcdFx0Zm9ybUluZm9UZXh0LnB1c2goIGZvcm1JbmZvVmFyc1sgeCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvcm1JbmZvID0gZm9ybUluZm9UZXh0O1xuXHR9XG5cdHJldHVybiBmb3JtSW5mbyA/IChcblx0XHQ8ZGl2XG5cdFx0XHRhcmlhLWxhYmVsPXsgX18oICdpbXBvcnRhbnQgaW5mb3JtYXRpb24nLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0Y2xhc3NOYW1lPXsgaHRtbENsYXNzIH1cblx0XHQ+XG5cdFx0XHR7IHR5cGVJY29uIH1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZm9ybS1pbmZvLXRleHRcIj57IGZvcm1JbmZvIH08L2Rpdj5cblx0XHRcdHsgZGlzbWlzcyB9XG5cdFx0PC9kaXY+XG5cdCkgOiBudWxsO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9ybUluZm9CYXNlO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWZvcm0tcGxhY2Vob2xkZXItZGl2XCI6XCJlZS1mb3JtLXBsYWNlaG9sZGVyLWRpdlwiLFwiZWUtZWRpdG9yLWRpdlwiOlwiZWUtZWRpdG9yLWRpdlwiLFwiZWUtZm9ybS1mYWRlLW91dFwiOlwiZWUtZm9ybS1mYWRlLW91dFwiLFwiZWUtbG9hZGluZy1kaXZcIjpcImVlLWxvYWRpbmctZGl2XCIsXCJjb21wb25lbnRzLXNwaW5uZXJcIjpcImNvbXBvbmVudHMtc3Bpbm5lclwiLFwiZWUtZm9ybS1wbGFjZWhvbGRlci1ub3RpY2VcIjpcImVlLWZvcm0tcGxhY2Vob2xkZXItbm90aWNlXCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IF94LCBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAnLi9mb3JtLXBsYWNlaG9sZGVyLmNzcyc7XG5cbi8qKlxuICogRGlzcGxheXMgYSBub3RpY2Ugd2hpbGUgdGhlIGZvcm0gaXMgbG9hZGluZ1xuICogdGhlbiBmYWRlcyBhd2F5IHdoZW4gbG9hZGluZyBpcyBjb21wbGV0ZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtib29sZWFufSBsb2FkaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gbm90aWNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IHNwaW5uZXJcbiAqL1xuZXhwb3J0IGNvbnN0IEZvcm1QbGFjZWhvbGRlciA9ICggeyBsb2FkaW5nLCBub3RpY2UgPSAnJyB9ICkgPT4ge1xuXHRub3RpY2UgPSBub3RpY2UgfHxcblx0XHRzcHJpbnRmKFxuXHRcdFx0X3goICdsb2FkaW5nJXMnLCAnbG9hZGluZy4uLicsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoICc4MjMwJyApXG5cdFx0KTtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e1xuXHRcdFx0XHRjbGFzc05hbWVzKCB7XG5cdFx0XHRcdFx0J2VlLWZvcm0tcGxhY2Vob2xkZXItZGl2JzogdHJ1ZSxcblx0XHRcdFx0XHQnZWUtZm9ybS1mYWRlLW91dCc6ICEgbG9hZGluZyxcblx0XHRcdFx0fSApXG5cdFx0XHR9XG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1sb2FkaW5nLWRpdlwiPlxuXHRcdFx0XHQ8U3Bpbm5lciAvPlxuXHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1mb3JtLXBsYWNlaG9sZGVyLW5vdGljZVwiPlxuXHRcdFx0XHRcdHsgbm90aWNlIH1cblx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdCk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgU3VibWl0dGluZ05vdGljZSBmcm9tICcuL3N1Ym1pdHRpbmctbm90aWNlJztcbmltcG9ydCBFc3ByZXNzb0J1dHRvbiBmcm9tICcuLi8uLi91aS9lc3ByZXNzby1idXR0b24nO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtib29sZWFufSBzdWJtaXR0aW5nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGRpc2FibGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gYnV0dG9uVGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IGJ1dHRvbkljb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJtaXR0aW5nVGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN1Ym1pdHRpbmdUZXh0UG9zaXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBub3RpY2VDbGFzc1xuICogQHBhcmFtIHtPYmplY3R9IGJ1dHRvblByb3BzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHN1Ym1pdCBidXR0b24gZm9yIGZvcm1cbiAqL1xuY29uc3QgRm9ybVN1Ym1pdEJ1dHRvbiA9ICgge1xuXHRzdWJtaXR0aW5nLFxuXHRkaXNhYmxlZCxcblx0YnV0dG9uVGV4dCxcblx0YnV0dG9uSWNvbixcblx0c3VibWl0dGluZ1RleHQsXG5cdHN1Ym1pdHRpbmdUZXh0UG9zaXRpb24sXG5cdGh0bWxJZCxcblx0aHRtbENsYXNzLFxuXHRub3RpY2VDbGFzcyxcblx0Li4uYnV0dG9uUHJvcHNcbn0gKSA9PiB7XG5cdGJ1dHRvblRleHQgPSBidXR0b25UZXh0ID8gYnV0dG9uVGV4dCA6IF9fKCAnU3VibWl0JywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRodG1sQ2xhc3MgPSBjbGFzc05hbWVzKCB7XG5cdFx0WyBodG1sQ2xhc3MgXTogaHRtbENsYXNzLFxuXHRcdCdlZS1mb3JtLWJ1dHRvbic6IHRydWUsXG5cdFx0J2VlLWZvcm0tYnV0dG9uLXN1Ym1pdCc6IHRydWUsXG5cdH0gKTtcblx0cmV0dXJuIChcblx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHQ8U3VibWl0dGluZ05vdGljZVxuXHRcdFx0XHRzdWJtaXR0aW5nPXsgc3VibWl0dGluZyB9XG5cdFx0XHRcdHN1Ym1pdHRpbmdUZXh0PXsgc3VibWl0dGluZ1RleHQgfVxuXHRcdFx0XHRwb3NpdGlvbj17IHN1Ym1pdHRpbmdUZXh0UG9zaXRpb24gfVxuXHRcdFx0XHRodG1sQ2xhc3M9eyBub3RpY2VDbGFzcyB9XG5cdFx0XHQvPlxuXHRcdFx0PEVzcHJlc3NvQnV0dG9uXG5cdFx0XHRcdHR5cGU9XCJzdWJtaXRcIlxuXHRcdFx0XHRzdHlsZT17ICdwcmltYXJ5JyB9XG5cdFx0XHRcdGJ1dHRvblRleHQ9eyBidXR0b25UZXh0IH1cblx0XHRcdFx0ZGlzYWJsZWQ9eyBzdWJtaXR0aW5nIHx8IGRpc2FibGVkIH1cblx0XHRcdFx0aWQ9eyBodG1sSWQgfVxuXHRcdFx0XHRodG1sQ2xhc3M9eyBodG1sQ2xhc3MgfVxuXHRcdFx0XHRpY29uPXsgYnV0dG9uSWNvbiB9XG5cdFx0XHRcdHsgLi4uYnV0dG9uUHJvcHMgfVxuXHRcdFx0Lz5cblx0XHQ8L0ZyYWdtZW50PlxuXHQpO1xufTtcblxuRm9ybVN1Ym1pdEJ1dHRvbi5wcm9wVHlwZXMgPSB7XG5cdG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXHRkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cdHN1Ym1pdHRpbmc6IFByb3BUeXBlcy5ib29sLFxuXHRidXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRidXR0b25JY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRzdWJtaXR0aW5nVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcblx0c3VibWl0dGluZ1RleHRQb3NpdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblx0bm90aWNlQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZyxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuRm9ybVN1Ym1pdEJ1dHRvbi5kZWZhdWx0UHJvcHMgPSB7XG5cdG9uQ2xpY2s6ICgpID0+IG51bGwsXG5cdGJ1dHRvblRleHQ6ICcnLFxuXHRidXR0b25JY29uOiAnc2F2ZScsXG5cdHN1Ym1pdHRpbmdUZXh0OiAnJyxcblx0c3VibWl0dGluZ1RleHRQb3NpdGlvbjogJ2Fib3ZlJyxcblx0bm90aWNlQ2xhc3M6ICcnLFxuXHRodG1sSWQ6ICcnLFxuXHRodG1sQ2xhc3M6ICcnLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9ybVN1Ym1pdEJ1dHRvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1zdWJtaXR0aW5nLW5vdGljZS13cmFwcGVyXCI6XCJlZS1zdWJtaXR0aW5nLW5vdGljZS13cmFwcGVyXCIsXCJlZS1zdWJtaXR0aW5nLW5vdGljZVwiOlwiZWUtc3VibWl0dGluZy1ub3RpY2VcIixcImVlLXNtYWxsXCI6XCJlZS1zbWFsbFwiLFwiZWUtc3Bpbm5lci13cmFwcGVyXCI6XCJlZS1zcGlubmVyLXdyYXBwZXJcIixcImVlLWRlZmF1bHRcIjpcImVlLWRlZmF1bHRcIixcImVlLWJpZ1wiOlwiZWUtYmlnXCIsXCJjb21wb25lbnRzLXNwaW5uZXJcIjpcImNvbXBvbmVudHMtc3Bpbm5lclwiLFwiZWUtZWxsaXBzaXMtd3JhcHBlclwiOlwiZWUtZWxsaXBzaXMtd3JhcHBlclwiLFwiZWUtZWxsaXBzaXMtc3Bhbi0xXCI6XCJlZS1lbGxpcHNpcy1zcGFuLTFcIixcImVsbGlwc2lzLWRvdFwiOlwiZWxsaXBzaXMtZG90XCIsXCJlZS1lbGxpcHNpcy1zcGFuLTJcIjpcImVlLWVsbGlwc2lzLXNwYW4tMlwiLFwiZWUtZWxsaXBzaXMtc3Bhbi0zXCI6XCJlZS1lbGxpcHNpcy1zcGFuLTNcIixcImVlLXBvc2l0aW9uLWFib3ZlXCI6XCJlZS1wb3NpdGlvbi1hYm92ZVwiLFwiZWUtcG9zaXRpb24tYmVsb3dcIjpcImVlLXBvc2l0aW9uLWJlbG93XCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgJy4vc3VibWl0dGluZy1ub3RpY2UuY3NzJztcblxuLyoqXG4gKiBBIG5vdGljZSBpbmRpY2F0aW5nIHRoYXQgYW4gaW5wdXQgb3IgZm9ybSBpcyBzYXZpbmcgb3Igc3VibWl0dGluZ1xuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtib29sZWFufSBzdWJtaXR0aW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gc3VibWl0dGluZ1RleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3NpdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHNpemVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdHlsZVxuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBzdWJtaXR0aW5nIG5vdGljZVxuICovXG5jb25zdCBTdWJtaXR0aW5nTm90aWNlID0gKCB7XG5cdHN1Ym1pdHRpbmcsXG5cdHN1Ym1pdHRpbmdUZXh0LFxuXHRodG1sQ2xhc3MsXG5cdHBvc2l0aW9uLFxuXHRzaXplLFxuXHRzdHlsZSxcbn0gKSA9PiB7XG5cdHN1Ym1pdHRpbmdUZXh0ID0gc3VibWl0dGluZ1RleHQgP1xuXHRcdHN1Ym1pdHRpbmdUZXh0IDpcblx0XHRfXyggJ3N1Ym1pdHRpbmcnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdGh0bWxDbGFzcyA9IGNsYXNzTmFtZXMoIHtcblx0XHRbIGh0bWxDbGFzcyBdOiBodG1sQ2xhc3MsXG5cdFx0J2VlLXN1Ym1pdHRpbmctbm90aWNlJzogdHJ1ZSxcblx0XHRbIGBlZS0keyBzaXplIH1gIF06IHNpemUsXG5cdFx0WyBgZWUtcG9zaXRpb24tJHsgcG9zaXRpb24gfWAgXTogcG9zaXRpb24sXG5cdH0gKTtcblx0cmV0dXJuIHN1Ym1pdHRpbmcgP1xuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtc3VibWl0dGluZy1ub3RpY2Utd3JhcHBlclwiPlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfSBzdHlsZT17IHN0eWxlIH0+XG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXNwaW5uZXItd3JhcHBlclwiPjxTcGlubmVyIC8+PC9zcGFuPlxuXHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10ZXh0LXdyYXBwZXJcIj57IHN1Ym1pdHRpbmdUZXh0IH08L3NwYW4+XG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWVsbGlwc2lzLXdyYXBwZXJcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1lbGxpcHNpcy1zcGFuLTFcIj4uPC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWVsbGlwc2lzLXNwYW4tMlwiPi48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZWxsaXBzaXMtc3Bhbi0zXCI+Ljwvc3Bhbj5cblx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+IDpcblx0XHRudWxsO1xufTtcblxuU3VibWl0dGluZ05vdGljZS5wcm9wVHlwZXMgPSB7XG5cdHN1Ym1pdHRpbmc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG5cdHN1Ym1pdHRpbmdUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoIFsgJ2Fib3ZlJywgJ2JlbG93JyBdICksXG5cdHNpemU6IFByb3BUeXBlcy5vbmVPZiggWyAnc21hbGwnLCAnZGVmYXVsdCcsICdiaWcnIF0gKSxcblx0c3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG59O1xuXG5TdWJtaXR0aW5nTm90aWNlLmRlZmF1bHRQcm9wcyA9IHtcblx0c3VibWl0dGluZ1RleHQ6ICcnLFxuXHRodG1sQ2xhc3M6ICcnLFxuXHRwb3NpdGlvbjogJ2Fib3ZlJyxcblx0c2l6ZTogJ2RlZmF1bHQnLFxuXHRzdHlsZToge30sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBTdWJtaXR0aW5nTm90aWNlO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGNvbXBvc2UsIGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50LCB3aXRoSW5zdGFuY2VJZCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IEZvcm1Db250YWluZXIsIEZvcm1QbGFjZWhvbGRlciB9IGZyb20gJy4uLyc7XG5cbi8qKlxuICogd2l0aEZvcm1Db250YWluZXJBbmRQbGFjZWhvbGRlclxuICogSGlnaGVyLU9yZGVyLUNvbXBvbmVudCB0aGF0IHdyYXBzIGFuIEVzcHJlc3NvIEZvcm0gY29tcG9uZW50XG4gKiB3aXRoIGEgRm9ybUNvbnRhaW5lciBjb21wb25lbnQgYW5kIGFkZHMgYSBGb3JtUGxhY2Vob2xkZXJcbiAqIGZvciBkaXNwbGF5aW5nIGEgbG9hZGluZyBub3RpY2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gRm9ybVxuICogQHJldHVybiB7T2JqZWN0fSBGb3JtIHdpdGggYWRkZWQgRm9ybUNvbnRhaW5lciBhbmQgRm9ybVBsYWNlaG9sZGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0d2l0aEluc3RhbmNlSWQsXG5cdGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHRcdCggRm9ybSApID0+IHtcblx0XHRcdHJldHVybiBjbGFzcyBleHRlbmRzIENvbXBvbmVudCB7XG5cdFx0XHRcdHJlbmRlcigpIHtcblx0XHRcdFx0XHRjb25zdCB7XG5cdFx0XHRcdFx0XHRpbnN0YW5jZUlkLFxuXHRcdFx0XHRcdFx0bG9hZGluZyxcblx0XHRcdFx0XHRcdGxvYWRpbmdOb3RpY2UsXG5cdFx0XHRcdFx0XHQuLi5mb3JtUHJvcHNcblx0XHRcdFx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHRcdFx0XHQ8Rm9ybVBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdFx0a2V5PXsgaW5zdGFuY2VJZCB9XG5cdFx0XHRcdFx0XHRcdFx0bG9hZGluZz17IGxvYWRpbmcgfVxuXHRcdFx0XHRcdFx0XHRcdG5vdGljZT17IGxvYWRpbmdOb3RpY2UgfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8Rm9ybUNvbnRhaW5lciBsb2FkaW5nPXsgbG9hZGluZyB9PlxuXHRcdFx0XHRcdFx0XHRcdDxGb3JtIHsgLi4uZm9ybVByb3BzIH0gLz5cblx0XHRcdFx0XHRcdFx0PC9Gb3JtQ29udGFpbmVyPlxuXHRcdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0J3dpdGhGb3JtQ29udGFpbmVyQW5kUGxhY2Vob2xkZXInXG5cdCksXG5dICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgY2FzdEFycmF5LCBpc0VtcHR5LCBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAncmVhY3QtZmluYWwtZm9ybSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBGb3JtQ29udGFpbmVyIH0gZnJvbSAnLi9mb3JtLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBGb3JtRGF0YURlYnVnRHVtcCB9IGZyb20gJy4vZm9ybS1kYXRhLWRlYnVnLWR1bXAnO1xuaW1wb3J0IHsgRm9ybUVycm9yQm91bmRhcnkgfSBmcm9tICcuL2Zvcm0tZXJyb3ItYm91bmRhcnknO1xuaW1wb3J0IHsgRm9ybVBsYWNlaG9sZGVyIH0gZnJvbSAnLi9mb3JtLXBsYWNlaG9sZGVyJztcbmltcG9ydCBGb3JtU3VibWl0QnV0dG9uIGZyb20gJy4vZm9ybS1zdWJtaXQtYnV0dG9uJztcbmltcG9ydCBGb3JtQ2FuY2VsQnV0dG9uIGZyb20gJy4vZm9ybS1jYW5jZWwtYnV0dG9uJztcblxuLyoqXG4gKiB3aXRoRm9ybUhhbmRsZXJcbiAqIEhpZ2hlci1PcmRlci1Db21wb25lbnQgdGhhdCB3cmFwcyB0aGUgc3VwcGxpZWQgZm9ybSBjb21wb25lbnRcbiAqIHdpdGggYSBSZWFjdC1GaW5hbC1Gb3JtIEZvcm0gY29tcG9uZW50IGFuZCBjb25uZWN0cyBpdCB0byB0aGVcbiAqIHN1cHBsaWVkIGxvYWQsIFN1Ym1pdCwgYW5kIFJlc2V0IGhhbmRsZXJzLCB3aGljaCBhcmVcbiAqIHBhc3NlZCBhcyBwcm9wcyB0byB0aGUgZmluYWwgd3JhcHBlZCBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gRm9ybUNvbXBvbmVudFxuICogQHJldHVybiB7T2JqZWN0fSBGb3JtQ29tcG9uZW50IHdpdGggYWRkZWQgZm9ybSBoYW5kbGluZ1xuICovXG5leHBvcnQgY29uc3Qgd2l0aEZvcm1IYW5kbGVyID0gKCBGb3JtQ29tcG9uZW50ICkgPT4ge1xuXHQvKipcblx0ICogRm9ybUhhbmRsZXJcblx0ICpcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm9ybSBjb21wb25lbnRcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbG9hZEhhbmRsZXIgY2FsbGJhY2sgdGhhdCBzdXBwbGllcyB0aGUgZm9ybSBkYXRhXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHN1Ym1pdEhhbmRsZXIgY2FsbGJhY2sgdGhhdCBwcm9jZXNzZXMgdGhlIGZvcm1cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzZXRIYW5kbGVyIGNhbGxiYWNrIGZvciByZXNldHRpbmcgdGhlIGZvcm1cblx0ICogQHBhcmFtIHtzdHJpbmd9IGVycm9yTWVzc2FnZSBjdXN0b20gbWVzc2FnZSBkaXNwbGF5ZWQgd2hlbiB0aGluZ3MgZ28gYmFkXG5cdCAqL1xuXHRjbGFzcyBGb3JtSGFuZGxlciBleHRlbmRzIENvbXBvbmVudCB7XG5cdFx0LyoqXG5cdFx0ICogQGNvbnN0cnVjdG9yXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHByb3BzXG5cdFx0ICovXG5cdFx0Y29uc3RydWN0b3IoIHByb3BzICkge1xuXHRcdFx0c3VwZXIoIHByb3BzICk7XG5cdFx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0XHRsb2FkaW5nOiBmYWxzZSxcblx0XHRcdFx0Y2hhbmdlczogZmFsc2UsXG5cdFx0XHRcdGRhdGE6IHt9LFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAZnVuY3Rpb25cblx0XHQgKi9cblx0XHRtYXJrQ2hhbmdlcyA9ICgpID0+IHtcblx0XHRcdHRoaXMuc2V0U3RhdGUoIHsgY2hhbmdlczogdHJ1ZSB9ICk7XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIEBmdW5jdGlvblxuXHRcdCAqL1xuXHRcdHJlc2V0ID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5zZXRTdGF0ZSggeyBjaGFuZ2VzOiBmYWxzZSB9ICk7XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIEBmdW5jdGlvblxuXHRcdCAqL1xuXHRcdGNvbXBvbmVudERpZE1vdW50KCkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzLnByb3BzLmxvYWRIYW5kbGVyICkgKSB7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoIHsgbG9hZGluZzogdHJ1ZSB9ICk7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSB0aGlzLnByb3BzLmxvYWRIYW5kbGVyKCk7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoIHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlbmRlcigpIHtcblx0XHRcdGNvbnN0IHtcblx0XHRcdFx0bG9hZGluZyxcblx0XHRcdFx0c3VibWl0QnV0dG9uVGV4dCA9ICcnLFxuXHRcdFx0XHRyZXNldEhhbmRsZXIsXG5cdFx0XHRcdGNhbmNlbEJ1dHRvblRleHQgPSAnJyxcblx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gJycsXG5cdFx0XHRcdGxvYWRpbmdOb3RpY2UgPSAnJyxcblx0XHRcdFx0ZGVjb3JhdG9ycyA9IFtdLFxuXHRcdFx0XHRtdXRhdG9ycyA9IHt9LFxuXHRcdFx0XHRmb3JtQ2hhbmdlcyA9IGZhbHNlLFxuXHRcdFx0XHRzZXRNdXRhdG9yQ2FsbGJhY2tzID0gKCkgPT4gbnVsbCxcblx0XHRcdFx0Li4uZm9ybVByb3BzXG5cdFx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRcdGxldCB7IGZvcm1EYXRhID0gbnVsbCB9ID0gdGhpcy5wcm9wcztcblx0XHRcdGZvcm1EYXRhID0gZm9ybURhdGEgPT09IG51bGwgJiYgISBpc0VtcHR5KCB0aGlzLnN0YXRlLmRhdGEgKSA/XG5cdFx0XHRcdHRoaXMuc3RhdGUuZGF0YSA6XG5cdFx0XHRcdGZvcm1EYXRhO1xuXHRcdFx0Y29uc3Qgc2hvd1N1Ym1pdCA9IHR5cGVvZiB0aGlzLnByb3BzLnN1Ym1pdEhhbmRsZXIgPT09ICdmdW5jdGlvbic7XG5cdFx0XHRjb25zdCBzdWJtaXRIYW5kbGVyID0gdGhpcy5wcm9wcy5zdWJtaXRIYW5kbGVyIHx8ICggKCkgPT4gbnVsbCApO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEZvcm1FcnJvckJvdW5kYXJ5IGVycm9yTWVzc2FnZT17IGVycm9yTWVzc2FnZSB9ID5cblx0XHRcdFx0XHQ8Rm9ybVxuXHRcdFx0XHRcdFx0b25TdWJtaXQ9eyBzdWJtaXRIYW5kbGVyIH1cblx0XHRcdFx0XHRcdGluaXRpYWxWYWx1ZXM9eyBmb3JtRGF0YSB8fCB7fSB9XG5cdFx0XHRcdFx0XHRkZWNvcmF0b3JzPXsgY2FzdEFycmF5KCBkZWNvcmF0b3JzICkgfVxuXHRcdFx0XHRcdFx0bXV0YXRvcnM9eyBtdXRhdG9ycyB9XG5cdFx0XHRcdFx0XHRyZW5kZXI9eyAoIHtcblx0XHRcdFx0XHRcdFx0Zm9ybSxcblx0XHRcdFx0XHRcdFx0dmFsdWVzLFxuXHRcdFx0XHRcdFx0XHRoYW5kbGVTdWJtaXQsXG5cdFx0XHRcdFx0XHRcdHN1Ym1pdHRpbmcsXG5cdFx0XHRcdFx0XHRcdHByaXN0aW5lLFxuXHRcdFx0XHRcdFx0XHRpbnZhbGlkLFxuXHRcdFx0XHRcdFx0fSApID0+IHtcblx0XHRcdFx0XHRcdFx0c2V0TXV0YXRvckNhbGxiYWNrcyggZm9ybS5tdXRhdG9ycyApO1xuXHRcdFx0XHRcdFx0XHRwcmlzdGluZSA9IHByaXN0aW5lICYmICEgdGhpcy5zdGF0ZS5jaGFuZ2VzO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJtaXRCdXR0b24gPSBzaG93U3VibWl0ID9cblx0XHRcdFx0XHRcdFx0XHQ8Rm9ybVN1Ym1pdEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uVGV4dD17IHN1Ym1pdEJ1dHRvblRleHQgfVxuXHRcdFx0XHRcdFx0XHRcdFx0c3VibWl0dGluZz17IHN1Ym1pdHRpbmcgfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpc3RpbmUgfHwgaW52YWxpZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpICYmICEgZm9ybUNoYW5nZXNcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvPiA6XG5cdFx0XHRcdFx0XHRcdFx0bnVsbDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZm9ybVJlc2V0ID0gKCBldmVudCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlc2V0KCk7XG5cdFx0XHRcdFx0XHRcdFx0cmVzZXRIYW5kbGVyKCBldmVudCApO1xuXHRcdFx0XHRcdFx0XHRcdGZvcm0ucmVzZXQoIGV2ZW50ICk7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHJlc2V0SGFuZGxlciA/XG5cdFx0XHRcdFx0XHRcdFx0PEZvcm1DYW5jZWxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvblRleHQ9eyBjYW5jZWxCdXR0b25UZXh0IH1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyBmb3JtUmVzZXQgfVxuXHRcdFx0XHRcdFx0XHRcdFx0cHJpc3RpbmU9eyBwcmlzdGluZSB9XG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJtaXR0aW5nPXsgc3VibWl0dGluZyB9XG5cdFx0XHRcdFx0XHRcdFx0Lz4gOlxuXHRcdFx0XHRcdFx0XHRcdG51bGw7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0PGZvcm0gb25TdWJtaXQ9eyBoYW5kbGVTdWJtaXQgfSA+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Rm9ybVBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxvYWRpbmc9eyBsb2FkaW5nIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm90aWNlPXsgbG9hZGluZ05vdGljZSB9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PEZvcm1Db250YWluZXIgbG9hZGluZz17IGxvYWRpbmcgfSA+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxGb3JtQ29tcG9uZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5pdGlhbFZhbHVlcz17IGZvcm1EYXRhIHx8IHt9IH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWVzPXsgdmFsdWVzIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdWJtaXRCdXR0b249eyBzdWJtaXRCdXR0b24gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhbmNlbEJ1dHRvbj17IGNhbmNlbEJ1dHRvbiB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybVJlc2V0PXsgZm9ybVJlc2V0IH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXJrQ2hhbmdlcz17IHRoaXMubWFya0NoYW5nZXMgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByaXN0aW5lPXsgcHJpc3RpbmUgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgLi4uZm9ybVByb3BzIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvRm9ybUNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdFx0XHRcdDxGb3JtRGF0YURlYnVnRHVtcCB2YWx1ZXM9eyB2YWx1ZXMgfSAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZm9ybT5cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvRm9ybUVycm9yQm91bmRhcnk+XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBGb3JtSGFuZGxlcjtcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL21vZGVsJztcbmV4cG9ydCB7IEZvcm1Db250YWluZXIgfSBmcm9tICcuL2Jhc2UvZm9ybS1jb250YWluZXInO1xuZXhwb3J0IHsgRm9ybVBsYWNlaG9sZGVyIH0gZnJvbSAnLi9iYXNlL2Zvcm0tcGxhY2Vob2xkZXInO1xuZXhwb3J0IHsgd2l0aEZvcm1IYW5kbGVyIH0gZnJvbSAnLi9iYXNlL3dpdGgtZm9ybS1oYW5kbGVyJztcbmV4cG9ydCB7IEZvcm1JbnB1dCB9IGZyb20gJy4vaW5wdXRzL2Zvcm0taW5wdXQnO1xuZXhwb3J0IHsgSGlkZGVuSW5wdXQgfSBmcm9tICcuL2lucHV0cy9oaWRkZW4taW5wdXQnO1xuZXhwb3J0IHsgSW5saW5lRWRpdElucHV0IH0gZnJvbSAnLi9pbnB1dHMvaW5saW5lLWVkaXQtaW5wdXQnO1xuZXhwb3J0IHsgSW5wdXRMYWJlbCB9IGZyb20gJy4vaW5wdXRzL2Jhc2UvaW5wdXQtbGFiZWwnO1xuZXhwb3J0IHtcblx0ZGVmYXVsdCBhcyB0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQsXG59IGZyb20gJy4vbGF5b3V0cy90d28tY29sdW1uLWFkbWluJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdmFsaWRhdGlvbnMgfSBmcm9tICcuL3ZhbGlkYXRpb25zJztcbmV4cG9ydCB7XG5cdGRlZmF1bHQgYXMgd2l0aEZvcm1Db250YWluZXJBbmRQbGFjZWhvbGRlcixcbn0gZnJvbSAnLi9iYXNlL3dpdGgtZm9ybS1jb250YWluZXItYW5kLXBsYWNlaG9sZGVyJztcbiIsImV4cG9ydCBjb25zdCBIVE1MNV9JTlBVVF9UWVBFUyA9IFtcblx0J2NvbG9yJyxcblx0J2NoZWNrYm94Jyxcblx0J2RhdGUnLFxuXHQnZGF0ZXRpbWUtbG9jYWwnLFxuXHQnZW1haWwnLFxuXHQnZmlsZScsXG5cdCdoaWRkZW4nLFxuXHQnaW1hZ2UnLFxuXHQnbW9udGgnLFxuXHQnbnVtYmVyJyxcblx0J3Bhc3N3b3JkJyxcblx0J3JhZGlvJyxcblx0J3JhbmdlJyxcblx0J3Jlc2V0Jyxcblx0J3NlYXJjaCcsXG5cdCdzZWxlY3QnLFxuXHQndGVsJyxcblx0J3RleHQnLFxuXHQndGV4dGFyZWEnLFxuXHQndGltZScsXG5cdCd1cmwnLFxuXHQnd2VlaycsXG5dO1xuXG5leHBvcnQgY29uc3QgSFRNTDVfSU5QVVRfVFlQRVNfVEVYVCA9IFtcblx0J2NvbG9yJyxcblx0J2RhdGUnLFxuXHQnZGF0ZXRpbWUtbG9jYWwnLFxuXHQnZW1haWwnLFxuXHQnZmlsZScsXG5cdCdoaWRkZW4nLFxuXHQnaW1hZ2UnLFxuXHQnbW9udGgnLFxuXHQnbnVtYmVyJyxcblx0J3Bhc3N3b3JkJyxcblx0J3JhbmdlJyxcblx0J3Jlc2V0Jyxcblx0J3NlYXJjaCcsXG5cdCd0ZWwnLFxuXHQndGV4dCcsXG5cdCd0aW1lJyxcblx0J3VybCcsXG5cdCd3ZWVrJyxcbl07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgSW5wdXRFcnJvciB9IGZyb20gJy4vaW5wdXQtZXJyb3InO1xuaW1wb3J0IHsgSW5wdXRIZWxwVGV4dCB9IGZyb20gJy4vaW5wdXQtaGVscC10ZXh0JztcblxuLyoqXG4gKiBCYXNpYyBmb3JtIGlucHV0IGxheW91dCB3aGVyZSBpbnB1dCBpcyBmb2xsb3dlZCBieSBpbnB1dCBlcnJvciBhbmQgaGVscCB0ZXh0XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZm9ybUlucHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXROYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRJRFxuICogQHBhcmFtIHtzdHJpbmd9IGhlbHBUZXh0XG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGZvcm0gaW5wdXRcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRJbnB1dExheW91dCA9ICgge1xuXHRmb3JtSW5wdXQsXG5cdGlucHV0TmFtZSxcblx0aGVscFRleHRJRCxcblx0aGVscFRleHQsXG59ICkgPT4ge1xuXHRyZXR1cm4gZm9ybUlucHV0ICYmIChcblx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHR7IGZvcm1JbnB1dCB9XG5cdFx0XHQ8SW5wdXRFcnJvciBpbnB1dE5hbWU9eyBpbnB1dE5hbWUgfSAvPlxuXHRcdFx0PElucHV0SGVscFRleHRcblx0XHRcdFx0aGVscFRleHRJRD17IGhlbHBUZXh0SUQgfVxuXHRcdFx0XHRoZWxwVGV4dD17IGhlbHBUZXh0IH1cblx0XHRcdC8+XG5cdFx0PC9GcmFnbWVudD5cblx0KTtcbn07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZXNwcmVzc28taW5wdXQtZXJyb3JcIjpcImVzcHJlc3NvLWlucHV0LWVycm9yXCJ9OyIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJ3JlYWN0LWZpbmFsLWZvcm0nO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICcuL2lucHV0LWVycm9yLmNzcyc7XG5cbi8qKlxuICogQGZ1bmN0aW9uIElucHV0RXJyb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dE5hbWVcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgaGVscCB0ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBJbnB1dEVycm9yID0gKCB7IGlucHV0TmFtZSB9ICkgPT4gKFxuXHQ8RmllbGRcblx0XHRuYW1lPXsgaW5wdXROYW1lIH1cblx0XHRzdWJzY3JpcHRpb249eyB7IHRvdWNoZWQ6IHRydWUsIGVycm9yOiB0cnVlIH0gfVxuXHRcdHJlbmRlcj17ICggeyBtZXRhOiB7IHRvdWNoZWQsIGVycm9yIH0gfSApID0+XG5cdFx0XHR0b3VjaGVkICYmIGVycm9yID9cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGlkPXsgYCR7IGlucHV0TmFtZSB9LWlucHV0LWVycm9yYCB9XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZXNwcmVzc28taW5wdXQtZXJyb3JcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4+eyBlcnJvciB9PC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj4gOlxuXHRcdFx0XHRudWxsXG5cdFx0fVxuXHQvPlxuKTtcblxuSW5wdXRFcnJvci5wcm9wVHlwZXMgPSB7IGlucHV0TmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkIH07XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEBmdW5jdGlvbiBJbnB1dEhlbHBUZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRJRFxuICogQHBhcmFtIHtzdHJpbmd9IGhlbHBUZXh0XG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGhlbHAgdGV4dFxuICovXG5leHBvcnQgY29uc3QgSW5wdXRIZWxwVGV4dCA9ICggeyBoZWxwVGV4dElELCBoZWxwVGV4dCB9ICkgPT4ge1xuXHRyZXR1cm4gaGVscFRleHQgPyAoXG5cdFx0PHAgaWQ9eyBoZWxwVGV4dElEIH0gY2xhc3NOYW1lPVwiZXNwcmVzc28taW5wdXQtaGVscC10ZXh0XCIgPlxuXHRcdFx0eyBoZWxwVGV4dCB9XG5cdFx0PC9wPlxuXHQpIDogbnVsbDtcbn07XG5cbklucHV0SGVscFRleHQucHJvcFR5cGVzID0ge1xuXHRoZWxwVGV4dElEOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdGhlbHBUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogZ2VuZXJhdGVzIGFuIGh0bWwgPGxhYmVsPiB0YWdcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxGb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVxdWlyZWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc3Ryb25nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGhpZGRlblxuICogQHBhcmFtIHtPYmplY3R9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogQHJldHVybiB7c3RyaW5nfSByZW5kZXJlZCBmb3JtIGxhYmVsXG4gKi9cbmV4cG9ydCBjb25zdCBJbnB1dExhYmVsID0gKCB7XG5cdGxhYmVsLFxuXHRodG1sRm9yLFxuXHRodG1sQ2xhc3MgPSAnJyxcblx0cmVxdWlyZWQgPSBmYWxzZSxcblx0c3Ryb25nID0gdHJ1ZSxcblx0aGlkZGVuID0gZmFsc2UsXG5cdGNoaWxkcmVuLFxuXHQuLi5hdHRyaWJ1dGVzXG59ICkgPT4ge1xuXHQvLyBhZGQgYXN0ZXJpc2sgdG8gbGFiZWwgYnV0IG5vdCBpZiBpdCBpcyBmb3IgYSBjaGVja2JveCBvciByYWRpbyBidXR0b25cblx0Y29uc3QgYXN0ZXJpc2sgPSByZXF1aXJlZCAmJiBjaGlsZHJlbiA9PT0gdW5kZWZpbmVkID9cblx0XHQoIDxzcGFuIGNsYXNzTmFtZT1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gKSA6XG5cdFx0Jyc7XG5cdGxhYmVsID0gc3Ryb25nID8gKCA8c3Ryb25nPnsgbGFiZWwgfTwvc3Ryb25nPiApIDogbGFiZWw7XG5cblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcygge1xuXHRcdFsgaHRtbENsYXNzIF06IGh0bWxDbGFzcyxcblx0XHRbIHJlcXVpcmVkIF06IHJlcXVpcmVkLFxuXHRcdCdjb2wtZm9ybS1sYWJlbCc6ICEgaGlkZGVuLFxuXHRcdCdzY3JlZW4tcmVhZGVyLXRleHQnOiBoaWRkZW4sXG5cdH0gKTtcblxuXHRyZXR1cm4gKFxuXHRcdDxsYWJlbCBodG1sRm9yPXsgaHRtbEZvciB9IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9IHsgLi4uYXR0cmlidXRlcyB9PlxuXHRcdFx0eyBjaGlsZHJlbiB9XG5cdFx0XHR7IGxhYmVsIH17IGFzdGVyaXNrIH1cblx0XHQ8L2xhYmVsPlxuXHQpO1xufTtcblxuSW5wdXRMYWJlbC5wcm9wVHlwZXMgPSB7XG5cdGxhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRdICkuaXNSZXF1aXJlZCxcblx0aHRtbEZvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblx0c3Ryb25nOiBQcm9wVHlwZXMuYm9vbCxcblx0Y2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5hcnJheU9mKCBQcm9wVHlwZXMub2JqZWN0ICksXG5cdF0gKSxcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSwgaW5kZXhPZiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIGdlbmVyYXRlcyB0aGUgaW5pdGlhbCBjaGVja2VkIHN0YXRlXG4gKiBmb3IgYSBzZXQgb2YgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uXG4gKiBvcHRpb25zIGJhc2VkIG9uIHRoZSBzZXQgZGVmYXVsdFZhbHVlLlxuICogVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzdXBwbHlpbmdcbiAqIGFuIGFsdGVybmF0ZSB2YWx1ZSB2aWEgdGhlIGZvdXJ0aCBwYXJhbSxcbiAqIHdoaWNoIGlzIHVzZWQgdG8gcmVzZXQgYWxsIHZhbHVlcy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zXG4gKiBAcGFyYW0ge21peGVkfSB2YWx1ZXNcbiAqIEBwYXJhbSB7bWl4ZWR9IHJlc2V0XG4gKiBAcmV0dXJuIHtPYmplY3R9IHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBPcHRpb25DaGVja2VkU3RhdGUgPSAoIGlucHV0SWQsIG9wdGlvbnMsIHZhbHVlcywgcmVzZXQgKSA9PiB7XG5cdGNvbnN0IGNoZWNrZWQgPSB7fTtcblx0b3B0aW9ucyA9IGlzQXJyYXkoIG9wdGlvbnMgKSA/IG9wdGlvbnMgOiBbXTtcblx0dmFsdWVzID0gaXNBcnJheSggdmFsdWVzICkgPyB2YWx1ZXMgOiBbIHZhbHVlcyBdO1xuXHRvcHRpb25zLmZvckVhY2goIGZ1bmN0aW9uKCBvcHRpb24sIGluZGV4ICkge1xuXHRcdGNvbnN0IGtleSA9IGlucHV0SWQgKyAnLScgKyBpbmRleDtcblx0XHRjb25zdCBpc1NlbGVjdGVkID0gaW5kZXhPZiggdmFsdWVzLCBvcHRpb24udmFsdWUgKSAhPT0gLTE7XG5cdFx0Y2hlY2tlZFsga2V5IF0gPSByZXNldCA9PT0gdW5kZWZpbmVkID8gaXNTZWxlY3RlZCA6IHJlc2V0O1xuXHR9ICk7XG5cdHJldHVybiBjaGVja2VkO1xufTtcblxuT3B0aW9uQ2hlY2tlZFN0YXRlLnByb3BUeXBlcyA9IHtcblx0aW5wdXRJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcblx0ZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRdICksXG5cdHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRdICksXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEZpZWxkIH0gZnJvbSAncmVhY3QtZmluYWwtZm9ybSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBJbnB1dExhYmVsIH0gZnJvbSAnLi9pbnB1dC1sYWJlbCc7XG5cbi8qKlxuICogZ2VuZXJhdGVzIHRoZSA8bGFiZWw+PGlucHV0PiBwYWlyaW5ncyBmb3JcbiAqIGEgc2V0IG9mIGh0bWwgY2hlY2tib3ggb3IgcmFkaW8gaW5wdXRzXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjaGVja2VkU3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbENsYXNzXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkNoYW5nZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25DbGlja1xuICogQHBhcmFtIHtzdHJpbmd9IGhlbHBUZXh0SURcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhU2V0XG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogQHJldHVybiB7c3RyaW5nfSBjc3MgY2xhc3MgZGVzY3JpYmluZyBsYWJlbCBzaXplXG4gKi9cbmV4cG9ydCBjb25zdCBPcHRpb25JbnB1dHMgPSAoIHtcblx0dHlwZSxcblx0bmFtZSxcblx0Y2hlY2tlZFN0YXRlLFxuXHRodG1sSWQsXG5cdGh0bWxDbGFzcyxcblx0bGFiZWxDbGFzcyxcblx0b3B0aW9ucyxcblx0b25DbGljayxcblx0aGVscFRleHRJRCxcblx0ZGF0YVNldCxcblx0Li4uYXR0cmlidXRlc1xufSApID0+IHtcblx0ZGVsZXRlIGF0dHJpYnV0ZXMuaW5pdGlhbFZhbHVlO1xuXHRvcHRpb25zID0gaXNBcnJheSggb3B0aW9ucyApID8gb3B0aW9ucyA6IFsgb3B0aW9ucyBdO1xuXHRjb25zdCBjb3VudCA9IG9wdGlvbnMubGVuZ3RoO1xuXHRsZXQgY2hlY2tlZCA9IGZhbHNlO1xuXHRyZXR1cm4gb3B0aW9ucy5tYXAoICggb3B0aW9uLCBpbmRleCApID0+IHtcblx0XHRjb25zdCBpZCA9IGAkeyBodG1sSWQgfS0keyBpbmRleCB9YDtcblx0XHRjaGVja2VkID0gY2hlY2tlZFN0YXRlWyBpZCBdO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8SW5wdXRMYWJlbFxuXHRcdFx0XHRrZXk9eyBpbmRleCB9XG5cdFx0XHRcdGxhYmVsPXsgb3B0aW9uLmxhYmVsIH1cblx0XHRcdFx0aHRtbEZvcj17IGlkIH1cblx0XHRcdFx0aHRtbENsYXNzPXsgYCR7IGxhYmVsQ2xhc3MgfSAkeyBjaGVja2VkID8gJ2FjdGl2ZScgOiAnJyB9YCB9XG5cdFx0XHRcdHN0cm9uZz17IGZhbHNlIH1cblx0XHRcdFx0b25DbGljaz17IG9uQ2xpY2sgfVxuXHRcdFx0PlxuXHRcdFx0XHQ8RmllbGRcblx0XHRcdFx0XHRjb21wb25lbnQ9XCJpbnB1dFwiXG5cdFx0XHRcdFx0dHlwZT17IHR5cGUgfVxuXHRcdFx0XHRcdG5hbWU9eyBuYW1lIH1cblx0XHRcdFx0XHRpZD17IGlkIH1cblx0XHRcdFx0XHRjbGFzc05hbWU9eyBodG1sQ2xhc3MgfVxuXHRcdFx0XHRcdHZhbHVlPXsgb3B0aW9uLnZhbHVlIH1cblx0XHRcdFx0XHRjaGVja2VkPXsgY2hlY2tlZCB9XG5cdFx0XHRcdFx0bXVsdGlwbGU9eyBjb3VudCA+IDEgfVxuXHRcdFx0XHRcdGFyaWEtZGVzY3JpYmVkYnk9eyBoZWxwVGV4dElEIH1cblx0XHRcdFx0XHR7IC4uLmRhdGFTZXQgfVxuXHRcdFx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0lucHV0TGFiZWw+XG5cdFx0KTtcblx0fSApO1xufTtcblxuT3B0aW9uSW5wdXRzLnByb3BUeXBlcyA9IHtcblx0dHlwZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdGNoZWNrZWRTdGF0ZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuXHRodG1sSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRsYWJlbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFxuXHRcdFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdFx0bGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRcdHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRdICksXG5cdFx0fSApLFxuXHQpLFxuXHRvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cdG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdGhlbHBUZXh0SUQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGRhdGFTZXQ6IFByb3BUeXBlcy5vYmplY3QsXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBmaW5kcyBtYXhpbXVtIG9wdGlvbiB2YWx1ZSBsZW5ndGggdG8gZGV0ZXJtaW5lIGxhYmVsIHNpemVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl9IG9wdGlvbnNcbiAqIEByZXR1cm4ge3N0cmluZ30gY3NzIGNsYXNzIGRlc2NyaWJpbmcgbGFiZWwgc2l6ZVxuICovXG5leHBvcnQgY29uc3QgT3B0aW9uTGFiZWxTaXplID0gKCBvcHRpb25zICkgPT4ge1xuXHRsZXQgc2l6ZSA9IDA7XG5cdG9wdGlvbnMgPSBpc0FycmF5KCBvcHRpb25zICkgPyBvcHRpb25zIDogW107XG5cdG9wdGlvbnMuZm9yRWFjaCggZnVuY3Rpb24oIG9wdGlvbiApIHtcblx0XHRzaXplID0gb3B0aW9uLmxhYmVsLmxlbmd0aCA+IHNpemUgPyBvcHRpb24ubGFiZWwubGVuZ3RoIDogc2l6ZTtcblx0fSApO1xuXHRsZXQgbGFiZWxTaXplID0gJyBtZWRpdW0tbGJsJztcblx0aWYgKCBzaXplIDwgMyApIHtcblx0XHRsYWJlbFNpemUgPSAnIG5hbm8tbGJsJztcblx0fSBlbHNlIGlmICggc2l6ZSA8IDYgKSB7XG5cdFx0bGFiZWxTaXplID0gJyBtaWNyby1sYmwnO1xuXHR9IGVsc2UgaWYgKCBzaXplIDwgMTIgKSB7XG5cdFx0bGFiZWxTaXplID0gJyB0aW55LWxibCc7XG5cdH0gZWxzZSBpZiAoIHNpemUgPCAyNSApIHtcblx0XHRsYWJlbFNpemUgPSAnIHNtYWxsLWxibCc7XG5cdH0gZWxzZSBpZiAoIHNpemUgPCA1MCApIHtcblx0XHRsYWJlbFNpemUgPSAnIG1lZGl1bS1sYmwnO1xuXHR9IGVsc2UgaWYgKCBzaXplID49IDEwMCApIHtcblx0XHRsYWJlbFNpemUgPSAnIGJpZy1sYmwnO1xuXHR9XG5cdHJldHVybiBsYWJlbFNpemU7XG59O1xuXG5PcHRpb25MYWJlbFNpemUucHJvcFR5cGVzID0ge1xuXHRvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihcblx0XHRQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRcdGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdFx0XHR2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XSApLFxuXHRcdH0gKSxcblx0KSxcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgb21pdCB9IGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogQHJldHVybiB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKi9cbmV4cG9ydCBjb25zdCBjbGVhblVwSW5wdXRBdHRyaWJ1dGVzID0gKCBhdHRyaWJ1dGVzID0ge30gKSA9PiB7XG5cdHJldHVybiBvbWl0KCBhdHRyaWJ1dGVzLCBbXG5cdFx0J2NoaWxkcmVuJyxcblx0XHQnY29sU2l6ZScsXG5cdFx0J2hlbHBUZXh0Jyxcblx0XHQnaGVscFRleHRJRCcsXG5cdFx0J2xhYmVsJyxcblx0XHQncmVuZGVyJyxcblx0XHQndmFsaWRhdGlvbnMnLFxuXHRdICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtBcnJheX0gdmFsaWRhdG9yc1xuICogQHJldHVybiB7RnVuY3Rpb259IGNvbWJpbmVkIHZhbGlkYXRpb24gZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBvc2VWYWxpZGF0b3JzID0gKCAuLi52YWxpZGF0b3JzICkgPT4gKCB2YWx1ZSApID0+IHtcblx0cmV0dXJuIHZhbGlkYXRvcnMucmVkdWNlKFxuXHRcdCggZXJyb3IsIHZhbGlkYXRvciApID0+IGVycm9yIHx8IHZhbGlkYXRvciggdmFsdWUgKSxcblx0XHR1bmRlZmluZWRcblx0KTtcbn07XG5cbi8qKlxuICogbG9vcHMgdGhyb3VnaCB0aGUgaW5wdXQncyBzZXQgdmFsaWRhdG9ycyBhbmRcbiAqIGFkZHMgYXR0cmlidXRlcyBmb3IgY29ycmVzcG9uZGluZyBIVE1MIGF0dHJpYnV0ZXMgYWNjb3JkaW5nbHkuXG4gKiBSaWdodCBub3csIHRoaXMgaXMgb25seSBkb2luZyBzbyBmb3IgdGhlIFwicmVxdWlyZWRcIiB2YWxpZGF0b3IuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogQHBhcmFtIHtBcnJheX0gdmFsaWRhdG9yc1xuICogQHJldHVybiB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRWYWxpZGF0b3JzVG9BdHRyaWJ1dGVzID0gKFxuXHRhdHRyaWJ1dGVzID0ge30sXG5cdHZhbGlkYXRvcnMgPSBbXSxcbikgPT4ge1xuXHR2YWxpZGF0b3JzLmZvckVhY2goXG5cdFx0KCB2YWxpZGF0b3IgKSA9PiB7XG5cdFx0XHRjb25zdCBuYW1lID0gdmFsaWRhdG9yICYmIHZhbGlkYXRvci5uYW1lID8gdmFsaWRhdG9yLm5hbWUgOiAnJztcblx0XHRcdHN3aXRjaCAoIG5hbWUgKSB7XG5cdFx0XHRcdGNhc2UgJ3JlcXVpcmVkJyA6XG5cdFx0XHRcdFx0YXR0cmlidXRlcy5yZXF1aXJlZCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXHRyZXR1cm4gYXR0cmlidXRlcztcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtBcnJheX0gdmFsdWVzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWYWx1ZXNGb3JPcHRpb25zID0gKCBvcHRpb25zICkgPT4gb3B0aW9ucy5tYXAoXG5cdCggb3B0aW9uICkgPT4gb3B0aW9uLnZhbHVlXG4pO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFTZXRcbiAqIEByZXR1cm4ge09iamVjdH0gZGF0YVNldFxuICovXG5leHBvcnQgY29uc3QgcHJlcGFyZURhdGFTZXQgPSAoIGRhdGFTZXQgPSB7fSApID0+IHtcblx0Zm9yICggY29uc3Qga2V5IGluIGRhdGFTZXQgKSB7XG5cdFx0aWYgKCBkYXRhU2V0Lmhhc093blByb3BlcnR5KCBrZXkgKSApIHtcblx0XHRcdGlmICggISBrZXkuc3RhcnRzV2l0aCggJ2RhdGEtJyApICkge1xuXHRcdFx0XHRkYXRhU2V0WyBgZGF0YS0keyBrZXkgfWAgXSA9IGRhdGFTZXRbIGtleSBdO1xuXHRcdFx0XHRkZWxldGUgZGF0YVNldFsga2V5IF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhU2V0O1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IE9wdGlvbkNoZWNrZWRTdGF0ZSB9IGZyb20gJy4vYmFzZS9vcHRpb24tY2hlY2tlZC1zdGF0ZSc7XG5pbXBvcnQgeyBPcHRpb25JbnB1dHMgfSBmcm9tICcuL2Jhc2Uvb3B0aW9uLWlucHV0cyc7XG5pbXBvcnQgeyBPcHRpb25MYWJlbFNpemUgfSBmcm9tICcuL2Jhc2Uvb3B0aW9uLWxhYmVsLXNpemUnO1xuXG4vKipcbiAqIGdlbmVyYXRlcyBvbmUgb3IgbW9yZSBodG1sIGNoZWNrYm94IGlucHV0c1xuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxJZFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkNoYW5nZVxuICogQHBhcmFtIHtib29sZWFufSBidG5Hcm91cFxuICogQHBhcmFtIHtzdHJpbmd9IGhlbHBUZXh0SURcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhU2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRXaWR0aFxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqIEByZXR1cm4ge3N0cmluZ30gcmVuZGVyZWQgZGF0ZSBuYW1lIGZvcm0gcm93XG4gKi9cbmV4cG9ydCBjbGFzcyBDaGVja2JveElucHV0IGV4dGVuZHMgQ29tcG9uZW50IHtcblx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRodG1sSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0dmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFByb3BUeXBlcy5hcnJheSxcblx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdF0gKSxcblx0XHRvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXksXG5cdFx0b25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGJ0bkdyb3VwOiBQcm9wVHlwZXMuYm9vbCxcblx0XHRpbnB1dFdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdGhlbHBUZXh0SUQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0ZGF0YVNldDogUHJvcFR5cGVzLm9iamVjdCxcblx0fTtcblxuXHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0c3VwZXIoIHByb3BzICk7XG5cdFx0dGhpcy5zdGF0ZSA9IHtcblx0XHRcdGNoZWNrZWQ6IHRoaXMucmVzZXRTdGF0ZSgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEByZXR1cm4ge09iamVjdH0gc3RhdGVcblx0ICovXG5cdHJlc2V0U3RhdGUgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIE9wdGlvbkNoZWNrZWRTdGF0ZShcblx0XHRcdHRoaXMucHJvcHMuaHRtbElkLFxuXHRcdFx0dGhpcy5wcm9wcy5vcHRpb25zLFxuXHRcdFx0dGhpcy5wcm9wcy5pbml0aWFsVmFsdWUsXG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0dG9nZ2xlQ2hlY2tlZCA9ICggZXZlbnQgKSA9PiB7XG5cdFx0aWYgKCBldmVudC50YXJnZXQgJiZcblx0XHRcdGV2ZW50LnRhcmdldC5pZCAmJlxuXHRcdFx0ZXZlbnQudGFyZ2V0LmNoZWNrZWQgIT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgY2hlY2tlZCA9IHRoaXMuc3RhdGUuY2hlY2tlZDtcblx0XHRcdGNoZWNrZWRbIGV2ZW50LnRhcmdldC5pZCBdID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG5cdFx0XHR0aGlzLnNldFN0YXRlKCB7IGNoZWNrZWQgfSApO1xuXHRcdH1cblx0fTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0bmFtZSxcblx0XHRcdGh0bWxJZCxcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHRyZXF1aXJlZCxcblx0XHRcdGhlbHBUZXh0SUQsXG5cdFx0XHRidG5Hcm91cCA9IHRydWUsXG5cdFx0XHRpbnB1dFdpZHRoID0gJycsXG5cdFx0XHQuLi5hdHRyaWJ1dGVzXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0bGV0IHsgaHRtbENsYXNzIH0gPSB0aGlzLnByb3BzO1xuXG5cdFx0aHRtbENsYXNzID0gcmVxdWlyZWQgP1xuXHRcdFx0YCR7IGh0bWxDbGFzcyB9IGVlLWNoZWNrYm94LWdyb3VwLXJlcXVpcmVkYCA6XG5cdFx0XHRodG1sQ2xhc3M7XG5cdFx0Y29uc3QgbGFiZWxDbGFzcyA9IGJ0bkdyb3VwID9cblx0XHRcdCdidG4gYnRuLXByaW1hcnknIDpcblx0XHRcdCdlZS1jaGVja2JveC1sYWJlbC1hZnRlcicgKyBPcHRpb25MYWJlbFNpemUoIG9wdGlvbnMgKTtcblx0XHRsZXQgZGl2Q2xhc3MgPSBidG5Hcm91cCA/ICdidG4tZ3JvdXAnIDogJ2VlLWNoZWNrYm94LWdyb3VwJztcblx0XHRkaXZDbGFzcyA9IGlucHV0V2lkdGggP1xuXHRcdFx0YCR7IGRpdkNsYXNzIH0gZWUtaW5wdXQtd2lkdGgtJHsgaW5wdXRXaWR0aCB9YCA6XG5cdFx0XHRkaXZDbGFzcztcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eyBkaXZDbGFzcyB9PlxuXHRcdFx0XHQ8T3B0aW9uSW5wdXRzXG5cdFx0XHRcdFx0dHlwZT1cImNoZWNrYm94XCJcblx0XHRcdFx0XHRuYW1lPXsgbmFtZSB9XG5cdFx0XHRcdFx0Y2hlY2tlZFN0YXRlPXsgdGhpcy5zdGF0ZS5jaGVja2VkIH1cblx0XHRcdFx0XHRodG1sSWQ9eyBodG1sSWQgfVxuXHRcdFx0XHRcdGh0bWxDbGFzcz17IGh0bWxDbGFzcyB9XG5cdFx0XHRcdFx0bGFiZWxDbGFzcz17IGxhYmVsQ2xhc3MgfVxuXHRcdFx0XHRcdG9wdGlvbnM9eyBvcHRpb25zIH1cblx0XHRcdFx0XHRvbkNsaWNrPXsgdGhpcy50b2dnbGVDaGVja2VkIH1cblx0XHRcdFx0XHRoZWxwVGV4dElEPXsgaGVscFRleHRJRCB9XG5cdFx0XHRcdFx0eyAuLi5hdHRyaWJ1dGVzIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH1cbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1kYXRlLXRpbWUtaW5wdXQtdGV4dC1maWVsZC13cmFwcGVyXCI6XCJlZS1kYXRlLXRpbWUtaW5wdXQtdGV4dC1maWVsZC13cmFwcGVyXCIsXCJlZS1kYXRlLXRpbWUtaW5wdXQtdGV4dC1maWVsZFwiOlwiZWUtZGF0ZS10aW1lLWlucHV0LXRleHQtZmllbGRcIixcImVlLWRhdGUtdGltZS1pbnB1dC1kaWFsb2dcIjpcImVlLWRhdGUtdGltZS1pbnB1dC1kaWFsb2dcIixcImVlLWRhdGUtdGltZS1pbnB1dC1waWNrZXItd3JhcHBlclwiOlwiZWUtZGF0ZS10aW1lLWlucHV0LXBpY2tlci13cmFwcGVyXCIsXCJlZS1kYXRlLXRpbWUtaW5wdXQtYnV0dG9ucy13cmFwcGVyXCI6XCJlZS1kYXRlLXRpbWUtaW5wdXQtYnV0dG9ucy13cmFwcGVyXCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tICdyZWFjdC1maW5hbC1mb3JtJztcbmltcG9ydCB7XG5cdEJ1dHRvbixcblx0RGF0ZVRpbWVQaWNrZXIsXG5cdERyb3Bkb3duLFxuXHRJY29uQnV0dG9uLFxufSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRU5URVIsIFNQQUNFIH0gZnJvbSAnQHdvcmRwcmVzcy9rZXljb2Rlcyc7XG5pbXBvcnQgeyBFc3ByZXNzb0ljb24sIEVTUFJFU1NPX0lDT05fQ0FMRU5EQVIgfSBmcm9tICcuLi8uLi91aS9pbWFnZS9lc3ByZXNzby1pY29uJztcbmltcG9ydCB7IFNFUlZFUl9MT0NBTEUgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IERBVEVfVElNRV9GT1JNQVRfU0lURSwgVElNRV9GT1JNQVRfU0lURSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IFNlcnZlckRhdGVUaW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5cbmltcG9ydCAnLi9kYXRlLXRpbWUtaW5wdXQuY3NzJztcbi8qKlxuICogZ2VuZXJhdGVzIGFuIEhUTUw1IHRleHQgaW5wdXQgdGhhdCBvcGVucyBhIFdQIERyb3Bkb3duICsgRGF0ZVRpbWVQaWNrZXJcbiAqIGZvciBwb3B1bGF0aW5nIHRoZSBpbnB1dCB3aXRoIGEgZGF0ZSBhbmQgdGltZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbElkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRJRFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFTZXRcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gaW5wdXRXaWR0aFxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqIEByZXR1cm4ge3N0cmluZ30gcmVuZGVyZWQgZGF0ZSBuYW1lIGZvcm0gcm93XG4gKi9cbmNsYXNzIERhdGVUaW1lRHJvcGRvd24gZXh0ZW5kcyBDb21wb25lbnQge1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG5cdFx0aW5pdGlhbFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRdICkuaXNSZXF1aXJlZCxcblx0XHRodG1sSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0aGVscFRleHRJRDogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRkYXRhU2V0OiBQcm9wVHlwZXMub2JqZWN0LFxuXHRcdGlucHV0V2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdF0gKSxcblx0fTtcblxuXHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0c3VwZXIoIHByb3BzICk7XG5cdFx0Y29uc3QgaW5pdGlhbFZhbHVlID0gbmV3IERhdGUoKTtcblx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0aXMxMkhvdXJUaW1lOiB0cnVlLFxuXHRcdFx0ZWRpdG9yT3BlbjogZmFsc2UsXG5cdFx0XHRpbnB1dFZhbHVlOiBpbml0aWFsVmFsdWUsXG5cdFx0XHRuZXdWYWx1ZTogaW5pdGlhbFZhbHVlLFxuXHRcdFx0cHJldlZhbHVlOiBpbml0aWFsVmFsdWUsXG5cdFx0XHRvbkNoYW5nZTogbnVsbCxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIG9wZW5zIGFuZCBjbG9zZXMgRGF0ZVRpbWVQaWNrZXIgTW9kYWxcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqL1xuXHRjb21wb25lbnREaWRNb3VudCA9ICgpID0+IHtcblx0XHRjb25zdCBpbml0aWFsVmFsdWUgPSB0aGlzLnByb3BzLmluaXRpYWxWYWx1ZSA/XG5cdFx0XHRuZXcgRGF0ZSggdGhpcy5wcm9wcy5pbml0aWFsVmFsdWUgKSA6XG5cdFx0XHRuZXcgRGF0ZSgpO1xuXHRcdC8vIFRvIGtub3cgaWYgdGhlIGN1cnJlbnQgdGltZXpvbmUgaXMgYSAxMiBob3VyIHRpbWVcblx0XHQvLyB3ZSBsb29rIGZvciBcImFcIiBpbiB0aGUgdGltZSBmb3JtYXRcblx0XHQvLyBXZSBhbHNvIG1ha2Ugc3VyZSB0aGlzIGEgaXMgbm90IGVzY2FwZWQgYnkgYSBcIi9cIlxuXHRcdGNvbnN0IGlzMTJIb3VyVGltZSA9IC9hKD8hXFxcXCkvaS50ZXN0KFxuXHRcdFx0VElNRV9GT1JNQVRfU0lURVxuXHRcdFx0Ly8gVGVzdCBvbmx5IHRoZSBsb3dlciBjYXNlIGFcblx0XHRcdFx0LnRvTG93ZXJDYXNlKClcblx0XHRcdFx0Ly8gUmVwbGFjZSBcIi8vXCIgd2l0aCBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdC5yZXBsYWNlKCAvXFxcXFxcXFwvZywgJycgKVxuXHRcdFx0XHQvLyBSZXZlcnNlIHRoZSBzdHJpbmcgYW5kIHRlc3QgZm9yIFwiYVwiIG5vdCBmb2xsb3dlZCBieSBhIHNsYXNoXG5cdFx0XHRcdC5zcGxpdCggJycgKS5yZXZlcnNlKCkuam9pbiggJycgKVxuXHRcdCk7XG5cdFx0dGhpcy5zZXRTdGF0ZSgge1xuXHRcdFx0aXMxMkhvdXJUaW1lLFxuXHRcdFx0ZWRpdG9yT3BlbjogZmFsc2UsXG5cdFx0XHRpbnB1dFZhbHVlOiBpbml0aWFsVmFsdWUsXG5cdFx0XHRuZXdWYWx1ZTogaW5pdGlhbFZhbHVlLFxuXHRcdFx0cHJldlZhbHVlOiBpbml0aWFsVmFsdWUsXG5cdFx0XHRvbkNoYW5nZTogdGhpcy5wcm9wcy5pbnB1dCAmJiB0aGlzLnByb3BzLmlucHV0Lm9uQ2hhbmdlID9cblx0XHRcdFx0dGhpcy5wcm9wcy5pbnB1dC5vbkNoYW5nZSA6XG5cdFx0XHRcdG51bGwsXG5cdFx0fSApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBvcGVucyBhbmQgY2xvc2VzIERhdGVUaW1lUGlja2VyIE1vZGFsXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKi9cblx0dG9nZ2xlRWRpdG9yID0gKCkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoICggcHJldlN0YXRlICkgPT4gKFxuXHRcdFx0eyBlZGl0b3JPcGVuOiAhIHByZXZTdGF0ZS5lZGl0b3JPcGVuIH1cblx0XHQpICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIG9wZW5zIGFuZCBjbG9zZXMgRGF0ZVRpbWVQaWNrZXIgTW9kYWxcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdEYXRlXG5cdCAqL1xuXHRvbkNoYW5nZSA9ICggbmV3RGF0ZSApID0+IHtcblx0XHR0aGlzLnNldFN0YXRlKCB7IG5ld1ZhbHVlOiBuZXcgRGF0ZSggbmV3RGF0ZSApIH0gKTtcblx0fTtcblxuXHQvKipcblx0ICogb3BlbnMgYW5kIGNsb3NlcyBEYXRlVGltZVBpY2tlciBNb2RhbFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICovXG5cdGNhbmNlbCA9ICgpID0+IHtcblx0XHR0aGlzLnNldFN0YXRlKCAoIHByZXZTdGF0ZSApID0+IChcblx0XHRcdHsgaW5wdXRWYWx1ZTogcHJldlN0YXRlLnByZXZWYWx1ZSB9XG5cdFx0KSApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBzdWJtaXRzIHRoZSB2YWx1ZSBmcm9tIHRoZSBEYXRlcGlja2VyXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKi9cblx0dXBkYXRlID0gKCkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoICggcHJldlN0YXRlICkgPT4ge1xuXHRcdFx0aWYgKCB0eXBlb2YgcHJldlN0YXRlLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0XHRwcmV2U3RhdGUub25DaGFuZ2UoIHByZXZTdGF0ZS5uZXdWYWx1ZS50b0lTT1N0cmluZygpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpbnB1dFZhbHVlOiBwcmV2U3RhdGUubmV3VmFsdWUsXG5cdFx0XHRcdHByZXZWYWx1ZTogcHJldlN0YXRlLm5ld1ZhbHVlLFxuXHRcdFx0fTtcblx0XHR9ICk7XG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdGlucHV0LFxuXHRcdFx0aHRtbElkLFxuXHRcdFx0aHRtbENsYXNzLFxuXHRcdFx0aGVscFRleHRJRCxcblx0XHRcdGRhdGFTZXQsXG5cdFx0XHRpbnB1dFdpZHRoID0gJycsXG5cdFx0XHQuLi5hdHRyaWJ1dGVzXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0ZGVsZXRlIGF0dHJpYnV0ZXMuaW5pdGlhbFZhbHVlO1xuXHRcdGNvbnN0IGlucHV0Q2xhc3MgPSBjbGFzc05hbWVzKCB7XG5cdFx0XHRbIGh0bWxDbGFzcyBdOiB0cnVlLFxuXHRcdFx0J2VlLWRhdGUtdGltZS1pbnB1dC10ZXh0LWZpZWxkJzogdHJ1ZSxcblx0XHRcdCdmb3JtLWNvbnRyb2wnOiB0cnVlLFxuXHRcdFx0WyBgZWUtaW5wdXQtd2lkdGgtJHsgaW5wdXRXaWR0aCB9YCBdOiBpbnB1dFdpZHRoLFxuXHRcdH0gKTtcblx0XHRjb25zdCBpbnB1dFZhbHVlID0gU2VydmVyRGF0ZVRpbWUuZnJvbUpTRGF0ZSggdGhpcy5zdGF0ZS5pbnB1dFZhbHVlICk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxEcm9wZG93blxuXHRcdFx0XHRwb3NpdGlvbj1cImJvdHRvbSBjZW50ZXJcIlxuXHRcdFx0XHRjb250ZW50Q2xhc3NOYW1lPVwiZWUtZGF0ZS10aW1lLWlucHV0LWRpYWxvZ1wiXG5cdFx0XHRcdHJlbmRlclRvZ2dsZT17ICggeyBvblRvZ2dsZSB9ICkgPT4gKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgJ2VlLWRhdGUtdGltZS1pbnB1dC10ZXh0LWZpZWxkLXdyYXBwZXInIH0+XG5cdFx0XHRcdFx0XHQ8aW5wdXRcblx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0XHRpZD17IGh0bWxJZCB9XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17IGlucHV0Q2xhc3MgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IGlucHV0VmFsdWUudG9Gb3JtYXQoIERBVEVfVElNRV9GT1JNQVRfU0lURSApIH1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17IG9uVG9nZ2xlIH1cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyBpbnB1dC5vbkNoYW5nZSB9XG5cdFx0XHRcdFx0XHRcdG9uS2V5RG93bj17ICggZXZlbnQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnQua2V5Q29kZSA9PT0gRU5URVIgfHxcblx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50LmtleUNvZGUgPT09IFNQQUNFXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvblRvZ2dsZSggZXZlbnQgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRhcmlhLWRlc2NyaWJlZGJ5PXsgaGVscFRleHRJRCB9XG5cdFx0XHRcdFx0XHRcdGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG5cdFx0XHRcdFx0XHRcdHsgLi4uZGF0YVNldCB9XG5cdFx0XHRcdFx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PEljb25CdXR0b25cblx0XHRcdFx0XHRcdFx0aWNvbj17XG5cdFx0XHRcdFx0XHRcdFx0PEVzcHJlc3NvSWNvblxuXHRcdFx0XHRcdFx0XHRcdFx0aWNvbj17IEVTUFJFU1NPX0lDT05fQ0FMRU5EQVIgfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17IG9uVG9nZ2xlIH1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oXG5cdFx0XHRcdFx0XHRcdFx0J0NsaWNrIHRvIGNob29zZSBkYXRlIGFuZCB0aW1lJyxcblx0XHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHRcdCkgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KSB9XG5cdFx0XHRcdHJlbmRlckNvbnRlbnQ9eyAoIHsgb25Ub2dnbGUgfSApID0+IChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17ICdlZS1kYXRlLXRpbWUtaW5wdXQtcGlja2VyLXdyYXBwZXInIH0gPlxuXHRcdFx0XHRcdFx0PERhdGVUaW1lUGlja2VyXG5cdFx0XHRcdFx0XHRcdGtleT1cImVlLWRhdGUtdGltZS1waWNrZXJcIlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50RGF0ZT17IHRoaXMuc3RhdGUubmV3VmFsdWUgfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17IHRoaXMub25DaGFuZ2UgfVxuXHRcdFx0XHRcdFx0XHRsb2NhbGU9eyBTRVJWRVJfTE9DQUxFIH1cblx0XHRcdFx0XHRcdFx0aXMxMkhvdXI9eyB0aGlzLnN0YXRlLmlzMTJIb3VyVGltZSB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyAnZWUtZGF0ZS10aW1lLWlucHV0LWJ1dHRvbnMtd3JhcHBlcicgfSA+XG5cdFx0XHRcdFx0XHRcdDxCdXR0b24gaXNQcmltYXJ5XG5cdFx0XHRcdFx0XHRcdFx0b25DbGljaz17ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudXBkYXRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRvblRvZ2dsZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImVlLWZvcm0tYnV0dG9uLXN1Ym1pdCBlZS1mb3JtLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7IF9fKCAnU3VibWl0JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHRcdDxCdXR0b24gaXNEZWZhdWx0XG5cdFx0XHRcdFx0XHRcdFx0b25DbGljaz17ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuY2FuY2VsKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRvblRvZ2dsZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImVlLWZvcm0tYnV0dG9uLXN1Ym1pdCBlZS1mb3JtLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7IF9fKCAnQ2FuY2VsJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KSB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGlucHV0XG4gKi9cbmV4cG9ydCBjb25zdCBEYXRlVGltZUlucHV0ID0gKCBhdHRyaWJ1dGVzICkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxGaWVsZFxuXHRcdFx0Y29tcG9uZW50PXsgRGF0ZVRpbWVEcm9wZG93biB9XG5cdFx0XHR7IC4uLmF0dHJpYnV0ZXMgfVxuXHRcdC8+XG5cdCk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgT25DaGFuZ2UgfSBmcm9tICdyZWFjdC1maW5hbC1mb3JtLWxpc3RlbmVycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBIVE1MNV9JTlBVVF9UWVBFUyB9IGZyb20gJy4vYmFzZS9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ2hlY2tib3hJbnB1dCB9IGZyb20gJy4vY2hlY2tib3gtaW5wdXQnO1xuaW1wb3J0IHsgRGF0ZVRpbWVJbnB1dCB9IGZyb20gJy4vZGF0ZS10aW1lLWlucHV0JztcbmltcG9ydCB7IEhpZGRlbklucHV0IH0gZnJvbSAnLi9oaWRkZW4taW5wdXQnO1xuaW1wb3J0IHsgUmFkaW9JbnB1dCB9IGZyb20gJy4vcmFkaW8taW5wdXQnO1xuaW1wb3J0IHsgU2VsZWN0SW5wdXQgfSBmcm9tICcuL3NlbGVjdC1pbnB1dCc7XG5pbXBvcnQgeyBUZXh0YXJlYSB9IGZyb20gJy4vdGV4dGFyZWEnO1xuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi90ZXh0LWlucHV0JztcbmltcG9ydCB7IFRvZ2dsZUlucHV0IH0gZnJvbSAnLi90b2dnbGUtaW5wdXQnO1xuaW1wb3J0IHsgRGVmYXVsdElucHV0TGF5b3V0IH0gZnJvbSAnLi9iYXNlL2RlZmF1bHQtaW5wdXQtbGF5b3V0JztcbmltcG9ydCB7XG5cdGNsZWFuVXBJbnB1dEF0dHJpYnV0ZXMsXG5cdGNvbXBvc2VWYWxpZGF0b3JzLFxuXHRhZGRWYWxpZGF0b3JzVG9BdHRyaWJ1dGVzLFxuXHRwcmVwYXJlRGF0YVNldCxcbn0gZnJvbSAnLi9iYXNlL3V0aWxzJztcblxuLy8gYWRkIHNvbWUgZXh0cmEgaW5wdXQgdHlwZXNcbkhUTUw1X0lOUFVUX1RZUEVTLnB1c2goICd0b2dnbGUnICk7XG5cbi8qKlxuICogRm9ybUlucHV0XG4gKiBnZW5lcmF0ZXMgZWl0aGVyIGFuIGh0bWwgY2hlY2tib3gsIHJhZGlvIGJ1dHRvbiwgc2VsZWN0LCB0ZXh0YXJlYSxcbiAqIG9yIEhUTUw1IHRleHQgdmFyaWFudCBpbnB1dCBsaWtlIHRleHQsIGRhdGUsIGVtYWlsLCBldGNcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbElkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uQ2hhbmdlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVNldFxuICogQHBhcmFtIHtBcnJheX0gb3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBoYXNIZWxwVGV4dFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hhbmdlTGlzdGVuZXJcbiAqIEByZXR1cm4ge3N0cmluZ30gcmVuZGVyZWQgZGF0ZSBuYW1lIGZvcm0gcm93XG4gKi9cbmV4cG9ydCBjbGFzcyBGb3JtSW5wdXQgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdHR5cGU6IFByb3BUeXBlcy5vbmVPZiggSFRNTDVfSU5QVVRfVFlQRVMgKS5pc1JlcXVpcmVkLFxuXHRcdG5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRodG1sSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0dmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFByb3BUeXBlcy5ib29sLFxuXHRcdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XSApLFxuXHRcdG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRkYXRhU2V0OiBQcm9wVHlwZXMub2JqZWN0LFxuXHRcdG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheSxcblx0XHRoZWxwVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRoZWxwVGV4dElEOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdElucHV0TGF5b3V0OiBQcm9wVHlwZXMub2JqZWN0LFxuXHRcdGNoYW5nZUxpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcblx0fTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0dHlwZSxcblx0XHRcdG5hbWUsXG5cdFx0XHRodG1sSWQsXG5cdFx0XHRJbnB1dExheW91dCxcblx0XHRcdGNoYW5nZUxpc3RlbmVyID0gbnVsbCxcblx0XHRcdGFmdGVySW5wdXQgPSBudWxsLFxuXHRcdFx0Li4ucmVzdFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdGxldCB7XG5cdFx0XHRoZWxwVGV4dElELFxuXHRcdFx0aGVscFRleHQgPSAnJyxcblx0XHRcdGh0bWxDbGFzcyA9ICcnLFxuXHRcdFx0ZGF0YVNldCA9IHt9LFxuXHRcdFx0dmFsaWRhdGlvbnMgPSBbXSxcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRoZWxwVGV4dElEID0gaGVscFRleHRJRCA/IGhlbHBUZXh0SUQgOiBgJHsgaHRtbElkIH0taGVscC10ZXh0YDtcblx0XHRodG1sQ2xhc3MgPSB0aGlzLnByb3BzLnJlcXVpcmVkID8gYCR7IGh0bWxDbGFzcyB9IHJlcXVpcmVkYCA6IGh0bWxDbGFzcztcblx0XHQvLyBlbnN1cmUgZGF0YSBhdHRyaWJ1dGVzIGFyZSBwcm9wZXJseSBuYW1lZFxuXHRcdGRhdGFTZXQgPSBwcmVwYXJlRGF0YVNldCggZGF0YVNldCApO1xuXHRcdHZhbGlkYXRpb25zID0gQXJyYXkuaXNBcnJheSggdmFsaWRhdGlvbnMgKSA/IHZhbGlkYXRpb25zIDogWyB2YWxpZGF0aW9ucyBdO1xuXHRcdC8vIHJlbW92ZSBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIG5vdCBiZSBwYXNzZWQgdG8gaW5wdXRzXG5cdFx0bGV0IGF0dHJpYnV0ZXMgPSBjbGVhblVwSW5wdXRBdHRyaWJ1dGVzKCByZXN0ICk7XG5cdFx0Ly8gYWRkIGF0dHJpYnV0ZXMgYmFzZWQgb24gdmFsaWRhdGlvbnNcblx0XHRhdHRyaWJ1dGVzID0gYWRkVmFsaWRhdG9yc1RvQXR0cmlidXRlcyggYXR0cmlidXRlcywgdmFsaWRhdGlvbnMgKTtcblx0XHQvLyByZWR1Y2UgdmFsaWRhdGlvbnMgdG8gYSBzaW5nbGUgY2FsbGJhY2tcblx0XHR2YWxpZGF0aW9ucyA9IGNvbXBvc2VWYWxpZGF0b3JzKCAuLi52YWxpZGF0aW9ucyApO1xuXHRcdGxldCBmb3JtSW5wdXQgPSBudWxsO1xuXHRcdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0XHRjYXNlICdoaWRkZW4nIDpcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8SGlkZGVuSW5wdXRcblx0XHRcdFx0XHRcdG5hbWU9eyBuYW1lIH1cblx0XHRcdFx0XHRcdGh0bWxJZD17IGh0bWxJZCB9XG5cdFx0XHRcdFx0XHRkYXRhU2V0PXsgZGF0YVNldCB9XG5cdFx0XHRcdFx0XHR2YWxpZGF0ZT17IHZhbGlkYXRpb25zIH1cblx0XHRcdFx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgJ2NoZWNrYm94JyA6XG5cdFx0XHRcdGZvcm1JbnB1dCA9IChcblx0XHRcdFx0XHQ8Q2hlY2tib3hJbnB1dFxuXHRcdFx0XHRcdFx0bmFtZT17IG5hbWUgfVxuXHRcdFx0XHRcdFx0aHRtbElkPXsgaHRtbElkIH1cblx0XHRcdFx0XHRcdGh0bWxDbGFzcz17IGh0bWxDbGFzcyB9XG5cdFx0XHRcdFx0XHRkYXRhU2V0PXsgZGF0YVNldCB9XG5cdFx0XHRcdFx0XHRoZWxwVGV4dElEPXsgaGVscFRleHRJRCB9XG5cdFx0XHRcdFx0XHR2YWxpZGF0ZT17IHZhbGlkYXRpb25zIH1cblx0XHRcdFx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdyYWRpbycgOlxuXHRcdFx0XHRmb3JtSW5wdXQgPSAoXG5cdFx0XHRcdFx0PFJhZGlvSW5wdXRcblx0XHRcdFx0XHRcdG5hbWU9eyBuYW1lIH1cblx0XHRcdFx0XHRcdGh0bWxJZD17IGh0bWxJZCB9XG5cdFx0XHRcdFx0XHRodG1sQ2xhc3M9eyBodG1sQ2xhc3MgfVxuXHRcdFx0XHRcdFx0ZGF0YVNldD17IGRhdGFTZXQgfVxuXHRcdFx0XHRcdFx0aGVscFRleHRJRD17IGhlbHBUZXh0SUQgfVxuXHRcdFx0XHRcdFx0dmFsaWRhdGU9eyB2YWxpZGF0aW9ucyB9XG5cdFx0XHRcdFx0XHR7IC4uLmF0dHJpYnV0ZXMgfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnc2VsZWN0JyA6XG5cdFx0XHRcdGRlbGV0ZSBhdHRyaWJ1dGVzLmluaXRpYWxWYWx1ZTtcblx0XHRcdFx0Zm9ybUlucHV0ID0gKFxuXHRcdFx0XHRcdDxTZWxlY3RJbnB1dFxuXHRcdFx0XHRcdFx0bmFtZT17IG5hbWUgfVxuXHRcdFx0XHRcdFx0aHRtbElkPXsgaHRtbElkIH1cblx0XHRcdFx0XHRcdGh0bWxDbGFzcz17IGh0bWxDbGFzcyB9XG5cdFx0XHRcdFx0XHRkYXRhU2V0PXsgZGF0YVNldCB9XG5cdFx0XHRcdFx0XHRoZWxwVGV4dElEPXsgaGVscFRleHRJRCB9XG5cdFx0XHRcdFx0XHR2YWxpZGF0ZT17IHZhbGlkYXRpb25zIH1cblx0XHRcdFx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd0ZXh0YXJlYScgOlxuXHRcdFx0XHRkZWxldGUgYXR0cmlidXRlcy5pbml0aWFsVmFsdWU7XG5cdFx0XHRcdGZvcm1JbnB1dCA9IChcblx0XHRcdFx0XHQ8VGV4dGFyZWFcblx0XHRcdFx0XHRcdG5hbWU9eyBuYW1lIH1cblx0XHRcdFx0XHRcdGh0bWxJZD17IGh0bWxJZCB9XG5cdFx0XHRcdFx0XHRodG1sQ2xhc3M9eyBodG1sQ2xhc3MgfVxuXHRcdFx0XHRcdFx0ZGF0YVNldD17IGRhdGFTZXQgfVxuXHRcdFx0XHRcdFx0aGVscFRleHRJRD17IGhlbHBUZXh0SUQgfVxuXHRcdFx0XHRcdFx0dmFsaWRhdGU9eyB2YWxpZGF0aW9ucyB9XG5cdFx0XHRcdFx0XHR7IC4uLmF0dHJpYnV0ZXMgfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZGF0ZScgOlxuXHRcdFx0Y2FzZSAnbW9udGgnIDpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lLWxvY2FsJyA6XG5cdFx0XHRcdGZvcm1JbnB1dCA9IChcblx0XHRcdFx0XHQ8RGF0ZVRpbWVJbnB1dFxuXHRcdFx0XHRcdFx0bmFtZT17IG5hbWUgfVxuXHRcdFx0XHRcdFx0aHRtbElkPXsgaHRtbElkIH1cblx0XHRcdFx0XHRcdGh0bWxDbGFzcz17IGh0bWxDbGFzcyB9XG5cdFx0XHRcdFx0XHRhcmlhLWRlc2NyaWJlZGJ5PXsgaGVscFRleHRJRCB9XG5cdFx0XHRcdFx0XHR7IC4uLmRhdGFTZXQgfVxuXHRcdFx0XHRcdFx0eyAuLi5hdHRyaWJ1dGVzIH1cblx0XHRcdFx0XHRcdHsgLi4udmFsaWRhdGlvbnMgfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAndG9nZ2xlJyA6XG5cdFx0XHRcdGNvbnN0IGNoZWNrZWQgPSAhISBhdHRyaWJ1dGVzLmluaXRpYWxWYWx1ZTtcblx0XHRcdFx0ZGVsZXRlIGF0dHJpYnV0ZXMuaW5pdGlhbFZhbHVlO1xuXHRcdFx0XHRkZWxldGUgYXR0cmlidXRlcy5pbnB1dFdpZHRoO1xuXHRcdFx0XHRmb3JtSW5wdXQgPSAoXG5cdFx0XHRcdFx0PFRvZ2dsZUlucHV0XG5cdFx0XHRcdFx0XHRuYW1lPXsgbmFtZSB9XG5cdFx0XHRcdFx0XHRjaGVja2VkPXsgY2hlY2tlZCB9XG5cdFx0XHRcdFx0XHRodG1sSWQ9eyBodG1sSWQgfVxuXHRcdFx0XHRcdFx0aHRtbENsYXNzPXsgaHRtbENsYXNzIH1cblx0XHRcdFx0XHRcdGFyaWEtZGVzY3JpYmVkYnk9eyBoZWxwVGV4dElEIH1cblx0XHRcdFx0XHRcdHsgLi4uZGF0YVNldCB9XG5cdFx0XHRcdFx0XHR7IC4uLmF0dHJpYnV0ZXMgfVxuXHRcdFx0XHRcdFx0eyAuLi52YWxpZGF0aW9ucyB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdFx0aGVscFRleHQgPSAnJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0IDpcblx0XHRcdFx0ZGVsZXRlIGF0dHJpYnV0ZXMuaW5pdGlhbFZhbHVlO1xuXHRcdFx0XHRmb3JtSW5wdXQgPSAoXG5cdFx0XHRcdFx0PFRleHRJbnB1dFxuXHRcdFx0XHRcdFx0dHlwZT17IHR5cGUgfVxuXHRcdFx0XHRcdFx0bmFtZT17IG5hbWUgfVxuXHRcdFx0XHRcdFx0aHRtbElkPXsgaHRtbElkIH1cblx0XHRcdFx0XHRcdGh0bWxDbGFzcz17IGh0bWxDbGFzcyB9XG5cdFx0XHRcdFx0XHRkYXRhU2V0PXsgZGF0YVNldCB9XG5cdFx0XHRcdFx0XHRoZWxwVGV4dElEPXsgaGVscFRleHRJRCB9XG5cdFx0XHRcdFx0XHR2YWxpZGF0ZT17IHZhbGlkYXRpb25zIH1cblx0XHRcdFx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHR9XG5cdFx0Zm9ybUlucHV0ID0gYWZ0ZXJJbnB1dCA/IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgJ2VlLWFmdGVyLWlucHV0LXdyYXBwZXInIH0+XG5cdFx0XHRcdHsgZm9ybUlucHV0IH1cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyAnZWUtYWZ0ZXItaW5wdXQtZGl2JyB9PnsgYWZ0ZXJJbnB1dCB9PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpIDogZm9ybUlucHV0O1xuXHRcdGNvbnN0IGZvcm1MaXN0ZW5lciA9IGlzRnVuY3Rpb24oIGNoYW5nZUxpc3RlbmVyICkgPyAoXG5cdFx0XHQ8T25DaGFuZ2UgbmFtZT17IG5hbWUgfT5cblx0XHRcdFx0eyBjaGFuZ2VMaXN0ZW5lciB9XG5cdFx0XHQ8L09uQ2hhbmdlPlxuXHRcdCkgOiBudWxsO1xuXHRcdHJldHVybiBJbnB1dExheW91dCA/IChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PElucHV0TGF5b3V0XG5cdFx0XHRcdFx0aW5wdXROYW1lPXsgbmFtZSB9XG5cdFx0XHRcdFx0Zm9ybUlucHV0PXsgZm9ybUlucHV0IH1cblx0XHRcdFx0XHRoZWxwVGV4dElEPXsgaGVscFRleHRJRCB9XG5cdFx0XHRcdFx0aGVscFRleHQ9eyBoZWxwVGV4dCB9XG5cdFx0XHRcdC8+XG5cdFx0XHRcdHsgZm9ybUxpc3RlbmVyIH1cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KSA6IChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PERlZmF1bHRJbnB1dExheW91dFxuXHRcdFx0XHRcdGlucHV0TmFtZT17IG5hbWUgfVxuXHRcdFx0XHRcdGZvcm1JbnB1dD17IGZvcm1JbnB1dCB9XG5cdFx0XHRcdFx0aGVscFRleHRJRD17IGhlbHBUZXh0SUQgfVxuXHRcdFx0XHRcdGhlbHBUZXh0PXsgaGVscFRleHQgfVxuXHRcdFx0XHQvPlxuXHRcdFx0XHR7IGZvcm1MaXN0ZW5lciB9XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdCk7XG5cdH1cbn1cbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJ3JlYWN0LWZpbmFsLWZvcm0nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBnZW5lcmF0ZXMgYW4gSFRNTDUgdGV4dCB2YXJpYW50IDxpbnB1dD5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxJZFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFTZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJlbmRlcmVkIGRhdGUgbmFtZSBmb3JtIHJvd1xuICovXG5leHBvcnQgY29uc3QgSGlkZGVuSW5wdXQgPSAoIHtcblx0bmFtZSxcblx0aHRtbElkLFxuXHRkYXRhU2V0LFxuXHQuLi5hdHRyaWJ1dGVzXG59ICkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxGaWVsZFxuXHRcdFx0Y29tcG9uZW50PVwiaW5wdXRcIlxuXHRcdFx0dHlwZT1cImhpZGRlblwiXG5cdFx0XHRuYW1lPXsgbmFtZSB9XG5cdFx0XHRpZD17IGh0bWxJZCB9XG5cdFx0XHR7IC4uLmRhdGFTZXQgfVxuXHRcdFx0eyAuLi5hdHRyaWJ1dGVzIH1cblx0XHQvPlxuXHQpO1xufTtcblxuSGlkZGVuSW5wdXQucHJvcFR5cGVzID0ge1xuXHRuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cdGRhdGFTZXQ6IFByb3BUeXBlcy5vYmplY3QsXG59O1xuXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZXNwcmVzc28tZWRpdG9yXCI6XCJlc3ByZXNzby1lZGl0b3JcIixcImVlLWlubGluZS1lZGl0LXRleHRcIjpcImVlLWlubGluZS1lZGl0LXRleHRcIixcImVlLWlubGluZS1lZGl0LWlucHV0XCI6XCJlZS1pbmxpbmUtZWRpdC1pbnB1dFwiLFwiZm9ybS1jb250cm9sXCI6XCJmb3JtLWNvbnRyb2xcIixcImVlLWlubGluZS1lZGl0LWlucHV0LW51bWJlclwiOlwiZWUtaW5saW5lLWVkaXQtaW5wdXQtbnVtYmVyXCIsXCJlZS1pbmxpbmUtZWRpdC1sYWJlbFwiOlwiZWUtaW5saW5lLWVkaXQtbGFiZWxcIixcImNvbXBvbmVudHMtdG9vbHRpcFwiOlwiY29tcG9uZW50cy10b29sdGlwXCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNyZWF0ZVJlZiwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgRU5URVIsIEVTQ0FQRSwgU1BBQ0UgfSBmcm9tICdAd29yZHByZXNzL2tleWNvZGVzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAnLi9pbmxpbmUtZWRpdC1pbnB1dC5jc3MnO1xuaW1wb3J0IFN1Ym1pdHRpbmdOb3RpY2UgZnJvbSAnLi4vYmFzZS9zdWJtaXR0aW5nLW5vdGljZSc7XG5cbi8qKlxuICogSW5saW5lRWRpdElucHV0XG4gKiBkaXNwbGF5cyBhIHRleHQgc3BhbiB0aGF0IHdoZW4gY2xpY2tlZCxcbiAqIGNvbnZlcnRzIGludG8gYSB0ZXh0IGlucHV0IG9yIHRleHRhcmVhIHRvIGFsbG93IHRoZSB0ZXh0IHRvIGJlIGVkaXRlZFxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25DaGFuZ2UgICAgXHRjYWxsYmFjayBmb3Igc2V0dGluZyB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB2YWx1ZSBcdGN1cnJlbnQgdmFsdWUgZm9yIGlucHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBcdFx0XHR0ZXh0IGlucHV0IChkZWZhdWx0KSBvciB0ZXh0YXJlYVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlVHlwZSBcdFx0ZGF0YSB0eXBlIGZvciB2YWx1ZVxuICovXG5leHBvcnQgY2xhc3MgSW5saW5lRWRpdElucHV0IGV4dGVuZHMgQ29tcG9uZW50IHtcblx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRodG1sSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblx0XHR2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdF0gKS5pc1JlcXVpcmVkLFxuXHRcdHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0bGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0dmFsdWVUeXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdHZhbHVlRm9ybWF0dGVyOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRmb3JtYXR0ZXJTZXR0aW5nczogUHJvcFR5cGVzLm9iamVjdCxcblx0XHRub3RpY2VTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblx0fTtcblxuXHRzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuXHRcdHR5cGU6ICcnLFxuXHRcdHZhbHVlVHlwZTogJ3N0cmluZycsXG5cdFx0dmFsdWVGb3JtYXR0ZXI6IG51bGwsXG5cdFx0Zm9ybWF0dGVyU2V0dGluZ3M6IHt9LFxuXHRcdG5vdGljZVN0eWxlOiB7fSxcblx0XHRsYWJlbDogJycsXG5cdH07XG5cblx0Y29uc3RydWN0b3IoIHByb3BzICkge1xuXHRcdHN1cGVyKCBwcm9wcyApO1xuXHRcdHRoaXMuaW5wdXQgPSBjcmVhdGVSZWYoKTtcblx0XHR0aGlzLnN0YXRlID0geyBzYXZpbmc6IGZhbHNlIH07XG5cdH1cblxuXHRjb21wb25lbnREaWRNb3VudCgpIHtcblx0XHR0aGlzLnNldFN0YXRlKFxuXHRcdFx0e1xuXHRcdFx0XHRlZGl0aW5nOiBmYWxzZSxcblx0XHRcdFx0b3JpZ1ZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuXHRcdFx0XHR2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSxcblx0XHRcdFx0b25DaGFuZ2U6IHRoaXMucHJvcHMub25DaGFuZ2UsXG5cdFx0XHRcdHNhdmluZzogZmFsc2UsXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiB1c2VkIHRvIGRldGVjdCBjaGFuZ2VzIGFuZCB3aGV0aGVyIHRvIGZvY3VzIHRoZSBpbnB1dCBvciBlbmQgZWRpdGluZ1xuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IHByZXZQcm9wc1xuXHQgKiBAcGFyYW0ge09iamVjdH0gcHJldlN0YXRlXG5cdCAqL1xuXHRjb21wb25lbnREaWRVcGRhdGUgPSBhc3luYyAoIHByZXZQcm9wcywgcHJldlN0YXRlICkgPT4ge1xuXHRcdGlmIChcblx0XHRcdCEgcHJldlByb3BzLnNhdmluZyAmJlxuXHRcdFx0ISB0aGlzLnN0YXRlLnNhdmluZyAmJlxuXHRcdFx0dHlwZW9mIHByZXZTdGF0ZS52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiZcblx0XHRcdHByZXZTdGF0ZS52YWx1ZSA9PT0gdGhpcy5zdGF0ZS52YWx1ZSAmJlxuXHRcdFx0cHJldlByb3BzLnZhbHVlICE9PSB0aGlzLnByb3BzLnZhbHVlXG5cdFx0KSB7XG5cdFx0XHQvLyB2YWx1ZSB3YXMgY2hhbmdlZCBleHRlcm5hbGx5LCBzbyB1cGRhdGUgaXRcblx0XHRcdHRoaXMuc2V0U3RhdGUoIHtcblx0XHRcdFx0ZWRpdGluZzogdGhpcy5wcm9wcy52YWx1ZSA9PT0gJycsXG5cdFx0XHRcdHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuXHRcdFx0fSApO1xuXHRcdH0gZWxzZSBpZiAoIHRoaXMuc3RhdGUuZWRpdGluZyApIHtcblx0XHRcdGlmICggISBwcmV2U3RhdGUuZWRpdGluZyApIHtcblx0XHRcdFx0Ly8gZm9jdXMgb24gaW5wdXQgd2hlbiBlZGl0aW5nIGJlZ2luc1xuXHRcdFx0XHR0aGlzLmlucHV0LmN1cnJlbnQuZm9jdXMoKTtcblx0XHRcdH0gZWxzZSBpZiAoIHByZXZQcm9wcy52YWx1ZSAhPT0gdGhpcy5wcm9wcy52YWx1ZSApIHtcblx0XHRcdFx0Ly8gZWRpdGluZyBpcyBjb21wbGV0ZVxuXHRcdFx0XHRhd2FpdCB0aGlzLmRvbmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIHNldHMgZWRpdGluZyBtb2RlIHRvIHRydWVcblx0ICogQGZ1bmN0aW9uXG5cdCAqL1xuXHRlZGl0ID0gKCkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoIHsgZWRpdGluZzogdHJ1ZSB9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIHNldHMgZWRpdGluZyBtb2RlIHRvIGZhbHNlIGFuZCByZXZlcnRzIGNoYW5nZXMgbWFkZSB0byBpbnB1dCB2YWx1ZVxuXHQgKiBAZnVuY3Rpb25cblx0ICovXG5cdGNhbmNlbCA9ICgpID0+IHtcblx0XHR0aGlzLnNldFN0YXRlKCAoIHByZXZTdGF0ZSApID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGVkaXRpbmc6IGZhbHNlLFxuXHRcdFx0XHR2YWx1ZTogcHJldlN0YXRlLm9yaWdWYWx1ZSxcblx0XHRcdH07XG5cdFx0fSApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBzZXRzIGVkaXRpbmcgbW9kZSB0byBmYWxzZVxuXHQgKiBAZnVuY3Rpb25cblx0ICovXG5cdGRvbmUgPSBhc3luYyAoKSA9PiB7XG5cdFx0dGhpcy5zZXRTdGF0ZSggeyBzYXZpbmc6IHRydWUgfSApO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRhd2FpdCB0aGlzLnN0YXRlLm9uQ2hhbmdlKCB0aGlzLnN0YXRlLnZhbHVlIClcblx0XHQpLnRoZW4oICgpID0+IHtcblx0XHRcdHRoaXMuc2V0U3RhdGUoIHtcblx0XHRcdFx0ZWRpdGluZzogdGhpcy5zdGF0ZS52YWx1ZSA9PT0gJycsXG5cdFx0XHRcdHNhdmluZzogZmFsc2UsXG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBkZXRlY3RzIGtleWJvYXJkIGNvbW1hbmRzIHRvIGVudGVyIGVkaXRpbmdcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0a2V5U2VsZWN0ID0gKCBldmVudCApID0+IHtcblx0XHRpZiAoIGV2ZW50LmtleUNvZGUgPT09IEVOVEVSIHx8IGV2ZW50LmtleUNvZGUgPT09IFNQQUNFICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0dGhpcy5lZGl0KCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBkZXRlY3RzIGtleWJvYXJkIGNvbW1hbmRzIHRvIGV4aXQgZWRpdGluZ1xuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHRrZXlEb3duSW5wdXQgPSBhc3luYyAoIGV2ZW50ICkgPT4ge1xuXHRcdGlmICggZXZlbnQua2V5Q29kZSA9PT0gRU5URVIgKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRhd2FpdCB0aGlzLmRvbmUoKTtcblx0XHR9IGVsc2UgaWYgKCBldmVudC5rZXlDb2RlID09PSBFU0NBUEUgKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHR0aGlzLmNhbmNlbCgpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogZGV0ZWN0cyB0ZXh0IGNoYW5nZXMgYW5kIHVwZGF0ZXMgaW5wdXQgdmFsdWVcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0dGV4dENoYW5nZSA9ICggZXZlbnQgKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0ZXZlbnQgJiZcblx0XHRcdGV2ZW50LnRhcmdldCAmJlxuXHRcdFx0dHlwZW9mIGV2ZW50LnRhcmdldC52YWx1ZSAhPT0gJ3VuZGVmaW5lZCdcblx0XHQpIHtcblx0XHRcdHRoaXMuc2V0U3RhdGUoIHsgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZSB9ICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiByZW5kZXJzIHRoZSBpbnB1dCBpbiBlZGl0IG1vZGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGh0bWxJZCBcdFx0XHRpbnB1dCBpZGVudGlmaWVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdmFsdWUgXHRjdXJyZW50IHZhbHVlIGZvciBpbnB1dFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBcdFx0XHR0ZXh0IGlucHV0IG9yIHRleHRhcmVhXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVR5cGUgXHRcdGRhdGEgdHlwZSBmb3IgdmFsdWVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIFx0XHRcdGRpc3BsYXllZCB3aGVuIGVkaXRpbmdcblx0ICogQHBhcmFtIHtPYmplY3R9IGlucHV0UHJvcHNcdFx0YWRkaXRpb25hbCBwYXNzZWQgcHJvcHNcblx0ICogQHBhcmFtIHtPYmplY3R9IG5vdGljZVN0eWxlXG5cdCAqIEByZXR1cm4ge09iamVjdH1cdFx0XHRcdFx0dGhlIHJlbmRlcmVkIGlucHV0XG5cdCAqL1xuXHRlZGl0Q29tcG9uZW50ID0gKFxuXHRcdGh0bWxJZCxcblx0XHR2YWx1ZSxcblx0XHR0eXBlLFxuXHRcdHZhbHVlVHlwZSxcblx0XHRsYWJlbCxcblx0XHRpbnB1dFByb3BzLFxuXHRcdG5vdGljZVN0eWxlXG5cdCkgPT4ge1xuXHRcdGNvbnN0IGlucHV0VmFsdWUgPSB0eXBlb2YgdGhpcy5zdGF0ZS52YWx1ZSA9PT0gJ3N0cmluZycgfHxcblx0XHR0eXBlb2YgdGhpcy5zdGF0ZS52YWx1ZSA9PT0gJ251bWJlcicgP1xuXHRcdFx0dGhpcy5zdGF0ZS52YWx1ZSA6XG5cdFx0XHQnJztcblx0XHRjb25zdCBodG1sQ2xhc3MgPSBjbGFzc05hbWVzKFxuXHRcdFx0J2VlLWlubGluZS1pbnB1dCcsXG5cdFx0XHQnZm9ybS1jb250cm9sJyxcblx0XHRcdHtcblx0XHRcdFx0J2VlLWlubGluZS1lZGl0LWlucHV0LW51bWJlcic6IHZhbHVlVHlwZSA9PT0gJ251bWJlcicsXG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0Y29uc3QgaW5wdXQgPSB0eXBlID09PSAndGV4dGFyZWEnID8gKFxuXHRcdFx0PHRleHRhcmVhXG5cdFx0XHRcdHsgLi4uaW5wdXRQcm9wcyB9XG5cdFx0XHRcdHJlZj17IHRoaXMuaW5wdXQgfVxuXHRcdFx0XHRpZD17IGh0bWxJZCB9XG5cdFx0XHRcdGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9XG5cdFx0XHRcdG9uQmx1cj17IHRoaXMuZG9uZSB9XG5cdFx0XHRcdG9uSW5wdXQ9eyB0aGlzLnRleHRDaGFuZ2UgfVxuXHRcdFx0XHRvbktleURvd249eyB0aGlzLmtleURvd25JbnB1dCB9XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZT17IGlucHV0VmFsdWUgfVxuXHRcdFx0Lz5cblx0XHQpIDogKFxuXHRcdFx0PGlucHV0XG5cdFx0XHRcdHsgLi4uaW5wdXRQcm9wcyB9XG5cdFx0XHRcdHJlZj17IHRoaXMuaW5wdXQgfVxuXHRcdFx0XHRpZD17IGh0bWxJZCB9XG5cdFx0XHRcdHR5cGU9eyB0eXBlIH1cblx0XHRcdFx0Y2xhc3NOYW1lPXsgaHRtbENsYXNzIH1cblx0XHRcdFx0b25CbHVyPXsgdGhpcy5kb25lIH1cblx0XHRcdFx0b25JbnB1dD17IHRoaXMudGV4dENoYW5nZSB9XG5cdFx0XHRcdG9uS2V5RG93bj17IHRoaXMua2V5RG93bklucHV0IH1cblx0XHRcdFx0ZGVmYXVsdFZhbHVlPXsgaW5wdXRWYWx1ZSB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0cmV0dXJuIGxhYmVsID8gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHR7IHRoaXMuc3Bpbm5lciggbm90aWNlU3R5bGUgKSB9XG5cdFx0XHRcdDxsYWJlbFxuXHRcdFx0XHRcdGh0bWxGb3I9eyBodG1sSWQgfVxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImVlLWlubGluZS1lZGl0LWxhYmVsXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHsgbGFiZWwgfVxuXHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHR7IGlucHV0IH1cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KSA6IGlucHV0O1xuXHR9O1xuXG5cdC8qKlxuXHQgKiByZW5kZXJzIHRoZSB0ZXh0IGluIGRpc3BsYXkgbW9kZVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSB2YWx1ZUZvcm1hdHRlciBmb3JtYXR0aW5nIGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtYXR0ZXJTZXR0aW5nc1xuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHNwYW4gdGFnXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBub3RpY2VTdHlsZVxuXHQgKi9cblx0ZGlzcGxheUNvbXBvbmVudCA9ICggdmFsdWVGb3JtYXR0ZXIsIGZvcm1hdHRlclNldHRpbmdzLCBub3RpY2VTdHlsZSApID0+IHtcblx0XHRjb25zdCB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlRm9ybWF0dGVyICkgP1xuXHRcdFx0dmFsdWVGb3JtYXR0ZXIoIHRoaXMuc3RhdGUudmFsdWUsIGZvcm1hdHRlclNldHRpbmdzICkgOlxuXHRcdFx0dGhpcy5zdGF0ZS52YWx1ZTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHR7IHRoaXMuc3Bpbm5lciggbm90aWNlU3R5bGUgKSB9XG5cdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0dGFiSW5kZXg9XCIwXCJcblx0XHRcdFx0XHRvbkNsaWNrPXsgdGhpcy5lZGl0IH1cblx0XHRcdFx0XHRvbkZvY3VzPXsgdGhpcy5lZGl0IH1cblx0XHRcdFx0XHRvbktleURvd249eyB0aGlzLmtleVNlbGVjdCB9XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtaW5saW5lLWVkaXQtdGV4dCBjbGlja2FibGVcIlxuXHRcdFx0XHRcdGFyaWEtbGFiZWw9eyBfXyggJ2NsaWNrIHRvIGVkaXQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0eyB2YWx1ZSB9XG5cdFx0XHRcdDwvc3Bhbj5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IG5vdGljZVN0eWxlXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgc3Bpbm5lclxuXHQgKi9cblx0c3Bpbm5lciA9ICggbm90aWNlU3R5bGUgKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTdWJtaXR0aW5nTm90aWNlXG5cdFx0XHRcdHN1Ym1pdHRpbmc9eyB0aGlzLnN0YXRlLnNhdmluZyB9XG5cdFx0XHRcdHN1Ym1pdHRpbmdUZXh0PXsgX18oICdzYXZpbmcnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRzdHlsZT17IG5vdGljZVN0eWxlIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0aHRtbElkLFxuXHRcdFx0dmFsdWUsXG5cdFx0XHR0eXBlLFxuXHRcdFx0dmFsdWVUeXBlLFxuXHRcdFx0dmFsdWVGb3JtYXR0ZXIsXG5cdFx0XHRmb3JtYXR0ZXJTZXR0aW5ncyxcblx0XHRcdG5vdGljZVN0eWxlLFxuXHRcdFx0bGFiZWwsXG5cdFx0XHQuLi5pbnB1dFByb3BzXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0ZGVsZXRlIGlucHV0UHJvcHMub25DaGFuZ2U7XG5cdFx0cmV0dXJuIHRoaXMuc3RhdGUuZWRpdGluZyA/XG5cdFx0XHR0aGlzLmVkaXRDb21wb25lbnQoXG5cdFx0XHRcdGh0bWxJZCxcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdHZhbHVlVHlwZSxcblx0XHRcdFx0bGFiZWwsXG5cdFx0XHRcdGlucHV0UHJvcHMsXG5cdFx0XHRcdG5vdGljZVN0eWxlXG5cdFx0XHQpIDpcblx0XHRcdHRoaXMuZGlzcGxheUNvbXBvbmVudChcblx0XHRcdFx0dmFsdWVGb3JtYXR0ZXIsXG5cdFx0XHRcdGZvcm1hdHRlclNldHRpbmdzLFxuXHRcdFx0XHRub3RpY2VTdHlsZSxcblx0XHRcdCk7XG5cdH1cbn1cbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IE9wdGlvbkNoZWNrZWRTdGF0ZSB9IGZyb20gJy4vYmFzZS9vcHRpb24tY2hlY2tlZC1zdGF0ZSc7XG5pbXBvcnQgeyBPcHRpb25JbnB1dHMgfSBmcm9tICcuL2Jhc2Uvb3B0aW9uLWlucHV0cyc7XG5pbXBvcnQgeyBPcHRpb25MYWJlbFNpemUgfSBmcm9tICcuL2Jhc2Uvb3B0aW9uLWxhYmVsLXNpemUnO1xuXG4vKipcbiAqIGdlbmVyYXRlcyBvbmUgb3IgbW9yZSBodG1sIHJhZGlvIGlucHV0c1xuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxJZFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkNoYW5nZVxuICogQHBhcmFtIHtib29sZWFufSBidG5Hcm91cFxuICogQHBhcmFtIHtzdHJpbmd9IGhlbHBUZXh0SURcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhU2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRXaWR0aFxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqIEByZXR1cm4ge3N0cmluZ30gcmVuZGVyZWQgZGF0ZSBuYW1lIGZvcm0gcm93XG4gKi9cbmV4cG9ydCBjbGFzcyBSYWRpb0lucHV0IGV4dGVuZHMgQ29tcG9uZW50IHtcblx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRodG1sSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0dmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdF0gKSxcblx0XHRvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXksXG5cdFx0b25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGJ0bkdyb3VwOiBQcm9wVHlwZXMuYm9vbCxcblx0XHRpbnB1dFdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdGhlbHBUZXh0SUQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0ZGF0YVNldDogUHJvcFR5cGVzLm9iamVjdCxcblx0fTtcblxuXHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0c3VwZXIoIHByb3BzICk7XG5cdFx0dGhpcy5zdGF0ZSA9IHtcblx0XHRcdGNoZWNrZWQ6IE9wdGlvbkNoZWNrZWRTdGF0ZShcblx0XHRcdFx0cHJvcHMuaHRtbElkLFxuXHRcdFx0XHRwcm9wcy5vcHRpb25zLFxuXHRcdFx0XHRwcm9wcy5pbml0aWFsVmFsdWUsXG5cdFx0XHQpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0dG9nZ2xlQ2hlY2tlZCA9ICggZXZlbnQgKSA9PiB7XG5cdFx0aWYgKCBldmVudC50YXJnZXQgJiZcblx0XHRcdGV2ZW50LnRhcmdldC5pZCAmJlxuXHRcdFx0ZXZlbnQudGFyZ2V0LmNoZWNrZWQgIT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgY2hlY2tlZCA9IE9wdGlvbkNoZWNrZWRTdGF0ZShcblx0XHRcdFx0dGhpcy5wcm9wcy5odG1sSWQsXG5cdFx0XHRcdHRoaXMucHJvcHMub3B0aW9ucyxcblx0XHRcdFx0dGhpcy5wcm9wcy5pbml0aWFsVmFsdWUsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpO1xuXHRcdFx0Y2hlY2tlZFsgZXZlbnQudGFyZ2V0LmlkIF0gPSBldmVudC50YXJnZXQuY2hlY2tlZDtcblx0XHRcdHRoaXMuc2V0U3RhdGUoIHsgY2hlY2tlZCB9ICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0aHRtbElkLFxuXHRcdFx0aHRtbENsYXNzLFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdGhlbHBUZXh0SUQsXG5cdFx0XHRidG5Hcm91cCA9IHRydWUsXG5cdFx0XHRpbnB1dFdpZHRoID0gJycsXG5cdFx0XHQuLi5hdHRyaWJ1dGVzXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cblx0XHRjb25zdCBsYWJlbENsYXNzID0gYnRuR3JvdXAgP1xuXHRcdFx0J2J0biBidG4tcHJpbWFyeScgOlxuXHRcdFx0J2VlLXJhZGlvLWxhYmVsLWFmdGVyJyArIE9wdGlvbkxhYmVsU2l6ZSggb3B0aW9ucyApO1xuXHRcdGxldCBkaXZDbGFzcyA9IGJ0bkdyb3VwID8gJ2J0bi1ncm91cCcgOiAnZWUtY2hlY2tib3gtZ3JvdXAnO1xuXHRcdGRpdkNsYXNzID0gaW5wdXRXaWR0aCA/XG5cdFx0XHRgJHsgZGl2Q2xhc3MgfSBlZS1pbnB1dC13aWR0aC0keyBpbnB1dFdpZHRoIH1gIDpcblx0XHRcdGRpdkNsYXNzO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGRpdkNsYXNzIH0+XG5cdFx0XHRcdDxPcHRpb25JbnB1dHNcblx0XHRcdFx0XHR0eXBlPVwicmFkaW9cIlxuXHRcdFx0XHRcdG5hbWU9eyBuYW1lIH1cblx0XHRcdFx0XHRjaGVja2VkU3RhdGU9eyB0aGlzLnN0YXRlLmNoZWNrZWQgfVxuXHRcdFx0XHRcdGh0bWxJZD17IGh0bWxJZCB9XG5cdFx0XHRcdFx0aHRtbENsYXNzPXsgaHRtbENsYXNzIH1cblx0XHRcdFx0XHRsYWJlbENsYXNzPXsgbGFiZWxDbGFzcyB9XG5cdFx0XHRcdFx0b3B0aW9ucz17IG9wdGlvbnMgfVxuXHRcdFx0XHRcdG9uQ2xpY2s9eyB0aGlzLnRvZ2dsZUNoZWNrZWQgfVxuXHRcdFx0XHRcdGhlbHBUZXh0SUQ9eyBoZWxwVGV4dElEIH1cblx0XHRcdFx0XHR7IC4uLmF0dHJpYnV0ZXMgfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEZpZWxkIH0gZnJvbSAncmVhY3QtZmluYWwtZm9ybSc7XG5cbi8qKlxuICogZ2VuZXJhdGVzIGFuIGh0bWwgPHNlbGVjdD4gaW5wdXRcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtBcnJheX0gb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGhlbHBUZXh0SURcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhU2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRXaWR0aFxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqIEByZXR1cm4ge3N0cmluZ30gcmVuZGVyZWQgZGF0ZSBuYW1lIGZvcm0gcm93XG4gKi9cbmV4cG9ydCBjb25zdCBTZWxlY3RJbnB1dCA9ICgge1xuXHRodG1sSWQsXG5cdGh0bWxDbGFzcyxcblx0b3B0aW9ucyxcblx0aGVscFRleHRJRCxcblx0ZGF0YVNldCxcblx0aW5wdXRXaWR0aCA9ICcnLFxuXHQuLi5hdHRyaWJ1dGVzXG59ICkgPT4ge1xuXHRvcHRpb25zID0gaXNBcnJheSggb3B0aW9ucyApID8gb3B0aW9ucyA6IFtdO1xuXHRjb25zdCBvcHRpb25MaXN0ID0gb3B0aW9ucy5tYXAoICggb3B0aW9uLCBpbmRleCApID0+IChcblx0XHQ8b3B0aW9uIGtleT17IGluZGV4IH0gdmFsdWU9eyBvcHRpb24udmFsdWUgfT5cblx0XHRcdHsgb3B0aW9uLmxhYmVsIH1cblx0XHQ8L29wdGlvbj5cblx0KSApO1xuXHRodG1sQ2xhc3MgPSBpbnB1dFdpZHRoID9cblx0XHRgJHsgaHRtbENsYXNzIH0gZWUtaW5wdXQtd2lkdGgtJHsgaW5wdXRXaWR0aCB9YCA6XG5cdFx0aHRtbENsYXNzO1xuXHRyZXR1cm4gKFxuXHRcdDxGaWVsZFxuXHRcdFx0Y29tcG9uZW50PVwic2VsZWN0XCJcblx0XHRcdGlkPXsgaHRtbElkIH1cblx0XHRcdGNsYXNzTmFtZT17IGAkeyBodG1sQ2xhc3MgfSBmb3JtLWNvbnRyb2xgIH1cblx0XHRcdGFyaWEtZGVzY3JpYmVkYnk9eyBoZWxwVGV4dElEIH1cblx0XHRcdHsgLi4uZGF0YVNldCB9XG5cdFx0XHR7IC4uLmF0dHJpYnV0ZXMgfVxuXHRcdD5cblx0XHRcdHsgb3B0aW9uTGlzdCB9XG5cdFx0PC9GaWVsZD5cblx0KTtcbn07XG5cblNlbGVjdElucHV0LnByb3BUeXBlcyA9IHtcblx0aHRtbElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0dmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcblx0b3B0aW9uczogUHJvcFR5cGVzLmFycmF5LFxuXHRvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cdGhlbHBUZXh0SUQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGRhdGFTZXQ6IFByb3BUeXBlcy5vYmplY3QsXG5cdGlucHV0V2lkdGg6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJ3JlYWN0LWZpbmFsLWZvcm0nO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgSFRNTDVfSU5QVVRfVFlQRVNfVEVYVCB9IGZyb20gJy4vYmFzZS9jb25zdGFudHMnO1xuXG4vKipcbiAqIGdlbmVyYXRlcyBhbiBIVE1MNSB0ZXh0IHZhcmlhbnQgPGlucHV0PlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWxwVGV4dElEXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVNldFxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBpbnB1dFdpZHRoXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogQHJldHVybiB7c3RyaW5nfSByZW5kZXJlZCBkYXRlIG5hbWUgZm9ybSByb3dcbiAqL1xuZXhwb3J0IGNvbnN0IFRleHRJbnB1dCA9ICgge1xuXHR0eXBlID0gJ3RleHQnLFxuXHRodG1sSWQsXG5cdGh0bWxDbGFzcyxcblx0aGVscFRleHRJRCxcblx0ZGF0YVNldCxcblx0aW5wdXRXaWR0aCA9ICcnLFxuXHQuLi5hdHRyaWJ1dGVzXG59ICkgPT4ge1xuXHRodG1sQ2xhc3MgPSBpbnB1dFdpZHRoID9cblx0XHRgJHsgaHRtbENsYXNzIH0gZWUtaW5wdXQtd2lkdGgtJHsgaW5wdXRXaWR0aCB9YCA6XG5cdFx0aHRtbENsYXNzO1xuXHRyZXR1cm4gKFxuXHRcdDxGaWVsZFxuXHRcdFx0Y29tcG9uZW50PVwiaW5wdXRcIlxuXHRcdFx0dHlwZT17IHR5cGUgfVxuXHRcdFx0aWQ9eyBodG1sSWQgfVxuXHRcdFx0Y2xhc3NOYW1lPXsgYCR7IGh0bWxDbGFzcyB9IGZvcm0tY29udHJvbGAgfVxuXHRcdFx0YXJpYS1kZXNjcmliZWRieT17IGhlbHBUZXh0SUQgfVxuXHRcdFx0eyAuLi5kYXRhU2V0IH1cblx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0Lz5cblx0KTtcbn07XG5cblRleHRJbnB1dC5wcm9wVHlwZXMgPSB7XG5cdHR5cGU6IFByb3BUeXBlcy5vbmVPZiggSFRNTDVfSU5QVVRfVFlQRVNfVEVYVCApLFxuXHRodG1sSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cdGhlbHBUZXh0SUQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGRhdGFTZXQ6IFByb3BUeXBlcy5vYmplY3QsXG5cdGlucHV0V2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEZpZWxkIH0gZnJvbSAncmVhY3QtZmluYWwtZm9ybSc7XG5cbi8qKlxuICogZ2VuZXJhdGVzIGFuIGh0bWwgPHRleHRhcmVhPiBpbnB1dFxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxJZFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IGhlbHBUZXh0SURcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhU2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRXaWR0aFxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqIEByZXR1cm4ge3N0cmluZ30gcmVuZGVyZWQgZGF0ZSBuYW1lIGZvcm0gcm93XG4gKi9cbmV4cG9ydCBjb25zdCBUZXh0YXJlYSA9ICgge1xuXHRodG1sSWQsXG5cdGh0bWxDbGFzcyxcblx0aGVscFRleHRJRCxcblx0ZGF0YVNldCxcblx0aW5wdXRXaWR0aCA9ICcnLFxuXHQuLi5hdHRyaWJ1dGVzXG59ICkgPT4ge1xuXHRodG1sQ2xhc3MgPSBpbnB1dFdpZHRoID9cblx0XHRgJHsgaHRtbENsYXNzIH0gZWUtaW5wdXQtd2lkdGgtJHsgaW5wdXRXaWR0aCB9YCA6XG5cdFx0aHRtbENsYXNzO1xuXHRyZXR1cm4gKFxuXHRcdDxGaWVsZFxuXHRcdFx0Y29tcG9uZW50PVwidGV4dGFyZWFcIlxuXHRcdFx0aWQ9eyBodG1sSWQgfVxuXHRcdFx0Y2xhc3NOYW1lPXsgYCR7IGh0bWxDbGFzcyB9IGZvcm0tY29udHJvbGAgfVxuXHRcdFx0YXJpYS1kZXNjcmliZWRieT17IGhlbHBUZXh0SUQgfVxuXHRcdFx0eyAuLi5kYXRhU2V0IH1cblx0XHRcdHsgLi4uYXR0cmlidXRlcyB9XG5cdFx0Lz5cblx0KTtcbn07XG5cblRleHRhcmVhLnByb3BUeXBlcyA9IHtcblx0aHRtbElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0dmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcblx0b25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXHRoZWxwVGV4dElEOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRkYXRhU2V0OiBQcm9wVHlwZXMub2JqZWN0LFxuXHRpbnB1dFdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tICdyZWFjdC1maW5hbC1mb3JtJztcbmltcG9ydCB7IENoZWNrYm94Q29udHJvbCwgVG9nZ2xlQ29udHJvbCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5cbi8qKlxuICogY29ubmVjdHMgYSBXUCBDaGVja2JveENvbnRyb2wgb3IgVG9nZ2xlQ29udHJvbCB3aXRoIFJlYWN0LUZpbmFsLUZvcm1cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICogQHBhcmFtIHtib29sZWFufSBjaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbElkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRJRFxuICogQHBhcmFtIHtzdHJpbmd9IGhlbHBUZXh0SWZDaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscFRleHRJZk5vdENoZWNrZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhU2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9nZ2xlICd0b2dnbGUnIG9yICdjaGVja2JveCdcbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJlbmRlcmVkIGRhdGUgbmFtZSBmb3JtIHJvd1xuICovXG5jb25zdCBUb2dnbGUgPSAoIHtcblx0aW5wdXQsXG5cdGNoZWNrZWQsXG5cdGh0bWxJZCxcblx0aHRtbENsYXNzLFxuXHRoZWxwVGV4dElELFxuXHRoZWxwVGV4dElmQ2hlY2tlZCxcblx0aGVscFRleHRJZk5vdENoZWNrZWQsXG5cdGRhdGFTZXQsXG5cdHRvZ2dsZSA9ICd0b2dnbGUnLCAvLyAndG9nZ2xlJyBvciAnY2hlY2tib3gnXG5cdC4uLmF0dHJpYnV0ZXNcbn0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyA/XG5cdFx0YCR7IGh0bWxDbGFzcyB9IGVlLXRvZ2dsZS1pbnB1dGAgOlxuXHRcdCdlZS10b2dnbGUtaW5wdXQnO1xuXHRyZXR1cm4gdG9nZ2xlID09PSAndG9nZ2xlJyA/IChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17IGAkeyBodG1sQ2xhc3MgfSBlZS1zd2l0Y2gtdG9nZ2xlYCB9ID5cblx0XHRcdDxUb2dnbGVDb250cm9sXG5cdFx0XHRcdGNoZWNrZWQ9eyBjaGVja2VkIH1cblx0XHRcdFx0aW5zdGFuY2VJZD17IGh0bWxJZCB9XG5cdFx0XHRcdGFyaWEtZGVzY3JpYmVkYnk9eyBoZWxwVGV4dElEIH1cblx0XHRcdFx0bGFiZWw9eyBjaGVja2VkID8gaGVscFRleHRJZkNoZWNrZWQgOiBoZWxwVGV4dElmTm90Q2hlY2tlZCB9XG5cdFx0XHRcdG9uQ2hhbmdlPXsgaW5wdXQub25DaGFuZ2UgfVxuXHRcdFx0XHR7IC4uLmRhdGFTZXQgfVxuXHRcdFx0XHR7IC4uLmF0dHJpYnV0ZXMgfVxuXHRcdFx0Lz5cblx0XHQ8L2Rpdj5cblx0KSA6IChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17IGAkeyBodG1sQ2xhc3MgfSBlZS1jaGVja2JveC10b2dnbGVgIH0+XG5cdFx0XHQ8Q2hlY2tib3hDb250cm9sXG5cdFx0XHRcdGNoZWNrZWQ9eyBjaGVja2VkIH1cblx0XHRcdFx0aW5zdGFuY2VJZD17IGh0bWxJZCB9XG5cdFx0XHRcdGFyaWEtZGVzY3JpYmVkYnk9eyBoZWxwVGV4dElEIH1cblx0XHRcdFx0bGFiZWw9eyBjaGVja2VkID8gaGVscFRleHRJZkNoZWNrZWQgOiBoZWxwVGV4dElmTm90Q2hlY2tlZCB9XG5cdFx0XHRcdG9uQ2hhbmdlPXsgaW5wdXQub25DaGFuZ2UgfVxuXHRcdFx0XHR7IC4uLmRhdGFTZXQgfVxuXHRcdFx0XHR7IC4uLmF0dHJpYnV0ZXMgfVxuXHRcdFx0Lz5cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cblRvZ2dsZS5wcm9wVHlwZXMgPSB7XG5cdGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG5cdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblx0aGVscFRleHRJRDogUHJvcFR5cGVzLnN0cmluZyxcblx0aGVscFRleHRJZkNoZWNrZWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0aGVscFRleHRJZk5vdENoZWNrZWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0ZGF0YVNldDogUHJvcFR5cGVzLm9iamVjdCxcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBpbnB1dFxuICovXG5leHBvcnQgY29uc3QgVG9nZ2xlSW5wdXQgPSAoIGF0dHJpYnV0ZXMgKSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PEZpZWxkXG5cdFx0XHRjb21wb25lbnQ9eyBUb2dnbGUgfVxuXHRcdFx0eyAuLi5hdHRyaWJ1dGVzIH1cblx0XHQvPlxuXHQpO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBDaGlsZHJlbiwgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBkZWZhdWx0IGFzIEZvcm1Db2x1bW4gfSBmcm9tICcuL2Zvcm0tY29sdW1uJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgRm9ybVJvdyB9IGZyb20gJy4vZm9ybS1yb3cnO1xuXG4vKipcbiAqIEF1dG9Db2x1bW5Sb3dcbiAqIFwidHdvLWNvbHVtbi1hZG1pblwiIGZvcm0gbGF5b3V0IHN0cmF0ZWd5IGNvbXBvbmVudFxuICogZm9yIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGluZyBGb3JtQ29sdW1ucyBmb3IgbGFiZWxzIGFuZCBpbnB1dHNcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBjaGlsZHJlblxuICogQHBhcmFtIHtib29sZWFufSBvZmZzZXRcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gY29sU2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IGFsaWduXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGZvcm0gcm93IGNvbHVtblxuICovXG5jbGFzcyBBdXRvQ29sdW1uUm93IGV4dGVuZHMgQ29tcG9uZW50IHtcblx0cmVuZGVyKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8Rm9ybVJvdz5cblx0XHRcdFx0e1xuXHRcdFx0XHRcdENoaWxkcmVuLm1hcCggdGhpcy5wcm9wcy5jaGlsZHJlbiwgKCBjaGlsZCwgaW5kZXggKSA9PiB7XG5cdFx0XHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCAlIDIgIT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNvbFNpemUgPSBjaGlsZC5wcm9wcy5sYWJlbENvbFNpemUgP1xuXHRcdFx0XHRcdFx0XHRcdGNoaWxkLnByb3BzLmxhYmVsQ29sU2l6ZSA6XG5cdFx0XHRcdFx0XHRcdFx0Mztcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQ8Rm9ybUNvbHVtbiBhbGlnbj1cInJpZ2h0XCIgY29sU2l6ZT17IGNvbFNpemUgfT5cblx0XHRcdFx0XHRcdFx0XHRcdHsgY2hpbGQgfVxuXHRcdFx0XHRcdFx0XHRcdDwvRm9ybUNvbHVtbj5cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IGNvbFNpemUgPSBjaGlsZC5wcm9wcy5jb2xTaXplID9cblx0XHRcdFx0XHRcdFx0Y2hpbGQucHJvcHMuY29sU2l6ZSA6XG5cdFx0XHRcdFx0XHRcdDc7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8Rm9ybUNvbHVtbiBjb2xTaXplPXsgY29sU2l6ZSB9PlxuXHRcdFx0XHRcdFx0XHRcdHsgY2hpbGQgfVxuXHRcdFx0XHRcdFx0XHQ8L0Zvcm1Db2x1bW4+XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0XHR9XG5cdFx0XHQ8L0Zvcm1Sb3c+XG5cdFx0KTtcblx0fVxufVxuXG5BdXRvQ29sdW1uUm93LnByb3BUeXBlcyA9IHtcblx0Y2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5hcnJheU9mKCBQcm9wVHlwZXMub2JqZWN0ICksXG5cdF0gKSxcblx0Y29sU2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQXV0b0NvbHVtblJvdztcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogRm9ybUNvbHVtblxuICogXCJ0d28tY29sdW1uLWFkbWluXCIgZm9ybSBsYXlvdXQgc3RyYXRlZ3kgY29tcG9uZW50XG4gKiBmb3IgZGlzcGxheWluZyBhIHNpbmdsZSBcImNvbHVtblwiIHdpdGhpbiBhIGZvcm0gcm93XG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gY29sU2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IGFsaWduXG4gKiBAcGFyYW0ge09iamVjdH0gZXh0cmFBdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGZvcm0gcm93IGNvbHVtblxuICovXG5jb25zdCBGb3JtQ29sdW1uID0gKCB7XG5cdGNoaWxkcmVuLFxuXHRodG1sQ2xhc3MsXG5cdGNvbFNpemUgPSAzLFxuXHRvZmZzZXQgPSAwLFxuXHRhbGlnbiA9ICdsZWZ0Jyxcblx0Li4uZXh0cmFBdHRyaWJ1dGVzXG59ICkgPT4ge1xuXHRjb25zdCBpbnB1dCA9IGNoaWxkcmVuID8gY2hpbGRyZW4gOiBudWxsO1xuXHRpZiAoXG5cdFx0ISBpbnB1dCB8fFxuXHRcdCggaW5wdXQudHlwZSAmJiBpbnB1dC50eXBlLm5hbWUgJiYgaW5wdXQudHlwZS5uYW1lID09PSAnSGlkZGVuSW5wdXQnIClcblx0KSB7XG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG5cdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyA/IGAkeyBodG1sQ2xhc3MgfSBgIDogJyc7XG5cdGh0bWxDbGFzcyA9IG9mZnNldCA/XG5cdFx0YCR7IGh0bWxDbGFzcyB9Y29sLXNtLSR7IGNvbFNpemUgfSBvZmZzZXQtc20tJHsgb2Zmc2V0IH0gZWUtZm9ybS1jb2xgIDpcblx0XHRgJHsgaHRtbENsYXNzIH1jb2wtc20tJHsgY29sU2l6ZSB9IGVlLWZvcm0tY29sYDtcblx0aHRtbENsYXNzICs9IGFsaWduID09PSAncmlnaHQnID8gJyB0ZXh0LXNtLXJpZ2h0JyA6ICcnO1xuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0geyAuLi5leHRyYUF0dHJpYnV0ZXMgfT5cblx0XHRcdHsgaW5wdXQgfVxuXHRcdDwvZGl2PlxuXHQpO1xufTtcblxuRm9ybUNvbHVtbi5wcm9wVHlwZXMgPSB7XG5cdGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRQcm9wVHlwZXMuYXJyYXlPZiggUHJvcFR5cGVzLm9iamVjdCApLFxuXHRdICksXG5cdGNvbFNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcblx0b2Zmc2V0OiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRdICksXG5cdGFsaWduOiBQcm9wVHlwZXMub25lT2YoIFsgJ2xlZnQnLCAncmlnaHQnIF0gKSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm1Db2x1bW47XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBGb3JtQ29sdW1uIH0gZnJvbSAnLi9mb3JtLWNvbHVtbic7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEZvcm1Sb3cgfSBmcm9tICcuL2Zvcm0tcm93JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgRm9ybUluZm9CYXNlIH0gZnJvbSAnLi4vLi4vYmFzZS9mb3JtLWluZm8tYmFzZSc7XG5cbi8qKlxuICogRm9ybUluZm9cbiAqIGRpc3BsYXlzIGluc3RydWN0aW9ucyBvciBvdGhlciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cbiAqIHRoYXQgdXNlcnMgbWF5IHJlcXVpcmUgdG8gcHJvcGVybHkgY29tcGxldGUgYSBmb3JtLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSBmb3JtSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IGRhc2hpY29uXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKi9cbmNsYXNzIEZvcm1JbmZvIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0Y29uc3RydWN0b3IoIHByb3BzICkge1xuXHRcdHN1cGVyKCBwcm9wcyApO1xuXHRcdHRoaXMuc3RhdGUgPSB7XG5cdFx0XHRkaXNtaXNzOiBmYWxzZSxcblx0XHR9O1xuXHR9XG5cblx0ZGlzbWlzcyA9ICgpID0+IHtcblx0XHR0aGlzLnNldFN0YXRlKCAoIHByZXZTdGF0ZSApID0+ICggeyBkaXNtaXNzOiAhIHByZXZTdGF0ZS5kaXNtaXNzIH0gKSApO1xuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRmb3JtSW5mbyxcblx0XHRcdGRhc2hpY29uID0gJycsXG5cdFx0XHRkaXNtaXNzYWJsZSA9IHRydWUsXG5cdFx0XHRjb2xTaXplID0gNixcblx0XHRcdG9mZnNldCA9IDMsXG5cdFx0XHRmb3JtSW5mb1ZhcnMgPSBbXSxcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRsZXQgeyBodG1sQ2xhc3MgPSAnJyB9ID0gdGhpcy5wcm9wcztcblx0XHRodG1sQ2xhc3MgPSBodG1sQ2xhc3MgIT09ICcnID9cblx0XHRcdGAkeyBodG1sQ2xhc3MgfSBlZS1mb3JtLWluZm8tcm93YCA6XG5cdFx0XHQnZWUtZm9ybS1pbmZvLXJvdyc7XG5cdFx0aHRtbENsYXNzID0gdGhpcy5zdGF0ZS5kaXNtaXNzID9cblx0XHRcdGAkeyBodG1sQ2xhc3MgfSBkaXNtaXNzZWRgIDpcblx0XHRcdGh0bWxDbGFzcztcblx0XHRodG1sQ2xhc3MgPSBkaXNtaXNzYWJsZSA/XG5cdFx0XHRgJHsgaHRtbENsYXNzIH0gaXMtZGlzbWlzc2FibGVgIDpcblx0XHRcdGh0bWxDbGFzcztcblx0XHRyZXR1cm4gZm9ybUluZm8gPyAoXG5cdFx0XHQ8Rm9ybVJvdyBodG1sQ2xhc3M9eyBodG1sQ2xhc3MgfT5cblx0XHRcdFx0PEZvcm1Db2x1bW4gY29sU2l6ZT17IGNvbFNpemUgfSBvZmZzZXQ9eyBvZmZzZXQgfT5cblx0XHRcdFx0XHQ8Rm9ybUluZm9CYXNlXG5cdFx0XHRcdFx0XHRmb3JtSW5mbz17IGZvcm1JbmZvIH1cblx0XHRcdFx0XHRcdGZvcm1JbmZvVmFycz17IGZvcm1JbmZvVmFycyB9XG5cdFx0XHRcdFx0XHRkYXNoaWNvbj17IGRhc2hpY29uIH1cblx0XHRcdFx0XHRcdG9uRGlzbWlzcz17IGRpc21pc3NhYmxlID8gdGhpcy5kaXNtaXNzIDogbnVsbCB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Gb3JtQ29sdW1uPlxuXHRcdFx0PC9Gb3JtUm93PlxuXHRcdCkgOiBudWxsO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm1JbmZvO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBGb3JtUm93XG4gKiBcInR3by1jb2x1bW4tYWRtaW5cIiBmb3JtIGxheW91dCBzdHJhdGVneSBjb21wb25lbnQgZm9yXG4gKiBkaXNwbGF5aW5nIGEgc2luZ2xlIFwicm93XCIgaW4gdGhlIGZvcm1cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBjaGlsZHJlblxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBmb3JtIHJvd1xuICovXG5jb25zdCBGb3JtUm93ID0gKCB7IGNoaWxkcmVuLCBodG1sQ2xhc3MgPSAnJyB9ICkgPT4ge1xuXHRodG1sQ2xhc3MgPSBodG1sQ2xhc3MgPyBgJHsgaHRtbENsYXNzIH0gZWUtZm9ybS1yb3dgIDogJ2VlLWZvcm0tcm93Jztcblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9PlxuXHRcdFx0eyBjaGlsZHJlbiB9XG5cdFx0PC9kaXY+XG5cdCk7XG59O1xuXG5Gb3JtUm93LnByb3BUeXBlcyA9IHtcblx0Y2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5hcnJheU9mKCBQcm9wVHlwZXMub2JqZWN0ICksXG5cdF0gKSxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9ybVJvdztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBkZWZhdWx0IGFzIEZvcm1Db2x1bW4gfSBmcm9tICcuL2Zvcm0tY29sdW1uJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgRm9ybVJvdyB9IGZyb20gJy4vZm9ybS1yb3cnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBGb3JtU2VjdGlvbiB9IGZyb20gJy4vZm9ybS1zZWN0aW9uJztcblxuLyoqXG4gKiBFZGl0b3JTYXZlQ2FuY2VsQnV0dG9uc1xuICogcmV1c2FibGUgZm9ybSBidXR0b25zXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gc3VibWl0QnV0dG9uXG4gKiBAcGFyYW0ge09iamVjdH0gY2FuY2VsQnV0dG9uXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gY29sU2l6ZVxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBmb3JtIGJ1dHRvbnNcbiAqL1xuY2xhc3MgRm9ybVNhdmVDYW5jZWxCdXR0b25zIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdHN1Ym1pdEJ1dHRvbixcblx0XHRcdGNhbmNlbEJ1dHRvbiA9IG51bGwsXG5cdFx0XHRjb2xTaXplID0gMTIsXG5cdFx0XHRvZmZzZXQgPSAwLFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdGxldCB7IGh0bWxDbGFzcyB9ID0gdGhpcy5wcm9wcztcblx0XHRodG1sQ2xhc3MgPSBodG1sQ2xhc3MgP1xuXHRcdFx0YCR7IGh0bWxDbGFzcyB9IGVlLWZvcm0tc2F2ZS1jYW5jZWwtYnV0dG9ucy1kaXZgIDpcblx0XHRcdCdlZS1mb3JtLXNhdmUtY2FuY2VsLWJ1dHRvbnMtZGl2Jztcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZvcm1TZWN0aW9uIGh0bWxDbGFzcz17IGh0bWxDbGFzcyB9PlxuXHRcdFx0XHQ8Rm9ybVJvdyBodG1sQ2xhc3M9eyAnZWUtZm9ybS1idXR0b24tcm93JyB9PlxuXHRcdFx0XHRcdDxGb3JtQ29sdW1uIGNvbFNpemU9eyBjb2xTaXplIH0gb2Zmc2V0PXsgb2Zmc2V0IH0+XG5cdFx0XHRcdFx0XHR7IHN1Ym1pdEJ1dHRvbiB9XG5cdFx0XHRcdFx0XHR7IGNhbmNlbEJ1dHRvbiB9XG5cdFx0XHRcdFx0PC9Gb3JtQ29sdW1uPlxuXHRcdFx0XHQ8L0Zvcm1Sb3c+XG5cdFx0XHQ8L0Zvcm1TZWN0aW9uPlxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9ybVNhdmVDYW5jZWxCdXR0b25zO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBDaGlsZHJlbiB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBkZWZhdWx0IGFzIEF1dG9Gb3JtUm93IH0gZnJvbSAnLi4vLi4vYmFzZS9hdXRvLWZvcm0tcm93JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgQXV0b0NvbHVtblJvdyB9IGZyb20gJy4vYXV0by1jb2x1bW4tcm93JztcblxuLyoqXG4gKiBGb3JtU2VjdGlvblxuICogXCJ0d28tY29sdW1uLWFkbWluXCIgZm9ybSBsYXlvdXQgc3RyYXRlZ3kgY29tcG9uZW50IGZvclxuICogc2VwYXJhdGluZyBwYXJ0cyBvZiB0aGUgZm9ybSBpbnRvIGlkZW50aWZpYWJsZSBzZWN0aW9uc1xuICpcbiAqIEBjb21wb25lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBjaGlsZHJlblxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxJZFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBmb3JtIHNlY3Rpb25cbiAqL1xuY29uc3QgRm9ybVNlY3Rpb24gPSAoIHsgY2hpbGRyZW4sIGh0bWxJZCA9ICcnLCBodG1sQ2xhc3MgPSAnJyB9ICkgPT4ge1xuXHRodG1sQ2xhc3MgPSBodG1sQ2xhc3MgP1xuXHRcdGAkeyBodG1sQ2xhc3MgfSBlZS1mb3JtLXNlY3Rpb24gcHgtMCBwdC0zIGJvcmRlciByb3VuZGVkYCA6XG5cdFx0J2VlLWZvcm0tc2VjdGlvbiBweC0wIHB0LTMgYm9yZGVyIHJvdW5kZWQnO1xuXHRyZXR1cm4gKFxuXHRcdDxkaXYgaWQ9eyBodG1sSWQgfSBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfT5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicHgtM1wiPlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Q2hpbGRyZW4ubWFwKCBjaGlsZHJlbiwgKCBjaGlsZCwgaW5kZXggKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QXV0b0Zvcm1Sb3dcblx0XHRcdFx0XHRcdFx0XHRrZXk9eyBpbmRleCB9XG5cdFx0XHRcdFx0XHRcdFx0Rm9ybUVsZW1lbnQ9eyBjaGlsZCB9XG5cdFx0XHRcdFx0XHRcdFx0QXV0b0NvbHVtblJvdz17IEF1dG9Db2x1bW5Sb3cgfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IClcblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdCk7XG59O1xuXG5Gb3JtU2VjdGlvbi5wcm9wVHlwZXMgPSB7XG5cdGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRQcm9wVHlwZXMuYXJyYXlPZiggUHJvcFR5cGVzLm9iamVjdCApLFxuXHRdICksXG5cdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZyxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9ybVNlY3Rpb247XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEZvcm1XcmFwcGVyXG4gKiBcInR3by1jb2x1bW4tYWRtaW5cIiBmb3JtIGxheW91dCBzdHJhdGVneSBjb21wb25lbnRcbiAqIHRoYXQgd3JhcHMgdGhlIG1haW4gZm9ybSBpbiBhIGRpdiBvcmRlciB0byBhcHBseVxuICogYW4gSFRNTCBjbGFzcyBmb3Igc3R5bGluZyBwdXJwb3Nlc1xuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbElkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGZvcm0gc2VjdGlvblxuICovXG5jb25zdCBGb3JtV3JhcHBlciA9ICggeyBjaGlsZHJlbiwgaHRtbElkID0gJycsIGh0bWxDbGFzcyA9ICcnIH0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyA/XG5cdFx0YCR7IGh0bWxDbGFzcyB9IGVlLXR3by1jb2x1bW4tYWRtaW5gIDpcblx0XHQnZWUtdHdvLWNvbHVtbi1hZG1pbic7XG5cdHJldHVybiAoXG5cdFx0PGRpdiBpZD17IGh0bWxJZCB9IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9PlxuXHRcdFx0eyBjaGlsZHJlbiB9XG5cdFx0PC9kaXY+XG5cdCk7XG59O1xuXG5Gb3JtV3JhcHBlci5wcm9wVHlwZXMgPSB7XG5cdGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRQcm9wVHlwZXMuYXJyYXlPZiggUHJvcFR5cGVzLm9iamVjdCApLFxuXHRdICksXG5cdGh0bWxJZDogUHJvcFR5cGVzLnN0cmluZyxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9ybVdyYXBwZXI7XG4iLCJpbXBvcnQgeyBGb3JtSW5wdXQgfSBmcm9tICcuLi8uLi9pbnB1dHMvZm9ybS1pbnB1dCc7XG5pbXBvcnQgeyBJbnB1dExhYmVsIH0gZnJvbSAnLi4vLi4vaW5wdXRzL2Jhc2UvaW5wdXQtbGFiZWwnO1xuaW1wb3J0IEF1dG9Db2x1bW5Sb3cgZnJvbSAnLi9hdXRvLWNvbHVtbi1yb3cnO1xuaW1wb3J0IEZvcm1Db2x1bW4gZnJvbSAnLi9mb3JtLWNvbHVtbic7XG5pbXBvcnQgRm9ybUluZm8gZnJvbSAnLi9mb3JtLWluZm8nO1xuaW1wb3J0IEZvcm1Sb3cgZnJvbSAnLi9mb3JtLXJvdyc7XG5pbXBvcnQgRm9ybVNhdmVDYW5jZWxCdXR0b25zIGZyb20gJy4vZm9ybS1zYXZlLWNhbmNlbC1idXR0b25zJztcbmltcG9ydCBGb3JtU3VibWl0QnV0dG9uIGZyb20gJy4uLy4uL2Jhc2UvZm9ybS1zdWJtaXQtYnV0dG9uJztcbmltcG9ydCBGb3JtQ2FuY2VsQnV0dG9uIGZyb20gJy4uLy4uL2Jhc2UvZm9ybS1jYW5jZWwtYnV0dG9uJztcbmltcG9ydCBTdWJtaXR0aW5nTm90aWNlIGZyb20gJy4uLy4uL2Jhc2Uvc3VibWl0dGluZy1ub3RpY2UnO1xuaW1wb3J0IEZvcm1TZWN0aW9uIGZyb20gJy4vZm9ybS1zZWN0aW9uJztcbmltcG9ydCBGb3JtV3JhcHBlciBmcm9tICcuL2Zvcm0td3JhcHBlcic7XG5pbXBvcnQgJy4vdHdvLWNvbHVtbi1hZG1pbi5jc3MnO1xuXG5jb25zdCB0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQgPSB7XG5cdElucHV0TGFiZWwsXG5cdEZvcm1JbnB1dCxcblx0Rm9ybUNvbHVtbixcblx0Rm9ybVJvdyxcblx0Rm9ybVNlY3Rpb24sXG5cdEZvcm1XcmFwcGVyLFxuXHRBdXRvQ29sdW1uUm93LFxuXHRGb3JtU2F2ZUNhbmNlbEJ1dHRvbnMsXG5cdEZvcm1JbmZvLFxuXHRGb3JtU3VibWl0QnV0dG9uLFxuXHRGb3JtQ2FuY2VsQnV0dG9uLFxuXHRTdWJtaXR0aW5nTm90aWNlLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHdvQ29sdW1uQWRtaW5Gb3JtTGF5b3V0O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLXR3by1jb2x1bW4tYWRtaW5cIjpcImVlLXR3by1jb2x1bW4tYWRtaW5cIixcImVlLWZvcm0tcm93XCI6XCJlZS1mb3JtLXJvd1wiLFwiZWUtZm9ybS1zZWN0aW9uXCI6XCJlZS1mb3JtLXNlY3Rpb25cIixcInB4LTBcIjpcInB4LTBcIixcInB4LTNcIjpcInB4LTNcIixcIm9wYWNpdHktNTBcIjpcIm9wYWNpdHktNTBcIixcImJvcmRlclwiOlwiYm9yZGVyXCIsXCJyb3VuZGVkXCI6XCJyb3VuZGVkXCIsXCJwdC0zXCI6XCJwdC0zXCIsXCJweS0zXCI6XCJweS0zXCIsXCJwbC0wXCI6XCJwbC0wXCIsXCJwci0wXCI6XCJwci0wXCIsXCJwbC0zXCI6XCJwbC0zXCIsXCJwci0zXCI6XCJwci0zXCIsXCJtLTBcIjpcIm0tMFwiLFwidGV4dC1zbS1yaWdodFwiOlwidGV4dC1zbS1yaWdodFwiLFwiY29sLWZvcm0tbGFiZWxcIjpcImNvbC1mb3JtLWxhYmVsXCIsXCJmb3JtLWNvbnRyb2xcIjpcImZvcm0tY29udHJvbFwiLFwiZm9ybS1jb250cm9sLXdwXCI6XCJmb3JtLWNvbnRyb2wtd3BcIixcImNvbXBvbmVudHMtc2VsZWN0LWNvbnRyb2xfX2lucHV0XCI6XCJjb21wb25lbnRzLXNlbGVjdC1jb250cm9sX19pbnB1dFwiLFwiZWUtbW9uZXktZmllbGRcIjpcImVlLW1vbmV5LWZpZWxkXCIsXCJlZS1zaWduLWFmdGVyXCI6XCJlZS1zaWduLWFmdGVyXCIsXCJlZS1zaWduLWJlZm9yZVwiOlwiZWUtc2lnbi1iZWZvcmVcIixcImVlLWN1clNpZ24tMlwiOlwiZWUtY3VyU2lnbi0yXCIsXCJlZS1tb25leS1maWVsZC0yXCI6XCJlZS1tb25leS1maWVsZC0yXCIsXCJlZS1jdXJTaWduLTNcIjpcImVlLWN1clNpZ24tM1wiLFwiZWUtY3VyU2lnbi00XCI6XCJlZS1jdXJTaWduLTRcIixcImVlLWN1cnJlbmN5LXNpZ25cIjpcImVlLWN1cnJlbmN5LXNpZ25cIixcImVlLXBlcmNlbnQtc2lnblwiOlwiZWUtcGVyY2VudC1zaWduXCIsXCJhbGlnbi1pdGVtcy1zbS1jZW50ZXJcIjpcImFsaWduLWl0ZW1zLXNtLWNlbnRlclwiLFwiZC1mbGV4XCI6XCJkLWZsZXhcIixcImJ0blwiOlwiYnRuXCIsXCJidG4tZ3JvdXBcIjpcImJ0bi1ncm91cFwiLFwib2Zmc2V0LXNtLTJcIjpcIm9mZnNldC1zbS0yXCIsXCJidG4tZ3JvdXAtdmVydGljYWxcIjpcImJ0bi1ncm91cC12ZXJ0aWNhbFwiLFwiZHJvcGRvd24tdG9nZ2xlXCI6XCJkcm9wZG93bi10b2dnbGVcIixcImRpc2FibGVkXCI6XCJkaXNhYmxlZFwiLFwiYnRuLXByaW1hcnlcIjpcImJ0bi1wcmltYXJ5XCIsXCJhY3RpdmVcIjpcImFjdGl2ZVwiLFwic2hvd1wiOlwic2hvd1wiLFwiZWUtY2hlY2tib3gtbGFiZWwtYWZ0ZXJcIjpcImVlLWNoZWNrYm94LWxhYmVsLWFmdGVyXCIsXCJlZS1yYWRpby1sYWJlbC1hZnRlclwiOlwiZWUtcmFkaW8tbGFiZWwtYWZ0ZXJcIixcImVzcHJlc3NvLWlucHV0LWhlbHAtdGV4dFwiOlwiZXNwcmVzc28taW5wdXQtaGVscC10ZXh0XCIsXCJsZWZ0XCI6XCJsZWZ0XCIsXCJlZS1mb3JtLXNhdmUtY2FuY2VsLWJ1dHRvbnMtZGl2XCI6XCJlZS1mb3JtLXNhdmUtY2FuY2VsLWJ1dHRvbnMtZGl2XCIsXCJlZS1mb3JtLWJ1dHRvbi1yb3dcIjpcImVlLWZvcm0tYnV0dG9uLXJvd1wiLFwiYnV0dG9uLXByaW1hcnlcIjpcImJ1dHRvbi1wcmltYXJ5XCIsXCJidXR0b24tc2Vjb25kYXJ5XCI6XCJidXR0b24tc2Vjb25kYXJ5XCIsXCJlZS1mb3JtLWJ1dHRvblwiOlwiZWUtZm9ybS1idXR0b25cIixcImVlLWlucHV0LXdpZHRoLTFcIjpcImVlLWlucHV0LXdpZHRoLTFcIixcImVlLWlucHV0LXdpZHRoLTJcIjpcImVlLWlucHV0LXdpZHRoLTJcIixcImVlLWlucHV0LXdpZHRoLTNcIjpcImVlLWlucHV0LXdpZHRoLTNcIixcImVlLWlucHV0LXdpZHRoLTRcIjpcImVlLWlucHV0LXdpZHRoLTRcIixcImVlLWlucHV0LXdpZHRoLTVcIjpcImVlLWlucHV0LXdpZHRoLTVcIixcImVlLWlucHV0LXdpZHRoLTZcIjpcImVlLWlucHV0LXdpZHRoLTZcIixcImVlLXRvZ2dsZS1pbnB1dFwiOlwiZWUtdG9nZ2xlLWlucHV0XCIsXCJjb21wb25lbnRzLXRvZ2dsZS1jb250cm9sX19sYWJlbFwiOlwiY29tcG9uZW50cy10b2dnbGUtY29udHJvbF9fbGFiZWxcIixcImVlLWNoZWNrYm94LXRvZ2dsZVwiOlwiZWUtY2hlY2tib3gtdG9nZ2xlXCIsXCJlZS1zd2l0Y2gtdG9nZ2xlXCI6XCJlZS1zd2l0Y2gtdG9nZ2xlXCIsXCJjb21wb25lbnRzLWZvcm0tdG9nZ2xlXCI6XCJjb21wb25lbnRzLWZvcm0tdG9nZ2xlXCIsXCJlZS1oaWRkZW4tbGFiZWxcIjpcImVlLWhpZGRlbi1sYWJlbFwiLFwiZWUtYWZ0ZXItaW5wdXQtd3JhcHBlclwiOlwiZWUtYWZ0ZXItaW5wdXQtd3JhcHBlclwiLFwiZWUtYWZ0ZXItaW5wdXQtZGl2XCI6XCJlZS1hZnRlci1pbnB1dC1kaXZcIixcImNvbXBvbmVudHMtdG9vbHRpcFwiOlwiY29tcG9uZW50cy10b29sdGlwXCIsXCJjb21wb25lbnRzLXBhbmVsX19ib2R5XCI6XCJjb21wb25lbnRzLXBhbmVsX19ib2R5XCIsXCJpcy1vcGVuZWRcIjpcImlzLW9wZW5lZFwiLFwiZWUtZm9ybS1pbmZvLXJvd1wiOlwiZWUtZm9ybS1pbmZvLXJvd1wiLFwiY29sLXNtLTFcIjpcImNvbC1zbS0xXCIsXCJjb2wtc20tMWhcIjpcImNvbC1zbS0xaFwiLFwiY29sLXNtLTFxXCI6XCJjb2wtc20tMXFcIixcImNvbC1zbS0yXCI6XCJjb2wtc20tMlwiLFwiY29sLXNtLTItM3FcIjpcImNvbC1zbS0yLTNxXCIsXCJjb2wtc20tMmhcIjpcImNvbC1zbS0yaFwiLFwiY29sLXNtLTNcIjpcImNvbC1zbS0zXCIsXCJjb2wtc20tM2hcIjpcImNvbC1zbS0zaFwiLFwiY29sLXNtLTRcIjpcImNvbC1zbS00XCIsXCJjb2wtc20tNVwiOlwiY29sLXNtLTVcIixcImNvbC1zbS02XCI6XCJjb2wtc20tNlwiLFwiY29sLXNtLTdcIjpcImNvbC1zbS03XCIsXCJjb2wtc20tOFwiOlwiY29sLXNtLThcIixcImNvbC1zbS05XCI6XCJjb2wtc20tOVwiLFwiY29sLXNtLTEwXCI6XCJjb2wtc20tMTBcIixcImNvbC1zbS0xMVwiOlwiY29sLXNtLTExXCIsXCJjb2wtc20tMTJcIjpcImNvbC1zbS0xMlwiLFwiY29sLXNtLWhcIjpcImNvbC1zbS1oXCIsXCJvZmZzZXQtc20tMVwiOlwib2Zmc2V0LXNtLTFcIixcIm9mZnNldC1zbS0zXCI6XCJvZmZzZXQtc20tM1wiLFwib2Zmc2V0LXNtLTRcIjpcIm9mZnNldC1zbS00XCIsXCJvZmZzZXQtc20tNVwiOlwib2Zmc2V0LXNtLTVcIixcIm9mZnNldC1zbS02XCI6XCJvZmZzZXQtc20tNlwiLFwib2Zmc2V0LXNtLTdcIjpcIm9mZnNldC1zbS03XCIsXCJvZmZzZXQtc20tOFwiOlwib2Zmc2V0LXNtLThcIixcIm9mZnNldC1zbS05XCI6XCJvZmZzZXQtc20tOVwiLFwib2Zmc2V0LXNtLTEwXCI6XCJvZmZzZXQtc20tMTBcIixcIm9mZnNldC1zbS1oXCI6XCJvZmZzZXQtc20taFwiLFwiY29sLXNtLTdoXCI6XCJjb2wtc20tN2hcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0aXNFbXB0eSxcblx0aXNGdW5jdGlvbixcblx0aXNVbmRlZmluZWQsXG5cdHJlZHVjZSxcblx0aXNBcnJheSxcblx0aXNNYXAsXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcblxuLyoqXG4gKiBSZWNlaXZlcyBhbiBhcnJheXxPYmplY3R8TWFwIG9mIGV2ZW50IGVudGl0aWVzIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHNpbXBsZVxuICogb2JqZWN0cyB0aGF0IGNhbiBiZSBwYXNzZWQgYWxvbmcgdG8gdGhlIG9wdGlvbnMgYXJyYXkgdXNlZCBmb3IgYVxuICogU2VsZWN0Q29udHJvbCBjb21wb25lbnRcbiAqXG4gKiBAcGFyYW0geyBNYXB8T2JqZWN0fEFycmF5IH0gIGVudGl0aWVzXG4gKiBAcGFyYW0geyBPYmplY3QgfSBvcHRpb25zRW50aXR5TWFwIE9iamVjdCBvZiBrZXkgdmFsdWUgcGFpcnMgd2hlcmUgdmFsdWVzXG4gKiBhcmUgdGhlICdsYWJlbDp2YWx1ZScgcGFpcmluZ3MgdXNlZCB0byBwb3B1bGF0ZSB0aGUgU2VsZWN0IGlucHV0LlxuICogQHBhcmFtIHsgc3RyaW5nIH0gbWFwU2VsZWN0aW9uIERldGVybWluZXMgd2hpY2ggb3B0aW9uRW50aXR5TWFwIHBhaXJpbmcgdG9cbiAqIHVzZS5cbiAqIEByZXR1cm4geyBBcnJheSB9IFJldHVybnMgYW4gYXJyYXkgb2Ygc2ltcGxlIG9iamVjdHMgZm9ybWF0dGVkIGZvciBhbnlcbiAqIHNlbGVjdCBjb250cm9sIHRoYXQgcmVjZWl2ZXMgaXRzIG9wdGlvbnMgaW4gdGhlIGZvcm1hdCBvZiBhbiBhcnJheSBvZiBvYmplY3RzXG4gKiB3aXRoIGxhYmVsIGFuZCB2YWx1ZSBrZXlzLlxuICovXG5jb25zdCBidWlsZE9wdGlvbnMgPSAoXG5cdGVudGl0aWVzLFxuXHRvcHRpb25zRW50aXR5TWFwLFxuXHRtYXBTZWxlY3Rpb24gPSAnZGVmYXVsdCcsXG4pID0+IHtcblx0aWYgKCBpc0VtcHR5KCBlbnRpdGllcyApICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRlbnRpdGllcyA9IGlzTWFwKCBlbnRpdGllcyApID8gQXJyYXkuZnJvbSggZW50aXRpZXMudmFsdWVzKCkgKSA6IGVudGl0aWVzO1xuXHRpZiAoIGlzRW1wdHkoIG9wdGlvbnNFbnRpdHlNYXAgKSApIHtcblx0XHR3YXJuaW5nKFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHQnQSB2YWxpZCBvcHRpb25zRW50aXR5TWFwIG11c3QgYmUgc3VwcGxpZWQgJyArXG5cdFx0XHQnaW4gb3JkZXIgdG8gYnVpbGQgb3B0aW9ucyBmb3IgYSBNb2RlbFNlbGVjdCBjb21wb25lbnQnLFxuXHRcdFx0b3B0aW9uc0VudGl0eU1hcCxcblx0XHQpO1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIGlzVW5kZWZpbmVkKCBvcHRpb25zRW50aXR5TWFwWyBtYXBTZWxlY3Rpb24gXSApICkge1xuXHRcdHdhcm5pbmcoXG5cdFx0XHRmYWxzZSxcblx0XHRcdCdBIHZhbGlkIG9wdGlvbnNFbnRpdHlNYXBbIG1hcFNlbGVjdGlvbiBdIG11c3QgYmUgc3VwcGxpZWQgJyArXG5cdFx0XHQnaW4gb3JkZXIgdG8gYnVpbGQgb3B0aW9ucyBmb3IgYSBNb2RlbFNlbGVjdCBjb21wb25lbnQnLFxuXHRcdFx0b3B0aW9uc0VudGl0eU1hcCxcblx0XHRcdG1hcFNlbGVjdGlvbixcblx0XHQpO1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHQvLyBpZiByZXF1ZXN0ZWQgbWFwU2VsZWN0aW9uIGV4aXN0cyB0aGVuIHVzZSB0aGF0XG5cdGxldCBtYXAgPSBvcHRpb25zRW50aXR5TWFwWyBtYXBTZWxlY3Rpb24gXTtcblxuXHQvLyBpZiBtYXAgaXMgZnVuY3Rpb24gdGhlbiBzaW1wbHkgcGFzcyB0aHJvdWdoIGVudGl0aWVzIHRvIHRoYXQgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBtYXAgKSApIHtcblx0XHRjb25zdCBvcHRpb25zID0gbWFwKCBlbnRpdGllcyApO1xuXHRcdGlmICggaXNBcnJheSggb3B0aW9ucyApICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnM7XG5cdFx0fVxuXHRcdC8vIHNldCBtYXAgdG8gZW1wdHkgb2JqZWN0IGJlY2F1c2UgdGhlIGZ1bmN0aW9uIG9uIGl0IHJldHVybmVkIHNvbWV0aGluZ1xuXHRcdC8vIG90aGVyIHRoYW4gYW4gYXJyYXlcblx0XHRtYXAgPSB7fTtcblx0XHR3YXJuaW5nKFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHQnVGhlIG9wdGlvbnNFbnRpdHlNYXAgZm9yICcgKyBtYXBTZWxlY3Rpb24gKyAnd2FzIGEgZnVuY3Rpb24gYnV0JyArXG5cdFx0XHQnIGl0IGRpZCBub3QgcmV0dXJuIGFuIGFycmF5IG9mIG9wdGlvbnMuICBNYWtlIHN1cmUgdGhlIGZ1bmN0aW9uJyArXG5cdFx0XHQnIHJldHVybnMgYW4gYXJyYXkgb2Ygc2ltcGxlIG9iamVjdHMgd2l0aCBsYWJlbCBhbmQgdmFsdWUga2V5cy4nLFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpc0VtcHR5KCBtYXAgKSApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0Y29uc3QgcmVkdWNlckNhbGxiYWNrID0gKCBvcHRpb25zLCBlbnRpdHkgKSA9PiB7XG5cdFx0Y29uc3QgbGFiZWwgPSBpc0Z1bmN0aW9uKCBtYXAubGFiZWwgKSA/XG5cdFx0XHRtYXAubGFiZWwoIGVudGl0eSApIDpcblx0XHRcdGVudGl0eVsgbWFwLmxhYmVsIF07XG5cdFx0Y29uc3QgdmFsdWUgPSBpc0Z1bmN0aW9uKCBtYXAudmFsdWUgKSA/XG5cdFx0XHRtYXAudmFsdWUoIGVudGl0eSApIDpcblx0XHRcdGVudGl0eVsgbWFwLnZhbHVlIF07XG5cdFx0aWYgKCBsYWJlbCAmJiB2YWx1ZSApIHtcblx0XHRcdG9wdGlvbnMucHVzaCggeyBsYWJlbCwgdmFsdWUgfSApO1xuXHRcdH1cblx0XHRyZXR1cm4gb3B0aW9ucztcblx0fTtcblx0cmV0dXJuICEgaXNBcnJheSggZW50aXRpZXMgKSA/XG5cdFx0ZW50aXRpZXMucmVkdWNlKCByZWR1Y2VyQ2FsbGJhY2ssIFtdICkgOlxuXHRcdHJlZHVjZSggZW50aXRpZXMsIHJlZHVjZXJDYWxsYmFjaywgW10gKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkT3B0aW9ucztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IE1vZGVsU2VsZWN0IGZyb20gJy4vbW9kZWwtc2VsZWN0JztcbmltcG9ydCB7IG1vZGVsU2VsZWN0TmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuY29uc3QgZGVmYXVsdFByb3BUeXBlcyA9IHtcblx0c2VsZWN0ZWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcblx0b25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLFxuXHRsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1vZGVsIFNlbGVjdCBjb21wb25lbnQgdXNpbmcgdGhlIGdpdmVuIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdFByb3BzXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcFR5cGVzXG4gKiBAcmV0dXJuIHtNb2RlbFNlbGVjdENvbXBvbmVudH0gQSBtb2RlbCBzZWxlY3QgY29tcG9uZW50LlxuICovXG5jb25zdCBjcmVhdGVNb2RlbFNlbGVjdCA9ICggbW9kZWxOYW1lLCBkZWZhdWx0UHJvcHMgPSB7fSwgcHJvcFR5cGVzID0ge30gKSA9PiB7XG5cdGNsYXNzIE1vZGVsU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50IHtcblx0XHQvKipcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdHN0YXRpYyBtb2RlbE5hbWUgPSBtb2RlbE5hbWU7XG5cblx0XHQvKipcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHRcdHN0YXRpYyBkZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cblx0XHQvKipcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHRcdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0XHQuLi5kZWZhdWx0UHJvcFR5cGVzLFxuXHRcdFx0Li4ucHJvcFR5cGVzLFxuXHRcdH07XG5cblx0XHRyZW5kZXIoKSB7XG5cdFx0XHRjb25zdCB7IHNlbGVjdGVkLCBvblNlbGVjdCB9ID0gdGhpcy5wcm9wcztcblx0XHRcdGxldCB7IHF1ZXJ5RGF0YSB9ID0gdGhpcy5wcm9wcztcblx0XHRcdGNvbnN0IHNlbGVjdE9wdGlvbnMgPSB7XG5cdFx0XHRcdHNlbGVjdENvbmZpZ3VyYXRpb246IHtcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWU6IHNlbGVjdGVkLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBvblNlbGVjdCxcblx0XHRcdFx0XHQuLi50aGlzLnByb3BzLnNlbGVjdENvbmZpZ3VyYXRpb24sXG5cdFx0XHRcdH0sXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAoIGRlZmF1bHRQcm9wcy5xdWVyeURhdGEgJiYgcXVlcnlEYXRhICkge1xuXHRcdFx0XHRxdWVyeURhdGEgPSB7XG5cdFx0XHRcdFx0Li4uZGVmYXVsdFByb3BzLnF1ZXJ5RGF0YSxcblx0XHRcdFx0XHQuLi5xdWVyeURhdGEsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHByb3BzID0ge1xuXHRcdFx0XHQuLi50aGlzLnByb3BzLFxuXHRcdFx0XHQuLi5zZWxlY3RPcHRpb25zLFxuXHRcdFx0XHRxdWVyeURhdGEsXG5cdFx0XHRcdG1vZGVsTmFtZTogdGhpcy5jb25zdHJ1Y3Rvci5tb2RlbE5hbWUsXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIDxNb2RlbFNlbGVjdCB7IC4uLnByb3BzIH0gLz47XG5cdFx0fVxuXHR9XG5cdE1vZGVsU2VsZWN0Q29tcG9uZW50LmRpc3BsYXlOYW1lID0gbW9kZWxTZWxlY3ROYW1lKCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIE1vZGVsU2VsZWN0Q29tcG9uZW50O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlTW9kZWxTZWxlY3Q7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbmV4cG9ydCBjb25zdCBSRUFDVF9TRUxFQ1RfVFlQRVMgPSB7XG5cdCdhcmlhLWRlc2NyaWJlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcblx0J2FyaWEtbGFiZWwnOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQnYXJpYS1sYWJlbGxlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcblx0YXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblx0YmFja3NwYWNlUmVtb3Zlc1ZhbHVlOiBQcm9wVHlwZXMuYm9vbCxcblx0Ymx1cklucHV0T25TZWxlY3Q6IFByb3BUeXBlcy5ib29sLFxuXHRjYXB0dXJlTWVudVNjcm9sbDogUHJvcFR5cGVzLmJvb2wsXG5cdGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblx0Y2xhc3NOYW1lUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRjbG9zZU1lbnVPblNlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG5cdGNvbXBvbmVudHM6IFByb3BUeXBlcy5vYmplY3QsXG5cdGNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZTogUHJvcFR5cGVzLmJvb2wsXG5cdGRlbGltaXRlcjogUHJvcFR5cGVzLnN0cmluZyxcblx0ZXNjYXBlQ2xlYXJzVmFsdWU6IFByb3BUeXBlcy5ib29sLFxuXHRmaWx0ZXJPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuXHRmb3JtYXRHcm91cExhYmVsOiBQcm9wVHlwZXMuZnVuYyxcblx0Zm9ybWF0T3B0aW9uTGFiZWw6IFByb3BUeXBlcy5mdW5jLFxuXHRnZXRPcHRpb25MYWJlbDogUHJvcFR5cGVzLmZ1bmMsXG5cdGdldE9wdGlvblZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcblx0aGlkZVNlbGVjdGVkT3B0aW9uczogUHJvcFR5cGVzLmJvb2wsXG5cdGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRpbnB1dFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRpbnB1dElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRpbnN0YW5jZUlkOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm51bWJlcixcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRdICksXG5cdGlzQ2xlYXJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblx0aXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cdGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cdGlzT3B0aW9uRGlzYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuXHRpc09wdGlvblNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYyxcblx0aXNNdWx0aTogUHJvcFR5cGVzLmJvb2wsXG5cdGlzU2VhcmNoYWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cdGxvYWRpbmdNZXNzYWdlOiBQcm9wVHlwZXMuZnVuYyxcblx0bWluTWVudUhlaWdodDogUHJvcFR5cGVzLm51bWJlcixcblx0bWF4TWVudUhlaWdodDogUHJvcFR5cGVzLm51bWJlcixcblx0bWVudUlzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG5cdG1lbnVQbGFjZW1lbnQ6IFByb3BUeXBlcy5vbmVPZiggW1xuXHRcdCdhdXRvJyxcblx0XHQnYm90dG9tJyxcblx0XHQndG9wJyxcblx0XSApLFxuXHRtZW51UG9zaXRpb246IFByb3BUeXBlcy5vbmVPZiggW1xuXHRcdCdhYnNvbHV0ZScsXG5cdFx0J2ZpeGVkJyxcblx0XSApLFxuXHRtZW51UG9ydGFsVGFyZ2V0OiBQcm9wVHlwZXMuZWxlbWVudCxcblx0bWVudVNob3VsZEJsb2NrU2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcblx0bWVudVNob3VsZFNjcm9sbEludG9WaWV3OiBQcm9wVHlwZXMuYm9vbCxcblx0bmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblx0bm9PcHRpb25zTWVzc2FnZTogUHJvcFR5cGVzLmZ1bmMsXG5cdG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG5cdG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblx0b25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG5cdG9uSW5wdXRDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXHRvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuXHRvbk1lbnVPcGVuOiBQcm9wVHlwZXMuZnVuYyxcblx0b25NZW51Q2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuXHRvbk1lbnVTY3JvbGxUb1RvcDogUHJvcFR5cGVzLmZ1bmMsXG5cdG9uTWVudVNjcm9sbFRvQm90dG9tOiBQcm9wVHlwZXMuZnVuYyxcblx0b3Blbk1lbnVPbkZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblx0b3Blbk1lbnVPbkNsaWNrOiBQcm9wVHlwZXMuYm9vbCxcblx0b3B0aW9uczogUHJvcFR5cGVzLmFycmF5LFxuXHRwYWdlU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcblx0cGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cdHNjcmVlblJlYWRlclN0YXR1czogUHJvcFR5cGVzLmZ1bmMsXG5cdHN0eWxlczogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0Y2xlYXJJbmRpY2F0b3I6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGNvbnRhaW5lcjogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0Y29udHJvbDogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0ZHJvcGRvd25JbmRpY2F0b3I6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGdyb3VwOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRncm91cEhlYWRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGluZGljYXRvcnNDb250YWluZXI6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGluZGljYXRvclNlcGFyYXRvcjogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0aW5wdXQ6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGxvYWRpbmdJbmRpY2F0b3I6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGxvYWRpbmdNZXNzYWdlQ1NTOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRtZW51OiBQcm9wVHlwZXMuZnVuYyxcblx0XHRtZW51TGlzdDogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0bWVudVBvcnRhbDogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0bXVsdGlWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0bXVsdGlWYWx1ZUxhYmVsOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRtdWx0aVZhbHVlUmVtb3ZlOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRub09wdGlvbnNNZXNzYWdlQ1NTOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRvcHRpb246IFByb3BUeXBlcy5mdW5jLFxuXHRcdHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRzaW5nbGVWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0dmFsdWVDb250YWluZXI6IFByb3BUeXBlcy5mdW5jLFxuXHR9ICksXG5cdHRhYkluZGV4OiBQcm9wVHlwZXMuc3RyaW5nLFxuXHR0YWJTZWxlY3RzVmFsdWU6IFByb3BUeXBlcy5ib29sLFxuXHR2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRdICksXG59O1xuXG5leHBvcnQgY29uc3QgUkVBQ1RfU0VMRUNUX0RFRkFVTFRTID0ge1xuXHRpc0NsZWFyYWJsZTogdHJ1ZSxcblx0aXNMb2FkaW5nOiB0cnVlLFxuXHRwbGFjZWhvbGRlcjogX18oICdTZWxlY3QuLi4nLCAnZXZlbnRfZXNwcmVzc28nICksXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0JztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgaXNFbXB0eSwgdW5pcXVlSWQsIGZpbmQsIGlzVW5kZWZpbmVkLCBpc0Z1bmN0aW9uLCBpc01hcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGlzU2hhbGxvd0VxdWFsIGZyb20gJ0B3b3JkcHJlc3MvaXMtc2hhbGxvdy1lcXVhbCc7XG5cbi8qKlxuICogV1AgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IGJ1aWxkT3B0aW9ucyBmcm9tICcuL2J1aWxkLW9wdGlvbnMnO1xuaW1wb3J0IHsgTU9ERUxfTkFNRVMgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXRhL21vZGVsL2luZGV4JztcbmltcG9ydCB7XG5cdFJFQUNUX1NFTEVDVF9ERUZBVUxUUyxcblx0UkVBQ1RfU0VMRUNUX1RZUEVTLFxufSBmcm9tICcuL2RlZmF1bHQtc2VsZWN0LWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG5cdFFVRVJZX09SREVSX0RFU0MsXG59IGZyb20gJy4uLy4uLy4uLy4uL2RhdGEvbW9kZWwvYmFzZSc7XG5cbi8qKlxuICogTW9kZWxTZWxlY3QgY29tcG9uZW50LlxuICogVGhpcyBpcyBhIGNvbXBvbmVudCB0aGF0IHdpbGwgZ2VuZXJhdGUgYSByZWFjdC1zZWxlY3QgaW5wdXQgZm9yIGEgZ2l2ZW5cbiAqIG1vZGVsIGFuZCBpdHMgZW50aXRpZXMgKHByb3ZpZGVkIHZpYSBwcm9wcykuXG4gKlxuICogQHNlZSBodHRwczovL2RlcGxveS1wcmV2aWV3LTIyODktLXJlYWN0LXNlbGVjdC5uZXRsaWZ5LmNvbS9wcm9wcyNwcm9wLXR5cGVzXG4gKiAgIGZvciBvcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0aHJvdWdoIHZpYSB0aGUgc2VsZWN0Q29uZmlndXJhdGlvbiBwcm9wLlxuICpcbiAqIEBwYXJhbSB7IE9iamVjdCB9IHNlbGVjdENvbmZpZ3VyYXRpb24gXHRBbiBvYmplY3QgY29udGFpbmluZyBvcHRpb25zIGZvciB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3Qtc2VsZWN0IGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7IEFycmF5IH0gbW9kZWxFbnRpdGllcyAgICAgICAgICBcdEFycmF5IG9mIG1vZGVsIGVudGl0aWVzXG4gKiBAcGFyYW0geyBzdHJpbmcgfSBtb2RlbE5hbWUgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBNb2RlbCB0aGUgZW50aXRpZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVsb25nIHRvLlxuICogQHBhcmFtIHsgZnVuY3Rpb24gfSBtYXBPcHRpb25zQ2FsbGJhY2sgIFx0VGhpcyBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgYnkgZGVmYXVsdFxuICogXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZSBtb2RlbEVudGl0aWVzIGFuZCBvcHRpb25zRW50aXR5TWFwLFxuICogXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFuZCBpcyBleHBlY3RlZCB0byByZXR1cm4gYW4gYXJyYXkgb2Ygb3B0aW9uc1xuICogXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvIGJlIHVzZWQgZm9yIHRoZSByZWFjdC1zZWxlY3QgY29tcG9uZW50LlxuICogQHBhcmFtIHsgT2JqZWN0IH0gb3B0aW9uc0VudGl0eU1hcCAgICBcdE9iamVjdCBvZiBrZXkgdmFsdWUgcGFpcnMgd2hlcmUgdmFsdWVzIGFyZSB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0J2xhYmVsOnZhbHVlJyBwYWlyaW5ncyB1c2VkIGJ5IGBtYXBPcHRpb25zQ2FsbGJhY2tgXG4gKiBAcGFyYW0geyBzdHJpbmcgfSBtYXBTZWxlY3Rpb24gICAgICAgIFx0RGV0ZXJtaW5lcyB3aGljaCBvcHRpb25FbnRpdHlNYXAgcGFpcmluZyB0byB1c2VcbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGVsU2VsZWN0IGV4dGVuZHMgQ29tcG9uZW50IHtcblx0c3RhdGUgPSB7fTtcblxuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdHNlbGVjdENvbmZpZ3VyYXRpb246IFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdFx0Li4uUkVBQ1RfU0VMRUNUX1RZUEVTLFxuXHRcdH0gKSxcblx0XHRtb2RlbEVudGl0aWVzOiBQcm9wVHlwZXMuYXJyYXksXG5cdFx0bW9kZWxOYW1lOiBQcm9wVHlwZXMub25lT2YoIE1PREVMX05BTUVTICkuaXNSZXF1aXJlZCxcblx0XHRtYXBPcHRpb25zQ2FsbGJhY2s6IFByb3BUeXBlcy5mdW5jLFxuXHRcdG9wdGlvbnNFbnRpdHlNYXA6IFByb3BUeXBlcy5vYmplY3QsXG5cdFx0bWFwU2VsZWN0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRcdG9yZGVyQnk6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRvcmRlcjogUHJvcFR5cGVzLm9uZU9mKCBBTExPV0VEX09SREVSX1ZBTFVFUyApLFxuXHRcdH0gKSxcblx0XHRnZXRRdWVyeVN0cmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0bGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cdH07XG5cblx0c3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcblx0XHRzZWxlY3RDb25maWd1cmF0aW9uOiB7XG5cdFx0XHQuLi5SRUFDVF9TRUxFQ1RfREVGQVVMVFMsXG5cdFx0XHRuYW1lOiB1bmlxdWVJZCggJ21vZGVsLXNlbGVjdC0nICksXG5cdFx0fSxcblx0XHRtb2RlbEVudGl0aWVzOiBbXSxcblx0XHRtYXBPcHRpb25zQ2FsbGJhY2s6IGJ1aWxkT3B0aW9ucyxcblx0XHRtYXBTZWxlY3Rpb246ICdkZWZhdWx0Jyxcblx0XHRxdWVyeURhdGE6IHtcblx0XHRcdGxpbWl0OiAxMDAsXG5cdFx0XHRvcmRlcjogUVVFUllfT1JERVJfREVTQyxcblx0XHR9LFxuXHRcdGxhYmVsOiAnJyxcblx0XHRnZXRRdWVyeVN0cmluZzogKCkgPT4gJycsXG5cdH07XG5cblx0Y29uc3RydWN0b3IoIHByb3BzICkge1xuXHRcdHN1cGVyKCBwcm9wcyApO1xuXHRcdHRoaXMuc3RhdGUgPSBNb2RlbFNlbGVjdC5zZXRTdGF0ZUZyb21Qcm9wcyggcHJvcHMgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBzdGF0ZSBmcm9tIHByb3ZpZGVkIHByb3BzXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wc1xuXHQgKiBAcmV0dXJuIHt7XG5cdCAqIGlzQ2xlYXJhYmxlLFxuXHQgKiBpc0xvYWRpbmcsXG5cdCAqIHBsYWNlaG9sZGVyLFxuXHQgKiBvcHRpb25zOiAoKnxBcnJheSksXG5cdCAqIHZhbHVlOiAqXG5cdCAqIH19XG5cdCAqIE9iamVjdCB0byByZXBsYWNlIHN0YXRlLlxuXHQgKi9cblx0c3RhdGljIHNldFN0YXRlRnJvbVByb3BzKCBwcm9wcyApIHtcblx0XHRjb25zdCB7IHNlbGVjdENvbmZpZ3VyYXRpb24gfSA9IHByb3BzO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBNb2RlbFNlbGVjdC5nZXRPcHRpb25zKCBwcm9wcyApO1xuXHRcdGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBNb2RlbFNlbGVjdC5nZXRPcHRpb25PYmplY3RGb3JWYWx1ZShcblx0XHRcdHNlbGVjdENvbmZpZ3VyYXRpb24uZGVmYXVsdFZhbHVlLCBvcHRpb25zXG5cdFx0KTtcblx0XHRjb25zdCB1cGRhdGVkID0ge1xuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHZhbHVlOiBzZWxlY3RlZFZhbHVlLFxuXHRcdH07XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uUkVBQ1RfU0VMRUNUX0RFRkFVTFRTLFxuXHRcdFx0Li4uc2VsZWN0Q29uZmlndXJhdGlvbixcblx0XHRcdC4uLnVwZGF0ZWQsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHVwIG9wdGlvbnMgZm9yIHRoZSBzZWxlY3QgY29udHJvbCBmcm9tIHRoZSBpbmNvbWluZyBwcm9wcy5cblx0ICogQHBhcmFtIHtPYmplY3R9IHByb3BzXG5cdCAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IEFycmF5IG9mIG9wdGlvbnMgZm9yIHNlbGVjdCBjb250cm9sXG5cdCAqL1xuXHRzdGF0aWMgZ2V0T3B0aW9ucyggcHJvcHMgKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0bWFwT3B0aW9uc0NhbGxiYWNrLFxuXHRcdFx0bW9kZWxFbnRpdGllcyxcblx0XHRcdG9wdGlvbnNFbnRpdHlNYXAsXG5cdFx0XHRtYXBTZWxlY3Rpb24sXG5cdFx0fSA9IHByb3BzO1xuXHRcdGlmICggaXNGdW5jdGlvbiggbWFwT3B0aW9uc0NhbGxiYWNrICkgJiYgISBpc0VtcHR5KCBtb2RlbEVudGl0aWVzICkgKSB7XG5cdFx0XHRyZXR1cm4gbWFwT3B0aW9uc0NhbGxiYWNrKFxuXHRcdFx0XHRtb2RlbEVudGl0aWVzLFxuXHRcdFx0XHRvcHRpb25zRW50aXR5TWFwLFxuXHRcdFx0XHRtYXBTZWxlY3Rpb25cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHaXZlbiBhIHZhbHVlLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbiBvYmplY3QuXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge09iamVjdHxudWxsfSBUaGUgb3B0aW9uIG9iamVjdCBmb3IgdGhlIGdpdmVuIHZhbHVlIG9yIG51bGwuXG5cdCAqL1xuXHRzdGF0aWMgZ2V0T3B0aW9uT2JqZWN0Rm9yVmFsdWUoIHZhbHVlLCBvcHRpb25zICkge1xuXHRcdGlmICggISBpc0VtcHR5KCBvcHRpb25zICkgKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IGZpbmQoIG9wdGlvbnMsIGZ1bmN0aW9uKCBvcHRpb24gKSB7XG5cdFx0XHRcdHJldHVybiBvcHRpb24udmFsdWUgPT09IHZhbHVlO1xuXHRcdFx0fSApO1xuXHRcdFx0cmV0dXJuICEgaXNVbmRlZmluZWQoIG1hdGNoICkgP1xuXHRcdFx0XHRtYXRjaCA6XG5cdFx0XHRcdG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgc3RhdGUgc2hvdWxkIGJlIHVwZGF0ZWQuXG5cdCAqIENyaXRlcmlhIGlzIHdoZXRoZXIgdGhlIGtleXMgZnJvbSB0aGUgaW5jb21pbmcgZW50aXRpZXMgYXJlIGVxdWl2YWxlbnRcblx0ICogKGVxdWl2YWxlbmN5IG1lYW5zIGluIHNhbWUgb3JkZXIgYXMgd2VsbClcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IHByZXZQcm9wc1xuXHQgKiBAcGFyYW0ge09iamVjdH0gbmV4dFByb3BzXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgbWVhbnMgc3RhdGUgc2hvdWxkIGJlIHVwZGF0ZWQuXG5cdCAqL1xuXHRzdGF0aWMgc2hvdWxkVXBkYXRlU3RhdGUoIHByZXZQcm9wcywgbmV4dFByb3BzICkge1xuXHRcdGlmICggcHJldlByb3BzID09PSBuZXh0UHJvcHMgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgeyBzZWxlY3RDb25maWd1cmF0aW9uOiBwcmV2Q29uZmlndXJhdGlvbiB9ID0gcHJldlByb3BzO1xuXHRcdGNvbnN0IHsgc2VsZWN0Q29uZmlndXJhdGlvbjogbmV4dENvbmZpZ3VyYXRpb24gfSA9IG5leHRQcm9wcztcblxuXHRcdC8vIGlmIGRlZmF1bHRWYWx1ZSBoYXMgY2hhbmdlZCAoc2VsZWN0ZWQgdmFsdWUpIHRoZW4gdXBkYXRlIHN0YXRlXG5cdFx0aWYgKFxuXHRcdFx0cHJldkNvbmZpZ3VyYXRpb24uZGVmYXVsdFZhbHVlICE9PSBuZXh0Q29uZmlndXJhdGlvbi5kZWZhdWx0VmFsdWVcblx0XHQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggcHJldkNvbmZpZ3VyYXRpb24uaXNMb2FkaW5nICE9PSBuZXh0Q29uZmlndXJhdGlvbi5pc0xvYWRpbmcgKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBzaGFsbG93IGNvbXBhcmUgb2Yga2V5cyBidXQgb25seSBpZiB3ZSBjYW5cblx0XHRpZiAoXG5cdFx0XHQhIGlzTWFwKCBwcmV2UHJvcHMubW9kZWxFbnRpdGllcyApIHx8XG5cdFx0XHQhIGlzTWFwKCBuZXh0UHJvcHMubW9kZWxFbnRpdGllcyApXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHQhIGlzU2hhbGxvd0VxdWFsKFxuXHRcdFx0XHRBcnJheS5mcm9tKCBwcmV2UHJvcHMubW9kZWxFbnRpdGllcy5rZXlzKCkgKSxcblx0XHRcdFx0QXJyYXkuZnJvbSggbmV4dFByb3BzLm1vZGVsRW50aXRpZXMua2V5cygpIClcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdGNvbXBvbmVudERpZE1vdW50KCkge1xuXHRcdHRoaXMuc2V0U3RhdGUoXG5cdFx0XHRNb2RlbFNlbGVjdC5zZXRTdGF0ZUZyb21Qcm9wcyggdGhpcy5wcm9wcyApXG5cdFx0KTtcblx0fVxuXG5cdGNvbXBvbmVudERpZFVwZGF0ZSggcHJldlByb3BzICkge1xuXHRcdGlmICggTW9kZWxTZWxlY3Quc2hvdWxkVXBkYXRlU3RhdGUoIHByZXZQcm9wcywgdGhpcy5wcm9wcyApICkge1xuXHRcdFx0dGhpcy5zZXRTdGF0ZShcblx0XHRcdFx0TW9kZWxTZWxlY3Quc2V0U3RhdGVGcm9tUHJvcHMoIHRoaXMucHJvcHMgKVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBzZWxlY3QgY29udHJvbFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBsYWJlbCB0byB1c2UuXG5cdCAqL1xuXHRnZXRTZWxlY3RMYWJlbCgpIHtcblx0XHRjb25zdCB7IGxhYmVsLCBzZWxlY3RDb25maWd1cmF0aW9uIH0gPSB0aGlzLnByb3BzO1xuXHRcdHJldHVybiBsYWJlbCA/XG5cdFx0XHQ8bGFiZWwgaHRtbEZvcj17IHNlbGVjdENvbmZpZ3VyYXRpb24ubmFtZSB9PnsgbGFiZWwgfTwvbGFiZWw+IDpcblx0XHRcdCcnO1xuXHR9XG5cblx0cmVuZGVyKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdHsgdGhpcy5nZXRTZWxlY3RMYWJlbCgpIH1cblx0XHRcdFx0PFNlbGVjdCB7IC4uLnRoaXMuc3RhdGUgfSAvPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIE1vZGVsU2VsZWN0IENvbXBvbmVudCB3cmFwcGVkIGluIHRoZSBgd2l0aFNlbGVjdGAgaGlnaGVyIG9yZGVyIGNvbXBvbmVudC5cbiAqIFRoaXMgc3Vic2NyaWJlcyB0aGUgTW9kZWxTZWxlY3QgY29tcG9uZW50IHRvIHRoZSBzdGF0ZSBtYWludGFpbmVkIHZpYSB0aGVcbiAqIGV2ZW50ZXNwcmVzc28vbGlzdHMgc3RvcmUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IHdpdGhTZWxlY3QoICggc2VsZWN0LCBvd25Qcm9wcyApID0+IHtcblx0Y29uc3QgeyBnZXRRdWVyeVN0cmluZywgbW9kZWxOYW1lLCBzZWxlY3RDb25maWd1cmF0aW9uIH0gPSBvd25Qcm9wcztcblx0Y29uc3QgcXVlcnlTdHJpbmcgPSBnZXRRdWVyeVN0cmluZyggb3duUHJvcHMucXVlcnlEYXRhICk7XG5cdGNvbnN0IHsgZ2V0RW50aXRpZXMsIGlzUmVxdWVzdGluZ0VudGl0aWVzIH0gPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2xpc3RzJyApO1xuXHRyZXR1cm4ge1xuXHRcdC4uLk1vZGVsU2VsZWN0LmRlZmF1bHRQcm9wcyxcblx0XHQuLi5vd25Qcm9wcyxcblx0XHRtb2RlbEVudGl0aWVzOiBnZXRFbnRpdGllcyggbW9kZWxOYW1lLCBxdWVyeVN0cmluZyApLFxuXHRcdHNlbGVjdENvbmZpZ3VyYXRpb246IHtcblx0XHRcdC4uLk1vZGVsU2VsZWN0LmRlZmF1bHRQcm9wcy5zZWxlY3RDb25maWd1cmF0aW9uLFxuXHRcdFx0Li4uc2VsZWN0Q29uZmlndXJhdGlvbixcblx0XHRcdGlzTG9hZGluZzogaXNSZXF1ZXN0aW5nRW50aXRpZXMoIG1vZGVsTmFtZSwgcXVlcnlTdHJpbmcgKSxcblx0XHR9LFxuXHR9O1xufSApKCBNb2RlbFNlbGVjdCApO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHVwcGVyRmlyc3QsIGNhbWVsQ2FzZSB9IGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogUmV0dXJuIGEgbmFtZSBmb3IgYSBtb2RlbCBzZWxlY3QgY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gUmVjZWl2ZXMgc29tZXRoaW5nIGxpa2UgJ21lc3NhZ2VfdGVtcGxhdGUnIGFuZCByZXR1cm5zXG4gKiBNZXNzYWdlVGVtcGxhdGVTZWxlY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG1vZGVsU2VsZWN0TmFtZSA9ICggbW9kZWxOYW1lICkgPT4ge1xuXHRyZXR1cm4gdXBwZXJGaXJzdCggY2FtZWxDYXNlKCBtb2RlbE5hbWUgKSApICsgJ1NlbGVjdCc7XG59O1xuIiwiZXhwb3J0IHsgTW9kZWxTZWxlY3QsIGRlZmF1bHQgYXMgTW9kZWxFbmhhbmNlZFNlbGVjdCB9IGZyb20gJy4vYmFzZS9tb2RlbC1zZWxlY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlL2J1aWxkLW9wdGlvbnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVNb2RlbFNlbGVjdCB9IGZyb20gJy4vYmFzZS9jcmVhdGUtbW9kZWwtc2VsZWN0JztcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY3JlYXRlTW9kZWxTZWxlY3QgZnJvbSAnLi4vYmFzZS9jcmVhdGUtbW9kZWwtc2VsZWN0JztcbmltcG9ydCB7IGRhdGVUaW1lTW9kZWwgYXMgbW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXRhL21vZGVsJztcbmltcG9ydCB7IHdpdGhCYXNlQ29udHJvbCB9IGZyb20gJy4uLy4uLy4uLy4uL2hpZ2hlci1vcmRlci1jb21wb25lbnRzJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5jb25zdCBvcHRpb25zRW50aXR5TWFwID0ge1xuXHRkZWZhdWx0OiB7XG5cdFx0dmFsdWU6ICdEVFRfSUQnLFxuXHRcdGxhYmVsOiAoIGVudGl0eSApID0+IHtcblx0XHRcdHJldHVybiBtb2RlbC5wcmV0dHlEYXRlRnJvbURhdGVUaW1lKCBlbnRpdHkgKTtcblx0XHR9LFxuXHR9LFxuXHRuYW1lOiB7XG5cdFx0dmFsdWU6ICdEVFRfSUQnLFxuXHRcdGxhYmVsOiAnRFRUX25hbWUnLFxuXHR9LFxufTtcblxuY29uc3QgRGF0ZXRpbWVTZWxlY3QgPSBjcmVhdGVNb2RlbFNlbGVjdChcblx0bW9kZWwuTU9ERUxfTkFNRSxcblx0e1xuXHRcdHNlbGVjdENvbmZpZ3VyYXRpb246IHtcblx0XHRcdGxvYWRpbmdNZXNzYWdlOiAoKSA9PiBfXyggJ1JldHJpZXZpbmcgRGF0ZXRpbWVzLicsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdG5vT3B0aW9uc01lc3NhZ2U6ICgpID0+IF9fKFxuXHRcdFx0XHQnTm8gRGF0ZXRpbWVzLicsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHQpLFxuXHRcdFx0cGxhY2Vob2xkZXI6IF9fKCAnU2VsZWN0IERhdGV0aW1lLi4uJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdH0sXG5cdFx0Li4ubW9kZWwuZGVmYXVsdFF1ZXJ5RGF0YSxcblx0XHRnZXRRdWVyeVN0cmluZzogbW9kZWwuZ2V0UXVlcnlTdHJpbmcsXG5cdFx0bGFiZWw6IF9fKCAnU2VsZWN0IERhdGV0aW1lJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdG9wdGlvbnNFbnRpdHlNYXAsXG5cdH0sXG5cdHtcblx0XHQuLi5tb2RlbC5xdWVyeURhdGFUeXBlcyxcblx0XHRvcHRpb25zRW50aXR5TWFwOiBQcm9wVHlwZXMub2JqZWN0LFxuXHR9XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBEYXRldGltZVNlbGVjdDtcblxuLyoqXG4gKiBFbmhhbmNlZCBEYXRldGltZSBTZWxlY3QgZm9yIHRoZSBXb3JkUHJlc3MgZWRpdG9yXG4gKi9cbmV4cG9ydCBjb25zdCBFZGl0b3JEYXRldGltZVNlbGVjdCA9IHdpdGhCYXNlQ29udHJvbChcblx0J3NlbGVjdC1kYXRldGltZSdcbikoIERhdGV0aW1lU2VsZWN0ICk7XG4iLCIvKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IGNyZWF0ZU1vZGVsU2VsZWN0IGZyb20gJy4uL2Jhc2UvY3JlYXRlLW1vZGVsLXNlbGVjdCc7XG5pbXBvcnQgeyBldmVudE1vZGVsIGFzIG1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGF0YS9tb2RlbCc7XG5pbXBvcnQgeyB3aXRoQmFzZUNvbnRyb2wgfSBmcm9tICcuLi8uLi8uLi8uLi9oaWdoZXItb3JkZXItY29tcG9uZW50cyc7XG5cbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuXG5jb25zdCBvcHRpb25zRW50aXR5TWFwID0ge1xuXHRkZWZhdWx0OiB7XG5cdFx0dmFsdWU6ICdFVlRfSUQnLFxuXHRcdGxhYmVsOiAnRVZUX25hbWUnLFxuXHR9LFxufTtcblxuY29uc3QgRXZlbnRTZWxlY3QgPSBjcmVhdGVNb2RlbFNlbGVjdChcblx0bW9kZWwuTU9ERUxfTkFNRSxcblx0e1xuXHRcdHNlbGVjdENvbmZpZ3VyYXRpb246IHtcblx0XHRcdGxvYWRpbmdNZXNzYWdlOiAoKSA9PiBfXyggJ1JldHJpZXZpbmcgRXZlbnRzLicsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdG5vT3B0aW9uc01lc3NhZ2U6ICgpID0+IF9fKFxuXHRcdFx0XHQnTm8gRXZlbnRzLicsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHQpLFxuXHRcdFx0cGxhY2Vob2xkZXI6IF9fKCAnU2VsZWN0IEV2ZW50Li4uJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdH0sXG5cdFx0Li4ubW9kZWwuZGVmYXVsdFF1ZXJ5RGF0YSxcblx0XHRnZXRRdWVyeVN0cmluZzogbW9kZWwuZ2V0UXVlcnlTdHJpbmcsXG5cdFx0bGFiZWw6IF9fKCAnU2VsZWN0IEV2ZW50JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdG9wdGlvbnNFbnRpdHlNYXAsXG5cdH0sXG5cdHtcblx0XHQuLi5tb2RlbC5xdWVyeURhdGFUeXBlcyxcblx0fVxuKTtcblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRTZWxlY3Q7XG5cbi8qKlxuICogRW5oYW5jZWQgRXZlbnRTZWxlY3QgZm9yIHRoZSBXb3JkUHJlc3MgZWRpdG9yLlxuICovXG5leHBvcnQgY29uc3QgRWRpdG9yRXZlbnRTZWxlY3QgPSB3aXRoQmFzZUNvbnRyb2woXG5cdCdzZWxlY3QtZXZlbnQnXG4pKCBFdmVudFNlbGVjdCApO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBFdmVudFNlbGVjdCwgRWRpdG9yRXZlbnRTZWxlY3QgfSBmcm9tICcuL2V2ZW50JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGF0ZXRpbWVTZWxlY3QsIEVkaXRvckRhdGV0aW1lU2VsZWN0IH0gZnJvbSAnLi9kYXRldGltZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0YXR1c1NlbGVjdCwgRWRpdG9yU3RhdHVzU2VsZWN0IH0gZnJvbSAnLi9zdGF0dXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUaWNrZXRTZWxlY3QsIEVkaXRvclRpY2tldFNlbGVjdCB9IGZyb20gJy4vdGlja2V0JztcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY3JlYXRlTW9kZWxTZWxlY3QgZnJvbSAnLi4vYmFzZS9jcmVhdGUtbW9kZWwtc2VsZWN0JztcbmltcG9ydCB7IHN0YXR1c01vZGVsIGFzIG1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGF0YS9tb2RlbCc7XG5pbXBvcnQgeyB3aXRoQmFzZUNvbnRyb2wgfSBmcm9tICcuLi8uLi8uLi8uLi9oaWdoZXItb3JkZXItY29tcG9uZW50cyc7XG5cbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHN0YXR1c01vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG5jb25zdCBvcHRpb25zRW50aXR5TWFwID0ge1xuXHRkZWZhdWx0OiB7XG5cdFx0dmFsdWU6ICdTVFNfSUQnLFxuXHRcdGxhYmVsOiAoIHN0YXR1c0VudGl0eSApID0+IHN0YXR1c01vZGVsLnByZXR0eVN0YXR1cyhcblx0XHRcdHN0YXR1c0VudGl0eS5TVFNfSURcblx0XHQpLFxuXHR9LFxufTtcblxuLyoqXG4gKiBAdHlwZSB7TW9kZWxTZWxlY3RDb21wb25lbnR9XG4gKi9cbmNvbnN0IFN0YXR1c1NlbGVjdCA9IGNyZWF0ZU1vZGVsU2VsZWN0KFxuXHRtb2RlbC5NT0RFTF9OQU1FLFxuXHR7XG5cdFx0c2VsZWN0Q29uZmlndXJhdGlvbjoge1xuXHRcdFx0bG9hZGluZ01lc3NhZ2U6ICgpID0+IF9fKCAnUmV0cmlldmluZyBTdGF0dXNlcy4nLFxuXHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0KSxcblx0XHRcdG5vT3B0aW9uc01lc3NhZ2U6ICgpID0+IF9fKCAnTm8gU3RhdHVzZXMuJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0cGxhY2Vob2xkZXI6IF9fKCAnU2VsZWN0IFN0YXR1cy4uLicsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHR9LFxuXHRcdC4uLm1vZGVsLmRlZmF1bHRRdWVyeURhdGEsXG5cdFx0Z2V0UXVlcnlTdHJpbmc6IG1vZGVsLmdldFF1ZXJ5U3RyaW5nLFxuXHRcdGxhYmVsOiBfXyggJ1NlbGVjdCBTdGF0dXMnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0b3B0aW9uc0VudGl0eU1hcCxcblx0fSxcblx0e1xuXHRcdC4uLm1vZGVsLnF1ZXJ5RGF0YVR5cGVzLFxuXHRcdHNlbGVjdGVkOiBQcm9wVHlwZXMub25lT2YoXG5cdFx0XHRtb2RlbC5BTExfU1RBVFVTX0lEU1xuXHRcdCksXG5cdFx0b3B0aW9uc0VudGl0eU1hcDogUHJvcFR5cGVzLm9iamVjdCxcblx0fSxcbik7XG5cbmV4cG9ydCBkZWZhdWx0IFN0YXR1c1NlbGVjdDtcblxuLyoqXG4gKiBFbmhhbmNlZCBTdGF0dXMgU2VsZWN0IGZvciB0aGUgV29yZFByZXNzIGVkaXRvclxuICovXG5leHBvcnQgY29uc3QgRWRpdG9yU3RhdHVzU2VsZWN0ID0gd2l0aEJhc2VDb250cm9sKFxuXHQnc2VsZWN0LXN0YXR1cydcbikoIFN0YXR1c1NlbGVjdCApO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjcmVhdGVNb2RlbFNlbGVjdCBmcm9tICcuLi9iYXNlL2NyZWF0ZS1tb2RlbC1zZWxlY3QnO1xuaW1wb3J0IHsgdGlja2V0TW9kZWwgYXMgbW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXRhL21vZGVsJztcbmltcG9ydCB7IHdpdGhCYXNlQ29udHJvbCB9IGZyb20gJy4uLy4uLy4uLy4uL2hpZ2hlci1vcmRlci1jb21wb25lbnRzJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5jb25zdCBvcHRpb25zRW50aXR5TWFwID0ge1xuXHRkZWZhdWx0OiB7XG5cdFx0dmFsdWU6ICdUS1RfSUQnLFxuXHRcdGxhYmVsOiAnVEtUX25hbWUnLFxuXHR9LFxufTtcblxuY29uc3QgVGlja2V0U2VsZWN0ID0gY3JlYXRlTW9kZWxTZWxlY3QoXG5cdG1vZGVsLk1PREVMX05BTUUsXG5cdHtcblx0XHRzZWxlY3RDb25maWd1cmF0aW9uOiB7XG5cdFx0XHRsb2FkaW5nTWVzc2FnZTogKCkgPT4gX18oICdSZXRyaWV2aW5nIFRpY2tldHMuJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0bm9PcHRpb25zTWVzc2FnZTogKCkgPT4gX18oICdObyBUaWNrZXRzLicsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdHBsYWNlaG9sZGVyOiBfXyggJ1NlbGVjdCBUaWNrZXQuLi4nLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0fSxcblx0XHQuLi5tb2RlbC5kZWZhdWx0UXVlcnlEYXRhLFxuXHRcdGdldFF1ZXJ5U3RyaW5nOiBtb2RlbC5nZXRRdWVyeVN0cmluZyxcblx0XHRsYWJlbDogX18oICdTZWxlY3QgVGlja2V0JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdG9wdGlvbnNFbnRpdHlNYXAsXG5cdH0sXG5cdHtcblx0XHQuLi5tb2RlbC5xdWVyeURhdGFUeXBlcyxcblx0XHRvcHRpb25zRW50aXR5TWFwOiBQcm9wVHlwZXMub2JqZWN0LFxuXHR9XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBUaWNrZXRTZWxlY3Q7XG5cbi8qKlxuICogRW5oYW5jZWQgVGlja2V0IFNlbGVjdCBmb3IgdGhlIFdvcmRQcmVzcyBlZGl0b3JcbiAqL1xuZXhwb3J0IGNvbnN0IEVkaXRvclRpY2tldFNlbGVjdCA9IHdpdGhCYXNlQ29udHJvbChcblx0J3NlbGVjdC10aWNrZXQnXG4pKCBUaWNrZXRTZWxlY3QgKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfXywgX24sIHNwcmludGYgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7XG5cdGlzRmxvYXQgYXMgaXNWYWxpZEZsb2F0LFxuXHRpc0ludGVnZXIgYXMgaXNWYWxpZEludGVnZXIsXG5cdGlzTnVtZXJpYyBhcyBpc1ZhbGlkTnVtZXJpYyxcblx0ZmxvYXRMZXNzVGhhbk9yRXF1YWxUbyxcblx0c3RyaW5nTGVuZ3RoTGVzc1RoYW5PckVxdWFsVG8sXG5cdG51bWJlckxlc3NUaGFuT3JFcXVhbFRvLFxuXHRmbG9hdEdyZWF0ZXJUaGFuT3JFcXVhbFRvLFxuXHRzdHJpbmdMZW5ndGhHcmVhdGVyVGhhbk9yRXF1YWxUbyxcblx0bnVtYmVyR3JlYXRlclRoYW5PckVxdWFsVG8sXG59IGZyb20gJy4uLy4uLy4uL2RhdGEvaGVscGVycy92YWxpZGF0aW9ucyc7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge21peGVkfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfG51bGx9IGVycm9yIHN0cmluZyBvbiBmYWlsXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Zsb2F0ID0gKCB2YWx1ZSApID0+ICEgaXNWYWxpZEZsb2F0KCArdmFsdWUgKSA/XG5cdF9fKCAnVmFsdWUgbXVzdCBiZSBhIGZsb2F0JywgJ2V2ZW50X2VzcHJlc3NvJyApIDpcblx0bnVsbDtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bWl4ZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gZXJyb3Igc3RyaW5nIG9uIGZhaWxcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW50ZWdlciA9ICggdmFsdWUgKSA9PiAhIGlzVmFsaWRJbnRlZ2VyKCArdmFsdWUgKSA/XG5cdF9fKCAnVmFsdWUgbXVzdCBiZSBhbiBpbnRlZ2VyJywgJ2V2ZW50X2VzcHJlc3NvJyApIDpcblx0bnVsbDtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bWl4ZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfSBlcnJvciBzdHJpbmcgb24gZmFpbFxuICovXG5leHBvcnQgY29uc3QgaXNOdW1lcmljID0gKCB2YWx1ZSApID0+ICEgaXNWYWxpZE51bWVyaWMoICt2YWx1ZSApID9cblx0X18oICdWYWx1ZSBtdXN0IGJlIGEgbnVtYmVyJywgJ2V2ZW50X2VzcHJlc3NvJyApIDpcblx0bnVsbDtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bWl4ZWR9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9IGVycm9yIHN0cmluZyBvbiBmYWlsXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRjaGVzID0gKCBmaWVsZFZhbHVlLCBmaWVsZE5hbWUgKSA9PiAoIHZhbHVlVG9NYXRjaCApID0+XG5cdCEgdmFsdWVUb01hdGNoIHx8IGZpZWxkVmFsdWUgIT09IHZhbHVlVG9NYXRjaCA/XG5cdFx0c3ByaW50Zihcblx0XHRcdF9fKCAnVmFsdWUgc2hvdWxkIG1hdGNoICVzJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0ZmllbGROYW1lXG5cdFx0KSA6IG51bGw7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gZXJyb3Igc3RyaW5nIG9uIGZhaWxcbiAqL1xuZXhwb3J0IGNvbnN0IG1heEZsb2F0ID0gKCBtYXggKSA9PiAoIHZhbHVlICkgPT5cblx0ISBmbG9hdExlc3NUaGFuT3JFcXVhbFRvKCArbWF4LCArdmFsdWUgKSA/XG5cdFx0c3ByaW50Zihcblx0XHRcdF9uKFxuXHRcdFx0XHQnTnVtYmVyIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuICVmJyxcblx0XHRcdFx0J051bWJlciBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiAlZicsXG5cdFx0XHRcdG1heCxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0KSxcblx0XHRcdG1heFxuXHRcdCkgOiBudWxsO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IG1heFxuICogQHJldHVybiB7c3RyaW5nfG51bGx9IGVycm9yIHN0cmluZyBvbiBmYWlsXG4gKi9cbmV4cG9ydCBjb25zdCBtYXhMZW5ndGggPSAoIG1heCA9IDEwMjQgKSA9PiAoIHZhbHVlICkgPT4gKFxuXHQhIHN0cmluZ0xlbmd0aExlc3NUaGFuT3JFcXVhbFRvKCArbWF4LCB2YWx1ZSApID9cblx0XHRzcHJpbnRmKFxuXHRcdFx0X24oXG5cdFx0XHRcdCdWYWx1ZSBzaG91bGQgbm90IGV4Y2VlZCAlZCBjaGFyYWN0ZXIgaW4gbGVuZ3RoJyxcblx0XHRcdFx0J1ZhbHVlIHNob3VsZCBub3QgZXhjZWVkICVkIGNoYXJhY3RlcnMgaW4gbGVuZ3RoJyxcblx0XHRcdFx0bWF4LFxuXHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHQpLFxuXHRcdFx0bWF4XG5cdFx0KSA6IG51bGxcbik7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gZXJyb3Igc3RyaW5nIG9uIGZhaWxcbiAqL1xuZXhwb3J0IGNvbnN0IG1heE51bWJlciA9ICggbWF4ICkgPT4gKCB2YWx1ZSApID0+IChcblx0ISBudW1iZXJMZXNzVGhhbk9yRXF1YWxUbyggK21heCwgK3ZhbHVlICkgP1xuXHRcdHNwcmludGYoXG5cdFx0XHRfbihcblx0XHRcdFx0J051bWJlciBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiAlZCcsXG5cdFx0XHRcdCdOdW1iZXIgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gJWQnLFxuXHRcdFx0XHRtYXgsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdCksXG5cdFx0XHRtYXhcblx0XHQpIDogbnVsbFxuKTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cbiAqIEByZXR1cm4ge3N0cmluZ3xudWxsfSBlcnJvciBzdHJpbmcgb24gZmFpbFxuICovXG5leHBvcnQgY29uc3QgbWluRmxvYXQgPSAoIG1pbiApID0+ICggdmFsdWUgKSA9PiAoXG5cdCEgZmxvYXRHcmVhdGVyVGhhbk9yRXF1YWxUbyggK21pbiwgK3ZhbHVlICkgP1xuXHRcdHNwcmludGYoXG5cdFx0XHRfbihcblx0XHRcdFx0J051bWJlciBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiAlZicsXG5cdFx0XHRcdCdOdW1iZXIgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gJWYnLFxuXHRcdFx0XHRtaW4sXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdCksXG5cdFx0XHRtaW5cblx0XHQpIDogbnVsbFxuKTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cbiAqIEByZXR1cm4ge3N0cmluZ3xudWxsfSBlcnJvciBzdHJpbmcgb24gZmFpbFxuICovXG5leHBvcnQgY29uc3QgbWluTGVuZ3RoID0gKCBtaW4gPSAxICkgPT4gKCB2YWx1ZSApID0+IChcblx0ISBzdHJpbmdMZW5ndGhHcmVhdGVyVGhhbk9yRXF1YWxUbyggK21pbiwgdmFsdWUgKSA/XG5cdFx0c3ByaW50Zihcblx0XHRcdF9uKFxuXHRcdFx0XHQnVmFsdWUgc2hvdWxkIGJlIGF0IGxlYXN0ICVkIGNoYXJhY3RlciBpbiBsZW5ndGgnLFxuXHRcdFx0XHQnVmFsdWUgc2hvdWxkIGJlIGF0IGxlYXN0ICVkIGNoYXJhY3RlcnMgaW4gbGVuZ3RoJyxcblx0XHRcdFx0bWluLFxuXHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHQpLFxuXHRcdFx0bWluXG5cdFx0KSA6IG51bGxcbik7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbWluXG4gKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gZXJyb3Igc3RyaW5nIG9uIGZhaWxcbiAqL1xuZXhwb3J0IGNvbnN0IG1pbk51bWJlciA9ICggbWluICkgPT4gKCB2YWx1ZSApID0+IChcblx0ISBudW1iZXJHcmVhdGVyVGhhbk9yRXF1YWxUbyggK21pbiwgK3ZhbHVlICkgP1xuXHRcdHNwcmludGYoXG5cdFx0XHRfbihcblx0XHRcdFx0J051bWJlciBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiAlZCcsXG5cdFx0XHRcdCdOdW1iZXIgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gJWQnLFxuXHRcdFx0XHRtaW4sXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdCksXG5cdFx0XHRtaW5cblx0XHQpIDogbnVsbFxuKTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bWl4ZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gZXJyb3Igc3RyaW5nIG9uIGZhaWxcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0gKCB2YWx1ZSApID0+ICEgdmFsdWUgP1xuXHRfXyggJ1BsZWFzZSBlbnRlciBhIHZhbHVlJywgJ2V2ZW50X2VzcHJlc3NvJyApIDpcblx0bnVsbDtcblxuY29uc3QgdmFsaWRhdGlvbnMgPSB7XG5cdGlzRmxvYXQsXG5cdGlzSW50ZWdlcixcblx0aXNOdW1lcmljLFxuXHRtYXRjaGVzLFxuXHRtYXhGbG9hdCxcblx0bWF4TGVuZ3RoLFxuXHRtYXhOdW1iZXIsXG5cdG1pbkZsb2F0LFxuXHRtaW5MZW5ndGgsXG5cdG1pbk51bWJlcixcblx0cmVxdWlyZWQsXG59O1xuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGlvbnM7XG4iLCIvLyBxdWVyeSBjb21wb25lbnRzXG5leHBvcnQgeyBRdWVyeUxpbWl0IH0gZnJvbSAnLi9xdWVyeS9saW1pdCc7XG4vLyBzZWxlY3Rpb24gY29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtJztcbi8vIGdlbmVyYWwgdWkgY29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi91aSc7XG4vLyBvdGhlclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBFdmVudEF0dGVuZGVlTGlzdCB9IGZyb20gJy4vZXZlbnQtYXR0ZW5kZWVzJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICoqL1xuaW1wb3J0IHsgUmFuZ2VDb250cm9sLCBUZXh0Q29udHJvbCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5cbmNvbnN0IERFRkFVTFRfTElNSVQgPSAxMDtcbmNvbnN0IERFRkFVTFRfTEFCRUwgPSBfXyggJ0xpbWl0JywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuY29uc3QgREVGQVVMVF9NSU4gPSAxO1xuY29uc3QgREVGQVVMVF9NQVggPSAxMDAwO1xuXG5leHBvcnQgY29uc3QgUXVlcnlMaW1pdCA9ICgge1xuXHRvbkxpbWl0Q2hhbmdlLFxuXHRsaW1pdCA9IERFRkFVTFRfTElNSVQsXG5cdGxhYmVsID0gREVGQVVMVF9MQUJFTCxcblx0bWluID0gREVGQVVMVF9NSU4sXG5cdG1heCA9IERFRkFVTFRfTUFYLFxuXHR3aXRoU2xpZGVyID0gdHJ1ZSxcblx0Li4ucmVzdFxufSApID0+IHtcblx0cmV0dXJuIHdpdGhTbGlkZXIgP1xuXHRcdCggPFJhbmdlQ29udHJvbFxuXHRcdFx0a2V5PXsgJ3F1ZXJ5LWxpbWl0JyB9XG5cdFx0XHR2YWx1ZT17IGxpbWl0IH1cblx0XHRcdGxhYmVsPXsgbGFiZWwgfVxuXHRcdFx0bWluPXsgbWluIH1cblx0XHRcdG1heD17IG1heCB9XG5cdFx0XHRvbkNoYW5nZT17IG9uTGltaXRDaGFuZ2UgfVxuXHRcdFx0eyAuLi5yZXN0IH1cblx0XHQvPiApIDpcblx0XHQoIDxUZXh0Q29udHJvbFxuXHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHR2YWx1ZT17IGxpbWl0IH1cblx0XHRcdGxhYmVsPXsgbGFiZWwgfVxuXHRcdFx0bWluPXsgbWluIH1cblx0XHRcdG1heD17IG1heCB9XG5cdFx0XHRvbkNoYW5nZT17IG9uTGltaXRDaGFuZ2UgfVxuXHRcdFx0eyAuLi5yZXN0IH1cblx0XHQvPiApO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5pbXBvcnQgeyBFc3ByZXNzb0ljb24gfSBmcm9tICcuLi8uLi9pbWFnZS9lc3ByZXNzby1pY29uJztcblxuLyoqXG4gKiBEaXNwbGF5cyBhIGZ1bGwgY2FsZW5kYXIgZGF0ZSwgYnV0IFJFQUxMWSBCSUchISFcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3NpdGlvblxuICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlclRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb290ZXJUZXh0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkVkaXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlZGl0QnV0dG9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dUaW1lXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJlbmRlcmVkIGRhdGVcbiAqL1xuY29uc3QgQmlnZ2llQ2FsZW5kYXJEYXRlID0gKCB7XG5cdGRhdGUsXG5cdGh0bWxDbGFzcyxcblx0aGVhZGVyVGV4dCxcblx0Zm9vdGVyVGV4dCxcblx0cG9zaXRpb24gPSAnbGVmdCcsXG5cdG9uRWRpdCA9IG51bGwsXG5cdGVkaXRCdXR0b24gPSB7fSxcblx0c2hvd1RpbWUgPSBmYWxzZSxcbn0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGNsYXNzTmFtZXMoXG5cdFx0J2JpZ2dpZS1jYWxlbmRhci1kYXRlLWJnJyxcblx0XHRodG1sQ2xhc3MsXG5cdFx0e1xuXHRcdFx0J2JjZC1wb3MtbGVmdCc6IHBvc2l0aW9uID09PSAnbGVmdCcsXG5cdFx0XHQnYmNkLXBvcy1yaWdodCc6IHBvc2l0aW9uICE9PSAnbGVmdCdcblx0XHR9XG5cdCk7XG5cdGNvbnN0IGVkaXREYXRlQnV0dG9uID0gaXNGdW5jdGlvbiggb25FZGl0ICkgPyAoXG5cdFx0PEljb25CdXR0b25cblx0XHRcdGNsYXNzTmFtZT1cImVlLWVkaXQtY2FsZW5kYXItZGF0ZS1idG5cIlxuXHRcdFx0b25DbGljaz17ICggZXZlbnQgKSA9PiBvbkVkaXQoIGV2ZW50ICkgfVxuXHRcdFx0b25LZXlQcmVzcz17ICggZXZlbnQgKSA9PiBvbkVkaXQoIGV2ZW50ICkgfVxuXHRcdFx0dG9vbHRpcD17IGVkaXRCdXR0b24udG9vbHRpcCB9XG5cdFx0XHRsYWJlbFBvc2l0aW9uPXsgZWRpdEJ1dHRvbi50b29sdGlwUG9zaXRpb24gfVxuXHRcdFx0aWNvbj17IDxFc3ByZXNzb0ljb24gaWNvbj1cImNhbGVuZGFyXCIvPiB9XG5cdFx0Lz5cblx0KTogbnVsbDtcblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9PlxuXHRcdFx0e1xuXHRcdFx0XHRoZWFkZXJUZXh0ICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJpZ2dpZS1jYWxlbmRhci1kYXRlLWhlYWRlclwiPlxuXHRcdFx0XHRcdFx0eyBoZWFkZXJUZXh0IH1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fVxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJiaWdnaWUtY2FsZW5kYXItZGF0ZVwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndlZWtkYXlcIj5cblx0XHRcdFx0XHR7IGRhdGUudG9Gb3JtYXQoICdkZGRkJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwibW9udGhcIj5cblx0XHRcdFx0XHR7IGRhdGUudG9Gb3JtYXQoICdNTU1NJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwibW9udGgtZGF5LXNlcFwiPjwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImRheVwiPlxuXHRcdFx0XHRcdHsgZGF0ZS50b0Zvcm1hdCggJ0REJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwieWVhclwiPlxuXHRcdFx0XHRcdHsgZGF0ZS50b0Zvcm1hdCggJ1lZWVknICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0e1xuXHRcdFx0XHRcdHNob3dUaW1lICYmIChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtbWNkLXRpbWVcIj5cblx0XHRcdFx0XHRcdFx0eyBkYXRlLnRvRm9ybWF0KCAnaDptbSBhJyApIH1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0XHR7XG5cdFx0XHRcdGZvb3RlclRleHQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYmlnZ2llLWNhbGVuZGFyLWRhdGUtZm9vdGVyXCI+XG5cdFx0XHRcdFx0XHR7IGZvb3RlclRleHQgfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0XHR7IGVkaXREYXRlQnV0dG9uIH1cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cbkJpZ2dpZUNhbGVuZGFyRGF0ZS5wcm9wVHlwZXMgPSB7XG5cdGRhdGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5pbnN0YW5jZU9mKCBEYXRlVGltZSApXG5cdF0gKSxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRoZWFkZXJUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxuXHRmb290ZXJUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxuXHRvbkVkaXQ6IFByb3BUeXBlcy5mdW5jLFxuXHRlZGl0QnV0dG9uOiBQcm9wVHlwZXMub2JqZWN0LFxuXHRzaG93VGltZTogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBCaWdnaWVDYWxlbmRhckRhdGU7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiYmlnZ2llLWNhbGVuZGFyLWRhdGUtYmdcIjpcImJpZ2dpZS1jYWxlbmRhci1kYXRlLWJnXCIsXCJiY2QtcG9zLWxlZnRcIjpcImJjZC1wb3MtbGVmdFwiLFwiYmNkLXBvcy1yaWdodFwiOlwiYmNkLXBvcy1yaWdodFwiLFwiYmlnZ2llLWNhbGVuZGFyLWRhdGUtaGVhZGVyXCI6XCJiaWdnaWUtY2FsZW5kYXItZGF0ZS1oZWFkZXJcIixcImJpZ2dpZS1jYWxlbmRhci1kYXRlXCI6XCJiaWdnaWUtY2FsZW5kYXItZGF0ZVwiLFwid2Vla2RheVwiOlwid2Vla2RheVwiLFwibW9udGhcIjpcIm1vbnRoXCIsXCJtb250aC1kYXktc2VwXCI6XCJtb250aC1kYXktc2VwXCIsXCJkYXlcIjpcImRheVwiLFwieWVhclwiOlwieWVhclwiLFwiYmlnZ2llLWNhbGVuZGFyLWRhdGUtZm9vdGVyXCI6XCJiaWdnaWUtY2FsZW5kYXItZGF0ZS1mb290ZXJcIixcImVlLW1jZC10aW1lXCI6XCJlZS1tY2QtdGltZVwiLFwiZWUtc3RhdHVzLXRhZ1wiOlwiZWUtc3RhdHVzLXRhZ1wiLFwiZWUtZWRpdC1jYWxlbmRhci1kYXRlLWJ0blwiOlwiZWUtZWRpdC1jYWxlbmRhci1kYXRlLWJ0blwiLFwiaXMtZGVmYXVsdFwiOlwiaXMtZGVmYXVsdFwifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbHVlLW9iamVjdHMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcbmltcG9ydCBCaWdnaWVDYWxlbmRhckRhdGUgZnJvbSAnLi4vYmlnZ2llLWNhbGVuZGFyLWRhdGUnO1xuaW1wb3J0IE1lZGl1bUNhbGVuZGFyRGF0ZSBmcm9tICcuLi9tZWRpdW0tY2FsZW5kYXItZGF0ZSc7XG5cbi8qKlxuICogRGlzcGxheXMgYSBwYWlyIG9mIGNhbGVuZGFyIGRhdGVzIHJlcHJlc2VudGluZyBhIGRhdGUgcmFuZ2VcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7RGF0ZVRpbWV9IHN0YXJ0RGF0ZVxuICogQHBhcmFtIHtEYXRlVGltZX0gZW5kRGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlclRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb290ZXJUZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gcG9zaXRpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd1RpbWVcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZGF0ZVxuICovXG5jb25zdCBDYWxlbmRhckRhdGVSYW5nZSA9ICgge1xuXHRzdGFydERhdGUsXG5cdGVuZERhdGUsXG5cdGhlYWRlclRleHQgPSAnJyxcblx0Zm9vdGVyVGV4dCA9ICcnLFxuXHRodG1sQ2xhc3MgPSAnJyxcblx0cG9zaXRpb24gPSAnbGVmdCcsXG5cdHNob3dUaW1lID0gZmFsc2UsXG59ICkgPT4ge1xuXHRpZiAoXG5cdFx0c3RhcnREYXRlLnRvRm9ybWF0KCAnWVktTU0tREQnICkgIT09IGVuZERhdGUudG9Gb3JtYXQoICdZWS1NTS1ERCcgKVxuXHQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lZGl1bUNhbGVuZGFyRGF0ZVxuXHRcdFx0XHRkYXRlPXsgc3RhcnREYXRlIH1cblx0XHRcdFx0aHRtbENsYXNzPXsgaHRtbENsYXNzIH1cblx0XHRcdFx0cG9zaXRpb249eyBwb3NpdGlvbiB9XG5cdFx0XHRcdHNob3dUaW1lPXsgc2hvd1RpbWUgfVxuXHRcdFx0XHRhZGRXcmFwcGVyXG5cdFx0XHRcdGZvb3RlclRleHQ9e1xuXHRcdFx0XHRcdDxNZWRpdW1DYWxlbmRhckRhdGVcblx0XHRcdFx0XHRcdGtleT17ICdlbmQtZGF0ZScgfVxuXHRcdFx0XHRcdFx0ZGF0ZT17IGVuZERhdGUgfVxuXHRcdFx0XHRcdFx0aGVhZGVyVGV4dD17IF9fKCAndG8nLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0c2hvd1RpbWU9eyBzaG93VGltZSB9XG5cdFx0XHRcdFx0XHRmb290ZXJUZXh0PXsgZm9vdGVyVGV4dCB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0fVxuXHRcdFx0Lz5cblx0XHQpXG5cdH1cblx0bGV0IHRpbWUgPSBzdGFydERhdGUudG9Gb3JtYXQoICdoOm1tIGEgLSAnICk7XG5cdHRpbWUgKz0gZW5kRGF0ZS50b0Zvcm1hdCggJ2g6bW0gYScgKTtcblx0aGVhZGVyVGV4dCA9IGhlYWRlclRleHQgPyBoZWFkZXJUZXh0IDogPHNwYW4+Jm5ic3A7PC9zcGFuPjtcblx0cmV0dXJuIChcblx0XHQ8QmlnZ2llQ2FsZW5kYXJEYXRlXG5cdFx0XHRkYXRlPXsgc3RhcnREYXRlIH1cblx0XHRcdGh0bWxDbGFzcz17IGh0bWxDbGFzcyB9XG5cdFx0XHRoZWFkZXJUZXh0PXsgaGVhZGVyVGV4dCB9XG5cdFx0XHRmb290ZXJUZXh0PXsgWyB0aW1lLCBmb290ZXJUZXh0IF0gfVxuXHRcdFx0cG9zaXRpb249eyBwb3NpdGlvbiB9XG5cdFx0Lz5cblx0KTtcbn07XG5cbkNhbGVuZGFyRGF0ZVJhbmdlLnByb3BUeXBlcyA9IHtcblx0c3RhcnREYXRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRQcm9wVHlwZXMuaW5zdGFuY2VPZiggRGF0ZVRpbWUgKVxuXHRdICkuaXNSZXF1aXJlZCxcblx0ZW5kRGF0ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoIERhdGVUaW1lICkuaXNSZXF1aXJlZCxcblx0aGVhZGVyVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5hcnJheSxcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcblx0Zm9vdGVyVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5hcnJheSxcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRwb3NpdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblx0c2hvd1RpbWU6IFByb3BUeXBlcy5ib29sLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FsZW5kYXJEYXRlUmFuZ2U7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtY2FsZW5kYXItZGF0ZS1yYW5nZS13cmFwcGVyXCI6XCJlZS1jYWxlbmRhci1kYXRlLXJhbmdlLXdyYXBwZXJcIixcImNkci1wb3MtbGVmdFwiOlwiY2RyLXBvcy1sZWZ0XCIsXCJjZHItcG9zLXJpZ2h0XCI6XCJjZHItcG9zLXJpZ2h0XCIsXCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlclwiOlwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXJcIixcImVlLWNkci13ZWVrZGF5XCI6XCJlZS1jZHItd2Vla2RheVwiLFwiZWUtY2RyLW1vbnRoLWFuZC1kYXlcIjpcImVlLWNkci1tb250aC1hbmQtZGF5XCIsXCJlZS1jZHItZGF5XCI6XCJlZS1jZHItZGF5XCIsXCJlZS1jZHIteWVhclwiOlwiZWUtY2RyLXllYXJcIixcImVlLWNhbGVuZGFyLWRhdGUtcmFuZ2Utc2VwYXJhdG9yXCI6XCJlZS1jYWxlbmRhci1kYXRlLXJhbmdlLXNlcGFyYXRvclwiLFwiZWUtY2RyLXRpbWVcIjpcImVlLWNkci10aW1lXCIsXCJlZS1jYWxlbmRhci10aW1lLXNlcGFyYXRvclwiOlwiZWUtY2FsZW5kYXItdGltZS1zZXBhcmF0b3JcIixcImVlLWNhbGVuZGFyLWRhdGUtcmFuZ2UtZm9vdGVyXCI6XCJlZS1jYWxlbmRhci1kYXRlLXJhbmdlLWZvb3RlclwiLFwiZWUtY2FsZW5kYXItZGF0ZS1yYW5nZS1oZWFkZXJcIjpcImVlLWNhbGVuZGFyLWRhdGUtcmFuZ2UtaGVhZGVyXCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgU2VydmVyRGF0ZVRpbWUgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcbmltcG9ydCB7IGluc3RhbmNlT2YgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5cbi8qKlxuICogQ2FsZW5kYXJQYWdlRGF0ZVxuICogRGlzcGxheXMgYSBkYXRlIGFzIGlmIGl0IHdlcmUgYSBwYWdlIGZyb21cbiAqIG9uZSBvZiB0aG9zZSBtaW5pIGNhbGVuZGFycyB3aGVyZSBlYWNoIHBhZ2UgaXMgYSBkYXlcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7U2VydmVyRGF0ZVRpbWV9IHN0YXJ0RGF0ZSBcdERhdGVUaW1lIGRlZmluaW5nIHRoZSBzdGFydCBvZiBhbiBFdmVudFxuICogQHBhcmFtIHtTZXJ2ZXJEYXRlVGltZX0gZW5kRGF0ZSBcdERhdGVUaW1lIGRlZmluaW5nIHRoZSBlbmQgb2YgYW4gRXZlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0dXNDbGFzc1xuICogQHJldHVybiB7c3RyaW5nfSBcdFx0XHRUaGUgZGF0ZSByZW5kZXJlZCB0byBsb29rIGxpa2UgYSBjYWxlbmRhciBwYWdlXG4gKi9cbmNsYXNzIENhbGVuZGFyUGFnZURhdGUgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdHN0YXJ0RGF0ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRcdFByb3BUeXBlcy5pbnN0YW5jZU9mKCBTZXJ2ZXJEYXRlVGltZSApLFxuXHRcdF0gKSxcblx0XHRlbmREYXRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFx0UHJvcFR5cGVzLmluc3RhbmNlT2YoIFNlcnZlckRhdGVUaW1lICksXG5cdFx0XSApLFxuXHRcdHNpemU6IFByb3BUeXBlcy5vbmVPZiggWyAndGlueScsICdzbWFsbCcsICdtZWRpdW0nLCAnYmlnJyBdICksXG5cdFx0c3RhdHVzQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdH07XG5cblx0LyoqXG5cdCAqIFN0YXJ0RGF0ZVxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtTZXJ2ZXJEYXRlVGltZX0gc3RhcnREYXRlIG9iamVjdFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzQ2xhc3Ncblx0ICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RhcnQgZGF0ZSBmb3JtYXR0ZWQgdG8gbG9vayBsaWtlIGEgY2FsZW5kYXIgcGFnZVxuXHQgKi9cblx0Z2V0U3RhcnREYXRlID0gKCBzdGFydERhdGUsIHN0YXR1c0NsYXNzICkgPT4ge1xuXHRcdHJldHVybiBpbnN0YW5jZU9mKCBzdGFydERhdGUsICdTZXJ2ZXJEYXRlVGltZScgKSA/IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXItc3RhcnRcIiA+XG5cdFx0XHRcdHsgdGhpcy5yZW5kZXJDYWxlbmRhclBhZ2UoIHN0YXJ0RGF0ZSwgc3RhdHVzQ2xhc3MgKSB9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpIDogbnVsbDtcblx0fTtcblxuXHQvKipcblx0ICogRW5kRGF0ZVxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtTZXJ2ZXJEYXRlVGltZX0gZW5kRGF0ZSBvYmplY3Rcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1c0NsYXNzXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGVuZCBkYXRlIGZvcm1hdHRlZCB0byBsb29rIGxpa2UgYSBjYWxlbmRhciBwYWdlXG5cdCAqL1xuXHRnZXRFbmREYXRlID0gKCBlbmREYXRlLCBzdGF0dXNDbGFzcyApID0+IHtcblx0XHRyZXR1cm4gaW5zdGFuY2VPZiggZW5kRGF0ZSwgJ1NlcnZlckRhdGVUaW1lJyApID8gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1lbmRcIiA+XG5cdFx0XHRcdHsgdGhpcy5yZW5kZXJDYWxlbmRhclBhZ2UoIGVuZERhdGUsIHN0YXR1c0NsYXNzLCAnZW5kJyApIH1cblx0XHRcdDwvZGl2PlxuXHRcdCkgOiBudWxsO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBnZXREaXZpZGVyXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge1NlcnZlckRhdGVUaW1lfSBzdGFydERhdGUgb2JqZWN0XG5cdCAqIEBwYXJhbSB7U2VydmVyRGF0ZVRpbWV9IGVuZERhdGUgb2JqZWN0XG5cdCAqIEByZXR1cm4ge3N0cmluZ30gYSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlXG5cdCAqL1xuXHRnZXREaXZpZGVyID0gKCBzdGFydERhdGUsIGVuZERhdGUgKSA9PiB7XG5cdFx0cmV0dXJuIHN0YXJ0RGF0ZSAmJiBlbmREYXRlID8gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtdG9cIj5cblx0XHRcdFx0eyBfXyggJ1RPJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdDwvZGl2PlxuXHRcdCkgOiBudWxsO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiByZW5kZXJDYWxlbmRhclBhZ2Vcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7U2VydmVyRGF0ZVRpbWV9IGRhdGUgb2JqZWN0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0dXNDbGFzc1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhcnRPckVuZCB3aGV0aGVyIGRhdGUgaXMgYSBzdGFydCBkYXRlIG9yIGVuZCBkYXRlXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGRheSBmb3JtYXR0ZWQgdG8gbG9vayBsaWtlIGEgY2FsZW5kYXIgcGFnZVxuXHQgKi9cblx0cmVuZGVyQ2FsZW5kYXJQYWdlID0gKCBkYXRlLCBzdGF0dXNDbGFzcywgc3RhcnRPckVuZCA9ICdzdGFydCcgKSA9PiB7XG5cdFx0Y29uc3QgcGFnZUNsYXNzID0gY2xhc3NOYW1lcygge1xuXHRcdFx0J2VlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1wYWdlJzogdHJ1ZSxcblx0XHRcdFsgYGVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS0keyBzdGFydE9yRW5kIH1gIF06IHRydWUsXG5cdFx0XHRbIHN0YXR1c0NsYXNzIF06IHN0YXR1c0NsYXNzICE9PSAnJyxcblx0XHR9ICk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUb29sdGlwIHRleHQ9eyBkYXRlLnRvRm9ybWF0KCAnTExMTCcgKSB9ID5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyBwYWdlQ2xhc3MgfSA+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyAnZWUtY2FsZW5kYXItcGFnZS1kYXRlLW1vbnRoJyB9PlxuXHRcdFx0XHRcdFx0eyBkYXRlLnRvRm9ybWF0KCAnTU1NJyApIH1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17ICdlZS1jYWxlbmRhci1wYWdlLWRhdGUtZGF5JyB9PlxuXHRcdFx0XHRcdFx0eyBkYXRlLnRvRm9ybWF0KCAnREQnICkgfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvVG9vbHRpcD5cblx0XHQpO1xuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRzdGFydERhdGUgPSBudWxsLFxuXHRcdFx0ZW5kRGF0ZSA9IG51bGwsXG5cdFx0XHRzaXplID0gJ3NtYWxsJyxcblx0XHRcdHN0YXR1c0NsYXNzID0gJycsXG5cdFx0XHQuLi5vdGhlclByb3BzXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0Y29uc3QgaHRtbENsYXNzID0gY2xhc3NOYW1lcygge1xuXHRcdFx0J2VlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVyJzogdHJ1ZSxcblx0XHRcdFsgYGVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS0keyBzaXplIH1gIF06IHRydWUsXG5cblx0XHR9ICk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0geyAuLi5vdGhlclByb3BzIH0gPlxuXHRcdFx0XHR7IHRoaXMuZ2V0U3RhcnREYXRlKCBzdGFydERhdGUsIHN0YXR1c0NsYXNzICkgfVxuXHRcdFx0XHR7IHRoaXMuZ2V0RGl2aWRlciggc3RhcnREYXRlLCBlbmREYXRlICkgfVxuXHRcdFx0XHR7IHRoaXMuZ2V0RW5kRGF0ZSggZW5kRGF0ZSwgc3RhdHVzQ2xhc3MgKSB9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbGVuZGFyUGFnZURhdGU7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXJcIjpcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVyXCIsXCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtdGlueVwiOlwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXRpbnlcIixcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVyLWVuZFwiOlwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXItZW5kXCIsXCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1zdGFydFwiOlwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXItc3RhcnRcIixcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1zbWFsbFwiOlwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXNtYWxsXCIsXCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtbWVkaXVtXCI6XCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtbWVkaXVtXCIsXCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtYmlnXCI6XCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtYmlnXCIsXCJlZS1jYWxlbmRhci1wYWdlLWRhdGUtbW9udGhcIjpcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1tb250aFwiLFwiZWUtbm8tc3RhdHVzLWNsYXNzXCI6XCJlZS1uby1zdGF0dXMtY2xhc3NcIixcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1kYXlcIjpcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1kYXlcIixcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS10b1wiOlwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXRvXCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbHVlLW9iamVjdHMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcblxuLyoqXG4gKiBEaXNwbGF5cyBhIGZ1bGwgY2FsZW5kYXIgZGF0ZS4uLiBqdXN0IG5vdCBzbyBiaWdseVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlclRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb290ZXJUZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gcG9zaXRpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkV3JhcHBlclxuICogQHBhcmFtIHtib29sZWFufSBzaG93VGltZVxuICogQHJldHVybiB7c3RyaW5nfSByZW5kZXJlZCBkYXRlXG4gKi9cbmNvbnN0IE1lZGl1bUNhbGVuZGFyRGF0ZSA9ICgge1xuXHRkYXRlLFxuXHRoZWFkZXJUZXh0LFxuXHRmb290ZXJUZXh0LFxuXHRodG1sQ2xhc3MgPSAnJyxcblx0cG9zaXRpb24gPSAnbGVmdCcsXG5cdGFkZFdyYXBwZXIgPSBmYWxzZSxcblx0c2hvd1RpbWUgPSBmYWxzZSxcbn0gKSA9PiB7XG5cblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcyhcblx0XHRodG1sQ2xhc3MsXG5cdFx0J2VlLW1lZGl1bS1jYWxlbmRhci1kYXRlLXdyYXBwZXInLFxuXHRcdHtcblx0XHRcdCdlZS1tY2QtcG9zLWxlZnQnOiBwb3NpdGlvbiA9PT0gJ2xlZnQnLFxuXHRcdFx0J2VlLW1jZC1wb3MtcmlnaHQnOiBwb3NpdGlvbiAhPT0gJ2xlZnQnXG5cdFx0fVxuXHQpO1xuXHRjb25zdCBtZWRpdW1EYXRlID0gKFxuXHRcdDxGcmFnbWVudD5cblx0XHRcdHtcblx0XHRcdFx0aGVhZGVyVGV4dCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1tZWRpdW0tY2FsZW5kYXItZGF0ZS1oZWFkZXJcIj5cblx0XHRcdFx0XHRcdHsgaGVhZGVyVGV4dCB9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGVcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1tY2Qtd2Vla2RheVwiPlxuXHRcdFx0XHRcdHsgZGF0ZS50b0Zvcm1hdCggJ2RkZGQnICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1tY2QtbW9udGgtZGF5XCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtbWNkLW1vbnRoXCI+XG5cdFx0XHRcdFx0XHR7IGRhdGUudG9Gb3JtYXQoICdNTU0nICkgfVxuXHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1tY2QtZGF5XCI+XG5cdFx0XHRcdFx0XHR7IGRhdGUudG9Gb3JtYXQoICdERCcgKSB9XG5cdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1tY2QteWVhclwiPlxuXHRcdFx0XHRcdHsgZGF0ZS50b0Zvcm1hdCggJ1lZWVknICkgfVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0c2hvd1RpbWUgJiYgKFxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtbWNkLXRpbWVcIj5cblx0XHRcdFx0XHRcdFx0Jm5ic3A7eyBkYXRlLnRvRm9ybWF0KCAnaDptbSBhJyApIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRmb290ZXJUZXh0ICYmIChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUtZm9vdGVyXCI+XG5cdFx0XHRcdFx0XHRcdHsgZm9vdGVyVGV4dCB9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH1cblx0XHRcdDwvZGl2PlxuXHRcdDwvRnJhZ21lbnQ+XG5cdCk7XG5cdHJldHVybiBhZGRXcmFwcGVyID8gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0+eyBtZWRpdW1EYXRlIH08L2Rpdj5cblx0KSA6IG1lZGl1bURhdGU7XG59O1xuXG5NZWRpdW1DYWxlbmRhckRhdGUucHJvcFR5cGVzID0ge1xuXHRkYXRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XHRQcm9wVHlwZXMuaW5zdGFuY2VPZiggRGF0ZVRpbWUgKVxuXHRdICkuaXNSZXF1aXJlZCxcblx0aGVhZGVyVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5hcnJheSxcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcblx0Zm9vdGVyVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5hcnJheSxcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdF0gKSxcblx0aHRtbENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRwb3NpdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblx0YWRkV3JhcHBlcjogUHJvcFR5cGVzLmJvb2wsXG5cdHNob3dUaW1lOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1lZGl1bUNhbGVuZGFyRGF0ZTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1tZWRpdW0tY2FsZW5kYXItZGF0ZS13cmFwcGVyXCI6XCJlZS1tZWRpdW0tY2FsZW5kYXItZGF0ZS13cmFwcGVyXCIsXCJlZS1tY2QtcG9zLWxlZnRcIjpcImVlLW1jZC1wb3MtbGVmdFwiLFwiZWUtbWNkLXBvcy1yaWdodFwiOlwiZWUtbWNkLXBvcy1yaWdodFwiLFwiZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUtaGVhZGVyXCI6XCJlZS1tZWRpdW0tY2FsZW5kYXItZGF0ZS1oZWFkZXJcIixcImVlLW1lZGl1bS1jYWxlbmRhci1kYXRlXCI6XCJlZS1tZWRpdW0tY2FsZW5kYXItZGF0ZVwiLFwiZWUtbWNkLXdlZWtkYXlcIjpcImVlLW1jZC13ZWVrZGF5XCIsXCJlZS1tY2QtbW9udGgtZGF5XCI6XCJlZS1tY2QtbW9udGgtZGF5XCIsXCJlZS1tY2QtZGF5XCI6XCJlZS1tY2QtZGF5XCIsXCJlZS1tY2QteWVhclwiOlwiZWUtbWNkLXllYXJcIixcImVlLW1jZC10aW1lXCI6XCJlZS1tY2QtdGltZVwiLFwiZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUtZm9vdGVyXCI6XCJlZS1tZWRpdW0tY2FsZW5kYXItZGF0ZS1mb290ZXJcIixcImVlLXN0YXR1cy10YWdcIjpcImVlLXN0YXR1cy10YWdcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgeyBEcm9wZG93bk1lbnUgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuXG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcblxuLyoqXG4gKiBEcm9wRG93bk1lbnVcbiAqIHdyYXBwZXIgZm9yIGEgV1AgRHJvcGRvd25NZW51IGNvbXBvbmVudCB0aGF0IGFwcGxpZXMgRUUgc3R5bGVzIGFuZCBkZWZhdWx0c1xuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50RGF0ZSAgZGF0YSByZXByZXNlbnRpbmcgYW4gRUVfRGF0ZXRpbWUgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgIG1lbnVcbiAqL1xuY2xhc3MgRHJvcERvd25NZW51IGV4dGVuZHMgQ29tcG9uZW50IHtcblx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRtZW51SXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKCBQcm9wVHlwZXMub2JqZWN0ICkuaXNSZXF1aXJlZCxcblx0XHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHR0b29sdGlwOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdFx0aW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0ZGFzaGljb246IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0dG9vbHRpcFBvc2l0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRtZW51SXRlbXMsXG5cdFx0XHR0b29sdGlwUG9zaXRpb24gPSAndG9wIGxlZnQnLFxuXHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0Li4ub3RoZXJQcm9wc1xuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdGxldCB7IGh0bWxDbGFzcyB9ID0gdGhpcy5wcm9wcztcblx0XHRkZWxldGUgb3RoZXJQcm9wcy5odG1sQ2xhc3M7XG5cdFx0aHRtbENsYXNzID0gaHRtbENsYXNzID8gYCR7IGh0bWxDbGFzcyB9IGAgOiAnJztcblx0XHRodG1sQ2xhc3MgKz0gYGVlLWRyb3AtZG93bi1tZW51LSR7IGluZGV4IH1gO1xuXHRcdGh0bWxDbGFzcyArPSAnIGVlLWRyb3AtZG93bi1tZW51IGNsaWNrYWJsZSc7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxEcm9wZG93bk1lbnVcblx0XHRcdFx0dGFiSW5kZXg9eyBpbmRleCB9XG5cdFx0XHRcdGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9XG5cdFx0XHRcdGxhYmVsUG9zaXRpb249eyB0b29sdGlwUG9zaXRpb24gfVxuXHRcdFx0XHRjb250cm9scz17IG1lbnVJdGVtcyB9XG5cdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRHJvcERvd25NZW51O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWRyb3AtZG93bi1tZW51XCI6XCJlZS1kcm9wLWRvd24tbWVudVwiLFwiY29tcG9uZW50cy1kcm9wZG93bi1tZW51XCI6XCJjb21wb25lbnRzLWRyb3Bkb3duLW1lbnVcIixcImNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fdG9nZ2xlXCI6XCJjb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX3RvZ2dsZVwiLFwiaXMtZGVmYXVsdFwiOlwiaXMtZGVmYXVsdFwiLFwiY29tcG9uZW50cy1kcm9wZG93bi1tZW51X19wb3BvdmVyXCI6XCJjb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX3BvcG92ZXJcIixcImNvbXBvbmVudHMtcG9wb3Zlcl9fY29udGVudFwiOlwiY29tcG9uZW50cy1wb3BvdmVyX19jb250ZW50XCIsXCJjb21wb25lbnRzLXBvcG92ZXJcIjpcImNvbXBvbmVudHMtcG9wb3ZlclwiLFwiaXMtbW9iaWxlXCI6XCJpcy1tb2JpbGVcIixcImlzLXdpdGhvdXQtYXJyb3dcIjpcImlzLXdpdGhvdXQtYXJyb3dcIixcImlzLXRvcFwiOlwiaXMtdG9wXCIsXCJpcy1ib3R0b21cIjpcImlzLWJvdHRvbVwiLFwiY29tcG9uZW50cy1kcm9wZG93bi1tZW51X19tZW51XCI6XCJjb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX21lbnVcIixcImNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fbWVudS1pdGVtXCI6XCJjb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX21lbnUtaXRlbVwifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5pbXBvcnQgeyBJbmxpbmVFZGl0SW5wdXQgfSBmcm9tICcuLi8uLi9mb3JtL2lucHV0cy9pbmxpbmUtZWRpdC1pbnB1dCc7XG5cbi8qKlxuICogRW50aXR5RGV0YWlsc1BhbmVsXG4gKiBiaWcgYm9sZCByZXNwb25zaXZlIGRpc3BsYXkgZm9yIGRldGFpbHMgbGlrZSBxdWFudGl0aWVzIHNvbGQsIGV0Y1xuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtBcnJheX0gZGV0YWlscyAgICBhcnJheSBvZiBkZXRhaWwgb2JqZWN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHJldHVybiB7c3RyaW5nfSAgICByZW5kZXJlZCBkZXRhaWxzXG4gKi9cbmNsYXNzIEVudGl0eURldGFpbHNQYW5lbCBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0ZGV0YWlsczogUHJvcFR5cGVzLmFycmF5T2YoXG5cdFx0XHRQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRcdFx0aWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRcdFx0bGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRcdFx0dmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFx0XHRQcm9wVHlwZXMuYm9vbCxcblx0XHRcdFx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0XHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0XHRcdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0XSApLmlzUmVxdWlyZWQsXG5cdFx0XHRcdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0ZWRpdGFibGU6IFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdFx0XHRcdG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHR9ICksXG5cdFx0XHR9ICksXG5cdFx0KS5pc1JlcXVpcmVkLFxuXHRcdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0fTtcblxuXHQvKipcblx0ICogZW50aXR5RGV0YWlsXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgICBcdFx0aWRlbnRpZmllciBmb3IgZGF0YSBpdGVtIGJlaW5nIGRpc3BsYXllZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgICBcdFx0bGFiZWwgZm9yIHRoZSBkYXRhIGl0ZW0gYmVpbmcgZGlzcGxheWVkXG5cdCAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gXHRcdHZhbHVlIHZhbHVlIGZvciB0aGUgZGF0YSBpdGVtIGJlaW5nIGRpc3BsYXllZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzIFx0b3B0aW9uYWwgY3NzIGNsYXNzIGZvciBkYXRhIGl0ZW1cblx0ICogQHBhcmFtIHtPYmplY3R9IGVkaXRhYmxlIFx0SW5saW5lRWRpdElucHV0IHBhcmFtZXRlcnNcblx0ICogQHJldHVybiB7c3RyaW5nfSAgICBcdFx0XHRyZW5kZXJlZCBkZXRhaWxzXG5cdCAqL1xuXHRlbnRpdHlEZXRhaWwgPSAoIHsgaWQsIGxhYmVsLCB2YWx1ZSwgaHRtbENsYXNzID0gJycsIGVkaXRhYmxlID0ge30gfSApID0+IHtcblx0XHR2YWx1ZSA9IHZhbHVlID09PSAnSU5GJyB8fCB2YWx1ZSA9PT0gSW5maW5pdHkgP1xuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPXsgJ2VlLWluZmluaXR5LXNpZ24nIH0+JmluZmluOzwvc3Bhbj4gOlxuXHRcdFx0dmFsdWU7XG5cdFx0dmFsdWUgPSAhIGlzRW1wdHkoIGVkaXRhYmxlICkgP1xuXHRcdFx0PElubGluZUVkaXRJbnB1dFxuXHRcdFx0XHRodG1sSWQ9eyBpZCB9XG5cdFx0XHRcdHZhbHVlPXsgdmFsdWUgfVxuXHRcdFx0XHR7IC4uLmVkaXRhYmxlIH1cblx0XHRcdC8+IDpcblx0XHRcdHZhbHVlO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGBlZS1lbnRpdHktZGV0YWlscy1kaXYgJHsgaWQgfS1kaXYgJHsgaHRtbENsYXNzIH1gIH0+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgYGVlLWVudGl0eS1kZXRhaWxzLWxhYmVsLWRpdiAkeyBpZCB9LWxhYmVsYCB9PlxuXHRcdFx0XHRcdHsgbGFiZWwgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyBgZWUtZW50aXR5LWRldGFpbHMtdmFsdWUtZGl2ICR7IGlkIH0tdmFsdWVgIH0+XG5cdFx0XHRcdFx0eyB2YWx1ZSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogZGV0YWlsc1NlcGFyYXRvciAtIGEgdmVydGljYWwgbGluZSB0aGF0IHNlcGFyYXRlcyBkZXRhaWxzXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IHZlcnRpY2FsIGxpbmUgZm9yIHNlcGFyYXRpbmcgZGF0ZSBkZXRhaWxzXG5cdCAqL1xuXHRkZXRhaWxzU2VwYXJhdG9yID0gKCkgPT4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IHJvbGU9XCJzZXBhcmF0b3JcIlxuXHRcdFx0XHRjbGFzc05hbWU9XCJlZS1lbnRpdHktZGV0YWlscy1zZXBhcmF0b3JcIlxuXHRcdFx0PjwvZGl2PlxuXHRcdCk7XG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHsgZGV0YWlscyB9ID0gdGhpcy5wcm9wcztcblx0XHRsZXQgeyBodG1sQ2xhc3MgfSA9IHRoaXMucHJvcHM7XG5cdFx0aHRtbENsYXNzID0gY2xhc3NOYW1lcyggaHRtbENsYXNzLCAnZWUtZW50aXR5LWRldGFpbHMtcGFuZWwtZGl2JyApO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9PlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZGV0YWlscy5tYXAoXG5cdFx0XHRcdFx0XHQoIGRldGFpbCwgaW5kZXggKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0PEZyYWdtZW50IGtleT17IGluZGV4IH0+XG5cdFx0XHRcdFx0XHRcdFx0XHR7IHRoaXMuZW50aXR5RGV0YWlsKCBkZXRhaWwgKSB9XG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4ICE9PSBkZXRhaWxzLmxlbmd0aCAtIDEgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZGV0YWlsc1NlcGFyYXRvcigpIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRudWxsXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH1cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRW50aXR5RGV0YWlsc1BhbmVsO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWVudGl0eS1kZXRhaWxzLXBhbmVsLWRpdlwiOlwiZWUtZW50aXR5LWRldGFpbHMtcGFuZWwtZGl2XCIsXCJlZS1pbmxpbmUtZWRpdC10ZXh0XCI6XCJlZS1pbmxpbmUtZWRpdC10ZXh0XCIsXCJlZS1lbnRpdHktZGV0YWlscy1kaXZcIjpcImVlLWVudGl0eS1kZXRhaWxzLWRpdlwiLFwiZWUtaW5saW5lLWVkaXQtaW5wdXRcIjpcImVlLWlubGluZS1lZGl0LWlucHV0XCIsXCJlZS1lbnRpdHktZGV0YWlscy1sYWJlbC1kaXZcIjpcImVlLWVudGl0eS1kZXRhaWxzLWxhYmVsLWRpdlwiLFwiZWUtZW50aXR5LWRldGFpbHMtdmFsdWUtZGl2XCI6XCJlZS1lbnRpdHktZGV0YWlscy12YWx1ZS1kaXZcIixcImVlLWVudGl0eS1kZXRhaWxzLXNlcGFyYXRvclwiOlwiZWUtZW50aXR5LWRldGFpbHMtc2VwYXJhdG9yXCIsXCJlZS1pbmZpbml0eS1zaWduXCI6XCJlZS1pbmZpbml0eS1zaWduXCIsXCJkYXNoaWNvblwiOlwiZGFzaGljb25cIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHdpdGhvdXQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcbmltcG9ydCB3aXRoRm9ybUNvbnRhaW5lckFuZFBsYWNlaG9sZGVyIGZyb20gJy4uLy4uL2Zvcm0vYmFzZS93aXRoLWZvcm0tY29udGFpbmVyLWFuZC1wbGFjZWhvbGRlcic7XG5cbi8qKlxuICogRW50aXR5TGlzdFxuICogYmFzZSBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgYSBsaXN0IG9mIGVudGl0aWVzIChkYXRlcywgdGlja2V0cywgZXRjKVxuICogYXMgZWl0aGVyIGEgbGlzdCB0YWJsZSBvciBncmlkIG9mIGVudGl0eSBibG9ja3NcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl9IGVudGl0aWVzXG4gKiBAcGFyYW0ge21peGVkfSBvdGhlclByb3BzXG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gRW50aXR5R3JpZFZpZXdcbiAqIEBwYXJhbSB7Q29tcG9uZW50fSBFbnRpdHlMaXN0Vmlld1xuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IHZpZXdcbiAqIEBwYXJhbSB7c3RyaW5nfSBub1Jlc3VsdHNUZXh0XG4gKiBAcmV0dXJuIHtDb21wb25lbnR9IGxpc3Qgb2YgcmVuZGVyZWQgZW50aXRpZXNcbiAqL1xuY29uc3QgRW50aXR5TGlzdCA9ICgge1xuXHRlbnRpdGllcyxcblx0RW50aXR5R3JpZFZpZXcsXG5cdEVudGl0eUxpc3RWaWV3LFxuXHRodG1sQ2xhc3MsXG5cdHZpZXcgPSAnZ3JpZCcsXG5cdG5vUmVzdWx0c1RleHQgPSAnJyxcblx0Li4ub3RoZXJQcm9wc1xufSApID0+IHtcblx0ZW50aXRpZXMgPSBBcnJheS5pc0FycmF5KCBlbnRpdGllcyApID8gZW50aXRpZXMgOiBbXTtcblx0Ly8gUmVtb3ZlIHVuZGVmaW5lZCBmcm9tIHRoZSBhcnJheVxuXHRlbnRpdGllcyA9IHdpdGhvdXQoIGVudGl0aWVzLCB1bmRlZmluZWQgKTtcblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcyggJ2VlLWVkaXRvci1lbnRpdHktbGlzdCcsIGh0bWxDbGFzcyApO1xuXHRsZXQgZW50aXR5TGlzdCA9IHZpZXcgPT09ICdncmlkJyA/IChcblx0XHQ8RW50aXR5R3JpZFZpZXdcblx0XHRcdGVudGl0aWVzPXsgZW50aXRpZXMgfVxuXHRcdFx0aHRtbENsYXNzPXsgaHRtbENsYXNzIH1cblx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0Lz5cblx0KSA6IChcblx0XHQ8RW50aXR5TGlzdFZpZXdcblx0XHRcdGVudGl0aWVzPXsgZW50aXRpZXMgfVxuXHRcdFx0aHRtbENsYXNzPXsgaHRtbENsYXNzIH1cblx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0Lz5cblx0KTtcblx0aWYgKCBlbnRpdGllcy5sZW5ndGggPT09IDAgKSB7XG5cdFx0bm9SZXN1bHRzVGV4dCA9IG5vUmVzdWx0c1RleHQgIT09ICcnID9cblx0XHRcdG5vUmVzdWx0c1RleHQgOlxuXHRcdFx0X18oICdubyByZXN1bHRzIGZvdW5kJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdGVudGl0eUxpc3QgPSAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWVudGl0eS1saXN0LW5vLXJlc3VsdHNcIj5cblx0XHRcdFx0eyBub1Jlc3VsdHNUZXh0IH1cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIGVudGl0eUxpc3Q7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoRm9ybUNvbnRhaW5lckFuZFBsYWNlaG9sZGVyKCBFbnRpdHlMaXN0ICk7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZWRpdG9yLWVudGl0eS1saXN0XCI6XCJlZS1lZGl0b3ItZW50aXR5LWxpc3RcIixcImVlLWVudGl0eS1saXN0LW5vLXJlc3VsdHNcIjpcImVlLWVudGl0eS1saXN0LW5vLXJlc3VsdHNcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGNvbXBvc2UsXG5cdGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50LFxuXHR3aXRoSW5zdGFuY2VJZCxcbn0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vKipcbiAqIHdpdGhFbnRpdHlQYXBlckZyYW1lXG4gKiBIaWdoZXItT3JkZXItQ29tcG9uZW50IHRoYXQgd3JhcHMgYW4gXCJlbnRpdHlcIiBjb21wb25lbnRcbiAqIHdpdGggYW4gRW50aXR5UGFwZXJGcmFtZSBjb21wb25lbnQgdGhhdCBhZGRzIGEgc3R5bGVkIGZyYW1lXG4gKiB0aGF0IGdpdmVzIHRoZSBhcHBlYXJhbmNlIG9mIGEgcGllY2Ugb2YgcGFwZXIgb24gYSBzdXJmYWNlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBFbnRpdHkgd2l0aCBhZGRlZCBFbnRpdHlQYXBlckZyYW1lXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHRjb21wb3NlKCBbXG5cdFx0d2l0aEluc3RhbmNlSWQsXG5cdFx0KCBFbnRpdHkgKSA9PiB7XG5cdFx0XHRyZXR1cm4gY2xhc3MgRW50aXR5UGFwZXJGcmFtZSBleHRlbmRzIENvbXBvbmVudCB7XG5cdFx0XHRcdHJlbmRlcigpIHtcblx0XHRcdFx0XHRjb25zdCB7XG5cdFx0XHRcdFx0XHRpbnN0YW5jZUlkLFxuXHRcdFx0XHRcdFx0Li4ub3RoZXJQcm9wc1xuXHRcdFx0XHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGlkPXsgYGVlLWVudGl0eS1wYXBlci1mcmFtZS0keyBpbnN0YW5jZUlkIH1gIH1cblx0XHRcdFx0XHRcdFx0IGNsYXNzTmFtZT1cImVlLWVudGl0eS1wYXBlci1mcmFtZS13cmFwcGVyXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1lbnRpdHktcGFwZXItZnJhbWVcIj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZW50aXR5LXdyYXBwZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8RW50aXR5IHsgLi4ub3RoZXJQcm9wcyB9IC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9LFxuXHRdICksXG5cdCd3aXRoRW50aXR5UGFwZXJGcmFtZSdcbik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZW50aXR5LXBhcGVyLWZyYW1lLXdyYXBwZXJcIjpcImVlLWVudGl0eS1wYXBlci1mcmFtZS13cmFwcGVyXCIsXCJlZS1lbnRpdHktd3JhcHBlclwiOlwiZWUtZW50aXR5LXdyYXBwZXJcIixcImVlLWVudGl0eS1wYXBlci1mcmFtZVwiOlwiZWUtZW50aXR5LXBhcGVyLWZyYW1lXCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEVzcHJlc3NvSWNvbiB9IGZyb20gJy4uLyc7XG5cbi8qKlxuICogRXNwcmVzc29CdXR0b25cbiAqICBXUCBCdXR0b24gd3JhcHBlciBmb3IgYWRkaW5nIHN0eWxlc1xuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IGJ1dHRvblRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpY29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkNsaWNrXG4gKiBAcGFyYW0ge3N0cmluZ30gc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge09iamVjdH0gYnV0dG9uUHJvcHNcbiAqL1xuY29uc3QgRXNwcmVzc29CdXR0b24gPSAoIHtcblx0YnV0dG9uVGV4dCxcblx0aWNvbixcblx0b25DbGljayxcblx0c2l6ZSxcblx0c3R5bGUsXG5cdGh0bWxDbGFzcyxcblx0Li4uYnV0dG9uUHJvcHNcbn0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGNsYXNzTmFtZXMoIHtcblx0XHRbIGh0bWxDbGFzcyBdIDogaHRtbENsYXNzLFxuXHRcdCdlc3Bycy1idXR0b24nOiB0cnVlLFxuXHRcdCdlc3Bycy1idG4tYWNjZW50Jzogc3R5bGUgPT09ICdhY2NlbnQnLFxuXHRcdCdlc3Bycy1idG4tZGVmYXVsdCc6IHN0eWxlID09PSAnZGVmYXVsdCcsXG5cdFx0J2VzcHJzLWJ0bi1wcmltYXJ5Jzogc3R5bGUgPT09ICdwcmltYXJ5Jyxcblx0XHQnZXNwcnMtYnRuLXNlY29uZGFyeSc6IHN0eWxlID09PSAnc2Vjb25kYXJ5Jyxcblx0XHQnZXNwcnMtYnRuLXRpbnknOiBzaXplID09PSAndGlueScsXG5cdFx0J2VzcHJzLWJ0bi1zbWFsbCc6IHNpemUgPT09ICdzbWFsbCcsXG5cdFx0J2VzcHJzLWJ0bi1iaWcnOiBzaXplID09PSAnYmlnJyxcblx0XHQnZXNwcnMtYnRuLWh1Z2UnOiBzaXplID09PSAnaHVnZScsXG5cdH0gKTtcblx0bGV0IGljb25TaXplID0gMjQ7XG5cdHN3aXRjaCAoIHNpemUgKSB7XG5cdFx0Y2FzZSAndGlueSc6XG5cdFx0XHRpY29uU2l6ZSA9IDE4O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnc21hbGwnOlxuXHRcdFx0aWNvblNpemUgPSAyMTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2JpZyc6XG5cdFx0XHRpY29uU2l6ZSA9IDI3O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnaHVnZSc6XG5cdFx0XHRpY29uU2l6ZSA9IDMwO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKCBpY29uICkge1xuXHRcdGljb24gPSAoXG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJpbWctd3JhcFwiPlxuXHRcdFx0XHQ8RXNwcmVzc29JY29uIGljb249eyBpY29uIH0gc2l6ZT17IGljb25TaXplIH0vPlxuXHRcdFx0PC9zcGFuPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0aHRtbENsYXNzICs9ICcgZWUtbm9JY29uJztcblx0fVxuXHRyZXR1cm4gKFxuXHRcdDxidXR0b24geyAuLi5idXR0b25Qcm9wcyB9IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9IG9uQ2xpY2s9eyBvbkNsaWNrIH0+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXdyYXBcIj57IGJ1dHRvblRleHQgfTwvc3Bhbj57IGljb24gfVxuXHRcdDwvYnV0dG9uPlxuXHQpO1xufTtcblxuRXNwcmVzc29CdXR0b24ucHJvcFR5cGVzID0ge1xuXHRidXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdGljb246IFByb3BUeXBlcy5zdHJpbmcsXG5cdHNpemU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdHN0eWxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRodG1sQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5Fc3ByZXNzb0J1dHRvbi5kZWZhdWx0UHJvcHMgPSB7XG5cdGljb246ICcnLFxuXHRzaXplOiAnZGVmYXVsdCcsXG5cdHN0eWxlOiAnZGVmYXVsdCcsXG5cdGh0bWxDbGFzczogJycsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFc3ByZXNzb0J1dHRvbjtcbiIsIi8qKlxuICogRW50aXR5QWN0aW9uTWVudUl0ZW1cbiAqIGp1c3QgYSB3cmFwcGVyIGZvciBhbiBJY29uQnV0dG9uIGFuZCBhZGRpdGlvbmFsIGNvbXBvbmVudFxuICogKG1vc3QgbGlrZWx5IGEgbW9kYWwgY29tcG9uZW50KSBzbyB0aGF0IGl0IGNhbiBiZSBhZGRlZCB0byBhIG1lbnVcbiAqL1xuY29uc3QgRW50aXR5QWN0aW9uTWVudUl0ZW0gPSAoIHsgY2hpbGRyZW4gfSApID0+IGNoaWxkcmVuO1xuXG5leHBvcnQgZGVmYXVsdCBFbnRpdHlBY3Rpb25NZW51SXRlbTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vKipcbiAqIEljb25NZW51SXRlbVxuICogd3JhcHBlciBmb3IgV1AgSWNvbkJ1dHRvbiB0aGF0IGFkZHMgRUUgc3R5bGVzIGFuZCBkZWZhdWx0c1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge29iamVjdHxzdHJpbmd9IGRhc2hpY29uXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9vbHRpcFxuICogQHBhcmFtIHtzdHJpbmd9IHRvb2x0aXBQb3NpdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25DbGlja1xuICogQHBhcmFtIHtudWxsfG51bWJlcnxzdHJpbmd9IGl0ZW1Db3VudFxuICogQHBhcmFtIHtPYmplY3R9IGV4dGVybmFsQXBwXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXJQcm9wc1xuICogQHJldHVybiB7c3RyaW5nfSByZW5kZXJlZCBJY29uTWVudUl0ZW1cbiAqL1xuY29uc3QgSWNvbk1lbnVJdGVtID0gKCB7XG5cdGluZGV4LFxuXHRpZCxcblx0dG9vbHRpcCxcblx0ZGFzaGljb24sXG5cdG9uQ2xpY2ssXG5cdGh0bWxDbGFzcyxcblx0dG9vbHRpcFBvc2l0aW9uLFxuXHRpdGVtQ291bnQsXG5cdGV4dGVybmFsQXBwLFxuXHQuLi5vdGhlclByb3BzXG59ICkgPT4ge1xuXHRjb25zdCBidG5DbGFzcyA9IGNsYXNzTmFtZXMoIHtcblx0XHRbIGBlZS1pY29uLW1lbnUtaXRlbS0keyBpbmRleCB9YCBdOiB0cnVlLFxuXHRcdFsgYGVlLWljb24tbWVudS1pdGVtLSR7IGh0bWxDbGFzcyB9YCBdOiBodG1sQ2xhc3MsXG5cdFx0J2VlLWljb24tbWVudS1pdGVtJzogdHJ1ZSxcblx0XHQnY2xpY2thYmxlJzogdHJ1ZSxcblx0fSApO1xuXHRpZiAoIGl0ZW1Db3VudCAhPT0gbnVsbCApIHtcblx0XHRpdGVtQ291bnQgPSBwYXJzZUludCggaXRlbUNvdW50LCAxMCApO1xuXHRcdGNvbnN0IGl0ZW1Db3VudENsYXNzID0gY2xhc3NOYW1lcygge1xuXHRcdFx0J2VlLWljb24tbWVudS1pdGVtLWNvdW50JzogdHJ1ZSxcblx0XHRcdCdlZS1oYXMtaXRlbXMnOiBpdGVtQ291bnQgPiAwLFxuXHRcdFx0J2VlLW5vLWl0ZW1zJzogaXRlbUNvdW50IDwgMSxcblx0XHR9ICk7XG5cdFx0aXRlbUNvdW50ID0gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eyBpdGVtQ291bnRDbGFzcyB9PlxuXHRcdFx0XHR7IGl0ZW1Db3VudCA+IDAgPyBpdGVtQ291bnQgOiAnPycgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXsgJ2VlLWljb24tbWVudS1pdGVtLXdyYXBwZXInIH0+XG5cdFx0XHQ8SWNvbkJ1dHRvblxuXHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHRpZD17IGBlZS1pY29uLW1lbnUtaXRlbS0keyBpZCB9YCB9XG5cdFx0XHRcdGNsYXNzTmFtZT17IGJ0bkNsYXNzIH1cblx0XHRcdFx0b25DbGljaz17ICggZXZlbnQgKSA9PiBvbkNsaWNrKCBldmVudCApIH1cblx0XHRcdFx0b25LZXlQcmVzcz17ICggZXZlbnQgKSA9PiBvbkNsaWNrKCBldmVudCApIH1cblx0XHRcdFx0dG9vbHRpcD17IHRvb2x0aXAgfVxuXHRcdFx0XHRsYWJlbFBvc2l0aW9uPXsgdG9vbHRpcFBvc2l0aW9uIH1cblx0XHRcdFx0aWNvbj17IGRhc2hpY29uIH1cblx0XHRcdC8+XG5cdFx0XHR7IGl0ZW1Db3VudCB9XG5cdFx0XHR7IGV4dGVybmFsQXBwIH1cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cbkljb25NZW51SXRlbS5wcm9wVHlwZXMgPSB7XG5cdGluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cdGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdGh0bWxDbGFzczogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRkYXNoaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLmlzUmVxdWlyZWQsXG5cdGl0ZW1Db3VudDogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRQcm9wVHlwZXMubm9kZSxcblx0XSApLFxuXHR0b29sdGlwOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdHRvb2x0aXBQb3NpdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblx0b25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblx0ZXh0ZXJuYWxBcHA6IFByb3BUeXBlcy5vYmplY3QsXG59O1xuXG5JY29uTWVudUl0ZW0uZGVmYXVsdFByb3BzID0ge1xuXHRpdGVtQ291bnQ6IG51bGwsXG5cdGV4dGVybmFsQXBwOiBudWxsLFxuXHR0b29sdGlwUG9zaXRpb246ICd0b3AgbGVmdCcsXG5cdGh0bWxDbGFzczogJycsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBJY29uTWVudUl0ZW07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtaWNvbi1tZW51LWl0ZW0td3JhcHBlclwiOlwiZWUtaWNvbi1tZW51LWl0ZW0td3JhcHBlclwiLFwiZWUtaWNvbi1tZW51LWl0ZW1cIjpcImVlLWljb24tbWVudS1pdGVtXCIsXCJlZS1pY29uLW1lbnUtaXRlbS1jb3VudFwiOlwiZWUtaWNvbi1tZW51LWl0ZW0tY291bnRcIixcImVlLWhhcy1pdGVtc1wiOlwiZWUtaGFzLWl0ZW1zXCIsXCJlZS1uby1pdGVtc1wiOlwiZWUtbm8taXRlbXNcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuXG4vKipcbiAqIEF2YXRhckltYWdlXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gYXZhdGFyVXJsICAgICAgICBncmF2YXRhciBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdmF0YXJDbGFzc1x0XHRiYXNlIENTUyBjbGFzcyB0byBhcHBseVxuICogQHBhcmFtIHtudW1iZXJ9IGF2YXRhckhlaWdodFx0XHRpbWFnZSBoZWlnaHQgKGRlZmF1bHQgPSAzMnB4KVxuICogQHBhcmFtIHtudW1iZXJ9IGF2YXRhcldpZHRoIFx0XHRpbWFnZSB3aWR0aCAoZGVmYXVsdCA9IDMycHgpXG4gKiBAcGFyYW0ge3N0cmluZ30gYXZhdGFyQWx0VGV4dFx0aW1hZ2UgYWx0IHRleHRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSAgXHRcdFx0XHRBIHB1cmUgY29tcG9uZW50IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQXZhdGFySW1hZ2UgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdGF2YXRhclVybDogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRhdmF0YXJDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRhdmF0YXJIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0YXZhdGFyV2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0YXZhdGFyQWx0VGV4dDogUHJvcFR5cGVzLnN0cmluZyxcblx0fTtcblx0c3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcblx0XHRhdmF0YXJVcmw6ICcnLFxuXHRcdGF2YXRhckNsYXNzOiAnY29udGFjdCcsXG5cdFx0YXZhdGFySGVpZ2h0OiAzMixcblx0XHRhdmF0YXJXaWR0aDogMzIsXG5cdFx0YXZhdGFyQWx0VGV4dDogX18oICdjb250YWN0IGF2YXRhcicsICdldmVudF9lc3ByZXNzbycgKSxcblx0fTtcblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdGF2YXRhclVybCxcblx0XHRcdGF2YXRhckNsYXNzLFxuXHRcdFx0YXZhdGFySGVpZ2h0LFxuXHRcdFx0YXZhdGFyV2lkdGgsXG5cdFx0XHRhdmF0YXJBbHRUZXh0LFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXG5cdFx0Y29uc3Qgc3R5bGUgPSB7XG5cdFx0XHRoZWlnaHQ6IGF2YXRhckhlaWdodCxcblx0XHRcdHdpZHRoOiBhdmF0YXJXaWR0aCxcblx0XHR9O1xuXHRcdHJldHVybiBhdmF0YXJVcmwgPyAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGF2YXRhckNsYXNzICsgJy1pbWFnZS13cmFwLWRpdicgfT5cblx0XHRcdFx0PGltZ1xuXHRcdFx0XHRcdGNsYXNzTmFtZT17IGF2YXRhckNsYXNzICsgJy1hdmF0YXItaW1nIGF2YXRhcicgfVxuXHRcdFx0XHRcdHNyYz17IGF2YXRhclVybCB9XG5cdFx0XHRcdFx0c3R5bGU9eyBzdHlsZSB9XG5cdFx0XHRcdFx0YWx0PXsgYXZhdGFyQWx0VGV4dCB9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpIDogKFxuXHRcdFx0bnVsbFxuXHRcdCk7XG5cdH1cbn1cbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBEYXNoaWNvbiwgUGF0aCwgU1ZHIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5leHBvcnQgY29uc3QgRVNQUkVTU09fSUNPTl9DQUxDVUxBVE9SID0gJ2NhbGN1bGF0b3InO1xuZXhwb3J0IGNvbnN0IEVTUFJFU1NPX0lDT05fQ0FMRU5EQVIgPSAnY2FsZW5kYXInO1xuZXhwb3J0IGNvbnN0IEVTUFJFU1NPX0lDT05fUkVNID0gJ3JlY3VycmluZy1kYXRlJztcbmV4cG9ydCBjb25zdCBFU1BSRVNTT19JQ09OX1NBVkUgPSAnc2F2ZSc7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gaWNvblxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBpY29uIGlzIGFuIEVzcHJlc3NvSWNvblxuICovXG5leHBvcnQgY29uc3QgaXNFc3ByZXNzb0ljb24gPSAoIGljb24gKSA9PiB7XG5cdHN3aXRjaCAoIGljb24gKSB7XG5cdFx0Y2FzZSBFU1BSRVNTT19JQ09OX0NBTENVTEFUT1I6XG5cdFx0Y2FzZSBFU1BSRVNTT19JQ09OX0NBTEVOREFSOlxuXHRcdGNhc2UgRVNQUkVTU09fSUNPTl9TQVZFOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBDdXN0b20gRXZlbnQgRXNwcmVzc28gRGFzaGljb25zXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gaWNvblxuICogQHBhcmFtIHtudW1iZXJ9IHNpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAqL1xuZXhwb3J0IGNsYXNzIEVzcHJlc3NvSWNvbiBleHRlbmRzIENvbXBvbmVudCB7XG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7IGljb24sIHNpemUgPSAyMCwgY2xhc3NOYW1lLCAuLi5vdGhlclByb3BzIH0gPSB0aGlzLnByb3BzO1xuXHRcdGxldCBwYXRoO1xuXG5cdFx0c3dpdGNoICggaWNvbiApIHtcblxuXHRcdFx0Y2FzZSBFU1BSRVNTT19JQ09OX0NBTENVTEFUT1I6XG5cdFx0XHRcdHBhdGggPSAnTSAzIDAgdjIwIGgxNCB2LTIwIGgtMTQgeiAnICtcblx0XHRcdFx0XHQnbSAyLjUgMi41IGg5IHYyIGgtOSB2LTIgeiAnICtcblx0XHRcdFx0XHQnbSAwIDQgaDIgdjEuNzUgaC0yIHYtMS43NSB6ICcgK1xuXHRcdFx0XHRcdCdtIDMuNSAwIGgyIHYxLjc1IGgtMiB2LTEuNzUgeiAnICtcblx0XHRcdFx0XHQnbSAzLjUgMCBoMiB2MS43NSBoLTIgdi0xLjc1IHogJyArXG5cdFx0XHRcdFx0J00gNS41IDkuNSBoMiB2MS43NSBoLTIgdi0xLjc1IHogJyArXG5cdFx0XHRcdFx0J20gMy41IDAgaDIgdjEuNzUgaC0yIHYtMS43NSB6ICcgK1xuXHRcdFx0XHRcdCdtIDMuNSAwIGgyIHYxLjc1IGgtMiB2LTEuNzUgeiAnICtcblx0XHRcdFx0XHQnTSA1LjUgMTIuNSBoMiB2MS43NSBoLTIgdi0xLjc1IHogJyArXG5cdFx0XHRcdFx0J20gMy41IDAgaDIgdjEuNzUgaC0yIHYtMS43NSB6ICcgK1xuXHRcdFx0XHRcdCdtIDMuNSAwIGgyIHYxLjc1IGgtMiB2LTEuNzUgeiAnICtcblx0XHRcdFx0XHQnTSA1LjUgMTUuNSBoMiB2MS43NSBoLTIgdi0xLjc1IHogJyArXG5cdFx0XHRcdFx0J20gMy41IDAgaDIgdjEuNzUgaC0yIHYtMS43NSB6ICcgK1xuXHRcdFx0XHRcdCdtIDMuNSAwIGgyIHYxLjc1IGgtMiB2LTEuNzUgeiAnO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBFU1BSRVNTT19JQ09OX0NBTEVOREFSOlxuXHRcdFx0XHRwYXRoID0gJ00gMCAyIHYxOCBoMjAgdi0xOCB6ICcgK1xuXHRcdFx0XHRcdCdNIDIgNi41IGgxNiB2MTEuNSBoLTE2IHogJyArXG5cdFx0XHRcdFx0J00gMTUuNSAwIFY4IGgtMS4zOCBMMTEuNTQgMTAuMDYgbCAuOCAxLjIgLjkyIC0uNzQgYyAuMTInICtcblx0XHRcdFx0XHQnIC0uMSAuMzIgLS4yOCAuNiAtLjU2IGwgLS4wNCAuODQgVjE2LjUgSDE1LjUgeiAnICtcblx0XHRcdFx0XHQnTSA5LjUgMTAgJyArXG5cdFx0XHRcdFx0J2MgMCAtLjYgLS4yNCAtMS4wOCAtLjc0IC0xLjQyIC0uNDggLS4zNCAtMS4xNiAtLjUyIC0yJyArXG5cdFx0XHRcdFx0JyAtLjUyIC0xLjA0IDAgLTEuOTIgLjI2IC0yLjY2IC44ICcgK1xuXHRcdFx0XHRcdCdsIC44IDEuMiAgJyArXG5cdFx0XHRcdFx0J2MgLjM0IC0uMjIgLjY0IC0uMzggLjkyIC0uNDYgLjI4IC0uMSAuNTQgLS4xNCAuODIgLS4xNCcgK1xuXHRcdFx0XHRcdCcgLjc2IDAgMS4xNiAuMyAxLjE2IC45MiAwIC40IC0uMTQgLjcgLS40NCAuODYgICcgK1xuXHRcdFx0XHRcdCdzIC0uNzYgLjI0IC0xLjQgLjI0ICcgK1xuXHRcdFx0XHRcdCdoIC0uNjIgJyArXG5cdFx0XHRcdFx0J3YgMS4zMiAnICtcblx0XHRcdFx0XHQnaCAuNjIgJyArXG5cdFx0XHRcdFx0J2MgLjY4IDAgMS4xOCAuMDggMS41IC4yNCAuMyAuMTYgLjQ2IC40NCAuNDYgLjgyIDAgLjQ0JyArXG5cdFx0XHRcdFx0JyAtLjE0IC43NCAtLjQgLjk0IC0uMjggLjIgLS43IC4zIC0xLjI2IC4zIC0uMzggMCAtLjc2JyArXG5cdFx0XHRcdFx0JyAtLjA2IC0xLjE0IC0uMTYgJyArXG5cdFx0XHRcdFx0J3MgLS43MiAtLjI0IC0xLjA0IC0uNCAnICtcblx0XHRcdFx0XHQndiAxLjQ4ICcgK1xuXHRcdFx0XHRcdCdjIC42OCAuMyAxLjQ4IC40NCAyLjM2IC40NCAxLjA2IDAgMS44OCAtLjIyIDIuNDQgLS42NicgK1xuXHRcdFx0XHRcdCcgLjU4IC0uNDQgLjg2IC0xLjA0IC44NiAtMS44NCAwIC0uNTQgLS4xOCAtLjk2IC0uNTIgLTEuMjggJyArXG5cdFx0XHRcdFx0J3MgLS44NCAtLjUyIC0xLjQ4IC0uNiAnICtcblx0XHRcdFx0XHQndiAtLjA0ICcgK1xuXHRcdFx0XHRcdCdjIC41NCAtLjEyIC45OCAtLjM4IDEuMyAtLjc0IC4zIC0uMzYgLjQ2IC0uNzggLjQ2IC0xLjMgeiAnICtcblx0XHRcdFx0XHQnTSA0IDAgaDIgdjIgaC0yIHYtMiB6ICcgK1xuXHRcdFx0XHRcdCdNIDE0IDAgaDIgdjIgaC0yIHYtMiB6Jztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ2ltYWdlLXJvdGF0ZSc6XG5cdFx0XHRcdHBhdGggPSAnTSAxMC4yNSAxLjAyICcgK1xuXHRcdFx0XHRcdCdjIDUuMSAwIDguNzUgNC4wNCA4Ljc1IDkgJyArXG5cdFx0XHRcdFx0J3MgLTMuNjUgOS04Ljc1IDkgJyArXG5cdFx0XHRcdFx0J2MgLTMuMiAwLTYuMDItMS41OS03LjY4LTMuOTkgJyArXG5cdFx0XHRcdFx0J2wgMi41OS0xLjUyICcgK1xuXHRcdFx0XHRcdCdjIDEuMSAxLjUgMi44NiAyLjUxIDQuODQgMi41MSAzLjMgMCA2LTIuNzkgNi02ICcgK1xuXHRcdFx0XHRcdCdzLTIuNy02LTYtNiAnICtcblx0XHRcdFx0XHQnYy0xLjk3IDAtMy43MiAxLTQuODIgMi40OSAnICtcblx0XHRcdFx0XHQnTCA3IDguMDIgJyArXG5cdFx0XHRcdFx0J2wgLTYgMiAnICtcblx0XHRcdFx0XHQndiAtNyAnICtcblx0XHRcdFx0XHQnTCAyLjg5IDQuNiAnICtcblx0XHRcdFx0XHQnYyAxLjY5LTIuMTcgNC4zNi0zLjU4IDcuMzYtMy41OHonO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBFU1BSRVNTT19JQ09OX1JFTTpcblx0XHRcdFx0cGF0aCA9ICdNIDEwIDEuMDIgJyArXG5cdFx0XHRcdFx0J2MgLTUuMSAwIC04Ljc1IDQuMDQgLTguNzUgOSAnICtcblx0XHRcdFx0XHQncyAzLjY1IDkgOC43NSA5ICcgK1xuXHRcdFx0XHRcdCdjIDMuMiAwIDYuMDIgLTEuNTkgNy42OCAtMy45OSAnICtcblx0XHRcdFx0XHQnbCAtMi41OSAtMS41MiAnICtcblx0XHRcdFx0XHQnYyAtMS4xIDEuNSAtMi44NiAyLjUxIC00Ljg0IDIuNTEgLTMuMyAwIC02IC0yLjc5IC02IC02ICcgK1xuXHRcdFx0XHRcdCdzIDIuNyAtNiA2IC02ICcgK1xuXHRcdFx0XHRcdCdjIDEuOTcgMCAzLjcyIDEgNC44MiAyLjQ5ICcgK1xuXHRcdFx0XHRcdCdMIDEzLjE1IDguMTUgJyArXG5cdFx0XHRcdFx0J2wgNi4xOCAxLjA5ICcgK1xuXHRcdFx0XHRcdCd2IC02LjI1ICcgK1xuXHRcdFx0XHRcdCdMIDE3LjQgNC42ICcgK1xuXHRcdFx0XHRcdCdjIC0xLjY5IC0yLjE3IC00LjM2IC0zLjU4IC03LjM2IC0zLjU4IHonO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBFU1BSRVNTT19JQ09OX1NBVkU6XG5cdFx0XHRcdHBhdGggPSAnTSAxIDE3LjUgdiAtMTYgbCAwLjUgLTAuNSBoIDE0LjUgbCAzIDMgdiAxNC41IGwgLTAuNSAwLjUgaCAtMTcgbCAtMC41IC0wLjUgeiBNIDUgNyBoIDkgbCAwLjUgLTAuNSB2IC00LjUgaCAtOSB2IDQuNSBsIDAuNSAwLjUgeiBNIDExIDYuNSB2IC0zLjUgaCAyIHYgMyBoIC0yIHogTSA0IDExLjUgdiAwLjUgaCAxMiB2IC0wLjUgeiBtIDAgMiB2IDAuNSBoIDEyIHYgLTAuNSB6IG0gMCAyIHYgMC41IGggMTIgdiAtMC41IHonO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8RGFzaGljb25cblx0XHRcdFx0XHRcdGljb249eyBpY29uIH1cblx0XHRcdFx0XHRcdHNpemU9eyBzaXplIH1cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17IGNsYXNzTmFtZSB9XG5cdFx0XHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhIHBhdGggKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTVkdcblx0XHRcdFx0YXJpYS1oaWRkZW5cblx0XHRcdFx0cm9sZT1cImltZ1wiXG5cdFx0XHRcdGZvY3VzYWJsZT1cImZhbHNlXCJcblx0XHRcdFx0Y2xhc3NOYW1lPXtcblx0XHRcdFx0XHRjbGFzc05hbWVzKFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHRcdFx0J2Rhc2hpY29uJyxcblx0XHRcdFx0XHRcdGBkYXNoaWNvbnMtJHsgaWNvbiB9YCxcblx0XHRcdFx0XHRcdCdlc3ByZXNzby1pY29uJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0XHR4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcblx0XHRcdFx0d2lkdGg9eyBzaXplIH1cblx0XHRcdFx0aGVpZ2h0PXsgc2l6ZSB9XG5cdFx0XHRcdHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuXHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0PlxuXHRcdFx0XHQ8UGF0aCBkPXsgcGF0aCB9Lz5cblx0XHRcdDwvU1ZHPlxuXHRcdCk7XG5cdH1cbn0iLCJleHBvcnQgeyBBdmF0YXJJbWFnZSB9IGZyb20gJy4vYXZhdGFyJztcbmV4cG9ydCB7XG5cdEVzcHJlc3NvSWNvbixcblx0RVNQUkVTU09fSUNPTl9DQUxDVUxBVE9SLFxuXHRFU1BSRVNTT19JQ09OX0NBTEVOREFSLFxuXHRFU1BSRVNTT19JQ09OX1NBVkUsXG5cdGlzRXNwcmVzc29JY29uLFxufSBmcm9tICcuL2VzcHJlc3NvLWljb24nO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCaWdnaWVDYWxlbmRhckRhdGUgfSBmcm9tICcuL2RhdGVzLWFuZC10aW1lcy9iaWdnaWUtY2FsZW5kYXItZGF0ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENhbGVuZGFyRGF0ZVJhbmdlIH0gZnJvbSAnLi9kYXRlcy1hbmQtdGltZXMvY2FsZW5kYXItZGF0ZS1yYW5nZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENhbGVuZGFyUGFnZURhdGUgfSBmcm9tICcuL2RhdGVzLWFuZC10aW1lcy9jYWxlbmRhci1wYWdlLWRhdGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZWRpdW1DYWxlbmRhckRhdGUgfSBmcm9tICcuL2RhdGVzLWFuZC10aW1lcy9tZWRpdW0tY2FsZW5kYXItZGF0ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERyb3BEb3duTWVudSB9IGZyb20gJy4vZHJvcC1kb3duLW1lbnUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbnRpdHlEZXRhaWxzUGFuZWwgfSBmcm9tICcuL2VudGl0eS1kZXRhaWxzLXBhbmVsJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW50aXR5TGlzdCB9IGZyb20gJy4vZW50aXR5LWxpc3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoRW50aXR5UGFwZXJGcmFtZSB9IGZyb20gJy4vZW50aXR5LXBhcGVyLWZyYW1lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXNwcmVzc29CdXR0b24gfSBmcm9tICcuL2VzcHJlc3NvLWJ1dHRvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEljb25NZW51SXRlbSB9IGZyb20gJy4vaWNvbi1tZW51LWl0ZW0vaWNvbi1tZW51LWl0ZW0nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbnRpdHlBY3Rpb25NZW51SXRlbSB9IGZyb20gJy4vaWNvbi1tZW51LWl0ZW0vZW50aXR5LWFjdGlvbi1tZW51LWl0ZW0nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZXNwb25zaXZlVGFibGUsIEVzcHJlc3NvVGFibGUgfSBmcm9tICcuL3Jlc3BvbnNpdmUtdGFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi9pbWFnZSc7XG5leHBvcnQgKiBmcm9tICcuL21lbnUnO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGVwQnViYmxlTWVudSB9IGZyb20gJy4vc3RlcC1idWJibGUnO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuaW1wb3J0IFN0ZXBCdWJibGUgZnJvbSAnLi9zdGVwLWJ1YmJsZSc7XG5cbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgc3ByaW50ZiB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuXG4vKipcbiAqIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBhc3NlcnRpbmcgYSBTdGVwQ29uZmlndXJhdGlvbiBvYmplY3QgaXMgdmFsaWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cbmNvbnN0IGFzc2VydFN0ZXBDb25maWd1cmF0aW9uID0gKCB7IGxhYmVsLCB2YWx1ZSB9ICkgPT4ge1xuXHRpZiAoIHR5cGVvZiBsYWJlbCAhPT0gJ3N0cmluZycgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdHNwcmludGYoXG5cdFx0XHRcdCdTdGVwIGJ1YmJsZSBjb25maWd1cmF0aW9uIG9iamVjdCByZXF1aXJlcyBhIHN0cmluZyBmb3IgdGhlICcgK1xuXHRcdFx0XHQnJDEkcy4gJTIkcyB3YXMgcHJvdmlkZWQnLFxuXHRcdFx0XHQnbGFiZWwnLFxuXHRcdFx0XHRsYWJlbFxuXHRcdFx0KVxuXHRcdClcblx0fVxuXHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdHNwcmludGYoXG5cdFx0XHRcdCdTdGVwIGJ1YmJsZSBjb25maWd1cmF0aW9uIG9iamVjdCByZXF1aXJlcyBhICUxJHMgcHJvcGVydHksICcgK1xuXHRcdFx0XHQnJTIkcyB3YXMgcHJvdmlkZWQuJyxcblx0XHRcdFx0J3ZhbHVlJyxcblx0XHRcdFx0dmFsdWVcblx0XHRcdClcblx0XHQpO1xuXHR9XG59O1xuXG5jb25zdCBnZXRTdGVwQnViYmxlcyA9ICggYnViYmxlRGF0YSApID0+IHtcblx0Y29uc3Qgc3RlcEJ1YmJsZXMgPSBbXTtcblx0Zm9yICggY29uc3Qgc2x1ZyBpbiBidWJibGVEYXRhICkge1xuXHRcdGFzc2VydFN0ZXBDb25maWd1cmF0aW9uKCBidWJibGVEYXRhWyBzbHVnIF0gKTtcblx0XHRjb25zdCB7XG5cdFx0XHRsYWJlbCxcblx0XHRcdHZhbHVlLFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0Y2xpY2thYmxlLFxuXHRcdFx0YWN0aXZlLFxuXHRcdH0gPSBidWJibGVEYXRhWyBzbHVnIF07XG5cdFx0c3RlcEJ1YmJsZXMucHVzaChcblx0XHRcdDxTdGVwQnViYmxlXG5cdFx0XHRcdGtleT17IHNsdWcgfVxuXHRcdFx0XHRsYWJlbD17IGxhYmVsIH1cblx0XHRcdFx0c2x1Zz17IHNsdWcgfVxuXHRcdFx0XHRhY3Rpb249eyBhY3Rpb24gfVxuXHRcdFx0XHRzdGVwVmFsdWU9eyB2YWx1ZSB9XG5cdFx0XHRcdGNsaWNrYWJsZT17IGNsaWNrYWJsZSB9XG5cdFx0XHRcdGlzQWN0aXZlPXsgYWN0aXZlIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gc3RlcEJ1YmJsZXM7XG59O1xuXG5jb25zdCBTdGVwQnViYmxlTWVudSA9ICggeyBidWJibGVEYXRhIH0gKSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1zdGVwLWJ1YmJsZS1tZW51LWNvbnRhaW5lclwiPlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzdGVwLWJ1YmJsZXMtY29udGFpbmVyXCIgcm9sZT1cIm1lbnVcIiB0YWJJbmRleD17IDEgfT5cblx0XHRcdHsgZ2V0U3RlcEJ1YmJsZXMoIGJ1YmJsZURhdGEgKSB9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cblN0ZXBCdWJibGVNZW51LnByb3BUeXBlcyA9IHsgYnViYmxlRGF0YTogUHJvcFR5cGVzLm9iamVjdCB9O1xuU3RlcEJ1YmJsZU1lbnUuZGVmYXVsdFByb3BzID0geyBidWJibGVEYXRhOiB7fSB9O1xuXG5leHBvcnQgZGVmYXVsdCBTdGVwQnViYmxlTWVudTtcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgU3RlcFRleHQgZnJvbSAnLi9zdGVwLXRleHQnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHB1cmUgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgU3RlcEJ1YmJsZSA9ICgge1xuXHRsYWJlbCxcblx0c2x1Zyxcblx0aXNBY3RpdmUsXG5cdHN0ZXBWYWx1ZSxcblx0Y2xpY2thYmxlLFxuXHRhY3Rpb24sXG59ICkgPT4ge1xuXHRjb25zdCBjc3NDbGFzcyA9IGNsYXNzTmFtZXMoXG5cdFx0J2VlLXN0ZXAtYnViYmxlLWl0ZW0nLFxuXHRcdHsgJ2VlLXN0ZXAtYnViYmxlLWFjdGl2ZSc6IGlzQWN0aXZlIH0sXG5cdFx0eyAnZWUtY2xpY2thYmxlJzogY2xpY2thYmxlIH0sXG5cdCk7XG5cdGNvbnN0IGNsaWNrQWN0aW9ucyA9IGNsaWNrYWJsZSAmJiBpc0Z1bmN0aW9uKCBhY3Rpb24gKSA/XG5cdFx0e1xuXHRcdFx0b25DbGljazogKCkgPT4gYWN0aW9uKCBzbHVnICksXG5cdFx0XHRvbktleVByZXNzOiAoIGV2ZW50ICkgPT4ge1xuXHRcdFx0XHRpZiAoIGV2ZW50LmtleSA9PT0gJ0VudGVyJyApIHtcblx0XHRcdFx0XHRhY3Rpb24oIHNsdWcgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHJvbGU6ICdtZW51aXRlbScsXG5cdFx0fSA6XG5cdFx0e307XG5cdHJldHVybiA8YnV0dG9uXG5cdFx0Y2xhc3NOYW1lPXsgY3NzQ2xhc3MgfVxuXHRcdHRhYkluZGV4PXsgLTEgfVxuXHRcdHsgLi4uY2xpY2tBY3Rpb25zIH1cblx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwcm9ncmVzcy1zdGVwLWxpbmVcIiAvPlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1zdGVwLWJ1YmJsZVwiPlxuXHRcdFx0XHQ8cD57IHN0ZXBWYWx1ZSB9PC9wPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8U3RlcFRleHQgY29udGVudD17IGxhYmVsIH0gLz5cblx0XHQ8L2J1dHRvbj47XG59O1xuXG5TdGVwQnViYmxlLnByb3BUeXBlcyA9IHtcblx0bGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0c2x1ZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG5cdHN0ZXBWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLFxuXHRjbGlja2FibGU6IFByb3BUeXBlcy5ib29sLFxuXHRhY3Rpb246IFByb3BUeXBlcy5mdW5jLFxufTtcblxuU3RlcEJ1YmJsZS5kZWZhdWx0UHJvcHMgPSB7XG5cdGlzQWN0aXZlOiBmYWxzZSxcblx0c3RlcFZhbHVlOiAxLFxuXHRjbGlja2FibGU6IHRydWUsXG5cdGFjdGlvbjogKCkgPT4gbnVsbCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHB1cmUoIFN0ZXBCdWJibGUgKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgcHVyZSB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cblxuZXhwb3J0IGNvbnN0IFN0ZXBUZXh0ID0gKCB7IGNvbnRlbnQgfSApID0+IHtcblx0cmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cImVlLXN0ZXAtYnViYmxlLXN0ZXAtdGV4dFwiPlxuXHRcdHsgY29udGVudCB9XG5cdDwvc3Bhbj47XG59O1xuXG5TdGVwVGV4dC5wcm9wVHlwZXMgPSB7IGNvbnRlbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCB9O1xuXG5leHBvcnQgZGVmYXVsdCBwdXJlKCBTdGVwVGV4dCApO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLXN0ZXAtYnViYmxlLW1lbnUtY29udGFpbmVyXCI6XCJlZS1zdGVwLWJ1YmJsZS1tZW51LWNvbnRhaW5lclwiLFwic3RlcC1idWJibGVzLWNvbnRhaW5lclwiOlwic3RlcC1idWJibGVzLWNvbnRhaW5lclwiLFwiZWUtc3RlcC1idWJibGUtaXRlbVwiOlwiZWUtc3RlcC1idWJibGUtaXRlbVwiLFwicHJvZ3Jlc3Mtc3RlcC1saW5lXCI6XCJwcm9ncmVzcy1zdGVwLWxpbmVcIixcImVlLXN0ZXAtYnViYmxlXCI6XCJlZS1zdGVwLWJ1YmJsZVwiLFwiZWUtY2xpY2thYmxlXCI6XCJlZS1jbGlja2FibGVcIixcImVlLXN0ZXAtYnViYmxlLWFjdGl2ZVwiOlwiZWUtc3RlcC1idWJibGUtYWN0aXZlXCIsXCJlZS1zdGVwLWJ1YmJsZS1zdGVwLXRleHRcIjpcImVlLXN0ZXAtYnViYmxlLXN0ZXAtdGV4dFwifTsiLCJpbXBvcnQgeyBkZWZhdWx0IGFzIFJlc3BvbnNpdmVUYWJsZSB9IGZyb20gJy4vcmVzcG9uc2l2ZS10YWJsZSc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFRhYmxlIH0gZnJvbSAnLi90YWJsZSc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFRhYmxlSGVhZGVyIH0gZnJvbSAnLi90YWJsZS1oZWFkZXInO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBUYWJsZUJvZHkgfSBmcm9tICcuL3RhYmxlLWJvZHknO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBUYWJsZUZvb3RlciB9IGZyb20gJy4vdGFibGUtZm9vdGVyJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgVGFibGVSb3cgfSBmcm9tICcuL3RhYmxlLXJvdyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFRhYmxlSGVhZGluZ0NlbGwgfSBmcm9tICcuL3RhYmxlLWhlYWRpbmctY2VsbCc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFRhYmxlRGF0YUNlbGwgfSBmcm9tICcuL3RhYmxlLWRhdGEtY2VsbCc7XG5cbmV4cG9ydCBjb25zdCBFc3ByZXNzb1RhYmxlID0ge1xuXHRUYWJsZSxcblx0VGFibGVIZWFkZXIsXG5cdFRhYmxlQm9keSxcblx0VGFibGVSb3csXG5cdFRhYmxlRm9vdGVyLFxuXHRUYWJsZUhlYWRpbmdDZWxsLFxuXHRUYWJsZURhdGFDZWxsLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVzcG9uc2l2ZVRhYmxlO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgaGVhZGluZ3Mgcm93XG4gKi9cbmNvbnN0IFJlc3BvbnNpdmVDZWxsID0gKCB7IGhlYWRpbmcgPSAnJywgdmFsdWUgPSAnJyB9ICkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxGcmFnbWVudD5cblx0XHRcdDxkaXYgYXJpYS1oaWRkZW5cblx0XHRcdFx0Y2xhc3NOYW1lPXsgJ2VlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVyJyB9XG5cdFx0XHQ+XG5cdFx0XHRcdHsgaGVhZGluZyB9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgJ2VlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWUnIH0gPlxuXHRcdFx0XHR7IHZhbHVlIH1cblx0XHRcdDwvZGl2PlxuXHRcdDwvRnJhZ21lbnQ+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZXNwb25zaXZlQ2VsbDtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBmaXJzdCwgaXNBcnJheSwgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBUYWJsZSBmcm9tICcuL3RhYmxlJztcbmltcG9ydCBUYWJsZUhlYWRlciBmcm9tICcuL3RhYmxlLWhlYWRlcic7XG5pbXBvcnQgVGFibGVCb2R5IGZyb20gJy4vdGFibGUtYm9keSc7XG5pbXBvcnQgVGFibGVGb290ZXIgZnJvbSAnLi90YWJsZS1mb290ZXInO1xuaW1wb3J0IFRhYmxlUm93IGZyb20gJy4vdGFibGUtcm93JztcbmltcG9ydCBUYWJsZUhlYWRpbmdDZWxsIGZyb20gJy4vdGFibGUtaGVhZGluZy1jZWxsJztcbmltcG9ydCBUYWJsZURhdGFDZWxsIGZyb20gJy4vdGFibGUtZGF0YS1jZWxsJztcbmltcG9ydCBSZXNwb25zaXZlQ2VsbCBmcm9tICcuL3Jlc3BvbnNpdmUtY2VsbCc7XG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcblxuLyoqXG4gKiBSZXNwb25zaXZlRGF0YUdyaWQgcmVzcG9uc2l2ZS10YWJsZVxuICogcHJvZHVjZXMgYSB0YWJsZSBsaWtlIHN0cnVjdHVyZSBmb3IgZGlzcGxheWluZyB0YWJ1bGFyIGRhdGFcbiAqIGluIGEgZ3JpZCB0aGF0IGNvbGxhcHNlcyBwcm9wZXJseSBvbiBzbWFsbGVyIHNjcmVlbnNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBjb2x1bW5IZWFkZXJzXG4gKiBAcGFyYW0ge0FycmF5fSByb3dIZWFkZXJzXG4gKiBAcGFyYW0ge0FycmF5fSB0YWJsZURhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBtZXRhRGF0YVxuICovXG5jbGFzcyBSZXNwb25zaXZlVGFibGUgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheU9mKFxuXHRcdFx0UHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0XHRcdHR5cGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRcdFx0dmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRcdFx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRcdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0XSApLmlzUmVxdWlyZWQsXG5cdFx0XHRcdGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRjbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0ZXh0cmFQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblx0XHRcdH0gKVxuXHRcdCkuaXNSZXF1aXJlZCxcblx0XHRyb3dEYXRhOiBQcm9wVHlwZXMuYXJyYXlPZihcblx0XHRcdFByb3BUeXBlcy5hcnJheU9mKFxuXHRcdFx0XHRQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRcdFx0XHR0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdFx0XHRcdFx0dmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFx0XHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdFx0XHRcdFx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0XHRcdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0XHRdICkuaXNSZXF1aXJlZCxcblx0XHRcdFx0XHRpZDogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0XHRjbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0XHRyZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuXHRcdFx0XHRcdGV4dHJhUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cdFx0XHRcdH0gKVxuXHRcdFx0KVxuXHRcdCkuaXNSZXF1aXJlZCxcblx0XHRtZXRhRGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0XHR0YWJsZUNhcHRpb246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRcdHNob3dUYWJsZUZvb3RlcjogUHJvcFR5cGVzLmJvb2wsXG5cdFx0XHRoYXNSb3dIZWFkZXJzOiBQcm9wVHlwZXMuYm9vbCxcblx0XHR9ICkuaXNSZXF1aXJlZCxcblx0XHRjbGFzc2VzOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRcdHRhYmxlQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRoZWFkZXJDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdGhlYWRlclJvd0NsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0aGVhZGVyVGhDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdGJvZHlDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdGJvZHlSb3dDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdGJvZHlUaENsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0Ym9keVRkQ2xhc3M6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRmb290ZXJDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdGZvb3RlclJvd0NsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0Zm9vdGVyVGhDbGFzczogUHJvcFR5cGVzLnN0cmluZyxcblx0XHR9ICksXG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gbWV0YURhdGFcblx0ICovXG5cdHNldE1ldGFEYXRhID0gKCBtZXRhRGF0YSA9IHt9ICkgPT4ge1xuXHRcdHRoaXMudGFibGVJZCA9ICdlZS1yVGFibGUtJyArXG5cdFx0XHRNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCAzNiApLnN1YnN0ciggMiwgOSApO1xuXHRcdHRoaXMudGFibGVDYXB0aW9uID0gbWV0YURhdGEudGFibGVDYXB0aW9uIHx8ICcnO1xuXHRcdHRoaXMuY2FwdGlvbklEID0gYCR7IHRoaXMudGFibGVJZCB9LWNhcHRpb25gO1xuXHRcdHRoaXMuc2hvd1RhYmxlRm9vdGVyID0gdHlwZW9mIG1ldGFEYXRhLnNob3dUYWJsZUZvb3RlciA9PT0gJ3VuZGVmaW5lZCcgP1xuXHRcdFx0dHJ1ZSA6IG1ldGFEYXRhLnNob3dUYWJsZUZvb3Rlcjtcblx0XHR0aGlzLmhhc1Jvd0hlYWRlcnMgPSAhISBtZXRhRGF0YS5oYXNSb3dIZWFkZXJzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGNsYXNzZXNcblx0ICovXG5cdHNldENzc0NsYXNzZXMgPSAoIGNsYXNzZXMgKSA9PiB7XG5cdFx0dGhpcy5jbGFzc2VzID0ge1xuXHRcdFx0dGFibGVDbGFzczogY2xhc3Nlcy50YWJsZUNsYXNzIHx8ICcnLFxuXHRcdFx0aGVhZGVyQ2xhc3M6IGNsYXNzZXMuaGVhZGVyQ2xhc3MgfHwgJycsXG5cdFx0XHRoZWFkZXJSb3dDbGFzczogY2xhc3Nlcy5oZWFkZXJSb3dDbGFzcyB8fCAnJyxcblx0XHRcdGhlYWRlclRoQ2xhc3M6IGNsYXNzZXMuaGVhZGVyVGhDbGFzcyB8fCAnJyxcblx0XHRcdGJvZHlDbGFzczogY2xhc3Nlcy5ib2R5Q2xhc3MgfHwgJycsXG5cdFx0XHRib2R5Um93Q2xhc3M6IGNsYXNzZXMuYm9keVJvd0NsYXNzIHx8ICcnLFxuXHRcdFx0Ym9keVRoQ2xhc3M6IGNsYXNzZXMuYm9keVRoQ2xhc3MgfHwgJycsXG5cdFx0XHRib2R5VGRDbGFzczogY2xhc3Nlcy5ib2R5VGRDbGFzcyB8fCAnJyxcblx0XHRcdGZvb3RlckNsYXNzOiBjbGFzc2VzLmZvb3RlckNsYXNzIHx8ICcnLFxuXHRcdFx0Zm9vdGVyUm93Q2xhc3M6IGNsYXNzZXMuZm9vdGVyUm93Q2xhc3MgfHwgJycsXG5cdFx0XHRmb290ZXJUaENsYXNzOiBjbGFzc2VzLmZvb3RlclRoQ2xhc3MgfHwgJycsXG5cdFx0fTtcblx0XHR0aGlzLmNsYXNzZXMudGFibGVDbGFzcyA9IGNsYXNzTmFtZXMoXG5cdFx0XHR0aGlzLmNsYXNzZXMudGFibGVDbGFzcyxcblx0XHRcdHtcblx0XHRcdFx0J2VlLXJUYWJsZS1oYXMtcm93LWhlYWRlcnMnOiB0aGlzLmhhc1Jvd0hlYWRlcnNcblx0XHRcdH1cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtBcnJheX0gY29sdW1uc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzRm9vdGVyXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgaGVhZGluZ3Mgcm93XG5cdCAqL1xuXHR0YWJsZUhlYWRlciA9ICggY29sdW1ucywgaXNGb290ZXIgPSBmYWxzZSApID0+IHtcblx0XHR0aGlzLnJvd051bWJlcisrO1xuXHRcdGNvbnN0IHJvd1R5cGUgPSBpc0Zvb3RlciA9PT0gdHJ1ZSA/ICdmb290ZXInIDogJ2hlYWRlcic7XG5cdFx0bGV0IHJvd1Byb3BzID0ge307XG5cdFx0bGV0IGluZGV4TW9kID0gMDtcblx0XHRjb25zdCBoZWFkZXJDZWxscyA9IGNvbHVtbnMubWFwKFxuXHRcdFx0KCBjb2x1bW4sIGNvbE51bWJlciApID0+IHtcblx0XHRcdFx0Y29sdW1uLnJvd1R5cGUgPSBjb2x1bW4ucm93VHlwZSB8fCByb3dUeXBlO1xuXHRcdFx0XHRpZiAoIGNvbHVtbi50eXBlICYmIGNvbHVtbi50eXBlID09PSAncm93JyApIHtcblx0XHRcdFx0XHRyb3dQcm9wcyA9IGNvbHVtbjtcblx0XHRcdFx0XHRpbmRleE1vZCsrO1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuY29sdW1ucy5wdXNoKCBjb2x1bW4gKTtcblx0XHRcdFx0Y29sTnVtYmVyIC09IGluZGV4TW9kO1xuXHRcdFx0XHRjb25zdCBoYXNSZW5kZXJDYWxsYmFjayA9IGlzRnVuY3Rpb24oIGNvbHVtbi5yZW5kZXIgKTtcblx0XHRcdFx0d2FybmluZyhcblx0XHRcdFx0XHRoYXNSZW5kZXJDYWxsYmFjayB8fCBjb2x1bW4uaGFzT3duUHJvcGVydHkoICd2YWx1ZScgKSxcblx0XHRcdFx0XHRgTWlzc2luZyBcInZhbHVlXCIgcHJvcGVydHkgZm9yICR7IHJvd1R5cGUgfSBjb2x1bW4gJHsgY29sTnVtYmVyIH0uYFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCByZW5kZXJDYWxsYmFjayA9IGhhc1JlbmRlckNhbGxiYWNrID9cblx0XHRcdFx0XHRjb2x1bW4ucmVuZGVyIDpcblx0XHRcdFx0XHR0aGlzLmhlYWRpbmdDZWxsO1xuXHRcdFx0XHRyZXR1cm4gcmVuZGVyQ2FsbGJhY2soIHRoaXMucm93TnVtYmVyLCBjb2xOdW1iZXIsIGNvbHVtbiApO1xuXHRcdFx0fVxuXHRcdCk7XG5cdFx0cmV0dXJuIHRoaXMudGFibGVSb3coIGhlYWRlckNlbGxzLCByb3dQcm9wcyApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtBcnJheX0gY2VsbHNcblx0ICogQHBhcmFtIHtPYmplY3R9IHJvd1Byb3BzXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgPHRyPiBlbGVtZW50XG5cdCAqL1xuXHR0YWJsZVJvdyA9ICggY2VsbHMsIHJvd1Byb3BzID0ge30gKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUYWJsZVJvd1xuXHRcdFx0XHRrZXk9eyBgcm93LSR7IHRoaXMucm93TnVtYmVyIH1gIH1cblx0XHRcdFx0cm93TnVtYmVyPXsgdGhpcy5yb3dOdW1iZXIgfVxuXHRcdFx0XHRyb3dUeXBlPXsgcm93UHJvcHMucm93VHlwZSB8fCAnYm9keScgfVxuXHRcdFx0XHRodG1sSWQ9eyByb3dQcm9wcy5pZCB8fCB0aGlzLnRhYmxlSWQgfVxuXHRcdFx0XHRodG1sQ2xhc3M9eyByb3dQcm9wcy5jbGFzcyB8fCAnJyB9XG5cdFx0XHRcdGNsYXNzZXM9eyB0aGlzLmNsYXNzZXMgfVxuXHRcdFx0PlxuXHRcdFx0XHR7IGNlbGxzIH1cblx0XHRcdDwvVGFibGVSb3c+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSByb3dOdW1iZXJcblx0ICogQHBhcmFtIHtudW1iZXJ9IGNvbE51bWJlclxuXHQgKiBAcGFyYW0ge09iamVjdH0gY2VsbFByb3BzXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgY29sdW1uIGhlYWRlciBjZWxsXG5cdCAqL1xuXHRoZWFkaW5nQ2VsbCA9ICggcm93TnVtYmVyLCBjb2xOdW1iZXIsIGNlbGxQcm9wcyApID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRhYmxlSGVhZGluZ0NlbGxcblx0XHRcdFx0a2V5PXsgYHJvdy0keyByb3dOdW1iZXIgfS1jb2wtJHsgY29sTnVtYmVyIH1gIH1cblx0XHRcdFx0cm93TnVtYmVyPXsgcm93TnVtYmVyIH1cblx0XHRcdFx0Y29sTnVtYmVyPXsgY29sTnVtYmVyIH1cblx0XHRcdFx0cm93VHlwZT17IGNlbGxQcm9wcy5yb3dUeXBlIHx8ICdib2R5JyB9XG5cdFx0XHRcdGh0bWxJZD17IGNlbGxQcm9wcy5pZCB8fCB0aGlzLnRhYmxlSWQgfVxuXHRcdFx0XHRodG1sQ2xhc3M9eyBjZWxsUHJvcHMuY2xhc3MgfHwgJycgfVxuXHRcdFx0XHRjbGFzc2VzPXsgdGhpcy5jbGFzc2VzIH1cblx0XHRcdD5cblx0XHRcdFx0eyBjZWxsUHJvcHMudmFsdWUgfHwgJycgfVxuXHRcdFx0PC9UYWJsZUhlYWRpbmdDZWxsPlxuXHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge0FycmF5fSBkYXRhUm93XG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZGF0YSByb3dcblx0ICovXG5cdGRhdGFSb3cgPSAoIGRhdGFSb3cgKSA9PiB7XG5cdFx0dGhpcy5yb3dOdW1iZXIrKztcblx0XHR3YXJuaW5nKFxuXHRcdFx0aXNBcnJheSggZGF0YVJvdyApLFxuXHRcdFx0YERhdGEgZm9yIHJvdyAkeyB0aGlzLnJvd051bWJlciB9IGlzIG5vdCBhbiBhcnJheS5gXG5cdFx0KTtcblx0XHRsZXQgcm93UHJvcHMgPSB7fTtcblx0XHRsZXQgaW5kZXhNb2QgPSAwO1xuXHRcdGNvbnN0IHJvd0NlbGxzID0gZGF0YVJvdy5tYXAoXG5cdFx0XHQoIGNlbGxEYXRhLCBjb2xOdW1iZXIgKSA9PiB7XG5cdFx0XHRcdGNlbGxEYXRhLnJvd1R5cGUgPSBjZWxsRGF0YS5yb3dUeXBlIHx8ICdib2R5Jztcblx0XHRcdFx0aWYgKCBjZWxsRGF0YS50eXBlICYmIGNlbGxEYXRhLnR5cGUgPT09ICdyb3cnICkge1xuXHRcdFx0XHRcdHJvd1Byb3BzID0gY2VsbERhdGE7XG5cdFx0XHRcdFx0aW5kZXhNb2QrKztcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBhZGp1c3QgY29sdW1uIG51bWJlciB1c2VkIGluIElEc1xuXHRcdFx0XHQvLyBiZWZvcmUgZ3JhYmJpbmcgZWxlbWVudCBmcm9tIGNvbHVtbiBkYXRhXG5cdFx0XHRcdGNvbE51bWJlciAtPSBpbmRleE1vZDtcblx0XHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zWyBjb2xOdW1iZXIgXTtcblx0XHRcdFx0aWYgKCAhIGNvbHVtbiApIHtcblx0XHRcdFx0XHR3YXJuaW5nKFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRgTWlzc2luZyBkYXRhIGZvciBjb2x1bW4gJHsgY29sTnVtYmVyIH0gYCArXG5cdFx0XHRcdFx0XHRgaW4gcm93ICR7IHRoaXMucm93TnVtYmVyIH0uYFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgaGFzUmVuZGVyQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBjZWxsRGF0YS5yZW5kZXIgKTtcblx0XHRcdFx0d2FybmluZyhcblx0XHRcdFx0XHRoYXNSZW5kZXJDYWxsYmFjayB8fCBjZWxsRGF0YS5oYXNPd25Qcm9wZXJ0eSggJ3ZhbHVlJyApLFxuXHRcdFx0XHRcdGBNaXNzaW5nIFwidmFsdWVcIiBwcm9wZXJ0eSBmb3IgdGFibGUgY2VsbCBhdCBgICtcblx0XHRcdFx0XHRgcm93ICR7IHRoaXMucm93TnVtYmVyIH0gY29sdW1uICR7IGNvbE51bWJlciB9LmBcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgcmVuZGVyQ2FsbGJhY2sgPSBoYXNSZW5kZXJDYWxsYmFjayA/XG5cdFx0XHRcdFx0Y2VsbERhdGEucmVuZGVyIDpcblx0XHRcdFx0XHR0aGlzLmRhdGFDZWxsO1xuXHRcdFx0XHRyZXR1cm4gcmVuZGVyQ2FsbGJhY2soXG5cdFx0XHRcdFx0dGhpcy5yb3dOdW1iZXIsXG5cdFx0XHRcdFx0Y29sTnVtYmVyLFxuXHRcdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0XHRjZWxsRGF0YVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdFx0cmV0dXJuIHRoaXMudGFibGVSb3coIHJvd0NlbGxzLCByb3dQcm9wcyApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtudW1iZXJ9IHJvd051bWJlclxuXHQgKiBAcGFyYW0ge251bWJlcn0gY29sTnVtYmVyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBjb2x1bW5cblx0ICogQHBhcmFtIHtPYmplY3R9IGNlbGxEYXRhXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgaGVhZGluZ3Mgcm93XG5cdCAqL1xuXHRkYXRhQ2VsbCA9ICggcm93TnVtYmVyLCBjb2xOdW1iZXIsIGNvbHVtbiwgY2VsbERhdGEgKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMuaGFzUm93SGVhZGVycyAmJiBjb2xOdW1iZXIgPT09IDAgPyAoXG5cdFx0XHR0aGlzLmhlYWRpbmdDZWxsKCByb3dOdW1iZXIsIGNvbE51bWJlciwgY2VsbERhdGEgKVxuXHRcdCkgOiAoXG5cdFx0XHQ8VGFibGVEYXRhQ2VsbFxuXHRcdFx0XHRrZXk9eyBgcm93LSR7IHJvd051bWJlciB9LWNvbC0keyBjb2xOdW1iZXIgfWAgfVxuXHRcdFx0XHRyb3dOdW1iZXI9eyByb3dOdW1iZXIgfVxuXHRcdFx0XHRjb2xOdW1iZXI9eyBjb2xOdW1iZXIgfVxuXHRcdFx0XHRodG1sSWQ9eyBjZWxsRGF0YS5pZCB8fCB0aGlzLnRhYmxlSWQgfVxuXHRcdFx0XHRodG1sQ2xhc3M9eyBjZWxsRGF0YS5jbGFzcyB8fCAnJyB9XG5cdFx0XHRcdGNsYXNzZXM9eyB0aGlzLmNsYXNzZXMgfVxuXHRcdFx0PlxuXHRcdFx0XHQ8UmVzcG9uc2l2ZUNlbGxcblx0XHRcdFx0XHRoZWFkaW5nPXsgY29sdW1uLnZhbHVlIH1cblx0XHRcdFx0XHR2YWx1ZT17IGNlbGxEYXRhLnZhbHVlIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvVGFibGVEYXRhQ2VsbD5cblx0XHQpO1xuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRjb2x1bW5zID0gW10sXG5cdFx0XHRyb3dEYXRhID0gW10sXG5cdFx0XHRmb290ZXJEYXRhID0gW10sXG5cdFx0XHRtZXRhRGF0YSA9IHt9LFxuXHRcdFx0Y2xhc3NlcyA9IHt9LFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdGlmICggaXNFbXB0eSggY29sdW1ucyApICkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHRoaXMuc2V0TWV0YURhdGEoIG1ldGFEYXRhICk7XG5cdFx0dGhpcy5zZXRDc3NDbGFzc2VzKCBjbGFzc2VzIHx8IHt9ICk7XG5cdFx0dGhpcy5jb2x1bW5zID0gW107XG5cdFx0dGhpcy5yb3dOdW1iZXIgPSAtMTtcblx0XHRjb25zdCB0YWJsZUhlYWRlciA9IHRoaXMudGFibGVIZWFkZXIoIGNvbHVtbnMgKTtcblx0XHR0aGlzLmNsYXNzZXMudGFibGVDbGFzcyA9IGNsYXNzTmFtZXMoXG5cdFx0XHR0aGlzLmNsYXNzZXMudGFibGVDbGFzcyxcblx0XHRcdGBlZS1yVGFibGUtY29sdW1uLWNvdW50LSR7IHRoaXMuY29sdW1ucy5sZW5ndGggfWBcblx0XHQpO1xuXHRcdHRoaXMuc2hvd1RhYmxlRm9vdGVyID0gdGhpcy5zaG93VGFibGVGb290ZXIgJiYgISBpc0VtcHR5KCBmb290ZXJEYXRhICk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUYWJsZVxuXHRcdFx0XHR0YWJsZUlkPXsgdGhpcy50YWJsZUlkIH1cblx0XHRcdFx0dGFibGVDbGFzcz17IHRoaXMuY2xhc3Nlcy50YWJsZUNsYXNzIH1cblx0XHRcdFx0Y2FwdGlvbklEPXsgdGhpcy5jYXB0aW9uSUQgfVxuXHRcdFx0XHRjYXB0aW9uVGV4dD17IHRoaXMudGFibGVDYXB0aW9uIH1cblx0XHRcdD5cblx0XHRcdFx0PFRhYmxlSGVhZGVyIGh0bWxDbGFzcz17IHRoaXMuY2xhc3Nlcy5oZWFkZXJDbGFzcyB9ID5cblx0XHRcdFx0XHR7IHRhYmxlSGVhZGVyIH1cblx0XHRcdFx0PC9UYWJsZUhlYWRlcj5cblx0XHRcdFx0PFRhYmxlQm9keSBodG1sQ2xhc3M9eyB0aGlzLmNsYXNzZXMuYm9keUNsYXNzIH0+XG5cdFx0XHRcdFx0eyByb3dEYXRhLm1hcChcblx0XHRcdFx0XHRcdCggZGF0YVJvdyApID0+IHRoaXMuZGF0YVJvdyggZGF0YVJvdyApXG5cdFx0XHRcdFx0KSB9XG5cdFx0XHRcdDwvVGFibGVCb2R5PlxuXHRcdFx0XHQ8VGFibGVGb290ZXJcblx0XHRcdFx0XHRzaG93Rm9vdGVyPXsgdGhpcy5zaG93VGFibGVGb290ZXIgfVxuXHRcdFx0XHRcdGh0bWxDbGFzcz17IHRoaXMuY2xhc3Nlcy5mb290ZXJDbGFzcyB9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7IHRoaXMudGFibGVIZWFkZXIoIGZvb3RlckRhdGEsIHRydWUgKSB9XG5cdFx0XHRcdDwvVGFibGVGb290ZXI+XG5cdFx0XHQ8L1RhYmxlPlxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVzcG9uc2l2ZVRhYmxlO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLXJUYWJsZVwiOlwiZWUtclRhYmxlXCIsXCJlZS1yVGFibGUtaGVhZGVyXCI6XCJlZS1yVGFibGUtaGVhZGVyXCIsXCJlZS1yVGFibGUtYm9keVwiOlwiZWUtclRhYmxlLWJvZHlcIixcImVlLXJUYWJsZS1ib2R5LXJvd1wiOlwiZWUtclRhYmxlLWJvZHktcm93XCIsXCJlZS1yVGFibGUtZm9vdGVyXCI6XCJlZS1yVGFibGUtZm9vdGVyXCIsXCJlZS1yVGFibGUtZm9vdGVyLXJvd1wiOlwiZWUtclRhYmxlLWZvb3Rlci1yb3dcIixcImVlLXJUYWJsZS1oZWFkZXItcm93XCI6XCJlZS1yVGFibGUtaGVhZGVyLXJvd1wiLFwiZWUtclRhYmxlLWJvZHktdGRcIjpcImVlLXJUYWJsZS1ib2R5LXRkXCIsXCJlZS1yVGFibGUtZm9vdGVyLXRkXCI6XCJlZS1yVGFibGUtZm9vdGVyLXRkXCIsXCJlZS1yVGFibGUtZm9vdGVyLXRoXCI6XCJlZS1yVGFibGUtZm9vdGVyLXRoXCIsXCJlZS1yVGFibGUtaGVhZGVyLXRoXCI6XCJlZS1yVGFibGUtaGVhZGVyLXRoXCIsXCJlZS1yVGFibGUtaGFzLXJvdy1oZWFkZXJzXCI6XCJlZS1yVGFibGUtaGFzLXJvdy1oZWFkZXJzXCIsXCJlZS1yVGFibGUtYm9keS10aFwiOlwiZWUtclRhYmxlLWJvZHktdGhcIixcImVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWVcIjpcImVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWVcIixcImVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVyXCI6XCJlZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlclwiLFwiZWUtbnVtYmVyLWNvbHVtblwiOlwiZWUtbnVtYmVyLWNvbHVtblwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xXCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTFcIixcImVlLXJUYWJsZS1jb2x1bW4tY291bnQtMlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yXCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTNcIjpcImVlLXJUYWJsZS1jb2x1bW4tY291bnQtM1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTRcIixcImVlLXJUYWJsZS1jb2x1bW4tY291bnQtNVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTZcIjpcImVlLXJUYWJsZS1jb2x1bW4tY291bnQtNlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03XCI6XCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTdcIixcImVlLXJUYWJsZS1jb2x1bW4tY291bnQtOFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04XCIsXCJlZS1yVGFibGUtY29sdW1uLWNvdW50LTlcIjpcImVlLXJUYWJsZS1jb2x1bW4tY291bnQtOVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xM1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xM1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xN1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xN1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yM1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yM1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yN1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yN1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yOFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yOFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yOVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yOVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zM1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zM1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zN1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zN1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zOFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zOFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zOVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zOVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00M1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00M1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00N1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00N1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00OFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00OFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00OVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC00OVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01M1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01M1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01N1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01N1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01OFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01OFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01OVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC01OVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02M1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02M1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02N1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02N1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02OFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02OFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02OVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC02OVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03M1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03M1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03N1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03N1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03OFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03OFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03OVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC03OVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04M1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04M1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04N1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04N1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04OFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04OFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04OVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC04OVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05M1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05M1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NFwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NVwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NVwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NlwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NlwiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05N1wiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05N1wiLFwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05OFwiOlwiZWUtclRhYmxlLWNvbHVtbi1jb3VudC05OFwifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRyYVByb3BzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHRoZWFkXG4gKi9cbmNvbnN0IFRhYmxlQm9keSA9ICggeyBjaGlsZHJlbiwgaHRtbENsYXNzLCAuLi5leHRyYVByb3BzIH0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGNsYXNzTmFtZXMoXG5cdFx0aHRtbENsYXNzLFxuXHRcdCdlZS1yVGFibGUtYm9keSdcblx0KTtcblx0cmV0dXJuIChcblx0XHQ8dGJvZHkgY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0geyAuLi5leHRyYVByb3BzIH0+XG5cdFx0XHR7IGNoaWxkcmVuIH1cblx0XHQ8L3Rib2R5PlxuXHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVCb2R5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG4vKipcbiAqIEBwYXJhbSB7bWl4ZWR9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gcm93TnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0gY29sTnVtYmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gcm93VHlwZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxJZFxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHtPYmplY3R9IGNsYXNzZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRyYVByb3BzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIDx0aD4gaGVhZGluZyBjZWxsXG4gKi9cbmNvbnN0IFRhYmxlRGF0YUNlbGwgPSAoIHtcblx0Y2hpbGRyZW4sXG5cdHJvd051bWJlcixcblx0Y29sTnVtYmVyLFxuXHRodG1sSWQgPSAnJyxcblx0aHRtbENsYXNzID0gJycsXG5cdGNsYXNzZXMgPSB7fSxcblx0Li4uZXh0cmFQcm9wc1xufSApID0+IHtcblx0aHRtbElkID0gaHRtbElkID9cblx0XHRgJHsgaHRtbElkIH0tcm93LSR7IHJvd051bWJlciB9LWNvbC0keyBjb2xOdW1iZXIgfWAgOlxuXHRcdGBlZS1yVGFibGUtcm93LSR7IHJvd051bWJlciB9LWNvbC0keyBjb2xOdW1iZXIgfWA7XG5cdGh0bWxDbGFzcyA9IGNsYXNzTmFtZXMoXG5cdFx0aHRtbENsYXNzLFxuXHRcdCdlZS1yVGFibGUtYm9keS10ZCcsXG5cdFx0YGNvbC0keyBjb2xOdW1iZXIgfWAsXG5cdFx0Y2xhc3Nlcy5ib2R5VGRDbGFzc1xuXHQpO1xuXHRyZXR1cm4gKFxuXHRcdDx0ZCBpZD17IGh0bWxJZCB9IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9IHsgLi4uZXh0cmFQcm9wcyB9ID5cblx0XHRcdHsgY2hpbGRyZW4gfVxuXHRcdDwvdGQ+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZURhdGFDZWxsO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd0Zvb3RlclxuICogQHBhcmFtIHtBcnJheX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRyYVByb3BzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHRoZWFkXG4gKi9cbmNvbnN0IFRhYmxlRm9vdGVyID0gKCB7IHNob3dGb290ZXIsIGNoaWxkcmVuLCBodG1sQ2xhc3MsIC4uLmV4dHJhUHJvcHMgfSApID0+IHtcblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcyhcblx0XHRodG1sQ2xhc3MsXG5cdFx0J2VlLXJUYWJsZS1mb290ZXInXG5cdCk7XG5cdHJldHVybiBzaG93Rm9vdGVyID8gKFxuXHRcdDx0Zm9vdCBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfSB7IC4uLmV4dHJhUHJvcHMgfT5cblx0XHRcdHsgY2hpbGRyZW4gfVxuXHRcdDwvdGZvb3Q+XG5cdCkgOiBudWxsO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVGb290ZXI7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRyYVByb3BzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHRoZWFkXG4gKi9cbmNvbnN0IFRhYmxlSGVhZGVyID0gKCB7IGNoaWxkcmVuLCBodG1sQ2xhc3MsIC4uLmV4dHJhUHJvcHMgfSApID0+IHtcblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcyhcblx0XHRodG1sQ2xhc3MsXG5cdFx0J2VlLXJUYWJsZS1oZWFkZXInXG5cdCk7XG5cdHJldHVybiAoXG5cdFx0PHRoZWFkIGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9IHsgLi4uZXh0cmFQcm9wcyB9PlxuXHRcdFx0eyBjaGlsZHJlbiB9XG5cdFx0PC90aGVhZD5cblx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGVyO1xuIiwiLyoqXG4gKiBAcGFyYW0ge21peGVkfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IHJvd051bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IGNvbE51bWJlclxuICogQHBhcmFtIHtzdHJpbmd9IHJvd1R5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBjbGFzc2VzXG4gKiBAcGFyYW0ge09iamVjdH0gZXh0cmFQcm9wc1xuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCA8dGg+IGhlYWRpbmcgY2VsbFxuICovXG5jb25zdCBUYWJsZUhlYWRpbmdDZWxsID0gKCB7XG5cdGNoaWxkcmVuLFxuXHRyb3dOdW1iZXIsXG5cdGNvbE51bWJlcixcblx0cm93VHlwZSxcblx0aHRtbElkID0gJycsXG5cdGh0bWxDbGFzcyA9ICcnLFxuXHRjbGFzc2VzID0ge30sXG5cdC4uLmV4dHJhUHJvcHNcbn0gKSA9PiB7XG5cdGh0bWxJZCA9IGh0bWxJZCA/XG5cdFx0YCR7IGh0bWxJZCB9LSR7IHJvd1R5cGUgfS1yb3ctJHsgcm93TnVtYmVyIH0tY29sLSR7IGNvbE51bWJlciB9YCA6XG5cdFx0YGVlLXJUYWJsZS0keyByb3dUeXBlIH0tcm93LSR7IHJvd051bWJlciB9LWNvbC0keyBjb2xOdW1iZXIgfWA7XG5cdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyA/XG5cdFx0YCR7IGh0bWxDbGFzcyB9IGVlLXJUYWJsZS0keyByb3dUeXBlIH0tdGggY29sLSR7IGNvbE51bWJlciB9YCA6XG5cdFx0YGVlLXJUYWJsZS0keyByb3dUeXBlIH0tdGggY29sLSR7IGNvbE51bWJlciB9YDtcblx0Y29uc3Qgcm93VHlwZUNsYXNzID0gcm93VHlwZSArICdUaENsYXNzJztcblx0aHRtbENsYXNzID0gY2xhc3Nlc1sgcm93VHlwZUNsYXNzIF0gP1xuXHRcdGAkeyBodG1sQ2xhc3MgfSAkeyBjbGFzc2VzWyByb3dUeXBlQ2xhc3MgXSB9YCA6XG5cdFx0aHRtbENsYXNzO1xuXHRpZiAoIHJvd1R5cGUgPT09ICdoZWFkZXInICkge1xuXHRcdGV4dHJhUHJvcHMucm9sZSA9IFwiY29sdW1uaGVhZGVyXCI7XG5cdFx0ZXh0cmFQcm9wcy5zY29wZSA9IFwiY29sXCJcblx0fSBlbHNlIGlmICggcm93VHlwZSA9PT0gJ2JvZHknICkge1xuXHRcdGV4dHJhUHJvcHMuc2NvcGUgPSBcInJvd1wiO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0PHRoIGlkPXsgaHRtbElkIH0gY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0geyAuLi5leHRyYVByb3BzIH0gPlxuXHRcdFx0eyBjaGlsZHJlbiB9XG5cdFx0PC90aD5cblx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGluZ0NlbGw7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3dOdW1iZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBjbGFzc2VzXG4gKiBAcGFyYW0ge09iamVjdH0gY2xhc3Nlc1xuICogQHBhcmFtIHtzdHJpbmd9IHJvd1R5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRyYVByb3BzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHRyXG4gKi9cbmNvbnN0IFRhYmxlUm93ID0gKCB7XG5cdGNoaWxkcmVuLFxuXHRyb3dOdW1iZXIsXG5cdGh0bWxJZCA9ICcnLFxuXHRodG1sQ2xhc3MgPSAnJyxcblx0Y2xhc3NlcyA9IHt9LFxuXHRyb3dUeXBlID0gJ2JvZHknLFxuXHQuLi5leHRyYVByb3BzXG59ICkgPT4ge1xuXHRyb3dUeXBlICs9ICdSb3dDbGFzcyc7XG5cdGh0bWxJZCA9IGh0bWxJZCA/XG5cdFx0YCR7IGh0bWxJZCB9LXJvdy0keyByb3dOdW1iZXIgfWAgOlxuXHRcdGBlZS1yVGFibGUtcm93LSR7IHJvd051bWJlciB9YDtcblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcyhcblx0XHRodG1sQ2xhc3MsXG5cdFx0YGVlLXJUYWJsZS0keyByb3dUeXBlIH0tcm93YCxcblx0XHRgcm93LSR7IHJvd051bWJlciB9YCxcblx0XHRjbGFzc2VzWyByb3dUeXBlIF0sXG5cdCk7XG5cdHJldHVybiAoXG5cdFx0PHRyIGlkPXsgaHRtbElkIH0gY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0geyAuLi5leHRyYVByb3BzIH0gPlxuXHRcdFx0eyBjaGlsZHJlbiB9XG5cdFx0PC90cj5cblx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93O1xuIiwiLyoqXG4gKiBAcGFyYW0ge0FycmF5fSBjaGlsZHJlblxuICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZUNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gY2FwdGlvbklEXG4gKiBAcGFyYW0ge3N0cmluZ30gY2FwdGlvblRleHRcbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRyYVByb3BzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHRoZWFkXG5cbiAqL1xuY29uc3QgVGFibGUgPSAoIHtcblx0Y2hpbGRyZW4sXG5cdHRhYmxlSWQsXG5cdHRhYmxlQ2xhc3MsXG5cdGNhcHRpb25JRCxcblx0Y2FwdGlvblRleHQsXG5cdC4uLmV4dHJhUHJvcHMsXG59ICkgPT4ge1xuXHR0YWJsZUNsYXNzID0gdGFibGVDbGFzcyA/XG5cdFx0YCR7IHRhYmxlQ2xhc3MgfSBlZS1yVGFibGVgIDpcblx0XHQnZWUtclRhYmxlJztcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRyb2xlPXsgJ3JlZ2lvbicgfVxuXHRcdFx0YXJpYS1sYWJlbGxlZGJ5PXsgY2FwdGlvbklEIH1cblx0XHRcdHRhYkluZGV4PVwiMFwiXG5cdFx0PlxuXHRcdFx0PHRhYmxlIGlkPXsgdGFibGVJZCB9IGNsYXNzTmFtZT17IHRhYmxlQ2xhc3MgfSB7IC4uLmV4dHJhUHJvcHMgfT5cblx0XHRcdFx0PGNhcHRpb25cblx0XHRcdFx0XHRpZD17IGNhcHRpb25JRCB9XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXsgJ3NjcmVlbi1yZWFkZXItdGV4dCcgfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0eyBjYXB0aW9uVGV4dCB9XG5cdFx0XHRcdDwvY2FwdGlvbj5cblx0XHRcdFx0eyBjaGlsZHJlbiB9XG5cdFx0XHQ8L3RhYmxlPlxuXHRcdDwvZGl2PlxuXHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGU7XG4iLCIvKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gZmFsc2Ugb24gZmFpbFxuICovXG5leHBvcnQgY29uc3QgaXNGbG9hdCA9ICggdmFsdWUgKSA9PiB7XG5cdGNvbnN0IHJlZ2V4MSA9IC9eKFstK10pPyhbMC05XSsoXFwuWzAtOV0rKT98SW5maW5pdHkpJC87XG5cdHJldHVybiByZWdleDEudGVzdCggK3ZhbHVlICkgJiZcblx0XHRwYXJzZUZsb2F0KCB2YWx1ZSApID09PSB2YWx1ZSAmJlxuXHRcdE51bWJlciggdmFsdWUgKSA9PT0gdmFsdWUgJiZcblx0XHR2YWx1ZSAlIDEgIT09IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gZmFsc2Ugb24gZmFpbFxuICovXG5leHBvcnQgY29uc3QgaXNJbnRlZ2VyID0gKCB2YWx1ZSApID0+IHtcblx0cmV0dXJuIHBhcnNlSW50KCB2YWx1ZSwgMTAgKSA9PT0gdmFsdWUgJiZcblx0XHROdW1iZXIoIHZhbHVlICkgPT09IHZhbHVlICYmXG5cdFx0dmFsdWUgJSAxID09PSAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbnVsbElzSW5maW5pdHlcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGZhbHNlIG9uIGZhaWxcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5maW5pdGUgPSAoIHZhbHVlLCBudWxsSXNJbmZpbml0eSA9IHRydWUgKSA9PiB7XG5cdHJldHVybiB2YWx1ZSA9PT0gJ0lORicgfHwgdmFsdWUgPT09IEluZmluaXR5IHx8XG5cdFx0KCBudWxsSXNJbmZpbml0eSAmJiB2YWx1ZSA9PT0gbnVsbCApO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGZhbHNlIG9uIGZhaWxcbiAqL1xuZXhwb3J0IGNvbnN0IGlzTnVtZXJpYyA9ICggdmFsdWUgKSA9PiB7XG5cdHJldHVybiAhICggdmFsdWUgaW5zdGFuY2VvZiBBcnJheSApICYmXG5cdFx0ISBpc05hTiggcGFyc2VGbG9hdCggdmFsdWUgKSApICYmXG5cdFx0aXNGaW5pdGUoIHZhbHVlICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBtYXhcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG1heFxuICovXG5leHBvcnQgY29uc3QgZmxvYXRMZXNzVGhhbk9yRXF1YWxUbyA9ICggbWF4LCB2YWx1ZSApID0+IHtcblx0cmV0dXJuIHBhcnNlRmxvYXQoIHZhbHVlICkgPD0gcGFyc2VGbG9hdCggbWF4ICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBtYXhcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG1heFxuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nTGVuZ3RoTGVzc1RoYW5PckVxdWFsVG8gPSAoIG1heCA9IDEwMjQsIHZhbHVlICkgPT4ge1xuXHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHxcblx0XHR2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0dHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fFxuXHRcdCggdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAndW5kZWZpbmVkJyApIHx8XG5cdFx0Ly8gYWxsIG9mIGFib3ZlIGVxdWFsIHRvOiB6ZXJvIG9yIG5vIGxlbmd0aCA8PSBtYXggbGVuZ3RoXG5cdFx0KCB0eXBlb2YgdmFsdWUubGVuZ3RoICE9PSAndW5kZWZpbmVkJyAmJlxuXHRcdFx0cGFyc2VJbnQoIHZhbHVlLmxlbmd0aCwgMTAgKSA8PSBwYXJzZUludCggbWF4LCAxMCApXG5cdFx0KTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IG1heFxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4XG4gKi9cbmV4cG9ydCBjb25zdCBudW1iZXJMZXNzVGhhbk9yRXF1YWxUbyA9ICggbWF4LCB2YWx1ZSApID0+IHtcblx0cmV0dXJuIHBhcnNlSW50KCB2YWx1ZSwgMTAgKSA8PSBwYXJzZUludCggbWF4LCAxMCApO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gbWluXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5cbiAqL1xuZXhwb3J0IGNvbnN0IGZsb2F0R3JlYXRlclRoYW5PckVxdWFsVG8gPSAoIG1pbiwgdmFsdWUgKSA9PiB7XG5cdHJldHVybiBwYXJzZUZsb2F0KCB2YWx1ZSApID49IHBhcnNlRmxvYXQoIG1pbiApO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gbWluXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5cbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZ0xlbmd0aEdyZWF0ZXJUaGFuT3JFcXVhbFRvID0gKCBtaW4sIHZhbHVlICkgPT4ge1xuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiZcblx0XHR2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0dHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJlxuXHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggIT09ICd1bmRlZmluZWQnICYmXG5cdFx0cGFyc2VJbnQoIHZhbHVlLmxlbmd0aCwgMTAgKSA+PSBwYXJzZUludCggbWluLCAxMCApO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gbWluXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5cbiAqL1xuZXhwb3J0IGNvbnN0IG51bWJlckdyZWF0ZXJUaGFuT3JFcXVhbFRvID0gKCBtaW4sIHZhbHVlICkgPT4ge1xuXHRyZXR1cm4gcGFyc2VJbnQoIHZhbHVlLCAxMCApID49IHBhcnNlSW50KCBtaW4sIDEwICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEV4Y2VwdGlvbiB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuaW1wb3J0IHsgc3ByaW50ZiwgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGlzQXJyYXksIGlzRW1wdHksIGlzTWFwIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIGdpdmVuIGtleSBleGlzdHMgaW4gdGhlIHByb3ZpZGVkIGVudGl0eSBvYmplY3QuXG4gKiBUaGlzIGlzIHVzZWQgd2hlbiBjYWxsaW5nIGNvZGUgd2FudHMgYW4gZXhjZXB0aW9uIHRvIGJlIHRocm93bi5cbiAqXG4gKiBAcGFyYW0geyBzdHJpbmcgfSBrZXlcbiAqIEBwYXJhbSB7IE9iamVjdCB9IGVudGl0eVxuICogQHBhcmFtIHsgc3RyaW5nIH0gbWVzc2FnZVxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9ICBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBwcm92aWRlZCBlbnRpdHkgZG9lcyBub3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIHRoZSBnaXZlbiBrZXkuXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRFbnRpdHlIYXNLZXkgPSAoIGtleSwgZW50aXR5LCBtZXNzYWdlID0gJycgKSA9PiB7XG5cdGlmICggbWVzc2FnZSA9PT0gJycgKSB7XG5cdFx0bWVzc2FnZSA9IHNwcmludGYoXG5cdFx0XHRfXyhcblx0XHRcdFx0J1RoZSBwcm92aWRlZCBlbnRpdHkgKCVzKSBkb2VzIG5vdCBoYXZlIHRoZSBnaXZlbiBwcm9wZXJ0eSAoJXMpJyxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdCksXG5cdFx0XHRlbnRpdHksXG5cdFx0XHRrZXksXG5cdFx0KTtcblx0fVxuXHRpZiAoICEgZW50aXR5Lmhhc093blByb3BlcnR5KCBrZXkgKSApIHtcblx0XHR0aHJvdyBuZXcgRXhjZXB0aW9uKCBtZXNzYWdlICk7XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBnaXZlbiBwYXRoIGluIHRoZSBwcm92aWRlZCBpbW11dGFibGUgb2JqZWN0IGV4aXN0cy5cbiAqIFRoaXMgaXMgdXNlZCB3aGVuIGNhbGxpbmcgY29kZSB3YW50cyBhbiBleGNlcHRpb24gdG8gYmUgdGhyb3duIGlmIHRoZSBnaXZlblxuICogc2VhcmNoIHBhdGggYXJyYXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGltbXV0YWJsZSBvYmplY3QuXG4gKlxuICogSWYgdGhlIGltbXV0YWJsZSBvYmplY3QgaXMgc2V0dXAgbGlrZSB0aGlzOlxuICpcbiAqIGltbXV0YWJsZSA9IEltbXV0YWJsZS5NYXAoKS5zZXQoICdldmVudCcsIEltbXV0YWJsZS5NYXAoKS5zZXQoIDEwLCBFdmVudCApICk7XG4gKlxuICogVGhlbiBhIHZhbGlkIHNlYXJjaGFibGUgcGF0aCBjb3VsZCBiZSBgWyAnZXZlbnQnLCAxMCBdYC4gIEFuIGludmFsaWQgcGF0aFxuICogd291bGQgYmUgYFsgJ2RhdGV0aW1lJywgMTAgXWBcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoICBTZWFyY2hhYmxlIHBhdGggZm9yIHRoZSBpbW11dGFibGUgb2piZWN0IHRvIHZlcmlmeS5cbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcHxJbW11dGFibGUuU2V0fSBpbW11dGFibGUgIEFuIGltbXV0YWJsZSBvYmplY3QgKE1hcCwgU2V0LCBMaXN0IGV0YylcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIEEgY3VzdG9tIG1lc3NhZ2UgdG8gdXNlLlxuICogQHRocm93cyBFeGNlcHRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydEltbXV0YWJsZU9iamVjdEhhc1BhdGggPSAoXG5cdHBhdGgsXG5cdGltbXV0YWJsZSxcblx0bWVzc2FnZSA9ICcnXG4pID0+IHtcblx0aWYgKCBtZXNzYWdlID09PSAnJyApIHtcblx0XHRtZXNzYWdlID0gc3ByaW50Zihcblx0XHRcdF9fKFxuXHRcdFx0XHQnVGhlIHByb3ZpZGVkIGltbXV0YWJsZSBvYmplY3QgKCVzKSBkb2VzIG5vdCBoYXZlIHRoZSBnaXZlbiBwYXRoICglcyknLFxuXHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0KSxcblx0XHRcdGltbXV0YWJsZSxcblx0XHRcdHBhdGgsXG5cdFx0KTtcblx0fVxuXHRpZiAoICEgaW1tdXRhYmxlLmhhc0luKCBwYXRoICkgKSB7XG5cdFx0dGhyb3cgbmV3IEV4Y2VwdGlvbiggbWVzc2FnZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gYXJyYXkuXG4gKlxuICogQHBhcmFtIHsqfSBpdGVtc1xuICogQHBhcmFtIHsgc3RyaW5nIH0gIG1lc3NhZ2VcbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfSBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBub3QgYW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydElzQXJyYXkgPSAoIGl0ZW1zLCBtZXNzYWdlID0gJycgKSA9PiB7XG5cdGlmICggbWVzc2FnZSA9PT0gJycgKSB7XG5cdFx0bWVzc2FnZSA9IF9fKCAnVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBhbiBhcnJheS4nLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdH1cblx0aWYgKCAhIGlzQXJyYXkoIGl0ZW1zICkgKSB7XG5cdFx0dGhyb3cgbmV3IEV4Y2VwdGlvbiggbWVzc2FnZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBlbXB0eSBvciBub3QuXG4gKlxuICogQ2FsbCB0aGlzIHZhbGlkYXRvciB3aGVuIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgdmFsdWUgaXMgTk9UIGVtcHR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gaXRlbXNcbiAqIEBwYXJhbSB7IHN0cmluZyB9IG1lc3NhZ2VcbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfSBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBlbXB0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydElzTm90RW1wdHkgPSAoIGl0ZW1zLCBtZXNzYWdlID0gJycgKSA9PiB7XG5cdGlmICggbWVzc2FnZSA9PT0gJycgKSB7XG5cdFx0bWVzc2FnZSA9IF9fKFxuXHRcdFx0J1RoZSBwcm92aWRlZCBpdGVtcyBtdXN0IG5vdCBiZSBlbXB0eScsXG5cdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpc0VtcHR5KCBpdGVtcyApICkge1xuXHRcdHRocm93IG5ldyBFeGNlcHRpb24oIG1lc3NhZ2UgKTtcblx0fVxufTtcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGEgTWFwIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0geyp9IGl0ZW1cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydElzTWFwID0gKCBpdGVtLCBtZXNzYWdlID0gJycgKSA9PiB7XG5cdGlmICggbWVzc2FnZSA9PT0gJycgKSB7XG5cdFx0bWVzc2FnZSA9IF9fKFxuXHRcdFx0J1RoZSBwcm92aWRlZCBpdGVtIG11c3QgYmUgYSBNYXAgb2JqZWN0Jyxcblx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHQpO1xuXHR9XG5cdGlmICggISBpc01hcCggaXRlbSApICkge1xuXHRcdHRocm93IG5ldyBFeGNlcHRpb24oIG1lc3NhZ2UgKTtcblx0fVxufTtcbiIsImV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ2F0dGVuZGVlJztcbiIsImV4cG9ydCAqIGZyb20gJy4vcXVlcnknO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfQVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcbn0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgeyBSRUdJU1RSQVRJT05fU1RBVFVTX0lEUyB9IGZyb20gJy4uL3JlZ2lzdHJhdGlvbi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0aWQ6ICdBVFRfSUQnLFxuXHRsYXN0TmFtZU9ubHk6ICdBVFRfbG5hbWUnLFxuXHRmaXJzdE5hbWVPbmx5OiAnQVRUX2ZuYW1lJyxcblx0Zmlyc3RUaGVuTGFzdE5hbWU6IFsgJ0FUVF9mbmFtZScsICdBVFRfbG5hbWUnIF0sXG5cdGxhc3RUaGVuRmlyc3ROYW1lOiBbICdBVFRfbG5hbWUnLCAnQVRUX2ZuYW1lJyBdLFxufTtcblxuLyoqXG4gKiBEZXNjcmliZWQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge3thdHRyaWJ1dGVzOiAqfX1cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5RGF0YVR5cGVzID0ge1xuXHRmb3JFdmVudElkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JEYXRldGltZUlkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JUaWNrZXRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yU3RhdHVzSWQ6IFByb3BUeXBlcy5vbmVPZiggUkVHSVNUUkFUSU9OX1NUQVRVU19JRFMgKSxcblx0Zm9yUmVnaXN0cmF0aW9uSWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdHNob3dHcmF2YXRhcjogUHJvcFR5cGVzLmJvb2wsXG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBPYmplY3Qua2V5cyggb3JkZXJCeU1hcCApICksXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0fSApLFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHtcbiAqIFx0e1xuICogXHRcdGF0dHJpYnV0ZXM6IHtcbiAqIFx0XHRcdGxpbWl0OiBudW1iZXIsXG4gKiBcdFx0XHRvcmRlckJ5OiBzdHJpbmcsXG4gKiBcdFx0XHRvcmRlcjogc3RyaW5nLFxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAnbGFzdFRoZW5GaXJzdE5hbWUnLFxuXHRcdG9yZGVyOiBRVUVSWV9PUkRFUl9BU0MsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZFxuICogaW4gYSBSRVNUIHF1ZXJ5IGZyb20gdGhlIGNvbnRleHQgb2YgYSBhdHRlbmRlZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gXHRcdG9yZGVyQnlcbiAqIEByZXR1cm4geyBzdHJpbmcgfSBcdFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nXG4gKiBcdFx0XHRcdFx0XHRmb3IgdGhlIFJFU1QgcXVlcnkgZm9yIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gYXR0ZW5kZWVzIGVuZHBvaW50IHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRXZlbnRJZCAgICBcdElEIG9mIEV2ZW50IHRvIHJldHJpZXZlIGF0dGVuZGVlcyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JEYXRldGltZUlkIFx0SUQgb2YgRGF0ZXRpbWUgdG8gcmV0cmlldmUgYXR0ZW5kZWVzIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclRpY2tldElkIFx0XHRJRCBvZiBUaWNrZXQgdG8gcmV0cmlldmUgYXR0ZW5kZWVzIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclJlZ2lzdHJhdGlvbklkXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yU3RhdHVzSWQgXHRcdElEIG9mIFN0YXR1cyB0byByZXRyaWV2ZSBhdHRlbmRlZXMgZm9yXG4gKiBAcGFyYW0ge3N0cmluZ30gc2hvd0dyYXZhdGFyIFx0Qm9vbGVhbiB0b2dnbGUgZm9yIHdoZXRoZXIgdG8gZGlzcGxheSB1c2VyIEdyYXZhdGFyXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgIFx0VGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdGZvckV2ZW50SWQgPSAwLFxuXHRmb3JEYXRldGltZUlkID0gMCxcblx0Zm9yVGlja2V0SWQgPSAwLFxuXHRmb3JSZWdpc3RyYXRpb25JZCA9IDAsXG5cdGZvclN0YXR1c0lkID0gJ1JBUCcsXG5cdHNob3dHcmF2YXRhciA9IGZhbHNlLFxufSApID0+IHtcblx0Y29uc3Qgd2hlcmUgPSBbXTtcblxuXHQvLyBlbnN1cmUgdGhhdCBlbnRpdHkgSURzIGFyZSBpbnRlZ2Vyc1xuXHRmb3JSZWdpc3RyYXRpb25JZCA9IHBhcnNlSW50KCBmb3JSZWdpc3RyYXRpb25JZCwgMTAgKTtcblx0Zm9yVGlja2V0SWQgPSBwYXJzZUludCggZm9yVGlja2V0SWQsIDEwICk7XG5cdGZvckRhdGV0aW1lSWQgPSBwYXJzZUludCggZm9yRGF0ZXRpbWVJZCwgMTAgKTtcblx0Zm9yRXZlbnRJZCA9IHBhcnNlSW50KCBmb3JFdmVudElkLCAxMCApO1xuXG5cdC8vIG9yZGVyIG9mIHByaW9yaXR5IGZvciBwcm92aWRlZCBhcmd1bWVudHMuXG5cdGlmICggZm9yUmVnaXN0cmF0aW9uSWQgIT09IDAgJiYgISBpc05hTiggZm9yUmVnaXN0cmF0aW9uSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCBgd2hlcmVbUmVnaXN0cmF0aW9uLlJFR19JRF09JHsgZm9yUmVnaXN0cmF0aW9uSWQgfWAgKTtcblx0fSBlbHNlIGlmICggZm9yVGlja2V0SWQgIT09IDAgJiYgISBpc05hTiggZm9yVGlja2V0SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCBgd2hlcmVbUmVnaXN0cmF0aW9uLlRpY2tldC5US1RfSURdPSR7IGZvclRpY2tldElkIH1gICk7XG5cdH0gZWxzZSBpZiAoIGZvckRhdGV0aW1lSWQgIT09IDAgJiYgISBpc05hTiggZm9yRGF0ZXRpbWVJZCApICkge1xuXHRcdHdoZXJlLnB1c2goIGB3aGVyZVtSZWdpc3RyYXRpb24uVGlja2V0LkRhdGV0aW1lLkRUVF9JRF09JHsgZm9yRGF0ZXRpbWVJZCB9YCApO1xuXHR9IGVsc2UgaWYgKCBmb3JFdmVudElkICE9PSAwICYmICEgaXNOYU4oIGZvckV2ZW50SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCBgd2hlcmVbUmVnaXN0cmF0aW9uLkVWVF9JRF09JHsgZm9yRXZlbnRJZCB9YCApO1xuXHR9XG5cblx0aWYgKCBSRUdJU1RSQVRJT05fU1RBVFVTX0lEUy5pbmNsdWRlcyggZm9yU3RhdHVzSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCBgd2hlcmVbUmVnaXN0cmF0aW9uLlN0YXR1cy5TVFNfSURdPSR7IGZvclN0YXR1c0lkIH1gICk7XG5cdH1cblx0aWYgKCBzaG93R3JhdmF0YXIgPT09IHRydWUgKSB7XG5cdFx0d2hlcmUucHVzaCggJ2NhbGN1bGF0ZT11c2VyX2F2YXRhcicgKTtcblx0fVxuXHRyZXR1cm4gd2hlcmUuam9pbiggJyYnICk7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIHF1ZXJ5IHN0cmluZyBmb3IgdXNlIGJ5IGEgUkVTVCByZXF1ZXN0IGdpdmVuIGEgc2V0IG9mIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IE9iamVjdCB9IHF1ZXJ5RGF0YVxuICogQHJldHVybiB7IHN0cmluZyB9ICBSZXR1cm5zIHRoZSBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVN0cmluZyA9ICggcXVlcnlEYXRhID0ge30gKSA9PiB7XG5cdHF1ZXJ5RGF0YSA9IHsgLi4uZGVmYXVsdFF1ZXJ5RGF0YS5xdWVyeURhdGEsIC4uLnF1ZXJ5RGF0YSB9O1xuXHRyZXR1cm4gYmFzZUdldFF1ZXJ5U3RyaW5nKCBxdWVyeURhdGEsIHdoZXJlQ29uZGl0aW9ucywgbWFwT3JkZXJCeSApO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgKiBhcyBkYXRlRm9ybWF0cyBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGRhdGUgZmllbGRzIG9uIHByb3ZpZGVkIGVudGl0aWVzLiAgRG9lcyBub3QgbXV0YXRlIG9yaWdpbmFsXG4gKiBlbnRpdGllcy5cbiAqXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0aWVzICBBbiBhcnJheSBvZiBlbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzICBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEBwYXJhbSB7IHN0cmluZyB9IGZvcm1hdCAgVGhlIGZvcm1hdCB0byB0cmFuc2Zvcm0gdGhlIGRhdGUgZmllbGQgdmFsdWVzIHRvLlxuICogQHBhcmFtIHsgYm9vbGVhbiB9IGxvY2FsICAgICAgV2hldGhlciBvciBub3QgdG8gY29udmVydCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZVxuICogICB0byB0aGUgbG9jYWwgdGltZXpvbmUgZm9yIHRoZSBob3N0LlxuICogQHJldHVybiB7IEFycmF5IH0gIFJldHVybnMgYSBuZXcgYXJyYXkgb2YgbmV3IGVudGl0aWVzIHdpdGggdGhlIGRhdGUgZmllbGRcbiAqICAgdmFsdWVzIGZvcm1hdHRlZFxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RGF0ZXNPbkVudGl0aWVzID0gKFxuXHRlbnRpdGllcyA9IFtdLFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG5cdGZvcm1hdCA9IGRhdGVGb3JtYXRzLkRBVEVfVElNRV9GT1JNQVRfSVNPODYwMSxcblx0bG9jYWwgPSB0cnVlLFxuKSA9PiB7XG5cdGlmICggaXNFbXB0eSggZW50aXRpZXMgKSB8fCBpc0VtcHR5KCBlbnRpdHlEYXRlRmllbGRzICkgKSB7XG5cdFx0cmV0dXJuIGVudGl0aWVzO1xuXHR9XG5cdGNvbnN0IGZvcm1hdHRlZEVudGl0aWVzID0gW107XG5cdGVudGl0aWVzLmZvckVhY2goICggZW50aXR5ICkgPT4ge1xuXHRcdGZvcm1hdHRlZEVudGl0aWVzLnB1c2goIGZvcm1hdERhdGVzT25FbnRpdHkoXG5cdFx0XHRlbnRpdHksXG5cdFx0XHRlbnRpdHlEYXRlRmllbGRzLFxuXHRcdFx0Zm9ybWF0LFxuXHRcdFx0bG9jYWwsXG5cdFx0KSApO1xuXHR9ICk7XG5cdHJldHVybiBmb3JtYXR0ZWRFbnRpdGllcztcbn07XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGF0ZSBmaWVsZHMgb24gdGhlIHByb3ZpZGVkIGVudGl0eS4gIERvZXMgbm90IG11dGF0ZSBvcmlnaW5hbFxuICogZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7IE9iamVjdCB9IGVudGl0eSAgQW4gZW50aXR5XG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHBhcmFtIHsgc3RyaW5nIH0gZm9ybWF0ICBUaGUgZm9ybWF0IHRvIHRyYW5zZm9ybSB0aGUgZGF0ZSBmaWVsZCB2YWx1ZXMgdG8uXG4gKiBAcGFyYW0geyBib29sZWFuIH0gbG9jYWwgICAgICBXaGV0aGVyIG9yIG5vdCB0byBjb252ZXJ0IHRoZSBkYXRlIGZpZWxkIHZhbHVlXG4gKiAgIHRvIHRoZSBsb2NhbCB0aW1lem9uZSBmb3IgdGhlIGhvc3QuXG4gKiBAcmV0dXJuIHsgT2JqZWN0IH0gIFJldHVybnMgYSBuZXcgZW50aXR5IHdpdGggdGhlIGRhdGUgZmllbGQgdmFsdWVzIGZvcm1hdHRlZFxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RGF0ZXNPbkVudGl0eSA9IChcblx0ZW50aXR5ID0ge30sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcblx0Zm9ybWF0ID0gZGF0ZUZvcm1hdHMuREFURV9USU1FX0ZPUk1BVF9JU084NjAxLFxuXHRsb2NhbCA9IHRydWUsXG4pID0+IHtcblx0Y29uc3QgbmV3RW50aXR5ID0geyAuLi5lbnRpdHkgfTtcblx0ZW50aXR5RGF0ZUZpZWxkcy5mb3JFYWNoKCAoIGRhdGVGaWVsZCApID0+IHtcblx0XHRpZiAoIG5ld0VudGl0eVsgZGF0ZUZpZWxkIF0gKSB7XG5cdFx0XHRuZXdFbnRpdHlbIGRhdGVGaWVsZCBdID0gZGF0ZUZvcm1hdHMuZm9ybWF0RGF0ZVN0cmluZyhcblx0XHRcdFx0bmV3RW50aXR5WyBkYXRlRmllbGQgXSxcblx0XHRcdFx0Zm9ybWF0LFxuXHRcdFx0XHRsb2NhbCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9ICk7XG5cdHJldHVybiBuZXdFbnRpdHk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGRhdGUgZmllbGRzIHRvIG15c3FsIGZvcm1hdCBvbiBwcm92aWRlZCBlbnRpdGllcy4gIERvZXMgbm90XG4gKiBtdXRhdGUgb3JpZ2luYWwgZW50aXRpZXMuXG4gKlxuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdGllcyAgQW4gYXJyYXkgb2YgZW50aXR5IG9iamVjdHNcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyAgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcGFyYW0geyBib29sZWFuIH0gbG9jYWwgICAgICBXaGV0aGVyIG9yIG5vdCB0byBjb252ZXJ0IHRoZSBkYXRlIGZpZWxkIHZhbHVlXG4gKiAgIHRvIHRoZSBsb2NhbCB0aW1lem9uZSBmb3IgdGhlIGhvc3QuXG4gKiBAcmV0dXJuIHsgQXJyYXkgfSAgUmV0dXJucyBhIG5ldyBhcnJheSBvZiBuZXcgZW50aXRpZXMgd2l0aCB0aGUgZGF0ZSBmaWVsZFxuICogICB2YWx1ZXMgZm9ybWF0dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRFbnRpdGllc0RhdGVzVG9NeXNxbCA9IChcblx0ZW50aXRpZXMgPSBbXSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuXHRsb2NhbCA9IHRydWUsXG4pID0+IHtcblx0cmV0dXJuIGZvcm1hdERhdGVzT25FbnRpdGllcyhcblx0XHRlbnRpdGllcyxcblx0XHRlbnRpdHlEYXRlRmllbGRzLFxuXHRcdGRhdGVGb3JtYXRzLkRBVEVfVElNRV9GT1JNQVRfTVlTUUwsXG5cdFx0bG9jYWwsXG5cdCk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGRhdGUgZmllbGRzIHRvIG15c3FsIGZvcm1hdCBvbiBwcm92aWRlZCBlbnRpdHkuICBEb2VzIG5vdFxuICogbXV0YXRlIG9yaWdpbmFsIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0geyBPYmplY3QgfSBlbnRpdHkgIEFuIGFycmF5IG9mIGVudGl0eSBvYmplY3RzXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHBhcmFtIHsgYm9vbGVhbiB9IGxvY2FsICAgICAgV2hldGhlciBvciBub3QgdG8gY29udmVydCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZVxuICogICB0byB0aGUgbG9jYWwgdGltZXpvbmUgZm9yIHRoZSBob3N0LlxuICogQHJldHVybiB7IE9iamVjdCB9ICBSZXR1cm5zIGEgbmV3IGVudGl0eSB3aXRoIHRoZSBkYXRlIGZpZWxkIHZhbHVlcyBmb3JtYXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdEVudGl0eURhdGVzVG9NeXNxbCA9IChcblx0ZW50aXR5ID0ge30sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcblx0bG9jYWwgPSB0cnVlLFxuKSA9PiB7XG5cdHJldHVybiBmb3JtYXREYXRlc09uRW50aXR5KFxuXHRcdGVudGl0eSxcblx0XHRlbnRpdHlEYXRlRmllbGRzLFxuXHRcdGRhdGVGb3JtYXRzLkRBVEVfVElNRV9GT1JNQVRfTVlTUUwsXG5cdFx0bG9jYWwsXG5cdCk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGRhdGUgZmllbGRzIHRvIHRoZSBzaXRlIGZvcm1hdCBvbiBwcm92aWRlZCBlbnRpdGllcy4gIERvZXMgbm90XG4gKiBtdXRhdGUgb3JpZ2luYWwgZW50aXRpZXMuXG4gKlxuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdGllcyAgQW4gYXJyYXkgb2YgZW50aXR5IG9iamVjdHNcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyAgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcGFyYW0geyBib29sZWFuIH0gbG9jYWwgICAgICBXaGV0aGVyIG9yIG5vdCB0byBjb252ZXJ0IHRoZSBkYXRlIGZpZWxkIHZhbHVlXG4gKiAgIHRvIHRoZSBsb2NhbCB0aW1lem9uZSBmb3IgdGhlIGhvc3QuXG4gKiBAcmV0dXJuIHsgQXJyYXkgfSAgUmV0dXJucyBhIG5ldyBhcnJheSBvZiBuZXcgZW50aXRpZXMgd2l0aCB0aGUgZGF0ZSBmaWVsZFxuICogICB2YWx1ZXMgZm9ybWF0dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRFbnRpdGllc0RhdGVzVG9TaXRlID0gKFxuXHRlbnRpdGllcyA9IFtdLFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG5cdGxvY2FsID0gdHJ1ZSxcbikgPT4ge1xuXHRyZXR1cm4gZm9ybWF0RGF0ZXNPbkVudGl0aWVzKFxuXHRcdGVudGl0aWVzLFxuXHRcdGVudGl0eURhdGVGaWVsZHMsXG5cdFx0ZGF0ZUZvcm1hdHMuREFURV9USU1FX0ZPUk1BVF9TSVRFLFxuXHRcdGxvY2FsLFxuXHQpO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBkYXRlIGZpZWxkcyB0byB0aGUgc2l0ZSBmb3JtYXQgb24gcHJvdmlkZWQgZW50aXR5LiAgRG9lcyBub3RcbiAqIG11dGF0ZSBvcmlnaW5hbCBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHsgT2JqZWN0IH0gZW50aXR5ICBBbiBhcnJheSBvZiBlbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzICBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEBwYXJhbSB7IGJvb2xlYW4gfSBsb2NhbCAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbnZlcnQgdGhlIGRhdGUgZmllbGQgdmFsdWVcbiAqICAgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGZvciB0aGUgaG9zdC5cbiAqIEByZXR1cm4geyBPYmplY3QgfSAgUmV0dXJucyBhIG5ldyBlbnRpdHkgd2l0aCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZXMgZm9ybWF0dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRFbnRpdHlEYXRlc1RvU2l0ZSA9IChcblx0ZW50aXR5ID0ge30sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcblx0bG9jYWwgPSB0cnVlLFxuKSA9PiB7XG5cdHJldHVybiBmb3JtYXREYXRlc09uRW50aXR5KFxuXHRcdGVudGl0eSxcblx0XHRlbnRpdHlEYXRlRmllbGRzLFxuXHRcdGRhdGVGb3JtYXRzLkRBVEVfVElNRV9GT1JNQVRfU0lURSxcblx0XHRsb2NhbCxcblx0KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgZGF0ZSBmaWVsZCB2YWx1ZXMgdG8gbW9tZW50IG9iamVjdHMgZm9yIHRoZSBwcm92aWRlZCBlbnRpdGllcy5cbiAqIERvZXMgbm90IG11dGF0ZSBvcmlnaW5hbCBlbnRpdGllcy5cbiAqXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0aWVzIEFuIGFycmF5IG9mIGVudGl0eSBvYmplY3RzXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcmV0dXJuIHsgQXJyYXkgfSBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIG5ldyBlbnRpdGllcyB3aXRoIHRoZSBkYXRlIGZpZWxkXG4gKiAgIHZhbHVlcyBjb252ZXJ0ZWQgdG8gbW9tZW50IG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0RW50aXRpZXNEYXRlc1RvTW9tZW50ID0gKFxuXHRlbnRpdGllcyA9IFtdLFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG4pID0+IHtcblx0aWYgKCBpc0VtcHR5KCBlbnRpdGllcyApIHx8IGlzRW1wdHkoIGVudGl0eURhdGVGaWVsZHMgKSApIHtcblx0XHRyZXR1cm4gZW50aXRpZXM7XG5cdH1cblx0Y29uc3QgZm9ybWF0dGVkRW50aXRpZXMgPSBbXTtcblx0ZW50aXRpZXMuZm9yRWFjaCggKCBlbnRpdHkgKSA9PiB7XG5cdFx0Zm9ybWF0dGVkRW50aXRpZXMucHVzaCggY29udmVydEVudGl0eURhdGVzVG9Nb21lbnQoXG5cdFx0XHRlbnRpdHksXG5cdFx0XHRlbnRpdHlEYXRlRmllbGRzLFxuXHRcdCkgKTtcblx0fSApO1xuXHRyZXR1cm4gZm9ybWF0dGVkRW50aXRpZXM7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGRhdGUgZmllbGQgdmFsdWVzIHRvIG1vbWVudCBvYmplY3RzIGZvciB0aGUgcHJvdmlkZWQgZW50aXR5LlxuICogRG9lcyBub3QgbXV0YXRlIG9yaWdpbmFsIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0geyBPYmplY3QgfSBlbnRpdHkgQW4gZW50aXR5LlxuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHJldHVybiB7IE9iamVjdCB9IFJldHVybnMgYSBuZXcgZW50aXR5IHdpdGggdGhlIGRhdGUgZmllbGQgdmFsdWVzIGNvbnZlcnRlZFxuICogICB0byBtb21lbnQgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRFbnRpdHlEYXRlc1RvTW9tZW50ID0gKFxuXHRlbnRpdHkgPSB7fSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuKSA9PiB7XG5cdGNvbnN0IG5ld0VudGl0eSA9IHsgLi4uZW50aXR5IH07XG5cdGVudGl0eURhdGVGaWVsZHMuZm9yRWFjaCggKCBkYXRlRmllbGQgKSA9PiB7XG5cdFx0aWYgKCBuZXdFbnRpdHlbIGRhdGVGaWVsZCBdICkge1xuXHRcdFx0bmV3RW50aXR5WyBkYXRlRmllbGQgXSA9IGRhdGVGb3JtYXRzLnN0cmluZ1RvTW9tZW50KFxuXHRcdFx0XHRuZXdFbnRpdHlbIGRhdGVGaWVsZCBdLFxuXHRcdFx0KTtcblx0XHR9XG5cdH0gKTtcblx0cmV0dXJuIG5ld0VudGl0eTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSwgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgUVVFUllfT1JERVJfQVNDID0gJ0FTQyc7XG5leHBvcnQgY29uc3QgUVVFUllfT1JERVJfREVTQyA9ICdERVNDJztcbmV4cG9ydCBjb25zdCBBTExPV0VEX09SREVSX1ZBTFVFUyA9IFsgJ2FzYycsICdkZXNjJywgJ0FTQycsICdERVNDJyBdO1xuZXhwb3J0IGNvbnN0IEdSRUFURVJfVEhBTiA9IGVuY29kZVVSSUNvbXBvbmVudCggJz4nICk7XG5leHBvcnQgY29uc3QgTEVTU19USEFOID0gZW5jb2RlVVJJQ29tcG9uZW50KCAnPCcgKTtcbmV4cG9ydCBjb25zdCBHUkVBVEVSX1RIQU5fQU5EX0VRVUFMID0gZW5jb2RlVVJJQ29tcG9uZW50KCAnPj0nICk7XG5leHBvcnQgY29uc3QgTEVTU19USEFOX0FORF9FUVVBTCA9IGVuY29kZVVSSUNvbXBvbmVudCggJzw9JyApO1xuXG4vKipcbiAqIFJldHVybiBhIHF1ZXJ5IHN0cmluZyBmb3IgdXNlIGJ5IGEgUkVTVCByZXF1ZXN0IGdpdmVuIGEgc2V0IG9mIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IE9iamVjdCB9IHF1ZXJ5RGF0YVxuICogQHBhcmFtIHsgZnVuY3Rpb24gfSB3aGVyZUNvbmRpdGlvbnMgIEEgZnVuY3Rpb24gZm9yIHByZXBwaW5nIHRoZSB3aGVyZVxuICogXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25kaXRpb25zIGZyb20gdGhlIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IGZ1bmN0aW9uIH0gbWFwT3JkZXJCeVx0XHRBIGZ1bmN0aW9uIGZvciBtYXBwaW5nIGluY29taW5nIG9yZGVyX2J5XG4gKiBcdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmluZ3MgdG8gdGhlIHZhbHVlIG5lZWRlZCBmb3IgdGhlXG4gKiBcdFx0XHRcdFx0XHRcdFx0XHRcdHF1ZXJ5X3N0cmluZy5cbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgXHRcdFx0XHRcdFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKFxuXHRxdWVyeURhdGEgPSB7fSxcblx0d2hlcmVDb25kaXRpb25zID0gKCkgPT4gbnVsbCxcblx0bWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IG9yZGVyQnksXG4pID0+IHtcblx0Y29uc3Qgd2hlcmUgPSB3aGVyZUNvbmRpdGlvbnMoIHF1ZXJ5RGF0YSApO1xuXHRjb25zdCB7IGxpbWl0LCBvcmRlciwgb3JkZXJCeSwgZGVmYXVsdFdoZXJlQ29uZGl0aW9ucyB9ID0gcXVlcnlEYXRhO1xuXHRjb25zdCBxdWVyeVBhcmFtcyA9IFtdO1xuXHRpZiAoICEgaXNVbmRlZmluZWQoIGxpbWl0ICkgKSB7XG5cdFx0cXVlcnlQYXJhbXMucHVzaCggYGxpbWl0PSR7IGxpbWl0IH1gICk7XG5cdH1cblx0aWYgKCAhIGlzVW5kZWZpbmVkKCBkZWZhdWx0V2hlcmVDb25kaXRpb25zICkgKSB7XG5cdFx0cXVlcnlQYXJhbXMucHVzaChcblx0XHRcdGBkZWZhdWx0X3doZXJlX2NvbmRpdGlvbnM9JHsgZGVmYXVsdFdoZXJlQ29uZGl0aW9ucyB9YFxuXHRcdCk7XG5cdH1cblx0aWYgKCAhIGlzVW5kZWZpbmVkKCBtYXBPcmRlckJ5KCBvcmRlckJ5ICkgKSApIHtcblx0XHRpZiAoIGlzQXJyYXkoIG1hcE9yZGVyQnkoIG9yZGVyQnkgKSApICkge1xuXHRcdFx0Zm9yICggY29uc3QgZmllbGQgb2YgbWFwT3JkZXJCeSggb3JkZXJCeSApICkge1xuXHRcdFx0XHRxdWVyeVBhcmFtcy5wdXNoKCBgb3JkZXJfYnlbJHsgZmllbGQgfV09JHsgb3JkZXIgfWAgKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cXVlcnlQYXJhbXMucHVzaCggYG9yZGVyPSR7IG9yZGVyIH1gICk7XG5cdFx0XHRxdWVyeVBhcmFtcy5wdXNoKCBgb3JkZXJfYnk9JHsgbWFwT3JkZXJCeSggb3JkZXJCeSApIH1gICk7XG5cdFx0fVxuXHR9XG5cdGxldCBxdWVyeVN0cmluZyA9IHF1ZXJ5UGFyYW1zLmpvaW4oICcmJyApO1xuXHRpZiAoIHdoZXJlICkge1xuXHRcdHF1ZXJ5U3RyaW5nICs9ICcmJyArIHdoZXJlO1xuXHR9XG5cdHJldHVybiBxdWVyeVN0cmluZztcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAnY2hlY2tpbic7XG5cbmV4cG9ydCBjb25zdCBDSEVDS0lOX1NUQVRVU19JRCA9IHtcblx0U1RBVFVTX0NIRUNLRURfT1VUOiBmYWxzZSxcblx0U1RBVFVTX0NIRUNLRURfSU46IHRydWUsXG5cdFNUQVRVU19DSEVDS0VEX05FVkVSOiAyLFxufTtcblxuZXhwb3J0IGNvbnN0IENIRUNLSU5fU1RBVFVTX0lEUyA9IHZhbHVlcyhcblx0Q0hFQ0tJTl9TVEFUVVNfSURcbik7XG4iLCJleHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgcHJldHR5U3RhdHVzIH0gZnJvbSAnLi4vc3RhdHVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG59IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0ICogYXMgY2hlY2tpblN0YXR1cyBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0Zm9yRGF0ZXRpbWVJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yRXZlbnRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yUmVnaXN0cmF0aW9uSWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclRpY2tldElkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JTdGF0dXNJZDogUHJvcFR5cGVzLm9uZU9mKCBjaGVja2luU3RhdHVzLkNIRUNLSU5fU1RBVFVTX0lEUyApLFxuXHRxdWVyeURhdGE6IFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdGxpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdG9yZGVyQnk6IFByb3BUeXBlcy5vbmVPZiggW1xuXHRcdFx0J0NIS19JRCcsXG5cdFx0XHQnUkVHX0lEJyxcblx0XHRcdCdDSEtfdGltZXN0YW1wJyxcblx0XHRcdCdEVFRfSUQnLFxuXHRcdF0gKSxcblx0XHRvcmRlcjogUHJvcFR5cGVzLm9uZU9mKCBBTExPV0VEX09SREVSX1ZBTFVFUyApLFxuXHR9ICksXG59O1xuXG5leHBvcnQgY29uc3Qgb3B0aW9uc0VudGl0eU1hcCA9IHtcblx0ZGVmYXVsdDogKCkgPT4ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGxhYmVsOiBwcmV0dHlTdGF0dXMoXG5cdFx0XHRcdFx0Y2hlY2tpblN0YXR1cy5DSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9PVVRcblx0XHRcdFx0KSxcblx0XHRcdFx0dmFsdWU6IGNoZWNraW5TdGF0dXMuQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfT1VULFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bGFiZWw6IHByZXR0eVN0YXR1cyhcblx0XHRcdFx0XHRjaGVja2luU3RhdHVzLkNIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX0lOXG5cdFx0XHRcdCksXG5cdFx0XHRcdHZhbHVlOiBjaGVja2luU3RhdHVzLkNIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX0lOLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9LFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHtcbiAqIFx0e1xuICogXHRcdGF0dHJpYnV0ZXM6IHtcbiAqIFx0XHRcdGxpbWl0OiBudW1iZXIsXG4gKiBcdFx0XHRvcmRlckJ5OiBzdHJpbmcsXG4gKiBcdFx0XHRvcmRlcjogc3RyaW5nLFxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAnQ0hLX3RpbWVzdGFtcCcsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYSByZWdpc3RyYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHRpbWVzdGFtcDogJ0NIS190aW1lc3RhbXAnLFxuXHRcdGlkOiAnQ0hLX0lEJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gcmVnaXN0cmF0aW9ucyBlbmRwb2ludCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGZvckRhdGV0aW1lSWQgICAgXHRJRCBvZiBFdmVudCB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvckV2ZW50SWQgICAgSUQgb2YgQXR0ZW5kZWUgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JSZWdpc3RyYXRpb25JZCBJRCBvZiBUcmFuc2FjdGlvbiB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclRpY2tldElkIFx0XHRJRCBvZiBUaWNrZXQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JTdGF0dXNJZCBcdFx0SUQgb2YgU3RhdHVzIHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgIFx0VGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdGZvckRhdGV0aW1lSWQgPSAwLFxuXHRmb3JFdmVudElkID0gMCxcblx0Zm9yUmVnaXN0cmF0aW9uSWQgPSAwLFxuXHRmb3JUaWNrZXRJZCA9IDAsXG5cdGZvclN0YXR1c0lkID0gJycsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXHRmb3JFdmVudElkID0gcGFyc2VJbnQoIGZvckV2ZW50SWQsIDEwICk7XG5cdGlmICggZm9yRXZlbnRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JFdmVudElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1JlZ2lzdHJhdGlvbi5FVlRfSURdPScgKyBmb3JFdmVudElkICk7XG5cdH1cblx0Zm9yRGF0ZXRpbWVJZCA9IHBhcnNlSW50KCBmb3JEYXRldGltZUlkLCAxMCApO1xuXHRpZiAoIGZvckRhdGV0aW1lSWQgIT09IDAgJiYgISBpc05hTiggZm9yRGF0ZXRpbWVJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtEVFRfSURdPScgKyBmb3JEYXRldGltZUlkICk7XG5cdH1cblx0Zm9yUmVnaXN0cmF0aW9uSWQgPSBwYXJzZUludCggZm9yUmVnaXN0cmF0aW9uSWQsIDEwICk7XG5cdGlmICggZm9yUmVnaXN0cmF0aW9uSWQgIT09IDAgJiYgISBpc05hTiggZm9yUmVnaXN0cmF0aW9uSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbUkVHX0lEXT0nICsgZm9yUmVnaXN0cmF0aW9uSWQgKTtcblx0fVxuXHRmb3JUaWNrZXRJZCA9IHBhcnNlSW50KCBmb3JUaWNrZXRJZCwgMTAgKTtcblx0aWYgKCBmb3JUaWNrZXRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JUaWNrZXRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtSZWdpc3RyYXRpb24uVEtUX0lEXT0nICsgZm9yVGlja2V0SWQgKTtcblx0fVxuXHRpZiAoIGZvclN0YXR1c0lkICE9PSAnJyAmJiBmb3JTdGF0dXNJZCAhPT0gbnVsbCApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbQ0hLX2luXT0nICsgZm9yU3RhdHVzSWQgKTtcblx0fVxuXHRyZXR1cm4gd2hlcmUuam9pbiggJyYnICk7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIHF1ZXJ5IHN0cmluZyBmb3IgdXNlIGJ5IGEgUkVTVCByZXF1ZXN0IGdpdmVuIGEgc2V0IG9mIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IE9iamVjdCB9IHF1ZXJ5RGF0YVxuICogQHJldHVybiB7IHN0cmluZyB9ICBSZXR1cm5zIHRoZSBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVN0cmluZyA9ICggcXVlcnlEYXRhID0ge30gKSA9PiB7XG5cdHF1ZXJ5RGF0YSA9IHsgLi4uZGVmYXVsdFF1ZXJ5RGF0YS5xdWVyeURhdGEsIC4uLnF1ZXJ5RGF0YSB9O1xuXHRyZXR1cm4gYmFzZUdldFF1ZXJ5U3RyaW5nKCBxdWVyeURhdGEsIHdoZXJlQ29uZGl0aW9ucywgbWFwT3JkZXJCeSApO1xufTtcbiIsImltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ2RhdGV0aW1lJztcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX1NUQVRVU19JRCA9IHtcblx0QUNUSVZFOiAnRFRBJyxcblx0Q0FOQ0VMTEVEOiAnRFRDJyxcblx0RVhQSVJFRDogJ0RURScsXG5cdElOQUNUSVZFOiAnRFRJJyxcblx0UE9TVFBPTkVEOiAnRFRQJyxcblx0U09MRF9PVVQ6ICdEVFMnLFxuXHRUUkFTSEVEOiAnRFRUJyxcblx0VVBDT01JTkc6ICdEVFUnLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX1NUQVRVU19JRFMgPSB2YWx1ZXMoIERBVEVUSU1FX1NUQVRVU19JRCApO1xuXG5leHBvcnQgY29uc3QgTUlOVVRFX0lOX1NFQ09ORFMgPSA2MDtcbmV4cG9ydCBjb25zdCBIT1VSX0lOX1NFQ09ORFMgPSBNSU5VVEVfSU5fU0VDT05EUyAqIDYwO1xuZXhwb3J0IGNvbnN0IERBWV9JTl9TRUNPTkRTID0gSE9VUl9JTl9TRUNPTkRTICogMjQ7XG5leHBvcnQgY29uc3QgV0VFS19JTl9TRUNPTkRTID0gSE9VUl9JTl9TRUNPTkRTICogNztcbmV4cG9ydCBjb25zdCBNT05USF9JTl9TRUNPTkRTID0gREFZX0lOX1NFQ09ORFMgKiAzMDtcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgKiBhcyBiYXNlRm9ybWF0dGVyIGZyb20gJy4uL2Jhc2UtZGF0ZS1mb3JtYXR0ZXInO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZm9yT3duLCBwdWxsQXQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcblx0VElNRV9GT1JNQVRfU0lURSxcblx0REFURV9USU1FX0ZPUk1BVF9TSVRFLFxuXHRhbGxEYXRlVGltZXNBc1N0cmluZyxcblx0U0VQQVJBVE9SX1NQQUNFX0RBU0hfU1BBQ0UsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBBcnJheSBvZiBmaWVsZHMgdGhhdCBoYXZlIGRhdGUgaW5mb3JtYXRpb25cbiAqIEB0eXBlIHsgc3RyaW5nW10gfVxuICovXG5leHBvcnQgY29uc3QgREFURV9GSUVMRFMgPSBbXG5cdCdEVFRfRVZUX3N0YXJ0Jyxcblx0J0RUVF9FVlRfZW5kJyxcbl07XG5cbi8qKlxuICogV2lsbCBob2xkIHRoZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgbGlzdCBvZiBmb3JtYXR0ZXJzIGZvciBkYXRlcy4gIEZvcm1hdHRlcnNcbiAqIGFyZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiBgLi4vYmFzZS1kYXRlLWZvcm1hdHRlcmAgYnV0IHdyYXBwZWQgYnkgZHluYW1pY2FsbHlcbiAqIGdlbmVyYXRlZCBmdW5jdGlvbnMgKGNhbGxhYmxlIHZpYSBzYW1lIG5hbWUpIHRoYXQgYXV0b21hdGljYWxseSByZWNlaXZlIHRoZVxuICogY29ycmVjdCBkYXRlRmllbGRzTWFwIGFyZ3VtZW50LlxuICpcbiAqIEVnLiAgYC4uL2Jhc2UtZGF0ZS1mb3JtYXR0ZXIgaGFzXG4gKiBmb3JtYXREYXRlc09uRW50aXRpZXMoIGVudGl0aWVzLCBlbnRpdHlEYXRlRmllbGRzLCBmb3JtYXQsIGxvY2FsICk7XG4gKiBXaGVuIGltcG9ydGluZyBgZm9ybWF0RGF0ZXNPbkVudGl0aWVzYCBmcm9tIHRoaXMgZmlsZSwgeW91IGNhbiBjYWxsIGl0IHNpbXBseVxuICogYnkgZG9pbmcgdGhpczpcbiAqXG4gKiBmb3JtYXREYXRlc09uRW50aXRpZXMoIGRhdGVUaW1lT2JqZWN0cywgZm9ybWF0LCBsb2NhbCApO1xuICpcbiAqIE5vdGljZSB0aGF0IGl0J3MgY2FsbGVkIHdpdGhvdXQgdGhlIGVudGl0eURhdGVGaWVsZHMgYXJndW1lbnQgYmVjYXVzZSB0aGF0J3NcbiAqIHByb3ZpZGVkIGJ5IHRoaXMgZ2VuZXJhdG9yLlxuICpcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgZm9ybWF0dGVycyA9IHt9O1xuXG5mb3JPd24oIGJhc2VGb3JtYXR0ZXIsICggaW1wbGVtZW50YXRpb24sIGZ1bmN0aW9uTmFtZSApID0+IHtcblx0Zm9ybWF0dGVyc1sgZnVuY3Rpb25OYW1lIF0gPSAoIC4uLmluY29taW5nQXJncyApID0+IHtcblx0XHRjb25zdCBmaXJzdEFyZyA9IHB1bGxBdCggaW5jb21pbmdBcmdzLCAwICk7XG5cdFx0cmV0dXJuIGltcGxlbWVudGF0aW9uKCBmaXJzdEFyZ1sgMCBdLCBEQVRFX0ZJRUxEUywgLi4uaW5jb21pbmdBcmdzICk7XG5cdH07XG59ICk7XG5cbi8qKlxuICogVGhpcyB3aWxsIHNwaXQgb3V0IGEgcHJldHRpZmllZCBsYWJlbCBmb3IgdGhlIHByb3ZpZGVkIERhdGVUaW1lIGVudGl0eS5cbiAqXG4gKiBJZiB0aGVyZSBpcyBhIERUVF9uYW1lLCB0aGUgZm9ybWF0IHdpbGwgYmU6XG4gKiBgRFRUX25hbWUgKERUVF9FVlRfc3RhcnQgLSBEVFRfRVZUX2VuZClgXG4gKlxuICogSWYgbm8gRFRUX25hbWUgdGhlbjpcbiAqIGBEVFRfRVZUX3N0YXJ0IC0gRFRUX0VWVF9lbmRgXG4gKlxuICogVGhpcyB3aWxsIGFjY291bnQgZm9yIGlmIGJvdGggc3RhcnQgYW5kIGVuZCBhcmUgaW4gdGhlIHNhbWUgZGF5IGFuZCBzaW1wbHlcbiAqIHVzZSB0aW1lIGZvciB0aGUgZW5kIHBhcnQuXG4gKlxuICogQHBhcmFtIHsgQmFzZUVudGl0eSB9IERhdGVUaW1lRW50aXR5XG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIEEgZm9ybWF0dGVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHByb3ZpZGVkXG4gKiAgICBEYXRlVGltZUVudGl0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZXR0eURhdGVGcm9tRGF0ZVRpbWUgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRsZXQgY29udGVudCA9ICcnO1xuXHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBEYXRlVGltZUVudGl0eSwgJ2RhdGV0aW1lJyApICkge1xuXHRcdGlmICggRGF0ZVRpbWVFbnRpdHkuRFRUX0VWVF9zdGFydC5oYXNTYW1lKFxuXHRcdFx0RGF0ZVRpbWVFbnRpdHkuRFRUX0VWVF9lbmQsXG5cdFx0XHQnZGF5J1xuXHRcdCkgKSB7XG5cdFx0XHRjb250ZW50ICs9IGFsbERhdGVUaW1lc0FzU3RyaW5nKFxuXHRcdFx0XHRTRVBBUkFUT1JfU1BBQ0VfREFTSF9TUEFDRSxcblx0XHRcdFx0RGF0ZVRpbWVFbnRpdHkuRFRUX0VWVF9zdGFydC50b0Zvcm1hdChcblx0XHRcdFx0XHREQVRFX1RJTUVfRk9STUFUX1NJVEVcblx0XHRcdFx0KSxcblx0XHRcdFx0RGF0ZVRpbWVFbnRpdHkuRFRUX0VWVF9lbmQudG9Gb3JtYXQoXG5cdFx0XHRcdFx0VElNRV9GT1JNQVRfU0lURVxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCArPSBhbGxEYXRlVGltZXNBc1N0cmluZyhcblx0XHRcdFx0U0VQQVJBVE9SX1NQQUNFX0RBU0hfU1BBQ0UsXG5cdFx0XHRcdERhdGVUaW1lRW50aXR5LkRUVF9FVlRfc3RhcnQudG9Gb3JtYXQoXG5cdFx0XHRcdFx0REFURV9USU1FX0ZPUk1BVF9TSVRFXG5cdFx0XHRcdCksXG5cdFx0XHRcdERhdGVUaW1lRW50aXR5LkRUVF9FVlRfZW5kLnRvRm9ybWF0KFxuXHRcdFx0XHRcdERBVEVfVElNRV9GT1JNQVRfU0lURVxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Y29udGVudCA9IERhdGVUaW1lRW50aXR5LkRUVF9uYW1lID9cblx0XHRcdGAkeyBEYXRlVGltZUVudGl0eS5EVFRfbmFtZSB9ICgkeyBjb250ZW50IH0pYCA6XG5cdFx0XHRjb250ZW50O1xuXHR9XG5cdHJldHVybiBjb250ZW50O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVycztcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnknO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtYXR0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0dXMtaGVscGVyJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQge1xuXHRnZXRRdWVyeVN0cmluZyBhcyBiYXNlR2V0UXVlcnlTdHJpbmcsXG5cdFFVRVJZX09SREVSX0RFU0MsXG5cdEFMTE9XRURfT1JERVJfVkFMVUVTLFxuXHRHUkVBVEVSX1RIQU4sXG5cdEdSRUFURVJfVEhBTl9BTkRfRVFVQUwsXG5cdExFU1NfVEhBTl9BTkRfRVFVQUwsXG59IGZyb20gJy4uL2Jhc2UnO1xuXG5leHBvcnQgY29uc3Qgbm93RGF0ZUFuZFRpbWUgPSBtb21lbnQoKTtcblxuLyoqXG4gKiBEZXNjcmliZWQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge3thdHRyaWJ1dGVzOiAqfX1cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5RGF0YVR5cGVzID0ge1xuXHRxdWVyeURhdGE6IFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdGxpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdG9yZGVyQnk6IFByb3BUeXBlcy5vbmVPZiggW1xuXHRcdFx0J0RUVF9uYW1lJyxcblx0XHRcdCdEVFRfSUQnLFxuXHRcdFx0J3N0YXJ0X2RhdGUnLFxuXHRcdFx0J2VuZF9kYXRlJyxcblx0XHRdICksXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0XHRzaG93RXhwaXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cdFx0bW9udGg6IFByb3BUeXBlcy5tb250aCxcblx0fSApLFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHtcbiAqIFx0e1xuICogXHRcdGF0dHJpYnV0ZXM6IHtcbiAqIFx0XHRcdGxpbWl0OiBudW1iZXIsXG4gKiBcdFx0XHRvcmRlckJ5OiBzdHJpbmcsXG4gKiBcdFx0XHRvcmRlcjogc3RyaW5nLFxuICogICBcdFx0c2hvd0V4cGlyZWQ6IGJvb2xlYW5cbiAqICAgXHR9XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRRdWVyeURhdGEgPSB7XG5cdHF1ZXJ5RGF0YToge1xuXHRcdGxpbWl0OiAxMDAsXG5cdFx0b3JkZXJCeTogJ3N0YXJ0X2RhdGUnLFxuXHRcdG9yZGVyOiBRVUVSWV9PUkRFUl9ERVNDLFxuXHRcdHNob3dFeHBpcmVkOiBmYWxzZSxcblx0fSxcbn07XG5cbi8qKlxuICogVXNlZCB0byBtYXAgYW4gb3JkZXJCeSBzdHJpbmcgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkIGluIGEgUkVTVCBxdWVyeSBmcm9tXG4gKiB0aGUgY29udGV4dCBvZiBhbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JkZXJCeVxuICpcbiAqIEByZXR1cm4geyBzdHJpbmcgfSBSZXR1cm5zIGFuIGFjdHVhbCBvcmRlckJ5IHN0cmluZyBmb3IgdGhlIFJFU1QgcXVlcnkgZm9yXG4gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvdmlkZWQgYWxpYXNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcE9yZGVyQnkgPSAoIG9yZGVyQnkgKSA9PiB7XG5cdGNvbnN0IG9yZGVyQnlNYXAgPSB7XG5cdFx0c3RhcnRfZGF0ZTogJ0RUVF9FVlRfc3RhcnQnLFxuXHRcdGVuZF9kYXRlOiAnRFRUX0VWVF9lbmQnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiBldmVudHMgZW5kcG9pbnQgcmVxdWVzdCB1c2luZyBwcm92aWRlZFxuICogaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGZvckV2ZW50SWQgIElEIGZvciBFdmVudCB0byByZXRyaWV2ZSBkYXRldGltZXMgZnJvbVxuICogQHBhcmFtIHtib29sZWFufSBzaG93RXhwaXJlZCAgV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBleHBpcmVkIGV2ZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb250aCAgICAgICAgIFJldHVybiBldmVudHMgZm9yIHRoZSBnaXZlbiBtb250aC4gIENhbiBiZSBhbnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYW55IG1vbnRoIGZvcm1hdCByZWNvZ25pemVkIGJ5IG1vbWVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgVGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdGZvckV2ZW50SWQgPSAwLFxuXHRzaG93RXhwaXJlZCA9IGZhbHNlLFxuXHRtb250aCA9ICdub25lJyxcbn0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGlmICggISBzaG93RXhwaXJlZCApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RUVF9FVlRfZW5kKipleHBpcmVkXVtdPScgKyBHUkVBVEVSX1RIQU4gK1xuXHRcdFx0JyZ3aGVyZVtEVFRfRVZUX2VuZCoqZXhwaXJlZF1bXT0nICtcblx0XHRcdG5vd0RhdGVBbmRUaW1lLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGlmICggbW9udGggJiYgbW9udGggIT09ICdub25lJyApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RUVF9FVlRfc3RhcnRdW109JyArIEdSRUFURVJfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtEVFRfRVZUX3N0YXJ0XVtdPScgK1xuXHRcdFx0bW9tZW50KCkubW9udGgoIG1vbnRoICkuc3RhcnRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbRFRUX0VWVF9lbmRdW109JyArIExFU1NfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtEVFRfRVZUX2VuZF1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLmVuZE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0aWYgKCBwYXJzZUludCggZm9yRXZlbnRJZCwgMTAgKSAhPT0gMCApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRXZlbnQuRVZUX0lEXT0nICsgZm9yRXZlbnRJZCApO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgREFURVRJTUVfU1RBVFVTX0lELCBNT0RFTF9OQU1FLCBNT05USF9JTl9TRUNPTkRTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHRocm93cyB7VHlwZUVycm9yfVxuICovXG5jb25zdCBhc3NlcnREYXRlVGltZUVudGl0eSA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggRGF0ZVRpbWVFbnRpdHksIE1PREVMX05BTUUgKSApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0J1RoZSBwcm92aWRlZCBlbnRpdHkgaXMgbm90IGEgZGF0ZXRpbWUgaW5zdGFuY2UnXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZVRyYXNoZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IHRyYXNoZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZXZlbnQgZGF0ZSBpcyB2YWxpZCBlbnRpdHkgb3IgYXJjaGl2ZVxuICovXG5jb25zdCBpc1ZhbGlkRW50aXR5T3JBcmNoaXZlID0gKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgKSA9PiB7XG5cdHJldHVybiAoIGluY2x1ZGVUcmFzaGVkICYmIGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApICkgfHxcbiAgICAgICAgKCAhIGluY2x1ZGVUcmFzaGVkICYmICEgaXNUcmFzaGVkKCBEYXRlVGltZUVudGl0eSApICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlVHJhc2hlZCBpZiB0cnVlIHdpbGwgbm90IGZpbHRlciBvdXQgdHJhc2hlZCBlbnRpdGllc1xuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBldmVudCBkYXRlIGlzIG9jY3VycmluZyBOT1dcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQWN0aXZlID0gKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgPSBmYWxzZSApID0+IHtcblx0cmV0dXJuIGlzVmFsaWRFbnRpdHlPckFyY2hpdmUoIERhdGVUaW1lRW50aXR5LCBpbmNsdWRlVHJhc2hlZCApICYmXG5cdERhdGVUaW1lRW50aXR5LnN0YXJ0LmRpZmZOb3coKS5hc1NlY29uZHMoKSA8IDAgJiZcblx0RGF0ZVRpbWVFbnRpdHkuZW5kLmRpZmZOb3coKS5hc1NlY29uZHMoKSA+IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlVHJhc2hlZCBpZiB0cnVlIHdpbGwgbm90IGZpbHRlciBvdXQgdHJhc2hlZCBlbnRpdGllc1xuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlbmQgZGF0ZSBpcyBpbiB0aGUgcGFzdFxuICovXG5leHBvcnQgY29uc3QgaXNFeHBpcmVkID0gKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgPSBmYWxzZSApID0+IHtcblx0cmV0dXJuIGlzVmFsaWRFbnRpdHlPckFyY2hpdmUoIERhdGVUaW1lRW50aXR5LCBpbmNsdWRlVHJhc2hlZCApICYmXG5cdERhdGVUaW1lRW50aXR5LmVuZC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPCAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZVRyYXNoZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IHRyYXNoZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZW5kIGRhdGUgaXMgaW4gdGhlIHBhc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGlzUmVjZW50bHlFeHBpcmVkID0gKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgPSBmYWxzZSApID0+IHtcblx0cmV0dXJuIGlzVmFsaWRFbnRpdHlPckFyY2hpdmUoIERhdGVUaW1lRW50aXR5LCBpbmNsdWRlVHJhc2hlZCApICYmXG5cdERhdGVUaW1lRW50aXR5LmVuZC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPCAwICYmXG5cdERhdGVUaW1lRW50aXR5LmVuZC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPiAoIE1PTlRIX0lOX1NFQ09ORFMgKiAtMSApO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZVRyYXNoZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IHRyYXNoZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGlja2V0cyBzb2xkIG1lZXRzIG9yIGV4Y2VlZHMgcmVnaXN0cmF0aW9uIGxpbWl0XG4gKi9cbmV4cG9ydCBjb25zdCBpc1NvbGRPdXQgPSAoIERhdGVUaW1lRW50aXR5LCBpbmNsdWRlVHJhc2hlZCA9IGZhbHNlICkgPT4ge1xuXHRpZiAoXG5cdFx0KCBpbmNsdWRlVHJhc2hlZCAmJiAhIGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApICkgfHxcblx0XHQoICEgaW5jbHVkZVRyYXNoZWQgJiYgaXNUcmFzaGVkKCBEYXRlVGltZUVudGl0eSApIClcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IGNhcCA9IERhdGVUaW1lRW50aXR5LnJlZ0xpbWl0O1xuXHRyZXR1cm4gKCBjYXAgIT09IG51bGwgJiYgY2FwICE9PSAnSU5GJyAmJiBjYXAgIT09IEluZmluaXR5ICYmIGNhcCAhPT0gLTEgKSAmJlxuXHRcdERhdGVUaW1lRW50aXR5LnNvbGQgPj0gY2FwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZVRyYXNoZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IHRyYXNoZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgc3RhcnQgZGF0ZSBpcyBpbiB0aGUgZnV0dXJlXG4gKi9cbmV4cG9ydCBjb25zdCBpc1VwY29taW5nID0gKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgPSBmYWxzZSApID0+IHtcblx0cmV0dXJuIGlzVmFsaWRFbnRpdHlPckFyY2hpdmUoIERhdGVUaW1lRW50aXR5LCBpbmNsdWRlVHJhc2hlZCApICYmXG5cdERhdGVUaW1lRW50aXR5LnN0YXJ0LmRpZmZOb3coKS5hc1NlY29uZHMoKSA+IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBkYXRlIGlzIGFyY2hpdmVkXG4gKi9cbmV4cG9ydCBjb25zdCBpc1RyYXNoZWQgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKTtcblx0cmV0dXJuIERhdGVUaW1lRW50aXR5LmRlbGV0ZWQ7XG59O1xuXG4vLyBQTFogTk9URTpcbi8vIGxlYXZpbmcgdGhlIGZvbGxvd2luZyBjb2RlIGluIGJlY2F1c2UgaXQgY2FuIGJlIHVzZWQgaWYvd2hlbiB3ZSBkZWNpZGVcbi8vIHRvIGZ1bGx5IHN1cHBvcnQgdGhlc2UgZGF0ZXRpbWUgc3RhdHVzZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBkZWZpbmVkXG4vLyBvbiB0aGUgRUVfRGF0ZXRpbWUgbW9kZWwgb2JqZWN0IGNsYXNzIGJ1dCBub3QgeWV0IHVzZWRcblxuLy8gLyoqXG4vLyAgKiBAZnVuY3Rpb25cbi8vICAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3Rcbi8vICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZGF0ZSBpcyBjYW5jZWxsZWRcbi8vICAqL1xuLy8gZXhwb3J0IGNvbnN0IGlzQ2FuY2VsbGVkID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcbi8vIFx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG4vLyBcdHJldHVybiBEYXRlVGltZUVudGl0eS5jYW5jZWxsZWQ7XG4vLyB9O1xuLy9cbi8vIC8qKlxuLy8gICogQGZ1bmN0aW9uXG4vLyAgKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4vLyAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGRhdGUgaGFzIGJlZW4gcG9zdHBvbmVkXG4vLyAgKi9cbi8vIGV4cG9ydCBjb25zdCBpc1Bvc3Rwb25lZCA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG4vLyBcdGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApO1xuLy8gXHRyZXR1cm4gRGF0ZVRpbWVFbnRpdHkucG9zdHBvbmVkO1xuLy8gfTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gc3RhdHVzIElEXG4gKi9cbmV4cG9ydCBjb25zdCBzdGF0dXMgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRpZiAoIGlzVHJhc2hlZCggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELlRSQVNIRUQ7XG5cdH1cblx0aWYgKCBpc0V4cGlyZWQoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5FWFBJUkVEO1xuXHR9XG5cdGlmICggaXNTb2xkT3V0KCBEYXRlVGltZUVudGl0eSApICkge1xuXHRcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuU09MRF9PVVQ7XG5cdH1cblx0aWYgKCBpc1VwY29taW5nKCBEYXRlVGltZUVudGl0eSApICkge1xuXHRcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuVVBDT01JTkc7XG5cdH1cblx0aWYgKCBpc0FjdGl2ZSggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELkFDVElWRTtcblx0fVxuXHQvLyBQTFogU0VFIE5PVEUgQUJPVkVcblx0Ly8gaWYgKCBpc0NhbmNlbGxlZCggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0Ly8gXHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELkNBTkNFTExFRDtcblx0Ly8gfVxuXHQvLyBpZiAoIGlzUG9zdHBvbmVkKCBEYXRlVGltZUVudGl0eSApICkge1xuXHQvLyBcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuUE9TVFBPTkVEO1xuXHQvLyB9XG5cdGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApO1xuXHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELklOQUNUSVZFO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgQ1NTIGNsYXNzIGZvciB0aGUgYmFja2dyb3VuZCBjb2xvclxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRyZXR1cm4gYGVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLSR7IHN0YXR1cyggRGF0ZVRpbWVFbnRpdHkgKSB9YDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9IGRhdGUgc3RhdHVzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRlVGltZVN0YXR1c1RleHRMYWJlbCA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG5cdGxldCBkYXRlU3RhdHVzID0gJyc7XG5cdHN3aXRjaCAoIHN0YXR1cyggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5TT0xEX09VVCA6XG5cdFx0XHRkYXRlU3RhdHVzID0gX18oICdzb2xkIG91dCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELkVYUElSRUQgOlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnZXhwaXJlZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELlVQQ09NSU5HIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ3VwY29taW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBEQVRFVElNRV9TVEFUVVNfSUQuQUNUSVZFIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2FjdGl2ZScsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELlRSQVNIRUQgOlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnYXJjaGl2ZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5DQU5DRUxMRUQgOlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnY2FuY2VsbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBEQVRFVElNRV9TVEFUVVNfSUQuUE9TVFBPTkVEIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ3Bvc3Rwb25lZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELklOQUNUSVZFIDpcblx0XHRkZWZhdWx0OlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnaW5hY3RpdmUnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gZGF0ZVN0YXR1cztcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBtYXBWYWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbWVtaXplJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgZW5kcG9pbnRzIH0gZnJvbSAnLi9lbmRwb2ludHMuanMnO1xuXG4vKipcbiAqIFJlY2VpdmVzIGFuIG9iamVjdCBtYXAgb2YgbW9kZWxOYW1lIHRvIGVuZHBvaW50IGFuZCBtYXBzIHRoYXQgdG8gYSBkZWZhdWx0XG4gKiBtYXAgb2YgbW9kZWxOYW1lIHRvIGVtcHR5IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0geyBPYmplY3QgfSBtb2RlbE5hbWVFbmRwb2ludHNcbiAqIEByZXR1cm4geyBPYmplY3QgfSBBbiBvYmplY3Qgb2YgeyB7IG1vZGVsTmFtZSB9IDoge30gfVxuICovXG5jb25zdCBtYXBUb09iamVjdFZhbHVlcyA9ICggbW9kZWxOYW1lRW5kcG9pbnRzICkgPT4ge1xuXHRyZXR1cm4gbWFwVmFsdWVzKCBtb2RlbE5hbWVFbmRwb2ludHMsXG5cdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fSxcblx0KTtcbn07XG5cbmNvbnN0IGdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0ID0gbWVtb2l6ZShcblx0KCkgPT4gbWFwVG9PYmplY3RWYWx1ZXMoIGVuZHBvaW50cyApXG4pO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBkZWZhdWx0IHN0YXRlIHRvIGJlIHVzZWQgYnkgc3RvcmVzIGNvbnRhaW5pbmcgbGlzdHMuXG4gKlxuICogQHR5cGUgeyBPYmplY3QgfVxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9MSVNUU19TVEFURSA9IG1hcFRvT2JqZWN0VmFsdWVzKCBlbmRwb2ludHMgKTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgZGVmYXVsdCBzdGF0ZSB0byBiZSB1c2VkIGJ5IHRoZSBjb3JlIHN0b3JlLlxuICpcbiAqIEB0eXBlIHt7ZW50aXRpZXM6IHt9LCBlbnRpdHlJZHM6IHt9LCBkaXJ0eToge319fVxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT1JFX1NUQVRFID0ge1xuXHRlbnRpdGllczoge1xuXHRcdC4uLmdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0KCksXG5cdH0sXG5cdHJlbGF0aW9uczoge30sXG5cdGRpcnR5OiB7XG5cdFx0cmVsYXRpb25zOiB7XG5cdFx0XHRpbmRleDoge30sXG5cdFx0XHRkZWxldGU6IHt9LFxuXHRcdFx0YWRkOiB7fSxcblx0XHR9LFxuXHRcdHRyYXNoOiB7fSxcblx0XHRkZWxldGU6IHt9LFxuXHR9LFxufTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgZGVmYXVsdCBzdGF0ZSB0byBiZSB1c2VkIGJ5IHRoZSBzY2hlbWEgc3RvcmUuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TQ0hFTUFfU1RBVEUgPSB7XG5cdHNjaGVtYToge1xuXHRcdC4uLmdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0KCksXG5cdH0sXG5cdGZhY3Rvcnk6IHtcblx0XHQuLi5nZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCgpLFxuXHR9LFxuXHRyZWxhdGlvbkVuZHBvaW50czoge1xuXHRcdC4uLmdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0KCksXG5cdH0sXG5cdHJlbGF0aW9uU2NoZW1hOiB7fSxcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZGF0YSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgYXNzZXJ0RW50aXR5SGFzS2V5IH0gZnJvbSAnLi9hc3NlcnRpb25zJztcblxuLyoqXG4gKiBBbGwgYXZhaWxhYmxlIGVuZHBvaW50cyBleHBvc2VkIHZpYSB0aGUgZWVqcy5kYXRhIGdsb2JhbCBmcm9tIHRoZSBzZXJ2ZXIuXG4gKlxuICogQHR5cGUge3t9fVxuICovXG5leHBvcnQgY29uc3Qge1xuXHRjb2xsZWN0aW9uX2VuZHBvaW50czogZW5kcG9pbnRzID0ge30sXG5cdGJhc2VfcmVzdF9yb3V0ZTogYmFzZVJlc3RSb3V0ZSxcbn0gPSBkYXRhLnBhdGhzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZW5kcG9pbnQgZm9yIHRoZSBwcm92aWRlZCBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lICBXaGF0IG1vZGVsIHRvIHJldHJpZXZlIHRoZSBlbmRwb2ludCBmb3IuXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICBUaGUgZW5kcG9pbnQgZm9yIHRoZSBwcm92aWRlZCBtb2RlbC5cbiAqIEB0aHJvd3Mge0V4Y2VwdGlvbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVuZHBvaW50ID0gKCBtb2RlbE5hbWUgKSA9PiB7XG5cdGFzc2VydEVudGl0eUhhc0tleSggbW9kZWxOYW1lLCBlbmRwb2ludHMgKTtcblx0cmV0dXJuIGVuZHBvaW50c1sgbW9kZWxOYW1lIF07XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIHByb3ZpZGVkIHF1ZXJ5U3RyaW5nIHRvIHRoZSBlbmRwb2ludCBmb3IgdGhlIHByb3ZpZGVkIG1vZGVsIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lICBXaGF0IG1vZGVsIHRoZSBmaW5hbCBzdHJpbmcgaXMgZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nICBUaGUgcXVlcnkgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIGVuZHBvaW50LlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZmluYWwgYXNzZW1ibGVkIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5UXVlcnlTdHJpbmcgPSAoIG1vZGVsTmFtZSwgcXVlcnlTdHJpbmcgPSAnJyApID0+IHtcblx0cmV0dXJuIHF1ZXJ5U3RyaW5nICE9PSAnJyA/XG5cdFx0Z2V0RW5kcG9pbnQoIG1vZGVsTmFtZSApICsgJz8nICsgcXVlcnlTdHJpbmcgOlxuXHRcdGdldEVuZHBvaW50KCBtb2RlbE5hbWUgKTtcbn07XG5cbi8qKlxuICogU3RyaXBzIHRoZSBiYXNlX3Jlc3Rfcm91dGUgKGkuZS4gaHR0cHM6Ly9teXVybC5jb20vd3AtanNvbi8pIGZyb20gdGhlIHByb3ZpZGVkXG4gKiB1cmwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHVybCB3aXRoIHRoZSBiYXNlIHJlc3Qgcm91dGUgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmlwQmFzZVJvdXRlRnJvbVVybCA9ICggdXJsICkgPT4ge1xuXHRyZXR1cm4gdXJsLnJlcGxhY2UoIGJhc2VSZXN0Um91dGUsICcnICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHNwcmludGYgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IEludmFsaWRTY2hlbWEgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IGlzU2NoZW1hIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQge1xuXHRNb25leSxcblx0U2VydmVyRGF0ZVRpbWUgYXMgRGF0ZVRpbWUsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbHVlLW9iamVjdHMnO1xuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGlzRGF0ZVRpbWVGaWVsZCxcblx0aXNNb25leUZpZWxkLFxufSBmcm9tICcuL2Jvb2xlYW5zJztcbmltcG9ydCB7XG5cdGlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZCxcblx0dmFsaWRhdGVFbnVtVHlwZSxcblx0dmFsaWRhdGVUeXBlLFxuXHR2YWxpZGF0ZVR5cGVGb3JGaWVsZCxcbn0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zIH0gZnJvbSAnLi9leHRyYWN0b3JzJztcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZpZWxkIHZhbHVlIGlzIGEga25vd24gdmFsdWUgb2JqZWN0LlxuICpcbiAqIE5vdGU6IHRoaXMgb25seSBhc3NlcnRzIGtub3duIHZhbHVlIG9iamVjdHMsIGlmIHRoZSB2YWx1ZSBpcyBub3QgZGV0ZWN0ZWQgYXNcbiAqIGEga25vd24gdmFsdWUgb2JqZWN0IGl0IGlzIHBhc3NlZCBiYWNrIGFzIGlzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHRocm93cyBJbnZhbGlkRGF0ZVRpbWVcbiAqIEB0aHJvd3MgVHlwZUVycm9yXG4gKi9cbmV4cG9ydCBjb25zdCBtYXliZUFzc2VydFZhbHVlT2JqZWN0ID0gKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIHNjaGVtYSApID0+IHtcblx0aWYgKCBpc0RhdGVUaW1lRmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0RGF0ZVRpbWUuYXNzZXJ0SXNEYXRlVGltZSggZmllbGRWYWx1ZSApO1xuXHR9XG5cdGlmICggaXNNb25leUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICkge1xuXHRcdE1vbmV5LmFzc2VydE1vbmV5KCBmaWVsZFZhbHVlICk7XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBwcm92aWRlZCBvYmplY3QgaXMgYSB2YWxpZCBtb2RlbCBzY2hlbWEgb2JqZWN0LlxuICpcbiAqIEN1cnJlbnRseSwgYW4gb2JqZWN0IGlzIGNvbnNpZGVyZWQgYSB2YWxpZCBtb2RlbCBzY2hlbWEgaWYgaXQgaGFzIGFcbiAqICdwcm9wZXJ0aWVzJyBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHNjaGVtYVxuICogQHRocm93cyBJbnZhbGlkU2NoZW1hXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRWYWxpZFNjaGVtYSA9ICggc2NoZW1hICkgPT4ge1xuXHRpZiAoICEgaXNTY2hlbWEoIHNjaGVtYSApICkge1xuXHRcdHRocm93IG5ldyBJbnZhbGlkU2NoZW1hKFxuXHRcdFx0J1RoaXMgaXMgYW4gaW52YWxpZCBzY2hlbWEgZm9yIGEgbW9kZWwuJyxcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gZmllbGQgZXhpc3RzIGluIHRoZSBwcm92aWRlZCBzY2hlbWEgYW5kIHRoZSBzaGFwZSBmb3JcbiAqIHRoZSBzY2hlbWEgZW50cnkgb24gdGhhdCBmaWVsZCBpcyBleHBlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lICBUaGUgbW9kZWwgdGhlIHNjaGVtYSBiZWxvbmdzIHRvLCB0aGlzIGlzIHVzZWQgZm9yXG4gKiBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWUgIFRoZSBmaWVsZCBiZWluZyBjaGVja2VkIGFnYWluc3QgdGhlIHNjaGVtYVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSAgICAgVGhlIHNjaGVtYSBmb3IgdGhlIG1vZGVsIHVzZWQgZm9yIHZhbGlkYXRpb25cbiAqIEB0aHJvd3MgSW52YWxpZFNjaGVtYVxuICogQHRocm93cyBUeXBlRXJyb3JcbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydFZhbGlkU2NoZW1hRmllbGRQcm9wZXJ0aWVzID0gKFxuXHRtb2RlbE5hbWUsXG5cdGZpZWxkTmFtZSxcblx0c2NoZW1hLFxuKSA9PiB7XG5cdGlmICggaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0gKSApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0c3ByaW50Zihcblx0XHRcdFx0J1RoZSBnaXZlbiBcIiVzXCIgZmllbGROYW1lIGRvZXMgbm90IGhhdmUgYSBkZWZpbmVkIHNjaGVtYSBmb3IgdGhlIG1vZGVsIFwiJXNcIicsXG5cdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0KSxcblx0XHQpO1xuXHR9XG5cdGlmICggc2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlID09PSAnb2JqZWN0JyApIHtcblx0XHRpZiAoIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMgKSApIHtcblx0XHRcdHRocm93IG5ldyBJbnZhbGlkU2NoZW1hKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgc2NoZW1hIGZvciB0aGUgZmllbGQgJXMgb24gdGhlIG1vZGVsICVzIGlzIG9mIHR5cGUgXCJvYmplY3RcIiBidXQgZG9lcyBub3QgaGF2ZSBhIHByb3BlcnRpZXMgcHJvcGVydHkuJyxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0bW9kZWxOYW1lXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmICggaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcgKSApIHtcblx0XHRcdHRocm93IG5ldyBJbnZhbGlkU2NoZW1hKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgc2NoZW1hIGZvciB0aGUgZmllbGQgJXMgb24gdGhlIG1vZGVsICVzIGlzIG9mIHR5cGUgXCJvYmplY3RcIiBidXQgZG9lcyBub3QgaGF2ZSBhIHJhdyBwcm9wZXJ0eSBpbiBpdFxcJ3MgXCJwcm9wZXJ0aWVzXCIgcHJvcGVydHkuJyxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0bW9kZWxOYW1lXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmICggaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcudHlwZSApICkge1xuXHRcdFx0dGhyb3cgbmV3IEludmFsaWRTY2hlbWEoXG5cdFx0XHRcdHNwcmludGYoXG5cdFx0XHRcdFx0J1RoZSBzY2hlbWEgZm9yIHRoZSBmaWVsZCAlcyBvbiB0aGUgbW9kZWwgJXMgaXMgb2YgdHlwZSBcIm9iamVjdFwiIGFuZCBoYXMgYSBwcm9wZXJ0aWVzLnJhdyBwcm9wZXJ0eSwgaG93ZXZlciB0aGVyZSBpcyBubyBcInR5cGVcIiBkZWZpbmVkIGZvciB0aGUgcmF3IHByb3BlcnR5LicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdG1vZGVsTmFtZVxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRoZSB2YWx1ZSBwcm92aWRlZCBmb3IgdGhlIHByZXBhcmVkIGZpZWxkIGlzIHZhbGlkIGFjY29yZGluZyB0b1xuICogdGhlIHNjaGVtYS5cbiAqXG4gKiBQcmVwYXJlZCBmaWVsZHMgYXJlOlxuICpcbiAqIC0gZmllbGRzIGhhdmluZyB2YWx1ZXMgdGhhdCBhcmUgc2V0IGFzIGEgdmFsdWUgb2JqZWN0IGFuZCBleHBlY3QgYSB2YWx1ZVxuICogICBvYmplY3Qgb24gdXBkYXRlcy9pbnNlcnRzLlxuICogLSBmaWVsZHMgdGhhdCBhcmUgdGhlIGVxdWl2YWxlbnQgYHJhd2AgdmFsdWUgd2hlbiB0aGUgZmllbGQgaW4gdGhlIHNjaGVtYSBpc1xuICogICBkZWZpbmVkIHRvIGhhdmUgcmF3IGFuZCByZW5kZXJlZC9wcmV0dHkgdmFsdWVzLlxuICpcbiAqIE5vdGU6ICBUaGlzIHZhbGlkYXRlcyBhZ2FpbnN0IHByZXBhcmVkIGZpZWxkcyB3aGljaCBtZWFucyB0aGF0OlxuICpcbiAqIC0gaWYgdGhlIHByZXBhcmVkIGZpZWxkIGhhcyBhIHZhbHVlIG9iamVjdCBhcyBpdHMgdmFsdWUsIHRoZW4gdGhhdCB2YWx1ZVxuICogICBvYmplY3QgaXMgdmFsaWRhdGVkIGJlZm9yZSBhbnkgb3RoZXIgdmFsaWRhdGlvbi5cbiAqIC0gaWYgdGhlIHByZXBhcmVkIGZpZWxkIHJlcHJlc2VudHMgYW4gb2JqZWN0IGluIHRoZSBzY2hlbWEsIHRoZW4gaXRzIHZhbHVlIGlzXG4gKiAgIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBgcmF3YCB0eXBlIGluIHRoZSBzY2hlbWEuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEB0aHJvd3MgVHlwZUVycm9yXG4gKiBAdGhyb3dzIEludmFsaWREYXRlVGltZVxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0VmFsaWRWYWx1ZUZvclByZXBhcmVkRmllbGQgPSAoXG5cdGZpZWxkTmFtZSxcblx0ZmllbGRWYWx1ZSxcblx0aW5zdGFuY2UsXG4pID0+IHtcblx0Y29uc3QgeyBzY2hlbWEgfSA9IGluc3RhbmNlO1xuXHRsZXQgaXNWYWxpZCA9IGlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZChcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZmllbGRWYWx1ZSxcblx0XHRzY2hlbWEsXG5cdCk7XG5cdGlmICggISBpc1ZhbGlkICYmIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgJiZcblx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNcblx0KSB7XG5cdFx0aXNWYWxpZCA9IHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcuZW51bSA/XG5cdFx0XHR2YWxpZGF0ZUVudW1UeXBlKFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LnR5cGUsXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcuZW51bSxcblx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdCkgOlxuXHRcdFx0dmFsaWRhdGVUeXBlKFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LnR5cGUsXG5cdFx0XHRcdG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zKFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRcdHNjaGVtYVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdGlmICggISBpc1ZhbGlkICkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIGZpZWxkICBpcyBub3QgdmFsaWQgZm9yIHRoZSBkZWZpbmVkIHNjaGVtYS4gIEl0XFwncyBgcmF3YCBwcm9wZXJ0eSBWYWx1ZSAoJTIkcykgaXMgbm90IHRoZSBjb3JyZWN0IGV4cGVjdGVkIHR5cGUgKCUzJHMpLicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlLFxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0aWYgKCAhIGlzVmFsaWQgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdHNwcmludGYoXG5cdFx0XHRcdCdUaGUgZ2l2ZW4gXCIlMSRzXCIgZmllbGRcXCdzIFZhbHVlICglMiRzKSBpcyBub3QgdmFsaWQgZm9yIHRoZSBkZWZpbmVkIHNjaGVtYSB0eXBlICglMyRzKS4nLFxuXHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSxcblx0XHRcdCksXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4gZmllbGQgaXMgdmFsaWQgYWNjb3JkaW5nIHRvIHRoZVxuICogc2NoZW1hLlxuICpcbiAqIFRoaXMgaXMgdXNlZCBvbiBlbnRpdHkgY29uc3RydWN0aW9uIGFuZCBkb2VzIG5vdCB2YWxpZGF0ZSBwcmVwYXJlZCBmaWVsZFxuICogdmFsdWVzIChzZWUgYXNzZXJ0IGFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkKS5cbiAqXG4gKiBUaGlzIG1ldGhvZCBhbHNvIGFzc2VydHMgdGhhdCB0aGUgc2NoZW1hIGhhcyB2YWxpZCBzY2hlbWEgZmllbGQgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHRocm93cyBUeXBlRXJyb3JcbiAqIEB0aHJvd3MgSW52YWxpZFNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0VmFsaWRGaWVsZEFuZFZhbHVlQWdhaW5zdFNjaGVtYSA9IChcblx0bW9kZWxOYW1lLFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGluc3RhbmNlLFxuKSA9PiB7XG5cdGNvbnN0IHNjaGVtYSA9IGluc3RhbmNlLnNjaGVtYTtcblx0Y29uc3QgdmFsaWRhdGlvblR5cGUgPSB2YWxpZGF0ZVR5cGVGb3JGaWVsZCggZmllbGROYW1lLCBpbnN0YW5jZSApO1xuXHRhc3NlcnRWYWxpZFNjaGVtYUZpZWxkUHJvcGVydGllcyggbW9kZWxOYW1lLCBmaWVsZE5hbWUsIHNjaGVtYSApO1xuXHRsZXQgaXNWYWxpZCA9IGlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZChcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZmllbGRWYWx1ZSxcblx0XHRzY2hlbWEsXG5cdFx0ZmFsc2UsXG5cdCk7XG5cdC8vIGFjY291bnQgZm9yIGZpZWxkTmFtZSBmaWVsZFZhbHVlcyB0aGF0IGhhdmUgcHJvcGVydHkgc2NoZW1hLiBGb3IgTW9kZWxcblx0Ly8gRW50aXRpZXMsIG9ubHkgdGhlIFZBTElEQVRFX1RZUEUgcHJvcGVydHkgaXMgY2FyZWQgYWJvdXQuXG5cdGlmICggc2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlID09PSAnb2JqZWN0JyAmJlxuXHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllc1xuXHQpIHtcblx0XHRpZiAoIGlzVW5kZWZpbmVkKCBmaWVsZFZhbHVlWyB2YWxpZGF0aW9uVHlwZSBdICkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgZ2l2ZW4gXCIlMSRzXCIgdmFsdWUgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEuIEl0IG11c3QgYmUgYW4gb2JqZWN0IGFuZCBpdCBtdXN0IGhhdmUgYSBgJTIkc2Aga2V5LicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdHZhbGlkYXRpb25UeXBlLFxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aXNWYWxpZCA9IHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllc1sgdmFsaWRhdGlvblR5cGUgXS5lbnVtID9cblx0XHRcdHZhbGlkYXRlRW51bVR5cGUoXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllc1sgdmFsaWRhdGlvblR5cGUgXS50eXBlLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LmVudW0sXG5cdFx0XHRcdGZpZWxkVmFsdWVbIHZhbGlkYXRpb25UeXBlIF0sXG5cdFx0XHQpIDpcblx0XHRcdHZhbGlkYXRlVHlwZShcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzWyB2YWxpZGF0aW9uVHlwZSBdLnR5cGUsXG5cdFx0XHRcdGZpZWxkVmFsdWVbIHZhbGlkYXRpb25UeXBlIF1cblx0XHRcdCk7XG5cdFx0aWYgKCAhIGlzVmFsaWQgKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgZ2l2ZW4gXCIlMSRzXCIgdmFsdWUgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEuICBJdFxcJ3MgYCUyJHNgIHByb3BlcnR5IHZhbHVlICglMyRzKSBpcyBub3QgdGhlIGNvcnJlY3QgZXhwZWN0ZWQgdHlwZSAoJTQkcykuJyxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0dmFsaWRhdGlvblR5cGUsXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNbIHZhbGlkYXRpb25UeXBlIF0udHlwZSxcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdGlmICggISBpc1ZhbGlkICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIGZpZWxkXFwncyB2YWx1ZSAoJTIkcykgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEgdHlwZSAoJTMkcykuJyxcblx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH1cbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSwgdXBwZXJGaXJzdCwgY2FtZWxDYXNlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBhc3NlcnRWYWxpZFNjaGVtYSB9IGZyb20gJy4vYXNzZXJ0aW9ucyc7XG5pbXBvcnQge1xuXHRjcmVhdGVHZXR0ZXIsXG5cdGNyZWF0ZUVudGl0eUdldHRlcnNBbmRTZXR0ZXJzLFxuXHRjcmVhdGVQZXJzaXN0aW5nR2V0dGVyc0FuZFNldHRlcnMsXG5cdHNldFNhdmVTdGF0ZSxcbn0gZnJvbSAnLi9jcmVhdGUnO1xuaW1wb3J0IHtcblx0U0FWRV9TVEFURSxcblx0UFJJVkFURV9QUk9QRVJUSUVTLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQmFzZUVudGl0eSBpcyB0aGUgYmFzaWMgY2xhc3MgZm9yIGFsbCBlbnRpdGllcy4gIGNyZWF0ZUVudGl0eUZhY3RvcnkgcmV0dXJuc1xuICogYW4gaW5zdGFuY2Ugb2YgdGhpcyBhbmQgYWxsIHRoZSBnZXR0ZXJzL3NldHRlcnMgZm9yIGZpZWxkcyBldGMgYXJlXG4gKiBkeW5hbWljYWxseSBjcmVhdGVkIHZpYSB0aGUgY29uc3RydWN0b3IuXG4gKi9cbmNsYXNzIEJhc2VFbnRpdHkge1xuXHRbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF0gPSBTQVZFX1NUQVRFLkNMRUFOO1xuXHRbIFBSSVZBVEVfUFJPUEVSVElFUy5WQUxJREFURV9UWVBFUyBdID0ge307XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yIGZvciBCYXNlIEVudGl0eVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBlbnRpdHlGaWVsZHNBbmRWYWx1ZXNcblx0ICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuXHQgKiBAcGFyYW0ge0FycmF5fWZpZWxkUHJlZml4ZXNcblx0ICogQHBhcmFtIHtib29sZWFufSBpc05ld1xuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUZpZWxkc0FuZFZhbHVlcyxcblx0XHRzY2hlbWEsXG5cdFx0ZmllbGRQcmVmaXhlcyA9IFtdLFxuXHRcdGlzTmV3ID0gZmFsc2UsXG5cdCkge1xuXHRcdGFzc2VydFZhbGlkU2NoZW1hKCBzY2hlbWEgKTtcblx0XHRmaWVsZFByZWZpeGVzID0gaXNBcnJheSggZmllbGRQcmVmaXhlcyApID8gZmllbGRQcmVmaXhlcyA6IFtdO1xuXHRcdGNyZWF0ZUdldHRlciggdGhpcywgJ2ZpZWxkUHJlZml4ZXMnLCBmaWVsZFByZWZpeGVzICk7XG5cdFx0Y3JlYXRlR2V0dGVyKCB0aGlzLCAnc2NoZW1hJywgc2NoZW1hLnByb3BlcnRpZXMgKTtcblx0XHRzZXRTYXZlU3RhdGUoXG5cdFx0XHR0aGlzLFxuXHRcdFx0aXNOZXcgPyBTQVZFX1NUQVRFLk5FVyA6IFNBVkVfU1RBVEUuQ0xFQU5cblx0XHQpO1xuXHRcdGNyZWF0ZUdldHRlciggdGhpcywgJ21vZGVsTmFtZScsIG1vZGVsTmFtZSApO1xuXHRcdGNyZWF0ZUdldHRlciggdGhpcywgJ29yaWdpbmFsRmllbGRzQW5kVmFsdWVzJywgZW50aXR5RmllbGRzQW5kVmFsdWVzICk7XG5cdFx0Y3JlYXRlR2V0dGVyKFxuXHRcdFx0dGhpcyxcblx0XHRcdCdmaWVsZHNUb1BlcnNpc3RPbkluc2VydCcsXG5cdFx0XHRuZXcgU2V0KCBPYmplY3Qua2V5cyggZW50aXR5RmllbGRzQW5kVmFsdWVzICkgKVxuXHRcdCk7XG5cdFx0Y3JlYXRlRW50aXR5R2V0dGVyc0FuZFNldHRlcnMoIHRoaXMgKTtcblx0XHRjcmVhdGVQZXJzaXN0aW5nR2V0dGVyc0FuZFNldHRlcnMoIHRoaXMgKTtcblx0XHRPYmplY3Quc2VhbCggdGhpcyApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBvbiB0aGUgZW50aXR5LlxuXHQgKlxuXHQgKiBTYXZlIHN0YXRlIGRlc2NyaWJlcyB3aGV0aGVyIHRoZSBlbnRpdHkgaXM6XG5cdCAqXG5cdCAqIC0gU0FWRV9TVEFURS5ORVc6IFRoZSBlbnRpdHkgaGFzIG5ldmVyIGJlZW4gcGVyc2lzdGVkIHRvIHN0b3JhZ2UuXG5cdCAqIC0gU0FWRV9TVEFURS5DTEVBTjogVGhlIGVudGl0eSBleGlzdHMgaW4gc3RvcmFnZSBhbmQgaGFzIG5vdCBiZWVuIG11dGF0ZWQuXG5cdCAqIC0gU0FWRV9TVEFURS5ESVJUWTogVGhlIGVudGl0eSBpcyBtdXRhdGVkIGFuZCBjaGFuZ2VzIGhhdmUgbm90IGJlZW5cblx0ICogcGVyc2lzdGVkIHRvIHN0b3JhZ2UuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1N5bWJvbH0gIFJldHVybnMgdGhlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBmb3IgdGhlIGVudGl0eS5cblx0ICovXG5cdGdldCBzYXZlU3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF07XG5cdH1cblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgY3VycmVudCBzYXZlIHN0YXRlIGlzIFNBVkVfU1RBVEUuTkVXXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIFNBVkVfU1RBVEUuTkVXIGlzIHRoZSBzYXZlIHN0YXRlLlxuXHQgKi9cblx0Z2V0IGlzTmV3KCkge1xuXHRcdHJldHVybiB0aGlzLnNhdmVTdGF0ZSA9PT0gU0FWRV9TVEFURS5ORVc7XG5cdH1cblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgY3VycmVudCBzYXZlIHN0YXRlIGlzIFNBVkVfU1RBVEUuRElSVFlcblx0ICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgU0FWRV9TVEFURS5ESVJUWSBpcyB0aGUgc2F2ZSBzdGF0ZS5cblx0ICovXG5cdGdldCBpc0RpcnR5KCkge1xuXHRcdHJldHVybiB0aGlzLnNhdmVTdGF0ZSA9PT0gU0FWRV9TVEFURS5ESVJUWTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBjdXJyZW50IHNhdmUgc3RhdGUgaXMgU0FWRV9TVEFURS5DTEVBTlxuXHQgKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBTQVZFX1NUQVRFLkNMRUFOIGlzIHRoZSBzYXZlIHN0YXRlLlxuXHQgKi9cblx0Z2V0IGlzQ2xlYW4oKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2F2ZVN0YXRlID09PSBTQVZFX1NUQVRFLkNMRUFOO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGVudGl0eSBoYXMgYW55IHBhc3N3b3JkIHByb3RlY3RlZCBmaWVsZHMuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgbWVhbnMgaXQgZG9lcywgZmFsc2UgbWVhbnMgaXQgZG9lc24ndC5cblx0ICovXG5cdGdldCBpc1Bhc3N3b3JkUHJvdGVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzLnByb3RlY3RlZEZpZWxkcy5sZW5ndGggPiAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGdpdmVuIGZpZWxkTmFtZSBpcyBhIHBhc3N3b3JkIHByb3RlY3RlZCBmaWVsZC5cblx0ICogQHJldHVybiB7ZnVuY3Rpb24oc3RyaW5nKTogYm9vbGVhbn0gIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkXG5cdCAqIHRvIGNoZWNrIGlmIHRoZSBnaXZlbiBmaWVsZCBuYW1lIGlzIGEgcHJvdGVjdGVkIGZpZWxkIGluIHRoaXMgZW50aXR5LlxuXHQgKi9cblx0Z2V0IGlzRmllbGRQYXNzd29yZFByb3RlY3RlZCgpIHtcblx0XHRyZXR1cm4gKCBmaWVsZE5hbWUgKSA9PiB0aGlzLnByb3RlY3RlZEZpZWxkcy5pbmRleE9mKCBmaWVsZE5hbWUgKSA+IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gY2xvbmUgdGhlIGN1cnJlbnQgZW50aXR5IG9iamVjdC4gIFRoaXMgcmVzdWx0cyBpbiBhbiBpbnN0YW5jZSBvZlxuXHQgKiBCYXNlRW50aXR5IHRoYXQgaXMgZXF1aXZhbGVudCBhcyB0aGlzIGN1cnJlbnQgaW5zdGFuY2UgKGV4Y2VwdCBpdCB3aWxsXG5cdCAqIGhhdmUgYSBuZXcgZ2VuZXJhdGVkIGlkKS5cblx0ICpcblx0ICogQHJldHVybiB7QmFzZUVudGl0eX0gQSBuZXcgaW5zdGFuY2Ugb2YgQmFzZUVudGl0eVxuXHQgKi9cblx0Z2V0IGNsb25lKCkge1xuXHRcdHJldHVybiAoIGtlZXBJZCA9IGZhbHNlICkgPT4ge1xuXHRcdFx0Y29uc3QgY3JlYXRlRmFjdG9yeSA9IG1lbW9pemUoICgpID0+IGNyZWF0ZUVudGl0eUZhY3RvcnkoXG5cdFx0XHRcdHRoaXMubW9kZWxOYW1lLFxuXHRcdFx0XHR7ICRzY2hlbWE6IHt9LCBwcm9wZXJ0aWVzOiB0aGlzLnNjaGVtYSB9LFxuXHRcdFx0XHR0aGlzLmZpZWxkUHJlZml4ZXNcblx0XHRcdCkgKTtcblx0XHRcdGNvbnN0IGZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5KCk7XG5cdFx0XHRjb25zdCBuZXdFbnRpdHkgPSBmYWN0b3J5LmNyZWF0ZU5ldyggdGhpcy5mb3JDbG9uZSApO1xuXHRcdFx0aWYgKCBrZWVwSWQgKSB7XG5cdFx0XHRcdG5ld0VudGl0eS5pZCA9IHRoaXMuaWQ7XG5cdFx0XHRcdHNldFNhdmVTdGF0ZSggbmV3RW50aXR5LCB0aGlzLnNhdmVTdGF0ZSwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5ld0VudGl0eTtcblx0XHR9O1xuXHR9XG5cblx0c3RhdGljIG5hbWUgPSAnQmFzZUVudGl0eSdcbn1cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZ2l2ZXMgYSBjbGFzcyB0aGUgcHJvdmlkZWQgbmFtZVxuICogKGFuZCBvcHRpb25hbGx5IGV4dGVuZHMgdGhlIHByb3ZpZGVkIG9iamVjdCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtPYmplY3R9IGV4dGVuZGVkQ2xhc3NcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uXG4gKi9cbmNvbnN0IG5hbWVDbGFzcyA9ICggbmFtZSwgZXh0ZW5kZWRDbGFzcyApID0+IHtcblx0cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXh0ZW5kZWRDbGFzcyB7XG5cdFx0c3RhdGljIGdldCBuYW1lKCkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9O1xufTtcblxuLyoqXG4gKiBBIGZhY3RvcnkgZm9yIGVudGl0eSBmYWN0b3JpZXMuXG4gKlxuICogQ2FsbGluZyB0aGlzIHJldHVybnMgYW4gb2JqZWN0IG9mIGZhY3RvcnkgZnVuY3Rpb25zIHRoYXQgaW5zdGFudGlhdGUgYW5cbiAqIGluc3RhbmNlIG9mIGEgbmFtZWQgRW50aXR5LiAgVGhlIG1vZGVsTmFtZSBpcyB1c2VkIGFzIHRoZSBuYW1lIGZvciB0aGUgbmV3XG4gKiBlbnRpdHkuXG4gKlxuICogVHdvIG1ldGhvZHMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0IHJldHVybmVkOiBgY3JlYXRlTmV3YCBhbmRcbiAqIGBmcm9tRXhpc3RpbmdgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgIFRoZSBtb2RlbCBmb3IgdGhlIGVudGl0eVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSAgICAgVGhlIHNjaGVtYSBmb3IgdGhlIG1vZGVsLiBUaGlzIGlzIHRoZSBzY2hlbWFcbiAqIHByb3ZpZGVkIGJ5IHRoZSBPUFRJT05TIGVuZHBvaW50IGZvciB0aGUgbW9kZWwuXG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZFByZWZpeGVzIEFuIGFycmF5IG9mIGZpZWxkIHByZWZpeGVzIGZvciBiYXNlIGZpZWxkcyBvblxuICogb24gdGhlIG1vZGVsIChlZy4gRXZlbnQgbW9kZWwgaGFzIGBbIEVWVCBdYCBwcmVmaXhlcyBvbiBmaWVsZHMsIERhdGV0aW1lIG1vZGVsXG4gKiBoYXMgWyBgRFRUYCwgYERUVF9FVlRgIF1cbiAqIEByZXR1cm4ge09iamVjdH0gQSBmYWN0b3J5IGZvciBpbnN0YW50aWF0aW5nIGFuIGVudGl0eSBpbnN0YW5jZS5cbiAqL1xuY29uc3QgY3JlYXRlRW50aXR5RmFjdG9yeSA9ICggbW9kZWxOYW1lLCBzY2hlbWEsIGZpZWxkUHJlZml4ZXMgPSBbXSApID0+IHtcblx0Y29uc3QgRW50aXR5ID0gbmFtZUNsYXNzKFxuXHRcdHVwcGVyRmlyc3QoIGNhbWVsQ2FzZSggbW9kZWxOYW1lICkgKSxcblx0XHRCYXNlRW50aXR5XG5cdCk7XG5cdHJldHVybiB7XG5cdFx0LyoqXG5cdFx0ICogRXhwb3NlcyBtb2RlbE5hbWUgc28gY2xpZW50IGNvZGUgY2FuIGRlcml2ZSB3aGF0IG1vZGVsIHRoaXMgZmFjdG9yeVxuXHRcdCAqIGlzIGZvciBmcm9tIGFueSBnaXZlbiBmYWN0b3J5LlxuXHRcdCAqIEB0eXBlIHN0cmluZ1xuXHRcdCAqL1xuXHRcdG1vZGVsTmFtZSxcblx0XHQvKipcblx0XHQgKiBUaGlzIGlzIHRoZSBjbGFzcyBkZWZpbml0aW9uIGZvciB0aGUgRW50aXR5LiAgVHlwaWNhbGx5IHRoaXMgaXNcblx0XHQgKiByZXRyaWV2ZWQgZm9yIHRoZSBhYmlsaXR5IHRvIGRvIGluc3RhbmNlb2YgY2hlY2tzLlxuXHRcdCAqL1xuXHRcdGNsYXNzRGVmOiBFbnRpdHksXG5cdFx0LyoqXG5cdFx0ICogVGhpcyByZXR1cm5zIGFuIGluc3RhbmNlIG9mIEVudGl0eSBmb3IgdGhlIGdpdmVuIGFyZ3VtZW50cyB3aXRoIHRoZVxuXHRcdCAqIGluZGljYXRpb24gdGhpcyBpcyBhIG5ldyBub24tcGVyc2lzdGVkIGVudGl0eS4gIFRoaXMgbWVhbnM6XG5cdFx0ICpcblx0XHQgKiAtIEFsbCBmaWVsZCB2YWx1ZXMgYXJlIHBvcHVsYXRlZCBhbmQgYW55IG5vdCBwcm92aWRlZCB3aWxsIGJlXG5cdFx0ICogICBwb3B1bGF0ZWQgd2l0aCBkZWZhdWx0IHZhbHVlcyBkZWZpbmVkIGJ5IHRoZSBzY2hlbWEuXG5cdFx0ICogLSBHZW5lcmF0ZXMgdGVtcG9yYXJ5IHVuaXF1ZSBpZHMgZm9yIHRoZSBwcmltYXJ5IGtleSBmaWVsZHMgb24gdGhlXG5cdFx0ICogICBlbnRpdHkgKHVzaW5nIGN1aWQpLlxuXHRcdCAqIC0gU2V0cyB0aGUgYGlzTmV3YCBmbGFnIHRvIHRydWUgZm9yIHRoZSBlbnRpdHkgc28gY2xpZW50IGNvZGUgaXMgYWJsZVxuXHRcdCAqICAgdG8gZGlzY292ZXIgd2hpY2ggZW50aXRpZXMgaGF2ZSBuZXZlciBiZWVuIHBlcnNpc3RlZC5cblx0XHQgKiAtIFRoaXMgZmFjdG9yeSBtZXRob2QgZXhwZWN0cyBmaWVsZHMgYW5kIHZhbHVlcyB0byBiZSBcInByZXBhcmVkXCIuXG5cdFx0ICogICBXaGF0IHRoYXQgbWVhbnMgaXMgdGhhdCBmb3IgYW55IGZpZWxkcyB0aGF0IHRoZSBzY2hlbWEgZGVzY3JpYmVkIGFzXG5cdFx0ICogICBoYXZpbmcgYSBgcmF3YCBwcm9wZXJ0eSAoaS5lLiB7IEVWVF9kZXNjOiB7IHJhdzogJ3NvbWV0aGluZycgfSB9KVxuXHRcdCAqICAgdGhlIHZhbHVlIHNob3VsZCBiZSBvZiB0aGUgY29ycmVjdCB0eXBlIGZvciB0aGF0IHJhdyBwcm9wZXJ0eSBhbmQuXG5cdFx0ICogICBUaGlzIGFsc28gbWVhbnMgaXMgdGhhdCBmb3IgYW55IGZpZWxkcyB0aGUgc2NoZW1hIGRlc2NyaWJlcyBhcyBhXG5cdFx0ICogICBkYXRlLXRpbWUgKGZvcm1hdCkgb3IgbW9uZXkgKGZvcm1hdCkgZmllbGQsIHRoZSB2YWx1ZSBpcyBleHBlY3RlZFxuXHRcdCAqICAgdG8gYmUgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb2JqZWN0LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZpZWxkc0FuZFZhbHVlc1xuXHRcdCAqIEByZXR1cm4ge0VudGl0eX0gYW4gaW5zdGFuY2Ugb2YgRW50aXR5XG5cdFx0ICovXG5cdFx0Y3JlYXRlTmV3OiAoIGZpZWxkc0FuZFZhbHVlcyApID0+IG5ldyBFbnRpdHkoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRmaWVsZHNBbmRWYWx1ZXMsXG5cdFx0XHRzY2hlbWEsXG5cdFx0XHRmaWVsZFByZWZpeGVzLFxuXHRcdFx0dHJ1ZVxuXHRcdCksXG5cdFx0LyoqXG5cdFx0ICogVGhpcyByZXR1cm5zIGFuIGluc3RhbmNlIG9mIEVudGl0eSBmb3IgdGhlIGdpdmVuIGFyZ3VtZW50cyB3aXRoIHRoZVxuXHRcdCAqIGluZGljYXRpb24gdGhpcyByZXByZXNlbnRzIHRoZSBlbnRpdHkgYXMgaXMgaW4gdGhlIGRiLiAgVGhpcyBtZWFuczpcblx0XHQgKlxuXHRcdCAqIC0gQWxsIGZpZWxkIHZhbHVlcyBhcmUgTk9UIHBvcHVsYXRlZCBpZiBtaXNzaW5nIHZhbHVlcy4gIFRoaXMgaXNcblx0XHQgKiAgIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBjb250ZXh0cyBsaWtlIHVuYXV0aG9yaXplZCB2aWV3cyB3aGVyZVxuXHRcdCAqICAgb25seSBwYXJ0aWFsIGVudGl0aWVzIGFyZSByZXR1cm5lZCBpbiBSRVNUIHJlc3BvbnNlcy5cblx0XHQgKiAtIGlzTmV3IGZsYWcgaXMgc2V0IHRvIGZhbHNlIChhbmQgbmV2ZXIgY2hhbmdlcyBmb3IgdGhpcyBlbnRpdHkpXG5cdFx0ICogLSBUaGUgaW5jb21pbmcgdmFsdWVzIGFyZSBleHBlY3RlZCB0byBiZSBpbiB0aGUgZXhhY3Qgc2hhcGUgYXNcblx0XHQgKiAgIGRlc2NyaWJlZCBieSB0aGUgc2NoZW1hIGZvciB0aGUgZW50aXR5IG1vZGVsLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZpZWxkc0FuZFZhbHVlc1xuXHRcdCAqIEByZXR1cm4ge0VudGl0eX0gYW4gaW5zdGFuY2Ugb2YgRW50aXR5XG5cdFx0ICovXG5cdFx0ZnJvbUV4aXN0aW5nOiAoIGZpZWxkc0FuZFZhbHVlcyApID0+IG5ldyBFbnRpdHkoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRmaWVsZHNBbmRWYWx1ZXMsXG5cdFx0XHRzY2hlbWEsXG5cdFx0XHRmaWVsZFByZWZpeGVzXG5cdFx0KSxcblx0fTtcbn07XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVFbnRpdHlGYWN0b3J5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzUGxhaW5PYmplY3QsIGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgdmFsdWUgaGFzIGEgXCJyYXdcIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGEgYHJhd2AgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNSYXdQcm9wZXJ0eSA9ICggdmFsdWUgKSA9PiBpc1BsYWluT2JqZWN0KCB2YWx1ZSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHZhbHVlLnJhdyApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgYSBcInByZXR0eVwiIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IGFuZCBoYXMgYSBgcHJldHR5YCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ByZXR0eVByb3BlcnR5ID0gKCB2YWx1ZSApID0+IGlzUGxhaW5PYmplY3QoIHZhbHVlICkgJiZcblx0ISBpc1VuZGVmaW5lZCggdmFsdWUucHJldHR5ICk7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGhhcyBhIFwicmVuZGVyZWRcIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGEgYHJlbmRlcmVkYCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1JlbmRlcmVkUHJvcGVydHkgPSAoIHZhbHVlICkgPT4gaXNQbGFpbk9iamVjdCggdmFsdWUgKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCB2YWx1ZS5yZW5kZXJlZCApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgYSBcImZvcm1hdFwiIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IGFuZCBoYXMgYSBgZm9ybWF0YCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0Zvcm1hdFByb3BlcnR5ID0gKCB2YWx1ZSApID0+IGlzUGxhaW5PYmplY3QoIHZhbHVlICkgJiZcblx0ISBpc1VuZGVmaW5lZCggdmFsdWUuZm9ybWF0ICk7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGhhcyBhIFwiZW51bVwiIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IGFuZCBoYXMgYW4gZW51bVxuICogcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNFbnVtUHJvcGVydHkgPSAoIHZhbHVlICkgPT4gaXNQbGFpbk9iamVjdCggdmFsdWUgKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCB2YWx1ZS5lbnVtICk7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGEgXCJ2YWx1ZSBvYmplY3RcIiBmaWVsZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGRcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgdmFsdWUgb2JqZWN0IGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNWYWx1ZU9iamVjdEZpZWxkID0gKCBmaWVsZCwgc2NoZW1hICkgPT4ge1xuXHRyZXR1cm4gaXNEYXRlVGltZUZpZWxkKCBmaWVsZCwgc2NoZW1hICkgfHwgaXNNb25leUZpZWxkKCBmaWVsZCwgc2NoZW1hICk7XG59O1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCBmaWVsZCBpcyBhIGRhdGUtdGltZSBmaWVsZCBhY2NvcmRpbmcgdG8gdGhlXG4gKiBwcm92aWRlZCBzY2hlbWEuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIGl0IGlzIGEgZGF0ZS10aW1lIGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNEYXRlVGltZUZpZWxkID0gKCBmaWVsZCwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZCBdICkgJiZcblx0aGFzRm9ybWF0UHJvcGVydHkoIHNjaGVtYVsgZmllbGQgXSApICYmXG5cdHNjaGVtYVsgZmllbGQgXS5mb3JtYXQgPT09ICdkYXRlLXRpbWUnO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCBmaWVsZCBpcyBhIFVUQyBkYXRlLXRpbWUgZmllbGQuXG4gKlxuICogSWYgc2NoZW1hIGlzIHByb3ZpZGVkLCB0aGlzIGFsc28gY29uc2lkZXJzIHdoZXRoZXIgdGhpcyBpcyBhIGRhdGUtdGltZSBmaWVsZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0ZVRpbWVGaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgW29wdGlvbmFsXVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyB0aGlzIGlzIGEgVVRDIGZpZWxkLiAgSWYgc2NoZW1hIGlzIHByb3ZpZGVkIGl0XG4gKiBtZWFucyB0aGlzIGlzIGFsc28gYSBkYXRlLXRpbWUgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1VUQ0RhdGVUaW1lRmllbGQgPSAoIGRhdGVUaW1lRmllbGROYW1lLCBzY2hlbWEgPSBudWxsICkgPT4ge1xuXHRyZXR1cm4gc2NoZW1hICE9PSBudWxsID9cblx0XHRpc0RhdGVUaW1lRmllbGQoIGRhdGVUaW1lRmllbGROYW1lLCBzY2hlbWEgKSAmJlxuXHRcdFx0ZGF0ZVRpbWVGaWVsZE5hbWUuaW5kZXhPZiggJ19nbXQnICkgPiAwIDpcblx0XHRkYXRlVGltZUZpZWxkTmFtZS5pbmRleE9mKCAnX2dtdCcgKSA+IDA7XG59O1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgcmVwcmVzZW50cyBhIHByaW1hcnkga2V5IGZpZWxkIHVzaW5nIHRoZVxuICogcHJvdmlkZWQgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIGl0IGlzIGEgcHJpbWFyeSBrZXkgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1ByaW1hcnlLZXlGaWVsZCA9ICggZmllbGROYW1lLCBzY2hlbWEgKSA9PlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkgJiZcblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcmltYXJ5X2tleSApO1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgcmVwcmVzZW50cyBhIHJlYWRvbmx5IGZpZWxkIHVzaW5nIHRoZVxuICogcHJvdmlkZWQgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIGl0IGlzIGEgcmVhZG9ubHkgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlYWRPbmx5ID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+XG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0gKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnJlYWRvbmx5ICkgJiZcblx0c2NoZW1hWyBmaWVsZE5hbWUgXS5yZWFkb25seTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgaXMgYSBcImVudGl0eVwiIGZpZWxkIHVzaW5nIHRoZSBwcm92aWRlZFxuICogc2NoZW1hLlxuICpcbiAqIEFuIFwiZW50aXR5XCIgZmllbGQgaXMgYW55IGZpZWxkIHRoYXQgc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiAtIGZpZWxkIGV4aXN0cyBpbiB0aGUgc2NoZW1hXG4gKiAtIGl0IGlzIG5vdCByZWFkb25seSBvciBpcyBhIHByaW1hcnkga2V5IGZpZWxkLlxuICogLSBpdCBpcyBub3QgYSB1dGMgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGlzIGFuIGVudGl0eSBmaWVsZFxuICovXG5leHBvcnQgY29uc3QgaXNFbnRpdHlGaWVsZCA9ICggZmllbGROYW1lLCBzY2hlbWEgKSA9PlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkgJiZcblx0KCAhIGlzUmVhZE9ubHkoIGZpZWxkTmFtZSwgc2NoZW1hICkgfHxcblx0XHRpc1ByaW1hcnlLZXlGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKVxuXHQpICYmXG5cdCEgaXNVVENEYXRlVGltZUZpZWxkKCBmaWVsZE5hbWUgKSAmJlxuXHRmaWVsZE5hbWUgIT09ICdfcHJvdGVjdGVkJztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZmllbGQgcmVwcmVzZW50cyBhIHZhbHVlIG9mIG1vbmV5IGZyb20gdGhlIHByb3ZpZGVkXG4gKiBzY2hlbWEuXG4gKlxuICogQSBmaWVsZCBpcyBhIG1vbmV5IGZpZWxkIGlmIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgc2F0aXNmaWVkOlxuICpcbiAqIC0gSXQgZXhpc3RzIGluIHRoZSBzY2hlbWFcbiAqIC0gSXQgaGFzIGEgcHJldHR5IHByb3BlcnR5XG4gKiAtIFRoZSBwcmV0dHkgcHJvcGVydHkgdmFsdWUgaGFzIGEgZm9ybWF0IHByb3BlcnR5LlxuICogLSBUaGUgZm9ybWF0IHByb3BlcnR5IGlzIGVxdWFsIHRvICdtb25leSdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGl0IGlzIGEgbW9uZXkgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBpc01vbmV5RmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcyApICYmXG5cdGhhc1ByZXR0eVByb3BlcnR5KCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMgKSAmJlxuXHRoYXNGb3JtYXRQcm9wZXJ0eSggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnByZXR0eSApICYmXG5cdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5wcmV0dHkuZm9ybWF0ID09PSAnbW9uZXknO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBmaWVsZCBpcyBhbiBlbnVtIHR5cGUgZmllbGQgYXMgZGVmaW5lZCBpbiB0aGUgcHJvdmlkZWRcbiAqIHNjaGVtYS5cbiAqXG4gKiBOb3RlOiB0aGlzIG9ubHkgZXZhbHVhdGVzIHRoZSB0b3AtbGV2ZWwgZm9yIHRoZSBmaWVsZCBzY2hlbWEuICBJZiB0aGUgZmllbGRcbiAqIGluIHRoZSBzY2hlbWEgaXMgb2YgdHlwZSAnb2JqZWN0JyBhbmQgb25lIG9mIHRoZSBvYmplY3QgcHJvcGVydGllcyBpcyBvZiB0eXBlXG4gKiAnZW51bScgdGhpcyB3aWxsIG5vdCBjb25zaWRlciBpdCBhbiBcImVudW1cIiBmaWVsZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBpZiB0aGUgZmllbGQgaXMgYW4gZW51bSB0eXBlIGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNFbnVtRmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdGhhc0VudW1Qcm9wZXJ0eSggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0uZW51bS5sZW5ndGggKSAmJlxuXHRzY2hlbWFbIGZpZWxkTmFtZSBdLmVudW0ubGVuZ3RoID4gMDtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBhcHBseUZpbHRlcnMgfSBmcm9tICdAd29yZHByZXNzL2hvb2tzJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBDb25zdGFudHMgZGVzY3JpYmluZyB0aGUgY3VycmVudCBcInNhdmUgc3RhdGVcIiBmb3IgYW4gZW50aXR5LlxuICpcbiAqIEB0eXBlIHt7Q0xFQU46IFN5bWJvbCwgTkVXOiBTeW1ib2wsIERJUlRZOiBTeW1ib2x9fVxuICovXG5leHBvcnQgY29uc3QgU0FWRV9TVEFURSA9IHtcblx0Q0xFQU46IFN5bWJvbCggJ0VudGl0eSBpcyBwZXJzaXN0ZWQuJyApLFxuXHRORVc6IFN5bWJvbCggJ0VudGl0eSBpcyBuZXcuJyApLFxuXHRESVJUWTogU3ltYm9sKCAnRXhpc3RpbmcgZW50aXR5IGhhcyBjaGFuZ2VzIGFuZCBuZWVkcyBwZXJzaXN0ZWQuJyApLFxufTtcblxuLyoqXG4gKiBWYWxpZGF0aW9uIHR5cGVzIGFyZSBmb3Igc2NoZW1hJ3MgdGhhdCBoYXZlIHZhbHVlIHZhcmlhdGlvbnMuXG4gKiBAdHlwZSB7e1JBVzogc3RyaW5nLCBSRU5ERVJFRDogc3RyaW5nLCBQUkVUVFk6IHN0cmluZ319XG4gKi9cbmV4cG9ydCBjb25zdCBWQUxJREFURV9UWVBFID0ge1xuXHRSQVc6ICdyYXcnLFxuXHRSRU5ERVJFRDogJ3JlbmRlcmVkJyxcblx0UFJFVFRZOiAncHJldHR5Jyxcbn07XG5cbi8qKlxuICogUHJpdmF0ZSBwcm9wZXJ0aWVzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgQmFzZSBFbnRpdHkgQ2xhc3NcbiAqIEB0eXBlIHt7c2F2ZVN0YXRlOiBib29sZWFufX1cbiAqL1xuZXhwb3J0IGNvbnN0IFBSSVZBVEVfUFJPUEVSVElFUyA9IHtcblx0U0FWRV9TVEFURTogU3ltYm9sKCAnYmFzZUVudGl0eVByaXZhdGVQcm9wZXJ0aWVzU2F2ZVN0YXRlJyApLFxuXHRWQUxJREFURV9UWVBFUzogU3ltYm9sKCAnYmFzZUVudGl0eVByaXZhdGVQcm9wZXJ0aWVzVmFsaWRhdGVUeXBlcycgKSxcbn07XG5cbi8qKlxuICogSGFyZGNvZGVkIGxpc3Qgb2YgbW9kZWwgcHJlZml4ZXMgZm9yIGZpZWxkcyBvbiBtb2RlbHMuXG5cbiAqIEEgbW9kZWwgcHJlZml4IGlzIHNvbWV0aGluZyB0aGF0IFwibmFtZXNwYWNlc1wiIGEgZmllbGQgb24gYSBtb2RlbC4gIEZvclxuICogZXhhbXBsZSwgaWYgdGhlIGZpZWxkIGlzIFwiRVZUX0lEXCIsIHRoZW4gdGhlIHByZWZpeCBpcyBcIkVWVFwiOyBpZiB0aGUgZmllbGQgaXNcbiAqIFwiRFRUX0VWVF9zdGFydFwiLCB0aGVuIHRoZSBwcmVmaXhlcyBhcmUgXCJEVFRcIiwgYW5kIFwiRFRUX0VWVFwiLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgZmlsdGVyZWQgb2JqZWN0IGluZGV4ZWQgYnkgbW9kZWwgbmFtZSBhbmQgdGhlIHZhbHVlcyBhcmVcbiAqIGFuIGFycmF5IG9mIG1vZGVsIHByZWZpeGVzIGZvciB0aGF0IG1vZGVsLlxuICovXG5leHBvcnQgY29uc3QgTU9ERUxfUFJFRklYRVMgPSAoIG1vZGVsTmFtZSApID0+IHtcblx0Y29uc3QgcHJlZml4TWFwID0gYXBwbHlGaWx0ZXJzKFxuXHRcdCdGSEVFX19FTlRJVFlfRkFDVE9SWV9fQ09OU1RBTlRTX19NT0RFTF9QUkVGSVhFUycsXG5cdFx0e1xuXHRcdFx0YW5zd2VyOiBbICdBTlMnIF0sXG5cdFx0XHRhdHRlbmRlZTogWyAnQVRUJyBdLFxuXHRcdFx0Y2hhbmdlX2xvZzogWyAnTE9HJyBdLFxuXHRcdFx0Y2hlY2tpbjogWyAnQ0hLJyBdLFxuXHRcdFx0Y291bnRyeTogWyAnQ05UJyBdLFxuXHRcdFx0Y3VycmVuY3k6IFsgJ0NVUicgXSxcblx0XHRcdGN1cnJlbmN5X3BheW1lbnRfbWV0aG9kOiBbICdDUE0nIF0sXG5cdFx0XHRkYXRldGltZTogWyAnRFRUJywgJ0RUVF9FVlQnIF0sXG5cdFx0XHRkYXRldGltZV90aWNrZXQ6IFsgJ0RUSycgXSxcblx0XHRcdGV2ZW50OiBbICdFVlQnIF0sXG5cdFx0XHRldmVudF9tZXNzYWdlX3RlbXBsYXRlOiBbICdFTVQnIF0sXG5cdFx0XHRldmVudF9xdWVzdGlvbl9ncm91cDogWyAnRVFHJyBdLFxuXHRcdFx0ZXZlbnRfdmVudWU6IFsgJ0VWVicgXSxcblx0XHRcdGV4dHJhX2pvaW46IFsgJ0VYSicgXSxcblx0XHRcdGV4dHJhX21ldGE6IFsgJ0VYTScgXSxcblx0XHRcdGxpbmVfaXRlbTogWyAnTElOJyBdLFxuXHRcdFx0bWVzc2FnZTogWyAnTVNHJyBdLFxuXHRcdFx0bWVzc2FnZV90ZW1wbGF0ZTogWyAnTVRQJyBdLFxuXHRcdFx0bWVzc2FnZV90ZW1wbGF0ZV9ncm91cDogWyAnR1JQJywgJ01UUCcgXSxcblx0XHRcdHBheW1lbnQ6IFsgJ1BBWScgXSxcblx0XHRcdHBheW1lbnRfbWV0aG9kOiBbICdQTUQnIF0sXG5cdFx0XHRwb3N0X21ldGE6IFsgJ21ldGEnIF0sXG5cdFx0XHRwcmljZTogWyAnUFJDJyBdLFxuXHRcdFx0cHJpY2VfdHlwZTogWyAnUFJUJyBdLFxuXHRcdFx0cXVlc3Rpb246IFsgJ1FTVCcgXSxcblx0XHRcdHF1ZXN0aW9uX2dyb3VwOiBbICdRU0cnIF0sXG5cdFx0XHRxdWVzdGlvbl9ncm91cF9xdWVzdGlvbjogWyAnUUdRJyBdLFxuXHRcdFx0cXVlc3Rpb25fb3B0aW9uOiBbICdRU08nIF0sXG5cdFx0XHRyZWN1cnJlbmNlOiBbICdSQ1InIF0sXG5cdFx0XHRyZWdpc3RyYXRpb246IFsgJ1JFRycgXSxcblx0XHRcdHJlZ2lzdHJhdGlvbl9wYXltZW50OiBbICdSUFknIF0sXG5cdFx0XHRzdGF0ZTogWyAnU1RBJyBdLFxuXHRcdFx0c3RhdHVzOiBbICdTVFMnIF0sXG5cdFx0XHR0ZXJtOiBbICd0ZXJtJyBdLFxuXHRcdFx0dGVybV9yZWxhdGlvbnNoaXA6IFtdLFxuXHRcdFx0dGVybV90YXhvbm9teTogWyAndGVybV90YXhvbm9teScgXSxcblx0XHRcdHRpY2tldDogWyAnVEtUJyBdLFxuXHRcdFx0dGlja2V0X3ByaWNlOiBbICdUS1AnIF0sXG5cdFx0XHR0aWNrZXRfdGVtcGxhdGU6IFsgJ1RUTScgXSxcblx0XHRcdHRyYW5zYWN0aW9uOiBbICdUWE4nIF0sXG5cdFx0XHR2ZW51ZTogWyAnVk5VJyBdLFxuXHRcdFx0d3BfdXNlcjogWyAndXNlcicgXSxcblx0XHR9ICk7XG5cdHJldHVybiAhIGlzVW5kZWZpbmVkKCBwcmVmaXhNYXBbIG1vZGVsTmFtZSBdICkgP1xuXHRcdHByZWZpeE1hcFsgbW9kZWxOYW1lIF0gOlxuXHRcdFtdO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRjYW1lbENhc2UsXG5cdHVwcGVyRmlyc3QsXG5cdGZvckVhY2gsXG5cdGlzVW5kZWZpbmVkLFxuXHRpc0FycmF5LFxuXHRrZXlzLFxuXHRzb3J0QnksXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgY3VpZCBmcm9tICdjdWlkJztcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0YXNzZXJ0VmFsaWRGaWVsZEFuZFZhbHVlQWdhaW5zdFNjaGVtYSxcblx0YXNzZXJ0VmFsaWRWYWx1ZUZvclByZXBhcmVkRmllbGQsXG59IGZyb20gJy4vYXNzZXJ0aW9ucyc7XG5pbXBvcnQge1xuXHRkZXJpdmVSZW5kZXJlZFZhbHVlLFxuXHRkZXJpdmVQcmVwYXJlZFZhbHVlRm9yRmllbGQsXG5cdGdldFJlbGF0aW9uTmFtZUZyb21MaW5rLFxuXHRnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yQ2xvbmluZyxcblx0Z2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmcsXG5cdGdldFByaW1hcnlLZXlGaWVsZHNGcm9tU2NoZW1hLFxuXHRnZXRFbnRpdHlGaWVsZHNGcm9tU2NoZW1hLFxuXHRnZXREZWZhdWx0VmFsdWVGb3JGaWVsZCxcblx0ZGVyaXZlVmFsaWRhdGVUeXBlRm9yRmllbGQsXG59IGZyb20gJy4vZXh0cmFjdG9ycyc7XG5pbXBvcnQge1xuXHRpc0VudGl0eUZpZWxkLFxuXHRpc1ByaW1hcnlLZXlGaWVsZCxcbn0gZnJvbSAnLi9ib29sZWFucyc7XG5pbXBvcnQgeyBQUklWQVRFX1BST1BFUlRJRVMsIFNBVkVfU1RBVEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKihcbiAqIEEgZ2VuZXJpYyBnZXR0ZXIgY3JlYXRvciBmb3IgYSBwcm92aWRlZCBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWUgIFRoZSBuYW1lIG9mIHRoZSBhY2Nlc3Nvci5cbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgdXNlZCB0byBwYXNzIHRocm91Z2ggYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGVcbiAqIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlR2V0dGVyID0gKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlLCBvcHRzID0ge30gKSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggaW5zdGFuY2UsIGZpZWxkTmFtZSwge1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiBmaWVsZFZhbHVlO1xuXHRcdH0sXG5cdFx0Li4ub3B0cyxcblx0fSApO1xufTtcblxuLyoqXG4gKiBUaGlzIGNyZWF0ZXMgYSBnZXR0ZXIgdGhhdCBjYWxscyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgd2hlbiBpbnZva2VkLlxuICpcbiAqIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgYGluc3RhbmNlYCBhcmd1bWVudCBwYXNzZWQgdGhyb3VnaFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZVxuICogQHBhcmFtIHtmdW5jdGlvbihPYmplY3QpfSBjYWxsQmFja1xuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUNhbGxiYWNrR2V0dGVyID0gKFxuXHRpbnN0YW5jZSxcblx0cHJvcGVydHlOYW1lLFxuXHRjYWxsQmFjayxcblx0b3B0cyA9IHt9XG4pID0+IHtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgcHJvcGVydHlOYW1lLCB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIGNhbGxCYWNrKCBpbnN0YW5jZSApO1xuXHRcdH0sXG5cdFx0Li4ub3B0cyxcblx0fSApO1xufTtcblxuLyoqXG4gKiBBIGdlbmVyaWMgZ2V0dGVyIGFuZCBzZXR0ZXIgY3JlYXRvciBmb3IgYSBwcm92aWRlZCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSAgaW5pdGlhbEZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsLCBwYXNzIHRocm91Z2ggb3B0aW9ucyB1c2VkIGJ5XG4gKiBPYmplY3QuZGVmaW5lUHJvcGVydHlcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUdldHRlckFuZFNldHRlciA9IChcblx0aW5zdGFuY2UsXG5cdGZpZWxkTmFtZSxcblx0aW5pdGlhbEZpZWxkVmFsdWUsXG5cdG9wdHMgPSB7fSxcbikgPT4ge1xuXHRsZXQgcHJvcGVydHlWYWx1ZSA9IGluaXRpYWxGaWVsZFZhbHVlO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGluc3RhbmNlLCBmaWVsZE5hbWUsIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlWYWx1ZTtcblx0XHR9LFxuXHRcdHNldCggcmVjZWl2ZWRWYWx1ZSApIHtcblx0XHRcdGNvbnN0IGlzUHJpbWFyeUZpZWxkID0gaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2Uuc2NoZW1hICk7XG5cdFx0XHRpZiAoICEgaW5zdGFuY2UuaXNOZXcgJiYgaXNQcmltYXJ5RmllbGQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkKFxuXHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdHJlY2VpdmVkVmFsdWUsXG5cdFx0XHRcdGluc3RhbmNlXG5cdFx0XHQpO1xuXHRcdFx0aWYgKCAhIGlzUHJpbWFyeUZpZWxkICkge1xuXHRcdFx0XHRzZXRTYXZlU3RhdGUoIGluc3RhbmNlLCBTQVZFX1NUQVRFLkRJUlRZICk7XG5cdFx0XHRcdHNldEZpZWxkVG9QZXJzaXN0KCBpbnN0YW5jZSwgZmllbGROYW1lICk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eVZhbHVlID0gcmVjZWl2ZWRWYWx1ZTtcblx0XHR9LFxuXHRcdC4uLm9wdHMsXG5cdH0gKTtcbn07XG5cbi8qKlxuICogQSBnZXR0ZXIgYW5kIHNldHRlciBjcmVhdG9yIGZvciBhbiBmaWVsZCBhbGlhcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5hbEZpZWxkTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGFsaWFzRmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQWxpYXNHZXR0ZXJBbmRTZXR0ZXIgPSAoXG5cdGluc3RhbmNlLFxuXHRvcmlnaW5hbEZpZWxkTmFtZSxcblx0YWxpYXNGaWVsZE5hbWUsXG5cdG9wdHMgPSB7fSxcbikgPT4ge1xuXHRpZiAoIG9yaWdpbmFsRmllbGROYW1lICE9PSBhbGlhc0ZpZWxkTmFtZSApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGluc3RhbmNlLCBhbGlhc0ZpZWxkTmFtZSwge1xuXHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRyZXR1cm4gaW5zdGFuY2VbIG9yaWdpbmFsRmllbGROYW1lIF07XG5cdFx0XHR9LFxuXHRcdFx0c2V0KCByZWNlaXZlZFZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm4gaW5zdGFuY2VbIG9yaWdpbmFsRmllbGROYW1lIF0gPSByZWNlaXZlZFZhbHVlO1xuXHRcdFx0fSxcblx0XHRcdC4uLm9wdHMsXG5cdFx0fSApO1xuXHR9XG59O1xuXG4vKipcbiAqIEEgZ2V0dGVyIGNyZWF0b3IgZm9yIGEgZmllbGQgYWxpYXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxGaWVsZE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbGlhc0ZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFsaWFzR2V0dGVyID0gKFxuXHRpbnN0YW5jZSxcblx0b3JpZ2luYWxGaWVsZE5hbWUsXG5cdGFsaWFzRmllbGROYW1lLFxuXHRvcHRzID0ge30sXG4pID0+IHtcblx0aWYgKCBvcmlnaW5hbEZpZWxkTmFtZSAhPT0gYWxpYXNGaWVsZE5hbWUgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgYWxpYXNGaWVsZE5hbWUsIHtcblx0XHRcdGdldCgpIHtcblx0XHRcdFx0cmV0dXJuIGluc3RhbmNlWyBvcmlnaW5hbEZpZWxkTmFtZSBdO1xuXHRcdFx0fSxcblx0XHRcdC4uLm9wdHMsXG5cdFx0fSApO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmbHVlbnQgc2V0dGVyIG9uIHRoZSBwcm92aWRlZCBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIGZpZWxkIG5hbWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAgT3B0aW9ucyBmb3IgT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVGbHVlbnRTZXR0ZXIgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUsIG9wdHMgPSB7fSApID0+IHtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgJ3NldCcgKyB1cHBlckZpcnN0KCBmaWVsZE5hbWUgKSwge1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiAoIHJlY2VpdmVkVmFsdWUgKSA9PiB7XG5cdFx0XHRcdGluc3RhbmNlWyBmaWVsZE5hbWUgXSA9IHJlY2VpdmVkVmFsdWU7XG5cdFx0XHRcdHJldHVybiBpbnN0YW5jZTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHQuLi5vcHRzLFxuXHR9ICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgaW5pdGlhbCBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGZvciBlbnRpdGllcyBvbiB0aGUgcHJvdmlkZWQgZW50aXR5XG4gKiBpbnN0YW5jZSB1c2luZyB0aGUgZ2l2ZW4gZGF0YS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICoga2V5cyBvbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUVudGl0eUdldHRlcnNBbmRTZXR0ZXJzID0gKCBpbnN0YW5jZSApID0+IHtcblx0Y29uc3QgcHJpbWFyeUtleXMgPSBbXTtcblx0Zm9yRWFjaChcblx0XHRpbnN0YW5jZS5vcmlnaW5hbEZpZWxkc0FuZFZhbHVlcyxcblx0XHQoIGZpZWxkVmFsdWUsIGZpZWxkTmFtZSApID0+IHtcblx0XHRcdGNvbnN0IGlzUHJpbWFyeUtleSA9IGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGluc3RhbmNlLnNjaGVtYSApO1xuXHRcdFx0c2V0VmFsaWRhdGVUeXBlRm9yRmllbGQoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUgKTtcblx0XHRcdGlmICggaXNFbnRpdHlGaWVsZCggZmllbGROYW1lLCBpbnN0YW5jZS5zY2hlbWEgKSApIHtcblx0XHRcdFx0aWYgKCBpbnN0YW5jZS5pc05ldyApIHtcblx0XHRcdFx0XHRhc3NlcnRWYWxpZFZhbHVlRm9yUHJlcGFyZWRGaWVsZChcblx0XHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0XHRpbnN0YW5jZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YXNzZXJ0VmFsaWRGaWVsZEFuZFZhbHVlQWdhaW5zdFNjaGVtYShcblx0XHRcdFx0XHRcdGluc3RhbmNlLm1vZGVsTmFtZSxcblx0XHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0XHRpbnN0YW5jZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2V0SW5pdGlhbEVudGl0eUZpZWxkc0FuZFZhbHVlcyhcblx0XHRcdFx0XHRpbnN0YW5jZSxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdFx0XHRpc1ByaW1hcnlLZXlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGlmICggZmllbGROYW1lID09PSAnX2NhbGN1bGF0ZWRfZmllbGRzJyApIHtcblx0XHRcdFx0c2V0Q2FsY3VsYXRlZEZpZWxkQW5kVmFsdWVzKCBpbnN0YW5jZSwgZmllbGRWYWx1ZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBmaWVsZE5hbWUgPT09ICdfcHJvdGVjdGVkJyApIHtcblx0XHRcdFx0cG9wdWxhdGVQcm90ZWN0ZWRGaWVsZHNQcm9wZXJ0eSggaW5zdGFuY2UsIGZpZWxkVmFsdWUgKTtcblx0XHRcdH1cblx0XHRcdGlmICggZmllbGROYW1lID09PSAnbGluaycgKSB7XG5cdFx0XHRcdGNyZWF0ZUdldHRlciggaW5zdGFuY2UsICdsaW5rJywgZmllbGRWYWx1ZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBmaWVsZE5hbWUgPT09ICdfbGlua3MnICkge1xuXHRcdFx0XHRzZXRSZXNvdXJjZXMoIGluc3RhbmNlLCBmaWVsZFZhbHVlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICEgaW5zdGFuY2UuaXNOZXcgJiYgaXNQcmltYXJ5S2V5ICkge1xuXHRcdFx0XHRwcmltYXJ5S2V5cy5wdXNoKCBmaWVsZE5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG5cdGlmICggISBpbnN0YW5jZS5pc05ldyAmJiBwcmltYXJ5S2V5cy5sZW5ndGggKSB7XG5cdFx0Y3JlYXRlUHJpbWFyeUtleUZpZWxkR2V0dGVycyggaW5zdGFuY2UsIHByaW1hcnlLZXlzICk7XG5cdH1cblxuXHRwb3B1bGF0ZVByaW1hcnlLZXlzKCBpbnN0YW5jZSApO1xuXHRwb3B1bGF0ZU1pc3NpbmdGaWVsZHMoIGluc3RhbmNlICk7XG59O1xuXG4vKipcbiAqIFBvcHVsYXRlcyB0aGUgYHByb3RlY3RlZEZpZWxkc2AgcHJvcGVydHkgb24gdGhlIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtBcnJheX0gcHJvdGVjdGVkRmllbGRzXG4gKi9cbmNvbnN0IHBvcHVsYXRlUHJvdGVjdGVkRmllbGRzUHJvcGVydHkgPSAoIGluc3RhbmNlLCBwcm90ZWN0ZWRGaWVsZHMgKSA9PiB7XG5cdC8vIGdldCBhbnkgY2FsY3VsYXRlZCBwcm90ZWN0ZWQgZmllbGRzLlxuXHRjb25zdCBjYWxjdWxhdGVkRmllbGRzID0gaW5zdGFuY2Vcblx0XHQub3JpZ2luYWxGaWVsZHNBbmRWYWx1ZXNcblx0XHQuX2NhbGN1bGF0ZWRfZmllbGRzIHx8IHt9O1xuXHRpZiAoXG5cdFx0Y2FsY3VsYXRlZEZpZWxkcy5fcHJvdGVjdGVkICYmXG5cdFx0aXNBcnJheSggY2FsY3VsYXRlZEZpZWxkcy5fcHJvdGVjdGVkIClcblx0KSB7XG5cdFx0cHJvdGVjdGVkRmllbGRzID0gW1xuXHRcdFx0Li4ucHJvdGVjdGVkRmllbGRzLFxuXHRcdFx0Li4uY2FsY3VsYXRlZEZpZWxkcy5fcHJvdGVjdGVkLFxuXHRcdF07XG5cdH1cblx0Y3JlYXRlR2V0dGVyKCBpbnN0YW5jZSwgJ3Byb3RlY3RlZEZpZWxkcycsIHByb3RlY3RlZEZpZWxkcyApO1xufTtcblxuLyoqXG4gKiBUaGlzIHBvcHVsYXRlcyBwcmltYXJ5IGtleSBmaWVsZHMuXG4gKiBOb3RlIHRoYXQgaXQgYWxzbyBvdmVycmlkZXMgYW55IHByaW1hcnkga2V5IHZhbHVlcy9wcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiBhbHJlYWR5IHNldCBpbiB0aGUgZW50aXR5IHNvIGlzIG9ubHkgcHJvY2Vzc2VkIHdoZW4gdGhlIGluc3RhbmNlIGlzIG5ldy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqL1xuY29uc3QgcG9wdWxhdGVQcmltYXJ5S2V5cyA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdGlmICggISBpbnN0YW5jZS5pc05ldyApIHtcblx0XHRyZXR1cm47XG5cdH1cblx0Y29uc3QgcHJpbWFyeUtleXMgPSBnZXRQcmltYXJ5S2V5RmllbGRzRnJvbVNjaGVtYSggaW5zdGFuY2UgKTtcblx0Zm9yRWFjaCggcHJpbWFyeUtleXMsIChcblx0XHRzY2hlbWFQcm9wZXJ0aWVzLFxuXHRcdHNjaGVtYUZpZWxkXG5cdCkgPT4ge1xuXHRcdC8vIGFsd2F5cyBkZWxldGUgYW5kIG92ZXJyaWRlIHdoYXQgaXMgZXhpc3RpbmcuXG5cdFx0aWYgKCBpbnN0YW5jZVsgc2NoZW1hRmllbGQgXSApIHtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZVsgc2NoZW1hRmllbGQgXTtcblx0XHR9XG5cdFx0Y3JlYXRlR2V0dGVyQW5kU2V0dGVyKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRzY2hlbWFGaWVsZCxcblx0XHRcdGN1aWQoKSxcblx0XHRcdHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH1cblx0XHQpO1xuXHRcdGNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyRm9yRmllbGQoIGluc3RhbmNlLCBzY2hlbWFGaWVsZCApO1xuXHR9ICk7XG5cdGNyZWF0ZVByaW1hcnlLZXlGaWVsZEdldHRlcnMoXG5cdFx0aW5zdGFuY2UsXG5cdFx0a2V5cyggcHJpbWFyeUtleXMgKVxuXHQpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSB2YWxpZGF0ZSB0eXBlIGZvciBhIGZpZWxkIHByb3BlcnR5LlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqL1xuY29uc3Qgc2V0VmFsaWRhdGVUeXBlRm9yRmllbGQgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUgKSA9PiB7XG5cdGluc3RhbmNlWyBQUklWQVRFX1BST1BFUlRJRVMuVkFMSURBVEVfVFlQRVMgXVsgZmllbGROYW1lIF0gPVxuXHRcdGRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIGluc3RhbmNlLnNjaGVtYSApO1xufTtcblxuLyoqXG4gKiAgUG9wdWxhdGVzIG1pc3NpbmcgZmllbGRzIGFuZCB2YWx1ZXMgdXNpbmcgZGVmYXVsdHMgcHJvdmlkZWQgYnkgc2NoZW1hLiAgSWZcbiAqICBzY2hlbWEgZG9lc24ndCBwcm92aWRlIGEgZGVmYXVsdCB0aGVuIHRoaXMgd2lsbCBwb3B1bGF0ZSB0aGUgZmllbGQgd2l0aCBhXG4gKiAgZGVmYXVsdCB2YWx1ZSB0aGF0IG1hdGNoZXMgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKi9cbmNvbnN0IHBvcHVsYXRlTWlzc2luZ0ZpZWxkcyA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdGlmICggdHlwZW9mIGluc3RhbmNlLnByb3RlY3RlZEZpZWxkcyA9PT0gJ3VuZGVmaW5lZCcgKSB7XG5cdFx0cG9wdWxhdGVQcm90ZWN0ZWRGaWVsZHNQcm9wZXJ0eSggaW5zdGFuY2UsIFtdICk7XG5cdH1cblx0aWYgKCAhIGluc3RhbmNlLmlzTmV3ICkge1xuXHRcdHJldHVybjtcblx0fVxuXHRmb3JFYWNoKFxuXHRcdGdldEVudGl0eUZpZWxkc0Zyb21TY2hlbWEoIGluc3RhbmNlICksXG5cdFx0KCBzY2hlbWFQcm9wZXJ0aWVzLCBmaWVsZE5hbWUgKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHR5cGVvZiBpbnN0YW5jZVsgZmllbGROYW1lIF0gPT09ICd1bmRlZmluZWQnICYmXG5cdFx0XHRcdCEgaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2Uuc2NoZW1hIClcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRJbml0aWFsRW50aXR5RmllbGRzQW5kVmFsdWVzKFxuXHRcdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IG9mIGVudGl0eSBmaWVsZHMgYW5kIHZhbHVlcyBmcm9tIHRoaXMgZW50aXR5IGluc3RhbmNlXG4gKiBmb3IgdXNlIGluIGNsb25pbmcgdGhlIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBQbGFpbiBvYmplY3Qgb2YgYWxsIGZpZWxkOnZhbHVlIHBhaXJzLlxuICovXG5jb25zdCBmb3JDbG9uZSA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdHJldHVybiBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yQ2xvbmluZyggaW5zdGFuY2UgKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiB0aGUgZW50aXR5IGZpZWxkcyBhbmQgdmFsdWVzIGZyb20gdGhpcyBlbnRpdHlcbiAqIGluc3RhbmNlIHByZXBhcmVkIGZvciB1c2UgaW4gYW4gdXBkYXRlIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IFBsYWluIG9iamVjdCBvZiBmaWVsZDp2YWx1ZSBwYWlycy5cbiAqL1xuY29uc3QgZm9yVXBkYXRlID0gKCBpbnN0YW5jZSApID0+IHtcblx0cmV0dXJuIGdldEJhc2VGaWVsZHNBbmRWYWx1ZXNGb3JQZXJzaXN0aW5nKCBpbnN0YW5jZSApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IG9mIHRoZSBlbnRpdHkgZmllbGRzIGFuZCB2YWx1ZXMgZnJvbSB0aGlzIGVudGl0eVxuICogaW5zdGFuY2UgcHJlcGFyZWQgZm9yIHVzZSBpbiBhbiBpbnNlcnQgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gUGxhaW4gb2JqZWN0IG9mIGZpZWxkOnZhbHVlIHBhaXJzLlxuICovXG5jb25zdCBmb3JJbnNlcnQgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRjb25zdCBlbnRpdHlWYWx1ZXMgPSBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yUGVyc2lzdGluZyhcblx0XHRpbnN0YW5jZSxcblx0XHR0cnVlXG5cdCk7XG5cdGluc3RhbmNlLnByaW1hcnlLZXlzLmZvckVhY2goICggcHJpbWFyeUtleSApID0+IHtcblx0XHRlbnRpdHlWYWx1ZXNbIHByaW1hcnlLZXkgXSA9IGluc3RhbmNlWyBwcmltYXJ5S2V5IF07XG5cdH0gKTtcblx0cmV0dXJuIGVudGl0eVZhbHVlcztcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiB0aGUgZW50aXR5IGZpZWxkcyBhbmQgdmFsdWVzIGZyb20gdGhpcyBlbnRpdHlcbiAqIGluc3RhbmNlIHByZXBhcmVkIGZvciB1c2UgaW4gZWl0aGVyIGFuIGluc2VydCBvciB1cGRhdGUgcmVxdWVzdC4gIFRoZSB0eXBlXG4gKiBpcyBhdXRvbWF0aWNhbGx5IGRlcml2ZWQgZnJvbSB0aGUgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgZW50aXR5IGlzIFwibmV3XCIgb3JcbiAqIG5vdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gUGxhaW4gb2JqZWN0IG9mIGZpZWxkOnZhbHVlIHBhaXJzLlxuICovXG5jb25zdCBmb3JQZXJzaXN0ID0gKCBpbnN0YW5jZSApID0+IHtcblx0aWYgKCBpbnN0YW5jZS5pc05ldyApIHtcblx0XHRyZXR1cm4gZm9ySW5zZXJ0KCBpbnN0YW5jZSApO1xuXHR9XG5cdHJldHVybiBmb3JVcGRhdGUoIGluc3RhbmNlICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgZ2V0dGVycyBmb3IgcmV0cmlldmluZyB0aGUgZmllbGRzIGFuZCB2YWx1ZXMgb2YgdGhlIGVudGl0eSBpbnN0YW5jZVxuICogZm9yIGluc2VydCBvciB1cGRhdGUgcmVxdWVzdHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVQZXJzaXN0aW5nR2V0dGVyc0FuZFNldHRlcnMgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRjcmVhdGVDYWxsYmFja0dldHRlciggaW5zdGFuY2UsICdmb3JVcGRhdGUnLCBmb3JVcGRhdGUgKTtcblx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoIGluc3RhbmNlLCAnZm9ySW5zZXJ0JywgZm9ySW5zZXJ0ICk7XG5cdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKCBpbnN0YW5jZSwgJ2ZvclBlcnNpc3QnLCBmb3JQZXJzaXN0ICk7XG5cdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKCBpbnN0YW5jZSwgJ2ZvckNsb25lJywgZm9yQ2xvbmUgKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIGVudGl0eSBmaWVsZCBhY2Nlc3NvcnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQcmltYXJ5S2V5XG4gKi9cbmNvbnN0IHNldEluaXRpYWxFbnRpdHlGaWVsZHNBbmRWYWx1ZXMgPSAoXG5cdGluc3RhbmNlLFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGlzUHJpbWFyeUtleSA9IGZhbHNlLFxuKSA9PiB7XG5cdGlmICggaXNVbmRlZmluZWQoIGZpZWxkVmFsdWUgKSApIHtcblx0XHRmaWVsZFZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlRm9yRmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2Uuc2NoZW1hICk7XG5cdFx0c2V0VmFsaWRhdGVUeXBlRm9yRmllbGQoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUgKTtcblx0fVxuXHRjcmVhdGVSYXdFbnRpdHlHZXR0ZXJzU2V0dGVycyhcblx0XHRpbnN0YW5jZSxcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZGVyaXZlUHJlcGFyZWRWYWx1ZUZvckZpZWxkKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIGluc3RhbmNlICksXG5cdFx0aXNQcmltYXJ5S2V5XG5cdCk7XG5cdGlmICggISBpc1ByaW1hcnlLZXkgKSB7XG5cdFx0Y3JlYXRlUmVuZGVyZWRHZXR0ZXJzKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRkZXJpdmVSZW5kZXJlZFZhbHVlKCBmaWVsZFZhbHVlIClcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgcmF3IGVudGl0eSBnZXR0ZXJzIGFuZCBzZXR0ZXJzLiAgVGhlc2UgYXJlIHRoZSBwcm9wZXJ0aWVzIG9mIGFuXG4gKiBlbnRpdHkgdGhhdCBoYXZlIHRoZSB2YWx1ZXMgdXNlZCBmb3Igbm90IG9ubHkgZ2V0dGluZyBidXQgYWxzbyBzZXR0aW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJpbWFyeUtleSBzZXQgdG8gdHJ1ZSBpZiBmaWVsZCBpcyB0aGUgbW9kZWwncyBwcmltYXJ5IGtleVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUmF3RW50aXR5R2V0dGVyc1NldHRlcnMgPSAoXG5cdGluc3RhbmNlLFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGlzUHJpbWFyeUtleSA9IGZhbHNlLFxuKSA9PiB7XG5cdGNvbnN0IG9wdHMgPSB7IGVudW1lcmFibGU6IHRydWUgfTtcblx0Ly8gcHJpbWFyeSBrZXkgaXMgaW1tdXRhYmxlXG5cdGlmICggaXNQcmltYXJ5S2V5ICkge1xuXHRcdGNyZWF0ZUdldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdG9wdHNcblx0XHQpO1xuXHRcdGNyZWF0ZUFsaWFzR2V0dGVyRm9yRmllbGQoIGluc3RhbmNlLCBmaWVsZE5hbWUgKTtcblx0fSBlbHNlIHtcblx0XHRjcmVhdGVHZXR0ZXJBbmRTZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRvcHRzXG5cdFx0KTtcblx0XHRjcmVhdGVGbHVlbnRTZXR0ZXIoIGluc3RhbmNlLCBmaWVsZE5hbWUgKTtcblx0XHRjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlckZvckZpZWxkKCBpbnN0YW5jZSwgZmllbGROYW1lICk7XG5cdH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBcImFsaWFzXCIgZ2V0dGVyIGZvciB0aGUgZ2l2ZW4gZmllbGQgbmFtZSBvbiB0aGUgZW50aXR5IGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBbGlhc0dldHRlckZvckZpZWxkID0gKCBpbnN0YW5jZSwgZmllbGROYW1lICkgPT4ge1xuXHRjcmVhdGVBbGlhc2VzRm9yTWV0aG9kKCBpbnN0YW5jZSwgZmllbGROYW1lLCBjcmVhdGVBbGlhc0dldHRlciApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIFwiYWxpYXNcIiBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGZvciB0aGUgZ2l2ZW4gZmllbGQgb24gdGhlIGVudGl0eVxuICogaW5zdGFuY2UuXG4gKlxuICogRXhhbXBsZTogRGF0ZXRpbWUgZW50aXRpZXMgaGF2ZSBhIGBEVFRfRVZUX3N0YXJ0YCBmaWVsZC4gIE9uIHRoZSBlbnRpdHlcbiAqIGluc3RhbmNlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgdmFsdWUgb2YgdGhhdCBmaWVsZCB2aWE6XG4gKiAtIGRhdGV0aW1lLkRUVF9FVlRfc3RhcnRcbiAqIC0gZGF0ZXRpbWUuZHR0RXZ0U3RhcnRcbiAqIC0gZGF0ZXRpbWUuZXZ0U3RhcnRcbiAqIC0gZGF0ZXRpbWUuc3RhcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyRm9yRmllbGQgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUgKSA9PiB7XG5cdGNyZWF0ZUFsaWFzZXNGb3JNZXRob2QoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgQWxpYXNlcyB1c2luZyB0aGUgcHJvdmlkZWQgbWV0aG9kLlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2RcbiAqL1xuY29uc3QgY3JlYXRlQWxpYXNlc0Zvck1ldGhvZCA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSwgbWV0aG9kICkgPT4ge1xuXHQvLyBjYW1lbENhc2UgZ2V0dGVyIChvciBzZXR0ZXIpIGZvciBmdWxsIGZpZWxkIG5hbWUgKGVnLiBFVlRfZGVzYyA9PiBldnREZXNjKVxuXHRtZXRob2QoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGNhbWVsQ2FzZSggZmllbGROYW1lICkgKTtcblx0Ly8gc3RyaXAgZmllbGQgcHJlZml4ZXMgYW5kIGNhbWVsQ2FzZSAoaWYgdGhlcmUgYXJlIGZpZWxkIHByZWZpeGVzIGZvciB0aGVcblx0Ly8gZW50aXR5LiAoZWcuIEVWVF9kZXNjID0+IGRlc2MpO1xuXHRpZiAoIGluc3RhbmNlLmZpZWxkUHJlZml4ZXMgKSB7XG5cdFx0bGV0IG5ld0ZpZWxkTmFtZSA9ICcnO1xuXHRcdC8vIFllcywgaXRzIGludGVuZGVkIHRoYXQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHByZWZpeGVzLCB0aGlzIGNvdWxkXG5cdFx0Ly8gZW5kIHVwIGNyZWF0aW5nIG11bHRpcGxlIGFsaWFzZWQgZ2V0dGVycyAob3Igc2V0dGVycylcblx0XHQvLyAoZWcgRGF0ZXRpbWU6IERUVF9FVlRfc3RhcnQgd291bGQgZW5kIHVwIHdpdGggYGV2dFN0YXJ0YCBhbmQgYHN0YXJ0YFxuXHRcdC8vIGFzIGdldHRlciBhY2Nlc3NvcnMpLlxuXHRcdGluc3RhbmNlLmZpZWxkUHJlZml4ZXMuZm9yRWFjaCggKCBmaWVsZFByZWZpeCApID0+IHtcblx0XHRcdG5ld0ZpZWxkTmFtZSA9IGZpZWxkTmFtZS5yZXBsYWNlKCBmaWVsZFByZWZpeCArICdfJywgJycgKTtcblx0XHRcdGlmICggbmV3RmllbGROYW1lICE9PSBmaWVsZE5hbWUgKSB7XG5cdFx0XHRcdG1ldGhvZChcblx0XHRcdFx0XHRpbnN0YW5jZSxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0Y2FtZWxDYXNlKCBuZXdGaWVsZE5hbWUgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgY2FsbGJhY2sgdGhhdCBpcyB1c2VkIGluIHRoZSBgZ2V0UmVuZGVyZWRgIGZpZWxkIGdldHRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7ZnVuY3Rpb24oc3RyaW5nKTogKn0gIEEgY2FsbGJhY2suXG4gKi9cbmNvbnN0IGdldFJlbmRlcmVkQ2FsbGJhY2sgPSAoIGluc3RhbmNlICkgPT4gKCByZXF1ZXN0ZWRGaWVsZE5hbWUgKSA9PlxuXHRpbnN0YW5jZVsgcmVxdWVzdGVkRmllbGROYW1lICsgJ1JlbmRlcmVkJyBdO1xuXG4vKipcbiAqIFJldHVybnMgYSBmaWVsZE5hbWUgc3RyaXBwZWQgb2YgYWxsIHBvc3NpYmxlIHByZWZpeGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgcHJlZml4IGZyZWUgZmllbGROYW1lLlxuICovXG5jb25zdCByZW1vdmVQcmVmaXhlc0Zyb21GaWVsZCA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSApID0+IHtcblx0Y29uc3QgcHJlZml4ZXNUb1JlbW92ZSA9IHNvcnRCeShcblx0XHRpbnN0YW5jZS5maWVsZFByZWZpeGVzLFxuXHRcdCggcHJlZml4ICkgPT4gcHJlZml4Lmxlbmd0aCAqIC0xXG5cdCk7XG5cdGxldCBuZXdGaWVsZE5hbWUgPSBmaWVsZE5hbWU7XG5cdGZvckVhY2goIHByZWZpeGVzVG9SZW1vdmUsICggcHJlZml4ICkgPT4ge1xuXHRcdG5ld0ZpZWxkTmFtZSA9IGZpZWxkTmFtZS5yZXBsYWNlKCBwcmVmaXgsICcnICk7XG5cdFx0aWYgKCBuZXdGaWVsZE5hbWUgIT09IGZpZWxkTmFtZSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH0gKTtcblx0cmV0dXJuIG5ld0ZpZWxkTmFtZTtcbn07XG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIHRoZSBnZXR0ZXJzIGZvciB0aGUgcmVuZGVyZWQgcHJvcGVydHkgb2YgbW9kZWwgZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSAgZmllbGRWYWx1ZVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUmVuZGVyZWRHZXR0ZXJzID0gKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlICkgPT4ge1xuXHRjcmVhdGVHZXR0ZXIoXG5cdFx0aW5zdGFuY2UsXG5cdFx0Y2FtZWxDYXNlKCByZW1vdmVQcmVmaXhlc0Zyb21GaWVsZCggaW5zdGFuY2UsIGZpZWxkTmFtZSApICkgK1xuXHRcdCdSZW5kZXJlZCcsXG5cdFx0ZmllbGRWYWx1ZVxuXHQpO1xuXHRpZiAoIGlzVW5kZWZpbmVkKCBpbnN0YW5jZS5nZXRSZW5kZXJlZCApICkge1xuXHRcdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHQnZ2V0UmVuZGVyZWQnLFxuXHRcdFx0Z2V0UmVuZGVyZWRDYWxsYmFjayxcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIENhbGxiYWNrIGZvciB0aGUgYGhhc011bHRpcGxlUHJpbWFyeUtleXNgIGdldHRlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKCk6IGJvb2xlYW59IFRoZSBjYWxsYmFjayBmb3IgaGFzTXVsdGlwbGVQcmltYXJ5S2V5cyBnZXR0ZXJcbiAqL1xuY29uc3QgaGFzTXVsdGlwbGVQcmltYXJ5S2V5c0NhbGxiYWNrID0gKCBpbnN0YW5jZSApID0+XG5cdGluc3RhbmNlLnByaW1hcnlLZXlzLmxlbmd0aCA+IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBnZXR0ZXJzIGZvciBwcmltYXJ5IGtleSByZWxhdGVkIGRhdGEuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge0FycmF5fSBwcmltYXJ5S2V5c1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUHJpbWFyeUtleUZpZWxkR2V0dGVycyA9ICggaW5zdGFuY2UsIHByaW1hcnlLZXlzICkgPT4ge1xuXHRjb25zdCBvcHRzID0geyBjb25maWd1cmFibGU6IHRydWUgfTtcblx0aWYgKCBpc0FycmF5KCBwcmltYXJ5S2V5cyApICkge1xuXHRcdGNyZWF0ZUdldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0J3ByaW1hcnlLZXknLFxuXHRcdFx0cHJpbWFyeUtleXNbIDAgXSxcblx0XHRcdG9wdHNcblx0XHQpO1xuXHRcdGNyZWF0ZUdldHRlckFuZFNldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0J3ByaW1hcnlLZXlzJyxcblx0XHRcdHByaW1hcnlLZXlzLFxuXHRcdFx0b3B0c1xuXHRcdCk7XG5cdFx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdCdoYXNNdWx0aXBsZVByaW1hcnlLZXlzJyxcblx0XHRcdGhhc011bHRpcGxlUHJpbWFyeUtleXNDYWxsYmFjayxcblx0XHRcdG9wdHNcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7ZnVuY3Rpb24oc3RyaW5nKTogYm9vbGVhbn0gUmV0dXJucyBhIGNhbGxiYWNrIGZvciB0aGVcbiAqIGhhc0NhbGN1bGF0ZWRGaWVsZCBnZXR0ZXJcbiAqL1xuY29uc3QgaGFzQ2FsY3VsYXRlZEZpZWxkQ2FsbGJhY2sgPSAoIGluc3RhbmNlICkgPT5cblx0KCBmaWVsZE5hbWVUb0NoZWNrICkgPT4gISBpc1VuZGVmaW5lZCggaW5zdGFuY2VbIGZpZWxkTmFtZVRvQ2hlY2sgXSApO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGdldHRlcnMgZm9yIGFsbCB0aGUgY2FsY3VsYXRlZCBmaWVsZHMgYW5kIHZhbHVlIG9uIHRoZSBlbnRpdHkuXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59ZmllbGRzQW5kVmFsdWVzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRDYWxjdWxhdGVkRmllbGRBbmRWYWx1ZXMgPSAoIGluc3RhbmNlLCBmaWVsZHNBbmRWYWx1ZXMgKSA9PiB7XG5cdGZvckVhY2goIGZpZWxkc0FuZFZhbHVlcywgKCBjYWxjdWxhdGVkRmllbGRWYWx1ZSwgY2FsY3VsYXRlZEZpZWxkTmFtZSApID0+IHtcblx0XHRpZiAoIGNhbGN1bGF0ZWRGaWVsZE5hbWUgIT09ICdfcHJvdGVjdGVkJyApIHtcblx0XHRcdGNyZWF0ZUdldHRlcihcblx0XHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRcdGNhbWVsQ2FzZSggY2FsY3VsYXRlZEZpZWxkTmFtZSApLFxuXHRcdFx0XHRjYWxjdWxhdGVkRmllbGRWYWx1ZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0gKTtcblx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoXG5cdFx0aW5zdGFuY2UsXG5cdFx0J2hhc0NhbGN1bGF0ZWRGaWVsZCcsXG5cdFx0aGFzQ2FsY3VsYXRlZEZpZWxkQ2FsbGJhY2tcblx0KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGdldHRlcnMgZm9yIHRoZSB2YXJpb3VzIHJlc291cmNlIGxpbmtzIG9uIHRoZSBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fWZpZWxkc0FuZFZhbHVlc1xuICovXG5leHBvcnQgY29uc3Qgc2V0UmVzb3VyY2VzID0gKCBpbnN0YW5jZSwgZmllbGRzQW5kVmFsdWVzICkgPT4ge1xuXHRjb25zdCByZWxhdGlvbnMgPSBbXTtcblx0bGV0IHJlbGF0aW9uTmFtZTtcblx0Zm9yRWFjaCggZmllbGRzQW5kVmFsdWVzLCAoIHJlc291cmNlVmFsdWUsIHJlc291cmNlTmFtZSApID0+IHtcblx0XHRpZiAoIHJlc291cmNlTmFtZSA9PT0gJ3NlbGYnICkge1xuXHRcdFx0Y3JlYXRlR2V0dGVyKCBpbnN0YW5jZSwgJ3Jlc291cmNlTGluaycsIHJlc291cmNlVmFsdWVbIDAgXS5ocmVmICk7XG5cdFx0fSBlbHNlIGlmICggcmVzb3VyY2VOYW1lID09PSAnY29sbGVjdGlvbicgKSB7XG5cdFx0XHRjcmVhdGVHZXR0ZXIoXG5cdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHQnY29sbGVjdGlvblJlc291cmNlTGluaycsXG5cdFx0XHRcdHJlc291cmNlVmFsdWVbIDAgXS5ocmVmXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWxhdGlvbk5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tTGluayggcmVzb3VyY2VOYW1lICk7XG5cdFx0XHRyZWxhdGlvbnMucHVzaCggcmVsYXRpb25OYW1lICk7XG5cdFx0XHRzZXRSZWxhdGlvbnNSZXNvdXJjZShcblx0XHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSArICdSZXNvdXJjZScsXG5cdFx0XHRcdHJlc291cmNlVmFsdWVcblx0XHRcdCk7XG5cdFx0fVxuXHR9ICk7XG5cdC8vc2V0IHJlbGF0aW9ucyBnZXR0ZXJcblx0Y3JlYXRlR2V0dGVyKCBpbnN0YW5jZSwgJ2dldFJlbGF0aW9ucycsIHJlbGF0aW9ucyApO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6IE9iamVjdH0gUmV0dXJucyB0aGUgY2FsbGJhY2sgZm9yIGdldHRpbmcgYVxuICogcmVsYXRpb24gcmVzb3VyY2VcbiAqL1xuY29uc3QgZ2V0UmVsYXRpb25SZXNvdXJjZUNhbGxiYWNrID0gKCBpbnN0YW5jZSApID0+XG5cdCggcmVsYXRpb25OYW1lICkgPT4gaW5zdGFuY2VbIHJlbGF0aW9uTmFtZS5yZXBsYWNlKCAnUmVzb3VyY2UnLCAnJyApIF07XG5cbi8qKlxuICogQ3JlYXRlcyBnZXR0ZXJzIGZvciB0aGUgcmVsYXRpb25zIHJlc291cmNlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsIHN0cmluZz59IHJlc291cmNlSW5mb1xuICovXG5leHBvcnQgY29uc3Qgc2V0UmVsYXRpb25zUmVzb3VyY2UgPSAoXG5cdGluc3RhbmNlLFxuXHRyZWxhdGlvbk5hbWUsXG5cdHJlc291cmNlSW5mb1xuKSA9PiB7XG5cdGNyZWF0ZUdldHRlcihcblx0XHRpbnN0YW5jZSxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0e1xuXHRcdFx0cmVzb3VyY2VMaW5rOiByZXNvdXJjZUluZm9bIDAgXS5ocmVmLFxuXHRcdFx0c2luZ2xlOiByZXNvdXJjZUluZm9bIDAgXS5zaW5nbGUsXG5cdFx0fVxuXHQpO1xuXHRpZiAoIGlzVW5kZWZpbmVkKCBpbnN0YW5jZS5nZXRSZWxhdGlvblJlc291cmNlICkgKSB7XG5cdFx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoIGluc3RhbmNlLFxuXHRcdFx0J2dldFJlbGF0aW9uUmVzb3VyY2UnLFxuXHRcdFx0Z2V0UmVsYXRpb25SZXNvdXJjZUNhbGxiYWNrXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBpbnRlcm5hbCBzYXZlIHN0YXRlIHRvIHRoZSBnaXZlbiB2YWx1ZSB3aGVuIGN1cnJlbnQgc3RhdGUgaXNcbiAqIFNBVkVfU1RBVEUuY2xlYW4gb3RoZXJ3aXNlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBpcyByZXRhaW5lZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzYXZlU3RhdGUgRXhwZWN0ZWQgdG8gYmUgb25lIG9mIFNBVkVfU1RBVEUgY29uc3RhbnQgdmFsdWVzLlxuICogQHBhcmFtIHtib29sZWFufSBvdmVycmlkZSBTZXQgdG8gdHJ1ZSB3aGVuIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgbG9naWMgZm9yXG4gKiBzZXR0aW5nIHN0YXRlLiAgV2hlbiB0cnVlLCB0aGUgc2F2ZVN0YXRlIGlzIHNldCB0byB3aGF0ZXZlciB0aGUgaW5jb21pbmdcbiAqIHNhdmVTdGF0ZSB2YWx1ZSBpcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNhdmVTdGF0ZSA9ICggaW5zdGFuY2UsIHNhdmVTdGF0ZSwgb3ZlcnJpZGUgPSBmYWxzZSApID0+IHtcblx0Y29uc3QgY3VycmVudFN0YXRlID0gaW5zdGFuY2VbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF07XG5cdHN3aXRjaCAoIHNhdmVTdGF0ZSApIHtcblx0XHRjYXNlIFNBVkVfU1RBVEUuRElSVFk6XG5cdFx0Y2FzZSBTQVZFX1NUQVRFLk5FVzpcblx0XHRjYXNlIFNBVkVfU1RBVEUuQ0xFQU46XG5cdFx0XHRpZiAoIG92ZXJyaWRlICkge1xuXHRcdFx0XHRpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlNBVkVfU1RBVEUgXSA9IHNhdmVTdGF0ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlNBVkVfU1RBVEUgXSA9XG5cdFx0XHRcdGN1cnJlbnRTdGF0ZSA9PT0gU0FWRV9TVEFURS5DTEVBTiA/XG5cdFx0XHRcdFx0c2F2ZVN0YXRlIDpcblx0XHRcdFx0XHRjdXJyZW50U3RhdGU7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEludmFsaWRBcmd1bWVudChcblx0XHRcdFx0J1NhdmUgc3RhdGUgZm9yIGVudGl0eSBjYW4gb25seSBiZSBzZXQgdG8gZWl0aGVyICcgK1xuXHRcdFx0XHQnU0FWRV9TVEFURS5ESVJUWSwgU0FWRV9TVEFURS5ORVcgb3IgU0FWRV9TVEFURS5DTEVBTidcblx0XHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogQWRkIHRoZSBmaWVsZCBuYW1lIHRvIHRoZSBmaWVsZFRvUGVyc2lzdE9uSW5zZXJ0IHByb3BlcnR5IG9uIHRoZSBpbnN0YW5jZVxuICogaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICovXG5leHBvcnQgY29uc3Qgc2V0RmllbGRUb1BlcnNpc3QgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUgKSA9PiB7XG5cdGlmICggaW5zdGFuY2UuZmllbGRzVG9QZXJzaXN0T25JbnNlcnQgKSB7XG5cdFx0aW5zdGFuY2UuZmllbGRzVG9QZXJzaXN0T25JbnNlcnQuYWRkKCBmaWVsZE5hbWUgKTtcblx0fVxufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRpc1BsYWluT2JqZWN0LFxuXHRjYW1lbENhc2UsXG5cdGxhc3QsXG5cdHBpY2ssXG5cdHBpY2tCeSxcblx0aXNBcnJheSxcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGluc3RhbmNlT2YgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdE1vbmV5LFxuXHRTaXRlQ3VycmVuY3ksXG5cdFNlcnZlckRhdGVUaW1lIGFzIERhdGVUaW1lLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcblxuaW1wb3J0IHsgcGx1cmFsTW9kZWxOYW1lIH0gZnJvbSAnLi4vbW9kZWwtbmFtZXMnO1xuXG5pbXBvcnQge1xuXHRoYXNSYXdQcm9wZXJ0eSxcblx0aGFzUHJldHR5UHJvcGVydHksXG5cdGhhc1JlbmRlcmVkUHJvcGVydHksXG5cdGlzRGF0ZVRpbWVGaWVsZCxcblx0aXNNb25leUZpZWxkLFxuXHRpc1ByaW1hcnlLZXlGaWVsZCxcblx0aXNFbnRpdHlGaWVsZCxcbn0gZnJvbSAnLi9ib29sZWFucyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVR5cGVGb3JGaWVsZCB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBWQUxJREFURV9UWVBFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFRoaXMgcmVjZWl2ZXMgYSBmaWVsZCBuYW1lLCBpdCdzIHZhbHVlIGFuZCB0aGUgc2NoZW1hIGFuZCBjb252ZXJ0cyBpdCB0byB0aGVcbiAqIHJlbGF0ZWQgdmFsdWUgb2JqZWN0IElGIHRoZSBzY2hlbWEgaW5kaWNhdGVzIGl0IGlzIG9mIGEgdHlwZSB0aGF0IHRoZXJlIGlzIGFcbiAqIGtub3duIHZhbHVlIG9iamVjdCBmb3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtEYXRlVGltZXxNb25leXwqfSAgSWYgdGhpcyBpcyBub3QgYSB2YWx1ZSBvYmplY3QsIHRoZSBvcmlnaW5hbCBmaWVsZFxuICogdmFsdWUgaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXliZUNvbnZlcnRUb1ZhbHVlT2JqZWN0ID0gKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIHNjaGVtYSApID0+IHtcblx0aWYgKFxuXHRcdGlzRGF0ZVRpbWVGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSAmJlxuXHRcdCEgRGF0ZVRpbWUudmFsaWRhdGVJc0RhdGVUaW1lKCBmaWVsZFZhbHVlIClcblx0KSB7XG5cdFx0cmV0dXJuIERhdGVUaW1lLmZyb21JU08oIGZpZWxkVmFsdWUgKTtcblx0fVxuXHRpZiAoXG5cdFx0aXNNb25leUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICYmXG5cdFx0ISAoIGluc3RhbmNlT2YoIGZpZWxkVmFsdWUsICdNb25leScgKSApXG5cdCkge1xuXHRcdHJldHVybiBuZXcgTW9uZXkoIGZpZWxkVmFsdWUsIFNpdGVDdXJyZW5jeSApO1xuXHR9XG5cdC8vIGlmIG1vcmUgVk9zIGdldCBhZGRlZCwgdGhlbiBpbnN0ZWFkIG9mIGFkZGluZyBtb3JlIGlmIGVsc2UgYmxvY2tzXG5cdC8vIHRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBvbmVzIGJlbG93LCBhbGwgVk8gbG9naWMgc2hvdWxkIGJlIGV4dHJhY3RlZFxuXHQvLyBpbnRvIHNvbWUga2luZCBvZiAgVmFsdWVPYmplY3RFeHRyYWN0b3Igb2JqZWN0IHRoYXQgd291bGQgaG9sZCBhbGwgb2Zcblx0Ly8gdGhlIG5lY2Vzc2FyeSBjYWxsYmFja3MgZm9yIG1hbmFnaW5nIHRoZSBkZXRlY3Rpb24gb2YgVk8gZmllbGRzIGFuZFxuXHQvLyBjb252ZXJzaW9uIG9mIGRhdGEgdG8gYW5kIGZyb20gdGhlIHZhcmlvdXMgVk9zXG5cdC8vIHBseiBzZWU6XG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmVudGVzcHJlc3NvL2V2ZW50LWVzcHJlc3NvLWNvcmUvcHVsbC82MzcvZmlsZXMjcjIyODY5MDc4OVxuXHRyZXR1cm4gZmllbGRWYWx1ZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb252ZXJ0cyB0aGUgaW5jb21pbmcgdmFsdWUgZm9yIGEgZmllbGQgdG8gaXRzIGVxdWl2YWxlbnQgXCJyYXdcIiB2YWx1ZVxuICogZnJvbSBhIHZhbHVlIG9iamVjdCBpZiBpdCBpcyBhIHZhbHVlIG9iamVjdC4gIE90aGVyd2lzZSBpdCBqdXN0IHJldHVybnMgdGhlXG4gKiBvcmlnaW5hbCBpbmNvbWluZyB2YWx1ZS4gIFRoaXMgYWxzbyBhc3NlcnRzIHRoYXQgaWYgdGhlIHByb3ZpZGVkIGZpZWxkIGlzXG4gKiBleHBlY3RlZCB0byBiZSBhIHZhbHVlIG9iamVjdCB0aGF0IHRoZSBpbmNvbWluZyB2YWx1ZSBJUyBhIHZhbGlkIHZhbHVlIG9iamVjdFxuICogYW5kIGl0IGlzIHRoZSBleHBlY3RlZCBpbnN0YW5jZSBvZiBhIHZhbHVlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp8TW9uZXl8RGF0ZVRpbWV9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge3N0cmluZ3xudW1iZXJ8Kn0gIElmIHRoZSB2YWx1ZSBpcyBub3QgYSB2YWx1ZSBvYmplY3QsIHJldHVybnMgdGhlXG4gKiBvcmlnaW5hbCB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgbWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0V2l0aEFzc2VydGlvbnMgPSAoXG5cdGZpZWxkTmFtZSxcblx0ZmllbGRWYWx1ZSxcblx0c2NoZW1hXG4pID0+IHtcblx0aWYgKCBpc0RhdGVUaW1lRmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0RGF0ZVRpbWUuYXNzZXJ0SXNEYXRlVGltZSggZmllbGRWYWx1ZSApO1xuXHRcdGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlLnRvSVNPKCk7XG5cdH0gZWxzZSBpZiAoIGlzTW9uZXlGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSApIHtcblx0XHRNb25leS5hc3NlcnRNb25leSggZmllbGRWYWx1ZSApO1xuXHRcdGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlLnRvTnVtYmVyKCk7XG5cdH1cblx0cmV0dXJuIGZpZWxkVmFsdWU7XG59O1xuXG4vKipcbiAqIFRoaXMgY29udmVydHMgdGhlIGluY29taW5nIHZhbHVlIGZvciBhIGZpZWxkIHRvIGl0cyBlcXVpdmFsZW50IFwicmF3XCIgdmFsdWVcbiAqIGlmIHRoZSBpbmNvbWluZyB2YWx1ZSAgaXMgYSB2YWx1ZSBvYmplY3QuICBPdGhlcndpc2UgaXQganVzdCByZXR1cm5zIHRoZVxuICogb3JpZ2luYWwgaW5jb21pbmcgdmFsdWUuXG4gKlxuICogQHBhcmFtIHsqfERhdGVUaW1lfE1vbmV5fWZpZWxkVmFsdWVcbiAqIEByZXR1cm4geyp9IFRoZSByYXcgdmFsdWUgZm9yIHRoZSB2YWx1ZSBvYmplY3Qgb3IgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgbWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0ID0gKCBmaWVsZFZhbHVlICkgPT4ge1xuXHRpZiAoIERhdGVUaW1lLnZhbGlkYXRlSXNEYXRlVGltZSggZmllbGRWYWx1ZSApICkge1xuXHRcdGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlLnRvSVNPKCk7XG5cdH0gZWxzZSBpZiAoIGluc3RhbmNlT2YoIGZpZWxkVmFsdWUsICdNb25leScgKSApIHtcblx0XHRmaWVsZFZhbHVlID0gZmllbGRWYWx1ZS50b051bWJlcigpO1xuXHR9XG5cdHJldHVybiBmaWVsZFZhbHVlO1xufTtcblxuLyoqXG4gKiBUaGlzIGRlcml2ZXMgdGhlIFwicHJlcGFyZWRcIiB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkIGFuZCB2YWx1ZS5cbiAqXG4gKiBcIlByZXBhcmVkXCIgbWVhbnM6XG4gKlxuICogLSBjb252ZXJ0aW5nIHRvIGEgdmFsdWUgb2JqZWN0IGlmIHRoaXMgaXMgYSBmaWVsZCB0aGF0IHRoZXJlIGFyZSBkZWZpbmVkXG4gKiAgIHZhbHVlIG9iamVjdHMgZm9yLlxuICogLSByZXRyaWV2aW5nIHRoZSBcInJhd1wiIHZhbHVlIGZyb20gZmllbGQgdmFsdWVzIHRoYXQgaGF2ZSBgcmF3YCBhbmQgYHJlbmRlcmVkYFxuICogICBvciBgcHJldHR5YCBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gIGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7RGF0ZVRpbWV8TW9uZXl8Kn0gIFJldHVybnMgdGhlIG9yaWdpbmFsIGluY29taW5nIHZhbHVlIGlmIGl0IGRvZXNcbiAqIG5vdCBoYXZlIGEgcmF3IGVxdWl2YWxlbnQgb3IgaXMgbm90IGEgdmFsdWUgb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgZGVyaXZlUHJlcGFyZWRWYWx1ZUZvckZpZWxkID0gKFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGluc3RhbmNlXG4pID0+IHtcblx0Y29uc3QgdmFsaWRhdGlvblR5cGUgPSB2YWxpZGF0ZVR5cGVGb3JGaWVsZCggZmllbGROYW1lLCBpbnN0YW5jZSApO1xuXHRmaWVsZFZhbHVlID0gaXNQbGFpbk9iamVjdCggZmllbGRWYWx1ZSApID9cblx0XHRmaWVsZFZhbHVlWyB2YWxpZGF0aW9uVHlwZSBdIDpcblx0XHRmaWVsZFZhbHVlO1xuXHRyZXR1cm4gbWF5YmVDb252ZXJ0VG9WYWx1ZU9iamVjdCggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBpbnN0YW5jZS5zY2hlbWEgKTtcbn07XG5cbi8qKlxuICogVGhpcyByZXR1cm5zIHRoZSBcInJlbmRlcmVkXCIgb3IgXCJwcmV0dHlcIiBlcXVpdmFsZW50IGZyb20gYSB2YWx1ZSBpZiBpdCBleGlzdHNcbiAqIGFzIGEgcHJvcGVydHkgb24gaXQuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn0gIFRoZSBvcmlnaW5hbCB2YWx1ZSBpcyByZXR1cm5lZCBpZiBpdHMgbm90IGEgcGxhaW4gb2JqZWN0IG9yIGlmXG4gKiBpdCBoYXMgbm8gYHJlbmRlcmVkYCBvciBgcHJldHR5YCBwcm9wZXJ0eS4gIEhvd2V2ZXIsIGlmIGl0IGlzIGEgcGxhaW4gb2JqZWN0XG4gKiBhbmQgaGFzIG5vIHByZXR0eS9yZW5kZXJlZCBwcm9wZXJ0aWVzIGJ1dCBET0VTIGhhdmUgYSByYXcgcHJvcGVydHksIHRoZW4gdGhhdFxuICogaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVSZW5kZXJlZFZhbHVlID0gKCB2YWx1ZSApID0+IHtcblx0aWYgKCAhIGlzUGxhaW5PYmplY3QoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdHZhbHVlID0gaGFzUHJldHR5UHJvcGVydHkoIHZhbHVlICkgPyB2YWx1ZS5wcmV0dHkgOiB2YWx1ZTtcblx0dmFsdWUgPSBoYXNSZW5kZXJlZFByb3BlcnR5KCB2YWx1ZSApID8gdmFsdWUucmVuZGVyZWQgOiB2YWx1ZTtcblx0cmV0dXJuIGhhc1Jhd1Byb3BlcnR5KCB2YWx1ZSApID8gdmFsdWUucmF3IDogdmFsdWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWUgb2YgYSByZXNvdXJjZSBmcm9tIHRoZSBnaXZlbiBgcmVzb3VyY2VMaW5rYC5cbiAqXG4gKiBlZy4gXCJodHRwczovL2FwaS5ldmVudGVzcHJlc3NvLmNvbS9yZWdpc3RyYXRpb25cIiB3aWxsIHJldHVybiAncmVnaXN0cmF0aW9uJztcblxuICogQHBhcmFtIHtzdHJpbmd9IHJlc291cmNlTGlua1xuICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBmcm9tIGEgcHJvdmlkZWQgcmVzb3VyY2VcbiAqIGxpbmsuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRSZWxhdGlvbk5hbWVGcm9tTGluayA9ICggcmVzb3VyY2VMaW5rICkgPT4ge1xuXHRyZXR1cm4gcGx1cmFsTW9kZWxOYW1lKCBjYW1lbENhc2UoIGxhc3QoIHJlc291cmNlTGluay5zcGxpdCggJy8nICkgKSApICk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwbGFpbiBvYmplY3QgY29udGFpbmluZyB0aGUgZW50aXR5IGZpZWxkIG5hbWVzIGFuZCB2YWx1ZXMgZnJvbSB0aGVcbiAqIHByb3ZpZGVkIGVudGl0eSBpbnN0YW5jZS4gIFRoZSB2YWx1ZXMgYXJlIG5vdCBwcmVwYXJlZCBhbmQgbWF0Y2ggZXhhY3RseSB3aGF0XG4gKiBpcyBjdXJyZW50bHkgc2V0IG9uIHRoaXMgZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7QmFzZUVudGl0eX0gZW50aXR5SW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgcGxhaW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yQ2xvbmluZyA9ICggZW50aXR5SW5zdGFuY2UgKSA9PiB7XG5cdHJldHVybiBPYmplY3Qua2V5cyggZW50aXR5SW5zdGFuY2UgKS5yZWR1Y2UoIChcblx0XHRmaWVsZHNBbmRWYWx1ZXMsXG5cdFx0ZmllbGROYW1lXG5cdCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdGlzRW50aXR5RmllbGQoIGZpZWxkTmFtZSwgZW50aXR5SW5zdGFuY2Uuc2NoZW1hICkgJiZcblx0XHRcdCEgaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgZW50aXR5SW5zdGFuY2Uuc2NoZW1hIClcblx0XHQpIHtcblx0XHRcdGZpZWxkc0FuZFZhbHVlc1sgZmllbGROYW1lIF0gPSBlbnRpdHlJbnN0YW5jZVsgZmllbGROYW1lIF07XG5cdFx0XHRyZXR1cm4gZmllbGRzQW5kVmFsdWVzO1xuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRzQW5kVmFsdWVzO1xuXHR9LCB7fSApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVudGl0eSBmaWVsZCBuYW1lIGFuZCB2YWx1ZXMgZnJvbSB0aGVcbiAqIHByb3ZpZGVkIGVudGl0eSBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eUluc3RhbmNlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZvckluc2VydCAgV2hldGhlciB0byByZXR1cm4gdGhlIGZpZWxkcyBhbmQgdmFsdWVzIGZvclxuICogaW5zZXJ0IG9yIGZvciB1cGRhdGUuXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgcGxhaW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yUGVyc2lzdGluZyA9IChcblx0ZW50aXR5SW5zdGFuY2UsXG5cdGZvckluc2VydCA9IGZhbHNlXG4pID0+IHtcblx0Y29uc3QgaXRlcmF0b3IgPSBmb3JJbnNlcnQgP1xuXHRcdEFycmF5LmZyb20oIGVudGl0eUluc3RhbmNlLmZpZWxkc1RvUGVyc2lzdE9uSW5zZXJ0LnZhbHVlcygpICkgOlxuXHRcdE9iamVjdC5rZXlzKCBlbnRpdHlJbnN0YW5jZSApO1xuXG5cdHJldHVybiBpdGVyYXRvci5yZWR1Y2UoIChcblx0XHRmaWVsZHNBbmRWYWx1ZXMsXG5cdFx0ZmllbGROYW1lXG5cdCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdGlzRW50aXR5RmllbGQoIGZpZWxkTmFtZSwgZW50aXR5SW5zdGFuY2Uuc2NoZW1hICkgJiZcblx0XHRcdCEgaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgZW50aXR5SW5zdGFuY2Uuc2NoZW1hIClcblx0XHQpIHtcblx0XHRcdGZpZWxkc0FuZFZhbHVlc1sgZmllbGROYW1lIF0gPSBtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3QoXG5cdFx0XHRcdGVudGl0eUluc3RhbmNlWyBmaWVsZE5hbWUgXSxcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gZmllbGRzQW5kVmFsdWVzO1xuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRzQW5kVmFsdWVzO1xuXHR9LCB7fSApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcmltYXJ5IGtleShzKSBhbmQgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gZW50aXR5SW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZW50aXR5SW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gYW4gYXJyYXkgb2YgdmFsdWVzIGZvciB0aGUgcHJpbWFyeSBrZXlzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJpbWFyeUtleVZhbHVlcyA9ICggZW50aXR5SW5zdGFuY2UgKSA9PiBwaWNrKFxuXHRlbnRpdHlJbnN0YW5jZSxcblx0ZW50aXR5SW5zdGFuY2UucHJpbWFyeUtleXNcbik7XG5cbi8qKlxuICogVGhpcyByZXR1cm5zIGEgcGxhaW4gb2JqZWN0IG9mIGVudGl0eSBmaWVsZHMgZnJvbSB0aGUgc2NoZW1hIGZvciB0aGUgZW50aXR5XG4gKiBpbnN0YW5jZSAoc2NoZW1hIGZvciBmaWVsZHMgYXJlIGV4dHJhY3RlZCBhcyB3ZWxsKS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZW50aXR5SW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gQSBwbGFpbiBvYmplY3Qgd2l0aCBmaWVsZHMgYW5kIHNjaGVtYSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiBlbnRpdHkgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVudGl0eUZpZWxkc0Zyb21TY2hlbWEgPSAoIGVudGl0eUluc3RhbmNlICkgPT4gcGlja0J5KFxuXHRlbnRpdHlJbnN0YW5jZS5zY2hlbWEsXG5cdCggZmllbGRWYWx1ZSwgZmllbGROYW1lICkgPT4gaXNFbnRpdHlGaWVsZChcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZW50aXR5SW5zdGFuY2Uuc2NoZW1hXG5cdClcbik7XG5cbi8qKlxuICogVGhpcyByZXR1cm5zIGEgcGxhaW4gb2JqZWN0IG9mIGV4dHJhY3RlZCBwcmltYXJ5S2V5IGZpZWxkcyBmcm9tIHRoZSBzY2hlbWFcbiAqIGZvciB0aGUgZW50aXR5IGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbnRpdHlJbnN0YW5jZVxuICogQHJldHVybiB7T2JqZWN0fSBBIHBsYWluIG9iamVjdCB3aXRoIGZpZWxkcyBhbmQgc2NoZW1hIHByb3BlcnRpZXMgdGhhdFxuICogXHRcdFx0XHRcdHJlcHJlc2VudCBwcmltYXJ5IGtleSBmaWVsZHMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmltYXJ5S2V5RmllbGRzRnJvbVNjaGVtYSA9ICggZW50aXR5SW5zdGFuY2UgKSA9PiBwaWNrQnkoXG5cdGVudGl0eUluc3RhbmNlLnNjaGVtYSxcblx0KCBmaWVsZFZhbHVlLCBmaWVsZE5hbWUgKSA9PiBpc1ByaW1hcnlLZXlGaWVsZChcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZW50aXR5SW5zdGFuY2Uuc2NoZW1hXG5cdClcbik7XG5cbi8qKlxuICogRGVyaXZlcyB0aGUgZGVmYXVsdCB2YWx1ZSB0byB1c2UgZm9yIGEgZ2l2ZW4gdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Kn0gIEEgdmFsdWUgdG8gdXNlIGZvciB0aGUgZ2l2ZW4gdHlwZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlcml2ZURlZmF1bHRWYWx1ZUZvclR5cGUgPSAoIHR5cGUgKSA9PiB7XG5cdGlmICggaXNBcnJheSggdHlwZSApICkge1xuXHRcdHJldHVybiB0eXBlLmluZGV4T2YoICdudWxsJyApID4gLTEgP1xuXHRcdFx0bnVsbCA6XG5cdFx0XHRkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlKCB0eXBlWyAwIF0gKTtcblx0fVxuXHRzd2l0Y2ggKCB0eXBlICkge1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRjYXNlICdpbnRlZ2VyJzpcblx0XHRcdHJldHVybiAwO1xuXHRcdGNhc2UgJ251bGwnOlxuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRjYXNlICdib29sZWFuJzpcblx0XHRjYXNlICdib29sJzpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRjYXNlICdkYXRlLXRpbWUnOlxuXHRcdFx0cmV0dXJuICggbmV3IERhdGUoKSApLnRvSVNPU3RyaW5nKCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIERlcml2ZXMgd2hhdCBgdHlwZWAgYSBmaWVsZCBpcyBmcm9tIHRoZSBzY2hlbWEuXG4gKiBJdCBhY2NvdW50cyBmb3IgY2FzZXMgd2hlcmUgdGhlIFwidHlwZVwiIG9mIGEgZmllbGQgbWlnaHQgYmUgYGRhdGUtdGltZWAgb3JcbiAqIHdoZXJlIHRoZSB0eXBlIGlzIGFuIG9iamVjdCBhbmQgdGh1cyB0aGUgYHR5cGVgIGZvciB0aGUgcHVycG9zZXMgb2YgbW9kZWxcbiAqIGVudGl0aWVzIGlzIGRlZmluZWQgYnkgdGhlIGByYXdgIHByb3BlcnR5IGZvciB0aGUgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Kn0gIFdoYXQgdHlwZSB0aGUgZmlsZWQgaXMuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVUeXBlRm9yRmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT4ge1xuXHRpZiAoIGlzRGF0ZVRpbWVGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSApIHtcblx0XHRyZXR1cm4gJ2RhdGUtdGltZSc7XG5cdH1cblx0aWYgKCBzY2hlbWFbIGZpZWxkTmFtZSBdICYmIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSApIHtcblx0XHRpZiAoIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcyAmJlxuXHRcdFx0XHRoYXNSYXdQcm9wZXJ0eSggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzIClcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlID9cblx0XHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LnR5cGUgOlxuXHRcdFx0XHRcdG51bGw7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogVGhpcyBkZXJpdmVzIHRoZSB2YWxpZGF0ZSB0eXBlIGZyb20gdGhlIGluY29taW5nIGZpZWxkIGFuZCB2YWx1ZSBhY2NvcmRpbmdcbiAqIHRvIHRoZSBzY2hlbWEgYW5kIGluY29taW5nIHZhbHVlLlxuICpcbiAqIFRoaXMgYWNjb3VudHMgZm9yIHRoZSBmYWN0IHRoYXQgZW50aXRpZXMgbWF5IGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlXG4gKiBmb2xsb3dpbmcgY29udGV4dHM6XG4gKlxuICogMS4gQXV0aGVkIFJFU1QgcmVzcG9uc2UgKHdoaWNoIGNvdWxkIGhhdmUgYm90aCByYXcsIHJlbmRlcmVkIG9yIHByZXR0eVxuICogICAgdmFsdWVzIGluIHRoZSBmaWVsZCB2YWx1ZSkuXG4gKiAyLiBOb24tYXV0aGVkIFJFU1QgcmVzcG9uc2UgKHdoaWNoIHdpbGwgbm90IGhhdmUgYSByYXcgdmFsdWUsIGJ1dCBjb3VsZCBoYXZlXG4gKiAgICBhIHByZXR0eSBvciByZW5kZXJlZCB2YWx1ZSkuICBUaGlzIGlzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGlmIHRoZVxuICogICAgcmVuZGVyZWQgb3IgcHJldHR5IHZhbHVlIGlzIG9mIGEgZGlmZmVyZW50IGRhdGEgdHlwZSB0aGFuIHRoZSByYXcgdmFsdWUuXG4gKiAzLiBOZXcgZW50aXRpZXMgYnVpbHQgY2xpZW50IHNpZGUsIHdoaWNoIHdpbGwgYmUgYXNzdW1lZCB0byBiZSBwcmVwYXJlZFxuICogICAgYWdhaW5zdCB0aGUgXCJyYXdcIiB2YWxpZGF0ZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7U3ltYm9sfSAgVGhlIHZhbGlkYXRlIHR5cGUgZm9yIHRoZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkID0gKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIHNjaGVtYSApID0+IHtcblx0aWYgKCBoYXNSYXdQcm9wZXJ0eSggZmllbGRWYWx1ZSApICkge1xuXHRcdHJldHVybiBWQUxJREFURV9UWVBFLlJBVztcblx0fVxuXHRpZiAoIHNjaGVtYVsgZmllbGROYW1lIF0gJiYgc2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlICkge1xuXHRcdGlmIChcblx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdGlzUGxhaW5PYmplY3QoIGZpZWxkVmFsdWUgKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGhhc1JlbmRlcmVkUHJvcGVydHkoIGZpZWxkVmFsdWUgKSA/XG5cdFx0XHRcdFZBTElEQVRFX1RZUEUuUkVOREVSRUQgOlxuXHRcdFx0XHRWQUxJREFURV9UWVBFLlBSRVRUWTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFZBTElEQVRFX1RZUEUuUkFXO1xufTtcblxuLyoqXG4gKiBUaGlzIGdldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgZmllbGQgZnJvbSB0aGUgcHJvdmlkZWQgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4geyp9IFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgZmllbGQgZnJvbSB0aGUgc2NoZW1hIG9yIGlmIG5vdFxuICogcHJlc2VudCBpbiB0aGUgc2NoZW1hLCBhIGRlcml2ZWQgZGVmYXVsdCB2YWx1ZSBmcm9tIHRoZSBzY2hlbWEgdHlwZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRWYWx1ZUZvckZpZWxkID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+IHtcblx0aWYgKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkge1xuXHRcdHJldHVybiBzY2hlbWFbIGZpZWxkTmFtZSBdLmRlZmF1bHQgP1xuXHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5kZWZhdWx0IDpcblx0XHRcdGRlcml2ZURlZmF1bHRWYWx1ZUZvclR5cGUoIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSApO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlRW50aXR5RmFjdG9yeSB9IGZyb20gJy4vYmFzZS1lbnRpdHknO1xuZXhwb3J0IHsgTU9ERUxfUFJFRklYRVMsIFNBVkVfU1RBVEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNJbnRlZ2VyLFxuXHRpc1N0cmluZyxcblx0aXNQbGFpbk9iamVjdCxcblx0aXNCb29sZWFuLFxuXHRpc051bWJlcixcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHNwcmludGYgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBJbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzRW51bUZpZWxkLCBpc1ByaW1hcnlLZXlGaWVsZCwgaXNWYWx1ZU9iamVjdEZpZWxkIH0gZnJvbSAnLi9ib29sZWFucyc7XG5pbXBvcnQgeyBtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyB9IGZyb20gJy4vZXh0cmFjdG9ycyc7XG5pbXBvcnQgeyBQUklWQVRFX1BST1BFUlRJRVMsIFZBTElEQVRFX1RZUEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBpbmNvbWluZyB2YWx1ZSBmb3IgZ2l2ZW4gdHlwZS4gIFR5cGVzIGFsbG93ZWQgYXJlOlxuICpcbiAqIC0gaW50ZWdlcjogY2hlY2tzIGlmIHZhbHVlIGlzIGFuIGludGVnZXIuXG4gKiAtIG51bWJlcjogY2hlY2tzIGlmIHZhbHVlIGlzIGNsYXNzaWZpZWQgYXMgYSBOdW1iZXIgcHJpbWl0aXZlIG9yIG9iamVjdCAodGhpc1xuICogICBtZWFucyBgSW5maW5pdHlgLCBgLUluZmluaXR5YCwgYW5kIGBOYU5gIGFyZSBjb25zaWRlcmVkIHZhbGlkIGZvciB0aGlzIHR5cGVcbiAqIC0gc3RyaW5nXG4gKiAtIG9iamVjdCAtIHRoaXMgdmFsaWRhdGVzIGFzIGEgXCJwbGFpbk9iamVjdFwiLCB0aGF0IGlzIGFuIG9iamVjdCBjcmVhdGVkIGJ5XG4gKiAgIHRoZSBPYmplY3QgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBbW1Byb3RvdHlwZV1dIG9mIG51bGwuXG4gKiAtIGJvb2xlYW5cbiAqIC0gYm9vbDogKHNhbWUgYXMgYm9vbGVhbiBjaGVjaylcbiAqIC0gbnVsbDogdmFsdWUgbXVzdCBleHBsaWNpdGx5IGJlIGBudWxsYFxuICpcbiAqIE5vdGU6IGlmIHRoZSBwYXNzZWQgaW4gdHlwZSBkb2VzIG5vdCBleGlzdCwgdGhlbiB0aGUgdmFsdWUgaXMgY29uc2lkZXJlZFxuICogaW52YWxpZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheX0gdHlwZSAgVGhlIHR5cGUgb3IgdHlwZXMgdG8gY2hlY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgIFRoZSB2YWx1ZSBiZWluZyB2YWxpZGF0ZWRcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIHRoZSB2YWx1ZSBpcyB2YWxpZCBmb3IgdGhlIGdpdmVuIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVR5cGUgPSAoIHR5cGUsIHZhbHVlICkgPT4ge1xuXHRsZXQgdmFsaWQgPSBmYWxzZTtcblx0Ly8gYWNjb3VudCBmb3IgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGFyZSBhbiBhcnJheSBvZiBhbGxvd2VkIHR5cGVzLlxuXHRpZiAoIGlzQXJyYXkoIHR5cGUgKSApIHtcblx0XHRmb3IgKCBjb25zdCBzaW5nbGVUeXBlIG9mIHR5cGUgKSB7XG5cdFx0XHR2YWxpZCA9IHZhbGlkYXRlVHlwZSggc2luZ2xlVHlwZSwgdmFsdWUgKTtcblx0XHRcdGlmICggdmFsaWQgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyByZXR1cm4gcmlnaHQgYXdheSBiZWNhdXNlIHdlJ3ZlIGRldGVybWluZWQgdGhlIHZhbGlkaXR5IG9mIHRoZSB0eXBlLlxuXHRcdHJldHVybiB2YWxpZDtcblx0fVxuXHRzd2l0Y2ggKCB0eXBlICkge1xuXHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0dmFsaWQgPSBpc0ludGVnZXIoIHZhbHVlICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0dmFsaWQgPSBpc051bWJlciggdmFsdWUgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHR2YWxpZCA9IGlzU3RyaW5nKCB2YWx1ZSApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdHZhbGlkID0gaXNQbGFpbk9iamVjdCggdmFsdWUgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2Jvb2xlYW4nOlxuXHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0dmFsaWQgPSBpc0Jvb2xlYW4oIHZhbHVlICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdudWxsJzpcblx0XHRcdHZhbGlkID0gdmFsdWUgPT09IG51bGw7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gdmFsaWQ7XG59O1xuXG4vKipcbiAqIFRoaXMgdmFsaWRhdGVzIGVudW0gdHlwZSBvZiB2YWx1ZXMuXG4gKlxuICogVGhpcyBtZWFucyB0aGF0IHRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUgcHJvdmlkZWQgYXJyYXkgb2YgZW51bVZhbHVlcyBhc1xuICogd2VsbCBhcyBiZWluZyBvZiB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtBcnJheX0gZW51bVZhbHVlc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgdGhpcyB2YWx1ZSBpcyB2YWxpZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRW51bVR5cGUgPSAoIHR5cGUsIGVudW1WYWx1ZXMsIHZhbHVlICkgPT4ge1xuXHRyZXR1cm4gdmFsaWRhdGVUeXBlKCB0eXBlLCB2YWx1ZSApICYmXG5cdFx0aXNBcnJheSggZW51bVZhbHVlcyApICYmXG5cdFx0ZW51bVZhbHVlcy5pbmRleE9mKCB2YWx1ZSApID4gLTE7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGRvZXMgYSBzaGFsbG93IHZhbGlkYXRpb24gZm9yIHRoZSBnaXZlbiB2YWx1ZSBhbmQgZmllbGQuXG4gKlxuICogXCJTaGFsbG93XCIgaGVyZSBtZWFucyB0aGF0IGlmIHRoZSBmaWVsZCBzY2hlbWEgaXMgb2YgdHlwZSAnb2JqZWN0JywgdGhlbiB0aGVcbiAqIHZhbGlkYXRpb24gb25seSB2ZXJpZmllcyB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuICBUaGUgb2JqZWN0IGNvbnRlbnRzXG4gKiBhcmUgbm90IHZhbGlkYXRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwZWN0VmFsdWVPYmplY3RzICBJZiB0cnVlLCB0aGVuIHRoaXMgZmxhZ3MgdGhlIHZhbGlkYXRvclxuICogdG8gYXNzdW1lIHRoZSB2YWx1ZSBtaWdodCBiZSBhIHZhbHVlIG9iamVjdCBhbmQgYXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgcmF3XG4gKiB2YWx1ZSBmcm9tIHRoYXQgdmFsdWUgb2JqZWN0IGZvciB2YWxpZGF0aW9uIGFnYWluc3QgdGhlIGV4cGVjdGVkIHR5cGUgaW4gdGhlXG4gKiBzY2hlbWEgZm9yIHRoYXQgZmllbGQuXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gKiBAdGhyb3dzIFR5cGVFcnJvclxuICogQHRocm93cyBJbnZhbGlkRGF0ZVRpbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZCA9IChcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRzY2hlbWEsXG5cdGV4cGVjdFZhbHVlT2JqZWN0cyA9IHRydWVcbikgPT4ge1xuXHQvLyBpZiBmaWVsZCBpcyBhIHByaW1hcnkgS2V5IGZpZWxkIHRoZW4gd2Ugb3ZlcnJpZGUgdGhlIHZhbGlkYXRpb24gc28gaXQgY2FuXG5cdC8vIGJlIGVpdGhlciBzdHJpbmcgb3IgbnVtYmVyXG5cdGlmICggaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0cmV0dXJuIHZhbGlkYXRlVHlwZSggJ3N0cmluZycsIGZpZWxkVmFsdWUgKSB8fFxuXHRcdFx0dmFsaWRhdGVUeXBlKCAnbnVtYmVyJywgZmllbGRWYWx1ZSApO1xuXHR9XG5cdGNvbnN0IGlzRW51bSA9IGlzRW51bUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApO1xuXHRjb25zdCBpc1ZhbHVlT2JqZWN0ID0gaXNWYWx1ZU9iamVjdEZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApO1xuXHRmaWVsZFZhbHVlID0gZXhwZWN0VmFsdWVPYmplY3RzICYmIGlzVmFsdWVPYmplY3QgP1xuXHRcdG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zKFxuXHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdHNjaGVtYVxuXHRcdCkgOlxuXHRcdGZpZWxkVmFsdWU7XG5cdGZpZWxkVmFsdWUgPSBleHBlY3RWYWx1ZU9iamVjdHMgJiZcblx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdGlzVmFsdWVPYmplY3QgP1xuXHRcdHsgcmF3OiBmaWVsZFZhbHVlIH0gOlxuXHRcdGZpZWxkVmFsdWU7XG5cdGNvbnN0IGlzVmFsaWQgPSBpc0VudW0gP1xuXHRcdHZhbGlkYXRlRW51bVR5cGUoXG5cdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUsXG5cdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLmVudW0sXG5cdFx0XHRmaWVsZFZhbHVlXG5cdFx0KSA6XG5cdFx0dmFsaWRhdGVUeXBlKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUsIGZpZWxkVmFsdWUgKTtcblx0Ly8gaWYgaXNFbnVtIGFuZCBub3QgdmFsaWQsIHRoZW4gbGV0cyBiYWlsIHdpdGggZXJyb3Jcblx0aWYgKCBpc0VudW0gJiYgISBpc1ZhbGlkICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHQnVGhlIGdpdmVuIFwiJXNcIiBmaWVsZE5hbWUgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEuICBJdCBtdXN0IGJlIGEgXCIlc1wiIGFuZCBpdCBtdXN0IGJlIG9uZSBvZiBcIiVzXCIuIFRoZSBmaWVsZFZhbHVlIGdpdmVuIHdhcyBcIiVzXCInLFxuXHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0uZW51bS5qb2luKCksXG5cdFx0XHRcdGZpZWxkVmFsdWVcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cdHJldHVybiBpc1ZhbGlkO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoYXQgaXMgc2V0IGFzIHRoZSB2YWxpZGF0ZVR5cGUgZm9yIHRoZSBnaXZlbiBmaWVsZCBhbmQgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB2YWxpZGF0aW9uIHR5cGUgZm9yIHRoZSBnaXZlbiBmaWVsZCBhbmQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVR5cGVGb3JGaWVsZCA9ICggZmllbGROYW1lLCBpbnN0YW5jZSApID0+IHtcblx0cmV0dXJuIGluc3RhbmNlWyBQUklWQVRFX1BST1BFUlRJRVMuVkFMSURBVEVfVFlQRVMgXVsgZmllbGROYW1lIF0gP1xuXHRcdGluc3RhbmNlWyBQUklWQVRFX1BST1BFUlRJRVMuVkFMSURBVEVfVFlQRVMgXVsgZmllbGROYW1lIF0gOlxuXHRcdFZBTElEQVRFX1RZUEUuUkFXO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgTU9ERUxfTkFNRSA9ICdldmVudCc7XG5cbmV4cG9ydCBjb25zdCBFVkVOVF9TVEFUVVNfSUQgPSB7XG5cdFNPTERfT1VUOiAnc29sZF9vdXQnLFxuXHRQT1NUUE9ORUQ6ICdwb3N0cG9uZWQnLFxuXHRDQU5DRUxMRUQ6ICdjYW5jZWxsZWQnLFxufTtcblxuZXhwb3J0IGNvbnN0IEVWRU5UX1NUQVRVU19JRFMgPSB2YWx1ZXMoIEVWRU5UX1NUQVRVU19JRCApO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcblx0R1JFQVRFUl9USEFOLFxuXHRHUkVBVEVSX1RIQU5fQU5EX0VRVUFMLFxuXHRMRVNTX1RIQU5fQU5EX0VRVUFMLFxufSBmcm9tICcuLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IG5vd0RhdGVBbmRUaW1lID0gbW9tZW50KCk7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdFVlRfbmFtZScsXG5cdFx0XHQnRVZUX0lEJyxcblx0XHRcdCdzdGFydF9kYXRlJyxcblx0XHRcdCdlbmRfZGF0ZScsXG5cdFx0XHQndGlja2V0X3N0YXJ0Jyxcblx0XHRcdCd0aWNrZXRfZW5kJyxcblx0XHRdICksXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0XHRzaG93RXhwaXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cdFx0Y2F0ZWdvcnlTbHVnOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdG1vbnRoOiBQcm9wVHlwZXMubW9udGgsXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHRcdHNob3dFeHBpcmVkOiBib29sZWFuXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdzdGFydF9kYXRlJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfREVTQyxcblx0XHRzaG93RXhwaXJlZDogZmFsc2UsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHN0YXJ0X2RhdGU6ICdEYXRldGltZS5EVFRfRVZUX3N0YXJ0Jyxcblx0XHRlbmRfZGF0ZTogJ0RhdGV0aW1lLkRUVF9FVlRfZW5kJyxcblx0XHR0aWNrZXRfc3RhcnQ6ICdEYXRldGltZS5UaWNrZXQuVEtUX3N0YXJ0X2RhdGUnLFxuXHRcdHRpY2tldF9lbmQ6ICdEYXRldGltZS5UaWNrZXQuVEtUX2VuZF9kYXRlJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gZXZlbnRzIGVuZHBvaW50IHJlcXVlc3QgdXNpbmcgcHJvdmlkZWRcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd0V4cGlyZWQgIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgZXhwaXJlZCBldmVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2F0ZWdvcnlTbHVnICBSZXR1cm4gZXZlbnRzIGZvciB0aGUgZ2l2ZW4gY2F0ZWdvcnlTbHVnXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9udGggICAgICAgICBSZXR1cm4gZXZlbnRzIGZvciB0aGUgZ2l2ZW4gbW9udGguXG4gKiBcdFx0XHRcdFx0XHRcdFx0IENhbiBiZSBhbnkgbW9udGggZm9ybWF0IHJlY29nbml6ZWQgYnkgbW9tZW50LlxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgVGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdHNob3dFeHBpcmVkID0gZmFsc2UsXG5cdGNhdGVnb3J5U2x1Zyxcblx0bW9udGggPSAnbm9uZScsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXG5cdGlmICggISBzaG93RXhwaXJlZCApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RhdGV0aW1lLkRUVF9FVlRfZW5kKipleHBpcmVkXVtdPScgKyBHUkVBVEVSX1RIQU4gK1xuXHRcdFx0JyZ3aGVyZVtEYXRldGltZS5EVFRfRVZUX2VuZCoqZXhwaXJlZF1bXT0nICtcblx0XHRcdG5vd0RhdGVBbmRUaW1lLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGlmICggY2F0ZWdvcnlTbHVnICkge1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbVGVybV9SZWxhdGlvbnNoaXAuVGVybV9UYXhvbm9teS5UZXJtLnNsdWddPScgKyBjYXRlZ29yeVNsdWdcblx0XHQpO1xuXHR9XG5cdGlmICggbW9udGggJiYgbW9udGggIT09ICdub25lJyApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RhdGV0aW1lLkRUVF9FVlRfc3RhcnRdW109JyArIEdSRUFURVJfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtEYXRldGltZS5EVFRfRVZUX3N0YXJ0XVtdPScgK1xuXHRcdFx0bW9tZW50KCkubW9udGgoIG1vbnRoICkuc3RhcnRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbRGF0ZXRpbWUuRFRUX0VWVF9lbmRdW109JyArIExFU1NfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtEYXRldGltZS5EVFRfRVZUX2VuZF1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLmVuZE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL2Fzc2VydGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vZGVmYXVsdC1tb2RlbC1zdGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2VuZHBvaW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2VudGl0eS1mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vcHJpbWFyeS1rZXlzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwtbmFtZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHByaW1hcnlLZXlzIH0gZnJvbSAnLi9wcmltYXJ5LWtleXMuanMnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsga2V5cywgc3RhcnRDYXNlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwbHVyYWxpemUgZnJvbSAncGx1cmFsaXplJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBtb2RlbCBuYW1lcyBjdXJyZW50bHkgZXhwb3NlZCBmb3IgUkVTVCBBUEkgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX05BTUVTID0ga2V5cyggcHJpbWFyeUtleXMgKTtcblxuLyoqXG4gKiBVc2VkIHRvIG5vcm1hbGl6ZSB0aGUgcGx1cmFsIGZvcm0gb2YgYSBnaXZlbiBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSAgRW5zdXJlcyB0aGUgZ2l2ZW4gbW9kZWxOYW1lIGlzIGl0cyBwbHVyYWwgZm9ybS5cbiAqL1xuZXhwb3J0IGNvbnN0IHBsdXJhbE1vZGVsTmFtZSA9IG1lbW9pemUoXG5cdCggbW9kZWxOYW1lICkgPT4gcGx1cmFsaXplKCBtb2RlbE5hbWUgKVxuKTtcblxuLyoqXG4gKiBVc2VkIHRvIG5vcm1hbGl6ZSB0aGUgc2luZ3VsYXIgZm9ybSBvZiBhIGdpdmVuIG1vZGVsIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEVuc3VyZXMgdGhlIGdpdmVuIG1vZGVsTmFtZSBpcyBpbiBpdHMgc2luZ3VsYXIgZm9ybS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNpbmd1bGFyTW9kZWxOYW1lID0gbWVtb2l6ZShcblx0KCBtb2RlbE5hbWUgKSA9PiBwbHVyYWxpemUuc2luZ3VsYXIoIG1vZGVsTmFtZSApXG4pO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBjYXBpdGFsaXplZCBzbmFrZWNhc2UgZm9ybWF0IGZvciB0aGUgZ2l2ZW4gbW9kZWwgbmFtZSB0eXBpY2FsbHlcbiAqIHVzZWQgaW4gcXVlcnkgc3RyaW5ncy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nKCAnbWVzc2FnZV90ZW1wbGF0ZV9ncm91cCcgKTtcbiAqIC8vIE1lc3NhZ2VfVGVtcGxhdGVfR3JvdXBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBmb3JtYXR0ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgbW9kZWxOYW1lRm9yUXVlcnlTdHJpbmcgPSBtZW1vaXplKFxuXHQoIG1vZGVsTmFtZSApID0+IHtcblx0XHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdFx0bW9kZWxOYW1lID0gc3RhcnRDYXNlKCBtb2RlbE5hbWUgKTtcblx0XHRyZXR1cm4gbW9kZWxOYW1lLnJlcGxhY2UoIC9cXHMvZywgJ18nICk7XG5cdH1cbik7XG4iLCJpbXBvcnQgKiBhcyBhdHRlbmRlZU1vZGVsIGZyb20gJy4vYXR0ZW5kZWUnO1xuaW1wb3J0ICogYXMgY2hlY2tJbk1vZGVsIGZyb20gJy4vY2hlY2tpbic7XG5pbXBvcnQgKiBhcyBkYXRlVGltZU1vZGVsIGZyb20gJy4vZGF0ZXRpbWUnO1xuaW1wb3J0ICogYXMgZXZlbnRNb2RlbCBmcm9tICcuL2V2ZW50JztcbmltcG9ydCAqIGFzIHByaWNlVHlwZU1vZGVsIGZyb20gJy4vcHJpY2UtdHlwZSc7XG5pbXBvcnQgKiBhcyByZWdpc3RyYXRpb25Nb2RlbCBmcm9tICcuL3JlZ2lzdHJhdGlvbic7XG5pbXBvcnQgKiBhcyBzdGF0dXNNb2RlbCBmcm9tICcuL3N0YXR1cyc7XG5pbXBvcnQgKiBhcyB0aWNrZXRNb2RlbCBmcm9tICcuL3RpY2tldCc7XG5leHBvcnQge1xuXHRhdHRlbmRlZU1vZGVsLFxuXHRjaGVja0luTW9kZWwsXG5cdGRhdGVUaW1lTW9kZWwsXG5cdGV2ZW50TW9kZWwsXG5cdHByaWNlVHlwZU1vZGVsLFxuXHRyZWdpc3RyYXRpb25Nb2RlbCxcblx0c3RhdHVzTW9kZWwsXG5cdHRpY2tldE1vZGVsLFxufTtcbiIsIlxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAncHJpY2VfdHlwZSc7XG5cbmV4cG9ydCBjb25zdCBCQVNFX1BSSUNFX1RZUEVTID0ge1xuXHRCQVNFX1BSSUNFOiAxLFxuXHRESVNDT1VOVDogMixcblx0U1VSQ0hBUkdFOiAzLFxuXHRUQVg6IDQsXG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRhdGEgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBpc0FycmF5LCByZWR1Y2UsIHRyaW1FbmQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbWVtaXplJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGFzc2VydEVudGl0eUhhc0tleSxcblx0YXNzZXJ0SXNBcnJheSxcblx0YXNzZXJ0SXNOb3RFbXB0eSxcblx0YXNzZXJ0SXNNYXAsXG59IGZyb20gJy4vYXNzZXJ0aW9ucyc7XG5cbi8qKlxuICogRXhwb3NlcyBhIG1hcCBvZiBtb2RlbG5hbWUgdG8gcHJpbWFyeSBrZXkgZXhwb3NlZCBieSB0aGUgZWVqcy5kYXRhIGdsb2JhbFxuICogdmlhIHRoZSBzZXJ2ZXIuXG4gKlxuICogQHR5cGUge3t9fVxuICovXG5leHBvcnQgY29uc3QgeyBwcmltYXJ5X2tleXM6IHByaW1hcnlLZXlzID0ge30gfSA9IGRhdGEucGF0aHM7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5cyBmcm9tIHRoZSBwcm92aWRlZCBlbnRpdHkuXG4gKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHVzZWQgZm9yIG1vZGVscyB0aGF0IGhhdmUgY29tYmluZWQgcHJpbWFyeSBrZXlzXG4gKiAoZGVsaXZlcmVkIGFzIGFuIGFycmF5KS5cbiAqXG4gKiBAdHlwZSB7IG1lbW9pemVkIH1cbiAqIEByZXR1cm4geyBzdHJpbmcgfSBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgdmFsdWVzLlxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9XG4gKi9cbmV4cG9ydCBjb25zdCB2YWx1ZXNGb3JDb21iaW5lZFByaW1hcnlLZXlzID0gbWVtb2l6ZSggKCBrZXlzLCBlbnRpdHkgKSA9PiB7XG5cdGFzc2VydElzQXJyYXkoIGtleXMgKTtcblx0Y29uc3QgcHJpbWFyeUtleSA9IHJlZHVjZSgga2V5cywgZnVuY3Rpb24oIHJlc3VsdCwga2V5ICkge1xuXHRcdGFzc2VydEVudGl0eUhhc0tleSgga2V5LCBlbnRpdHkgKTtcblx0XHRyZXR1cm4gZW50aXR5WyByZXN1bHQgXSArICc6JyArIGVudGl0eVsga2V5IF07XG5cdH0gKTtcblx0cmV0dXJuIHRyaW1FbmQoIHByaW1hcnlLZXksICc6JyApO1xufSApO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5IGZyb20gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAqIFRoaXMgZnVuY3Rpb24gd291bGQgYmUgdXNlZCBmb3IgbW9kZWxzIHRoYXQgaGF2ZSBvbmx5IG9uZSBwcmltYXJ5IGtleS5cbiAqXG4gKiBAdHlwZSB7bWVtb2l6ZWR9XG4gKiBAcmV0dXJuIHsgZnVuY3Rpb24gfSBUaGUgdmFsdWUgZm9yIHRoZSBrZXkgaW4gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfVxuICovXG5leHBvcnQgY29uc3QgdmFsdWVGb3JQcmltYXJ5S2V5ID0gbWVtb2l6ZSggKCBrZXksIGVudGl0eSApID0+IHtcblx0YXNzZXJ0RW50aXR5SGFzS2V5KCBrZXksIGVudGl0eSApO1xuXHRyZXR1cm4gZW50aXR5WyBrZXkgXTtcbn0gKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcmltYXJ5IGtleSAob3IgY29tYmluZWQgcHJpbWFyeSBrZXlzKSBmcm9tIHRoZSBhdmFpbGFibGUgZGF0YS5cbiAqXG4gKiBAdHlwZSB7bWVtb2l6ZWR9XG4gKiBAcmV0dXJuIHsgZnVuY3Rpb24oc3RyaW5nKSB9XG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByaW1hcnlLZXkgPSBtZW1vaXplKCAoIG1vZGVsTmFtZSApID0+IHtcblx0YXNzZXJ0RW50aXR5SGFzS2V5KCBtb2RlbE5hbWUsIHByaW1hcnlLZXlzICk7XG5cdHJldHVybiBwcmltYXJ5S2V5c1sgbW9kZWxOYW1lIF07XG59ICk7XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHN0cmluZyBmb3IgZ2V0dGluZyB0aGUgZW50aXRpZXMgYmVsb25naW5nIHRvIGEgbW9kZWwgZm9yIHRoZVxuICogZ2l2ZW4gcHJpbWFyeSBrZXkgdmFsdWVzXG4gKlxuICogQHR5cGUge21lbW9pemVkfVxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nID0gbWVtb2l6ZShcblx0KCBtb2RlbE5hbWUsIGtleVZhbHVlcyA9IFtdICkgPT4ge1xuXHRcdGNvbnN0IHByaW1hcnlLZXkgPSBnZXRQcmltYXJ5S2V5KCBtb2RlbE5hbWUgKTtcblx0XHRyZXR1cm4gYFskeyBwcmltYXJ5S2V5IH1dW0lOXT1gICsga2V5VmFsdWVzLmpvaW4oKTtcblx0fVxuKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZXMgZm9yIHRoZSBwcmltYXJ5IGtleXMgZnJvbSB0aGUgcHJvdmlkZWQgZW50aXR5LlxuICpcbiAqIEB0eXBlIHttZW1vaXplZH1cbiAqIEByZXR1cm4geyBmdW5jdGlvbiB9ICBJZiB0aGUgbW9kZWwgaGFzIG9ubHkgb25lIHByaW1hcnkga2V5IHRoZW4gdGhlIHZhbHVlIHdpbGxcbiAqIGJlIGEgc2ltcGxlIHN0cmluZy4gIElmIHRoZSBtb2RlbCBoYXMgY29tYmluZWQgcHJpbWFyeSBrZXlzLCB0aGVuIHRoZSB2YWx1ZVxuICogd2lsbCBiZSBhcyBzdHJpbmcgaW4gdGhlIGZvcm1hdCBgJXMuJXNgIGZvciB0aGUgcHJpbWFyeSBrZXkgdmFsdWVzLlxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbnRpdHlQcmltYXJ5S2V5VmFsdWVzID0gbWVtb2l6ZSggKCBtb2RlbE5hbWUsIGVudGl0eSApID0+IHtcblx0Y29uc3Qga2V5cyA9IGdldFByaW1hcnlLZXkoIG1vZGVsTmFtZSApO1xuXHRyZXR1cm4gaXNBcnJheSgga2V5cyApID9cblx0XHR2YWx1ZXNGb3JDb21iaW5lZFByaW1hcnlLZXlzKCBrZXlzLCBlbnRpdHkgKSA6XG5cdFx0dmFsdWVGb3JQcmltYXJ5S2V5KCBrZXlzLCBlbnRpdHkgKTtcbn0gKTtcblxuLyoqXG4gKiBUaGlzIHJlY2VpdmVzIGFuIGFycmF5IG9mIGVudGl0aWVzIGFuZCByZXR1cm5zIGEgY29sbGVjdGlvbiBvZiB0aG9zZSBzYW1lXG4gKiBlbnRpdGllcyBpbmRleGVkIGJ5IHRoZSBwcmltYXJ5IGtleSB2YWx1ZSBmb3IgZWFjaCBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtBcnJheX0gZW50aXRpZXNcbiAqIEByZXR1cm4ge01hcH0gIEEgY29sbGVjdGlvbiBpbmRleGVkIGJ5IHRoZSBwcmltYXJ5IGtleSB2YWx1ZXMgZm9yIGVhY2ggZW50aXR5LlxuICogQHRocm93cyB7RXhjZXB0aW9ufVxuICovXG5leHBvcnQgY29uc3Qga2V5RW50aXRpZXNCeVByaW1hcnlLZXlWYWx1ZSA9ICggbW9kZWxOYW1lLCBlbnRpdGllcyA9IFtdICkgPT4ge1xuXHRhc3NlcnRJc05vdEVtcHR5KFxuXHRcdGVudGl0aWVzLFxuXHRcdF9fKFxuXHRcdFx0J1RoZSBwcm92aWRlZCBhcnJheSBvZiBlbnRpdGllcyBtdXN0IG5vdCBiZSBlbXB0eScsXG5cdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdClcblx0KTtcblx0YXNzZXJ0SXNBcnJheSggZW50aXRpZXMgKTtcblxuXHRjb25zdCBtYXBwZWRFbnRpdGllcyA9IG5ldyBNYXAoKTtcblx0ZW50aXRpZXMuZm9yRWFjaCggKCBlbnRpdHkgKSA9PiB7XG5cdFx0bWFwcGVkRW50aXRpZXMuc2V0KFxuXHRcdFx0Z2V0RW50aXR5UHJpbWFyeUtleVZhbHVlcyggbW9kZWxOYW1lLCBlbnRpdHkgKSxcblx0XHRcdGVudGl0eVxuXHRcdCk7XG5cdH0gKTtcblx0cmV0dXJuIG1hcHBlZEVudGl0aWVzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVudGl0eSBpbnN0YW5jZXMgdXNpbmcgdGhlIGdpdmVuIGZhY3RvcnkgYW5kIGFycmF5XG4gKiBvZiBlbnRpdHkgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBmYWN0b3J5XG4gKiBAcGFyYW0ge01hcH0gZW50aXRpZXNcbiAqIEByZXR1cm4ge01hcH0gIEFuIGFycmF5IG9mIGVudGl0eSBpbnN0YW5jZXMgaW5kZXhlZCBieVxuICogdGhlaXIgcHJpbWFyeSBrZXkgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFuZEtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUgPSAoXG5cdGZhY3RvcnksXG5cdGVudGl0aWVzLFxuKSA9PiB7XG5cdGFzc2VydElzTWFwKFxuXHRcdGVudGl0aWVzLFxuXHRcdF9fKFxuXHRcdFx0J1RoZSBwcm92aWRlZCBvYmplY3Qgb2YgZW50aXRpZXMgbXVzdCBiZSBhIE1hcCBvYmplY3QnLFxuXHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHQpXG5cdCk7XG5cdGVudGl0aWVzLmZvckVhY2goICggZW50aXR5LCBlbnRpdHlJZCApID0+IHtcblx0XHRlbnRpdGllcy5zZXQoIGVudGl0eUlkLCBmYWN0b3J5LmZyb21FeGlzdGluZyggZW50aXR5ICkgKTtcblx0fSApO1xuXHRyZXR1cm4gZW50aXRpZXM7XG59O1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBJbXBvcnRzXG4gKi9cbmltcG9ydCAqIGFzIHN0YXR1c01vZGVsIGZyb20gJy4uL3N0YXR1cy9jb25zdGFudHMnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAncmVnaXN0cmF0aW9uJztcblxuZXhwb3J0IGNvbnN0IFJFR0lTVFJBVElPTl9TVEFUVVNfSURTID0gdmFsdWVzKFxuXHRzdGF0dXNNb2RlbC5SRUdJU1RSQVRJT05fU1RBVFVTX0lEXG4pO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNVbmRlZmluZWQsIHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcbn0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgKiBhcyBzdGF0dXNNb2RlbCBmcm9tICcuLi9zdGF0dXMvY29uc3RhbnRzJztcblxuLyoqXG4gKiBEZXNjcmliZWQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge3thdHRyaWJ1dGVzOiAqfX1cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5RGF0YVR5cGVzID0ge1xuXHRmb3JFdmVudElkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JBdHRlbmRlZUlkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JUcmFuc2FjdGlvbklkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JUaWNrZXRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yU3RhdHVzSWQ6IFByb3BUeXBlcy5vbmVPZiggdmFsdWVzKCBzdGF0dXNNb2RlbC5SRUdJU1RSQVRJT05fU1RBVFVTX0lEICkgKSxcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdSRUdfSUQnLFxuXHRcdFx0J1JFR19kYXRlJyxcblx0XHRdICksXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0fSApLFxufTtcblxuZXhwb3J0IGNvbnN0IG9wdGlvbnNFbnRpdHlNYXAgPSB7XG5cdGRlZmF1bHQ6IHtcblx0XHR2YWx1ZTogJ1JFR19JRCcsXG5cdFx0bGFiZWw6ICdSRUdfY29kZScsXG5cdH0sXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdyZWdfZGF0ZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYSByZWdpc3RyYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHJlZ19pZDogJ1JFR19JRCcsXG5cdFx0cmVnX2RhdGU6ICdSRUdfZGF0ZScsXG5cdH07XG5cdHJldHVybiBpc1VuZGVmaW5lZCggb3JkZXJCeU1hcFsgb3JkZXJCeSBdICkgP1xuXHRcdG9yZGVyQnkgOlxuXHRcdG9yZGVyQnlNYXBbIG9yZGVyQnkgXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHdoZXJlIGNvbmRpdGlvbnMgZm9yIGFuIHJlZ2lzdHJhdGlvbnMgZW5kcG9pbnQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JFdmVudElkICAgIFx0SUQgb2YgRXZlbnQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JBdHRlbmRlZUlkICAgIElEIG9mIEF0dGVuZGVlIHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yVHJhbnNhY3Rpb25JZCBJRCBvZiBUcmFuc2FjdGlvbiB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclRpY2tldElkIFx0XHRJRCBvZiBUaWNrZXQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JTdGF0dXNJZCBcdFx0SUQgb2YgU3RhdHVzIHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgIFx0VGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdGZvckV2ZW50SWQgPSAwLFxuXHRmb3JBdHRlbmRlZUlkID0gMCxcblx0Zm9yVHJhbnNhY3Rpb25JZCA9IDAsXG5cdGZvclRpY2tldElkID0gMCxcblx0Zm9yU3RhdHVzSWQgPSAnJyxcbn0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGZvckV2ZW50SWQgPSBwYXJzZUludCggZm9yRXZlbnRJZCwgMTAgKTtcblx0aWYgKCBmb3JFdmVudElkICE9PSAwICYmICEgaXNOYU4oIGZvckV2ZW50SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRVZUX0lEXT0nICsgZm9yRXZlbnRJZCApO1xuXHR9XG5cdGZvckF0dGVuZGVlSWQgPSBwYXJzZUludCggZm9yQXR0ZW5kZWVJZCwgMTAgKTtcblx0aWYgKCBmb3JBdHRlbmRlZUlkICE9PSAwICYmICEgaXNOYU4oIGZvckF0dGVuZGVlSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbQVRUX0lEXT0nICsgZm9yQXR0ZW5kZWVJZCApO1xuXHR9XG5cdGZvclRyYW5zYWN0aW9uSWQgPSBwYXJzZUludCggZm9yVHJhbnNhY3Rpb25JZCwgMTAgKTtcblx0aWYgKCBmb3JUcmFuc2FjdGlvbklkICE9PSAwICYmICEgaXNOYU4oIGZvclRyYW5zYWN0aW9uSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbVFhOX0lEXT0nICsgZm9yVHJhbnNhY3Rpb25JZCApO1xuXHR9XG5cdGZvclRpY2tldElkID0gcGFyc2VJbnQoIGZvclRpY2tldElkLCAxMCApO1xuXHRpZiAoIGZvclRpY2tldElkICE9PSAwICYmICEgaXNOYU4oIGZvclRpY2tldElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1RLVF9JRF09JyArIGZvclRpY2tldElkICk7XG5cdH1cblx0aWYgKCBmb3JTdGF0dXNJZCAhPT0gJycgJiYgZm9yU3RhdHVzSWQgIT09IG51bGwgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1NUU19JRF09JyArIGZvclN0YXR1c0lkICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAnc3RhdHVzJztcbi8vIHR5cGVzXG5leHBvcnQgY29uc3QgU1RBVFVTX1RZUEVfRU1BSUwgPSAnZW1haWwnO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX0VWRU5UID0gJ2V2ZW50JztcbmV4cG9ydCBjb25zdCBTVEFUVVNfVFlQRV9NRVNTQUdFID0gJ21lc3NhZ2UnO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX1BBWU1FTlQgPSAncGF5bWVudCc7XG5leHBvcnQgY29uc3QgU1RBVFVTX1RZUEVfUkVHSVNUUkFUSU9OID0gJ3JlZ2lzdHJhdGlvbic7XG5leHBvcnQgY29uc3QgU1RBVFVTX1RZUEVfVFJBTlNBQ1RJT04gPSAndHJhbnNhY3Rpb24nO1xuLy8gZW1haWxcbmV4cG9ydCBjb25zdCBFTUFJTF9TVEFUVVNfSUQgPSB7XG5cdERSQUZUOiAnRURSJyxcblx0U0VOVDogJ0VTTicsXG5cdEVYUElSRUQ6ICdFWFAnLFxufTtcbi8vIGV2ZW50XG5leHBvcnQgY29uc3QgRVZFTlRfU1RBVFVTX0lEID0ge1xuXHRBQ1RJVkU6ICdBQ1QnLFxuXHRSRUdJU1RSQVRJT05fQ0xPU0VEOiAnQ0xTJyxcblx0REVMRVRFRDogJ0RFTCcsXG5cdERFTklFRDogJ0RFTicsXG5cdERSQUZUOiAnRFJGJyxcblx0Tk9UX0FDVElWRTogJ05BQycsXG5cdE5PVF9PUEVOOiAnTk9QJyxcblx0T05HT0lORzogJ09ORycsXG5cdFJFR0lTVFJBVElPTl9PUEVOOiAnT1BOJyxcblx0UEVORElORzogJ1BORCcsXG5cdFNFQ09OREFSWTogJ1NFQycsXG59O1xuLy8gbWVzc2FnZVxuZXhwb3J0IGNvbnN0IE1FU1NBR0VfU1RBVFVTX0lEID0ge1xuXHRERUJVRzogJ01ETycsXG5cdEVYRUNVVElORzogJ01FWCcsXG5cdEZBSUw6ICdNRkwnLFxuXHRJTkNPTVBMRVRFOiAnTUlDJyxcblx0SURMRTogJ01JRCcsXG5cdFJFU0VORDogJ01SUycsXG5cdFJFVFJZOiAnTVJUJyxcblx0U0VOVDogJ01TTicsXG59O1xuLy8gcGF5bWVudFxuZXhwb3J0IGNvbnN0IFBBWU1FTlRfU1RBVFVTX0lEID0ge1xuXHRBUFBST1ZFRDogJ1BBUCcsXG5cdENBTkNFTExFRDogJ1BDTicsXG5cdERFQ0xJTkVEOiAnUERDJyxcblx0RkFJTEVEOiAnUEZMJyxcblx0UEVORElORzogJ1BQTicsXG59O1xuLy8gcmVnaXN0cmF0aW9uXG5leHBvcnQgY29uc3QgUkVHSVNUUkFUSU9OX1NUQVRVU19JRCA9IHtcblx0QVBQUk9WRUQ6ICdSQVAnLFxuXHRDQU5DRUxMRUQ6ICdSQ04nLFxuXHRERUNMSU5FRDogJ1JEQycsXG5cdElOQ09NUExFVEU6ICdSSUMnLFxuXHROT1RfQVBQUk9WRUQ6ICdSTkEnLFxuXHRQRU5ESU5HX1BBWU1FTlQ6ICdSUFAnLFxuXHRXQUlUX0xJU1Q6ICdSV0wnLFxufTtcbi8vIHRyYW5zYWN0aW9uXG5leHBvcnQgY29uc3QgVFJBTlNBQ1RJT05fU1RBVFVTX0lEID0ge1xuXHRBQkFORE9ORUQ6ICdUQUInLFxuXHRDT01QTEVURTogJ1RDTScsXG5cdEZBSUxFRDogJ1RGTCcsXG5cdElOQ09NUExFVEU6ICdUSU4nLFxuXHRPVkVSUEFJRDogJ1RPUCcsXG59O1xuXG4vLyB0aGUgZm9sbG93aW5nIGFyZSBub3QgaW4gdGhlIHN0YXR1cyBkYXRhYmFzZSBidXQgYXJlIGtlcHQgaGVyZSBmb3Jcbi8vIGNvbnZlbmllbmNlXG5cbi8vIGN1c3RvbSBwb3N0IHR5cGVzXG5leHBvcnQgY29uc3QgQ1BUX1NUQVRVU19JRCA9IHtcblx0UFVCTElTSDogJ3B1Ymxpc2gnLFxuXHRGVVRVUkU6ICdmdXR1cmUnLFxuXHREUkFGVDogJ2RyYWZ0Jyxcblx0UEVORElORzogJ3BlbmRpbmcnLFxuXHRQUklWQVRFOiAncHJpdmF0ZScsXG5cdFRSQVNIRUQ6ICd0cmFzaCcsXG59O1xuXG5leHBvcnQgY29uc3QgVU5LTk9XTl9TVEFUVVNfSUQgPSAndW5rbm93bic7XG5cbmV4cG9ydCBjb25zdCBBTExfU1RBVFVTX0lEUyA9IFtcblx0Li4udmFsdWVzKCBFTUFJTF9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBFVkVOVF9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBNRVNTQUdFX1NUQVRVU19JRCApLFxuXHQuLi52YWx1ZXMoIFBBWU1FTlRfU1RBVFVTX0lEICksXG5cdC4uLnZhbHVlcyggUkVHSVNUUkFUSU9OX1NUQVRVU19JRCApLFxuXHQuLi52YWx1ZXMoIFRSQU5TQUNUSU9OX1NUQVRVU19JRCApLFxuXHQuLi52YWx1ZXMoIENQVF9TVEFUVVNfSUQgKSxcblx0VU5LTk9XTl9TVEFUVVNfSUQsXG5dO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAqIGFzIHN0YXR1cyBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFVkVOVF9TVEFUVVNfSUQgfSBmcm9tICcuLi9ldmVudCc7XG5pbXBvcnQgeyBUSUNLRVRfU1RBVFVTX0lEIH0gZnJvbSAnLi4vdGlja2V0JztcbmltcG9ydCB7IERBVEVUSU1FX1NUQVRVU19JRCB9IGZyb20gJy4uL2RhdGV0aW1lJztcbmltcG9ydCB7IENIRUNLSU5fU1RBVFVTX0lEIH0gZnJvbSAnLi4vY2hlY2tpbic7XG5cbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgUmVnaXN0cmF0aW9uIHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfUkVHSVNUUkFUSU9OID0ge1xuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELlBFTkRJTkdfUEFZTUVOVCBdOiBuZXcgTGFiZWwoXG5cdFx0X18oICdwZW5kaW5nIHBheW1lbnQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0X18oICdwZW5kaW5nIHBheW1lbnRzJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlJFR0lTVFJBVElPTl9TVEFUVVNfSUQuQVBQUk9WRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhcHByb3ZlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELk5PVF9BUFBST1ZFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ25vdCBhcHByb3ZlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELkNBTkNFTExFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2NhbmNlbGxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELklOQ09NUExFVEUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdpbmNvbXBsZXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlJFR0lTVFJBVElPTl9TVEFUVVNfSUQuREVDTElORUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdkZWNsaW5lZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELldBSVRfTElTVCBdOiBuZXcgTGFiZWwoXG5cdFx0X18oICd3YWl0IGxpc3QnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0X18oICd3YWl0IGxpc3RzJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgVHJhbnNhY3Rpb24gc3RhdHVzZXNcbiAqIEB0eXBlIHt7fX1cbiAqXG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfVFJBTlNBQ1RJT04gPSB7XG5cdFsgc3RhdHVzLlRSQU5TQUNUSU9OX1NUQVRVU19JRC5PVkVSUEFJRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ292ZXJwYWlkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlRSQU5TQUNUSU9OX1NUQVRVU19JRC5DT01QTEVURSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2NvbXBsZXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlRSQU5TQUNUSU9OX1NUQVRVU19JRC5JTkNPTVBMRVRFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnaW5jb21wbGV0ZScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuRkFJTEVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZmFpbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlRSQU5TQUNUSU9OX1NUQVRVU19JRC5BQkFORE9ORUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhYmFuZG9uZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gbWFwIGZvciBwYXltZW50IHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfUEFZTUVOVCA9IHtcblx0WyBzdGF0dXMuUEFZTUVOVF9TVEFUVVNfSUQuQVBQUk9WRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhY2NlcHRlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5QQVlNRU5UX1NUQVRVU19JRC5QRU5ESU5HIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncGVuZGluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5QQVlNRU5UX1NUQVRVU19JRC5DQU5DRUxMRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdjYW5jZWxsZWQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdCksXG5cdFsgc3RhdHVzLlBBWU1FTlRfU1RBVFVTX0lELkRFQ0xJTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZGVjbGluZWQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdCksXG5cdFsgc3RhdHVzLlBBWU1FTlRfU1RBVFVTX0lELkZBSUxFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2ZhaWxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIE1lc3NhZ2Ugc3RhdHVzZXNcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9NRVNTQUdFID0ge1xuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5TRU5UIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnc2VudCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5JRExFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncXVldWVkIGZvciBzZW5kaW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELkZBSUwgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdmYWlsZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuREVCVUcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdkZWJ1ZyBvbmx5JywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELkVYRUNVVElORyBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ21lc3NlbmdlciBpcyBleGVjdXRpbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuUkVTRU5EIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncXVldWVkIGZvciByZXNlbmRpbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuSU5DT01QTEVURSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3F1ZXVlZCBmb3IgZ2VuZXJhdGluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5SRVRSWSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2ZhaWxlZCBzZW5kaW5nLCBjYW4gYmUgcmV0cmllZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIENQVCBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0NQVCA9IHtcblx0WyBzdGF0dXMuQ1BUX1NUQVRVU19JRC5QVUJMSVNIIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncHVibGlzaGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuRlVUVVJFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnc2NoZWR1bGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuRFJBRlQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdkcmFmdCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5DUFRfU1RBVFVTX0lELlBFTkRJTkcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdwZW5kaW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuUFJJVkFURSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3ByaXZhdGUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuQ1BUX1NUQVRVU19JRC5UUkFTSEVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAndHJhc2hlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLy8gdGhlIGZvbGxvd2luZyBzdGF0dXMgbWFwcyBhcmUgZm9yIG1vZGVsIHN0YXR1c2VzIHRoYXQgYXJlIG5vdCBzYXZlZCBpbiB0aGVcbi8vIHN0YXR1cyB0YWJsZSBidXQgZm9yIGNvbnZlbmllbmNlIGhhdmUgdGhlaXIgbGFiZWxzIHJldHJpZXZhYmxlIHZpYSBoZXJlLlxuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgRXZlbnQgU3RhdHVzZXNcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9FVkVOVCA9IHtcblx0WyBFVkVOVF9TVEFUVVNfSUQuU09MRF9PVVQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdzb2xkIG91dCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIEVWRU5UX1NUQVRVU19JRC5QT1NUUE9ORUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdwb3N0cG9uZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBFVkVOVF9TVEFUVVNfSUQuQ0FOQ0VMTEVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnY2FuY2VsbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgVGlja2V0IHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfVElDS0VUID0ge1xuXHRbIFRJQ0tFVF9TVEFUVVNfSUQuQVJDSElWRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhcmNoaXZlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIFRJQ0tFVF9TVEFUVVNfSUQuRVhQSVJFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2V4cGlyZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBUSUNLRVRfU1RBVFVTX0lELlNPTERfT1VUIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnc29sZCBvdXQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBUSUNLRVRfU1RBVFVTX0lELlBFTkRJTkcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICd1cGNvbWluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIFRJQ0tFVF9TVEFUVVNfSUQuT05TQUxFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnb24gc2FsZScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIGRhdGV0aW1lIHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfREFURVRJTUUgPSB7XG5cdFsgREFURVRJTUVfU1RBVFVTX0lELkNBTkNFTExFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2NhbmNlbGxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5TT0xEX09VVCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3NvbGQgb3V0JywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgREFURVRJTUVfU1RBVFVTX0lELkVYUElSRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdleHBpcmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgREFURVRJTUVfU1RBVFVTX0lELklOQUNUSVZFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnaW5hY3RpdmUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBEQVRFVElNRV9TVEFUVVNfSUQuVVBDT01JTkcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICd1cGNvbWluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5BQ1RJVkUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhY3RpdmUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBEQVRFVElNRV9TVEFUVVNfSUQuUE9TVFBPTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncG9zdHBvbmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgY2hlY2tpbiBzdGF0dXNlc1xuICpcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DSEVDS0lOID0ge1xuXHRbIENIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX0lOIF06IG5ldyBMYWJlbChcblx0XHRfXyggJ2NoZWNrLWluJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdF9fKCAnY2hlY2staW5zJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfT1VUIF06IG5ldyBMYWJlbChcblx0XHRfXyggJ2NoZWNrLW91dCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRfXyggJ2NoZWNrLW91dHMnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBDSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9ORVZFUiBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ25ldmVyIGNoZWNrZWQgaW4nLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogQ29tYmluZWQgdHJhbnNsYXRpb24gbWFwIGZvciBhbGwgc3RhdHVzZXMuXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMID0ge1xuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX1JFR0lTVFJBVElPTixcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9UUkFOU0FDVElPTixcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9QQVlNRU5ULFxuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX01FU1NBR0UsXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ1BULFxuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX0VWRU5ULFxuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RJQ0tFVCxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9EQVRFVElNRSxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DSEVDS0lOLFxuXHRbIHN0YXR1cy5VTktOT1dOX1NUQVRVU19JRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3Vua25vd24nLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJldHR5IHN0YXR1cyBsYWJlbCBzdHJpbmcgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1c0NvZGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2luZ3VsYXIgIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSBzaW5ndWxhciBvciBwbHVyYWwgbGFiZWxcbiAqIHZhbHVlXG4gKiBAcGFyYW0geyhzZW50ZW5jZXxsb3dlcnx1cHBlcil9IHNjaGVtYVxuICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtYXBwZWQgcHJldHR5IGxhYmVsIGZvciB0aGUgZ2l2ZW4gc3RhdHVzIGNvZGUgb3JcbiAqIGEgZm9ybWF0dGVkICd1bmtvd24nIHN0cmluZyBpZiB0aGVyZSBpcyBubyBtYXBwZWQgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgcHJldHR5U3RhdHVzID0gKFxuXHRzdGF0dXNDb2RlLFxuXHRzaW5ndWxhciA9IHRydWUsXG5cdHNjaGVtYSA9IExhYmVsLkZPUk1BVF9TRU5URU5DRV9DQVNFXG4pID0+IHtcblx0cmV0dXJuIFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMWyBzdGF0dXNDb2RlIF0gP1xuXHRcdFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMWyBzdGF0dXNDb2RlIF0uYXNGb3JtYXR0ZWQoIHNpbmd1bGFyLCBzY2hlbWEgKSA6XG5cdFx0U1RBVFVTX1RSQU5TTEFUSU9OX01BUF9BTExbIHN0YXR1cy5VTktOT1dOX1NUQVRVU19JRCBdLmFzRm9ybWF0dGVkKFxuXHRcdFx0c2luZ3VsYXIsXG5cdFx0XHRzY2hlbWFcblx0XHQpO1xufTtcblxuLyoqXG4gKiBFeHBlY3RzIGFuIGFycmF5IG9mIHN0YXR1cyBjb2RlcyBhbmQgcmV0dXJucyBhbiBvYmplY3QgaW5kZXhlZCBieSBjb2RlcyB3aXRoXG4gKiB2YWx1ZXMgYmVpbmcgdGhlIGZvcm1hdHRlZCBwcmV0dHkgbGFiZWxzIGZvciBlYWNoIGNvZGUgYWNjb3JkaW5nIHRvIHRoZVxuICogcHJvdmlkZWQgYXJndW1lbnRzXG4gKlxuICogQHBhcmFtIHtBcnJheX0gc3RhdHVzQ29kZXNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2luZ3VsYXJcbiAqIEBwYXJhbSB7KHNlbnRlbmNlfGxvd2VyfHVwcGVyKX0gc2NoZW1hXG4gKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCBtYXBwaW5nIHN0YXR1cyBjb2RlIHRvIHByZXR0eSBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZXR0eVN0YXR1c2VzID0gKFxuXHRzdGF0dXNDb2Rlcyxcblx0c2luZ3VsYXIgPSB0cnVlLFxuXHRzY2hlbWEgPSBMYWJlbC5GT1JNQVRfU0VOVEVOQ0VfQ0FTRVxuKSA9PiB7XG5cdGlmICggISBpc0FycmF5KCBzdGF0dXNDb2RlcyApICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoICdFeHBlY3QgaW5jb21pbmcgc3RhdHVzQ29kZXMgYXJndW1lbnQnICtcblx0XHRcdCcgdG8gYmUgYW4gYXJyYXknICk7XG5cdH1cblx0Y29uc3QgbWFwcGVkU3RhdHVzZXMgPSB7fTtcblx0c3RhdHVzQ29kZXMuZm9yRWFjaCggKCBzdGF0dXNDb2RlICkgPT4ge1xuXHRcdG1hcHBlZFN0YXR1c2VzWyBzdGF0dXNDb2RlIF0gPSBwcmV0dHlTdGF0dXMoXG5cdFx0XHRzdGF0dXNDb2RlLFxuXHRcdFx0c2luZ3VsYXIsXG5cdFx0XHRzY2hlbWFcblx0XHQpO1xuXHR9ICk7XG5cdHJldHVybiBtYXBwZWRTdGF0dXNlcztcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycyc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9BU0MsXG5cdEFMTE9XRURfT1JERVJfVkFMVUVTLFxufSBmcm9tICcuLi9iYXNlJztcblxuLyoqXG4gKiBEZXNjcmliZWQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge3thdHRyaWJ1dGVzOiAqfX1cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5RGF0YVR5cGVzID0ge1xuXHRxdWVyeURhdGE6IFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdGxpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdG9yZGVyQnk6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0fSApLFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHtcbiAqIFx0e1xuICogXHRcdGF0dHJpYnV0ZXM6IHtcbiAqIFx0XHRcdGxpbWl0OiBudW1iZXIsXG4gKiBcdFx0XHRvcmRlckJ5OiBzdHJpbmcsXG4gKiBcdFx0XHRvcmRlcjogc3RyaW5nLFxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDI1LFxuXHRcdG9yZGVyQnk6ICdzdGF0dXNDb2RlJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfQVNDLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGFuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRzdGF0dXNDb2RlOiAnU1RTX2NvZGUnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiBldmVudHMgZW5kcG9pbnQgcmVxdWVzdCB1c2luZyBwcm92aWRlZFxuICogaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c1R5cGUgXHRJRCBmb3IgdHlwZSBvZiBTdGF0dXMgdG8gcmV0cmlldmVcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgVGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7IHN0YXR1c1R5cGUgfSApID0+IHtcblx0Y29uc3Qgd2hlcmUgPSBbXTtcblx0aWYgKCBzdGF0dXNUeXBlICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtTVFNfdHlwZV09JyArIHN0YXR1c1R5cGUgKTtcblx0fVxuXHRyZXR1cm4gd2hlcmUuam9pbiggJyYnICk7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIHF1ZXJ5IHN0cmluZyBmb3IgdXNlIGJ5IGEgUkVTVCByZXF1ZXN0IGdpdmVuIGEgc2V0IG9mIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IE9iamVjdCB9IHF1ZXJ5RGF0YVxuICogQHJldHVybiB7IHN0cmluZyB9ICBSZXR1cm5zIHRoZSBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVN0cmluZyA9ICggcXVlcnlEYXRhID0ge30gKSA9PiB7XG5cdHF1ZXJ5RGF0YSA9IHsgLi4uZGVmYXVsdFF1ZXJ5RGF0YS5xdWVyeURhdGEsIC4uLnF1ZXJ5RGF0YSB9O1xuXHRyZXR1cm4gYmFzZUdldFF1ZXJ5U3RyaW5nKCBxdWVyeURhdGEsIHdoZXJlQ29uZGl0aW9ucywgbWFwT3JkZXJCeSApO1xufTtcblxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ3RpY2tldCc7XG5cbmV4cG9ydCBjb25zdCBUSUNLRVRfU1RBVFVTX0lEID0ge1xuXHRTT0xEX09VVDogJ1RLUycsXG5cdEVYUElSRUQ6ICdUS0UnLFxuXHRBUkNISVZFRDogJ1RLQScsXG5cdFBFTkRJTkc6ICdUS1AnLFxuXHRPTlNBTEU6ICdUS08nLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJQ0tFVF9TVEFUVVNfSURTID0gdmFsdWVzKCBUSUNLRVRfU1RBVFVTX0lEICk7XG4iLCJleHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdHVzLWhlbHBlcic7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcblx0R1JFQVRFUl9USEFOLFxuXHRHUkVBVEVSX1RIQU5fQU5EX0VRVUFMLFxuXHRMRVNTX1RIQU5fQU5EX0VRVUFMLFxufSBmcm9tICcuLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IG5vd0RhdGVBbmRUaW1lID0gbW9tZW50KCk7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdUS1RfbmFtZScsXG5cdFx0XHQnVEtUX0lEJyxcblx0XHRcdCdzdGFydF9kYXRlJyxcblx0XHRcdCdlbmRfZGF0ZScsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdFx0c2hvd0V4cGlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXHRcdG1vbnRoOiBQcm9wVHlwZXMubW9udGgsXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHRcdHNob3dFeHBpcmVkOiBib29sZWFuXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdzdGFydF9kYXRlJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfREVTQyxcblx0XHRzaG93RXhwaXJlZDogZmFsc2UsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYSB0aWNrZXQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHN0YXJ0X2RhdGU6ICdUS1Rfc3RhcnRfZGF0ZScsXG5cdFx0ZW5kX2RhdGU6ICdUS1RfZW5kX2RhdGUnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiB0aWNrZXRzIGVuZHBvaW50IHJlcXVlc3QgdXNpbmcgcHJvdmlkZWRcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd0V4cGlyZWQgXHRXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGV4cGlyZWQgdGlja2V0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb250aCAgICAgICAgICAgIFJldHVybiB0aWNrZXRzIGZvciB0aGUgZ2l2ZW4gbW9udGguIENhbiBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0aW4gYW55IG1vbnRoIGZvcm1hdCByZWNvZ25pemVkIGJ5IG1vbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGZvckV2ZW50SWQgICAgXHRJRCBvZiBFdmVudCB0byByZXRyaWV2ZSB0aWNrZXRzIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvckRhdGV0aW1lSWQgICAgSUQgb2YgRGF0ZXRpbWUgdG8gcmV0cmlldmUgdGlja2V0cyBmb3JcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAgXHRUaGUgYXNzZW1ibGVkIHdoZXJlIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCB3aGVyZUNvbmRpdGlvbnMgPSAoIHtcblx0Zm9yRXZlbnRJZCA9IDAsXG5cdGZvckRhdGV0aW1lSWQgPSAwLFxuXHRzaG93RXhwaXJlZCA9IGZhbHNlLFxuXHRtb250aCA9ICdub25lJyxcbn0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGlmICggISBzaG93RXhwaXJlZCApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW1RLVF9lbmRfZGF0ZSoqZXhwaXJlZF1bXT0nICsgR1JFQVRFUl9USEFOICtcblx0XHRcdCcmd2hlcmVbVEtUX2VuZF9kYXRlKipleHBpcmVkXVtdPScgK1xuXHRcdFx0bm93RGF0ZUFuZFRpbWUubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0aWYgKCBtb250aCAmJiBtb250aCAhPT0gJ25vbmUnICkge1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbVEtUX3N0YXJ0X2RhdGVdW109JyArIEdSRUFURVJfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtUS1Rfc3RhcnRfZGF0ZV1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLnN0YXJ0T2YoICdtb250aCcgKS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW1RLVF9lbmRfZGF0ZV1bXT0nICsgTEVTU19USEFOX0FORF9FUVVBTCArXG5cdFx0XHQnJndoZXJlW1RLVF9lbmRfZGF0ZV1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLmVuZE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0Zm9yRXZlbnRJZCA9IHBhcnNlSW50KCBmb3JFdmVudElkLCAxMCApO1xuXHRpZiAoIGZvckV2ZW50SWQgIT09IDAgJiYgISBpc05hTiggZm9yRXZlbnRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtEYXRldGltZS5FdmVudC5FVlRfSURdPScgKyBmb3JFdmVudElkICk7XG5cdH1cblx0Zm9yRGF0ZXRpbWVJZCA9IHBhcnNlSW50KCBmb3JEYXRldGltZUlkLCAxMCApO1xuXHRpZiAoIGZvckRhdGV0aW1lSWQgIT09IDAgJiYgISBpc05hTiggZm9yRGF0ZXRpbWVJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtEYXRldGltZS5EVFRfSURdPScgKyBmb3JEYXRldGltZUlkICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBNT0RFTF9OQU1FLCBUSUNLRVRfU1RBVFVTX0lEIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn1cbiAqL1xuY29uc3QgYXNzZXJ0VGlja2V0RW50aXR5ID0gKCBUaWNrZXRFbnRpdHkgKSA9PiB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggVGlja2V0RW50aXR5LCBNT0RFTF9OQU1FICkgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdCdUaGUgcHJvdmlkZWQgZW50aXR5IGlzIG5vdCBhIHRpY2tldCBpbnN0YW5jZSdcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUFyY2hpdmVkIGlmIHRydWUgd2lsbCBub3QgZmlsdGVyIG91dCB0cmFzaGVkIGVudGl0aWVzXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGV2ZW50IGRhdGUgaXMgdmFsaWQgZW50aXR5IG9yIGFyY2hpdmVcbiAqL1xuY29uc3QgaXNWYWxpZEVudGl0eU9yQXJjaGl2ZSA9ICggVGlja2V0RW50aXR5LCBpbmNsdWRlQXJjaGl2ZWQgKSA9PiB7XG5cdHJldHVybiAoIGluY2x1ZGVBcmNoaXZlZCAmJiBhc3NlcnRUaWNrZXRFbnRpdHkoIFRpY2tldEVudGl0eSApICkgfHxcbiAgICAgICAgKCAhIGluY2x1ZGVBcmNoaXZlZCAmJiAhIGlzQXJjaGl2ZWQoIFRpY2tldEVudGl0eSApICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUFyY2hpdmVkIGlmIHRydWUgd2lsbCBub3QgZmlsdGVyIG91dCBhcmNoaXZlZCBlbnRpdGllc1xuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aWNrZXQgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgcHVyY2hhc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzT25TYWxlID0gKCBUaWNrZXRFbnRpdHksIGluY2x1ZGVBcmNoaXZlZCA9IGZhbHNlICkgPT4ge1xuXHRyZXR1cm4gaXNWYWxpZEVudGl0eU9yQXJjaGl2ZSggVGlja2V0RW50aXR5LCBpbmNsdWRlQXJjaGl2ZWQgKSAmJlxuXHRUaWNrZXRFbnRpdHkuc3RhcnREYXRlLmRpZmZOb3coKSA8IDAgJiZcblx0VGlja2V0RW50aXR5LmVuZERhdGUuZGlmZk5vdygpID4gMDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlQXJjaGl2ZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IGFyY2hpdmVkIGVudGl0aWVzXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldCBjYW4gbm8gbG9uZ2VyIGJlIHB1cmNoYXNlZFxuICovXG5leHBvcnQgY29uc3QgaXNFeHBpcmVkID0gKCBUaWNrZXRFbnRpdHksIGluY2x1ZGVBcmNoaXZlZCA9IGZhbHNlICkgPT4ge1xuXHRyZXR1cm4gaXNWYWxpZEVudGl0eU9yQXJjaGl2ZSggVGlja2V0RW50aXR5LCBpbmNsdWRlQXJjaGl2ZWQgKSAmJlxuXHRUaWNrZXRFbnRpdHkuZW5kRGF0ZS5kaWZmTm93KCkgPCAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVBcmNoaXZlZCBpZiB0cnVlIHdpbGwgbm90IGZpbHRlciBvdXQgYXJjaGl2ZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGlja2V0cyBzb2xkIG1lZXRzIG9yIGV4Y2VlZHMgYXZhaWxhYmxlIHF1YW50aXR5XG4gKi9cbmV4cG9ydCBjb25zdCBpc1NvbGRPdXQgPSAoIFRpY2tldEVudGl0eSwgaW5jbHVkZUFyY2hpdmVkID0gZmFsc2UgKSA9PiB7XG5cdGlmIChcblx0XHQoIGluY2x1ZGVBcmNoaXZlZCAmJiAhIGFzc2VydFRpY2tldEVudGl0eSggVGlja2V0RW50aXR5ICkgKSB8fFxuXHRcdCggISBpbmNsdWRlQXJjaGl2ZWQgJiYgaXNBcmNoaXZlZCggVGlja2V0RW50aXR5ICkgKVxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Y29uc3QgcXR5ID0gVGlja2V0RW50aXR5LnF0eTtcblx0cmV0dXJuICggcXR5ICE9PSBudWxsICYmIHF0eSAhPT0gJ0lORicgJiYgcXR5ICE9PSBJbmZpbml0eSAmJiBxdHkgIT09IC0xICkgJiZcblx0XHRUaWNrZXRFbnRpdHkuc29sZCA+PSBxdHk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUFyY2hpdmVkIGlmIHRydWUgd2lsbCBub3QgZmlsdGVyIG91dCBhcmNoaXZlZCBlbnRpdGllc1xuICogQHJldHVybiB7Ym9vbGVhbn0gXHR0cnVlIGlmIHRpY2tldCBpcyBub3QgeWV0IGF2YWlsYWJsZSBmb3IgcHVyY2hhc2UsXG4gKiBcdFx0XHRcdFx0XHRidXQgd2lsbCBiZSBhdCBzb21lIGRhdGUgaW4gdGhlIGZ1dHVyZVxuICovXG5leHBvcnQgY29uc3QgaXNQZW5kaW5nID0gKCBUaWNrZXRFbnRpdHksIGluY2x1ZGVBcmNoaXZlZCA9IGZhbHNlICkgPT4ge1xuXHRyZXR1cm4gaXNWYWxpZEVudGl0eU9yQXJjaGl2ZSggVGlja2V0RW50aXR5LCBpbmNsdWRlQXJjaGl2ZWQgKSAmJlxuXHRUaWNrZXRFbnRpdHkuc3RhcnREYXRlLmRpZmZOb3coKSA+IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGlja2V0IGlzIGFyY2hpdmVkXG4gKi9cbmV4cG9ydCBjb25zdCBpc0FyY2hpdmVkID0gKCBUaWNrZXRFbnRpdHkgKSA9PiB7XG5cdGFzc2VydFRpY2tldEVudGl0eSggVGlja2V0RW50aXR5ICk7XG5cdHJldHVybiBUaWNrZXRFbnRpdHkuZGVsZXRlZDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSBzdGF0dXMgSURcbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXR1cyA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRpZiAoIGlzQXJjaGl2ZWQoIFRpY2tldEVudGl0eSApICkge1xuXHRcdHJldHVybiBUSUNLRVRfU1RBVFVTX0lELkFSQ0hJVkVEO1xuXHR9XG5cdGlmICggaXNTb2xkT3V0KCBUaWNrZXRFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gVElDS0VUX1NUQVRVU19JRC5TT0xEX09VVDtcblx0fVxuXHRpZiAoIGlzRXhwaXJlZCggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIFRJQ0tFVF9TVEFUVVNfSUQuRVhQSVJFRDtcblx0fVxuXHRpZiAoIGlzUGVuZGluZyggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIFRJQ0tFVF9TVEFUVVNfSUQuUEVORElORztcblx0fVxuXHRpZiAoIGlzT25TYWxlKCBUaWNrZXRFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gVElDS0VUX1NUQVRVU19JRC5PTlNBTEU7XG5cdH1cblx0cmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRpY2tldCBzdGF0dXNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRpY2tldFN0YXR1c1RleHRMYWJlbCA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRsZXQgdGlja2V0U3RhdHVzID0gJyc7XG5cdHN3aXRjaCAoIHN0YXR1cyggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0Y2FzZSBUSUNLRVRfU1RBVFVTX0lELlNPTERfT1VUIDpcblx0XHRcdHRpY2tldFN0YXR1cyA9IF9fKCAnc29sZCBvdXQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRJQ0tFVF9TVEFUVVNfSUQuRVhQSVJFRCA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ2V4cGlyZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRJQ0tFVF9TVEFUVVNfSUQuUEVORElORyA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ3BlbmRpbmcnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRJQ0tFVF9TVEFUVVNfSUQuT05TQUxFIDpcblx0XHRcdHRpY2tldFN0YXR1cyA9IF9fKCAnb24gc2FsZScsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVElDS0VUX1NUQVRVU19JRC5BUkNISVZFRCA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ2FyY2hpdmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIHRpY2tldFN0YXR1cztcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSAgICBDU1MgY2xhc3MgZm9yIHRoZSBiYWNrZ3JvdW5kIGNvbG9yXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCYWNrZ3JvdW5kQ29sb3JDbGFzcyA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRyZXR1cm4gYGVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLSR7IHN0YXR1cyggVGlja2V0RW50aXR5ICkgfWA7XG59O1xuIiwiLyoqXG4gKiBXb3JkUHJlc3MgSW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRjb21wb3NlLFxuXHRjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCxcblx0d2l0aEluc3RhbmNlSWQsXG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgQmFzZUNvbnRyb2wgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuXG4vKipcbiAqIEV4dGVybmFsIEltcG9ydHNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgKCBjdXN0b21JZCA9ICcnICkgPT4gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoSW5zdGFuY2VJZCxcblx0XHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiB7XG5cdFx0XHRyZXR1cm4gY2xhc3MgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRcdFx0XHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdFx0XHRcdGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRcdGluc3RhbmNlSWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRcdFx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRcdF0gKSxcblx0XHRcdFx0XHRjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRcdFx0aGVscDogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuXHRcdFx0XHRcdGxhYmVsOiBXcmFwcGVkQ29tcG9uZW50LmRlZmF1bHRQcm9wcyAmJlxuXHRcdFx0XHRcdFx0V3JhcHBlZENvbXBvbmVudC5kZWZhdWx0UHJvcHMubGFiZWwgP1xuXHRcdFx0XHRcdFx0V3JhcHBlZENvbXBvbmVudC5kZWZhdWx0UHJvcHMubGFiZWwgOlxuXHRcdFx0XHRcdFx0JycsXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0cmVuZGVyKCkge1xuXHRcdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRcdGxhYmVsLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2VJZCxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0XHRcdGhlbHAsXG5cdFx0XHRcdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0XHRcdFx0Y29uc3QgaWQgPSBgaW5zcGVjdG9yLSR7IGN1c3RvbUlkIH0tY29udHJvbC0keyBpbnN0YW5jZUlkIH1gO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QmFzZUNvbnRyb2xcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBsYWJlbCB9XG5cdFx0XHRcdFx0XHRcdGlkPXsgaWQgfVxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9eyBjbGFzc05hbWUgfVxuXHRcdFx0XHRcdFx0XHRoZWxwPXsgaGVscCB9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxXcmFwcGVkQ29tcG9uZW50IHsgLi4udGhpcy5wcm9wcyB9IGxhYmVsPXsgJycgfSBpZD17IGlkIH0gLz5cblx0XHRcdFx0XHRcdDwvQmFzZUNvbnRyb2w+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9LFxuXHRdICksXG5cdCd3aXRoQmFzZUNvbnRyb2wnXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiwgU2VsZWN0Q29udHJvbCwgVGV4dENvbnRyb2wgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5cbi8qKlxuICogRW50aXR5TGlzdEZpbHRlckJhclxuICogYSBncm91cCBvZiBpbnB1dHMgZm9yIGNvbnRyb2xsaW5nIGhvdyBhIGxpc3Qgb2YgZW50aXRpZXMgaXMgZGlzcGxheWVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eUZpbHRlcnMgYWRkaXRpb25hbCBlbnRpdHkgc3BlY2lmaWMgZmlsdGVyc1xuICogQHBhcmFtIHtudW1iZXJ9IHBlclBhZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSB2aWV3XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRQZXJQYWdlIGNhbGxiYWNrIGZvciBwZXJQYWdlIGlucHV0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRMaXN0VmlldyBjYWxsYmFjayBmb3IgbGlzdCB2aWV3IGljb24gYnV0dG9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRHcmlkVmlldyBjYWxsYmFjayBmb3IgZ3JpZCB2aWV3IGljb24gYnV0dG9uXG4gKiBAcmV0dXJuIHtPYmplY3R9IEVudGl0eUxpc3RGaWx0ZXJCYXJcbiAqL1xuY2xhc3MgRW50aXR5TGlzdEZpbHRlckJhciBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0ZW50aXR5RmlsdGVyczogUHJvcFR5cGVzLm9iamVjdCxcblx0XHRwZXJQYWdlOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cdFx0dmlldzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdHNldFBlclBhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c2V0TGlzdFZpZXc6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c2V0R3JpZFZpZXc6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXh0XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldFNlYXJjaFRleHRcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBzZWFyY2ggaW5wdXRcblx0ICovXG5cdHNlYXJjaCA9ICggc2VhcmNoVGV4dCwgc2V0U2VhcmNoVGV4dCApID0+IHtcblx0XHRyZXR1cm4gaXNGdW5jdGlvbiggc2V0U2VhcmNoVGV4dCApID8gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8VGV4dENvbnRyb2xcblx0XHRcdFx0XHRsYWJlbD17IF9fKCAnc2VhcmNoJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXNlYXJjaFwiXG5cdFx0XHRcdFx0dmFsdWU9eyBzZWFyY2hUZXh0IH1cblx0XHRcdFx0XHRvbkNoYW5nZT17IHNldFNlYXJjaFRleHQgfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpIDogbnVsbDtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBlclBhZ2Vcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0UGVyUGFnZVxuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHBlclBhZ2Ugc2VsZWN0IGlucHV0XG5cdCAqL1xuXHRwZXJQYWdlID0gKCBwZXJQYWdlLCBzZXRQZXJQYWdlICkgPT4gKFxuXHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRsYWJlbD17IF9fKCAncGVyIHBhZ2UnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0Y2xhc3NOYW1lPVwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci1wZXJQYWdlLXNlbGVjdFwiXG5cdFx0XHR2YWx1ZT17IHBlclBhZ2UgfVxuXHRcdFx0b3B0aW9ucz17IFtcblx0XHRcdFx0eyB2YWx1ZTogMiwgbGFiZWw6IDIgfSxcblx0XHRcdFx0eyB2YWx1ZTogNiwgbGFiZWw6IDYgfSxcblx0XHRcdFx0eyB2YWx1ZTogMTIsIGxhYmVsOiAxMiB9LFxuXHRcdFx0XHR7IHZhbHVlOiAyNCwgbGFiZWw6IDI0IH0sXG5cdFx0XHRcdHsgdmFsdWU6IDQ4LCBsYWJlbDogNDggfSxcblx0XHRcdF0gfVxuXHRcdFx0b25DaGFuZ2U9eyBzZXRQZXJQYWdlIH1cblx0XHQvPlxuXHQpO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdmlld1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRMaXN0Vmlld1xuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGxpc3QgdmlldyBpY29uIGJ1dHRvblxuXHQgKi9cblx0bGlzdFZpZXcgPSAoIHZpZXcsIHNldExpc3RWaWV3ICkgPT4gKFxuXHRcdDxJY29uQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9eyB2aWV3ID09PSAnbGlzdCcgPyAnYWN0aXZlLWxpc3QnIDogJycgfVxuXHRcdFx0aWNvbj1cImVkaXRvci1qdXN0aWZ5XCJcblx0XHRcdHRvb2x0aXA9eyBfXyggJ2xpc3QgdmlldycsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRvbkNsaWNrPXsgc2V0TGlzdFZpZXcgfVxuXHRcdC8+XG5cdCk7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2aWV3XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldEdyaWRWaWV3XG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZ3JpZCB2aWV3IGljb24gYnV0dG9uXG5cdCAqL1xuXHRncmlkVmlldyA9ICggdmlldywgc2V0R3JpZFZpZXcgKSA9PiAoXG5cdFx0PEljb25CdXR0b25cblx0XHRcdGNsYXNzTmFtZT17IHZpZXcgPT09ICdncmlkJyA/ICdhY3RpdmUtbGlzdCcgOiAnJyB9XG5cdFx0XHRpY29uPVwic2NyZWVub3B0aW9uc1wiXG5cdFx0XHR0b29sdGlwPXsgX18oICdncmlkIHZpZXcnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0b25DbGljaz17IHNldEdyaWRWaWV3IH1cblx0XHQvPlxuXHQpO1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRzZWFyY2hUZXh0ID0gJycsXG5cdFx0XHRzZXRTZWFyY2hUZXh0LFxuXHRcdFx0cGVyUGFnZSxcblx0XHRcdHZpZXcsXG5cdFx0XHRzZXRQZXJQYWdlLFxuXHRcdFx0c2V0TGlzdFZpZXcsXG5cdFx0XHRzZXRHcmlkVmlldyxcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRjb25zdCBlbnRpdHlGaWx0ZXJzID0gdGhpcy5wcm9wcy5lbnRpdHlGaWx0ZXJzID9cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhclwiPlxuXHRcdFx0XHR7IHRoaXMucHJvcHMuZW50aXR5RmlsdGVycyB9XG5cdFx0XHQ8L2Rpdj4gOlxuXHRcdFx0bnVsbDtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXJcIj5cblx0XHRcdFx0eyBlbnRpdHlGaWx0ZXJzIH1cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1lbnRpdHktbGlzdC12aWV3LWJhclwiPlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImVlLXNlYXJjaC1maWx0ZXIgZWUtZmlsdGVyLWJhci1maWx0ZXJcIj5cblx0XHRcdFx0XHRcdHsgdGhpcy5zZWFyY2goIHNlYXJjaFRleHQsIHNldFNlYXJjaFRleHQgKSB9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtcGVyLXBhZ2UtZmlsdGVyIGVlLWZpbHRlci1iYXItZmlsdGVyXCI+XG5cdFx0XHRcdFx0XHR7IHRoaXMucGVyUGFnZSggcGVyUGFnZSwgc2V0UGVyUGFnZSApIH1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS12aWV3LWZpbHRlciBlZS1maWx0ZXItYmFyLWZpbHRlclwiPlxuXHRcdFx0XHRcdFx0eyB0aGlzLmxpc3RWaWV3KCB2aWV3LCBzZXRMaXN0VmlldyApIH1cblx0XHRcdFx0XHRcdHsgdGhpcy5ncmlkVmlldyggdmlldywgc2V0R3JpZFZpZXcgKSB9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBFbnRpdHlMaXN0RmlsdGVyQmFyO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRlZmF1bHQgYXMgd2l0aEVudGl0eVBhZ2luYXRpb24gfSBmcm9tICcuLi9wYWdpbmF0aW9uJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0ZGVmYXVsdCBhcyB3aXRoRW50aXR5TGlzdEZpbHRlckJhcixcbn0gZnJvbSAnLi93aXRoLWVudGl0eS1saXN0LWZpbHRlci1iYXInO1xuaW1wb3J0IHtcblx0ZGVmYXVsdCBhcyB3aXRoRW50aXR5TGlzdEZpbHRlclN0YXRlLFxufSBmcm9tICcuL3dpdGgtZW50aXR5LWxpc3QtZmlsdGVyLXN0YXRlJztcblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRlZEVudGl0eUxpc3RXaXRoRmlsdGVyQmFyID0gKFxuXHRFbnRpdHlMaXN0LFxuXHRwYWdpbmF0aW9uQ29uZmlnID0ge30sXG4pID0+IHdpdGhFbnRpdHlMaXN0RmlsdGVyQmFyKFxuXHR3aXRoRW50aXR5UGFnaW5hdGlvbiggcGFnaW5hdGlvbkNvbmZpZyApKCBFbnRpdHlMaXN0IClcbik7XG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0ZWRFbnRpdHlMaXN0V2l0aEZpbHRlckJhckFuZFN0YXRlID0gKFxuXHRFbnRpdHlMaXN0LFxuXHRwYWdpbmF0aW9uQ29uZmlnID0ge30sXG4pID0+IHdpdGhFbnRpdHlMaXN0RmlsdGVyU3RhdGUoIHdpdGhFbnRpdHlMaXN0RmlsdGVyQmFyKFxuXHR3aXRoRW50aXR5UGFnaW5hdGlvbiggcGFnaW5hdGlvbkNvbmZpZyApKCBFbnRpdHlMaXN0IClcbikgKTtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbnRpdHlMaXN0RmlsdGVyQmFyIH0gZnJvbSAnLi9lbnRpdHktbGlzdC1maWx0ZXItYmFyJztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXJcIjpcImVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlclwiLFwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhclwiOlwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhclwiLFwiZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJcIjpcImVlLWVudGl0eS1saXN0LXZpZXctYmFyXCIsXCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXBlclBhZ2Utc2VsZWN0XCI6XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXBlclBhZ2Utc2VsZWN0XCIsXCJlZS1maWx0ZXItYmFyLWZpbHRlclwiOlwiZWUtZmlsdGVyLWJhci1maWx0ZXJcIixcImVlLXNlYXJjaC1maWx0ZXJcIjpcImVlLXNlYXJjaC1maWx0ZXJcIixcImVlLXBlci1wYWdlLWZpbHRlclwiOlwiZWUtcGVyLXBhZ2UtZmlsdGVyXCIsXCJlZS1ncmlkLXZpZXctZmlsdGVyXCI6XCJlZS1ncmlkLXZpZXctZmlsdGVyXCIsXCJlZS1saXN0LXZpZXctZmlsdGVyXCI6XCJlZS1saXN0LXZpZXctZmlsdGVyXCIsXCJjb21wb25lbnRzLWljb24tYnV0dG9uXCI6XCJjb21wb25lbnRzLWljb24tYnV0dG9uXCIsXCJhY3RpdmUtbGlzdFwiOlwiYWN0aXZlLWxpc3RcIixcImNvbXBvbmVudHMtYmFzZS1jb250cm9sX19sYWJlbFwiOlwiY29tcG9uZW50cy1iYXNlLWNvbnRyb2xfX2xhYmVsXCIsXCJjb21wb25lbnRzLXNlbGVjdC1jb250cm9sX19pbnB1dFwiOlwiY29tcG9uZW50cy1zZWxlY3QtY29udHJvbF9faW5wdXRcIixcImNvbXBvbmVudHMtdGV4dC1jb250cm9sX19pbnB1dFwiOlwiY29tcG9uZW50cy10ZXh0LWNvbnRyb2xfX2lucHV0XCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFbnRpdHlMaXN0RmlsdGVyQmFyIH0gZnJvbSAnLi9lbnRpdHktbGlzdC1maWx0ZXItYmFyJztcblxuLyoqXG4gKiB3aXRoRW50aXR5TGlzdEZpbHRlckJhclxuICogSGlnaGVyLU9yZGVyLUNvbXBvbmVudCB0aGF0IHdyYXBzIGFuIEVudGl0eUxpc3QgY29tcG9uZW50XG4gKiBmb3IgY2hhbmdpbmcgaG93IHRoZSBFbnRpdHlMaXN0IGlzIHZpZXdlZFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gRW50aXR5TGlzdCB3aXRoIGFkZGVkIEVudGl0eUxpc3RGaWx0ZXJCYXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdCggRW50aXR5TGlzdCApID0+IHtcblx0XHRyZXR1cm4gY2xhc3MgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRcdFx0c2VhcmNoRW50aXRpZXMgPSAoIHNlYXJjaFRleHQsIGVudGl0aWVzICkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gc2VhcmNoVGV4dCAhPT0gJycgP1xuXHRcdFx0XHRcdGVudGl0aWVzLmZpbHRlciggKCBlbnRpdHkgKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlOYW1lID0gZW50aXR5Lm5hbWUgPyBlbnRpdHkubmFtZSA6ICcnO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVudGl0eU5hbWUudG9Mb3dlckNhc2UoKS5zZWFyY2goXG5cdFx0XHRcdFx0XHRcdHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSApICE9PSAtMTtcblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGVudGl0aWVzO1xuXHRcdFx0fTtcblxuXHRcdFx0cmVuZGVyKCkge1xuXHRcdFx0XHRsZXQgeyBlbnRpdGllcyB9ID0gdGhpcy5wcm9wcztcblx0XHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRcdHNlYXJjaFRleHQsXG5cdFx0XHRcdFx0c2V0U2VhcmNoVGV4dCxcblx0XHRcdFx0XHRwZXJQYWdlLFxuXHRcdFx0XHRcdHZpZXcsXG5cdFx0XHRcdFx0c2V0UGVyUGFnZSxcblx0XHRcdFx0XHRzZXRMaXN0Vmlldyxcblx0XHRcdFx0XHRzZXRHcmlkVmlldyxcblx0XHRcdFx0XHQuLi5vdGhlclByb3BzXG5cdFx0XHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdFx0XHRlbnRpdGllcyA9IGlzRnVuY3Rpb24oIHNldFNlYXJjaFRleHQgKSA/XG5cdFx0XHRcdFx0dGhpcy5zZWFyY2hFbnRpdGllcyggc2VhcmNoVGV4dCwgZW50aXRpZXMgKSA6XG5cdFx0XHRcdFx0ZW50aXRpZXM7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHRcdFx0PEVudGl0eUxpc3RGaWx0ZXJCYXJcblx0XHRcdFx0XHRcdFx0c2VhcmNoVGV4dD17IHNlYXJjaFRleHQgfVxuXHRcdFx0XHRcdFx0XHRzZXRTZWFyY2hUZXh0PXsgc2V0U2VhcmNoVGV4dCB9XG5cdFx0XHRcdFx0XHRcdHBlclBhZ2U9eyBwZXJQYWdlIH1cblx0XHRcdFx0XHRcdFx0dmlldz17IHZpZXcgfVxuXHRcdFx0XHRcdFx0XHRzZXRQZXJQYWdlPXsgc2V0UGVyUGFnZSB9XG5cdFx0XHRcdFx0XHRcdHNldExpc3RWaWV3PXsgc2V0TGlzdFZpZXcgfVxuXHRcdFx0XHRcdFx0XHRzZXRHcmlkVmlldz17IHNldEdyaWRWaWV3IH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8RW50aXR5TGlzdFxuXHRcdFx0XHRcdFx0XHRlbnRpdGllcz17IGVudGl0aWVzIH1cblx0XHRcdFx0XHRcdFx0ZW50aXRpZXNQZXJQYWdlPXsgcGVyUGFnZSB9XG5cdFx0XHRcdFx0XHRcdHZpZXc9eyB2aWV3IH1cblx0XHRcdFx0XHRcdFx0bm9SZXN1bHRzVGV4dD17XG5cdFx0XHRcdFx0XHRcdFx0X18oXG5cdFx0XHRcdFx0XHRcdFx0XHQnbm8gcmVzdWx0cyBmb3VuZCAodHJ5IGNoYW5naW5nIGZpbHRlcnMpJyxcblx0XHRcdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9LFxuXHQnd2l0aEVudGl0eUxpc3RGaWx0ZXJCYXInXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQsIGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgd2l0aFNlbGVjdCwgd2l0aERpc3BhdGNoIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcblxuLyoqXG4gKiB3aXRoRW50aXR5TGlzdEZpbHRlclN0YXRlXG4gKiBIaWdoZXItT3JkZXItQ29tcG9uZW50IHRoYXQgd3JhcHMgYW4gXCJFbnRpdHlMaXN0RmlsdGVyQmFyXCIgY29tcG9uZW50XG4gKiBpbiBvcmRlciB0byBwcm92aWRlIHN0YXRlIG1hbmFnZW1lbnQgZm9yIGl0IGFuZCBpdHMgY2hpbGRyZW5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gV3JhcHBlZENvbXBvbmVudFxuICogQHJldHVybiB7T2JqZWN0fSBXcmFwcGVkQ29tcG9uZW50IHdpdGggYWRkZWQgRW50aXR5TGlzdEZpbHRlclN0YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHRjb21wb3NlKCBbXG5cdFx0d2l0aFNlbGVjdCggKCBzZWxlY3QsIG93blByb3BzICkgPT4ge1xuXHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRzZWFyY2hUZXh0ID0gJycsXG5cdFx0XHRcdHBlclBhZ2UgPSA2LFxuXHRcdFx0XHR2aWV3ID0gJ2dyaWQnLFxuXHRcdFx0fSA9IG93blByb3BzO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlYXJjaFRleHQ6IHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdzZWFyY2hUZXh0Jyxcblx0XHRcdFx0XHRzZWFyY2hUZXh0XG5cdFx0XHRcdCksXG5cdFx0XHRcdHBlclBhZ2U6IHBhcnNlSW50KFxuXHRcdFx0XHRcdHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHRcdCdlbnRpdHktbGlzdCcsXG5cdFx0XHRcdFx0XHQncGVyUGFnZScsXG5cdFx0XHRcdFx0XHRwZXJQYWdlXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHQxMFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR2aWV3OiBzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2VudGl0eS1saXN0Jyxcblx0XHRcdFx0XHQndmlldycsXG5cdFx0XHRcdFx0dmlld1xuXHRcdFx0XHQpLFxuXHRcdFx0fTtcblx0XHR9ICksXG5cdFx0d2l0aERpc3BhdGNoKCAoIGRpc3BhdGNoICkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBkaXNwYXRjaCggJ2V2ZW50ZXNwcmVzc28vZmlsdGVyLXN0YXRlJyApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2V0U2VhcmNoVGV4dDogKCBzZWFyY2hUZXh0ICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdlbnRpdHktbGlzdCcsXG5cdFx0XHRcdFx0J3NlYXJjaFRleHQnLFxuXHRcdFx0XHRcdHNlYXJjaFRleHRcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0UGVyUGFnZTogKCBwZXJQYWdlICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdlbnRpdHktbGlzdCcsXG5cdFx0XHRcdFx0J3BlclBhZ2UnLFxuXHRcdFx0XHRcdHBhcnNlSW50KCBwZXJQYWdlLCAxMCApXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldExpc3RWaWV3OiAoKSA9PiBzdG9yZS5zZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2VudGl0eS1saXN0Jyxcblx0XHRcdFx0XHQndmlldycsXG5cdFx0XHRcdFx0J2xpc3QnXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldEdyaWRWaWV3OiAoKSA9PiBzdG9yZS5zZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2VudGl0eS1saXN0Jyxcblx0XHRcdFx0XHQndmlldycsXG5cdFx0XHRcdFx0J2dyaWQnXG5cdFx0XHRcdCksXG5cdFx0XHR9O1xuXHRcdH0gKSxcblx0XHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiB7XG5cdFx0XHRyZXR1cm4gY2xhc3MgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRcdFx0XHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdFx0XHRcdGVudGl0aWVzOiBQcm9wVHlwZXMuYXJyYXlPZiggUHJvcFR5cGVzLm9iamVjdCApLmlzUmVxdWlyZWQsXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJlbmRlcigpIHtcblx0XHRcdFx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnQgeyAuLi50aGlzLnByb3BzIH0gLz47XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSxcblx0XSApLFxuXHQnd2l0aEVudGl0eUxpc3RGaWx0ZXJTdGF0ZSdcbik7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhCYXNlQ29udHJvbCB9IGZyb20gJy4vYmFzZS1jb250cm9sJztcbmV4cG9ydCB7XG5cdFBhZ2luYXRlZEVudGl0eUxpc3RXaXRoRmlsdGVyQmFyLFxuXHRQYWdpbmF0ZWRFbnRpdHlMaXN0V2l0aEZpbHRlckJhckFuZFN0YXRlLFxuXHRFbnRpdHlMaXN0RmlsdGVyQmFyLFxufSBmcm9tICcuL2ZpbHRlci1iYXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoRW50aXR5UGFnaW5hdGlvbiB9IGZyb20gJy4vcGFnaW5hdGlvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhMYXRlc3RDaGVja2luIH0gZnJvbSAnLi93aXRoLWxhdGVzdC1jaGVja2luJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aE1vbmV5IH0gZnJvbSAnLi9tb25leSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGlzU2hhbGxvd0VxdWFsQXJyYXlzIGZyb20gJ0B3b3JkcHJlc3MvaXMtc2hhbGxvdy1lcXVhbCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcbmltcG9ydCB7IE1vbmV5LCBTaXRlQ3VycmVuY3kgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcblxuLyoqXG4gKiBUaGlzIHZhbGlkYXRlcyB3aGV0aGVyIHRoZSBuZXh0U3RhdGVSZXNwb25zZSBpcyBpbiB0aGUgZXhwZWN0ZWQgc2hhcGUuXG4gKiBJZiBhbnkgb2YgdGhlIHZhbGlkYXRpb24gZmFpbHMsIHRoZW4gYSBjb25zb2xlLmVycm9yIGlzIHRyaWdnZXJlZCAodmlhXG4gKiB3YXJuaW5nKVxuICpcbiAqIEBwYXJhbSB7e319IG5leHRTdGF0ZVJlc3BvbnNlXG4gKi9cbmNvbnN0IHZhbGlkYXRlTmV4dFN0YXRlID0gKCBuZXh0U3RhdGVSZXNwb25zZSApID0+IHtcblx0d2FybmluZyhcblx0XHRuZXh0U3RhdGVSZXNwb25zZSAmJlxuXHRcdG5leHRTdGF0ZVJlc3BvbnNlLmhhc093blByb3BlcnR5KCAnY29udmVydGVkVmFsdWVzJyApLFxuXHRcdCdUaGUgcHJvcE5hbWVNYXAgY2FsbGJhY2sgZm9yIHRoZSB3aXRoTW9uZXkgSE9DIHNob3VsZCByZXR1cm4gYW4nICtcblx0XHQnIG9iamVjdCB3aXRoIGEgXCJjb252ZXJ0ZWRWYWx1ZXNcIiBrZXkuJ1xuXHQpO1xuXHRpZiAoIG5leHRTdGF0ZVJlc3BvbnNlICYmXG5cdFx0bmV4dFN0YXRlUmVzcG9uc2UuaGFzT3duUHJvcGVydHkoICdjb252ZXJ0ZWRWYWx1ZXMnICkgKSB7XG5cdFx0d2FybmluZyhcblx0XHRcdGlzQXJyYXkoIG5leHRTdGF0ZVJlc3BvbnNlLmNvbnZlcnRlZFZhbHVlcyApLFxuXHRcdFx0J1RoZSBwcm9wTmFtZU1hcCBjYWxsYmFjayBmb3IgdGhlIHdpdGhNb25leSBIT0Mgc2hvdWxkIHJldHVybiBhbiAnICtcblx0XHRcdCdvYmplY3Qgd2l0aCBhIFwiY29udmVydGVkVmFsdWVzXCIga2V5IHRoYXQgaGFzIGFuIGFycmF5JyArXG5cdFx0XHQnIG9mIG51bWJlcnMgYXMgdGhlIHZhbHVlLidcblx0XHQpO1xuXHR9XG5cdHdhcm5pbmcoXG5cdFx0bmV4dFN0YXRlUmVzcG9uc2UgJiYgbmV4dFN0YXRlUmVzcG9uc2UuaGFzT3duUHJvcGVydHkoICdwcm9wcycgKSxcblx0XHQnVGhlIHByb3BOYW1lTWFwIGNhbGxiYWNrIGZvciB0aGUgd2l0aE1vbmV5SE9DIHNob3VsZCByZXR1cm4gYW4nICtcblx0XHQnIG9iamVjdCB3aXRoIGEgXCJwcm9wc1wiIGtleS4nXG5cdCk7XG59O1xuXG4vKipcbiAqIEEgaGlnaGVyIG9yZGVyIGNvbXBvbmVudCB0aGF0IGNvbnZlcnRzIGFueSBwcm9wcyBtYXRjaGluZyB0aGUgbWFwIHByb3ZpZGVkXG4gKiBhcyBhbiBhcmd1bWVudCB0byBNb25leSB2YWx1ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlbSB0byB0aGUgV3JhcHBlZENvbXBvbmVudFxuICpcbiAqIEBwYXJhbSB7QXJyYXl8ZnVuY3Rpb259IHByb3BOYW1lTWFwXG4gKiBAcmV0dXJuIHtmdW5jdGlvbigqKTogRW5oYW5jZWRDb21wb25lbnR9ICBSZXR1cm5zIGFuIGVuaGFuY2VkIGNvbXBvbmVudCB3aGVyZVxuICogcHJvcHMgdGhhdCByZXByZXNlbnQgbW9uZXkgdmFsdWVzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gYSBNb25leSB2YWx1ZSBvYmplY3RcbiAqL1xuY29uc3Qgd2l0aE1vbmV5ID0gKCBwcm9wTmFtZU1hcCA9IFtdICkgPT4gKCBXcmFwcGVkQ29tcG9uZW50ICkgPT4ge1xuXHRjbGFzcyBFbmhhbmNlZENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudCB7XG5cdFx0c3RhdGUgPSB7XG5cdFx0XHRjb252ZXJ0ZWRWYWx1ZXM6IFtdLFxuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBUaGlzIHByb3ZpZGVzIHRoZSBuZXh0IHN0YXRlIG9uIGFueSBwcm9wIGNoYW5nZS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7e319IHByb3BzXG5cdFx0ICogQHJldHVybiB7e319IEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5leHRTdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cblx0XHQgKi9cblx0XHRnZXROZXh0U3RhdGUgPSAoIHByb3BzICkgPT4ge1xuXHRcdFx0bGV0IG5leHRTdGF0ZVJlc3BvbnNlLFxuXHRcdFx0XHRuZXh0U3RhdGUgPSB7fSxcblx0XHRcdFx0Y29udmVydGVkVmFsdWVzID0gW107XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BOYW1lTWFwICkgKSB7XG5cdFx0XHRcdG5leHRTdGF0ZVJlc3BvbnNlID0gcHJvcE5hbWVNYXAoIHByb3BzLCBNb25leSApO1xuXHRcdFx0XHR2YWxpZGF0ZU5leHRTdGF0ZSggbmV4dFN0YXRlUmVzcG9uc2UgKTtcblx0XHRcdFx0aWYgKCBuZXh0U3RhdGVSZXNwb25zZSAmJiBuZXh0U3RhdGVSZXNwb25zZS5wcm9wcyApIHtcblx0XHRcdFx0XHRuZXh0U3RhdGUgPSB7IC4uLm5leHRTdGF0ZVJlc3BvbnNlLnByb3BzIH07XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udmVydGVkVmFsdWVzID0gbmV4dFN0YXRlUmVzcG9uc2UuY29udmVydGVkVmFsdWVzIHx8XG5cdFx0XHRcdFx0Y29udmVydGVkVmFsdWVzO1xuXHRcdFx0fSBlbHNlIGlmICggaXNBcnJheSggcHJvcE5hbWVNYXAgKSApIHtcblx0XHRcdFx0cHJvcE5hbWVNYXAuZm9yRWFjaCggKCBwcm9wTmFtZSApID0+IHtcblx0XHRcdFx0XHRpZiAoIHByb3BzWyBwcm9wTmFtZSBdICkge1xuXHRcdFx0XHRcdFx0bmV4dFN0YXRlWyBwcm9wTmFtZSBdID1cblx0XHRcdFx0XHRcdFx0bmV3IE1vbmV5KFxuXHRcdFx0XHRcdFx0XHRcdHByb3BzWyBwcm9wTmFtZSBdLFxuXHRcdFx0XHRcdFx0XHRcdFNpdGVDdXJyZW5jeVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Y29udmVydGVkVmFsdWVzLnB1c2goXG5cdFx0XHRcdFx0XHRcdG5leHRTdGF0ZVsgcHJvcE5hbWUgXS50b051bWJlcigpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2FybmluZyhcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHQnVGhlIHByb3BOYW1lTWFwIGFyZ3VtZW50IHByb3ZpZGVkIHRvIHdpdGhNb25leSBtdXN0IGJlIGVpdGhlciBhJyArXG5cdFx0XHRcdFx0JyBmdW5jdGlvbiBvciBhbiBhcnJheSdcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG5leHRTdGF0ZS5jb252ZXJ0ZWRWYWx1ZXMgPSBjb252ZXJ0ZWRWYWx1ZXM7XG5cdFx0XHRyZXR1cm4gbmV4dFN0YXRlO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBDYWxjdWxhdGVzIHdoZXRoZXIgdGhlIHN0YXRlIHNob3VsZCBiZSB1cGRhdGVkIHVzaW5nIHRoZSBwcm92aWRlZFxuXHRcdCAqIGFyZ3VtZW50cy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7e319IHByZXZQcm9wc1xuXHRcdCAqIEBwYXJhbSB7e319IHByZXZTdGF0ZVxuXHRcdCAqIEBwYXJhbSB7e319IG5leHRTdGF0ZVxuXHRcdCAqIEByZXR1cm4ge2Jvb2xlYW59ICBJZiBhIHNoYWxsb3cgY29tcGFyZSBvZiBwcmV2U3RhdGUuY29udmVydGVkVmFsdWVzXG5cdFx0ICogYW5kIG5leHRTdGF0ZS5jb252ZXJ0ZWRWYWx1ZXMgaXMgZmFsc2UsIHRoZW4gdGhpcyByZXR1cm5zIHRydWUgdG9cblx0XHQgKiBzaWduYWwgc3RhdGUgc2hvdWxkIGJlIHVwZGF0ZWQuXG5cdFx0ICovXG5cdFx0c2hvdWxkVXBkYXRlU3RhdGVXaXRoQ29udmVydGVkVmFsdWVzID0gKFxuXHRcdFx0cHJldlByb3BzLFxuXHRcdFx0cHJldlN0YXRlLFxuXHRcdFx0bmV4dFN0YXRlXG5cdFx0KSA9PiB7XG5cdFx0XHRyZXR1cm4gISBpc1NoYWxsb3dFcXVhbEFycmF5cyhcblx0XHRcdFx0bmV4dFN0YXRlLmNvbnZlcnRlZFZhbHVlcyxcblx0XHRcdFx0cHJldlN0YXRlLmNvbnZlcnRlZFZhbHVlc1xuXHRcdFx0KSAmJlxuXHRcdFx0XHRuZXh0U3RhdGUuY29udmVydGVkVmFsdWVzWyAwIF0gIT09XG5cdFx0XHRcdHByZXZTdGF0ZS5jb252ZXJ0ZWRWYWx1ZXNbIDAgXTtcblx0XHR9O1xuXG5cdFx0Y29tcG9uZW50RGlkTW91bnQoKSB7XG5cdFx0XHR0aGlzLnNldFN0YXRlKCB0aGlzLmdldE5leHRTdGF0ZSggdGhpcy5wcm9wcyApICk7XG5cdFx0fVxuXG5cdFx0Y29tcG9uZW50RGlkVXBkYXRlKCBwcmV2UHJvcHMsIHByZXZTdGF0ZSApIHtcblx0XHRcdGNvbnN0IG5leHRTdGF0ZSA9IHRoaXMuZ2V0TmV4dFN0YXRlKCB0aGlzLnByb3BzICk7XG5cdFx0XHRpZiAoIHRoaXMuc2hvdWxkVXBkYXRlU3RhdGVXaXRoQ29udmVydGVkVmFsdWVzKFxuXHRcdFx0XHRwcmV2UHJvcHMsXG5cdFx0XHRcdHByZXZTdGF0ZSxcblx0XHRcdFx0bmV4dFN0YXRlXG5cdFx0XHQpICkge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKCBuZXh0U3RhdGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZW5kZXIoKSB7XG5cdFx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnQgeyAuLi50aGlzLnByb3BzIH0geyAuLi50aGlzLnN0YXRlIH0gLz47XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIEVuaGFuY2VkQ29tcG9uZW50O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aE1vbmV5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBKd1BhZ2luYXRpb24gZnJvbSAnanctcmVhY3QtcGFnaW5hdGlvbic7XG5pbXBvcnQge1xuXHRjb21wb3NlLFxuXHRjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCxcblx0d2l0aEluc3RhbmNlSWQsXG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vKipcbiAqIHdpdGhFbnRpdHlQYWdpbmF0aW9uXG4gKiBIaWdoZXItT3JkZXItQ29tcG9uZW50IHRoYXQgd3JhcHMgYW4gXCJFbnRpdHlMaXN0XCIgY29tcG9uZW50XG4gKiB3aXRoIGFuIEVudGl0eVBhZ2luYXRpb24gY29tcG9uZW50IHRoYXQgYWRkcyBhIHBhZ2luYXRpb24gY29udGFpbmVyXG4gKiBiZWxvdyB0aGUgRW50aXR5TGlzdCBhbmQgY29udHJvbHMgd2hhdCBlbnRpdGllcyBhcmUgZGlzcGxheWVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhZ2luYXRpb25Db25maWdcbiAqIEByZXR1cm4ge09iamVjdH0gRW50aXR5TGlzdCB3aXRoIGFkZGVkIEVudGl0eVBhZ2luYXRpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgKCBwYWdpbmF0aW9uQ29uZmlnID0ge30gKSA9PiBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0Y29tcG9zZSggW1xuXHRcdHdpdGhJbnN0YW5jZUlkLFxuXHRcdCggRW50aXR5TGlzdCApID0+IHtcblx0XHRcdHJldHVybiBjbGFzcyBFbnRpdHlQYWdpbmF0aW9uIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0XHRcdFx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRcdFx0XHRlbnRpdGllczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG5cdFx0XHRcdFx0aW5zdGFuY2VJZDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXHRcdFx0XHRcdGVudGl0aWVzUGVyUGFnZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0XHRcdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRcdFx0XSApLFxuXHRcdFx0XHRcdHBvc2l0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0cnVjdG9yKCBwcm9wcyApIHtcblx0XHRcdFx0XHRzdXBlciggcHJvcHMgKTtcblx0XHRcdFx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0XHRcdFx0ZW50aXR5UGFnZTogW10sXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNob3VsZENvbXBvbmVudFVwZGF0ZSggbmV4dFByb3BzLCBuZXh0U3RhdGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgKFxuXHRcdFx0XHRcdFx0aXNFcXVhbCggbmV4dFByb3BzLCB0aGlzLnByb3BzICkgJiZcblx0XHRcdFx0XHRcdGlzRXF1YWwoIG5leHRTdGF0ZS5lbnRpdHlQYWdlLCB0aGlzLnN0YXRlLmVudGl0eVBhZ2UgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogQGZ1bmN0aW9uXG5cdFx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IGVudGl0eVBhZ2Vcblx0XHRcdFx0ICovXG5cdFx0XHRcdG9uUGFnaW5hdGlvbkNoYW5nZSA9ICggZW50aXR5UGFnZSApID0+IHtcblx0XHRcdFx0XHQvLyB1cGRhdGUgbG9jYWwgc3RhdGUgd2l0aCBuZXcgcGFnZSBvZiBpdGVtc1xuXHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoIHsgZW50aXR5UGFnZSB9ICk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0cmVuZGVyKCkge1xuXHRcdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRcdGVudGl0aWVzLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2VJZCxcblx0XHRcdFx0XHRcdGVudGl0aWVzUGVyUGFnZSA9IDEwLFxuXHRcdFx0XHRcdFx0cG9zaXRpb24gPSAndG9wJyxcblx0XHRcdFx0XHRcdC4uLm90aGVyUHJvcHNcblx0XHRcdFx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRcdFx0XHRwYWdpbmF0aW9uQ29uZmlnLmxhYmVscyA9IHBhZ2luYXRpb25Db25maWcubGFiZWxzICYmXG5cdFx0XHRcdFx0XHRwYWdpbmF0aW9uQ29uZmlnLmxhYmVscy5maXJzdCAmJlxuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5sYWJlbHMubGFzdCAmJlxuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5sYWJlbHMucHJldmlvdXMgJiZcblx0XHRcdFx0XHRcdHBhZ2luYXRpb25Db25maWcubGFiZWxzLm5leHQgP1xuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5sYWJlbHMgOlxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRmaXJzdDogX18oICdGaXJzdCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHRcdFx0bGFzdDogX18oICdMYXN0JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdFx0XHRwcmV2aW91czogX18oICdQcmV2JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdFx0XHRuZXh0OiBfXyggJ05leHQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IG5vUmVzdWx0c1RleHQgPSBwYWdpbmF0aW9uQ29uZmlnLm5vUmVzdWx0c1RleHQgP1xuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5ub1Jlc3VsdHNUZXh0IDpcblx0XHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0XHQnbm8gcmVzdWx0cyBmb3VuZCAodHJ5IGNoYW5naW5nIGZpbHRlcnMpJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCByZXR1cm5Bc1Byb3AgPSBwYWdpbmF0aW9uQ29uZmlnLnJldHVybkFzUHJvcCA/XG5cdFx0XHRcdFx0XHRwYWdpbmF0aW9uQ29uZmlnLnJldHVybkFzUHJvcCA6XG5cdFx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdFx0XHRjb25zdCBwYWdpbmF0aW9uID0gKFxuXHRcdFx0XHRcdFx0PGRpdiBpZD17IGBlZS1lbnRpdHktcGFnaW5hdGlvbi0keyBpbnN0YW5jZUlkIH1gIH1cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtZW50aXR5LXBhZ2luYXRpb25cIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8SndQYWdpbmF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0aXRlbXM9eyBlbnRpdGllcyB9XG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2VQYWdlPXsgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UgfVxuXHRcdFx0XHRcdFx0XHRcdHBhZ2VTaXplPXsgcGFyc2VJbnQoIGVudGl0aWVzUGVyUGFnZSwgMTAgKSB9XG5cdFx0XHRcdFx0XHRcdFx0eyAuLi5wYWdpbmF0aW9uQ29uZmlnIH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgdG9wUGFnaW5hdGlvbiA9IHBvc2l0aW9uID09PSAoICd0b3AnIHx8ICdib3RoJyApID9cblx0XHRcdFx0XHRcdHBhZ2luYXRpb24gOlxuXHRcdFx0XHRcdFx0bnVsbDtcblx0XHRcdFx0XHRjb25zdCBib3R0b21QYWdpbmF0aW9uID0gcG9zaXRpb24gPT09ICggJ2JvdHRvbScgfHwgJ2JvdGgnICkgP1xuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbiA6XG5cdFx0XHRcdFx0XHRudWxsO1xuXHRcdFx0XHRcdHJldHVybiByZXR1cm5Bc1Byb3AgPyAoXG5cdFx0XHRcdFx0XHQ8RW50aXR5TGlzdFxuXHRcdFx0XHRcdFx0XHRwYWdpbmF0aW9uPXsgcGFnaW5hdGlvbiB9XG5cdFx0XHRcdFx0XHRcdGVudGl0aWVzPXsgdGhpcy5zdGF0ZS5lbnRpdHlQYWdlIH1cblx0XHRcdFx0XHRcdFx0bm9SZXN1bHRzVGV4dD17IG5vUmVzdWx0c1RleHQgfVxuXHRcdFx0XHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHRcdFx0XHR7IHRvcFBhZ2luYXRpb24gfVxuXHRcdFx0XHRcdFx0XHQ8RW50aXR5TGlzdFxuXHRcdFx0XHRcdFx0XHRcdGVudGl0aWVzPXsgdGhpcy5zdGF0ZS5lbnRpdHlQYWdlIH1cblx0XHRcdFx0XHRcdFx0XHRub1Jlc3VsdHNUZXh0PXsgbm9SZXN1bHRzVGV4dCB9XG5cdFx0XHRcdFx0XHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0eyBib3R0b21QYWdpbmF0aW9uIH1cblx0XHRcdFx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9LFxuXHRdICksXG5cdCd3aXRoRW50aXR5UGFnaW5hdGlvbidcbik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZW50aXR5LXBhZ2luYXRpb25cIjpcImVlLWVudGl0eS1wYWdpbmF0aW9uXCIsXCJwYWdpbmF0aW9uXCI6XCJwYWdpbmF0aW9uXCIsXCJkaXNhYmxlZFwiOlwiZGlzYWJsZWRcIixcImFjdGl2ZVwiOlwiYWN0aXZlXCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB3aXRoU2VsZWN0LCB3aXRoRGlzcGF0Y2ggfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQsIGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBFeHBvc2VzIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGUgbGF0ZXN0IGNoZWNrLWluIGVudGl0eSBmb3IgYSBnaXZlblxuICogcmVnaXN0cmF0aW9uIGFuZCBkYXRldGltZS5cbiAqXG4gKiBQcm9wZXJ0aWVzIHBhc3NlZCB0aHJvdWdoIHRvIHdyYXBwZWQgY29tcG9uZW50IGFyZTpcbiAqXG4gKiAtIGNoZWNrSW5FbnRpdHkge0Jhc2VFbnRpdHl8bnVsbH0gVGhlIGNoZWNrLWluIGVudGl0eSB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhlXG4gKiBnaXZlbiByZWdpc3RyYXRpb24gYW5kIGRhdGV0aW1lIGlkLlxuICogLSBoYXNSZXNvbHZlZENoZWNraW4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGNoZWNrLWluIGVudGl0eSBzZWxlY3RvciBoYXNcbiAqIHJlc29sdmVkLiAgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdHMgcG9zc2libGUgdGhlcmUgaXMgbm8gZW50aXR5IGZvclxuICogdGhpcyByZWdpc3RyYXRpb24gYW5kIGRhdGV0aW1lIGlmIHRoYXQgcmVnaXN0cmF0aW9uIGhhc24gbmV2ZXIgYmVlbiBjaGVja2VkXG4gKiBpbi5cbiAqIC0gb25DbGljayB7ZnVuY3Rpb259IEEgY2xpY2sgaGFuZGxlciB3aGljaCB3aGVuIGludm9rZWQsIHdpbGwgdG9nZ2xlIHRoZVxuICogY2hlY2staW4gc3RhdGUgZm9yIHRoZSBnaXZlbiByZWdpc3RyYXRpb24gYW5kIGRhdGV0aW1lSWQuIE5vdGU6IHRoaXMgd2lsbFxuICogcmVwbGFjZSB0aGUgc3RvcmUgbGF0ZXN0Q2hlY2tpbiByZWNvcmQgaW4gdGhlIHN0YXRlIGZvciB0aGlzIGdpdmVuXG4gKiByZWdpc3RyYXRpb24gYW5kIGRhdGV0aW1lIGlkIHdoaWNoIHdpbGwgZ2V0IHBpY2tlZCB1cCBieSB0aGUgYHdpdGhTZWxlY3RgXG4gKiBIT0MgaW4gdGhlIGNvbXBvc2VkIGNvbXBvbmVudC5cbiAqXG4gKiBAdHlwZSB7V1BDb21wb25lbnR9XG4gKi9cbmNvbnN0IHdpdGhMYXRlc3RDaGVja2luID0gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoU2VsZWN0KFxuXHRcdFx0KCBzZWxlY3QsIHsgcmVnaXN0cmF0aW9uLCBkYXRldGltZUlkIH0gKSA9PiB7XG5cdFx0XHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbChcblx0XHRcdFx0XHRyZWdpc3RyYXRpb24sXG5cdFx0XHRcdFx0J3JlZ2lzdHJhdGlvbidcblx0XHRcdFx0KSApIHtcblx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgeyBnZXRMYXRlc3RDaGVja2luIH0gPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0XHRcdGNvbnN0IHsgaGFzRmluaXNoZWRSZXNvbHV0aW9uIH0gPSBzZWxlY3QoICdjb3JlL2RhdGEnICk7XG5cdFx0XHRcdGNvbnN0IGNoZWNrSW5FbnRpdHkgPSBnZXRMYXRlc3RDaGVja2luKFxuXHRcdFx0XHRcdHJlZ2lzdHJhdGlvbi5pZCxcblx0XHRcdFx0XHRkYXRldGltZUlkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Y2hlY2tpbkVudGl0eTogY2hlY2tJbkVudGl0eSB8fCBudWxsLFxuXHRcdFx0XHRcdGhhc1Jlc29sdmVkQ2hlY2tpbjogaGFzRmluaXNoZWRSZXNvbHV0aW9uKFxuXHRcdFx0XHRcdFx0J2V2ZW50ZXNwcmVzc28vY29yZScsXG5cdFx0XHRcdFx0XHQnZ2V0TGF0ZXN0Q2hlY2tpbicsXG5cdFx0XHRcdFx0XHRbIHJlZ2lzdHJhdGlvbi5pZCwgZGF0ZXRpbWVJZCBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHQpLFxuXHRcdHdpdGhEaXNwYXRjaChcblx0XHRcdCggZGlzcGF0Y2gsIHsgcmVnaXN0cmF0aW9uLCBkYXRldGltZUlkIH0gKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHsgdG9nZ2xlQ2hlY2tpbiB9ID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0b25DbGljaygpIHtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoXG5cdFx0XHRcdFx0XHRcdFx0cmVnaXN0cmF0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdCdyZWdpc3RyYXRpb24nXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHR0b2dnbGVDaGVja2luKCByZWdpc3RyYXRpb24uaWQsIGRhdGV0aW1lSWQgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdCksXG5cdF0gKSxcblx0J3dpdGhMYXRlc3RDaGVja2luJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aExhdGVzdENoZWNraW47XG4iLCJmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgYXJyMltpXSA9IGFycltpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlczsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycjJbaV0gPSBhcnJbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZlwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXIpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn0iLCJpbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSBcIi4vZGVmaW5lUHJvcGVydHlcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgdmFyIG93bktleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvd25LZXlzID0gb3duS2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSkpO1xuICAgIH1cblxuICAgIG93bktleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCJpbXBvcnQgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiLi9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7XG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4uLy4uL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChzdHJpbmdzLCByYXcpIHtcbiAgaWYgKCFyYXcpIHtcbiAgICByYXcgPSBzdHJpbmdzLnNsaWNlKDApO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywge1xuICAgIHJhdzoge1xuICAgICAgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KVxuICAgIH1cbiAgfSkpO1xufSIsImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsImZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mMihvYmopOyB9XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZjIoU3ltYm9sLml0ZXJhdG9yKSA9PT0gXCJzeW1ib2xcIikge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufSIsImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kczsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2Y7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2ZcIik7XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVyKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIikgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheTsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQ7IiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4vZGVmaW5lUHJvcGVydHlcIik7XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgdmFyIG93bktleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvd25LZXlzID0gb3duS2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSkpO1xuICAgIH1cblxuICAgIG93bktleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0U3ByZWFkOyIsInZhciBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlID0gcmVxdWlyZShcIi4vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiKTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuICB2YXIga2V5LCBpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllczsiLCJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTtcblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheVwiKTtcblxudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWRcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXk7IiwiZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2YyKG9iaik7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mMihTeW1ib2wuaXRlcmF0b3IpID09PSBcInN5bWJvbFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2Y7IiwiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCBTdHlsaXMgZnJvbSAnQGVtb3Rpb24vc3R5bGlzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RoeXN1bHRhbi9zdHlsaXMuanMvdHJlZS9tYXN0ZXIvcGx1Z2lucy9ydWxlLXNoZWV0XG4vLyBpbmxpbmVkIHRvIGF2b2lkIHVtZCB3cmFwcGVyIGFuZCBwZWVyRGVwIHdhcm5pbmdzL2luc3RhbGxpbmcgc3R5bGlzXG4vLyBzaW5jZSB3ZSB1c2Ugc3R5bGlzIGFmdGVyIGNsb3N1cmUgY29tcGlsZXJcbnZhciBkZWxpbWl0ZXIgPSAnLyp8Ki8nO1xudmFyIG5lZWRsZSA9IGRlbGltaXRlciArICd9JztcblxuZnVuY3Rpb24gdG9TaGVldChibG9jaykge1xuICBpZiAoYmxvY2spIHtcbiAgICBTaGVldC5jdXJyZW50Lmluc2VydChibG9jayArICd9Jyk7XG4gIH1cbn1cblxudmFyIFNoZWV0ID0ge1xuICBjdXJyZW50OiBudWxsXG59O1xudmFyIHJ1bGVTaGVldCA9IGZ1bmN0aW9uIHJ1bGVTaGVldChjb250ZXh0LCBjb250ZW50LCBzZWxlY3RvcnMsIHBhcmVudHMsIGxpbmUsIGNvbHVtbiwgbGVuZ3RoLCBucywgZGVwdGgsIGF0KSB7XG4gIHN3aXRjaCAoY29udGV4dCkge1xuICAgIC8vIHByb3BlcnR5XG4gICAgY2FzZSAxOlxuICAgICAge1xuICAgICAgICBzd2l0Y2ggKGNvbnRlbnQuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIEBpbXBvcnRcbiAgICAgICAgICAgICAgU2hlZXQuY3VycmVudC5pbnNlcnQoY29udGVudCArICc7Jyk7XG4gICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjaGFyY29kZSBmb3IgbFxuXG4gICAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIGNoYXJjb2RlIGZvciBiXG4gICAgICAgICAgICAgIC8vIHRoaXMgaWdub3JlcyBsYWJlbFxuICAgICAgICAgICAgICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgLy8gc2VsZWN0b3JcblxuICAgIGNhc2UgMjpcbiAgICAgIHtcbiAgICAgICAgaWYgKG5zID09PSAwKSByZXR1cm4gY29udGVudCArIGRlbGltaXRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgLy8gYXQtcnVsZVxuXG4gICAgY2FzZSAzOlxuICAgICAge1xuICAgICAgICBzd2l0Y2ggKG5zKSB7XG4gICAgICAgICAgLy8gQGZvbnQtZmFjZSwgQHBhZ2VcbiAgICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU2hlZXQuY3VycmVudC5pbnNlcnQoc2VsZWN0b3JzWzBdICsgY29udGVudCk7XG4gICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJldHVybiBjb250ZW50ICsgKGF0ID09PSAwID8gZGVsaW1pdGVyIDogJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICBjYXNlIC0yOlxuICAgICAge1xuICAgICAgICBjb250ZW50LnNwbGl0KG5lZWRsZSkuZm9yRWFjaCh0b1NoZWV0KTtcbiAgICAgIH1cbiAgfVxufTtcblxudmFyIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24gY3JlYXRlQ2FjaGUob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSBvcHRpb25zID0ge307XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleSB8fCAnY3NzJztcbiAgdmFyIHN0eWxpc09wdGlvbnM7XG5cbiAgaWYgKG9wdGlvbnMucHJlZml4ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzdHlsaXNPcHRpb25zID0ge1xuICAgICAgcHJlZml4OiBvcHRpb25zLnByZWZpeFxuICAgIH07XG4gIH1cblxuICB2YXIgc3R5bGlzID0gbmV3IFN0eWxpcyhzdHlsaXNPcHRpb25zKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307IC8vICRGbG93Rml4TWVcblxuICB2YXIgY29udGFpbmVyO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIHZhciBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb24tXCIgKyBrZXkgKyBcIl1cIik7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChub2RlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBhdHRyaWIgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvbi1cIiArIGtleSk7IC8vICRGbG93Rml4TWVcblxuICAgICAgYXR0cmliLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgaW5zZXJ0ZWRbaWRdID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobm9kZS5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIF9pbnNlcnQ7XG5cbiAge1xuICAgIHN0eWxpcy51c2Uob3B0aW9ucy5zdHlsaXNQbHVnaW5zKShydWxlU2hlZXQpO1xuXG4gICAgX2luc2VydCA9IGZ1bmN0aW9uIGluc2VydChzZWxlY3Rvciwgc2VyaWFsaXplZCwgc2hlZXQsIHNob3VsZENhY2hlKSB7XG4gICAgICB2YXIgbmFtZSA9IHNlcmlhbGl6ZWQubmFtZTtcbiAgICAgIFNoZWV0LmN1cnJlbnQgPSBzaGVldDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2VyaWFsaXplZC5tYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgbWFwID0gc2VyaWFsaXplZC5tYXA7XG4gICAgICAgIFNoZWV0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgICAgICAgICAgc2hlZXQuaW5zZXJ0KHJ1bGUgKyBtYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgc3R5bGlzKHNlbGVjdG9yLCBzZXJpYWxpemVkLnN0eWxlcyk7XG5cbiAgICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgICBjYWNoZS5pbnNlcnRlZFtuYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YmY3MzcxYTRjZDdlNjAwOWVmNjFkMGFcbiAgICB2YXIgY29tbWVudFN0YXJ0ID0gL1xcL1xcKi9nO1xuICAgIHZhciBjb21tZW50RW5kID0gL1xcKlxcLy9nO1xuICAgIHN0eWxpcy51c2UoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRlbnQpIHtcbiAgICAgIHN3aXRjaCAoY29udGV4dCkge1xuICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdoaWxlIChjb21tZW50U3RhcnQudGVzdChjb250ZW50KSkge1xuICAgICAgICAgICAgICBjb21tZW50RW5kLmxhc3RJbmRleCA9IGNvbW1lbnRTdGFydC5sYXN0SW5kZXg7XG5cbiAgICAgICAgICAgICAgaWYgKGNvbW1lbnRFbmQudGVzdChjb250ZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbW1lbnRTdGFydC5sYXN0SW5kZXggPSBjb21tZW50RW5kLmxhc3RJbmRleDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91ciBzdHlsZXMgaGF2ZSBhbiB1bnRlcm1pbmF0ZWQgY29tbWVudCAoXCIvKlwiIHdpdGhvdXQgY29ycmVzcG9uZGluZyBcIiovXCIpLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb21tZW50U3RhcnQubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBzdHlsaXMudXNlKGZ1bmN0aW9uIChjb250ZXh0LCBjb250ZW50LCBzZWxlY3RvcnMpIHtcbiAgICAgIHN3aXRjaCAoY29udGV4dCkge1xuICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmbGFnID0gJ2Vtb3Rpb24tZGlzYWJsZS1zZXJ2ZXItcmVuZGVyaW5nLXVuc2FmZS1zZWxlY3Rvci13YXJuaW5nLXBsZWFzZS1kby1ub3QtdXNlLXRoaXMtdGhlLXdhcm5pbmctZXhpc3RzLWZvci1hLXJlYXNvbic7XG4gICAgICAgICAgICB2YXIgdW5zYWZlUHNldWRvQ2xhc3NlcyA9IGNvbnRlbnQubWF0Y2goLyg6Zmlyc3R8Om50aHw6bnRoLWxhc3QpLWNoaWxkL2cpO1xuXG4gICAgICAgICAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3Nlcykge1xuICAgICAgICAgICAgICB1bnNhZmVQc2V1ZG9DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKHVuc2FmZVBzZXVkb0NsYXNzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlnbm9yZVJlZ0V4cCA9IG5ldyBSZWdFeHAodW5zYWZlUHNldWRvQ2xhc3MgKyBcIi4qXFxcXC9cXFxcKiBcIiArIGZsYWcgKyBcIiBcXFxcKlxcXFwvXCIpO1xuICAgICAgICAgICAgICAgIHZhciBpZ25vcmUgPSBpZ25vcmVSZWdFeHAudGVzdChjb250ZW50KTtcblxuICAgICAgICAgICAgICAgIGlmICh1bnNhZmVQc2V1ZG9DbGFzcyAmJiAhaWdub3JlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHBzZXVkbyBjbGFzcyBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcyArIFwiXFxcIiBpcyBwb3RlbnRpYWxseSB1bnNhZmUgd2hlbiBkb2luZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIFRyeSBjaGFuZ2luZyBpdCB0byBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcy5zcGxpdCgnLWNoaWxkJylbMF0gKyBcIi1vZi10eXBlXFxcIi5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIGNhY2hlID0ge1xuICAgIGtleToga2V5LFxuICAgIHNoZWV0OiBuZXcgU3R5bGVTaGVldCh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICBzcGVlZHk6IG9wdGlvbnMuc3BlZWR5XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICByZXR1cm4gY2FjaGU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDYWNoZTtcbiIsImZ1bmN0aW9uIHN0eWxpc19taW4gKFcpIHtcbiAgZnVuY3Rpb24gTShkLCBjLCBlLCBoLCBhKSB7XG4gICAgZm9yICh2YXIgbSA9IDAsIGIgPSAwLCB2ID0gMCwgbiA9IDAsIHEsIGcsIHggPSAwLCBLID0gMCwgaywgdSA9IGsgPSBxID0gMCwgbCA9IDAsIHIgPSAwLCBJID0gMCwgdCA9IDAsIEIgPSBlLmxlbmd0aCwgSiA9IEIgLSAxLCB5LCBmID0gJycsIHAgPSAnJywgRiA9ICcnLCBHID0gJycsIEM7IGwgPCBCOykge1xuICAgICAgZyA9IGUuY2hhckNvZGVBdChsKTtcbiAgICAgIGwgPT09IEogJiYgMCAhPT0gYiArIG4gKyB2ICsgbSAmJiAoMCAhPT0gYiAmJiAoZyA9IDQ3ID09PSBiID8gMTAgOiA0NyksIG4gPSB2ID0gbSA9IDAsIEIrKywgSisrKTtcblxuICAgICAgaWYgKDAgPT09IGIgKyBuICsgdiArIG0pIHtcbiAgICAgICAgaWYgKGwgPT09IEogJiYgKDAgPCByICYmIChmID0gZi5yZXBsYWNlKE4sICcnKSksIDAgPCBmLnRyaW0oKS5sZW5ndGgpKSB7XG4gICAgICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgZiArPSBlLmNoYXJBdChsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnID0gNTk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICAgIGYgPSBmLnRyaW0oKTtcbiAgICAgICAgICAgIHEgPSBmLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICBrID0gMTtcblxuICAgICAgICAgICAgZm9yICh0ID0gKytsOyBsIDwgQjspIHtcbiAgICAgICAgICAgICAgc3dpdGNoIChnID0gZS5jaGFyQ29kZUF0KGwpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxMjM6XG4gICAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgICAgICAgICAgay0tO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgICAgICAgc3dpdGNoIChnID0gZS5jaGFyQ29kZUF0KGwgKyAxKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodSA9IGwgKyAxOyB1IDwgSjsgKyt1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5jaGFyQ29kZUF0KHUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICg0MiA9PT0gZyAmJiA0MiA9PT0gZS5jaGFyQ29kZUF0KHUgLSAxKSAmJiBsICsgMiAhPT0gdSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gdSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICg0NyA9PT0gZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gdSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gdTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDkxOlxuICAgICAgICAgICAgICAgICAgZysrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgICAgIGcrKztcblxuICAgICAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgIGZvciAoOyBsKysgPCBKICYmIGUuY2hhckNvZGVBdChsKSAhPT0gZzspIHtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKDAgPT09IGspIGJyZWFrO1xuICAgICAgICAgICAgICBsKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGsgPSBlLnN1YnN0cmluZyh0LCBsKTtcbiAgICAgICAgICAgIDAgPT09IHEgJiYgKHEgPSAoZiA9IGYucmVwbGFjZShjYSwgJycpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAocSkge1xuICAgICAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgICAgIDAgPCByICYmIChmID0gZi5yZXBsYWNlKE4sICcnKSk7XG4gICAgICAgICAgICAgICAgZyA9IGYuY2hhckNvZGVBdCgxKTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxMDA6XG4gICAgICAgICAgICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgICAgICAgICAgciA9IGM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByID0gTztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBrID0gTShjLCByLCBrLCBnLCBhICsgMSk7XG4gICAgICAgICAgICAgICAgdCA9IGsubGVuZ3RoO1xuICAgICAgICAgICAgICAgIDAgPCBBICYmIChyID0gWChPLCBmLCBJKSwgQyA9IEgoMywgaywgciwgYywgRCwgeiwgdCwgZywgYSwgaCksIGYgPSByLmpvaW4oJycpLCB2b2lkIDAgIT09IEMgJiYgMCA9PT0gKHQgPSAoayA9IEMudHJpbSgpKS5sZW5ndGgpICYmIChnID0gMCwgayA9ICcnKSk7XG4gICAgICAgICAgICAgICAgaWYgKDAgPCB0KSBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgICAgICAgICBmID0gZi5yZXBsYWNlKGRhLCBlYSk7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxuICAgICAgICAgICAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgICAgICAgICBrID0gZiArICd7JyArIGsgKyAnfSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICAgICAgICAgICAgZiA9IGYucmVwbGFjZShmYSwgJyQxICQyJyk7XG4gICAgICAgICAgICAgICAgICAgIGsgPSBmICsgJ3snICsgayArICd9JztcbiAgICAgICAgICAgICAgICAgICAgayA9IDEgPT09IHcgfHwgMiA9PT0gdyAmJiBMKCdAJyArIGssIDMpID8gJ0Atd2Via2l0LScgKyBrICsgJ0AnICsgayA6ICdAJyArIGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBrID0gZiArIGssIDExMiA9PT0gaCAmJiAoayA9IChwICs9IGssICcnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGsgPSAnJztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGsgPSBNKGMsIFgoYywgZiwgSSksIGssIGgsIGEgKyAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgRiArPSBrO1xuICAgICAgICAgICAgayA9IEkgPSByID0gdSA9IHEgPSAwO1xuICAgICAgICAgICAgZiA9ICcnO1xuICAgICAgICAgICAgZyA9IGUuY2hhckNvZGVBdCgrK2wpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDEyNTpcbiAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgZiA9ICgwIDwgciA/IGYucmVwbGFjZShOLCAnJykgOiBmKS50cmltKCk7XG4gICAgICAgICAgICBpZiAoMSA8ICh0ID0gZi5sZW5ndGgpKSBzd2l0Y2ggKDAgPT09IHUgJiYgKHEgPSBmLmNoYXJDb2RlQXQoMCksIDQ1ID09PSBxIHx8IDk2IDwgcSAmJiAxMjMgPiBxKSAmJiAodCA9IChmID0gZi5yZXBsYWNlKCcgJywgJzonKSkubGVuZ3RoKSwgMCA8IEEgJiYgdm9pZCAwICE9PSAoQyA9IEgoMSwgZiwgYywgZCwgRCwgeiwgcC5sZW5ndGgsIGgsIGEsIGgpKSAmJiAwID09PSAodCA9IChmID0gQy50cmltKCkpLmxlbmd0aCkgJiYgKGYgPSAnXFx4MDBcXHgwMCcpLCBxID0gZi5jaGFyQ29kZUF0KDApLCBnID0gZi5jaGFyQ29kZUF0KDEpLCBxKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgICAgIGlmICgxMDUgPT09IGcgfHwgOTkgPT09IGcpIHtcbiAgICAgICAgICAgICAgICAgIEcgKz0gZiArIGUuY2hhckF0KGwpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgNTggIT09IGYuY2hhckNvZGVBdCh0IC0gMSkgJiYgKHAgKz0gUChmLCBxLCBnLCBmLmNoYXJDb2RlQXQoMikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEkgPSByID0gdSA9IHEgPSAwO1xuICAgICAgICAgICAgZiA9ICcnO1xuICAgICAgICAgICAgZyA9IGUuY2hhckNvZGVBdCgrK2wpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIDQ3ID09PSBiID8gYiA9IDAgOiAwID09PSAxICsgcSAmJiAxMDcgIT09IGggJiYgMCA8IGYubGVuZ3RoICYmIChyID0gMSwgZiArPSAnXFx4MDAnKTtcbiAgICAgICAgICAwIDwgQSAqIFkgJiYgSCgwLCBmLCBjLCBkLCBELCB6LCBwLmxlbmd0aCwgaCwgYSwgaCk7XG4gICAgICAgICAgeiA9IDE7XG4gICAgICAgICAgRCsrO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTk6XG4gICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgIGlmICgwID09PSBiICsgbiArIHYgKyBtKSB7XG4gICAgICAgICAgICB6Kys7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB6Kys7XG4gICAgICAgICAgeSA9IGUuY2hhckF0KGwpO1xuXG4gICAgICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICBpZiAoMCA9PT0gbiArIG0gKyBiKSBzd2l0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgICAgICB5ID0gJyc7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAzMiAhPT0gZyAmJiAoeSA9ICcgJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgeSA9ICdcXFxcMCc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICB5ID0gJ1xcXFxmJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgIHkgPSAnXFxcXHYnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyBtICYmIChyID0gSSA9IDEsIHkgPSAnXFxmJyArIHkpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgICAgIGlmICgwID09PSBuICsgYiArIG0gKyBFICYmIDAgPCB1KSBzd2l0Y2ggKGwgLSB1KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgMTEyID09PSB4ICYmIDU4ID09PSBlLmNoYXJDb2RlQXQobCAtIDMpICYmIChFID0geCk7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAxMTEgPT09IEsgJiYgKEUgPSBLKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyBtICYmICh1ID0gbCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgICAwID09PSBiICsgdiArIG4gKyBtICYmIChyID0gMSwgeSArPSAnXFxyJyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgMCA9PT0gYiAmJiAobiA9IG4gPT09IGcgPyAwIDogMCA9PT0gbiA/IGcgOiBuKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgOTE6XG4gICAgICAgICAgICAgIDAgPT09IG4gKyBiICsgdiAmJiBtKys7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDkzOlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIHYgJiYgbS0tO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyBtICYmIHYtLTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgIGlmICgwID09PSBuICsgYiArIG0pIHtcbiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gcSkgc3dpdGNoICgyICogeCArIDMgKiBLKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDUzMzpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHEgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2Kys7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgICAgMCA9PT0gYiArIHYgKyBuICsgbSArIHUgKyBrICYmIChrID0gMSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgaWYgKCEoMCA8IG4gKyBtICsgdikpIHN3aXRjaCAoYikge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoMiAqIGcgKyAzICogZS5jaGFyQ29kZUF0KGwgKyAxKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDIzNTpcbiAgICAgICAgICAgICAgICAgICAgICBiID0gNDc7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjA6XG4gICAgICAgICAgICAgICAgICAgICAgdCA9IGwsIGIgPSA0MjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgICAgICAgNDcgPT09IGcgJiYgNDIgPT09IHggJiYgdCArIDIgIT09IGwgJiYgKDMzID09PSBlLmNoYXJDb2RlQXQodCArIDIpICYmIChwICs9IGUuc3Vic3RyaW5nKHQsIGwgKyAxKSksIHkgPSAnJywgYiA9IDApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgMCA9PT0gYiAmJiAoZiArPSB5KTtcbiAgICAgIH1cblxuICAgICAgSyA9IHg7XG4gICAgICB4ID0gZztcbiAgICAgIGwrKztcbiAgICB9XG5cbiAgICB0ID0gcC5sZW5ndGg7XG5cbiAgICBpZiAoMCA8IHQpIHtcbiAgICAgIHIgPSBjO1xuICAgICAgaWYgKDAgPCBBICYmIChDID0gSCgyLCBwLCByLCBkLCBELCB6LCB0LCBoLCBhLCBoKSwgdm9pZCAwICE9PSBDICYmIDAgPT09IChwID0gQykubGVuZ3RoKSkgcmV0dXJuIEcgKyBwICsgRjtcbiAgICAgIHAgPSByLmpvaW4oJywnKSArICd7JyArIHAgKyAnfSc7XG5cbiAgICAgIGlmICgwICE9PSB3ICogRSkge1xuICAgICAgICAyICE9PSB3IHx8IEwocCwgMikgfHwgKEUgPSAwKTtcblxuICAgICAgICBzd2l0Y2ggKEUpIHtcbiAgICAgICAgICBjYXNlIDExMTpcbiAgICAgICAgICAgIHAgPSBwLnJlcGxhY2UoaGEsICc6LW1vei0kMScpICsgcDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMTI6XG4gICAgICAgICAgICBwID0gcC5yZXBsYWNlKFEsICc6Oi13ZWJraXQtaW5wdXQtJDEnKSArIHAucmVwbGFjZShRLCAnOjotbW96LSQxJykgKyBwLnJlcGxhY2UoUSwgJzotbXMtaW5wdXQtJDEnKSArIHA7XG4gICAgICAgIH1cblxuICAgICAgICBFID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gRyArIHAgKyBGO1xuICB9XG5cbiAgZnVuY3Rpb24gWChkLCBjLCBlKSB7XG4gICAgdmFyIGggPSBjLnRyaW0oKS5zcGxpdChpYSk7XG4gICAgYyA9IGg7XG4gICAgdmFyIGEgPSBoLmxlbmd0aCxcbiAgICAgICAgbSA9IGQubGVuZ3RoO1xuXG4gICAgc3dpdGNoIChtKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHZhciBiID0gMDtcblxuICAgICAgICBmb3IgKGQgPSAwID09PSBtID8gJycgOiBkWzBdICsgJyAnOyBiIDwgYTsgKytiKSB7XG4gICAgICAgICAgY1tiXSA9IFooZCwgY1tiXSwgZSwgbSkudHJpbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHZhciB2ID0gYiA9IDA7XG5cbiAgICAgICAgZm9yIChjID0gW107IGIgPCBhOyArK2IpIHtcbiAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IG07ICsrbikge1xuICAgICAgICAgICAgY1t2KytdID0gWihkW25dICsgJyAnLCBoW2JdLCBlLCBtKS50cmltKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIGZ1bmN0aW9uIFooZCwgYywgZSkge1xuICAgIHZhciBoID0gYy5jaGFyQ29kZUF0KDApO1xuICAgIDMzID4gaCAmJiAoaCA9IChjID0gYy50cmltKCkpLmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgc3dpdGNoIChoKSB7XG4gICAgICBjYXNlIDM4OlxuICAgICAgICByZXR1cm4gYy5yZXBsYWNlKEYsICckMScgKyBkLnRyaW0oKSk7XG5cbiAgICAgIGNhc2UgNTg6XG4gICAgICAgIHJldHVybiBkLnRyaW0oKSArIGMucmVwbGFjZShGLCAnJDEnICsgZC50cmltKCkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoMCA8IDEgKiBlICYmIDAgPCBjLmluZGV4T2YoJ1xcZicpKSByZXR1cm4gYy5yZXBsYWNlKEYsICg1OCA9PT0gZC5jaGFyQ29kZUF0KDApID8gJycgOiAnJDEnKSArIGQudHJpbSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZCArIGM7XG4gIH1cblxuICBmdW5jdGlvbiBQKGQsIGMsIGUsIGgpIHtcbiAgICB2YXIgYSA9IGQgKyAnOycsXG4gICAgICAgIG0gPSAyICogYyArIDMgKiBlICsgNCAqIGg7XG5cbiAgICBpZiAoOTQ0ID09PSBtKSB7XG4gICAgICBkID0gYS5pbmRleE9mKCc6JywgOSkgKyAxO1xuICAgICAgdmFyIGIgPSBhLnN1YnN0cmluZyhkLCBhLmxlbmd0aCAtIDEpLnRyaW0oKTtcbiAgICAgIGIgPSBhLnN1YnN0cmluZygwLCBkKS50cmltKCkgKyBiICsgJzsnO1xuICAgICAgcmV0dXJuIDEgPT09IHcgfHwgMiA9PT0gdyAmJiBMKGIsIDEpID8gJy13ZWJraXQtJyArIGIgKyBiIDogYjtcbiAgICB9XG5cbiAgICBpZiAoMCA9PT0gdyB8fCAyID09PSB3ICYmICFMKGEsIDEpKSByZXR1cm4gYTtcblxuICAgIHN3aXRjaCAobSkge1xuICAgICAgY2FzZSAxMDE1OlxuICAgICAgICByZXR1cm4gOTcgPT09IGEuY2hhckNvZGVBdCgxMCkgPyAnLXdlYmtpdC0nICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDk1MTpcbiAgICAgICAgcmV0dXJuIDExNiA9PT0gYS5jaGFyQ29kZUF0KDMpID8gJy13ZWJraXQtJyArIGEgKyBhIDogYTtcblxuICAgICAgY2FzZSA5NjM6XG4gICAgICAgIHJldHVybiAxMTAgPT09IGEuY2hhckNvZGVBdCg1KSA/ICctd2Via2l0LScgKyBhICsgYSA6IGE7XG5cbiAgICAgIGNhc2UgMTAwOTpcbiAgICAgICAgaWYgKDEwMCAhPT0gYS5jaGFyQ29kZUF0KDQpKSBicmVhaztcblxuICAgICAgY2FzZSA5Njk6XG4gICAgICBjYXNlIDk0MjpcbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgYTtcblxuICAgICAgY2FzZSA5Nzg6XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbW96LScgKyBhICsgYTtcblxuICAgICAgY2FzZSAxMDE5OlxuICAgICAgY2FzZSA5ODM6XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbW96LScgKyBhICsgJy1tcy0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgODgzOlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg4KSkgcmV0dXJuICctd2Via2l0LScgKyBhICsgYTtcbiAgICAgICAgaWYgKDAgPCBhLmluZGV4T2YoJ2ltYWdlLXNldCgnLCAxMSkpIHJldHVybiBhLnJlcGxhY2UoamEsICckMS13ZWJraXQtJDInKSArIGE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDkzMjpcbiAgICAgICAgaWYgKDQ1ID09PSBhLmNoYXJDb2RlQXQoNCkpIHN3aXRjaCAoYS5jaGFyQ29kZUF0KDUpKSB7XG4gICAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtYm94LScgKyBhLnJlcGxhY2UoJy1ncm93JywgJycpICsgJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBhLnJlcGxhY2UoJ2dyb3cnLCAncG9zaXRpdmUnKSArIGE7XG5cbiAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGEucmVwbGFjZSgnc2hyaW5rJywgJ25lZ2F0aXZlJykgKyBhO1xuXG4gICAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGEucmVwbGFjZSgnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgOTY0OlxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLWZsZXgtJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDEwMjM6XG4gICAgICAgIGlmICg5OSAhPT0gYS5jaGFyQ29kZUF0KDgpKSBicmVhaztcbiAgICAgICAgYiA9IGEuc3Vic3RyaW5nKGEuaW5kZXhPZignOicsIDE1KSkucmVwbGFjZSgnZmxleC0nLCAnJykucmVwbGFjZSgnc3BhY2UtYmV0d2VlbicsICdqdXN0aWZ5Jyk7XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC1ib3gtcGFjaycgKyBiICsgJy13ZWJraXQtJyArIGEgKyAnLW1zLWZsZXgtcGFjaycgKyBiICsgYTtcblxuICAgICAgY2FzZSAxMDA1OlxuICAgICAgICByZXR1cm4ga2EudGVzdChhKSA/IGEucmVwbGFjZShhYSwgJzotd2Via2l0LScpICsgYS5yZXBsYWNlKGFhLCAnOi1tb3otJykgKyBhIDogYTtcblxuICAgICAgY2FzZSAxZTM6XG4gICAgICAgIGIgPSBhLnN1YnN0cmluZygxMykudHJpbSgpO1xuICAgICAgICBjID0gYi5pbmRleE9mKCctJykgKyAxO1xuXG4gICAgICAgIHN3aXRjaCAoYi5jaGFyQ29kZUF0KDApICsgYi5jaGFyQ29kZUF0KGMpKSB7XG4gICAgICAgICAgY2FzZSAyMjY6XG4gICAgICAgICAgICBiID0gYS5yZXBsYWNlKEcsICd0YicpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDIzMjpcbiAgICAgICAgICAgIGIgPSBhLnJlcGxhY2UoRywgJ3RiLXJsJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjIwOlxuICAgICAgICAgICAgYiA9IGEucmVwbGFjZShHLCAnbHInKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYiArIGE7XG5cbiAgICAgIGNhc2UgMTAxNzpcbiAgICAgICAgaWYgKC0xID09PSBhLmluZGV4T2YoJ3N0aWNreScsIDkpKSBicmVhaztcblxuICAgICAgY2FzZSA5NzU6XG4gICAgICAgIGMgPSAoYSA9IGQpLmxlbmd0aCAtIDEwO1xuICAgICAgICBiID0gKDMzID09PSBhLmNoYXJDb2RlQXQoYykgPyBhLnN1YnN0cmluZygwLCBjKSA6IGEpLnN1YnN0cmluZyhkLmluZGV4T2YoJzonLCA3KSArIDEpLnRyaW0oKTtcblxuICAgICAgICBzd2l0Y2ggKG0gPSBiLmNoYXJDb2RlQXQoMCkgKyAoYi5jaGFyQ29kZUF0KDcpIHwgMCkpIHtcbiAgICAgICAgICBjYXNlIDIwMzpcbiAgICAgICAgICAgIGlmICgxMTEgPiBiLmNoYXJDb2RlQXQoOCkpIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICBhID0gYS5yZXBsYWNlKGIsICctd2Via2l0LScgKyBiKSArICc7JyArIGE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjA3OlxuICAgICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgICAgYSA9IGEucmVwbGFjZShiLCAnLXdlYmtpdC0nICsgKDEwMiA8IG0gPyAnaW5saW5lLScgOiAnJykgKyAnYm94JykgKyAnOycgKyBhLnJlcGxhY2UoYiwgJy13ZWJraXQtJyArIGIpICsgJzsnICsgYS5yZXBsYWNlKGIsICctbXMtJyArIGIgKyAnYm94JykgKyAnOycgKyBhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGEgKyAnOyc7XG5cbiAgICAgIGNhc2UgOTM4OlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg1KSkgc3dpdGNoIChhLmNoYXJDb2RlQXQoNikpIHtcbiAgICAgICAgICBjYXNlIDEwNTpcbiAgICAgICAgICAgIHJldHVybiBiID0gYS5yZXBsYWNlKCctaXRlbXMnLCAnJyksICctd2Via2l0LScgKyBhICsgJy13ZWJraXQtYm94LScgKyBiICsgJy1tcy1mbGV4LScgKyBiICsgYTtcblxuICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy1mbGV4LWl0ZW0tJyArIGEucmVwbGFjZShiYSwgJycpICsgYTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLWZsZXgtbGluZS1wYWNrJyArIGEucmVwbGFjZSgnYWxpZ24tY29udGVudCcsICcnKS5yZXBsYWNlKGJhLCAnJykgKyBhO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDk3MzpcbiAgICAgIGNhc2UgOTg5OlxuICAgICAgICBpZiAoNDUgIT09IGEuY2hhckNvZGVBdCgzKSB8fCAxMjIgPT09IGEuY2hhckNvZGVBdCg0KSkgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTMxOlxuICAgICAgY2FzZSA5NTM6XG4gICAgICAgIGlmICghMCA9PT0gbGEudGVzdChkKSkgcmV0dXJuIDExNSA9PT0gKGIgPSBkLnN1YnN0cmluZyhkLmluZGV4T2YoJzonKSArIDEpKS5jaGFyQ29kZUF0KDApID8gUChkLnJlcGxhY2UoJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgYywgZSwgaCkucmVwbGFjZSgnOmZpbGwtYXZhaWxhYmxlJywgJzpzdHJldGNoJykgOiBhLnJlcGxhY2UoYiwgJy13ZWJraXQtJyArIGIpICsgYS5yZXBsYWNlKGIsICctbW96LScgKyBiLnJlcGxhY2UoJ2ZpbGwtJywgJycpKSArIGE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDk2MjpcbiAgICAgICAgaWYgKGEgPSAnLXdlYmtpdC0nICsgYSArICgxMDIgPT09IGEuY2hhckNvZGVBdCg1KSA/ICctbXMtJyArIGEgOiAnJykgKyBhLCAyMTEgPT09IGUgKyBoICYmIDEwNSA9PT0gYS5jaGFyQ29kZUF0KDEzKSAmJiAwIDwgYS5pbmRleE9mKCd0cmFuc2Zvcm0nLCAxMCkpIHJldHVybiBhLnN1YnN0cmluZygwLCBhLmluZGV4T2YoJzsnLCAyNykgKyAxKS5yZXBsYWNlKG1hLCAnJDEtd2Via2l0LSQyJykgKyBhO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9XG5cbiAgZnVuY3Rpb24gTChkLCBjKSB7XG4gICAgdmFyIGUgPSBkLmluZGV4T2YoMSA9PT0gYyA/ICc6JyA6ICd7JyksXG4gICAgICAgIGggPSBkLnN1YnN0cmluZygwLCAzICE9PSBjID8gZSA6IDEwKTtcbiAgICBlID0gZC5zdWJzdHJpbmcoZSArIDEsIGQubGVuZ3RoIC0gMSk7XG4gICAgcmV0dXJuIFIoMiAhPT0gYyA/IGggOiBoLnJlcGxhY2UobmEsICckMScpLCBlLCBjKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVhKGQsIGMpIHtcbiAgICB2YXIgZSA9IFAoYywgYy5jaGFyQ29kZUF0KDApLCBjLmNoYXJDb2RlQXQoMSksIGMuY2hhckNvZGVBdCgyKSk7XG4gICAgcmV0dXJuIGUgIT09IGMgKyAnOycgPyBlLnJlcGxhY2Uob2EsICcgb3IgKCQxKScpLnN1YnN0cmluZyg0KSA6ICcoJyArIGMgKyAnKSc7XG4gIH1cblxuICBmdW5jdGlvbiBIKGQsIGMsIGUsIGgsIGEsIG0sIGIsIHYsIG4sIHEpIHtcbiAgICBmb3IgKHZhciBnID0gMCwgeCA9IGMsIHc7IGcgPCBBOyArK2cpIHtcbiAgICAgIHN3aXRjaCAodyA9IFNbZ10uY2FsbChCLCBkLCB4LCBlLCBoLCBhLCBtLCBiLCB2LCBuLCBxKSkge1xuICAgICAgICBjYXNlIHZvaWQgMDpcbiAgICAgICAgY2FzZSAhMTpcbiAgICAgICAgY2FzZSAhMDpcbiAgICAgICAgY2FzZSBudWxsOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgeCA9IHc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHggIT09IGMpIHJldHVybiB4O1xuICB9XG5cbiAgZnVuY3Rpb24gVChkKSB7XG4gICAgc3dpdGNoIChkKSB7XG4gICAgICBjYXNlIHZvaWQgMDpcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgQSA9IFMubGVuZ3RoID0gMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZCkgU1tBKytdID0gZDtlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIGQpIGZvciAodmFyIGMgPSAwLCBlID0gZC5sZW5ndGg7IGMgPCBlOyArK2MpIHtcbiAgICAgICAgICBUKGRbY10pO1xuICAgICAgICB9IGVsc2UgWSA9ICEhZCB8IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIFQ7XG4gIH1cblxuICBmdW5jdGlvbiBVKGQpIHtcbiAgICBkID0gZC5wcmVmaXg7XG4gICAgdm9pZCAwICE9PSBkICYmIChSID0gbnVsbCwgZCA/ICdmdW5jdGlvbicgIT09IHR5cGVvZiBkID8gdyA9IDEgOiAodyA9IDIsIFIgPSBkKSA6IHcgPSAwKTtcbiAgICByZXR1cm4gVTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEIoZCwgYykge1xuICAgIHZhciBlID0gZDtcbiAgICAzMyA+IGUuY2hhckNvZGVBdCgwKSAmJiAoZSA9IGUudHJpbSgpKTtcbiAgICBWID0gZTtcbiAgICBlID0gW1ZdO1xuXG4gICAgaWYgKDAgPCBBKSB7XG4gICAgICB2YXIgaCA9IEgoLTEsIGMsIGUsIGUsIEQsIHosIDAsIDAsIDAsIDApO1xuICAgICAgdm9pZCAwICE9PSBoICYmICdzdHJpbmcnID09PSB0eXBlb2YgaCAmJiAoYyA9IGgpO1xuICAgIH1cblxuICAgIHZhciBhID0gTShPLCBlLCBjLCAwLCAwKTtcbiAgICAwIDwgQSAmJiAoaCA9IEgoLTIsIGEsIGUsIGUsIEQsIHosIGEubGVuZ3RoLCAwLCAwLCAwKSwgdm9pZCAwICE9PSBoICYmIChhID0gaCkpO1xuICAgIFYgPSAnJztcbiAgICBFID0gMDtcbiAgICB6ID0gRCA9IDE7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgY2EgPSAvXlxcMCsvZyxcbiAgICAgIE4gPSAvW1xcMFxcclxcZl0vZyxcbiAgICAgIGFhID0gLzogKi9nLFxuICAgICAga2EgPSAvem9vfGdyYS8sXG4gICAgICBtYSA9IC8oWyw6IF0pKHRyYW5zZm9ybSkvZyxcbiAgICAgIGlhID0gLyxcXHIrPy9nLFxuICAgICAgRiA9IC8oW1xcdFxcclxcbiBdKSpcXGY/Ji9nLFxuICAgICAgZmEgPSAvQChrXFx3KylcXHMqKFxcUyopXFxzKi8sXG4gICAgICBRID0gLzo6KHBsYWNlKS9nLFxuICAgICAgaGEgPSAvOihyZWFkLW9ubHkpL2csXG4gICAgICBHID0gL1tzdmhdXFx3Ky1bdGJscl17Mn0vLFxuICAgICAgZGEgPSAvXFwoXFxzKiguKilcXHMqXFwpL2csXG4gICAgICBvYSA9IC8oW1xcc1xcU10qPyk7L2csXG4gICAgICBiYSA9IC8tc2VsZnxmbGV4LS9nLFxuICAgICAgbmEgPSAvW15dKj8oOltycF1bZWxdYVtcXHctXSspW15dKi8sXG4gICAgICBsYSA9IC9zdHJldGNofDpcXHMqXFx3K1xcLSg/OmNvbnRlfGF2YWlsKS8sXG4gICAgICBqYSA9IC8oW14tXSkoaW1hZ2Utc2V0XFwoKS8sXG4gICAgICB6ID0gMSxcbiAgICAgIEQgPSAxLFxuICAgICAgRSA9IDAsXG4gICAgICB3ID0gMSxcbiAgICAgIE8gPSBbXSxcbiAgICAgIFMgPSBbXSxcbiAgICAgIEEgPSAwLFxuICAgICAgUiA9IG51bGwsXG4gICAgICBZID0gMCxcbiAgICAgIFYgPSAnJztcbiAgQi51c2UgPSBUO1xuICBCLnNldCA9IFU7XG4gIHZvaWQgMCAhPT0gVyAmJiBVKFcpO1xuICByZXR1cm4gQjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGlzX21pbjtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIGNyZWF0ZUVsZW1lbnQsIGZvcndhcmRSZWYsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCBjc3MgZnJvbSAnQGVtb3Rpb24vY3NzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3NzIH0gZnJvbSAnQGVtb3Rpb24vY3NzJztcblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoY3JlYXRlQ2FjaGUoKSk7XG52YXIgVGhlbWVDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG52YXIgQ2FjaGVQcm92aWRlciA9IEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXI7XG5cbnZhciB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KEVtb3Rpb25DYWNoZUNvbnRleHQuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uICggLy8gJEZsb3dGaXhNZSB3ZSBrbm93IGl0IHdvbid0IGJlIG51bGxcbiAgICBjYWNoZSkge1xuICAgICAgcmV0dXJuIGZ1bmMocHJvcHMsIGNhY2hlLCByZWYpO1xuICAgIH0pO1xuICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICByZXR1cm4gZm9yd2FyZFJlZihyZW5kZXIpO1xufTtcblxudmFyIHR5cGVQcm9wTmFtZSA9ICdfX0VNT1RJT05fVFlQRV9QTEVBU0VfRE9fTk9UX1VTRV9fJztcbnZhciBsYWJlbFByb3BOYW1lID0gJ19fRU1PVElPTl9MQUJFTF9QTEVBU0VfRE9fTk9UX1VTRV9fJztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoY2FjaGUsIHByb3BzLCB0aGVtZSwgcmVmKSB7XG4gIHZhciB0eXBlID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuICB2YXIgY3NzUHJvcCA9IHRoZW1lID09PSBudWxsID8gcHJvcHMuY3NzIDogcHJvcHMuY3NzKHRoZW1lKTsgLy8gc28gdGhhdCB1c2luZyBgY3NzYCBmcm9tIGBlbW90aW9uYCBhbmQgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHRoZSBjc3MgcHJvcCB3b3Jrc1xuICAvLyBub3QgcGFzc2luZyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBzZXJpYWxpemVTdHlsZXMgYmVjYXVzZSBpdCB3b3VsZFxuICAvLyBtYWtlIGNlcnRhaW4gYmFiZWwgb3B0aW1pc2F0aW9ucyBub3QgcG9zc2libGVcblxuICBpZiAodHlwZW9mIGNzc1Byb3AgPT09ICdzdHJpbmcnICYmIGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNzc1Byb3AgPSBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdO1xuICB9XG5cbiAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKGNzc1Byb3ApO1xuXG4gIGlmIChwcm9wcy5jbGFzc05hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHNlcmlhbGl6ZWQubmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgdmFyIGxhYmVsRnJvbVN0YWNrID0gcHJvcHNbbGFiZWxQcm9wTmFtZV07XG5cbiAgICBpZiAobGFiZWxGcm9tU3RhY2spIHtcbiAgICAgIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoW3NlcmlhbGl6ZWQsICdsYWJlbDonICsgbGFiZWxGcm9tU3RhY2sgKyAnOyddKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcnVsZXMgPSBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyk7XG4gIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyB8fCBrZXkgIT09IGxhYmVsUHJvcE5hbWUpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgdmFyIGVsZSA9IGNyZWF0ZUVsZW1lbnQodHlwZSwgbmV3UHJvcHMpO1xuXG4gIHJldHVybiBlbGU7XG59O1xuXG52YXIgRW1vdGlvbiA9IHdpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSwgcmVmKSB7XG4gIC8vIHVzZSBDb250ZXh0LnJlYWQgZm9yIHRoZSB0aGVtZSB3aGVuIGl0J3Mgc3RhYmxlXG4gIGlmICh0eXBlb2YgcHJvcHMuY3NzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAodGhlbWUpIHtcbiAgICAgIHJldHVybiByZW5kZXIoY2FjaGUsIHByb3BzLCB0aGVtZSwgcmVmKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZW5kZXIoY2FjaGUsIHByb3BzLCBudWxsLCByZWYpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb24uZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNzc1Byb3BJbnRlcm5hbCc7XG59IC8vICRGbG93Rml4TWVcblxuXG52YXIganN4ID0gZnVuY3Rpb24ganN4KHR5cGUsIHByb3BzKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8IHByb3BzLmNzcyA9PSBudWxsKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50LmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgcHJvcHMuY3NzID09PSAnc3RyaW5nJyAmJiAvLyBjaGVjayBpZiB0aGVyZSBpcyBhIGNzcyBkZWNsYXJhdGlvblxuICBwcm9wcy5jc3MuaW5kZXhPZignOicpICE9PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmluZ3MgYXJlIG5vdCBhbGxvd2VkIGFzIGNzcyBwcm9wIHZhbHVlcywgcGxlYXNlIHdyYXAgaXQgaW4gYSBjc3MgdGVtcGxhdGUgbGl0ZXJhbCBmcm9tICdAZW1vdGlvbi9jc3MnIGxpa2UgdGhpczogY3NzYFwiICsgcHJvcHMuY3NzICsgXCJgXCIpO1xuICB9XG5cbiAgdmFyIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSA9IG5ldyBBcnJheShhcmdzTGVuZ3RoKTtcbiAgY3JlYXRlRWxlbWVudEFyZ0FycmF5WzBdID0gRW1vdGlvbjtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIGtleSkpIHtcbiAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzW3R5cGVQcm9wTmFtZV0gPSB0eXBlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCk7XG5cbiAgICBpZiAoZXJyb3Iuc3RhY2spIHtcbiAgICAgIC8vIGNocm9tZVxuICAgICAgdmFyIG1hdGNoID0gZXJyb3Iuc3RhY2subWF0Y2goL2F0IGpzeC4qXFxuXFxzK2F0IChbQS1aXVtBLVphLXpdKykgLyk7XG5cbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgLy8gc2FmYXJpIGFuZCBmaXJlZm94XG4gICAgICAgIG1hdGNoID0gZXJyb3Iuc3RhY2subWF0Y2goL14uKlxcbihbQS1aXVtBLVphLXpdKylALyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBuZXdQcm9wc1tsYWJlbFByb3BOYW1lXSA9IG1hdGNoWzFdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IG5ld1Byb3BzO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSB7XG4gICAgY3JlYXRlRWxlbWVudEFyZ0FycmF5W2ldID0gYXJnc1tpXTtcbiAgfSAvLyAkRmxvd0ZpeE1lXG5cblxuICByZXR1cm4gY3JlYXRlRWxlbWVudC5hcHBseShudWxsLCBjcmVhdGVFbGVtZW50QXJnQXJyYXkpO1xufTtcblxudmFyIHdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCA9IGZhbHNlO1xudmFyIEdsb2JhbCA9XG4vKiAjX19QVVJFX18gKi9cbndpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsICYmICggLy8gY2hlY2sgZm9yIGNsYXNzTmFtZSBhcyB3ZWxsIHNpbmNlIHRoZSB1c2VyIGlzXG4gIC8vIHByb2JhYmx5IHVzaW5nIHRoZSBjdXN0b20gY3JlYXRlRWxlbWVudCB3aGljaFxuICAvLyBtZWFucyBpdCB3aWxsIGJlIHR1cm5lZCBpbnRvIGEgY2xhc3NOYW1lIHByb3BcbiAgLy8gJEZsb3dGaXhNZSBJIGRvbid0IHJlYWxseSB3YW50IHRvIGFkZCBpdCB0byB0aGUgdHlwZSBzaW5jZSBpdCBzaG91bGRuJ3QgYmUgdXNlZFxuICBwcm9wcy5jbGFzc05hbWUgfHwgcHJvcHMuY3NzKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyB0aGUgY3NzIHByb3Agb24gR2xvYmFsLCBkaWQgeW91IG1lYW4gdG8gdXNlIHRoZSBzdHlsZXMgcHJvcCBpbnN0ZWFkP1wiKTtcbiAgICB3YXJuZWRBYm91dENzc1Byb3BGb3JHbG9iYWwgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHN0eWxlcyA9IHByb3BzLnN0eWxlcztcblxuICBpZiAodHlwZW9mIHN0eWxlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFRoZW1lQ29udGV4dC5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhbc3R5bGVzKHRoZW1lKV0pO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoSW5uZXJHbG9iYWwsIHtcbiAgICAgICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICAgICAgY2FjaGU6IGNhY2hlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzdHlsZXNdKTtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoSW5uZXJHbG9iYWwsIHtcbiAgICBzZXJpYWxpemVkOiBzZXJpYWxpemVkLFxuICAgIGNhY2hlOiBjYWNoZVxuICB9KTtcbn0pO1xuXG4vLyBtYWludGFpbiBwbGFjZSBvdmVyIHJlcmVuZGVycy5cbi8vIGluaXRpYWwgcmVuZGVyIGZyb20gYnJvd3NlciwgaW5zZXJ0QmVmb3JlIGNvbnRleHQuc2hlZXQudGFnc1swXSBvciBpZiBhIHN0eWxlIGhhc24ndCBiZWVuIGluc2VydGVkIHRoZXJlIHlldCwgYXBwZW5kQ2hpbGRcbi8vIGluaXRpYWwgY2xpZW50LXNpZGUgcmVuZGVyIGZyb20gU1NSLCB1c2UgcGxhY2Ugb2YgaHlkcmF0aW5nIHRhZ1xudmFyIElubmVyR2xvYmFsID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKElubmVyR2xvYmFsLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBJbm5lckdsb2JhbChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICAgIHJldHVybiBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gSW5uZXJHbG9iYWwucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuc2hlZXQgPSBuZXcgU3R5bGVTaGVldCh7XG4gICAgICBrZXk6IHRoaXMucHJvcHMuY2FjaGUua2V5ICsgXCItZ2xvYmFsXCIsXG4gICAgICBub25jZTogdGhpcy5wcm9wcy5jYWNoZS5zaGVldC5ub25jZSxcbiAgICAgIGNvbnRhaW5lcjogdGhpcy5wcm9wcy5jYWNoZS5zaGVldC5jb250YWluZXJcbiAgICB9KTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uLVwiICsgdGhpcy5wcm9wcy5jYWNoZS5rZXkgKyBcIj1cXFwiXCIgKyB0aGlzLnByb3BzLnNlcmlhbGl6ZWQubmFtZSArIFwiXFxcIl1cIik7XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5zaGVldC50YWdzLnB1c2gobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuY2FjaGUuc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2hlZXQuYmVmb3JlID0gdGhpcy5wcm9wcy5jYWNoZS5zaGVldC50YWdzWzBdO1xuICAgIH1cblxuICAgIHRoaXMuaW5zZXJ0U3R5bGVzKCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBpZiAocHJldlByb3BzLnNlcmlhbGl6ZWQubmFtZSAhPT0gdGhpcy5wcm9wcy5zZXJpYWxpemVkLm5hbWUpIHtcbiAgICAgIHRoaXMuaW5zZXJ0U3R5bGVzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5pbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMkJDEoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyh0aGlzLnByb3BzLmNhY2hlLCB0aGlzLnByb3BzLnNlcmlhbGl6ZWQubmV4dCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHRoaXMuc2hlZXQudGFnc1t0aGlzLnNoZWV0LnRhZ3MubGVuZ3RoIC0gMV0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgdGhpcy5zaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgdGhpcy5zaGVldC5mbHVzaCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMuY2FjaGUuaW5zZXJ0KFwiXCIsIHRoaXMucHJvcHMuc2VyaWFsaXplZCwgdGhpcy5zaGVldCwgZmFsc2UpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuc2hlZXQuZmx1c2goKTtcbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIElubmVyR2xvYmFsO1xufShDb21wb25lbnQpO1xuXG52YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICB2YXIgaW5zZXJ0YWJsZSA9IGNzcy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIHZhciBuYW1lID0gXCJhbmltYXRpb24tXCIgKyBpbnNlcnRhYmxlLm5hbWU7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MkJDEsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyQkMShyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIENsYXNzTmFtZXMgPSB3aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY29udGV4dCkge1xuICByZXR1cm4gY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuXG4gICAgdmFyIGNzcyQkMSA9IGZ1bmN0aW9uIGNzcyQkMSgpIHtcbiAgICAgIGlmIChoYXNSZW5kZXJlZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY29udGV4dC5yZWdpc3RlcmVkKTtcblxuICAgICAge1xuICAgICAgICBpbnNlcnRTdHlsZXMoY29udGV4dCwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGV4dC5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgICB9O1xuXG4gICAgdmFyIGN4ID0gZnVuY3Rpb24gY3goKSB7XG4gICAgICBpZiAoaGFzUmVuZGVyZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2N4IGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVyZ2UoY29udGV4dC5yZWdpc3RlcmVkLCBjc3MkJDEsIGNsYXNzbmFtZXMoYXJncykpO1xuICAgIH07XG5cbiAgICB2YXIgY29udGVudCA9IHtcbiAgICAgIGNzczogY3NzJCQxLFxuICAgICAgY3g6IGN4LFxuICAgICAgdGhlbWU6IHRoZW1lXG4gICAgfTtcbiAgICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gICAgaGFzUmVuZGVyZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGVsZTtcbiAgfSk7XG59KTtcblxuZXhwb3J0IHsgd2l0aEVtb3Rpb25DYWNoZSwgQ2FjaGVQcm92aWRlciwgVGhlbWVDb250ZXh0LCBqc3gsIEdsb2JhbCwga2V5ZnJhbWVzLCBDbGFzc05hbWVzIH07XG4iLCJpbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjc3M7XG4iLCJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIGFuaW1hdGlvblJlZ2V4ID0gL19FTU9fKFteX10rPylfKFteXSo/KV9FTU9fL2c7XG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IG1lbW9pemUoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICBuYW1lOiBwMSxcbiAgICAgICAgICAgICAgc3R5bGVzOiBwMixcbiAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAxO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBpZiAodW5pdGxlc3Nba2V5XSAhPT0gMSAmJiBrZXkuY2hhckNvZGVBdCgxKSAhPT0gNDUgJiYgLy8gY3VzdG9tIHByb3BlcnRpZXNcbiAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgY29udGVudFZhbHVlUGF0dGVybiA9IC8oYXR0cnxjYWxjfGNvdW50ZXJzP3x1cmwpXFwoLztcbiAgdmFyIGNvbnRlbnRWYWx1ZXMgPSBbJ25vcm1hbCcsICdub25lJywgJ2NvdW50ZXInLCAnb3Blbi1xdW90ZScsICdjbG9zZS1xdW90ZScsICduby1vcGVuLXF1b3RlJywgJ25vLWNsb3NlLXF1b3RlJywgJ2luaXRpYWwnLCAnaW5oZXJpdCcsICd1bnNldCddO1xuICB2YXIgb2xkUHJvY2Vzc1N0eWxlVmFsdWUgPSBwcm9jZXNzU3R5bGVWYWx1ZTtcbiAgdmFyIG1zUGF0dGVybiA9IC9eLW1zLS87XG4gIHZhciBoeXBoZW5QYXR0ZXJuID0gLy0oLikvZztcbiAgdmFyIGh5cGhlbmF0ZWRDYWNoZSA9IHt9O1xuXG4gIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgPT09ICdjb250ZW50Jykge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgY29udGVudFZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEgJiYgIWNvbnRlbnRWYWx1ZVBhdHRlcm4udGVzdCh2YWx1ZSkgJiYgKHZhbHVlLmNoYXJBdCgwKSAhPT0gdmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aCAtIDEpIHx8IHZhbHVlLmNoYXJBdCgwKSAhPT0gJ1wiJyAmJiB2YWx1ZS5jaGFyQXQoMCkgIT09IFwiJ1wiKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiWW91IHNlZW0gdG8gYmUgdXNpbmcgYSB2YWx1ZSBmb3IgJ2NvbnRlbnQnIHdpdGhvdXQgcXVvdGVzLCB0cnkgcmVwbGFjaW5nIGl0IHdpdGggYGNvbnRlbnQ6ICdcXFwiXCIgKyB2YWx1ZSArIFwiXFxcIidgXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcm9jZXNzZWQgPSBvbGRQcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKTtcbiAgICB2YXIgaXNDc3NWYXJpYWJsZSA9IGtleS5jaGFyQ29kZUF0KDEpID09PSA0NTtcblxuICAgIGlmIChwcm9jZXNzZWQgIT09ICcnICYmICFpc0Nzc1ZhcmlhYmxlICYmIGtleS5pbmRleE9mKCctJykgIT09IC0xICYmIGh5cGhlbmF0ZWRDYWNoZVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGh5cGhlbmF0ZWRDYWNoZVtrZXldID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJVc2luZyBrZWJhYi1jYXNlIGZvciBjc3MgcHJvcGVydGllcyBpbiBvYmplY3RzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiBcIiArIGtleS5yZXBsYWNlKG1zUGF0dGVybiwgJ21zLScpLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKHN0ciwgY2hhcikge1xuICAgICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpO1xuICAgICAgfSkgKyBcIj9cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfTtcbn1cblxudmFyIHNob3VsZFdhcm5BYm91dEludGVycG9sYXRpbmdDbGFzc05hbWVGcm9tQ3NzID0gdHJ1ZTtcblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbiwgY291bGRCZVNlbGVjdG9ySW50ZXJwb2xhdGlvbikge1xuICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGludGVycG9sYXRpb24uX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW50ZXJwb2xhdGlvbi50b1N0cmluZygpID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBiYWJlbC1wbHVnaW4tZW1vdGlvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIGludGVycG9sYXRpb24pIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGludGVycG9sYXRpb24uYW5pbSA9PT0gMSkge1xuICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGludGVycG9sYXRpb24ubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczogaW50ZXJwb2xhdGlvbi5zdHlsZXMsXG4gICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBpbnRlcnBvbGF0aW9uLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBuZXh0ID0gaW50ZXJwb2xhdGlvbi5uZXh0O1xuXG4gICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyBldmVyIGJ1dCB0aGlzIGlzIGEgcHJldHR5IHJhcmUgY2FzZVxuICAgICAgICAgICAgLy8gYW5kIHRoZXJlIHdpbGwgYmUgdmVyeSBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGdlbmVyYWxseVxuICAgICAgICAgICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmV4dC5uYW1lLFxuICAgICAgICAgICAgICAgIHN0eWxlczogbmV4dC5zdHlsZXMsXG4gICAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlcyA9IGludGVycG9sYXRpb24uc3R5bGVzO1xuXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW50ZXJwb2xhdGlvbi5tYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3R5bGVzICs9IGludGVycG9sYXRpb24ubWFwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0LCBjb3VsZEJlU2VsZWN0b3JJbnRlcnBvbGF0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRnVuY3Rpb25zIHRoYXQgYXJlIGludGVycG9sYXRlZCBpbiBjc3MgY2FsbHMgd2lsbCBiZSBzdHJpbmdpZmllZC5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIGhhdmUgYSBjc3MgY2FsbCBiYXNlZCBvbiBwcm9wcywgY3JlYXRlIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY3NzIGNhbGwgbGlrZSB0aGlzXFxuJyArICdsZXQgZHluYW1pY1N0eWxlID0gKHByb3BzKSA9PiBjc3NgY29sb3I6ICR7cHJvcHMuY29sb3J9YFxcbicgKyAnSXQgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSB3aXRoIHByb3BzIG9yIGludGVycG9sYXRlZCBpbiBhIHN0eWxlZCBjYWxsIGxpa2UgdGhpc1xcbicgKyBcImxldCBTb21lQ29tcG9uZW50ID0gc3R5bGVkKCdkaXYnKWAke2R5bmFtaWNTdHlsZX1gXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICBpZiAocmVnaXN0ZXJlZCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGludGVycG9sYXRpb247XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2FjaGVkID0gcmVnaXN0ZXJlZFtpbnRlcnBvbGF0aW9uXTtcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb3VsZEJlU2VsZWN0b3JJbnRlcnBvbGF0aW9uICYmIHNob3VsZFdhcm5BYm91dEludGVycG9sYXRpbmdDbGFzc05hbWVGcm9tQ3NzICYmIGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignSW50ZXJwb2xhdGluZyBhIGNsYXNzTmFtZSBmcm9tIGNzc2BgIGlzIG5vdCByZWNvbW1lbmRlZCBhbmQgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoIGNvbXBvc2l0aW9uLlxcbicgKyAnSW50ZXJwb2xhdGluZyBhIGNsYXNzTmFtZSBmcm9tIGNzc2BgIHdpbGwgYmUgY29tcGxldGVseSB1bnN1cHBvcnRlZCBpbiBhIGZ1dHVyZSBtYWpvciB2ZXJzaW9uIG9mIEVtb3Rpb24nKTtcbiAgICAgICAgICBzaG91bGRXYXJuQWJvdXRJbnRlcnBvbGF0aW5nQ2xhc3NOYW1lRnJvbUNzcyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkICYmICFjb3VsZEJlU2VsZWN0b3JJbnRlcnBvbGF0aW9uID8gY2FjaGVkIDogaW50ZXJwb2xhdGlvbjtcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmopIHtcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9ialtpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBfa2V5IGluIG9iaikge1xuICAgICAgdmFyIHZhbHVlID0gb2JqW19rZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVnaXN0ZXJlZCAhPSBudWxsICYmIHJlZ2lzdGVyZWRbdmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgcmVnaXN0ZXJlZFt2YWx1ZV0gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWUpICsgXCI7XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChfa2V5ID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBiYWJlbC1wbHVnaW4tZW1vdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdzdHJpbmcnICYmIChyZWdpc3RlcmVkID09IG51bGwgfHwgcmVnaXN0ZXJlZFt2YWx1ZVswXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdmFsdWUubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUsIGZhbHNlKSArIFwifVwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqOy9nO1xudmFyIHNvdXJjZU1hcFBhdHRlcm47XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNvdXJjZU1hcFBhdHRlcm4gPSAvXFwvXFwqI1xcc3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247XFxTK1xccytcXCpcXC8vO1xufSAvLyB0aGlzIGlzIHRoZSBjdXJzb3IgZm9yIGtleWZyYW1lc1xuLy8ga2V5ZnJhbWVzIGFyZSBzdG9yZWQgb24gdGhlIFNlcmlhbGl6ZWRTdHlsZXMgb2JqZWN0IGFzIGEgbGlua2VkIGxpc3RcblxuXG52YXIgY3Vyc29yO1xudmFyIHNlcmlhbGl6ZVN0eWxlcyA9IGZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncywgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlcyArPSBzdHJpbmdzWzBdO1xuICB9IC8vIHdlIHN0YXJ0IGF0IDEgc2luY2Ugd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBmaXJzdCBhcmdcblxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBhcmdzW2ldLCBzdHlsZXMuY2hhckNvZGVBdChzdHlsZXMubGVuZ3RoIC0gMSkgPT09IDQ2KTtcblxuICAgIGlmIChzdHJpbmdNb2RlKSB7XG4gICAgICBzdHlsZXMgKz0gc3RyaW5nc1tpXTtcbiAgICB9XG4gIH1cblxuICB2YXIgc291cmNlTWFwO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgc3R5bGVzID0gc3R5bGVzLnJlcGxhY2Uoc291cmNlTWFwUGF0dGVybiwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICBzb3VyY2VNYXAgPSBtYXRjaDtcbiAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbiAgfSAvLyB1c2luZyBhIGdsb2JhbCByZWdleCB3aXRoIC5leGVjIGlzIHN0YXRlZnVsIHNvIGxhc3RJbmRleCBoYXMgdG8gYmUgcmVzZXQgZWFjaCB0aW1lXG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyAvLyAkRmxvd0ZpeE1lIHdlIGtub3cgaXQncyBub3QgbnVsbFxuICAgIG1hdGNoWzFdO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBoYXNoU3RyaW5nKHN0eWxlcykgKyBpZGVudGlmaWVyTmFtZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgICBtYXA6IHNvdXJjZU1hcCxcbiAgICAgIG5leHQ6IGN1cnNvclxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgbmV4dDogY3Vyc29yXG4gIH07XG59O1xuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBtdXJtdXJoYXNoMiB2aWEgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzL2Jsb2IvbWFzdGVyL211cm11cmhhc2gyX2djLmpzXG5mdW5jdGlvbiBtdXJtdXJoYXNoMl8zMl9nYyhzdHIpIHtcbiAgdmFyIGwgPSBzdHIubGVuZ3RoLFxuICAgICAgaCA9IGwgXiBsLFxuICAgICAgaSA9IDAsXG4gICAgICBrO1xuXG4gIHdoaWxlIChsID49IDQpIHtcbiAgICBrID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmIHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQ7XG4gICAgayA9IChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKChrID4+PiAxNikgKiAweDViZDFlOTk1ICYgMHhmZmZmKSA8PCAxNik7XG4gICAgayBePSBrID4+PiAyNDtcbiAgICBrID0gKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoKGsgPj4+IDE2KSAqIDB4NWJkMWU5OTUgJiAweGZmZmYpIDw8IDE2KTtcbiAgICBoID0gKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoKGggPj4+IDE2KSAqIDB4NWJkMWU5OTUgJiAweGZmZmYpIDw8IDE2KSBeIGs7XG4gICAgbCAtPSA0O1xuICAgICsraTtcbiAgfVxuXG4gIHN3aXRjaCAobCkge1xuICAgIGNhc2UgMzpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXG4gICAgY2FzZSAyOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcblxuICAgIGNhc2UgMTpcbiAgICAgIGggXj0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgaCA9IChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKChoID4+PiAxNikgKiAweDViZDFlOTk1ICYgMHhmZmZmKSA8PCAxNik7XG4gIH1cblxuICBoIF49IGggPj4+IDEzO1xuICBoID0gKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoKGggPj4+IDE2KSAqIDB4NWJkMWU5OTUgJiAweGZmZmYpIDw8IDE2KTtcbiAgaCBePSBoID4+PiAxNTtcbiAgcmV0dXJuIChoID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG11cm11cmhhc2gyXzMyX2djO1xuIiwiZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZTtcbiIsInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICB0YWJTaXplOiAxLFxuICB3aWRvd3M6IDEsXG4gIHpJbmRleDogMSxcbiAgem9vbTogMSxcbiAgV2Via2l0TGluZUNsYW1wOiAxLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAxLFxuICBmbG9vZE9wYWNpdHk6IDEsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gIHN0cm9rZU9wYWNpdHk6IDEsXG4gIHN0cm9rZVdpZHRoOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCB1bml0bGVzc0tleXM7XG4iLCIvKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIOKdpO+4j1xuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuLy8gJEZsb3dGaXhNZVxuZnVuY3Rpb24gc2hlZXRGb3JUYWcodGFnKSB7XG4gIGlmICh0YWcuc2hlZXQpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIHRhZy5zaGVldDtcbiAgfSAvLyB0aGlzIHdlaXJkbmVzcyBicm91Z2h0IHRvIHlvdSBieSBmaXJlZm94XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlID09PSB0YWcpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIG9wdGlvbnMua2V5KTtcblxuICBpZiAob3B0aW9ucy5ub25jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBvcHRpb25zLm5vbmNlKTtcbiAgfVxuXG4gIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpO1xuICByZXR1cm4gdGFnO1xufVxuXG52YXIgU3R5bGVTaGVldCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0eWxlU2hlZXQob3B0aW9ucykge1xuICAgIHRoaXMuaXNTcGVlZHkgPSBvcHRpb25zLnNwZWVkeSA9PT0gdW5kZWZpbmVkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLmJlZm9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmluc2VydCA9IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgLy8gdGhlIG1heCBsZW5ndGggaXMgaG93IG1hbnkgcnVsZXMgd2UgaGF2ZSBwZXIgc3R5bGUgdGFnLCBpdCdzIDY1MDAwIGluIHNwZWVkeSBtb2RlXG4gICAgLy8gaXQncyAxIGluIGRldiBiZWNhdXNlIHdlIGluc2VydCBzb3VyY2UgbWFwcyB0aGF0IG1hcCBhIHNpbmdsZSBydWxlIHRvIGEgbG9jYXRpb25cbiAgICAvLyBhbmQgeW91IGNhbiBvbmx5IGhhdmUgb25lIHNvdXJjZSBtYXAgcGVyIHN0eWxlIHRhZ1xuICAgIGlmICh0aGlzLmN0ciAlICh0aGlzLmlzU3BlZWR5ID8gNjUwMDAgOiAxKSA9PT0gMCkge1xuICAgICAgdmFyIF90YWcgPSBjcmVhdGVTdHlsZUVsZW1lbnQodGhpcyk7XG5cbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmICh0aGlzLnRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGJlZm9yZSA9IHRoaXMuYmVmb3JlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVmb3JlID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXS5uZXh0U2libGluZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKF90YWcsIGJlZm9yZSk7XG4gICAgICB0aGlzLnRhZ3MucHVzaChfdGFnKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIGEgcmVhbGx5IGhvdCBwYXRoXG4gICAgICAgIC8vIHdlIGNoZWNrIHRoZSBzZWNvbmQgY2hhcmFjdGVyIGZpcnN0IGJlY2F1c2UgaGF2aW5nIFwiaVwiXG4gICAgICAgIC8vIGFzIHRoZSBzZWNvbmQgY2hhcmFjdGVyIHdpbGwgaGFwcGVuIGxlc3Mgb2Z0ZW4gdGhhblxuICAgICAgICAvLyBoYXZpbmcgXCJAXCIgYXMgdGhlIGZpcnN0IGNoYXJhY3RlclxuICAgICAgICB2YXIgaXNJbXBvcnRSdWxlID0gcnVsZS5jaGFyQ29kZUF0KDEpID09PSAxMDUgJiYgcnVsZS5jaGFyQ29kZUF0KDApID09PSA2NDsgLy8gdGhpcyBpcyB0aGUgdWx0cmFmYXN0IHZlcnNpb24sIHdvcmtzIGFjcm9zcyBicm93c2Vyc1xuICAgICAgICAvLyB0aGUgYmlnIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGNzcyB3b24ndCBiZSBlZGl0YWJsZSBpbiBkZXZ0b29sc1xuXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgLy8gd2UgbmVlZCB0byBpbnNlcnQgQGltcG9ydCBydWxlcyBiZWZvcmUgYW55dGhpbmcgZWxzZVxuICAgICAgICAvLyBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhbiBlcnJvclxuICAgICAgICAvLyB0ZWNobmljYWxseSB0aGlzIG1lYW5zIHRoYXQgdGhlIEBpbXBvcnQgcnVsZXMgd2lsbFxuICAgICAgICAvLyBfdXN1YWxseV8obm90IGFsd2F5cyBzaW5jZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBzdHlsZSB0YWdzKVxuICAgICAgICAvLyBiZSB0aGUgZmlyc3Qgb25lcyBpbiBwcm9kIGFuZCBnZW5lcmFsbHkgbGF0ZXIgaW4gZGV2XG4gICAgICAgIC8vIHRoaXMgc2hvdWxkbid0IHJlYWxseSBtYXR0ZXIgaW4gdGhlIHJlYWwgd29ybGQgdGhvdWdoXG4gICAgICAgIC8vIEBpbXBvcnQgaXMgZ2VuZXJhbGx5IG9ubHkgdXNlZCBmb3IgZm9udCBmYWNlcyBmcm9tIGdvb2dsZSBmb250cyBhbmQgZXRjLlxuICAgICAgICAvLyBzbyB3aGlsZSB0aGlzIGNvdWxkIGJlIHRlY2huaWNhbGx5IGNvcnJlY3QgdGhlbiBpdCB3b3VsZCBiZSBzbG93ZXIgYW5kIGxhcmdlclxuICAgICAgICAvLyBmb3IgYSB0aW55IGJpdCBvZiBjb3JyZWN0bmVzcyB0aGF0IHdvbid0IG1hdHRlciBpbiB0aGUgcmVhbCB3b3JsZFxuICAgICAgICBpc0ltcG9ydFJ1bGUgPyAwIDogc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJUaGVyZSB3YXMgYSBwcm9ibGVtIGluc2VydGluZyB0aGUgZm9sbG93aW5nIHJ1bGU6IFxcXCJcIiArIHJ1bGUgKyBcIlxcXCJcIiwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICB0aGlzLnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnKSB7XG4gICAgICByZXR1cm4gdGFnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsInZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbn1cbnZhciBpbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgJiYgY2FjaGUuY29tcGF0ICE9PSB1bmRlZmluZWQpICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cblxuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzZXJpYWxpemVkO1xuXG4gICAgZG8ge1xuICAgICAgdmFyIG1heWJlU3R5bGVzID0gY2FjaGUuaW5zZXJ0KFwiLlwiICsgY2xhc3NOYW1lLCBjdXJyZW50LCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgfSB3aGlsZSAoY3VycmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzIH07XG4iLCJ2YXIgd2Vha01lbW9pemUgPSBmdW5jdGlvbiB3ZWFrTWVtb2l6ZShmdW5jKSB7XG4gIC8vICRGbG93Rml4TWUgZmxvdyBkb2Vzbid0IGluY2x1ZGUgYWxsIG5vbi1wcmltaXRpdmUgdHlwZXMgYXMgYWxsb3dlZCBmb3Igd2Vha21hcHNcbiAgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGUuaGFzKGFyZykpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoYXJnKTtcbiAgICB9XG5cbiAgICB2YXIgcmV0ID0gZnVuYyhhcmcpO1xuICAgIGNhY2hlLnNldChhcmcsIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdlYWtNZW1vaXplO1xuIiwiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UnO1xuXG4vLyAgICAgIFxudmFyIHRvUGF0aCA9IGZ1bmN0aW9uIHRvUGF0aChrZXkpIHtcbiAgaWYgKGtleSA9PT0gbnVsbCB8fCBrZXkgPT09IHVuZGVmaW5lZCB8fCAha2V5Lmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcigndG9QYXRoKCkgZXhwZWN0cyBhIHN0cmluZycpO1xuICB9XG5cbiAgcmV0dXJuIGtleS5zcGxpdCgvWy5bXFxdXSsvKS5maWx0ZXIoQm9vbGVhbik7XG59O1xuXG4vLyAgICAgIFxuXG52YXIgZ2V0SW4gPSBmdW5jdGlvbiBnZXRJbihzdGF0ZSwgY29tcGxleEtleSkge1xuICAvLyBJbnRlbnRpb25hbGx5IHVzaW5nIGl0ZXJhdGlvbiByYXRoZXIgdGhhbiByZWN1cnNpb25cbiAgdmFyIHBhdGggPSB0b1BhdGgoY29tcGxleEtleSk7XG4gIHZhciBjdXJyZW50ID0gc3RhdGU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHBhdGhbaV07XG5cbiAgICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IGN1cnJlbnQgPT09IG51bGwgfHwgdHlwZW9mIGN1cnJlbnQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoY3VycmVudCkgJiYgaXNOYU4oa2V5KSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICB9XG5cbiAgcmV0dXJuIGN1cnJlbnQ7XG59O1xuXG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHsgdmFyIGtleSA9IF90b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpOyByZXR1cm4gdHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpOyB9XG5cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkgeyBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7IHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgeyB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTsgaWYgKHR5cGVvZiByZXMgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsgfVxuXG52YXIgc2V0SW5SZWN1cnNvciA9IGZ1bmN0aW9uIHNldEluUmVjdXJzb3IoY3VycmVudCwgaW5kZXgsIHBhdGgsIHZhbHVlLCBkZXN0cm95QXJyYXlzKSB7XG4gIGlmIChpbmRleCA+PSBwYXRoLmxlbmd0aCkge1xuICAgIC8vIGVuZCBvZiByZWN1cnNpb25cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB2YXIga2V5ID0gcGF0aFtpbmRleF07IC8vIGRldGVybWluZSB0eXBlIG9mIGtleVxuXG4gIGlmIChpc05hTihrZXkpKSB7XG4gICAgdmFyIF9leHRlbmRzMjtcblxuICAgIC8vIG9iamVjdCBzZXRcbiAgICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHZhciBfcmVmO1xuXG4gICAgICAvLyByZWN1cnNlXG4gICAgICB2YXIgX3Jlc3VsdDIgPSBzZXRJblJlY3Vyc29yKHVuZGVmaW5lZCwgaW5kZXggKyAxLCBwYXRoLCB2YWx1ZSwgZGVzdHJveUFycmF5cyk7IC8vIGRlbGV0ZSBvciBjcmVhdGUgYW4gb2JqZWN0XG5cblxuICAgICAgcmV0dXJuIF9yZXN1bHQyID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAoX3JlZiA9IHt9LCBfcmVmW2tleV0gPSBfcmVzdWx0MiwgX3JlZik7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNldCBhIG5vbi1udW1lcmljIHByb3BlcnR5IG9uIGFuIGFycmF5Jyk7XG4gICAgfSAvLyBjdXJyZW50IGV4aXN0cywgc28gbWFrZSBhIGNvcHkgb2YgYWxsIGl0cyB2YWx1ZXMsIGFuZCBhZGQvdXBkYXRlIHRoZSBuZXcgb25lXG5cblxuICAgIHZhciBfcmVzdWx0ID0gc2V0SW5SZWN1cnNvcihjdXJyZW50W2tleV0sIGluZGV4ICsgMSwgcGF0aCwgdmFsdWUsIGRlc3Ryb3lBcnJheXMpO1xuXG4gICAgaWYgKF9yZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIG51bUtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50KS5sZW5ndGg7XG5cbiAgICAgIGlmIChjdXJyZW50W2tleV0gPT09IHVuZGVmaW5lZCAmJiBudW1LZXlzID09PSAwKSB7XG4gICAgICAgIC8vIG9iamVjdCB3YXMgYWxyZWFkeSBlbXB0eVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudFtrZXldICE9PSB1bmRlZmluZWQgJiYgbnVtS2V5cyA8PSAxKSB7XG4gICAgICAgIC8vIG9ubHkga2V5IHdlIGhhZCB3YXMgdGhlIG9uZSB3ZSBhcmUgZGVsZXRpbmdcbiAgICAgICAgaWYgKCFpc05hTihwYXRoW2luZGV4IC0gMV0pICYmICFkZXN0cm95QXJyYXlzKSB7XG4gICAgICAgICAgLy8gd2UgYXJlIGluIGFuIGFycmF5LCBzbyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIF9yZW1vdmVkID0gY3VycmVudFtrZXldLFxuICAgICAgICAgIF9maW5hbCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGN1cnJlbnQsIFtrZXldLm1hcChfdG9Qcm9wZXJ0eUtleSkpO1xuXG4gICAgICByZXR1cm4gX2ZpbmFsO1xuICAgIH0gLy8gc2V0IHJlc3VsdCBpbiBrZXlcblxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBjdXJyZW50LCAoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltrZXldID0gX3Jlc3VsdCwgX2V4dGVuZHMyKSk7XG4gIH0gLy8gYXJyYXkgc2V0XG5cblxuICB2YXIgbnVtZXJpY0tleSA9IE51bWJlcihrZXkpO1xuXG4gIGlmIChjdXJyZW50ID09PSB1bmRlZmluZWQgfHwgY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIHJlY3Vyc2VcbiAgICB2YXIgX3Jlc3VsdDMgPSBzZXRJblJlY3Vyc29yKHVuZGVmaW5lZCwgaW5kZXggKyAxLCBwYXRoLCB2YWx1ZSwgZGVzdHJveUFycmF5cyk7IC8vIGlmIG5vdGhpbmcgcmV0dXJuZWQsIGRlbGV0ZSBpdFxuXG5cbiAgICBpZiAoX3Jlc3VsdDMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IC8vIGNyZWF0ZSBhbiBhcnJheVxuXG5cbiAgICB2YXIgX2FycmF5ID0gW107XG4gICAgX2FycmF5W251bWVyaWNLZXldID0gX3Jlc3VsdDM7XG4gICAgcmV0dXJuIF9hcnJheTtcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNldCBhIG51bWVyaWMgcHJvcGVydHkgb24gYW4gb2JqZWN0Jyk7XG4gIH0gLy8gcmVjdXJzZVxuXG5cbiAgdmFyIGV4aXN0aW5nVmFsdWUgPSBjdXJyZW50W251bWVyaWNLZXldO1xuICB2YXIgcmVzdWx0ID0gc2V0SW5SZWN1cnNvcihleGlzdGluZ1ZhbHVlLCBpbmRleCArIDEsIHBhdGgsIHZhbHVlLCBkZXN0cm95QXJyYXlzKTsgLy8gY3VycmVudCBleGlzdHMsIHNvIG1ha2UgYSBjb3B5IG9mIGFsbCBpdHMgdmFsdWVzLCBhbmQgYWRkL3VwZGF0ZSB0aGUgbmV3IG9uZVxuXG4gIHZhciBhcnJheSA9IFtdLmNvbmNhdChjdXJyZW50KTtcblxuICBpZiAoZGVzdHJveUFycmF5cyAmJiByZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5LnNwbGljZShudW1lcmljS2V5LCAxKTtcblxuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFycmF5W251bWVyaWNLZXldID0gcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufTtcblxudmFyIHNldEluID0gZnVuY3Rpb24gc2V0SW4oc3RhdGUsIGtleSwgdmFsdWUsIGRlc3Ryb3lBcnJheXMpIHtcbiAgaWYgKGRlc3Ryb3lBcnJheXMgPT09IHZvaWQgMCkge1xuICAgIGRlc3Ryb3lBcnJheXMgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHN0YXRlID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNhbGwgc2V0SW4oKSB3aXRoIFwiICsgU3RyaW5nKHN0YXRlKSArIFwiIHN0YXRlXCIpO1xuICB9XG5cbiAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjYWxsIHNldEluKCkgd2l0aCBcIiArIFN0cmluZyhrZXkpICsgXCIga2V5XCIpO1xuICB9IC8vIFJlY3Vyc2l2ZSBmdW5jdGlvbiBuZWVkcyB0byBhY2NlcHQgYW5kIHJldHVybiBTdGF0ZSwgYnV0IHB1YmxpYyBBUEkgc2hvdWxkXG4gIC8vIG9ubHkgZGVhbCB3aXRoIE9iamVjdHNcblxuXG4gIHJldHVybiBzZXRJblJlY3Vyc29yKHN0YXRlLCAwLCB0b1BhdGgoa2V5KSwgdmFsdWUsIGRlc3Ryb3lBcnJheXMpO1xufTtcblxudmFyIEZPUk1fRVJST1IgPSAnRklOQUxfRk9STS9mb3JtLWVycm9yJztcbnZhciBBUlJBWV9FUlJPUiA9ICdGSU5BTF9GT1JNL2FycmF5LWVycm9yJztcblxuLy8gICAgICBcbi8qKlxuICogQ29udmVydHMgaW50ZXJuYWwgZmllbGQgc3RhdGUgdG8gcHVibGlzaGVkIGZpZWxkIHN0YXRlXG4gKi9cblxudmFyIHB1Ymxpc2hGaWVsZFN0YXRlID0gZnVuY3Rpb24gcHVibGlzaEZpZWxkU3RhdGUoZm9ybVN0YXRlLCBmaWVsZCkge1xuICB2YXIgZXJyb3JzID0gZm9ybVN0YXRlLmVycm9ycyxcbiAgICAgIGluaXRpYWxWYWx1ZXMgPSBmb3JtU3RhdGUuaW5pdGlhbFZhbHVlcyxcbiAgICAgIGxhc3RTdWJtaXR0ZWRWYWx1ZXMgPSBmb3JtU3RhdGUubGFzdFN1Ym1pdHRlZFZhbHVlcyxcbiAgICAgIHN1Ym1pdEVycm9ycyA9IGZvcm1TdGF0ZS5zdWJtaXRFcnJvcnMsXG4gICAgICBzdWJtaXRGYWlsZWQgPSBmb3JtU3RhdGUuc3VibWl0RmFpbGVkLFxuICAgICAgc3VibWl0U3VjY2VlZGVkID0gZm9ybVN0YXRlLnN1Ym1pdFN1Y2NlZWRlZCxcbiAgICAgIHN1Ym1pdHRpbmcgPSBmb3JtU3RhdGUuc3VibWl0dGluZyxcbiAgICAgIHZhbHVlcyA9IGZvcm1TdGF0ZS52YWx1ZXM7XG4gIHZhciBhY3RpdmUgPSBmaWVsZC5hY3RpdmUsXG4gICAgICBibHVyID0gZmllbGQuYmx1cixcbiAgICAgIGNoYW5nZSA9IGZpZWxkLmNoYW5nZSxcbiAgICAgIGRhdGEgPSBmaWVsZC5kYXRhLFxuICAgICAgZm9jdXMgPSBmaWVsZC5mb2N1cyxcbiAgICAgIG1vZGlmaWVkID0gZmllbGQubW9kaWZpZWQsXG4gICAgICBuYW1lID0gZmllbGQubmFtZSxcbiAgICAgIHRvdWNoZWQgPSBmaWVsZC50b3VjaGVkLFxuICAgICAgdmlzaXRlZCA9IGZpZWxkLnZpc2l0ZWQ7XG4gIHZhciB2YWx1ZSA9IGdldEluKHZhbHVlcywgbmFtZSk7XG4gIHZhciBlcnJvciA9IGdldEluKGVycm9ycywgbmFtZSk7XG5cbiAgaWYgKGVycm9yICYmIGVycm9yW0FSUkFZX0VSUk9SXSkge1xuICAgIGVycm9yID0gZXJyb3JbQVJSQVlfRVJST1JdO1xuICB9XG5cbiAgdmFyIHN1Ym1pdEVycm9yID0gc3VibWl0RXJyb3JzICYmIGdldEluKHN1Ym1pdEVycm9ycywgbmFtZSk7XG4gIHZhciBpbml0aWFsID0gaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcbiAgdmFyIHByaXN0aW5lID0gZmllbGQuaXNFcXVhbChpbml0aWFsLCB2YWx1ZSk7XG4gIHZhciBkaXJ0eVNpbmNlTGFzdFN1Ym1pdCA9ICEhKGxhc3RTdWJtaXR0ZWRWYWx1ZXMgJiYgIWZpZWxkLmlzRXF1YWwoZ2V0SW4obGFzdFN1Ym1pdHRlZFZhbHVlcywgbmFtZSksIHZhbHVlKSk7XG4gIHZhciB2YWxpZCA9ICFlcnJvciAmJiAhc3VibWl0RXJyb3I7XG4gIHJldHVybiB7XG4gICAgYWN0aXZlOiBhY3RpdmUsXG4gICAgYmx1cjogYmx1cixcbiAgICBjaGFuZ2U6IGNoYW5nZSxcbiAgICBkYXRhOiBkYXRhLFxuICAgIGRpcnR5OiAhcHJpc3RpbmUsXG4gICAgZGlydHlTaW5jZUxhc3RTdWJtaXQ6IGRpcnR5U2luY2VMYXN0U3VibWl0LFxuICAgIGVycm9yOiBlcnJvcixcbiAgICBmb2N1czogZm9jdXMsXG4gICAgaW5pdGlhbDogaW5pdGlhbCxcbiAgICBpbnZhbGlkOiAhdmFsaWQsXG4gICAgbGVuZ3RoOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmxlbmd0aCA6IHVuZGVmaW5lZCxcbiAgICBtb2RpZmllZDogbW9kaWZpZWQsXG4gICAgbmFtZTogbmFtZSxcbiAgICBwcmlzdGluZTogcHJpc3RpbmUsXG4gICAgc3VibWl0RXJyb3I6IHN1Ym1pdEVycm9yLFxuICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxuICAgIHN1Ym1pdFN1Y2NlZWRlZDogc3VibWl0U3VjY2VlZGVkLFxuICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXG4gICAgdG91Y2hlZDogdG91Y2hlZCxcbiAgICB2YWxpZDogdmFsaWQsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHZpc2l0ZWQ6IHZpc2l0ZWRcbiAgfTtcbn07XG5cbi8vICAgICAgXG52YXIgZmllbGRTdWJzY3JpcHRpb25JdGVtcyA9IFsnYWN0aXZlJywgJ2RhdGEnLCAnZGlydHknLCAnZGlydHlTaW5jZUxhc3RTdWJtaXQnLCAnZXJyb3InLCAnaW5pdGlhbCcsICdpbnZhbGlkJywgJ2xlbmd0aCcsICdtb2RpZmllZCcsICdwcmlzdGluZScsICdzdWJtaXRFcnJvcicsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0U3VjY2VlZGVkJywgJ3N1Ym1pdHRpbmcnLCAndG91Y2hlZCcsICd2YWxpZCcsICd2YWx1ZScsICd2aXNpdGVkJ107XG5cbi8vICAgICAgXG52YXIgc2hhbGxvd0VxdWFsID0gZnVuY3Rpb24gc2hhbGxvd0VxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcgfHwgIWEgfHwgdHlwZW9mIGIgIT09ICdvYmplY3QnIHx8ICFiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBiSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmJpbmQoYik7XG5cbiAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwga2V5c0EubGVuZ3RoOyBpZHgrKykge1xuICAgIHZhciBrZXkgPSBrZXlzQVtpZHhdO1xuXG4gICAgaWYgKCFiSGFzT3duUHJvcGVydHkoa2V5KSB8fCBhW2tleV0gIT09IGJba2V5XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLy8gICAgICBcbmZ1bmN0aW9uIHN1YnNjcmlwdGlvbkZpbHRlciAoZGVzdCwgc3JjLCBwcmV2aW91cywgc3Vic2NyaXB0aW9uLCBrZXlzLCBzaGFsbG93RXF1YWxLZXlzKSB7XG4gIHZhciBkaWZmZXJlbnQgPSBmYWxzZTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uW2tleV0pIHtcbiAgICAgIGRlc3Rba2V5XSA9IHNyY1trZXldO1xuXG4gICAgICBpZiAoIXByZXZpb3VzIHx8ICh+c2hhbGxvd0VxdWFsS2V5cy5pbmRleE9mKGtleSkgPyAhc2hhbGxvd0VxdWFsKHNyY1trZXldLCBwcmV2aW91c1trZXldKSA6IHNyY1trZXldICE9PSBwcmV2aW91c1trZXldKSkge1xuICAgICAgICBkaWZmZXJlbnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkaWZmZXJlbnQ7XG59XG5cbi8vICAgICAgXG52YXIgc2hhbGxvd0VxdWFsS2V5cyA9IFsnZGF0YSddO1xuLyoqXG4gKiBGaWx0ZXJzIGl0ZW1zIGluIGEgRmllbGRTdGF0ZSBiYXNlZCBvbiBhIEZpZWxkU3Vic2NyaXB0aW9uXG4gKi9cblxudmFyIGZpbHRlckZpZWxkU3RhdGUgPSBmdW5jdGlvbiBmaWx0ZXJGaWVsZFN0YXRlKHN0YXRlLCBwcmV2aW91c1N0YXRlLCBzdWJzY3JpcHRpb24sIGZvcmNlKSB7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgYmx1cjogc3RhdGUuYmx1cixcbiAgICBjaGFuZ2U6IHN0YXRlLmNoYW5nZSxcbiAgICBmb2N1czogc3RhdGUuZm9jdXMsXG4gICAgbmFtZTogc3RhdGUubmFtZVxuICB9O1xuICB2YXIgZGlmZmVyZW50ID0gc3Vic2NyaXB0aW9uRmlsdGVyKHJlc3VsdCwgc3RhdGUsIHByZXZpb3VzU3RhdGUsIHN1YnNjcmlwdGlvbiwgZmllbGRTdWJzY3JpcHRpb25JdGVtcywgc2hhbGxvd0VxdWFsS2V5cykgfHwgIXByZXZpb3VzU3RhdGU7XG4gIHJldHVybiBkaWZmZXJlbnQgfHwgZm9yY2UgPyByZXN1bHQgOiB1bmRlZmluZWQ7XG59O1xuXG4vLyAgICAgIFxudmFyIGZvcm1TdWJzY3JpcHRpb25JdGVtcyA9IFsnYWN0aXZlJywgJ2RpcnR5JywgJ2RpcnR5RmllbGRzJywgJ2RpcnR5U2luY2VMYXN0U3VibWl0JywgJ2Vycm9yJywgJ2Vycm9ycycsICdoYXNTdWJtaXRFcnJvcnMnLCAnaGFzVmFsaWRhdGlvbkVycm9ycycsICdpbml0aWFsVmFsdWVzJywgJ2ludmFsaWQnLCAnbW9kaWZpZWQnLCAncHJpc3RpbmUnLCAnc3VibWl0dGluZycsICdzdWJtaXRFcnJvcicsICdzdWJtaXRFcnJvcnMnLCAnc3VibWl0RmFpbGVkJywgJ3N1Ym1pdFN1Y2NlZWRlZCcsICd0b3VjaGVkJywgJ3ZhbGlkJywgJ3ZhbGlkYXRpbmcnLCAndmFsdWVzJywgJ3Zpc2l0ZWQnXTtcblxuLy8gICAgICBcbnZhciBzaGFsbG93RXF1YWxLZXlzJDEgPSBbJ3RvdWNoZWQnLCAndmlzaXRlZCddO1xuLyoqXG4gKiBGaWx0ZXJzIGl0ZW1zIGluIGEgRm9ybVN0YXRlIGJhc2VkIG9uIGEgRm9ybVN1YnNjcmlwdGlvblxuICovXG5cbnZhciBmaWx0ZXJGb3JtU3RhdGUgPSBmdW5jdGlvbiBmaWx0ZXJGb3JtU3RhdGUoc3RhdGUsIHByZXZpb3VzU3RhdGUsIHN1YnNjcmlwdGlvbiwgZm9yY2UpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICB2YXIgZGlmZmVyZW50ID0gc3Vic2NyaXB0aW9uRmlsdGVyKHJlc3VsdCwgc3RhdGUsIHByZXZpb3VzU3RhdGUsIHN1YnNjcmlwdGlvbiwgZm9ybVN1YnNjcmlwdGlvbkl0ZW1zLCBzaGFsbG93RXF1YWxLZXlzJDEpIHx8ICFwcmV2aW91c1N0YXRlO1xuICByZXR1cm4gZGlmZmVyZW50IHx8IGZvcmNlID8gcmVzdWx0IDogdW5kZWZpbmVkO1xufTtcblxuLy8gICAgICBcblxudmFyIG1lbW9pemUgPSBmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBsYXN0QXJncztcbiAgdmFyIGxhc3RSZXN1bHQ7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIGlmICghbGFzdEFyZ3MgfHwgYXJncy5sZW5ndGggIT09IGxhc3RBcmdzLmxlbmd0aCB8fCBhcmdzLnNvbWUoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgIHJldHVybiAhc2hhbGxvd0VxdWFsKGxhc3RBcmdzW2luZGV4XSwgYXJnKTtcbiAgICB9KSkge1xuICAgICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgICAgbGFzdFJlc3VsdCA9IGZuLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gIH07XG59O1xuXG52YXIgaXNQcm9taXNlID0gKGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XG59KTtcblxudmFyIGNvbmZpZ09wdGlvbnMgPSBbJ2RlYnVnJywgJ2luaXRpYWxWYWx1ZXMnLCAna2VlcERpcnR5T25SZWluaXRpYWxpemUnLCAnbXV0YXRvcnMnLCAnb25TdWJtaXQnLCAndmFsaWRhdGUnLCAndmFsaWRhdGVPbkJsdXInXTtcbnZhciB2ZXJzaW9uID0gJzQuMTMuMCc7XG5cbnZhciB0cmlwbGVFcXVhbHMgPSBmdW5jdGlvbiB0cmlwbGVFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYSA9PT0gYjtcbn07XG5cbnZhciBoYXNBbnlFcnJvciA9IGZ1bmN0aW9uIGhhc0FueUVycm9yKGVycm9ycykge1xuICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsdWUgPSBlcnJvcnNba2V5XTtcblxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gaGFzQW55RXJyb3IodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xuICB9KTtcbn07XG5cbnZhciBjb252ZXJ0VG9FeHRlcm5hbEZvcm1TdGF0ZSA9IGZ1bmN0aW9uIGNvbnZlcnRUb0V4dGVybmFsRm9ybVN0YXRlKF9yZWYpIHtcbiAgdmFyIGFjdGl2ZSA9IF9yZWYuYWN0aXZlLFxuICAgICAgZGlydHlTaW5jZUxhc3RTdWJtaXQgPSBfcmVmLmRpcnR5U2luY2VMYXN0U3VibWl0LFxuICAgICAgZXJyb3IgPSBfcmVmLmVycm9yLFxuICAgICAgZXJyb3JzID0gX3JlZi5lcnJvcnMsXG4gICAgICBpbml0aWFsVmFsdWVzID0gX3JlZi5pbml0aWFsVmFsdWVzLFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxuICAgICAgc3VibWl0dGluZyA9IF9yZWYuc3VibWl0dGluZyxcbiAgICAgIHN1Ym1pdEZhaWxlZCA9IF9yZWYuc3VibWl0RmFpbGVkLFxuICAgICAgc3VibWl0U3VjY2VlZGVkID0gX3JlZi5zdWJtaXRTdWNjZWVkZWQsXG4gICAgICBzdWJtaXRFcnJvciA9IF9yZWYuc3VibWl0RXJyb3IsXG4gICAgICBzdWJtaXRFcnJvcnMgPSBfcmVmLnN1Ym1pdEVycm9ycyxcbiAgICAgIHZhbGlkID0gX3JlZi52YWxpZCxcbiAgICAgIHZhbGlkYXRpbmcgPSBfcmVmLnZhbGlkYXRpbmcsXG4gICAgICB2YWx1ZXMgPSBfcmVmLnZhbHVlcztcbiAgcmV0dXJuIHtcbiAgICBhY3RpdmU6IGFjdGl2ZSxcbiAgICBkaXJ0eTogIXByaXN0aW5lLFxuICAgIGRpcnR5U2luY2VMYXN0U3VibWl0OiBkaXJ0eVNpbmNlTGFzdFN1Ym1pdCxcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgaGFzU3VibWl0RXJyb3JzOiAhIShzdWJtaXRFcnJvciB8fCBzdWJtaXRFcnJvcnMgJiYgaGFzQW55RXJyb3Ioc3VibWl0RXJyb3JzKSksXG4gICAgaGFzVmFsaWRhdGlvbkVycm9yczogISEoZXJyb3IgfHwgaGFzQW55RXJyb3IoZXJyb3JzKSksXG4gICAgaW52YWxpZDogIXZhbGlkLFxuICAgIGluaXRpYWxWYWx1ZXM6IGluaXRpYWxWYWx1ZXMsXG4gICAgcHJpc3RpbmU6IHByaXN0aW5lLFxuICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXG4gICAgc3VibWl0RmFpbGVkOiBzdWJtaXRGYWlsZWQsXG4gICAgc3VibWl0U3VjY2VlZGVkOiBzdWJtaXRTdWNjZWVkZWQsXG4gICAgc3VibWl0RXJyb3I6IHN1Ym1pdEVycm9yLFxuICAgIHN1Ym1pdEVycm9yczogc3VibWl0RXJyb3JzLFxuICAgIHZhbGlkOiB2YWxpZCxcbiAgICB2YWxpZGF0aW5nOiB2YWxpZGF0aW5nID4gMCxcbiAgICB2YWx1ZXM6IHZhbHVlc1xuICB9O1xufTtcblxuZnVuY3Rpb24gbm90aWZ5U3Vic2NyaWJlcihzdWJzY3JpYmVyLCBzdWJzY3JpcHRpb24sIHN0YXRlLCBsYXN0U3RhdGUsIGZpbHRlciwgZm9yY2UpIHtcbiAgaWYgKGZvcmNlID09PSB2b2lkIDApIHtcbiAgICBmb3JjZSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIG5vdGlmaWNhdGlvbiA9IGZpbHRlcihzdGF0ZSwgbGFzdFN0YXRlLCBzdWJzY3JpcHRpb24sIGZvcmNlKTtcblxuICBpZiAobm90aWZpY2F0aW9uKSB7XG4gICAgc3Vic2NyaWJlcihub3RpZmljYXRpb24pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vdGlmeShfcmVmMiwgc3RhdGUsIGxhc3RTdGF0ZSwgZmlsdGVyKSB7XG4gIHZhciBlbnRyaWVzID0gX3JlZjIuZW50cmllcztcbiAgT2JqZWN0LmtleXMoZW50cmllcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tOdW1iZXIoa2V5KV07IC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBlbnRyeS5zdWJzY3JpcHRpb24sXG4gICAgICAgICAgc3Vic2NyaWJlciA9IGVudHJ5LnN1YnNjcmliZXI7XG4gICAgICBub3RpZnlTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHN1YnNjcmlwdGlvbiwgc3RhdGUsIGxhc3RTdGF0ZSwgZmlsdGVyKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgY3JlYXRlRm9ybSA9IGZ1bmN0aW9uIGNyZWF0ZUZvcm0oY29uZmlnKSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb25maWcgc3BlY2lmaWVkJyk7XG4gIH1cblxuICB2YXIgZGVidWcgPSBjb25maWcuZGVidWcsXG4gICAgICBkZXN0cm95T25VbnJlZ2lzdGVyID0gY29uZmlnLmRlc3Ryb3lPblVucmVnaXN0ZXIsXG4gICAgICBrZWVwRGlydHlPblJlaW5pdGlhbGl6ZSA9IGNvbmZpZy5rZWVwRGlydHlPblJlaW5pdGlhbGl6ZSxcbiAgICAgIGluaXRpYWxWYWx1ZXMgPSBjb25maWcuaW5pdGlhbFZhbHVlcyxcbiAgICAgIG11dGF0b3JzID0gY29uZmlnLm11dGF0b3JzLFxuICAgICAgb25TdWJtaXQgPSBjb25maWcub25TdWJtaXQsXG4gICAgICB2YWxpZGF0ZSA9IGNvbmZpZy52YWxpZGF0ZSxcbiAgICAgIHZhbGlkYXRlT25CbHVyID0gY29uZmlnLnZhbGlkYXRlT25CbHVyO1xuXG4gIGlmICghb25TdWJtaXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG9uU3VibWl0IGZ1bmN0aW9uIHNwZWNpZmllZCcpO1xuICB9XG5cbiAgdmFyIHN0YXRlID0ge1xuICAgIHN1YnNjcmliZXJzOiB7XG4gICAgICBpbmRleDogMCxcbiAgICAgIGVudHJpZXM6IHt9XG4gICAgfSxcbiAgICBmaWVsZFN1YnNjcmliZXJzOiB7fSxcbiAgICBmaWVsZHM6IHt9LFxuICAgIGZvcm1TdGF0ZToge1xuICAgICAgZGlydHlTaW5jZUxhc3RTdWJtaXQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiB7fSxcbiAgICAgIGluaXRpYWxWYWx1ZXM6IGluaXRpYWxWYWx1ZXMgJiYgX2V4dGVuZHMoe30sIGluaXRpYWxWYWx1ZXMpLFxuICAgICAgaW52YWxpZDogZmFsc2UsXG4gICAgICBwcmlzdGluZTogdHJ1ZSxcbiAgICAgIHN1Ym1pdHRpbmc6IGZhbHNlLFxuICAgICAgc3VibWl0RmFpbGVkOiBmYWxzZSxcbiAgICAgIHN1Ym1pdFN1Y2NlZWRlZDogZmFsc2UsXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpbmc6IDAsXG4gICAgICB2YWx1ZXM6IGluaXRpYWxWYWx1ZXMgPyBfZXh0ZW5kcyh7fSwgaW5pdGlhbFZhbHVlcykgOiB7fVxuICAgIH0sXG4gICAgbGFzdEZvcm1TdGF0ZTogdW5kZWZpbmVkXG4gIH07XG4gIHZhciBpbkJhdGNoID0gZmFsc2U7XG4gIHZhciB2YWxpZGF0aW9uUGF1c2VkID0gZmFsc2U7XG4gIHZhciB2YWxpZGF0aW9uQmxvY2tlZCA9IGZhbHNlO1xuICB2YXIgbmV4dEFzeW5jVmFsaWRhdGlvbktleSA9IDA7XG4gIHZhciBhc3luY1ZhbGlkYXRpb25Qcm9taXNlcyA9IHt9O1xuXG4gIHZhciBjbGVhckFzeW5jVmFsaWRhdGlvblByb21pc2UgPSBmdW5jdGlvbiBjbGVhckFzeW5jVmFsaWRhdGlvblByb21pc2Uoa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIGRlbGV0ZSBhc3luY1ZhbGlkYXRpb25Qcm9taXNlc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBjaGFuZ2VWYWx1ZSA9IGZ1bmN0aW9uIGNoYW5nZVZhbHVlKHN0YXRlLCBuYW1lLCBtdXRhdGUpIHtcbiAgICB2YXIgYmVmb3JlID0gZ2V0SW4oc3RhdGUuZm9ybVN0YXRlLnZhbHVlcywgbmFtZSk7XG4gICAgdmFyIGFmdGVyID0gbXV0YXRlKGJlZm9yZSk7XG4gICAgc3RhdGUuZm9ybVN0YXRlLnZhbHVlcyA9IHNldEluKHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIG5hbWUsIGFmdGVyKSB8fCB7fTtcbiAgfTtcblxuICB2YXIgcmVuYW1lRmllbGQgPSBmdW5jdGlvbiByZW5hbWVGaWVsZChzdGF0ZSwgZnJvbSwgdG8pIHtcbiAgICBpZiAoc3RhdGUuZmllbGRzW2Zyb21dKSB7XG4gICAgICB2YXIgX2V4dGVuZHMyLCBfZXh0ZW5kczM7XG5cbiAgICAgIHN0YXRlLmZpZWxkcyA9IF9leHRlbmRzKHt9LCBzdGF0ZS5maWVsZHMsIChfZXh0ZW5kczIgPSB7fSwgX2V4dGVuZHMyW3RvXSA9IF9leHRlbmRzKHt9LCBzdGF0ZS5maWVsZHNbZnJvbV0sIHtcbiAgICAgICAgbmFtZTogdG8sXG4gICAgICAgIGxhc3RGaWVsZFN0YXRlOiB1bmRlZmluZWRcbiAgICAgIH0pLCBfZXh0ZW5kczIpKTtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5maWVsZHNbZnJvbV07XG4gICAgICBzdGF0ZS5maWVsZFN1YnNjcmliZXJzID0gX2V4dGVuZHMoe30sIHN0YXRlLmZpZWxkU3Vic2NyaWJlcnMsIChfZXh0ZW5kczMgPSB7fSwgX2V4dGVuZHMzW3RvXSA9IHN0YXRlLmZpZWxkU3Vic2NyaWJlcnNbZnJvbV0sIF9leHRlbmRzMykpO1xuICAgICAgZGVsZXRlIHN0YXRlLmZpZWxkU3Vic2NyaWJlcnNbZnJvbV07XG4gICAgICB2YXIgdmFsdWUgPSBnZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCBmcm9tKTtcbiAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCBmcm9tLCB1bmRlZmluZWQpIHx8IHt9O1xuICAgICAgc3RhdGUuZm9ybVN0YXRlLnZhbHVlcyA9IHNldEluKHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIHRvLCB2YWx1ZSk7XG4gICAgICBkZWxldGUgc3RhdGUubGFzdEZvcm1TdGF0ZTtcbiAgICB9XG4gIH07IC8vIGJpbmQgc3RhdGUgdG8gbXV0YXRvcnNcblxuXG4gIHZhciBnZXRNdXRhdG9yQXBpID0gZnVuY3Rpb24gZ2V0TXV0YXRvckFwaShrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgIGlmIChtdXRhdG9ycykge1xuICAgICAgICAvLyBeXiBjYXVzZXMgYnJhbmNoIGNvdmVyYWdlIHdhcm5pbmcsIGJ1dCBuZWVkZWQgdG8gYXBwZWFzZSB0aGUgRmxvdyBnb2RzXG4gICAgICAgIHZhciBtdXRhdGFibGVTdGF0ZSA9IHtcbiAgICAgICAgICBmb3JtU3RhdGU6IHN0YXRlLmZvcm1TdGF0ZSxcbiAgICAgICAgICBmaWVsZHM6IHN0YXRlLmZpZWxkcyxcbiAgICAgICAgICBmaWVsZFN1YnNjcmliZXJzOiBzdGF0ZS5maWVsZFN1YnNjcmliZXJzLFxuICAgICAgICAgIGxhc3RGb3JtU3RhdGU6IHN0YXRlLmxhc3RGb3JtU3RhdGVcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJldHVyblZhbHVlID0gbXV0YXRvcnNba2V5XShhcmdzLCBtdXRhdGFibGVTdGF0ZSwge1xuICAgICAgICAgIGNoYW5nZVZhbHVlOiBjaGFuZ2VWYWx1ZSxcbiAgICAgICAgICBnZXRJbjogZ2V0SW4sXG4gICAgICAgICAgcmVuYW1lRmllbGQ6IHJlbmFtZUZpZWxkLFxuICAgICAgICAgIHNldEluOiBzZXRJbixcbiAgICAgICAgICBzaGFsbG93RXF1YWw6IHNoYWxsb3dFcXVhbFxuICAgICAgICB9KTtcbiAgICAgICAgc3RhdGUuZm9ybVN0YXRlID0gbXV0YXRhYmxlU3RhdGUuZm9ybVN0YXRlO1xuICAgICAgICBzdGF0ZS5maWVsZHMgPSBtdXRhdGFibGVTdGF0ZS5maWVsZHM7XG4gICAgICAgIHN0YXRlLmZpZWxkU3Vic2NyaWJlcnMgPSBtdXRhdGFibGVTdGF0ZS5maWVsZFN1YnNjcmliZXJzO1xuICAgICAgICBzdGF0ZS5sYXN0Rm9ybVN0YXRlID0gbXV0YXRhYmxlU3RhdGUubGFzdEZvcm1TdGF0ZTtcbiAgICAgICAgcnVuVmFsaWRhdGlvbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIHZhciBtdXRhdG9yc0FwaSA9IG11dGF0b3JzID8gT2JqZWN0LmtleXMobXV0YXRvcnMpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IGdldE11dGF0b3JBcGkoa2V5KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSkgOiB7fTtcblxuICB2YXIgcnVuUmVjb3JkTGV2ZWxWYWxpZGF0aW9uID0gZnVuY3Rpb24gcnVuUmVjb3JkTGV2ZWxWYWxpZGF0aW9uKHNldEVycm9ycykge1xuICAgIHZhciBwcm9taXNlcyA9IFtdO1xuXG4gICAgaWYgKHZhbGlkYXRlKSB7XG4gICAgICB2YXIgZXJyb3JzT3JQcm9taXNlID0gdmFsaWRhdGUoX2V4dGVuZHMoe30sIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMpKTsgLy8gY2xvbmUgdG8gYXZvaWQgd3JpdGluZ1xuXG4gICAgICBpZiAoaXNQcm9taXNlKGVycm9yc09yUHJvbWlzZSkpIHtcbiAgICAgICAgdmFyIGFzeW5jVmFsaWRhdGlvblByb21pc2VLZXkgPSBuZXh0QXN5bmNWYWxpZGF0aW9uS2V5Kys7XG4gICAgICAgIHZhciBwcm9taXNlID0gZXJyb3JzT3JQcm9taXNlLnRoZW4oc2V0RXJyb3JzKS50aGVuKGNsZWFyQXN5bmNWYWxpZGF0aW9uUHJvbWlzZShhc3luY1ZhbGlkYXRpb25Qcm9taXNlS2V5KSk7XG4gICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIGFzeW5jVmFsaWRhdGlvblByb21pc2VzW2FzeW5jVmFsaWRhdGlvblByb21pc2VLZXldID0gcHJvbWlzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEVycm9ycyhlcnJvcnNPclByb21pc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlcztcbiAgfTtcblxuICB2YXIgZ2V0VmFsaWRhdG9ycyA9IGZ1bmN0aW9uIGdldFZhbGlkYXRvcnMoZmllbGQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZmllbGQudmFsaWRhdG9ycykucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7XG4gICAgICB2YXIgdmFsaWRhdG9yID0gZmllbGQudmFsaWRhdG9yc1tOdW1iZXIoaW5kZXgpXSgpO1xuXG4gICAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbGlkYXRvcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgW10pO1xuICB9O1xuXG4gIHZhciBydW5GaWVsZExldmVsVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHJ1bkZpZWxkTGV2ZWxWYWxpZGF0aW9uKGZpZWxkLCBzZXRFcnJvcikge1xuICAgIHZhciBwcm9taXNlcyA9IFtdO1xuICAgIHZhciB2YWxpZGF0b3JzID0gZ2V0VmFsaWRhdG9ycyhmaWVsZCk7XG5cbiAgICBpZiAodmFsaWRhdG9ycy5sZW5ndGgpIHtcbiAgICAgIHZhciBlcnJvcjtcbiAgICAgIHZhbGlkYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAodmFsaWRhdG9yKSB7XG4gICAgICAgIHZhciBlcnJvck9yUHJvbWlzZSA9IHZhbGlkYXRvcihnZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCBmaWVsZC5uYW1lKSwgc3RhdGUuZm9ybVN0YXRlLnZhbHVlcywgdmFsaWRhdG9yLmxlbmd0aCA9PT0gMyA/IHB1Ymxpc2hGaWVsZFN0YXRlKHN0YXRlLmZvcm1TdGF0ZSwgc3RhdGUuZmllbGRzW2ZpZWxkLm5hbWVdKSA6IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgaWYgKGVycm9yT3JQcm9taXNlICYmIGlzUHJvbWlzZShlcnJvck9yUHJvbWlzZSkpIHtcbiAgICAgICAgICB2YXIgYXN5bmNWYWxpZGF0aW9uUHJvbWlzZUtleSA9IG5leHRBc3luY1ZhbGlkYXRpb25LZXkrKztcbiAgICAgICAgICB2YXIgcHJvbWlzZSA9IGVycm9yT3JQcm9taXNlLnRoZW4oc2V0RXJyb3IpIC8vIGVycm9ycyBtdXN0IGJlIHJlc29sdmVkLCBub3QgcmVqZWN0ZWRcbiAgICAgICAgICAudGhlbihjbGVhckFzeW5jVmFsaWRhdGlvblByb21pc2UoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZUtleSkpO1xuICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgICAgYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNbYXN5bmNWYWxpZGF0aW9uUHJvbWlzZUtleV0gPSBwcm9taXNlO1xuICAgICAgICB9IGVsc2UgaWYgKCFlcnJvcikge1xuICAgICAgICAgIC8vIGZpcnN0IHJlZ2lzdGVyZWQgdmFsaWRhdG9yIHdpbnNcbiAgICAgICAgICBlcnJvciA9IGVycm9yT3JQcm9taXNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHNldEVycm9yKGVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZXM7XG4gIH07XG5cbiAgdmFyIHJ1blZhbGlkYXRpb24gPSBmdW5jdGlvbiBydW5WYWxpZGF0aW9uKGZpZWxkQ2hhbmdlZCwgY2FsbGJhY2spIHtcbiAgICBpZiAodmFsaWRhdGlvblBhdXNlZCkge1xuICAgICAgdmFsaWRhdGlvbkJsb2NrZWQgPSB0cnVlO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICBmb3JtU3RhdGUgPSBzdGF0ZS5mb3JtU3RhdGU7XG5cbiAgICB2YXIgc2FmZUZpZWxkcyA9IF9leHRlbmRzKHt9LCBmaWVsZHMpO1xuXG4gICAgdmFyIGZpZWxkS2V5cyA9IE9iamVjdC5rZXlzKHNhZmVGaWVsZHMpO1xuXG4gICAgaWYgKCF2YWxpZGF0ZSAmJiAhZmllbGRLZXlzLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGdldFZhbGlkYXRvcnMoc2FmZUZpZWxkc1trZXldKS5sZW5ndGg7XG4gICAgfSkpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47IC8vIG5vIHZhbGlkYXRpb24gcnVsZXNcbiAgICB9IC8vIHBhcmUgZG93biBmaWVsZCBrZXlzIHRvIGFjdHVhbGx5IHZhbGlkYXRlXG5cblxuICAgIHZhciBsaW1pdGVkRmllbGRMZXZlbFZhbGlkYXRpb24gPSBmYWxzZTtcblxuICAgIGlmIChmaWVsZENoYW5nZWQpIHtcbiAgICAgIHZhciBjaGFuZ2VkRmllbGQgPSBzYWZlRmllbGRzW2ZpZWxkQ2hhbmdlZF07XG5cbiAgICAgIGlmIChjaGFuZ2VkRmllbGQpIHtcbiAgICAgICAgdmFyIHZhbGlkYXRlRmllbGRzID0gY2hhbmdlZEZpZWxkLnZhbGlkYXRlRmllbGRzO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZUZpZWxkcykge1xuICAgICAgICAgIGxpbWl0ZWRGaWVsZExldmVsVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgZmllbGRLZXlzID0gdmFsaWRhdGVGaWVsZHMubGVuZ3RoID8gdmFsaWRhdGVGaWVsZHMuY29uY2F0KGZpZWxkQ2hhbmdlZCkgOiBbZmllbGRDaGFuZ2VkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZWNvcmRMZXZlbEVycm9ycyA9IHt9O1xuICAgIHZhciBmaWVsZExldmVsRXJyb3JzID0ge307XG4gICAgdmFyIHByb21pc2VzID0gW10uY29uY2F0KHJ1blJlY29yZExldmVsVmFsaWRhdGlvbihmdW5jdGlvbiAoZXJyb3JzKSB7XG4gICAgICByZWNvcmRMZXZlbEVycm9ycyA9IGVycm9ycyB8fCB7fTtcbiAgICB9KSwgZmllbGRLZXlzLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBuYW1lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmNvbmNhdChydW5GaWVsZExldmVsVmFsaWRhdGlvbihzYWZlRmllbGRzW25hbWVdLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgZmllbGRMZXZlbEVycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgfSkpO1xuICAgIH0sIFtdKSk7XG5cbiAgICB2YXIgcHJvY2Vzc0Vycm9ycyA9IGZ1bmN0aW9uIHByb2Nlc3NFcnJvcnMoKSB7XG4gICAgICB2YXIgbWVyZ2VkID0gX2V4dGVuZHMoe30sIGxpbWl0ZWRGaWVsZExldmVsVmFsaWRhdGlvbiA/IGZvcm1TdGF0ZS5lcnJvcnMgOiB7fSwgcmVjb3JkTGV2ZWxFcnJvcnMpO1xuXG4gICAgICB2YXIgZm9yRWFjaEVycm9yID0gZnVuY3Rpb24gZm9yRWFjaEVycm9yKGZuKSB7XG4gICAgICAgIGZpZWxkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgaWYgKGZpZWxkc1tuYW1lXSkge1xuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGZpZWxkIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiAgICAgICAgICAgIC8vIGZpZWxkLWxldmVsIGVycm9ycyB0YWtlIHByZWNlZGVudCBvdmVyIHJlY29yZC1sZXZlbCBlcnJvcnNcbiAgICAgICAgICAgIHZhciByZWNvcmRMZXZlbEVycm9yID0gZ2V0SW4ocmVjb3JkTGV2ZWxFcnJvcnMsIG5hbWUpO1xuICAgICAgICAgICAgdmFyIGVycm9yRnJvbVBhcmVudCA9IGdldEluKG1lcmdlZCwgbmFtZSk7XG4gICAgICAgICAgICB2YXIgaGFzRmllbGRMZXZlbFZhbGlkYXRpb24gPSBnZXRWYWxpZGF0b3JzKHNhZmVGaWVsZHNbbmFtZV0pLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBmaWVsZExldmVsRXJyb3IgPSBmaWVsZExldmVsRXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgZm4obmFtZSwgaGFzRmllbGRMZXZlbFZhbGlkYXRpb24gJiYgZmllbGRMZXZlbEVycm9yIHx8IHZhbGlkYXRlICYmIHJlY29yZExldmVsRXJyb3IgfHwgKCFyZWNvcmRMZXZlbEVycm9yICYmICFsaW1pdGVkRmllbGRMZXZlbFZhbGlkYXRpb24gPyBlcnJvckZyb21QYXJlbnQgOiB1bmRlZmluZWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgZm9yRWFjaEVycm9yKGZ1bmN0aW9uIChuYW1lLCBlcnJvcikge1xuICAgICAgICBtZXJnZWQgPSBzZXRJbihtZXJnZWQsIG5hbWUsIGVycm9yKSB8fCB7fTtcbiAgICAgIH0pO1xuICAgICAgZm9yRWFjaEVycm9yKGZ1bmN0aW9uIChuYW1lLCBlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3JbQVJSQVlfRVJST1JdKSB7XG4gICAgICAgICAgdmFyIGV4aXN0aW5nID0gZ2V0SW4obWVyZ2VkLCBuYW1lKTtcbiAgICAgICAgICB2YXIgY29weSA9IFtdLmNvbmNhdChleGlzdGluZyk7XG4gICAgICAgICAgY29weVtBUlJBWV9FUlJPUl0gPSBlcnJvcltBUlJBWV9FUlJPUl07XG4gICAgICAgICAgbWVyZ2VkID0gc2V0SW4obWVyZ2VkLCBuYW1lLCBjb3B5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghc2hhbGxvd0VxdWFsKGZvcm1TdGF0ZS5lcnJvcnMsIG1lcmdlZCkpIHtcbiAgICAgICAgZm9ybVN0YXRlLmVycm9ycyA9IG1lcmdlZDtcbiAgICAgIH1cblxuICAgICAgZm9ybVN0YXRlLmVycm9yID0gcmVjb3JkTGV2ZWxFcnJvcnNbRk9STV9FUlJPUl07XG4gICAgfTsgLy8gcHJvY2VzcyBzeW5jIGVycm9yc1xuXG5cbiAgICBwcm9jZXNzRXJyb3JzKCk7XG5cbiAgICBpZiAocHJvbWlzZXMubGVuZ3RoKSB7XG4gICAgICAvLyBzeW5jIGVycm9ycyBoYXZlIGJlZW4gc2V0LiBub3RpZnkgbGlzdGVuZXJzIHdoaWxlIHdlIHdhaXQgZm9yIG90aGVyc1xuICAgICAgc3RhdGUuZm9ybVN0YXRlLnZhbGlkYXRpbmcrKztcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhZnRlclByb21pc2VzID0gZnVuY3Rpb24gYWZ0ZXJQcm9taXNlcygpIHtcbiAgICAgICAgc3RhdGUuZm9ybVN0YXRlLnZhbGlkYXRpbmctLTtcbiAgICAgICAgcHJvY2Vzc0Vycm9ycygpO1xuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGFmdGVyUHJvbWlzZXMsIGFmdGVyUHJvbWlzZXMpO1xuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBub3RpZnlGaWVsZExpc3RlbmVycyA9IGZ1bmN0aW9uIG5vdGlmeUZpZWxkTGlzdGVuZXJzKGZvcmNlKSB7XG4gICAgaWYgKGluQmF0Y2ggfHwgdmFsaWRhdGlvblBhdXNlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBmaWVsZHMgPSBzdGF0ZS5maWVsZHMsXG4gICAgICAgIGZpZWxkU3Vic2NyaWJlcnMgPSBzdGF0ZS5maWVsZFN1YnNjcmliZXJzLFxuICAgICAgICBmb3JtU3RhdGUgPSBzdGF0ZS5mb3JtU3RhdGU7XG5cbiAgICB2YXIgc2FmZUZpZWxkcyA9IF9leHRlbmRzKHt9LCBmaWVsZHMpO1xuXG4gICAgT2JqZWN0LmtleXMoc2FmZUZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGZpZWxkID0gc2FmZUZpZWxkc1tuYW1lXTtcbiAgICAgIHZhciBmaWVsZFN0YXRlID0gcHVibGlzaEZpZWxkU3RhdGUoZm9ybVN0YXRlLCBmaWVsZCk7XG4gICAgICB2YXIgbGFzdEZpZWxkU3RhdGUgPSBmaWVsZC5sYXN0RmllbGRTdGF0ZTtcblxuICAgICAgaWYgKCFzaGFsbG93RXF1YWwoZmllbGRTdGF0ZSwgbGFzdEZpZWxkU3RhdGUpKSB7XG4gICAgICAgIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIC8vIEN1cmlvdXMgYWJvdXQgd2h5IGEgZmllbGQgaXMgZ2V0dGluZyBub3RpZmllZD8gVW5jb21tZW50IHRoaXMuXG4gICAgICAgIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIC8vIGNvbnN0IGRpZmZLZXlzID0gT2JqZWN0LmtleXMoZmllbGRTdGF0ZSkuZmlsdGVyKFxuICAgICAgICAvLyAgIGtleSA9PiBmaWVsZFN0YXRlW2tleV0gIT09IChsYXN0RmllbGRTdGF0ZSAmJiBsYXN0RmllbGRTdGF0ZVtrZXldKVxuICAgICAgICAvLyApXG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoXG4gICAgICAgIC8vICAgJ25vdGlmeWluZycsXG4gICAgICAgIC8vICAgZmllbGQubmFtZSxcbiAgICAgICAgLy8gICAnXFxuRmllbGQgU3RhdGVcXG4nLFxuICAgICAgICAvLyAgIGRpZmZLZXlzLnJlZHVjZShcbiAgICAgICAgLy8gICAgIChyZXN1bHQsIGtleSkgPT4gKHsgLi4ucmVzdWx0LCBba2V5XTogZmllbGRTdGF0ZVtrZXldIH0pLFxuICAgICAgICAvLyAgICAge31cbiAgICAgICAgLy8gICApLFxuICAgICAgICAvLyAgICdcXG5MYXN0IEZpZWxkIFN0YXRlXFxuJyxcbiAgICAgICAgLy8gICBkaWZmS2V5cy5yZWR1Y2UoXG4gICAgICAgIC8vICAgICAocmVzdWx0LCBrZXkpID0+ICh7XG4gICAgICAgIC8vICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgLy8gICAgICAgW2tleV06IGxhc3RGaWVsZFN0YXRlICYmIGxhc3RGaWVsZFN0YXRlW2tleV1cbiAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAvLyAgICAge31cbiAgICAgICAgLy8gICApXG4gICAgICAgIC8vIClcbiAgICAgICAgZmllbGQubGFzdEZpZWxkU3RhdGUgPSBmaWVsZFN0YXRlO1xuICAgICAgICB2YXIgZmllbGRTdWJzY3JpYmVyID0gZmllbGRTdWJzY3JpYmVyc1tuYW1lXTtcblxuICAgICAgICBpZiAoZmllbGRTdWJzY3JpYmVyKSB7XG4gICAgICAgICAgbm90aWZ5KGZpZWxkU3Vic2NyaWJlciwgZmllbGRTdGF0ZSwgbGFzdEZpZWxkU3RhdGUsIGZpbHRlckZpZWxkU3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIG1hcmtBbGxGaWVsZHNUb3VjaGVkID0gZnVuY3Rpb24gbWFya0FsbEZpZWxkc1RvdWNoZWQoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZmllbGRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHN0YXRlLmZpZWxkc1trZXldLnRvdWNoZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciBoYXNTeW5jRXJyb3JzID0gZnVuY3Rpb24gaGFzU3luY0Vycm9ycygpIHtcbiAgICByZXR1cm4gISEoc3RhdGUuZm9ybVN0YXRlLmVycm9yIHx8IGhhc0FueUVycm9yKHN0YXRlLmZvcm1TdGF0ZS5lcnJvcnMpKTtcbiAgfTtcblxuICB2YXIgY2FsY3VsYXRlTmV4dEZvcm1TdGF0ZSA9IGZ1bmN0aW9uIGNhbGN1bGF0ZU5leHRGb3JtU3RhdGUoKSB7XG4gICAgdmFyIGZpZWxkcyA9IHN0YXRlLmZpZWxkcyxcbiAgICAgICAgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlLFxuICAgICAgICBsYXN0Rm9ybVN0YXRlID0gc3RhdGUubGFzdEZvcm1TdGF0ZTtcblxuICAgIHZhciBzYWZlRmllbGRzID0gX2V4dGVuZHMoe30sIGZpZWxkcyk7XG5cbiAgICB2YXIgc2FmZUZpZWxkS2V5cyA9IE9iamVjdC5rZXlzKHNhZmVGaWVsZHMpOyAvLyBjYWxjdWxhdGUgZGlydHkvcHJpc3RpbmVcblxuICAgIHZhciBmb3VuZERpcnR5ID0gZmFsc2U7XG4gICAgdmFyIGRpcnR5RmllbGRzID0gc2FmZUZpZWxkS2V5cy5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICB2YXIgZGlydHkgPSAhc2FmZUZpZWxkc1trZXldLmlzRXF1YWwoZ2V0SW4oZm9ybVN0YXRlLnZhbHVlcywga2V5KSwgZ2V0SW4oZm9ybVN0YXRlLmluaXRpYWxWYWx1ZXMgfHwge30sIGtleSkpO1xuXG4gICAgICBpZiAoZGlydHkpIHtcbiAgICAgICAgZm91bmREaXJ0eSA9IHRydWU7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG4gICAgZm9ybVN0YXRlLnByaXN0aW5lID0gIWZvdW5kRGlydHk7XG4gICAgZm9ybVN0YXRlLmRpcnR5U2luY2VMYXN0U3VibWl0ID0gISEoZm9ybVN0YXRlLmxhc3RTdWJtaXR0ZWRWYWx1ZXMgJiYgIXNhZmVGaWVsZEtleXMuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgIHZhciBub25OdWxsTGFzdFN1Ym1pdHRlZFZhbHVlcyA9IGZvcm1TdGF0ZS5sYXN0U3VibWl0dGVkVmFsdWVzIHx8IHt9OyAvLyB8fCB7fSBpcyBmb3IgZmxvdywgYnV0IGNhdXNlcyBicmFuY2ggY292ZXJhZ2UgY29tcGxhaW50XG5cbiAgICAgIHJldHVybiBzYWZlRmllbGRzW2tleV0uaXNFcXVhbChnZXRJbihmb3JtU3RhdGUudmFsdWVzLCBrZXkpLCBnZXRJbihub25OdWxsTGFzdFN1Ym1pdHRlZFZhbHVlcywga2V5KSk7XG4gICAgfSkpO1xuICAgIGZvcm1TdGF0ZS52YWxpZCA9ICFmb3JtU3RhdGUuZXJyb3IgJiYgIWZvcm1TdGF0ZS5zdWJtaXRFcnJvciAmJiAhaGFzQW55RXJyb3IoZm9ybVN0YXRlLmVycm9ycykgJiYgIShmb3JtU3RhdGUuc3VibWl0RXJyb3JzICYmIGhhc0FueUVycm9yKGZvcm1TdGF0ZS5zdWJtaXRFcnJvcnMpKTtcbiAgICB2YXIgbmV4dEZvcm1TdGF0ZSA9IGNvbnZlcnRUb0V4dGVybmFsRm9ybVN0YXRlKGZvcm1TdGF0ZSk7XG5cbiAgICB2YXIgX3NhZmVGaWVsZEtleXMkcmVkdWNlID0gc2FmZUZpZWxkS2V5cy5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXN1bHQubW9kaWZpZWRba2V5XSA9IHNhZmVGaWVsZHNba2V5XS5tb2RpZmllZDtcbiAgICAgIHJlc3VsdC50b3VjaGVkW2tleV0gPSBzYWZlRmllbGRzW2tleV0udG91Y2hlZDtcbiAgICAgIHJlc3VsdC52aXNpdGVkW2tleV0gPSBzYWZlRmllbGRzW2tleV0udmlzaXRlZDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge1xuICAgICAgbW9kaWZpZWQ6IHt9LFxuICAgICAgdG91Y2hlZDoge30sXG4gICAgICB2aXNpdGVkOiB7fVxuICAgIH0pLFxuICAgICAgICBtb2RpZmllZCA9IF9zYWZlRmllbGRLZXlzJHJlZHVjZS5tb2RpZmllZCxcbiAgICAgICAgdG91Y2hlZCA9IF9zYWZlRmllbGRLZXlzJHJlZHVjZS50b3VjaGVkLFxuICAgICAgICB2aXNpdGVkID0gX3NhZmVGaWVsZEtleXMkcmVkdWNlLnZpc2l0ZWQ7XG5cbiAgICBuZXh0Rm9ybVN0YXRlLmRpcnR5RmllbGRzID0gbGFzdEZvcm1TdGF0ZSAmJiBzaGFsbG93RXF1YWwobGFzdEZvcm1TdGF0ZS5kaXJ0eUZpZWxkcywgZGlydHlGaWVsZHMpID8gbGFzdEZvcm1TdGF0ZS5kaXJ0eUZpZWxkcyA6IGRpcnR5RmllbGRzO1xuICAgIG5leHRGb3JtU3RhdGUubW9kaWZpZWQgPSBsYXN0Rm9ybVN0YXRlICYmIHNoYWxsb3dFcXVhbChsYXN0Rm9ybVN0YXRlLm1vZGlmaWVkLCBtb2RpZmllZCkgPyBsYXN0Rm9ybVN0YXRlLm1vZGlmaWVkIDogbW9kaWZpZWQ7XG4gICAgbmV4dEZvcm1TdGF0ZS50b3VjaGVkID0gbGFzdEZvcm1TdGF0ZSAmJiBzaGFsbG93RXF1YWwobGFzdEZvcm1TdGF0ZS50b3VjaGVkLCB0b3VjaGVkKSA/IGxhc3RGb3JtU3RhdGUudG91Y2hlZCA6IHRvdWNoZWQ7XG4gICAgbmV4dEZvcm1TdGF0ZS52aXNpdGVkID0gbGFzdEZvcm1TdGF0ZSAmJiBzaGFsbG93RXF1YWwobGFzdEZvcm1TdGF0ZS52aXNpdGVkLCB2aXNpdGVkKSA/IGxhc3RGb3JtU3RhdGUudmlzaXRlZCA6IHZpc2l0ZWQ7XG4gICAgcmV0dXJuIGxhc3RGb3JtU3RhdGUgJiYgc2hhbGxvd0VxdWFsKGxhc3RGb3JtU3RhdGUsIG5leHRGb3JtU3RhdGUpID8gbGFzdEZvcm1TdGF0ZSA6IG5leHRGb3JtU3RhdGU7XG4gIH07XG5cbiAgdmFyIGNhbGxEZWJ1ZyA9IGZ1bmN0aW9uIGNhbGxEZWJ1ZygpIHtcbiAgICByZXR1cm4gZGVidWcgJiYgXCJkZXZlbG9wbWVudFwiICE9PSAncHJvZHVjdGlvbicgJiYgZGVidWcoY2FsY3VsYXRlTmV4dEZvcm1TdGF0ZSgpLCBPYmplY3Qua2V5cyhzdGF0ZS5maWVsZHMpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gc3RhdGUuZmllbGRzW2tleV07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHt9KSk7XG4gIH07XG5cbiAgdmFyIG5vdGlmeWluZyA9IGZhbHNlO1xuICB2YXIgc2NoZWR1bGVOb3RpZmljYXRpb24gPSBmYWxzZTtcblxuICB2YXIgbm90aWZ5Rm9ybUxpc3RlbmVycyA9IGZ1bmN0aW9uIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKSB7XG4gICAgaWYgKG5vdGlmeWluZykge1xuICAgICAgc2NoZWR1bGVOb3RpZmljYXRpb24gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZnlpbmcgPSB0cnVlO1xuICAgICAgY2FsbERlYnVnKCk7XG5cbiAgICAgIGlmICghaW5CYXRjaCAmJiAhdmFsaWRhdGlvblBhdXNlZCkge1xuICAgICAgICB2YXIgbGFzdEZvcm1TdGF0ZSA9IHN0YXRlLmxhc3RGb3JtU3RhdGU7XG4gICAgICAgIHZhciBuZXh0Rm9ybVN0YXRlID0gY2FsY3VsYXRlTmV4dEZvcm1TdGF0ZSgpO1xuXG4gICAgICAgIGlmIChuZXh0Rm9ybVN0YXRlICE9PSBsYXN0Rm9ybVN0YXRlKSB7XG4gICAgICAgICAgc3RhdGUubGFzdEZvcm1TdGF0ZSA9IG5leHRGb3JtU3RhdGU7XG4gICAgICAgICAgbm90aWZ5KHN0YXRlLnN1YnNjcmliZXJzLCBuZXh0Rm9ybVN0YXRlLCBsYXN0Rm9ybVN0YXRlLCBmaWx0ZXJGb3JtU3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vdGlmeWluZyA9IGZhbHNlO1xuXG4gICAgICBpZiAoc2NoZWR1bGVOb3RpZmljYXRpb24pIHtcbiAgICAgICAgc2NoZWR1bGVOb3RpZmljYXRpb24gPSBmYWxzZTtcbiAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgYmVmb3JlU3VibWl0ID0gZnVuY3Rpb24gYmVmb3JlU3VibWl0KCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzdGF0ZS5maWVsZHMpLmZpbmQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5maWVsZHNbbmFtZV0uYmVmb3JlU3VibWl0ICYmIHN0YXRlLmZpZWxkc1tuYW1lXS5iZWZvcmVTdWJtaXQoKSA9PT0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIGFmdGVyU3VibWl0ID0gZnVuY3Rpb24gYWZ0ZXJTdWJtaXQoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHN0YXRlLmZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLmZpZWxkc1tuYW1lXS5hZnRlclN1Ym1pdCAmJiBzdGF0ZS5maWVsZHNbbmFtZV0uYWZ0ZXJTdWJtaXQoKTtcbiAgICB9KTtcbiAgfTsgLy8gZ2VuZXJhdGUgaW5pdGlhbCBlcnJvcnNcblxuXG4gIHJ1blZhbGlkYXRpb24oKTtcbiAgdmFyIGFwaSA9IHtcbiAgICBiYXRjaDogZnVuY3Rpb24gYmF0Y2goZm4pIHtcbiAgICAgIGluQmF0Y2ggPSB0cnVlO1xuICAgICAgZm4oKTtcbiAgICAgIGluQmF0Y2ggPSBmYWxzZTtcbiAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgfSxcbiAgICBibHVyOiBmdW5jdGlvbiBibHVyKG5hbWUpIHtcbiAgICAgIHZhciBmaWVsZHMgPSBzdGF0ZS5maWVsZHMsXG4gICAgICAgICAgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlO1xuICAgICAgdmFyIHByZXZpb3VzID0gZmllbGRzW25hbWVdO1xuXG4gICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgLy8gY2FuIG9ubHkgYmx1ciByZWdpc3RlcmVkIGZpZWxkc1xuICAgICAgICBkZWxldGUgZm9ybVN0YXRlLmFjdGl2ZTtcbiAgICAgICAgZmllbGRzW25hbWVdID0gX2V4dGVuZHMoe30sIHByZXZpb3VzLCB7XG4gICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICB0b3VjaGVkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZU9uQmx1cikge1xuICAgICAgICAgIHJ1blZhbGlkYXRpb24obmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY2hhbmdlOiBmdW5jdGlvbiBjaGFuZ2UobmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBmaWVsZHMgPSBzdGF0ZS5maWVsZHMsXG4gICAgICAgICAgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlO1xuXG4gICAgICBpZiAoZ2V0SW4oZm9ybVN0YXRlLnZhbHVlcywgbmFtZSkgIT09IHZhbHVlKSB7XG4gICAgICAgIGNoYW5nZVZhbHVlKHN0YXRlLCBuYW1lLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHByZXZpb3VzID0gZmllbGRzW25hbWVdO1xuXG4gICAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICAgIC8vIG9ubHkgdHJhY2sgbW9kaWZpZWQgZm9yIHJlZ2lzdGVyZWQgZmllbGRzXG4gICAgICAgICAgZmllbGRzW25hbWVdID0gX2V4dGVuZHMoe30sIHByZXZpb3VzLCB7XG4gICAgICAgICAgICBtb2RpZmllZDogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlT25CbHVyKSB7XG4gICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcnVuVmFsaWRhdGlvbihuYW1lLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBmb2N1czogZnVuY3Rpb24gZm9jdXMobmFtZSkge1xuICAgICAgdmFyIGZpZWxkID0gc3RhdGUuZmllbGRzW25hbWVdO1xuXG4gICAgICBpZiAoZmllbGQgJiYgIWZpZWxkLmFjdGl2ZSkge1xuICAgICAgICBzdGF0ZS5mb3JtU3RhdGUuYWN0aXZlID0gbmFtZTtcbiAgICAgICAgZmllbGQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZmllbGQudmlzaXRlZCA9IHRydWU7XG4gICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG11dGF0b3JzOiBtdXRhdG9yc0FwaSxcbiAgICBnZXRGaWVsZFN0YXRlOiBmdW5jdGlvbiBnZXRGaWVsZFN0YXRlKG5hbWUpIHtcbiAgICAgIHZhciBmaWVsZCA9IHN0YXRlLmZpZWxkc1tuYW1lXTtcbiAgICAgIHJldHVybiBmaWVsZCAmJiBmaWVsZC5sYXN0RmllbGRTdGF0ZTtcbiAgICB9LFxuICAgIGdldFJlZ2lzdGVyZWRGaWVsZHM6IGZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRGaWVsZHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoc3RhdGUuZmllbGRzKTtcbiAgICB9LFxuICAgIGdldFN0YXRlOiBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICAgIHJldHVybiBjYWxjdWxhdGVOZXh0Rm9ybVN0YXRlKCk7XG4gICAgfSxcbiAgICBpbml0aWFsaXplOiBmdW5jdGlvbiBpbml0aWFsaXplKGRhdGEpIHtcbiAgICAgIHZhciBmaWVsZHMgPSBzdGF0ZS5maWVsZHMsXG4gICAgICAgICAgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlO1xuXG4gICAgICB2YXIgc2FmZUZpZWxkcyA9IF9leHRlbmRzKHt9LCBmaWVsZHMpO1xuXG4gICAgICB2YXIgdmFsdWVzID0gdHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicgPyBkYXRhKGZvcm1TdGF0ZS52YWx1ZXMpIDogZGF0YTtcblxuICAgICAgaWYgKCFrZWVwRGlydHlPblJlaW5pdGlhbGl6ZSkge1xuICAgICAgICBmb3JtU3RhdGUudmFsdWVzID0gdmFsdWVzO1xuICAgICAgfVxuXG4gICAgICBPYmplY3Qua2V5cyhzYWZlRmllbGRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIGZpZWxkID0gc2FmZUZpZWxkc1trZXldO1xuICAgICAgICBmaWVsZC5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICBmaWVsZC50b3VjaGVkID0gZmFsc2U7XG4gICAgICAgIGZpZWxkLnZpc2l0ZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoa2VlcERpcnR5T25SZWluaXRpYWxpemUpIHtcbiAgICAgICAgICB2YXIgcHJpc3RpbmUgPSBmaWVsZC5pc0VxdWFsKGdldEluKGZvcm1TdGF0ZS52YWx1ZXMsIGtleSksIGdldEluKGZvcm1TdGF0ZS5pbml0aWFsVmFsdWVzIHx8IHt9LCBrZXkpKTtcblxuICAgICAgICAgIGlmIChwcmlzdGluZSkge1xuICAgICAgICAgICAgLy8gb25seSB1cGRhdGUgcHJpc3RpbmUgdmFsdWVzXG4gICAgICAgICAgICBmb3JtU3RhdGUudmFsdWVzID0gc2V0SW4oZm9ybVN0YXRlLnZhbHVlcywga2V5LCBnZXRJbih2YWx1ZXMsIGtleSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmb3JtU3RhdGUuaW5pdGlhbFZhbHVlcyA9IHZhbHVlcztcbiAgICAgIHJ1blZhbGlkYXRpb24odW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaXNWYWxpZGF0aW9uUGF1c2VkOiBmdW5jdGlvbiBpc1ZhbGlkYXRpb25QYXVzZWQoKSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGlvblBhdXNlZDtcbiAgICB9LFxuICAgIHBhdXNlVmFsaWRhdGlvbjogZnVuY3Rpb24gcGF1c2VWYWxpZGF0aW9uKCkge1xuICAgICAgdmFsaWRhdGlvblBhdXNlZCA9IHRydWU7XG4gICAgfSxcbiAgICByZWdpc3RlckZpZWxkOiBmdW5jdGlvbiByZWdpc3RlckZpZWxkKG5hbWUsIHN1YnNjcmliZXIsIHN1YnNjcmlwdGlvbiwgZmllbGRDb25maWcpIHtcbiAgICAgIGlmIChzdWJzY3JpcHRpb24gPT09IHZvaWQgMCkge1xuICAgICAgICBzdWJzY3JpcHRpb24gPSB7fTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzdGF0ZS5maWVsZFN1YnNjcmliZXJzW25hbWVdKSB7XG4gICAgICAgIHN0YXRlLmZpZWxkU3Vic2NyaWJlcnNbbmFtZV0gPSB7XG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgZW50cmllczoge31cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluZGV4ID0gc3RhdGUuZmllbGRTdWJzY3JpYmVyc1tuYW1lXS5pbmRleCsrOyAvLyBzYXZlIGZpZWxkIHN1YnNjcmliZXIgY2FsbGJhY2tcblxuICAgICAgc3RhdGUuZmllbGRTdWJzY3JpYmVyc1tuYW1lXS5lbnRyaWVzW2luZGV4XSA9IHtcbiAgICAgICAgc3Vic2NyaWJlcjogbWVtb2l6ZShzdWJzY3JpYmVyKSxcbiAgICAgICAgc3Vic2NyaXB0aW9uOiBzdWJzY3JpcHRpb25cbiAgICAgIH07XG5cbiAgICAgIGlmICghc3RhdGUuZmllbGRzW25hbWVdKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBpbml0aWFsIGZpZWxkIHN0YXRlXG4gICAgICAgIHN0YXRlLmZpZWxkc1tuYW1lXSA9IHtcbiAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIGFmdGVyU3VibWl0OiBmaWVsZENvbmZpZyAmJiBmaWVsZENvbmZpZy5hZnRlclN1Ym1pdCxcbiAgICAgICAgICBiZWZvcmVTdWJtaXQ6IGZpZWxkQ29uZmlnICYmIGZpZWxkQ29uZmlnLmJlZm9yZVN1Ym1pdCxcbiAgICAgICAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFwaS5ibHVyKG5hbWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiBjaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGkuY2hhbmdlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICAgIGZvY3VzOiBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGkuZm9jdXMobmFtZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc0VxdWFsOiBmaWVsZENvbmZpZyAmJiBmaWVsZENvbmZpZy5pc0VxdWFsIHx8IHRyaXBsZUVxdWFscyxcbiAgICAgICAgICBsYXN0RmllbGRTdGF0ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIG1vZGlmaWVkOiBmYWxzZSxcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHRvdWNoZWQ6IGZhbHNlLFxuICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgIHZhbGlkYXRlRmllbGRzOiBmaWVsZENvbmZpZyAmJiBmaWVsZENvbmZpZy52YWxpZGF0ZUZpZWxkcyxcbiAgICAgICAgICB2YWxpZGF0b3JzOiB7fSxcbiAgICAgICAgICB2aXNpdGVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGRDb25maWcpIHtcbiAgICAgICAgaWYgKGZpZWxkQ29uZmlnLmdldFZhbGlkYXRvcikge1xuICAgICAgICAgIHN0YXRlLmZpZWxkc1tuYW1lXS52YWxpZGF0b3JzW2luZGV4XSA9IGZpZWxkQ29uZmlnLmdldFZhbGlkYXRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZENvbmZpZy5pbml0aWFsVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0YXRlLmZvcm1TdGF0ZS5pbml0aWFsVmFsdWVzID0gc2V0SW4oc3RhdGUuZm9ybVN0YXRlLmluaXRpYWxWYWx1ZXMgfHwge30sIG5hbWUsIGZpZWxkQ29uZmlnLmluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgc3RhdGUuZm9ybVN0YXRlLnZhbHVlcyA9IHNldEluKHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIG5hbWUsIGZpZWxkQ29uZmlnLmluaXRpYWxWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGRDb25maWcuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdGF0ZS5mb3JtU3RhdGUudmFsdWVzID0gc2V0SW4oc3RhdGUuZm9ybVN0YXRlLnZhbHVlcywgbmFtZSwgZmllbGRDb25maWcuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc2VudEZpcnN0Tm90aWZpY2F0aW9uID0gZmFsc2U7XG5cbiAgICAgIHZhciBmaXJzdE5vdGlmaWNhdGlvbiA9IGZ1bmN0aW9uIGZpcnN0Tm90aWZpY2F0aW9uKCkge1xuICAgICAgICB2YXIgZmllbGRTdGF0ZSA9IHB1Ymxpc2hGaWVsZFN0YXRlKHN0YXRlLmZvcm1TdGF0ZSwgc3RhdGUuZmllbGRzW25hbWVdKTtcbiAgICAgICAgbm90aWZ5U3Vic2NyaWJlcihzdWJzY3JpYmVyLCBzdWJzY3JpcHRpb24sIGZpZWxkU3RhdGUsIHVuZGVmaW5lZCwgZmlsdGVyRmllbGRTdGF0ZSwgdHJ1ZSk7XG4gICAgICAgIHN0YXRlLmZpZWxkc1tuYW1lXS5sYXN0RmllbGRTdGF0ZSA9IGZpZWxkU3RhdGU7XG4gICAgICAgIHNlbnRGaXJzdE5vdGlmaWNhdGlvbiA9IHRydWU7XG4gICAgICB9O1xuXG4gICAgICBydW5WYWxpZGF0aW9uKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG5cbiAgICAgICAgaWYgKCFzZW50Rmlyc3ROb3RpZmljYXRpb24pIHtcbiAgICAgICAgICBmaXJzdE5vdGlmaWNhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVsZXRlIHN0YXRlLmZpZWxkc1tuYW1lXS52YWxpZGF0b3JzW2luZGV4XTtcbiAgICAgICAgZGVsZXRlIHN0YXRlLmZpZWxkU3Vic2NyaWJlcnNbbmFtZV0uZW50cmllc1tpbmRleF07XG5cbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhzdGF0ZS5maWVsZFN1YnNjcmliZXJzW25hbWVdLmVudHJpZXMpLmxlbmd0aCkge1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW25hbWVdO1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5maWVsZHNbbmFtZV07XG4gICAgICAgICAgc3RhdGUuZm9ybVN0YXRlLmVycm9ycyA9IHNldEluKHN0YXRlLmZvcm1TdGF0ZS5lcnJvcnMsIG5hbWUsIHVuZGVmaW5lZCkgfHwge307XG5cbiAgICAgICAgICBpZiAoZGVzdHJveU9uVW5yZWdpc3Rlcikge1xuICAgICAgICAgICAgc3RhdGUuZm9ybVN0YXRlLnZhbHVlcyA9IHNldEluKHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIG5hbWUsIHVuZGVmaW5lZCwgdHJ1ZSkgfHwge307XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcnVuVmFsaWRhdGlvbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGluaXRpYWxWYWx1ZXMpIHtcbiAgICAgIGlmIChpbml0aWFsVmFsdWVzID09PSB2b2lkIDApIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlcyA9IHN0YXRlLmZvcm1TdGF0ZS5pbml0aWFsVmFsdWVzO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5mb3JtU3RhdGUuc3VibWl0RmFpbGVkID0gZmFsc2U7XG4gICAgICBzdGF0ZS5mb3JtU3RhdGUuc3VibWl0U3VjY2VlZGVkID0gZmFsc2U7XG4gICAgICBkZWxldGUgc3RhdGUuZm9ybVN0YXRlLnN1Ym1pdEVycm9yO1xuICAgICAgZGVsZXRlIHN0YXRlLmZvcm1TdGF0ZS5zdWJtaXRFcnJvcnM7XG4gICAgICBkZWxldGUgc3RhdGUuZm9ybVN0YXRlLmxhc3RTdWJtaXR0ZWRWYWx1ZXM7XG4gICAgICBhcGkuaW5pdGlhbGl6ZShpbml0aWFsVmFsdWVzIHx8IHt9KTtcbiAgICB9LFxuICAgIHJlc3VtZVZhbGlkYXRpb246IGZ1bmN0aW9uIHJlc3VtZVZhbGlkYXRpb24oKSB7XG4gICAgICB2YWxpZGF0aW9uUGF1c2VkID0gZmFsc2U7XG5cbiAgICAgIGlmICh2YWxpZGF0aW9uQmxvY2tlZCkge1xuICAgICAgICAvLyB2YWxpZGF0aW9uIHdhcyBhdHRlbXB0ZWQgd2hpbGUgaXQgd2FzIHBhdXNlZCwgc28gcnVuIGl0IG5vd1xuICAgICAgICBydW5WYWxpZGF0aW9uKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFsaWRhdGlvbkJsb2NrZWQgPSBmYWxzZTtcbiAgICB9LFxuICAgIHNldENvbmZpZzogZnVuY3Rpb24gc2V0Q29uZmlnKG5hbWUsIHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgY2FzZSAnZGVidWcnOlxuICAgICAgICAgIGRlYnVnID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZGVzdHJveU9uVW5yZWdpc3Rlcic6XG4gICAgICAgICAgZGVzdHJveU9uVW5yZWdpc3RlciA9IHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2luaXRpYWxWYWx1ZXMnOlxuICAgICAgICAgIGFwaS5pbml0aWFsaXplKHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdrZWVwRGlydHlPblJlaW5pdGlhbGl6ZSc6XG4gICAgICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdtdXRhdG9ycyc6XG4gICAgICAgICAgbXV0YXRvcnMgPSB2YWx1ZTtcblxuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMobXV0YXRvcnNBcGkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG11dGF0b3JzQXBpW2tleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICBtdXRhdG9yc0FwaVtrZXldID0gZ2V0TXV0YXRvckFwaShrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG11dGF0b3JzQXBpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIG11dGF0b3JzQXBpW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdvblN1Ym1pdCc6XG4gICAgICAgICAgb25TdWJtaXQgPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd2YWxpZGF0ZSc6XG4gICAgICAgICAgdmFsaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgICBydW5WYWxpZGF0aW9uKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd2YWxpZGF0ZU9uQmx1cic6XG4gICAgICAgICAgdmFsaWRhdGVPbkJsdXIgPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pc2VkIG9wdGlvbiAnICsgbmFtZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdWJtaXQ6IGZ1bmN0aW9uIHN1Ym1pdCgpIHtcbiAgICAgIHZhciBmb3JtU3RhdGUgPSBzdGF0ZS5mb3JtU3RhdGU7XG5cbiAgICAgIGlmIChmb3JtU3RhdGUuc3VibWl0dGluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNTeW5jRXJyb3JzKCkpIHtcbiAgICAgICAgbWFya0FsbEZpZWxkc1RvdWNoZWQoKTtcbiAgICAgICAgc3RhdGUuZm9ybVN0YXRlLnN1Ym1pdEZhaWxlZCA9IHRydWU7XG4gICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgcmV0dXJuOyAvLyBubyBzdWJtaXQgZm9yIHlvdSEhXG4gICAgICB9XG5cbiAgICAgIHZhciBhc3luY1ZhbGlkYXRpb25Qcm9taXNlc0tleXMgPSBPYmplY3Qua2V5cyhhc3luY1ZhbGlkYXRpb25Qcm9taXNlcyk7XG5cbiAgICAgIGlmIChhc3luY1ZhbGlkYXRpb25Qcm9taXNlc0tleXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIHN0aWxsIHdhaXRpbmcgb24gYXN5bmMgdmFsaWRhdGlvbiB0byBjb21wbGV0ZS4uLlxuICAgICAgICBQcm9taXNlLmFsbChhc3luY1ZhbGlkYXRpb25Qcm9taXNlc0tleXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGFzeW5jVmFsaWRhdGlvblByb21pc2VzW051bWJlcihrZXkpXSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSwgW10pKS50aGVuKGFwaS5zdWJtaXQsIGFwaS5zdWJtaXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBmaWVsZEJsb2NraW5nU3VibWl0ID0gYmVmb3JlU3VibWl0KCk7XG5cbiAgICAgIGlmIChmaWVsZEJsb2NraW5nU3VibWl0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc29sdmVQcm9taXNlO1xuICAgICAgdmFyIGNvbXBsZXRlQ2FsbGVkID0gZmFsc2U7XG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKGVycm9ycykge1xuICAgICAgICBmb3JtU3RhdGUuc3VibWl0dGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChlcnJvcnMgJiYgaGFzQW55RXJyb3IoZXJyb3JzKSkge1xuICAgICAgICAgIGZvcm1TdGF0ZS5zdWJtaXRGYWlsZWQgPSB0cnVlO1xuICAgICAgICAgIGZvcm1TdGF0ZS5zdWJtaXRTdWNjZWVkZWQgPSBmYWxzZTtcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0RXJyb3JzID0gZXJyb3JzO1xuICAgICAgICAgIGZvcm1TdGF0ZS5zdWJtaXRFcnJvciA9IGVycm9yc1tGT1JNX0VSUk9SXTtcbiAgICAgICAgICBtYXJrQWxsRmllbGRzVG91Y2hlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtU3RhdGUuc3VibWl0RXJyb3JzO1xuICAgICAgICAgIGRlbGV0ZSBmb3JtU3RhdGUuc3VibWl0RXJyb3I7XG4gICAgICAgICAgZm9ybVN0YXRlLnN1Ym1pdEZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgIGZvcm1TdGF0ZS5zdWJtaXRTdWNjZWVkZWQgPSB0cnVlO1xuICAgICAgICAgIGFmdGVyU3VibWl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgIGNvbXBsZXRlQ2FsbGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAocmVzb2x2ZVByb21pc2UpIHtcbiAgICAgICAgICByZXNvbHZlUHJvbWlzZShlcnJvcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgIH07XG5cbiAgICAgIGZvcm1TdGF0ZS5zdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICAgIGZvcm1TdGF0ZS5zdWJtaXRGYWlsZWQgPSBmYWxzZTtcbiAgICAgIGZvcm1TdGF0ZS5zdWJtaXRTdWNjZWVkZWQgPSBmYWxzZTtcbiAgICAgIGZvcm1TdGF0ZS5sYXN0U3VibWl0dGVkVmFsdWVzID0gX2V4dGVuZHMoe30sIGZvcm1TdGF0ZS52YWx1ZXMpOyAvLyBvblN1Ym1pdCBpcyBlaXRoZXIgc3luYywgY2FsbGJhY2sgb3IgYXN5bmMgd2l0aCBhIFByb21pc2VcblxuICAgICAgdmFyIHJlc3VsdCA9IG9uU3VibWl0KGZvcm1TdGF0ZS52YWx1ZXMsIGFwaSwgY29tcGxldGUpO1xuXG4gICAgICBpZiAoIWNvbXBsZXRlQ2FsbGVkKSB7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgICAvLyBvblN1Ym1pdCBpcyBhc3luYyB3aXRoIGEgUHJvbWlzZVxuICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTsgLy8gbGV0IGV2ZXJ5b25lIGtub3cgd2UgYXJlIHN1Ym1pdHRpbmdcblxuICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7IC8vIG5vdGlmeSBmaWVsZHMgYWxzb1xuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGNvbXBsZXRlLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChvblN1Ym1pdC5sZW5ndGggPj0gMykge1xuICAgICAgICAgIC8vIG11c3QgYmUgYXN5bmMsIHNvIHdlIHNob3VsZCByZXR1cm4gYSBQcm9taXNlXG4gICAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpOyAvLyBsZXQgZXZlcnlvbmUga25vdyB3ZSBhcmUgc3VibWl0dGluZ1xuXG4gICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTsgLy8gbm90aWZ5IGZpZWxkcyBhbHNvXG5cbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvblN1Ym1pdCBpcyBzeW5jXG4gICAgICAgICAgY29tcGxldGUocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUoc3Vic2NyaWJlciwgc3Vic2NyaXB0aW9uKSB7XG4gICAgICBpZiAoIXN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjYWxsYmFjayBnaXZlbi4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzdWJzY3JpcHRpb24gcHJvdmlkZWQuIFdoYXQgdmFsdWVzIGRvIHlvdSB3YW50IHRvIGxpc3RlbiB0bz8nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1lbW9pemVkID0gbWVtb2l6ZShzdWJzY3JpYmVyKTtcbiAgICAgIHZhciBzdWJzY3JpYmVycyA9IHN0YXRlLnN1YnNjcmliZXJzLFxuICAgICAgICAgIGxhc3RGb3JtU3RhdGUgPSBzdGF0ZS5sYXN0Rm9ybVN0YXRlO1xuICAgICAgdmFyIGluZGV4ID0gc3Vic2NyaWJlcnMuaW5kZXgrKztcbiAgICAgIHN1YnNjcmliZXJzLmVudHJpZXNbaW5kZXhdID0ge1xuICAgICAgICBzdWJzY3JpYmVyOiBtZW1vaXplZCxcbiAgICAgICAgc3Vic2NyaXB0aW9uOiBzdWJzY3JpcHRpb25cbiAgICAgIH07XG4gICAgICB2YXIgbmV4dEZvcm1TdGF0ZSA9IGNhbGN1bGF0ZU5leHRGb3JtU3RhdGUoKTtcblxuICAgICAgaWYgKG5leHRGb3JtU3RhdGUgIT09IGxhc3RGb3JtU3RhdGUpIHtcbiAgICAgICAgc3RhdGUubGFzdEZvcm1TdGF0ZSA9IG5leHRGb3JtU3RhdGU7XG4gICAgICB9XG5cbiAgICAgIG5vdGlmeVN1YnNjcmliZXIobWVtb2l6ZWQsIHN1YnNjcmlwdGlvbiwgbmV4dEZvcm1TdGF0ZSwgbmV4dEZvcm1TdGF0ZSwgZmlsdGVyRm9ybVN0YXRlLCB0cnVlKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlbGV0ZSBzdWJzY3JpYmVycy5lbnRyaWVzW2luZGV4XTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICByZXR1cm4gYXBpO1xufTtcblxuLy9cblxuZXhwb3J0IHsgQVJSQVlfRVJST1IsIEZPUk1fRVJST1IsIGNvbmZpZ09wdGlvbnMsIGNyZWF0ZUZvcm0sIGZpZWxkU3Vic2NyaXB0aW9uSXRlbXMsIGZvcm1TdWJzY3JpcHRpb25JdGVtcywgZ2V0SW4sIHNldEluLCB2ZXJzaW9uIH07XG4iLCJtb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgbz10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxyKSxvLmw9ITAsby5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmQ9ZnVuY3Rpb24oZSx0LG4pe3IubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIucj1mdW5jdGlvbihlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxyLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPXIoZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtpZihyLnIobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpZm9yKHZhciBvIGluIGUpci5kKG4sbyxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLG8pKTtyZXR1cm4gbn0sci5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQodCxcImFcIix0KSx0fSxyLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LHIucD1cIlwiLHIoci5zPTApfShbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9LG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24odCxyLG4pe3JldHVybiByJiZlKHQucHJvdG90eXBlLHIpLG4mJmUodCxuKSx0fX0oKSxhPWkocigxKSksdT1pKHIoNCkpLGw9aShyKDcpKTtmdW5jdGlvbiBpKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgcz17aXRlbXM6dS5kZWZhdWx0LmFycmF5LmlzUmVxdWlyZWQsb25DaGFuZ2VQYWdlOnUuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsaW5pdGlhbFBhZ2U6dS5kZWZhdWx0Lm51bWJlcixwYWdlU2l6ZTp1LmRlZmF1bHQubnVtYmVyLG1heFBhZ2VzOnUuZGVmYXVsdC5udW1iZXIsbGFiZWxzOnUuZGVmYXVsdC5vYmplY3Qsc3R5bGVzOnUuZGVmYXVsdC5vYmplY3QsZGlzYWJsZURlZmF1bHRTdHlsZXM6dS5kZWZhdWx0LmJvb2x9LGM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLHQpO3ZhciByPWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiF0fHxcIm9iamVjdFwiIT10eXBlb2YgdCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdD9lOnR9KHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcyxlKSk7cmV0dXJuIHIuc3RhdGU9e3BhZ2VyOnt9fSxyLnN0eWxlcz17fSxlLmRpc2FibGVEZWZhdWx0U3R5bGVzfHwoci5zdHlsZXM9e3VsOnttYXJnaW46MCxwYWRkaW5nOjAsZGlzcGxheTpcImlubGluZS1ibG9ja1wifSxsaTp7bGlzdFN0eWxlOlwibm9uZVwiLGRpc3BsYXk6XCJpbmxpbmVcIix0ZXh0QWxpZ246XCJjZW50ZXJcIn0sYTp7Y3Vyc29yOlwicG9pbnRlclwiLHBhZGRpbmc6XCI2cHggMTJweFwiLGRpc3BsYXk6XCJibG9ja1wiLGZsb2F0OlwibGVmdFwifX0pLGUuc3R5bGVzJiYoci5zdHlsZXM9e3VsOm4oe30sci5zdHlsZXMudWwsZS5zdHlsZXMudWwpLGxpOm4oe30sci5zdHlsZXMubGksZS5zdHlsZXMubGkpLGE6bih7fSxyLnN0eWxlcy5hLGUuc3R5bGVzLmEpfSkscn1yZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0odCxhLmRlZmF1bHQuQ29tcG9uZW50KSxvKHQsW3trZXk6XCJjb21wb25lbnRXaWxsTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuaXRlbXMmJnRoaXMucHJvcHMuaXRlbXMubGVuZ3RoJiZ0aGlzLnNldFBhZ2UodGhpcy5wcm9wcy5pbml0aWFsUGFnZSl9fSx7a2V5OlwiY29tcG9uZW50RGlkVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLnByb3BzLml0ZW1zIT09ZS5pdGVtcyYmdGhpcy5zZXRQYWdlKHRoaXMucHJvcHMuaW5pdGlhbFBhZ2UpfX0se2tleTpcInNldFBhZ2VcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLHI9dC5pdGVtcyxuPXQucGFnZVNpemUsbz10Lm1heFBhZ2VzLGE9dGhpcy5zdGF0ZS5wYWdlcjthPSgwLGwuZGVmYXVsdCkoci5sZW5ndGgsZSxuLG8pO3ZhciB1PXIuc2xpY2UoYS5zdGFydEluZGV4LGEuZW5kSW5kZXgrMSk7dGhpcy5zZXRTdGF0ZSh7cGFnZXI6YX0pLHRoaXMucHJvcHMub25DaGFuZ2VQYWdlKHUpfX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuc3RhdGUucGFnZXIscj10aGlzLnByb3BzLmxhYmVscyxuPXRoaXMuc3R5bGVzO3JldHVybiF0LnBhZ2VzfHx0LnBhZ2VzLmxlbmd0aDw9MT9udWxsOmEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwidWxcIix7Y2xhc3NOYW1lOlwicGFnaW5hdGlvblwiLHN0eWxlOm4udWx9LGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGlcIix7Y2xhc3NOYW1lOlwicGFnZS1pdGVtIGZpcnN0IFwiKygxPT09dC5jdXJyZW50UGFnZT9cImRpc2FibGVkXCI6XCJcIiksc3R5bGU6bi5saX0sYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJhXCIse2NsYXNzTmFtZTpcInBhZ2UtbGlua1wiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXRQYWdlKDEpfSxzdHlsZTpuLmF9LHIuZmlyc3QpKSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImxpXCIse2NsYXNzTmFtZTpcInBhZ2UtaXRlbSBwcmV2aW91cyBcIisoMT09PXQuY3VycmVudFBhZ2U/XCJkaXNhYmxlZFwiOlwiXCIpLHN0eWxlOm4ubGl9LGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYVwiLHtjbGFzc05hbWU6XCJwYWdlLWxpbmtcIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0UGFnZSh0LmN1cnJlbnRQYWdlLTEpfSxzdHlsZTpuLmF9LHIucHJldmlvdXMpKSx0LnBhZ2VzLm1hcChmdW5jdGlvbihyLG8pe3JldHVybiBhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImxpXCIse2tleTpvLGNsYXNzTmFtZTpcInBhZ2UtaXRlbSBwYWdlLW51bWJlciBcIisodC5jdXJyZW50UGFnZT09PXI/XCJhY3RpdmVcIjpcIlwiKSxzdHlsZTpuLmxpfSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIix7Y2xhc3NOYW1lOlwicGFnZS1saW5rXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldFBhZ2Uocil9LHN0eWxlOm4uYX0scikpfSksYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLHtjbGFzc05hbWU6XCJwYWdlLWl0ZW0gbmV4dCBcIisodC5jdXJyZW50UGFnZT09PXQudG90YWxQYWdlcz9cImRpc2FibGVkXCI6XCJcIiksc3R5bGU6bi5saX0sYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJhXCIse2NsYXNzTmFtZTpcInBhZ2UtbGlua1wiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXRQYWdlKHQuY3VycmVudFBhZ2UrMSl9LHN0eWxlOm4uYX0sci5uZXh0KSksYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLHtjbGFzc05hbWU6XCJwYWdlLWl0ZW0gbGFzdCBcIisodC5jdXJyZW50UGFnZT09PXQudG90YWxQYWdlcz9cImRpc2FibGVkXCI6XCJcIiksc3R5bGU6bi5saX0sYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJhXCIse2NsYXNzTmFtZTpcInBhZ2UtbGlua1wiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXRQYWdlKHQudG90YWxQYWdlcyl9LHN0eWxlOm4uYX0sci5sYXN0KSkpfX1dKSx0fSgpO2MucHJvcFR5cGVzPXMsYy5kZWZhdWx0UHJvcHM9e2luaXRpYWxQYWdlOjEscGFnZVNpemU6MTAsbWF4UGFnZXM6MTAsbGFiZWxzOntmaXJzdDpcIkZpcnN0XCIsbGFzdDpcIkxhc3RcIixwcmV2aW91czpcIlByZXZpb3VzXCIsbmV4dDpcIk5leHRcIn19LHQuZGVmYXVsdD1jfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXIoMil9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtcbi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuOC42XG4gKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovdmFyIG49cigzKSxvPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixhPW8/U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIik6NjAxMDMsdT1vP1N5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIik6NjAxMDYsbD1vP1N5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKTo2MDEwNyxpPW8/U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpOjYwMTA4LHM9bz9TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik6NjAxMTQsYz1vP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTo2MDEwOSxmPW8/U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIik6NjAxMTAscD1vP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEseT1vP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixkPW8/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLG09bz9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSxnPW8/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsYj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiB2KGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTEscj1cImh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PVwiK2Usbj0wO248dDtuKyspcis9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbbisxXSk7IWZ1bmN0aW9uKGUsdCxyLG4sbyxhLHUsbCl7aWYoIWUpe2lmKGU9dm9pZCAwLHZvaWQgMD09PXQpZT1FcnJvcihcIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCIpO2Vsc2V7dmFyIGk9W3IsbixvLGEsdSxsXSxzPTA7KGU9RXJyb3IodC5yZXBsYWNlKC8lcy9nLGZ1bmN0aW9uKCl7cmV0dXJuIGlbcysrXX0pKSkubmFtZT1cIkludmFyaWFudCBWaW9sYXRpb25cIn10aHJvdyBlLmZyYW1lc1RvUG9wPTEsZX19KCExLFwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2UrXCI7IHZpc2l0ICVzIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4gXCIscil9dmFyIGg9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LFA9e307ZnVuY3Rpb24gXyhlLHQscil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1QLHRoaXMudXBkYXRlcj1yfHxofWZ1bmN0aW9uIE8oKXt9ZnVuY3Rpb24gUyhlLHQscil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1QLHRoaXMudXBkYXRlcj1yfHxofV8ucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sXy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9ZSYmdihcIjg1XCIpLHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsXCJzZXRTdGF0ZVwiKX0sXy5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLGUsXCJmb3JjZVVwZGF0ZVwiKX0sTy5wcm90b3R5cGU9Xy5wcm90b3R5cGU7dmFyIGs9Uy5wcm90b3R5cGU9bmV3IE87ay5jb25zdHJ1Y3Rvcj1TLG4oayxfLnByb3RvdHlwZSksay5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgaj17Y3VycmVudDpudWxsfSx4PXtjdXJyZW50Om51bGx9LHc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gQyhlLHQscil7dmFyIG49dm9pZCAwLG89e30sdT1udWxsLGw9bnVsbDtpZihudWxsIT10KWZvcihuIGluIHZvaWQgMCE9PXQucmVmJiYobD10LnJlZiksdm9pZCAwIT09dC5rZXkmJih1PVwiXCIrdC5rZXkpLHQpdy5jYWxsKHQsbikmJiFFLmhhc093blByb3BlcnR5KG4pJiYob1tuXT10W25dKTt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWkpby5jaGlsZHJlbj1yO2Vsc2UgaWYoMTxpKXtmb3IodmFyIHM9QXJyYXkoaSksYz0wO2M8aTtjKyspc1tjXT1hcmd1bWVudHNbYysyXTtvLmNoaWxkcmVuPXN9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKG4gaW4gaT1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT1vW25dJiYob1tuXT1pW25dKTtyZXR1cm57JCR0eXBlb2Y6YSx0eXBlOmUsa2V5OnUscmVmOmwscHJvcHM6byxfb3duZXI6eC5jdXJyZW50fX1mdW5jdGlvbiBSKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmZS4kJHR5cGVvZj09PWF9dmFyICQ9L1xcLysvZyxUPVtdO2Z1bmN0aW9uIE0oZSx0LHIsbil7aWYoVC5sZW5ndGgpe3ZhciBvPVQucG9wKCk7cmV0dXJuIG8ucmVzdWx0PWUsby5rZXlQcmVmaXg9dCxvLmZ1bmM9cixvLmNvbnRleHQ9bixvLmNvdW50PTAsb31yZXR1cm57cmVzdWx0OmUsa2V5UHJlZml4OnQsZnVuYzpyLGNvbnRleHQ6bixjb3VudDowfX1mdW5jdGlvbiBOKGUpe2UucmVzdWx0PW51bGwsZS5rZXlQcmVmaXg9bnVsbCxlLmZ1bmM9bnVsbCxlLmNvbnRleHQ9bnVsbCxlLmNvdW50PTAsMTA+VC5sZW5ndGgmJlQucHVzaChlKX1mdW5jdGlvbiBJKGUsdCxyKXtyZXR1cm4gbnVsbD09ZT8wOmZ1bmN0aW9uIGUodCxyLG4sbyl7dmFyIGw9dHlwZW9mIHQ7XCJ1bmRlZmluZWRcIiE9PWwmJlwiYm9vbGVhblwiIT09bHx8KHQ9bnVsbCk7dmFyIGk9ITE7aWYobnVsbD09PXQpaT0hMDtlbHNlIHN3aXRjaChsKXtjYXNlXCJzdHJpbmdcIjpjYXNlXCJudW1iZXJcIjppPSEwO2JyZWFrO2Nhc2VcIm9iamVjdFwiOnN3aXRjaCh0LiQkdHlwZW9mKXtjYXNlIGE6Y2FzZSB1Omk9ITB9fWlmKGkpcmV0dXJuIG4obyx0LFwiXCI9PT1yP1wiLlwiK0EodCwwKTpyKSwxO2lmKGk9MCxyPVwiXCI9PT1yP1wiLlwiOnIrXCI6XCIsQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGM9citBKGw9dFtzXSxzKTtpKz1lKGwsYyxuLG8pfWVsc2UgaWYoYz1udWxsPT09dHx8XCJvYmplY3RcIiE9dHlwZW9mIHQ/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZihjPWImJnRbYl18fHRbXCJAQGl0ZXJhdG9yXCJdKT9jOm51bGwsXCJmdW5jdGlvblwiPT10eXBlb2YgYylmb3IodD1jLmNhbGwodCkscz0wOyEobD10Lm5leHQoKSkuZG9uZTspaSs9ZShsPWwudmFsdWUsYz1yK0EobCxzKyspLG4sbyk7ZWxzZVwib2JqZWN0XCI9PT1sJiZ2KFwiMzFcIixcIltvYmplY3QgT2JqZWN0XVwiPT0obj1cIlwiK3QpP1wib2JqZWN0IHdpdGgga2V5cyB7XCIrT2JqZWN0LmtleXModCkuam9pbihcIiwgXCIpK1wifVwiOm4sXCJcIik7cmV0dXJuIGl9KGUsXCJcIix0LHIpfWZ1bmN0aW9uIEEoZSx0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJm51bGwhPWUua2V5P2Z1bmN0aW9uKGUpe3ZhciB0PXtcIj1cIjpcIj0wXCIsXCI6XCI6XCI9MlwifTtyZXR1cm5cIiRcIisoXCJcIitlKS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX0oZS5rZXkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIHEoZSx0KXtlLmZ1bmMuY2FsbChlLmNvbnRleHQsdCxlLmNvdW50KyspfWZ1bmN0aW9uIFUoZSx0LHIpe3ZhciBuPWUucmVzdWx0LG89ZS5rZXlQcmVmaXg7ZT1lLmZ1bmMuY2FsbChlLmNvbnRleHQsdCxlLmNvdW50KyspLEFycmF5LmlzQXJyYXkoZSk/RChlLG4scixmdW5jdGlvbihlKXtyZXR1cm4gZX0pOm51bGwhPWUmJihSKGUpJiYoZT1mdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjphLHR5cGU6ZS50eXBlLGtleTp0LHJlZjplLnJlZixwcm9wczplLnByb3BzLF9vd25lcjplLl9vd25lcn19KGUsbysoIWUua2V5fHx0JiZ0LmtleT09PWUua2V5P1wiXCI6KFwiXCIrZS5rZXkpLnJlcGxhY2UoJCxcIiQmL1wiKStcIi9cIikrcikpLG4ucHVzaChlKSl9ZnVuY3Rpb24gRChlLHQscixuLG8pe3ZhciBhPVwiXCI7bnVsbCE9ciYmKGE9KFwiXCIrcikucmVwbGFjZSgkLFwiJCYvXCIpK1wiL1wiKSxJKGUsVSx0PU0odCxhLG4sbykpLE4odCl9ZnVuY3Rpb24gTCgpe3ZhciBlPWouY3VycmVudDtyZXR1cm4gbnVsbD09PWUmJnYoXCIzMjFcIiksZX12YXIgRj17Q2hpbGRyZW46e21hcDpmdW5jdGlvbihlLHQscil7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgbj1bXTtyZXR1cm4gRChlLG4sbnVsbCx0LHIpLG59LGZvckVhY2g6ZnVuY3Rpb24oZSx0LHIpe2lmKG51bGw9PWUpcmV0dXJuIGU7SShlLHEsdD1NKG51bGwsbnVsbCx0LHIpKSxOKHQpfSxjb3VudDpmdW5jdGlvbihlKXtyZXR1cm4gSShlLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG51bGwpfSx0b0FycmF5OmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBEKGUsdCxudWxsLGZ1bmN0aW9uKGUpe3JldHVybiBlfSksdH0sb25seTpmdW5jdGlvbihlKXtyZXR1cm4gUihlKXx8dihcIjE0M1wiKSxlfX0sY3JlYXRlUmVmOmZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19LENvbXBvbmVudDpfLFB1cmVDb21wb25lbnQ6UyxjcmVhdGVDb250ZXh0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLChlPXskJHR5cGVvZjpmLF9jYWxjdWxhdGVDaGFuZ2VkQml0czp0LF9jdXJyZW50VmFsdWU6ZSxfY3VycmVudFZhbHVlMjplLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbH0pLlByb3ZpZGVyPXskJHR5cGVvZjpjLF9jb250ZXh0OmV9LGUuQ29uc3VtZXI9ZX0sZm9yd2FyZFJlZjpmdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6eSxyZW5kZXI6ZX19LGxhenk6ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOmcsX2N0b3I6ZSxfc3RhdHVzOi0xLF9yZXN1bHQ6bnVsbH19LG1lbW86ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6bSx0eXBlOmUsY29tcGFyZTp2b2lkIDA9PT10P251bGw6dH19LHVzZUNhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEwoKS51c2VDYWxsYmFjayhlLHQpfSx1c2VDb250ZXh0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEwoKS51c2VDb250ZXh0KGUsdCl9LHVzZUVmZmVjdDpmdW5jdGlvbihlLHQpe3JldHVybiBMKCkudXNlRWZmZWN0KGUsdCl9LHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBMKCkudXNlSW1wZXJhdGl2ZUhhbmRsZShlLHQscil9LHVzZURlYnVnVmFsdWU6ZnVuY3Rpb24oKXt9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihlLHQpe3JldHVybiBMKCkudXNlTGF5b3V0RWZmZWN0KGUsdCl9LHVzZU1lbW86ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTCgpLnVzZU1lbW8oZSx0KX0sdXNlUmVkdWNlcjpmdW5jdGlvbihlLHQscil7cmV0dXJuIEwoKS51c2VSZWR1Y2VyKGUsdCxyKX0sdXNlUmVmOmZ1bmN0aW9uKGUpe3JldHVybiBMKCkudXNlUmVmKGUpfSx1c2VTdGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gTCgpLnVzZVN0YXRlKGUpfSxGcmFnbWVudDpsLFN0cmljdE1vZGU6aSxTdXNwZW5zZTpkLGNyZWF0ZUVsZW1lbnQ6QyxjbG9uZUVsZW1lbnQ6ZnVuY3Rpb24oZSx0LHIpe251bGw9PWUmJnYoXCIyNjdcIixlKTt2YXIgbz12b2lkIDAsdT1uKHt9LGUucHJvcHMpLGw9ZS5rZXksaT1lLnJlZixzPWUuX293bmVyO2lmKG51bGwhPXQpe3ZvaWQgMCE9PXQucmVmJiYoaT10LnJlZixzPXguY3VycmVudCksdm9pZCAwIT09dC5rZXkmJihsPVwiXCIrdC5rZXkpO3ZhciBjPXZvaWQgMDtmb3IobyBpbiBlLnR5cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMmJihjPWUudHlwZS5kZWZhdWx0UHJvcHMpLHQpdy5jYWxsKHQsbykmJiFFLmhhc093blByb3BlcnR5KG8pJiYodVtvXT12b2lkIDA9PT10W29dJiZ2b2lkIDAhPT1jP2Nbb106dFtvXSl9aWYoMT09PShvPWFyZ3VtZW50cy5sZW5ndGgtMikpdS5jaGlsZHJlbj1yO2Vsc2UgaWYoMTxvKXtjPUFycmF5KG8pO2Zvcih2YXIgZj0wO2Y8bztmKyspY1tmXT1hcmd1bWVudHNbZisyXTt1LmNoaWxkcmVuPWN9cmV0dXJueyQkdHlwZW9mOmEsdHlwZTplLnR5cGUsa2V5OmwscmVmOmkscHJvcHM6dSxfb3duZXI6c319LGNyZWF0ZUZhY3Rvcnk6ZnVuY3Rpb24oZSl7dmFyIHQ9Qy5iaW5kKG51bGwsZSk7cmV0dXJuIHQudHlwZT1lLHR9LGlzVmFsaWRFbGVtZW50OlIsdmVyc2lvbjpcIjE2LjguNlwiLHVuc3RhYmxlX0NvbmN1cnJlbnRNb2RlOnAsdW5zdGFibGVfUHJvZmlsZXI6cyxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjpqLFJlYWN0Q3VycmVudE93bmVyOngsYXNzaWduOm59fSx6PXtkZWZhdWx0OkZ9LFY9eiYmRnx8ejtlLmV4cG9ydHM9Vi5kZWZhdWx0fHxWfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7XG4vKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi92YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoXCJhYmNcIik7aWYoZVs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30scj0wO3I8MTA7cisrKXRbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShyKV09cjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pLmpvaW4oXCJcIikpcmV0dXJuITE7dmFyIG49e307cmV0dXJuXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiLnNwbGl0KFwiXCIpLmZvckVhY2goZnVuY3Rpb24oZSl7bltlXT1lfSksXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxuKSkuam9pbihcIlwiKX1jYXRjaChlKXtyZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcix1LGw9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWRcIik7cmV0dXJuIE9iamVjdChlKX0oZSksaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe2Zvcih2YXIgcyBpbiByPU9iamVjdChhcmd1bWVudHNbaV0pKW8uY2FsbChyLHMpJiYobFtzXT1yW3NdKTtpZihuKXt1PW4ocik7Zm9yKHZhciBjPTA7Yzx1Lmxlbmd0aDtjKyspYS5jYWxsKHIsdVtjXSkmJihsW3VbY11dPXJbdVtjXV0pfX1yZXR1cm4gbH19LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cig1KSgpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig2KTtmdW5jdGlvbiBvKCl7fWZ1bmN0aW9uIGEoKXt9YS5yZXNldFdhcm5pbmdDYWNoZT1vLGUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIsbyxhLHUpe2lmKHUhPT1uKXt2YXIgbD1uZXcgRXJyb3IoXCJDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiBVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzXCIpO3Rocm93IGwubmFtZT1cIkludmFyaWFudCBWaW9sYXRpb25cIixsfX1mdW5jdGlvbiB0KCl7cmV0dXJuIGV9ZS5pc1JlcXVpcmVkPWU7dmFyIHI9e2FycmF5OmUsYm9vbDplLGZ1bmM6ZSxudW1iZXI6ZSxvYmplY3Q6ZSxzdHJpbmc6ZSxzeW1ib2w6ZSxhbnk6ZSxhcnJheU9mOnQsZWxlbWVudDplLGVsZW1lbnRUeXBlOmUsaW5zdGFuY2VPZjp0LG5vZGU6ZSxvYmplY3RPZjp0LG9uZU9mOnQsb25lT2ZUeXBlOnQsc2hhcGU6dCxleGFjdDp0LGNoZWNrUHJvcFR5cGVzOmEscmVzZXRXYXJuaW5nQ2FjaGU6b307cmV0dXJuIHIuUHJvcFR5cGVzPXIscn19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9XCJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRFwifSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4pe3ZvaWQgMD09PXQmJih0PTEpLHZvaWQgMD09PXImJihyPTEwKSx2b2lkIDA9PT1uJiYobj0xMCk7dmFyIG8sYSx1PU1hdGguY2VpbChlL3IpO2lmKHQ8MT90PTE6dD51JiYodD11KSx1PD1uKW89MSxhPXU7ZWxzZXt2YXIgbD1NYXRoLmZsb29yKG4vMiksaT1NYXRoLmNlaWwobi8yKS0xO3Q8PWw/KG89MSxhPW4pOnQraT49dT8obz11LW4rMSxhPXUpOihvPXQtbCxhPXQraSl9dmFyIHM9KHQtMSkqcixjPU1hdGgubWluKHMrci0xLGUtMSksZj1BcnJheS5mcm9tKEFycmF5KGErMS1vKS5rZXlzKCkpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbytlfSk7cmV0dXJue3RvdGFsSXRlbXM6ZSxjdXJyZW50UGFnZTp0LHBhZ2VTaXplOnIsdG90YWxQYWdlczp1LHN0YXJ0UGFnZTpvLGVuZFBhZ2U6YSxzdGFydEluZGV4OnMsZW5kSW5kZXg6YyxwYWdlczpmfX19XSk7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZW1pemUoIGZuLCBvcHRpb25zICkge1xuXHR2YXIgc2l6ZSA9IDAsXG5cdFx0bWF4U2l6ZSwgaGVhZCwgdGFpbDtcblxuXHRpZiAoIG9wdGlvbnMgJiYgb3B0aW9ucy5tYXhTaXplICkge1xuXHRcdG1heFNpemUgPSBvcHRpb25zLm1heFNpemU7XG5cdH1cblxuXHRmdW5jdGlvbiBtZW1vaXplZCggLyogLi4uYXJncyAqLyApIHtcblx0XHR2YXIgbm9kZSA9IGhlYWQsXG5cdFx0XHRsZW4gPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdFx0YXJncywgaTtcblxuXHRcdHNlYXJjaENhY2hlOiB3aGlsZSAoIG5vZGUgKSB7XG5cdFx0XHQvLyBQZXJmb3JtIGEgc2hhbGxvdyBlcXVhbGl0eSB0ZXN0IHRvIGNvbmZpcm0gdGhhdCB3aGV0aGVyIHRoZSBub2RlXG5cdFx0XHQvLyB1bmRlciB0ZXN0IGlzIGEgY2FuZGlkYXRlIGZvciB0aGUgYXJndW1lbnRzIHBhc3NlZC4gVHdvIGFycmF5c1xuXHRcdFx0Ly8gYXJlIHNoYWxsb3dseSBlcXVhbCBpZiB0aGVpciBsZW5ndGggbWF0Y2hlcyBhbmQgZWFjaCBlbnRyeSBpc1xuXHRcdFx0Ly8gc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgdHdvIHNldHMuIEF2b2lkIGFic3RyYWN0aW5nIHRvIGFcblx0XHRcdC8vIGZ1bmN0aW9uIHdoaWNoIGNvdWxkIGluY3VyIGFuIGFyZ3VtZW50cyBsZWFraW5nIGRlb3B0aW1pemF0aW9uLlxuXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIG5vZGUgYXJndW1lbnRzIG1hdGNoIGFyZ3VtZW50cyBsZW5ndGhcblx0XHRcdGlmICggbm9kZS5hcmdzLmxlbmd0aCAhPT0gYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dDtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgbm9kZSBhcmd1bWVudHMgbWF0Y2ggYXJndW1lbnRzIHZhbHVlc1xuXHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0aWYgKCBub2RlLmFyZ3NbIGkgXSAhPT0gYXJndW1lbnRzWyBpIF0gKSB7XG5cdFx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dDtcblx0XHRcdFx0XHRjb250aW51ZSBzZWFyY2hDYWNoZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50IHdlIGNhbiBhc3N1bWUgd2UndmUgZm91bmQgYSBtYXRjaFxuXG5cdFx0XHQvLyBTdXJmYWNlIG1hdGNoZWQgbm9kZSB0byBoZWFkIGlmIG5vdCBhbHJlYWR5XG5cdFx0XHRpZiAoIG5vZGUgIT09IGhlYWQgKSB7XG5cdFx0XHRcdC8vIEFzIHRhaWwsIHNoaWZ0IHRvIHByZXZpb3VzLiBNdXN0IG9ubHkgc2hpZnQgaWYgbm90IGFsc29cblx0XHRcdFx0Ly8gaGVhZCwgc2luY2UgaWYgYm90aCBoZWFkIGFuZCB0YWlsLCB0aGVyZSBpcyBubyBwcmV2aW91cy5cblx0XHRcdFx0aWYgKCBub2RlID09PSB0YWlsICkge1xuXHRcdFx0XHRcdHRhaWwgPSBub2RlLnByZXY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGp1c3Qgc2libGluZ3MgdG8gcG9pbnQgdG8gZWFjaCBvdGhlci4gSWYgbm9kZSB3YXMgdGFpbCxcblx0XHRcdFx0Ly8gdGhpcyBhbHNvIGhhbmRsZXMgbmV3IHRhaWwncyBlbXB0eSBgbmV4dGAgYXNzaWdubWVudC5cblx0XHRcdFx0bm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQ7XG5cdFx0XHRcdGlmICggbm9kZS5uZXh0ICkge1xuXHRcdFx0XHRcdG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bm9kZS5uZXh0ID0gaGVhZDtcblx0XHRcdFx0bm9kZS5wcmV2ID0gbnVsbDtcblx0XHRcdFx0aGVhZC5wcmV2ID0gbm9kZTtcblx0XHRcdFx0aGVhZCA9IG5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBpbW1lZGlhdGVseVxuXHRcdFx0cmV0dXJuIG5vZGUudmFsO1xuXHRcdH1cblxuXHRcdC8vIE5vIGNhY2hlZCB2YWx1ZSBmb3VuZC4gQ29udGludWUgdG8gaW5zZXJ0aW9uIHBoYXNlOlxuXG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiBhcmd1bWVudHMgKGF2b2lkIGxlYWtpbmcgZGVvcHRpbWl6YXRpb24pXG5cdFx0YXJncyA9IG5ldyBBcnJheSggbGVuICk7XG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdG5vZGUgPSB7XG5cdFx0XHRhcmdzOiBhcmdzLFxuXG5cdFx0XHQvLyBHZW5lcmF0ZSB0aGUgcmVzdWx0IGZyb20gb3JpZ2luYWwgZnVuY3Rpb25cblx0XHRcdHZhbDogZm4uYXBwbHkoIG51bGwsIGFyZ3MgKVxuXHRcdH07XG5cblx0XHQvLyBEb24ndCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgbm9kZSBpcyBhbHJlYWR5IGhlYWQsIHNpbmNlIGl0IHdvdWxkXG5cdFx0Ly8gaGF2ZSBiZWVuIHJldHVybmVkIGFib3ZlIGFscmVhZHkgaWYgaXQgd2FzXG5cblx0XHQvLyBTaGlmdCBleGlzdGluZyBoZWFkIGRvd24gbGlzdFxuXHRcdGlmICggaGVhZCApIHtcblx0XHRcdGhlYWQucHJldiA9IG5vZGU7XG5cdFx0XHRub2RlLm5leHQgPSBoZWFkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJZiBubyBoZWFkLCBmb2xsb3dzIHRoYXQgdGhlcmUncyBubyB0YWlsIChhdCBpbml0aWFsIG9yIHJlc2V0KVxuXHRcdFx0dGFpbCA9IG5vZGU7XG5cdFx0fVxuXG5cdFx0Ly8gVHJpbSB0YWlsIGlmIHdlJ3JlIHJlYWNoZWQgbWF4IHNpemUgYW5kIGFyZSBwZW5kaW5nIGNhY2hlIGluc2VydGlvblxuXHRcdGlmICggc2l6ZSA9PT0gbWF4U2l6ZSApIHtcblx0XHRcdHRhaWwgPSB0YWlsLnByZXY7XG5cdFx0XHR0YWlsLm5leHQgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzaXplKys7XG5cdFx0fVxuXG5cdFx0aGVhZCA9IG5vZGU7XG5cblx0XHRyZXR1cm4gbm9kZS52YWw7XG5cdH1cblxuXHRtZW1vaXplZC5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXHRcdGhlYWQgPSBudWxsO1xuXHRcdHRhaWwgPSBudWxsO1xuXHRcdHNpemUgPSAwO1xuXHR9O1xuXG5cdGlmICggcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JyApIHtcblx0XHQvLyBDYWNoZSBpcyBub3QgZXhwb3NlZCBpbiB0aGUgcHVibGljIEFQSSwgYnV0IHVzZWQgaW4gdGVzdHMgdG8gZW5zdXJlXG5cdFx0Ly8gZXhwZWN0ZWQgbGlzdCBwcm9ncmVzc2lvblxuXHRcdG1lbW9pemVkLmdldENhY2hlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyBoZWFkLCB0YWlsLCBzaXplIF07XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBtZW1vaXplZDtcbn07XG4iLCJmdW5jdGlvbiBhcmVJbnB1dHNFcXVhbChuZXdJbnB1dHMsIGxhc3RJbnB1dHMpIHtcbiAgaWYgKG5ld0lucHV0cy5sZW5ndGggIT09IGxhc3RJbnB1dHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdJbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobmV3SW5wdXRzW2ldICE9PSBsYXN0SW5wdXRzW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGluZGV4IChyZXN1bHRGbiwgaXNFcXVhbCkge1xuICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7XG4gICAgaXNFcXVhbCA9IGFyZUlucHV0c0VxdWFsO1xuICB9XG5cbiAgdmFyIGxhc3RUaGlzO1xuICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgdmFyIGxhc3RSZXN1bHQ7XG4gIHZhciBjYWxsZWRPbmNlID0gZmFsc2U7XG5cbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uIHJlc3VsdCgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbmV3QXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIG5ld0FyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgaWYgKGNhbGxlZE9uY2UgJiYgbGFzdFRoaXMgPT09IHRoaXMgJiYgaXNFcXVhbChuZXdBcmdzLCBsYXN0QXJncykpIHtcbiAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cblxuICAgIGxhc3RSZXN1bHQgPSByZXN1bHRGbi5hcHBseSh0aGlzLCBuZXdBcmdzKTtcbiAgICBjYWxsZWRPbmNlID0gdHJ1ZTtcbiAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgbGFzdEFyZ3MgPSBuZXdBcmdzO1xuICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICB9O1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluZGV4O1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi4yXG4oZnVuY3Rpb24oKSB7XG4gIHZhciBnZXROYW5vU2Vjb25kcywgaHJ0aW1lLCBsb2FkVGltZSwgbW9kdWxlTG9hZFRpbWUsIG5vZGVMb2FkVGltZSwgdXBUaW1lO1xuXG4gIGlmICgodHlwZW9mIHBlcmZvcm1hbmNlICE9PSBcInVuZGVmaW5lZFwiICYmIHBlcmZvcm1hbmNlICE9PSBudWxsKSAmJiBwZXJmb3JtYW5jZS5ub3cpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAoKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MgIT09IG51bGwpICYmIHByb2Nlc3MuaHJ0aW1lKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoZ2V0TmFub1NlY29uZHMoKSAtIG5vZGVMb2FkVGltZSkgLyAxZTY7XG4gICAgfTtcbiAgICBocnRpbWUgPSBwcm9jZXNzLmhydGltZTtcbiAgICBnZXROYW5vU2Vjb25kcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGhyO1xuICAgICAgaHIgPSBocnRpbWUoKTtcbiAgICAgIHJldHVybiBoclswXSAqIDFlOSArIGhyWzFdO1xuICAgIH07XG4gICAgbW9kdWxlTG9hZFRpbWUgPSBnZXROYW5vU2Vjb25kcygpO1xuICAgIHVwVGltZSA9IHByb2Nlc3MudXB0aW1lKCkgKiAxZTk7XG4gICAgbm9kZUxvYWRUaW1lID0gbW9kdWxlTG9hZFRpbWUgLSB1cFRpbWU7XG4gIH0gZWxzZSBpZiAoRGF0ZS5ub3cpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBsb2FkVGltZTtcbiAgICB9O1xuICAgIGxvYWRUaW1lID0gRGF0ZS5ub3coKTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbG9hZFRpbWU7XG4gICAgfTtcbiAgICBsb2FkVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9XG5cbn0pLmNhbGwodGhpcyk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBlcmZvcm1hbmNlLW5vdy5qcy5tYXBcbiIsIi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uIChyb290LCBwbHVyYWxpemUpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jykge1xuICAgIC8vIE5vZGUuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBwbHVyYWxpemUoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBBTUQsIHJlZ2lzdGVycyBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcGx1cmFsaXplKCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQnJvd3NlciBnbG9iYWwuXG4gICAgcm9vdC5wbHVyYWxpemUgPSBwbHVyYWxpemUoKTtcbiAgfVxufSkodGhpcywgZnVuY3Rpb24gKCkge1xuICAvLyBSdWxlIHN0b3JhZ2UgLSBwbHVyYWxpemUgYW5kIHNpbmd1bGFyaXplIG5lZWQgdG8gYmUgcnVuIHNlcXVlbnRpYWxseSxcbiAgLy8gd2hpbGUgb3RoZXIgcnVsZXMgY2FuIGJlIG9wdGltaXplZCB1c2luZyBhbiBvYmplY3QgZm9yIGluc3RhbnQgbG9va3Vwcy5cbiAgdmFyIHBsdXJhbFJ1bGVzID0gW107XG4gIHZhciBzaW5ndWxhclJ1bGVzID0gW107XG4gIHZhciB1bmNvdW50YWJsZXMgPSB7fTtcbiAgdmFyIGlycmVndWxhclBsdXJhbHMgPSB7fTtcbiAgdmFyIGlycmVndWxhclNpbmdsZXMgPSB7fTtcblxuICAvKipcbiAgICogU2FuaXRpemUgYSBwbHVyYWxpemF0aW9uIHJ1bGUgdG8gYSB1c2FibGUgcmVndWxhciBleHByZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gIHsoUmVnRXhwfHN0cmluZyl9IHJ1bGVcbiAgICogQHJldHVybiB7UmVnRXhwfVxuICAgKi9cbiAgZnVuY3Rpb24gc2FuaXRpemVSdWxlIChydWxlKSB7XG4gICAgaWYgKHR5cGVvZiBydWxlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nICsgcnVsZSArICckJywgJ2knKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXNzIGluIGEgd29yZCB0b2tlbiB0byBwcm9kdWNlIGEgZnVuY3Rpb24gdGhhdCBjYW4gcmVwbGljYXRlIHRoZSBjYXNlIG9uXG4gICAqIGFub3RoZXIgd29yZC5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIHdvcmRcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIHRva2VuXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzdG9yZUNhc2UgKHdvcmQsIHRva2VuKSB7XG4gICAgLy8gVG9rZW5zIGFyZSBhbiBleGFjdCBtYXRjaC5cbiAgICBpZiAod29yZCA9PT0gdG9rZW4pIHJldHVybiB0b2tlbjtcblxuICAgIC8vIExvd2VyIGNhc2VkIHdvcmRzLiBFLmcuIFwiaGVsbG9cIi5cbiAgICBpZiAod29yZCA9PT0gd29yZC50b0xvd2VyQ2FzZSgpKSByZXR1cm4gdG9rZW4udG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIFVwcGVyIGNhc2VkIHdvcmRzLiBFLmcuIFwiV0hJU0tZXCIuXG4gICAgaWYgKHdvcmQgPT09IHdvcmQudG9VcHBlckNhc2UoKSkgcmV0dXJuIHRva2VuLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAvLyBUaXRsZSBjYXNlZCB3b3Jkcy4gRS5nLiBcIlRpdGxlXCIuXG4gICAgaWYgKHdvcmRbMF0gPT09IHdvcmRbMF0udG9VcHBlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIHRva2VuLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdG9rZW4uc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgLy8gTG93ZXIgY2FzZWQgd29yZHMuIEUuZy4gXCJ0ZXN0XCIuXG4gICAgcmV0dXJuIHRva2VuLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJwb2xhdGUgYSByZWdleHAgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0gIHtBcnJheX0gIGFyZ3NcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gaW50ZXJwb2xhdGUgKHN0ciwgYXJncykge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFwkKFxcZHsxLDJ9KS9nLCBmdW5jdGlvbiAobWF0Y2gsIGluZGV4KSB7XG4gICAgICByZXR1cm4gYXJnc1tpbmRleF0gfHwgJyc7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIHdvcmQgdXNpbmcgYSBydWxlLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHdvcmRcbiAgICogQHBhcmFtICB7QXJyYXl9ICBydWxlXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIHJlcGxhY2UgKHdvcmQsIHJ1bGUpIHtcbiAgICByZXR1cm4gd29yZC5yZXBsYWNlKHJ1bGVbMF0sIGZ1bmN0aW9uIChtYXRjaCwgaW5kZXgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0ZShydWxlWzFdLCBhcmd1bWVudHMpO1xuXG4gICAgICBpZiAobWF0Y2ggPT09ICcnKSB7XG4gICAgICAgIHJldHVybiByZXN0b3JlQ2FzZSh3b3JkW2luZGV4IC0gMV0sIHJlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0b3JlQ2FzZShtYXRjaCwgcmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZSBhIHdvcmQgYnkgcGFzc2luZyBpbiB0aGUgd29yZCBhbmQgc2FuaXRpemF0aW9uIHJ1bGVzLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICAgdG9rZW5cbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIHdvcmRcbiAgICogQHBhcmFtICB7QXJyYXl9ICAgIHJ1bGVzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIHNhbml0aXplV29yZCAodG9rZW4sIHdvcmQsIHJ1bGVzKSB7XG4gICAgLy8gRW1wdHkgc3RyaW5nIG9yIGRvZXNuJ3QgbmVlZCBmaXhpbmcuXG4gICAgaWYgKCF0b2tlbi5sZW5ndGggfHwgdW5jb3VudGFibGVzLmhhc093blByb3BlcnR5KHRva2VuKSkge1xuICAgICAgcmV0dXJuIHdvcmQ7XG4gICAgfVxuXG4gICAgdmFyIGxlbiA9IHJ1bGVzLmxlbmd0aDtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgc2FuaXRpemF0aW9uIHJ1bGVzIGFuZCB1c2UgdGhlIGZpcnN0IG9uZSB0byBtYXRjaC5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIHZhciBydWxlID0gcnVsZXNbbGVuXTtcblxuICAgICAgaWYgKHJ1bGVbMF0udGVzdCh3b3JkKSkgcmV0dXJuIHJlcGxhY2Uod29yZCwgcnVsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdvcmQ7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIHdvcmQgd2l0aCB0aGUgdXBkYXRlZCB3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgcmVwbGFjZU1hcFxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAga2VlcE1hcFxuICAgKiBAcGFyYW0gIHtBcnJheX0gICAgcnVsZXNcbiAgICogQHJldHVybiB7RnVuY3Rpb259XG4gICAqL1xuICBmdW5jdGlvbiByZXBsYWNlV29yZCAocmVwbGFjZU1hcCwga2VlcE1hcCwgcnVsZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHdvcmQpIHtcbiAgICAgIC8vIEdldCB0aGUgY29ycmVjdCB0b2tlbiBhbmQgY2FzZSByZXN0b3JhdGlvbiBmdW5jdGlvbnMuXG4gICAgICB2YXIgdG9rZW4gPSB3b3JkLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIC8vIENoZWNrIGFnYWluc3QgdGhlIGtlZXAgb2JqZWN0IG1hcC5cbiAgICAgIGlmIChrZWVwTWFwLmhhc093blByb3BlcnR5KHRva2VuKSkge1xuICAgICAgICByZXR1cm4gcmVzdG9yZUNhc2Uod29yZCwgdG9rZW4pO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBhZ2FpbnN0IHRoZSByZXBsYWNlbWVudCBtYXAgZm9yIGEgZGlyZWN0IHdvcmQgcmVwbGFjZW1lbnQuXG4gICAgICBpZiAocmVwbGFjZU1hcC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVDYXNlKHdvcmQsIHJlcGxhY2VNYXBbdG9rZW5dKTtcbiAgICAgIH1cblxuICAgICAgLy8gUnVuIGFsbCB0aGUgcnVsZXMgYWdhaW5zdCB0aGUgd29yZC5cbiAgICAgIHJldHVybiBzYW5pdGl6ZVdvcmQodG9rZW4sIHdvcmQsIHJ1bGVzKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgd29yZCBpcyBwYXJ0IG9mIHRoZSBtYXAuXG4gICAqL1xuICBmdW5jdGlvbiBjaGVja1dvcmQgKHJlcGxhY2VNYXAsIGtlZXBNYXAsIHJ1bGVzLCBib29sKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh3b3JkKSB7XG4gICAgICB2YXIgdG9rZW4gPSB3b3JkLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChrZWVwTWFwLmhhc093blByb3BlcnR5KHRva2VuKSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAocmVwbGFjZU1hcC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHJldHVybiBmYWxzZTtcblxuICAgICAgcmV0dXJuIHNhbml0aXplV29yZCh0b2tlbiwgdG9rZW4sIHJ1bGVzKSA9PT0gdG9rZW47XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQbHVyYWxpemUgb3Igc2luZ3VsYXJpemUgYSB3b3JkIGJhc2VkIG9uIHRoZSBwYXNzZWQgaW4gY291bnQuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gIHdvcmQgICAgICBUaGUgd29yZCB0byBwbHVyYWxpemVcbiAgICogQHBhcmFtICB7bnVtYmVyfSAgY291bnQgICAgIEhvdyBtYW55IG9mIHRoZSB3b3JkIGV4aXN0XG4gICAqIEBwYXJhbSAge2Jvb2xlYW59IGluY2x1c2l2ZSBXaGV0aGVyIHRvIHByZWZpeCB3aXRoIHRoZSBudW1iZXIgKGUuZy4gMyBkdWNrcylcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gcGx1cmFsaXplICh3b3JkLCBjb3VudCwgaW5jbHVzaXZlKSB7XG4gICAgdmFyIHBsdXJhbGl6ZWQgPSBjb3VudCA9PT0gMVxuICAgICAgPyBwbHVyYWxpemUuc2luZ3VsYXIod29yZCkgOiBwbHVyYWxpemUucGx1cmFsKHdvcmQpO1xuXG4gICAgcmV0dXJuIChpbmNsdXNpdmUgPyBjb3VudCArICcgJyA6ICcnKSArIHBsdXJhbGl6ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUGx1cmFsaXplIGEgd29yZC5cbiAgICpcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgcGx1cmFsaXplLnBsdXJhbCA9IHJlcGxhY2VXb3JkKFxuICAgIGlycmVndWxhclNpbmdsZXMsIGlycmVndWxhclBsdXJhbHMsIHBsdXJhbFJ1bGVzXG4gICk7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgd29yZCBpcyBwbHVyYWwuXG4gICAqXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHBsdXJhbGl6ZS5pc1BsdXJhbCA9IGNoZWNrV29yZChcbiAgICBpcnJlZ3VsYXJTaW5nbGVzLCBpcnJlZ3VsYXJQbHVyYWxzLCBwbHVyYWxSdWxlc1xuICApO1xuXG4gIC8qKlxuICAgKiBTaW5ndWxhcml6ZSBhIHdvcmQuXG4gICAqXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHBsdXJhbGl6ZS5zaW5ndWxhciA9IHJlcGxhY2VXb3JkKFxuICAgIGlycmVndWxhclBsdXJhbHMsIGlycmVndWxhclNpbmdsZXMsIHNpbmd1bGFyUnVsZXNcbiAgKTtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB3b3JkIGlzIHNpbmd1bGFyLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBwbHVyYWxpemUuaXNTaW5ndWxhciA9IGNoZWNrV29yZChcbiAgICBpcnJlZ3VsYXJQbHVyYWxzLCBpcnJlZ3VsYXJTaW5nbGVzLCBzaW5ndWxhclJ1bGVzXG4gICk7XG5cbiAgLyoqXG4gICAqIEFkZCBhIHBsdXJhbGl6YXRpb24gcnVsZSB0byB0aGUgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHJ1bGVcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgIHJlcGxhY2VtZW50XG4gICAqL1xuICBwbHVyYWxpemUuYWRkUGx1cmFsUnVsZSA9IGZ1bmN0aW9uIChydWxlLCByZXBsYWNlbWVudCkge1xuICAgIHBsdXJhbFJ1bGVzLnB1c2goW3Nhbml0aXplUnVsZShydWxlKSwgcmVwbGFjZW1lbnRdKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGEgc2luZ3VsYXJpemF0aW9uIHJ1bGUgdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBydWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICByZXBsYWNlbWVudFxuICAgKi9cbiAgcGx1cmFsaXplLmFkZFNpbmd1bGFyUnVsZSA9IGZ1bmN0aW9uIChydWxlLCByZXBsYWNlbWVudCkge1xuICAgIHNpbmd1bGFyUnVsZXMucHVzaChbc2FuaXRpemVSdWxlKHJ1bGUpLCByZXBsYWNlbWVudF0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gdW5jb3VudGFibGUgd29yZCBydWxlLlxuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gd29yZFxuICAgKi9cbiAgcGx1cmFsaXplLmFkZFVuY291bnRhYmxlUnVsZSA9IGZ1bmN0aW9uICh3b3JkKSB7XG4gICAgaWYgKHR5cGVvZiB3b3JkID09PSAnc3RyaW5nJykge1xuICAgICAgdW5jb3VudGFibGVzW3dvcmQudG9Mb3dlckNhc2UoKV0gPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNldCBzaW5ndWxhciBhbmQgcGx1cmFsIHJlZmVyZW5jZXMgZm9yIHRoZSB3b3JkLlxuICAgIHBsdXJhbGl6ZS5hZGRQbHVyYWxSdWxlKHdvcmQsICckMCcpO1xuICAgIHBsdXJhbGl6ZS5hZGRTaW5ndWxhclJ1bGUod29yZCwgJyQwJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBpcnJlZ3VsYXIgd29yZCBkZWZpbml0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2luZ2xlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwbHVyYWxcbiAgICovXG4gIHBsdXJhbGl6ZS5hZGRJcnJlZ3VsYXJSdWxlID0gZnVuY3Rpb24gKHNpbmdsZSwgcGx1cmFsKSB7XG4gICAgcGx1cmFsID0gcGx1cmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgc2luZ2xlID0gc2luZ2xlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpcnJlZ3VsYXJTaW5nbGVzW3NpbmdsZV0gPSBwbHVyYWw7XG4gICAgaXJyZWd1bGFyUGx1cmFsc1twbHVyYWxdID0gc2luZ2xlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJcnJlZ3VsYXIgcnVsZXMuXG4gICAqL1xuICBbXG4gICAgLy8gUHJvbm91bnMuXG4gICAgWydJJywgJ3dlJ10sXG4gICAgWydtZScsICd1cyddLFxuICAgIFsnaGUnLCAndGhleSddLFxuICAgIFsnc2hlJywgJ3RoZXknXSxcbiAgICBbJ3RoZW0nLCAndGhlbSddLFxuICAgIFsnbXlzZWxmJywgJ291cnNlbHZlcyddLFxuICAgIFsneW91cnNlbGYnLCAneW91cnNlbHZlcyddLFxuICAgIFsnaXRzZWxmJywgJ3RoZW1zZWx2ZXMnXSxcbiAgICBbJ2hlcnNlbGYnLCAndGhlbXNlbHZlcyddLFxuICAgIFsnaGltc2VsZicsICd0aGVtc2VsdmVzJ10sXG4gICAgWyd0aGVtc2VsZicsICd0aGVtc2VsdmVzJ10sXG4gICAgWydpcycsICdhcmUnXSxcbiAgICBbJ3dhcycsICd3ZXJlJ10sXG4gICAgWydoYXMnLCAnaGF2ZSddLFxuICAgIFsndGhpcycsICd0aGVzZSddLFxuICAgIFsndGhhdCcsICd0aG9zZSddLFxuICAgIC8vIFdvcmRzIGVuZGluZyBpbiB3aXRoIGEgY29uc29uYW50IGFuZCBgb2AuXG4gICAgWydlY2hvJywgJ2VjaG9lcyddLFxuICAgIFsnZGluZ28nLCAnZGluZ29lcyddLFxuICAgIFsndm9sY2FubycsICd2b2xjYW5vZXMnXSxcbiAgICBbJ3Rvcm5hZG8nLCAndG9ybmFkb2VzJ10sXG4gICAgWyd0b3JwZWRvJywgJ3RvcnBlZG9lcyddLFxuICAgIC8vIEVuZHMgd2l0aCBgdXNgLlxuICAgIFsnZ2VudXMnLCAnZ2VuZXJhJ10sXG4gICAgWyd2aXNjdXMnLCAndmlzY2VyYSddLFxuICAgIC8vIEVuZHMgd2l0aCBgbWFgLlxuICAgIFsnc3RpZ21hJywgJ3N0aWdtYXRhJ10sXG4gICAgWydzdG9tYScsICdzdG9tYXRhJ10sXG4gICAgWydkb2dtYScsICdkb2dtYXRhJ10sXG4gICAgWydsZW1tYScsICdsZW1tYXRhJ10sXG4gICAgWydzY2hlbWEnLCAnc2NoZW1hdGEnXSxcbiAgICBbJ2FuYXRoZW1hJywgJ2FuYXRoZW1hdGEnXSxcbiAgICAvLyBPdGhlciBpcnJlZ3VsYXIgcnVsZXMuXG4gICAgWydveCcsICdveGVuJ10sXG4gICAgWydheGUnLCAnYXhlcyddLFxuICAgIFsnZGllJywgJ2RpY2UnXSxcbiAgICBbJ3llcycsICd5ZXNlcyddLFxuICAgIFsnZm9vdCcsICdmZWV0J10sXG4gICAgWydlYXZlJywgJ2VhdmVzJ10sXG4gICAgWydnb29zZScsICdnZWVzZSddLFxuICAgIFsndG9vdGgnLCAndGVldGgnXSxcbiAgICBbJ3F1aXonLCAncXVpenplcyddLFxuICAgIFsnaHVtYW4nLCAnaHVtYW5zJ10sXG4gICAgWydwcm9vZicsICdwcm9vZnMnXSxcbiAgICBbJ2NhcnZlJywgJ2NhcnZlcyddLFxuICAgIFsndmFsdmUnLCAndmFsdmVzJ10sXG4gICAgWydsb29leScsICdsb29pZXMnXSxcbiAgICBbJ3RoaWVmJywgJ3RoaWV2ZXMnXSxcbiAgICBbJ2dyb292ZScsICdncm9vdmVzJ10sXG4gICAgWydwaWNrYXhlJywgJ3BpY2theGVzJ10sXG4gICAgWydwYXNzZXJieScsICdwYXNzZXJzYnknXVxuICBdLmZvckVhY2goZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICByZXR1cm4gcGx1cmFsaXplLmFkZElycmVndWxhclJ1bGUocnVsZVswXSwgcnVsZVsxXSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQbHVyYWxpemF0aW9uIHJ1bGVzLlxuICAgKi9cbiAgW1xuICAgIFsvcz8kL2ksICdzJ10sXG4gICAgWy9bXlxcdTAwMDAtXFx1MDA3Rl0kL2ksICckMCddLFxuICAgIFsvKFteYWVpb3VdZXNlKSQvaSwgJyQxJ10sXG4gICAgWy8oYXh8dGVzdClpcyQvaSwgJyQxZXMnXSxcbiAgICBbLyhhbGlhc3xbXmFvdV11c3x0W2xtXWFzfGdhc3xyaXMpJC9pLCAnJDFlcyddLFxuICAgIFsvKGVbbW5ddSlzPyQvaSwgJyQxcyddLFxuICAgIFsvKFtebF1pYXN8W2FlaW91XWxhc3xbZWp6cl1hc3xbaXVdYW0pJC9pLCAnJDEnXSxcbiAgICBbLyhhbHVtbnxzeWxsYWJ8dmlyfHJhZGl8bnVjbGV8ZnVuZ3xjYWN0fHN0aW11bHx0ZXJtaW58YmFjaWxsfGZvY3x1dGVyfGxvY3xzdHJhdCkoPzp1c3xpKSQvaSwgJyQxaSddLFxuICAgIFsvKGFsdW1ufGFsZ3x2ZXJ0ZWJyKSg/OmF8YWUpJC9pLCAnJDFhZSddLFxuICAgIFsvKHNlcmFwaHxjaGVydWIpKD86aW0pPyQvaSwgJyQxaW0nXSxcbiAgICBbLyhoZXJ8YXR8Z3IpbyQvaSwgJyQxb2VzJ10sXG4gICAgWy8oYWdlbmR8YWRkZW5kfG1pbGxlbm5pfGRhdHxleHRyZW18YmFjdGVyaXxkZXNpZGVyYXR8c3RyYXR8Y2FuZGVsYWJyfGVycmF0fG92fHN5bXBvc2l8Y3VycmljdWx8YXV0b21hdHxxdW9yKSg/OmF8dW0pJC9pLCAnJDFhJ10sXG4gICAgWy8oYXBoZWxpfGh5cGVyYmF0fHBlcmloZWxpfGFzeW5kZXR8bm91bWVufHBoZW5vbWVufGNyaXRlcml8b3JnYW58cHJvbGVnb21lbnxoZWRyfGF1dG9tYXQpKD86YXxvbikkL2ksICckMWEnXSxcbiAgICBbL3NpcyQvaSwgJ3NlcyddLFxuICAgIFsvKD86KGtuaXx3aXxsaSlmZXwoYXJ8bHxlYXxlb3xvYXxob28pZikkL2ksICckMSQydmVzJ10sXG4gICAgWy8oW15hZWlvdXldfHF1KXkkL2ksICckMWllcyddLFxuICAgIFsvKFteY2hdW2llb11bbG5dKWV5JC9pLCAnJDFpZXMnXSxcbiAgICBbLyh4fGNofHNzfHNofHp6KSQvaSwgJyQxZXMnXSxcbiAgICBbLyhtYXRyfGNvZHxtdXJ8c2lsfHZlcnR8aW5kfGFwcGVuZCkoPzppeHxleCkkL2ksICckMWljZXMnXSxcbiAgICBbL1xcYigoPzp0aXQpP218bCkoPzppY2V8b3VzZSkkL2ksICckMWljZSddLFxuICAgIFsvKHBlKSg/OnJzb258b3BsZSkkL2ksICckMW9wbGUnXSxcbiAgICBbLyhjaGlsZCkoPzpyZW4pPyQvaSwgJyQxcmVuJ10sXG4gICAgWy9lYXV4JC9pLCAnJDAnXSxcbiAgICBbL21bYWVdbiQvaSwgJ21lbiddLFxuICAgIFsndGhvdScsICd5b3UnXVxuICBdLmZvckVhY2goZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICByZXR1cm4gcGx1cmFsaXplLmFkZFBsdXJhbFJ1bGUocnVsZVswXSwgcnVsZVsxXSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTaW5ndWxhcml6YXRpb24gcnVsZXMuXG4gICAqL1xuICBbXG4gICAgWy9zJC9pLCAnJ10sXG4gICAgWy8oc3MpJC9pLCAnJDEnXSxcbiAgICBbLyh3aXxrbml8KD86YWZ0ZXJ8aGFsZnxoaWdofGxvd3xtaWR8bm9ufG5pZ2h0fFteXFx3XXxeKWxpKXZlcyQvaSwgJyQxZmUnXSxcbiAgICBbLyhhcnwoPzp3b3xbYWVdKWx8W2VvXVthb10pdmVzJC9pLCAnJDFmJ10sXG4gICAgWy9pZXMkL2ksICd5J10sXG4gICAgWy9cXGIoW3BsXXx6b21ifCg/Om5lY2t8Y3Jvc3MpP3R8Y29sbHxmYWVyfGZvb2R8Z2VufGdvb258Z3JvdXB8bGFzc3x0YWxrfGdvYWx8Y3V0KWllcyQvaSwgJyQxaWUnXSxcbiAgICBbL1xcYihtb258c21pbClpZXMkL2ksICckMWV5J10sXG4gICAgWy9cXGIoKD86dGl0KT9tfGwpaWNlJC9pLCAnJDFvdXNlJ10sXG4gICAgWy8oc2VyYXBofGNoZXJ1YilpbSQvaSwgJyQxJ10sXG4gICAgWy8oeHxjaHxzc3xzaHx6enx0dG98Z298Y2hvfGFsaWFzfFteYW91XXVzfHRbbG1dYXN8Z2FzfCg/OmhlcnxhdHxncilvfFthZWlvdV1yaXMpKD86ZXMpPyQvaSwgJyQxJ10sXG4gICAgWy8oYW5hbHl8ZGlhZ25vfHBhcmVudGhlfHByb2dub3xzeW5vcHx0aGV8ZW1waGF8Y3JpfG5lKSg/OnNpc3xzZXMpJC9pLCAnJDFzaXMnXSxcbiAgICBbLyhtb3ZpZXx0d2VsdmV8YWJ1c2V8ZVttbl11KXMkL2ksICckMSddLFxuICAgIFsvKHRlc3QpKD86aXN8ZXMpJC9pLCAnJDFpcyddLFxuICAgIFsvKGFsdW1ufHN5bGxhYnx2aXJ8cmFkaXxudWNsZXxmdW5nfGNhY3R8c3RpbXVsfHRlcm1pbnxiYWNpbGx8Zm9jfHV0ZXJ8bG9jfHN0cmF0KSg/OnVzfGkpJC9pLCAnJDF1cyddLFxuICAgIFsvKGFnZW5kfGFkZGVuZHxtaWxsZW5uaXxkYXR8ZXh0cmVtfGJhY3Rlcml8ZGVzaWRlcmF0fHN0cmF0fGNhbmRlbGFicnxlcnJhdHxvdnxzeW1wb3NpfGN1cnJpY3VsfHF1b3IpYSQvaSwgJyQxdW0nXSxcbiAgICBbLyhhcGhlbGl8aHlwZXJiYXR8cGVyaWhlbGl8YXN5bmRldHxub3VtZW58cGhlbm9tZW58Y3JpdGVyaXxvcmdhbnxwcm9sZWdvbWVufGhlZHJ8YXV0b21hdClhJC9pLCAnJDFvbiddLFxuICAgIFsvKGFsdW1ufGFsZ3x2ZXJ0ZWJyKWFlJC9pLCAnJDFhJ10sXG4gICAgWy8oY29kfG11cnxzaWx8dmVydHxpbmQpaWNlcyQvaSwgJyQxZXgnXSxcbiAgICBbLyhtYXRyfGFwcGVuZClpY2VzJC9pLCAnJDFpeCddLFxuICAgIFsvKHBlKShyc29ufG9wbGUpJC9pLCAnJDFyc29uJ10sXG4gICAgWy8oY2hpbGQpcmVuJC9pLCAnJDEnXSxcbiAgICBbLyhlYXUpeD8kL2ksICckMSddLFxuICAgIFsvbWVuJC9pLCAnbWFuJ11cbiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZS5hZGRTaW5ndWxhclJ1bGUocnVsZVswXSwgcnVsZVsxXSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBVbmNvdW50YWJsZSBydWxlcy5cbiAgICovXG4gIFtcbiAgICAvLyBTaW5ndWxhciB3b3JkcyB3aXRoIG5vIHBsdXJhbHMuXG4gICAgJ2FkdWx0aG9vZCcsXG4gICAgJ2FkdmljZScsXG4gICAgJ2FnZW5kYScsXG4gICAgJ2FpZCcsXG4gICAgJ2FpcmNyYWZ0JyxcbiAgICAnYWxjb2hvbCcsXG4gICAgJ2FtbW8nLFxuICAgICdhbmFseXRpY3MnLFxuICAgICdhbmltZScsXG4gICAgJ2F0aGxldGljcycsXG4gICAgJ2F1ZGlvJyxcbiAgICAnYmlzb24nLFxuICAgICdibG9vZCcsXG4gICAgJ2JyZWFtJyxcbiAgICAnYnVmZmFsbycsXG4gICAgJ2J1dHRlcicsXG4gICAgJ2NhcnAnLFxuICAgICdjYXNoJyxcbiAgICAnY2hhc3NpcycsXG4gICAgJ2NoZXNzJyxcbiAgICAnY2xvdGhpbmcnLFxuICAgICdjb2QnLFxuICAgICdjb21tZXJjZScsXG4gICAgJ2Nvb3BlcmF0aW9uJyxcbiAgICAnY29ycHMnLFxuICAgICdkZWJyaXMnLFxuICAgICdkaWFiZXRlcycsXG4gICAgJ2RpZ2VzdGlvbicsXG4gICAgJ2VsaycsXG4gICAgJ2VuZXJneScsXG4gICAgJ2VxdWlwbWVudCcsXG4gICAgJ2V4Y3JldGlvbicsXG4gICAgJ2V4cGVydGlzZScsXG4gICAgJ2Zpcm13YXJlJyxcbiAgICAnZmxvdW5kZXInLFxuICAgICdmdW4nLFxuICAgICdnYWxsb3dzJyxcbiAgICAnZ2FyYmFnZScsXG4gICAgJ2dyYWZmaXRpJyxcbiAgICAnaGFyZHdhcmUnLFxuICAgICdoZWFkcXVhcnRlcnMnLFxuICAgICdoZWFsdGgnLFxuICAgICdoZXJwZXMnLFxuICAgICdoaWdoamlua3MnLFxuICAgICdob21ld29yaycsXG4gICAgJ2hvdXNld29yaycsXG4gICAgJ2luZm9ybWF0aW9uJyxcbiAgICAnamVhbnMnLFxuICAgICdqdXN0aWNlJyxcbiAgICAna3Vkb3MnLFxuICAgICdsYWJvdXInLFxuICAgICdsaXRlcmF0dXJlJyxcbiAgICAnbWFjaGluZXJ5JyxcbiAgICAnbWFja2VyZWwnLFxuICAgICdtYWlsJyxcbiAgICAnbWVkaWEnLFxuICAgICdtZXdzJyxcbiAgICAnbW9vc2UnLFxuICAgICdtdXNpYycsXG4gICAgJ211ZCcsXG4gICAgJ21hbmdhJyxcbiAgICAnbmV3cycsXG4gICAgJ29ubHknLFxuICAgICdwZXJzb25uZWwnLFxuICAgICdwaWtlJyxcbiAgICAncGxhbmt0b24nLFxuICAgICdwbGllcnMnLFxuICAgICdwb2xpY2UnLFxuICAgICdwb2xsdXRpb24nLFxuICAgICdwcmVtaXNlcycsXG4gICAgJ3JhaW4nLFxuICAgICdyZXNlYXJjaCcsXG4gICAgJ3JpY2UnLFxuICAgICdzYWxtb24nLFxuICAgICdzY2lzc29ycycsXG4gICAgJ3NlcmllcycsXG4gICAgJ3Nld2FnZScsXG4gICAgJ3NoYW1ibGVzJyxcbiAgICAnc2hyaW1wJyxcbiAgICAnc29mdHdhcmUnLFxuICAgICdzcGVjaWVzJyxcbiAgICAnc3RhZmYnLFxuICAgICdzd2luZScsXG4gICAgJ3Rlbm5pcycsXG4gICAgJ3RyYWZmaWMnLFxuICAgICd0cmFuc3BvcnRhdGlvbicsXG4gICAgJ3Ryb3V0JyxcbiAgICAndHVuYScsXG4gICAgJ3dlYWx0aCcsXG4gICAgJ3dlbGZhcmUnLFxuICAgICd3aGl0aW5nJyxcbiAgICAnd2lsZGViZWVzdCcsXG4gICAgJ3dpbGRsaWZlJyxcbiAgICAneW91JyxcbiAgICAvcG9rW2XDqV1tb24kL2ksXG4gICAgLy8gUmVnZXhlcy5cbiAgICAvW15hZWlvdV1lc2UkL2ksIC8vIFwiY2hpbmVzZVwiLCBcImphcGFuZXNlXCJcbiAgICAvZGVlciQvaSwgLy8gXCJkZWVyXCIsIFwicmVpbmRlZXJcIlxuICAgIC9maXNoJC9pLCAvLyBcImZpc2hcIiwgXCJibG93ZmlzaFwiLCBcImFuZ2VsZmlzaFwiXG4gICAgL21lYXNsZXMkL2ksXG4gICAgL29baXVdcyQvaSwgLy8gXCJjYXJuaXZvcm91c1wiXG4gICAgL3BveCQvaSwgLy8gXCJjaGlja3BveFwiLCBcInNtYWxscG94XCJcbiAgICAvc2hlZXAkL2lcbiAgXS5mb3JFYWNoKHBsdXJhbGl6ZS5hZGRVbmNvdW50YWJsZVJ1bGUpO1xuXG4gIHJldHVybiBwbHVyYWxpemU7XG59KTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gIC8qIGdsb2JhbCBTeW1ib2wgKi9cbiAgdmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxuICAgKlxuICAgKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAgICpcbiAgICogICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTtcbiAgICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcbiAgICogICAgICAgLi4uXG4gICAqICAgICB9XG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbWF5YmVJdGVyYWJsZVxuICAgKiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gICAqL1xuICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXG4gICAqIHN1cHBsaWVkIHRvIFJlYWN0IGNvbXBvbmVudHMuIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcbiAgICogICB2YXIgTXlBcnRpY2xlID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICAgcHJvcFR5cGVzOiB7XG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFwiZGVzY3JpcHRpb25cIi5cbiAgICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZyxcbiAgICpcbiAgICogICAgICAgLy8gQSByZXF1aXJlZCBlbnVtIHByb3AgbmFtZWQgXCJjYXRlZ29yeVwiLlxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcHJvcCBuYW1lZCBcImRpYWxvZ1wiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxuICAgKiAgICAgICBkaWFsb2c6IFByb3BzLmluc3RhbmNlT2YoRGlhbG9nKS5pc1JlcXVpcmVkXG4gICAqICAgICB9LFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cbiAgICogICB9KTtcbiAgICpcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxuICAgKlxuICAgKiAgIHR5cGUgOj0gYXJyYXl8Ym9vbHxmdW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0YW5jZU9mKC4uLilcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XG4gICAqXG4gICAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXNcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiAgdmFyIE15TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgcHJvcFR5cGVzOiB7XG4gICAqICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIG9yIFVSSSBwcm9wIG5hbWVkIFwiaHJlZlwiLlxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgKiAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJvcFZhbHVlICE9PSAnc3RyaW5nJyAmJlxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xuICAgKiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgKiAgICAgICAgICAgICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcgaW4gJyArXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgKiAgICAgICAgICApO1xuICAgKiAgICAgICAgfVxuICAgKiAgICAgIH1cbiAgICogICAgfSxcbiAgICogICAgcmVuZGVyOiBmdW5jdGlvbigpIHsuLi59XG4gICAqICB9KTtcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuXG4gIHZhciBBTk9OWU1PVVMgPSAnPDxhbm9ueW1vdXM+Pic7XG5cbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2FycmF5JyksXG4gICAgYm9vbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4nKSxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcbiAgICBudW1iZXI6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdudW1iZXInKSxcbiAgICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdvYmplY3QnKSxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcbiAgICBzeW1ib2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzeW1ib2wnKSxcblxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcbiAgICBhcnJheU9mOiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIsXG4gICAgZWxlbWVudDogY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCksXG4gICAgZWxlbWVudFR5cGU6IGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSxcbiAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXG4gICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlcixcbiAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXG4gICAgZXhhY3Q6IGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIsXG4gIH07XG5cbiAgLyoqXG4gICAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gICAqL1xuICAvKmVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSovXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICAgIHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cbiAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gICAgfVxuICB9XG4gIC8qZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuXG4gIC8qKlxuICAgKiBXZSB1c2UgYW4gRXJyb3ItbGlrZSBvYmplY3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVvcGxlIG1heSBjYWxsXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXG4gICAqIEVycm9ycyBhbnltb3JlLiBXZSBkb24ndCBpbnNwZWN0IHRoZWlyIHN0YWNrIGFueXdheSwgYW5kIGNyZWF0aW5nIHRoZW1cbiAgICogaXMgcHJvaGliaXRpdmVseSBleHBlbnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0ZW4sIHN1Y2ggYXMgd2hhdFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXG4gICAqL1xuICBmdW5jdGlvbiBQcm9wVHlwZUVycm9yKG1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCkgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tXG4gICAgICAvLyBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArICBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhzaGFwZVR5cGVzKSwgbnVsbCwgJyAgJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xuICAgIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gIXByb3BWYWx1ZTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4ocHJvcFZhbHVlKTtcbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcbiAgICAgICAgICB2YXIgc3RlcDtcbiAgICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gcHJvcFZhbHVlLmVudHJpZXMpIHtcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc05vZGUoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNOb2RlKGVudHJ5WzFdKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSB7XG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cbiAgICBpZiAocHJvcFR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBmYWxzeSB2YWx1ZSBjYW4ndCBiZSBhIFN5bWJvbFxuICAgIGlmICghcHJvcFZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCdcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhL1xuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxuICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XG4gICAgfVxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHBvc3RmaXhlZCB0byBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCB0eXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgXCJ1bmRlZmluZWRcIiBvciBcIm9mIHR5cGUgYXJyYXlcIlxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiAnYW4gJyArIHR5cGU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlcztcbiAgUmVhY3RQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBjaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZTtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi44LjZcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlO1xudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHxcbiAgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKTtcbn1cblxuLyoqXG4gKiBGb3JrZWQgZnJvbSBmYmpzL3dhcm5pbmc6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmJqcy9ibG9iL2U2NmJhMjBhZDViZTQzM2ViNTQ0MjNmMmIwOTdkODI5MzI0ZDlkZTYvcGFja2FnZXMvZmJqcy9zcmMvX19mb3Jrc19fL3dhcm5pbmcuanNcbiAqXG4gKiBPbmx5IGNoYW5nZSBpcyB3ZSB1c2UgY29uc29sZS53YXJuIGluc3RlYWQgb2YgY29uc29sZS5lcnJvcixcbiAqIGFuZCBkbyBub3RoaW5nIHdoZW4gJ2NvbnNvbGUnIGlzIG5vdCBzdXBwb3J0ZWQuXG4gKiBUaGlzIHJlYWxseSBzaW1wbGlmaWVzIHRoZSBjb2RlLlxuICogLS0tXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIGxvd1ByaW9yaXR5V2FybmluZyA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIHZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xuXG4gIGxvd1ByaW9yaXR5V2FybmluZyA9IGZ1bmN0aW9uIChjb25kaXRpb24sIGZvcm1hdCkge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgbG93UHJpb3JpdHlXYXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgKyAnbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcuYXBwbHkodW5kZWZpbmVkLCBbZm9ybWF0XS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIGxvd1ByaW9yaXR5V2FybmluZyQxID0gbG93UHJpb3JpdHlXYXJuaW5nO1xuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcblxudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7XG5cbi8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7XG4gICAgICBsb3dQcmlvcml0eVdhcm5pbmckMShmYWxzZSwgJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJ2YXIgbm93ID0gcmVxdWlyZSgncGVyZm9ybWFuY2Utbm93JylcbiAgLCByb290ID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3dcbiAgLCB2ZW5kb3JzID0gWydtb3onLCAnd2Via2l0J11cbiAgLCBzdWZmaXggPSAnQW5pbWF0aW9uRnJhbWUnXG4gICwgcmFmID0gcm9vdFsncmVxdWVzdCcgKyBzdWZmaXhdXG4gICwgY2FmID0gcm9vdFsnY2FuY2VsJyArIHN1ZmZpeF0gfHwgcm9vdFsnY2FuY2VsUmVxdWVzdCcgKyBzdWZmaXhdXG5cbmZvcih2YXIgaSA9IDA7ICFyYWYgJiYgaSA8IHZlbmRvcnMubGVuZ3RoOyBpKyspIHtcbiAgcmFmID0gcm9vdFt2ZW5kb3JzW2ldICsgJ1JlcXVlc3QnICsgc3VmZml4XVxuICBjYWYgPSByb290W3ZlbmRvcnNbaV0gKyAnQ2FuY2VsJyArIHN1ZmZpeF1cbiAgICAgIHx8IHJvb3RbdmVuZG9yc1tpXSArICdDYW5jZWxSZXF1ZXN0JyArIHN1ZmZpeF1cbn1cblxuLy8gU29tZSB2ZXJzaW9ucyBvZiBGRiBoYXZlIHJBRiBidXQgbm90IGNBRlxuaWYoIXJhZiB8fCAhY2FmKSB7XG4gIHZhciBsYXN0ID0gMFxuICAgICwgaWQgPSAwXG4gICAgLCBxdWV1ZSA9IFtdXG4gICAgLCBmcmFtZUR1cmF0aW9uID0gMTAwMCAvIDYwXG5cbiAgcmFmID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICBpZihxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhciBfbm93ID0gbm93KClcbiAgICAgICAgLCBuZXh0ID0gTWF0aC5tYXgoMCwgZnJhbWVEdXJhdGlvbiAtIChfbm93IC0gbGFzdCkpXG4gICAgICBsYXN0ID0gbmV4dCArIF9ub3dcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjcCA9IHF1ZXVlLnNsaWNlKDApXG4gICAgICAgIC8vIENsZWFyIHF1ZXVlIGhlcmUgdG8gcHJldmVudFxuICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBhcHBlbmRpbmcgbGlzdGVuZXJzXG4gICAgICAgIC8vIHRvIHRoZSBjdXJyZW50IGZyYW1lJ3MgcXVldWVcbiAgICAgICAgcXVldWUubGVuZ3RoID0gMFxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgY3AubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZighY3BbaV0uY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgIGNwW2ldLmNhbGxiYWNrKGxhc3QpXG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdGhyb3cgZSB9LCAwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgTWF0aC5yb3VuZChuZXh0KSlcbiAgICB9XG4gICAgcXVldWUucHVzaCh7XG4gICAgICBoYW5kbGU6ICsraWQsXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICBjYW5jZWxsZWQ6IGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaWRcbiAgfVxuXG4gIGNhZiA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYocXVldWVbaV0uaGFuZGxlID09PSBoYW5kbGUpIHtcbiAgICAgICAgcXVldWVbaV0uY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuKSB7XG4gIC8vIFdyYXAgaW4gYSBuZXcgZnVuY3Rpb24gdG8gcHJldmVudFxuICAvLyBgY2FuY2VsYCBwb3RlbnRpYWxseSBiZWluZyBhc3NpZ25lZFxuICAvLyB0byB0aGUgbmF0aXZlIHJBRiBmdW5jdGlvblxuICByZXR1cm4gcmFmLmNhbGwocm9vdCwgZm4pXG59XG5tb2R1bGUuZXhwb3J0cy5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgY2FmLmFwcGx5KHJvb3QsIGFyZ3VtZW50cylcbn1cbm1vZHVsZS5leHBvcnRzLnBvbHlmaWxsID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgb2JqZWN0ID0gcm9vdDtcbiAgfVxuICBvYmplY3QucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gcmFmXG4gIG9iamVjdC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGNhZlxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tICdyZWFjdC1maW5hbC1mb3JtJztcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuXG52YXIgRXh0ZXJuYWxseUNoYW5nZWRTdGF0ZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShFeHRlcm5hbGx5Q2hhbmdlZFN0YXRlLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBFeHRlcm5hbGx5Q2hhbmdlZFN0YXRlKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBwcmV2aW91czogcHJvcHMuaW5wdXQudmFsdWUsXG4gICAgICBleHRlcm5hbGx5Q2hhbmdlZDogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBFeHRlcm5hbGx5Q2hhbmdlZFN0YXRlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIHZhbHVlID0gX3RoaXMkcHJvcHMuaW5wdXQudmFsdWUsXG4gICAgICAgIGFjdGl2ZSA9IF90aGlzJHByb3BzLm1ldGEuYWN0aXZlO1xuICAgIHZhciBwcmV2aW91cyA9IHRoaXMuc3RhdGUucHJldmlvdXM7XG5cbiAgICBpZiAodmFsdWUgIT09IHByZXZpb3VzKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcHJldmlvdXM6IHZhbHVlLFxuICAgICAgICBleHRlcm5hbGx5Q2hhbmdlZDogIWFjdGl2ZVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW4odGhpcy5zdGF0ZS5leHRlcm5hbGx5Q2hhbmdlZCk7XG4gIH07XG5cbiAgcmV0dXJuIEV4dGVybmFsbHlDaGFuZ2VkU3RhdGU7XG59KENvbXBvbmVudCk7XG5cbnZhciBFeHRlcm5hbGx5Q2hhbmdlZCA9IGZ1bmN0aW9uIEV4dGVybmFsbHlDaGFuZ2VkKF9yZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KEZpZWxkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdWJzY3JpcHRpb246IHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiB0cnVlXG4gICAgfSxcbiAgICBhbGxvd051bGw6IHRydWUsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIocHJvcHMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KEV4dGVybmFsbHlDaGFuZ2VkU3RhdGUsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgIH0pKTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIE9uQmx1clN0YXRlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKE9uQmx1clN0YXRlLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBPbkJsdXJTdGF0ZShwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgcHJldmlvdXM6ICEhcHJvcHMubWV0YS5hY3RpdmVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBPbkJsdXJTdGF0ZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBhY3RpdmUgPSBfdGhpcyRwcm9wcy5tZXRhLmFjdGl2ZTtcbiAgICB2YXIgcHJldmlvdXMgPSB0aGlzLnN0YXRlLnByZXZpb3VzO1xuXG4gICAgaWYgKHByZXZpb3VzICYmICFhY3RpdmUpIHtcbiAgICAgIGNoaWxkcmVuKCk7XG4gICAgfVxuXG4gICAgaWYgKHByZXZpb3VzICE9PSBhY3RpdmUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwcmV2aW91czogYWN0aXZlXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gT25CbHVyU3RhdGU7XG59KENvbXBvbmVudCk7XG5cbnZhciBPbkJsdXIgPSBmdW5jdGlvbiBPbkJsdXIoX3JlZikge1xuICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoRmllbGQsIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN1YnNjcmlwdGlvbjoge1xuICAgICAgYWN0aXZlOiB0cnVlXG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihwcm9wcykge1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoT25CbHVyU3RhdGUsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgIH0pKTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIE9uQ2hhbmdlU3RhdGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoT25DaGFuZ2VTdGF0ZSwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gT25DaGFuZ2VTdGF0ZShwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgcHJldmlvdXM6IHByb3BzLmlucHV0LnZhbHVlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gT25DaGFuZ2VTdGF0ZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICB2YWx1ZSA9IF90aGlzJHByb3BzLmlucHV0LnZhbHVlO1xuICAgIHZhciBwcmV2aW91cyA9IHRoaXMuc3RhdGUucHJldmlvdXM7XG5cbiAgICBpZiAodmFsdWUgIT09IHByZXZpb3VzKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcHJldmlvdXM6IHZhbHVlXG4gICAgICB9KTtcbiAgICAgIGNoaWxkcmVuKHZhbHVlLCBwcmV2aW91cyk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE9uQ2hhbmdlU3RhdGU7XG59KENvbXBvbmVudCk7XG5cbnZhciBPbkNoYW5nZSA9IGZ1bmN0aW9uIE9uQ2hhbmdlKF9yZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KEZpZWxkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdWJzY3JpcHRpb246IHtcbiAgICAgIHZhbHVlOiB0cnVlXG4gICAgfSxcbiAgICBhbGxvd051bGw6IHRydWUsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIocHJvcHMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KE9uQ2hhbmdlU3RhdGUsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgIH0pKTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIE9uRm9jdXNTdGF0ZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShPbkZvY3VzU3RhdGUsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIE9uRm9jdXNTdGF0ZShwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgcHJldmlvdXM6ICEhcHJvcHMubWV0YS5hY3RpdmVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBPbkZvY3VzU3RhdGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgYWN0aXZlID0gX3RoaXMkcHJvcHMubWV0YS5hY3RpdmU7XG4gICAgdmFyIHByZXZpb3VzID0gdGhpcy5zdGF0ZS5wcmV2aW91cztcblxuICAgIGlmIChhY3RpdmUgJiYgIXByZXZpb3VzKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcHJldmlvdXM6IGFjdGl2ZVxuICAgICAgfSk7XG4gICAgICBjaGlsZHJlbigpO1xuICAgIH0gZWxzZSBpZiAoIWFjdGl2ZSAmJiBwcmV2aW91cykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHByZXZpb3VzOiBhY3RpdmVcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHJldHVybiBPbkZvY3VzU3RhdGU7XG59KENvbXBvbmVudCk7XG5cbnZhciBPbkZvY3VzID0gZnVuY3Rpb24gT25Gb2N1cyhfcmVmKSB7XG4gIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gY3JlYXRlRWxlbWVudChGaWVsZCwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3Vic2NyaXB0aW9uOiB7XG4gICAgICBhY3RpdmU6IHRydWVcbiAgICB9LFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHByb3BzKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChPbkZvY3VzU3RhdGUsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgIH0pKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLy9cblxuZXhwb3J0IHsgRXh0ZXJuYWxseUNoYW5nZWQsIE9uQmx1ciwgT25DaGFuZ2UsIE9uRm9jdXMgfTtcbiIsImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJztcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIGNyZWF0ZUNvbnRleHQsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZpZWxkU3Vic2NyaXB0aW9uSXRlbXMsIGZvcm1TdWJzY3JpcHRpb25JdGVtcywgY3JlYXRlRm9ybSwgY29uZmlnT3B0aW9ucywgdmVyc2lvbiBhcyB2ZXJzaW9uJDEgfSBmcm9tICdmaW5hbC1mb3JtJztcblxuLy8gICAgICBcbmZ1bmN0aW9uIGRpZmZTdWJzY3JpcHRpb24gKGEsIGIsIGtleXMpIHtcbiAgaWYgKGEpIHtcbiAgICBpZiAoYikge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGtleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBhW2tleV0gIT09IGJba2V5XTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICEhYjtcbiAgfVxufVxuXG4vLyBjaGlsZHJlbiByZW5kZXIgZnVuY3Rpb24sIG9yIGNvbXBvbmVudCBwcm9wXG5cbmZ1bmN0aW9uIHJlbmRlckNvbXBvbmVudChwcm9wcywgbmFtZSkge1xuICB2YXIgcmVuZGVyID0gcHJvcHMucmVuZGVyLFxuICAgICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGNvbXBvbmVudCA9IHByb3BzLmNvbXBvbmVudCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgW1wicmVuZGVyXCIsIFwiY2hpbGRyZW5cIiwgXCJjb21wb25lbnRcIl0pO1xuXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChjb21wb25lbnQsIF9leHRlbmRzKHt9LCByZXN0LCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICByZW5kZXI6IHJlbmRlclxuICAgIH0pKTtcbiAgfVxuXG4gIGlmIChyZW5kZXIpIHtcbiAgICByZXR1cm4gcmVuZGVyKF9leHRlbmRzKHt9LCByZXN0LCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSk7IC8vIGluamVjdCBjaGlsZHJlbiBiYWNrIGluXG4gIH1cblxuICBpZiAodHlwZW9mIGNoaWxkcmVuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IE11c3Qgc3BlY2lmeSBlaXRoZXIgYSByZW5kZXIgcHJvcCwgYSByZW5kZXIgZnVuY3Rpb24gYXMgY2hpbGRyZW4sIG9yIGEgY29tcG9uZW50IHByb3AgdG8gXCIgKyBuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDsgLy8gd2FybmluZyB3aWxsIGFsZXJ0IGRldmVsb3BlciB0byB0aGVpciBtaXN0YWtlXG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW4ocmVzdCk7XG59XG5cbi8vICAgICAgXG52YXIgaXNSZWFjdE5hdGl2ZSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ICYmIHdpbmRvdy5uYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJztcblxuLy8gICAgICBcbnZhciBnZXRTZWxlY3RlZFZhbHVlcyA9IGZ1bmN0aW9uIGdldFNlbGVjdGVkVmFsdWVzKG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgb3B0aW9uID0gb3B0aW9uc1tpbmRleF07XG5cbiAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gob3B0aW9uLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoZXZlbnQsIGN1cnJlbnRWYWx1ZSwgdmFsdWVQcm9wLCBpc1JlYWN0TmF0aXZlKSB7XG4gIGlmICghaXNSZWFjdE5hdGl2ZSAmJiBldmVudC5uYXRpdmVFdmVudCAmJiBldmVudC5uYXRpdmVFdmVudC50ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZXZlbnQubmF0aXZlRXZlbnQudGV4dDtcbiAgfVxuXG4gIGlmIChpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQ7XG4gIH1cblxuICB2YXIgZGV0eXBlZEV2ZW50ID0gZXZlbnQ7XG4gIHZhciBfZGV0eXBlZEV2ZW50JHRhcmdldCA9IGRldHlwZWRFdmVudC50YXJnZXQsXG4gICAgICB0eXBlID0gX2RldHlwZWRFdmVudCR0YXJnZXQudHlwZSxcbiAgICAgIHZhbHVlID0gX2RldHlwZWRFdmVudCR0YXJnZXQudmFsdWUsXG4gICAgICBjaGVja2VkID0gX2RldHlwZWRFdmVudCR0YXJnZXQuY2hlY2tlZDtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdjaGVja2JveCc6XG4gICAgICBpZiAodmFsdWVQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gd2UgYXJlIG1haW50YWluaW5nIGFuIGFycmF5LCBub3QganVzdCBhIGJvb2xlYW5cbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAvLyBhZGQgdmFsdWUgdG8gY3VycmVudCBhcnJheSB2YWx1ZVxuICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkgPyBjdXJyZW50VmFsdWUuY29uY2F0KHZhbHVlUHJvcCkgOiBbdmFsdWVQcm9wXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyByZW1vdmUgdmFsdWUgZnJvbSBjdXJyZW50IGFycmF5IHZhbHVlXG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZGV4ID0gY3VycmVudFZhbHVlLmluZGV4T2YodmFsdWVQcm9wKTtcblxuICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmFsdWUuc2xpY2UoMCwgaW5kZXgpLmNvbmNhdChjdXJyZW50VmFsdWUuc2xpY2UoaW5kZXggKyAxKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpdCdzIGp1c3QgYSBib29sZWFuXG4gICAgICAgIHJldHVybiAhIWNoZWNrZWQ7XG4gICAgICB9XG5cbiAgICBjYXNlICdzZWxlY3QtbXVsdGlwbGUnOlxuICAgICAgcmV0dXJuIGdldFNlbGVjdGVkVmFsdWVzKGV2ZW50LnRhcmdldC5vcHRpb25zKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cbnZhciBSZWFjdEZpbmFsRm9ybUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpO1xudmFyIGdldERpc3BsYXlOYW1lID0gZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoQ29tcG9uZW50KSB7XG4gIHZhciBkaXNwbGF5TmFtZSA9IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcbiAgcmV0dXJuIFwiUmVhY3RGaW5hbEZvcm0oXCIgKyBkaXNwbGF5TmFtZSArIFwiKVwiO1xufTtcbnZhciB3aXRoUmVhY3RGaW5hbEZvcm0gPSBmdW5jdGlvbiB3aXRoUmVhY3RGaW5hbEZvcm0oQ29tcG9uZW50JDEpIHtcbiAgdmFyIF9jbGFzcywgX3RlbXA7XG5cbiAgcmV0dXJuIF90ZW1wID0gX2NsYXNzID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKF9jbGFzcywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgICBmdW5jdGlvbiBfY2xhc3MoKSB7XG4gICAgICByZXR1cm4gX1JlYWN0JENvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIF9wcm90byA9IF9jbGFzcy5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoUmVhY3RGaW5hbEZvcm1Db250ZXh0LkNvbnN1bWVyLCB7XG4gICAgICAgIGNoaWxkcmVuOiBmdW5jdGlvbiBjaGlsZHJlbihyZWFjdEZpbmFsRm9ybSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KENvbXBvbmVudCQxLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICByZWFjdEZpbmFsRm9ybTogcmVhY3RGaW5hbEZvcm1cbiAgICAgICAgICB9LCBfdGhpcy5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF9jbGFzcztcbiAgfShDb21wb25lbnQpLCBfY2xhc3MuZGlzcGxheU5hbWUgPSBnZXREaXNwbGF5TmFtZShDb21wb25lbnQkMSksIF90ZW1wO1xufTtcblxudmFyIGFsbCA9IGZpZWxkU3Vic2NyaXB0aW9uSXRlbXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICByZXN1bHRba2V5XSA9IHRydWU7XG4gIHJldHVybiByZXN1bHQ7XG59LCB7fSk7XG5cbnZhciBGaWVsZCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShGaWVsZCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gRmllbGQoX3Byb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgX3Byb3BzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc3Vic2NyaWJlID0gZnVuY3Rpb24gKF9yZWYsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgZGVmYXVsdFZhbHVlID0gX3JlZi5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgaW5pdGlhbFZhbHVlID0gX3JlZi5pbml0aWFsVmFsdWUsXG4gICAgICAgICAgaXNFcXVhbCA9IF9yZWYuaXNFcXVhbCxcbiAgICAgICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IF9yZWYuc3Vic2NyaXB0aW9uLFxuICAgICAgICAgIHZhbGlkYXRlRmllbGRzID0gX3JlZi52YWxpZGF0ZUZpZWxkcztcbiAgICAgIF90aGlzLnVuc3Vic2NyaWJlID0gX3RoaXMucHJvcHMucmVhY3RGaW5hbEZvcm0ucmVnaXN0ZXJGaWVsZChuYW1lLCBsaXN0ZW5lciwgc3Vic2NyaXB0aW9uIHx8IGFsbCwge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZ2V0VmFsaWRhdG9yOiBmdW5jdGlvbiBnZXRWYWxpZGF0b3IoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLnZhbGlkYXRlO1xuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IGluaXRpYWxWYWx1ZSxcbiAgICAgICAgaXNFcXVhbDogaXNFcXVhbCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHM6IHZhbGlkYXRlRmllbGRzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3RoaXMubm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0ZTogc3RhdGVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVycyA9IHtcbiAgICAgIG9uQmx1cjogZnVuY3Rpb24gb25CbHVyKGV2ZW50KSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IF90aGlzLnN0YXRlLnN0YXRlOyAvLyB0aGlzIGlzIHRvIGFwcGVhc2UgdGhlIEZsb3cgZ29kc1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgICAgICBmb3JtYXQgPSBfdGhpcyRwcm9wcy5mb3JtYXQsXG4gICAgICAgICAgICAgIGZvcm1hdE9uQmx1ciA9IF90aGlzJHByb3BzLmZvcm1hdE9uQmx1cjtcbiAgICAgICAgICBzdGF0ZS5ibHVyKCk7XG5cbiAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdE9uQmx1cikge1xuICAgICAgICAgICAgc3RhdGUuY2hhbmdlKGZvcm1hdChzdGF0ZS52YWx1ZSwgc3RhdGUubmFtZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgICBwYXJzZSA9IF90aGlzJHByb3BzMi5wYXJzZSxcbiAgICAgICAgICAgIF92YWx1ZSA9IF90aGlzJHByb3BzMi52YWx1ZTsgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHtcbiAgICAgICAgICB2YXIgdGFyZ2V0VHlwZSA9IGV2ZW50LnRhcmdldC50eXBlO1xuICAgICAgICAgIHZhciBwcm9wcyA9IF90aGlzLnByb3BzO1xuICAgICAgICAgIHZhciB1bmtub3duID0gflsnY2hlY2tib3gnLCAncmFkaW8nLCAnc2VsZWN0LW11bHRpcGxlJ10uaW5kZXhPZih0YXJnZXRUeXBlKSAmJiAhcHJvcHMudHlwZTtcbiAgICAgICAgICB2YXIgdHlwZSA9IHRhcmdldFR5cGUgPT09ICdzZWxlY3QtbXVsdGlwbGUnID8gJ3NlbGVjdCcgOiB0YXJnZXRUeXBlO1xuXG4gICAgICAgICAgdmFyIF9yZWYyID0gdGFyZ2V0VHlwZSA9PT0gJ3NlbGVjdC1tdWx0aXBsZScgPyBfdGhpcy5zdGF0ZS5zdGF0ZSB8fCB7fSA6IHByb3BzLFxuICAgICAgICAgICAgICBfdmFsdWUyID0gX3JlZjIudmFsdWU7XG5cbiAgICAgICAgICBpZiAodW5rbm93bikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IFlvdSBtdXN0IHBhc3MgYHR5cGU9XFxcIlwiICsgdHlwZSArIFwiXFxcImAgcHJvcCB0byB5b3VyIEZpZWxkKFwiICsgcHJvcHMubmFtZSArIFwiKSBjb21wb25lbnQuXFxuXCIgKyAoXCJXaXRob3V0IGl0IHdlIGRvbid0IGtub3cgaG93IHRvIHVucGFjayB5b3VyIGB2YWx1ZWAgcHJvcCAtIFwiICsgKEFycmF5LmlzQXJyYXkoX3ZhbHVlMikgPyBcIltcIiArIF92YWx1ZTIgKyBcIl1cIiA6IFwiXFxcIlwiICsgX3ZhbHVlMiArIFwiXFxcIlwiKSArIFwiLlwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHZhbHVlID0gZXZlbnQgJiYgZXZlbnQudGFyZ2V0ID8gZ2V0VmFsdWUoZXZlbnQsIF90aGlzLnN0YXRlLnN0YXRlICYmIF90aGlzLnN0YXRlLnN0YXRlLnZhbHVlLCBfdmFsdWUsIGlzUmVhY3ROYXRpdmUpIDogZXZlbnQ7XG4gICAgICAgIF90aGlzLnN0YXRlLnN0YXRlICYmIF90aGlzLnN0YXRlLnN0YXRlLmNoYW5nZShwYXJzZSA/IHBhcnNlKHZhbHVlLCBfdGhpcy5wcm9wcy5uYW1lKSA6IHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBvbkZvY3VzOiBmdW5jdGlvbiBvbkZvY3VzKGV2ZW50KSB7XG4gICAgICAgIF90aGlzLnN0YXRlLnN0YXRlICYmIF90aGlzLnN0YXRlLnN0YXRlLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgaW5pdGlhbFN0YXRlOyAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIV90aGlzLnByb3BzLnJlYWN0RmluYWxGb3JtKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdXYXJuaW5nOiBGaWVsZCBtdXN0IGJlIHVzZWQgaW5zaWRlIG9mIGEgUmVhY3RGaW5hbEZvcm0gY29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKF90aGlzLnByb3BzLnJlYWN0RmluYWxGb3JtKSB7XG4gICAgICAvLyBhdm9pZCBlcnJvciwgd2FybmluZyB3aWxsIGFsZXJ0IGRldmVsb3BlciB0byB0aGVpciBtaXN0YWtlXG4gICAgICBfdGhpcy5zdWJzY3JpYmUoX3Byb3BzLCBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgaWYgKGluaXRpYWxTdGF0ZSkge1xuICAgICAgICAgIF90aGlzLm5vdGlmeShzdGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5pdGlhbFN0YXRlID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdGU6IGluaXRpYWxTdGF0ZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IEZpZWxkLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBuYW1lID0gX3RoaXMkcHJvcHMzLm5hbWUsXG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IF90aGlzJHByb3BzMy5zdWJzY3JpcHRpb247XG5cbiAgICBpZiAocHJldlByb3BzLm5hbWUgIT09IG5hbWUgfHwgZGlmZlN1YnNjcmlwdGlvbihwcmV2UHJvcHMuc3Vic2NyaXB0aW9uLCBzdWJzY3JpcHRpb24sIGZpZWxkU3Vic2NyaXB0aW9uSXRlbXMpKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5yZWFjdEZpbmFsRm9ybSkge1xuICAgICAgICAvLyBhdm9pZCBlcnJvciwgd2FybmluZyB3aWxsIGFsZXJ0IGRldmVsb3BlciB0byB0aGVpciBtaXN0YWtlXG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUodGhpcy5wcm9wcywgdGhpcy5ub3RpZnkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgYWxsb3dOdWxsID0gX3RoaXMkcHJvcHM0LmFsbG93TnVsbCxcbiAgICAgICAgY29tcG9uZW50ID0gX3RoaXMkcHJvcHM0LmNvbXBvbmVudCxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczQuY2hpbGRyZW4sXG4gICAgICAgIGZvcm1hdCA9IF90aGlzJHByb3BzNC5mb3JtYXQsXG4gICAgICAgIGZvcm1hdE9uQmx1ciA9IF90aGlzJHByb3BzNC5mb3JtYXRPbkJsdXIsXG4gICAgICAgIHBhcnNlID0gX3RoaXMkcHJvcHM0LnBhcnNlLFxuICAgICAgICBpc0VxdWFsID0gX3RoaXMkcHJvcHM0LmlzRXF1YWwsXG4gICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wczQubmFtZSxcbiAgICAgICAgc3Vic2NyaXB0aW9uID0gX3RoaXMkcHJvcHM0LnN1YnNjcmlwdGlvbixcbiAgICAgICAgdmFsaWRhdGUgPSBfdGhpcyRwcm9wczQudmFsaWRhdGUsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzID0gX3RoaXMkcHJvcHM0LnZhbGlkYXRlRmllbGRzLFxuICAgICAgICByZWFjdEZpbmFsRm9ybSA9IF90aGlzJHByb3BzNC5yZWFjdEZpbmFsRm9ybSxcbiAgICAgICAgX3ZhbHVlID0gX3RoaXMkcHJvcHM0LnZhbHVlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHM0LCBbXCJhbGxvd051bGxcIiwgXCJjb21wb25lbnRcIiwgXCJjaGlsZHJlblwiLCBcImZvcm1hdFwiLCBcImZvcm1hdE9uQmx1clwiLCBcInBhcnNlXCIsIFwiaXNFcXVhbFwiLCBcIm5hbWVcIiwgXCJzdWJzY3JpcHRpb25cIiwgXCJ2YWxpZGF0ZVwiLCBcInZhbGlkYXRlRmllbGRzXCIsIFwicmVhY3RGaW5hbEZvcm1cIiwgXCJ2YWx1ZVwiXSk7XG5cbiAgICB2YXIgX3JlZjMgPSB0aGlzLnN0YXRlLnN0YXRlIHx8IHt9LFxuICAgICAgICBibHVyID0gX3JlZjMuYmx1cixcbiAgICAgICAgY2hhbmdlID0gX3JlZjMuY2hhbmdlLFxuICAgICAgICBmb2N1cyA9IF9yZWYzLmZvY3VzLFxuICAgICAgICB2YWx1ZSA9IF9yZWYzLnZhbHVlLFxuICAgICAgICBpZ25vcmVOYW1lID0gX3JlZjMubmFtZSxcbiAgICAgICAgb3RoZXJTdGF0ZSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYzLCBbXCJibHVyXCIsIFwiY2hhbmdlXCIsIFwiZm9jdXNcIiwgXCJ2YWx1ZVwiLCBcIm5hbWVcIl0pO1xuXG4gICAgdmFyIG1ldGEgPSB7XG4gICAgICAvLyB0aGlzIGlzIHRvIGFwcGVhc2UgdGhlIEZsb3cgZ29kc1xuICAgICAgYWN0aXZlOiBvdGhlclN0YXRlLmFjdGl2ZSxcbiAgICAgIGRhdGE6IG90aGVyU3RhdGUuZGF0YSxcbiAgICAgIGRpcnR5OiBvdGhlclN0YXRlLmRpcnR5LFxuICAgICAgZGlydHlTaW5jZUxhc3RTdWJtaXQ6IG90aGVyU3RhdGUuZGlydHlTaW5jZUxhc3RTdWJtaXQsXG4gICAgICBlcnJvcjogb3RoZXJTdGF0ZS5lcnJvcixcbiAgICAgIGluaXRpYWw6IG90aGVyU3RhdGUuaW5pdGlhbCxcbiAgICAgIGludmFsaWQ6IG90aGVyU3RhdGUuaW52YWxpZCxcbiAgICAgIG1vZGlmaWVkOiBvdGhlclN0YXRlLm1vZGlmaWVkLFxuICAgICAgcHJpc3RpbmU6IG90aGVyU3RhdGUucHJpc3RpbmUsXG4gICAgICBzdWJtaXRFcnJvcjogb3RoZXJTdGF0ZS5zdWJtaXRFcnJvcixcbiAgICAgIHN1Ym1pdEZhaWxlZDogb3RoZXJTdGF0ZS5zdWJtaXRGYWlsZWQsXG4gICAgICBzdWJtaXRTdWNjZWVkZWQ6IG90aGVyU3RhdGUuc3VibWl0U3VjY2VlZGVkLFxuICAgICAgc3VibWl0dGluZzogb3RoZXJTdGF0ZS5zdWJtaXR0aW5nLFxuICAgICAgdG91Y2hlZDogb3RoZXJTdGF0ZS50b3VjaGVkLFxuICAgICAgdmFsaWQ6IG90aGVyU3RhdGUudmFsaWQsXG4gICAgICB2aXNpdGVkOiBvdGhlclN0YXRlLnZpc2l0ZWRcbiAgICB9O1xuXG4gICAgaWYgKGZvcm1hdE9uQmx1cikge1xuICAgICAgdmFsdWUgPSBGaWVsZC5kZWZhdWx0UHJvcHMuZm9ybWF0KHZhbHVlLCBuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgdmFsdWUgPSBmb3JtYXQodmFsdWUsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiAhYWxsb3dOdWxsKSB7XG4gICAgICB2YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHZhciBpbnB1dCA9IF9leHRlbmRzKHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9LCB0aGlzLmhhbmRsZXJzKTtcblxuICAgIGlmIChyZXN0LnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgIGlmIChfdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpbnB1dC5jaGVja2VkID0gISF2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0LmNoZWNrZWQgPSAhIShBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB+dmFsdWUuaW5kZXhPZihfdmFsdWUpKTtcbiAgICAgICAgaW5wdXQudmFsdWUgPSBfdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZXN0LnR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgIGlucHV0LmNoZWNrZWQgPSB2YWx1ZSA9PT0gX3ZhbHVlO1xuICAgICAgaW5wdXQudmFsdWUgPSBfdmFsdWU7XG4gICAgfSBlbHNlIGlmIChjb21wb25lbnQgPT09ICdzZWxlY3QnICYmIHJlc3QubXVsdGlwbGUpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gaW5wdXQudmFsdWUgfHwgW107XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuKF9leHRlbmRzKHtcbiAgICAgICAgaW5wdXQ6IGlucHV0LFxuICAgICAgICBtZXRhOiBtZXRhXG4gICAgICB9LCByZXN0KSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBpZ25vcmUgbWV0YSwgY29tYmluZSBpbnB1dCB3aXRoIGFueSBvdGhlciBwcm9wc1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgaW5wdXQsIHtcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICB9LCByZXN0KSk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlclByb3BzID0ge1xuICAgICAgaW5wdXQ6IGlucHV0LFxuICAgICAgbWV0YTogbWV0YSAvLyBhc3NpZ24gdG8gZm9yY2UgRmxvdyBjaGVja1xuXG4gICAgfTtcbiAgICByZXR1cm4gcmVuZGVyQ29tcG9uZW50KF9leHRlbmRzKHt9LCByZW5kZXJQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgY29tcG9uZW50OiBjb21wb25lbnRcbiAgICB9LCByZXN0KSwgXCJGaWVsZChcIiArIG5hbWUgKyBcIilcIik7XG4gIH07XG5cbiAgcmV0dXJuIEZpZWxkO1xufShDb21wb25lbnQpO1xuXG5GaWVsZC5kZWZhdWx0UHJvcHMgPSB7XG4gIGZvcm1hdDogZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBuYW1lKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyAnJyA6IHZhbHVlO1xuICB9LFxuICBwYXJzZTogZnVuY3Rpb24gcGFyc2UodmFsdWUsIG5hbWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICcnID8gdW5kZWZpbmVkIDogdmFsdWU7XG4gIH1cbn07XG52YXIgRmllbGQkMSA9IHdpdGhSZWFjdEZpbmFsRm9ybShGaWVsZCk7XG5cbi8vICAgICAgXG52YXIgc2hhbGxvd0VxdWFsID0gZnVuY3Rpb24gc2hhbGxvd0VxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcgfHwgIWEgfHwgdHlwZW9mIGIgIT09ICdvYmplY3QnIHx8ICFiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBiSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmJpbmQoYik7XG5cbiAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwga2V5c0EubGVuZ3RoOyBpZHgrKykge1xuICAgIHZhciBrZXkgPSBrZXlzQVtpZHhdO1xuXG4gICAgaWYgKCFiSGFzT3duUHJvcGVydHkoa2V5KSB8fCBhW2tleV0gIT09IGJba2V5XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLy8gICAgICBcbnZhciBpc1N5bnRoZXRpY0V2ZW50ID0gZnVuY3Rpb24gaXNTeW50aGV0aWNFdmVudChjYW5kaWRhdGUpIHtcbiAgcmV0dXJuICEhKGNhbmRpZGF0ZSAmJiB0eXBlb2YgY2FuZGlkYXRlLnN0b3BQcm9wYWdhdGlvbiA9PT0gJ2Z1bmN0aW9uJyk7XG59O1xuXG52YXIgdmVyc2lvbiA9ICc0LjEuMCc7XG52YXIgdmVyc2lvbnMgPSB7XG4gICdmaW5hbC1mb3JtJzogdmVyc2lvbiQxLFxuICAncmVhY3QtZmluYWwtZm9ybSc6IHZlcnNpb25cbn07XG52YXIgYWxsJDEgPSBmb3JtU3Vic2NyaXB0aW9uSXRlbXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICByZXN1bHRba2V5XSA9IHRydWU7XG4gIHJldHVybiByZXN1bHQ7XG59LCB7fSk7XG5cbnZhciBSZWFjdEZpbmFsRm9ybSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShSZWFjdEZpbmFsRm9ybSwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUmVhY3RGaW5hbEZvcm0ocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcblxuICAgIF90aGlzLm5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKF90aGlzLm1vdW50ZWQpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXRlOiBzdGF0ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMubW91bnRlZCA9IHRydWU7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZVN1Ym1pdCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIC8vIHNvbWV0aW1lcyBub3QgdHJ1ZSwgZS5nLiBSZWFjdCBOYXRpdmVcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5wcmV2ZW50RGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIHByZXZlbnQgYW55IG91dGVyIGZvcm1zIGZyb20gcmVjZWl2aW5nIHRoZSBldmVudCB0b29cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuZm9ybS5zdWJtaXQoKTtcbiAgICB9O1xuXG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGNvbXBvbmVudCA9IHByb3BzLmNvbXBvbmVudCxcbiAgICAgICAgcmVuZGVyID0gcHJvcHMucmVuZGVyLFxuICAgICAgICBzdWJzY3JpcHRpb24gPSBwcm9wcy5zdWJzY3JpcHRpb24sXG4gICAgICAgIGRlY29yYXRvcnMgPSBwcm9wcy5kZWNvcmF0b3JzLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiY29tcG9uZW50XCIsIFwicmVuZGVyXCIsIFwic3Vic2NyaXB0aW9uXCIsIFwiZGVjb3JhdG9yc1wiXSk7XG5cbiAgICB2YXIgY29uZmlnID0gcmVzdDtcbiAgICBfdGhpcy5tb3VudGVkID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgX3RoaXMuZm9ybSA9IGNyZWF0ZUZvcm0oY29uZmlnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IFwiICsgZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfdGhpcy51bnN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgIGlmIChfdGhpcy5mb3JtKSB7XG4gICAgICAvLyBzZXQgaW5pdGlhbCBzdGF0ZVxuICAgICAgdmFyIGluaXRpYWxTdGF0ZSA9IHt9O1xuXG4gICAgICBfdGhpcy5mb3JtLnN1YnNjcmliZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgaW5pdGlhbFN0YXRlID0gc3RhdGU7XG4gICAgICB9LCBzdWJzY3JpcHRpb24gfHwgYWxsJDEpKCk7XG5cbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICBzdGF0ZTogaW5pdGlhbFN0YXRlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChkZWNvcmF0b3JzKSB7XG4gICAgICBkZWNvcmF0b3JzLmZvckVhY2goZnVuY3Rpb24gKGRlY29yYXRvcikge1xuICAgICAgICBfdGhpcy51bnN1YnNjcmlwdGlvbnMucHVzaChkZWNvcmF0b3IoX3RoaXMuZm9ybSkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFJlYWN0RmluYWxGb3JtLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgIHRoaXMuZm9ybS5wYXVzZVZhbGlkYXRpb24oKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy51bnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmZvcm0uc3Vic2NyaWJlKHRoaXMubm90aWZ5LCB0aGlzLnByb3BzLnN1YnNjcmlwdGlvbiB8fCBhbGwkMSkpO1xuICAgICAgdGhpcy5mb3JtLnJlc3VtZVZhbGlkYXRpb24oKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVXBkYXRlKCkge1xuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5yZXN1bWVWYWxpZGF0aW9uID0gdGhpcy5yZXN1bWVWYWxpZGF0aW9uIHx8ICF0aGlzLmZvcm0uaXNWYWxpZGF0aW9uUGF1c2VkKCk7XG4gICAgICB0aGlzLmZvcm0ucGF1c2VWYWxpZGF0aW9uKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGlmICh0aGlzLmZvcm0gJiYgdGhpcy5yZXN1bWVWYWxpZGF0aW9uKSB7XG4gICAgICB0aGlzLmZvcm0ucmVzdW1lVmFsaWRhdGlvbigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMgJiYgISh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXNFcXVhbCB8fCBzaGFsbG93RXF1YWwpKHByZXZQcm9wcy5pbml0aWFsVmFsdWVzLCB0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMpKSB7XG4gICAgICB0aGlzLmZvcm0uaW5pdGlhbGl6ZSh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMpO1xuICAgIH1cblxuICAgIGNvbmZpZ09wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoa2V5ID09PSAnaW5pdGlhbFZhbHVlcycgfHwgcHJldlByb3BzW2tleV0gPT09IF90aGlzMi5wcm9wc1trZXldKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLmZvcm0uc2V0Q29uZmlnKGtleSwgX3RoaXMyLnByb3BzW2tleV0pO1xuICAgIH0pOyAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghc2hhbGxvd0VxdWFsKHByZXZQcm9wcy5kZWNvcmF0b3JzLCB0aGlzLnByb3BzLmRlY29yYXRvcnMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dhcm5pbmc6IEZvcm0gZGVjb3JhdG9ycyBzaG91bGQgbm90IGNoYW5nZSBmcm9tIG9uZSByZW5kZXIgdG8gdGhlIG5leHQgYXMgbmV3IHZhbHVlcyB3aWxsIGJlIGlnbm9yZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzaGFsbG93RXF1YWwocHJldlByb3BzLnN1YnNjcmlwdGlvbiwgdGhpcy5wcm9wcy5zdWJzY3JpcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dhcm5pbmc6IEZvcm0gc3Vic2NyaXB0aW9uIHNob3VsZCBub3QgY2hhbmdlIGZyb20gb25lIHJlbmRlciB0byB0aGUgbmV4dCBhcyBuZXcgdmFsdWVzIHdpbGwgYmUgaWdub3JlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uICh1bnN1YnNjcmliZSkge1xuICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIC8vIHJlbW92ZSBjb25maWcgcHJvcHNcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBkZWJ1ZyA9IF90aGlzJHByb3BzLmRlYnVnLFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX3RoaXMkcHJvcHMuaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgbXV0YXRvcnMgPSBfdGhpcyRwcm9wcy5tdXRhdG9ycyxcbiAgICAgICAgb25TdWJtaXQgPSBfdGhpcyRwcm9wcy5vblN1Ym1pdCxcbiAgICAgICAgc3Vic2NyaXB0aW9uID0gX3RoaXMkcHJvcHMuc3Vic2NyaXB0aW9uLFxuICAgICAgICB2YWxpZGF0ZSA9IF90aGlzJHByb3BzLnZhbGlkYXRlLFxuICAgICAgICB2YWxpZGF0ZU9uQmx1ciA9IF90aGlzJHByb3BzLnZhbGlkYXRlT25CbHVyLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJkZWJ1Z1wiLCBcImluaXRpYWxWYWx1ZXNcIiwgXCJtdXRhdG9yc1wiLCBcIm9uU3VibWl0XCIsIFwic3Vic2NyaXB0aW9uXCIsIFwidmFsaWRhdGVcIiwgXCJ2YWxpZGF0ZU9uQmx1clwiXSk7XG5cbiAgICB2YXIgcmVuZGVyUHJvcHMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5zdGF0ZSA/IHRoaXMuc3RhdGUuc3RhdGUgOiB7fSwge1xuICAgICAgYmF0Y2g6IHRoaXMuZm9ybSAmJiBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogQXMgb2YgUmVhY3QgRmluYWwgRm9ybSB2My4zLjAsIHByb3BzLmJhdGNoKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgUmVhY3QgRmluYWwgRm9ybS4gVXNlOiBwcm9wcy5mb3JtLmJhdGNoKCkgaW5zdGVhZC4gQ2hlY2sgeW91ciBSZWFjdEZpbmFsRm9ybSByZW5kZXIgcHJvcC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX3RoaXMzLmZvcm0uYmF0Y2goZm4pO1xuICAgICAgfSxcbiAgICAgIGJsdXI6IHRoaXMuZm9ybSAmJiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXYXJuaW5nOiBBcyBvZiBSZWFjdCBGaW5hbCBGb3JtIHYzLjMuMCwgcHJvcHMuYmx1cigpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIFJlYWN0IEZpbmFsIEZvcm0uIFVzZTogcHJvcHMuZm9ybS5ibHVyKCkgaW5zdGVhZC4gQ2hlY2sgeW91ciBSZWFjdEZpbmFsRm9ybSByZW5kZXIgcHJvcC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX3RoaXMzLmZvcm0uYmx1cihuYW1lKTtcbiAgICAgIH0sXG4gICAgICBjaGFuZ2U6IHRoaXMuZm9ybSAmJiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogQXMgb2YgUmVhY3QgRmluYWwgRm9ybSB2My4zLjAsIHByb3BzLmNoYW5nZSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIFJlYWN0IEZpbmFsIEZvcm0uIFVzZTogcHJvcHMuZm9ybS5jaGFuZ2UoKSBpbnN0ZWFkLiBDaGVjayB5b3VyIFJlYWN0RmluYWxGb3JtIHJlbmRlciBwcm9wLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfdGhpczMuZm9ybS5jaGFuZ2UobmFtZSwgdmFsdWUpO1xuICAgICAgfSxcbiAgICAgIGZvY3VzOiB0aGlzLmZvcm0gJiYgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogQXMgb2YgUmVhY3QgRmluYWwgRm9ybSB2My4zLjAsIHByb3BzLmZvY3VzKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgUmVhY3QgRmluYWwgRm9ybS4gVXNlOiBwcm9wcy5mb3JtLmZvY3VzKCkgaW5zdGVhZC4gQ2hlY2sgeW91ciBSZWFjdEZpbmFsRm9ybSByZW5kZXIgcHJvcC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX3RoaXMzLmZvcm0uZm9jdXMobmFtZSk7XG4gICAgICB9LFxuICAgICAgZm9ybTogX2V4dGVuZHMoe30sIHRoaXMuZm9ybSwge1xuICAgICAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZXZlbnRPclZhbHVlcykge1xuICAgICAgICAgIGlmIChpc1N5bnRoZXRpY0V2ZW50KGV2ZW50T3JWYWx1ZXMpKSB7XG4gICAgICAgICAgICAvLyBpdCdzIGEgUmVhY3QgU3ludGhldGljRXZlbnQsIGNhbGwgcmVzZXQgd2l0aCBubyBhcmd1bWVudHNcbiAgICAgICAgICAgIF90aGlzMy5mb3JtLnJlc2V0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzMy5mb3JtLnJlc2V0KGV2ZW50T3JWYWx1ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBoYW5kbGVTdWJtaXQ6IHRoaXMuaGFuZGxlU3VibWl0LFxuICAgICAgaW5pdGlhbGl6ZTogdGhpcy5mb3JtICYmIGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogQXMgb2YgUmVhY3QgRmluYWwgRm9ybSB2My4zLjAsIHByb3BzLmluaXRpYWxpemUoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBSZWFjdCBGaW5hbCBGb3JtLiBVc2U6IHByb3BzLmZvcm0uaW5pdGlhbGl6ZSgpIGluc3RlYWQuIENoZWNrIHlvdXIgUmVhY3RGaW5hbEZvcm0gcmVuZGVyIHByb3AuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMy5mb3JtLmluaXRpYWxpemUodmFsdWVzKTtcbiAgICAgIH0sXG4gICAgICBtdXRhdG9yczogdGhpcy5mb3JtICYmIE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tdXRhdG9ycykucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMzJGZvcm0kbXV0YXRvcnM7XG5cbiAgICAgICAgICAoX3RoaXMzJGZvcm0kbXV0YXRvcnMgPSBfdGhpczMuZm9ybS5tdXRhdG9ycylba2V5XS5hcHBseShfdGhpczMkZm9ybSRtdXRhdG9ycywgYXJndW1lbnRzKTsgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXYXJuaW5nOiBBcyBvZiBSZWFjdCBGaW5hbCBGb3JtIHYzLjMuMCwgcHJvcHMubXV0YXRvcnMgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgUmVhY3QgRmluYWwgRm9ybS4gVXNlOiBwcm9wcy5mb3JtLm11dGF0b3JzIGluc3RlYWQuIENoZWNrIHlvdXIgUmVhY3RGaW5hbEZvcm0gcmVuZGVyIHByb3AuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSwge30pLFxuICAgICAgcmVzZXQ6IHRoaXMuZm9ybSAmJiBmdW5jdGlvbiAodmFsdWVzKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IEFzIG9mIFJlYWN0IEZpbmFsIEZvcm0gdjMuMy4wLCBwcm9wcy5yZXNldCgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIFJlYWN0IEZpbmFsIEZvcm0uIFVzZTogcHJvcHMuZm9ybS5yZXNldCgpIGluc3RlYWQuIENoZWNrIHlvdXIgUmVhY3RGaW5hbEZvcm0gcmVuZGVyIHByb3AuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMy5mb3JtLnJlc2V0KHZhbHVlcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChSZWFjdEZpbmFsRm9ybUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmZvcm1cbiAgICB9LCByZW5kZXJDb21wb25lbnQoX2V4dGVuZHMoe30sIHByb3BzLCByZW5kZXJQcm9wcywge1xuICAgICAgX192ZXJzaW9uczogdmVyc2lvbnNcbiAgICB9KSwgJ1JlYWN0RmluYWxGb3JtJykpO1xuICB9O1xuXG4gIHJldHVybiBSZWFjdEZpbmFsRm9ybTtcbn0oQ29tcG9uZW50KTtcblxudmFyIEZvcm1TcHkgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoRm9ybVNweSwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gRm9ybVNweShwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc3Vic2NyaWJlID0gZnVuY3Rpb24gKF9yZWYsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gX3JlZi5zdWJzY3JpcHRpb247XG4gICAgICBfdGhpcy51bnN1YnNjcmliZSA9IF90aGlzLnByb3BzLnJlYWN0RmluYWxGb3JtLnN1YnNjcmliZShsaXN0ZW5lciwgc3Vic2NyaXB0aW9uIHx8IGFsbCQxKTtcbiAgICB9O1xuXG4gICAgX3RoaXMubm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXRlOiBzdGF0ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkNoYW5nZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBpbml0aWFsU3RhdGU7IC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhX3RoaXMucHJvcHMucmVhY3RGaW5hbEZvcm0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1dhcm5pbmc6IEZvcm1TcHkgbXVzdCBiZSB1c2VkIGluc2lkZSBvZiBhIFJlYWN0RmluYWxGb3JtIGNvbXBvbmVudCcpO1xuICAgIH1cblxuICAgIGlmIChfdGhpcy5wcm9wcy5yZWFjdEZpbmFsRm9ybSkge1xuICAgICAgLy8gYXZvaWQgZXJyb3IsIHdhcm5pbmcgd2lsbCBhbGVydCBkZXZlbG9wZXIgdG8gdGhlaXIgbWlzdGFrZVxuICAgICAgX3RoaXMuc3Vic2NyaWJlKHByb3BzLCBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgaWYgKGluaXRpYWxTdGF0ZSkge1xuICAgICAgICAgIF90aGlzLm5vdGlmeShzdGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5pdGlhbFN0YXRlID0gc3RhdGU7XG5cbiAgICAgICAgICBpZiAocHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgICAgIHByb3BzLm9uQ2hhbmdlKHN0YXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICBzdGF0ZTogaW5pdGlhbFN0YXRlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBGb3JtU3B5LnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLnByb3BzLnN1YnNjcmlwdGlvbjtcblxuICAgIGlmIChkaWZmU3Vic2NyaXB0aW9uKHByZXZQcm9wcy5zdWJzY3JpcHRpb24sIHN1YnNjcmlwdGlvbiwgZm9ybVN1YnNjcmlwdGlvbkl0ZW1zKSkge1xuICAgICAgaWYgKHRoaXMucHJvcHMucmVhY3RGaW5hbEZvcm0pIHtcbiAgICAgICAgLy8gYXZvaWQgZXJyb3IsIHdhcm5pbmcgd2lsbCBhbGVydCBkZXZlbG9wZXIgdG8gdGhlaXIgbWlzdGFrZVxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKHRoaXMucHJvcHMsIHRoaXMubm90aWZ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wcy5vbkNoYW5nZSxcbiAgICAgICAgcmVhY3RGaW5hbEZvcm0gPSBfdGhpcyRwcm9wcy5yZWFjdEZpbmFsRm9ybSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJvbkNoYW5nZVwiLCBcInJlYWN0RmluYWxGb3JtXCJdKTtcblxuICAgIHZhciByZW5kZXJQcm9wcyA9IHtcbiAgICAgIGJhdGNoOiByZWFjdEZpbmFsRm9ybSAmJiBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogQXMgb2YgUmVhY3QgRmluYWwgRm9ybSB2My4zLjAsIHByb3BzLmJhdGNoKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgUmVhY3QgRmluYWwgRm9ybS4gVXNlOiBwcm9wcy5mb3JtLmJhdGNoKCkgaW5zdGVhZC4gQ2hlY2sgeW91ciBGb3JtU3B5IHJlbmRlciBwcm9wLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWFjdEZpbmFsRm9ybS5iYXRjaChmbik7XG4gICAgICB9LFxuICAgICAgYmx1cjogcmVhY3RGaW5hbEZvcm0gJiYgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogQXMgb2YgUmVhY3QgRmluYWwgRm9ybSB2My4zLjAsIHByb3BzLmJsdXIoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBSZWFjdCBGaW5hbCBGb3JtLiBVc2U6IHByb3BzLmZvcm0uYmx1cigpIGluc3RlYWQuIENoZWNrIHlvdXIgRm9ybVNweSByZW5kZXIgcHJvcC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVhY3RGaW5hbEZvcm0uYmx1cihuYW1lKTtcbiAgICAgIH0sXG4gICAgICBjaGFuZ2U6IHJlYWN0RmluYWxGb3JtICYmIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXYXJuaW5nOiBBcyBvZiBSZWFjdCBGaW5hbCBGb3JtIHYzLjMuMCwgcHJvcHMuY2hhbmdlKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgUmVhY3QgRmluYWwgRm9ybS4gVXNlOiBwcm9wcy5mb3JtLmNoYW5nZSgpIGluc3RlYWQuIENoZWNrIHlvdXIgRm9ybVNweSByZW5kZXIgcHJvcC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVhY3RGaW5hbEZvcm0uY2hhbmdlKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBmb2N1czogcmVhY3RGaW5hbEZvcm0gJiYgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogQXMgb2YgUmVhY3QgRmluYWwgRm9ybSB2My4zLjAsIHByb3BzLmZvY3VzKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgUmVhY3QgRmluYWwgRm9ybS4gVXNlOiBwcm9wcy5mb3JtLmZvY3VzKCkgaW5zdGVhZC4gQ2hlY2sgeW91ciBGb3JtU3B5IHJlbmRlciBwcm9wLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWFjdEZpbmFsRm9ybS5mb2N1cyhuYW1lKTtcbiAgICAgIH0sXG4gICAgICBmb3JtOiBfZXh0ZW5kcyh7fSwgcmVhY3RGaW5hbEZvcm0sIHtcbiAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGV2ZW50T3JWYWx1ZXMpIHtcbiAgICAgICAgICBpZiAoaXNTeW50aGV0aWNFdmVudChldmVudE9yVmFsdWVzKSkge1xuICAgICAgICAgICAgLy8gaXQncyBhIFJlYWN0IFN5bnRoZXRpY0V2ZW50LCBjYWxsIHJlc2V0IHdpdGggbm8gYXJndW1lbnRzXG4gICAgICAgICAgICByZWFjdEZpbmFsRm9ybS5yZXNldCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWFjdEZpbmFsRm9ybS5yZXNldChldmVudE9yVmFsdWVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgaW5pdGlhbGl6ZTogcmVhY3RGaW5hbEZvcm0gJiYgZnVuY3Rpb24gKHZhbHVlcykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXYXJuaW5nOiBBcyBvZiBSZWFjdCBGaW5hbCBGb3JtIHYzLjMuMCwgcHJvcHMuaW5pdGlhbGl6ZSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIFJlYWN0IEZpbmFsIEZvcm0uIFVzZTogcHJvcHMuZm9ybS5pbml0aWFsaXplKCkgaW5zdGVhZC4gQ2hlY2sgeW91ciBGb3JtU3B5IHJlbmRlciBwcm9wLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWFjdEZpbmFsRm9ybS5pbml0aWFsaXplKHZhbHVlcyk7XG4gICAgICB9LFxuICAgICAgbXV0YXRvcnM6IHJlYWN0RmluYWxGb3JtICYmIE9iamVjdC5rZXlzKHJlYWN0RmluYWxGb3JtLm11dGF0b3JzKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBfcmVhY3RGaW5hbEZvcm0kbXV0YXQ7XG5cbiAgICAgICAgICAoX3JlYWN0RmluYWxGb3JtJG11dGF0ID0gcmVhY3RGaW5hbEZvcm0ubXV0YXRvcnMpW2tleV0uYXBwbHkoX3JlYWN0RmluYWxGb3JtJG11dGF0LCBhcmd1bWVudHMpOyAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IEFzIG9mIFJlYWN0IEZpbmFsIEZvcm0gdjMuMy4wLCBwcm9wcy5tdXRhdG9ycyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBSZWFjdCBGaW5hbCBGb3JtLiBVc2U6IHByb3BzLmZvcm0ubXV0YXRvcnMgaW5zdGVhZC4gQ2hlY2sgeW91ciBGb3JtU3B5IHJlbmRlciBwcm9wLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sIHt9KSxcbiAgICAgIHJlc2V0OiByZWFjdEZpbmFsRm9ybSAmJiBmdW5jdGlvbiAodmFsdWVzKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IEFzIG9mIFJlYWN0IEZpbmFsIEZvcm0gdjMuMy4wLCBwcm9wcy5yZXNldCgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIFJlYWN0IEZpbmFsIEZvcm0uIFVzZTogcHJvcHMuZm9ybS5yZXNldCgpIGluc3RlYWQuIENoZWNrIHlvdXIgRm9ybVNweSByZW5kZXIgcHJvcC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVhY3RGaW5hbEZvcm0ucmVzZXQodmFsdWVzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBvbkNoYW5nZSA/IG51bGwgOiByZW5kZXJDb21wb25lbnQoX2V4dGVuZHMoe30sIHJlc3QsIHRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLnN0YXRlIDoge30sIHJlbmRlclByb3BzKSwgJ0Zvcm1TcHknKTtcbiAgfTtcblxuICByZXR1cm4gRm9ybVNweTtcbn0oQ29tcG9uZW50KTtcblxudmFyIEZvcm1TcHkkMSA9IHdpdGhSZWFjdEZpbmFsRm9ybShGb3JtU3B5KTtcblxuLy9cblxuZXhwb3J0IHsgRmllbGQkMSBhcyBGaWVsZCwgUmVhY3RGaW5hbEZvcm0gYXMgRm9ybSwgdmVyc2lvbiwgRm9ybVNweSQxIGFzIEZvcm1TcHksIHdpdGhSZWFjdEZpbmFsRm9ybSwgUmVhY3RGaW5hbEZvcm1Db250ZXh0IH07XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuXHR2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKCdwcm9wLXR5cGVzJyk7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgc2l6ZXJTdHlsZSA9IHtcblx0cG9zaXRpb246ICdhYnNvbHV0ZScsXG5cdHRvcDogMCxcblx0bGVmdDogMCxcblx0dmlzaWJpbGl0eTogJ2hpZGRlbicsXG5cdGhlaWdodDogMCxcblx0b3ZlcmZsb3c6ICdzY3JvbGwnLFxuXHR3aGl0ZVNwYWNlOiAncHJlJ1xufTtcblxudmFyIElOUFVUX1BST1BTX0JMQUNLTElTVCA9IFsnZXh0cmFXaWR0aCcsICdpbmplY3RTdHlsZXMnLCAnaW5wdXRDbGFzc05hbWUnLCAnaW5wdXRSZWYnLCAnaW5wdXRTdHlsZScsICdtaW5XaWR0aCcsICdvbkF1dG9zaXplJywgJ3BsYWNlaG9sZGVySXNNaW5XaWR0aCddO1xuXG52YXIgY2xlYW5JbnB1dFByb3BzID0gZnVuY3Rpb24gY2xlYW5JbnB1dFByb3BzKGlucHV0UHJvcHMpIHtcblx0SU5QVVRfUFJPUFNfQkxBQ0tMSVNULmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG5cdFx0cmV0dXJuIGRlbGV0ZSBpbnB1dFByb3BzW2ZpZWxkXTtcblx0fSk7XG5cdHJldHVybiBpbnB1dFByb3BzO1xufTtcblxudmFyIGNvcHlTdHlsZXMgPSBmdW5jdGlvbiBjb3B5U3R5bGVzKHN0eWxlcywgbm9kZSkge1xuXHRub2RlLnN0eWxlLmZvbnRTaXplID0gc3R5bGVzLmZvbnRTaXplO1xuXHRub2RlLnN0eWxlLmZvbnRGYW1pbHkgPSBzdHlsZXMuZm9udEZhbWlseTtcblx0bm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gc3R5bGVzLmZvbnRXZWlnaHQ7XG5cdG5vZGUuc3R5bGUuZm9udFN0eWxlID0gc3R5bGVzLmZvbnRTdHlsZTtcblx0bm9kZS5zdHlsZS5sZXR0ZXJTcGFjaW5nID0gc3R5bGVzLmxldHRlclNwYWNpbmc7XG5cdG5vZGUuc3R5bGUudGV4dFRyYW5zZm9ybSA9IHN0eWxlcy50ZXh0VHJhbnNmb3JtO1xufTtcblxudmFyIGlzSUUgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yID8gL01TSUUgfFRyaWRlbnRcXC98RWRnZVxcLy8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkgOiBmYWxzZTtcblxudmFyIGdlbmVyYXRlSWQgPSBmdW5jdGlvbiBnZW5lcmF0ZUlkKCkge1xuXHQvLyB3ZSBvbmx5IG5lZWQgYW4gYXV0by1nZW5lcmF0ZWQgSUQgZm9yIHN0eWxlc2hlZXQgaW5qZWN0aW9uLCB3aGljaCBpcyBvbmx5XG5cdC8vIHVzZWQgZm9yIElFLiBzbyBpZiB0aGUgYnJvd3NlciBpcyBub3QgSUUsIHRoaXMgc2hvdWxkIHJldHVybiB1bmRlZmluZWQuXG5cdHJldHVybiBpc0lFID8gJ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDEyKSA6IHVuZGVmaW5lZDtcbn07XG5cbnZhciBBdXRvc2l6ZUlucHV0ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0X2luaGVyaXRzKEF1dG9zaXplSW5wdXQsIF9Db21wb25lbnQpO1xuXG5cdGZ1bmN0aW9uIEF1dG9zaXplSW5wdXQocHJvcHMpIHtcblx0XHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgQXV0b3NpemVJbnB1dCk7XG5cblx0XHR2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQXV0b3NpemVJbnB1dC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEF1dG9zaXplSW5wdXQpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cblx0XHRfdGhpcy5pbnB1dFJlZiA9IGZ1bmN0aW9uIChlbCkge1xuXHRcdFx0X3RoaXMuaW5wdXQgPSBlbDtcblx0XHRcdGlmICh0eXBlb2YgX3RoaXMucHJvcHMuaW5wdXRSZWYgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0X3RoaXMucHJvcHMuaW5wdXRSZWYoZWwpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRfdGhpcy5wbGFjZUhvbGRlclNpemVyUmVmID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRfdGhpcy5wbGFjZUhvbGRlclNpemVyID0gZWw7XG5cdFx0fTtcblxuXHRcdF90aGlzLnNpemVyUmVmID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRfdGhpcy5zaXplciA9IGVsO1xuXHRcdH07XG5cblx0XHRfdGhpcy5zdGF0ZSA9IHtcblx0XHRcdGlucHV0V2lkdGg6IHByb3BzLm1pbldpZHRoLFxuXHRcdFx0aW5wdXRJZDogcHJvcHMuaWQgfHwgZ2VuZXJhdGVJZCgpXG5cdFx0fTtcblx0XHRyZXR1cm4gX3RoaXM7XG5cdH1cblxuXHRfY3JlYXRlQ2xhc3MoQXV0b3NpemVJbnB1dCwgW3tcblx0XHRrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuXHRcdFx0dGhpcy5tb3VudGVkID0gdHJ1ZTtcblx0XHRcdHRoaXMuY29weUlucHV0U3R5bGVzKCk7XG5cdFx0XHR0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcblx0XHRcdHZhciBpZCA9IG5leHRQcm9wcy5pZDtcblxuXHRcdFx0aWYgKGlkICE9PSB0aGlzLnByb3BzLmlkKSB7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoeyBpbnB1dElkOiBpZCB8fCBnZW5lcmF0ZUlkKCkgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29tcG9uZW50RGlkVXBkYXRlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG5cdFx0XHRpZiAocHJldlN0YXRlLmlucHV0V2lkdGggIT09IHRoaXMuc3RhdGUuaW5wdXRXaWR0aCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIHRoaXMucHJvcHMub25BdXRvc2l6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRoaXMucHJvcHMub25BdXRvc2l6ZSh0aGlzLnN0YXRlLmlucHV0V2lkdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuXHRcdFx0dGhpcy5tb3VudGVkID0gZmFsc2U7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29weUlucHV0U3R5bGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29weUlucHV0U3R5bGVzKCkge1xuXHRcdFx0aWYgKCF0aGlzLm1vdW50ZWQgfHwgIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBpbnB1dFN0eWxlcyA9IHRoaXMuaW5wdXQgJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5pbnB1dCk7XG5cdFx0XHRpZiAoIWlucHV0U3R5bGVzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvcHlTdHlsZXMoaW5wdXRTdHlsZXMsIHRoaXMuc2l6ZXIpO1xuXHRcdFx0aWYgKHRoaXMucGxhY2VIb2xkZXJTaXplcikge1xuXHRcdFx0XHRjb3B5U3R5bGVzKGlucHV0U3R5bGVzLCB0aGlzLnBsYWNlSG9sZGVyU2l6ZXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3VwZGF0ZUlucHV0V2lkdGgnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVJbnB1dFdpZHRoKCkge1xuXHRcdFx0aWYgKCF0aGlzLm1vdW50ZWQgfHwgIXRoaXMuc2l6ZXIgfHwgdHlwZW9mIHRoaXMuc2l6ZXIuc2Nyb2xsV2lkdGggPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBuZXdJbnB1dFdpZHRoID0gdm9pZCAwO1xuXHRcdFx0aWYgKHRoaXMucHJvcHMucGxhY2Vob2xkZXIgJiYgKCF0aGlzLnByb3BzLnZhbHVlIHx8IHRoaXMucHJvcHMudmFsdWUgJiYgdGhpcy5wcm9wcy5wbGFjZWhvbGRlcklzTWluV2lkdGgpKSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSBNYXRoLm1heCh0aGlzLnNpemVyLnNjcm9sbFdpZHRoLCB0aGlzLnBsYWNlSG9sZGVyU2l6ZXIuc2Nyb2xsV2lkdGgpICsgMjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSB0aGlzLnNpemVyLnNjcm9sbFdpZHRoICsgMjtcblx0XHRcdH1cblx0XHRcdC8vIGFkZCBleHRyYVdpZHRoIHRvIHRoZSBkZXRlY3RlZCB3aWR0aC4gZm9yIG51bWJlciB0eXBlcywgdGhpcyBkZWZhdWx0cyB0byAxNiB0byBhbGxvdyBmb3IgdGhlIHN0ZXBwZXIgVUlcblx0XHRcdHZhciBleHRyYVdpZHRoID0gdGhpcy5wcm9wcy50eXBlID09PSAnbnVtYmVyJyAmJiB0aGlzLnByb3BzLmV4dHJhV2lkdGggPT09IHVuZGVmaW5lZCA/IDE2IDogcGFyc2VJbnQodGhpcy5wcm9wcy5leHRyYVdpZHRoKSB8fCAwO1xuXHRcdFx0bmV3SW5wdXRXaWR0aCArPSBleHRyYVdpZHRoO1xuXHRcdFx0aWYgKG5ld0lucHV0V2lkdGggPCB0aGlzLnByb3BzLm1pbldpZHRoKSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSB0aGlzLnByb3BzLm1pbldpZHRoO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5ld0lucHV0V2lkdGggIT09IHRoaXMuc3RhdGUuaW5wdXRXaWR0aCkge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRpbnB1dFdpZHRoOiBuZXdJbnB1dFdpZHRoXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2dldElucHV0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0SW5wdXQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnB1dDtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdmb2N1cycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvY3VzKCkge1xuXHRcdFx0dGhpcy5pbnB1dC5mb2N1cygpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2JsdXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBibHVyKCkge1xuXHRcdFx0dGhpcy5pbnB1dC5ibHVyKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnc2VsZWN0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc2VsZWN0KCkge1xuXHRcdFx0dGhpcy5pbnB1dC5zZWxlY3QoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXJTdHlsZXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG5cdFx0XHQvLyB0aGlzIG1ldGhvZCBpbmplY3RzIHN0eWxlcyB0byBoaWRlIElFJ3MgY2xlYXIgaW5kaWNhdG9yLCB3aGljaCBtZXNzZXNcblx0XHRcdC8vIHdpdGggaW5wdXQgc2l6ZSBkZXRlY3Rpb24uIHRoZSBzdHlsZXNoZWV0IGlzIG9ubHkgaW5qZWN0ZWQgd2hlbiB0aGVcblx0XHRcdC8vIGJyb3dzZXIgaXMgSUUsIGFuZCBjYW4gYWxzbyBiZSBkaXNhYmxlZCBieSB0aGUgYGluamVjdFN0eWxlc2AgcHJvcC5cblx0XHRcdHZhciBpbmplY3RTdHlsZXMgPSB0aGlzLnByb3BzLmluamVjdFN0eWxlcztcblxuXHRcdFx0cmV0dXJuIGlzSUUgJiYgaW5qZWN0U3R5bGVzID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJywgeyBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuXHRcdFx0XHRcdF9faHRtbDogJ2lucHV0IycgKyB0aGlzLnN0YXRlLmlucHV0SWQgKyAnOjotbXMtY2xlYXIge2Rpc3BsYXk6IG5vbmU7fSdcblx0XHRcdFx0fSB9KSA6IG51bGw7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIHNpemVyVmFsdWUgPSBbdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUsIHRoaXMucHJvcHMudmFsdWUsICcnXS5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRpZiAocHJldmlvdXNWYWx1ZSAhPT0gbnVsbCAmJiBwcmV2aW91c1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY3VycmVudFZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHRcdHZhciB3cmFwcGVyU3R5bGUgPSBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcy5zdHlsZSk7XG5cdFx0XHRpZiAoIXdyYXBwZXJTdHlsZS5kaXNwbGF5KSB3cmFwcGVyU3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuXG5cdFx0XHR2YXIgaW5wdXRTdHlsZSA9IF9leHRlbmRzKHtcblx0XHRcdFx0Ym94U2l6aW5nOiAnY29udGVudC1ib3gnLFxuXHRcdFx0XHR3aWR0aDogdGhpcy5zdGF0ZS5pbnB1dFdpZHRoICsgJ3B4J1xuXHRcdFx0fSwgdGhpcy5wcm9wcy5pbnB1dFN0eWxlKTtcblxuXHRcdFx0dmFyIGlucHV0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXModGhpcy5wcm9wcywgW10pO1xuXG5cdFx0XHRjbGVhbklucHV0UHJvcHMoaW5wdXRQcm9wcyk7XG5cdFx0XHRpbnB1dFByb3BzLmNsYXNzTmFtZSA9IHRoaXMucHJvcHMuaW5wdXRDbGFzc05hbWU7XG5cdFx0XHRpbnB1dFByb3BzLmlkID0gdGhpcy5zdGF0ZS5pbnB1dElkO1xuXHRcdFx0aW5wdXRQcm9wcy5zdHlsZSA9IGlucHV0U3R5bGU7XG5cblx0XHRcdHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdHsgY2xhc3NOYW1lOiB0aGlzLnByb3BzLmNsYXNzTmFtZSwgc3R5bGU6IHdyYXBwZXJTdHlsZSB9LFxuXHRcdFx0XHR0aGlzLnJlbmRlclN0eWxlcygpLFxuXHRcdFx0XHRfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgnaW5wdXQnLCBfZXh0ZW5kcyh7fSwgaW5wdXRQcm9wcywgeyByZWY6IHRoaXMuaW5wdXRSZWYgfSkpLFxuXHRcdFx0XHRfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7IHJlZjogdGhpcy5zaXplclJlZiwgc3R5bGU6IHNpemVyU3R5bGUgfSxcblx0XHRcdFx0XHRzaXplclZhbHVlXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRoaXMucHJvcHMucGxhY2Vob2xkZXIgPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7IHJlZjogdGhpcy5wbGFjZUhvbGRlclNpemVyUmVmLCBzdHlsZTogc2l6ZXJTdHlsZSB9LFxuXHRcdFx0XHRcdHRoaXMucHJvcHMucGxhY2Vob2xkZXJcblx0XHRcdFx0KSA6IG51bGxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIEF1dG9zaXplSW5wdXQ7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5BdXRvc2l6ZUlucHV0LnByb3BUeXBlcyA9IHtcblx0Y2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gY2xhc3NOYW1lIGZvciB0aGUgb3V0ZXIgZWxlbWVudFxuXHRkZWZhdWx0VmFsdWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55LCAvLyBkZWZhdWx0IGZpZWxkIHZhbHVlXG5cdGV4dHJhV2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFsvLyBhZGRpdGlvbmFsIHdpZHRoIGZvciBpbnB1dCBlbGVtZW50XG5cdF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLCBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZ10pLFxuXHRpZDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIC8vIGlkIHRvIHVzZSBmb3IgdGhlIGlucHV0LCBjYW4gYmUgc2V0IGZvciBjb25zaXN0ZW50IHNuYXBzaG90c1xuXHRpbmplY3RTdHlsZXM6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCwgLy8gaW5qZWN0IHRoZSBjdXN0b20gc3R5bGVzaGVldCB0byBoaWRlIGNsZWFyIFVJLCBkZWZhdWx0cyB0byB0cnVlXG5cdGlucHV0Q2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gY2xhc3NOYW1lIGZvciB0aGUgaW5wdXQgZWxlbWVudFxuXHRpbnB1dFJlZjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLCAvLyByZWYgY2FsbGJhY2sgZm9yIHRoZSBpbnB1dCBlbGVtZW50XG5cdGlucHV0U3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LCAvLyBjc3Mgc3R5bGVzIGZvciB0aGUgaW5wdXQgZWxlbWVudFxuXHRtaW5XaWR0aDogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoWy8vIG1pbmltdW0gd2lkdGggZm9yIGlucHV0IGVsZW1lbnRcblx0X3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsIF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nXSksXG5cdG9uQXV0b3NpemU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gb25BdXRvc2l6ZSBoYW5kbGVyOiBmdW5jdGlvbihuZXdXaWR0aCkge31cblx0b25DaGFuZ2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gb25DaGFuZ2UgaGFuZGxlcjogZnVuY3Rpb24oZXZlbnQpIHt9XG5cdHBsYWNlaG9sZGVyOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gcGxhY2Vob2xkZXIgdGV4dFxuXHRwbGFjZWhvbGRlcklzTWluV2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCwgLy8gZG9uJ3QgY29sbGFwc2Ugc2l6ZSB0byBsZXNzIHRoYW4gdGhlIHBsYWNlaG9sZGVyXG5cdHN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCwgLy8gY3NzIHN0eWxlcyBmb3IgdGhlIG91dGVyIGVsZW1lbnRcblx0dmFsdWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55IC8vIGZpZWxkIHZhbHVlXG59O1xuQXV0b3NpemVJbnB1dC5kZWZhdWx0UHJvcHMgPSB7XG5cdG1pbldpZHRoOiAxLFxuXHRpbmplY3RTdHlsZXM6IHRydWVcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IEF1dG9zaXplSW5wdXQ7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcyc7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5JztcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZCc7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrJztcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MnO1xuaW1wb3J0IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nO1xuaW1wb3J0IF9nZXRQcm90b3R5cGVPZiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZic7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzJztcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCc7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5JztcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgbWVtb2l6ZU9uZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgeyBqc3ggfSBmcm9tICdAZW1vdGlvbi9jb3JlJztcbmltcG9ydCB7IGZpbmRET01Ob2RlIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IGkgYXMgaXNUb3VjaENhcGFibGUsIGQgYXMgaXNNb2JpbGVEZXZpY2UsIGUgYXMgaXNEb2N1bWVudEVsZW1lbnQsIGYgYXMgY2xlYW5WYWx1ZSwgaCBhcyBzY3JvbGxJbnRvVmlldywgaiBhcyBjbGFzc05hbWVzLCBuIGFzIG5vb3AgfSBmcm9tICcuLi8uLi9jaHVuay1lOGFlNGIwZi5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBjIGFzIGNsZWFySW5kaWNhdG9yQ1NTLCBhIGFzIGNvbnRhaW5lckNTUywgYiBhcyBjc3MsIGQgYXMgZHJvcGRvd25JbmRpY2F0b3JDU1MsIGcgYXMgZ3JvdXBDU1MsIGUgYXMgZ3JvdXBIZWFkaW5nQ1NTLCBpIGFzIGluZGljYXRvcnNDb250YWluZXJDU1MsIGYgYXMgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTLCBoIGFzIGlucHV0Q1NTLCBsIGFzIGxvYWRpbmdJbmRpY2F0b3JDU1MsIGogYXMgbG9hZGluZ01lc3NhZ2VDU1MsIG0gYXMgbWVudUNTUywgayBhcyBtZW51TGlzdENTUywgbiBhcyBtZW51UG9ydGFsQ1NTLCBvIGFzIG11bHRpVmFsdWVDU1MsIHAgYXMgbXVsdGlWYWx1ZUxhYmVsQ1NTLCBxIGFzIG11bHRpVmFsdWVSZW1vdmVDU1MsIHIgYXMgbm9PcHRpb25zTWVzc2FnZUNTUywgcyBhcyBvcHRpb25DU1MsIHQgYXMgcGxhY2Vob2xkZXJDU1MsIHUgYXMgY3NzJDEsIHYgYXMgdmFsdWVDb250YWluZXJDU1MsIHcgYXMgZGVmYXVsdENvbXBvbmVudHMsIHggYXMgZXhwb3J0ZWRFcXVhbCwgTSBhcyBNZW51UGxhY2VyIH0gZnJvbSAnLi4vLi4vY2h1bmstNWQyMDBhNDEuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0IF9jc3MgZnJvbSAnQGVtb3Rpb24vY3NzJztcblxudmFyIGRpYWNyaXRpY3MgPSBbe1xuICBiYXNlOiAnQScsXG4gIGxldHRlcnM6IC9bXFx1MDA0MVxcdTI0QjZcXHVGRjIxXFx1MDBDMFxcdTAwQzFcXHUwMEMyXFx1MUVBNlxcdTFFQTRcXHUxRUFBXFx1MUVBOFxcdTAwQzNcXHUwMTAwXFx1MDEwMlxcdTFFQjBcXHUxRUFFXFx1MUVCNFxcdTFFQjJcXHUwMjI2XFx1MDFFMFxcdTAwQzRcXHUwMURFXFx1MUVBMlxcdTAwQzVcXHUwMUZBXFx1MDFDRFxcdTAyMDBcXHUwMjAyXFx1MUVBMFxcdTFFQUNcXHUxRUI2XFx1MUUwMFxcdTAxMDRcXHUwMjNBXFx1MkM2Rl0vZ1xufSwge1xuICBiYXNlOiAnQUEnLFxuICBsZXR0ZXJzOiAvW1xcdUE3MzJdL2dcbn0sIHtcbiAgYmFzZTogJ0FFJyxcbiAgbGV0dGVyczogL1tcXHUwMEM2XFx1MDFGQ1xcdTAxRTJdL2dcbn0sIHtcbiAgYmFzZTogJ0FPJyxcbiAgbGV0dGVyczogL1tcXHVBNzM0XS9nXG59LCB7XG4gIGJhc2U6ICdBVScsXG4gIGxldHRlcnM6IC9bXFx1QTczNl0vZ1xufSwge1xuICBiYXNlOiAnQVYnLFxuICBsZXR0ZXJzOiAvW1xcdUE3MzhcXHVBNzNBXS9nXG59LCB7XG4gIGJhc2U6ICdBWScsXG4gIGxldHRlcnM6IC9bXFx1QTczQ10vZ1xufSwge1xuICBiYXNlOiAnQicsXG4gIGxldHRlcnM6IC9bXFx1MDA0MlxcdTI0QjdcXHVGRjIyXFx1MUUwMlxcdTFFMDRcXHUxRTA2XFx1MDI0M1xcdTAxODJcXHUwMTgxXS9nXG59LCB7XG4gIGJhc2U6ICdDJyxcbiAgbGV0dGVyczogL1tcXHUwMDQzXFx1MjRCOFxcdUZGMjNcXHUwMTA2XFx1MDEwOFxcdTAxMEFcXHUwMTBDXFx1MDBDN1xcdTFFMDhcXHUwMTg3XFx1MDIzQlxcdUE3M0VdL2dcbn0sIHtcbiAgYmFzZTogJ0QnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNDRcXHUyNEI5XFx1RkYyNFxcdTFFMEFcXHUwMTBFXFx1MUUwQ1xcdTFFMTBcXHUxRTEyXFx1MUUwRVxcdTAxMTBcXHUwMThCXFx1MDE4QVxcdTAxODlcXHVBNzc5XS9nXG59LCB7XG4gIGJhc2U6ICdEWicsXG4gIGxldHRlcnM6IC9bXFx1MDFGMVxcdTAxQzRdL2dcbn0sIHtcbiAgYmFzZTogJ0R6JyxcbiAgbGV0dGVyczogL1tcXHUwMUYyXFx1MDFDNV0vZ1xufSwge1xuICBiYXNlOiAnRScsXG4gIGxldHRlcnM6IC9bXFx1MDA0NVxcdTI0QkFcXHVGRjI1XFx1MDBDOFxcdTAwQzlcXHUwMENBXFx1MUVDMFxcdTFFQkVcXHUxRUM0XFx1MUVDMlxcdTFFQkNcXHUwMTEyXFx1MUUxNFxcdTFFMTZcXHUwMTE0XFx1MDExNlxcdTAwQ0JcXHUxRUJBXFx1MDExQVxcdTAyMDRcXHUwMjA2XFx1MUVCOFxcdTFFQzZcXHUwMjI4XFx1MUUxQ1xcdTAxMThcXHUxRTE4XFx1MUUxQVxcdTAxOTBcXHUwMThFXS9nXG59LCB7XG4gIGJhc2U6ICdGJyxcbiAgbGV0dGVyczogL1tcXHUwMDQ2XFx1MjRCQlxcdUZGMjZcXHUxRTFFXFx1MDE5MVxcdUE3N0JdL2dcbn0sIHtcbiAgYmFzZTogJ0cnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNDdcXHUyNEJDXFx1RkYyN1xcdTAxRjRcXHUwMTFDXFx1MUUyMFxcdTAxMUVcXHUwMTIwXFx1MDFFNlxcdTAxMjJcXHUwMUU0XFx1MDE5M1xcdUE3QTBcXHVBNzdEXFx1QTc3RV0vZ1xufSwge1xuICBiYXNlOiAnSCcsXG4gIGxldHRlcnM6IC9bXFx1MDA0OFxcdTI0QkRcXHVGRjI4XFx1MDEyNFxcdTFFMjJcXHUxRTI2XFx1MDIxRVxcdTFFMjRcXHUxRTI4XFx1MUUyQVxcdTAxMjZcXHUyQzY3XFx1MkM3NVxcdUE3OERdL2dcbn0sIHtcbiAgYmFzZTogJ0knLFxuICBsZXR0ZXJzOiAvW1xcdTAwNDlcXHUyNEJFXFx1RkYyOVxcdTAwQ0NcXHUwMENEXFx1MDBDRVxcdTAxMjhcXHUwMTJBXFx1MDEyQ1xcdTAxMzBcXHUwMENGXFx1MUUyRVxcdTFFQzhcXHUwMUNGXFx1MDIwOFxcdTAyMEFcXHUxRUNBXFx1MDEyRVxcdTFFMkNcXHUwMTk3XS9nXG59LCB7XG4gIGJhc2U6ICdKJyxcbiAgbGV0dGVyczogL1tcXHUwMDRBXFx1MjRCRlxcdUZGMkFcXHUwMTM0XFx1MDI0OF0vZ1xufSwge1xuICBiYXNlOiAnSycsXG4gIGxldHRlcnM6IC9bXFx1MDA0QlxcdTI0QzBcXHVGRjJCXFx1MUUzMFxcdTAxRThcXHUxRTMyXFx1MDEzNlxcdTFFMzRcXHUwMTk4XFx1MkM2OVxcdUE3NDBcXHVBNzQyXFx1QTc0NFxcdUE3QTJdL2dcbn0sIHtcbiAgYmFzZTogJ0wnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNENcXHUyNEMxXFx1RkYyQ1xcdTAxM0ZcXHUwMTM5XFx1MDEzRFxcdTFFMzZcXHUxRTM4XFx1MDEzQlxcdTFFM0NcXHUxRTNBXFx1MDE0MVxcdTAyM0RcXHUyQzYyXFx1MkM2MFxcdUE3NDhcXHVBNzQ2XFx1QTc4MF0vZ1xufSwge1xuICBiYXNlOiAnTEonLFxuICBsZXR0ZXJzOiAvW1xcdTAxQzddL2dcbn0sIHtcbiAgYmFzZTogJ0xqJyxcbiAgbGV0dGVyczogL1tcXHUwMUM4XS9nXG59LCB7XG4gIGJhc2U6ICdNJyxcbiAgbGV0dGVyczogL1tcXHUwMDREXFx1MjRDMlxcdUZGMkRcXHUxRTNFXFx1MUU0MFxcdTFFNDJcXHUyQzZFXFx1MDE5Q10vZ1xufSwge1xuICBiYXNlOiAnTicsXG4gIGxldHRlcnM6IC9bXFx1MDA0RVxcdTI0QzNcXHVGRjJFXFx1MDFGOFxcdTAxNDNcXHUwMEQxXFx1MUU0NFxcdTAxNDdcXHUxRTQ2XFx1MDE0NVxcdTFFNEFcXHUxRTQ4XFx1MDIyMFxcdTAxOURcXHVBNzkwXFx1QTdBNF0vZ1xufSwge1xuICBiYXNlOiAnTkonLFxuICBsZXR0ZXJzOiAvW1xcdTAxQ0FdL2dcbn0sIHtcbiAgYmFzZTogJ05qJyxcbiAgbGV0dGVyczogL1tcXHUwMUNCXS9nXG59LCB7XG4gIGJhc2U6ICdPJyxcbiAgbGV0dGVyczogL1tcXHUwMDRGXFx1MjRDNFxcdUZGMkZcXHUwMEQyXFx1MDBEM1xcdTAwRDRcXHUxRUQyXFx1MUVEMFxcdTFFRDZcXHUxRUQ0XFx1MDBENVxcdTFFNENcXHUwMjJDXFx1MUU0RVxcdTAxNENcXHUxRTUwXFx1MUU1MlxcdTAxNEVcXHUwMjJFXFx1MDIzMFxcdTAwRDZcXHUwMjJBXFx1MUVDRVxcdTAxNTBcXHUwMUQxXFx1MDIwQ1xcdTAyMEVcXHUwMUEwXFx1MUVEQ1xcdTFFREFcXHUxRUUwXFx1MUVERVxcdTFFRTJcXHUxRUNDXFx1MUVEOFxcdTAxRUFcXHUwMUVDXFx1MDBEOFxcdTAxRkVcXHUwMTg2XFx1MDE5RlxcdUE3NEFcXHVBNzRDXS9nXG59LCB7XG4gIGJhc2U6ICdPSScsXG4gIGxldHRlcnM6IC9bXFx1MDFBMl0vZ1xufSwge1xuICBiYXNlOiAnT08nLFxuICBsZXR0ZXJzOiAvW1xcdUE3NEVdL2dcbn0sIHtcbiAgYmFzZTogJ09VJyxcbiAgbGV0dGVyczogL1tcXHUwMjIyXS9nXG59LCB7XG4gIGJhc2U6ICdQJyxcbiAgbGV0dGVyczogL1tcXHUwMDUwXFx1MjRDNVxcdUZGMzBcXHUxRTU0XFx1MUU1NlxcdTAxQTRcXHUyQzYzXFx1QTc1MFxcdUE3NTJcXHVBNzU0XS9nXG59LCB7XG4gIGJhc2U6ICdRJyxcbiAgbGV0dGVyczogL1tcXHUwMDUxXFx1MjRDNlxcdUZGMzFcXHVBNzU2XFx1QTc1OFxcdTAyNEFdL2dcbn0sIHtcbiAgYmFzZTogJ1InLFxuICBsZXR0ZXJzOiAvW1xcdTAwNTJcXHUyNEM3XFx1RkYzMlxcdTAxNTRcXHUxRTU4XFx1MDE1OFxcdTAyMTBcXHUwMjEyXFx1MUU1QVxcdTFFNUNcXHUwMTU2XFx1MUU1RVxcdTAyNENcXHUyQzY0XFx1QTc1QVxcdUE3QTZcXHVBNzgyXS9nXG59LCB7XG4gIGJhc2U6ICdTJyxcbiAgbGV0dGVyczogL1tcXHUwMDUzXFx1MjRDOFxcdUZGMzNcXHUxRTlFXFx1MDE1QVxcdTFFNjRcXHUwMTVDXFx1MUU2MFxcdTAxNjBcXHUxRTY2XFx1MUU2MlxcdTFFNjhcXHUwMjE4XFx1MDE1RVxcdTJDN0VcXHVBN0E4XFx1QTc4NF0vZ1xufSwge1xuICBiYXNlOiAnVCcsXG4gIGxldHRlcnM6IC9bXFx1MDA1NFxcdTI0QzlcXHVGRjM0XFx1MUU2QVxcdTAxNjRcXHUxRTZDXFx1MDIxQVxcdTAxNjJcXHUxRTcwXFx1MUU2RVxcdTAxNjZcXHUwMUFDXFx1MDFBRVxcdTAyM0VcXHVBNzg2XS9nXG59LCB7XG4gIGJhc2U6ICdUWicsXG4gIGxldHRlcnM6IC9bXFx1QTcyOF0vZ1xufSwge1xuICBiYXNlOiAnVScsXG4gIGxldHRlcnM6IC9bXFx1MDA1NVxcdTI0Q0FcXHVGRjM1XFx1MDBEOVxcdTAwREFcXHUwMERCXFx1MDE2OFxcdTFFNzhcXHUwMTZBXFx1MUU3QVxcdTAxNkNcXHUwMERDXFx1MDFEQlxcdTAxRDdcXHUwMUQ1XFx1MDFEOVxcdTFFRTZcXHUwMTZFXFx1MDE3MFxcdTAxRDNcXHUwMjE0XFx1MDIxNlxcdTAxQUZcXHUxRUVBXFx1MUVFOFxcdTFFRUVcXHUxRUVDXFx1MUVGMFxcdTFFRTRcXHUxRTcyXFx1MDE3MlxcdTFFNzZcXHUxRTc0XFx1MDI0NF0vZ1xufSwge1xuICBiYXNlOiAnVicsXG4gIGxldHRlcnM6IC9bXFx1MDA1NlxcdTI0Q0JcXHVGRjM2XFx1MUU3Q1xcdTFFN0VcXHUwMUIyXFx1QTc1RVxcdTAyNDVdL2dcbn0sIHtcbiAgYmFzZTogJ1ZZJyxcbiAgbGV0dGVyczogL1tcXHVBNzYwXS9nXG59LCB7XG4gIGJhc2U6ICdXJyxcbiAgbGV0dGVyczogL1tcXHUwMDU3XFx1MjRDQ1xcdUZGMzdcXHUxRTgwXFx1MUU4MlxcdTAxNzRcXHUxRTg2XFx1MUU4NFxcdTFFODhcXHUyQzcyXS9nXG59LCB7XG4gIGJhc2U6ICdYJyxcbiAgbGV0dGVyczogL1tcXHUwMDU4XFx1MjRDRFxcdUZGMzhcXHUxRThBXFx1MUU4Q10vZ1xufSwge1xuICBiYXNlOiAnWScsXG4gIGxldHRlcnM6IC9bXFx1MDA1OVxcdTI0Q0VcXHVGRjM5XFx1MUVGMlxcdTAwRERcXHUwMTc2XFx1MUVGOFxcdTAyMzJcXHUxRThFXFx1MDE3OFxcdTFFRjZcXHUxRUY0XFx1MDFCM1xcdTAyNEVcXHUxRUZFXS9nXG59LCB7XG4gIGJhc2U6ICdaJyxcbiAgbGV0dGVyczogL1tcXHUwMDVBXFx1MjRDRlxcdUZGM0FcXHUwMTc5XFx1MUU5MFxcdTAxN0JcXHUwMTdEXFx1MUU5MlxcdTFFOTRcXHUwMUI1XFx1MDIyNFxcdTJDN0ZcXHUyQzZCXFx1QTc2Ml0vZ1xufSwge1xuICBiYXNlOiAnYScsXG4gIGxldHRlcnM6IC9bXFx1MDA2MVxcdTI0RDBcXHVGRjQxXFx1MUU5QVxcdTAwRTBcXHUwMEUxXFx1MDBFMlxcdTFFQTdcXHUxRUE1XFx1MUVBQlxcdTFFQTlcXHUwMEUzXFx1MDEwMVxcdTAxMDNcXHUxRUIxXFx1MUVBRlxcdTFFQjVcXHUxRUIzXFx1MDIyN1xcdTAxRTFcXHUwMEU0XFx1MDFERlxcdTFFQTNcXHUwMEU1XFx1MDFGQlxcdTAxQ0VcXHUwMjAxXFx1MDIwM1xcdTFFQTFcXHUxRUFEXFx1MUVCN1xcdTFFMDFcXHUwMTA1XFx1MkM2NVxcdTAyNTBdL2dcbn0sIHtcbiAgYmFzZTogJ2FhJyxcbiAgbGV0dGVyczogL1tcXHVBNzMzXS9nXG59LCB7XG4gIGJhc2U6ICdhZScsXG4gIGxldHRlcnM6IC9bXFx1MDBFNlxcdTAxRkRcXHUwMUUzXS9nXG59LCB7XG4gIGJhc2U6ICdhbycsXG4gIGxldHRlcnM6IC9bXFx1QTczNV0vZ1xufSwge1xuICBiYXNlOiAnYXUnLFxuICBsZXR0ZXJzOiAvW1xcdUE3MzddL2dcbn0sIHtcbiAgYmFzZTogJ2F2JyxcbiAgbGV0dGVyczogL1tcXHVBNzM5XFx1QTczQl0vZ1xufSwge1xuICBiYXNlOiAnYXknLFxuICBsZXR0ZXJzOiAvW1xcdUE3M0RdL2dcbn0sIHtcbiAgYmFzZTogJ2InLFxuICBsZXR0ZXJzOiAvW1xcdTAwNjJcXHUyNEQxXFx1RkY0MlxcdTFFMDNcXHUxRTA1XFx1MUUwN1xcdTAxODBcXHUwMTgzXFx1MDI1M10vZ1xufSwge1xuICBiYXNlOiAnYycsXG4gIGxldHRlcnM6IC9bXFx1MDA2M1xcdTI0RDJcXHVGRjQzXFx1MDEwN1xcdTAxMDlcXHUwMTBCXFx1MDEwRFxcdTAwRTdcXHUxRTA5XFx1MDE4OFxcdTAyM0NcXHVBNzNGXFx1MjE4NF0vZ1xufSwge1xuICBiYXNlOiAnZCcsXG4gIGxldHRlcnM6IC9bXFx1MDA2NFxcdTI0RDNcXHVGRjQ0XFx1MUUwQlxcdTAxMEZcXHUxRTBEXFx1MUUxMVxcdTFFMTNcXHUxRTBGXFx1MDExMVxcdTAxOENcXHUwMjU2XFx1MDI1N1xcdUE3N0FdL2dcbn0sIHtcbiAgYmFzZTogJ2R6JyxcbiAgbGV0dGVyczogL1tcXHUwMUYzXFx1MDFDNl0vZ1xufSwge1xuICBiYXNlOiAnZScsXG4gIGxldHRlcnM6IC9bXFx1MDA2NVxcdTI0RDRcXHVGRjQ1XFx1MDBFOFxcdTAwRTlcXHUwMEVBXFx1MUVDMVxcdTFFQkZcXHUxRUM1XFx1MUVDM1xcdTFFQkRcXHUwMTEzXFx1MUUxNVxcdTFFMTdcXHUwMTE1XFx1MDExN1xcdTAwRUJcXHUxRUJCXFx1MDExQlxcdTAyMDVcXHUwMjA3XFx1MUVCOVxcdTFFQzdcXHUwMjI5XFx1MUUxRFxcdTAxMTlcXHUxRTE5XFx1MUUxQlxcdTAyNDdcXHUwMjVCXFx1MDFERF0vZ1xufSwge1xuICBiYXNlOiAnZicsXG4gIGxldHRlcnM6IC9bXFx1MDA2NlxcdTI0RDVcXHVGRjQ2XFx1MUUxRlxcdTAxOTJcXHVBNzdDXS9nXG59LCB7XG4gIGJhc2U6ICdnJyxcbiAgbGV0dGVyczogL1tcXHUwMDY3XFx1MjRENlxcdUZGNDdcXHUwMUY1XFx1MDExRFxcdTFFMjFcXHUwMTFGXFx1MDEyMVxcdTAxRTdcXHUwMTIzXFx1MDFFNVxcdTAyNjBcXHVBN0ExXFx1MUQ3OVxcdUE3N0ZdL2dcbn0sIHtcbiAgYmFzZTogJ2gnLFxuICBsZXR0ZXJzOiAvW1xcdTAwNjhcXHUyNEQ3XFx1RkY0OFxcdTAxMjVcXHUxRTIzXFx1MUUyN1xcdTAyMUZcXHUxRTI1XFx1MUUyOVxcdTFFMkJcXHUxRTk2XFx1MDEyN1xcdTJDNjhcXHUyQzc2XFx1MDI2NV0vZ1xufSwge1xuICBiYXNlOiAnaHYnLFxuICBsZXR0ZXJzOiAvW1xcdTAxOTVdL2dcbn0sIHtcbiAgYmFzZTogJ2knLFxuICBsZXR0ZXJzOiAvW1xcdTAwNjlcXHUyNEQ4XFx1RkY0OVxcdTAwRUNcXHUwMEVEXFx1MDBFRVxcdTAxMjlcXHUwMTJCXFx1MDEyRFxcdTAwRUZcXHUxRTJGXFx1MUVDOVxcdTAxRDBcXHUwMjA5XFx1MDIwQlxcdTFFQ0JcXHUwMTJGXFx1MUUyRFxcdTAyNjhcXHUwMTMxXS9nXG59LCB7XG4gIGJhc2U6ICdqJyxcbiAgbGV0dGVyczogL1tcXHUwMDZBXFx1MjREOVxcdUZGNEFcXHUwMTM1XFx1MDFGMFxcdTAyNDldL2dcbn0sIHtcbiAgYmFzZTogJ2snLFxuICBsZXR0ZXJzOiAvW1xcdTAwNkJcXHUyNERBXFx1RkY0QlxcdTFFMzFcXHUwMUU5XFx1MUUzM1xcdTAxMzdcXHUxRTM1XFx1MDE5OVxcdTJDNkFcXHVBNzQxXFx1QTc0M1xcdUE3NDVcXHVBN0EzXS9nXG59LCB7XG4gIGJhc2U6ICdsJyxcbiAgbGV0dGVyczogL1tcXHUwMDZDXFx1MjREQlxcdUZGNENcXHUwMTQwXFx1MDEzQVxcdTAxM0VcXHUxRTM3XFx1MUUzOVxcdTAxM0NcXHUxRTNEXFx1MUUzQlxcdTAxN0ZcXHUwMTQyXFx1MDE5QVxcdTAyNkJcXHUyQzYxXFx1QTc0OVxcdUE3ODFcXHVBNzQ3XS9nXG59LCB7XG4gIGJhc2U6ICdsaicsXG4gIGxldHRlcnM6IC9bXFx1MDFDOV0vZ1xufSwge1xuICBiYXNlOiAnbScsXG4gIGxldHRlcnM6IC9bXFx1MDA2RFxcdTI0RENcXHVGRjREXFx1MUUzRlxcdTFFNDFcXHUxRTQzXFx1MDI3MVxcdTAyNkZdL2dcbn0sIHtcbiAgYmFzZTogJ24nLFxuICBsZXR0ZXJzOiAvW1xcdTAwNkVcXHUyNEREXFx1RkY0RVxcdTAxRjlcXHUwMTQ0XFx1MDBGMVxcdTFFNDVcXHUwMTQ4XFx1MUU0N1xcdTAxNDZcXHUxRTRCXFx1MUU0OVxcdTAxOUVcXHUwMjcyXFx1MDE0OVxcdUE3OTFcXHVBN0E1XS9nXG59LCB7XG4gIGJhc2U6ICduaicsXG4gIGxldHRlcnM6IC9bXFx1MDFDQ10vZ1xufSwge1xuICBiYXNlOiAnbycsXG4gIGxldHRlcnM6IC9bXFx1MDA2RlxcdTI0REVcXHVGRjRGXFx1MDBGMlxcdTAwRjNcXHUwMEY0XFx1MUVEM1xcdTFFRDFcXHUxRUQ3XFx1MUVENVxcdTAwRjVcXHUxRTREXFx1MDIyRFxcdTFFNEZcXHUwMTREXFx1MUU1MVxcdTFFNTNcXHUwMTRGXFx1MDIyRlxcdTAyMzFcXHUwMEY2XFx1MDIyQlxcdTFFQ0ZcXHUwMTUxXFx1MDFEMlxcdTAyMERcXHUwMjBGXFx1MDFBMVxcdTFFRERcXHUxRURCXFx1MUVFMVxcdTFFREZcXHUxRUUzXFx1MUVDRFxcdTFFRDlcXHUwMUVCXFx1MDFFRFxcdTAwRjhcXHUwMUZGXFx1MDI1NFxcdUE3NEJcXHVBNzREXFx1MDI3NV0vZ1xufSwge1xuICBiYXNlOiAnb2knLFxuICBsZXR0ZXJzOiAvW1xcdTAxQTNdL2dcbn0sIHtcbiAgYmFzZTogJ291JyxcbiAgbGV0dGVyczogL1tcXHUwMjIzXS9nXG59LCB7XG4gIGJhc2U6ICdvbycsXG4gIGxldHRlcnM6IC9bXFx1QTc0Rl0vZ1xufSwge1xuICBiYXNlOiAncCcsXG4gIGxldHRlcnM6IC9bXFx1MDA3MFxcdTI0REZcXHVGRjUwXFx1MUU1NVxcdTFFNTdcXHUwMUE1XFx1MUQ3RFxcdUE3NTFcXHVBNzUzXFx1QTc1NV0vZ1xufSwge1xuICBiYXNlOiAncScsXG4gIGxldHRlcnM6IC9bXFx1MDA3MVxcdTI0RTBcXHVGRjUxXFx1MDI0QlxcdUE3NTdcXHVBNzU5XS9nXG59LCB7XG4gIGJhc2U6ICdyJyxcbiAgbGV0dGVyczogL1tcXHUwMDcyXFx1MjRFMVxcdUZGNTJcXHUwMTU1XFx1MUU1OVxcdTAxNTlcXHUwMjExXFx1MDIxM1xcdTFFNUJcXHUxRTVEXFx1MDE1N1xcdTFFNUZcXHUwMjREXFx1MDI3RFxcdUE3NUJcXHVBN0E3XFx1QTc4M10vZ1xufSwge1xuICBiYXNlOiAncycsXG4gIGxldHRlcnM6IC9bXFx1MDA3M1xcdTI0RTJcXHVGRjUzXFx1MDBERlxcdTAxNUJcXHUxRTY1XFx1MDE1RFxcdTFFNjFcXHUwMTYxXFx1MUU2N1xcdTFFNjNcXHUxRTY5XFx1MDIxOVxcdTAxNUZcXHUwMjNGXFx1QTdBOVxcdUE3ODVcXHUxRTlCXS9nXG59LCB7XG4gIGJhc2U6ICd0JyxcbiAgbGV0dGVyczogL1tcXHUwMDc0XFx1MjRFM1xcdUZGNTRcXHUxRTZCXFx1MUU5N1xcdTAxNjVcXHUxRTZEXFx1MDIxQlxcdTAxNjNcXHUxRTcxXFx1MUU2RlxcdTAxNjdcXHUwMUFEXFx1MDI4OFxcdTJDNjZcXHVBNzg3XS9nXG59LCB7XG4gIGJhc2U6ICd0eicsXG4gIGxldHRlcnM6IC9bXFx1QTcyOV0vZ1xufSwge1xuICBiYXNlOiAndScsXG4gIGxldHRlcnM6IC9bXFx1MDA3NVxcdTI0RTRcXHVGRjU1XFx1MDBGOVxcdTAwRkFcXHUwMEZCXFx1MDE2OVxcdTFFNzlcXHUwMTZCXFx1MUU3QlxcdTAxNkRcXHUwMEZDXFx1MDFEQ1xcdTAxRDhcXHUwMUQ2XFx1MDFEQVxcdTFFRTdcXHUwMTZGXFx1MDE3MVxcdTAxRDRcXHUwMjE1XFx1MDIxN1xcdTAxQjBcXHUxRUVCXFx1MUVFOVxcdTFFRUZcXHUxRUVEXFx1MUVGMVxcdTFFRTVcXHUxRTczXFx1MDE3M1xcdTFFNzdcXHUxRTc1XFx1MDI4OV0vZ1xufSwge1xuICBiYXNlOiAndicsXG4gIGxldHRlcnM6IC9bXFx1MDA3NlxcdTI0RTVcXHVGRjU2XFx1MUU3RFxcdTFFN0ZcXHUwMjhCXFx1QTc1RlxcdTAyOENdL2dcbn0sIHtcbiAgYmFzZTogJ3Z5JyxcbiAgbGV0dGVyczogL1tcXHVBNzYxXS9nXG59LCB7XG4gIGJhc2U6ICd3JyxcbiAgbGV0dGVyczogL1tcXHUwMDc3XFx1MjRFNlxcdUZGNTdcXHUxRTgxXFx1MUU4M1xcdTAxNzVcXHUxRTg3XFx1MUU4NVxcdTFFOThcXHUxRTg5XFx1MkM3M10vZ1xufSwge1xuICBiYXNlOiAneCcsXG4gIGxldHRlcnM6IC9bXFx1MDA3OFxcdTI0RTdcXHVGRjU4XFx1MUU4QlxcdTFFOERdL2dcbn0sIHtcbiAgYmFzZTogJ3knLFxuICBsZXR0ZXJzOiAvW1xcdTAwNzlcXHUyNEU4XFx1RkY1OVxcdTFFRjNcXHUwMEZEXFx1MDE3N1xcdTFFRjlcXHUwMjMzXFx1MUU4RlxcdTAwRkZcXHUxRUY3XFx1MUU5OVxcdTFFRjVcXHUwMUI0XFx1MDI0RlxcdTFFRkZdL2dcbn0sIHtcbiAgYmFzZTogJ3onLFxuICBsZXR0ZXJzOiAvW1xcdTAwN0FcXHUyNEU5XFx1RkY1QVxcdTAxN0FcXHUxRTkxXFx1MDE3Q1xcdTAxN0VcXHUxRTkzXFx1MUU5NVxcdTAxQjZcXHUwMjI1XFx1MDI0MFxcdTJDNkNcXHVBNzYzXS9nXG59XTtcbnZhciBzdHJpcERpYWNyaXRpY3MgPSBmdW5jdGlvbiBzdHJpcERpYWNyaXRpY3Moc3RyKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGlhY3JpdGljcy5sZW5ndGg7IGkrKykge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKGRpYWNyaXRpY3NbaV0ubGV0dGVycywgZGlhY3JpdGljc1tpXS5iYXNlKTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59O1xuXG52YXIgdHJpbVN0cmluZyA9IGZ1bmN0aW9uIHRyaW1TdHJpbmcoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufTtcblxudmFyIGRlZmF1bHRTdHJpbmdpZnkgPSBmdW5jdGlvbiBkZWZhdWx0U3RyaW5naWZ5KG9wdGlvbikge1xuICByZXR1cm4gXCJcIi5jb25jYXQob3B0aW9uLmxhYmVsLCBcIiBcIikuY29uY2F0KG9wdGlvbi52YWx1ZSk7XG59O1xuXG52YXIgY3JlYXRlRmlsdGVyID0gZnVuY3Rpb24gY3JlYXRlRmlsdGVyKGNvbmZpZykge1xuICByZXR1cm4gZnVuY3Rpb24gKG9wdGlvbiwgcmF3SW5wdXQpIHtcbiAgICB2YXIgX2lnbm9yZUNhc2UkaWdub3JlQWNjID0gX29iamVjdFNwcmVhZCh7XG4gICAgICBpZ25vcmVDYXNlOiB0cnVlLFxuICAgICAgaWdub3JlQWNjZW50czogdHJ1ZSxcbiAgICAgIHN0cmluZ2lmeTogZGVmYXVsdFN0cmluZ2lmeSxcbiAgICAgIHRyaW06IHRydWUsXG4gICAgICBtYXRjaEZyb206ICdhbnknXG4gICAgfSwgY29uZmlnKSxcbiAgICAgICAgaWdub3JlQ2FzZSA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5pZ25vcmVDYXNlLFxuICAgICAgICBpZ25vcmVBY2NlbnRzID0gX2lnbm9yZUNhc2UkaWdub3JlQWNjLmlnbm9yZUFjY2VudHMsXG4gICAgICAgIHN0cmluZ2lmeSA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5zdHJpbmdpZnksXG4gICAgICAgIHRyaW0gPSBfaWdub3JlQ2FzZSRpZ25vcmVBY2MudHJpbSxcbiAgICAgICAgbWF0Y2hGcm9tID0gX2lnbm9yZUNhc2UkaWdub3JlQWNjLm1hdGNoRnJvbTtcblxuICAgIHZhciBpbnB1dCA9IHRyaW0gPyB0cmltU3RyaW5nKHJhd0lucHV0KSA6IHJhd0lucHV0O1xuICAgIHZhciBjYW5kaWRhdGUgPSB0cmltID8gdHJpbVN0cmluZyhzdHJpbmdpZnkob3B0aW9uKSkgOiBzdHJpbmdpZnkob3B0aW9uKTtcblxuICAgIGlmIChpZ25vcmVDYXNlKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoaWdub3JlQWNjZW50cykge1xuICAgICAgaW5wdXQgPSBzdHJpcERpYWNyaXRpY3MoaW5wdXQpO1xuICAgICAgY2FuZGlkYXRlID0gc3RyaXBEaWFjcml0aWNzKGNhbmRpZGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoRnJvbSA9PT0gJ3N0YXJ0JyA/IGNhbmRpZGF0ZS5zdWJzdHIoMCwgaW5wdXQubGVuZ3RoKSA9PT0gaW5wdXQgOiBjYW5kaWRhdGUuaW5kZXhPZihpbnB1dCkgPiAtMTtcbiAgfTtcbn07XG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFsYWFvMjEtYTExeVRleHRcIixcbiAgc3R5bGVzOiBcImxhYmVsOmExMXlUZXh0O3otaW5kZXg6OTk5OTtib3JkZXI6MDtjbGlwOnJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtoZWlnaHQ6MXB4O3dpZHRoOjFweDtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3doaXRlLXNwYWNlOm5vd3JhcDtcIlxufSA6IHtcbiAgbmFtZTogXCIxbGFhbzIxLWExMXlUZXh0XCIsXG4gIHN0eWxlczogXCJsYWJlbDphMTF5VGV4dDt6LWluZGV4Ojk5OTk7Ym9yZGVyOjA7Y2xpcDpyZWN0KDFweCwgMXB4LCAxcHgsIDFweCk7aGVpZ2h0OjFweDt3aWR0aDoxcHg7cG9zaXRpb246YWJzb2x1dGU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDt3aGl0ZS1zcGFjZTpub3dyYXA7XCIsXG4gIG1hcDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJa0V4TVhsVVpYaDBMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVZGTklpd2labWxzWlNJNklrRXhNWGxVWlhoMExtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHk4Z1FHWnNiM2RjYmk4cUtpQkFhbk40SUdwemVDQXFMMXh1YVcxd2IzSjBJSHNnZEhsd1pTQkZiR1Z0Wlc1MFEyOXVabWxuSUgwZ1puSnZiU0FuY21WaFkzUW5PMXh1YVcxd2IzSjBJSHNnYW5ONElIMGdabkp2YlNBblFHVnRiM1JwYjI0dlkyOXlaU2M3WEc1Y2JpOHZJRUZ6YzJsemRHbDJaU0IwWlhoMElIUnZJR1JsYzJOeWFXSmxJSFpwYzNWaGJDQmxiR1Z0Wlc1MGN5NGdTR2xrWkdWdUlHWnZjaUJ6YVdkb2RHVmtJSFZ6WlhKekxseHVZMjl1YzNRZ1FURXhlVlJsZUhRZ1BTQW9jSEp2Y0hNNklFVnNaVzFsYm5SRGIyNW1hV2M4SjNOd1lXNG5QaWtnUFQ0Z0tGeHVJQ0FnSUR4emNHRnVYRzRnSUNBZ0lDQmpjM005ZTN0Y2JpQWdJQ0FnSUNBZ2JHRmlaV3c2SUNkaE1URjVWR1Y0ZENjc1hHNGdJQ0FnSUNBZ0lIcEpibVJsZURvZ09UazVPU3hjYmlBZ0lDQWdJQ0FnWW05eVpHVnlPaUF3TEZ4dUlDQWdJQ0FnSUNCamJHbHdPaUFuY21WamRDZ3hjSGdzSURGd2VDd2dNWEI0TENBeGNIZ3BKeXhjYmlBZ0lDQWdJQ0FnYUdWcFoyaDBPaUF4TEZ4dUlDQWdJQ0FnSUNCM2FXUjBhRG9nTVN4Y2JpQWdJQ0FnSUNBZ2NHOXphWFJwYjI0NklDZGhZbk52YkhWMFpTY3NYRzRnSUNBZ0lDQWdJRzkyWlhKbWJHOTNPaUFuYUdsa1pHVnVKeXhjYmlBZ0lDQWdJQ0FnY0dGa1pHbHVaem9nTUN4Y2JpQWdJQ0FnSUNBZ2QyaHBkR1ZUY0dGalpUb2dKMjV2ZDNKaGNDY3NYRzRnSUNBZ0lDQjlmVnh1SUNBZ0lDQWdleTR1TG5CeWIzQnpmVnh1SUNBZ0lDOCtYRzRwTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCQk1URjVWR1Y0ZER0Y2JpSmRmUT09ICovXCJcbn07XG5cbnZhciBBMTF5VGV4dCA9IGZ1bmN0aW9uIEExMXlUZXh0KHByb3BzKSB7XG4gIHJldHVybiBqc3goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IF9yZWZcbiAgfSwgcHJvcHMpKTtcbn07XG5cbnZhciBEdW1teUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhEdW1teUlucHV0LCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBEdW1teUlucHV0KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEdW1teUlucHV0KTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoRHVtbXlJbnB1dCkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRHVtbXlJbnB1dCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaW5Qcm9wID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgICAgb3V0ID0gX3RoaXMkcHJvcHMub3V0LFxuICAgICAgICAgIG9uRXhpdGVkID0gX3RoaXMkcHJvcHMub25FeGl0ZWQsXG4gICAgICAgICAgYXBwZWFyID0gX3RoaXMkcHJvcHMuYXBwZWFyLFxuICAgICAgICAgIGVudGVyID0gX3RoaXMkcHJvcHMuZW50ZXIsXG4gICAgICAgICAgZXhpdCA9IF90aGlzJHByb3BzLmV4aXQsXG4gICAgICAgICAgaW5uZXJSZWYgPSBfdGhpcyRwcm9wcy5pbm5lclJlZixcbiAgICAgICAgICBlbW90aW9uID0gX3RoaXMkcHJvcHMuZW1vdGlvbixcbiAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgW1wiaW5cIiwgXCJvdXRcIiwgXCJvbkV4aXRlZFwiLCBcImFwcGVhclwiLCBcImVudGVyXCIsIFwiZXhpdFwiLCBcImlubmVyUmVmXCIsIFwiZW1vdGlvblwiXSk7XG5cbiAgICAgIHJldHVybiBqc3goXCJpbnB1dFwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogaW5uZXJSZWZcbiAgICAgIH0sIHByb3BzLCB7XG4gICAgICAgIGNzczpcbiAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICBfY3NzKHtcbiAgICAgICAgICBsYWJlbDogJ2R1bW15SW5wdXQnLFxuICAgICAgICAgIC8vIGdldCByaWQgb2YgYW55IGRlZmF1bHQgc3R5bGVzXG4gICAgICAgICAgYmFja2dyb3VuZDogMCxcbiAgICAgICAgICBib3JkZXI6IDAsXG4gICAgICAgICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICAgICAgICBvdXRsaW5lOiAwLFxuICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgLy8gaW1wb3J0YW50ISB3aXRob3V0IGB3aWR0aGAgYnJvd3NlcnMgd29uJ3QgYWxsb3cgZm9jdXNcbiAgICAgICAgICB3aWR0aDogMSxcbiAgICAgICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIGRlc2t0b3BcbiAgICAgICAgICBjb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIG1vYmlsZSB3aGlsc3QgbWFpbnRhaW5pbmcgXCJzY3JvbGwgaW50byB2aWV3XCIgYmVoYXZpb3VyXG4gICAgICAgICAgbGVmdDogLTEwMCxcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApJ1xuICAgICAgICB9LCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJa1IxYlcxNVNXNXdkWFF1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQldWRWlMQ0ptYVd4bElqb2lSSFZ0YlhsSmJuQjFkQzVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHZJRUJtYkc5M1hHNHZLaW9nUUdwemVDQnFjM2dnS2k5Y2JtbHRjRzl5ZENCN0lFTnZiWEJ2Ym1WdWRDQjlJR1p5YjIwZ0ozSmxZV04wSnp0Y2JtbHRjRzl5ZENCN0lHcHplQ0I5SUdaeWIyMGdKMEJsYlc5MGFXOXVMMk52Y21Vbk8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmpiR0Z6Y3lCRWRXMXRlVWx1Y0hWMElHVjRkR1Z1WkhNZ1EyOXRjRzl1Wlc1MFBHRnVlVDRnZTF4dUlDQnlaVzVrWlhJZ0tDa2dlMXh1SUNBZ0lHTnZibk4wSUhzZ2FXNDZJR2x1VUhKdmNDd2diM1YwTENCdmJrVjRhWFJsWkN3Z1lYQndaV0Z5TENCbGJuUmxjaXdnWlhocGRDd2dhVzV1WlhKU1pXWXNJR1Z0YjNScGIyNHNJQzR1TG5CeWIzQnpJSDBnUFNCMGFHbHpMbkJ5YjNCek8xeHVJQ0FnSUhKbGRIVnliaWhjYmlBZ0lDQWdJRHhwYm5CMWRGeHVJQ0FnSUNBZ0lDQnlaV1k5ZTJsdWJtVnlVbVZtZlZ4dUlDQWdJQ0FnSUNCN0xpNHVjSEp2Y0hOOVhHNGdJQ0FnSUNBZ0lHTnpjejE3ZTF4dUlDQWdJQ0FnSUNBZ0lHeGhZbVZzT2lBblpIVnRiWGxKYm5CMWRDY3NYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1oyVjBJSEpwWkNCdlppQmhibmtnWkdWbVlYVnNkQ0J6ZEhsc1pYTmNiaUFnSUNBZ0lDQWdJQ0JpWVdOclozSnZkVzVrT2lBd0xGeHVJQ0FnSUNBZ0lDQWdJR0p2Y21SbGNqb2dNQ3hjYmlBZ0lDQWdJQ0FnSUNCbWIyNTBVMmw2WlRvZ0oybHVhR1Z5YVhRbkxGeHVJQ0FnSUNBZ0lDQWdJRzkxZEd4cGJtVTZJREFzWEc0Z0lDQWdJQ0FnSUNBZ2NHRmtaR2x1WnpvZ01DeGNiaUFnSUNBZ0lDQWdJQ0F2THlCcGJYQnZjblJoYm5RaElIZHBkR2h2ZFhRZ1lIZHBaSFJvWUNCaWNtOTNjMlZ5Y3lCM2IyNG5kQ0JoYkd4dmR5Qm1iMk4xYzF4dUlDQWdJQ0FnSUNBZ0lIZHBaSFJvT2lBeExGeHVYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2NtVnRiM1psSUdOMWNuTnZjaUJ2YmlCa1pYTnJkRzl3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXNiM0k2SUNkMGNtRnVjM0JoY21WdWRDY3NYRzVjYmlBZ0lDQWdJQ0FnSUNBdkx5QnlaVzF2ZG1VZ1kzVnljMjl5SUc5dUlHMXZZbWxzWlNCM2FHbHNjM1FnYldGcGJuUmhhVzVwYm1jZ1hDSnpZM0p2Ykd3Z2FXNTBieUIyYVdWM1hDSWdZbVZvWVhacGIzVnlYRzRnSUNBZ0lDQWdJQ0FnYkdWbWREb2dMVEV3TUN4Y2JpQWdJQ0FnSUNBZ0lDQnZjR0ZqYVhSNU9pQXdMRnh1SUNBZ0lDQWdJQ0FnSUhCdmMybDBhVzl1T2lBbmNtVnNZWFJwZG1VbkxGeHVJQ0FnSUNBZ0lDQWdJSFJ5WVc1elptOXliVG9nSjNOallXeGxLREFwSnl4Y2JpQWdJQ0FnSUNBZ2ZYMWNiaUFnSUNBZ0lDOCtYRzRnSUNBZ0tUdGNiaUFnZlZ4dWZWeHVJbDE5ICovXCIpXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIER1bW15SW5wdXQ7XG59KENvbXBvbmVudCk7XG5cbnZhciBOb2RlUmVzb2x2ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKE5vZGVSZXNvbHZlciwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTm9kZVJlc29sdmVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOb2RlUmVzb2x2ZXIpO1xuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihOb2RlUmVzb2x2ZXIpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE5vZGVSZXNvbHZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLnByb3BzLmlubmVyUmVmKGZpbmRET01Ob2RlKHRoaXMpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnByb3BzLmlubmVyUmVmKG51bGwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE5vZGVSZXNvbHZlcjtcbn0oQ29tcG9uZW50KTtcblxudmFyIFNUWUxFX0tFWVMgPSBbJ2JveFNpemluZycsICdoZWlnaHQnLCAnb3ZlcmZsb3cnLCAncGFkZGluZ1JpZ2h0JywgJ3Bvc2l0aW9uJ107XG52YXIgTE9DS19TVFlMRVMgPSB7XG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAvLyBhY2NvdW50IGZvciBwb3NzaWJsZSBkZWNsYXJhdGlvbiBgd2lkdGg6IDEwMCU7YCBvbiBib2R5XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGhlaWdodDogJzEwMCUnXG59O1xuXG5mdW5jdGlvbiBwcmV2ZW50VG91Y2hNb3ZlKGUpIHtcbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xufVxuZnVuY3Rpb24gYWxsb3dUb3VjaE1vdmUoZSkge1xuICBlLnN0b3BQcm9wYWdhdGlvbigpO1xufVxuZnVuY3Rpb24gcHJldmVudEluZXJ0aWFTY3JvbGwoKSB7XG4gIHZhciB0b3AgPSB0aGlzLnNjcm9sbFRvcDtcbiAgdmFyIHRvdGFsU2Nyb2xsID0gdGhpcy5zY3JvbGxIZWlnaHQ7XG4gIHZhciBjdXJyZW50U2Nyb2xsID0gdG9wICsgdGhpcy5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKHRvcCA9PT0gMCkge1xuICAgIHRoaXMuc2Nyb2xsVG9wID0gMTtcbiAgfSBlbHNlIGlmIChjdXJyZW50U2Nyb2xsID09PSB0b3RhbFNjcm9sbCkge1xuICAgIHRoaXMuc2Nyb2xsVG9wID0gdG9wIC0gMTtcbiAgfVxufSAvLyBgb250b3VjaHN0YXJ0YCBjaGVjayB3b3JrcyBvbiBtb3N0IGJyb3dzZXJzXG4vLyBgbWF4VG91Y2hQb2ludHNgIHdvcmtzIG9uIElFMTAvMTEgYW5kIFN1cmZhY2VcblxuZnVuY3Rpb24gaXNUb3VjaERldmljZSgpIHtcbiAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM7XG59XG5cbnZhciBjYW5Vc2VET00gPSAhISh3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xudmFyIGFjdGl2ZVNjcm9sbExvY2tzID0gMDtcblxudmFyIFNjcm9sbExvY2sgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFNjcm9sbExvY2ssIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFNjcm9sbExvY2soKSB7XG4gICAgdmFyIF9nZXRQcm90b3R5cGVPZjI7XG5cbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2Nyb2xsTG9jayk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX2dldFByb3RvdHlwZU9mMiA9IF9nZXRQcm90b3R5cGVPZihTY3JvbGxMb2NrKSkuY2FsbC5hcHBseShfZ2V0UHJvdG90eXBlT2YyLCBbdGhpc10uY29uY2F0KGFyZ3MpKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib3JpZ2luYWxTdHlsZXNcIiwge30pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImxpc3RlbmVyT3B0aW9uc1wiLCB7XG4gICAgICBjYXB0dXJlOiBmYWxzZSxcbiAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU2Nyb2xsTG9jaywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKCFjYW5Vc2VET00pIHJldHVybjtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYWNjb3VudEZvclNjcm9sbGJhcnMgPSBfdGhpcyRwcm9wcy5hY2NvdW50Rm9yU2Nyb2xsYmFycyxcbiAgICAgICAgICB0b3VjaFNjcm9sbFRhcmdldCA9IF90aGlzJHByb3BzLnRvdWNoU2Nyb2xsVGFyZ2V0O1xuICAgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmJvZHk7XG4gICAgICB2YXIgdGFyZ2V0U3R5bGUgPSB0YXJnZXQgJiYgdGFyZ2V0LnN0eWxlO1xuXG4gICAgICBpZiAoYWNjb3VudEZvclNjcm9sbGJhcnMpIHtcbiAgICAgICAgLy8gc3RvcmUgYW55IHN0eWxlcyBhbHJlYWR5IGFwcGxpZWQgdG8gdGhlIGJvZHlcbiAgICAgICAgU1RZTEVfS0VZUy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICB2YXIgdmFsID0gdGFyZ2V0U3R5bGUgJiYgdGFyZ2V0U3R5bGVba2V5XTtcbiAgICAgICAgICBfdGhpczIub3JpZ2luYWxTdHlsZXNba2V5XSA9IHZhbDtcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIGFwcGx5IHRoZSBsb2NrIHN0eWxlcyBhbmQgcGFkZGluZyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBzY3JvbGwgbG9ja1xuXG5cbiAgICAgIGlmIChhY2NvdW50Rm9yU2Nyb2xsYmFycyAmJiBhY3RpdmVTY3JvbGxMb2NrcyA8IDEpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRQYWRkaW5nID0gcGFyc2VJbnQodGhpcy5vcmlnaW5hbFN0eWxlcy5wYWRkaW5nUmlnaHQsIDEwKSB8fCAwO1xuICAgICAgICB2YXIgY2xpZW50V2lkdGggPSBkb2N1bWVudC5ib2R5ID8gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA6IDA7XG4gICAgICAgIHZhciBhZGp1c3RlZFBhZGRpbmcgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGNsaWVudFdpZHRoICsgY3VycmVudFBhZGRpbmcgfHwgMDtcbiAgICAgICAgT2JqZWN0LmtleXMoTE9DS19TVFlMRVMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHZhciB2YWwgPSBMT0NLX1NUWUxFU1trZXldO1xuXG4gICAgICAgICAgaWYgKHRhcmdldFN0eWxlKSB7XG4gICAgICAgICAgICB0YXJnZXRTdHlsZVtrZXldID0gdmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRhcmdldFN0eWxlKSB7XG4gICAgICAgICAgdGFyZ2V0U3R5bGUucGFkZGluZ1JpZ2h0ID0gXCJcIi5jb25jYXQoYWRqdXN0ZWRQYWRkaW5nLCBcInB4XCIpO1xuICAgICAgICB9XG4gICAgICB9IC8vIGFjY291bnQgZm9yIHRvdWNoIGRldmljZXNcblxuXG4gICAgICBpZiAodGFyZ2V0ICYmIGlzVG91Y2hEZXZpY2UoKSkge1xuICAgICAgICAvLyBNb2JpbGUgU2FmYXJpIGlnbm9yZXMgeyBvdmVyZmxvdzogaGlkZGVuIH0gZGVjbGFyYXRpb24gb24gdGhlIGJvZHkuXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBwcmV2ZW50VG91Y2hNb3ZlLCB0aGlzLmxpc3RlbmVyT3B0aW9ucyk7IC8vIEFsbG93IHNjcm9sbCBvbiBwcm92aWRlZCB0YXJnZXRcblxuICAgICAgICBpZiAodG91Y2hTY3JvbGxUYXJnZXQpIHtcbiAgICAgICAgICB0b3VjaFNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgcHJldmVudEluZXJ0aWFTY3JvbGwsIHRoaXMubGlzdGVuZXJPcHRpb25zKTtcbiAgICAgICAgICB0b3VjaFNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBhbGxvd1RvdWNoTW92ZSwgdGhpcy5saXN0ZW5lck9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9IC8vIGluY3JlbWVudCBhY3RpdmUgc2Nyb2xsIGxvY2tzXG5cblxuICAgICAgYWN0aXZlU2Nyb2xsTG9ja3MgKz0gMTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKCFjYW5Vc2VET00pIHJldHVybjtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFjY291bnRGb3JTY3JvbGxiYXJzID0gX3RoaXMkcHJvcHMyLmFjY291bnRGb3JTY3JvbGxiYXJzLFxuICAgICAgICAgIHRvdWNoU2Nyb2xsVGFyZ2V0ID0gX3RoaXMkcHJvcHMyLnRvdWNoU2Nyb2xsVGFyZ2V0O1xuICAgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmJvZHk7XG4gICAgICB2YXIgdGFyZ2V0U3R5bGUgPSB0YXJnZXQgJiYgdGFyZ2V0LnN0eWxlOyAvLyBzYWZlbHkgZGVjcmVtZW50IGFjdGl2ZSBzY3JvbGwgbG9ja3NcblxuICAgICAgYWN0aXZlU2Nyb2xsTG9ja3MgPSBNYXRoLm1heChhY3RpdmVTY3JvbGxMb2NrcyAtIDEsIDApOyAvLyByZWFwcGx5IG9yaWdpbmFsIGJvZHkgc3R5bGVzLCBpZiBhbnlcblxuICAgICAgaWYgKGFjY291bnRGb3JTY3JvbGxiYXJzICYmIGFjdGl2ZVNjcm9sbExvY2tzIDwgMSkge1xuICAgICAgICBTVFlMRV9LRVlTLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHZhciB2YWwgPSBfdGhpczMub3JpZ2luYWxTdHlsZXNba2V5XTtcblxuICAgICAgICAgIGlmICh0YXJnZXRTdHlsZSkge1xuICAgICAgICAgICAgdGFyZ2V0U3R5bGVba2V5XSA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSAvLyByZW1vdmUgdG91Y2ggbGlzdGVuZXJzXG5cblxuICAgICAgaWYgKHRhcmdldCAmJiBpc1RvdWNoRGV2aWNlKCkpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHByZXZlbnRUb3VjaE1vdmUsIHRoaXMubGlzdGVuZXJPcHRpb25zKTtcblxuICAgICAgICBpZiAodG91Y2hTY3JvbGxUYXJnZXQpIHtcbiAgICAgICAgICB0b3VjaFNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgcHJldmVudEluZXJ0aWFTY3JvbGwsIHRoaXMubGlzdGVuZXJPcHRpb25zKTtcbiAgICAgICAgICB0b3VjaFNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBhbGxvd1RvdWNoTW92ZSwgdGhpcy5saXN0ZW5lck9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU2Nyb2xsTG9jaztcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KFNjcm9sbExvY2ssIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgYWNjb3VudEZvclNjcm9sbGJhcnM6IHRydWVcbn0pO1xuXG52YXIgX3JlZiQxID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFkc2JwY3BcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOmZpeGVkO2xlZnQ6MDtib3R0b206MDtyaWdodDowO3RvcDowO1wiXG59IDoge1xuICBuYW1lOiBcIjFkc2JwY3BcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOmZpeGVkO2xlZnQ6MDtib3R0b206MDtyaWdodDowO3RvcDowO1wiLFxuICBtYXA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWxOamNtOXNiRUpzYjJOckxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVFpFVlNJc0ltWnBiR1VpT2lKVFkzSnZiR3hDYkc5amF5NXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4dklFQm1iRzkzWEc0dktpb2dRR3B6ZUNCcWMzZ2dLaTljYm1sdGNHOXlkQ0I3SUZCMWNtVkRiMjF3YjI1bGJuUXNJSFI1Y0dVZ1JXeGxiV1Z1ZENCOUlHWnliMjBnSjNKbFlXTjBKenRjYm1sdGNHOXlkQ0I3SUdwemVDQjlJR1p5YjIwZ0owQmxiVzkwYVc5dUwyTnZjbVVuTzF4dWFXMXdiM0owSUU1dlpHVlNaWE52YkhabGNpQm1jbTl0SUNjdUwwNXZaR1ZTWlhOdmJIWmxjaWM3WEc1cGJYQnZjblFnVTJOeWIyeHNURzlqYXlCbWNtOXRJQ2N1TDFOamNtOXNiRXh2WTJzdmFXNWtaWGduTzF4dVhHNTBlWEJsSUZCeWIzQnpJRDBnZTF4dUlDQmphR2xzWkhKbGJqb2dSV3hsYldWdWREd3FQaXhjYmlBZ2FYTkZibUZpYkdWa09pQmliMjlzWldGdUxGeHVmVHRjYm5SNWNHVWdVM1JoZEdVZ1BTQjdYRzRnSUhSdmRXTm9VMk55YjJ4c1ZHRnlaMlYwT2lCSVZFMU1SV3hsYldWdWRDQjhJRzUxYkd3c1hHNTlPMXh1WEc0dkx5Qk9UMVJGT2x4dUx5OGdWMlVnYzJodmRXeGtiaWQwSUc1bFpXUWdkR2hwY3lCaFpuUmxjaUIxY0dSaGRHbHVaeUIwYnlCU1pXRmpkQ0IyTVRZdU15NHdMQ0IzYUdsamFDQnBiblJ5YjJSMVkyVnpPbHh1THk4Z0xTQmpjbVZoZEdWU1pXWW9LU0JvZEhSd2N6b3ZMM0psWVdOMGFuTXViM0puTDJSdlkzTXZjbVZoWTNRdFlYQnBMbWgwYld3amNtVmhZM1JqY21WaGRHVnlaV1pjYmk4dklDMGdabTl5ZDJGeVpGSmxaaWdwSUdoMGRIQnpPaTh2Y21WaFkzUnFjeTV2Y21jdlpHOWpjeTl5WldGamRDMWhjR2t1YUhSdGJDTnlaV0ZqZEdadmNuZGhjbVJ5WldaY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nVTJOeWIyeHNRbXh2WTJzZ1pYaDBaVzVrY3lCUWRYSmxRMjl0Y0c5dVpXNTBQRkJ5YjNCekxDQlRkR0YwWlQ0Z2UxeHVJQ0J6ZEdGMFpTQTlJSHNnZEc5MVkyaFRZM0p2Ykd4VVlYSm5aWFE2SUc1MWJHd2dmVHRjYmx4dUlDQXZMeUJ0ZFhOMElHSmxJR2x1SUhOMFlYUmxJSFJ2SUhSeWFXZG5aWElnWVNCeVpTMXlaVzVrWlhJc0lHOXViSGtnY25WdWN5QnZibU5sSUhCbGNpQnBibk4wWVc1alpWeHVJQ0JuWlhSVFkzSnZiR3hVWVhKblpYUWdQU0FvY21WbU9pQklWRTFNUld4bGJXVnVkQ2tnUFQ0Z2UxeHVJQ0FnSUdsbUlDaHlaV1lnUFQwOUlIUm9hWE11YzNSaGRHVXVkRzkxWTJoVFkzSnZiR3hVWVhKblpYUXBJSEpsZEhWeWJqdGNiaUFnSUNCMGFHbHpMbk5sZEZOMFlYUmxLSHNnZEc5MVkyaFRZM0p2Ykd4VVlYSm5aWFE2SUhKbFppQjlLVHRjYmlBZ2ZUdGNibHh1SUNBdkx5QjBhR2x6SUhkcGJHd2dZMnh2YzJVZ2RHaGxJRzFsYm5VZ2QyaGxiaUJoSUhWelpYSWdZMnhwWTJ0eklHOTFkSE5wWkdWY2JpQWdZbXgxY2xObGJHVmpkRWx1Y0hWMElEMGdLQ2tnUFQ0Z2UxeHVJQ0FnSUdsbUlDaGtiMk4xYldWdWRDNWhZM1JwZG1WRmJHVnRaVzUwS1NCN1hHNGdJQ0FnSUNCa2IyTjFiV1Z1ZEM1aFkzUnBkbVZGYkdWdFpXNTBMbUpzZFhJb0tUdGNiaUFnSUNCOVhHNGdJSDA3WEc1Y2JpQWdjbVZ1WkdWeUtDa2dlMXh1SUNBZ0lHTnZibk4wSUhzZ1kyaHBiR1J5Wlc0c0lHbHpSVzVoWW14bFpDQjlJRDBnZEdocGN5NXdjbTl3Y3p0Y2JpQWdJQ0JqYjI1emRDQjdJSFJ2ZFdOb1UyTnliMnhzVkdGeVoyVjBJSDBnUFNCMGFHbHpMbk4wWVhSbE8xeHVYRzRnSUNBZ0x5OGdZbUZwYkNCbFlYSnNlU0JwWmlCdWIzUWdaVzVoWW14bFpGeHVJQ0FnSUdsbUlDZ2hhWE5GYm1GaWJHVmtLU0J5WlhSMWNtNGdZMmhwYkdSeVpXNDdYRzVjYmlBZ0lDQXZLbHh1SUNBZ0lDQXFJRVJwZGx4dUlDQWdJQ0FxSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExWeHVJQ0FnSUNBcUlHSnNiMk5yY3lCelkzSnZiR3hwYm1jZ2IyNGdibTl1TFdKdlpIa2daV3hsYldWdWRITWdZbVZvYVc1a0lIUm9aU0J0Wlc1MVhHNWNiaUFnSUNBZ0tpQk9iMlJsVW1WemIyeDJaWEpjYmlBZ0lDQWdLaUF0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMxY2JpQWdJQ0FnS2lCM1pTQnVaV1ZrSUdFZ2NtVm1aWEpsYm1ObElIUnZJSFJvWlNCelkzSnZiR3hoWW14bElHVnNaVzFsYm5RZ2RHOGdYQ0oxYm14dlkydGNJaUJ6WTNKdmJHd2diMjVjYmlBZ0lDQWdLaUJ0YjJKcGJHVWdaR1YyYVdObGMxeHVYRzRnSUNBZ0lDb2dVMk55YjJ4c1RHOWphMXh1SUNBZ0lDQXFJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFZ4dUlDQWdJQ0FxSUdGamRIVmhiR3g1SUdSdlpYTWdkR2hsSUhOamNtOXNiQ0JzYjJOcmFXNW5YRzRnSUNBZ0lDb3ZYRzRnSUNBZ2NtVjBkWEp1SUNoY2JpQWdJQ0FnSUR4a2FYWStYRzRnSUNBZ0lDQWdJRHhrYVhaY2JpQWdJQ0FnSUNBZ0lDQnZia05zYVdOclBYdDBhR2x6TG1Kc2RYSlRaV3hsWTNSSmJuQjFkSDFjYmlBZ0lDQWdJQ0FnSUNCamMzTTllM3NnY0c5emFYUnBiMjQ2SUNkbWFYaGxaQ2NzSUd4bFpuUTZJREFzSUdKdmRIUnZiVG9nTUN3Z2NtbG5hSFE2SURBc0lIUnZjRG9nTUNCOWZWeHVJQ0FnSUNBZ0lDQXZQbHh1SUNBZ0lDQWdJQ0E4VG05a1pWSmxjMjlzZG1WeUlHbHVibVZ5VW1WbVBYdDBhR2x6TG1kbGRGTmpjbTlzYkZSaGNtZGxkSDArZTJOb2FXeGtjbVZ1ZlR3dlRtOWtaVkpsYzI5c2RtVnlQbHh1SUNBZ0lDQWdJQ0I3ZEc5MVkyaFRZM0p2Ykd4VVlYSm5aWFFnUHlBb1hHNGdJQ0FnSUNBZ0lDQWdQRk5qY205c2JFeHZZMnNnZEc5MVkyaFRZM0p2Ykd4VVlYSm5aWFE5ZTNSdmRXTm9VMk55YjJ4c1ZHRnlaMlYwZlNBdlBseHVJQ0FnSUNBZ0lDQXBJRG9nYm5Wc2JIMWNiaUFnSUNBZ0lEd3ZaR2wyUGx4dUlDQWdJQ2s3WEc0Z0lIMWNibjFjYmlKZGZRPT0gKi9cIlxufTtcblxuLy8gTk9URTpcbi8vIFdlIHNob3VsZG4ndCBuZWVkIHRoaXMgYWZ0ZXIgdXBkYXRpbmcgdG8gUmVhY3QgdjE2LjMuMCwgd2hpY2ggaW50cm9kdWNlczpcbi8vIC0gY3JlYXRlUmVmKCkgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y3JlYXRlcmVmXG4vLyAtIGZvcndhcmRSZWYoKSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3Rmb3J3YXJkcmVmXG52YXIgU2Nyb2xsQmxvY2sgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTY3JvbGxCbG9jaywgX1B1cmVDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFNjcm9sbEJsb2NrKCkge1xuICAgIHZhciBfZ2V0UHJvdG90eXBlT2YyO1xuXG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNjcm9sbEJsb2NrKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfZ2V0UHJvdG90eXBlT2YyID0gX2dldFByb3RvdHlwZU9mKFNjcm9sbEJsb2NrKSkuY2FsbC5hcHBseShfZ2V0UHJvdG90eXBlT2YyLCBbdGhpc10uY29uY2F0KGFyZ3MpKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwic3RhdGVcIiwge1xuICAgICAgdG91Y2hTY3JvbGxUYXJnZXQ6IG51bGxcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJnZXRTY3JvbGxUYXJnZXRcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgaWYgKHJlZiA9PT0gX3RoaXMuc3RhdGUudG91Y2hTY3JvbGxUYXJnZXQpIHJldHVybjtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB0b3VjaFNjcm9sbFRhcmdldDogcmVmXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJibHVyU2VsZWN0SW5wdXRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU2Nyb2xsQmxvY2ssIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgaXNFbmFibGVkID0gX3RoaXMkcHJvcHMuaXNFbmFibGVkO1xuICAgICAgdmFyIHRvdWNoU2Nyb2xsVGFyZ2V0ID0gdGhpcy5zdGF0ZS50b3VjaFNjcm9sbFRhcmdldDsgLy8gYmFpbCBlYXJseSBpZiBub3QgZW5hYmxlZFxuXG4gICAgICBpZiAoIWlzRW5hYmxlZCkgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgLypcbiAgICAgICAqIERpdlxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiBibG9ja3Mgc2Nyb2xsaW5nIG9uIG5vbi1ib2R5IGVsZW1lbnRzIGJlaGluZCB0aGUgbWVudVxuICAgICAgICAqIE5vZGVSZXNvbHZlclxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiB3ZSBuZWVkIGEgcmVmZXJlbmNlIHRvIHRoZSBzY3JvbGxhYmxlIGVsZW1lbnQgdG8gXCJ1bmxvY2tcIiBzY3JvbGwgb25cbiAgICAgICAqIG1vYmlsZSBkZXZpY2VzXG4gICAgICAgICogU2Nyb2xsTG9ja1xuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiBhY3R1YWxseSBkb2VzIHRoZSBzY3JvbGwgbG9ja2luZ1xuICAgICAgICovXG5cbiAgICAgIHJldHVybiBqc3goXCJkaXZcIiwgbnVsbCwganN4KFwiZGl2XCIsIHtcbiAgICAgICAgb25DbGljazogdGhpcy5ibHVyU2VsZWN0SW5wdXQsXG4gICAgICAgIGNzczogX3JlZiQxXG4gICAgICB9KSwganN4KE5vZGVSZXNvbHZlciwge1xuICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRTY3JvbGxUYXJnZXRcbiAgICAgIH0sIGNoaWxkcmVuKSwgdG91Y2hTY3JvbGxUYXJnZXQgPyBqc3goU2Nyb2xsTG9jaywge1xuICAgICAgICB0b3VjaFNjcm9sbFRhcmdldDogdG91Y2hTY3JvbGxUYXJnZXRcbiAgICAgIH0pIDogbnVsbCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNjcm9sbEJsb2NrO1xufShQdXJlQ29tcG9uZW50KTtcblxudmFyIFNjcm9sbENhcHRvciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU2Nyb2xsQ2FwdG9yLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTY3JvbGxDYXB0b3IoKSB7XG4gICAgdmFyIF9nZXRQcm90b3R5cGVPZjI7XG5cbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2Nyb2xsQ2FwdG9yKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfZ2V0UHJvdG90eXBlT2YyID0gX2dldFByb3RvdHlwZU9mKFNjcm9sbENhcHRvcikpLmNhbGwuYXBwbHkoX2dldFByb3RvdHlwZU9mMiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImlzQm90dG9tXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJpc1RvcFwiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwic2Nyb2xsVGFyZ2V0XCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwidG91Y2hTdGFydFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImNhbmNlbFNjcm9sbFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJoYW5kbGVFdmVudERlbHRhXCIsIGZ1bmN0aW9uIChldmVudCwgZGVsdGEpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQm90dG9tQXJyaXZlID0gX3RoaXMkcHJvcHMub25Cb3R0b21BcnJpdmUsXG4gICAgICAgICAgb25Cb3R0b21MZWF2ZSA9IF90aGlzJHByb3BzLm9uQm90dG9tTGVhdmUsXG4gICAgICAgICAgb25Ub3BBcnJpdmUgPSBfdGhpcyRwcm9wcy5vblRvcEFycml2ZSxcbiAgICAgICAgICBvblRvcExlYXZlID0gX3RoaXMkcHJvcHMub25Ub3BMZWF2ZTtcbiAgICAgIHZhciBfdGhpcyRzY3JvbGxUYXJnZXQgPSBfdGhpcy5zY3JvbGxUYXJnZXQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3RoaXMkc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBfdGhpcyRzY3JvbGxUYXJnZXQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgIGNsaWVudEhlaWdodCA9IF90aGlzJHNjcm9sbFRhcmdldC5jbGllbnRIZWlnaHQ7XG4gICAgICB2YXIgdGFyZ2V0ID0gX3RoaXMuc2Nyb2xsVGFyZ2V0O1xuICAgICAgdmFyIGlzRGVsdGFQb3NpdGl2ZSA9IGRlbHRhID4gMDtcbiAgICAgIHZhciBhdmFpbGFibGVTY3JvbGwgPSBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQgLSBzY3JvbGxUb3A7XG4gICAgICB2YXIgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gZmFsc2U7IC8vIHJlc2V0IGJvdHRvbS90b3AgZmxhZ3NcblxuICAgICAgaWYgKGF2YWlsYWJsZVNjcm9sbCA+IGRlbHRhICYmIF90aGlzLmlzQm90dG9tKSB7XG4gICAgICAgIGlmIChvbkJvdHRvbUxlYXZlKSBvbkJvdHRvbUxlYXZlKGV2ZW50KTtcbiAgICAgICAgX3RoaXMuaXNCb3R0b20gPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRGVsdGFQb3NpdGl2ZSAmJiBfdGhpcy5pc1RvcCkge1xuICAgICAgICBpZiAob25Ub3BMZWF2ZSkgb25Ub3BMZWF2ZShldmVudCk7XG4gICAgICAgIF90aGlzLmlzVG9wID0gZmFsc2U7XG4gICAgICB9IC8vIGJvdHRvbSBsaW1pdFxuXG5cbiAgICAgIGlmIChpc0RlbHRhUG9zaXRpdmUgJiYgZGVsdGEgPiBhdmFpbGFibGVTY3JvbGwpIHtcbiAgICAgICAgaWYgKG9uQm90dG9tQXJyaXZlICYmICFfdGhpcy5pc0JvdHRvbSkge1xuICAgICAgICAgIG9uQm90dG9tQXJyaXZlKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldC5zY3JvbGxUb3AgPSBzY3JvbGxIZWlnaHQ7XG4gICAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgICAgIF90aGlzLmlzQm90dG9tID0gdHJ1ZTsgLy8gdG9wIGxpbWl0XG4gICAgICB9IGVsc2UgaWYgKCFpc0RlbHRhUG9zaXRpdmUgJiYgLWRlbHRhID4gc2Nyb2xsVG9wKSB7XG4gICAgICAgIGlmIChvblRvcEFycml2ZSAmJiAhX3RoaXMuaXNUb3ApIHtcbiAgICAgICAgICBvblRvcEFycml2ZShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXQuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgX3RoaXMuaXNUb3AgPSB0cnVlO1xuICAgICAgfSAvLyBjYW5jZWwgc2Nyb2xsXG5cblxuICAgICAgaWYgKHNob3VsZENhbmNlbFNjcm9sbCkge1xuICAgICAgICBfdGhpcy5jYW5jZWxTY3JvbGwoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uV2hlZWxcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5oYW5kbGVFdmVudERlbHRhKGV2ZW50LCBldmVudC5kZWx0YVkpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uVG91Y2hTdGFydFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIHNldCB0b3VjaCBzdGFydCBzbyB3ZSBjYW4gY2FsY3VsYXRlIHRvdWNobW92ZSBkZWx0YVxuICAgICAgX3RoaXMudG91Y2hTdGFydCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25Ub3VjaE1vdmVcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgZGVsdGFZID0gX3RoaXMudG91Y2hTdGFydCAtIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG5cbiAgICAgIF90aGlzLmhhbmRsZUV2ZW50RGVsdGEoZXZlbnQsIGRlbHRhWSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiZ2V0U2Nyb2xsVGFyZ2V0XCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnNjcm9sbFRhcmdldCA9IHJlZjtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTY3JvbGxDYXB0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5zdGFydExpc3RlbmluZyh0aGlzLnNjcm9sbFRhcmdldCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKHRoaXMuc2Nyb2xsVGFyZ2V0KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RhcnRMaXN0ZW5pbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnRMaXN0ZW5pbmcoZWwpIHtcbiAgICAgIC8vIGJhaWwgZWFybHkgaWYgbm8gc2Nyb2xsIGF2YWlsYWJsZVxuICAgICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgICAgaWYgKGVsLnNjcm9sbEhlaWdodCA8PSBlbC5jbGllbnRIZWlnaHQpIHJldHVybjsgLy8gYWxsIHRoZSBpZiBzdGF0ZW1lbnRzIGFyZSB0byBhcHBlYXNlIEZsb3cg8J+YolxuXG4gICAgICBpZiAodHlwZW9mIGVsLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCB0aGlzLm9uV2hlZWwsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBlbC5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGVsLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzdG9wTGlzdGVuaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BMaXN0ZW5pbmcoZWwpIHtcbiAgICAgIC8vIGJhaWwgZWFybHkgaWYgbm8gc2Nyb2xsIGF2YWlsYWJsZVxuICAgICAgaWYgKGVsLnNjcm9sbEhlaWdodCA8PSBlbC5jbGllbnRIZWlnaHQpIHJldHVybjsgLy8gYWxsIHRoZSBpZiBzdGF0ZW1lbnRzIGFyZSB0byBhcHBlYXNlIEZsb3cg8J+YolxuXG4gICAgICBpZiAodHlwZW9mIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCB0aGlzLm9uV2hlZWwsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBlbC5yZW1vdmVFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTm9kZVJlc29sdmVyLCB7XG4gICAgICAgIGlubmVyUmVmOiB0aGlzLmdldFNjcm9sbFRhcmdldFxuICAgICAgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNjcm9sbENhcHRvcjtcbn0oQ29tcG9uZW50KTtcblxudmFyIFNjcm9sbENhcHRvclN3aXRjaCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcbiAgX2luaGVyaXRzKFNjcm9sbENhcHRvclN3aXRjaCwgX0NvbXBvbmVudDIpO1xuXG4gIGZ1bmN0aW9uIFNjcm9sbENhcHRvclN3aXRjaCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2Nyb2xsQ2FwdG9yU3dpdGNoKTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoU2Nyb2xsQ2FwdG9yU3dpdGNoKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTY3JvbGxDYXB0b3JTd2l0Y2gsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0VuYWJsZWQgPSBfdGhpcyRwcm9wczIuaXNFbmFibGVkLFxuICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgW1wiaXNFbmFibGVkXCJdKTtcblxuICAgICAgcmV0dXJuIGlzRW5hYmxlZCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2Nyb2xsQ2FwdG9yLCBwcm9wcykgOiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTY3JvbGxDYXB0b3JTd2l0Y2g7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShTY3JvbGxDYXB0b3JTd2l0Y2gsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgaXNFbmFibGVkOiB0cnVlXG59KTtcblxudmFyIGluc3RydWN0aW9uc0FyaWFNZXNzYWdlID0gZnVuY3Rpb24gaW5zdHJ1Y3Rpb25zQXJpYU1lc3NhZ2UoZXZlbnQpIHtcbiAgdmFyIGNvbnRleHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgaXNTZWFyY2hhYmxlID0gY29udGV4dC5pc1NlYXJjaGFibGUsXG4gICAgICBpc011bHRpID0gY29udGV4dC5pc011bHRpLFxuICAgICAgbGFiZWwgPSBjb250ZXh0LmxhYmVsLFxuICAgICAgaXNEaXNhYmxlZCA9IGNvbnRleHQuaXNEaXNhYmxlZDtcblxuICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgY2FzZSAnbWVudSc6XG4gICAgICByZXR1cm4gXCJVc2UgVXAgYW5kIERvd24gdG8gY2hvb3NlIG9wdGlvbnNcIi5jb25jYXQoaXNEaXNhYmxlZCA/ICcnIDogJywgcHJlc3MgRW50ZXIgdG8gc2VsZWN0IHRoZSBjdXJyZW50bHkgZm9jdXNlZCBvcHRpb24nLCBcIiwgcHJlc3MgRXNjYXBlIHRvIGV4aXQgdGhlIG1lbnUsIHByZXNzIFRhYiB0byBzZWxlY3QgdGhlIG9wdGlvbiBhbmQgZXhpdCB0aGUgbWVudS5cIik7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQobGFiZWwgPyBsYWJlbCA6ICdTZWxlY3QnLCBcIiBpcyBmb2N1c2VkIFwiKS5jb25jYXQoaXNTZWFyY2hhYmxlID8gJyx0eXBlIHRvIHJlZmluZSBsaXN0JyA6ICcnLCBcIiwgcHJlc3MgRG93biB0byBvcGVuIHRoZSBtZW51LCBcIikuY29uY2F0KGlzTXVsdGkgPyAnIHByZXNzIGxlZnQgdG8gZm9jdXMgc2VsZWN0ZWQgdmFsdWVzJyA6ICcnKTtcblxuICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgIHJldHVybiAnVXNlIGxlZnQgYW5kIHJpZ2h0IHRvIHRvZ2dsZSBiZXR3ZWVuIGZvY3VzZWQgdmFsdWVzLCBwcmVzcyBCYWNrc3BhY2UgdG8gcmVtb3ZlIHRoZSBjdXJyZW50bHkgZm9jdXNlZCB2YWx1ZSc7XG4gIH1cbn07XG52YXIgdmFsdWVFdmVudEFyaWFNZXNzYWdlID0gZnVuY3Rpb24gdmFsdWVFdmVudEFyaWFNZXNzYWdlKGV2ZW50LCBjb250ZXh0KSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHQudmFsdWUsXG4gICAgICBpc0Rpc2FibGVkID0gY29udGV4dC5pc0Rpc2FibGVkO1xuICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgc3dpdGNoIChldmVudCkge1xuICAgIGNhc2UgJ2Rlc2VsZWN0LW9wdGlvbic6XG4gICAgY2FzZSAncG9wLXZhbHVlJzpcbiAgICBjYXNlICdyZW1vdmUtdmFsdWUnOlxuICAgICAgcmV0dXJuIFwib3B0aW9uIFwiLmNvbmNhdCh2YWx1ZSwgXCIsIGRlc2VsZWN0ZWQuXCIpO1xuXG4gICAgY2FzZSAnc2VsZWN0LW9wdGlvbic6XG4gICAgICByZXR1cm4gaXNEaXNhYmxlZCA/IFwib3B0aW9uIFwiLmNvbmNhdCh2YWx1ZSwgXCIgaXMgZGlzYWJsZWQuIFNlbGVjdCBhbm90aGVyIG9wdGlvbi5cIikgOiBcIm9wdGlvbiBcIi5jb25jYXQodmFsdWUsIFwiLCBzZWxlY3RlZC5cIik7XG4gIH1cbn07XG52YXIgdmFsdWVGb2N1c0FyaWFNZXNzYWdlID0gZnVuY3Rpb24gdmFsdWVGb2N1c0FyaWFNZXNzYWdlKF9yZWYpIHtcbiAgdmFyIGZvY3VzZWRWYWx1ZSA9IF9yZWYuZm9jdXNlZFZhbHVlLFxuICAgICAgZ2V0T3B0aW9uTGFiZWwgPSBfcmVmLmdldE9wdGlvbkxhYmVsLFxuICAgICAgc2VsZWN0VmFsdWUgPSBfcmVmLnNlbGVjdFZhbHVlO1xuICByZXR1cm4gXCJ2YWx1ZSBcIi5jb25jYXQoZ2V0T3B0aW9uTGFiZWwoZm9jdXNlZFZhbHVlKSwgXCIgZm9jdXNlZCwgXCIpLmNvbmNhdChzZWxlY3RWYWx1ZS5pbmRleE9mKGZvY3VzZWRWYWx1ZSkgKyAxLCBcIiBvZiBcIikuY29uY2F0KHNlbGVjdFZhbHVlLmxlbmd0aCwgXCIuXCIpO1xufTtcbnZhciBvcHRpb25Gb2N1c0FyaWFNZXNzYWdlID0gZnVuY3Rpb24gb3B0aW9uRm9jdXNBcmlhTWVzc2FnZShfcmVmMikge1xuICB2YXIgZm9jdXNlZE9wdGlvbiA9IF9yZWYyLmZvY3VzZWRPcHRpb24sXG4gICAgICBnZXRPcHRpb25MYWJlbCA9IF9yZWYyLmdldE9wdGlvbkxhYmVsLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnM7XG4gIHJldHVybiBcIm9wdGlvbiBcIi5jb25jYXQoZ2V0T3B0aW9uTGFiZWwoZm9jdXNlZE9wdGlvbiksIFwiIGZvY3VzZWRcIikuY29uY2F0KGZvY3VzZWRPcHRpb24uaXNEaXNhYmxlZCA/ICcgZGlzYWJsZWQnIDogJycsIFwiLCBcIikuY29uY2F0KG9wdGlvbnMuaW5kZXhPZihmb2N1c2VkT3B0aW9uKSArIDEsIFwiIG9mIFwiKS5jb25jYXQob3B0aW9ucy5sZW5ndGgsIFwiLlwiKTtcbn07XG52YXIgcmVzdWx0c0FyaWFNZXNzYWdlID0gZnVuY3Rpb24gcmVzdWx0c0FyaWFNZXNzYWdlKF9yZWYzKSB7XG4gIHZhciBpbnB1dFZhbHVlID0gX3JlZjMuaW5wdXRWYWx1ZSxcbiAgICAgIHNjcmVlblJlYWRlck1lc3NhZ2UgPSBfcmVmMy5zY3JlZW5SZWFkZXJNZXNzYWdlO1xuICByZXR1cm4gXCJcIi5jb25jYXQoc2NyZWVuUmVhZGVyTWVzc2FnZSkuY29uY2F0KGlucHV0VmFsdWUgPyAnIGZvciBzZWFyY2ggdGVybSAnICsgaW5wdXRWYWx1ZSA6ICcnLCBcIi5cIik7XG59O1xuXG52YXIgZm9ybWF0R3JvdXBMYWJlbCA9IGZ1bmN0aW9uIGZvcm1hdEdyb3VwTGFiZWwoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLmxhYmVsO1xufTtcbnZhciBnZXRPcHRpb25MYWJlbCA9IGZ1bmN0aW9uIGdldE9wdGlvbkxhYmVsKG9wdGlvbikge1xuICByZXR1cm4gb3B0aW9uLmxhYmVsO1xufTtcbnZhciBnZXRPcHRpb25WYWx1ZSA9IGZ1bmN0aW9uIGdldE9wdGlvblZhbHVlKG9wdGlvbikge1xuICByZXR1cm4gb3B0aW9uLnZhbHVlO1xufTtcbnZhciBpc09wdGlvbkRpc2FibGVkID0gZnVuY3Rpb24gaXNPcHRpb25EaXNhYmxlZChvcHRpb24pIHtcbiAgcmV0dXJuICEhb3B0aW9uLmlzRGlzYWJsZWQ7XG59O1xuXG52YXIgZGVmYXVsdFN0eWxlcyA9IHtcbiAgY2xlYXJJbmRpY2F0b3I6IGNsZWFySW5kaWNhdG9yQ1NTLFxuICBjb250YWluZXI6IGNvbnRhaW5lckNTUyxcbiAgY29udHJvbDogY3NzLFxuICBkcm9wZG93bkluZGljYXRvcjogZHJvcGRvd25JbmRpY2F0b3JDU1MsXG4gIGdyb3VwOiBncm91cENTUyxcbiAgZ3JvdXBIZWFkaW5nOiBncm91cEhlYWRpbmdDU1MsXG4gIGluZGljYXRvcnNDb250YWluZXI6IGluZGljYXRvcnNDb250YWluZXJDU1MsXG4gIGluZGljYXRvclNlcGFyYXRvcjogaW5kaWNhdG9yU2VwYXJhdG9yQ1NTLFxuICBpbnB1dDogaW5wdXRDU1MsXG4gIGxvYWRpbmdJbmRpY2F0b3I6IGxvYWRpbmdJbmRpY2F0b3JDU1MsXG4gIGxvYWRpbmdNZXNzYWdlOiBsb2FkaW5nTWVzc2FnZUNTUyxcbiAgbWVudTogbWVudUNTUyxcbiAgbWVudUxpc3Q6IG1lbnVMaXN0Q1NTLFxuICBtZW51UG9ydGFsOiBtZW51UG9ydGFsQ1NTLFxuICBtdWx0aVZhbHVlOiBtdWx0aVZhbHVlQ1NTLFxuICBtdWx0aVZhbHVlTGFiZWw6IG11bHRpVmFsdWVMYWJlbENTUyxcbiAgbXVsdGlWYWx1ZVJlbW92ZTogbXVsdGlWYWx1ZVJlbW92ZUNTUyxcbiAgbm9PcHRpb25zTWVzc2FnZTogbm9PcHRpb25zTWVzc2FnZUNTUyxcbiAgb3B0aW9uOiBvcHRpb25DU1MsXG4gIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlckNTUyxcbiAgc2luZ2xlVmFsdWU6IGNzcyQxLFxuICB2YWx1ZUNvbnRhaW5lcjogdmFsdWVDb250YWluZXJDU1Ncbn07IC8vIE1lcmdlIFV0aWxpdHlcbi8vIEFsbG93cyBjb25zdW1lcnMgdG8gZXh0ZW5kIGEgYmFzZSBTZWxlY3Qgd2l0aCBhZGRpdGlvbmFsIHN0eWxlc1xuXG5mdW5jdGlvbiBtZXJnZVN0eWxlcyhzb3VyY2UpIHtcbiAgdmFyIHRhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgLy8gaW5pdGlhbGl6ZSB3aXRoIHNvdXJjZSBzdHlsZXNcbiAgdmFyIHN0eWxlcyA9IF9vYmplY3RTcHJlYWQoe30sIHNvdXJjZSk7IC8vIG1hc3NhZ2UgaW4gdGFyZ2V0IHN0eWxlc1xuXG5cbiAgT2JqZWN0LmtleXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoc291cmNlW2tleV0pIHtcbiAgICAgIHN0eWxlc1trZXldID0gZnVuY3Rpb24gKHJzQ3NzLCBwcm9wcykge1xuICAgICAgICByZXR1cm4gdGFyZ2V0W2tleV0oc291cmNlW2tleV0ocnNDc3MsIHByb3BzKSwgcHJvcHMpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzW2tleV0gPSB0YXJnZXRba2V5XTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3R5bGVzO1xufVxuXG52YXIgY29sb3JzID0ge1xuICBwcmltYXJ5OiAnIzI2ODRGRicsXG4gIHByaW1hcnk3NTogJyM0QzlBRkYnLFxuICBwcmltYXJ5NTA6ICcjQjJENEZGJyxcbiAgcHJpbWFyeTI1OiAnI0RFRUJGRicsXG4gIGRhbmdlcjogJyNERTM1MEInLFxuICBkYW5nZXJMaWdodDogJyNGRkJEQUQnLFxuICBuZXV0cmFsMDogJ2hzbCgwLCAwJSwgMTAwJSknLFxuICBuZXV0cmFsNTogJ2hzbCgwLCAwJSwgOTUlKScsXG4gIG5ldXRyYWwxMDogJ2hzbCgwLCAwJSwgOTAlKScsXG4gIG5ldXRyYWwyMDogJ2hzbCgwLCAwJSwgODAlKScsXG4gIG5ldXRyYWwzMDogJ2hzbCgwLCAwJSwgNzAlKScsXG4gIG5ldXRyYWw0MDogJ2hzbCgwLCAwJSwgNjAlKScsXG4gIG5ldXRyYWw1MDogJ2hzbCgwLCAwJSwgNTAlKScsXG4gIG5ldXRyYWw2MDogJ2hzbCgwLCAwJSwgNDAlKScsXG4gIG5ldXRyYWw3MDogJ2hzbCgwLCAwJSwgMzAlKScsXG4gIG5ldXRyYWw4MDogJ2hzbCgwLCAwJSwgMjAlKScsXG4gIG5ldXRyYWw5MDogJ2hzbCgwLCAwJSwgMTAlKSdcbn07XG52YXIgYm9yZGVyUmFkaXVzID0gNDsgLy8gVXNlZCB0byBjYWxjdWxhdGUgY29uc2lzdGVudCBtYXJnaW4vcGFkZGluZyBvbiBlbGVtZW50c1xuXG52YXIgYmFzZVVuaXQgPSA0OyAvLyBUaGUgbWluaW11bSBoZWlnaHQgb2YgdGhlIGNvbnRyb2xcblxudmFyIGNvbnRyb2xIZWlnaHQgPSAzODsgLy8gVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSBjb250cm9sIGFuZCBtZW51ICovXG5cbnZhciBtZW51R3V0dGVyID0gYmFzZVVuaXQgKiAyO1xudmFyIHNwYWNpbmcgPSB7XG4gIGJhc2VVbml0OiBiYXNlVW5pdCxcbiAgY29udHJvbEhlaWdodDogY29udHJvbEhlaWdodCxcbiAgbWVudUd1dHRlcjogbWVudUd1dHRlclxufTtcbnZhciBkZWZhdWx0VGhlbWUgPSB7XG4gIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzLFxuICBjb2xvcnM6IGNvbG9ycyxcbiAgc3BhY2luZzogc3BhY2luZ1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgYmFja3NwYWNlUmVtb3Zlc1ZhbHVlOiB0cnVlLFxuICBibHVySW5wdXRPblNlbGVjdDogaXNUb3VjaENhcGFibGUoKSxcbiAgY2FwdHVyZU1lbnVTY3JvbGw6ICFpc1RvdWNoQ2FwYWJsZSgpLFxuICBjbG9zZU1lbnVPblNlbGVjdDogdHJ1ZSxcbiAgY2xvc2VNZW51T25TY3JvbGw6IGZhbHNlLFxuICBjb21wb25lbnRzOiB7fSxcbiAgY29udHJvbFNob3VsZFJlbmRlclZhbHVlOiB0cnVlLFxuICBlc2NhcGVDbGVhcnNWYWx1ZTogZmFsc2UsXG4gIGZpbHRlck9wdGlvbjogY3JlYXRlRmlsdGVyKCksXG4gIGZvcm1hdEdyb3VwTGFiZWw6IGZvcm1hdEdyb3VwTGFiZWwsXG4gIGdldE9wdGlvbkxhYmVsOiBnZXRPcHRpb25MYWJlbCxcbiAgZ2V0T3B0aW9uVmFsdWU6IGdldE9wdGlvblZhbHVlLFxuICBpc0Rpc2FibGVkOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgaXNNdWx0aTogZmFsc2UsXG4gIGlzUnRsOiBmYWxzZSxcbiAgaXNTZWFyY2hhYmxlOiB0cnVlLFxuICBpc09wdGlvbkRpc2FibGVkOiBpc09wdGlvbkRpc2FibGVkLFxuICBsb2FkaW5nTWVzc2FnZTogZnVuY3Rpb24gbG9hZGluZ01lc3NhZ2UoKSB7XG4gICAgcmV0dXJuICdMb2FkaW5nLi4uJztcbiAgfSxcbiAgbWF4TWVudUhlaWdodDogMzAwLFxuICBtaW5NZW51SGVpZ2h0OiAxNDAsXG4gIG1lbnVJc09wZW46IGZhbHNlLFxuICBtZW51UGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbWVudVBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBtZW51U2hvdWxkQmxvY2tTY3JvbGw6IGZhbHNlLFxuICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXc6ICFpc01vYmlsZURldmljZSgpLFxuICBub09wdGlvbnNNZXNzYWdlOiBmdW5jdGlvbiBub09wdGlvbnNNZXNzYWdlKCkge1xuICAgIHJldHVybiAnTm8gb3B0aW9ucyc7XG4gIH0sXG4gIG9wZW5NZW51T25Gb2N1czogZmFsc2UsXG4gIG9wZW5NZW51T25DbGljazogdHJ1ZSxcbiAgb3B0aW9uczogW10sXG4gIHBhZ2VTaXplOiA1LFxuICBwbGFjZWhvbGRlcjogJ1NlbGVjdC4uLicsXG4gIHNjcmVlblJlYWRlclN0YXR1czogZnVuY3Rpb24gc2NyZWVuUmVhZGVyU3RhdHVzKF9yZWYpIHtcbiAgICB2YXIgY291bnQgPSBfcmVmLmNvdW50O1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChjb3VudCwgXCIgcmVzdWx0XCIpLmNvbmNhdChjb3VudCAhPT0gMSA/ICdzJyA6ICcnLCBcIiBhdmFpbGFibGVcIik7XG4gIH0sXG4gIHN0eWxlczoge30sXG4gIHRhYkluZGV4OiAnMCcsXG4gIHRhYlNlbGVjdHNWYWx1ZTogdHJ1ZVxufTtcbnZhciBpbnN0YW5jZUlkID0gMTtcblxudmFyIFNlbGVjdCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU2VsZWN0LCBfQ29tcG9uZW50KTtcblxuICAvLyBNaXNjLiBJbnN0YW5jZSBQcm9wZXJ0aWVzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBUT0RPXG4gIC8vIFJlZnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIExpZmVjeWNsZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZnVuY3Rpb24gU2VsZWN0KF9wcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTZWxlY3QpO1xuXG4gICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoU2VsZWN0KS5jYWxsKHRoaXMsIF9wcm9wcykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcInN0YXRlXCIsIHtcbiAgICAgIGFyaWFMaXZlU2VsZWN0aW9uOiAnJyxcbiAgICAgIGFyaWFMaXZlQ29udGV4dDogJycsXG4gICAgICBmb2N1c2VkT3B0aW9uOiBudWxsLFxuICAgICAgZm9jdXNlZFZhbHVlOiBudWxsLFxuICAgICAgaW5wdXRJc0hpZGRlbjogZmFsc2UsXG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgbWVudU9wdGlvbnM6IHtcbiAgICAgICAgcmVuZGVyOiBbXSxcbiAgICAgICAgZm9jdXNhYmxlOiBbXVxuICAgICAgfSxcbiAgICAgIHNlbGVjdFZhbHVlOiBbXVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImJsb2NrT3B0aW9uSG92ZXJcIiwgZmFsc2UpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImlzQ29tcG9zaW5nXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJjbGVhckZvY3VzVmFsdWVPblVwZGF0ZVwiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiY29tbW9uUHJvcHNcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJjb21wb25lbnRzXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiaGFzR3JvdXBzXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJpbml0aWFsVG91Y2hYXCIsIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImluaXRpYWxUb3VjaFlcIiwgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiaW5zdGFuY2VQcmVmaXhcIiwgJycpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9wZW5BZnRlckZvY3VzXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJzY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZVwiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwidXNlcklzRHJhZ2dpbmdcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJjb250cm9sUmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImdldENvbnRyb2xSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuY29udHJvbFJlZiA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJmb2N1c2VkT3B0aW9uUmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImdldEZvY3VzZWRPcHRpb25SZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuZm9jdXNlZE9wdGlvblJlZiA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJtZW51TGlzdFJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJnZXRNZW51TGlzdFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5tZW51TGlzdFJlZiA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJpbnB1dFJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJnZXRJbnB1dFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5pbnB1dFJlZiA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJjYWNoZUNvbXBvbmVudHNcIiwgZnVuY3Rpb24gKGNvbXBvbmVudHMpIHtcbiAgICAgIF90aGlzLmNvbXBvbmVudHMgPSBkZWZhdWx0Q29tcG9uZW50cyh7XG4gICAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudHNcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImZvY3VzXCIsIF90aGlzLmZvY3VzSW5wdXQpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImJsdXJcIiwgX3RoaXMuYmx1cklucHV0KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbkNoYW5nZVwiLCBmdW5jdGlvbiAobmV3VmFsdWUsIGFjdGlvbk1ldGEpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzLm5hbWU7XG4gICAgICBvbkNoYW5nZShuZXdWYWx1ZSwgX29iamVjdFNwcmVhZCh7fSwgYWN0aW9uTWV0YSwge1xuICAgICAgICBuYW1lOiBuYW1lXG4gICAgICB9KSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwic2V0VmFsdWVcIiwgZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnc2V0LXZhbHVlJztcbiAgICAgIHZhciBvcHRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbG9zZU1lbnVPblNlbGVjdCA9IF90aGlzJHByb3BzMi5jbG9zZU1lbnVPblNlbGVjdCxcbiAgICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHMyLmlzTXVsdGk7XG5cbiAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgYWN0aW9uOiAnc2V0LXZhbHVlJ1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChjbG9zZU1lbnVPblNlbGVjdCkge1xuICAgICAgICBfdGhpcy5pbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUgPSAhaXNNdWx0aTtcblxuICAgICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgfSAvLyB3aGVuIHRoZSBzZWxlY3QgdmFsdWUgc2hvdWxkIGNoYW5nZSwgd2Ugc2hvdWxkIHJlc2V0IGZvY3VzZWRWYWx1ZVxuXG5cbiAgICAgIF90aGlzLmNsZWFyRm9jdXNWYWx1ZU9uVXBkYXRlID0gdHJ1ZTtcblxuICAgICAgX3RoaXMub25DaGFuZ2UobmV3VmFsdWUsIHtcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIG9wdGlvbjogb3B0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJzZWxlY3RPcHRpb25cIiwgZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYmx1cklucHV0T25TZWxlY3QgPSBfdGhpcyRwcm9wczMuYmx1cklucHV0T25TZWxlY3QsXG4gICAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzMy5pc011bHRpO1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG5cbiAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgIGlmIChfdGhpcy5pc09wdGlvblNlbGVjdGVkKG5ld1ZhbHVlLCBzZWxlY3RWYWx1ZSkpIHtcbiAgICAgICAgICB2YXIgY2FuZGlkYXRlID0gX3RoaXMuZ2V0T3B0aW9uVmFsdWUobmV3VmFsdWUpO1xuXG4gICAgICAgICAgX3RoaXMuc2V0VmFsdWUoc2VsZWN0VmFsdWUuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuZ2V0T3B0aW9uVmFsdWUoaSkgIT09IGNhbmRpZGF0ZTtcbiAgICAgICAgICB9KSwgJ2Rlc2VsZWN0LW9wdGlvbicsIG5ld1ZhbHVlKTtcblxuICAgICAgICAgIF90aGlzLmFubm91bmNlQXJpYUxpdmVTZWxlY3Rpb24oe1xuICAgICAgICAgICAgZXZlbnQ6ICdkZXNlbGVjdC1vcHRpb24nLFxuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICB2YWx1ZTogX3RoaXMuZ2V0T3B0aW9uTGFiZWwobmV3VmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFfdGhpcy5pc09wdGlvbkRpc2FibGVkKG5ld1ZhbHVlLCBzZWxlY3RWYWx1ZSkpIHtcbiAgICAgICAgICAgIF90aGlzLnNldFZhbHVlKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoc2VsZWN0VmFsdWUpLCBbbmV3VmFsdWVdKSwgJ3NlbGVjdC1vcHRpb24nLCBuZXdWYWx1ZSk7XG5cbiAgICAgICAgICAgIF90aGlzLmFubm91bmNlQXJpYUxpdmVTZWxlY3Rpb24oe1xuICAgICAgICAgICAgICBldmVudDogJ3NlbGVjdC1vcHRpb24nLFxuICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IF90aGlzLmdldE9wdGlvbkxhYmVsKG5ld1ZhbHVlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYW5ub3VuY2UgdGhhdCBvcHRpb24gaXMgZGlzYWJsZWRcbiAgICAgICAgICAgIF90aGlzLmFubm91bmNlQXJpYUxpdmVTZWxlY3Rpb24oe1xuICAgICAgICAgICAgICBldmVudDogJ3NlbGVjdC1vcHRpb24nLFxuICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IF90aGlzLmdldE9wdGlvbkxhYmVsKG5ld1ZhbHVlKSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFfdGhpcy5pc09wdGlvbkRpc2FibGVkKG5ld1ZhbHVlLCBzZWxlY3RWYWx1ZSkpIHtcbiAgICAgICAgICBfdGhpcy5zZXRWYWx1ZShuZXdWYWx1ZSwgJ3NlbGVjdC1vcHRpb24nKTtcblxuICAgICAgICAgIF90aGlzLmFubm91bmNlQXJpYUxpdmVTZWxlY3Rpb24oe1xuICAgICAgICAgICAgZXZlbnQ6ICdzZWxlY3Qtb3B0aW9uJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IF90aGlzLmdldE9wdGlvbkxhYmVsKG5ld1ZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGFubm91bmNlIHRoYXQgb3B0aW9uIGlzIGRpc2FibGVkXG4gICAgICAgICAgX3RoaXMuYW5ub3VuY2VBcmlhTGl2ZVNlbGVjdGlvbih7XG4gICAgICAgICAgICBldmVudDogJ3NlbGVjdC1vcHRpb24nLFxuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICB2YWx1ZTogX3RoaXMuZ2V0T3B0aW9uTGFiZWwobmV3VmFsdWUpLFxuICAgICAgICAgICAgICBpc0Rpc2FibGVkOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJsdXJJbnB1dE9uU2VsZWN0KSB7XG4gICAgICAgIF90aGlzLmJsdXJJbnB1dCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcInJlbW92ZVZhbHVlXCIsIGZ1bmN0aW9uIChyZW1vdmVkVmFsdWUpIHtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuXG4gICAgICB2YXIgY2FuZGlkYXRlID0gX3RoaXMuZ2V0T3B0aW9uVmFsdWUocmVtb3ZlZFZhbHVlKTtcblxuICAgICAgdmFyIG5ld1ZhbHVlID0gc2VsZWN0VmFsdWUuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5nZXRPcHRpb25WYWx1ZShpKSAhPT0gY2FuZGlkYXRlO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlLmxlbmd0aCA/IG5ld1ZhbHVlIDogbnVsbCwge1xuICAgICAgICBhY3Rpb246ICdyZW1vdmUtdmFsdWUnLFxuICAgICAgICByZW1vdmVkVmFsdWU6IHJlbW92ZWRWYWx1ZVxuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLmFubm91bmNlQXJpYUxpdmVTZWxlY3Rpb24oe1xuICAgICAgICBldmVudDogJ3JlbW92ZS12YWx1ZScsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB2YWx1ZTogcmVtb3ZlZFZhbHVlID8gX3RoaXMuZ2V0T3B0aW9uTGFiZWwocmVtb3ZlZFZhbHVlKSA6ICcnXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiY2xlYXJWYWx1ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaXNNdWx0aSA9IF90aGlzLnByb3BzLmlzTXVsdGk7XG5cbiAgICAgIF90aGlzLm9uQ2hhbmdlKGlzTXVsdGkgPyBbXSA6IG51bGwsIHtcbiAgICAgICAgYWN0aW9uOiAnY2xlYXInXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJwb3BWYWx1ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2VsZWN0VmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIHZhciBsYXN0U2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdFZhbHVlW3NlbGVjdFZhbHVlLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIG5ld1ZhbHVlID0gc2VsZWN0VmFsdWUuc2xpY2UoMCwgc2VsZWN0VmFsdWUubGVuZ3RoIC0gMSk7XG5cbiAgICAgIF90aGlzLmFubm91bmNlQXJpYUxpdmVTZWxlY3Rpb24oe1xuICAgICAgICBldmVudDogJ3BvcC12YWx1ZScsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB2YWx1ZTogbGFzdFNlbGVjdGVkVmFsdWUgPyBfdGhpcy5nZXRPcHRpb25MYWJlbChsYXN0U2VsZWN0ZWRWYWx1ZSkgOiAnJ1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMub25DaGFuZ2UobmV3VmFsdWUubGVuZ3RoID8gbmV3VmFsdWUgOiBudWxsLCB7XG4gICAgICAgIGFjdGlvbjogJ3BvcC12YWx1ZScsXG4gICAgICAgIHJlbW92ZWRWYWx1ZTogbGFzdFNlbGVjdGVkVmFsdWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImdldE9wdGlvbkxhYmVsXCIsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMuZ2V0T3B0aW9uTGFiZWwoZGF0YSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiZ2V0T3B0aW9uVmFsdWVcIiwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5nZXRPcHRpb25WYWx1ZShkYXRhKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJnZXRTdHlsZXNcIiwgZnVuY3Rpb24gKGtleSwgcHJvcHMpIHtcbiAgICAgIHZhciBiYXNlID0gZGVmYXVsdFN0eWxlc1trZXldKHByb3BzKTtcbiAgICAgIGJhc2UuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgICAgdmFyIGN1c3RvbSA9IF90aGlzLnByb3BzLnN0eWxlc1trZXldO1xuICAgICAgcmV0dXJuIGN1c3RvbSA/IGN1c3RvbShiYXNlLCBwcm9wcykgOiBiYXNlO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImdldEVsZW1lbnRJZFwiLCBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KF90aGlzLmluc3RhbmNlUHJlZml4LCBcIi1cIikuY29uY2F0KGVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImdldEFjdGl2ZURlc2NlbmRlbnRJZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbWVudUlzT3BlbiA9IF90aGlzLnByb3BzLm1lbnVJc09wZW47XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSBfdGhpcy5zdGF0ZSxcbiAgICAgICAgICBtZW51T3B0aW9ucyA9IF90aGlzJHN0YXRlLm1lbnVPcHRpb25zLFxuICAgICAgICAgIGZvY3VzZWRPcHRpb24gPSBfdGhpcyRzdGF0ZS5mb2N1c2VkT3B0aW9uO1xuICAgICAgaWYgKCFmb2N1c2VkT3B0aW9uIHx8ICFtZW51SXNPcGVuKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgdmFyIGluZGV4ID0gbWVudU9wdGlvbnMuZm9jdXNhYmxlLmluZGV4T2YoZm9jdXNlZE9wdGlvbik7XG4gICAgICB2YXIgb3B0aW9uID0gbWVudU9wdGlvbnMucmVuZGVyW2luZGV4XTtcbiAgICAgIHJldHVybiBvcHRpb24gJiYgb3B0aW9uLmtleTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJhbm5vdW5jZUFyaWFMaXZlU2VsZWN0aW9uXCIsIGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgdmFyIGV2ZW50ID0gX3JlZjIuZXZlbnQsXG4gICAgICAgICAgY29udGV4dCA9IF9yZWYyLmNvbnRleHQ7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYXJpYUxpdmVTZWxlY3Rpb246IHZhbHVlRXZlbnRBcmlhTWVzc2FnZShldmVudCwgY29udGV4dClcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImFubm91bmNlQXJpYUxpdmVDb250ZXh0XCIsIGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgdmFyIGV2ZW50ID0gX3JlZjMuZXZlbnQsXG4gICAgICAgICAgY29udGV4dCA9IF9yZWYzLmNvbnRleHQ7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYXJpYUxpdmVDb250ZXh0OiBpbnN0cnVjdGlvbnNBcmlhTWVzc2FnZShldmVudCwgX29iamVjdFNwcmVhZCh7fSwgY29udGV4dCwge1xuICAgICAgICAgIGxhYmVsOiBfdGhpcy5wcm9wc1snYXJpYS1sYWJlbCddXG4gICAgICAgIH0pKVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25NZW51TW91c2VEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgX3RoaXMuZm9jdXNJbnB1dCgpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uTWVudU1vdXNlTW92ZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLmJsb2NrT3B0aW9uSG92ZXIgPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbkNvbnRyb2xNb3VzZURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgb3Blbk1lbnVPbkNsaWNrID0gX3RoaXMucHJvcHMub3Blbk1lbnVPbkNsaWNrO1xuXG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmlzRm9jdXNlZCkge1xuICAgICAgICBpZiAob3Blbk1lbnVPbkNsaWNrKSB7XG4gICAgICAgICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgfSBlbHNlIGlmICghX3RoaXMucHJvcHMubWVudUlzT3Blbikge1xuICAgICAgICBpZiAob3Blbk1lbnVPbkNsaWNrKSB7XG4gICAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vJEZsb3dGaXhNZVxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcpIHtcbiAgICAgICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9IC8vJEZsb3dGaXhNZVxuXG5cbiAgICAgIGlmIChldmVudC50YXJnZXQudGFnTmFtZSAhPT0gJ0lOUFVUJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uRHJvcGRvd25JbmRpY2F0b3JNb3VzZURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBpZ25vcmUgbW91c2UgZXZlbnRzIHRoYXQgd2VyZW4ndCB0cmlnZ2VyZWQgYnkgdGhlIHByaW1hcnkgYnV0dG9uXG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLnByb3BzLmlzRGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHM0LmlzTXVsdGksXG4gICAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzNC5tZW51SXNPcGVuO1xuXG4gICAgICBfdGhpcy5mb2N1c0lucHV0KCk7XG5cbiAgICAgIGlmIChtZW51SXNPcGVuKSB7XG4gICAgICAgIF90aGlzLmlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSA9ICFpc011bHRpO1xuXG4gICAgICAgIF90aGlzLm9uTWVudUNsb3NlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5vcGVuTWVudSgnZmlyc3QnKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uQ2xlYXJJbmRpY2F0b3JNb3VzZURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBpZ25vcmUgbW91c2UgZXZlbnRzIHRoYXQgd2VyZW4ndCB0cmlnZ2VyZWQgYnkgdGhlIHByaW1hcnkgYnV0dG9uXG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY2xlYXJWYWx1ZSgpO1xuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIF90aGlzLm9wZW5BZnRlckZvY3VzID0gZmFsc2U7XG5cbiAgICAgIGlmIChldmVudC50eXBlID09PSAndG91Y2hlbmQnKSB7XG4gICAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uU2Nyb2xsXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKHR5cGVvZiBfdGhpcy5wcm9wcy5jbG9zZU1lbnVPblNjcm9sbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBpc0RvY3VtZW50RWxlbWVudChldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgX3RoaXMucHJvcHMub25NZW51Q2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgX3RoaXMucHJvcHMuY2xvc2VNZW51T25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLmNsb3NlTWVudU9uU2Nyb2xsKGV2ZW50KSkge1xuICAgICAgICAgIF90aGlzLnByb3BzLm9uTWVudUNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbkNvbXBvc2l0aW9uU3RhcnRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuaXNDb21wb3NpbmcgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uQ29tcG9zaXRpb25FbmRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvblRvdWNoU3RhcnRcIiwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICB2YXIgdG91Y2hlcyA9IF9yZWY0LnRvdWNoZXM7XG4gICAgICB2YXIgdG91Y2ggPSB0b3VjaGVzLml0ZW0oMCk7XG5cbiAgICAgIGlmICghdG91Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5pbml0aWFsVG91Y2hYID0gdG91Y2guY2xpZW50WDtcbiAgICAgIF90aGlzLmluaXRpYWxUb3VjaFkgPSB0b3VjaC5jbGllbnRZO1xuICAgICAgX3RoaXMudXNlcklzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvblRvdWNoTW92ZVwiLCBmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgIHZhciB0b3VjaGVzID0gX3JlZjUudG91Y2hlcztcbiAgICAgIHZhciB0b3VjaCA9IHRvdWNoZXMuaXRlbSgwKTtcblxuICAgICAgaWYgKCF0b3VjaCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBkZWx0YVggPSBNYXRoLmFicyh0b3VjaC5jbGllbnRYIC0gX3RoaXMuaW5pdGlhbFRvdWNoWCk7XG4gICAgICB2YXIgZGVsdGFZID0gTWF0aC5hYnModG91Y2guY2xpZW50WSAtIF90aGlzLmluaXRpYWxUb3VjaFkpO1xuICAgICAgdmFyIG1vdmVUaHJlc2hvbGQgPSA1O1xuICAgICAgX3RoaXMudXNlcklzRHJhZ2dpbmcgPSBkZWx0YVggPiBtb3ZlVGhyZXNob2xkIHx8IGRlbHRhWSA+IG1vdmVUaHJlc2hvbGQ7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25Ub3VjaEVuZFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy51c2VySXNEcmFnZ2luZykgcmV0dXJuOyAvLyBjbG9zZSB0aGUgbWVudSBpZiB0aGUgdXNlciB0YXBzIG91dHNpZGVcbiAgICAgIC8vIHdlJ3JlIGNoZWNraW5nIG9uIGV2ZW50LnRhcmdldCBoZXJlIGluc3RlYWQgb2YgZXZlbnQuY3VycmVudFRhcmdldCwgYmVjYXVzZSB3ZSB3YW50IHRvIGFzc2VydCBpbmZvcm1hdGlvblxuICAgICAgLy8gb24gZXZlbnRzIG9uIGNoaWxkIGVsZW1lbnRzLCBub3QgdGhlIGRvY3VtZW50ICh3aGljaCB3ZSd2ZSBhdHRhY2hlZCB0aGlzIGhhbmRsZXIgdG8pLlxuXG4gICAgICBpZiAoX3RoaXMuY29udHJvbFJlZiAmJiAhX3RoaXMuY29udHJvbFJlZi5jb250YWlucyhldmVudC50YXJnZXQpICYmIF90aGlzLm1lbnVMaXN0UmVmICYmICFfdGhpcy5tZW51TGlzdFJlZi5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgIF90aGlzLmJsdXJJbnB1dCgpO1xuICAgICAgfSAvLyByZXNldCBtb3ZlIHZhcnNcblxuXG4gICAgICBfdGhpcy5pbml0aWFsVG91Y2hYID0gMDtcbiAgICAgIF90aGlzLmluaXRpYWxUb3VjaFkgPSAwO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uQ29udHJvbFRvdWNoRW5kXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnVzZXJJc0RyYWdnaW5nKSByZXR1cm47XG5cbiAgICAgIF90aGlzLm9uQ29udHJvbE1vdXNlRG93bihldmVudCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25DbGVhckluZGljYXRvclRvdWNoRW5kXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnVzZXJJc0RyYWdnaW5nKSByZXR1cm47XG5cbiAgICAgIF90aGlzLm9uQ2xlYXJJbmRpY2F0b3JNb3VzZURvd24oZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uRHJvcGRvd25JbmRpY2F0b3JUb3VjaEVuZFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy51c2VySXNEcmFnZ2luZykgcmV0dXJuO1xuXG4gICAgICBfdGhpcy5vbkRyb3Bkb3duSW5kaWNhdG9yTW91c2VEb3duKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJoYW5kbGVJbnB1dENoYW5nZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBpbnB1dFZhbHVlID0gZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgIF90aGlzLmlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgICBfdGhpcy5vbklucHV0Q2hhbmdlKGlucHV0VmFsdWUsIHtcbiAgICAgICAgYWN0aW9uOiAnaW5wdXQtY2hhbmdlJ1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLm9uTWVudU9wZW4oKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbklucHV0Rm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaXNTZWFyY2hhYmxlID0gX3RoaXMkcHJvcHM1LmlzU2VhcmNoYWJsZSxcbiAgICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHM1LmlzTXVsdGk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkZvY3VzKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRm9jdXMoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5pbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUgPSBmYWxzZTtcblxuICAgICAgX3RoaXMuYW5ub3VuY2VBcmlhTGl2ZUNvbnRleHQoe1xuICAgICAgICBldmVudDogJ2lucHV0JyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGlzU2VhcmNoYWJsZTogaXNTZWFyY2hhYmxlLFxuICAgICAgICAgIGlzTXVsdGk6IGlzTXVsdGlcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNGb2N1c2VkOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgaWYgKF90aGlzLm9wZW5BZnRlckZvY3VzIHx8IF90aGlzLnByb3BzLm9wZW5NZW51T25Gb2N1cykge1xuICAgICAgICBfdGhpcy5vcGVuTWVudSgnZmlyc3QnKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbklucHV0Qmx1clwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5tZW51TGlzdFJlZiAmJiBfdGhpcy5tZW51TGlzdFJlZi5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBfdGhpcy5pbnB1dFJlZi5mb2N1cygpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5vbklucHV0Q2hhbmdlKCcnLCB7XG4gICAgICAgIGFjdGlvbjogJ2lucHV0LWJsdXInXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMub25NZW51Q2xvc2UoKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkVmFsdWU6IG51bGwsXG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uT3B0aW9uSG92ZXJcIiwgZnVuY3Rpb24gKGZvY3VzZWRPcHRpb24pIHtcbiAgICAgIGlmIChfdGhpcy5ibG9ja09wdGlvbkhvdmVyIHx8IF90aGlzLnN0YXRlLmZvY3VzZWRPcHRpb24gPT09IGZvY3VzZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZvY3VzZWRPcHRpb246IGZvY3VzZWRPcHRpb25cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcInNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGhpZGVTZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczYuaGlkZVNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHM2LmlzTXVsdGk7XG4gICAgICBpZiAoaGlkZVNlbGVjdGVkT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gaXNNdWx0aTtcbiAgICAgIHJldHVybiBoaWRlU2VsZWN0ZWRPcHRpb25zO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHM3LmlzTXVsdGksXG4gICAgICAgICAgYmFja3NwYWNlUmVtb3Zlc1ZhbHVlID0gX3RoaXMkcHJvcHM3LmJhY2tzcGFjZVJlbW92ZXNWYWx1ZSxcbiAgICAgICAgICBlc2NhcGVDbGVhcnNWYWx1ZSA9IF90aGlzJHByb3BzNy5lc2NhcGVDbGVhcnNWYWx1ZSxcbiAgICAgICAgICBpbnB1dFZhbHVlID0gX3RoaXMkcHJvcHM3LmlucHV0VmFsdWUsXG4gICAgICAgICAgaXNDbGVhcmFibGUgPSBfdGhpcyRwcm9wczcuaXNDbGVhcmFibGUsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzNy5pc0Rpc2FibGVkLFxuICAgICAgICAgIG1lbnVJc09wZW4gPSBfdGhpcyRwcm9wczcubWVudUlzT3BlbixcbiAgICAgICAgICBvbktleURvd24gPSBfdGhpcyRwcm9wczcub25LZXlEb3duLFxuICAgICAgICAgIHRhYlNlbGVjdHNWYWx1ZSA9IF90aGlzJHByb3BzNy50YWJTZWxlY3RzVmFsdWUsXG4gICAgICAgICAgb3Blbk1lbnVPbkZvY3VzID0gX3RoaXMkcHJvcHM3Lm9wZW5NZW51T25Gb2N1cztcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSBfdGhpcy5zdGF0ZSxcbiAgICAgICAgICBmb2N1c2VkT3B0aW9uID0gX3RoaXMkc3RhdGUyLmZvY3VzZWRPcHRpb24sXG4gICAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGUyLmZvY3VzZWRWYWx1ZSxcbiAgICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlMi5zZWxlY3RWYWx1ZTtcbiAgICAgIGlmIChpc0Rpc2FibGVkKSByZXR1cm47XG5cbiAgICAgIGlmICh0eXBlb2Ygb25LZXlEb3duID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9uS2V5RG93bihldmVudCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQmxvY2sgb3B0aW9uIGhvdmVyIGV2ZW50cyB3aGVuIHRoZSB1c2VyIGhhcyBqdXN0IHByZXNzZWQgYSBrZXlcblxuXG4gICAgICBfdGhpcy5ibG9ja09wdGlvbkhvdmVyID0gdHJ1ZTtcblxuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICBpZiAoIWlzTXVsdGkgfHwgaW5wdXRWYWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgICAgX3RoaXMuZm9jdXNWYWx1ZSgncHJldmlvdXMnKTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgIGlmICghaXNNdWx0aSB8fCBpbnB1dFZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgICBfdGhpcy5mb2N1c1ZhbHVlKCduZXh0Jyk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgICAgIGlmIChpbnB1dFZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAoZm9jdXNlZFZhbHVlKSB7XG4gICAgICAgICAgICBfdGhpcy5yZW1vdmVWYWx1ZShmb2N1c2VkVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWJhY2tzcGFjZVJlbW92ZXNWYWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICAgICAgICBfdGhpcy5wb3BWYWx1ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NsZWFyYWJsZSkge1xuICAgICAgICAgICAgICBfdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICBpZiAoX3RoaXMuaXNDb21wb3NpbmcpIHJldHVybjtcblxuICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSB8fCAhbWVudUlzT3BlbiB8fCAhdGFiU2VsZWN0c1ZhbHVlIHx8ICFmb2N1c2VkT3B0aW9uIHx8IC8vIGRvbid0IGNhcHR1cmUgdGhlIGV2ZW50IGlmIHRoZSBtZW51IG9wZW5zIG9uIGZvY3VzIGFuZCB0aGUgZm9jdXNlZFxuICAgICAgICAgIC8vIG9wdGlvbiBpcyBhbHJlYWR5IHNlbGVjdGVkOyBpdCBicmVha3MgdGhlIGZsb3cgb2YgbmF2aWdhdGlvblxuICAgICAgICAgIG9wZW5NZW51T25Gb2N1cyAmJiBfdGhpcy5pc09wdGlvblNlbGVjdGVkKGZvY3VzZWRPcHRpb24sIHNlbGVjdFZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzLnNlbGVjdE9wdGlvbihmb2N1c2VkT3B0aW9uKTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjI5KSB7XG4gICAgICAgICAgICAvLyBpZ25vcmUgdGhlIGtleWRvd24gZXZlbnQgZnJvbSBhbiBJbnB1dCBNZXRob2QgRWRpdG9yKElNRSlcbiAgICAgICAgICAgIC8vIHJlZi4gaHR0cHM6Ly93d3cudzMub3JnL1RSL3VpZXZlbnRzLyNkZXRlcm1pbmUta2V5ZG93bi1rZXl1cC1rZXlDb2RlXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgaWYgKCFmb2N1c2VkT3B0aW9uKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoX3RoaXMuaXNDb21wb3NpbmcpIHJldHVybjtcblxuICAgICAgICAgICAgX3RoaXMuc2VsZWN0T3B0aW9uKGZvY3VzZWRPcHRpb24pO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMuaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgICAgICAgYWN0aW9uOiAnbWVudS1jbG9zZSdcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNDbGVhcmFibGUgJiYgZXNjYXBlQ2xlYXJzVmFsdWUpIHtcbiAgICAgICAgICAgIF90aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAvLyBzcGFjZVxuICAgICAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFtZW51SXNPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuTWVudSgnZmlyc3QnKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFmb2N1c2VkT3B0aW9uKSByZXR1cm47XG5cbiAgICAgICAgICBfdGhpcy5zZWxlY3RPcHRpb24oZm9jdXNlZE9wdGlvbik7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMuZm9jdXNPcHRpb24oJ3VwJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5NZW51KCdsYXN0Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMuZm9jdXNPcHRpb24oJ2Rvd24nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybjtcblxuICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdwYWdldXAnKTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybjtcblxuICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdwYWdlZG93bicpO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgICAgaWYgKCFtZW51SXNPcGVuKSByZXR1cm47XG5cbiAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbignZmlyc3QnKTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgICAgaWYgKCFtZW51SXNPcGVuKSByZXR1cm47XG5cbiAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbignbGFzdCcpO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSk7XG5cbiAgICB2YXIgdmFsdWUgPSBfcHJvcHMudmFsdWU7XG4gICAgX3RoaXMuY2FjaGVDb21wb25lbnRzID0gbWVtb2l6ZU9uZShfdGhpcy5jYWNoZUNvbXBvbmVudHMsIGV4cG9ydGVkRXF1YWwpLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSkpO1xuXG4gICAgX3RoaXMuY2FjaGVDb21wb25lbnRzKF9wcm9wcy5jb21wb25lbnRzKTtcblxuICAgIF90aGlzLmluc3RhbmNlUHJlZml4ID0gJ3JlYWN0LXNlbGVjdC0nICsgKF90aGlzLnByb3BzLmluc3RhbmNlSWQgfHwgKytpbnN0YW5jZUlkKTtcblxuICAgIHZhciBfc2VsZWN0VmFsdWUgPSBjbGVhblZhbHVlKHZhbHVlKTtcblxuICAgIHZhciBfbWVudU9wdGlvbnMgPSBfcHJvcHMubWVudUlzT3BlbiA/IF90aGlzLmJ1aWxkTWVudU9wdGlvbnMoX3Byb3BzLCBfc2VsZWN0VmFsdWUpIDoge1xuICAgICAgcmVuZGVyOiBbXSxcbiAgICAgIGZvY3VzYWJsZTogW11cbiAgICB9O1xuXG4gICAgX3RoaXMuc3RhdGUubWVudU9wdGlvbnMgPSBfbWVudU9wdGlvbnM7XG4gICAgX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWUgPSBfc2VsZWN0VmFsdWU7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFNlbGVjdCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLnN0YXJ0TGlzdGVuaW5nQ29tcG9zaXRpb24oKTtcbiAgICAgIHRoaXMuc3RhcnRMaXN0ZW5pbmdUb1RvdWNoKCk7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmNsb3NlTWVudU9uU2Nyb2xsICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgLy8gTGlzdGVuIHRvIGFsbCBzY3JvbGwgZXZlbnRzLCBhbmQgZmlsdGVyIHRoZW0gb3V0IGluc2lkZSBvZiAnb25TY3JvbGwnXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5hdXRvRm9jdXMpIHtcbiAgICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczgub3B0aW9ucyxcbiAgICAgICAgICB2YWx1ZSA9IF90aGlzJHByb3BzOC52YWx1ZSxcbiAgICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM4Lm1lbnVJc09wZW4sXG4gICAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzOC5pbnB1dFZhbHVlOyAvLyByZS1jYWNoZSBjdXN0b20gY29tcG9uZW50c1xuXG4gICAgICB0aGlzLmNhY2hlQ29tcG9uZW50cyhuZXh0UHJvcHMuY29tcG9uZW50cyk7IC8vIHJlYnVpbGQgdGhlIG1lbnUgb3B0aW9uc1xuXG4gICAgICBpZiAobmV4dFByb3BzLnZhbHVlICE9PSB2YWx1ZSB8fCBuZXh0UHJvcHMub3B0aW9ucyAhPT0gb3B0aW9ucyB8fCBuZXh0UHJvcHMubWVudUlzT3BlbiAhPT0gbWVudUlzT3BlbiB8fCBuZXh0UHJvcHMuaW5wdXRWYWx1ZSAhPT0gaW5wdXRWYWx1ZSkge1xuICAgICAgICB2YXIgc2VsZWN0VmFsdWUgPSBjbGVhblZhbHVlKG5leHRQcm9wcy52YWx1ZSk7XG4gICAgICAgIHZhciBtZW51T3B0aW9ucyA9IG5leHRQcm9wcy5tZW51SXNPcGVuID8gdGhpcy5idWlsZE1lbnVPcHRpb25zKG5leHRQcm9wcywgc2VsZWN0VmFsdWUpIDoge1xuICAgICAgICAgIHJlbmRlcjogW10sXG4gICAgICAgICAgZm9jdXNhYmxlOiBbXVxuICAgICAgICB9O1xuICAgICAgICB2YXIgZm9jdXNlZFZhbHVlID0gdGhpcy5nZXROZXh0Rm9jdXNlZFZhbHVlKHNlbGVjdFZhbHVlKTtcbiAgICAgICAgdmFyIGZvY3VzZWRPcHRpb24gPSB0aGlzLmdldE5leHRGb2N1c2VkT3B0aW9uKG1lbnVPcHRpb25zLmZvY3VzYWJsZSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIG1lbnVPcHRpb25zOiBtZW51T3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWUsXG4gICAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgICBmb2N1c2VkVmFsdWU6IGZvY3VzZWRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gc29tZSB1cGRhdGVzIHNob3VsZCB0b2dnbGUgdGhlIHN0YXRlIG9mIHRoZSBpbnB1dCB2aXNpYmlsaXR5XG5cblxuICAgICAgaWYgKHRoaXMuaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5wdXRJc0hpZGRlbjogdGhpcy5pbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGVcbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczkuaXNEaXNhYmxlZCxcbiAgICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM5Lm1lbnVJc09wZW47XG4gICAgICB2YXIgaXNGb2N1c2VkID0gdGhpcy5zdGF0ZS5pc0ZvY3VzZWQ7XG5cbiAgICAgIGlmICggLy8gZW5zdXJlIGZvY3VzIGlzIHJlc3RvcmVkIGNvcnJlY3RseSB3aGVuIHRoZSBjb250cm9sIGJlY29tZXMgZW5hYmxlZFxuICAgICAgaXNGb2N1c2VkICYmICFpc0Rpc2FibGVkICYmIHByZXZQcm9wcy5pc0Rpc2FibGVkIHx8IC8vIGVuc3VyZSBmb2N1cyBpcyBvbiB0aGUgSW5wdXQgd2hlbiB0aGUgbWVudSBvcGVuc1xuICAgICAgaXNGb2N1c2VkICYmIG1lbnVJc09wZW4gJiYgIXByZXZQcm9wcy5tZW51SXNPcGVuKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgfSAvLyBzY3JvbGwgdGhlIGZvY3VzZWQgb3B0aW9uIGludG8gdmlldyBpZiBuZWNlc3NhcnlcblxuXG4gICAgICBpZiAodGhpcy5tZW51TGlzdFJlZiAmJiB0aGlzLmZvY3VzZWRPcHRpb25SZWYgJiYgdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSkge1xuICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLm1lbnVMaXN0UmVmLCB0aGlzLmZvY3VzZWRPcHRpb25SZWYpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nQ29tcG9zaXRpb24oKTtcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZ1RvVG91Y2goKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbk1lbnVPcGVuXCIsXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQ29uc3VtZXIgSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICB2YWx1ZTogZnVuY3Rpb24gb25NZW51T3BlbigpIHtcbiAgICAgIHRoaXMucHJvcHMub25NZW51T3BlbigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbk1lbnVDbG9zZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbk1lbnVDbG9zZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczEwID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc1NlYXJjaGFibGUgPSBfdGhpcyRwcm9wczEwLmlzU2VhcmNoYWJsZSxcbiAgICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHMxMC5pc011bHRpO1xuICAgICAgdGhpcy5hbm5vdW5jZUFyaWFMaXZlQ29udGV4dCh7XG4gICAgICAgIGV2ZW50OiAnaW5wdXQnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgaXNTZWFyY2hhYmxlOiBpc1NlYXJjaGFibGUsXG4gICAgICAgICAgaXNNdWx0aTogaXNNdWx0aVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMub25JbnB1dENoYW5nZSgnJywge1xuICAgICAgICBhY3Rpb246ICdtZW51LWNsb3NlJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLnByb3BzLm9uTWVudUNsb3NlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uSW5wdXRDaGFuZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25JbnB1dENoYW5nZShuZXdWYWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgICAgdGhpcy5wcm9wcy5vbklucHV0Q2hhbmdlKG5ld1ZhbHVlLCBhY3Rpb25NZXRhKTtcbiAgICB9IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE1ldGhvZHNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB9LCB7XG4gICAga2V5OiBcImZvY3VzSW5wdXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNJbnB1dCgpIHtcbiAgICAgIGlmICghdGhpcy5pbnB1dFJlZikgcmV0dXJuO1xuICAgICAgdGhpcy5pbnB1dFJlZi5mb2N1cygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJibHVySW5wdXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYmx1cklucHV0KCkge1xuICAgICAgaWYgKCF0aGlzLmlucHV0UmVmKSByZXR1cm47XG4gICAgICB0aGlzLmlucHV0UmVmLmJsdXIoKTtcbiAgICB9IC8vIGFsaWFzZWQgZm9yIGNvbnN1bWVyc1xuXG4gIH0sIHtcbiAgICBrZXk6IFwib3Blbk1lbnVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb3Blbk1lbnUoZm9jdXNPcHRpb24pIHtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIG1lbnVPcHRpb25zID0gX3RoaXMkc3RhdGUzLm1lbnVPcHRpb25zLFxuICAgICAgICAgIHNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGUzLnNlbGVjdFZhbHVlLFxuICAgICAgICAgIGlzRm9jdXNlZCA9IF90aGlzJHN0YXRlMy5pc0ZvY3VzZWQ7XG4gICAgICB2YXIgaXNNdWx0aSA9IHRoaXMucHJvcHMuaXNNdWx0aTtcbiAgICAgIHZhciBvcGVuQXRJbmRleCA9IGZvY3VzT3B0aW9uID09PSAnZmlyc3QnID8gMCA6IG1lbnVPcHRpb25zLmZvY3VzYWJsZS5sZW5ndGggLSAxO1xuXG4gICAgICBpZiAoIWlzTXVsdGkpIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBtZW51T3B0aW9ucy5mb2N1c2FibGUuaW5kZXhPZihzZWxlY3RWYWx1ZVswXSk7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPiAtMSkge1xuICAgICAgICAgIG9wZW5BdEluZGV4ID0gc2VsZWN0ZWRJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBvbmx5IHNjcm9sbCBpZiB0aGUgbWVudSBpc24ndCBhbHJlYWR5IG9wZW5cblxuXG4gICAgICB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gIShpc0ZvY3VzZWQgJiYgdGhpcy5tZW51TGlzdFJlZik7XG4gICAgICB0aGlzLmlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5vbk1lbnVPcGVuKCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBudWxsLFxuICAgICAgICBmb2N1c2VkT3B0aW9uOiBtZW51T3B0aW9ucy5mb2N1c2FibGVbb3BlbkF0SW5kZXhdXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYW5ub3VuY2VBcmlhTGl2ZUNvbnRleHQoe1xuICAgICAgICBldmVudDogJ21lbnUnXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9jdXNWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb2N1c1ZhbHVlKGRpcmVjdGlvbikge1xuICAgICAgdmFyIF90aGlzJHByb3BzMTEgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczExLmlzTXVsdGksXG4gICAgICAgICAgaXNTZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMxMS5pc1NlYXJjaGFibGU7XG4gICAgICB2YXIgX3RoaXMkc3RhdGU0ID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlNC5zZWxlY3RWYWx1ZSxcbiAgICAgICAgICBmb2N1c2VkVmFsdWUgPSBfdGhpcyRzdGF0ZTQuZm9jdXNlZFZhbHVlOyAvLyBPbmx5IG11bHRpc2VsZWN0cyBzdXBwb3J0IHZhbHVlIGZvY3VzaW5nXG5cbiAgICAgIGlmICghaXNNdWx0aSkgcmV0dXJuO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZvY3VzZWRPcHRpb246IG51bGxcbiAgICAgIH0pO1xuICAgICAgdmFyIGZvY3VzZWRJbmRleCA9IHNlbGVjdFZhbHVlLmluZGV4T2YoZm9jdXNlZFZhbHVlKTtcblxuICAgICAgaWYgKCFmb2N1c2VkVmFsdWUpIHtcbiAgICAgICAgZm9jdXNlZEluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuYW5ub3VuY2VBcmlhTGl2ZUNvbnRleHQoe1xuICAgICAgICAgIGV2ZW50OiAndmFsdWUnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGFzdEluZGV4ID0gc2VsZWN0VmFsdWUubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBuZXh0Rm9jdXMgPSAtMTtcbiAgICAgIGlmICghc2VsZWN0VmFsdWUubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3ByZXZpb3VzJzpcbiAgICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBkb24ndCBjeWNsZSBmcm9tIHRoZSBzdGFydCB0byB0aGUgZW5kXG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSAwO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm9jdXNlZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gaWYgbm90aGluZyBpcyBmb2N1c2VkLCBmb2N1cyB0aGUgbGFzdCB2YWx1ZSBmaXJzdFxuICAgICAgICAgICAgbmV4dEZvY3VzID0gbGFzdEluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggLSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICAgIGlmIChmb2N1c2VkSW5kZXggPiAtMSAmJiBmb2N1c2VkSW5kZXggPCBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIG5leHRGb2N1cyA9IGZvY3VzZWRJbmRleCArIDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0Rm9jdXMgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuYW5ub3VuY2VBcmlhTGl2ZUNvbnRleHQoe1xuICAgICAgICAgIGV2ZW50OiAnaW5wdXQnLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGlzU2VhcmNoYWJsZTogaXNTZWFyY2hhYmxlLFxuICAgICAgICAgICAgaXNNdWx0aTogaXNNdWx0aVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpbnB1dElzSGlkZGVuOiBuZXh0Rm9jdXMgIT09IC0xLFxuICAgICAgICBmb2N1c2VkVmFsdWU6IHNlbGVjdFZhbHVlW25leHRGb2N1c11cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb2N1c09wdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb2N1c09wdGlvbigpIHtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdmaXJzdCc7XG4gICAgICB2YXIgcGFnZVNpemUgPSB0aGlzLnByb3BzLnBhZ2VTaXplO1xuICAgICAgdmFyIF90aGlzJHN0YXRlNSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgZm9jdXNlZE9wdGlvbiA9IF90aGlzJHN0YXRlNS5mb2N1c2VkT3B0aW9uLFxuICAgICAgICAgIG1lbnVPcHRpb25zID0gX3RoaXMkc3RhdGU1Lm1lbnVPcHRpb25zO1xuICAgICAgdmFyIG9wdGlvbnMgPSBtZW51T3B0aW9ucy5mb2N1c2FibGU7XG4gICAgICBpZiAoIW9wdGlvbnMubGVuZ3RoKSByZXR1cm47XG4gICAgICB2YXIgbmV4dEZvY3VzID0gMDsgLy8gaGFuZGxlcyAnZmlyc3QnXG5cbiAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBvcHRpb25zLmluZGV4T2YoZm9jdXNlZE9wdGlvbik7XG5cbiAgICAgIGlmICghZm9jdXNlZE9wdGlvbikge1xuICAgICAgICBmb2N1c2VkSW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5hbm5vdW5jZUFyaWFMaXZlQ29udGV4dCh7XG4gICAgICAgICAgZXZlbnQ6ICdtZW51J1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3VwJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggPiAwID8gZm9jdXNlZEluZGV4IC0gMSA6IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZG93bicpIHtcbiAgICAgICAgbmV4dEZvY3VzID0gKGZvY3VzZWRJbmRleCArIDEpICUgb3B0aW9ucy5sZW5ndGg7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3BhZ2V1cCcpIHtcbiAgICAgICAgbmV4dEZvY3VzID0gZm9jdXNlZEluZGV4IC0gcGFnZVNpemU7XG4gICAgICAgIGlmIChuZXh0Rm9jdXMgPCAwKSBuZXh0Rm9jdXMgPSAwO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdwYWdlZG93bicpIHtcbiAgICAgICAgbmV4dEZvY3VzID0gZm9jdXNlZEluZGV4ICsgcGFnZVNpemU7XG4gICAgICAgIGlmIChuZXh0Rm9jdXMgPiBvcHRpb25zLmxlbmd0aCAtIDEpIG5leHRGb2N1cyA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGFzdCcpIHtcbiAgICAgICAgbmV4dEZvY3VzID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkT3B0aW9uOiBvcHRpb25zW25leHRGb2N1c10sXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFubm91bmNlQXJpYUxpdmVDb250ZXh0KHtcbiAgICAgICAgZXZlbnQ6ICdtZW51JyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzT3B0aW9uRGlzYWJsZWQob3B0aW9uc1tuZXh0Rm9jdXNdKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VGhlbWVcIixcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBHZXR0ZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFRoZW1lKCkge1xuICAgICAgLy8gVXNlIHRoZSBkZWZhdWx0IHRoZW1lIGlmIHRoZXJlIGFyZSBubyBjdXN0b21pemF0aW9ucy5cbiAgICAgIGlmICghdGhpcy5wcm9wcy50aGVtZSkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFRoZW1lO1xuICAgICAgfSAvLyBJZiB0aGUgdGhlbWUgcHJvcCBpcyBhIGZ1bmN0aW9uLCBhc3N1bWUgdGhlIGZ1bmN0aW9uXG4gICAgICAvLyBrbm93cyBob3cgdG8gbWVyZ2UgdGhlIHBhc3NlZC1pbiBkZWZhdWx0IHRoZW1lIHdpdGhcbiAgICAgIC8vIGl0cyBvd24gbW9kaWZpY2F0aW9ucy5cblxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMudGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudGhlbWUoZGVmYXVsdFRoZW1lKTtcbiAgICAgIH0gLy8gT3RoZXJ3aXNlLCBpZiBhIHBsYWluIHRoZW1lIG9iamVjdCB3YXMgcGFzc2VkIGluLFxuICAgICAgLy8gb3ZlcmxheSBpdCB3aXRoIHRoZSBkZWZhdWx0IHRoZW1lLlxuXG5cbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKHt9LCBkZWZhdWx0VGhlbWUsIHRoaXMucHJvcHMudGhlbWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRDb21tb25Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDb21tb25Qcm9wcygpIHtcbiAgICAgIHZhciBjbGVhclZhbHVlID0gdGhpcy5jbGVhclZhbHVlLFxuICAgICAgICAgIGdldFN0eWxlcyA9IHRoaXMuZ2V0U3R5bGVzLFxuICAgICAgICAgIHNldFZhbHVlID0gdGhpcy5zZXRWYWx1ZSxcbiAgICAgICAgICBzZWxlY3RPcHRpb24gPSB0aGlzLnNlbGVjdE9wdGlvbixcbiAgICAgICAgICBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICB2YXIgY2xhc3NOYW1lUHJlZml4ID0gcHJvcHMuY2xhc3NOYW1lUHJlZml4LFxuICAgICAgICAgIGlzTXVsdGkgPSBwcm9wcy5pc011bHRpLFxuICAgICAgICAgIGlzUnRsID0gcHJvcHMuaXNSdGwsXG4gICAgICAgICAgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnM7XG4gICAgICB2YXIgc2VsZWN0VmFsdWUgPSB0aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgICAgdmFyIGhhc1ZhbHVlID0gdGhpcy5oYXNWYWx1ZSgpO1xuXG4gICAgICB2YXIgZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdFZhbHVlO1xuICAgICAgfTtcblxuICAgICAgdmFyIGN4ID0gY2xhc3NOYW1lcy5iaW5kKG51bGwsIGNsYXNzTmFtZVByZWZpeCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjeDogY3gsXG4gICAgICAgIGNsZWFyVmFsdWU6IGNsZWFyVmFsdWUsXG4gICAgICAgIGdldFN0eWxlczogZ2V0U3R5bGVzLFxuICAgICAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsXG4gICAgICAgIGhhc1ZhbHVlOiBoYXNWYWx1ZSxcbiAgICAgICAgaXNNdWx0aTogaXNNdWx0aSxcbiAgICAgICAgaXNSdGw6IGlzUnRsLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICBzZWxlY3RPcHRpb246IHNlbGVjdE9wdGlvbixcbiAgICAgICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgICAgICBzZWxlY3RQcm9wczogcHJvcHMsXG4gICAgICAgIHRoZW1lOiB0aGlzLmdldFRoZW1lKClcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldE5leHRGb2N1c2VkVmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TmV4dEZvY3VzZWRWYWx1ZShuZXh0U2VsZWN0VmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLmNsZWFyRm9jdXNWYWx1ZU9uVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBfdGhpcyRzdGF0ZTYgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGZvY3VzZWRWYWx1ZSA9IF90aGlzJHN0YXRlNi5mb2N1c2VkVmFsdWUsXG4gICAgICAgICAgbGFzdFNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGU2LnNlbGVjdFZhbHVlO1xuICAgICAgdmFyIGxhc3RGb2N1c2VkSW5kZXggPSBsYXN0U2VsZWN0VmFsdWUuaW5kZXhPZihmb2N1c2VkVmFsdWUpO1xuXG4gICAgICBpZiAobGFzdEZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgICAgIHZhciBuZXh0Rm9jdXNlZEluZGV4ID0gbmV4dFNlbGVjdFZhbHVlLmluZGV4T2YoZm9jdXNlZFZhbHVlKTtcblxuICAgICAgICBpZiAobmV4dEZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgLy8gdGhlIGZvY3VzZWQgdmFsdWUgaXMgc3RpbGwgaW4gdGhlIHNlbGVjdFZhbHVlLCByZXR1cm4gaXRcbiAgICAgICAgICByZXR1cm4gZm9jdXNlZFZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3RGb2N1c2VkSW5kZXggPCBuZXh0U2VsZWN0VmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdGhlIGZvY3VzZWRWYWx1ZSBpcyBub3QgcHJlc2VudCBpbiB0aGUgbmV4dCBzZWxlY3RWYWx1ZSBhcnJheSBieVxuICAgICAgICAgIC8vIHJlZmVyZW5jZSwgc28gcmV0dXJuIHRoZSBuZXcgdmFsdWUgYXQgdGhlIHNhbWUgaW5kZXhcbiAgICAgICAgICByZXR1cm4gbmV4dFNlbGVjdFZhbHVlW2xhc3RGb2N1c2VkSW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXROZXh0Rm9jdXNlZE9wdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXROZXh0Rm9jdXNlZE9wdGlvbihvcHRpb25zKSB7XG4gICAgICB2YXIgbGFzdEZvY3VzZWRPcHRpb24gPSB0aGlzLnN0YXRlLmZvY3VzZWRPcHRpb247XG4gICAgICByZXR1cm4gbGFzdEZvY3VzZWRPcHRpb24gJiYgb3B0aW9ucy5pbmRleE9mKGxhc3RGb2N1c2VkT3B0aW9uKSA+IC0xID8gbGFzdEZvY3VzZWRPcHRpb24gOiBvcHRpb25zWzBdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNWYWx1ZSgpIHtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IHRoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICByZXR1cm4gc2VsZWN0VmFsdWUubGVuZ3RoID4gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzT3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNPcHRpb25zKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5zdGF0ZS5tZW51T3B0aW9ucy5yZW5kZXIubGVuZ3RoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb3VudE9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY291bnRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUubWVudU9wdGlvbnMuZm9jdXNhYmxlLmxlbmd0aDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNDbGVhcmFibGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNDbGVhcmFibGUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNDbGVhcmFibGUgPSBfdGhpcyRwcm9wczEyLmlzQ2xlYXJhYmxlLFxuICAgICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczEyLmlzTXVsdGk7IC8vIHNpbmdsZSBzZWxlY3QsIGJ5IGRlZmF1bHQsIElTIE5PVCBjbGVhcmFibGVcbiAgICAgIC8vIG11bHRpIHNlbGVjdCwgYnkgZGVmYXVsdCwgSVMgY2xlYXJhYmxlXG5cbiAgICAgIGlmIChpc0NsZWFyYWJsZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gaXNNdWx0aTtcbiAgICAgIHJldHVybiBpc0NsZWFyYWJsZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNPcHRpb25EaXNhYmxlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc09wdGlvbkRpc2FibGVkKG9wdGlvbiwgc2VsZWN0VmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5wcm9wcy5pc09wdGlvbkRpc2FibGVkID09PSAnZnVuY3Rpb24nID8gdGhpcy5wcm9wcy5pc09wdGlvbkRpc2FibGVkKG9wdGlvbiwgc2VsZWN0VmFsdWUpIDogZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzT3B0aW9uU2VsZWN0ZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNPcHRpb25TZWxlY3RlZChvcHRpb24sIHNlbGVjdFZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHNlbGVjdFZhbHVlLmluZGV4T2Yob3B0aW9uKSA+IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLmlzT3B0aW9uU2VsZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuaXNPcHRpb25TZWxlY3RlZChvcHRpb24sIHNlbGVjdFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNhbmRpZGF0ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uKTtcbiAgICAgIHJldHVybiBzZWxlY3RWYWx1ZS5zb21lKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIuZ2V0T3B0aW9uVmFsdWUoaSkgPT09IGNhbmRpZGF0ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmaWx0ZXJPcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmlsdGVyT3B0aW9uKG9wdGlvbiwgaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZmlsdGVyT3B0aW9uID8gdGhpcy5wcm9wcy5maWx0ZXJPcHRpb24ob3B0aW9uLCBpbnB1dFZhbHVlKSA6IHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvcm1hdE9wdGlvbkxhYmVsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdE9wdGlvbkxhYmVsKGRhdGEsIGNvbnRleHQpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5mb3JtYXRPcHRpb25MYWJlbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaW5wdXRWYWx1ZSA9IHRoaXMucHJvcHMuaW5wdXRWYWx1ZTtcbiAgICAgICAgdmFyIHNlbGVjdFZhbHVlID0gdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZm9ybWF0T3B0aW9uTGFiZWwoZGF0YSwge1xuICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25MYWJlbChkYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0R3JvdXBMYWJlbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JtYXRHcm91cExhYmVsKGRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1hdEdyb3VwTGFiZWwoZGF0YSk7XG4gICAgfSAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBNb3VzZSBIYW5kbGVyc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIH0sIHtcbiAgICBrZXk6IFwic3RhcnRMaXN0ZW5pbmdDb21wb3NpdGlvblwiLFxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENvbXBvc2l0aW9uIEhhbmRsZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nQ29tcG9zaXRpb24oKSB7XG4gICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0JywgdGhpcy5vbkNvbXBvc2l0aW9uU3RhcnQsIGZhbHNlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCB0aGlzLm9uQ29tcG9zaXRpb25FbmQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RvcExpc3RlbmluZ0NvbXBvc2l0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BMaXN0ZW5pbmdDb21wb3NpdGlvbigpIHtcbiAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCB0aGlzLm9uQ29tcG9zaXRpb25TdGFydCk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgdGhpcy5vbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RhcnRMaXN0ZW5pbmdUb1RvdWNoXCIsXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gVG91Y2ggSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnRMaXN0ZW5pbmdUb1RvdWNoKCkge1xuICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIGZhbHNlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVG91Y2hFbmQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RvcExpc3RlbmluZ1RvVG91Y2hcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RvcExpc3RlbmluZ1RvVG91Y2goKSB7XG4gICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVG91Y2hFbmQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJidWlsZE1lbnVPcHRpb25zXCIsXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTWVudSBPcHRpb25zXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkTWVudU9wdGlvbnMocHJvcHMsIHNlbGVjdFZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF9wcm9wcyRpbnB1dFZhbHVlID0gcHJvcHMuaW5wdXRWYWx1ZSxcbiAgICAgICAgICBpbnB1dFZhbHVlID0gX3Byb3BzJGlucHV0VmFsdWUgPT09IHZvaWQgMCA/ICcnIDogX3Byb3BzJGlucHV0VmFsdWUsXG4gICAgICAgICAgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnM7XG5cbiAgICAgIHZhciB0b09wdGlvbiA9IGZ1bmN0aW9uIHRvT3B0aW9uKG9wdGlvbiwgaWQpIHtcbiAgICAgICAgdmFyIGlzRGlzYWJsZWQgPSBfdGhpczMuaXNPcHRpb25EaXNhYmxlZChvcHRpb24sIHNlbGVjdFZhbHVlKTtcblxuICAgICAgICB2YXIgaXNTZWxlY3RlZCA9IF90aGlzMy5pc09wdGlvblNlbGVjdGVkKG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuXG4gICAgICAgIHZhciBsYWJlbCA9IF90aGlzMy5nZXRPcHRpb25MYWJlbChvcHRpb24pO1xuXG4gICAgICAgIHZhciB2YWx1ZSA9IF90aGlzMy5nZXRPcHRpb25WYWx1ZShvcHRpb24pO1xuXG4gICAgICAgIGlmIChfdGhpczMuc2hvdWxkSGlkZVNlbGVjdGVkT3B0aW9ucygpICYmIGlzU2VsZWN0ZWQgfHwgIV90aGlzMy5maWx0ZXJPcHRpb24oe1xuICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgZGF0YTogb3B0aW9uXG4gICAgICAgIH0sIGlucHV0VmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG9uSG92ZXIgPSBpc0Rpc2FibGVkID8gdW5kZWZpbmVkIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMub25PcHRpb25Ib3ZlcihvcHRpb24pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb25TZWxlY3QgPSBpc0Rpc2FibGVkID8gdW5kZWZpbmVkIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMuc2VsZWN0T3B0aW9uKG9wdGlvbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvcHRpb25JZCA9IFwiXCIuY29uY2F0KF90aGlzMy5nZXRFbGVtZW50SWQoJ29wdGlvbicpLCBcIi1cIikuY29uY2F0KGlkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbm5lclByb3BzOiB7XG4gICAgICAgICAgICBpZDogb3B0aW9uSWQsXG4gICAgICAgICAgICBvbkNsaWNrOiBvblNlbGVjdCxcbiAgICAgICAgICAgIG9uTW91c2VNb3ZlOiBvbkhvdmVyLFxuICAgICAgICAgICAgb25Nb3VzZU92ZXI6IG9uSG92ZXIsXG4gICAgICAgICAgICB0YWJJbmRleDogLTFcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRhdGE6IG9wdGlvbixcbiAgICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAga2V5OiBvcHRpb25JZCxcbiAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgdHlwZTogJ29wdGlvbicsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gb3B0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgaXRlbSwgaXRlbUluZGV4KSB7XG4gICAgICAgIGlmIChpdGVtLm9wdGlvbnMpIHtcbiAgICAgICAgICAvLyBUT0RPIG5lZWRzIGEgdGlkaWVyIGltcGxlbWVudGF0aW9uXG4gICAgICAgICAgaWYgKCFfdGhpczMuaGFzR3JvdXBzKSBfdGhpczMuaGFzR3JvdXBzID0gdHJ1ZTtcbiAgICAgICAgICB2YXIgaXRlbXMgPSBpdGVtLm9wdGlvbnM7XG4gICAgICAgICAgdmFyIGNoaWxkcmVuID0gaXRlbXMubWFwKGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAgICAgdmFyIG9wdGlvbiA9IHRvT3B0aW9uKGNoaWxkLCBcIlwiLmNvbmNhdChpdGVtSW5kZXgsIFwiLVwiKS5jb25jYXQoaSkpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbikgYWNjLmZvY3VzYWJsZS5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgfSkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGdyb3VwSWQgPSBcIlwiLmNvbmNhdChfdGhpczMuZ2V0RWxlbWVudElkKCdncm91cCcpLCBcIi1cIikuY29uY2F0KGl0ZW1JbmRleCk7XG4gICAgICAgICAgICBhY2MucmVuZGVyLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiAnZ3JvdXAnLFxuICAgICAgICAgICAgICBrZXk6IGdyb3VwSWQsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgIG9wdGlvbnM6IGNoaWxkcmVuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG9wdGlvbiA9IHRvT3B0aW9uKGl0ZW0sIFwiXCIuY29uY2F0KGl0ZW1JbmRleCkpO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgYWNjLnJlbmRlci5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgICBhY2MuZm9jdXNhYmxlLnB1c2goaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHtcbiAgICAgICAgcmVuZGVyOiBbXSxcbiAgICAgICAgZm9jdXNhYmxlOiBbXVxuICAgICAgfSk7XG4gICAgfSAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBSZW5kZXJlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB9LCB7XG4gICAga2V5OiBcImNvbnN0cnVjdEFyaWFMaXZlTWVzc2FnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb25zdHJ1Y3RBcmlhTGl2ZU1lc3NhZ2UoKSB7XG4gICAgICB2YXIgX3RoaXMkc3RhdGU3ID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBhcmlhTGl2ZUNvbnRleHQgPSBfdGhpcyRzdGF0ZTcuYXJpYUxpdmVDb250ZXh0LFxuICAgICAgICAgIHNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGU3LnNlbGVjdFZhbHVlLFxuICAgICAgICAgIGZvY3VzZWRWYWx1ZSA9IF90aGlzJHN0YXRlNy5mb2N1c2VkVmFsdWUsXG4gICAgICAgICAgZm9jdXNlZE9wdGlvbiA9IF90aGlzJHN0YXRlNy5mb2N1c2VkT3B0aW9uO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczEzLm9wdGlvbnMsXG4gICAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzMTMubWVudUlzT3BlbixcbiAgICAgICAgICBpbnB1dFZhbHVlID0gX3RoaXMkcHJvcHMxMy5pbnB1dFZhbHVlLFxuICAgICAgICAgIHNjcmVlblJlYWRlclN0YXR1cyA9IF90aGlzJHByb3BzMTMuc2NyZWVuUmVhZGVyU3RhdHVzOyAvLyBBbiBhcmlhIGxpdmUgbWVzc2FnZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnRseSBmb2N1c2VkIHZhbHVlIGluIHRoZSBzZWxlY3QuXG5cbiAgICAgIHZhciBmb2N1c2VkVmFsdWVNc2cgPSBmb2N1c2VkVmFsdWUgPyB2YWx1ZUZvY3VzQXJpYU1lc3NhZ2Uoe1xuICAgICAgICBmb2N1c2VkVmFsdWU6IGZvY3VzZWRWYWx1ZSxcbiAgICAgICAgZ2V0T3B0aW9uTGFiZWw6IHRoaXMuZ2V0T3B0aW9uTGFiZWwsXG4gICAgICAgIHNlbGVjdFZhbHVlOiBzZWxlY3RWYWx1ZVxuICAgICAgfSkgOiAnJzsgLy8gQW4gYXJpYSBsaXZlIG1lc3NhZ2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBvcHRpb24gaW4gdGhlIHNlbGVjdC5cblxuICAgICAgdmFyIGZvY3VzZWRPcHRpb25Nc2cgPSBmb2N1c2VkT3B0aW9uICYmIG1lbnVJc09wZW4gPyBvcHRpb25Gb2N1c0FyaWFNZXNzYWdlKHtcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZ2V0T3B0aW9uTGFiZWw6IHRoaXMuZ2V0T3B0aW9uTGFiZWwsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgIH0pIDogJyc7IC8vIEFuIGFyaWEgbGl2ZSBtZXNzYWdlIHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIGZvY3VzYWJsZSByZXN1bHRzIGFuZCBjdXJyZW50IHNlYXJjaHRlcm0vaW5wdXR2YWx1ZS5cblxuICAgICAgdmFyIHJlc3VsdHNNc2cgPSByZXN1bHRzQXJpYU1lc3NhZ2Uoe1xuICAgICAgICBpbnB1dFZhbHVlOiBpbnB1dFZhbHVlLFxuICAgICAgICBzY3JlZW5SZWFkZXJNZXNzYWdlOiBzY3JlZW5SZWFkZXJTdGF0dXMoe1xuICAgICAgICAgIGNvdW50OiB0aGlzLmNvdW50T3B0aW9ucygpXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdChmb2N1c2VkVmFsdWVNc2csIFwiIFwiKS5jb25jYXQoZm9jdXNlZE9wdGlvbk1zZywgXCIgXCIpLmNvbmNhdChyZXN1bHRzTXNnLCBcIiBcIikuY29uY2F0KGFyaWFMaXZlQ29udGV4dCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlcklucHV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcklucHV0KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMTQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczE0LmlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNTZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMxNC5pc1NlYXJjaGFibGUsXG4gICAgICAgICAgaW5wdXRJZCA9IF90aGlzJHByb3BzMTQuaW5wdXRJZCxcbiAgICAgICAgICBpbnB1dFZhbHVlID0gX3RoaXMkcHJvcHMxNC5pbnB1dFZhbHVlLFxuICAgICAgICAgIHRhYkluZGV4ID0gX3RoaXMkcHJvcHMxNC50YWJJbmRleDtcbiAgICAgIHZhciBJbnB1dCA9IHRoaXMuY29tcG9uZW50cy5JbnB1dDtcbiAgICAgIHZhciBpbnB1dElzSGlkZGVuID0gdGhpcy5zdGF0ZS5pbnB1dElzSGlkZGVuO1xuICAgICAgdmFyIGlkID0gaW5wdXRJZCB8fCB0aGlzLmdldEVsZW1lbnRJZCgnaW5wdXQnKTtcblxuICAgICAgaWYgKCFpc1NlYXJjaGFibGUpIHtcbiAgICAgICAgLy8gdXNlIGEgZHVtbXkgaW5wdXQgdG8gbWFpbnRhaW4gZm9jdXMvYmx1ciBmdW5jdGlvbmFsaXR5XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KER1bW15SW5wdXQsIHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgaW5uZXJSZWY6IHRoaXMuZ2V0SW5wdXRSZWYsXG4gICAgICAgICAgb25CbHVyOiB0aGlzLm9uSW5wdXRCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBub29wLFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25JbnB1dEZvY3VzLFxuICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgICB2YWx1ZTogXCJcIlxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gYXJpYSBhdHRyaWJ1dGVzIG1ha2VzIHRoZSBKU1ggXCJub2lzeVwiLCBzZXBhcmF0ZWQgZm9yIGNsYXJpdHlcblxuXG4gICAgICB2YXIgYXJpYUF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAgICAgJ2FyaWEtbGFiZWwnOiB0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiB0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXVxuICAgICAgfTtcbiAgICAgIHZhciBfdGhpcyRjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHMsXG4gICAgICAgICAgY3ggPSBfdGhpcyRjb21tb25Qcm9wcy5jeCxcbiAgICAgICAgICB0aGVtZSA9IF90aGlzJGNvbW1vblByb3BzLnRoZW1lLFxuICAgICAgICAgIHNlbGVjdFByb3BzID0gX3RoaXMkY29tbW9uUHJvcHMuc2VsZWN0UHJvcHM7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgICBhdXRvQ2FwaXRhbGl6ZTogXCJub25lXCIsXG4gICAgICAgIGF1dG9Db21wbGV0ZTogXCJvZmZcIixcbiAgICAgICAgYXV0b0NvcnJlY3Q6IFwib2ZmXCIsXG4gICAgICAgIGN4OiBjeCxcbiAgICAgICAgZ2V0U3R5bGVzOiB0aGlzLmdldFN0eWxlcyxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRJbnB1dFJlZixcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNIaWRkZW46IGlucHV0SXNIaWRkZW4sXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbklucHV0Qmx1cixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25JbnB1dEZvY3VzLFxuICAgICAgICBzZWxlY3RQcm9wczogc2VsZWN0UHJvcHMsXG4gICAgICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIixcbiAgICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgICB0aGVtZTogdGhlbWUsXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB2YWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgfSwgYXJpYUF0dHJpYnV0ZXMpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyUGxhY2Vob2xkZXJPclZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclBsYWNlaG9sZGVyT3JWYWx1ZSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkY29tcG9uZW50cyA9IHRoaXMuY29tcG9uZW50cyxcbiAgICAgICAgICBNdWx0aVZhbHVlID0gX3RoaXMkY29tcG9uZW50cy5NdWx0aVZhbHVlLFxuICAgICAgICAgIE11bHRpVmFsdWVDb250YWluZXIgPSBfdGhpcyRjb21wb25lbnRzLk11bHRpVmFsdWVDb250YWluZXIsXG4gICAgICAgICAgTXVsdGlWYWx1ZUxhYmVsID0gX3RoaXMkY29tcG9uZW50cy5NdWx0aVZhbHVlTGFiZWwsXG4gICAgICAgICAgTXVsdGlWYWx1ZVJlbW92ZSA9IF90aGlzJGNvbXBvbmVudHMuTXVsdGlWYWx1ZVJlbW92ZSxcbiAgICAgICAgICBTaW5nbGVWYWx1ZSA9IF90aGlzJGNvbXBvbmVudHMuU2luZ2xlVmFsdWUsXG4gICAgICAgICAgUGxhY2Vob2xkZXIgPSBfdGhpcyRjb21wb25lbnRzLlBsYWNlaG9sZGVyO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczE1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUgPSBfdGhpcyRwcm9wczE1LmNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZSxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMxNS5pc0Rpc2FibGVkLFxuICAgICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczE1LmlzTXVsdGksXG4gICAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzMTUuaW5wdXRWYWx1ZSxcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzMTUucGxhY2Vob2xkZXI7XG4gICAgICB2YXIgX3RoaXMkc3RhdGU4ID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlOC5zZWxlY3RWYWx1ZSxcbiAgICAgICAgICBmb2N1c2VkVmFsdWUgPSBfdGhpcyRzdGF0ZTguZm9jdXNlZFZhbHVlLFxuICAgICAgICAgIGlzRm9jdXNlZCA9IF90aGlzJHN0YXRlOC5pc0ZvY3VzZWQ7XG5cbiAgICAgIGlmICghdGhpcy5oYXNWYWx1ZSgpIHx8ICFjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0VmFsdWUgPyBudWxsIDogUmVhY3QuY3JlYXRlRWxlbWVudChQbGFjZWhvbGRlciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgICAga2V5OiBcInBsYWNlaG9sZGVyXCIsXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZFxuICAgICAgICB9KSwgcGxhY2Vob2xkZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICB2YXIgc2VsZWN0VmFsdWVzID0gc2VsZWN0VmFsdWUubWFwKGZ1bmN0aW9uIChvcHQpIHtcbiAgICAgICAgICB2YXIgaXNPcHRpb25Gb2N1c2VkID0gb3B0ID09PSBmb2N1c2VkVmFsdWU7XG4gICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTXVsdGlWYWx1ZSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICAgIENvbnRhaW5lcjogTXVsdGlWYWx1ZUNvbnRhaW5lcixcbiAgICAgICAgICAgICAgTGFiZWw6IE11bHRpVmFsdWVMYWJlbCxcbiAgICAgICAgICAgICAgUmVtb3ZlOiBNdWx0aVZhbHVlUmVtb3ZlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNGb2N1c2VkOiBpc09wdGlvbkZvY3VzZWQsXG4gICAgICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgICAga2V5OiBfdGhpczQuZ2V0T3B0aW9uVmFsdWUob3B0KSxcbiAgICAgICAgICAgIHJlbW92ZVByb3BzOiB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5yZW1vdmVWYWx1ZShvcHQpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvblRvdWNoRW5kOiBmdW5jdGlvbiBvblRvdWNoRW5kKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczQucmVtb3ZlVmFsdWUob3B0KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGE6IG9wdFxuICAgICAgICAgIH0pLCBfdGhpczQuZm9ybWF0T3B0aW9uTGFiZWwob3B0LCAndmFsdWUnKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2VsZWN0VmFsdWVzO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHNpbmdsZVZhbHVlID0gc2VsZWN0VmFsdWVbMF07XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTaW5nbGVWYWx1ZSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGRhdGE6IHNpbmdsZVZhbHVlLFxuICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkXG4gICAgICB9KSwgdGhpcy5mb3JtYXRPcHRpb25MYWJlbChzaW5nbGVWYWx1ZSwgJ3ZhbHVlJykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDbGVhckluZGljYXRvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDbGVhckluZGljYXRvcigpIHtcbiAgICAgIHZhciBDbGVhckluZGljYXRvciA9IHRoaXMuY29tcG9uZW50cy5DbGVhckluZGljYXRvcjtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMTYuaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczE2LmlzTG9hZGluZztcbiAgICAgIHZhciBpc0ZvY3VzZWQgPSB0aGlzLnN0YXRlLmlzRm9jdXNlZDtcblxuICAgICAgaWYgKCF0aGlzLmlzQ2xlYXJhYmxlKCkgfHwgIUNsZWFySW5kaWNhdG9yIHx8IGlzRGlzYWJsZWQgfHwgIXRoaXMuaGFzVmFsdWUoKSB8fCBpc0xvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbm5lclByb3BzID0ge1xuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbkNsZWFySW5kaWNhdG9yTW91c2VEb3duLFxuICAgICAgICBvblRvdWNoRW5kOiB0aGlzLm9uQ2xlYXJJbmRpY2F0b3JUb3VjaEVuZCxcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2xlYXJJbmRpY2F0b3IsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBpbm5lclByb3BzOiBpbm5lclByb3BzLFxuICAgICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZFxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJMb2FkaW5nSW5kaWNhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckxvYWRpbmdJbmRpY2F0b3IoKSB7XG4gICAgICB2YXIgTG9hZGluZ0luZGljYXRvciA9IHRoaXMuY29tcG9uZW50cy5Mb2FkaW5nSW5kaWNhdG9yO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczE3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMxNy5pc0Rpc2FibGVkLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMTcuaXNMb2FkaW5nO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKCFMb2FkaW5nSW5kaWNhdG9yIHx8ICFpc0xvYWRpbmcpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGlubmVyUHJvcHMgPSB7XG4gICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvYWRpbmdJbmRpY2F0b3IsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBpbm5lclByb3BzOiBpbm5lclByb3BzLFxuICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZFxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJbmRpY2F0b3JTZXBhcmF0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySW5kaWNhdG9yU2VwYXJhdG9yKCkge1xuICAgICAgdmFyIF90aGlzJGNvbXBvbmVudHMyID0gdGhpcy5jb21wb25lbnRzLFxuICAgICAgICAgIERyb3Bkb3duSW5kaWNhdG9yID0gX3RoaXMkY29tcG9uZW50czIuRHJvcGRvd25JbmRpY2F0b3IsXG4gICAgICAgICAgSW5kaWNhdG9yU2VwYXJhdG9yID0gX3RoaXMkY29tcG9uZW50czIuSW5kaWNhdG9yU2VwYXJhdG9yOyAvLyBzZXBhcmF0b3IgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgdGhlIGRyb3Bkb3duIGluZGljYXRvclxuXG4gICAgICBpZiAoIURyb3Bkb3duSW5kaWNhdG9yIHx8ICFJbmRpY2F0b3JTZXBhcmF0b3IpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBpc0Rpc2FibGVkID0gdGhpcy5wcm9wcy5pc0Rpc2FibGVkO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kaWNhdG9yU2VwYXJhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRHJvcGRvd25JbmRpY2F0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRHJvcGRvd25JbmRpY2F0b3IoKSB7XG4gICAgICB2YXIgRHJvcGRvd25JbmRpY2F0b3IgPSB0aGlzLmNvbXBvbmVudHMuRHJvcGRvd25JbmRpY2F0b3I7XG4gICAgICBpZiAoIURyb3Bkb3duSW5kaWNhdG9yKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMucHJvcHMuaXNEaXNhYmxlZDtcbiAgICAgIHZhciBpc0ZvY3VzZWQgPSB0aGlzLnN0YXRlLmlzRm9jdXNlZDtcbiAgICAgIHZhciBpbm5lclByb3BzID0ge1xuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbkRyb3Bkb3duSW5kaWNhdG9yTW91c2VEb3duLFxuICAgICAgICBvblRvdWNoRW5kOiB0aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JUb3VjaEVuZCxcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcGRvd25JbmRpY2F0b3IsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBpbm5lclByb3BzOiBpbm5lclByb3BzLFxuICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZFxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJNZW51XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlck1lbnUoKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJGNvbXBvbmVudHMzID0gdGhpcy5jb21wb25lbnRzLFxuICAgICAgICAgIEdyb3VwID0gX3RoaXMkY29tcG9uZW50czMuR3JvdXAsXG4gICAgICAgICAgR3JvdXBIZWFkaW5nID0gX3RoaXMkY29tcG9uZW50czMuR3JvdXBIZWFkaW5nLFxuICAgICAgICAgIE1lbnUgPSBfdGhpcyRjb21wb25lbnRzMy5NZW51LFxuICAgICAgICAgIE1lbnVMaXN0ID0gX3RoaXMkY29tcG9uZW50czMuTWVudUxpc3QsXG4gICAgICAgICAgTWVudVBvcnRhbCA9IF90aGlzJGNvbXBvbmVudHMzLk1lbnVQb3J0YWwsXG4gICAgICAgICAgTG9hZGluZ01lc3NhZ2UgPSBfdGhpcyRjb21wb25lbnRzMy5Mb2FkaW5nTWVzc2FnZSxcbiAgICAgICAgICBOb09wdGlvbnNNZXNzYWdlID0gX3RoaXMkY29tcG9uZW50czMuTm9PcHRpb25zTWVzc2FnZSxcbiAgICAgICAgICBPcHRpb24gPSBfdGhpcyRjb21wb25lbnRzMy5PcHRpb247XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzO1xuICAgICAgdmFyIF90aGlzJHN0YXRlOSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgZm9jdXNlZE9wdGlvbiA9IF90aGlzJHN0YXRlOS5mb2N1c2VkT3B0aW9uLFxuICAgICAgICAgIG1lbnVPcHRpb25zID0gX3RoaXMkc3RhdGU5Lm1lbnVPcHRpb25zO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTggPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNhcHR1cmVNZW51U2Nyb2xsID0gX3RoaXMkcHJvcHMxOC5jYXB0dXJlTWVudVNjcm9sbCxcbiAgICAgICAgICBpbnB1dFZhbHVlID0gX3RoaXMkcHJvcHMxOC5pbnB1dFZhbHVlLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMTguaXNMb2FkaW5nLFxuICAgICAgICAgIGxvYWRpbmdNZXNzYWdlID0gX3RoaXMkcHJvcHMxOC5sb2FkaW5nTWVzc2FnZSxcbiAgICAgICAgICBtaW5NZW51SGVpZ2h0ID0gX3RoaXMkcHJvcHMxOC5taW5NZW51SGVpZ2h0LFxuICAgICAgICAgIG1heE1lbnVIZWlnaHQgPSBfdGhpcyRwcm9wczE4Lm1heE1lbnVIZWlnaHQsXG4gICAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzMTgubWVudUlzT3BlbixcbiAgICAgICAgICBtZW51UGxhY2VtZW50ID0gX3RoaXMkcHJvcHMxOC5tZW51UGxhY2VtZW50LFxuICAgICAgICAgIG1lbnVQb3NpdGlvbiA9IF90aGlzJHByb3BzMTgubWVudVBvc2l0aW9uLFxuICAgICAgICAgIG1lbnVQb3J0YWxUYXJnZXQgPSBfdGhpcyRwcm9wczE4Lm1lbnVQb3J0YWxUYXJnZXQsXG4gICAgICAgICAgbWVudVNob3VsZEJsb2NrU2Nyb2xsID0gX3RoaXMkcHJvcHMxOC5tZW51U2hvdWxkQmxvY2tTY3JvbGwsXG4gICAgICAgICAgbWVudVNob3VsZFNjcm9sbEludG9WaWV3ID0gX3RoaXMkcHJvcHMxOC5tZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcsXG4gICAgICAgICAgbm9PcHRpb25zTWVzc2FnZSA9IF90aGlzJHByb3BzMTgubm9PcHRpb25zTWVzc2FnZSxcbiAgICAgICAgICBvbk1lbnVTY3JvbGxUb1RvcCA9IF90aGlzJHByb3BzMTgub25NZW51U2Nyb2xsVG9Ub3AsXG4gICAgICAgICAgb25NZW51U2Nyb2xsVG9Cb3R0b20gPSBfdGhpcyRwcm9wczE4Lm9uTWVudVNjcm9sbFRvQm90dG9tO1xuICAgICAgaWYgKCFtZW51SXNPcGVuKSByZXR1cm4gbnVsbDsgLy8gVE9ETzogSW50ZXJuYWwgT3B0aW9uIFR5cGUgaGVyZVxuXG4gICAgICB2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHByb3BzKSB7XG4gICAgICAgIC8vIGZvciBwZXJmb3JtYW5jZSwgdGhlIG1lbnUgb3B0aW9ucyBpbiBzdGF0ZSBhcmVuJ3QgY2hhbmdlZCB3aGVuIHRoZVxuICAgICAgICAvLyBmb2N1c2VkIG9wdGlvbiBjaGFuZ2VzIHNvIHdlIGNhbGN1bGF0ZSBhZGRpdGlvbmFsIHByb3BzIGJhc2VkIG9uIHRoYXRcbiAgICAgICAgdmFyIGlzRm9jdXNlZCA9IGZvY3VzZWRPcHRpb24gPT09IHByb3BzLmRhdGE7XG4gICAgICAgIHByb3BzLmlubmVyUmVmID0gaXNGb2N1c2VkID8gX3RoaXM1LmdldEZvY3VzZWRPcHRpb25SZWYgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE9wdGlvbiwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCBwcm9wcywge1xuICAgICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICAgIH0pLCBfdGhpczUuZm9ybWF0T3B0aW9uTGFiZWwocHJvcHMuZGF0YSwgJ21lbnUnKSk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgbWVudVVJO1xuXG4gICAgICBpZiAodGhpcy5oYXNPcHRpb25zKCkpIHtcbiAgICAgICAgbWVudVVJID0gbWVudU9wdGlvbnMucmVuZGVyLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHZhciB0eXBlID0gaXRlbS50eXBlLFxuICAgICAgICAgICAgICAgIGdyb3VwID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGl0ZW0sIFtcInR5cGVcIl0pO1xuXG4gICAgICAgICAgICB2YXIgaGVhZGluZ0lkID0gXCJcIi5jb25jYXQoaXRlbS5rZXksIFwiLWhlYWRpbmdcIik7XG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChHcm91cCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCBncm91cCwge1xuICAgICAgICAgICAgICBIZWFkaW5nOiBHcm91cEhlYWRpbmcsXG4gICAgICAgICAgICAgIGhlYWRpbmdQcm9wczoge1xuICAgICAgICAgICAgICAgIGlkOiBoZWFkaW5nSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGFiZWw6IF90aGlzNS5mb3JtYXRHcm91cExhYmVsKGl0ZW0uZGF0YSlcbiAgICAgICAgICAgIH0pLCBpdGVtLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihvcHRpb24pO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAnb3B0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihpdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBsb2FkaW5nTWVzc2FnZSh7XG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBtZW51VUkgPSBSZWFjdC5jcmVhdGVFbGVtZW50KExvYWRpbmdNZXNzYWdlLCBjb21tb25Qcm9wcywgbWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX21lc3NhZ2UgPSBub09wdGlvbnNNZXNzYWdlKHtcbiAgICAgICAgICBpbnB1dFZhbHVlOiBpbnB1dFZhbHVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChfbWVzc2FnZSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIG1lbnVVSSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoTm9PcHRpb25zTWVzc2FnZSwgY29tbW9uUHJvcHMsIF9tZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1lbnVQbGFjZW1lbnRQcm9wcyA9IHtcbiAgICAgICAgbWluTWVudUhlaWdodDogbWluTWVudUhlaWdodCxcbiAgICAgICAgbWF4TWVudUhlaWdodDogbWF4TWVudUhlaWdodCxcbiAgICAgICAgbWVudVBsYWNlbWVudDogbWVudVBsYWNlbWVudCxcbiAgICAgICAgbWVudVBvc2l0aW9uOiBtZW51UG9zaXRpb24sXG4gICAgICAgIG1lbnVTaG91bGRTY3JvbGxJbnRvVmlldzogbWVudVNob3VsZFNjcm9sbEludG9WaWV3XG4gICAgICB9O1xuICAgICAgdmFyIG1lbnVFbGVtZW50ID0gUmVhY3QuY3JlYXRlRWxlbWVudChNZW51UGxhY2VyLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIG1lbnVQbGFjZW1lbnRQcm9wcyksIGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgICB2YXIgcmVmID0gX3JlZjYucmVmLFxuICAgICAgICAgICAgX3JlZjYkcGxhY2VyUHJvcHMgPSBfcmVmNi5wbGFjZXJQcm9wcyxcbiAgICAgICAgICAgIHBsYWNlbWVudCA9IF9yZWY2JHBsYWNlclByb3BzLnBsYWNlbWVudCxcbiAgICAgICAgICAgIG1heEhlaWdodCA9IF9yZWY2JHBsYWNlclByb3BzLm1heEhlaWdodDtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCBtZW51UGxhY2VtZW50UHJvcHMsIHtcbiAgICAgICAgICBpbm5lclJlZjogcmVmLFxuICAgICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICAgIG9uTW91c2VEb3duOiBfdGhpczUub25NZW51TW91c2VEb3duLFxuICAgICAgICAgICAgb25Nb3VzZU1vdmU6IF90aGlzNS5vbk1lbnVNb3VzZU1vdmVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gICAgICAgIH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbENhcHRvclN3aXRjaCwge1xuICAgICAgICAgIGlzRW5hYmxlZDogY2FwdHVyZU1lbnVTY3JvbGwsXG4gICAgICAgICAgb25Ub3BBcnJpdmU6IG9uTWVudVNjcm9sbFRvVG9wLFxuICAgICAgICAgIG9uQm90dG9tQXJyaXZlOiBvbk1lbnVTY3JvbGxUb0JvdHRvbVxuICAgICAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbEJsb2NrLCB7XG4gICAgICAgICAgaXNFbmFibGVkOiBtZW51U2hvdWxkQmxvY2tTY3JvbGxcbiAgICAgICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChNZW51TGlzdCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgICAgaW5uZXJSZWY6IF90aGlzNS5nZXRNZW51TGlzdFJlZixcbiAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodFxuICAgICAgICB9KSwgbWVudVVJKSkpKTtcbiAgICAgIH0pOyAvLyBwb3NpdGlvbmluZyBiZWhhdmlvdXIgaXMgYWxtb3N0IGlkZW50aWNhbCBmb3IgcG9ydGFsbGVkIGFuZCBmaXhlZCxcbiAgICAgIC8vIHNvIHdlIHVzZSB0aGUgc2FtZSBjb21wb25lbnQuIHRoZSBhY3R1YWwgcG9ydGFsbGluZyBsb2dpYyBpcyBmb3JrZWRcbiAgICAgIC8vIHdpdGhpbiB0aGUgY29tcG9uZW50IGJhc2VkIG9uIGBtZW51UG9zaXRpb25gXG5cbiAgICAgIHJldHVybiBtZW51UG9ydGFsVGFyZ2V0IHx8IG1lbnVQb3NpdGlvbiA9PT0gJ2ZpeGVkJyA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudVBvcnRhbCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGFwcGVuZFRvOiBtZW51UG9ydGFsVGFyZ2V0LFxuICAgICAgICBjb250cm9sRWxlbWVudDogdGhpcy5jb250cm9sUmVmLFxuICAgICAgICBtZW51UGxhY2VtZW50OiBtZW51UGxhY2VtZW50LFxuICAgICAgICBtZW51UG9zaXRpb246IG1lbnVQb3NpdGlvblxuICAgICAgfSksIG1lbnVFbGVtZW50KSA6IG1lbnVFbGVtZW50O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJGb3JtRmllbGRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRm9ybUZpZWxkKCkge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczE5ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkZWxpbWl0ZXIgPSBfdGhpcyRwcm9wczE5LmRlbGltaXRlcixcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMxOS5pc0Rpc2FibGVkLFxuICAgICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczE5LmlzTXVsdGksXG4gICAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzMTkubmFtZTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IHRoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICBpZiAoIW5hbWUgfHwgaXNEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICBpZiAoZGVsaW1pdGVyKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gc2VsZWN0VmFsdWUubWFwKGZ1bmN0aW9uIChvcHQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczYuZ2V0T3B0aW9uVmFsdWUob3B0KTtcbiAgICAgICAgICB9KS5qb2luKGRlbGltaXRlcik7XG4gICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdHlwZTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBpbnB1dCA9IHNlbGVjdFZhbHVlLmxlbmd0aCA+IDAgPyBzZWxlY3RWYWx1ZS5tYXAoZnVuY3Rpb24gKG9wdCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgIGtleTogXCJpLVwiLmNvbmNhdChpKSxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgICAgdmFsdWU6IF90aGlzNi5nZXRPcHRpb25WYWx1ZShvcHQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdHlwZTogXCJoaWRkZW5cIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsIGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF92YWx1ZSA9IHNlbGVjdFZhbHVlWzBdID8gdGhpcy5nZXRPcHRpb25WYWx1ZShzZWxlY3RWYWx1ZVswXSkgOiAnJztcblxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgdmFsdWU6IF92YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTGl2ZVJlZ2lvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJMaXZlUmVnaW9uKCkge1xuICAgICAgaWYgKCF0aGlzLnN0YXRlLmlzRm9jdXNlZCkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBMTF5VGV4dCwge1xuICAgICAgICBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiXG4gICAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7XG4gICAgICAgIGlkOiBcImFyaWEtc2VsZWN0aW9uLWV2ZW50XCJcbiAgICAgIH0sIFwiXFx4QTBcIiwgdGhpcy5zdGF0ZS5hcmlhTGl2ZVNlbGVjdGlvbiksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHtcbiAgICAgICAgaWQ6IFwiYXJpYS1jb250ZXh0XCJcbiAgICAgIH0sIFwiXFx4QTBcIiwgdGhpcy5jb25zdHJ1Y3RBcmlhTGl2ZU1lc3NhZ2UoKSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJGNvbXBvbmVudHM0ID0gdGhpcy5jb21wb25lbnRzLFxuICAgICAgICAgIENvbnRyb2wgPSBfdGhpcyRjb21wb25lbnRzNC5Db250cm9sLFxuICAgICAgICAgIEluZGljYXRvcnNDb250YWluZXIgPSBfdGhpcyRjb21wb25lbnRzNC5JbmRpY2F0b3JzQ29udGFpbmVyLFxuICAgICAgICAgIFNlbGVjdENvbnRhaW5lciA9IF90aGlzJGNvbXBvbmVudHM0LlNlbGVjdENvbnRhaW5lcixcbiAgICAgICAgICBWYWx1ZUNvbnRhaW5lciA9IF90aGlzJGNvbXBvbmVudHM0LlZhbHVlQ29udGFpbmVyO1xuICAgICAgdmFyIF90aGlzJHByb3BzMjAgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMjAuY2xhc3NOYW1lLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMyMC5pZCxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMyMC5pc0Rpc2FibGVkLFxuICAgICAgICAgIG1lbnVJc09wZW4gPSBfdGhpcyRwcm9wczIwLm1lbnVJc09wZW47XG4gICAgICB2YXIgaXNGb2N1c2VkID0gdGhpcy5zdGF0ZS5pc0ZvY3VzZWQ7XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzID0gdGhpcy5nZXRDb21tb25Qcm9wcygpO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0Q29udGFpbmVyLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93blxuICAgICAgICB9LFxuICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZFxuICAgICAgfSksIHRoaXMucmVuZGVyTGl2ZVJlZ2lvbigpLCBSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRyb2wsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRDb250cm9sUmVmLFxuICAgICAgICBpbm5lclByb3BzOiB7XG4gICAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25Db250cm9sTW91c2VEb3duLFxuICAgICAgICAgIG9uVG91Y2hFbmQ6IHRoaXMub25Db250cm9sVG91Y2hFbmRcbiAgICAgICAgfSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgIG1lbnVJc09wZW46IG1lbnVJc09wZW5cbiAgICAgIH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFZhbHVlQ29udGFpbmVyLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgfSksIHRoaXMucmVuZGVyUGxhY2Vob2xkZXJPclZhbHVlKCksIHRoaXMucmVuZGVySW5wdXQoKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kaWNhdG9yc0NvbnRhaW5lciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgICAgIH0pLCB0aGlzLnJlbmRlckNsZWFySW5kaWNhdG9yKCksIHRoaXMucmVuZGVyTG9hZGluZ0luZGljYXRvcigpLCB0aGlzLnJlbmRlckluZGljYXRvclNlcGFyYXRvcigpLCB0aGlzLnJlbmRlckRyb3Bkb3duSW5kaWNhdG9yKCkpKSwgdGhpcy5yZW5kZXJNZW51KCksIHRoaXMucmVuZGVyRm9ybUZpZWxkKCkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTZWxlY3Q7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShTZWxlY3QsIFwiZGVmYXVsdFByb3BzXCIsIGRlZmF1bHRQcm9wcyk7XG5cbmV4cG9ydCB7IFNlbGVjdCBhcyBTLCBkZWZhdWx0VGhlbWUgYXMgYSwgY3JlYXRlRmlsdGVyIGFzIGMsIGRlZmF1bHRQcm9wcyBhcyBkLCBtZXJnZVN0eWxlcyBhcyBtIH07XG4iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZCc7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrJztcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MnO1xuaW1wb3J0IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nO1xuaW1wb3J0IF9nZXRQcm90b3R5cGVPZiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZic7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzJztcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCc7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5JztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCwga2V5ZnJhbWVzLCBDbGFzc05hbWVzIH0gZnJvbSAnQGVtb3Rpb24vY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBfdHlwZW9mIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZic7XG5pbXBvcnQgeyBnIGFzIGdldEJvdW5kaW5nQ2xpZW50T2JqLCBhIGFzIGdldFNjcm9sbFBhcmVudCwgYiBhcyBnZXRTY3JvbGxUb3AsIGMgYXMgYW5pbWF0ZWRTY3JvbGxUbywgcyBhcyBzY3JvbGxUbyB9IGZyb20gJy4vY2h1bmstZThhZTRiMGYuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0IF9jc3MgZnJvbSAnQGVtb3Rpb24vY3NzJztcbmltcG9ydCBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCc7XG5pbXBvcnQgQXV0b3NpemVJbnB1dCBmcm9tICdyZWFjdC1pbnB1dC1hdXRvc2l6ZSc7XG5cbmZ1bmN0aW9uIGdldE1lbnVQbGFjZW1lbnQoX3JlZikge1xuICB2YXIgbWF4SGVpZ2h0ID0gX3JlZi5tYXhIZWlnaHQsXG4gICAgICBtZW51RWwgPSBfcmVmLm1lbnVFbCxcbiAgICAgIG1pbkhlaWdodCA9IF9yZWYubWluSGVpZ2h0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQsXG4gICAgICBzaG91bGRTY3JvbGwgPSBfcmVmLnNob3VsZFNjcm9sbCxcbiAgICAgIGlzRml4ZWRQb3NpdGlvbiA9IF9yZWYuaXNGaXhlZFBvc2l0aW9uLFxuICAgICAgdGhlbWUgPSBfcmVmLnRoZW1lO1xuICB2YXIgc3BhY2luZyA9IHRoZW1lLnNwYWNpbmc7XG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQobWVudUVsKTtcbiAgdmFyIGRlZmF1bHRTdGF0ZSA9IHtcbiAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgIG1heEhlaWdodDogbWF4SGVpZ2h0XG4gIH07IC8vIHNvbWV0aGluZyB3ZW50IHdyb25nLCByZXR1cm4gZGVmYXVsdCBzdGF0ZVxuXG4gIGlmICghbWVudUVsIHx8ICFtZW51RWwub2Zmc2V0UGFyZW50KSByZXR1cm4gZGVmYXVsdFN0YXRlOyAvLyB3ZSBjYW4ndCB0cnVzdCBgc2Nyb2xsUGFyZW50LnNjcm9sbEhlaWdodGAgLS0+IGl0IG1heSBpbmNyZWFzZSB3aGVuXG4gIC8vIHRoZSBtZW51IGlzIHJlbmRlcmVkXG5cbiAgdmFyIF9zY3JvbGxQYXJlbnQkZ2V0Qm91biA9IHNjcm9sbFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHNjcm9sbEhlaWdodCA9IF9zY3JvbGxQYXJlbnQkZ2V0Qm91bi5oZWlnaHQ7XG5cbiAgdmFyIF9tZW51RWwkZ2V0Qm91bmRpbmdDbCA9IG1lbnVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIG1lbnVCb3R0b20gPSBfbWVudUVsJGdldEJvdW5kaW5nQ2wuYm90dG9tLFxuICAgICAgbWVudUhlaWdodCA9IF9tZW51RWwkZ2V0Qm91bmRpbmdDbC5oZWlnaHQsXG4gICAgICBtZW51VG9wID0gX21lbnVFbCRnZXRCb3VuZGluZ0NsLnRvcDtcblxuICB2YXIgX21lbnVFbCRvZmZzZXRQYXJlbnQkID0gbWVudUVsLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIGNvbnRhaW5lclRvcCA9IF9tZW51RWwkb2Zmc2V0UGFyZW50JC50b3A7XG5cbiAgdmFyIHZpZXdIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gIHZhciBzY3JvbGxUb3AgPSBnZXRTY3JvbGxUb3Aoc2Nyb2xsUGFyZW50KTtcbiAgdmFyIG1hcmdpbkJvdHRvbSA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUobWVudUVsKS5tYXJnaW5Cb3R0b20sIDEwKTtcbiAgdmFyIG1hcmdpblRvcCA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUobWVudUVsKS5tYXJnaW5Ub3AsIDEwKTtcbiAgdmFyIHZpZXdTcGFjZUFib3ZlID0gY29udGFpbmVyVG9wIC0gbWFyZ2luVG9wO1xuICB2YXIgdmlld1NwYWNlQmVsb3cgPSB2aWV3SGVpZ2h0IC0gbWVudVRvcDtcbiAgdmFyIHNjcm9sbFNwYWNlQWJvdmUgPSB2aWV3U3BhY2VBYm92ZSArIHNjcm9sbFRvcDtcbiAgdmFyIHNjcm9sbFNwYWNlQmVsb3cgPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBtZW51VG9wO1xuICB2YXIgc2Nyb2xsRG93biA9IG1lbnVCb3R0b20gLSB2aWV3SGVpZ2h0ICsgc2Nyb2xsVG9wICsgbWFyZ2luQm90dG9tO1xuICB2YXIgc2Nyb2xsVXAgPSBzY3JvbGxUb3AgKyBtZW51VG9wIC0gbWFyZ2luVG9wO1xuICB2YXIgc2Nyb2xsRHVyYXRpb24gPSAxNjA7XG5cbiAgc3dpdGNoIChwbGFjZW1lbnQpIHtcbiAgICBjYXNlICdhdXRvJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgLy8gMTogdGhlIG1lbnUgd2lsbCBmaXQsIGRvIG5vdGhpbmdcbiAgICAgIGlmICh2aWV3U3BhY2VCZWxvdyA+PSBtZW51SGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfSAvLyAyOiB0aGUgbWVudSB3aWxsIGZpdCwgaWYgc2Nyb2xsZWRcblxuXG4gICAgICBpZiAoc2Nyb2xsU3BhY2VCZWxvdyA+PSBtZW51SGVpZ2h0ICYmICFpc0ZpeGVkUG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxEb3duLCBzY3JvbGxEdXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gMzogdGhlIG1lbnUgd2lsbCBmaXQsIGlmIGNvbnN0cmFpbmVkXG5cblxuICAgICAgaWYgKCFpc0ZpeGVkUG9zaXRpb24gJiYgc2Nyb2xsU3BhY2VCZWxvdyA+PSBtaW5IZWlnaHQgfHwgaXNGaXhlZFBvc2l0aW9uICYmIHZpZXdTcGFjZUJlbG93ID49IG1pbkhlaWdodCkge1xuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgYW5pbWF0ZWRTY3JvbGxUbyhzY3JvbGxQYXJlbnQsIHNjcm9sbERvd24sIHNjcm9sbER1cmF0aW9uKTtcbiAgICAgICAgfSAvLyB3ZSB3YW50IHRvIHByb3ZpZGUgYXMgbXVjaCBvZiB0aGUgbWVudSBhcyBwb3NzaWJsZSB0byB0aGUgdXNlcixcbiAgICAgICAgLy8gc28gZ2l2ZSB0aGVtIHdoYXRldmVyIGlzIGF2YWlsYWJsZSBiZWxvdyByYXRoZXIgdGhhbiB0aGUgbWluSGVpZ2h0LlxuXG5cbiAgICAgICAgdmFyIGNvbnN0cmFpbmVkSGVpZ2h0ID0gaXNGaXhlZFBvc2l0aW9uID8gdmlld1NwYWNlQmVsb3cgLSBtYXJnaW5Cb3R0b20gOiBzY3JvbGxTcGFjZUJlbG93IC0gbWFyZ2luQm90dG9tO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBjb25zdHJhaW5lZEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfSAvLyA0LiBGb3JrZWQgYmV2aW91ciB3aGVuIHRoZXJlIGlzbid0IGVub3VnaCBzcGFjZSBiZWxvd1xuICAgICAgLy8gQVVUTzogZmxpcCB0aGUgbWVudSwgcmVuZGVyIGFib3ZlXG5cblxuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gJ2F1dG8nIHx8IGlzRml4ZWRQb3NpdGlvbikge1xuICAgICAgICAvLyBtYXkgbmVlZCB0byBiZSBjb25zdHJhaW5lZCBhZnRlciBmbGlwcGluZ1xuICAgICAgICB2YXIgX2NvbnN0cmFpbmVkSGVpZ2h0ID0gbWF4SGVpZ2h0O1xuICAgICAgICB2YXIgc3BhY2VBYm92ZSA9IGlzRml4ZWRQb3NpdGlvbiA/IHZpZXdTcGFjZUFib3ZlIDogc2Nyb2xsU3BhY2VBYm92ZTtcblxuICAgICAgICBpZiAoc3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQpIHtcbiAgICAgICAgICBfY29uc3RyYWluZWRIZWlnaHQgPSBNYXRoLm1pbihzcGFjZUFib3ZlIC0gbWFyZ2luQm90dG9tIC0gc3BhY2luZy5jb250cm9sSGVpZ2h0LCBtYXhIZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgICAgIG1heEhlaWdodDogX2NvbnN0cmFpbmVkSGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9IC8vIEJPVFRPTTogYWxsb3cgYnJvd3NlciB0byBpbmNyZWFzZSBzY3JvbGxhYmxlIGFyZWEgYW5kIGltbWVkaWF0ZWx5IHNldCBzY3JvbGxcblxuXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAnYm90dG9tJykge1xuICAgICAgICBzY3JvbGxUbyhzY3JvbGxQYXJlbnQsIHNjcm9sbERvd24pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0b3AnOlxuICAgICAgLy8gMTogdGhlIG1lbnUgd2lsbCBmaXQsIGRvIG5vdGhpbmdcbiAgICAgIGlmICh2aWV3U3BhY2VBYm92ZSA+PSBtZW51SGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfSAvLyAyOiB0aGUgbWVudSB3aWxsIGZpdCwgaWYgc2Nyb2xsZWRcblxuXG4gICAgICBpZiAoc2Nyb2xsU3BhY2VBYm92ZSA+PSBtZW51SGVpZ2h0ICYmICFpc0ZpeGVkUG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxVcCwgc2Nyb2xsRHVyYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9IC8vIDM6IHRoZSBtZW51IHdpbGwgZml0LCBpZiBjb25zdHJhaW5lZFxuXG5cbiAgICAgIGlmICghaXNGaXhlZFBvc2l0aW9uICYmIHNjcm9sbFNwYWNlQWJvdmUgPj0gbWluSGVpZ2h0IHx8IGlzRml4ZWRQb3NpdGlvbiAmJiB2aWV3U3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQpIHtcbiAgICAgICAgdmFyIF9jb25zdHJhaW5lZEhlaWdodDIgPSBtYXhIZWlnaHQ7IC8vIHdlIHdhbnQgdG8gcHJvdmlkZSBhcyBtdWNoIG9mIHRoZSBtZW51IGFzIHBvc3NpYmxlIHRvIHRoZSB1c2VyLFxuICAgICAgICAvLyBzbyBnaXZlIHRoZW0gd2hhdGV2ZXIgaXMgYXZhaWxhYmxlIGJlbG93IHJhdGhlciB0aGFuIHRoZSBtaW5IZWlnaHQuXG5cbiAgICAgICAgaWYgKCFpc0ZpeGVkUG9zaXRpb24gJiYgc2Nyb2xsU3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQgfHwgaXNGaXhlZFBvc2l0aW9uICYmIHZpZXdTcGFjZUFib3ZlID49IG1pbkhlaWdodCkge1xuICAgICAgICAgIF9jb25zdHJhaW5lZEhlaWdodDIgPSBpc0ZpeGVkUG9zaXRpb24gPyB2aWV3U3BhY2VBYm92ZSAtIG1hcmdpblRvcCA6IHNjcm9sbFNwYWNlQWJvdmUgLSBtYXJnaW5Ub3A7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgYW5pbWF0ZWRTY3JvbGxUbyhzY3JvbGxQYXJlbnQsIHNjcm9sbFVwLCBzY3JvbGxEdXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBfY29uc3RyYWluZWRIZWlnaHQyXG4gICAgICAgIH07XG4gICAgICB9IC8vIDQuIG5vdCBlbm91Z2ggc3BhY2UsIHRoZSBicm93c2VyIFdJTEwgTk9UIGluY3JlYXNlIHNjcm9sbGFibGUgYXJlYSB3aGVuXG4gICAgICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgZWxlbWVudCByZW5kZXJlZCBhYm92ZSB0aGUgdmlld3BvcnQgKG9ubHkgYmVsb3cpLlxuICAgICAgLy8gRmxpcCB0aGUgbWVudSwgcmVuZGVyIGJlbG93XG5cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHRcbiAgICAgIH07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwbGFjZW1lbnQgcHJvdmlkZWQgXFxcIlwiLmNvbmNhdChwbGFjZW1lbnQsIFwiXFxcIi5cIikpO1xuICB9IC8vIGZ1bGZpbCBjb250cmFjdCB3aXRoIGZsb3c6IGltcGxpY2l0IHJldHVybiB2YWx1ZSBvZiB1bmRlZmluZWRcblxuXG4gIHJldHVybiBkZWZhdWx0U3RhdGU7XG59IC8vIE1lbnUgQ29tcG9uZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gYWxpZ25Ub0NvbnRyb2wocGxhY2VtZW50KSB7XG4gIHZhciBwbGFjZW1lbnRUb0NTU1Byb3AgPSB7XG4gICAgYm90dG9tOiAndG9wJyxcbiAgICB0b3A6ICdib3R0b20nXG4gIH07XG4gIHJldHVybiBwbGFjZW1lbnQgPyBwbGFjZW1lbnRUb0NTU1Byb3BbcGxhY2VtZW50XSA6ICdib3R0b20nO1xufVxuXG52YXIgY29lcmNlUGxhY2VtZW50ID0gZnVuY3Rpb24gY29lcmNlUGxhY2VtZW50KHApIHtcbiAgcmV0dXJuIHAgPT09ICdhdXRvJyA/ICdib3R0b20nIDogcDtcbn07XG5cbnZhciBtZW51Q1NTID0gZnVuY3Rpb24gbWVudUNTUyhfcmVmMikge1xuICB2YXIgX3JlZjM7XG5cbiAgdmFyIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIF9yZWYyJHRoZW1lID0gX3JlZjIudGhlbWUsXG4gICAgICBib3JkZXJSYWRpdXMgPSBfcmVmMiR0aGVtZS5ib3JkZXJSYWRpdXMsXG4gICAgICBzcGFjaW5nID0gX3JlZjIkdGhlbWUuc3BhY2luZyxcbiAgICAgIGNvbG9ycyA9IF9yZWYyJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9yZWYzID0ge1xuICAgIGxhYmVsOiAnbWVudSdcbiAgfSwgX2RlZmluZVByb3BlcnR5KF9yZWYzLCBhbGlnblRvQ29udHJvbChwbGFjZW1lbnQpLCAnMTAwJScpLCBfZGVmaW5lUHJvcGVydHkoX3JlZjMsIFwiYmFja2dyb3VuZENvbG9yXCIsIGNvbG9ycy5uZXV0cmFsMCksIF9kZWZpbmVQcm9wZXJ0eShfcmVmMywgXCJib3JkZXJSYWRpdXNcIiwgYm9yZGVyUmFkaXVzKSwgX2RlZmluZVByb3BlcnR5KF9yZWYzLCBcImJveFNoYWRvd1wiLCAnMCAwIDAgMXB4IGhzbGEoMCwgMCUsIDAlLCAwLjEpLCAwIDRweCAxMXB4IGhzbGEoMCwgMCUsIDAlLCAwLjEpJyksIF9kZWZpbmVQcm9wZXJ0eShfcmVmMywgXCJtYXJnaW5Cb3R0b21cIiwgc3BhY2luZy5tZW51R3V0dGVyKSwgX2RlZmluZVByb3BlcnR5KF9yZWYzLCBcIm1hcmdpblRvcFwiLCBzcGFjaW5nLm1lbnVHdXR0ZXIpLCBfZGVmaW5lUHJvcGVydHkoX3JlZjMsIFwicG9zaXRpb25cIiwgJ2Fic29sdXRlJyksIF9kZWZpbmVQcm9wZXJ0eShfcmVmMywgXCJ3aWR0aFwiLCAnMTAwJScpLCBfZGVmaW5lUHJvcGVydHkoX3JlZjMsIFwiekluZGV4XCIsIDEpLCBfcmVmMztcbn07IC8vIE5PVEU6IGludGVybmFsIG9ubHlcblxudmFyIE1lbnVQbGFjZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKE1lbnVQbGFjZXIsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIE1lbnVQbGFjZXIoKSB7XG4gICAgdmFyIF9nZXRQcm90b3R5cGVPZjI7XG5cbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWVudVBsYWNlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX2dldFByb3RvdHlwZU9mMiA9IF9nZXRQcm90b3R5cGVPZihNZW51UGxhY2VyKSkuY2FsbC5hcHBseShfZ2V0UHJvdG90eXBlT2YyLCBbdGhpc10uY29uY2F0KGFyZ3MpKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwic3RhdGVcIiwge1xuICAgICAgbWF4SGVpZ2h0OiBfdGhpcy5wcm9wcy5tYXhNZW51SGVpZ2h0LFxuICAgICAgcGxhY2VtZW50OiBudWxsXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiZ2V0UGxhY2VtZW50XCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG1pbk1lbnVIZWlnaHQgPSBfdGhpcyRwcm9wcy5taW5NZW51SGVpZ2h0LFxuICAgICAgICAgIG1heE1lbnVIZWlnaHQgPSBfdGhpcyRwcm9wcy5tYXhNZW51SGVpZ2h0LFxuICAgICAgICAgIG1lbnVQbGFjZW1lbnQgPSBfdGhpcyRwcm9wcy5tZW51UGxhY2VtZW50LFxuICAgICAgICAgIG1lbnVQb3NpdGlvbiA9IF90aGlzJHByb3BzLm1lbnVQb3NpdGlvbixcbiAgICAgICAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcgPSBfdGhpcyRwcm9wcy5tZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcsXG4gICAgICAgICAgdGhlbWUgPSBfdGhpcyRwcm9wcy50aGVtZTtcbiAgICAgIHZhciBnZXRQb3J0YWxQbGFjZW1lbnQgPSBfdGhpcy5jb250ZXh0LmdldFBvcnRhbFBsYWNlbWVudDtcbiAgICAgIGlmICghcmVmKSByZXR1cm47IC8vIERPIE5PVCBzY3JvbGwgaWYgcG9zaXRpb24gaXMgZml4ZWRcblxuICAgICAgdmFyIGlzRml4ZWRQb3NpdGlvbiA9IG1lbnVQb3NpdGlvbiA9PT0gJ2ZpeGVkJztcbiAgICAgIHZhciBzaG91bGRTY3JvbGwgPSBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcgJiYgIWlzRml4ZWRQb3NpdGlvbjtcbiAgICAgIHZhciBzdGF0ZSA9IGdldE1lbnVQbGFjZW1lbnQoe1xuICAgICAgICBtYXhIZWlnaHQ6IG1heE1lbnVIZWlnaHQsXG4gICAgICAgIG1lbnVFbDogcmVmLFxuICAgICAgICBtaW5IZWlnaHQ6IG1pbk1lbnVIZWlnaHQsXG4gICAgICAgIHBsYWNlbWVudDogbWVudVBsYWNlbWVudCxcbiAgICAgICAgc2hvdWxkU2Nyb2xsOiBzaG91bGRTY3JvbGwsXG4gICAgICAgIGlzRml4ZWRQb3NpdGlvbjogaXNGaXhlZFBvc2l0aW9uLFxuICAgICAgICB0aGVtZTogdGhlbWVcbiAgICAgIH0pO1xuICAgICAgaWYgKGdldFBvcnRhbFBsYWNlbWVudCkgZ2V0UG9ydGFsUGxhY2VtZW50KHN0YXRlKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoc3RhdGUpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImdldFVwZGF0ZWRQcm9wc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbWVudVBsYWNlbWVudCA9IF90aGlzLnByb3BzLm1lbnVQbGFjZW1lbnQ7XG4gICAgICB2YXIgcGxhY2VtZW50ID0gX3RoaXMuc3RhdGUucGxhY2VtZW50IHx8IGNvZXJjZVBsYWNlbWVudChtZW51UGxhY2VtZW50KTtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKHt9LCBfdGhpcy5wcm9wcywge1xuICAgICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgICAgbWF4SGVpZ2h0OiBfdGhpcy5zdGF0ZS5tYXhIZWlnaHRcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE1lbnVQbGFjZXIsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuKHtcbiAgICAgICAgcmVmOiB0aGlzLmdldFBsYWNlbWVudCxcbiAgICAgICAgcGxhY2VyUHJvcHM6IHRoaXMuZ2V0VXBkYXRlZFByb3BzKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBNZW51UGxhY2VyO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoTWVudVBsYWNlciwgXCJjb250ZXh0VHlwZXNcIiwge1xuICBnZXRQb3J0YWxQbGFjZW1lbnQ6IFByb3BUeXBlcy5mdW5jXG59KTtcblxudmFyIE1lbnUgPSBmdW5jdGlvbiBNZW51KHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgY3ggPSBwcm9wcy5jeCxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGlubmVyUmVmID0gcHJvcHMuaW5uZXJSZWYsXG4gICAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBnZXRTdHlsZXMoJ21lbnUnLCBwcm9wcyksXG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICBtZW51OiB0cnVlXG4gICAgfSwgY2xhc3NOYW1lKVxuICB9LCBpbm5lclByb3BzLCB7XG4gICAgcmVmOiBpbm5lclJlZlxuICB9KSwgY2hpbGRyZW4pO1xufTtcbi8vIE1lbnUgTGlzdFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBtZW51TGlzdENTUyA9IGZ1bmN0aW9uIG1lbnVMaXN0Q1NTKF9yZWY0KSB7XG4gIHZhciBtYXhIZWlnaHQgPSBfcmVmNC5tYXhIZWlnaHQsXG4gICAgICBiYXNlVW5pdCA9IF9yZWY0LnRoZW1lLnNwYWNpbmcuYmFzZVVuaXQ7XG4gIHJldHVybiB7XG4gICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHQsXG4gICAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gICAgcGFkZGluZ0JvdHRvbTogYmFzZVVuaXQsXG4gICAgcGFkZGluZ1RvcDogYmFzZVVuaXQsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgLy8gcmVxdWlyZWQgZm9yIG9mZnNldFtIZWlnaHQsIFRvcF0gPiBrZXlib2FyZCBzY3JvbGxcbiAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJ1xuICB9O1xufTtcbnZhciBNZW51TGlzdCA9IGZ1bmN0aW9uIE1lbnVMaXN0KHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgY3ggPSBwcm9wcy5jeCxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGlzTXVsdGkgPSBwcm9wcy5pc011bHRpLFxuICAgICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZjtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCB7XG4gICAgY3NzOiBnZXRTdHlsZXMoJ21lbnVMaXN0JywgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgJ21lbnUtbGlzdCc6IHRydWUsXG4gICAgICAnbWVudS1saXN0LS1pcy1tdWx0aSc6IGlzTXVsdGlcbiAgICB9LCBjbGFzc05hbWUpLFxuICAgIHJlZjogaW5uZXJSZWZcbiAgfSwgY2hpbGRyZW4pO1xufTsgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNZW51IE5vdGljZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbm90aWNlQ1NTID0gZnVuY3Rpb24gbm90aWNlQ1NTKF9yZWY1KSB7XG4gIHZhciBfcmVmNSR0aGVtZSA9IF9yZWY1LnRoZW1lLFxuICAgICAgYmFzZVVuaXQgPSBfcmVmNSR0aGVtZS5zcGFjaW5nLmJhc2VVbml0LFxuICAgICAgY29sb3JzID0gX3JlZjUkdGhlbWUuY29sb3JzO1xuICByZXR1cm4ge1xuICAgIGNvbG9yOiBjb2xvcnMubmV1dHJhbDQwLFxuICAgIHBhZGRpbmc6IFwiXCIuY29uY2F0KGJhc2VVbml0ICogMiwgXCJweCBcIikuY29uY2F0KGJhc2VVbml0ICogMywgXCJweFwiKSxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInXG4gIH07XG59O1xuXG52YXIgbm9PcHRpb25zTWVzc2FnZUNTUyA9IG5vdGljZUNTUztcbnZhciBsb2FkaW5nTWVzc2FnZUNTUyA9IG5vdGljZUNTUztcbnZhciBOb09wdGlvbnNNZXNzYWdlID0gZnVuY3Rpb24gTm9PcHRpb25zTWVzc2FnZShwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBnZXRTdHlsZXMoJ25vT3B0aW9uc01lc3NhZ2UnLCBwcm9wcyksXG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICAnbWVudS1ub3RpY2UnOiB0cnVlLFxuICAgICAgJ21lbnUtbm90aWNlLS1uby1vcHRpb25zJzogdHJ1ZVxuICAgIH0sIGNsYXNzTmFtZSlcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG5Ob09wdGlvbnNNZXNzYWdlLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hpbGRyZW46ICdObyBvcHRpb25zJ1xufTtcbnZhciBMb2FkaW5nTWVzc2FnZSA9IGZ1bmN0aW9uIExvYWRpbmdNZXNzYWdlKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgY3ggPSBwcm9wcy5jeCxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGdldFN0eWxlcygnbG9hZGluZ01lc3NhZ2UnLCBwcm9wcyksXG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICAnbWVudS1ub3RpY2UnOiB0cnVlLFxuICAgICAgJ21lbnUtbm90aWNlLS1sb2FkaW5nJzogdHJ1ZVxuICAgIH0sIGNsYXNzTmFtZSlcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG5Mb2FkaW5nTWVzc2FnZS5kZWZhdWx0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiAnTG9hZGluZy4uLidcbn07IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTWVudSBQb3J0YWxcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbWVudVBvcnRhbENTUyA9IGZ1bmN0aW9uIG1lbnVQb3J0YWxDU1MoX3JlZjYpIHtcbiAgdmFyIHJlY3QgPSBfcmVmNi5yZWN0LFxuICAgICAgb2Zmc2V0ID0gX3JlZjYub2Zmc2V0LFxuICAgICAgcG9zaXRpb24gPSBfcmVmNi5wb3NpdGlvbjtcbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIHRvcDogb2Zmc2V0LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIHpJbmRleDogMVxuICB9O1xufTtcbnZhciBNZW51UG9ydGFsID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50Mikge1xuICBfaW5oZXJpdHMoTWVudVBvcnRhbCwgX0NvbXBvbmVudDIpO1xuXG4gIGZ1bmN0aW9uIE1lbnVQb3J0YWwoKSB7XG4gICAgdmFyIF9nZXRQcm90b3R5cGVPZjM7XG5cbiAgICB2YXIgX3RoaXMyO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1lbnVQb3J0YWwpO1xuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgX3RoaXMyID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9nZXRQcm90b3R5cGVPZjMgPSBfZ2V0UHJvdG90eXBlT2YoTWVudVBvcnRhbCkpLmNhbGwuYXBwbHkoX2dldFByb3RvdHlwZU9mMywgW3RoaXNdLmNvbmNhdChhcmdzKSkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpczIpKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBwbGFjZW1lbnQ6IG51bGxcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMyKSksIFwiZ2V0UG9ydGFsUGxhY2VtZW50XCIsIGZ1bmN0aW9uIChfcmVmNykge1xuICAgICAgdmFyIHBsYWNlbWVudCA9IF9yZWY3LnBsYWNlbWVudDtcbiAgICAgIHZhciBpbml0aWFsUGxhY2VtZW50ID0gY29lcmNlUGxhY2VtZW50KF90aGlzMi5wcm9wcy5tZW51UGxhY2VtZW50KTsgLy8gYXZvaWQgcmUtcmVuZGVycyBpZiB0aGUgcGxhY2VtZW50IGhhcyBub3QgY2hhbmdlZFxuXG4gICAgICBpZiAocGxhY2VtZW50ICE9PSBpbml0aWFsUGxhY2VtZW50KSB7XG4gICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXMyO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE1lbnVQb3J0YWwsIFt7XG4gICAga2V5OiBcImdldENoaWxkQ29udGV4dFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXRQb3J0YWxQbGFjZW1lbnQ6IHRoaXMuZ2V0UG9ydGFsUGxhY2VtZW50XG4gICAgICB9O1xuICAgIH0gLy8gY2FsbGJhY2sgZm9yIG9jY2Fzc2lvbnMgd2hlcmUgdGhlIG1lbnUgbXVzdCBcImZsaXBcIlxuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFwcGVuZFRvID0gX3RoaXMkcHJvcHMyLmFwcGVuZFRvLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMyLmNoaWxkcmVuLFxuICAgICAgICAgIGNvbnRyb2xFbGVtZW50ID0gX3RoaXMkcHJvcHMyLmNvbnRyb2xFbGVtZW50LFxuICAgICAgICAgIG1lbnVQbGFjZW1lbnQgPSBfdGhpcyRwcm9wczIubWVudVBsYWNlbWVudCxcbiAgICAgICAgICBwb3NpdGlvbiA9IF90aGlzJHByb3BzMi5tZW51UG9zaXRpb24sXG4gICAgICAgICAgZ2V0U3R5bGVzID0gX3RoaXMkcHJvcHMyLmdldFN0eWxlcztcbiAgICAgIHZhciBpc0ZpeGVkID0gcG9zaXRpb24gPT09ICdmaXhlZCc7IC8vIGJhaWwgZWFybHkgaWYgcmVxdWlyZWQgZWxlbWVudHMgYXJlbid0IHByZXNlbnRcblxuICAgICAgaWYgKCFhcHBlbmRUbyAmJiAhaXNGaXhlZCB8fCAhY29udHJvbEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBwbGFjZW1lbnQgPSB0aGlzLnN0YXRlLnBsYWNlbWVudCB8fCBjb2VyY2VQbGFjZW1lbnQobWVudVBsYWNlbWVudCk7XG4gICAgICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50T2JqKGNvbnRyb2xFbGVtZW50KTtcbiAgICAgIHZhciBzY3JvbGxEaXN0YW5jZSA9IGlzRml4ZWQgPyAwIDogd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgdmFyIG9mZnNldCA9IHJlY3RbcGxhY2VtZW50XSArIHNjcm9sbERpc3RhbmNlO1xuICAgICAgdmFyIHN0YXRlID0ge1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICByZWN0OiByZWN0XG4gICAgICB9OyAvLyBzYW1lIHdyYXBwZXIgZWxlbWVudCB3aGV0aGVyIGZpeGVkIG9yIHBvcnRhbGxlZFxuXG4gICAgICB2YXIgbWVudVdyYXBwZXIgPSBqc3goXCJkaXZcIiwge1xuICAgICAgICBjc3M6IGdldFN0eWxlcygnbWVudVBvcnRhbCcsIHN0YXRlKVxuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgICAgcmV0dXJuIGFwcGVuZFRvID8gY3JlYXRlUG9ydGFsKG1lbnVXcmFwcGVyLCBhcHBlbmRUbykgOiBtZW51V3JhcHBlcjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTWVudVBvcnRhbDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KE1lbnVQb3J0YWwsIFwiY2hpbGRDb250ZXh0VHlwZXNcIiwge1xuICBnZXRQb3J0YWxQbGFjZW1lbnQ6IFByb3BUeXBlcy5mdW5jXG59KTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xudmFyIGtleUxpc3QgPSBPYmplY3Qua2V5cztcbnZhciBoYXNQcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gZXF1YWwoYSwgYikge1xuICAvLyBmYXN0LWRlZXAtZXF1YWwgaW5kZXguanMgMi4wLjFcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIGlmIChhICYmIGIgJiYgX3R5cGVvZihhKSA9PSAnb2JqZWN0JyAmJiBfdHlwZW9mKGIpID09ICdvYmplY3QnKSB7XG4gICAgdmFyIGFyckEgPSBpc0FycmF5KGEpLFxuICAgICAgICBhcnJCID0gaXNBcnJheShiKSxcbiAgICAgICAgaSxcbiAgICAgICAgbGVuZ3RoLFxuICAgICAgICBrZXk7XG5cbiAgICBpZiAoYXJyQSAmJiBhcnJCKSB7XG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICAgIGlmICghZXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGFyckEgIT0gYXJyQikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBkYXRlQSA9IGEgaW5zdGFuY2VvZiBEYXRlLFxuICAgICAgICBkYXRlQiA9IGIgaW5zdGFuY2VvZiBEYXRlO1xuICAgIGlmIChkYXRlQSAhPSBkYXRlQikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChkYXRlQSAmJiBkYXRlQikgcmV0dXJuIGEuZ2V0VGltZSgpID09IGIuZ2V0VGltZSgpO1xuICAgIHZhciByZWdleHBBID0gYSBpbnN0YW5jZW9mIFJlZ0V4cCxcbiAgICAgICAgcmVnZXhwQiA9IGIgaW5zdGFuY2VvZiBSZWdFeHA7XG4gICAgaWYgKHJlZ2V4cEEgIT0gcmVnZXhwQikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChyZWdleHBBICYmIHJlZ2V4cEIpIHJldHVybiBhLnRvU3RyaW5nKCkgPT0gYi50b1N0cmluZygpO1xuICAgIHZhciBrZXlzID0ga2V5TGlzdChhKTtcbiAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGggIT09IGtleUxpc3QoYikubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICBpZiAoIWhhc1Byb3AuY2FsbChiLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gZW5kIGZhc3QtZGVlcC1lcXVhbFxuICAgIC8vIEN1c3RvbSBoYW5kbGluZyBmb3IgUmVhY3RcblxuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5ID09PSAnX293bmVyJyAmJiBhLiQkdHlwZW9mKSB7XG4gICAgICAgIC8vIFJlYWN0LXNwZWNpZmljOiBhdm9pZCB0cmF2ZXJzaW5nIFJlYWN0IGVsZW1lbnRzJyBfb3duZXIuXG4gICAgICAgIC8vICBfb3duZXIgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgICAgICAvLyBhbmQgaXMgbm90IG5lZWRlZCB3aGVuIGNvbXBhcmluZyB0aGUgYWN0dWFsIGVsZW1lbnRzIChhbmQgbm90IHRoZWlyIG93bmVycylcbiAgICAgICAgLy8gLiQkdHlwZW9mIGFuZCAuX3N0b3JlIG9uIGp1c3QgcmVhc29uYWJsZSBtYXJrZXJzIG9mIGEgcmVhY3QgZWxlbWVudFxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFsbCBvdGhlciBwcm9wZXJ0aWVzIHNob3VsZCBiZSB0cmF2ZXJzZWQgYXMgdXN1YWxcbiAgICAgICAgaWYgKCFlcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IC8vIGZhc3QtZGVlcC1lcXVhbCBpbmRleC5qcyAyLjAuMVxuXG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBhICE9PSBhICYmIGIgIT09IGI7XG59IC8vIGVuZCBmYXN0LWRlZXAtZXF1YWxcblxuXG5mdW5jdGlvbiBleHBvcnRlZEVxdWFsKGEsIGIpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXF1YWwoYSwgYik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5tYXRjaCgvc3RhY2t8cmVjdXJzaW9uL2kpKSB7XG4gICAgICAvLyB3YXJuIG9uIGNpcmN1bGFyIHJlZmVyZW5jZXMsIGRvbid0IGNyYXNoXG4gICAgICAvLyBicm93c2VycyBnaXZlIHRoaXMgZGlmZmVyZW50IGVycm9ycyBuYW1lIGFuZCBtZXNzYWdlczpcbiAgICAgIC8vIGNocm9tZS9zYWZhcmk6IFwiUmFuZ2VFcnJvclwiLCBcIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCJcbiAgICAgIC8vIGZpcmVmb3g6IFwiSW50ZXJuYWxFcnJvclwiLCB0b28gbXVjaCByZWN1cnNpb25cIlxuICAgICAgLy8gZWRnZTogXCJFcnJvclwiLCBcIk91dCBvZiBzdGFjayBzcGFjZVwiXG4gICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IHJlYWN0LWZhc3QtY29tcGFyZSBkb2VzIG5vdCBoYW5kbGUgY2lyY3VsYXIgcmVmZXJlbmNlcy4nLCBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIHNvbWUgb3RoZXIgZXJyb3IuIHdlIHNob3VsZCBkZWZpbml0ZWx5IGtub3cgYWJvdXQgdGhlc2VcblxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxudmFyIGNvbnRhaW5lckNTUyA9IGZ1bmN0aW9uIGNvbnRhaW5lckNTUyhfcmVmKSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgaXNSdGwgPSBfcmVmLmlzUnRsO1xuICByZXR1cm4ge1xuICAgIGxhYmVsOiAnY29udGFpbmVyJyxcbiAgICBkaXJlY3Rpb246IGlzUnRsID8gJ3J0bCcgOiBudWxsLFxuICAgIHBvaW50ZXJFdmVudHM6IGlzRGlzYWJsZWQgPyAnbm9uZScgOiBudWxsLFxuICAgIC8vIGNhbmNlbCBtb3VzZSBldmVudHMgd2hlbiBkaXNhYmxlZFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gIH07XG59O1xudmFyIFNlbGVjdENvbnRhaW5lciA9IGZ1bmN0aW9uIFNlbGVjdENvbnRhaW5lcihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgaXNSdGwgPSBwcm9wcy5pc1J0bDtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBnZXRTdHlsZXMoJ2NvbnRhaW5lcicsIHByb3BzKSxcbiAgICBjbGFzc05hbWU6IGN4KHtcbiAgICAgICctLWlzLWRpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAgICctLWlzLXJ0bCc6IGlzUnRsXG4gICAgfSwgY2xhc3NOYW1lKVxuICB9LCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTsgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBWYWx1ZSBDb250YWluZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgdmFsdWVDb250YWluZXJDU1MgPSBmdW5jdGlvbiB2YWx1ZUNvbnRhaW5lckNTUyhfcmVmMikge1xuICB2YXIgc3BhY2luZyA9IF9yZWYyLnRoZW1lLnNwYWNpbmc7XG4gIHJldHVybiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXg6IDEsXG4gICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICBwYWRkaW5nOiBcIlwiLmNvbmNhdChzcGFjaW5nLmJhc2VVbml0IC8gMiwgXCJweCBcIikuY29uY2F0KHNwYWNpbmcuYmFzZVVuaXQgKiAyLCBcInB4XCIpLFxuICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICB9O1xufTtcbnZhciBWYWx1ZUNvbnRhaW5lciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVmFsdWVDb250YWluZXIsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFZhbHVlQ29udGFpbmVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBWYWx1ZUNvbnRhaW5lcik7XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFZhbHVlQ29udGFpbmVyKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhWYWx1ZUNvbnRhaW5lciwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgY3ggPSBfdGhpcyRwcm9wcy5jeCxcbiAgICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHMuaXNNdWx0aSxcbiAgICAgICAgICBnZXRTdHlsZXMgPSBfdGhpcyRwcm9wcy5nZXRTdHlsZXMsXG4gICAgICAgICAgaGFzVmFsdWUgPSBfdGhpcyRwcm9wcy5oYXNWYWx1ZTtcbiAgICAgIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgICAgICBjc3M6IGdldFN0eWxlcygndmFsdWVDb250YWluZXInLCB0aGlzLnByb3BzKSxcbiAgICAgICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICAgICAgJ3ZhbHVlLWNvbnRhaW5lcic6IHRydWUsXG4gICAgICAgICAgJ3ZhbHVlLWNvbnRhaW5lci0taXMtbXVsdGknOiBpc011bHRpLFxuICAgICAgICAgICd2YWx1ZS1jb250YWluZXItLWhhcy12YWx1ZSc6IGhhc1ZhbHVlXG4gICAgICAgIH0sIGNsYXNzTmFtZSlcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVmFsdWVDb250YWluZXI7XG59KENvbXBvbmVudCk7IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSW5kaWNhdG9yIENvbnRhaW5lclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBpbmRpY2F0b3JzQ29udGFpbmVyQ1NTID0gZnVuY3Rpb24gaW5kaWNhdG9yc0NvbnRhaW5lckNTUygpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBhbGlnblNlbGY6ICdzdHJldGNoJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleFNocmluazogMFxuICB9O1xufTtcbnZhciBJbmRpY2F0b3JzQ29udGFpbmVyID0gZnVuY3Rpb24gSW5kaWNhdG9yc0NvbnRhaW5lcihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNzczogZ2V0U3R5bGVzKCdpbmRpY2F0b3JzQ29udGFpbmVyJywgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgaW5kaWNhdG9yczogdHJ1ZVxuICAgIH0sIGNsYXNzTmFtZSlcbiAgfSwgY2hpbGRyZW4pO1xufTtcblxuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICB2YXIgZGF0YSA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAwJSwgODAlLCAxMDAlIHsgb3BhY2l0eTogMDsgfVxcbiAgNDAlIHsgb3BhY2l0eTogMTsgfVxcblwiXSk7XG5cbiAgX3RlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICAgIHJldHVybiBkYXRhO1xuICB9O1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTlicWgyclwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7bGluZS1oZWlnaHQ6MTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDowO1wiXG59IDoge1xuICBuYW1lOiBcIjE5YnFoMnJcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lLWJsb2NrO2ZpbGw6Y3VycmVudENvbG9yO2xpbmUtaGVpZ2h0OjE7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MDtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltbHVaR2xqWVhSdmNuTXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCYTBKSklpd2labWxzWlNJNkltbHVaR2xqWVhSdmNuTXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdkx5QkFabXh2ZDF4dUx5b3FJRUJxYzNnZ2FuTjRJQ292WEc1cGJYQnZjblFnZXlCMGVYQmxJRTV2WkdVZ2ZTQm1jbTl0SUNkeVpXRmpkQ2M3WEc1cGJYQnZjblFnZXlCcWMzZ3NJR3RsZVdaeVlXMWxjeUI5SUdaeWIyMGdKMEJsYlc5MGFXOXVMMk52Y21Vbk8xeHVYRzVwYlhCdmNuUWdkSGx3WlNCN0lFTnZiVzF2YmxCeWIzQnpMQ0JVYUdWdFpTQjlJR1p5YjIwZ0p5NHVMM1I1Y0dWekp6dGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCRWNtOXdaRzkzYmlBbUlFTnNaV0Z5SUVsamIyNXpYRzR2THlBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNibHh1WTI5dWMzUWdVM1puSUQwZ0tIc2djMmw2WlN3Z0xpNHVjSEp2Y0hNZ2ZUb2dleUJ6YVhwbE9pQnVkVzFpWlhJZ2ZTa2dQVDRnS0Z4dUlDQThjM1puWEc0Z0lDQWdhR1ZwWjJoMFBYdHphWHBsZlZ4dUlDQWdJSGRwWkhSb1BYdHphWHBsZlZ4dUlDQWdJSFpwWlhkQ2IzZzlYQ0l3SURBZ01qQWdNakJjSWx4dUlDQWdJR0Z5YVdFdGFHbGtaR1Z1UFZ3aWRISjFaVndpWEc0Z0lDQWdabTlqZFhOaFlteGxQVndpWm1Gc2MyVmNJbHh1SUNBZ0lHTnpjejE3ZTF4dUlDQWdJQ0FnWkdsemNHeGhlVG9nSjJsdWJHbHVaUzFpYkc5amF5Y3NYRzRnSUNBZ0lDQm1hV3hzT2lBblkzVnljbVZ1ZEVOdmJHOXlKeXhjYmlBZ0lDQWdJR3hwYm1WSVpXbG5hSFE2SURFc1hHNGdJQ0FnSUNCemRISnZhMlU2SUNkamRYSnlaVzUwUTI5c2IzSW5MRnh1SUNBZ0lDQWdjM1J5YjJ0bFYybGtkR2c2SURBc1hHNGdJQ0FnZlgxY2JpQWdJQ0I3TGk0dWNISnZjSE45WEc0Z0lDOCtYRzRwTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnUTNKdmMzTkpZMjl1SUQwZ0tIQnliM0J6T2lCaGJua3BJRDArSUNoY2JpQWdQRk4yWnlCemFYcGxQWHN5TUgwZ2V5NHVMbkJ5YjNCemZUNWNiaUFnSUNBOGNHRjBhQ0JrUFZ3aVRURTBMak0wT0NBeE5DNDRORGxqTFRBdU5EWTVJREF1TkRZNUxURXVNakk1SURBdU5EWTVMVEV1TmprM0lEQnNMVEl1TmpVeExUTXVNRE13TFRJdU5qVXhJRE11TURJNVl5MHdMalEyT1NBd0xqUTJPUzB4TGpJeU9TQXdMalEyT1MweExqWTVOeUF3TFRBdU5EWTVMVEF1TkRZNUxUQXVORFk1TFRFdU1qSTVJREF0TVM0Mk9UZHNNaTQzTlRndE15NHhOUzB5TGpjMU9TMHpMakUxTW1NdE1DNDBOamt0TUM0ME5qa3RNQzQwTmprdE1TNHlNamdnTUMweExqWTVOM014TGpJeU9DMHdMalEyT1NBeExqWTVOeUF3YkRJdU5qVXlJRE11TURNeElESXVOalV4TFRNdU1ETXhZekF1TkRZNUxUQXVORFk1SURFdU1qSTRMVEF1TkRZNUlERXVOamszSURCek1DNDBOamtnTVM0eU1qa2dNQ0F4TGpZNU4yd3RNaTQzTlRnZ015NHhOVElnTWk0M05UZ2dNeTR4TldNd0xqUTJPU0F3TGpRMk9TQXdMalEyT1NBeExqSXlPU0F3SURFdU5qazRlbHdpSUM4K1hHNGdJRHd2VTNablBseHVLVHRjYm1WNGNHOXlkQ0JqYjI1emRDQkViM2R1UTJobGRuSnZiaUE5SUNod2NtOXdjem9nWVc1NUtTQTlQaUFvWEc0Z0lEeFRkbWNnYzJsNlpUMTdNakI5SUhzdUxpNXdjbTl3YzMwK1hHNGdJQ0FnUEhCaGRHZ2daRDFjSWswMExqVXhOaUEzTGpVME9HTXdMalF6Tmkwd0xqUTBOaUF4TGpBME15MHdMalE0TVNBeExqVTNOaUF3YkRNdU9UQTRJRE11TnpRM0lETXVPVEE0TFRNdU56UTNZekF1TlRNekxUQXVORGd4SURFdU1UUXhMVEF1TkRRMklERXVOVGMwSURBZ01DNDBNellnTUM0ME5EVWdNQzQwTURnZ01TNHhPVGNnTUNBeExqWXhOUzB3TGpRd05pQXdMalF4T0MwMExqWTVOU0EwTGpVd01pMDBMalk1TlNBMExqVXdNaTB3TGpJeE55QXdMakl5TXkwd0xqVXdNaUF3TGpNek5TMHdMamM0TnlBd0xqTXpOWE10TUM0MU55MHdMakV4TWkwd0xqYzRPUzB3TGpNek5XTXdJREF0TkM0eU9EY3ROQzR3T0RRdE5DNDJPVFV0TkM0MU1ESnpMVEF1TkRNMkxURXVNVGNnTUMweExqWXhOWHBjSWlBdlBseHVJQ0E4TDFOMlp6NWNiaWs3WEc1Y2JpOHZJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dUx5OGdSSEp2Y0dSdmQyNGdKaUJEYkdWaGNpQkNkWFIwYjI1elhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JseHVaWGh3YjNKMElIUjVjR1VnU1c1a2FXTmhkRzl5VUhKdmNITWdQU0JEYjIxdGIyNVFjbTl3Y3lBbUlIdGNiaUFnTHlvcUlGUm9aU0JqYUdsc1pISmxiaUIwYnlCaVpTQnlaVzVrWlhKbFpDQnBibk5wWkdVZ2RHaGxJR2x1WkdsallYUnZjaTRnS2k5Y2JpQWdZMmhwYkdSeVpXNDZJRTV2WkdVc1hHNGdJQzhxS2lCUWNtOXdjeUIwYUdGMElIZHBiR3dnWW1VZ2NHRnpjMlZrSUc5dUlIUnZJSFJvWlNCamFHbHNaSEpsYmk0Z0tpOWNiaUFnYVc1dVpYSlFjbTl3Y3pvZ1lXNTVMRnh1SUNBdktpb2dWR2hsSUdadlkzVnpaV1FnYzNSaGRHVWdiMllnZEdobElITmxiR1ZqZEM0Z0tpOWNiaUFnYVhOR2IyTjFjMlZrT2lCaWIyOXNaV0Z1TEZ4dUlDQXZLaW9nVjJobGRHaGxjaUIwYUdVZ2RHVjRkQ0JwY3lCeWFXZG9kQ0IwYnlCc1pXWjBJQ292WEc0Z0lHbHpVblJzT2lCaWIyOXNaV0Z1TEZ4dWZUdGNibHh1WTI5dWMzUWdZbUZ6WlVOVFV5QTlJQ2g3WEc0Z0lHbHpSbTlqZFhObFpDeGNiaUFnZEdobGJXVTZJSHRjYmlBZ0lDQnpjR0ZqYVc1bk9pQjdJR0poYzJWVmJtbDBJSDBzWEc0Z0lDQWdZMjlzYjNKekxGeHVJQ0I5TEZ4dWZUb2dTVzVrYVdOaGRHOXlVSEp2Y0hNcElEMCtJQ2g3WEc0Z0lHeGhZbVZzT2lBbmFXNWthV05oZEc5eVEyOXVkR0ZwYm1WeUp5eGNiaUFnWTI5c2IzSTZJR2x6Um05amRYTmxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNOakFnT2lCamIyeHZjbk11Ym1WMWRISmhiREl3TEZ4dUlDQmthWE53YkdGNU9pQW5abXhsZUNjc1hHNGdJSEJoWkdScGJtYzZJR0poYzJWVmJtbDBJQ29nTWl4Y2JpQWdkSEpoYm5OcGRHbHZiam9nSjJOdmJHOXlJREUxTUcxekp5eGNibHh1SUNBbk9taHZkbVZ5SnpvZ2UxeHVJQ0FnSUdOdmJHOXlPaUJwYzBadlkzVnpaV1FnUHlCamIyeHZjbk11Ym1WMWRISmhiRGd3SURvZ1kyOXNiM0p6TG01bGRYUnlZV3cwTUN4Y2JpQWdmU3hjYm4wcE8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1pISnZjR1J2ZDI1SmJtUnBZMkYwYjNKRFUxTWdQU0JpWVhObFExTlRPMXh1Wlhod2IzSjBJR052Ym5OMElFUnliM0JrYjNkdVNXNWthV05oZEc5eUlEMGdLSEJ5YjNCek9pQkpibVJwWTJGMGIzSlFjbTl3Y3lrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOb2FXeGtjbVZ1TENCamJHRnpjMDVoYldVc0lHTjRMQ0JuWlhSVGRIbHNaWE1zSUdsdWJtVnlVSEp2Y0hNZ2ZTQTlJSEJ5YjNCek8xeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJSHN1TGk1cGJtNWxjbEJ5YjNCemZWeHVJQ0FnSUNBZ1kzTnpQWHRuWlhSVGRIbHNaWE1vSjJSeWIzQmtiM2R1U1c1a2FXTmhkRzl5Snl3Z2NISnZjSE1wZlZ4dUlDQWdJQ0FnWTJ4aGMzTk9ZVzFsUFh0amVDaGNiaUFnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUdsdVpHbGpZWFJ2Y2pvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnSUNBblpISnZjR1J2ZDI0dGFXNWthV05oZEc5eUp6b2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdZMnhoYzNOT1lXMWxYRzRnSUNBZ0lDQXBmVnh1SUNBZ0lENWNiaUFnSUNBZ0lIdGphR2xzWkhKbGJpQjhmQ0E4Ukc5M2JrTm9aWFp5YjI0Z0x6NTlYRzRnSUNBZ1BDOWthWFkrWEc0Z0lDazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWTJ4bFlYSkpibVJwWTJGMGIzSkRVMU1nUFNCaVlYTmxRMU5UTzF4dVpYaHdiM0owSUdOdmJuTjBJRU5zWldGeVNXNWthV05oZEc5eUlEMGdLSEJ5YjNCek9pQkpibVJwWTJGMGIzSlFjbTl3Y3lrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOb2FXeGtjbVZ1TENCamJHRnpjMDVoYldVc0lHTjRMQ0JuWlhSVGRIbHNaWE1zSUdsdWJtVnlVSEp2Y0hNZ2ZTQTlJSEJ5YjNCek8xeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJSHN1TGk1cGJtNWxjbEJ5YjNCemZWeHVJQ0FnSUNBZ1kzTnpQWHRuWlhSVGRIbHNaWE1vSjJOc1pXRnlTVzVrYVdOaGRHOXlKeXdnY0hKdmNITXBmVnh1SUNBZ0lDQWdZMnhoYzNOT1lXMWxQWHRqZUNoY2JpQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJR2x1WkdsallYUnZjam9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdJQ0FuWTJ4bFlYSXRhVzVrYVdOaGRHOXlKem9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnWTJ4aGMzTk9ZVzFsWEc0Z0lDQWdJQ0FwZlZ4dUlDQWdJRDVjYmlBZ0lDQWdJSHRqYUdsc1pISmxiaUI4ZkNBOFEzSnZjM05KWTI5dUlDOCtmVnh1SUNBZ0lEd3ZaR2wyUGx4dUlDQXBPMXh1ZlR0Y2JseHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMeUJUWlhCaGNtRjBiM0pjYmk4dklEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1WEc1MGVYQmxJRk5sY0dGeVlYUnZjbE4wWVhSbElEMGdleUJwYzBScGMyRmliR1ZrT2lCaWIyOXNaV0Z1SUgwN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCcGJtUnBZMkYwYjNKVFpYQmhjbUYwYjNKRFUxTWdQU0FvZTF4dUlDQnBjMFJwYzJGaWJHVmtMRnh1SUNCMGFHVnRaVG9nZTF4dUlDQWdJSE53WVdOcGJtYzZJSHNnWW1GelpWVnVhWFFnZlN4Y2JpQWdJQ0JqYjJ4dmNuTXNYRzRnSUgwc1hHNTlPaUJEYjIxdGIyNVFjbTl3Y3lBbUlGTmxjR0Z5WVhSdmNsTjBZWFJsS1NBOVBpQW9lMXh1SUNCc1lXSmxiRG9nSjJsdVpHbGpZWFJ2Y2xObGNHRnlZWFJ2Y2ljc1hHNGdJR0ZzYVdkdVUyVnNaam9nSjNOMGNtVjBZMmduTEZ4dUlDQmlZV05yWjNKdmRXNWtRMjlzYjNJNklHbHpSR2x6WVdKc1pXUWdQeUJqYjJ4dmNuTXVibVYxZEhKaGJERXdJRG9nWTI5c2IzSnpMbTVsZFhSeVlXd3lNQ3hjYmlBZ2JXRnlaMmx1UW05MGRHOXRPaUJpWVhObFZXNXBkQ0FxSURJc1hHNGdJRzFoY21kcGJsUnZjRG9nWW1GelpWVnVhWFFnS2lBeUxGeHVJQ0IzYVdSMGFEb2dNU3hjYm4wcE8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1NXNWthV05oZEc5eVUyVndZWEpoZEc5eUlEMGdLSEJ5YjNCek9pQkpibVJwWTJGMGIzSlFjbTl3Y3lrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOc1lYTnpUbUZ0WlN3Z1kzZ3NJR2RsZEZOMGVXeGxjeXdnYVc1dVpYSlFjbTl3Y3lCOUlEMGdjSEp2Y0hNN1hHNGdJSEpsZEhWeWJpQW9YRzRnSUNBZ1BITndZVzVjYmlBZ0lDQWdJSHN1TGk1cGJtNWxjbEJ5YjNCemZWeHVJQ0FnSUNBZ1kzTnpQWHRuWlhSVGRIbHNaWE1vSjJsdVpHbGpZWFJ2Y2xObGNHRnlZWFJ2Y2ljc0lIQnliM0J6S1gxY2JpQWdJQ0FnSUdOc1lYTnpUbUZ0WlQxN1kzZ29leUFuYVc1a2FXTmhkRzl5TFhObGNHRnlZWFJ2Y2ljNklIUnlkV1VnZlN3Z1kyeGhjM05PWVcxbEtYMWNiaUFnSUNBdlBseHVJQ0FwTzF4dWZUdGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCTWIyRmthVzVuWEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVkyOXVjM1FnYkc5aFpHbHVaMFJ2ZEVGdWFXMWhkR2x2Ym5NZ1BTQnJaWGxtY21GdFpYTmdYRzRnSURBbExDQTRNQ1VzSURFd01DVWdleUJ2Y0dGamFYUjVPaUF3T3lCOVhHNGdJRFF3SlNCN0lHOXdZV05wZEhrNklERTdJSDFjYm1BN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCc2IyRmthVzVuU1c1a2FXTmhkRzl5UTFOVElEMGdLSHRjYmlBZ2FYTkdiMk4xYzJWa0xGeHVJQ0J6YVhwbExGeHVJQ0IwYUdWdFpUb2dlMXh1SUNBZ0lHTnZiRzl5Y3l4Y2JpQWdJQ0J6Y0dGamFXNW5PaUI3SUdKaGMyVlZibWwwSUgwc1hHNGdJSDBzWEc1OU9pQjdYRzRnSUdselJtOWpkWE5sWkRvZ1ltOXZiR1ZoYml4Y2JpQWdjMmw2WlRvZ2JuVnRZbVZ5TEZ4dUlDQjBhR1Z0WlRvZ1ZHaGxiV1VzWEc1OUtTQTlQaUFvZTF4dUlDQnNZV0psYkRvZ0oyeHZZV1JwYm1kSmJtUnBZMkYwYjNJbkxGeHVJQ0JqYjJ4dmNqb2dhWE5HYjJOMWMyVmtJRDhnWTI5c2IzSnpMbTVsZFhSeVlXdzJNQ0E2SUdOdmJHOXljeTV1WlhWMGNtRnNNakFzWEc0Z0lHUnBjM0JzWVhrNklDZG1iR1Y0Snl4Y2JpQWdjR0ZrWkdsdVp6b2dZbUZ6WlZWdWFYUWdLaUF5TEZ4dUlDQjBjbUZ1YzJsMGFXOXVPaUFuWTI5c2IzSWdNVFV3YlhNbkxGeHVJQ0JoYkdsbmJsTmxiR1k2SUNkalpXNTBaWEluTEZ4dUlDQm1iMjUwVTJsNlpUb2djMmw2WlN4Y2JpQWdiR2x1WlVobGFXZG9kRG9nTVN4Y2JpQWdiV0Z5WjJsdVVtbG5hSFE2SUhOcGVtVXNYRzRnSUhSbGVIUkJiR2xuYmpvZ0oyTmxiblJsY2ljc1hHNGdJSFpsY25ScFkyRnNRV3hwWjI0NklDZHRhV1JrYkdVbkxGeHVmU2s3WEc1Y2JuUjVjR1VnUkc5MFVISnZjSE1nUFNCN0lHTnZiRzl5T2lCemRISnBibWNzSUdSbGJHRjVPaUJ1ZFcxaVpYSXNJRzltWm5ObGREb2dZbTl2YkdWaGJpQjlPMXh1WTI5dWMzUWdURzloWkdsdVowUnZkQ0E5SUNoN0lHTnZiRzl5TENCa1pXeGhlU3dnYjJabWMyVjBJSDA2SUVSdmRGQnliM0J6S1NBOVBpQW9YRzRnSUR4emNHRnVYRzRnSUNBZ1kzTnpQWHQ3WEc0Z0lDQWdJQ0JoYm1sdFlYUnBiMjQ2SUdBa2UyeHZZV1JwYm1kRWIzUkJibWx0WVhScGIyNXpmU0F4Y3lCbFlYTmxMV2x1TFc5MWRDQWtlMlJsYkdGNWZXMXpJR2x1Wm1sdWFYUmxPMkFzWEc0Z0lDQWdJQ0JpWVdOclozSnZkVzVrUTI5c2IzSTZJR052Ykc5eUxGeHVJQ0FnSUNBZ1ltOXlaR1Z5VW1Ga2FYVnpPaUFuTVdWdE95Y3NYRzRnSUNBZ0lDQmthWE53YkdGNU9pQW5hVzVzYVc1bExXSnNiMk5yT3ljc1hHNGdJQ0FnSUNCdFlYSm5hVzVNWldaME9pQnZabVp6WlhRZ1B5QW5NV1Z0T3ljZ09pQnVkV3hzTEZ4dUlDQWdJQ0FnYUdWcFoyaDBPaUFuTVdWdE95Y3NYRzRnSUNBZ0lDQjJaWEowYVdOaGJFRnNhV2R1T2lBbmRHOXdPeWNzWEc0Z0lDQWdJQ0IzYVdSMGFEb2dKekZsYlRzbkxGeHVJQ0FnSUgxOVhHNGdJQzgrWEc0cE8xeHVYRzVsZUhCdmNuUWdkSGx3WlNCTWIyRmthVzVuU1dOdmJsQnliM0J6SUQwZ2UxeHVJQ0F2S2lvZ1VISnZjSE1nZEdoaGRDQjNhV3hzSUdKbElIQmhjM05sWkNCdmJpQjBieUIwYUdVZ1kyaHBiR1J5Wlc0dUlDb3ZYRzRnSUdsdWJtVnlVSEp2Y0hNNklHRnVlU3hjYmlBZ0x5b3FJRlJvWlNCbWIyTjFjMlZrSUhOMFlYUmxJRzltSUhSb1pTQnpaV3hsWTNRdUlDb3ZYRzRnSUdselJtOWpkWE5sWkRvZ1ltOXZiR1ZoYml4Y2JpQWdMeW9xSUZkb1pYUm9aWElnZEdobElIUmxlSFFnYVhNZ2NtbG5hSFFnZEc4Z2JHVm1kQ0FxTDF4dUlDQnBjMUowYkRvZ1ltOXZiR1ZoYml4Y2JuMGdKaUJEYjIxdGIyNVFjbTl3Y3lBbUlIdGNiaUFnSUNBdktpb2dVMlYwSUhOcGVtVWdiMllnZEdobElHTnZiblJoYVc1bGNpNGdLaTljYmlBZ0lDQnphWHBsT2lCdWRXMWlaWElzWEc0Z0lIMDdYRzVsZUhCdmNuUWdZMjl1YzNRZ1RHOWhaR2x1WjBsdVpHbGpZWFJ2Y2lBOUlDaHdjbTl3Y3pvZ1RHOWhaR2x1WjBsamIyNVFjbTl3Y3lrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3WEc0Z0lDQWdZMnhoYzNOT1lXMWxMRnh1SUNBZ0lHTjRMRnh1SUNBZ0lHZGxkRk4wZVd4bGN5eGNiaUFnSUNCcGJtNWxjbEJ5YjNCekxGeHVJQ0FnSUdselJtOWpkWE5sWkN4Y2JpQWdJQ0JwYzFKMGJDeGNiaUFnSUNCMGFHVnRaVG9nZXlCamIyeHZjbk1nZlN4Y2JpQWdmU0E5SUhCeWIzQnpPMXh1SUNCamIyNXpkQ0JqYjJ4dmNpQTlJR2x6Um05amRYTmxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNPREFnT2lCamIyeHZjbk11Ym1WMWRISmhiREl3TzF4dVhHNGdJSEpsZEhWeWJpQW9YRzRnSUNBZ1BHUnBkbHh1SUNBZ0lDQWdleTR1TG1sdWJtVnlVSEp2Y0hOOVhHNGdJQ0FnSUNCamMzTTllMmRsZEZOMGVXeGxjeWduYkc5aFpHbHVaMGx1WkdsallYUnZjaWNzSUhCeWIzQnpLWDFjYmlBZ0lDQWdJR05zWVhOelRtRnRaVDE3WTNnb1hHNGdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0JwYm1ScFkyRjBiM0k2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ0FnSjJ4dllXUnBibWN0YVc1a2FXTmhkRzl5SnpvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ1kyeGhjM05PWVcxbFhHNGdJQ0FnSUNBcGZWeHVJQ0FnSUQ1Y2JpQWdJQ0FnSUR4TWIyRmthVzVuUkc5MElHTnZiRzl5UFh0amIyeHZjbjBnWkdWc1lYazllekI5SUc5bVpuTmxkRDE3YVhOU2RHeDlJQzgrWEc0Z0lDQWdJQ0E4VEc5aFpHbHVaMFJ2ZENCamIyeHZjajE3WTI5c2IzSjlJR1JsYkdGNVBYc3hOakI5SUc5bVpuTmxkQ0F2UGx4dUlDQWdJQ0FnUEV4dllXUnBibWRFYjNRZ1kyOXNiM0k5ZTJOdmJHOXlmU0JrWld4aGVUMTdNekl3ZlNCdlptWnpaWFE5ZXlGcGMxSjBiSDBnTHo1Y2JpQWdJQ0E4TDJScGRqNWNiaUFnS1R0Y2JuMDdYRzVNYjJGa2FXNW5TVzVrYVdOaGRHOXlMbVJsWm1GMWJIUlFjbTl3Y3lBOUlIc2djMmw2WlRvZ05DQjlPMXh1SWwxOSAqL1wiXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgSWNvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxudmFyIFN2ZyA9IGZ1bmN0aW9uIFN2ZyhfcmVmKSB7XG4gIHZhciBzaXplID0gX3JlZi5zaXplLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIGpzeChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDIwIDIwXCIsXG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICBmb2N1c2FibGU6IFwiZmFsc2VcIixcbiAgICBjc3M6IF9yZWYyXG4gIH0sIHByb3BzKSk7XG59O1xuXG52YXIgQ3Jvc3NJY29uID0gZnVuY3Rpb24gQ3Jvc3NJY29uKHByb3BzKSB7XG4gIHJldHVybiBqc3goU3ZnLCBfZXh0ZW5kcyh7XG4gICAgc2l6ZTogMjBcbiAgfSwgcHJvcHMpLCBqc3goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC4zNDggMTQuODQ5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwbC0yLjY1MS0zLjAzMC0yLjY1MSAzLjAyOWMtMC40NjkgMC40NjktMS4yMjkgMC40NjktMS42OTcgMC0wLjQ2OS0wLjQ2OS0wLjQ2OS0xLjIyOSAwLTEuNjk3bDIuNzU4LTMuMTUtMi43NTktMy4xNTJjLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI4IDAtMS42OTdzMS4yMjgtMC40NjkgMS42OTcgMGwyLjY1MiAzLjAzMSAyLjY1MS0zLjAzMWMwLjQ2OS0wLjQ2OSAxLjIyOC0wLjQ2OSAxLjY5NyAwczAuNDY5IDEuMjI5IDAgMS42OTdsLTIuNzU4IDMuMTUyIDIuNzU4IDMuMTVjMC40NjkgMC40NjkgMC40NjkgMS4yMjkgMCAxLjY5OHpcIlxuICB9KSk7XG59O1xudmFyIERvd25DaGV2cm9uID0gZnVuY3Rpb24gRG93bkNoZXZyb24ocHJvcHMpIHtcbiAgcmV0dXJuIGpzeChTdmcsIF9leHRlbmRzKHtcbiAgICBzaXplOiAyMFxuICB9LCBwcm9wcyksIGpzeChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNTE2IDcuNTQ4YzAuNDM2LTAuNDQ2IDEuMDQzLTAuNDgxIDEuNTc2IDBsMy45MDggMy43NDcgMy45MDgtMy43NDdjMC41MzMtMC40ODEgMS4xNDEtMC40NDYgMS41NzQgMCAwLjQzNiAwLjQ0NSAwLjQwOCAxLjE5NyAwIDEuNjE1LTAuNDA2IDAuNDE4LTQuNjk1IDQuNTAyLTQuNjk1IDQuNTAyLTAuMjE3IDAuMjIzLTAuNTAyIDAuMzM1LTAuNzg3IDAuMzM1cy0wLjU3LTAuMTEyLTAuNzg5LTAuMzM1YzAgMC00LjI4Ny00LjA4NC00LjY5NS00LjUwMnMtMC40MzYtMS4xNyAwLTEuNjE1elwiXG4gIH0pKTtcbn07IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRHJvcGRvd24gJiBDbGVhciBCdXR0b25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGJhc2VDU1MgPSBmdW5jdGlvbiBiYXNlQ1NTKF9yZWYzKSB7XG4gIHZhciBpc0ZvY3VzZWQgPSBfcmVmMy5pc0ZvY3VzZWQsXG4gICAgICBfcmVmMyR0aGVtZSA9IF9yZWYzLnRoZW1lLFxuICAgICAgYmFzZVVuaXQgPSBfcmVmMyR0aGVtZS5zcGFjaW5nLmJhc2VVbml0LFxuICAgICAgY29sb3JzID0gX3JlZjMkdGhlbWUuY29sb3JzO1xuICByZXR1cm4ge1xuICAgIGxhYmVsOiAnaW5kaWNhdG9yQ29udGFpbmVyJyxcbiAgICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICAgICc6aG92ZXInOiB7XG4gICAgICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw4MCA6IGNvbG9ycy5uZXV0cmFsNDBcbiAgICB9XG4gIH07XG59O1xuXG52YXIgZHJvcGRvd25JbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xudmFyIERyb3Bkb3duSW5kaWNhdG9yID0gZnVuY3Rpb24gRHJvcGRvd25JbmRpY2F0b3IocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBjeCA9IHByb3BzLmN4LFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGlubmVyUHJvcHMsIHtcbiAgICBjc3M6IGdldFN0eWxlcygnZHJvcGRvd25JbmRpY2F0b3InLCBwcm9wcyksXG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAnZHJvcGRvd24taW5kaWNhdG9yJzogdHJ1ZVxuICAgIH0sIGNsYXNzTmFtZSlcbiAgfSksIGNoaWxkcmVuIHx8IGpzeChEb3duQ2hldnJvbiwgbnVsbCkpO1xufTtcbnZhciBjbGVhckluZGljYXRvckNTUyA9IGJhc2VDU1M7XG52YXIgQ2xlYXJJbmRpY2F0b3IgPSBmdW5jdGlvbiBDbGVhckluZGljYXRvcihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgaW5uZXJQcm9wcywge1xuICAgIGNzczogZ2V0U3R5bGVzKCdjbGVhckluZGljYXRvcicsIHByb3BzKSxcbiAgICBjbGFzc05hbWU6IGN4KHtcbiAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICdjbGVhci1pbmRpY2F0b3InOiB0cnVlXG4gICAgfSwgY2xhc3NOYW1lKVxuICB9KSwgY2hpbGRyZW4gfHwganN4KENyb3NzSWNvbiwgbnVsbCkpO1xufTsgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTID0gZnVuY3Rpb24gaW5kaWNhdG9yU2VwYXJhdG9yQ1NTKF9yZWY0KSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZjQuaXNEaXNhYmxlZCxcbiAgICAgIF9yZWY0JHRoZW1lID0gX3JlZjQudGhlbWUsXG4gICAgICBiYXNlVW5pdCA9IF9yZWY0JHRoZW1lLnNwYWNpbmcuYmFzZVVuaXQsXG4gICAgICBjb2xvcnMgPSBfcmVmNCR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiB7XG4gICAgbGFiZWw6ICdpbmRpY2F0b3JTZXBhcmF0b3InLFxuICAgIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMTAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgIG1hcmdpbkJvdHRvbTogYmFzZVVuaXQgKiAyLFxuICAgIG1hcmdpblRvcDogYmFzZVVuaXQgKiAyLFxuICAgIHdpZHRoOiAxXG4gIH07XG59O1xudmFyIEluZGljYXRvclNlcGFyYXRvciA9IGZ1bmN0aW9uIEluZGljYXRvclNlcGFyYXRvcihwcm9wcykge1xuICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgY3ggPSBwcm9wcy5jeCxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwic3BhblwiLCBfZXh0ZW5kcyh7fSwgaW5uZXJQcm9wcywge1xuICAgIGNzczogZ2V0U3R5bGVzKCdpbmRpY2F0b3JTZXBhcmF0b3InLCBwcm9wcyksXG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWVcbiAgICB9LCBjbGFzc05hbWUpXG4gIH0pKTtcbn07IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTG9hZGluZ1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBsb2FkaW5nRG90QW5pbWF0aW9ucyA9IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QoKSk7XG52YXIgbG9hZGluZ0luZGljYXRvckNTUyA9IGZ1bmN0aW9uIGxvYWRpbmdJbmRpY2F0b3JDU1MoX3JlZjUpIHtcbiAgdmFyIGlzRm9jdXNlZCA9IF9yZWY1LmlzRm9jdXNlZCxcbiAgICAgIHNpemUgPSBfcmVmNS5zaXplLFxuICAgICAgX3JlZjUkdGhlbWUgPSBfcmVmNS50aGVtZSxcbiAgICAgIGNvbG9ycyA9IF9yZWY1JHRoZW1lLmNvbG9ycyxcbiAgICAgIGJhc2VVbml0ID0gX3JlZjUkdGhlbWUuc3BhY2luZy5iYXNlVW5pdDtcbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogJ2xvYWRpbmdJbmRpY2F0b3InLFxuICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICAgIHRyYW5zaXRpb246ICdjb2xvciAxNTBtcycsXG4gICAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgICBmb250U2l6ZTogc2l6ZSxcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICAgIG1hcmdpblJpZ2h0OiBzaXplLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgdmVydGljYWxBbGlnbjogJ21pZGRsZSdcbiAgfTtcbn07XG5cbnZhciBMb2FkaW5nRG90ID0gZnVuY3Rpb24gTG9hZGluZ0RvdChfcmVmNikge1xuICB2YXIgY29sb3IgPSBfcmVmNi5jb2xvcixcbiAgICAgIGRlbGF5ID0gX3JlZjYuZGVsYXksXG4gICAgICBvZmZzZXQgPSBfcmVmNi5vZmZzZXQ7XG4gIHJldHVybiBqc3goXCJzcGFuXCIsIHtcbiAgICBjc3M6XG4gICAgLyojX19QVVJFX18qL1xuICAgIF9jc3Moe1xuICAgICAgYW5pbWF0aW9uOiBcIlwiLmNvbmNhdChsb2FkaW5nRG90QW5pbWF0aW9ucywgXCIgMXMgZWFzZS1pbi1vdXQgXCIpLmNvbmNhdChkZWxheSwgXCJtcyBpbmZpbml0ZTtcIiksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMWVtOycsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrOycsXG4gICAgICBtYXJnaW5MZWZ0OiBvZmZzZXQgPyAnMWVtOycgOiBudWxsLFxuICAgICAgaGVpZ2h0OiAnMWVtOycsXG4gICAgICB2ZXJ0aWNhbEFsaWduOiAndG9wOycsXG4gICAgICB3aWR0aDogJzFlbTsnXG4gICAgfSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW1sdVpHbGpZWFJ2Y25NdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJjMHhKSWl3aVptbHNaU0k2SW1sdVpHbGpZWFJ2Y25NdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2THlCQVpteHZkMXh1THlvcUlFQnFjM2dnYW5ONElDb3ZYRzVwYlhCdmNuUWdleUIwZVhCbElFNXZaR1VnZlNCbWNtOXRJQ2R5WldGamRDYzdYRzVwYlhCdmNuUWdleUJxYzNnc0lHdGxlV1p5WVcxbGN5QjlJR1p5YjIwZ0owQmxiVzkwYVc5dUwyTnZjbVVuTzF4dVhHNXBiWEJ2Y25RZ2RIbHdaU0I3SUVOdmJXMXZibEJ5YjNCekxDQlVhR1Z0WlNCOUlHWnliMjBnSnk0dUwzUjVjR1Z6Snp0Y2JseHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMeUJFY205d1pHOTNiaUFtSUVOc1pXRnlJRWxqYjI1elhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JseHVZMjl1YzNRZ1UzWm5JRDBnS0hzZ2MybDZaU3dnTGk0dWNISnZjSE1nZlRvZ2V5QnphWHBsT2lCdWRXMWlaWElnZlNrZ1BUNGdLRnh1SUNBOGMzWm5YRzRnSUNBZ2FHVnBaMmgwUFh0emFYcGxmVnh1SUNBZ0lIZHBaSFJvUFh0emFYcGxmVnh1SUNBZ0lIWnBaWGRDYjNnOVhDSXdJREFnTWpBZ01qQmNJbHh1SUNBZ0lHRnlhV0V0YUdsa1pHVnVQVndpZEhKMVpWd2lYRzRnSUNBZ1ptOWpkWE5oWW14bFBWd2labUZzYzJWY0lseHVJQ0FnSUdOemN6MTdlMXh1SUNBZ0lDQWdaR2x6Y0d4aGVUb2dKMmx1YkdsdVpTMWliRzlqYXljc1hHNGdJQ0FnSUNCbWFXeHNPaUFuWTNWeWNtVnVkRU52Ykc5eUp5eGNiaUFnSUNBZ0lHeHBibVZJWldsbmFIUTZJREVzWEc0Z0lDQWdJQ0J6ZEhKdmEyVTZJQ2RqZFhKeVpXNTBRMjlzYjNJbkxGeHVJQ0FnSUNBZ2MzUnliMnRsVjJsa2RHZzZJREFzWEc0Z0lDQWdmWDFjYmlBZ0lDQjdMaTR1Y0hKdmNITjlYRzRnSUM4K1hHNHBPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdRM0p2YzNOSlkyOXVJRDBnS0hCeWIzQnpPaUJoYm5rcElEMCtJQ2hjYmlBZ1BGTjJaeUJ6YVhwbFBYc3lNSDBnZXk0dUxuQnliM0J6ZlQ1Y2JpQWdJQ0E4Y0dGMGFDQmtQVndpVFRFMExqTTBPQ0F4TkM0NE5EbGpMVEF1TkRZNUlEQXVORFk1TFRFdU1qSTVJREF1TkRZNUxURXVOamszSURCc0xUSXVOalV4TFRNdU1ETXdMVEl1TmpVeElETXVNREk1WXkwd0xqUTJPU0F3TGpRMk9TMHhMakl5T1NBd0xqUTJPUzB4TGpZNU55QXdMVEF1TkRZNUxUQXVORFk1TFRBdU5EWTVMVEV1TWpJNUlEQXRNUzQyT1Rkc01pNDNOVGd0TXk0eE5TMHlMamMxT1MwekxqRTFNbU10TUM0ME5qa3RNQzQwTmprdE1DNDBOamt0TVM0eU1qZ2dNQzB4TGpZNU4zTXhMakl5T0Mwd0xqUTJPU0F4TGpZNU55QXdiREl1TmpVeUlETXVNRE14SURJdU5qVXhMVE11TURNeFl6QXVORFk1TFRBdU5EWTVJREV1TWpJNExUQXVORFk1SURFdU5qazNJREJ6TUM0ME5qa2dNUzR5TWprZ01DQXhMalk1TjJ3dE1pNDNOVGdnTXk0eE5USWdNaTQzTlRnZ015NHhOV013TGpRMk9TQXdMalEyT1NBd0xqUTJPU0F4TGpJeU9TQXdJREV1TmprNGVsd2lJQzgrWEc0Z0lEd3ZVM1puUGx4dUtUdGNibVY0Y0c5eWRDQmpiMjV6ZENCRWIzZHVRMmhsZG5KdmJpQTlJQ2h3Y205d2N6b2dZVzU1S1NBOVBpQW9YRzRnSUR4VGRtY2djMmw2WlQxN01qQjlJSHN1TGk1d2NtOXdjMzArWEc0Z0lDQWdQSEJoZEdnZ1pEMWNJazAwTGpVeE5pQTNMalUwT0dNd0xqUXpOaTB3TGpRME5pQXhMakEwTXkwd0xqUTRNU0F4TGpVM05pQXdiRE11T1RBNElETXVOelEzSURNdU9UQTRMVE11TnpRM1l6QXVOVE16TFRBdU5EZ3hJREV1TVRReExUQXVORFEySURFdU5UYzBJREFnTUM0ME16WWdNQzQwTkRVZ01DNDBNRGdnTVM0eE9UY2dNQ0F4TGpZeE5TMHdMalF3TmlBd0xqUXhPQzAwTGpZNU5TQTBMalV3TWkwMExqWTVOU0EwTGpVd01pMHdMakl4TnlBd0xqSXlNeTB3TGpVd01pQXdMak16TlMwd0xqYzROeUF3TGpNek5YTXRNQzQxTnkwd0xqRXhNaTB3TGpjNE9TMHdMak16TldNd0lEQXROQzR5T0RjdE5DNHdPRFF0TkM0Mk9UVXROQzQxTURKekxUQXVORE0yTFRFdU1UY2dNQzB4TGpZeE5YcGNJaUF2UGx4dUlDQThMMU4yWno1Y2JpazdYRzVjYmk4dklEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1THk4Z1JISnZjR1J2ZDI0Z0ppQkRiR1ZoY2lCQ2RYUjBiMjV6WEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVpYaHdiM0owSUhSNWNHVWdTVzVrYVdOaGRHOXlVSEp2Y0hNZ1BTQkRiMjF0YjI1UWNtOXdjeUFtSUh0Y2JpQWdMeW9xSUZSb1pTQmphR2xzWkhKbGJpQjBieUJpWlNCeVpXNWtaWEpsWkNCcGJuTnBaR1VnZEdobElHbHVaR2xqWVhSdmNpNGdLaTljYmlBZ1kyaHBiR1J5Wlc0NklFNXZaR1VzWEc0Z0lDOHFLaUJRY205d2N5QjBhR0YwSUhkcGJHd2dZbVVnY0dGemMyVmtJRzl1SUhSdklIUm9aU0JqYUdsc1pISmxiaTRnS2k5Y2JpQWdhVzV1WlhKUWNtOXdjem9nWVc1NUxGeHVJQ0F2S2lvZ1ZHaGxJR1p2WTNWelpXUWdjM1JoZEdVZ2IyWWdkR2hsSUhObGJHVmpkQzRnS2k5Y2JpQWdhWE5HYjJOMWMyVmtPaUJpYjI5c1pXRnVMRnh1SUNBdktpb2dWMmhsZEdobGNpQjBhR1VnZEdWNGRDQnBjeUJ5YVdkb2RDQjBieUJzWldaMElDb3ZYRzRnSUdselVuUnNPaUJpYjI5c1pXRnVMRnh1ZlR0Y2JseHVZMjl1YzNRZ1ltRnpaVU5UVXlBOUlDaDdYRzRnSUdselJtOWpkWE5sWkN4Y2JpQWdkR2hsYldVNklIdGNiaUFnSUNCemNHRmphVzVuT2lCN0lHSmhjMlZWYm1sMElIMHNYRzRnSUNBZ1kyOXNiM0p6TEZ4dUlDQjlMRnh1ZlRvZ1NXNWthV05oZEc5eVVISnZjSE1wSUQwK0lDaDdYRzRnSUd4aFltVnNPaUFuYVc1a2FXTmhkRzl5UTI5dWRHRnBibVZ5Snl4Y2JpQWdZMjlzYjNJNklHbHpSbTlqZFhObFpDQS9JR052Ykc5eWN5NXVaWFYwY21Gc05qQWdPaUJqYjJ4dmNuTXVibVYxZEhKaGJESXdMRnh1SUNCa2FYTndiR0Y1T2lBblpteGxlQ2NzWEc0Z0lIQmhaR1JwYm1jNklHSmhjMlZWYm1sMElDb2dNaXhjYmlBZ2RISmhibk5wZEdsdmJqb2dKMk52Ykc5eUlERTFNRzF6Snl4Y2JseHVJQ0FuT21odmRtVnlKem9nZTF4dUlDQWdJR052Ykc5eU9pQnBjMFp2WTNWelpXUWdQeUJqYjJ4dmNuTXVibVYxZEhKaGJEZ3dJRG9nWTI5c2IzSnpMbTVsZFhSeVlXdzBNQ3hjYmlBZ2ZTeGNibjBwTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWkhKdmNHUnZkMjVKYm1ScFkyRjBiM0pEVTFNZ1BTQmlZWE5sUTFOVE8xeHVaWGh3YjNKMElHTnZibk4wSUVSeWIzQmtiM2R1U1c1a2FXTmhkRzl5SUQwZ0tIQnliM0J6T2lCSmJtUnBZMkYwYjNKUWNtOXdjeWtnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdJR05vYVd4a2NtVnVMQ0JqYkdGemMwNWhiV1VzSUdONExDQm5aWFJUZEhsc1pYTXNJR2x1Ym1WeVVISnZjSE1nZlNBOUlIQnliM0J6TzF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4a2FYWmNiaUFnSUNBZ0lIc3VMaTVwYm01bGNsQnliM0J6ZlZ4dUlDQWdJQ0FnWTNOelBYdG5aWFJUZEhsc1pYTW9KMlJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlKeXdnY0hKdmNITXBmVnh1SUNBZ0lDQWdZMnhoYzNOT1lXMWxQWHRqZUNoY2JpQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJR2x1WkdsallYUnZjam9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdJQ0FuWkhKdmNHUnZkMjR0YVc1a2FXTmhkRzl5SnpvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ1kyeGhjM05PWVcxbFhHNGdJQ0FnSUNBcGZWeHVJQ0FnSUQ1Y2JpQWdJQ0FnSUh0amFHbHNaSEpsYmlCOGZDQThSRzkzYmtOb1pYWnliMjRnTHo1OVhHNGdJQ0FnUEM5a2FYWStYRzRnSUNrN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdZMnhsWVhKSmJtUnBZMkYwYjNKRFUxTWdQU0JpWVhObFExTlRPMXh1Wlhod2IzSjBJR052Ym5OMElFTnNaV0Z5U1c1a2FXTmhkRzl5SUQwZ0tIQnliM0J6T2lCSmJtUnBZMkYwYjNKUWNtOXdjeWtnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdJR05vYVd4a2NtVnVMQ0JqYkdGemMwNWhiV1VzSUdONExDQm5aWFJUZEhsc1pYTXNJR2x1Ym1WeVVISnZjSE1nZlNBOUlIQnliM0J6TzF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4a2FYWmNiaUFnSUNBZ0lIc3VMaTVwYm01bGNsQnliM0J6ZlZ4dUlDQWdJQ0FnWTNOelBYdG5aWFJUZEhsc1pYTW9KMk5zWldGeVNXNWthV05oZEc5eUp5d2djSEp2Y0hNcGZWeHVJQ0FnSUNBZ1kyeGhjM05PWVcxbFBYdGplQ2hjYmlBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lHbHVaR2xqWVhSdmNqb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ0lDQW5ZMnhsWVhJdGFXNWthV05oZEc5eUp6b2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdZMnhoYzNOT1lXMWxYRzRnSUNBZ0lDQXBmVnh1SUNBZ0lENWNiaUFnSUNBZ0lIdGphR2xzWkhKbGJpQjhmQ0E4UTNKdmMzTkpZMjl1SUM4K2ZWeHVJQ0FnSUR3dlpHbDJQbHh1SUNBcE8xeHVmVHRjYmx4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0dkx5QlRaWEJoY21GMGIzSmNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVYRzUwZVhCbElGTmxjR0Z5WVhSdmNsTjBZWFJsSUQwZ2V5QnBjMFJwYzJGaWJHVmtPaUJpYjI5c1pXRnVJSDA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JwYm1ScFkyRjBiM0pUWlhCaGNtRjBiM0pEVTFNZ1BTQW9lMXh1SUNCcGMwUnBjMkZpYkdWa0xGeHVJQ0IwYUdWdFpUb2dlMXh1SUNBZ0lITndZV05wYm1jNklIc2dZbUZ6WlZWdWFYUWdmU3hjYmlBZ0lDQmpiMnh2Y25Nc1hHNGdJSDBzWEc1OU9pQkRiMjF0YjI1UWNtOXdjeUFtSUZObGNHRnlZWFJ2Y2xOMFlYUmxLU0E5UGlBb2UxeHVJQ0JzWVdKbGJEb2dKMmx1WkdsallYUnZjbE5sY0dGeVlYUnZjaWNzWEc0Z0lHRnNhV2R1VTJWc1pqb2dKM04wY21WMFkyZ25MRnh1SUNCaVlXTnJaM0p2ZFc1a1EyOXNiM0k2SUdselJHbHpZV0pzWldRZ1B5QmpiMnh2Y25NdWJtVjFkSEpoYkRFd0lEb2dZMjlzYjNKekxtNWxkWFJ5WVd3eU1DeGNiaUFnYldGeVoybHVRbTkwZEc5dE9pQmlZWE5sVlc1cGRDQXFJRElzWEc0Z0lHMWhjbWRwYmxSdmNEb2dZbUZ6WlZWdWFYUWdLaUF5TEZ4dUlDQjNhV1IwYURvZ01TeGNibjBwTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnU1c1a2FXTmhkRzl5VTJWd1lYSmhkRzl5SUQwZ0tIQnliM0J6T2lCSmJtUnBZMkYwYjNKUWNtOXdjeWtnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdJR05zWVhOelRtRnRaU3dnWTNnc0lHZGxkRk4wZVd4bGN5d2dhVzV1WlhKUWNtOXdjeUI5SUQwZ2NISnZjSE03WEc0Z0lISmxkSFZ5YmlBb1hHNGdJQ0FnUEhOd1lXNWNiaUFnSUNBZ0lIc3VMaTVwYm01bGNsQnliM0J6ZlZ4dUlDQWdJQ0FnWTNOelBYdG5aWFJUZEhsc1pYTW9KMmx1WkdsallYUnZjbE5sY0dGeVlYUnZjaWNzSUhCeWIzQnpLWDFjYmlBZ0lDQWdJR05zWVhOelRtRnRaVDE3WTNnb2V5QW5hVzVrYVdOaGRHOXlMWE5sY0dGeVlYUnZjaWM2SUhSeWRXVWdmU3dnWTJ4aGMzTk9ZVzFsS1gxY2JpQWdJQ0F2UGx4dUlDQXBPMXh1ZlR0Y2JseHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMeUJNYjJGa2FXNW5YRzR2THlBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNibHh1WTI5dWMzUWdiRzloWkdsdVowUnZkRUZ1YVcxaGRHbHZibk1nUFNCclpYbG1jbUZ0WlhOZ1hHNGdJREFsTENBNE1DVXNJREV3TUNVZ2V5QnZjR0ZqYVhSNU9pQXdPeUI5WEc0Z0lEUXdKU0I3SUc5d1lXTnBkSGs2SURFN0lIMWNibUE3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JzYjJGa2FXNW5TVzVrYVdOaGRHOXlRMU5USUQwZ0tIdGNiaUFnYVhOR2IyTjFjMlZrTEZ4dUlDQnphWHBsTEZ4dUlDQjBhR1Z0WlRvZ2UxeHVJQ0FnSUdOdmJHOXljeXhjYmlBZ0lDQnpjR0ZqYVc1bk9pQjdJR0poYzJWVmJtbDBJSDBzWEc0Z0lIMHNYRzU5T2lCN1hHNGdJR2x6Um05amRYTmxaRG9nWW05dmJHVmhiaXhjYmlBZ2MybDZaVG9nYm5WdFltVnlMRnh1SUNCMGFHVnRaVG9nVkdobGJXVXNYRzU5S1NBOVBpQW9lMXh1SUNCc1lXSmxiRG9nSjJ4dllXUnBibWRKYm1ScFkyRjBiM0luTEZ4dUlDQmpiMnh2Y2pvZ2FYTkdiMk4xYzJWa0lEOGdZMjlzYjNKekxtNWxkWFJ5WVd3Mk1DQTZJR052Ykc5eWN5NXVaWFYwY21Gc01qQXNYRzRnSUdScGMzQnNZWGs2SUNkbWJHVjRKeXhjYmlBZ2NHRmtaR2x1WnpvZ1ltRnpaVlZ1YVhRZ0tpQXlMRnh1SUNCMGNtRnVjMmwwYVc5dU9pQW5ZMjlzYjNJZ01UVXdiWE1uTEZ4dUlDQmhiR2xuYmxObGJHWTZJQ2RqWlc1MFpYSW5MRnh1SUNCbWIyNTBVMmw2WlRvZ2MybDZaU3hjYmlBZ2JHbHVaVWhsYVdkb2REb2dNU3hjYmlBZ2JXRnlaMmx1VW1sbmFIUTZJSE5wZW1Vc1hHNGdJSFJsZUhSQmJHbG5iam9nSjJObGJuUmxjaWNzWEc0Z0lIWmxjblJwWTJGc1FXeHBaMjQ2SUNkdGFXUmtiR1VuTEZ4dWZTazdYRzVjYm5SNWNHVWdSRzkwVUhKdmNITWdQU0I3SUdOdmJHOXlPaUJ6ZEhKcGJtY3NJR1JsYkdGNU9pQnVkVzFpWlhJc0lHOW1abk5sZERvZ1ltOXZiR1ZoYmlCOU8xeHVZMjl1YzNRZ1RHOWhaR2x1WjBSdmRDQTlJQ2g3SUdOdmJHOXlMQ0JrWld4aGVTd2diMlptYzJWMElIMDZJRVJ2ZEZCeWIzQnpLU0E5UGlBb1hHNGdJRHh6Y0dGdVhHNGdJQ0FnWTNOelBYdDdYRzRnSUNBZ0lDQmhibWx0WVhScGIyNDZJR0FrZTJ4dllXUnBibWRFYjNSQmJtbHRZWFJwYjI1emZTQXhjeUJsWVhObExXbHVMVzkxZENBa2UyUmxiR0Y1ZlcxeklHbHVabWx1YVhSbE8yQXNYRzRnSUNBZ0lDQmlZV05yWjNKdmRXNWtRMjlzYjNJNklHTnZiRzl5TEZ4dUlDQWdJQ0FnWW05eVpHVnlVbUZrYVhWek9pQW5NV1Z0T3ljc1hHNGdJQ0FnSUNCa2FYTndiR0Y1T2lBbmFXNXNhVzVsTFdKc2IyTnJPeWNzWEc0Z0lDQWdJQ0J0WVhKbmFXNU1aV1owT2lCdlptWnpaWFFnUHlBbk1XVnRPeWNnT2lCdWRXeHNMRnh1SUNBZ0lDQWdhR1ZwWjJoME9pQW5NV1Z0T3ljc1hHNGdJQ0FnSUNCMlpYSjBhV05oYkVGc2FXZHVPaUFuZEc5d095Y3NYRzRnSUNBZ0lDQjNhV1IwYURvZ0p6RmxiVHNuTEZ4dUlDQWdJSDE5WEc0Z0lDOCtYRzRwTzF4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JNYjJGa2FXNW5TV052YmxCeWIzQnpJRDBnZTF4dUlDQXZLaW9nVUhKdmNITWdkR2hoZENCM2FXeHNJR0psSUhCaGMzTmxaQ0J2YmlCMGJ5QjBhR1VnWTJocGJHUnlaVzR1SUNvdlhHNGdJR2x1Ym1WeVVISnZjSE02SUdGdWVTeGNiaUFnTHlvcUlGUm9aU0JtYjJOMWMyVmtJSE4wWVhSbElHOW1JSFJvWlNCelpXeGxZM1F1SUNvdlhHNGdJR2x6Um05amRYTmxaRG9nWW05dmJHVmhiaXhjYmlBZ0x5b3FJRmRvWlhSb1pYSWdkR2hsSUhSbGVIUWdhWE1nY21sbmFIUWdkRzhnYkdWbWRDQXFMMXh1SUNCcGMxSjBiRG9nWW05dmJHVmhiaXhjYm4wZ0ppQkRiMjF0YjI1UWNtOXdjeUFtSUh0Y2JpQWdJQ0F2S2lvZ1UyVjBJSE5wZW1VZ2IyWWdkR2hsSUdOdmJuUmhhVzVsY2k0Z0tpOWNiaUFnSUNCemFYcGxPaUJ1ZFcxaVpYSXNYRzRnSUgwN1hHNWxlSEJ2Y25RZ1kyOXVjM1FnVEc5aFpHbHVaMGx1WkdsallYUnZjaUE5SUNod2NtOXdjem9nVEc5aFpHbHVaMGxqYjI1UWNtOXdjeWtnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdYRzRnSUNBZ1kyeGhjM05PWVcxbExGeHVJQ0FnSUdONExGeHVJQ0FnSUdkbGRGTjBlV3hsY3l4Y2JpQWdJQ0JwYm01bGNsQnliM0J6TEZ4dUlDQWdJR2x6Um05amRYTmxaQ3hjYmlBZ0lDQnBjMUowYkN4Y2JpQWdJQ0IwYUdWdFpUb2dleUJqYjJ4dmNuTWdmU3hjYmlBZ2ZTQTlJSEJ5YjNCek8xeHVJQ0JqYjI1emRDQmpiMnh2Y2lBOUlHbHpSbTlqZFhObFpDQS9JR052Ykc5eWN5NXVaWFYwY21Gc09EQWdPaUJqYjJ4dmNuTXVibVYxZEhKaGJESXdPMXh1WEc0Z0lISmxkSFZ5YmlBb1hHNGdJQ0FnUEdScGRseHVJQ0FnSUNBZ2V5NHVMbWx1Ym1WeVVISnZjSE45WEc0Z0lDQWdJQ0JqYzNNOWUyZGxkRk4wZVd4bGN5Z25iRzloWkdsdVowbHVaR2xqWVhSdmNpY3NJSEJ5YjNCektYMWNiaUFnSUNBZ0lHTnNZWE56VG1GdFpUMTdZM2dvWEc0Z0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBibVJwWTJGMGIzSTZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lDQWdKMnh2WVdScGJtY3RhVzVrYVdOaGRHOXlKem9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnWTJ4aGMzTk9ZVzFsWEc0Z0lDQWdJQ0FwZlZ4dUlDQWdJRDVjYmlBZ0lDQWdJRHhNYjJGa2FXNW5SRzkwSUdOdmJHOXlQWHRqYjJ4dmNuMGdaR1ZzWVhrOWV6QjlJRzltWm5ObGREMTdhWE5TZEd4OUlDOCtYRzRnSUNBZ0lDQThURzloWkdsdVowUnZkQ0JqYjJ4dmNqMTdZMjlzYjNKOUlHUmxiR0Y1UFhzeE5qQjlJRzltWm5ObGRDQXZQbHh1SUNBZ0lDQWdQRXh2WVdScGJtZEViM1FnWTI5c2IzSTllMk52Ykc5eWZTQmtaV3hoZVQxN016SXdmU0J2Wm1aelpYUTlleUZwYzFKMGJIMGdMejVjYmlBZ0lDQThMMlJwZGo1Y2JpQWdLVHRjYm4wN1hHNU1iMkZrYVc1blNXNWthV05oZEc5eUxtUmxabUYxYkhSUWNtOXdjeUE5SUhzZ2MybDZaVG9nTkNCOU8xeHVJbDE5ICovXCIpXG4gIH0pO1xufTtcblxudmFyIExvYWRpbmdJbmRpY2F0b3IgPSBmdW5jdGlvbiBMb2FkaW5nSW5kaWNhdG9yKHByb3BzKSB7XG4gIHZhciBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBjeCA9IHByb3BzLmN4LFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgICBpc0ZvY3VzZWQgPSBwcm9wcy5pc0ZvY3VzZWQsXG4gICAgICBpc1J0bCA9IHByb3BzLmlzUnRsLFxuICAgICAgY29sb3JzID0gcHJvcHMudGhlbWUuY29sb3JzO1xuICB2YXIgY29sb3IgPSBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDgwIDogY29sb3JzLm5ldXRyYWwyMDtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgaW5uZXJQcm9wcywge1xuICAgIGNzczogZ2V0U3R5bGVzKCdsb2FkaW5nSW5kaWNhdG9yJywgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgJ2xvYWRpbmctaW5kaWNhdG9yJzogdHJ1ZVxuICAgIH0sIGNsYXNzTmFtZSlcbiAgfSksIGpzeChMb2FkaW5nRG90LCB7XG4gICAgY29sb3I6IGNvbG9yLFxuICAgIGRlbGF5OiAwLFxuICAgIG9mZnNldDogaXNSdGxcbiAgfSksIGpzeChMb2FkaW5nRG90LCB7XG4gICAgY29sb3I6IGNvbG9yLFxuICAgIGRlbGF5OiAxNjAsXG4gICAgb2Zmc2V0OiB0cnVlXG4gIH0pLCBqc3goTG9hZGluZ0RvdCwge1xuICAgIGNvbG9yOiBjb2xvcixcbiAgICBkZWxheTogMzIwLFxuICAgIG9mZnNldDogIWlzUnRsXG4gIH0pKTtcbn07XG5Mb2FkaW5nSW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHtcbiAgc2l6ZTogNFxufTtcblxudmFyIGNzcyA9IGZ1bmN0aW9uIGNzcyhfcmVmKSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgaXNGb2N1c2VkID0gX3JlZi5pc0ZvY3VzZWQsXG4gICAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzLFxuICAgICAgYm9yZGVyUmFkaXVzID0gX3JlZiR0aGVtZS5ib3JkZXJSYWRpdXMsXG4gICAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nO1xuICByZXR1cm4ge1xuICAgIGxhYmVsOiAnY29udHJvbCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWw1IDogY29sb3JzLm5ldXRyYWwwLFxuICAgIGJvcmRlckNvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWwxMCA6IGlzRm9jdXNlZCA/IGNvbG9ycy5wcmltYXJ5IDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyxcbiAgICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJXaWR0aDogMSxcbiAgICBib3hTaGFkb3c6IGlzRm9jdXNlZCA/IFwiMCAwIDAgMXB4IFwiLmNvbmNhdChjb2xvcnMucHJpbWFyeSkgOiBudWxsLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgbWluSGVpZ2h0OiBzcGFjaW5nLmNvbnRyb2xIZWlnaHQsXG4gICAgb3V0bGluZTogJzAgIWltcG9ydGFudCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgdHJhbnNpdGlvbjogJ2FsbCAxMDBtcycsXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBib3JkZXJDb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLnByaW1hcnkgOiBjb2xvcnMubmV1dHJhbDMwXG4gICAgfVxuICB9O1xufTtcblxudmFyIENvbnRyb2wgPSBmdW5jdGlvbiBDb250cm9sKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgY3ggPSBwcm9wcy5jeCxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgaXNGb2N1c2VkID0gcHJvcHMuaXNGb2N1c2VkLFxuICAgICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZixcbiAgICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzLFxuICAgICAgbWVudUlzT3BlbiA9IHByb3BzLm1lbnVJc09wZW47XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogaW5uZXJSZWYsXG4gICAgY3NzOiBnZXRTdHlsZXMoJ2NvbnRyb2wnLCBwcm9wcyksXG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICBjb250cm9sOiB0cnVlLFxuICAgICAgJ2NvbnRyb2wtLWlzLWRpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAgICdjb250cm9sLS1pcy1mb2N1c2VkJzogaXNGb2N1c2VkLFxuICAgICAgJ2NvbnRyb2wtLW1lbnUtaXMtb3Blbic6IG1lbnVJc09wZW5cbiAgICB9LCBjbGFzc05hbWUpXG4gIH0sIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xuXG52YXIgZ3JvdXBDU1MgPSBmdW5jdGlvbiBncm91cENTUyhfcmVmKSB7XG4gIHZhciBzcGFjaW5nID0gX3JlZi50aGVtZS5zcGFjaW5nO1xuICByZXR1cm4ge1xuICAgIHBhZGRpbmdCb3R0b206IHNwYWNpbmcuYmFzZVVuaXQgKiAyLFxuICAgIHBhZGRpbmdUb3A6IHNwYWNpbmcuYmFzZVVuaXQgKiAyXG4gIH07XG59O1xuXG52YXIgR3JvdXAgPSBmdW5jdGlvbiBHcm91cChwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgICBIZWFkaW5nID0gcHJvcHMuSGVhZGluZyxcbiAgICAgIGhlYWRpbmdQcm9wcyA9IHByb3BzLmhlYWRpbmdQcm9wcyxcbiAgICAgIGxhYmVsID0gcHJvcHMubGFiZWwsXG4gICAgICB0aGVtZSA9IHByb3BzLnRoZW1lLFxuICAgICAgc2VsZWN0UHJvcHMgPSBwcm9wcy5zZWxlY3RQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCB7XG4gICAgY3NzOiBnZXRTdHlsZXMoJ2dyb3VwJywgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgZ3JvdXA6IHRydWVcbiAgICB9LCBjbGFzc05hbWUpXG4gIH0sIGpzeChIZWFkaW5nLCBfZXh0ZW5kcyh7fSwgaGVhZGluZ1Byb3BzLCB7XG4gICAgc2VsZWN0UHJvcHM6IHNlbGVjdFByb3BzLFxuICAgIHRoZW1lOiB0aGVtZSxcbiAgICBnZXRTdHlsZXM6IGdldFN0eWxlcyxcbiAgICBjeDogY3hcbiAgfSksIGxhYmVsKSwganN4KFwiZGl2XCIsIG51bGwsIGNoaWxkcmVuKSk7XG59O1xuXG52YXIgZ3JvdXBIZWFkaW5nQ1NTID0gZnVuY3Rpb24gZ3JvdXBIZWFkaW5nQ1NTKF9yZWYyKSB7XG4gIHZhciBzcGFjaW5nID0gX3JlZjIudGhlbWUuc3BhY2luZztcbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogJ2dyb3VwJyxcbiAgICBjb2xvcjogJyM5OTknLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgZm9udFNpemU6ICc3NSUnLFxuICAgIGZvbnRXZWlnaHQ6ICc1MDAnLFxuICAgIG1hcmdpbkJvdHRvbTogJzAuMjVlbScsXG4gICAgcGFkZGluZ0xlZnQ6IHNwYWNpbmcuYmFzZVVuaXQgKiAzLFxuICAgIHBhZGRpbmdSaWdodDogc3BhY2luZy5iYXNlVW5pdCAqIDMsXG4gICAgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZSdcbiAgfTtcbn07XG52YXIgR3JvdXBIZWFkaW5nID0gZnVuY3Rpb24gR3JvdXBIZWFkaW5nKHByb3BzKSB7XG4gIHZhciBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBjeCA9IHByb3BzLmN4LFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgdGhlbWUgPSBwcm9wcy50aGVtZSxcbiAgICAgIHNlbGVjdFByb3BzID0gcHJvcHMuc2VsZWN0UHJvcHMsXG4gICAgICBjbGVhblByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJjeFwiLCBcImdldFN0eWxlc1wiLCBcInRoZW1lXCIsIFwic2VsZWN0UHJvcHNcIl0pO1xuXG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogZ2V0U3R5bGVzKCdncm91cEhlYWRpbmcnLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHRoZW1lOiB0aGVtZVxuICAgIH0sIGNsZWFuUHJvcHMpKSxcbiAgICBjbGFzc05hbWU6IGN4KHtcbiAgICAgICdncm91cC1oZWFkaW5nJzogdHJ1ZVxuICAgIH0sIGNsYXNzTmFtZSlcbiAgfSwgY2xlYW5Qcm9wcykpO1xufTtcblxudmFyIGlucHV0Q1NTID0gZnVuY3Rpb24gaW5wdXRDU1MoX3JlZikge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgICAgc3BhY2luZyA9IF9yZWYkdGhlbWUuc3BhY2luZyxcbiAgICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzO1xuICByZXR1cm4ge1xuICAgIG1hcmdpbjogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgcGFkZGluZ0JvdHRvbTogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgcGFkZGluZ1RvcDogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgdmlzaWJpbGl0eTogaXNEaXNhYmxlZCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnLFxuICAgIGNvbG9yOiBjb2xvcnMubmV1dHJhbDgwXG4gIH07XG59O1xuXG52YXIgaW5wdXRTdHlsZSA9IGZ1bmN0aW9uIGlucHV0U3R5bGUoaXNIaWRkZW4pIHtcbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogJ2lucHV0JyxcbiAgICBiYWNrZ3JvdW5kOiAwLFxuICAgIGJvcmRlcjogMCxcbiAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgIG9wYWNpdHk6IGlzSGlkZGVuID8gMCA6IDEsXG4gICAgb3V0bGluZTogMCxcbiAgICBwYWRkaW5nOiAwLFxuICAgIGNvbG9yOiAnaW5oZXJpdCdcbiAgfTtcbn07XG5cbnZhciBJbnB1dCA9IGZ1bmN0aW9uIElucHV0KF9yZWYyKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgICBjeCA9IF9yZWYyLmN4LFxuICAgICAgZ2V0U3R5bGVzID0gX3JlZjIuZ2V0U3R5bGVzLFxuICAgICAgaW5uZXJSZWYgPSBfcmVmMi5pbm5lclJlZixcbiAgICAgIGlzSGlkZGVuID0gX3JlZjIuaXNIaWRkZW4sXG4gICAgICBpc0Rpc2FibGVkID0gX3JlZjIuaXNEaXNhYmxlZCxcbiAgICAgIHRoZW1lID0gX3JlZjIudGhlbWUsXG4gICAgICBzZWxlY3RQcm9wcyA9IF9yZWYyLnNlbGVjdFByb3BzLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFtcImNsYXNzTmFtZVwiLCBcImN4XCIsIFwiZ2V0U3R5bGVzXCIsIFwiaW5uZXJSZWZcIiwgXCJpc0hpZGRlblwiLCBcImlzRGlzYWJsZWRcIiwgXCJ0aGVtZVwiLCBcInNlbGVjdFByb3BzXCJdKTtcblxuICByZXR1cm4ganN4KFwiZGl2XCIsIHtcbiAgICBjc3M6IGdldFN0eWxlcygnaW5wdXQnLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHRoZW1lOiB0aGVtZVxuICAgIH0sIHByb3BzKSlcbiAgfSwganN4KEF1dG9zaXplSW5wdXQsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGN4KHtcbiAgICAgIGlucHV0OiB0cnVlXG4gICAgfSwgY2xhc3NOYW1lKSxcbiAgICBpbnB1dFJlZjogaW5uZXJSZWYsXG4gICAgaW5wdXRTdHlsZTogaW5wdXRTdHlsZShpc0hpZGRlbiksXG4gICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgfSwgcHJvcHMpKSk7XG59O1xuXG52YXIgbXVsdGlWYWx1ZUNTUyA9IGZ1bmN0aW9uIG11bHRpVmFsdWVDU1MoX3JlZikge1xuICB2YXIgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgICAgYm9yZGVyUmFkaXVzID0gX3JlZiR0aGVtZS5ib3JkZXJSYWRpdXMsXG4gICAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogJ211bHRpVmFsdWUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3JzLm5ldXRyYWwxMCxcbiAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyAvIDIsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIG1hcmdpbjogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgbWluV2lkdGg6IDAgLy8gcmVzb2x2ZXMgZmxleC90ZXh0LW92ZXJmbG93IGJ1Z1xuXG4gIH07XG59O1xudmFyIG11bHRpVmFsdWVMYWJlbENTUyA9IGZ1bmN0aW9uIG11bHRpVmFsdWVMYWJlbENTUyhfcmVmMikge1xuICB2YXIgX3JlZjIkdGhlbWUgPSBfcmVmMi50aGVtZSxcbiAgICAgIGJvcmRlclJhZGl1cyA9IF9yZWYyJHRoZW1lLmJvcmRlclJhZGl1cyxcbiAgICAgIGNvbG9ycyA9IF9yZWYyJHRoZW1lLmNvbG9ycyxcbiAgICAgIGNyb3BXaXRoRWxsaXBzaXMgPSBfcmVmMi5jcm9wV2l0aEVsbGlwc2lzO1xuICByZXR1cm4ge1xuICAgIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzIC8gMixcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw4MCxcbiAgICBmb250U2l6ZTogJzg1JScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHBhZGRpbmc6IDMsXG4gICAgcGFkZGluZ0xlZnQ6IDYsXG4gICAgdGV4dE92ZXJmbG93OiBjcm9wV2l0aEVsbGlwc2lzID8gJ2VsbGlwc2lzJyA6IG51bGwsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbiAgfTtcbn07XG52YXIgbXVsdGlWYWx1ZVJlbW92ZUNTUyA9IGZ1bmN0aW9uIG11bHRpVmFsdWVSZW1vdmVDU1MoX3JlZjMpIHtcbiAgdmFyIF9yZWYzJHRoZW1lID0gX3JlZjMudGhlbWUsXG4gICAgICBzcGFjaW5nID0gX3JlZjMkdGhlbWUuc3BhY2luZyxcbiAgICAgIGJvcmRlclJhZGl1cyA9IF9yZWYzJHRoZW1lLmJvcmRlclJhZGl1cyxcbiAgICAgIGNvbG9ycyA9IF9yZWYzJHRoZW1lLmNvbG9ycyxcbiAgICAgIGlzRm9jdXNlZCA9IF9yZWYzLmlzRm9jdXNlZDtcbiAgcmV0dXJuIHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyAvIDIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0ZvY3VzZWQgJiYgY29sb3JzLmRhbmdlckxpZ2h0LFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBwYWRkaW5nTGVmdDogc3BhY2luZy5iYXNlVW5pdCxcbiAgICBwYWRkaW5nUmlnaHQ6IHNwYWNpbmcuYmFzZVVuaXQsXG4gICAgJzpob3Zlcic6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3JzLmRhbmdlckxpZ2h0LFxuICAgICAgY29sb3I6IGNvbG9ycy5kYW5nZXJcbiAgICB9XG4gIH07XG59O1xudmFyIE11bHRpVmFsdWVHZW5lcmljID0gZnVuY3Rpb24gTXVsdGlWYWx1ZUdlbmVyaWMoX3JlZjQpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjQuY2hpbGRyZW4sXG4gICAgICBpbm5lclByb3BzID0gX3JlZjQuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBpbm5lclByb3BzLCBjaGlsZHJlbik7XG59O1xudmFyIE11bHRpVmFsdWVDb250YWluZXIgPSBNdWx0aVZhbHVlR2VuZXJpYztcbnZhciBNdWx0aVZhbHVlTGFiZWwgPSBNdWx0aVZhbHVlR2VuZXJpYztcbnZhciBNdWx0aVZhbHVlUmVtb3ZlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhNdWx0aVZhbHVlUmVtb3ZlLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBNdWx0aVZhbHVlUmVtb3ZlKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNdWx0aVZhbHVlUmVtb3ZlKTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoTXVsdGlWYWx1ZVJlbW92ZSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTXVsdGlWYWx1ZVJlbW92ZSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBpbm5lclByb3BzID0gX3RoaXMkcHJvcHMuaW5uZXJQcm9wcztcbiAgICAgIHJldHVybiBqc3goXCJkaXZcIiwgaW5uZXJQcm9wcywgY2hpbGRyZW4gfHwganN4KENyb3NzSWNvbiwge1xuICAgICAgICBzaXplOiAxNFxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBNdWx0aVZhbHVlUmVtb3ZlO1xufShDb21wb25lbnQpO1xuXG52YXIgTXVsdGlWYWx1ZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcbiAgX2luaGVyaXRzKE11bHRpVmFsdWUsIF9Db21wb25lbnQyKTtcblxuICBmdW5jdGlvbiBNdWx0aVZhbHVlKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNdWx0aVZhbHVlKTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoTXVsdGlWYWx1ZSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTXVsdGlWYWx1ZSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMyLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgY29tcG9uZW50cyA9IF90aGlzJHByb3BzMi5jb21wb25lbnRzLFxuICAgICAgICAgIGN4ID0gX3RoaXMkcHJvcHMyLmN4LFxuICAgICAgICAgIGRhdGEgPSBfdGhpcyRwcm9wczIuZGF0YSxcbiAgICAgICAgICBnZXRTdHlsZXMgPSBfdGhpcyRwcm9wczIuZ2V0U3R5bGVzLFxuICAgICAgICAgIGlubmVyUHJvcHMgPSBfdGhpcyRwcm9wczIuaW5uZXJQcm9wcyxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMyLmlzRGlzYWJsZWQsXG4gICAgICAgICAgcmVtb3ZlUHJvcHMgPSBfdGhpcyRwcm9wczIucmVtb3ZlUHJvcHMsXG4gICAgICAgICAgc2VsZWN0UHJvcHMgPSBfdGhpcyRwcm9wczIuc2VsZWN0UHJvcHM7XG4gICAgICB2YXIgQ29udGFpbmVyID0gY29tcG9uZW50cy5Db250YWluZXIsXG4gICAgICAgICAgTGFiZWwgPSBjb21wb25lbnRzLkxhYmVsLFxuICAgICAgICAgIFJlbW92ZSA9IGNvbXBvbmVudHMuUmVtb3ZlO1xuICAgICAgcmV0dXJuIGpzeChDbGFzc05hbWVzLCBudWxsLCBmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgICAgdmFyIGNzcyA9IF9yZWY1LmNzcyxcbiAgICAgICAgICAgIGVtb3Rpb25DeCA9IF9yZWY1LmN4O1xuICAgICAgICByZXR1cm4ganN4KENvbnRhaW5lciwge1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgaW5uZXJQcm9wczogX29iamVjdFNwcmVhZCh7fSwgaW5uZXJQcm9wcywge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBlbW90aW9uQ3goY3NzKGdldFN0eWxlcygnbXVsdGlWYWx1ZScsIF90aGlzLnByb3BzKSksIGN4KHtcbiAgICAgICAgICAgICAgJ211bHRpLXZhbHVlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ211bHRpLXZhbHVlLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgICAgICAgICAgIH0sIGNsYXNzTmFtZSkpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2VsZWN0UHJvcHM6IHNlbGVjdFByb3BzXG4gICAgICAgIH0sIGpzeChMYWJlbCwge1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBlbW90aW9uQ3goY3NzKGdldFN0eWxlcygnbXVsdGlWYWx1ZUxhYmVsJywgX3RoaXMucHJvcHMpKSwgY3goe1xuICAgICAgICAgICAgICAnbXVsdGktdmFsdWVfX2xhYmVsJzogdHJ1ZVxuICAgICAgICAgICAgfSwgY2xhc3NOYW1lKSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdFByb3BzOiBzZWxlY3RQcm9wc1xuICAgICAgICB9LCBjaGlsZHJlbiksIGpzeChSZW1vdmUsIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGlubmVyUHJvcHM6IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBlbW90aW9uQ3goY3NzKGdldFN0eWxlcygnbXVsdGlWYWx1ZVJlbW92ZScsIF90aGlzLnByb3BzKSksIGN4KHtcbiAgICAgICAgICAgICAgJ211bHRpLXZhbHVlX19yZW1vdmUnOiB0cnVlXG4gICAgICAgICAgICB9LCBjbGFzc05hbWUpKVxuICAgICAgICAgIH0sIHJlbW92ZVByb3BzKSxcbiAgICAgICAgICBzZWxlY3RQcm9wczogc2VsZWN0UHJvcHNcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE11bHRpVmFsdWU7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShNdWx0aVZhbHVlLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGNyb3BXaXRoRWxsaXBzaXM6IHRydWVcbn0pO1xuXG52YXIgb3B0aW9uQ1NTID0gZnVuY3Rpb24gb3B0aW9uQ1NTKF9yZWYpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZCxcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogJ29wdGlvbicsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc1NlbGVjdGVkID8gY29sb3JzLnByaW1hcnkgOiBpc0ZvY3VzZWQgPyBjb2xvcnMucHJpbWFyeTI1IDogJ3RyYW5zcGFyZW50JyxcbiAgICBjb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMjAgOiBpc1NlbGVjdGVkID8gY29sb3JzLm5ldXRyYWwwIDogJ2luaGVyaXQnLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICBwYWRkaW5nOiBcIlwiLmNvbmNhdChzcGFjaW5nLmJhc2VVbml0ICogMiwgXCJweCBcIikuY29uY2F0KHNwYWNpbmcuYmFzZVVuaXQgKiAzLCBcInB4XCIpLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAncmdiYSgwLCAwLCAwLCAwKScsXG4gICAgLy8gcHJvdmlkZSBzb21lIGFmZm9yZGFuY2Ugb24gdG91Y2ggZGV2aWNlc1xuICAgICc6YWN0aXZlJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAhaXNEaXNhYmxlZCAmJiAoaXNTZWxlY3RlZCA/IGNvbG9ycy5wcmltYXJ5IDogY29sb3JzLnByaW1hcnk1MClcbiAgICB9XG4gIH07XG59O1xuXG52YXIgT3B0aW9uID0gZnVuY3Rpb24gT3B0aW9uKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgY3ggPSBwcm9wcy5jeCxcbiAgICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgaXNGb2N1c2VkID0gcHJvcHMuaXNGb2N1c2VkLFxuICAgICAgaXNTZWxlY3RlZCA9IHByb3BzLmlzU2VsZWN0ZWQsXG4gICAgICBpbm5lclJlZiA9IHByb3BzLmlubmVyUmVmLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogZ2V0U3R5bGVzKCdvcHRpb24nLCBwcm9wcyksXG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICBvcHRpb246IHRydWUsXG4gICAgICAnb3B0aW9uLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgICAnb3B0aW9uLS1pcy1mb2N1c2VkJzogaXNGb2N1c2VkLFxuICAgICAgJ29wdGlvbi0taXMtc2VsZWN0ZWQnOiBpc1NlbGVjdGVkXG4gICAgfSwgY2xhc3NOYW1lKSxcbiAgICByZWY6IGlubmVyUmVmXG4gIH0sIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xuXG52YXIgcGxhY2Vob2xkZXJDU1MgPSBmdW5jdGlvbiBwbGFjZWhvbGRlckNTUyhfcmVmKSB7XG4gIHZhciBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogJ3BsYWNlaG9sZGVyJyxcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw1MCxcbiAgICBtYXJnaW5MZWZ0OiBzcGFjaW5nLmJhc2VVbml0IC8gMixcbiAgICBtYXJnaW5SaWdodDogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnNTAlJyxcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJ1xuICB9O1xufTtcblxudmFyIFBsYWNlaG9sZGVyID0gZnVuY3Rpb24gUGxhY2Vob2xkZXIocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBjeCA9IHByb3BzLmN4LFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogZ2V0U3R5bGVzKCdwbGFjZWhvbGRlcicsIHByb3BzKSxcbiAgICBjbGFzc05hbWU6IGN4KHtcbiAgICAgIHBsYWNlaG9sZGVyOiB0cnVlXG4gICAgfSwgY2xhc3NOYW1lKVxuICB9LCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxudmFyIGNzcyQxID0gZnVuY3Rpb24gY3NzKF9yZWYpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogJ3NpbmdsZVZhbHVlJyxcbiAgICBjb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsNDAgOiBjb2xvcnMubmV1dHJhbDgwLFxuICAgIG1hcmdpbkxlZnQ6IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIG1hcmdpblJpZ2h0OiBzcGFjaW5nLmJhc2VVbml0IC8gMixcbiAgICBtYXhXaWR0aDogXCJjYWxjKDEwMCUgLSBcIi5jb25jYXQoc3BhY2luZy5iYXNlVW5pdCAqIDIsIFwicHgpXCIpLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgdG9wOiAnNTAlJyxcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJ1xuICB9O1xufTtcblxudmFyIFNpbmdsZVZhbHVlID0gZnVuY3Rpb24gU2luZ2xlVmFsdWUocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBjeCA9IHByb3BzLmN4LFxuICAgICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBnZXRTdHlsZXMoJ3NpbmdsZVZhbHVlJywgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgJ3NpbmdsZS12YWx1ZSc6IHRydWUsXG4gICAgICAnc2luZ2xlLXZhbHVlLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgICB9LCBjbGFzc05hbWUpXG4gIH0sIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xuXG52YXIgY29tcG9uZW50cyA9IHtcbiAgQ2xlYXJJbmRpY2F0b3I6IENsZWFySW5kaWNhdG9yLFxuICBDb250cm9sOiBDb250cm9sLFxuICBEcm9wZG93bkluZGljYXRvcjogRHJvcGRvd25JbmRpY2F0b3IsXG4gIERvd25DaGV2cm9uOiBEb3duQ2hldnJvbixcbiAgQ3Jvc3NJY29uOiBDcm9zc0ljb24sXG4gIEdyb3VwOiBHcm91cCxcbiAgR3JvdXBIZWFkaW5nOiBHcm91cEhlYWRpbmcsXG4gIEluZGljYXRvcnNDb250YWluZXI6IEluZGljYXRvcnNDb250YWluZXIsXG4gIEluZGljYXRvclNlcGFyYXRvcjogSW5kaWNhdG9yU2VwYXJhdG9yLFxuICBJbnB1dDogSW5wdXQsXG4gIExvYWRpbmdJbmRpY2F0b3I6IExvYWRpbmdJbmRpY2F0b3IsXG4gIE1lbnU6IE1lbnUsXG4gIE1lbnVMaXN0OiBNZW51TGlzdCxcbiAgTWVudVBvcnRhbDogTWVudVBvcnRhbCxcbiAgTG9hZGluZ01lc3NhZ2U6IExvYWRpbmdNZXNzYWdlLFxuICBOb09wdGlvbnNNZXNzYWdlOiBOb09wdGlvbnNNZXNzYWdlLFxuICBNdWx0aVZhbHVlOiBNdWx0aVZhbHVlLFxuICBNdWx0aVZhbHVlQ29udGFpbmVyOiBNdWx0aVZhbHVlQ29udGFpbmVyLFxuICBNdWx0aVZhbHVlTGFiZWw6IE11bHRpVmFsdWVMYWJlbCxcbiAgTXVsdGlWYWx1ZVJlbW92ZTogTXVsdGlWYWx1ZVJlbW92ZSxcbiAgT3B0aW9uOiBPcHRpb24sXG4gIFBsYWNlaG9sZGVyOiBQbGFjZWhvbGRlcixcbiAgU2VsZWN0Q29udGFpbmVyOiBTZWxlY3RDb250YWluZXIsXG4gIFNpbmdsZVZhbHVlOiBTaW5nbGVWYWx1ZSxcbiAgVmFsdWVDb250YWluZXI6IFZhbHVlQ29udGFpbmVyXG59O1xudmFyIGRlZmF1bHRDb21wb25lbnRzID0gZnVuY3Rpb24gZGVmYXVsdENvbXBvbmVudHMocHJvcHMpIHtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe30sIGNvbXBvbmVudHMsIHByb3BzLmNvbXBvbmVudHMpO1xufTtcblxuZXhwb3J0IHsgTWVudVBsYWNlciBhcyBNLCBjb250YWluZXJDU1MgYXMgYSwgY3NzIGFzIGIsIGNsZWFySW5kaWNhdG9yQ1NTIGFzIGMsIGRyb3Bkb3duSW5kaWNhdG9yQ1NTIGFzIGQsIGdyb3VwSGVhZGluZ0NTUyBhcyBlLCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgYXMgZiwgZ3JvdXBDU1MgYXMgZywgaW5wdXRDU1MgYXMgaCwgaW5kaWNhdG9yc0NvbnRhaW5lckNTUyBhcyBpLCBsb2FkaW5nTWVzc2FnZUNTUyBhcyBqLCBtZW51TGlzdENTUyBhcyBrLCBsb2FkaW5nSW5kaWNhdG9yQ1NTIGFzIGwsIG1lbnVDU1MgYXMgbSwgbWVudVBvcnRhbENTUyBhcyBuLCBtdWx0aVZhbHVlQ1NTIGFzIG8sIG11bHRpVmFsdWVMYWJlbENTUyBhcyBwLCBtdWx0aVZhbHVlUmVtb3ZlQ1NTIGFzIHEsIG5vT3B0aW9uc01lc3NhZ2VDU1MgYXMgciwgb3B0aW9uQ1NTIGFzIHMsIHBsYWNlaG9sZGVyQ1NTIGFzIHQsIGNzcyQxIGFzIHUsIHZhbHVlQ29udGFpbmVyQ1NTIGFzIHYsIGRlZmF1bHRDb21wb25lbnRzIGFzIHcsIGV4cG9ydGVkRXF1YWwgYXMgeCwgY29tcG9uZW50cyBhcyB5IH07XG4iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2snO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcyc7XG5pbXBvcnQgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybic7XG5pbXBvcnQgX2dldFByb3RvdHlwZU9mIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mJztcbmltcG9ydCBfaW5oZXJpdHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMnO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkJztcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgZGVmYXVsdElucHV0VmFsdWU6ICcnLFxuICBkZWZhdWx0TWVudUlzT3BlbjogZmFsc2UsXG4gIGRlZmF1bHRWYWx1ZTogbnVsbFxufTtcblxudmFyIG1hbmFnZVN0YXRlID0gZnVuY3Rpb24gbWFuYWdlU3RhdGUoU2VsZWN0Q29tcG9uZW50KSB7XG4gIHZhciBfY2xhc3MsIF90ZW1wO1xuXG4gIHJldHVybiBfdGVtcCA9IF9jbGFzcyA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHMoU3RhdGVNYW5hZ2VyLCBfQ29tcG9uZW50KTtcblxuICAgIGZ1bmN0aW9uIFN0YXRlTWFuYWdlcigpIHtcbiAgICAgIHZhciBfZ2V0UHJvdG90eXBlT2YyO1xuXG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdGF0ZU1hbmFnZXIpO1xuXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX2dldFByb3RvdHlwZU9mMiA9IF9nZXRQcm90b3R5cGVPZihTdGF0ZU1hbmFnZXIpKS5jYWxsLmFwcGx5KF9nZXRQcm90b3R5cGVPZjIsIFt0aGlzXS5jb25jYXQoYXJncykpKTtcblxuICAgICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcInNlbGVjdFwiLCB2b2lkIDApO1xuXG4gICAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwic3RhdGVcIiwge1xuICAgICAgICBpbnB1dFZhbHVlOiBfdGhpcy5wcm9wcy5pbnB1dFZhbHVlICE9PSB1bmRlZmluZWQgPyBfdGhpcy5wcm9wcy5pbnB1dFZhbHVlIDogX3RoaXMucHJvcHMuZGVmYXVsdElucHV0VmFsdWUsXG4gICAgICAgIG1lbnVJc09wZW46IF90aGlzLnByb3BzLm1lbnVJc09wZW4gIT09IHVuZGVmaW5lZCA/IF90aGlzLnByb3BzLm1lbnVJc09wZW4gOiBfdGhpcy5wcm9wcy5kZWZhdWx0TWVudUlzT3BlbixcbiAgICAgICAgdmFsdWU6IF90aGlzLnByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgPyBfdGhpcy5wcm9wcy52YWx1ZSA6IF90aGlzLnByb3BzLmRlZmF1bHRWYWx1ZVxuICAgICAgfSk7XG5cbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbkNoYW5nZVwiLCBmdW5jdGlvbiAodmFsdWUsIGFjdGlvbk1ldGEpIHtcbiAgICAgICAgX3RoaXMuY2FsbFByb3AoJ29uQ2hhbmdlJywgdmFsdWUsIGFjdGlvbk1ldGEpO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcIm9uSW5wdXRDaGFuZ2VcIiwgZnVuY3Rpb24gKHZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgICAgIC8vIFRPRE86IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2UgYWxsb3cgdGhlIHByb3AgdG8gcmV0dXJuIGEgbmV3XG4gICAgICAgIC8vIHZhbHVlLCBidXQgbm93IGlucHV0VmFsdWUgaXMgYSBjb250cm9sbGFibGUgcHJvcCB3ZSBwcm9iYWJseSBzaG91bGRuJ3RcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gX3RoaXMuY2FsbFByb3AoJ29uSW5wdXRDaGFuZ2UnLCB2YWx1ZSwgYWN0aW9uTWV0YSk7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlucHV0VmFsdWU6IG5ld1ZhbHVlICE9PSB1bmRlZmluZWQgPyBuZXdWYWx1ZSA6IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJvbk1lbnVPcGVuXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuY2FsbFByb3AoJ29uTWVudU9wZW4nKTtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbWVudUlzT3BlbjogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwib25NZW51Q2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5jYWxsUHJvcCgnb25NZW51Q2xvc2UnKTtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbWVudUlzT3BlbjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIF9jcmVhdGVDbGFzcyhTdGF0ZU1hbmFnZXIsIFt7XG4gICAgICBrZXk6IFwiZm9jdXNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiYmx1clwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJsdXIoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LmJsdXIoKTtcbiAgICAgIH0gLy8gRklYTUU6IHVudHlwZWQgZmxvdyBjb2RlLCByZXR1cm4gYW55XG5cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ2V0UHJvcFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFByb3Aoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzW2tleV0gIT09IHVuZGVmaW5lZCA/IHRoaXMucHJvcHNba2V5XSA6IHRoaXMuc3RhdGVba2V5XTtcbiAgICAgIH0gLy8gRklYTUU6IHVudHlwZWQgZmxvdyBjb2RlLCByZXR1cm4gYW55XG5cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY2FsbFByb3BcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjYWxsUHJvcChuYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wc1tuYW1lXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBfdGhpcyRwcm9wcztcblxuICAgICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzKVtuYW1lXS5hcHBseShfdGhpcyRwcm9wcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGRlZmF1bHRJbnB1dFZhbHVlID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRJbnB1dFZhbHVlLFxuICAgICAgICAgICAgZGVmYXVsdE1lbnVJc09wZW4gPSBfdGhpcyRwcm9wczIuZGVmYXVsdE1lbnVJc09wZW4sXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBbXCJkZWZhdWx0SW5wdXRWYWx1ZVwiLCBcImRlZmF1bHRNZW51SXNPcGVuXCIsIFwiZGVmYXVsdFZhbHVlXCJdKTtcblxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTZWxlY3RDb21wb25lbnQsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKF9yZWYpIHtcbiAgICAgICAgICAgIF90aGlzMi5zZWxlY3QgPSBfcmVmO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5wdXRWYWx1ZTogdGhpcy5nZXRQcm9wKCdpbnB1dFZhbHVlJyksXG4gICAgICAgICAgbWVudUlzT3BlbjogdGhpcy5nZXRQcm9wKCdtZW51SXNPcGVuJyksXG4gICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsXG4gICAgICAgICAgb25JbnB1dENoYW5nZTogdGhpcy5vbklucHV0Q2hhbmdlLFxuICAgICAgICAgIG9uTWVudUNsb3NlOiB0aGlzLm9uTWVudUNsb3NlLFxuICAgICAgICAgIG9uTWVudU9wZW46IHRoaXMub25NZW51T3BlbixcbiAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRQcm9wKCd2YWx1ZScpXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gU3RhdGVNYW5hZ2VyO1xuICB9KENvbXBvbmVudCksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3MsIFwiZGVmYXVsdFByb3BzXCIsIGRlZmF1bHRQcm9wcyksIF90ZW1wO1xufTtcblxuZXhwb3J0IHsgbWFuYWdlU3RhdGUgYXMgbSB9O1xuIiwiaW1wb3J0IF90eXBlb2YgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mJztcbmltcG9ydCByYWYgZnJvbSAncmFmJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBOTyBPUFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG52YXIgbm9vcCA9IGZ1bmN0aW9uIG5vb3AoKSB7fTtcbi8vIENsYXNzIE5hbWUgUHJlZml4ZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29tcG9uZW50IHN0YXRlIGZvciBzdHlsaW5nIHdpdGggY2xhc3MgbmFtZXMuXG5cbiBFeHBlY3RzIGFuIGFycmF5IG9mIHN0cmluZ3MgT1IgYSBzdHJpbmcvb2JqZWN0IHBhaXI6XG4gLSBjbGFzc05hbWUoWydjb21wJywgJ2NvbXAtYXJnJywgJ2NvbXAtYXJnLTInXSlcbiAgIEByZXR1cm5zICdyZWFjdC1zZWxlY3RfX2NvbXAgcmVhY3Qtc2VsZWN0X19jb21wLWFyZyByZWFjdC1zZWxlY3RfX2NvbXAtYXJnLTInXG4gLSBjbGFzc05hbWUoJ2NvbXAnLCB7IHNvbWU6IHRydWUsIHN0YXRlOiBmYWxzZSB9KVxuICAgQHJldHVybnMgJ3JlYWN0LXNlbGVjdF9fY29tcCByZWFjdC1zZWxlY3RfX2NvbXAtLXNvbWUnXG4qL1xuXG5mdW5jdGlvbiBhcHBseVByZWZpeFRvTmFtZShwcmVmaXgsIG5hbWUpIHtcbiAgaWYgKCFuYW1lKSB7XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfSBlbHNlIGlmIChuYW1lWzBdID09PSAnLScpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgbmFtZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ19fJyArIG5hbWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xhc3NOYW1lcyhwcmVmaXgsIHN0YXRlLCBjbGFzc05hbWUpIHtcbiAgdmFyIGFyciA9IFtjbGFzc05hbWVdO1xuXG4gIGlmIChzdGF0ZSAmJiBwcmVmaXgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3RhdGUpIHtcbiAgICAgIGlmIChzdGF0ZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHN0YXRlW2tleV0pIHtcbiAgICAgICAgYXJyLnB1c2goXCJcIi5jb25jYXQoYXBwbHlQcmVmaXhUb05hbWUocHJlZml4LCBrZXkpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gaTtcbiAgfSkubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIFN0cmluZyhpKS50cmltKCk7XG4gIH0pLmpvaW4oJyAnKTtcbn0gLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDbGVhbiBWYWx1ZVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBjbGVhblZhbHVlID0gZnVuY3Rpb24gY2xlYW5WYWx1ZSh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5maWx0ZXIoQm9vbGVhbik7XG4gIGlmIChfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHJldHVybiBbdmFsdWVdO1xuICByZXR1cm4gW107XG59OyAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhhbmRsZSBJbnB1dCBDaGFuZ2Vcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBoYW5kbGVJbnB1dENoYW5nZShpbnB1dFZhbHVlLCBhY3Rpb25NZXRhLCBvbklucHV0Q2hhbmdlKSB7XG4gIGlmIChvbklucHV0Q2hhbmdlKSB7XG4gICAgdmFyIG5ld1ZhbHVlID0gb25JbnB1dENoYW5nZShpbnB1dFZhbHVlLCBhY3Rpb25NZXRhKTtcbiAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIG5ld1ZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGlucHV0VmFsdWU7XG59IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2Nyb2xsIEhlbHBlcnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBpc0RvY3VtZW50RWxlbWVudChlbCkge1xuICByZXR1cm4gW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgZG9jdW1lbnQuYm9keSwgd2luZG93XS5pbmRleE9mKGVsKSA+IC0xO1xufSAvLyBOb3JtYWxpemVkIFNjcm9sbCBUb3Bcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxUb3AoZWwpIHtcbiAgaWYgKGlzRG9jdW1lbnRFbGVtZW50KGVsKSkge1xuICAgIHJldHVybiB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gIH1cblxuICByZXR1cm4gZWwuc2Nyb2xsVG9wO1xufVxuZnVuY3Rpb24gc2Nyb2xsVG8oZWwsIHRvcCkge1xuICAvLyB3aXRoIGEgc2Nyb2xsIGRpc3RhbmNlLCB3ZSBwZXJmb3JtIHNjcm9sbCBvbiB0aGUgZWxlbWVudFxuICBpZiAoaXNEb2N1bWVudEVsZW1lbnQoZWwpKSB7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIHRvcCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWwuc2Nyb2xsVG9wID0gdG9wO1xufSAvLyBHZXQgU2Nyb2xsIFBhcmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIHZhciBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHZhciBleGNsdWRlU3RhdGljUGFyZW50ID0gc3R5bGUucG9zaXRpb24gPT09ICdhYnNvbHV0ZSc7XG4gIHZhciBvdmVyZmxvd1J4ID0gLyhhdXRvfHNjcm9sbCkvO1xuICB2YXIgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7IC8vIHN1Y2sgaXQsIGZsb3cuLi5cblxuICBpZiAoc3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHJldHVybiBkb2NFbDtcblxuICBmb3IgKHZhciBwYXJlbnQgPSBlbGVtZW50OyBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudDspIHtcbiAgICBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcblxuICAgIGlmIChleGNsdWRlU3RhdGljUGFyZW50ICYmIHN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG92ZXJmbG93UngudGVzdChzdHlsZS5vdmVyZmxvdyArIHN0eWxlLm92ZXJmbG93WSArIHN0eWxlLm92ZXJmbG93WCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvY0VsO1xufSAvLyBBbmltYXRlZCBTY3JvbGwgVG9cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAgQHBhcmFtIHQ6IHRpbWUgKGVsYXBzZWQpXG4gIEBwYXJhbSBiOiBpbml0aWFsIHZhbHVlXG4gIEBwYXJhbSBjOiBhbW91bnQgb2YgY2hhbmdlXG4gIEBwYXJhbSBkOiBkdXJhdGlvblxuKi9cblxuZnVuY3Rpb24gZWFzZU91dEN1YmljKHQsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIGMgKiAoKHQgPSB0IC8gZCAtIDEpICogdCAqIHQgKyAxKSArIGI7XG59XG5cbmZ1bmN0aW9uIGFuaW1hdGVkU2Nyb2xsVG8oZWxlbWVudCwgdG8pIHtcbiAgdmFyIGR1cmF0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAyMDA7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbm9vcDtcbiAgdmFyIHN0YXJ0ID0gZ2V0U2Nyb2xsVG9wKGVsZW1lbnQpO1xuICB2YXIgY2hhbmdlID0gdG8gLSBzdGFydDtcbiAgdmFyIGluY3JlbWVudCA9IDEwO1xuICB2YXIgY3VycmVudFRpbWUgPSAwO1xuXG4gIGZ1bmN0aW9uIGFuaW1hdGVTY3JvbGwoKSB7XG4gICAgY3VycmVudFRpbWUgKz0gaW5jcmVtZW50O1xuICAgIHZhciB2YWwgPSBlYXNlT3V0Q3ViaWMoY3VycmVudFRpbWUsIHN0YXJ0LCBjaGFuZ2UsIGR1cmF0aW9uKTtcbiAgICBzY3JvbGxUbyhlbGVtZW50LCB2YWwpO1xuXG4gICAgaWYgKGN1cnJlbnRUaW1lIDwgZHVyYXRpb24pIHtcbiAgICAgIHJhZihhbmltYXRlU2Nyb2xsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgYW5pbWF0ZVNjcm9sbCgpO1xufSAvLyBTY3JvbGwgSW50byBWaWV3XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcobWVudUVsLCBmb2N1c2VkRWwpIHtcbiAgdmFyIG1lbnVSZWN0ID0gbWVudUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgZm9jdXNlZFJlY3QgPSBmb2N1c2VkRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBvdmVyU2Nyb2xsID0gZm9jdXNlZEVsLm9mZnNldEhlaWdodCAvIDM7XG5cbiAgaWYgKGZvY3VzZWRSZWN0LmJvdHRvbSArIG92ZXJTY3JvbGwgPiBtZW51UmVjdC5ib3R0b20pIHtcbiAgICBzY3JvbGxUbyhtZW51RWwsIE1hdGgubWluKGZvY3VzZWRFbC5vZmZzZXRUb3AgKyBmb2N1c2VkRWwuY2xpZW50SGVpZ2h0IC0gbWVudUVsLm9mZnNldEhlaWdodCArIG92ZXJTY3JvbGwsIG1lbnVFbC5zY3JvbGxIZWlnaHQpKTtcbiAgfSBlbHNlIGlmIChmb2N1c2VkUmVjdC50b3AgLSBvdmVyU2Nyb2xsIDwgbWVudVJlY3QudG9wKSB7XG4gICAgc2Nyb2xsVG8obWVudUVsLCBNYXRoLm1heChmb2N1c2VkRWwub2Zmc2V0VG9wIC0gb3ZlclNjcm9sbCwgMCkpO1xuICB9XG59IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gR2V0IGJvdW5kaW5nIGNsaWVudCBvYmplY3Rcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gY2Fubm90IGdldCBrZXlzIHVzaW5nIGFycmF5IG5vdGF0aW9uIHdpdGggRE9NUmVjdFxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudE9iaihlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IHJlY3QuYm90dG9tLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHJpZ2h0OiByZWN0LnJpZ2h0LFxuICAgIHRvcDogcmVjdC50b3AsXG4gICAgd2lkdGg6IHJlY3Qud2lkdGhcbiAgfTtcbn1cbi8vIFRvdWNoIENhcGFiaWxpdHkgRGV0ZWN0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBpc1RvdWNoQ2FwYWJsZSgpIHtcbiAgdHJ5IHtcbiAgICBkb2N1bWVudC5jcmVhdGVFdmVudCgnVG91Y2hFdmVudCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTW9iaWxlIERldmljZSBEZXRlY3RvclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGlzTW9iaWxlRGV2aWNlKCkge1xuICB0cnkge1xuICAgIHJldHVybiAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IHsgZ2V0U2Nyb2xsUGFyZW50IGFzIGEsIGdldFNjcm9sbFRvcCBhcyBiLCBhbmltYXRlZFNjcm9sbFRvIGFzIGMsIGlzTW9iaWxlRGV2aWNlIGFzIGQsIGlzRG9jdW1lbnRFbGVtZW50IGFzIGUsIGNsZWFuVmFsdWUgYXMgZiwgZ2V0Qm91bmRpbmdDbGllbnRPYmogYXMgZywgc2Nyb2xsSW50b1ZpZXcgYXMgaCwgaXNUb3VjaENhcGFibGUgYXMgaSwgY2xhc3NOYW1lcyBhcyBqLCBoYW5kbGVJbnB1dENoYW5nZSBhcyBrLCBub29wIGFzIG4sIHNjcm9sbFRvIGFzIHMgfTtcbiIsImltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXknO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQnO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjayc7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzJztcbmltcG9ydCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJztcbmltcG9ydCBfZ2V0UHJvdG90eXBlT2YgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YnO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cyc7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eSc7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgQ2FjaGVQcm92aWRlciB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0ICdyZWFjdC1kb20nO1xuaW1wb3J0ICdwcm9wLXR5cGVzJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mJztcbmltcG9ydCAncmFmJztcbmltcG9ydCAnLi9jaHVuay1lOGFlNGIwZi5icm93c2VyLmVzbS5qcyc7XG5leHBvcnQgeyB5IGFzIGNvbXBvbmVudHMgfSBmcm9tICcuL2NodW5rLTVkMjAwYTQxLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IFMgYXMgU2VsZWN0IH0gZnJvbSAnLi9iYXNlL2Rpc3QvcmVhY3Qtc2VsZWN0LWEzNGU5ZDEyLmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IGMgYXMgY3JlYXRlRmlsdGVyLCBhIGFzIGRlZmF1bHRUaGVtZSwgbSBhcyBtZXJnZVN0eWxlcyB9IGZyb20gJy4vYmFzZS9kaXN0L3JlYWN0LXNlbGVjdC1hMzRlOWQxMi5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCc7XG5pbXBvcnQgJ3JlYWN0LWlucHV0LWF1dG9zaXplJztcbmltcG9ydCB7IG0gYXMgbWFuYWdlU3RhdGUgfSBmcm9tICcuL2NodW5rLWIzNmJhZjFhLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5cbnZhciBOb25jZVByb3ZpZGVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhOb25jZVByb3ZpZGVyLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBOb25jZVByb3ZpZGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE5vbmNlUHJvdmlkZXIpO1xuXG4gICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoTm9uY2VQcm92aWRlcikuY2FsbCh0aGlzLCBwcm9wcykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImNyZWF0ZUVtb3Rpb25DYWNoZVwiLCBmdW5jdGlvbiAobm9uY2UpIHtcbiAgICAgIHJldHVybiBjcmVhdGVDYWNoZSh7XG4gICAgICAgIG5vbmNlOiBub25jZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5jcmVhdGVFbW90aW9uQ2FjaGUgPSBtZW1vaXplT25lKF90aGlzLmNyZWF0ZUVtb3Rpb25DYWNoZSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE5vbmNlUHJvdmlkZXIsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgZW1vdGlvbkNhY2hlID0gdGhpcy5jcmVhdGVFbW90aW9uQ2FjaGUodGhpcy5wcm9wcy5ub25jZSk7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDYWNoZVByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBlbW90aW9uQ2FjaGVcbiAgICAgIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBOb25jZVByb3ZpZGVyO1xufShDb21wb25lbnQpO1xuXG52YXIgaW5kZXggPSBtYW5hZ2VTdGF0ZShTZWxlY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBpbmRleDtcbmV4cG9ydCB7IE5vbmNlUHJvdmlkZXIgfTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgX19ERVZfXyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbic7XG5cbnZhciB3YXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKF9fREVWX18pIHtcbiAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIHByaW50V2FybmluZyhmb3JtYXQsIGFyZ3MpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiA+IDEgPyBsZW4gLSAxIDogMCk7XG4gICAgZm9yICh2YXIga2V5ID0gMTsga2V5IDwgbGVuOyBrZXkrKykge1xuICAgICAgYXJnc1trZXkgLSAxXSA9IGFyZ3VtZW50c1trZXldO1xuICAgIH1cbiAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgK1xuICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH1cblxuICB3YXJuaW5nID0gZnVuY3Rpb24oY29uZGl0aW9uLCBmb3JtYXQsIGFyZ3MpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiA+IDIgPyBsZW4gLSAyIDogMCk7XG4gICAgZm9yICh2YXIga2V5ID0gMjsga2V5IDwgbGVuOyBrZXkrKykge1xuICAgICAgYXJnc1trZXkgLSAyXSA9IGFyZ3VtZW50c1trZXldO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnYHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArXG4gICAgICAgICAgJ21lc3NhZ2UgYXJndW1lbnQnXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KG51bGwsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcInJlZ2VuZXJhdG9yUnVudGltZVwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1wiaGVscGVyc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJpMThuXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcIm1vZGVsXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZhbGlkYXRvcnNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmFsdWVPYmplY3RzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJjb21wb25lbnRzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJjb21wb3NlXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJkYXRhXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJlbGVtZW50XCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJob29rc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIndwXCJdW1wiaXNTaGFsbG93RXF1YWxcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImtleWNvZGVzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZlbmRvclwiXVtcImNsYXNzbmFtZXNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmVuZG9yXCJdW1wiY3VpZFwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImxvZGFzaFwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJ2ZW5kb3JcIl1bXCJtb21lbnRcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJSZWFjdFwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIlJlYWN0RE9NXCJdOyB9KCkpOyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/assets/dist/eventespresso-components.2a25eee7701c006d3f37.dist.css b/assets/dist/eventespresso-components.65580d0d8c5c32e69cfa.dist.css similarity index 99% rename from assets/dist/eventespresso-components.2a25eee7701c006d3f37.dist.css rename to assets/dist/eventespresso-components.65580d0d8c5c32e69cfa.dist.css index 7680bb2dcce..f604598fa17 100644 --- a/assets/dist/eventespresso-components.2a25eee7701c006d3f37.dist.css +++ b/assets/dist/eventespresso-components.65580d0d8c5c32e69cfa.dist.css @@ -22,4 +22,4 @@ :root{--ee-input-padding-bottom:calc(0.375rem + 1px);--ee-input-padding-sides:calc(0.75rem + 1px);--ee-input-padding-top:calc(0.375rem + 1px)}.ee-two-column-admin{margin:0!important;padding:0!important;position:relative;-webkit-font-smoothing:antialiased}.ee-two-column-admin,.ee-two-column-admin .ee-form-row,.ee-two-column-admin .ee-form-section,.ee-two-column-admin .px-0,.ee-two-column-admin .px-3{box-sizing:border-box!important;max-width:100%;width:100%}.ee-two-column-admin .ee-form-section table{box-sizing:border-box!important;border-collapse:collapse;max-width:100%}.ee-two-column-admin:after,.ee-two-column-admin:before,.ee-two-column-admin div{box-sizing:border-box!important}.ee-two-column-admin .opacity-50{opacity:.5}.ee-two-column-admin .ee-form-section{display:block;width:100%}.ee-two-column-admin .ee-form-section:first-of-type{margin:var(--ee-margin-big) 0 0}.ee-two-column-admin .border{border:none}.ee-two-column-admin .rounded{border-radius:var(--ee-border-radius-none)}.ee-two-column-admin .pt-3,.ee-two-column-admin .py-3{padding-bottom:var(--ee-padding-smaller);padding-top:var(--ee-padding-smaller)}.ee-two-column-admin .pl-0,.ee-two-column-admin .px-0{padding-left:0}.ee-two-column-admin .pr-0,.ee-two-column-admin .px-0{padding-right:0}.ee-two-column-admin .pl-3,.ee-two-column-admin .px-3{padding-left:var(--ee-padding-default)}.ee-two-column-admin .pr-3,.ee-two-column-admin .px-3{padding-right:var(--ee-padding-default)}.ee-two-column-admin .m-0{margin:0}.ee-two-column-admin .text-sm-right,.ee-two-column-admin .text-sm-right input{text-align:right}.ee-two-column-admin hr{border:none;padding:1px}.ee-two-column-admin .ee-form-row{display:flex;flex-wrap:wrap;margin:0 0 var(--ee-margin-small);min-height:var(--ee-padding-huge)}.ee-two-column-admin .col-form-label{font-size:inherit;line-height:var(--ee-line-height-modifier);margin:0;max-width:100%;padding-top:var(--ee-input-padding-top);padding-bottom:var(--ee-input-padding-bottom)}.ee-two-column-admin label{display:inline-block;margin:0 0 var(--ee-margin-tiny);max-width:100%}.ee-two-column-admin .form-control:-ms-input-placeholder{color:var(--ee-color-grey-10);opacity:1}.ee-two-column-admin .form-control::-ms-input-placeholder{color:var(--ee-color-grey-10);opacity:1}.ee-two-column-admin .form-control::placeholder{color:var(--ee-color-grey-10);opacity:1}.ee-two-column-admin .form-control::-moz-placeholder{color:var(--ee-color-grey-10);opacity:1}.ee-two-column-admin select.form-control:not([size]):not([multiple]){height:calc(var(--ee-input-padding-top)*6 - 4px)}.ee-two-column-admin .form-control,.ee-two-column-admin .form-control-wp .components-select-control__input{background-clip:padding-box;background-color:var(--ee-background-color);border:1px solid var(--ee-border-color);border-radius:var(--ee-border-radius-small);color:var(--ee-default-text-color);display:block;font-size:var(--ee-font-size-default);height:var(--ee-icon-button-size);line-height:var(--ee-line-height-modifier);padding:var(--ee-input-padding-top) var(--ee-input-padding-sides) var(--ee-input-padding-bottom);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.ee-two-column-admin select{text-transform:none}.ee-two-column-admin input,.ee-two-column-admin optgroup,.ee-two-column-admin select,.ee-two-column-admin textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}.ee-two-column-admin input:disabled,.ee-two-column-admin select:disabled,.ee-two-column-admin textarea:disabled{background:var(--ee-color-grey-13);color:var(--ee-color-grey-8)}.ee-two-column-admin input[type=checkbox],.ee-two-column-admin input[type=radio]{margin:-2px var(--ee-margin-tiny) 0 0}.ee-two-column-admin input[type=number]{height:inherit;text-align:right}.ee-two-column-admin input.ee-money-field.ee-sign-after,.ee-two-column-admin input.ee-money-field.ee-sign-before{text-align:right;width:calc(100% - var(--ee-font-size-default)*1.5)}.ee-two-column-admin input.ee-money-field.ee-curSign-2{width:calc(100% - var(--ee-font-size-default)*2.25)}.ee-two-column-admin input.ee-money-field-2.ee-curSign-3{width:calc(100% - var(--ee-font-size-default)*3)}.ee-two-column-admin input.ee-money-field-2.ee-curSign-4{width:calc(100% - var(--ee-font-size-default)*3.75)}.ee-two-column-admin .ee-currency-sign,.ee-two-column-admin .ee-percent-sign{padding:var(--ee-input-padding-top) var(--ee-padding-micro);font-size:calc(var(--ee-font-size-default)*1.25);line-height:calc(var(--ee-font-size-default)*1.25);vertical-align:middle}.ee-two-column-admin .ee-currency-sign{width:calc(var(--ee-font-size-default)*1.5)}.ee-two-column-admin .ee-currency-sign.ee-curSign-2{font-size:calc(var(--ee-font-size-default)*1.125);line-height:calc(var(--ee-font-size-default)*1.125);width:calc(var(--ee-font-size-default)*2.2)}.ee-two-column-admin .ee-currency-sign.ee-curSign-3{font-size:calc(var(--ee-font-size-default)*1.05);line-height:calc(var(--ee-font-size-default)*1.05);width:calc(var(--ee-font-size-default)*2.8)}.ee-two-column-admin .ee-currency-sign.ee-curSign-4{font-size:var(--ee-font-size-default);line-height:var(--ee-font-size-default);width:calc(var(--ee-font-size-default)*3.2)}.ee-two-column-admin .ee-percent-sign{text-align:left;width:calc(var(--ee-font-size-default)*1.5)}.ee-two-column-admin .ee-currency-sign.ee-sign-before{float:left;text-align:right}.ee-two-column-admin .ee-currency-sign.ee-sign-after{float:right;text-align:left}.ee-two-column-admin .align-items-sm-center{align-items:center}.ee-two-column-admin .d-flex{display:flex}.ee-two-column-admin .btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;min-width:55px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:var(--ee-input-padding-top) var(--ee-input-padding-sides) var(--ee-input-padding-bottom);font-size:var(--ee-font-size-default);line-height:var(--ee-line-height-modifier);border-radius:var(--ee-border-radius-small);transition:color .05s ease-in-out,background-color .05s ease-in-out,border-color .05s ease-in-out,box-shadow .05s ease-in-out}.ee-two-column-admin .btn-group.offset-sm-2{min-width:224px}.ee-two-column-admin .btn-group,.ee-two-column-admin .btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.ee-two-column-admin .btn-group-vertical>.btn,.ee-two-column-admin .btn-group>.btn{position:relative;flex:0 1 auto}.ee-two-column-admin .btn-group-vertical .btn+.btn,.ee-two-column-admin .btn-group-vertical .btn+.btn-group,.ee-two-column-admin .btn-group-vertical .btn-group+.btn,.ee-two-column-admin .btn-group-vertical .btn-group+.btn-group,.ee-two-column-admin .btn-group .btn+.btn,.ee-two-column-admin .btn-group .btn+.btn-group,.ee-two-column-admin .btn-group .btn-group+.btn,.ee-two-column-admin .btn-group .btn-group+.btn-group{margin-left:-1px}.ee-two-column-admin .btn-group-vertical>.btn:hover,.ee-two-column-admin .btn-group>.btn:hover{z-index:1}.ee-two-column-admin .btn-group>.btn-group:not(:last-child)>.btn,.ee-two-column-admin .btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.ee-two-column-admin .btn-group>.btn-group:not(:first-child)>.btn,.ee-two-column-admin .btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.ee-two-column-admin .btn-group>.btn:first-child{margin-left:0}.ee-two-column-admin .btn-group label.btn{margin:0}.ee-two-column-admin .btn:not(:disabled):not(.disabled){cursor:pointer}.ee-two-column-admin .btn-primary{color:inherit;background-color:var(--ee-background-color);border-color:var(--ee-border-color)}.ee-two-column-admin .btn-primary:not(:disabled):not(.disabled).active,.ee-two-column-admin .show>.btn-primary.dropdown-toggle{color:var(--ee-text-on-primary);background-color:var(--ee-color-primary);border-color:var(--ee-color-primary)}.ee-two-column-admin .btn-primary:not(:disabled):not(.disabled):active{color:var(--ee-text-on-primary-high-contrast);background-color:var(--ee-color-primary-high-contrast);border-color:var(--ee-color-primary-high-contrast)}.ee-two-column-admin .btn-primary input{display:none;visibility:hidden}.ee-two-column-admin .ee-checkbox-label-after.active,.ee-two-column-admin .ee-radio-label-after.active{font-weight:700}.ee-two-column-admin .espresso-input-help-text{color:var(--ee-default-text-color-low-contrast);display:inline-block;font-style:italic;line-height:inherit;margin:var(--ee-margin-tiny) 0;white-space:pre-wrap}.ee-two-column-admin .espresso-input-help-text.left{text-align:right}.ee-two-column-admin .espresso-input-help-text>p{font-size:inherit;line-height:inherit;margin:0}.ee-two-column-admin .ee-form-save-cancel-buttons-div{padding-top:var(--ee-padding-small);position:relative;z-index:99}.ee-two-column-admin .ee-form-button-row.ee-form-row:not(li){display:flex;flex-flow:row wrap;justify-content:flex-end;margin:var(--ee-margin-small) 0;text-align:right}.ee-two-column-admin .button-primary+.button-primary,.ee-two-column-admin .button-primary+.button-secondary,.ee-two-column-admin .button-secondary+.button-primary,.ee-two-column-admin .button-secondary+.button-secondary,.ee-two-column-admin .ee-form-button+.ee-form-button{margin-left:var(--ee-margin-big);margin-right:0}.ee-two-column-admin .ee-input-width-1{flex:0 0 8.333333%;max-width:8.333333%}.ee-two-column-admin .ee-input-width-2{flex:0 0 16.666667%;max-width:16.666667%}.ee-two-column-admin .ee-input-width-3{flex:0 0 25%;max-width:25%}.ee-two-column-admin .ee-input-width-4{flex:0 0 33%;max-width:33%}.ee-two-column-admin .ee-input-width-5{flex:0 0 41.666667%;max-width:41.666667%}.ee-two-column-admin .ee-input-width-6{flex:0 0 50%;max-width:50%}.ee-two-column-admin .ee-toggle-input{padding-top:var(--ee-input-padding-top);padding-bottom:var(--ee-input-padding-bottom);margin-bottom:0;font-size:inherit;line-height:var(--ee-line-height-modifier)}.ee-two-column-admin .ee-toggle-input *{box-sizing:border-box}.ee-two-column-admin .ee-toggle-input .components-toggle-control__label{font-size:var(--ee-font-size-default);width:calc(100% - 40px)}.ee-two-column-admin .ee-checkbox-toggle input[type=checkbox]{border:1px solid var(--ee-border-color);border-radius:var(--ee-border-radius-small);box-sizing:border-box;height:21px;margin-right:var(--ee-margin-smaller);transition:none;width:21px}.ee-two-column-admin .ee-checkbox-toggle input[type=checkbox]:checked{background:var(--ee-color-primary);border-color:var(--ee-color-primary);color:var(--ee-color-primary)}.ee-two-column-admin .ee-checkbox-toggle input[type=checkbox]:checked:before{color:var(--ee-text-on-primary);content:"\f147";display:inline-block;float:left;font:normal 27px/1 dashicons;margin:-3px 0 0 -4px;width:21px;speak:none;vertical-align:middle;-webkit-font-smoothing:subpixel-antialiased;-moz-osx-font-smoothing:grayscale}.ee-two-column-admin .ee-switch-toggle .components-form-toggle{margin-top:3px}.ee-two-column-admin .ee-hidden-label{display:none!important}.ee-two-column-admin .ee-after-input-wrapper{display:flex;flex-flow:row nowrap}.ee-two-column-admin .ee-after-input-div{display:inline-block;margin-left:var(--ee-margin-small)}.ee-two-column-admin .components-tooltip{color:var(--ee-color-white);font-size:var(--ee-font-size-smaller)!important;font-weight:400!important;line-height:var(--ee-font-size-smaller)!important}@media only screen and (max-width:1024px){.ee-two-column-admin .ee-form-section:first-of-type{margin:var(--ee-margin-small) 0 0}.ee-two-column-admin .px-3 .ee-form-row:not(li){margin:0 0 var(--ee-margin-small)}}@media only screen and (max-width:960px){.ee-two-column-admin .pl-3,.ee-two-column-admin .px-3{padding-left:var(--ee-padding-small)}.ee-two-column-admin .pr-3,.ee-two-column-admin .px-3{padding-right:var(--ee-padding-small)}}@media screen and (max-width:782px){.ee-two-column-admin .ee-form-section:first-of-type{margin:var(--ee-margin-tiny) 0 0}}@media screen and (max-width:601px){.ee-two-column-admin .pl-3,.ee-two-column-admin .px-3{padding-left:var(--ee-padding-smaller)}.ee-two-column-admin .pr-3,.ee-two-column-admin .px-3{padding-right:var(--ee-padding-smaller)}.ee-two-column-admin .components-panel__body.is-opened{padding:var(--ee-padding-tiny)}.ee-two-column-admin .ee-form-info-row .col-sm-1,.ee-two-column-admin .ee-form-info-row .col-sm-1h,.ee-two-column-admin .ee-form-info-row .col-sm-1q,.ee-two-column-admin .ee-form-info-row .col-sm-2,.ee-two-column-admin .ee-form-info-row .col-sm-2-3q,.ee-two-column-admin .ee-form-info-row .col-sm-2h,.ee-two-column-admin .ee-form-info-row .col-sm-3,.ee-two-column-admin .ee-form-info-row .col-sm-3h,.ee-two-column-admin .ee-form-info-row .col-sm-4,.ee-two-column-admin .ee-form-info-row .col-sm-5,.ee-two-column-admin .ee-form-info-row .col-sm-6,.ee-two-column-admin .ee-form-info-row .col-sm-7,.ee-two-column-admin .ee-form-info-row .col-sm-8,.ee-two-column-admin .ee-form-info-row .col-sm-9,.ee-two-column-admin .ee-form-info-row .col-sm-10,.ee-two-column-admin .ee-form-info-row .col-sm-11,.ee-two-column-admin .ee-form-info-row .col-sm-12,.ee-two-column-admin .ee-form-info-row .col-sm-h{flex:0 0 100%;max-width:100%;width:100%}.ee-two-column-admin .ee-form-info-row .offset-sm-1,.ee-two-column-admin .ee-form-info-row .offset-sm-2,.ee-two-column-admin .ee-form-info-row .offset-sm-3,.ee-two-column-admin .ee-form-info-row .offset-sm-4,.ee-two-column-admin .ee-form-info-row .offset-sm-5,.ee-two-column-admin .ee-form-info-row .offset-sm-6,.ee-two-column-admin .ee-form-info-row .offset-sm-7,.ee-two-column-admin .ee-form-info-row .offset-sm-8,.ee-two-column-admin .ee-form-info-row .offset-sm-9,.ee-two-column-admin .ee-form-info-row .offset-sm-10,.ee-two-column-admin .ee-form-info-row .offset-sm-h{margin:0}}@media screen and (min-width:481px){.ee-two-column-admin .px-3 .ee-form-row:not(li){margin:0 0 var(--ee-margin-small)}.ee-two-column-admin .offset-sm-h{margin-left:4.166667%}.ee-two-column-admin .offset-sm-1{margin-left:8.333333%}.ee-two-column-admin .offset-sm-2{margin-left:16.666667%}.ee-two-column-admin .offset-sm-3{margin-left:25%}.ee-two-column-admin .offset-sm-4{margin-left:33.333333%}.ee-two-column-admin .offset-sm-5{margin-left:41.666667%}.ee-two-column-admin .offset-sm-6{margin-left:50%}.ee-two-column-admin .offset-sm-7{margin-left:58.333333%}.ee-two-column-admin .offset-sm-8{margin-left:66.666667%}.ee-two-column-admin .offset-sm-9{margin-left:75%}.ee-two-column-admin .offset-sm-10{margin-left:83.333333%}.ee-two-column-admin .col-sm-1,.ee-two-column-admin .col-sm-1h,.ee-two-column-admin .col-sm-1q,.ee-two-column-admin .col-sm-2,.ee-two-column-admin .col-sm-2-3q,.ee-two-column-admin .col-sm-2h,.ee-two-column-admin .col-sm-3,.ee-two-column-admin .col-sm-3h,.ee-two-column-admin .col-sm-4,.ee-two-column-admin .col-sm-5,.ee-two-column-admin .col-sm-6,.ee-two-column-admin .col-sm-7,.ee-two-column-admin .col-sm-8,.ee-two-column-admin .col-sm-9,.ee-two-column-admin .col-sm-10,.ee-two-column-admin .col-sm-11,.ee-two-column-admin .col-sm-12,.ee-two-column-admin .col-sm-h{position:relative;width:100%;min-height:1px;padding:1px var(--ee-padding-smaller)}.ee-two-column-admin .col-sm-h{flex:0 0 4.166667%;max-width:4.166667%;white-space:nowrap}.ee-two-column-admin .col-sm-1{flex:0 0 8.333333%;max-width:8.333333%;white-space:nowrap}.ee-two-column-admin .col-sm-1q{flex:0 0 10.416667%;max-width:10.416667%;white-space:nowrap}.ee-two-column-admin .col-sm-1h{flex:0 0 12.5%;max-width:12.5%;white-space:nowrap}.ee-two-column-admin .col-sm-2{flex:0 0 16.666667%;max-width:16.666667%}.ee-two-column-admin .col-sm-2h{flex:0 0 20.833333%;max-width:20.833333%}.ee-two-column-admin .col-sm-2-3q{flex:0 0 22.916667%;max-width:22.916667%}.ee-two-column-admin .col-sm-3{flex:0 0 25%;max-width:25%}.ee-two-column-admin .col-sm-3h{;flex:0 0 29.166667%;max-width:29.166667%}.ee-two-column-admin .col-sm-4{flex:0 0 33.333333%;max-width:33.333333%}.ee-two-column-admin .col-sm-5{flex:0 0 41.666667%;max-width:41.666667%}.ee-two-column-admin .col-sm-6{flex:0 0 50%;max-width:50%}.ee-two-column-admin .col-sm-7{flex:0 0 58.333333%;max-width:58.333333%}.ee-two-column-admin .col-sm-7h{flex:0 0 62.5%;max-width:62.53%}.ee-two-column-admin .col-sm-8{flex:0 0 66.666667%;max-width:66.666667%}.ee-two-column-admin .col-sm-9{flex:0 0 75%;max-width:75%}.ee-two-column-admin .col-sm-10{flex:0 0 83.333333%;max-width:83.333333%}.ee-two-column-admin .col-sm-11{flex:0 0 91.666667%;max-width:91.666667%}.ee-two-column-admin .col-sm-12{flex:0 0 100%;max-width:100%}}@media screen and (max-width:480px){.ee-two-column-admin .pl-3,.ee-two-column-admin .px-3{padding-left:var(--ee-padding-tiny)}.ee-two-column-admin .pr-3,.ee-two-column-admin .px-3{padding-right:var(--ee-padding-tiny)}.ee-two-column-admin .ee-form-row,.ee-two-column-admin .px-3 .ee-form-row:not(li){flex-flow:column nowrap;justify-content:center;min-height:unset}.ee-two-column-admin .col-sm-1,.ee-two-column-admin .col-sm-1h,.ee-two-column-admin .col-sm-1q,.ee-two-column-admin .col-sm-2,.ee-two-column-admin .col-sm-2-3q,.ee-two-column-admin .col-sm-2h,.ee-two-column-admin .col-sm-3,.ee-two-column-admin .col-sm-3h,.ee-two-column-admin .col-sm-4,.ee-two-column-admin .col-sm-5,.ee-two-column-admin .col-sm-6,.ee-two-column-admin .col-sm-7,.ee-two-column-admin .col-sm-8,.ee-two-column-admin .col-sm-9,.ee-two-column-admin .col-sm-10,.ee-two-column-admin .col-sm-11,.ee-two-column-admin .col-sm-12,.ee-two-column-admin .col-sm-h{margin:0;max-width:100%;padding:1px;white-space:normal;width:auto}.ee-two-column-admin .ee-form-button-row .col-sm-12{align-items:flex-end;display:flex;flex-flow:row wrap;justify-content:flex-end;margin:0;max-width:100%;padding:1px;white-space:normal}.ee-two-column-admin .offset-sm-1,.ee-two-column-admin .offset-sm-2,.ee-two-column-admin .offset-sm-3,.ee-two-column-admin .offset-sm-4,.ee-two-column-admin .offset-sm-5,.ee-two-column-admin .offset-sm-6,.ee-two-column-admin .offset-sm-7,.ee-two-column-admin .offset-sm-8,.ee-two-column-admin .offset-sm-9,.ee-two-column-admin .offset-sm-10,.ee-two-column-admin .offset-sm-h{margin:0}.ee-two-column-admin .col-form-label,.ee-two-column-admin label{display:block;margin:0;padding:0;text-align:left;width:100%}.ee-two-column-admin .ee-input-width-1{flex:0 0 25%;max-width:25%}.ee-two-column-admin .ee-input-width-2{flex:0 0 33.333333%;max-width:33.333333%}.ee-two-column-admin .ee-input-width-3{flex:0 0 50%;max-width:50%}.ee-two-column-admin .ee-input-width-4{flex:0 0 66.666667%;max-width:66.666667%}.ee-two-column-admin .ee-input-width-5{flex:0 0 83.333333%;max-width:83.333333%}.ee-two-column-admin .ee-input-width-6{flex:0 0 100%;max-width:100%}.ee-two-column-admin .ee-form-button{white-space:normal}.ee-two-column-admin .button-primary+.button-primary,.ee-two-column-admin .button-primary+.button-secondary,.ee-two-column-admin .button-secondary+.button-primary,.ee-two-column-admin .button-secondary+.button-secondary,.ee-two-column-admin .ee-form-button+.ee-form-button{margin-left:var(--ee-margin-small);margin-right:0}}@media only screen and (max-width:360px){.ee-two-column-admin .ee-form-button-row .col-sm-12{flex-flow:column wrap}.ee-two-column-admin .ee-form-button{margin:0 0 var(--ee-margin-small);text-align:center;max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content}} #ee-block-event-attendees.event-attendees ul{list-style-type:none}#ee-block-event-attendees .contact-image-wrap-div,#ee-block-event-attendees p{display:inline-block}#ee-block-event-attendees .contact-avatar-img{margin:.25em 1em .25em 0;vertical-align:middle} -/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL3BhZ2luYXRpb24vc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvZmlsdGVyLWJhci9zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vYmFzZS9mb3JtLWNvbnRhaW5lci5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vYmFzZS9mb3JtLXBsYWNlaG9sZGVyLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL2Zvcm0tZGF0YS1kZWJ1Zy1kdW1wLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL3N1Ym1pdHRpbmctbm90aWNlLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZGF0ZXMtYW5kLXRpbWVzL2JpZ2dpZS1jYWxlbmRhci1kYXRlL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZGF0ZXMtYW5kLXRpbWVzL2NhbGVuZGFyLWRhdGUtcmFuZ2Uvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9kYXRlcy1hbmQtdGltZXMvbWVkaXVtLWNhbGVuZGFyLWRhdGUvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9kYXRlcy1hbmQtdGltZXMvY2FsZW5kYXItcGFnZS1kYXRlL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZHJvcC1kb3duLW1lbnUvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9lbnRpdHktZGV0YWlscy1wYW5lbC9zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL2lubGluZS1lZGl0LWlucHV0LmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZW50aXR5LWxpc3Qvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9lbnRpdHktcGFwZXItZnJhbWUvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9pY29uLW1lbnUtaXRlbS9zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3Jlc3BvbnNpdmUtdGFibGUvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9tZW51L3N0ZXAtYnViYmxlL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvZGF0ZS10aW1lLWlucHV0LmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS9pbnB1dC1lcnJvci5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vYmFzZS9mb3JtLWluZm8tYmFzZS5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbGF5b3V0cy90d28tY29sdW1uLWFkbWluL3R3by1jb2x1bW4tYWRtaW4uY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9ldmVudC1hdHRlbmRlZXMvc3R5bGUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQixhQUFhLHFCQUFxQix5QkFBeUIsa0NBQWtDLHFCQUFxQixlQUFlLGNBQWMsa0JBQWtCLHFDQUFxQyxlQUFlLGlGQUFpRixrQkFBa0IsZUFBZSxXQUFXLGlCQUFpQixpQkFBaUIsdUJBQXVCLDhCQUE4QixxQkFBcUIseUJBQXlCLHdDQUF3Qyx5R0FBeUcsY0FBYywyQkFBMkIsOEJBQThCLHVHQUF1RyxlQUFlLDRCQUE0QiwrQkFBK0IscVRBQXFULDhCQUE4QixlQUFlLG9DQUFvQywwTEFBMEwseUNBQXlDLFVBQVUseVNBQXlTLFVBQVUsZ0NBQWdDLHlDQUF5QyxxQztBQ0FyMkQsbUNBQW1DLHNDQUFzQyxzQkFBc0IsbUNBQW1DLGFBQWEsbUJBQW1CLDhCQUE4QiwrQkFBK0IsK0NBQStDLGtDQUFrQyxvREFBb0QsYUFBYSxtQkFBbUIscUJBQXFCLDJCQUEyQiwyQkFBMkIseUJBQXlCLHNDQUFzQyx5QkFBeUIsdUVBQXVFLDBDQUEwQyxpQkFBaUIsaURBQWlELDJEQUEyRCxlQUFlLGdCQUFnQiwrQ0FBK0MsYUFBYSxxQkFBcUIsa0NBQWtDLHlCQUF5QixxQkFBcUIsb0NBQW9DLGVBQWUsMkNBQTJDLFNBQVMsNkNBQTZDLG9DQUFvQyxzQ0FBc0MsOENBQThDLDZDQUE2Qyw0RkFBNEYsa0NBQWtDLGlDQUFpQyxpREFBaUQsbUNBQW1DLDZEQUE2RCw4QkFBOEIsbUVBQW1FLG1DQUFtQyxnQkFBZ0Isa0dBQWtHLG1CQUFtQiwyTUFBMk0scUJBQXFC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OElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFNBQVMsOENBQThDLFVBQVUsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFNBQVMsOENBQThDLFNBQVMsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFdBQVcsOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFdBQVcsOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFdBQVcsOENBQThDLFNBQVMsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFNBQVMsOENBQThDLFNBQVMsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFdBQVcsOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFdBQVcsOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVks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K0JBQStCLG9CQUFvQixxQkFBcUIsZ0NBQWdDLGVBQWUsaUJBQWlCLCtCQUErQixvQkFBb0IscUJBQXFCLCtCQUErQixhQUFhLGNBQWMsZ0NBQWdDLG9CQUFvQixxQkFBcUIsZ0NBQWdDLG9CQUFvQixxQkFBcUIsZ0NBQWdDLGNBQWMsZ0JBQWdCLG9DQUFvQyxzREFBc0Qsb0NBQW9DLHNEQUFzRCxxQ0FBcUMsa0ZBQWtGLHdCQUF3Qix1QkFBdUIsaUJBQWlCLHdqQkFBd2pCLFNBQVMsZUFBZSxZQUFZLG1CQUFtQixXQUFXLG9EQUFvRCxxQkFBcUIsYUFBYSxtQkFBbUIseUJBQXlCLFNBQVMsZUFBZSxZQUFZLG1CQUFtQix1WEFBdVgsU0FBUyxnRUFBZ0UsY0FBYyxTQUFTLFVBQVUsZ0JBQWdCLFdBQVcsdUNBQXVDLGFBQWEsY0FBYyx1Q0FBdUMsb0JBQW9CLHFCQUFxQix1Q0FBdUMsYUFBYSxjQUFjLHVDQUF1QyxvQkFBb0IscUJBQXFCLHVDQUF1QyxvQkFBb0IscUJBQXFCLHVDQUF1QyxjQUFjLGVBQWUscUNBQXFDLG1CQUFtQixpUkFBaVIsbUNBQW1DLGdCQUFnQix5Q0FBeUMsb0RBQW9ELHNCQUFzQixxQ0FBcUMsa0NBQWtDLGtCQUFrQiw4QkFBOEIsMkJBQTJCLHVCO0FDQTMxbEIsNkNBQTZDLHFCQUFxQiw4RUFBOEUscUJBQXFCLDhDQUE4Qyx5QkFBeUIsc0IiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1jb21wb25lbnRzLjJhMjVlZWU3NzAxYzAwNmQzZjM3LmRpc3QuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmVlLWVudGl0eS1wYWdpbmF0aW9ue2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctbGVmdDowO21hcmdpbjoyMHB4IDA7Ym9yZGVyLXJhZGl1czo0cHh9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpe2Rpc3BsYXk6aW5saW5lfS5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saT5hLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saT5zcGFue3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2Zsb2F0OmxlZnQ7cGFkZGluZzo2cHggMTJweDttYXJnaW4tbGVmdDotMXB4O2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7Y29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtYm9yZGVyLWNvbG9yKX0uZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+bGk6Zmlyc3QtY2hpbGQ+YSwuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+bGk6Zmlyc3QtY2hpbGQ+c3BhbnttYXJnaW4tbGVmdDowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4fS5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saTpsYXN0LWNoaWxkPmEsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpOmxhc3QtY2hpbGQ+c3BhbnttYXJnaW4tcmlnaHQ6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uZGlzYWJsZWQ+YSwuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmRpc2FibGVkPmE6Zm9jdXMsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5kaXNhYmxlZD5hOmhvdmVyLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uZGlzYWJsZWQ+c3BhbiwuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmRpc2FibGVkPnNwYW46Zm9jdXMsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5kaXNhYmxlZD5zcGFuOmhvdmVye2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTApO2N1cnNvcjpkZWZhdWx0O2JvcmRlci1jb2xvcjp2YXIoLS1lZS1ib3JkZXItY29sb3IpfS5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saT5hOmZvY3VzLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saT5hOmhvdmVyLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saT5zcGFuOmZvY3VzLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saT5zcGFuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS0xNCk7ei1pbmRleDozfS5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uYWN0aXZlPmEsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5hY3RpdmU+YTpmb2N1cywuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmFjdGl2ZT5hOmhvdmVyLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uYWN0aXZlPnNwYW4sLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5hY3RpdmU+c3Bhbjpmb2N1cywuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmFjdGl2ZT5zcGFuOmhvdmVye3otaW5kZXg6Mjtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLXByaW1hcnkpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7Ym9yZGVyLWNvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnkpfSIsIi5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXJ7YmFja2dyb3VuZDp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy10aW55KTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTkpO21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKX0uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhciwuZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDthbGlnbi1pdGVtczpmbGV4LWVuZH0uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhcntqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJ7bWF4LWhlaWdodDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luOi0xcHggY2FsYyh2YXIoLS1lZS1tYXJnaW4tbWljcm8pKi0xKSB2YXIoLS1lZS1tYXJnaW4tc21hbGxlcikgMH0uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci1wZXJQYWdlLXNlbGVjdHt0ZXh0LWFsaWduOnJpZ2h0fS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyIC5lZS1maWx0ZXItYmFyLWZpbHRlcnttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpIHZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwO21heC13aWR0aDoxMDAlO3doaXRlLXNwYWNlOnByZX0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmVlLWZpbHRlci1iYXItZmlsdGVye2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtoZWlnaHQ6dmFyKC0tZWUtaWNvbi1idXR0b24tc2l6ZSk7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2FsaWduLWl0ZW1zOmZsZXgtZW5kO21hcmdpbjowIDAgMCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpO21heC13aWR0aDoxMDAlfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuZWUtc2VhcmNoLWZpbHRlcnttYXJnaW46MH0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmVlLXBlci1wYWdlLWZpbHRlcnttYXJnaW4tcmlnaHQ6dmFyKC0tZWUtbWFyZ2luLW1pY3JvKTttYXgtaGVpZ2h0OnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuZWUtZ3JpZC12aWV3LWZpbHRlcnttYXJnaW46MCBjYWxjKHZhcigtLWVlLW1hcmdpbi1taWNybykqLTEpIDAgMH0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmVlLWdyaWQtdmlldy1maWx0ZXIsLmVlLWVudGl0eS1saXN0LXZpZXctYmFyIC5lZS1saXN0LXZpZXctZmlsdGVye2hlaWdodDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKTt3aWR0aDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKX0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b257Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKX0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uYWN0aXZlLWxpc3R7Y29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSl9LmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlciAuY29tcG9uZW50cy1iYXNlLWNvbnRyb2xfX2xhYmVse2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tbWljcm8pIHZhcigtLWVlLW1hcmdpbi10aW55KSB2YXIoLS1lZS1tYXJnaW4tbWljcm8pIHZhcigtLWVlLW1hcmdpbi1taWNybyk7d2hpdGUtc3BhY2U6bm93cmFwfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgLmNvbXBvbmVudHMtYmFzZS1jb250cm9sX19sYWJlbCwuZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyIC5jb21wb25lbnRzLXNlbGVjdC1jb250cm9sX19pbnB1dCwuZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyIC5jb21wb25lbnRzLXRleHQtY29udHJvbF9faW5wdXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6YXV0bzttYXgtd2lkdGg6MTAwJX0uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyIGlucHV0LC5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgc2VsZWN0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWVlLWJvcmRlci1yYWRpdXMtc21hbGwpO2JveC1zaGFkb3c6bm9uZTtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50O2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtsaW5lLWhlaWdodDoxO2hlaWdodDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKSFpbXBvcnRhbnQ7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKSB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDoxMDAlfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgc2VsZWN0IG9wdGlvbntsaW5lLWhlaWdodDoyMCFpbXBvcnRhbnQ7bWluLWhlaWdodDpjYWxjKHZhcigtLWVlLXBhZGRpbmctc21hbGwpKjMwKSFpbXBvcnRhbnQ7cGFkZGluZzpjYWxjKHZhcigtLWVlLXBhZGRpbmctc21hbGwpKjEwKSB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIWltcG9ydGFudH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MTI4MHB4KXsuZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyIC5jb21wb25lbnRzLWJhc2UtY29udHJvbF9fbGFiZWwsLmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlciAuY29tcG9uZW50cy1zZWxlY3QtY29udHJvbF9faW5wdXR7ZGlzcGxheTpibG9ja30uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhcnttYXJnaW46MCAwIHZhcigtLWVlLW1hcmdpbi1kZWZhdWx0KX0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJ7bWF4LWhlaWdodDoxMThweH19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo2MDBweCl7LmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlcntmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1lZS1wYWRkaW5nLXNtYWxsKX0uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhciwuZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJ7d2lkdGg6MTAwJX0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJ7ZmxleC1mbG93OnJvdyBub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7aGVpZ2h0OmNhbGModmFyKC0tZWUtaWNvbi1idXR0b24tc2l6ZSkqMS41KTttYXJnaW46MDt0ZXh0LWFsaWduOmxlZnR9LmVlLWVudGl0eS1saXN0LXZpZXctYmFyIC5lZS1maWx0ZXItYmFyLWZpbHRlcntoZWlnaHQ6YXV0bzttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpIDAgMH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjQ4MHB4KXsuZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhciAuZWUtZmlsdGVyLWJhci1maWx0ZXJ7bWFyZ2luOjAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKSB2YXIoLS1lZS1tYXJnaW4tc21hbGxlcikgMH0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJ7ZmxleC1mbG93OnJvdyB3cmFwO2hlaWdodDphdXRvO21heC1oZWlnaHQ6dW5zZXR9LmVlLWVudGl0eS1saXN0LXZpZXctYmFyIC5lZS1maWx0ZXItYmFyLWZpbHRlcntoZWlnaHQ6YXV0bztqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpIHZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwO21heC1oZWlnaHQ6dW5zZXR9fSIsIi5lZS1mb3JtLWNvbnRhaW5lci1kaXZ7Y2xlYXI6Ym90aDtoZWlnaHQ6MDtvcGFjaXR5OjB9LmVlLWZvcm0tZmFkZS1pbntoZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3BhY2l0eToxIWltcG9ydGFudDt0cmFuc2l0aW9uOmhlaWdodCAuMjVzIDBtcyxvcGFjaXR5IC4yNXMgLjI1c30iLCIuZWUtZm9ybS1wbGFjZWhvbGRlci1kaXZ7Ym9yZGVyOjFweCBkYXNoZWQgdmFyKC0tZWUtY29sb3ItZ3JleS0xMSk7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1kZWZhdWx0KSAwfS5lZS1lZGl0b3ItZGl2Pi5lZS1mb3JtLXBsYWNlaG9sZGVyLWRpdntib3JkZXItY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS0xMSk7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1kZWZhdWx0KSAwfS5lZS1mb3JtLXBsYWNlaG9sZGVyLWRpdjphZnRlcntjb250ZW50OlwiXCI7Y2xlYXI6Ym90aDtkaXNwbGF5OnRhYmxlfS5lZS1mb3JtLWZhZGUtb3V0e2hlaWdodDowO21hcmdpbjowIWltcG9ydGFudDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246aGVpZ2h0IDBtcyAuMjVzLG1hcmdpbiAwbXMgLjI1cyxvcGFjaXR5IC4yNXMgMG1zfS5lZS1sb2FkaW5nLWRpdntjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3Itc3VwZXItbG93LWNvbnRyYXN0KTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tZXh0cmVtZSkgYXV0bzt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9LmVlLWZvcm0tZmFkZS1vdXQgLmVlLWxvYWRpbmctZGl2e2xpbmUtaGVpZ2h0OjA7aGVpZ2h0OjA7bWFyZ2luOjB9LmVlLWZvcm0tcGxhY2Vob2xkZXItZGl2IC5jb21wb25lbnRzLXNwaW5uZXJ7ZmxvYXQ6dW5zZXQhaW1wb3J0YW50O21hcmdpbjowIHZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwIDA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lZS1mb3JtLXBsYWNlaG9sZGVyLWRpdiAuZWUtZm9ybS1wbGFjZWhvbGRlci1ub3RpY2V7dmVydGljYWwtYWxpZ246bWlkZGxlfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lZS1mb3JtLXBsYWNlaG9sZGVyLWRpdnttYXJnaW46dmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpIDB9fSIsIi5lZS1mb3JtLWRhdGEtZHVtcC1kaXZ7bWFyZ2luOjA7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLWRlZmF1bHQpfS5lZS1mb3JtLWRhdGEtZHVtcC1kaXYgaDN7bWFyZ2luOjB9LmVlLWZvcm0tZGF0YS1kdW1wLWRpdiBwcmV7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLXNtYWxsKTtjb2xvcjp2YXIoLS1lZS1jb2xvci1saWdodC1ncmVlbik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1pbmRpZ28pO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWxpbmUtaGVpZ2h0LW1vZGlmaWVyKTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctc21hbGwpIHZhcigtLWVlLXBhZGRpbmctZGVmYXVsdCk7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xcHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7d29yZC13cmFwOmJyZWFrLXdvcmR9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjQ4MHB4KXsuZWUtZm9ybS1kYXRhLWR1bXAtZGl2LC5lZS1mb3JtLWRhdGEtZHVtcC1kaXYgcHJle3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjM2MHB4KXsuZWUtZm9ybS1kYXRhLWR1bXAtZGl2LC5lZS1mb3JtLWRhdGEtZHVtcC1kaXYgcHJle3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy10aW55KX19IiwiLmVlLXN1Ym1pdHRpbmctbm90aWNlLXdyYXBwZXJ7ei1pbmRleDo5OTl9LmVlLXN1Ym1pdHRpbmctbm90aWNle2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWJyaWdodC1ncmVlbik7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLXNtYWxsKTtib3gtc2hhZG93OnZhcigtLWVlLWJveC1zaGFkb3ctdGlueSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLWVlLXRleHQtb24tYnJpZ2h0LWdyZWVuLWhpZ2gtY29udHJhc3QpO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKTtmb250LXdlaWdodDo0MDA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bGVmdDowO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7cmlnaHQ6MDttYXJnaW46MCBhdXRvO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3b3JkLXdyYXA6bm9ybWFsO3otaW5kZXg6OTk5fS5lZS1zdWJtaXR0aW5nLW5vdGljZS5lZS1zbWFsbHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpO2hlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKSozKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7d2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtbWljcm8pKjE1KX0uZWUtc3VibWl0dGluZy1ub3RpY2UuZWUtc21hbGwgLmVlLXNwaW5uZXItd3JhcHBlcnttYXJnaW4tcmlnaHQ6dmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpO3BhZGRpbmc6MCB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpfS5lZS1zdWJtaXR0aW5nLW5vdGljZS5lZS1kZWZhdWx0e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGwpO2hlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCkqMyk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKSoyMCl9LmVlLXN1Ym1pdHRpbmctbm90aWNlLmVlLWRlZmF1bHQgLmVlLXNwaW5uZXItd3JhcHBlcnttYXJnaW4tcmlnaHQ6dmFyKC0tZWUtbWFyZ2luLXNtYWxsKTtwYWRkaW5nOjAgdmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKX0uZWUtc3VibWl0dGluZy1ub3RpY2UuZWUtYmlne2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7aGVpZ2h0OmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjMpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSoyNSl9LmVlLXN1Ym1pdHRpbmctbm90aWNlLmVlLWJpZyAuZWUtc3Bpbm5lci13cmFwcGVye21hcmdpbi1yaWdodDp2YXIoLS1lZS1tYXJnaW4tZGVmYXVsdCk7cGFkZGluZzowIHZhcigtLWVlLXBhZGRpbmctc21hbGwpfS5lZS1zdWJtaXR0aW5nLW5vdGljZSAuZWUtc3Bpbm5lci13cmFwcGVye2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWJyaWdodC1ncmVlbi1oaWdoLWNvbnRyYXN0KTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWVlLWJvcmRlci1yYWRpdXMtc21hbGwpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWUtYm9yZGVyLXJhZGl1cy1zbWFsbCk7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlfS5lZS1zdWJtaXR0aW5nLW5vdGljZSAuY29tcG9uZW50cy1zcGlubmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtdGV4dC1vbi1icmlnaHQtZ3JlZW4taGlnaC1jb250cmFzdCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3BhY2l0eToxO2Zsb2F0Om5vbmU7bWFyZ2luOjAhaW1wb3J0YW50O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWUtc3VibWl0dGluZy1ub3RpY2UgLmNvbXBvbmVudHMtc3Bpbm5lcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1icmlnaHQtZ3JlZW4taGlnaC1jb250cmFzdCl9LmVlLXN1Ym1pdHRpbmctbm90aWNlLmVlLXNtYWxsIC5jb21wb25lbnRzLXNwaW5uZXJ7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTt3aWR0aDp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcil9LmVlLXN1Ym1pdHRpbmctbm90aWNlLmVlLXNtYWxsIC5jb21wb25lbnRzLXNwaW5uZXI6YmVmb3Jle3RyYW5zZm9ybS1vcmlnaW46Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcikvMykgY2FsYyh2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcikvMyl9LmVlLXN1Ym1pdHRpbmctbm90aWNlLmVlLWRlZmF1bHQgLmNvbXBvbmVudHMtc3Bpbm5lcntoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKTt3aWR0aDp2YXIoLS1lZS1mb250LXNpemUtc21hbGwpfS5lZS1zdWJtaXR0aW5nLW5vdGljZS5lZS1kZWZhdWx0IC5jb21wb25lbnRzLXNwaW5uZXI6YmVmb3Jle3RyYW5zZm9ybS1vcmlnaW46Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtc21hbGwpLzMpIGNhbGModmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKS8zKX0uZWUtc3VibWl0dGluZy1ub3RpY2UuZWUtYmlnIC5jb21wb25lbnRzLXNwaW5uZXJ7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTt3aWR0aDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCl9LmVlLXN1Ym1pdHRpbmctbm90aWNlLmVlLWJpZyAuY29tcG9uZW50cy1zcGlubmVyOmJlZm9yZXt0cmFuc2Zvcm0tb3JpZ2luOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpLzMpIGNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpLzMpfS5lZS1zdWJtaXR0aW5nLW5vdGljZSAuZWUtZWxsaXBzaXMtd3JhcHBlcnt3aWR0aDoxLjI1ZW19LmVlLWVsbGlwc2lzLXNwYW4tMXthbmltYXRpb246ZWxsaXBzaXMtZG90IDEuM3MgaW5maW5pdGU7YW5pbWF0aW9uLWRlbGF5OjBzO29wYWNpdHk6MH0uZWUtZWxsaXBzaXMtc3Bhbi0ye2FuaW1hdGlvbjplbGxpcHNpcy1kb3QgMS4zcyBpbmZpbml0ZTthbmltYXRpb24tZGVsYXk6LjJzO29wYWNpdHk6MH0uZWUtZWxsaXBzaXMtc3Bhbi0ze2FuaW1hdGlvbjplbGxpcHNpcy1kb3QgMS4zcyBpbmZpbml0ZTthbmltYXRpb24tZGVsYXk6LjNzO29wYWNpdHk6MH1Aa2V5ZnJhbWVzIGVsbGlwc2lzLWRvdHswJXtvcGFjaXR5OjB9NTAle29wYWNpdHk6MH10b3tvcGFjaXR5OjF9fS5lZS1wb3NpdGlvbi1hYm92ZXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKSotMSl9LmVlLXBvc2l0aW9uLWJlbG93e3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1odWdlKSotMSl9IiwiLmJpZ2dpZS1jYWxlbmRhci1kYXRlLWJne2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1lZS1jb2xvci13aGl0ZSk7aGVpZ2h0OjEwMCU7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIHZhcigtLWVlLXBhZGRpbmctbWljcm8pO3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOmNhbGModmFyKC0tZWUtcGFkZGluZy1taWNybykqMzQpO3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uYmlnZ2llLWNhbGVuZGFyLWRhdGUtYmcuYmNkLXBvcy1sZWZ0e2Zsb2F0OmxlZnQ7bGVmdDowfS5iaWdnaWUtY2FsZW5kYXItZGF0ZS1iZy5iY2QtcG9zLXJpZ2h0e2Zsb2F0OnJpZ2h0O3JpZ2h0OjB9LmJpZ2dpZS1jYWxlbmRhci1kYXRlLWhlYWRlcntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLW1pY3JvKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLW1pY3JvKX0uYmlnZ2llLWNhbGVuZGFyLWRhdGUgLndlZWtkYXl7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLXRpbnkpfS5iaWdnaWUtY2FsZW5kYXItZGF0ZSAubW9udGh7Zm9udC1zaXplOmNhbGModmFyKC0tZWUtZm9udC1zaXplLXRpbnkpKjIpO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS10aW55KSoyKX0ubW9udGgtZGF5LXNlcHtkaXNwbGF5Om5vbmV9LmJpZ2dpZS1jYWxlbmRhci1kYXRlIC5kYXl7b3BhY2l0eTouODtmb250LXNpemU6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtYmlnKSoyKTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtYmlnKSoyKTt0ZXh0LXNoYWRvdzp2YXIoLS1lZS10ZXh0LXNoYWRvdy1pbnNldCl9LmJpZ2dpZS1jYWxlbmRhci1kYXRlIC55ZWFye2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7bGV0dGVyLXNwYWNpbmc6Y2FsYyh2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pKjIpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtsZWZ0OnZhcigtLWVlLXBhZGRpbmctbmFubyk7cG9zaXRpb246cmVsYXRpdmV9LmJpZ2dpZS1jYWxlbmRhci1kYXRlLWZvb3RlciwuYmlnZ2llLWNhbGVuZGFyLWRhdGUgLmVlLW1jZC10aW1le2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcil9LmJpZ2dpZS1jYWxlbmRhci1kYXRlLWZvb3RlcntsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTttYXJnaW46dmFyKC0tZWUtbWFyZ2luLXRpbnkpIDAgMDt0ZXh0LXNoYWRvdzp2YXIoLS1lZS10ZXh0LXNoYWRvdy1pbnNldCk7d2hpdGUtc3BhY2U6cHJlLWxpbmV9LmJpZ2dpZS1jYWxlbmRhci1kYXRlLWZvb3RlciAuZWUtc3RhdHVzLXRhZ3tkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uYmlnZ2llLWNhbGVuZGFyLWRhdGUtYmcgLmVlLWVkaXQtY2FsZW5kYXItZGF0ZS1idG57Y29sb3I6aHNsYSgwLDAlLDEwMCUsLjUpO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5iaWdnaWUtY2FsZW5kYXItZGF0ZS1iZyAuZWUtZWRpdC1jYWxlbmRhci1kYXRlLWJ0bjpmb2N1czplbmFibGVkLC5iaWdnaWUtY2FsZW5kYXItZGF0ZS1iZyAuZWUtZWRpdC1jYWxlbmRhci1kYXRlLWJ0bjpub3QoOmRpc2FibGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pOm5vdCguaXMtZGVmYXVsdCk6YWN0aXZlLC5iaWdnaWUtY2FsZW5kYXItZGF0ZS1iZyAuZWUtZWRpdC1jYWxlbmRhci1kYXRlLWJ0bjpub3QoOmRpc2FibGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pOm5vdCguaXMtZGVmYXVsdCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1lZS1jb2xvci13aGl0ZSk7Ym94LXNoYWRvdzpub25lfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmJpZ2dpZS1jYWxlbmRhci1kYXRlLWJne2NsZWFyOmJvdGg7ZmxvYXQ6bm9uZTtoZWlnaHQ6YXV0bztwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbWljcm8pO3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OnVuc2V0O3dpZHRoOjEwMCUhaW1wb3J0YW50fS5iaWdnaWUtY2FsZW5kYXItZGF0ZS1iZy5iY2QtcG9zLWxlZnQsLmJpZ2dpZS1jYWxlbmRhci1kYXRlLWJnLmJjZC1wb3MtcmlnaHR7ZmxvYXQ6bm9uZX0uYmlnZ2llLWNhbGVuZGFyLWRhdGUsLmJpZ2dpZS1jYWxlbmRhci1kYXRlLWZvb3RlciwuYmlnZ2llLWNhbGVuZGFyLWRhdGUtaGVhZGVyLC5tb250aC1kYXktc2Vwe2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tZWUtZm9udC1zaXplLWJpZykgLSAzcHgpfS5iaWdnaWUtY2FsZW5kYXItZGF0ZS1mb290ZXIsLmJpZ2dpZS1jYWxlbmRhci1kYXRlLWhlYWRlcnttYXJnaW46MH0uYmlnZ2llLWNhbGVuZGFyLWRhdGUgLmRheSwuYmlnZ2llLWNhbGVuZGFyLWRhdGUgLm1vbnRoLC5iaWdnaWUtY2FsZW5kYXItZGF0ZSAud2Vla2RheSwuYmlnZ2llLWNhbGVuZGFyLWRhdGUgLnllYXJ7Y29sb3I6dmFyKC0tZWUtY29sb3Itd2hpdGUpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tZWUtZm9udC1zaXplLWJpZykgLSAzcHgpO2xldHRlci1zcGFjaW5nOjA7bWFyZ2luOjAgdmFyKC0tZWUtbWFyZ2luLW1pY3JvKTt0ZXh0LXNoYWRvdzpub25lfS5iaWdnaWUtY2FsZW5kYXItZGF0ZSAueWVhcntsZWZ0OnVuc2V0fX0iLCIuZWUtY2FsZW5kYXItZGF0ZS1yYW5nZS13cmFwcGVye2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1lZS1jb2xvci13aGl0ZSk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1taWNybyk7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtoZWlnaHQ6MTAwJTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy10aW55KSB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOmNhbGModmFyKC0tZWUtcGFkZGluZy1taWNybykqMzQpfS5lZS1jYWxlbmRhci1kYXRlLXJhbmdlLXdyYXBwZXIuY2RyLXBvcy1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246MTAwJTtmbG9hdDpsZWZ0O2xlZnQ6MH0uZWUtY2FsZW5kYXItZGF0ZS1yYW5nZS13cmFwcGVyLmNkci1wb3MtcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjowO2Zsb2F0OnJpZ2h0O3JpZ2h0OjB9LmVlLWNhbGVuZGFyLWRhdGUtcmFuZ2Utd3JhcHBlciAuZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXI+ZGl2e21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tbmFubykgYXV0byAwfS5lZS1jZHItd2Vla2RheXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpO2xldHRlci1zcGFjaW5nOnZhcigtLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS10aW55KTt0ZXh0LWFsaWduOmNlbnRlcn0uZWUtY2RyLW1vbnRoLWFuZC1kYXl7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKX0uZWUtY2RyLWRheXttYXJnaW46MCAwIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpfS5lZS1jZHIteWVhcntsZXR0ZXItc3BhY2luZzpjYWxjKHZhcigtLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS1taWNybykqMik7bGVmdDp2YXIoLS1lZS1wYWRkaW5nLW5hbm8pO3Bvc2l0aW9uOnJlbGF0aXZlfS5lZS1jYWxlbmRhci1kYXRlLXJhbmdlLXNlcGFyYXRvcntib3gtc2l6aW5nOmJvcmRlci1ib3g7Y2xlYXI6Ym90aDtjb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctdGlueSkgMDt3aWR0aDoxMDAlfS5lZS1jZHItdGltZXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpfS5lZS1jYWxlbmRhci10aW1lLXNlcGFyYXRvcntjb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKTttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tbmFubyl9LmVlLWNhbGVuZGFyLWRhdGUtcmFuZ2UtZm9vdGVyLC5lZS1jYWxlbmRhci1kYXRlLXJhbmdlLWhlYWRlcntmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKX0iLCIuZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUtd3JhcHBlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tZWUtY29sb3Itd2hpdGUpO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7aGVpZ2h0OjEwMCU7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIHZhcigtLWVlLXBhZGRpbmctbWljcm8pO3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOmNhbGModmFyKC0tZWUtcGFkZGluZy1taWNybykqMzQpfS5lZS1tZWRpdW0tY2FsZW5kYXItZGF0ZS13cmFwcGVyLmVlLW1jZC1wb3MtbGVmdHtmbG9hdDpsZWZ0O2xlZnQ6MH0uZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUtd3JhcHBlci5lZS1tY2QtcG9zLXJpZ2h0e2Zsb2F0OnJpZ2h0O3JpZ2h0OjB9LmVlLW1lZGl1bS1jYWxlbmRhci1kYXRlLWhlYWRlcntjb2xvcjpoc2xhKDAsMCUsMTAwJSwuOSk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pO21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLW1pY3JvKX0uZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUgLmVlLW1jZC13ZWVrZGF5e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLXRpbnkpfS5lZS1tZWRpdW0tY2FsZW5kYXItZGF0ZSAuZWUtbWNkLW1vbnRoLWRheXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcik7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpfS5lZS1tZWRpdW0tY2FsZW5kYXItZGF0ZSAuZWUtbWNkLWRheXttYXJnaW46MCAwIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpfS5lZS1tZWRpdW0tY2FsZW5kYXItZGF0ZSAuZWUtbWNkLXllYXJ7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKTtsZWZ0OnZhcigtLWVlLXBhZGRpbmctbmFubyk7cG9zaXRpb246cmVsYXRpdmV9LmVlLW1lZGl1bS1jYWxlbmRhci1kYXRlIC5lZS1tY2QtdGltZSwuZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUgLmVlLW1jZC15ZWFye2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpfS5lZS1tZWRpdW0tY2FsZW5kYXItZGF0ZT4uZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUtZm9vdGVye2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcik7bWFyZ2luOjA7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKSAwfS5lZS1tZWRpdW0tY2FsZW5kYXItZGF0ZS1mb290ZXIgLmVlLXN0YXR1cy10YWd7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9IiwiLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVye2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7dGV4dC1hbGlnbjpjZW50ZXJ9LmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS10aW55IC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1lbmQsLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS10aW55IC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1zdGFydHtoZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtYmlnKSoyKTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpKjIpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtc21hbGwgLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVyLWVuZCwuZWUtY2FsZW5kYXItcGFnZS1kYXRlLXNtYWxsIC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1zdGFydHtoZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKSoyKTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpKjIpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtbWVkaXVtIC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1lbmQsLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1tZWRpdW0gLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVyLXN0YXJ0e2hlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1odWdlKSoyKTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1odWdlKSoyKX0uZWUtY2FsZW5kYXItcGFnZS1kYXRlLWJpZyAuZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXItZW5kLC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtYmlnIC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1zdGFydHtoZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZXh0cmVtZSkqMik7d2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZXh0cmVtZSkqMil9LmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1tb250aHtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKX0uZWUtY2FsZW5kYXItcGFnZS1kYXRlLW1vbnRoLmVlLW5vLXN0YXR1cy1jbGFzc3tiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtdGlueSAuZWUtY2FsZW5kYXItcGFnZS1kYXRlLW1vbnRoe2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtbWljcm8pO2hlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCl9LmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1zbWFsbCAuZWUtY2FsZW5kYXItcGFnZS1kYXRlLW1vbnRoe2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtbWVkaXVtIC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtbW9udGh7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWh1Z2UpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtYmlnIC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtbW9udGh7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1leHRyZW1lKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtaHVnZSl9LmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1kYXl7YmFja2dyb3VuZDp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3Itc3VwZXItaGlnaC1jb250cmFzdCk7Zm9udC1mYW1pbHk6QXJpYWwgQmxhY2ssR2FkZ2V0LHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbjowIDFweCAxcHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xcHg7d2lkdGg6Y2FsYygxMDAlIC0gMnB4KX0uZWUtY2FsZW5kYXItcGFnZS1kYXRlLXRpbnkgLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1kYXl7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtc21hbGwgLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1kYXl7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcik7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcil9LmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1tZWRpdW0gLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1kYXl7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO2hlaWdodDp2YXIoLS1lZS1mb250LXNpemUtaHVnZSk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWh1Z2UpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtYmlnIC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtZGF5e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTtoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWV4dHJlbWUpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1leHRyZW1lKX0uZWUtY2FsZW5kYXItcGFnZS1kYXRlLXRve2NvbG9yOmhzbGEoMCwwJSwxMDAlLC43NSk7cG9zaXRpb246cmVsYXRpdmU7dG9wOnZhcigtLWVlLXBhZGRpbmctbmFubyk7bGVmdDp2YXIoLS1lZS1wYWRkaW5nLWRlZmF1bHQpO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtbWljcm8pO2xldHRlci1zcGFjaW5nOnZhcigtLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS1taWNybyk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpfSIsIi5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnV7cGFkZGluZzowfS5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fdG9nZ2xle2JhY2tncm91bmQ6bm9uZSFpbXBvcnRhbnQ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKSFpbXBvcnRhbnQ7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKSFpbXBvcnRhbnQ7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIHZhcigtLWVlLXBhZGRpbmctbWljcm8pfS5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fdG9nZ2xlOmhvdmVyLC5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fdG9nZ2xlOm5vdCg6ZGlzYWJsZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSk6bm90KC5pcy1kZWZhdWx0KTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWVlLWJhY2tncm91bmQtY29sb3IpIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWJvcmRlci1jb2xvcikhaW1wb3J0YW50O2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9LmVlLWRyb3AtZG93bi1tZW51LmNvbXBvbmVudHMtZHJvcGRvd24tbWVudSAuY29tcG9uZW50cy1kcm9wZG93bi1tZW51X190b2dnbGU6aG92ZXIsLmVlLWRyb3AtZG93bi1tZW51LmNvbXBvbmVudHMtZHJvcGRvd24tbWVudSAuY29tcG9uZW50cy1kcm9wZG93bi1tZW51X190b2dnbGU6bm90KDpkaXNhYmxlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKTpub3QoLmlzLWRlZmF1bHQpOmhvdmVye2NvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnkpIWltcG9ydGFudH0uZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX3RvZ2dsZTpmb2N1c3tjb2xvcjp2YXIoLS1lZS1jb2xvci1ibGFjayk7Ym94LXNoYWRvdzp2YXIoLS1lZS1ib3gtc2hhZG93LXdwLWljb24tYnRuLWZvY3VzKTtvdXRsaW5lOjJweCBzb2xpZCB0cmFuc3BhcmVudDtvdXRsaW5lLW9mZnNldDotMnB4fS5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fcG9wb3ZlciAuY29tcG9uZW50cy1wb3BvdmVyX19jb250ZW50e2JhY2tncm91bmQ6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS1lZS1ib3gtc2hhZG93LXNtYWxsKX0uZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLXBvcG92ZXI6bm90KC5pcy1tb2JpbGUpIC5jb21wb25lbnRzLXBvcG92ZXJfX2NvbnRlbnR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpIWltcG9ydGFudDttaW4td2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMTApfS5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtcG9wb3Zlcjpub3QoLmlzLXdpdGhvdXQtYXJyb3cpOm5vdCguaXMtbW9iaWxlKTphZnRlciwuZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLXBvcG92ZXI6bm90KC5pcy13aXRob3V0LWFycm93KTpub3QoLmlzLW1vYmlsZSk6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1lZS1ib3JkZXItY29sb3IpO2JvcmRlci1sZWZ0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjp0cmFuc3BhcmVudH0uZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLXBvcG92ZXI6bm90KC5pcy13aXRob3V0LWFycm93KTpub3QoLmlzLW1vYmlsZSkuaXMtdG9wOmFmdGVyLC5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtcG9wb3Zlcjpub3QoLmlzLXdpdGhvdXQtYXJyb3cpOm5vdCguaXMtbW9iaWxlKS5pcy10b3A6YmVmb3Jle2JvdHRvbTotN3B4fS5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtcG9wb3Zlcjpub3QoLmlzLXdpdGhvdXQtYXJyb3cpOm5vdCguaXMtbW9iaWxlKS5pcy1ib3R0b206YWZ0ZXIsLmVlLWRyb3AtZG93bi1tZW51LmNvbXBvbmVudHMtZHJvcGRvd24tbWVudSAuY29tcG9uZW50cy1wb3BvdmVyOm5vdCguaXMtd2l0aG91dC1hcnJvdyk6bm90KC5pcy1tb2JpbGUpLmlzLWJvdHRvbTpiZWZvcmV7dG9wOi03cHh9LmNvbXBvbmVudHMtcG9wb3Zlcjpub3QoLmlzLXdpdGhvdXQtYXJyb3cpOm5vdCguaXMtbW9iaWxlKS5pcy10b3A6YWZ0ZXJ7Ym90dG9tOi02cHh9LmVlLWRyb3AtZG93bi1tZW51LmNvbXBvbmVudHMtZHJvcGRvd24tbWVudSAuY29tcG9uZW50cy1kcm9wZG93bi1tZW51X19tZW51e2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKSB2YXIoLS1lZS1wYWRkaW5nLXNtYWxsKX0uZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX21lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fbWVudS1pdGVte2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIHZhcigtLWVlLXBhZGRpbmctZGVmYXVsdCkgdmFyKC0tZWUtcGFkZGluZy10aW55KSB2YXIoLS1lZS1wYWRkaW5nLXNtYWxsZXIpO3doaXRlLXNwYWNlOm5vd3JhcH0uZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX21lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fbWVudS1pdGVtOmFjdGl2ZSwuZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX21lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fbWVudS1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS0xNCk7Ym94LXNoYWRvdzpub25lO2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1oaWdoLWNvbnRyYXN0KX0uZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX21lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fbWVudS1pdGVtOmZvY3VzOm5vdCg6ZGlzYWJsZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSk6bm90KC5pcy1kZWZhdWx0KXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTQpO2JveC1zaGFkb3c6bm9uZTtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3ItaGlnaC1jb250cmFzdCk7b3V0bGluZS1vZmZzZXQ6LTJweDtvdXRsaW5lOjFweCBkb3R0ZWQgdmFyKC0tZWUtY29sb3ItZ3JleS04KX0iLCIuZWUtZW50aXR5LWRldGFpbHMtcGFuZWwtZGl2e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZXh0cmVtZSk7d2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtdGlueSkqMTkpfS5lZS1lbnRpdHktZGV0YWlscy1wYW5lbC1kaXYsLmVlLWVudGl0eS1kZXRhaWxzLXBhbmVsLWRpdiAuZWUtaW5saW5lLWVkaXQtdGV4dHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyl9LmVlLWVudGl0eS1kZXRhaWxzLWRpdntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2U7bWF4LXdpZHRoOnZhcigtLWVlLWZvbnQtc2l6ZS1leHRyZW1lKX0uZWUtZW50aXR5LWRldGFpbHMtZGl2IC5lZS1pbmxpbmUtZWRpdC1pbnB1dHttYXgtd2lkdGg6dmFyKC0tZWUtZm9udC1zaXplLWV4dHJlbWUpO21hcmdpbjowIDAgY2FsYyh2YXIoLS1lZS1tYXJnaW4tbWljcm8pKi0xKX0uZWUtZW50aXR5LWRldGFpbHMtbGFiZWwtZGl2e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1zdXBlci1oaWdoLWNvbnRyYXN0KTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLW1pY3JvKTtsZXR0ZXItc3BhY2luZzoxcHh9LmVlLWVudGl0eS1kZXRhaWxzLXZhbHVlLWRpdntmb250LXdlaWdodDo3MDB9LmVlLWVudGl0eS1kZXRhaWxzLXNlcGFyYXRvcntib3JkZXI6MCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiYSgwLDAsMCwuMjUpO2hlaWdodDp2YXIoLS1lZS1mb250LXNpemUtaHVnZSl9LmVlLWluZmluaXR5LXNpZ257Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWUtZW50aXR5LWRldGFpbHMtdmFsdWUtZGl2IGF7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JveC1zaGFkb3c6bm9uZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7aGVpZ2h0OnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTttYXJnaW46MCBhdXRvIGNhbGModmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcikvLTQpO291dGxpbmUtc3R5bGU6bm9uZTt0ZXh0LWRlY29yYXRpb246bm9uZSFpbXBvcnRhbnQ7d2lkdGg6dmFyKC0tZWUtaWNvbi1idXR0b24tc2l6ZSl9LmVlLWVudGl0eS1kZXRhaWxzLXZhbHVlLWRpdiAuZGFzaGljb257bWFyZ2luOjA7cG9zaXRpb246cmVsYXRpdmU7dG9wOnZhcigtLWVlLW1hcmdpbi1taWNybykhaW1wb3J0YW50fS5lZS1lbnRpdHktZGV0YWlscy12YWx1ZS1kaXYgYTpmb2N1cywuZWUtZW50aXR5LWRldGFpbHMtdmFsdWUtZGl2IGE6aG92ZXJ7Y29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSl9LmVlLWVudGl0eS1kZXRhaWxzLXZhbHVlLWRpdiBhOmFjdGl2ZXtjb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5LWxvdy1jb250cmFzdCl9LmVlLWVudGl0eS1kZXRhaWxzLXZhbHVlLWRpdiBhOnZpc2l0ZWR7Y29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeS1oaWdoLWNvbnRyYXN0KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjYwMHB4KXsuZWUtZW50aXR5LWRldGFpbHMtcGFuZWwtZGl2e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7d2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMTApfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5lZS1lbnRpdHktZGV0YWlscy1wYW5lbC1kaXZ7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDphdXRvO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKSAwIDA7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJX0uZWUtZW50aXR5LWRldGFpbHMtZGl2e2ZsZXgtZGlyZWN0aW9uOnJvdzttYXgtd2lkdGg6dW5zZXQ7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJX0uZWUtZW50aXR5LWRldGFpbHMtdmFsdWUtZGl2e3BhZGRpbmctbGVmdDp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjI1JX0uZWUtZW50aXR5LWRldGFpbHMtbGFiZWwtZGl2e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1oaWdoLWNvbnRyYXN0KTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXRpbnkpO2xldHRlci1zcGFjaW5nOjA7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo1MCV9LmVlLWVudGl0eS1kZXRhaWxzLXNlcGFyYXRvcntkaXNwbGF5Om5vbmV9fSIsIi5lc3ByZXNzby1lZGl0b3IgLmVlLWlubGluZS1lZGl0LXRleHQ6aG92ZXJ7Y29sb3I6dmFyKC0tZWUtY29sb3ItYnJpZ2h0LWdyZWVuLWhpZ2gtY29udHJhc3QpIWltcG9ydGFudH0uZXNwcmVzc28tZWRpdG9yIC5lZS1pbmxpbmUtZWRpdC1pbnB1dC5mb3JtLWNvbnRyb2x7Ym94LXNoYWRvdzpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7Zm9udC13ZWlnaHQ6NDAwO2hlaWdodDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbWljcm8pO3dpZHRoOjk1JX0uZXNwcmVzc28tZWRpdG9yIC5lZS1pbmxpbmUtZWRpdC1pbnB1dC1udW1iZXJ7dGV4dC1hbGlnbjpyaWdodH0uZXNwcmVzc28tZWRpdG9yIC5lZS1pbmxpbmUtZWRpdC1sYWJlbHtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3ItaGlnaC1jb250cmFzdCk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSFpbXBvcnRhbnQ7bWFyZ2luOjA7d2lkdGg6OTUlfS5lc3ByZXNzby1lZGl0b3IgLmVlLWlubGluZS1lZGl0LXRleHQgLmNvbXBvbmVudHMtdG9vbHRpcHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcil9IiwiLmVlLWVkaXRvci1lbnRpdHktbGlzdHt3aWR0aDoxMDEuMyV9LmVlLWVudGl0eS1saXN0LW5vLXJlc3VsdHN7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1ncmV5LTExKTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7cGFkZGluZzo0cmVtIDJyZW07dGV4dC1hbGlnbjpjZW50ZXJ9IiwiLmVlLWVudGl0eS1wYXBlci1mcmFtZS13cmFwcGVye21hcmdpbjowIDEuMyUgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKSAwO3dpZHRoOjMyJX0uZWUtZW50aXR5LXBhcGVyLWZyYW1lLXdyYXBwZXIsLmVlLWVudGl0eS13cmFwcGVye21heC13aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCkqMzMpO21pbi13aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCkqMjcpO3Bvc2l0aW9uOnJlbGF0aXZlfS5lZS1lbnRpdHktd3JhcHBlcntib3gtc2hhZG93OnZhcigtLWVlLWJveC1zaGFkb3ctYmlnLWRpZmZ1c2UpO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWUtZW50aXR5LXdyYXBwZXI+ZGl2OmZpcnN0LW9mLXR5cGV7Ym94LXNoYWRvdzppbnNldCAwIDAgMXB4IHZhcigtLWVlLWNvbG9yLWJsYWNrKX0uZWUtZW50aXR5LXBhcGVyLWZyYW1le2JvdHRvbTowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtc21hbGwpKjExKTttYXgtd2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtc21hbGwpKjMzKTt3aWR0aDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MH0uZWUtZW50aXR5LXBhcGVyLWZyYW1lOmFmdGVyLC5lZS1lbnRpdHktcGFwZXItZnJhbWU6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6XCJcIjtib3R0b206MTRweDtsZWZ0OjEwcHg7d2lkdGg6NTAlO3RvcDo3MCU7bWF4LXdpZHRoOjMwMHB4O2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItYmxhY2spO2JveC1zaGFkb3c6MCAxNXB4IDEwcHggcmdiYSgwLDAsMCwuNik7dHJhbnNmb3JtOnJvdGF0ZSgtM2RlZyk7ei1pbmRleDotMX0uZWUtZW50aXR5LXBhcGVyLWZyYW1lOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoM2RlZyk7cmlnaHQ6MTBweDtsZWZ0OmF1dG99QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjE3NjZweCl7LmVlLWVudGl0eS1wYXBlci1mcmFtZS13cmFwcGVye21hcmdpbi1yaWdodDoxLjUlO3dpZHRoOjQ4LjUlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MTM2NnB4KXsuZWUtZW50aXR5LXBhcGVyLWZyYW1lLC5lZS1lbnRpdHktcGFwZXItZnJhbWUtd3JhcHBlciwuZWUtZW50aXR5LXdyYXBwZXJ7bWF4LXdpZHRoOjUyNXB4O3dpZHRoOjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo4NTBweCl7LmVlLWVudGl0eS1wYXBlci1mcmFtZSwuZWUtZW50aXR5LXBhcGVyLWZyYW1lLXdyYXBwZXIsLmVlLWVudGl0eS13cmFwcGVye3dpZHRoOjEwMCV9LmVlLWVudGl0eS1wYXBlci1mcmFtZSwuZWUtZW50aXR5LXdyYXBwZXJ7bWF4LXdpZHRoOjUyNXB4fX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjYwMHB4KXsuZWUtZW50aXR5LXBhcGVyLWZyYW1lLC5lZS1lbnRpdHktcGFwZXItZnJhbWUtd3JhcHBlciwuZWUtZW50aXR5LXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7bWluLXdpZHRoOjEwMCU7d2lkdGg6MTAwJX19IiwiLmVlLWljb24tbWVudS1pdGVtLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9LmVlLWljb24tbWVudS1pdGVte2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7aGVpZ2h0OnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpO21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLW1pY3JvKTt3aWR0aDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKX0uZWUtaWNvbi1tZW51LWl0ZW06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKSFpbXBvcnRhbnQ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudDtjb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5KSFpbXBvcnRhbnQ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpfS5lZS1pY29uLW1lbnUtaXRlbS1jb3VudHtib3JkZXItcmFkaXVzOnZhcigtLWVlLWJvcmRlci1yYWRpdXMtZnVsbCk7Ym94LXNpemluZzpib3JkZXItYm94O2JveC1zaGFkb3c6dmFyKC0tZWUtYm94LXNoYWRvdy10aW55KTtjb2xvcjp2YXIoLS1lZS1jb2xvci13aGl0ZSk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KTtmb250LXdlaWdodDo0MDA7aGVpZ2h0OmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpICsgMXB4KTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtbWljcm8pO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1taWNybyk7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzp2YXIoLS1lZS10ZXh0LXNoYWRvdy1pbnNldCk7dG9wOjA7dmVydGljYWwtYWxpZ246dG9wO21pbi13aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSArIDFweCl9LmVlLWljb24tbWVudS1pdGVtLWNvdW50LmVlLWhhcy1pdGVtc3tiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWJyaWdodC1ibHVlKX0uZWUtaWNvbi1tZW51LWl0ZW0tY291bnQuZWUtbm8taXRlbXN7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1ob3QtcGluayk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KTtmb250LXdlaWdodDo3MDB9IiwiLmVlLXJUYWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTp0YWJsZTttYXJnaW46MCBhdXRvIHZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKTt0YWJsZS1sYXlvdXQ6Zml4ZWQ7dGV4dC1hbGlnbjpsZWZ0fS5lZS1yVGFibGUgLmVlLXJUYWJsZS1oZWFkZXJ7dmlzaWJpbGl0eTp2aXNpYmxlfS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS1yb3csLmVlLXJUYWJsZSAuZWUtclRhYmxlLWZvb3RlciAuZWUtclRhYmxlLWZvb3Rlci1yb3csLmVlLXJUYWJsZSAuZWUtclRhYmxlLWhlYWRlciAuZWUtclRhYmxlLWhlYWRlci1yb3d7Ym94LXNpemluZzpib3JkZXItYm94fS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS1yb3c6bnRoLWNoaWxkKDJuKXtiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWdyZXktMTEpfS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlIC5lZS1yVGFibGUtZm9vdGVyIC5lZS1yVGFibGUtZm9vdGVyLXRkLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWhlYWRlciAuZWUtclRhYmxlLWhlYWRlci10aHtib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1hbGlnbjpsZWZ0fS5lZS1yVGFibGUtaGFzLXJvdy1oZWFkZXJzIC5lZS1yVGFibGUtZm9vdGVyIC5lZS1yVGFibGUtZm9vdGVyLXRoOmZpcnN0LWNoaWxkLC5lZS1yVGFibGUtaGFzLXJvdy1oZWFkZXJzIC5lZS1yVGFibGUtaGVhZGVyIC5lZS1yVGFibGUtaGVhZGVyLXRoOmZpcnN0LWNoaWxkLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS10aHtib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1hbGlnbjpsZWZ0fS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5LXRoe2Rpc3BsYXk6dGFibGUtY2VsbH0uZWUtclRhYmxlIC5lZS1yVGFibGUtYm9keS10ZCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmVlLXJUYWJsZSAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi1oZWFkZXJ7ZGlzcGxheTpub25lO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjB9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXJUYWJsZS1ib2R5LXRkLmVlLW51bWJlci1jb2x1bW4sLmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXJUYWJsZS1ib2R5LXRkLmVlLW51bWJlci1jb2x1bW4gaW5wdXRbdHlwZT1udW1iZXJdLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS10ZC5lZS1udW1iZXItY29sdW1uIGlucHV0W3R5cGU9dGV4dF0sLmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXJUYWJsZS1ib2R5LXRkLmVlLW51bWJlci1jb2x1bW4gc2VsZWN0LC5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS10aC5lZS1udW1iZXItY29sdW1uIGlucHV0W3R5cGU9bnVtYmVyXSwuZWUtclRhYmxlIC5lZS1yVGFibGUtYm9keSAuZWUtclRhYmxlLWJvZHktdGguZWUtbnVtYmVyLWNvbHVtbiBpbnB1dFt0eXBlPXRleHRdLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS10aC5lZS1udW1iZXItY29sdW1uIHNlbGVjdCwuZWUtclRhYmxlIC5lZS1yVGFibGUtZm9vdGVyIC5lZS1yVGFibGUtZm9vdGVyLXRkLmVlLW51bWJlci1jb2x1bW4gaW5wdXRbdHlwZT1udW1iZXJdLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXJUYWJsZS1mb290ZXItdGQuZWUtbnVtYmVyLWNvbHVtbiBpbnB1dFt0eXBlPXRleHRdLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXJUYWJsZS1mb290ZXItdGQuZWUtbnVtYmVyLWNvbHVtbiBzZWxlY3QsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWZvb3RlciAuZWUtclRhYmxlLWZvb3Rlci10aC5lZS1udW1iZXItY29sdW1uLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXJUYWJsZS1mb290ZXItdGguZWUtbnVtYmVyLWNvbHVtbiBpbnB1dFt0eXBlPW51bWJlcl0sLmVlLXJUYWJsZSAuZWUtclRhYmxlLWZvb3RlciAuZWUtclRhYmxlLWZvb3Rlci10aC5lZS1udW1iZXItY29sdW1uIGlucHV0W3R5cGU9dGV4dF0sLmVlLXJUYWJsZSAuZWUtclRhYmxlLWZvb3RlciAuZWUtclRhYmxlLWZvb3Rlci10aC5lZS1udW1iZXItY29sdW1uIHNlbGVjdCwuZWUtclRhYmxlIC5lZS1yVGFibGUtaGVhZGVyIC5lZS1yVGFibGUtaGVhZGVyLXRoLmVlLW51bWJlci1jb2x1bW4sLmVlLXJUYWJsZSAuZWUtclRhYmxlLWhlYWRlciAuZWUtclRhYmxlLWhlYWRlci10aC5lZS1udW1iZXItY29sdW1uIGlucHV0W3R5cGU9bnVtYmVyXSwuZWUtclRhYmxlIC5lZS1yVGFibGUtaGVhZGVyIC5lZS1yVGFibGUtaGVhZGVyLXRoLmVlLW51bWJlci1jb2x1bW4gaW5wdXRbdHlwZT10ZXh0XSwuZWUtclRhYmxlIC5lZS1yVGFibGUtaGVhZGVyIC5lZS1yVGFibGUtaGVhZGVyLXRoLmVlLW51bWJlci1jb2x1bW4gc2VsZWN0e3RleHQtYWxpZ246cmlnaHR9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjElfS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTEgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTEgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMSAuZWUtclRhYmxlLWhlYWRlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIgLmVlLXJUYWJsZS1oZWFkZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjI1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xIC5lZS1yVGFibGUtYm9keS10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yIC5lZS1yVGFibGUtYm9keS10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo1MCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIwJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo0MCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjE2LjY3JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDozMy4zMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNiAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjE0LjI5JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyOC41NyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEyLjUlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTcgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjI1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTggLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MTEuMTElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTggLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIyLjIyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTkgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MTAlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTkgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIwJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTAgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTAgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6OS4wOSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTAgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjE4LjE4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTEgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTEgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6OC4zMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTEgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjE2LjY3JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMiAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTIgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTIgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Ny42OSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTIgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjE1LjM4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTMgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTMgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Ny4xNCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTMgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjE0LjI5JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Ni42NyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjEzLjMzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTUgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTUgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Ni4yNSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTUgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjEyLjUlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTE2IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDo1Ljg4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6MTEuNzYlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTE3IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNyAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDo1LjU2JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNyAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6MTEuMTElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTE4IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDo1LjI2JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6MTAuNTMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTE5IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDo1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6MTAlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIwIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDo0Ljc2JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6OS41MiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjEgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIxIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIxIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjQuNTUlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIxIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo5LjA5JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMiAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjIgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjIgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6NC4zNSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjIgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjguNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjMgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIzIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIzIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjQuMTclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIzIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo4LjMzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6NCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjglfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI1IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDozLjg1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Ny42OSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjYgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI2IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI2IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjMuNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjYgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjcuNDElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI3IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNyAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDozLjU3JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNyAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Ny4xNCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjggLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI4IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI4IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjMuNDUlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI4IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo2LjklfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI5IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yOSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yOSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDozLjMzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yOSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Ni42NyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzAgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMwIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMwIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjMuMjMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMwIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo2LjQ1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzEgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzEgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6My4xMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzEgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjYuMjUlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMyIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDozLjAzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Ni4wNiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzMgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMzIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMzIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIuOTQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMzIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo1Ljg4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Mi44NiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjUuNzElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM1IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoyLjc4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6NS41NiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzYgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM2IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM2IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIuNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzYgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjUuNDElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM3IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNyAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoyLjYzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNyAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6NS4yNiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzggLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM4IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM4IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIuNTYlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM4IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo1LjEzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zOSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzkgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzkgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Mi41JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zOSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6NSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDAgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQwIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQwIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIuNDQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQwIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo0Ljg4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDEgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDEgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Mi4zOCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDEgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjQuNzYlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQyIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoyLjMzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6NC42NSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDMgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQzIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQzIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIuMjclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQzIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo0LjU1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Mi4yMiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjQuNDQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ1IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoyLjE3JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6NC4zNSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDYgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ2IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ2IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIuMTMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ2IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo0LjI2JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDcgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDcgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Mi4wOCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDcgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjQuMTclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ4IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00OCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00OCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoyLjA0JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00OCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6NC4wOCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDkgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ5IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ5IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ5IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo0JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTAgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTAgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS45NiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTAgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjMuOTIlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTUxIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjkyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6My44NSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTIgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTUyIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTUyIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuODklfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTUyIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDozLjc3JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTMgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTMgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS44NSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTMgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjMuNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTQgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU0IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU0IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuODIlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU0IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDozLjY0JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTUgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTUgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS43OSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTUgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjMuNTclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU2IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjc1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6My41MSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTcgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU3IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU3IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuNzIlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU3IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDozLjQ1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01OCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTggLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTggLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS42OSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTggLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjMuMzklfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU5IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01OSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01OSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjY3JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01OSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6My4zMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjAgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYwIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYwIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuNjQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYwIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDozLjI4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjEgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjEgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS42MSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjEgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjMuMjMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYyIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjU5JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6My4xNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjMgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYzIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYzIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuNTYlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYzIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDozLjEzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS41NCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjMuMDglfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTY1IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjUyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6My4wMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjYgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTY2IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTY2IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuNDklfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTY2IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjk5JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjcgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjcgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS40NyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjcgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuOTQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTY4IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02OCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02OCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjQ1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02OCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi45JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02OSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjkgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjkgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS40MyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjkgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuODYlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTcwIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjQxJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi44MiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzEgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTcxIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTcxIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMzklfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTcxIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjc4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MiAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzIgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzIgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4zNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzIgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuNzQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTczIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MyAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjM1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MyAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi43JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4zMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuNjclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc1IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjMyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi42MyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzYgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc2IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc2IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzYgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuNiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzcgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc3IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc3IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMjglfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc3IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjU2JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03OCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzggLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzggLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4yNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzggLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuNTMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc5IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03OSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03OSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjI1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03OSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi41JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODAgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODAgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4yMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODAgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuNDclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTgxIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjIyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi40NCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODIgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTgyIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTgyIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODIgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuNDElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTgzIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MyAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjE5JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MyAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4zOCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODQgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg0IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg0IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMTglfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg0IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjM1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODUgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODUgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4xNiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODUgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuMzMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg2IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjE1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4zJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODcgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODcgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4xNCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODcgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuMjclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg4IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04OCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04OCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjEyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04OCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4yNSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODkgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg5IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg5IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMTElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg5IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjIyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTAgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTAgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4xJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4yJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTEgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTEgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4wOSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTEgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuMTclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTkyIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjA4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4xNSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTMgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTkzIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTkzIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMDYlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTkzIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjEzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4wNSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuMTElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTk1IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjA0JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4wOCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTYgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTk2IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTk2IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMDMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTk2IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjA2JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTcgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTcgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4wMiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTcgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuMDQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTk4IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05OCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05OCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjAxJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05OCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4wMiV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3ODJweCl7LmVlLXJUYWJsZXt3aWR0aDo2MDBweH0uZWUtclRhYmxlIC5lZS1yVGFibGUtaGVhZGVye2hlaWdodDowIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnQ7d2lkdGg6MCFpbXBvcnRhbnR9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXJUYWJsZS1ib2R5LXJvdywuZWUtclRhYmxlIC5lZS1yVGFibGUtZm9vdGVyIC5lZS1yVGFibGUtZm9vdGVyLXJvdywuZWUtclRhYmxlIC5lZS1yVGFibGUtaGVhZGVyIC5lZS1yVGFibGUtaGVhZGVyLXJvd3tkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIDB9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS10aCwuZWUtclRhYmxlIC5lZS1yVGFibGUtZm9vdGVyIC5lZS1yVGFibGUtZm9vdGVyLXRkLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWhlYWRlciAuZWUtclRhYmxlLWhlYWRlci10aHtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbWljcm8pfS5lZS1yVGFibGUsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHksLmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHktdGgsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWZvb3RlciwuZWUtclRhYmxlIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1oZWFkZXIsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWhlYWRlci10aHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHktdGR7ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6MTAwJX0uZWUtclRhYmxlIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlcntmbG9hdDpsZWZ0O21hcmdpbjphdXRvIDA7cGFkZGluZy1yaWdodDp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3RleHQtYWxpZ246cmlnaHQ7dmVydGljYWwtYWxpZ246bWlkZGxlO3Zpc2liaWxpdHk6dmlzaWJsZX0uZWUtclRhYmxlIC5lZS1yVGFibGUtYm9keS10ZCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZSwuZWUtclRhYmxlIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6NTAlfX0iLCIuZWUtc3RlcC1idWJibGUtbWVudS1jb250YWluZXJ7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoxcmVtIGF1dG87cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6YXV0b30uZWUtc3RlcC1idWJibGUtbWVudS1jb250YWluZXIgLnN0ZXAtYnViYmxlcy1jb250YWluZXJ7ZGlzcGxheTpibG9jazttYXJnaW46YXV0bzt3aWR0aDoxMDAlfS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZS1pdGVte2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoxcmVtO21pbi13aWR0aDoxNjBweDtwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXJ9LnN0ZXAtYnViYmxlcy1jb250YWluZXIgLmVlLXN0ZXAtYnViYmxlLWl0ZW06Zm9jdXN7b3V0bGluZTp1bnNldH0uc3RlcC1idWJibGVzLWNvbnRhaW5lciAucHJvZ3Jlc3Mtc3RlcC1saW5le2JhY2tncm91bmQ6I2RkZDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7aGVpZ2h0OjA7bGVmdDotMXJlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTZweDt3aWR0aDpjYWxjKDEwMCUgKyAycmVtKTt6LWluZGV4Oi0xfS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjJweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6OTk5ZW07Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjojNzc3O2hlaWdodDozMHB4O21hcmdpbjphdXRvO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjMwcHh9LnN0ZXAtYnViYmxlcy1jb250YWluZXIgLmVlLWNsaWNrYWJsZSAuZWUtc3RlcC1idWJibGV7YmFja2dyb3VuZC1jb2xvcjojZGRkO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9LnN0ZXAtYnViYmxlcy1jb250YWluZXIgLmVlLWNsaWNrYWJsZSAuZWUtc3RlcC1idWJibGU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojMjk3YWJjO2NvbG9yOiMyOTdhYmN9LnN0ZXAtYnViYmxlcy1jb250YWluZXIgLmVlLWNsaWNrYWJsZS5lZS1zdGVwLWJ1YmJsZS1hY3RpdmUgLmVlLXN0ZXAtYnViYmxle2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjk3YWJjO2JvcmRlci1jb2xvcjojMjk3YWJjfS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZSBwe2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxPeHlnZW4tU2FucyxVYnVudHUsQ2FudGFyZWxsLEhlbHZldGljYSBOZXVlLHNhbnMtc2VyaWY7Zm9udC1zaXplOjIxcHg7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjI3cHg7bWFyZ2luOjA7cGFkZGluZzowO3RleHQtYWxpZ246Y2VudGVyfS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZS1zdGVwLXRleHR7Y29sb3I6Izc3NztkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjNlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luLXRvcDoxcmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lZS1zdGVwLWJ1YmJsZS1tZW51LWNvbnRhaW5lcnttYXJnaW46MXJlbSBhdXRvIC41cmVtfS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZS1pdGVte21heC13aWR0aDo5MHB4O21pbi13aWR0aDo2MHB4fS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZS1zdGVwLXRleHR7Zm9udC1zaXplOjFlbTttYXJnaW46LjVyZW0gMCAwfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzYwcHgpey5lZS1zdGVwLWJ1YmJsZS1tZW51LWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO21hcmdpbjowIDAgMXJlbX0uc3RlcC1idWJibGVzLWNvbnRhaW5lciAuZWUtc3RlcC1idWJibGUtaXRlbXtkaXNwbGF5OmJsb2NrO21heC13aWR0aDp1bnNldDt3aWR0aDoxMDAlO3RleHQtYWxpZ246bGVmdH0uc3RlcC1idWJibGVzLWNvbnRhaW5lciAuZWUtc3RlcC1idWJibGV7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bGVmdDttYXJnaW46MCAxcmVtIDAgMDtoZWlnaHQ6MjZweDt3aWR0aDoyNnB4fS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZSBwe2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjI0cHh9LnN0ZXAtYnViYmxlcy1jb250YWluZXIgLnByb2dyZXNzLXN0ZXAtbGluZXtoZWlnaHQ6Y2FsYygxMDAlICsgMnJlbSk7bGVmdDoxM3B4O3RvcDotMXJlbTt3aWR0aDowfS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZS1zdGVwLXRleHR7ZGlzcGxheTpibG9jaztmb250LXNpemU6MS4zZW07bWFyZ2luOi4zcmVtIDAgMH19IiwiLmVlLWRhdGUtdGltZS1pbnB1dC10ZXh0LWZpZWxkLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1zdGFydH0uZWUtZGF0ZS10aW1lLWlucHV0LXRleHQtZmllbGQtd3JhcHBlciAuZWUtZGF0ZS10aW1lLWlucHV0LXRleHQtZmllbGR7bWFyZ2luLXJpZ2h0OnZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKX0uZWUtZGF0ZS10aW1lLWlucHV0LWRpYWxvZ3ttYXJnaW4tbGVmdDotMjUlIWltcG9ydGFudH0uZWUtZGF0ZS10aW1lLWlucHV0LXBpY2tlci13cmFwcGVye3BhZGRpbmc6MXJlbSAycmVtIDJyZW19LmVlLWRhdGUtdGltZS1pbnB1dC1idXR0b25zLXdyYXBwZXJ7cGFkZGluZzoycmVtIDAgMDt0ZXh0LWFsaWduOnJpZ2h0fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDoxNjAwcHgpey5lZS1kYXRlLXRpbWUtaW5wdXQtZGlhbG9ne21hcmdpbi1sZWZ0Oi0yNSUhaW1wb3J0YW50fX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MTM2NnB4KXsuZWUtZGF0ZS10aW1lLWlucHV0LWRpYWxvZ3ttYXJnaW4tbGVmdDotMjUlIWltcG9ydGFudH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjEyODBweCl7LmVlLWRhdGUtdGltZS1pbnB1dC1kaWFsb2d7bWFyZ2luLWxlZnQ6LTE2JSFpbXBvcnRhbnR9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDoxMDI0cHgpey5lZS1kYXRlLXRpbWUtaW5wdXQtZGlhbG9ne21hcmdpbi1sZWZ0Oi0xNiUhaW1wb3J0YW50fX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5lZS1kYXRlLXRpbWUtaW5wdXQtZGlhbG9ne21hcmdpbi1sZWZ0Oi0xNSUhaW1wb3J0YW50fX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ODUwcHgpey5lZS1kYXRlLXRpbWUtaW5wdXQtZGlhbG9ne21hcmdpbi1sZWZ0Oi0xMi41JSFpbXBvcnRhbnR9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzgycHgpey5lZS1kYXRlLXRpbWUtaW5wdXQtZGlhbG9ne21hcmdpbi1sZWZ0Oi0xMCUhaW1wb3J0YW50fX0iLCIuZXNwcmVzc28taW5wdXQtZXJyb3J7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKSAwIDB9LmVzcHJlc3NvLWlucHV0LWVycm9yIHNwYW57YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ob3QtcGluayk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLXNtYWxsKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWhvdC1waW5rLWhpZ2gtY29udHJhc3QpO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7bGV0dGVyLXNwYWNpbmc6MXB4O2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1taWNybykgdmFyKC0tZWUtcGFkZGluZy10aW55KTt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbH0iLCIuZWUtZm9ybS1pbmZvLXJvd3ttYXJnaW46dmFyKC0tZWUtbWFyZ2luLXNtYWxsKSAwfS5lZS1mb3JtLWluZm8tcm93LmlzLWRpc21pc3NhYmxle21heC1oZWlnaHQ6NTAwcHg7bWluLWhlaWdodDowIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjptYXgtaGVpZ2h0IC4yNXMgZWFzZS1pbi1vdXR9LmVlLWZvcm0taW5mby1yb3cuaXMtZGlzbWlzc2FibGUuZGlzbWlzc2Vke21heC1oZWlnaHQ6MCFpbXBvcnRhbnR9LmVlLWZvcm0taW5mb3tjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3ItbG93LWNvbnRyYXN0KTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO2ZvbnQtc3R5bGU6aXRhbGljO2hlaWdodDphdXRvO2xpbmUtaGVpZ2h0OjEuMjVyZW07cG9zaXRpb246cmVsYXRpdmV9LmVlLWZvcm0taW5mby10ZXh0e2hlaWdodDoxMDAlfS5lZS1mb3JtLWluZm8tcm93LmlzLWRpc21pc3NhYmxlIC5lZS1mb3JtLWluZm97cGFkZGluZzowIHZhcigtLWVlLXBhZGRpbmctc21hbGwpIDAgMH0uZWUtZm9ybS1pbmZvIC5lZS1mb3JtLWluZm8tdHlwZXtiYWNrZ3JvdW5kOnZhcigtLWVlLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTApO2xlZnQ6Y2FsYyh2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpKi0xKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4fS5lZS1mb3JtLWluZm8uZWUtZm9ybS1pbmZvLXR5cGUtd2FybmluZyAuZWUtZm9ybS1pbmZvLXR5cGV7Y29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspfS5lZS1mb3JtLWluZm8gLmVlLWZvcm0taW5mby10ZXh0IC5kYXNoaWNvbnttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tbWljcm8pO3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfS5lZS1mb3JtLWluZm8gLmVlLWZvcm0taW5mby1kaXNtaXNze2JhY2tncm91bmQ6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS0xMCk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS5lZS1mb3JtLWluZm8gLmVlLWZvcm0taW5mby1kaXNtaXNzOmFjdGl2ZSwuZWUtZm9ybS1pbmZvIC5lZS1mb3JtLWluZm8tZGlzbWlzczpmb2N1cywuZWUtZm9ybS1pbmZvIC5lZS1mb3JtLWluZm8tZGlzbWlzczpob3Zlcntib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50O2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1sb3ctY29udHJhc3QpIWltcG9ydGFudDtvdXRsaW5lOm5vbmUhaW1wb3J0YW50fS5kaXNtaXNzZWQgLmVlLWZvcm0taW5mbyAuZWUtZm9ybS1pbmZvLWRpc21pc3M6aG92ZXJ7YW5pbWF0aW9uOnZhcigtLWVlLWFuaW1hdGlvbi1zcGluLWZhc3QpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lZS1mb3JtLWluZm8gLmVlLWZvcm0taW5mby10eXBle2xlZnQ6dmFyKC0tZWUtcGFkZGluZy10aW55KX0uZWUtZm9ybS1pbmZvLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OnZhcigtLWVlLXBhZGRpbmctZXh0cmVtZSl9fSIsIjpyb290ey0tZWUtaW5wdXQtcGFkZGluZy1ib3R0b206Y2FsYygwLjM3NXJlbSArIDFweCk7LS1lZS1pbnB1dC1wYWRkaW5nLXNpZGVzOmNhbGMoMC43NXJlbSArIDFweCk7LS1lZS1pbnB1dC1wYWRkaW5nLXRvcDpjYWxjKDAuMzc1cmVtICsgMXB4KX0uZWUtdHdvLWNvbHVtbi1hZG1pbnttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfS5lZS10d28tY29sdW1uLWFkbWluLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLXJvdywuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1zZWN0aW9uLC5lZS10d28tY29sdW1uLWFkbWluIC5weC0wLC5lZS10d28tY29sdW1uLWFkbWluIC5weC0ze2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1zZWN0aW9uIHRhYmxle2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO21heC13aWR0aDoxMDAlfS5lZS10d28tY29sdW1uLWFkbWluOmFmdGVyLC5lZS10d28tY29sdW1uLWFkbWluOmJlZm9yZSwuZWUtdHdvLWNvbHVtbi1hZG1pbiBkaXZ7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAub3BhY2l0eS01MHtvcGFjaXR5Oi41fS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLXNlY3Rpb257ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLXNlY3Rpb246Zmlyc3Qtb2YtdHlwZXttYXJnaW46dmFyKC0tZWUtbWFyZ2luLWJpZykgMCAwfS5lZS10d28tY29sdW1uLWFkbWluIC5ib3JkZXJ7Ym9yZGVyOm5vbmV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLnJvdW5kZWR7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLW5vbmUpfS5lZS10d28tY29sdW1uLWFkbWluIC5wdC0zLC5lZS10d28tY29sdW1uLWFkbWluIC5weS0ze3BhZGRpbmctYm90dG9tOnZhcigtLWVlLXBhZGRpbmctc21hbGxlcik7cGFkZGluZy10b3A6dmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAucGwtMCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAucHgtMHtwYWRkaW5nLWxlZnQ6MH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAucHItMCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAucHgtMHtwYWRkaW5nLXJpZ2h0OjB9LmVlLXR3by1jb2x1bW4tYWRtaW4gLnBsLTMsLmVlLXR3by1jb2x1bW4tYWRtaW4gLnB4LTN7cGFkZGluZy1sZWZ0OnZhcigtLWVlLXBhZGRpbmctZGVmYXVsdCl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLnByLTMsLmVlLXR3by1jb2x1bW4tYWRtaW4gLnB4LTN7cGFkZGluZy1yaWdodDp2YXIoLS1lZS1wYWRkaW5nLWRlZmF1bHQpfS5lZS10d28tY29sdW1uLWFkbWluIC5tLTB7bWFyZ2luOjB9LmVlLXR3by1jb2x1bW4tYWRtaW4gLnRleHQtc20tcmlnaHQsLmVlLXR3by1jb2x1bW4tYWRtaW4gLnRleHQtc20tcmlnaHQgaW5wdXR7dGV4dC1hbGlnbjpyaWdodH0uZWUtdHdvLWNvbHVtbi1hZG1pbiBocntib3JkZXI6bm9uZTtwYWRkaW5nOjFweH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1yb3d7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKTttaW4taGVpZ2h0OnZhcigtLWVlLXBhZGRpbmctaHVnZSl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1mb3JtLWxhYmVse2ZvbnQtc2l6ZTppbmhlcml0O2xpbmUtaGVpZ2h0OnZhcigtLWVlLWxpbmUtaGVpZ2h0LW1vZGlmaWVyKTttYXJnaW46MDttYXgtd2lkdGg6MTAwJTtwYWRkaW5nLXRvcDp2YXIoLS1lZS1pbnB1dC1wYWRkaW5nLXRvcCk7cGFkZGluZy1ib3R0b206dmFyKC0tZWUtaW5wdXQtcGFkZGluZy1ib3R0b20pfS5lZS10d28tY29sdW1uLWFkbWluIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLXRpbnkpO21heC13aWR0aDoxMDAlfS5lZS10d28tY29sdW1uLWFkbWluIC5mb3JtLWNvbnRyb2w6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTApO29wYWNpdHk6MX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZm9ybS1jb250cm9sOjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS0xMCk7b3BhY2l0eToxfS5lZS10d28tY29sdW1uLWFkbWluIC5mb3JtLWNvbnRyb2w6OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTApO29wYWNpdHk6MX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZm9ybS1jb250cm9sOjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTApO29wYWNpdHk6MX0uZWUtdHdvLWNvbHVtbi1hZG1pbiBzZWxlY3QuZm9ybS1jb250cm9sOm5vdChbc2l6ZV0pOm5vdChbbXVsdGlwbGVdKXtoZWlnaHQ6Y2FsYyh2YXIoLS1lZS1pbnB1dC1wYWRkaW5nLXRvcCkqNiAtIDRweCl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmZvcm0tY29udHJvbCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZm9ybS1jb250cm9sLXdwIC5jb21wb25lbnRzLXNlbGVjdC1jb250cm9sX19pbnB1dHtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLXNtYWxsKTtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3IpO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtoZWlnaHQ6dmFyKC0tZWUtaWNvbi1idXR0b24tc2l6ZSk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpO3BhZGRpbmc6dmFyKC0tZWUtaW5wdXQtcGFkZGluZy10b3ApIHZhcigtLWVlLWlucHV0LXBhZGRpbmctc2lkZXMpIHZhcigtLWVlLWlucHV0LXBhZGRpbmctYm90dG9tKTt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dDt3aWR0aDoxMDAlfS5lZS10d28tY29sdW1uLWFkbWluIHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfS5lZS10d28tY29sdW1uLWFkbWluIGlucHV0LC5lZS10d28tY29sdW1uLWFkbWluIG9wdGdyb3VwLC5lZS10d28tY29sdW1uLWFkbWluIHNlbGVjdCwuZWUtdHdvLWNvbHVtbi1hZG1pbiB0ZXh0YXJlYXttYXJnaW46MDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXR9LmVlLXR3by1jb2x1bW4tYWRtaW4gaW5wdXQ6ZGlzYWJsZWQsLmVlLXR3by1jb2x1bW4tYWRtaW4gc2VsZWN0OmRpc2FibGVkLC5lZS10d28tY29sdW1uLWFkbWluIHRleHRhcmVhOmRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xMyk7Y29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS04KX0uZWUtdHdvLWNvbHVtbi1hZG1pbiBpbnB1dFt0eXBlPWNoZWNrYm94XSwuZWUtdHdvLWNvbHVtbi1hZG1pbiBpbnB1dFt0eXBlPXJhZGlvXXttYXJnaW46LTJweCB2YXIoLS1lZS1tYXJnaW4tdGlueSkgMCAwfS5lZS10d28tY29sdW1uLWFkbWluIGlucHV0W3R5cGU9bnVtYmVyXXtoZWlnaHQ6aW5oZXJpdDt0ZXh0LWFsaWduOnJpZ2h0fS5lZS10d28tY29sdW1uLWFkbWluIGlucHV0LmVlLW1vbmV5LWZpZWxkLmVlLXNpZ24tYWZ0ZXIsLmVlLXR3by1jb2x1bW4tYWRtaW4gaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1iZWZvcmV7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMS41KX0uZWUtdHdvLWNvbHVtbi1hZG1pbiBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1jdXJTaWduLTJ7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjIuMjUpfS5lZS10d28tY29sdW1uLWFkbWluIGlucHV0LmVlLW1vbmV5LWZpZWxkLTIuZWUtY3VyU2lnbi0ze3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSozKX0uZWUtdHdvLWNvbHVtbi1hZG1pbiBpbnB1dC5lZS1tb25leS1maWVsZC0yLmVlLWN1clNpZ24tNHt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMy43NSl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWN1cnJlbmN5LXNpZ24sLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLXBlcmNlbnQtc2lnbntwYWRkaW5nOnZhcigtLWVlLWlucHV0LXBhZGRpbmctdG9wKSB2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKTtmb250LXNpemU6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMS4yNSk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMS4yNSk7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1jdXJyZW5jeS1zaWdue3dpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjEuNSl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWN1cnJlbmN5LXNpZ24uZWUtY3VyU2lnbi0ye2ZvbnQtc2l6ZTpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSoxLjEyNSk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMS4xMjUpO3dpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjIuMil9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWN1cnJlbmN5LXNpZ24uZWUtY3VyU2lnbi0ze2ZvbnQtc2l6ZTpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSoxLjA1KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSoxLjA1KTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSoyLjgpfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1jdXJyZW5jeS1zaWduLmVlLWN1clNpZ24tNHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSozLjIpfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1wZXJjZW50LXNpZ257dGV4dC1hbGlnbjpsZWZ0O3dpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjEuNSl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWN1cnJlbmN5LXNpZ24uZWUtc2lnbi1iZWZvcmV7ZmxvYXQ6bGVmdDt0ZXh0LWFsaWduOnJpZ2h0fS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1jdXJyZW5jeS1zaWduLmVlLXNpZ24tYWZ0ZXJ7ZmxvYXQ6cmlnaHQ7dGV4dC1hbGlnbjpsZWZ0fS5lZS10d28tY29sdW1uLWFkbWluIC5hbGlnbi1pdGVtcy1zbS1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5lZS10d28tY29sdW1uLWFkbWluIC5kLWZsZXh7ZGlzcGxheTpmbGV4fS5lZS10d28tY29sdW1uLWFkbWluIC5idG57ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6NDAwO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWluLXdpZHRoOjU1cHg7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7cGFkZGluZzp2YXIoLS1lZS1pbnB1dC1wYWRkaW5nLXRvcCkgdmFyKC0tZWUtaW5wdXQtcGFkZGluZy1zaWRlcykgdmFyKC0tZWUtaW5wdXQtcGFkZGluZy1ib3R0b20pO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWUtYm9yZGVyLXJhZGl1cy1zbWFsbCk7dHJhbnNpdGlvbjpjb2xvciAuMDVzIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgLjA1cyBlYXNlLWluLW91dCxib3JkZXItY29sb3IgLjA1cyBlYXNlLWluLW91dCxib3gtc2hhZG93IC4wNXMgZWFzZS1pbi1vdXR9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ0bi1ncm91cC5vZmZzZXQtc20tMnttaW4td2lkdGg6MjI0cHh9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ0bi1ncm91cCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwLXZlcnRpY2Fse3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lZS10d28tY29sdW1uLWFkbWluIC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0biwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwPi5idG57cG9zaXRpb246cmVsYXRpdmU7ZmxleDowIDEgYXV0b30uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwLXZlcnRpY2FsIC5idG4rLmJ0biwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwLXZlcnRpY2FsIC5idG4rLmJ0bi1ncm91cCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwLXZlcnRpY2FsIC5idG4tZ3JvdXArLmJ0biwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwLXZlcnRpY2FsIC5idG4tZ3JvdXArLmJ0bi1ncm91cCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwIC5idG4rLmJ0biwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwIC5idG4rLmJ0bi1ncm91cCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwIC5idG4tZ3JvdXArLmJ0biwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwIC5idG4tZ3JvdXArLmJ0bi1ncm91cHttYXJnaW4tbGVmdDotMXB4fS5lZS10d28tY29sdW1uLWFkbWluIC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bjpob3ZlciwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwPi5idG46aG92ZXJ7ei1pbmRleDoxfS5lZS10d28tY29sdW1uLWFkbWluIC5idG4tZ3JvdXA+LmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ0bi1ncm91cD4uYnRuOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwPi5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk+LmJ0biwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwPi5idG46bm90KDpmaXJzdC1jaGlsZCl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwPi5idG46Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwIGxhYmVsLmJ0bnttYXJnaW46MH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5lZS10d28tY29sdW1uLWFkbWluIC5idG4tcHJpbWFyeXtjb2xvcjppbmhlcml0O2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWVlLWJvcmRlci1jb2xvcil9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ0bi1wcmltYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuc2hvdz4uYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWVlLXRleHQtb24tcHJpbWFyeSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTtib3JkZXItY29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ0bi1wcmltYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZXtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLXByaW1hcnktaGlnaC1jb250cmFzdCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5LWhpZ2gtY29udHJhc3QpO2JvcmRlci1jb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5LWhpZ2gtY29udHJhc3QpfS5lZS10d28tY29sdW1uLWFkbWluIC5idG4tcHJpbWFyeSBpbnB1dHtkaXNwbGF5Om5vbmU7dmlzaWJpbGl0eTpoaWRkZW59LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWNoZWNrYm94LWxhYmVsLWFmdGVyLmFjdGl2ZSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtcmFkaW8tbGFiZWwtYWZ0ZXIuYWN0aXZle2ZvbnQtd2VpZ2h0OjcwMH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZXNwcmVzc28taW5wdXQtaGVscC10ZXh0e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1sb3ctY29udHJhc3QpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc3R5bGU6aXRhbGljO2xpbmUtaGVpZ2h0OmluaGVyaXQ7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi10aW55KSAwO3doaXRlLXNwYWNlOnByZS13cmFwfS5lZS10d28tY29sdW1uLWFkbWluIC5lc3ByZXNzby1pbnB1dC1oZWxwLXRleHQubGVmdHt0ZXh0LWFsaWduOnJpZ2h0fS5lZS10d28tY29sdW1uLWFkbWluIC5lc3ByZXNzby1pbnB1dC1oZWxwLXRleHQ+cHtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O21hcmdpbjowfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLXNhdmUtY2FuY2VsLWJ1dHRvbnMtZGl2e3BhZGRpbmctdG9wOnZhcigtLWVlLXBhZGRpbmctc21hbGwpO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6OTl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0tYnV0dG9uLXJvdy5lZS1mb3JtLXJvdzpub3QobGkpe2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IHdyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tc21hbGwpIDA7dGV4dC1hbGlnbjpyaWdodH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnV0dG9uLXByaW1hcnkrLmJ1dHRvbi1wcmltYXJ5LC5lZS10d28tY29sdW1uLWFkbWluIC5idXR0b24tcHJpbWFyeSsuYnV0dG9uLXNlY29uZGFyeSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnV0dG9uLXNlY29uZGFyeSsuYnV0dG9uLXByaW1hcnksLmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ1dHRvbi1zZWNvbmRhcnkrLmJ1dHRvbi1zZWNvbmRhcnksLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0tYnV0dG9uKy5lZS1mb3JtLWJ1dHRvbnttYXJnaW4tbGVmdDp2YXIoLS1lZS1tYXJnaW4tYmlnKTttYXJnaW4tcmlnaHQ6MH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtaW5wdXQtd2lkdGgtMXtmbGV4OjAgMCA4LjMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzJX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtaW5wdXQtd2lkdGgtMntmbGV4OjAgMCAxNi42NjY2NjclO21heC13aWR0aDoxNi42NjY2NjclfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1pbnB1dC13aWR0aC0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1pbnB1dC13aWR0aC00e2ZsZXg6MCAwIDMzJTttYXgtd2lkdGg6MzMlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1pbnB1dC13aWR0aC01e2ZsZXg6MCAwIDQxLjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NyV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWlucHV0LXdpZHRoLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLXRvZ2dsZS1pbnB1dHtwYWRkaW5nLXRvcDp2YXIoLS1lZS1pbnB1dC1wYWRkaW5nLXRvcCk7cGFkZGluZy1ib3R0b206dmFyKC0tZWUtaW5wdXQtcGFkZGluZy1ib3R0b20pO21hcmdpbi1ib3R0b206MDtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDp2YXIoLS1lZS1saW5lLWhlaWdodC1tb2RpZmllcil9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLXRvZ2dsZS1pbnB1dCAqe2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtdG9nZ2xlLWlucHV0IC5jb21wb25lbnRzLXRvZ2dsZS1jb250cm9sX19sYWJlbHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO3dpZHRoOmNhbGMoMTAwJSAtIDQwcHgpfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1jaGVja2JveC10b2dnbGUgaW5wdXRbdHlwZT1jaGVja2JveF17Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWUtYm9yZGVyLXJhZGl1cy1zbWFsbCk7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoyMXB4O21hcmdpbi1yaWdodDp2YXIoLS1lZS1tYXJnaW4tc21hbGxlcik7dHJhbnNpdGlvbjpub25lO3dpZHRoOjIxcHh9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWNoZWNrYm94LXRvZ2dsZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vke2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7Ym9yZGVyLWNvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnkpO2NvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnkpfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1jaGVja2JveC10b2dnbGUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpiZWZvcmV7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1wcmltYXJ5KTtjb250ZW50OlwiXFxmMTQ3XCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bGVmdDtmb250Om5vcm1hbCAyN3B4LzEgZGFzaGljb25zO21hcmdpbjotM3B4IDAgMCAtNHB4O3dpZHRoOjIxcHg7c3BlYWs6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7LXdlYmtpdC1mb250LXNtb290aGluZzpzdWJwaXhlbC1hbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLXN3aXRjaC10b2dnbGUgLmNvbXBvbmVudHMtZm9ybS10b2dnbGV7bWFyZ2luLXRvcDozcHh9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWhpZGRlbi1sYWJlbHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1hZnRlci1pbnB1dC13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtYWZ0ZXItaW5wdXQtZGl2e2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OnZhcigtLWVlLW1hcmdpbi1zbWFsbCl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbXBvbmVudHMtdG9vbHRpcHtjb2xvcjp2YXIoLS1lZS1jb2xvci13aGl0ZSk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKSFpbXBvcnRhbnQ7Zm9udC13ZWlnaHQ6NDAwIWltcG9ydGFudDtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcikhaW1wb3J0YW50fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDoxMDI0cHgpey5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLXNlY3Rpb246Zmlyc3Qtb2YtdHlwZXttYXJnaW46dmFyKC0tZWUtbWFyZ2luLXNtYWxsKSAwIDB9LmVlLXR3by1jb2x1bW4tYWRtaW4gLnB4LTMgLmVlLWZvcm0tcm93Om5vdChsaSl7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5lZS10d28tY29sdW1uLWFkbWluIC5wbC0zLC5lZS10d28tY29sdW1uLWFkbWluIC5weC0ze3BhZGRpbmctbGVmdDp2YXIoLS1lZS1wYWRkaW5nLXNtYWxsKX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAucHItMywuZWUtdHdvLWNvbHVtbi1hZG1pbiAucHgtM3twYWRkaW5nLXJpZ2h0OnZhcigtLWVlLXBhZGRpbmctc21hbGwpfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc4MnB4KXsuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1zZWN0aW9uOmZpcnN0LW9mLXR5cGV7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi10aW55KSAwIDB9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAxcHgpey5lZS10d28tY29sdW1uLWFkbWluIC5wbC0zLC5lZS10d28tY29sdW1uLWFkbWluIC5weC0ze3BhZGRpbmctbGVmdDp2YXIoLS1lZS1wYWRkaW5nLXNtYWxsZXIpfS5lZS10d28tY29sdW1uLWFkbWluIC5wci0zLC5lZS10d28tY29sdW1uLWFkbWluIC5weC0ze3BhZGRpbmctcmlnaHQ6dmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29tcG9uZW50cy1wYW5lbF9fYm9keS5pcy1vcGVuZWR7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tMSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAuY29sLXNtLTFoLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tMXEsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLmNvbC1zbS0yLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tMi0zcSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAuY29sLXNtLTJoLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tMywuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAuY29sLXNtLTNoLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tNCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAuY29sLXNtLTUsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLmNvbC1zbS02LC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tNywuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAuY29sLXNtLTgsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLmNvbC1zbS05LC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tMTAsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLmNvbC1zbS0xMSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAuY29sLXNtLTEyLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20taHtmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlO3dpZHRoOjEwMCV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLm9mZnNldC1zbS0xLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5vZmZzZXQtc20tMiwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAub2Zmc2V0LXNtLTMsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLm9mZnNldC1zbS00LC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5vZmZzZXQtc20tNSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAub2Zmc2V0LXNtLTYsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLm9mZnNldC1zbS03LC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5vZmZzZXQtc20tOCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAub2Zmc2V0LXNtLTksLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLm9mZnNldC1zbS0xMCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAub2Zmc2V0LXNtLWh7bWFyZ2luOjB9fUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NDgxcHgpey5lZS10d28tY29sdW1uLWFkbWluIC5weC0zIC5lZS1mb3JtLXJvdzpub3QobGkpe21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLWh7bWFyZ2luLWxlZnQ6NC4xNjY2NjclfS5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tMXttYXJnaW4tbGVmdDo4LjMzMzMzMyV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NyV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS0ze21hcmdpbi1sZWZ0OjI1JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzJX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY3JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLTZ7bWFyZ2luLWxlZnQ6NTAlfS5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMlfS5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tOHttYXJnaW4tbGVmdDo2Ni42NjY2NjclfS5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tOXttYXJnaW4tbGVmdDo3NSV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMlfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTFoLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMXEsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0yLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMi0zcSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTJoLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMywuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTNoLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tNCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTUsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS02LC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tNywuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTgsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS05LC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMTAsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0xMSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTEyLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20taHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MXB4O3BhZGRpbmc6MXB4IHZhcigtLWVlLXBhZGRpbmctc21hbGxlcil9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS1oe2ZsZXg6MCAwIDQuMTY2NjY3JTttYXgtd2lkdGg6NC4xNjY2NjclO3doaXRlLXNwYWNlOm5vd3JhcH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTF7ZmxleDowIDAgOC4zMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMyU7d2hpdGUtc3BhY2U6bm93cmFwfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMXF7ZmxleDowIDAgMTAuNDE2NjY3JTttYXgtd2lkdGg6MTAuNDE2NjY3JTt3aGl0ZS1zcGFjZTpub3dyYXB9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0xaHtmbGV4OjAgMCAxMi41JTttYXgtd2lkdGg6MTIuNSU7d2hpdGUtc3BhY2U6bm93cmFwfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMntmbGV4OjAgMCAxNi42NjY2NjclO21heC13aWR0aDoxNi42NjY2NjclfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMmh7ZmxleDowIDAgMjAuODMzMzMzJTttYXgtd2lkdGg6MjAuODMzMzMzJX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTItM3F7ZmxleDowIDAgMjIuOTE2NjY3JTttYXgtd2lkdGg6MjIuOTE2NjY3JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0zaHs7ZmxleDowIDAgMjkuMTY2NjY3JTttYXgtd2lkdGg6MjkuMTY2NjY3JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTR7ZmxleDowIDAgMzMuMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzJX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTV7ZmxleDowIDAgNDEuNjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY3JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS03e2ZsZXg6MCAwIDU4LjMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMyV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS03aHtmbGV4OjAgMCA2Mi41JTttYXgtd2lkdGg6NjIuNTMlfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tOHtmbGV4OjAgMCA2Ni42NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjclfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMyV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0xMXtmbGV4OjAgMCA5MS42NjY2NjclO21heC13aWR0aDo5MS42NjY2NjclfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVlLXR3by1jb2x1bW4tYWRtaW4gLnBsLTMsLmVlLXR3by1jb2x1bW4tYWRtaW4gLnB4LTN7cGFkZGluZy1sZWZ0OnZhcigtLWVlLXBhZGRpbmctdGlueSl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLnByLTMsLmVlLXR3by1jb2x1bW4tYWRtaW4gLnB4LTN7cGFkZGluZy1yaWdodDp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLXJvdywuZWUtdHdvLWNvbHVtbi1hZG1pbiAucHgtMyAuZWUtZm9ybS1yb3c6bm90KGxpKXtmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi1oZWlnaHQ6dW5zZXR9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0xLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMWgsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0xcSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTIsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0yLTNxLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMmgsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0zLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tM2gsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS00LC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tNSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTYsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS03LC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tOCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTksLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0xMCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTExLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMTIsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS1oe21hcmdpbjowO21heC13aWR0aDoxMDAlO3BhZGRpbmc6MXB4O3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDphdXRvfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWJ1dHRvbi1yb3cgLmNvbC1zbS0xMnthbGlnbi1pdGVtczpmbGV4LWVuZDtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW46MDttYXgtd2lkdGg6MTAwJTtwYWRkaW5nOjFweDt3aGl0ZS1zcGFjZTpub3JtYWx9LmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS0xLC5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tMiwuZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLTMsLmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS00LC5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tNSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLTYsLmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS03LC5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tOCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLTksLmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS0xMCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLWh7bWFyZ2luOjB9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1mb3JtLWxhYmVsLC5lZS10d28tY29sdW1uLWFkbWluIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7cGFkZGluZzowO3RleHQtYWxpZ246bGVmdDt3aWR0aDoxMDAlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1pbnB1dC13aWR0aC0xe2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1pbnB1dC13aWR0aC0ye2ZsZXg6MCAwIDMzLjMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMyV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWlucHV0LXdpZHRoLTN7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWlucHV0LXdpZHRoLTR7ZmxleDowIDAgNjYuNjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY3JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtaW5wdXQtd2lkdGgtNXtmbGV4OjAgMCA4My4zMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1pbnB1dC13aWR0aC02e2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEwMCV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0tYnV0dG9ue3doaXRlLXNwYWNlOm5vcm1hbH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnV0dG9uLXByaW1hcnkrLmJ1dHRvbi1wcmltYXJ5LC5lZS10d28tY29sdW1uLWFkbWluIC5idXR0b24tcHJpbWFyeSsuYnV0dG9uLXNlY29uZGFyeSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnV0dG9uLXNlY29uZGFyeSsuYnV0dG9uLXByaW1hcnksLmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ1dHRvbi1zZWNvbmRhcnkrLmJ1dHRvbi1zZWNvbmRhcnksLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0tYnV0dG9uKy5lZS1mb3JtLWJ1dHRvbnttYXJnaW4tbGVmdDp2YXIoLS1lZS1tYXJnaW4tc21hbGwpO21hcmdpbi1yaWdodDowfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzYwcHgpey5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWJ1dHRvbi1yb3cgLmNvbC1zbS0xMntmbGV4LWZsb3c6Y29sdW1uIHdyYXB9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0tYnV0dG9ue21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKTt0ZXh0LWFsaWduOmNlbnRlcjttYXgtd2lkdGg6LXdlYmtpdC1maXQtY29udGVudDttYXgtd2lkdGg6LW1vei1maXQtY29udGVudDttYXgtd2lkdGg6Zml0LWNvbnRlbnR9fSIsIiNlZS1ibG9jay1ldmVudC1hdHRlbmRlZXMuZXZlbnQtYXR0ZW5kZWVzIHVse2xpc3Qtc3R5bGUtdHlwZTpub25lfSNlZS1ibG9jay1ldmVudC1hdHRlbmRlZXMgLmNvbnRhY3QtaW1hZ2Utd3JhcC1kaXYsI2VlLWJsb2NrLWV2ZW50LWF0dGVuZGVlcyBwe2Rpc3BsYXk6aW5saW5lLWJsb2NrfSNlZS1ibG9jay1ldmVudC1hdHRlbmRlZXMgLmNvbnRhY3QtYXZhdGFyLWltZ3ttYXJnaW46LjI1ZW0gMWVtIC4yNWVtIDA7dmVydGljYWwtYWxpZ246bWlkZGxlfSJdLCJzb3VyY2VSb290IjoiIn0=*/ \ No newline at end of file +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL3BhZ2luYXRpb24vc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvZmlsdGVyLWJhci9zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vYmFzZS9mb3JtLWNvbnRhaW5lci5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vYmFzZS9mb3JtLXBsYWNlaG9sZGVyLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL2Zvcm0tZGF0YS1kZWJ1Zy1kdW1wLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9iYXNlL3N1Ym1pdHRpbmctbm90aWNlLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZGF0ZXMtYW5kLXRpbWVzL2JpZ2dpZS1jYWxlbmRhci1kYXRlL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZGF0ZXMtYW5kLXRpbWVzL2NhbGVuZGFyLWRhdGUtcmFuZ2Uvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9kYXRlcy1hbmQtdGltZXMvbWVkaXVtLWNhbGVuZGFyLWRhdGUvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9kYXRlcy1hbmQtdGltZXMvY2FsZW5kYXItcGFnZS1kYXRlL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZHJvcC1kb3duLW1lbnUvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9lbnRpdHktZGV0YWlscy1wYW5lbC9zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vaW5wdXRzL2lubGluZS1lZGl0LWlucHV0LmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvZW50aXR5LWxpc3Qvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9lbnRpdHktcGFwZXItZnJhbWUvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9pY29uLW1lbnUtaXRlbS9zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3Jlc3BvbnNpdmUtdGFibGUvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9tZW51L3N0ZXAtYnViYmxlL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvZGF0ZS10aW1lLWlucHV0LmNzcyIsIndlYnBhY2s6Ly9lZWpzLmNvbXBvbmVudHMvLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvZm9ybS9pbnB1dHMvYmFzZS9pbnB1dC1lcnJvci5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vYmFzZS9mb3JtLWluZm8tYmFzZS5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5jb21wb25lbnRzLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL2Zvcm0vbGF5b3V0cy90d28tY29sdW1uLWFkbWluL3R3by1jb2x1bW4tYWRtaW4uY3NzIiwid2VicGFjazovL2VlanMuY29tcG9uZW50cy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9ldmVudC1hdHRlbmRlZXMvc3R5bGUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQixhQUFhLHFCQUFxQix5QkFBeUIsa0NBQWtDLHFCQUFxQixlQUFlLGNBQWMsa0JBQWtCLHFDQUFxQyxlQUFlLGlGQUFpRixrQkFBa0IsZUFBZSxXQUFXLGlCQUFpQixpQkFBaUIsdUJBQXVCLDhCQUE4QixxQkFBcUIseUJBQXlCLHdDQUF3Qyx5R0FBeUcsY0FBYywyQkFBMkIsOEJBQThCLHVHQUF1RyxlQUFlLDRCQUE0QiwrQkFBK0IscVRBQXFULDhCQUE4QixlQUFlLG9DQUFvQywwTEFBMEwseUNBQXlDLFVBQVUseVNBQXlTLFVBQVUsZ0NBQWdDLHlDQUF5QyxxQztBQ0FyMkQsbUNBQW1DLHNDQUFzQyxzQkFBc0IsbUNBQW1DLGFBQWEsbUJBQW1CLDhCQUE4QiwrQkFBK0IsK0NBQStDLGtDQUFrQyxvREFBb0QsYUFBYSxtQkFBbUIscUJBQXFCLDJCQUEyQiwyQkFBMkIseUJBQXlCLHNDQUFzQyx5QkFBeUIsdUVBQXVFLDBDQUEwQyxpQkFBaUIsaURBQWlELDJEQUEyRCxlQUFlLGdCQUFnQiwrQ0FBK0MsYUFBYSxxQkFBcUIsa0NBQWtDLHlCQUF5QixxQkFBcUIsb0NBQW9DLGVBQWUsMkNBQTJDLFNBQVMsNkNBQTZDLG9DQUFvQyxzQ0FBc0MsOENBQThDLDZDQUE2Qyw0RkFBNEYsa0NBQWtDLGlDQUFpQyxpREFBaUQsbUNBQW1DLDZEQUE2RCw4QkFBOEIsbUVBQW1FLG1DQUFtQyxnQkFBZ0Isa0dBQWtHLG1CQUFtQiwyTUFBMk0scUJBQXFC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OElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFlBQVksOENBQThDLGFBQWEsOElBQThJLFNBQVMsOENBQThDLFVBQVUsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFNBQVMsOENBQThDLFNBQVMsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFdBQVcsOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFdBQVcsOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFdBQVcsOENBQThDLFNBQVMsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFNBQVMsOENBQThDLFNBQVMsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFdBQVcsOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFdBQVcsOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFdBQVcsOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVksOElBQThJLFlBQVksOENBQThDLFlBQVks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K0JBQStCLG9CQUFvQixxQkFBcUIsZ0NBQWdDLGVBQWUsaUJBQWlCLCtCQUErQixvQkFBb0IscUJBQXFCLCtCQUErQixhQUFhLGNBQWMsZ0NBQWdDLG9CQUFvQixxQkFBcUIsZ0NBQWdDLG9CQUFvQixxQkFBcUIsZ0NBQWdDLGNBQWMsZ0JBQWdCLG9DQUFvQyxzREFBc0Qsb0NBQW9DLHNEQUFzRCxxQ0FBcUMsa0ZBQWtGLHdCQUF3Qix1QkFBdUIsaUJBQWlCLHdqQkFBd2pCLFNBQVMsZUFBZSxZQUFZLG1CQUFtQixXQUFXLG9EQUFvRCxxQkFBcUIsYUFBYSxtQkFBbUIseUJBQXlCLFNBQVMsZUFBZSxZQUFZLG1CQUFtQix1WEFBdVgsU0FBUyxnRUFBZ0UsY0FBYyxTQUFTLFVBQVUsZ0JBQWdCLFdBQVcsdUNBQXVDLGFBQWEsY0FBYyx1Q0FBdUMsb0JBQW9CLHFCQUFxQix1Q0FBdUMsYUFBYSxjQUFjLHVDQUF1QyxvQkFBb0IscUJBQXFCLHVDQUF1QyxvQkFBb0IscUJBQXFCLHVDQUF1QyxjQUFjLGVBQWUscUNBQXFDLG1CQUFtQixpUkFBaVIsbUNBQW1DLGdCQUFnQix5Q0FBeUMsb0RBQW9ELHNCQUFzQixxQ0FBcUMsa0NBQWtDLGtCQUFrQiw4QkFBOEIsMkJBQTJCLHVCO0FDQTMxbEIsNkNBQTZDLHFCQUFxQiw4RUFBOEUscUJBQXFCLDhDQUE4Qyx5QkFBeUIsc0IiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1jb21wb25lbnRzLjY1NTgwZDBkOGM1YzMyZTY5Y2ZhLmRpc3QuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmVlLWVudGl0eS1wYWdpbmF0aW9ue2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctbGVmdDowO21hcmdpbjoyMHB4IDA7Ym9yZGVyLXJhZGl1czo0cHh9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpe2Rpc3BsYXk6aW5saW5lfS5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saT5hLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saT5zcGFue3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2Zsb2F0OmxlZnQ7cGFkZGluZzo2cHggMTJweDttYXJnaW4tbGVmdDotMXB4O2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7Y29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtYm9yZGVyLWNvbG9yKX0uZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+bGk6Zmlyc3QtY2hpbGQ+YSwuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+bGk6Zmlyc3QtY2hpbGQ+c3BhbnttYXJnaW4tbGVmdDowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4fS5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saTpsYXN0LWNoaWxkPmEsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpOmxhc3QtY2hpbGQ+c3BhbnttYXJnaW4tcmlnaHQ6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uZGlzYWJsZWQ+YSwuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmRpc2FibGVkPmE6Zm9jdXMsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5kaXNhYmxlZD5hOmhvdmVyLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uZGlzYWJsZWQ+c3BhbiwuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmRpc2FibGVkPnNwYW46Zm9jdXMsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5kaXNhYmxlZD5zcGFuOmhvdmVye2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTApO2N1cnNvcjpkZWZhdWx0O2JvcmRlci1jb2xvcjp2YXIoLS1lZS1ib3JkZXItY29sb3IpfS5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saT5hOmZvY3VzLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saT5hOmhvdmVyLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saT5zcGFuOmZvY3VzLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saT5zcGFuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS0xNCk7ei1pbmRleDozfS5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uYWN0aXZlPmEsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5hY3RpdmU+YTpmb2N1cywuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmFjdGl2ZT5hOmhvdmVyLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uYWN0aXZlPnNwYW4sLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5hY3RpdmU+c3Bhbjpmb2N1cywuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmFjdGl2ZT5zcGFuOmhvdmVye3otaW5kZXg6Mjtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLXByaW1hcnkpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7Ym9yZGVyLWNvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnkpfSIsIi5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXJ7YmFja2dyb3VuZDp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy10aW55KTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTkpO21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKX0uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhciwuZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDthbGlnbi1pdGVtczpmbGV4LWVuZH0uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhcntqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJ7bWF4LWhlaWdodDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luOi0xcHggY2FsYyh2YXIoLS1lZS1tYXJnaW4tbWljcm8pKi0xKSB2YXIoLS1lZS1tYXJnaW4tc21hbGxlcikgMH0uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci1wZXJQYWdlLXNlbGVjdHt0ZXh0LWFsaWduOnJpZ2h0fS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyIC5lZS1maWx0ZXItYmFyLWZpbHRlcnttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpIHZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwO21heC13aWR0aDoxMDAlO3doaXRlLXNwYWNlOnByZX0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmVlLWZpbHRlci1iYXItZmlsdGVye2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtoZWlnaHQ6dmFyKC0tZWUtaWNvbi1idXR0b24tc2l6ZSk7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2FsaWduLWl0ZW1zOmZsZXgtZW5kO21hcmdpbjowIDAgMCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpO21heC13aWR0aDoxMDAlfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuZWUtc2VhcmNoLWZpbHRlcnttYXJnaW46MH0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmVlLXBlci1wYWdlLWZpbHRlcnttYXJnaW4tcmlnaHQ6dmFyKC0tZWUtbWFyZ2luLW1pY3JvKTttYXgtaGVpZ2h0OnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuZWUtZ3JpZC12aWV3LWZpbHRlcnttYXJnaW46MCBjYWxjKHZhcigtLWVlLW1hcmdpbi1taWNybykqLTEpIDAgMH0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmVlLWdyaWQtdmlldy1maWx0ZXIsLmVlLWVudGl0eS1saXN0LXZpZXctYmFyIC5lZS1saXN0LXZpZXctZmlsdGVye2hlaWdodDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKTt3aWR0aDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKX0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b257Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKX0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uYWN0aXZlLWxpc3R7Y29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSl9LmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlciAuY29tcG9uZW50cy1iYXNlLWNvbnRyb2xfX2xhYmVse2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tbWljcm8pIHZhcigtLWVlLW1hcmdpbi10aW55KSB2YXIoLS1lZS1tYXJnaW4tbWljcm8pIHZhcigtLWVlLW1hcmdpbi1taWNybyk7d2hpdGUtc3BhY2U6bm93cmFwfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgLmNvbXBvbmVudHMtYmFzZS1jb250cm9sX19sYWJlbCwuZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyIC5jb21wb25lbnRzLXNlbGVjdC1jb250cm9sX19pbnB1dCwuZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyIC5jb21wb25lbnRzLXRleHQtY29udHJvbF9faW5wdXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6YXV0bzttYXgtd2lkdGg6MTAwJX0uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyIGlucHV0LC5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgc2VsZWN0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWVlLWJvcmRlci1yYWRpdXMtc21hbGwpO2JveC1zaGFkb3c6bm9uZTtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50O2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtsaW5lLWhlaWdodDoxO2hlaWdodDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKSFpbXBvcnRhbnQ7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKSB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDoxMDAlfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgc2VsZWN0IG9wdGlvbntsaW5lLWhlaWdodDoyMCFpbXBvcnRhbnQ7bWluLWhlaWdodDpjYWxjKHZhcigtLWVlLXBhZGRpbmctc21hbGwpKjMwKSFpbXBvcnRhbnQ7cGFkZGluZzpjYWxjKHZhcigtLWVlLXBhZGRpbmctc21hbGwpKjEwKSB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIWltcG9ydGFudH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MTI4MHB4KXsuZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyIC5jb21wb25lbnRzLWJhc2UtY29udHJvbF9fbGFiZWwsLmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlciAuY29tcG9uZW50cy1zZWxlY3QtY29udHJvbF9faW5wdXR7ZGlzcGxheTpibG9ja30uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhcnttYXJnaW46MCAwIHZhcigtLWVlLW1hcmdpbi1kZWZhdWx0KX0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJ7bWF4LWhlaWdodDoxMThweH19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo2MDBweCl7LmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlcntmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1lZS1wYWRkaW5nLXNtYWxsKX0uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhciwuZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJ7d2lkdGg6MTAwJX0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJ7ZmxleC1mbG93OnJvdyBub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7aGVpZ2h0OmNhbGModmFyKC0tZWUtaWNvbi1idXR0b24tc2l6ZSkqMS41KTttYXJnaW46MDt0ZXh0LWFsaWduOmxlZnR9LmVlLWVudGl0eS1saXN0LXZpZXctYmFyIC5lZS1maWx0ZXItYmFyLWZpbHRlcntoZWlnaHQ6YXV0bzttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpIDAgMH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjQ4MHB4KXsuZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhciAuZWUtZmlsdGVyLWJhci1maWx0ZXJ7bWFyZ2luOjAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKSB2YXIoLS1lZS1tYXJnaW4tc21hbGxlcikgMH0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJ7ZmxleC1mbG93OnJvdyB3cmFwO2hlaWdodDphdXRvO21heC1oZWlnaHQ6dW5zZXR9LmVlLWVudGl0eS1saXN0LXZpZXctYmFyIC5lZS1maWx0ZXItYmFyLWZpbHRlcntoZWlnaHQ6YXV0bztqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpIHZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwO21heC1oZWlnaHQ6dW5zZXR9fSIsIi5lZS1mb3JtLWNvbnRhaW5lci1kaXZ7Y2xlYXI6Ym90aDtoZWlnaHQ6MDtvcGFjaXR5OjB9LmVlLWZvcm0tZmFkZS1pbntoZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3BhY2l0eToxIWltcG9ydGFudDt0cmFuc2l0aW9uOmhlaWdodCAuMjVzIDBtcyxvcGFjaXR5IC4yNXMgLjI1c30iLCIuZWUtZm9ybS1wbGFjZWhvbGRlci1kaXZ7Ym9yZGVyOjFweCBkYXNoZWQgdmFyKC0tZWUtY29sb3ItZ3JleS0xMSk7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1kZWZhdWx0KSAwfS5lZS1lZGl0b3ItZGl2Pi5lZS1mb3JtLXBsYWNlaG9sZGVyLWRpdntib3JkZXItY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS0xMSk7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1kZWZhdWx0KSAwfS5lZS1mb3JtLXBsYWNlaG9sZGVyLWRpdjphZnRlcntjb250ZW50OlwiXCI7Y2xlYXI6Ym90aDtkaXNwbGF5OnRhYmxlfS5lZS1mb3JtLWZhZGUtb3V0e2hlaWdodDowO21hcmdpbjowIWltcG9ydGFudDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246aGVpZ2h0IDBtcyAuMjVzLG1hcmdpbiAwbXMgLjI1cyxvcGFjaXR5IC4yNXMgMG1zfS5lZS1sb2FkaW5nLWRpdntjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3Itc3VwZXItbG93LWNvbnRyYXN0KTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tZXh0cmVtZSkgYXV0bzt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9LmVlLWZvcm0tZmFkZS1vdXQgLmVlLWxvYWRpbmctZGl2e2xpbmUtaGVpZ2h0OjA7aGVpZ2h0OjA7bWFyZ2luOjB9LmVlLWZvcm0tcGxhY2Vob2xkZXItZGl2IC5jb21wb25lbnRzLXNwaW5uZXJ7ZmxvYXQ6dW5zZXQhaW1wb3J0YW50O21hcmdpbjowIHZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwIDA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lZS1mb3JtLXBsYWNlaG9sZGVyLWRpdiAuZWUtZm9ybS1wbGFjZWhvbGRlci1ub3RpY2V7dmVydGljYWwtYWxpZ246bWlkZGxlfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lZS1mb3JtLXBsYWNlaG9sZGVyLWRpdnttYXJnaW46dmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpIDB9fSIsIi5lZS1mb3JtLWRhdGEtZHVtcC1kaXZ7bWFyZ2luOjA7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLWRlZmF1bHQpfS5lZS1mb3JtLWRhdGEtZHVtcC1kaXYgaDN7bWFyZ2luOjB9LmVlLWZvcm0tZGF0YS1kdW1wLWRpdiBwcmV7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLXNtYWxsKTtjb2xvcjp2YXIoLS1lZS1jb2xvci1saWdodC1ncmVlbik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1pbmRpZ28pO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWxpbmUtaGVpZ2h0LW1vZGlmaWVyKTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctc21hbGwpIHZhcigtLWVlLXBhZGRpbmctZGVmYXVsdCk7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xcHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7d29yZC13cmFwOmJyZWFrLXdvcmR9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjQ4MHB4KXsuZWUtZm9ybS1kYXRhLWR1bXAtZGl2LC5lZS1mb3JtLWRhdGEtZHVtcC1kaXYgcHJle3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjM2MHB4KXsuZWUtZm9ybS1kYXRhLWR1bXAtZGl2LC5lZS1mb3JtLWRhdGEtZHVtcC1kaXYgcHJle3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy10aW55KX19IiwiLmVlLXN1Ym1pdHRpbmctbm90aWNlLXdyYXBwZXJ7ei1pbmRleDo5OTl9LmVlLXN1Ym1pdHRpbmctbm90aWNle2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWJyaWdodC1ncmVlbik7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLXNtYWxsKTtib3gtc2hhZG93OnZhcigtLWVlLWJveC1zaGFkb3ctdGlueSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLWVlLXRleHQtb24tYnJpZ2h0LWdyZWVuLWhpZ2gtY29udHJhc3QpO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKTtmb250LXdlaWdodDo0MDA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bGVmdDowO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7cmlnaHQ6MDttYXJnaW46MCBhdXRvO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3b3JkLXdyYXA6bm9ybWFsO3otaW5kZXg6OTk5fS5lZS1zdWJtaXR0aW5nLW5vdGljZS5lZS1zbWFsbHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpO2hlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKSozKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7d2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtbWljcm8pKjE1KX0uZWUtc3VibWl0dGluZy1ub3RpY2UuZWUtc21hbGwgLmVlLXNwaW5uZXItd3JhcHBlcnttYXJnaW4tcmlnaHQ6dmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpO3BhZGRpbmc6MCB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpfS5lZS1zdWJtaXR0aW5nLW5vdGljZS5lZS1kZWZhdWx0e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGwpO2hlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCkqMyk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKSoyMCl9LmVlLXN1Ym1pdHRpbmctbm90aWNlLmVlLWRlZmF1bHQgLmVlLXNwaW5uZXItd3JhcHBlcnttYXJnaW4tcmlnaHQ6dmFyKC0tZWUtbWFyZ2luLXNtYWxsKTtwYWRkaW5nOjAgdmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKX0uZWUtc3VibWl0dGluZy1ub3RpY2UuZWUtYmlne2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7aGVpZ2h0OmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjMpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSoyNSl9LmVlLXN1Ym1pdHRpbmctbm90aWNlLmVlLWJpZyAuZWUtc3Bpbm5lci13cmFwcGVye21hcmdpbi1yaWdodDp2YXIoLS1lZS1tYXJnaW4tZGVmYXVsdCk7cGFkZGluZzowIHZhcigtLWVlLXBhZGRpbmctc21hbGwpfS5lZS1zdWJtaXR0aW5nLW5vdGljZSAuZWUtc3Bpbm5lci13cmFwcGVye2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWJyaWdodC1ncmVlbi1oaWdoLWNvbnRyYXN0KTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWVlLWJvcmRlci1yYWRpdXMtc21hbGwpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWUtYm9yZGVyLXJhZGl1cy1zbWFsbCk7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlfS5lZS1zdWJtaXR0aW5nLW5vdGljZSAuY29tcG9uZW50cy1zcGlubmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtdGV4dC1vbi1icmlnaHQtZ3JlZW4taGlnaC1jb250cmFzdCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3BhY2l0eToxO2Zsb2F0Om5vbmU7bWFyZ2luOjAhaW1wb3J0YW50O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWUtc3VibWl0dGluZy1ub3RpY2UgLmNvbXBvbmVudHMtc3Bpbm5lcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1icmlnaHQtZ3JlZW4taGlnaC1jb250cmFzdCl9LmVlLXN1Ym1pdHRpbmctbm90aWNlLmVlLXNtYWxsIC5jb21wb25lbnRzLXNwaW5uZXJ7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTt3aWR0aDp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcil9LmVlLXN1Ym1pdHRpbmctbm90aWNlLmVlLXNtYWxsIC5jb21wb25lbnRzLXNwaW5uZXI6YmVmb3Jle3RyYW5zZm9ybS1vcmlnaW46Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcikvMykgY2FsYyh2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcikvMyl9LmVlLXN1Ym1pdHRpbmctbm90aWNlLmVlLWRlZmF1bHQgLmNvbXBvbmVudHMtc3Bpbm5lcntoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKTt3aWR0aDp2YXIoLS1lZS1mb250LXNpemUtc21hbGwpfS5lZS1zdWJtaXR0aW5nLW5vdGljZS5lZS1kZWZhdWx0IC5jb21wb25lbnRzLXNwaW5uZXI6YmVmb3Jle3RyYW5zZm9ybS1vcmlnaW46Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtc21hbGwpLzMpIGNhbGModmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKS8zKX0uZWUtc3VibWl0dGluZy1ub3RpY2UuZWUtYmlnIC5jb21wb25lbnRzLXNwaW5uZXJ7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTt3aWR0aDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCl9LmVlLXN1Ym1pdHRpbmctbm90aWNlLmVlLWJpZyAuY29tcG9uZW50cy1zcGlubmVyOmJlZm9yZXt0cmFuc2Zvcm0tb3JpZ2luOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpLzMpIGNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpLzMpfS5lZS1zdWJtaXR0aW5nLW5vdGljZSAuZWUtZWxsaXBzaXMtd3JhcHBlcnt3aWR0aDoxLjI1ZW19LmVlLWVsbGlwc2lzLXNwYW4tMXthbmltYXRpb246ZWxsaXBzaXMtZG90IDEuM3MgaW5maW5pdGU7YW5pbWF0aW9uLWRlbGF5OjBzO29wYWNpdHk6MH0uZWUtZWxsaXBzaXMtc3Bhbi0ye2FuaW1hdGlvbjplbGxpcHNpcy1kb3QgMS4zcyBpbmZpbml0ZTthbmltYXRpb24tZGVsYXk6LjJzO29wYWNpdHk6MH0uZWUtZWxsaXBzaXMtc3Bhbi0ze2FuaW1hdGlvbjplbGxpcHNpcy1kb3QgMS4zcyBpbmZpbml0ZTthbmltYXRpb24tZGVsYXk6LjNzO29wYWNpdHk6MH1Aa2V5ZnJhbWVzIGVsbGlwc2lzLWRvdHswJXtvcGFjaXR5OjB9NTAle29wYWNpdHk6MH10b3tvcGFjaXR5OjF9fS5lZS1wb3NpdGlvbi1hYm92ZXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKSotMSl9LmVlLXBvc2l0aW9uLWJlbG93e3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1odWdlKSotMSl9IiwiLmJpZ2dpZS1jYWxlbmRhci1kYXRlLWJne2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1lZS1jb2xvci13aGl0ZSk7aGVpZ2h0OjEwMCU7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIHZhcigtLWVlLXBhZGRpbmctbWljcm8pO3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOmNhbGModmFyKC0tZWUtcGFkZGluZy1taWNybykqMzQpO3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uYmlnZ2llLWNhbGVuZGFyLWRhdGUtYmcuYmNkLXBvcy1sZWZ0e2Zsb2F0OmxlZnQ7bGVmdDowfS5iaWdnaWUtY2FsZW5kYXItZGF0ZS1iZy5iY2QtcG9zLXJpZ2h0e2Zsb2F0OnJpZ2h0O3JpZ2h0OjB9LmJpZ2dpZS1jYWxlbmRhci1kYXRlLWhlYWRlcntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLW1pY3JvKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLW1pY3JvKX0uYmlnZ2llLWNhbGVuZGFyLWRhdGUgLndlZWtkYXl7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLXRpbnkpfS5iaWdnaWUtY2FsZW5kYXItZGF0ZSAubW9udGh7Zm9udC1zaXplOmNhbGModmFyKC0tZWUtZm9udC1zaXplLXRpbnkpKjIpO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS10aW55KSoyKX0ubW9udGgtZGF5LXNlcHtkaXNwbGF5Om5vbmV9LmJpZ2dpZS1jYWxlbmRhci1kYXRlIC5kYXl7b3BhY2l0eTouODtmb250LXNpemU6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtYmlnKSoyKTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtYmlnKSoyKTt0ZXh0LXNoYWRvdzp2YXIoLS1lZS10ZXh0LXNoYWRvdy1pbnNldCl9LmJpZ2dpZS1jYWxlbmRhci1kYXRlIC55ZWFye2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7bGV0dGVyLXNwYWNpbmc6Y2FsYyh2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pKjIpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtsZWZ0OnZhcigtLWVlLXBhZGRpbmctbmFubyk7cG9zaXRpb246cmVsYXRpdmV9LmJpZ2dpZS1jYWxlbmRhci1kYXRlLWZvb3RlciwuYmlnZ2llLWNhbGVuZGFyLWRhdGUgLmVlLW1jZC10aW1le2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcil9LmJpZ2dpZS1jYWxlbmRhci1kYXRlLWZvb3RlcntsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTttYXJnaW46dmFyKC0tZWUtbWFyZ2luLXRpbnkpIDAgMDt0ZXh0LXNoYWRvdzp2YXIoLS1lZS10ZXh0LXNoYWRvdy1pbnNldCk7d2hpdGUtc3BhY2U6cHJlLWxpbmV9LmJpZ2dpZS1jYWxlbmRhci1kYXRlLWZvb3RlciAuZWUtc3RhdHVzLXRhZ3tkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uYmlnZ2llLWNhbGVuZGFyLWRhdGUtYmcgLmVlLWVkaXQtY2FsZW5kYXItZGF0ZS1idG57Y29sb3I6aHNsYSgwLDAlLDEwMCUsLjUpO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5iaWdnaWUtY2FsZW5kYXItZGF0ZS1iZyAuZWUtZWRpdC1jYWxlbmRhci1kYXRlLWJ0bjpmb2N1czplbmFibGVkLC5iaWdnaWUtY2FsZW5kYXItZGF0ZS1iZyAuZWUtZWRpdC1jYWxlbmRhci1kYXRlLWJ0bjpub3QoOmRpc2FibGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pOm5vdCguaXMtZGVmYXVsdCk6YWN0aXZlLC5iaWdnaWUtY2FsZW5kYXItZGF0ZS1iZyAuZWUtZWRpdC1jYWxlbmRhci1kYXRlLWJ0bjpub3QoOmRpc2FibGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pOm5vdCguaXMtZGVmYXVsdCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1lZS1jb2xvci13aGl0ZSk7Ym94LXNoYWRvdzpub25lfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmJpZ2dpZS1jYWxlbmRhci1kYXRlLWJne2NsZWFyOmJvdGg7ZmxvYXQ6bm9uZTtoZWlnaHQ6YXV0bztwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbWljcm8pO3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OnVuc2V0O3dpZHRoOjEwMCUhaW1wb3J0YW50fS5iaWdnaWUtY2FsZW5kYXItZGF0ZS1iZy5iY2QtcG9zLWxlZnQsLmJpZ2dpZS1jYWxlbmRhci1kYXRlLWJnLmJjZC1wb3MtcmlnaHR7ZmxvYXQ6bm9uZX0uYmlnZ2llLWNhbGVuZGFyLWRhdGUsLmJpZ2dpZS1jYWxlbmRhci1kYXRlLWZvb3RlciwuYmlnZ2llLWNhbGVuZGFyLWRhdGUtaGVhZGVyLC5tb250aC1kYXktc2Vwe2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tZWUtZm9udC1zaXplLWJpZykgLSAzcHgpfS5iaWdnaWUtY2FsZW5kYXItZGF0ZS1mb290ZXIsLmJpZ2dpZS1jYWxlbmRhci1kYXRlLWhlYWRlcnttYXJnaW46MH0uYmlnZ2llLWNhbGVuZGFyLWRhdGUgLmRheSwuYmlnZ2llLWNhbGVuZGFyLWRhdGUgLm1vbnRoLC5iaWdnaWUtY2FsZW5kYXItZGF0ZSAud2Vla2RheSwuYmlnZ2llLWNhbGVuZGFyLWRhdGUgLnllYXJ7Y29sb3I6dmFyKC0tZWUtY29sb3Itd2hpdGUpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tZWUtZm9udC1zaXplLWJpZykgLSAzcHgpO2xldHRlci1zcGFjaW5nOjA7bWFyZ2luOjAgdmFyKC0tZWUtbWFyZ2luLW1pY3JvKTt0ZXh0LXNoYWRvdzpub25lfS5iaWdnaWUtY2FsZW5kYXItZGF0ZSAueWVhcntsZWZ0OnVuc2V0fX0iLCIuZWUtY2FsZW5kYXItZGF0ZS1yYW5nZS13cmFwcGVye2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1lZS1jb2xvci13aGl0ZSk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1taWNybyk7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtoZWlnaHQ6MTAwJTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy10aW55KSB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOmNhbGModmFyKC0tZWUtcGFkZGluZy1taWNybykqMzQpfS5lZS1jYWxlbmRhci1kYXRlLXJhbmdlLXdyYXBwZXIuY2RyLXBvcy1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246MTAwJTtmbG9hdDpsZWZ0O2xlZnQ6MH0uZWUtY2FsZW5kYXItZGF0ZS1yYW5nZS13cmFwcGVyLmNkci1wb3MtcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjowO2Zsb2F0OnJpZ2h0O3JpZ2h0OjB9LmVlLWNhbGVuZGFyLWRhdGUtcmFuZ2Utd3JhcHBlciAuZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXI+ZGl2e21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tbmFubykgYXV0byAwfS5lZS1jZHItd2Vla2RheXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpO2xldHRlci1zcGFjaW5nOnZhcigtLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS10aW55KTt0ZXh0LWFsaWduOmNlbnRlcn0uZWUtY2RyLW1vbnRoLWFuZC1kYXl7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKX0uZWUtY2RyLWRheXttYXJnaW46MCAwIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpfS5lZS1jZHIteWVhcntsZXR0ZXItc3BhY2luZzpjYWxjKHZhcigtLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS1taWNybykqMik7bGVmdDp2YXIoLS1lZS1wYWRkaW5nLW5hbm8pO3Bvc2l0aW9uOnJlbGF0aXZlfS5lZS1jYWxlbmRhci1kYXRlLXJhbmdlLXNlcGFyYXRvcntib3gtc2l6aW5nOmJvcmRlci1ib3g7Y2xlYXI6Ym90aDtjb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctdGlueSkgMDt3aWR0aDoxMDAlfS5lZS1jZHItdGltZXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpfS5lZS1jYWxlbmRhci10aW1lLXNlcGFyYXRvcntjb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKTttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tbmFubyl9LmVlLWNhbGVuZGFyLWRhdGUtcmFuZ2UtZm9vdGVyLC5lZS1jYWxlbmRhci1kYXRlLXJhbmdlLWhlYWRlcntmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKX0iLCIuZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUtd3JhcHBlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tZWUtY29sb3Itd2hpdGUpO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7aGVpZ2h0OjEwMCU7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIHZhcigtLWVlLXBhZGRpbmctbWljcm8pO3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOmNhbGModmFyKC0tZWUtcGFkZGluZy1taWNybykqMzQpfS5lZS1tZWRpdW0tY2FsZW5kYXItZGF0ZS13cmFwcGVyLmVlLW1jZC1wb3MtbGVmdHtmbG9hdDpsZWZ0O2xlZnQ6MH0uZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUtd3JhcHBlci5lZS1tY2QtcG9zLXJpZ2h0e2Zsb2F0OnJpZ2h0O3JpZ2h0OjB9LmVlLW1lZGl1bS1jYWxlbmRhci1kYXRlLWhlYWRlcntjb2xvcjpoc2xhKDAsMCUsMTAwJSwuOSk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pO21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLW1pY3JvKX0uZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUgLmVlLW1jZC13ZWVrZGF5e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLXRpbnkpfS5lZS1tZWRpdW0tY2FsZW5kYXItZGF0ZSAuZWUtbWNkLW1vbnRoLWRheXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcik7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpfS5lZS1tZWRpdW0tY2FsZW5kYXItZGF0ZSAuZWUtbWNkLWRheXttYXJnaW46MCAwIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpfS5lZS1tZWRpdW0tY2FsZW5kYXItZGF0ZSAuZWUtbWNkLXllYXJ7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKTtsZWZ0OnZhcigtLWVlLXBhZGRpbmctbmFubyk7cG9zaXRpb246cmVsYXRpdmV9LmVlLW1lZGl1bS1jYWxlbmRhci1kYXRlIC5lZS1tY2QtdGltZSwuZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUgLmVlLW1jZC15ZWFye2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpfS5lZS1tZWRpdW0tY2FsZW5kYXItZGF0ZT4uZWUtbWVkaXVtLWNhbGVuZGFyLWRhdGUtZm9vdGVye2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcik7bWFyZ2luOjA7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKSAwfS5lZS1tZWRpdW0tY2FsZW5kYXItZGF0ZS1mb290ZXIgLmVlLXN0YXR1cy10YWd7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9IiwiLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVye2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7dGV4dC1hbGlnbjpjZW50ZXJ9LmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS10aW55IC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1lbmQsLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS10aW55IC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1zdGFydHtoZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtYmlnKSoyKTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpKjIpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtc21hbGwgLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVyLWVuZCwuZWUtY2FsZW5kYXItcGFnZS1kYXRlLXNtYWxsIC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1zdGFydHtoZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKSoyKTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpKjIpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtbWVkaXVtIC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1lbmQsLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1tZWRpdW0gLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVyLXN0YXJ0e2hlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1odWdlKSoyKTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1odWdlKSoyKX0uZWUtY2FsZW5kYXItcGFnZS1kYXRlLWJpZyAuZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXItZW5kLC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtYmlnIC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtd3JhcHBlci1zdGFydHtoZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZXh0cmVtZSkqMik7d2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZXh0cmVtZSkqMil9LmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1tb250aHtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKX0uZWUtY2FsZW5kYXItcGFnZS1kYXRlLW1vbnRoLmVlLW5vLXN0YXR1cy1jbGFzc3tiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtdGlueSAuZWUtY2FsZW5kYXItcGFnZS1kYXRlLW1vbnRoe2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtbWljcm8pO2hlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCl9LmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1zbWFsbCAuZWUtY2FsZW5kYXItcGFnZS1kYXRlLW1vbnRoe2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtbWVkaXVtIC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtbW9udGh7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWh1Z2UpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtYmlnIC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtbW9udGh7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1leHRyZW1lKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtaHVnZSl9LmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1kYXl7YmFja2dyb3VuZDp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3Itc3VwZXItaGlnaC1jb250cmFzdCk7Zm9udC1mYW1pbHk6QXJpYWwgQmxhY2ssR2FkZ2V0LHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbjowIDFweCAxcHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xcHg7d2lkdGg6Y2FsYygxMDAlIC0gMnB4KX0uZWUtY2FsZW5kYXItcGFnZS1kYXRlLXRpbnkgLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1kYXl7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtc21hbGwgLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1kYXl7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcik7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcil9LmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1tZWRpdW0gLmVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS1kYXl7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO2hlaWdodDp2YXIoLS1lZS1mb250LXNpemUtaHVnZSk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWh1Z2UpfS5lZS1jYWxlbmRhci1wYWdlLWRhdGUtYmlnIC5lZS1jYWxlbmRhci1wYWdlLWRhdGUtZGF5e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTtoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWV4dHJlbWUpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1leHRyZW1lKX0uZWUtY2FsZW5kYXItcGFnZS1kYXRlLXRve2NvbG9yOmhzbGEoMCwwJSwxMDAlLC43NSk7cG9zaXRpb246cmVsYXRpdmU7dG9wOnZhcigtLWVlLXBhZGRpbmctbmFubyk7bGVmdDp2YXIoLS1lZS1wYWRkaW5nLWRlZmF1bHQpO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtbWljcm8pO2xldHRlci1zcGFjaW5nOnZhcigtLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS1taWNybyk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpfSIsIi5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnV7cGFkZGluZzowfS5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fdG9nZ2xle2JhY2tncm91bmQ6bm9uZSFpbXBvcnRhbnQ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKSFpbXBvcnRhbnQ7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKSFpbXBvcnRhbnQ7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIHZhcigtLWVlLXBhZGRpbmctbWljcm8pfS5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fdG9nZ2xlOmhvdmVyLC5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fdG9nZ2xlOm5vdCg6ZGlzYWJsZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSk6bm90KC5pcy1kZWZhdWx0KTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWVlLWJhY2tncm91bmQtY29sb3IpIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWJvcmRlci1jb2xvcikhaW1wb3J0YW50O2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9LmVlLWRyb3AtZG93bi1tZW51LmNvbXBvbmVudHMtZHJvcGRvd24tbWVudSAuY29tcG9uZW50cy1kcm9wZG93bi1tZW51X190b2dnbGU6aG92ZXIsLmVlLWRyb3AtZG93bi1tZW51LmNvbXBvbmVudHMtZHJvcGRvd24tbWVudSAuY29tcG9uZW50cy1kcm9wZG93bi1tZW51X190b2dnbGU6bm90KDpkaXNhYmxlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKTpub3QoLmlzLWRlZmF1bHQpOmhvdmVye2NvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnkpIWltcG9ydGFudH0uZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX3RvZ2dsZTpmb2N1c3tjb2xvcjp2YXIoLS1lZS1jb2xvci1ibGFjayk7Ym94LXNoYWRvdzp2YXIoLS1lZS1ib3gtc2hhZG93LXdwLWljb24tYnRuLWZvY3VzKTtvdXRsaW5lOjJweCBzb2xpZCB0cmFuc3BhcmVudDtvdXRsaW5lLW9mZnNldDotMnB4fS5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fcG9wb3ZlciAuY29tcG9uZW50cy1wb3BvdmVyX19jb250ZW50e2JhY2tncm91bmQ6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS1lZS1ib3gtc2hhZG93LXNtYWxsKX0uZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLXBvcG92ZXI6bm90KC5pcy1tb2JpbGUpIC5jb21wb25lbnRzLXBvcG92ZXJfX2NvbnRlbnR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpIWltcG9ydGFudDttaW4td2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMTApfS5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtcG9wb3Zlcjpub3QoLmlzLXdpdGhvdXQtYXJyb3cpOm5vdCguaXMtbW9iaWxlKTphZnRlciwuZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLXBvcG92ZXI6bm90KC5pcy13aXRob3V0LWFycm93KTpub3QoLmlzLW1vYmlsZSk6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1lZS1ib3JkZXItY29sb3IpO2JvcmRlci1sZWZ0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjp0cmFuc3BhcmVudH0uZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLXBvcG92ZXI6bm90KC5pcy13aXRob3V0LWFycm93KTpub3QoLmlzLW1vYmlsZSkuaXMtdG9wOmFmdGVyLC5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtcG9wb3Zlcjpub3QoLmlzLXdpdGhvdXQtYXJyb3cpOm5vdCguaXMtbW9iaWxlKS5pcy10b3A6YmVmb3Jle2JvdHRvbTotN3B4fS5lZS1kcm9wLWRvd24tbWVudS5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnUgLmNvbXBvbmVudHMtcG9wb3Zlcjpub3QoLmlzLXdpdGhvdXQtYXJyb3cpOm5vdCguaXMtbW9iaWxlKS5pcy1ib3R0b206YWZ0ZXIsLmVlLWRyb3AtZG93bi1tZW51LmNvbXBvbmVudHMtZHJvcGRvd24tbWVudSAuY29tcG9uZW50cy1wb3BvdmVyOm5vdCguaXMtd2l0aG91dC1hcnJvdyk6bm90KC5pcy1tb2JpbGUpLmlzLWJvdHRvbTpiZWZvcmV7dG9wOi03cHh9LmNvbXBvbmVudHMtcG9wb3Zlcjpub3QoLmlzLXdpdGhvdXQtYXJyb3cpOm5vdCguaXMtbW9iaWxlKS5pcy10b3A6YWZ0ZXJ7Ym90dG9tOi02cHh9LmVlLWRyb3AtZG93bi1tZW51LmNvbXBvbmVudHMtZHJvcGRvd24tbWVudSAuY29tcG9uZW50cy1kcm9wZG93bi1tZW51X19tZW51e2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKSB2YXIoLS1lZS1wYWRkaW5nLXNtYWxsKX0uZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX21lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fbWVudS1pdGVte2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIHZhcigtLWVlLXBhZGRpbmctZGVmYXVsdCkgdmFyKC0tZWUtcGFkZGluZy10aW55KSB2YXIoLS1lZS1wYWRkaW5nLXNtYWxsZXIpO3doaXRlLXNwYWNlOm5vd3JhcH0uZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX21lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fbWVudS1pdGVtOmFjdGl2ZSwuZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX21lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fbWVudS1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS0xNCk7Ym94LXNoYWRvdzpub25lO2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1oaWdoLWNvbnRyYXN0KX0uZWUtZHJvcC1kb3duLW1lbnUuY29tcG9uZW50cy1kcm9wZG93bi1tZW51IC5jb21wb25lbnRzLWRyb3Bkb3duLW1lbnVfX21lbnUgLmNvbXBvbmVudHMtZHJvcGRvd24tbWVudV9fbWVudS1pdGVtOmZvY3VzOm5vdCg6ZGlzYWJsZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSk6bm90KC5pcy1kZWZhdWx0KXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTQpO2JveC1zaGFkb3c6bm9uZTtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3ItaGlnaC1jb250cmFzdCk7b3V0bGluZS1vZmZzZXQ6LTJweDtvdXRsaW5lOjFweCBkb3R0ZWQgdmFyKC0tZWUtY29sb3ItZ3JleS04KX0iLCIuZWUtZW50aXR5LWRldGFpbHMtcGFuZWwtZGl2e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZXh0cmVtZSk7d2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtdGlueSkqMTkpfS5lZS1lbnRpdHktZGV0YWlscy1wYW5lbC1kaXYsLmVlLWVudGl0eS1kZXRhaWxzLXBhbmVsLWRpdiAuZWUtaW5saW5lLWVkaXQtdGV4dHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyl9LmVlLWVudGl0eS1kZXRhaWxzLWRpdntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2U7bWF4LXdpZHRoOnZhcigtLWVlLWZvbnQtc2l6ZS1leHRyZW1lKX0uZWUtZW50aXR5LWRldGFpbHMtZGl2IC5lZS1pbmxpbmUtZWRpdC1pbnB1dHttYXgtd2lkdGg6dmFyKC0tZWUtZm9udC1zaXplLWV4dHJlbWUpO21hcmdpbjowIDAgY2FsYyh2YXIoLS1lZS1tYXJnaW4tbWljcm8pKi0xKX0uZWUtZW50aXR5LWRldGFpbHMtbGFiZWwtZGl2e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1zdXBlci1oaWdoLWNvbnRyYXN0KTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLW1pY3JvKTtsZXR0ZXItc3BhY2luZzoxcHh9LmVlLWVudGl0eS1kZXRhaWxzLXZhbHVlLWRpdntmb250LXdlaWdodDo3MDB9LmVlLWVudGl0eS1kZXRhaWxzLXNlcGFyYXRvcntib3JkZXI6MCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiYSgwLDAsMCwuMjUpO2hlaWdodDp2YXIoLS1lZS1mb250LXNpemUtaHVnZSl9LmVlLWluZmluaXR5LXNpZ257Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWUtZW50aXR5LWRldGFpbHMtdmFsdWUtZGl2IGF7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JveC1zaGFkb3c6bm9uZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7aGVpZ2h0OnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTttYXJnaW46MCBhdXRvIGNhbGModmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcikvLTQpO291dGxpbmUtc3R5bGU6bm9uZTt0ZXh0LWRlY29yYXRpb246bm9uZSFpbXBvcnRhbnQ7d2lkdGg6dmFyKC0tZWUtaWNvbi1idXR0b24tc2l6ZSl9LmVlLWVudGl0eS1kZXRhaWxzLXZhbHVlLWRpdiAuZGFzaGljb257bWFyZ2luOjA7cG9zaXRpb246cmVsYXRpdmU7dG9wOnZhcigtLWVlLW1hcmdpbi1taWNybykhaW1wb3J0YW50fS5lZS1lbnRpdHktZGV0YWlscy12YWx1ZS1kaXYgYTpmb2N1cywuZWUtZW50aXR5LWRldGFpbHMtdmFsdWUtZGl2IGE6aG92ZXJ7Y29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSl9LmVlLWVudGl0eS1kZXRhaWxzLXZhbHVlLWRpdiBhOmFjdGl2ZXtjb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5LWxvdy1jb250cmFzdCl9LmVlLWVudGl0eS1kZXRhaWxzLXZhbHVlLWRpdiBhOnZpc2l0ZWR7Y29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeS1oaWdoLWNvbnRyYXN0KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjYwMHB4KXsuZWUtZW50aXR5LWRldGFpbHMtcGFuZWwtZGl2e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7d2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMTApfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5lZS1lbnRpdHktZGV0YWlscy1wYW5lbC1kaXZ7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDphdXRvO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKSAwIDA7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJX0uZWUtZW50aXR5LWRldGFpbHMtZGl2e2ZsZXgtZGlyZWN0aW9uOnJvdzttYXgtd2lkdGg6dW5zZXQ7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJX0uZWUtZW50aXR5LWRldGFpbHMtdmFsdWUtZGl2e3BhZGRpbmctbGVmdDp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjI1JX0uZWUtZW50aXR5LWRldGFpbHMtbGFiZWwtZGl2e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1oaWdoLWNvbnRyYXN0KTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXRpbnkpO2xldHRlci1zcGFjaW5nOjA7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo1MCV9LmVlLWVudGl0eS1kZXRhaWxzLXNlcGFyYXRvcntkaXNwbGF5Om5vbmV9fSIsIi5lc3ByZXNzby1lZGl0b3IgLmVlLWlubGluZS1lZGl0LXRleHQ6aG92ZXJ7Y29sb3I6dmFyKC0tZWUtY29sb3ItYnJpZ2h0LWdyZWVuLWhpZ2gtY29udHJhc3QpIWltcG9ydGFudH0uZXNwcmVzc28tZWRpdG9yIC5lZS1pbmxpbmUtZWRpdC1pbnB1dC5mb3JtLWNvbnRyb2x7Ym94LXNoYWRvdzpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7Zm9udC13ZWlnaHQ6NDAwO2hlaWdodDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbWljcm8pO3dpZHRoOjk1JX0uZXNwcmVzc28tZWRpdG9yIC5lZS1pbmxpbmUtZWRpdC1pbnB1dC1udW1iZXJ7dGV4dC1hbGlnbjpyaWdodH0uZXNwcmVzc28tZWRpdG9yIC5lZS1pbmxpbmUtZWRpdC1sYWJlbHtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3ItaGlnaC1jb250cmFzdCk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSFpbXBvcnRhbnQ7bWFyZ2luOjA7d2lkdGg6OTUlfS5lc3ByZXNzby1lZGl0b3IgLmVlLWlubGluZS1lZGl0LXRleHQgLmNvbXBvbmVudHMtdG9vbHRpcHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcil9IiwiLmVlLWVkaXRvci1lbnRpdHktbGlzdHt3aWR0aDoxMDEuMyV9LmVlLWVudGl0eS1saXN0LW5vLXJlc3VsdHN7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1ncmV5LTExKTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7cGFkZGluZzo0cmVtIDJyZW07dGV4dC1hbGlnbjpjZW50ZXJ9IiwiLmVlLWVudGl0eS1wYXBlci1mcmFtZS13cmFwcGVye21hcmdpbjowIDEuMyUgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKSAwO3dpZHRoOjMyJX0uZWUtZW50aXR5LXBhcGVyLWZyYW1lLXdyYXBwZXIsLmVlLWVudGl0eS13cmFwcGVye21heC13aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCkqMzMpO21pbi13aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCkqMjcpO3Bvc2l0aW9uOnJlbGF0aXZlfS5lZS1lbnRpdHktd3JhcHBlcntib3gtc2hhZG93OnZhcigtLWVlLWJveC1zaGFkb3ctYmlnLWRpZmZ1c2UpO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWUtZW50aXR5LXdyYXBwZXI+ZGl2OmZpcnN0LW9mLXR5cGV7Ym94LXNoYWRvdzppbnNldCAwIDAgMXB4IHZhcigtLWVlLWNvbG9yLWJsYWNrKX0uZWUtZW50aXR5LXBhcGVyLWZyYW1le2JvdHRvbTowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtc21hbGwpKjExKTttYXgtd2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtc21hbGwpKjMzKTt3aWR0aDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MH0uZWUtZW50aXR5LXBhcGVyLWZyYW1lOmFmdGVyLC5lZS1lbnRpdHktcGFwZXItZnJhbWU6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6XCJcIjtib3R0b206MTRweDtsZWZ0OjEwcHg7d2lkdGg6NTAlO3RvcDo3MCU7bWF4LXdpZHRoOjMwMHB4O2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItYmxhY2spO2JveC1zaGFkb3c6MCAxNXB4IDEwcHggcmdiYSgwLDAsMCwuNik7dHJhbnNmb3JtOnJvdGF0ZSgtM2RlZyk7ei1pbmRleDotMX0uZWUtZW50aXR5LXBhcGVyLWZyYW1lOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoM2RlZyk7cmlnaHQ6MTBweDtsZWZ0OmF1dG99QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjE3NjZweCl7LmVlLWVudGl0eS1wYXBlci1mcmFtZS13cmFwcGVye21hcmdpbi1yaWdodDoxLjUlO3dpZHRoOjQ4LjUlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MTM2NnB4KXsuZWUtZW50aXR5LXBhcGVyLWZyYW1lLC5lZS1lbnRpdHktcGFwZXItZnJhbWUtd3JhcHBlciwuZWUtZW50aXR5LXdyYXBwZXJ7bWF4LXdpZHRoOjUyNXB4O3dpZHRoOjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo4NTBweCl7LmVlLWVudGl0eS1wYXBlci1mcmFtZSwuZWUtZW50aXR5LXBhcGVyLWZyYW1lLXdyYXBwZXIsLmVlLWVudGl0eS13cmFwcGVye3dpZHRoOjEwMCV9LmVlLWVudGl0eS1wYXBlci1mcmFtZSwuZWUtZW50aXR5LXdyYXBwZXJ7bWF4LXdpZHRoOjUyNXB4fX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjYwMHB4KXsuZWUtZW50aXR5LXBhcGVyLWZyYW1lLC5lZS1lbnRpdHktcGFwZXItZnJhbWUtd3JhcHBlciwuZWUtZW50aXR5LXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7bWluLXdpZHRoOjEwMCU7d2lkdGg6MTAwJX19IiwiLmVlLWljb24tbWVudS1pdGVtLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9LmVlLWljb24tbWVudS1pdGVte2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7aGVpZ2h0OnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpO21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLW1pY3JvKTt3aWR0aDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKX0uZWUtaWNvbi1tZW51LWl0ZW06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKSFpbXBvcnRhbnQ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudDtjb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5KSFpbXBvcnRhbnQ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpfS5lZS1pY29uLW1lbnUtaXRlbS1jb3VudHtib3JkZXItcmFkaXVzOnZhcigtLWVlLWJvcmRlci1yYWRpdXMtZnVsbCk7Ym94LXNpemluZzpib3JkZXItYm94O2JveC1zaGFkb3c6dmFyKC0tZWUtYm94LXNoYWRvdy10aW55KTtjb2xvcjp2YXIoLS1lZS1jb2xvci13aGl0ZSk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KTtmb250LXdlaWdodDo0MDA7aGVpZ2h0OmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpICsgMXB4KTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtbWljcm8pO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1taWNybyk7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzp2YXIoLS1lZS10ZXh0LXNoYWRvdy1pbnNldCk7dG9wOjA7dmVydGljYWwtYWxpZ246dG9wO21pbi13aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSArIDFweCl9LmVlLWljb24tbWVudS1pdGVtLWNvdW50LmVlLWhhcy1pdGVtc3tiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWJyaWdodC1ibHVlKX0uZWUtaWNvbi1tZW51LWl0ZW0tY291bnQuZWUtbm8taXRlbXN7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1ob3QtcGluayk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KTtmb250LXdlaWdodDo3MDB9IiwiLmVlLXJUYWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTp0YWJsZTttYXJnaW46MCBhdXRvIHZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKTt0YWJsZS1sYXlvdXQ6Zml4ZWQ7dGV4dC1hbGlnbjpsZWZ0fS5lZS1yVGFibGUgLmVlLXJUYWJsZS1oZWFkZXJ7dmlzaWJpbGl0eTp2aXNpYmxlfS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS1yb3csLmVlLXJUYWJsZSAuZWUtclRhYmxlLWZvb3RlciAuZWUtclRhYmxlLWZvb3Rlci1yb3csLmVlLXJUYWJsZSAuZWUtclRhYmxlLWhlYWRlciAuZWUtclRhYmxlLWhlYWRlci1yb3d7Ym94LXNpemluZzpib3JkZXItYm94fS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS1yb3c6bnRoLWNoaWxkKDJuKXtiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWdyZXktMTEpfS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlIC5lZS1yVGFibGUtZm9vdGVyIC5lZS1yVGFibGUtZm9vdGVyLXRkLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWhlYWRlciAuZWUtclRhYmxlLWhlYWRlci10aHtib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1hbGlnbjpsZWZ0fS5lZS1yVGFibGUtaGFzLXJvdy1oZWFkZXJzIC5lZS1yVGFibGUtZm9vdGVyIC5lZS1yVGFibGUtZm9vdGVyLXRoOmZpcnN0LWNoaWxkLC5lZS1yVGFibGUtaGFzLXJvdy1oZWFkZXJzIC5lZS1yVGFibGUtaGVhZGVyIC5lZS1yVGFibGUtaGVhZGVyLXRoOmZpcnN0LWNoaWxkLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS10aHtib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1hbGlnbjpsZWZ0fS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5LXRoe2Rpc3BsYXk6dGFibGUtY2VsbH0uZWUtclRhYmxlIC5lZS1yVGFibGUtYm9keS10ZCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmVlLXJUYWJsZSAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi1oZWFkZXJ7ZGlzcGxheTpub25lO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjB9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXJUYWJsZS1ib2R5LXRkLmVlLW51bWJlci1jb2x1bW4sLmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXJUYWJsZS1ib2R5LXRkLmVlLW51bWJlci1jb2x1bW4gaW5wdXRbdHlwZT1udW1iZXJdLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS10ZC5lZS1udW1iZXItY29sdW1uIGlucHV0W3R5cGU9dGV4dF0sLmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXJUYWJsZS1ib2R5LXRkLmVlLW51bWJlci1jb2x1bW4gc2VsZWN0LC5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS10aC5lZS1udW1iZXItY29sdW1uIGlucHV0W3R5cGU9bnVtYmVyXSwuZWUtclRhYmxlIC5lZS1yVGFibGUtYm9keSAuZWUtclRhYmxlLWJvZHktdGguZWUtbnVtYmVyLWNvbHVtbiBpbnB1dFt0eXBlPXRleHRdLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS10aC5lZS1udW1iZXItY29sdW1uIHNlbGVjdCwuZWUtclRhYmxlIC5lZS1yVGFibGUtZm9vdGVyIC5lZS1yVGFibGUtZm9vdGVyLXRkLmVlLW51bWJlci1jb2x1bW4gaW5wdXRbdHlwZT1udW1iZXJdLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXJUYWJsZS1mb290ZXItdGQuZWUtbnVtYmVyLWNvbHVtbiBpbnB1dFt0eXBlPXRleHRdLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXJUYWJsZS1mb290ZXItdGQuZWUtbnVtYmVyLWNvbHVtbiBzZWxlY3QsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWZvb3RlciAuZWUtclRhYmxlLWZvb3Rlci10aC5lZS1udW1iZXItY29sdW1uLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXJUYWJsZS1mb290ZXItdGguZWUtbnVtYmVyLWNvbHVtbiBpbnB1dFt0eXBlPW51bWJlcl0sLmVlLXJUYWJsZSAuZWUtclRhYmxlLWZvb3RlciAuZWUtclRhYmxlLWZvb3Rlci10aC5lZS1udW1iZXItY29sdW1uIGlucHV0W3R5cGU9dGV4dF0sLmVlLXJUYWJsZSAuZWUtclRhYmxlLWZvb3RlciAuZWUtclRhYmxlLWZvb3Rlci10aC5lZS1udW1iZXItY29sdW1uIHNlbGVjdCwuZWUtclRhYmxlIC5lZS1yVGFibGUtaGVhZGVyIC5lZS1yVGFibGUtaGVhZGVyLXRoLmVlLW51bWJlci1jb2x1bW4sLmVlLXJUYWJsZSAuZWUtclRhYmxlLWhlYWRlciAuZWUtclRhYmxlLWhlYWRlci10aC5lZS1udW1iZXItY29sdW1uIGlucHV0W3R5cGU9bnVtYmVyXSwuZWUtclRhYmxlIC5lZS1yVGFibGUtaGVhZGVyIC5lZS1yVGFibGUtaGVhZGVyLXRoLmVlLW51bWJlci1jb2x1bW4gaW5wdXRbdHlwZT10ZXh0XSwuZWUtclRhYmxlIC5lZS1yVGFibGUtaGVhZGVyIC5lZS1yVGFibGUtaGVhZGVyLXRoLmVlLW51bWJlci1jb2x1bW4gc2VsZWN0e3RleHQtYWxpZ246cmlnaHR9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjElfS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTEgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTEgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMSAuZWUtclRhYmxlLWhlYWRlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIgLmVlLXJUYWJsZS1oZWFkZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjI1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xIC5lZS1yVGFibGUtYm9keS10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yIC5lZS1yVGFibGUtYm9keS10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo1MCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIwJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo0MCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjE2LjY3JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDozMy4zMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNiAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjE0LjI5JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyOC41NyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEyLjUlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTcgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjI1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTggLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MTEuMTElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTggLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIyLjIyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTkgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MTAlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTkgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIwJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTAgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTAgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6OS4wOSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTAgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjE4LjE4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTEgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTEgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6OC4zMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTEgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjE2LjY3JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMiAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTIgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTIgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Ny42OSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTIgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjE1LjM4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xMyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTMgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTMgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Ny4xNCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTMgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjE0LjI5JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Ni42NyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjEzLjMzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTUgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTUgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Ni4yNSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMTUgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjEyLjUlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTE2IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDo1Ljg4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6MTEuNzYlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTE3IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNyAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDo1LjU2JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xNyAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6MTEuMTElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTE4IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDo1LjI2JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6MTAuNTMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTE5IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDo1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0xOSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6MTAlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIwIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDo0Ljc2JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6OS41MiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjEgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIxIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIxIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjQuNTUlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIxIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo5LjA5JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yMiAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjIgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjIgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6NC4zNSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjIgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjguNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjMgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIzIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIzIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjQuMTclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTIzIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo4LjMzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6NCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjglfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI1IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDozLjg1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Ny42OSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjYgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI2IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI2IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjMuNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjYgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjcuNDElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI3IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNyAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDozLjU3JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yNyAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Ny4xNCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMjggLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI4IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI4IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjMuNDUlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI4IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo2LjklfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTI5IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yOSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yOSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDozLjMzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0yOSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Ni42NyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzAgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMwIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMwIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjMuMjMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMwIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo2LjQ1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzEgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzEgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6My4xMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzEgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjYuMjUlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMyIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDozLjAzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zMiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Ni4wNiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzMgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMzIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMzIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIuOTQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTMzIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo1Ljg4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Mi44NiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjUuNzElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM1IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoyLjc4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6NS41NiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzYgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM2IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM2IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIuNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzYgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjUuNDElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM3IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNyAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoyLjYzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zNyAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6NS4yNiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzggLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM4IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM4IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIuNTYlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTM4IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo1LjEzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zOSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzkgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtMzkgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Mi41JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC0zOSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6NSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDAgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQwIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQwIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIuNDQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQwIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo0Ljg4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDEgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDEgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Mi4zOCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDEgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjQuNzYlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQyIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoyLjMzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00MiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6NC42NSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDMgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQzIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQzIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIuMjclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQzIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo0LjU1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Mi4yMiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjQuNDQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ1IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoyLjE3JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6NC4zNSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDYgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ2IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ2IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIuMTMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ2IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo0LjI2JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00NyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDcgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDcgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6Mi4wOCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDcgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjQuMTclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ4IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00OCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC00OCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoyLjA0JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC00OCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6NC4wOCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNDkgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ5IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ5IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjIlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTQ5IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDo0JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTAgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTAgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS45NiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTAgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjMuOTIlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTUxIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjkyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6My44NSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTIgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTUyIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTUyIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuODklfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTUyIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDozLjc3JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01MyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTMgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTMgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS44NSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTMgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjMuNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTQgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU0IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU0IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuODIlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU0IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDozLjY0JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTUgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTUgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS43OSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTUgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjMuNTclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU2IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjc1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01NiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6My41MSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTcgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU3IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU3IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuNzIlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU3IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDozLjQ1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01OCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTggLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTggLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS42OSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNTggLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjMuMzklfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTU5IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01OSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC01OSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjY3JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC01OSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6My4zMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjAgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYwIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYwIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuNjQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYwIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDozLjI4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjEgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjEgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS42MSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjEgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjMuMjMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYyIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjU5JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02MiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6My4xNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjMgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYzIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYzIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuNTYlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTYzIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDozLjEzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS41NCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjMuMDglfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTY1IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjUyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6My4wMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjYgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTY2IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTY2IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuNDklfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTY2IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjk5JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02NyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjcgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjcgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS40NyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjcgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuOTQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTY4IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02OCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC02OCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjQ1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02OCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi45JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC02OSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjkgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjkgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS40MyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNjkgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuODYlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTcwIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjQxJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi44MiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzEgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTcxIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTcxIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMzklfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTcxIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjc4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MiAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzIgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzIgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4zNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzIgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuNzQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTczIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MyAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjM1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03MyAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi43JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4zMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuNjclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc1IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjMyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03NSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi42MyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzYgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc2IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc2IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzYgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuNiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzcgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc3IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc3IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMjglfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc3IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjU2JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03OCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzggLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzggLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4yNyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtNzggLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuNTMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTc5IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03OSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC03OSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjI1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC03OSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi41JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODAgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODAgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4yMyV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODAgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuNDclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTgxIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjIyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi40NCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODIgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTgyIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTgyIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODIgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuNDElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTgzIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MyAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MyAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjE5JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04MyAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4zOCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODQgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg0IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg0IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMTglfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg0IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjM1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODUgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODUgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4xNiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODUgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuMzMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg2IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjE1JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4zJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04NyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODcgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODcgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4xNCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODcgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuMjclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg4IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04OCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC04OCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjEyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC04OCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4yNSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtODkgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg5IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg5IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMTElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTg5IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjIyJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTAgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTAgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4xJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4yJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MSAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTEgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTEgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4wOSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTEgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuMTclfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTkyIC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MiAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MiAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjA4JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05MiAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4xNSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTMgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTkzIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTkzIC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMDYlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTkzIC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjEzJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NCAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTQgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTQgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4wNSV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTQgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuMTElfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTk1IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NSAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NSAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjA0JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NSAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4wOCV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTYgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTk2IC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUtY29sdW1uLWNvdW50LTk2IC5lZS1yVGFibGUtaGVhZGVyLXRoe3dpZHRoOjEuMDMlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTk2IC5lZS1yVGFibGUtYm9keS10aHt3aWR0aDoyLjA2JX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05NyAuZWUtclRhYmxlLWJvZHktdGQsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTcgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTcgLmVlLXJUYWJsZS1oZWFkZXItdGh7d2lkdGg6MS4wMiV9LmVlLXJUYWJsZS1jb2x1bW4tY291bnQtOTcgLmVlLXJUYWJsZS1ib2R5LXRoe3dpZHRoOjIuMDQlfS5lZS1yVGFibGUtY29sdW1uLWNvdW50LTk4IC5lZS1yVGFibGUtYm9keS10ZCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05OCAuZWUtclRhYmxlLWZvb3Rlci10aCwuZWUtclRhYmxlLWNvbHVtbi1jb3VudC05OCAuZWUtclRhYmxlLWhlYWRlci10aHt3aWR0aDoxLjAxJX0uZWUtclRhYmxlLWNvbHVtbi1jb3VudC05OCAuZWUtclRhYmxlLWJvZHktdGh7d2lkdGg6Mi4wMiV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3ODJweCl7LmVlLXJUYWJsZXt3aWR0aDo2MDBweH0uZWUtclRhYmxlIC5lZS1yVGFibGUtaGVhZGVye2hlaWdodDowIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnQ7d2lkdGg6MCFpbXBvcnRhbnR9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXJUYWJsZS1ib2R5LXJvdywuZWUtclRhYmxlIC5lZS1yVGFibGUtZm9vdGVyIC5lZS1yVGFibGUtZm9vdGVyLXJvdywuZWUtclRhYmxlIC5lZS1yVGFibGUtaGVhZGVyIC5lZS1yVGFibGUtaGVhZGVyLXJvd3tkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIDB9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS10aCwuZWUtclRhYmxlIC5lZS1yVGFibGUtZm9vdGVyIC5lZS1yVGFibGUtZm9vdGVyLXRkLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXJUYWJsZS1mb290ZXItdGgsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWhlYWRlciAuZWUtclRhYmxlLWhlYWRlci10aHtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbWljcm8pfS5lZS1yVGFibGUsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHksLmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHktdGgsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWZvb3RlciwuZWUtclRhYmxlIC5lZS1yVGFibGUtZm9vdGVyLXRoLC5lZS1yVGFibGUgLmVlLXJUYWJsZS1oZWFkZXIsLmVlLXJUYWJsZSAuZWUtclRhYmxlLWhlYWRlci10aHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHktdGR7ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6MTAwJX0uZWUtclRhYmxlIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlcntmbG9hdDpsZWZ0O21hcmdpbjphdXRvIDA7cGFkZGluZy1yaWdodDp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3RleHQtYWxpZ246cmlnaHQ7dmVydGljYWwtYWxpZ246bWlkZGxlO3Zpc2liaWxpdHk6dmlzaWJsZX0uZWUtclRhYmxlIC5lZS1yVGFibGUtYm9keS10ZCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZSwuZWUtclRhYmxlIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6NTAlfX0iLCIuZWUtc3RlcC1idWJibGUtbWVudS1jb250YWluZXJ7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoxcmVtIGF1dG87cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6YXV0b30uZWUtc3RlcC1idWJibGUtbWVudS1jb250YWluZXIgLnN0ZXAtYnViYmxlcy1jb250YWluZXJ7ZGlzcGxheTpibG9jazttYXJnaW46YXV0bzt3aWR0aDoxMDAlfS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZS1pdGVte2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoxcmVtO21pbi13aWR0aDoxNjBweDtwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXJ9LnN0ZXAtYnViYmxlcy1jb250YWluZXIgLmVlLXN0ZXAtYnViYmxlLWl0ZW06Zm9jdXN7b3V0bGluZTp1bnNldH0uc3RlcC1idWJibGVzLWNvbnRhaW5lciAucHJvZ3Jlc3Mtc3RlcC1saW5le2JhY2tncm91bmQ6I2RkZDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7aGVpZ2h0OjA7bGVmdDotMXJlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTZweDt3aWR0aDpjYWxjKDEwMCUgKyAycmVtKTt6LWluZGV4Oi0xfS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjJweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6OTk5ZW07Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjojNzc3O2hlaWdodDozMHB4O21hcmdpbjphdXRvO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjMwcHh9LnN0ZXAtYnViYmxlcy1jb250YWluZXIgLmVlLWNsaWNrYWJsZSAuZWUtc3RlcC1idWJibGV7YmFja2dyb3VuZC1jb2xvcjojZGRkO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9LnN0ZXAtYnViYmxlcy1jb250YWluZXIgLmVlLWNsaWNrYWJsZSAuZWUtc3RlcC1idWJibGU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojMjk3YWJjO2NvbG9yOiMyOTdhYmN9LnN0ZXAtYnViYmxlcy1jb250YWluZXIgLmVlLWNsaWNrYWJsZS5lZS1zdGVwLWJ1YmJsZS1hY3RpdmUgLmVlLXN0ZXAtYnViYmxle2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjk3YWJjO2JvcmRlci1jb2xvcjojMjk3YWJjfS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZSBwe2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxPeHlnZW4tU2FucyxVYnVudHUsQ2FudGFyZWxsLEhlbHZldGljYSBOZXVlLHNhbnMtc2VyaWY7Zm9udC1zaXplOjIxcHg7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjI3cHg7bWFyZ2luOjA7cGFkZGluZzowO3RleHQtYWxpZ246Y2VudGVyfS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZS1zdGVwLXRleHR7Y29sb3I6Izc3NztkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjNlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luLXRvcDoxcmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lZS1zdGVwLWJ1YmJsZS1tZW51LWNvbnRhaW5lcnttYXJnaW46MXJlbSBhdXRvIC41cmVtfS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZS1pdGVte21heC13aWR0aDo5MHB4O21pbi13aWR0aDo2MHB4fS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZS1zdGVwLXRleHR7Zm9udC1zaXplOjFlbTttYXJnaW46LjVyZW0gMCAwfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzYwcHgpey5lZS1zdGVwLWJ1YmJsZS1tZW51LWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO21hcmdpbjowIDAgMXJlbX0uc3RlcC1idWJibGVzLWNvbnRhaW5lciAuZWUtc3RlcC1idWJibGUtaXRlbXtkaXNwbGF5OmJsb2NrO21heC13aWR0aDp1bnNldDt3aWR0aDoxMDAlO3RleHQtYWxpZ246bGVmdH0uc3RlcC1idWJibGVzLWNvbnRhaW5lciAuZWUtc3RlcC1idWJibGV7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bGVmdDttYXJnaW46MCAxcmVtIDAgMDtoZWlnaHQ6MjZweDt3aWR0aDoyNnB4fS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZSBwe2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjI0cHh9LnN0ZXAtYnViYmxlcy1jb250YWluZXIgLnByb2dyZXNzLXN0ZXAtbGluZXtoZWlnaHQ6Y2FsYygxMDAlICsgMnJlbSk7bGVmdDoxM3B4O3RvcDotMXJlbTt3aWR0aDowfS5zdGVwLWJ1YmJsZXMtY29udGFpbmVyIC5lZS1zdGVwLWJ1YmJsZS1zdGVwLXRleHR7ZGlzcGxheTpibG9jaztmb250LXNpemU6MS4zZW07bWFyZ2luOi4zcmVtIDAgMH19IiwiLmVlLWRhdGUtdGltZS1pbnB1dC10ZXh0LWZpZWxkLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1zdGFydH0uZWUtZGF0ZS10aW1lLWlucHV0LXRleHQtZmllbGQtd3JhcHBlciAuZWUtZGF0ZS10aW1lLWlucHV0LXRleHQtZmllbGR7bWFyZ2luLXJpZ2h0OnZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKX0uZWUtZGF0ZS10aW1lLWlucHV0LWRpYWxvZ3ttYXJnaW4tbGVmdDotMjUlIWltcG9ydGFudH0uZWUtZGF0ZS10aW1lLWlucHV0LXBpY2tlci13cmFwcGVye3BhZGRpbmc6MXJlbSAycmVtIDJyZW19LmVlLWRhdGUtdGltZS1pbnB1dC1idXR0b25zLXdyYXBwZXJ7cGFkZGluZzoycmVtIDAgMDt0ZXh0LWFsaWduOnJpZ2h0fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDoxNjAwcHgpey5lZS1kYXRlLXRpbWUtaW5wdXQtZGlhbG9ne21hcmdpbi1sZWZ0Oi0yNSUhaW1wb3J0YW50fX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MTM2NnB4KXsuZWUtZGF0ZS10aW1lLWlucHV0LWRpYWxvZ3ttYXJnaW4tbGVmdDotMjUlIWltcG9ydGFudH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjEyODBweCl7LmVlLWRhdGUtdGltZS1pbnB1dC1kaWFsb2d7bWFyZ2luLWxlZnQ6LTE2JSFpbXBvcnRhbnR9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDoxMDI0cHgpey5lZS1kYXRlLXRpbWUtaW5wdXQtZGlhbG9ne21hcmdpbi1sZWZ0Oi0xNiUhaW1wb3J0YW50fX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5lZS1kYXRlLXRpbWUtaW5wdXQtZGlhbG9ne21hcmdpbi1sZWZ0Oi0xNSUhaW1wb3J0YW50fX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ODUwcHgpey5lZS1kYXRlLXRpbWUtaW5wdXQtZGlhbG9ne21hcmdpbi1sZWZ0Oi0xMi41JSFpbXBvcnRhbnR9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzgycHgpey5lZS1kYXRlLXRpbWUtaW5wdXQtZGlhbG9ne21hcmdpbi1sZWZ0Oi0xMCUhaW1wb3J0YW50fX0iLCIuZXNwcmVzc28taW5wdXQtZXJyb3J7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKSAwIDB9LmVzcHJlc3NvLWlucHV0LWVycm9yIHNwYW57YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ob3QtcGluayk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLXNtYWxsKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWhvdC1waW5rLWhpZ2gtY29udHJhc3QpO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7bGV0dGVyLXNwYWNpbmc6MXB4O2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1taWNybykgdmFyKC0tZWUtcGFkZGluZy10aW55KTt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbH0iLCIuZWUtZm9ybS1pbmZvLXJvd3ttYXJnaW46dmFyKC0tZWUtbWFyZ2luLXNtYWxsKSAwfS5lZS1mb3JtLWluZm8tcm93LmlzLWRpc21pc3NhYmxle21heC1oZWlnaHQ6NTAwcHg7bWluLWhlaWdodDowIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjptYXgtaGVpZ2h0IC4yNXMgZWFzZS1pbi1vdXR9LmVlLWZvcm0taW5mby1yb3cuaXMtZGlzbWlzc2FibGUuZGlzbWlzc2Vke21heC1oZWlnaHQ6MCFpbXBvcnRhbnR9LmVlLWZvcm0taW5mb3tjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3ItbG93LWNvbnRyYXN0KTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO2ZvbnQtc3R5bGU6aXRhbGljO2hlaWdodDphdXRvO2xpbmUtaGVpZ2h0OjEuMjVyZW07cG9zaXRpb246cmVsYXRpdmV9LmVlLWZvcm0taW5mby10ZXh0e2hlaWdodDoxMDAlfS5lZS1mb3JtLWluZm8tcm93LmlzLWRpc21pc3NhYmxlIC5lZS1mb3JtLWluZm97cGFkZGluZzowIHZhcigtLWVlLXBhZGRpbmctc21hbGwpIDAgMH0uZWUtZm9ybS1pbmZvIC5lZS1mb3JtLWluZm8tdHlwZXtiYWNrZ3JvdW5kOnZhcigtLWVlLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTApO2xlZnQ6Y2FsYyh2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpKi0xKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4fS5lZS1mb3JtLWluZm8uZWUtZm9ybS1pbmZvLXR5cGUtd2FybmluZyAuZWUtZm9ybS1pbmZvLXR5cGV7Y29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspfS5lZS1mb3JtLWluZm8gLmVlLWZvcm0taW5mby10ZXh0IC5kYXNoaWNvbnttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tbWljcm8pO3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfS5lZS1mb3JtLWluZm8gLmVlLWZvcm0taW5mby1kaXNtaXNze2JhY2tncm91bmQ6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS0xMCk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS5lZS1mb3JtLWluZm8gLmVlLWZvcm0taW5mby1kaXNtaXNzOmFjdGl2ZSwuZWUtZm9ybS1pbmZvIC5lZS1mb3JtLWluZm8tZGlzbWlzczpmb2N1cywuZWUtZm9ybS1pbmZvIC5lZS1mb3JtLWluZm8tZGlzbWlzczpob3Zlcntib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50O2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1sb3ctY29udHJhc3QpIWltcG9ydGFudDtvdXRsaW5lOm5vbmUhaW1wb3J0YW50fS5kaXNtaXNzZWQgLmVlLWZvcm0taW5mbyAuZWUtZm9ybS1pbmZvLWRpc21pc3M6aG92ZXJ7YW5pbWF0aW9uOnZhcigtLWVlLWFuaW1hdGlvbi1zcGluLWZhc3QpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lZS1mb3JtLWluZm8gLmVlLWZvcm0taW5mby10eXBle2xlZnQ6dmFyKC0tZWUtcGFkZGluZy10aW55KX0uZWUtZm9ybS1pbmZvLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OnZhcigtLWVlLXBhZGRpbmctZXh0cmVtZSl9fSIsIjpyb290ey0tZWUtaW5wdXQtcGFkZGluZy1ib3R0b206Y2FsYygwLjM3NXJlbSArIDFweCk7LS1lZS1pbnB1dC1wYWRkaW5nLXNpZGVzOmNhbGMoMC43NXJlbSArIDFweCk7LS1lZS1pbnB1dC1wYWRkaW5nLXRvcDpjYWxjKDAuMzc1cmVtICsgMXB4KX0uZWUtdHdvLWNvbHVtbi1hZG1pbnttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfS5lZS10d28tY29sdW1uLWFkbWluLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLXJvdywuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1zZWN0aW9uLC5lZS10d28tY29sdW1uLWFkbWluIC5weC0wLC5lZS10d28tY29sdW1uLWFkbWluIC5weC0ze2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1zZWN0aW9uIHRhYmxle2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO21heC13aWR0aDoxMDAlfS5lZS10d28tY29sdW1uLWFkbWluOmFmdGVyLC5lZS10d28tY29sdW1uLWFkbWluOmJlZm9yZSwuZWUtdHdvLWNvbHVtbi1hZG1pbiBkaXZ7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAub3BhY2l0eS01MHtvcGFjaXR5Oi41fS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLXNlY3Rpb257ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLXNlY3Rpb246Zmlyc3Qtb2YtdHlwZXttYXJnaW46dmFyKC0tZWUtbWFyZ2luLWJpZykgMCAwfS5lZS10d28tY29sdW1uLWFkbWluIC5ib3JkZXJ7Ym9yZGVyOm5vbmV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLnJvdW5kZWR7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLW5vbmUpfS5lZS10d28tY29sdW1uLWFkbWluIC5wdC0zLC5lZS10d28tY29sdW1uLWFkbWluIC5weS0ze3BhZGRpbmctYm90dG9tOnZhcigtLWVlLXBhZGRpbmctc21hbGxlcik7cGFkZGluZy10b3A6dmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAucGwtMCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAucHgtMHtwYWRkaW5nLWxlZnQ6MH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAucHItMCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAucHgtMHtwYWRkaW5nLXJpZ2h0OjB9LmVlLXR3by1jb2x1bW4tYWRtaW4gLnBsLTMsLmVlLXR3by1jb2x1bW4tYWRtaW4gLnB4LTN7cGFkZGluZy1sZWZ0OnZhcigtLWVlLXBhZGRpbmctZGVmYXVsdCl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLnByLTMsLmVlLXR3by1jb2x1bW4tYWRtaW4gLnB4LTN7cGFkZGluZy1yaWdodDp2YXIoLS1lZS1wYWRkaW5nLWRlZmF1bHQpfS5lZS10d28tY29sdW1uLWFkbWluIC5tLTB7bWFyZ2luOjB9LmVlLXR3by1jb2x1bW4tYWRtaW4gLnRleHQtc20tcmlnaHQsLmVlLXR3by1jb2x1bW4tYWRtaW4gLnRleHQtc20tcmlnaHQgaW5wdXR7dGV4dC1hbGlnbjpyaWdodH0uZWUtdHdvLWNvbHVtbi1hZG1pbiBocntib3JkZXI6bm9uZTtwYWRkaW5nOjFweH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1yb3d7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKTttaW4taGVpZ2h0OnZhcigtLWVlLXBhZGRpbmctaHVnZSl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1mb3JtLWxhYmVse2ZvbnQtc2l6ZTppbmhlcml0O2xpbmUtaGVpZ2h0OnZhcigtLWVlLWxpbmUtaGVpZ2h0LW1vZGlmaWVyKTttYXJnaW46MDttYXgtd2lkdGg6MTAwJTtwYWRkaW5nLXRvcDp2YXIoLS1lZS1pbnB1dC1wYWRkaW5nLXRvcCk7cGFkZGluZy1ib3R0b206dmFyKC0tZWUtaW5wdXQtcGFkZGluZy1ib3R0b20pfS5lZS10d28tY29sdW1uLWFkbWluIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLXRpbnkpO21heC13aWR0aDoxMDAlfS5lZS10d28tY29sdW1uLWFkbWluIC5mb3JtLWNvbnRyb2w6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTApO29wYWNpdHk6MX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZm9ybS1jb250cm9sOjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS0xMCk7b3BhY2l0eToxfS5lZS10d28tY29sdW1uLWFkbWluIC5mb3JtLWNvbnRyb2w6OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTApO29wYWNpdHk6MX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZm9ybS1jb250cm9sOjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTApO29wYWNpdHk6MX0uZWUtdHdvLWNvbHVtbi1hZG1pbiBzZWxlY3QuZm9ybS1jb250cm9sOm5vdChbc2l6ZV0pOm5vdChbbXVsdGlwbGVdKXtoZWlnaHQ6Y2FsYyh2YXIoLS1lZS1pbnB1dC1wYWRkaW5nLXRvcCkqNiAtIDRweCl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmZvcm0tY29udHJvbCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZm9ybS1jb250cm9sLXdwIC5jb21wb25lbnRzLXNlbGVjdC1jb250cm9sX19pbnB1dHtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLXNtYWxsKTtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3IpO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtoZWlnaHQ6dmFyKC0tZWUtaWNvbi1idXR0b24tc2l6ZSk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpO3BhZGRpbmc6dmFyKC0tZWUtaW5wdXQtcGFkZGluZy10b3ApIHZhcigtLWVlLWlucHV0LXBhZGRpbmctc2lkZXMpIHZhcigtLWVlLWlucHV0LXBhZGRpbmctYm90dG9tKTt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dDt3aWR0aDoxMDAlfS5lZS10d28tY29sdW1uLWFkbWluIHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfS5lZS10d28tY29sdW1uLWFkbWluIGlucHV0LC5lZS10d28tY29sdW1uLWFkbWluIG9wdGdyb3VwLC5lZS10d28tY29sdW1uLWFkbWluIHNlbGVjdCwuZWUtdHdvLWNvbHVtbi1hZG1pbiB0ZXh0YXJlYXttYXJnaW46MDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXR9LmVlLXR3by1jb2x1bW4tYWRtaW4gaW5wdXQ6ZGlzYWJsZWQsLmVlLXR3by1jb2x1bW4tYWRtaW4gc2VsZWN0OmRpc2FibGVkLC5lZS10d28tY29sdW1uLWFkbWluIHRleHRhcmVhOmRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xMyk7Y29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS04KX0uZWUtdHdvLWNvbHVtbi1hZG1pbiBpbnB1dFt0eXBlPWNoZWNrYm94XSwuZWUtdHdvLWNvbHVtbi1hZG1pbiBpbnB1dFt0eXBlPXJhZGlvXXttYXJnaW46LTJweCB2YXIoLS1lZS1tYXJnaW4tdGlueSkgMCAwfS5lZS10d28tY29sdW1uLWFkbWluIGlucHV0W3R5cGU9bnVtYmVyXXtoZWlnaHQ6aW5oZXJpdDt0ZXh0LWFsaWduOnJpZ2h0fS5lZS10d28tY29sdW1uLWFkbWluIGlucHV0LmVlLW1vbmV5LWZpZWxkLmVlLXNpZ24tYWZ0ZXIsLmVlLXR3by1jb2x1bW4tYWRtaW4gaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1iZWZvcmV7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMS41KX0uZWUtdHdvLWNvbHVtbi1hZG1pbiBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1jdXJTaWduLTJ7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjIuMjUpfS5lZS10d28tY29sdW1uLWFkbWluIGlucHV0LmVlLW1vbmV5LWZpZWxkLTIuZWUtY3VyU2lnbi0ze3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSozKX0uZWUtdHdvLWNvbHVtbi1hZG1pbiBpbnB1dC5lZS1tb25leS1maWVsZC0yLmVlLWN1clNpZ24tNHt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMy43NSl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWN1cnJlbmN5LXNpZ24sLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLXBlcmNlbnQtc2lnbntwYWRkaW5nOnZhcigtLWVlLWlucHV0LXBhZGRpbmctdG9wKSB2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKTtmb250LXNpemU6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMS4yNSk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMS4yNSk7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1jdXJyZW5jeS1zaWdue3dpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjEuNSl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWN1cnJlbmN5LXNpZ24uZWUtY3VyU2lnbi0ye2ZvbnQtc2l6ZTpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSoxLjEyNSk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMS4xMjUpO3dpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjIuMil9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWN1cnJlbmN5LXNpZ24uZWUtY3VyU2lnbi0ze2ZvbnQtc2l6ZTpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSoxLjA1KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSoxLjA1KTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSoyLjgpfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1jdXJyZW5jeS1zaWduLmVlLWN1clNpZ24tNHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTt3aWR0aDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSozLjIpfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1wZXJjZW50LXNpZ257dGV4dC1hbGlnbjpsZWZ0O3dpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjEuNSl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWN1cnJlbmN5LXNpZ24uZWUtc2lnbi1iZWZvcmV7ZmxvYXQ6bGVmdDt0ZXh0LWFsaWduOnJpZ2h0fS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1jdXJyZW5jeS1zaWduLmVlLXNpZ24tYWZ0ZXJ7ZmxvYXQ6cmlnaHQ7dGV4dC1hbGlnbjpsZWZ0fS5lZS10d28tY29sdW1uLWFkbWluIC5hbGlnbi1pdGVtcy1zbS1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5lZS10d28tY29sdW1uLWFkbWluIC5kLWZsZXh7ZGlzcGxheTpmbGV4fS5lZS10d28tY29sdW1uLWFkbWluIC5idG57ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6NDAwO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWluLXdpZHRoOjU1cHg7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7cGFkZGluZzp2YXIoLS1lZS1pbnB1dC1wYWRkaW5nLXRvcCkgdmFyKC0tZWUtaW5wdXQtcGFkZGluZy1zaWRlcykgdmFyKC0tZWUtaW5wdXQtcGFkZGluZy1ib3R0b20pO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWUtYm9yZGVyLXJhZGl1cy1zbWFsbCk7dHJhbnNpdGlvbjpjb2xvciAuMDVzIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgLjA1cyBlYXNlLWluLW91dCxib3JkZXItY29sb3IgLjA1cyBlYXNlLWluLW91dCxib3gtc2hhZG93IC4wNXMgZWFzZS1pbi1vdXR9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ0bi1ncm91cC5vZmZzZXQtc20tMnttaW4td2lkdGg6MjI0cHh9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ0bi1ncm91cCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwLXZlcnRpY2Fse3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lZS10d28tY29sdW1uLWFkbWluIC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0biwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwPi5idG57cG9zaXRpb246cmVsYXRpdmU7ZmxleDowIDEgYXV0b30uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwLXZlcnRpY2FsIC5idG4rLmJ0biwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwLXZlcnRpY2FsIC5idG4rLmJ0bi1ncm91cCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwLXZlcnRpY2FsIC5idG4tZ3JvdXArLmJ0biwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwLXZlcnRpY2FsIC5idG4tZ3JvdXArLmJ0bi1ncm91cCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwIC5idG4rLmJ0biwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwIC5idG4rLmJ0bi1ncm91cCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwIC5idG4tZ3JvdXArLmJ0biwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwIC5idG4tZ3JvdXArLmJ0bi1ncm91cHttYXJnaW4tbGVmdDotMXB4fS5lZS10d28tY29sdW1uLWFkbWluIC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bjpob3ZlciwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwPi5idG46aG92ZXJ7ei1pbmRleDoxfS5lZS10d28tY29sdW1uLWFkbWluIC5idG4tZ3JvdXA+LmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ0bi1ncm91cD4uYnRuOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwPi5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk+LmJ0biwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwPi5idG46bm90KDpmaXJzdC1jaGlsZCl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwPi5idG46Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuLWdyb3VwIGxhYmVsLmJ0bnttYXJnaW46MH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnRuOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5lZS10d28tY29sdW1uLWFkbWluIC5idG4tcHJpbWFyeXtjb2xvcjppbmhlcml0O2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWVlLWJvcmRlci1jb2xvcil9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ0bi1wcmltYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuc2hvdz4uYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWVlLXRleHQtb24tcHJpbWFyeSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTtib3JkZXItY29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ0bi1wcmltYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZXtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLXByaW1hcnktaGlnaC1jb250cmFzdCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5LWhpZ2gtY29udHJhc3QpO2JvcmRlci1jb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5LWhpZ2gtY29udHJhc3QpfS5lZS10d28tY29sdW1uLWFkbWluIC5idG4tcHJpbWFyeSBpbnB1dHtkaXNwbGF5Om5vbmU7dmlzaWJpbGl0eTpoaWRkZW59LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWNoZWNrYm94LWxhYmVsLWFmdGVyLmFjdGl2ZSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtcmFkaW8tbGFiZWwtYWZ0ZXIuYWN0aXZle2ZvbnQtd2VpZ2h0OjcwMH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZXNwcmVzc28taW5wdXQtaGVscC10ZXh0e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1sb3ctY29udHJhc3QpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc3R5bGU6aXRhbGljO2xpbmUtaGVpZ2h0OmluaGVyaXQ7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi10aW55KSAwO3doaXRlLXNwYWNlOnByZS13cmFwfS5lZS10d28tY29sdW1uLWFkbWluIC5lc3ByZXNzby1pbnB1dC1oZWxwLXRleHQubGVmdHt0ZXh0LWFsaWduOnJpZ2h0fS5lZS10d28tY29sdW1uLWFkbWluIC5lc3ByZXNzby1pbnB1dC1oZWxwLXRleHQ+cHtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O21hcmdpbjowfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLXNhdmUtY2FuY2VsLWJ1dHRvbnMtZGl2e3BhZGRpbmctdG9wOnZhcigtLWVlLXBhZGRpbmctc21hbGwpO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6OTl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0tYnV0dG9uLXJvdy5lZS1mb3JtLXJvdzpub3QobGkpe2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IHdyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tc21hbGwpIDA7dGV4dC1hbGlnbjpyaWdodH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnV0dG9uLXByaW1hcnkrLmJ1dHRvbi1wcmltYXJ5LC5lZS10d28tY29sdW1uLWFkbWluIC5idXR0b24tcHJpbWFyeSsuYnV0dG9uLXNlY29uZGFyeSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnV0dG9uLXNlY29uZGFyeSsuYnV0dG9uLXByaW1hcnksLmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ1dHRvbi1zZWNvbmRhcnkrLmJ1dHRvbi1zZWNvbmRhcnksLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0tYnV0dG9uKy5lZS1mb3JtLWJ1dHRvbnttYXJnaW4tbGVmdDp2YXIoLS1lZS1tYXJnaW4tYmlnKTttYXJnaW4tcmlnaHQ6MH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtaW5wdXQtd2lkdGgtMXtmbGV4OjAgMCA4LjMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzJX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtaW5wdXQtd2lkdGgtMntmbGV4OjAgMCAxNi42NjY2NjclO21heC13aWR0aDoxNi42NjY2NjclfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1pbnB1dC13aWR0aC0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1pbnB1dC13aWR0aC00e2ZsZXg6MCAwIDMzJTttYXgtd2lkdGg6MzMlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1pbnB1dC13aWR0aC01e2ZsZXg6MCAwIDQxLjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NyV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWlucHV0LXdpZHRoLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLXRvZ2dsZS1pbnB1dHtwYWRkaW5nLXRvcDp2YXIoLS1lZS1pbnB1dC1wYWRkaW5nLXRvcCk7cGFkZGluZy1ib3R0b206dmFyKC0tZWUtaW5wdXQtcGFkZGluZy1ib3R0b20pO21hcmdpbi1ib3R0b206MDtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDp2YXIoLS1lZS1saW5lLWhlaWdodC1tb2RpZmllcil9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLXRvZ2dsZS1pbnB1dCAqe2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtdG9nZ2xlLWlucHV0IC5jb21wb25lbnRzLXRvZ2dsZS1jb250cm9sX19sYWJlbHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO3dpZHRoOmNhbGMoMTAwJSAtIDQwcHgpfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1jaGVja2JveC10b2dnbGUgaW5wdXRbdHlwZT1jaGVja2JveF17Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWUtYm9yZGVyLXJhZGl1cy1zbWFsbCk7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoyMXB4O21hcmdpbi1yaWdodDp2YXIoLS1lZS1tYXJnaW4tc21hbGxlcik7dHJhbnNpdGlvbjpub25lO3dpZHRoOjIxcHh9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWNoZWNrYm94LXRvZ2dsZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vke2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7Ym9yZGVyLWNvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnkpO2NvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnkpfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1jaGVja2JveC10b2dnbGUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpiZWZvcmV7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1wcmltYXJ5KTtjb250ZW50OlwiXFxmMTQ3XCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bGVmdDtmb250Om5vcm1hbCAyN3B4LzEgZGFzaGljb25zO21hcmdpbjotM3B4IDAgMCAtNHB4O3dpZHRoOjIxcHg7c3BlYWs6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7LXdlYmtpdC1mb250LXNtb290aGluZzpzdWJwaXhlbC1hbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLXN3aXRjaC10b2dnbGUgLmNvbXBvbmVudHMtZm9ybS10b2dnbGV7bWFyZ2luLXRvcDozcHh9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWhpZGRlbi1sYWJlbHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1hZnRlci1pbnB1dC13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtYWZ0ZXItaW5wdXQtZGl2e2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OnZhcigtLWVlLW1hcmdpbi1zbWFsbCl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbXBvbmVudHMtdG9vbHRpcHtjb2xvcjp2YXIoLS1lZS1jb2xvci13aGl0ZSk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKSFpbXBvcnRhbnQ7Zm9udC13ZWlnaHQ6NDAwIWltcG9ydGFudDtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcikhaW1wb3J0YW50fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDoxMDI0cHgpey5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLXNlY3Rpb246Zmlyc3Qtb2YtdHlwZXttYXJnaW46dmFyKC0tZWUtbWFyZ2luLXNtYWxsKSAwIDB9LmVlLXR3by1jb2x1bW4tYWRtaW4gLnB4LTMgLmVlLWZvcm0tcm93Om5vdChsaSl7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5lZS10d28tY29sdW1uLWFkbWluIC5wbC0zLC5lZS10d28tY29sdW1uLWFkbWluIC5weC0ze3BhZGRpbmctbGVmdDp2YXIoLS1lZS1wYWRkaW5nLXNtYWxsKX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAucHItMywuZWUtdHdvLWNvbHVtbi1hZG1pbiAucHgtM3twYWRkaW5nLXJpZ2h0OnZhcigtLWVlLXBhZGRpbmctc21hbGwpfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc4MnB4KXsuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1zZWN0aW9uOmZpcnN0LW9mLXR5cGV7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi10aW55KSAwIDB9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAxcHgpey5lZS10d28tY29sdW1uLWFkbWluIC5wbC0zLC5lZS10d28tY29sdW1uLWFkbWluIC5weC0ze3BhZGRpbmctbGVmdDp2YXIoLS1lZS1wYWRkaW5nLXNtYWxsZXIpfS5lZS10d28tY29sdW1uLWFkbWluIC5wci0zLC5lZS10d28tY29sdW1uLWFkbWluIC5weC0ze3BhZGRpbmctcmlnaHQ6dmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29tcG9uZW50cy1wYW5lbF9fYm9keS5pcy1vcGVuZWR7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tMSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAuY29sLXNtLTFoLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tMXEsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLmNvbC1zbS0yLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tMi0zcSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAuY29sLXNtLTJoLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tMywuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAuY29sLXNtLTNoLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tNCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAuY29sLXNtLTUsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLmNvbC1zbS02LC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tNywuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAuY29sLXNtLTgsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLmNvbC1zbS05LC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20tMTAsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLmNvbC1zbS0xMSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAuY29sLXNtLTEyLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5jb2wtc20taHtmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlO3dpZHRoOjEwMCV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLm9mZnNldC1zbS0xLC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5vZmZzZXQtc20tMiwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAub2Zmc2V0LXNtLTMsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLm9mZnNldC1zbS00LC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5vZmZzZXQtc20tNSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAub2Zmc2V0LXNtLTYsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLm9mZnNldC1zbS03LC5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWluZm8tcm93IC5vZmZzZXQtc20tOCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAub2Zmc2V0LXNtLTksLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0taW5mby1yb3cgLm9mZnNldC1zbS0xMCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtZm9ybS1pbmZvLXJvdyAub2Zmc2V0LXNtLWh7bWFyZ2luOjB9fUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NDgxcHgpey5lZS10d28tY29sdW1uLWFkbWluIC5weC0zIC5lZS1mb3JtLXJvdzpub3QobGkpe21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLWh7bWFyZ2luLWxlZnQ6NC4xNjY2NjclfS5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tMXttYXJnaW4tbGVmdDo4LjMzMzMzMyV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NyV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS0ze21hcmdpbi1sZWZ0OjI1JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzJX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY3JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLTZ7bWFyZ2luLWxlZnQ6NTAlfS5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMlfS5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tOHttYXJnaW4tbGVmdDo2Ni42NjY2NjclfS5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tOXttYXJnaW4tbGVmdDo3NSV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMlfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTFoLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMXEsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0yLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMi0zcSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTJoLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMywuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTNoLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tNCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTUsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS02LC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tNywuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTgsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS05LC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMTAsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0xMSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTEyLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20taHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MXB4O3BhZGRpbmc6MXB4IHZhcigtLWVlLXBhZGRpbmctc21hbGxlcil9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS1oe2ZsZXg6MCAwIDQuMTY2NjY3JTttYXgtd2lkdGg6NC4xNjY2NjclO3doaXRlLXNwYWNlOm5vd3JhcH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTF7ZmxleDowIDAgOC4zMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMyU7d2hpdGUtc3BhY2U6bm93cmFwfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMXF7ZmxleDowIDAgMTAuNDE2NjY3JTttYXgtd2lkdGg6MTAuNDE2NjY3JTt3aGl0ZS1zcGFjZTpub3dyYXB9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0xaHtmbGV4OjAgMCAxMi41JTttYXgtd2lkdGg6MTIuNSU7d2hpdGUtc3BhY2U6bm93cmFwfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMntmbGV4OjAgMCAxNi42NjY2NjclO21heC13aWR0aDoxNi42NjY2NjclfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMmh7ZmxleDowIDAgMjAuODMzMzMzJTttYXgtd2lkdGg6MjAuODMzMzMzJX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTItM3F7ZmxleDowIDAgMjIuOTE2NjY3JTttYXgtd2lkdGg6MjIuOTE2NjY3JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0zaHs7ZmxleDowIDAgMjkuMTY2NjY3JTttYXgtd2lkdGg6MjkuMTY2NjY3JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTR7ZmxleDowIDAgMzMuMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzJX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTV7ZmxleDowIDAgNDEuNjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY3JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS03e2ZsZXg6MCAwIDU4LjMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMyV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS03aHtmbGV4OjAgMCA2Mi41JTttYXgtd2lkdGg6NjIuNTMlfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tOHtmbGV4OjAgMCA2Ni42NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjclfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMyV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0xMXtmbGV4OjAgMCA5MS42NjY2NjclO21heC13aWR0aDo5MS42NjY2NjclfS5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVlLXR3by1jb2x1bW4tYWRtaW4gLnBsLTMsLmVlLXR3by1jb2x1bW4tYWRtaW4gLnB4LTN7cGFkZGluZy1sZWZ0OnZhcigtLWVlLXBhZGRpbmctdGlueSl9LmVlLXR3by1jb2x1bW4tYWRtaW4gLnByLTMsLmVlLXR3by1jb2x1bW4tYWRtaW4gLnB4LTN7cGFkZGluZy1yaWdodDp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLXJvdywuZWUtdHdvLWNvbHVtbi1hZG1pbiAucHgtMyAuZWUtZm9ybS1yb3c6bm90KGxpKXtmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi1oZWlnaHQ6dW5zZXR9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0xLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMWgsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0xcSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTIsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0yLTNxLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMmgsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0zLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tM2gsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS00LC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tNSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTYsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS03LC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tOCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTksLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS0xMCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuY29sLXNtLTExLC5lZS10d28tY29sdW1uLWFkbWluIC5jb2wtc20tMTIsLmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1zbS1oe21hcmdpbjowO21heC13aWR0aDoxMDAlO3BhZGRpbmc6MXB4O3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDphdXRvfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWJ1dHRvbi1yb3cgLmNvbC1zbS0xMnthbGlnbi1pdGVtczpmbGV4LWVuZDtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW46MDttYXgtd2lkdGg6MTAwJTtwYWRkaW5nOjFweDt3aGl0ZS1zcGFjZTpub3JtYWx9LmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS0xLC5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tMiwuZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLTMsLmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS00LC5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tNSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLTYsLmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS03LC5lZS10d28tY29sdW1uLWFkbWluIC5vZmZzZXQtc20tOCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLTksLmVlLXR3by1jb2x1bW4tYWRtaW4gLm9mZnNldC1zbS0xMCwuZWUtdHdvLWNvbHVtbi1hZG1pbiAub2Zmc2V0LXNtLWh7bWFyZ2luOjB9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmNvbC1mb3JtLWxhYmVsLC5lZS10d28tY29sdW1uLWFkbWluIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7cGFkZGluZzowO3RleHQtYWxpZ246bGVmdDt3aWR0aDoxMDAlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1pbnB1dC13aWR0aC0xe2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1pbnB1dC13aWR0aC0ye2ZsZXg6MCAwIDMzLjMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMyV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWlucHV0LXdpZHRoLTN7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWlucHV0LXdpZHRoLTR7ZmxleDowIDAgNjYuNjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY3JX0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuZWUtaW5wdXQtd2lkdGgtNXtmbGV4OjAgMCA4My4zMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMlfS5lZS10d28tY29sdW1uLWFkbWluIC5lZS1pbnB1dC13aWR0aC02e2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEwMCV9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0tYnV0dG9ue3doaXRlLXNwYWNlOm5vcm1hbH0uZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnV0dG9uLXByaW1hcnkrLmJ1dHRvbi1wcmltYXJ5LC5lZS10d28tY29sdW1uLWFkbWluIC5idXR0b24tcHJpbWFyeSsuYnV0dG9uLXNlY29uZGFyeSwuZWUtdHdvLWNvbHVtbi1hZG1pbiAuYnV0dG9uLXNlY29uZGFyeSsuYnV0dG9uLXByaW1hcnksLmVlLXR3by1jb2x1bW4tYWRtaW4gLmJ1dHRvbi1zZWNvbmRhcnkrLmJ1dHRvbi1zZWNvbmRhcnksLmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0tYnV0dG9uKy5lZS1mb3JtLWJ1dHRvbnttYXJnaW4tbGVmdDp2YXIoLS1lZS1tYXJnaW4tc21hbGwpO21hcmdpbi1yaWdodDowfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzYwcHgpey5lZS10d28tY29sdW1uLWFkbWluIC5lZS1mb3JtLWJ1dHRvbi1yb3cgLmNvbC1zbS0xMntmbGV4LWZsb3c6Y29sdW1uIHdyYXB9LmVlLXR3by1jb2x1bW4tYWRtaW4gLmVlLWZvcm0tYnV0dG9ue21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKTt0ZXh0LWFsaWduOmNlbnRlcjttYXgtd2lkdGg6LXdlYmtpdC1maXQtY29udGVudDttYXgtd2lkdGg6LW1vei1maXQtY29udGVudDttYXgtd2lkdGg6Zml0LWNvbnRlbnR9fSIsIiNlZS1ibG9jay1ldmVudC1hdHRlbmRlZXMuZXZlbnQtYXR0ZW5kZWVzIHVse2xpc3Qtc3R5bGUtdHlwZTpub25lfSNlZS1ibG9jay1ldmVudC1hdHRlbmRlZXMgLmNvbnRhY3QtaW1hZ2Utd3JhcC1kaXYsI2VlLWJsb2NrLWV2ZW50LWF0dGVuZGVlcyBwe2Rpc3BsYXk6aW5saW5lLWJsb2NrfSNlZS1ibG9jay1ldmVudC1hdHRlbmRlZXMgLmNvbnRhY3QtYXZhdGFyLWltZ3ttYXJnaW46LjI1ZW0gMWVtIC4yNWVtIDA7dmVydGljYWwtYWxpZ246bWlkZGxlfSJdLCJzb3VyY2VSb290IjoiIn0=*/ \ No newline at end of file diff --git a/assets/dist/eventespresso-core-css-default.37cc630a3d6f4c1d429c.dist.css b/assets/dist/eventespresso-core-css-default.13e5535cbac5e373d3f6.dist.css similarity index 99% rename from assets/dist/eventespresso-core-css-default.37cc630a3d6f4c1d429c.dist.css rename to assets/dist/eventespresso-core-css-default.13e5535cbac5e373d3f6.dist.css index a80e99536ab..c3fef3aa8f9 100644 --- a/assets/dist/eventespresso-core-css-default.37cc630a3d6f4c1d429c.dist.css +++ b/assets/dist/eventespresso-core-css-default.13e5535cbac5e373d3f6.dist.css @@ -7,4 +7,4 @@ :root{--ee-letter-spacing-font-size-micro:2px;--ee-letter-spacing-font-size-tiny:1px;--ee-letter-spacing-font-size-huge:-1px;--ee-letter-spacing-font-size-extreme:-2px;--ee-word-spacing-font-size-micro:4px;--ee-word-spacing-font-size-tiny:2px;--ee-word-spacing-font-size-smaller:1px}.ee-focus-priority-1{color:var(--ee-default-text-color-super-low-contrast);font-size:var(--ee-font-size-extreme);font-weight:bolder;letter-spacing:var(--ee-letter-spacing-font-size-extreme);line-height:calc(var(--ee-line-height-modifier)*0.75)}.ee-focus-priority-2{color:var(--ee-default-text-color-low-contrast);font-size:var(--ee-font-size-huge);font-weight:700;letter-spacing:var(--ee-letter-spacing-font-size-huge);line-height:calc(var(--ee-line-height-modifier)*0.875)}.ee-focus-priority-3{font-size:var(--ee-font-size-bigger)}.ee-focus-priority-3,.ee-focus-priority-4{line-height:var(--ee-line-height-modifier)}.ee-focus-priority-4{font-size:var(--ee-font-size-big)}.ee-focus-priority-5{font-size:var(--ee-font-size-default);line-height:var(--ee-line-height-modifier)}.ee-focus-priority-6{font-size:var(--ee-font-size-small)}.ee-focus-priority-6,.ee-focus-priority-7{color:var(--ee-default-text-color-high-contrast);line-height:var(--ee-line-height-modifier)}.ee-focus-priority-7{font-size:var(--ee-font-size-smaller);word-spacing:var(--ee-word-spacing-font-size-smaller)}.ee-focus-priority-8{font-size:var(--ee-font-size-tiny);letter-spacing:var(--ee-letter-spacing-font-size-tiny);line-height:calc(var(--ee-line-height-modifier)*1.125);word-spacing:var(--ee-word-spacing-font-size-tiny)}.ee-focus-priority-8,.ee-focus-priority-9{color:var(--ee-default-text-color-super-high-contrast)}.ee-focus-priority-9{font-size:var(--ee-font-size-micro);letter-spacing:var(--ee-letter-spacing-font-size-micro);line-height:calc(var(--ee-line-height-modifier)*1.25);word-spacing:var(--ee-word-spacing-font-size-micro)}@media screen and (max-width:782px){.ee-focus-priority-1{font-size:var(--ee-font-size-huge)}.ee-focus-priority-2{font-size:var(--ee-font-size-bigger)}.ee-focus-priority-3{font-size:var(--ee-font-size-big)}.ee-focus-priority-4{font-size:var(--ee-font-size-default)}.ee-focus-priority-5{font-size:var(--ee-font-size-small)}.ee-focus-priority-6{font-size:var(--ee-font-size-smaller)}.ee-focus-priority-7,.ee-focus-priority-8{font-size:var(--ee-font-size-tiny)}}@media screen and (max-width:600px){.ee-focus-priority-1{font-size:var(--ee-font-size-bigger)}.ee-focus-priority-2{font-size:var(--ee-font-size-big)}.ee-focus-priority-3{font-size:var(--ee-font-size-default)}.ee-focus-priority-4{font-size:var(--ee-font-size-small)}.ee-focus-priority-5{font-size:var(--ee-font-size-smaller)}.ee-focus-priority-6,.ee-focus-priority-7,.ee-focus-priority-8{font-size:var(--ee-font-size-tiny)}} :root{--ee-box-shadow-tiny:0 1px 2px rgba(0,0,0,0.6);--ee-box-shadow-tiny-diffuse:0 0 1px rgba(0,0,0,0.2);--ee-box-shadow-small:0 2px 4px rgba(0,0,0,0.6),0 4px 8px 4px rgba(0,0,0,0.1);--ee-box-shadow-small-diffuse:0 1px 2px rgba(0,0,0,0.2);--ee-box-shadow-default:0 3px 6px rgba(0,0,0,0.6),0 8px 16px 8px rgba(0,0,0,0.05);--ee-box-shadow-default-diffuse:0 1px 3px rgba(0,0,0,0.2);--ee-box-shadow-big:0 5px 10px rgba(0,0,0,0.6),0 0 24px 16px rgba(0,0,0,0.05);--ee-box-shadow-big-diffuse:0 2px 5px rgba(0,0,0,0.2);--ee-box-shadow-wp-icon-btn-hover:inset 0 0 0 1px var(--ee-color-grey-10),inset 0 0 0 2px var(--ee-color-white),0 1px 1px rgba(25,30,35,0.2);--ee-box-shadow-wp-icon-btn-focus:inset 0 0 0 1px var(--ee-color-grey-5),inset 0 0 0 2px var(--ee-color-white);--ee-text-shadow-inset:-1px -1px 0 rgba(0,0,0,0.15);--ee-text-shadow-inset-light:-1px -1px 0 hsla(0,0%,100%,0.15);--ee-text-shadow-small:0 1px 2px rgba(0,0,0,0.5);--ee-text-shadow-default:0 2px 4px rgba(0,0,0,0.375);--ee-text-shadow-big:0 3px 6px rgba(0,0,0,0.25)} -/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvc3R5bGVzL3RoZW1lcy9kZWZhdWx0L2NvbG9yLXZhcmlhYmxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy90aGVtZXMvZGVmYXVsdC9zaXplLXZhcmlhYmxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2J1dHRvbnMuY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvcm9vdC9jb250YWluZXJzLmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvc3R5bGVzL3Jvb3QvZWZmZWN0cy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2VudGl0eS1zdGF0dXMuY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvcm9vdC9mb250LXN0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L3NoYWRvd3MuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sMkJBQTJCLCtDQUErQyx5Q0FBeUMsd0NBQXdDLDhDQUE4QywwQkFBMEIsaURBQWlELDJDQUEyQyx1Q0FBdUMsZ0RBQWdELDZCQUE2QixpREFBaUQsMkNBQTJDLDBDQUEwQyxnREFBZ0QsK0JBQStCLGdEQUFnRCwwQ0FBMEMsNENBQTRDLGtEQUFrRCwwQkFBMEIsOENBQThDLHdDQUF3Qyx1Q0FBdUMsNkNBQTZDLHlCQUF5QixnREFBZ0QsdUNBQXVDLHlDQUF5QywrQ0FBK0MsZ0NBQWdDLG9EQUFvRCw4Q0FBOEMsNkNBQTZDLGdEQUFnRCwyQkFBMkIsMEJBQTBCLDBCQUEwQiw0QkFBNEIsMEJBQTBCLDRC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QixrQ0FBa0MscUJBQXFCLHNDQUFzQyxxQkFBcUIsb0NBQW9DLHFCQUFxQixzQ0FBc0MsK0RBQStELG9DO0FDQW5yRixNQUFNLCtDQUErQyxxREFBcUQsOEVBQThFLHdEQUF3RCxrRkFBa0YsMERBQTBELDhFQUE4RSxzREFBc0QsNklBQTZJLCtHQUErRyxvREFBb0QsOERBQThELGlEQUFpRCxxREFBcUQsZ0QiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1jb3JlLWNzcy1kZWZhdWx0LjM3Y2M2MzBhM2Q2ZjRjMWQ0MjljLmRpc3QuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOnJvb3R7LS1lZS1jb2xvci1wcmltYXJ5OiMyOTdhYmM7LS1lZS1jb2xvci1wcmltYXJ5LXN1cGVyLWhpZ2gtY29udHJhc3Q6IzAwM2E3YzstLWVlLWNvbG9yLXByaW1hcnktaGlnaC1jb250cmFzdDojMDk1YTljOy0tZWUtY29sb3ItcHJpbWFyeS1sb3ctY29udHJhc3Q6IzQ5OWFkYzstLWVlLWNvbG9yLXByaW1hcnktc3VwZXItbG93LWNvbnRyYXN0OiM2OWJhZmM7LS1lZS10ZXh0LW9uLXByaW1hcnk6I2ZmZjstLWVlLXRleHQtb24tcHJpbWFyeS1zdXBlci1oaWdoLWNvbnRyYXN0OiM5YmQ1ZmY7LS1lZS10ZXh0LW9uLXByaW1hcnktaGlnaC1jb250cmFzdDojZjdmZmZmOy0tZWUtdGV4dC1vbi1wcmltYXJ5LWxvdy1jb250cmFzdDojMDAwOy0tZWUtdGV4dC1vbi1wcmltYXJ5LXN1cGVyLWxvdy1jb250cmFzdDojMDAyMzY1Oy0tZWUtY29sb3Itc2Vjb25kYXJ5OiM5MWFiMzA7LS1lZS1jb2xvci1zZWNvbmRhcnktc3VwZXItaGlnaC1jb250cmFzdDojNTE2YjAwOy0tZWUtY29sb3Itc2Vjb25kYXJ5LWhpZ2gtY29udHJhc3Q6IzcxOGIxMDstLWVlLWNvbG9yLXNlY29uZGFyeS1sb3ctY29udHJhc3Q6I2IxY2I1MDstLWVlLWNvbG9yLXNlY29uZGFyeS1zdXBlci1sb3ctY29udHJhc3Q6I2QxZWI3MDstLWVlLXRleHQtb24tc2Vjb25kYXJ5OiMwMDFhMDA7LS1lZS10ZXh0LW9uLXNlY29uZGFyeS1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLXNlY29uZGFyeS1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLXNlY29uZGFyeS1sb3ctY29udHJhc3Q6IzFmMzkwMDstLWVlLXRleHQtb24tc2Vjb25kYXJ5LXN1cGVyLWxvdy1jb250cmFzdDojMzQ0ZTAwOy0tZWUtY29sb3ItYWNjZW50OiNkZTU4ODI7LS1lZS1jb2xvci1hY2NlbnQtc3VwZXItaGlnaC1jb250cmFzdDojOWUxODQyOy0tZWUtY29sb3ItYWNjZW50LWhpZ2gtY29udHJhc3Q6I2JlMzg2MjstLWVlLWNvbG9yLWFjY2VudC1sb3ctY29udHJhc3Q6I2ZlNzhhMjstLWVlLWNvbG9yLWFjY2VudC1zdXBlci1sb3ctY29udHJhc3Q6I2ZmOThjMjstLWVlLXRleHQtb24tYWNjZW50OiNmZmY7LS1lZS10ZXh0LW9uLWFjY2VudC1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmVjZmY7LS1lZS10ZXh0LW9uLWFjY2VudC1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLWFjY2VudC1sb3ctY29udHJhc3Q6IzNkMDAwMDstLWVlLXRleHQtb24tYWNjZW50LXN1cGVyLWxvdy1jb250cmFzdDojNWUwMDIxOy0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yOiM1OTU5NTk7LS1lZS1kZWZhdWx0LXRleHQtY29sb3Itc3VwZXItaGlnaC1jb250cmFzdDojMTkxOTE5Oy0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yLWhpZ2gtY29udHJhc3Q6IzM5MzkzOTstLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1sb3ctY29udHJhc3Q6Izc5Nzk3OTstLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1zdXBlci1sb3ctY29udHJhc3Q6Izk5OTstLWVlLWJhY2tncm91bmQtY29sb3I6I2ZmZjstLWVlLWJvcmRlci1jb2xvcjojOTY5Njk2Oy0tZWUtY29sb3ItZ3JleS0xOiMxNjE2MTY7LS1lZS10ZXh0LW9uLWdyZXktMTojYTFhMWExOy0tZWUtY29sb3ItZ3JleS0yOiMyOTI5Mjk7LS1lZS10ZXh0LW9uLWdyZXktMjojYjRiNGI0Oy0tZWUtY29sb3ItZ3JleS0zOiMzYzNjM2M7LS1lZS10ZXh0LW9uLWdyZXktMzojY2VjZWNlOy0tZWUtY29sb3ItZ3JleS00OiM0ZjRmNGY7LS1lZS10ZXh0LW9uLWdyZXktNDojZWVlOy0tZWUtY29sb3ItZ3JleS01OiM2MjYyNjI7LS1lZS10ZXh0LW9uLWdyZXktNTojZmZmOy0tZWUtY29sb3ItZ3JleS02OiM3NTc1NzU7LS1lZS10ZXh0LW9uLWdyZXktNjojZmZmOy0tZWUtY29sb3ItZ3JleS03OiM4ODg7LS1lZS10ZXh0LW9uLWdyZXktNzojZmZmOy0tZWUtY29sb3ItZ3JleS04OiM5YjliOWI7LS1lZS10ZXh0LW9uLWdyZXktODojMGMwYzBjOy0tZWUtY29sb3ItZ3JleS05OiNhZWFlYWU7LS1lZS10ZXh0LW9uLWdyZXktOTojMjMyMzIzOy0tZWUtY29sb3ItZ3JleS0xMDojYzFjMWMxOy0tZWUtdGV4dC1vbi1ncmV5LTEwOiMzMzM7LS1lZS1jb2xvci1ncmV5LTExOiNkNGQ0ZDQ7LS1lZS10ZXh0LW9uLWdyZXktMTE6IzNmM2YzZjstLWVlLWNvbG9yLWdyZXktMTI6I2U3ZTdlNzstLWVlLXRleHQtb24tZ3JleS0xMjojNGI0YjRiOy0tZWUtY29sb3ItZ3JleS0xMzojZWRlZGVkOy0tZWUtdGV4dC1vbi1ncmV5LTEzOiM0ZTRlNGU7LS1lZS1jb2xvci1ncmV5LTE0OiNmM2YzZjM7LS1lZS10ZXh0LW9uLWdyZXktMTQ6IzUyNTI1MjstLWVlLWNvbG9yLWdyZXktMTU6I2Y5ZjlmOTstLWVlLXRleHQtb24tZ3JleS0xNTojNTU1Oy0tZWUtY29sb3ItbWFnZW50YTojOTYyNTU3Oy0tZWUtY29sb3ItbWFnZW50YS1zdXBlci1oaWdoLWNvbnRyYXN0OiM1NjAwMTc7LS1lZS1jb2xvci1tYWdlbnRhLWhpZ2gtY29udHJhc3Q6Izc2MDUzNzstLWVlLWNvbG9yLW1hZ2VudGEtbG93LWNvbnRyYXN0OiNiNjQ1Nzc7LS1lZS1jb2xvci1tYWdlbnRhLXN1cGVyLWxvdy1jb250cmFzdDojZDY2NTk3Oy0tZWUtdGV4dC1vbi1tYWdlbnRhOiNmZWY7LS1lZS10ZXh0LW9uLW1hZ2VudGEtc3VwZXItaGlnaC1jb250cmFzdDojZjA5YWIxOy0tZWUtdGV4dC1vbi1tYWdlbnRhLWhpZ2gtY29udHJhc3Q6I2ZmYjVlNzstLWVlLXRleHQtb24tbWFnZW50YS1sb3ctY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tbWFnZW50YS1zdXBlci1sb3ctY29udHJhc3Q6IzAwMDstLWVlLWNvbG9yLXJlZDojYjAwZTEzOy0tZWUtY29sb3ItcmVkLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzcwMDAwMDstLWVlLWNvbG9yLXJlZC1oaWdoLWNvbnRyYXN0OiM5MDAwMDA7LS1lZS1jb2xvci1yZWQtbG93LWNvbnRyYXN0OiNkMDJlMzM7LS1lZS1jb2xvci1yZWQtc3VwZXItbG93LWNvbnRyYXN0OiNmMDRlNTM7LS1lZS10ZXh0LW9uLXJlZDojZmZmYmZmOy0tZWUtdGV4dC1vbi1yZWQtc3VwZXItaGlnaC1jb250cmFzdDojZmZhZGFkOy0tZWUtdGV4dC1vbi1yZWQtaGlnaC1jb250cmFzdDojZmZkMmQyOy0tZWUtdGV4dC1vbi1yZWQtbG93LWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLXJlZC1zdXBlci1sb3ctY29udHJhc3Q6I2ZmZjstLWVlLWNvbG9yLWhvdC1waW5rOiNkZTU4ODI7LS1lZS1jb2xvci1ob3QtcGluay1zdXBlci1oaWdoLWNvbnRyYXN0OiM5ZTE4NDI7LS1lZS1jb2xvci1ob3QtcGluay1oaWdoLWNvbnRyYXN0OiNiZTM4NjI7LS1lZS1jb2xvci1ob3QtcGluay1sb3ctY29udHJhc3Q6I2ZlNzhhMjstLWVlLWNvbG9yLWhvdC1waW5rLXN1cGVyLWxvdy1jb250cmFzdDojZmY5OGMyOy0tZWUtdGV4dC1vbi1ob3QtcGluazojZmZmOy0tZWUtdGV4dC1vbi1ob3QtcGluay1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmVjZmY7LS1lZS10ZXh0LW9uLWhvdC1waW5rLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24taG90LXBpbmstbG93LWNvbnRyYXN0OiMzZDAwMDA7LS1lZS10ZXh0LW9uLWhvdC1waW5rLXN1cGVyLWxvdy1jb250cmFzdDojNWUwMDIxOy0tZWUtY29sb3ItcGluazojZWQ4ZDk5Oy0tZWUtY29sb3ItcGluay1zdXBlci1oaWdoLWNvbnRyYXN0OiNhZDRkNTk7LS1lZS1jb2xvci1waW5rLWhpZ2gtY29udHJhc3Q6I2NkNmQ3OTstLWVlLWNvbG9yLXBpbmstbG93LWNvbnRyYXN0OiNmZmFkYjk7LS1lZS1jb2xvci1waW5rLXN1cGVyLWxvdy1jb250cmFzdDojZmZjZGQ5Oy0tZWUtdGV4dC1vbi1waW5rOiM0NjAwMDA7LS1lZS10ZXh0LW9uLXBpbmstc3VwZXItaGlnaC1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1waW5rLWhpZ2gtY29udHJhc3Q6IzAwMDstLWVlLXRleHQtb24tcGluay1sb3ctY29udHJhc3Q6IzY2MTQyMDstLWVlLXRleHQtb24tcGluay1zdXBlci1sb3ctY29udHJhc3Q6IzY2MzQ0MDstLWVlLWNvbG9yLWNvcmFsOiNlZDZkNWE7LS1lZS1jb2xvci1jb3JhbC1zdXBlci1oaWdoLWNvbnRyYXN0OiNhZDJkMWE7LS1lZS1jb2xvci1jb3JhbC1oaWdoLWNvbnRyYXN0OiNjZDRkM2E7LS1lZS1jb2xvci1jb3JhbC1sb3ctY29udHJhc3Q6I2ZmOGQ3YTstLWVlLWNvbG9yLWNvcmFsLXN1cGVyLWxvdy1jb250cmFzdDojZmZhZDlhOy0tZWUtdGV4dC1vbi1jb3JhbDojMDAwOy0tZWUtdGV4dC1vbi1jb3JhbC1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLWNvcmFsLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tY29yYWwtbG93LWNvbnRyYXN0OiM0ZjAwMDA7LS1lZS10ZXh0LW9uLWNvcmFsLXN1cGVyLWxvdy1jb250cmFzdDojNjYxNDAxOy0tZWUtY29sb3Itb3JhbmdlOiNlZTdlMDQ7LS1lZS1jb2xvci1vcmFuZ2Utc3VwZXItaGlnaC1jb250cmFzdDojYWUzZTAwOy0tZWUtY29sb3Itb3JhbmdlLWhpZ2gtY29udHJhc3Q6I2NlNWUwMDstLWVlLWNvbG9yLW9yYW5nZS1sb3ctY29udHJhc3Q6I2ZmOWUyNDstLWVlLWNvbG9yLW9yYW5nZS1zdXBlci1sb3ctY29udHJhc3Q6I2ZmYmU0NDstLWVlLXRleHQtb24tb3JhbmdlOiMyNzAwMDA7LS1lZS10ZXh0LW9uLW9yYW5nZS1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLW9yYW5nZS1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLW9yYW5nZS1sb3ctY29udHJhc3Q6IzViMDAwMDstLWVlLXRleHQtb24tb3JhbmdlLXN1cGVyLWxvdy1jb250cmFzdDojNjUyNDAwOy0tZWUtY29sb3ItZ29sZDojZjZiZDAwOy0tZWUtY29sb3ItZ29sZC1zdXBlci1oaWdoLWNvbnRyYXN0OiNiNjdkMDA7LS1lZS1jb2xvci1nb2xkLWhpZ2gtY29udHJhc3Q6I2Q2OWQwMDstLWVlLWNvbG9yLWdvbGQtbG93LWNvbnRyYXN0OiNmZmRkMjA7LS1lZS1jb2xvci1nb2xkLXN1cGVyLWxvdy1jb250cmFzdDojZmZmZDQwOy0tZWUtdGV4dC1vbi1nb2xkOiM1ZTI1MDA7LS1lZS10ZXh0LW9uLWdvbGQtc3VwZXItaGlnaC1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1nb2xkLWhpZ2gtY29udHJhc3Q6IzNmMDYwMDstLWVlLXRleHQtb24tZ29sZC1sb3ctY29udHJhc3Q6IzYxM2YwMDstLWVlLXRleHQtb24tZ29sZC1zdXBlci1sb3ctY29udHJhc3Q6IzU4NTYwMDstLWVlLWNvbG9yLXllbGxvdzojZmFkODAwOy0tZWUtY29sb3IteWVsbG93LXN1cGVyLWhpZ2gtY29udHJhc3Q6I2JhOTgwMDstLWVlLWNvbG9yLXllbGxvdy1oaWdoLWNvbnRyYXN0OiNkYWI4MDA7LS1lZS1jb2xvci15ZWxsb3ctbG93LWNvbnRyYXN0OiNmZmY4MjA7LS1lZS1jb2xvci15ZWxsb3ctc3VwZXItbG93LWNvbnRyYXN0OiNmZmZmNDA7LS1lZS10ZXh0LW9uLXllbGxvdzojNWUzYzAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctc3VwZXItaGlnaC1jb250cmFzdDojMjMwMTAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctaGlnaC1jb250cmFzdDojNDcyNTAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctbG93LWNvbnRyYXN0OiM1OTUyMDA7LS1lZS10ZXh0LW9uLXllbGxvdy1zdXBlci1sb3ctY29udHJhc3Q6IzU3NTcwMDstLWVlLWNvbG9yLXllbGxvdy1ncmVlbjojZDNkNjAwOy0tZWUtY29sb3IteWVsbG93LWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzkzOTYwMDstLWVlLWNvbG9yLXllbGxvdy1ncmVlbi1oaWdoLWNvbnRyYXN0OiNiM2I2MDA7LS1lZS1jb2xvci15ZWxsb3ctZ3JlZW4tbG93LWNvbnRyYXN0OiNmM2Y2MjA7LS1lZS1jb2xvci15ZWxsb3ctZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiNmZmZmNDA7LS1lZS10ZXh0LW9uLXllbGxvdy1ncmVlbjojM2MzZjAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctZ3JlZW4tc3VwZXItaGlnaC1jb250cmFzdDojMDAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctZ3JlZW4taGlnaC1jb250cmFzdDojMjQyNzAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctZ3JlZW4tbG93LWNvbnRyYXN0OiM0ZjUyMDA7LS1lZS10ZXh0LW9uLXllbGxvdy1ncmVlbi1zdXBlci1sb3ctY29udHJhc3Q6IzU3NTcwMDstLWVlLWNvbG9yLWxpZ2h0LWdyZWVuOiNhOWNlNDc7LS1lZS1jb2xvci1saWdodC1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiM2OThlMDc7LS1lZS1jb2xvci1saWdodC1ncmVlbi1oaWdoLWNvbnRyYXN0OiM4OWFlMjc7LS1lZS1jb2xvci1saWdodC1ncmVlbi1sb3ctY29udHJhc3Q6I2M5ZWU2NzstLWVlLWNvbG9yLWxpZ2h0LWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojZTlmZjg3Oy0tZWUtdGV4dC1vbi1saWdodC1ncmVlbjojMTUzYTAwOy0tZWUtdGV4dC1vbi1saWdodC1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLWxpZ2h0LWdyZWVuLWhpZ2gtY29udHJhc3Q6IzAwMWIwMDstLWVlLXRleHQtb24tbGlnaHQtZ3JlZW4tbG93LWNvbnRyYXN0OiMyYjUwMDA7LS1lZS10ZXh0LW9uLWxpZ2h0LWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojNDQ1YTAwOy0tZWUtY29sb3ItZ3JlZW46IzkxYWIzMDstLWVlLWNvbG9yLWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzUxNmIwMDstLWVlLWNvbG9yLWdyZWVuLWhpZ2gtY29udHJhc3Q6IzcxOGIxMDstLWVlLWNvbG9yLWdyZWVuLWxvdy1jb250cmFzdDojYjFjYjUwOy0tZWUtY29sb3ItZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiNkMWViNzA7LS1lZS10ZXh0LW9uLWdyZWVuOiMwMDFhMDA7LS1lZS10ZXh0LW9uLWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tZ3JlZW4taGlnaC1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1ncmVlbi1sb3ctY29udHJhc3Q6IzFmMzkwMDstLWVlLXRleHQtb24tZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiMzNDRlMDA7LS1lZS1jb2xvci1icmlnaHQtZ3JlZW46IzcxYjk0YzstLWVlLWNvbG9yLWJyaWdodC1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiMzMTc5MGM7LS1lZS1jb2xvci1icmlnaHQtZ3JlZW4taGlnaC1jb250cmFzdDojNTE5OTJjOy0tZWUtY29sb3ItYnJpZ2h0LWdyZWVuLWxvdy1jb250cmFzdDojOTFkOTZjOy0tZWUtY29sb3ItYnJpZ2h0LWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojYjFmOThjOy0tZWUtdGV4dC1vbi1icmlnaHQtZ3JlZW46IzAwMjMwMDstLWVlLXRleHQtb24tYnJpZ2h0LWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tYnJpZ2h0LWdyZWVuLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tYnJpZ2h0LWdyZWVuLWxvdy1jb250cmFzdDojMDA0MTAwOy0tZWUtdGV4dC1vbi1icmlnaHQtZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiMwZjU3MDA7LS1lZS1jb2xvci1kYXJrLWdyZWVuOiM0ZDYwMjE7LS1lZS1jb2xvci1kYXJrLWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzBkMjAwMDstLWVlLWNvbG9yLWRhcmstZ3JlZW4taGlnaC1jb250cmFzdDojMmQ0MDAxOy0tZWUtY29sb3ItZGFyay1ncmVlbi1sb3ctY29udHJhc3Q6IzZkODA0MTstLWVlLWNvbG9yLWRhcmstZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiM4ZGEwNjE7LS1lZS10ZXh0LW9uLWRhcmstZ3JlZW46I2ZmZjstLWVlLXRleHQtb24tZGFyay1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiM5OWFjOGM7LS1lZS10ZXh0LW9uLWRhcmstZ3JlZW4taGlnaC1jb250cmFzdDojYzBkMzk0Oy0tZWUtdGV4dC1vbi1kYXJrLWdyZWVuLWxvdy1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1kYXJrLWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojMDAwYTAwOy0tZWUtY29sb3ItYmx1ZS1ncmVlbjojMzk5Zjk0Oy0tZWUtY29sb3ItYmx1ZS1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiMwMDVmNTQ7LS1lZS1jb2xvci1ibHVlLWdyZWVuLWhpZ2gtY29udHJhc3Q6IzE5N2Y3NDstLWVlLWNvbG9yLWJsdWUtZ3JlZW4tbG93LWNvbnRyYXN0OiM1OWJmYjQ7LS1lZS1jb2xvci1ibHVlLWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojNzlkZmQ0Oy0tZWUtdGV4dC1vbi1ibHVlLWdyZWVuOiMwMDA7LS1lZS10ZXh0LW9uLWJsdWUtZ3JlZW4tc3VwZXItaGlnaC1jb250cmFzdDojY2VmZmZmOy0tZWUtdGV4dC1vbi1ibHVlLWdyZWVuLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tYmx1ZS1ncmVlbi1sb3ctY29udHJhc3Q6IzAwMmExZjstLWVlLXRleHQtb24tYmx1ZS1ncmVlbi1zdXBlci1sb3ctY29udHJhc3Q6IzAwNDQzOTstLWVlLWNvbG9yLWJsdWU6IzI5N2FiYzstLWVlLWNvbG9yLWJsdWUtc3VwZXItaGlnaC1jb250cmFzdDojMDAzYTdjOy0tZWUtY29sb3ItYmx1ZS1oaWdoLWNvbnRyYXN0OiMwOTVhOWM7LS1lZS1jb2xvci1ibHVlLWxvdy1jb250cmFzdDojNDk5YWRjOy0tZWUtY29sb3ItYmx1ZS1zdXBlci1sb3ctY29udHJhc3Q6IzY5YmFmYzstLWVlLXRleHQtb24tYmx1ZTojZmZmOy0tZWUtdGV4dC1vbi1ibHVlLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzliZDVmZjstLWVlLXRleHQtb24tYmx1ZS1oaWdoLWNvbnRyYXN0OiNmN2ZmZmY7LS1lZS10ZXh0LW9uLWJsdWUtbG93LWNvbnRyYXN0OiMwMDA7LS1lZS10ZXh0LW9uLWJsdWUtc3VwZXItbG93LWNvbnRyYXN0OiMwMDIzNjU7LS1lZS1jb2xvci1kYXJrLWJsdWU6IzI3NDM2OTstLWVlLWNvbG9yLWRhcmstYmx1ZS1zdXBlci1oaWdoLWNvbnRyYXN0OiMwMDAzMjk7LS1lZS1jb2xvci1kYXJrLWJsdWUtaGlnaC1jb250cmFzdDojMDcyMzQ5Oy0tZWUtY29sb3ItZGFyay1ibHVlLWxvdy1jb250cmFzdDojNDc2Mzg5Oy0tZWUtY29sb3ItZGFyay1ibHVlLXN1cGVyLWxvdy1jb250cmFzdDojNjc4M2E5Oy0tZWUtdGV4dC1vbi1kYXJrLWJsdWU6I2JlZGFmZjstLWVlLXRleHQtb24tZGFyay1ibHVlLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzkzOTZiYzstLWVlLXRleHQtb24tZGFyay1ibHVlLWhpZ2gtY29udHJhc3Q6Izk0YjBkNjstLWVlLXRleHQtb24tZGFyay1ibHVlLWxvdy1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1kYXJrLWJsdWUtc3VwZXItbG93LWNvbnRyYXN0OiNmZmY7LS1lZS1jb2xvci1icmlnaHQtYmx1ZTojNWFiZGRiOy0tZWUtY29sb3ItYnJpZ2h0LWJsdWUtc3VwZXItaGlnaC1jb250cmFzdDojMWE3ZDliOy0tZWUtY29sb3ItYnJpZ2h0LWJsdWUtaGlnaC1jb250cmFzdDojM2E5ZGJiOy0tZWUtY29sb3ItYnJpZ2h0LWJsdWUtbG93LWNvbnRyYXN0OiM3YWRkZmI7LS1lZS1jb2xvci1icmlnaHQtYmx1ZS1zdXBlci1sb3ctY29udHJhc3Q6IzlhZmRmZjstLWVlLXRleHQtb24tYnJpZ2h0LWJsdWU6IzAwMjc0NTstLWVlLXRleHQtb24tYnJpZ2h0LWJsdWUtc3VwZXItaGlnaC1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1icmlnaHQtYmx1ZS1oaWdoLWNvbnRyYXN0OiMwMDA7LS1lZS10ZXh0LW9uLWJyaWdodC1ibHVlLWxvdy1jb250cmFzdDojMDA0MTVmOy0tZWUtdGV4dC1vbi1icmlnaHQtYmx1ZS1zdXBlci1sb3ctY29udHJhc3Q6IzAwNTg1YTstLWVlLWNvbG9yLWxpZ2h0LWJsdWU6IzlkY2RkNTstLWVlLWNvbG9yLWxpZ2h0LWJsdWUtc3VwZXItaGlnaC1jb250cmFzdDojNWQ4ZDk1Oy0tZWUtY29sb3ItbGlnaHQtYmx1ZS1oaWdoLWNvbnRyYXN0OiM3ZGFkYjU7LS1lZS1jb2xvci1saWdodC1ibHVlLWxvdy1jb250cmFzdDojYmRlZGY1Oy0tZWUtY29sb3ItbGlnaHQtYmx1ZS1zdXBlci1sb3ctY29udHJhc3Q6I2RmZjstLWVlLXRleHQtb24tbGlnaHQtYmx1ZTojMGIzYjQzOy0tZWUtdGV4dC1vbi1saWdodC1ibHVlLXN1cGVyLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tbGlnaHQtYmx1ZS1oaWdoLWNvbnRyYXN0OiMwMDFlMjY7LS1lZS10ZXh0LW9uLWxpZ2h0LWJsdWUtbG93LWNvbnRyYXN0OiMyMDUwNTg7LS1lZS10ZXh0LW9uLWxpZ2h0LWJsdWUtc3VwZXItbG93LWNvbnRyYXN0OiMzOTViNWI7LS1lZS1jb2xvci12aW9sZXQ6I2JmYTlkNDstLWVlLWNvbG9yLXZpb2xldC1zdXBlci1oaWdoLWNvbnRyYXN0OiM3ZjY5OTQ7LS1lZS1jb2xvci12aW9sZXQtaGlnaC1jb250cmFzdDojOWY4OWI0Oy0tZWUtY29sb3ItdmlvbGV0LWxvdy1jb250cmFzdDojZGZjOWY0Oy0tZWUtY29sb3ItdmlvbGV0LXN1cGVyLWxvdy1jb250cmFzdDojZmZlOWZmOy0tZWUtdGV4dC1vbi12aW9sZXQ6IzMyMWM0NzstLWVlLXRleHQtb24tdmlvbGV0LXN1cGVyLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tdmlvbGV0LWhpZ2gtY29udHJhc3Q6IzAwMDstLWVlLXRleHQtb24tdmlvbGV0LWxvdy1jb250cmFzdDojNGEzNDVmOy0tZWUtdGV4dC1vbi12aW9sZXQtc3VwZXItbG93LWNvbnRyYXN0OiM1ZjQ5NWY7LS1lZS1jb2xvci1wdXJwbGU6Izc5NWQ5ZDstLWVlLWNvbG9yLXB1cnBsZS1zdXBlci1oaWdoLWNvbnRyYXN0OiMzOTFkNWQ7LS1lZS1jb2xvci1wdXJwbGUtaGlnaC1jb250cmFzdDojNTkzZDdkOy0tZWUtY29sb3ItcHVycGxlLWxvdy1jb250cmFzdDojOTk3ZGJkOy0tZWUtY29sb3ItcHVycGxlLXN1cGVyLWxvdy1jb250cmFzdDojYjk5ZGRkOy0tZWUtdGV4dC1vbi1wdXJwbGU6I2ZmZjstLWVlLXRleHQtb24tcHVycGxlLXN1cGVyLWhpZ2gtY29udHJhc3Q6I2M4YWNlYzstLWVlLXRleHQtb24tcHVycGxlLWhpZ2gtY29udHJhc3Q6I2Y5ZGRmZjstLWVlLXRleHQtb24tcHVycGxlLWxvdy1jb250cmFzdDojMDAwOy0tZWUtdGV4dC1vbi1wdXJwbGUtc3VwZXItbG93LWNvbnRyYXN0OiMyYTBlNGU7LS1lZS1jb2xvci1pbmRpZ286IzI2MjAzZDstLWVlLWNvbG9yLWluZGlnby1zdXBlci1oaWdoLWNvbnRyYXN0OiMwMDA7LS1lZS1jb2xvci1pbmRpZ28taGlnaC1jb250cmFzdDojMDYwMDFkOy0tZWUtY29sb3ItaW5kaWdvLWxvdy1jb250cmFzdDojNDY0MDVkOy0tZWUtY29sb3ItaW5kaWdvLXN1cGVyLWxvdy1jb250cmFzdDojNjY2MDdkOy0tZWUtdGV4dC1vbi1pbmRpZ286I2IxYWJjODstLWVlLXRleHQtb24taW5kaWdvLXN1cGVyLWhpZ2gtY29udHJhc3Q6Izk1OTU5NTstLWVlLXRleHQtb24taW5kaWdvLWhpZ2gtY29udHJhc3Q6IzlhOTRiMTstLWVlLXRleHQtb24taW5kaWdvLWxvdy1jb250cmFzdDojZGRkN2Y0Oy0tZWUtdGV4dC1vbi1pbmRpZ28tc3VwZXItbG93LWNvbnRyYXN0OiNmZmY7LS1lZS1jb2xvci1ibGFjazojMTgxODFhOy0tZWUtdGV4dC1vbi1ibGFjazojYTNhM2E1Oy0tZWUtY29sb3Itd2hpdGU6I2ZmZjstLWVlLXRleHQtb24td2hpdGU6IzU5NTk1OX0iLCI6cm9vdHstLWVlLWZvbnQtc2l6ZS1taWNybzowLjYwcmVtOy0tZWUtZm9udC1zaXplLXRpbnk6MC43MHJlbTstLWVlLWZvbnQtc2l6ZS1zbWFsbGVyOjAuODByZW07LS1lZS1mb250LXNpemUtc21hbGw6MC45MHJlbTstLWVlLWZvbnQtc2l6ZS1kZWZhdWx0OjEuMDByZW07LS1lZS1mb250LXNpemUtYmlnOjEuMjByZW07LS1lZS1mb250LXNpemUtYmlnZ2VyOjEuNTByZW07LS1lZS1mb250LXNpemUtaHVnZToyLjAwcmVtOy0tZWUtZm9udC1zaXplLWV4dHJlbWU6My4wMHJlbTstLWVlLWxpbmUtaGVpZ2h0LW1vZGlmaWVyOjEuNTstLWVlLXBhZGRpbmctbmFubzowLjEyNXJlbTstLWVlLXBhZGRpbmctbWljcm86MC4yNXJlbTstLWVlLXBhZGRpbmctdGlueTowLjVyZW07LS1lZS1wYWRkaW5nLXNtYWxsZXI6MC43NXJlbTstLWVlLXBhZGRpbmctc21hbGw6MXJlbTstLWVlLXBhZGRpbmctZGVmYXVsdDoxLjVyZW07LS1lZS1wYWRkaW5nLWJpZzoycmVtOy0tZWUtcGFkZGluZy1iaWdnZXI6Mi41cmVtOy0tZWUtcGFkZGluZy1odWdlOjNyZW07LS1lZS1wYWRkaW5nLWV4dHJlbWU6NHJlbTstLWVlLW1hcmdpbi1uYW5vOjAuMTI1cmVtOy0tZWUtbWFyZ2luLW1pY3JvOjAuMjVyZW07LS1lZS1tYXJnaW4tdGlueTowLjVyZW07LS1lZS1tYXJnaW4tc21hbGxlcjowLjc1cmVtOy0tZWUtbWFyZ2luLXNtYWxsOjFyZW07LS1lZS1tYXJnaW4tZGVmYXVsdDoxLjVyZW07LS1lZS1tYXJnaW4tYmlnOjJyZW07LS1lZS1tYXJnaW4tYmlnZ2VyOjIuNXJlbTstLWVlLW1hcmdpbi1odWdlOjNyZW07LS1lZS1tYXJnaW4tZXh0cmVtZTo0cmVtOy0tZWUtYm9yZGVyLXJhZGl1cy1ub25lOjBweDstLWVlLWJvcmRlci1yYWRpdXMtc21hbGw6M3B4Oy0tZWUtYm9yZGVyLXJhZGl1cy1kZWZhdWx0OjZweDstLWVlLWJvcmRlci1yYWRpdXMtYmlnOjEycHg7LS1lZS1ib3JkZXItcmFkaXVzLWJpZ2dlcjoyNHB4Oy0tZWUtYm9yZGVyLXJhZGl1cy1odWdlOjQ4cHg7LS1lZS1ib3JkZXItcmFkaXVzLWZ1bGw6MzAwMHB4fSIsIjpyb290ey0tZWUtaWNvbi1idXR0b24tc2l6ZTozNnB4fS5lc3Bycy1idXR0b24sLmVzcHJzLWJ1dHRvbjphY3RpdmUsLmVzcHJzLWJ1dHRvbjpmb2N1cywuZXNwcnMtYnV0dG9uOnZpc2l0ZWR7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLXNtYWxsKTtib3gtc2hhZG93OnZhcigtLWVlLWJveC1zaGFkb3ctdGlueSk7Ym94LXNpemluZzpjb250ZW50LWJveCFpbXBvcnRhbnQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtmb250LXdlaWdodDo0MDA7bWluLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tc21hbGxlcik7b3V0bGluZTpub25lIWltcG9ydGFudDtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctdGlueSkgdmFyKC0tZWUtcGFkZGluZy1zbWFsbCkgdmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKTt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzp2YXIoLS1lZS10ZXh0LXNoYWRvdy1pbnNldC1saWdodCk7dG9wOi0xcHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lc3Bycy1idXR0b246YWN0aXZle3RvcDowfS5lc3Bycy1idXR0b246aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmVzcHJzLWJ1dHRvbisuZXNwcnMtYnV0dG9ue21hcmdpbi1sZWZ0OnZhcigtLWVlLW1hcmdpbi1kZWZhdWx0KX0uZXNwcnMtYnV0dG9uIC50ZXh0LXdyYXB7Zm9udC13ZWlnaHQ6NzAwO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDpjYWxjKHZhcigtLWVlLXBhZGRpbmctbmFubykqLTEuNSk7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lc3Bycy1idXR0b24uZWUtbm9JY29uIC50ZXh0LXdyYXAsLmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXB7cG9zaXRpb246cmVsYXRpdmU7dG9wOnZhcigtLWVlLXBhZGRpbmctbmFubyl9LmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXB7bWFyZ2luOjAgMCAwIHZhcigtLWVlLXBhZGRpbmctc21hbGwpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZXNwcnMtYnV0dG9uIC5pbWctd3JhcCBzcGFue2xpbmUtaGVpZ2h0OjI0cHh9LmVzcHJzLWJ0bi1kZWZhdWx0e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xNSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTE0KTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTUpO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JleS0xNCl9LmVzcHJzLWJ0bi1kZWZhdWx0OmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xNCl9LmVzcHJzLWJ0bi1wcmltYXJ5e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnktbG93LWNvbnRyYXN0KTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLXByaW1hcnkpfS5lc3Bycy1idG4tcHJpbWFyeTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLXByaW1hcnktbG93LWNvbnRyYXN0KX0uZXNwcnMtYnRuLXNlY29uZGFyeXtiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLXNlY29uZGFyeSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1zZWNvbmRhcnkpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tZWUtY29sb3Itc2Vjb25kYXJ5LWxvdy1jb250cmFzdCk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1zZWNvbmRhcnkpfS5lc3Bycy1idG4tc2Vjb25kYXJ5OmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3Itc2Vjb25kYXJ5LWxvdy1jb250cmFzdCl9LmVzcHJzLWJ0bi1hY2NlbnR7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1hY2NlbnQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3ItYWNjZW50KTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWVlLWNvbG9yLWFjY2VudC1sb3ctY29udHJhc3QpO2NvbG9yOnZhcigtLWVlLXRleHQtb24tYWNjZW50KX0uZXNwcnMtYnRuLWFjY2VudDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWFjY2VudC1sb3ctY29udHJhc3QpfS5lc3Bycy1idG4tdGlueS5lc3Bycy1idXR0b24sLmVzcHJzLWJ0bi10aW55LmVzcHJzLWJ1dHRvbjphY3RpdmUsLmVzcHJzLWJ0bi10aW55LmVzcHJzLWJ1dHRvbjpmb2N1cywuZXNwcnMtYnRuLXRpbnkuZXNwcnMtYnV0dG9uOnZpc2l0ZWR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KTttaW4taGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW5hbm8pIHZhcigtLWVlLXBhZGRpbmctdGlueSkgdmFyKC0tZWUtcGFkZGluZy1taWNybyl9LmVzcHJzLWJ0bi10aW55LmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXAgc3BhbntsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtdGlueSl9LmVzcHJzLWJ0bi1zbWFsbC5lc3Bycy1idXR0b24sLmVzcHJzLWJ0bi1zbWFsbC5lc3Bycy1idXR0b246YWN0aXZlLC5lc3Bycy1idG4tc21hbGwuZXNwcnMtYnV0dG9uOmZvY3VzLC5lc3Bycy1idG4tc21hbGwuZXNwcnMtYnV0dG9uOnZpc2l0ZWR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTttaW4taGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1taWNybykgdmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKSB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpfS5lc3Bycy1idG4tc21hbGwuZXNwcnMtYnV0dG9uOm5vdCguZWUtbm9JY29uKSAudGV4dC13cmFwe3RvcDotLjFyZW19LmVzcHJzLWJ0bi1zbWFsbC5lc3Bycy1idXR0b24gLmltZy13cmFwe3RvcDouMnJlbX0uZXNwcnMtYnRuLXNtYWxsLmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXAgc3BhbntsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcil9LmVzcHJzLWJ0bi1iaWcuZXNwcnMtYnV0dG9uLC5lc3Bycy1idG4tYmlnLmVzcHJzLWJ1dHRvbjphY3RpdmUsLmVzcHJzLWJ0bi1iaWcuZXNwcnMtYnV0dG9uOmZvY3VzLC5lc3Bycy1idG4tYmlnLmVzcHJzLWJ1dHRvbjp2aXNpdGVke2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnKTttaW4taGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKSB2YXIoLS1lZS1wYWRkaW5nLWRlZmF1bHQpIHZhcigtLWVlLXBhZGRpbmctc21hbGwpfS5lc3Bycy1idG4tYmlnLmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXAgc3BhbntsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKX0uZXNwcnMtYnRuLWh1Z2UuZXNwcnMtYnV0dG9uLC5lc3Bycy1idG4taHVnZS5lc3Bycy1idXR0b246YWN0aXZlLC5lc3Bycy1idG4taHVnZS5lc3Bycy1idXR0b246Zm9jdXMsLmVzcHJzLWJ0bi1odWdlLmVzcHJzLWJ1dHRvbjp2aXNpdGVke2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTttaW4taGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1odWdlKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy1kZWZhdWx0KSB2YXIoLS1lZS1wYWRkaW5nLXNtYWxsKX0uZXNwcnMtYnRuLWh1Z2UuZXNwcnMtYnV0dG9uIC5pbWctd3JhcCBzcGFue2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lc3Bycy1idXR0b24rLmVzcHJzLWJ1dHRvbnttYXJnaW4tbGVmdDp2YXIoLS1lZS1tYXJnaW4tc21hbGxlcil9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVzcHJzLWJ1dHRvbisuZXNwcnMtYnV0dG9ue21hcmdpbi1sZWZ0OnZhcigtLWVlLW1hcmdpbi1taWNybyl9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDozNjBweCl7LmVzcHJzLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50O21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tdGlueSkgYXV0bzt3aWR0aDoxMDAlfS5lc3Bycy1idXR0b24rLmVzcHJzLWJ1dHRvbnttYXJnaW4tbGVmdDphdXRvfX0iLCIuZWUtY29udGFpbmVyLC5lZS1jb250YWluZXItYWNjZW50LC5lZS1jb250YWluZXItZGVmYXVsdCwuZWUtY29udGFpbmVyLXByaW1hcnksLmVlLWNvbnRhaW5lci1zZWNvbmRhcnl7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLWRlZmF1bHQpOy1tb3otYm9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLWRlZmF1bHQpOy13ZWJraXQtYm9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLWRlZmF1bHQpO2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtsaW5lLWhlaWdodDp2YXIoLS1lZS1saW5lLWhlaWdodC1tb2RpZmllcik7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwIHZhcigtLWVlLW1hcmdpbi1kZWZhdWx0KTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctZGVmYXVsdCl9LmVlLWNvbnRhaW5lci1kZWZhdWx0e2JhY2tncm91bmQ6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcil9LmVlLWNvbnRhaW5lci1wcmltYXJ5e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLXByaW1hcnkpfS5lZS1jb250YWluZXItc2Vjb25kYXJ5e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3Itc2Vjb25kYXJ5KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLXNlY29uZGFyeSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1zZWNvbmRhcnkpfS5lZS1jb250YWluZXItYWNjZW50e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItYWNjZW50KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWFjY2VudCk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1hY2NlbnQpfSIsIjpyb290ey0tZWUtYW5pbWF0aW9uLXNwaW46ZWUtYW5pbWF0aW9uLXNwaW4gMXMgbGluZWFyIGluZmluaXRlOy0tZWUtYW5pbWF0aW9uLXNwaW4tY2M6ZWUtYW5pbWF0aW9uLXNwaW4tY2MgMXMgbGluZWFyIGluZmluaXRlOy0tZWUtYW5pbWF0aW9uLXNwaW4tZmFzdDplZS1hbmltYXRpb24tc3BpbiAuMjVzIGVhc2UtaW4gaW5maW5pdGV9QGtleWZyYW1lcyBlZS1hbmltYXRpb24tc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19QGtleWZyYW1lcyBlZS1hbmltYXRpb24tc3Bpbi1jY3t0b3t0cmFuc2Zvcm06cm90YXRlKC0xdHVybil9fSIsIi5lZS1zdGF0dXMtY29sb3ItVE9Qe2NvbG9yOnZhcigtLWVlLWNvbG9yLW9yYW5nZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRPUHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLW9yYW5nZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1vcmFuZ2UpfS5lZS1zdGF0dXMtY29sb3ItVENNe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVENNe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItVElOe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1USU57YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItVEFCe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdvbGQpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1UQUJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1nb2xkKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWdvbGQpfS5lZS1zdGF0dXMtY29sb3ItVEZMe2NvbG9yOnZhcigtLWVlLWNvbG9yLWhvdC1waW5rKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEZMe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspO2NvbG9yOnZhcigtLWVlLXRleHQtb24taG90LXBpbmspfS5lZS1zdGF0dXMtY29sb3ItUEFQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUEFQe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItUFBOe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QUE57YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItUEZMe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdvbGQpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QRkx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1nb2xkKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWdvbGQpfS5lZS1zdGF0dXMtY29sb3ItUERDe2NvbG9yOnZhcigtLWVlLWNvbG9yLWhvdC1waW5rKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUERDe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspO2NvbG9yOnZhcigtLWVlLXRleHQtb24taG90LXBpbmspfS5lZS1zdGF0dXMtY29sb3ItUENOe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBDTntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTcpfS5lZS1zdGF0dXMtY29sb3ItUkFQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUkFQe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItUlBQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SUFB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItUldMe2NvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJXTHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1wdXJwbGUpfS5lZS1zdGF0dXMtY29sb3ItUklDe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdvbGQpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SSUN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1nb2xkKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWdvbGQpfS5lZS1zdGF0dXMtY29sb3ItUk5Be2NvbG9yOnZhcigtLWVlLWNvbG9yLW9yYW5nZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJOQXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLW9yYW5nZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1vcmFuZ2UpfS5lZS1zdGF0dXMtY29sb3ItUkRDe2NvbG9yOnZhcigtLWVlLWNvbG9yLWhvdC1waW5rKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUkRDe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspO2NvbG9yOnZhcigtLWVlLXRleHQtb24taG90LXBpbmspfS5lZS1zdGF0dXMtY29sb3ItUkNOe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJDTntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTcpfS5lZS1zdGF0dXMtY29sb3ItRFRTe2NvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUU3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1wdXJwbGUpfS5lZS1zdGF0dXMtY29sb3ItRFRBe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRBe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItRFRVe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVFV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItRFRQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdvbGQpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVFB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1nb2xkKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWdvbGQpfS5lZS1zdGF0dXMtY29sb3ItRFRDe2NvbG9yOnZhcigtLWVlLWNvbG9yLWhvdC1waW5rKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRDe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspO2NvbG9yOnZhcigtLWVlLXRleHQtb24taG90LXBpbmspfS5lZS1zdGF0dXMtY29sb3ItRFRJe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUtZ3JlZW4pfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVEl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlLWdyZWVuKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUtZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItRFRFe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURURXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTcpfS5lZS1zdGF0dXMtY29sb3ItRFRUe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUVHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTMpfS5lZS1zdGF0dXMtY29sb3ItVEtTe2NvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLU3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1wdXJwbGUpfS5lZS1zdGF0dXMtY29sb3ItVEtPe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtPe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItVEtQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1US1B7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItVEtFe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLRXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTcpfS5lZS1zdGF0dXMtY29sb3ItVEtBe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLQXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTMpfSIsIjpyb290ey0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvOjJweDstLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS10aW55OjFweDstLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS1odWdlOi0xcHg7LS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtZXh0cmVtZTotMnB4Oy0tZWUtd29yZC1zcGFjaW5nLWZvbnQtc2l6ZS1taWNybzo0cHg7LS1lZS13b3JkLXNwYWNpbmctZm9udC1zaXplLXRpbnk6MnB4Oy0tZWUtd29yZC1zcGFjaW5nLWZvbnQtc2l6ZS1zbWFsbGVyOjFweH0uZWUtZm9jdXMtcHJpb3JpdHktMXtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3Itc3VwZXItbG93LWNvbnRyYXN0KTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWV4dHJlbWUpO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtZXh0cmVtZSk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1saW5lLWhlaWdodC1tb2RpZmllcikqMC43NSl9LmVlLWZvY3VzLXByaW9yaXR5LTJ7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yLWxvdy1jb250cmFzdCk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1odWdlKTtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLWh1Z2UpO2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpKjAuODc1KX0uZWUtZm9jdXMtcHJpb3JpdHktM3tmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcil9LmVlLWZvY3VzLXByaW9yaXR5LTMsLmVlLWZvY3VzLXByaW9yaXR5LTR7bGluZS1oZWlnaHQ6dmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpfS5lZS1mb2N1cy1wcmlvcml0eS00e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnKX0uZWUtZm9jdXMtcHJpb3JpdHktNXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWxpbmUtaGVpZ2h0LW1vZGlmaWVyKX0uZWUtZm9jdXMtcHJpb3JpdHktNntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKX0uZWUtZm9jdXMtcHJpb3JpdHktNiwuZWUtZm9jdXMtcHJpb3JpdHktN3tjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3ItaGlnaC1jb250cmFzdCk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpfS5lZS1mb2N1cy1wcmlvcml0eS03e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7d29yZC1zcGFjaW5nOnZhcigtLWVlLXdvcmQtc3BhY2luZy1mb250LXNpemUtc21hbGxlcil9LmVlLWZvY3VzLXByaW9yaXR5LTh7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtdGlueSk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1saW5lLWhlaWdodC1tb2RpZmllcikqMS4xMjUpO3dvcmQtc3BhY2luZzp2YXIoLS1lZS13b3JkLXNwYWNpbmctZm9udC1zaXplLXRpbnkpfS5lZS1mb2N1cy1wcmlvcml0eS04LC5lZS1mb2N1cy1wcmlvcml0eS05e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1zdXBlci1oaWdoLWNvbnRyYXN0KX0uZWUtZm9jdXMtcHJpb3JpdHktOXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLW1pY3JvKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pO2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpKjEuMjUpO3dvcmQtc3BhY2luZzp2YXIoLS1lZS13b3JkLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc4MnB4KXsuZWUtZm9jdXMtcHJpb3JpdHktMXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWh1Z2UpfS5lZS1mb2N1cy1wcmlvcml0eS0ye2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKX0uZWUtZm9jdXMtcHJpb3JpdHktM3tmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZyl9LmVlLWZvY3VzLXByaW9yaXR5LTR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KX0uZWUtZm9jdXMtcHJpb3JpdHktNXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKX0uZWUtZm9jdXMtcHJpb3JpdHktNntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpfS5lZS1mb2N1cy1wcmlvcml0eS03LC5lZS1mb2N1cy1wcmlvcml0eS04e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSl9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lZS1mb2N1cy1wcmlvcml0eS0xe2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKX0uZWUtZm9jdXMtcHJpb3JpdHktMntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZyl9LmVlLWZvY3VzLXByaW9yaXR5LTN7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KX0uZWUtZm9jdXMtcHJpb3JpdHktNHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKX0uZWUtZm9jdXMtcHJpb3JpdHktNXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpfS5lZS1mb2N1cy1wcmlvcml0eS02LC5lZS1mb2N1cy1wcmlvcml0eS03LC5lZS1mb2N1cy1wcmlvcml0eS04e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSl9fSIsIjpyb290ey0tZWUtYm94LXNoYWRvdy10aW55OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuNik7LS1lZS1ib3gtc2hhZG93LXRpbnktZGlmZnVzZTowIDAgMXB4IHJnYmEoMCwwLDAsMC4yKTstLWVlLWJveC1zaGFkb3ctc21hbGw6MCAycHggNHB4IHJnYmEoMCwwLDAsMC42KSwwIDRweCA4cHggNHB4IHJnYmEoMCwwLDAsMC4xKTstLWVlLWJveC1zaGFkb3ctc21hbGwtZGlmZnVzZTowIDFweCAycHggcmdiYSgwLDAsMCwwLjIpOy0tZWUtYm94LXNoYWRvdy1kZWZhdWx0OjAgM3B4IDZweCByZ2JhKDAsMCwwLDAuNiksMCA4cHggMTZweCA4cHggcmdiYSgwLDAsMCwwLjA1KTstLWVlLWJveC1zaGFkb3ctZGVmYXVsdC1kaWZmdXNlOjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMik7LS1lZS1ib3gtc2hhZG93LWJpZzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC42KSwwIDAgMjRweCAxNnB4IHJnYmEoMCwwLDAsMC4wNSk7LS1lZS1ib3gtc2hhZG93LWJpZy1kaWZmdXNlOjAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMik7LS1lZS1ib3gtc2hhZG93LXdwLWljb24tYnRuLWhvdmVyOmluc2V0IDAgMCAwIDFweCB2YXIoLS1lZS1jb2xvci1ncmV5LTEwKSxpbnNldCAwIDAgMCAycHggdmFyKC0tZWUtY29sb3Itd2hpdGUpLDAgMXB4IDFweCByZ2JhKDI1LDMwLDM1LDAuMik7LS1lZS1ib3gtc2hhZG93LXdwLWljb24tYnRuLWZvY3VzOmluc2V0IDAgMCAwIDFweCB2YXIoLS1lZS1jb2xvci1ncmV5LTUpLGluc2V0IDAgMCAwIDJweCB2YXIoLS1lZS1jb2xvci13aGl0ZSk7LS1lZS10ZXh0LXNoYWRvdy1pbnNldDotMXB4IC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy0tZWUtdGV4dC1zaGFkb3ctaW5zZXQtbGlnaHQ6LTFweCAtMXB4IDAgaHNsYSgwLDAlLDEwMCUsMC4xNSk7LS1lZS10ZXh0LXNoYWRvdy1zbWFsbDowIDFweCAycHggcmdiYSgwLDAsMCwwLjUpOy0tZWUtdGV4dC1zaGFkb3ctZGVmYXVsdDowIDJweCA0cHggcmdiYSgwLDAsMCwwLjM3NSk7LS1lZS10ZXh0LXNoYWRvdy1iaWc6MCAzcHggNnB4IHJnYmEoMCwwLDAsMC4yNSl9Il0sInNvdXJjZVJvb3QiOiIifQ==*/ \ No newline at end of file +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvc3R5bGVzL3RoZW1lcy9kZWZhdWx0L2NvbG9yLXZhcmlhYmxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy90aGVtZXMvZGVmYXVsdC9zaXplLXZhcmlhYmxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2J1dHRvbnMuY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvcm9vdC9jb250YWluZXJzLmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvc3R5bGVzL3Jvb3QvZWZmZWN0cy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2VudGl0eS1zdGF0dXMuY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvcm9vdC9mb250LXN0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L3NoYWRvd3MuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sMkJBQTJCLCtDQUErQyx5Q0FBeUMsd0NBQXdDLDhDQUE4QywwQkFBMEIsaURBQWlELDJDQUEyQyx1Q0FBdUMsZ0RBQWdELDZCQUE2QixpREFBaUQsMkNBQTJDLDBDQUEwQyxnREFBZ0QsK0JBQStCLGdEQUFnRCwwQ0FBMEMsNENBQTRDLGtEQUFrRCwwQkFBMEIsOENBQThDLHdDQUF3Qyx1Q0FBdUMsNkNBQTZDLHlCQUF5QixnREFBZ0QsdUNBQXVDLHlDQUF5QywrQ0FBK0MsZ0NBQWdDLG9EQUFvRCw4Q0FBOEMsNkNBQTZDLGdEQUFnRCwyQkFBMkIsMEJBQTBCLDBCQUEwQiw0QkFBNEIsMEJBQTBCLDRC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QixrQ0FBa0MscUJBQXFCLHNDQUFzQyxxQkFBcUIsb0NBQW9DLHFCQUFxQixzQ0FBc0MsK0RBQStELG9DO0FDQW5yRixNQUFNLCtDQUErQyxxREFBcUQsOEVBQThFLHdEQUF3RCxrRkFBa0YsMERBQTBELDhFQUE4RSxzREFBc0QsNklBQTZJLCtHQUErRyxvREFBb0QsOERBQThELGlEQUFpRCxxREFBcUQsZ0QiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1jb3JlLWNzcy1kZWZhdWx0LjEzZTU1MzVjYmFjNWUzNzNkM2Y2LmRpc3QuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOnJvb3R7LS1lZS1jb2xvci1wcmltYXJ5OiMyOTdhYmM7LS1lZS1jb2xvci1wcmltYXJ5LXN1cGVyLWhpZ2gtY29udHJhc3Q6IzAwM2E3YzstLWVlLWNvbG9yLXByaW1hcnktaGlnaC1jb250cmFzdDojMDk1YTljOy0tZWUtY29sb3ItcHJpbWFyeS1sb3ctY29udHJhc3Q6IzQ5OWFkYzstLWVlLWNvbG9yLXByaW1hcnktc3VwZXItbG93LWNvbnRyYXN0OiM2OWJhZmM7LS1lZS10ZXh0LW9uLXByaW1hcnk6I2ZmZjstLWVlLXRleHQtb24tcHJpbWFyeS1zdXBlci1oaWdoLWNvbnRyYXN0OiM5YmQ1ZmY7LS1lZS10ZXh0LW9uLXByaW1hcnktaGlnaC1jb250cmFzdDojZjdmZmZmOy0tZWUtdGV4dC1vbi1wcmltYXJ5LWxvdy1jb250cmFzdDojMDAwOy0tZWUtdGV4dC1vbi1wcmltYXJ5LXN1cGVyLWxvdy1jb250cmFzdDojMDAyMzY1Oy0tZWUtY29sb3Itc2Vjb25kYXJ5OiM5MWFiMzA7LS1lZS1jb2xvci1zZWNvbmRhcnktc3VwZXItaGlnaC1jb250cmFzdDojNTE2YjAwOy0tZWUtY29sb3Itc2Vjb25kYXJ5LWhpZ2gtY29udHJhc3Q6IzcxOGIxMDstLWVlLWNvbG9yLXNlY29uZGFyeS1sb3ctY29udHJhc3Q6I2IxY2I1MDstLWVlLWNvbG9yLXNlY29uZGFyeS1zdXBlci1sb3ctY29udHJhc3Q6I2QxZWI3MDstLWVlLXRleHQtb24tc2Vjb25kYXJ5OiMwMDFhMDA7LS1lZS10ZXh0LW9uLXNlY29uZGFyeS1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLXNlY29uZGFyeS1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLXNlY29uZGFyeS1sb3ctY29udHJhc3Q6IzFmMzkwMDstLWVlLXRleHQtb24tc2Vjb25kYXJ5LXN1cGVyLWxvdy1jb250cmFzdDojMzQ0ZTAwOy0tZWUtY29sb3ItYWNjZW50OiNkZTU4ODI7LS1lZS1jb2xvci1hY2NlbnQtc3VwZXItaGlnaC1jb250cmFzdDojOWUxODQyOy0tZWUtY29sb3ItYWNjZW50LWhpZ2gtY29udHJhc3Q6I2JlMzg2MjstLWVlLWNvbG9yLWFjY2VudC1sb3ctY29udHJhc3Q6I2ZlNzhhMjstLWVlLWNvbG9yLWFjY2VudC1zdXBlci1sb3ctY29udHJhc3Q6I2ZmOThjMjstLWVlLXRleHQtb24tYWNjZW50OiNmZmY7LS1lZS10ZXh0LW9uLWFjY2VudC1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmVjZmY7LS1lZS10ZXh0LW9uLWFjY2VudC1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLWFjY2VudC1sb3ctY29udHJhc3Q6IzNkMDAwMDstLWVlLXRleHQtb24tYWNjZW50LXN1cGVyLWxvdy1jb250cmFzdDojNWUwMDIxOy0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yOiM1OTU5NTk7LS1lZS1kZWZhdWx0LXRleHQtY29sb3Itc3VwZXItaGlnaC1jb250cmFzdDojMTkxOTE5Oy0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yLWhpZ2gtY29udHJhc3Q6IzM5MzkzOTstLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1sb3ctY29udHJhc3Q6Izc5Nzk3OTstLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1zdXBlci1sb3ctY29udHJhc3Q6Izk5OTstLWVlLWJhY2tncm91bmQtY29sb3I6I2ZmZjstLWVlLWJvcmRlci1jb2xvcjojOTY5Njk2Oy0tZWUtY29sb3ItZ3JleS0xOiMxNjE2MTY7LS1lZS10ZXh0LW9uLWdyZXktMTojYTFhMWExOy0tZWUtY29sb3ItZ3JleS0yOiMyOTI5Mjk7LS1lZS10ZXh0LW9uLWdyZXktMjojYjRiNGI0Oy0tZWUtY29sb3ItZ3JleS0zOiMzYzNjM2M7LS1lZS10ZXh0LW9uLWdyZXktMzojY2VjZWNlOy0tZWUtY29sb3ItZ3JleS00OiM0ZjRmNGY7LS1lZS10ZXh0LW9uLWdyZXktNDojZWVlOy0tZWUtY29sb3ItZ3JleS01OiM2MjYyNjI7LS1lZS10ZXh0LW9uLWdyZXktNTojZmZmOy0tZWUtY29sb3ItZ3JleS02OiM3NTc1NzU7LS1lZS10ZXh0LW9uLWdyZXktNjojZmZmOy0tZWUtY29sb3ItZ3JleS03OiM4ODg7LS1lZS10ZXh0LW9uLWdyZXktNzojZmZmOy0tZWUtY29sb3ItZ3JleS04OiM5YjliOWI7LS1lZS10ZXh0LW9uLWdyZXktODojMGMwYzBjOy0tZWUtY29sb3ItZ3JleS05OiNhZWFlYWU7LS1lZS10ZXh0LW9uLWdyZXktOTojMjMyMzIzOy0tZWUtY29sb3ItZ3JleS0xMDojYzFjMWMxOy0tZWUtdGV4dC1vbi1ncmV5LTEwOiMzMzM7LS1lZS1jb2xvci1ncmV5LTExOiNkNGQ0ZDQ7LS1lZS10ZXh0LW9uLWdyZXktMTE6IzNmM2YzZjstLWVlLWNvbG9yLWdyZXktMTI6I2U3ZTdlNzstLWVlLXRleHQtb24tZ3JleS0xMjojNGI0YjRiOy0tZWUtY29sb3ItZ3JleS0xMzojZWRlZGVkOy0tZWUtdGV4dC1vbi1ncmV5LTEzOiM0ZTRlNGU7LS1lZS1jb2xvci1ncmV5LTE0OiNmM2YzZjM7LS1lZS10ZXh0LW9uLWdyZXktMTQ6IzUyNTI1MjstLWVlLWNvbG9yLWdyZXktMTU6I2Y5ZjlmOTstLWVlLXRleHQtb24tZ3JleS0xNTojNTU1Oy0tZWUtY29sb3ItbWFnZW50YTojOTYyNTU3Oy0tZWUtY29sb3ItbWFnZW50YS1zdXBlci1oaWdoLWNvbnRyYXN0OiM1NjAwMTc7LS1lZS1jb2xvci1tYWdlbnRhLWhpZ2gtY29udHJhc3Q6Izc2MDUzNzstLWVlLWNvbG9yLW1hZ2VudGEtbG93LWNvbnRyYXN0OiNiNjQ1Nzc7LS1lZS1jb2xvci1tYWdlbnRhLXN1cGVyLWxvdy1jb250cmFzdDojZDY2NTk3Oy0tZWUtdGV4dC1vbi1tYWdlbnRhOiNmZWY7LS1lZS10ZXh0LW9uLW1hZ2VudGEtc3VwZXItaGlnaC1jb250cmFzdDojZjA5YWIxOy0tZWUtdGV4dC1vbi1tYWdlbnRhLWhpZ2gtY29udHJhc3Q6I2ZmYjVlNzstLWVlLXRleHQtb24tbWFnZW50YS1sb3ctY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tbWFnZW50YS1zdXBlci1sb3ctY29udHJhc3Q6IzAwMDstLWVlLWNvbG9yLXJlZDojYjAwZTEzOy0tZWUtY29sb3ItcmVkLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzcwMDAwMDstLWVlLWNvbG9yLXJlZC1oaWdoLWNvbnRyYXN0OiM5MDAwMDA7LS1lZS1jb2xvci1yZWQtbG93LWNvbnRyYXN0OiNkMDJlMzM7LS1lZS1jb2xvci1yZWQtc3VwZXItbG93LWNvbnRyYXN0OiNmMDRlNTM7LS1lZS10ZXh0LW9uLXJlZDojZmZmYmZmOy0tZWUtdGV4dC1vbi1yZWQtc3VwZXItaGlnaC1jb250cmFzdDojZmZhZGFkOy0tZWUtdGV4dC1vbi1yZWQtaGlnaC1jb250cmFzdDojZmZkMmQyOy0tZWUtdGV4dC1vbi1yZWQtbG93LWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLXJlZC1zdXBlci1sb3ctY29udHJhc3Q6I2ZmZjstLWVlLWNvbG9yLWhvdC1waW5rOiNkZTU4ODI7LS1lZS1jb2xvci1ob3QtcGluay1zdXBlci1oaWdoLWNvbnRyYXN0OiM5ZTE4NDI7LS1lZS1jb2xvci1ob3QtcGluay1oaWdoLWNvbnRyYXN0OiNiZTM4NjI7LS1lZS1jb2xvci1ob3QtcGluay1sb3ctY29udHJhc3Q6I2ZlNzhhMjstLWVlLWNvbG9yLWhvdC1waW5rLXN1cGVyLWxvdy1jb250cmFzdDojZmY5OGMyOy0tZWUtdGV4dC1vbi1ob3QtcGluazojZmZmOy0tZWUtdGV4dC1vbi1ob3QtcGluay1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmVjZmY7LS1lZS10ZXh0LW9uLWhvdC1waW5rLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24taG90LXBpbmstbG93LWNvbnRyYXN0OiMzZDAwMDA7LS1lZS10ZXh0LW9uLWhvdC1waW5rLXN1cGVyLWxvdy1jb250cmFzdDojNWUwMDIxOy0tZWUtY29sb3ItcGluazojZWQ4ZDk5Oy0tZWUtY29sb3ItcGluay1zdXBlci1oaWdoLWNvbnRyYXN0OiNhZDRkNTk7LS1lZS1jb2xvci1waW5rLWhpZ2gtY29udHJhc3Q6I2NkNmQ3OTstLWVlLWNvbG9yLXBpbmstbG93LWNvbnRyYXN0OiNmZmFkYjk7LS1lZS1jb2xvci1waW5rLXN1cGVyLWxvdy1jb250cmFzdDojZmZjZGQ5Oy0tZWUtdGV4dC1vbi1waW5rOiM0NjAwMDA7LS1lZS10ZXh0LW9uLXBpbmstc3VwZXItaGlnaC1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1waW5rLWhpZ2gtY29udHJhc3Q6IzAwMDstLWVlLXRleHQtb24tcGluay1sb3ctY29udHJhc3Q6IzY2MTQyMDstLWVlLXRleHQtb24tcGluay1zdXBlci1sb3ctY29udHJhc3Q6IzY2MzQ0MDstLWVlLWNvbG9yLWNvcmFsOiNlZDZkNWE7LS1lZS1jb2xvci1jb3JhbC1zdXBlci1oaWdoLWNvbnRyYXN0OiNhZDJkMWE7LS1lZS1jb2xvci1jb3JhbC1oaWdoLWNvbnRyYXN0OiNjZDRkM2E7LS1lZS1jb2xvci1jb3JhbC1sb3ctY29udHJhc3Q6I2ZmOGQ3YTstLWVlLWNvbG9yLWNvcmFsLXN1cGVyLWxvdy1jb250cmFzdDojZmZhZDlhOy0tZWUtdGV4dC1vbi1jb3JhbDojMDAwOy0tZWUtdGV4dC1vbi1jb3JhbC1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLWNvcmFsLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tY29yYWwtbG93LWNvbnRyYXN0OiM0ZjAwMDA7LS1lZS10ZXh0LW9uLWNvcmFsLXN1cGVyLWxvdy1jb250cmFzdDojNjYxNDAxOy0tZWUtY29sb3Itb3JhbmdlOiNlZTdlMDQ7LS1lZS1jb2xvci1vcmFuZ2Utc3VwZXItaGlnaC1jb250cmFzdDojYWUzZTAwOy0tZWUtY29sb3Itb3JhbmdlLWhpZ2gtY29udHJhc3Q6I2NlNWUwMDstLWVlLWNvbG9yLW9yYW5nZS1sb3ctY29udHJhc3Q6I2ZmOWUyNDstLWVlLWNvbG9yLW9yYW5nZS1zdXBlci1sb3ctY29udHJhc3Q6I2ZmYmU0NDstLWVlLXRleHQtb24tb3JhbmdlOiMyNzAwMDA7LS1lZS10ZXh0LW9uLW9yYW5nZS1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLW9yYW5nZS1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLW9yYW5nZS1sb3ctY29udHJhc3Q6IzViMDAwMDstLWVlLXRleHQtb24tb3JhbmdlLXN1cGVyLWxvdy1jb250cmFzdDojNjUyNDAwOy0tZWUtY29sb3ItZ29sZDojZjZiZDAwOy0tZWUtY29sb3ItZ29sZC1zdXBlci1oaWdoLWNvbnRyYXN0OiNiNjdkMDA7LS1lZS1jb2xvci1nb2xkLWhpZ2gtY29udHJhc3Q6I2Q2OWQwMDstLWVlLWNvbG9yLWdvbGQtbG93LWNvbnRyYXN0OiNmZmRkMjA7LS1lZS1jb2xvci1nb2xkLXN1cGVyLWxvdy1jb250cmFzdDojZmZmZDQwOy0tZWUtdGV4dC1vbi1nb2xkOiM1ZTI1MDA7LS1lZS10ZXh0LW9uLWdvbGQtc3VwZXItaGlnaC1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1nb2xkLWhpZ2gtY29udHJhc3Q6IzNmMDYwMDstLWVlLXRleHQtb24tZ29sZC1sb3ctY29udHJhc3Q6IzYxM2YwMDstLWVlLXRleHQtb24tZ29sZC1zdXBlci1sb3ctY29udHJhc3Q6IzU4NTYwMDstLWVlLWNvbG9yLXllbGxvdzojZmFkODAwOy0tZWUtY29sb3IteWVsbG93LXN1cGVyLWhpZ2gtY29udHJhc3Q6I2JhOTgwMDstLWVlLWNvbG9yLXllbGxvdy1oaWdoLWNvbnRyYXN0OiNkYWI4MDA7LS1lZS1jb2xvci15ZWxsb3ctbG93LWNvbnRyYXN0OiNmZmY4MjA7LS1lZS1jb2xvci15ZWxsb3ctc3VwZXItbG93LWNvbnRyYXN0OiNmZmZmNDA7LS1lZS10ZXh0LW9uLXllbGxvdzojNWUzYzAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctc3VwZXItaGlnaC1jb250cmFzdDojMjMwMTAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctaGlnaC1jb250cmFzdDojNDcyNTAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctbG93LWNvbnRyYXN0OiM1OTUyMDA7LS1lZS10ZXh0LW9uLXllbGxvdy1zdXBlci1sb3ctY29udHJhc3Q6IzU3NTcwMDstLWVlLWNvbG9yLXllbGxvdy1ncmVlbjojZDNkNjAwOy0tZWUtY29sb3IteWVsbG93LWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzkzOTYwMDstLWVlLWNvbG9yLXllbGxvdy1ncmVlbi1oaWdoLWNvbnRyYXN0OiNiM2I2MDA7LS1lZS1jb2xvci15ZWxsb3ctZ3JlZW4tbG93LWNvbnRyYXN0OiNmM2Y2MjA7LS1lZS1jb2xvci15ZWxsb3ctZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiNmZmZmNDA7LS1lZS10ZXh0LW9uLXllbGxvdy1ncmVlbjojM2MzZjAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctZ3JlZW4tc3VwZXItaGlnaC1jb250cmFzdDojMDAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctZ3JlZW4taGlnaC1jb250cmFzdDojMjQyNzAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctZ3JlZW4tbG93LWNvbnRyYXN0OiM0ZjUyMDA7LS1lZS10ZXh0LW9uLXllbGxvdy1ncmVlbi1zdXBlci1sb3ctY29udHJhc3Q6IzU3NTcwMDstLWVlLWNvbG9yLWxpZ2h0LWdyZWVuOiNhOWNlNDc7LS1lZS1jb2xvci1saWdodC1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiM2OThlMDc7LS1lZS1jb2xvci1saWdodC1ncmVlbi1oaWdoLWNvbnRyYXN0OiM4OWFlMjc7LS1lZS1jb2xvci1saWdodC1ncmVlbi1sb3ctY29udHJhc3Q6I2M5ZWU2NzstLWVlLWNvbG9yLWxpZ2h0LWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojZTlmZjg3Oy0tZWUtdGV4dC1vbi1saWdodC1ncmVlbjojMTUzYTAwOy0tZWUtdGV4dC1vbi1saWdodC1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLWxpZ2h0LWdyZWVuLWhpZ2gtY29udHJhc3Q6IzAwMWIwMDstLWVlLXRleHQtb24tbGlnaHQtZ3JlZW4tbG93LWNvbnRyYXN0OiMyYjUwMDA7LS1lZS10ZXh0LW9uLWxpZ2h0LWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojNDQ1YTAwOy0tZWUtY29sb3ItZ3JlZW46IzkxYWIzMDstLWVlLWNvbG9yLWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzUxNmIwMDstLWVlLWNvbG9yLWdyZWVuLWhpZ2gtY29udHJhc3Q6IzcxOGIxMDstLWVlLWNvbG9yLWdyZWVuLWxvdy1jb250cmFzdDojYjFjYjUwOy0tZWUtY29sb3ItZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiNkMWViNzA7LS1lZS10ZXh0LW9uLWdyZWVuOiMwMDFhMDA7LS1lZS10ZXh0LW9uLWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tZ3JlZW4taGlnaC1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1ncmVlbi1sb3ctY29udHJhc3Q6IzFmMzkwMDstLWVlLXRleHQtb24tZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiMzNDRlMDA7LS1lZS1jb2xvci1icmlnaHQtZ3JlZW46IzcxYjk0YzstLWVlLWNvbG9yLWJyaWdodC1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiMzMTc5MGM7LS1lZS1jb2xvci1icmlnaHQtZ3JlZW4taGlnaC1jb250cmFzdDojNTE5OTJjOy0tZWUtY29sb3ItYnJpZ2h0LWdyZWVuLWxvdy1jb250cmFzdDojOTFkOTZjOy0tZWUtY29sb3ItYnJpZ2h0LWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojYjFmOThjOy0tZWUtdGV4dC1vbi1icmlnaHQtZ3JlZW46IzAwMjMwMDstLWVlLXRleHQtb24tYnJpZ2h0LWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tYnJpZ2h0LWdyZWVuLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tYnJpZ2h0LWdyZWVuLWxvdy1jb250cmFzdDojMDA0MTAwOy0tZWUtdGV4dC1vbi1icmlnaHQtZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiMwZjU3MDA7LS1lZS1jb2xvci1kYXJrLWdyZWVuOiM0ZDYwMjE7LS1lZS1jb2xvci1kYXJrLWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzBkMjAwMDstLWVlLWNvbG9yLWRhcmstZ3JlZW4taGlnaC1jb250cmFzdDojMmQ0MDAxOy0tZWUtY29sb3ItZGFyay1ncmVlbi1sb3ctY29udHJhc3Q6IzZkODA0MTstLWVlLWNvbG9yLWRhcmstZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiM4ZGEwNjE7LS1lZS10ZXh0LW9uLWRhcmstZ3JlZW46I2ZmZjstLWVlLXRleHQtb24tZGFyay1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiM5OWFjOGM7LS1lZS10ZXh0LW9uLWRhcmstZ3JlZW4taGlnaC1jb250cmFzdDojYzBkMzk0Oy0tZWUtdGV4dC1vbi1kYXJrLWdyZWVuLWxvdy1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1kYXJrLWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojMDAwYTAwOy0tZWUtY29sb3ItYmx1ZS1ncmVlbjojMzk5Zjk0Oy0tZWUtY29sb3ItYmx1ZS1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiMwMDVmNTQ7LS1lZS1jb2xvci1ibHVlLWdyZWVuLWhpZ2gtY29udHJhc3Q6IzE5N2Y3NDstLWVlLWNvbG9yLWJsdWUtZ3JlZW4tbG93LWNvbnRyYXN0OiM1OWJmYjQ7LS1lZS1jb2xvci1ibHVlLWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojNzlkZmQ0Oy0tZWUtdGV4dC1vbi1ibHVlLWdyZWVuOiMwMDA7LS1lZS10ZXh0LW9uLWJsdWUtZ3JlZW4tc3VwZXItaGlnaC1jb250cmFzdDojY2VmZmZmOy0tZWUtdGV4dC1vbi1ibHVlLWdyZWVuLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tYmx1ZS1ncmVlbi1sb3ctY29udHJhc3Q6IzAwMmExZjstLWVlLXRleHQtb24tYmx1ZS1ncmVlbi1zdXBlci1sb3ctY29udHJhc3Q6IzAwNDQzOTstLWVlLWNvbG9yLWJsdWU6IzI5N2FiYzstLWVlLWNvbG9yLWJsdWUtc3VwZXItaGlnaC1jb250cmFzdDojMDAzYTdjOy0tZWUtY29sb3ItYmx1ZS1oaWdoLWNvbnRyYXN0OiMwOTVhOWM7LS1lZS1jb2xvci1ibHVlLWxvdy1jb250cmFzdDojNDk5YWRjOy0tZWUtY29sb3ItYmx1ZS1zdXBlci1sb3ctY29udHJhc3Q6IzY5YmFmYzstLWVlLXRleHQtb24tYmx1ZTojZmZmOy0tZWUtdGV4dC1vbi1ibHVlLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzliZDVmZjstLWVlLXRleHQtb24tYmx1ZS1oaWdoLWNvbnRyYXN0OiNmN2ZmZmY7LS1lZS10ZXh0LW9uLWJsdWUtbG93LWNvbnRyYXN0OiMwMDA7LS1lZS10ZXh0LW9uLWJsdWUtc3VwZXItbG93LWNvbnRyYXN0OiMwMDIzNjU7LS1lZS1jb2xvci1kYXJrLWJsdWU6IzI3NDM2OTstLWVlLWNvbG9yLWRhcmstYmx1ZS1zdXBlci1oaWdoLWNvbnRyYXN0OiMwMDAzMjk7LS1lZS1jb2xvci1kYXJrLWJsdWUtaGlnaC1jb250cmFzdDojMDcyMzQ5Oy0tZWUtY29sb3ItZGFyay1ibHVlLWxvdy1jb250cmFzdDojNDc2Mzg5Oy0tZWUtY29sb3ItZGFyay1ibHVlLXN1cGVyLWxvdy1jb250cmFzdDojNjc4M2E5Oy0tZWUtdGV4dC1vbi1kYXJrLWJsdWU6I2JlZGFmZjstLWVlLXRleHQtb24tZGFyay1ibHVlLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzkzOTZiYzstLWVlLXRleHQtb24tZGFyay1ibHVlLWhpZ2gtY29udHJhc3Q6Izk0YjBkNjstLWVlLXRleHQtb24tZGFyay1ibHVlLWxvdy1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1kYXJrLWJsdWUtc3VwZXItbG93LWNvbnRyYXN0OiNmZmY7LS1lZS1jb2xvci1icmlnaHQtYmx1ZTojNWFiZGRiOy0tZWUtY29sb3ItYnJpZ2h0LWJsdWUtc3VwZXItaGlnaC1jb250cmFzdDojMWE3ZDliOy0tZWUtY29sb3ItYnJpZ2h0LWJsdWUtaGlnaC1jb250cmFzdDojM2E5ZGJiOy0tZWUtY29sb3ItYnJpZ2h0LWJsdWUtbG93LWNvbnRyYXN0OiM3YWRkZmI7LS1lZS1jb2xvci1icmlnaHQtYmx1ZS1zdXBlci1sb3ctY29udHJhc3Q6IzlhZmRmZjstLWVlLXRleHQtb24tYnJpZ2h0LWJsdWU6IzAwMjc0NTstLWVlLXRleHQtb24tYnJpZ2h0LWJsdWUtc3VwZXItaGlnaC1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1icmlnaHQtYmx1ZS1oaWdoLWNvbnRyYXN0OiMwMDA7LS1lZS10ZXh0LW9uLWJyaWdodC1ibHVlLWxvdy1jb250cmFzdDojMDA0MTVmOy0tZWUtdGV4dC1vbi1icmlnaHQtYmx1ZS1zdXBlci1sb3ctY29udHJhc3Q6IzAwNTg1YTstLWVlLWNvbG9yLWxpZ2h0LWJsdWU6IzlkY2RkNTstLWVlLWNvbG9yLWxpZ2h0LWJsdWUtc3VwZXItaGlnaC1jb250cmFzdDojNWQ4ZDk1Oy0tZWUtY29sb3ItbGlnaHQtYmx1ZS1oaWdoLWNvbnRyYXN0OiM3ZGFkYjU7LS1lZS1jb2xvci1saWdodC1ibHVlLWxvdy1jb250cmFzdDojYmRlZGY1Oy0tZWUtY29sb3ItbGlnaHQtYmx1ZS1zdXBlci1sb3ctY29udHJhc3Q6I2RmZjstLWVlLXRleHQtb24tbGlnaHQtYmx1ZTojMGIzYjQzOy0tZWUtdGV4dC1vbi1saWdodC1ibHVlLXN1cGVyLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tbGlnaHQtYmx1ZS1oaWdoLWNvbnRyYXN0OiMwMDFlMjY7LS1lZS10ZXh0LW9uLWxpZ2h0LWJsdWUtbG93LWNvbnRyYXN0OiMyMDUwNTg7LS1lZS10ZXh0LW9uLWxpZ2h0LWJsdWUtc3VwZXItbG93LWNvbnRyYXN0OiMzOTViNWI7LS1lZS1jb2xvci12aW9sZXQ6I2JmYTlkNDstLWVlLWNvbG9yLXZpb2xldC1zdXBlci1oaWdoLWNvbnRyYXN0OiM3ZjY5OTQ7LS1lZS1jb2xvci12aW9sZXQtaGlnaC1jb250cmFzdDojOWY4OWI0Oy0tZWUtY29sb3ItdmlvbGV0LWxvdy1jb250cmFzdDojZGZjOWY0Oy0tZWUtY29sb3ItdmlvbGV0LXN1cGVyLWxvdy1jb250cmFzdDojZmZlOWZmOy0tZWUtdGV4dC1vbi12aW9sZXQ6IzMyMWM0NzstLWVlLXRleHQtb24tdmlvbGV0LXN1cGVyLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tdmlvbGV0LWhpZ2gtY29udHJhc3Q6IzAwMDstLWVlLXRleHQtb24tdmlvbGV0LWxvdy1jb250cmFzdDojNGEzNDVmOy0tZWUtdGV4dC1vbi12aW9sZXQtc3VwZXItbG93LWNvbnRyYXN0OiM1ZjQ5NWY7LS1lZS1jb2xvci1wdXJwbGU6Izc5NWQ5ZDstLWVlLWNvbG9yLXB1cnBsZS1zdXBlci1oaWdoLWNvbnRyYXN0OiMzOTFkNWQ7LS1lZS1jb2xvci1wdXJwbGUtaGlnaC1jb250cmFzdDojNTkzZDdkOy0tZWUtY29sb3ItcHVycGxlLWxvdy1jb250cmFzdDojOTk3ZGJkOy0tZWUtY29sb3ItcHVycGxlLXN1cGVyLWxvdy1jb250cmFzdDojYjk5ZGRkOy0tZWUtdGV4dC1vbi1wdXJwbGU6I2ZmZjstLWVlLXRleHQtb24tcHVycGxlLXN1cGVyLWhpZ2gtY29udHJhc3Q6I2M4YWNlYzstLWVlLXRleHQtb24tcHVycGxlLWhpZ2gtY29udHJhc3Q6I2Y5ZGRmZjstLWVlLXRleHQtb24tcHVycGxlLWxvdy1jb250cmFzdDojMDAwOy0tZWUtdGV4dC1vbi1wdXJwbGUtc3VwZXItbG93LWNvbnRyYXN0OiMyYTBlNGU7LS1lZS1jb2xvci1pbmRpZ286IzI2MjAzZDstLWVlLWNvbG9yLWluZGlnby1zdXBlci1oaWdoLWNvbnRyYXN0OiMwMDA7LS1lZS1jb2xvci1pbmRpZ28taGlnaC1jb250cmFzdDojMDYwMDFkOy0tZWUtY29sb3ItaW5kaWdvLWxvdy1jb250cmFzdDojNDY0MDVkOy0tZWUtY29sb3ItaW5kaWdvLXN1cGVyLWxvdy1jb250cmFzdDojNjY2MDdkOy0tZWUtdGV4dC1vbi1pbmRpZ286I2IxYWJjODstLWVlLXRleHQtb24taW5kaWdvLXN1cGVyLWhpZ2gtY29udHJhc3Q6Izk1OTU5NTstLWVlLXRleHQtb24taW5kaWdvLWhpZ2gtY29udHJhc3Q6IzlhOTRiMTstLWVlLXRleHQtb24taW5kaWdvLWxvdy1jb250cmFzdDojZGRkN2Y0Oy0tZWUtdGV4dC1vbi1pbmRpZ28tc3VwZXItbG93LWNvbnRyYXN0OiNmZmY7LS1lZS1jb2xvci1ibGFjazojMTgxODFhOy0tZWUtdGV4dC1vbi1ibGFjazojYTNhM2E1Oy0tZWUtY29sb3Itd2hpdGU6I2ZmZjstLWVlLXRleHQtb24td2hpdGU6IzU5NTk1OX0iLCI6cm9vdHstLWVlLWZvbnQtc2l6ZS1taWNybzowLjYwcmVtOy0tZWUtZm9udC1zaXplLXRpbnk6MC43MHJlbTstLWVlLWZvbnQtc2l6ZS1zbWFsbGVyOjAuODByZW07LS1lZS1mb250LXNpemUtc21hbGw6MC45MHJlbTstLWVlLWZvbnQtc2l6ZS1kZWZhdWx0OjEuMDByZW07LS1lZS1mb250LXNpemUtYmlnOjEuMjByZW07LS1lZS1mb250LXNpemUtYmlnZ2VyOjEuNTByZW07LS1lZS1mb250LXNpemUtaHVnZToyLjAwcmVtOy0tZWUtZm9udC1zaXplLWV4dHJlbWU6My4wMHJlbTstLWVlLWxpbmUtaGVpZ2h0LW1vZGlmaWVyOjEuNTstLWVlLXBhZGRpbmctbmFubzowLjEyNXJlbTstLWVlLXBhZGRpbmctbWljcm86MC4yNXJlbTstLWVlLXBhZGRpbmctdGlueTowLjVyZW07LS1lZS1wYWRkaW5nLXNtYWxsZXI6MC43NXJlbTstLWVlLXBhZGRpbmctc21hbGw6MXJlbTstLWVlLXBhZGRpbmctZGVmYXVsdDoxLjVyZW07LS1lZS1wYWRkaW5nLWJpZzoycmVtOy0tZWUtcGFkZGluZy1iaWdnZXI6Mi41cmVtOy0tZWUtcGFkZGluZy1odWdlOjNyZW07LS1lZS1wYWRkaW5nLWV4dHJlbWU6NHJlbTstLWVlLW1hcmdpbi1uYW5vOjAuMTI1cmVtOy0tZWUtbWFyZ2luLW1pY3JvOjAuMjVyZW07LS1lZS1tYXJnaW4tdGlueTowLjVyZW07LS1lZS1tYXJnaW4tc21hbGxlcjowLjc1cmVtOy0tZWUtbWFyZ2luLXNtYWxsOjFyZW07LS1lZS1tYXJnaW4tZGVmYXVsdDoxLjVyZW07LS1lZS1tYXJnaW4tYmlnOjJyZW07LS1lZS1tYXJnaW4tYmlnZ2VyOjIuNXJlbTstLWVlLW1hcmdpbi1odWdlOjNyZW07LS1lZS1tYXJnaW4tZXh0cmVtZTo0cmVtOy0tZWUtYm9yZGVyLXJhZGl1cy1ub25lOjBweDstLWVlLWJvcmRlci1yYWRpdXMtc21hbGw6M3B4Oy0tZWUtYm9yZGVyLXJhZGl1cy1kZWZhdWx0OjZweDstLWVlLWJvcmRlci1yYWRpdXMtYmlnOjEycHg7LS1lZS1ib3JkZXItcmFkaXVzLWJpZ2dlcjoyNHB4Oy0tZWUtYm9yZGVyLXJhZGl1cy1odWdlOjQ4cHg7LS1lZS1ib3JkZXItcmFkaXVzLWZ1bGw6MzAwMHB4fSIsIjpyb290ey0tZWUtaWNvbi1idXR0b24tc2l6ZTozNnB4fS5lc3Bycy1idXR0b24sLmVzcHJzLWJ1dHRvbjphY3RpdmUsLmVzcHJzLWJ1dHRvbjpmb2N1cywuZXNwcnMtYnV0dG9uOnZpc2l0ZWR7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLXNtYWxsKTtib3gtc2hhZG93OnZhcigtLWVlLWJveC1zaGFkb3ctdGlueSk7Ym94LXNpemluZzpjb250ZW50LWJveCFpbXBvcnRhbnQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtmb250LXdlaWdodDo0MDA7bWluLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tc21hbGxlcik7b3V0bGluZTpub25lIWltcG9ydGFudDtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctdGlueSkgdmFyKC0tZWUtcGFkZGluZy1zbWFsbCkgdmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKTt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzp2YXIoLS1lZS10ZXh0LXNoYWRvdy1pbnNldC1saWdodCk7dG9wOi0xcHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lc3Bycy1idXR0b246YWN0aXZle3RvcDowfS5lc3Bycy1idXR0b246aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmVzcHJzLWJ1dHRvbisuZXNwcnMtYnV0dG9ue21hcmdpbi1sZWZ0OnZhcigtLWVlLW1hcmdpbi1kZWZhdWx0KX0uZXNwcnMtYnV0dG9uIC50ZXh0LXdyYXB7Zm9udC13ZWlnaHQ6NzAwO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDpjYWxjKHZhcigtLWVlLXBhZGRpbmctbmFubykqLTEuNSk7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lc3Bycy1idXR0b24uZWUtbm9JY29uIC50ZXh0LXdyYXAsLmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXB7cG9zaXRpb246cmVsYXRpdmU7dG9wOnZhcigtLWVlLXBhZGRpbmctbmFubyl9LmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXB7bWFyZ2luOjAgMCAwIHZhcigtLWVlLXBhZGRpbmctc21hbGwpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZXNwcnMtYnV0dG9uIC5pbWctd3JhcCBzcGFue2xpbmUtaGVpZ2h0OjI0cHh9LmVzcHJzLWJ0bi1kZWZhdWx0e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xNSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTE0KTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTUpO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JleS0xNCl9LmVzcHJzLWJ0bi1kZWZhdWx0OmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xNCl9LmVzcHJzLWJ0bi1wcmltYXJ5e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnktbG93LWNvbnRyYXN0KTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLXByaW1hcnkpfS5lc3Bycy1idG4tcHJpbWFyeTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLXByaW1hcnktbG93LWNvbnRyYXN0KX0uZXNwcnMtYnRuLXNlY29uZGFyeXtiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLXNlY29uZGFyeSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1zZWNvbmRhcnkpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tZWUtY29sb3Itc2Vjb25kYXJ5LWxvdy1jb250cmFzdCk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1zZWNvbmRhcnkpfS5lc3Bycy1idG4tc2Vjb25kYXJ5OmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3Itc2Vjb25kYXJ5LWxvdy1jb250cmFzdCl9LmVzcHJzLWJ0bi1hY2NlbnR7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1hY2NlbnQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3ItYWNjZW50KTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWVlLWNvbG9yLWFjY2VudC1sb3ctY29udHJhc3QpO2NvbG9yOnZhcigtLWVlLXRleHQtb24tYWNjZW50KX0uZXNwcnMtYnRuLWFjY2VudDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWFjY2VudC1sb3ctY29udHJhc3QpfS5lc3Bycy1idG4tdGlueS5lc3Bycy1idXR0b24sLmVzcHJzLWJ0bi10aW55LmVzcHJzLWJ1dHRvbjphY3RpdmUsLmVzcHJzLWJ0bi10aW55LmVzcHJzLWJ1dHRvbjpmb2N1cywuZXNwcnMtYnRuLXRpbnkuZXNwcnMtYnV0dG9uOnZpc2l0ZWR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KTttaW4taGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW5hbm8pIHZhcigtLWVlLXBhZGRpbmctdGlueSkgdmFyKC0tZWUtcGFkZGluZy1taWNybyl9LmVzcHJzLWJ0bi10aW55LmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXAgc3BhbntsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtdGlueSl9LmVzcHJzLWJ0bi1zbWFsbC5lc3Bycy1idXR0b24sLmVzcHJzLWJ0bi1zbWFsbC5lc3Bycy1idXR0b246YWN0aXZlLC5lc3Bycy1idG4tc21hbGwuZXNwcnMtYnV0dG9uOmZvY3VzLC5lc3Bycy1idG4tc21hbGwuZXNwcnMtYnV0dG9uOnZpc2l0ZWR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTttaW4taGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1taWNybykgdmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKSB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpfS5lc3Bycy1idG4tc21hbGwuZXNwcnMtYnV0dG9uOm5vdCguZWUtbm9JY29uKSAudGV4dC13cmFwe3RvcDotLjFyZW19LmVzcHJzLWJ0bi1zbWFsbC5lc3Bycy1idXR0b24gLmltZy13cmFwe3RvcDouMnJlbX0uZXNwcnMtYnRuLXNtYWxsLmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXAgc3BhbntsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcil9LmVzcHJzLWJ0bi1iaWcuZXNwcnMtYnV0dG9uLC5lc3Bycy1idG4tYmlnLmVzcHJzLWJ1dHRvbjphY3RpdmUsLmVzcHJzLWJ0bi1iaWcuZXNwcnMtYnV0dG9uOmZvY3VzLC5lc3Bycy1idG4tYmlnLmVzcHJzLWJ1dHRvbjp2aXNpdGVke2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnKTttaW4taGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKSB2YXIoLS1lZS1wYWRkaW5nLWRlZmF1bHQpIHZhcigtLWVlLXBhZGRpbmctc21hbGwpfS5lc3Bycy1idG4tYmlnLmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXAgc3BhbntsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKX0uZXNwcnMtYnRuLWh1Z2UuZXNwcnMtYnV0dG9uLC5lc3Bycy1idG4taHVnZS5lc3Bycy1idXR0b246YWN0aXZlLC5lc3Bycy1idG4taHVnZS5lc3Bycy1idXR0b246Zm9jdXMsLmVzcHJzLWJ0bi1odWdlLmVzcHJzLWJ1dHRvbjp2aXNpdGVke2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTttaW4taGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1odWdlKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy1kZWZhdWx0KSB2YXIoLS1lZS1wYWRkaW5nLXNtYWxsKX0uZXNwcnMtYnRuLWh1Z2UuZXNwcnMtYnV0dG9uIC5pbWctd3JhcCBzcGFue2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lc3Bycy1idXR0b24rLmVzcHJzLWJ1dHRvbnttYXJnaW4tbGVmdDp2YXIoLS1lZS1tYXJnaW4tc21hbGxlcil9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVzcHJzLWJ1dHRvbisuZXNwcnMtYnV0dG9ue21hcmdpbi1sZWZ0OnZhcigtLWVlLW1hcmdpbi1taWNybyl9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDozNjBweCl7LmVzcHJzLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50O21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tdGlueSkgYXV0bzt3aWR0aDoxMDAlfS5lc3Bycy1idXR0b24rLmVzcHJzLWJ1dHRvbnttYXJnaW4tbGVmdDphdXRvfX0iLCIuZWUtY29udGFpbmVyLC5lZS1jb250YWluZXItYWNjZW50LC5lZS1jb250YWluZXItZGVmYXVsdCwuZWUtY29udGFpbmVyLXByaW1hcnksLmVlLWNvbnRhaW5lci1zZWNvbmRhcnl7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLWRlZmF1bHQpOy1tb3otYm9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLWRlZmF1bHQpOy13ZWJraXQtYm9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLWRlZmF1bHQpO2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtsaW5lLWhlaWdodDp2YXIoLS1lZS1saW5lLWhlaWdodC1tb2RpZmllcik7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwIHZhcigtLWVlLW1hcmdpbi1kZWZhdWx0KTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctZGVmYXVsdCl9LmVlLWNvbnRhaW5lci1kZWZhdWx0e2JhY2tncm91bmQ6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcil9LmVlLWNvbnRhaW5lci1wcmltYXJ5e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLXByaW1hcnkpfS5lZS1jb250YWluZXItc2Vjb25kYXJ5e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3Itc2Vjb25kYXJ5KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLXNlY29uZGFyeSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1zZWNvbmRhcnkpfS5lZS1jb250YWluZXItYWNjZW50e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItYWNjZW50KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWFjY2VudCk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1hY2NlbnQpfSIsIjpyb290ey0tZWUtYW5pbWF0aW9uLXNwaW46ZWUtYW5pbWF0aW9uLXNwaW4gMXMgbGluZWFyIGluZmluaXRlOy0tZWUtYW5pbWF0aW9uLXNwaW4tY2M6ZWUtYW5pbWF0aW9uLXNwaW4tY2MgMXMgbGluZWFyIGluZmluaXRlOy0tZWUtYW5pbWF0aW9uLXNwaW4tZmFzdDplZS1hbmltYXRpb24tc3BpbiAuMjVzIGVhc2UtaW4gaW5maW5pdGV9QGtleWZyYW1lcyBlZS1hbmltYXRpb24tc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19QGtleWZyYW1lcyBlZS1hbmltYXRpb24tc3Bpbi1jY3t0b3t0cmFuc2Zvcm06cm90YXRlKC0xdHVybil9fSIsIi5lZS1zdGF0dXMtY29sb3ItVE9Qe2NvbG9yOnZhcigtLWVlLWNvbG9yLW9yYW5nZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRPUHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLW9yYW5nZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1vcmFuZ2UpfS5lZS1zdGF0dXMtY29sb3ItVENNe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVENNe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItVElOe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1USU57YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItVEFCe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdvbGQpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1UQUJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1nb2xkKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWdvbGQpfS5lZS1zdGF0dXMtY29sb3ItVEZMe2NvbG9yOnZhcigtLWVlLWNvbG9yLWhvdC1waW5rKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEZMe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspO2NvbG9yOnZhcigtLWVlLXRleHQtb24taG90LXBpbmspfS5lZS1zdGF0dXMtY29sb3ItUEFQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUEFQe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItUFBOe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QUE57YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItUEZMe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdvbGQpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QRkx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1nb2xkKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWdvbGQpfS5lZS1zdGF0dXMtY29sb3ItUERDe2NvbG9yOnZhcigtLWVlLWNvbG9yLWhvdC1waW5rKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUERDe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspO2NvbG9yOnZhcigtLWVlLXRleHQtb24taG90LXBpbmspfS5lZS1zdGF0dXMtY29sb3ItUENOe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBDTntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTcpfS5lZS1zdGF0dXMtY29sb3ItUkFQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUkFQe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItUlBQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SUFB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItUldMe2NvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJXTHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1wdXJwbGUpfS5lZS1zdGF0dXMtY29sb3ItUklDe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdvbGQpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SSUN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1nb2xkKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWdvbGQpfS5lZS1zdGF0dXMtY29sb3ItUk5Be2NvbG9yOnZhcigtLWVlLWNvbG9yLW9yYW5nZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJOQXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLW9yYW5nZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1vcmFuZ2UpfS5lZS1zdGF0dXMtY29sb3ItUkRDe2NvbG9yOnZhcigtLWVlLWNvbG9yLWhvdC1waW5rKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUkRDe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspO2NvbG9yOnZhcigtLWVlLXRleHQtb24taG90LXBpbmspfS5lZS1zdGF0dXMtY29sb3ItUkNOe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJDTntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTcpfS5lZS1zdGF0dXMtY29sb3ItRFRTe2NvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUU3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1wdXJwbGUpfS5lZS1zdGF0dXMtY29sb3ItRFRBe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRBe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItRFRVe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVFV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItRFRQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdvbGQpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVFB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1nb2xkKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWdvbGQpfS5lZS1zdGF0dXMtY29sb3ItRFRDe2NvbG9yOnZhcigtLWVlLWNvbG9yLWhvdC1waW5rKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRDe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspO2NvbG9yOnZhcigtLWVlLXRleHQtb24taG90LXBpbmspfS5lZS1zdGF0dXMtY29sb3ItRFRJe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUtZ3JlZW4pfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVEl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlLWdyZWVuKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUtZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItRFRFe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURURXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTcpfS5lZS1zdGF0dXMtY29sb3ItRFRUe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUVHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTMpfS5lZS1zdGF0dXMtY29sb3ItVEtTe2NvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLU3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1wdXJwbGUpfS5lZS1zdGF0dXMtY29sb3ItVEtPe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtPe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItVEtQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1US1B7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItVEtFe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLRXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTcpfS5lZS1zdGF0dXMtY29sb3ItVEtBe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLQXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTMpfSIsIjpyb290ey0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvOjJweDstLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS10aW55OjFweDstLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS1odWdlOi0xcHg7LS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtZXh0cmVtZTotMnB4Oy0tZWUtd29yZC1zcGFjaW5nLWZvbnQtc2l6ZS1taWNybzo0cHg7LS1lZS13b3JkLXNwYWNpbmctZm9udC1zaXplLXRpbnk6MnB4Oy0tZWUtd29yZC1zcGFjaW5nLWZvbnQtc2l6ZS1zbWFsbGVyOjFweH0uZWUtZm9jdXMtcHJpb3JpdHktMXtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3Itc3VwZXItbG93LWNvbnRyYXN0KTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWV4dHJlbWUpO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtZXh0cmVtZSk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1saW5lLWhlaWdodC1tb2RpZmllcikqMC43NSl9LmVlLWZvY3VzLXByaW9yaXR5LTJ7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yLWxvdy1jb250cmFzdCk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1odWdlKTtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLWh1Z2UpO2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpKjAuODc1KX0uZWUtZm9jdXMtcHJpb3JpdHktM3tmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcil9LmVlLWZvY3VzLXByaW9yaXR5LTMsLmVlLWZvY3VzLXByaW9yaXR5LTR7bGluZS1oZWlnaHQ6dmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpfS5lZS1mb2N1cy1wcmlvcml0eS00e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnKX0uZWUtZm9jdXMtcHJpb3JpdHktNXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWxpbmUtaGVpZ2h0LW1vZGlmaWVyKX0uZWUtZm9jdXMtcHJpb3JpdHktNntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKX0uZWUtZm9jdXMtcHJpb3JpdHktNiwuZWUtZm9jdXMtcHJpb3JpdHktN3tjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3ItaGlnaC1jb250cmFzdCk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpfS5lZS1mb2N1cy1wcmlvcml0eS03e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7d29yZC1zcGFjaW5nOnZhcigtLWVlLXdvcmQtc3BhY2luZy1mb250LXNpemUtc21hbGxlcil9LmVlLWZvY3VzLXByaW9yaXR5LTh7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtdGlueSk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1saW5lLWhlaWdodC1tb2RpZmllcikqMS4xMjUpO3dvcmQtc3BhY2luZzp2YXIoLS1lZS13b3JkLXNwYWNpbmctZm9udC1zaXplLXRpbnkpfS5lZS1mb2N1cy1wcmlvcml0eS04LC5lZS1mb2N1cy1wcmlvcml0eS05e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1zdXBlci1oaWdoLWNvbnRyYXN0KX0uZWUtZm9jdXMtcHJpb3JpdHktOXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLW1pY3JvKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pO2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpKjEuMjUpO3dvcmQtc3BhY2luZzp2YXIoLS1lZS13b3JkLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc4MnB4KXsuZWUtZm9jdXMtcHJpb3JpdHktMXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWh1Z2UpfS5lZS1mb2N1cy1wcmlvcml0eS0ye2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKX0uZWUtZm9jdXMtcHJpb3JpdHktM3tmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZyl9LmVlLWZvY3VzLXByaW9yaXR5LTR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KX0uZWUtZm9jdXMtcHJpb3JpdHktNXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKX0uZWUtZm9jdXMtcHJpb3JpdHktNntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpfS5lZS1mb2N1cy1wcmlvcml0eS03LC5lZS1mb2N1cy1wcmlvcml0eS04e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSl9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lZS1mb2N1cy1wcmlvcml0eS0xe2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKX0uZWUtZm9jdXMtcHJpb3JpdHktMntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZyl9LmVlLWZvY3VzLXByaW9yaXR5LTN7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KX0uZWUtZm9jdXMtcHJpb3JpdHktNHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKX0uZWUtZm9jdXMtcHJpb3JpdHktNXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpfS5lZS1mb2N1cy1wcmlvcml0eS02LC5lZS1mb2N1cy1wcmlvcml0eS03LC5lZS1mb2N1cy1wcmlvcml0eS04e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSl9fSIsIjpyb290ey0tZWUtYm94LXNoYWRvdy10aW55OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuNik7LS1lZS1ib3gtc2hhZG93LXRpbnktZGlmZnVzZTowIDAgMXB4IHJnYmEoMCwwLDAsMC4yKTstLWVlLWJveC1zaGFkb3ctc21hbGw6MCAycHggNHB4IHJnYmEoMCwwLDAsMC42KSwwIDRweCA4cHggNHB4IHJnYmEoMCwwLDAsMC4xKTstLWVlLWJveC1zaGFkb3ctc21hbGwtZGlmZnVzZTowIDFweCAycHggcmdiYSgwLDAsMCwwLjIpOy0tZWUtYm94LXNoYWRvdy1kZWZhdWx0OjAgM3B4IDZweCByZ2JhKDAsMCwwLDAuNiksMCA4cHggMTZweCA4cHggcmdiYSgwLDAsMCwwLjA1KTstLWVlLWJveC1zaGFkb3ctZGVmYXVsdC1kaWZmdXNlOjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMik7LS1lZS1ib3gtc2hhZG93LWJpZzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC42KSwwIDAgMjRweCAxNnB4IHJnYmEoMCwwLDAsMC4wNSk7LS1lZS1ib3gtc2hhZG93LWJpZy1kaWZmdXNlOjAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMik7LS1lZS1ib3gtc2hhZG93LXdwLWljb24tYnRuLWhvdmVyOmluc2V0IDAgMCAwIDFweCB2YXIoLS1lZS1jb2xvci1ncmV5LTEwKSxpbnNldCAwIDAgMCAycHggdmFyKC0tZWUtY29sb3Itd2hpdGUpLDAgMXB4IDFweCByZ2JhKDI1LDMwLDM1LDAuMik7LS1lZS1ib3gtc2hhZG93LXdwLWljb24tYnRuLWZvY3VzOmluc2V0IDAgMCAwIDFweCB2YXIoLS1lZS1jb2xvci1ncmV5LTUpLGluc2V0IDAgMCAwIDJweCB2YXIoLS1lZS1jb2xvci13aGl0ZSk7LS1lZS10ZXh0LXNoYWRvdy1pbnNldDotMXB4IC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy0tZWUtdGV4dC1zaGFkb3ctaW5zZXQtbGlnaHQ6LTFweCAtMXB4IDAgaHNsYSgwLDAlLDEwMCUsMC4xNSk7LS1lZS10ZXh0LXNoYWRvdy1zbWFsbDowIDFweCAycHggcmdiYSgwLDAsMCwwLjUpOy0tZWUtdGV4dC1zaGFkb3ctZGVmYXVsdDowIDJweCA0cHggcmdiYSgwLDAsMCwwLjM3NSk7LS1lZS10ZXh0LXNoYWRvdy1iaWc6MCAzcHggNnB4IHJnYmEoMCwwLDAsMC4yNSl9Il0sInNvdXJjZVJvb3QiOiIifQ==*/ \ No newline at end of file diff --git a/assets/dist/eventespresso-core-css-default.a321df69280775fcbca5.dist.deps.json b/assets/dist/eventespresso-core-css-default.4502efed2df93cfbb2d1.dist.deps.json similarity index 100% rename from assets/dist/eventespresso-core-css-default.a321df69280775fcbca5.dist.deps.json rename to assets/dist/eventespresso-core-css-default.4502efed2df93cfbb2d1.dist.deps.json diff --git a/assets/dist/eventespresso-core-css-default.a321df69280775fcbca5.dist.js b/assets/dist/eventespresso-core-css-default.4502efed2df93cfbb2d1.dist.js similarity index 99% rename from assets/dist/eventespresso-core-css-default.a321df69280775fcbca5.dist.js rename to assets/dist/eventespresso-core-css-default.4502efed2df93cfbb2d1.dist.js index 29923efe5f0..6c2625d6d29 100644 --- a/assets/dist/eventespresso-core-css-default.a321df69280775fcbca5.dist.js +++ b/assets/dist/eventespresso-core-css-default.4502efed2df93cfbb2d1.dist.js @@ -228,4 +228,4 @@ module.exports = __webpack_require__(/*! ./assets/src/components/ui/styles/theme /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2J1dHRvbnMuY3NzP2MwMGIiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2NvbnRhaW5lcnMuY3NzPzlhZWQiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2VmZmVjdHMuY3NzPzE4OGIiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2VudGl0eS1zdGF0dXMuY3NzPzE4ZjkiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2ZvbnQtc3R5bGVzLmNzcz8zZDY1Iiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvcm9vdC9zaGFkb3dzLmNzcz9mODA2Iiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvdGhlbWVzL2RlZmF1bHQvY29sb3ItdmFyaWFibGVzLmNzcz8yNDRmIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvdGhlbWVzL2RlZmF1bHQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy90aGVtZXMvZGVmYXVsdC9zaXplLXZhcmlhYmxlcy5jc3M/YWVmOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFBbUIsRUFBRTtBQUNySTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNsRkE7QUFDQSxrQkFBa0IsK1k7Ozs7Ozs7Ozs7O0FDRGxCO0FBQ0Esa0JBQWtCLHlOOzs7Ozs7Ozs7OztBQ0RsQjtBQUNBLGtCQUFrQix1Rjs7Ozs7Ozs7Ozs7QUNEbEI7QUFDQSxrQkFBa0IscXVHOzs7Ozs7Ozs7OztBQ0RsQjtBQUNBLGtCQUFrQiw2WTs7Ozs7Ozs7Ozs7QUNEbEIsdUM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDTkEsdUMiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1jb3JlLWNzcy1kZWZhdWx0LmEzMjFkZjY5MjgwNzc1ZmNiY2E1LmRpc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZXNwcnMtYnV0dG9uXCI6XCJlc3Bycy1idXR0b25cIixcInRleHQtd3JhcFwiOlwidGV4dC13cmFwXCIsXCJlZS1ub0ljb25cIjpcImVlLW5vSWNvblwiLFwiaW1nLXdyYXBcIjpcImltZy13cmFwXCIsXCJlc3Bycy1idG4tZGVmYXVsdFwiOlwiZXNwcnMtYnRuLWRlZmF1bHRcIixcImVzcHJzLWJ0bi1wcmltYXJ5XCI6XCJlc3Bycy1idG4tcHJpbWFyeVwiLFwiZXNwcnMtYnRuLXNlY29uZGFyeVwiOlwiZXNwcnMtYnRuLXNlY29uZGFyeVwiLFwiZXNwcnMtYnRuLWFjY2VudFwiOlwiZXNwcnMtYnRuLWFjY2VudFwiLFwiZXNwcnMtYnRuLXRpbnlcIjpcImVzcHJzLWJ0bi10aW55XCIsXCJlc3Bycy1idG4tc21hbGxcIjpcImVzcHJzLWJ0bi1zbWFsbFwiLFwiZXNwcnMtYnRuLWJpZ1wiOlwiZXNwcnMtYnRuLWJpZ1wiLFwiZXNwcnMtYnRuLWh1Z2VcIjpcImVzcHJzLWJ0bi1odWdlXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1jb250YWluZXJcIjpcImVlLWNvbnRhaW5lclwiLFwiZWUtY29udGFpbmVyLWFjY2VudFwiOlwiZWUtY29udGFpbmVyLWFjY2VudFwiLFwiZWUtY29udGFpbmVyLWRlZmF1bHRcIjpcImVlLWNvbnRhaW5lci1kZWZhdWx0XCIsXCJlZS1jb250YWluZXItcHJpbWFyeVwiOlwiZWUtY29udGFpbmVyLXByaW1hcnlcIixcImVlLWNvbnRhaW5lci1zZWNvbmRhcnlcIjpcImVlLWNvbnRhaW5lci1zZWNvbmRhcnlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWFuaW1hdGlvbi1zcGluXCI6XCJlZS1hbmltYXRpb24tc3BpblwiLFwiZWUtYW5pbWF0aW9uLXNwaW4tY2NcIjpcImVlLWFuaW1hdGlvbi1zcGluLWNjXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1zdGF0dXMtY29sb3ItVE9QXCI6XCJlZS1zdGF0dXMtY29sb3ItVE9QXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1UT1BcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRPUFwiLFwiZWUtc3RhdHVzLWNvbG9yLVRDTVwiOlwiZWUtc3RhdHVzLWNvbG9yLVRDTVwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVENNXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1UQ01cIixcImVlLXN0YXR1cy1jb2xvci1USU5cIjpcImVlLXN0YXR1cy1jb2xvci1USU5cIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRJTlwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVElOXCIsXCJlZS1zdGF0dXMtY29sb3ItVEFCXCI6XCJlZS1zdGF0dXMtY29sb3ItVEFCXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1UQUJcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRBQlwiLFwiZWUtc3RhdHVzLWNvbG9yLVRGTFwiOlwiZWUtc3RhdHVzLWNvbG9yLVRGTFwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEZMXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1URkxcIixcImVlLXN0YXR1cy1jb2xvci1QQVBcIjpcImVlLXN0YXR1cy1jb2xvci1QQVBcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBBUFwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUEFQXCIsXCJlZS1zdGF0dXMtY29sb3ItUFBOXCI6XCJlZS1zdGF0dXMtY29sb3ItUFBOXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QUE5cIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBQTlwiLFwiZWUtc3RhdHVzLWNvbG9yLVBGTFwiOlwiZWUtc3RhdHVzLWNvbG9yLVBGTFwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUEZMXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QRkxcIixcImVlLXN0YXR1cy1jb2xvci1QRENcIjpcImVlLXN0YXR1cy1jb2xvci1QRENcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBEQ1wiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUERDXCIsXCJlZS1zdGF0dXMtY29sb3ItUENOXCI6XCJlZS1zdGF0dXMtY29sb3ItUENOXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QQ05cIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBDTlwiLFwiZWUtc3RhdHVzLWNvbG9yLVJBUFwiOlwiZWUtc3RhdHVzLWNvbG9yLVJBUFwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUkFQXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SQVBcIixcImVlLXN0YXR1cy1jb2xvci1SUFBcIjpcImVlLXN0YXR1cy1jb2xvci1SUFBcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJQUFwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUlBQXCIsXCJlZS1zdGF0dXMtY29sb3ItUldMXCI6XCJlZS1zdGF0dXMtY29sb3ItUldMXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SV0xcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJXTFwiLFwiZWUtc3RhdHVzLWNvbG9yLVJJQ1wiOlwiZWUtc3RhdHVzLWNvbG9yLVJJQ1wiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUklDXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SSUNcIixcImVlLXN0YXR1cy1jb2xvci1STkFcIjpcImVlLXN0YXR1cy1jb2xvci1STkFcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJOQVwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUk5BXCIsXCJlZS1zdGF0dXMtY29sb3ItUkRDXCI6XCJlZS1zdGF0dXMtY29sb3ItUkRDXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SRENcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJEQ1wiLFwiZWUtc3RhdHVzLWNvbG9yLVJDTlwiOlwiZWUtc3RhdHVzLWNvbG9yLVJDTlwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUkNOXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SQ05cIixcImVlLXN0YXR1cy1jb2xvci1EVFNcIjpcImVlLXN0YXR1cy1jb2xvci1EVFNcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUU1wiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRTXCIsXCJlZS1zdGF0dXMtY29sb3ItRFRBXCI6XCJlZS1zdGF0dXMtY29sb3ItRFRBXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVEFcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUQVwiLFwiZWUtc3RhdHVzLWNvbG9yLURUVVwiOlwiZWUtc3RhdHVzLWNvbG9yLURUVVwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRVXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVFVcIixcImVlLXN0YXR1cy1jb2xvci1EVFBcIjpcImVlLXN0YXR1cy1jb2xvci1EVFBcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUUFwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRQXCIsXCJlZS1zdGF0dXMtY29sb3ItRFRDXCI6XCJlZS1zdGF0dXMtY29sb3ItRFRDXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVENcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUQ1wiLFwiZWUtc3RhdHVzLWNvbG9yLURUSVwiOlwiZWUtc3RhdHVzLWNvbG9yLURUSVwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRJXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVElcIixcImVlLXN0YXR1cy1jb2xvci1EVEVcIjpcImVlLXN0YXR1cy1jb2xvci1EVEVcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURURVwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRFXCIsXCJlZS1zdGF0dXMtY29sb3ItRFRUXCI6XCJlZS1zdGF0dXMtY29sb3ItRFRUXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVFRcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUVFwiLFwiZWUtc3RhdHVzLWNvbG9yLVRLU1wiOlwiZWUtc3RhdHVzLWNvbG9yLVRLU1wiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtTXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1US1NcIixcImVlLXN0YXR1cy1jb2xvci1US09cIjpcImVlLXN0YXR1cy1jb2xvci1US09cIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLT1wiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtPXCIsXCJlZS1zdGF0dXMtY29sb3ItVEtQXCI6XCJlZS1zdGF0dXMtY29sb3ItVEtQXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1US1BcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLUFwiLFwiZWUtc3RhdHVzLWNvbG9yLVRLRVwiOlwiZWUtc3RhdHVzLWNvbG9yLVRLRVwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtFXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1US0VcIixcImVlLXN0YXR1cy1jb2xvci1US0FcIjpcImVlLXN0YXR1cy1jb2xvci1US0FcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLQVwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtBXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1mb2N1cy1wcmlvcml0eS0xXCI6XCJlZS1mb2N1cy1wcmlvcml0eS0xXCIsXCJlZS1mb2N1cy1wcmlvcml0eS0yXCI6XCJlZS1mb2N1cy1wcmlvcml0eS0yXCIsXCJlZS1mb2N1cy1wcmlvcml0eS0zXCI6XCJlZS1mb2N1cy1wcmlvcml0eS0zXCIsXCJlZS1mb2N1cy1wcmlvcml0eS00XCI6XCJlZS1mb2N1cy1wcmlvcml0eS00XCIsXCJlZS1mb2N1cy1wcmlvcml0eS01XCI6XCJlZS1mb2N1cy1wcmlvcml0eS01XCIsXCJlZS1mb2N1cy1wcmlvcml0eS02XCI6XCJlZS1mb2N1cy1wcmlvcml0eS02XCIsXCJlZS1mb2N1cy1wcmlvcml0eS03XCI6XCJlZS1mb2N1cy1wcmlvcml0eS03XCIsXCJlZS1mb2N1cy1wcmlvcml0eS04XCI6XCJlZS1mb2N1cy1wcmlvcml0eS04XCIsXCJlZS1mb2N1cy1wcmlvcml0eS05XCI6XCJlZS1mb2N1cy1wcmlvcml0eS05XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCAnLi9jb2xvci12YXJpYWJsZXMuY3NzJztcbmltcG9ydCAnLi9zaXplLXZhcmlhYmxlcy5jc3MnO1xuaW1wb3J0ICcuLi8uLi9yb290L2J1dHRvbnMuY3NzJztcbmltcG9ydCAnLi4vLi4vcm9vdC9jb250YWluZXJzLmNzcyc7XG5pbXBvcnQgJy4uLy4uL3Jvb3QvZWZmZWN0cy5jc3MnO1xuaW1wb3J0ICcuLi8uLi9yb290L2VudGl0eS1zdGF0dXMuY3NzJztcbmltcG9ydCAnLi4vLi4vcm9vdC9mb250LXN0eWxlcy5jc3MnO1xuaW1wb3J0ICcuLi8uLi9yb290L3NoYWRvd3MuY3NzJzsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2J1dHRvbnMuY3NzP2MwMGIiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2NvbnRhaW5lcnMuY3NzPzlhZWQiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2VmZmVjdHMuY3NzPzE4OGIiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2VudGl0eS1zdGF0dXMuY3NzPzE4ZjkiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2ZvbnQtc3R5bGVzLmNzcz8zZDY1Iiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvcm9vdC9zaGFkb3dzLmNzcz9mODA2Iiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvdGhlbWVzL2RlZmF1bHQvY29sb3ItdmFyaWFibGVzLmNzcz8yNDRmIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvdGhlbWVzL2RlZmF1bHQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy90aGVtZXMvZGVmYXVsdC9zaXplLXZhcmlhYmxlcy5jc3M/YWVmOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFBbUIsRUFBRTtBQUNySTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNsRkE7QUFDQSxrQkFBa0IsK1k7Ozs7Ozs7Ozs7O0FDRGxCO0FBQ0Esa0JBQWtCLHlOOzs7Ozs7Ozs7OztBQ0RsQjtBQUNBLGtCQUFrQix1Rjs7Ozs7Ozs7Ozs7QUNEbEI7QUFDQSxrQkFBa0IscXVHOzs7Ozs7Ozs7OztBQ0RsQjtBQUNBLGtCQUFrQiw2WTs7Ozs7Ozs7Ozs7QUNEbEIsdUM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDTkEsdUMiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1jb3JlLWNzcy1kZWZhdWx0LjQ1MDJlZmVkMmRmOTNjZmJiMmQxLmRpc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZXNwcnMtYnV0dG9uXCI6XCJlc3Bycy1idXR0b25cIixcInRleHQtd3JhcFwiOlwidGV4dC13cmFwXCIsXCJlZS1ub0ljb25cIjpcImVlLW5vSWNvblwiLFwiaW1nLXdyYXBcIjpcImltZy13cmFwXCIsXCJlc3Bycy1idG4tZGVmYXVsdFwiOlwiZXNwcnMtYnRuLWRlZmF1bHRcIixcImVzcHJzLWJ0bi1wcmltYXJ5XCI6XCJlc3Bycy1idG4tcHJpbWFyeVwiLFwiZXNwcnMtYnRuLXNlY29uZGFyeVwiOlwiZXNwcnMtYnRuLXNlY29uZGFyeVwiLFwiZXNwcnMtYnRuLWFjY2VudFwiOlwiZXNwcnMtYnRuLWFjY2VudFwiLFwiZXNwcnMtYnRuLXRpbnlcIjpcImVzcHJzLWJ0bi10aW55XCIsXCJlc3Bycy1idG4tc21hbGxcIjpcImVzcHJzLWJ0bi1zbWFsbFwiLFwiZXNwcnMtYnRuLWJpZ1wiOlwiZXNwcnMtYnRuLWJpZ1wiLFwiZXNwcnMtYnRuLWh1Z2VcIjpcImVzcHJzLWJ0bi1odWdlXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1jb250YWluZXJcIjpcImVlLWNvbnRhaW5lclwiLFwiZWUtY29udGFpbmVyLWFjY2VudFwiOlwiZWUtY29udGFpbmVyLWFjY2VudFwiLFwiZWUtY29udGFpbmVyLWRlZmF1bHRcIjpcImVlLWNvbnRhaW5lci1kZWZhdWx0XCIsXCJlZS1jb250YWluZXItcHJpbWFyeVwiOlwiZWUtY29udGFpbmVyLXByaW1hcnlcIixcImVlLWNvbnRhaW5lci1zZWNvbmRhcnlcIjpcImVlLWNvbnRhaW5lci1zZWNvbmRhcnlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWFuaW1hdGlvbi1zcGluXCI6XCJlZS1hbmltYXRpb24tc3BpblwiLFwiZWUtYW5pbWF0aW9uLXNwaW4tY2NcIjpcImVlLWFuaW1hdGlvbi1zcGluLWNjXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1zdGF0dXMtY29sb3ItVE9QXCI6XCJlZS1zdGF0dXMtY29sb3ItVE9QXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1UT1BcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRPUFwiLFwiZWUtc3RhdHVzLWNvbG9yLVRDTVwiOlwiZWUtc3RhdHVzLWNvbG9yLVRDTVwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVENNXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1UQ01cIixcImVlLXN0YXR1cy1jb2xvci1USU5cIjpcImVlLXN0YXR1cy1jb2xvci1USU5cIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRJTlwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVElOXCIsXCJlZS1zdGF0dXMtY29sb3ItVEFCXCI6XCJlZS1zdGF0dXMtY29sb3ItVEFCXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1UQUJcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRBQlwiLFwiZWUtc3RhdHVzLWNvbG9yLVRGTFwiOlwiZWUtc3RhdHVzLWNvbG9yLVRGTFwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEZMXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1URkxcIixcImVlLXN0YXR1cy1jb2xvci1QQVBcIjpcImVlLXN0YXR1cy1jb2xvci1QQVBcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBBUFwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUEFQXCIsXCJlZS1zdGF0dXMtY29sb3ItUFBOXCI6XCJlZS1zdGF0dXMtY29sb3ItUFBOXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QUE5cIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBQTlwiLFwiZWUtc3RhdHVzLWNvbG9yLVBGTFwiOlwiZWUtc3RhdHVzLWNvbG9yLVBGTFwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUEZMXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QRkxcIixcImVlLXN0YXR1cy1jb2xvci1QRENcIjpcImVlLXN0YXR1cy1jb2xvci1QRENcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBEQ1wiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUERDXCIsXCJlZS1zdGF0dXMtY29sb3ItUENOXCI6XCJlZS1zdGF0dXMtY29sb3ItUENOXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QQ05cIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBDTlwiLFwiZWUtc3RhdHVzLWNvbG9yLVJBUFwiOlwiZWUtc3RhdHVzLWNvbG9yLVJBUFwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUkFQXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SQVBcIixcImVlLXN0YXR1cy1jb2xvci1SUFBcIjpcImVlLXN0YXR1cy1jb2xvci1SUFBcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJQUFwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUlBQXCIsXCJlZS1zdGF0dXMtY29sb3ItUldMXCI6XCJlZS1zdGF0dXMtY29sb3ItUldMXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SV0xcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJXTFwiLFwiZWUtc3RhdHVzLWNvbG9yLVJJQ1wiOlwiZWUtc3RhdHVzLWNvbG9yLVJJQ1wiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUklDXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SSUNcIixcImVlLXN0YXR1cy1jb2xvci1STkFcIjpcImVlLXN0YXR1cy1jb2xvci1STkFcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJOQVwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUk5BXCIsXCJlZS1zdGF0dXMtY29sb3ItUkRDXCI6XCJlZS1zdGF0dXMtY29sb3ItUkRDXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SRENcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJEQ1wiLFwiZWUtc3RhdHVzLWNvbG9yLVJDTlwiOlwiZWUtc3RhdHVzLWNvbG9yLVJDTlwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUkNOXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SQ05cIixcImVlLXN0YXR1cy1jb2xvci1EVFNcIjpcImVlLXN0YXR1cy1jb2xvci1EVFNcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUU1wiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRTXCIsXCJlZS1zdGF0dXMtY29sb3ItRFRBXCI6XCJlZS1zdGF0dXMtY29sb3ItRFRBXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVEFcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUQVwiLFwiZWUtc3RhdHVzLWNvbG9yLURUVVwiOlwiZWUtc3RhdHVzLWNvbG9yLURUVVwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRVXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVFVcIixcImVlLXN0YXR1cy1jb2xvci1EVFBcIjpcImVlLXN0YXR1cy1jb2xvci1EVFBcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUUFwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRQXCIsXCJlZS1zdGF0dXMtY29sb3ItRFRDXCI6XCJlZS1zdGF0dXMtY29sb3ItRFRDXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVENcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUQ1wiLFwiZWUtc3RhdHVzLWNvbG9yLURUSVwiOlwiZWUtc3RhdHVzLWNvbG9yLURUSVwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRJXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVElcIixcImVlLXN0YXR1cy1jb2xvci1EVEVcIjpcImVlLXN0YXR1cy1jb2xvci1EVEVcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURURVwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRFXCIsXCJlZS1zdGF0dXMtY29sb3ItRFRUXCI6XCJlZS1zdGF0dXMtY29sb3ItRFRUXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVFRcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUVFwiLFwiZWUtc3RhdHVzLWNvbG9yLVRLU1wiOlwiZWUtc3RhdHVzLWNvbG9yLVRLU1wiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtTXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1US1NcIixcImVlLXN0YXR1cy1jb2xvci1US09cIjpcImVlLXN0YXR1cy1jb2xvci1US09cIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLT1wiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtPXCIsXCJlZS1zdGF0dXMtY29sb3ItVEtQXCI6XCJlZS1zdGF0dXMtY29sb3ItVEtQXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1US1BcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLUFwiLFwiZWUtc3RhdHVzLWNvbG9yLVRLRVwiOlwiZWUtc3RhdHVzLWNvbG9yLVRLRVwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtFXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1US0VcIixcImVlLXN0YXR1cy1jb2xvci1US0FcIjpcImVlLXN0YXR1cy1jb2xvci1US0FcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLQVwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtBXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1mb2N1cy1wcmlvcml0eS0xXCI6XCJlZS1mb2N1cy1wcmlvcml0eS0xXCIsXCJlZS1mb2N1cy1wcmlvcml0eS0yXCI6XCJlZS1mb2N1cy1wcmlvcml0eS0yXCIsXCJlZS1mb2N1cy1wcmlvcml0eS0zXCI6XCJlZS1mb2N1cy1wcmlvcml0eS0zXCIsXCJlZS1mb2N1cy1wcmlvcml0eS00XCI6XCJlZS1mb2N1cy1wcmlvcml0eS00XCIsXCJlZS1mb2N1cy1wcmlvcml0eS01XCI6XCJlZS1mb2N1cy1wcmlvcml0eS01XCIsXCJlZS1mb2N1cy1wcmlvcml0eS02XCI6XCJlZS1mb2N1cy1wcmlvcml0eS02XCIsXCJlZS1mb2N1cy1wcmlvcml0eS03XCI6XCJlZS1mb2N1cy1wcmlvcml0eS03XCIsXCJlZS1mb2N1cy1wcmlvcml0eS04XCI6XCJlZS1mb2N1cy1wcmlvcml0eS04XCIsXCJlZS1mb2N1cy1wcmlvcml0eS05XCI6XCJlZS1mb2N1cy1wcmlvcml0eS05XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCAnLi9jb2xvci12YXJpYWJsZXMuY3NzJztcbmltcG9ydCAnLi9zaXplLXZhcmlhYmxlcy5jc3MnO1xuaW1wb3J0ICcuLi8uLi9yb290L2J1dHRvbnMuY3NzJztcbmltcG9ydCAnLi4vLi4vcm9vdC9jb250YWluZXJzLmNzcyc7XG5pbXBvcnQgJy4uLy4uL3Jvb3QvZWZmZWN0cy5jc3MnO1xuaW1wb3J0ICcuLi8uLi9yb290L2VudGl0eS1zdGF0dXMuY3NzJztcbmltcG9ydCAnLi4vLi4vcm9vdC9mb250LXN0eWxlcy5jc3MnO1xuaW1wb3J0ICcuLi8uLi9yb290L3NoYWRvd3MuY3NzJzsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/assets/dist/eventespresso-core-css-default.5900e7e854f5e16f35dc.dist.deps.json b/assets/dist/eventespresso-core-css-default.5900e7e854f5e16f35dc.dist.deps.json new file mode 100644 index 00000000000..0637a088a01 --- /dev/null +++ b/assets/dist/eventespresso-core-css-default.5900e7e854f5e16f35dc.dist.deps.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/assets/dist/eventespresso-core-css-default.5900e7e854f5e16f35dc.dist.js b/assets/dist/eventespresso-core-css-default.5900e7e854f5e16f35dc.dist.js new file mode 100644 index 00000000000..4b5a3d5093e --- /dev/null +++ b/assets/dist/eventespresso-core-css-default.5900e7e854f5e16f35dc.dist.js @@ -0,0 +1,231 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./assets/src/components/ui/styles/root/buttons.css": +/*!**********************************************************!*\ + !*** ./assets/src/components/ui/styles/root/buttons.css ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin +module.exports = {"esprs-button":"esprs-button","text-wrap":"text-wrap","ee-noIcon":"ee-noIcon","img-wrap":"img-wrap","esprs-btn-default":"esprs-btn-default","esprs-btn-primary":"esprs-btn-primary","esprs-btn-secondary":"esprs-btn-secondary","esprs-btn-accent":"esprs-btn-accent","esprs-btn-tiny":"esprs-btn-tiny","esprs-btn-small":"esprs-btn-small","esprs-btn-big":"esprs-btn-big","esprs-btn-huge":"esprs-btn-huge"}; + +/***/ }), + +/***/ "./assets/src/components/ui/styles/root/containers.css": +/*!*************************************************************!*\ + !*** ./assets/src/components/ui/styles/root/containers.css ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin +module.exports = {"ee-container":"ee-container","ee-container-accent":"ee-container-accent","ee-container-default":"ee-container-default","ee-container-primary":"ee-container-primary","ee-container-secondary":"ee-container-secondary"}; + +/***/ }), + +/***/ "./assets/src/components/ui/styles/root/effects.css": +/*!**********************************************************!*\ + !*** ./assets/src/components/ui/styles/root/effects.css ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin +module.exports = {"ee-animation-spin":"ee-animation-spin","ee-animation-spin-cc":"ee-animation-spin-cc"}; + +/***/ }), + +/***/ "./assets/src/components/ui/styles/root/entity-status.css": +/*!****************************************************************!*\ + !*** ./assets/src/components/ui/styles/root/entity-status.css ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin +module.exports = {"ee-status-color-TOP":"ee-status-color-TOP","ee-status-background-color-TOP":"ee-status-background-color-TOP","ee-status-color-TCM":"ee-status-color-TCM","ee-status-background-color-TCM":"ee-status-background-color-TCM","ee-status-color-TIN":"ee-status-color-TIN","ee-status-background-color-TIN":"ee-status-background-color-TIN","ee-status-color-TAB":"ee-status-color-TAB","ee-status-background-color-TAB":"ee-status-background-color-TAB","ee-status-color-TFL":"ee-status-color-TFL","ee-status-background-color-TFL":"ee-status-background-color-TFL","ee-status-color-PAP":"ee-status-color-PAP","ee-status-background-color-PAP":"ee-status-background-color-PAP","ee-status-color-PPN":"ee-status-color-PPN","ee-status-background-color-PPN":"ee-status-background-color-PPN","ee-status-color-PFL":"ee-status-color-PFL","ee-status-background-color-PFL":"ee-status-background-color-PFL","ee-status-color-PDC":"ee-status-color-PDC","ee-status-background-color-PDC":"ee-status-background-color-PDC","ee-status-color-PCN":"ee-status-color-PCN","ee-status-background-color-PCN":"ee-status-background-color-PCN","ee-status-color-RAP":"ee-status-color-RAP","ee-status-background-color-RAP":"ee-status-background-color-RAP","ee-status-color-RPP":"ee-status-color-RPP","ee-status-background-color-RPP":"ee-status-background-color-RPP","ee-status-color-RWL":"ee-status-color-RWL","ee-status-background-color-RWL":"ee-status-background-color-RWL","ee-status-color-RIC":"ee-status-color-RIC","ee-status-background-color-RIC":"ee-status-background-color-RIC","ee-status-color-RNA":"ee-status-color-RNA","ee-status-background-color-RNA":"ee-status-background-color-RNA","ee-status-color-RDC":"ee-status-color-RDC","ee-status-background-color-RDC":"ee-status-background-color-RDC","ee-status-color-RCN":"ee-status-color-RCN","ee-status-background-color-RCN":"ee-status-background-color-RCN","ee-status-color-DTS":"ee-status-color-DTS","ee-status-background-color-DTS":"ee-status-background-color-DTS","ee-status-color-DTA":"ee-status-color-DTA","ee-status-background-color-DTA":"ee-status-background-color-DTA","ee-status-color-DTU":"ee-status-color-DTU","ee-status-background-color-DTU":"ee-status-background-color-DTU","ee-status-color-DTP":"ee-status-color-DTP","ee-status-background-color-DTP":"ee-status-background-color-DTP","ee-status-color-DTC":"ee-status-color-DTC","ee-status-background-color-DTC":"ee-status-background-color-DTC","ee-status-color-DTI":"ee-status-color-DTI","ee-status-background-color-DTI":"ee-status-background-color-DTI","ee-status-color-DTE":"ee-status-color-DTE","ee-status-background-color-DTE":"ee-status-background-color-DTE","ee-status-color-DTT":"ee-status-color-DTT","ee-status-background-color-DTT":"ee-status-background-color-DTT","ee-status-color-TKS":"ee-status-color-TKS","ee-status-background-color-TKS":"ee-status-background-color-TKS","ee-status-color-TKO":"ee-status-color-TKO","ee-status-background-color-TKO":"ee-status-background-color-TKO","ee-status-color-TKP":"ee-status-color-TKP","ee-status-background-color-TKP":"ee-status-background-color-TKP","ee-status-color-TKE":"ee-status-color-TKE","ee-status-background-color-TKE":"ee-status-background-color-TKE","ee-status-color-TKA":"ee-status-color-TKA","ee-status-background-color-TKA":"ee-status-background-color-TKA"}; + +/***/ }), + +/***/ "./assets/src/components/ui/styles/root/font-styles.css": +/*!**************************************************************!*\ + !*** ./assets/src/components/ui/styles/root/font-styles.css ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin +module.exports = {"ee-focus-priority-1":"ee-focus-priority-1","ee-focus-priority-2":"ee-focus-priority-2","ee-focus-priority-3":"ee-focus-priority-3","ee-focus-priority-4":"ee-focus-priority-4","ee-focus-priority-5":"ee-focus-priority-5","ee-focus-priority-6":"ee-focus-priority-6","ee-focus-priority-7":"ee-focus-priority-7","ee-focus-priority-8":"ee-focus-priority-8","ee-focus-priority-9":"ee-focus-priority-9"}; + +/***/ }), + +/***/ "./assets/src/components/ui/styles/root/shadows.css": +/*!**********************************************************!*\ + !*** ./assets/src/components/ui/styles/root/shadows.css ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), + +/***/ "./assets/src/components/ui/styles/themes/default/color-variables.css": +/*!****************************************************************************!*\ + !*** ./assets/src/components/ui/styles/themes/default/color-variables.css ***! + \****************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), + +/***/ "./assets/src/components/ui/styles/themes/default/index.js": +/*!*****************************************************************!*\ + !*** ./assets/src/components/ui/styles/themes/default/index.js ***! + \*****************************************************************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _color_variables_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color-variables.css */ "./assets/src/components/ui/styles/themes/default/color-variables.css"); +/* harmony import */ var _color_variables_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_color_variables_css__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _size_variables_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./size-variables.css */ "./assets/src/components/ui/styles/themes/default/size-variables.css"); +/* harmony import */ var _size_variables_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_size_variables_css__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _root_buttons_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../root/buttons.css */ "./assets/src/components/ui/styles/root/buttons.css"); +/* harmony import */ var _root_buttons_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_root_buttons_css__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _root_containers_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../root/containers.css */ "./assets/src/components/ui/styles/root/containers.css"); +/* harmony import */ var _root_containers_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_root_containers_css__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _root_effects_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../root/effects.css */ "./assets/src/components/ui/styles/root/effects.css"); +/* harmony import */ var _root_effects_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_root_effects_css__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _root_entity_status_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../root/entity-status.css */ "./assets/src/components/ui/styles/root/entity-status.css"); +/* harmony import */ var _root_entity_status_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_root_entity_status_css__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _root_font_styles_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../root/font-styles.css */ "./assets/src/components/ui/styles/root/font-styles.css"); +/* harmony import */ var _root_font_styles_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_root_font_styles_css__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _root_shadows_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../root/shadows.css */ "./assets/src/components/ui/styles/root/shadows.css"); +/* harmony import */ var _root_shadows_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_root_shadows_css__WEBPACK_IMPORTED_MODULE_7__); + + + + + + + + + +/***/ }), + +/***/ "./assets/src/components/ui/styles/themes/default/size-variables.css": +/*!***************************************************************************!*\ + !*** ./assets/src/components/ui/styles/themes/default/size-variables.css ***! + \***************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), + +/***/ 0: +/*!***********************************************************************!*\ + !*** multi ./assets/src/components/ui/styles/themes/default/index.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./assets/src/components/ui/styles/themes/default/index.js */"./assets/src/components/ui/styles/themes/default/index.js"); + + +/***/ }) + +/******/ }); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2J1dHRvbnMuY3NzP2MwMGIiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2NvbnRhaW5lcnMuY3NzPzlhZWQiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2VmZmVjdHMuY3NzPzE4OGIiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2VudGl0eS1zdGF0dXMuY3NzPzE4ZjkiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2ZvbnQtc3R5bGVzLmNzcz8zZDY1Iiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvcm9vdC9zaGFkb3dzLmNzcz9mODA2Iiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvdGhlbWVzL2RlZmF1bHQvY29sb3ItdmFyaWFibGVzLmNzcz8yNDRmIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvdGhlbWVzL2RlZmF1bHQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy90aGVtZXMvZGVmYXVsdC9zaXplLXZhcmlhYmxlcy5jc3M/YWVmOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFBbUIsRUFBRTtBQUNySTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNsRkE7QUFDQSxrQkFBa0IsK1k7Ozs7Ozs7Ozs7O0FDRGxCO0FBQ0Esa0JBQWtCLHlOOzs7Ozs7Ozs7OztBQ0RsQjtBQUNBLGtCQUFrQix1Rjs7Ozs7Ozs7Ozs7QUNEbEI7QUFDQSxrQkFBa0IscXVHOzs7Ozs7Ozs7OztBQ0RsQjtBQUNBLGtCQUFrQiw2WTs7Ozs7Ozs7Ozs7QUNEbEIsdUM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDTkEsdUMiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1jb3JlLWNzcy1kZWZhdWx0LjU5MDBlN2U4NTRmNWUxNmYzNWRjLmRpc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZXNwcnMtYnV0dG9uXCI6XCJlc3Bycy1idXR0b25cIixcInRleHQtd3JhcFwiOlwidGV4dC13cmFwXCIsXCJlZS1ub0ljb25cIjpcImVlLW5vSWNvblwiLFwiaW1nLXdyYXBcIjpcImltZy13cmFwXCIsXCJlc3Bycy1idG4tZGVmYXVsdFwiOlwiZXNwcnMtYnRuLWRlZmF1bHRcIixcImVzcHJzLWJ0bi1wcmltYXJ5XCI6XCJlc3Bycy1idG4tcHJpbWFyeVwiLFwiZXNwcnMtYnRuLXNlY29uZGFyeVwiOlwiZXNwcnMtYnRuLXNlY29uZGFyeVwiLFwiZXNwcnMtYnRuLWFjY2VudFwiOlwiZXNwcnMtYnRuLWFjY2VudFwiLFwiZXNwcnMtYnRuLXRpbnlcIjpcImVzcHJzLWJ0bi10aW55XCIsXCJlc3Bycy1idG4tc21hbGxcIjpcImVzcHJzLWJ0bi1zbWFsbFwiLFwiZXNwcnMtYnRuLWJpZ1wiOlwiZXNwcnMtYnRuLWJpZ1wiLFwiZXNwcnMtYnRuLWh1Z2VcIjpcImVzcHJzLWJ0bi1odWdlXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1jb250YWluZXJcIjpcImVlLWNvbnRhaW5lclwiLFwiZWUtY29udGFpbmVyLWFjY2VudFwiOlwiZWUtY29udGFpbmVyLWFjY2VudFwiLFwiZWUtY29udGFpbmVyLWRlZmF1bHRcIjpcImVlLWNvbnRhaW5lci1kZWZhdWx0XCIsXCJlZS1jb250YWluZXItcHJpbWFyeVwiOlwiZWUtY29udGFpbmVyLXByaW1hcnlcIixcImVlLWNvbnRhaW5lci1zZWNvbmRhcnlcIjpcImVlLWNvbnRhaW5lci1zZWNvbmRhcnlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWFuaW1hdGlvbi1zcGluXCI6XCJlZS1hbmltYXRpb24tc3BpblwiLFwiZWUtYW5pbWF0aW9uLXNwaW4tY2NcIjpcImVlLWFuaW1hdGlvbi1zcGluLWNjXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1zdGF0dXMtY29sb3ItVE9QXCI6XCJlZS1zdGF0dXMtY29sb3ItVE9QXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1UT1BcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRPUFwiLFwiZWUtc3RhdHVzLWNvbG9yLVRDTVwiOlwiZWUtc3RhdHVzLWNvbG9yLVRDTVwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVENNXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1UQ01cIixcImVlLXN0YXR1cy1jb2xvci1USU5cIjpcImVlLXN0YXR1cy1jb2xvci1USU5cIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRJTlwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVElOXCIsXCJlZS1zdGF0dXMtY29sb3ItVEFCXCI6XCJlZS1zdGF0dXMtY29sb3ItVEFCXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1UQUJcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRBQlwiLFwiZWUtc3RhdHVzLWNvbG9yLVRGTFwiOlwiZWUtc3RhdHVzLWNvbG9yLVRGTFwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEZMXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1URkxcIixcImVlLXN0YXR1cy1jb2xvci1QQVBcIjpcImVlLXN0YXR1cy1jb2xvci1QQVBcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBBUFwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUEFQXCIsXCJlZS1zdGF0dXMtY29sb3ItUFBOXCI6XCJlZS1zdGF0dXMtY29sb3ItUFBOXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QUE5cIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBQTlwiLFwiZWUtc3RhdHVzLWNvbG9yLVBGTFwiOlwiZWUtc3RhdHVzLWNvbG9yLVBGTFwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUEZMXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QRkxcIixcImVlLXN0YXR1cy1jb2xvci1QRENcIjpcImVlLXN0YXR1cy1jb2xvci1QRENcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBEQ1wiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUERDXCIsXCJlZS1zdGF0dXMtY29sb3ItUENOXCI6XCJlZS1zdGF0dXMtY29sb3ItUENOXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QQ05cIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBDTlwiLFwiZWUtc3RhdHVzLWNvbG9yLVJBUFwiOlwiZWUtc3RhdHVzLWNvbG9yLVJBUFwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUkFQXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SQVBcIixcImVlLXN0YXR1cy1jb2xvci1SUFBcIjpcImVlLXN0YXR1cy1jb2xvci1SUFBcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJQUFwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUlBQXCIsXCJlZS1zdGF0dXMtY29sb3ItUldMXCI6XCJlZS1zdGF0dXMtY29sb3ItUldMXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SV0xcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJXTFwiLFwiZWUtc3RhdHVzLWNvbG9yLVJJQ1wiOlwiZWUtc3RhdHVzLWNvbG9yLVJJQ1wiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUklDXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SSUNcIixcImVlLXN0YXR1cy1jb2xvci1STkFcIjpcImVlLXN0YXR1cy1jb2xvci1STkFcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJOQVwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUk5BXCIsXCJlZS1zdGF0dXMtY29sb3ItUkRDXCI6XCJlZS1zdGF0dXMtY29sb3ItUkRDXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SRENcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJEQ1wiLFwiZWUtc3RhdHVzLWNvbG9yLVJDTlwiOlwiZWUtc3RhdHVzLWNvbG9yLVJDTlwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUkNOXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SQ05cIixcImVlLXN0YXR1cy1jb2xvci1EVFNcIjpcImVlLXN0YXR1cy1jb2xvci1EVFNcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUU1wiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRTXCIsXCJlZS1zdGF0dXMtY29sb3ItRFRBXCI6XCJlZS1zdGF0dXMtY29sb3ItRFRBXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVEFcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUQVwiLFwiZWUtc3RhdHVzLWNvbG9yLURUVVwiOlwiZWUtc3RhdHVzLWNvbG9yLURUVVwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRVXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVFVcIixcImVlLXN0YXR1cy1jb2xvci1EVFBcIjpcImVlLXN0YXR1cy1jb2xvci1EVFBcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUUFwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRQXCIsXCJlZS1zdGF0dXMtY29sb3ItRFRDXCI6XCJlZS1zdGF0dXMtY29sb3ItRFRDXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVENcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUQ1wiLFwiZWUtc3RhdHVzLWNvbG9yLURUSVwiOlwiZWUtc3RhdHVzLWNvbG9yLURUSVwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRJXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVElcIixcImVlLXN0YXR1cy1jb2xvci1EVEVcIjpcImVlLXN0YXR1cy1jb2xvci1EVEVcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURURVwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRFXCIsXCJlZS1zdGF0dXMtY29sb3ItRFRUXCI6XCJlZS1zdGF0dXMtY29sb3ItRFRUXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVFRcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUVFwiLFwiZWUtc3RhdHVzLWNvbG9yLVRLU1wiOlwiZWUtc3RhdHVzLWNvbG9yLVRLU1wiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtTXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1US1NcIixcImVlLXN0YXR1cy1jb2xvci1US09cIjpcImVlLXN0YXR1cy1jb2xvci1US09cIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLT1wiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtPXCIsXCJlZS1zdGF0dXMtY29sb3ItVEtQXCI6XCJlZS1zdGF0dXMtY29sb3ItVEtQXCIsXCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1US1BcIjpcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLUFwiLFwiZWUtc3RhdHVzLWNvbG9yLVRLRVwiOlwiZWUtc3RhdHVzLWNvbG9yLVRLRVwiLFwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtFXCI6XCJlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1US0VcIixcImVlLXN0YXR1cy1jb2xvci1US0FcIjpcImVlLXN0YXR1cy1jb2xvci1US0FcIixcImVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLQVwiOlwiZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtBXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1mb2N1cy1wcmlvcml0eS0xXCI6XCJlZS1mb2N1cy1wcmlvcml0eS0xXCIsXCJlZS1mb2N1cy1wcmlvcml0eS0yXCI6XCJlZS1mb2N1cy1wcmlvcml0eS0yXCIsXCJlZS1mb2N1cy1wcmlvcml0eS0zXCI6XCJlZS1mb2N1cy1wcmlvcml0eS0zXCIsXCJlZS1mb2N1cy1wcmlvcml0eS00XCI6XCJlZS1mb2N1cy1wcmlvcml0eS00XCIsXCJlZS1mb2N1cy1wcmlvcml0eS01XCI6XCJlZS1mb2N1cy1wcmlvcml0eS01XCIsXCJlZS1mb2N1cy1wcmlvcml0eS02XCI6XCJlZS1mb2N1cy1wcmlvcml0eS02XCIsXCJlZS1mb2N1cy1wcmlvcml0eS03XCI6XCJlZS1mb2N1cy1wcmlvcml0eS03XCIsXCJlZS1mb2N1cy1wcmlvcml0eS04XCI6XCJlZS1mb2N1cy1wcmlvcml0eS04XCIsXCJlZS1mb2N1cy1wcmlvcml0eS05XCI6XCJlZS1mb2N1cy1wcmlvcml0eS05XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCAnLi9jb2xvci12YXJpYWJsZXMuY3NzJztcbmltcG9ydCAnLi9zaXplLXZhcmlhYmxlcy5jc3MnO1xuaW1wb3J0ICcuLi8uLi9yb290L2J1dHRvbnMuY3NzJztcbmltcG9ydCAnLi4vLi4vcm9vdC9jb250YWluZXJzLmNzcyc7XG5pbXBvcnQgJy4uLy4uL3Jvb3QvZWZmZWN0cy5jc3MnO1xuaW1wb3J0ICcuLi8uLi9yb290L2VudGl0eS1zdGF0dXMuY3NzJztcbmltcG9ydCAnLi4vLi4vcm9vdC9mb250LXN0eWxlcy5jc3MnO1xuaW1wb3J0ICcuLi8uLi9yb290L3NoYWRvd3MuY3NzJzsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/assets/dist/eventespresso-core-css-default.9b2be35b76a601d433dc.dist.css b/assets/dist/eventespresso-core-css-default.9b2be35b76a601d433dc.dist.css new file mode 100644 index 00000000000..4238744cb99 --- /dev/null +++ b/assets/dist/eventespresso-core-css-default.9b2be35b76a601d433dc.dist.css @@ -0,0 +1,10 @@ +:root{--ee-color-primary:#297abc;--ee-color-primary-super-high-contrast:#003a7c;--ee-color-primary-high-contrast:#095a9c;--ee-color-primary-low-contrast:#499adc;--ee-color-primary-super-low-contrast:#69bafc;--ee-text-on-primary:#fff;--ee-text-on-primary-super-high-contrast:#9bd5ff;--ee-text-on-primary-high-contrast:#f7ffff;--ee-text-on-primary-low-contrast:#000;--ee-text-on-primary-super-low-contrast:#002365;--ee-color-secondary:#91ab30;--ee-color-secondary-super-high-contrast:#516b00;--ee-color-secondary-high-contrast:#718b10;--ee-color-secondary-low-contrast:#b1cb50;--ee-color-secondary-super-low-contrast:#d1eb70;--ee-text-on-secondary:#001a00;--ee-text-on-secondary-super-high-contrast:#fff;--ee-text-on-secondary-high-contrast:#fff;--ee-text-on-secondary-low-contrast:#1f3900;--ee-text-on-secondary-super-low-contrast:#344e00;--ee-color-accent:#de5882;--ee-color-accent-super-high-contrast:#9e1842;--ee-color-accent-high-contrast:#be3862;--ee-color-accent-low-contrast:#fe78a2;--ee-color-accent-super-low-contrast:#ff98c2;--ee-text-on-accent:#fff;--ee-text-on-accent-super-high-contrast:#ffecff;--ee-text-on-accent-high-contrast:#fff;--ee-text-on-accent-low-contrast:#3d0000;--ee-text-on-accent-super-low-contrast:#5e0021;--ee-default-text-color:#595959;--ee-default-text-color-super-high-contrast:#191919;--ee-default-text-color-high-contrast:#393939;--ee-default-text-color-low-contrast:#797979;--ee-default-text-color-super-low-contrast:#999;--ee-background-color:#fff;--ee-border-color:#969696;--ee-color-grey-1:#161616;--ee-text-on-grey-1:#a1a1a1;--ee-color-grey-2:#292929;--ee-text-on-grey-2:#b4b4b4;--ee-color-grey-3:#3c3c3c;--ee-text-on-grey-3:#cecece;--ee-color-grey-4:#4f4f4f;--ee-text-on-grey-4:#eee;--ee-color-grey-5:#626262;--ee-text-on-grey-5:#fff;--ee-color-grey-6:#757575;--ee-text-on-grey-6:#fff;--ee-color-grey-7:#888;--ee-text-on-grey-7:#fff;--ee-color-grey-8:#9b9b9b;--ee-text-on-grey-8:#0c0c0c;--ee-color-grey-9:#aeaeae;--ee-text-on-grey-9:#232323;--ee-color-grey-10:#c1c1c1;--ee-text-on-grey-10:#333;--ee-color-grey-11:#d4d4d4;--ee-text-on-grey-11:#3f3f3f;--ee-color-grey-12:#e7e7e7;--ee-text-on-grey-12:#4b4b4b;--ee-color-grey-13:#ededed;--ee-text-on-grey-13:#4e4e4e;--ee-color-grey-14:#f3f3f3;--ee-text-on-grey-14:#525252;--ee-color-grey-15:#f9f9f9;--ee-text-on-grey-15:#555;--ee-color-magenta:#962557;--ee-color-magenta-super-high-contrast:#560017;--ee-color-magenta-high-contrast:#760537;--ee-color-magenta-low-contrast:#b64577;--ee-color-magenta-super-low-contrast:#d66597;--ee-text-on-magenta:#fef;--ee-text-on-magenta-super-high-contrast:#f09ab1;--ee-text-on-magenta-high-contrast:#ffb5e7;--ee-text-on-magenta-low-contrast:#fff;--ee-text-on-magenta-super-low-contrast:#000;--ee-color-red:#b00e13;--ee-color-red-super-high-contrast:#700000;--ee-color-red-high-contrast:#900000;--ee-color-red-low-contrast:#d02e33;--ee-color-red-super-low-contrast:#f04e53;--ee-text-on-red:#fffbff;--ee-text-on-red-super-high-contrast:#ffadad;--ee-text-on-red-high-contrast:#ffd2d2;--ee-text-on-red-low-contrast:#fff;--ee-text-on-red-super-low-contrast:#fff;--ee-color-hot-pink:#de5882;--ee-color-hot-pink-super-high-contrast:#9e1842;--ee-color-hot-pink-high-contrast:#be3862;--ee-color-hot-pink-low-contrast:#fe78a2;--ee-color-hot-pink-super-low-contrast:#ff98c2;--ee-text-on-hot-pink:#fff;--ee-text-on-hot-pink-super-high-contrast:#ffecff;--ee-text-on-hot-pink-high-contrast:#fff;--ee-text-on-hot-pink-low-contrast:#3d0000;--ee-text-on-hot-pink-super-low-contrast:#5e0021;--ee-color-pink:#ed8d99;--ee-color-pink-super-high-contrast:#ad4d59;--ee-color-pink-high-contrast:#cd6d79;--ee-color-pink-low-contrast:#ffadb9;--ee-color-pink-super-low-contrast:#ffcdd9;--ee-text-on-pink:#460000;--ee-text-on-pink-super-high-contrast:#fff;--ee-text-on-pink-high-contrast:#000;--ee-text-on-pink-low-contrast:#661420;--ee-text-on-pink-super-low-contrast:#663440;--ee-color-coral:#ed6d5a;--ee-color-coral-super-high-contrast:#ad2d1a;--ee-color-coral-high-contrast:#cd4d3a;--ee-color-coral-low-contrast:#ff8d7a;--ee-color-coral-super-low-contrast:#ffad9a;--ee-text-on-coral:#000;--ee-text-on-coral-super-high-contrast:#fff;--ee-text-on-coral-high-contrast:#fff;--ee-text-on-coral-low-contrast:#4f0000;--ee-text-on-coral-super-low-contrast:#661401;--ee-color-orange:#ee7e04;--ee-color-orange-super-high-contrast:#ae3e00;--ee-color-orange-high-contrast:#ce5e00;--ee-color-orange-low-contrast:#ff9e24;--ee-color-orange-super-low-contrast:#ffbe44;--ee-text-on-orange:#270000;--ee-text-on-orange-super-high-contrast:#fff;--ee-text-on-orange-high-contrast:#fff;--ee-text-on-orange-low-contrast:#5b0000;--ee-text-on-orange-super-low-contrast:#652400;--ee-color-gold:#f6bd00;--ee-color-gold-super-high-contrast:#b67d00;--ee-color-gold-high-contrast:#d69d00;--ee-color-gold-low-contrast:#ffdd20;--ee-color-gold-super-low-contrast:#fffd40;--ee-text-on-gold:#5e2500;--ee-text-on-gold-super-high-contrast:#fff;--ee-text-on-gold-high-contrast:#3f0600;--ee-text-on-gold-low-contrast:#613f00;--ee-text-on-gold-super-low-contrast:#585600;--ee-color-yellow:#fad800;--ee-color-yellow-super-high-contrast:#ba9800;--ee-color-yellow-high-contrast:#dab800;--ee-color-yellow-low-contrast:#fff820;--ee-color-yellow-super-low-contrast:#ffff40;--ee-text-on-yellow:#5e3c00;--ee-text-on-yellow-super-high-contrast:#230100;--ee-text-on-yellow-high-contrast:#472500;--ee-text-on-yellow-low-contrast:#595200;--ee-text-on-yellow-super-low-contrast:#575700;--ee-color-yellow-green:#d3d600;--ee-color-yellow-green-super-high-contrast:#939600;--ee-color-yellow-green-high-contrast:#b3b600;--ee-color-yellow-green-low-contrast:#f3f620;--ee-color-yellow-green-super-low-contrast:#ffff40;--ee-text-on-yellow-green:#3c3f00;--ee-text-on-yellow-green-super-high-contrast:#000;--ee-text-on-yellow-green-high-contrast:#242700;--ee-text-on-yellow-green-low-contrast:#4f5200;--ee-text-on-yellow-green-super-low-contrast:#575700;--ee-color-light-green:#a9ce47;--ee-color-light-green-super-high-contrast:#698e07;--ee-color-light-green-high-contrast:#89ae27;--ee-color-light-green-low-contrast:#c9ee67;--ee-color-light-green-super-low-contrast:#e9ff87;--ee-text-on-light-green:#153a00;--ee-text-on-light-green-super-high-contrast:#fff;--ee-text-on-light-green-high-contrast:#001b00;--ee-text-on-light-green-low-contrast:#2b5000;--ee-text-on-light-green-super-low-contrast:#445a00;--ee-color-green:#91ab30;--ee-color-green-super-high-contrast:#516b00;--ee-color-green-high-contrast:#718b10;--ee-color-green-low-contrast:#b1cb50;--ee-color-green-super-low-contrast:#d1eb70;--ee-text-on-green:#001a00;--ee-text-on-green-super-high-contrast:#fff;--ee-text-on-green-high-contrast:#fff;--ee-text-on-green-low-contrast:#1f3900;--ee-text-on-green-super-low-contrast:#344e00;--ee-color-bright-green:#71b94c;--ee-color-bright-green-super-high-contrast:#31790c;--ee-color-bright-green-high-contrast:#51992c;--ee-color-bright-green-low-contrast:#91d96c;--ee-color-bright-green-super-low-contrast:#b1f98c;--ee-text-on-bright-green:#002300;--ee-text-on-bright-green-super-high-contrast:#fff;--ee-text-on-bright-green-high-contrast:#fff;--ee-text-on-bright-green-low-contrast:#004100;--ee-text-on-bright-green-super-low-contrast:#0f5700;--ee-color-dark-green:#4d6021;--ee-color-dark-green-super-high-contrast:#0d2000;--ee-color-dark-green-high-contrast:#2d4001;--ee-color-dark-green-low-contrast:#6d8041;--ee-color-dark-green-super-low-contrast:#8da061;--ee-text-on-dark-green:#fff;--ee-text-on-dark-green-super-high-contrast:#99ac8c;--ee-text-on-dark-green-high-contrast:#c0d394;--ee-text-on-dark-green-low-contrast:#fff;--ee-text-on-dark-green-super-low-contrast:#000a00;--ee-color-blue-green:#399f94;--ee-color-blue-green-super-high-contrast:#005f54;--ee-color-blue-green-high-contrast:#197f74;--ee-color-blue-green-low-contrast:#59bfb4;--ee-color-blue-green-super-low-contrast:#79dfd4;--ee-text-on-blue-green:#000;--ee-text-on-blue-green-super-high-contrast:#ceffff;--ee-text-on-blue-green-high-contrast:#fff;--ee-text-on-blue-green-low-contrast:#002a1f;--ee-text-on-blue-green-super-low-contrast:#004439;--ee-color-blue:#297abc;--ee-color-blue-super-high-contrast:#003a7c;--ee-color-blue-high-contrast:#095a9c;--ee-color-blue-low-contrast:#499adc;--ee-color-blue-super-low-contrast:#69bafc;--ee-text-on-blue:#fff;--ee-text-on-blue-super-high-contrast:#9bd5ff;--ee-text-on-blue-high-contrast:#f7ffff;--ee-text-on-blue-low-contrast:#000;--ee-text-on-blue-super-low-contrast:#002365;--ee-color-dark-blue:#274369;--ee-color-dark-blue-super-high-contrast:#000329;--ee-color-dark-blue-high-contrast:#072349;--ee-color-dark-blue-low-contrast:#476389;--ee-color-dark-blue-super-low-contrast:#6783a9;--ee-text-on-dark-blue:#bedaff;--ee-text-on-dark-blue-super-high-contrast:#9396bc;--ee-text-on-dark-blue-high-contrast:#94b0d6;--ee-text-on-dark-blue-low-contrast:#fff;--ee-text-on-dark-blue-super-low-contrast:#fff;--ee-color-bright-blue:#5abddb;--ee-color-bright-blue-super-high-contrast:#1a7d9b;--ee-color-bright-blue-high-contrast:#3a9dbb;--ee-color-bright-blue-low-contrast:#7addfb;--ee-color-bright-blue-super-low-contrast:#9afdff;--ee-text-on-bright-blue:#002745;--ee-text-on-bright-blue-super-high-contrast:#fff;--ee-text-on-bright-blue-high-contrast:#000;--ee-text-on-bright-blue-low-contrast:#00415f;--ee-text-on-bright-blue-super-low-contrast:#00585a;--ee-color-light-blue:#9dcdd5;--ee-color-light-blue-super-high-contrast:#5d8d95;--ee-color-light-blue-high-contrast:#7dadb5;--ee-color-light-blue-low-contrast:#bdedf5;--ee-color-light-blue-super-low-contrast:#dff;--ee-text-on-light-blue:#0b3b43;--ee-text-on-light-blue-super-high-contrast:#fff;--ee-text-on-light-blue-high-contrast:#001e26;--ee-text-on-light-blue-low-contrast:#205058;--ee-text-on-light-blue-super-low-contrast:#395b5b;--ee-color-violet:#bfa9d4;--ee-color-violet-super-high-contrast:#7f6994;--ee-color-violet-high-contrast:#9f89b4;--ee-color-violet-low-contrast:#dfc9f4;--ee-color-violet-super-low-contrast:#ffe9ff;--ee-text-on-violet:#321c47;--ee-text-on-violet-super-high-contrast:#fff;--ee-text-on-violet-high-contrast:#000;--ee-text-on-violet-low-contrast:#4a345f;--ee-text-on-violet-super-low-contrast:#5f495f;--ee-color-purple:#795d9d;--ee-color-purple-super-high-contrast:#391d5d;--ee-color-purple-high-contrast:#593d7d;--ee-color-purple-low-contrast:#997dbd;--ee-color-purple-super-low-contrast:#b99ddd;--ee-text-on-purple:#fff;--ee-text-on-purple-super-high-contrast:#c8acec;--ee-text-on-purple-high-contrast:#f9ddff;--ee-text-on-purple-low-contrast:#000;--ee-text-on-purple-super-low-contrast:#2a0e4e;--ee-color-indigo:#26203d;--ee-color-indigo-super-high-contrast:#000;--ee-color-indigo-high-contrast:#06001d;--ee-color-indigo-low-contrast:#46405d;--ee-color-indigo-super-low-contrast:#66607d;--ee-text-on-indigo:#b1abc8;--ee-text-on-indigo-super-high-contrast:#959595;--ee-text-on-indigo-high-contrast:#9a94b1;--ee-text-on-indigo-low-contrast:#ddd7f4;--ee-text-on-indigo-super-low-contrast:#fff;--ee-color-black:#18181a;--ee-text-on-black:#a3a3a5;--ee-color-white:#fff;--ee-text-on-white:#595959} +:root{--ee-font-size-micro:0.60rem;--ee-font-size-tiny:0.70rem;--ee-font-size-smaller:0.80rem;--ee-font-size-small:0.90rem;--ee-font-size-default:1.00rem;--ee-font-size-big:1.20rem;--ee-font-size-bigger:1.50rem;--ee-font-size-huge:2.00rem;--ee-font-size-extreme:3.00rem;--ee-line-height-modifier:1.5;--ee-padding-nano:0.125rem;--ee-padding-micro:0.25rem;--ee-padding-tiny:0.5rem;--ee-padding-smaller:0.75rem;--ee-padding-small:1rem;--ee-padding-default:1.5rem;--ee-padding-big:2rem;--ee-padding-bigger:2.5rem;--ee-padding-huge:3rem;--ee-padding-extreme:4rem;--ee-margin-nano:0.125rem;--ee-margin-micro:0.25rem;--ee-margin-tiny:0.5rem;--ee-margin-smaller:0.75rem;--ee-margin-small:1rem;--ee-margin-default:1.5rem;--ee-margin-big:2rem;--ee-margin-bigger:2.5rem;--ee-margin-huge:3rem;--ee-margin-extreme:4rem;--ee-border-radius-none:0px;--ee-border-radius-small:3px;--ee-border-radius-default:6px;--ee-border-radius-big:12px;--ee-border-radius-bigger:24px;--ee-border-radius-huge:48px;--ee-border-radius-full:3000px} +:root{--ee-icon-button-size:36px}.esprs-button,.esprs-button:active,.esprs-button:focus,.esprs-button:visited{border-radius:var(--ee-border-radius-small);box-shadow:var(--ee-box-shadow-tiny);box-sizing:content-box!important;cursor:pointer;display:inline-block;font-size:var(--ee-font-size-default);font-weight:400;min-height:var(--ee-font-size-big);line-height:var(--ee-font-size-default);margin:0 0 var(--ee-margin-smaller);outline:none!important;position:relative;padding:var(--ee-padding-tiny) var(--ee-padding-small) var(--ee-padding-smaller);text-decoration:none;text-align:center;text-shadow:var(--ee-text-shadow-inset-light);top:-1px;vertical-align:middle}.esprs-button:active{top:0}.esprs-button:hover{cursor:pointer}.esprs-button+.esprs-button{margin-left:var(--ee-margin-default)}.esprs-button .text-wrap{font-weight:700;position:relative;top:calc(var(--ee-padding-nano)*-1.5);vertical-align:middle}.esprs-button.ee-noIcon .text-wrap,.esprs-button .img-wrap{position:relative;top:var(--ee-padding-nano)}.esprs-button .img-wrap{margin:0 0 0 var(--ee-padding-small);vertical-align:middle}.esprs-button .img-wrap span{line-height:24px}.esprs-btn-default{background:var(--ee-color-grey-15);border:1px solid var(--ee-color-grey-14);border-bottom-color:var(--ee-color-grey-15);color:var(--ee-text-on-grey-14)}.esprs-btn-default:hover{background:var(--ee-color-grey-14)}.esprs-btn-primary{background:var(--ee-color-primary);border:1px solid var(--ee-color-primary);border-bottom-color:var(--ee-color-primary-low-contrast);color:var(--ee-text-on-primary)}.esprs-btn-primary:hover{background:var(--ee-color-primary-low-contrast)}.esprs-btn-secondary{background:var(--ee-color-secondary);border:1px solid var(--ee-color-secondary);border-bottom-color:var(--ee-color-secondary-low-contrast);color:var(--ee-text-on-secondary)}.esprs-btn-secondary:hover{background:var(--ee-color-secondary-low-contrast)}.esprs-btn-accent{background:var(--ee-color-accent);border:1px solid var(--ee-color-accent);border-bottom-color:var(--ee-color-accent-low-contrast);color:var(--ee-text-on-accent)}.esprs-btn-accent:hover{background:var(--ee-color-accent-low-contrast)}.esprs-btn-tiny.esprs-button,.esprs-btn-tiny.esprs-button:active,.esprs-btn-tiny.esprs-button:focus,.esprs-btn-tiny.esprs-button:visited{font-size:var(--ee-font-size-tiny);min-height:var(--ee-font-size-smaller);line-height:var(--ee-font-size-tiny);padding:var(--ee-padding-nano) var(--ee-padding-tiny) var(--ee-padding-micro)}.esprs-btn-tiny.esprs-button .img-wrap span{line-height:var(--ee-font-size-tiny)}.esprs-btn-small.esprs-button,.esprs-btn-small.esprs-button:active,.esprs-btn-small.esprs-button:focus,.esprs-btn-small.esprs-button:visited{font-size:var(--ee-font-size-smaller);min-height:var(--ee-font-size-small);line-height:var(--ee-font-size-smaller);padding:var(--ee-padding-micro) var(--ee-padding-smaller) var(--ee-padding-tiny)}.esprs-btn-small.esprs-button:not(.ee-noIcon) .text-wrap{top:-.1rem}.esprs-btn-small.esprs-button .img-wrap{top:.2rem}.esprs-btn-small.esprs-button .img-wrap span{line-height:var(--ee-font-size-smaller)}.esprs-btn-big.esprs-button,.esprs-btn-big.esprs-button:active,.esprs-btn-big.esprs-button:focus,.esprs-btn-big.esprs-button:visited{font-size:var(--ee-font-size-big);min-height:var(--ee-font-size-bigger);line-height:var(--ee-font-size-big);padding:var(--ee-padding-smaller) var(--ee-padding-default) var(--ee-padding-small)}.esprs-btn-big.esprs-button .img-wrap span{line-height:var(--ee-font-size-big)}.esprs-btn-huge.esprs-button,.esprs-btn-huge.esprs-button:active,.esprs-btn-huge.esprs-button:focus,.esprs-btn-huge.esprs-button:visited{font-size:var(--ee-font-size-bigger);min-height:var(--ee-font-size-huge);line-height:var(--ee-font-size-bigger);padding:var(--ee-padding-smaller) var(--ee-padding-default) var(--ee-padding-small)}.esprs-btn-huge.esprs-button .img-wrap span{line-height:var(--ee-font-size-bigger)}@media screen and (max-width:600px){.esprs-button+.esprs-button{margin-left:var(--ee-margin-smaller)}}@media only screen and (max-width:480px){.esprs-button+.esprs-button{margin-left:var(--ee-margin-micro)}}@media only screen and (max-width:360px){.esprs-button{box-sizing:border-box!important;margin:var(--ee-margin-tiny) auto;width:100%}.esprs-button+.esprs-button{margin-left:auto}} +.ee-container,.ee-container-accent,.ee-container-default,.ee-container-primary,.ee-container-secondary{border-radius:var(--ee-border-radius-default);-moz-border-radius:var(--ee-border-radius-default);-webkit-border-radius:var(--ee-border-radius-default);box-sizing:border-box!important;font-size:var(--ee-font-size-default);line-height:var(--ee-line-height-modifier);margin:var(--ee-margin-smaller) 0 var(--ee-margin-default);padding:var(--ee-padding-default)}.ee-container-default{background:var(--ee-background-color);border:1px solid var(--ee-border-color);color:var(--ee-default-text-color)}.ee-container-primary{background:var(--ee-color-primary);border:1px solid var(--ee-color-primary);color:var(--ee-text-on-primary)}.ee-container-secondary{background:var(--ee-color-secondary);border:1px solid var(--ee-color-secondary);color:var(--ee-text-on-secondary)}.ee-container-accent{background:var(--ee-color-accent);border:1px solid var(--ee-color-accent);color:var(--ee-text-on-accent)} +:root{--ee-animation-spin:ee-animation-spin 1s linear infinite;--ee-animation-spin-cc:ee-animation-spin-cc 1s linear infinite;--ee-animation-spin-fast:ee-animation-spin .25s ease-in infinite}@keyframes ee-animation-spin{to{transform:rotate(1turn)}}@keyframes ee-animation-spin-cc{to{transform:rotate(-1turn)}} +.ee-status-color-TOP{color:var(--ee-color-orange)}.ee-status-background-color-TOP{background-color:var(--ee-color-orange);color:var(--ee-text-on-orange)}.ee-status-color-TCM{color:var(--ee-color-green)}.ee-status-background-color-TCM{background-color:var(--ee-color-green);color:var(--ee-text-on-green)}.ee-status-color-TIN{color:var(--ee-color-blue)}.ee-status-background-color-TIN{background-color:var(--ee-color-blue);color:var(--ee-text-on-blue)}.ee-status-color-TAB{color:var(--ee-color-gold)}.ee-status-background-color-TAB{background-color:var(--ee-color-gold);color:var(--ee-text-on-gold)}.ee-status-color-TFL{color:var(--ee-color-hot-pink)}.ee-status-background-color-TFL{background-color:var(--ee-color-hot-pink);color:var(--ee-text-on-hot-pink)}.ee-status-color-PAP{color:var(--ee-color-green)}.ee-status-background-color-PAP{background-color:var(--ee-color-green);color:var(--ee-text-on-green)}.ee-status-color-PPN{color:var(--ee-color-blue)}.ee-status-background-color-PPN{background-color:var(--ee-color-blue);color:var(--ee-text-on-blue)}.ee-status-color-PFL{color:var(--ee-color-gold)}.ee-status-background-color-PFL{background-color:var(--ee-color-gold);color:var(--ee-text-on-gold)}.ee-status-color-PDC{color:var(--ee-color-hot-pink)}.ee-status-background-color-PDC{background-color:var(--ee-color-hot-pink);color:var(--ee-text-on-hot-pink)}.ee-status-color-PCN{color:var(--ee-color-grey-7)}.ee-status-background-color-PCN{background-color:var(--ee-color-grey-7);color:var(--ee-text-on-grey-7)}.ee-status-color-RAP{color:var(--ee-color-green)}.ee-status-background-color-RAP{background-color:var(--ee-color-green);color:var(--ee-text-on-green)}.ee-status-color-RPP{color:var(--ee-color-blue)}.ee-status-background-color-RPP{background-color:var(--ee-color-blue);color:var(--ee-text-on-blue)}.ee-status-color-RWL{color:var(--ee-color-purple)}.ee-status-background-color-RWL{background-color:var(--ee-color-purple);color:var(--ee-text-on-purple)}.ee-status-color-RIC{color:var(--ee-color-gold)}.ee-status-background-color-RIC{background-color:var(--ee-color-gold);color:var(--ee-text-on-gold)}.ee-status-color-RNA{color:var(--ee-color-orange)}.ee-status-background-color-RNA{background-color:var(--ee-color-orange);color:var(--ee-text-on-orange)}.ee-status-color-RDC{color:var(--ee-color-hot-pink)}.ee-status-background-color-RDC{background-color:var(--ee-color-hot-pink);color:var(--ee-text-on-hot-pink)}.ee-status-color-RCN{color:var(--ee-color-grey-7)}.ee-status-background-color-RCN{background-color:var(--ee-color-grey-7);color:var(--ee-text-on-grey-7)}.ee-status-color-DTS{color:var(--ee-color-purple)}.ee-status-background-color-DTS{background-color:var(--ee-color-purple);color:var(--ee-text-on-purple)}.ee-status-color-DTA{color:var(--ee-color-green)}.ee-status-background-color-DTA{background-color:var(--ee-color-green);color:var(--ee-text-on-green)}.ee-status-color-DTU{color:var(--ee-color-blue)}.ee-status-background-color-DTU{background-color:var(--ee-color-blue);color:var(--ee-text-on-blue)}.ee-status-color-DTP{color:var(--ee-color-gold)}.ee-status-background-color-DTP{background-color:var(--ee-color-gold);color:var(--ee-text-on-gold)}.ee-status-color-DTC{color:var(--ee-color-hot-pink)}.ee-status-background-color-DTC{background-color:var(--ee-color-hot-pink);color:var(--ee-text-on-hot-pink)}.ee-status-color-DTI{color:var(--ee-color-blue-green)}.ee-status-background-color-DTI{background-color:var(--ee-color-blue-green);color:var(--ee-text-on-blue-green)}.ee-status-color-DTE{color:var(--ee-color-grey-7)}.ee-status-background-color-DTE{background-color:var(--ee-color-grey-7);color:var(--ee-text-on-grey-7)}.ee-status-color-DTT{color:var(--ee-color-grey-3)}.ee-status-background-color-DTT{background-color:var(--ee-color-grey-3);color:var(--ee-text-on-grey-3)}.ee-status-color-TKS{color:var(--ee-color-purple)}.ee-status-background-color-TKS{background-color:var(--ee-color-purple);color:var(--ee-text-on-purple)}.ee-status-color-TKO{color:var(--ee-color-green)}.ee-status-background-color-TKO{background-color:var(--ee-color-green);color:var(--ee-text-on-green)}.ee-status-color-TKP{color:var(--ee-color-blue)}.ee-status-background-color-TKP{background-color:var(--ee-color-blue);color:var(--ee-text-on-blue)}.ee-status-color-TKE{color:var(--ee-color-grey-7)}.ee-status-background-color-TKE{background-color:var(--ee-color-grey-7);color:var(--ee-text-on-grey-7)}.ee-status-color-TKA{color:var(--ee-color-grey-3)}.ee-status-background-color-TKA{background-color:var(--ee-color-grey-3);color:var(--ee-text-on-grey-3)} +:root{--ee-letter-spacing-font-size-micro:2px;--ee-letter-spacing-font-size-tiny:1px;--ee-letter-spacing-font-size-huge:-1px;--ee-letter-spacing-font-size-extreme:-2px;--ee-word-spacing-font-size-micro:4px;--ee-word-spacing-font-size-tiny:2px;--ee-word-spacing-font-size-smaller:1px}.ee-focus-priority-1{color:var(--ee-default-text-color-super-low-contrast);font-size:var(--ee-font-size-extreme);font-weight:bolder;letter-spacing:var(--ee-letter-spacing-font-size-extreme);line-height:calc(var(--ee-line-height-modifier)*0.75)}.ee-focus-priority-2{color:var(--ee-default-text-color-low-contrast);font-size:var(--ee-font-size-huge);font-weight:700;letter-spacing:var(--ee-letter-spacing-font-size-huge);line-height:calc(var(--ee-line-height-modifier)*0.875)}.ee-focus-priority-3{font-size:var(--ee-font-size-bigger)}.ee-focus-priority-3,.ee-focus-priority-4{line-height:var(--ee-line-height-modifier)}.ee-focus-priority-4{font-size:var(--ee-font-size-big)}.ee-focus-priority-5{font-size:var(--ee-font-size-default);line-height:var(--ee-line-height-modifier)}.ee-focus-priority-6{font-size:var(--ee-font-size-small)}.ee-focus-priority-6,.ee-focus-priority-7{color:var(--ee-default-text-color-high-contrast);line-height:var(--ee-line-height-modifier)}.ee-focus-priority-7{font-size:var(--ee-font-size-smaller);word-spacing:var(--ee-word-spacing-font-size-smaller)}.ee-focus-priority-8{font-size:var(--ee-font-size-tiny);letter-spacing:var(--ee-letter-spacing-font-size-tiny);line-height:calc(var(--ee-line-height-modifier)*1.125);word-spacing:var(--ee-word-spacing-font-size-tiny)}.ee-focus-priority-8,.ee-focus-priority-9{color:var(--ee-default-text-color-super-high-contrast)}.ee-focus-priority-9{font-size:var(--ee-font-size-micro);letter-spacing:var(--ee-letter-spacing-font-size-micro);line-height:calc(var(--ee-line-height-modifier)*1.25);word-spacing:var(--ee-word-spacing-font-size-micro)}@media screen and (max-width:782px){.ee-focus-priority-1{font-size:var(--ee-font-size-huge)}.ee-focus-priority-2{font-size:var(--ee-font-size-bigger)}.ee-focus-priority-3{font-size:var(--ee-font-size-big)}.ee-focus-priority-4{font-size:var(--ee-font-size-default)}.ee-focus-priority-5{font-size:var(--ee-font-size-small)}.ee-focus-priority-6{font-size:var(--ee-font-size-smaller)}.ee-focus-priority-7,.ee-focus-priority-8{font-size:var(--ee-font-size-tiny)}}@media screen and (max-width:600px){.ee-focus-priority-1{font-size:var(--ee-font-size-bigger)}.ee-focus-priority-2{font-size:var(--ee-font-size-big)}.ee-focus-priority-3{font-size:var(--ee-font-size-default)}.ee-focus-priority-4{font-size:var(--ee-font-size-small)}.ee-focus-priority-5{font-size:var(--ee-font-size-smaller)}.ee-focus-priority-6,.ee-focus-priority-7,.ee-focus-priority-8{font-size:var(--ee-font-size-tiny)}} +:root{--ee-box-shadow-tiny:0 1px 2px rgba(0,0,0,0.6);--ee-box-shadow-tiny-diffuse:0 0 1px rgba(0,0,0,0.2);--ee-box-shadow-small:0 2px 4px rgba(0,0,0,0.6),0 4px 8px 4px rgba(0,0,0,0.1);--ee-box-shadow-small-diffuse:0 1px 2px rgba(0,0,0,0.2);--ee-box-shadow-default:0 3px 6px rgba(0,0,0,0.6),0 8px 16px 8px rgba(0,0,0,0.05);--ee-box-shadow-default-diffuse:0 1px 3px rgba(0,0,0,0.2);--ee-box-shadow-big:0 5px 10px rgba(0,0,0,0.6),0 0 24px 16px rgba(0,0,0,0.05);--ee-box-shadow-big-diffuse:0 2px 5px rgba(0,0,0,0.2);--ee-box-shadow-wp-icon-btn-hover:inset 0 0 0 1px var(--ee-color-grey-10),inset 0 0 0 2px var(--ee-color-white),0 1px 1px rgba(25,30,35,0.2);--ee-box-shadow-wp-icon-btn-focus:inset 0 0 0 1px var(--ee-color-grey-5),inset 0 0 0 2px var(--ee-color-white);--ee-text-shadow-inset:-1px -1px 0 rgba(0,0,0,0.15);--ee-text-shadow-inset-light:-1px -1px 0 hsla(0,0%,100%,0.15);--ee-text-shadow-small:0 1px 2px rgba(0,0,0,0.5);--ee-text-shadow-default:0 2px 4px rgba(0,0,0,0.375);--ee-text-shadow-big:0 3px 6px rgba(0,0,0,0.25)} + +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvc3R5bGVzL3RoZW1lcy9kZWZhdWx0L2NvbG9yLXZhcmlhYmxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy90aGVtZXMvZGVmYXVsdC9zaXplLXZhcmlhYmxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2J1dHRvbnMuY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvcm9vdC9jb250YWluZXJzLmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2NvbXBvbmVudHMvdWkvc3R5bGVzL3Jvb3QvZWZmZWN0cy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L2VudGl0eS1zdGF0dXMuY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvY29tcG9uZW50cy91aS9zdHlsZXMvcm9vdC9mb250LXN0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9jb21wb25lbnRzL3VpL3N0eWxlcy9yb290L3NoYWRvd3MuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sMkJBQTJCLCtDQUErQyx5Q0FBeUMsd0NBQXdDLDhDQUE4QywwQkFBMEIsaURBQWlELDJDQUEyQyx1Q0FBdUMsZ0RBQWdELDZCQUE2QixpREFBaUQsMkNBQTJDLDBDQUEwQyxnREFBZ0QsK0JBQStCLGdEQUFnRCwwQ0FBMEMsNENBQTRDLGtEQUFrRCwwQkFBMEIsOENBQThDLHdDQUF3Qyx1Q0FBdUMsNkNBQTZDLHlCQUF5QixnREFBZ0QsdUNBQXVDLHlDQUF5QywrQ0FBK0MsZ0NBQWdDLG9EQUFvRCw4Q0FBOEMsNkNBQTZDLGdEQUFnRCwyQkFBMkIsMEJBQTBCLDBCQUEwQiw0QkFBNEIsMEJBQTBCLDRC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QixrQ0FBa0MscUJBQXFCLHNDQUFzQyxxQkFBcUIsb0NBQW9DLHFCQUFxQixzQ0FBc0MsK0RBQStELG9DO0FDQW5yRixNQUFNLCtDQUErQyxxREFBcUQsOEVBQThFLHdEQUF3RCxrRkFBa0YsMERBQTBELDhFQUE4RSxzREFBc0QsNklBQTZJLCtHQUErRyxvREFBb0QsOERBQThELGlEQUFpRCxxREFBcUQsZ0QiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1jb3JlLWNzcy1kZWZhdWx0LjliMmJlMzViNzZhNjAxZDQzM2RjLmRpc3QuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOnJvb3R7LS1lZS1jb2xvci1wcmltYXJ5OiMyOTdhYmM7LS1lZS1jb2xvci1wcmltYXJ5LXN1cGVyLWhpZ2gtY29udHJhc3Q6IzAwM2E3YzstLWVlLWNvbG9yLXByaW1hcnktaGlnaC1jb250cmFzdDojMDk1YTljOy0tZWUtY29sb3ItcHJpbWFyeS1sb3ctY29udHJhc3Q6IzQ5OWFkYzstLWVlLWNvbG9yLXByaW1hcnktc3VwZXItbG93LWNvbnRyYXN0OiM2OWJhZmM7LS1lZS10ZXh0LW9uLXByaW1hcnk6I2ZmZjstLWVlLXRleHQtb24tcHJpbWFyeS1zdXBlci1oaWdoLWNvbnRyYXN0OiM5YmQ1ZmY7LS1lZS10ZXh0LW9uLXByaW1hcnktaGlnaC1jb250cmFzdDojZjdmZmZmOy0tZWUtdGV4dC1vbi1wcmltYXJ5LWxvdy1jb250cmFzdDojMDAwOy0tZWUtdGV4dC1vbi1wcmltYXJ5LXN1cGVyLWxvdy1jb250cmFzdDojMDAyMzY1Oy0tZWUtY29sb3Itc2Vjb25kYXJ5OiM5MWFiMzA7LS1lZS1jb2xvci1zZWNvbmRhcnktc3VwZXItaGlnaC1jb250cmFzdDojNTE2YjAwOy0tZWUtY29sb3Itc2Vjb25kYXJ5LWhpZ2gtY29udHJhc3Q6IzcxOGIxMDstLWVlLWNvbG9yLXNlY29uZGFyeS1sb3ctY29udHJhc3Q6I2IxY2I1MDstLWVlLWNvbG9yLXNlY29uZGFyeS1zdXBlci1sb3ctY29udHJhc3Q6I2QxZWI3MDstLWVlLXRleHQtb24tc2Vjb25kYXJ5OiMwMDFhMDA7LS1lZS10ZXh0LW9uLXNlY29uZGFyeS1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLXNlY29uZGFyeS1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLXNlY29uZGFyeS1sb3ctY29udHJhc3Q6IzFmMzkwMDstLWVlLXRleHQtb24tc2Vjb25kYXJ5LXN1cGVyLWxvdy1jb250cmFzdDojMzQ0ZTAwOy0tZWUtY29sb3ItYWNjZW50OiNkZTU4ODI7LS1lZS1jb2xvci1hY2NlbnQtc3VwZXItaGlnaC1jb250cmFzdDojOWUxODQyOy0tZWUtY29sb3ItYWNjZW50LWhpZ2gtY29udHJhc3Q6I2JlMzg2MjstLWVlLWNvbG9yLWFjY2VudC1sb3ctY29udHJhc3Q6I2ZlNzhhMjstLWVlLWNvbG9yLWFjY2VudC1zdXBlci1sb3ctY29udHJhc3Q6I2ZmOThjMjstLWVlLXRleHQtb24tYWNjZW50OiNmZmY7LS1lZS10ZXh0LW9uLWFjY2VudC1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmVjZmY7LS1lZS10ZXh0LW9uLWFjY2VudC1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLWFjY2VudC1sb3ctY29udHJhc3Q6IzNkMDAwMDstLWVlLXRleHQtb24tYWNjZW50LXN1cGVyLWxvdy1jb250cmFzdDojNWUwMDIxOy0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yOiM1OTU5NTk7LS1lZS1kZWZhdWx0LXRleHQtY29sb3Itc3VwZXItaGlnaC1jb250cmFzdDojMTkxOTE5Oy0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yLWhpZ2gtY29udHJhc3Q6IzM5MzkzOTstLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1sb3ctY29udHJhc3Q6Izc5Nzk3OTstLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1zdXBlci1sb3ctY29udHJhc3Q6Izk5OTstLWVlLWJhY2tncm91bmQtY29sb3I6I2ZmZjstLWVlLWJvcmRlci1jb2xvcjojOTY5Njk2Oy0tZWUtY29sb3ItZ3JleS0xOiMxNjE2MTY7LS1lZS10ZXh0LW9uLWdyZXktMTojYTFhMWExOy0tZWUtY29sb3ItZ3JleS0yOiMyOTI5Mjk7LS1lZS10ZXh0LW9uLWdyZXktMjojYjRiNGI0Oy0tZWUtY29sb3ItZ3JleS0zOiMzYzNjM2M7LS1lZS10ZXh0LW9uLWdyZXktMzojY2VjZWNlOy0tZWUtY29sb3ItZ3JleS00OiM0ZjRmNGY7LS1lZS10ZXh0LW9uLWdyZXktNDojZWVlOy0tZWUtY29sb3ItZ3JleS01OiM2MjYyNjI7LS1lZS10ZXh0LW9uLWdyZXktNTojZmZmOy0tZWUtY29sb3ItZ3JleS02OiM3NTc1NzU7LS1lZS10ZXh0LW9uLWdyZXktNjojZmZmOy0tZWUtY29sb3ItZ3JleS03OiM4ODg7LS1lZS10ZXh0LW9uLWdyZXktNzojZmZmOy0tZWUtY29sb3ItZ3JleS04OiM5YjliOWI7LS1lZS10ZXh0LW9uLWdyZXktODojMGMwYzBjOy0tZWUtY29sb3ItZ3JleS05OiNhZWFlYWU7LS1lZS10ZXh0LW9uLWdyZXktOTojMjMyMzIzOy0tZWUtY29sb3ItZ3JleS0xMDojYzFjMWMxOy0tZWUtdGV4dC1vbi1ncmV5LTEwOiMzMzM7LS1lZS1jb2xvci1ncmV5LTExOiNkNGQ0ZDQ7LS1lZS10ZXh0LW9uLWdyZXktMTE6IzNmM2YzZjstLWVlLWNvbG9yLWdyZXktMTI6I2U3ZTdlNzstLWVlLXRleHQtb24tZ3JleS0xMjojNGI0YjRiOy0tZWUtY29sb3ItZ3JleS0xMzojZWRlZGVkOy0tZWUtdGV4dC1vbi1ncmV5LTEzOiM0ZTRlNGU7LS1lZS1jb2xvci1ncmV5LTE0OiNmM2YzZjM7LS1lZS10ZXh0LW9uLWdyZXktMTQ6IzUyNTI1MjstLWVlLWNvbG9yLWdyZXktMTU6I2Y5ZjlmOTstLWVlLXRleHQtb24tZ3JleS0xNTojNTU1Oy0tZWUtY29sb3ItbWFnZW50YTojOTYyNTU3Oy0tZWUtY29sb3ItbWFnZW50YS1zdXBlci1oaWdoLWNvbnRyYXN0OiM1NjAwMTc7LS1lZS1jb2xvci1tYWdlbnRhLWhpZ2gtY29udHJhc3Q6Izc2MDUzNzstLWVlLWNvbG9yLW1hZ2VudGEtbG93LWNvbnRyYXN0OiNiNjQ1Nzc7LS1lZS1jb2xvci1tYWdlbnRhLXN1cGVyLWxvdy1jb250cmFzdDojZDY2NTk3Oy0tZWUtdGV4dC1vbi1tYWdlbnRhOiNmZWY7LS1lZS10ZXh0LW9uLW1hZ2VudGEtc3VwZXItaGlnaC1jb250cmFzdDojZjA5YWIxOy0tZWUtdGV4dC1vbi1tYWdlbnRhLWhpZ2gtY29udHJhc3Q6I2ZmYjVlNzstLWVlLXRleHQtb24tbWFnZW50YS1sb3ctY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tbWFnZW50YS1zdXBlci1sb3ctY29udHJhc3Q6IzAwMDstLWVlLWNvbG9yLXJlZDojYjAwZTEzOy0tZWUtY29sb3ItcmVkLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzcwMDAwMDstLWVlLWNvbG9yLXJlZC1oaWdoLWNvbnRyYXN0OiM5MDAwMDA7LS1lZS1jb2xvci1yZWQtbG93LWNvbnRyYXN0OiNkMDJlMzM7LS1lZS1jb2xvci1yZWQtc3VwZXItbG93LWNvbnRyYXN0OiNmMDRlNTM7LS1lZS10ZXh0LW9uLXJlZDojZmZmYmZmOy0tZWUtdGV4dC1vbi1yZWQtc3VwZXItaGlnaC1jb250cmFzdDojZmZhZGFkOy0tZWUtdGV4dC1vbi1yZWQtaGlnaC1jb250cmFzdDojZmZkMmQyOy0tZWUtdGV4dC1vbi1yZWQtbG93LWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLXJlZC1zdXBlci1sb3ctY29udHJhc3Q6I2ZmZjstLWVlLWNvbG9yLWhvdC1waW5rOiNkZTU4ODI7LS1lZS1jb2xvci1ob3QtcGluay1zdXBlci1oaWdoLWNvbnRyYXN0OiM5ZTE4NDI7LS1lZS1jb2xvci1ob3QtcGluay1oaWdoLWNvbnRyYXN0OiNiZTM4NjI7LS1lZS1jb2xvci1ob3QtcGluay1sb3ctY29udHJhc3Q6I2ZlNzhhMjstLWVlLWNvbG9yLWhvdC1waW5rLXN1cGVyLWxvdy1jb250cmFzdDojZmY5OGMyOy0tZWUtdGV4dC1vbi1ob3QtcGluazojZmZmOy0tZWUtdGV4dC1vbi1ob3QtcGluay1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmVjZmY7LS1lZS10ZXh0LW9uLWhvdC1waW5rLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24taG90LXBpbmstbG93LWNvbnRyYXN0OiMzZDAwMDA7LS1lZS10ZXh0LW9uLWhvdC1waW5rLXN1cGVyLWxvdy1jb250cmFzdDojNWUwMDIxOy0tZWUtY29sb3ItcGluazojZWQ4ZDk5Oy0tZWUtY29sb3ItcGluay1zdXBlci1oaWdoLWNvbnRyYXN0OiNhZDRkNTk7LS1lZS1jb2xvci1waW5rLWhpZ2gtY29udHJhc3Q6I2NkNmQ3OTstLWVlLWNvbG9yLXBpbmstbG93LWNvbnRyYXN0OiNmZmFkYjk7LS1lZS1jb2xvci1waW5rLXN1cGVyLWxvdy1jb250cmFzdDojZmZjZGQ5Oy0tZWUtdGV4dC1vbi1waW5rOiM0NjAwMDA7LS1lZS10ZXh0LW9uLXBpbmstc3VwZXItaGlnaC1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1waW5rLWhpZ2gtY29udHJhc3Q6IzAwMDstLWVlLXRleHQtb24tcGluay1sb3ctY29udHJhc3Q6IzY2MTQyMDstLWVlLXRleHQtb24tcGluay1zdXBlci1sb3ctY29udHJhc3Q6IzY2MzQ0MDstLWVlLWNvbG9yLWNvcmFsOiNlZDZkNWE7LS1lZS1jb2xvci1jb3JhbC1zdXBlci1oaWdoLWNvbnRyYXN0OiNhZDJkMWE7LS1lZS1jb2xvci1jb3JhbC1oaWdoLWNvbnRyYXN0OiNjZDRkM2E7LS1lZS1jb2xvci1jb3JhbC1sb3ctY29udHJhc3Q6I2ZmOGQ3YTstLWVlLWNvbG9yLWNvcmFsLXN1cGVyLWxvdy1jb250cmFzdDojZmZhZDlhOy0tZWUtdGV4dC1vbi1jb3JhbDojMDAwOy0tZWUtdGV4dC1vbi1jb3JhbC1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLWNvcmFsLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tY29yYWwtbG93LWNvbnRyYXN0OiM0ZjAwMDA7LS1lZS10ZXh0LW9uLWNvcmFsLXN1cGVyLWxvdy1jb250cmFzdDojNjYxNDAxOy0tZWUtY29sb3Itb3JhbmdlOiNlZTdlMDQ7LS1lZS1jb2xvci1vcmFuZ2Utc3VwZXItaGlnaC1jb250cmFzdDojYWUzZTAwOy0tZWUtY29sb3Itb3JhbmdlLWhpZ2gtY29udHJhc3Q6I2NlNWUwMDstLWVlLWNvbG9yLW9yYW5nZS1sb3ctY29udHJhc3Q6I2ZmOWUyNDstLWVlLWNvbG9yLW9yYW5nZS1zdXBlci1sb3ctY29udHJhc3Q6I2ZmYmU0NDstLWVlLXRleHQtb24tb3JhbmdlOiMyNzAwMDA7LS1lZS10ZXh0LW9uLW9yYW5nZS1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLW9yYW5nZS1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLW9yYW5nZS1sb3ctY29udHJhc3Q6IzViMDAwMDstLWVlLXRleHQtb24tb3JhbmdlLXN1cGVyLWxvdy1jb250cmFzdDojNjUyNDAwOy0tZWUtY29sb3ItZ29sZDojZjZiZDAwOy0tZWUtY29sb3ItZ29sZC1zdXBlci1oaWdoLWNvbnRyYXN0OiNiNjdkMDA7LS1lZS1jb2xvci1nb2xkLWhpZ2gtY29udHJhc3Q6I2Q2OWQwMDstLWVlLWNvbG9yLWdvbGQtbG93LWNvbnRyYXN0OiNmZmRkMjA7LS1lZS1jb2xvci1nb2xkLXN1cGVyLWxvdy1jb250cmFzdDojZmZmZDQwOy0tZWUtdGV4dC1vbi1nb2xkOiM1ZTI1MDA7LS1lZS10ZXh0LW9uLWdvbGQtc3VwZXItaGlnaC1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1nb2xkLWhpZ2gtY29udHJhc3Q6IzNmMDYwMDstLWVlLXRleHQtb24tZ29sZC1sb3ctY29udHJhc3Q6IzYxM2YwMDstLWVlLXRleHQtb24tZ29sZC1zdXBlci1sb3ctY29udHJhc3Q6IzU4NTYwMDstLWVlLWNvbG9yLXllbGxvdzojZmFkODAwOy0tZWUtY29sb3IteWVsbG93LXN1cGVyLWhpZ2gtY29udHJhc3Q6I2JhOTgwMDstLWVlLWNvbG9yLXllbGxvdy1oaWdoLWNvbnRyYXN0OiNkYWI4MDA7LS1lZS1jb2xvci15ZWxsb3ctbG93LWNvbnRyYXN0OiNmZmY4MjA7LS1lZS1jb2xvci15ZWxsb3ctc3VwZXItbG93LWNvbnRyYXN0OiNmZmZmNDA7LS1lZS10ZXh0LW9uLXllbGxvdzojNWUzYzAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctc3VwZXItaGlnaC1jb250cmFzdDojMjMwMTAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctaGlnaC1jb250cmFzdDojNDcyNTAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctbG93LWNvbnRyYXN0OiM1OTUyMDA7LS1lZS10ZXh0LW9uLXllbGxvdy1zdXBlci1sb3ctY29udHJhc3Q6IzU3NTcwMDstLWVlLWNvbG9yLXllbGxvdy1ncmVlbjojZDNkNjAwOy0tZWUtY29sb3IteWVsbG93LWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzkzOTYwMDstLWVlLWNvbG9yLXllbGxvdy1ncmVlbi1oaWdoLWNvbnRyYXN0OiNiM2I2MDA7LS1lZS1jb2xvci15ZWxsb3ctZ3JlZW4tbG93LWNvbnRyYXN0OiNmM2Y2MjA7LS1lZS1jb2xvci15ZWxsb3ctZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiNmZmZmNDA7LS1lZS10ZXh0LW9uLXllbGxvdy1ncmVlbjojM2MzZjAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctZ3JlZW4tc3VwZXItaGlnaC1jb250cmFzdDojMDAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctZ3JlZW4taGlnaC1jb250cmFzdDojMjQyNzAwOy0tZWUtdGV4dC1vbi15ZWxsb3ctZ3JlZW4tbG93LWNvbnRyYXN0OiM0ZjUyMDA7LS1lZS10ZXh0LW9uLXllbGxvdy1ncmVlbi1zdXBlci1sb3ctY29udHJhc3Q6IzU3NTcwMDstLWVlLWNvbG9yLWxpZ2h0LWdyZWVuOiNhOWNlNDc7LS1lZS1jb2xvci1saWdodC1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiM2OThlMDc7LS1lZS1jb2xvci1saWdodC1ncmVlbi1oaWdoLWNvbnRyYXN0OiM4OWFlMjc7LS1lZS1jb2xvci1saWdodC1ncmVlbi1sb3ctY29udHJhc3Q6I2M5ZWU2NzstLWVlLWNvbG9yLWxpZ2h0LWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojZTlmZjg3Oy0tZWUtdGV4dC1vbi1saWdodC1ncmVlbjojMTUzYTAwOy0tZWUtdGV4dC1vbi1saWdodC1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiNmZmY7LS1lZS10ZXh0LW9uLWxpZ2h0LWdyZWVuLWhpZ2gtY29udHJhc3Q6IzAwMWIwMDstLWVlLXRleHQtb24tbGlnaHQtZ3JlZW4tbG93LWNvbnRyYXN0OiMyYjUwMDA7LS1lZS10ZXh0LW9uLWxpZ2h0LWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojNDQ1YTAwOy0tZWUtY29sb3ItZ3JlZW46IzkxYWIzMDstLWVlLWNvbG9yLWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzUxNmIwMDstLWVlLWNvbG9yLWdyZWVuLWhpZ2gtY29udHJhc3Q6IzcxOGIxMDstLWVlLWNvbG9yLWdyZWVuLWxvdy1jb250cmFzdDojYjFjYjUwOy0tZWUtY29sb3ItZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiNkMWViNzA7LS1lZS10ZXh0LW9uLWdyZWVuOiMwMDFhMDA7LS1lZS10ZXh0LW9uLWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tZ3JlZW4taGlnaC1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1ncmVlbi1sb3ctY29udHJhc3Q6IzFmMzkwMDstLWVlLXRleHQtb24tZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiMzNDRlMDA7LS1lZS1jb2xvci1icmlnaHQtZ3JlZW46IzcxYjk0YzstLWVlLWNvbG9yLWJyaWdodC1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiMzMTc5MGM7LS1lZS1jb2xvci1icmlnaHQtZ3JlZW4taGlnaC1jb250cmFzdDojNTE5OTJjOy0tZWUtY29sb3ItYnJpZ2h0LWdyZWVuLWxvdy1jb250cmFzdDojOTFkOTZjOy0tZWUtY29sb3ItYnJpZ2h0LWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojYjFmOThjOy0tZWUtdGV4dC1vbi1icmlnaHQtZ3JlZW46IzAwMjMwMDstLWVlLXRleHQtb24tYnJpZ2h0LWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tYnJpZ2h0LWdyZWVuLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tYnJpZ2h0LWdyZWVuLWxvdy1jb250cmFzdDojMDA0MTAwOy0tZWUtdGV4dC1vbi1icmlnaHQtZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiMwZjU3MDA7LS1lZS1jb2xvci1kYXJrLWdyZWVuOiM0ZDYwMjE7LS1lZS1jb2xvci1kYXJrLWdyZWVuLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzBkMjAwMDstLWVlLWNvbG9yLWRhcmstZ3JlZW4taGlnaC1jb250cmFzdDojMmQ0MDAxOy0tZWUtY29sb3ItZGFyay1ncmVlbi1sb3ctY29udHJhc3Q6IzZkODA0MTstLWVlLWNvbG9yLWRhcmstZ3JlZW4tc3VwZXItbG93LWNvbnRyYXN0OiM4ZGEwNjE7LS1lZS10ZXh0LW9uLWRhcmstZ3JlZW46I2ZmZjstLWVlLXRleHQtb24tZGFyay1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiM5OWFjOGM7LS1lZS10ZXh0LW9uLWRhcmstZ3JlZW4taGlnaC1jb250cmFzdDojYzBkMzk0Oy0tZWUtdGV4dC1vbi1kYXJrLWdyZWVuLWxvdy1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1kYXJrLWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojMDAwYTAwOy0tZWUtY29sb3ItYmx1ZS1ncmVlbjojMzk5Zjk0Oy0tZWUtY29sb3ItYmx1ZS1ncmVlbi1zdXBlci1oaWdoLWNvbnRyYXN0OiMwMDVmNTQ7LS1lZS1jb2xvci1ibHVlLWdyZWVuLWhpZ2gtY29udHJhc3Q6IzE5N2Y3NDstLWVlLWNvbG9yLWJsdWUtZ3JlZW4tbG93LWNvbnRyYXN0OiM1OWJmYjQ7LS1lZS1jb2xvci1ibHVlLWdyZWVuLXN1cGVyLWxvdy1jb250cmFzdDojNzlkZmQ0Oy0tZWUtdGV4dC1vbi1ibHVlLWdyZWVuOiMwMDA7LS1lZS10ZXh0LW9uLWJsdWUtZ3JlZW4tc3VwZXItaGlnaC1jb250cmFzdDojY2VmZmZmOy0tZWUtdGV4dC1vbi1ibHVlLWdyZWVuLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tYmx1ZS1ncmVlbi1sb3ctY29udHJhc3Q6IzAwMmExZjstLWVlLXRleHQtb24tYmx1ZS1ncmVlbi1zdXBlci1sb3ctY29udHJhc3Q6IzAwNDQzOTstLWVlLWNvbG9yLWJsdWU6IzI5N2FiYzstLWVlLWNvbG9yLWJsdWUtc3VwZXItaGlnaC1jb250cmFzdDojMDAzYTdjOy0tZWUtY29sb3ItYmx1ZS1oaWdoLWNvbnRyYXN0OiMwOTVhOWM7LS1lZS1jb2xvci1ibHVlLWxvdy1jb250cmFzdDojNDk5YWRjOy0tZWUtY29sb3ItYmx1ZS1zdXBlci1sb3ctY29udHJhc3Q6IzY5YmFmYzstLWVlLXRleHQtb24tYmx1ZTojZmZmOy0tZWUtdGV4dC1vbi1ibHVlLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzliZDVmZjstLWVlLXRleHQtb24tYmx1ZS1oaWdoLWNvbnRyYXN0OiNmN2ZmZmY7LS1lZS10ZXh0LW9uLWJsdWUtbG93LWNvbnRyYXN0OiMwMDA7LS1lZS10ZXh0LW9uLWJsdWUtc3VwZXItbG93LWNvbnRyYXN0OiMwMDIzNjU7LS1lZS1jb2xvci1kYXJrLWJsdWU6IzI3NDM2OTstLWVlLWNvbG9yLWRhcmstYmx1ZS1zdXBlci1oaWdoLWNvbnRyYXN0OiMwMDAzMjk7LS1lZS1jb2xvci1kYXJrLWJsdWUtaGlnaC1jb250cmFzdDojMDcyMzQ5Oy0tZWUtY29sb3ItZGFyay1ibHVlLWxvdy1jb250cmFzdDojNDc2Mzg5Oy0tZWUtY29sb3ItZGFyay1ibHVlLXN1cGVyLWxvdy1jb250cmFzdDojNjc4M2E5Oy0tZWUtdGV4dC1vbi1kYXJrLWJsdWU6I2JlZGFmZjstLWVlLXRleHQtb24tZGFyay1ibHVlLXN1cGVyLWhpZ2gtY29udHJhc3Q6IzkzOTZiYzstLWVlLXRleHQtb24tZGFyay1ibHVlLWhpZ2gtY29udHJhc3Q6Izk0YjBkNjstLWVlLXRleHQtb24tZGFyay1ibHVlLWxvdy1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1kYXJrLWJsdWUtc3VwZXItbG93LWNvbnRyYXN0OiNmZmY7LS1lZS1jb2xvci1icmlnaHQtYmx1ZTojNWFiZGRiOy0tZWUtY29sb3ItYnJpZ2h0LWJsdWUtc3VwZXItaGlnaC1jb250cmFzdDojMWE3ZDliOy0tZWUtY29sb3ItYnJpZ2h0LWJsdWUtaGlnaC1jb250cmFzdDojM2E5ZGJiOy0tZWUtY29sb3ItYnJpZ2h0LWJsdWUtbG93LWNvbnRyYXN0OiM3YWRkZmI7LS1lZS1jb2xvci1icmlnaHQtYmx1ZS1zdXBlci1sb3ctY29udHJhc3Q6IzlhZmRmZjstLWVlLXRleHQtb24tYnJpZ2h0LWJsdWU6IzAwMjc0NTstLWVlLXRleHQtb24tYnJpZ2h0LWJsdWUtc3VwZXItaGlnaC1jb250cmFzdDojZmZmOy0tZWUtdGV4dC1vbi1icmlnaHQtYmx1ZS1oaWdoLWNvbnRyYXN0OiMwMDA7LS1lZS10ZXh0LW9uLWJyaWdodC1ibHVlLWxvdy1jb250cmFzdDojMDA0MTVmOy0tZWUtdGV4dC1vbi1icmlnaHQtYmx1ZS1zdXBlci1sb3ctY29udHJhc3Q6IzAwNTg1YTstLWVlLWNvbG9yLWxpZ2h0LWJsdWU6IzlkY2RkNTstLWVlLWNvbG9yLWxpZ2h0LWJsdWUtc3VwZXItaGlnaC1jb250cmFzdDojNWQ4ZDk1Oy0tZWUtY29sb3ItbGlnaHQtYmx1ZS1oaWdoLWNvbnRyYXN0OiM3ZGFkYjU7LS1lZS1jb2xvci1saWdodC1ibHVlLWxvdy1jb250cmFzdDojYmRlZGY1Oy0tZWUtY29sb3ItbGlnaHQtYmx1ZS1zdXBlci1sb3ctY29udHJhc3Q6I2RmZjstLWVlLXRleHQtb24tbGlnaHQtYmx1ZTojMGIzYjQzOy0tZWUtdGV4dC1vbi1saWdodC1ibHVlLXN1cGVyLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tbGlnaHQtYmx1ZS1oaWdoLWNvbnRyYXN0OiMwMDFlMjY7LS1lZS10ZXh0LW9uLWxpZ2h0LWJsdWUtbG93LWNvbnRyYXN0OiMyMDUwNTg7LS1lZS10ZXh0LW9uLWxpZ2h0LWJsdWUtc3VwZXItbG93LWNvbnRyYXN0OiMzOTViNWI7LS1lZS1jb2xvci12aW9sZXQ6I2JmYTlkNDstLWVlLWNvbG9yLXZpb2xldC1zdXBlci1oaWdoLWNvbnRyYXN0OiM3ZjY5OTQ7LS1lZS1jb2xvci12aW9sZXQtaGlnaC1jb250cmFzdDojOWY4OWI0Oy0tZWUtY29sb3ItdmlvbGV0LWxvdy1jb250cmFzdDojZGZjOWY0Oy0tZWUtY29sb3ItdmlvbGV0LXN1cGVyLWxvdy1jb250cmFzdDojZmZlOWZmOy0tZWUtdGV4dC1vbi12aW9sZXQ6IzMyMWM0NzstLWVlLXRleHQtb24tdmlvbGV0LXN1cGVyLWhpZ2gtY29udHJhc3Q6I2ZmZjstLWVlLXRleHQtb24tdmlvbGV0LWhpZ2gtY29udHJhc3Q6IzAwMDstLWVlLXRleHQtb24tdmlvbGV0LWxvdy1jb250cmFzdDojNGEzNDVmOy0tZWUtdGV4dC1vbi12aW9sZXQtc3VwZXItbG93LWNvbnRyYXN0OiM1ZjQ5NWY7LS1lZS1jb2xvci1wdXJwbGU6Izc5NWQ5ZDstLWVlLWNvbG9yLXB1cnBsZS1zdXBlci1oaWdoLWNvbnRyYXN0OiMzOTFkNWQ7LS1lZS1jb2xvci1wdXJwbGUtaGlnaC1jb250cmFzdDojNTkzZDdkOy0tZWUtY29sb3ItcHVycGxlLWxvdy1jb250cmFzdDojOTk3ZGJkOy0tZWUtY29sb3ItcHVycGxlLXN1cGVyLWxvdy1jb250cmFzdDojYjk5ZGRkOy0tZWUtdGV4dC1vbi1wdXJwbGU6I2ZmZjstLWVlLXRleHQtb24tcHVycGxlLXN1cGVyLWhpZ2gtY29udHJhc3Q6I2M4YWNlYzstLWVlLXRleHQtb24tcHVycGxlLWhpZ2gtY29udHJhc3Q6I2Y5ZGRmZjstLWVlLXRleHQtb24tcHVycGxlLWxvdy1jb250cmFzdDojMDAwOy0tZWUtdGV4dC1vbi1wdXJwbGUtc3VwZXItbG93LWNvbnRyYXN0OiMyYTBlNGU7LS1lZS1jb2xvci1pbmRpZ286IzI2MjAzZDstLWVlLWNvbG9yLWluZGlnby1zdXBlci1oaWdoLWNvbnRyYXN0OiMwMDA7LS1lZS1jb2xvci1pbmRpZ28taGlnaC1jb250cmFzdDojMDYwMDFkOy0tZWUtY29sb3ItaW5kaWdvLWxvdy1jb250cmFzdDojNDY0MDVkOy0tZWUtY29sb3ItaW5kaWdvLXN1cGVyLWxvdy1jb250cmFzdDojNjY2MDdkOy0tZWUtdGV4dC1vbi1pbmRpZ286I2IxYWJjODstLWVlLXRleHQtb24taW5kaWdvLXN1cGVyLWhpZ2gtY29udHJhc3Q6Izk1OTU5NTstLWVlLXRleHQtb24taW5kaWdvLWhpZ2gtY29udHJhc3Q6IzlhOTRiMTstLWVlLXRleHQtb24taW5kaWdvLWxvdy1jb250cmFzdDojZGRkN2Y0Oy0tZWUtdGV4dC1vbi1pbmRpZ28tc3VwZXItbG93LWNvbnRyYXN0OiNmZmY7LS1lZS1jb2xvci1ibGFjazojMTgxODFhOy0tZWUtdGV4dC1vbi1ibGFjazojYTNhM2E1Oy0tZWUtY29sb3Itd2hpdGU6I2ZmZjstLWVlLXRleHQtb24td2hpdGU6IzU5NTk1OX0iLCI6cm9vdHstLWVlLWZvbnQtc2l6ZS1taWNybzowLjYwcmVtOy0tZWUtZm9udC1zaXplLXRpbnk6MC43MHJlbTstLWVlLWZvbnQtc2l6ZS1zbWFsbGVyOjAuODByZW07LS1lZS1mb250LXNpemUtc21hbGw6MC45MHJlbTstLWVlLWZvbnQtc2l6ZS1kZWZhdWx0OjEuMDByZW07LS1lZS1mb250LXNpemUtYmlnOjEuMjByZW07LS1lZS1mb250LXNpemUtYmlnZ2VyOjEuNTByZW07LS1lZS1mb250LXNpemUtaHVnZToyLjAwcmVtOy0tZWUtZm9udC1zaXplLWV4dHJlbWU6My4wMHJlbTstLWVlLWxpbmUtaGVpZ2h0LW1vZGlmaWVyOjEuNTstLWVlLXBhZGRpbmctbmFubzowLjEyNXJlbTstLWVlLXBhZGRpbmctbWljcm86MC4yNXJlbTstLWVlLXBhZGRpbmctdGlueTowLjVyZW07LS1lZS1wYWRkaW5nLXNtYWxsZXI6MC43NXJlbTstLWVlLXBhZGRpbmctc21hbGw6MXJlbTstLWVlLXBhZGRpbmctZGVmYXVsdDoxLjVyZW07LS1lZS1wYWRkaW5nLWJpZzoycmVtOy0tZWUtcGFkZGluZy1iaWdnZXI6Mi41cmVtOy0tZWUtcGFkZGluZy1odWdlOjNyZW07LS1lZS1wYWRkaW5nLWV4dHJlbWU6NHJlbTstLWVlLW1hcmdpbi1uYW5vOjAuMTI1cmVtOy0tZWUtbWFyZ2luLW1pY3JvOjAuMjVyZW07LS1lZS1tYXJnaW4tdGlueTowLjVyZW07LS1lZS1tYXJnaW4tc21hbGxlcjowLjc1cmVtOy0tZWUtbWFyZ2luLXNtYWxsOjFyZW07LS1lZS1tYXJnaW4tZGVmYXVsdDoxLjVyZW07LS1lZS1tYXJnaW4tYmlnOjJyZW07LS1lZS1tYXJnaW4tYmlnZ2VyOjIuNXJlbTstLWVlLW1hcmdpbi1odWdlOjNyZW07LS1lZS1tYXJnaW4tZXh0cmVtZTo0cmVtOy0tZWUtYm9yZGVyLXJhZGl1cy1ub25lOjBweDstLWVlLWJvcmRlci1yYWRpdXMtc21hbGw6M3B4Oy0tZWUtYm9yZGVyLXJhZGl1cy1kZWZhdWx0OjZweDstLWVlLWJvcmRlci1yYWRpdXMtYmlnOjEycHg7LS1lZS1ib3JkZXItcmFkaXVzLWJpZ2dlcjoyNHB4Oy0tZWUtYm9yZGVyLXJhZGl1cy1odWdlOjQ4cHg7LS1lZS1ib3JkZXItcmFkaXVzLWZ1bGw6MzAwMHB4fSIsIjpyb290ey0tZWUtaWNvbi1idXR0b24tc2l6ZTozNnB4fS5lc3Bycy1idXR0b24sLmVzcHJzLWJ1dHRvbjphY3RpdmUsLmVzcHJzLWJ1dHRvbjpmb2N1cywuZXNwcnMtYnV0dG9uOnZpc2l0ZWR7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLXNtYWxsKTtib3gtc2hhZG93OnZhcigtLWVlLWJveC1zaGFkb3ctdGlueSk7Ym94LXNpemluZzpjb250ZW50LWJveCFpbXBvcnRhbnQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtmb250LXdlaWdodDo0MDA7bWluLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tc21hbGxlcik7b3V0bGluZTpub25lIWltcG9ydGFudDtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctdGlueSkgdmFyKC0tZWUtcGFkZGluZy1zbWFsbCkgdmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKTt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzp2YXIoLS1lZS10ZXh0LXNoYWRvdy1pbnNldC1saWdodCk7dG9wOi0xcHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lc3Bycy1idXR0b246YWN0aXZle3RvcDowfS5lc3Bycy1idXR0b246aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmVzcHJzLWJ1dHRvbisuZXNwcnMtYnV0dG9ue21hcmdpbi1sZWZ0OnZhcigtLWVlLW1hcmdpbi1kZWZhdWx0KX0uZXNwcnMtYnV0dG9uIC50ZXh0LXdyYXB7Zm9udC13ZWlnaHQ6NzAwO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDpjYWxjKHZhcigtLWVlLXBhZGRpbmctbmFubykqLTEuNSk7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lc3Bycy1idXR0b24uZWUtbm9JY29uIC50ZXh0LXdyYXAsLmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXB7cG9zaXRpb246cmVsYXRpdmU7dG9wOnZhcigtLWVlLXBhZGRpbmctbmFubyl9LmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXB7bWFyZ2luOjAgMCAwIHZhcigtLWVlLXBhZGRpbmctc21hbGwpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZXNwcnMtYnV0dG9uIC5pbWctd3JhcCBzcGFue2xpbmUtaGVpZ2h0OjI0cHh9LmVzcHJzLWJ0bi1kZWZhdWx0e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xNSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTE0KTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMTUpO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JleS0xNCl9LmVzcHJzLWJ0bi1kZWZhdWx0OmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xNCl9LmVzcHJzLWJ0bi1wcmltYXJ5e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnktbG93LWNvbnRyYXN0KTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLXByaW1hcnkpfS5lc3Bycy1idG4tcHJpbWFyeTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLXByaW1hcnktbG93LWNvbnRyYXN0KX0uZXNwcnMtYnRuLXNlY29uZGFyeXtiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLXNlY29uZGFyeSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1zZWNvbmRhcnkpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tZWUtY29sb3Itc2Vjb25kYXJ5LWxvdy1jb250cmFzdCk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1zZWNvbmRhcnkpfS5lc3Bycy1idG4tc2Vjb25kYXJ5OmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3Itc2Vjb25kYXJ5LWxvdy1jb250cmFzdCl9LmVzcHJzLWJ0bi1hY2NlbnR7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1hY2NlbnQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3ItYWNjZW50KTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWVlLWNvbG9yLWFjY2VudC1sb3ctY29udHJhc3QpO2NvbG9yOnZhcigtLWVlLXRleHQtb24tYWNjZW50KX0uZXNwcnMtYnRuLWFjY2VudDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWFjY2VudC1sb3ctY29udHJhc3QpfS5lc3Bycy1idG4tdGlueS5lc3Bycy1idXR0b24sLmVzcHJzLWJ0bi10aW55LmVzcHJzLWJ1dHRvbjphY3RpdmUsLmVzcHJzLWJ0bi10aW55LmVzcHJzLWJ1dHRvbjpmb2N1cywuZXNwcnMtYnRuLXRpbnkuZXNwcnMtYnV0dG9uOnZpc2l0ZWR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KTttaW4taGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW5hbm8pIHZhcigtLWVlLXBhZGRpbmctdGlueSkgdmFyKC0tZWUtcGFkZGluZy1taWNybyl9LmVzcHJzLWJ0bi10aW55LmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXAgc3BhbntsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtdGlueSl9LmVzcHJzLWJ0bi1zbWFsbC5lc3Bycy1idXR0b24sLmVzcHJzLWJ0bi1zbWFsbC5lc3Bycy1idXR0b246YWN0aXZlLC5lc3Bycy1idG4tc21hbGwuZXNwcnMtYnV0dG9uOmZvY3VzLC5lc3Bycy1idG4tc21hbGwuZXNwcnMtYnV0dG9uOnZpc2l0ZWR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTttaW4taGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1taWNybykgdmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKSB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpfS5lc3Bycy1idG4tc21hbGwuZXNwcnMtYnV0dG9uOm5vdCguZWUtbm9JY29uKSAudGV4dC13cmFwe3RvcDotLjFyZW19LmVzcHJzLWJ0bi1zbWFsbC5lc3Bycy1idXR0b24gLmltZy13cmFwe3RvcDouMnJlbX0uZXNwcnMtYnRuLXNtYWxsLmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXAgc3BhbntsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcil9LmVzcHJzLWJ0bi1iaWcuZXNwcnMtYnV0dG9uLC5lc3Bycy1idG4tYmlnLmVzcHJzLWJ1dHRvbjphY3RpdmUsLmVzcHJzLWJ0bi1iaWcuZXNwcnMtYnV0dG9uOmZvY3VzLC5lc3Bycy1idG4tYmlnLmVzcHJzLWJ1dHRvbjp2aXNpdGVke2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnKTttaW4taGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKSB2YXIoLS1lZS1wYWRkaW5nLWRlZmF1bHQpIHZhcigtLWVlLXBhZGRpbmctc21hbGwpfS5lc3Bycy1idG4tYmlnLmVzcHJzLWJ1dHRvbiAuaW1nLXdyYXAgc3BhbntsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKX0uZXNwcnMtYnRuLWh1Z2UuZXNwcnMtYnV0dG9uLC5lc3Bycy1idG4taHVnZS5lc3Bycy1idXR0b246YWN0aXZlLC5lc3Bycy1idG4taHVnZS5lc3Bycy1idXR0b246Zm9jdXMsLmVzcHJzLWJ0bi1odWdlLmVzcHJzLWJ1dHRvbjp2aXNpdGVke2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTttaW4taGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1odWdlKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy1kZWZhdWx0KSB2YXIoLS1lZS1wYWRkaW5nLXNtYWxsKX0uZXNwcnMtYnRuLWh1Z2UuZXNwcnMtYnV0dG9uIC5pbWctd3JhcCBzcGFue2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lc3Bycy1idXR0b24rLmVzcHJzLWJ1dHRvbnttYXJnaW4tbGVmdDp2YXIoLS1lZS1tYXJnaW4tc21hbGxlcil9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVzcHJzLWJ1dHRvbisuZXNwcnMtYnV0dG9ue21hcmdpbi1sZWZ0OnZhcigtLWVlLW1hcmdpbi1taWNybyl9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDozNjBweCl7LmVzcHJzLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50O21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tdGlueSkgYXV0bzt3aWR0aDoxMDAlfS5lc3Bycy1idXR0b24rLmVzcHJzLWJ1dHRvbnttYXJnaW4tbGVmdDphdXRvfX0iLCIuZWUtY29udGFpbmVyLC5lZS1jb250YWluZXItYWNjZW50LC5lZS1jb250YWluZXItZGVmYXVsdCwuZWUtY29udGFpbmVyLXByaW1hcnksLmVlLWNvbnRhaW5lci1zZWNvbmRhcnl7Ym9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLWRlZmF1bHQpOy1tb3otYm9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLWRlZmF1bHQpOy13ZWJraXQtYm9yZGVyLXJhZGl1czp2YXIoLS1lZS1ib3JkZXItcmFkaXVzLWRlZmF1bHQpO2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtsaW5lLWhlaWdodDp2YXIoLS1lZS1saW5lLWhlaWdodC1tb2RpZmllcik7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwIHZhcigtLWVlLW1hcmdpbi1kZWZhdWx0KTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctZGVmYXVsdCl9LmVlLWNvbnRhaW5lci1kZWZhdWx0e2JhY2tncm91bmQ6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcil9LmVlLWNvbnRhaW5lci1wcmltYXJ5e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLXByaW1hcnkpfS5lZS1jb250YWluZXItc2Vjb25kYXJ5e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3Itc2Vjb25kYXJ5KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLXNlY29uZGFyeSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1zZWNvbmRhcnkpfS5lZS1jb250YWluZXItYWNjZW50e2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItYWNjZW50KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWFjY2VudCk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1hY2NlbnQpfSIsIjpyb290ey0tZWUtYW5pbWF0aW9uLXNwaW46ZWUtYW5pbWF0aW9uLXNwaW4gMXMgbGluZWFyIGluZmluaXRlOy0tZWUtYW5pbWF0aW9uLXNwaW4tY2M6ZWUtYW5pbWF0aW9uLXNwaW4tY2MgMXMgbGluZWFyIGluZmluaXRlOy0tZWUtYW5pbWF0aW9uLXNwaW4tZmFzdDplZS1hbmltYXRpb24tc3BpbiAuMjVzIGVhc2UtaW4gaW5maW5pdGV9QGtleWZyYW1lcyBlZS1hbmltYXRpb24tc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19QGtleWZyYW1lcyBlZS1hbmltYXRpb24tc3Bpbi1jY3t0b3t0cmFuc2Zvcm06cm90YXRlKC0xdHVybil9fSIsIi5lZS1zdGF0dXMtY29sb3ItVE9Qe2NvbG9yOnZhcigtLWVlLWNvbG9yLW9yYW5nZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRPUHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLW9yYW5nZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1vcmFuZ2UpfS5lZS1zdGF0dXMtY29sb3ItVENNe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVENNe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItVElOe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1USU57YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItVEFCe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdvbGQpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1UQUJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1nb2xkKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWdvbGQpfS5lZS1zdGF0dXMtY29sb3ItVEZMe2NvbG9yOnZhcigtLWVlLWNvbG9yLWhvdC1waW5rKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEZMe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspO2NvbG9yOnZhcigtLWVlLXRleHQtb24taG90LXBpbmspfS5lZS1zdGF0dXMtY29sb3ItUEFQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUEFQe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItUFBOe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QUE57YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItUEZMe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdvbGQpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1QRkx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1nb2xkKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWdvbGQpfS5lZS1zdGF0dXMtY29sb3ItUERDe2NvbG9yOnZhcigtLWVlLWNvbG9yLWhvdC1waW5rKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUERDe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspO2NvbG9yOnZhcigtLWVlLXRleHQtb24taG90LXBpbmspfS5lZS1zdGF0dXMtY29sb3ItUENOe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVBDTntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTcpfS5lZS1zdGF0dXMtY29sb3ItUkFQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUkFQe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItUlBQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SUFB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItUldMe2NvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJXTHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1wdXJwbGUpfS5lZS1zdGF0dXMtY29sb3ItUklDe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdvbGQpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1SSUN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1nb2xkKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWdvbGQpfS5lZS1zdGF0dXMtY29sb3ItUk5Be2NvbG9yOnZhcigtLWVlLWNvbG9yLW9yYW5nZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJOQXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLW9yYW5nZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1vcmFuZ2UpfS5lZS1zdGF0dXMtY29sb3ItUkRDe2NvbG9yOnZhcigtLWVlLWNvbG9yLWhvdC1waW5rKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItUkRDe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspO2NvbG9yOnZhcigtLWVlLXRleHQtb24taG90LXBpbmspfS5lZS1zdGF0dXMtY29sb3ItUkNOe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVJDTntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTcpfS5lZS1zdGF0dXMtY29sb3ItRFRTe2NvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUU3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1wdXJwbGUpfS5lZS1zdGF0dXMtY29sb3ItRFRBe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRBe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItRFRVe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVFV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItRFRQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdvbGQpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVFB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1nb2xkKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWdvbGQpfS5lZS1zdGF0dXMtY29sb3ItRFRDe2NvbG9yOnZhcigtLWVlLWNvbG9yLWhvdC1waW5rKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItRFRDe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspO2NvbG9yOnZhcigtLWVlLXRleHQtb24taG90LXBpbmspfS5lZS1zdGF0dXMtY29sb3ItRFRJe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUtZ3JlZW4pfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1EVEl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlLWdyZWVuKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUtZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItRFRFe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURURXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTcpfS5lZS1zdGF0dXMtY29sb3ItRFRUe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLURUVHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTMpfS5lZS1zdGF0dXMtY29sb3ItVEtTe2NvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLU3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLXB1cnBsZSk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1wdXJwbGUpfS5lZS1zdGF0dXMtY29sb3ItVEtPe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZWVuKX0uZWUtc3RhdHVzLWJhY2tncm91bmQtY29sb3ItVEtPe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZWUtY29sb3ItZ3JlZW4pO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4pfS5lZS1zdGF0dXMtY29sb3ItVEtQe2NvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpfS5lZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci1US1B7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ibHVlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpfS5lZS1zdGF0dXMtY29sb3ItVEtFe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLRXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTcpfS5lZS1zdGF0dXMtY29sb3ItVEtBe2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMyl9LmVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLVRLQXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktMyk7Y29sb3I6dmFyKC0tZWUtdGV4dC1vbi1ncmV5LTMpfSIsIjpyb290ey0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLW1pY3JvOjJweDstLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS10aW55OjFweDstLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS1odWdlOi0xcHg7LS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtZXh0cmVtZTotMnB4Oy0tZWUtd29yZC1zcGFjaW5nLWZvbnQtc2l6ZS1taWNybzo0cHg7LS1lZS13b3JkLXNwYWNpbmctZm9udC1zaXplLXRpbnk6MnB4Oy0tZWUtd29yZC1zcGFjaW5nLWZvbnQtc2l6ZS1zbWFsbGVyOjFweH0uZWUtZm9jdXMtcHJpb3JpdHktMXtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3Itc3VwZXItbG93LWNvbnRyYXN0KTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWV4dHJlbWUpO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtZXh0cmVtZSk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1saW5lLWhlaWdodC1tb2RpZmllcikqMC43NSl9LmVlLWZvY3VzLXByaW9yaXR5LTJ7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yLWxvdy1jb250cmFzdCk7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1odWdlKTtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLWh1Z2UpO2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpKjAuODc1KX0uZWUtZm9jdXMtcHJpb3JpdHktM3tmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcil9LmVlLWZvY3VzLXByaW9yaXR5LTMsLmVlLWZvY3VzLXByaW9yaXR5LTR7bGluZS1oZWlnaHQ6dmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpfS5lZS1mb2N1cy1wcmlvcml0eS00e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnKX0uZWUtZm9jdXMtcHJpb3JpdHktNXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWxpbmUtaGVpZ2h0LW1vZGlmaWVyKX0uZWUtZm9jdXMtcHJpb3JpdHktNntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKX0uZWUtZm9jdXMtcHJpb3JpdHktNiwuZWUtZm9jdXMtcHJpb3JpdHktN3tjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3ItaGlnaC1jb250cmFzdCk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpfS5lZS1mb2N1cy1wcmlvcml0eS03e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7d29yZC1zcGFjaW5nOnZhcigtLWVlLXdvcmQtc3BhY2luZy1mb250LXNpemUtc21hbGxlcil9LmVlLWZvY3VzLXByaW9yaXR5LTh7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtdGlueSk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1saW5lLWhlaWdodC1tb2RpZmllcikqMS4xMjUpO3dvcmQtc3BhY2luZzp2YXIoLS1lZS13b3JkLXNwYWNpbmctZm9udC1zaXplLXRpbnkpfS5lZS1mb2N1cy1wcmlvcml0eS04LC5lZS1mb2N1cy1wcmlvcml0eS05e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1zdXBlci1oaWdoLWNvbnRyYXN0KX0uZWUtZm9jdXMtcHJpb3JpdHktOXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLW1pY3JvKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pO2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tZWUtbGluZS1oZWlnaHQtbW9kaWZpZXIpKjEuMjUpO3dvcmQtc3BhY2luZzp2YXIoLS1lZS13b3JkLXNwYWNpbmctZm9udC1zaXplLW1pY3JvKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc4MnB4KXsuZWUtZm9jdXMtcHJpb3JpdHktMXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWh1Z2UpfS5lZS1mb2N1cy1wcmlvcml0eS0ye2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKX0uZWUtZm9jdXMtcHJpb3JpdHktM3tmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZyl9LmVlLWZvY3VzLXByaW9yaXR5LTR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KX0uZWUtZm9jdXMtcHJpb3JpdHktNXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKX0uZWUtZm9jdXMtcHJpb3JpdHktNntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpfS5lZS1mb2N1cy1wcmlvcml0eS03LC5lZS1mb2N1cy1wcmlvcml0eS04e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSl9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lZS1mb2N1cy1wcmlvcml0eS0xe2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKX0uZWUtZm9jdXMtcHJpb3JpdHktMntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZyl9LmVlLWZvY3VzLXByaW9yaXR5LTN7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KX0uZWUtZm9jdXMtcHJpb3JpdHktNHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKX0uZWUtZm9jdXMtcHJpb3JpdHktNXtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsZXIpfS5lZS1mb2N1cy1wcmlvcml0eS02LC5lZS1mb2N1cy1wcmlvcml0eS03LC5lZS1mb2N1cy1wcmlvcml0eS04e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSl9fSIsIjpyb290ey0tZWUtYm94LXNoYWRvdy10aW55OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuNik7LS1lZS1ib3gtc2hhZG93LXRpbnktZGlmZnVzZTowIDAgMXB4IHJnYmEoMCwwLDAsMC4yKTstLWVlLWJveC1zaGFkb3ctc21hbGw6MCAycHggNHB4IHJnYmEoMCwwLDAsMC42KSwwIDRweCA4cHggNHB4IHJnYmEoMCwwLDAsMC4xKTstLWVlLWJveC1zaGFkb3ctc21hbGwtZGlmZnVzZTowIDFweCAycHggcmdiYSgwLDAsMCwwLjIpOy0tZWUtYm94LXNoYWRvdy1kZWZhdWx0OjAgM3B4IDZweCByZ2JhKDAsMCwwLDAuNiksMCA4cHggMTZweCA4cHggcmdiYSgwLDAsMCwwLjA1KTstLWVlLWJveC1zaGFkb3ctZGVmYXVsdC1kaWZmdXNlOjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMik7LS1lZS1ib3gtc2hhZG93LWJpZzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC42KSwwIDAgMjRweCAxNnB4IHJnYmEoMCwwLDAsMC4wNSk7LS1lZS1ib3gtc2hhZG93LWJpZy1kaWZmdXNlOjAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMik7LS1lZS1ib3gtc2hhZG93LXdwLWljb24tYnRuLWhvdmVyOmluc2V0IDAgMCAwIDFweCB2YXIoLS1lZS1jb2xvci1ncmV5LTEwKSxpbnNldCAwIDAgMCAycHggdmFyKC0tZWUtY29sb3Itd2hpdGUpLDAgMXB4IDFweCByZ2JhKDI1LDMwLDM1LDAuMik7LS1lZS1ib3gtc2hhZG93LXdwLWljb24tYnRuLWZvY3VzOmluc2V0IDAgMCAwIDFweCB2YXIoLS1lZS1jb2xvci1ncmV5LTUpLGluc2V0IDAgMCAwIDJweCB2YXIoLS1lZS1jb2xvci13aGl0ZSk7LS1lZS10ZXh0LXNoYWRvdy1pbnNldDotMXB4IC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy0tZWUtdGV4dC1zaGFkb3ctaW5zZXQtbGlnaHQ6LTFweCAtMXB4IDAgaHNsYSgwLDAlLDEwMCUsMC4xNSk7LS1lZS10ZXh0LXNoYWRvdy1zbWFsbDowIDFweCAycHggcmdiYSgwLDAsMCwwLjUpOy0tZWUtdGV4dC1zaGFkb3ctZGVmYXVsdDowIDJweCA0cHggcmdiYSgwLDAsMCwwLjM3NSk7LS1lZS10ZXh0LXNoYWRvdy1iaWc6MCAzcHggNnB4IHJnYmEoMCwwLDAsMC4yNSl9Il0sInNvdXJjZVJvb3QiOiIifQ==*/ \ No newline at end of file diff --git a/assets/dist/eventespresso-data-stores.c14db32eb18a7b1a62c5.dist.deps.json b/assets/dist/eventespresso-data-stores.fbd950f7e377f1cb31ef.dist.deps.json similarity index 100% rename from assets/dist/eventespresso-data-stores.c14db32eb18a7b1a62c5.dist.deps.json rename to assets/dist/eventespresso-data-stores.fbd950f7e377f1cb31ef.dist.deps.json diff --git a/assets/dist/eventespresso-data-stores.c14db32eb18a7b1a62c5.dist.js b/assets/dist/eventespresso-data-stores.fbd950f7e377f1cb31ef.dist.js similarity index 55% rename from assets/dist/eventespresso-data-stores.c14db32eb18a7b1a62c5.dist.js rename to assets/dist/eventespresso-data-stores.fbd950f7e377f1cb31ef.dist.js index 62d7e6b0437..88e6484cc49 100644 --- a/assets/dist/eventespresso-data-stores.c14db32eb18a7b1a62c5.dist.js +++ b/assets/dist/eventespresso-data-stores.fbd950f7e377f1cb31ef.dist.js @@ -10850,54 +10850,75 @@ var assertDateTimeEntity = function assertDateTimeEntity(DateTimeEntity) { /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities + * @return {boolean} true if event date is valid entity or archive + */ + + +var isValidEntityOrArchive = function isValidEntityOrArchive(DateTimeEntity, includeTrashed) { + return includeTrashed && assertDateTimeEntity(DateTimeEntity) || !includeTrashed && !isTrashed(DateTimeEntity); +}; +/** + * @function + * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if event date is occurring NOW */ var isActive = function isActive(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - return DateTimeEntity.start.diffNow().asSeconds() < 0 && DateTimeEntity.end.diffNow().asSeconds() > 0; + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(DateTimeEntity, includeTrashed) && DateTimeEntity.start.diffNow().asSeconds() < 0 && DateTimeEntity.end.diffNow().asSeconds() > 0; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if end date is in the past */ var isExpired = function isExpired(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - return DateTimeEntity.end.diffNow().asSeconds() < 0; + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(DateTimeEntity, includeTrashed) && DateTimeEntity.end.diffNow().asSeconds() < 0; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if end date is in the past */ var isRecentlyExpired = function isRecentlyExpired(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - return DateTimeEntity.end.diffNow().asSeconds() < 0 && DateTimeEntity.end.diffNow().asSeconds() > _constants__WEBPACK_IMPORTED_MODULE_2__["MONTH_IN_SECONDS"] * -1; + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(DateTimeEntity, includeTrashed) && DateTimeEntity.end.diffNow().asSeconds() < 0 && DateTimeEntity.end.diffNow().asSeconds() > _constants__WEBPACK_IMPORTED_MODULE_2__["MONTH_IN_SECONDS"] * -1; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if tickets sold meets or exceeds registration limit */ var isSoldOut = function isSoldOut(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (includeTrashed && !assertDateTimeEntity(DateTimeEntity) || !includeTrashed && isTrashed(DateTimeEntity)) { + return false; + } + var cap = DateTimeEntity.regLimit; return cap !== null && cap !== 'INF' && cap !== Infinity && cap !== -1 && DateTimeEntity.sold >= cap; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if start date is in the future */ var isUpcoming = function isUpcoming(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - return DateTimeEntity.start.diffNow().asSeconds() > 0; + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(DateTimeEntity, includeTrashed) && DateTimeEntity.start.diffNow().asSeconds() > 0; }; /** * @function @@ -10939,8 +10960,6 @@ var isTrashed = function isTrashed(DateTimeEntity) { */ var status = function status(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - if (isTrashed(DateTimeEntity)) { return _constants__WEBPACK_IMPORTED_MODULE_2__["DATETIME_STATUS_ID"].TRASHED; } @@ -10968,6 +10987,7 @@ var status = function status(DateTimeEntity) { // } + assertDateTimeEntity(DateTimeEntity); return _constants__WEBPACK_IMPORTED_MODULE_2__["DATETIME_STATUS_ID"].INACTIVE; }; /** @@ -14878,45 +14898,65 @@ var assertTicketEntity = function assertTicketEntity(TicketEntity) { /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out trashed entities + * @return {boolean} true if event date is valid entity or archive + */ + + +var isValidEntityOrArchive = function isValidEntityOrArchive(TicketEntity, includeArchived) { + return includeArchived && assertTicketEntity(TicketEntity) || !includeArchived && !isArchived(TicketEntity); +}; +/** + * @function + * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if ticket is currently available for purchase */ var isOnSale = function isOnSale(TicketEntity) { - assertTicketEntity(TicketEntity); - return !isArchived(TicketEntity) && TicketEntity.startDate.diffNow() < 0 && TicketEntity.endDate.diffNow() > 0; + var includeArchived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(TicketEntity, includeArchived) && TicketEntity.startDate.diffNow() < 0 && TicketEntity.endDate.diffNow() > 0; }; /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if ticket can no longer be purchased */ var isExpired = function isExpired(TicketEntity) { - assertTicketEntity(TicketEntity); - return TicketEntity.endDate.diffNow() < 0; + var includeArchived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(TicketEntity, includeArchived) && TicketEntity.endDate.diffNow() < 0; }; /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if tickets sold meets or exceeds available quantity */ var isSoldOut = function isSoldOut(TicketEntity) { - assertTicketEntity(TicketEntity); + var includeArchived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (includeArchived && !assertTicketEntity(TicketEntity) || !includeArchived && isArchived(TicketEntity)) { + return false; + } + var qty = TicketEntity.qty; - return qty !== null && qty !== 'INF' && qty !== Infinity && TicketEntity.sold >= qty; + return qty !== null && qty !== 'INF' && qty !== Infinity && qty !== -1 && TicketEntity.sold >= qty; }; /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if ticket is not yet available for purchase, * but will be at some date in the future */ var isPending = function isPending(TicketEntity) { - assertTicketEntity(TicketEntity); - return !isArchived(TicketEntity) && TicketEntity.startDate.diffNow() > 0; + var includeArchived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(TicketEntity, includeArchived) && TicketEntity.startDate.diffNow() > 0; }; /** * @function @@ -14935,8 +14975,6 @@ var isArchived = function isArchived(TicketEntity) { */ var status = function status(TicketEntity) { - assertTicketEntity(TicketEntity); - if (isArchived(TicketEntity)) { return _constants__WEBPACK_IMPORTED_MODULE_2__["TICKET_STATUS_ID"].ARCHIVED; } @@ -23608,4 +23646,4 @@ module.exports = __webpack_require__(/*! ./assets/src/data/index.js */"./assets/ /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vYmFzZS1jb250cm9scy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9iYXNlLW1vZGVsLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2Jhc2Utc2VsZWN0b3JzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvYWN0aW9ucy9hY3Rpb24tY3JlYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9hY3Rpb25zL2FjdGlvbi1nZW5lcmF0b3JzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvYWN0aW9ucy9hY3Rpb24tdHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9hY3Rpb25zL2NyZWF0ZS1lbnRpdGllcy1nZW5lcmF0b3JzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvYWN0aW9ucy9jcmVhdGUtcmVsYXRpb25zLWdlbmVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9hY3Rpb25zL2RlbGV0ZS1lbnRpdHktZ2VuZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvZGVsZXRlLXJlbGF0aW9ucy1nZW5lcmF0b3JzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvYWN0aW9ucy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvcGVyc2lzdC1lbnRpdHktZ2VuZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvcGVyc2lzdC1yZWxhdGlvbnMtZ2VuZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvcmVjZWl2ZS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvcmVjZWl2ZS1yZWxhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9hY3Rpb25zL3JlbW92ZS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvcmVtb3ZlLXJlbGF0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvcmVzZXQuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL21vZGVsL2NoZWNraW4vYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL21vZGVsL2NoZWNraW4vcmVzb2x2ZXJzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvbW9kZWwvY2hlY2tpbi9zZWxlY3RvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9tb2RlbC9lbnRpdHktYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL21vZGVsL2VudGl0eS1yZXNvbHZlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9tb2RlbC9lbnRpdHktc2VsZWN0b3JzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvbW9kZWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9tb2RlbC9tb2RlbC1hY3Rpb25zLWluZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvbW9kZWwvbW9kZWwtcmVzb2x2ZXJzLWluZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvbW9kZWwvbW9kZWwtc2VsZWN0b3JzLWluZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvbW9kZWwvbW9kZWwtc3BlY2lmaWMtYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL21vZGVsL21vZGVsLXNwZWNpZmljLXNlbGVjdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL21vZGVsL3JlbGF0aW9uLWFjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9tb2RlbC9yZWxhdGlvbi1zZWxlY3RvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9yZWR1Y2Vycy9kaXJ0eS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3JlZHVjZXJzL2RpcnR5LXJlbGF0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3JlZHVjZXJzL2RpcnR5LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvcmVkdWNlcnMvZW50aXRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9yZWR1Y2Vycy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3JlZHVjZXJzL21vZGVsLXNwZWNpZmljLXJlZHVjZXJzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvcmVkdWNlcnMvcmVsYXRpb25zLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvcmVzb2x2ZXJzL2VudGl0aWVzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvcmVzb2x2ZXJzL2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvcmVzb2x2ZXJzL3JlbGF0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3Jlc29sdmVycy91dGlscy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3NlbGVjdG9ycy9lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3NlbGVjdG9ycy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3NlbGVjdG9ycy9yZWxhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vZmlsdGVyLXN0YXRlL2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2xpc3RzL2FjdGlvbi10eXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9saXN0cy9hY3Rpb25zLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2xpc3RzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9saXN0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9saXN0cy9tb2RlbC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9saXN0cy9yZWR1Y2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9saXN0cy9yZXNvbHZlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vbGlzdHMvc2VsZWN0b3JzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL3NjaGVtYS9hY3Rpb24tdHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vc2NoZW1hL2FjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vc2NoZW1hL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9zY2hlbWEvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vc2NoZW1hL21vZGVsLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL3NjaGVtYS9yZWR1Y2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9zY2hlbWEvcmVzb2x2ZXJzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL3NjaGVtYS9zZWxlY3RvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9hc3NlcnRpb25zLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9hdHRlbmRlZS9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2F0dGVuZGVlL2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9hdHRlbmRlZS9xdWVyeS5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvYmFzZS1kYXRlLWZvcm1hdHRlci5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvY2hlY2tpbi9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2NoZWNraW4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2NoZWNraW4vcXVlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2RhdGV0aW1lL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZGF0ZXRpbWUvZm9ybWF0dGVyLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9kYXRldGltZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZGF0ZXRpbWUvcXVlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2RhdGV0aW1lL3N0YXR1cy1oZWxwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2RlZmF1bHQtbW9kZWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VuZHBvaW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvYXNzZXJ0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvYmFzZS1lbnRpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L2Jvb2xlYW5zLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvZXh0cmFjdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L3ZhbGlkYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2V2ZW50L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZXZlbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2V2ZW50L3F1ZXJ5LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvbW9kZWwtbmFtZXMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL21vZGVscy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvcHJpY2UtdHlwZS9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3ByaWNlLXR5cGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3ByaW1hcnkta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvcmVnaXN0cmF0aW9uL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvcmVnaXN0cmF0aW9uL2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9yZWdpc3RyYXRpb24vcXVlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3N0YXR1cy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3N0YXR1cy9oZWxwZXJzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9zdGF0dXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3N0YXR1cy9xdWVyeS5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvdGlja2V0L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvdGlja2V0L2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC90aWNrZXQvcXVlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3RpY2tldC9zdGF0dXMtaGVscGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aEhvbGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVJlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ltbXV0YWJsZS9kaXN0L2ltbXV0YWJsZS5lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbWVtaXplL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wbHVyYWxpemUvcGx1cmFsaXplLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVtZW1vL2VzL3JlbWVtby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvd2FybmluZy93YXJuaW5nLmpzIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6XCJyZWdlbmVyYXRvclJ1bnRpbWVcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCJdfSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImhlbHBlcnNcIl19Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwiaTE4blwiXX0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJtb2RlbFwiXX0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2YWxpZGF0b3JzXCJdfSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcInZhbHVlT2JqZWN0c1wiXX0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiYXBpRmV0Y2hcIl19Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImRhdGFcIl19Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImhvb2tzXCJdfSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJpc1NoYWxsb3dFcXVhbFwiXX0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwidXJsXCJdfSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcInZlbmRvclwiLFwiY3VpZFwiXX0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpcImxvZGFzaFwifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcInZlbmRvclwiLFwibW9tZW50XCJdfSJdLCJuYW1lcyI6WyJmZXRjaCIsInJlcXVlc3QiLCJ0eXBlIiwic2VsZWN0IiwicmVkdWNlcktleSIsInNlbGVjdG9yTmFtZSIsImFyZ3MiLCJyZXNvbHZlU2VsZWN0IiwiZGlzcGF0Y2giLCJkaXNwYXRjaE5hbWUiLCJyZXNvbHZlRGlzcGF0Y2giLCJyZXNvbHZlR2V0RW50aXR5QnlJZEZvcklkcyIsIm1vZGVsTmFtZSIsImVudGl0eUlkcyIsInJlc29sdmVHZXRSZWxhdGVkRW50aXRpZXMiLCJlbnRpdHkiLCJyZWxhdGlvbkVudGl0aWVzIiwicmVsYXRpb25JZHMiLCJjb250cm9scyIsIkZFVENIX0ZST01fQVBJIiwiYXBpRmV0Y2giLCJTRUxFQ1QiLCJzZWxlY3REYXRhIiwiRElTUEFUQ0giLCJkaXNwYXRjaERhdGEiLCJSRVNPTFZFX0RJU1BBVENIIiwiUkVTT0xWRV9TRUxFQ1QiLCJQcm9taXNlIiwicmVzb2x2ZSIsImhhc0ZpbmlzaGVkIiwiaGFzRmluaXNoZWRSZXNvbHV0aW9uIiwiZ2V0UmVzdWx0IiwiYXBwbHkiLCJyZXN1bHQiLCJ1bnN1YnNjcmliZSIsInN1YnNjcmliZSIsIlJFU09MVkVfR0VUX0VOVElUWV9CWV9JRF9GT1JfSURTIiwibGVuZ3RoIiwiQ09SRV9SRURVQ0VSX0tFWSIsInBvcCIsIlJFU09MVkVfR0VUX1JFTEFURURfRU5USVRJRVMiLCJyZWxhdGlvbkVudGl0eSIsImdldCIsInBsdXJhbE1vZGVsTmFtZSIsImdldE1ldGhvZE5hbWUiLCJzdWZmaXgiLCJwcmVmaXgiLCJ1c2VQbHVyYWwiLCJwbHVyYWxpemUiLCJ1cHBlckZpcnN0IiwiY2FtZWxDYXNlIiwia2VlcEV4aXN0aW5nRW50aXRpZXNJbk9iamVjdCIsImV4aXN0aW5nRW50aXRpZXMiLCJpbmNvbWluZ0VudGl0aWVzIiwiZ2V0RXhpc3RpbmdPckRlZmF1bHRFbnRpdHkiLCJkZWZhdWx0RW50aXR5IiwiZW50aXR5SWQiLCJpc01hcCIsImhhcyIsInJlZHVjZUNhbGxiYWNrIiwibWFwcGVkIiwibm9ybWFsaXplRW50aXR5SWQiLCJzZXQiLCJtYXBSZWR1Y2VyIiwiTWFwIiwicmVkdWNlIiwib3JpZ2luYWxJZCIsInBhcnNlSW50IiwiaXNOYU4iLCJpc1Jlc29sdmluZyIsImhhc0ZpbmlzaGVkUmVzb2x2aW5nIiwiZW50aXRpZXMiLCJSRUNFSVZFX0VOVElUWV9SRUNPUkRTIiwiUkVDRUlWRV9BTkRfUkVQTEFDRV9FTlRJVFlfUkVDT1JEUyIsIlJFQ0VJVkVfRU5USVRZIiwiUkVNT1ZFX0VOVElUWV9CWV9JRCIsIlJFTU9WRV9ERUxFVEVfRU5USVRZX0lEIiwiUkVNT1ZFX1RSQVNIX0VOVElUWV9JRCIsIlJFQ0VJVkVfVFJBU0hfRU5USVRZX0lEIiwiUkVDRUlWRV9ERUxFVEVfRU5USVRZX0lEIiwicmVsYXRpb25zIiwiUkVNT1ZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OIiwiUkVNT1ZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OIiwiUkVDRUlWRV9SRUxBVEVEX0VOVElUWV9JRFMiLCJSRU1PVkVfUkVMQVRFRF9FTlRJVFlfSURTIiwiUkVNT1ZFX1JFTEFURURfRU5USVRJRVNfRk9SX0VOVElUWSIsIlJFQ0VJVkVfRElSVFlfUkVMQVRJT05fQURESVRJT04iLCJSRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OIiwiUkVDRUlWRV9VUERBVEVEX0VOVElUWV9JRF9GT1JfUkVMQVRJT05TIiwicmVzZXRzIiwiUkVTRVRfQUxMX1NUQVRFIiwiUkVTRVRfU1RBVEVfRk9SX01PREVMIiwiUkVTRVRfQUxMX01PREVMX1NQRUNJRklDIiwiUkVTRVRfTU9ERUxfU1BFQ0lGSUNfRk9SX1NFTEVDVE9SIiwiUkVTRVRfTU9ERUxfU1BFQ0lGSUNfRk9SX1NFTEVDVE9SX0FORF9BUkdTIiwibW9kZWxTcGVjaWZpYyIsIlJFQ0VJVkVfU0VMRUNUT1JfVkFMVUUiLCJBQ1RJT05fVFlQRVMiLCJjcmVhdGVFbnRpdHkiLCJyZWNlaXZlRW50aXR5QW5kUmVzb2x2ZSIsInJlY2VpdmVFbnRpdGllc0FuZFJlc29sdmUiLCJzaW5ndWxhck1vZGVsTmFtZSIsIlNDSEVNQV9SRURVQ0VSX0tFWSIsImZhY3RvcnkiLCJpc01vZGVsRW50aXR5RmFjdG9yeU9mTW9kZWwiLCJlbnRpdHlJbnN0YW5jZSIsImNyZWF0ZU5ldyIsImFzc2VydElzTW9kZWxFbnRpdHkiLCJ0b0xvd2VyQ2FzZSIsImlkIiwibWFwIiwiaXNNb2RlbEVudGl0eSIsIkludmFsaWRNb2RlbEVudGl0eSIsImNyZWF0ZVJlbGF0aW9uIiwiY3JlYXRlUmVsYXRpb25zIiwicmVzb2x2ZVJlbGF0aW9uUmVjb3JkRm9yUmVsYXRpb24iLCJyZWxhdGlvbk5hbWUiLCJpc01vZGVsRW50aXR5T2ZNb2RlbCIsIndhcm5pbmciLCJSRURVQ0VSX0tFWSIsImFzc2VydEFycmF5SGFzRW50aXRpZXNGb3JNb2RlbCIsImdldElkc0Zyb21CYXNlRW50aXR5QXJyYXkiLCJtb2RlbEVudGl0eSIsInJlbGF0aW9uc1RvUmVzb2x2ZSIsIm1vZGVsSWQiLCJoYXNFbnRpdHkiLCJyZWxhdGlvbk1vZGVsTmFtZSIsImRlbGV0ZUVudGl0eUJ5SWQiLCJ0cmFzaEVudGl0eUJ5SWQiLCJyZW1vdmVFbnRpdHlCeUlkIiwicmVtb3ZlQWxsUmVsYXRlZEVudGl0aWVzRm9yTW9kZWxFbnRpdHkiLCJyZWNlaXZlRGVsZXRlRW50aXR5SWQiLCJyZWNlaXZlVHJhc2hFbnRpdHlJZCIsInJlbW92ZURpcnR5UmVsYXRpb25Gb3JBZGRpdGlvbiIsInJlbW92ZVJlbGF0aW9uRm9yRW50aXR5IiwicmVsYXRpb25FbnRpdHlJZCIsInJlbW92ZURpcnR5UmVsYXRpb25BZGRpdGlvbiIsInJlbW92ZVJlbGF0ZWRFbnRpdGllcyIsInJlY2VpdmVEaXJ0eVJlbGF0aW9uRGVsZXRpb24iLCJwZXJzaXN0RW50aXR5UmVjb3JkIiwicGVyc2lzdEZvckVudGl0eUlkIiwicGVyc2lzdEZvckVudGl0eUlkcyIsInBlcnNpc3REZWxldGVzRm9yTW9kZWwiLCJwZXJzaXN0VHJhc2hlc0Zvck1vZGVsIiwicGVyc2lzdEFsbERlbGV0ZXMiLCJERUZBVUxUX0VNUFRZX09CSkVDVCIsIkRFRkFVTFRfRU1QVFlfQVJSQVkiLCJpc0NsZWFuIiwicGF0aCIsImFwcGx5UXVlcnlTdHJpbmciLCJpc05ldyIsIm1ldGhvZCIsImRhdGEiLCJmb3JQZXJzaXN0IiwidXBkYXRlZEVudGl0eSIsImlzRW1wdHkiLCJ1cGRhdGVkRW50aXR5UmVjb3JkIiwiZnJvbUV4aXN0aW5nIiwibmV3SWQiLCJyZWNlaXZlVXBkYXRlZEVudGl0eUlkRm9yUmVsYXRpb25zIiwicmVjZWl2ZUFuZFJlcGxhY2VFbnRpdHlSZWNvcmRzIiwicGVyc2lzdGVkRW50aXR5IiwicmV0cmlldmVkRW50aXRpZXMiLCJpc0FycmF5Iiwia2V5RW50aXRpZXNCeVByaW1hcnlLZXlWYWx1ZSIsInJldHJpZXZlZElkcyIsIkFycmF5IiwiZnJvbSIsImtleXMiLCJwZXJzaXN0ZWRFbnRpdGllcyIsImRlbGV0ZWRJZHMiLCJmb3JjZSIsInJlc3BvbnNlIiwiZGVsZXRlZCIsInB1c2giLCJyZW1vdmVEZWxldGVFbnRpdHlJZCIsInRyYXNoZWRJZHMiLCJzdWNjZXNzIiwicmVtb3ZlVHJhc2hFbnRpdHlJZCIsIm1vZGVsc0ZvckRlbGV0ZSIsIm1vZGVsRm9yRGVsZXRlIiwiaWRzRGVsZXRlZCIsIm1vZGVsc0ZvclRyYXNoIiwibW9kZWxGb3JUcmFzaCIsImlkc1RyYXNoZWQiLCJ0cmFzaGVkIiwicGVyc2lzdEFkZFJlbGF0aW9uc0Zvck1vZGVsIiwicGVyc2lzdERlbGV0ZVJlbGF0aW9uc0Zvck1vZGVsIiwicGVyc2lzdFJlbGF0aW9uc0Zvck1vZGVsIiwicGVyc2lzdFJlbGF0aW9uc0ZvckVudGl0eUlkIiwicGVyc2lzdFJlbGF0aW9uc0ZvckVudGl0eUlkQW5kUmVsYXRpb24iLCJwZXJzaXN0UmVsYXRpb25zRm9yRW50aXR5SWRBbmRSZWxhdGlvbklkIiwicGVyc2lzdE5ld0VudGl0eUFuZFJlbW92ZURpcnR5UmVsYXRpb25zIiwiZ2V0UmVsYXRpb25TdGF0ZSIsImFkZFJlbGF0aW9uIiwicmVsYXRpb25TdGF0ZSIsInJlbGF0aW9uc1BlcnNpc3RlZCIsInBlcnNpc3RlZFJlbGF0aW9ucyIsInJlbGF0aW9uTmFtZXMiLCJwZXJzaXN0ZWRSZWxhdGlvbklkcyIsInJlbGF0aW9uRW50aXR5SWRzIiwicGVyc2lzdGVkUmVsYXRpb25JZCIsInJlbGF0aW9uSWQiLCJlbnRpdHlJZENoYW5nZWQiLCJjdWlkIiwiaXNDdWlkIiwiZW5kcG9pbnQiLCJyZW1vdmVEaXJ0eVJlbGF0aW9uRm9yVHlwZSIsInBlcnNpc3RpbmdBcmd1bWVudHMiLCJkb1JlbGF0aW9uUmVtb3ZhbCIsInNlbGVjdG9yIiwidHlwZXMiLCJyZWNlaXZlRW50aXR5UmVjb3JkcyIsInJlY2VpdmVFbnRpdHkiLCJyZWNlaXZlUmVsYXRlZEVudGl0aWVzIiwicmVsYXRlZEVudGl0eUlkcyIsInJlY2VpdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24iLCJxdWV1ZVR5cGUiLCJUWVBFX1FVRVVFX1JFTEFUSU9OX0FERCIsIlRZUEVfUVVFVUVfUkVMQVRJT05fREVMRVRFIiwib2xkRW50aXR5SWQiLCJuZXdFbnRpdHlJZCIsInJlbW92ZURpcnR5UmVsYXRpb25EZWxldGlvbiIsInJlc2V0QWxsU3RhdGUiLCJyZXNldFN0YXRlRm9yTW9kZWwiLCJyZXNldEFsbE1vZGVsU3BlY2lmaWMiLCJyZXNldE1vZGVsU3BlY2lmaWNGb3JTZWxlY3RvciIsInJlc2V0TW9kZWxTcGVjaWZpY0ZvclNlbGVjdG9yQW5kQXJncyIsInJlc29sdmVycyIsImludmFsaWRhdGVBY3Rpb25zQXZhaWxhYmxlIiwiX21hcCIsImVudHJ5IiwibW9kZWxOYW1lSW5TZWxlY3RvciIsIm1vZGVsTmFtZUluQXJncyIsInNlbGVjdG9ySXNNb2RlbFNwZWNpZmljIiwic2luZ3VsYXJOYW1lIiwiaW5kZXhPZiIsImhhc01vZGVsTmFtZSIsInNvbWUiLCJhcmciLCJzZWxlY3RvcnNUb0ludmFsaWRhdGUiLCJtb2RlbFNwZWNpZmljU2VsZWN0b3JzIiwidW5kZWZpbmVkIiwiZGF0YVNlbGVjdCIsImludmFsaWRhdGVSZXNvbHV0aW9uRm9yU3RvcmUiLCJyZWdpc3RlclN0b3JlIiwicmVkdWNlciIsImFjdGlvbnMiLCJtb2RlbEFjdGlvbnMiLCJzZWxlY3RvcnMiLCJtb2RlbFNlbGVjdG9ycyIsIm1vZGVsUmVzb2x2ZXJzIiwicmVjZWl2ZUxhdGVzdENoZWNraW4iLCJ0b2dnbGVDaGVja2luIiwiY2hlY2tpbkVudGl0eSIsInJlZ2lzdHJhdGlvbklkIiwiZGF0ZVRpbWVJZCIsImdldEVuZHBvaW50IiwiY2hlY2tJblJlc3BvbnNlIiwiX18iLCJuZXdDaGVja2luIiwiZ2V0TGF0ZXN0Q2hlY2tpbiIsImlzVW5kZWZpbmVkIiwic3RhdGUiLCJjaGVja2luSWQiLCJnZXRTZWxlY3RvclZhbHVlIiwiZ2V0RW50aXR5QnlJZCIsImNyZWF0ZUFjdGlvbnMiLCJhY3Rpb24iLCJNT0RFTF9OQU1FUyIsImNyZWF0ZVJlc29sdmVycyIsInJlc29sdmVyIiwiY3JlYXRlU2VsZWN0b3JzIiwiZ2V0RW50aXR5UmVjb3Jkc0Zvck1vZGVsIiwiZ2V0RW50aXRpZXNGb3JNb2RlbCIsImdldEVudGl0aWVzQnlJZHMiLCJnZXRFbnRpdHlJZHNRdWV1ZWRGb3JUcmFzaCIsImdldEVudGl0eUlkc1F1ZXVlZEZvckRlbGV0ZSIsImVudGl0eVNlbGVjdG9ycyIsImJhc2VTZWxlY3RvcnMiLCJyZWxhdGlvblNlbGVjdG9ycyIsImVudGl0eUFjdGlvbnMiLCJiYXNlQWN0aW9ucyIsInJlbGF0aW9uQWN0aW9ucyIsImVudGl0eVJlc29sdmVycyIsImJhc2VSZXNvbHZlcnMiLCJyZWNlaXZlU2VsZWN0b3JWYWx1ZSIsInZhbHVlIiwiY3JlYXRlU2VsZWN0b3IiLCJnZXRJbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJvbGRJZCIsImdldFJlbGF0aW9uQWRkaXRpb25zUXVldWVkRm9yTW9kZWwiLCJnZXRSZWxhdGlvbkRlbGV0aW9uc1F1ZXVlZEZvck1vZGVsIiwiY291bnRSZWxhdGlvbk1vZGVsc0luZGV4ZWRGb3JFbnRpdHkiLCJyZXNldFR5cGVzIiwiYWRkVG9TdGF0ZSIsImFkZCIsInJlbW92ZUZyb21TdGF0ZSIsIlNldCIsImluY2x1ZGVzIiwiZGVsZXRlIiwicHJvY2Vzc0FjdGlvbiIsImRlbGV0ZUVudGl0eSIsImZyb21KUyIsIkRFRkFVTFRfQ09SRV9TVEFURSIsImRpcnR5IiwidHJhc2hFbnRpdHkiLCJ0cmFzaCIsInJlbGF0aW9uRXhpc3RzSW5NYXAiLCJyZWxhdGlvbk1hcCIsImhhc1JlbGF0aW9uIiwiZ2V0UmVsYXRpb25NYXAiLCJpZEV4aXN0c0luU2V0IiwiaWRTZXQiLCJpbmRleFJlbGF0aW9ucyIsInNldEluIiwicmVtb3ZlRW1wdHlGcm9tU3RhdGUiLCJnZXRSZWxhdGlvbklkc0Zyb21TdGF0ZSIsImhhc0luIiwicmVxdWlyZXNVcGRhdGUiLCJ1cGRhdGVSZWxhdGlvblN0YXRlIiwiaWRzIiwicmVwbGFjZU9sZFJlbGF0aW9uSWRXaXRoTmV3UmVsYXRpb25JZCIsIm5ld1N0YXRlIiwicmVwbGFjZUlkcyIsInN0YXRlUHJvcGVydHkiLCJtYWluUGF0aCIsIm1haW5SZWNvcmQiLCJkZWxldGVJbiIsImZvckVhY2giLCJtYXBPcklkcyIsInVwZGF0ZUlkcyIsInJlbGF0aW9uUGF0aCIsImluZGV4UmVjb3JkIiwibm9ybWFsaXplQWN0aW9uRm9yU3RhdGUiLCJpbmRleCIsImRpcnR5UmVsYXRpb25zIiwiY2xlYXJSZWxhdGVkRW50aXRpZXNGb3JFbnRpdHkiLCJtb2RlbERhdGEiLCJtb2RlbFJlbW92ZWQiLCJlbnRpdHlJZFJlbW92ZWQiLCJpbmRleFR5cGUiLCJyZWxhdGlvblR5cGVzIiwicmVjb3JkUGF0aCIsImNsZWFyRW50aXR5SWRzSW5QYXRoIiwic3ViU3RhdGUiLCJ3aXRoTXV0YXRpb25zIiwicmVsYXRpb25SZWNvcmQiLCJyZWxhdGlvblR5cGUiLCJyZW1vdmVSZWxhdGVkRW50aXRpZXNGb3JFbnRpdHkiLCJjbGVhclN0YXRlRm9yTW9kZWwiLCJjbGVhck1vZGVsRnJvbVN1YnN0YXRlIiwic3ViU3RhdGVLZXkiLCJtdXRhdGVkU3RhdGUiLCJlbnRpdHlNYXBzIiwibW9kZWxNYXAiLCJkZWxldGVQYXRoIiwiY29tYmluZVJlZHVjZXJzIiwicmVwbGFjZUV4aXN0aW5nRW50aXRpZXNGcm9tU3RhdGUiLCJlbnRpdHlSZWNvcmRzIiwibWVyZ2UiLCJ1cGRhdGVTdGF0ZSIsImRpZmZlcmVuY2UiLCJoYW5kbGVSZWNlaXZlU2VsZWN0b3IiLCJub3JtYWxpemVkUmVjZWl2ZUFuZFJlbW92ZVJlbGF0aW9ucyIsInJlY2VpdmVBbmRSZW1vdmVSZWxhdGlvbnMiLCJuZXdBY3Rpb24iLCJleGlzdGluZ0lkcyIsImNvbmNhdCIsImlkc0FmdGVyUmVtb3ZhbCIsImZpbHRlciIsImtleU9mIiwiY291bnQiLCJ1cGRhdGVFbnRpdHlJZEZvclJlbGF0aW9ucyIsIm1vZGVsUmVjb3JkVG9SZXBsYWNlIiwicmVwbGFjZVJlbGF0aW9uUmVjb3JkcyIsIm1haW5SZWNvcmRUb1JlcGxhY2UiLCJyZW1vdmVPbmx5IiwidG9BcnJheSIsIm1vZGVsUmVsYXRpb25zIiwiY2FsY3VsYXRlZEZpZWxkcyIsImFwcGVuZENhbGN1bGF0ZWRGaWVsZHNUb1BhdGgiLCJmdWxsRW50aXR5IiwiZ2V0UmVsYXRlZEVudGl0aWVzIiwiZ2V0UmVsYXRlZEVudGl0aWVzRm9ySWRzIiwicGx1cmFsUmVsYXRpb25OYW1lIiwicmVsYXRpb25SZXNvdXJjZVByb3BlcnR5IiwicmVsYXRpb25FbmRwb2ludCIsInN0cmlwQmFzZVJvdXRlRnJvbVVybCIsInJlc291cmNlTGluayIsInNwcmludGYiLCJmdWxsRW50aXRpZXMiLCJjcmVhdGVBbmRLZXlFbnRpdGllc0J5UHJpbWFyeUtleVZhbHVlIiwiZW50aXRpZXNPYmplY3QiLCJlbnRpdHlPYmoiLCJlbnRpdHlBcnJheSIsInZhbHVlcyIsImhhc0pvaW5UYWJsZSIsInJlbGF0aW9uU2NoZW1hIiwicmVsYXRpb25fdHlwZSIsImdldFJlbGF0aW9uUmVxdWVzdFVybCIsInJlbGF0aW9uUHJpbWFyeUtleSIsImdldFByaW1hcnlLZXkiLCJtb2RlbFByaW1hcnlLZXkiLCJoYXNTZXRNYXAiLCJJbW11dGFibGVNYXAiLCJyZWNvcmQiLCJyZWxhdGlvblJlY29yZHMiLCJpc0JlbG9uZ3NUb1JlbGF0aW9uIiwiam9pbmluZ19tb2RlbF9uYW1lIiwiZ2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nIiwibW9kZWxOYW1lRm9yUXVlcnlTdHJpbmciLCJjYXN0QXJyYXkiLCJuYW1lRm9yUXVlcnlTdHJpbmciLCJxdWVyeVN0cmluZ3MiLCJmaWVsZCIsImFkZFF1ZXJ5QXJncyIsImNhbGN1bGF0ZSIsImpvaW4iLCJ0b0pTIiwidmFsdWVTZXEiLCJyZXRyaWV2ZUVudGl0aWVzQnlJZHMiLCJjbGVhciIsImdldERlcGVuZGFudHMiLCJzcGxpdCIsImdldE1vZGVsc1F1ZXVlZEZvclRyYXNoIiwia2V5U2VxIiwiZ2V0TW9kZWxzUXVldWVkRm9yRGVsZXRlIiwiZ2V0QWxsRW50aXRpZXNJblN0YXRlIiwiREVGQVVMVF9FTVBUWV9TRVQiLCJnZXRSZWxhdGlvbklkc0ZvckVudGl0eVJlbGF0aW9uIiwicmVsYXRlZEVudGl0aWVzIiwibG9va3VwUmVsYXRpb25zUXVldWVkRm9yTW9kZWwiLCJyZWxhdGlvbnNRdWV1ZWQiLCJtZXJnZURlZXAiLCJtb2RlbCIsImdldEFsbFJlbGF0aW9uc0luU3RhdGUiLCJERUZBVUxUX1NUQVRFIiwiU0VUX0ZJTFRFUiIsImdldFN0YXRlIiwiY29udGV4dCIsImZpbHRlclN0YXRlUmVkdWNlciIsInByZXZTdGF0ZSIsInNldEZpbHRlciIsImdldEZpbHRlciIsImRlZmF1bHRWYWx1ZSIsIlJFQ0VJVkVfTElTVCIsIlJFQ0VJVkVfRU5USVRZX0xJU1QiLCJSRVNFVF9UWVBFUyIsIlJFU0VUX1NUQVRFX0ZPUl9JREVOVElGSUVSIiwiUkVTRVRfU1BFQ0lGSUNfU1RBVEVfRk9SX0lERU5USUZJRVIiLCJyZXNldEZvclNlbGVjdG9yQW5kSWRlbnRpZmllciIsInJlc2V0R2VuZXJpY0l0ZW1zV2l0aElkZW50aWZpZXIiLCJyZXNldEVudGl0aWVzRm9yTW9kZWxOYW1lIiwicmVzZXRTcGVjaWZpY1N0YXRlRm9yU2VsZWN0b3IiLCJyZWNlaXZlUmVzcG9uc2UiLCJpZGVudGlmaWVyIiwicXVlcnlTdHJpbmciLCJpdGVtcyIsInJlY2VpdmVFbnRpdHlSZXNwb25zZSIsImlkZW50aWZpZXJJblNlbGVjdG9yIiwicGx1cmFsTmFtZSIsImNyZWF0ZUVudGl0eVNlbGVjdG9ycyIsImNyZWF0ZUVudGl0eVJlc29sdmVycyIsInNvdXJjZSIsIm1ldGhvZE5hbWVGb3JHZXQiLCJnZXRFbnRpdGllcyIsInJlY2VpdmVMaXN0SXRlbXMiLCJERUZBVUxUX0xJU1RTX1NUQVRFIiwiZG9VcGRhdGUiLCJleGlzdGluZ1ZhbHVlcyIsIk9yZGVyZWRNYXAiLCJnZXRJdGVtcyIsImJ1aWxkQW5kRGlzcGF0Y2hFbnRpdGllc0Zyb21SZXNwb25zZSIsImZpbmQiLCJleGlzdGluZ0VudGl0eSIsInJldHJpZXZlSXRlbXMiLCJkZWZhdWx0RW1wdHkiLCJlIiwiaXNSZXF1ZXN0aW5nIiwiYXNzZXJ0SW1tdXRhYmxlT2JqZWN0SGFzUGF0aCIsImlzUmVxdWVzdGluZ0l0ZW1zIiwiaXNSZXF1ZXN0aW5nRW50aXRpZXMiLCJSRUNFSVZFX1NDSEVNQV9SRUNPUkQiLCJSRUNFSVZFX0ZBQ1RPUllfRk9SX01PREVMIiwiUkVDRUlWRV9SRUxBVElPTl9FTkRQT0lOVF9GT1JfTU9ERUxfRU5USVRZIiwiUkVDRUlWRV9SRUxBVElPTl9TQ0hFTUEiLCJyZWNlaXZlU2NoZW1hRm9yTW9kZWwiLCJzY2hlbWEiLCJyZWNlaXZlRmFjdG9yeUZvck1vZGVsIiwicmVjZWl2ZVJlbGF0aW9uRW5kcG9pbnRGb3JNb2RlbEVudGl0eSIsInJlY2VpdmVSZWxhdGlvblNjaGVtYSIsIkpPSU5fUkVMQVRJT05fVFlQRVMiLCJTQ0hFTUFfS0VZIiwic2NoZW1hTWV0aG9kTmFtZSIsImZhY3RvcnlNZXRob2ROYW1lIiwiZ2V0U2NoZW1hRm9yTW9kZWwiLCJnZXRGYWN0b3J5Rm9yTW9kZWwiLCJyZWNlaXZlU2NoZW1hIiwiREVGQVVMVF9TQ0hFTUFfU1RBVEUiLCJpc1NjaGVtYVJlc3BvbnNlT2ZNb2RlbCIsInJlY2VpdmVGYWN0b3J5IiwicmVjZWl2ZVJlbGF0aW9uRW5kcG9pbnRGb3JFbnRpdHkiLCJyZWxhdGlvbkVuZHBvaW50cyIsImlzU2hhbGxvd0VxdWFsIiwiZ2V0UmVsYXRpb25FbmRwb2ludEZvckVudGl0eUlkIiwiZ2V0UmVsYXRpb25QcmltYXJ5S2V5U3RyaW5nIiwiZ2V0UmVsYXRpb25SZXNwb25zZVR5cGUiLCJoYXNKb2luVGFibGVSZWxhdGlvbiIsImdldFJlbGF0aW9uVHlwZSIsImdldFJlbGF0aW9uU2NoZW1hIiwiY3JlYXRlRW50aXR5RmFjdG9yeSIsIk1PREVMX1BSRUZJWEVTIiwiX2xpbmtzIiwibGlua3MiLCJiYXNlUmVsYXRpb25QYXRoIiwiRXJyb3IiLCJ0eXBlU2NoZW1hIiwicHJvcGVydGllcyIsImlzUmVxdWVzdGluZ1NjaGVtYUZvck1vZGVsIiwiaGFzUmVzb2x2ZWRTY2hlbWFGb3JNb2RlbCIsImlzUmVxdWVzdGluZ0ZhY3RvcnlGb3JNb2RlbCIsImhhc1Jlc29sdmVkRmFjdG9yeUZvck1vZGVsIiwiaXNSZXF1ZXN0aW5nUmVsYXRpb25FbmRwb2ludEZvckVudGl0eUlkIiwiYXNzZXJ0RW50aXR5SGFzS2V5Iiwia2V5IiwibWVzc2FnZSIsImhhc093blByb3BlcnR5IiwiRXhjZXB0aW9uIiwiaW1tdXRhYmxlIiwiYXNzZXJ0SXNBcnJheSIsImFzc2VydElzTm90RW1wdHkiLCJhc3NlcnRJc01hcCIsIml0ZW0iLCJNT0RFTF9OQU1FIiwib3JkZXJCeU1hcCIsImxhc3ROYW1lT25seSIsImZpcnN0TmFtZU9ubHkiLCJmaXJzdFRoZW5MYXN0TmFtZSIsImxhc3RUaGVuRmlyc3ROYW1lIiwicXVlcnlEYXRhVHlwZXMiLCJmb3JFdmVudElkIiwiUHJvcFR5cGVzIiwibnVtYmVyIiwiZm9yRGF0ZXRpbWVJZCIsImZvclRpY2tldElkIiwiZm9yU3RhdHVzSWQiLCJvbmVPZiIsIlJFR0lTVFJBVElPTl9TVEFUVVNfSURTIiwiZm9yUmVnaXN0cmF0aW9uSWQiLCJzaG93R3JhdmF0YXIiLCJib29sIiwicXVlcnlEYXRhIiwic2hhcGUiLCJsaW1pdCIsIm9yZGVyQnkiLCJPYmplY3QiLCJvcmRlciIsIkFMTE9XRURfT1JERVJfVkFMVUVTIiwiZGVmYXVsdFF1ZXJ5RGF0YSIsIlFVRVJZX09SREVSX0FTQyIsIm1hcE9yZGVyQnkiLCJ3aGVyZUNvbmRpdGlvbnMiLCJ3aGVyZSIsImdldFF1ZXJ5U3RyaW5nIiwiYmFzZUdldFF1ZXJ5U3RyaW5nIiwiZm9ybWF0RGF0ZXNPbkVudGl0aWVzIiwiZW50aXR5RGF0ZUZpZWxkcyIsImZvcm1hdCIsImRhdGVGb3JtYXRzIiwibG9jYWwiLCJmb3JtYXR0ZWRFbnRpdGllcyIsImZvcm1hdERhdGVzT25FbnRpdHkiLCJuZXdFbnRpdHkiLCJkYXRlRmllbGQiLCJmb3JtYXRFbnRpdGllc0RhdGVzVG9NeXNxbCIsImZvcm1hdEVudGl0eURhdGVzVG9NeXNxbCIsImZvcm1hdEVudGl0aWVzRGF0ZXNUb1NpdGUiLCJmb3JtYXRFbnRpdHlEYXRlc1RvU2l0ZSIsImNvbnZlcnRFbnRpdGllc0RhdGVzVG9Nb21lbnQiLCJjb252ZXJ0RW50aXR5RGF0ZXNUb01vbWVudCIsIlFVRVJZX09SREVSX0RFU0MiLCJHUkVBVEVSX1RIQU4iLCJlbmNvZGVVUklDb21wb25lbnQiLCJMRVNTX1RIQU4iLCJHUkVBVEVSX1RIQU5fQU5EX0VRVUFMIiwiTEVTU19USEFOX0FORF9FUVVBTCIsImRlZmF1bHRXaGVyZUNvbmRpdGlvbnMiLCJxdWVyeVBhcmFtcyIsIkNIRUNLSU5fU1RBVFVTX0lEIiwiU1RBVFVTX0NIRUNLRURfT1VUIiwiU1RBVFVTX0NIRUNLRURfSU4iLCJTVEFUVVNfQ0hFQ0tFRF9ORVZFUiIsIkNIRUNLSU5fU1RBVFVTX0lEUyIsImNoZWNraW5TdGF0dXMiLCJvcHRpb25zRW50aXR5TWFwIiwiZGVmYXVsdCIsImxhYmVsIiwicHJldHR5U3RhdHVzIiwidGltZXN0YW1wIiwiREFURVRJTUVfU1RBVFVTX0lEIiwiQUNUSVZFIiwiQ0FOQ0VMTEVEIiwiRVhQSVJFRCIsIklOQUNUSVZFIiwiUE9TVFBPTkVEIiwiU09MRF9PVVQiLCJUUkFTSEVEIiwiVVBDT01JTkciLCJEQVRFVElNRV9TVEFUVVNfSURTIiwiTUlOVVRFX0lOX1NFQ09ORFMiLCJIT1VSX0lOX1NFQ09ORFMiLCJEQVlfSU5fU0VDT05EUyIsIldFRUtfSU5fU0VDT05EUyIsIk1PTlRIX0lOX1NFQ09ORFMiLCJEQVRFX0ZJRUxEUyIsImZvcm1hdHRlcnMiLCJmb3JPd24iLCJiYXNlRm9ybWF0dGVyIiwiaW1wbGVtZW50YXRpb24iLCJmdW5jdGlvbk5hbWUiLCJpbmNvbWluZ0FyZ3MiLCJmaXJzdEFyZyIsInB1bGxBdCIsInByZXR0eURhdGVGcm9tRGF0ZVRpbWUiLCJEYXRlVGltZUVudGl0eSIsImNvbnRlbnQiLCJEVFRfRVZUX3N0YXJ0IiwiaGFzU2FtZSIsIkRUVF9FVlRfZW5kIiwiYWxsRGF0ZVRpbWVzQXNTdHJpbmciLCJTRVBBUkFUT1JfU1BBQ0VfREFTSF9TUEFDRSIsInRvRm9ybWF0IiwiREFURV9USU1FX0ZPUk1BVF9TSVRFIiwiVElNRV9GT1JNQVRfU0lURSIsIkRUVF9uYW1lIiwibm93RGF0ZUFuZFRpbWUiLCJtb21lbnQiLCJzaG93RXhwaXJlZCIsIm1vbnRoIiwic3RhcnRfZGF0ZSIsImVuZF9kYXRlIiwic3RhcnRPZiIsImVuZE9mIiwiYXNzZXJ0RGF0ZVRpbWVFbnRpdHkiLCJUeXBlRXJyb3IiLCJpc0FjdGl2ZSIsInN0YXJ0IiwiZGlmZk5vdyIsImFzU2Vjb25kcyIsImVuZCIsImlzRXhwaXJlZCIsImlzUmVjZW50bHlFeHBpcmVkIiwiaXNTb2xkT3V0IiwiY2FwIiwicmVnTGltaXQiLCJJbmZpbml0eSIsInNvbGQiLCJpc1VwY29taW5nIiwiaXNUcmFzaGVkIiwic3RhdHVzIiwiZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MiLCJnZXREYXRlVGltZVN0YXR1c1RleHRMYWJlbCIsImRhdGVTdGF0dXMiLCJtYXBUb09iamVjdFZhbHVlcyIsIm1vZGVsTmFtZUVuZHBvaW50cyIsIm1hcFZhbHVlcyIsImdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0IiwibWVtb2l6ZSIsImVuZHBvaW50cyIsInBhdGhzIiwiY29sbGVjdGlvbl9lbmRwb2ludHMiLCJiYXNlUmVzdFJvdXRlIiwiYmFzZV9yZXN0X3JvdXRlIiwidXJsIiwicmVwbGFjZSIsIm1heWJlQXNzZXJ0VmFsdWVPYmplY3QiLCJmaWVsZE5hbWUiLCJmaWVsZFZhbHVlIiwiaXNEYXRlVGltZUZpZWxkIiwiRGF0ZVRpbWUiLCJhc3NlcnRJc0RhdGVUaW1lIiwiaXNNb25leUZpZWxkIiwiTW9uZXkiLCJhc3NlcnRNb25leSIsImFzc2VydFZhbGlkU2NoZW1hIiwiaXNTY2hlbWEiLCJJbnZhbGlkU2NoZW1hIiwiYXNzZXJ0VmFsaWRTY2hlbWFGaWVsZFByb3BlcnRpZXMiLCJyYXciLCJhc3NlcnRWYWxpZFZhbHVlRm9yUHJlcGFyZWRGaWVsZCIsImluc3RhbmNlIiwiaXNWYWxpZCIsImlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZCIsImVudW0iLCJ2YWxpZGF0ZUVudW1UeXBlIiwidmFsaWRhdGVUeXBlIiwibWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0V2l0aEFzc2VydGlvbnMiLCJhc3NlcnRWYWxpZEZpZWxkQW5kVmFsdWVBZ2FpbnN0U2NoZW1hIiwidmFsaWRhdGlvblR5cGUiLCJ2YWxpZGF0ZVR5cGVGb3JGaWVsZCIsIlBSSVZBVEVfUFJPUEVSVElFUyIsIlNBVkVfU1RBVEUiLCJWQUxJREFURV9UWVBFUyIsIkJhc2VFbnRpdHkiLCJlbnRpdHlGaWVsZHNBbmRWYWx1ZXMiLCJmaWVsZFByZWZpeGVzIiwiQ0xFQU4iLCJjcmVhdGVHZXR0ZXIiLCJzZXRTYXZlU3RhdGUiLCJORVciLCJjcmVhdGVFbnRpdHlHZXR0ZXJzQW5kU2V0dGVycyIsImNyZWF0ZVBlcnNpc3RpbmdHZXR0ZXJzQW5kU2V0dGVycyIsInNlYWwiLCJzYXZlU3RhdGUiLCJESVJUWSIsInByb3RlY3RlZEZpZWxkcyIsImtlZXBJZCIsImNyZWF0ZUZhY3RvcnkiLCIkc2NoZW1hIiwiZm9yQ2xvbmUiLCJuYW1lQ2xhc3MiLCJuYW1lIiwiZXh0ZW5kZWRDbGFzcyIsIkVudGl0eSIsImNsYXNzRGVmIiwiZmllbGRzQW5kVmFsdWVzIiwiaGFzUmF3UHJvcGVydHkiLCJpc1BsYWluT2JqZWN0IiwiaGFzUHJldHR5UHJvcGVydHkiLCJwcmV0dHkiLCJoYXNSZW5kZXJlZFByb3BlcnR5IiwicmVuZGVyZWQiLCJoYXNGb3JtYXRQcm9wZXJ0eSIsImhhc0VudW1Qcm9wZXJ0eSIsImlzVmFsdWVPYmplY3RGaWVsZCIsImlzVVRDRGF0ZVRpbWVGaWVsZCIsImRhdGVUaW1lRmllbGROYW1lIiwiaXNQcmltYXJ5S2V5RmllbGQiLCJwcmltYXJ5X2tleSIsImlzUmVhZE9ubHkiLCJyZWFkb25seSIsImlzRW50aXR5RmllbGQiLCJpc0VudW1GaWVsZCIsIlN5bWJvbCIsIlZBTElEQVRFX1RZUEUiLCJSQVciLCJSRU5ERVJFRCIsIlBSRVRUWSIsInByZWZpeE1hcCIsImFwcGx5RmlsdGVycyIsImFuc3dlciIsImF0dGVuZGVlIiwiY2hhbmdlX2xvZyIsImNoZWNraW4iLCJjb3VudHJ5IiwiY3VycmVuY3kiLCJjdXJyZW5jeV9wYXltZW50X21ldGhvZCIsImRhdGV0aW1lIiwiZGF0ZXRpbWVfdGlja2V0IiwiZXZlbnQiLCJldmVudF9tZXNzYWdlX3RlbXBsYXRlIiwiZXZlbnRfcXVlc3Rpb25fZ3JvdXAiLCJldmVudF92ZW51ZSIsImV4dHJhX2pvaW4iLCJleHRyYV9tZXRhIiwibGluZV9pdGVtIiwibWVzc2FnZV90ZW1wbGF0ZSIsIm1lc3NhZ2VfdGVtcGxhdGVfZ3JvdXAiLCJwYXltZW50IiwicGF5bWVudF9tZXRob2QiLCJwb3N0X21ldGEiLCJwcmljZSIsInByaWNlX3R5cGUiLCJxdWVzdGlvbiIsInF1ZXN0aW9uX2dyb3VwIiwicXVlc3Rpb25fZ3JvdXBfcXVlc3Rpb24iLCJxdWVzdGlvbl9vcHRpb24iLCJyZWN1cnJlbmNlIiwicmVnaXN0cmF0aW9uIiwicmVnaXN0cmF0aW9uX3BheW1lbnQiLCJ0ZXJtIiwidGVybV9yZWxhdGlvbnNoaXAiLCJ0ZXJtX3RheG9ub215IiwidGlja2V0IiwidGlja2V0X3ByaWNlIiwidGlja2V0X3RlbXBsYXRlIiwidHJhbnNhY3Rpb24iLCJ2ZW51ZSIsIndwX3VzZXIiLCJvcHRzIiwiZGVmaW5lUHJvcGVydHkiLCJjcmVhdGVDYWxsYmFja0dldHRlciIsInByb3BlcnR5TmFtZSIsImNhbGxCYWNrIiwiY3JlYXRlR2V0dGVyQW5kU2V0dGVyIiwiaW5pdGlhbEZpZWxkVmFsdWUiLCJwcm9wZXJ0eVZhbHVlIiwicmVjZWl2ZWRWYWx1ZSIsImlzUHJpbWFyeUZpZWxkIiwic2V0RmllbGRUb1BlcnNpc3QiLCJjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlciIsIm9yaWdpbmFsRmllbGROYW1lIiwiYWxpYXNGaWVsZE5hbWUiLCJjcmVhdGVBbGlhc0dldHRlciIsImNyZWF0ZUZsdWVudFNldHRlciIsInByaW1hcnlLZXlzIiwib3JpZ2luYWxGaWVsZHNBbmRWYWx1ZXMiLCJpc1ByaW1hcnlLZXkiLCJzZXRWYWxpZGF0ZVR5cGVGb3JGaWVsZCIsInNldEluaXRpYWxFbnRpdHlGaWVsZHNBbmRWYWx1ZXMiLCJzZXRDYWxjdWxhdGVkRmllbGRBbmRWYWx1ZXMiLCJwb3B1bGF0ZVByb3RlY3RlZEZpZWxkc1Byb3BlcnR5Iiwic2V0UmVzb3VyY2VzIiwiY3JlYXRlUHJpbWFyeUtleUZpZWxkR2V0dGVycyIsInBvcHVsYXRlUHJpbWFyeUtleXMiLCJwb3B1bGF0ZU1pc3NpbmdGaWVsZHMiLCJfY2FsY3VsYXRlZF9maWVsZHMiLCJfcHJvdGVjdGVkIiwiZ2V0UHJpbWFyeUtleUZpZWxkc0Zyb21TY2hlbWEiLCJzY2hlbWFQcm9wZXJ0aWVzIiwic2NoZW1hRmllbGQiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwiY3JlYXRlQWxpYXNHZXR0ZXJBbmRTZXR0ZXJGb3JGaWVsZCIsImRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkIiwiZ2V0RW50aXR5RmllbGRzRnJvbVNjaGVtYSIsImdldEJhc2VGaWVsZHNBbmRWYWx1ZXNGb3JDbG9uaW5nIiwiZm9yVXBkYXRlIiwiZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmciLCJmb3JJbnNlcnQiLCJlbnRpdHlWYWx1ZXMiLCJwcmltYXJ5S2V5IiwiZ2V0RGVmYXVsdFZhbHVlRm9yRmllbGQiLCJjcmVhdGVSYXdFbnRpdHlHZXR0ZXJzU2V0dGVycyIsImRlcml2ZVByZXBhcmVkVmFsdWVGb3JGaWVsZCIsImNyZWF0ZVJlbmRlcmVkR2V0dGVycyIsImRlcml2ZVJlbmRlcmVkVmFsdWUiLCJjcmVhdGVBbGlhc0dldHRlckZvckZpZWxkIiwiY3JlYXRlQWxpYXNlc0Zvck1ldGhvZCIsIm5ld0ZpZWxkTmFtZSIsImZpZWxkUHJlZml4IiwiZ2V0UmVuZGVyZWRDYWxsYmFjayIsInJlcXVlc3RlZEZpZWxkTmFtZSIsInJlbW92ZVByZWZpeGVzRnJvbUZpZWxkIiwicHJlZml4ZXNUb1JlbW92ZSIsInNvcnRCeSIsImdldFJlbmRlcmVkIiwiaGFzTXVsdGlwbGVQcmltYXJ5S2V5c0NhbGxiYWNrIiwiaGFzQ2FsY3VsYXRlZEZpZWxkQ2FsbGJhY2siLCJmaWVsZE5hbWVUb0NoZWNrIiwiY2FsY3VsYXRlZEZpZWxkVmFsdWUiLCJjYWxjdWxhdGVkRmllbGROYW1lIiwicmVzb3VyY2VWYWx1ZSIsInJlc291cmNlTmFtZSIsImhyZWYiLCJnZXRSZWxhdGlvbk5hbWVGcm9tTGluayIsInNldFJlbGF0aW9uc1Jlc291cmNlIiwiZ2V0UmVsYXRpb25SZXNvdXJjZUNhbGxiYWNrIiwicmVzb3VyY2VJbmZvIiwic2luZ2xlIiwiZ2V0UmVsYXRpb25SZXNvdXJjZSIsIm92ZXJyaWRlIiwiY3VycmVudFN0YXRlIiwiSW52YWxpZEFyZ3VtZW50IiwiZmllbGRzVG9QZXJzaXN0T25JbnNlcnQiLCJtYXliZUNvbnZlcnRUb1ZhbHVlT2JqZWN0IiwidmFsaWRhdGVJc0RhdGVUaW1lIiwiZnJvbUlTTyIsImluc3RhbmNlT2YiLCJTaXRlQ3VycmVuY3kiLCJ0b0lTTyIsInRvTnVtYmVyIiwibWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0IiwibGFzdCIsIml0ZXJhdG9yIiwiZ2V0UHJpbWFyeUtleVZhbHVlcyIsInBpY2siLCJwaWNrQnkiLCJkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiZGVyaXZlVHlwZUZvckZpZWxkIiwidmFsaWQiLCJzaW5nbGVUeXBlIiwiaXNJbnRlZ2VyIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsImlzQm9vbGVhbiIsImVudW1WYWx1ZXMiLCJleHBlY3RWYWx1ZU9iamVjdHMiLCJpc0VudW0iLCJpc1ZhbHVlT2JqZWN0IiwiRVZFTlRfU1RBVFVTX0lEIiwiRVZFTlRfU1RBVFVTX0lEUyIsImNhdGVnb3J5U2x1ZyIsInN0cmluZyIsInRpY2tldF9zdGFydCIsInRpY2tldF9lbmQiLCJzaW5ndWxhciIsInN0YXJ0Q2FzZSIsIkJBU0VfUFJJQ0VfVFlQRVMiLCJCQVNFX1BSSUNFIiwiRElTQ09VTlQiLCJTVVJDSEFSR0UiLCJUQVgiLCJwcmltYXJ5X2tleXMiLCJ2YWx1ZXNGb3JDb21iaW5lZFByaW1hcnlLZXlzIiwidHJpbUVuZCIsInZhbHVlRm9yUHJpbWFyeUtleSIsImtleVZhbHVlcyIsImdldEVudGl0eVByaW1hcnlLZXlWYWx1ZXMiLCJtYXBwZWRFbnRpdGllcyIsInN0YXR1c01vZGVsIiwiZm9yQXR0ZW5kZWVJZCIsImZvclRyYW5zYWN0aW9uSWQiLCJyZWdfaWQiLCJyZWdfZGF0ZSIsIlNUQVRVU19UWVBFX0VNQUlMIiwiU1RBVFVTX1RZUEVfRVZFTlQiLCJTVEFUVVNfVFlQRV9NRVNTQUdFIiwiU1RBVFVTX1RZUEVfUEFZTUVOVCIsIlNUQVRVU19UWVBFX1JFR0lTVFJBVElPTiIsIlNUQVRVU19UWVBFX1RSQU5TQUNUSU9OIiwiRU1BSUxfU1RBVFVTX0lEIiwiRFJBRlQiLCJTRU5UIiwiUkVHSVNUUkFUSU9OX0NMT1NFRCIsIkRFTEVURUQiLCJERU5JRUQiLCJOT1RfQUNUSVZFIiwiTk9UX09QRU4iLCJPTkdPSU5HIiwiUkVHSVNUUkFUSU9OX09QRU4iLCJQRU5ESU5HIiwiU0VDT05EQVJZIiwiTUVTU0FHRV9TVEFUVVNfSUQiLCJERUJVRyIsIkVYRUNVVElORyIsIkZBSUwiLCJJTkNPTVBMRVRFIiwiSURMRSIsIlJFU0VORCIsIlJFVFJZIiwiUEFZTUVOVF9TVEFUVVNfSUQiLCJBUFBST1ZFRCIsIkRFQ0xJTkVEIiwiRkFJTEVEIiwiUkVHSVNUUkFUSU9OX1NUQVRVU19JRCIsIk5PVF9BUFBST1ZFRCIsIlBFTkRJTkdfUEFZTUVOVCIsIldBSVRfTElTVCIsIlRSQU5TQUNUSU9OX1NUQVRVU19JRCIsIkFCQU5ET05FRCIsIkNPTVBMRVRFIiwiT1ZFUlBBSUQiLCJDUFRfU1RBVFVTX0lEIiwiUFVCTElTSCIsIkZVVFVSRSIsIlBSSVZBVEUiLCJVTktOT1dOX1NUQVRVU19JRCIsIkFMTF9TVEFUVVNfSURTIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9SRUdJU1RSQVRJT04iLCJMYWJlbCIsImZyb21TYW1lU2luZ2xlQW5kUGx1cmFsIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9UUkFOU0FDVElPTiIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfUEFZTUVOVCIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfTUVTU0FHRSIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ1BUIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9FVkVOVCIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfVElDS0VUIiwiVElDS0VUX1NUQVRVU19JRCIsIkFSQ0hJVkVEIiwiT05TQUxFIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9EQVRFVElNRSIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ0hFQ0tJTiIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMIiwic3RhdHVzQ29kZSIsIkZPUk1BVF9TRU5URU5DRV9DQVNFIiwiYXNGb3JtYXR0ZWQiLCJwcmV0dHlTdGF0dXNlcyIsInN0YXR1c0NvZGVzIiwibWFwcGVkU3RhdHVzZXMiLCJzdGF0dXNUeXBlIiwiVElDS0VUX1NUQVRVU19JRFMiLCJhc3NlcnRUaWNrZXRFbnRpdHkiLCJUaWNrZXRFbnRpdHkiLCJpc09uU2FsZSIsImlzQXJjaGl2ZWQiLCJzdGFydERhdGUiLCJlbmREYXRlIiwicXR5IiwiaXNQZW5kaW5nIiwiZ2V0VGlja2V0U3RhdHVzVGV4dExhYmVsIiwidGlja2V0U3RhdHVzIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFBbUIsRUFBRTtBQUNySTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiww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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsVUFBVTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLEtBQUs7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLCtFQUErRTtBQUMvRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtB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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsVUFBVTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQix3QkFBd0I7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsVUFBVTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFVBQVU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxXQUFXO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxnQkFBZ0I7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLGdCQUFnQjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHFCQUFxQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLFVBQVU7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsY0FBYztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGFBQWE7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixhQUFhO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyx1QkFBdUIsRUFBRTtBQUM3RCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixvQkFBb0I7QUFDMUM7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isb0JBQW9CO0FBQzFDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsc0NBQXNDLHlCQUF5QixFQUFFLEVBQUUsRUFBRTtBQUN4RyxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsaUJBQWlCO0FBQ3RDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsZUFBZTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLHNCQUFzQixFQUFFO0FBQ2xFLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDLEtBQUs7QUFDN0M7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsZ0RBQWdELEVBQUU7QUFDMUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCx5Q0FBeUMsRUFBRTtBQUM5RjtBQUNBO0FBQ0EsK0JBQStCLGlCQUFpQixFQUFFO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlCQUF5Qix5QkFBeUIsRUFBRTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsbUJBQW1CLEVBQUU7QUFDNUQsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsS0FBSztBQUN0Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esd0NBQXdDLDBCQUEwQixFQUFFO0FBQ3BFLHFDQUFxQyx1QkFBdUIsRUFBRTtBQUM5RCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVDQUF1QyxxQkFBcUIsRUFBRTtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixtQkFBbUI7QUFDekMsOERBQThELHVCQUF1QixFQUFFO0FBQ3ZGO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsK0JBQStCLEVBQUU7QUFDeEU7QUFDQTtBQUNBLHdDQUF3Qyw2QkFBNkIsRUFBRTtBQUN2RTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QywrQkFBK0IsRUFBRTtBQUN4RTtBQUNBO0FBQ0Esc0NBQXNDLDZCQUE2QixFQUFFO0FBQ3JFO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw2Q0FBNkMseUJBQXlCLEVBQUU7QUFDeEU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSx1Q0FBdUMsK0JBQStCLEVBQUU7QUFDeEUsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsK0VBQStFLGFBQWEsRUFBRTtBQUM5RixHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCwyQkFBMkI7QUFDM0U7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0Esd0NBQXdDLDJCQUEyQixFQUFFO0FBQ3JFLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBLHdDQUF3Qyw2QkFBNkIsRUFBRTtBQUN2RSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSwwQ0FBMEMsK0JBQStCLEVBQUU7QUFDM0UsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsMkRBQTJELEVBQUU7QUFDM0Y7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QiwyQ0FBMkMsRUFBRTtBQUMzRTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsK0NBQStDOztBQUU1RztBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxzQkFBc0IsRUFBRTtBQUM3RCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBEQUEwRDtBQUMxRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsbUJBQW1CLEVBQUU7QUFDNUQsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDLEtBQUs7QUFDN0M7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGlCQUFpQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBLGtDQUFrQyxTQUFTO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwREFBMEQsMkJBQTJCLEVBQUU7QUFDdkY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QywyREFBMkQ7QUFDbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFZSx3RUFBUyxFQUFDO0FBQ21WOzs7Ozs7Ozs7Ozs7QUN6ckw1VztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxjQUFjLFNBQVM7QUFDdkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLEtBQStCLEdBQUcsRUFNdEM7O0FBRUY7QUFDQTs7Ozs7Ozs7Ozs7OztBQ3BIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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S0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsVUFBVSxLQUFxQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixzQkFBc0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLElBQXFDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLDJCQUEyQjtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxzRkFBc0YsYUFBYTtBQUNuRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RkFBNEYsZUFBZTtBQUMzRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7Ozs7Ozs7Ozs7O0FDbE9hOztBQUViLElBQUks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LFdBQVc7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdEQSxhQUFhLDZDQUE2QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQTVELGFBQWEsK0JBQStCLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBOUMsYUFBYSwwQ0FBMEMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F6RCxhQUFhLHVDQUF1QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXRELGFBQWEsd0NBQXdDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBdkQsYUFBYSw2Q0FBNkMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0E1RCxhQUFhLCtDQUErQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQTlELGFBQWEseUNBQXlDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBeEQsYUFBYSxxQ0FBcUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0FwRCxhQUFhLHNDQUFzQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXJELGFBQWEsK0NBQStDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBOUQsYUFBYSxvQ0FBb0MsRUFBRSxJOzs7Ozs7Ozs7OztBQ0FuRCxhQUFhLGlEQUFpRCxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQWhFLGFBQWEsaUNBQWlDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBaEQsYUFBYSxtREFBbUQsRUFBRSxJIiwiZmlsZSI6ImV2ZW50ZXNwcmVzc28tZGF0YS1zdG9yZXMuYzE0ZGIzMmViMThhN2IxYTYyYzUuZGlzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgYXBpRmV0Y2ggZnJvbSAnQHdvcmRwcmVzcy9hcGktZmV0Y2gnO1xuaW1wb3J0IHtcblx0c2VsZWN0IGFzIHNlbGVjdERhdGEsXG5cdGRpc3BhdGNoIGFzIGRpc3BhdGNoRGF0YSxcblx0c3Vic2NyaWJlLFxufSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgcGx1cmFsTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgYXMgQ09SRV9SRURVQ0VSX0tFWSB9IGZyb20gJy4vY29yZS9jb25zdGFudHMnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFjdGlvbiBvYmplY3QgZm9yIGEgZmV0Y2ggY29udHJvbC5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0XG4gKiBAcmV0dXJuIHt7dHlwZTogc3RyaW5nLCByZXF1ZXN0OiBPYmplY3R9fSBBbiBhY3Rpb24gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaCggcmVxdWVzdCApIHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiAnRkVUQ0hfRlJPTV9BUEknLFxuXHRcdHJlcXVlc3QsXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYWN0aW9uIG9iamVjdCBmb3IgYSBzZWxlY3QgY29udHJvbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWR1Y2VyS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lXG4gKiBAcGFyYW0geypbXX0gYXJnc1xuICogQHJldHVybiB7e3R5cGU6IHN0cmluZywgcmVkdWNlcktleTogc3RyaW5nLCBzZWxlY3Rvck5hbWU6IHN0cmluZywgYXJnczogKltdfX1cbiAqIFJldHVybnMgYW4gYWN0aW9uIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdCggcmVkdWNlcktleSwgc2VsZWN0b3JOYW1lLCAuLi5hcmdzICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6ICdTRUxFQ1QnLFxuXHRcdHJlZHVjZXJLZXksXG5cdFx0c2VsZWN0b3JOYW1lLFxuXHRcdGFyZ3MsXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYWN0aW9uIG9iamVjdCBmb3IgcmVzb2x2aW5nIGEgc2VsZWN0b3IgdGhhdCBoYXMgYSByZXNvbHZlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWR1Y2VyS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzXG4gKiBAcmV0dXJuIHtPYmplY3R9IEFuIGFjdGlvbiBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2VsZWN0KCByZWR1Y2VyS2V5LCBzZWxlY3Rvck5hbWUsIC4uLmFyZ3MgKSB7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogJ1JFU09MVkVfU0VMRUNUJyxcblx0XHRyZWR1Y2VyS2V5LFxuXHRcdHNlbGVjdG9yTmFtZSxcblx0XHRhcmdzLFxuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFjdGlvbiBvYmplY3QgZm9yIGEgZGlzcGF0Y2ggY29udHJvbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWR1Y2VyS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hOYW1lXG4gKiBAcGFyYW0geypbXX0gYXJnc1xuICogQHJldHVybiB7e3R5cGU6IHN0cmluZywgcmVkdWNlcktleTogc3RyaW5nLCBkaXNwYXRjaE5hbWU6IHN0cmluZywgYXJnczogKltdfX1cbiAqIEFuIGFjdGlvbiBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoKCByZWR1Y2VyS2V5LCBkaXNwYXRjaE5hbWUsIC4uLmFyZ3MgKSB7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogJ0RJU1BBVENIJyxcblx0XHRyZWR1Y2VyS2V5LFxuXHRcdGRpc3BhdGNoTmFtZSxcblx0XHRhcmdzLFxuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFjdGlvbiBvYmplY3QgZm9yIGEgcmVzb2x2ZSBkaXNwYXRjaCBjb250cm9sXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZHVjZXJLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3NcbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGFjdGlvbiBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRGlzcGF0Y2goIHJlZHVjZXJLZXksIGRpc3BhdGNoTmFtZSwgLi4uYXJncyApIHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiAnUkVTT0xWRV9ESVNQQVRDSCcsXG5cdFx0cmVkdWNlcktleSxcblx0XHRkaXNwYXRjaE5hbWUsXG5cdFx0YXJncyxcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhY3Rpb24gb2JqZWN0IGZvciByZXNvbHZpbmcgdGhlIGdldEVudGl0eUJ5SWQgc2VsZWN0b3JcbiAqIGZvciBhbGwgdGhlIGdpdmVuIGlkcyBvbiB0aGUgZ2l2ZW4gbW9kZWxcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge0FycmF5fSBlbnRpdHlJZHNcbiAqIEByZXR1cm4ge09iamVjdH0gQW4gYWN0aW9uIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUdldEVudGl0eUJ5SWRGb3JJZHMoIG1vZGVsTmFtZSwgZW50aXR5SWRzICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6ICdSRVNPTFZFX0dFVF9FTlRJVFlfQllfSURfRk9SX0lEUycsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkcyxcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhY3Rpb24gb2JqZWN0IGZvciByZXNvbHZpbmcgdGhlIGdldFJlbGF0ZWRFbnRpdGllcyBzZWxlY3RvclxuICogb24gdGhlIGV2ZW50ZXNwcmVzc28vY29yZSBzdG9yZSBmb3IgdGhlIGdpdmVuIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eVxuICogQHBhcmFtIHtNYXB9IHJlbGF0aW9uRW50aXRpZXNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gcmVsYXRpb25JZHNcbiAqIEByZXR1cm4ge09iamVjdH0gQW4gYWN0aW9uIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUdldFJlbGF0ZWRFbnRpdGllcyhcblx0ZW50aXR5LFxuXHRyZWxhdGlvbkVudGl0aWVzLFxuXHRyZWxhdGlvbklkc1xuKSB7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogJ1JFU09MVkVfR0VUX1JFTEFURURfRU5USVRJRVMnLFxuXHRcdGVudGl0eSxcblx0XHRyZWxhdGlvbkVudGl0aWVzLFxuXHRcdHJlbGF0aW9uSWRzLFxuXHR9O1xufVxuXG5jb25zdCBjb250cm9scyA9IHtcblx0RkVUQ0hfRlJPTV9BUEkoIHsgcmVxdWVzdCB9ICkge1xuXHRcdHJldHVybiBhcGlGZXRjaCggcmVxdWVzdCApO1xuXHR9LFxuXHRTRUxFQ1QoIHsgcmVkdWNlcktleSwgc2VsZWN0b3JOYW1lLCBhcmdzIH0gKSB7XG5cdFx0cmV0dXJuIHNlbGVjdERhdGEoIHJlZHVjZXJLZXkgKVsgc2VsZWN0b3JOYW1lIF0oIC4uLmFyZ3MgKTtcblx0fSxcblx0RElTUEFUQ0goIHsgcmVkdWNlcktleSwgZGlzcGF0Y2hOYW1lLCBhcmdzIH0gKSB7XG5cdFx0cmV0dXJuIGRpc3BhdGNoRGF0YSggcmVkdWNlcktleSApWyBkaXNwYXRjaE5hbWUgXSggLi4uYXJncyApO1xuXHR9LFxuXHRhc3luYyBSRVNPTFZFX0RJU1BBVENIKCB7IHJlZHVjZXJLZXksIGRpc3BhdGNoTmFtZSwgYXJncyB9ICkge1xuXHRcdHJldHVybiBhd2FpdCBkaXNwYXRjaERhdGEoIHJlZHVjZXJLZXkgKVsgZGlzcGF0Y2hOYW1lIF0oIC4uLmFyZ3MgKTtcblx0fSxcblx0UkVTT0xWRV9TRUxFQ1QoIHsgcmVkdWNlcktleSwgc2VsZWN0b3JOYW1lLCBhcmdzIH0gKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKCAoIHJlc29sdmUgKSA9PiB7XG5cdFx0XHRjb25zdCBoYXNGaW5pc2hlZCA9ICgpID0+IHNlbGVjdERhdGEoICdjb3JlL2RhdGEnIClcblx0XHRcdFx0Lmhhc0ZpbmlzaGVkUmVzb2x1dGlvbiggcmVkdWNlcktleSwgc2VsZWN0b3JOYW1lLCBhcmdzICk7XG5cdFx0XHRjb25zdCBnZXRSZXN1bHQgPSAoKSA9PiBzZWxlY3REYXRhKCByZWR1Y2VyS2V5IClbIHNlbGVjdG9yTmFtZSBdXG5cdFx0XHRcdC5hcHBseSggbnVsbCwgYXJncyApO1xuXG5cdFx0XHQvLyB0cmlnZ2VyIHRoZSBzZWxlY3RvciAodG8gdHJpZ2dlciB0aGUgcmVzb2x2ZXIpXG5cdFx0XHRjb25zdCByZXN1bHQgPSBnZXRSZXN1bHQoKTtcblx0XHRcdGlmICggaGFzRmluaXNoZWQoKSApIHtcblx0XHRcdFx0cmV0dXJuIHJlc29sdmUoIHJlc3VsdCApO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB1bnN1YnNjcmliZSA9IHN1YnNjcmliZSggKCkgPT4ge1xuXHRcdFx0XHRpZiAoIGhhc0ZpbmlzaGVkKCkgKSB7XG5cdFx0XHRcdFx0dW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHRyZXNvbHZlKCBnZXRSZXN1bHQoKSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9LFxuXHRSRVNPTFZFX0dFVF9FTlRJVFlfQllfSURfRk9SX0lEUyggeyBtb2RlbE5hbWUsIGVudGl0eUlkcyB9ICkge1xuXHRcdHdoaWxlICggZW50aXR5SWRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRkaXNwYXRjaERhdGEoXG5cdFx0XHRcdCdjb3JlL2RhdGEnLFxuXHRcdFx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0XHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0XHRcdCdnZXRFbnRpdHlCeUlkJyxcblx0XHRcdFx0WyBtb2RlbE5hbWUsIGVudGl0eUlkcy5wb3AoKSBdXG5cdFx0XHQpO1xuXHRcdH1cblx0fSxcblx0UkVTT0xWRV9HRVRfUkVMQVRFRF9FTlRJVElFUyggeyBlbnRpdHksIHJlbGF0aW9uRW50aXRpZXMsIHJlbGF0aW9uSWRzIH0gKSB7XG5cdFx0d2hpbGUgKCByZWxhdGlvbklkcy5sZW5ndGggPiAwICkge1xuXHRcdFx0Y29uc3QgcmVsYXRpb25FbnRpdHkgPSByZWxhdGlvbkVudGl0aWVzLmdldCggcmVsYXRpb25JZHMucG9wKCkgKTtcblx0XHRcdGlmICggcmVsYXRpb25FbnRpdHkgKSB7XG5cdFx0XHRcdGRpc3BhdGNoRGF0YShcblx0XHRcdFx0XHQnY29yZS9kYXRhJyxcblx0XHRcdFx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0XHRcdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHRcdFx0XHQnZ2V0UmVsYXRlZEVudGl0aWVzJyxcblx0XHRcdFx0XHRbIHJlbGF0aW9uRW50aXR5LCBwbHVyYWxNb2RlbE5hbWUoIGVudGl0eS5tb2RlbE5hbWUgKSBdXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29udHJvbHM7XG4iLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyB1cHBlckZpcnN0LCBjYW1lbENhc2UsIHJlZHVjZSwgaXNNYXAsIGlzTmFOIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwbHVyYWxpemUgZnJvbSAncGx1cmFsaXplJztcbmltcG9ydCB7IG1hcFJlZHVjZXIgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcblxuLyoqXG4gKiBBIGhlbHBlciBmb3IgZ2V0dGluZyBhIG1ldGhvZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHN1ZmZpeFxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICogQHBhcmFtIHtib29sZWFufSB1c2VQbHVyYWxcbiAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyBhIG5hbWUgZm9yIGEgbWV0aG9kLlxuICovXG5leHBvcnQgY29uc3QgZ2V0TWV0aG9kTmFtZSA9IChcblx0bW9kZWxOYW1lLFxuXHRzdWZmaXggPSAnJyxcblx0cHJlZml4ID0gJ2dldCcsXG5cdHVzZVBsdXJhbCA9IGZhbHNlXG4pID0+IHtcblx0bW9kZWxOYW1lID0gdXNlUGx1cmFsID8gcGx1cmFsaXplKCBtb2RlbE5hbWUgKSA6IG1vZGVsTmFtZTtcblx0cmV0dXJuIHByZWZpeCArIHVwcGVyRmlyc3QoIGNhbWVsQ2FzZSggbW9kZWxOYW1lICsgdXBwZXJGaXJzdCggc3VmZml4ICkgKSApO1xufTtcblxuLyoqXG4gKiBHaXZlbiBhIGNvbGxlY3Rpb24gb2YgZXhpc3RpbmcgZW50aXRpZXMgYW5kIGEgY29sbGVjdGlvbiBvZiBpbmNvbWluZ1xuICogZW50aXRpZXMsIHRoaXMgcmV0dXJucyBhIG1lcmdlZCBvYmplY3Qgd2l0aCBwcmVmZXJlbmNlIGdpdmVuIHRvIGNvbW1vblxuICogZW50aXRpZXMgZnJvbSB0aGUgZXhpc3RpbmdFbnRpdGllcyBjb2xsZWN0aW9uLlxuICpcbiAqIEluY29taW5nIGNvbGxlY3Rpb25zIGNhbiBiZSBNYXBzIG9yIHBsYWluIG9iamVjdHMuXG4gKlxuICogTm90ZSBpZiBpbmNvbWluZ0VudGl0aWVzIGlzIGEgTWFwLCB0aGUgT1JERVIgb2YgdGhlIG1hcCB3aWxsIGJlIHByZXNlcnZlZFxuICogZXZlbiBpZiB0aGUgdmFsdWVzIG9mIGVudGl0aWVzIGluIHRoZSBtYXAgYXJlIHJlcGxhY2VkIGJ5IHZhbHVlcyBmcm9tXG4gKiBleGlzdGluZyBlbnRpdGllcy5cbiAqXG4gKiBAcGFyYW0ge01hcHxPYmplY3R9IGV4aXN0aW5nRW50aXRpZXNcbiAqIEBwYXJhbSB7TWFwfE9iamVjdH0gaW5jb21pbmdFbnRpdGllc1xuICogQHJldHVybiB7TWFwfSBBIG5ldyBjb2xsZWN0aW9uIG9mIGVudGl0aWVzLiBOb3RlIGlmIGV4aXN0aW5nIGVudGl0aWVzIGNhbWUgaW5cbiAqIGFzIGEgcGxhaW4gb2JqZWN0LCB0aGlzIHJldHVybnMgYSBNYXAuXG4gKi9cbmV4cG9ydCBjb25zdCBrZWVwRXhpc3RpbmdFbnRpdGllc0luT2JqZWN0ID0gKFxuXHRleGlzdGluZ0VudGl0aWVzLFxuXHRpbmNvbWluZ0VudGl0aWVzLFxuKSA9PiB7XG5cdGNvbnN0IGdldEV4aXN0aW5nT3JEZWZhdWx0RW50aXR5ID0gKCBkZWZhdWx0RW50aXR5LCBlbnRpdHlJZCApID0+IHtcblx0XHRpZiAoIGlzTWFwKCBleGlzdGluZ0VudGl0aWVzICkgJiYgZXhpc3RpbmdFbnRpdGllcy5oYXMoIGVudGl0eUlkICkgKSB7XG5cdFx0XHRyZXR1cm4gZXhpc3RpbmdFbnRpdGllcy5nZXQoIGVudGl0eUlkICk7XG5cdFx0fVxuXHRcdHJldHVybiBleGlzdGluZ0VudGl0aWVzWyBlbnRpdHlJZCBdIHx8IGRlZmF1bHRFbnRpdHk7XG5cdH07XG5cdGNvbnN0IHJlZHVjZUNhbGxiYWNrID0gKCBtYXBwZWQsIGVudGl0eSwgZW50aXR5SWQgKSA9PiB7XG5cdFx0ZW50aXR5SWQgPSBub3JtYWxpemVFbnRpdHlJZCggZW50aXR5SWQgKTtcblx0XHRtYXBwZWQuc2V0KCBlbnRpdHlJZCwgZ2V0RXhpc3RpbmdPckRlZmF1bHRFbnRpdHkoIGVudGl0eSwgZW50aXR5SWQgKSApO1xuXHRcdHJldHVybiBtYXBwZWQ7XG5cdH07XG5cdHJldHVybiBpc01hcCggaW5jb21pbmdFbnRpdGllcyApID9cblx0XHRtYXBSZWR1Y2VyKCBpbmNvbWluZ0VudGl0aWVzLCByZWR1Y2VDYWxsYmFjaywgbmV3IE1hcCgpICkgOlxuXHRcdHJlZHVjZSggaW5jb21pbmdFbnRpdGllcywgcmVkdWNlQ2FsbGJhY2ssIG5ldyBNYXAoKSApO1xufTtcblxuLyoqXG4gKiBUaGlzIG5vcm1hbGl6ZXMgbnVtZXJpYyB2YWx1ZXMgdG8gaW50ZWdlciBudW1iZXJzIGFuZCBsZWF2ZXMgbm9uIG51bWVyaWNcbiAqIHZhbHVlcyBhbG9uZS5cbiAqXG4gKiBAcGFyYW0geyp9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHsqfSBOb3JtYWxpemVkIHZhbHVlXG4gKi9cbmNvbnN0IG5vcm1hbGl6ZUVudGl0eUlkID0gKCBlbnRpdHlJZCApID0+IHtcblx0Y29uc3Qgb3JpZ2luYWxJZCA9IGVudGl0eUlkO1xuXHRlbnRpdHlJZCA9IHBhcnNlSW50KCBlbnRpdHlJZCwgMTAgKTtcblx0cmV0dXJuIGlzTmFOKCBlbnRpdHlJZCApID8gb3JpZ2luYWxJZCA6IGVudGl0eUlkO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbi8qKlxuICogSW52b2tlcyB0aGUgc2VsZWN0b3IgZm9yIHdoZXRoZXIgYSBnaXZlbiBzZWxlY3Rvck5hbWUgaW4gYSBnaXZlbiByZWdpc3RlcmVkXG4gKiByZWR1Y2VyIHN0b3JlIGlzIGluIHRoZSBtaWRzdCBvZiByZXNvbHZpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVkdWNlcktleVxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yTmFtZVxuICogQHBhcmFtIHsqW119IGFyZ3NcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBXaGV0aGVyIHJlc29sdXRpb24gaXMgaW4gcHJvZ3Jlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1Jlc29sdmluZyA9ICggcmVkdWNlcktleSwgc2VsZWN0b3JOYW1lLCAuLi5hcmdzICkgPT4ge1xuXHRyZXR1cm4gc2VsZWN0KCAnY29yZS9kYXRhJyApLmlzUmVzb2x2aW5nKCByZWR1Y2VyS2V5LCBzZWxlY3Rvck5hbWUsIGFyZ3MgKTtcbn07XG5cbi8qKlxuICogSW52b2tlcyB0aGUgc2VsZWN0b3IgZm9yIHdoZXRoZXIgYSBnaXZlbiBzZWxlY3Rvck5hbWUgaW4gYSBnaXZlbiByZWdpc3RlcmVkXG4gKiByZWR1Y2VyIHN0b3JlIGhhcyBmaW5pc2hlZCByZXNvbHZpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZHVjZXJLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3Rvck5hbWVcbiAqIEBwYXJhbSB7KltdfSBhcmdzXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHJlc29sdXRpb24gaGFzIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0ZpbmlzaGVkUmVzb2x2aW5nID0gKCByZWR1Y2VyS2V5LCBzZWxlY3Rvck5hbWUsIC4uLmFyZ3MgKSA9PiB7XG5cdHJldHVybiBzZWxlY3QoICdjb3JlL2RhdGEnIClcblx0XHQuaGFzRmluaXNoZWRSZXNvbHV0aW9uKCByZWR1Y2VyS2V5LCBzZWxlY3Rvck5hbWUsIGFyZ3MgKTtcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL3JlY2VpdmUtZW50aXRpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWNlaXZlLXJlbGF0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3JlbW92ZS1lbnRpdGllcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlbW92ZS1yZWxhdGlvbnMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUtZW50aXRpZXMtZ2VuZXJhdG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL2NyZWF0ZS1yZWxhdGlvbnMtZ2VuZXJhdG9ycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RlbGV0ZS1lbnRpdHktZ2VuZXJhdG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL2RlbGV0ZS1yZWxhdGlvbnMtZ2VuZXJhdG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL3BlcnNpc3QtZW50aXR5LWdlbmVyYXRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJzaXN0LXJlbGF0aW9ucy1nZW5lcmF0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzZXQnO1xuIiwiY29uc3QgZW50aXRpZXMgPSB7XG5cdFJFQ0VJVkVfRU5USVRZX1JFQ09SRFM6ICdSRUNFSVZFX0VOVElUWV9SRUNPUkRTJyxcblx0UkVDRUlWRV9BTkRfUkVQTEFDRV9FTlRJVFlfUkVDT1JEUzogJ1JFQ0VJVkVfQU5EX1JFUExBQ0VfRU5USVRZX1JFQ09SRFMnLFxuXHRSRUNFSVZFX0VOVElUWTogJ1JFQ0VJVkVfRU5USVRZJyxcblx0UkVNT1ZFX0VOVElUWV9CWV9JRDogJ1JFTU9WRV9FTlRJVFlfQllfSUQnLFxuXHRSRU1PVkVfREVMRVRFX0VOVElUWV9JRDogJ1JFTU9WRV9ERUxFVEVfRU5USVRZX0lEJyxcblx0UkVNT1ZFX1RSQVNIX0VOVElUWV9JRDogJ1JFTU9WRV9UUkFTSF9FTlRJVFlfSUQnLFxuXHRSRUNFSVZFX1RSQVNIX0VOVElUWV9JRDogJ1JFQ0VJVkVfVFJBU0hfRU5USVRZX0lEJyxcblx0UkVDRUlWRV9ERUxFVEVfRU5USVRZX0lEOiAnUkVDRUlWRV9ERUxFVEVfRU5USVRZX0lEJyxcbn07XG5jb25zdCByZWxhdGlvbnMgPSB7XG5cdFJFTU9WRV9ESVJUWV9SRUxBVElPTl9BRERJVElPTjogJ1JFTU9WRV9ESVJUWV9SRUxBVElPTl9BRERJVElPTicsXG5cdFJFTU9WRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTjogJ1JFTU9WRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTicsXG5cdFJFQ0VJVkVfUkVMQVRFRF9FTlRJVFlfSURTOiAnUkVDRUlWRV9SRUxBVEVEX0VOVElUWV9JRFMnLFxuXHRSRU1PVkVfUkVMQVRFRF9FTlRJVFlfSURTOiAnUkVNT1ZFX1JFTEFURURfRU5USVRZX0lEUycsXG5cdFJFTU9WRV9SRUxBVEVEX0VOVElUSUVTX0ZPUl9FTlRJVFk6ICdSRU1PVkVfUkVMQVRFRF9FTlRJVElFU19GT1JfRU5USVRZJyxcblx0UkVDRUlWRV9ESVJUWV9SRUxBVElPTl9BRERJVElPTjogJ1JFQ0VJVkVfRElSVFlfUkVMQVRJT05fQURESVRJT04nLFxuXHRSRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OOiAnUkVDRUlWRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTicsXG5cdFJFQ0VJVkVfVVBEQVRFRF9FTlRJVFlfSURfRk9SX1JFTEFUSU9OUzpcblx0XHQnUkVDRUlWRV9VUERBVEVEX0VOVElUWV9JRF9GT1JfUkVMQVRJT05TJyxcbn07XG5jb25zdCByZXNldHMgPSB7XG5cdFJFU0VUX0FMTF9TVEFURTogJ1JFU0VUX0FMTF9TVEFURScsXG5cdFJFU0VUX1NUQVRFX0ZPUl9NT0RFTDogJ1JFU0VUX1NUQVRFX0ZPUl9NT0RFTCcsXG5cdFJFU0VUX0FMTF9NT0RFTF9TUEVDSUZJQzogJ1JFU0VUX0FMTF9NT0RFTF9TUEVDSUZJQ19TVEFURScsXG5cdFJFU0VUX01PREVMX1NQRUNJRklDX0ZPUl9TRUxFQ1RPUjogJ1JFU0VUX01PREVMX1NQRUNJRklDX0ZPUl9TRUxFQ1RPUicsXG5cdFJFU0VUX01PREVMX1NQRUNJRklDX0ZPUl9TRUxFQ1RPUl9BTkRfQVJHUzpcblx0XHQnUkVTRVRfTU9ERUxfU1BFQ0lGSUNfRk9SX1NFTEVDVE9SX0FORF9BUkdTJyxcbn07XG5cbmNvbnN0IG1vZGVsU3BlY2lmaWMgPSB7XG5cdFJFQ0VJVkVfU0VMRUNUT1JfVkFMVUU6ICdSRUNFSVZFX1NFTEVDVE9SX1ZBTFVFJyxcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVFlQRVMgPSB7IGVudGl0aWVzLCByZWxhdGlvbnMsIG1vZGVsU3BlY2lmaWMsIHJlc2V0cyB9O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGlzTW9kZWxFbnRpdHlGYWN0b3J5T2ZNb2RlbCxcblx0aXNNb2RlbEVudGl0eSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBJbnZhbGlkTW9kZWxFbnRpdHkgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgcmVzb2x2ZVNlbGVjdCwgZGlzcGF0Y2ggfSBmcm9tICcuLi8uLi9iYXNlLWNvbnRyb2xzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIGFzIFNDSEVNQV9SRURVQ0VSX0tFWSB9IGZyb20gJy4uLy4uL3NjaGVtYS9jb25zdGFudHMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgYXMgQ09SRV9SRURVQ0VSX0tFWSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbi8qKlxuICogUmV0dXJucyBhbiBhY3Rpb24gZ2VuZXJhdG9yIGZvciBjcmVhdGluZyBhIG1vZGVsIGVudGl0eSBpbnN0YW5jZSBhbmRcbiAqIGluY2x1ZGluZyBpdCBpbiBhbiBhY3Rpb24gb2JqZWN0IGZvciBhZGRpbmcgdG8gc3RhdGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgVGhlIG5hbWUgb2YgdGhlIG1vZGVsIHRoZSBpbmNvbWluZyBvYmplY3QgaXMgZm9yLlxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eSAgQSBwbGFpbiBvYmplY3QgY29udGFpbmluZyB0aGUgZW50aXR5IHByb3BlcnRpZXMgYW5kXG4gKiB2YWx1ZXNcbiAqIEByZXR1cm4ge251bGx8T2JqZWN0fSAgSWYgdGhlIGVudGl0eSBpcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCB0aGUgbW9kZWwgZW50aXR5XG4gKiBpbnN0YW5jZSBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIG51bGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogY3JlYXRlRW50aXR5KCBtb2RlbE5hbWUsIGVudGl0eSApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBmYWN0b3J5ID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0J2dldEZhY3RvcnlGb3JNb2RlbCcsXG5cdFx0bW9kZWxOYW1lXG5cdCk7XG5cdGlmICggISBpc01vZGVsRW50aXR5RmFjdG9yeU9mTW9kZWwoIGZhY3RvcnksIG1vZGVsTmFtZSApICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IGVudGl0eUluc3RhbmNlID0gZmFjdG9yeS5jcmVhdGVOZXcoIGVudGl0eSApO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlRW50aXR5QW5kUmVzb2x2ZScsXG5cdFx0ZW50aXR5SW5zdGFuY2Vcblx0KTtcblx0cmV0dXJuIGVudGl0eUluc3RhbmNlO1xufVxuXG4vKipcbiAqIEdlbmVyYXRvciBmb3IgeWllbGRpbmcgYWN0aW9ucyBmb3IgYm90aCByZWNlaXZpbmcgYVxuICogQmFzZUVudGl0eSBpbnN0YW5jZSBhbmQgcmVzb2x2aW5nIHRoZSByZWxhdGVkIHNlbGVjdG9yIGZvciByZXRyaWV2aW5nIHRoYXRcbiAqIGVudGl0eSBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24qIHJlY2VpdmVFbnRpdHlBbmRSZXNvbHZlKCBlbnRpdHkgKSB7XG5cdGFzc2VydElzTW9kZWxFbnRpdHkoIGVudGl0eSApO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlRW50aXR5Jyxcblx0XHRlbnRpdHlcblx0KTtcblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0J2NvcmUvZGF0YScsXG5cdFx0J2ZpbmlzaFJlc29sdXRpb24nLFxuXHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0J2dldEVudGl0eUJ5SWQnLFxuXHRcdFsgZW50aXR5Lm1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpLCBlbnRpdHkuaWQgXVxuXHQpO1xufVxuXG4vKipcbiAqIFNhbWUgYXMgcmVjZWl2ZXNFbnRpdHlBbmRSZXNvbHZlIGV4Y2VwdCB0aGlzIGhhbmRsZXMgbXVsdGlwbGUgZW50aXRpZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge0FycmF5PEJhc2VFbnRpdHk+fWVudGl0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogcmVjZWl2ZUVudGl0aWVzQW5kUmVzb2x2ZSggbW9kZWxOYW1lLCBlbnRpdGllcyApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBlbnRpdHlJZHMgPSBlbnRpdGllcy5tYXAoXG5cdFx0KCBlbnRpdHkgKSA9PiB7XG5cdFx0XHRhc3NlcnRJc01vZGVsRW50aXR5KCBlbnRpdHkgKTtcblx0XHRcdHJldHVybiBlbnRpdHkuaWQ7XG5cdFx0fVxuXHQpO1xuXHR3aGlsZSAoIGVudGl0eUlkcy5sZW5ndGggPiAwICkge1xuXHRcdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFx0J2NvcmUvZGF0YScsXG5cdFx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdFx0J2dldEVudGl0eUJ5SWQnLFxuXHRcdFx0WyBtb2RlbE5hbWUsIGVudGl0eUlkcy5wb3AoKSBdXG5cdFx0KTtcblx0fVxuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlRW50aXR5UmVjb3JkcycsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0aWVzLFxuXHQpO1xufVxuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBtb2RlbCBlbnRpdHkgYW5kIHRocm93c1xuICogSW52YWxpZE1vZGVsRW50aXR5IGlmIGl0IGlzIG5vdC5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eVxuICogQHRocm93cyBJbnZhbGlkTW9kZWxFbnRpdHlcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0SXNNb2RlbEVudGl0eSggZW50aXR5ICkge1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eSggZW50aXR5ICkgKSB7XG5cdFx0dGhyb3cgbmV3IEludmFsaWRNb2RlbEVudGl0eShcblx0XHRcdCdyZWNlaXZlRW50aXR5SWRBbmRSZXNvbHZlIGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgQmFzZUVudGl0eScsXG5cdFx0XHRlbnRpdHksXG5cdFx0KTtcblx0fVxufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBzaW5ndWxhck1vZGVsTmFtZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuaW1wb3J0IHsgSW52YWxpZE1vZGVsRW50aXR5IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5pbXBvcnQgeyBnZXRJZHNGcm9tQmFzZUVudGl0eUFycmF5IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBkaXNwYXRjaCwgc2VsZWN0LCByZXNvbHZlU2VsZWN0IH0gZnJvbSAnLi4vLi4vYmFzZS1jb250cm9scyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQWN0aW9uIGdlbmVyYXRvciB5aWVsZGluZyBhY3Rpb25zIHRoYXQgYWRkIHRoZSByZWxhdGlvbiB0byB0aGUgc3RhdGUgZm9yIGFcbiAqIHNpbmdsZSByZWxhdGlvbiBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IHJlbGF0aW9uRW50aXR5XG4gKi9cbmZ1bmN0aW9uKiBjcmVhdGVSZWxhdGlvbihcblx0bW9kZWxOYW1lLFxuXHRlbnRpdHlJZCxcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvbkVudGl0eVxuKSB7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIHJlbGF0aW9uRW50aXR5LCByZWxhdGlvbk5hbWUgKSApIHtcblx0XHR3YXJuaW5nKFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHQnVGhlIHByb3ZpZGVkIHJlbGF0aW9uIGVudGl0eSAoJXMpIGlzIG5vdCBhIGJhc2UgZW50aXR5IGluc3RhbmNlJyArXG5cdFx0XHQnIGZvciB0aGUgJXMgcmVsYXRpb24gbW9kZWwnLFxuXHRcdFx0cmVsYXRpb25FbnRpdHksXG5cdFx0XHRyZWxhdGlvbk5hbWVcblx0XHQpO1xuXHRcdHJldHVybjtcblx0fVxuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRSRURVQ0VSX0tFWSxcblx0XHQncmVjZWl2ZUVudGl0eUFuZFJlc29sdmUnLFxuXHRcdHJlbGF0aW9uRW50aXR5XG5cdCk7XG5cdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFJFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlUmVsYXRlZEVudGl0aWVzJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdFsgcmVsYXRpb25FbnRpdHkuaWQgXVxuXHQpO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRSRURVQ0VSX0tFWSxcblx0XHQncmVjZWl2ZURpcnR5UmVsYXRpb25BZGRpdGlvbicsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5LmlkLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0KTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gZ2VuZXJhdG9yIHlpZWxkaW5nIGFjdGlvbnMgdGhhdCBhZGQgdGhlIHJlbGF0aW9uIHRvIHRoZSBzdGF0ZSBmb3JcbiAqIG11bHRpcGxlIHJlbGF0aW9uIGVudGl0aWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHBhcmFtIHtBcnJheTxCYXNlRW50aXR5Pn0gcmVsYXRpb25FbnRpdGllc1xuICovXG5mdW5jdGlvbiogY3JlYXRlUmVsYXRpb25zKFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuXHRyZWxhdGlvbk5hbWUsXG5cdHJlbGF0aW9uRW50aXRpZXMsXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cblx0dHJ5IHtcblx0XHRhc3NlcnRBcnJheUhhc0VudGl0aWVzRm9yTW9kZWwoIHJlbGF0aW9uRW50aXRpZXMsIHJlbGF0aW9uTmFtZSApO1xuXHR9IGNhdGNoICggZXhjZXB0aW9uICkge1xuXHRcdHdhcm5pbmcoXG5cdFx0XHRmYWxzZSxcblx0XHRcdCdJbmNvbWluZyByZWxhdGlvbiBFbnRpdGllcyBkbyBub3QgY29udGFpbiBCYXNlRW50aXR5IGluc3RhbmNlcyAnICtcblx0XHRcdCdmb3IgdGhlIGdpdmVuIHJlbGF0aW9uIG1vZGVsICglcyknLFxuXHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IHJlbGF0aW9uSWRzID0gZ2V0SWRzRnJvbUJhc2VFbnRpdHlBcnJheSggcmVsYXRpb25FbnRpdGllcyApO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRSRURVQ0VSX0tFWSxcblx0XHQncmVjZWl2ZUVudGl0aWVzQW5kUmVzb2x2ZScsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXRpZXNcblx0KTtcblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J3JlY2VpdmVSZWxhdGVkRW50aXRpZXMnLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0cmVsYXRpb25JZHMsXG5cdCk7XG5cdGNvbnN0IG1vZGVsRW50aXR5ID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRSRURVQ0VSX0tFWSxcblx0XHQnZ2V0RW50aXR5QnlJZCcsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHQpO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0ZWRFbnRpdGllcycsXG5cdFx0WyBtb2RlbEVudGl0eSwgcmVsYXRpb25OYW1lIF1cblx0KTtcblx0Y29uc3QgcmVsYXRpb25zVG9SZXNvbHZlID0gWyAuLi5yZWxhdGlvbkVudGl0aWVzIF07XG5cdHdoaWxlICggcmVsYXRpb25zVG9SZXNvbHZlLmxlbmd0aCA+IDAgKSB7XG5cdFx0Y29uc3QgcmVsYXRpb25FbnRpdHkgPSByZWxhdGlvbnNUb1Jlc29sdmUucG9wKCk7XG5cdFx0eWllbGQgZGlzcGF0Y2goXG5cdFx0XHRSRURVQ0VSX0tFWSxcblx0XHRcdCdyZWNlaXZlRGlydHlSZWxhdGlvbkFkZGl0aW9uJyxcblx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdHJlbGF0aW9uRW50aXR5LmlkLFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZW50aXR5SWQsXG5cdFx0KTtcblx0XHR5aWVsZCBkaXNwYXRjaChcblx0XHRcdCdjb3JlL2RhdGEnLFxuXHRcdFx0J2ZpbmlzaFJlc29sdXRpb24nLFxuXHRcdFx0UkVEVUNFUl9LRVksXG5cdFx0XHQnZ2V0UmVsYXRlZEVudGl0aWVzJyxcblx0XHRcdFsgcmVsYXRpb25FbnRpdHksIG1vZGVsTmFtZSBdXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgYWN0aW9uIGlzIHVzZWQgdG8gZW5zdXJlIGEgcmVsYXRpb24gRW50aXR5IHJlbGF0ZWQgdG8gdGhlIGdpdmVuXG4gKiBtb2RlbCBlbnRpdHkgaWQgaXMgYm90aCBhZGRlZCB0byB0aGUgc3RhdGUgYW5kIHZhcmlvdXMgc2VsZWN0b3JzIGZvciB0aGVzZVxuICogYXJlIHJlc29sdmVkIHNvIG5vIGFkZGl0aW9uYWwgcmVzb2x1dGlvbiBoYXBwZW5zIGZvciB0aGVzZS5cbiAqXG4gKiBUaGUgcHVycG9zZSBmb3IgdGhpcyBhY3Rpb24gaXMgdG8gYWxsb3cgZm9yIGRvaW5nIG1vcmUgZWZmaWNpZW50IGJhdGNoXG4gKiBxdWVyaWVzIG9mIGVudGl0aWVzIGZyb20gYW4gYXBpIHJlcXVlc3QgYW5kIHRoZW4gdHJpZ2dlcmluZyB0aGUgcmVzb2x1dGlvbiBvZlxuICogYW55IG1vcmUgZ3JhbnVsYXIgc2VsZWN0b3JzIHRoYXQgaGF2ZSByZXNvbHZlcnMuICBUaGlzIGJhc2ljYWxseSBhbGxvd3Mgb25lXG4gKiB0byBoeWRyYXRlIHRoZSBgZXZlbnRlc3ByZXNzby9jb3JlYCBzdGF0ZSB3aXRoIG1vcmUgZWZmaWNpZW50IHF1ZXJpZXMuXG4gKlxuICogQHBhcmFtIHtCYXNlRW50aXR5fSByZWxhdGlvbkVudGl0eVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBtb2RlbElkXG4gKi9cbmZ1bmN0aW9uKiByZXNvbHZlUmVsYXRpb25SZWNvcmRGb3JSZWxhdGlvbihcblx0cmVsYXRpb25FbnRpdHksXG5cdG1vZGVsTmFtZSxcblx0bW9kZWxJZFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0Y29uc3QgcmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uRW50aXR5Lm1vZGVsTmFtZSApO1xuXHRjb25zdCBoYXNFbnRpdHkgPSB5aWVsZCBzZWxlY3QoXG5cdFx0J2NvcmUvZGF0YScsXG5cdFx0J2hhc0ZpbmlzaGVkUmVzb2x1dGlvbicsXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldEVudGl0eUJ5SWQnLFxuXHRcdFsgcmVsYXRpb25OYW1lLCByZWxhdGlvbkVudGl0eS5pZCBdXG5cdCk7XG5cdHJlbGF0aW9uRW50aXR5ID0gaGFzRW50aXR5ID9cblx0XHR5aWVsZCBzZWxlY3QoXG5cdFx0XHRSRURVQ0VSX0tFWSxcblx0XHRcdCdnZXRFbnRpdHlCeUlkJyxcblx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdHJlbGF0aW9uRW50aXR5LmlkXG5cdFx0KSA6XG5cdFx0cmVsYXRpb25FbnRpdHk7XG5cdGlmICggISBoYXNFbnRpdHkgKSB7XG5cdFx0eWllbGQgZGlzcGF0Y2goXG5cdFx0XHRSRURVQ0VSX0tFWSxcblx0XHRcdCdyZWNlaXZlRW50aXR5QW5kUmVzb2x2ZScsXG5cdFx0XHRyZWxhdGlvbkVudGl0eVxuXHRcdCk7XG5cdH1cblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J3JlY2VpdmVSZWxhdGVkRW50aXRpZXMnLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRtb2RlbElkLFxuXHRcdHJlbGF0aW9uTmFtZSxcblx0XHRbIHJlbGF0aW9uRW50aXR5LmlkIF1cblx0KTtcblx0Y29uc3QgbW9kZWxFbnRpdHkgPSB5aWVsZCByZXNvbHZlU2VsZWN0KFxuXHRcdFJFRFVDRVJfS0VZLFxuXHRcdCdnZXRFbnRpdHlCeUlkJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0bW9kZWxJZFxuXHQpO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0ZWRFbnRpdGllcycsXG5cdFx0WyBtb2RlbEVudGl0eSwgcmVsYXRpb25OYW1lIF1cblx0KTtcblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0J2NvcmUvZGF0YScsXG5cdFx0J2ZpbmlzaFJlc29sdXRpb24nLFxuXHRcdFJFRFVDRVJfS0VZLFxuXHRcdCdnZXRSZWxhdGVkRW50aXRpZXMnLFxuXHRcdFsgcmVsYXRpb25FbnRpdHksIG1vZGVsTmFtZSBdXG5cdCk7XG59XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRoZSBwcm92aWRlZCBtYXAgaGFzIEJhc2VFbnRpdHkgaW5zdGFuY2VzIGZvciB0aGUgZXhwZWN0ZWRcbiAqIG1vZGVsIG5hbWUuXG4gKlxuICogQHBhcmFtIHtBcnJheTxCYXNlRW50aXR5Pn0gZW50aXRpZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk1vZGVsTmFtZSBFeHBlY3RlZCB0byBiZSB0aGUgc2luZ3VsYXIgZm9ybSBmb3IgdGhlXG4gKiBtb2RlbE5hbWUuXG4gKiBAdGhyb3dzIEludmFsaWRNb2RlbEVudGl0eVxuICovXG5jb25zdCBhc3NlcnRBcnJheUhhc0VudGl0aWVzRm9yTW9kZWwgPSAoIGVudGl0aWVzLCByZWxhdGlvbk1vZGVsTmFtZSApID0+IHtcblx0cmVsYXRpb25Nb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25Nb2RlbE5hbWUgKTtcblx0Zm9yICggY29uc3QgZW50aXR5IG9mIGVudGl0aWVzICkge1xuXHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggZW50aXR5LCByZWxhdGlvbk1vZGVsTmFtZSApICkge1xuXHRcdFx0dGhyb3cgbmV3IEludmFsaWRNb2RlbEVudGl0eSggJycsIGVudGl0eSApO1xuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0IHsgY3JlYXRlUmVsYXRpb24sIGNyZWF0ZVJlbGF0aW9ucywgcmVzb2x2ZVJlbGF0aW9uUmVjb3JkRm9yUmVsYXRpb24gfTtcbiIsIi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQgeyByZW1vdmVFbnRpdHlCeUlkIH0gZnJvbSAnLi9yZW1vdmUtZW50aXRpZXMnO1xuaW1wb3J0IHtcblx0cmVjZWl2ZVRyYXNoRW50aXR5SWQsXG5cdHJlY2VpdmVEZWxldGVFbnRpdHlJZCxcbn0gZnJvbSAnLi9yZWNlaXZlLWVudGl0aWVzJztcbmltcG9ydCB7IHJlbW92ZUFsbFJlbGF0ZWRFbnRpdGllc0Zvck1vZGVsRW50aXR5IH0gZnJvbSAnLi9yZW1vdmUtcmVsYXRpb25zJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgeWllbGRpbmcgYWN0aW9ucyBmb3IgcXVldWluZyBhbiBlbnRpdHkgZGVsZXRlIHJlY29yZFxuICogaW4gdGhlIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICovXG5leHBvcnQgZnVuY3Rpb24qIGRlbGV0ZUVudGl0eUJ5SWQoIG1vZGVsTmFtZSwgZW50aXR5SWQgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0eWllbGQgcmVtb3ZlRW50aXR5QnlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xuXHQvLyByZW1vdmUgYW55IHJlbGF0aW9uIHJlY29yZHMgZm9yIHRoaXMgZW50aXR5XG5cdHlpZWxkIHJlbW92ZUFsbFJlbGF0ZWRFbnRpdGllc0Zvck1vZGVsRW50aXR5KCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdHlpZWxkIHJlY2VpdmVEZWxldGVFbnRpdHlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgeWllbGRpbmcgYWN0aW9ucyBmb3IgcXVldWVpbmcgYW4gZW50aXR5IHRyYXNoIHJlY29yZCBpbiB0aGVcbiAqIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICovXG5leHBvcnQgZnVuY3Rpb24qIHRyYXNoRW50aXR5QnlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHR5aWVsZCByZW1vdmVFbnRpdHlCeUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdHlpZWxkIHJlbW92ZUFsbFJlbGF0ZWRFbnRpdGllc0Zvck1vZGVsRW50aXR5KCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdHlpZWxkIHJlY2VpdmVUcmFzaEVudGl0eUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG59XG4iLCIvKipcbiAqIEludGVybmFsIEltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0cmVjZWl2ZURpcnR5UmVsYXRpb25EZWxldGlvbixcbn0gZnJvbSAnLi9yZWNlaXZlLXJlbGF0aW9ucyc7XG5pbXBvcnQge1xuXHRyZW1vdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24sXG5cdHJlbW92ZVJlbGF0ZWRFbnRpdGllcyxcbn0gZnJvbSAnLi9yZW1vdmUtcmVsYXRpb25zJztcbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBzaW5ndWxhck1vZGVsTmFtZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcblxuLyoqXG4gKiBBY3Rpb24gZ2VuZXJhdG9yIHlpZWxkaW5nIGFjdGlvbnMgZm9yIGhhbmRsaW5nIHJlbW92aW5nIHRoZSBxdWV1ZWQgcmVsYXRpb25zXG4gKiBmb3IgYWRkaXRpb24gaW4gdGhlIHN0YXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gcmVsYXRpb25FbnRpdHlJZFxuICovXG5mdW5jdGlvbiogcmVtb3ZlRGlydHlSZWxhdGlvbkZvckFkZGl0aW9uKFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuXHRyZWxhdGlvbk5hbWUsXG5cdHJlbGF0aW9uRW50aXR5SWQsXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHR5aWVsZCByZW1vdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24oXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHQpO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgeWllbGRpbmcgYWN0aW9ucyBmb3IgYWN0aW9ucyBmb3IgcXVldWluZyB0aGUgcmVtb3ZhbCBvZiBhXG4gKiByZWxhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWxhdGlvbkVudGl0eUlkXG4gKi9cbmZ1bmN0aW9uKiByZW1vdmVSZWxhdGlvbkZvckVudGl0eShcblx0bW9kZWxOYW1lLFxuXHRlbnRpdHlJZCxcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvbkVudGl0eUlkXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdHlpZWxkIHJlbW92ZVJlbGF0ZWRFbnRpdGllcyhcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdFsgcmVsYXRpb25FbnRpdHlJZCBdLFxuXHQpO1xuXHR5aWVsZCByZW1vdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24oXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHRcdHJlbGF0aW9uTmFtZSxcblx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHQpO1xuXG5cdHlpZWxkIHJlY2VpdmVEaXJ0eVJlbGF0aW9uRGVsZXRpb24oXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkXG5cdCk7XG59XG5cbmV4cG9ydCB7IHJlbW92ZURpcnR5UmVsYXRpb25Gb3JBZGRpdGlvbiwgcmVtb3ZlUmVsYXRpb25Gb3JFbnRpdHkgfTtcbiIsImV4cG9ydCAqIGZyb20gJy4vYWN0aW9uLWNyZWF0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9uLWdlbmVyYXRvcnMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzLlxuICovXG5pbXBvcnQge1xuXHRpc01vZGVsRW50aXR5T2ZNb2RlbCxcblx0aXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7XG5cdGFwcGx5UXVlcnlTdHJpbmcsXG5cdGtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUsXG5cdHNpbmd1bGFyTW9kZWxOYW1lLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc0FycmF5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHMuXG4gKi9cbmltcG9ydCB7XG5cdGZldGNoLFxuXHRzZWxlY3QsXG5cdGRpc3BhdGNoLFxuXHRyZXNvbHZlU2VsZWN0LFxuXHRyZXNvbHZlRGlzcGF0Y2gsXG59IGZyb20gJy4uLy4uL2Jhc2UtY29udHJvbHMnO1xuaW1wb3J0IHtcblx0cmVtb3ZlRW50aXR5QnlJZCxcblx0cmVtb3ZlRGVsZXRlRW50aXR5SWQsXG5cdHJlbW92ZVRyYXNoRW50aXR5SWQsXG59IGZyb20gJy4vcmVtb3ZlLWVudGl0aWVzJztcbmltcG9ydCB7IHJlY2VpdmVBbmRSZXBsYWNlRW50aXR5UmVjb3JkcyB9IGZyb20gJy4vcmVjZWl2ZS1lbnRpdGllcyc7XG5pbXBvcnQgeyByZWNlaXZlVXBkYXRlZEVudGl0eUlkRm9yUmVsYXRpb25zIH0gZnJvbSAnLi9yZWNlaXZlLXJlbGF0aW9ucyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSBhcyBDT1JFX1JFRFVDRVJfS0VZIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIGFzIFNDSEVNQV9SRURVQ0VSX0tFWSB9IGZyb20gJy4uLy4uL3NjaGVtYS9jb25zdGFudHMnO1xuXG5jb25zdCBERUZBVUxUX0VNUFRZX09CSkVDVCA9IHt9O1xuY29uc3QgREVGQVVMVF9FTVBUWV9BUlJBWSA9IFtdO1xuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgZm9yIHBlcnNpc3RpbmcgYW4gZW50aXR5IHJlY29yZCAoaW5zZXJ0L3VwZGF0ZSlcbiAqIHRvIHRoZSBzZXJ2ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtCYXNlRW50aXR5fSBlbnRpdHlcbiAqIEByZXR1cm4ge251bGx8QmFzZUVudGl0eX0gSWYgc3VjY2Vzc2Z1bGx5IHBlcnNpc3RlZCB0aGUgcGVyc2lzdGVkIGVudGl0eSBpc1xuICogcmV0dXJuZWQuICBPdGhlcndpc2UgbnVsbC5cbiAqL1xuZnVuY3Rpb24qIHBlcnNpc3RFbnRpdHlSZWNvcmQoIG1vZGVsTmFtZSwgZW50aXR5ICkge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdC8vIGNoZWNrIGlmIGlzIGFuIGluc3RhbmNlIG9mIEJhc2VFbnRpdHlcblx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBlbnRpdHksIG1vZGVsTmFtZSApICkge1xuXHRcdHdhcm5pbmcoXG5cdFx0XHRmYWxzZSxcblx0XHRcdCdUaGUgcHJvdmlkZWQgZW50aXR5IGlzIG5vdCBhIEJhc2VFbnRpdHkgY2hpbGQgZm9yIHRoZSAnICtcblx0XHRcdCdwcm92aWRlZCBtb2RlbC4nXG5cdFx0KTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHQvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgaW4gdGhlIGVudGl0eVxuXHRpZiAoIGVudGl0eS5pc0NsZWFuICkge1xuXHRcdHdhcm5pbmcoXG5cdFx0XHRmYWxzZSxcblx0XHRcdCdUaGUgZW50aXR5IHByb3ZpZGVkIGhhcyBubyBjaGFuZ2VzIHRvIHBlcnNpc3QuJ1xuXHRcdCk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgZmFjdG9yeSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRGYWN0b3J5Rm9yTW9kZWwnLFxuXHRcdG1vZGVsTmFtZVxuXHQpO1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsKCBmYWN0b3J5LCBtb2RlbE5hbWUgKSApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRjb25zdCBwYXRoID0gYXBwbHlRdWVyeVN0cmluZyggbW9kZWxOYW1lICk7XG5cdGNvbnN0IHVwZGF0ZWRFbnRpdHkgPSB5aWVsZCBmZXRjaCgge1xuXHRcdHBhdGg6IGVudGl0eS5pc05ldyA/IHBhdGggOiBwYXRoICsgJy8nICsgZW50aXR5LmlkLFxuXHRcdG1ldGhvZDogZW50aXR5LmlzTmV3ID8gJ1BPU1QnIDogJ1BVVCcsXG5cdFx0ZGF0YTogZW50aXR5LmZvclBlcnNpc3QsXG5cdH0gKTtcblx0aWYgKCBpc0VtcHR5KCB1cGRhdGVkRW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgdXBkYXRlZEVudGl0eVJlY29yZCA9IGZhY3RvcnkuZnJvbUV4aXN0aW5nKCB1cGRhdGVkRW50aXR5ICk7XG5cdGNvbnN0IG5ld0lkID0gdXBkYXRlZEVudGl0eVJlY29yZC5pZDtcblx0aWYgKCBlbnRpdHkuaXNOZXcgKSB7XG5cdFx0eWllbGQgcmVtb3ZlRW50aXR5QnlJZCggbW9kZWxOYW1lLCBlbnRpdHkuaWQgKTtcblx0XHR5aWVsZCBkaXNwYXRjaChcblx0XHRcdCdjb3JlL2RhdGEnLFxuXHRcdFx0J2ZpbmlzaFJlc29sdXRpb24nLFxuXHRcdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHRcdCdnZXRFbnRpdHlCeUlkJyxcblx0XHRcdFsgbW9kZWxOYW1lLCBuZXdJZCBdXG5cdFx0KTtcblx0XHR5aWVsZCByZWNlaXZlVXBkYXRlZEVudGl0eUlkRm9yUmVsYXRpb25zKCBtb2RlbE5hbWUsIGVudGl0eS5pZCwgbmV3SWQgKTtcblx0fVxuXHR5aWVsZCByZWNlaXZlQW5kUmVwbGFjZUVudGl0eVJlY29yZHMoXG5cdFx0bW9kZWxOYW1lLFxuXHRcdFsgdXBkYXRlZEVudGl0eVJlY29yZCBdXG5cdCk7XG5cdHJldHVybiB1cGRhdGVkRW50aXR5UmVjb3JkO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgZm9yIHBlcnNpc3RpbmcgZW50aXRpZXMgd2l0aCB0aGUgZ2l2ZW4gaWQgdG8gdGhlIHNlcnZlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEByZXR1cm4ge0Jhc2VFbnRpdHl8bnVsbH0gSWYgdGhlIGVudGl0eSBpcyBzdWNjZXNzZnVsbHkgcGVyc2lzdGVkIGl0IGlzXG4gKiByZXR1cm5lZCAobWF5IGhhdmUgYSBuZXcgaWQhKSwgb3RoZXJ3aXNlIG51bGwgaXMgcmV0dXJuZWQuXG4gKi9cbmZ1bmN0aW9uKiBwZXJzaXN0Rm9yRW50aXR5SWQoIG1vZGVsTmFtZSwgZW50aXR5SWQgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0Y29uc3QgZW50aXR5ID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRFbnRpdHlCeUlkJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdCk7XG5cdGlmICggaXNNb2RlbEVudGl0eU9mTW9kZWwoIGVudGl0eSwgbW9kZWxOYW1lICkgKSB7XG5cdFx0Y29uc3QgcGVyc2lzdGVkRW50aXR5ID0geWllbGQgZGlzcGF0Y2goXG5cdFx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdFx0J3BlcnNpc3RFbnRpdHlSZWNvcmQnLFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZW50aXR5XG5cdFx0KTtcblx0XHRyZXR1cm4gaXNNb2RlbEVudGl0eU9mTW9kZWwoIHBlcnNpc3RlZEVudGl0eSwgbW9kZWxOYW1lICkgP1xuXHRcdFx0cGVyc2lzdGVkRW50aXR5IDpcblx0XHRcdG51bGw7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQWN0aW9uIGdlbmVyYXRvciBmb3IgcGVyc2lzdGluZyBlbnRpdGllcyB3aXRoIHRoZSBnaXZlbiBpZHMgdG8gdGhlIHNlcnZlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge0FycmF5fSBlbnRpdHlJZHNcbiAqIEByZXR1cm4ge09iamVjdH0gRW50aXRpZXMgcGVyc2lzdGVkIGluZGV4ZWQgYnkgSUQuXG4gKi9cbmZ1bmN0aW9uKiBwZXJzaXN0Rm9yRW50aXR5SWRzKCBtb2RlbE5hbWUsIGVudGl0eUlkcyA9IFtdICkge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdGNvbnN0IGVudGl0aWVzID0geWllbGQgc2VsZWN0KFxuXHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0J2dldEVudGl0aWVzQnlJZHMnLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZHMsXG5cdCk7XG5cdGNvbnN0IHJldHJpZXZlZEVudGl0aWVzID0gaXNBcnJheSggZW50aXRpZXMgKSA/XG5cdFx0a2V5RW50aXRpZXNCeVByaW1hcnlLZXlWYWx1ZSggJ2V2ZW50JywgZW50aXRpZXMgKSA6XG5cdFx0bmV3IE1hcCgpO1xuXHRjb25zdCByZXRyaWV2ZWRJZHMgPSBBcnJheS5mcm9tKCByZXRyaWV2ZWRFbnRpdGllcy5rZXlzKCkgKTtcblx0aWYgKCByZXRyaWV2ZWRJZHMubGVuZ3RoIDwgMSApIHtcblx0XHRyZXR1cm4gREVGQVVMVF9FTVBUWV9PQkpFQ1Q7XG5cdH1cblx0Y29uc3QgcGVyc2lzdGVkRW50aXRpZXMgPSB7fTtcblx0d2hpbGUgKCByZXRyaWV2ZWRJZHMubGVuZ3RoID4gMCApIHtcblx0XHRjb25zdCBwZXJzaXN0ZWRFbnRpdHkgPSB5aWVsZCBkaXNwYXRjaChcblx0XHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0XHQncGVyc2lzdEVudGl0eVJlY29yZCcsXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRyZXRyaWV2ZWRFbnRpdGllcy5nZXQoIHJldHJpZXZlZElkcy5wb3AoKSApXG5cdFx0KTtcblx0XHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBwZXJzaXN0ZWRFbnRpdHksIG1vZGVsTmFtZSApICkge1xuXHRcdFx0cGVyc2lzdGVkRW50aXRpZXNbIHBlcnNpc3RlZEVudGl0eS5pZCBdID0gcGVyc2lzdGVkRW50aXR5O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcGVyc2lzdGVkRW50aXRpZXM7XG59XG5cbi8qKlxuICogQWN0aW9uIGdlbmVyYXRvciBmb3IgcGVyc2lzdGluZyBhbnkgcXVldWVkIGRlbGV0ZXMgZm9yIHRoZSBnaXZlbiBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgZW50aXR5IGlkcyBmb3IgZW50aXRpZXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuXG4gKi9cbmZ1bmN0aW9uKiBwZXJzaXN0RGVsZXRlc0Zvck1vZGVsKCBtb2RlbE5hbWUgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0Y29uc3QgZW50aXR5SWRzID0geWllbGQgc2VsZWN0KFxuXHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0J2dldEVudGl0eUlkc1F1ZXVlZEZvckRlbGV0ZScsXG5cdFx0bW9kZWxOYW1lXG5cdCk7XG5cdGlmICggZW50aXR5SWRzLmxlbmd0aCA8IDAgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfRU1QVFlfQVJSQVk7XG5cdH1cblx0Y29uc3QgZGVsZXRlZElkcyA9IFtdO1xuXHR3aGlsZSAoIGVudGl0eUlkcy5sZW5ndGggPiAwICkge1xuXHRcdGNvbnN0IGVudGl0eUlkID0gZW50aXR5SWRzLnBvcCgpO1xuXHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgZmV0Y2goIHtcblx0XHRcdHBhdGg6IGFwcGx5UXVlcnlTdHJpbmcoIG1vZGVsTmFtZSApICsgJy8nICsgZW50aXR5SWQsXG5cdFx0XHRkYXRhOiB7IGZvcmNlOiB0cnVlIH0sXG5cdFx0XHRtZXRob2Q6ICdERUxFVEUnLFxuXHRcdH0gKTtcblx0XHRpZiAoIHJlc3BvbnNlLmRlbGV0ZWQgKSB7XG5cdFx0XHRkZWxldGVkSWRzLnB1c2goIGVudGl0eUlkICk7XG5cdFx0XHR5aWVsZCByZW1vdmVEZWxldGVFbnRpdHlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVsZXRlZElkcztcbn1cblxuLyoqXG4gKiBBY3Rpb24gZ2VuZXJhdG9yIGZvciBwZXJzaXN0aW5nIGFueSBxdWV1ZWQgdHJhc2hlcyBmb3IgdGhlIGdpdmVuIG1vZGVsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBlbnRpdHkgaWRzIGZvciBlbnRpdGllcyBzdWNjZXNzZnVsbHkgdHJhc2hlZC5cbiAqL1xuZnVuY3Rpb24qIHBlcnNpc3RUcmFzaGVzRm9yTW9kZWwoIG1vZGVsTmFtZSApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBlbnRpdHlJZHMgPSB5aWVsZCBzZWxlY3QoXG5cdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0RW50aXR5SWRzUXVldWVkRm9yVHJhc2gnLFxuXHRcdG1vZGVsTmFtZVxuXHQpO1xuXHRpZiAoIGVudGl0eUlkcy5sZW5ndGggPCAxICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHR9XG5cdGNvbnN0IHRyYXNoZWRJZHMgPSBbXTtcblx0d2hpbGUgKCBlbnRpdHlJZHMubGVuZ3RoID4gMCApIHtcblx0XHRjb25zdCBlbnRpdHlJZCA9IGVudGl0eUlkcy5wb3AoKTtcblx0XHRjb25zdCBzdWNjZXNzID0geWllbGQgZmV0Y2goIHtcblx0XHRcdHBhdGg6IGFwcGx5UXVlcnlTdHJpbmcoIG1vZGVsTmFtZSApICsgJy8nICsgZW50aXR5SWQsXG5cdFx0XHRtZXRob2Q6ICdERUxFVEUnLFxuXHRcdH0gKTtcblx0XHRpZiAoIHN1Y2Nlc3MgKSB7XG5cdFx0XHR0cmFzaGVkSWRzLnB1c2goIGVudGl0eUlkICk7XG5cdFx0XHR5aWVsZCByZW1vdmVUcmFzaEVudGl0eUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cmFzaGVkSWRzO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgZm9yIHBlcnNpc3RpbmcgcXVldWVkIGRlbGV0ZSBhbmQgdHJhc2ggYWN0aW9ucyBmb3IgYWxsXG4gKiBtb2RlbHMgaW4gdGhlIHN0YXRlLlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gQW4gb2JqZWN0IGluZGV4ZWQgYnkgZGVsZXRlL3RyYXNoIGNvbnRhaW5pbmcgYW4gYXJyYXkgb2ZcbiAqIGVudGl0eSBpZHMgdGhhdCB3ZXJlIHBlcnNpc3RlZC5cbiAqL1xuZnVuY3Rpb24qIHBlcnNpc3RBbGxEZWxldGVzKCkge1xuXHRjb25zdCBtb2RlbHNGb3JEZWxldGUgPSB5aWVsZCBzZWxlY3QoXG5cdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0TW9kZWxzUXVldWVkRm9yRGVsZXRlJ1xuXHQpO1xuXHRpZiAoIG1vZGVsc0ZvckRlbGV0ZS5sZW5ndGggPCAxICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX09CSkVDVDtcblx0fVxuXHRjb25zdCBkZWxldGVkSWRzID0ge307XG5cdHdoaWxlICggbW9kZWxzRm9yRGVsZXRlLmxlbmd0aCA+IDAgKSB7XG5cdFx0Y29uc3QgbW9kZWxGb3JEZWxldGUgPSBtb2RlbHNGb3JEZWxldGUucG9wKCk7XG5cdFx0Y29uc3QgaWRzRGVsZXRlZCA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0XHQncGVyc2lzdERlbGV0ZXNGb3JNb2RlbCcsXG5cdFx0XHRtb2RlbEZvckRlbGV0ZVxuXHRcdCk7XG5cdFx0aWYgKCAhIGlzRW1wdHkoIGlkc0RlbGV0ZWQgKSApIHtcblx0XHRcdGRlbGV0ZWRJZHNbIG1vZGVsRm9yRGVsZXRlIF0gPSBpZHNEZWxldGVkO1xuXHRcdH1cblx0fVxuXHRjb25zdCBtb2RlbHNGb3JUcmFzaCA9IHlpZWxkIHNlbGVjdChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRNb2RlbHNRdWV1ZWRGb3JUcmFzaCdcblx0KTtcblx0aWYgKCBtb2RlbHNGb3JUcmFzaC5sZW5ndGggPCAxICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX09CSkVDVDtcblx0fVxuXHRjb25zdCB0cmFzaGVkSWRzID0ge307XG5cdHdoaWxlICggbW9kZWxzRm9yVHJhc2gubGVuZ3RoID4gMCApIHtcblx0XHRjb25zdCBtb2RlbEZvclRyYXNoID0gbW9kZWxzRm9yVHJhc2gucG9wKCk7XG5cdFx0Y29uc3QgaWRzVHJhc2hlZCA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0XHQncGVyc2lzdFRyYXNoZXNGb3JNb2RlbCcsXG5cdFx0XHRtb2RlbEZvclRyYXNoXG5cdFx0KTtcblx0XHRpZiAoICEgaXNFbXB0eSggaWRzVHJhc2hlZCApICkge1xuXHRcdFx0dHJhc2hlZElkc1sgbW9kZWxGb3JUcmFzaCBdID0gaWRzVHJhc2hlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHsgZGVsZXRlZDogZGVsZXRlZElkcywgdHJhc2hlZDogdHJhc2hlZElkcyB9O1xufVxuXG5leHBvcnQge1xuXHRwZXJzaXN0RW50aXR5UmVjb3JkLFxuXHRwZXJzaXN0Rm9yRW50aXR5SWQsXG5cdHBlcnNpc3RGb3JFbnRpdHlJZHMsXG5cdHBlcnNpc3REZWxldGVzRm9yTW9kZWwsXG5cdHBlcnNpc3RUcmFzaGVzRm9yTW9kZWwsXG5cdHBlcnNpc3RBbGxEZWxldGVzLFxufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0cy5cbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSwga2V5cyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgY3VpZCBmcm9tICdjdWlkJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBzaW5ndWxhck1vZGVsTmFtZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzLlxuICovXG5pbXBvcnQge1xuXHRmZXRjaCxcblx0c2VsZWN0LFxuXHRyZXNvbHZlRGlzcGF0Y2gsXG5cdHJlc29sdmVTZWxlY3QsXG59IGZyb20gJy4uLy4uL2Jhc2UtY29udHJvbHMnO1xuaW1wb3J0IHsgcmVtb3ZlRGlydHlSZWxhdGlvbkZvclR5cGUgfSBmcm9tICcuL3JlbW92ZS1yZWxhdGlvbnMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgYXMgQ09SRV9SRURVQ0VSX0tFWSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSBhcyBTQ0hFTUFfUkVEVUNFUl9LRVkgfSBmcm9tICcuLi8uLi9zY2hlbWEvY29uc3RhbnRzJztcblxuY29uc3QgREVGQVVMVF9FTVBUWV9PQkpFQ1QgPSB7fTtcbmNvbnN0IERFRkFVTFRfRU1QVFlfQVJSQVkgPSBbXTtcblxuLyoqXG4gKiBBY3Rpb24gZ2VuZXJhdG9yIGZvciBwZXJzaXN0aW5nIGFueSBxdWV1ZWQgYWRkIHJlbGF0aW9ucyB0byB0aGUgc2VydmVyXG4gKiBzcGVjaWZpYyB0byB0aGUgZ2l2ZW4gbW9kZWwgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJldHVybnMgYW4gb2JqZWN0IGluZGV4ZWQgYnkgdGhlIG9yaWdpbmF0aW5nIGVudGl0eSBpZCBmb3JcbiAqIHRoZSByZXF1ZXN0ZWQgbW9kZWwgYW5kIHdpdGggdmFsdWVzIHRoYXQgYXJlIGFuIE9iamVjdCBpbmRleGVkIGJ5IHJlbGF0aW9uXG4gKiBuYW1lcyB3aXRoIHZhbHVlcyBvZiByZWxhdGlvbiBJZHMgcGVyc2lzdGVkLlxuICovXG5mdW5jdGlvbiogcGVyc2lzdEFkZFJlbGF0aW9uc0Zvck1vZGVsKCBtb2RlbE5hbWUgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdwZXJzaXN0UmVsYXRpb25zRm9yTW9kZWwnLFxuXHRcdG1vZGVsTmFtZVxuXHQpO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgZm9yIHBlcnNpc3RpbmcgYW55IHF1ZXVlZCBkZWxldGUgcmVsYXRpb25zIHRvIHRoZSBzZXJ2ZXJcbiAqIHNwZWNpZmljIHRvIHRoZSBnaXZlbiBtb2RlbCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge09iamVjdH0gcmV0dXJucyBhbiBvYmplY3QgaW5kZXhlZCBieSB0aGUgb3JpZ2luYXRpbmcgZW50aXR5IGlkIGZvclxuICogdGhlIHJlcXVlc3RlZCBtb2RlbCBhbmQgd2l0aCB2YWx1ZXMgdGhhdCBhcmUgYW4gT2JqZWN0IGluZGV4ZWQgYnkgcmVsYXRpb25cbiAqIG5hbWVzIHdpdGggdmFsdWVzIG9mIHJlbGF0aW9uIElkcyBwZXJzaXN0ZWQuXG4gKi9cbmZ1bmN0aW9uKiBwZXJzaXN0RGVsZXRlUmVsYXRpb25zRm9yTW9kZWwoIG1vZGVsTmFtZSApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZXR1cm4geWllbGQgcmVzb2x2ZURpc3BhdGNoKFxuXHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0J3BlcnNpc3RSZWxhdGlvbnNGb3JNb2RlbCcsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGZhbHNlXG5cdCk7XG59XG5cbi8qKlxuICogQWN0aW9uIGdlbmVyYXRvciBmb3IgcGVyc2lzdGluZyBhbnkgcXVldWVkIHJlbGF0aW9ucyB0byB0aGUgc2VydmVyIHNwZWNpZmljXG4gKiB0byB0aGUgZ2l2ZW4gbW9kZWwgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkZFJlbGF0aW9uICBXaGV0aGVyIHRoaXMgcGVyc2lzdCByZXF1ZXN0IGlzIGZvciBxdWV1ZWRcbiAqIHJlbGF0aW9ucyB0byBhZGQgZm9yIHRoZSBtb2RlbCBvciBxdWV1ZWQgcmVsYXRpb25zIHRvIGRlbGV0ZSBmb3IgdGhlIG1vZGVsLlxuICogQHJldHVybiB7T2JqZWN0fSByZXR1cm5zIGFuIG9iamVjdCBpbmRleGVkIGJ5IHRoZSBvcmlnaW5hdGluZyBlbnRpdHkgaWQgZm9yXG4gKiB0aGUgcmVxdWVzdGVkIG1vZGVsIGFuZCB3aXRoIHZhbHVlcyB0aGF0IGFyZSBhbiBPYmplY3QgaW5kZXhlZCBieSByZWxhdGlvblxuICogbmFtZXMgd2l0aCB2YWx1ZXMgb2YgcmVsYXRpb24gSWRzIHBlcnNpc3RlZC5cbiAqL1xuZnVuY3Rpb24qIHBlcnNpc3RSZWxhdGlvbnNGb3JNb2RlbCggbW9kZWxOYW1lLCBhZGRSZWxhdGlvbiA9IHRydWUgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0Y29uc3QgcmVsYXRpb25TdGF0ZSA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRSZWxhdGlvblN0YXRlJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0YWRkUmVsYXRpb25cblx0KTtcblx0aWYgKCBpc0VtcHR5KCByZWxhdGlvblN0YXRlICkgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfRU1QVFlfT0JKRUNUO1xuXHR9XG5cdGNvbnN0IGVudGl0eUlkcyA9IGtleXMoIHJlbGF0aW9uU3RhdGUgKTtcblx0Y29uc3QgcmVsYXRpb25zUGVyc2lzdGVkID0gZW50aXR5SWRzLmxlbmd0aCA+IDAgP1xuXHRcdHt9IDpcblx0XHRERUZBVUxUX0VNUFRZX09CSkVDVDtcblx0d2hpbGUgKCBlbnRpdHlJZHMubGVuZ3RoID4gMCApIHtcblx0XHRjb25zdCBlbnRpdHlJZCA9IGVudGl0eUlkcy5wb3AoKTtcblxuXHRcdGNvbnN0IHBlcnNpc3RlZFJlbGF0aW9ucyA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0XHQncGVyc2lzdFJlbGF0aW9uc0ZvckVudGl0eUlkJyxcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkLFxuXHRcdFx0YWRkUmVsYXRpb24sXG5cdFx0XHRyZWxhdGlvblN0YXRlXG5cdFx0KTtcblx0XHRpZiAoICEgaXNFbXB0eSggcGVyc2lzdGVkUmVsYXRpb25zICkgKSB7XG5cdFx0XHRyZWxhdGlvbnNQZXJzaXN0ZWRbIGVudGl0eUlkIF0gPSBwZXJzaXN0ZWRSZWxhdGlvbnM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZWxhdGlvbnNQZXJzaXN0ZWQ7XG59XG5cbi8qKlxuICogQWN0aW9uIGdlbmVyYXRvciBmb3IgcGVyc2lzdGluZyBhbnkgcXVldWVkIHJlbGF0aW9ucyB0byB0aGUgc2VydmVyIHNwZWNpZmljXG4gKiB0byB0aGUgZ2l2ZW4gZW50aXR5IGlkIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gbW9kZWwgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkUmVsYXRpb24gV2hldGhlciB0aGlzIHBlcnNpc3QgcmVxdWVzdCBpcyBmb3IgcXVldWVkXG4gKiByZWxhdGlvbnMgdG8gYWRkIGZvciB0aGUgbW9kZWwgb3IgcXVldWVkIHJlbGF0aW9ucyB0byBkZWxldGUgZm9yIHRoZSBtb2RlbC5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZWxhdGlvblN0YXRlIE9wdGlvbmFsLCBpZiB0aGUgY3VycmVudCByZWxhdGlvbiBzdGF0ZSBpcyBrbm93blxuICogaXQgY2FuIGJlIHBhc3NlZCBpbi4gIFR5cGljYWxseSBjbGllbnQgY29kZSB3b24ndCBrbm93IHRoaXMgc28gc2hvdWxkIG5vdCBiZVxuICogcGFzc2VkIGluLlxuICogQHJldHVybiB7T2JqZWN0fSBBbiBvYmplY3QgaW5kZXhlZCBieSByZWxhdGlvbiBuYW1lcyB3aXRoIHRoZSB2YWx1ZXMgYW4gYXJyYXlcbiAqIG9mIHJlbGF0aW9uIGlkcyBmb3IgZWFjaCByZWxhdGlvbiB0aGF0IHdlcmUgcGVyc2lzdGVkLlxuICovXG5mdW5jdGlvbiogcGVyc2lzdFJlbGF0aW9uc0ZvckVudGl0eUlkKFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuXHRhZGRSZWxhdGlvbiA9IHRydWUsXG5cdHJlbGF0aW9uU3RhdGUgPSBERUZBVUxUX0VNUFRZX09CSkVDVFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25TdGF0ZSA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRSZWxhdGlvblN0YXRlJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0YWRkUmVsYXRpb24sXG5cdFx0cmVsYXRpb25TdGF0ZVxuXHQpO1xuXHRpZiAoIGlzRW1wdHkoIHJlbGF0aW9uU3RhdGUgKSApIHtcblx0XHRyZXR1cm4gREVGQVVMVF9FTVBUWV9PQkpFQ1Q7XG5cdH1cblx0Y29uc3QgcmVsYXRpb25OYW1lcyA9IHJlbGF0aW9uU3RhdGVbIGVudGl0eUlkIF0gP1xuXHRcdGtleXMoIHJlbGF0aW9uU3RhdGVbIGVudGl0eUlkIF0gKSA6XG5cdFx0REVGQVVMVF9FTVBUWV9BUlJBWTtcblx0aWYgKCBpc0VtcHR5KCByZWxhdGlvbk5hbWVzICkgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfRU1QVFlfT0JKRUNUO1xuXHR9XG5cdGNvbnN0IHBlcnNpc3RlZFJlbGF0aW9ucyA9IHt9O1xuXHR3aGlsZSAoIHJlbGF0aW9uTmFtZXMubGVuZ3RoID4gMCApIHtcblx0XHRjb25zdCByZWxhdGlvbk5hbWUgPSByZWxhdGlvbk5hbWVzLnBvcCgpO1xuXHRcdGNvbnN0IHBlcnNpc3RlZFJlbGF0aW9uSWRzID1cblx0XHRcdHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRcdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHRcdFx0J3BlcnNpc3RSZWxhdGlvbnNGb3JFbnRpdHlJZEFuZFJlbGF0aW9uJyxcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRlbnRpdHlJZCxcblx0XHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdFx0XHRhZGRSZWxhdGlvbixcblx0XHRcdFx0cmVsYXRpb25TdGF0ZVxuXHRcdFx0KTtcblx0XHRpZiAoIHBlcnNpc3RlZFJlbGF0aW9uSWRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRwZXJzaXN0ZWRSZWxhdGlvbnNbIHJlbGF0aW9uTmFtZSBdID0gcGVyc2lzdGVkUmVsYXRpb25JZHM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwZXJzaXN0ZWRSZWxhdGlvbnM7XG59XG5cbi8qKlxuICogQWN0aW9uIGdlbmVyYXRvciBmb3IgcGVyc2lzdGluZyBhbnkgcXVldWVkIHJlbGF0aW9ucyB0byB0aGUgc2VydmVyIHNwZWNpZmljXG4gKiB0byB0aGUgZ2l2ZW4gZW50aXR5IGlkIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gbW9kZWwgbmFtZSBhbmQgZm9yIHRoZSBnaXZlblxuICogcmVsYXRpb24gdG8gdGhhdCBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkUmVsYXRpb24gV2hldGhlciB0aGlzIHBlcnNpc3QgcmVxdWVzdCBpcyBmb3IgcXVldWVkXG4gKiByZWxhdGlvbnMgdG8gYWRkIGZvciB0aGUgbW9kZWwgb3IgcXVldWVkIHJlbGF0aW9ucyB0byBkZWxldGUgZm9yIHRoZSBtb2RlbC5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZWxhdGlvblN0YXRlIE9wdGlvbmFsLCBpZiB0aGUgY3VycmVudCByZWxhdGlvbiBzdGF0ZSBpcyBrbm93blxuICogaXQgY2FuIGJlIHBhc3NlZCBpbi4gIFR5cGljYWxseSBjbGllbnQgY29kZSB3b24ndCBrbm93IHRoaXMgc28gc2hvdWxkIG5vdCBiZVxuICogcGFzc2VkIGluLlxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHJlbGF0aW9uIGlkcyBwZXJzaXN0ZWQgZm9yIHRoYXQgcmVsYXRpb24uXG4gKi9cbmZ1bmN0aW9uKiBwZXJzaXN0UmVsYXRpb25zRm9yRW50aXR5SWRBbmRSZWxhdGlvbihcblx0bW9kZWxOYW1lLFxuXHRlbnRpdHlJZCxcblx0cmVsYXRpb25OYW1lLFxuXHRhZGRSZWxhdGlvbiA9IHRydWUsXG5cdHJlbGF0aW9uU3RhdGUgPSBERUZBVUxUX0VNUFRZX09CSkVDVFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRyZWxhdGlvblN0YXRlID0geWllbGQgcmVzb2x2ZURpc3BhdGNoKFxuXHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0aW9uU3RhdGUnLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRhZGRSZWxhdGlvbixcblx0XHRyZWxhdGlvblN0YXRlXG5cdCk7XG5cdGlmICggaXNFbXB0eSggcmVsYXRpb25TdGF0ZSApICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHR9XG5cdGNvbnN0IHJlbGF0aW9uRW50aXR5SWRzID0gcmVsYXRpb25TdGF0ZVsgZW50aXR5SWQgXSAmJlxuXHRyZWxhdGlvblN0YXRlWyBlbnRpdHlJZCBdWyByZWxhdGlvbk5hbWUgXSA/XG5cdFx0WyAuLi5yZWxhdGlvblN0YXRlWyBlbnRpdHlJZCBdWyByZWxhdGlvbk5hbWUgXSBdIDpcblx0XHRERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHRpZiAoIHJlbGF0aW9uRW50aXR5SWRzLmxlbmd0aCA8IDEgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfRU1QVFlfQVJSQVk7XG5cdH1cblx0Y29uc3QgcGVyc2lzdGVkUmVsYXRpb25JZHMgPSBbXTtcblx0d2hpbGUgKCByZWxhdGlvbkVudGl0eUlkcy5sZW5ndGggPiAwICkge1xuXHRcdGNvbnN0IHBlcnNpc3RlZFJlbGF0aW9uSWQgPVxuXHRcdFx0eWllbGQgcmVzb2x2ZURpc3BhdGNoKFxuXHRcdFx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdFx0XHQncGVyc2lzdFJlbGF0aW9uc0ZvckVudGl0eUlkQW5kUmVsYXRpb25JZCcsXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0ZW50aXR5SWQsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25FbnRpdHlJZHMucG9wKCksXG5cdFx0XHRcdGFkZFJlbGF0aW9uLFxuXHRcdFx0XHRyZWxhdGlvblN0YXRlXG5cdFx0XHQpO1xuXHRcdGlmICggcGVyc2lzdGVkUmVsYXRpb25JZCApIHtcblx0XHRcdHBlcnNpc3RlZFJlbGF0aW9uSWRzLnB1c2goIHBlcnNpc3RlZFJlbGF0aW9uSWQgKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHBlcnNpc3RlZFJlbGF0aW9uSWRzO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgZm9yIHBlcnNpc3RpbmcgYW55IHF1ZXVlZCByZWxhdGlvbnMgdG8gdGhlIHNlcnZlciBzcGVjaWZpY1xuICogdG8gdGhlIGdpdmVuIGVudGl0eSBpZCBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG1vZGVsIG5hbWUsIGZvciB0aGUgZ2l2ZW5cbiAqIHJlbGF0aW9uIHRvIHRoYXQgbW9kZWwgYW5kIHRoZSBnaXZlbiByZWxhdGlvbiBpZCBmb3IgdGhhdCByZWxhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWxhdGlvbklkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkZFJlbGF0aW9uIFdoZXRoZXIgdGhpcyBwZXJzaXN0IHJlcXVlc3QgaXMgZm9yIHF1ZXVlZFxuICogcmVsYXRpb25zIHRvIGFkZCBmb3IgdGhlIG1vZGVsIG9yIHF1ZXVlZCByZWxhdGlvbnMgdG8gZGVsZXRlIGZvciB0aGUgbW9kZWwuXG4gKiBAcGFyYW0ge09iamVjdH0gcmVsYXRpb25TdGF0ZSBPcHRpb25hbCwgaWYgdGhlIGN1cnJlbnQgcmVsYXRpb24gc3RhdGUgaXMga25vd25cbiAqIGl0IGNhbiBiZSBwYXNzZWQgaW4uICBUeXBpY2FsbHkgY2xpZW50IGNvZGUgd29uJ3Qga25vdyB0aGlzIHNvIHNob3VsZCBub3QgYmVcbiAqIHBhc3NlZCBpbi5cbiAqIEByZXR1cm4ge251bWJlcn0gSWYgMCBpcyByZXR1cm5lZCB0aGVuIHRoZSBlbnRpdHkgd2FzIG5vdCBwZXJzaXN0ZWQsXG4gKiBvdGhlcndpc2UgdGhlIHZhbHVlIHJldHVybmVkIHdpbGwgYmUgdGhlIGlkIHBlcnNpc3RlZC5cbiAqL1xuZnVuY3Rpb24qIHBlcnNpc3RSZWxhdGlvbnNGb3JFbnRpdHlJZEFuZFJlbGF0aW9uSWQoXG5cdG1vZGVsTmFtZSxcblx0ZW50aXR5SWQsXG5cdHJlbGF0aW9uTmFtZSxcblx0cmVsYXRpb25JZCxcblx0YWRkUmVsYXRpb24gPSB0cnVlLFxuXHRyZWxhdGlvblN0YXRlID0gREVGQVVMVF9FTVBUWV9PQkpFQ1Rcbikge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0cmVsYXRpb25TdGF0ZSA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRSZWxhdGlvblN0YXRlJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0YWRkUmVsYXRpb24sXG5cdFx0cmVsYXRpb25TdGF0ZVxuXHQpO1xuXHRsZXQgZW50aXR5SWRDaGFuZ2VkID0gZmFsc2U7XG5cdGlmICggaXNFbXB0eSggcmVsYXRpb25TdGF0ZSApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cdC8vIGlzIHRoZSBlbnRpdHlJZCBhIGN1aWQ/ICBJZiBzbywgdGhlbiBsZXQncyBwZXJzaXN0LlxuXHRpZiAoIGN1aWQuaXNDdWlkKCBlbnRpdHlJZCApICkge1xuXHRcdGVudGl0eUlkID0geWllbGQgcmVzb2x2ZURpc3BhdGNoKFxuXHRcdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHRcdCdwZXJzaXN0TmV3RW50aXR5QW5kUmVtb3ZlRGlydHlSZWxhdGlvbnMnLFxuXHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdFx0cmVsYXRpb25JZCxcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkLFxuXHRcdFx0YWRkUmVsYXRpb24sXG5cdFx0XHRbIG1vZGVsTmFtZSwgZW50aXR5SWQgXSxcblx0XHQpO1xuXHRcdC8vIGlmIGVudGl0eUlkIGlzIDAgYmFpbCBiZWNhdXNlIGl0IGRpZG4ndCBnZXQgcGVyc2lzdGVkIHNvIHJlbGF0aW9uc1xuXHRcdC8vIGNhbid0IGJlIHBlcnNpc3RlZCBlaXRoZXIuXG5cdFx0aWYgKCBlbnRpdHlJZCA9PT0gMCApIHtcblx0XHRcdHJldHVybiBlbnRpdHlJZDtcblx0XHR9XG5cdFx0ZW50aXR5SWRDaGFuZ2VkID0gdHJ1ZTtcblx0fVxuXG5cdC8vIGlzIHRoZSByZWxhdGlvbklkIGEgY3VpZD8gSWYgc28sIHRoZW4gbGV0J3MgcGVyc2lzdFxuXHRpZiAoIGN1aWQuaXNDdWlkKCByZWxhdGlvbklkICkgKSB7XG5cdFx0cmVsYXRpb25JZCA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0XHQncGVyc2lzdE5ld0VudGl0eUFuZFJlbW92ZURpcnR5UmVsYXRpb25zJyxcblx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdHJlbGF0aW9uSWQsXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRlbnRpdHlJZCxcblx0XHRcdGFkZFJlbGF0aW9uLFxuXHRcdFx0WyByZWxhdGlvbk5hbWUsIHJlbGF0aW9uSWQgXSxcblx0XHRcdCEgZW50aXR5SWRDaGFuZ2VkLFxuXHRcdCk7XG5cdFx0Ly8gaWYgcmVsYXRpb25JZCBpcyAwLCBiYWlsIGJlY2F1c2UgaXQgZGlkbid0IGdldCBwZXJzaXN0ZWQgc28gcmVsYXRpb25zXG5cdFx0Ly8gY2FuJ3QgYmUgcGVyc2lzdGVkIGVpdGhlci5cblx0XHRpZiAoIHJlbGF0aW9uSWQgPT09IDAgKSB7XG5cdFx0XHRyZXR1cm4gcmVsYXRpb25JZDtcblx0XHR9XG5cdH1cblx0Y29uc3QgZW5kcG9pbnQgPSB5aWVsZCByZXNvbHZlU2VsZWN0KFxuXHRcdFNDSEVNQV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0UmVsYXRpb25FbmRwb2ludEZvckVudGl0eUlkJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHQpO1xuXHRjb25zdCBzdWNjZXNzID0gZW5kcG9pbnQgP1xuXHRcdHlpZWxkIGZldGNoKFxuXHRcdFx0e1xuXHRcdFx0XHRwYXRoOiBlbmRwb2ludCArICcvJyArIHJlbGF0aW9uSWQsXG5cdFx0XHRcdG1ldGhvZDogYWRkUmVsYXRpb24gPyAnUFVUJyA6ICdERUxFVEUnLFxuXHRcdFx0fVxuXHRcdCkgOlxuXHRcdGZhbHNlO1xuXHRpZiAoIHN1Y2Nlc3MgKSB7XG5cdFx0Ly8gRXZlbiB3aGVuIGlkcyBoYXZlIGNoYW5nZWQsIHRoaXMgc2hvdWxkIGNhdGNoIGFueSBwb3RlbnRpYWwgcXVldWVkXG5cdFx0Ly8gcmVsYXRpb24gaXRlbXMgZm9yIHRob3NlIHRoaW5ncyB0aGF0IGdvdCB1cGRhdGVkIGluIHN0YXRlIGluIGEgcHJpb3Jcblx0XHQvLyBkaXNwYXRjaFxuXHRcdHlpZWxkIHJlbW92ZURpcnR5UmVsYXRpb25Gb3JUeXBlKFxuXHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdFx0cmVsYXRpb25JZCxcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkLFxuXHRcdFx0YWRkUmVsYXRpb25cblx0XHQpO1xuXHRcdHJldHVybiByZWxhdGlvbklkO1xuXHR9XG5cdHJldHVybiAwO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgZm9yIGhhbmRsaW5nIHBlcnNpc3RpbmcgYSBuZXcgZW50aXR5IGV4aXN0aW5nIGluIHRoZVxuICogcmVsYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IHJlbGF0aW9uSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHBhcmFtIHtib29sZWFufSBhZGRSZWxhdGlvblxuICogQHBhcmFtIHtBcnJheX0gcGVyc2lzdGluZ0FyZ3VtZW50c1xuICogQHBhcmFtIHtib29sZWFufSBkb1JlbGF0aW9uUmVtb3ZhbFxuICogQHJldHVybiB7bnVtYmVyfSBFaXRoZXIgdGhlIG5ldyBpZCBvciAwIGlmIHRoZSBlbnRpdHkgd2FzIG5vdCBzdWNjZXNzZnVsbHlcbiAqIHBlcnNpc3RlZC5cbiAqL1xuZnVuY3Rpb24qIHBlcnNpc3ROZXdFbnRpdHlBbmRSZW1vdmVEaXJ0eVJlbGF0aW9ucyhcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvbklkLFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuXHRhZGRSZWxhdGlvbixcblx0cGVyc2lzdGluZ0FyZ3VtZW50cyxcblx0ZG9SZWxhdGlvblJlbW92YWwgPSB0cnVlLFxuKSB7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBwZXJzaXN0ZWRFbnRpdHkgPSB5aWVsZCByZXNvbHZlRGlzcGF0Y2goXG5cdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHQncGVyc2lzdEZvckVudGl0eUlkJyxcblx0XHQuLi5wZXJzaXN0aW5nQXJndW1lbnRzLFxuXHQpO1xuXHQvLyBpZiBub3QgZGlzcGF0Y2hlZCBzdWNjZXNzZnVsbHkgdGhlbiBsZXQncyBiYWlsIGJlY2F1c2UgcmVsYXRpb24gY2FuJ3Rcblx0Ly8gYmUgcGVyc2lzdGVkXG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggcGVyc2lzdGVkRW50aXR5LCBwZXJzaXN0aW5nQXJndW1lbnRzWyAwIF0gKSApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXHRpZiAoIGRvUmVsYXRpb25SZW1vdmFsICkge1xuXHRcdC8vIGVuc3VyZSBvbGRJZCBpcyByZW1vdmVkIGZyb20gaXRlbXMgKHRoaXMgaXMgYSBmYWlsc2FmZSBpbiBjYXNlIHRoZVxuXHRcdC8vIGlkIHN3YXAgaW4gcmVsYXRpb24gc3RhdGUgaXNuJ3QgY29tcGxldGUgeWV0KS5cblx0XHR5aWVsZCByZW1vdmVEaXJ0eVJlbGF0aW9uRm9yVHlwZShcblx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdHJlbGF0aW9uSWQsXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRlbnRpdHlJZCxcblx0XHRcdGFkZFJlbGF0aW9uXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gcGVyc2lzdGVkRW50aXR5LmlkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRvciBmb3IgcmV0dXJuaW5nIHJlbGF0aW9uIHN0YXRlIGZvciB0aGUgZ2l2ZW4gbW9kZWwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtib29sZWFufSBhZGRSZWxhdGlvbiAgV2hldGhlciB0byByZXR1cm4gdGhlIHJlbGF0aW9uIHN0YXRlIGZvciByZWxhdGlvbnNcbiAqIHF1ZXVlZCBmb3IgYWRkaW5nICh0cnVlKSBvciBkZWxldGlvbiAoZmFsc2UpLlxuICogQHBhcmFtIHtPYmplY3R9IHJlbGF0aW9uU3RhdGUgIE9wdGlvbmFsbHksIGNhbGxlcnMgY2FuIHByb3ZpZGUgYSByZWxhdGlvblxuICogcmVsYXRpb24gc3RhdGUgYW5kIGlmIHByb3ZpZGVkIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHNlbGVjdGluZyBmcm9tIHRoZVxuICogc3RvcmUuXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSAgVGhlIHJlbGF0aW9uIHN0YXRlIGZvciB0aGUgZ2l2ZW4gbW9kZWwuXG4gKi9cbmZ1bmN0aW9uKiBnZXRSZWxhdGlvblN0YXRlKFxuXHRtb2RlbE5hbWUsXG5cdGFkZFJlbGF0aW9uID0gdHJ1ZSxcblx0cmVsYXRpb25TdGF0ZSA9IERFRkFVTFRfRU1QVFlfT0JKRUNUXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBzZWxlY3RvciA9IGFkZFJlbGF0aW9uID9cblx0XHQnZ2V0UmVsYXRpb25BZGRpdGlvbnNRdWV1ZWRGb3JNb2RlbCcgOlxuXHRcdCdnZXRSZWxhdGlvbkRlbGV0aW9uc1F1ZXVlZEZvck1vZGVsJztcblx0cmVsYXRpb25TdGF0ZSA9IGlzRW1wdHkoIHJlbGF0aW9uU3RhdGUgKSA/XG5cdFx0eWllbGQgc2VsZWN0KFxuXHRcdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdCkgOlxuXHRcdHJlbGF0aW9uU3RhdGU7XG5cdHJldHVybiByZWxhdGlvblN0YXRlO1xufVxuXG5leHBvcnQge1xuXHRwZXJzaXN0QWRkUmVsYXRpb25zRm9yTW9kZWwsXG5cdHBlcnNpc3REZWxldGVSZWxhdGlvbnNGb3JNb2RlbCxcblx0cGVyc2lzdFJlbGF0aW9uc0Zvck1vZGVsLFxuXHRwZXJzaXN0UmVsYXRpb25zRm9yRW50aXR5SWQsXG5cdHBlcnNpc3RSZWxhdGlvbnNGb3JFbnRpdHlJZEFuZFJlbGF0aW9uLFxuXHRwZXJzaXN0UmVsYXRpb25zRm9yRW50aXR5SWRBbmRSZWxhdGlvbklkLFxuXHRwZXJzaXN0TmV3RW50aXR5QW5kUmVtb3ZlRGlydHlSZWxhdGlvbnMsXG5cdGdldFJlbGF0aW9uU3RhdGUsXG59O1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEFDVElPTl9UWVBFUyB9IGZyb20gJy4vYWN0aW9uLXR5cGVzJztcbmNvbnN0IHsgZW50aXRpZXM6IHR5cGVzIH0gPSBBQ1RJT05fVFlQRVM7XG5cbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBzaW5ndWxhck1vZGVsTmFtZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcblxuLyoqXG4gKiBBY3Rpb24gZm9yIHJlY2VpdmluZyBlbnRpdHkgcmVjb3Jkcy5cbiAqIEVudGl0eSByZWNvcmRzIHJlY2VpdmVkIHdpbGwgTk9UIHJlcGxhY2UgYW55IGV4aXN0aW5nIGVudGl0aWVzIGluIHRoZSBzdGF0ZVxuICogKG1hdGNoaW5nIGlkcykuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSBleHBlY3RlZCB0byBiZSBhbiBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtBcnJheTxCYXNlRW50aXR5Pn0gZW50aXRpZXMgQXJyYXkgb2YgbW9kZWwgZW50aXR5XG4gKiBpbnN0YW5jZXMgaW5kZXhlZCBieSB0aGUgcHJpbWFyeSBrZXkuXG4gKiBAcmV0dXJuIHtcbiAqIHtcbiAqIFx0dHlwZTogc3RyaW5nLFxuICogXHRtb2RlbE5hbWU6IHN0cmluZyxcbiAqIFx0ZW50aXRpZXM6IEFycmF5PEJhc2VFbnRpdHk+XG4gKiBcdH1cbiAqIH0gIEFuIGFjdGlvbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVFbnRpdHlSZWNvcmRzKCBtb2RlbE5hbWUsIGVudGl0aWVzID0gW10gKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX0VOVElUWV9SRUNPUkRTLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdGllcyxcblx0fTtcbn1cblxuLyoqXG4gKiBTYW1lIGFzIHJlY2VpdmVFbnRpdHlSZWNvcmRzIGV4Y2VwdCBpbmNvbWluZyBlbnRpdGllcyB3aWxsIHJlcGxhY2UgYW55XG4gKiBtYXRjaGluZyByZWNvcmRzIChieSBJRCkgIGluIHRoZSBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IGVudGl0aWVzXG4gKiBAcmV0dXJuIHtcbiAqIHtcbiAqIFx0dHlwZTogc3RyaW5nLFxuICogXHRtb2RlbE5hbWU6IHN0cmluZyxcbiAqIFx0ZW50aXRpZXM6IEFycmF5PEJhc2VFbnRpdHk+XG4gKiBcdH1cbiAqIH0gIEFuIGFjdGlvbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVBbmRSZXBsYWNlRW50aXR5UmVjb3JkcyggbW9kZWxOYW1lLCBlbnRpdGllcyA9IFtdICkge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogdHlwZXMuUkVDRUlWRV9BTkRfUkVQTEFDRV9FTlRJVFlfUkVDT1JEUyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXRpZXMsXG5cdH07XG59XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIGFkZGluZyBhbiBlbnRpdHkgdG8gdGhlIHN0YXRlIChhcyBvcHBvc2VkIHRvIGFuIGVudGl0eVxuICogcmVjb3JkKVxuICpcbiAqIEBwYXJhbSB7QmFzZUVudGl0eX0gZW50aXR5XG4gKiBAcmV0dXJuIHt7dHlwZTogc3RyaW5nLCBlbnRpdHk6IEJhc2VFbnRpdHl9fSBBbiBhY3Rpb25cbiAqIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gcmVjZWl2ZUVudGl0eSggZW50aXR5ICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfRU5USVRZLFxuXHRcdGVudGl0eSxcblx0fTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gY3JlYXRvciBmb3IgcXVldWluZyBhbiBlbnRpdHkgaWQgZm9yIHRyYXNoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHJldHVybiB7e3R5cGU6IHN0cmluZywgbW9kZWxOYW1lOiBzdHJpbmcsIGVudGl0eUlkOiBudW1iZXJ9fSBBbiBhY3Rpb25cbiAqIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gcmVjZWl2ZVRyYXNoRW50aXR5SWQoIG1vZGVsTmFtZSwgZW50aXR5SWQgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX1RSQVNIX0VOVElUWV9JRCxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdH07XG59XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHF1ZXVlaW5nIGFuIGVudGl0eSBpZCBmb3IgaGFyZCBkZWxldGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHt7dHlwZTogc3RyaW5nLCBtb2RlbE5hbWU6IHN0cmluZywgZW50aXR5SWQ6IG51bWJlcn19IEFuIGFjdGlvblxuICogb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZWNlaXZlRGVsZXRlRW50aXR5SWQoIG1vZGVsTmFtZSwgZW50aXR5SWQgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX0RFTEVURV9FTlRJVFlfSUQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHR9O1xufVxuXG5leHBvcnQge1xuXHRyZWNlaXZlRW50aXR5UmVjb3Jkcyxcblx0cmVjZWl2ZUFuZFJlcGxhY2VFbnRpdHlSZWNvcmRzLFxuXHRyZWNlaXZlRW50aXR5LFxuXHRyZWNlaXZlRGVsZXRlRW50aXR5SWQsXG5cdHJlY2VpdmVUcmFzaEVudGl0eUlkLFxufTtcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRUWVBFX1FVRVVFX1JFTEFUSU9OX0FERCxcblx0VFlQRV9RVUVVRV9SRUxBVElPTl9ERUxFVEUsXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBQ1RJT05fVFlQRVMgfSBmcm9tICcuL2FjdGlvbi10eXBlcyc7XG5jb25zdCB7IHJlbGF0aW9uczogdHlwZXMgfSA9IEFDVElPTl9UWVBFUztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEFjdGlvbiBjcmVhdG9yIGZvciBhZGRpbmcgcmVsYXRpb24gaW5kZXhlcyBmb3IgZW50aXRpZXMgYW5kIHRoZWlyIHJlbGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IHJlbGF0ZWRFbnRpdHlJZHNcbiAqIEByZXR1cm4ge1xuICogXHR7XG4gKiBcdFx0dHlwZTogc3RyaW5nLFxuICogXHRcdG1vZGVsTmFtZTogc3RyaW5nLFxuICogXHRcdGVudGl0eUlkOiBudW1iZXIsXG4gKiBcdFx0cmVsYXRlZEVudGl0eUlkczogQXJyYXlcbiAqIFx0fVxuICogfSBBbiBhY3Rpb24gb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZWNlaXZlUmVsYXRlZEVudGl0aWVzKFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuXHRyZWxhdGlvbk5hbWUsXG5cdHJlbGF0ZWRFbnRpdHlJZHNcbikge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX1JFTEFURURfRU5USVRZX0lEUyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0ZWRFbnRpdHlJZHMsXG5cdH07XG59XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHF1ZXVpbmcgdGhlIGEgcmVsYXRpb24gY3JlYXRpb24gZm9yIHRoZSBnaXZlbiBkYXRhLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWxhdGlvbkVudGl0eUlkXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEByZXR1cm4ge1xuICogXHR7XG4gKiBcdFx0dHlwZTogc3RyaW5nLFxuICogXHRcdHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuICogXHRcdHJlbGF0aW9uRW50aXR5SWQ6IG51bWJlcixcbiAqIFx0XHRtb2RlbE5hbWU6IHN0cmluZyxcbiAqIFx0XHRlbnRpdHlJZDogbnVtYmVyLFxuICogXHRcdHF1ZXVlVHlwZTogc3RyaW5nXG4gKiBcdH1cbiAqIH1cbiAqIEFuIGFjdGlvbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24oXG5cdHJlbGF0aW9uTmFtZSxcblx0cmVsYXRpb25FbnRpdHlJZCxcblx0bW9kZWxOYW1lLFxuXHRlbnRpdHlJZCxcbikge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OLFxuXHRcdHJlbGF0aW9uTmFtZSxcblx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0XHRxdWV1ZVR5cGU6IFRZUEVfUVVFVUVfUkVMQVRJT05fQURELFxuXHR9O1xufVxuXG4vKipcbiAqIEFjdGlvbiBjcmVhdG9yIGZvciBxdWV1ZWluZyB0aGUgcmVsYXRpb24gZGVsZXRpb24gZm9yIHRoZSBnaXZlbiBkYXRhLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWxhdGlvbkVudGl0eUlkXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEByZXR1cm4ge1xuICogXHR7XG4gKiBcdFx0dHlwZTogc3RyaW5nLFxuICogXHRcdHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuICogXHRcdHJlbGF0aW9uRW50aXR5SWQ6IG51bWJlcixcbiAqIFx0XHRtb2RlbE5hbWU6IHN0cmluZyxcbiAqIFx0XHRlbnRpdHlJZDogbnVtYmVyLFxuICogXHRcdHF1ZXVlVHlwZTogc3RyaW5nXG4gKiBcdH1cbiAqIH0gQW4gYWN0aW9uIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gcmVjZWl2ZURpcnR5UmVsYXRpb25EZWxldGlvbihcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvbkVudGl0eUlkLFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfRElSVFlfUkVMQVRJT05fREVMRVRJT04sXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHRcdHF1ZXVlVHlwZTogVFlQRV9RVUVVRV9SRUxBVElPTl9ERUxFVEUsXG5cdH07XG59XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHRyaWdnZXJpbmcgdGhlIHJlcGxhY2VtZW50IG9mIGFueSBpbnN0YW5jZSBvZiB0aGUgb2xkXG4gKiBlbnRpdHkgaWQgaW4gdGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW4gbW9kZWwgd2l0aCB0aGUgbmV3IGVudGl0eSBpZC5cbiAqXG4gKiBUeXBpY2FsbHkgdGhpcyBpcyB0cmlnZ2VyZWQgYWZ0ZXIgcGVyc2lzdGluZyBhIG5ldyBlbnRpdHkgdG8gdGhlIHNlcnZlciBhbmRcbiAqIHJlY2VpdmluZyBpdHMgbmV3IGVudGl0eSBpZCBvbiByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gb2xkRW50aXR5SWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZXdFbnRpdHlJZFxuICogQHJldHVybiB7XG4gKiBcdHtcbiAqIFx0XHR0eXBlOiBzdHJpbmcsXG4gKiBcdFx0bW9kZWxOYW1lOiAqLFxuICogXHRcdG9sZEVudGl0eUlkOiAqLFxuICogXHRcdG5ld0VudGl0eUlkOiAqXG4gKiBcdH1cbiAqIH0gQW4gYWN0aW9uIG9iamVjdFxuICovXG5mdW5jdGlvbiByZWNlaXZlVXBkYXRlZEVudGl0eUlkRm9yUmVsYXRpb25zKFxuXHRtb2RlbE5hbWUsXG5cdG9sZEVudGl0eUlkLFxuXHRuZXdFbnRpdHlJZFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX1VQREFURURfRU5USVRZX0lEX0ZPUl9SRUxBVElPTlMsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdG9sZEVudGl0eUlkLFxuXHRcdG5ld0VudGl0eUlkLFxuXHR9O1xufVxuXG5leHBvcnQge1xuXHRyZWNlaXZlUmVsYXRlZEVudGl0aWVzLFxuXHRyZWNlaXZlRGlydHlSZWxhdGlvbkFkZGl0aW9uLFxuXHRyZWNlaXZlRGlydHlSZWxhdGlvbkRlbGV0aW9uLFxuXHRyZWNlaXZlVXBkYXRlZEVudGl0eUlkRm9yUmVsYXRpb25zLFxufTtcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBBQ1RJT05fVFlQRVMgfSBmcm9tICcuL2FjdGlvbi10eXBlcyc7XG5cbmNvbnN0IHsgZW50aXRpZXM6IHR5cGVzIH0gPSBBQ1RJT05fVFlQRVM7XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHJlbW92aW5nIHRoZSBlbnRpdHkgZnJvbSB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHt7dHlwZTogc3RyaW5nLCBtb2RlbE5hbWU6IHN0cmluZywgZW50aXR5SWQ6IG51bWJlcn19IEFuIGFjdGlvblxuICogb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW50aXR5QnlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApIHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRU1PVkVfRU5USVRZX0JZX0lELFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0fTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gY3JlYXRvciBmb3IgcXVldWVpbmcgdGhlIGRlbGV0aW9uIG9mIGVudGl0eSBvbiB0aGUgc2VydmVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHt7dHlwZTogc3RyaW5nLCBtb2RlbE5hbWU6IHN0cmluZywgZW50aXR5SWQ6IHtudW1iZXJ9fX0gQW4gYWN0aW9uXG4gKiBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURlbGV0ZUVudGl0eUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFTU9WRV9ERUxFVEVfRU5USVRZX0lELFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0fTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gY3JlYXRvciBmb3IgcXVldWluZyB0aGUgdHJhc2hpbmcgb2YgZW50aXR5IG9uIHRoZSBzZXJ2ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEByZXR1cm4ge3t0eXBlOiBzdHJpbmcsIG1vZGVsTmFtZTogc3RyaW5nLCBlbnRpdHlJZDogbnVtYmVyfX0gQW4gYWN0aW9uXG4gKiBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVUcmFzaEVudGl0eUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFTU9WRV9UUkFTSF9FTlRJVFlfSUQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHR9O1xufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0VFlQRV9RVUVVRV9SRUxBVElPTl9BREQsXG5cdFRZUEVfUVVFVUVfUkVMQVRJT05fREVMRVRFLFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQUNUSU9OX1RZUEVTIH0gZnJvbSAnLi9hY3Rpb24tdHlwZXMnO1xuY29uc3QgeyByZWxhdGlvbnM6IHR5cGVzIH0gPSBBQ1RJT05fVFlQRVM7XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHJlbW92aW5nIGFsbCBpbmRleGVkIHJlbGF0aW9ucyBmb3IgYSBzcGVjaWZpYyBlbnRpdHkgZnJvbVxuICogdGhlIHN0YXRlLlxuICpcbiAqIE5vdGU6IFRoZSBmb2xsb3dpbmcgdGhpbmdzIGFyZSBhY2NvbXBsaXNoZWQgYnkgdGhpcyBhY3Rpb24gKHZpYSB0aGUgcmVkdWNlcik6XG4gKiAtIFRoZSByZWxhdGlvbiBpbmRleCBmb3IgdGhlIHJlbGF0aW9uIG9uIHRoaXMgZW50aXR5IGlzIHJlbW92ZWQgZnJvbSBzdGF0ZS5cbiAqIC0gSWYgdGhlIHJlbGF0aW9uIGVudGl0aWVzIHRoZW1zZWx2ZXMgaGF2ZSBubyBvdGhlciByZWxhdGlvbiBpbmRleCwgdGhleVxuICogICBhcmUgYWxzbyByZW1vdmVkIGZyb20gc3RhdGUuXG4gKiAtIEFueSBkaXJ0eSByZWxhdGlvbnMgZm9yIHRoaXMgZW50aXR5IGFyZSByZW1vdmVkIGZyb20gc3RhdGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHt7dHlwZTogc3RyaW5nLCBtb2RlbE5hbWU6IHN0cmluZywgZW50aXR5SWQ6IG51bWJlcn19XG4gKiBBbiBhY3Rpb24gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFsbFJlbGF0ZWRFbnRpdGllc0Zvck1vZGVsRW50aXR5KCBtb2RlbE5hbWUsIGVudGl0eUlkICkge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogdHlwZXMuUkVNT1ZFX1JFTEFURURfRU5USVRJRVNfRk9SX0VOVElUWSxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdH07XG59XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHJlbW92aW5nIHJlbGF0aW9ucyBmcm9tIHRoZSBnaXZlbiBtb2RlbCBmcm9tIHRoZSByZWxhdGlvbnNcbiAqIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHBhcmFtIHtBcnJheX0gcmVsYXRlZEVudGl0eUlkc1xuICogQHJldHVybiB7XG4gKiBcdHtcbiAqIFx0XHR0eXBlOiBzdHJpbmcsXG4gKiBcdFx0bW9kZWxOYW1lOiBzdHJpbmcsXG4gKiBcdFx0ZW50aXR5SWQ6IG51bWJlcixcbiAqIFx0XHRyZWxhdGlvbk5hbWU6IHN0cmluZyxcbiAqIFx0XHRyZWxhdGlvbkVudGl0eUlkczogQXJyYXlcbiAqIFx0fVxuICogfSBBbiBhY3Rpb24gb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZW1vdmVSZWxhdGVkRW50aXRpZXMoXG5cdG1vZGVsTmFtZSxcblx0ZW50aXR5SWQsXG5cdHJlbGF0aW9uTmFtZSxcblx0cmVsYXRlZEVudGl0eUlkcyxcbikge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRU1PVkVfUkVMQVRFRF9FTlRJVFlfSURTLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0cmVsYXRlZEVudGl0eUlkcyxcblx0fTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gY3JlYXRvciBmb3IgcmVtb3ZpbmcgdGhlIGRpcnR5IHJlbGF0aW9uIGZyb20gdGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW5cbiAqIHJlbGF0aW9uIGFjdGlvbiB0eXBlIChkZWxldGUgb3IgYWRkKS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gcmVsYXRpb25FbnRpdHlJZFxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkZFJlbGF0aW9uXG4gKiBAcmV0dXJuIHtcbiAqIFx0e1xuICogXHRcdHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuICogXHRcdHJlbGF0aW9uRW50aXR5SWQ6IG51bWJlcixcbiAqIFx0XHRtb2RlbE5hbWU6IHN0cmluZyxcbiAqIFx0XHRlbnRpdHlJZDogbnVtYmVyLFxuICogXHRcdHR5cGU6IHN0cmluZyxcbiAqIFx0XHRxdWV1ZVR5cGU6IHN0cmluZ1xuICogXHR9XG4gKiB9IEFuIGFjdGlvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRGlydHlSZWxhdGlvbkZvclR5cGUoXG5cdHJlbGF0aW9uTmFtZSxcblx0cmVsYXRpb25FbnRpdHlJZCxcblx0bW9kZWxOYW1lLFxuXHRlbnRpdHlJZCxcblx0YWRkUmVsYXRpb24gPSB0cnVlXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IHR5cGUgPSBhZGRSZWxhdGlvbiA/IHR5cGVzLlJFTU9WRV9ESVJUWV9SRUxBVElPTl9BRERJVElPTiA6XG5cdFx0dHlwZXMuUkVNT1ZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OO1xuXHRyZXR1cm4ge1xuXHRcdHJlbGF0aW9uTmFtZSxcblx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0XHR0eXBlLFxuXHRcdHF1ZXVlVHlwZTogYWRkUmVsYXRpb24gP1xuXHRcdFx0VFlQRV9RVUVVRV9SRUxBVElPTl9BREQgOlxuXHRcdFx0VFlQRV9RVUVVRV9SRUxBVElPTl9ERUxFVEUsXG5cdH07XG59XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHJlbW92aW5nIHRoZSBkaXJ0eSByZWxhdGlvbiBmcm9tIHRoZSBhZGQgcmVsYXRpb24gc3RhdGVcbiAqIHJlY29yZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gcmVsYXRpb25FbnRpdHlJZFxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHtcbiAqIFx0e1xuICogXHRcdHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuICogXHRcdHJlbGF0aW9uRW50aXR5SWQ6IG51bWJlcixcbiAqIFx0XHRtb2RlbE5hbWU6IHN0cmluZyxcbiAqIFx0XHRlbnRpdHlJZDogbnVtYmVyLFxuICogXHRcdHR5cGU6IHN0cmluZyxcbiAqIFx0XHRxdWV1ZVR5cGU6IHN0cmluZ1xuICogXHR9XG4gKiB9IEFuIGFjdGlvbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZURpcnR5UmVsYXRpb25BZGRpdGlvbihcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvbkVudGl0eUlkLFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRyZXR1cm4gcmVtb3ZlRGlydHlSZWxhdGlvbkZvclR5cGUoXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHQpO1xufVxuXG4vKipcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIGZvciByZW1vdmluZyB0aGUgZGlydHkgcmVsYXRpb24gZnJvbSB0aGUgZGVsZXRlIHJlbGF0aW9uXG4gKiBzdGF0ZSByZWNvcmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IHJlbGF0aW9uRW50aXR5SWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHJldHVybiB7XG4gKiBcdHtcbiAqIFx0XHRyZWxhdGlvbk5hbWU6IHN0cmluZyxcbiAqIFx0XHRyZWxhdGlvbkVudGl0eUlkOiBudW1iZXIsXG4gKiBcdFx0bW9kZWxOYW1lOiBzdHJpbmcsXG4gKiBcdFx0ZW50aXR5SWQ6IG51bWJlcixcbiAqIFx0XHR0eXBlOiBzdHJpbmcsXG4gKiBcdFx0cXVldWVUeXBlOiBzdHJpbmdcbiAqIFx0fVxuICogfSBBbiBhY3Rpb24gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZURpcnR5UmVsYXRpb25EZWxldGlvbihcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvbkVudGl0eUlkLFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRyZXR1cm4gcmVtb3ZlRGlydHlSZWxhdGlvbkZvclR5cGUoXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHRcdGZhbHNlLFxuXHQpO1xufVxuXG5leHBvcnQge1xuXHRyZW1vdmVBbGxSZWxhdGVkRW50aXRpZXNGb3JNb2RlbEVudGl0eSxcblx0cmVtb3ZlUmVsYXRlZEVudGl0aWVzLFxuXHRyZW1vdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24sXG5cdHJlbW92ZURpcnR5UmVsYXRpb25EZWxldGlvbixcblx0cmVtb3ZlRGlydHlSZWxhdGlvbkZvclR5cGUsXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgc29tZSwga2V5cyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgc2VsZWN0IGFzIGRhdGFTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZGlzcGF0Y2gsIHNlbGVjdCB9IGZyb20gJy4uLy4uL2Jhc2UtY29udHJvbHMnO1xuaW1wb3J0IHsgQUNUSU9OX1RZUEVTIH0gZnJvbSAnLi9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0ICogYXMgbW9kZWxTcGVjaWZpY1NlbGVjdG9ycyBmcm9tICcuLi9tb2RlbC9tb2RlbC1zZWxlY3RvcnMtaW5kZXgnO1xuXG5jb25zdCB7IHJlc2V0czogdHlwZXMgfSA9IEFDVElPTl9UWVBFUztcblxuLyoqXG4gKiBSZXNldHMgdGhlIGVudGlyZSBzdGF0ZSB0byBpdHMgZGVmYXVsdCBmb3IgdGhlIHN0b3JlLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIHJlc2V0QWxsU3RhdGUoKSB7XG5cdC8vIGFjdGlvbiBmb3IgcmVzZXR0aW5nIHRoZSBlbnRpcmUgc3RhdGUuXG5cdHlpZWxkIHtcblx0XHR0eXBlOiB0eXBlcy5SRVNFVF9BTExfU1RBVEUsXG5cdH07XG5cblx0Ly8gZ2V0IHJlc29sdmVycyBmcm9tIGNvcmUvZGF0YSBhbmQgZGlzcGF0Y2ggaW52YWxpZGF0aW9uIG9mIGVhY2ggcmVzb2x2ZXIuXG5cdGNvbnN0IHJlc29sdmVycyA9IHlpZWxkIHNlbGVjdChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZ2V0Q2FjaGVkUmVzb2x2ZXJzJyxcblx0XHRSRURVQ0VSX0tFWVxuXHQpO1xuXG5cdGlmICggaW52YWxpZGF0ZUFjdGlvbnNBdmFpbGFibGUoKSApIHtcblx0XHR5aWVsZCBkaXNwYXRjaChcblx0XHRcdCdjb3JlL2RhdGEnLFxuXHRcdFx0J2ludmFsaWRhdGVSZXNvbHV0aW9uRm9yU3RvcmUnLFxuXHRcdFx0UkVEVUNFUl9LRVksXG5cdFx0KTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBkaXNwYXRjaCBpbnZhbGlkYXRpb24gb2YgdGhlIGNhY2hlZCByZXNvbHZlcnNcblx0Zm9yICggY29uc3Qgc2VsZWN0b3IgaW4gcmVzb2x2ZXJzICkge1xuXHRcdGZvciAoIGNvbnN0IGVudHJ5IG9mIHJlc29sdmVyc1sgc2VsZWN0b3IgXS5fbWFwICkge1xuXHRcdFx0eWllbGQgZGlzcGF0Y2goXG5cdFx0XHRcdCdjb3JlL2RhdGEnLFxuXHRcdFx0XHQnaW52YWxpZGF0ZVJlc29sdXRpb24nLFxuXHRcdFx0XHRSRURVQ0VSX0tFWSxcblx0XHRcdFx0c2VsZWN0b3IsXG5cdFx0XHRcdGVudHJ5WyAwIF1cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogUmVzZXRzIGFsbCBzdGF0ZSByZWxhdGVkIHRvIHRoZSBnaXZlbiBtb2RlbE5hbWVcbiAqXG4gKiBOb3RlOiBUaGlzIGRvZXMgbm90IHJlc2V0IGFueSBzdGF0ZSBpbiB0aGUgbW9kZWxTcGVjaWZpYyB0cmVlIGFzIHRoZXJlIGlzIG5vXG4gKiB3YXkgdG8ga25vdyB3aGF0IGFwcGxpZXMgdG8gdGhlIGN1cnJlbnQgbW9kZWwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24qIHJlc2V0U3RhdGVGb3JNb2RlbCggbW9kZWxOYW1lICkge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHlpZWxkIHtcblx0XHR0eXBlOiB0eXBlcy5SRVNFVF9TVEFURV9GT1JfTU9ERUwsXG5cdFx0bW9kZWxOYW1lLFxuXHR9O1xuXG5cdC8vIGdldCByZXNvbHZlcnMgZnJvbSBjb3JlL2RhdGFcblx0Y29uc3QgcmVzb2x2ZXJzID0geWllbGQgc2VsZWN0KFxuXHRcdCdjb3JlL2RhdGEnLFxuXHRcdCdnZXRDYWNoZWRSZXNvbHZlcnMnLFxuXHRcdFJFRFVDRVJfS0VZXG5cdCk7XG5cblx0Ly8gZGlzcGF0Y2ggaW52YWxpZGF0aW9uIG9mIHRoZSBjYWNoZWQgcmVzb2x2ZXJzIGZvciBhbnkgcmVzb2x2ZXIgdGhhdFxuXHQvLyBoYXMgYSB2YXJpYXRpb24gb2YgbW9kZWxOYW1lIGluIHRoZSBzZWxlY3RvciBuYW1lIG9yIGluIHRoZSBhcmdzIGZvciB0aGVcblx0Ly8gY2FjaGVkIHJlc29sdmVyLlxuXHRmb3IgKCBjb25zdCBzZWxlY3RvciBpbiByZXNvbHZlcnMgKSB7XG5cdFx0Zm9yICggY29uc3QgZW50cnkgb2YgcmVzb2x2ZXJzWyBzZWxlY3RvciBdLl9tYXAgKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChcblx0XHRcdFx0XHRtb2RlbE5hbWVJblNlbGVjdG9yKCBzZWxlY3RvciwgbW9kZWxOYW1lICkgfHxcblx0XHRcdFx0XHRtb2RlbE5hbWVJbkFyZ3MoIGVudHJ5WyAwIF0sIG1vZGVsTmFtZSApXG5cdFx0XHRcdCkgJiZcblx0XHRcdFx0ISBzZWxlY3RvcklzTW9kZWxTcGVjaWZpYyggc2VsZWN0b3IgKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFx0XHRcdCdjb3JlL2RhdGEnLFxuXHRcdFx0XHRcdCdpbnZhbGlkYXRlUmVzb2x1dGlvbicsXG5cdFx0XHRcdFx0UkVEVUNFUl9LRVksXG5cdFx0XHRcdFx0c2VsZWN0b3IsXG5cdFx0XHRcdFx0ZW50cnlbIDAgXSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGdpdmVuIG1vZGVsTmFtZSBpcyBmb3VuZCBpbiB0aGUgZ2l2ZW5cbiAqIHNlbGVjdG9yTmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyBpdCBpcyBwcmVzZW50LCBmYWxzZSBtZWFucyBpdCBpc24ndFxuICovXG5jb25zdCBtb2RlbE5hbWVJblNlbGVjdG9yID0gKCBzZWxlY3Rvck5hbWUsIG1vZGVsTmFtZSApID0+IHtcblx0Y29uc3Qgc2luZ3VsYXJOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRzZWxlY3Rvck5hbWUgPSBzZWxlY3Rvck5hbWUudG9Mb3dlckNhc2UoKTtcblx0cmV0dXJuIHNlbGVjdG9yTmFtZS5pbmRleE9mKCBzaW5ndWxhck5hbWUgKSA+IC0xO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGdpdmVuIG1vZGVsTmFtZSBpcyBmb3VuZCBpbiB0aGUgZ2l2ZW5cbiAqIHNldCBvZiBhcmdzLlxuICpcbiAqIFRoaXMgYWxzbyBjb25zaWRlcnMgaWYgYW55IG9mIHRoZSBhcmdzIGFyZSBhbiBpbnN0YW5jZSBvZiBCYXNlRW50aXR5IGFuZFxuICogaWYgdGhhdCBCYXNlRW50aXR5IGluc3RhbmNlIGlzIGZvciB0aGUgZ2l2ZW4gbW9kZWwuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJnc1xuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIGl0IGlzIHByZXNlbnQsIGZhbHNlIG1lYW5zIGl0IGlzbid0LlxuICovXG5jb25zdCBtb2RlbE5hbWVJbkFyZ3MgPSAoIGFyZ3MsIG1vZGVsTmFtZSApID0+IHtcblx0Y29uc3Qgc2luZ3VsYXJOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBoYXNNb2RlbE5hbWUgPSBhcmdzLmluZGV4T2YoIHNpbmd1bGFyTmFtZSApID4gLTE7XG5cdGlmICggaGFzTW9kZWxOYW1lICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gaXQncyBwb3NzaWJsZSBvbmUgb2YgdGhlIGFyZ3MgaXMgYW4gaW5zdGFuY2Ugb2YgQmFzZUVudGl0eS4gIElmIHNvLFxuXHQvLyB0aGVuIGxldCdzIGNvbXBhcmUgYWdhaW5zdCB0aGUgbW9kZWxOYW1lIG9uIHRoZSBlbnRpdHkgaW5zdGFuY2UuXG5cdHJldHVybiBzb21lKFxuXHRcdGFyZ3MsXG5cdFx0KCBhcmcgKSA9PiB7XG5cdFx0XHRyZXR1cm4gaXNNb2RlbEVudGl0eU9mTW9kZWwoIGFyZywgc2luZ3VsYXJOYW1lICk7XG5cdFx0fVxuXHQpO1xufTtcblxuLyoqXG4gKiBGb3IgdGhlIGdpdmVuIHNlbGVjdG9yIG5hbWUgYW5kIChvcHRpb25hbCkgc2VsZWN0b3JzVG9JbnZhbGlkYXRlLCB0aGlzXG4gKiByZXR1cm5zIHdoZXRoZXIgdGhlIHNlbGVjdG9yTmFtZSBpcyBhIG1hdGNoIGZvciB0aGUgc2VsZWN0b3JzIHRvIGludmFsaWRhdGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yTmFtZVxuICogQHBhcmFtIHtBcnJheXxudWxsP30gc2VsZWN0b3JzVG9JbnZhbGlkYXRlIElmIG51bGwsIHRoZW4gdGhlIG1hdGNoIGFycmF5IHdpbGxcbiAqIGJlIG9idGFpbmVkIGZyb20gdGhlIHJlZ2lzdGVyZWQgbW9kZWxTcGVjaWZpY1NlbGVjdG9ycyBpbXBvcnRlZCBmb3IgdGhlXG4gKiBtb2R1bGVcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIHRoZXJlIGlzIGEgbWF0Y2gsIGZhbHNlIG1lYW5zIHRoZXJlIGlzIG5vdC5cbiAqL1xuY29uc3Qgc2VsZWN0b3JJc01vZGVsU3BlY2lmaWMgPSAoXG5cdHNlbGVjdG9yTmFtZSxcblx0c2VsZWN0b3JzVG9JbnZhbGlkYXRlID0gbnVsbFxuKSA9PiB7XG5cdHNlbGVjdG9yc1RvSW52YWxpZGF0ZSA9IHNlbGVjdG9yc1RvSW52YWxpZGF0ZSA9PT0gbnVsbCA/XG5cdFx0a2V5cyggbW9kZWxTcGVjaWZpY1NlbGVjdG9ycyApIDpcblx0XHRzZWxlY3RvcnNUb0ludmFsaWRhdGU7XG5cdHJldHVybiBzZWxlY3RvcnNUb0ludmFsaWRhdGUuaW5kZXhPZiggc2VsZWN0b3JOYW1lICkgPiAtMTtcbn07XG5cbi8qKlxuICogUmVzZXRzIGFsbCBtb2RlbCBzcGVjaWZpYyBzdGF0ZSAob3B0aW9uYWxseSByZXN0cmljdGVkIHRvIHRoZSBnaXZlbiBzZWxlY3RvclxuICogbmFtZSBpZiBwcmVzZW50KS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lICBJZiBwcmVzZW50IHRoZW4gc3RhdGUgd2lsbCBvbmx5IGJlIHJlc2V0IGZvclxuICogdGhlIHNwZWNpZmljIHNlbGVjdG9yLiAgT3RoZXJ3aXNlIGFsbCBtb2RlbCBzcGVjaWZpYyBzdGF0ZSBpcyByZXNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiByZXNldEFsbE1vZGVsU3BlY2lmaWMoIHNlbGVjdG9yTmFtZSApIHtcblx0eWllbGQge1xuXHRcdHR5cGU6IHNlbGVjdG9yTmFtZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHR5cGVzLlJFU0VUX0FMTF9NT0RFTF9TUEVDSUZJQyA6XG5cdFx0XHR0eXBlcy5SRVNFVF9NT0RFTF9TUEVDSUZJQ19GT1JfU0VMRUNUT1IsXG5cdFx0c2VsZWN0b3I6IHNlbGVjdG9yTmFtZSxcblx0fTtcblxuXHQvLyBnZXQgcmVzb2x2ZXJzXG5cdGNvbnN0IHJlc29sdmVycyA9IHlpZWxkIHNlbGVjdChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZ2V0Q2FjaGVkUmVzb2x2ZXJzJyxcblx0XHRSRURVQ0VSX0tFWVxuXHQpO1xuXG5cdGNvbnN0IHNlbGVjdG9yc1RvSW52YWxpZGF0ZSA9IGtleXMoIG1vZGVsU3BlY2lmaWNTZWxlY3RvcnMgKTtcblxuXHQvLyBkaXNwYXRjaCBpbnZhbGlkYXRpb24gb2YgdGhlIGNhY2hlZCByZXNvbHZlcnMgZm9yIG1vZGVsIHNwZWNpZmljIHNlbGVjdG9yXG5cdGZvciAoIGNvbnN0IHNlbGVjdG9yIGluIHJlc29sdmVycyApIHtcblx0XHRpZiAoIHNlbGVjdG9yTmFtZSA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdG9yTmFtZSA9PT0gc2VsZWN0b3IgKSB7XG5cdFx0XHRmb3IgKCBjb25zdCBlbnRyeSBvZiByZXNvbHZlcnNbIHNlbGVjdG9yIF0uX21hcCApIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHNlbGVjdG9ySXNNb2RlbFNwZWNpZmljKCBzZWxlY3Rvciwgc2VsZWN0b3JzVG9JbnZhbGlkYXRlIClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0eWllbGQgZGlzcGF0Y2goXG5cdFx0XHRcdFx0XHQnY29yZS9kYXRhJyxcblx0XHRcdFx0XHRcdCdpbnZhbGlkYXRlUmVzb2x1dGlvbicsXG5cdFx0XHRcdFx0XHRSRURVQ0VSX0tFWSxcblx0XHRcdFx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0XHRcdFx0ZW50cnlbIDAgXSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogUmVzZXQgbW9kZWwgc3BlY2lmaWMgc3RhdGUgZm9yIHRoZSBnaXZlbiBzZWxlY3RvciBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3Rvck5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiByZXNldE1vZGVsU3BlY2lmaWNGb3JTZWxlY3Rvciggc2VsZWN0b3JOYW1lICkge1xuXHR5aWVsZCogcmVzZXRBbGxNb2RlbFNwZWNpZmljKCBzZWxlY3Rvck5hbWUgKTtcbn1cblxuLyoqXG4gKiBSZXNldHMgYWxsIHN0YXRlIGZvciBhIGdpdmVuIG1vZGVsIHNwZWNpZmljIHNlbGVjdG9yIGFuZCBpdHMgYXJnc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3Rvck5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiByZXNldE1vZGVsU3BlY2lmaWNGb3JTZWxlY3RvckFuZEFyZ3MoIHNlbGVjdG9yTmFtZSwgLi4uYXJncyApIHtcblx0eWllbGQge1xuXHRcdHR5cGU6IHR5cGVzLlJFU0VUX01PREVMX1NQRUNJRklDX0ZPUl9TRUxFQ1RPUl9BTkRfQVJHUyxcblx0XHRzZWxlY3Rvcjogc2VsZWN0b3JOYW1lLFxuXHRcdGFyZ3MsXG5cdH07XG5cblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0J2NvcmUvZGF0YScsXG5cdFx0J2ludmFsaWRhdGVSZXNvbHV0aW9uJyxcblx0XHRSRURVQ0VSX0tFWSxcblx0XHRzZWxlY3Rvck5hbWUsXG5cdFx0YXJncyxcblx0KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZm9yIGRldGVybWluaW5nIGlmIGFjdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgYGNvcmUvZGF0YWAgcGFja2FnZS5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBhZGRpdGlvbmFsIGludmFsaWRhdGlvbiBhY3Rpb25zIGF2YWlsYWJsZS5cbiAqL1xuY29uc3QgaW52YWxpZGF0ZUFjdGlvbnNBdmFpbGFibGUgPSAoKSA9PiB7XG5cdHJldHVybiBkYXRhU2VsZWN0KCAnY29yZS9kYXRhJyApLmludmFsaWRhdGVSZXNvbHV0aW9uRm9yU3RvcmUgIT09IHVuZGVmaW5lZDtcbn07XG4iLCJleHBvcnQgY29uc3QgUkVEVUNFUl9LRVkgPSAnZXZlbnRlc3ByZXNzby9jb3JlJztcbmV4cG9ydCBjb25zdCBUWVBFX1FVRVVFX1JFTEFUSU9OX0RFTEVURSA9ICdkZWxldGUnO1xuZXhwb3J0IGNvbnN0IFRZUEVfUVVFVUVfUkVMQVRJT05fQUREID0gJ2FkZCc7XG4iLCIvKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgcmVnaXN0ZXJTdG9yZSB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCByZWR1Y2VyIGZyb20gJy4vcmVkdWNlcnMnO1xuaW1wb3J0ICogYXMgc2VsZWN0b3JzIGZyb20gJy4vc2VsZWN0b3JzJztcbmltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCAqIGFzIHJlc29sdmVycyBmcm9tICcuL3Jlc29sdmVycyc7XG5pbXBvcnQge1xuXHRzZWxlY3RvcnMgYXMgbW9kZWxTZWxlY3RvcnMsXG5cdGFjdGlvbnMgYXMgbW9kZWxBY3Rpb25zLFxuXHRyZXNvbHZlcnMgYXMgbW9kZWxSZXNvbHZlcnMsXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgY29udHJvbHMgZnJvbSAnLi4vYmFzZS1jb250cm9scyc7XG5cbi8qKlxuICogUmVnaXN0ZXJzIHN0b3JlIGZvciAnZXZlbnRlc3ByZXNzby9jb3JlJy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmVnaXN0ZXJTdG9yZSggUkVEVUNFUl9LRVksIHtcblx0cmVkdWNlcixcblx0YWN0aW9uczogeyAuLi5hY3Rpb25zLCAuLi5tb2RlbEFjdGlvbnMgfSxcblx0c2VsZWN0b3JzOiB7IC4uLnNlbGVjdG9ycywgLi4ubW9kZWxTZWxlY3RvcnMgfSxcblx0cmVzb2x2ZXJzOiB7IC4uLnJlc29sdmVycywgLi4ubW9kZWxSZXNvbHZlcnMgfSxcblx0Y29udHJvbHMsXG59ICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0aXNNb2RlbEVudGl0eU9mTW9kZWwsXG5cdGlzTW9kZWxFbnRpdHlGYWN0b3J5T2ZNb2RlbCxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBJbnZhbGlkTW9kZWxFbnRpdHkgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IGdldEVuZHBvaW50IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZGlzcGF0Y2gsIGZldGNoLCByZXNvbHZlU2VsZWN0IH0gZnJvbSAnLi4vLi4vLi4vYmFzZS1jb250cm9scyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSBhcyBTQ0hFTUFfUkVEVUNFUl9LRVkgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvY29uc3RhbnRzJztcblxuLyoqXG4gKiBBY3Rpb24gZm9yIHJlY2VpdmluZyB0aGUgbGF0ZXN0IGNoZWNrLWluIHJlY29yZCBmb3IgdGhlIGdpdmVuIGRhdGV0aW1lIGlkIGFuZFxuICogcmVnaXN0cmF0aW9uIGlkLlxuICpcbiAqIEBwYXJhbSB7QmFzZUVudGl0eX0gY2hlY2tpbkVudGl0eVxuICogQHBhcmFtIHtudW1iZXJ9IHJlZ2lzdHJhdGlvbklkXG4gKiBAcGFyYW0ge251bWJlcn0gZGF0ZVRpbWVJZFxuICovXG5leHBvcnQgZnVuY3Rpb24qIHJlY2VpdmVMYXRlc3RDaGVja2luKFxuXHRjaGVja2luRW50aXR5LFxuXHRyZWdpc3RyYXRpb25JZCxcblx0ZGF0ZVRpbWVJZFxuKSB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggY2hlY2tpbkVudGl0eSwgJ2NoZWNraW4nICkgKSB7XG5cdFx0dGhyb3cgbmV3IEludmFsaWRNb2RlbEVudGl0eShcblx0XHRcdCdFeHBlY3RlZCBhIGNoZWNraW4gcmVjb3JkLicsXG5cdFx0XHRjaGVja2luRW50aXR5XG5cdFx0KTtcblx0fVxuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRSRURVQ0VSX0tFWSxcblx0XHQncmVjZWl2ZUVudGl0eScsXG5cdFx0Y2hlY2tpbkVudGl0eVxuXHQpO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldEVudGl0eUJ5SWQnLFxuXHRcdFsgJ2NoZWNraW4nLCBjaGVja2luRW50aXR5LmlkIF1cblx0KTtcblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J3JlY2VpdmVTZWxlY3RvclZhbHVlJyxcblx0XHQnZ2V0TGF0ZXN0Q2hlY2tpbicsXG5cdFx0Y2hlY2tpbkVudGl0eS5pZCxcblx0XHRyZWdpc3RyYXRpb25JZCxcblx0XHRkYXRlVGltZUlkLFxuXHQpO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldExhdGVzdENoZWNraW4nLFxuXHRcdFsgcmVnaXN0cmF0aW9uSWQsIGRhdGVUaW1lSWQgXVxuXHQpO1xufVxuXG4vKipcbiAqIFRvZ2dsZXMgdGhlIGNoZWNraW4gc3RhdGUgZm9yIHRoZSBnaXZlbiByZWdpc3RyYXRpb24gaWQgYW5kIGRhdGV0aW1lIGlkLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWdpc3RyYXRpb25JZFxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVUaW1lSWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2UgIElmIHRydWUsIHRoZW4gd2hldGhlciB0aGUgcmVnaXN0cmF0aW9uIENBTiBiZSBjaGVja2VkXG4gKiBpbiBvciBub3QgaXMgaWdub3JlZC5cbiAqIEByZXR1cm4ge0Jhc2VFbnRpdHl8bnVsbH0gTnVsbCBpZiB0aGVyZSBpcyBhbiBlcnJvciBvciB0aGUgbmV3IENoZWNraW4gZW50aXR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogdG9nZ2xlQ2hlY2tpbiggcmVnaXN0cmF0aW9uSWQsIGRhdGVUaW1lSWQsIGZvcmNlID0gZmFsc2UgKSB7XG5cdGxldCBjaGVja0luUmVzcG9uc2U7XG5cdGNvbnN0IHBhdGggPSBgJHsgZ2V0RW5kcG9pbnQoICdyZWdpc3RyYXRpb24nICkgfS9gICtcblx0XHRgJHsgcmVnaXN0cmF0aW9uSWQgfS90b2dnbGVfY2hlY2tpbl9mb3JfZGF0ZXRpbWUvJHsgZGF0ZVRpbWVJZCB9YDtcblx0dHJ5IHtcblx0XHRjaGVja0luUmVzcG9uc2UgPSB5aWVsZCBmZXRjaCgge1xuXHRcdFx0cGF0aCxcblx0XHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdFx0ZGF0YTogeyBmb3JjZSB9LFxuXHRcdH0gKTtcblx0fSBjYXRjaCAoIGVycm9yICkge1xuXHRcdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFx0J2NvcmUvbm90aWNlcycsXG5cdFx0XHQnY3JlYXRlRXJyb3JOb3RpY2UnLFxuXHRcdFx0X18oXG5cdFx0XHRcdCdUb2dnbGluZyB0aGUgY2hlY2tpbiBmYWlsZWQuIFVzdWFsbHkgdGhpcyBpcyBkdWUgdG8gdGhlIGNoZWNraW4gbm90IGhhdmluZyBhY2Nlc3MnLFxuXHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgZmFjdG9yeSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRGYWN0b3J5Rm9yTW9kZWwnLFxuXHRcdCdjaGVja2luJ1xuXHQpO1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsKCBmYWN0b3J5LCAnY2hlY2tpbicgKSApIHtcblx0XHR3YXJuaW5nKFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHQnVGhlIGZhY3RvcnkgZm9yIHRoZSBjaGVja2luIG1vZGVsIGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQuJ1xuXHRcdCk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgbmV3Q2hlY2tpbiA9IGZhY3RvcnkuZnJvbUV4aXN0aW5nKCBjaGVja0luUmVzcG9uc2UgKTtcblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J3JlY2VpdmVMYXRlc3RDaGVja2luJyxcblx0XHRuZXdDaGVja2luLFxuXHRcdHJlZ2lzdHJhdGlvbklkLFxuXHRcdGRhdGVUaW1lSWQsXG5cdCk7XG5cdHJldHVybiBuZXdDaGVja2luO1xufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGdldEVuZHBvaW50IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGZldGNoLCBkaXNwYXRjaCwgcmVzb2x2ZVNlbGVjdCB9IGZyb20gJy4uLy4uLy4uL2Jhc2UtY29udHJvbHMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgYXMgU0NIRU1BX1JFRFVDRVJfS0VZIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL2NvbnN0YW50cyc7XG5cbi8qKlxuICogUmVzb2x2ZXIgZm9yIHRoZSBnZXRMYXRlc3RDaGVja2luIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcmVnaXN0cmF0aW9uSWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlVGltZUlkXG4gKiBAcmV0dXJuIHtCYXNlRW50aXR5fG51bGx9IE51bGwgaWYgdGhlcmUgaXMgYW4gZXJyb3Igb3Igbm8gY2hlY2tpbiByZWNvcmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogZ2V0TGF0ZXN0Q2hlY2tpbiggcmVnaXN0cmF0aW9uSWQsIGRhdGVUaW1lSWQgKSB7XG5cdGxldCBjaGVja0luUmVzcG9uc2U7XG5cdHdhcm5pbmcoXG5cdFx0ISBpc1VuZGVmaW5lZCggcmVnaXN0cmF0aW9uSWQgKSAmJiAhIGlzVW5kZWZpbmVkKCBkYXRlVGltZUlkICksXG5cdFx0J0JvdGggYSByZWdpc3RyYXRpb24gaWQgYW5kIGRhdGV0aW1lIGlkIGFyZSBuZWVkZWQgZm9yIGdldHRpbmcgdGhlICcgK1xuXHRcdCdsYXRlc3QgY2hlY2tpbi4nXG5cdCk7XG5cdGNvbnN0IHBhdGggPSBgJHsgZ2V0RW5kcG9pbnQoICdjaGVja2luJyApIH0vYCArXG5cdFx0YD93aGVyZVtSRUdfSURdPSR7IHJlZ2lzdHJhdGlvbklkIH0md2hlcmVbRFRUX0lEXT0keyBkYXRlVGltZUlkIH1gICtcblx0XHQnJm9yZGVyX2J5W0NIS190aW1lc3RhbXBdPURFU0MmbGltaXQ9MSc7XG5cdHRyeSB7XG5cdFx0Y2hlY2tJblJlc3BvbnNlID0geWllbGQgZmV0Y2goIHtcblx0XHRcdHBhdGgsXG5cdFx0XHRtZXRob2Q6ICdHRVQnLFxuXHRcdH0gKTtcblx0XHRpZiAoIGlzRW1wdHkoIGNoZWNrSW5SZXNwb25zZSApICkge1xuXHRcdFx0Ly8gdGhlcmUgaXMgbm8gY2hlY2tpbiByZWNvcmQgeWV0IVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNoZWNrSW5SZXNwb25zZSA9IGNoZWNrSW5SZXNwb25zZS5wb3AoKTtcblx0fSBjYXRjaCAoIGVycm9yICkge1xuXHRcdC8vIEB0b2RvIG5lZWQgdG8gZG8gc29tZXRoaW5nIGRpZmZlcmVudCB3aGVuIHRoZSB1c2VyIGlzbid0IGF1dGhlZCBhbmRcblx0XHQvLyB0aGlzIGlzIHRoZSBjYXVzZSBmb3IgdGhlIGVycm9yP1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IGZhY3RvcnkgPSB5aWVsZCByZXNvbHZlU2VsZWN0KFxuXHRcdFNDSEVNQV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0RmFjdG9yeUZvck1vZGVsJyxcblx0XHQnY2hlY2tpbidcblx0KTtcblx0aWYgKCAhIGlzTW9kZWxFbnRpdHlGYWN0b3J5T2ZNb2RlbCggZmFjdG9yeSwgJ2NoZWNraW4nICkgKSB7XG5cdFx0d2FybmluZyhcblx0XHRcdGZhbHNlLFxuXHRcdFx0J1RoZSBmYWN0b3J5IGZvciB0aGUgY2hlY2tpbiBtb2RlbCBjb3VsZCBub3QgYmUgcmV0cmlldmVkLidcblx0XHQpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IG5ld0NoZWNraW4gPSBmYWN0b3J5LmZyb21FeGlzdGluZyggY2hlY2tJblJlc3BvbnNlICk7XG5cdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFJFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlTGF0ZXN0Q2hlY2tpbicsXG5cdFx0bmV3Q2hlY2tpbixcblx0XHRyZWdpc3RyYXRpb25JZCxcblx0XHRkYXRlVGltZUlkLFxuXHQpO1xuXHRyZXR1cm4gbmV3Q2hlY2tpbjtcbn1cbiIsImltcG9ydCB7IGdldFNlbGVjdG9yVmFsdWUgfSBmcm9tICcuLi9tb2RlbC1zcGVjaWZpYy1zZWxlY3RvcnMnO1xuaW1wb3J0IHsgZ2V0RW50aXR5QnlJZCB9IGZyb20gJy4uLy4uL3NlbGVjdG9ycyc7XG5cbi8qKlxuICogR2V0cyB0aGUgbGF0ZXN0IGNoZWNraW4gZW50aXR5IGluIHRoZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIHZhbHVlLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gcmVnaXN0cmF0aW9uSWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlVGltZUlkXG4gKiBAcmV0dXJuIHtudWxsfEJhc2VFbnRpdHl9IFRoZSBjaGVja2luIGVudGl0eSBpZiBpdCBleGlzdHMgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExhdGVzdENoZWNraW4oIHN0YXRlLCByZWdpc3RyYXRpb25JZCwgZGF0ZVRpbWVJZCApIHtcblx0Y29uc3QgY2hlY2tpbklkID0gZ2V0U2VsZWN0b3JWYWx1ZShcblx0XHRzdGF0ZSxcblx0XHQnZ2V0TGF0ZXN0Q2hlY2tpbicsXG5cdFx0cmVnaXN0cmF0aW9uSWQsXG5cdFx0ZGF0ZVRpbWVJZFxuXHQpO1xuXHRpZiAoICEgY2hlY2tpbklkICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiBnZXRFbnRpdHlCeUlkKCBzdGF0ZSwgJ2NoZWNraW4nLCBjaGVja2luSWQgKTtcbn1cbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0XG4gKi9cbmltcG9ydCB7IE1PREVMX05BTUVTIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZ2V0TWV0aG9kTmFtZSB9IGZyb20gJy4uLy4uL2Jhc2UtbW9kZWwnO1xuXG4vKipcbiAqIER5bmFtaWMgY3JlYXRpb24gb2YgYWN0aW9ucyBmb3IgZW50aXRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gVGhlIGFjdGlvbiBvYmplY3QgdGhhdCBkeW5hbWljYWxseSBjcmVhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCBiZSBtYXBwZWQgdG8uXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgYWN0aW9uIG9iamVjdCBjb250YWluaW5nIGZ1bmN0aW9ucyBmb3IgZWFjaCBtb2RlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjdGlvbnMgPSAoIGFjdGlvbiApID0+IE1PREVMX05BTUVTLnJlZHVjZShcblx0KCBhY3Rpb25zLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCcnLFxuXHRcdFx0J2NyZWF0ZSdcblx0XHQpIF0gPSAoIGVudGl0eSApID0+IGFjdGlvbi5jcmVhdGVFbnRpdHkoIG1vZGVsTmFtZSwgZW50aXR5ICk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdieUlkJyxcblx0XHRcdCdkZWxldGUnXG5cdFx0KSBdID0gKCBlbnRpdHlJZCApID0+IGFjdGlvbi5kZWxldGVFbnRpdHlCeUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdieUlkJyxcblx0XHRcdCd0cmFzaCcsXG5cdFx0KSBdID0gKCBlbnRpdHlJZCApID0+IGFjdGlvbi50cmFzaEVudGl0eUJ5SWQoIG1vZGVsTmFtZSwgZW50aXR5SWQgKTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J3JlY29yZCcsXG5cdFx0XHQncGVyc2lzdCdcblx0XHQpIF0gPSAoIGVudGl0eSApID0+IGFjdGlvbi5wZXJzaXN0RW50aXR5UmVjb3JkKCBtb2RlbE5hbWUsIGVudGl0eSApO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnaWQnLFxuXHRcdFx0J3BlcnNpc3RGb3InLFxuXHRcdCkgXSA9ICggZW50aXR5SWQgKSA9PiBhY3Rpb24ucGVyc2lzdEZvckVudGl0eUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdpZHMnLFxuXHRcdFx0J3BlcnNpc3RGb3InLFxuXHRcdCkgXSA9ICggZW50aXR5SWRzICkgPT4gYWN0aW9uLnBlcnNpc3RGb3JFbnRpdHlJZHMoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRlbnRpdHlJZHNcblx0XHQpO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnJyxcblx0XHRcdCdwZXJzaXN0RGVsZXRlc0ZvcicsXG5cdFx0KSBdID0gKCkgPT4gYWN0aW9uLnBlcnNpc3REZWxldGVzRm9yTW9kZWwoIG1vZGVsTmFtZSApO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnJyxcblx0XHRcdCdwZXJzaXN0VHJhc2hlc0ZvcicsXG5cdFx0KSBdID0gKCkgPT4gYWN0aW9uLnBlcnNpc3RUcmFzaGVzRm9yTW9kZWwoIG1vZGVsTmFtZSApO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnYnlJZCcsXG5cdFx0XHQncmVtb3ZlJyxcblx0XHQpIF0gPSAoIGVudGl0eUlkICkgPT4gYWN0aW9uLnJlbW92ZUVudGl0eUJ5SWQoIG1vZGVsTmFtZSwgZW50aXR5SWQgKTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2lkJyxcblx0XHRcdCdyZW1vdmVEZWxldGUnLFxuXHRcdCkgXSA9ICggZW50aXR5SWQgKSA9PiBhY3Rpb24ucmVtb3ZlRGVsZXRlRW50aXR5SWQoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRlbnRpdHlJZFxuXHRcdCk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdpZCcsXG5cdFx0XHQncmVtb3ZlVHJhc2gnLFxuXHRcdCkgXSA9ICggZW50aXR5SWQgKSA9PiBhY3Rpb24ucmVtb3ZlVHJhc2hFbnRpdHlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnYW5kUmVzb2x2ZScsXG5cdFx0XHQncmVjZWl2ZScsXG5cdFx0XHR0cnVlXG5cdFx0KSBdID0gKCBlbnRpdGllcyApID0+IGFjdGlvbi5yZWNlaXZlRW50aXRpZXNBbmRSZXNvbHZlKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZW50aXRpZXNcblx0XHQpO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQncmVjb3JkcycsXG5cdFx0XHQncmVjZWl2ZUFuZFJlcGxhY2UnLFxuXHRcdCkgXSA9ICggZW50aXRpZXMgKSA9PiBhY3Rpb24ucmVjZWl2ZUFuZFJlcGxhY2VFbnRpdHlSZWNvcmRzKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZW50aXRpZXNcblx0XHQpO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnaWQnLFxuXHRcdFx0J3JlY2VpdmVUcmFzaCcsXG5cdFx0KSBdID0gKCBlbnRpdHlJZCApID0+IGFjdGlvbi5yZWNlaXZlVHJhc2hFbnRpdHlJZChcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkXG5cdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2lkJyxcblx0XHRcdCdyZWNlaXZlRGVsZXRlJyxcblx0XHQpIF0gPSAoIGVudGl0eUlkICkgPT4gYWN0aW9uLnJlY2VpdmVEZWxldGVFbnRpdHlJZChcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkXG5cdFx0KTtcblx0XHRyZXR1cm4gYWN0aW9ucztcblx0fSxcblx0e31cbik7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydFxuICovXG5pbXBvcnQgeyBNT0RFTF9OQU1FUyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGdldE1ldGhvZE5hbWUgfSBmcm9tICcuLi8uLi9iYXNlLW1vZGVsJztcblxuLyoqXG4gKiBEeW5hbWljIGNyZWF0aW9uIG9mIHJlc29sdmVycyBmb3IgZW50aXRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSByZXNvbHZlciBUaGUgcmVzb2x2ZXIgb2JqZWN0IHRoYXQgZHluYW1pY2FsbHkgY3JlYXRlZFxuICogZnVuY3Rpb25zIHdpbGwgYmUgbWFwcGVkIHRvLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgbmV3IHJlc29sdmVyIG9iamVjdCBjb250YWluaW5nIGZ1bmN0aW9ucyBmb3IgZWFjaCBtb2RlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlc29sdmVycyA9ICggcmVzb2x2ZXIgKSA9PiBNT0RFTF9OQU1FUy5yZWR1Y2UoXG5cdCggcmVzb2x2ZXJzLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0cmVzb2x2ZXJzWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2J5SWQnLFxuXHRcdFx0J2dldCdcblx0XHQpIF0gPSAoIGVudGl0eUlkICkgPT4gcmVzb2x2ZXIuZ2V0RW50aXR5QnlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xuXHRcdHJldHVybiByZXNvbHZlcnM7XG5cdH0sXG5cdHt9XG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRcbiAqL1xuaW1wb3J0IHsgTU9ERUxfTkFNRVMgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBnZXRNZXRob2ROYW1lIH0gZnJvbSAnLi4vLi4vYmFzZS1tb2RlbCc7XG5cbi8qKlxuICogRHluYW1pYyBjcmVhdGlvbiBvZiBzZWxlY3RvcnMgZm9yIGVudGl0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gc2VsZWN0b3Igc2VsZWN0b3Igb2JqZWN0IHRoYXQgZHluYW1pY2FsbHkgY3JlYXRlZCBmdW5jdGlvbnNcbiAqIHdpbGwgYmUgbWFwcGVkIHRvLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgbmV3IHNlbGVjdG9yIG9iamVjdHMgZm9yIGVhY2ggbW9kZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTZWxlY3RvcnMgPSAoIHNlbGVjdG9yICkgPT4gTU9ERUxfTkFNRVMucmVkdWNlKFxuXHQoIHNlbGVjdG9ycywgbW9kZWxOYW1lICkgPT4ge1xuXHRcdHNlbGVjdG9yc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdyZWNvcmRzJyxcblx0XHRcdCdnZXQnXG5cdFx0KSBdID0gKFxuXHRcdFx0c3RhdGVcblx0XHQpID0+IHNlbGVjdG9yLmdldEVudGl0eVJlY29yZHNGb3JNb2RlbCggc3RhdGUsIG1vZGVsTmFtZSApO1xuXHRcdHNlbGVjdG9yc1sgZ2V0TWV0aG9kTmFtZSggbW9kZWxOYW1lLCAnJywgJ2dldCcsIHRydWUgKSBdID0gKFxuXHRcdFx0c3RhdGVcblx0XHQpID0+IHNlbGVjdG9yLmdldEVudGl0aWVzRm9yTW9kZWwoIHN0YXRlLCBtb2RlbE5hbWUgKTtcblx0XHRzZWxlY3RvcnNbIGdldE1ldGhvZE5hbWUoIG1vZGVsTmFtZSwgJ2J5SWQnLCAnZ2V0JyApIF0gPSAoXG5cdFx0XHRzdGF0ZSxcblx0XHRcdGVudGl0eUlkXG5cdFx0KSA9PiBzZWxlY3Rvci5nZXRFbnRpdHlCeUlkKCBzdGF0ZSwgbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xuXHRcdHNlbGVjdG9yc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdieUlkcycsXG5cdFx0XHQnZ2V0Jyxcblx0XHRcdHRydWVcblx0XHQpIF0gPSAoXG5cdFx0XHRzdGF0ZSxcblx0XHRcdGVudGl0eUlkcyxcblx0XHQpID0+IHNlbGVjdG9yLmdldEVudGl0aWVzQnlJZHMoIHN0YXRlLCBtb2RlbE5hbWUsIGVudGl0eUlkcyApO1xuXHRcdHNlbGVjdG9yc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdpZHNRdWV1ZWRGb3JUcmFzaCcsXG5cdFx0XHQnZ2V0J1xuXHRcdCkgXSA9ICggc3RhdGUgKSA9PiBzZWxlY3Rvci5nZXRFbnRpdHlJZHNRdWV1ZWRGb3JUcmFzaChcblx0XHRcdHN0YXRlLFxuXHRcdFx0bW9kZWxOYW1lXG5cdFx0KTtcblx0XHRzZWxlY3RvcnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnaWRzUXVldWVkRm9yRGVsZXRlJyxcblx0XHRcdCdnZXQnXG5cdFx0KSBdID0gKCBzdGF0ZSApID0+IHNlbGVjdG9yLmdldEVudGl0eUlkc1F1ZXVlZEZvckRlbGV0ZShcblx0XHRcdHN0YXRlLFxuXHRcdFx0bW9kZWxOYW1lXG5cdFx0KTtcblx0XHRyZXR1cm4gc2VsZWN0b3JzO1xuXHR9LFxuXHR7fVxuKTtcbiIsImltcG9ydCAqIGFzIGVudGl0eUFjdGlvbnMgZnJvbSAnLi9lbnRpdHktYWN0aW9ucyc7XG5pbXBvcnQgKiBhcyBlbnRpdHlSZXNvbHZlcnMgZnJvbSAnLi9lbnRpdHktcmVzb2x2ZXJzJztcbmltcG9ydCAqIGFzIGVudGl0eVNlbGVjdG9ycyBmcm9tICcuL2VudGl0eS1zZWxlY3RvcnMnO1xuaW1wb3J0ICogYXMgcmVsYXRpb25BY3Rpb25zIGZyb20gJy4vcmVsYXRpb24tYWN0aW9ucyc7XG5pbXBvcnQgKiBhcyByZWxhdGlvblNlbGVjdG9ycyBmcm9tICcuL3JlbGF0aW9uLXNlbGVjdG9ycyc7XG5pbXBvcnQgKiBhcyBiYXNlU2VsZWN0b3JzIGZyb20gJy4uL3NlbGVjdG9ycyc7XG5pbXBvcnQgKiBhcyBiYXNlQWN0aW9ucyBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCAqIGFzIGJhc2VSZXNvbHZlcnMgZnJvbSAnLi4vcmVzb2x2ZXJzJztcbmltcG9ydCAqIGFzIG1vZGVsQWN0aW9ucyBmcm9tICcuL21vZGVsLWFjdGlvbnMtaW5kZXgnO1xuaW1wb3J0ICogYXMgbW9kZWxTZWxlY3RvcnMgZnJvbSAnLi9tb2RlbC1zZWxlY3RvcnMtaW5kZXgnO1xuaW1wb3J0ICogYXMgbW9kZWxSZXNvbHZlcnMgZnJvbSAnLi9tb2RlbC1yZXNvbHZlcnMtaW5kZXgnO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0b3JzID0ge1xuXHQuLi5lbnRpdHlTZWxlY3RvcnMuY3JlYXRlU2VsZWN0b3JzKCBiYXNlU2VsZWN0b3JzICksXG5cdC4uLnJlbGF0aW9uU2VsZWN0b3JzLmNyZWF0ZVNlbGVjdG9ycyggYmFzZVNlbGVjdG9ycyApLFxuXHQuLi5tb2RlbFNlbGVjdG9ycyxcbn07XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25zID0ge1xuXHQuLi5lbnRpdHlBY3Rpb25zLmNyZWF0ZUFjdGlvbnMoIGJhc2VBY3Rpb25zICksXG5cdC4uLnJlbGF0aW9uQWN0aW9ucy5jcmVhdGVBY3Rpb25zKCBiYXNlQWN0aW9ucyApLFxuXHQuLi5tb2RlbEFjdGlvbnMsXG59O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZXJzID0ge1xuXHQuLi5lbnRpdHlSZXNvbHZlcnMuY3JlYXRlUmVzb2x2ZXJzKCBiYXNlUmVzb2x2ZXJzICksXG5cdC4uLm1vZGVsUmVzb2x2ZXJzLFxufTtcbiIsImV4cG9ydCAqIGZyb20gJy4vbW9kZWwtc3BlY2lmaWMtYWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2NoZWNraW4vYWN0aW9ucyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL2NoZWNraW4vcmVzb2x2ZXJzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vbW9kZWwtc3BlY2lmaWMtc2VsZWN0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vY2hlY2tpbi9zZWxlY3RvcnMnO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEFDVElPTl9UWVBFUyB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9uLXR5cGVzJztcbmNvbnN0IHsgbW9kZWxTcGVjaWZpYzogdHlwZXMgfSA9IEFDVElPTl9UWVBFUztcblxuLyoqXG4gKiBBY3Rpb24gZm9yIGFkZGluZyB0aGUgcmVzdWx0cyBvZiBhIHNwZWNpZmljIHNlbGVjdG9yIGFuZCBpdHMgdmFsdWUgdG8gdGhlXG4gKiBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtBcnJheX0gYXJnc1xuICogQHJldHVybiB7T2JqZWN0fSBBbiBhY3Rpb24gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNlaXZlU2VsZWN0b3JWYWx1ZSggc2VsZWN0b3IsIHZhbHVlLCAuLi5hcmdzICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfU0VMRUNUT1JfVkFMVUUsXG5cdFx0c2VsZWN0b3IsXG5cdFx0YXJncyxcblx0XHR2YWx1ZSxcblx0fTtcbn1cbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY3JlYXRlU2VsZWN0b3IgZnJvbSAncmVtZW1vJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHNlbGVjdG9yIGFuZCBhcmdzIGluIHRoZSBjdXJyZW50IHN0YXRlLlxuICpcbiAqIEB0eXBlIHsqfSBSZXR1cm5zIHdoYXRldmVyIHRoZSB2YWx1ZSB3YXMgYXNzaWduZWQgdG8gdGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW5cbiAqIHNlbGVjdG9yIGFuZCBpdHMgYXJncy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlbGVjdG9yVmFsdWUgPSBjcmVhdGVTZWxlY3Rvcihcblx0KCBzdGF0ZSwgc2VsZWN0b3IsIC4uLmFyZ3MgKSA9PiB7XG5cdFx0cmV0dXJuIHN0YXRlLm1vZGVsU3BlY2lmaWMuZ2V0SW4oXG5cdFx0XHRbIHNlbGVjdG9yLCBKU09OLnN0cmluZ2lmeSggYXJncyApIF1cblx0XHQpIHx8IG51bGw7XG5cdH0sXG5cdCggc3RhdGUsIHNlbGVjdG9yLCAuLi5hcmdzICkgPT4gW1xuXHRcdHN0YXRlLm1vZGVsU3BlY2lmaWMuZ2V0SW4oIFtcblx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0SlNPTi5zdHJpbmdpZnkoIGFyZ3MgKSxcblx0XHRdICksXG5cdF0sXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRcbiAqL1xuaW1wb3J0IHsgTU9ERUxfTkFNRVMgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBnZXRNZXRob2ROYW1lIH0gZnJvbSAnLi4vLi4vYmFzZS1tb2RlbCc7XG5cbi8qKlxuICogRHluYW1pYyBjcmVhdGlvbiBvZiBhY3Rpb25zIGZvciByZWxhdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gVGhlIGFjdGlvbiBvYmplY3QgdGhhdCBkeW5hbWljYWxseSBjcmVhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCBiZSBtYXBwZWQgdG8uXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgYWN0aW9uIG9iamVjdCBjb250YWluaW5nIGZ1bmN0aW9ucyBmb3IgZWFjaCBtb2RlbFxuICogcmVsYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBY3Rpb25zID0gKCBhY3Rpb24gKSA9PiBNT0RFTF9OQU1FUy5yZWR1Y2UoXG5cdCggYWN0aW9ucywgbW9kZWxOYW1lICkgPT4ge1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQncmVsYXRpb24nLFxuXHRcdFx0J2NyZWF0ZScsXG5cdFx0KSBdID0gKCBlbnRpdHlJZCwgcmVsYXRpb25OYW1lLCByZWxhdGlvbkVudGl0eSApID0+IGFjdGlvblxuXHRcdFx0LmNyZWF0ZVJlbGF0aW9uKFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGVudGl0eUlkLFxuXHRcdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRcdHJlbGF0aW9uRW50aXR5LFxuXHRcdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J3JlbGF0aW9ucycsXG5cdFx0XHQnY3JlYXRlJyxcblx0XHQpIF0gPSAoIGVudGl0eUlkLCByZWxhdGlvbk5hbWUsIHJlbGF0aW9uRW50aXRpZXMgKSA9PiBhY3Rpb25cblx0XHRcdC5jcmVhdGVSZWxhdGlvbnMoXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0ZW50aXR5SWQsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25FbnRpdGllcyxcblx0XHRcdCk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdyZWxhdGlvbkZvckFkZGl0aW9uJyxcblx0XHRcdCdyZW1vdmVEaXJ0eSdcblx0XHQpIF0gPSAoIGVudGl0eUlkLCByZWxhdGlvbk5hbWUsIHJlbGF0aW9uRW50aXR5SWQgKSA9PiBhY3Rpb25cblx0XHRcdC5yZW1vdmVEaXJ0eVJlbGF0aW9uRm9yQWRkaXRpb24oXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0ZW50aXR5SWQsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25FbnRpdHlJZCxcblx0XHRcdCk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCcnLFxuXHRcdFx0J3JlbW92ZVJlbGF0aW9uRm9yJ1xuXHRcdCkgXSA9ICggZW50aXR5SWQsIHJlbGF0aW9uTmFtZSwgcmVsYXRpb25FbnRpdHlJZCApID0+IGFjdGlvblxuXHRcdFx0LnJlbW92ZVJlbGF0aW9uRm9yRW50aXR5KFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGVudGl0eUlkLFxuXHRcdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRcdHJlbGF0aW9uRW50aXR5SWRcblx0XHRcdCk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCcnLFxuXHRcdFx0J3BlcnNpc3RBZGRSZWxhdGlvbnNGb3InXG5cdFx0KSBdID0gKCkgPT4gYWN0aW9uLnBlcnNpc3RBZGRSZWxhdGlvbnNGb3JNb2RlbCggbW9kZWxOYW1lICk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCcnLFxuXHRcdFx0J3BlcnNpc3REZWxldGVSZWxhdGlvbnNGb3InXG5cdFx0KSBdID0gKCkgPT4gYWN0aW9uLnBlcnNpc3REZWxldGVSZWxhdGlvbnNGb3JNb2RlbCggbW9kZWxOYW1lICk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCcnLFxuXHRcdFx0J3BlcnNpc3RSZWxhdGlvbnNGb3InXG5cdFx0KSBdID0gKCBhZGRSZWxhdGlvbiA9IHRydWUgKSA9PlxuXHRcdFx0YWN0aW9uLnBlcnNpc3RSZWxhdGlvbnNGb3JNb2RlbCggbW9kZWxOYW1lLCBhZGRSZWxhdGlvbiApO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQncmVsYXRpb25zRm9ySWQnLFxuXHRcdFx0J3BlcnNpc3QnXG5cdFx0KSBdID0gKCBlbnRpdHlJZCwgYWRkUmVsYXRpb24gPSB0cnVlICkgPT4gYWN0aW9uXG5cdFx0XHQucGVyc2lzdFJlbGF0aW9uc0ZvckVudGl0eUlkKFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGVudGl0eUlkLFxuXHRcdFx0XHRhZGRSZWxhdGlvblxuXHRcdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J3JlbGF0aW9uc0ZvcklkQW5kUmVsYXRpb24nLFxuXHRcdFx0J3BlcnNpc3QnXG5cdFx0KSBdID0gKCBlbnRpdHlJZCwgcmVsYXRpb25OYW1lLCBhZGRSZWxhdGlvbiA9IHRydWUgKSA9PiBhY3Rpb25cblx0XHRcdC5wZXJzaXN0UmVsYXRpb25zRm9yRW50aXR5SWRBbmRSZWxhdGlvbihcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRlbnRpdHlJZCxcblx0XHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdFx0XHRhZGRSZWxhdGlvblxuXHRcdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J3JlbGF0aW9uc0ZvcklkQW5kUmVsYXRpb25JZCcsXG5cdFx0XHQncGVyc2lzdCdcblx0XHQpIF0gPSAoXG5cdFx0XHRlbnRpdHlJZCxcblx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdHJlbGF0aW9uSWQsXG5cdFx0XHRhZGRSZWxhdGlvbiA9IHRydWVcblx0XHQpID0+IGFjdGlvblxuXHRcdFx0LnBlcnNpc3RSZWxhdGlvbnNGb3JFbnRpdHlJZEFuZFJlbGF0aW9uSWQoXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0ZW50aXR5SWQsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25JZCxcblx0XHRcdFx0YWRkUmVsYXRpb25cblx0XHRcdCk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdpZCcsXG5cdFx0XHQncmVjZWl2ZVJlbGF0ZWRFbnRpdGllc0Zvcidcblx0XHQpIF0gPSAoIGVudGl0eUlkLCByZWxhdGlvbk5hbWUsIHJlbGF0aW9uRW50aXR5SWRzICkgPT4gYWN0aW9uXG5cdFx0XHQucmVjZWl2ZVJlbGF0ZWRFbnRpdGllcyhcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRlbnRpdHlJZCxcblx0XHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdFx0XHRyZWxhdGlvbkVudGl0eUlkc1xuXHRcdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2lkJyxcblx0XHRcdCdyZWNlaXZlRGlydHlSZWxhdGlvbkFkZGl0aW9uRm9yJ1xuXHRcdCkgXSA9ICggcmVsYXRpb25OYW1lLCByZWxhdGlvbklkLCBlbnRpdHlJZCApID0+IGFjdGlvblxuXHRcdFx0LnJlY2VpdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24oXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25JZCxcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRlbnRpdHlJZFxuXHRcdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2lkJyxcblx0XHRcdCdyZWNlaXZlRGlydHlSZWxhdGlvbkRlbGV0aW9uRm9yJ1xuXHRcdCkgXSA9ICggcmVsYXRpb25OYW1lLCByZWxhdGlvbklkLCBlbnRpdHlJZCApID0+IGFjdGlvblxuXHRcdFx0LnJlY2VpdmVEaXJ0eVJlbGF0aW9uRGVsZXRpb24oXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25JZCxcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRlbnRpdHlJZFxuXHRcdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J3JlbGF0aW9ucycsXG5cdFx0XHQncmVjZWl2ZVVwZGF0ZWRFbnRpdHlJZEZvcidcblx0XHQpIF0gPSAoIG9sZElkLCBuZXdJZCApID0+IGFjdGlvblxuXHRcdFx0LnJlY2VpdmVVcGRhdGVkRW50aXR5SWRGb3JSZWxhdGlvbnMoXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0b2xkSWQsXG5cdFx0XHRcdG5ld0lkXG5cdFx0XHQpO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnaWQnLFxuXHRcdFx0J3JlbW92ZUFsbFJlbGF0ZWRFbnRpdGllc0Zvcidcblx0XHQpIF0gPSAoIGVudGl0eUlkICkgPT4gYWN0aW9uLnJlbW92ZUFsbFJlbGF0ZWRFbnRpdGllc0Zvck1vZGVsRW50aXR5KFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZW50aXR5SWRcblx0XHQpO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnaWRBbmRSZWxhdGlvbicsXG5cdFx0XHQncmVtb3ZlUmVsYXRlZEVudGl0aWVzRm9yJ1xuXHRcdCkgXSA9ICggZW50aXR5SWQsIHJlbGF0aW9uTmFtZSwgcmVsYXRpb25JZHMgKSA9PiBhY3Rpb25cblx0XHRcdC5yZW1vdmVSZWxhdGVkRW50aXRpZXMoXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0ZW50aXR5SWQsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25JZHMsXG5cdFx0XHQpO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnaWRBbmRSZWxhdGlvbicsXG5cdFx0XHQncmVtb3ZlRGlydHlSZWxhdGlvbkFkZGl0aW9uRm9yJ1xuXHRcdCkgXSA9IChcblx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0XHRlbnRpdHlJZCxcblx0XHQpID0+IGFjdGlvbi5yZW1vdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24oXG5cdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZW50aXR5SWQsXG5cdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2lkQW5kUmVsYXRpb24nLFxuXHRcdFx0J3JlbW92ZURpcnR5UmVsYXRpb25EZWxldGlvbkZvcidcblx0XHQpIF0gPSAoXG5cdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHRcdFx0ZW50aXR5SWQsXG5cdFx0KSA9PiBhY3Rpb24ucmVtb3ZlRGlydHlSZWxhdGlvbkRlbGV0aW9uKFxuXHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdFx0cmVsYXRpb25FbnRpdHlJZCxcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkLFxuXHRcdCk7XG5cdFx0cmV0dXJuIGFjdGlvbnM7XG5cdH0sXG5cdHt9XG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRcbiAqL1xuaW1wb3J0IHsgTU9ERUxfTkFNRVMgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBnZXRNZXRob2ROYW1lIH0gZnJvbSAnLi4vLi4vYmFzZS1tb2RlbCc7XG5cbi8qKlxuICogRHluYW1pYyBjcmVhdGlvbiBvZiBzZWxlY3RvcnMgZm9yIHJlbGF0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IHNlbGVjdG9yIHNlbGVjdG9yIG9iamVjdCB0aGF0IGR5bmFtaWNhbGx5IGNyZWF0ZWQgZnVuY3Rpb25zXG4gKiB3aWxsIGJlIG1hcHBlZCB0by5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIG5ldyBzZWxlY3RvciBvYmplY3RzIGZvciBlYWNoIG1vZGVsIHJlbGF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlU2VsZWN0b3JzID0gKCBzZWxlY3RvciApID0+IE1PREVMX05BTUVTLnJlZHVjZShcblx0KCBzZWxlY3RvcnMsIG1vZGVsTmFtZSApID0+IHtcblx0XHRzZWxlY3RvcnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnYWRkaXRpb25SZWxhdGlvbnMnLFxuXHRcdFx0J2dldFF1ZXVlZCdcblx0XHQpIF0gPSAoIHN0YXRlICkgPT4gc2VsZWN0b3IuZ2V0UmVsYXRpb25BZGRpdGlvbnNRdWV1ZWRGb3JNb2RlbChcblx0XHRcdHN0YXRlLFxuXHRcdFx0bW9kZWxOYW1lXG5cdFx0KTtcblx0XHRzZWxlY3RvcnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnZGVsZXRlUmVsYXRpb25zJyxcblx0XHRcdCdnZXRRdWV1ZWQnXG5cdFx0KSBdID0gKCBzdGF0ZSApID0+IHNlbGVjdG9yLmdldFJlbGF0aW9uRGVsZXRpb25zUXVldWVkRm9yTW9kZWwoXG5cdFx0XHRzdGF0ZSxcblx0XHRcdG1vZGVsTmFtZVxuXHRcdCk7XG5cdFx0c2VsZWN0b3JzWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2lkJyxcblx0XHRcdCdjb3VudFJlbGF0aW9uTW9kZWxzSW5kZXhlZEZvcidcblx0XHQpIF0gPSAoIHN0YXRlLCBlbnRpdHlJZCApID0+IHNlbGVjdG9yXG5cdFx0XHQuY291bnRSZWxhdGlvbk1vZGVsc0luZGV4ZWRGb3JFbnRpdHkoXG5cdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGVudGl0eUlkXG5cdFx0XHQpO1xuXHRcdHJldHVybiBzZWxlY3RvcnM7XG5cdH0sXG5cdHt9XG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IERFRkFVTFRfQ09SRV9TVEFURSwgc2luZ3VsYXJNb2RlbE5hbWUgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBmcm9tSlMsIFNldCB9IGZyb20gJ2ltbXV0YWJsZSc7XG5pbXBvcnQgeyBub3JtYWxpemVFbnRpdHlJZCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHMuXG4gKi9cbmltcG9ydCB7IEFDVElPTl9UWVBFUyB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9uLXR5cGVzJztcbmNvbnN0IHsgZW50aXRpZXM6IHR5cGVzLCByZXNldHM6IHJlc2V0VHlwZXMgfSA9IEFDVElPTl9UWVBFUztcblxuLyoqXG4gKiBIYW5kbGUgYWRkaW5nIGluY29taW5nIGRhdGEgdG8gc3RhdGUuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5TZXR9IGV4aXN0aW5nRW50aXRpZXNcbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IE5ldyBzdGF0ZS5cbiAqL1xuY29uc3QgYWRkVG9TdGF0ZSA9ICggc3RhdGUsIG1vZGVsTmFtZSwgZW50aXR5SWQsIGV4aXN0aW5nRW50aXRpZXMgKSA9PiB7XG5cdGV4aXN0aW5nRW50aXRpZXMgPSBleGlzdGluZ0VudGl0aWVzLmFkZCggZW50aXR5SWQgKTtcblx0cmV0dXJuIHN0YXRlLnNldCggbW9kZWxOYW1lLCBleGlzdGluZ0VudGl0aWVzICk7XG59O1xuXG4vKipcbiAqIEhhbmRsZSByZW1vdmluZyBpbmNvbWluZyBkYXRhIGZyb20gc3RhdGVcbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBuZXcgc3RhdGUgb3IgZXhpc3Rpbmcgc3RhdGUgaWYgbm8gY2hhbmdlLlxuICovXG5jb25zdCByZW1vdmVGcm9tU3RhdGUgPSAoIHN0YXRlLCBtb2RlbE5hbWUsIGVudGl0eUlkICkgPT4ge1xuXHRsZXQgZW50aXR5SWRzID0gc3RhdGUuZ2V0KCBtb2RlbE5hbWUsIFNldCgpICk7XG5cdGlmICggISBlbnRpdHlJZHMuaW5jbHVkZXMoIGVudGl0eUlkICkgKSB7XG5cdFx0cmV0dXJuIHN0YXRlO1xuXHR9XG5cdGVudGl0eUlkcyA9IGVudGl0eUlkcy5kZWxldGUoIGVudGl0eUlkICk7XG5cdHJldHVybiBlbnRpdHlJZHMuaXNFbXB0eSgpID9cblx0XHRzdGF0ZS5kZWxldGUoIG1vZGVsTmFtZSApIDpcblx0XHRzdGF0ZS5zZXQoIG1vZGVsTmFtZSwgZW50aXR5SWRzICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgaW5jb21pbmcgYWN0aW9uXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gRWl0aGVyIHRoZSBleGlzdGluZyBzdGF0ZSBpZiBubyBjaGFuZ2Ugb3IgbmV3IHN0YXRlLlxuICovXG5jb25zdCBwcm9jZXNzQWN0aW9uID0gKCBzdGF0ZSwgYWN0aW9uICkgPT4ge1xuXHRjb25zdCB7IHR5cGUsIG1vZGVsTmFtZSB9ID0gYWN0aW9uO1xuXHRjb25zdCBlbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCBhY3Rpb24uZW50aXR5SWQgKTtcblx0Y29uc3QgZXhpc3RpbmdFbnRpdGllcyA9IHN0YXRlLmdldCggbW9kZWxOYW1lLCBTZXQoKSApO1xuXG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RFTEVURV9FTlRJVFlfSUQ6XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX1RSQVNIX0VOVElUWV9JRDpcblx0XHRcdHN0YXRlID0gYWRkVG9TdGF0ZSggc3RhdGUsIG1vZGVsTmFtZSwgZW50aXR5SWQsIGV4aXN0aW5nRW50aXRpZXMgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX0RFTEVURV9FTlRJVFlfSUQ6XG5cdFx0Y2FzZSB0eXBlcy5SRU1PVkVfVFJBU0hfRU5USVRZX0lEOlxuXHRcdFx0c3RhdGUgPSByZW1vdmVGcm9tU3RhdGUoIHN0YXRlLCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIFJlZHVjZXIgZm9yIHF1ZXVpbmcgYW4gZW50aXR5IGZvciBkZWxldGlvbiBpbiB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gRXhpc3Rpbmcgb3IgbmV3IHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRW50aXR5KFxuXHRzdGF0ZSA9IGZyb21KUyggREVGQVVMVF9DT1JFX1NUQVRFLmRpcnR5LmRlbGV0ZSApLFxuXHRhY3Rpb25cbikge1xuXHRzd2l0Y2ggKCBhY3Rpb24udHlwZSApIHtcblx0XHRjYXNlIHR5cGVzLlJFQ0VJVkVfREVMRVRFX0VOVElUWV9JRDpcblx0XHRjYXNlIHR5cGVzLlJFTU9WRV9ERUxFVEVfRU5USVRZX0lEOlxuXHRcdFx0cmV0dXJuIHByb2Nlc3NBY3Rpb24oIHN0YXRlLCBhY3Rpb24gKTtcblx0XHRjYXNlIHJlc2V0VHlwZXMuUkVTRVRfQUxMX1NUQVRFOlxuXHRcdFx0cmV0dXJuIGZyb21KUyggREVGQVVMVF9DT1JFX1NUQVRFLmRpcnR5LmRlbGV0ZSApO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9TVEFURV9GT1JfTU9ERUw6XG5cdFx0XHRyZXR1cm4gc3RhdGUuZGVsZXRlKCBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLm1vZGVsTmFtZSApICk7XG5cdH1cblx0cmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFJlZHVjZXIgZm9yIHF1ZXVlaW5nIHRoZSBlbnRpdHkgZm9yIHRyYXNoaW5nIGluIHRoZSBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBFeGlzdGluZyBvciBuZXcgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFzaEVudGl0eShcblx0c3RhdGUgPSBmcm9tSlMoIERFRkFVTFRfQ09SRV9TVEFURS5kaXJ0eS50cmFzaCApLFxuXHRhY3Rpb25cbikge1xuXHRzd2l0Y2ggKCBhY3Rpb24udHlwZSApIHtcblx0XHRjYXNlIHR5cGVzLlJFQ0VJVkVfVFJBU0hfRU5USVRZX0lEOlxuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX1RSQVNIX0VOVElUWV9JRDpcblx0XHRcdHJldHVybiBwcm9jZXNzQWN0aW9uKCBzdGF0ZSwgYWN0aW9uICk7XG5cdFx0Y2FzZSByZXNldFR5cGVzLlJFU0VUX0FMTF9TVEFURTpcblx0XHRcdHJldHVybiBmcm9tSlMoIERFRkFVTFRfQ09SRV9TVEFURS5kaXJ0eS50cmFzaCApO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9TVEFURV9GT1JfTU9ERUw6XG5cdFx0XHRyZXR1cm4gc3RhdGUuZGVsZXRlKCBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLm1vZGVsTmFtZSApICk7XG5cdH1cblx0cmV0dXJuIHN0YXRlO1xufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdERFRkFVTFRfQ09SRV9TVEFURSxcblx0c2luZ3VsYXJNb2RlbE5hbWUsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGZyb21KUywgU2V0LCBNYXAgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHtcblx0cmVtb3ZlRW1wdHlGcm9tU3RhdGUsXG5cdG5vcm1hbGl6ZUVudGl0eUlkLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcbmltcG9ydCBjdWlkIGZyb20gJ2N1aWQnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHMuXG4gKi9cbmltcG9ydCB7IEFDVElPTl9UWVBFUyB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9uLXR5cGVzJztcbmNvbnN0IHsgcmVsYXRpb25zOiB0eXBlcywgcmVzZXRzOiByZXNldFR5cGVzIH0gPSBBQ1RJT05fVFlQRVM7XG5cbi8qKlxuICogVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgcmVsYXRpb24gZXhpc3RzIGluIHRoZSBwcm92aWRlZCBtYXAuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSByZWxhdGlvbk1hcFxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXVlVHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIHRoZSByZWxhdGlvbiBleGlzdHMgZm9yIHRoZSBnaXZlbiBlbnRpdHkgSWRcbiAqIGZhbHNlIG1lYW5zIGl0IGRvZXMgbm90IGV4aXN0LlxuICovXG5jb25zdCByZWxhdGlvbkV4aXN0c0luTWFwID0gKCByZWxhdGlvbk1hcCwgcXVldWVUeXBlLCBlbnRpdHlJZCApID0+IHtcblx0cmV0dXJuIHJlbGF0aW9uTWFwLmdldCggcXVldWVUeXBlLCBTZXQoKSApLmluY2x1ZGVzKCBlbnRpdHlJZCApO1xufTtcblxuLyoqXG4gKiBVc2VkIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHJlbGF0aW9uIGV4aXN0cyBhbHJlYWR5IGluIHRoZSBzdGF0ZSBmb3IgdGhlXG4gKiBnaXZlbiBkYXRhLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gcmVsYXRpb25NYXBcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgbWVhbnMgdGhlIHJlbGF0aW9uIGV4aXN0cyBpbiB0aGUgc3RhdGUuXG4gKi9cbmNvbnN0IGhhc1JlbGF0aW9uID0gKCBzdGF0ZSwgYWN0aW9uLCByZWxhdGlvbk1hcCApID0+IHtcblx0Y29uc3Qge1xuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0ZW50aXR5SWQsXG5cdFx0cXVldWVUeXBlLFxuXHR9ID0gYWN0aW9uO1xuXHRsZXQgeyByZWxhdGlvbk5hbWUsIG1vZGVsTmFtZSB9ID0gYWN0aW9uO1xuXHRpZiAoIHJlbGF0aW9uRXhpc3RzSW5NYXAoIHJlbGF0aW9uTWFwLCBxdWV1ZVR5cGUsIGVudGl0eUlkICkgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBzdGlsbCBoZXJlPyBPa2F5LCBsZXQncyBkbyBhIHJldmVyc2UgbG9va3VwIHRoZW4sIHdoZXJlIHRoZSByZWxhdGlvbiBtYXlcblx0Ly8gYmUgc3RvcmVkIHdpdGggdGhlIHJlbGF0aW9uIGFzIHRoZSBvcmlnaW5hdGluZyBlbnRpdHkuXG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBlbnRpdHlJZHMgPSBzdGF0ZS5nZXRJbihcblx0XHRbIHF1ZXVlVHlwZSwgcmVsYXRpb25OYW1lLCByZWxhdGlvbkVudGl0eUlkLCBtb2RlbE5hbWUgXSxcblx0KTtcblx0cmV0dXJuIGVudGl0eUlkcyA/IGVudGl0eUlkcy5pbmNsdWRlcyggZW50aXR5SWQgKSA6IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgcmVsYXRpb24gbWFwIGZyb20gdGhlIGluZGV4IGZvciB0aGUgZ2l2ZW4gZGF0YS5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBBIG5ldyBtYXAgaXMgcmV0dXJuZWQgaWYgdGhlcmUgaXNuJ3QgYW4gZXhpc3RpbmcgbWFwIHByZXNlbnQuXG4gKi9cbmNvbnN0IGdldFJlbGF0aW9uTWFwID0gKCBzdGF0ZSwgYWN0aW9uICkgPT4ge1xuXHRjb25zdCB7IHJlbGF0aW9uTmFtZSwgcmVsYXRpb25FbnRpdHlJZDogcmVsYXRpb25JZCwgbW9kZWxOYW1lIH0gPSBhY3Rpb247XG5cdC8vIGdldCB0aGUgbWFwIGZvciB0aGUgcXVldWVUeXBlXG5cdHJldHVybiBzdGF0ZS5nZXRJbihcblx0XHRbICdpbmRleCcsIHJlbGF0aW9uTmFtZSwgcmVsYXRpb25JZCwgbW9kZWxOYW1lIF1cblx0KSB8fCBNYXAoKTtcbn07XG5cbi8qKlxuICogR2l2ZW4gYSBzZXQgb2YgaWRzLCB0aGlzIHJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gaWQgZXhpc3RzIGluIGl0LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHBhcmFtIHtJbW11dGFibGUuU2V0fSBpZFNldFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyBpdCBleGlzdHMgaW4gdGhlIGFycmF5LlxuICovXG5jb25zdCBpZEV4aXN0c0luU2V0ID0gKCBlbnRpdHlJZCwgaWRTZXQgKSA9PiB7XG5cdHJldHVybiAoXG5cdFx0aWRTZXQgaW5zdGFuY2VvZiBTZXQgJiZcblx0XHRpZFNldC5pbmNsdWRlcyggZW50aXR5SWQgKVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZWR1Y2VyIGZvciBhZGRpbmcgdG8gdGhlIHJlbGF0aW9ucyBpbmRleCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHJlbGF0aW9uTWFwXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSAgRWl0aGVyIGV4aXN0aW5nIHN0YXRlIGlmIG5vIGNoYW5nZSBvciBuZXcgc3RhdGUgaWYgY2hhbmdlLlxuICovXG5mdW5jdGlvbiBpbmRleFJlbGF0aW9ucyggc3RhdGUsIGFjdGlvbiwgcmVsYXRpb25NYXAgKSB7XG5cdGNvbnN0IHtcblx0XHR0eXBlLFxuXHRcdHJlbGF0aW9uTmFtZSxcblx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0XHRxdWV1ZVR5cGUsXG5cdH0gPSBhY3Rpb247XG5cdGxldCBlbnRpdHlJZHMgPSByZWxhdGlvbk1hcC5nZXQoIHF1ZXVlVHlwZSApIHx8IFNldCgpO1xuXHRjb25zdCBwYXRoID0gWyByZWxhdGlvbk5hbWUsIHJlbGF0aW9uRW50aXR5SWQsIG1vZGVsTmFtZSwgcXVldWVUeXBlIF07XG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OOlxuXHRcdGNhc2UgdHlwZXMuUkVDRUlWRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTjpcblx0XHRcdGlmICggaWRFeGlzdHNJblNldCggZW50aXR5SWQsIGVudGl0eUlkcyApICkge1xuXHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHR9XG5cdFx0XHRzdGF0ZSA9IHN0YXRlLnNldEluKCBwYXRoLCBlbnRpdHlJZHMuYWRkKCBlbnRpdHlJZCApICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIHR5cGVzLlJFTU9WRV9ESVJUWV9SRUxBVElPTl9BRERJVElPTjpcblx0XHRjYXNlIHR5cGVzLlJFTU9WRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTjpcblx0XHRcdGlmICggISBpZEV4aXN0c0luU2V0KCBlbnRpdHlJZCwgZW50aXR5SWRzICkgKSB7XG5cdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdH1cblx0XHRcdGVudGl0eUlkcyA9IGVudGl0eUlkcy5kZWxldGUoIGVudGl0eUlkICk7XG5cdFx0XHRpZiAoIGVudGl0eUlkcy5pc0VtcHR5KCkgKSB7XG5cdFx0XHRcdHN0YXRlID0gcmVtb3ZlRW1wdHlGcm9tU3RhdGUoIHN0YXRlLCBwYXRoLCAwICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGF0ZSA9IHN0YXRlLnNldEluKCBwYXRoLCBlbnRpdHlJZHMgKTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgcmVsYXRpb24gaWRzIGZyb20gc3RhdGUgZm9yIGdpdmVuIGRhdGEuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7SW1tdXRhYmxlLlNldH0gQSBMaXN0IG9mIGlkcyBpZiBwcmVzZW50IG9yIGVtcHR5IExpc3QgaWYgbm90LlxuICovXG5mdW5jdGlvbiBnZXRSZWxhdGlvbklkc0Zyb21TdGF0ZSggc3RhdGUsIGFjdGlvbiApIHtcblx0Y29uc3Qge1xuXHRcdHJlbGF0aW9uTmFtZSxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdH0gPSBhY3Rpb247XG5cdGNvbnN0IHBhdGggPSBbIG1vZGVsTmFtZSwgZW50aXR5SWQsIHJlbGF0aW9uTmFtZSBdO1xuXHRyZXR1cm4gc3RhdGUuaGFzSW4oIHBhdGggKSA/IHN0YXRlLmdldEluKCBwYXRoICkgOiBTZXQoKTtcbn1cblxuLyoqXG4gKiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBzdGF0ZSByZXF1aXJlcyBhbiB1cGRhdGUgb3Igbm90IGZvciB0aGUgZ2l2ZW5cbiAqIGRhdGEuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSByZWxhdGlvbk1hcFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpbmRpY2F0ZXMgdXBkYXRlIGlzIG5lZWRlZC5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZXNVcGRhdGUoIHN0YXRlLCBhY3Rpb24sIHJlbGF0aW9uTWFwICkge1xuXHRzd2l0Y2ggKCBhY3Rpb24udHlwZSApIHtcblx0XHRjYXNlIHR5cGVzLlJFQ0VJVkVfRElSVFlfUkVMQVRJT05fQURESVRJT046XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OOlxuXHRcdFx0cmV0dXJuICEgaGFzUmVsYXRpb24oIHN0YXRlLCBhY3Rpb24sIHJlbGF0aW9uTWFwICk7XG5cdFx0Y2FzZSB0eXBlcy5SRU1PVkVfRElSVFlfUkVMQVRJT05fQURESVRJT046XG5cdFx0Y2FzZSB0eXBlcy5SRU1PVkVfRElSVFlfUkVMQVRJT05fREVMRVRJT046XG5cdFx0XHRyZXR1cm4gaGFzUmVsYXRpb24oIHN0YXRlLCBhY3Rpb24sIHJlbGF0aW9uTWFwICk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJlZHVjZXIgZm9yIHVwZGF0aW5nIGRpcnR5IHJlbGF0aW9uIHN0YXRlIGZvciBnaXZlbiBkYXRhLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gcmVsYXRpb25NYXBcbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IElmIG5vIGNoYW5nZSBvcmlnaW5hbCBzdGF0ZSBpcyByZXR1cm5lZCBvdGhlcndpc2UgbmV3IHN0YXRlLlxuICovXG5mdW5jdGlvbiB1cGRhdGVSZWxhdGlvblN0YXRlKCBzdGF0ZSwgYWN0aW9uLCByZWxhdGlvbk1hcCApIHtcblx0Y29uc3Qge1xuXHRcdHR5cGUsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHRcdHF1ZXVlVHlwZSxcblx0fSA9IGFjdGlvbjtcblx0Y29uc3QgaWRzID0gcmVsYXRpb25NYXAuZ2V0KCBxdWV1ZVR5cGUgKSB8fCBTZXQoKTtcblx0Y29uc3QgcGF0aCA9IFsgbW9kZWxOYW1lLCBlbnRpdHlJZCwgcmVsYXRpb25OYW1lIF07XG5cdGxldCByZWxhdGlvbklkcztcblx0c3dpdGNoICggdHlwZSApIHtcblx0XHRjYXNlIHR5cGVzLlJFQ0VJVkVfRElSVFlfUkVMQVRJT05fQURESVRJT046XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OOlxuXHRcdFx0aWYgKCBpZEV4aXN0c0luU2V0KCBlbnRpdHlJZCwgaWRzICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0cmVsYXRpb25JZHMgPSBnZXRSZWxhdGlvbklkc0Zyb21TdGF0ZSggc3RhdGUsIGFjdGlvbiApO1xuXHRcdFx0aWYgKCByZWxhdGlvbklkcy5pbmNsdWRlcyggcmVsYXRpb25FbnRpdHlJZCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHN0YXRlID0gc3RhdGUuc2V0SW4oIHBhdGgsIHJlbGF0aW9uSWRzLmFkZCggcmVsYXRpb25FbnRpdHlJZCApICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIHR5cGVzLlJFTU9WRV9ESVJUWV9SRUxBVElPTl9BRERJVElPTjpcblx0XHRjYXNlIHR5cGVzLlJFTU9WRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTjpcblx0XHRcdGlmICggISBpZEV4aXN0c0luU2V0KCBlbnRpdHlJZCwgaWRzICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0cmVsYXRpb25JZHMgPSBnZXRSZWxhdGlvbklkc0Zyb21TdGF0ZSggc3RhdGUsIGFjdGlvbiApO1xuXHRcdFx0aWYgKCAhIHJlbGF0aW9uSWRzLmluY2x1ZGVzKCByZWxhdGlvbkVudGl0eUlkICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0cmVsYXRpb25JZHMgPSByZWxhdGlvbklkcy5kZWxldGUoIHJlbGF0aW9uRW50aXR5SWQgKTtcblx0XHRcdGlmICggcmVsYXRpb25JZHMuaXNFbXB0eSgpICkge1xuXHRcdFx0XHRzdGF0ZSA9IHJlbW92ZUVtcHR5RnJvbVN0YXRlKCBzdGF0ZSwgcGF0aCwgMCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RhdGUgPSBzdGF0ZS5zZXRJbiggcGF0aCwgcmVsYXRpb25JZHMgKTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZCBhc3Npc3Rpbmcgd2l0aCByZXBsYWNpbmcgYW4gb2xkIHJlbGF0aW9uIGlkIGZvciBhIG5ldyByZWxhdGlvblxuICogaWQuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gRWl0aGVyIG9yaWdpbmFsIG9yIG5ldyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZU9sZFJlbGF0aW9uSWRXaXRoTmV3UmVsYXRpb25JZCggc3RhdGUsIGFjdGlvbiApIHtcblx0bGV0IHsgb2xkRW50aXR5SWQsIG5ld0VudGl0eUlkIH0gPSBhY3Rpb247XG5cdGNvbnN0IHsgbW9kZWxOYW1lIH0gPSBhY3Rpb247XG5cdG9sZEVudGl0eUlkID0gbm9ybWFsaXplRW50aXR5SWQoIG9sZEVudGl0eUlkICk7XG5cdG5ld0VudGl0eUlkID0gbm9ybWFsaXplRW50aXR5SWQoIG5ld0VudGl0eUlkICk7XG5cdC8vIHJlcGxhY2VtZW50cyBpbiBpbmRleFxuXHRsZXQgbmV3U3RhdGUgPSByZXBsYWNlSWRzKFxuXHRcdCdpbmRleCcsXG5cdFx0c3RhdGUsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdG9sZEVudGl0eUlkLFxuXHRcdG5ld0VudGl0eUlkXG5cdCk7XG5cdGlmICggbmV3U3RhdGUgPT09IHN0YXRlICkge1xuXHRcdG5ld1N0YXRlID0gcmVwbGFjZUlkcyhcblx0XHRcdCdkZWxldGUnLFxuXHRcdFx0bmV3U3RhdGUsXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRvbGRFbnRpdHlJZCxcblx0XHRcdG5ld0VudGl0eUlkLFxuXHRcdCk7XG5cdH1cblx0aWYgKCBuZXdTdGF0ZSA9PT0gc3RhdGUgKSB7XG5cdFx0bmV3U3RhdGUgPSByZXBsYWNlSWRzKFxuXHRcdFx0J2FkZCcsXG5cdFx0XHRuZXdTdGF0ZSxcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdG9sZEVudGl0eUlkLFxuXHRcdFx0bmV3RW50aXR5SWQsXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogSGFuZGxlcyBnb2luZyB0aHJvdWdoIHRoZSBwcm92aWRlZCBzdGF0ZSBvYmplY3QgYW5kIHVwZGF0aW5nIGFueSBvY2N1cnJlbmNlc1xuICogb2YgdGhlIHByb3ZpZGVkIG9sZElkIGZvciB0aGUgcHJvdmlkZWQgbW9kZWwgbmFtZSB3aXRoIHRoZSBuZXcgaWQuICBUaGlzXG4gKiBtdXRhdGVzIHRoZSBpbmNvbWluZyBzdGF0ZSBzbyBkbyBub3QgcHJvdmlkZSB0aGUgb3JpZ2luYWwgc3RhdGUgZnJvbSB0aGVcbiAqIHN0b3JlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVByb3BlcnR5ICh3aGF0IHByb3BlcnR5IGZvciB0aGUgc3RhdGUgc2hvdWxkIGJlXG4gKiAgIHJldmlld2VkKVxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IG9sZElkXG4gKiBAcGFyYW0ge251bWJlcn0gbmV3SWRcbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IFJldHVybnMgZWl0aGVyIG5ldyBzdGF0ZSBvciBleGlzdGluZyBzdGF0ZS5cbiAqL1xuY29uc3QgcmVwbGFjZUlkcyA9ICggc3RhdGVQcm9wZXJ0eSwgc3RhdGUsIG1vZGVsTmFtZSwgb2xkSWQsIG5ld0lkICkgPT4ge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdGNvbnN0IG1haW5QYXRoID0gWyBzdGF0ZVByb3BlcnR5LCBtb2RlbE5hbWUsIG9sZElkIF07XG5cblx0Ly8gZmlyc3QgZG8gdG9wLWxldmVsIGNoZWNrcyBpZiBpdCBkb2Vzbid0IGV4aXN0LCBiYWlsLlxuXHRpZiAoICEgc3RhdGUuaGFzSW4oIG1haW5QYXRoICkgKSB7XG5cdFx0cmV0dXJuIHN0YXRlO1xuXHR9XG5cblx0Y29uc3QgbWFpblJlY29yZCA9IHN0YXRlLmdldEluKCBtYWluUGF0aCApO1xuXG5cdHN0YXRlID0gc3RhdGVcblx0XHQuZGVsZXRlSW4oIG1haW5QYXRoIClcblx0XHQuc2V0SW4oIFsgc3RhdGVQcm9wZXJ0eSwgbW9kZWxOYW1lLCBuZXdJZCBdLCBtYWluUmVjb3JkICk7XG5cblx0Ly8gbWFpblJlY29yZCBwcm92aWRlcyB0aGUgaW5kZXggdG8gdGhlIG90aGVyIHJlY29yZHMgbmVlZGluZyB1cGRhdGVkLlxuXHRtYWluUmVjb3JkLmZvckVhY2goICggbWFwT3JJZHMsIHJlbGF0aW9uTW9kZWxOYW1lICkgPT4ge1xuXHRcdGNvbnN0IHVwZGF0ZUlkcyA9ICggcXVldWVUeXBlLCByZWxhdGlvbklkICkgPT4ge1xuXHRcdFx0Y29uc3QgcmVsYXRpb25QYXRoID0gW1xuXHRcdFx0XHRxdWV1ZVR5cGUsXG5cdFx0XHRcdHJlbGF0aW9uTW9kZWxOYW1lLFxuXHRcdFx0XHRyZWxhdGlvbklkLFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRdO1xuXHRcdFx0bGV0IGlkcyA9IHN0YXRlLmdldEluKCByZWxhdGlvblBhdGggKSB8fCBTZXQoKTtcblx0XHRcdGlkcyA9IGlkcy5kZWxldGUoIG9sZElkICkuYWRkKCBuZXdJZCApO1xuXHRcdFx0cmV0dXJuIHN0YXRlLnNldEluKCByZWxhdGlvblBhdGgsIGlkcyApO1xuXHRcdH07XG5cdFx0aWYgKCBtYXBPcklkcyBpbnN0YW5jZW9mIE1hcCApIHtcblx0XHRcdGlmICggbWFwT3JJZHMuaGFzKCAnYWRkJyApICkge1xuXHRcdFx0XHRtYXBPcklkcy5nZXQoICdhZGQnICkuZm9yRWFjaCggKCByZWxhdGlvbklkICkgPT4ge1xuXHRcdFx0XHRcdHN0YXRlID0gdXBkYXRlSWRzKCAnYWRkJywgcmVsYXRpb25JZCApO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG1hcE9ySWRzLmhhcyggJ2RlbGV0ZScgKSApIHtcblx0XHRcdFx0bWFwT3JJZHMuZ2V0KCAnZGVsZXRlJyApLmZvckVhY2goICggcmVsYXRpb25JZCApID0+IHtcblx0XHRcdFx0XHRzdGF0ZSA9IHVwZGF0ZUlkcyggJ2RlbGV0ZScsIHJlbGF0aW9uSWQgKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIG1hcE9ySWRzIGluc3RhbmNlb2YgU2V0ICkge1xuXHRcdFx0Y29uc3QgcmVsYXRpb25QYXRoID0gWyAnaW5kZXgnLCByZWxhdGlvbk1vZGVsTmFtZSBdO1xuXHRcdFx0bWFwT3JJZHMuZm9yRWFjaCggKCByZWxhdGlvbklkICkgPT4ge1xuXHRcdFx0XHRsZXQgaW5kZXhSZWNvcmQgPSBzdGF0ZS5nZXRJbihcblx0XHRcdFx0XHRbIC4uLnJlbGF0aW9uUGF0aCwgcmVsYXRpb25JZCwgbW9kZWxOYW1lIF1cblx0XHRcdFx0KTtcblx0XHRcdFx0bGV0IGlkcyA9IGluZGV4UmVjb3JkLmdldCggc3RhdGVQcm9wZXJ0eSApIHx8IFNldCgpO1xuXHRcdFx0XHRpZHMgPSBpZHMuZGVsZXRlKCBvbGRJZCApLmFkZCggbmV3SWQgKTtcblx0XHRcdFx0aW5kZXhSZWNvcmQgPSBpbmRleFJlY29yZC5zZXQoIHN0YXRlUHJvcGVydHksIGlkcyApO1xuXHRcdFx0XHRzdGF0ZSA9IHN0YXRlLnNldEluKFxuXHRcdFx0XHRcdFsgLi4ucmVsYXRpb25QYXRoLCByZWxhdGlvbklkLCBtb2RlbE5hbWUgXSxcblx0XHRcdFx0XHRpbmRleFJlY29yZFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblx0fSApO1xuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIFRoaXMgZW5zdXJlcyB0aGF0IGZvciBpbmNvbWluZyByZWxhdGlvbiBzdGF0ZSwgcmVsYXRpb25zIGFyZSByZWNvcmRlZCBpbiBvbmVcbiAqIGRpcmVjdGlvbi4gIEZvciBleGFtcGxlIGFkZGluZyBhIHJlbGF0aW9uIGZvciBgZXZlbnRgIHRvIGBkYXRldGltZWAgYW5kIHRoZW5cbiAqIHNvbWV0aW1lIGxhdGVyIGBkYXRldGltZWAgdG8gYGV2ZW50YCBmb3IgdGhlIHNhbWUgZW50aXRpZXMgc2hvdWxkIHJlc3VsdCBpblxuICoganVzdCBhIHNpbmdsZSByZWNvcmQsIG5vdCB0d28uXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgYWN0aW9uIG9iamVjdCB0byB3b3JrIHdpdGggYWZ0ZXIgbm9ybWFsaXphdGlvbi5cbiAqL1xuY29uc3Qgbm9ybWFsaXplQWN0aW9uRm9yU3RhdGUgPSAoIHN0YXRlLCBhY3Rpb24gKSA9PiB7XG5cdC8vIG5vcm1hbGl6ZUlkc1xuXHRhY3Rpb24uZW50aXR5SWQgPSBub3JtYWxpemVFbnRpdHlJZCggYWN0aW9uLmVudGl0eUlkICk7XG5cdGFjdGlvbi5yZWxhdGlvbkVudGl0eUlkID0gbm9ybWFsaXplRW50aXR5SWQoIGFjdGlvbi5yZWxhdGlvbkVudGl0eUlkICk7XG5cdC8vIHdlIG9ubHkgdXNlIGluZGV4IHRvIGhlbHAgd2l0aCBub3JtYWxpemF0aW9uXG5cdGNvbnN0IGluZGV4ID0gc3RhdGUuZ2V0KCAnaW5kZXgnICk7XG5cdGNvbnN0IG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ubW9kZWxOYW1lICk7XG5cdGNvbnN0IHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ucmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IHsgcmVsYXRpb25FbnRpdHlJZCwgZW50aXR5SWQgfSA9IGFjdGlvbjtcblx0aWYgKCBtb2RlbE5hbWUgJiZcblx0XHRyZWxhdGlvbk5hbWUgJiZcblx0XHRpbmRleC5oYXMoIG1vZGVsTmFtZSApXG5cdCkge1xuXHRcdC8vIG9rYXkgdGhpcyBtb2RlbCBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgYXMgYSByZWxhdGlvbiBvbiBhbm90aGVyIG1vZGVsXG5cdFx0Ly8gc28gbGV0J3Mgbm9ybWFsaXplIGFuZCBtYWtlIGl0IHRoZSByZWxhdGlvbiBpbnN0ZWFkLlxuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5hY3Rpb24sXG5cdFx0XHRtb2RlbE5hbWU6IHJlbGF0aW9uTmFtZSxcblx0XHRcdGVudGl0eUlkOiByZWxhdGlvbkVudGl0eUlkLFxuXHRcdFx0cmVsYXRpb25OYW1lOiBtb2RlbE5hbWUsXG5cdFx0XHRyZWxhdGlvbkVudGl0eUlkOiBlbnRpdHlJZCxcblx0XHR9O1xuXHR9XG5cdC8vIHdlIGNhbiByZXR1cm4gYXMgaXMgYnV0IGxldHMgbm9ybWFsaXplIHRoZSBpbmNvbWluZyBuYW1lc1xuXHRyZXR1cm4ge1xuXHRcdC4uLmFjdGlvbixcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHR9O1xufTtcblxuLyoqXG4gKiBSZWR1Y2VyIGZvciBkaXJ0eSByZWxhdGlvbiBzdGF0ZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IFJldHVybnMgb3JpZ2luYWwgc3RhdGUgaWYgbm8gY2hhbmdlcywgb3RoZXJ3aXNlIG5ldyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gZGlydHlSZWxhdGlvbnMoIHN0YXRlLCBhY3Rpb24gKSB7XG5cdGFjdGlvbiA9IG5vcm1hbGl6ZUFjdGlvbkZvclN0YXRlKCBzdGF0ZSwgYWN0aW9uICk7XG5cdGNvbnN0IHsgdHlwZSB9ID0gYWN0aW9uO1xuXHRjb25zdCByZWxhdGlvbk1hcCA9IGdldFJlbGF0aW9uTWFwKCBzdGF0ZSwgYWN0aW9uICk7XG5cdC8vIGRvZXMgdGhpcyBldmVuIG5lZWQgYW4gdXBkYXRlP1xuXHRpZiAoICEgcmVxdWlyZXNVcGRhdGUoIHN0YXRlLCBhY3Rpb24sIHJlbGF0aW9uTWFwICkgKSB7XG5cdFx0cmV0dXJuIHN0YXRlO1xuXHR9XG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OOlxuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OOlxuXHRcdFx0c3RhdGUgPSBzdGF0ZS5zZXQoXG5cdFx0XHRcdCdpbmRleCcsXG5cdFx0XHRcdGluZGV4UmVsYXRpb25zKFxuXHRcdFx0XHRcdE1hcCggc3RhdGUuZ2V0KCAnaW5kZXgnICkgKSxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0cmVsYXRpb25NYXBcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBzdGF0ZS5zZXQoXG5cdFx0XHRcdCdhZGQnLFxuXHRcdFx0XHR1cGRhdGVSZWxhdGlvblN0YXRlKFxuXHRcdFx0XHRcdE1hcCggc3RhdGUuZ2V0KCAnYWRkJyApICksXG5cdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdHJlbGF0aW9uTWFwXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OOlxuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OOlxuXHRcdFx0Ly8gaWYgdGhlIHJlbGF0aW9uIG9yIGVudGl0eSBpZCBpcyBhIGN1aWQsIHRoZW4gd2Ugc2tpcCB0aGlzIGJlY2F1c2Vcblx0XHRcdC8vIHRoZSByZWxhdGlvbiBoYXMgbmV2ZXIgYmVlbiBwZXJzaXN0ZWQgYW55d2F5cy5cblx0XHRcdGlmIChcblx0XHRcdFx0Y3VpZC5pc0N1aWQoIGFjdGlvbi5yZWxhdGlvbkVudGl0eUlkICkgfHxcblx0XHRcdFx0Y3VpZC5pc0N1aWQoIGFjdGlvbi5lbnRpdHlJZCApXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0fVxuXHRcdFx0c3RhdGUgPSBzdGF0ZS5zZXQoXG5cdFx0XHRcdCdpbmRleCcsXG5cdFx0XHRcdGluZGV4UmVsYXRpb25zKFxuXHRcdFx0XHRcdE1hcCggc3RhdGUuZ2V0KCAnaW5kZXgnICkgKSxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0cmVsYXRpb25NYXBcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBzdGF0ZS5zZXQoXG5cdFx0XHRcdCdkZWxldGUnLFxuXHRcdFx0XHR1cGRhdGVSZWxhdGlvblN0YXRlKFxuXHRcdFx0XHRcdE1hcCggc3RhdGUuZ2V0KCAnZGVsZXRlJyApICksXG5cdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdHJlbGF0aW9uTWFwXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdH1cblx0cmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJlbW92aW5nIGVudGl0eSBpZCBpbiB0aGUgc3RhdGUgZm9yIGEgZ2l2ZW4gbW9kZWxOYW1lXG4gKiB3aGljaCBtYXkgZXhpc3QgYXMgYSByZWxhdGlvbiBpbiB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZSBJbW11dGFibGUgY29sbGVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IG1vZGVsRGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIGZvciB1c2UgaW4gdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gSW1tdXRhYmxlIGNvbGxlY3Rpb24gIGVpdGhlciB0aGUgb3JpZ2luYWwgc3RhdGUgb3IgYSBuZXcgc3RhdGUuXG4gKi9cbmNvbnN0IGNsZWFyUmVsYXRlZEVudGl0aWVzRm9yRW50aXR5ID0gKFxuXHRzdGF0ZSxcblx0bW9kZWxEYXRhXG4pID0+IHtcblx0Y29uc3Qge1xuXHRcdG1vZGVsUmVtb3ZlZCxcblx0XHRlbnRpdHlJZFJlbW92ZWQsXG5cdFx0aW5kZXhUeXBlLFxuXHRcdHJlbGF0aW9uVHlwZXMsXG5cdH0gPSBtb2RlbERhdGE7XG5cblx0Y29uc3QgcmVjb3JkUGF0aCA9IFtcblx0XHRpbmRleFR5cGUsXG5cdFx0bW9kZWxSZW1vdmVkLFxuXHRcdGVudGl0eUlkUmVtb3ZlZCxcblx0XTtcblxuXHRjb25zdCBjbGVhckVudGl0eUlkc0luUGF0aCA9ICggc3ViU3RhdGUsIHBhdGggKSA9PiB7XG5cdFx0aWYgKCBzdWJTdGF0ZS5oYXNJbiggcGF0aCApICkge1xuXHRcdFx0bGV0IGVudGl0eUlkcyA9IHN1YlN0YXRlLmdldEluKCBwYXRoICkgfHwgU2V0KCk7XG5cdFx0XHRlbnRpdHlJZHMgPSBlbnRpdHlJZHMuZGVsZXRlKCBlbnRpdHlJZFJlbW92ZWQgKTtcblx0XHRcdGlmICggISBlbnRpdHlJZHMuaXNFbXB0eSgpICkge1xuXHRcdFx0XHRzdWJTdGF0ZS5zZXRJbiggcGF0aCwgZW50aXR5SWRzICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZW1vdmVFbXB0eUZyb21TdGF0ZShcblx0XHRcdFx0XHRzdWJTdGF0ZSxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0aWYgKCBzdGF0ZS5oYXNJbiggcmVjb3JkUGF0aCApICkge1xuXHRcdHN0YXRlID0gc3RhdGUud2l0aE11dGF0aW9ucyggKCBzdWJTdGF0ZSApID0+IHtcblx0XHRcdGNvbnN0IG1haW5SZWNvcmQgPSBzdWJTdGF0ZS5nZXRJbiggcmVjb3JkUGF0aCApO1xuXHRcdFx0cmVtb3ZlRW1wdHlGcm9tU3RhdGUoXG5cdFx0XHRcdHN1YlN0YXRlLFxuXHRcdFx0XHRyZWNvcmRQYXRoLFxuXHRcdFx0XHQxLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KTtcblx0XHRcdG1haW5SZWNvcmQuZm9yRWFjaCggKCByZWxhdGlvblJlY29yZCwgcmVsYXRpb25Nb2RlbE5hbWUgKSA9PiB7XG5cdFx0XHRcdGlmICggcmVsYXRpb25SZWNvcmQgaW5zdGFuY2VvZiBTZXQgKSB7XG5cdFx0XHRcdFx0cmVsYXRpb25SZWNvcmQuZm9yRWFjaCggKCByZWxhdGlvbklkICkgPT4ge1xuXHRcdFx0XHRcdFx0Y2xlYXJFbnRpdHlJZHNJblBhdGgoXG5cdFx0XHRcdFx0XHRcdHN1YlN0YXRlLFxuXHRcdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdFx0J2luZGV4Jyxcblx0XHRcdFx0XHRcdFx0XHRyZWxhdGlvbk1vZGVsTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRyZWxhdGlvbklkLFxuXHRcdFx0XHRcdFx0XHRcdG1vZGVsUmVtb3ZlZCxcblx0XHRcdFx0XHRcdFx0XHRpbmRleFR5cGUsXG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdHJlbGF0aW9uVHlwZXMgIT09IG51bGwgJiZcblx0XHRcdFx0XHRyZWxhdGlvblJlY29yZCBpbnN0YW5jZW9mIE1hcFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZWxhdGlvblR5cGVzLmZvckVhY2goICggcmVsYXRpb25UeXBlICkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCByZWxhdGlvblJlY29yZC5oYXMoIHJlbGF0aW9uVHlwZSApICkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCByZWxhdGlvbklkcyA9IHJlbGF0aW9uUmVjb3JkLmdldChcblx0XHRcdFx0XHRcdFx0XHRyZWxhdGlvblR5cGVcblx0XHRcdFx0XHRcdFx0KSB8fCBTZXQoKTtcblx0XHRcdFx0XHRcdFx0cmVsYXRpb25JZHMuZm9yRWFjaCggKCByZWxhdGlvbklkICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNsZWFyRW50aXR5SWRzSW5QYXRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViU3RhdGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlbGF0aW9uVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVsYXRpb25Nb2RlbE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlbGF0aW9uSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1vZGVsUmVtb3ZlZCxcblx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogSGFuZGxlcyByZW1vdmluZyBhbGwgcmVsYXRpb25zaGlwcyBpbiB0aGUgZGlydHkgcmVsYXRpb25zIHN0YXRlIGZvciB0aGUgZ2l2ZW5cbiAqIGFjdGlvbiBvYmplY3QgKGNvbnRhaW5pbmcgbW9kZWxOYW1lIGFuZCBlbnRpdHlJZClcbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBFaXRoZXIgdGhlIG9yaWdpbmFsIHN0YXRlIG9yIG5ldyBzdGF0ZSBpZiBpdCB3YXMgdXBkYXRlZC5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlUmVsYXRlZEVudGl0aWVzRm9yRW50aXR5KCBzdGF0ZSwgYWN0aW9uICkge1xuXHRjb25zdCBtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLm1vZGVsTmFtZSApO1xuXHRjb25zdCBlbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCBhY3Rpb24uZW50aXR5SWQgKTtcblx0W1xuXHRcdFsgbW9kZWxOYW1lLCBlbnRpdHlJZCwgJ2luZGV4JywgWyAnYWRkJywgJ2RlbGV0ZScgXSBdLFxuXHRcdFsgbW9kZWxOYW1lLCBlbnRpdHlJZCwgJ2FkZCcgXSxcblx0XHRbIG1vZGVsTmFtZSwgZW50aXR5SWQsICdkZWxldGUnIF0sXG5cdF0uZm9yRWFjaCggKCBbXG5cdFx0bW9kZWxSZW1vdmVkLFxuXHRcdGVudGl0eUlkUmVtb3ZlZCxcblx0XHRpbmRleFR5cGUsXG5cdFx0cmVsYXRpb25UeXBlcyA9IG51bGwsXG5cdF0gKSA9PiB7XG5cdFx0c3RhdGUgPSBjbGVhclJlbGF0ZWRFbnRpdGllc0ZvckVudGl0eShcblx0XHRcdHN0YXRlLFxuXHRcdFx0eyBtb2RlbFJlbW92ZWQsIGVudGl0eUlkUmVtb3ZlZCwgaW5kZXhUeXBlLCByZWxhdGlvblR5cGVzIH1cblx0XHQpO1xuXHR9ICk7XG5cdHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsZWFyaW5nIHRoZSBnaXZlbiBtb2RlbCBmcm9tIHRoZSBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKlxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gTmV3IHN0YXRlLlxuICovXG5jb25zdCBjbGVhclN0YXRlRm9yTW9kZWwgPSAoIHN0YXRlLCBhY3Rpb24gKSA9PiB7XG5cdGNvbnN0IG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ubW9kZWxOYW1lICk7XG5cdC8vIGluZGV4IHJlY29yZCBwYXRoXG5cdHN0YXRlID0gY2xlYXJNb2RlbEZyb21TdWJzdGF0ZShcblx0XHRzdGF0ZSxcblx0XHQnaW5kZXgnLFxuXHRcdG1vZGVsTmFtZSxcblx0KTtcblxuXHQvLyBkZWxldGUgcmVjb3JkIHBhdGhcblx0c3RhdGUgPSBjbGVhck1vZGVsRnJvbVN1YnN0YXRlKFxuXHRcdHN0YXRlLFxuXHRcdCdkZWxldGUnLFxuXHRcdG1vZGVsTmFtZSxcblx0KTtcblxuXHQvLyBhZGQgcmVjb3JkIHBhdGhcblx0c3RhdGUgPSBjbGVhck1vZGVsRnJvbVN1YnN0YXRlKFxuXHRcdHN0YXRlLFxuXHRcdCdhZGQnLFxuXHRcdG1vZGVsTmFtZSxcblx0KTtcblx0cmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBGb3IgdGhlIGdpdmVuIGFyZ3VtZW50cyBjbGVhcnMgdGhlIG1vZGVsIGZyb20gdGhlIHN1YnN0YXRlIG9uIHRoZSBnaXZlbiBzdGF0ZVxuICogZm9yIHRoZSBnaXZlbiBzdWJzdGF0ZSBrZXkuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN1YlN0YXRlS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBUaGUgbmV3IHN0YXRlLlxuICovXG5jb25zdCBjbGVhck1vZGVsRnJvbVN1YnN0YXRlID0gKFxuXHRzdGF0ZSxcblx0c3ViU3RhdGVLZXksXG5cdG1vZGVsTmFtZSxcbikgPT4ge1xuXHRzdGF0ZSA9IHN0YXRlLmRlbGV0ZUluKCBbIHN1YlN0YXRlS2V5LCBtb2RlbE5hbWUgXSApO1xuXHRsZXQgc3ViU3RhdGUgPSBzdGF0ZS5nZXQoIHN1YlN0YXRlS2V5ICk7XG5cdHN1YlN0YXRlID0gc3ViU3RhdGUud2l0aE11dGF0aW9ucyggKCBtdXRhdGVkU3RhdGUgKSA9PiB7XG5cdFx0c3RhdGUuZ2V0KCBzdWJTdGF0ZUtleSApLmZvckVhY2goICggZW50aXR5TWFwcywgcmVsYXRpb25OYW1lICkgPT4ge1xuXHRcdFx0ZW50aXR5TWFwcy5mb3JFYWNoKCAoIG1vZGVsTWFwLCByZWxhdGlvbkVudGl0eUlkICkgPT4ge1xuXHRcdFx0XHRjb25zdCBkZWxldGVQYXRoID0gW1xuXHRcdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHRcdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0XTtcblx0XHRcdFx0bXV0YXRlZFN0YXRlLmRlbGV0ZUluKCBkZWxldGVQYXRoICk7XG5cdFx0XHRcdHJlbW92ZUVtcHR5RnJvbVN0YXRlKFxuXHRcdFx0XHRcdG11dGF0ZWRTdGF0ZSxcblx0XHRcdFx0XHRkZWxldGVQYXRoLFxuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9ICk7XG5cdHN0YXRlID0gc3RhdGUuc2V0KCBzdWJTdGF0ZUtleSwgc3ViU3RhdGUgKTtcblx0cmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBleHBvcnRzIHVzZWZ1bCBmb3IgdGVzdGluZy5cbiAqL1xuZXhwb3J0IHtcblx0cmVwbGFjZU9sZFJlbGF0aW9uSWRXaXRoTmV3UmVsYXRpb25JZCxcblx0cmVtb3ZlUmVsYXRlZEVudGl0aWVzRm9yRW50aXR5LFxuXHRkaXJ0eVJlbGF0aW9ucyxcbn07XG5cbi8qKlxuICogRGVmYXVsdCByZWR1Y2VyIGZvciBoYW5kbGluZyBkaXJ0eSByZWxhdGlvbiBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBSZXR1cm5zIG9yaWdpbmFsIHN0YXRlIGlmIG5vIGNoYW5nZXMsIG90aGVyd2lzZSBuZXcgc3RhdGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IChcblx0c3RhdGUgPSBmcm9tSlMoIERFRkFVTFRfQ09SRV9TVEFURS5kaXJ0eS5yZWxhdGlvbnMgKSxcblx0YWN0aW9uXG4pID0+IHtcblx0c3dpdGNoICggYWN0aW9uLnR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX1VQREFURURfRU5USVRZX0lEX0ZPUl9SRUxBVElPTlM6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZU9sZFJlbGF0aW9uSWRXaXRoTmV3UmVsYXRpb25JZCggc3RhdGUsIGFjdGlvbiApO1xuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX1JFTEFURURfRU5USVRJRVNfRk9SX0VOVElUWTpcblx0XHRcdHJldHVybiByZW1vdmVSZWxhdGVkRW50aXRpZXNGb3JFbnRpdHkoIHN0YXRlLCBhY3Rpb24gKTtcblx0XHRjYXNlIHJlc2V0VHlwZXMuUkVTRVRfQUxMX1NUQVRFOlxuXHRcdFx0cmV0dXJuIGZyb21KUyggREVGQVVMVF9DT1JFX1NUQVRFLmRpcnR5LnJlbGF0aW9ucyApO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9TVEFURV9GT1JfTU9ERUw6XG5cdFx0XHRyZXR1cm4gY2xlYXJTdGF0ZUZvck1vZGVsKCBzdGF0ZSwgYWN0aW9uICk7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OOlxuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OOlxuXHRcdGNhc2UgdHlwZXMuUkVDRUlWRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTjpcblx0XHRjYXNlIHR5cGVzLlJFTU9WRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTjpcblx0XHRcdHJldHVybiBkaXJ0eVJlbGF0aW9ucyggc3RhdGUsIGFjdGlvbiApO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgY29tYmluZVJlZHVjZXJzIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRlbGV0ZUVudGl0eSwgdHJhc2hFbnRpdHkgfSBmcm9tICcuL2RpcnR5LWVudGl0aWVzJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgcmVsYXRpb25zIH0gZnJvbSAnLi9kaXJ0eS1yZWxhdGlvbnMnO1xuXG4vKipcbiAqIFRoZSByb290IHN0YXRlICgnZGVsZXRlJywgJ3RyYXNoJywgcmVsYXRpb25zJykgaXMgYSBwbGFpbiBvYmplY3QsIGJ1dCB0aGVcbiAqIHNsaWNlcyBhcmUgaW1tdXRhYmxlIE1hcHMpLlxuICovXG5leHBvcnQgZGVmYXVsdCBjb21iaW5lUmVkdWNlcnMoIHtcblx0ZGVsZXRlOiBkZWxldGVFbnRpdHksXG5cdHRyYXNoOiB0cmFzaEVudGl0eSxcblx0cmVsYXRpb25zLFxufSApO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGZyb21KUywgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IGlzRW1wdHksIGRpZmZlcmVuY2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgREVGQVVMVF9DT1JFX1NUQVRFLCBzaW5ndWxhck1vZGVsTmFtZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHksIGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBub3JtYWxpemVFbnRpdHlJZCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgQUNUSU9OX1RZUEVTIH0gZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb24tdHlwZXMnO1xuY29uc3QgeyBlbnRpdGllczogdHlwZXMsIHJlc2V0czogcmVzZXRUeXBlcyB9ID0gQUNUSU9OX1RZUEVTO1xuXG4vKipcbiAqIFRoaXMgcmVwbGFjZXMgYW55IGVudGl0aWVzIGluIHRoZSBpbmNvbWluZyBvYmplY3Qgd2l0aCBtYXRjaGluZyBlbnRpdGllcyAoYnlcbiAqIGlkKSBpbiB0aGUgc3RhdGUgKGlmIHRoZXkgZXhpc3QpLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gZW50aXR5UmVjb3Jkc1xuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gTmV3IGVudGl0eVJlY29yZHMgb2JqZWN0LlxuICovXG5jb25zdCByZXBsYWNlRXhpc3RpbmdFbnRpdGllc0Zyb21TdGF0ZSA9ICggc3RhdGUsIG1vZGVsTmFtZSwgZW50aXR5UmVjb3JkcyApID0+IHtcblx0Y29uc3QgZXhpc3RpbmdFbnRpdGllcyA9IHN0YXRlLmdldCggbW9kZWxOYW1lLCBudWxsICk7XG5cdGlmICggZXhpc3RpbmdFbnRpdGllcyA9PT0gbnVsbCApIHtcblx0XHRyZXR1cm4gZW50aXR5UmVjb3Jkcztcblx0fVxuXHRyZXR1cm4gZW50aXR5UmVjb3Jkcy5tZXJnZSggZXhpc3RpbmdFbnRpdGllcyApO1xufTtcblxuLyoqXG4gKiBSZWR1Y2VyIGZvciByZWNlaXZpbmcgYW4gZW50aXR5IGludG8gdGhlIHN0YXRlLlxuICpcbiAqIFRoaXMgZG9lcyBub3QgcmVwbGFjZSBhbnkgZW50aXR5IHRoYXQgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IE5ldyBzdGF0ZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSBvdGhlcndpc2UgZXhpc3Rpbmcgc3RhdGUuXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVFbnRpdHkoIHN0YXRlLCBhY3Rpb24gKSB7XG5cdC8qKlxuXHQgKiBAdHlwZSB7c3RyaW5nfSBtb2RlbE5hbWVcblx0ICogQHR5cGUge0Jhc2VFbnRpdHl8bnVsbH0gZW50aXR5XG5cdCAqL1xuXHRjb25zdCB7IGVudGl0eSB9ID0gYWN0aW9uO1xuXG5cdGlmIChcblx0XHQhIGlzTW9kZWxFbnRpdHkoIGVudGl0eSApIHx8XG5cdFx0c3RhdGUuaGFzSW4oIFsgZW50aXR5Lm1vZGVsTmFtZSwgZW50aXR5LmlkIF0gKVxuXHQpIHtcblx0XHRyZXR1cm4gc3RhdGU7XG5cdH1cblx0cmV0dXJuIHN0YXRlLnNldEluKCBbIGVudGl0eS5tb2RlbE5hbWUsIGVudGl0eS5pZCBdLCBlbnRpdHkgKTtcbn1cblxuLyoqXG4gKiBBIHJlZHVjZXIgcmV0dXJuaW5nIHRoZSBuZXcgc3RhdGUgZm9yIGFjdGlvbi5cbiAqXG4gKiBIYW5kbGVzIHJlY2VpdmluZyBlbnRpdHkgcmVjb3JkcyBmcm9tIGEgcmVzdCByZXNwb25zZSBhbmQgY29udmVydGluZyB0aGVtIHRvXG4gKiBtb2RlbCBlbnRpdGllcyB1c2luZyB0aGUgcHJvdmlkZWQgZmFjdG9yeS5cbiAqXG4gKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBpbmNvbWluZyBlbnRpdHkgcmVjb3JkcyBhcmUgYW4gYXJyYXkgb2YgQmFzZUVudGl0eVxuICogY2hpbGRyZW4gaW5zdGFuY2VzLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IFRoZSBuZXcgc3RhdGUgKG9yIHRoZSBvcmlnaW5hbCBpZiBub1xuICogY2hhbmdlIGRldGVjdGVkIG9yIGFjdGlvbiBpc24ndCBoYW5kbGVkIGJ5IHRoaXMgbWV0aG9kKVxuICovXG5mdW5jdGlvbiByZWNlaXZlRW50aXR5UmVjb3Jkcyggc3RhdGUsIGFjdGlvbiApIHtcblx0Y29uc3QgeyB0eXBlLCBtb2RlbE5hbWUgfSA9IGFjdGlvbjtcblx0Ly8gY29udmVydCBmcm9tIGFycmF5IG9mIGVudGl0aWVzIHRvIGEgTWFwIGluZGV4ZWQgYnkgZW50aXR5IGlkLlxuXHRjb25zdCBpbmNvbWluZ0VudGl0aWVzID0gTWFwKCkud2l0aE11dGF0aW9ucyggKCBzdWJTdGF0ZSApID0+IHtcblx0XHRhY3Rpb24uZW50aXRpZXMuZm9yRWFjaChcblx0XHRcdCggZW50aXR5ICkgPT4ge1xuXHRcdFx0XHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBlbnRpdHksIG1vZGVsTmFtZSApICkge1xuXHRcdFx0XHRcdHN1YlN0YXRlLnNldCggZW50aXR5LmlkLCBlbnRpdHkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH0gKTtcblx0aWYgKCAhIHN0YXRlLmhhcyggbW9kZWxOYW1lICkgfHwgaW5jb21pbmdFbnRpdGllcy5pc0VtcHR5KCkgKSB7XG5cdFx0cmV0dXJuIHN0YXRlO1xuXHR9XG5cdGxldFx0dXBkYXRlU3RhdGUgPSBmYWxzZSxcblx0XHRlbnRpdHlSZWNvcmRzO1xuXHRzd2l0Y2ggKCB0eXBlICkge1xuXHRcdGNhc2UgdHlwZXMuUkVDRUlWRV9FTlRJVFlfUkVDT1JEUzpcblx0XHRcdC8vIGlmIGFsbCBpbmNvbWluZyBrZXlzIGV4aXN0IGluIHN0YXRlIGFscmVhZHkgdGhlbiB3ZSBkb24ndCBkb1xuXHRcdFx0Ly8gYW55dGhpbmdcblx0XHRcdGlmICggaXNFbXB0eSggZGlmZmVyZW5jZShcblx0XHRcdFx0QXJyYXkuZnJvbSggaW5jb21pbmdFbnRpdGllcy5rZXlzKCkgKSxcblx0XHRcdFx0QXJyYXkuZnJvbSggc3RhdGUuZ2V0KCBtb2RlbE5hbWUsIE1hcCgpICkua2V5cygpIClcblx0XHRcdCkgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHQvLyByZXBsYWNlIGFueSBpbmNvbWluZyBlbnRpdHlSZWNvcmRzIHdpdGggZXhpc3RpbmcgZW50aXR5UmVjb3JkcyBhbHJlYWR5XG5cdFx0XHQvLyBpbiB0aGUgc3RvcmUgc28gdGhpcyByZWdpc3RyeSBhY3RzIGFzIHRoZSBcImF1dGhvcml0eVwiXG5cdFx0XHQvLyBmb3IgZW50aXR5UmVjb3Jkcy5cblx0XHRcdGVudGl0eVJlY29yZHMgPSByZXBsYWNlRXhpc3RpbmdFbnRpdGllc0Zyb21TdGF0ZShcblx0XHRcdFx0c3RhdGUsXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0aW5jb21pbmdFbnRpdGllc1xuXHRcdFx0KTtcblx0XHRcdHVwZGF0ZVN0YXRlID0gdHJ1ZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgdHlwZXMuUkVDRUlWRV9BTkRfUkVQTEFDRV9FTlRJVFlfUkVDT1JEUzpcblx0XHRcdHVwZGF0ZVN0YXRlID0gdHJ1ZTtcblx0XHRcdGVudGl0eVJlY29yZHMgPSBzdGF0ZS5nZXQoIG1vZGVsTmFtZSwgTWFwKCkgKS5tZXJnZSggaW5jb21pbmdFbnRpdGllcyApO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKCB1cGRhdGVTdGF0ZSApIHtcblx0XHRyZXR1cm4gc3RhdGUuc2V0KCBtb2RlbE5hbWUsIGVudGl0eVJlY29yZHMgKTtcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQSByZWR1Y2VyIGhhbmRsaW5nIHRoZSByZW1vdmFsIG9mIGFuIGVudGl0eSBmcm9tIHN0YXRlIG1hdGNoaW5nIHRoZSBnaXZlblxuICogaWQuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gTmV3IG9yIGV4aXN0aW5nIHN0YXRlLlxuICovXG5mdW5jdGlvbiByZW1vdmVFbnRpdHlCeUlkKCBzdGF0ZSwgYWN0aW9uICkge1xuXHRjb25zdCB7IG1vZGVsTmFtZSwgZW50aXR5SWQgPSAwIH0gPSBhY3Rpb247XG5cdGNvbnN0IGlkID0gbm9ybWFsaXplRW50aXR5SWQoIGVudGl0eUlkICk7XG5cdHJldHVybiBzdGF0ZS5kZWxldGVJbiggWyBtb2RlbE5hbWUsIGlkIF0gKTtcbn1cblxuLyoqXG4gKiBFeHBvcnRzIHVzZWZ1bCBmb3IgdGVzdHMuXG4gKi9cbmV4cG9ydCB7XG5cdHJlY2VpdmVFbnRpdHksXG5cdHJlY2VpdmVFbnRpdHlSZWNvcmRzLFxuXHRyZW1vdmVFbnRpdHlCeUlkLFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IHJlZHVjZXIgZm9yIGhhbmRsaW5nIGVudGl0aWVzIGluIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IE5ldyBvciBleGlzdGluZyBzdGF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbnRpdGllcyhcblx0c3RhdGUgPSBmcm9tSlMoIERFRkFVTFRfQ09SRV9TVEFURS5lbnRpdGllcyApLFxuXHRhY3Rpb25cbikge1xuXHRpZiAoIGFjdGlvbi50eXBlICkge1xuXHRcdHN3aXRjaCAoIGFjdGlvbi50eXBlICkge1xuXHRcdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0VOVElUWV9SRUNPUkRTOlxuXHRcdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0FORF9SRVBMQUNFX0VOVElUWV9SRUNPUkRTOlxuXHRcdFx0XHRyZXR1cm4gcmVjZWl2ZUVudGl0eVJlY29yZHMoIHN0YXRlLCBhY3Rpb24gKTtcblx0XHRcdGNhc2UgdHlwZXMuUkVDRUlWRV9FTlRJVFk6XG5cdFx0XHRcdHJldHVybiByZWNlaXZlRW50aXR5KCBzdGF0ZSwgYWN0aW9uICk7XG5cdFx0XHRjYXNlIHR5cGVzLlJFTU9WRV9FTlRJVFlfQllfSUQgOlxuXHRcdFx0XHRyZXR1cm4gcmVtb3ZlRW50aXR5QnlJZCggc3RhdGUsIGFjdGlvbiApO1xuXHRcdFx0Y2FzZSByZXNldFR5cGVzLlJFU0VUX0FMTF9TVEFURSA6XG5cdFx0XHRcdHJldHVybiBmcm9tSlMoIERFRkFVTFRfQ09SRV9TVEFURS5lbnRpdGllcyApO1xuXHRcdFx0Y2FzZSByZXNldFR5cGVzLlJFU0VUX1NUQVRFX0ZPUl9NT0RFTCA6XG5cdFx0XHRcdHJldHVybiBzdGF0ZS5oYXMoIHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ubW9kZWxOYW1lICkgKSA/XG5cdFx0XHRcdFx0c3RhdGUuc2V0KCBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLm1vZGVsTmFtZSApLCBNYXAoKSApIDpcblx0XHRcdFx0XHRzdGF0ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHN0YXRlO1xufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGNvbWJpbmVSZWR1Y2VycyB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgZW50aXRpZXMgZnJvbSAnLi9lbnRpdGllcyc7XG5pbXBvcnQgcmVsYXRpb25zIGZyb20gJy4vcmVsYXRpb25zJztcbmltcG9ydCBkaXJ0eSBmcm9tICcuL2RpcnR5JztcbmltcG9ydCBtb2RlbFNwZWNpZmljIGZyb20gJy4vbW9kZWwtc3BlY2lmaWMtcmVkdWNlcnMnO1xuXG4vKipcbiAqIFJlZHVjZXJzIGZvciBlbnRpdGllcywgcmVsYXRpb25zIGFuZCBkaXJ0eSBzdGF0ZS5cbiAqXG4gKiBCZSBhd2FyZSB0aGF0IHRoZSByb290IHN0YXRlIGlzIGEgcGxhaW4gb2JqZWN0IGJ1dCB0aGUgc2xpY2VzIChlbnRpdGllcyxcbiAqIHJlbGF0aW9ucywgZGlydHkpIGFyZSBpbW11dGFibGUgTWFwcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY29tYmluZVJlZHVjZXJzKCB7XG5cdGVudGl0aWVzLFxuXHRyZWxhdGlvbnMsXG5cdGRpcnR5LFxuXHRtb2RlbFNwZWNpZmljLFxufSApO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IE1hcCB9IGZyb20gJ2ltbXV0YWJsZSc7XG5cbmltcG9ydCB7IEFDVElPTl9UWVBFUyB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9uLXR5cGVzJztcbmNvbnN0IHsgbW9kZWxTcGVjaWZpYzogdHlwZXMsIHJlc2V0czogcmVzZXRUeXBlcyB9ID0gQUNUSU9OX1RZUEVTO1xuXG4vKipcbiAqIEhhbmRsZSByZWNlaXZpbmcgYSBtb2RlbCBzcGVjaWZpYyBzZWxlY3RvciByZWNvcmQgaW50byB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtNYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtNYXB9IE5ldyBvciBleGlzdGluZyBzdGF0ZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFuZGxlUmVjZWl2ZVNlbGVjdG9yKCBzdGF0ZSA9IE1hcCgpLCBhY3Rpb24gKSB7XG5cdGNvbnN0IHtcblx0XHR0eXBlLFxuXHRcdHNlbGVjdG9yLFxuXHRcdGFyZ3MsXG5cdFx0dmFsdWUsXG5cdH0gPSBhY3Rpb247XG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX1NFTEVDVE9SX1ZBTFVFOlxuXHRcdFx0cmV0dXJuIHN0YXRlLnNldEluKCBbIHNlbGVjdG9yLCBKU09OLnN0cmluZ2lmeSggYXJncyApIF0sIHZhbHVlICk7XG5cdFx0Y2FzZSByZXNldFR5cGVzLlJFU0VUX0FMTF9NT0RFTF9TUEVDSUZJQzpcblx0XHRjYXNlIHJlc2V0VHlwZXMuUkVTRVRfQUxMX1NUQVRFOlxuXHRcdFx0cmV0dXJuIE1hcCgpO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9NT0RFTF9TUEVDSUZJQ19GT1JfU0VMRUNUT1I6XG5cdFx0XHRyZXR1cm4gc3RhdGUuZGVsZXRlKCBzZWxlY3RvciApO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9NT0RFTF9TUEVDSUZJQ19GT1JfU0VMRUNUT1JfQU5EX0FSR1M6XG5cdFx0XHRyZXR1cm4gc3RhdGUuZGVsZXRlSW4oIFsgc2VsZWN0b3IsIEpTT04uc3RyaW5naWZ5KCBhcmdzICkgXSApO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn1cbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0cy5cbiAqL1xuaW1wb3J0IHtcblx0REVGQVVMVF9DT1JFX1NUQVRFLFxuXHRzaW5ndWxhck1vZGVsTmFtZSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHtcblx0cmVtb3ZlRW1wdHlGcm9tU3RhdGUsXG5cdG5vcm1hbGl6ZUVudGl0eUlkLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcbmltcG9ydCB7IGZyb21KUywgU2V0LCBNYXAgfSBmcm9tICdpbW11dGFibGUnO1xuXG4vKipcbiAqIEludGVybmFsIEltcG9ydHNcbiAqL1xuaW1wb3J0IHsgQUNUSU9OX1RZUEVTIH0gZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb24tdHlwZXMnO1xuY29uc3QgeyByZWxhdGlvbnM6IHR5cGVzLCByZXNldHM6IHJlc2V0VHlwZXMgfSA9IEFDVElPTl9UWVBFUztcblxuLyoqXG4gKiBIYW5kbGVzIG5vcm1hbGl6aW5nIHRoZSBpbmNvbWluZyBhY3Rpb24gc28gdGhhdCB3ZSdyZSBhbHdheXMgb25seSByZWNlaXZpbmdcbiAqIHJlbGF0aW9uIGRhdGEgaW4gdGhlIHN0YXRlIG9yaWVudGVkIGZyb20gb25lIGRpcmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBFeGlzdGluZyBvciBuZXcgc3RhdGUuXG4gKi9cbmNvbnN0IG5vcm1hbGl6ZWRSZWNlaXZlQW5kUmVtb3ZlUmVsYXRpb25zID0gKCBzdGF0ZSwgYWN0aW9uICkgPT4ge1xuXHQvLyBmaXJzdCBub3JtYWxpemUgdGhlIGFjdGlvblxuXHRhY3Rpb24gPSB7XG5cdFx0Li4uYWN0aW9uLFxuXHRcdG1vZGVsTmFtZTogc2luZ3VsYXJNb2RlbE5hbWUoIGFjdGlvbi5tb2RlbE5hbWUgKSxcblx0XHRyZWxhdGlvbk5hbWU6IHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ucmVsYXRpb25OYW1lICksXG5cdFx0ZW50aXR5SWQ6IG5vcm1hbGl6ZUVudGl0eUlkKCBhY3Rpb24uZW50aXR5SWQgKSxcblx0fTtcblx0Y29uc3Qge1xuXHRcdG1vZGVsTmFtZSxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0cmVsYXRlZEVudGl0eUlkcyxcblx0XHRlbnRpdHlJZCxcblx0fSA9IGFjdGlvbjtcblxuXHQvLyBhZGQgdG8gc3RhdGUgZnJvbSB0aGUgY29udGV4dCBvZiB0aGUgbW9kZWxcblx0c3RhdGUgPSByZWNlaXZlQW5kUmVtb3ZlUmVsYXRpb25zKCBzdGF0ZSwgYWN0aW9uICk7XG5cblx0Ly8gYWRkIHRvIHN0YXRlIGZyb20gdGhlIGNvbnRleHQgb2YgdGhlIHJlbGF0aW9uXG5cdGNvbnN0IG5ld0FjdGlvbiA9IHtcblx0XHQuLi5hY3Rpb24sXG5cdFx0bW9kZWxOYW1lOiBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICksXG5cdFx0cmVsYXRpb25OYW1lOiBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICksXG5cdFx0cmVsYXRlZEVudGl0eUlkczogWyBlbnRpdHlJZCBdLFxuXHR9O1xuXG5cdHdoaWxlICggcmVsYXRlZEVudGl0eUlkcy5sZW5ndGggPiAwICkge1xuXHRcdG5ld0FjdGlvbi5lbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCByZWxhdGVkRW50aXR5SWRzLnBvcCgpICk7XG5cdFx0c3RhdGUgPSByZWNlaXZlQW5kUmVtb3ZlUmVsYXRpb25zKCBzdGF0ZSwgbmV3QWN0aW9uICk7XG5cdH1cblxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIFJlZHVjZXIgZm9yIHRoZSByZWxhdGlvbnMgc3RhdGUgaW4gdGhlIHN0b3JlLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IEVpdGhlciBhIG5ldyBzdGF0ZSBvciB0aGUgZXhpc3Rpbmcgc3RhdGUuXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVBbmRSZW1vdmVSZWxhdGlvbnMoIHN0YXRlLCBhY3Rpb24gKSB7XG5cdGNvbnN0IHtcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdGVudGl0eUlkLFxuXHRcdHR5cGUsXG5cdH0gPSBhY3Rpb247XG5cdGNvbnN0IHJlbGF0aW9uRW50aXR5SWRzID0gU2V0KCBhY3Rpb24ucmVsYXRlZEVudGl0eUlkcyApO1xuXG5cdGNvbnN0IHBhdGggPSBbIG1vZGVsTmFtZSwgZW50aXR5SWQsIHJlbGF0aW9uTmFtZSBdO1xuXHRjb25zdCBleGlzdGluZ0lkcyA9IHN0YXRlLmdldEluKCBwYXRoLCBTZXQoKSApO1xuXG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX1JFTEFURURfRU5USVRZX0lEUzpcblx0XHRcdHJldHVybiBzdGF0ZS5zZXRJbihcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0ZXhpc3RpbmdJZHMuY29uY2F0KCByZWxhdGlvbkVudGl0eUlkcyApXG5cdFx0XHQpO1xuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX1JFTEFURURfRU5USVRZX0lEUzpcblx0XHRcdGNvbnN0IGlkc0FmdGVyUmVtb3ZhbCA9IGV4aXN0aW5nSWRzLmZpbHRlcihcblx0XHRcdFx0KCBpZCApID0+ICEgcmVsYXRpb25FbnRpdHlJZHMua2V5T2YoIG5vcm1hbGl6ZUVudGl0eUlkKCBpZCApIClcblx0XHRcdCk7XG5cblx0XHRcdC8vIEltbXV0YWJsZS5TZXQoKS5maWx0ZXIoKSByZXR1cm5zIG5ldyBpbnN0YW5jZSwgc28gbGV0J3MgY29tcGFyZVxuXHRcdFx0Ly8gc2l6ZVxuXHRcdFx0aWYgKCBpZHNBZnRlclJlbW92YWwuY291bnQoKSA9PT0gZXhpc3RpbmdJZHMuY291bnQoKSApIHtcblx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuICEgaWRzQWZ0ZXJSZW1vdmFsLmlzRW1wdHkoKSA/XG5cdFx0XHRcdHN0YXRlLnNldEluKCBwYXRoLCBpZHNBZnRlclJlbW92YWwgKSA6XG5cdFx0XHRcdHJlbW92ZUVtcHR5RnJvbVN0YXRlKCBzdGF0ZSwgcGF0aCApO1xuXHR9XG5cblx0cmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFJlZHVjZXIgZm9yIGhhbmRsaW5nIGVudGl0eSBpZHMgaW4gdGhlIHJlbGF0aW9uIHRoYXQgaGF2ZSBhIGN1aWQgdGhhdCBoYXNcbiAqIGJlZW4gdXBkYXRlZCB3aXRoIGEgbmV3IGVudGl0eSBpZCBmcm9tIHRoZSBzZXJ2ZXIuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gRWl0aGVyIG5ldyBvciBvcmlnaW5hbCBzdGF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVFbnRpdHlJZEZvclJlbGF0aW9ucyggc3RhdGUsIGFjdGlvbiApIHtcblx0bGV0IHtcblx0XHRvbGRFbnRpdHlJZCxcblx0XHRuZXdFbnRpdHlJZCxcblx0XHRtb2RlbE5hbWUsXG5cdH0gPSBhY3Rpb247XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0b2xkRW50aXR5SWQgPSBub3JtYWxpemVFbnRpdHlJZCggb2xkRW50aXR5SWQgKTtcblx0bmV3RW50aXR5SWQgPSBub3JtYWxpemVFbnRpdHlJZCggbmV3RW50aXR5SWQgKTtcblxuXHQvLyBmcm9tIGNvbnRleHQgb2YgbW9kZWxOYW1lXG5cdGNvbnN0IG1vZGVsUmVjb3JkVG9SZXBsYWNlID0gc3RhdGUuZ2V0SW4oXG5cdFx0WyBtb2RlbE5hbWUsIG9sZEVudGl0eUlkIF0sXG5cdFx0TWFwKClcblx0KTtcblxuXHRpZiAoICEgbW9kZWxSZWNvcmRUb1JlcGxhY2UuaXNFbXB0eSgpICkge1xuXHRcdHN0YXRlID0gcmVwbGFjZVJlbGF0aW9uUmVjb3Jkcyhcblx0XHRcdHN0YXRlLFxuXHRcdFx0e1xuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdG9sZEVudGl0eUlkLFxuXHRcdFx0XHRuZXdFbnRpdHlJZCxcblx0XHRcdFx0bWFpblJlY29yZFRvUmVwbGFjZTogbW9kZWxSZWNvcmRUb1JlcGxhY2UsXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2QgZm9yIGhhbmRsaW5nIHJlcGxhY2luZyB0aGUgb2xkIGVudGl0eSBpZCBmcm9tIGluY29taW5nIG1vZGVsXG4gKiB3aXRoIHRoZSBwcm92aWRlZCBuZXcgaWQgZGF0YSAob3IganVzdCByZW1vdmluZyBpdCBpZiByZW1vdmVPbmx5IGlzIHRydWUpXG4gKiBUaGlzIGhhbmRsZXMgYm90aCB0aGUgaW5kZXggYW5kIGVudGl0eU1hcCBvYmplY3RzIGluIHRoZSByZWxhdGlvbnMgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1vZGVsRGF0YVxuICogQHBhcmFtIHtib29sZWFufSByZW1vdmVPbmx5IElmIHRydWUsIHRoZW4gdGhlIHZhbHVlIGZvciBvbGRFbnRpdHlJZCB3aWxsIGJlXG4gKiByZW1vdmVkIGZyb20gc3RhdGUgYW5kIG5ld0VudGl0eSB3aWxsIG5vdCBiZSBhZGRlZCB0byBzdGF0ZS5cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IFJldHVybnMgZWl0aGVyIG5ldyBvciBleGlzdGluZyBzdGF0ZS5cbiAqL1xuY29uc3QgcmVwbGFjZVJlbGF0aW9uUmVjb3JkcyA9IChcblx0c3RhdGUsXG5cdG1vZGVsRGF0YSxcblx0cmVtb3ZlT25seSA9IGZhbHNlLFxuKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRtb2RlbE5hbWUsXG5cdFx0b2xkRW50aXR5SWQsXG5cdFx0bmV3RW50aXR5SWQgPSAwLFxuXHRcdG1haW5SZWNvcmRUb1JlcGxhY2UsXG5cdH0gPSBtb2RlbERhdGE7XG5cblx0Ly8gZmlyc3QgZnJvbSBjb250ZXh0IG9mIG1vZGVsXG5cdGNvbnN0IG1haW5QYXRoID0gWyBtb2RlbE5hbWUsIG9sZEVudGl0eUlkIF07XG5cdHN0YXRlID0gc3RhdGUud2l0aE11dGF0aW9ucyggKCBzdWJTdGF0ZSApID0+IHtcblx0XHRzdWJTdGF0ZS5kZWxldGVJbiggbWFpblBhdGggKTtcblx0XHRtYWluUGF0aC5wb3AoKTtcblx0XHRpZiAoIHJlbW92ZU9ubHkgKSB7XG5cdFx0XHRpZiAoIHN1YlN0YXRlLmdldEluKCBtYWluUGF0aCApLmlzRW1wdHkoKSApIHtcblx0XHRcdFx0c3ViU3RhdGUuZGVsZXRlSW4oIG1haW5QYXRoICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN1YlN0YXRlLnNldEluKFxuXHRcdFx0XHRbIC4uLm1haW5QYXRoLCBuZXdFbnRpdHlJZCBdLFxuXHRcdFx0XHRtYWluUmVjb3JkVG9SZXBsYWNlXG5cdFx0XHQpO1xuXHRcdH1cblx0fSApO1xuXG5cdC8vIG5vdyB3ZSBsb29wIHRocm91Z2ggdGhlIHJlbGF0aW9ucyBvbiB0aGUgbWFpbiByZWNvcmQgYW5kIHVzZSB0aGF0IHRvXG5cdC8vIGNoYW5nZSB0aGUgdmFsdWVzIGluIHRoZSByZWxhdGlvbiBzdGF0ZXMuXG5cdG1haW5SZWNvcmRUb1JlcGxhY2UuZm9yRWFjaCggKCByZWxhdGlvbklkcywgcmVsYXRpb25OYW1lICkgPT4ge1xuXHRcdHJlbGF0aW9uSWRzID0gcmVsYXRpb25JZHMudG9BcnJheSgpO1xuXHRcdHN0YXRlID0gc3RhdGUud2l0aE11dGF0aW9ucyggKCBzdWJTdGF0ZSApID0+IHtcblx0XHRcdHdoaWxlICggcmVsYXRpb25JZHMubGVuZ3RoID4gMCApIHtcblx0XHRcdFx0Y29uc3QgcmVsYXRpb25QYXRoID0gW1xuXHRcdFx0XHRcdHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKSxcblx0XHRcdFx0XHRyZWxhdGlvbklkcy5wb3AoKSxcblx0XHRcdFx0XHRzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICksXG5cdFx0XHRcdF07XG5cdFx0XHRcdGxldCByZWxhdGlvblJlY29yZCA9IHN1YlN0YXRlLmdldEluKCByZWxhdGlvblBhdGgsIFNldCgpICk7XG5cdFx0XHRcdHJlbGF0aW9uUmVjb3JkID0gcmVsYXRpb25SZWNvcmQuZGVsZXRlKCBvbGRFbnRpdHlJZCApO1xuXHRcdFx0XHRpZiAoIHJlbW92ZU9ubHkgJiYgcmVsYXRpb25SZWNvcmQuaXNFbXB0eSgpICkge1xuXHRcdFx0XHRcdHJlbW92ZUVtcHR5RnJvbVN0YXRlKFxuXHRcdFx0XHRcdFx0c3ViU3RhdGUsXG5cdFx0XHRcdFx0XHRyZWxhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHQxLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlbGF0aW9uUmVjb3JkID0gcmVtb3ZlT25seSA/XG5cdFx0XHRcdFx0XHRyZWxhdGlvblJlY29yZCA6XG5cdFx0XHRcdFx0XHRyZWxhdGlvblJlY29yZC5hZGQoIG5ld0VudGl0eUlkICk7XG5cdFx0XHRcdFx0c3ViU3RhdGUuc2V0SW4oIHJlbGF0aW9uUGF0aCwgcmVsYXRpb25SZWNvcmQgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSApO1xuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYW55IHJlbGF0aW9uIHJlcXVlc3RzIGZvciByZWxhdGVkIGVudGl0aWVzIGluIHRoZSBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBlaXRoZXIgZXhpc3RpbmcgKGlmIG5vIGNoYW5nZXMpIG9yIG5ldyBzdGF0ZS5cbiAqL1xuY29uc3QgcmVtb3ZlUmVsYXRlZEVudGl0aWVzRm9yRW50aXR5ID0gKCBzdGF0ZSwgYWN0aW9uICkgPT4ge1xuXHRsZXQge1xuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0fSA9IGFjdGlvbjtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRlbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCBlbnRpdHlJZCApO1xuXG5cdGNvbnN0IG1vZGVsUmVjb3JkVG9SZXBsYWNlID0gc3RhdGUuZ2V0SW4oXG5cdFx0WyBtb2RlbE5hbWUsIGVudGl0eUlkIF0sXG5cdFx0TWFwKClcblx0KTtcblxuXHRpZiAoICEgbW9kZWxSZWNvcmRUb1JlcGxhY2UuaXNFbXB0eSgpICkge1xuXHRcdHN0YXRlID0gcmVwbGFjZVJlbGF0aW9uUmVjb3Jkcyhcblx0XHRcdHN0YXRlLFxuXHRcdFx0e1xuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdG9sZEVudGl0eUlkOiBlbnRpdHlJZCxcblx0XHRcdFx0bWFpblJlY29yZFRvUmVwbGFjZTogbW9kZWxSZWNvcmRUb1JlcGxhY2UsXG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgcmVzZXR0aW5nIHRoZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIG1vZGVsTmFtZSBpbiB0aGUgYWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBUaGUgbmV3IChvciBleGlzdGluZyBpZiBubyBjaGFuZ2VzKSBzdGF0ZS5cbiAqL1xuY29uc3QgcmVzZXRTdGF0ZUZvck1vZGVsID0gKCBzdGF0ZSwgYWN0aW9uICkgPT4ge1xuXHRjb25zdCBtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLm1vZGVsTmFtZSApO1xuXG5cdC8vIGdldCB0aGUgcmVsYXRpb25zIGZvciB0aGUgbW9kZWxcblx0Y29uc3QgbW9kZWxSZWxhdGlvbnMgPSBzdGF0ZS5nZXQoIG1vZGVsTmFtZSwgTWFwKCkgKTtcblxuXHRpZiAoICEgbW9kZWxSZWxhdGlvbnMuaXNFbXB0eSgpICkge1xuXHRcdC8vIGRlbGV0ZSB0aGUgbW9kZWxOYW1lIGZvcm0gdGhlIHN0YXRlXG5cdFx0c3RhdGUgPSBzdGF0ZS5kZWxldGUoIG1vZGVsTmFtZSApO1xuXG5cdFx0Ly8gbG9vcCB0aHJvdWdoIHRoZSByZWxhdGlvbnMgYW5kIGRlbGV0ZVxuXHRcdHN0YXRlID0gc3RhdGUud2l0aE11dGF0aW9ucyhcblx0XHRcdCggc3ViU3RhdGUgKSA9PiB7XG5cdFx0XHRcdG1vZGVsUmVsYXRpb25zLmZvckVhY2goICggcmVsYXRpb25TdGF0ZSApID0+IHtcblx0XHRcdFx0XHRyZWxhdGlvblN0YXRlLmZvckVhY2goICggcmVsYXRpb25JZHMsIHJlbGF0aW9uTmFtZSApID0+IHtcblx0XHRcdFx0XHRcdHJlbGF0aW9uSWRzID0gcmVsYXRpb25JZHMudG9BcnJheSgpO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCByZWxhdGlvbklkcy5sZW5ndGggPiAwICkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCByZWxhdGlvblBhdGggPSBbXG5cdFx0XHRcdFx0XHRcdFx0c2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApLFxuXHRcdFx0XHRcdFx0XHRcdHJlbGF0aW9uSWRzLnBvcCgpLFxuXHRcdFx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdFx0XHRsZXQgcmVsYXRpb25SZWNvcmQgPSBzdWJTdGF0ZS5nZXRJbihcblx0XHRcdFx0XHRcdFx0XHRyZWxhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0TWFwKClcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmVsYXRpb25SZWNvcmQgPSByZWxhdGlvblJlY29yZC5kZWxldGUoIG1vZGVsTmFtZSApO1xuXHRcdFx0XHRcdFx0XHRpZiAoIHJlbGF0aW9uUmVjb3JkLmlzRW1wdHkoKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZW1vdmVFbXB0eUZyb21TdGF0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHN1YlN0YXRlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVsYXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRzdWJTdGF0ZS5zZXRJbiggcmVsYXRpb25QYXRoLCByZWxhdGlvblJlY29yZCApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIGV4cG9ydCBmb3IgdGVzdHNcbiAqL1xuZXhwb3J0IHtcblx0bm9ybWFsaXplZFJlY2VpdmVBbmRSZW1vdmVSZWxhdGlvbnMsXG5cdHVwZGF0ZUVudGl0eUlkRm9yUmVsYXRpb25zLFxuXHRyZW1vdmVSZWxhdGVkRW50aXRpZXNGb3JFbnRpdHksXG59O1xuXG4vKipcbiAqIFJlZHVjZXIgZm9yIHJlbGF0aW9uIHJlbGF0ZWQgc3RhdGUgY2hhbmdlcy5cbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IE9yaWdpbmFsIHN0YXRlIGlmIG5vIGNoYW5nZSwgbmV3IHN0YXRlIGlmIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVsYXRpb25zKFxuXHRzdGF0ZSA9IGZyb21KUyggREVGQVVMVF9DT1JFX1NUQVRFLnJlbGF0aW9ucyApLFxuXHRhY3Rpb25cbikge1xuXHRzd2l0Y2ggKCBhY3Rpb24udHlwZSApIHtcblx0XHRjYXNlIHR5cGVzLlJFQ0VJVkVfUkVMQVRFRF9FTlRJVFlfSURTOlxuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX1JFTEFURURfRU5USVRZX0lEUzpcblx0XHRcdHJldHVybiBub3JtYWxpemVkUmVjZWl2ZUFuZFJlbW92ZVJlbGF0aW9ucyggc3RhdGUsIGFjdGlvbiApO1xuXHRcdGNhc2UgdHlwZXMuUkVDRUlWRV9VUERBVEVEX0VOVElUWV9JRF9GT1JfUkVMQVRJT05TOlxuXHRcdFx0cmV0dXJuIHVwZGF0ZUVudGl0eUlkRm9yUmVsYXRpb25zKCBzdGF0ZSwgYWN0aW9uICk7XG5cdFx0Y2FzZSB0eXBlcy5SRU1PVkVfUkVMQVRFRF9FTlRJVElFU19GT1JfRU5USVRZOlxuXHRcdFx0cmV0dXJuIHJlbW92ZVJlbGF0ZWRFbnRpdGllc0ZvckVudGl0eSggc3RhdGUsIGFjdGlvbiApO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9BTExfU1RBVEU6XG5cdFx0XHRyZXR1cm4gZnJvbUpTKCBERUZBVUxUX0NPUkVfU1RBVEUucmVsYXRpb25zICk7XG5cdFx0Y2FzZSByZXNldFR5cGVzLlJFU0VUX1NUQVRFX0ZPUl9NT0RFTDpcblx0XHRcdHJldHVybiByZXNldFN0YXRlRm9yTW9kZWwoIHN0YXRlLCBhY3Rpb24gKTtcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZ2V0RW5kcG9pbnQsIHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQgeyBmZXRjaCwgcmVzb2x2ZVNlbGVjdCB9IGZyb20gJy4uLy4uL2Jhc2UtY29udHJvbHMnO1xuaW1wb3J0IHsgcmVjZWl2ZUVudGl0eVJlY29yZHMgfSBmcm9tICcuLy4uL2FjdGlvbnMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgYXMgU0NIRU1BX1JFRFVDRVJfS0VZIH0gZnJvbSAnLi4vLi4vc2NoZW1hL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhcHBlbmRDYWxjdWxhdGVkRmllbGRzVG9QYXRoIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQSByZXNvbHZlciBmb3IgZ2V0dGluZyBhbiBlbnRpdHkgZm9yIHRoZSBnaXZlbiBtb2RlbCBuYW1lIGFuZCBlbnRpdHkgaWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcGFyYW0ge0FycmF5fSBjYWxjdWxhdGVkRmllbGRzXG4gKiBAcmV0dXJuIHtudWxsfEJhc2VFbnRpdHl9IElmIHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQsIHRoZSBlbnRpdHksXG4gKiBvdGhlcndpc2UgbnVsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBnZXRFbnRpdHlCeUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkLCBjYWxjdWxhdGVkRmllbGRzID0gW10gKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0bGV0IHBhdGggPSBgJHsgZ2V0RW5kcG9pbnQoIG1vZGVsTmFtZSApIH0vJHsgZW50aXR5SWQgfWA7XG5cdHBhdGggPSBhcHBlbmRDYWxjdWxhdGVkRmllbGRzVG9QYXRoKFxuXHRcdHBhdGgsXG5cdFx0Y2FsY3VsYXRlZEZpZWxkc1xuXHQpO1xuXHRjb25zdCBlbnRpdHkgPSB5aWVsZCBmZXRjaCggeyBwYXRoIH0gKTtcblx0Y29uc3QgZmFjdG9yeSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRGYWN0b3J5Rm9yTW9kZWwnLFxuXHRcdG1vZGVsTmFtZVxuXHQpO1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsKCBmYWN0b3J5LCBtb2RlbE5hbWUgKSApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRjb25zdCBmdWxsRW50aXR5ID0gZmFjdG9yeS5mcm9tRXhpc3RpbmcoIGVudGl0eSApO1xuXHR5aWVsZCByZWNlaXZlRW50aXR5UmVjb3JkcyggbW9kZWxOYW1lLCBbIGZ1bGxFbnRpdHkgXSApO1xuXHRyZXR1cm4gZnVsbEVudGl0eTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vZW50aXRpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWxhdGlvbnMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGNyZWF0ZUFuZEtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUsXG5cdGtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUsXG5cdHNpbmd1bGFyTW9kZWxOYW1lLFxuXHRwbHVyYWxNb2RlbE5hbWUsXG5cdHN0cmlwQmFzZVJvdXRlRnJvbVVybCxcblx0Z2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nLFxuXHRnZXRQcmltYXJ5S2V5LFxuXHRnZXRFbmRwb2ludCxcblx0bW9kZWxOYW1lRm9yUXVlcnlTdHJpbmcsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7XG5cdGlzTW9kZWxFbnRpdHlGYWN0b3J5T2ZNb2RlbCxcblx0aXNNb2RlbEVudGl0eSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBJbnZhbGlkTW9kZWxFbnRpdHkgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuaW1wb3J0IHsgaXNFbXB0eSwgaXNVbmRlZmluZWQsIGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgTWFwIGFzIEltbXV0YWJsZU1hcCB9IGZyb20gJ2ltbXV0YWJsZSc7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRmZXRjaCxcblx0ZGlzcGF0Y2gsXG5cdHNlbGVjdCxcblx0cmVzb2x2ZVNlbGVjdCxcblx0cmVzb2x2ZUdldEVudGl0eUJ5SWRGb3JJZHMsXG5cdHJlc29sdmVHZXRSZWxhdGVkRW50aXRpZXMsXG59IGZyb20gJy4uLy4uL2Jhc2UtY29udHJvbHMnO1xuaW1wb3J0IHtcblx0cmVjZWl2ZUVudGl0eVJlY29yZHMsXG5cdHJlY2VpdmVSZWxhdGVkRW50aXRpZXMsXG59IGZyb20gJy4vLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBrZWVwRXhpc3RpbmdFbnRpdGllc0luT2JqZWN0IH0gZnJvbSAnLi4vLi4vYmFzZS1tb2RlbCc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSBhcyBDT1JFX1JFRFVDRVJfS0VZIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIGFzIFNDSEVNQV9SRURVQ0VSX0tFWSB9IGZyb20gJy4uLy4uL3NjaGVtYS9jb25zdGFudHMnO1xuaW1wb3J0IHsgYXBwZW5kQ2FsY3VsYXRlZEZpZWxkc1RvUGF0aCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBERUZBVUxUX0VNUFRZX0FSUkFZID0gW107XG5cbi8qKlxuICogQSByZXNvbHZlciBmb3IgZ2V0dGluZyByZWxhdGlvbiBlbnRpdGllcyBmb3IgdGhlIGdpdmVuIG1vZGVsIG5hbWUgYW5kIGVudGl0eVxuICogZm9yIHRoYXQgbW9kZWwuXG4gKlxuICogQHBhcmFtIHtCYXNlRW50aXR5fSBlbnRpdHlcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk1vZGVsTmFtZVxuICogQHBhcmFtIHtBcnJheX0gY2FsY3VsYXRlZEZpZWxkc1xuICogQHJldHVybiB7W118QXJyYXk8QmFzZUVudGl0eT59IElmIHRoZXJlIGFyZSByZWxhdGlvbnMsIHJldHVybnMgYW4gYXJyYXkgb2ZcbiAqIEJhc2VFbnRpdHkgaW5zdGFuY2VzIGZvciB0aGUgcmVsYXRpb25zLCBvdGhlcndpc2UgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogZ2V0UmVsYXRlZEVudGl0aWVzKFxuXHRlbnRpdHksXG5cdHJlbGF0aW9uTW9kZWxOYW1lLFxuXHRjYWxjdWxhdGVkRmllbGRzID0gW11cbikge1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eSggZW50aXR5ICkgKSB7XG5cdFx0dGhyb3cgbmV3IEludmFsaWRNb2RlbEVudGl0eSggJycsIGVudGl0eSApO1xuXHR9XG5cdC8vIGlmIGVudGl0eSBpcyBuZXcgdGhlbiB0aGVyZSB3b24ndCBiZSBhbnkgcmVsYXRpb25zIGZvciBpdCBvbiB0aGUgc2VydmVyXG5cdC8vIHlldCwgc28gbGV0J3MganVzdCByZXR1cm4gZWFybHkuXG5cdGlmICggZW50aXR5LmlzTmV3ICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHR9XG5cdHJlbGF0aW9uTW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTW9kZWxOYW1lICk7XG5cdGNvbnN0IHBsdXJhbFJlbGF0aW9uTmFtZSA9IHBsdXJhbE1vZGVsTmFtZSggcmVsYXRpb25Nb2RlbE5hbWUgKTtcblx0Y29uc3QgbW9kZWxOYW1lID0gZW50aXR5Lm1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRjb25zdCByZWxhdGlvblJlc291cmNlUHJvcGVydHkgPSBwbHVyYWxSZWxhdGlvbk5hbWUgKyAnUmVzb3VyY2UnO1xuXHRjb25zdCByZWxhdGlvbkVuZHBvaW50ID0gZW50aXR5WyByZWxhdGlvblJlc291cmNlUHJvcGVydHkgXSA/XG5cdFx0c3RyaXBCYXNlUm91dGVGcm9tVXJsKFxuXHRcdFx0ZW50aXR5WyByZWxhdGlvblJlc291cmNlUHJvcGVydHkgXS5yZXNvdXJjZUxpbmtcblx0XHQpIDpcblx0XHQnJztcblx0aWYgKCByZWxhdGlvbkVuZHBvaW50ID09PSAnJyApIHtcblx0XHR3YXJuaW5nKFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHQnVGhlcmUgaXMgbm8gcmVsYXRpb24gcmVzb3VyY2UgZm9yIHRoZSBnaXZlbiBtb2RlbCAoJXMpIGFuZCByZXF1ZXN0ZWQgcmVsYXRpb24gKCVzKScsXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0cGx1cmFsUmVsYXRpb25OYW1lXG5cdFx0XHQpXG5cdFx0KTtcblx0XHRyZXR1cm4gREVGQVVMVF9FTVBUWV9BUlJBWTtcblx0fVxuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0J3JlY2VpdmVSZWxhdGlvbkVuZHBvaW50Rm9yTW9kZWxFbnRpdHknLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHkuaWQsXG5cdFx0cmVsYXRpb25Nb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25FbmRwb2ludFxuXHQpO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlUmVsYXRpb25FbmRwb2ludEZvck1vZGVsRW50aXR5Jyxcblx0XHRbIG1vZGVsTmFtZSwgZW50aXR5LmlkLCByZWxhdGlvbk1vZGVsTmFtZSwgcmVsYXRpb25FbmRwb2ludCBdXG5cdCk7XG5cblx0Ly8gYWRkIGNhbGN1bGF0ZWRGaWVsZHMgdG8gZW5kcG9pbnQ/XG5cdGNvbnN0IHBhdGggPSBhcHBlbmRDYWxjdWxhdGVkRmllbGRzVG9QYXRoKFxuXHRcdHJlbGF0aW9uRW5kcG9pbnQsXG5cdFx0Y2FsY3VsYXRlZEZpZWxkc1xuXHQpO1xuXG5cdGxldCByZWxhdGlvbkVudGl0aWVzID0geWllbGQgZmV0Y2goIHsgcGF0aCB9ICk7XG5cblx0cmVsYXRpb25FbnRpdGllcyA9ICEgaXNFbXB0eSggcmVsYXRpb25FbnRpdGllcyApID9cblx0XHRyZWxhdGlvbkVudGl0aWVzIDpcblx0XHRERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHRyZWxhdGlvbkVudGl0aWVzID0gISBpc0FycmF5KCByZWxhdGlvbkVudGl0aWVzICkgP1xuXHRcdFsgcmVsYXRpb25FbnRpdGllcyBdIDpcblx0XHRyZWxhdGlvbkVudGl0aWVzO1xuXG5cdGlmICggISByZWxhdGlvbkVudGl0aWVzLmxlbmd0aCApIHtcblx0XHRyZXR1cm4gcmVsYXRpb25FbnRpdGllcztcblx0fVxuXG5cdGNvbnN0IGZhY3RvcnkgPSB5aWVsZCByZXNvbHZlU2VsZWN0KFxuXHRcdFNDSEVNQV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0RmFjdG9yeUZvck1vZGVsJyxcblx0XHRyZWxhdGlvbk1vZGVsTmFtZVxuXHQpO1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsKFxuXHRcdGZhY3RvcnksXG5cdFx0cmVsYXRpb25Nb2RlbE5hbWVcblx0KSApIHtcblx0XHRyZXR1cm4gREVGQVVMVF9FTVBUWV9BUlJBWTtcblx0fVxuXG5cdGxldCBmdWxsRW50aXRpZXMgPSBrZXlFbnRpdGllc0J5UHJpbWFyeUtleVZhbHVlKFxuXHRcdHJlbGF0aW9uTW9kZWxOYW1lLFxuXHRcdHJlbGF0aW9uRW50aXRpZXNcblx0KTtcblx0ZnVsbEVudGl0aWVzID0gY3JlYXRlQW5kS2V5RW50aXRpZXNCeVByaW1hcnlLZXlWYWx1ZShcblx0XHRmYWN0b3J5LFxuXHRcdGZ1bGxFbnRpdGllcyxcblx0KTtcblx0Y29uc3QgZW50aXR5SWRzID0gQXJyYXkuZnJvbSggZnVsbEVudGl0aWVzLmtleXMoKSApO1xuXG5cdC8vIGFyZSB0aGVyZSBhbHJlYWR5IGVudGl0aWVzIGZvciB0aGUgaWRzIGluIHRoZSBzdG9yZT8gSWYgc28uLi53ZSB1c2Vcblx0Ly8gdGhvc2UuXG5cdGNvbnN0IGV4aXN0aW5nRW50aXRpZXMgPSB5aWVsZCBzZWxlY3QoXG5cdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0RW50aXRpZXNCeUlkcycsXG5cdFx0cmVsYXRpb25Nb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWRzXG5cdCk7XG5cblx0aWYgKCAhIGlzRW1wdHkoIGV4aXN0aW5nRW50aXRpZXMgKSApIHtcblx0XHRmdWxsRW50aXRpZXMgPSBrZWVwRXhpc3RpbmdFbnRpdGllc0luT2JqZWN0KFxuXHRcdFx0ZXhpc3RpbmdFbnRpdGllcy5yZWR1Y2UoXG5cdFx0XHRcdCggZW50aXRpZXNPYmplY3QsIGVudGl0eU9iaiApID0+IHtcblx0XHRcdFx0XHRlbnRpdGllc09iamVjdFsgZW50aXR5T2JqLmlkIF0gPSBlbnRpdHk7XG5cdFx0XHRcdFx0cmV0dXJuIGVudGl0aWVzT2JqZWN0O1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7fVxuXHRcdFx0KSxcblx0XHRcdGZ1bGxFbnRpdGllcyxcblx0XHQpO1xuXHR9XG5cblx0Ly8gaWYgZnVsbEVudGl0aWVzIGlzIG5vdCBhIG1hcCwgdGhlbiB3ZSBuZWVkIHRvIG1ha2UgaXQgYSBtYXBcblx0Y29uc3QgZW50aXR5QXJyYXkgPSBmdWxsRW50aXRpZXMgaW5zdGFuY2VvZiBNYXAgP1xuXHRcdEFycmF5LmZyb20oIGZ1bGxFbnRpdGllcy52YWx1ZXMoKSApIDpcblx0XHRmdWxsRW50aXRpZXM7XG5cblx0eWllbGQgcmVjZWl2ZUVudGl0eVJlY29yZHMoXG5cdFx0cmVsYXRpb25Nb2RlbE5hbWUsXG5cdFx0ZW50aXR5QXJyYXlcblx0KTtcblx0eWllbGQgcmVjZWl2ZVJlbGF0ZWRFbnRpdGllcyhcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5LmlkLFxuXHRcdHJlbGF0aW9uTW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkcyxcblx0KTtcblx0eWllbGQgcmVzb2x2ZUdldFJlbGF0ZWRFbnRpdGllcyhcblx0XHRlbnRpdHksXG5cdFx0ZnVsbEVudGl0aWVzLFxuXHRcdGVudGl0eUlkcyxcblx0KTtcblx0eWllbGQgcmVzb2x2ZUdldEVudGl0eUJ5SWRGb3JJZHMoXG5cdFx0cmVsYXRpb25Nb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWRzXG5cdCk7XG5cdHJldHVybiBlbnRpdHlBcnJheTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlciBmb3IgdGhlIGdldFJlbGF0ZWRFbnRpdGllc0ZvcklkcyBzZWxlY3RvclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gZW50aXR5SWRzXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge0FycmF5fSBjYWxjdWxhdGVkRmllbGRzICBUaGlzIHdpbGwgcmV0cmlldmUgYW55IG5hbWVkIGNhbGN1bGF0ZWRcbiAqIGZpZWxkcyBmb3IgdGhlIHJlbGF0ZWQgZW50aXRpZXMuXG4gKlxuICogQHJldHVybiB7QXJyYXl8dW5kZWZpbmVkfSBJZiB0aGVyZSBpcyBubyBzY2hlbWEgZm9yIHRoZSByZWxhdGlvbiwgYW5cbiAqIGVtcHR5IGFycmF5IGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIGdldFJlbGF0ZWRFbnRpdGllc0Zvcklkcyhcblx0bW9kZWxOYW1lLFxuXHRlbnRpdHlJZHMsXG5cdHJlbGF0aW9uTmFtZSxcblx0Y2FsY3VsYXRlZEZpZWxkcyA9IFtdXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IGhhc0pvaW5UYWJsZSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdoYXNKb2luVGFibGVSZWxhdGlvbicsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdHJlbGF0aW9uTmFtZSxcblx0KTtcblx0Y29uc3QgcmVsYXRpb25TY2hlbWEgPSB5aWVsZCByZXNvbHZlU2VsZWN0KFxuXHRcdFNDSEVNQV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0UmVsYXRpb25TY2hlbWEnLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdCk7XG5cdGlmICggcmVsYXRpb25TY2hlbWEgPT09IG51bGwgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfRU1QVFlfQVJSQVk7XG5cdH1cblx0Y29uc3QgcmVsYXRpb25UeXBlID0gcmVsYXRpb25TY2hlbWEucmVsYXRpb25fdHlwZTtcblxuXHRjb25zdCBmYWN0b3J5ID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0J2dldEZhY3RvcnlGb3JNb2RlbCcsXG5cdFx0cmVsYXRpb25OYW1lXG5cdCk7XG5cdGNvbnN0IHJlc3BvbnNlID0geWllbGQgZmV0Y2goIHtcblx0XHRwYXRoOiBnZXRSZWxhdGlvblJlcXVlc3RVcmwoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRlbnRpdHlJZHMsXG5cdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRyZWxhdGlvblNjaGVtYSxcblx0XHRcdHJlbGF0aW9uVHlwZSxcblx0XHRcdGhhc0pvaW5UYWJsZSxcblx0XHRcdGNhbGN1bGF0ZWRGaWVsZHMsXG5cdFx0KSxcblx0fSApO1xuXHRpZiAoICEgcmVzcG9uc2UubGVuZ3RoICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHR9XG5cdGNvbnN0IHJlbGF0aW9uUHJpbWFyeUtleSA9IGdldFByaW1hcnlLZXkoIHJlbGF0aW9uTmFtZSApO1xuXHRjb25zdCBtb2RlbFByaW1hcnlLZXkgPSBnZXRQcmltYXJ5S2V5KCBtb2RlbE5hbWUgKTtcblx0Y29uc3QgcGx1cmFsUmVsYXRpb25OYW1lID0gcGx1cmFsTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0bGV0IGhhc1NldE1hcCA9IEltbXV0YWJsZU1hcCgpO1xuXHRpZiAoIGhhc0pvaW5UYWJsZSApIHtcblx0XHR3aGlsZSAoIHJlc3BvbnNlLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRjb25zdCByZWNvcmQgPSByZXNwb25zZS5wb3AoKTtcblx0XHRcdGxldCByZWxhdGlvblJlY29yZHMgPSByZWNvcmRbIHBsdXJhbFJlbGF0aW9uTmFtZSBdIHx8IG51bGw7XG5cdFx0XHRyZWxhdGlvblJlY29yZHMgPSByZWxhdGlvblJlY29yZHMgPT09IG51bGwgJiZcblx0XHRcdCEgaXNVbmRlZmluZWQoIHJlY29yZFsgcmVsYXRpb25OYW1lIF0gKSA/XG5cdFx0XHRcdHJlY29yZFsgcmVsYXRpb25OYW1lIF0gOlxuXHRcdFx0XHRyZWxhdGlvblJlY29yZHM7XG5cdFx0XHRyZWxhdGlvblJlY29yZHMgPSByZWxhdGlvblJlY29yZHMgIT09IG51bGwgJiZcblx0XHRcdFx0ISBpc0FycmF5KCByZWxhdGlvblJlY29yZHMgKSA/XG5cdFx0XHRcdFsgcmVsYXRpb25SZWNvcmRzIF0gOlxuXHRcdFx0XHRyZWxhdGlvblJlY29yZHM7XG5cdFx0XHRpZiAoIHJlbGF0aW9uUmVjb3JkcyAhPT0gbnVsbCApIHtcblx0XHRcdFx0d2hpbGUgKCByZWxhdGlvblJlY29yZHMubGVuZ3RoID4gMCApIHtcblx0XHRcdFx0XHRjb25zdCBtb2RlbElkID0gcmVjb3JkWyBtb2RlbFByaW1hcnlLZXkgXTtcblx0XHRcdFx0XHRjb25zdCByZWxhdGlvbklkID0gcmVjb3JkWyByZWxhdGlvblByaW1hcnlLZXkgXTtcblx0XHRcdFx0XHRjb25zdCByZWxhdGlvblJlY29yZCA9IHJlbGF0aW9uUmVjb3Jkcy5wb3AoKTtcblx0XHRcdFx0XHRpZiAoIHJlbGF0aW9uUmVjb3JkICE9PSBudWxsICYmXG5cdFx0XHRcdFx0XHQhIGhhc1NldE1hcC5oYXNJbiggWyBtb2RlbElkLCByZWxhdGlvbklkIF0gKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVsYXRpb25FbnRpdHkgPSBmYWN0b3J5LmZyb21FeGlzdGluZyhcblx0XHRcdFx0XHRcdFx0cmVsYXRpb25SZWNvcmQgKTtcblx0XHRcdFx0XHRcdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFx0XHRcdFx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdFx0XHRcdFx0XHQncmVzb2x2ZVJlbGF0aW9uUmVjb3JkRm9yUmVsYXRpb24nLFxuXHRcdFx0XHRcdFx0XHRyZWxhdGlvbkVudGl0eSxcblx0XHRcdFx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRcdFx0XHRtb2RlbElkLFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGhhc1NldE1hcCA9IGhhc1NldE1hcC5zZXRJbihcblx0XHRcdFx0XHRcdFx0WyBtb2RlbElkLCByZWxhdGlvbklkIF0sXG5cdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHdoaWxlICggcmVzcG9uc2UubGVuZ3RoID4gMCApIHtcblx0XHRcdGNvbnN0IHJlY29yZCA9IHJlc3BvbnNlLnBvcCgpO1xuXHRcdFx0Y29uc3QgbW9kZWxJZCA9IGlzQmVsb25nc1RvUmVsYXRpb24oIHJlbGF0aW9uVHlwZSApID9cblx0XHRcdFx0cmVjb3JkWyBtb2RlbFByaW1hcnlLZXkgXSA6XG5cdFx0XHRcdHJlY29yZFsgbW9kZWxOYW1lIF0uaWQ7XG5cdFx0XHRjb25zdCByZWxhdGlvbklkID0gcmVjb3JkWyByZWxhdGlvblByaW1hcnlLZXkgXTtcblx0XHRcdGlmICggISBoYXNTZXRNYXAuaGFzSW4oIFsgbW9kZWxJZCwgcmVsYXRpb25JZCBdICkgKSB7XG5cdFx0XHRcdGNvbnN0IHJlbGF0aW9uRW50aXR5ID0gZmFjdG9yeS5mcm9tRXhpc3RpbmcoXG5cdFx0XHRcdFx0cmVjb3JkWyByZWxhdGlvbk5hbWUgXVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR5aWVsZCBkaXNwYXRjaChcblx0XHRcdFx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdFx0XHRcdCdyZXNvbHZlUmVsYXRpb25SZWNvcmRGb3JSZWxhdGlvbicsXG5cdFx0XHRcdFx0cmVsYXRpb25FbnRpdHksXG5cdFx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRcdG1vZGVsSWQsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGhhc1NldE1hcCA9IGhhc1NldE1hcC5zZXRJbihcblx0XHRcdFx0XHRbIG1vZGVsSWQsIHJlbGF0aW9uSWQgXSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyB0aGUgdXJsIGZvciBhIHJlbGF0aW9uIGVudGl0eSByZXF1ZXN0IHVzaW5nIHRoZSBnaXZlblxuICogYXJndW1lbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtBcnJheX0gZW50aXR5SWRzXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gcmVsYXRpb25TY2hlbWFcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvblR5cGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzSm9pblRhYmxlXG4gKiBAcGFyYW0ge0FycmF5fSBjYWxjdWxhdGVkRmllbGRzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEEgcGF0aCB0byB1c2UgZm9yIGEgcmVsYXRpb24gcmVxdWVzdC5cbiAqL1xuY29uc3QgZ2V0UmVsYXRpb25SZXF1ZXN0VXJsID0gKFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkcyxcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvblNjaGVtYSxcblx0cmVsYXRpb25UeXBlLFxuXHRoYXNKb2luVGFibGUsXG5cdGNhbGN1bGF0ZWRGaWVsZHMsXG4pID0+IHtcblx0bGV0IHBhdGg7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRzd2l0Y2ggKCB0cnVlICkge1xuXHRcdGNhc2UgaGFzSm9pblRhYmxlOlxuXHRcdFx0cGF0aCA9IGdldEVuZHBvaW50KFxuXHRcdFx0XHRzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25TY2hlbWEuam9pbmluZ19tb2RlbF9uYW1lIClcblx0XHRcdFx0XHQudG9Mb3dlckNhc2UoKVxuXHRcdFx0KTtcblx0XHRcdHBhdGggKz0gJy8/d2hlcmUnICsgZ2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nKFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGVudGl0eUlkc1xuXHRcdFx0KTtcblx0XHRcdHBhdGggKz0gYCZpbmNsdWRlPSR7IG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nKCByZWxhdGlvbk5hbWUgKSB9LipgO1xuXHRcdFx0cGF0aCA9IGFwcGVuZENhbGN1bGF0ZWRGaWVsZHNUb1BhdGgoXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdGNhbGN1bGF0ZWRGaWVsZHMsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgaXNCZWxvbmdzVG9SZWxhdGlvbiggcmVsYXRpb25UeXBlICk6XG5cdFx0XHRwYXRoID0gZ2V0RW5kcG9pbnQoIG1vZGVsTmFtZSApO1xuXHRcdFx0cGF0aCArPSBgLz93aGVyZSR7IGdldFByaW1hcnlLZXlRdWVyeVN0cmluZyggbW9kZWxOYW1lLCBlbnRpdHlJZHMgKSB9YDtcblx0XHRcdHBhdGggKz0gYCZpbmNsdWRlPSR7IG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nKCByZWxhdGlvbk5hbWUgKSB9LipgO1xuXHRcdFx0cGF0aCA9IGFwcGVuZENhbGN1bGF0ZWRGaWVsZHNUb1BhdGgoXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdGNhbGN1bGF0ZWRGaWVsZHMsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyB3ZSBkbyB0aGUgcmV2ZXJzZSBlbmRwb2ludCBzbyB0aGF0IHdlIGFyZSBnZXR0aW5nIHRoZSBiZWxvbmdzIHRvXG5cdFx0XHQvLyByZWxhdGlvbiByZXNwb25zZXMgYmFjayBhbmQgaW5jbHVkaW5nIHRoZSByZWxhdGlvbiBlbnRpdGllcyB3ZVxuXHRcdFx0Ly8gd2FudCBpbiB0aGUgcmVzcG9uc2UgKGJlbG9uZ3MgdG8pLiAgU28gZm9yIGluc3RhbmNlIGlmIHRoZVxuXHRcdFx0Ly8gaW5jb21pbmcgYXJndW1lbnRzIGFyZTpcblx0XHRcdC8vIGBnZXRSZWxhdGVkRW50aXRpZXNGb3JFbnRpdHlJZHMoXG5cdFx0XHQvLyBcdFx0J2F0dGVuZGVlJyxcblx0XHRcdC8vIFx0XHRbIDEwLCAyMF0sXG5cdFx0XHQvLyBcdFx0J3JlZ2lzdHJhdGlvbidcblx0XHRcdC8vIClcblx0XHRcdC8vIHRoZW4gdGhlIHF1ZXJ5IHdvdWxkIGJlOlxuXHRcdFx0Ly8gL3JlZ2lzdHJhdGlvbnMvP3doZXJlW0FUVF9JRF1bSU5dPTEwLDIwJmluY2x1ZGU9QXR0ZW5kZWUuKlxuXHRcdFx0Ly8gYmFzaWNhbGx5IHRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IG9uZSB0byBvbmUgcmVsYXRpb25zIHJldHVybmVkXG5cdFx0XHQvLyBpbiB0aGUgcXVlcnkgZm9yIGVhc2llciBwYXJzaW5nL2Rpc3BhdGNoaW5nLlxuXHRcdFx0Ly8gQHRvZG8sIGN1cnJlbnRseSB0aGlzIHdpbGwgTk9UIGFjY291bnQgZm9yIHBhZ2luZy5cblx0XHRcdHBhdGggPSBnZXRFbmRwb2ludCggcmVsYXRpb25OYW1lICk7XG5cdFx0XHRwYXRoICs9IGAvP3doZXJlJHsgZ2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nKCBtb2RlbE5hbWUsIGVudGl0eUlkcyApIH1gO1xuXHRcdFx0cGF0aCArPSBgJmluY2x1ZGU9JHsgbW9kZWxOYW1lRm9yUXVlcnlTdHJpbmcoIG1vZGVsTmFtZSApIH0uKmA7XG5cdFx0XHRwYXRoID0gYXBwZW5kQ2FsY3VsYXRlZEZpZWxkc1RvUGF0aChcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0Y2FsY3VsYXRlZEZpZWxkcyxcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gcGF0aDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiByZWxhdGlvblR5cGUgaXMgZXF1YWwgdG8gYEVFX0JlbG9uZ3NfVG9fUmVsYXRpb25gXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uVHlwZVxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgdGhlIGdpdmVuIHJlbGF0aW9uVHlwZSBpcyBgRUVfQmVsb25nc19Ub19SZWxhdGlvbmBcbiAqL1xuY29uc3QgaXNCZWxvbmdzVG9SZWxhdGlvbiA9ICggcmVsYXRpb25UeXBlICkgPT4ge1xuXHRyZXR1cm4gcmVsYXRpb25UeXBlID09PSAnRUVfQmVsb25nc19Ub19SZWxhdGlvbic7XG59O1xuIiwiaW1wb3J0IHtcblx0bW9kZWxOYW1lRm9yUXVlcnlTdHJpbmcsXG5cdHNpbmd1bGFyTW9kZWxOYW1lLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBjYXN0QXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgYWRkUXVlcnlBcmdzIH0gZnJvbSAnQHdvcmRwcmVzcy91cmwnO1xuXG4vKipcbiAqIEFwcGVuZHMgcHJvdmlkZWQgY2FsY3VsYXRlZCBmaWVsZHMgdG8gdGhlIHByb3ZpZGVkIHBhdGggaWYgbm90IGVtcHR5LlxuICpcbiAqIEFsc28sIGlmIG1vZGVsTmFtZSBpcyBwYXNzZWQgaW4gdW5kZWZpbmVkLCB0aGVuIGFueSBmaWVsZHMgYXJlIGFwcGVuZGVkXG4gKiB3aXRob3V0IG1vZGlmaWNhdGlvbi4gIE90aGVyd2lzZSB0aGV5IHdpbGwgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbW9kZWxOYW1lIGFzXG4gKiBhIHBhcnQgb2YgdGhlIHF1ZXJ5IHRvIGluZGljYXRlIHdoYXQgbW9kZWwgdGhlIGNhbGN1bGF0ZWQgZmllbGRzIGFwcGx5IHRvLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGNhbGN1bGF0ZWRGaWVsZHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHBhdGggd2l0aCBjYWxjdWxhdGVkIGZpZWxkcyBhcHBlbmRlZCBpZiBwcmVzZW50LlxuICovXG5leHBvcnQgY29uc3QgYXBwZW5kQ2FsY3VsYXRlZEZpZWxkc1RvUGF0aCA9IChcblx0cGF0aCxcblx0Y2FsY3VsYXRlZEZpZWxkcyxcblx0bW9kZWxOYW1lXG4pID0+IHtcblx0Y2FsY3VsYXRlZEZpZWxkcyA9IGNhc3RBcnJheSggY2FsY3VsYXRlZEZpZWxkcyApO1xuXHRpZiAoIGNhbGN1bGF0ZWRGaWVsZHMubGVuZ3RoID4gMCApIHtcblx0XHQvLyBzZXR1cCBmaWVsZHMgc3RyaW5nXG5cdFx0Y29uc3QgbmFtZUZvclF1ZXJ5U3RyaW5nID0gbW9kZWxOYW1lICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0bW9kZWxOYW1lRm9yUXVlcnlTdHJpbmcoXG5cdFx0XHRcdHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKVxuXHRcdFx0KSA6XG5cdFx0XHQnJztcblx0XHRjb25zdCBxdWVyeVN0cmluZ3MgPSBuYW1lRm9yUXVlcnlTdHJpbmcgP1xuXHRcdFx0Y2FsY3VsYXRlZEZpZWxkcy5tYXAoXG5cdFx0XHRcdCggZmllbGQgKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGAkeyBuYW1lRm9yUXVlcnlTdHJpbmcgfS4keyBmaWVsZCB9YDtcblx0XHRcdFx0fSxcblx0XHRcdCkgOlxuXHRcdFx0Y2FsY3VsYXRlZEZpZWxkcztcblx0XHRwYXRoID0gYWRkUXVlcnlBcmdzKCBwYXRoLCB7IGNhbGN1bGF0ZTogcXVlcnlTdHJpbmdzLmpvaW4oKSB9ICk7XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjcmVhdGVTZWxlY3RvciBmcm9tICdyZW1lbW8nO1xuaW1wb3J0IHsgbm9ybWFsaXplRW50aXR5SWQgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIFJldHVybnMgYWxsIGVudGl0eSByZWNvcmRzIGZvciB0aGUgZ2l2ZW4gbW9kZWxOYW1lIGluIHRoZSBjdXJyZW50IHN0YXRlLlxuICogQW4gZW50aXR5IHJlY29yZCBpcyB0aGUgTWFwIG9mIGVudGl0aWVzIChlbnRpdHlJZCA9PiBlbnRpdHkpLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtPYmplY3Q8bnVtYmVyfHN0cmluZywgQmFzZUVudGl0eT59fG51bGx9IEEgY29sbGVjdGlvbiBvZiBlbnRpdHlcbiAqIHJlY29yZHMgZm9yIHRoZSBnaXZlbiBtb2RlbCBpbmRleGVkIGJ5IHByaW1hcnkga2V5IHZhbHVlIG9yIG51bGwgaWYgbm9uZVxuICogaGF2ZSBiZWVuIHNldCBpbiB0aGUgc3RhdGUuXG4gKi9cbmNvbnN0IGdldEVudGl0eVJlY29yZHNGb3JNb2RlbCA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdHJldHVybiBzdGF0ZS5lbnRpdGllcy5oYXMoIG1vZGVsTmFtZSApID9cblx0XHRcdHN0YXRlLmVudGl0aWVzLmdldCggbW9kZWxOYW1lICkudG9KUygpIDpcblx0XHRcdG51bGw7XG5cdH0sXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IFsgc3RhdGUuZW50aXRpZXMuZ2V0KCBtb2RlbE5hbWUgKSBdXG4pO1xuXG4vKipcbiAqIFJldHVybnMgYWxsIGVudGl0aWVzIGZvciB0aGUgZ2l2ZW4gbW9kZWwuXG4gKiBUaGlzIGRpZmZlcnMgZnJvbSBlbnRpdHlSZWNvcmRzLCBpbiB0aGF0IHRoZSBlbnRpdGllcyBhcmUgTk9UIGluZGV4ZWQgYnlcbiAqIHByaW1hcnkga2V5IHZhbHVlIGFuZCBhbiBBcnJheSBvZiBlbnRpdGllcyBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge0FycmF5PEJhc2VFbnRpdHk+fG51bGx9IEFuIGFycmF5IG9mIGVudGl0aWVzIGZvciB0aGUgZ2l2ZW4gbW9kZWwgb3JcbiAqIG51bGwgaWYgbm9uZSBoYXZlIGJlZW4gc2V0IGluIHRoZSBzdGF0ZS5cbiAqL1xuY29uc3QgZ2V0RW50aXRpZXNGb3JNb2RlbCA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdHJldHVybiBzdGF0ZS5lbnRpdGllcy5oYXMoIG1vZGVsTmFtZSApID9cblx0XHRcdHN0YXRlLmVudGl0aWVzLmdldCggbW9kZWxOYW1lICkudmFsdWVTZXEoKS50b0FycmF5KCkgOlxuXHRcdFx0W107XG5cdH0sXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IFsgc3RhdGUuZW50aXRpZXMuZ2V0KCBtb2RlbE5hbWUgKSBdLFxuKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtb2RlbCBlbnRpdHkgZm9yIHRoZSBnaXZlbiBtb2RlbCBhbmQgaWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHtCYXNlRW50aXR5fG51bGx9IFJldHVybnMgdGhlIG1vZGVsIGVudGl0eSBvciBudWxsLlxuICovXG5mdW5jdGlvbiBnZXRFbnRpdHlCeUlkKCBzdGF0ZSwgbW9kZWxOYW1lLCBlbnRpdHlJZCApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZXR1cm4gc3RhdGUuZW50aXRpZXMuZ2V0SW4oIFtcblx0XHRtb2RlbE5hbWUsXG5cdFx0bm9ybWFsaXplRW50aXR5SWQoIGVudGl0eUlkICksXG5cdF0gKSB8fCBudWxsO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBtb2RlbCBlbnRpdGllcyBmb3IgdGhlIHByb3ZpZGVkIGFycmF5IG9mIGlkcyBhbmQgbW9kZWwuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZ3xudW1iZXI+fSBlbnRpdHlJZHNcbiAqIEByZXR1cm4ge0FycmF5PEJhc2VFbnRpdHk+fG51bGx9IFJldHVybnMgYW4gYXJyYXkgb2YgbW9kZWwgZW50aXRpZXMgZm9yIHRoZVxuICogcHJvdmlkZWQgaWRzIG9yIG51bGwgaWYgbmV2ZXIgYmVlbiBzZXQuXG4gKi9cbmNvbnN0IGdldEVudGl0aWVzQnlJZHMgPSAoIHN0YXRlLCBtb2RlbE5hbWUsIGVudGl0eUlkcyApID0+IHtcblx0cmV0dXJuIHJldHJpZXZlRW50aXRpZXNCeUlkcyggc3RhdGUsIG1vZGVsTmFtZSwgZW50aXR5SWRzLmpvaW4oKSApO1xufTtcblxuZ2V0RW50aXRpZXNCeUlkcy5jbGVhciA9ICgpID0+IHJldHJpZXZlRW50aXRpZXNCeUlkcy5jbGVhcigpO1xuZ2V0RW50aXRpZXNCeUlkcy5nZXREZXBlbmRhbnRzID0gKCBzdGF0ZSwgbW9kZWxOYW1lICkgPT4gcmV0cmlldmVFbnRpdGllc0J5SWRzXG5cdC5nZXREZXBlbmRhbnRzKCBzdGF0ZSwgbW9kZWxOYW1lICk7XG5cbi8qKlxuICogUmV0cmlldmVzIGFuIGFycmF5IG9mIG1vZGVsIGVudGl0aWVzIGZvciB0aGUgcHJvdmlkZWQgYXJyYXkgb2YgaWRzIGFuZCBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbnRpdHlJZHMgIEEgY29tbWEgZGVsaW1pdGVkIHN0cmluZyBvZiBpZHMuICBUaGlzIGlzIHNvXG4gKiB3ZSBhcmUgcGFzc2luZyBhIHByaW1pdGl2ZSBhcmcgdG8gcmVtZW1vIGZvciBiZXR0ZXIgY2FjaGUgdmFsaWRhdGlvbi5cbiAqIEByZXR1cm4ge0FycmF5PEJhc2VFbnRpdHk+fG51bGx9IFJldHVybnMgYW4gYXJyYXkgb2YgbW9kZWwgZW50aXRpZXMgZm9yIHRoZVxuICogcHJvdmlkZWQgaWRzIG9yIG51bGwgaWYgbmV2ZXIgYmVlbiBzZXQuXG4gKi9cbmNvbnN0IHJldHJpZXZlRW50aXRpZXNCeUlkcyA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUsIGVudGl0eUlkcyApID0+IHtcblx0XHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdFx0ZW50aXR5SWRzID0gZW50aXR5SWRzLnNwbGl0KCAnLCcgKTtcblx0XHRjb25zdCBlbnRpdGllcyA9IFtdO1xuXHRcdGlmICggc3RhdGUuZW50aXRpZXMuaGFzKCBtb2RlbE5hbWUgKSApIHtcblx0XHRcdGVudGl0eUlkcy5mb3JFYWNoKCAoIGVudGl0eUlkICkgPT4ge1xuXHRcdFx0XHRjb25zdCBlbnRpdHkgPSBnZXRFbnRpdHlCeUlkKCBzdGF0ZSwgbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xuXHRcdFx0XHRpZiAoIGVudGl0eSAhPT0gbnVsbCApIHtcblx0XHRcdFx0XHRlbnRpdGllcy5wdXNoKCBlbnRpdHkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZW50aXRpZXM7XG5cdH0sXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IFsgc3RhdGUuZW50aXRpZXMuZ2V0KCBtb2RlbE5hbWUgKSBdXG4pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBlbnRpdHkgaWRzIHF1ZXVlZCBmb3IgdHJhc2ggZm9yIHRoZSBnaXZlbiBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge0FycmF5PG51bWJlcj59IEFuIGFycmF5IG9mIGVudGl0eSBpZHMuXG4gKi9cbmNvbnN0IGdldEVudGl0eUlkc1F1ZXVlZEZvclRyYXNoID0gY3JlYXRlU2VsZWN0b3IoXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IHtcblx0XHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdFx0cmV0dXJuIHN0YXRlLmRpcnR5LnRyYXNoLmhhcyggbW9kZWxOYW1lICkgP1xuXHRcdFx0c3RhdGUuZGlydHkudHJhc2guZ2V0KCBtb2RlbE5hbWUgKS50b0FycmF5KCkgOlxuXHRcdFx0W107XG5cdH0sXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IFsgc3RhdGUuZGlydHkudHJhc2guZ2V0KCBtb2RlbE5hbWUgKSBdXG4pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBlbnRpdHkgaWRzIHF1ZXVlZCBmb3IgZGVsZXRlIGZvciB0aGUgZ2l2ZW4gbW9kZWwuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtBcnJheTxudW1iZXJ8c3RyaW5nPn0gQW4gYXJyYXkgb2YgZW50aXR5IGlkcy5cbiAqL1xuY29uc3QgZ2V0RW50aXR5SWRzUXVldWVkRm9yRGVsZXRlID0gY3JlYXRlU2VsZWN0b3IoXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IHtcblx0XHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdFx0cmV0dXJuIHN0YXRlLmRpcnR5LmRlbGV0ZS5oYXMoIG1vZGVsTmFtZSApID9cblx0XHRcdHN0YXRlLmRpcnR5LmRlbGV0ZS5nZXQoIG1vZGVsTmFtZSApLnRvQXJyYXkoKSA6XG5cdFx0XHRbXTtcblx0fSxcblx0KCBzdGF0ZSwgbW9kZWxOYW1lICkgPT4gWyBzdGF0ZS5kaXJ0eS5kZWxldGUuZ2V0KCBtb2RlbE5hbWUgKSBdXG4pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgdGhlIG1vZGVscyBjdXJyZW50bHkgaGF2aW5nIGlkcyBxdWV1ZWQgZm9yIHRyYXNoXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcmV0dXJuIHtBcnJheTxzdHJpbmc+fSBBbiBhcnJheSBvZiBtb2RlbCBuYW1lcy5cbiAqL1xuY29uc3QgZ2V0TW9kZWxzUXVldWVkRm9yVHJhc2ggPSBjcmVhdGVTZWxlY3Rvcihcblx0KCBzdGF0ZSApID0+IHtcblx0XHRyZXR1cm4gc3RhdGUuZGlydHkudHJhc2gua2V5U2VxKCkudG9BcnJheSgpO1xuXHR9LFxuXHQoIHN0YXRlICkgPT4gWyBzdGF0ZS5kaXJ0eS50cmFzaCBdXG4pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgdGhlIG1vZGVscyBjdXJyZW50bHkgaGF2aW5nIGlkcyBxdWV1ZWQgZm9yIGRlbGV0ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEByZXR1cm4ge0FycmF5PHN0cmluZz59IEFuIGFycmF5IG9mIG1vZGVsIG5hbWVzLlxuICovXG5jb25zdCBnZXRNb2RlbHNRdWV1ZWRGb3JEZWxldGUgPSBjcmVhdGVTZWxlY3Rvcihcblx0KCBzdGF0ZSApID0+IHtcblx0XHRyZXR1cm4gc3RhdGUuZGlydHkuZGVsZXRlLmtleVNlcSgpLnRvQXJyYXkoKTtcblx0fSxcblx0KCBzdGF0ZSApID0+IFsgc3RhdGUuZGlydHkuZGVsZXRlIF1cbik7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3RhdGUuZW50aXRpZXMgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKlxuICogQHJldHVybiB7TWFwfSBUaGUgZW50aXRpZXMgc3RhdGUgaW1tdXRhYmxlIG1hcC5cbiAqL1xuY29uc3QgZ2V0QWxsRW50aXRpZXNJblN0YXRlID0gKCBzdGF0ZSApID0+IHN0YXRlLmVudGl0aWVzO1xuXG5leHBvcnQge1xuXHRnZXRFbnRpdHlSZWNvcmRzRm9yTW9kZWwsXG5cdGdldEVudGl0aWVzRm9yTW9kZWwsXG5cdGdldEVudGl0eUJ5SWQsXG5cdGdldEVudGl0aWVzQnlJZHMsXG5cdGdldEVudGl0eUlkc1F1ZXVlZEZvclRyYXNoLFxuXHRnZXRFbnRpdHlJZHNRdWV1ZWRGb3JEZWxldGUsXG5cdGdldE1vZGVsc1F1ZXVlZEZvckRlbGV0ZSxcblx0Z2V0TW9kZWxzUXVldWVkRm9yVHJhc2gsXG5cdGdldEFsbEVudGl0aWVzSW5TdGF0ZSxcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL2VudGl0aWVzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVsYXRpb25zJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc01vZGVsRW50aXR5IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBJbnZhbGlkTW9kZWxFbnRpdHkgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IGNyZWF0ZVNlbGVjdG9yIGZyb20gJ3JlbWVtbyc7XG5pbXBvcnQgeyBub3JtYWxpemVFbnRpdHlJZCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuaW1wb3J0IHsgTWFwLCBTZXQgfSBmcm9tICdpbW11dGFibGUnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0RW50aXRpZXNCeUlkcyxcblx0Z2V0RW50aXR5QnlJZCxcbn0gZnJvbSAnLi9lbnRpdGllcyc7XG5cbmNvbnN0IERFRkFVTFRfRU1QVFlfU0VUID0gU2V0KCk7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSByZWxhdGlvbiBpZHMgZm9yIHRoZSBnaXZlbiBlbnRpdHkgYW5kIHJlbGF0aW9uIG5hbWUgZnJvbSB0aGVcbiAqIHN0YXRlIGFuZCBjb25zaWRlcnMgaG93IHRoZSByZWxhdGlvbiBtaWdodCBiZSBzYXZlZCBpbiB0aGUgc3RhdGUgKGVpdGhlciBhc1xuICogcmVsYXRpb24gbWFwcGVkIHRvIG1vZGVsIChpbmRleCkgb3IgbW9kZWwgbWFwcGVkIHRvIHJlbGF0aW9uIChlbnRpdHlNYXApXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHJldHVybiB7QXJyYXl9IEFuIGVtcHR5IGFycmF5IGlmIHRoZXJlIGFyZSBubyBpZHMgZm9yIHRoZSBnaXZlbiByZWxhdGlvbi5cbiAqL1xuY29uc3QgZ2V0UmVsYXRpb25JZHNGb3JFbnRpdHlSZWxhdGlvbiA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBlbnRpdHksIHJlbGF0aW9uTmFtZSApID0+IHtcblx0XHRpZiAoICEgaXNNb2RlbEVudGl0eSggZW50aXR5ICkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgSW52YWxpZE1vZGVsRW50aXR5KCAnJywgZW50aXR5ICk7XG5cdFx0fVxuXHRcdGNvbnN0IG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBlbnRpdHkubW9kZWxOYW1lICk7XG5cdFx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRcdGlmICggc3RhdGUucmVsYXRpb25zLmhhc0luKCBbIG1vZGVsTmFtZSwgZW50aXR5LmlkLCByZWxhdGlvbk5hbWUgXSApICkge1xuXHRcdFx0cmV0dXJuICggc3RhdGUucmVsYXRpb25zLmdldEluKFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRcdGVudGl0eS5pZCxcblx0XHRcdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRcdF0sXG5cdFx0XHQpIHx8IFNldCgpICkudG9BcnJheSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH0sXG5cdCggc3RhdGUsIGVudGl0eSwgcmVsYXRpb25OYW1lICkgPT4ge1xuXHRcdGlmICggISBpc01vZGVsRW50aXR5KCBlbnRpdHkgKSApIHtcblx0XHRcdHJldHVybiBbIERFRkFVTFRfRU1QVFlfU0VUIF07XG5cdFx0fVxuXHRcdGNvbnN0IG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBlbnRpdHkubW9kZWxOYW1lICksXG5cdFx0XHRpZCA9IGVudGl0eS5pZDtcblx0XHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHN0YXRlLnJlbGF0aW9ucy5nZXRJbiggW1xuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGlkLFxuXHRcdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRdICksXG5cdFx0XTtcblx0fVxuKTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCB0aGUgcmVsYXRpb24gZW50aXRpZXMgZm9yIHRoZSByZWxhdGlvbiBvbiBtb2RlbCBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtBcnJheTxCYXNlRW50aXR5Pn0gQW4gYXJyYXkgb2YgZW50aXRpZXMgZm9yIHRoZSByZWxhdGlvbi5cbiAqL1xuY29uc3QgZ2V0UmVsYXRlZEVudGl0aWVzID0gY3JlYXRlU2VsZWN0b3IoXG5cdCggc3RhdGUsIGVudGl0eSwgcmVsYXRpb25Nb2RlbE5hbWUgKSA9PiB7XG5cdFx0aWYgKCAhIGlzTW9kZWxFbnRpdHkoIGVudGl0eSApICkge1xuXHRcdFx0dGhyb3cgbmV3IEludmFsaWRNb2RlbEVudGl0eSggJycsIGVudGl0eSApO1xuXHRcdH1cblx0XHRyZWxhdGlvbk1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk1vZGVsTmFtZSApO1xuXHRcdHJldHVybiBnZXRFbnRpdGllc0J5SWRzKFxuXHRcdFx0c3RhdGUsXG5cdFx0XHRyZWxhdGlvbk1vZGVsTmFtZSxcblx0XHRcdGdldFJlbGF0aW9uSWRzRm9yRW50aXR5UmVsYXRpb24oXG5cdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRlbnRpdHksXG5cdFx0XHRcdHJlbGF0aW9uTW9kZWxOYW1lXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblx0KCBzdGF0ZSwgZW50aXR5LCByZWxhdGlvbk5hbWUgKSA9PiBbXG5cdFx0Li4uZ2V0RW50aXRpZXNCeUlkcy5nZXREZXBlbmRhbnRzKFxuXHRcdFx0c3RhdGUsXG5cdFx0XHRzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lIClcblx0XHQpLFxuXHRcdC4uLmdldFJlbGF0aW9uSWRzRm9yRW50aXR5UmVsYXRpb24uZ2V0RGVwZW5kYW50cyhcblx0XHRcdHN0YXRlLFxuXHRcdFx0ZW50aXR5LFxuXHRcdFx0c2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApXG5cdFx0KSxcblx0XVxuKTtcblxuLyoqXG4gKiBFZmZpY2llbnQgc2VsZWN0b3IgZm9yIGdldHRpbmcgYWxsIHRoZSByZWxhdGVkIGVudGl0aWVzIGZvciB0aGUgZ2l2ZW4gbW9kZWwsXG4gKiBpdCdzIGVudGl0eSBpZHMsIGFuZCB0aGUgcmVsYXRpb24gbmFtZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBgZ2V0UmVsYXRpb25zYCBzZWxlY3RvciB3aGljaCBnZXRzIHRoZSByZWxhdGlvbnMgZm9yIGFcbiAqIHNpbmdsZSBlbnRpdHkuICBUaGlzIGFsbG93cyB5b3UgdG8gZ2V0IGFsbCB0aGUgcmVsYXRpb25zIGZvciBhIGdpdmVuIHNldCBvZlxuICogZW50aXR5IGlkcyAoaS5lLiBHZXQgYWxsIGRhdGV0aW1lcyByZWxhdGVkIHRvIHRoZSBldmVudCBpZHM6IDEwLCAyMCwgYW5kIDMwKS5cbiAqXG4gKiBUaGlzIHNlbGVjdG9yIGlzIHdpcmVkIHVwIHRvIGEgcmVzb2x2ZXIgdGhhdCBkb2VzIGFuIGVmZmljaWVudCByZXF1ZXN0IHRvXG4gKiByZXRyaWV2ZSBhbGwgdGhvc2UgZW50aXRpZXMgYW5kIHRoZW4gZGlzcGF0Y2ggdGhlIGFwcHJvcHJpYXRlIGFjdGlvbnMgc29cbiAqIHRoZSByZWxhdGlvbiBzdGF0ZSBpcyBjb3JyZWN0bHkgcmVjb3JkZWQgZm9yIGVhY2ggcmVsYXRpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGVudGl0eUlkc1xuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHJldHVybiB7QXJyYXk8QmFzZUVudGl0eT59IEFuIGFycmF5IG9mIEJhc2VFbnRpdHkgaW5zdGFuY2VzIGZvciB0aGVcbiAqIHJlbGF0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFJlbGF0ZWRFbnRpdGllc0ZvcklkcyA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUsIGVudGl0eUlkcywgcmVsYXRpb25OYW1lICkgPT4ge1xuXHRcdGxldCByZWxhdGlvbkVudGl0aWVzID0gU2V0KCk7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0XHRlbnRpdHlJZHMuZm9yRWFjaCggKCBlbnRpdHlJZCApID0+IHtcblx0XHRcdGNvbnN0IGVudGl0eSA9IGdldEVudGl0eUJ5SWQoXG5cdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGVudGl0eUlkXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgcmVsYXRlZEVudGl0aWVzID0gZ2V0UmVsYXRlZEVudGl0aWVzKFxuXHRcdFx0XHRzdGF0ZSxcblx0XHRcdFx0ZW50aXR5LFxuXHRcdFx0XHRyZWxhdGlvbk5hbWVcblx0XHRcdCk7XG5cdFx0XHRyZWxhdGlvbkVudGl0aWVzID0gcmVsYXRpb25FbnRpdGllcy5tZXJnZSggcmVsYXRlZEVudGl0aWVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiByZWxhdGlvbkVudGl0aWVzLnRvSlMoKTtcblx0fSxcblx0KCBzdGF0ZSwgbW9kZWxOYW1lLCBlbnRpdHlJZHMsIHJlbGF0aW9uTmFtZSApID0+IFtcblx0XHQuLi5nZXRFbnRpdGllc0J5SWRzLmdldERlcGVuZGFudHMoXG5cdFx0XHRzdGF0ZSxcblx0XHRcdHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKSxcblx0XHQpLFxuXHRcdC4uLmdldEVudGl0aWVzQnlJZHMuZ2V0RGVwZW5kYW50cyhcblx0XHRcdHN0YXRlLFxuXHRcdFx0c2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApXG5cdFx0KSxcblx0XVxuKTtcblxuLyoqXG4gKiBMb29rcyB1cCB0aGUgcmVsYXRpb25zIHF1ZXVlZCBmb3IgYSBnaXZlbiBtb2RlbCBmaXJzdCBmcm9tIHRoZSBhY3R1YWwgcmVsYXRpb25cbiAqIHR5cGUgaW4gdGhlIHN0YXRlLCBhbmQgdGhlbiBhIHJldmVyc2UgbG9va3VwIGluIHRoZSBpbmRleCBpZiBub3QgdGhlcmUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAnYWRkJyBvciAnZGVsZXRlJ1xuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCBrZXllZCBieSBlbnRpdHkgaWRzIGZvciB0aGUgZ2l2ZW4gbW9kZWwuXG4gKiBUaGUgdmFsdWVzIG9uIGZvciBlYWNoIGVudGl0eSBpZCBpcyBhbiBvYmplY3Qga2V5ZWQgYnkgcmVsYXRpb24gbmFtZXMgYW5kXG4gKiB3aXRoIHZhbHVlcyBiZWluZyBhbiBhcnJheSBvZiBpZHMgZm9yIHJlbGF0aW9uLiBFeGFtcGxlOlxuICoge1xuICogICAxMDoge1xuICogICAgIGRhdGV0aW1lczogWyAyMiwgMjMgXSxcbiAqICAgICBtZXNzYWdlX3RlbXBsYXRlX2dyb3VwczogWyAyLCA0IF0sXG4gKiAgIH0sXG4gKiAgIDIwOiB7XG4gKiAgICAgZGF0ZXRpbWVzOiBbIDI0LCAyNSBdLFxuICogICB9LFxuICogfVxuICovXG5jb25zdCBsb29rdXBSZWxhdGlvbnNRdWV1ZWRGb3JNb2RlbCA9ICggc3RhdGUsIG1vZGVsTmFtZSwgdHlwZSA9ICdhZGQnICkgPT4ge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdGxldCByZWxhdGlvbnNRdWV1ZWQgPSBNYXAoKTtcblx0aWYgKCBzdGF0ZS5kaXJ0eS5yZWxhdGlvbnMuaGFzSW4oIFsgdHlwZSwgbW9kZWxOYW1lIF0gKSApIHtcblx0XHRyZWxhdGlvbnNRdWV1ZWQgPSByZWxhdGlvbnNRdWV1ZWQubWVyZ2VEZWVwKFxuXHRcdFx0c3RhdGUuZGlydHkucmVsYXRpb25zLmdldEluKCBbIHR5cGUsIG1vZGVsTmFtZSBdIClcblx0XHQpO1xuXHR9XG5cdGlmICggc3RhdGUuZGlydHkucmVsYXRpb25zLmhhc0luKCBbICdpbmRleCcsIG1vZGVsTmFtZSBdICkgKSB7XG5cdFx0bGV0IHJlbGF0aW9ucyA9IE1hcCgpO1xuXHRcdHN0YXRlLmRpcnR5LnJlbGF0aW9ucy5nZXRJbiggWyAnaW5kZXgnLCBtb2RlbE5hbWUgXSApLmZvckVhY2goXG5cdFx0XHQoIHJlbGF0aW9uTWFwLCBlbnRpdHlJZCApID0+IHtcblx0XHRcdFx0cmVsYXRpb25NYXAuZm9yRWFjaCggKCByZWxhdGlvblJlY29yZCwgbW9kZWwgKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCByZWxhdGlvblJlY29yZC5oYXMoIHR5cGUgKSApIHtcblx0XHRcdFx0XHRcdHJlbGF0aW9ucyA9IHJlbGF0aW9ucy5zZXRJbihcblx0XHRcdFx0XHRcdFx0WyBlbnRpdHlJZCwgc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsICkgXSxcblx0XHRcdFx0XHRcdFx0cmVsYXRpb25SZWNvcmQuZ2V0KCB0eXBlIClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0KTtcblx0XHRyZWxhdGlvbnNRdWV1ZWQgPSByZWxhdGlvbnNRdWV1ZWQubWVyZ2VEZWVwKCByZWxhdGlvbnMgKTtcblx0fVxuXHRyZXR1cm4gcmVsYXRpb25zUXVldWVkLnRvSlMoKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCB0aGUgcXVldWVkIHJlbGF0aW9uIGFkZGl0aW9ucyBmb3IgdGhlIGdpdmVuIG1vZGVsXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IGtleWVkIGJ5IGVudGl0eSBpZHMgZm9yIHRoZSBnaXZlbiBtb2RlbC5cbiAqIFRoZSB2YWx1ZXMgb24gZm9yIGVhY2ggZW50aXR5IGlkIGlzIGFuIG9iamVjdCBrZXllZCBieSByZWxhdGlvbiBuYW1lcyBhbmRcbiAqIHdpdGggdmFsdWVzIGJlaW5nIGFuIGFycmF5IG9mIGlkcyBmb3IgcmVsYXRpb24uIEV4YW1wbGU6XG4gKiB7XG4gKiAgIDEwOiB7XG4gKiAgICAgZGF0ZXRpbWVzOiBbIDIyLCAyMyBdLFxuICogICAgIG1lc3NhZ2VfdGVtcGxhdGVfZ3JvdXBzOiBbIDIsIDQgXSxcbiAqICAgfSxcbiAqICAgMjA6IHtcbiAqICAgICBkYXRldGltZXM6IFsgMjQsIDI1IF0sXG4gKiAgIH0sXG4gKiB9XG4gKlxuICovXG5jb25zdCBnZXRSZWxhdGlvbkFkZGl0aW9uc1F1ZXVlZEZvck1vZGVsID0gY3JlYXRlU2VsZWN0b3IoXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IHtcblx0XHRyZXR1cm4gbG9va3VwUmVsYXRpb25zUXVldWVkRm9yTW9kZWwoIHN0YXRlLCBtb2RlbE5hbWUgKTtcblx0fSxcblx0KCBzdGF0ZSwgbW9kZWxOYW1lICkgPT4gW1xuXHRcdHN0YXRlLmRpcnR5LnJlbGF0aW9ucy5nZXRJbiggWyAnYWRkJywgc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApIF0gKSxcblx0XHRzdGF0ZS5kaXJ0eS5yZWxhdGlvbnMuZ2V0SW4oIFsgJ2luZGV4Jywgc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApIF0gKSxcblx0XVxuKTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYWxsIHRoZSBxdWV1ZWQgcmVsYXRpb24gZGVsZXRpb25zIGZvciB0aGUgZ2l2ZW4gbW9kZWxcbiAqIFNpbWlsYXIgdG8gYGdldFJlbGF0aW9uQWRkaXRpb25zUXVldWVkRm9yTW9kZWxgIGV4Y2VwdCB0aGlzIGlzIHJlbGF0aW9uc1xuICogcXVldWVkIGZvciBkZWxldGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qga2V5ZWQgYnkgZW50aXR5IGlkcyBmb3IgdGhlIGdpdmVuIG1vZGVsLlxuICogVGhlIHZhbHVlcyBvbiBmb3IgZWFjaCBlbnRpdHkgaWQgaXMgYW4gb2JqZWN0IGtleWVkIGJ5IHJlbGF0aW9uIG5hbWVzIGFuZFxuICogd2l0aCB2YWx1ZXMgYmVpbmcgYW4gYXJyYXkgb2YgaWRzIGZvciByZWxhdGlvbi5cbiAqL1xuY29uc3QgZ2V0UmVsYXRpb25EZWxldGlvbnNRdWV1ZWRGb3JNb2RlbCA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0cmV0dXJuIGxvb2t1cFJlbGF0aW9uc1F1ZXVlZEZvck1vZGVsKCBzdGF0ZSwgbW9kZWxOYW1lLCAnZGVsZXRlJyApO1xuXHR9LFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUgKSA9PiBbXG5cdFx0c3RhdGUuZGlydHkucmVsYXRpb25zLmdldEluKFxuXHRcdFx0WyAnZGVsZXRlJywgc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApIF1cblx0XHQpLFxuXHRcdHN0YXRlLmRpcnR5LnJlbGF0aW9ucy5nZXRJbiggWyAnaW5kZXgnLCBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICkgXSApLFxuXHRdXG4pO1xuXG4vKipcbiAqIFJldHVybnMgYSBjb3VudCBvZiBhbGwgdGhlIHJlbGF0aW9uIG1vZGVscyAobm90IGNvdW50IG9mIGVudGl0aWVzKSB0aGF0IGV4aXN0XG4gKiBpbiB0aGUgc3RhdGUgYmVpbmcgcmVsYXRlZCB0byB0aGUgZ2l2ZW4gbW9kZWwgYW5kIGVudGl0eUlkLlxuICpcbiAqIE5vdGU6IFRoaXMgb25seSBxdWVyaWVzIHRoZSBzdGF0ZSwgbm90IGFueSByZWxhdGlvbnMgdGhhdCBtaWdodCBleGlzdCBpbiB0aGVcbiAqIGRiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBlbnRpdHlJZFxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgY291bnQgb2YgcmVsYXRpb25zLlxuICovXG5jb25zdCBjb3VudFJlbGF0aW9uTW9kZWxzSW5kZXhlZEZvckVudGl0eSA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoXG5cdFx0c3RhdGUsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkXG5cdCkgPT4ge1xuXHRcdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0XHRlbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCBlbnRpdHlJZCApO1xuXHRcdC8vIHdlIGNhbiBqdXN0IGdldCB0aGlzIGZyb20gdGhlIGNvbnRleHQgb2YgdGhlIG1vZGVsXG5cdFx0cmV0dXJuIChcblx0XHRcdHN0YXRlLnJlbGF0aW9uc1xuXHRcdFx0XHQuZ2V0SW4oIFsgbW9kZWxOYW1lLCBlbnRpdHlJZCBdICkgfHwgTWFwKClcblx0XHQpLmNvdW50KCk7XG5cdH0sXG5cdCggc3RhdGUsIG1vZGVsTmFtZSwgZW50aXR5SWQgKSA9PiB7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdGVudGl0eUlkID0gbm9ybWFsaXplRW50aXR5SWQoIGVudGl0eUlkICk7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHN0YXRlLnJlbGF0aW9ucy5nZXRJbiggWyBtb2RlbE5hbWUsIGVudGl0eUlkIF0gKSxcblx0XHRdO1xuXHR9XG4pO1xuXG4vKipcbiAqIFJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIHN0YXRlLnJlbGF0aW9ucyBtYXAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKlxuICogQHJldHVybiB7TWFwfSBUaGUgc3RhdGUucmVsYXRpb25zIG1hcC5cbiAqL1xuY29uc3QgZ2V0QWxsUmVsYXRpb25zSW5TdGF0ZSA9ICggc3RhdGUgKSA9PiBzdGF0ZS5yZWxhdGlvbnM7XG5cbmV4cG9ydCB7XG5cdGdldFJlbGF0ZWRFbnRpdGllcyxcblx0Z2V0UmVsYXRpb25JZHNGb3JFbnRpdHlSZWxhdGlvbixcblx0Z2V0UmVsYXRpb25BZGRpdGlvbnNRdWV1ZWRGb3JNb2RlbCxcblx0Z2V0UmVsYXRpb25EZWxldGlvbnNRdWV1ZWRGb3JNb2RlbCxcblx0Y291bnRSZWxhdGlvbk1vZGVsc0luZGV4ZWRGb3JFbnRpdHksXG5cdGdldEFsbFJlbGF0aW9uc0luU3RhdGUsXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHJlZ2lzdGVyU3RvcmUgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuXG5jb25zdCBERUZBVUxUX1NUQVRFID0ge307XG5jb25zdCBTRVRfRklMVEVSID0gJ1NFVF9GSUxURVInO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBvcnRpb24gb2YgdGhlIHN0YXRlIG9iamVjdCBmb3IgdGhlIHByb3ZpZGVkIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0ICAgIGZpbHRlciBiYXIgbmFtZVxuICogQHJldHVybiB7T2JqZWN0fSBwYXJ0aWFsIHN0YXRlIG9iamVjdFxuICovXG5jb25zdCBnZXRTdGF0ZSA9ICggc3RhdGUsIGNvbnRleHQgKSA9PiB7XG5cdHJldHVybiB0eXBlb2Ygc3RhdGVbIGNvbnRleHQgXSA9PT0gJ3VuZGVmaW5lZCcgP1xuXHRcdE1hcCgpIDpcblx0XHRzdGF0ZVsgY29udGV4dCBdO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyBhY3Rpb25zIGFuZCByZXR1cm5zIGEgbmV3IHN0YXRlIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbi50eXBlICAgICAgU0VUX0ZJTFRFUiBjb25zdGFudFxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbi5jb250ZXh0IFx0ZmlsdGVyIGJhciBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uLmZpbHRlclx0ZmlsdGVyIHZhbHVlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24udmFsdWVcdFx0ZmlsdGVyIHZhbHVlXG4gKiBAcmV0dXJuIHtPYmplY3R9IG5ldyBzdGF0ZVxuICovXG5jb25zdCBmaWx0ZXJTdGF0ZVJlZHVjZXIgPSAoIHN0YXRlID0gREVGQVVMVF9TVEFURSwgYWN0aW9uICkgPT4ge1xuXHRjb25zdCB7IHR5cGUsIGNvbnRleHQsIGZpbHRlciwgdmFsdWUgfSA9IGFjdGlvbjtcblx0aWYgKCB0eXBlID09PSBTRVRfRklMVEVSICkge1xuXHRcdGNvbnN0IHByZXZTdGF0ZSA9IGdldFN0YXRlKCBzdGF0ZSwgY29udGV4dCApO1xuXHRcdGNvbnN0IG5ld1N0YXRlID0gcHJldlN0YXRlLnNldCggZmlsdGVyLCB2YWx1ZSApO1xuXHRcdGlmICggcHJldlN0YXRlICE9PSBuZXdTdGF0ZSApIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0XHRbIGNvbnRleHQgXTogbmV3U3RhdGUsXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYWN0aW9uIGZvciBzZXR0aW5nIHRoZSB2YWx1ZSBvZiBhIGZpbHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0IFx0ZmlsdGVyIGJhciBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsdGVyIFx0ZmlsdGVyIHZhbHVlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBcdGZpbHRlciB2YWx1ZVxuICogQHJldHVybiB7T2JqZWN0fSBhY3Rpb24gb2JqZWN0XG4gKi9cbmNvbnN0IHNldEZpbHRlciA9ICggY29udGV4dCwgZmlsdGVyLCB2YWx1ZSApID0+IHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBTRVRfRklMVEVSLFxuXHRcdGNvbnRleHQsXG5cdFx0ZmlsdGVyLFxuXHRcdHZhbHVlLFxuXHR9O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBmaWx0ZXIgb3IgdGhlIGRlZmF1bHQgdmFsdWUgaWYgbm90IHNldFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQgXHRcdGZpbHRlciBiYXIgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpbHRlciAgICBcdGZpbHRlciB2YWx1ZSBpZGVudGlmaWVyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVmYXVsdFZhbHVlIGZpbHRlciB2YWx1ZSBpZiBub3Qgc2V0XG4gKiBAcmV0dXJuIHtzdHJpbmd9IGZpbHRlciB2YWx1ZVxuICovXG5jb25zdCBnZXRGaWx0ZXIgPSAoIHN0YXRlLCBjb250ZXh0LCBmaWx0ZXIsIGRlZmF1bHRWYWx1ZSApID0+IHtcblx0cmV0dXJuIGdldFN0YXRlKCBzdGF0ZSwgY29udGV4dCApLmdldCggZmlsdGVyLCBkZWZhdWx0VmFsdWUgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJlZ2lzdGVyU3RvcmUoXG5cdCdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScsXG5cdHtcblx0XHRyZWR1Y2VyOiBmaWx0ZXJTdGF0ZVJlZHVjZXIsXG5cdFx0YWN0aW9uczogeyBzZXRGaWx0ZXIgfSxcblx0XHRzZWxlY3RvcnM6IHsgZ2V0RmlsdGVyIH0sXG5cdH1cbik7XG4iLCJleHBvcnQgY29uc3QgQUNUSU9OX1RZUEVTID0ge1xuXHRSRUNFSVZFX0xJU1Q6ICdSRUNFSVZFX0xJU1QnLFxuXHRSRUNFSVZFX0VOVElUWV9MSVNUOiAnUkVDRUlWRV9FTlRJVFlfTElTVCcsXG59O1xuZXhwb3J0IGNvbnN0IFJFU0VUX1RZUEVTID0ge1xuXHRSRVNFVF9BTExfU1RBVEU6ICdSRVNFVF9BTExfU1RBVEUnLFxuXHRSRVNFVF9TVEFURV9GT1JfSURFTlRJRklFUjogJ1JFU0VUX1NUQVRFX0ZPUl9JREVOVElGSUVSJyxcblx0UkVTRVRfU1BFQ0lGSUNfU1RBVEVfRk9SX0lERU5USUZJRVI6ICdSRVNFVF9TUEVDSUZJQ19TVEFURV9GT1JfSURFTlRJRklFUicsXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHNlbGVjdCBhcyBkYXRhU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lLCBwbHVyYWxNb2RlbE5hbWUgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRBQ1RJT05fVFlQRVMgYXMgdHlwZXMsXG5cdFJFU0VUX1RZUEVTIGFzIHJlc2V0VHlwZXMsXG59IGZyb20gJy4vYWN0aW9uLXR5cGVzJztcbmltcG9ydCB7IGRpc3BhdGNoLCBzZWxlY3QgfSBmcm9tICcuLi9iYXNlLWNvbnRyb2xzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFJldHVybnMgYW4gYWN0aW9uIG9iamVjdCB1c2VkIGluIHVwZGF0aW5nIHRoZSBzdG9yZSB3aXRoIHRoZSBwcm92aWRlZCBpdGVtc1xuICogcmV0cmlldmVkIGZyb20gYSByZXF1ZXN0IHVzaW5nIHRoZSBnaXZlbiBxdWVyeXN0cmluZy5cbiAqXG4gKiBUaGlzIGlzIGEgZ2VuZXJpYyByZXNwb25zZSBhY3Rpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZyAgUmVzdWx0cyBhcmUgc3RvcmVkIGluZGV4ZWQgYnkgdGhlIHF1ZXJ5XG4gKiBzdHJpbmcgZ2VuZXJhdGluZyB0aGVtLlxuICogQHBhcmFtIHtBcnJheTwqPn0gaXRlbXMgICAgIGl0ZW1zIGF0dGFjaGVkIHdpdGggdGhlIGxpc3QuXG4gKiBAcmV0dXJuIHtcbiAqIFx0e1xuICogXHRcdHR5cGU6IHN0cmluZyxcbiAqIFx0XHRpZGVudGlmaWVyOiBzdHJpbmcsXG4gKiBcdFx0cXVlcnlTdHJpbmc6IHN0cmluZyxcbiAqIFx0XHRpdGVtczogQXJyYXk8Kj5cbiAqXHR9XG4gKiB9IE9iamVjdCBmb3IgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjZWl2ZVJlc3BvbnNlKCBpZGVudGlmaWVyLCBxdWVyeVN0cmluZywgaXRlbXMgPSBbXSApIHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX0xJU1QsXG5cdFx0aWRlbnRpZmllcixcblx0XHRxdWVyeVN0cmluZyxcblx0XHRpdGVtcyxcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFjdGlvbiBvYmplY3QgdXNlZCBpbiB1cGRhdGluZyB0aGUgc3RvcmUgd2l0aCB0aGUgcHJvdmlkZWQgZW50aXR5XG4gKiBpdGVtcyByZXRyaWV2ZWQgZnJvbSBhIHJlcXVlc3QgdXNpbmcgdGhlIGdpdmVuIHF1ZXJ5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlTdHJpbmdcbiAqIEBwYXJhbSB7QXJyYXk8QmFzZUVudGl0eT59ZW50aXRpZXNcbiAqIEByZXR1cm4ge3t0eXBlOiBzdHJpbmcsIGlkZW50aWZpZXI6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgaXRlbXM6XG4gKiAgIEFycmF5PEJhc2VFbnRpdHk+fX0gQW4gYWN0aW9uIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY2VpdmVFbnRpdHlSZXNwb25zZShcblx0bW9kZWxOYW1lLFxuXHRxdWVyeVN0cmluZyxcblx0ZW50aXRpZXMgPSBbXSxcbikge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfRU5USVRZX0xJU1QsXG5cdFx0aWRlbnRpZmllcjogbW9kZWxOYW1lLFxuXHRcdHF1ZXJ5U3RyaW5nLFxuXHRcdGl0ZW1zOiBlbnRpdGllcyxcblx0fTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gdHJpZ2dlcmluZyByZXNldHRpbmcgYWxsIHN0YXRlIGluIHRoZSBzdG9yZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiByZXNldEFsbFN0YXRlKCkge1xuXHQvLyBhY3Rpb24gZm9yIHJlc2V0dGluZyB0aGUgZW50aXJlIHN0YXRlXG5cdHlpZWxkIHtcblx0XHR0eXBlOiByZXNldFR5cGVzLlJFU0VUX0FMTF9TVEFURSxcblx0fTtcblxuXHRpZiAoIGludmFsaWRhdGVBY3Rpb25zQXZhaWxhYmxlKCkgKSB7XG5cdFx0eWllbGQgZGlzcGF0Y2goXG5cdFx0XHQnY29yZS9kYXRhJyxcblx0XHRcdCdpbnZhbGlkYXRlUmVzb2x1dGlvbkZvclN0b3JlJyxcblx0XHRcdFJFRFVDRVJfS0VZLFxuXHRcdCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gZ2V0IHJlc29sdmVycyBmcm9tIGNvcmUvZGF0YSBhbmQgZGlzcGF0Y2ggaW52YWxpZGF0aW9uIG9mIGVhY2ggcmVzb2x2ZXIuXG5cdGNvbnN0IHJlc29sdmVycyA9IHlpZWxkIHNlbGVjdChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZ2V0Q2FjaGVkUmVzb2x2ZXJzJyxcblx0XHRSRURVQ0VSX0tFWVxuXHQpO1xuXG5cdC8vIGRpc3BhdGNoIGludmFsaWRhdGlvbiBvZiB0aGUgY2FjaGVkIHJlc29sdmVyc1xuXHRmb3IgKCBjb25zdCBzZWxlY3RvciBpbiByZXNvbHZlcnMgKSB7XG5cdFx0Zm9yICggY29uc3QgZW50cnkgb2YgcmVzb2x2ZXJzWyBzZWxlY3RvciBdLl9tYXAgKSB7XG5cdFx0XHR5aWVsZCBkaXNwYXRjaChcblx0XHRcdFx0J2NvcmUvZGF0YScsXG5cdFx0XHRcdCdpbnZhbGlkYXRlUmVzb2x1dGlvbicsXG5cdFx0XHRcdFJFRFVDRVJfS0VZLFxuXHRcdFx0XHRzZWxlY3Rvcixcblx0XHRcdFx0ZW50cnlbIDAgXVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBBY3Rpb24gdHJpZ2dlcmluZyByZXNldHRpbmcgc3RhdGUgaW4gdGhlIHN0b3JlIGZvciB0aGUgZ2l2ZW4gc2VsZWN0b3IgbmFtZSBhbmRcbiAqIGlkZW50aWZpZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpZmllclxuICovXG5leHBvcnQgZnVuY3Rpb24qIHJlc2V0Rm9yU2VsZWN0b3JBbmRJZGVudGlmaWVyKCBzZWxlY3Rvck5hbWUsIGlkZW50aWZpZXIgKSB7XG5cdHlpZWxkIHtcblx0XHR0eXBlOiByZXNldFR5cGVzLlJFU0VUX1NUQVRFX0ZPUl9JREVOVElGSUVSLFxuXHRcdGlkZW50aWZpZXIsXG5cdH07XG5cblx0Ly8gZ2V0IHJlc29sdmVycyBmcm9tIGNvcmUvZGF0YVxuXHRjb25zdCByZXNvbHZlcnMgPSB5aWVsZCBzZWxlY3QoXG5cdFx0J2NvcmUvZGF0YScsXG5cdFx0J2dldENhY2hlZFJlc29sdmVycycsXG5cdFx0UkVEVUNFUl9LRVlcblx0KTtcblxuXHQvLyBkaXNwYXRjaCBpbnZhbGlkYXRpb24gb2YgdGhlIGNhY2hlZCByZXNvbHZlcnMgZm9yIGFueSByZXNvbHZlciB0aGF0XG5cdC8vIGhhcyBhIHZhcmlhdGlvbiBvZiBtb2RlbE5hbWUgaW4gdGhlIHNlbGVjdG9yIG5hbWUgb3IgaW4gdGhlIGFyZ3MgZm9yIHRoZVxuXHQvLyBjYWNoZWQgcmVzb2x2ZXIuXG5cdGZvciAoIGNvbnN0IHNlbGVjdG9yIGluIHJlc29sdmVycyApIHtcblx0XHRpZiAoXG5cdFx0XHRzZWxlY3Rvck5hbWUgPT09IHNlbGVjdG9yIHx8XG5cdFx0XHRpZGVudGlmaWVySW5TZWxlY3Rvciggc2VsZWN0b3IsIGlkZW50aWZpZXIgKVxuXHRcdCkge1xuXHRcdFx0Zm9yICggY29uc3QgZW50cnkgb2YgcmVzb2x2ZXJzWyBzZWxlY3RvciBdLl9tYXAgKSB7XG5cdFx0XHRcdGlmICggZW50cnlbIDAgXVsgMCBdID09PSBpZGVudGlmaWVyICkge1xuXHRcdFx0XHRcdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFx0XHRcdFx0J2NvcmUvZGF0YScsXG5cdFx0XHRcdFx0XHQnaW52YWxpZGF0ZVJlc29sdXRpb24nLFxuXHRcdFx0XHRcdFx0UkVEVUNFUl9LRVksXG5cdFx0XHRcdFx0XHRzZWxlY3Rvcixcblx0XHRcdFx0XHRcdGVudHJ5WyAwIF0sXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEFjdGlvbiB0cmlnZ2VyaW5nIHRoZSBzdGF0ZSByZXNldCBmb3IgdGhlIFwiZ2VuZXJpY1wiIHNlbGVjdG9yICgnZ2V0SXRlbXMnKSBhbmRcbiAqIGl0J3MgaWRlbnRpZmllclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGlmaWVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogcmVzZXRHZW5lcmljSXRlbXNXaXRoSWRlbnRpZmllciggaWRlbnRpZmllciApIHtcblx0eWllbGQqIHJlc2V0Rm9yU2VsZWN0b3JBbmRJZGVudGlmaWVyKCAnZ2V0SXRlbXMnLCBpZGVudGlmaWVyICk7XG59XG5cbi8qKlxuICogQWN0aW9uIHRyaWdnZXJpbmcgdGhlIHN0YXRlIHJlc2V0IGZvciB0aGUgZW50aXR5IHNlbGVjdG9ycyBmb3IgdGhlIGdpdmVuXG4gKiBtb2RlbE5hbWVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogcmVzZXRFbnRpdGllc0Zvck1vZGVsTmFtZSggbW9kZWxOYW1lICkge1xuXHR5aWVsZCogcmVzZXRGb3JTZWxlY3RvckFuZElkZW50aWZpZXIoICdnZXRFbnRpdGllcycsIG1vZGVsTmFtZSApO1xuXHR5aWVsZCogcmVzZXRGb3JTZWxlY3RvckFuZElkZW50aWZpZXIoICdnZXRFbnRpdGllc0J5SWRzJywgbW9kZWxOYW1lICk7XG59XG5cbi8qKlxuICogQWN0aW9uIHRyaWdnZXJpbmcgdGhlIHN0YXRlIHJlc2V0IGZvciB0aGUgc3BlY2lmaWMgc2VsZWN0b3IgbmFtZSwgaWRlbnRpZmllclxuICogYW5kIHF1ZXJ5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpZmllclxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogcmVzZXRTcGVjaWZpY1N0YXRlRm9yU2VsZWN0b3IoXG5cdHNlbGVjdG9yTmFtZSxcblx0aWRlbnRpZmllcixcblx0cXVlcnlTdHJpbmdcbikge1xuXHR5aWVsZCB7XG5cdFx0dHlwZTogcmVzZXRUeXBlcy5SRVNFVF9TUEVDSUZJQ19TVEFURV9GT1JfSURFTlRJRklFUixcblx0XHRpZGVudGlmaWVyLFxuXHRcdHF1ZXJ5U3RyaW5nLFxuXHR9O1xuXG5cdHlpZWxkIGRpc3BhdGNoKFxuXHRcdCdjb3JlL2RhdGEnLFxuXHRcdCdpbnZhbGlkYXRlUmVzb2x1dGlvbicsXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0c2VsZWN0b3JOYW1lLFxuXHRcdFsgaWRlbnRpZmllciwgcXVlcnlTdHJpbmcgXVxuXHQpO1xufVxuXG4vKipcbiAqIEhlbHBlciBmb3IgZGV0ZXJtaW5pbmcgaWYgYWN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBgY29yZS9kYXRhYCBwYWNrYWdlLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIGFkZGl0aW9uYWwgaW52YWxpZGF0aW9uIGFjdGlvbnMgYXZhaWxhYmxlLlxuICovXG5jb25zdCBpbnZhbGlkYXRlQWN0aW9uc0F2YWlsYWJsZSA9ICgpID0+IHtcblx0cmV0dXJuIGRhdGFTZWxlY3QoICdjb3JlL2RhdGEnICkuaW52YWxpZGF0ZVJlc29sdXRpb25Gb3JTdG9yZSAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGdpdmVuIGlkZW50aWZpZXIgaXMgZm91bmQgaW4gdGhlIGdpdmVuXG4gKiBzZWxlY3Rvck5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aWZpZXJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgbWVhbnMgaXQgaXMgcHJlc2VudCwgZmFsc2UgbWVhbnMgaXQgaXNuJ3RcbiAqL1xuY29uc3QgaWRlbnRpZmllckluU2VsZWN0b3IgPSAoIHNlbGVjdG9yTmFtZSwgaWRlbnRpZmllciApID0+IHtcblx0aWYgKCBzZWxlY3Rvck5hbWUgPT09ICdnZXRJdGVtcycgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IHNpbmd1bGFyTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBpZGVudGlmaWVyICk7XG5cdGNvbnN0IHBsdXJhbE5hbWUgPSBwbHVyYWxNb2RlbE5hbWUoIGlkZW50aWZpZXIgKTtcblx0c2VsZWN0b3JOYW1lID0gc2VsZWN0b3JOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdHJldHVybiBzZWxlY3Rvck5hbWUuaW5kZXhPZiggc2luZ3VsYXJOYW1lICkgPiAtMSB8fFxuXHRcdHNlbGVjdG9yTmFtZS5pbmRleE9mKCBwbHVyYWxOYW1lICkgPiAtMTtcbn07XG4iLCIvKipcbiAqIFRoZSBrZXkgZm9yIHRoZSByZWR1Y2VyIG9uIHRoZSBzdG9yZS5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBSRURVQ0VSX0tFWSA9ICdldmVudGVzcHJlc3NvL2xpc3RzJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHJlZ2lzdGVyU3RvcmUgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgcmVkdWNlciBmcm9tICcuL3JlZHVjZXJzJztcbmltcG9ydCAqIGFzIHNlbGVjdG9ycyBmcm9tICcuL3NlbGVjdG9ycyc7XG5pbXBvcnQgKiBhcyBhY3Rpb25zIGZyb20gJy4vYWN0aW9ucyc7XG5pbXBvcnQgKiBhcyByZXNvbHZlcnMgZnJvbSAnLi9yZXNvbHZlcnMnO1xuaW1wb3J0IHsgY3JlYXRlRW50aXR5U2VsZWN0b3JzLCBjcmVhdGVFbnRpdHlSZXNvbHZlcnMgfSBmcm9tICcuL21vZGVsJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IGNvbnRyb2xzIGZyb20gJy4uL2Jhc2UtY29udHJvbHMnO1xuXG4vKipcbiAqIENyZWF0ZXMgc3BlY2lmaWMgbW9kZWwgZW50aXR5IHNlbGVjdG9ycyAoZ2V0RXZlbnRzLCBnZXREYXRldGltZXMgZXRjKVxuICogQHR5cGUge09iamVjdDxGdW5jdGlvbj59XG4gKi9cbmNvbnN0IGVudGl0eVNlbGVjdG9ycyA9IGNyZWF0ZUVudGl0eVNlbGVjdG9ycyggc2VsZWN0b3JzICk7XG5cbi8qKlxuICogQ3JlYXRlcyBzcGVjaWZpYyBtb2RlbCBlbnRpdHkgcmVzb2x2ZXJzIChnZXRFdmVudHMsIGdldERhdGV0aW1lcyBldGMpXG4gKiBAdHlwZSB7T2JqZWN0PEZ1bmN0aW9uPn1cbiAqL1xuY29uc3QgZW50aXR5UmVzb2x2ZXJzID0gY3JlYXRlRW50aXR5UmVzb2x2ZXJzKCByZXNvbHZlcnMgKTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIHN0b3JlIGZvciB0aGUgJ2V2ZW50ZXNwcmVzc28vbGlzdHNgIHJlZHVjZXIuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IHJlZ2lzdGVyU3RvcmUoIFJFRFVDRVJfS0VZLCB7XG5cdHJlZHVjZXIsXG5cdGFjdGlvbnMsXG5cdHNlbGVjdG9yczogeyAuLi5zZWxlY3RvcnMsIC4uLmVudGl0eVNlbGVjdG9ycyB9LFxuXHRyZXNvbHZlcnM6IHsgLi4ucmVzb2x2ZXJzLCAuLi5lbnRpdHlSZXNvbHZlcnMgfSxcblx0Y29udHJvbHMsXG59ICk7XG4iLCIvKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBnZXRNZXRob2ROYW1lIH0gZnJvbSAnLi4vYmFzZS1tb2RlbCc7XG5pbXBvcnQgeyBNT0RFTF9OQU1FUyB9IGZyb20gJy4uLy4uL21vZGVsJztcbmltcG9ydCB7IGlzUmVzb2x2aW5nIH0gZnJvbSAnLi4vYmFzZS1zZWxlY3RvcnMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY3JlYXRlcyBzZWxlY3RvcnMgZm9yIGVhY2ggcmVnaXN0ZXJlZCBtb2RlbCBuYW1lIHdyYXBwaW5nIHRoZVxuICogZ2VuZXJpYyBzb3VyY2Ugc2VsZWN0b3JzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGZ1bmN0aW9uPn0gc291cmNlXG4gKiBAcmV0dXJuIHtPYmplY3Q8ZnVuY3Rpb24+fSBBbGwgdGhlIGdlbmVyYXRlZCBzZWxlY3RvcnMgZm9yIGVhY2ggbW9kZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVFbnRpdHlTZWxlY3RvcnMgPSAoIHNvdXJjZSApID0+IE1PREVMX05BTUVTLnJlZHVjZShcblx0KCBzZWxlY3RvcnMsIG1vZGVsTmFtZSApID0+IHtcblx0XHRjb25zdCBtZXRob2ROYW1lRm9yR2V0ID0gZ2V0TWV0aG9kTmFtZSggbW9kZWxOYW1lLCAnJywgJ2dldCcsIHRydWUgKTtcblx0XHRzZWxlY3RvcnNbIG1ldGhvZE5hbWVGb3JHZXQgXSA9IChcblx0XHRcdHN0YXRlLFxuXHRcdFx0cXVlcnlTdHJpbmcsXG5cdFx0KSA9PiBzb3VyY2UuZ2V0RW50aXRpZXMoIHN0YXRlLCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nICk7XG5cdFx0c2VsZWN0b3JzW1xuXHRcdFx0Z2V0TWV0aG9kTmFtZSggbW9kZWxOYW1lLCAnYnlJZHMnLCAnZ2V0JywgdHJ1ZSApXG5cdFx0XSA9IChcblx0XHRcdHN0YXRlLFxuXHRcdFx0aWRzID0gW10sXG5cdFx0KSA9PiBzb3VyY2UuZ2V0RW50aXRpZXNCeUlkcyggc3RhdGUsIG1vZGVsTmFtZSwgaWRzICk7XG5cdFx0c2VsZWN0b3JzWyBnZXRNZXRob2ROYW1lKCBtb2RlbE5hbWUsICcnLCAnaXNSZXF1ZXN0aW5nJywgdHJ1ZSApIF0gPSAoXG5cdFx0XHRzdGF0ZSxcblx0XHRcdHF1ZXJ5U3RyaW5nLFxuXHRcdCkgPT4gaXNSZXNvbHZpbmcoXG5cdFx0XHRSRURVQ0VSX0tFWSxcblx0XHRcdG1ldGhvZE5hbWVGb3JHZXQsXG5cdFx0XHRxdWVyeVN0cmluZ1xuXHRcdCk7XG5cdFx0cmV0dXJuIHNlbGVjdG9ycztcblx0fSxcblx0e30sXG4pO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgcmVzb2x2ZXJzIGZvciBlYWNoIHJlZ2lzdGVyZWQgbW9kZWwgbmFtZSB3cmFwcGluZyB0aGVcbiAqIGdlbmVyaWMgc291cmNlIHJlc29sdmVycy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxmdW5jdGlvbj59IHNvdXJjZVxuICogQHJldHVybiB7T2JqZWN0PGZ1bmN0aW9uPn0gQWxsIHRoZSBnZW5lcmF0ZWQgcmVzb2x2ZXJzIGZvciBlYWNoIG1vZGVsLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRW50aXR5UmVzb2x2ZXJzID0gKCBzb3VyY2UgKSA9PiBNT0RFTF9OQU1FUy5yZWR1Y2UoXG5cdCggcmVzb2x2ZXJzLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0cmVzb2x2ZXJzWyBnZXRNZXRob2ROYW1lKCBtb2RlbE5hbWUsICcnLCAnZ2V0JywgdHJ1ZSApIF0gPSAoXG5cdFx0XHRxdWVyeVN0cmluZ1xuXHRcdCkgPT4gc291cmNlLmdldEVudGl0aWVzKCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nICk7XG5cdFx0cmVzb2x2ZXJzWyBnZXRNZXRob2ROYW1lKCBtb2RlbE5hbWUsICdieUlkcycsICdnZXQnLCB0cnVlICkgXSA9IChcblx0XHRcdGlkc1xuXHRcdCkgPT4gc291cmNlLmdldEVudGl0aWVzQnlJZHMoIG1vZGVsTmFtZSwgaWRzICk7XG5cdFx0cmV0dXJuIHJlc29sdmVycztcblx0fSxcblx0e30sXG4pO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0QUNUSU9OX1RZUEVTIGFzIHR5cGVzLFxuXHRSRVNFVF9UWVBFUyBhcyByZXNldFR5cGVzLFxufSBmcm9tICcuL2FjdGlvbi10eXBlcyc7XG5cbi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGZyb21KUywgU2V0LCBPcmRlcmVkTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IERFRkFVTFRfTElTVFNfU1RBVEUgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5cbi8qKlxuICogUmVkdWNlciBtYW5hZ2luZyBpdGVtIGxpc3Qgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZSAgQ3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cdERpc3BhdGNoZWQgYWN0aW9uLlxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH1cdFVwZGF0ZWQgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNlaXZlTGlzdEl0ZW1zKFxuXHRzdGF0ZSA9IGZyb21KUyggREVGQVVMVF9MSVNUU19TVEFURSApLFxuXHRhY3Rpb25cbikge1xuXHRjb25zdCB7IHR5cGUsIGlkZW50aWZpZXIsIHF1ZXJ5U3RyaW5nIH0gPSBhY3Rpb247XG5cdGNvbnN0IHBhdGggPSBbIGlkZW50aWZpZXIsIHF1ZXJ5U3RyaW5nIF07XG5cdGxldCB7IGl0ZW1zIH0gPSBhY3Rpb247XG5cdGxldCBkb1VwZGF0ZSA9IHRydWUsXG5cdFx0ZXhpc3RpbmdWYWx1ZXM7XG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0xJU1Q6XG5cdFx0XHRleGlzdGluZ1ZhbHVlcyA9IHN0YXRlLmdldEluKCBwYXRoICkgfHwgU2V0KCk7XG5cdFx0XHRpdGVtcyA9IGV4aXN0aW5nVmFsdWVzLm1lcmdlKCBpdGVtcyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0VOVElUWV9MSVNUOlxuXHRcdFx0ZXhpc3RpbmdWYWx1ZXMgPSBzdGF0ZS5nZXRJbiggcGF0aCApIHx8IE9yZGVyZWRNYXAoKTtcblx0XHRcdGl0ZW1zID0gZXhpc3RpbmdWYWx1ZXMubWVyZ2UoXG5cdFx0XHRcdGl0ZW1zLm1hcCggKCBlbnRpdHkgKSA9PiBbIGVudGl0eS5pZCwgZW50aXR5IF0gKVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9BTExfU1RBVEU6XG5cdFx0XHRyZXR1cm4gZnJvbUpTKCBERUZBVUxUX0xJU1RTX1NUQVRFICk7XG5cdFx0Y2FzZSByZXNldFR5cGVzLlJFU0VUX1NUQVRFX0ZPUl9JREVOVElGSUVSOlxuXHRcdFx0cmV0dXJuIHN0YXRlLmRlbGV0ZSggaWRlbnRpZmllciApO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9TUEVDSUZJQ19TVEFURV9GT1JfSURFTlRJRklFUjpcblx0XHRcdHJldHVybiBzdGF0ZS5kZWxldGVJbiggWyBpZGVudGlmaWVyLCBxdWVyeVN0cmluZyBdICk7XG5cdFx0ZGVmYXVsdCA6XG5cdFx0XHRkb1VwZGF0ZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBkb1VwZGF0ZSA/XG5cdFx0c3RhdGUuc2V0SW4oIFsgaWRlbnRpZmllciwgcXVlcnlTdHJpbmcgXSwgaXRlbXMgKSA6XG5cdFx0c3RhdGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlY2VpdmVMaXN0SXRlbXM7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSwgZmluZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuXHRhcHBseVF1ZXJ5U3RyaW5nLFxuXHRnZXRQcmltYXJ5S2V5UXVlcnlTdHJpbmcsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgcmVjZWl2ZVJlc3BvbnNlLCByZWNlaXZlRW50aXR5UmVzcG9uc2UgfSBmcm9tICcuL2FjdGlvbnMnO1xuaW1wb3J0IHtcblx0ZmV0Y2gsXG5cdHNlbGVjdCxcblx0ZGlzcGF0Y2gsXG5cdHJlc29sdmVHZXRFbnRpdHlCeUlkRm9ySWRzLFxuXHRyZXNvbHZlU2VsZWN0LFxufSBmcm9tICcuLi9iYXNlLWNvbnRyb2xzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIGFzIENPUkVfUkVEVUNFUl9LRVkgfSBmcm9tICcuLi9jb3JlL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSBhcyBTQ0hFTUFfUkVEVUNFUl9LRVkgfSBmcm9tICcuLi9zY2hlbWEvY29uc3RhbnRzJztcblxuY29uc3QgREVGQVVMVF9FTVBUWV9BUlJBWSA9IFtdO1xuXG4vKipcbiAqIFJlc29sdmVyIGZvciBnZW5lcmljIGl0ZW1zIHJldHVybmVkIGZyb20gYW4gZW5kcG9pbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aWZpZXIgIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgaXRlbXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlTdHJpbmcgIEFkZGl0aW9uYWwgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgcGFzc2VkIG9uIHRvXG4gKiAgIHRoZSBSRVNUIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogZ2V0SXRlbXMoIGlkZW50aWZpZXIsIHF1ZXJ5U3RyaW5nICkge1xuXHRjb25zdCBpdGVtcyA9IHlpZWxkIGZldGNoKCB7XG5cdFx0cGF0aDogcXVlcnlTdHJpbmcsXG5cdH0gKTtcblx0eWllbGQgcmVjZWl2ZVJlc3BvbnNlKCBpZGVudGlmaWVyLCBxdWVyeVN0cmluZywgaXRlbXMgKTtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGZvciBoYW5kbGluZyBhbiBlbnRpdHkgcmVzcG9uc2UgYW5kIGNvbnN0cnVjdGluZyBCYXNlRW50aXR5XG4gKiBjaGlsZHJlbiBmcm9tIHRoZW0uXG4gKlxuICogTm90ZSwgdGhpcyB1c2VzIHRoZSBlbnRpdGllcyBzdG9yZWQgaW4gdGhlIGV2ZW50ZXNwcmVzc28vY29yZSBzdG9yZSBhcyB0aGVcbiAqIGF1dGhvcml0eSBzbyBpZiBhbiBlbnRpdHkgYWxyZWFkeSBleGlzdHMgdGhlcmUsIGl0IHJlcGxhY2VzIHdoYXQgd2FzXG4gKiByZXRyaWV2ZWQgZnJvbSB0aGUgc2VydmVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IHJlc3BvbnNlXG4gKiBAcmV0dXJuIHtJdGVyYWJsZUl0ZXJhdG9yPCo+fEFycmF5PEJhc2VFbnRpdHk+fSAgQW4gZW1wdHkgYXJyYXkgaWYgdGhlXG4gKiBmYWN0b3J5IGNhbm5vdCBiZSByZXRyaWV2ZWQgZm9yIHRoZSBtb2RlbC4gIE90aGVyd2lzZSB0aGUgY29uc3RydWN0ZWRcbiAqIGVudGl0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIGJ1aWxkQW5kRGlzcGF0Y2hFbnRpdGllc0Zyb21SZXNwb25zZSggbW9kZWxOYW1lLCByZXNwb25zZSApIHtcblx0Y29uc3QgZmFjdG9yeSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRGYWN0b3J5Rm9yTW9kZWwnLFxuXHRcdG1vZGVsTmFtZVxuXHQpO1xuXHRpZiAoIGlzRW1wdHkoIGZhY3RvcnkgKSApIHtcblx0XHRyZXR1cm4gREVGQVVMVF9FTVBUWV9BUlJBWTtcblx0fVxuXHRsZXQgZnVsbEVudGl0aWVzID0gcmVzcG9uc2UubWFwKFxuXHRcdCggZW50aXR5ICkgPT4gZmFjdG9yeS5mcm9tRXhpc3RpbmcoIGVudGl0eSApXG5cdCk7XG5cdGNvbnN0IGVudGl0eUlkcyA9IGZ1bGxFbnRpdGllcy5tYXAoICggZW50aXR5ICkgPT4gZW50aXR5LmlkICk7XG5cdC8vIGFyZSB0aGVyZSBhbHJlYWR5IGVudGl0aWVzIGZvciB0aGUgaWRzIGluIHRoZSBzdG9yZT8gIElmIHNvLCB3ZSB1c2UgdGhvc2Vcblx0Y29uc3QgZXhpc3RpbmdFbnRpdGllcyA9IHlpZWxkIHNlbGVjdChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRFbnRpdGllc0J5SWRzJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWRzXG5cdCk7XG5cdGlmICggISBpc0VtcHR5KCBleGlzdGluZ0VudGl0aWVzICkgKSB7XG5cdFx0ZnVsbEVudGl0aWVzID0gZnVsbEVudGl0aWVzLm1hcCggKCBlbnRpdHkgKSA9PiB7XG5cdFx0XHRyZXR1cm4gZmluZCggZXhpc3RpbmdFbnRpdGllcywgKCBleGlzdGluZ0VudGl0eSApID0+IHtcblx0XHRcdFx0cmV0dXJuIGV4aXN0aW5nRW50aXR5LmlkID09PSBlbnRpdHkuaWQ7XG5cdFx0XHR9ICkgfHwgZW50aXR5O1xuXHRcdH0gKTtcblx0fVxuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlRW50aXR5UmVjb3JkcycsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGZ1bGxFbnRpdGllc1xuXHQpO1xuXHR5aWVsZCByZXNvbHZlR2V0RW50aXR5QnlJZEZvcklkcyggbW9kZWxOYW1lLCBlbnRpdHlJZHMgKTtcblx0cmV0dXJuIGZ1bGxFbnRpdGllcztcbn1cblxuLyoqXG4gKiBSZXNvbHZlciBmb3IgbW9kZWwgZW50aXRpZXMgcmV0dXJuZWQgZnJvbSBhbiBlbmRwb2ludC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZ1xuICogQHJldHVybiB7SXRlcmFibGVJdGVyYXRvcjwqPnxBcnJheTxCYXNlRW50aXR5Pn0gQW4gZW1wdHkgYXJyYXkgaWYgbm9cbiAqIGVudGl0aWVzIHJldHJpZXZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBnZXRFbnRpdGllcyggbW9kZWxOYW1lLCBxdWVyeVN0cmluZyApIHtcblx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCBmZXRjaCgge1xuXHRcdHBhdGg6IGFwcGx5UXVlcnlTdHJpbmcoIG1vZGVsTmFtZSwgcXVlcnlTdHJpbmcgKSxcblx0fSApO1xuXHRpZiAoIGlzRW1wdHkoIHJlc3BvbnNlICkgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfRU1QVFlfQVJSQVk7XG5cdH1cblx0Y29uc3QgZnVsbEVudGl0aWVzID0geWllbGQgYnVpbGRBbmREaXNwYXRjaEVudGl0aWVzRnJvbVJlc3BvbnNlKFxuXHRcdG1vZGVsTmFtZSxcblx0XHRyZXNwb25zZVxuXHQpO1xuXHR5aWVsZCByZWNlaXZlRW50aXR5UmVzcG9uc2UoIG1vZGVsTmFtZSwgcXVlcnlTdHJpbmcsIGZ1bGxFbnRpdGllcyApO1xufVxuXG4vKipcbiAqIFJlc29sdmVyIGZvciBnZXR0aW5nIG1vZGVsIGVudGl0aWVzIGZvciBhIGdpdmVuIHNldCBvZiBpZHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn1pZHNcbiAqIEByZXR1cm4ge0l0ZXJhYmxlSXRlcmF0b3I8Kj58QXJyYXl9IEFuIGVtcHR5IGFycmF5IGlmIG5vIGVudGl0aWVzIHJldHJpZXZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBnZXRFbnRpdGllc0J5SWRzKCBtb2RlbE5hbWUsIGlkcyA9IFtdICkge1xuXHRjb25zdCBxdWVyeVN0cmluZyA9IGdldFByaW1hcnlLZXlRdWVyeVN0cmluZyggbW9kZWxOYW1lLCBpZHMgKTtcblx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCBmZXRjaCgge1xuXHRcdHBhdGg6IGFwcGx5UXVlcnlTdHJpbmcoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRxdWVyeVN0cmluZ1xuXHRcdCksXG5cdH0gKTtcblx0aWYgKCBpc0VtcHR5KCByZXNwb25zZSApICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHR9XG5cdGNvbnN0IGZ1bGxFbnRpdGllcyA9IHlpZWxkIGJ1aWxkQW5kRGlzcGF0Y2hFbnRpdGllc0Zyb21SZXNwb25zZShcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVzcG9uc2Vcblx0KTtcblx0eWllbGQgcmVjZWl2ZUVudGl0eVJlc3BvbnNlKCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nLCBmdWxsRW50aXRpZXMgKTtcbn1cbiIsIi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGlzUmVzb2x2aW5nIH0gZnJvbSAnLi4vYmFzZS1zZWxlY3RvcnMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IF9fLCBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgY3JlYXRlU2VsZWN0b3IgZnJvbSAncmVtZW1vJztcbmltcG9ydCB7XG5cdGFzc2VydEltbXV0YWJsZU9iamVjdEhhc1BhdGgsXG5cdGdldFByaW1hcnlLZXlRdWVyeVN0cmluZyxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgT3JkZXJlZE1hcCwgU2V0IH0gZnJvbSAnaW1tdXRhYmxlJztcblxuY29uc3QgREVGQVVMVF9FTVBUWV9BUlJBWSA9IFtdO1xuXG4vKipcbiAqIEdlbmVyaWMgaGVscGVyIGZvciByZXRyaWV2aW5nIGl0ZW1zIGZyb20gc3RhdGUgZm9yIGdpdmVuIGlkZW50aWZpZXIgYW5kXG4gKiBxdWVyeVN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpZmllclxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nXG4gKiBAcGFyYW0geyp9IGRlZmF1bHRFbXB0eSAgQ2FsbGVyIGNhbiBzdXBwbHkgd2hhdCB0aGUgZGVmYXVsdCBpcyB3aGVuIHN0YXRlIGlzXG4gKiBkb2Vzbid0IGhhdmUgZW50cmllcyBmb3IgdGhlIGdpdmVuIGlkZW50aWZpZXIgYW5kIHF1ZXJ5U3RyaW5nXG4gKiBAcmV0dXJuIHtBcnJheXxPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIGl0ZW1zIGlmIHRoZSBnaXZlbiBpZGVudGlmaWVyL1xuICogcXVlcnlzdHJpbmcgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHN0YXRlIG9yIHRoZSBnaXZlbiBpdGVtcyBhcyBhbiBhcnJheSBvclxuICogb2JqZWN0IChkZXBlbmRpbmcgb24gaG93IHRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgc3RhdGUpLlxuICovXG5jb25zdCByZXRyaWV2ZUl0ZW1zID1cblx0KFxuXHRcdHN0YXRlLFxuXHRcdGlkZW50aWZpZXIsXG5cdFx0cXVlcnlTdHJpbmcsXG5cdFx0ZGVmYXVsdEVtcHR5ID0gU2V0KClcblx0KSA9PiBzdGF0ZS5nZXRJbiggWyBpZGVudGlmaWVyLCBxdWVyeVN0cmluZyBdICkgfHwgZGVmYXVsdEVtcHR5O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIHRoZSBpdGVtcyBmb3IgdGhlIGdpdmVuIGlkZW50aWZpZXIgYW5kIHF1ZXJ5U3RyaW5nXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZSBEYXRhIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aWZpZXIgVGhlIGlkZW50aWZpZXIgdGhlIGl0ZW1zIGFyZSBiZWluZyByZXRyaWV2ZWQgZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nIFRoZSBxdWVyeSBzdHJpbmcgZm9yIHJldHJpZXZpbmcgdGhlIGl0ZW1zLlxuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2YgaXRlbXMgZm9yIHRoZSBnaXZlbiBtb2RlbCBhbmQgcXVlcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRJdGVtcyA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBpZGVudGlmaWVyLCBxdWVyeVN0cmluZyApID0+IHJldHJpZXZlSXRlbXMoXG5cdFx0c3RhdGUsXG5cdFx0aWRlbnRpZmllcixcblx0XHRxdWVyeVN0cmluZ1xuXHQpLnRvQXJyYXkoKSxcblx0KCBzdGF0ZSwgaWRlbnRpZmllciwgcXVlcnlTdHJpbmcgKSA9PiBbXG5cdFx0c3RhdGUuZ2V0SW4oIFsgaWRlbnRpZmllciwgcXVlcnlTdHJpbmcgXSApLFxuXHRdXG4pO1xuXG4vKipcbiAqIFJldHVybnMgYWxsIHRoZSBtb2RlbCBlbnRpdGllcyBmb3IgdGhlIGdpdmVuIG1vZGVsTmFtZSBhbmQgcXVlcnkgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZ1xuICogQHJldHVybiB7QXJyYXk8QmFzZUVudGl0eT59IFJldHVybnMgYXJyYXkgb2YgZW50aXRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbnRpdGllcyA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nICkgPT4gcmV0cmlldmVJdGVtcyhcblx0XHRzdGF0ZSxcblx0XHRtb2RlbE5hbWUsXG5cdFx0cXVlcnlTdHJpbmcsXG5cdFx0T3JkZXJlZE1hcCgpXG5cdCkudmFsdWVTZXEoKS50b0FycmF5KCksXG5cdCggc3RhdGUsIG1vZGVsTmFtZSwgcXVlcnlTdHJpbmcgKSA9PiBbXG5cdFx0c3RhdGUuZ2V0SW4oIFsgbW9kZWxOYW1lLCBxdWVyeVN0cmluZyBdICksXG5cdF1cbik7XG5cbi8qKlxuICogUmV0dXJucyBhbGwgdGhlIG1vZGVsIGVudGl0aWVzIGZvciB0aGUgZ2l2ZW4gbW9kZWxOYW1lIGFuZCBxdWVyeSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtBcnJheX0gaWRzXG4gKiBAcmV0dXJuIHtBcnJheTxCYXNlRW50aXR5Pn0gQW4gYXJyYXkgb2YgZW50aXRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbnRpdGllc0J5SWRzID0gKCBzdGF0ZSwgbW9kZWxOYW1lLCBpZHMgPSBbXSApID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBxdWVyeVN0cmluZyA9IGdldFByaW1hcnlLZXlRdWVyeVN0cmluZyggbW9kZWxOYW1lLCBpZHMgKTtcblx0XHRyZXR1cm4gZ2V0RW50aXRpZXMoIHN0YXRlLCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHR9XG59O1xuXG5nZXRFbnRpdGllc0J5SWRzLmNsZWFyID0gKCkgPT4gZ2V0RW50aXRpZXMuY2xlYXIoKTtcblxuLyoqXG4gKiBIZWxwZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBnaXZlbiBpZGVudGlmaWVyLCBzZWxlY3Rvck5hbWUsIGFuZCBxdWVyeVN0cmluZ1xuICogaXMgYmVpbmcgcmVzb2x2ZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGlmaWVyXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlTdHJpbmdcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VsZWN0b3IgaXMgY3VycmVudGx5IHJlcXVlc3RpbmcgaXRlbXMuXG4gKi9cbmZ1bmN0aW9uIGlzUmVxdWVzdGluZyggc3RhdGUsIGlkZW50aWZpZXIsIHNlbGVjdG9yTmFtZSwgcXVlcnlTdHJpbmcgKSB7XG5cdGFzc2VydEltbXV0YWJsZU9iamVjdEhhc1BhdGgoXG5cdFx0WyBpZGVudGlmaWVyIF0sXG5cdFx0c3RhdGUsXG5cdFx0c3ByaW50Zihcblx0XHRcdF9fKFxuXHRcdFx0XHQnVGhlIGdpdmVuIGlkZW50aWZpZXIgKCVzKSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc3RhdGUuJyxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdCksXG5cdFx0XHRpZGVudGlmaWVyLFxuXHRcdCksXG5cdCk7XG5cdHJldHVybiBpc1Jlc29sdmluZyggUkVEVUNFUl9LRVksIHNlbGVjdG9yTmFtZSwgaWRlbnRpZmllciwgcXVlcnlTdHJpbmcgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGl0ZW1zIGZvciB0aGUgZ2l2ZW4gaWRlbnRpZmllciBhbmQgcXVlcnkgc3RyaW5nIGFyZSBiZWluZ1xuICogcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGUgRGF0YSBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGlmaWVyICBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGl0ZW1zIGJlaW5nIHJlcXVlc3RlZFxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nIFRoZSBxdWVyeSBzdHJpbmcgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIGl0ZW1zIGFyZSBiZWluZyByZXF1ZXN0ZWQgb3Igbm90LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXF1ZXN0aW5nSXRlbXMoIHN0YXRlLCBpZGVudGlmaWVyLCBxdWVyeVN0cmluZyApIHtcblx0cmV0dXJuIGlzUmVxdWVzdGluZyggc3RhdGUsIGlkZW50aWZpZXIsICdnZXRJdGVtcycsIHF1ZXJ5U3RyaW5nICk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBnZXQgZW50aXRpZXMgcmVxdWVzdCBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyByZXNvbHZlZFxuICogb3Igbm90LlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIGVudGl0aWVzIChmb3IgdGhlIGdpdmVuIG1vZGVsKSBhcmUgYmVpbmdcbiAqIHJlcXVlc3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVxdWVzdGluZ0VudGl0aWVzKFxuXHRzdGF0ZSxcblx0bW9kZWxOYW1lLFxuXHRxdWVyeVN0cmluZ1xuKSB7XG5cdHJldHVybiBpc1JlcXVlc3RpbmcoIHN0YXRlLCBtb2RlbE5hbWUsICdnZXRFbnRpdGllcycsIHF1ZXJ5U3RyaW5nICk7XG59XG4iLCJleHBvcnQgY29uc3QgQUNUSU9OX1RZUEVTID0ge1xuXHRSRUNFSVZFX1NDSEVNQV9SRUNPUkQ6ICdSRUNFSVZFX1NDSEVNQV9SRUNPUkQnLFxuXHRSRUNFSVZFX0ZBQ1RPUllfRk9SX01PREVMOiAnUkVDRUlWRV9GQUNUT1JZX0ZPUl9NT0RFTCcsXG5cdFJFQ0VJVkVfUkVMQVRJT05fRU5EUE9JTlRfRk9SX01PREVMX0VOVElUWTpcblx0XHQnUkVDRUlWRV9SRUxBVElPTl9FTkRQT0lOVF9GT1JfTU9ERUxfRU5USVRZJyxcblx0UkVDRUlWRV9SRUxBVElPTl9TQ0hFTUE6ICdSRUNFSVZFX1JFTEFUSU9OX1NDSEVNQScsXG59O1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEFDVElPTl9UWVBFUyBhcyB0eXBlcyB9IGZyb20gJy4vYWN0aW9uLXR5cGVzJztcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFjdGlvbiBvYmplY3QgdXNlZCB0byB1cGRhdGUgdGhlIHN0b3JlIHdpdGggdGhlIHByb3ZpZGVkIHNjaGVtYVxuICogZm9yIHRoZSBwcm92aWRlZCBtb2RlbE5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7e3R5cGU6IHN0cmluZywgbW9kZWxOYW1lOiAqLCBzY2hlbWF9fSAgVGhlIGFjdGlvbiBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNlaXZlU2NoZW1hRm9yTW9kZWwoIG1vZGVsTmFtZSwgc2NoZW1hID0ge30gKSB7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogdHlwZXMuUkVDRUlWRV9TQ0hFTUFfUkVDT1JELFxuXHRcdG1vZGVsTmFtZSxcblx0XHRzY2hlbWEsXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhY3Rpb24gb2JqZWN0IHVzZWQgdG8gdXBkYXRlIHRoZSBzdG9yZSB3aXRoIHRoZSBwcm92aWRlZCBtb2RlbFxuICogZW50aXR5IGZhY3RvcnkgZm9yIHRoZSBwcm92aWRlZCBtb2RlbE5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IGZhY3RvcnlcbiAqIEByZXR1cm4ge3t0eXBlOiBzdHJpbmcsIG1vZGVsTmFtZTogc3RyaW5nLCBmYWN0b3J5OiBPYmplY3R9fSBBbiBhY3Rpb25cbiAqIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY2VpdmVGYWN0b3J5Rm9yTW9kZWwoIG1vZGVsTmFtZSwgZmFjdG9yeSA9IHt9ICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfRkFDVE9SWV9GT1JfTU9ERUwsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGZhY3RvcnksXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhY3Rpb24gb2JqZWN0IHVzZWQgdG8gdXBkYXRlIHRoZSBzdG9yZSB3aXRoIHRoZSBwcm92aWRlZCByZWxhdGlvblxuICogZW5kcG9pbnQgZm9yIHRoZSBtb2RlbCBhbmQgaWQsIGFuZCBpdHMgcmVsYXRpb25zLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuZHBvaW50XG4gKiBAcmV0dXJuIHtcbiAqIFx0e1xuICogXHRcdG1vZGVsTmFtZTogKixcbiAqIFx0XHRlbmRwb2ludDogKixcbiAqIFx0XHRyZWxhdGlvbk5hbWU6ICosXG4gKiBcdFx0ZW50aXR5SWQ6ICosXG4gKiBcdFx0dHlwZTogc3RyaW5nXG4gKiBcdH1cbiAqIH0gQW4gYWN0aW9uIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY2VpdmVSZWxhdGlvbkVuZHBvaW50Rm9yTW9kZWxFbnRpdHkoXG5cdG1vZGVsTmFtZSxcblx0ZW50aXR5SWQsXG5cdHJlbGF0aW9uTmFtZSxcblx0ZW5kcG9pbnRcbikge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfUkVMQVRJT05fRU5EUE9JTlRfRk9SX01PREVMX0VOVElUWSxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdGVuZHBvaW50LFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjZWl2ZVJlbGF0aW9uU2NoZW1hKFxuXHRtb2RlbE5hbWUsXG5cdHJlbGF0aW9uTmFtZSxcblx0cmVsYXRpb25TY2hlbWFcbikge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfUkVMQVRJT05fU0NIRU1BLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0cmVsYXRpb25TY2hlbWEsXG5cdH07XG59XG4iLCIvKipcbiAqIElkZW50aWZpZXIga2V5IGZvciB0aGlzIHN0b3JlIHJlZHVjZXIuXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgUkVEVUNFUl9LRVkgPSAnZXZlbnRlc3ByZXNzby9zY2hlbWEnO1xuXG5leHBvcnQgY29uc3QgSk9JTl9SRUxBVElPTl9UWVBFUyA9IFtcblx0J0VFX0hBQlRNX1JlbGF0aW9uJyxcblx0J0VFX0hBQlRNX0FueV9SZWxhdGlvbicsXG5dO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgcmVnaXN0ZXJTdG9yZSB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IFJFRFVDRVJfS0VZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0ICogYXMgc2VsZWN0b3JzIGZyb20gJy4vc2VsZWN0b3JzJztcbmltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCAqIGFzIHJlc29sdmVycyBmcm9tICcuL3Jlc29sdmVycyc7XG5pbXBvcnQgcmVkdWNlciBmcm9tICcuL3JlZHVjZXJzJztcbmltcG9ydCBjb250cm9scyBmcm9tICcuLi9iYXNlLWNvbnRyb2xzJztcbmltcG9ydCB7IGNyZWF0ZUVudGl0eVNlbGVjdG9ycywgY3JlYXRlRW50aXR5UmVzb2x2ZXJzIH0gZnJvbSAnLi9tb2RlbCc7XG5cbi8qKlxuICogQ3JlYXRlcyBzcGVjaWZpYyBtb2RlbCBlbnRpdHkgc2VsZWN0b3JzIChnZXRGYWN0b3J5Rm9yRXZlbnQgZXRjKVxuICogQHR5cGUge09iamVjdDxGdW5jdGlvbj59XG4gKi9cbmNvbnN0IGVudGl0eVNlbGVjdG9ycyA9IGNyZWF0ZUVudGl0eVNlbGVjdG9ycyggc2VsZWN0b3JzICk7XG5cbi8qKlxuICogQ3JlYXRlcyBzcGVjaWZpYyBtb2RlbCBlbnRpdHkgcmVzb2x2ZXJzIChnZXRGYWN0b3J5Rm9yRXZlbnQgZXRjKVxuICogQHR5cGUge09iamVjdDxGdW5jdGlvbj59XG4gKi9cbmNvbnN0IGVudGl0eVJlc29sdmVycyA9IGNyZWF0ZUVudGl0eVJlc29sdmVycyggcmVzb2x2ZXJzICk7XG5cbi8qKlxuICogUmVnaXN0cmF0aW9uIG9mIHN0b3JlIGZvciBldmVudGVzcHJlc3NvL3NjaGVtYS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmVnaXN0ZXJTdG9yZSggUkVEVUNFUl9LRVksIHtcblx0cmVkdWNlcixcblx0YWN0aW9ucyxcblx0Y29udHJvbHMsXG5cdHNlbGVjdG9yczogeyAuLi5zZWxlY3RvcnMsIC4uLmVudGl0eVNlbGVjdG9ycyB9LFxuXHRyZXNvbHZlcnM6IHsgLi4ucmVzb2x2ZXJzLCAuLi5lbnRpdHlSZXNvbHZlcnMgfSxcbn0gKTtcblxuZXhwb3J0IGNvbnN0IFNDSEVNQV9LRVkgPSBSRURVQ0VSX0tFWTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IE1PREVMX05BTUVTIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBnZXRNZXRob2ROYW1lIH0gZnJvbSAnLi4vYmFzZS1tb2RlbCc7XG5pbXBvcnQgeyBpc1Jlc29sdmluZyB9IGZyb20gJy4uL2Jhc2Utc2VsZWN0b3JzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIENyZWF0ZXMgc2VsZWN0b3JzIGZvciBlYWNoIHJlZ2lzdGVyZWQgbW9kZWwgbmFtZSB3cmFwcGluZyB0aGUgZ2VuZXJpYyBzb3VyY2VcbiAqIHNlbGVjdG9ycy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxmdW5jdGlvbj59IHNvdXJjZVxuICogQHJldHVybiB7T2JqZWN0PGZ1bmN0aW9uPn0gQWxsIHRoZSBnZW5lcmF0ZWQgc2VsZWN0b3JzIGZvciBlYWNoIG1vZGVsLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRW50aXR5U2VsZWN0b3JzID0gKCBzb3VyY2UgKSA9PiBNT0RFTF9OQU1FUy5yZWR1Y2UoXG5cdCggc2VsZWN0b3JzLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0Y29uc3Qgc2NoZW1hTWV0aG9kTmFtZSA9IGdldE1ldGhvZE5hbWUoIG1vZGVsTmFtZSwgJ3NjaGVtYScsICdnZXQnICk7XG5cdFx0Y29uc3QgZmFjdG9yeU1ldGhvZE5hbWUgPSBnZXRNZXRob2ROYW1lKCBtb2RlbE5hbWUsICdmYWN0b3J5JywgJ2dldCcgKTtcblx0XHRzZWxlY3RvcnNbIHNjaGVtYU1ldGhvZE5hbWUgXSA9IChcblx0XHRcdHN0YXRlXG5cdFx0KSA9PiBzb3VyY2UuZ2V0U2NoZW1hRm9yTW9kZWwoIHN0YXRlLCBtb2RlbE5hbWUgKTtcblx0XHRzZWxlY3RvcnNbIGdldE1ldGhvZE5hbWUoIG1vZGVsTmFtZSwgJ3NjaGVtYScsICdpc1JlcXVlc3RpbmcnICkgXSA9XG5cdFx0XHQoKSA9PiBpc1Jlc29sdmluZyggUkVEVUNFUl9LRVksIHNjaGVtYU1ldGhvZE5hbWUgKTtcblx0XHRzZWxlY3RvcnNbIGZhY3RvcnlNZXRob2ROYW1lIF0gPSAoXG5cdFx0XHRzdGF0ZVxuXHRcdCkgPT4gc291cmNlLmdldEZhY3RvcnlGb3JNb2RlbCggc3RhdGUsIG1vZGVsTmFtZSApO1xuXHRcdHNlbGVjdG9yc1sgZ2V0TWV0aG9kTmFtZSggbW9kZWxOYW1lLCAnZmFjdG9yeScsICdpc1JlcXVlc3RpbmcnICkgXSA9XG5cdFx0XHQoKSA9PiBpc1Jlc29sdmluZyggUkVEVUNFUl9LRVksIGZhY3RvcnlNZXRob2ROYW1lICk7XG5cdFx0cmV0dXJuIHNlbGVjdG9ycztcblx0fSxcblx0e31cbik7XG5cbi8qKlxuICogQ3JlYXRlcyByZXNvbHZlcnMgZm9yIGVhY2ggcmVnaXN0ZXJlZCBtb2RlbCBuYW1lIHdyYXBwaW5nIHRoZSBnZW5lcmljIHNvdXJjZVxuICogcmVzb2x2ZXJzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGZ1bmN0aW9uPn0gc291cmNlXG4gKiBAcmV0dXJuIHtPYmplY3Q8ZnVuY3Rpb24+fSBBbGwgdGhlIGdlbmVyYXRlZCByZXNvbHZlcnMgZm9yIGVhY2ggbW9kZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVFbnRpdHlSZXNvbHZlcnMgPSAoIHNvdXJjZSApID0+IE1PREVMX05BTUVTLnJlZHVjZShcblx0KCByZXNvbHZlcnMsIG1vZGVsTmFtZSApID0+IHtcblx0XHRyZXNvbHZlcnNbIGdldE1ldGhvZE5hbWUoIG1vZGVsTmFtZSwgJ3NjaGVtYScsICdnZXQnICkgXSA9ICgpID0+XG5cdFx0XHRzb3VyY2UuZ2V0U2NoZW1hRm9yTW9kZWwoIG1vZGVsTmFtZSApO1xuXHRcdHJlc29sdmVyc1sgZ2V0TWV0aG9kTmFtZSggbW9kZWxOYW1lLCAnZmFjdG9yeScsICdnZXQnICkgXSA9ICgpID0+XG5cdFx0XHRzb3VyY2UuZ2V0RmFjdG9yeUZvck1vZGVsKCBtb2RlbE5hbWUgKTtcblx0XHRyZXR1cm4gcmVzb2x2ZXJzO1xuXHR9LFxuXHR7fVxuKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGNvbWJpbmVSZWR1Y2VycyB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBub3JtYWxpemVFbnRpdHlJZCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuaW1wb3J0IHsgREVGQVVMVF9TQ0hFTUFfU1RBVEUsIHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHtcblx0aXNTY2hlbWFSZXNwb25zZU9mTW9kZWwsXG5cdGlzTW9kZWxFbnRpdHlGYWN0b3J5T2ZNb2RlbCxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBmcm9tSlMsIE1hcCB9IGZyb20gJ2ltbXV0YWJsZSc7XG5pbXBvcnQgaXNTaGFsbG93RXF1YWwgZnJvbSAnQHdvcmRwcmVzcy9pcy1zaGFsbG93LWVxdWFsJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEFDVElPTl9UWVBFUyBhcyB0eXBlcyB9IGZyb20gJy4vYWN0aW9uLXR5cGVzJztcbi8qKlxuICogUmVkdWNlciBmb3IgYSBtb2RlbCBzY2hlbWEuXG4gKiBAcGFyYW0ge01hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge01hcH0gVGhlIG5ldyAob3Igb3JpZ2luYWwpIHN0YXRlLlxuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZVNjaGVtYSA9IChcblx0c3RhdGUgPSBmcm9tSlMoIERFRkFVTFRfU0NIRU1BX1NUQVRFLnNjaGVtYSApLFxuXHRhY3Rpb25cbikgPT4ge1xuXHRjb25zdCB7IHR5cGUsIHNjaGVtYSB9ID0gYWN0aW9uO1xuXHR0cnkge1xuXHRcdGNvbnN0IG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ubW9kZWxOYW1lICk7XG5cdFx0aWYgKFxuXHRcdFx0aXNTY2hlbWFSZXNwb25zZU9mTW9kZWwoIHNjaGVtYSwgbW9kZWxOYW1lICkgJiZcblx0XHRcdHR5cGUgPT09IHR5cGVzLlJFQ0VJVkVfU0NIRU1BX1JFQ09SRFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHN0YXRlLnNldCggbW9kZWxOYW1lLCBzY2hlbWEgKTtcblx0XHR9XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHJldHVybiBzdGF0ZTtcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIFJlZHVjZXIgZm9yIGEgbW9kZWwgZmFjdG9yeVxuICogQHBhcmFtIHtNYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtNYXB9IHRoZSBuZXcgKG9yIG9yaWdpbmFsKSBzdGF0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVGYWN0b3J5ID0gKFxuXHRzdGF0ZSA9IGZyb21KUyggREVGQVVMVF9TQ0hFTUFfU1RBVEUuZmFjdG9yeSApLFxuXHRhY3Rpb25cbikgPT4ge1xuXHRjb25zdCB7IHR5cGUsIGZhY3RvcnkgfSA9IGFjdGlvbjtcblx0dHJ5IHtcblx0XHRjb25zdCBtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLm1vZGVsTmFtZSApO1xuXHRcdGlmIChcblx0XHRcdGlzTW9kZWxFbnRpdHlGYWN0b3J5T2ZNb2RlbCggZmFjdG9yeSwgbW9kZWxOYW1lICkgJiZcblx0XHRcdHR5cGUgPT09IHR5cGVzLlJFQ0VJVkVfRkFDVE9SWV9GT1JfTU9ERUxcblx0XHQpIHtcblx0XHRcdHJldHVybiBzdGF0ZS5zZXQoIG1vZGVsTmFtZSwgZmFjdG9yeSApO1xuXHRcdH1cblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0cmV0dXJuIHN0YXRlO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogUmVkdWNlciBmb3IgcmVsYXRpb24gZW5kcG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7TWFwfXN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtNYXB9IE5ldyBvciBvcmlnaW5hbCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVSZWxhdGlvbkVuZHBvaW50Rm9yRW50aXR5ID0gKFxuXHRzdGF0ZSA9IGZyb21KUyggREVGQVVMVF9TQ0hFTUFfU1RBVEUucmVsYXRpb25FbmRwb2ludHMgKSxcblx0YWN0aW9uXG4pID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCB7IHR5cGUsIGVudGl0eUlkLCBlbmRwb2ludCB9ID0gYWN0aW9uO1xuXHRcdGNvbnN0IG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ubW9kZWxOYW1lICk7XG5cdFx0Y29uc3QgcmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIGFjdGlvbi5yZWxhdGlvbk5hbWUgKTtcblx0XHRpZiAoIHR5cGUgPT09IHR5cGVzLlJFQ0VJVkVfUkVMQVRJT05fRU5EUE9JTlRfRk9SX01PREVMX0VOVElUWSApIHtcblx0XHRcdHJldHVybiBzdGF0ZS5zZXRJbihcblx0XHRcdFx0WyBtb2RlbE5hbWUsIG5vcm1hbGl6ZUVudGl0eUlkKCBlbnRpdHlJZCApLCByZWxhdGlvbk5hbWUgXSxcblx0XHRcdFx0ZW5kcG9pbnRcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGNhdGNoICggZSApIHtcblx0XHRyZXR1cm4gc3RhdGU7XG5cdH1cblx0cmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBSZWR1Y2VyIGZvciByZWxhdGlvbiBzY2hlbWFcbiAqXG4gKiBAcGFyYW0ge01hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge01hcH0gTmV3IG9yIG9yaWdpbmFsIHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlUmVsYXRpb25TY2hlbWEgPSAoIHN0YXRlID0gTWFwKCksIGFjdGlvbiApID0+IHtcblx0aWYgKCBhY3Rpb24udHlwZSA9PT0gdHlwZXMuUkVDRUlWRV9SRUxBVElPTl9TQ0hFTUEgKSB7XG5cdFx0Y29uc3QgbW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIGFjdGlvbi5tb2RlbE5hbWUgKTtcblx0XHRjb25zdCByZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLnJlbGF0aW9uTmFtZSApO1xuXHRcdGlmICggaXNTaGFsbG93RXF1YWwoXG5cdFx0XHRzdGF0ZS5nZXRJbiggWyBtb2RlbE5hbWUsIHJlbGF0aW9uTmFtZSBdLCB7fSApLFxuXHRcdFx0YWN0aW9uLnJlbGF0aW9uU2NoZW1hLFxuXHRcdCkgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0fVxuXHRcdHJldHVybiBzdGF0ZS5zZXRJbihcblx0XHRcdFsgbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgXSxcblx0XHRcdGFjdGlvbi5yZWxhdGlvblNjaGVtYVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBCZSBhd2FyZSB0aGF0IHRoZSByb290IHN0YXRlIGlzIGEgcGxhaW4gb2JqZWN0IGJ1dCBlYWNoIHNsaWNlICgnc2NoZW1hJyxcbiAqICdmYWN0b3J5JywgJ3JlbGF0aW9uRW5kcG9pbnRzJykgaXMgYW4gaW1tdXRhYmxlIE1hcC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY29tYmluZVJlZHVjZXJzKCB7XG5cdHNjaGVtYTogcmVjZWl2ZVNjaGVtYSxcblx0ZmFjdG9yeTogcmVjZWl2ZUZhY3RvcnksXG5cdHJlbGF0aW9uRW5kcG9pbnRzOiByZWNlaXZlUmVsYXRpb25FbmRwb2ludEZvckVudGl0eSxcblx0cmVsYXRpb25TY2hlbWE6IHJlY2VpdmVSZWxhdGlvblNjaGVtYSxcbn0gKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdGlzU2NoZW1hUmVzcG9uc2VPZk1vZGVsLFxuXHRpc01vZGVsRW50aXR5LFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7XG5cdGdldEVuZHBvaW50LFxuXHRzdHJpcEJhc2VSb3V0ZUZyb21VcmwsXG5cdGNyZWF0ZUVudGl0eUZhY3RvcnksXG5cdE1PREVMX1BSRUZJWEVTLFxuXHRzaW5ndWxhck1vZGVsTmFtZSxcblx0cGx1cmFsTW9kZWxOYW1lLFxuXHRnZXRQcmltYXJ5S2V5LFxuXHRtb2RlbE5hbWVGb3JRdWVyeVN0cmluZyxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQge1xuXHRyZWNlaXZlU2NoZW1hRm9yTW9kZWwsXG5cdHJlY2VpdmVGYWN0b3J5Rm9yTW9kZWwsXG5cdHJlY2VpdmVSZWxhdGlvbkVuZHBvaW50Rm9yTW9kZWxFbnRpdHksXG5cdHJlY2VpdmVSZWxhdGlvblNjaGVtYSxcbn0gZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCB7IGZldGNoLCByZXNvbHZlU2VsZWN0IH0gZnJvbSAnLi4vYmFzZS1jb250cm9scyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSBhcyBDT1JFX1JFRFVDRVJfS0VZIH0gZnJvbSAnLi4vY29yZS9jb25zdGFudHMnO1xuaW1wb3J0IHtcblx0UkVEVUNFUl9LRVkgYXMgU0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRKT0lOX1JFTEFUSU9OX1RZUEVTLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQSByZXNvbHZlciBmb3IgZ2V0dGluZyB0aGUgc2NoZW1hIGZvciBhIGdpdmVuIG1vZGVsIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHJpZXZlZCBzY2hlbWEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogZ2V0U2NoZW1hRm9yTW9kZWwoIG1vZGVsTmFtZSApIHtcblx0Y29uc3QgcGF0aCA9IGdldEVuZHBvaW50KCBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICkgKTtcblx0Y29uc3Qgc2NoZW1hID0geWllbGQgZmV0Y2goIHsgcGF0aCwgbWV0aG9kOiAnT1BUSU9OUycgfSApO1xuXHR5aWVsZCByZWNlaXZlU2NoZW1hRm9yTW9kZWwoIG1vZGVsTmFtZSwgc2NoZW1hICk7XG5cdHJldHVybiBzY2hlbWE7XG59XG5cbi8qKlxuICogQSByZXNvbHZlciBmb3IgZ2V0dGluZyB0aGUgbW9kZWwgZW50aXR5IGZhY3RvcnkgZm9yIGEgZ2l2ZW4gbW9kZWwgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge09iamVjdHxudWxsfSByZXRyaWV2ZWQgZmFjdG9yeVxuICovXG5leHBvcnQgZnVuY3Rpb24qIGdldEZhY3RvcnlGb3JNb2RlbCggbW9kZWxOYW1lLCBzY2hlbWEgPSB7fSApIHtcblx0aWYgKCAhIGlzU2NoZW1hUmVzcG9uc2VPZk1vZGVsKCBzY2hlbWEsIG1vZGVsTmFtZSApICkge1xuXHRcdHNjaGVtYSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0XHQnZ2V0U2NoZW1hRm9yTW9kZWwnLFxuXHRcdFx0bW9kZWxOYW1lXG5cdFx0KTtcblx0fVxuXHRpZiAoICEgaXNTY2hlbWFSZXNwb25zZU9mTW9kZWwoIHNjaGVtYSwgbW9kZWxOYW1lICkgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgZmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZhY3RvcnkoXG5cdFx0bW9kZWxOYW1lLFxuXHRcdHNjaGVtYS5zY2hlbWEsXG5cdFx0TU9ERUxfUFJFRklYRVMoIG1vZGVsTmFtZSApXG5cdCk7XG5cdHlpZWxkIHJlY2VpdmVGYWN0b3J5Rm9yTW9kZWwoIG1vZGVsTmFtZSwgZmFjdG9yeSApO1xuXHRyZXR1cm4gZmFjdG9yeTtcbn1cblxuLyoqXG4gKiBBIHJlc29sdmVyIGZvciBnZXR0aW5nIHRoZSByZWxhdGlvbiBlbmRwb2ludCBmb3IgYSBnaXZlbiBtb2RlbCwgaXQncyBpZCwgYW5kXG4gKiB0aGUgcmVxdWVzdGVkIHJlbGF0aW9uLlxuICpcbiAqIFRoZSBFRSBSRVNUIGFwaSBuYW1lcyByZWxhdGlvbnMgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhleSB0aGVyZSBhcmUgc2luZ3VsYXJcbiAqIG9yIHBsdXJhbCByZWxhdGlvbnMgb24gYSBnaXZlbiBtb2RlbCAoZWcuIFJlZ2lzdHJhdGlvbnMgaGF2ZSBvbmUgZXZlbnRcbiAqIHJlbGF0aW9uLCBidXQgRXZlbnRzIGNhbiBoYXZlIG11bHRpcGxlIGRhdGV0aW1lcykuICBUaGlzIG1lYW5zIHRoZSBvbmx5IHdheVxuICogdG8gZGVyaXZlIGFuIGFjY3VyYXRlIGVuZHBvaW50IGZvciBhIGdpdmVuIHJlbGF0aW9uIHJlcXVlc3Qgb24gYW4gZW50aXR5IGlzXG4gKiB0byByZXRyaWV2ZSB0aGUgZW50aXR5IGZyb20gdGhlIHJlc291cmNlIGFuZCBkZXJpdmUgdGhlIGVuZHBvaW50IGZyb20gdGhlXG4gKiBsaW5rcyBpbiB0aGUgcmVzcG9uc2UuXG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtJdGVyYWJsZUl0ZXJhdG9yPCo+fHN0cmluZ30gQSBnZW5lcmF0b3Igb3IgdGhlIGRlcml2ZWQgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogZ2V0UmVsYXRpb25FbmRwb2ludEZvckVudGl0eUlkKFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuXHRyZWxhdGlvbk1vZGVsTmFtZVxuKSB7XG5cdC8vIGZpcnN0IGF0dGVtcHQgdG8gZ2V0IHRoZSByZWxhdGlvbiBlbmRwb2ludCBmcm9tIHRoZSBlbnRpdHkgdGhhdCBtaWdodFxuXHQvLyBhbHJlYWR5IGJlIGluIGNvcmUgc3RhdGUuXG5cdGNvbnN0IGVudGl0eSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0RW50aXR5QnlJZCcsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkXG5cdCk7XG5cdHJlbGF0aW9uTW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTW9kZWxOYW1lICk7XG5cdGNvbnN0IHBsdXJhbFJlbGF0aW9uTmFtZSA9IHBsdXJhbE1vZGVsTmFtZSggcmVsYXRpb25Nb2RlbE5hbWUgKTtcblx0bGV0IGVuZHBvaW50ID0gJyc7XG5cdGlmICggaXNNb2RlbEVudGl0eSggZW50aXR5ICkgJiYgZW50aXR5WyBwbHVyYWxSZWxhdGlvbk5hbWUgKyAnUmVzb3VyY2UnIF0gKSB7XG5cdFx0ZW5kcG9pbnQgPSBzdHJpcEJhc2VSb3V0ZUZyb21VcmwoXG5cdFx0XHRlbnRpdHlbIHBsdXJhbFJlbGF0aW9uTmFtZSArICdSZXNvdXJjZScgXS5yZXNvdXJjZUxpbmtcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgZmV0Y2goXG5cdFx0XHR7XG5cdFx0XHRcdHBhdGg6IGdldEVuZHBvaW50KCBtb2RlbE5hbWUgKSArICcvJyArIGVudGl0eUlkLFxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0aWYgKCAhIHJlc3BvbnNlLl9saW5rcyApIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdFx0Y29uc3QgbGlua3MgPSByZXNwb25zZS5fbGlua3MgfHwge307XG5cdFx0Y29uc3QgYmFzZVJlbGF0aW9uUGF0aCA9ICdodHRwczovL2FwaS5ldmVudGVzcHJlc3NvLmNvbS8nO1xuXHRcdGVuZHBvaW50ID0gbGlua3NbXG5cdFx0XHRiYXNlUmVsYXRpb25QYXRoICsgcmVsYXRpb25Nb2RlbE5hbWVcblx0XHRdIHx8ICcnO1xuXHRcdGVuZHBvaW50ID0gKCBlbmRwb2ludCA9PT0gJycgJiYgbGlua3NbXG5cdFx0XHRiYXNlUmVsYXRpb25QYXRoICsgcGx1cmFsUmVsYXRpb25OYW1lXG5cdFx0XSApIHx8IGVuZHBvaW50O1xuXHR9XG5cdGlmICggZW5kcG9pbnQgKSB7XG5cdFx0eWllbGQgcmVjZWl2ZVJlbGF0aW9uRW5kcG9pbnRGb3JNb2RlbEVudGl0eShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkLFxuXHRcdFx0cmVsYXRpb25Nb2RlbE5hbWUsXG5cdFx0XHRlbmRwb2ludFxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIGVuZHBvaW50O1xufVxuXG4vKipcbiAqIEEgcmVzb2x2ZXIgZm9yIGdldHRpbmcgdGhlIHByaW1hcnkga2V5IHN0cmluZyB0byB1c2UgaW4gYSBxdWVyeSBmb3IgdGhlIGdpdmVuXG4gKiBtb2RlbCBhbmQgcmVsYXRpb24uIFRoaXMgY29uc2lkZXJzIHRoZSBqb2luIHR5cGUgZm9yIHRoZSByZWxhdGlvbi5cbiAqXG4gKiBAc2VlIHRoZSBgZ2V0UmVsYXRpb25QcmltYXJ5S2V5U3RyaW5nYCBzZWxlY3RvciBmb3IgZXhhbXBsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwcmltYXJ5IGtleSBzdHJpbmcgdG8gdXNlIG9yIGFuIGVtcHR5IHN0cmluZyBpZiByZWxhdGlvblxuICogdHlwZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBnZXRSZWxhdGlvblByaW1hcnlLZXlTdHJpbmcoIG1vZGVsTmFtZSwgcmVsYXRpb25OYW1lICkge1xuXHQvLyBub3JtYWxpemVcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IHJlbGF0aW9uVHlwZSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRSZWxhdGlvblR5cGUnLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRyZWxhdGlvbk5hbWVcblx0KTtcblx0aWYgKCByZWxhdGlvblR5cGUgPT09ICcnICkge1xuXHRcdHJldHVybiAnJztcblx0fVxuXHRjb25zdCByZWxhdGlvblByaW1hcnlLZXkgPSBnZXRQcmltYXJ5S2V5KCByZWxhdGlvbk5hbWUgKTtcblx0cmV0dXJuIHJlbGF0aW9uVHlwZSA9PT0gJ0VFX0JlbG9uZ3NfVG9fUmVsYXRpb24nID9cblx0XHRyZWxhdGlvblByaW1hcnlLZXkgOlxuXHRcdGAkeyBtb2RlbE5hbWVGb3JRdWVyeVN0cmluZyggcmVsYXRpb25OYW1lICkgfS4keyByZWxhdGlvblByaW1hcnlLZXkgfWA7XG59XG5cbi8qKlxuICogQSByZXNvbHZlciBmb3IgcmV0dXJuaW5nIHdoYXQgdGhlIGV4cGVjdGVkIHJlc3BvbnNlIHR5cGUgaXMgZm9yIHRoZSBnaXZlblxuICogcmVsYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgVGhlIG1vZGVsIHRoZSByZWxhdGlvbiBpcyBmb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lIFRoZSBtb2RlbCBuYW1lIHRoZSByZWxhdGlvbiBpcyB0by5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHR5cGUgb2YgdGhlIHJlbGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIGdldFJlbGF0aW9uUmVzcG9uc2VUeXBlKCBtb2RlbE5hbWUsIHJlbGF0aW9uTmFtZSApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IHJlbGF0aW9uU2NoZW1hID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0aW9uU2NoZW1hJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHQpO1xuXHRyZXR1cm4gcmVsYXRpb25TY2hlbWEgIT09IG51bGwgPyByZWxhdGlvblNjaGVtYS50eXBlIDogJyc7XG59XG5cbi8qKlxuICogQSByZXNvbHZlciBmb3IgcmV0dXJuaW5nIHdoZXRoZXIgdGhlIGdpdmVuIG1vZGVsTmFtZSBhbmQgcmVsYXRpb25OYW1lIGhhdmVcbiAqIGEgam9pbiB0YWJsZSBmb3IgcmVwcmVzZW50aW5nIHRoZWlyIHJlbGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIHRoZXJlIGlzIGEgam9pbiB0YWJsZSwgZmFsc2UgbWVhbnMgdGhlcmUgaXNuJ3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogaGFzSm9pblRhYmxlUmVsYXRpb24oIG1vZGVsTmFtZSwgcmVsYXRpb25OYW1lICkge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0Y29uc3QgcmVsYXRpb25UeXBlID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0aW9uVHlwZScsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdHJlbGF0aW9uTmFtZSxcblx0KTtcblx0cmV0dXJuIEpPSU5fUkVMQVRJT05fVFlQRVMuaW5kZXhPZiggcmVsYXRpb25UeXBlICkgPiAtMTtcbn1cblxuLyoqXG4gKiBBIHJlc29sdmVyIGZvciBnZXR0aW5nIHRoZSByZWxhdGlvbiB0eXBlIGRlc2NyaWJpbmcgdGhlIHJlbGF0aW9uIGJldHdlZW5cbiAqIG1vZGVsTmFtZSBhbmQgcmVsYXRpb25OYW1lXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSAgVGhlIHJlbGF0aW9uIHR5cGUgdG8gZGVzY3JpYmUgdGhlIHJlbGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogZ2V0UmVsYXRpb25UeXBlKCBtb2RlbE5hbWUsIHJlbGF0aW9uTmFtZSApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IHJlbGF0aW9uU2NoZW1hID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0aW9uU2NoZW1hJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25OYW1lXG5cdCk7XG5cdHJldHVybiByZWxhdGlvblNjaGVtYSAhPT0gbnVsbCA/IHJlbGF0aW9uU2NoZW1hLnJlbGF0aW9uX3R5cGUgOiAnJztcbn1cblxuLyoqXG4gKiBBIHJlc29sdmVyIGZvciByZXRyaWV2aW5nIHRoZSByZWxhdGlvbiBzY2hlbWEgZnJvbSB0aGUgc2VydmVyIGZvciB0aGUgZ2l2ZW5cbiAqIG1vZGVsTmFtZSBhbmQgcmVsYXRpb25OYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEB0aHJvd3MgRXJyb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBnZXRSZWxhdGlvblNjaGVtYSggbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRjb25zdCBwbHVyYWxSZWxhdGlvbk5hbWUgPSBwbHVyYWxNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRjb25zdCBzY2hlbWEgPSB5aWVsZCByZXNvbHZlU2VsZWN0KFxuXHRcdFNDSEVNQV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0U2NoZW1hRm9yTW9kZWwnLFxuXHRcdG1vZGVsTmFtZVxuXHQpO1xuXHRpZiAoIHNjaGVtYSA9PT0gbnVsbCApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHQnVGhlICcgKyBtb2RlbE5hbWUgKyAnIGRvZXMgbm90IGhhdmUgYSBzY2hlbWEnXG5cdFx0KTtcblx0fVxuXHQvLyBpcyB0aGVyZSBhIHNjaGVtYSBmb3IgcGx1cmFsIHJlbGF0aW9uIG5hbWU/XG5cdGxldCB0eXBlU2NoZW1hID0gc2NoZW1hLnNjaGVtYS5wcm9wZXJ0aWVzWyBwbHVyYWxSZWxhdGlvbk5hbWUgXSB8fCBudWxsO1xuXHR0eXBlU2NoZW1hID0gdHlwZVNjaGVtYSA9PT0gbnVsbCAmJlxuXHRcdCEgaXNVbmRlZmluZWQoIHNjaGVtYS5zY2hlbWEucHJvcGVydGllc1sgcmVsYXRpb25OYW1lIF0gKSA/XG5cdFx0c2NoZW1hLnNjaGVtYS5wcm9wZXJ0aWVzWyByZWxhdGlvbk5hbWUgXSA6XG5cdFx0dHlwZVNjaGVtYTtcblx0aWYgKCB0eXBlU2NoZW1hID09PSBudWxsICkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdCdUaGVyZSBpcyBubyByZWxhdGlvbiBmb3IgJyArIHJlbGF0aW9uTmFtZSArICcgb24gdGhlICcgK1xuXHRcdFx0J21vZGVsICcgKyBtb2RlbE5hbWVcblx0XHQpO1xuXHR9XG5cdHlpZWxkIHJlY2VpdmVSZWxhdGlvblNjaGVtYShcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHR5cGVTY2hlbWFcblx0KTtcbn1cbiIsIi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGlzUmVzb2x2aW5nLCBoYXNGaW5pc2hlZFJlc29sdmluZyB9IGZyb20gJy4uL2Jhc2Utc2VsZWN0b3JzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZLCBKT0lOX1JFTEFUSU9OX1RZUEVTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0c2luZ3VsYXJNb2RlbE5hbWUsXG5cdGdldFByaW1hcnlLZXksXG5cdG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBub3JtYWxpemVFbnRpdHlJZCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCBjcmVhdGVTZWxlY3RvciBmcm9tICdyZW1lbW8nO1xuXG4vKipcbiAqIFNlbGVjdG9yIGZvciByZXR1cm5pbmcgdGhlIHNjaGVtYSBvYmplY3QgZm9yIGEgZ2l2ZW4gbW9kZWwgbmFtZSBmcm9tIHRoZVxuICogc3RhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHNjaGVtYSBvYmplY3Qgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hRm9yTW9kZWwoIHN0YXRlLCBtb2RlbE5hbWUgKSB7XG5cdHJldHVybiBzdGF0ZS5zY2hlbWEuZ2V0KCBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICksIG51bGwgKTtcbn1cblxuLyoqXG4gKiBTZWxlY3RvciBmb3IgcmV0dXJuaW5nIHdoZXRoZXIgdGhlIHNjaGVtYSBpcyBiZWluZyByZXF1ZXN0ZWQgb3Igbm90IGZvciB0aGVcbiAqIGdpdmVuIG1vZGVsIG5hbWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBpdHMgYmVpbmcgcmVxdWVzdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXF1ZXN0aW5nU2NoZW1hRm9yTW9kZWwoIHN0YXRlLCBtb2RlbE5hbWUgKSB7XG5cdHJldHVybiBpc1Jlc29sdmluZyhcblx0XHRSRURVQ0VSX0tFWSxcblx0XHQnZ2V0U2NoZW1hRm9yTW9kZWwnLFxuXHRcdHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKVxuXHQpO1xufVxuXG4vKipcbiAqIFNlbGVjdG9yIGZvciByZXR1cm5pbmcgd2hldGhlciB0aGUgc2NoZW1hIGhhcyBiZWVuIHJlc29sdmVkIG9yIG5vdCBmb3IgdGhlXG4gKiBnaXZlbiBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIHRoYXQgdGhlIHNjaGVtYSBoYXMgZmluaXNoZWQgcmVzb2x2aW5nIGZvciB0aGlzXG4gKiBtb2RlbCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb2x2ZWRTY2hlbWFGb3JNb2RlbCggc3RhdGUsIG1vZGVsTmFtZSApIHtcblx0cmV0dXJuIGhhc0ZpbmlzaGVkUmVzb2x2aW5nKFxuXHRcdFJFRFVDRVJfS0VZLFxuXHRcdCdnZXRTY2hlbWFGb3JNb2RlbCcsXG5cdFx0c2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApXG5cdCk7XG59XG5cbi8qKlxuICogU2VsZWN0b3IgZm9yIHJldHVybmluZyB0aGUgbW9kZWwgZW50aXR5IGZhY3Rvcnkgb2JqZWN0IGZvciBhIGdpdmVuXG4gKiBtb2RlbCBuYW1lIGZyb20gdGhlIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtb2RlbCBlbnRpdHkgZmFjdG9yeSBvciBudWxsIGlmIGl0IGRvZXNuJ3RcbiAqIGV4aXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmFjdG9yeUZvck1vZGVsKCBzdGF0ZSwgbW9kZWxOYW1lICkge1xuXHRjb25zdCBmYWN0b3J5ID0gc3RhdGUuZmFjdG9yeS5nZXQoIHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKSwgbnVsbCApO1xuXHRyZXR1cm4gISAoIGZhY3RvcnkgaW5zdGFuY2VvZiBNYXAgKSA/IGZhY3RvcnkgOiBudWxsO1xufVxuXG4vKipcbiAqIFNlbGVjdG9yIGZvciByZXR1cm5pbmcgd2hldGhlciB0aGUgbW9kZWwgZW50aXR5IGZhY3RvcnkgaXMgYmVpbmcgcmVxdWVzdGVkXG4gKiBvciBub3QgZm9yIHRoZSBnaXZlbiBtb2RlbCBuYW1lIGZyb20gdGhlIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgaXQgaXMgYmVpbmcgcmVxdWVzdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXF1ZXN0aW5nRmFjdG9yeUZvck1vZGVsKCBzdGF0ZSwgbW9kZWxOYW1lICkge1xuXHRyZXR1cm4gaXNSZXNvbHZpbmcoXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldEZhY3RvcnlGb3JNb2RlbCcsXG5cdFx0c2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApXG5cdCk7XG59XG5cbi8qKlxuICogU2VsZWN0b3IgZm9yIHJldHVybmluZyB3aGV0aGVyIHRoZSBmYWN0b3J5IGhhcyBiZWVuIHJlc29sdmVkIG9yIG5vdCBmb3IgdGhlXG4gKiBnaXZlbiBtb2RlbCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyB0aGF0IHRoZSBmYWN0b3J5IGhhcyBmaW5pc2hlZCByZXNvbHZpbmcgZm9yIHRoaXNcbiAqIG1vZGVsIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvbHZlZEZhY3RvcnlGb3JNb2RlbCggc3RhdGUsIG1vZGVsTmFtZSApIHtcblx0cmV0dXJuIGhhc0ZpbmlzaGVkUmVzb2x2aW5nKFxuXHRcdFJFRFVDRVJfS0VZLFxuXHRcdCdnZXRGYWN0b3J5Rm9yTW9kZWwnLFxuXHRcdHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcmVsYXRpb24gZW5kcG9pbnQgZm9yIHRoZSBnaXZlbiBtb2RlbCwgZW50aXR5IGlkIGFuZCByZWxhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZW50aXR5SWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk1vZGVsTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSByZWxhdGlvbiBlbmRwb2ludCBpZiBhdmFpbGFibGUgb3IgYW4gZW1wdHlcbiAqIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbGF0aW9uRW5kcG9pbnRGb3JFbnRpdHlJZChcblx0c3RhdGUsXG5cdG1vZGVsTmFtZSxcblx0ZW50aXR5SWQsXG5cdHJlbGF0aW9uTW9kZWxOYW1lXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk1vZGVsTmFtZSApO1xuXHRlbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCBlbnRpdHlJZCApO1xuXHRyZXR1cm4gc3RhdGUucmVsYXRpb25FbmRwb2ludHMuZ2V0SW4oXG5cdFx0WyBtb2RlbE5hbWUsIGVudGl0eUlkLCByZWxhdGlvbk1vZGVsTmFtZSBdXG5cdCkgfHwgJyc7XG59XG5cbi8qKlxuICogU2VsZWN0b3IgZm9yIHJldHVybmluZyB3aGV0aGVyIHRoZSByZWxhdGlvbiBlbmRwb2ludCBpcyBiZWluZyByZXF1ZXN0ZWRcbiAqIG9yIG5vdCBmb3IgdGhlIGdpdmVuIG1vZGVsIG5hbWUsIGVudGl0eSBpZCwgYW5kIHJlbGF0aW9uIGZyb20gdGhlIHN0YXRlLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGVudGl0eUlkXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25Nb2RlbE5hbWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIGl0IGlzIGJlaW5nIHJlcXVlc3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVxdWVzdGluZ1JlbGF0aW9uRW5kcG9pbnRGb3JFbnRpdHlJZChcblx0c3RhdGUsXG5cdG1vZGVsTmFtZSxcblx0ZW50aXR5SWQsXG5cdHJlbGF0aW9uTW9kZWxOYW1lXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRlbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCBlbnRpdHlJZCApO1xuXHRyZWxhdGlvbk1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk1vZGVsTmFtZSApO1xuXHRyZXR1cm4gaXNSZXNvbHZpbmcoXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0aW9uRW5kcG9pbnRGb3JFbnRpdHlJZCcsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHRcdHJlbGF0aW9uTW9kZWxOYW1lLFxuXHQpO1xufVxuXG4vKipcbiAqIFNlbGVjdG9yIGZvciByZXR1cm5pbmcgdGhlIHByaW1hcnkga2V5IHN0cmluZyB0byB1c2UgaW4gYSBxdWVyeSBmb3IgdGhlIGdpdmVuXG4gKiBtb2RlbCBhbmQgcmVsYXRpb24uICBUaGlzIGNvbnNpZGVycyB0aGUgam9pbiB0eXBlIGZvciB0aGUgcmVsYXRpb24uXG4gKlxuICogRm9yIGV4YW1wbGU6ICBJZiB5b3Ugd2VyZSBkb2luZyBhIHF1ZXJ5IHRvIGdldCB0aGUgcmVnaXN0cmF0aW9ucyByZWxhdGVkIHRvIGFuXG4gKiBhdHRlbmRlZSwgeW91IHdvdWxkIG5lZWQgdGhlIHN0cmluZyB0byB1c2UgZm9yIHRoZSBgUkVHX0lEYCBwcmltYXJ5IGtleSBpblxuICogdGhlIHF1ZXJ5LiAgU2luY2UgdGhlIGpvaW4gdHlwZSBmb3IgcmVnaXN0cmF0aW9ucyB0byBhdHRlbmRlZXMgaXNcbiAqIEVFX0hhc19NYW55X1JlbGF0aW9uLCB0aGVuIHRoZSBxdWVyeSBzdHJpbmcgd291bGQgbmVlZCB0byBiZVxuICogYFJlZ2lzdHJhdGlvbi5SRUdfSURgLiAgSWYgaG93ZXZlciB5b3Ugd2VyZSBnZXR0aW5nIHRoZSBhdHRlbmRlZSByZWxhdGVkXG4gKiB0byBhIHJlZ2lzdHJhdGlvbiwgdGhlbiB0aGUgam9pbiB0eXBlIGZvciBhdHRlbmRlZXMgb24gcmVnaXN0cmF0aW9ucyBpc1xuICogRUVfQmVsb25nc19Ub19SZWxhdGlvbiwgaW4gd2hpY2ggY2FzZSB0aGUgYXR0ZW5kZWUgcHJpbWFyeSBrZXkgd291bGQgYmVcbiAqIGBBVFRfSURgICh0aGUgcmVnaXN0cmF0aW9uIHRhYmxlIGhhcyB0aGUgZm9yZWlnbiBrZXkgb24gaXQpLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHByaW1hcnkga2V5IHN0cmluZyB0byB1c2Ugb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHJlbGF0aW9uXG4gKiB0eXBlIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVsYXRpb25QcmltYXJ5S2V5U3RyaW5nID0gY3JlYXRlU2VsZWN0b3IoXG5cdChcblx0XHRzdGF0ZSxcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25OYW1lXG5cdCkgPT4ge1xuXHRcdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0XHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdFx0Y29uc3QgcmVsYXRpb25UeXBlID0gZ2V0UmVsYXRpb25UeXBlKCBzdGF0ZSwgbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgKTtcblx0XHRpZiAoIHJlbGF0aW9uVHlwZSA9PT0gJycgKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdGNvbnN0IHJlbGF0aW9uUHJpbWFyeUtleSA9IGdldFByaW1hcnlLZXkoIHJlbGF0aW9uTmFtZSApO1xuXHRcdHJldHVybiByZWxhdGlvblR5cGUgPT09ICdFRV9CZWxvbmdzX1RvX1JlbGF0aW9uJyA/XG5cdFx0XHRyZWxhdGlvblByaW1hcnlLZXkgOlxuXHRcdFx0YCR7IG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nKCByZWxhdGlvbk5hbWUgKSB9LiR7IHJlbGF0aW9uUHJpbWFyeUtleSB9YDtcblx0fSxcblx0KCBzdGF0ZSwgbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgKSA9PiB7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0XHRyZXR1cm4gW1xuXHRcdFx0c3RhdGUucmVsYXRpb25TY2hlbWEuZ2V0SW4oIFsgbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgXSwgJycgKSxcblx0XHRdO1xuXHR9LFxuKTtcblxuLyoqXG4gKiBTZWxlY3RvciByZXR1cm5pbmcgdGhlIHJlbGF0aW9uIHJlc3BvbnNlIHR5cGUgZm9yIHRoZSBnaXZlbiByZWxhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHR5cGUgZm9yIHRoZSByZWxhdGlvbiByZXR1cm5lZCBmb3IgdGhlIGdpdmVuIG1vZGVsIGFuZFxuICogcmVsYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRSZWxhdGlvblJlc3BvbnNlVHlwZSA9ICggc3RhdGUsIG1vZGVsTmFtZSwgcmVsYXRpb25OYW1lICkgPT4ge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0Y29uc3QgcmVsYXRpb25TY2hlbWEgPSBnZXRSZWxhdGlvblNjaGVtYSggc3RhdGUsIG1vZGVsTmFtZSwgcmVsYXRpb25OYW1lICk7XG5cdHJldHVybiByZWxhdGlvblNjaGVtYSAhPT0gbnVsbCA/XG5cdFx0cmVsYXRpb25TY2hlbWEudHlwZSA6XG5cdFx0Jyc7XG59O1xuXG4vKipcbiAqIFNlbGVjdG9yIHJldHVybmluZyB3aGV0aGVyIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZSBnaXZlbiBtb2RlbCBuYW1lIGFuZFxuICogcmVsYXRpb24gbmFtZSBoYXMgYSBqb2luIHRhYmxlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyB0aGVyZSBpcyBhIGpvaW4gdGFibGUsIGZhbHNlIG1lYW5zIHRoZXJlIGlzbid0LlxuICovXG5leHBvcnQgY29uc3QgaGFzSm9pblRhYmxlUmVsYXRpb24gPSAoIHN0YXRlLCBtb2RlbE5hbWUsIHJlbGF0aW9uTmFtZSApID0+IHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IHJlbGF0aW9uVHlwZSA9IGdldFJlbGF0aW9uVHlwZSggc3RhdGUsIG1vZGVsTmFtZSwgcmVsYXRpb25OYW1lICk7XG5cdHJldHVybiBKT0lOX1JFTEFUSU9OX1RZUEVTLmluZGV4T2YoIHJlbGF0aW9uVHlwZSApID4gLTE7XG59O1xuXG4vKipcbiAqIFNlbGVjdG9yIHJldHVybmluZyB0aGUgcmVsYXRpb24gdHlwZSBkZXNjcmliaW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZVxuICogZ2l2ZW4gbW9kZWwgbmFtZSBhbmQgcmVsYXRpb24gbmFtZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gIFRoZSByZWxhdGlvbiB0eXBlIChlZy4gXCJFRV9IQUJUTV9SZWxhdGlvblwiKVxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVsYXRpb25UeXBlID0gKCBzdGF0ZSwgbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgKSA9PiB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRjb25zdCByZWxhdGlvblNjaGVtYSA9IGdldFJlbGF0aW9uU2NoZW1hKCBzdGF0ZSwgbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgKTtcblx0cmV0dXJuIHJlbGF0aW9uU2NoZW1hICE9PSBudWxsID9cblx0XHRyZWxhdGlvblNjaGVtYS5yZWxhdGlvbl90eXBlIDpcblx0XHQnJztcbn07XG5cbi8qKlxuICogU2VsZWN0b3IgcmV0dXJuaW5nIHRoZSByZWxhdGlvbiBzY2hlbWEgZGVzY3JpYmluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiB0aGVcbiAqIGdpdmVuIG1vZGVsIG5hbWUgYW5kIHJlbGF0aW9uIG5hbWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcmV0dXJuIHtPYmplY3R8bnVsbH0gQW4gb2JqZWN0IG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gcmVsYXRpb24gc2NoZW1hLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVsYXRpb25TY2hlbWEgPSAoIHN0YXRlLCBtb2RlbE5hbWUsIHJlbGF0aW9uTmFtZSApID0+IHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdHJldHVybiBzdGF0ZS5yZWxhdGlvblNjaGVtYS5nZXRJbiggWyBtb2RlbE5hbWUsIHJlbGF0aW9uTmFtZSBdLCBudWxsICk7XG59O1xuIiwiLyoqXG4gKiBSZWdpc3RlciBzdG9yZXNcbiAqL1xuaW1wb3J0ICcuL2V2ZW50ZXNwcmVzc28vc2NoZW1hJztcbmltcG9ydCAnLi9ldmVudGVzcHJlc3NvL2NvcmUnO1xuaW1wb3J0ICcuL2V2ZW50ZXNwcmVzc28vbGlzdHMnO1xuaW1wb3J0ICcuL2V2ZW50ZXNwcmVzc28vZmlsdGVyLXN0YXRlJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBFeGNlcHRpb24gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IHNwcmludGYsIF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0VtcHR5LCBpc01hcCB9IGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBnaXZlbiBrZXkgZXhpc3RzIGluIHRoZSBwcm92aWRlZCBlbnRpdHkgb2JqZWN0LlxuICogVGhpcyBpcyB1c2VkIHdoZW4gY2FsbGluZyBjb2RlIHdhbnRzIGFuIGV4Y2VwdGlvbiB0byBiZSB0aHJvd24uXG4gKlxuICogQHBhcmFtIHsgc3RyaW5nIH0ga2V5XG4gKiBAcGFyYW0geyBPYmplY3QgfSBlbnRpdHlcbiAqIEBwYXJhbSB7IHN0cmluZyB9IG1lc3NhZ2VcbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfSAgVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgcHJvdmlkZWQgZW50aXR5IGRvZXMgbm90XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSB0aGUgZ2l2ZW4ga2V5LlxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0RW50aXR5SGFzS2V5ID0gKCBrZXksIGVudGl0eSwgbWVzc2FnZSA9ICcnICkgPT4ge1xuXHRpZiAoIG1lc3NhZ2UgPT09ICcnICkge1xuXHRcdG1lc3NhZ2UgPSBzcHJpbnRmKFxuXHRcdFx0X18oXG5cdFx0XHRcdCdUaGUgcHJvdmlkZWQgZW50aXR5ICglcykgZG9lcyBub3QgaGF2ZSB0aGUgZ2l2ZW4gcHJvcGVydHkgKCVzKScsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHQpLFxuXHRcdFx0ZW50aXR5LFxuXHRcdFx0a2V5LFxuXHRcdCk7XG5cdH1cblx0aWYgKCAhIGVudGl0eS5oYXNPd25Qcm9wZXJ0eSgga2V5ICkgKSB7XG5cdFx0dGhyb3cgbmV3IEV4Y2VwdGlvbiggbWVzc2FnZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aCBpbiB0aGUgcHJvdmlkZWQgaW1tdXRhYmxlIG9iamVjdCBleGlzdHMuXG4gKiBUaGlzIGlzIHVzZWQgd2hlbiBjYWxsaW5nIGNvZGUgd2FudHMgYW4gZXhjZXB0aW9uIHRvIGJlIHRocm93biBpZiB0aGUgZ2l2ZW5cbiAqIHNlYXJjaCBwYXRoIGFycmF5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBpbW11dGFibGUgb2JqZWN0LlxuICpcbiAqIElmIHRoZSBpbW11dGFibGUgb2JqZWN0IGlzIHNldHVwIGxpa2UgdGhpczpcbiAqXG4gKiBpbW11dGFibGUgPSBJbW11dGFibGUuTWFwKCkuc2V0KCAnZXZlbnQnLCBJbW11dGFibGUuTWFwKCkuc2V0KCAxMCwgRXZlbnQgKSApO1xuICpcbiAqIFRoZW4gYSB2YWxpZCBzZWFyY2hhYmxlIHBhdGggY291bGQgYmUgYFsgJ2V2ZW50JywgMTAgXWAuICBBbiBpbnZhbGlkIHBhdGhcbiAqIHdvdWxkIGJlIGBbICdkYXRldGltZScsIDEwIF1gXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcGF0aCAgU2VhcmNoYWJsZSBwYXRoIGZvciB0aGUgaW1tdXRhYmxlIG9qYmVjdCB0byB2ZXJpZnkuXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB8SW1tdXRhYmxlLlNldH0gaW1tdXRhYmxlICBBbiBpbW11dGFibGUgb2JqZWN0IChNYXAsIFNldCwgTGlzdCBldGMpXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBBIGN1c3RvbSBtZXNzYWdlIHRvIHVzZS5cbiAqIEB0aHJvd3MgRXhjZXB0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRJbW11dGFibGVPYmplY3RIYXNQYXRoID0gKFxuXHRwYXRoLFxuXHRpbW11dGFibGUsXG5cdG1lc3NhZ2UgPSAnJ1xuKSA9PiB7XG5cdGlmICggbWVzc2FnZSA9PT0gJycgKSB7XG5cdFx0bWVzc2FnZSA9IHNwcmludGYoXG5cdFx0XHRfXyhcblx0XHRcdFx0J1RoZSBwcm92aWRlZCBpbW11dGFibGUgb2JqZWN0ICglcykgZG9lcyBub3QgaGF2ZSB0aGUgZ2l2ZW4gcGF0aCAoJXMpJyxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdCksXG5cdFx0XHRpbW11dGFibGUsXG5cdFx0XHRwYXRoLFxuXHRcdCk7XG5cdH1cblx0aWYgKCAhIGltbXV0YWJsZS5oYXNJbiggcGF0aCApICkge1xuXHRcdHRocm93IG5ldyBFeGNlcHRpb24oIG1lc3NhZ2UgKTtcblx0fVxufTtcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7Kn0gaXRlbXNcbiAqIEBwYXJhbSB7IHN0cmluZyB9ICBtZXNzYWdlXG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH0gVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IGFuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRJc0FycmF5ID0gKCBpdGVtcywgbWVzc2FnZSA9ICcnICkgPT4ge1xuXHRpZiAoIG1lc3NhZ2UgPT09ICcnICkge1xuXHRcdG1lc3NhZ2UgPSBfXyggJ1RoZSBwcm92aWRlZCB2YWx1ZSBpcyBub3QgYW4gYXJyYXkuJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHR9XG5cdGlmICggISBpc0FycmF5KCBpdGVtcyApICkge1xuXHRcdHRocm93IG5ldyBFeGNlcHRpb24oIG1lc3NhZ2UgKTtcblx0fVxufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgZW1wdHkgb3Igbm90LlxuICpcbiAqIENhbGwgdGhpcyB2YWxpZGF0b3Igd2hlbiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIHZhbHVlIGlzIE5PVCBlbXB0eS5cbiAqXG4gKiBAcGFyYW0geyp9IGl0ZW1zXG4gKiBAcGFyYW0geyBzdHJpbmcgfSBtZXNzYWdlXG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH0gVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRJc05vdEVtcHR5ID0gKCBpdGVtcywgbWVzc2FnZSA9ICcnICkgPT4ge1xuXHRpZiAoIG1lc3NhZ2UgPT09ICcnICkge1xuXHRcdG1lc3NhZ2UgPSBfXyhcblx0XHRcdCdUaGUgcHJvdmlkZWQgaXRlbXMgbXVzdCBub3QgYmUgZW1wdHknLFxuXHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHQpO1xuXHR9XG5cdGlmICggaXNFbXB0eSggaXRlbXMgKSApIHtcblx0XHR0aHJvdyBuZXcgRXhjZXB0aW9uKCBtZXNzYWdlICk7XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIE1hcCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHsqfSBpdGVtXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9XG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRJc01hcCA9ICggaXRlbSwgbWVzc2FnZSA9ICcnICkgPT4ge1xuXHRpZiAoIG1lc3NhZ2UgPT09ICcnICkge1xuXHRcdG1lc3NhZ2UgPSBfXyhcblx0XHRcdCdUaGUgcHJvdmlkZWQgaXRlbSBtdXN0IGJlIGEgTWFwIG9iamVjdCcsXG5cdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0KTtcblx0fVxuXHRpZiAoICEgaXNNYXAoIGl0ZW0gKSApIHtcblx0XHR0aHJvdyBuZXcgRXhjZXB0aW9uKCBtZXNzYWdlICk7XG5cdH1cbn07XG4iLCJleHBvcnQgY29uc3QgTU9ERUxfTkFNRSA9ICdhdHRlbmRlZSc7XG4iLCJleHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQge1xuXHRnZXRRdWVyeVN0cmluZyBhcyBiYXNlR2V0UXVlcnlTdHJpbmcsXG5cdFFVRVJZX09SREVSX0FTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG59IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IHsgUkVHSVNUUkFUSU9OX1NUQVRVU19JRFMgfSBmcm9tICcuLi9yZWdpc3RyYXRpb24vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IG9yZGVyQnlNYXAgPSB7XG5cdGlkOiAnQVRUX0lEJyxcblx0bGFzdE5hbWVPbmx5OiAnQVRUX2xuYW1lJyxcblx0Zmlyc3ROYW1lT25seTogJ0FUVF9mbmFtZScsXG5cdGZpcnN0VGhlbkxhc3ROYW1lOiBbICdBVFRfZm5hbWUnLCAnQVRUX2xuYW1lJyBdLFxuXHRsYXN0VGhlbkZpcnN0TmFtZTogWyAnQVRUX2xuYW1lJywgJ0FUVF9mbmFtZScgXSxcbn07XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0Zm9yRXZlbnRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yRGF0ZXRpbWVJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yVGlja2V0SWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclN0YXR1c0lkOiBQcm9wVHlwZXMub25lT2YoIFJFR0lTVFJBVElPTl9TVEFUVVNfSURTICksXG5cdGZvclJlZ2lzdHJhdGlvbklkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRzaG93R3JhdmF0YXI6IFByb3BUeXBlcy5ib29sLFxuXHRxdWVyeURhdGE6IFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdGxpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdG9yZGVyQnk6IFByb3BUeXBlcy5vbmVPZiggT2JqZWN0LmtleXMoIG9yZGVyQnlNYXAgKSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHR9XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRRdWVyeURhdGEgPSB7XG5cdHF1ZXJ5RGF0YToge1xuXHRcdGxpbWl0OiAxMDAsXG5cdFx0b3JkZXJCeTogJ2xhc3RUaGVuRmlyc3ROYW1lJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfQVNDLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWRcbiAqIGluIGEgUkVTVCBxdWVyeSBmcm9tIHRoZSBjb250ZXh0IG9mIGEgYXR0ZW5kZWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFx0XHRvcmRlckJ5XG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gXHRSZXR1cm5zIGFuIGFjdHVhbCBvcmRlckJ5IHN0cmluZ1xuICogXHRcdFx0XHRcdFx0Zm9yIHRoZSBSRVNUIHF1ZXJ5IGZvciB0aGUgcHJvdmlkZWQgYWxpYXNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcE9yZGVyQnkgPSAoIG9yZGVyQnkgKSA9PiB7XG5cdHJldHVybiBpc1VuZGVmaW5lZCggb3JkZXJCeU1hcFsgb3JkZXJCeSBdICkgP1xuXHRcdG9yZGVyQnkgOlxuXHRcdG9yZGVyQnlNYXBbIG9yZGVyQnkgXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHdoZXJlIGNvbmRpdGlvbnMgZm9yIGFuIGF0dGVuZGVlcyBlbmRwb2ludCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGZvckV2ZW50SWQgICAgXHRJRCBvZiBFdmVudCB0byByZXRyaWV2ZSBhdHRlbmRlZXMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRGF0ZXRpbWVJZCBcdElEIG9mIERhdGV0aW1lIHRvIHJldHJpZXZlIGF0dGVuZGVlcyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JUaWNrZXRJZCBcdFx0SUQgb2YgVGlja2V0IHRvIHJldHJpZXZlIGF0dGVuZGVlcyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JSZWdpc3RyYXRpb25JZFxuICogQHBhcmFtIHtzdHJpbmd9IGZvclN0YXR1c0lkIFx0XHRJRCBvZiBTdGF0dXMgdG8gcmV0cmlldmUgYXR0ZW5kZWVzIGZvclxuICogQHBhcmFtIHtzdHJpbmd9IHNob3dHcmF2YXRhciBcdEJvb2xlYW4gdG9nZ2xlIGZvciB3aGV0aGVyIHRvIGRpc3BsYXkgdXNlciBHcmF2YXRhclxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgICBcdFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICgge1xuXHRmb3JFdmVudElkID0gMCxcblx0Zm9yRGF0ZXRpbWVJZCA9IDAsXG5cdGZvclRpY2tldElkID0gMCxcblx0Zm9yUmVnaXN0cmF0aW9uSWQgPSAwLFxuXHRmb3JTdGF0dXNJZCA9ICdSQVAnLFxuXHRzaG93R3JhdmF0YXIgPSBmYWxzZSxcbn0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cblx0Ly8gZW5zdXJlIHRoYXQgZW50aXR5IElEcyBhcmUgaW50ZWdlcnNcblx0Zm9yUmVnaXN0cmF0aW9uSWQgPSBwYXJzZUludCggZm9yUmVnaXN0cmF0aW9uSWQsIDEwICk7XG5cdGZvclRpY2tldElkID0gcGFyc2VJbnQoIGZvclRpY2tldElkLCAxMCApO1xuXHRmb3JEYXRldGltZUlkID0gcGFyc2VJbnQoIGZvckRhdGV0aW1lSWQsIDEwICk7XG5cdGZvckV2ZW50SWQgPSBwYXJzZUludCggZm9yRXZlbnRJZCwgMTAgKTtcblxuXHQvLyBvcmRlciBvZiBwcmlvcml0eSBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuXHRpZiAoIGZvclJlZ2lzdHJhdGlvbklkICE9PSAwICYmICEgaXNOYU4oIGZvclJlZ2lzdHJhdGlvbklkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggYHdoZXJlW1JlZ2lzdHJhdGlvbi5SRUdfSURdPSR7IGZvclJlZ2lzdHJhdGlvbklkIH1gICk7XG5cdH0gZWxzZSBpZiAoIGZvclRpY2tldElkICE9PSAwICYmICEgaXNOYU4oIGZvclRpY2tldElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggYHdoZXJlW1JlZ2lzdHJhdGlvbi5UaWNrZXQuVEtUX0lEXT0keyBmb3JUaWNrZXRJZCB9YCApO1xuXHR9IGVsc2UgaWYgKCBmb3JEYXRldGltZUlkICE9PSAwICYmICEgaXNOYU4oIGZvckRhdGV0aW1lSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCBgd2hlcmVbUmVnaXN0cmF0aW9uLlRpY2tldC5EYXRldGltZS5EVFRfSURdPSR7IGZvckRhdGV0aW1lSWQgfWAgKTtcblx0fSBlbHNlIGlmICggZm9yRXZlbnRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JFdmVudElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggYHdoZXJlW1JlZ2lzdHJhdGlvbi5FVlRfSURdPSR7IGZvckV2ZW50SWQgfWAgKTtcblx0fVxuXG5cdGlmICggUkVHSVNUUkFUSU9OX1NUQVRVU19JRFMuaW5jbHVkZXMoIGZvclN0YXR1c0lkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggYHdoZXJlW1JlZ2lzdHJhdGlvbi5TdGF0dXMuU1RTX0lEXT0keyBmb3JTdGF0dXNJZCB9YCApO1xuXHR9XG5cdGlmICggc2hvd0dyYXZhdGFyID09PSB0cnVlICkge1xuXHRcdHdoZXJlLnB1c2goICdjYWxjdWxhdGU9dXNlcl9hdmF0YXInICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICogYXMgZGF0ZUZvcm1hdHMgZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBkYXRlIGZpZWxkcyBvbiBwcm92aWRlZCBlbnRpdGllcy4gIERvZXMgbm90IG11dGF0ZSBvcmlnaW5hbFxuICogZW50aXRpZXMuXG4gKlxuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdGllcyAgQW4gYXJyYXkgb2YgZW50aXR5IG9iamVjdHNcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyAgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcGFyYW0geyBzdHJpbmcgfSBmb3JtYXQgIFRoZSBmb3JtYXQgdG8gdHJhbnNmb3JtIHRoZSBkYXRlIGZpZWxkIHZhbHVlcyB0by5cbiAqIEBwYXJhbSB7IGJvb2xlYW4gfSBsb2NhbCAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbnZlcnQgdGhlIGRhdGUgZmllbGQgdmFsdWVcbiAqICAgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGZvciB0aGUgaG9zdC5cbiAqIEByZXR1cm4geyBBcnJheSB9ICBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIG5ldyBlbnRpdGllcyB3aXRoIHRoZSBkYXRlIGZpZWxkXG4gKiAgIHZhbHVlcyBmb3JtYXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdERhdGVzT25FbnRpdGllcyA9IChcblx0ZW50aXRpZXMgPSBbXSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuXHRmb3JtYXQgPSBkYXRlRm9ybWF0cy5EQVRFX1RJTUVfRk9STUFUX0lTTzg2MDEsXG5cdGxvY2FsID0gdHJ1ZSxcbikgPT4ge1xuXHRpZiAoIGlzRW1wdHkoIGVudGl0aWVzICkgfHwgaXNFbXB0eSggZW50aXR5RGF0ZUZpZWxkcyApICkge1xuXHRcdHJldHVybiBlbnRpdGllcztcblx0fVxuXHRjb25zdCBmb3JtYXR0ZWRFbnRpdGllcyA9IFtdO1xuXHRlbnRpdGllcy5mb3JFYWNoKCAoIGVudGl0eSApID0+IHtcblx0XHRmb3JtYXR0ZWRFbnRpdGllcy5wdXNoKCBmb3JtYXREYXRlc09uRW50aXR5KFxuXHRcdFx0ZW50aXR5LFxuXHRcdFx0ZW50aXR5RGF0ZUZpZWxkcyxcblx0XHRcdGZvcm1hdCxcblx0XHRcdGxvY2FsLFxuXHRcdCkgKTtcblx0fSApO1xuXHRyZXR1cm4gZm9ybWF0dGVkRW50aXRpZXM7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGRhdGUgZmllbGRzIG9uIHRoZSBwcm92aWRlZCBlbnRpdHkuICBEb2VzIG5vdCBtdXRhdGUgb3JpZ2luYWxcbiAqIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0geyBPYmplY3QgfSBlbnRpdHkgIEFuIGVudGl0eVxuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzICBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEBwYXJhbSB7IHN0cmluZyB9IGZvcm1hdCAgVGhlIGZvcm1hdCB0byB0cmFuc2Zvcm0gdGhlIGRhdGUgZmllbGQgdmFsdWVzIHRvLlxuICogQHBhcmFtIHsgYm9vbGVhbiB9IGxvY2FsICAgICAgV2hldGhlciBvciBub3QgdG8gY29udmVydCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZVxuICogICB0byB0aGUgbG9jYWwgdGltZXpvbmUgZm9yIHRoZSBob3N0LlxuICogQHJldHVybiB7IE9iamVjdCB9ICBSZXR1cm5zIGEgbmV3IGVudGl0eSB3aXRoIHRoZSBkYXRlIGZpZWxkIHZhbHVlcyBmb3JtYXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdERhdGVzT25FbnRpdHkgPSAoXG5cdGVudGl0eSA9IHt9LFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG5cdGZvcm1hdCA9IGRhdGVGb3JtYXRzLkRBVEVfVElNRV9GT1JNQVRfSVNPODYwMSxcblx0bG9jYWwgPSB0cnVlLFxuKSA9PiB7XG5cdGNvbnN0IG5ld0VudGl0eSA9IHsgLi4uZW50aXR5IH07XG5cdGVudGl0eURhdGVGaWVsZHMuZm9yRWFjaCggKCBkYXRlRmllbGQgKSA9PiB7XG5cdFx0aWYgKCBuZXdFbnRpdHlbIGRhdGVGaWVsZCBdICkge1xuXHRcdFx0bmV3RW50aXR5WyBkYXRlRmllbGQgXSA9IGRhdGVGb3JtYXRzLmZvcm1hdERhdGVTdHJpbmcoXG5cdFx0XHRcdG5ld0VudGl0eVsgZGF0ZUZpZWxkIF0sXG5cdFx0XHRcdGZvcm1hdCxcblx0XHRcdFx0bG9jYWwsXG5cdFx0XHQpO1xuXHRcdH1cblx0fSApO1xuXHRyZXR1cm4gbmV3RW50aXR5O1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBkYXRlIGZpZWxkcyB0byBteXNxbCBmb3JtYXQgb24gcHJvdmlkZWQgZW50aXRpZXMuICBEb2VzIG5vdFxuICogbXV0YXRlIG9yaWdpbmFsIGVudGl0aWVzLlxuICpcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXRpZXMgIEFuIGFycmF5IG9mIGVudGl0eSBvYmplY3RzXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHBhcmFtIHsgYm9vbGVhbiB9IGxvY2FsICAgICAgV2hldGhlciBvciBub3QgdG8gY29udmVydCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZVxuICogICB0byB0aGUgbG9jYWwgdGltZXpvbmUgZm9yIHRoZSBob3N0LlxuICogQHJldHVybiB7IEFycmF5IH0gIFJldHVybnMgYSBuZXcgYXJyYXkgb2YgbmV3IGVudGl0aWVzIHdpdGggdGhlIGRhdGUgZmllbGRcbiAqICAgdmFsdWVzIGZvcm1hdHRlZFxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RW50aXRpZXNEYXRlc1RvTXlzcWwgPSAoXG5cdGVudGl0aWVzID0gW10sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcblx0bG9jYWwgPSB0cnVlLFxuKSA9PiB7XG5cdHJldHVybiBmb3JtYXREYXRlc09uRW50aXRpZXMoXG5cdFx0ZW50aXRpZXMsXG5cdFx0ZW50aXR5RGF0ZUZpZWxkcyxcblx0XHRkYXRlRm9ybWF0cy5EQVRFX1RJTUVfRk9STUFUX01ZU1FMLFxuXHRcdGxvY2FsLFxuXHQpO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBkYXRlIGZpZWxkcyB0byBteXNxbCBmb3JtYXQgb24gcHJvdmlkZWQgZW50aXR5LiAgRG9lcyBub3RcbiAqIG11dGF0ZSBvcmlnaW5hbCBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHsgT2JqZWN0IH0gZW50aXR5ICBBbiBhcnJheSBvZiBlbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzICBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEBwYXJhbSB7IGJvb2xlYW4gfSBsb2NhbCAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbnZlcnQgdGhlIGRhdGUgZmllbGQgdmFsdWVcbiAqICAgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGZvciB0aGUgaG9zdC5cbiAqIEByZXR1cm4geyBPYmplY3QgfSAgUmV0dXJucyBhIG5ldyBlbnRpdHkgd2l0aCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZXMgZm9ybWF0dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRFbnRpdHlEYXRlc1RvTXlzcWwgPSAoXG5cdGVudGl0eSA9IHt9LFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG5cdGxvY2FsID0gdHJ1ZSxcbikgPT4ge1xuXHRyZXR1cm4gZm9ybWF0RGF0ZXNPbkVudGl0eShcblx0XHRlbnRpdHksXG5cdFx0ZW50aXR5RGF0ZUZpZWxkcyxcblx0XHRkYXRlRm9ybWF0cy5EQVRFX1RJTUVfRk9STUFUX01ZU1FMLFxuXHRcdGxvY2FsLFxuXHQpO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBkYXRlIGZpZWxkcyB0byB0aGUgc2l0ZSBmb3JtYXQgb24gcHJvdmlkZWQgZW50aXRpZXMuICBEb2VzIG5vdFxuICogbXV0YXRlIG9yaWdpbmFsIGVudGl0aWVzLlxuICpcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXRpZXMgIEFuIGFycmF5IG9mIGVudGl0eSBvYmplY3RzXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHBhcmFtIHsgYm9vbGVhbiB9IGxvY2FsICAgICAgV2hldGhlciBvciBub3QgdG8gY29udmVydCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZVxuICogICB0byB0aGUgbG9jYWwgdGltZXpvbmUgZm9yIHRoZSBob3N0LlxuICogQHJldHVybiB7IEFycmF5IH0gIFJldHVybnMgYSBuZXcgYXJyYXkgb2YgbmV3IGVudGl0aWVzIHdpdGggdGhlIGRhdGUgZmllbGRcbiAqICAgdmFsdWVzIGZvcm1hdHRlZFxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RW50aXRpZXNEYXRlc1RvU2l0ZSA9IChcblx0ZW50aXRpZXMgPSBbXSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuXHRsb2NhbCA9IHRydWUsXG4pID0+IHtcblx0cmV0dXJuIGZvcm1hdERhdGVzT25FbnRpdGllcyhcblx0XHRlbnRpdGllcyxcblx0XHRlbnRpdHlEYXRlRmllbGRzLFxuXHRcdGRhdGVGb3JtYXRzLkRBVEVfVElNRV9GT1JNQVRfU0lURSxcblx0XHRsb2NhbCxcblx0KTtcbn07XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGF0ZSBmaWVsZHMgdG8gdGhlIHNpdGUgZm9ybWF0IG9uIHByb3ZpZGVkIGVudGl0eS4gIERvZXMgbm90XG4gKiBtdXRhdGUgb3JpZ2luYWwgZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7IE9iamVjdCB9IGVudGl0eSAgQW4gYXJyYXkgb2YgZW50aXR5IG9iamVjdHNcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyAgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcGFyYW0geyBib29sZWFuIH0gbG9jYWwgICAgICBXaGV0aGVyIG9yIG5vdCB0byBjb252ZXJ0IHRoZSBkYXRlIGZpZWxkIHZhbHVlXG4gKiAgIHRvIHRoZSBsb2NhbCB0aW1lem9uZSBmb3IgdGhlIGhvc3QuXG4gKiBAcmV0dXJuIHsgT2JqZWN0IH0gIFJldHVybnMgYSBuZXcgZW50aXR5IHdpdGggdGhlIGRhdGUgZmllbGQgdmFsdWVzIGZvcm1hdHRlZFxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RW50aXR5RGF0ZXNUb1NpdGUgPSAoXG5cdGVudGl0eSA9IHt9LFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG5cdGxvY2FsID0gdHJ1ZSxcbikgPT4ge1xuXHRyZXR1cm4gZm9ybWF0RGF0ZXNPbkVudGl0eShcblx0XHRlbnRpdHksXG5cdFx0ZW50aXR5RGF0ZUZpZWxkcyxcblx0XHRkYXRlRm9ybWF0cy5EQVRFX1RJTUVfRk9STUFUX1NJVEUsXG5cdFx0bG9jYWwsXG5cdCk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGRhdGUgZmllbGQgdmFsdWVzIHRvIG1vbWVudCBvYmplY3RzIGZvciB0aGUgcHJvdmlkZWQgZW50aXRpZXMuXG4gKiBEb2VzIG5vdCBtdXRhdGUgb3JpZ2luYWwgZW50aXRpZXMuXG4gKlxuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdGllcyBBbiBhcnJheSBvZiBlbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHJldHVybiB7IEFycmF5IH0gUmV0dXJucyBhIG5ldyBhcnJheSBvZiBuZXcgZW50aXRpZXMgd2l0aCB0aGUgZGF0ZSBmaWVsZFxuICogICB2YWx1ZXMgY29udmVydGVkIHRvIG1vbWVudCBvYmplY3RzLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydEVudGl0aWVzRGF0ZXNUb01vbWVudCA9IChcblx0ZW50aXRpZXMgPSBbXSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuKSA9PiB7XG5cdGlmICggaXNFbXB0eSggZW50aXRpZXMgKSB8fCBpc0VtcHR5KCBlbnRpdHlEYXRlRmllbGRzICkgKSB7XG5cdFx0cmV0dXJuIGVudGl0aWVzO1xuXHR9XG5cdGNvbnN0IGZvcm1hdHRlZEVudGl0aWVzID0gW107XG5cdGVudGl0aWVzLmZvckVhY2goICggZW50aXR5ICkgPT4ge1xuXHRcdGZvcm1hdHRlZEVudGl0aWVzLnB1c2goIGNvbnZlcnRFbnRpdHlEYXRlc1RvTW9tZW50KFxuXHRcdFx0ZW50aXR5LFxuXHRcdFx0ZW50aXR5RGF0ZUZpZWxkcyxcblx0XHQpICk7XG5cdH0gKTtcblx0cmV0dXJuIGZvcm1hdHRlZEVudGl0aWVzO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBkYXRlIGZpZWxkIHZhbHVlcyB0byBtb21lbnQgb2JqZWN0cyBmb3IgdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAqIERvZXMgbm90IG11dGF0ZSBvcmlnaW5hbCBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHsgT2JqZWN0IH0gZW50aXR5IEFuIGVudGl0eS5cbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEByZXR1cm4geyBPYmplY3QgfSBSZXR1cm5zIGEgbmV3IGVudGl0eSB3aXRoIHRoZSBkYXRlIGZpZWxkIHZhbHVlcyBjb252ZXJ0ZWRcbiAqICAgdG8gbW9tZW50IG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0RW50aXR5RGF0ZXNUb01vbWVudCA9IChcblx0ZW50aXR5ID0ge30sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcbikgPT4ge1xuXHRjb25zdCBuZXdFbnRpdHkgPSB7IC4uLmVudGl0eSB9O1xuXHRlbnRpdHlEYXRlRmllbGRzLmZvckVhY2goICggZGF0ZUZpZWxkICkgPT4ge1xuXHRcdGlmICggbmV3RW50aXR5WyBkYXRlRmllbGQgXSApIHtcblx0XHRcdG5ld0VudGl0eVsgZGF0ZUZpZWxkIF0gPSBkYXRlRm9ybWF0cy5zdHJpbmdUb01vbWVudChcblx0XHRcdFx0bmV3RW50aXR5WyBkYXRlRmllbGQgXSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9ICk7XG5cdHJldHVybiBuZXdFbnRpdHk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzQXJyYXksIGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IFFVRVJZX09SREVSX0FTQyA9ICdBU0MnO1xuZXhwb3J0IGNvbnN0IFFVRVJZX09SREVSX0RFU0MgPSAnREVTQyc7XG5leHBvcnQgY29uc3QgQUxMT1dFRF9PUkRFUl9WQUxVRVMgPSBbICdhc2MnLCAnZGVzYycsICdBU0MnLCAnREVTQycgXTtcbmV4cG9ydCBjb25zdCBHUkVBVEVSX1RIQU4gPSBlbmNvZGVVUklDb21wb25lbnQoICc+JyApO1xuZXhwb3J0IGNvbnN0IExFU1NfVEhBTiA9IGVuY29kZVVSSUNvbXBvbmVudCggJzwnICk7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0FORF9FUVVBTCA9IGVuY29kZVVSSUNvbXBvbmVudCggJz49JyApO1xuZXhwb3J0IGNvbnN0IExFU1NfVEhBTl9BTkRfRVFVQUwgPSBlbmNvZGVVUklDb21wb25lbnQoICc8PScgKTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEBwYXJhbSB7IGZ1bmN0aW9uIH0gd2hlcmVDb25kaXRpb25zICBBIGZ1bmN0aW9uIGZvciBwcmVwcGluZyB0aGUgd2hlcmVcbiAqIFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZGl0aW9ucyBmcm9tIHRoZSBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBmdW5jdGlvbiB9IG1hcE9yZGVyQnlcdFx0QSBmdW5jdGlvbiBmb3IgbWFwcGluZyBpbmNvbWluZyBvcmRlcl9ieVxuICogXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpbmdzIHRvIHRoZSB2YWx1ZSBuZWVkZWQgZm9yIHRoZVxuICogXHRcdFx0XHRcdFx0XHRcdFx0XHRxdWVyeV9zdHJpbmcuXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFx0XHRcdFx0XHRSZXR1cm5zIHRoZSBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVN0cmluZyA9IChcblx0cXVlcnlEYXRhID0ge30sXG5cdHdoZXJlQ29uZGl0aW9ucyA9ICgpID0+IG51bGwsXG5cdG1hcE9yZGVyQnkgPSAoIG9yZGVyQnkgKSA9PiBvcmRlckJ5LFxuKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gd2hlcmVDb25kaXRpb25zKCBxdWVyeURhdGEgKTtcblx0Y29uc3QgeyBsaW1pdCwgb3JkZXIsIG9yZGVyQnksIGRlZmF1bHRXaGVyZUNvbmRpdGlvbnMgfSA9IHF1ZXJ5RGF0YTtcblx0Y29uc3QgcXVlcnlQYXJhbXMgPSBbXTtcblx0aWYgKCAhIGlzVW5kZWZpbmVkKCBsaW1pdCApICkge1xuXHRcdHF1ZXJ5UGFyYW1zLnB1c2goIGBsaW1pdD0keyBsaW1pdCB9YCApO1xuXHR9XG5cdGlmICggISBpc1VuZGVmaW5lZCggZGVmYXVsdFdoZXJlQ29uZGl0aW9ucyApICkge1xuXHRcdHF1ZXJ5UGFyYW1zLnB1c2goXG5cdFx0XHRgZGVmYXVsdF93aGVyZV9jb25kaXRpb25zPSR7IGRlZmF1bHRXaGVyZUNvbmRpdGlvbnMgfWBcblx0XHQpO1xuXHR9XG5cdGlmICggISBpc1VuZGVmaW5lZCggbWFwT3JkZXJCeSggb3JkZXJCeSApICkgKSB7XG5cdFx0aWYgKCBpc0FycmF5KCBtYXBPcmRlckJ5KCBvcmRlckJ5ICkgKSApIHtcblx0XHRcdGZvciAoIGNvbnN0IGZpZWxkIG9mIG1hcE9yZGVyQnkoIG9yZGVyQnkgKSApIHtcblx0XHRcdFx0cXVlcnlQYXJhbXMucHVzaCggYG9yZGVyX2J5WyR7IGZpZWxkIH1dPSR7IG9yZGVyIH1gICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHF1ZXJ5UGFyYW1zLnB1c2goIGBvcmRlcj0keyBvcmRlciB9YCApO1xuXHRcdFx0cXVlcnlQYXJhbXMucHVzaCggYG9yZGVyX2J5PSR7IG1hcE9yZGVyQnkoIG9yZGVyQnkgKSB9YCApO1xuXHRcdH1cblx0fVxuXHRsZXQgcXVlcnlTdHJpbmcgPSBxdWVyeVBhcmFtcy5qb2luKCAnJicgKTtcblx0aWYgKCB3aGVyZSApIHtcblx0XHRxdWVyeVN0cmluZyArPSAnJicgKyB3aGVyZTtcblx0fVxuXHRyZXR1cm4gcXVlcnlTdHJpbmc7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ2NoZWNraW4nO1xuXG5leHBvcnQgY29uc3QgQ0hFQ0tJTl9TVEFUVVNfSUQgPSB7XG5cdFNUQVRVU19DSEVDS0VEX09VVDogZmFsc2UsXG5cdFNUQVRVU19DSEVDS0VEX0lOOiB0cnVlLFxuXHRTVEFUVVNfQ0hFQ0tFRF9ORVZFUjogMixcbn07XG5cbmV4cG9ydCBjb25zdCBDSEVDS0lOX1NUQVRVU19JRFMgPSB2YWx1ZXMoXG5cdENIRUNLSU5fU1RBVFVTX0lEXG4pO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHByZXR0eVN0YXR1cyB9IGZyb20gJy4uL3N0YXR1cyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRnZXRRdWVyeVN0cmluZyBhcyBiYXNlR2V0UXVlcnlTdHJpbmcsXG5cdFFVRVJZX09SREVSX0RFU0MsXG5cdEFMTE9XRURfT1JERVJfVkFMVUVTLFxufSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCAqIGFzIGNoZWNraW5TdGF0dXMgZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIERlc2NyaWJlZCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7e2F0dHJpYnV0ZXM6ICp9fVxuICovXG5leHBvcnQgY29uc3QgcXVlcnlEYXRhVHlwZXMgPSB7XG5cdGZvckRhdGV0aW1lSWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvckV2ZW50SWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclJlZ2lzdHJhdGlvbklkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JUaWNrZXRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yU3RhdHVzSWQ6IFByb3BUeXBlcy5vbmVPZiggY2hlY2tpblN0YXR1cy5DSEVDS0lOX1NUQVRVU19JRFMgKSxcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdDSEtfSUQnLFxuXHRcdFx0J1JFR19JRCcsXG5cdFx0XHQnQ0hLX3RpbWVzdGFtcCcsXG5cdFx0XHQnRFRUX0lEJyxcblx0XHRdICksXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0fSApLFxufTtcblxuZXhwb3J0IGNvbnN0IG9wdGlvbnNFbnRpdHlNYXAgPSB7XG5cdGRlZmF1bHQ6ICgpID0+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRsYWJlbDogcHJldHR5U3RhdHVzKFxuXHRcdFx0XHRcdGNoZWNraW5TdGF0dXMuQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfT1VUXG5cdFx0XHRcdCksXG5cdFx0XHRcdHZhbHVlOiBjaGVja2luU3RhdHVzLkNIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX09VVCxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGxhYmVsOiBwcmV0dHlTdGF0dXMoXG5cdFx0XHRcdFx0Y2hlY2tpblN0YXR1cy5DSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9JTlxuXHRcdFx0XHQpLFxuXHRcdFx0XHR2YWx1ZTogY2hlY2tpblN0YXR1cy5DSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9JTixcblx0XHRcdH0sXG5cdFx0XTtcblx0fSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHR9XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRRdWVyeURhdGEgPSB7XG5cdHF1ZXJ5RGF0YToge1xuXHRcdGxpbWl0OiAxMDAsXG5cdFx0b3JkZXJCeTogJ0NIS190aW1lc3RhbXAnLFxuXHRcdG9yZGVyOiBRVUVSWV9PUkRFUl9ERVNDLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGEgcmVnaXN0cmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHR0aW1lc3RhbXA6ICdDSEtfdGltZXN0YW1wJyxcblx0XHRpZDogJ0NIS19JRCcsXG5cdH07XG5cdHJldHVybiBpc1VuZGVmaW5lZCggb3JkZXJCeU1hcFsgb3JkZXJCeSBdICkgP1xuXHRcdG9yZGVyQnkgOlxuXHRcdG9yZGVyQnlNYXBbIG9yZGVyQnkgXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHdoZXJlIGNvbmRpdGlvbnMgZm9yIGFuIHJlZ2lzdHJhdGlvbnMgZW5kcG9pbnQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JEYXRldGltZUlkICAgIFx0SUQgb2YgRXZlbnQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JFdmVudElkICAgIElEIG9mIEF0dGVuZGVlIHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yUmVnaXN0cmF0aW9uSWQgSUQgb2YgVHJhbnNhY3Rpb24gdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JUaWNrZXRJZCBcdFx0SUQgb2YgVGlja2V0IHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yU3RhdHVzSWQgXHRcdElEIG9mIFN0YXR1cyB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgICBcdFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICgge1xuXHRmb3JEYXRldGltZUlkID0gMCxcblx0Zm9yRXZlbnRJZCA9IDAsXG5cdGZvclJlZ2lzdHJhdGlvbklkID0gMCxcblx0Zm9yVGlja2V0SWQgPSAwLFxuXHRmb3JTdGF0dXNJZCA9ICcnLFxufSApID0+IHtcblx0Y29uc3Qgd2hlcmUgPSBbXTtcblx0Zm9yRXZlbnRJZCA9IHBhcnNlSW50KCBmb3JFdmVudElkLCAxMCApO1xuXHRpZiAoIGZvckV2ZW50SWQgIT09IDAgJiYgISBpc05hTiggZm9yRXZlbnRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtSZWdpc3RyYXRpb24uRVZUX0lEXT0nICsgZm9yRXZlbnRJZCApO1xuXHR9XG5cdGZvckRhdGV0aW1lSWQgPSBwYXJzZUludCggZm9yRGF0ZXRpbWVJZCwgMTAgKTtcblx0aWYgKCBmb3JEYXRldGltZUlkICE9PSAwICYmICEgaXNOYU4oIGZvckRhdGV0aW1lSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRFRUX0lEXT0nICsgZm9yRGF0ZXRpbWVJZCApO1xuXHR9XG5cdGZvclJlZ2lzdHJhdGlvbklkID0gcGFyc2VJbnQoIGZvclJlZ2lzdHJhdGlvbklkLCAxMCApO1xuXHRpZiAoIGZvclJlZ2lzdHJhdGlvbklkICE9PSAwICYmICEgaXNOYU4oIGZvclJlZ2lzdHJhdGlvbklkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1JFR19JRF09JyArIGZvclJlZ2lzdHJhdGlvbklkICk7XG5cdH1cblx0Zm9yVGlja2V0SWQgPSBwYXJzZUludCggZm9yVGlja2V0SWQsIDEwICk7XG5cdGlmICggZm9yVGlja2V0SWQgIT09IDAgJiYgISBpc05hTiggZm9yVGlja2V0SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbUmVnaXN0cmF0aW9uLlRLVF9JRF09JyArIGZvclRpY2tldElkICk7XG5cdH1cblx0aWYgKCBmb3JTdGF0dXNJZCAhPT0gJycgJiYgZm9yU3RhdHVzSWQgIT09IG51bGwgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW0NIS19pbl09JyArIGZvclN0YXR1c0lkICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCJpbXBvcnQgeyB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgTU9ERUxfTkFNRSA9ICdkYXRldGltZSc7XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9TVEFUVVNfSUQgPSB7XG5cdEFDVElWRTogJ0RUQScsXG5cdENBTkNFTExFRDogJ0RUQycsXG5cdEVYUElSRUQ6ICdEVEUnLFxuXHRJTkFDVElWRTogJ0RUSScsXG5cdFBPU1RQT05FRDogJ0RUUCcsXG5cdFNPTERfT1VUOiAnRFRTJyxcblx0VFJBU0hFRDogJ0RUVCcsXG5cdFVQQ09NSU5HOiAnRFRVJyxcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9TVEFUVVNfSURTID0gdmFsdWVzKCBEQVRFVElNRV9TVEFUVVNfSUQgKTtcblxuZXhwb3J0IGNvbnN0IE1JTlVURV9JTl9TRUNPTkRTID0gNjA7XG5leHBvcnQgY29uc3QgSE9VUl9JTl9TRUNPTkRTID0gTUlOVVRFX0lOX1NFQ09ORFMgKiA2MDtcbmV4cG9ydCBjb25zdCBEQVlfSU5fU0VDT05EUyA9IEhPVVJfSU5fU0VDT05EUyAqIDI0O1xuZXhwb3J0IGNvbnN0IFdFRUtfSU5fU0VDT05EUyA9IEhPVVJfSU5fU0VDT05EUyAqIDc7XG5leHBvcnQgY29uc3QgTU9OVEhfSU5fU0VDT05EUyA9IERBWV9JTl9TRUNPTkRTICogMzA7XG4iLCIvKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICogYXMgYmFzZUZvcm1hdHRlciBmcm9tICcuLi9iYXNlLWRhdGUtZm9ybWF0dGVyJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGZvck93biwgcHVsbEF0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG5cdFRJTUVfRk9STUFUX1NJVEUsXG5cdERBVEVfVElNRV9GT1JNQVRfU0lURSxcblx0YWxsRGF0ZVRpbWVzQXNTdHJpbmcsXG5cdFNFUEFSQVRPUl9TUEFDRV9EQVNIX1NQQUNFLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogQXJyYXkgb2YgZmllbGRzIHRoYXQgaGF2ZSBkYXRlIGluZm9ybWF0aW9uXG4gKiBAdHlwZSB7IHN0cmluZ1tdIH1cbiAqL1xuZXhwb3J0IGNvbnN0IERBVEVfRklFTERTID0gW1xuXHQnRFRUX0VWVF9zdGFydCcsXG5cdCdEVFRfRVZUX2VuZCcsXG5dO1xuXG4vKipcbiAqIFdpbGwgaG9sZCB0aGUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGxpc3Qgb2YgZm9ybWF0dGVycyBmb3IgZGF0ZXMuICBGb3JtYXR0ZXJzXG4gKiBhcmUgZnVuY3Rpb25zIGRlZmluZWQgaW4gYC4uL2Jhc2UtZGF0ZS1mb3JtYXR0ZXJgIGJ1dCB3cmFwcGVkIGJ5IGR5bmFtaWNhbGx5XG4gKiBnZW5lcmF0ZWQgZnVuY3Rpb25zIChjYWxsYWJsZSB2aWEgc2FtZSBuYW1lKSB0aGF0IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZSB0aGVcbiAqIGNvcnJlY3QgZGF0ZUZpZWxkc01hcCBhcmd1bWVudC5cbiAqXG4gKiBFZy4gIGAuLi9iYXNlLWRhdGUtZm9ybWF0dGVyIGhhc1xuICogZm9ybWF0RGF0ZXNPbkVudGl0aWVzKCBlbnRpdGllcywgZW50aXR5RGF0ZUZpZWxkcywgZm9ybWF0LCBsb2NhbCApO1xuICogV2hlbiBpbXBvcnRpbmcgYGZvcm1hdERhdGVzT25FbnRpdGllc2AgZnJvbSB0aGlzIGZpbGUsIHlvdSBjYW4gY2FsbCBpdCBzaW1wbHlcbiAqIGJ5IGRvaW5nIHRoaXM6XG4gKlxuICogZm9ybWF0RGF0ZXNPbkVudGl0aWVzKCBkYXRlVGltZU9iamVjdHMsIGZvcm1hdCwgbG9jYWwgKTtcbiAqXG4gKiBOb3RpY2UgdGhhdCBpdCdzIGNhbGxlZCB3aXRob3V0IHRoZSBlbnRpdHlEYXRlRmllbGRzIGFyZ3VtZW50IGJlY2F1c2UgdGhhdCdzXG4gKiBwcm92aWRlZCBieSB0aGlzIGdlbmVyYXRvci5cbiAqXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IGZvcm1hdHRlcnMgPSB7fTtcblxuZm9yT3duKCBiYXNlRm9ybWF0dGVyLCAoIGltcGxlbWVudGF0aW9uLCBmdW5jdGlvbk5hbWUgKSA9PiB7XG5cdGZvcm1hdHRlcnNbIGZ1bmN0aW9uTmFtZSBdID0gKCAuLi5pbmNvbWluZ0FyZ3MgKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3RBcmcgPSBwdWxsQXQoIGluY29taW5nQXJncywgMCApO1xuXHRcdHJldHVybiBpbXBsZW1lbnRhdGlvbiggZmlyc3RBcmdbIDAgXSwgREFURV9GSUVMRFMsIC4uLmluY29taW5nQXJncyApO1xuXHR9O1xufSApO1xuXG4vKipcbiAqIFRoaXMgd2lsbCBzcGl0IG91dCBhIHByZXR0aWZpZWQgbGFiZWwgZm9yIHRoZSBwcm92aWRlZCBEYXRlVGltZSBlbnRpdHkuXG4gKlxuICogSWYgdGhlcmUgaXMgYSBEVFRfbmFtZSwgdGhlIGZvcm1hdCB3aWxsIGJlOlxuICogYERUVF9uYW1lIChEVFRfRVZUX3N0YXJ0IC0gRFRUX0VWVF9lbmQpYFxuICpcbiAqIElmIG5vIERUVF9uYW1lIHRoZW46XG4gKiBgRFRUX0VWVF9zdGFydCAtIERUVF9FVlRfZW5kYFxuICpcbiAqIFRoaXMgd2lsbCBhY2NvdW50IGZvciBpZiBib3RoIHN0YXJ0IGFuZCBlbmQgYXJlIGluIHRoZSBzYW1lIGRheSBhbmQgc2ltcGx5XG4gKiB1c2UgdGltZSBmb3IgdGhlIGVuZCBwYXJ0LlxuICpcbiAqIEBwYXJhbSB7IEJhc2VFbnRpdHkgfSBEYXRlVGltZUVudGl0eVxuICogQHJldHVybiB7IHN0cmluZyB9ICBBIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwcm92aWRlZFxuICogICAgRGF0ZVRpbWVFbnRpdHkuXG4gKi9cbmV4cG9ydCBjb25zdCBwcmV0dHlEYXRlRnJvbURhdGVUaW1lID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0bGV0IGNvbnRlbnQgPSAnJztcblx0aWYgKCBpc01vZGVsRW50aXR5T2ZNb2RlbCggRGF0ZVRpbWVFbnRpdHksICdkYXRldGltZScgKSApIHtcblx0XHRpZiAoIERhdGVUaW1lRW50aXR5LkRUVF9FVlRfc3RhcnQuaGFzU2FtZShcblx0XHRcdERhdGVUaW1lRW50aXR5LkRUVF9FVlRfZW5kLFxuXHRcdFx0J2RheSdcblx0XHQpICkge1xuXHRcdFx0Y29udGVudCArPSBhbGxEYXRlVGltZXNBc1N0cmluZyhcblx0XHRcdFx0U0VQQVJBVE9SX1NQQUNFX0RBU0hfU1BBQ0UsXG5cdFx0XHRcdERhdGVUaW1lRW50aXR5LkRUVF9FVlRfc3RhcnQudG9Gb3JtYXQoXG5cdFx0XHRcdFx0REFURV9USU1FX0ZPUk1BVF9TSVRFXG5cdFx0XHRcdCksXG5cdFx0XHRcdERhdGVUaW1lRW50aXR5LkRUVF9FVlRfZW5kLnRvRm9ybWF0KFxuXHRcdFx0XHRcdFRJTUVfRk9STUFUX1NJVEVcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRlbnQgKz0gYWxsRGF0ZVRpbWVzQXNTdHJpbmcoXG5cdFx0XHRcdFNFUEFSQVRPUl9TUEFDRV9EQVNIX1NQQUNFLFxuXHRcdFx0XHREYXRlVGltZUVudGl0eS5EVFRfRVZUX3N0YXJ0LnRvRm9ybWF0KFxuXHRcdFx0XHRcdERBVEVfVElNRV9GT1JNQVRfU0lURVxuXHRcdFx0XHQpLFxuXHRcdFx0XHREYXRlVGltZUVudGl0eS5EVFRfRVZUX2VuZC50b0Zvcm1hdChcblx0XHRcdFx0XHREQVRFX1RJTUVfRk9STUFUX1NJVEVcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGNvbnRlbnQgPSBEYXRlVGltZUVudGl0eS5EVFRfbmFtZSA/XG5cdFx0XHRgJHsgRGF0ZVRpbWVFbnRpdHkuRFRUX25hbWUgfSAoJHsgY29udGVudCB9KWAgOlxuXHRcdFx0Y29udGVudDtcblx0fVxuXHRyZXR1cm4gY29udGVudDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7XG4iLCJleHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybWF0dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdHVzLWhlbHBlcic7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcblx0R1JFQVRFUl9USEFOLFxuXHRHUkVBVEVSX1RIQU5fQU5EX0VRVUFMLFxuXHRMRVNTX1RIQU5fQU5EX0VRVUFMLFxufSBmcm9tICcuLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IG5vd0RhdGVBbmRUaW1lID0gbW9tZW50KCk7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdEVFRfbmFtZScsXG5cdFx0XHQnRFRUX0lEJyxcblx0XHRcdCdzdGFydF9kYXRlJyxcblx0XHRcdCdlbmRfZGF0ZScsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdFx0c2hvd0V4cGlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXHRcdG1vbnRoOiBQcm9wVHlwZXMubW9udGgsXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHRcdHNob3dFeHBpcmVkOiBib29sZWFuXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdzdGFydF9kYXRlJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfREVTQyxcblx0XHRzaG93RXhwaXJlZDogZmFsc2UsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHN0YXJ0X2RhdGU6ICdEVFRfRVZUX3N0YXJ0Jyxcblx0XHRlbmRfZGF0ZTogJ0RUVF9FVlRfZW5kJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gZXZlbnRzIGVuZHBvaW50IHJlcXVlc3QgdXNpbmcgcHJvdmlkZWRcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JFdmVudElkICBJRCBmb3IgRXZlbnQgdG8gcmV0cmlldmUgZGF0ZXRpbWVzIGZyb21cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd0V4cGlyZWQgIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgZXhwaXJlZCBldmVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9udGggICAgICAgICBSZXR1cm4gZXZlbnRzIGZvciB0aGUgZ2l2ZW4gbW9udGguICBDYW4gYmUgYW55XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGFueSBtb250aCBmb3JtYXQgcmVjb2duaXplZCBieSBtb21lbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgIFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICgge1xuXHRmb3JFdmVudElkID0gMCxcblx0c2hvd0V4cGlyZWQgPSBmYWxzZSxcblx0bW9udGggPSAnbm9uZScsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXHRpZiAoICEgc2hvd0V4cGlyZWQgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtEVFRfRVZUX2VuZCoqZXhwaXJlZF1bXT0nICsgR1JFQVRFUl9USEFOICtcblx0XHRcdCcmd2hlcmVbRFRUX0VWVF9lbmQqKmV4cGlyZWRdW109JyArXG5cdFx0XHRub3dEYXRlQW5kVGltZS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0fVxuXHRpZiAoIG1vbnRoICYmIG1vbnRoICE9PSAnbm9uZScgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtEVFRfRVZUX3N0YXJ0XVtdPScgKyBHUkVBVEVSX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbRFRUX0VWVF9zdGFydF1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLnN0YXJ0T2YoICdtb250aCcgKS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RUVF9FVlRfZW5kXVtdPScgKyBMRVNTX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbRFRUX0VWVF9lbmRdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5lbmRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGlmICggcGFyc2VJbnQoIGZvckV2ZW50SWQsIDEwICkgIT09IDAgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW0V2ZW50LkVWVF9JRF09JyArIGZvckV2ZW50SWQgKTtcblx0fVxuXHRyZXR1cm4gd2hlcmUuam9pbiggJyYnICk7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIHF1ZXJ5IHN0cmluZyBmb3IgdXNlIGJ5IGEgUkVTVCByZXF1ZXN0IGdpdmVuIGEgc2V0IG9mIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IE9iamVjdCB9IHF1ZXJ5RGF0YVxuICogQHJldHVybiB7IHN0cmluZyB9ICBSZXR1cm5zIHRoZSBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVN0cmluZyA9ICggcXVlcnlEYXRhID0ge30gKSA9PiB7XG5cdHF1ZXJ5RGF0YSA9IHsgLi4uZGVmYXVsdFF1ZXJ5RGF0YS5xdWVyeURhdGEsIC4uLnF1ZXJ5RGF0YSB9O1xuXHRyZXR1cm4gYmFzZUdldFF1ZXJ5U3RyaW5nKCBxdWVyeURhdGEsIHdoZXJlQ29uZGl0aW9ucywgbWFwT3JkZXJCeSApO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IERBVEVUSU1FX1NUQVRVU19JRCwgTU9ERUxfTkFNRSwgTU9OVEhfSU5fU0VDT05EUyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn1cbiAqL1xuY29uc3QgYXNzZXJ0RGF0ZVRpbWVFbnRpdHkgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIERhdGVUaW1lRW50aXR5LCBNT0RFTF9OQU1FICkgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdCdUaGUgcHJvdmlkZWQgZW50aXR5IGlzIG5vdCBhIGRhdGV0aW1lIGluc3RhbmNlJ1xuXHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGV2ZW50IGRhdGUgaXMgb2NjdXJyaW5nIE5PV1xuICovXG5leHBvcnQgY29uc3QgaXNBY3RpdmUgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKTtcblx0cmV0dXJuIERhdGVUaW1lRW50aXR5LnN0YXJ0LmRpZmZOb3coKS5hc1NlY29uZHMoKSA8IDAgJiZcblx0XHREYXRlVGltZUVudGl0eS5lbmQuZGlmZk5vdygpLmFzU2Vjb25kcygpID4gMDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGVuZCBkYXRlIGlzIGluIHRoZSBwYXN0XG4gKi9cbmV4cG9ydCBjb25zdCBpc0V4cGlyZWQgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKTtcblx0cmV0dXJuIERhdGVUaW1lRW50aXR5LmVuZC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPCAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZW5kIGRhdGUgaXMgaW4gdGhlIHBhc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGlzUmVjZW50bHlFeHBpcmVkID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdHJldHVybiBEYXRlVGltZUVudGl0eS5lbmQuZGlmZk5vdygpLmFzU2Vjb25kcygpIDwgMCAmJlxuXHRcdERhdGVUaW1lRW50aXR5LmVuZC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPiAoIE1PTlRIX0lOX1NFQ09ORFMgKiAtMSApO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGlja2V0cyBzb2xkIG1lZXRzIG9yIGV4Y2VlZHMgcmVnaXN0cmF0aW9uIGxpbWl0XG4gKi9cbmV4cG9ydCBjb25zdCBpc1NvbGRPdXQgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKTtcblx0Y29uc3QgY2FwID0gRGF0ZVRpbWVFbnRpdHkucmVnTGltaXQ7XG5cdHJldHVybiAoIGNhcCAhPT0gbnVsbCAmJiBjYXAgIT09ICdJTkYnICYmIGNhcCAhPT0gSW5maW5pdHkgJiYgY2FwICE9PSAtMSApICYmXG5cdFx0RGF0ZVRpbWVFbnRpdHkuc29sZCA+PSBjYXA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBzdGFydCBkYXRlIGlzIGluIHRoZSBmdXR1cmVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzVXBjb21pbmcgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKTtcblx0cmV0dXJuIERhdGVUaW1lRW50aXR5LnN0YXJ0LmRpZmZOb3coKS5hc1NlY29uZHMoKSA+IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBkYXRlIGlzIGFyY2hpdmVkXG4gKi9cbmV4cG9ydCBjb25zdCBpc1RyYXNoZWQgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKTtcblx0cmV0dXJuIERhdGVUaW1lRW50aXR5LmRlbGV0ZWQ7XG59O1xuXG4vLyBQTFogTk9URTpcbi8vIGxlYXZpbmcgdGhlIGZvbGxvd2luZyBjb2RlIGluIGJlY2F1c2UgaXQgY2FuIGJlIHVzZWQgaWYvd2hlbiB3ZSBkZWNpZGVcbi8vIHRvIGZ1bGx5IHN1cHBvcnQgdGhlc2UgZGF0ZXRpbWUgc3RhdHVzZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBkZWZpbmVkXG4vLyBvbiB0aGUgRUVfRGF0ZXRpbWUgbW9kZWwgb2JqZWN0IGNsYXNzIGJ1dCBub3QgeWV0IHVzZWRcblxuLy8gLyoqXG4vLyAgKiBAZnVuY3Rpb25cbi8vICAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3Rcbi8vICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZGF0ZSBpcyBjYW5jZWxsZWRcbi8vICAqL1xuLy8gZXhwb3J0IGNvbnN0IGlzQ2FuY2VsbGVkID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcbi8vIFx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG4vLyBcdHJldHVybiBEYXRlVGltZUVudGl0eS5jYW5jZWxsZWQ7XG4vLyB9O1xuLy9cbi8vIC8qKlxuLy8gICogQGZ1bmN0aW9uXG4vLyAgKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4vLyAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGRhdGUgaGFzIGJlZW4gcG9zdHBvbmVkXG4vLyAgKi9cbi8vIGV4cG9ydCBjb25zdCBpc1Bvc3Rwb25lZCA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG4vLyBcdGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApO1xuLy8gXHRyZXR1cm4gRGF0ZVRpbWVFbnRpdHkucG9zdHBvbmVkO1xuLy8gfTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gc3RhdHVzIElEXG4gKi9cbmV4cG9ydCBjb25zdCBzdGF0dXMgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKTtcblx0aWYgKCBpc1RyYXNoZWQoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5UUkFTSEVEO1xuXHR9XG5cdGlmICggaXNFeHBpcmVkKCBEYXRlVGltZUVudGl0eSApICkge1xuXHRcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuRVhQSVJFRDtcblx0fVxuXHRpZiAoIGlzU29sZE91dCggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELlNPTERfT1VUO1xuXHR9XG5cdGlmICggaXNVcGNvbWluZyggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELlVQQ09NSU5HO1xuXHR9XG5cdGlmICggaXNBY3RpdmUoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5BQ1RJVkU7XG5cdH1cblx0Ly8gUExaIFNFRSBOT1RFIEFCT1ZFXG5cdC8vIGlmICggaXNDYW5jZWxsZWQoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdC8vIFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5DQU5DRUxMRUQ7XG5cdC8vIH1cblx0Ly8gaWYgKCBpc1Bvc3Rwb25lZCggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0Ly8gXHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELlBPU1RQT05FRDtcblx0Ly8gfVxuXHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELklOQUNUSVZFO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgQ1NTIGNsYXNzIGZvciB0aGUgYmFja2dyb3VuZCBjb2xvclxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRyZXR1cm4gYGVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLSR7IHN0YXR1cyggRGF0ZVRpbWVFbnRpdHkgKSB9YDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9IGRhdGUgc3RhdHVzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRlVGltZVN0YXR1c1RleHRMYWJlbCA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG5cdGxldCBkYXRlU3RhdHVzID0gJyc7XG5cdHN3aXRjaCAoIHN0YXR1cyggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5TT0xEX09VVCA6XG5cdFx0XHRkYXRlU3RhdHVzID0gX18oICdzb2xkIG91dCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELkVYUElSRUQgOlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnZXhwaXJlZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELlVQQ09NSU5HIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ3VwY29taW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBEQVRFVElNRV9TVEFUVVNfSUQuQUNUSVZFIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2FjdGl2ZScsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELlRSQVNIRUQgOlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnYXJjaGl2ZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5DQU5DRUxMRUQgOlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnY2FuY2VsbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBEQVRFVElNRV9TVEFUVVNfSUQuUE9TVFBPTkVEIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ3Bvc3Rwb25lZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELklOQUNUSVZFIDpcblx0XHRkZWZhdWx0OlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnaW5hY3RpdmUnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gZGF0ZVN0YXR1cztcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBtYXBWYWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbWVtaXplJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgZW5kcG9pbnRzIH0gZnJvbSAnLi9lbmRwb2ludHMuanMnO1xuXG4vKipcbiAqIFJlY2VpdmVzIGFuIG9iamVjdCBtYXAgb2YgbW9kZWxOYW1lIHRvIGVuZHBvaW50IGFuZCBtYXBzIHRoYXQgdG8gYSBkZWZhdWx0XG4gKiBtYXAgb2YgbW9kZWxOYW1lIHRvIGVtcHR5IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0geyBPYmplY3QgfSBtb2RlbE5hbWVFbmRwb2ludHNcbiAqIEByZXR1cm4geyBPYmplY3QgfSBBbiBvYmplY3Qgb2YgeyB7IG1vZGVsTmFtZSB9IDoge30gfVxuICovXG5jb25zdCBtYXBUb09iamVjdFZhbHVlcyA9ICggbW9kZWxOYW1lRW5kcG9pbnRzICkgPT4ge1xuXHRyZXR1cm4gbWFwVmFsdWVzKCBtb2RlbE5hbWVFbmRwb2ludHMsXG5cdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fSxcblx0KTtcbn07XG5cbmNvbnN0IGdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0ID0gbWVtb2l6ZShcblx0KCkgPT4gbWFwVG9PYmplY3RWYWx1ZXMoIGVuZHBvaW50cyApXG4pO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBkZWZhdWx0IHN0YXRlIHRvIGJlIHVzZWQgYnkgc3RvcmVzIGNvbnRhaW5pbmcgbGlzdHMuXG4gKlxuICogQHR5cGUgeyBPYmplY3QgfVxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9MSVNUU19TVEFURSA9IG1hcFRvT2JqZWN0VmFsdWVzKCBlbmRwb2ludHMgKTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgZGVmYXVsdCBzdGF0ZSB0byBiZSB1c2VkIGJ5IHRoZSBjb3JlIHN0b3JlLlxuICpcbiAqIEB0eXBlIHt7ZW50aXRpZXM6IHt9LCBlbnRpdHlJZHM6IHt9LCBkaXJ0eToge319fVxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT1JFX1NUQVRFID0ge1xuXHRlbnRpdGllczoge1xuXHRcdC4uLmdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0KCksXG5cdH0sXG5cdHJlbGF0aW9uczoge30sXG5cdGRpcnR5OiB7XG5cdFx0cmVsYXRpb25zOiB7XG5cdFx0XHRpbmRleDoge30sXG5cdFx0XHRkZWxldGU6IHt9LFxuXHRcdFx0YWRkOiB7fSxcblx0XHR9LFxuXHRcdHRyYXNoOiB7fSxcblx0XHRkZWxldGU6IHt9LFxuXHR9LFxufTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgZGVmYXVsdCBzdGF0ZSB0byBiZSB1c2VkIGJ5IHRoZSBzY2hlbWEgc3RvcmUuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TQ0hFTUFfU1RBVEUgPSB7XG5cdHNjaGVtYToge1xuXHRcdC4uLmdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0KCksXG5cdH0sXG5cdGZhY3Rvcnk6IHtcblx0XHQuLi5nZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCgpLFxuXHR9LFxuXHRyZWxhdGlvbkVuZHBvaW50czoge1xuXHRcdC4uLmdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0KCksXG5cdH0sXG5cdHJlbGF0aW9uU2NoZW1hOiB7fSxcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZGF0YSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgYXNzZXJ0RW50aXR5SGFzS2V5IH0gZnJvbSAnLi9hc3NlcnRpb25zJztcblxuLyoqXG4gKiBBbGwgYXZhaWxhYmxlIGVuZHBvaW50cyBleHBvc2VkIHZpYSB0aGUgZWVqcy5kYXRhIGdsb2JhbCBmcm9tIHRoZSBzZXJ2ZXIuXG4gKlxuICogQHR5cGUge3t9fVxuICovXG5leHBvcnQgY29uc3Qge1xuXHRjb2xsZWN0aW9uX2VuZHBvaW50czogZW5kcG9pbnRzID0ge30sXG5cdGJhc2VfcmVzdF9yb3V0ZTogYmFzZVJlc3RSb3V0ZSxcbn0gPSBkYXRhLnBhdGhzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZW5kcG9pbnQgZm9yIHRoZSBwcm92aWRlZCBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lICBXaGF0IG1vZGVsIHRvIHJldHJpZXZlIHRoZSBlbmRwb2ludCBmb3IuXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICBUaGUgZW5kcG9pbnQgZm9yIHRoZSBwcm92aWRlZCBtb2RlbC5cbiAqIEB0aHJvd3Mge0V4Y2VwdGlvbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVuZHBvaW50ID0gKCBtb2RlbE5hbWUgKSA9PiB7XG5cdGFzc2VydEVudGl0eUhhc0tleSggbW9kZWxOYW1lLCBlbmRwb2ludHMgKTtcblx0cmV0dXJuIGVuZHBvaW50c1sgbW9kZWxOYW1lIF07XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIHByb3ZpZGVkIHF1ZXJ5U3RyaW5nIHRvIHRoZSBlbmRwb2ludCBmb3IgdGhlIHByb3ZpZGVkIG1vZGVsIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lICBXaGF0IG1vZGVsIHRoZSBmaW5hbCBzdHJpbmcgaXMgZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nICBUaGUgcXVlcnkgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIGVuZHBvaW50LlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZmluYWwgYXNzZW1ibGVkIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5UXVlcnlTdHJpbmcgPSAoIG1vZGVsTmFtZSwgcXVlcnlTdHJpbmcgPSAnJyApID0+IHtcblx0cmV0dXJuIHF1ZXJ5U3RyaW5nICE9PSAnJyA/XG5cdFx0Z2V0RW5kcG9pbnQoIG1vZGVsTmFtZSApICsgJz8nICsgcXVlcnlTdHJpbmcgOlxuXHRcdGdldEVuZHBvaW50KCBtb2RlbE5hbWUgKTtcbn07XG5cbi8qKlxuICogU3RyaXBzIHRoZSBiYXNlX3Jlc3Rfcm91dGUgKGkuZS4gaHR0cHM6Ly9teXVybC5jb20vd3AtanNvbi8pIGZyb20gdGhlIHByb3ZpZGVkXG4gKiB1cmwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHVybCB3aXRoIHRoZSBiYXNlIHJlc3Qgcm91dGUgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmlwQmFzZVJvdXRlRnJvbVVybCA9ICggdXJsICkgPT4ge1xuXHRyZXR1cm4gdXJsLnJlcGxhY2UoIGJhc2VSZXN0Um91dGUsICcnICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHNwcmludGYgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IEludmFsaWRTY2hlbWEgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IGlzU2NoZW1hIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQge1xuXHRNb25leSxcblx0U2VydmVyRGF0ZVRpbWUgYXMgRGF0ZVRpbWUsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbHVlLW9iamVjdHMnO1xuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGlzRGF0ZVRpbWVGaWVsZCxcblx0aXNNb25leUZpZWxkLFxufSBmcm9tICcuL2Jvb2xlYW5zJztcbmltcG9ydCB7XG5cdGlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZCxcblx0dmFsaWRhdGVFbnVtVHlwZSxcblx0dmFsaWRhdGVUeXBlLFxuXHR2YWxpZGF0ZVR5cGVGb3JGaWVsZCxcbn0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zIH0gZnJvbSAnLi9leHRyYWN0b3JzJztcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZpZWxkIHZhbHVlIGlzIGEga25vd24gdmFsdWUgb2JqZWN0LlxuICpcbiAqIE5vdGU6IHRoaXMgb25seSBhc3NlcnRzIGtub3duIHZhbHVlIG9iamVjdHMsIGlmIHRoZSB2YWx1ZSBpcyBub3QgZGV0ZWN0ZWQgYXNcbiAqIGEga25vd24gdmFsdWUgb2JqZWN0IGl0IGlzIHBhc3NlZCBiYWNrIGFzIGlzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHRocm93cyBJbnZhbGlkRGF0ZVRpbWVcbiAqIEB0aHJvd3MgVHlwZUVycm9yXG4gKi9cbmV4cG9ydCBjb25zdCBtYXliZUFzc2VydFZhbHVlT2JqZWN0ID0gKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIHNjaGVtYSApID0+IHtcblx0aWYgKCBpc0RhdGVUaW1lRmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0RGF0ZVRpbWUuYXNzZXJ0SXNEYXRlVGltZSggZmllbGRWYWx1ZSApO1xuXHR9XG5cdGlmICggaXNNb25leUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICkge1xuXHRcdE1vbmV5LmFzc2VydE1vbmV5KCBmaWVsZFZhbHVlICk7XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBwcm92aWRlZCBvYmplY3QgaXMgYSB2YWxpZCBtb2RlbCBzY2hlbWEgb2JqZWN0LlxuICpcbiAqIEN1cnJlbnRseSwgYW4gb2JqZWN0IGlzIGNvbnNpZGVyZWQgYSB2YWxpZCBtb2RlbCBzY2hlbWEgaWYgaXQgaGFzIGFcbiAqICdwcm9wZXJ0aWVzJyBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHNjaGVtYVxuICogQHRocm93cyBJbnZhbGlkU2NoZW1hXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRWYWxpZFNjaGVtYSA9ICggc2NoZW1hICkgPT4ge1xuXHRpZiAoICEgaXNTY2hlbWEoIHNjaGVtYSApICkge1xuXHRcdHRocm93IG5ldyBJbnZhbGlkU2NoZW1hKFxuXHRcdFx0J1RoaXMgaXMgYW4gaW52YWxpZCBzY2hlbWEgZm9yIGEgbW9kZWwuJyxcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gZmllbGQgZXhpc3RzIGluIHRoZSBwcm92aWRlZCBzY2hlbWEgYW5kIHRoZSBzaGFwZSBmb3JcbiAqIHRoZSBzY2hlbWEgZW50cnkgb24gdGhhdCBmaWVsZCBpcyBleHBlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lICBUaGUgbW9kZWwgdGhlIHNjaGVtYSBiZWxvbmdzIHRvLCB0aGlzIGlzIHVzZWQgZm9yXG4gKiBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWUgIFRoZSBmaWVsZCBiZWluZyBjaGVja2VkIGFnYWluc3QgdGhlIHNjaGVtYVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSAgICAgVGhlIHNjaGVtYSBmb3IgdGhlIG1vZGVsIHVzZWQgZm9yIHZhbGlkYXRpb25cbiAqIEB0aHJvd3MgSW52YWxpZFNjaGVtYVxuICogQHRocm93cyBUeXBlRXJyb3JcbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydFZhbGlkU2NoZW1hRmllbGRQcm9wZXJ0aWVzID0gKFxuXHRtb2RlbE5hbWUsXG5cdGZpZWxkTmFtZSxcblx0c2NoZW1hLFxuKSA9PiB7XG5cdGlmICggaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0gKSApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0c3ByaW50Zihcblx0XHRcdFx0J1RoZSBnaXZlbiBcIiVzXCIgZmllbGROYW1lIGRvZXMgbm90IGhhdmUgYSBkZWZpbmVkIHNjaGVtYSBmb3IgdGhlIG1vZGVsIFwiJXNcIicsXG5cdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0KSxcblx0XHQpO1xuXHR9XG5cdGlmICggc2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlID09PSAnb2JqZWN0JyApIHtcblx0XHRpZiAoIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMgKSApIHtcblx0XHRcdHRocm93IG5ldyBJbnZhbGlkU2NoZW1hKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgc2NoZW1hIGZvciB0aGUgZmllbGQgJXMgb24gdGhlIG1vZGVsICVzIGlzIG9mIHR5cGUgXCJvYmplY3RcIiBidXQgZG9lcyBub3QgaGF2ZSBhIHByb3BlcnRpZXMgcHJvcGVydHkuJyxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0bW9kZWxOYW1lXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmICggaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcgKSApIHtcblx0XHRcdHRocm93IG5ldyBJbnZhbGlkU2NoZW1hKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgc2NoZW1hIGZvciB0aGUgZmllbGQgJXMgb24gdGhlIG1vZGVsICVzIGlzIG9mIHR5cGUgXCJvYmplY3RcIiBidXQgZG9lcyBub3QgaGF2ZSBhIHJhdyBwcm9wZXJ0eSBpbiBpdFxcJ3MgXCJwcm9wZXJ0aWVzXCIgcHJvcGVydHkuJyxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0bW9kZWxOYW1lXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmICggaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcudHlwZSApICkge1xuXHRcdFx0dGhyb3cgbmV3IEludmFsaWRTY2hlbWEoXG5cdFx0XHRcdHNwcmludGYoXG5cdFx0XHRcdFx0J1RoZSBzY2hlbWEgZm9yIHRoZSBmaWVsZCAlcyBvbiB0aGUgbW9kZWwgJXMgaXMgb2YgdHlwZSBcIm9iamVjdFwiIGFuZCBoYXMgYSBwcm9wZXJ0aWVzLnJhdyBwcm9wZXJ0eSwgaG93ZXZlciB0aGVyZSBpcyBubyBcInR5cGVcIiBkZWZpbmVkIGZvciB0aGUgcmF3IHByb3BlcnR5LicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdG1vZGVsTmFtZVxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRoZSB2YWx1ZSBwcm92aWRlZCBmb3IgdGhlIHByZXBhcmVkIGZpZWxkIGlzIHZhbGlkIGFjY29yZGluZyB0b1xuICogdGhlIHNjaGVtYS5cbiAqXG4gKiBQcmVwYXJlZCBmaWVsZHMgYXJlOlxuICpcbiAqIC0gZmllbGRzIGhhdmluZyB2YWx1ZXMgdGhhdCBhcmUgc2V0IGFzIGEgdmFsdWUgb2JqZWN0IGFuZCBleHBlY3QgYSB2YWx1ZVxuICogICBvYmplY3Qgb24gdXBkYXRlcy9pbnNlcnRzLlxuICogLSBmaWVsZHMgdGhhdCBhcmUgdGhlIGVxdWl2YWxlbnQgYHJhd2AgdmFsdWUgd2hlbiB0aGUgZmllbGQgaW4gdGhlIHNjaGVtYSBpc1xuICogICBkZWZpbmVkIHRvIGhhdmUgcmF3IGFuZCByZW5kZXJlZC9wcmV0dHkgdmFsdWVzLlxuICpcbiAqIE5vdGU6ICBUaGlzIHZhbGlkYXRlcyBhZ2FpbnN0IHByZXBhcmVkIGZpZWxkcyB3aGljaCBtZWFucyB0aGF0OlxuICpcbiAqIC0gaWYgdGhlIHByZXBhcmVkIGZpZWxkIGhhcyBhIHZhbHVlIG9iamVjdCBhcyBpdHMgdmFsdWUsIHRoZW4gdGhhdCB2YWx1ZVxuICogICBvYmplY3QgaXMgdmFsaWRhdGVkIGJlZm9yZSBhbnkgb3RoZXIgdmFsaWRhdGlvbi5cbiAqIC0gaWYgdGhlIHByZXBhcmVkIGZpZWxkIHJlcHJlc2VudHMgYW4gb2JqZWN0IGluIHRoZSBzY2hlbWEsIHRoZW4gaXRzIHZhbHVlIGlzXG4gKiAgIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBgcmF3YCB0eXBlIGluIHRoZSBzY2hlbWEuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEB0aHJvd3MgVHlwZUVycm9yXG4gKiBAdGhyb3dzIEludmFsaWREYXRlVGltZVxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0VmFsaWRWYWx1ZUZvclByZXBhcmVkRmllbGQgPSAoXG5cdGZpZWxkTmFtZSxcblx0ZmllbGRWYWx1ZSxcblx0aW5zdGFuY2UsXG4pID0+IHtcblx0Y29uc3QgeyBzY2hlbWEgfSA9IGluc3RhbmNlO1xuXHRsZXQgaXNWYWxpZCA9IGlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZChcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZmllbGRWYWx1ZSxcblx0XHRzY2hlbWEsXG5cdCk7XG5cdGlmICggISBpc1ZhbGlkICYmIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgJiZcblx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNcblx0KSB7XG5cdFx0aXNWYWxpZCA9IHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcuZW51bSA/XG5cdFx0XHR2YWxpZGF0ZUVudW1UeXBlKFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LnR5cGUsXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcuZW51bSxcblx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdCkgOlxuXHRcdFx0dmFsaWRhdGVUeXBlKFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LnR5cGUsXG5cdFx0XHRcdG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zKFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRcdHNjaGVtYVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdGlmICggISBpc1ZhbGlkICkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIGZpZWxkICBpcyBub3QgdmFsaWQgZm9yIHRoZSBkZWZpbmVkIHNjaGVtYS4gIEl0XFwncyBgcmF3YCBwcm9wZXJ0eSBWYWx1ZSAoJTIkcykgaXMgbm90IHRoZSBjb3JyZWN0IGV4cGVjdGVkIHR5cGUgKCUzJHMpLicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlLFxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0aWYgKCAhIGlzVmFsaWQgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdHNwcmludGYoXG5cdFx0XHRcdCdUaGUgZ2l2ZW4gXCIlMSRzXCIgZmllbGRcXCdzIFZhbHVlICglMiRzKSBpcyBub3QgdmFsaWQgZm9yIHRoZSBkZWZpbmVkIHNjaGVtYSB0eXBlICglMyRzKS4nLFxuXHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSxcblx0XHRcdCksXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4gZmllbGQgaXMgdmFsaWQgYWNjb3JkaW5nIHRvIHRoZVxuICogc2NoZW1hLlxuICpcbiAqIFRoaXMgaXMgdXNlZCBvbiBlbnRpdHkgY29uc3RydWN0aW9uIGFuZCBkb2VzIG5vdCB2YWxpZGF0ZSBwcmVwYXJlZCBmaWVsZFxuICogdmFsdWVzIChzZWUgYXNzZXJ0IGFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkKS5cbiAqXG4gKiBUaGlzIG1ldGhvZCBhbHNvIGFzc2VydHMgdGhhdCB0aGUgc2NoZW1hIGhhcyB2YWxpZCBzY2hlbWEgZmllbGQgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHRocm93cyBUeXBlRXJyb3JcbiAqIEB0aHJvd3MgSW52YWxpZFNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0VmFsaWRGaWVsZEFuZFZhbHVlQWdhaW5zdFNjaGVtYSA9IChcblx0bW9kZWxOYW1lLFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGluc3RhbmNlLFxuKSA9PiB7XG5cdGNvbnN0IHNjaGVtYSA9IGluc3RhbmNlLnNjaGVtYTtcblx0Y29uc3QgdmFsaWRhdGlvblR5cGUgPSB2YWxpZGF0ZVR5cGVGb3JGaWVsZCggZmllbGROYW1lLCBpbnN0YW5jZSApO1xuXHRhc3NlcnRWYWxpZFNjaGVtYUZpZWxkUHJvcGVydGllcyggbW9kZWxOYW1lLCBmaWVsZE5hbWUsIHNjaGVtYSApO1xuXHRsZXQgaXNWYWxpZCA9IGlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZChcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZmllbGRWYWx1ZSxcblx0XHRzY2hlbWEsXG5cdFx0ZmFsc2UsXG5cdCk7XG5cdC8vIGFjY291bnQgZm9yIGZpZWxkTmFtZSBmaWVsZFZhbHVlcyB0aGF0IGhhdmUgcHJvcGVydHkgc2NoZW1hLiBGb3IgTW9kZWxcblx0Ly8gRW50aXRpZXMsIG9ubHkgdGhlIFZBTElEQVRFX1RZUEUgcHJvcGVydHkgaXMgY2FyZWQgYWJvdXQuXG5cdGlmICggc2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlID09PSAnb2JqZWN0JyAmJlxuXHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllc1xuXHQpIHtcblx0XHRpZiAoIGlzVW5kZWZpbmVkKCBmaWVsZFZhbHVlWyB2YWxpZGF0aW9uVHlwZSBdICkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgZ2l2ZW4gXCIlMSRzXCIgdmFsdWUgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEuIEl0IG11c3QgYmUgYW4gb2JqZWN0IGFuZCBpdCBtdXN0IGhhdmUgYSBgJTIkc2Aga2V5LicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdHZhbGlkYXRpb25UeXBlLFxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aXNWYWxpZCA9IHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllc1sgdmFsaWRhdGlvblR5cGUgXS5lbnVtID9cblx0XHRcdHZhbGlkYXRlRW51bVR5cGUoXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllc1sgdmFsaWRhdGlvblR5cGUgXS50eXBlLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LmVudW0sXG5cdFx0XHRcdGZpZWxkVmFsdWVbIHZhbGlkYXRpb25UeXBlIF0sXG5cdFx0XHQpIDpcblx0XHRcdHZhbGlkYXRlVHlwZShcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzWyB2YWxpZGF0aW9uVHlwZSBdLnR5cGUsXG5cdFx0XHRcdGZpZWxkVmFsdWVbIHZhbGlkYXRpb25UeXBlIF1cblx0XHRcdCk7XG5cdFx0aWYgKCAhIGlzVmFsaWQgKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgZ2l2ZW4gXCIlMSRzXCIgdmFsdWUgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEuICBJdFxcJ3MgYCUyJHNgIHByb3BlcnR5IHZhbHVlICglMyRzKSBpcyBub3QgdGhlIGNvcnJlY3QgZXhwZWN0ZWQgdHlwZSAoJTQkcykuJyxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0dmFsaWRhdGlvblR5cGUsXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNbIHZhbGlkYXRpb25UeXBlIF0udHlwZSxcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdGlmICggISBpc1ZhbGlkICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIGZpZWxkXFwncyB2YWx1ZSAoJTIkcykgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEgdHlwZSAoJTMkcykuJyxcblx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH1cbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSwgdXBwZXJGaXJzdCwgY2FtZWxDYXNlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBhc3NlcnRWYWxpZFNjaGVtYSB9IGZyb20gJy4vYXNzZXJ0aW9ucyc7XG5pbXBvcnQge1xuXHRjcmVhdGVHZXR0ZXIsXG5cdGNyZWF0ZUVudGl0eUdldHRlcnNBbmRTZXR0ZXJzLFxuXHRjcmVhdGVQZXJzaXN0aW5nR2V0dGVyc0FuZFNldHRlcnMsXG5cdHNldFNhdmVTdGF0ZSxcbn0gZnJvbSAnLi9jcmVhdGUnO1xuaW1wb3J0IHtcblx0U0FWRV9TVEFURSxcblx0UFJJVkFURV9QUk9QRVJUSUVTLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQmFzZUVudGl0eSBpcyB0aGUgYmFzaWMgY2xhc3MgZm9yIGFsbCBlbnRpdGllcy4gIGNyZWF0ZUVudGl0eUZhY3RvcnkgcmV0dXJuc1xuICogYW4gaW5zdGFuY2Ugb2YgdGhpcyBhbmQgYWxsIHRoZSBnZXR0ZXJzL3NldHRlcnMgZm9yIGZpZWxkcyBldGMgYXJlXG4gKiBkeW5hbWljYWxseSBjcmVhdGVkIHZpYSB0aGUgY29uc3RydWN0b3IuXG4gKi9cbmNsYXNzIEJhc2VFbnRpdHkge1xuXHRbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF0gPSBTQVZFX1NUQVRFLkNMRUFOO1xuXHRbIFBSSVZBVEVfUFJPUEVSVElFUy5WQUxJREFURV9UWVBFUyBdID0ge307XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yIGZvciBCYXNlIEVudGl0eVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBlbnRpdHlGaWVsZHNBbmRWYWx1ZXNcblx0ICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuXHQgKiBAcGFyYW0ge0FycmF5fWZpZWxkUHJlZml4ZXNcblx0ICogQHBhcmFtIHtib29sZWFufSBpc05ld1xuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUZpZWxkc0FuZFZhbHVlcyxcblx0XHRzY2hlbWEsXG5cdFx0ZmllbGRQcmVmaXhlcyA9IFtdLFxuXHRcdGlzTmV3ID0gZmFsc2UsXG5cdCkge1xuXHRcdGFzc2VydFZhbGlkU2NoZW1hKCBzY2hlbWEgKTtcblx0XHRmaWVsZFByZWZpeGVzID0gaXNBcnJheSggZmllbGRQcmVmaXhlcyApID8gZmllbGRQcmVmaXhlcyA6IFtdO1xuXHRcdGNyZWF0ZUdldHRlciggdGhpcywgJ2ZpZWxkUHJlZml4ZXMnLCBmaWVsZFByZWZpeGVzICk7XG5cdFx0Y3JlYXRlR2V0dGVyKCB0aGlzLCAnc2NoZW1hJywgc2NoZW1hLnByb3BlcnRpZXMgKTtcblx0XHRzZXRTYXZlU3RhdGUoXG5cdFx0XHR0aGlzLFxuXHRcdFx0aXNOZXcgPyBTQVZFX1NUQVRFLk5FVyA6IFNBVkVfU1RBVEUuQ0xFQU5cblx0XHQpO1xuXHRcdGNyZWF0ZUdldHRlciggdGhpcywgJ21vZGVsTmFtZScsIG1vZGVsTmFtZSApO1xuXHRcdGNyZWF0ZUdldHRlciggdGhpcywgJ29yaWdpbmFsRmllbGRzQW5kVmFsdWVzJywgZW50aXR5RmllbGRzQW5kVmFsdWVzICk7XG5cdFx0Y3JlYXRlR2V0dGVyKFxuXHRcdFx0dGhpcyxcblx0XHRcdCdmaWVsZHNUb1BlcnNpc3RPbkluc2VydCcsXG5cdFx0XHRuZXcgU2V0KCBPYmplY3Qua2V5cyggZW50aXR5RmllbGRzQW5kVmFsdWVzICkgKVxuXHRcdCk7XG5cdFx0Y3JlYXRlRW50aXR5R2V0dGVyc0FuZFNldHRlcnMoIHRoaXMgKTtcblx0XHRjcmVhdGVQZXJzaXN0aW5nR2V0dGVyc0FuZFNldHRlcnMoIHRoaXMgKTtcblx0XHRPYmplY3Quc2VhbCggdGhpcyApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBvbiB0aGUgZW50aXR5LlxuXHQgKlxuXHQgKiBTYXZlIHN0YXRlIGRlc2NyaWJlcyB3aGV0aGVyIHRoZSBlbnRpdHkgaXM6XG5cdCAqXG5cdCAqIC0gU0FWRV9TVEFURS5ORVc6IFRoZSBlbnRpdHkgaGFzIG5ldmVyIGJlZW4gcGVyc2lzdGVkIHRvIHN0b3JhZ2UuXG5cdCAqIC0gU0FWRV9TVEFURS5DTEVBTjogVGhlIGVudGl0eSBleGlzdHMgaW4gc3RvcmFnZSBhbmQgaGFzIG5vdCBiZWVuIG11dGF0ZWQuXG5cdCAqIC0gU0FWRV9TVEFURS5ESVJUWTogVGhlIGVudGl0eSBpcyBtdXRhdGVkIGFuZCBjaGFuZ2VzIGhhdmUgbm90IGJlZW5cblx0ICogcGVyc2lzdGVkIHRvIHN0b3JhZ2UuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1N5bWJvbH0gIFJldHVybnMgdGhlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBmb3IgdGhlIGVudGl0eS5cblx0ICovXG5cdGdldCBzYXZlU3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF07XG5cdH1cblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgY3VycmVudCBzYXZlIHN0YXRlIGlzIFNBVkVfU1RBVEUuTkVXXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIFNBVkVfU1RBVEUuTkVXIGlzIHRoZSBzYXZlIHN0YXRlLlxuXHQgKi9cblx0Z2V0IGlzTmV3KCkge1xuXHRcdHJldHVybiB0aGlzLnNhdmVTdGF0ZSA9PT0gU0FWRV9TVEFURS5ORVc7XG5cdH1cblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgY3VycmVudCBzYXZlIHN0YXRlIGlzIFNBVkVfU1RBVEUuRElSVFlcblx0ICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgU0FWRV9TVEFURS5ESVJUWSBpcyB0aGUgc2F2ZSBzdGF0ZS5cblx0ICovXG5cdGdldCBpc0RpcnR5KCkge1xuXHRcdHJldHVybiB0aGlzLnNhdmVTdGF0ZSA9PT0gU0FWRV9TVEFURS5ESVJUWTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBjdXJyZW50IHNhdmUgc3RhdGUgaXMgU0FWRV9TVEFURS5DTEVBTlxuXHQgKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBTQVZFX1NUQVRFLkNMRUFOIGlzIHRoZSBzYXZlIHN0YXRlLlxuXHQgKi9cblx0Z2V0IGlzQ2xlYW4oKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2F2ZVN0YXRlID09PSBTQVZFX1NUQVRFLkNMRUFOO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGVudGl0eSBoYXMgYW55IHBhc3N3b3JkIHByb3RlY3RlZCBmaWVsZHMuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgbWVhbnMgaXQgZG9lcywgZmFsc2UgbWVhbnMgaXQgZG9lc24ndC5cblx0ICovXG5cdGdldCBpc1Bhc3N3b3JkUHJvdGVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzLnByb3RlY3RlZEZpZWxkcy5sZW5ndGggPiAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGdpdmVuIGZpZWxkTmFtZSBpcyBhIHBhc3N3b3JkIHByb3RlY3RlZCBmaWVsZC5cblx0ICogQHJldHVybiB7ZnVuY3Rpb24oc3RyaW5nKTogYm9vbGVhbn0gIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkXG5cdCAqIHRvIGNoZWNrIGlmIHRoZSBnaXZlbiBmaWVsZCBuYW1lIGlzIGEgcHJvdGVjdGVkIGZpZWxkIGluIHRoaXMgZW50aXR5LlxuXHQgKi9cblx0Z2V0IGlzRmllbGRQYXNzd29yZFByb3RlY3RlZCgpIHtcblx0XHRyZXR1cm4gKCBmaWVsZE5hbWUgKSA9PiB0aGlzLnByb3RlY3RlZEZpZWxkcy5pbmRleE9mKCBmaWVsZE5hbWUgKSA+IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gY2xvbmUgdGhlIGN1cnJlbnQgZW50aXR5IG9iamVjdC4gIFRoaXMgcmVzdWx0cyBpbiBhbiBpbnN0YW5jZSBvZlxuXHQgKiBCYXNlRW50aXR5IHRoYXQgaXMgZXF1aXZhbGVudCBhcyB0aGlzIGN1cnJlbnQgaW5zdGFuY2UgKGV4Y2VwdCBpdCB3aWxsXG5cdCAqIGhhdmUgYSBuZXcgZ2VuZXJhdGVkIGlkKS5cblx0ICpcblx0ICogQHJldHVybiB7QmFzZUVudGl0eX0gQSBuZXcgaW5zdGFuY2Ugb2YgQmFzZUVudGl0eVxuXHQgKi9cblx0Z2V0IGNsb25lKCkge1xuXHRcdHJldHVybiAoIGtlZXBJZCA9IGZhbHNlICkgPT4ge1xuXHRcdFx0Y29uc3QgY3JlYXRlRmFjdG9yeSA9IG1lbW9pemUoICgpID0+IGNyZWF0ZUVudGl0eUZhY3RvcnkoXG5cdFx0XHRcdHRoaXMubW9kZWxOYW1lLFxuXHRcdFx0XHR7ICRzY2hlbWE6IHt9LCBwcm9wZXJ0aWVzOiB0aGlzLnNjaGVtYSB9LFxuXHRcdFx0XHR0aGlzLmZpZWxkUHJlZml4ZXNcblx0XHRcdCkgKTtcblx0XHRcdGNvbnN0IGZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5KCk7XG5cdFx0XHRjb25zdCBuZXdFbnRpdHkgPSBmYWN0b3J5LmNyZWF0ZU5ldyggdGhpcy5mb3JDbG9uZSApO1xuXHRcdFx0aWYgKCBrZWVwSWQgKSB7XG5cdFx0XHRcdG5ld0VudGl0eS5pZCA9IHRoaXMuaWQ7XG5cdFx0XHRcdHNldFNhdmVTdGF0ZSggbmV3RW50aXR5LCB0aGlzLnNhdmVTdGF0ZSwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5ld0VudGl0eTtcblx0XHR9O1xuXHR9XG5cblx0c3RhdGljIG5hbWUgPSAnQmFzZUVudGl0eSdcbn1cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZ2l2ZXMgYSBjbGFzcyB0aGUgcHJvdmlkZWQgbmFtZVxuICogKGFuZCBvcHRpb25hbGx5IGV4dGVuZHMgdGhlIHByb3ZpZGVkIG9iamVjdCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtPYmplY3R9IGV4dGVuZGVkQ2xhc3NcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uXG4gKi9cbmNvbnN0IG5hbWVDbGFzcyA9ICggbmFtZSwgZXh0ZW5kZWRDbGFzcyApID0+IHtcblx0cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXh0ZW5kZWRDbGFzcyB7XG5cdFx0c3RhdGljIGdldCBuYW1lKCkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9O1xufTtcblxuLyoqXG4gKiBBIGZhY3RvcnkgZm9yIGVudGl0eSBmYWN0b3JpZXMuXG4gKlxuICogQ2FsbGluZyB0aGlzIHJldHVybnMgYW4gb2JqZWN0IG9mIGZhY3RvcnkgZnVuY3Rpb25zIHRoYXQgaW5zdGFudGlhdGUgYW5cbiAqIGluc3RhbmNlIG9mIGEgbmFtZWQgRW50aXR5LiAgVGhlIG1vZGVsTmFtZSBpcyB1c2VkIGFzIHRoZSBuYW1lIGZvciB0aGUgbmV3XG4gKiBlbnRpdHkuXG4gKlxuICogVHdvIG1ldGhvZHMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0IHJldHVybmVkOiBgY3JlYXRlTmV3YCBhbmRcbiAqIGBmcm9tRXhpc3RpbmdgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgIFRoZSBtb2RlbCBmb3IgdGhlIGVudGl0eVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSAgICAgVGhlIHNjaGVtYSBmb3IgdGhlIG1vZGVsLiBUaGlzIGlzIHRoZSBzY2hlbWFcbiAqIHByb3ZpZGVkIGJ5IHRoZSBPUFRJT05TIGVuZHBvaW50IGZvciB0aGUgbW9kZWwuXG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZFByZWZpeGVzIEFuIGFycmF5IG9mIGZpZWxkIHByZWZpeGVzIGZvciBiYXNlIGZpZWxkcyBvblxuICogb24gdGhlIG1vZGVsIChlZy4gRXZlbnQgbW9kZWwgaGFzIGBbIEVWVCBdYCBwcmVmaXhlcyBvbiBmaWVsZHMsIERhdGV0aW1lIG1vZGVsXG4gKiBoYXMgWyBgRFRUYCwgYERUVF9FVlRgIF1cbiAqIEByZXR1cm4ge09iamVjdH0gQSBmYWN0b3J5IGZvciBpbnN0YW50aWF0aW5nIGFuIGVudGl0eSBpbnN0YW5jZS5cbiAqL1xuY29uc3QgY3JlYXRlRW50aXR5RmFjdG9yeSA9ICggbW9kZWxOYW1lLCBzY2hlbWEsIGZpZWxkUHJlZml4ZXMgPSBbXSApID0+IHtcblx0Y29uc3QgRW50aXR5ID0gbmFtZUNsYXNzKFxuXHRcdHVwcGVyRmlyc3QoIGNhbWVsQ2FzZSggbW9kZWxOYW1lICkgKSxcblx0XHRCYXNlRW50aXR5XG5cdCk7XG5cdHJldHVybiB7XG5cdFx0LyoqXG5cdFx0ICogRXhwb3NlcyBtb2RlbE5hbWUgc28gY2xpZW50IGNvZGUgY2FuIGRlcml2ZSB3aGF0IG1vZGVsIHRoaXMgZmFjdG9yeVxuXHRcdCAqIGlzIGZvciBmcm9tIGFueSBnaXZlbiBmYWN0b3J5LlxuXHRcdCAqIEB0eXBlIHN0cmluZ1xuXHRcdCAqL1xuXHRcdG1vZGVsTmFtZSxcblx0XHQvKipcblx0XHQgKiBUaGlzIGlzIHRoZSBjbGFzcyBkZWZpbml0aW9uIGZvciB0aGUgRW50aXR5LiAgVHlwaWNhbGx5IHRoaXMgaXNcblx0XHQgKiByZXRyaWV2ZWQgZm9yIHRoZSBhYmlsaXR5IHRvIGRvIGluc3RhbmNlb2YgY2hlY2tzLlxuXHRcdCAqL1xuXHRcdGNsYXNzRGVmOiBFbnRpdHksXG5cdFx0LyoqXG5cdFx0ICogVGhpcyByZXR1cm5zIGFuIGluc3RhbmNlIG9mIEVudGl0eSBmb3IgdGhlIGdpdmVuIGFyZ3VtZW50cyB3aXRoIHRoZVxuXHRcdCAqIGluZGljYXRpb24gdGhpcyBpcyBhIG5ldyBub24tcGVyc2lzdGVkIGVudGl0eS4gIFRoaXMgbWVhbnM6XG5cdFx0ICpcblx0XHQgKiAtIEFsbCBmaWVsZCB2YWx1ZXMgYXJlIHBvcHVsYXRlZCBhbmQgYW55IG5vdCBwcm92aWRlZCB3aWxsIGJlXG5cdFx0ICogICBwb3B1bGF0ZWQgd2l0aCBkZWZhdWx0IHZhbHVlcyBkZWZpbmVkIGJ5IHRoZSBzY2hlbWEuXG5cdFx0ICogLSBHZW5lcmF0ZXMgdGVtcG9yYXJ5IHVuaXF1ZSBpZHMgZm9yIHRoZSBwcmltYXJ5IGtleSBmaWVsZHMgb24gdGhlXG5cdFx0ICogICBlbnRpdHkgKHVzaW5nIGN1aWQpLlxuXHRcdCAqIC0gU2V0cyB0aGUgYGlzTmV3YCBmbGFnIHRvIHRydWUgZm9yIHRoZSBlbnRpdHkgc28gY2xpZW50IGNvZGUgaXMgYWJsZVxuXHRcdCAqICAgdG8gZGlzY292ZXIgd2hpY2ggZW50aXRpZXMgaGF2ZSBuZXZlciBiZWVuIHBlcnNpc3RlZC5cblx0XHQgKiAtIFRoaXMgZmFjdG9yeSBtZXRob2QgZXhwZWN0cyBmaWVsZHMgYW5kIHZhbHVlcyB0byBiZSBcInByZXBhcmVkXCIuXG5cdFx0ICogICBXaGF0IHRoYXQgbWVhbnMgaXMgdGhhdCBmb3IgYW55IGZpZWxkcyB0aGF0IHRoZSBzY2hlbWEgZGVzY3JpYmVkIGFzXG5cdFx0ICogICBoYXZpbmcgYSBgcmF3YCBwcm9wZXJ0eSAoaS5lLiB7IEVWVF9kZXNjOiB7IHJhdzogJ3NvbWV0aGluZycgfSB9KVxuXHRcdCAqICAgdGhlIHZhbHVlIHNob3VsZCBiZSBvZiB0aGUgY29ycmVjdCB0eXBlIGZvciB0aGF0IHJhdyBwcm9wZXJ0eSBhbmQuXG5cdFx0ICogICBUaGlzIGFsc28gbWVhbnMgaXMgdGhhdCBmb3IgYW55IGZpZWxkcyB0aGUgc2NoZW1hIGRlc2NyaWJlcyBhcyBhXG5cdFx0ICogICBkYXRlLXRpbWUgKGZvcm1hdCkgb3IgbW9uZXkgKGZvcm1hdCkgZmllbGQsIHRoZSB2YWx1ZSBpcyBleHBlY3RlZFxuXHRcdCAqICAgdG8gYmUgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb2JqZWN0LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZpZWxkc0FuZFZhbHVlc1xuXHRcdCAqIEByZXR1cm4ge0VudGl0eX0gYW4gaW5zdGFuY2Ugb2YgRW50aXR5XG5cdFx0ICovXG5cdFx0Y3JlYXRlTmV3OiAoIGZpZWxkc0FuZFZhbHVlcyApID0+IG5ldyBFbnRpdHkoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRmaWVsZHNBbmRWYWx1ZXMsXG5cdFx0XHRzY2hlbWEsXG5cdFx0XHRmaWVsZFByZWZpeGVzLFxuXHRcdFx0dHJ1ZVxuXHRcdCksXG5cdFx0LyoqXG5cdFx0ICogVGhpcyByZXR1cm5zIGFuIGluc3RhbmNlIG9mIEVudGl0eSBmb3IgdGhlIGdpdmVuIGFyZ3VtZW50cyB3aXRoIHRoZVxuXHRcdCAqIGluZGljYXRpb24gdGhpcyByZXByZXNlbnRzIHRoZSBlbnRpdHkgYXMgaXMgaW4gdGhlIGRiLiAgVGhpcyBtZWFuczpcblx0XHQgKlxuXHRcdCAqIC0gQWxsIGZpZWxkIHZhbHVlcyBhcmUgTk9UIHBvcHVsYXRlZCBpZiBtaXNzaW5nIHZhbHVlcy4gIFRoaXMgaXNcblx0XHQgKiAgIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBjb250ZXh0cyBsaWtlIHVuYXV0aG9yaXplZCB2aWV3cyB3aGVyZVxuXHRcdCAqICAgb25seSBwYXJ0aWFsIGVudGl0aWVzIGFyZSByZXR1cm5lZCBpbiBSRVNUIHJlc3BvbnNlcy5cblx0XHQgKiAtIGlzTmV3IGZsYWcgaXMgc2V0IHRvIGZhbHNlIChhbmQgbmV2ZXIgY2hhbmdlcyBmb3IgdGhpcyBlbnRpdHkpXG5cdFx0ICogLSBUaGUgaW5jb21pbmcgdmFsdWVzIGFyZSBleHBlY3RlZCB0byBiZSBpbiB0aGUgZXhhY3Qgc2hhcGUgYXNcblx0XHQgKiAgIGRlc2NyaWJlZCBieSB0aGUgc2NoZW1hIGZvciB0aGUgZW50aXR5IG1vZGVsLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZpZWxkc0FuZFZhbHVlc1xuXHRcdCAqIEByZXR1cm4ge0VudGl0eX0gYW4gaW5zdGFuY2Ugb2YgRW50aXR5XG5cdFx0ICovXG5cdFx0ZnJvbUV4aXN0aW5nOiAoIGZpZWxkc0FuZFZhbHVlcyApID0+IG5ldyBFbnRpdHkoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRmaWVsZHNBbmRWYWx1ZXMsXG5cdFx0XHRzY2hlbWEsXG5cdFx0XHRmaWVsZFByZWZpeGVzXG5cdFx0KSxcblx0fTtcbn07XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVFbnRpdHlGYWN0b3J5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzUGxhaW5PYmplY3QsIGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgdmFsdWUgaGFzIGEgXCJyYXdcIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGEgYHJhd2AgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNSYXdQcm9wZXJ0eSA9ICggdmFsdWUgKSA9PiBpc1BsYWluT2JqZWN0KCB2YWx1ZSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHZhbHVlLnJhdyApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgYSBcInByZXR0eVwiIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IGFuZCBoYXMgYSBgcHJldHR5YCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ByZXR0eVByb3BlcnR5ID0gKCB2YWx1ZSApID0+IGlzUGxhaW5PYmplY3QoIHZhbHVlICkgJiZcblx0ISBpc1VuZGVmaW5lZCggdmFsdWUucHJldHR5ICk7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGhhcyBhIFwicmVuZGVyZWRcIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGEgYHJlbmRlcmVkYCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1JlbmRlcmVkUHJvcGVydHkgPSAoIHZhbHVlICkgPT4gaXNQbGFpbk9iamVjdCggdmFsdWUgKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCB2YWx1ZS5yZW5kZXJlZCApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgYSBcImZvcm1hdFwiIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IGFuZCBoYXMgYSBgZm9ybWF0YCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0Zvcm1hdFByb3BlcnR5ID0gKCB2YWx1ZSApID0+IGlzUGxhaW5PYmplY3QoIHZhbHVlICkgJiZcblx0ISBpc1VuZGVmaW5lZCggdmFsdWUuZm9ybWF0ICk7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGhhcyBhIFwiZW51bVwiIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IGFuZCBoYXMgYW4gZW51bVxuICogcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNFbnVtUHJvcGVydHkgPSAoIHZhbHVlICkgPT4gaXNQbGFpbk9iamVjdCggdmFsdWUgKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCB2YWx1ZS5lbnVtICk7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGEgXCJ2YWx1ZSBvYmplY3RcIiBmaWVsZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGRcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgdmFsdWUgb2JqZWN0IGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNWYWx1ZU9iamVjdEZpZWxkID0gKCBmaWVsZCwgc2NoZW1hICkgPT4ge1xuXHRyZXR1cm4gaXNEYXRlVGltZUZpZWxkKCBmaWVsZCwgc2NoZW1hICkgfHwgaXNNb25leUZpZWxkKCBmaWVsZCwgc2NoZW1hICk7XG59O1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCBmaWVsZCBpcyBhIGRhdGUtdGltZSBmaWVsZCBhY2NvcmRpbmcgdG8gdGhlXG4gKiBwcm92aWRlZCBzY2hlbWEuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIGl0IGlzIGEgZGF0ZS10aW1lIGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNEYXRlVGltZUZpZWxkID0gKCBmaWVsZCwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZCBdICkgJiZcblx0aGFzRm9ybWF0UHJvcGVydHkoIHNjaGVtYVsgZmllbGQgXSApICYmXG5cdHNjaGVtYVsgZmllbGQgXS5mb3JtYXQgPT09ICdkYXRlLXRpbWUnO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCBmaWVsZCBpcyBhIFVUQyBkYXRlLXRpbWUgZmllbGQuXG4gKlxuICogSWYgc2NoZW1hIGlzIHByb3ZpZGVkLCB0aGlzIGFsc28gY29uc2lkZXJzIHdoZXRoZXIgdGhpcyBpcyBhIGRhdGUtdGltZSBmaWVsZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0ZVRpbWVGaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgW29wdGlvbmFsXVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyB0aGlzIGlzIGEgVVRDIGZpZWxkLiAgSWYgc2NoZW1hIGlzIHByb3ZpZGVkIGl0XG4gKiBtZWFucyB0aGlzIGlzIGFsc28gYSBkYXRlLXRpbWUgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1VUQ0RhdGVUaW1lRmllbGQgPSAoIGRhdGVUaW1lRmllbGROYW1lLCBzY2hlbWEgPSBudWxsICkgPT4ge1xuXHRyZXR1cm4gc2NoZW1hICE9PSBudWxsID9cblx0XHRpc0RhdGVUaW1lRmllbGQoIGRhdGVUaW1lRmllbGROYW1lLCBzY2hlbWEgKSAmJlxuXHRcdFx0ZGF0ZVRpbWVGaWVsZE5hbWUuaW5kZXhPZiggJ19nbXQnICkgPiAwIDpcblx0XHRkYXRlVGltZUZpZWxkTmFtZS5pbmRleE9mKCAnX2dtdCcgKSA+IDA7XG59O1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgcmVwcmVzZW50cyBhIHByaW1hcnkga2V5IGZpZWxkIHVzaW5nIHRoZVxuICogcHJvdmlkZWQgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIGl0IGlzIGEgcHJpbWFyeSBrZXkgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1ByaW1hcnlLZXlGaWVsZCA9ICggZmllbGROYW1lLCBzY2hlbWEgKSA9PlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkgJiZcblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcmltYXJ5X2tleSApO1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgcmVwcmVzZW50cyBhIHJlYWRvbmx5IGZpZWxkIHVzaW5nIHRoZVxuICogcHJvdmlkZWQgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIGl0IGlzIGEgcmVhZG9ubHkgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlYWRPbmx5ID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+XG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0gKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnJlYWRvbmx5ICkgJiZcblx0c2NoZW1hWyBmaWVsZE5hbWUgXS5yZWFkb25seTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgaXMgYSBcImVudGl0eVwiIGZpZWxkIHVzaW5nIHRoZSBwcm92aWRlZFxuICogc2NoZW1hLlxuICpcbiAqIEFuIFwiZW50aXR5XCIgZmllbGQgaXMgYW55IGZpZWxkIHRoYXQgc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiAtIGZpZWxkIGV4aXN0cyBpbiB0aGUgc2NoZW1hXG4gKiAtIGl0IGlzIG5vdCByZWFkb25seSBvciBpcyBhIHByaW1hcnkga2V5IGZpZWxkLlxuICogLSBpdCBpcyBub3QgYSB1dGMgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGlzIGFuIGVudGl0eSBmaWVsZFxuICovXG5leHBvcnQgY29uc3QgaXNFbnRpdHlGaWVsZCA9ICggZmllbGROYW1lLCBzY2hlbWEgKSA9PlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkgJiZcblx0KCAhIGlzUmVhZE9ubHkoIGZpZWxkTmFtZSwgc2NoZW1hICkgfHxcblx0XHRpc1ByaW1hcnlLZXlGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKVxuXHQpICYmXG5cdCEgaXNVVENEYXRlVGltZUZpZWxkKCBmaWVsZE5hbWUgKSAmJlxuXHRmaWVsZE5hbWUgIT09ICdfcHJvdGVjdGVkJztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZmllbGQgcmVwcmVzZW50cyBhIHZhbHVlIG9mIG1vbmV5IGZyb20gdGhlIHByb3ZpZGVkXG4gKiBzY2hlbWEuXG4gKlxuICogQSBmaWVsZCBpcyBhIG1vbmV5IGZpZWxkIGlmIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgc2F0aXNmaWVkOlxuICpcbiAqIC0gSXQgZXhpc3RzIGluIHRoZSBzY2hlbWFcbiAqIC0gSXQgaGFzIGEgcHJldHR5IHByb3BlcnR5XG4gKiAtIFRoZSBwcmV0dHkgcHJvcGVydHkgdmFsdWUgaGFzIGEgZm9ybWF0IHByb3BlcnR5LlxuICogLSBUaGUgZm9ybWF0IHByb3BlcnR5IGlzIGVxdWFsIHRvICdtb25leSdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGl0IGlzIGEgbW9uZXkgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBpc01vbmV5RmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcyApICYmXG5cdGhhc1ByZXR0eVByb3BlcnR5KCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMgKSAmJlxuXHRoYXNGb3JtYXRQcm9wZXJ0eSggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnByZXR0eSApICYmXG5cdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5wcmV0dHkuZm9ybWF0ID09PSAnbW9uZXknO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBmaWVsZCBpcyBhbiBlbnVtIHR5cGUgZmllbGQgYXMgZGVmaW5lZCBpbiB0aGUgcHJvdmlkZWRcbiAqIHNjaGVtYS5cbiAqXG4gKiBOb3RlOiB0aGlzIG9ubHkgZXZhbHVhdGVzIHRoZSB0b3AtbGV2ZWwgZm9yIHRoZSBmaWVsZCBzY2hlbWEuICBJZiB0aGUgZmllbGRcbiAqIGluIHRoZSBzY2hlbWEgaXMgb2YgdHlwZSAnb2JqZWN0JyBhbmQgb25lIG9mIHRoZSBvYmplY3QgcHJvcGVydGllcyBpcyBvZiB0eXBlXG4gKiAnZW51bScgdGhpcyB3aWxsIG5vdCBjb25zaWRlciBpdCBhbiBcImVudW1cIiBmaWVsZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBpZiB0aGUgZmllbGQgaXMgYW4gZW51bSB0eXBlIGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNFbnVtRmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdGhhc0VudW1Qcm9wZXJ0eSggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0uZW51bS5sZW5ndGggKSAmJlxuXHRzY2hlbWFbIGZpZWxkTmFtZSBdLmVudW0ubGVuZ3RoID4gMDtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBhcHBseUZpbHRlcnMgfSBmcm9tICdAd29yZHByZXNzL2hvb2tzJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBDb25zdGFudHMgZGVzY3JpYmluZyB0aGUgY3VycmVudCBcInNhdmUgc3RhdGVcIiBmb3IgYW4gZW50aXR5LlxuICpcbiAqIEB0eXBlIHt7Q0xFQU46IFN5bWJvbCwgTkVXOiBTeW1ib2wsIERJUlRZOiBTeW1ib2x9fVxuICovXG5leHBvcnQgY29uc3QgU0FWRV9TVEFURSA9IHtcblx0Q0xFQU46IFN5bWJvbCggJ0VudGl0eSBpcyBwZXJzaXN0ZWQuJyApLFxuXHRORVc6IFN5bWJvbCggJ0VudGl0eSBpcyBuZXcuJyApLFxuXHRESVJUWTogU3ltYm9sKCAnRXhpc3RpbmcgZW50aXR5IGhhcyBjaGFuZ2VzIGFuZCBuZWVkcyBwZXJzaXN0ZWQuJyApLFxufTtcblxuLyoqXG4gKiBWYWxpZGF0aW9uIHR5cGVzIGFyZSBmb3Igc2NoZW1hJ3MgdGhhdCBoYXZlIHZhbHVlIHZhcmlhdGlvbnMuXG4gKiBAdHlwZSB7e1JBVzogc3RyaW5nLCBSRU5ERVJFRDogc3RyaW5nLCBQUkVUVFk6IHN0cmluZ319XG4gKi9cbmV4cG9ydCBjb25zdCBWQUxJREFURV9UWVBFID0ge1xuXHRSQVc6ICdyYXcnLFxuXHRSRU5ERVJFRDogJ3JlbmRlcmVkJyxcblx0UFJFVFRZOiAncHJldHR5Jyxcbn07XG5cbi8qKlxuICogUHJpdmF0ZSBwcm9wZXJ0aWVzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgQmFzZSBFbnRpdHkgQ2xhc3NcbiAqIEB0eXBlIHt7c2F2ZVN0YXRlOiBib29sZWFufX1cbiAqL1xuZXhwb3J0IGNvbnN0IFBSSVZBVEVfUFJPUEVSVElFUyA9IHtcblx0U0FWRV9TVEFURTogU3ltYm9sKCAnYmFzZUVudGl0eVByaXZhdGVQcm9wZXJ0aWVzU2F2ZVN0YXRlJyApLFxuXHRWQUxJREFURV9UWVBFUzogU3ltYm9sKCAnYmFzZUVudGl0eVByaXZhdGVQcm9wZXJ0aWVzVmFsaWRhdGVUeXBlcycgKSxcbn07XG5cbi8qKlxuICogSGFyZGNvZGVkIGxpc3Qgb2YgbW9kZWwgcHJlZml4ZXMgZm9yIGZpZWxkcyBvbiBtb2RlbHMuXG5cbiAqIEEgbW9kZWwgcHJlZml4IGlzIHNvbWV0aGluZyB0aGF0IFwibmFtZXNwYWNlc1wiIGEgZmllbGQgb24gYSBtb2RlbC4gIEZvclxuICogZXhhbXBsZSwgaWYgdGhlIGZpZWxkIGlzIFwiRVZUX0lEXCIsIHRoZW4gdGhlIHByZWZpeCBpcyBcIkVWVFwiOyBpZiB0aGUgZmllbGQgaXNcbiAqIFwiRFRUX0VWVF9zdGFydFwiLCB0aGVuIHRoZSBwcmVmaXhlcyBhcmUgXCJEVFRcIiwgYW5kIFwiRFRUX0VWVFwiLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgZmlsdGVyZWQgb2JqZWN0IGluZGV4ZWQgYnkgbW9kZWwgbmFtZSBhbmQgdGhlIHZhbHVlcyBhcmVcbiAqIGFuIGFycmF5IG9mIG1vZGVsIHByZWZpeGVzIGZvciB0aGF0IG1vZGVsLlxuICovXG5leHBvcnQgY29uc3QgTU9ERUxfUFJFRklYRVMgPSAoIG1vZGVsTmFtZSApID0+IHtcblx0Y29uc3QgcHJlZml4TWFwID0gYXBwbHlGaWx0ZXJzKFxuXHRcdCdGSEVFX19FTlRJVFlfRkFDVE9SWV9fQ09OU1RBTlRTX19NT0RFTF9QUkVGSVhFUycsXG5cdFx0e1xuXHRcdFx0YW5zd2VyOiBbICdBTlMnIF0sXG5cdFx0XHRhdHRlbmRlZTogWyAnQVRUJyBdLFxuXHRcdFx0Y2hhbmdlX2xvZzogWyAnTE9HJyBdLFxuXHRcdFx0Y2hlY2tpbjogWyAnQ0hLJyBdLFxuXHRcdFx0Y291bnRyeTogWyAnQ05UJyBdLFxuXHRcdFx0Y3VycmVuY3k6IFsgJ0NVUicgXSxcblx0XHRcdGN1cnJlbmN5X3BheW1lbnRfbWV0aG9kOiBbICdDUE0nIF0sXG5cdFx0XHRkYXRldGltZTogWyAnRFRUJywgJ0RUVF9FVlQnIF0sXG5cdFx0XHRkYXRldGltZV90aWNrZXQ6IFsgJ0RUSycgXSxcblx0XHRcdGV2ZW50OiBbICdFVlQnIF0sXG5cdFx0XHRldmVudF9tZXNzYWdlX3RlbXBsYXRlOiBbICdFTVQnIF0sXG5cdFx0XHRldmVudF9xdWVzdGlvbl9ncm91cDogWyAnRVFHJyBdLFxuXHRcdFx0ZXZlbnRfdmVudWU6IFsgJ0VWVicgXSxcblx0XHRcdGV4dHJhX2pvaW46IFsgJ0VYSicgXSxcblx0XHRcdGV4dHJhX21ldGE6IFsgJ0VYTScgXSxcblx0XHRcdGxpbmVfaXRlbTogWyAnTElOJyBdLFxuXHRcdFx0bWVzc2FnZTogWyAnTVNHJyBdLFxuXHRcdFx0bWVzc2FnZV90ZW1wbGF0ZTogWyAnTVRQJyBdLFxuXHRcdFx0bWVzc2FnZV90ZW1wbGF0ZV9ncm91cDogWyAnR1JQJywgJ01UUCcgXSxcblx0XHRcdHBheW1lbnQ6IFsgJ1BBWScgXSxcblx0XHRcdHBheW1lbnRfbWV0aG9kOiBbICdQTUQnIF0sXG5cdFx0XHRwb3N0X21ldGE6IFsgJ21ldGEnIF0sXG5cdFx0XHRwcmljZTogWyAnUFJDJyBdLFxuXHRcdFx0cHJpY2VfdHlwZTogWyAnUFJUJyBdLFxuXHRcdFx0cXVlc3Rpb246IFsgJ1FTVCcgXSxcblx0XHRcdHF1ZXN0aW9uX2dyb3VwOiBbICdRU0cnIF0sXG5cdFx0XHRxdWVzdGlvbl9ncm91cF9xdWVzdGlvbjogWyAnUUdRJyBdLFxuXHRcdFx0cXVlc3Rpb25fb3B0aW9uOiBbICdRU08nIF0sXG5cdFx0XHRyZWN1cnJlbmNlOiBbICdSQ1InIF0sXG5cdFx0XHRyZWdpc3RyYXRpb246IFsgJ1JFRycgXSxcblx0XHRcdHJlZ2lzdHJhdGlvbl9wYXltZW50OiBbICdSUFknIF0sXG5cdFx0XHRzdGF0ZTogWyAnU1RBJyBdLFxuXHRcdFx0c3RhdHVzOiBbICdTVFMnIF0sXG5cdFx0XHR0ZXJtOiBbICd0ZXJtJyBdLFxuXHRcdFx0dGVybV9yZWxhdGlvbnNoaXA6IFtdLFxuXHRcdFx0dGVybV90YXhvbm9teTogWyAndGVybV90YXhvbm9teScgXSxcblx0XHRcdHRpY2tldDogWyAnVEtUJyBdLFxuXHRcdFx0dGlja2V0X3ByaWNlOiBbICdUS1AnIF0sXG5cdFx0XHR0aWNrZXRfdGVtcGxhdGU6IFsgJ1RUTScgXSxcblx0XHRcdHRyYW5zYWN0aW9uOiBbICdUWE4nIF0sXG5cdFx0XHR2ZW51ZTogWyAnVk5VJyBdLFxuXHRcdFx0d3BfdXNlcjogWyAndXNlcicgXSxcblx0XHR9ICk7XG5cdHJldHVybiAhIGlzVW5kZWZpbmVkKCBwcmVmaXhNYXBbIG1vZGVsTmFtZSBdICkgP1xuXHRcdHByZWZpeE1hcFsgbW9kZWxOYW1lIF0gOlxuXHRcdFtdO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRjYW1lbENhc2UsXG5cdHVwcGVyRmlyc3QsXG5cdGZvckVhY2gsXG5cdGlzVW5kZWZpbmVkLFxuXHRpc0FycmF5LFxuXHRrZXlzLFxuXHRzb3J0QnksXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgY3VpZCBmcm9tICdjdWlkJztcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0YXNzZXJ0VmFsaWRGaWVsZEFuZFZhbHVlQWdhaW5zdFNjaGVtYSxcblx0YXNzZXJ0VmFsaWRWYWx1ZUZvclByZXBhcmVkRmllbGQsXG59IGZyb20gJy4vYXNzZXJ0aW9ucyc7XG5pbXBvcnQge1xuXHRkZXJpdmVSZW5kZXJlZFZhbHVlLFxuXHRkZXJpdmVQcmVwYXJlZFZhbHVlRm9yRmllbGQsXG5cdGdldFJlbGF0aW9uTmFtZUZyb21MaW5rLFxuXHRnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yQ2xvbmluZyxcblx0Z2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmcsXG5cdGdldFByaW1hcnlLZXlGaWVsZHNGcm9tU2NoZW1hLFxuXHRnZXRFbnRpdHlGaWVsZHNGcm9tU2NoZW1hLFxuXHRnZXREZWZhdWx0VmFsdWVGb3JGaWVsZCxcblx0ZGVyaXZlVmFsaWRhdGVUeXBlRm9yRmllbGQsXG59IGZyb20gJy4vZXh0cmFjdG9ycyc7XG5pbXBvcnQge1xuXHRpc0VudGl0eUZpZWxkLFxuXHRpc1ByaW1hcnlLZXlGaWVsZCxcbn0gZnJvbSAnLi9ib29sZWFucyc7XG5pbXBvcnQgeyBQUklWQVRFX1BST1BFUlRJRVMsIFNBVkVfU1RBVEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKihcbiAqIEEgZ2VuZXJpYyBnZXR0ZXIgY3JlYXRvciBmb3IgYSBwcm92aWRlZCBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWUgIFRoZSBuYW1lIG9mIHRoZSBhY2Nlc3Nvci5cbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgdXNlZCB0byBwYXNzIHRocm91Z2ggYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGVcbiAqIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlR2V0dGVyID0gKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlLCBvcHRzID0ge30gKSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggaW5zdGFuY2UsIGZpZWxkTmFtZSwge1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiBmaWVsZFZhbHVlO1xuXHRcdH0sXG5cdFx0Li4ub3B0cyxcblx0fSApO1xufTtcblxuLyoqXG4gKiBUaGlzIGNyZWF0ZXMgYSBnZXR0ZXIgdGhhdCBjYWxscyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgd2hlbiBpbnZva2VkLlxuICpcbiAqIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgYGluc3RhbmNlYCBhcmd1bWVudCBwYXNzZWQgdGhyb3VnaFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZVxuICogQHBhcmFtIHtmdW5jdGlvbihPYmplY3QpfSBjYWxsQmFja1xuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUNhbGxiYWNrR2V0dGVyID0gKFxuXHRpbnN0YW5jZSxcblx0cHJvcGVydHlOYW1lLFxuXHRjYWxsQmFjayxcblx0b3B0cyA9IHt9XG4pID0+IHtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgcHJvcGVydHlOYW1lLCB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIGNhbGxCYWNrKCBpbnN0YW5jZSApO1xuXHRcdH0sXG5cdFx0Li4ub3B0cyxcblx0fSApO1xufTtcblxuLyoqXG4gKiBBIGdlbmVyaWMgZ2V0dGVyIGFuZCBzZXR0ZXIgY3JlYXRvciBmb3IgYSBwcm92aWRlZCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSAgaW5pdGlhbEZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsLCBwYXNzIHRocm91Z2ggb3B0aW9ucyB1c2VkIGJ5XG4gKiBPYmplY3QuZGVmaW5lUHJvcGVydHlcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUdldHRlckFuZFNldHRlciA9IChcblx0aW5zdGFuY2UsXG5cdGZpZWxkTmFtZSxcblx0aW5pdGlhbEZpZWxkVmFsdWUsXG5cdG9wdHMgPSB7fSxcbikgPT4ge1xuXHRsZXQgcHJvcGVydHlWYWx1ZSA9IGluaXRpYWxGaWVsZFZhbHVlO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGluc3RhbmNlLCBmaWVsZE5hbWUsIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlWYWx1ZTtcblx0XHR9LFxuXHRcdHNldCggcmVjZWl2ZWRWYWx1ZSApIHtcblx0XHRcdGNvbnN0IGlzUHJpbWFyeUZpZWxkID0gaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2Uuc2NoZW1hICk7XG5cdFx0XHRpZiAoICEgaW5zdGFuY2UuaXNOZXcgJiYgaXNQcmltYXJ5RmllbGQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkKFxuXHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdHJlY2VpdmVkVmFsdWUsXG5cdFx0XHRcdGluc3RhbmNlXG5cdFx0XHQpO1xuXHRcdFx0aWYgKCAhIGlzUHJpbWFyeUZpZWxkICkge1xuXHRcdFx0XHRzZXRTYXZlU3RhdGUoIGluc3RhbmNlLCBTQVZFX1NUQVRFLkRJUlRZICk7XG5cdFx0XHRcdHNldEZpZWxkVG9QZXJzaXN0KCBpbnN0YW5jZSwgZmllbGROYW1lICk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eVZhbHVlID0gcmVjZWl2ZWRWYWx1ZTtcblx0XHR9LFxuXHRcdC4uLm9wdHMsXG5cdH0gKTtcbn07XG5cbi8qKlxuICogQSBnZXR0ZXIgYW5kIHNldHRlciBjcmVhdG9yIGZvciBhbiBmaWVsZCBhbGlhcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5hbEZpZWxkTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGFsaWFzRmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQWxpYXNHZXR0ZXJBbmRTZXR0ZXIgPSAoXG5cdGluc3RhbmNlLFxuXHRvcmlnaW5hbEZpZWxkTmFtZSxcblx0YWxpYXNGaWVsZE5hbWUsXG5cdG9wdHMgPSB7fSxcbikgPT4ge1xuXHRpZiAoIG9yaWdpbmFsRmllbGROYW1lICE9PSBhbGlhc0ZpZWxkTmFtZSApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGluc3RhbmNlLCBhbGlhc0ZpZWxkTmFtZSwge1xuXHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRyZXR1cm4gaW5zdGFuY2VbIG9yaWdpbmFsRmllbGROYW1lIF07XG5cdFx0XHR9LFxuXHRcdFx0c2V0KCByZWNlaXZlZFZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm4gaW5zdGFuY2VbIG9yaWdpbmFsRmllbGROYW1lIF0gPSByZWNlaXZlZFZhbHVlO1xuXHRcdFx0fSxcblx0XHRcdC4uLm9wdHMsXG5cdFx0fSApO1xuXHR9XG59O1xuXG4vKipcbiAqIEEgZ2V0dGVyIGNyZWF0b3IgZm9yIGEgZmllbGQgYWxpYXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxGaWVsZE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbGlhc0ZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFsaWFzR2V0dGVyID0gKFxuXHRpbnN0YW5jZSxcblx0b3JpZ2luYWxGaWVsZE5hbWUsXG5cdGFsaWFzRmllbGROYW1lLFxuXHRvcHRzID0ge30sXG4pID0+IHtcblx0aWYgKCBvcmlnaW5hbEZpZWxkTmFtZSAhPT0gYWxpYXNGaWVsZE5hbWUgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgYWxpYXNGaWVsZE5hbWUsIHtcblx0XHRcdGdldCgpIHtcblx0XHRcdFx0cmV0dXJuIGluc3RhbmNlWyBvcmlnaW5hbEZpZWxkTmFtZSBdO1xuXHRcdFx0fSxcblx0XHRcdC4uLm9wdHMsXG5cdFx0fSApO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmbHVlbnQgc2V0dGVyIG9uIHRoZSBwcm92aWRlZCBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIGZpZWxkIG5hbWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAgT3B0aW9ucyBmb3IgT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVGbHVlbnRTZXR0ZXIgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUsIG9wdHMgPSB7fSApID0+IHtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgJ3NldCcgKyB1cHBlckZpcnN0KCBmaWVsZE5hbWUgKSwge1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiAoIHJlY2VpdmVkVmFsdWUgKSA9PiB7XG5cdFx0XHRcdGluc3RhbmNlWyBmaWVsZE5hbWUgXSA9IHJlY2VpdmVkVmFsdWU7XG5cdFx0XHRcdHJldHVybiBpbnN0YW5jZTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHQuLi5vcHRzLFxuXHR9ICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgaW5pdGlhbCBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGZvciBlbnRpdGllcyBvbiB0aGUgcHJvdmlkZWQgZW50aXR5XG4gKiBpbnN0YW5jZSB1c2luZyB0aGUgZ2l2ZW4gZGF0YS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICoga2V5cyBvbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUVudGl0eUdldHRlcnNBbmRTZXR0ZXJzID0gKCBpbnN0YW5jZSApID0+IHtcblx0Y29uc3QgcHJpbWFyeUtleXMgPSBbXTtcblx0Zm9yRWFjaChcblx0XHRpbnN0YW5jZS5vcmlnaW5hbEZpZWxkc0FuZFZhbHVlcyxcblx0XHQoIGZpZWxkVmFsdWUsIGZpZWxkTmFtZSApID0+IHtcblx0XHRcdGNvbnN0IGlzUHJpbWFyeUtleSA9IGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGluc3RhbmNlLnNjaGVtYSApO1xuXHRcdFx0c2V0VmFsaWRhdGVUeXBlRm9yRmllbGQoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUgKTtcblx0XHRcdGlmICggaXNFbnRpdHlGaWVsZCggZmllbGROYW1lLCBpbnN0YW5jZS5zY2hlbWEgKSApIHtcblx0XHRcdFx0aWYgKCBpbnN0YW5jZS5pc05ldyApIHtcblx0XHRcdFx0XHRhc3NlcnRWYWxpZFZhbHVlRm9yUHJlcGFyZWRGaWVsZChcblx0XHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0XHRpbnN0YW5jZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YXNzZXJ0VmFsaWRGaWVsZEFuZFZhbHVlQWdhaW5zdFNjaGVtYShcblx0XHRcdFx0XHRcdGluc3RhbmNlLm1vZGVsTmFtZSxcblx0XHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0XHRpbnN0YW5jZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2V0SW5pdGlhbEVudGl0eUZpZWxkc0FuZFZhbHVlcyhcblx0XHRcdFx0XHRpbnN0YW5jZSxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdFx0XHRpc1ByaW1hcnlLZXlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGlmICggZmllbGROYW1lID09PSAnX2NhbGN1bGF0ZWRfZmllbGRzJyApIHtcblx0XHRcdFx0c2V0Q2FsY3VsYXRlZEZpZWxkQW5kVmFsdWVzKCBpbnN0YW5jZSwgZmllbGRWYWx1ZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBmaWVsZE5hbWUgPT09ICdfcHJvdGVjdGVkJyApIHtcblx0XHRcdFx0cG9wdWxhdGVQcm90ZWN0ZWRGaWVsZHNQcm9wZXJ0eSggaW5zdGFuY2UsIGZpZWxkVmFsdWUgKTtcblx0XHRcdH1cblx0XHRcdGlmICggZmllbGROYW1lID09PSAnbGluaycgKSB7XG5cdFx0XHRcdGNyZWF0ZUdldHRlciggaW5zdGFuY2UsICdsaW5rJywgZmllbGRWYWx1ZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBmaWVsZE5hbWUgPT09ICdfbGlua3MnICkge1xuXHRcdFx0XHRzZXRSZXNvdXJjZXMoIGluc3RhbmNlLCBmaWVsZFZhbHVlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICEgaW5zdGFuY2UuaXNOZXcgJiYgaXNQcmltYXJ5S2V5ICkge1xuXHRcdFx0XHRwcmltYXJ5S2V5cy5wdXNoKCBmaWVsZE5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG5cdGlmICggISBpbnN0YW5jZS5pc05ldyAmJiBwcmltYXJ5S2V5cy5sZW5ndGggKSB7XG5cdFx0Y3JlYXRlUHJpbWFyeUtleUZpZWxkR2V0dGVycyggaW5zdGFuY2UsIHByaW1hcnlLZXlzICk7XG5cdH1cblxuXHRwb3B1bGF0ZVByaW1hcnlLZXlzKCBpbnN0YW5jZSApO1xuXHRwb3B1bGF0ZU1pc3NpbmdGaWVsZHMoIGluc3RhbmNlICk7XG59O1xuXG4vKipcbiAqIFBvcHVsYXRlcyB0aGUgYHByb3RlY3RlZEZpZWxkc2AgcHJvcGVydHkgb24gdGhlIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtBcnJheX0gcHJvdGVjdGVkRmllbGRzXG4gKi9cbmNvbnN0IHBvcHVsYXRlUHJvdGVjdGVkRmllbGRzUHJvcGVydHkgPSAoIGluc3RhbmNlLCBwcm90ZWN0ZWRGaWVsZHMgKSA9PiB7XG5cdC8vIGdldCBhbnkgY2FsY3VsYXRlZCBwcm90ZWN0ZWQgZmllbGRzLlxuXHRjb25zdCBjYWxjdWxhdGVkRmllbGRzID0gaW5zdGFuY2Vcblx0XHQub3JpZ2luYWxGaWVsZHNBbmRWYWx1ZXNcblx0XHQuX2NhbGN1bGF0ZWRfZmllbGRzIHx8IHt9O1xuXHRpZiAoXG5cdFx0Y2FsY3VsYXRlZEZpZWxkcy5fcHJvdGVjdGVkICYmXG5cdFx0aXNBcnJheSggY2FsY3VsYXRlZEZpZWxkcy5fcHJvdGVjdGVkIClcblx0KSB7XG5cdFx0cHJvdGVjdGVkRmllbGRzID0gW1xuXHRcdFx0Li4ucHJvdGVjdGVkRmllbGRzLFxuXHRcdFx0Li4uY2FsY3VsYXRlZEZpZWxkcy5fcHJvdGVjdGVkLFxuXHRcdF07XG5cdH1cblx0Y3JlYXRlR2V0dGVyKCBpbnN0YW5jZSwgJ3Byb3RlY3RlZEZpZWxkcycsIHByb3RlY3RlZEZpZWxkcyApO1xufTtcblxuLyoqXG4gKiBUaGlzIHBvcHVsYXRlcyBwcmltYXJ5IGtleSBmaWVsZHMuXG4gKiBOb3RlIHRoYXQgaXQgYWxzbyBvdmVycmlkZXMgYW55IHByaW1hcnkga2V5IHZhbHVlcy9wcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiBhbHJlYWR5IHNldCBpbiB0aGUgZW50aXR5IHNvIGlzIG9ubHkgcHJvY2Vzc2VkIHdoZW4gdGhlIGluc3RhbmNlIGlzIG5ldy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqL1xuY29uc3QgcG9wdWxhdGVQcmltYXJ5S2V5cyA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdGlmICggISBpbnN0YW5jZS5pc05ldyApIHtcblx0XHRyZXR1cm47XG5cdH1cblx0Y29uc3QgcHJpbWFyeUtleXMgPSBnZXRQcmltYXJ5S2V5RmllbGRzRnJvbVNjaGVtYSggaW5zdGFuY2UgKTtcblx0Zm9yRWFjaCggcHJpbWFyeUtleXMsIChcblx0XHRzY2hlbWFQcm9wZXJ0aWVzLFxuXHRcdHNjaGVtYUZpZWxkXG5cdCkgPT4ge1xuXHRcdC8vIGFsd2F5cyBkZWxldGUgYW5kIG92ZXJyaWRlIHdoYXQgaXMgZXhpc3RpbmcuXG5cdFx0aWYgKCBpbnN0YW5jZVsgc2NoZW1hRmllbGQgXSApIHtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZVsgc2NoZW1hRmllbGQgXTtcblx0XHR9XG5cdFx0Y3JlYXRlR2V0dGVyQW5kU2V0dGVyKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRzY2hlbWFGaWVsZCxcblx0XHRcdGN1aWQoKSxcblx0XHRcdHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH1cblx0XHQpO1xuXHRcdGNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyRm9yRmllbGQoIGluc3RhbmNlLCBzY2hlbWFGaWVsZCApO1xuXHR9ICk7XG5cdGNyZWF0ZVByaW1hcnlLZXlGaWVsZEdldHRlcnMoXG5cdFx0aW5zdGFuY2UsXG5cdFx0a2V5cyggcHJpbWFyeUtleXMgKVxuXHQpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSB2YWxpZGF0ZSB0eXBlIGZvciBhIGZpZWxkIHByb3BlcnR5LlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqL1xuY29uc3Qgc2V0VmFsaWRhdGVUeXBlRm9yRmllbGQgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUgKSA9PiB7XG5cdGluc3RhbmNlWyBQUklWQVRFX1BST1BFUlRJRVMuVkFMSURBVEVfVFlQRVMgXVsgZmllbGROYW1lIF0gPVxuXHRcdGRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIGluc3RhbmNlLnNjaGVtYSApO1xufTtcblxuLyoqXG4gKiAgUG9wdWxhdGVzIG1pc3NpbmcgZmllbGRzIGFuZCB2YWx1ZXMgdXNpbmcgZGVmYXVsdHMgcHJvdmlkZWQgYnkgc2NoZW1hLiAgSWZcbiAqICBzY2hlbWEgZG9lc24ndCBwcm92aWRlIGEgZGVmYXVsdCB0aGVuIHRoaXMgd2lsbCBwb3B1bGF0ZSB0aGUgZmllbGQgd2l0aCBhXG4gKiAgZGVmYXVsdCB2YWx1ZSB0aGF0IG1hdGNoZXMgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKi9cbmNvbnN0IHBvcHVsYXRlTWlzc2luZ0ZpZWxkcyA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdGlmICggdHlwZW9mIGluc3RhbmNlLnByb3RlY3RlZEZpZWxkcyA9PT0gJ3VuZGVmaW5lZCcgKSB7XG5cdFx0cG9wdWxhdGVQcm90ZWN0ZWRGaWVsZHNQcm9wZXJ0eSggaW5zdGFuY2UsIFtdICk7XG5cdH1cblx0aWYgKCAhIGluc3RhbmNlLmlzTmV3ICkge1xuXHRcdHJldHVybjtcblx0fVxuXHRmb3JFYWNoKFxuXHRcdGdldEVudGl0eUZpZWxkc0Zyb21TY2hlbWEoIGluc3RhbmNlICksXG5cdFx0KCBzY2hlbWFQcm9wZXJ0aWVzLCBmaWVsZE5hbWUgKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHR5cGVvZiBpbnN0YW5jZVsgZmllbGROYW1lIF0gPT09ICd1bmRlZmluZWQnICYmXG5cdFx0XHRcdCEgaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2Uuc2NoZW1hIClcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRJbml0aWFsRW50aXR5RmllbGRzQW5kVmFsdWVzKFxuXHRcdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IG9mIGVudGl0eSBmaWVsZHMgYW5kIHZhbHVlcyBmcm9tIHRoaXMgZW50aXR5IGluc3RhbmNlXG4gKiBmb3IgdXNlIGluIGNsb25pbmcgdGhlIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBQbGFpbiBvYmplY3Qgb2YgYWxsIGZpZWxkOnZhbHVlIHBhaXJzLlxuICovXG5jb25zdCBmb3JDbG9uZSA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdHJldHVybiBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yQ2xvbmluZyggaW5zdGFuY2UgKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiB0aGUgZW50aXR5IGZpZWxkcyBhbmQgdmFsdWVzIGZyb20gdGhpcyBlbnRpdHlcbiAqIGluc3RhbmNlIHByZXBhcmVkIGZvciB1c2UgaW4gYW4gdXBkYXRlIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IFBsYWluIG9iamVjdCBvZiBmaWVsZDp2YWx1ZSBwYWlycy5cbiAqL1xuY29uc3QgZm9yVXBkYXRlID0gKCBpbnN0YW5jZSApID0+IHtcblx0cmV0dXJuIGdldEJhc2VGaWVsZHNBbmRWYWx1ZXNGb3JQZXJzaXN0aW5nKCBpbnN0YW5jZSApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IG9mIHRoZSBlbnRpdHkgZmllbGRzIGFuZCB2YWx1ZXMgZnJvbSB0aGlzIGVudGl0eVxuICogaW5zdGFuY2UgcHJlcGFyZWQgZm9yIHVzZSBpbiBhbiBpbnNlcnQgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gUGxhaW4gb2JqZWN0IG9mIGZpZWxkOnZhbHVlIHBhaXJzLlxuICovXG5jb25zdCBmb3JJbnNlcnQgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRjb25zdCBlbnRpdHlWYWx1ZXMgPSBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yUGVyc2lzdGluZyhcblx0XHRpbnN0YW5jZSxcblx0XHR0cnVlXG5cdCk7XG5cdGluc3RhbmNlLnByaW1hcnlLZXlzLmZvckVhY2goICggcHJpbWFyeUtleSApID0+IHtcblx0XHRlbnRpdHlWYWx1ZXNbIHByaW1hcnlLZXkgXSA9IGluc3RhbmNlWyBwcmltYXJ5S2V5IF07XG5cdH0gKTtcblx0cmV0dXJuIGVudGl0eVZhbHVlcztcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiB0aGUgZW50aXR5IGZpZWxkcyBhbmQgdmFsdWVzIGZyb20gdGhpcyBlbnRpdHlcbiAqIGluc3RhbmNlIHByZXBhcmVkIGZvciB1c2UgaW4gZWl0aGVyIGFuIGluc2VydCBvciB1cGRhdGUgcmVxdWVzdC4gIFRoZSB0eXBlXG4gKiBpcyBhdXRvbWF0aWNhbGx5IGRlcml2ZWQgZnJvbSB0aGUgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgZW50aXR5IGlzIFwibmV3XCIgb3JcbiAqIG5vdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gUGxhaW4gb2JqZWN0IG9mIGZpZWxkOnZhbHVlIHBhaXJzLlxuICovXG5jb25zdCBmb3JQZXJzaXN0ID0gKCBpbnN0YW5jZSApID0+IHtcblx0aWYgKCBpbnN0YW5jZS5pc05ldyApIHtcblx0XHRyZXR1cm4gZm9ySW5zZXJ0KCBpbnN0YW5jZSApO1xuXHR9XG5cdHJldHVybiBmb3JVcGRhdGUoIGluc3RhbmNlICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgZ2V0dGVycyBmb3IgcmV0cmlldmluZyB0aGUgZmllbGRzIGFuZCB2YWx1ZXMgb2YgdGhlIGVudGl0eSBpbnN0YW5jZVxuICogZm9yIGluc2VydCBvciB1cGRhdGUgcmVxdWVzdHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVQZXJzaXN0aW5nR2V0dGVyc0FuZFNldHRlcnMgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRjcmVhdGVDYWxsYmFja0dldHRlciggaW5zdGFuY2UsICdmb3JVcGRhdGUnLCBmb3JVcGRhdGUgKTtcblx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoIGluc3RhbmNlLCAnZm9ySW5zZXJ0JywgZm9ySW5zZXJ0ICk7XG5cdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKCBpbnN0YW5jZSwgJ2ZvclBlcnNpc3QnLCBmb3JQZXJzaXN0ICk7XG5cdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKCBpbnN0YW5jZSwgJ2ZvckNsb25lJywgZm9yQ2xvbmUgKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIGVudGl0eSBmaWVsZCBhY2Nlc3NvcnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQcmltYXJ5S2V5XG4gKi9cbmNvbnN0IHNldEluaXRpYWxFbnRpdHlGaWVsZHNBbmRWYWx1ZXMgPSAoXG5cdGluc3RhbmNlLFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGlzUHJpbWFyeUtleSA9IGZhbHNlLFxuKSA9PiB7XG5cdGlmICggaXNVbmRlZmluZWQoIGZpZWxkVmFsdWUgKSApIHtcblx0XHRmaWVsZFZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlRm9yRmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2Uuc2NoZW1hICk7XG5cdFx0c2V0VmFsaWRhdGVUeXBlRm9yRmllbGQoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUgKTtcblx0fVxuXHRjcmVhdGVSYXdFbnRpdHlHZXR0ZXJzU2V0dGVycyhcblx0XHRpbnN0YW5jZSxcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZGVyaXZlUHJlcGFyZWRWYWx1ZUZvckZpZWxkKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIGluc3RhbmNlICksXG5cdFx0aXNQcmltYXJ5S2V5XG5cdCk7XG5cdGlmICggISBpc1ByaW1hcnlLZXkgKSB7XG5cdFx0Y3JlYXRlUmVuZGVyZWRHZXR0ZXJzKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRkZXJpdmVSZW5kZXJlZFZhbHVlKCBmaWVsZFZhbHVlIClcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgcmF3IGVudGl0eSBnZXR0ZXJzIGFuZCBzZXR0ZXJzLiAgVGhlc2UgYXJlIHRoZSBwcm9wZXJ0aWVzIG9mIGFuXG4gKiBlbnRpdHkgdGhhdCBoYXZlIHRoZSB2YWx1ZXMgdXNlZCBmb3Igbm90IG9ubHkgZ2V0dGluZyBidXQgYWxzbyBzZXR0aW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJpbWFyeUtleSBzZXQgdG8gdHJ1ZSBpZiBmaWVsZCBpcyB0aGUgbW9kZWwncyBwcmltYXJ5IGtleVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUmF3RW50aXR5R2V0dGVyc1NldHRlcnMgPSAoXG5cdGluc3RhbmNlLFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGlzUHJpbWFyeUtleSA9IGZhbHNlLFxuKSA9PiB7XG5cdGNvbnN0IG9wdHMgPSB7IGVudW1lcmFibGU6IHRydWUgfTtcblx0Ly8gcHJpbWFyeSBrZXkgaXMgaW1tdXRhYmxlXG5cdGlmICggaXNQcmltYXJ5S2V5ICkge1xuXHRcdGNyZWF0ZUdldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdG9wdHNcblx0XHQpO1xuXHRcdGNyZWF0ZUFsaWFzR2V0dGVyRm9yRmllbGQoIGluc3RhbmNlLCBmaWVsZE5hbWUgKTtcblx0fSBlbHNlIHtcblx0XHRjcmVhdGVHZXR0ZXJBbmRTZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRvcHRzXG5cdFx0KTtcblx0XHRjcmVhdGVGbHVlbnRTZXR0ZXIoIGluc3RhbmNlLCBmaWVsZE5hbWUgKTtcblx0XHRjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlckZvckZpZWxkKCBpbnN0YW5jZSwgZmllbGROYW1lICk7XG5cdH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBcImFsaWFzXCIgZ2V0dGVyIGZvciB0aGUgZ2l2ZW4gZmllbGQgbmFtZSBvbiB0aGUgZW50aXR5IGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBbGlhc0dldHRlckZvckZpZWxkID0gKCBpbnN0YW5jZSwgZmllbGROYW1lICkgPT4ge1xuXHRjcmVhdGVBbGlhc2VzRm9yTWV0aG9kKCBpbnN0YW5jZSwgZmllbGROYW1lLCBjcmVhdGVBbGlhc0dldHRlciApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIFwiYWxpYXNcIiBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGZvciB0aGUgZ2l2ZW4gZmllbGQgb24gdGhlIGVudGl0eVxuICogaW5zdGFuY2UuXG4gKlxuICogRXhhbXBsZTogRGF0ZXRpbWUgZW50aXRpZXMgaGF2ZSBhIGBEVFRfRVZUX3N0YXJ0YCBmaWVsZC4gIE9uIHRoZSBlbnRpdHlcbiAqIGluc3RhbmNlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgdmFsdWUgb2YgdGhhdCBmaWVsZCB2aWE6XG4gKiAtIGRhdGV0aW1lLkRUVF9FVlRfc3RhcnRcbiAqIC0gZGF0ZXRpbWUuZHR0RXZ0U3RhcnRcbiAqIC0gZGF0ZXRpbWUuZXZ0U3RhcnRcbiAqIC0gZGF0ZXRpbWUuc3RhcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyRm9yRmllbGQgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUgKSA9PiB7XG5cdGNyZWF0ZUFsaWFzZXNGb3JNZXRob2QoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgQWxpYXNlcyB1c2luZyB0aGUgcHJvdmlkZWQgbWV0aG9kLlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2RcbiAqL1xuY29uc3QgY3JlYXRlQWxpYXNlc0Zvck1ldGhvZCA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSwgbWV0aG9kICkgPT4ge1xuXHQvLyBjYW1lbENhc2UgZ2V0dGVyIChvciBzZXR0ZXIpIGZvciBmdWxsIGZpZWxkIG5hbWUgKGVnLiBFVlRfZGVzYyA9PiBldnREZXNjKVxuXHRtZXRob2QoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGNhbWVsQ2FzZSggZmllbGROYW1lICkgKTtcblx0Ly8gc3RyaXAgZmllbGQgcHJlZml4ZXMgYW5kIGNhbWVsQ2FzZSAoaWYgdGhlcmUgYXJlIGZpZWxkIHByZWZpeGVzIGZvciB0aGVcblx0Ly8gZW50aXR5LiAoZWcuIEVWVF9kZXNjID0+IGRlc2MpO1xuXHRpZiAoIGluc3RhbmNlLmZpZWxkUHJlZml4ZXMgKSB7XG5cdFx0bGV0IG5ld0ZpZWxkTmFtZSA9ICcnO1xuXHRcdC8vIFllcywgaXRzIGludGVuZGVkIHRoYXQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHByZWZpeGVzLCB0aGlzIGNvdWxkXG5cdFx0Ly8gZW5kIHVwIGNyZWF0aW5nIG11bHRpcGxlIGFsaWFzZWQgZ2V0dGVycyAob3Igc2V0dGVycylcblx0XHQvLyAoZWcgRGF0ZXRpbWU6IERUVF9FVlRfc3RhcnQgd291bGQgZW5kIHVwIHdpdGggYGV2dFN0YXJ0YCBhbmQgYHN0YXJ0YFxuXHRcdC8vIGFzIGdldHRlciBhY2Nlc3NvcnMpLlxuXHRcdGluc3RhbmNlLmZpZWxkUHJlZml4ZXMuZm9yRWFjaCggKCBmaWVsZFByZWZpeCApID0+IHtcblx0XHRcdG5ld0ZpZWxkTmFtZSA9IGZpZWxkTmFtZS5yZXBsYWNlKCBmaWVsZFByZWZpeCArICdfJywgJycgKTtcblx0XHRcdGlmICggbmV3RmllbGROYW1lICE9PSBmaWVsZE5hbWUgKSB7XG5cdFx0XHRcdG1ldGhvZChcblx0XHRcdFx0XHRpbnN0YW5jZSxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0Y2FtZWxDYXNlKCBuZXdGaWVsZE5hbWUgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgY2FsbGJhY2sgdGhhdCBpcyB1c2VkIGluIHRoZSBgZ2V0UmVuZGVyZWRgIGZpZWxkIGdldHRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7ZnVuY3Rpb24oc3RyaW5nKTogKn0gIEEgY2FsbGJhY2suXG4gKi9cbmNvbnN0IGdldFJlbmRlcmVkQ2FsbGJhY2sgPSAoIGluc3RhbmNlICkgPT4gKCByZXF1ZXN0ZWRGaWVsZE5hbWUgKSA9PlxuXHRpbnN0YW5jZVsgcmVxdWVzdGVkRmllbGROYW1lICsgJ1JlbmRlcmVkJyBdO1xuXG4vKipcbiAqIFJldHVybnMgYSBmaWVsZE5hbWUgc3RyaXBwZWQgb2YgYWxsIHBvc3NpYmxlIHByZWZpeGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgcHJlZml4IGZyZWUgZmllbGROYW1lLlxuICovXG5jb25zdCByZW1vdmVQcmVmaXhlc0Zyb21GaWVsZCA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSApID0+IHtcblx0Y29uc3QgcHJlZml4ZXNUb1JlbW92ZSA9IHNvcnRCeShcblx0XHRpbnN0YW5jZS5maWVsZFByZWZpeGVzLFxuXHRcdCggcHJlZml4ICkgPT4gcHJlZml4Lmxlbmd0aCAqIC0xXG5cdCk7XG5cdGxldCBuZXdGaWVsZE5hbWUgPSBmaWVsZE5hbWU7XG5cdGZvckVhY2goIHByZWZpeGVzVG9SZW1vdmUsICggcHJlZml4ICkgPT4ge1xuXHRcdG5ld0ZpZWxkTmFtZSA9IGZpZWxkTmFtZS5yZXBsYWNlKCBwcmVmaXgsICcnICk7XG5cdFx0aWYgKCBuZXdGaWVsZE5hbWUgIT09IGZpZWxkTmFtZSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH0gKTtcblx0cmV0dXJuIG5ld0ZpZWxkTmFtZTtcbn07XG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIHRoZSBnZXR0ZXJzIGZvciB0aGUgcmVuZGVyZWQgcHJvcGVydHkgb2YgbW9kZWwgZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSAgZmllbGRWYWx1ZVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUmVuZGVyZWRHZXR0ZXJzID0gKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlICkgPT4ge1xuXHRjcmVhdGVHZXR0ZXIoXG5cdFx0aW5zdGFuY2UsXG5cdFx0Y2FtZWxDYXNlKCByZW1vdmVQcmVmaXhlc0Zyb21GaWVsZCggaW5zdGFuY2UsIGZpZWxkTmFtZSApICkgK1xuXHRcdCdSZW5kZXJlZCcsXG5cdFx0ZmllbGRWYWx1ZVxuXHQpO1xuXHRpZiAoIGlzVW5kZWZpbmVkKCBpbnN0YW5jZS5nZXRSZW5kZXJlZCApICkge1xuXHRcdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHQnZ2V0UmVuZGVyZWQnLFxuXHRcdFx0Z2V0UmVuZGVyZWRDYWxsYmFjayxcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIENhbGxiYWNrIGZvciB0aGUgYGhhc011bHRpcGxlUHJpbWFyeUtleXNgIGdldHRlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKCk6IGJvb2xlYW59IFRoZSBjYWxsYmFjayBmb3IgaGFzTXVsdGlwbGVQcmltYXJ5S2V5cyBnZXR0ZXJcbiAqL1xuY29uc3QgaGFzTXVsdGlwbGVQcmltYXJ5S2V5c0NhbGxiYWNrID0gKCBpbnN0YW5jZSApID0+XG5cdGluc3RhbmNlLnByaW1hcnlLZXlzLmxlbmd0aCA+IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBnZXR0ZXJzIGZvciBwcmltYXJ5IGtleSByZWxhdGVkIGRhdGEuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge0FycmF5fSBwcmltYXJ5S2V5c1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUHJpbWFyeUtleUZpZWxkR2V0dGVycyA9ICggaW5zdGFuY2UsIHByaW1hcnlLZXlzICkgPT4ge1xuXHRjb25zdCBvcHRzID0geyBjb25maWd1cmFibGU6IHRydWUgfTtcblx0aWYgKCBpc0FycmF5KCBwcmltYXJ5S2V5cyApICkge1xuXHRcdGNyZWF0ZUdldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0J3ByaW1hcnlLZXknLFxuXHRcdFx0cHJpbWFyeUtleXNbIDAgXSxcblx0XHRcdG9wdHNcblx0XHQpO1xuXHRcdGNyZWF0ZUdldHRlckFuZFNldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0J3ByaW1hcnlLZXlzJyxcblx0XHRcdHByaW1hcnlLZXlzLFxuXHRcdFx0b3B0c1xuXHRcdCk7XG5cdFx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdCdoYXNNdWx0aXBsZVByaW1hcnlLZXlzJyxcblx0XHRcdGhhc011bHRpcGxlUHJpbWFyeUtleXNDYWxsYmFjayxcblx0XHRcdG9wdHNcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7ZnVuY3Rpb24oc3RyaW5nKTogYm9vbGVhbn0gUmV0dXJucyBhIGNhbGxiYWNrIGZvciB0aGVcbiAqIGhhc0NhbGN1bGF0ZWRGaWVsZCBnZXR0ZXJcbiAqL1xuY29uc3QgaGFzQ2FsY3VsYXRlZEZpZWxkQ2FsbGJhY2sgPSAoIGluc3RhbmNlICkgPT5cblx0KCBmaWVsZE5hbWVUb0NoZWNrICkgPT4gISBpc1VuZGVmaW5lZCggaW5zdGFuY2VbIGZpZWxkTmFtZVRvQ2hlY2sgXSApO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGdldHRlcnMgZm9yIGFsbCB0aGUgY2FsY3VsYXRlZCBmaWVsZHMgYW5kIHZhbHVlIG9uIHRoZSBlbnRpdHkuXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59ZmllbGRzQW5kVmFsdWVzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRDYWxjdWxhdGVkRmllbGRBbmRWYWx1ZXMgPSAoIGluc3RhbmNlLCBmaWVsZHNBbmRWYWx1ZXMgKSA9PiB7XG5cdGZvckVhY2goIGZpZWxkc0FuZFZhbHVlcywgKCBjYWxjdWxhdGVkRmllbGRWYWx1ZSwgY2FsY3VsYXRlZEZpZWxkTmFtZSApID0+IHtcblx0XHRpZiAoIGNhbGN1bGF0ZWRGaWVsZE5hbWUgIT09ICdfcHJvdGVjdGVkJyApIHtcblx0XHRcdGNyZWF0ZUdldHRlcihcblx0XHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRcdGNhbWVsQ2FzZSggY2FsY3VsYXRlZEZpZWxkTmFtZSApLFxuXHRcdFx0XHRjYWxjdWxhdGVkRmllbGRWYWx1ZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0gKTtcblx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoXG5cdFx0aW5zdGFuY2UsXG5cdFx0J2hhc0NhbGN1bGF0ZWRGaWVsZCcsXG5cdFx0aGFzQ2FsY3VsYXRlZEZpZWxkQ2FsbGJhY2tcblx0KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGdldHRlcnMgZm9yIHRoZSB2YXJpb3VzIHJlc291cmNlIGxpbmtzIG9uIHRoZSBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fWZpZWxkc0FuZFZhbHVlc1xuICovXG5leHBvcnQgY29uc3Qgc2V0UmVzb3VyY2VzID0gKCBpbnN0YW5jZSwgZmllbGRzQW5kVmFsdWVzICkgPT4ge1xuXHRjb25zdCByZWxhdGlvbnMgPSBbXTtcblx0bGV0IHJlbGF0aW9uTmFtZTtcblx0Zm9yRWFjaCggZmllbGRzQW5kVmFsdWVzLCAoIHJlc291cmNlVmFsdWUsIHJlc291cmNlTmFtZSApID0+IHtcblx0XHRpZiAoIHJlc291cmNlTmFtZSA9PT0gJ3NlbGYnICkge1xuXHRcdFx0Y3JlYXRlR2V0dGVyKCBpbnN0YW5jZSwgJ3Jlc291cmNlTGluaycsIHJlc291cmNlVmFsdWVbIDAgXS5ocmVmICk7XG5cdFx0fSBlbHNlIGlmICggcmVzb3VyY2VOYW1lID09PSAnY29sbGVjdGlvbicgKSB7XG5cdFx0XHRjcmVhdGVHZXR0ZXIoXG5cdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHQnY29sbGVjdGlvblJlc291cmNlTGluaycsXG5cdFx0XHRcdHJlc291cmNlVmFsdWVbIDAgXS5ocmVmXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWxhdGlvbk5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tTGluayggcmVzb3VyY2VOYW1lICk7XG5cdFx0XHRyZWxhdGlvbnMucHVzaCggcmVsYXRpb25OYW1lICk7XG5cdFx0XHRzZXRSZWxhdGlvbnNSZXNvdXJjZShcblx0XHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSArICdSZXNvdXJjZScsXG5cdFx0XHRcdHJlc291cmNlVmFsdWVcblx0XHRcdCk7XG5cdFx0fVxuXHR9ICk7XG5cdC8vc2V0IHJlbGF0aW9ucyBnZXR0ZXJcblx0Y3JlYXRlR2V0dGVyKCBpbnN0YW5jZSwgJ2dldFJlbGF0aW9ucycsIHJlbGF0aW9ucyApO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6IE9iamVjdH0gUmV0dXJucyB0aGUgY2FsbGJhY2sgZm9yIGdldHRpbmcgYVxuICogcmVsYXRpb24gcmVzb3VyY2VcbiAqL1xuY29uc3QgZ2V0UmVsYXRpb25SZXNvdXJjZUNhbGxiYWNrID0gKCBpbnN0YW5jZSApID0+XG5cdCggcmVsYXRpb25OYW1lICkgPT4gaW5zdGFuY2VbIHJlbGF0aW9uTmFtZS5yZXBsYWNlKCAnUmVzb3VyY2UnLCAnJyApIF07XG5cbi8qKlxuICogQ3JlYXRlcyBnZXR0ZXJzIGZvciB0aGUgcmVsYXRpb25zIHJlc291cmNlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsIHN0cmluZz59IHJlc291cmNlSW5mb1xuICovXG5leHBvcnQgY29uc3Qgc2V0UmVsYXRpb25zUmVzb3VyY2UgPSAoXG5cdGluc3RhbmNlLFxuXHRyZWxhdGlvbk5hbWUsXG5cdHJlc291cmNlSW5mb1xuKSA9PiB7XG5cdGNyZWF0ZUdldHRlcihcblx0XHRpbnN0YW5jZSxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0e1xuXHRcdFx0cmVzb3VyY2VMaW5rOiByZXNvdXJjZUluZm9bIDAgXS5ocmVmLFxuXHRcdFx0c2luZ2xlOiByZXNvdXJjZUluZm9bIDAgXS5zaW5nbGUsXG5cdFx0fVxuXHQpO1xuXHRpZiAoIGlzVW5kZWZpbmVkKCBpbnN0YW5jZS5nZXRSZWxhdGlvblJlc291cmNlICkgKSB7XG5cdFx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoIGluc3RhbmNlLFxuXHRcdFx0J2dldFJlbGF0aW9uUmVzb3VyY2UnLFxuXHRcdFx0Z2V0UmVsYXRpb25SZXNvdXJjZUNhbGxiYWNrXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBpbnRlcm5hbCBzYXZlIHN0YXRlIHRvIHRoZSBnaXZlbiB2YWx1ZSB3aGVuIGN1cnJlbnQgc3RhdGUgaXNcbiAqIFNBVkVfU1RBVEUuY2xlYW4gb3RoZXJ3aXNlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBpcyByZXRhaW5lZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzYXZlU3RhdGUgRXhwZWN0ZWQgdG8gYmUgb25lIG9mIFNBVkVfU1RBVEUgY29uc3RhbnQgdmFsdWVzLlxuICogQHBhcmFtIHtib29sZWFufSBvdmVycmlkZSBTZXQgdG8gdHJ1ZSB3aGVuIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgbG9naWMgZm9yXG4gKiBzZXR0aW5nIHN0YXRlLiAgV2hlbiB0cnVlLCB0aGUgc2F2ZVN0YXRlIGlzIHNldCB0byB3aGF0ZXZlciB0aGUgaW5jb21pbmdcbiAqIHNhdmVTdGF0ZSB2YWx1ZSBpcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNhdmVTdGF0ZSA9ICggaW5zdGFuY2UsIHNhdmVTdGF0ZSwgb3ZlcnJpZGUgPSBmYWxzZSApID0+IHtcblx0Y29uc3QgY3VycmVudFN0YXRlID0gaW5zdGFuY2VbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF07XG5cdHN3aXRjaCAoIHNhdmVTdGF0ZSApIHtcblx0XHRjYXNlIFNBVkVfU1RBVEUuRElSVFk6XG5cdFx0Y2FzZSBTQVZFX1NUQVRFLk5FVzpcblx0XHRjYXNlIFNBVkVfU1RBVEUuQ0xFQU46XG5cdFx0XHRpZiAoIG92ZXJyaWRlICkge1xuXHRcdFx0XHRpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlNBVkVfU1RBVEUgXSA9IHNhdmVTdGF0ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlNBVkVfU1RBVEUgXSA9XG5cdFx0XHRcdGN1cnJlbnRTdGF0ZSA9PT0gU0FWRV9TVEFURS5DTEVBTiA/XG5cdFx0XHRcdFx0c2F2ZVN0YXRlIDpcblx0XHRcdFx0XHRjdXJyZW50U3RhdGU7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEludmFsaWRBcmd1bWVudChcblx0XHRcdFx0J1NhdmUgc3RhdGUgZm9yIGVudGl0eSBjYW4gb25seSBiZSBzZXQgdG8gZWl0aGVyICcgK1xuXHRcdFx0XHQnU0FWRV9TVEFURS5ESVJUWSwgU0FWRV9TVEFURS5ORVcgb3IgU0FWRV9TVEFURS5DTEVBTidcblx0XHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogQWRkIHRoZSBmaWVsZCBuYW1lIHRvIHRoZSBmaWVsZFRvUGVyc2lzdE9uSW5zZXJ0IHByb3BlcnR5IG9uIHRoZSBpbnN0YW5jZVxuICogaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICovXG5leHBvcnQgY29uc3Qgc2V0RmllbGRUb1BlcnNpc3QgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUgKSA9PiB7XG5cdGlmICggaW5zdGFuY2UuZmllbGRzVG9QZXJzaXN0T25JbnNlcnQgKSB7XG5cdFx0aW5zdGFuY2UuZmllbGRzVG9QZXJzaXN0T25JbnNlcnQuYWRkKCBmaWVsZE5hbWUgKTtcblx0fVxufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRpc1BsYWluT2JqZWN0LFxuXHRjYW1lbENhc2UsXG5cdGxhc3QsXG5cdHBpY2ssXG5cdHBpY2tCeSxcblx0aXNBcnJheSxcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGluc3RhbmNlT2YgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdE1vbmV5LFxuXHRTaXRlQ3VycmVuY3ksXG5cdFNlcnZlckRhdGVUaW1lIGFzIERhdGVUaW1lLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcblxuaW1wb3J0IHsgcGx1cmFsTW9kZWxOYW1lIH0gZnJvbSAnLi4vbW9kZWwtbmFtZXMnO1xuXG5pbXBvcnQge1xuXHRoYXNSYXdQcm9wZXJ0eSxcblx0aGFzUHJldHR5UHJvcGVydHksXG5cdGhhc1JlbmRlcmVkUHJvcGVydHksXG5cdGlzRGF0ZVRpbWVGaWVsZCxcblx0aXNNb25leUZpZWxkLFxuXHRpc1ByaW1hcnlLZXlGaWVsZCxcblx0aXNFbnRpdHlGaWVsZCxcbn0gZnJvbSAnLi9ib29sZWFucyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVR5cGVGb3JGaWVsZCB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBWQUxJREFURV9UWVBFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFRoaXMgcmVjZWl2ZXMgYSBmaWVsZCBuYW1lLCBpdCdzIHZhbHVlIGFuZCB0aGUgc2NoZW1hIGFuZCBjb252ZXJ0cyBpdCB0byB0aGVcbiAqIHJlbGF0ZWQgdmFsdWUgb2JqZWN0IElGIHRoZSBzY2hlbWEgaW5kaWNhdGVzIGl0IGlzIG9mIGEgdHlwZSB0aGF0IHRoZXJlIGlzIGFcbiAqIGtub3duIHZhbHVlIG9iamVjdCBmb3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtEYXRlVGltZXxNb25leXwqfSAgSWYgdGhpcyBpcyBub3QgYSB2YWx1ZSBvYmplY3QsIHRoZSBvcmlnaW5hbCBmaWVsZFxuICogdmFsdWUgaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXliZUNvbnZlcnRUb1ZhbHVlT2JqZWN0ID0gKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIHNjaGVtYSApID0+IHtcblx0aWYgKFxuXHRcdGlzRGF0ZVRpbWVGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSAmJlxuXHRcdCEgRGF0ZVRpbWUudmFsaWRhdGVJc0RhdGVUaW1lKCBmaWVsZFZhbHVlIClcblx0KSB7XG5cdFx0cmV0dXJuIERhdGVUaW1lLmZyb21JU08oIGZpZWxkVmFsdWUgKTtcblx0fVxuXHRpZiAoXG5cdFx0aXNNb25leUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICYmXG5cdFx0ISAoIGluc3RhbmNlT2YoIGZpZWxkVmFsdWUsICdNb25leScgKSApXG5cdCkge1xuXHRcdHJldHVybiBuZXcgTW9uZXkoIGZpZWxkVmFsdWUsIFNpdGVDdXJyZW5jeSApO1xuXHR9XG5cdC8vIGlmIG1vcmUgVk9zIGdldCBhZGRlZCwgdGhlbiBpbnN0ZWFkIG9mIGFkZGluZyBtb3JlIGlmIGVsc2UgYmxvY2tzXG5cdC8vIHRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBvbmVzIGJlbG93LCBhbGwgVk8gbG9naWMgc2hvdWxkIGJlIGV4dHJhY3RlZFxuXHQvLyBpbnRvIHNvbWUga2luZCBvZiAgVmFsdWVPYmplY3RFeHRyYWN0b3Igb2JqZWN0IHRoYXQgd291bGQgaG9sZCBhbGwgb2Zcblx0Ly8gdGhlIG5lY2Vzc2FyeSBjYWxsYmFja3MgZm9yIG1hbmFnaW5nIHRoZSBkZXRlY3Rpb24gb2YgVk8gZmllbGRzIGFuZFxuXHQvLyBjb252ZXJzaW9uIG9mIGRhdGEgdG8gYW5kIGZyb20gdGhlIHZhcmlvdXMgVk9zXG5cdC8vIHBseiBzZWU6XG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmVudGVzcHJlc3NvL2V2ZW50LWVzcHJlc3NvLWNvcmUvcHVsbC82MzcvZmlsZXMjcjIyODY5MDc4OVxuXHRyZXR1cm4gZmllbGRWYWx1ZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb252ZXJ0cyB0aGUgaW5jb21pbmcgdmFsdWUgZm9yIGEgZmllbGQgdG8gaXRzIGVxdWl2YWxlbnQgXCJyYXdcIiB2YWx1ZVxuICogZnJvbSBhIHZhbHVlIG9iamVjdCBpZiBpdCBpcyBhIHZhbHVlIG9iamVjdC4gIE90aGVyd2lzZSBpdCBqdXN0IHJldHVybnMgdGhlXG4gKiBvcmlnaW5hbCBpbmNvbWluZyB2YWx1ZS4gIFRoaXMgYWxzbyBhc3NlcnRzIHRoYXQgaWYgdGhlIHByb3ZpZGVkIGZpZWxkIGlzXG4gKiBleHBlY3RlZCB0byBiZSBhIHZhbHVlIG9iamVjdCB0aGF0IHRoZSBpbmNvbWluZyB2YWx1ZSBJUyBhIHZhbGlkIHZhbHVlIG9iamVjdFxuICogYW5kIGl0IGlzIHRoZSBleHBlY3RlZCBpbnN0YW5jZSBvZiBhIHZhbHVlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp8TW9uZXl8RGF0ZVRpbWV9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge3N0cmluZ3xudW1iZXJ8Kn0gIElmIHRoZSB2YWx1ZSBpcyBub3QgYSB2YWx1ZSBvYmplY3QsIHJldHVybnMgdGhlXG4gKiBvcmlnaW5hbCB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgbWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0V2l0aEFzc2VydGlvbnMgPSAoXG5cdGZpZWxkTmFtZSxcblx0ZmllbGRWYWx1ZSxcblx0c2NoZW1hXG4pID0+IHtcblx0aWYgKCBpc0RhdGVUaW1lRmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0RGF0ZVRpbWUuYXNzZXJ0SXNEYXRlVGltZSggZmllbGRWYWx1ZSApO1xuXHRcdGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlLnRvSVNPKCk7XG5cdH0gZWxzZSBpZiAoIGlzTW9uZXlGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSApIHtcblx0XHRNb25leS5hc3NlcnRNb25leSggZmllbGRWYWx1ZSApO1xuXHRcdGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlLnRvTnVtYmVyKCk7XG5cdH1cblx0cmV0dXJuIGZpZWxkVmFsdWU7XG59O1xuXG4vKipcbiAqIFRoaXMgY29udmVydHMgdGhlIGluY29taW5nIHZhbHVlIGZvciBhIGZpZWxkIHRvIGl0cyBlcXVpdmFsZW50IFwicmF3XCIgdmFsdWVcbiAqIGlmIHRoZSBpbmNvbWluZyB2YWx1ZSAgaXMgYSB2YWx1ZSBvYmplY3QuICBPdGhlcndpc2UgaXQganVzdCByZXR1cm5zIHRoZVxuICogb3JpZ2luYWwgaW5jb21pbmcgdmFsdWUuXG4gKlxuICogQHBhcmFtIHsqfERhdGVUaW1lfE1vbmV5fWZpZWxkVmFsdWVcbiAqIEByZXR1cm4geyp9IFRoZSByYXcgdmFsdWUgZm9yIHRoZSB2YWx1ZSBvYmplY3Qgb3IgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgbWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0ID0gKCBmaWVsZFZhbHVlICkgPT4ge1xuXHRpZiAoIERhdGVUaW1lLnZhbGlkYXRlSXNEYXRlVGltZSggZmllbGRWYWx1ZSApICkge1xuXHRcdGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlLnRvSVNPKCk7XG5cdH0gZWxzZSBpZiAoIGluc3RhbmNlT2YoIGZpZWxkVmFsdWUsICdNb25leScgKSApIHtcblx0XHRmaWVsZFZhbHVlID0gZmllbGRWYWx1ZS50b051bWJlcigpO1xuXHR9XG5cdHJldHVybiBmaWVsZFZhbHVlO1xufTtcblxuLyoqXG4gKiBUaGlzIGRlcml2ZXMgdGhlIFwicHJlcGFyZWRcIiB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkIGFuZCB2YWx1ZS5cbiAqXG4gKiBcIlByZXBhcmVkXCIgbWVhbnM6XG4gKlxuICogLSBjb252ZXJ0aW5nIHRvIGEgdmFsdWUgb2JqZWN0IGlmIHRoaXMgaXMgYSBmaWVsZCB0aGF0IHRoZXJlIGFyZSBkZWZpbmVkXG4gKiAgIHZhbHVlIG9iamVjdHMgZm9yLlxuICogLSByZXRyaWV2aW5nIHRoZSBcInJhd1wiIHZhbHVlIGZyb20gZmllbGQgdmFsdWVzIHRoYXQgaGF2ZSBgcmF3YCBhbmQgYHJlbmRlcmVkYFxuICogICBvciBgcHJldHR5YCBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gIGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7RGF0ZVRpbWV8TW9uZXl8Kn0gIFJldHVybnMgdGhlIG9yaWdpbmFsIGluY29taW5nIHZhbHVlIGlmIGl0IGRvZXNcbiAqIG5vdCBoYXZlIGEgcmF3IGVxdWl2YWxlbnQgb3IgaXMgbm90IGEgdmFsdWUgb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgZGVyaXZlUHJlcGFyZWRWYWx1ZUZvckZpZWxkID0gKFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGluc3RhbmNlXG4pID0+IHtcblx0Y29uc3QgdmFsaWRhdGlvblR5cGUgPSB2YWxpZGF0ZVR5cGVGb3JGaWVsZCggZmllbGROYW1lLCBpbnN0YW5jZSApO1xuXHRmaWVsZFZhbHVlID0gaXNQbGFpbk9iamVjdCggZmllbGRWYWx1ZSApID9cblx0XHRmaWVsZFZhbHVlWyB2YWxpZGF0aW9uVHlwZSBdIDpcblx0XHRmaWVsZFZhbHVlO1xuXHRyZXR1cm4gbWF5YmVDb252ZXJ0VG9WYWx1ZU9iamVjdCggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBpbnN0YW5jZS5zY2hlbWEgKTtcbn07XG5cbi8qKlxuICogVGhpcyByZXR1cm5zIHRoZSBcInJlbmRlcmVkXCIgb3IgXCJwcmV0dHlcIiBlcXVpdmFsZW50IGZyb20gYSB2YWx1ZSBpZiBpdCBleGlzdHNcbiAqIGFzIGEgcHJvcGVydHkgb24gaXQuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn0gIFRoZSBvcmlnaW5hbCB2YWx1ZSBpcyByZXR1cm5lZCBpZiBpdHMgbm90IGEgcGxhaW4gb2JqZWN0IG9yIGlmXG4gKiBpdCBoYXMgbm8gYHJlbmRlcmVkYCBvciBgcHJldHR5YCBwcm9wZXJ0eS4gIEhvd2V2ZXIsIGlmIGl0IGlzIGEgcGxhaW4gb2JqZWN0XG4gKiBhbmQgaGFzIG5vIHByZXR0eS9yZW5kZXJlZCBwcm9wZXJ0aWVzIGJ1dCBET0VTIGhhdmUgYSByYXcgcHJvcGVydHksIHRoZW4gdGhhdFxuICogaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVSZW5kZXJlZFZhbHVlID0gKCB2YWx1ZSApID0+IHtcblx0aWYgKCAhIGlzUGxhaW5PYmplY3QoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdHZhbHVlID0gaGFzUHJldHR5UHJvcGVydHkoIHZhbHVlICkgPyB2YWx1ZS5wcmV0dHkgOiB2YWx1ZTtcblx0dmFsdWUgPSBoYXNSZW5kZXJlZFByb3BlcnR5KCB2YWx1ZSApID8gdmFsdWUucmVuZGVyZWQgOiB2YWx1ZTtcblx0cmV0dXJuIGhhc1Jhd1Byb3BlcnR5KCB2YWx1ZSApID8gdmFsdWUucmF3IDogdmFsdWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWUgb2YgYSByZXNvdXJjZSBmcm9tIHRoZSBnaXZlbiBgcmVzb3VyY2VMaW5rYC5cbiAqXG4gKiBlZy4gXCJodHRwczovL2FwaS5ldmVudGVzcHJlc3NvLmNvbS9yZWdpc3RyYXRpb25cIiB3aWxsIHJldHVybiAncmVnaXN0cmF0aW9uJztcblxuICogQHBhcmFtIHtzdHJpbmd9IHJlc291cmNlTGlua1xuICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBmcm9tIGEgcHJvdmlkZWQgcmVzb3VyY2VcbiAqIGxpbmsuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRSZWxhdGlvbk5hbWVGcm9tTGluayA9ICggcmVzb3VyY2VMaW5rICkgPT4ge1xuXHRyZXR1cm4gcGx1cmFsTW9kZWxOYW1lKCBjYW1lbENhc2UoIGxhc3QoIHJlc291cmNlTGluay5zcGxpdCggJy8nICkgKSApICk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwbGFpbiBvYmplY3QgY29udGFpbmluZyB0aGUgZW50aXR5IGZpZWxkIG5hbWVzIGFuZCB2YWx1ZXMgZnJvbSB0aGVcbiAqIHByb3ZpZGVkIGVudGl0eSBpbnN0YW5jZS4gIFRoZSB2YWx1ZXMgYXJlIG5vdCBwcmVwYXJlZCBhbmQgbWF0Y2ggZXhhY3RseSB3aGF0XG4gKiBpcyBjdXJyZW50bHkgc2V0IG9uIHRoaXMgZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7QmFzZUVudGl0eX0gZW50aXR5SW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgcGxhaW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yQ2xvbmluZyA9ICggZW50aXR5SW5zdGFuY2UgKSA9PiB7XG5cdHJldHVybiBPYmplY3Qua2V5cyggZW50aXR5SW5zdGFuY2UgKS5yZWR1Y2UoIChcblx0XHRmaWVsZHNBbmRWYWx1ZXMsXG5cdFx0ZmllbGROYW1lXG5cdCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdGlzRW50aXR5RmllbGQoIGZpZWxkTmFtZSwgZW50aXR5SW5zdGFuY2Uuc2NoZW1hICkgJiZcblx0XHRcdCEgaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgZW50aXR5SW5zdGFuY2Uuc2NoZW1hIClcblx0XHQpIHtcblx0XHRcdGZpZWxkc0FuZFZhbHVlc1sgZmllbGROYW1lIF0gPSBlbnRpdHlJbnN0YW5jZVsgZmllbGROYW1lIF07XG5cdFx0XHRyZXR1cm4gZmllbGRzQW5kVmFsdWVzO1xuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRzQW5kVmFsdWVzO1xuXHR9LCB7fSApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVudGl0eSBmaWVsZCBuYW1lIGFuZCB2YWx1ZXMgZnJvbSB0aGVcbiAqIHByb3ZpZGVkIGVudGl0eSBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eUluc3RhbmNlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZvckluc2VydCAgV2hldGhlciB0byByZXR1cm4gdGhlIGZpZWxkcyBhbmQgdmFsdWVzIGZvclxuICogaW5zZXJ0IG9yIGZvciB1cGRhdGUuXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgcGxhaW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yUGVyc2lzdGluZyA9IChcblx0ZW50aXR5SW5zdGFuY2UsXG5cdGZvckluc2VydCA9IGZhbHNlXG4pID0+IHtcblx0Y29uc3QgaXRlcmF0b3IgPSBmb3JJbnNlcnQgP1xuXHRcdEFycmF5LmZyb20oIGVudGl0eUluc3RhbmNlLmZpZWxkc1RvUGVyc2lzdE9uSW5zZXJ0LnZhbHVlcygpICkgOlxuXHRcdE9iamVjdC5rZXlzKCBlbnRpdHlJbnN0YW5jZSApO1xuXG5cdHJldHVybiBpdGVyYXRvci5yZWR1Y2UoIChcblx0XHRmaWVsZHNBbmRWYWx1ZXMsXG5cdFx0ZmllbGROYW1lXG5cdCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdGlzRW50aXR5RmllbGQoIGZpZWxkTmFtZSwgZW50aXR5SW5zdGFuY2Uuc2NoZW1hICkgJiZcblx0XHRcdCEgaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgZW50aXR5SW5zdGFuY2Uuc2NoZW1hIClcblx0XHQpIHtcblx0XHRcdGZpZWxkc0FuZFZhbHVlc1sgZmllbGROYW1lIF0gPSBtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3QoXG5cdFx0XHRcdGVudGl0eUluc3RhbmNlWyBmaWVsZE5hbWUgXSxcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gZmllbGRzQW5kVmFsdWVzO1xuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRzQW5kVmFsdWVzO1xuXHR9LCB7fSApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcmltYXJ5IGtleShzKSBhbmQgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gZW50aXR5SW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZW50aXR5SW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gYW4gYXJyYXkgb2YgdmFsdWVzIGZvciB0aGUgcHJpbWFyeSBrZXlzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJpbWFyeUtleVZhbHVlcyA9ICggZW50aXR5SW5zdGFuY2UgKSA9PiBwaWNrKFxuXHRlbnRpdHlJbnN0YW5jZSxcblx0ZW50aXR5SW5zdGFuY2UucHJpbWFyeUtleXNcbik7XG5cbi8qKlxuICogVGhpcyByZXR1cm5zIGEgcGxhaW4gb2JqZWN0IG9mIGVudGl0eSBmaWVsZHMgZnJvbSB0aGUgc2NoZW1hIGZvciB0aGUgZW50aXR5XG4gKiBpbnN0YW5jZSAoc2NoZW1hIGZvciBmaWVsZHMgYXJlIGV4dHJhY3RlZCBhcyB3ZWxsKS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZW50aXR5SW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gQSBwbGFpbiBvYmplY3Qgd2l0aCBmaWVsZHMgYW5kIHNjaGVtYSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiBlbnRpdHkgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVudGl0eUZpZWxkc0Zyb21TY2hlbWEgPSAoIGVudGl0eUluc3RhbmNlICkgPT4gcGlja0J5KFxuXHRlbnRpdHlJbnN0YW5jZS5zY2hlbWEsXG5cdCggZmllbGRWYWx1ZSwgZmllbGROYW1lICkgPT4gaXNFbnRpdHlGaWVsZChcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZW50aXR5SW5zdGFuY2Uuc2NoZW1hXG5cdClcbik7XG5cbi8qKlxuICogVGhpcyByZXR1cm5zIGEgcGxhaW4gb2JqZWN0IG9mIGV4dHJhY3RlZCBwcmltYXJ5S2V5IGZpZWxkcyBmcm9tIHRoZSBzY2hlbWFcbiAqIGZvciB0aGUgZW50aXR5IGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbnRpdHlJbnN0YW5jZVxuICogQHJldHVybiB7T2JqZWN0fSBBIHBsYWluIG9iamVjdCB3aXRoIGZpZWxkcyBhbmQgc2NoZW1hIHByb3BlcnRpZXMgdGhhdFxuICogXHRcdFx0XHRcdHJlcHJlc2VudCBwcmltYXJ5IGtleSBmaWVsZHMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmltYXJ5S2V5RmllbGRzRnJvbVNjaGVtYSA9ICggZW50aXR5SW5zdGFuY2UgKSA9PiBwaWNrQnkoXG5cdGVudGl0eUluc3RhbmNlLnNjaGVtYSxcblx0KCBmaWVsZFZhbHVlLCBmaWVsZE5hbWUgKSA9PiBpc1ByaW1hcnlLZXlGaWVsZChcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZW50aXR5SW5zdGFuY2Uuc2NoZW1hXG5cdClcbik7XG5cbi8qKlxuICogRGVyaXZlcyB0aGUgZGVmYXVsdCB2YWx1ZSB0byB1c2UgZm9yIGEgZ2l2ZW4gdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Kn0gIEEgdmFsdWUgdG8gdXNlIGZvciB0aGUgZ2l2ZW4gdHlwZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlcml2ZURlZmF1bHRWYWx1ZUZvclR5cGUgPSAoIHR5cGUgKSA9PiB7XG5cdGlmICggaXNBcnJheSggdHlwZSApICkge1xuXHRcdHJldHVybiB0eXBlLmluZGV4T2YoICdudWxsJyApID4gLTEgP1xuXHRcdFx0bnVsbCA6XG5cdFx0XHRkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlKCB0eXBlWyAwIF0gKTtcblx0fVxuXHRzd2l0Y2ggKCB0eXBlICkge1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRjYXNlICdpbnRlZ2VyJzpcblx0XHRcdHJldHVybiAwO1xuXHRcdGNhc2UgJ251bGwnOlxuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRjYXNlICdib29sZWFuJzpcblx0XHRjYXNlICdib29sJzpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRjYXNlICdkYXRlLXRpbWUnOlxuXHRcdFx0cmV0dXJuICggbmV3IERhdGUoKSApLnRvSVNPU3RyaW5nKCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIERlcml2ZXMgd2hhdCBgdHlwZWAgYSBmaWVsZCBpcyBmcm9tIHRoZSBzY2hlbWEuXG4gKiBJdCBhY2NvdW50cyBmb3IgY2FzZXMgd2hlcmUgdGhlIFwidHlwZVwiIG9mIGEgZmllbGQgbWlnaHQgYmUgYGRhdGUtdGltZWAgb3JcbiAqIHdoZXJlIHRoZSB0eXBlIGlzIGFuIG9iamVjdCBhbmQgdGh1cyB0aGUgYHR5cGVgIGZvciB0aGUgcHVycG9zZXMgb2YgbW9kZWxcbiAqIGVudGl0aWVzIGlzIGRlZmluZWQgYnkgdGhlIGByYXdgIHByb3BlcnR5IGZvciB0aGUgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Kn0gIFdoYXQgdHlwZSB0aGUgZmlsZWQgaXMuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVUeXBlRm9yRmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT4ge1xuXHRpZiAoIGlzRGF0ZVRpbWVGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSApIHtcblx0XHRyZXR1cm4gJ2RhdGUtdGltZSc7XG5cdH1cblx0aWYgKCBzY2hlbWFbIGZpZWxkTmFtZSBdICYmIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSApIHtcblx0XHRpZiAoIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcyAmJlxuXHRcdFx0XHRoYXNSYXdQcm9wZXJ0eSggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzIClcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlID9cblx0XHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LnR5cGUgOlxuXHRcdFx0XHRcdG51bGw7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogVGhpcyBkZXJpdmVzIHRoZSB2YWxpZGF0ZSB0eXBlIGZyb20gdGhlIGluY29taW5nIGZpZWxkIGFuZCB2YWx1ZSBhY2NvcmRpbmdcbiAqIHRvIHRoZSBzY2hlbWEgYW5kIGluY29taW5nIHZhbHVlLlxuICpcbiAqIFRoaXMgYWNjb3VudHMgZm9yIHRoZSBmYWN0IHRoYXQgZW50aXRpZXMgbWF5IGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlXG4gKiBmb2xsb3dpbmcgY29udGV4dHM6XG4gKlxuICogMS4gQXV0aGVkIFJFU1QgcmVzcG9uc2UgKHdoaWNoIGNvdWxkIGhhdmUgYm90aCByYXcsIHJlbmRlcmVkIG9yIHByZXR0eVxuICogICAgdmFsdWVzIGluIHRoZSBmaWVsZCB2YWx1ZSkuXG4gKiAyLiBOb24tYXV0aGVkIFJFU1QgcmVzcG9uc2UgKHdoaWNoIHdpbGwgbm90IGhhdmUgYSByYXcgdmFsdWUsIGJ1dCBjb3VsZCBoYXZlXG4gKiAgICBhIHByZXR0eSBvciByZW5kZXJlZCB2YWx1ZSkuICBUaGlzIGlzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGlmIHRoZVxuICogICAgcmVuZGVyZWQgb3IgcHJldHR5IHZhbHVlIGlzIG9mIGEgZGlmZmVyZW50IGRhdGEgdHlwZSB0aGFuIHRoZSByYXcgdmFsdWUuXG4gKiAzLiBOZXcgZW50aXRpZXMgYnVpbHQgY2xpZW50IHNpZGUsIHdoaWNoIHdpbGwgYmUgYXNzdW1lZCB0byBiZSBwcmVwYXJlZFxuICogICAgYWdhaW5zdCB0aGUgXCJyYXdcIiB2YWxpZGF0ZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7U3ltYm9sfSAgVGhlIHZhbGlkYXRlIHR5cGUgZm9yIHRoZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkID0gKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIHNjaGVtYSApID0+IHtcblx0aWYgKCBoYXNSYXdQcm9wZXJ0eSggZmllbGRWYWx1ZSApICkge1xuXHRcdHJldHVybiBWQUxJREFURV9UWVBFLlJBVztcblx0fVxuXHRpZiAoIHNjaGVtYVsgZmllbGROYW1lIF0gJiYgc2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlICkge1xuXHRcdGlmIChcblx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdGlzUGxhaW5PYmplY3QoIGZpZWxkVmFsdWUgKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGhhc1JlbmRlcmVkUHJvcGVydHkoIGZpZWxkVmFsdWUgKSA/XG5cdFx0XHRcdFZBTElEQVRFX1RZUEUuUkVOREVSRUQgOlxuXHRcdFx0XHRWQUxJREFURV9UWVBFLlBSRVRUWTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFZBTElEQVRFX1RZUEUuUkFXO1xufTtcblxuLyoqXG4gKiBUaGlzIGdldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgZmllbGQgZnJvbSB0aGUgcHJvdmlkZWQgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4geyp9IFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgZmllbGQgZnJvbSB0aGUgc2NoZW1hIG9yIGlmIG5vdFxuICogcHJlc2VudCBpbiB0aGUgc2NoZW1hLCBhIGRlcml2ZWQgZGVmYXVsdCB2YWx1ZSBmcm9tIHRoZSBzY2hlbWEgdHlwZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRWYWx1ZUZvckZpZWxkID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+IHtcblx0aWYgKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkge1xuXHRcdHJldHVybiBzY2hlbWFbIGZpZWxkTmFtZSBdLmRlZmF1bHQgP1xuXHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5kZWZhdWx0IDpcblx0XHRcdGRlcml2ZURlZmF1bHRWYWx1ZUZvclR5cGUoIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSApO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlRW50aXR5RmFjdG9yeSB9IGZyb20gJy4vYmFzZS1lbnRpdHknO1xuZXhwb3J0IHsgTU9ERUxfUFJFRklYRVMsIFNBVkVfU1RBVEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNJbnRlZ2VyLFxuXHRpc1N0cmluZyxcblx0aXNQbGFpbk9iamVjdCxcblx0aXNCb29sZWFuLFxuXHRpc051bWJlcixcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHNwcmludGYgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBJbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzRW51bUZpZWxkLCBpc1ByaW1hcnlLZXlGaWVsZCwgaXNWYWx1ZU9iamVjdEZpZWxkIH0gZnJvbSAnLi9ib29sZWFucyc7XG5pbXBvcnQgeyBtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyB9IGZyb20gJy4vZXh0cmFjdG9ycyc7XG5pbXBvcnQgeyBQUklWQVRFX1BST1BFUlRJRVMsIFZBTElEQVRFX1RZUEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBpbmNvbWluZyB2YWx1ZSBmb3IgZ2l2ZW4gdHlwZS4gIFR5cGVzIGFsbG93ZWQgYXJlOlxuICpcbiAqIC0gaW50ZWdlcjogY2hlY2tzIGlmIHZhbHVlIGlzIGFuIGludGVnZXIuXG4gKiAtIG51bWJlcjogY2hlY2tzIGlmIHZhbHVlIGlzIGNsYXNzaWZpZWQgYXMgYSBOdW1iZXIgcHJpbWl0aXZlIG9yIG9iamVjdCAodGhpc1xuICogICBtZWFucyBgSW5maW5pdHlgLCBgLUluZmluaXR5YCwgYW5kIGBOYU5gIGFyZSBjb25zaWRlcmVkIHZhbGlkIGZvciB0aGlzIHR5cGVcbiAqIC0gc3RyaW5nXG4gKiAtIG9iamVjdCAtIHRoaXMgdmFsaWRhdGVzIGFzIGEgXCJwbGFpbk9iamVjdFwiLCB0aGF0IGlzIGFuIG9iamVjdCBjcmVhdGVkIGJ5XG4gKiAgIHRoZSBPYmplY3QgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBbW1Byb3RvdHlwZV1dIG9mIG51bGwuXG4gKiAtIGJvb2xlYW5cbiAqIC0gYm9vbDogKHNhbWUgYXMgYm9vbGVhbiBjaGVjaylcbiAqIC0gbnVsbDogdmFsdWUgbXVzdCBleHBsaWNpdGx5IGJlIGBudWxsYFxuICpcbiAqIE5vdGU6IGlmIHRoZSBwYXNzZWQgaW4gdHlwZSBkb2VzIG5vdCBleGlzdCwgdGhlbiB0aGUgdmFsdWUgaXMgY29uc2lkZXJlZFxuICogaW52YWxpZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheX0gdHlwZSAgVGhlIHR5cGUgb3IgdHlwZXMgdG8gY2hlY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgIFRoZSB2YWx1ZSBiZWluZyB2YWxpZGF0ZWRcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIHRoZSB2YWx1ZSBpcyB2YWxpZCBmb3IgdGhlIGdpdmVuIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVR5cGUgPSAoIHR5cGUsIHZhbHVlICkgPT4ge1xuXHRsZXQgdmFsaWQgPSBmYWxzZTtcblx0Ly8gYWNjb3VudCBmb3IgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGFyZSBhbiBhcnJheSBvZiBhbGxvd2VkIHR5cGVzLlxuXHRpZiAoIGlzQXJyYXkoIHR5cGUgKSApIHtcblx0XHRmb3IgKCBjb25zdCBzaW5nbGVUeXBlIG9mIHR5cGUgKSB7XG5cdFx0XHR2YWxpZCA9IHZhbGlkYXRlVHlwZSggc2luZ2xlVHlwZSwgdmFsdWUgKTtcblx0XHRcdGlmICggdmFsaWQgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyByZXR1cm4gcmlnaHQgYXdheSBiZWNhdXNlIHdlJ3ZlIGRldGVybWluZWQgdGhlIHZhbGlkaXR5IG9mIHRoZSB0eXBlLlxuXHRcdHJldHVybiB2YWxpZDtcblx0fVxuXHRzd2l0Y2ggKCB0eXBlICkge1xuXHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0dmFsaWQgPSBpc0ludGVnZXIoIHZhbHVlICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0dmFsaWQgPSBpc051bWJlciggdmFsdWUgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHR2YWxpZCA9IGlzU3RyaW5nKCB2YWx1ZSApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdHZhbGlkID0gaXNQbGFpbk9iamVjdCggdmFsdWUgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2Jvb2xlYW4nOlxuXHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0dmFsaWQgPSBpc0Jvb2xlYW4oIHZhbHVlICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdudWxsJzpcblx0XHRcdHZhbGlkID0gdmFsdWUgPT09IG51bGw7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gdmFsaWQ7XG59O1xuXG4vKipcbiAqIFRoaXMgdmFsaWRhdGVzIGVudW0gdHlwZSBvZiB2YWx1ZXMuXG4gKlxuICogVGhpcyBtZWFucyB0aGF0IHRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUgcHJvdmlkZWQgYXJyYXkgb2YgZW51bVZhbHVlcyBhc1xuICogd2VsbCBhcyBiZWluZyBvZiB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtBcnJheX0gZW51bVZhbHVlc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgdGhpcyB2YWx1ZSBpcyB2YWxpZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRW51bVR5cGUgPSAoIHR5cGUsIGVudW1WYWx1ZXMsIHZhbHVlICkgPT4ge1xuXHRyZXR1cm4gdmFsaWRhdGVUeXBlKCB0eXBlLCB2YWx1ZSApICYmXG5cdFx0aXNBcnJheSggZW51bVZhbHVlcyApICYmXG5cdFx0ZW51bVZhbHVlcy5pbmRleE9mKCB2YWx1ZSApID4gLTE7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGRvZXMgYSBzaGFsbG93IHZhbGlkYXRpb24gZm9yIHRoZSBnaXZlbiB2YWx1ZSBhbmQgZmllbGQuXG4gKlxuICogXCJTaGFsbG93XCIgaGVyZSBtZWFucyB0aGF0IGlmIHRoZSBmaWVsZCBzY2hlbWEgaXMgb2YgdHlwZSAnb2JqZWN0JywgdGhlbiB0aGVcbiAqIHZhbGlkYXRpb24gb25seSB2ZXJpZmllcyB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuICBUaGUgb2JqZWN0IGNvbnRlbnRzXG4gKiBhcmUgbm90IHZhbGlkYXRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwZWN0VmFsdWVPYmplY3RzICBJZiB0cnVlLCB0aGVuIHRoaXMgZmxhZ3MgdGhlIHZhbGlkYXRvclxuICogdG8gYXNzdW1lIHRoZSB2YWx1ZSBtaWdodCBiZSBhIHZhbHVlIG9iamVjdCBhbmQgYXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgcmF3XG4gKiB2YWx1ZSBmcm9tIHRoYXQgdmFsdWUgb2JqZWN0IGZvciB2YWxpZGF0aW9uIGFnYWluc3QgdGhlIGV4cGVjdGVkIHR5cGUgaW4gdGhlXG4gKiBzY2hlbWEgZm9yIHRoYXQgZmllbGQuXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gKiBAdGhyb3dzIFR5cGVFcnJvclxuICogQHRocm93cyBJbnZhbGlkRGF0ZVRpbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZCA9IChcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRzY2hlbWEsXG5cdGV4cGVjdFZhbHVlT2JqZWN0cyA9IHRydWVcbikgPT4ge1xuXHQvLyBpZiBmaWVsZCBpcyBhIHByaW1hcnkgS2V5IGZpZWxkIHRoZW4gd2Ugb3ZlcnJpZGUgdGhlIHZhbGlkYXRpb24gc28gaXQgY2FuXG5cdC8vIGJlIGVpdGhlciBzdHJpbmcgb3IgbnVtYmVyXG5cdGlmICggaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0cmV0dXJuIHZhbGlkYXRlVHlwZSggJ3N0cmluZycsIGZpZWxkVmFsdWUgKSB8fFxuXHRcdFx0dmFsaWRhdGVUeXBlKCAnbnVtYmVyJywgZmllbGRWYWx1ZSApO1xuXHR9XG5cdGNvbnN0IGlzRW51bSA9IGlzRW51bUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApO1xuXHRjb25zdCBpc1ZhbHVlT2JqZWN0ID0gaXNWYWx1ZU9iamVjdEZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApO1xuXHRmaWVsZFZhbHVlID0gZXhwZWN0VmFsdWVPYmplY3RzICYmIGlzVmFsdWVPYmplY3QgP1xuXHRcdG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zKFxuXHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdHNjaGVtYVxuXHRcdCkgOlxuXHRcdGZpZWxkVmFsdWU7XG5cdGZpZWxkVmFsdWUgPSBleHBlY3RWYWx1ZU9iamVjdHMgJiZcblx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdGlzVmFsdWVPYmplY3QgP1xuXHRcdHsgcmF3OiBmaWVsZFZhbHVlIH0gOlxuXHRcdGZpZWxkVmFsdWU7XG5cdGNvbnN0IGlzVmFsaWQgPSBpc0VudW0gP1xuXHRcdHZhbGlkYXRlRW51bVR5cGUoXG5cdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUsXG5cdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLmVudW0sXG5cdFx0XHRmaWVsZFZhbHVlXG5cdFx0KSA6XG5cdFx0dmFsaWRhdGVUeXBlKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUsIGZpZWxkVmFsdWUgKTtcblx0Ly8gaWYgaXNFbnVtIGFuZCBub3QgdmFsaWQsIHRoZW4gbGV0cyBiYWlsIHdpdGggZXJyb3Jcblx0aWYgKCBpc0VudW0gJiYgISBpc1ZhbGlkICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHQnVGhlIGdpdmVuIFwiJXNcIiBmaWVsZE5hbWUgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEuICBJdCBtdXN0IGJlIGEgXCIlc1wiIGFuZCBpdCBtdXN0IGJlIG9uZSBvZiBcIiVzXCIuIFRoZSBmaWVsZFZhbHVlIGdpdmVuIHdhcyBcIiVzXCInLFxuXHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0uZW51bS5qb2luKCksXG5cdFx0XHRcdGZpZWxkVmFsdWVcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cdHJldHVybiBpc1ZhbGlkO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoYXQgaXMgc2V0IGFzIHRoZSB2YWxpZGF0ZVR5cGUgZm9yIHRoZSBnaXZlbiBmaWVsZCBhbmQgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB2YWxpZGF0aW9uIHR5cGUgZm9yIHRoZSBnaXZlbiBmaWVsZCBhbmQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVR5cGVGb3JGaWVsZCA9ICggZmllbGROYW1lLCBpbnN0YW5jZSApID0+IHtcblx0cmV0dXJuIGluc3RhbmNlWyBQUklWQVRFX1BST1BFUlRJRVMuVkFMSURBVEVfVFlQRVMgXVsgZmllbGROYW1lIF0gP1xuXHRcdGluc3RhbmNlWyBQUklWQVRFX1BST1BFUlRJRVMuVkFMSURBVEVfVFlQRVMgXVsgZmllbGROYW1lIF0gOlxuXHRcdFZBTElEQVRFX1RZUEUuUkFXO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgTU9ERUxfTkFNRSA9ICdldmVudCc7XG5cbmV4cG9ydCBjb25zdCBFVkVOVF9TVEFUVVNfSUQgPSB7XG5cdFNPTERfT1VUOiAnc29sZF9vdXQnLFxuXHRQT1NUUE9ORUQ6ICdwb3N0cG9uZWQnLFxuXHRDQU5DRUxMRUQ6ICdjYW5jZWxsZWQnLFxufTtcblxuZXhwb3J0IGNvbnN0IEVWRU5UX1NUQVRVU19JRFMgPSB2YWx1ZXMoIEVWRU5UX1NUQVRVU19JRCApO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcblx0R1JFQVRFUl9USEFOLFxuXHRHUkVBVEVSX1RIQU5fQU5EX0VRVUFMLFxuXHRMRVNTX1RIQU5fQU5EX0VRVUFMLFxufSBmcm9tICcuLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IG5vd0RhdGVBbmRUaW1lID0gbW9tZW50KCk7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdFVlRfbmFtZScsXG5cdFx0XHQnRVZUX0lEJyxcblx0XHRcdCdzdGFydF9kYXRlJyxcblx0XHRcdCdlbmRfZGF0ZScsXG5cdFx0XHQndGlja2V0X3N0YXJ0Jyxcblx0XHRcdCd0aWNrZXRfZW5kJyxcblx0XHRdICksXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0XHRzaG93RXhwaXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cdFx0Y2F0ZWdvcnlTbHVnOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdG1vbnRoOiBQcm9wVHlwZXMubW9udGgsXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHRcdHNob3dFeHBpcmVkOiBib29sZWFuXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdzdGFydF9kYXRlJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfREVTQyxcblx0XHRzaG93RXhwaXJlZDogZmFsc2UsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHN0YXJ0X2RhdGU6ICdEYXRldGltZS5EVFRfRVZUX3N0YXJ0Jyxcblx0XHRlbmRfZGF0ZTogJ0RhdGV0aW1lLkRUVF9FVlRfZW5kJyxcblx0XHR0aWNrZXRfc3RhcnQ6ICdEYXRldGltZS5UaWNrZXQuVEtUX3N0YXJ0X2RhdGUnLFxuXHRcdHRpY2tldF9lbmQ6ICdEYXRldGltZS5UaWNrZXQuVEtUX2VuZF9kYXRlJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gZXZlbnRzIGVuZHBvaW50IHJlcXVlc3QgdXNpbmcgcHJvdmlkZWRcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd0V4cGlyZWQgIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgZXhwaXJlZCBldmVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2F0ZWdvcnlTbHVnICBSZXR1cm4gZXZlbnRzIGZvciB0aGUgZ2l2ZW4gY2F0ZWdvcnlTbHVnXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9udGggICAgICAgICBSZXR1cm4gZXZlbnRzIGZvciB0aGUgZ2l2ZW4gbW9udGguXG4gKiBcdFx0XHRcdFx0XHRcdFx0IENhbiBiZSBhbnkgbW9udGggZm9ybWF0IHJlY29nbml6ZWQgYnkgbW9tZW50LlxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgVGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdHNob3dFeHBpcmVkID0gZmFsc2UsXG5cdGNhdGVnb3J5U2x1Zyxcblx0bW9udGggPSAnbm9uZScsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXG5cdGlmICggISBzaG93RXhwaXJlZCApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RhdGV0aW1lLkRUVF9FVlRfZW5kKipleHBpcmVkXVtdPScgKyBHUkVBVEVSX1RIQU4gK1xuXHRcdFx0JyZ3aGVyZVtEYXRldGltZS5EVFRfRVZUX2VuZCoqZXhwaXJlZF1bXT0nICtcblx0XHRcdG5vd0RhdGVBbmRUaW1lLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGlmICggY2F0ZWdvcnlTbHVnICkge1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbVGVybV9SZWxhdGlvbnNoaXAuVGVybV9UYXhvbm9teS5UZXJtLnNsdWddPScgKyBjYXRlZ29yeVNsdWdcblx0XHQpO1xuXHR9XG5cdGlmICggbW9udGggJiYgbW9udGggIT09ICdub25lJyApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RhdGV0aW1lLkRUVF9FVlRfc3RhcnRdW109JyArIEdSRUFURVJfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtEYXRldGltZS5EVFRfRVZUX3N0YXJ0XVtdPScgK1xuXHRcdFx0bW9tZW50KCkubW9udGgoIG1vbnRoICkuc3RhcnRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbRGF0ZXRpbWUuRFRUX0VWVF9lbmRdW109JyArIExFU1NfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtEYXRldGltZS5EVFRfRVZUX2VuZF1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLmVuZE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL2Fzc2VydGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vZGVmYXVsdC1tb2RlbC1zdGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2VuZHBvaW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2VudGl0eS1mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vcHJpbWFyeS1rZXlzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwtbmFtZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHByaW1hcnlLZXlzIH0gZnJvbSAnLi9wcmltYXJ5LWtleXMuanMnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsga2V5cywgc3RhcnRDYXNlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwbHVyYWxpemUgZnJvbSAncGx1cmFsaXplJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBtb2RlbCBuYW1lcyBjdXJyZW50bHkgZXhwb3NlZCBmb3IgUkVTVCBBUEkgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX05BTUVTID0ga2V5cyggcHJpbWFyeUtleXMgKTtcblxuLyoqXG4gKiBVc2VkIHRvIG5vcm1hbGl6ZSB0aGUgcGx1cmFsIGZvcm0gb2YgYSBnaXZlbiBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSAgRW5zdXJlcyB0aGUgZ2l2ZW4gbW9kZWxOYW1lIGlzIGl0cyBwbHVyYWwgZm9ybS5cbiAqL1xuZXhwb3J0IGNvbnN0IHBsdXJhbE1vZGVsTmFtZSA9IG1lbW9pemUoXG5cdCggbW9kZWxOYW1lICkgPT4gcGx1cmFsaXplKCBtb2RlbE5hbWUgKVxuKTtcblxuLyoqXG4gKiBVc2VkIHRvIG5vcm1hbGl6ZSB0aGUgc2luZ3VsYXIgZm9ybSBvZiBhIGdpdmVuIG1vZGVsIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEVuc3VyZXMgdGhlIGdpdmVuIG1vZGVsTmFtZSBpcyBpbiBpdHMgc2luZ3VsYXIgZm9ybS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNpbmd1bGFyTW9kZWxOYW1lID0gbWVtb2l6ZShcblx0KCBtb2RlbE5hbWUgKSA9PiBwbHVyYWxpemUuc2luZ3VsYXIoIG1vZGVsTmFtZSApXG4pO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBjYXBpdGFsaXplZCBzbmFrZWNhc2UgZm9ybWF0IGZvciB0aGUgZ2l2ZW4gbW9kZWwgbmFtZSB0eXBpY2FsbHlcbiAqIHVzZWQgaW4gcXVlcnkgc3RyaW5ncy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nKCAnbWVzc2FnZV90ZW1wbGF0ZV9ncm91cCcgKTtcbiAqIC8vIE1lc3NhZ2VfVGVtcGxhdGVfR3JvdXBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBmb3JtYXR0ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgbW9kZWxOYW1lRm9yUXVlcnlTdHJpbmcgPSBtZW1vaXplKFxuXHQoIG1vZGVsTmFtZSApID0+IHtcblx0XHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdFx0bW9kZWxOYW1lID0gc3RhcnRDYXNlKCBtb2RlbE5hbWUgKTtcblx0XHRyZXR1cm4gbW9kZWxOYW1lLnJlcGxhY2UoIC9cXHMvZywgJ18nICk7XG5cdH1cbik7XG4iLCJpbXBvcnQgKiBhcyBhdHRlbmRlZU1vZGVsIGZyb20gJy4vYXR0ZW5kZWUnO1xuaW1wb3J0ICogYXMgY2hlY2tJbk1vZGVsIGZyb20gJy4vY2hlY2tpbic7XG5pbXBvcnQgKiBhcyBkYXRlVGltZU1vZGVsIGZyb20gJy4vZGF0ZXRpbWUnO1xuaW1wb3J0ICogYXMgZXZlbnRNb2RlbCBmcm9tICcuL2V2ZW50JztcbmltcG9ydCAqIGFzIHByaWNlVHlwZU1vZGVsIGZyb20gJy4vcHJpY2UtdHlwZSc7XG5pbXBvcnQgKiBhcyByZWdpc3RyYXRpb25Nb2RlbCBmcm9tICcuL3JlZ2lzdHJhdGlvbic7XG5pbXBvcnQgKiBhcyBzdGF0dXNNb2RlbCBmcm9tICcuL3N0YXR1cyc7XG5pbXBvcnQgKiBhcyB0aWNrZXRNb2RlbCBmcm9tICcuL3RpY2tldCc7XG5leHBvcnQge1xuXHRhdHRlbmRlZU1vZGVsLFxuXHRjaGVja0luTW9kZWwsXG5cdGRhdGVUaW1lTW9kZWwsXG5cdGV2ZW50TW9kZWwsXG5cdHByaWNlVHlwZU1vZGVsLFxuXHRyZWdpc3RyYXRpb25Nb2RlbCxcblx0c3RhdHVzTW9kZWwsXG5cdHRpY2tldE1vZGVsLFxufTtcbiIsIlxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAncHJpY2VfdHlwZSc7XG5cbmV4cG9ydCBjb25zdCBCQVNFX1BSSUNFX1RZUEVTID0ge1xuXHRCQVNFX1BSSUNFOiAxLFxuXHRESVNDT1VOVDogMixcblx0U1VSQ0hBUkdFOiAzLFxuXHRUQVg6IDQsXG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRhdGEgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBpc0FycmF5LCByZWR1Y2UsIHRyaW1FbmQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbWVtaXplJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGFzc2VydEVudGl0eUhhc0tleSxcblx0YXNzZXJ0SXNBcnJheSxcblx0YXNzZXJ0SXNOb3RFbXB0eSxcblx0YXNzZXJ0SXNNYXAsXG59IGZyb20gJy4vYXNzZXJ0aW9ucyc7XG5cbi8qKlxuICogRXhwb3NlcyBhIG1hcCBvZiBtb2RlbG5hbWUgdG8gcHJpbWFyeSBrZXkgZXhwb3NlZCBieSB0aGUgZWVqcy5kYXRhIGdsb2JhbFxuICogdmlhIHRoZSBzZXJ2ZXIuXG4gKlxuICogQHR5cGUge3t9fVxuICovXG5leHBvcnQgY29uc3QgeyBwcmltYXJ5X2tleXM6IHByaW1hcnlLZXlzID0ge30gfSA9IGRhdGEucGF0aHM7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5cyBmcm9tIHRoZSBwcm92aWRlZCBlbnRpdHkuXG4gKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHVzZWQgZm9yIG1vZGVscyB0aGF0IGhhdmUgY29tYmluZWQgcHJpbWFyeSBrZXlzXG4gKiAoZGVsaXZlcmVkIGFzIGFuIGFycmF5KS5cbiAqXG4gKiBAdHlwZSB7IG1lbW9pemVkIH1cbiAqIEByZXR1cm4geyBzdHJpbmcgfSBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgdmFsdWVzLlxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9XG4gKi9cbmV4cG9ydCBjb25zdCB2YWx1ZXNGb3JDb21iaW5lZFByaW1hcnlLZXlzID0gbWVtb2l6ZSggKCBrZXlzLCBlbnRpdHkgKSA9PiB7XG5cdGFzc2VydElzQXJyYXkoIGtleXMgKTtcblx0Y29uc3QgcHJpbWFyeUtleSA9IHJlZHVjZSgga2V5cywgZnVuY3Rpb24oIHJlc3VsdCwga2V5ICkge1xuXHRcdGFzc2VydEVudGl0eUhhc0tleSgga2V5LCBlbnRpdHkgKTtcblx0XHRyZXR1cm4gZW50aXR5WyByZXN1bHQgXSArICc6JyArIGVudGl0eVsga2V5IF07XG5cdH0gKTtcblx0cmV0dXJuIHRyaW1FbmQoIHByaW1hcnlLZXksICc6JyApO1xufSApO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5IGZyb20gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAqIFRoaXMgZnVuY3Rpb24gd291bGQgYmUgdXNlZCBmb3IgbW9kZWxzIHRoYXQgaGF2ZSBvbmx5IG9uZSBwcmltYXJ5IGtleS5cbiAqXG4gKiBAdHlwZSB7bWVtb2l6ZWR9XG4gKiBAcmV0dXJuIHsgZnVuY3Rpb24gfSBUaGUgdmFsdWUgZm9yIHRoZSBrZXkgaW4gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfVxuICovXG5leHBvcnQgY29uc3QgdmFsdWVGb3JQcmltYXJ5S2V5ID0gbWVtb2l6ZSggKCBrZXksIGVudGl0eSApID0+IHtcblx0YXNzZXJ0RW50aXR5SGFzS2V5KCBrZXksIGVudGl0eSApO1xuXHRyZXR1cm4gZW50aXR5WyBrZXkgXTtcbn0gKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcmltYXJ5IGtleSAob3IgY29tYmluZWQgcHJpbWFyeSBrZXlzKSBmcm9tIHRoZSBhdmFpbGFibGUgZGF0YS5cbiAqXG4gKiBAdHlwZSB7bWVtb2l6ZWR9XG4gKiBAcmV0dXJuIHsgZnVuY3Rpb24oc3RyaW5nKSB9XG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByaW1hcnlLZXkgPSBtZW1vaXplKCAoIG1vZGVsTmFtZSApID0+IHtcblx0YXNzZXJ0RW50aXR5SGFzS2V5KCBtb2RlbE5hbWUsIHByaW1hcnlLZXlzICk7XG5cdHJldHVybiBwcmltYXJ5S2V5c1sgbW9kZWxOYW1lIF07XG59ICk7XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHN0cmluZyBmb3IgZ2V0dGluZyB0aGUgZW50aXRpZXMgYmVsb25naW5nIHRvIGEgbW9kZWwgZm9yIHRoZVxuICogZ2l2ZW4gcHJpbWFyeSBrZXkgdmFsdWVzXG4gKlxuICogQHR5cGUge21lbW9pemVkfVxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nID0gbWVtb2l6ZShcblx0KCBtb2RlbE5hbWUsIGtleVZhbHVlcyA9IFtdICkgPT4ge1xuXHRcdGNvbnN0IHByaW1hcnlLZXkgPSBnZXRQcmltYXJ5S2V5KCBtb2RlbE5hbWUgKTtcblx0XHRyZXR1cm4gYFskeyBwcmltYXJ5S2V5IH1dW0lOXT1gICsga2V5VmFsdWVzLmpvaW4oKTtcblx0fVxuKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZXMgZm9yIHRoZSBwcmltYXJ5IGtleXMgZnJvbSB0aGUgcHJvdmlkZWQgZW50aXR5LlxuICpcbiAqIEB0eXBlIHttZW1vaXplZH1cbiAqIEByZXR1cm4geyBmdW5jdGlvbiB9ICBJZiB0aGUgbW9kZWwgaGFzIG9ubHkgb25lIHByaW1hcnkga2V5IHRoZW4gdGhlIHZhbHVlIHdpbGxcbiAqIGJlIGEgc2ltcGxlIHN0cmluZy4gIElmIHRoZSBtb2RlbCBoYXMgY29tYmluZWQgcHJpbWFyeSBrZXlzLCB0aGVuIHRoZSB2YWx1ZVxuICogd2lsbCBiZSBhcyBzdHJpbmcgaW4gdGhlIGZvcm1hdCBgJXMuJXNgIGZvciB0aGUgcHJpbWFyeSBrZXkgdmFsdWVzLlxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbnRpdHlQcmltYXJ5S2V5VmFsdWVzID0gbWVtb2l6ZSggKCBtb2RlbE5hbWUsIGVudGl0eSApID0+IHtcblx0Y29uc3Qga2V5cyA9IGdldFByaW1hcnlLZXkoIG1vZGVsTmFtZSApO1xuXHRyZXR1cm4gaXNBcnJheSgga2V5cyApID9cblx0XHR2YWx1ZXNGb3JDb21iaW5lZFByaW1hcnlLZXlzKCBrZXlzLCBlbnRpdHkgKSA6XG5cdFx0dmFsdWVGb3JQcmltYXJ5S2V5KCBrZXlzLCBlbnRpdHkgKTtcbn0gKTtcblxuLyoqXG4gKiBUaGlzIHJlY2VpdmVzIGFuIGFycmF5IG9mIGVudGl0aWVzIGFuZCByZXR1cm5zIGEgY29sbGVjdGlvbiBvZiB0aG9zZSBzYW1lXG4gKiBlbnRpdGllcyBpbmRleGVkIGJ5IHRoZSBwcmltYXJ5IGtleSB2YWx1ZSBmb3IgZWFjaCBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtBcnJheX0gZW50aXRpZXNcbiAqIEByZXR1cm4ge01hcH0gIEEgY29sbGVjdGlvbiBpbmRleGVkIGJ5IHRoZSBwcmltYXJ5IGtleSB2YWx1ZXMgZm9yIGVhY2ggZW50aXR5LlxuICogQHRocm93cyB7RXhjZXB0aW9ufVxuICovXG5leHBvcnQgY29uc3Qga2V5RW50aXRpZXNCeVByaW1hcnlLZXlWYWx1ZSA9ICggbW9kZWxOYW1lLCBlbnRpdGllcyA9IFtdICkgPT4ge1xuXHRhc3NlcnRJc05vdEVtcHR5KFxuXHRcdGVudGl0aWVzLFxuXHRcdF9fKFxuXHRcdFx0J1RoZSBwcm92aWRlZCBhcnJheSBvZiBlbnRpdGllcyBtdXN0IG5vdCBiZSBlbXB0eScsXG5cdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdClcblx0KTtcblx0YXNzZXJ0SXNBcnJheSggZW50aXRpZXMgKTtcblxuXHRjb25zdCBtYXBwZWRFbnRpdGllcyA9IG5ldyBNYXAoKTtcblx0ZW50aXRpZXMuZm9yRWFjaCggKCBlbnRpdHkgKSA9PiB7XG5cdFx0bWFwcGVkRW50aXRpZXMuc2V0KFxuXHRcdFx0Z2V0RW50aXR5UHJpbWFyeUtleVZhbHVlcyggbW9kZWxOYW1lLCBlbnRpdHkgKSxcblx0XHRcdGVudGl0eVxuXHRcdCk7XG5cdH0gKTtcblx0cmV0dXJuIG1hcHBlZEVudGl0aWVzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVudGl0eSBpbnN0YW5jZXMgdXNpbmcgdGhlIGdpdmVuIGZhY3RvcnkgYW5kIGFycmF5XG4gKiBvZiBlbnRpdHkgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBmYWN0b3J5XG4gKiBAcGFyYW0ge01hcH0gZW50aXRpZXNcbiAqIEByZXR1cm4ge01hcH0gIEFuIGFycmF5IG9mIGVudGl0eSBpbnN0YW5jZXMgaW5kZXhlZCBieVxuICogdGhlaXIgcHJpbWFyeSBrZXkgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFuZEtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUgPSAoXG5cdGZhY3RvcnksXG5cdGVudGl0aWVzLFxuKSA9PiB7XG5cdGFzc2VydElzTWFwKFxuXHRcdGVudGl0aWVzLFxuXHRcdF9fKFxuXHRcdFx0J1RoZSBwcm92aWRlZCBvYmplY3Qgb2YgZW50aXRpZXMgbXVzdCBiZSBhIE1hcCBvYmplY3QnLFxuXHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHQpXG5cdCk7XG5cdGVudGl0aWVzLmZvckVhY2goICggZW50aXR5LCBlbnRpdHlJZCApID0+IHtcblx0XHRlbnRpdGllcy5zZXQoIGVudGl0eUlkLCBmYWN0b3J5LmZyb21FeGlzdGluZyggZW50aXR5ICkgKTtcblx0fSApO1xuXHRyZXR1cm4gZW50aXRpZXM7XG59O1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBJbXBvcnRzXG4gKi9cbmltcG9ydCAqIGFzIHN0YXR1c01vZGVsIGZyb20gJy4uL3N0YXR1cy9jb25zdGFudHMnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAncmVnaXN0cmF0aW9uJztcblxuZXhwb3J0IGNvbnN0IFJFR0lTVFJBVElPTl9TVEFUVVNfSURTID0gdmFsdWVzKFxuXHRzdGF0dXNNb2RlbC5SRUdJU1RSQVRJT05fU1RBVFVTX0lEXG4pO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNVbmRlZmluZWQsIHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcbn0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgKiBhcyBzdGF0dXNNb2RlbCBmcm9tICcuLi9zdGF0dXMvY29uc3RhbnRzJztcblxuLyoqXG4gKiBEZXNjcmliZWQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge3thdHRyaWJ1dGVzOiAqfX1cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5RGF0YVR5cGVzID0ge1xuXHRmb3JFdmVudElkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JBdHRlbmRlZUlkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JUcmFuc2FjdGlvbklkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JUaWNrZXRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yU3RhdHVzSWQ6IFByb3BUeXBlcy5vbmVPZiggdmFsdWVzKCBzdGF0dXNNb2RlbC5SRUdJU1RSQVRJT05fU1RBVFVTX0lEICkgKSxcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdSRUdfSUQnLFxuXHRcdFx0J1JFR19kYXRlJyxcblx0XHRdICksXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0fSApLFxufTtcblxuZXhwb3J0IGNvbnN0IG9wdGlvbnNFbnRpdHlNYXAgPSB7XG5cdGRlZmF1bHQ6IHtcblx0XHR2YWx1ZTogJ1JFR19JRCcsXG5cdFx0bGFiZWw6ICdSRUdfY29kZScsXG5cdH0sXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdyZWdfZGF0ZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYSByZWdpc3RyYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHJlZ19pZDogJ1JFR19JRCcsXG5cdFx0cmVnX2RhdGU6ICdSRUdfZGF0ZScsXG5cdH07XG5cdHJldHVybiBpc1VuZGVmaW5lZCggb3JkZXJCeU1hcFsgb3JkZXJCeSBdICkgP1xuXHRcdG9yZGVyQnkgOlxuXHRcdG9yZGVyQnlNYXBbIG9yZGVyQnkgXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHdoZXJlIGNvbmRpdGlvbnMgZm9yIGFuIHJlZ2lzdHJhdGlvbnMgZW5kcG9pbnQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JFdmVudElkICAgIFx0SUQgb2YgRXZlbnQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JBdHRlbmRlZUlkICAgIElEIG9mIEF0dGVuZGVlIHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yVHJhbnNhY3Rpb25JZCBJRCBvZiBUcmFuc2FjdGlvbiB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclRpY2tldElkIFx0XHRJRCBvZiBUaWNrZXQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JTdGF0dXNJZCBcdFx0SUQgb2YgU3RhdHVzIHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgIFx0VGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdGZvckV2ZW50SWQgPSAwLFxuXHRmb3JBdHRlbmRlZUlkID0gMCxcblx0Zm9yVHJhbnNhY3Rpb25JZCA9IDAsXG5cdGZvclRpY2tldElkID0gMCxcblx0Zm9yU3RhdHVzSWQgPSAnJyxcbn0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGZvckV2ZW50SWQgPSBwYXJzZUludCggZm9yRXZlbnRJZCwgMTAgKTtcblx0aWYgKCBmb3JFdmVudElkICE9PSAwICYmICEgaXNOYU4oIGZvckV2ZW50SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRVZUX0lEXT0nICsgZm9yRXZlbnRJZCApO1xuXHR9XG5cdGZvckF0dGVuZGVlSWQgPSBwYXJzZUludCggZm9yQXR0ZW5kZWVJZCwgMTAgKTtcblx0aWYgKCBmb3JBdHRlbmRlZUlkICE9PSAwICYmICEgaXNOYU4oIGZvckF0dGVuZGVlSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbQVRUX0lEXT0nICsgZm9yQXR0ZW5kZWVJZCApO1xuXHR9XG5cdGZvclRyYW5zYWN0aW9uSWQgPSBwYXJzZUludCggZm9yVHJhbnNhY3Rpb25JZCwgMTAgKTtcblx0aWYgKCBmb3JUcmFuc2FjdGlvbklkICE9PSAwICYmICEgaXNOYU4oIGZvclRyYW5zYWN0aW9uSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbVFhOX0lEXT0nICsgZm9yVHJhbnNhY3Rpb25JZCApO1xuXHR9XG5cdGZvclRpY2tldElkID0gcGFyc2VJbnQoIGZvclRpY2tldElkLCAxMCApO1xuXHRpZiAoIGZvclRpY2tldElkICE9PSAwICYmICEgaXNOYU4oIGZvclRpY2tldElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1RLVF9JRF09JyArIGZvclRpY2tldElkICk7XG5cdH1cblx0aWYgKCBmb3JTdGF0dXNJZCAhPT0gJycgJiYgZm9yU3RhdHVzSWQgIT09IG51bGwgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1NUU19JRF09JyArIGZvclN0YXR1c0lkICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAnc3RhdHVzJztcbi8vIHR5cGVzXG5leHBvcnQgY29uc3QgU1RBVFVTX1RZUEVfRU1BSUwgPSAnZW1haWwnO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX0VWRU5UID0gJ2V2ZW50JztcbmV4cG9ydCBjb25zdCBTVEFUVVNfVFlQRV9NRVNTQUdFID0gJ21lc3NhZ2UnO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX1BBWU1FTlQgPSAncGF5bWVudCc7XG5leHBvcnQgY29uc3QgU1RBVFVTX1RZUEVfUkVHSVNUUkFUSU9OID0gJ3JlZ2lzdHJhdGlvbic7XG5leHBvcnQgY29uc3QgU1RBVFVTX1RZUEVfVFJBTlNBQ1RJT04gPSAndHJhbnNhY3Rpb24nO1xuLy8gZW1haWxcbmV4cG9ydCBjb25zdCBFTUFJTF9TVEFUVVNfSUQgPSB7XG5cdERSQUZUOiAnRURSJyxcblx0U0VOVDogJ0VTTicsXG5cdEVYUElSRUQ6ICdFWFAnLFxufTtcbi8vIGV2ZW50XG5leHBvcnQgY29uc3QgRVZFTlRfU1RBVFVTX0lEID0ge1xuXHRBQ1RJVkU6ICdBQ1QnLFxuXHRSRUdJU1RSQVRJT05fQ0xPU0VEOiAnQ0xTJyxcblx0REVMRVRFRDogJ0RFTCcsXG5cdERFTklFRDogJ0RFTicsXG5cdERSQUZUOiAnRFJGJyxcblx0Tk9UX0FDVElWRTogJ05BQycsXG5cdE5PVF9PUEVOOiAnTk9QJyxcblx0T05HT0lORzogJ09ORycsXG5cdFJFR0lTVFJBVElPTl9PUEVOOiAnT1BOJyxcblx0UEVORElORzogJ1BORCcsXG5cdFNFQ09OREFSWTogJ1NFQycsXG59O1xuLy8gbWVzc2FnZVxuZXhwb3J0IGNvbnN0IE1FU1NBR0VfU1RBVFVTX0lEID0ge1xuXHRERUJVRzogJ01ETycsXG5cdEVYRUNVVElORzogJ01FWCcsXG5cdEZBSUw6ICdNRkwnLFxuXHRJTkNPTVBMRVRFOiAnTUlDJyxcblx0SURMRTogJ01JRCcsXG5cdFJFU0VORDogJ01SUycsXG5cdFJFVFJZOiAnTVJUJyxcblx0U0VOVDogJ01TTicsXG59O1xuLy8gcGF5bWVudFxuZXhwb3J0IGNvbnN0IFBBWU1FTlRfU1RBVFVTX0lEID0ge1xuXHRBUFBST1ZFRDogJ1BBUCcsXG5cdENBTkNFTExFRDogJ1BDTicsXG5cdERFQ0xJTkVEOiAnUERDJyxcblx0RkFJTEVEOiAnUEZMJyxcblx0UEVORElORzogJ1BQTicsXG59O1xuLy8gcmVnaXN0cmF0aW9uXG5leHBvcnQgY29uc3QgUkVHSVNUUkFUSU9OX1NUQVRVU19JRCA9IHtcblx0QVBQUk9WRUQ6ICdSQVAnLFxuXHRDQU5DRUxMRUQ6ICdSQ04nLFxuXHRERUNMSU5FRDogJ1JEQycsXG5cdElOQ09NUExFVEU6ICdSSUMnLFxuXHROT1RfQVBQUk9WRUQ6ICdSTkEnLFxuXHRQRU5ESU5HX1BBWU1FTlQ6ICdSUFAnLFxuXHRXQUlUX0xJU1Q6ICdSV0wnLFxufTtcbi8vIHRyYW5zYWN0aW9uXG5leHBvcnQgY29uc3QgVFJBTlNBQ1RJT05fU1RBVFVTX0lEID0ge1xuXHRBQkFORE9ORUQ6ICdUQUInLFxuXHRDT01QTEVURTogJ1RDTScsXG5cdEZBSUxFRDogJ1RGTCcsXG5cdElOQ09NUExFVEU6ICdUSU4nLFxuXHRPVkVSUEFJRDogJ1RPUCcsXG59O1xuXG4vLyB0aGUgZm9sbG93aW5nIGFyZSBub3QgaW4gdGhlIHN0YXR1cyBkYXRhYmFzZSBidXQgYXJlIGtlcHQgaGVyZSBmb3Jcbi8vIGNvbnZlbmllbmNlXG5cbi8vIGN1c3RvbSBwb3N0IHR5cGVzXG5leHBvcnQgY29uc3QgQ1BUX1NUQVRVU19JRCA9IHtcblx0UFVCTElTSDogJ3B1Ymxpc2gnLFxuXHRGVVRVUkU6ICdmdXR1cmUnLFxuXHREUkFGVDogJ2RyYWZ0Jyxcblx0UEVORElORzogJ3BlbmRpbmcnLFxuXHRQUklWQVRFOiAncHJpdmF0ZScsXG5cdFRSQVNIRUQ6ICd0cmFzaCcsXG59O1xuXG5leHBvcnQgY29uc3QgVU5LTk9XTl9TVEFUVVNfSUQgPSAndW5rbm93bic7XG5cbmV4cG9ydCBjb25zdCBBTExfU1RBVFVTX0lEUyA9IFtcblx0Li4udmFsdWVzKCBFTUFJTF9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBFVkVOVF9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBNRVNTQUdFX1NUQVRVU19JRCApLFxuXHQuLi52YWx1ZXMoIFBBWU1FTlRfU1RBVFVTX0lEICksXG5cdC4uLnZhbHVlcyggUkVHSVNUUkFUSU9OX1NUQVRVU19JRCApLFxuXHQuLi52YWx1ZXMoIFRSQU5TQUNUSU9OX1NUQVRVU19JRCApLFxuXHQuLi52YWx1ZXMoIENQVF9TVEFUVVNfSUQgKSxcblx0VU5LTk9XTl9TVEFUVVNfSUQsXG5dO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAqIGFzIHN0YXR1cyBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFVkVOVF9TVEFUVVNfSUQgfSBmcm9tICcuLi9ldmVudCc7XG5pbXBvcnQgeyBUSUNLRVRfU1RBVFVTX0lEIH0gZnJvbSAnLi4vdGlja2V0JztcbmltcG9ydCB7IERBVEVUSU1FX1NUQVRVU19JRCB9IGZyb20gJy4uL2RhdGV0aW1lJztcbmltcG9ydCB7IENIRUNLSU5fU1RBVFVTX0lEIH0gZnJvbSAnLi4vY2hlY2tpbic7XG5cbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgUmVnaXN0cmF0aW9uIHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfUkVHSVNUUkFUSU9OID0ge1xuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELlBFTkRJTkdfUEFZTUVOVCBdOiBuZXcgTGFiZWwoXG5cdFx0X18oICdwZW5kaW5nIHBheW1lbnQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0X18oICdwZW5kaW5nIHBheW1lbnRzJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlJFR0lTVFJBVElPTl9TVEFUVVNfSUQuQVBQUk9WRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhcHByb3ZlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELk5PVF9BUFBST1ZFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ25vdCBhcHByb3ZlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELkNBTkNFTExFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2NhbmNlbGxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELklOQ09NUExFVEUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdpbmNvbXBsZXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlJFR0lTVFJBVElPTl9TVEFUVVNfSUQuREVDTElORUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdkZWNsaW5lZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELldBSVRfTElTVCBdOiBuZXcgTGFiZWwoXG5cdFx0X18oICd3YWl0IGxpc3QnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0X18oICd3YWl0IGxpc3RzJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgVHJhbnNhY3Rpb24gc3RhdHVzZXNcbiAqIEB0eXBlIHt7fX1cbiAqXG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfVFJBTlNBQ1RJT04gPSB7XG5cdFsgc3RhdHVzLlRSQU5TQUNUSU9OX1NUQVRVU19JRC5PVkVSUEFJRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ292ZXJwYWlkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlRSQU5TQUNUSU9OX1NUQVRVU19JRC5DT01QTEVURSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2NvbXBsZXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlRSQU5TQUNUSU9OX1NUQVRVU19JRC5JTkNPTVBMRVRFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnaW5jb21wbGV0ZScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuRkFJTEVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZmFpbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlRSQU5TQUNUSU9OX1NUQVRVU19JRC5BQkFORE9ORUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhYmFuZG9uZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gbWFwIGZvciBwYXltZW50IHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfUEFZTUVOVCA9IHtcblx0WyBzdGF0dXMuUEFZTUVOVF9TVEFUVVNfSUQuQVBQUk9WRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhY2NlcHRlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5QQVlNRU5UX1NUQVRVU19JRC5QRU5ESU5HIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncGVuZGluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5QQVlNRU5UX1NUQVRVU19JRC5DQU5DRUxMRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdjYW5jZWxsZWQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdCksXG5cdFsgc3RhdHVzLlBBWU1FTlRfU1RBVFVTX0lELkRFQ0xJTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZGVjbGluZWQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdCksXG5cdFsgc3RhdHVzLlBBWU1FTlRfU1RBVFVTX0lELkZBSUxFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2ZhaWxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIE1lc3NhZ2Ugc3RhdHVzZXNcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9NRVNTQUdFID0ge1xuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5TRU5UIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnc2VudCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5JRExFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncXVldWVkIGZvciBzZW5kaW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELkZBSUwgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdmYWlsZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuREVCVUcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdkZWJ1ZyBvbmx5JywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELkVYRUNVVElORyBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ21lc3NlbmdlciBpcyBleGVjdXRpbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuUkVTRU5EIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncXVldWVkIGZvciByZXNlbmRpbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuSU5DT01QTEVURSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3F1ZXVlZCBmb3IgZ2VuZXJhdGluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5SRVRSWSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2ZhaWxlZCBzZW5kaW5nLCBjYW4gYmUgcmV0cmllZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIENQVCBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0NQVCA9IHtcblx0WyBzdGF0dXMuQ1BUX1NUQVRVU19JRC5QVUJMSVNIIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncHVibGlzaGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuRlVUVVJFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnc2NoZWR1bGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuRFJBRlQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdkcmFmdCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5DUFRfU1RBVFVTX0lELlBFTkRJTkcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdwZW5kaW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuUFJJVkFURSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3ByaXZhdGUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuQ1BUX1NUQVRVU19JRC5UUkFTSEVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAndHJhc2hlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLy8gdGhlIGZvbGxvd2luZyBzdGF0dXMgbWFwcyBhcmUgZm9yIG1vZGVsIHN0YXR1c2VzIHRoYXQgYXJlIG5vdCBzYXZlZCBpbiB0aGVcbi8vIHN0YXR1cyB0YWJsZSBidXQgZm9yIGNvbnZlbmllbmNlIGhhdmUgdGhlaXIgbGFiZWxzIHJldHJpZXZhYmxlIHZpYSBoZXJlLlxuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgRXZlbnQgU3RhdHVzZXNcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9FVkVOVCA9IHtcblx0WyBFVkVOVF9TVEFUVVNfSUQuU09MRF9PVVQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdzb2xkIG91dCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIEVWRU5UX1NUQVRVU19JRC5QT1NUUE9ORUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdwb3N0cG9uZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBFVkVOVF9TVEFUVVNfSUQuQ0FOQ0VMTEVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnY2FuY2VsbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgVGlja2V0IHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfVElDS0VUID0ge1xuXHRbIFRJQ0tFVF9TVEFUVVNfSUQuQVJDSElWRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhcmNoaXZlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIFRJQ0tFVF9TVEFUVVNfSUQuRVhQSVJFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2V4cGlyZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBUSUNLRVRfU1RBVFVTX0lELlNPTERfT1VUIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnc29sZCBvdXQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBUSUNLRVRfU1RBVFVTX0lELlBFTkRJTkcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICd1cGNvbWluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIFRJQ0tFVF9TVEFUVVNfSUQuT05TQUxFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnb24gc2FsZScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIGRhdGV0aW1lIHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfREFURVRJTUUgPSB7XG5cdFsgREFURVRJTUVfU1RBVFVTX0lELkNBTkNFTExFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2NhbmNlbGxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5TT0xEX09VVCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3NvbGQgb3V0JywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgREFURVRJTUVfU1RBVFVTX0lELkVYUElSRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdleHBpcmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgREFURVRJTUVfU1RBVFVTX0lELklOQUNUSVZFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnaW5hY3RpdmUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBEQVRFVElNRV9TVEFUVVNfSUQuVVBDT01JTkcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICd1cGNvbWluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5BQ1RJVkUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhY3RpdmUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBEQVRFVElNRV9TVEFUVVNfSUQuUE9TVFBPTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncG9zdHBvbmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgY2hlY2tpbiBzdGF0dXNlc1xuICpcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DSEVDS0lOID0ge1xuXHRbIENIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX0lOIF06IG5ldyBMYWJlbChcblx0XHRfXyggJ2NoZWNrLWluJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdF9fKCAnY2hlY2staW5zJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfT1VUIF06IG5ldyBMYWJlbChcblx0XHRfXyggJ2NoZWNrLW91dCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRfXyggJ2NoZWNrLW91dHMnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBDSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9ORVZFUiBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ25ldmVyIGNoZWNrZWQgaW4nLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogQ29tYmluZWQgdHJhbnNsYXRpb24gbWFwIGZvciBhbGwgc3RhdHVzZXMuXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMID0ge1xuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX1JFR0lTVFJBVElPTixcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9UUkFOU0FDVElPTixcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9QQVlNRU5ULFxuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX01FU1NBR0UsXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ1BULFxuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX0VWRU5ULFxuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RJQ0tFVCxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9EQVRFVElNRSxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DSEVDS0lOLFxuXHRbIHN0YXR1cy5VTktOT1dOX1NUQVRVU19JRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3Vua25vd24nLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJldHR5IHN0YXR1cyBsYWJlbCBzdHJpbmcgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1c0NvZGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2luZ3VsYXIgIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSBzaW5ndWxhciBvciBwbHVyYWwgbGFiZWxcbiAqIHZhbHVlXG4gKiBAcGFyYW0geyhzZW50ZW5jZXxsb3dlcnx1cHBlcil9IHNjaGVtYVxuICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtYXBwZWQgcHJldHR5IGxhYmVsIGZvciB0aGUgZ2l2ZW4gc3RhdHVzIGNvZGUgb3JcbiAqIGEgZm9ybWF0dGVkICd1bmtvd24nIHN0cmluZyBpZiB0aGVyZSBpcyBubyBtYXBwZWQgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgcHJldHR5U3RhdHVzID0gKFxuXHRzdGF0dXNDb2RlLFxuXHRzaW5ndWxhciA9IHRydWUsXG5cdHNjaGVtYSA9IExhYmVsLkZPUk1BVF9TRU5URU5DRV9DQVNFXG4pID0+IHtcblx0cmV0dXJuIFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMWyBzdGF0dXNDb2RlIF0gP1xuXHRcdFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMWyBzdGF0dXNDb2RlIF0uYXNGb3JtYXR0ZWQoIHNpbmd1bGFyLCBzY2hlbWEgKSA6XG5cdFx0U1RBVFVTX1RSQU5TTEFUSU9OX01BUF9BTExbIHN0YXR1cy5VTktOT1dOX1NUQVRVU19JRCBdLmFzRm9ybWF0dGVkKFxuXHRcdFx0c2luZ3VsYXIsXG5cdFx0XHRzY2hlbWFcblx0XHQpO1xufTtcblxuLyoqXG4gKiBFeHBlY3RzIGFuIGFycmF5IG9mIHN0YXR1cyBjb2RlcyBhbmQgcmV0dXJucyBhbiBvYmplY3QgaW5kZXhlZCBieSBjb2RlcyB3aXRoXG4gKiB2YWx1ZXMgYmVpbmcgdGhlIGZvcm1hdHRlZCBwcmV0dHkgbGFiZWxzIGZvciBlYWNoIGNvZGUgYWNjb3JkaW5nIHRvIHRoZVxuICogcHJvdmlkZWQgYXJndW1lbnRzXG4gKlxuICogQHBhcmFtIHtBcnJheX0gc3RhdHVzQ29kZXNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2luZ3VsYXJcbiAqIEBwYXJhbSB7KHNlbnRlbmNlfGxvd2VyfHVwcGVyKX0gc2NoZW1hXG4gKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCBtYXBwaW5nIHN0YXR1cyBjb2RlIHRvIHByZXR0eSBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZXR0eVN0YXR1c2VzID0gKFxuXHRzdGF0dXNDb2Rlcyxcblx0c2luZ3VsYXIgPSB0cnVlLFxuXHRzY2hlbWEgPSBMYWJlbC5GT1JNQVRfU0VOVEVOQ0VfQ0FTRVxuKSA9PiB7XG5cdGlmICggISBpc0FycmF5KCBzdGF0dXNDb2RlcyApICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoICdFeHBlY3QgaW5jb21pbmcgc3RhdHVzQ29kZXMgYXJndW1lbnQnICtcblx0XHRcdCcgdG8gYmUgYW4gYXJyYXknICk7XG5cdH1cblx0Y29uc3QgbWFwcGVkU3RhdHVzZXMgPSB7fTtcblx0c3RhdHVzQ29kZXMuZm9yRWFjaCggKCBzdGF0dXNDb2RlICkgPT4ge1xuXHRcdG1hcHBlZFN0YXR1c2VzWyBzdGF0dXNDb2RlIF0gPSBwcmV0dHlTdGF0dXMoXG5cdFx0XHRzdGF0dXNDb2RlLFxuXHRcdFx0c2luZ3VsYXIsXG5cdFx0XHRzY2hlbWFcblx0XHQpO1xuXHR9ICk7XG5cdHJldHVybiBtYXBwZWRTdGF0dXNlcztcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycyc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9BU0MsXG5cdEFMTE9XRURfT1JERVJfVkFMVUVTLFxufSBmcm9tICcuLi9iYXNlJztcblxuLyoqXG4gKiBEZXNjcmliZWQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge3thdHRyaWJ1dGVzOiAqfX1cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5RGF0YVR5cGVzID0ge1xuXHRxdWVyeURhdGE6IFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdGxpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdG9yZGVyQnk6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0fSApLFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHtcbiAqIFx0e1xuICogXHRcdGF0dHJpYnV0ZXM6IHtcbiAqIFx0XHRcdGxpbWl0OiBudW1iZXIsXG4gKiBcdFx0XHRvcmRlckJ5OiBzdHJpbmcsXG4gKiBcdFx0XHRvcmRlcjogc3RyaW5nLFxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDI1LFxuXHRcdG9yZGVyQnk6ICdzdGF0dXNDb2RlJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfQVNDLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGFuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRzdGF0dXNDb2RlOiAnU1RTX2NvZGUnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiBldmVudHMgZW5kcG9pbnQgcmVxdWVzdCB1c2luZyBwcm92aWRlZFxuICogaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c1R5cGUgXHRJRCBmb3IgdHlwZSBvZiBTdGF0dXMgdG8gcmV0cmlldmVcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgVGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7IHN0YXR1c1R5cGUgfSApID0+IHtcblx0Y29uc3Qgd2hlcmUgPSBbXTtcblx0aWYgKCBzdGF0dXNUeXBlICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtTVFNfdHlwZV09JyArIHN0YXR1c1R5cGUgKTtcblx0fVxuXHRyZXR1cm4gd2hlcmUuam9pbiggJyYnICk7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIHF1ZXJ5IHN0cmluZyBmb3IgdXNlIGJ5IGEgUkVTVCByZXF1ZXN0IGdpdmVuIGEgc2V0IG9mIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IE9iamVjdCB9IHF1ZXJ5RGF0YVxuICogQHJldHVybiB7IHN0cmluZyB9ICBSZXR1cm5zIHRoZSBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVN0cmluZyA9ICggcXVlcnlEYXRhID0ge30gKSA9PiB7XG5cdHF1ZXJ5RGF0YSA9IHsgLi4uZGVmYXVsdFF1ZXJ5RGF0YS5xdWVyeURhdGEsIC4uLnF1ZXJ5RGF0YSB9O1xuXHRyZXR1cm4gYmFzZUdldFF1ZXJ5U3RyaW5nKCBxdWVyeURhdGEsIHdoZXJlQ29uZGl0aW9ucywgbWFwT3JkZXJCeSApO1xufTtcblxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ3RpY2tldCc7XG5cbmV4cG9ydCBjb25zdCBUSUNLRVRfU1RBVFVTX0lEID0ge1xuXHRTT0xEX09VVDogJ1RLUycsXG5cdEVYUElSRUQ6ICdUS0UnLFxuXHRBUkNISVZFRDogJ1RLQScsXG5cdFBFTkRJTkc6ICdUS1AnLFxuXHRPTlNBTEU6ICdUS08nLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJQ0tFVF9TVEFUVVNfSURTID0gdmFsdWVzKCBUSUNLRVRfU1RBVFVTX0lEICk7XG4iLCJleHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdHVzLWhlbHBlcic7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcblx0R1JFQVRFUl9USEFOLFxuXHRHUkVBVEVSX1RIQU5fQU5EX0VRVUFMLFxuXHRMRVNTX1RIQU5fQU5EX0VRVUFMLFxufSBmcm9tICcuLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IG5vd0RhdGVBbmRUaW1lID0gbW9tZW50KCk7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdUS1RfbmFtZScsXG5cdFx0XHQnVEtUX0lEJyxcblx0XHRcdCdzdGFydF9kYXRlJyxcblx0XHRcdCdlbmRfZGF0ZScsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdFx0c2hvd0V4cGlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXHRcdG1vbnRoOiBQcm9wVHlwZXMubW9udGgsXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHRcdHNob3dFeHBpcmVkOiBib29sZWFuXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdzdGFydF9kYXRlJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfREVTQyxcblx0XHRzaG93RXhwaXJlZDogZmFsc2UsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYSB0aWNrZXQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHN0YXJ0X2RhdGU6ICdUS1Rfc3RhcnRfZGF0ZScsXG5cdFx0ZW5kX2RhdGU6ICdUS1RfZW5kX2RhdGUnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiB0aWNrZXRzIGVuZHBvaW50IHJlcXVlc3QgdXNpbmcgcHJvdmlkZWRcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd0V4cGlyZWQgXHRXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGV4cGlyZWQgdGlja2V0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb250aCAgICAgICAgICAgIFJldHVybiB0aWNrZXRzIGZvciB0aGUgZ2l2ZW4gbW9udGguIENhbiBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0aW4gYW55IG1vbnRoIGZvcm1hdCByZWNvZ25pemVkIGJ5IG1vbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGZvckV2ZW50SWQgICAgXHRJRCBvZiBFdmVudCB0byByZXRyaWV2ZSB0aWNrZXRzIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvckRhdGV0aW1lSWQgICAgSUQgb2YgRGF0ZXRpbWUgdG8gcmV0cmlldmUgdGlja2V0cyBmb3JcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAgXHRUaGUgYXNzZW1ibGVkIHdoZXJlIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCB3aGVyZUNvbmRpdGlvbnMgPSAoIHtcblx0Zm9yRXZlbnRJZCA9IDAsXG5cdGZvckRhdGV0aW1lSWQgPSAwLFxuXHRzaG93RXhwaXJlZCA9IGZhbHNlLFxuXHRtb250aCA9ICdub25lJyxcbn0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGlmICggISBzaG93RXhwaXJlZCApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW1RLVF9lbmRfZGF0ZSoqZXhwaXJlZF1bXT0nICsgR1JFQVRFUl9USEFOICtcblx0XHRcdCcmd2hlcmVbVEtUX2VuZF9kYXRlKipleHBpcmVkXVtdPScgK1xuXHRcdFx0bm93RGF0ZUFuZFRpbWUubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0aWYgKCBtb250aCAmJiBtb250aCAhPT0gJ25vbmUnICkge1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbVEtUX3N0YXJ0X2RhdGVdW109JyArIEdSRUFURVJfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtUS1Rfc3RhcnRfZGF0ZV1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLnN0YXJ0T2YoICdtb250aCcgKS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW1RLVF9lbmRfZGF0ZV1bXT0nICsgTEVTU19USEFOX0FORF9FUVVBTCArXG5cdFx0XHQnJndoZXJlW1RLVF9lbmRfZGF0ZV1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLmVuZE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0Zm9yRXZlbnRJZCA9IHBhcnNlSW50KCBmb3JFdmVudElkLCAxMCApO1xuXHRpZiAoIGZvckV2ZW50SWQgIT09IDAgJiYgISBpc05hTiggZm9yRXZlbnRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtEYXRldGltZS5FdmVudC5FVlRfSURdPScgKyBmb3JFdmVudElkICk7XG5cdH1cblx0Zm9yRGF0ZXRpbWVJZCA9IHBhcnNlSW50KCBmb3JEYXRldGltZUlkLCAxMCApO1xuXHRpZiAoIGZvckRhdGV0aW1lSWQgIT09IDAgJiYgISBpc05hTiggZm9yRGF0ZXRpbWVJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtEYXRldGltZS5EVFRfSURdPScgKyBmb3JEYXRldGltZUlkICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBNT0RFTF9OQU1FLCBUSUNLRVRfU1RBVFVTX0lEIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn1cbiAqL1xuY29uc3QgYXNzZXJ0VGlja2V0RW50aXR5ID0gKCBUaWNrZXRFbnRpdHkgKSA9PiB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggVGlja2V0RW50aXR5LCBNT0RFTF9OQU1FICkgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdCdUaGUgcHJvdmlkZWQgZW50aXR5IGlzIG5vdCBhIHRpY2tldCBpbnN0YW5jZSdcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGlja2V0IGlzIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHB1cmNoYXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc09uU2FsZSA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRhc3NlcnRUaWNrZXRFbnRpdHkoIFRpY2tldEVudGl0eSApO1xuXHRyZXR1cm4gISBpc0FyY2hpdmVkKCBUaWNrZXRFbnRpdHkgKSAmJlxuXHRcdFRpY2tldEVudGl0eS5zdGFydERhdGUuZGlmZk5vdygpIDwgMCAmJlxuXHRcdFRpY2tldEVudGl0eS5lbmREYXRlLmRpZmZOb3coKSA+IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGlja2V0IGNhbiBubyBsb25nZXIgYmUgcHVyY2hhc2VkXG4gKi9cbmV4cG9ydCBjb25zdCBpc0V4cGlyZWQgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0YXNzZXJ0VGlja2V0RW50aXR5KCBUaWNrZXRFbnRpdHkgKTtcblx0cmV0dXJuIFRpY2tldEVudGl0eS5lbmREYXRlLmRpZmZOb3coKSA8IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGlja2V0cyBzb2xkIG1lZXRzIG9yIGV4Y2VlZHMgYXZhaWxhYmxlIHF1YW50aXR5XG4gKi9cbmV4cG9ydCBjb25zdCBpc1NvbGRPdXQgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0YXNzZXJ0VGlja2V0RW50aXR5KCBUaWNrZXRFbnRpdHkgKTtcblx0Y29uc3QgcXR5ID0gVGlja2V0RW50aXR5LnF0eTtcblx0cmV0dXJuICggcXR5ICE9PSBudWxsICYmIHF0eSAhPT0gJ0lORicgJiYgcXR5ICE9PSBJbmZpbml0eSApICYmXG5cdFx0VGlja2V0RW50aXR5LnNvbGQgPj0gcXR5O1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBcdHRydWUgaWYgdGlja2V0IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZvciBwdXJjaGFzZSxcbiAqIFx0XHRcdFx0XHRcdGJ1dCB3aWxsIGJlIGF0IHNvbWUgZGF0ZSBpbiB0aGUgZnV0dXJlXG4gKi9cbmV4cG9ydCBjb25zdCBpc1BlbmRpbmcgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0YXNzZXJ0VGlja2V0RW50aXR5KCBUaWNrZXRFbnRpdHkgKTtcblx0cmV0dXJuICEgaXNBcmNoaXZlZCggVGlja2V0RW50aXR5ICkgJiZcblx0XHRUaWNrZXRFbnRpdHkuc3RhcnREYXRlLmRpZmZOb3coKSA+IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGlja2V0IGlzIGFyY2hpdmVkXG4gKi9cbmV4cG9ydCBjb25zdCBpc0FyY2hpdmVkID0gKCBUaWNrZXRFbnRpdHkgKSA9PiB7XG5cdGFzc2VydFRpY2tldEVudGl0eSggVGlja2V0RW50aXR5ICk7XG5cdHJldHVybiBUaWNrZXRFbnRpdHkuZGVsZXRlZDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSBzdGF0dXMgSURcbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXR1cyA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRhc3NlcnRUaWNrZXRFbnRpdHkoIFRpY2tldEVudGl0eSApO1xuXHRpZiAoIGlzQXJjaGl2ZWQoIFRpY2tldEVudGl0eSApICkge1xuXHRcdHJldHVybiBUSUNLRVRfU1RBVFVTX0lELkFSQ0hJVkVEO1xuXHR9XG5cdGlmICggaXNTb2xkT3V0KCBUaWNrZXRFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gVElDS0VUX1NUQVRVU19JRC5TT0xEX09VVDtcblx0fVxuXHRpZiAoIGlzRXhwaXJlZCggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIFRJQ0tFVF9TVEFUVVNfSUQuRVhQSVJFRDtcblx0fVxuXHRpZiAoIGlzUGVuZGluZyggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIFRJQ0tFVF9TVEFUVVNfSUQuUEVORElORztcblx0fVxuXHRpZiAoIGlzT25TYWxlKCBUaWNrZXRFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gVElDS0VUX1NUQVRVU19JRC5PTlNBTEU7XG5cdH1cblx0cmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRpY2tldCBzdGF0dXNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRpY2tldFN0YXR1c1RleHRMYWJlbCA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRsZXQgdGlja2V0U3RhdHVzID0gJyc7XG5cdHN3aXRjaCAoIHN0YXR1cyggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0Y2FzZSBUSUNLRVRfU1RBVFVTX0lELlNPTERfT1VUIDpcblx0XHRcdHRpY2tldFN0YXR1cyA9IF9fKCAnc29sZCBvdXQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRJQ0tFVF9TVEFUVVNfSUQuRVhQSVJFRCA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ2V4cGlyZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRJQ0tFVF9TVEFUVVNfSUQuUEVORElORyA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ3BlbmRpbmcnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRJQ0tFVF9TVEFUVVNfSUQuT05TQUxFIDpcblx0XHRcdHRpY2tldFN0YXR1cyA9IF9fKCAnb24gc2FsZScsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVElDS0VUX1NUQVRVU19JRC5BUkNISVZFRCA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ2FyY2hpdmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIHRpY2tldFN0YXR1cztcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSAgICBDU1MgY2xhc3MgZm9yIHRoZSBiYWNrZ3JvdW5kIGNvbG9yXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCYWNrZ3JvdW5kQ29sb3JDbGFzcyA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRyZXR1cm4gYGVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLSR7IHN0YXR1cyggVGlja2V0RW50aXR5ICkgfWA7XG59O1xuIiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlczsiLCJmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgYXJyMltpXSA9IGFycltpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlczsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mXCIpO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcikgPT09IFwiW29iamVjdCBBcmd1bWVudHNdXCIpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXk7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVJlc3Q7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkOyIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL2RlZmluZVByb3BlcnR5XCIpO1xuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3duS2V5cyA9IG93bktleXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBvd25LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFNwcmVhZDsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTtcblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjsiLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXRcIik7XG5cbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3RcIik7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5OyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheTsiLCJmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcikgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbi8vIFVzZWQgZm9yIHNldHRpbmcgcHJvdG90eXBlIG1ldGhvZHMgdGhhdCBJRTggY2hva2VzIG9uLlxudmFyIERFTEVURSA9ICdkZWxldGUnO1xuXG4vLyBDb25zdGFudHMgZGVzY3JpYmluZyB0aGUgc2l6ZSBvZiB0cmllIG5vZGVzLlxudmFyIFNISUZUID0gNTsgLy8gUmVzdWx0ZWQgaW4gYmVzdCBwZXJmb3JtYW5jZSBhZnRlciBfX19fX18/XG52YXIgU0laRSA9IDEgPDwgU0hJRlQ7XG52YXIgTUFTSyA9IFNJWkUgLSAxO1xuXG4vLyBBIGNvbnNpc3RlbnQgc2hhcmVkIHZhbHVlIHJlcHJlc2VudGluZyBcIm5vdCBzZXRcIiB3aGljaCBlcXVhbHMgbm90aGluZyBvdGhlclxuLy8gdGhhbiBpdHNlbGYsIGFuZCBub3RoaW5nIHRoYXQgY291bGQgYmUgcHJvdmlkZWQgZXh0ZXJuYWxseS5cbnZhciBOT1RfU0VUID0ge307XG5cbi8vIEJvb2xlYW4gcmVmZXJlbmNlcywgUm91Z2ggZXF1aXZhbGVudCBvZiBgYm9vbCAmYC5cbmZ1bmN0aW9uIE1ha2VSZWYoKSB7XG4gIHJldHVybiB7IHZhbHVlOiBmYWxzZSB9O1xufVxuXG5mdW5jdGlvbiBTZXRSZWYocmVmKSB7XG4gIGlmIChyZWYpIHtcbiAgICByZWYudmFsdWUgPSB0cnVlO1xuICB9XG59XG5cbi8vIEEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIHZhbHVlIHJlcHJlc2VudGluZyBhbiBcIm93bmVyXCIgZm9yIHRyYW5zaWVudCB3cml0ZXNcbi8vIHRvIHRyaWVzLiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgb25seSBldmVyIGVxdWFsIGl0c2VsZiwgYW5kIHdpbGwgbm90IGVxdWFsXG4vLyB0aGUgcmV0dXJuIG9mIGFueSBzdWJzZXF1ZW50IGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbmZ1bmN0aW9uIE93bmVySUQoKSB7fVxuXG5mdW5jdGlvbiBlbnN1cmVTaXplKGl0ZXIpIHtcbiAgaWYgKGl0ZXIuc2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaXRlci5zaXplID0gaXRlci5fX2l0ZXJhdGUocmV0dXJuVHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIGl0ZXIuc2l6ZTtcbn1cblxuZnVuY3Rpb24gd3JhcEluZGV4KGl0ZXIsIGluZGV4KSB7XG4gIC8vIFRoaXMgaW1wbGVtZW50cyBcImlzIGFycmF5IGluZGV4XCIgd2hpY2ggdGhlIEVDTUFTdHJpbmcgc3BlYyBkZWZpbmVzIGFzOlxuICAvL1xuICAvLyAgICAgQSBTdHJpbmcgcHJvcGVydHkgbmFtZSBQIGlzIGFuIGFycmF5IGluZGV4IGlmIGFuZCBvbmx5IGlmXG4gIC8vICAgICBUb1N0cmluZyhUb1VpbnQzMihQKSkgaXMgZXF1YWwgdG8gUCBhbmQgVG9VaW50MzIoUCkgaXMgbm90IGVxdWFsXG4gIC8vICAgICB0byAyXjMy4oiSMS5cbiAgLy9cbiAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWFycmF5LWV4b3RpYy1vYmplY3RzXG4gIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgdmFyIHVpbnQzMkluZGV4ID0gaW5kZXggPj4+IDA7IC8vIE4gPj4+IDAgaXMgc2hvcnRoYW5kIGZvciBUb1VpbnQzMlxuICAgIGlmICgnJyArIHVpbnQzMkluZGV4ICE9PSBpbmRleCB8fCB1aW50MzJJbmRleCA9PT0gNDI5NDk2NzI5NSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgaW5kZXggPSB1aW50MzJJbmRleDtcbiAgfVxuICByZXR1cm4gaW5kZXggPCAwID8gZW5zdXJlU2l6ZShpdGVyKSArIGluZGV4IDogaW5kZXg7XG59XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB3aG9sZVNsaWNlKGJlZ2luLCBlbmQsIHNpemUpIHtcbiAgcmV0dXJuIChcbiAgICAoKGJlZ2luID09PSAwICYmICFpc05lZyhiZWdpbikpIHx8XG4gICAgICAoc2l6ZSAhPT0gdW5kZWZpbmVkICYmIGJlZ2luIDw9IC1zaXplKSkgJiZcbiAgICAoZW5kID09PSB1bmRlZmluZWQgfHwgKHNpemUgIT09IHVuZGVmaW5lZCAmJiBlbmQgPj0gc2l6ZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVCZWdpbihiZWdpbiwgc2l6ZSkge1xuICByZXR1cm4gcmVzb2x2ZUluZGV4KGJlZ2luLCBzaXplLCAwKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUVuZChlbmQsIHNpemUpIHtcbiAgcmV0dXJuIHJlc29sdmVJbmRleChlbmQsIHNpemUsIHNpemUpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlSW5kZXgoaW5kZXgsIHNpemUsIGRlZmF1bHRJbmRleCkge1xuICAvLyBTYW5pdGl6ZSBpbmRpY2VzIHVzaW5nIHRoaXMgc2hvcnRoYW5kIGZvciBUb0ludDMyKGFyZ3VtZW50KVxuICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9pbnQzMlxuICByZXR1cm4gaW5kZXggPT09IHVuZGVmaW5lZFxuICAgID8gZGVmYXVsdEluZGV4XG4gICAgOiBpc05lZyhpbmRleClcbiAgICAgID8gc2l6ZSA9PT0gSW5maW5pdHlcbiAgICAgICAgPyBzaXplXG4gICAgICAgIDogTWF0aC5tYXgoMCwgc2l6ZSArIGluZGV4KSB8IDBcbiAgICAgIDogc2l6ZSA9PT0gdW5kZWZpbmVkIHx8IHNpemUgPT09IGluZGV4XG4gICAgICAgID8gaW5kZXhcbiAgICAgICAgOiBNYXRoLm1pbihzaXplLCBpbmRleCkgfCAwO1xufVxuXG5mdW5jdGlvbiBpc05lZyh2YWx1ZSkge1xuICAvLyBBY2NvdW50IGZvciAtMCB3aGljaCBpcyBuZWdhdGl2ZSwgYnV0IG5vdCBsZXNzIHRoYW4gMC5cbiAgcmV0dXJuIHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlID09PSAtSW5maW5pdHkpO1xufVxuXG4vLyBOb3RlOiB2YWx1ZSBpcyB1bmNoYW5nZWQgdG8gbm90IGJyZWFrIGltbXV0YWJsZS1kZXZ0b29scy5cbnZhciBJU19DT0xMRUNUSU9OX1NZTUJPTCA9ICdAQF9fSU1NVVRBQkxFX0lURVJBQkxFX19AQCc7XG5cbmZ1bmN0aW9uIGlzQ29sbGVjdGlvbihtYXliZUNvbGxlY3Rpb24pIHtcbiAgcmV0dXJuIEJvb2xlYW4obWF5YmVDb2xsZWN0aW9uICYmIG1heWJlQ29sbGVjdGlvbltJU19DT0xMRUNUSU9OX1NZTUJPTF0pO1xufVxuXG52YXIgSVNfS0VZRURfU1lNQk9MID0gJ0BAX19JTU1VVEFCTEVfS0VZRURfX0BAJztcblxuZnVuY3Rpb24gaXNLZXllZChtYXliZUtleWVkKSB7XG4gIHJldHVybiBCb29sZWFuKG1heWJlS2V5ZWQgJiYgbWF5YmVLZXllZFtJU19LRVlFRF9TWU1CT0xdKTtcbn1cblxudmFyIElTX0lOREVYRURfU1lNQk9MID0gJ0BAX19JTU1VVEFCTEVfSU5ERVhFRF9fQEAnO1xuXG5mdW5jdGlvbiBpc0luZGV4ZWQobWF5YmVJbmRleGVkKSB7XG4gIHJldHVybiBCb29sZWFuKG1heWJlSW5kZXhlZCAmJiBtYXliZUluZGV4ZWRbSVNfSU5ERVhFRF9TWU1CT0xdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3NvY2lhdGl2ZShtYXliZUFzc29jaWF0aXZlKSB7XG4gIHJldHVybiBpc0tleWVkKG1heWJlQXNzb2NpYXRpdmUpIHx8IGlzSW5kZXhlZChtYXliZUFzc29jaWF0aXZlKTtcbn1cblxudmFyIENvbGxlY3Rpb24gPSBmdW5jdGlvbiBDb2xsZWN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc0NvbGxlY3Rpb24odmFsdWUpID8gdmFsdWUgOiBTZXEodmFsdWUpO1xufTtcblxudmFyIEtleWVkQ29sbGVjdGlvbiA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKENvbGxlY3Rpb24pIHtcbiAgZnVuY3Rpb24gS2V5ZWRDb2xsZWN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzS2V5ZWQodmFsdWUpID8gdmFsdWUgOiBLZXllZFNlcSh2YWx1ZSk7XG4gIH1cblxuICBpZiAoIENvbGxlY3Rpb24gKSBLZXllZENvbGxlY3Rpb24uX19wcm90b19fID0gQ29sbGVjdGlvbjtcbiAgS2V5ZWRDb2xsZWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGUgKTtcbiAgS2V5ZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEtleWVkQ29sbGVjdGlvbjtcblxuICByZXR1cm4gS2V5ZWRDb2xsZWN0aW9uO1xufShDb2xsZWN0aW9uKSk7XG5cbnZhciBJbmRleGVkQ29sbGVjdGlvbiA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKENvbGxlY3Rpb24pIHtcbiAgZnVuY3Rpb24gSW5kZXhlZENvbGxlY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gaXNJbmRleGVkKHZhbHVlKSA/IHZhbHVlIDogSW5kZXhlZFNlcSh2YWx1ZSk7XG4gIH1cblxuICBpZiAoIENvbGxlY3Rpb24gKSBJbmRleGVkQ29sbGVjdGlvbi5fX3Byb3RvX18gPSBDb2xsZWN0aW9uO1xuICBJbmRleGVkQ29sbGVjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlICk7XG4gIEluZGV4ZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEluZGV4ZWRDb2xsZWN0aW9uO1xuXG4gIHJldHVybiBJbmRleGVkQ29sbGVjdGlvbjtcbn0oQ29sbGVjdGlvbikpO1xuXG52YXIgU2V0Q29sbGVjdGlvbiA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKENvbGxlY3Rpb24pIHtcbiAgZnVuY3Rpb24gU2V0Q29sbGVjdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBpc0NvbGxlY3Rpb24odmFsdWUpICYmICFpc0Fzc29jaWF0aXZlKHZhbHVlKSA/IHZhbHVlIDogU2V0U2VxKHZhbHVlKTtcbiAgfVxuXG4gIGlmICggQ29sbGVjdGlvbiApIFNldENvbGxlY3Rpb24uX19wcm90b19fID0gQ29sbGVjdGlvbjtcbiAgU2V0Q29sbGVjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlICk7XG4gIFNldENvbGxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2V0Q29sbGVjdGlvbjtcblxuICByZXR1cm4gU2V0Q29sbGVjdGlvbjtcbn0oQ29sbGVjdGlvbikpO1xuXG5Db2xsZWN0aW9uLktleWVkID0gS2V5ZWRDb2xsZWN0aW9uO1xuQ29sbGVjdGlvbi5JbmRleGVkID0gSW5kZXhlZENvbGxlY3Rpb247XG5Db2xsZWN0aW9uLlNldCA9IFNldENvbGxlY3Rpb247XG5cbnZhciBJU19TRVFfU1lNQk9MID0gJ0BAX19JTU1VVEFCTEVfU0VRX19AQCc7XG5cbmZ1bmN0aW9uIGlzU2VxKG1heWJlU2VxKSB7XG4gIHJldHVybiBCb29sZWFuKG1heWJlU2VxICYmIG1heWJlU2VxW0lTX1NFUV9TWU1CT0xdKTtcbn1cblxudmFyIElTX1JFQ09SRF9TWU1CT0wgPSAnQEBfX0lNTVVUQUJMRV9SRUNPUkRfX0BAJztcblxuZnVuY3Rpb24gaXNSZWNvcmQobWF5YmVSZWNvcmQpIHtcbiAgcmV0dXJuIEJvb2xlYW4obWF5YmVSZWNvcmQgJiYgbWF5YmVSZWNvcmRbSVNfUkVDT1JEX1NZTUJPTF0pO1xufVxuXG5mdW5jdGlvbiBpc0ltbXV0YWJsZShtYXliZUltbXV0YWJsZSkge1xuICByZXR1cm4gaXNDb2xsZWN0aW9uKG1heWJlSW1tdXRhYmxlKSB8fCBpc1JlY29yZChtYXliZUltbXV0YWJsZSk7XG59XG5cbnZhciBJU19PUkRFUkVEX1NZTUJPTCA9ICdAQF9fSU1NVVRBQkxFX09SREVSRURfX0BAJztcblxuZnVuY3Rpb24gaXNPcmRlcmVkKG1heWJlT3JkZXJlZCkge1xuICByZXR1cm4gQm9vbGVhbihtYXliZU9yZGVyZWQgJiYgbWF5YmVPcmRlcmVkW0lTX09SREVSRURfU1lNQk9MXSk7XG59XG5cbnZhciBJVEVSQVRFX0tFWVMgPSAwO1xudmFyIElURVJBVEVfVkFMVUVTID0gMTtcbnZhciBJVEVSQVRFX0VOVFJJRVMgPSAyO1xuXG52YXIgUkVBTF9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcblxudmFyIElURVJBVE9SX1NZTUJPTCA9IFJFQUxfSVRFUkFUT1JfU1lNQk9MIHx8IEZBVVhfSVRFUkFUT1JfU1lNQk9MO1xuXG52YXIgSXRlcmF0b3IgPSBmdW5jdGlvbiBJdGVyYXRvcihuZXh0KSB7XG4gIHRoaXMubmV4dCA9IG5leHQ7XG59O1xuXG5JdGVyYXRvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHJldHVybiAnW0l0ZXJhdG9yXSc7XG59O1xuXG5JdGVyYXRvci5LRVlTID0gSVRFUkFURV9LRVlTO1xuSXRlcmF0b3IuVkFMVUVTID0gSVRFUkFURV9WQUxVRVM7XG5JdGVyYXRvci5FTlRSSUVTID0gSVRFUkFURV9FTlRSSUVTO1xuXG5JdGVyYXRvci5wcm90b3R5cGUuaW5zcGVjdCA9IEl0ZXJhdG9yLnByb3RvdHlwZS50b1NvdXJjZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50b1N0cmluZygpO1xufTtcbkl0ZXJhdG9yLnByb3RvdHlwZVtJVEVSQVRPUl9TWU1CT0xdID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gaXRlcmF0b3JWYWx1ZSh0eXBlLCBrLCB2LCBpdGVyYXRvclJlc3VsdCkge1xuICB2YXIgdmFsdWUgPSB0eXBlID09PSAwID8gayA6IHR5cGUgPT09IDEgPyB2IDogW2ssIHZdO1xuICBpdGVyYXRvclJlc3VsdFxuICAgID8gKGl0ZXJhdG9yUmVzdWx0LnZhbHVlID0gdmFsdWUpXG4gICAgOiAoaXRlcmF0b3JSZXN1bHQgPSB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICB9KTtcbiAgcmV0dXJuIGl0ZXJhdG9yUmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpdGVyYXRvckRvbmUoKSB7XG4gIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbn1cblxuZnVuY3Rpb24gaGFzSXRlcmF0b3IobWF5YmVJdGVyYWJsZSkge1xuICByZXR1cm4gISFnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpO1xufVxuXG5mdW5jdGlvbiBpc0l0ZXJhdG9yKG1heWJlSXRlcmF0b3IpIHtcbiAgcmV0dXJuIG1heWJlSXRlcmF0b3IgJiYgdHlwZW9mIG1heWJlSXRlcmF0b3IubmV4dCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gZ2V0SXRlcmF0b3IoaXRlcmFibGUpIHtcbiAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGl0ZXJhYmxlKTtcbiAgcmV0dXJuIGl0ZXJhdG9yRm4gJiYgaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlKTtcbn1cblxuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihpdGVyYWJsZSkge1xuICB2YXIgaXRlcmF0b3JGbiA9XG4gICAgaXRlcmFibGUgJiZcbiAgICAoKFJFQUxfSVRFUkFUT1JfU1lNQk9MICYmIGl0ZXJhYmxlW1JFQUxfSVRFUkFUT1JfU1lNQk9MXSkgfHxcbiAgICAgIGl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBpdGVyYXRvckZuO1xuICB9XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIE51bWJlci5pc0ludGVnZXIodmFsdWUubGVuZ3RoKSAmJlxuICAgIHZhbHVlLmxlbmd0aCA+PSAwICYmXG4gICAgKHZhbHVlLmxlbmd0aCA9PT0gMFxuICAgICAgPyAvLyBPbmx5IHtsZW5ndGg6IDB9IGlzIGNvbnNpZGVyZWQgQXJyYXktbGlrZS5cbiAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMVxuICAgICAgOiAvLyBBbiBvYmplY3QgaXMgb25seSBBcnJheS1saWtlIGlmIGl0IGhhcyBhIHByb3BlcnR5IHdoZXJlIHRoZSBsYXN0IHZhbHVlXG4gICAgICAgIC8vIGluIHRoZSBhcnJheS1saWtlIG1heSBiZSBmb3VuZCAod2hpY2ggY291bGQgYmUgdW5kZWZpbmVkKS5cbiAgICAgICAgdmFsdWUuaGFzT3duUHJvcGVydHkodmFsdWUubGVuZ3RoIC0gMSkpXG4gICk7XG59XG5cbnZhciBTZXEgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChDb2xsZWN0aW9uJCQxKSB7XG4gIGZ1bmN0aW9uIFNlcSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkXG4gICAgICA/IGVtcHR5U2VxdWVuY2UoKVxuICAgICAgOiBpc0ltbXV0YWJsZSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS50b1NlcSgpXG4gICAgICAgIDogc2VxRnJvbVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIGlmICggQ29sbGVjdGlvbiQkMSApIFNlcS5fX3Byb3RvX18gPSBDb2xsZWN0aW9uJCQxO1xuICBTZXEucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ29sbGVjdGlvbiQkMSAmJiBDb2xsZWN0aW9uJCQxLnByb3RvdHlwZSApO1xuICBTZXEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VxO1xuXG4gIFNlcS5wcm90b3R5cGUudG9TZXEgPSBmdW5jdGlvbiB0b1NlcSAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgU2VxLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCdTZXEgeycsICd9Jyk7XG4gIH07XG5cbiAgU2VxLnByb3RvdHlwZS5jYWNoZVJlc3VsdCA9IGZ1bmN0aW9uIGNhY2hlUmVzdWx0ICgpIHtcbiAgICBpZiAoIXRoaXMuX2NhY2hlICYmIHRoaXMuX19pdGVyYXRlVW5jYWNoZWQpIHtcbiAgICAgIHRoaXMuX2NhY2hlID0gdGhpcy5lbnRyeVNlcSgpLnRvQXJyYXkoKTtcbiAgICAgIHRoaXMuc2l6ZSA9IHRoaXMuX2NhY2hlLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gYWJzdHJhY3QgX19pdGVyYXRlVW5jYWNoZWQoZm4sIHJldmVyc2UpXG5cbiAgU2VxLnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICB2YXIgc2l6ZSA9IGNhY2hlLmxlbmd0aDtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHdoaWxlIChpICE9PSBzaXplKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGNhY2hlW3JldmVyc2UgPyBzaXplIC0gKytpIDogaSsrXTtcbiAgICAgICAgaWYgKGZuKGVudHJ5WzFdLCBlbnRyeVswXSwgdGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fX2l0ZXJhdGVVbmNhY2hlZChmbiwgcmV2ZXJzZSk7XG4gIH07XG5cbiAgLy8gYWJzdHJhY3QgX19pdGVyYXRvclVuY2FjaGVkKHR5cGUsIHJldmVyc2UpXG5cbiAgU2VxLnByb3RvdHlwZS5fX2l0ZXJhdG9yID0gZnVuY3Rpb24gX19pdGVyYXRvciAodHlwZSwgcmV2ZXJzZSkge1xuICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuICAgIGlmIChjYWNoZSkge1xuICAgICAgdmFyIHNpemUgPSBjYWNoZS5sZW5ndGg7XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGkgPT09IHNpemUpIHtcbiAgICAgICAgICByZXR1cm4gaXRlcmF0b3JEb25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVudHJ5ID0gY2FjaGVbcmV2ZXJzZSA/IHNpemUgLSArK2kgOiBpKytdO1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JWYWx1ZSh0eXBlLCBlbnRyeVswXSwgZW50cnlbMV0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9faXRlcmF0b3JVbmNhY2hlZCh0eXBlLCByZXZlcnNlKTtcbiAgfTtcblxuICByZXR1cm4gU2VxO1xufShDb2xsZWN0aW9uKSk7XG5cbnZhciBLZXllZFNlcSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKFNlcSkge1xuICBmdW5jdGlvbiBLZXllZFNlcSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkXG4gICAgICA/IGVtcHR5U2VxdWVuY2UoKS50b0tleWVkU2VxKClcbiAgICAgIDogaXNDb2xsZWN0aW9uKHZhbHVlKVxuICAgICAgICA/IGlzS2V5ZWQodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS50b1NlcSgpXG4gICAgICAgICAgOiB2YWx1ZS5mcm9tRW50cnlTZXEoKVxuICAgICAgICA6IGlzUmVjb3JkKHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUudG9TZXEoKVxuICAgICAgICAgIDoga2V5ZWRTZXFGcm9tVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgaWYgKCBTZXEgKSBLZXllZFNlcS5fX3Byb3RvX18gPSBTZXE7XG4gIEtleWVkU2VxLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFNlcSAmJiBTZXEucHJvdG90eXBlICk7XG4gIEtleWVkU2VxLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEtleWVkU2VxO1xuXG4gIEtleWVkU2VxLnByb3RvdHlwZS50b0tleWVkU2VxID0gZnVuY3Rpb24gdG9LZXllZFNlcSAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcmV0dXJuIEtleWVkU2VxO1xufShTZXEpKTtcblxudmFyIEluZGV4ZWRTZXEgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChTZXEpIHtcbiAgZnVuY3Rpb24gSW5kZXhlZFNlcSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkXG4gICAgICA/IGVtcHR5U2VxdWVuY2UoKVxuICAgICAgOiBpc0NvbGxlY3Rpb24odmFsdWUpXG4gICAgICAgID8gaXNLZXllZCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLmVudHJ5U2VxKClcbiAgICAgICAgICA6IHZhbHVlLnRvSW5kZXhlZFNlcSgpXG4gICAgICAgIDogaXNSZWNvcmQodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS50b1NlcSgpLmVudHJ5U2VxKClcbiAgICAgICAgICA6IGluZGV4ZWRTZXFGcm9tVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgaWYgKCBTZXEgKSBJbmRleGVkU2VxLl9fcHJvdG9fXyA9IFNlcTtcbiAgSW5kZXhlZFNlcS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBTZXEgJiYgU2VxLnByb3RvdHlwZSApO1xuICBJbmRleGVkU2VxLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEluZGV4ZWRTZXE7XG5cbiAgSW5kZXhlZFNlcS5vZiA9IGZ1bmN0aW9uIG9mICgvKi4uLnZhbHVlcyovKSB7XG4gICAgcmV0dXJuIEluZGV4ZWRTZXEoYXJndW1lbnRzKTtcbiAgfTtcblxuICBJbmRleGVkU2VxLnByb3RvdHlwZS50b0luZGV4ZWRTZXEgPSBmdW5jdGlvbiB0b0luZGV4ZWRTZXEgKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEluZGV4ZWRTZXEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLl9fdG9TdHJpbmcoJ1NlcSBbJywgJ10nKTtcbiAgfTtcblxuICByZXR1cm4gSW5kZXhlZFNlcTtcbn0oU2VxKSk7XG5cbnZhciBTZXRTZXEgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChTZXEpIHtcbiAgZnVuY3Rpb24gU2V0U2VxKHZhbHVlKSB7XG4gICAgcmV0dXJuIChpc0NvbGxlY3Rpb24odmFsdWUpICYmICFpc0Fzc29jaWF0aXZlKHZhbHVlKVxuICAgICAgPyB2YWx1ZVxuICAgICAgOiBJbmRleGVkU2VxKHZhbHVlKVxuICAgICkudG9TZXRTZXEoKTtcbiAgfVxuXG4gIGlmICggU2VxICkgU2V0U2VxLl9fcHJvdG9fXyA9IFNlcTtcbiAgU2V0U2VxLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFNlcSAmJiBTZXEucHJvdG90eXBlICk7XG4gIFNldFNlcS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXRTZXE7XG5cbiAgU2V0U2VxLm9mID0gZnVuY3Rpb24gb2YgKC8qLi4udmFsdWVzKi8pIHtcbiAgICByZXR1cm4gU2V0U2VxKGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgU2V0U2VxLnByb3RvdHlwZS50b1NldFNlcSA9IGZ1bmN0aW9uIHRvU2V0U2VxICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICByZXR1cm4gU2V0U2VxO1xufShTZXEpKTtcblxuU2VxLmlzU2VxID0gaXNTZXE7XG5TZXEuS2V5ZWQgPSBLZXllZFNlcTtcblNlcS5TZXQgPSBTZXRTZXE7XG5TZXEuSW5kZXhlZCA9IEluZGV4ZWRTZXE7XG5cblNlcS5wcm90b3R5cGVbSVNfU0VRX1NZTUJPTF0gPSB0cnVlO1xuXG4vLyAjcHJhZ21hIFJvb3QgU2VxdWVuY2VzXG5cbnZhciBBcnJheVNlcSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEluZGV4ZWRTZXEpIHtcbiAgZnVuY3Rpb24gQXJyYXlTZXEoYXJyYXkpIHtcbiAgICB0aGlzLl9hcnJheSA9IGFycmF5O1xuICAgIHRoaXMuc2l6ZSA9IGFycmF5Lmxlbmd0aDtcbiAgfVxuXG4gIGlmICggSW5kZXhlZFNlcSApIEFycmF5U2VxLl9fcHJvdG9fXyA9IEluZGV4ZWRTZXE7XG4gIEFycmF5U2VxLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEluZGV4ZWRTZXEgJiYgSW5kZXhlZFNlcS5wcm90b3R5cGUgKTtcbiAgQXJyYXlTZXEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXJyYXlTZXE7XG5cbiAgQXJyYXlTZXEucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoaW5kZXgsIG5vdFNldFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKGluZGV4KSA/IHRoaXMuX2FycmF5W3dyYXBJbmRleCh0aGlzLCBpbmRleCldIDogbm90U2V0VmFsdWU7XG4gIH07XG5cbiAgQXJyYXlTZXEucHJvdG90eXBlLl9faXRlcmF0ZSA9IGZ1bmN0aW9uIF9faXRlcmF0ZSAoZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgYXJyYXkgPSB0aGlzLl9hcnJheTtcbiAgICB2YXIgc2l6ZSA9IGFycmF5Lmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgIT09IHNpemUpIHtcbiAgICAgIHZhciBpaSA9IHJldmVyc2UgPyBzaXplIC0gKytpIDogaSsrO1xuICAgICAgaWYgKGZuKGFycmF5W2lpXSwgaWksIHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGk7XG4gIH07XG5cbiAgQXJyYXlTZXEucHJvdG90eXBlLl9faXRlcmF0b3IgPSBmdW5jdGlvbiBfX2l0ZXJhdG9yICh0eXBlLCByZXZlcnNlKSB7XG4gICAgdmFyIGFycmF5ID0gdGhpcy5fYXJyYXk7XG4gICAgdmFyIHNpemUgPSBhcnJheS5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGkgPT09IHNpemUpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yRG9uZSgpO1xuICAgICAgfVxuICAgICAgdmFyIGlpID0gcmV2ZXJzZSA/IHNpemUgLSArK2kgOiBpKys7XG4gICAgICByZXR1cm4gaXRlcmF0b3JWYWx1ZSh0eXBlLCBpaSwgYXJyYXlbaWldKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gQXJyYXlTZXE7XG59KEluZGV4ZWRTZXEpKTtcblxudmFyIE9iamVjdFNlcSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEtleWVkU2VxKSB7XG4gIGZ1bmN0aW9uIE9iamVjdFNlcShvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG4gICAgdGhpcy5fb2JqZWN0ID0gb2JqZWN0O1xuICAgIHRoaXMuX2tleXMgPSBrZXlzO1xuICAgIHRoaXMuc2l6ZSA9IGtleXMubGVuZ3RoO1xuICB9XG5cbiAgaWYgKCBLZXllZFNlcSApIE9iamVjdFNlcS5fX3Byb3RvX18gPSBLZXllZFNlcTtcbiAgT2JqZWN0U2VxLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEtleWVkU2VxICYmIEtleWVkU2VxLnByb3RvdHlwZSApO1xuICBPYmplY3RTZXEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gT2JqZWN0U2VxO1xuXG4gIE9iamVjdFNlcS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChrZXksIG5vdFNldFZhbHVlKSB7XG4gICAgaWYgKG5vdFNldFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBub3RTZXRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29iamVjdFtrZXldO1xuICB9O1xuXG4gIE9iamVjdFNlcS5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChrZXkpIHtcbiAgICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9vYmplY3QsIGtleSk7XG4gIH07XG5cbiAgT2JqZWN0U2VxLnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMuX29iamVjdDtcbiAgICB2YXIga2V5cyA9IHRoaXMuX2tleXM7XG4gICAgdmFyIHNpemUgPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgIT09IHNpemUpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW3JldmVyc2UgPyBzaXplIC0gKytpIDogaSsrXTtcbiAgICAgIGlmIChmbihvYmplY3Rba2V5XSwga2V5LCB0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpO1xuICB9O1xuXG4gIE9iamVjdFNlcS5wcm90b3R5cGUuX19pdGVyYXRvciA9IGZ1bmN0aW9uIF9faXRlcmF0b3IgKHR5cGUsIHJldmVyc2UpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5fb2JqZWN0O1xuICAgIHZhciBrZXlzID0gdGhpcy5fa2V5cztcbiAgICB2YXIgc2l6ZSA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpID09PSBzaXplKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvckRvbmUoKTtcbiAgICAgIH1cbiAgICAgIHZhciBrZXkgPSBrZXlzW3JldmVyc2UgPyBzaXplIC0gKytpIDogaSsrXTtcbiAgICAgIHJldHVybiBpdGVyYXRvclZhbHVlKHR5cGUsIGtleSwgb2JqZWN0W2tleV0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBPYmplY3RTZXE7XG59KEtleWVkU2VxKSk7XG5PYmplY3RTZXEucHJvdG90eXBlW0lTX09SREVSRURfU1lNQk9MXSA9IHRydWU7XG5cbnZhciBDb2xsZWN0aW9uU2VxID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoSW5kZXhlZFNlcSkge1xuICBmdW5jdGlvbiBDb2xsZWN0aW9uU2VxKGNvbGxlY3Rpb24pIHtcbiAgICB0aGlzLl9jb2xsZWN0aW9uID0gY29sbGVjdGlvbjtcbiAgICB0aGlzLnNpemUgPSBjb2xsZWN0aW9uLmxlbmd0aCB8fCBjb2xsZWN0aW9uLnNpemU7XG4gIH1cblxuICBpZiAoIEluZGV4ZWRTZXEgKSBDb2xsZWN0aW9uU2VxLl9fcHJvdG9fXyA9IEluZGV4ZWRTZXE7XG4gIENvbGxlY3Rpb25TZXEucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSW5kZXhlZFNlcSAmJiBJbmRleGVkU2VxLnByb3RvdHlwZSApO1xuICBDb2xsZWN0aW9uU2VxLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbGxlY3Rpb25TZXE7XG5cbiAgQ29sbGVjdGlvblNlcS5wcm90b3R5cGUuX19pdGVyYXRlVW5jYWNoZWQgPSBmdW5jdGlvbiBfX2l0ZXJhdGVVbmNhY2hlZCAoZm4sIHJldmVyc2UpIHtcbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdGUoZm4sIHJldmVyc2UpO1xuICAgIH1cbiAgICB2YXIgY29sbGVjdGlvbiA9IHRoaXMuX2NvbGxlY3Rpb247XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoY29sbGVjdGlvbik7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIGlmIChpc0l0ZXJhdG9yKGl0ZXJhdG9yKSkge1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGlmIChmbihzdGVwLnZhbHVlLCBpdGVyYXRpb25zKyssIHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVyYXRpb25zO1xuICB9O1xuXG4gIENvbGxlY3Rpb25TZXEucHJvdG90eXBlLl9faXRlcmF0b3JVbmNhY2hlZCA9IGZ1bmN0aW9uIF9faXRlcmF0b3JVbmNhY2hlZCAodHlwZSwgcmV2ZXJzZSkge1xuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0b3IodHlwZSwgcmV2ZXJzZSk7XG4gICAgfVxuICAgIHZhciBjb2xsZWN0aW9uID0gdGhpcy5fY29sbGVjdGlvbjtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihjb2xsZWN0aW9uKTtcbiAgICBpZiAoIWlzSXRlcmF0b3IoaXRlcmF0b3IpKSB7XG4gICAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGl0ZXJhdG9yRG9uZSk7XG4gICAgfVxuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGVwID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgcmV0dXJuIHN0ZXAuZG9uZSA/IHN0ZXAgOiBpdGVyYXRvclZhbHVlKHR5cGUsIGl0ZXJhdGlvbnMrKywgc3RlcC52YWx1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIENvbGxlY3Rpb25TZXE7XG59KEluZGV4ZWRTZXEpKTtcblxuLy8gIyBwcmFnbWEgSGVscGVyIGZ1bmN0aW9uc1xuXG52YXIgRU1QVFlfU0VRO1xuXG5mdW5jdGlvbiBlbXB0eVNlcXVlbmNlKCkge1xuICByZXR1cm4gRU1QVFlfU0VRIHx8IChFTVBUWV9TRVEgPSBuZXcgQXJyYXlTZXEoW10pKTtcbn1cblxuZnVuY3Rpb24ga2V5ZWRTZXFGcm9tVmFsdWUodmFsdWUpIHtcbiAgdmFyIHNlcSA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgPyBuZXcgQXJyYXlTZXEodmFsdWUpXG4gICAgOiBoYXNJdGVyYXRvcih2YWx1ZSlcbiAgICAgID8gbmV3IENvbGxlY3Rpb25TZXEodmFsdWUpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKHNlcSkge1xuICAgIHJldHVybiBzZXEuZnJvbUVudHJ5U2VxKCk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbmV3IE9iamVjdFNlcSh2YWx1ZSk7XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnRXhwZWN0ZWQgQXJyYXkgb3IgY29sbGVjdGlvbiBvYmplY3Qgb2YgW2ssIHZdIGVudHJpZXMsIG9yIGtleWVkIG9iamVjdDogJyArXG4gICAgICB2YWx1ZVxuICApO1xufVxuXG5mdW5jdGlvbiBpbmRleGVkU2VxRnJvbVZhbHVlKHZhbHVlKSB7XG4gIHZhciBzZXEgPSBtYXliZUluZGV4ZWRTZXFGcm9tVmFsdWUodmFsdWUpO1xuICBpZiAoc2VxKSB7XG4gICAgcmV0dXJuIHNlcTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICdFeHBlY3RlZCBBcnJheSBvciBjb2xsZWN0aW9uIG9iamVjdCBvZiB2YWx1ZXM6ICcgKyB2YWx1ZVxuICApO1xufVxuXG5mdW5jdGlvbiBzZXFGcm9tVmFsdWUodmFsdWUpIHtcbiAgdmFyIHNlcSA9IG1heWJlSW5kZXhlZFNlcUZyb21WYWx1ZSh2YWx1ZSk7XG4gIGlmIChzZXEpIHtcbiAgICByZXR1cm4gc2VxO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG5ldyBPYmplY3RTZXEodmFsdWUpO1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ0V4cGVjdGVkIEFycmF5IG9yIGNvbGxlY3Rpb24gb2JqZWN0IG9mIHZhbHVlcywgb3Iga2V5ZWQgb2JqZWN0OiAnICsgdmFsdWVcbiAgKTtcbn1cblxuZnVuY3Rpb24gbWF5YmVJbmRleGVkU2VxRnJvbVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5TGlrZSh2YWx1ZSlcbiAgICA/IG5ldyBBcnJheVNlcSh2YWx1ZSlcbiAgICA6IGhhc0l0ZXJhdG9yKHZhbHVlKVxuICAgICAgPyBuZXcgQ29sbGVjdGlvblNlcSh2YWx1ZSlcbiAgICAgIDogdW5kZWZpbmVkO1xufVxuXG52YXIgSVNfTUFQX1NZTUJPTCA9ICdAQF9fSU1NVVRBQkxFX01BUF9fQEAnO1xuXG5mdW5jdGlvbiBpc01hcChtYXliZU1hcCkge1xuICByZXR1cm4gQm9vbGVhbihtYXliZU1hcCAmJiBtYXliZU1hcFtJU19NQVBfU1lNQk9MXSk7XG59XG5cbmZ1bmN0aW9uIGlzT3JkZXJlZE1hcChtYXliZU9yZGVyZWRNYXApIHtcbiAgcmV0dXJuIGlzTWFwKG1heWJlT3JkZXJlZE1hcCkgJiYgaXNPcmRlcmVkKG1heWJlT3JkZXJlZE1hcCk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVPYmplY3QobWF5YmVWYWx1ZSkge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBtYXliZVZhbHVlICYmXG4gICAgICB0eXBlb2YgbWF5YmVWYWx1ZS5lcXVhbHMgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHR5cGVvZiBtYXliZVZhbHVlLmhhc2hDb2RlID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG5cbi8qKlxuICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBcInNhbWUtdmFsdWVcIiBhbGdvcml0aG0gYXMgW2Rlc2NyaWJlZCBmb3IgdXNlIGJ5IEVTNiBNYXBcbiAqIGFuZCBTZXRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hcCNLZXlfZXF1YWxpdHkpXG4gKlxuICogTmFOIGlzIGNvbnNpZGVyZWQgdGhlIHNhbWUgYXMgTmFOLCBob3dldmVyIC0wIGFuZCAwIGFyZSBjb25zaWRlcmVkIHRoZSBzYW1lXG4gKiB2YWx1ZSwgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgYnlcbiAqIFtgT2JqZWN0LmlzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzKS5cbiAqXG4gKiBUaGlzIGlzIGV4dGVuZGVkIGZ1cnRoZXIgdG8gYWxsb3cgT2JqZWN0cyB0byBkZXNjcmliZSB0aGUgdmFsdWVzIHRoZXlcbiAqIHJlcHJlc2VudCwgYnkgd2F5IG9mIGB2YWx1ZU9mYCBvciBgZXF1YWxzYCAoYW5kIGBoYXNoQ29kZWApLlxuICpcbiAqIE5vdGU6IGJlY2F1c2Ugb2YgdGhpcyBleHRlbnNpb24sIHRoZSBrZXkgZXF1YWxpdHkgb2YgSW1tdXRhYmxlLk1hcCBhbmQgdGhlXG4gKiB2YWx1ZSBlcXVhbGl0eSBvZiBJbW11dGFibGUuU2V0IHdpbGwgZGlmZmVyIGZyb20gRVM2IE1hcCBhbmQgU2V0LlxuICpcbiAqICMjIyBEZWZpbmluZyBjdXN0b20gdmFsdWVzXG4gKlxuICogVGhlIGVhc2llc3Qgd2F5IHRvIGRlc2NyaWJlIHRoZSB2YWx1ZSBhbiBvYmplY3QgcmVwcmVzZW50cyBpcyBieSBpbXBsZW1lbnRpbmdcbiAqIGB2YWx1ZU9mYC4gRm9yIGV4YW1wbGUsIGBEYXRlYCByZXByZXNlbnRzIGEgdmFsdWUgYnkgcmV0dXJuaW5nIGEgdW5peFxuICogdGltZXN0YW1wIGZvciBgdmFsdWVPZmA6XG4gKlxuICogICAgIHZhciBkYXRlMSA9IG5ldyBEYXRlKDEyMzQ1Njc4OTAwMDApOyAvLyBGcmkgRmViIDEzIDIwMDkgLi4uXG4gKiAgICAgdmFyIGRhdGUyID0gbmV3IERhdGUoMTIzNDU2Nzg5MDAwMCk7XG4gKiAgICAgZGF0ZTEudmFsdWVPZigpOyAvLyAxMjM0NTY3ODkwMDAwXG4gKiAgICAgYXNzZXJ0KCBkYXRlMSAhPT0gZGF0ZTIgKTtcbiAqICAgICBhc3NlcnQoIEltbXV0YWJsZS5pcyggZGF0ZTEsIGRhdGUyICkgKTtcbiAqXG4gKiBOb3RlOiBvdmVycmlkaW5nIGB2YWx1ZU9mYCBtYXkgaGF2ZSBvdGhlciBpbXBsaWNhdGlvbnMgaWYgeW91IHVzZSB0aGlzIG9iamVjdFxuICogd2hlcmUgSmF2YVNjcmlwdCBleHBlY3RzIGEgcHJpbWl0aXZlLCBzdWNoIGFzIGltcGxpY2l0IHN0cmluZyBjb2VyY2lvbi5cbiAqXG4gKiBGb3IgbW9yZSBjb21wbGV4IHR5cGVzLCBlc3BlY2lhbGx5IGNvbGxlY3Rpb25zLCBpbXBsZW1lbnRpbmcgYHZhbHVlT2ZgIG1heVxuICogbm90IGJlIHBlcmZvcm1hbnQuIEFuIGFsdGVybmF0aXZlIGlzIHRvIGltcGxlbWVudCBgZXF1YWxzYCBhbmQgYGhhc2hDb2RlYC5cbiAqXG4gKiBgZXF1YWxzYCB0YWtlcyBhbm90aGVyIG9iamVjdCwgcHJlc3VtYWJseSBvZiBzaW1pbGFyIHR5cGUsIGFuZCByZXR1cm5zIHRydWVcbiAqIGlmIGl0IGlzIGVxdWFsLiBFcXVhbGl0eSBpcyBzeW1tZXRyaWNhbCwgc28gdGhlIHNhbWUgcmVzdWx0IHNob3VsZCBiZVxuICogcmV0dXJuZWQgaWYgdGhpcyBhbmQgdGhlIGFyZ3VtZW50IGFyZSBmbGlwcGVkLlxuICpcbiAqICAgICBhc3NlcnQoIGEuZXF1YWxzKGIpID09PSBiLmVxdWFscyhhKSApO1xuICpcbiAqIGBoYXNoQ29kZWAgcmV0dXJucyBhIDMyYml0IGludGVnZXIgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgb2JqZWN0IHdoaWNoIHdpbGxcbiAqIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyB0byBzdG9yZSB0aGUgdmFsdWUgb2JqZWN0IGluIGEgTWFwIG9yIFNldC4gWW91IG11c3RcbiAqIHByb3ZpZGUgYm90aCBvciBuZWl0aGVyIG1ldGhvZHMsIG9uZSBtdXN0IG5vdCBleGlzdCB3aXRob3V0IHRoZSBvdGhlci5cbiAqXG4gKiBBbHNvLCBhbiBpbXBvcnRhbnQgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgbWV0aG9kcyBtdXN0IGJlIHVwaGVsZDogaWYgdHdvXG4gKiB2YWx1ZXMgYXJlIGVxdWFsLCB0aGV5ICptdXN0KiByZXR1cm4gdGhlIHNhbWUgaGFzaENvZGUuIElmIHRoZSB2YWx1ZXMgYXJlIG5vdFxuICogZXF1YWwsIHRoZXkgbWlnaHQgaGF2ZSB0aGUgc2FtZSBoYXNoQ29kZTsgdGhpcyBpcyBjYWxsZWQgYSBoYXNoIGNvbGxpc2lvbixcbiAqIGFuZCB3aGlsZSB1bmRlc2lyYWJsZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgaXQgaXMgYWNjZXB0YWJsZS5cbiAqXG4gKiAgICAgaWYgKGEuZXF1YWxzKGIpKSB7XG4gKiAgICAgICBhc3NlcnQoIGEuaGFzaENvZGUoKSA9PT0gYi5oYXNoQ29kZSgpICk7XG4gKiAgICAgfVxuICpcbiAqIEFsbCBJbW11dGFibGUgY29sbGVjdGlvbnMgYXJlIFZhbHVlIE9iamVjdHM6IHRoZXkgaW1wbGVtZW50IGBlcXVhbHMoKWBcbiAqIGFuZCBgaGFzaENvZGUoKWAuXG4gKi9cbmZ1bmN0aW9uIGlzKHZhbHVlQSwgdmFsdWVCKSB7XG4gIGlmICh2YWx1ZUEgPT09IHZhbHVlQiB8fCAodmFsdWVBICE9PSB2YWx1ZUEgJiYgdmFsdWVCICE9PSB2YWx1ZUIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCF2YWx1ZUEgfHwgIXZhbHVlQikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgdHlwZW9mIHZhbHVlQS52YWx1ZU9mID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHZhbHVlQi52YWx1ZU9mID09PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHZhbHVlQSA9IHZhbHVlQS52YWx1ZU9mKCk7XG4gICAgdmFsdWVCID0gdmFsdWVCLnZhbHVlT2YoKTtcbiAgICBpZiAodmFsdWVBID09PSB2YWx1ZUIgfHwgKHZhbHVlQSAhPT0gdmFsdWVBICYmIHZhbHVlQiAhPT0gdmFsdWVCKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghdmFsdWVBIHx8ICF2YWx1ZUIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICEhKFxuICAgIGlzVmFsdWVPYmplY3QodmFsdWVBKSAmJlxuICAgIGlzVmFsdWVPYmplY3QodmFsdWVCKSAmJlxuICAgIHZhbHVlQS5lcXVhbHModmFsdWVCKVxuICApO1xufVxuXG52YXIgaW11bCA9XG4gIHR5cGVvZiBNYXRoLmltdWwgPT09ICdmdW5jdGlvbicgJiYgTWF0aC5pbXVsKDB4ZmZmZmZmZmYsIDIpID09PSAtMlxuICAgID8gTWF0aC5pbXVsXG4gICAgOiBmdW5jdGlvbiBpbXVsKGEsIGIpIHtcbiAgICAgICAgYSB8PSAwOyAvLyBpbnRcbiAgICAgICAgYiB8PSAwOyAvLyBpbnRcbiAgICAgICAgdmFyIGMgPSBhICYgMHhmZmZmO1xuICAgICAgICB2YXIgZCA9IGIgJiAweGZmZmY7XG4gICAgICAgIC8vIFNoaWZ0IGJ5IDAgZml4ZXMgdGhlIHNpZ24gb24gdGhlIGhpZ2ggcGFydC5cbiAgICAgICAgcmV0dXJuIChjICogZCArICgoKChhID4+PiAxNikgKiBkICsgYyAqIChiID4+PiAxNikpIDw8IDE2KSA+Pj4gMCkpIHwgMDsgLy8gaW50XG4gICAgICB9O1xuXG4vLyB2OCBoYXMgYW4gb3B0aW1pemF0aW9uIGZvciBzdG9yaW5nIDMxLWJpdCBzaWduZWQgbnVtYmVycy5cbi8vIFZhbHVlcyB3aGljaCBoYXZlIGVpdGhlciAwMCBvciAxMSBhcyB0aGUgaGlnaCBvcmRlciBiaXRzIHF1YWxpZnkuXG4vLyBUaGlzIGZ1bmN0aW9uIGRyb3BzIHRoZSBoaWdoZXN0IG9yZGVyIGJpdCBpbiBhIHNpZ25lZCBudW1iZXIsIG1haW50YWluaW5nXG4vLyB0aGUgc2lnbiBiaXQuXG5mdW5jdGlvbiBzbWkoaTMyKSB7XG4gIHJldHVybiAoKGkzMiA+Pj4gMSkgJiAweDQwMDAwMDAwKSB8IChpMzIgJiAweGJmZmZmZmZmKTtcbn1cblxudmFyIGRlZmF1bHRWYWx1ZU9mID0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mO1xuXG5mdW5jdGlvbiBoYXNoKG8pIHtcbiAgc3dpdGNoICh0eXBlb2Ygbykge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgLy8gVGhlIGhhc2ggdmFsdWVzIGZvciBidWlsdC1pbiBjb25zdGFudHMgYXJlIGEgMSB2YWx1ZSBmb3IgZWFjaCA1LWJ5dGVcbiAgICAgIC8vIHNoaWZ0IHJlZ2lvbiBleHBlY3QgZm9yIHRoZSBmaXJzdCwgd2hpY2ggZW5jb2RlcyB0aGUgdmFsdWUuIFRoaXNcbiAgICAgIC8vIHJlZHVjZXMgdGhlIG9kZHMgb2YgYSBoYXNoIGNvbGxpc2lvbiBmb3IgdGhlc2UgY29tbW9uIHZhbHVlcy5cbiAgICAgIHJldHVybiBvID8gMHg0MjEwODQyMSA6IDB4NDIxMDg0MjA7XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBoYXNoTnVtYmVyKG8pO1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gby5sZW5ndGggPiBTVFJJTkdfSEFTSF9DQUNIRV9NSU5fU1RSTEVOXG4gICAgICAgID8gY2FjaGVkSGFzaFN0cmluZyhvKVxuICAgICAgICA6IGhhc2hTdHJpbmcobyk7XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICBpZiAobyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gMHg0MjEwODQyMjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygby5oYXNoQ29kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBEcm9wIGFueSBoaWdoIGJpdHMgZnJvbSBhY2NpZGVudGFsbHkgbG9uZyBoYXNoIGNvZGVzLlxuICAgICAgICByZXR1cm4gc21pKG8uaGFzaENvZGUobykpO1xuICAgICAgfVxuICAgICAgaWYgKG8udmFsdWVPZiAhPT0gZGVmYXVsdFZhbHVlT2YgJiYgdHlwZW9mIG8udmFsdWVPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvID0gby52YWx1ZU9mKG8pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc2hKU09iaihvKTtcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgcmV0dXJuIDB4NDIxMDg0MjM7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh0eXBlb2Ygby50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gaGFzaFN0cmluZyhvLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSB0eXBlICcgKyB0eXBlb2YgbyArICcgY2Fubm90IGJlIGhhc2hlZC4nKTtcbiAgfVxufVxuXG4vLyBDb21wcmVzcyBhcmJpdHJhcmlseSBsYXJnZSBudW1iZXJzIGludG8gc21pIGhhc2hlcy5cbmZ1bmN0aW9uIGhhc2hOdW1iZXIobikge1xuICBpZiAobiAhPT0gbiB8fCBuID09PSBJbmZpbml0eSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciBoYXNoID0gbiB8IDA7XG4gIGlmIChoYXNoICE9PSBuKSB7XG4gICAgaGFzaCBePSBuICogMHhmZmZmZmZmZjtcbiAgfVxuICB3aGlsZSAobiA+IDB4ZmZmZmZmZmYpIHtcbiAgICBuIC89IDB4ZmZmZmZmZmY7XG4gICAgaGFzaCBePSBuO1xuICB9XG4gIHJldHVybiBzbWkoaGFzaCk7XG59XG5cbmZ1bmN0aW9uIGNhY2hlZEhhc2hTdHJpbmcoc3RyaW5nKSB7XG4gIHZhciBoYXNoZWQgPSBzdHJpbmdIYXNoQ2FjaGVbc3RyaW5nXTtcbiAgaWYgKGhhc2hlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaGFzaGVkID0gaGFzaFN0cmluZyhzdHJpbmcpO1xuICAgIGlmIChTVFJJTkdfSEFTSF9DQUNIRV9TSVpFID09PSBTVFJJTkdfSEFTSF9DQUNIRV9NQVhfU0laRSkge1xuICAgICAgU1RSSU5HX0hBU0hfQ0FDSEVfU0laRSA9IDA7XG4gICAgICBzdHJpbmdIYXNoQ2FjaGUgPSB7fTtcbiAgICB9XG4gICAgU1RSSU5HX0hBU0hfQ0FDSEVfU0laRSsrO1xuICAgIHN0cmluZ0hhc2hDYWNoZVtzdHJpbmddID0gaGFzaGVkO1xuICB9XG4gIHJldHVybiBoYXNoZWQ7XG59XG5cbi8vIGh0dHA6Ly9qc3BlcmYuY29tL2hhc2hpbmctc3RyaW5nc1xuZnVuY3Rpb24gaGFzaFN0cmluZyhzdHJpbmcpIHtcbiAgLy8gVGhpcyBpcyB0aGUgaGFzaCBmcm9tIEpWTVxuICAvLyBUaGUgaGFzaCBjb2RlIGZvciBhIHN0cmluZyBpcyBjb21wdXRlZCBhc1xuICAvLyBzWzBdICogMzEgXiAobiAtIDEpICsgc1sxXSAqIDMxIF4gKG4gLSAyKSArIC4uLiArIHNbbiAtIDFdLFxuICAvLyB3aGVyZSBzW2ldIGlzIHRoZSBpdGggY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgYW5kIG4gaXMgdGhlIGxlbmd0aCBvZlxuICAvLyB0aGUgc3RyaW5nLiBXZSBcIm1vZFwiIHRoZSByZXN1bHQgdG8gbWFrZSBpdCBiZXR3ZWVuIDAgKGluY2x1c2l2ZSkgYW5kIDJeMzFcbiAgLy8gKGV4Y2x1c2l2ZSkgYnkgZHJvcHBpbmcgaGlnaCBiaXRzLlxuICB2YXIgaGFzaGVkID0gMDtcbiAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHN0cmluZy5sZW5ndGg7IGlpKyspIHtcbiAgICBoYXNoZWQgPSAoMzEgKiBoYXNoZWQgKyBzdHJpbmcuY2hhckNvZGVBdChpaSkpIHwgMDtcbiAgfVxuICByZXR1cm4gc21pKGhhc2hlZCk7XG59XG5cbmZ1bmN0aW9uIGhhc2hKU09iaihvYmopIHtcbiAgdmFyIGhhc2hlZDtcbiAgaWYgKHVzaW5nV2Vha01hcCkge1xuICAgIGhhc2hlZCA9IHdlYWtNYXAuZ2V0KG9iaik7XG4gICAgaWYgKGhhc2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gaGFzaGVkO1xuICAgIH1cbiAgfVxuXG4gIGhhc2hlZCA9IG9ialtVSURfSEFTSF9LRVldO1xuICBpZiAoaGFzaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gaGFzaGVkO1xuICB9XG5cbiAgaWYgKCFjYW5EZWZpbmVQcm9wZXJ0eSkge1xuICAgIGhhc2hlZCA9IG9iai5wcm9wZXJ0eUlzRW51bWVyYWJsZSAmJiBvYmoucHJvcGVydHlJc0VudW1lcmFibGVbVUlEX0hBU0hfS0VZXTtcbiAgICBpZiAoaGFzaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBoYXNoZWQ7XG4gICAgfVxuXG4gICAgaGFzaGVkID0gZ2V0SUVOb2RlSGFzaChvYmopO1xuICAgIGlmIChoYXNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGhhc2hlZDtcbiAgICB9XG4gIH1cblxuICBoYXNoZWQgPSArK29iakhhc2hVSUQ7XG4gIGlmIChvYmpIYXNoVUlEICYgMHg0MDAwMDAwMCkge1xuICAgIG9iakhhc2hVSUQgPSAwO1xuICB9XG5cbiAgaWYgKHVzaW5nV2Vha01hcCkge1xuICAgIHdlYWtNYXAuc2V0KG9iaiwgaGFzaGVkKTtcbiAgfSBlbHNlIGlmIChpc0V4dGVuc2libGUgIT09IHVuZGVmaW5lZCAmJiBpc0V4dGVuc2libGUob2JqKSA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1leHRlbnNpYmxlIG9iamVjdHMgYXJlIG5vdCBhbGxvd2VkIGFzIGtleXMuJyk7XG4gIH0gZWxzZSBpZiAoY2FuRGVmaW5lUHJvcGVydHkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBVSURfSEFTSF9LRVksIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBoYXNoZWQsXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoXG4gICAgb2JqLnByb3BlcnR5SXNFbnVtZXJhYmxlICE9PSB1bmRlZmluZWQgJiZcbiAgICBvYmoucHJvcGVydHlJc0VudW1lcmFibGUgPT09IG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVcbiAgKSB7XG4gICAgLy8gU2luY2Ugd2UgY2FuJ3QgZGVmaW5lIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHkgb24gdGhlIG9iamVjdFxuICAgIC8vIHdlJ2xsIGhpamFjayBvbmUgb2YgdGhlIGxlc3MtdXNlZCBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIHRvXG4gICAgLy8gc2F2ZSBvdXIgaGFzaCBvbiBpdC4gU2luY2UgdGhpcyBpcyBhIGZ1bmN0aW9uIGl0IHdpbGwgbm90IHNob3cgdXAgaW5cbiAgICAvLyBgSlNPTi5zdHJpbmdpZnlgIHdoaWNoIGlzIHdoYXQgd2Ugd2FudC5cbiAgICBvYmoucHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5hcHBseShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH07XG4gICAgb2JqLnByb3BlcnR5SXNFbnVtZXJhYmxlW1VJRF9IQVNIX0tFWV0gPSBoYXNoZWQ7XG4gIH0gZWxzZSBpZiAob2JqLm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGNvdWxkbid0IGdldCB0aGUgSUUgYHVuaXF1ZUlEYCB0byB1c2UgYXMgYSBoYXNoXG4gICAgLy8gYW5kIHdlIGNvdWxkbid0IHVzZSBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IHRvIGV4cGxvaXQgdGhlXG4gICAgLy8gZG9udEVudW0gYnVnIHNvIHdlIHNpbXBseSBhZGQgdGhlIGBVSURfSEFTSF9LRVlgIG9uIHRoZSBub2RlXG4gICAgLy8gaXRzZWxmLlxuICAgIG9ialtVSURfSEFTSF9LRVldID0gaGFzaGVkO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHNldCBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IG9uIG9iamVjdC4nKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoZWQ7XG59XG5cbi8vIEdldCByZWZlcmVuY2VzIHRvIEVTNSBvYmplY3QgbWV0aG9kcy5cbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuXG4vLyBUcnVlIGlmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB3b3JrcyBhcyBleHBlY3RlZC4gSUU4IGZhaWxzIHRoaXMgdGVzdC5cbnZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdAJywge30pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59KSgpO1xuXG4vLyBJRSBoYXMgYSBgdW5pcXVlSURgIHByb3BlcnR5IG9uIERPTSBub2Rlcy4gV2UgY2FuIGNvbnN0cnVjdCB0aGUgaGFzaCBmcm9tIGl0XG4vLyBhbmQgYXZvaWQgbWVtb3J5IGxlYWtzIGZyb20gdGhlIElFIGNsb25lTm9kZSBidWcuXG5mdW5jdGlvbiBnZXRJRU5vZGVIYXNoKG5vZGUpIHtcbiAgaWYgKG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA+IDApIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgMTogLy8gRWxlbWVudFxuICAgICAgICByZXR1cm4gbm9kZS51bmlxdWVJRDtcbiAgICAgIGNhc2UgOTogLy8gRG9jdW1lbnRcbiAgICAgICAgcmV0dXJuIG5vZGUuZG9jdW1lbnRFbGVtZW50ICYmIG5vZGUuZG9jdW1lbnRFbGVtZW50LnVuaXF1ZUlEO1xuICAgIH1cbiAgfVxufVxuXG4vLyBJZiBwb3NzaWJsZSwgdXNlIGEgV2Vha01hcC5cbnZhciB1c2luZ1dlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJztcbnZhciB3ZWFrTWFwO1xuaWYgKHVzaW5nV2Vha01hcCkge1xuICB3ZWFrTWFwID0gbmV3IFdlYWtNYXAoKTtcbn1cblxudmFyIG9iakhhc2hVSUQgPSAwO1xuXG52YXIgVUlEX0hBU0hfS0VZID0gJ19faW1tdXRhYmxlaGFzaF9fJztcbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gIFVJRF9IQVNIX0tFWSA9IFN5bWJvbChVSURfSEFTSF9LRVkpO1xufVxuXG52YXIgU1RSSU5HX0hBU0hfQ0FDSEVfTUlOX1NUUkxFTiA9IDE2O1xudmFyIFNUUklOR19IQVNIX0NBQ0hFX01BWF9TSVpFID0gMjU1O1xudmFyIFNUUklOR19IQVNIX0NBQ0hFX1NJWkUgPSAwO1xudmFyIHN0cmluZ0hhc2hDYWNoZSA9IHt9O1xuXG52YXIgVG9LZXllZFNlcXVlbmNlID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoS2V5ZWRTZXEkJDEpIHtcbiAgZnVuY3Rpb24gVG9LZXllZFNlcXVlbmNlKGluZGV4ZWQsIHVzZUtleXMpIHtcbiAgICB0aGlzLl9pdGVyID0gaW5kZXhlZDtcbiAgICB0aGlzLl91c2VLZXlzID0gdXNlS2V5cztcbiAgICB0aGlzLnNpemUgPSBpbmRleGVkLnNpemU7XG4gIH1cblxuICBpZiAoIEtleWVkU2VxJCQxICkgVG9LZXllZFNlcXVlbmNlLl9fcHJvdG9fXyA9IEtleWVkU2VxJCQxO1xuICBUb0tleWVkU2VxdWVuY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggS2V5ZWRTZXEkJDEgJiYgS2V5ZWRTZXEkJDEucHJvdG90eXBlICk7XG4gIFRvS2V5ZWRTZXF1ZW5jZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUb0tleWVkU2VxdWVuY2U7XG5cbiAgVG9LZXllZFNlcXVlbmNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGtleSwgbm90U2V0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlci5nZXQoa2V5LCBub3RTZXRWYWx1ZSk7XG4gIH07XG5cbiAgVG9LZXllZFNlcXVlbmNlLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBoYXMgKGtleSkge1xuICAgIHJldHVybiB0aGlzLl9pdGVyLmhhcyhrZXkpO1xuICB9O1xuXG4gIFRvS2V5ZWRTZXF1ZW5jZS5wcm90b3R5cGUudmFsdWVTZXEgPSBmdW5jdGlvbiB2YWx1ZVNlcSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZXIudmFsdWVTZXEoKTtcbiAgfTtcblxuICBUb0tleWVkU2VxdWVuY2UucHJvdG90eXBlLnJldmVyc2UgPSBmdW5jdGlvbiByZXZlcnNlICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZXZlcnNlZFNlcXVlbmNlID0gcmV2ZXJzZUZhY3RvcnkodGhpcywgdHJ1ZSk7XG4gICAgaWYgKCF0aGlzLl91c2VLZXlzKSB7XG4gICAgICByZXZlcnNlZFNlcXVlbmNlLnZhbHVlU2VxID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyQxLl9pdGVyLnRvU2VxKCkucmV2ZXJzZSgpOyB9O1xuICAgIH1cbiAgICByZXR1cm4gcmV2ZXJzZWRTZXF1ZW5jZTtcbiAgfTtcblxuICBUb0tleWVkU2VxdWVuY2UucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1hcCAobWFwcGVyLCBjb250ZXh0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgbWFwcGVkU2VxdWVuY2UgPSBtYXBGYWN0b3J5KHRoaXMsIG1hcHBlciwgY29udGV4dCk7XG4gICAgaWYgKCF0aGlzLl91c2VLZXlzKSB7XG4gICAgICBtYXBwZWRTZXF1ZW5jZS52YWx1ZVNlcSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS5faXRlci50b1NlcSgpLm1hcChtYXBwZXIsIGNvbnRleHQpOyB9O1xuICAgIH1cbiAgICByZXR1cm4gbWFwcGVkU2VxdWVuY2U7XG4gIH07XG5cbiAgVG9LZXllZFNlcXVlbmNlLnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy5faXRlci5fX2l0ZXJhdGUoZnVuY3Rpb24gKHYsIGspIHsgcmV0dXJuIGZuKHYsIGssIHRoaXMkMSk7IH0sIHJldmVyc2UpO1xuICB9O1xuXG4gIFRvS2V5ZWRTZXF1ZW5jZS5wcm90b3R5cGUuX19pdGVyYXRvciA9IGZ1bmN0aW9uIF9faXRlcmF0b3IgKHR5cGUsIHJldmVyc2UpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlci5fX2l0ZXJhdG9yKHR5cGUsIHJldmVyc2UpO1xuICB9O1xuXG4gIHJldHVybiBUb0tleWVkU2VxdWVuY2U7XG59KEtleWVkU2VxKSk7XG5Ub0tleWVkU2VxdWVuY2UucHJvdG90eXBlW0lTX09SREVSRURfU1lNQk9MXSA9IHRydWU7XG5cbnZhciBUb0luZGV4ZWRTZXF1ZW5jZSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEluZGV4ZWRTZXEkJDEpIHtcbiAgZnVuY3Rpb24gVG9JbmRleGVkU2VxdWVuY2UoaXRlcikge1xuICAgIHRoaXMuX2l0ZXIgPSBpdGVyO1xuICAgIHRoaXMuc2l6ZSA9IGl0ZXIuc2l6ZTtcbiAgfVxuXG4gIGlmICggSW5kZXhlZFNlcSQkMSApIFRvSW5kZXhlZFNlcXVlbmNlLl9fcHJvdG9fXyA9IEluZGV4ZWRTZXEkJDE7XG4gIFRvSW5kZXhlZFNlcXVlbmNlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEluZGV4ZWRTZXEkJDEgJiYgSW5kZXhlZFNlcSQkMS5wcm90b3R5cGUgKTtcbiAgVG9JbmRleGVkU2VxdWVuY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVG9JbmRleGVkU2VxdWVuY2U7XG5cbiAgVG9JbmRleGVkU2VxdWVuY2UucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZXIuaW5jbHVkZXModmFsdWUpO1xuICB9O1xuXG4gIFRvSW5kZXhlZFNlcXVlbmNlLnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgaSA9IDA7XG4gICAgcmV2ZXJzZSAmJiBlbnN1cmVTaXplKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLl9pdGVyLl9faXRlcmF0ZShcbiAgICAgIGZ1bmN0aW9uICh2KSB7IHJldHVybiBmbih2LCByZXZlcnNlID8gdGhpcyQxLnNpemUgLSArK2kgOiBpKyssIHRoaXMkMSk7IH0sXG4gICAgICByZXZlcnNlXG4gICAgKTtcbiAgfTtcblxuICBUb0luZGV4ZWRTZXF1ZW5jZS5wcm90b3R5cGUuX19pdGVyYXRvciA9IGZ1bmN0aW9uIF9faXRlcmF0b3IgKHR5cGUsIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBpdGVyYXRvciA9IHRoaXMuX2l0ZXIuX19pdGVyYXRvcihJVEVSQVRFX1ZBTFVFUywgcmV2ZXJzZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIHJldmVyc2UgJiYgZW5zdXJlU2l6ZSh0aGlzKTtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGVwID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgcmV0dXJuIHN0ZXAuZG9uZVxuICAgICAgICA/IHN0ZXBcbiAgICAgICAgOiBpdGVyYXRvclZhbHVlKFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIHJldmVyc2UgPyB0aGlzJDEuc2l6ZSAtICsraSA6IGkrKyxcbiAgICAgICAgICAgIHN0ZXAudmFsdWUsXG4gICAgICAgICAgICBzdGVwXG4gICAgICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gVG9JbmRleGVkU2VxdWVuY2U7XG59KEluZGV4ZWRTZXEpKTtcblxudmFyIFRvU2V0U2VxdWVuY2UgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChTZXRTZXEkJDEpIHtcbiAgZnVuY3Rpb24gVG9TZXRTZXF1ZW5jZShpdGVyKSB7XG4gICAgdGhpcy5faXRlciA9IGl0ZXI7XG4gICAgdGhpcy5zaXplID0gaXRlci5zaXplO1xuICB9XG5cbiAgaWYgKCBTZXRTZXEkJDEgKSBUb1NldFNlcXVlbmNlLl9fcHJvdG9fXyA9IFNldFNlcSQkMTtcbiAgVG9TZXRTZXF1ZW5jZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBTZXRTZXEkJDEgJiYgU2V0U2VxJCQxLnByb3RvdHlwZSApO1xuICBUb1NldFNlcXVlbmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRvU2V0U2VxdWVuY2U7XG5cbiAgVG9TZXRTZXF1ZW5jZS5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlci5pbmNsdWRlcyhrZXkpO1xuICB9O1xuXG4gIFRvU2V0U2VxdWVuY2UucHJvdG90eXBlLl9faXRlcmF0ZSA9IGZ1bmN0aW9uIF9faXRlcmF0ZSAoZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLl9pdGVyLl9faXRlcmF0ZShmdW5jdGlvbiAodikgeyByZXR1cm4gZm4odiwgdiwgdGhpcyQxKTsgfSwgcmV2ZXJzZSk7XG4gIH07XG5cbiAgVG9TZXRTZXF1ZW5jZS5wcm90b3R5cGUuX19pdGVyYXRvciA9IGZ1bmN0aW9uIF9faXRlcmF0b3IgKHR5cGUsIHJldmVyc2UpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSB0aGlzLl9pdGVyLl9faXRlcmF0b3IoSVRFUkFURV9WQUxVRVMsIHJldmVyc2UpO1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0ZXAgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICByZXR1cm4gc3RlcC5kb25lXG4gICAgICAgID8gc3RlcFxuICAgICAgICA6IGl0ZXJhdG9yVmFsdWUodHlwZSwgc3RlcC52YWx1ZSwgc3RlcC52YWx1ZSwgc3RlcCk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRvU2V0U2VxdWVuY2U7XG59KFNldFNlcSkpO1xuXG52YXIgRnJvbUVudHJpZXNTZXF1ZW5jZSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEtleWVkU2VxJCQxKSB7XG4gIGZ1bmN0aW9uIEZyb21FbnRyaWVzU2VxdWVuY2UoZW50cmllcykge1xuICAgIHRoaXMuX2l0ZXIgPSBlbnRyaWVzO1xuICAgIHRoaXMuc2l6ZSA9IGVudHJpZXMuc2l6ZTtcbiAgfVxuXG4gIGlmICggS2V5ZWRTZXEkJDEgKSBGcm9tRW50cmllc1NlcXVlbmNlLl9fcHJvdG9fXyA9IEtleWVkU2VxJCQxO1xuICBGcm9tRW50cmllc1NlcXVlbmNlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEtleWVkU2VxJCQxICYmIEtleWVkU2VxJCQxLnByb3RvdHlwZSApO1xuICBGcm9tRW50cmllc1NlcXVlbmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZyb21FbnRyaWVzU2VxdWVuY2U7XG5cbiAgRnJvbUVudHJpZXNTZXF1ZW5jZS5wcm90b3R5cGUuZW50cnlTZXEgPSBmdW5jdGlvbiBlbnRyeVNlcSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZXIudG9TZXEoKTtcbiAgfTtcblxuICBGcm9tRW50cmllc1NlcXVlbmNlLnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy5faXRlci5fX2l0ZXJhdGUoZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAvLyBDaGVjayBpZiBlbnRyeSBleGlzdHMgZmlyc3Qgc28gYXJyYXkgYWNjZXNzIGRvZXNuJ3QgdGhyb3cgZm9yIGhvbGVzXG4gICAgICAvLyBpbiB0aGUgcGFyZW50IGl0ZXJhdGlvbi5cbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICB2YWxpZGF0ZUVudHJ5KGVudHJ5KTtcbiAgICAgICAgdmFyIGluZGV4ZWRDb2xsZWN0aW9uID0gaXNDb2xsZWN0aW9uKGVudHJ5KTtcbiAgICAgICAgcmV0dXJuIGZuKFxuICAgICAgICAgIGluZGV4ZWRDb2xsZWN0aW9uID8gZW50cnkuZ2V0KDEpIDogZW50cnlbMV0sXG4gICAgICAgICAgaW5kZXhlZENvbGxlY3Rpb24gPyBlbnRyeS5nZXQoMCkgOiBlbnRyeVswXSxcbiAgICAgICAgICB0aGlzJDFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LCByZXZlcnNlKTtcbiAgfTtcblxuICBGcm9tRW50cmllc1NlcXVlbmNlLnByb3RvdHlwZS5fX2l0ZXJhdG9yID0gZnVuY3Rpb24gX19pdGVyYXRvciAodHlwZSwgcmV2ZXJzZSkge1xuICAgIHZhciBpdGVyYXRvciA9IHRoaXMuX2l0ZXIuX19pdGVyYXRvcihJVEVSQVRFX1ZBTFVFUywgcmV2ZXJzZSk7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgc3RlcCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgaWYgKHN0ZXAuZG9uZSkge1xuICAgICAgICAgIHJldHVybiBzdGVwO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgIC8vIENoZWNrIGlmIGVudHJ5IGV4aXN0cyBmaXJzdCBzbyBhcnJheSBhY2Nlc3MgZG9lc24ndCB0aHJvdyBmb3IgaG9sZXNcbiAgICAgICAgLy8gaW4gdGhlIHBhcmVudCBpdGVyYXRpb24uXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhbGlkYXRlRW50cnkoZW50cnkpO1xuICAgICAgICAgIHZhciBpbmRleGVkQ29sbGVjdGlvbiA9IGlzQ29sbGVjdGlvbihlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yVmFsdWUoXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgaW5kZXhlZENvbGxlY3Rpb24gPyBlbnRyeS5nZXQoMCkgOiBlbnRyeVswXSxcbiAgICAgICAgICAgIGluZGV4ZWRDb2xsZWN0aW9uID8gZW50cnkuZ2V0KDEpIDogZW50cnlbMV0sXG4gICAgICAgICAgICBzdGVwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBGcm9tRW50cmllc1NlcXVlbmNlO1xufShLZXllZFNlcSkpO1xuXG5Ub0luZGV4ZWRTZXF1ZW5jZS5wcm90b3R5cGUuY2FjaGVSZXN1bHQgPSBUb0tleWVkU2VxdWVuY2UucHJvdG90eXBlLmNhY2hlUmVzdWx0ID0gVG9TZXRTZXF1ZW5jZS5wcm90b3R5cGUuY2FjaGVSZXN1bHQgPSBGcm9tRW50cmllc1NlcXVlbmNlLnByb3RvdHlwZS5jYWNoZVJlc3VsdCA9IGNhY2hlUmVzdWx0VGhyb3VnaDtcblxuZnVuY3Rpb24gZmxpcEZhY3RvcnkoY29sbGVjdGlvbikge1xuICB2YXIgZmxpcFNlcXVlbmNlID0gbWFrZVNlcXVlbmNlKGNvbGxlY3Rpb24pO1xuICBmbGlwU2VxdWVuY2UuX2l0ZXIgPSBjb2xsZWN0aW9uO1xuICBmbGlwU2VxdWVuY2Uuc2l6ZSA9IGNvbGxlY3Rpb24uc2l6ZTtcbiAgZmxpcFNlcXVlbmNlLmZsaXAgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2xsZWN0aW9uOyB9O1xuICBmbGlwU2VxdWVuY2UucmV2ZXJzZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXZlcnNlZFNlcXVlbmNlID0gY29sbGVjdGlvbi5yZXZlcnNlLmFwcGx5KHRoaXMpOyAvLyBzdXBlci5yZXZlcnNlKClcbiAgICByZXZlcnNlZFNlcXVlbmNlLmZsaXAgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2xsZWN0aW9uLnJldmVyc2UoKTsgfTtcbiAgICByZXR1cm4gcmV2ZXJzZWRTZXF1ZW5jZTtcbiAgfTtcbiAgZmxpcFNlcXVlbmNlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGNvbGxlY3Rpb24uaW5jbHVkZXMoa2V5KTsgfTtcbiAgZmxpcFNlcXVlbmNlLmluY2x1ZGVzID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gY29sbGVjdGlvbi5oYXMoa2V5KTsgfTtcbiAgZmxpcFNlcXVlbmNlLmNhY2hlUmVzdWx0ID0gY2FjaGVSZXN1bHRUaHJvdWdoO1xuICBmbGlwU2VxdWVuY2UuX19pdGVyYXRlVW5jYWNoZWQgPSBmdW5jdGlvbihmbiwgcmV2ZXJzZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgcmV0dXJuIGNvbGxlY3Rpb24uX19pdGVyYXRlKGZ1bmN0aW9uICh2LCBrKSB7IHJldHVybiBmbihrLCB2LCB0aGlzJDEpICE9PSBmYWxzZTsgfSwgcmV2ZXJzZSk7XG4gIH07XG4gIGZsaXBTZXF1ZW5jZS5fX2l0ZXJhdG9yVW5jYWNoZWQgPSBmdW5jdGlvbih0eXBlLCByZXZlcnNlKSB7XG4gICAgaWYgKHR5cGUgPT09IElURVJBVEVfRU5UUklFUykge1xuICAgICAgdmFyIGl0ZXJhdG9yID0gY29sbGVjdGlvbi5fX2l0ZXJhdG9yKHR5cGUsIHJldmVyc2UpO1xuICAgICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdGVwID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICBpZiAoIXN0ZXAuZG9uZSkge1xuICAgICAgICAgIHZhciBrID0gc3RlcC52YWx1ZVswXTtcbiAgICAgICAgICBzdGVwLnZhbHVlWzBdID0gc3RlcC52YWx1ZVsxXTtcbiAgICAgICAgICBzdGVwLnZhbHVlWzFdID0gaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY29sbGVjdGlvbi5fX2l0ZXJhdG9yKFxuICAgICAgdHlwZSA9PT0gSVRFUkFURV9WQUxVRVMgPyBJVEVSQVRFX0tFWVMgOiBJVEVSQVRFX1ZBTFVFUyxcbiAgICAgIHJldmVyc2VcbiAgICApO1xuICB9O1xuICByZXR1cm4gZmxpcFNlcXVlbmNlO1xufVxuXG5mdW5jdGlvbiBtYXBGYWN0b3J5KGNvbGxlY3Rpb24sIG1hcHBlciwgY29udGV4dCkge1xuICB2YXIgbWFwcGVkU2VxdWVuY2UgPSBtYWtlU2VxdWVuY2UoY29sbGVjdGlvbik7XG4gIG1hcHBlZFNlcXVlbmNlLnNpemUgPSBjb2xsZWN0aW9uLnNpemU7XG4gIG1hcHBlZFNlcXVlbmNlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGNvbGxlY3Rpb24uaGFzKGtleSk7IH07XG4gIG1hcHBlZFNlcXVlbmNlLmdldCA9IGZ1bmN0aW9uIChrZXksIG5vdFNldFZhbHVlKSB7XG4gICAgdmFyIHYgPSBjb2xsZWN0aW9uLmdldChrZXksIE5PVF9TRVQpO1xuICAgIHJldHVybiB2ID09PSBOT1RfU0VUXG4gICAgICA/IG5vdFNldFZhbHVlXG4gICAgICA6IG1hcHBlci5jYWxsKGNvbnRleHQsIHYsIGtleSwgY29sbGVjdGlvbik7XG4gIH07XG4gIG1hcHBlZFNlcXVlbmNlLl9faXRlcmF0ZVVuY2FjaGVkID0gZnVuY3Rpb24oZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHJldHVybiBjb2xsZWN0aW9uLl9faXRlcmF0ZShcbiAgICAgIGZ1bmN0aW9uICh2LCBrLCBjKSB7IHJldHVybiBmbihtYXBwZXIuY2FsbChjb250ZXh0LCB2LCBrLCBjKSwgaywgdGhpcyQxKSAhPT0gZmFsc2U7IH0sXG4gICAgICByZXZlcnNlXG4gICAgKTtcbiAgfTtcbiAgbWFwcGVkU2VxdWVuY2UuX19pdGVyYXRvclVuY2FjaGVkID0gZnVuY3Rpb24odHlwZSwgcmV2ZXJzZSkge1xuICAgIHZhciBpdGVyYXRvciA9IGNvbGxlY3Rpb24uX19pdGVyYXRvcihJVEVSQVRFX0VOVFJJRVMsIHJldmVyc2UpO1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0ZXAgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICBpZiAoc3RlcC5kb25lKSB7XG4gICAgICAgIHJldHVybiBzdGVwO1xuICAgICAgfVxuICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgIHZhciBrZXkgPSBlbnRyeVswXTtcbiAgICAgIHJldHVybiBpdGVyYXRvclZhbHVlKFxuICAgICAgICB0eXBlLFxuICAgICAgICBrZXksXG4gICAgICAgIG1hcHBlci5jYWxsKGNvbnRleHQsIGVudHJ5WzFdLCBrZXksIGNvbGxlY3Rpb24pLFxuICAgICAgICBzdGVwXG4gICAgICApO1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gbWFwcGVkU2VxdWVuY2U7XG59XG5cbmZ1bmN0aW9uIHJldmVyc2VGYWN0b3J5KGNvbGxlY3Rpb24sIHVzZUtleXMpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIHJldmVyc2VkU2VxdWVuY2UgPSBtYWtlU2VxdWVuY2UoY29sbGVjdGlvbik7XG4gIHJldmVyc2VkU2VxdWVuY2UuX2l0ZXIgPSBjb2xsZWN0aW9uO1xuICByZXZlcnNlZFNlcXVlbmNlLnNpemUgPSBjb2xsZWN0aW9uLnNpemU7XG4gIHJldmVyc2VkU2VxdWVuY2UucmV2ZXJzZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbGxlY3Rpb247IH07XG4gIGlmIChjb2xsZWN0aW9uLmZsaXApIHtcbiAgICByZXZlcnNlZFNlcXVlbmNlLmZsaXAgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBmbGlwU2VxdWVuY2UgPSBmbGlwRmFjdG9yeShjb2xsZWN0aW9uKTtcbiAgICAgIGZsaXBTZXF1ZW5jZS5yZXZlcnNlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY29sbGVjdGlvbi5mbGlwKCk7IH07XG4gICAgICByZXR1cm4gZmxpcFNlcXVlbmNlO1xuICAgIH07XG4gIH1cbiAgcmV2ZXJzZWRTZXF1ZW5jZS5nZXQgPSBmdW5jdGlvbiAoa2V5LCBub3RTZXRWYWx1ZSkgeyByZXR1cm4gY29sbGVjdGlvbi5nZXQodXNlS2V5cyA/IGtleSA6IC0xIC0ga2V5LCBub3RTZXRWYWx1ZSk7IH07XG4gIHJldmVyc2VkU2VxdWVuY2UuaGFzID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gY29sbGVjdGlvbi5oYXModXNlS2V5cyA/IGtleSA6IC0xIC0ga2V5KTsgfTtcbiAgcmV2ZXJzZWRTZXF1ZW5jZS5pbmNsdWRlcyA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gY29sbGVjdGlvbi5pbmNsdWRlcyh2YWx1ZSk7IH07XG4gIHJldmVyc2VkU2VxdWVuY2UuY2FjaGVSZXN1bHQgPSBjYWNoZVJlc3VsdFRocm91Z2g7XG4gIHJldmVyc2VkU2VxdWVuY2UuX19pdGVyYXRlID0gZnVuY3Rpb24oZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBpID0gMDtcbiAgICByZXZlcnNlICYmIGVuc3VyZVNpemUoY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb24uX19pdGVyYXRlKFxuICAgICAgZnVuY3Rpb24gKHYsIGspIHsgcmV0dXJuIGZuKHYsIHVzZUtleXMgPyBrIDogcmV2ZXJzZSA/IHRoaXMkMS5zaXplIC0gKytpIDogaSsrLCB0aGlzJDEpOyB9LFxuICAgICAgIXJldmVyc2VcbiAgICApO1xuICB9O1xuICByZXZlcnNlZFNlcXVlbmNlLl9faXRlcmF0b3IgPSBmdW5jdGlvbiAodHlwZSwgcmV2ZXJzZSkge1xuICAgIHZhciBpID0gMDtcbiAgICByZXZlcnNlICYmIGVuc3VyZVNpemUoY29sbGVjdGlvbik7XG4gICAgdmFyIGl0ZXJhdG9yID0gY29sbGVjdGlvbi5fX2l0ZXJhdG9yKElURVJBVEVfRU5UUklFUywgIXJldmVyc2UpO1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0ZXAgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICBpZiAoc3RlcC5kb25lKSB7XG4gICAgICAgIHJldHVybiBzdGVwO1xuICAgICAgfVxuICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgIHJldHVybiBpdGVyYXRvclZhbHVlKFxuICAgICAgICB0eXBlLFxuICAgICAgICB1c2VLZXlzID8gZW50cnlbMF0gOiByZXZlcnNlID8gdGhpcyQxLnNpemUgLSArK2kgOiBpKyssXG4gICAgICAgIGVudHJ5WzFdLFxuICAgICAgICBzdGVwXG4gICAgICApO1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gcmV2ZXJzZWRTZXF1ZW5jZTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyRmFjdG9yeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGNvbnRleHQsIHVzZUtleXMpIHtcbiAgdmFyIGZpbHRlclNlcXVlbmNlID0gbWFrZVNlcXVlbmNlKGNvbGxlY3Rpb24pO1xuICBpZiAodXNlS2V5cykge1xuICAgIGZpbHRlclNlcXVlbmNlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciB2ID0gY29sbGVjdGlvbi5nZXQoa2V5LCBOT1RfU0VUKTtcbiAgICAgIHJldHVybiB2ICE9PSBOT1RfU0VUICYmICEhcHJlZGljYXRlLmNhbGwoY29udGV4dCwgdiwga2V5LCBjb2xsZWN0aW9uKTtcbiAgICB9O1xuICAgIGZpbHRlclNlcXVlbmNlLmdldCA9IGZ1bmN0aW9uIChrZXksIG5vdFNldFZhbHVlKSB7XG4gICAgICB2YXIgdiA9IGNvbGxlY3Rpb24uZ2V0KGtleSwgTk9UX1NFVCk7XG4gICAgICByZXR1cm4gdiAhPT0gTk9UX1NFVCAmJiBwcmVkaWNhdGUuY2FsbChjb250ZXh0LCB2LCBrZXksIGNvbGxlY3Rpb24pXG4gICAgICAgID8gdlxuICAgICAgICA6IG5vdFNldFZhbHVlO1xuICAgIH07XG4gIH1cbiAgZmlsdGVyU2VxdWVuY2UuX19pdGVyYXRlVW5jYWNoZWQgPSBmdW5jdGlvbihmbiwgcmV2ZXJzZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIGNvbGxlY3Rpb24uX19pdGVyYXRlKGZ1bmN0aW9uICh2LCBrLCBjKSB7XG4gICAgICBpZiAocHJlZGljYXRlLmNhbGwoY29udGV4dCwgdiwgaywgYykpIHtcbiAgICAgICAgaXRlcmF0aW9ucysrO1xuICAgICAgICByZXR1cm4gZm4odiwgdXNlS2V5cyA/IGsgOiBpdGVyYXRpb25zIC0gMSwgdGhpcyQxKTtcbiAgICAgIH1cbiAgICB9LCByZXZlcnNlKTtcbiAgICByZXR1cm4gaXRlcmF0aW9ucztcbiAgfTtcbiAgZmlsdGVyU2VxdWVuY2UuX19pdGVyYXRvclVuY2FjaGVkID0gZnVuY3Rpb24odHlwZSwgcmV2ZXJzZSkge1xuICAgIHZhciBpdGVyYXRvciA9IGNvbGxlY3Rpb24uX19pdGVyYXRvcihJVEVSQVRFX0VOVFJJRVMsIHJldmVyc2UpO1xuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBzdGVwID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICBpZiAoc3RlcC5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgdmFyIGtleSA9IGVudHJ5WzBdO1xuICAgICAgICB2YXIgdmFsdWUgPSBlbnRyeVsxXTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yVmFsdWUodHlwZSwgdXNlS2V5cyA/IGtleSA6IGl0ZXJhdGlvbnMrKywgdmFsdWUsIHN0ZXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBmaWx0ZXJTZXF1ZW5jZTtcbn1cblxuZnVuY3Rpb24gY291bnRCeUZhY3RvcnkoY29sbGVjdGlvbiwgZ3JvdXBlciwgY29udGV4dCkge1xuICB2YXIgZ3JvdXBzID0gTWFwKCkuYXNNdXRhYmxlKCk7XG4gIGNvbGxlY3Rpb24uX19pdGVyYXRlKGZ1bmN0aW9uICh2LCBrKSB7XG4gICAgZ3JvdXBzLnVwZGF0ZShncm91cGVyLmNhbGwoY29udGV4dCwgdiwgaywgY29sbGVjdGlvbiksIDAsIGZ1bmN0aW9uIChhKSB7IHJldHVybiBhICsgMTsgfSk7XG4gIH0pO1xuICByZXR1cm4gZ3JvdXBzLmFzSW1tdXRhYmxlKCk7XG59XG5cbmZ1bmN0aW9uIGdyb3VwQnlGYWN0b3J5KGNvbGxlY3Rpb24sIGdyb3VwZXIsIGNvbnRleHQpIHtcbiAgdmFyIGlzS2V5ZWRJdGVyID0gaXNLZXllZChjb2xsZWN0aW9uKTtcbiAgdmFyIGdyb3VwcyA9IChpc09yZGVyZWQoY29sbGVjdGlvbikgPyBPcmRlcmVkTWFwKCkgOiBNYXAoKSkuYXNNdXRhYmxlKCk7XG4gIGNvbGxlY3Rpb24uX19pdGVyYXRlKGZ1bmN0aW9uICh2LCBrKSB7XG4gICAgZ3JvdXBzLnVwZGF0ZShcbiAgICAgIGdyb3VwZXIuY2FsbChjb250ZXh0LCB2LCBrLCBjb2xsZWN0aW9uKSxcbiAgICAgIGZ1bmN0aW9uIChhKSB7IHJldHVybiAoKGEgPSBhIHx8IFtdKSwgYS5wdXNoKGlzS2V5ZWRJdGVyID8gW2ssIHZdIDogdiksIGEpOyB9XG4gICAgKTtcbiAgfSk7XG4gIHZhciBjb2VyY2UgPSBjb2xsZWN0aW9uQ2xhc3MoY29sbGVjdGlvbik7XG4gIHJldHVybiBncm91cHMubWFwKGZ1bmN0aW9uIChhcnIpIHsgcmV0dXJuIHJlaWZ5KGNvbGxlY3Rpb24sIGNvZXJjZShhcnIpKTsgfSkuYXNJbW11dGFibGUoKTtcbn1cblxuZnVuY3Rpb24gc2xpY2VGYWN0b3J5KGNvbGxlY3Rpb24sIGJlZ2luLCBlbmQsIHVzZUtleXMpIHtcbiAgdmFyIG9yaWdpbmFsU2l6ZSA9IGNvbGxlY3Rpb24uc2l6ZTtcblxuICBpZiAod2hvbGVTbGljZShiZWdpbiwgZW5kLCBvcmlnaW5hbFNpemUpKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH1cblxuICB2YXIgcmVzb2x2ZWRCZWdpbiA9IHJlc29sdmVCZWdpbihiZWdpbiwgb3JpZ2luYWxTaXplKTtcbiAgdmFyIHJlc29sdmVkRW5kID0gcmVzb2x2ZUVuZChlbmQsIG9yaWdpbmFsU2l6ZSk7XG5cbiAgLy8gYmVnaW4gb3IgZW5kIHdpbGwgYmUgTmFOIGlmIHRoZXkgd2VyZSBwcm92aWRlZCBhcyBuZWdhdGl2ZSBudW1iZXJzIGFuZFxuICAvLyB0aGlzIGNvbGxlY3Rpb24ncyBzaXplIGlzIHVua25vd24uIEluIHRoYXQgY2FzZSwgY2FjaGUgZmlyc3Qgc28gdGhlcmUgaXNcbiAgLy8gYSBrbm93biBzaXplIGFuZCB0aGVzZSBkbyBub3QgcmVzb2x2ZSB0byBOYU4uXG4gIGlmIChyZXNvbHZlZEJlZ2luICE9PSByZXNvbHZlZEJlZ2luIHx8IHJlc29sdmVkRW5kICE9PSByZXNvbHZlZEVuZCkge1xuICAgIHJldHVybiBzbGljZUZhY3RvcnkoY29sbGVjdGlvbi50b1NlcSgpLmNhY2hlUmVzdWx0KCksIGJlZ2luLCBlbmQsIHVzZUtleXMpO1xuICB9XG5cbiAgLy8gTm90ZTogcmVzb2x2ZWRFbmQgaXMgdW5kZWZpbmVkIHdoZW4gdGhlIG9yaWdpbmFsIHNlcXVlbmNlJ3MgbGVuZ3RoIGlzXG4gIC8vIHVua25vd24gYW5kIHRoaXMgc2xpY2UgZGlkIG5vdCBzdXBwbHkgYW4gZW5kIGFuZCBzaG91bGQgY29udGFpbiBhbGxcbiAgLy8gZWxlbWVudHMgYWZ0ZXIgcmVzb2x2ZWRCZWdpbi5cbiAgLy8gSW4gdGhhdCBjYXNlLCByZXNvbHZlZFNpemUgd2lsbCBiZSBOYU4gYW5kIHNsaWNlU2l6ZSB3aWxsIHJlbWFpbiB1bmRlZmluZWQuXG4gIHZhciByZXNvbHZlZFNpemUgPSByZXNvbHZlZEVuZCAtIHJlc29sdmVkQmVnaW47XG4gIHZhciBzbGljZVNpemU7XG4gIGlmIChyZXNvbHZlZFNpemUgPT09IHJlc29sdmVkU2l6ZSkge1xuICAgIHNsaWNlU2l6ZSA9IHJlc29sdmVkU2l6ZSA8IDAgPyAwIDogcmVzb2x2ZWRTaXplO1xuICB9XG5cbiAgdmFyIHNsaWNlU2VxID0gbWFrZVNlcXVlbmNlKGNvbGxlY3Rpb24pO1xuXG4gIC8vIElmIGNvbGxlY3Rpb24uc2l6ZSBpcyB1bmRlZmluZWQsIHRoZSBzaXplIG9mIHRoZSByZWFsaXplZCBzbGljZVNlcSBpc1xuICAvLyB1bmtub3duIGF0IHRoaXMgcG9pbnQgdW5sZXNzIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gc2xpY2UgaXMgMFxuICBzbGljZVNlcS5zaXplID1cbiAgICBzbGljZVNpemUgPT09IDAgPyBzbGljZVNpemUgOiAoY29sbGVjdGlvbi5zaXplICYmIHNsaWNlU2l6ZSkgfHwgdW5kZWZpbmVkO1xuXG4gIGlmICghdXNlS2V5cyAmJiBpc1NlcShjb2xsZWN0aW9uKSAmJiBzbGljZVNpemUgPj0gMCkge1xuICAgIHNsaWNlU2VxLmdldCA9IGZ1bmN0aW9uKGluZGV4LCBub3RTZXRWYWx1ZSkge1xuICAgICAgaW5kZXggPSB3cmFwSW5kZXgodGhpcywgaW5kZXgpO1xuICAgICAgcmV0dXJuIGluZGV4ID49IDAgJiYgaW5kZXggPCBzbGljZVNpemVcbiAgICAgICAgPyBjb2xsZWN0aW9uLmdldChpbmRleCArIHJlc29sdmVkQmVnaW4sIG5vdFNldFZhbHVlKVxuICAgICAgICA6IG5vdFNldFZhbHVlO1xuICAgIH07XG4gIH1cblxuICBzbGljZVNlcS5fX2l0ZXJhdGVVbmNhY2hlZCA9IGZ1bmN0aW9uKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBpZiAoc2xpY2VTaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRlKGZuLCByZXZlcnNlKTtcbiAgICB9XG4gICAgdmFyIHNraXBwZWQgPSAwO1xuICAgIHZhciBpc1NraXBwaW5nID0gdHJ1ZTtcbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgY29sbGVjdGlvbi5fX2l0ZXJhdGUoZnVuY3Rpb24gKHYsIGspIHtcbiAgICAgIGlmICghKGlzU2tpcHBpbmcgJiYgKGlzU2tpcHBpbmcgPSBza2lwcGVkKysgPCByZXNvbHZlZEJlZ2luKSkpIHtcbiAgICAgICAgaXRlcmF0aW9ucysrO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGZuKHYsIHVzZUtleXMgPyBrIDogaXRlcmF0aW9ucyAtIDEsIHRoaXMkMSkgIT09IGZhbHNlICYmXG4gICAgICAgICAgaXRlcmF0aW9ucyAhPT0gc2xpY2VTaXplXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdGlvbnM7XG4gIH07XG5cbiAgc2xpY2VTZXEuX19pdGVyYXRvclVuY2FjaGVkID0gZnVuY3Rpb24odHlwZSwgcmV2ZXJzZSkge1xuICAgIGlmIChzbGljZVNpemUgIT09IDAgJiYgcmV2ZXJzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdG9yKHR5cGUsIHJldmVyc2UpO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgaW5zdGFudGlhdGluZyBwYXJlbnQgaXRlcmF0b3IgaWYgdGFraW5nIDAuXG4gICAgaWYgKHNsaWNlU2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBJdGVyYXRvcihpdGVyYXRvckRvbmUpO1xuICAgIH1cbiAgICB2YXIgaXRlcmF0b3IgPSBjb2xsZWN0aW9uLl9faXRlcmF0b3IodHlwZSwgcmV2ZXJzZSk7XG4gICAgdmFyIHNraXBwZWQgPSAwO1xuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIHdoaWxlIChza2lwcGVkKysgPCByZXNvbHZlZEJlZ2luKSB7XG4gICAgICAgIGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIH1cbiAgICAgIGlmICgrK2l0ZXJhdGlvbnMgPiBzbGljZVNpemUpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yRG9uZSgpO1xuICAgICAgfVxuICAgICAgdmFyIHN0ZXAgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICBpZiAodXNlS2V5cyB8fCB0eXBlID09PSBJVEVSQVRFX1ZBTFVFUyB8fCBzdGVwLmRvbmUpIHtcbiAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gSVRFUkFURV9LRVlTKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvclZhbHVlKHR5cGUsIGl0ZXJhdGlvbnMgLSAxLCB1bmRlZmluZWQsIHN0ZXApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yVmFsdWUodHlwZSwgaXRlcmF0aW9ucyAtIDEsIHN0ZXAudmFsdWVbMV0sIHN0ZXApO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBzbGljZVNlcTtcbn1cblxuZnVuY3Rpb24gdGFrZVdoaWxlRmFjdG9yeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgdmFyIHRha2VTZXF1ZW5jZSA9IG1ha2VTZXF1ZW5jZShjb2xsZWN0aW9uKTtcbiAgdGFrZVNlcXVlbmNlLl9faXRlcmF0ZVVuY2FjaGVkID0gZnVuY3Rpb24oZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0ZShmbiwgcmV2ZXJzZSk7XG4gICAgfVxuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICBjb2xsZWN0aW9uLl9faXRlcmF0ZShcbiAgICAgIGZ1bmN0aW9uICh2LCBrLCBjKSB7IHJldHVybiBwcmVkaWNhdGUuY2FsbChjb250ZXh0LCB2LCBrLCBjKSAmJiArK2l0ZXJhdGlvbnMgJiYgZm4odiwgaywgdGhpcyQxKTsgfVxuICAgICk7XG4gICAgcmV0dXJuIGl0ZXJhdGlvbnM7XG4gIH07XG4gIHRha2VTZXF1ZW5jZS5fX2l0ZXJhdG9yVW5jYWNoZWQgPSBmdW5jdGlvbih0eXBlLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdG9yKHR5cGUsIHJldmVyc2UpO1xuICAgIH1cbiAgICB2YXIgaXRlcmF0b3IgPSBjb2xsZWN0aW9uLl9faXRlcmF0b3IoSVRFUkFURV9FTlRSSUVTLCByZXZlcnNlKTtcbiAgICB2YXIgaXRlcmF0aW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghaXRlcmF0aW5nKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvckRvbmUoKTtcbiAgICAgIH1cbiAgICAgIHZhciBzdGVwID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgaWYgKHN0ZXAuZG9uZSkge1xuICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgIH1cbiAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICB2YXIgayA9IGVudHJ5WzBdO1xuICAgICAgdmFyIHYgPSBlbnRyeVsxXTtcbiAgICAgIGlmICghcHJlZGljYXRlLmNhbGwoY29udGV4dCwgdiwgaywgdGhpcyQxKSkge1xuICAgICAgICBpdGVyYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yRG9uZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGUgPT09IElURVJBVEVfRU5UUklFUyA/IHN0ZXAgOiBpdGVyYXRvclZhbHVlKHR5cGUsIGssIHYsIHN0ZXApO1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gdGFrZVNlcXVlbmNlO1xufVxuXG5mdW5jdGlvbiBza2lwV2hpbGVGYWN0b3J5KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgY29udGV4dCwgdXNlS2V5cykge1xuICB2YXIgc2tpcFNlcXVlbmNlID0gbWFrZVNlcXVlbmNlKGNvbGxlY3Rpb24pO1xuICBza2lwU2VxdWVuY2UuX19pdGVyYXRlVW5jYWNoZWQgPSBmdW5jdGlvbihmbiwgcmV2ZXJzZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRlKGZuLCByZXZlcnNlKTtcbiAgICB9XG4gICAgdmFyIGlzU2tpcHBpbmcgPSB0cnVlO1xuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICBjb2xsZWN0aW9uLl9faXRlcmF0ZShmdW5jdGlvbiAodiwgaywgYykge1xuICAgICAgaWYgKCEoaXNTa2lwcGluZyAmJiAoaXNTa2lwcGluZyA9IHByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHYsIGssIGMpKSkpIHtcbiAgICAgICAgaXRlcmF0aW9ucysrO1xuICAgICAgICByZXR1cm4gZm4odiwgdXNlS2V5cyA/IGsgOiBpdGVyYXRpb25zIC0gMSwgdGhpcyQxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXRlcmF0aW9ucztcbiAgfTtcbiAgc2tpcFNlcXVlbmNlLl9faXRlcmF0b3JVbmNhY2hlZCA9IGZ1bmN0aW9uKHR5cGUsIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0b3IodHlwZSwgcmV2ZXJzZSk7XG4gICAgfVxuICAgIHZhciBpdGVyYXRvciA9IGNvbGxlY3Rpb24uX19pdGVyYXRvcihJVEVSQVRFX0VOVFJJRVMsIHJldmVyc2UpO1xuICAgIHZhciBza2lwcGluZyA9IHRydWU7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaztcbiAgICAgIHZhciB2O1xuICAgICAgZG8ge1xuICAgICAgICBzdGVwID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICBpZiAoc3RlcC5kb25lKSB7XG4gICAgICAgICAgaWYgKHVzZUtleXMgfHwgdHlwZSA9PT0gSVRFUkFURV9WQUxVRVMpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGVwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZSA9PT0gSVRFUkFURV9LRVlTKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JWYWx1ZSh0eXBlLCBpdGVyYXRpb25zKyssIHVuZGVmaW5lZCwgc3RlcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpdGVyYXRvclZhbHVlKHR5cGUsIGl0ZXJhdGlvbnMrKywgc3RlcC52YWx1ZVsxXSwgc3RlcCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgayA9IGVudHJ5WzBdO1xuICAgICAgICB2ID0gZW50cnlbMV07XG4gICAgICAgIHNraXBwaW5nICYmIChza2lwcGluZyA9IHByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHYsIGssIHRoaXMkMSkpO1xuICAgICAgfSB3aGlsZSAoc2tpcHBpbmcpO1xuICAgICAgcmV0dXJuIHR5cGUgPT09IElURVJBVEVfRU5UUklFUyA/IHN0ZXAgOiBpdGVyYXRvclZhbHVlKHR5cGUsIGssIHYsIHN0ZXApO1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gc2tpcFNlcXVlbmNlO1xufVxuXG5mdW5jdGlvbiBjb25jYXRGYWN0b3J5KGNvbGxlY3Rpb24sIHZhbHVlcykge1xuICB2YXIgaXNLZXllZENvbGxlY3Rpb24gPSBpc0tleWVkKGNvbGxlY3Rpb24pO1xuICB2YXIgaXRlcnMgPSBbY29sbGVjdGlvbl1cbiAgICAuY29uY2F0KHZhbHVlcylcbiAgICAubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICBpZiAoIWlzQ29sbGVjdGlvbih2KSkge1xuICAgICAgICB2ID0gaXNLZXllZENvbGxlY3Rpb25cbiAgICAgICAgICA/IGtleWVkU2VxRnJvbVZhbHVlKHYpXG4gICAgICAgICAgOiBpbmRleGVkU2VxRnJvbVZhbHVlKEFycmF5LmlzQXJyYXkodikgPyB2IDogW3ZdKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNLZXllZENvbGxlY3Rpb24pIHtcbiAgICAgICAgdiA9IEtleWVkQ29sbGVjdGlvbih2KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2O1xuICAgIH0pXG4gICAgLmZpbHRlcihmdW5jdGlvbiAodikgeyByZXR1cm4gdi5zaXplICE9PSAwOyB9KTtcblxuICBpZiAoaXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH1cblxuICBpZiAoaXRlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgdmFyIHNpbmdsZXRvbiA9IGl0ZXJzWzBdO1xuICAgIGlmIChcbiAgICAgIHNpbmdsZXRvbiA9PT0gY29sbGVjdGlvbiB8fFxuICAgICAgKGlzS2V5ZWRDb2xsZWN0aW9uICYmIGlzS2V5ZWQoc2luZ2xldG9uKSkgfHxcbiAgICAgIChpc0luZGV4ZWQoY29sbGVjdGlvbikgJiYgaXNJbmRleGVkKHNpbmdsZXRvbikpXG4gICAgKSB7XG4gICAgICByZXR1cm4gc2luZ2xldG9uO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb25jYXRTZXEgPSBuZXcgQXJyYXlTZXEoaXRlcnMpO1xuICBpZiAoaXNLZXllZENvbGxlY3Rpb24pIHtcbiAgICBjb25jYXRTZXEgPSBjb25jYXRTZXEudG9LZXllZFNlcSgpO1xuICB9IGVsc2UgaWYgKCFpc0luZGV4ZWQoY29sbGVjdGlvbikpIHtcbiAgICBjb25jYXRTZXEgPSBjb25jYXRTZXEudG9TZXRTZXEoKTtcbiAgfVxuICBjb25jYXRTZXEgPSBjb25jYXRTZXEuZmxhdHRlbih0cnVlKTtcbiAgY29uY2F0U2VxLnNpemUgPSBpdGVycy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgc2VxKSB7XG4gICAgaWYgKHN1bSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgc2l6ZSA9IHNlcS5zaXplO1xuICAgICAgaWYgKHNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc3VtICsgc2l6ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIDApO1xuICByZXR1cm4gY29uY2F0U2VxO1xufVxuXG5mdW5jdGlvbiBmbGF0dGVuRmFjdG9yeShjb2xsZWN0aW9uLCBkZXB0aCwgdXNlS2V5cykge1xuICB2YXIgZmxhdFNlcXVlbmNlID0gbWFrZVNlcXVlbmNlKGNvbGxlY3Rpb24pO1xuICBmbGF0U2VxdWVuY2UuX19pdGVyYXRlVW5jYWNoZWQgPSBmdW5jdGlvbihmbiwgcmV2ZXJzZSkge1xuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0ZShmbiwgcmV2ZXJzZSk7XG4gICAgfVxuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICB2YXIgc3RvcHBlZCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGZsYXREZWVwKGl0ZXIsIGN1cnJlbnREZXB0aCkge1xuICAgICAgaXRlci5fX2l0ZXJhdGUoZnVuY3Rpb24gKHYsIGspIHtcbiAgICAgICAgaWYgKCghZGVwdGggfHwgY3VycmVudERlcHRoIDwgZGVwdGgpICYmIGlzQ29sbGVjdGlvbih2KSkge1xuICAgICAgICAgIGZsYXREZWVwKHYsIGN1cnJlbnREZXB0aCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZXJhdGlvbnMrKztcbiAgICAgICAgICBpZiAoZm4odiwgdXNlS2V5cyA/IGsgOiBpdGVyYXRpb25zIC0gMSwgZmxhdFNlcXVlbmNlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXN0b3BwZWQ7XG4gICAgICB9LCByZXZlcnNlKTtcbiAgICB9XG4gICAgZmxhdERlZXAoY29sbGVjdGlvbiwgMCk7XG4gICAgcmV0dXJuIGl0ZXJhdGlvbnM7XG4gIH07XG4gIGZsYXRTZXF1ZW5jZS5fX2l0ZXJhdG9yVW5jYWNoZWQgPSBmdW5jdGlvbih0eXBlLCByZXZlcnNlKSB7XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRvcih0eXBlLCByZXZlcnNlKTtcbiAgICB9XG4gICAgdmFyIGl0ZXJhdG9yID0gY29sbGVjdGlvbi5fX2l0ZXJhdG9yKHR5cGUsIHJldmVyc2UpO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIHdoaWxlIChpdGVyYXRvcikge1xuICAgICAgICB2YXIgc3RlcCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgaWYgKHN0ZXAuZG9uZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBpdGVyYXRvciA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgaWYgKHR5cGUgPT09IElURVJBVEVfRU5UUklFUykge1xuICAgICAgICAgIHYgPSB2WzFdO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoIWRlcHRoIHx8IHN0YWNrLmxlbmd0aCA8IGRlcHRoKSAmJiBpc0NvbGxlY3Rpb24odikpIHtcbiAgICAgICAgICBzdGFjay5wdXNoKGl0ZXJhdG9yKTtcbiAgICAgICAgICBpdGVyYXRvciA9IHYuX19pdGVyYXRvcih0eXBlLCByZXZlcnNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdXNlS2V5cyA/IHN0ZXAgOiBpdGVyYXRvclZhbHVlKHR5cGUsIGl0ZXJhdGlvbnMrKywgdiwgc3RlcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVyYXRvckRvbmUoKTtcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIGZsYXRTZXF1ZW5jZTtcbn1cblxuZnVuY3Rpb24gZmxhdE1hcEZhY3RvcnkoY29sbGVjdGlvbiwgbWFwcGVyLCBjb250ZXh0KSB7XG4gIHZhciBjb2VyY2UgPSBjb2xsZWN0aW9uQ2xhc3MoY29sbGVjdGlvbik7XG4gIHJldHVybiBjb2xsZWN0aW9uXG4gICAgLnRvU2VxKClcbiAgICAubWFwKGZ1bmN0aW9uICh2LCBrKSB7IHJldHVybiBjb2VyY2UobWFwcGVyLmNhbGwoY29udGV4dCwgdiwgaywgY29sbGVjdGlvbikpOyB9KVxuICAgIC5mbGF0dGVuKHRydWUpO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvc2VGYWN0b3J5KGNvbGxlY3Rpb24sIHNlcGFyYXRvcikge1xuICB2YXIgaW50ZXJwb3NlZFNlcXVlbmNlID0gbWFrZVNlcXVlbmNlKGNvbGxlY3Rpb24pO1xuICBpbnRlcnBvc2VkU2VxdWVuY2Uuc2l6ZSA9IGNvbGxlY3Rpb24uc2l6ZSAmJiBjb2xsZWN0aW9uLnNpemUgKiAyIC0gMTtcbiAgaW50ZXJwb3NlZFNlcXVlbmNlLl9faXRlcmF0ZVVuY2FjaGVkID0gZnVuY3Rpb24oZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICBjb2xsZWN0aW9uLl9faXRlcmF0ZShcbiAgICAgIGZ1bmN0aW9uICh2KSB7IHJldHVybiAoIWl0ZXJhdGlvbnMgfHwgZm4oc2VwYXJhdG9yLCBpdGVyYXRpb25zKyssIHRoaXMkMSkgIT09IGZhbHNlKSAmJlxuICAgICAgICBmbih2LCBpdGVyYXRpb25zKyssIHRoaXMkMSkgIT09IGZhbHNlOyB9LFxuICAgICAgcmV2ZXJzZVxuICAgICk7XG4gICAgcmV0dXJuIGl0ZXJhdGlvbnM7XG4gIH07XG4gIGludGVycG9zZWRTZXF1ZW5jZS5fX2l0ZXJhdG9yVW5jYWNoZWQgPSBmdW5jdGlvbih0eXBlLCByZXZlcnNlKSB7XG4gICAgdmFyIGl0ZXJhdG9yID0gY29sbGVjdGlvbi5fX2l0ZXJhdG9yKElURVJBVEVfVkFMVUVTLCByZXZlcnNlKTtcbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgdmFyIHN0ZXA7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXN0ZXAgfHwgaXRlcmF0aW9ucyAlIDIpIHtcbiAgICAgICAgc3RlcCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgaWYgKHN0ZXAuZG9uZSkge1xuICAgICAgICAgIHJldHVybiBzdGVwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0aW9ucyAlIDJcbiAgICAgICAgPyBpdGVyYXRvclZhbHVlKHR5cGUsIGl0ZXJhdGlvbnMrKywgc2VwYXJhdG9yKVxuICAgICAgICA6IGl0ZXJhdG9yVmFsdWUodHlwZSwgaXRlcmF0aW9ucysrLCBzdGVwLnZhbHVlLCBzdGVwKTtcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIGludGVycG9zZWRTZXF1ZW5jZTtcbn1cblxuZnVuY3Rpb24gc29ydEZhY3RvcnkoY29sbGVjdGlvbiwgY29tcGFyYXRvciwgbWFwcGVyKSB7XG4gIGlmICghY29tcGFyYXRvcikge1xuICAgIGNvbXBhcmF0b3IgPSBkZWZhdWx0Q29tcGFyYXRvcjtcbiAgfVxuICB2YXIgaXNLZXllZENvbGxlY3Rpb24gPSBpc0tleWVkKGNvbGxlY3Rpb24pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgZW50cmllcyA9IGNvbGxlY3Rpb25cbiAgICAudG9TZXEoKVxuICAgIC5tYXAoZnVuY3Rpb24gKHYsIGspIHsgcmV0dXJuIFtrLCB2LCBpbmRleCsrLCBtYXBwZXIgPyBtYXBwZXIodiwgaywgY29sbGVjdGlvbikgOiB2XTsgfSlcbiAgICAudmFsdWVTZXEoKVxuICAgIC50b0FycmF5KCk7XG4gIGVudHJpZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gY29tcGFyYXRvcihhWzNdLCBiWzNdKSB8fCBhWzJdIC0gYlsyXTsgfSkuZm9yRWFjaChcbiAgICBpc0tleWVkQ29sbGVjdGlvblxuICAgICAgPyBmdW5jdGlvbiAodiwgaSkge1xuICAgICAgICAgIGVudHJpZXNbaV0ubGVuZ3RoID0gMjtcbiAgICAgICAgfVxuICAgICAgOiBmdW5jdGlvbiAodiwgaSkge1xuICAgICAgICAgIGVudHJpZXNbaV0gPSB2WzFdO1xuICAgICAgICB9XG4gICk7XG4gIHJldHVybiBpc0tleWVkQ29sbGVjdGlvblxuICAgID8gS2V5ZWRTZXEoZW50cmllcylcbiAgICA6IGlzSW5kZXhlZChjb2xsZWN0aW9uKVxuICAgICAgPyBJbmRleGVkU2VxKGVudHJpZXMpXG4gICAgICA6IFNldFNlcShlbnRyaWVzKTtcbn1cblxuZnVuY3Rpb24gbWF4RmFjdG9yeShjb2xsZWN0aW9uLCBjb21wYXJhdG9yLCBtYXBwZXIpIHtcbiAgaWYgKCFjb21wYXJhdG9yKSB7XG4gICAgY29tcGFyYXRvciA9IGRlZmF1bHRDb21wYXJhdG9yO1xuICB9XG4gIGlmIChtYXBwZXIpIHtcbiAgICB2YXIgZW50cnkgPSBjb2xsZWN0aW9uXG4gICAgICAudG9TZXEoKVxuICAgICAgLm1hcChmdW5jdGlvbiAodiwgaykgeyByZXR1cm4gW3YsIG1hcHBlcih2LCBrLCBjb2xsZWN0aW9uKV07IH0pXG4gICAgICAucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiAobWF4Q29tcGFyZShjb21wYXJhdG9yLCBhWzFdLCBiWzFdKSA/IGIgOiBhKTsgfSk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5WzBdO1xuICB9XG4gIHJldHVybiBjb2xsZWN0aW9uLnJlZHVjZShmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gKG1heENvbXBhcmUoY29tcGFyYXRvciwgYSwgYikgPyBiIDogYSk7IH0pO1xufVxuXG5mdW5jdGlvbiBtYXhDb21wYXJlKGNvbXBhcmF0b3IsIGEsIGIpIHtcbiAgdmFyIGNvbXAgPSBjb21wYXJhdG9yKGIsIGEpO1xuICAvLyBiIGlzIGNvbnNpZGVyZWQgdGhlIG5ldyBtYXggaWYgdGhlIGNvbXBhcmF0b3IgZGVjbGFyZXMgdGhlbSBlcXVhbCwgYnV0XG4gIC8vIHRoZXkgYXJlIG5vdCBlcXVhbCBhbmQgYiBpcyBpbiBmYWN0IGEgbnVsbGlzaCB2YWx1ZS5cbiAgcmV0dXJuIChcbiAgICAoY29tcCA9PT0gMCAmJiBiICE9PSBhICYmIChiID09PSB1bmRlZmluZWQgfHwgYiA9PT0gbnVsbCB8fCBiICE9PSBiKSkgfHxcbiAgICBjb21wID4gMFxuICApO1xufVxuXG5mdW5jdGlvbiB6aXBXaXRoRmFjdG9yeShrZXlJdGVyLCB6aXBwZXIsIGl0ZXJzLCB6aXBBbGwpIHtcbiAgdmFyIHppcFNlcXVlbmNlID0gbWFrZVNlcXVlbmNlKGtleUl0ZXIpO1xuICB2YXIgc2l6ZXMgPSBuZXcgQXJyYXlTZXEoaXRlcnMpLm1hcChmdW5jdGlvbiAoaSkgeyByZXR1cm4gaS5zaXplOyB9KTtcbiAgemlwU2VxdWVuY2Uuc2l6ZSA9IHppcEFsbCA/IHNpemVzLm1heCgpIDogc2l6ZXMubWluKCk7XG4gIC8vIE5vdGU6IHRoaXMgYSBnZW5lcmljIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgX19pdGVyYXRlIGluIHRlcm1zIG9mXG4gIC8vIF9faXRlcmF0b3Igd2hpY2ggbWF5IGJlIG1vcmUgZ2VuZXJpY2FsbHkgdXNlZnVsIGluIHRoZSBmdXR1cmUuXG4gIHppcFNlcXVlbmNlLl9faXRlcmF0ZSA9IGZ1bmN0aW9uKGZuLCByZXZlcnNlKSB7XG4gICAgLyogZ2VuZXJpYzpcbiAgICB2YXIgaXRlcmF0b3IgPSB0aGlzLl9faXRlcmF0b3IoSVRFUkFURV9FTlRSSUVTLCByZXZlcnNlKTtcbiAgICB2YXIgc3RlcDtcbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgaXRlcmF0aW9ucysrO1xuICAgICAgaWYgKGZuKHN0ZXAudmFsdWVbMV0sIHN0ZXAudmFsdWVbMF0sIHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZXJhdGlvbnM7XG4gICAgKi9cbiAgICAvLyBpbmRleGVkOlxuICAgIHZhciBpdGVyYXRvciA9IHRoaXMuX19pdGVyYXRvcihJVEVSQVRFX1ZBTFVFUywgcmV2ZXJzZSk7XG4gICAgdmFyIHN0ZXA7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGlmIChmbihzdGVwLnZhbHVlLCBpdGVyYXRpb25zKyssIHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZXJhdGlvbnM7XG4gIH07XG4gIHppcFNlcXVlbmNlLl9faXRlcmF0b3JVbmNhY2hlZCA9IGZ1bmN0aW9uKHR5cGUsIHJldmVyc2UpIHtcbiAgICB2YXIgaXRlcmF0b3JzID0gaXRlcnMubWFwKFxuICAgICAgZnVuY3Rpb24gKGkpIHsgcmV0dXJuICgoaSA9IENvbGxlY3Rpb24oaSkpLCBnZXRJdGVyYXRvcihyZXZlcnNlID8gaS5yZXZlcnNlKCkgOiBpKSk7IH1cbiAgICApO1xuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICB2YXIgaXNEb25lID0gZmFsc2U7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RlcHM7XG4gICAgICBpZiAoIWlzRG9uZSkge1xuICAgICAgICBzdGVwcyA9IGl0ZXJhdG9ycy5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGkubmV4dCgpOyB9KTtcbiAgICAgICAgaXNEb25lID0gemlwQWxsID8gc3RlcHMuZXZlcnkoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMuZG9uZTsgfSkgOiBzdGVwcy5zb21lKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLmRvbmU7IH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzRG9uZSkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JEb25lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0b3JWYWx1ZShcbiAgICAgICAgdHlwZSxcbiAgICAgICAgaXRlcmF0aW9ucysrLFxuICAgICAgICB6aXBwZXIuYXBwbHkobnVsbCwgc3RlcHMubWFwKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLnZhbHVlOyB9KSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiB6aXBTZXF1ZW5jZTtcbn1cblxuLy8gI3ByYWdtYSBIZWxwZXIgRnVuY3Rpb25zXG5cbmZ1bmN0aW9uIHJlaWZ5KGl0ZXIsIHNlcSkge1xuICByZXR1cm4gaXRlciA9PT0gc2VxID8gaXRlciA6IGlzU2VxKGl0ZXIpID8gc2VxIDogaXRlci5jb25zdHJ1Y3RvcihzZXEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUVudHJ5KGVudHJ5KSB7XG4gIGlmIChlbnRyeSAhPT0gT2JqZWN0KGVudHJ5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFtLLCBWXSB0dXBsZTogJyArIGVudHJ5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0aW9uQ2xhc3MoY29sbGVjdGlvbikge1xuICByZXR1cm4gaXNLZXllZChjb2xsZWN0aW9uKVxuICAgID8gS2V5ZWRDb2xsZWN0aW9uXG4gICAgOiBpc0luZGV4ZWQoY29sbGVjdGlvbilcbiAgICAgID8gSW5kZXhlZENvbGxlY3Rpb25cbiAgICAgIDogU2V0Q29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gbWFrZVNlcXVlbmNlKGNvbGxlY3Rpb24pIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoXG4gICAgKGlzS2V5ZWQoY29sbGVjdGlvbilcbiAgICAgID8gS2V5ZWRTZXFcbiAgICAgIDogaXNJbmRleGVkKGNvbGxlY3Rpb24pXG4gICAgICAgID8gSW5kZXhlZFNlcVxuICAgICAgICA6IFNldFNlcVxuICAgICkucHJvdG90eXBlXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNhY2hlUmVzdWx0VGhyb3VnaCgpIHtcbiAgaWYgKHRoaXMuX2l0ZXIuY2FjaGVSZXN1bHQpIHtcbiAgICB0aGlzLl9pdGVyLmNhY2hlUmVzdWx0KCk7XG4gICAgdGhpcy5zaXplID0gdGhpcy5faXRlci5zaXplO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHJldHVybiBTZXEucHJvdG90eXBlLmNhY2hlUmVzdWx0LmNhbGwodGhpcyk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDb21wYXJhdG9yKGEsIGIpIHtcbiAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmIChiID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICByZXR1cm4gYSA+IGIgPyAxIDogYSA8IGIgPyAtMSA6IDA7XG59XG5cbi8vIGh0dHA6Ly9qc3BlcmYuY29tL2NvcHktYXJyYXktaW5saW5lXG5mdW5jdGlvbiBhcnJDb3B5KGFyciwgb2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuICB2YXIgbGVuID0gTWF0aC5tYXgoMCwgYXJyLmxlbmd0aCAtIG9mZnNldCk7XG4gIHZhciBuZXdBcnIgPSBuZXcgQXJyYXkobGVuKTtcbiAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGxlbjsgaWkrKykge1xuICAgIG5ld0FycltpaV0gPSBhcnJbaWkgKyBvZmZzZXRdO1xuICB9XG4gIHJldHVybiBuZXdBcnI7XG59XG5cbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIGVycm9yKSB7XG4gIGlmICghY29uZGl0aW9uKSB7IHRocm93IG5ldyBFcnJvcihlcnJvcik7IH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0Tm90SW5maW5pdGUoc2l6ZSkge1xuICBpbnZhcmlhbnQoXG4gICAgc2l6ZSAhPT0gSW5maW5pdHksXG4gICAgJ0Nhbm5vdCBwZXJmb3JtIHRoaXMgYWN0aW9uIHdpdGggYW4gaW5maW5pdGUgc2l6ZS4nXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvZXJjZUtleVBhdGgoa2V5UGF0aCkge1xuICBpZiAoaXNBcnJheUxpa2Uoa2V5UGF0aCkgJiYgdHlwZW9mIGtleVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGtleVBhdGg7XG4gIH1cbiAgaWYgKGlzT3JkZXJlZChrZXlQYXRoKSkge1xuICAgIHJldHVybiBrZXlQYXRoLnRvQXJyYXkoKTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICdJbnZhbGlkIGtleVBhdGg6IGV4cGVjdGVkIE9yZGVyZWQgQ29sbGVjdGlvbiBvciBBcnJheTogJyArIGtleVBhdGhcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iaih2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICYmXG4gICAgKHR5cGVvZiB2YWx1ZS5jb25zdHJ1Y3RvciAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdmFsdWUuY29uc3RydWN0b3IubmFtZSA9PT0gJ09iamVjdCcpXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBvdGVudGlhbGx5LXBlcnNpc3RlbnQgZGF0YSBzdHJ1Y3R1cmUsIGVpdGhlclxuICogcHJvdmlkZWQgYnkgSW1tdXRhYmxlLmpzIG9yIGEgcGxhaW4gQXJyYXkgb3IgT2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc0RhdGFTdHJ1Y3R1cmUodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgKGlzSW1tdXRhYmxlKHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqKHZhbHVlKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHZhbHVlIHRvIGEgc3RyaW5nLCBhZGRpbmcgcXVvdGVzIGlmIGEgc3RyaW5nIHdhcyBwcm92aWRlZC5cbiAqL1xuZnVuY3Rpb24gcXVvdGVTdHJpbmcodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG4gIH0gY2F0Y2ggKF9pZ25vcmVFcnJvcikge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzKGNvbGxlY3Rpb24sIGtleSkge1xuICByZXR1cm4gaXNJbW11dGFibGUoY29sbGVjdGlvbilcbiAgICA/IGNvbGxlY3Rpb24uaGFzKGtleSlcbiAgICA6IGlzRGF0YVN0cnVjdHVyZShjb2xsZWN0aW9uKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbGxlY3Rpb24sIGtleSk7XG59XG5cbmZ1bmN0aW9uIGdldChjb2xsZWN0aW9uLCBrZXksIG5vdFNldFZhbHVlKSB7XG4gIHJldHVybiBpc0ltbXV0YWJsZShjb2xsZWN0aW9uKVxuICAgID8gY29sbGVjdGlvbi5nZXQoa2V5LCBub3RTZXRWYWx1ZSlcbiAgICA6ICFoYXMoY29sbGVjdGlvbiwga2V5KVxuICAgICAgPyBub3RTZXRWYWx1ZVxuICAgICAgOiB0eXBlb2YgY29sbGVjdGlvbi5nZXQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjb2xsZWN0aW9uLmdldChrZXkpXG4gICAgICAgIDogY29sbGVjdGlvbltrZXldO1xufVxuXG5mdW5jdGlvbiBzaGFsbG93Q29weShmcm9tKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGZyb20pKSB7XG4gICAgcmV0dXJuIGFyckNvcHkoZnJvbSk7XG4gIH1cbiAgdmFyIHRvID0ge307XG4gIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoY29sbGVjdGlvbiwga2V5KSB7XG4gIGlmICghaXNEYXRhU3RydWN0dXJlKGNvbGxlY3Rpb24pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdDYW5ub3QgdXBkYXRlIG5vbi1kYXRhLXN0cnVjdHVyZSB2YWx1ZTogJyArIGNvbGxlY3Rpb25cbiAgICApO1xuICB9XG4gIGlmIChpc0ltbXV0YWJsZShjb2xsZWN0aW9uKSkge1xuICAgIGlmICghY29sbGVjdGlvbi5yZW1vdmUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgdXBkYXRlIGltbXV0YWJsZSB2YWx1ZSB3aXRob3V0IC5yZW1vdmUoKSBtZXRob2Q6ICcgKyBjb2xsZWN0aW9uXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY29sbGVjdGlvbi5yZW1vdmUoa2V5KTtcbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwoY29sbGVjdGlvbiwga2V5KSkge1xuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9XG4gIHZhciBjb2xsZWN0aW9uQ29weSA9IHNoYWxsb3dDb3B5KGNvbGxlY3Rpb24pO1xuICBpZiAoQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uQ29weSkpIHtcbiAgICBjb2xsZWN0aW9uQ29weS5zcGxpY2Uoa2V5LCAxKTtcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgY29sbGVjdGlvbkNvcHlba2V5XTtcbiAgfVxuICByZXR1cm4gY29sbGVjdGlvbkNvcHk7XG59XG5cbmZ1bmN0aW9uIHNldChjb2xsZWN0aW9uLCBrZXksIHZhbHVlKSB7XG4gIGlmICghaXNEYXRhU3RydWN0dXJlKGNvbGxlY3Rpb24pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdDYW5ub3QgdXBkYXRlIG5vbi1kYXRhLXN0cnVjdHVyZSB2YWx1ZTogJyArIGNvbGxlY3Rpb25cbiAgICApO1xuICB9XG4gIGlmIChpc0ltbXV0YWJsZShjb2xsZWN0aW9uKSkge1xuICAgIGlmICghY29sbGVjdGlvbi5zZXQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgdXBkYXRlIGltbXV0YWJsZSB2YWx1ZSB3aXRob3V0IC5zZXQoKSBtZXRob2Q6ICcgKyBjb2xsZWN0aW9uXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY29sbGVjdGlvbi5zZXQoa2V5LCB2YWx1ZSk7XG4gIH1cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29sbGVjdGlvbiwga2V5KSAmJiB2YWx1ZSA9PT0gY29sbGVjdGlvbltrZXldKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH1cbiAgdmFyIGNvbGxlY3Rpb25Db3B5ID0gc2hhbGxvd0NvcHkoY29sbGVjdGlvbik7XG4gIGNvbGxlY3Rpb25Db3B5W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIGNvbGxlY3Rpb25Db3B5O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVJbihjb2xsZWN0aW9uLCBrZXlQYXRoLCBub3RTZXRWYWx1ZSwgdXBkYXRlcikge1xuICBpZiAoIXVwZGF0ZXIpIHtcbiAgICB1cGRhdGVyID0gbm90U2V0VmFsdWU7XG4gICAgbm90U2V0VmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgdmFyIHVwZGF0ZWRWYWx1ZSA9IHVwZGF0ZUluRGVlcGx5KFxuICAgIGlzSW1tdXRhYmxlKGNvbGxlY3Rpb24pLFxuICAgIGNvbGxlY3Rpb24sXG4gICAgY29lcmNlS2V5UGF0aChrZXlQYXRoKSxcbiAgICAwLFxuICAgIG5vdFNldFZhbHVlLFxuICAgIHVwZGF0ZXJcbiAgKTtcbiAgcmV0dXJuIHVwZGF0ZWRWYWx1ZSA9PT0gTk9UX1NFVCA/IG5vdFNldFZhbHVlIDogdXBkYXRlZFZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVJbkRlZXBseShcbiAgaW5JbW11dGFibGUsXG4gIGV4aXN0aW5nLFxuICBrZXlQYXRoLFxuICBpLFxuICBub3RTZXRWYWx1ZSxcbiAgdXBkYXRlclxuKSB7XG4gIHZhciB3YXNOb3RTZXQgPSBleGlzdGluZyA9PT0gTk9UX1NFVDtcbiAgaWYgKGkgPT09IGtleVBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIGV4aXN0aW5nVmFsdWUgPSB3YXNOb3RTZXQgPyBub3RTZXRWYWx1ZSA6IGV4aXN0aW5nO1xuICAgIHZhciBuZXdWYWx1ZSA9IHVwZGF0ZXIoZXhpc3RpbmdWYWx1ZSk7XG4gICAgcmV0dXJuIG5ld1ZhbHVlID09PSBleGlzdGluZ1ZhbHVlID8gZXhpc3RpbmcgOiBuZXdWYWx1ZTtcbiAgfVxuICBpZiAoIXdhc05vdFNldCAmJiAhaXNEYXRhU3RydWN0dXJlKGV4aXN0aW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnQ2Fubm90IHVwZGF0ZSB3aXRoaW4gbm9uLWRhdGEtc3RydWN0dXJlIHZhbHVlIGluIHBhdGggWycgK1xuICAgICAgICBrZXlQYXRoLnNsaWNlKDAsIGkpLm1hcChxdW90ZVN0cmluZykgK1xuICAgICAgICAnXTogJyArXG4gICAgICAgIGV4aXN0aW5nXG4gICAgKTtcbiAgfVxuICB2YXIga2V5ID0ga2V5UGF0aFtpXTtcbiAgdmFyIG5leHRFeGlzdGluZyA9IHdhc05vdFNldCA/IE5PVF9TRVQgOiBnZXQoZXhpc3RpbmcsIGtleSwgTk9UX1NFVCk7XG4gIHZhciBuZXh0VXBkYXRlZCA9IHVwZGF0ZUluRGVlcGx5KFxuICAgIG5leHRFeGlzdGluZyA9PT0gTk9UX1NFVCA/IGluSW1tdXRhYmxlIDogaXNJbW11dGFibGUobmV4dEV4aXN0aW5nKSxcbiAgICBuZXh0RXhpc3RpbmcsXG4gICAga2V5UGF0aCxcbiAgICBpICsgMSxcbiAgICBub3RTZXRWYWx1ZSxcbiAgICB1cGRhdGVyXG4gICk7XG4gIHJldHVybiBuZXh0VXBkYXRlZCA9PT0gbmV4dEV4aXN0aW5nXG4gICAgPyBleGlzdGluZ1xuICAgIDogbmV4dFVwZGF0ZWQgPT09IE5PVF9TRVRcbiAgICAgID8gcmVtb3ZlKGV4aXN0aW5nLCBrZXkpXG4gICAgICA6IHNldChcbiAgICAgICAgICB3YXNOb3RTZXQgPyAoaW5JbW11dGFibGUgPyBlbXB0eU1hcCgpIDoge30pIDogZXhpc3RpbmcsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIG5leHRVcGRhdGVkXG4gICAgICAgICk7XG59XG5cbmZ1bmN0aW9uIHNldEluKGNvbGxlY3Rpb24sIGtleVBhdGgsIHZhbHVlKSB7XG4gIHJldHVybiB1cGRhdGVJbihjb2xsZWN0aW9uLCBrZXlQYXRoLCBOT1RfU0VULCBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSk7XG59XG5cbmZ1bmN0aW9uIHNldEluJDEoa2V5UGF0aCwgdikge1xuICByZXR1cm4gc2V0SW4odGhpcywga2V5UGF0aCwgdik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUluKGNvbGxlY3Rpb24sIGtleVBhdGgpIHtcbiAgcmV0dXJuIHVwZGF0ZUluKGNvbGxlY3Rpb24sIGtleVBhdGgsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5PVF9TRVQ7IH0pO1xufVxuXG5mdW5jdGlvbiBkZWxldGVJbihrZXlQYXRoKSB7XG4gIHJldHVybiByZW1vdmVJbih0aGlzLCBrZXlQYXRoKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlKGNvbGxlY3Rpb24sIGtleSwgbm90U2V0VmFsdWUsIHVwZGF0ZXIpIHtcbiAgcmV0dXJuIHVwZGF0ZUluKGNvbGxlY3Rpb24sIFtrZXldLCBub3RTZXRWYWx1ZSwgdXBkYXRlcik7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZSQxKGtleSwgbm90U2V0VmFsdWUsIHVwZGF0ZXIpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDFcbiAgICA/IGtleSh0aGlzKVxuICAgIDogdXBkYXRlKHRoaXMsIGtleSwgbm90U2V0VmFsdWUsIHVwZGF0ZXIpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVJbiQxKGtleVBhdGgsIG5vdFNldFZhbHVlLCB1cGRhdGVyKSB7XG4gIHJldHVybiB1cGRhdGVJbih0aGlzLCBrZXlQYXRoLCBub3RTZXRWYWx1ZSwgdXBkYXRlcik7XG59XG5cbmZ1bmN0aW9uIG1lcmdlKCkge1xuICB2YXIgaXRlcnMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgd2hpbGUgKCBsZW4tLSApIGl0ZXJzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgcmV0dXJuIG1lcmdlSW50b0tleWVkV2l0aCh0aGlzLCBpdGVycyk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlV2l0aChtZXJnZXIpIHtcbiAgdmFyIGl0ZXJzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICB3aGlsZSAoIGxlbi0tID4gMCApIGl0ZXJzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gIGlmICh0eXBlb2YgbWVyZ2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBtZXJnZXIgZnVuY3Rpb246ICcgKyBtZXJnZXIpO1xuICB9XG4gIHJldHVybiBtZXJnZUludG9LZXllZFdpdGgodGhpcywgaXRlcnMsIG1lcmdlcik7XG59XG5cbmZ1bmN0aW9uIG1lcmdlSW50b0tleWVkV2l0aChjb2xsZWN0aW9uLCBjb2xsZWN0aW9ucywgbWVyZ2VyKSB7XG4gIHZhciBpdGVycyA9IFtdO1xuICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpaSsrKSB7XG4gICAgdmFyIGNvbGxlY3Rpb24kMSA9IEtleWVkQ29sbGVjdGlvbihjb2xsZWN0aW9uc1tpaV0pO1xuICAgIGlmIChjb2xsZWN0aW9uJDEuc2l6ZSAhPT0gMCkge1xuICAgICAgaXRlcnMucHVzaChjb2xsZWN0aW9uJDEpO1xuICAgIH1cbiAgfVxuICBpZiAoaXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH1cbiAgaWYgKFxuICAgIGNvbGxlY3Rpb24udG9TZXEoKS5zaXplID09PSAwICYmXG4gICAgIWNvbGxlY3Rpb24uX19vd25lcklEICYmXG4gICAgaXRlcnMubGVuZ3RoID09PSAxXG4gICkge1xuICAgIHJldHVybiBjb2xsZWN0aW9uLmNvbnN0cnVjdG9yKGl0ZXJzWzBdKTtcbiAgfVxuICByZXR1cm4gY29sbGVjdGlvbi53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChjb2xsZWN0aW9uKSB7XG4gICAgdmFyIG1lcmdlSW50b0NvbGxlY3Rpb24gPSBtZXJnZXJcbiAgICAgID8gZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICB1cGRhdGUoXG4gICAgICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgTk9UX1NFVCxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChvbGRWYWwpIHsgcmV0dXJuIChvbGRWYWwgPT09IE5PVF9TRVQgPyB2YWx1ZSA6IG1lcmdlcihvbGRWYWwsIHZhbHVlLCBrZXkpKTsgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIDogZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICBjb2xsZWN0aW9uLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgaXRlcnMubGVuZ3RoOyBpaSsrKSB7XG4gICAgICBpdGVyc1tpaV0uZm9yRWFjaChtZXJnZUludG9Db2xsZWN0aW9uKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtZXJnZSQxKGNvbGxlY3Rpb24pIHtcbiAgdmFyIHNvdXJjZXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gIHdoaWxlICggbGVuLS0gPiAwICkgc291cmNlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICByZXR1cm4gbWVyZ2VXaXRoU291cmNlcyhjb2xsZWN0aW9uLCBzb3VyY2VzKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VXaXRoJDEobWVyZ2VyLCBjb2xsZWN0aW9uKSB7XG4gIHZhciBzb3VyY2VzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICB3aGlsZSAoIGxlbi0tID4gMCApIHNvdXJjZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAyIF07XG5cbiAgcmV0dXJuIG1lcmdlV2l0aFNvdXJjZXMoY29sbGVjdGlvbiwgc291cmNlcywgbWVyZ2VyKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VEZWVwKGNvbGxlY3Rpb24pIHtcbiAgdmFyIHNvdXJjZXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gIHdoaWxlICggbGVuLS0gPiAwICkgc291cmNlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICByZXR1cm4gbWVyZ2VEZWVwV2l0aFNvdXJjZXMoY29sbGVjdGlvbiwgc291cmNlcyk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlRGVlcFdpdGgobWVyZ2VyLCBjb2xsZWN0aW9uKSB7XG4gIHZhciBzb3VyY2VzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICB3aGlsZSAoIGxlbi0tID4gMCApIHNvdXJjZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAyIF07XG5cbiAgcmV0dXJuIG1lcmdlRGVlcFdpdGhTb3VyY2VzKGNvbGxlY3Rpb24sIHNvdXJjZXMsIG1lcmdlcik7XG59XG5cbmZ1bmN0aW9uIG1lcmdlRGVlcFdpdGhTb3VyY2VzKGNvbGxlY3Rpb24sIHNvdXJjZXMsIG1lcmdlcikge1xuICByZXR1cm4gbWVyZ2VXaXRoU291cmNlcyhjb2xsZWN0aW9uLCBzb3VyY2VzLCBkZWVwTWVyZ2VyV2l0aChtZXJnZXIpKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VXaXRoU291cmNlcyhjb2xsZWN0aW9uLCBzb3VyY2VzLCBtZXJnZXIpIHtcbiAgaWYgKCFpc0RhdGFTdHJ1Y3R1cmUoY29sbGVjdGlvbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ0Nhbm5vdCBtZXJnZSBpbnRvIG5vbi1kYXRhLXN0cnVjdHVyZSB2YWx1ZTogJyArIGNvbGxlY3Rpb25cbiAgICApO1xuICB9XG4gIGlmIChpc0ltbXV0YWJsZShjb2xsZWN0aW9uKSkge1xuICAgIHJldHVybiB0eXBlb2YgbWVyZ2VyID09PSAnZnVuY3Rpb24nICYmIGNvbGxlY3Rpb24ubWVyZ2VXaXRoXG4gICAgICA/IGNvbGxlY3Rpb24ubWVyZ2VXaXRoLmFwcGx5KGNvbGxlY3Rpb24sIFsgbWVyZ2VyIF0uY29uY2F0KCBzb3VyY2VzICkpXG4gICAgICA6IGNvbGxlY3Rpb24ubWVyZ2VcbiAgICAgICAgPyBjb2xsZWN0aW9uLm1lcmdlLmFwcGx5KGNvbGxlY3Rpb24sIHNvdXJjZXMpXG4gICAgICAgIDogY29sbGVjdGlvbi5jb25jYXQuYXBwbHkoY29sbGVjdGlvbiwgc291cmNlcyk7XG4gIH1cbiAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbGxlY3Rpb24pO1xuICB2YXIgbWVyZ2VkID0gY29sbGVjdGlvbjtcbiAgdmFyIENvbGxlY3Rpb24kJDEgPSBpc0FycmF5ID8gSW5kZXhlZENvbGxlY3Rpb24gOiBLZXllZENvbGxlY3Rpb247XG4gIHZhciBtZXJnZUl0ZW0gPSBpc0FycmF5XG4gICAgPyBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgLy8gQ29weSBvbiB3cml0ZVxuICAgICAgICBpZiAobWVyZ2VkID09PSBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgbWVyZ2VkID0gc2hhbGxvd0NvcHkobWVyZ2VkKTtcbiAgICAgICAgfVxuICAgICAgICBtZXJnZWQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgOiBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICB2YXIgaGFzVmFsID0gaGFzT3duUHJvcGVydHkuY2FsbChtZXJnZWQsIGtleSk7XG4gICAgICAgIHZhciBuZXh0VmFsID1cbiAgICAgICAgICBoYXNWYWwgJiYgbWVyZ2VyID8gbWVyZ2VyKG1lcmdlZFtrZXldLCB2YWx1ZSwga2V5KSA6IHZhbHVlO1xuICAgICAgICBpZiAoIWhhc1ZhbCB8fCBuZXh0VmFsICE9PSBtZXJnZWRba2V5XSkge1xuICAgICAgICAgIC8vIENvcHkgb24gd3JpdGVcbiAgICAgICAgICBpZiAobWVyZ2VkID09PSBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBtZXJnZWQgPSBzaGFsbG93Q29weShtZXJnZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtZXJnZWRba2V5XSA9IG5leHRWYWw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgIENvbGxlY3Rpb24kJDEoc291cmNlc1tpXSkuZm9yRWFjaChtZXJnZUl0ZW0pO1xuICB9XG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZXBNZXJnZXJXaXRoKG1lcmdlcikge1xuICBmdW5jdGlvbiBkZWVwTWVyZ2VyKG9sZFZhbHVlLCBuZXdWYWx1ZSwga2V5KSB7XG4gICAgcmV0dXJuIGlzRGF0YVN0cnVjdHVyZShvbGRWYWx1ZSkgJiYgaXNEYXRhU3RydWN0dXJlKG5ld1ZhbHVlKVxuICAgICAgPyBtZXJnZVdpdGhTb3VyY2VzKG9sZFZhbHVlLCBbbmV3VmFsdWVdLCBkZWVwTWVyZ2VyKVxuICAgICAgOiBtZXJnZXJcbiAgICAgICAgPyBtZXJnZXIob2xkVmFsdWUsIG5ld1ZhbHVlLCBrZXkpXG4gICAgICAgIDogbmV3VmFsdWU7XG4gIH1cbiAgcmV0dXJuIGRlZXBNZXJnZXI7XG59XG5cbmZ1bmN0aW9uIG1lcmdlRGVlcCQxKCkge1xuICB2YXIgaXRlcnMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgd2hpbGUgKCBsZW4tLSApIGl0ZXJzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgcmV0dXJuIG1lcmdlRGVlcFdpdGhTb3VyY2VzKHRoaXMsIGl0ZXJzKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VEZWVwV2l0aCQxKG1lcmdlcikge1xuICB2YXIgaXRlcnMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gIHdoaWxlICggbGVuLS0gPiAwICkgaXRlcnNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgcmV0dXJuIG1lcmdlRGVlcFdpdGhTb3VyY2VzKHRoaXMsIGl0ZXJzLCBtZXJnZXIpO1xufVxuXG5mdW5jdGlvbiBtZXJnZUluKGtleVBhdGgpIHtcbiAgdmFyIGl0ZXJzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICB3aGlsZSAoIGxlbi0tID4gMCApIGl0ZXJzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gIHJldHVybiB1cGRhdGVJbih0aGlzLCBrZXlQYXRoLCBlbXB0eU1hcCgpLCBmdW5jdGlvbiAobSkgeyByZXR1cm4gbWVyZ2VXaXRoU291cmNlcyhtLCBpdGVycyk7IH0pO1xufVxuXG5mdW5jdGlvbiBtZXJnZURlZXBJbihrZXlQYXRoKSB7XG4gIHZhciBpdGVycyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgd2hpbGUgKCBsZW4tLSA+IDAgKSBpdGVyc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICByZXR1cm4gdXBkYXRlSW4odGhpcywga2V5UGF0aCwgZW1wdHlNYXAoKSwgZnVuY3Rpb24gKG0pIHsgcmV0dXJuIG1lcmdlRGVlcFdpdGhTb3VyY2VzKG0sIGl0ZXJzKTsgfVxuICApO1xufVxuXG5mdW5jdGlvbiB3aXRoTXV0YXRpb25zKGZuKSB7XG4gIHZhciBtdXRhYmxlID0gdGhpcy5hc011dGFibGUoKTtcbiAgZm4obXV0YWJsZSk7XG4gIHJldHVybiBtdXRhYmxlLndhc0FsdGVyZWQoKSA/IG11dGFibGUuX19lbnN1cmVPd25lcih0aGlzLl9fb3duZXJJRCkgOiB0aGlzO1xufVxuXG5mdW5jdGlvbiBhc011dGFibGUoKSB7XG4gIHJldHVybiB0aGlzLl9fb3duZXJJRCA/IHRoaXMgOiB0aGlzLl9fZW5zdXJlT3duZXIobmV3IE93bmVySUQoKSk7XG59XG5cbmZ1bmN0aW9uIGFzSW1tdXRhYmxlKCkge1xuICByZXR1cm4gdGhpcy5fX2Vuc3VyZU93bmVyKCk7XG59XG5cbmZ1bmN0aW9uIHdhc0FsdGVyZWQoKSB7XG4gIHJldHVybiB0aGlzLl9fYWx0ZXJlZDtcbn1cblxudmFyIE1hcCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEtleWVkQ29sbGVjdGlvbiQkMSkge1xuICBmdW5jdGlvbiBNYXAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgPyBlbXB0eU1hcCgpXG4gICAgICA6IGlzTWFwKHZhbHVlKSAmJiAhaXNPcmRlcmVkKHZhbHVlKVxuICAgICAgICA/IHZhbHVlXG4gICAgICAgIDogZW1wdHlNYXAoKS53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChtYXApIHtcbiAgICAgICAgICAgIHZhciBpdGVyID0gS2V5ZWRDb2xsZWN0aW9uJCQxKHZhbHVlKTtcbiAgICAgICAgICAgIGFzc2VydE5vdEluZmluaXRlKGl0ZXIuc2l6ZSk7XG4gICAgICAgICAgICBpdGVyLmZvckVhY2goZnVuY3Rpb24gKHYsIGspIHsgcmV0dXJuIG1hcC5zZXQoaywgdik7IH0pO1xuICAgICAgICAgIH0pO1xuICB9XG5cbiAgaWYgKCBLZXllZENvbGxlY3Rpb24kJDEgKSBNYXAuX19wcm90b19fID0gS2V5ZWRDb2xsZWN0aW9uJCQxO1xuICBNYXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggS2V5ZWRDb2xsZWN0aW9uJCQxICYmIEtleWVkQ29sbGVjdGlvbiQkMS5wcm90b3R5cGUgKTtcbiAgTWFwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hcDtcblxuICBNYXAub2YgPSBmdW5jdGlvbiBvZiAoKSB7XG4gICAgdmFyIGtleVZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBrZXlWYWx1ZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIHJldHVybiBlbXB0eU1hcCgpLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24gKG1hcCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgaWYgKGkgKyAxID49IGtleVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdmFsdWUgZm9yIGtleTogJyArIGtleVZhbHVlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgbWFwLnNldChrZXlWYWx1ZXNbaV0sIGtleVZhbHVlc1tpICsgMV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIE1hcC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX190b1N0cmluZygnTWFwIHsnLCAnfScpO1xuICB9O1xuXG4gIC8vIEBwcmFnbWEgQWNjZXNzXG5cbiAgTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGssIG5vdFNldFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvb3RcbiAgICAgID8gdGhpcy5fcm9vdC5nZXQoMCwgdW5kZWZpbmVkLCBrLCBub3RTZXRWYWx1ZSlcbiAgICAgIDogbm90U2V0VmFsdWU7XG4gIH07XG5cbiAgLy8gQHByYWdtYSBNb2RpZmljYXRpb25cblxuICBNYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIHNldCAoaywgdikge1xuICAgIHJldHVybiB1cGRhdGVNYXAodGhpcywgaywgdik7XG4gIH07XG5cbiAgTWFwLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUgKGspIHtcbiAgICByZXR1cm4gdXBkYXRlTWFwKHRoaXMsIGssIE5PVF9TRVQpO1xuICB9O1xuXG4gIE1hcC5wcm90b3R5cGUuZGVsZXRlQWxsID0gZnVuY3Rpb24gZGVsZXRlQWxsIChrZXlzKSB7XG4gICAgdmFyIGNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uKGtleXMpO1xuXG4gICAgaWYgKGNvbGxlY3Rpb24uc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbiAobWFwKSB7XG4gICAgICBjb2xsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gbWFwLnJlbW92ZShrZXkpOyB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBNYXAucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIgKCkge1xuICAgIGlmICh0aGlzLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodGhpcy5fX293bmVySUQpIHtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgICB0aGlzLl9yb290ID0gbnVsbDtcbiAgICAgIHRoaXMuX19oYXNoID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fX2FsdGVyZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBlbXB0eU1hcCgpO1xuICB9O1xuXG4gIC8vIEBwcmFnbWEgQ29tcG9zaXRpb25cblxuICBNYXAucHJvdG90eXBlLnNvcnQgPSBmdW5jdGlvbiBzb3J0IChjb21wYXJhdG9yKSB7XG4gICAgLy8gTGF0ZSBiaW5kaW5nXG4gICAgcmV0dXJuIE9yZGVyZWRNYXAoc29ydEZhY3RvcnkodGhpcywgY29tcGFyYXRvcikpO1xuICB9O1xuXG4gIE1hcC5wcm90b3R5cGUuc29ydEJ5ID0gZnVuY3Rpb24gc29ydEJ5IChtYXBwZXIsIGNvbXBhcmF0b3IpIHtcbiAgICAvLyBMYXRlIGJpbmRpbmdcbiAgICByZXR1cm4gT3JkZXJlZE1hcChzb3J0RmFjdG9yeSh0aGlzLCBjb21wYXJhdG9yLCBtYXBwZXIpKTtcbiAgfTtcblxuICBNYXAucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1hcCAobWFwcGVyLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbiAobWFwKSB7XG4gICAgICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICBtYXAuc2V0KGtleSwgbWFwcGVyLmNhbGwoY29udGV4dCwgdmFsdWUsIGtleSwgbWFwKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIE11dGFiaWxpdHlcblxuICBNYXAucHJvdG90eXBlLl9faXRlcmF0b3IgPSBmdW5jdGlvbiBfX2l0ZXJhdG9yICh0eXBlLCByZXZlcnNlKSB7XG4gICAgcmV0dXJuIG5ldyBNYXBJdGVyYXRvcih0aGlzLCB0eXBlLCByZXZlcnNlKTtcbiAgfTtcblxuICBNYXAucHJvdG90eXBlLl9faXRlcmF0ZSA9IGZ1bmN0aW9uIF9faXRlcmF0ZSAoZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICB0aGlzLl9yb290ICYmXG4gICAgICB0aGlzLl9yb290Lml0ZXJhdGUoZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIGl0ZXJhdGlvbnMrKztcbiAgICAgICAgcmV0dXJuIGZuKGVudHJ5WzFdLCBlbnRyeVswXSwgdGhpcyQxKTtcbiAgICAgIH0sIHJldmVyc2UpO1xuICAgIHJldHVybiBpdGVyYXRpb25zO1xuICB9O1xuXG4gIE1hcC5wcm90b3R5cGUuX19lbnN1cmVPd25lciA9IGZ1bmN0aW9uIF9fZW5zdXJlT3duZXIgKG93bmVySUQpIHtcbiAgICBpZiAob3duZXJJRCA9PT0gdGhpcy5fX293bmVySUQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAoIW93bmVySUQpIHtcbiAgICAgIGlmICh0aGlzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5TWFwKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9fb3duZXJJRCA9IG93bmVySUQ7XG4gICAgICB0aGlzLl9fYWx0ZXJlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBtYWtlTWFwKHRoaXMuc2l6ZSwgdGhpcy5fcm9vdCwgb3duZXJJRCwgdGhpcy5fX2hhc2gpO1xuICB9O1xuXG4gIHJldHVybiBNYXA7XG59KEtleWVkQ29sbGVjdGlvbikpO1xuXG5NYXAuaXNNYXAgPSBpc01hcDtcblxudmFyIE1hcFByb3RvdHlwZSA9IE1hcC5wcm90b3R5cGU7XG5NYXBQcm90b3R5cGVbSVNfTUFQX1NZTUJPTF0gPSB0cnVlO1xuTWFwUHJvdG90eXBlW0RFTEVURV0gPSBNYXBQcm90b3R5cGUucmVtb3ZlO1xuTWFwUHJvdG90eXBlLnJlbW92ZUFsbCA9IE1hcFByb3RvdHlwZS5kZWxldGVBbGw7XG5NYXBQcm90b3R5cGUuc2V0SW4gPSBzZXRJbiQxO1xuTWFwUHJvdG90eXBlLnJlbW92ZUluID0gTWFwUHJvdG90eXBlLmRlbGV0ZUluID0gZGVsZXRlSW47XG5NYXBQcm90b3R5cGUudXBkYXRlID0gdXBkYXRlJDE7XG5NYXBQcm90b3R5cGUudXBkYXRlSW4gPSB1cGRhdGVJbiQxO1xuTWFwUHJvdG90eXBlLm1lcmdlID0gTWFwUHJvdG90eXBlLmNvbmNhdCA9IG1lcmdlO1xuTWFwUHJvdG90eXBlLm1lcmdlV2l0aCA9IG1lcmdlV2l0aDtcbk1hcFByb3RvdHlwZS5tZXJnZURlZXAgPSBtZXJnZURlZXAkMTtcbk1hcFByb3RvdHlwZS5tZXJnZURlZXBXaXRoID0gbWVyZ2VEZWVwV2l0aCQxO1xuTWFwUHJvdG90eXBlLm1lcmdlSW4gPSBtZXJnZUluO1xuTWFwUHJvdG90eXBlLm1lcmdlRGVlcEluID0gbWVyZ2VEZWVwSW47XG5NYXBQcm90b3R5cGUud2l0aE11dGF0aW9ucyA9IHdpdGhNdXRhdGlvbnM7XG5NYXBQcm90b3R5cGUud2FzQWx0ZXJlZCA9IHdhc0FsdGVyZWQ7XG5NYXBQcm90b3R5cGUuYXNJbW11dGFibGUgPSBhc0ltbXV0YWJsZTtcbk1hcFByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL2luaXQnXSA9IE1hcFByb3RvdHlwZS5hc011dGFibGUgPSBhc011dGFibGU7XG5NYXBQcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9zdGVwJ10gPSBmdW5jdGlvbihyZXN1bHQsIGFycikge1xuICByZXR1cm4gcmVzdWx0LnNldChhcnJbMF0sIGFyclsxXSk7XG59O1xuTWFwUHJvdG90eXBlWydAQHRyYW5zZHVjZXIvcmVzdWx0J10gPSBmdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIG9iai5hc0ltbXV0YWJsZSgpO1xufTtcblxuLy8gI3ByYWdtYSBUcmllIE5vZGVzXG5cbnZhciBBcnJheU1hcE5vZGUgPSBmdW5jdGlvbiBBcnJheU1hcE5vZGUob3duZXJJRCwgZW50cmllcykge1xuICB0aGlzLm93bmVySUQgPSBvd25lcklEO1xuICB0aGlzLmVudHJpZXMgPSBlbnRyaWVzO1xufTtcblxuQXJyYXlNYXBOb2RlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKHNoaWZ0LCBrZXlIYXNoLCBrZXksIG5vdFNldFZhbHVlKSB7XG4gIHZhciBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuICBmb3IgKHZhciBpaSA9IDAsIGxlbiA9IGVudHJpZXMubGVuZ3RoOyBpaSA8IGxlbjsgaWkrKykge1xuICAgIGlmIChpcyhrZXksIGVudHJpZXNbaWldWzBdKSkge1xuICAgICAgcmV0dXJuIGVudHJpZXNbaWldWzFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm90U2V0VmFsdWU7XG59O1xuXG5BcnJheU1hcE5vZGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAob3duZXJJRCwgc2hpZnQsIGtleUhhc2gsIGtleSwgdmFsdWUsIGRpZENoYW5nZVNpemUsIGRpZEFsdGVyKSB7XG4gIHZhciByZW1vdmVkID0gdmFsdWUgPT09IE5PVF9TRVQ7XG5cbiAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG4gIHZhciBpZHggPSAwO1xuICB2YXIgbGVuID0gZW50cmllcy5sZW5ndGg7XG4gIGZvciAoOyBpZHggPCBsZW47IGlkeCsrKSB7XG4gICAgaWYgKGlzKGtleSwgZW50cmllc1tpZHhdWzBdKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHZhciBleGlzdHMgPSBpZHggPCBsZW47XG5cbiAgaWYgKGV4aXN0cyA/IGVudHJpZXNbaWR4XVsxXSA9PT0gdmFsdWUgOiByZW1vdmVkKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBTZXRSZWYoZGlkQWx0ZXIpO1xuICAocmVtb3ZlZCB8fCAhZXhpc3RzKSAmJiBTZXRSZWYoZGlkQ2hhbmdlU2l6ZSk7XG5cbiAgaWYgKHJlbW92ZWQgJiYgZW50cmllcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm47IC8vIHVuZGVmaW5lZFxuICB9XG5cbiAgaWYgKCFleGlzdHMgJiYgIXJlbW92ZWQgJiYgZW50cmllcy5sZW5ndGggPj0gTUFYX0FSUkFZX01BUF9TSVpFKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5vZGVzKG93bmVySUQsIGVudHJpZXMsIGtleSwgdmFsdWUpO1xuICB9XG5cbiAgdmFyIGlzRWRpdGFibGUgPSBvd25lcklEICYmIG93bmVySUQgPT09IHRoaXMub3duZXJJRDtcbiAgdmFyIG5ld0VudHJpZXMgPSBpc0VkaXRhYmxlID8gZW50cmllcyA6IGFyckNvcHkoZW50cmllcyk7XG5cbiAgaWYgKGV4aXN0cykge1xuICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICBpZHggPT09IGxlbiAtIDFcbiAgICAgICAgPyBuZXdFbnRyaWVzLnBvcCgpXG4gICAgICAgIDogKG5ld0VudHJpZXNbaWR4XSA9IG5ld0VudHJpZXMucG9wKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdFbnRyaWVzW2lkeF0gPSBba2V5LCB2YWx1ZV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5ld0VudHJpZXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9XG5cbiAgaWYgKGlzRWRpdGFibGUpIHtcbiAgICB0aGlzLmVudHJpZXMgPSBuZXdFbnRyaWVzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBBcnJheU1hcE5vZGUob3duZXJJRCwgbmV3RW50cmllcyk7XG59O1xuXG52YXIgQml0bWFwSW5kZXhlZE5vZGUgPSBmdW5jdGlvbiBCaXRtYXBJbmRleGVkTm9kZShvd25lcklELCBiaXRtYXAsIG5vZGVzKSB7XG4gIHRoaXMub3duZXJJRCA9IG93bmVySUQ7XG4gIHRoaXMuYml0bWFwID0gYml0bWFwO1xuICB0aGlzLm5vZGVzID0gbm9kZXM7XG59O1xuXG5CaXRtYXBJbmRleGVkTm9kZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChzaGlmdCwga2V5SGFzaCwga2V5LCBub3RTZXRWYWx1ZSkge1xuICBpZiAoa2V5SGFzaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAga2V5SGFzaCA9IGhhc2goa2V5KTtcbiAgfVxuICB2YXIgYml0ID0gMSA8PCAoKHNoaWZ0ID09PSAwID8ga2V5SGFzaCA6IGtleUhhc2ggPj4+IHNoaWZ0KSAmIE1BU0spO1xuICB2YXIgYml0bWFwID0gdGhpcy5iaXRtYXA7XG4gIHJldHVybiAoYml0bWFwICYgYml0KSA9PT0gMFxuICAgID8gbm90U2V0VmFsdWVcbiAgICA6IHRoaXMubm9kZXNbcG9wQ291bnQoYml0bWFwICYgKGJpdCAtIDEpKV0uZ2V0KFxuICAgICAgICBzaGlmdCArIFNISUZULFxuICAgICAgICBrZXlIYXNoLFxuICAgICAgICBrZXksXG4gICAgICAgIG5vdFNldFZhbHVlXG4gICAgICApO1xufTtcblxuQml0bWFwSW5kZXhlZE5vZGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAob3duZXJJRCwgc2hpZnQsIGtleUhhc2gsIGtleSwgdmFsdWUsIGRpZENoYW5nZVNpemUsIGRpZEFsdGVyKSB7XG4gIGlmIChrZXlIYXNoID09PSB1bmRlZmluZWQpIHtcbiAgICBrZXlIYXNoID0gaGFzaChrZXkpO1xuICB9XG4gIHZhciBrZXlIYXNoRnJhZyA9IChzaGlmdCA9PT0gMCA/IGtleUhhc2ggOiBrZXlIYXNoID4+PiBzaGlmdCkgJiBNQVNLO1xuICB2YXIgYml0ID0gMSA8PCBrZXlIYXNoRnJhZztcbiAgdmFyIGJpdG1hcCA9IHRoaXMuYml0bWFwO1xuICB2YXIgZXhpc3RzID0gKGJpdG1hcCAmIGJpdCkgIT09IDA7XG5cbiAgaWYgKCFleGlzdHMgJiYgdmFsdWUgPT09IE5PVF9TRVQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBpZHggPSBwb3BDb3VudChiaXRtYXAgJiAoYml0IC0gMSkpO1xuICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzO1xuICB2YXIgbm9kZSA9IGV4aXN0cyA/IG5vZGVzW2lkeF0gOiB1bmRlZmluZWQ7XG4gIHZhciBuZXdOb2RlID0gdXBkYXRlTm9kZShcbiAgICBub2RlLFxuICAgIG93bmVySUQsXG4gICAgc2hpZnQgKyBTSElGVCxcbiAgICBrZXlIYXNoLFxuICAgIGtleSxcbiAgICB2YWx1ZSxcbiAgICBkaWRDaGFuZ2VTaXplLFxuICAgIGRpZEFsdGVyXG4gICk7XG5cbiAgaWYgKG5ld05vZGUgPT09IG5vZGUpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICghZXhpc3RzICYmIG5ld05vZGUgJiYgbm9kZXMubGVuZ3RoID49IE1BWF9CSVRNQVBfSU5ERVhFRF9TSVpFKSB7XG4gICAgcmV0dXJuIGV4cGFuZE5vZGVzKG93bmVySUQsIG5vZGVzLCBiaXRtYXAsIGtleUhhc2hGcmFnLCBuZXdOb2RlKTtcbiAgfVxuXG4gIGlmIChcbiAgICBleGlzdHMgJiZcbiAgICAhbmV3Tm9kZSAmJlxuICAgIG5vZGVzLmxlbmd0aCA9PT0gMiAmJlxuICAgIGlzTGVhZk5vZGUobm9kZXNbaWR4IF4gMV0pXG4gICkge1xuICAgIHJldHVybiBub2Rlc1tpZHggXiAxXTtcbiAgfVxuXG4gIGlmIChleGlzdHMgJiYgbmV3Tm9kZSAmJiBub2Rlcy5sZW5ndGggPT09IDEgJiYgaXNMZWFmTm9kZShuZXdOb2RlKSkge1xuICAgIHJldHVybiBuZXdOb2RlO1xuICB9XG5cbiAgdmFyIGlzRWRpdGFibGUgPSBvd25lcklEICYmIG93bmVySUQgPT09IHRoaXMub3duZXJJRDtcbiAgdmFyIG5ld0JpdG1hcCA9IGV4aXN0cyA/IChuZXdOb2RlID8gYml0bWFwIDogYml0bWFwIF4gYml0KSA6IGJpdG1hcCB8IGJpdDtcbiAgdmFyIG5ld05vZGVzID0gZXhpc3RzXG4gICAgPyBuZXdOb2RlXG4gICAgICA/IHNldEF0KG5vZGVzLCBpZHgsIG5ld05vZGUsIGlzRWRpdGFibGUpXG4gICAgICA6IHNwbGljZU91dChub2RlcywgaWR4LCBpc0VkaXRhYmxlKVxuICAgIDogc3BsaWNlSW4obm9kZXMsIGlkeCwgbmV3Tm9kZSwgaXNFZGl0YWJsZSk7XG5cbiAgaWYgKGlzRWRpdGFibGUpIHtcbiAgICB0aGlzLmJpdG1hcCA9IG5ld0JpdG1hcDtcbiAgICB0aGlzLm5vZGVzID0gbmV3Tm9kZXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZXR1cm4gbmV3IEJpdG1hcEluZGV4ZWROb2RlKG93bmVySUQsIG5ld0JpdG1hcCwgbmV3Tm9kZXMpO1xufTtcblxudmFyIEhhc2hBcnJheU1hcE5vZGUgPSBmdW5jdGlvbiBIYXNoQXJyYXlNYXBOb2RlKG93bmVySUQsIGNvdW50LCBub2Rlcykge1xuICB0aGlzLm93bmVySUQgPSBvd25lcklEO1xuICB0aGlzLmNvdW50ID0gY291bnQ7XG4gIHRoaXMubm9kZXMgPSBub2Rlcztcbn07XG5cbkhhc2hBcnJheU1hcE5vZGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoc2hpZnQsIGtleUhhc2gsIGtleSwgbm90U2V0VmFsdWUpIHtcbiAgaWYgKGtleUhhc2ggPT09IHVuZGVmaW5lZCkge1xuICAgIGtleUhhc2ggPSBoYXNoKGtleSk7XG4gIH1cbiAgdmFyIGlkeCA9IChzaGlmdCA9PT0gMCA/IGtleUhhc2ggOiBrZXlIYXNoID4+PiBzaGlmdCkgJiBNQVNLO1xuICB2YXIgbm9kZSA9IHRoaXMubm9kZXNbaWR4XTtcbiAgcmV0dXJuIG5vZGVcbiAgICA/IG5vZGUuZ2V0KHNoaWZ0ICsgU0hJRlQsIGtleUhhc2gsIGtleSwgbm90U2V0VmFsdWUpXG4gICAgOiBub3RTZXRWYWx1ZTtcbn07XG5cbkhhc2hBcnJheU1hcE5vZGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAob3duZXJJRCwgc2hpZnQsIGtleUhhc2gsIGtleSwgdmFsdWUsIGRpZENoYW5nZVNpemUsIGRpZEFsdGVyKSB7XG4gIGlmIChrZXlIYXNoID09PSB1bmRlZmluZWQpIHtcbiAgICBrZXlIYXNoID0gaGFzaChrZXkpO1xuICB9XG4gIHZhciBpZHggPSAoc2hpZnQgPT09IDAgPyBrZXlIYXNoIDoga2V5SGFzaCA+Pj4gc2hpZnQpICYgTUFTSztcbiAgdmFyIHJlbW92ZWQgPSB2YWx1ZSA9PT0gTk9UX1NFVDtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcztcbiAgdmFyIG5vZGUgPSBub2Rlc1tpZHhdO1xuXG4gIGlmIChyZW1vdmVkICYmICFub2RlKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbmV3Tm9kZSA9IHVwZGF0ZU5vZGUoXG4gICAgbm9kZSxcbiAgICBvd25lcklELFxuICAgIHNoaWZ0ICsgU0hJRlQsXG4gICAga2V5SGFzaCxcbiAgICBrZXksXG4gICAgdmFsdWUsXG4gICAgZGlkQ2hhbmdlU2l6ZSxcbiAgICBkaWRBbHRlclxuICApO1xuICBpZiAobmV3Tm9kZSA9PT0gbm9kZSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIG5ld0NvdW50ID0gdGhpcy5jb3VudDtcbiAgaWYgKCFub2RlKSB7XG4gICAgbmV3Q291bnQrKztcbiAgfSBlbHNlIGlmICghbmV3Tm9kZSkge1xuICAgIG5ld0NvdW50LS07XG4gICAgaWYgKG5ld0NvdW50IDwgTUlOX0hBU0hfQVJSQVlfTUFQX1NJWkUpIHtcbiAgICAgIHJldHVybiBwYWNrTm9kZXMob3duZXJJRCwgbm9kZXMsIG5ld0NvdW50LCBpZHgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpc0VkaXRhYmxlID0gb3duZXJJRCAmJiBvd25lcklEID09PSB0aGlzLm93bmVySUQ7XG4gIHZhciBuZXdOb2RlcyA9IHNldEF0KG5vZGVzLCBpZHgsIG5ld05vZGUsIGlzRWRpdGFibGUpO1xuXG4gIGlmIChpc0VkaXRhYmxlKSB7XG4gICAgdGhpcy5jb3VudCA9IG5ld0NvdW50O1xuICAgIHRoaXMubm9kZXMgPSBuZXdOb2RlcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJldHVybiBuZXcgSGFzaEFycmF5TWFwTm9kZShvd25lcklELCBuZXdDb3VudCwgbmV3Tm9kZXMpO1xufTtcblxudmFyIEhhc2hDb2xsaXNpb25Ob2RlID0gZnVuY3Rpb24gSGFzaENvbGxpc2lvbk5vZGUob3duZXJJRCwga2V5SGFzaCwgZW50cmllcykge1xuICB0aGlzLm93bmVySUQgPSBvd25lcklEO1xuICB0aGlzLmtleUhhc2ggPSBrZXlIYXNoO1xuICB0aGlzLmVudHJpZXMgPSBlbnRyaWVzO1xufTtcblxuSGFzaENvbGxpc2lvbk5vZGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoc2hpZnQsIGtleUhhc2gsIGtleSwgbm90U2V0VmFsdWUpIHtcbiAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG4gIGZvciAodmFyIGlpID0gMCwgbGVuID0gZW50cmllcy5sZW5ndGg7IGlpIDwgbGVuOyBpaSsrKSB7XG4gICAgaWYgKGlzKGtleSwgZW50cmllc1tpaV1bMF0pKSB7XG4gICAgICByZXR1cm4gZW50cmllc1tpaV1bMV07XG4gICAgfVxuICB9XG4gIHJldHVybiBub3RTZXRWYWx1ZTtcbn07XG5cbkhhc2hDb2xsaXNpb25Ob2RlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKG93bmVySUQsIHNoaWZ0LCBrZXlIYXNoLCBrZXksIHZhbHVlLCBkaWRDaGFuZ2VTaXplLCBkaWRBbHRlcikge1xuICBpZiAoa2V5SGFzaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAga2V5SGFzaCA9IGhhc2goa2V5KTtcbiAgfVxuXG4gIHZhciByZW1vdmVkID0gdmFsdWUgPT09IE5PVF9TRVQ7XG5cbiAgaWYgKGtleUhhc2ggIT09IHRoaXMua2V5SGFzaCkge1xuICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgU2V0UmVmKGRpZEFsdGVyKTtcbiAgICBTZXRSZWYoZGlkQ2hhbmdlU2l6ZSk7XG4gICAgcmV0dXJuIG1lcmdlSW50b05vZGUodGhpcywgb3duZXJJRCwgc2hpZnQsIGtleUhhc2gsIFtrZXksIHZhbHVlXSk7XG4gIH1cblxuICB2YXIgZW50cmllcyA9IHRoaXMuZW50cmllcztcbiAgdmFyIGlkeCA9IDA7XG4gIHZhciBsZW4gPSBlbnRyaWVzLmxlbmd0aDtcbiAgZm9yICg7IGlkeCA8IGxlbjsgaWR4KyspIHtcbiAgICBpZiAoaXMoa2V5LCBlbnRyaWVzW2lkeF1bMF0pKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgdmFyIGV4aXN0cyA9IGlkeCA8IGxlbjtcblxuICBpZiAoZXhpc3RzID8gZW50cmllc1tpZHhdWzFdID09PSB2YWx1ZSA6IHJlbW92ZWQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIFNldFJlZihkaWRBbHRlcik7XG4gIChyZW1vdmVkIHx8ICFleGlzdHMpICYmIFNldFJlZihkaWRDaGFuZ2VTaXplKTtcblxuICBpZiAocmVtb3ZlZCAmJiBsZW4gPT09IDIpIHtcbiAgICByZXR1cm4gbmV3IFZhbHVlTm9kZShvd25lcklELCB0aGlzLmtleUhhc2gsIGVudHJpZXNbaWR4IF4gMV0pO1xuICB9XG5cbiAgdmFyIGlzRWRpdGFibGUgPSBvd25lcklEICYmIG93bmVySUQgPT09IHRoaXMub3duZXJJRDtcbiAgdmFyIG5ld0VudHJpZXMgPSBpc0VkaXRhYmxlID8gZW50cmllcyA6IGFyckNvcHkoZW50cmllcyk7XG5cbiAgaWYgKGV4aXN0cykge1xuICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICBpZHggPT09IGxlbiAtIDFcbiAgICAgICAgPyBuZXdFbnRyaWVzLnBvcCgpXG4gICAgICAgIDogKG5ld0VudHJpZXNbaWR4XSA9IG5ld0VudHJpZXMucG9wKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdFbnRyaWVzW2lkeF0gPSBba2V5LCB2YWx1ZV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5ld0VudHJpZXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9XG5cbiAgaWYgKGlzRWRpdGFibGUpIHtcbiAgICB0aGlzLmVudHJpZXMgPSBuZXdFbnRyaWVzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBIYXNoQ29sbGlzaW9uTm9kZShvd25lcklELCB0aGlzLmtleUhhc2gsIG5ld0VudHJpZXMpO1xufTtcblxudmFyIFZhbHVlTm9kZSA9IGZ1bmN0aW9uIFZhbHVlTm9kZShvd25lcklELCBrZXlIYXNoLCBlbnRyeSkge1xuICB0aGlzLm93bmVySUQgPSBvd25lcklEO1xuICB0aGlzLmtleUhhc2ggPSBrZXlIYXNoO1xuICB0aGlzLmVudHJ5ID0gZW50cnk7XG59O1xuXG5WYWx1ZU5vZGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoc2hpZnQsIGtleUhhc2gsIGtleSwgbm90U2V0VmFsdWUpIHtcbiAgcmV0dXJuIGlzKGtleSwgdGhpcy5lbnRyeVswXSkgPyB0aGlzLmVudHJ5WzFdIDogbm90U2V0VmFsdWU7XG59O1xuXG5WYWx1ZU5vZGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAob3duZXJJRCwgc2hpZnQsIGtleUhhc2gsIGtleSwgdmFsdWUsIGRpZENoYW5nZVNpemUsIGRpZEFsdGVyKSB7XG4gIHZhciByZW1vdmVkID0gdmFsdWUgPT09IE5PVF9TRVQ7XG4gIHZhciBrZXlNYXRjaCA9IGlzKGtleSwgdGhpcy5lbnRyeVswXSk7XG4gIGlmIChrZXlNYXRjaCA/IHZhbHVlID09PSB0aGlzLmVudHJ5WzFdIDogcmVtb3ZlZCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgU2V0UmVmKGRpZEFsdGVyKTtcblxuICBpZiAocmVtb3ZlZCkge1xuICAgIFNldFJlZihkaWRDaGFuZ2VTaXplKTtcbiAgICByZXR1cm47IC8vIHVuZGVmaW5lZFxuICB9XG5cbiAgaWYgKGtleU1hdGNoKSB7XG4gICAgaWYgKG93bmVySUQgJiYgb3duZXJJRCA9PT0gdGhpcy5vd25lcklEKSB7XG4gICAgICB0aGlzLmVudHJ5WzFdID0gdmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBWYWx1ZU5vZGUob3duZXJJRCwgdGhpcy5rZXlIYXNoLCBba2V5LCB2YWx1ZV0pO1xuICB9XG5cbiAgU2V0UmVmKGRpZENoYW5nZVNpemUpO1xuICByZXR1cm4gbWVyZ2VJbnRvTm9kZSh0aGlzLCBvd25lcklELCBzaGlmdCwgaGFzaChrZXkpLCBba2V5LCB2YWx1ZV0pO1xufTtcblxuLy8gI3ByYWdtYSBJdGVyYXRvcnNcblxuQXJyYXlNYXBOb2RlLnByb3RvdHlwZS5pdGVyYXRlID0gSGFzaENvbGxpc2lvbk5vZGUucHJvdG90eXBlLml0ZXJhdGUgPSBmdW5jdGlvbihcbiAgZm4sXG4gIHJldmVyc2Vcbikge1xuICB2YXIgZW50cmllcyA9IHRoaXMuZW50cmllcztcbiAgZm9yICh2YXIgaWkgPSAwLCBtYXhJbmRleCA9IGVudHJpZXMubGVuZ3RoIC0gMTsgaWkgPD0gbWF4SW5kZXg7IGlpKyspIHtcbiAgICBpZiAoZm4oZW50cmllc1tyZXZlcnNlID8gbWF4SW5kZXggLSBpaSA6IGlpXSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59O1xuXG5CaXRtYXBJbmRleGVkTm9kZS5wcm90b3R5cGUuaXRlcmF0ZSA9IEhhc2hBcnJheU1hcE5vZGUucHJvdG90eXBlLml0ZXJhdGUgPSBmdW5jdGlvbihcbiAgZm4sXG4gIHJldmVyc2Vcbikge1xuICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzO1xuICBmb3IgKHZhciBpaSA9IDAsIG1heEluZGV4ID0gbm9kZXMubGVuZ3RoIC0gMTsgaWkgPD0gbWF4SW5kZXg7IGlpKyspIHtcbiAgICB2YXIgbm9kZSA9IG5vZGVzW3JldmVyc2UgPyBtYXhJbmRleCAtIGlpIDogaWldO1xuICAgIGlmIChub2RlICYmIG5vZGUuaXRlcmF0ZShmbiwgcmV2ZXJzZSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcblZhbHVlTm9kZS5wcm90b3R5cGUuaXRlcmF0ZSA9IGZ1bmN0aW9uKGZuLCByZXZlcnNlKSB7XG4gIHJldHVybiBmbih0aGlzLmVudHJ5KTtcbn07XG5cbnZhciBNYXBJdGVyYXRvciA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEl0ZXJhdG9yJCQxKSB7XG4gIGZ1bmN0aW9uIE1hcEl0ZXJhdG9yKG1hcCwgdHlwZSwgcmV2ZXJzZSkge1xuICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuICAgIHRoaXMuX3JldmVyc2UgPSByZXZlcnNlO1xuICAgIHRoaXMuX3N0YWNrID0gbWFwLl9yb290ICYmIG1hcEl0ZXJhdG9yRnJhbWUobWFwLl9yb290KTtcbiAgfVxuXG4gIGlmICggSXRlcmF0b3IkJDEgKSBNYXBJdGVyYXRvci5fX3Byb3RvX18gPSBJdGVyYXRvciQkMTtcbiAgTWFwSXRlcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSXRlcmF0b3IkJDEgJiYgSXRlcmF0b3IkJDEucHJvdG90eXBlICk7XG4gIE1hcEl0ZXJhdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hcEl0ZXJhdG9yO1xuXG4gIE1hcEl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gbmV4dCAoKSB7XG4gICAgdmFyIHR5cGUgPSB0aGlzLl90eXBlO1xuICAgIHZhciBzdGFjayA9IHRoaXMuX3N0YWNrO1xuICAgIHdoaWxlIChzdGFjaykge1xuICAgICAgdmFyIG5vZGUgPSBzdGFjay5ub2RlO1xuICAgICAgdmFyIGluZGV4ID0gc3RhY2suaW5kZXgrKztcbiAgICAgIHZhciBtYXhJbmRleCA9ICh2b2lkIDApO1xuICAgICAgaWYgKG5vZGUuZW50cnkpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG1hcEl0ZXJhdG9yVmFsdWUodHlwZSwgbm9kZS5lbnRyeSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5lbnRyaWVzKSB7XG4gICAgICAgIG1heEluZGV4ID0gbm9kZS5lbnRyaWVzLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChpbmRleCA8PSBtYXhJbmRleCkge1xuICAgICAgICAgIHJldHVybiBtYXBJdGVyYXRvclZhbHVlKFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIG5vZGUuZW50cmllc1t0aGlzLl9yZXZlcnNlID8gbWF4SW5kZXggLSBpbmRleCA6IGluZGV4XVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heEluZGV4ID0gbm9kZS5ub2Rlcy5sZW5ndGggLSAxO1xuICAgICAgICBpZiAoaW5kZXggPD0gbWF4SW5kZXgpIHtcbiAgICAgICAgICB2YXIgc3ViTm9kZSA9IG5vZGUubm9kZXNbdGhpcy5fcmV2ZXJzZSA/IG1heEluZGV4IC0gaW5kZXggOiBpbmRleF07XG4gICAgICAgICAgaWYgKHN1Yk5vZGUpIHtcbiAgICAgICAgICAgIGlmIChzdWJOb2RlLmVudHJ5KSB7XG4gICAgICAgICAgICAgIHJldHVybiBtYXBJdGVyYXRvclZhbHVlKHR5cGUsIHN1Yk5vZGUuZW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sgPSB0aGlzLl9zdGFjayA9IG1hcEl0ZXJhdG9yRnJhbWUoc3ViTm9kZSwgc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhY2sgPSB0aGlzLl9zdGFjayA9IHRoaXMuX3N0YWNrLl9fcHJldjtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZXJhdG9yRG9uZSgpO1xuICB9O1xuXG4gIHJldHVybiBNYXBJdGVyYXRvcjtcbn0oSXRlcmF0b3IpKTtcblxuZnVuY3Rpb24gbWFwSXRlcmF0b3JWYWx1ZSh0eXBlLCBlbnRyeSkge1xuICByZXR1cm4gaXRlcmF0b3JWYWx1ZSh0eXBlLCBlbnRyeVswXSwgZW50cnlbMV0pO1xufVxuXG5mdW5jdGlvbiBtYXBJdGVyYXRvckZyYW1lKG5vZGUsIHByZXYpIHtcbiAgcmV0dXJuIHtcbiAgICBub2RlOiBub2RlLFxuICAgIGluZGV4OiAwLFxuICAgIF9fcHJldjogcHJldixcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWFrZU1hcChzaXplLCByb290LCBvd25lcklELCBoYXNoJCQxKSB7XG4gIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKE1hcFByb3RvdHlwZSk7XG4gIG1hcC5zaXplID0gc2l6ZTtcbiAgbWFwLl9yb290ID0gcm9vdDtcbiAgbWFwLl9fb3duZXJJRCA9IG93bmVySUQ7XG4gIG1hcC5fX2hhc2ggPSBoYXNoJCQxO1xuICBtYXAuX19hbHRlcmVkID0gZmFsc2U7XG4gIHJldHVybiBtYXA7XG59XG5cbnZhciBFTVBUWV9NQVA7XG5mdW5jdGlvbiBlbXB0eU1hcCgpIHtcbiAgcmV0dXJuIEVNUFRZX01BUCB8fCAoRU1QVFlfTUFQID0gbWFrZU1hcCgwKSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1hcChtYXAsIGssIHYpIHtcbiAgdmFyIG5ld1Jvb3Q7XG4gIHZhciBuZXdTaXplO1xuICBpZiAoIW1hcC5fcm9vdCkge1xuICAgIGlmICh2ID09PSBOT1RfU0VUKSB7XG4gICAgICByZXR1cm4gbWFwO1xuICAgIH1cbiAgICBuZXdTaXplID0gMTtcbiAgICBuZXdSb290ID0gbmV3IEFycmF5TWFwTm9kZShtYXAuX19vd25lcklELCBbW2ssIHZdXSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRpZENoYW5nZVNpemUgPSBNYWtlUmVmKCk7XG4gICAgdmFyIGRpZEFsdGVyID0gTWFrZVJlZigpO1xuICAgIG5ld1Jvb3QgPSB1cGRhdGVOb2RlKFxuICAgICAgbWFwLl9yb290LFxuICAgICAgbWFwLl9fb3duZXJJRCxcbiAgICAgIDAsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBrLFxuICAgICAgdixcbiAgICAgIGRpZENoYW5nZVNpemUsXG4gICAgICBkaWRBbHRlclxuICAgICk7XG4gICAgaWYgKCFkaWRBbHRlci52YWx1ZSkge1xuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG4gICAgbmV3U2l6ZSA9IG1hcC5zaXplICsgKGRpZENoYW5nZVNpemUudmFsdWUgPyAodiA9PT0gTk9UX1NFVCA/IC0xIDogMSkgOiAwKTtcbiAgfVxuICBpZiAobWFwLl9fb3duZXJJRCkge1xuICAgIG1hcC5zaXplID0gbmV3U2l6ZTtcbiAgICBtYXAuX3Jvb3QgPSBuZXdSb290O1xuICAgIG1hcC5fX2hhc2ggPSB1bmRlZmluZWQ7XG4gICAgbWFwLl9fYWx0ZXJlZCA9IHRydWU7XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuICByZXR1cm4gbmV3Um9vdCA/IG1ha2VNYXAobmV3U2l6ZSwgbmV3Um9vdCkgOiBlbXB0eU1hcCgpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVOb2RlKFxuICBub2RlLFxuICBvd25lcklELFxuICBzaGlmdCxcbiAga2V5SGFzaCxcbiAga2V5LFxuICB2YWx1ZSxcbiAgZGlkQ2hhbmdlU2l6ZSxcbiAgZGlkQWx0ZXJcbikge1xuICBpZiAoIW5vZGUpIHtcbiAgICBpZiAodmFsdWUgPT09IE5PVF9TRVQpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBTZXRSZWYoZGlkQWx0ZXIpO1xuICAgIFNldFJlZihkaWRDaGFuZ2VTaXplKTtcbiAgICByZXR1cm4gbmV3IFZhbHVlTm9kZShvd25lcklELCBrZXlIYXNoLCBba2V5LCB2YWx1ZV0pO1xuICB9XG4gIHJldHVybiBub2RlLnVwZGF0ZShcbiAgICBvd25lcklELFxuICAgIHNoaWZ0LFxuICAgIGtleUhhc2gsXG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgIGRpZENoYW5nZVNpemUsXG4gICAgZGlkQWx0ZXJcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNMZWFmTm9kZShub2RlKSB7XG4gIHJldHVybiAoXG4gICAgbm9kZS5jb25zdHJ1Y3RvciA9PT0gVmFsdWVOb2RlIHx8IG5vZGUuY29uc3RydWN0b3IgPT09IEhhc2hDb2xsaXNpb25Ob2RlXG4gICk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlSW50b05vZGUobm9kZSwgb3duZXJJRCwgc2hpZnQsIGtleUhhc2gsIGVudHJ5KSB7XG4gIGlmIChub2RlLmtleUhhc2ggPT09IGtleUhhc2gpIHtcbiAgICByZXR1cm4gbmV3IEhhc2hDb2xsaXNpb25Ob2RlKG93bmVySUQsIGtleUhhc2gsIFtub2RlLmVudHJ5LCBlbnRyeV0pO1xuICB9XG5cbiAgdmFyIGlkeDEgPSAoc2hpZnQgPT09IDAgPyBub2RlLmtleUhhc2ggOiBub2RlLmtleUhhc2ggPj4+IHNoaWZ0KSAmIE1BU0s7XG4gIHZhciBpZHgyID0gKHNoaWZ0ID09PSAwID8ga2V5SGFzaCA6IGtleUhhc2ggPj4+IHNoaWZ0KSAmIE1BU0s7XG5cbiAgdmFyIG5ld05vZGU7XG4gIHZhciBub2RlcyA9XG4gICAgaWR4MSA9PT0gaWR4MlxuICAgICAgPyBbbWVyZ2VJbnRvTm9kZShub2RlLCBvd25lcklELCBzaGlmdCArIFNISUZULCBrZXlIYXNoLCBlbnRyeSldXG4gICAgICA6ICgobmV3Tm9kZSA9IG5ldyBWYWx1ZU5vZGUob3duZXJJRCwga2V5SGFzaCwgZW50cnkpKSxcbiAgICAgICAgaWR4MSA8IGlkeDIgPyBbbm9kZSwgbmV3Tm9kZV0gOiBbbmV3Tm9kZSwgbm9kZV0pO1xuXG4gIHJldHVybiBuZXcgQml0bWFwSW5kZXhlZE5vZGUob3duZXJJRCwgKDEgPDwgaWR4MSkgfCAoMSA8PCBpZHgyKSwgbm9kZXMpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOb2Rlcyhvd25lcklELCBlbnRyaWVzLCBrZXksIHZhbHVlKSB7XG4gIGlmICghb3duZXJJRCkge1xuICAgIG93bmVySUQgPSBuZXcgT3duZXJJRCgpO1xuICB9XG4gIHZhciBub2RlID0gbmV3IFZhbHVlTm9kZShvd25lcklELCBoYXNoKGtleSksIFtrZXksIHZhbHVlXSk7XG4gIGZvciAodmFyIGlpID0gMDsgaWkgPCBlbnRyaWVzLmxlbmd0aDsgaWkrKykge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaWldO1xuICAgIG5vZGUgPSBub2RlLnVwZGF0ZShvd25lcklELCAwLCB1bmRlZmluZWQsIGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIHBhY2tOb2Rlcyhvd25lcklELCBub2RlcywgY291bnQsIGV4Y2x1ZGluZykge1xuICB2YXIgYml0bWFwID0gMDtcbiAgdmFyIHBhY2tlZElJID0gMDtcbiAgdmFyIHBhY2tlZE5vZGVzID0gbmV3IEFycmF5KGNvdW50KTtcbiAgZm9yICh2YXIgaWkgPSAwLCBiaXQgPSAxLCBsZW4gPSBub2Rlcy5sZW5ndGg7IGlpIDwgbGVuOyBpaSsrLCBiaXQgPDw9IDEpIHtcbiAgICB2YXIgbm9kZSA9IG5vZGVzW2lpXTtcbiAgICBpZiAobm9kZSAhPT0gdW5kZWZpbmVkICYmIGlpICE9PSBleGNsdWRpbmcpIHtcbiAgICAgIGJpdG1hcCB8PSBiaXQ7XG4gICAgICBwYWNrZWROb2Rlc1twYWNrZWRJSSsrXSA9IG5vZGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgQml0bWFwSW5kZXhlZE5vZGUob3duZXJJRCwgYml0bWFwLCBwYWNrZWROb2Rlcyk7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZE5vZGVzKG93bmVySUQsIG5vZGVzLCBiaXRtYXAsIGluY2x1ZGluZywgbm9kZSkge1xuICB2YXIgY291bnQgPSAwO1xuICB2YXIgZXhwYW5kZWROb2RlcyA9IG5ldyBBcnJheShTSVpFKTtcbiAgZm9yICh2YXIgaWkgPSAwOyBiaXRtYXAgIT09IDA7IGlpKyssIGJpdG1hcCA+Pj49IDEpIHtcbiAgICBleHBhbmRlZE5vZGVzW2lpXSA9IGJpdG1hcCAmIDEgPyBub2Rlc1tjb3VudCsrXSA6IHVuZGVmaW5lZDtcbiAgfVxuICBleHBhbmRlZE5vZGVzW2luY2x1ZGluZ10gPSBub2RlO1xuICByZXR1cm4gbmV3IEhhc2hBcnJheU1hcE5vZGUob3duZXJJRCwgY291bnQgKyAxLCBleHBhbmRlZE5vZGVzKTtcbn1cblxuZnVuY3Rpb24gcG9wQ291bnQoeCkge1xuICB4IC09ICh4ID4+IDEpICYgMHg1NTU1NTU1NTtcbiAgeCA9ICh4ICYgMHgzMzMzMzMzMykgKyAoKHggPj4gMikgJiAweDMzMzMzMzMzKTtcbiAgeCA9ICh4ICsgKHggPj4gNCkpICYgMHgwZjBmMGYwZjtcbiAgeCArPSB4ID4+IDg7XG4gIHggKz0geCA+PiAxNjtcbiAgcmV0dXJuIHggJiAweDdmO1xufVxuXG5mdW5jdGlvbiBzZXRBdChhcnJheSwgaWR4LCB2YWwsIGNhbkVkaXQpIHtcbiAgdmFyIG5ld0FycmF5ID0gY2FuRWRpdCA/IGFycmF5IDogYXJyQ29weShhcnJheSk7XG4gIG5ld0FycmF5W2lkeF0gPSB2YWw7XG4gIHJldHVybiBuZXdBcnJheTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlSW4oYXJyYXksIGlkeCwgdmFsLCBjYW5FZGl0KSB7XG4gIHZhciBuZXdMZW4gPSBhcnJheS5sZW5ndGggKyAxO1xuICBpZiAoY2FuRWRpdCAmJiBpZHggKyAxID09PSBuZXdMZW4pIHtcbiAgICBhcnJheVtpZHhdID0gdmFsO1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICB2YXIgbmV3QXJyYXkgPSBuZXcgQXJyYXkobmV3TGVuKTtcbiAgdmFyIGFmdGVyID0gMDtcbiAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IG5ld0xlbjsgaWkrKykge1xuICAgIGlmIChpaSA9PT0gaWR4KSB7XG4gICAgICBuZXdBcnJheVtpaV0gPSB2YWw7XG4gICAgICBhZnRlciA9IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdBcnJheVtpaV0gPSBhcnJheVtpaSArIGFmdGVyXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld0FycmF5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPdXQoYXJyYXksIGlkeCwgY2FuRWRpdCkge1xuICB2YXIgbmV3TGVuID0gYXJyYXkubGVuZ3RoIC0gMTtcbiAgaWYgKGNhbkVkaXQgJiYgaWR4ID09PSBuZXdMZW4pIHtcbiAgICBhcnJheS5wb3AoKTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgdmFyIG5ld0FycmF5ID0gbmV3IEFycmF5KG5ld0xlbik7XG4gIHZhciBhZnRlciA9IDA7XG4gIGZvciAodmFyIGlpID0gMDsgaWkgPCBuZXdMZW47IGlpKyspIHtcbiAgICBpZiAoaWkgPT09IGlkeCkge1xuICAgICAgYWZ0ZXIgPSAxO1xuICAgIH1cbiAgICBuZXdBcnJheVtpaV0gPSBhcnJheVtpaSArIGFmdGVyXTtcbiAgfVxuICByZXR1cm4gbmV3QXJyYXk7XG59XG5cbnZhciBNQVhfQVJSQVlfTUFQX1NJWkUgPSBTSVpFIC8gNDtcbnZhciBNQVhfQklUTUFQX0lOREVYRURfU0laRSA9IFNJWkUgLyAyO1xudmFyIE1JTl9IQVNIX0FSUkFZX01BUF9TSVpFID0gU0laRSAvIDQ7XG5cbnZhciBJU19MSVNUX1NZTUJPTCA9ICdAQF9fSU1NVVRBQkxFX0xJU1RfX0BAJztcblxuZnVuY3Rpb24gaXNMaXN0KG1heWJlTGlzdCkge1xuICByZXR1cm4gQm9vbGVhbihtYXliZUxpc3QgJiYgbWF5YmVMaXN0W0lTX0xJU1RfU1lNQk9MXSk7XG59XG5cbnZhciBMaXN0ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoSW5kZXhlZENvbGxlY3Rpb24kJDEpIHtcbiAgZnVuY3Rpb24gTGlzdCh2YWx1ZSkge1xuICAgIHZhciBlbXB0eSA9IGVtcHR5TGlzdCgpO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZW1wdHk7XG4gICAgfVxuICAgIGlmIChpc0xpc3QodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHZhciBpdGVyID0gSW5kZXhlZENvbGxlY3Rpb24kJDEodmFsdWUpO1xuICAgIHZhciBzaXplID0gaXRlci5zaXplO1xuICAgIGlmIChzaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gZW1wdHk7XG4gICAgfVxuICAgIGFzc2VydE5vdEluZmluaXRlKHNpemUpO1xuICAgIGlmIChzaXplID4gMCAmJiBzaXplIDwgU0laRSkge1xuICAgICAgcmV0dXJuIG1ha2VMaXN0KDAsIHNpemUsIFNISUZULCBudWxsLCBuZXcgVk5vZGUoaXRlci50b0FycmF5KCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGVtcHR5LndpdGhNdXRhdGlvbnMoZnVuY3Rpb24gKGxpc3QpIHtcbiAgICAgIGxpc3Quc2V0U2l6ZShzaXplKTtcbiAgICAgIGl0ZXIuZm9yRWFjaChmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gbGlzdC5zZXQoaSwgdik7IH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCBJbmRleGVkQ29sbGVjdGlvbiQkMSApIExpc3QuX19wcm90b19fID0gSW5kZXhlZENvbGxlY3Rpb24kJDE7XG4gIExpc3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSW5kZXhlZENvbGxlY3Rpb24kJDEgJiYgSW5kZXhlZENvbGxlY3Rpb24kJDEucHJvdG90eXBlICk7XG4gIExpc3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGlzdDtcblxuICBMaXN0Lm9mID0gZnVuY3Rpb24gb2YgKC8qLi4udmFsdWVzKi8pIHtcbiAgICByZXR1cm4gdGhpcyhhcmd1bWVudHMpO1xuICB9O1xuXG4gIExpc3QucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLl9fdG9TdHJpbmcoJ0xpc3QgWycsICddJyk7XG4gIH07XG5cbiAgLy8gQHByYWdtYSBBY2Nlc3NcblxuICBMaXN0LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGluZGV4LCBub3RTZXRWYWx1ZSkge1xuICAgIGluZGV4ID0gd3JhcEluZGV4KHRoaXMsIGluZGV4KTtcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuc2l6ZSkge1xuICAgICAgaW5kZXggKz0gdGhpcy5fb3JpZ2luO1xuICAgICAgdmFyIG5vZGUgPSBsaXN0Tm9kZUZvcih0aGlzLCBpbmRleCk7XG4gICAgICByZXR1cm4gbm9kZSAmJiBub2RlLmFycmF5W2luZGV4ICYgTUFTS107XG4gICAgfVxuICAgIHJldHVybiBub3RTZXRWYWx1ZTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIE1vZGlmaWNhdGlvblxuXG4gIExpc3QucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIHNldCAoaW5kZXgsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHVwZGF0ZUxpc3QodGhpcywgaW5kZXgsIHZhbHVlKTtcbiAgfTtcblxuICBMaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUgKGluZGV4KSB7XG4gICAgcmV0dXJuICF0aGlzLmhhcyhpbmRleClcbiAgICAgID8gdGhpc1xuICAgICAgOiBpbmRleCA9PT0gMFxuICAgICAgICA/IHRoaXMuc2hpZnQoKVxuICAgICAgICA6IGluZGV4ID09PSB0aGlzLnNpemUgLSAxXG4gICAgICAgICAgPyB0aGlzLnBvcCgpXG4gICAgICAgICAgOiB0aGlzLnNwbGljZShpbmRleCwgMSk7XG4gIH07XG5cbiAgTGlzdC5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0IChpbmRleCwgdmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5zcGxpY2UoaW5kZXgsIDAsIHZhbHVlKTtcbiAgfTtcblxuICBMaXN0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICBpZiAodGhpcy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRoaXMuX19vd25lcklEKSB7XG4gICAgICB0aGlzLnNpemUgPSB0aGlzLl9vcmlnaW4gPSB0aGlzLl9jYXBhY2l0eSA9IDA7XG4gICAgICB0aGlzLl9sZXZlbCA9IFNISUZUO1xuICAgICAgdGhpcy5fcm9vdCA9IHRoaXMuX3RhaWwgPSBudWxsO1xuICAgICAgdGhpcy5fX2hhc2ggPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9fYWx0ZXJlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIGVtcHR5TGlzdCgpO1xuICB9O1xuXG4gIExpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoICgvKi4uLnZhbHVlcyovKSB7XG4gICAgdmFyIHZhbHVlcyA9IGFyZ3VtZW50cztcbiAgICB2YXIgb2xkU2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICByZXR1cm4gdGhpcy53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICBzZXRMaXN0Qm91bmRzKGxpc3QsIDAsIG9sZFNpemUgKyB2YWx1ZXMubGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCB2YWx1ZXMubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgIGxpc3Quc2V0KG9sZFNpemUgKyBpaSwgdmFsdWVzW2lpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgTGlzdC5wcm90b3R5cGUucG9wID0gZnVuY3Rpb24gcG9wICgpIHtcbiAgICByZXR1cm4gc2V0TGlzdEJvdW5kcyh0aGlzLCAwLCAtMSk7XG4gIH07XG5cbiAgTGlzdC5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uIHVuc2hpZnQgKC8qLi4udmFsdWVzKi8pIHtcbiAgICB2YXIgdmFsdWVzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiB0aGlzLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24gKGxpc3QpIHtcbiAgICAgIHNldExpc3RCb3VuZHMobGlzdCwgLXZhbHVlcy5sZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHZhbHVlcy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgbGlzdC5zZXQoaWksIHZhbHVlc1tpaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIExpc3QucHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24gc2hpZnQgKCkge1xuICAgIHJldHVybiBzZXRMaXN0Qm91bmRzKHRoaXMsIDEpO1xuICB9O1xuXG4gIC8vIEBwcmFnbWEgQ29tcG9zaXRpb25cblxuICBMaXN0LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKC8qLi4uY29sbGVjdGlvbnMqLykge1xuICAgIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblxuICAgIHZhciBzZXFzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBhcmd1bWVudCA9IGFyZ3VtZW50cyQxW2ldO1xuICAgICAgdmFyIHNlcSA9IEluZGV4ZWRDb2xsZWN0aW9uJCQxKFxuICAgICAgICB0eXBlb2YgYXJndW1lbnQgIT09ICdzdHJpbmcnICYmIGhhc0l0ZXJhdG9yKGFyZ3VtZW50KVxuICAgICAgICAgID8gYXJndW1lbnRcbiAgICAgICAgICA6IFthcmd1bWVudF1cbiAgICAgICk7XG4gICAgICBpZiAoc2VxLnNpemUgIT09IDApIHtcbiAgICAgICAgc2Vxcy5wdXNoKHNlcSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzZXFzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmICh0aGlzLnNpemUgPT09IDAgJiYgIXRoaXMuX19vd25lcklEICYmIHNlcXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcihzZXFzWzBdKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbiAobGlzdCkge1xuICAgICAgc2Vxcy5mb3JFYWNoKGZ1bmN0aW9uIChzZXEpIHsgcmV0dXJuIHNlcS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gbGlzdC5wdXNoKHZhbHVlKTsgfSk7IH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIExpc3QucHJvdG90eXBlLnNldFNpemUgPSBmdW5jdGlvbiBzZXRTaXplIChzaXplKSB7XG4gICAgcmV0dXJuIHNldExpc3RCb3VuZHModGhpcywgMCwgc2l6ZSk7XG4gIH07XG5cbiAgTGlzdC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gbWFwIChtYXBwZXIsIGNvbnRleHQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24gKGxpc3QpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcyQxLnNpemU7IGkrKykge1xuICAgICAgICBsaXN0LnNldChpLCBtYXBwZXIuY2FsbChjb250ZXh0LCBsaXN0LmdldChpKSwgaSwgbGlzdCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIC8vIEBwcmFnbWEgSXRlcmF0aW9uXG5cbiAgTGlzdC5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuICAgIHZhciBzaXplID0gdGhpcy5zaXplO1xuICAgIGlmICh3aG9sZVNsaWNlKGJlZ2luLCBlbmQsIHNpemUpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIHNldExpc3RCb3VuZHMoXG4gICAgICB0aGlzLFxuICAgICAgcmVzb2x2ZUJlZ2luKGJlZ2luLCBzaXplKSxcbiAgICAgIHJlc29sdmVFbmQoZW5kLCBzaXplKVxuICAgICk7XG4gIH07XG5cbiAgTGlzdC5wcm90b3R5cGUuX19pdGVyYXRvciA9IGZ1bmN0aW9uIF9faXRlcmF0b3IgKHR5cGUsIHJldmVyc2UpIHtcbiAgICB2YXIgaW5kZXggPSByZXZlcnNlID8gdGhpcy5zaXplIDogMDtcbiAgICB2YXIgdmFsdWVzID0gaXRlcmF0ZUxpc3QodGhpcywgcmV2ZXJzZSk7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWUgPSB2YWx1ZXMoKTtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gRE9ORVxuICAgICAgICA/IGl0ZXJhdG9yRG9uZSgpXG4gICAgICAgIDogaXRlcmF0b3JWYWx1ZSh0eXBlLCByZXZlcnNlID8gLS1pbmRleCA6IGluZGV4KyssIHZhbHVlKTtcbiAgICB9KTtcbiAgfTtcblxuICBMaXN0LnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIGluZGV4ID0gcmV2ZXJzZSA/IHRoaXMuc2l6ZSA6IDA7XG4gICAgdmFyIHZhbHVlcyA9IGl0ZXJhdGVMaXN0KHRoaXMsIHJldmVyc2UpO1xuICAgIHZhciB2YWx1ZTtcbiAgICB3aGlsZSAoKHZhbHVlID0gdmFsdWVzKCkpICE9PSBET05FKSB7XG4gICAgICBpZiAoZm4odmFsdWUsIHJldmVyc2UgPyAtLWluZGV4IDogaW5kZXgrKywgdGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG5cbiAgTGlzdC5wcm90b3R5cGUuX19lbnN1cmVPd25lciA9IGZ1bmN0aW9uIF9fZW5zdXJlT3duZXIgKG93bmVySUQpIHtcbiAgICBpZiAob3duZXJJRCA9PT0gdGhpcy5fX293bmVySUQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAoIW93bmVySUQpIHtcbiAgICAgIGlmICh0aGlzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5TGlzdCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fX293bmVySUQgPSBvd25lcklEO1xuICAgICAgdGhpcy5fX2FsdGVyZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gbWFrZUxpc3QoXG4gICAgICB0aGlzLl9vcmlnaW4sXG4gICAgICB0aGlzLl9jYXBhY2l0eSxcbiAgICAgIHRoaXMuX2xldmVsLFxuICAgICAgdGhpcy5fcm9vdCxcbiAgICAgIHRoaXMuX3RhaWwsXG4gICAgICBvd25lcklELFxuICAgICAgdGhpcy5fX2hhc2hcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBMaXN0O1xufShJbmRleGVkQ29sbGVjdGlvbikpO1xuXG5MaXN0LmlzTGlzdCA9IGlzTGlzdDtcblxudmFyIExpc3RQcm90b3R5cGUgPSBMaXN0LnByb3RvdHlwZTtcbkxpc3RQcm90b3R5cGVbSVNfTElTVF9TWU1CT0xdID0gdHJ1ZTtcbkxpc3RQcm90b3R5cGVbREVMRVRFXSA9IExpc3RQcm90b3R5cGUucmVtb3ZlO1xuTGlzdFByb3RvdHlwZS5tZXJnZSA9IExpc3RQcm90b3R5cGUuY29uY2F0O1xuTGlzdFByb3RvdHlwZS5zZXRJbiA9IHNldEluJDE7XG5MaXN0UHJvdG90eXBlLmRlbGV0ZUluID0gTGlzdFByb3RvdHlwZS5yZW1vdmVJbiA9IGRlbGV0ZUluO1xuTGlzdFByb3RvdHlwZS51cGRhdGUgPSB1cGRhdGUkMTtcbkxpc3RQcm90b3R5cGUudXBkYXRlSW4gPSB1cGRhdGVJbiQxO1xuTGlzdFByb3RvdHlwZS5tZXJnZUluID0gbWVyZ2VJbjtcbkxpc3RQcm90b3R5cGUubWVyZ2VEZWVwSW4gPSBtZXJnZURlZXBJbjtcbkxpc3RQcm90b3R5cGUud2l0aE11dGF0aW9ucyA9IHdpdGhNdXRhdGlvbnM7XG5MaXN0UHJvdG90eXBlLndhc0FsdGVyZWQgPSB3YXNBbHRlcmVkO1xuTGlzdFByb3RvdHlwZS5hc0ltbXV0YWJsZSA9IGFzSW1tdXRhYmxlO1xuTGlzdFByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL2luaXQnXSA9IExpc3RQcm90b3R5cGUuYXNNdXRhYmxlID0gYXNNdXRhYmxlO1xuTGlzdFByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL3N0ZXAnXSA9IGZ1bmN0aW9uKHJlc3VsdCwgYXJyKSB7XG4gIHJldHVybiByZXN1bHQucHVzaChhcnIpO1xufTtcbkxpc3RQcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9yZXN1bHQnXSA9IGZ1bmN0aW9uKG9iaikge1xuICByZXR1cm4gb2JqLmFzSW1tdXRhYmxlKCk7XG59O1xuXG52YXIgVk5vZGUgPSBmdW5jdGlvbiBWTm9kZShhcnJheSwgb3duZXJJRCkge1xuICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIHRoaXMub3duZXJJRCA9IG93bmVySUQ7XG59O1xuXG4vLyBUT0RPOiBzZWVtcyBsaWtlIHRoZXNlIG1ldGhvZHMgYXJlIHZlcnkgc2ltaWxhclxuXG5WTm9kZS5wcm90b3R5cGUucmVtb3ZlQmVmb3JlID0gZnVuY3Rpb24gcmVtb3ZlQmVmb3JlIChvd25lcklELCBsZXZlbCwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID09PSBsZXZlbCA/IDEgPDwgbGV2ZWwgOiB0aGlzLmFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHZhciBvcmlnaW5JbmRleCA9IChpbmRleCA+Pj4gbGV2ZWwpICYgTUFTSztcbiAgaWYgKG9yaWdpbkluZGV4ID49IHRoaXMuYXJyYXkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5ldyBWTm9kZShbXSwgb3duZXJJRCk7XG4gIH1cbiAgdmFyIHJlbW92aW5nRmlyc3QgPSBvcmlnaW5JbmRleCA9PT0gMDtcbiAgdmFyIG5ld0NoaWxkO1xuICBpZiAobGV2ZWwgPiAwKSB7XG4gICAgdmFyIG9sZENoaWxkID0gdGhpcy5hcnJheVtvcmlnaW5JbmRleF07XG4gICAgbmV3Q2hpbGQgPVxuICAgICAgb2xkQ2hpbGQgJiYgb2xkQ2hpbGQucmVtb3ZlQmVmb3JlKG93bmVySUQsIGxldmVsIC0gU0hJRlQsIGluZGV4KTtcbiAgICBpZiAobmV3Q2hpbGQgPT09IG9sZENoaWxkICYmIHJlbW92aW5nRmlyc3QpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfVxuICBpZiAocmVtb3ZpbmdGaXJzdCAmJiAhbmV3Q2hpbGQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgZWRpdGFibGUgPSBlZGl0YWJsZVZOb2RlKHRoaXMsIG93bmVySUQpO1xuICBpZiAoIXJlbW92aW5nRmlyc3QpIHtcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgb3JpZ2luSW5kZXg7IGlpKyspIHtcbiAgICAgIGVkaXRhYmxlLmFycmF5W2lpXSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgaWYgKG5ld0NoaWxkKSB7XG4gICAgZWRpdGFibGUuYXJyYXlbb3JpZ2luSW5kZXhdID0gbmV3Q2hpbGQ7XG4gIH1cbiAgcmV0dXJuIGVkaXRhYmxlO1xufTtcblxuVk5vZGUucHJvdG90eXBlLnJlbW92ZUFmdGVyID0gZnVuY3Rpb24gcmVtb3ZlQWZ0ZXIgKG93bmVySUQsIGxldmVsLCBpbmRleCkge1xuICBpZiAoaW5kZXggPT09IChsZXZlbCA/IDEgPDwgbGV2ZWwgOiAwKSB8fCB0aGlzLmFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHZhciBzaXplSW5kZXggPSAoKGluZGV4IC0gMSkgPj4+IGxldmVsKSAmIE1BU0s7XG4gIGlmIChzaXplSW5kZXggPj0gdGhpcy5hcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBuZXdDaGlsZDtcbiAgaWYgKGxldmVsID4gMCkge1xuICAgIHZhciBvbGRDaGlsZCA9IHRoaXMuYXJyYXlbc2l6ZUluZGV4XTtcbiAgICBuZXdDaGlsZCA9XG4gICAgICBvbGRDaGlsZCAmJiBvbGRDaGlsZC5yZW1vdmVBZnRlcihvd25lcklELCBsZXZlbCAtIFNISUZULCBpbmRleCk7XG4gICAgaWYgKG5ld0NoaWxkID09PSBvbGRDaGlsZCAmJiBzaXplSW5kZXggPT09IHRoaXMuYXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVkaXRhYmxlID0gZWRpdGFibGVWTm9kZSh0aGlzLCBvd25lcklEKTtcbiAgZWRpdGFibGUuYXJyYXkuc3BsaWNlKHNpemVJbmRleCArIDEpO1xuICBpZiAobmV3Q2hpbGQpIHtcbiAgICBlZGl0YWJsZS5hcnJheVtzaXplSW5kZXhdID0gbmV3Q2hpbGQ7XG4gIH1cbiAgcmV0dXJuIGVkaXRhYmxlO1xufTtcblxudmFyIERPTkUgPSB7fTtcblxuZnVuY3Rpb24gaXRlcmF0ZUxpc3QobGlzdCwgcmV2ZXJzZSkge1xuICB2YXIgbGVmdCA9IGxpc3QuX29yaWdpbjtcbiAgdmFyIHJpZ2h0ID0gbGlzdC5fY2FwYWNpdHk7XG4gIHZhciB0YWlsUG9zID0gZ2V0VGFpbE9mZnNldChyaWdodCk7XG4gIHZhciB0YWlsID0gbGlzdC5fdGFpbDtcblxuICByZXR1cm4gaXRlcmF0ZU5vZGVPckxlYWYobGlzdC5fcm9vdCwgbGlzdC5fbGV2ZWwsIDApO1xuXG4gIGZ1bmN0aW9uIGl0ZXJhdGVOb2RlT3JMZWFmKG5vZGUsIGxldmVsLCBvZmZzZXQpIHtcbiAgICByZXR1cm4gbGV2ZWwgPT09IDBcbiAgICAgID8gaXRlcmF0ZUxlYWYobm9kZSwgb2Zmc2V0KVxuICAgICAgOiBpdGVyYXRlTm9kZShub2RlLCBsZXZlbCwgb2Zmc2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGl0ZXJhdGVMZWFmKG5vZGUsIG9mZnNldCkge1xuICAgIHZhciBhcnJheSA9IG9mZnNldCA9PT0gdGFpbFBvcyA/IHRhaWwgJiYgdGFpbC5hcnJheSA6IG5vZGUgJiYgbm9kZS5hcnJheTtcbiAgICB2YXIgZnJvbSA9IG9mZnNldCA+IGxlZnQgPyAwIDogbGVmdCAtIG9mZnNldDtcbiAgICB2YXIgdG8gPSByaWdodCAtIG9mZnNldDtcbiAgICBpZiAodG8gPiBTSVpFKSB7XG4gICAgICB0byA9IFNJWkU7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZnJvbSA9PT0gdG8pIHtcbiAgICAgICAgcmV0dXJuIERPTkU7XG4gICAgICB9XG4gICAgICB2YXIgaWR4ID0gcmV2ZXJzZSA/IC0tdG8gOiBmcm9tKys7XG4gICAgICByZXR1cm4gYXJyYXkgJiYgYXJyYXlbaWR4XTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaXRlcmF0ZU5vZGUobm9kZSwgbGV2ZWwsIG9mZnNldCkge1xuICAgIHZhciB2YWx1ZXM7XG4gICAgdmFyIGFycmF5ID0gbm9kZSAmJiBub2RlLmFycmF5O1xuICAgIHZhciBmcm9tID0gb2Zmc2V0ID4gbGVmdCA/IDAgOiAobGVmdCAtIG9mZnNldCkgPj4gbGV2ZWw7XG4gICAgdmFyIHRvID0gKChyaWdodCAtIG9mZnNldCkgPj4gbGV2ZWwpICsgMTtcbiAgICBpZiAodG8gPiBTSVpFKSB7XG4gICAgICB0byA9IFNJWkU7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVzKCk7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBET05FKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgICAgICAgcmV0dXJuIERPTkU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlkeCA9IHJldmVyc2UgPyAtLXRvIDogZnJvbSsrO1xuICAgICAgICB2YWx1ZXMgPSBpdGVyYXRlTm9kZU9yTGVhZihcbiAgICAgICAgICBhcnJheSAmJiBhcnJheVtpZHhdLFxuICAgICAgICAgIGxldmVsIC0gU0hJRlQsXG4gICAgICAgICAgb2Zmc2V0ICsgKGlkeCA8PCBsZXZlbClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VMaXN0KG9yaWdpbiwgY2FwYWNpdHksIGxldmVsLCByb290LCB0YWlsLCBvd25lcklELCBoYXNoKSB7XG4gIHZhciBsaXN0ID0gT2JqZWN0LmNyZWF0ZShMaXN0UHJvdG90eXBlKTtcbiAgbGlzdC5zaXplID0gY2FwYWNpdHkgLSBvcmlnaW47XG4gIGxpc3QuX29yaWdpbiA9IG9yaWdpbjtcbiAgbGlzdC5fY2FwYWNpdHkgPSBjYXBhY2l0eTtcbiAgbGlzdC5fbGV2ZWwgPSBsZXZlbDtcbiAgbGlzdC5fcm9vdCA9IHJvb3Q7XG4gIGxpc3QuX3RhaWwgPSB0YWlsO1xuICBsaXN0Ll9fb3duZXJJRCA9IG93bmVySUQ7XG4gIGxpc3QuX19oYXNoID0gaGFzaDtcbiAgbGlzdC5fX2FsdGVyZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGxpc3Q7XG59XG5cbnZhciBFTVBUWV9MSVNUO1xuZnVuY3Rpb24gZW1wdHlMaXN0KCkge1xuICByZXR1cm4gRU1QVFlfTElTVCB8fCAoRU1QVFlfTElTVCA9IG1ha2VMaXN0KDAsIDAsIFNISUZUKSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpc3QobGlzdCwgaW5kZXgsIHZhbHVlKSB7XG4gIGluZGV4ID0gd3JhcEluZGV4KGxpc3QsIGluZGV4KTtcblxuICBpZiAoaW5kZXggIT09IGluZGV4KSB7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBpZiAoaW5kZXggPj0gbGlzdC5zaXplIHx8IGluZGV4IDwgMCkge1xuICAgIHJldHVybiBsaXN0LndpdGhNdXRhdGlvbnMoZnVuY3Rpb24gKGxpc3QpIHtcbiAgICAgIGluZGV4IDwgMFxuICAgICAgICA/IHNldExpc3RCb3VuZHMobGlzdCwgaW5kZXgpLnNldCgwLCB2YWx1ZSlcbiAgICAgICAgOiBzZXRMaXN0Qm91bmRzKGxpc3QsIDAsIGluZGV4ICsgMSkuc2V0KGluZGV4LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBpbmRleCArPSBsaXN0Ll9vcmlnaW47XG5cbiAgdmFyIG5ld1RhaWwgPSBsaXN0Ll90YWlsO1xuICB2YXIgbmV3Um9vdCA9IGxpc3QuX3Jvb3Q7XG4gIHZhciBkaWRBbHRlciA9IE1ha2VSZWYoKTtcbiAgaWYgKGluZGV4ID49IGdldFRhaWxPZmZzZXQobGlzdC5fY2FwYWNpdHkpKSB7XG4gICAgbmV3VGFpbCA9IHVwZGF0ZVZOb2RlKG5ld1RhaWwsIGxpc3QuX19vd25lcklELCAwLCBpbmRleCwgdmFsdWUsIGRpZEFsdGVyKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdSb290ID0gdXBkYXRlVk5vZGUoXG4gICAgICBuZXdSb290LFxuICAgICAgbGlzdC5fX293bmVySUQsXG4gICAgICBsaXN0Ll9sZXZlbCxcbiAgICAgIGluZGV4LFxuICAgICAgdmFsdWUsXG4gICAgICBkaWRBbHRlclxuICAgICk7XG4gIH1cblxuICBpZiAoIWRpZEFsdGVyLnZhbHVlKSB7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBpZiAobGlzdC5fX293bmVySUQpIHtcbiAgICBsaXN0Ll9yb290ID0gbmV3Um9vdDtcbiAgICBsaXN0Ll90YWlsID0gbmV3VGFpbDtcbiAgICBsaXN0Ll9faGFzaCA9IHVuZGVmaW5lZDtcbiAgICBsaXN0Ll9fYWx0ZXJlZCA9IHRydWU7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cbiAgcmV0dXJuIG1ha2VMaXN0KGxpc3QuX29yaWdpbiwgbGlzdC5fY2FwYWNpdHksIGxpc3QuX2xldmVsLCBuZXdSb290LCBuZXdUYWlsKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVk5vZGUobm9kZSwgb3duZXJJRCwgbGV2ZWwsIGluZGV4LCB2YWx1ZSwgZGlkQWx0ZXIpIHtcbiAgdmFyIGlkeCA9IChpbmRleCA+Pj4gbGV2ZWwpICYgTUFTSztcbiAgdmFyIG5vZGVIYXMgPSBub2RlICYmIGlkeCA8IG5vZGUuYXJyYXkubGVuZ3RoO1xuICBpZiAoIW5vZGVIYXMgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgdmFyIG5ld05vZGU7XG5cbiAgaWYgKGxldmVsID4gMCkge1xuICAgIHZhciBsb3dlck5vZGUgPSBub2RlICYmIG5vZGUuYXJyYXlbaWR4XTtcbiAgICB2YXIgbmV3TG93ZXJOb2RlID0gdXBkYXRlVk5vZGUoXG4gICAgICBsb3dlck5vZGUsXG4gICAgICBvd25lcklELFxuICAgICAgbGV2ZWwgLSBTSElGVCxcbiAgICAgIGluZGV4LFxuICAgICAgdmFsdWUsXG4gICAgICBkaWRBbHRlclxuICAgICk7XG4gICAgaWYgKG5ld0xvd2VyTm9kZSA9PT0gbG93ZXJOb2RlKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgbmV3Tm9kZSA9IGVkaXRhYmxlVk5vZGUobm9kZSwgb3duZXJJRCk7XG4gICAgbmV3Tm9kZS5hcnJheVtpZHhdID0gbmV3TG93ZXJOb2RlO1xuICAgIHJldHVybiBuZXdOb2RlO1xuICB9XG5cbiAgaWYgKG5vZGVIYXMgJiYgbm9kZS5hcnJheVtpZHhdID09PSB2YWx1ZSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgaWYgKGRpZEFsdGVyKSB7XG4gICAgU2V0UmVmKGRpZEFsdGVyKTtcbiAgfVxuXG4gIG5ld05vZGUgPSBlZGl0YWJsZVZOb2RlKG5vZGUsIG93bmVySUQpO1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBpZHggPT09IG5ld05vZGUuYXJyYXkubGVuZ3RoIC0gMSkge1xuICAgIG5ld05vZGUuYXJyYXkucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3Tm9kZS5hcnJheVtpZHhdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG5ld05vZGU7XG59XG5cbmZ1bmN0aW9uIGVkaXRhYmxlVk5vZGUobm9kZSwgb3duZXJJRCkge1xuICBpZiAob3duZXJJRCAmJiBub2RlICYmIG93bmVySUQgPT09IG5vZGUub3duZXJJRCkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIHJldHVybiBuZXcgVk5vZGUobm9kZSA/IG5vZGUuYXJyYXkuc2xpY2UoKSA6IFtdLCBvd25lcklEKTtcbn1cblxuZnVuY3Rpb24gbGlzdE5vZGVGb3IobGlzdCwgcmF3SW5kZXgpIHtcbiAgaWYgKHJhd0luZGV4ID49IGdldFRhaWxPZmZzZXQobGlzdC5fY2FwYWNpdHkpKSB7XG4gICAgcmV0dXJuIGxpc3QuX3RhaWw7XG4gIH1cbiAgaWYgKHJhd0luZGV4IDwgMSA8PCAobGlzdC5fbGV2ZWwgKyBTSElGVCkpIHtcbiAgICB2YXIgbm9kZSA9IGxpc3QuX3Jvb3Q7XG4gICAgdmFyIGxldmVsID0gbGlzdC5fbGV2ZWw7XG4gICAgd2hpbGUgKG5vZGUgJiYgbGV2ZWwgPiAwKSB7XG4gICAgICBub2RlID0gbm9kZS5hcnJheVsocmF3SW5kZXggPj4+IGxldmVsKSAmIE1BU0tdO1xuICAgICAgbGV2ZWwgLT0gU0hJRlQ7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldExpc3RCb3VuZHMobGlzdCwgYmVnaW4sIGVuZCkge1xuICAvLyBTYW5pdGl6ZSBiZWdpbiAmIGVuZCB1c2luZyB0aGlzIHNob3J0aGFuZCBmb3IgVG9JbnQzMihhcmd1bWVudClcbiAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvaW50MzJcbiAgaWYgKGJlZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICBiZWdpbiB8PSAwO1xuICB9XG4gIGlmIChlbmQgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCB8PSAwO1xuICB9XG4gIHZhciBvd25lciA9IGxpc3QuX19vd25lcklEIHx8IG5ldyBPd25lcklEKCk7XG4gIHZhciBvbGRPcmlnaW4gPSBsaXN0Ll9vcmlnaW47XG4gIHZhciBvbGRDYXBhY2l0eSA9IGxpc3QuX2NhcGFjaXR5O1xuICB2YXIgbmV3T3JpZ2luID0gb2xkT3JpZ2luICsgYmVnaW47XG4gIHZhciBuZXdDYXBhY2l0eSA9XG4gICAgZW5kID09PSB1bmRlZmluZWRcbiAgICAgID8gb2xkQ2FwYWNpdHlcbiAgICAgIDogZW5kIDwgMFxuICAgICAgICA/IG9sZENhcGFjaXR5ICsgZW5kXG4gICAgICAgIDogb2xkT3JpZ2luICsgZW5kO1xuICBpZiAobmV3T3JpZ2luID09PSBvbGRPcmlnaW4gJiYgbmV3Q2FwYWNpdHkgPT09IG9sZENhcGFjaXR5KSB7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICAvLyBJZiBpdCdzIGdvaW5nIHRvIGVuZCBhZnRlciBpdCBzdGFydHMsIGl0J3MgZW1wdHkuXG4gIGlmIChuZXdPcmlnaW4gPj0gbmV3Q2FwYWNpdHkpIHtcbiAgICByZXR1cm4gbGlzdC5jbGVhcigpO1xuICB9XG5cbiAgdmFyIG5ld0xldmVsID0gbGlzdC5fbGV2ZWw7XG4gIHZhciBuZXdSb290ID0gbGlzdC5fcm9vdDtcblxuICAvLyBOZXcgb3JpZ2luIG1pZ2h0IG5lZWQgY3JlYXRpbmcgYSBoaWdoZXIgcm9vdC5cbiAgdmFyIG9mZnNldFNoaWZ0ID0gMDtcbiAgd2hpbGUgKG5ld09yaWdpbiArIG9mZnNldFNoaWZ0IDwgMCkge1xuICAgIG5ld1Jvb3QgPSBuZXcgVk5vZGUoXG4gICAgICBuZXdSb290ICYmIG5ld1Jvb3QuYXJyYXkubGVuZ3RoID8gW3VuZGVmaW5lZCwgbmV3Um9vdF0gOiBbXSxcbiAgICAgIG93bmVyXG4gICAgKTtcbiAgICBuZXdMZXZlbCArPSBTSElGVDtcbiAgICBvZmZzZXRTaGlmdCArPSAxIDw8IG5ld0xldmVsO1xuICB9XG4gIGlmIChvZmZzZXRTaGlmdCkge1xuICAgIG5ld09yaWdpbiArPSBvZmZzZXRTaGlmdDtcbiAgICBvbGRPcmlnaW4gKz0gb2Zmc2V0U2hpZnQ7XG4gICAgbmV3Q2FwYWNpdHkgKz0gb2Zmc2V0U2hpZnQ7XG4gICAgb2xkQ2FwYWNpdHkgKz0gb2Zmc2V0U2hpZnQ7XG4gIH1cblxuICB2YXIgb2xkVGFpbE9mZnNldCA9IGdldFRhaWxPZmZzZXQob2xkQ2FwYWNpdHkpO1xuICB2YXIgbmV3VGFpbE9mZnNldCA9IGdldFRhaWxPZmZzZXQobmV3Q2FwYWNpdHkpO1xuXG4gIC8vIE5ldyBzaXplIG1pZ2h0IG5lZWQgY3JlYXRpbmcgYSBoaWdoZXIgcm9vdC5cbiAgd2hpbGUgKG5ld1RhaWxPZmZzZXQgPj0gMSA8PCAobmV3TGV2ZWwgKyBTSElGVCkpIHtcbiAgICBuZXdSb290ID0gbmV3IFZOb2RlKFxuICAgICAgbmV3Um9vdCAmJiBuZXdSb290LmFycmF5Lmxlbmd0aCA/IFtuZXdSb290XSA6IFtdLFxuICAgICAgb3duZXJcbiAgICApO1xuICAgIG5ld0xldmVsICs9IFNISUZUO1xuICB9XG5cbiAgLy8gTG9jYXRlIG9yIGNyZWF0ZSB0aGUgbmV3IHRhaWwuXG4gIHZhciBvbGRUYWlsID0gbGlzdC5fdGFpbDtcbiAgdmFyIG5ld1RhaWwgPVxuICAgIG5ld1RhaWxPZmZzZXQgPCBvbGRUYWlsT2Zmc2V0XG4gICAgICA/IGxpc3ROb2RlRm9yKGxpc3QsIG5ld0NhcGFjaXR5IC0gMSlcbiAgICAgIDogbmV3VGFpbE9mZnNldCA+IG9sZFRhaWxPZmZzZXRcbiAgICAgICAgPyBuZXcgVk5vZGUoW10sIG93bmVyKVxuICAgICAgICA6IG9sZFRhaWw7XG5cbiAgLy8gTWVyZ2UgVGFpbCBpbnRvIHRyZWUuXG4gIGlmIChcbiAgICBvbGRUYWlsICYmXG4gICAgbmV3VGFpbE9mZnNldCA+IG9sZFRhaWxPZmZzZXQgJiZcbiAgICBuZXdPcmlnaW4gPCBvbGRDYXBhY2l0eSAmJlxuICAgIG9sZFRhaWwuYXJyYXkubGVuZ3RoXG4gICkge1xuICAgIG5ld1Jvb3QgPSBlZGl0YWJsZVZOb2RlKG5ld1Jvb3QsIG93bmVyKTtcbiAgICB2YXIgbm9kZSA9IG5ld1Jvb3Q7XG4gICAgZm9yICh2YXIgbGV2ZWwgPSBuZXdMZXZlbDsgbGV2ZWwgPiBTSElGVDsgbGV2ZWwgLT0gU0hJRlQpIHtcbiAgICAgIHZhciBpZHggPSAob2xkVGFpbE9mZnNldCA+Pj4gbGV2ZWwpICYgTUFTSztcbiAgICAgIG5vZGUgPSBub2RlLmFycmF5W2lkeF0gPSBlZGl0YWJsZVZOb2RlKG5vZGUuYXJyYXlbaWR4XSwgb3duZXIpO1xuICAgIH1cbiAgICBub2RlLmFycmF5WyhvbGRUYWlsT2Zmc2V0ID4+PiBTSElGVCkgJiBNQVNLXSA9IG9sZFRhaWw7XG4gIH1cblxuICAvLyBJZiB0aGUgc2l6ZSBoYXMgYmVlbiByZWR1Y2VkLCB0aGVyZSdzIGEgY2hhbmNlIHRoZSB0YWlsIG5lZWRzIHRvIGJlIHRyaW1tZWQuXG4gIGlmIChuZXdDYXBhY2l0eSA8IG9sZENhcGFjaXR5KSB7XG4gICAgbmV3VGFpbCA9IG5ld1RhaWwgJiYgbmV3VGFpbC5yZW1vdmVBZnRlcihvd25lciwgMCwgbmV3Q2FwYWNpdHkpO1xuICB9XG5cbiAgLy8gSWYgdGhlIG5ldyBvcmlnaW4gaXMgd2l0aGluIHRoZSB0YWlsLCB0aGVuIHdlIGRvIG5vdCBuZWVkIGEgcm9vdC5cbiAgaWYgKG5ld09yaWdpbiA+PSBuZXdUYWlsT2Zmc2V0KSB7XG4gICAgbmV3T3JpZ2luIC09IG5ld1RhaWxPZmZzZXQ7XG4gICAgbmV3Q2FwYWNpdHkgLT0gbmV3VGFpbE9mZnNldDtcbiAgICBuZXdMZXZlbCA9IFNISUZUO1xuICAgIG5ld1Jvb3QgPSBudWxsO1xuICAgIG5ld1RhaWwgPSBuZXdUYWlsICYmIG5ld1RhaWwucmVtb3ZlQmVmb3JlKG93bmVyLCAwLCBuZXdPcmlnaW4pO1xuXG4gICAgLy8gT3RoZXJ3aXNlLCBpZiB0aGUgcm9vdCBoYXMgYmVlbiB0cmltbWVkLCBnYXJiYWdlIGNvbGxlY3QuXG4gIH0gZWxzZSBpZiAobmV3T3JpZ2luID4gb2xkT3JpZ2luIHx8IG5ld1RhaWxPZmZzZXQgPCBvbGRUYWlsT2Zmc2V0KSB7XG4gICAgb2Zmc2V0U2hpZnQgPSAwO1xuXG4gICAgLy8gSWRlbnRpZnkgdGhlIG5ldyB0b3Agcm9vdCBub2RlIG9mIHRoZSBzdWJ0cmVlIG9mIHRoZSBvbGQgcm9vdC5cbiAgICB3aGlsZSAobmV3Um9vdCkge1xuICAgICAgdmFyIGJlZ2luSW5kZXggPSAobmV3T3JpZ2luID4+PiBuZXdMZXZlbCkgJiBNQVNLO1xuICAgICAgaWYgKChiZWdpbkluZGV4ICE9PSBuZXdUYWlsT2Zmc2V0ID4+PiBuZXdMZXZlbCkgJiBNQVNLKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGJlZ2luSW5kZXgpIHtcbiAgICAgICAgb2Zmc2V0U2hpZnQgKz0gKDEgPDwgbmV3TGV2ZWwpICogYmVnaW5JbmRleDtcbiAgICAgIH1cbiAgICAgIG5ld0xldmVsIC09IFNISUZUO1xuICAgICAgbmV3Um9vdCA9IG5ld1Jvb3QuYXJyYXlbYmVnaW5JbmRleF07XG4gICAgfVxuXG4gICAgLy8gVHJpbSB0aGUgbmV3IHNpZGVzIG9mIHRoZSBuZXcgcm9vdC5cbiAgICBpZiAobmV3Um9vdCAmJiBuZXdPcmlnaW4gPiBvbGRPcmlnaW4pIHtcbiAgICAgIG5ld1Jvb3QgPSBuZXdSb290LnJlbW92ZUJlZm9yZShvd25lciwgbmV3TGV2ZWwsIG5ld09yaWdpbiAtIG9mZnNldFNoaWZ0KTtcbiAgICB9XG4gICAgaWYgKG5ld1Jvb3QgJiYgbmV3VGFpbE9mZnNldCA8IG9sZFRhaWxPZmZzZXQpIHtcbiAgICAgIG5ld1Jvb3QgPSBuZXdSb290LnJlbW92ZUFmdGVyKFxuICAgICAgICBvd25lcixcbiAgICAgICAgbmV3TGV2ZWwsXG4gICAgICAgIG5ld1RhaWxPZmZzZXQgLSBvZmZzZXRTaGlmdFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9mZnNldFNoaWZ0KSB7XG4gICAgICBuZXdPcmlnaW4gLT0gb2Zmc2V0U2hpZnQ7XG4gICAgICBuZXdDYXBhY2l0eSAtPSBvZmZzZXRTaGlmdDtcbiAgICB9XG4gIH1cblxuICBpZiAobGlzdC5fX293bmVySUQpIHtcbiAgICBsaXN0LnNpemUgPSBuZXdDYXBhY2l0eSAtIG5ld09yaWdpbjtcbiAgICBsaXN0Ll9vcmlnaW4gPSBuZXdPcmlnaW47XG4gICAgbGlzdC5fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcbiAgICBsaXN0Ll9sZXZlbCA9IG5ld0xldmVsO1xuICAgIGxpc3QuX3Jvb3QgPSBuZXdSb290O1xuICAgIGxpc3QuX3RhaWwgPSBuZXdUYWlsO1xuICAgIGxpc3QuX19oYXNoID0gdW5kZWZpbmVkO1xuICAgIGxpc3QuX19hbHRlcmVkID0gdHJ1ZTtcbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuICByZXR1cm4gbWFrZUxpc3QobmV3T3JpZ2luLCBuZXdDYXBhY2l0eSwgbmV3TGV2ZWwsIG5ld1Jvb3QsIG5ld1RhaWwpO1xufVxuXG5mdW5jdGlvbiBnZXRUYWlsT2Zmc2V0KHNpemUpIHtcbiAgcmV0dXJuIHNpemUgPCBTSVpFID8gMCA6ICgoc2l6ZSAtIDEpID4+PiBTSElGVCkgPDwgU0hJRlQ7XG59XG5cbnZhciBPcmRlcmVkTWFwID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoTWFwJCQxKSB7XG4gIGZ1bmN0aW9uIE9yZGVyZWRNYXAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgPyBlbXB0eU9yZGVyZWRNYXAoKVxuICAgICAgOiBpc09yZGVyZWRNYXAodmFsdWUpXG4gICAgICAgID8gdmFsdWVcbiAgICAgICAgOiBlbXB0eU9yZGVyZWRNYXAoKS53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChtYXApIHtcbiAgICAgICAgICAgIHZhciBpdGVyID0gS2V5ZWRDb2xsZWN0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgIGFzc2VydE5vdEluZmluaXRlKGl0ZXIuc2l6ZSk7XG4gICAgICAgICAgICBpdGVyLmZvckVhY2goZnVuY3Rpb24gKHYsIGspIHsgcmV0dXJuIG1hcC5zZXQoaywgdik7IH0pO1xuICAgICAgICAgIH0pO1xuICB9XG5cbiAgaWYgKCBNYXAkJDEgKSBPcmRlcmVkTWFwLl9fcHJvdG9fXyA9IE1hcCQkMTtcbiAgT3JkZXJlZE1hcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNYXAkJDEgJiYgTWFwJCQxLnByb3RvdHlwZSApO1xuICBPcmRlcmVkTWFwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9yZGVyZWRNYXA7XG5cbiAgT3JkZXJlZE1hcC5vZiA9IGZ1bmN0aW9uIG9mICgvKi4uLnZhbHVlcyovKSB7XG4gICAgcmV0dXJuIHRoaXMoYXJndW1lbnRzKTtcbiAgfTtcblxuICBPcmRlcmVkTWFwLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCdPcmRlcmVkTWFwIHsnLCAnfScpO1xuICB9O1xuXG4gIC8vIEBwcmFnbWEgQWNjZXNzXG5cbiAgT3JkZXJlZE1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChrLCBub3RTZXRWYWx1ZSkge1xuICAgIHZhciBpbmRleCA9IHRoaXMuX21hcC5nZXQoayk7XG4gICAgcmV0dXJuIGluZGV4ICE9PSB1bmRlZmluZWQgPyB0aGlzLl9saXN0LmdldChpbmRleClbMV0gOiBub3RTZXRWYWx1ZTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIE1vZGlmaWNhdGlvblxuXG4gIE9yZGVyZWRNYXAucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIgKCkge1xuICAgIGlmICh0aGlzLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodGhpcy5fX293bmVySUQpIHtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgICB0aGlzLl9tYXAuY2xlYXIoKTtcbiAgICAgIHRoaXMuX2xpc3QuY2xlYXIoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gZW1wdHlPcmRlcmVkTWFwKCk7XG4gIH07XG5cbiAgT3JkZXJlZE1hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gc2V0IChrLCB2KSB7XG4gICAgcmV0dXJuIHVwZGF0ZU9yZGVyZWRNYXAodGhpcywgaywgdik7XG4gIH07XG5cbiAgT3JkZXJlZE1hcC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlIChrKSB7XG4gICAgcmV0dXJuIHVwZGF0ZU9yZGVyZWRNYXAodGhpcywgaywgTk9UX1NFVCk7XG4gIH07XG5cbiAgT3JkZXJlZE1hcC5wcm90b3R5cGUud2FzQWx0ZXJlZCA9IGZ1bmN0aW9uIHdhc0FsdGVyZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXAud2FzQWx0ZXJlZCgpIHx8IHRoaXMuX2xpc3Qud2FzQWx0ZXJlZCgpO1xuICB9O1xuXG4gIE9yZGVyZWRNYXAucHJvdG90eXBlLl9faXRlcmF0ZSA9IGZ1bmN0aW9uIF9faXRlcmF0ZSAoZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLl9saXN0Ll9faXRlcmF0ZShcbiAgICAgIGZ1bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gZW50cnkgJiYgZm4oZW50cnlbMV0sIGVudHJ5WzBdLCB0aGlzJDEpOyB9LFxuICAgICAgcmV2ZXJzZVxuICAgICk7XG4gIH07XG5cbiAgT3JkZXJlZE1hcC5wcm90b3R5cGUuX19pdGVyYXRvciA9IGZ1bmN0aW9uIF9faXRlcmF0b3IgKHR5cGUsIHJldmVyc2UpIHtcbiAgICByZXR1cm4gdGhpcy5fbGlzdC5mcm9tRW50cnlTZXEoKS5fX2l0ZXJhdG9yKHR5cGUsIHJldmVyc2UpO1xuICB9O1xuXG4gIE9yZGVyZWRNYXAucHJvdG90eXBlLl9fZW5zdXJlT3duZXIgPSBmdW5jdGlvbiBfX2Vuc3VyZU93bmVyIChvd25lcklEKSB7XG4gICAgaWYgKG93bmVySUQgPT09IHRoaXMuX19vd25lcklEKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdmFyIG5ld01hcCA9IHRoaXMuX21hcC5fX2Vuc3VyZU93bmVyKG93bmVySUQpO1xuICAgIHZhciBuZXdMaXN0ID0gdGhpcy5fbGlzdC5fX2Vuc3VyZU93bmVyKG93bmVySUQpO1xuICAgIGlmICghb3duZXJJRCkge1xuICAgICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZW1wdHlPcmRlcmVkTWFwKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9fb3duZXJJRCA9IG93bmVySUQ7XG4gICAgICB0aGlzLl9tYXAgPSBuZXdNYXA7XG4gICAgICB0aGlzLl9saXN0ID0gbmV3TGlzdDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gbWFrZU9yZGVyZWRNYXAobmV3TWFwLCBuZXdMaXN0LCBvd25lcklELCB0aGlzLl9faGFzaCk7XG4gIH07XG5cbiAgcmV0dXJuIE9yZGVyZWRNYXA7XG59KE1hcCkpO1xuXG5PcmRlcmVkTWFwLmlzT3JkZXJlZE1hcCA9IGlzT3JkZXJlZE1hcDtcblxuT3JkZXJlZE1hcC5wcm90b3R5cGVbSVNfT1JERVJFRF9TWU1CT0xdID0gdHJ1ZTtcbk9yZGVyZWRNYXAucHJvdG90eXBlW0RFTEVURV0gPSBPcmRlcmVkTWFwLnByb3RvdHlwZS5yZW1vdmU7XG5cbmZ1bmN0aW9uIG1ha2VPcmRlcmVkTWFwKG1hcCwgbGlzdCwgb3duZXJJRCwgaGFzaCkge1xuICB2YXIgb21hcCA9IE9iamVjdC5jcmVhdGUoT3JkZXJlZE1hcC5wcm90b3R5cGUpO1xuICBvbWFwLnNpemUgPSBtYXAgPyBtYXAuc2l6ZSA6IDA7XG4gIG9tYXAuX21hcCA9IG1hcDtcbiAgb21hcC5fbGlzdCA9IGxpc3Q7XG4gIG9tYXAuX19vd25lcklEID0gb3duZXJJRDtcbiAgb21hcC5fX2hhc2ggPSBoYXNoO1xuICByZXR1cm4gb21hcDtcbn1cblxudmFyIEVNUFRZX09SREVSRURfTUFQO1xuZnVuY3Rpb24gZW1wdHlPcmRlcmVkTWFwKCkge1xuICByZXR1cm4gKFxuICAgIEVNUFRZX09SREVSRURfTUFQIHx8XG4gICAgKEVNUFRZX09SREVSRURfTUFQID0gbWFrZU9yZGVyZWRNYXAoZW1wdHlNYXAoKSwgZW1wdHlMaXN0KCkpKVxuICApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVPcmRlcmVkTWFwKG9tYXAsIGssIHYpIHtcbiAgdmFyIG1hcCA9IG9tYXAuX21hcDtcbiAgdmFyIGxpc3QgPSBvbWFwLl9saXN0O1xuICB2YXIgaSA9IG1hcC5nZXQoayk7XG4gIHZhciBoYXMgPSBpICE9PSB1bmRlZmluZWQ7XG4gIHZhciBuZXdNYXA7XG4gIHZhciBuZXdMaXN0O1xuICBpZiAodiA9PT0gTk9UX1NFVCkge1xuICAgIC8vIHJlbW92ZWRcbiAgICBpZiAoIWhhcykge1xuICAgICAgcmV0dXJuIG9tYXA7XG4gICAgfVxuICAgIGlmIChsaXN0LnNpemUgPj0gU0laRSAmJiBsaXN0LnNpemUgPj0gbWFwLnNpemUgKiAyKSB7XG4gICAgICBuZXdMaXN0ID0gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKGVudHJ5LCBpZHgpIHsgcmV0dXJuIGVudHJ5ICE9PSB1bmRlZmluZWQgJiYgaSAhPT0gaWR4OyB9KTtcbiAgICAgIG5ld01hcCA9IG5ld0xpc3RcbiAgICAgICAgLnRvS2V5ZWRTZXEoKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gZW50cnlbMF07IH0pXG4gICAgICAgIC5mbGlwKClcbiAgICAgICAgLnRvTWFwKCk7XG4gICAgICBpZiAob21hcC5fX293bmVySUQpIHtcbiAgICAgICAgbmV3TWFwLl9fb3duZXJJRCA9IG5ld0xpc3QuX19vd25lcklEID0gb21hcC5fX293bmVySUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld01hcCA9IG1hcC5yZW1vdmUoayk7XG4gICAgICBuZXdMaXN0ID0gaSA9PT0gbGlzdC5zaXplIC0gMSA/IGxpc3QucG9wKCkgOiBsaXN0LnNldChpLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChoYXMpIHtcbiAgICBpZiAodiA9PT0gbGlzdC5nZXQoaSlbMV0pIHtcbiAgICAgIHJldHVybiBvbWFwO1xuICAgIH1cbiAgICBuZXdNYXAgPSBtYXA7XG4gICAgbmV3TGlzdCA9IGxpc3Quc2V0KGksIFtrLCB2XSk7XG4gIH0gZWxzZSB7XG4gICAgbmV3TWFwID0gbWFwLnNldChrLCBsaXN0LnNpemUpO1xuICAgIG5ld0xpc3QgPSBsaXN0LnNldChsaXN0LnNpemUsIFtrLCB2XSk7XG4gIH1cbiAgaWYgKG9tYXAuX19vd25lcklEKSB7XG4gICAgb21hcC5zaXplID0gbmV3TWFwLnNpemU7XG4gICAgb21hcC5fbWFwID0gbmV3TWFwO1xuICAgIG9tYXAuX2xpc3QgPSBuZXdMaXN0O1xuICAgIG9tYXAuX19oYXNoID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBvbWFwO1xuICB9XG4gIHJldHVybiBtYWtlT3JkZXJlZE1hcChuZXdNYXAsIG5ld0xpc3QpO1xufVxuXG52YXIgSVNfU1RBQ0tfU1lNQk9MID0gJ0BAX19JTU1VVEFCTEVfU1RBQ0tfX0BAJztcblxuZnVuY3Rpb24gaXNTdGFjayhtYXliZVN0YWNrKSB7XG4gIHJldHVybiBCb29sZWFuKG1heWJlU3RhY2sgJiYgbWF5YmVTdGFja1tJU19TVEFDS19TWU1CT0xdKTtcbn1cblxudmFyIFN0YWNrID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoSW5kZXhlZENvbGxlY3Rpb24kJDEpIHtcbiAgZnVuY3Rpb24gU3RhY2sodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgPyBlbXB0eVN0YWNrKClcbiAgICAgIDogaXNTdGFjayh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZVxuICAgICAgICA6IGVtcHR5U3RhY2soKS5wdXNoQWxsKHZhbHVlKTtcbiAgfVxuXG4gIGlmICggSW5kZXhlZENvbGxlY3Rpb24kJDEgKSBTdGFjay5fX3Byb3RvX18gPSBJbmRleGVkQ29sbGVjdGlvbiQkMTtcbiAgU3RhY2sucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSW5kZXhlZENvbGxlY3Rpb24kJDEgJiYgSW5kZXhlZENvbGxlY3Rpb24kJDEucHJvdG90eXBlICk7XG4gIFN0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0YWNrO1xuXG4gIFN0YWNrLm9mID0gZnVuY3Rpb24gb2YgKC8qLi4udmFsdWVzKi8pIHtcbiAgICByZXR1cm4gdGhpcyhhcmd1bWVudHMpO1xuICB9O1xuXG4gIFN0YWNrLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCdTdGFjayBbJywgJ10nKTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIEFjY2Vzc1xuXG4gIFN0YWNrLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGluZGV4LCBub3RTZXRWYWx1ZSkge1xuICAgIHZhciBoZWFkID0gdGhpcy5faGVhZDtcbiAgICBpbmRleCA9IHdyYXBJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgd2hpbGUgKGhlYWQgJiYgaW5kZXgtLSkge1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIGhlYWQgPyBoZWFkLnZhbHVlIDogbm90U2V0VmFsdWU7XG4gIH07XG5cbiAgU3RhY2sucHJvdG90eXBlLnBlZWsgPSBmdW5jdGlvbiBwZWVrICgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZCAmJiB0aGlzLl9oZWFkLnZhbHVlO1xuICB9O1xuXG4gIC8vIEBwcmFnbWEgTW9kaWZpY2F0aW9uXG5cbiAgU3RhY2sucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoICgvKi4uLnZhbHVlcyovKSB7XG4gICAgdmFyIGFyZ3VtZW50cyQxID0gYXJndW1lbnRzO1xuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB2YXIgbmV3U2l6ZSA9IHRoaXMuc2l6ZSArIGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGhlYWQgPSB0aGlzLl9oZWFkO1xuICAgIGZvciAodmFyIGlpID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7IGlpID49IDA7IGlpLS0pIHtcbiAgICAgIGhlYWQgPSB7XG4gICAgICAgIHZhbHVlOiBhcmd1bWVudHMkMVtpaV0sXG4gICAgICAgIG5leHQ6IGhlYWQsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fX293bmVySUQpIHtcbiAgICAgIHRoaXMuc2l6ZSA9IG5ld1NpemU7XG4gICAgICB0aGlzLl9oZWFkID0gaGVhZDtcbiAgICAgIHRoaXMuX19oYXNoID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fX2FsdGVyZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBtYWtlU3RhY2sobmV3U2l6ZSwgaGVhZCk7XG4gIH07XG5cbiAgU3RhY2sucHJvdG90eXBlLnB1c2hBbGwgPSBmdW5jdGlvbiBwdXNoQWxsIChpdGVyKSB7XG4gICAgaXRlciA9IEluZGV4ZWRDb2xsZWN0aW9uJCQxKGl0ZXIpO1xuICAgIGlmIChpdGVyLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaXplID09PSAwICYmIGlzU3RhY2soaXRlcikpIHtcbiAgICAgIHJldHVybiBpdGVyO1xuICAgIH1cbiAgICBhc3NlcnROb3RJbmZpbml0ZShpdGVyLnNpemUpO1xuICAgIHZhciBuZXdTaXplID0gdGhpcy5zaXplO1xuICAgIHZhciBoZWFkID0gdGhpcy5faGVhZDtcbiAgICBpdGVyLl9faXRlcmF0ZShmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIG5ld1NpemUrKztcbiAgICAgIGhlYWQgPSB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgbmV4dDogaGVhZCxcbiAgICAgIH07XG4gICAgfSwgLyogcmV2ZXJzZSAqLyB0cnVlKTtcbiAgICBpZiAodGhpcy5fX293bmVySUQpIHtcbiAgICAgIHRoaXMuc2l6ZSA9IG5ld1NpemU7XG4gICAgICB0aGlzLl9oZWFkID0gaGVhZDtcbiAgICAgIHRoaXMuX19oYXNoID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fX2FsdGVyZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBtYWtlU3RhY2sobmV3U2l6ZSwgaGVhZCk7XG4gIH07XG5cbiAgU3RhY2sucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uIHBvcCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2xpY2UoMSk7XG4gIH07XG5cbiAgU3RhY2sucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIgKCkge1xuICAgIGlmICh0aGlzLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodGhpcy5fX293bmVySUQpIHtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgICB0aGlzLl9oZWFkID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fX2hhc2ggPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9fYWx0ZXJlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIGVtcHR5U3RhY2soKTtcbiAgfTtcblxuICBTdGFjay5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuICAgIGlmICh3aG9sZVNsaWNlKGJlZ2luLCBlbmQsIHRoaXMuc2l6ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB2YXIgcmVzb2x2ZWRCZWdpbiA9IHJlc29sdmVCZWdpbihiZWdpbiwgdGhpcy5zaXplKTtcbiAgICB2YXIgcmVzb2x2ZWRFbmQgPSByZXNvbHZlRW5kKGVuZCwgdGhpcy5zaXplKTtcbiAgICBpZiAocmVzb2x2ZWRFbmQgIT09IHRoaXMuc2l6ZSkge1xuICAgICAgLy8gc3VwZXIuc2xpY2UoYmVnaW4sIGVuZCk7XG4gICAgICByZXR1cm4gSW5kZXhlZENvbGxlY3Rpb24kJDEucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgfVxuICAgIHZhciBuZXdTaXplID0gdGhpcy5zaXplIC0gcmVzb2x2ZWRCZWdpbjtcbiAgICB2YXIgaGVhZCA9IHRoaXMuX2hlYWQ7XG4gICAgd2hpbGUgKHJlc29sdmVkQmVnaW4tLSkge1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX19vd25lcklEKSB7XG4gICAgICB0aGlzLnNpemUgPSBuZXdTaXplO1xuICAgICAgdGhpcy5faGVhZCA9IGhlYWQ7XG4gICAgICB0aGlzLl9faGFzaCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX19hbHRlcmVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gbWFrZVN0YWNrKG5ld1NpemUsIGhlYWQpO1xuICB9O1xuXG4gIC8vIEBwcmFnbWEgTXV0YWJpbGl0eVxuXG4gIFN0YWNrLnByb3RvdHlwZS5fX2Vuc3VyZU93bmVyID0gZnVuY3Rpb24gX19lbnN1cmVPd25lciAob3duZXJJRCkge1xuICAgIGlmIChvd25lcklEID09PSB0aGlzLl9fb3duZXJJRCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmICghb3duZXJJRCkge1xuICAgICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZW1wdHlTdGFjaygpO1xuICAgICAgfVxuICAgICAgdGhpcy5fX293bmVySUQgPSBvd25lcklEO1xuICAgICAgdGhpcy5fX2FsdGVyZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gbWFrZVN0YWNrKHRoaXMuc2l6ZSwgdGhpcy5faGVhZCwgb3duZXJJRCwgdGhpcy5fX2hhc2gpO1xuICB9O1xuXG4gIC8vIEBwcmFnbWEgSXRlcmF0aW9uXG5cbiAgU3RhY2sucHJvdG90eXBlLl9faXRlcmF0ZSA9IGZ1bmN0aW9uIF9faXRlcmF0ZSAoZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICByZXR1cm4gbmV3IEFycmF5U2VxKHRoaXMudG9BcnJheSgpKS5fX2l0ZXJhdGUoXG4gICAgICAgIGZ1bmN0aW9uICh2LCBrKSB7IHJldHVybiBmbih2LCBrLCB0aGlzJDEpOyB9LFxuICAgICAgICByZXZlcnNlXG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgdmFyIG5vZGUgPSB0aGlzLl9oZWFkO1xuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICBpZiAoZm4obm9kZS52YWx1ZSwgaXRlcmF0aW9ucysrLCB0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgIH1cbiAgICByZXR1cm4gaXRlcmF0aW9ucztcbiAgfTtcblxuICBTdGFjay5wcm90b3R5cGUuX19pdGVyYXRvciA9IGZ1bmN0aW9uIF9faXRlcmF0b3IgKHR5cGUsIHJldmVyc2UpIHtcbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgcmV0dXJuIG5ldyBBcnJheVNlcSh0aGlzLnRvQXJyYXkoKSkuX19pdGVyYXRvcih0eXBlLCByZXZlcnNlKTtcbiAgICB9XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIHZhciBub2RlID0gdGhpcy5faGVhZDtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG5vZGUudmFsdWU7XG4gICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIHJldHVybiBpdGVyYXRvclZhbHVlKHR5cGUsIGl0ZXJhdGlvbnMrKywgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yRG9uZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTdGFjaztcbn0oSW5kZXhlZENvbGxlY3Rpb24pKTtcblxuU3RhY2suaXNTdGFjayA9IGlzU3RhY2s7XG5cbnZhciBTdGFja1Byb3RvdHlwZSA9IFN0YWNrLnByb3RvdHlwZTtcblN0YWNrUHJvdG90eXBlW0lTX1NUQUNLX1NZTUJPTF0gPSB0cnVlO1xuU3RhY2tQcm90b3R5cGUuc2hpZnQgPSBTdGFja1Byb3RvdHlwZS5wb3A7XG5TdGFja1Byb3RvdHlwZS51bnNoaWZ0ID0gU3RhY2tQcm90b3R5cGUucHVzaDtcblN0YWNrUHJvdG90eXBlLnVuc2hpZnRBbGwgPSBTdGFja1Byb3RvdHlwZS5wdXNoQWxsO1xuU3RhY2tQcm90b3R5cGUud2l0aE11dGF0aW9ucyA9IHdpdGhNdXRhdGlvbnM7XG5TdGFja1Byb3RvdHlwZS53YXNBbHRlcmVkID0gd2FzQWx0ZXJlZDtcblN0YWNrUHJvdG90eXBlLmFzSW1tdXRhYmxlID0gYXNJbW11dGFibGU7XG5TdGFja1Byb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL2luaXQnXSA9IFN0YWNrUHJvdG90eXBlLmFzTXV0YWJsZSA9IGFzTXV0YWJsZTtcblN0YWNrUHJvdG90eXBlWydAQHRyYW5zZHVjZXIvc3RlcCddID0gZnVuY3Rpb24ocmVzdWx0LCBhcnIpIHtcbiAgcmV0dXJuIHJlc3VsdC51bnNoaWZ0KGFycik7XG59O1xuU3RhY2tQcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9yZXN1bHQnXSA9IGZ1bmN0aW9uKG9iaikge1xuICByZXR1cm4gb2JqLmFzSW1tdXRhYmxlKCk7XG59O1xuXG5mdW5jdGlvbiBtYWtlU3RhY2soc2l6ZSwgaGVhZCwgb3duZXJJRCwgaGFzaCkge1xuICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShTdGFja1Byb3RvdHlwZSk7XG4gIG1hcC5zaXplID0gc2l6ZTtcbiAgbWFwLl9oZWFkID0gaGVhZDtcbiAgbWFwLl9fb3duZXJJRCA9IG93bmVySUQ7XG4gIG1hcC5fX2hhc2ggPSBoYXNoO1xuICBtYXAuX19hbHRlcmVkID0gZmFsc2U7XG4gIHJldHVybiBtYXA7XG59XG5cbnZhciBFTVBUWV9TVEFDSztcbmZ1bmN0aW9uIGVtcHR5U3RhY2soKSB7XG4gIHJldHVybiBFTVBUWV9TVEFDSyB8fCAoRU1QVFlfU1RBQ0sgPSBtYWtlU3RhY2soMCkpO1xufVxuXG52YXIgSVNfU0VUX1NZTUJPTCA9ICdAQF9fSU1NVVRBQkxFX1NFVF9fQEAnO1xuXG5mdW5jdGlvbiBpc1NldChtYXliZVNldCkge1xuICByZXR1cm4gQm9vbGVhbihtYXliZVNldCAmJiBtYXliZVNldFtJU19TRVRfU1lNQk9MXSk7XG59XG5cbmZ1bmN0aW9uIGlzT3JkZXJlZFNldChtYXliZU9yZGVyZWRTZXQpIHtcbiAgcmV0dXJuIGlzU2V0KG1heWJlT3JkZXJlZFNldCkgJiYgaXNPcmRlcmVkKG1heWJlT3JkZXJlZFNldCk7XG59XG5cbmZ1bmN0aW9uIGRlZXBFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgIWlzQ29sbGVjdGlvbihiKSB8fFxuICAgIChhLnNpemUgIT09IHVuZGVmaW5lZCAmJiBiLnNpemUgIT09IHVuZGVmaW5lZCAmJiBhLnNpemUgIT09IGIuc2l6ZSkgfHxcbiAgICAoYS5fX2hhc2ggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgYi5fX2hhc2ggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgYS5fX2hhc2ggIT09IGIuX19oYXNoKSB8fFxuICAgIGlzS2V5ZWQoYSkgIT09IGlzS2V5ZWQoYikgfHxcbiAgICBpc0luZGV4ZWQoYSkgIT09IGlzSW5kZXhlZChiKSB8fFxuICAgIGlzT3JkZXJlZChhKSAhPT0gaXNPcmRlcmVkKGIpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChhLnNpemUgPT09IDAgJiYgYi5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgbm90QXNzb2NpYXRpdmUgPSAhaXNBc3NvY2lhdGl2ZShhKTtcblxuICBpZiAoaXNPcmRlcmVkKGEpKSB7XG4gICAgdmFyIGVudHJpZXMgPSBhLmVudHJpZXMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgYi5ldmVyeShmdW5jdGlvbiAodiwgaykge1xuICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzLm5leHQoKS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGlzKGVudHJ5WzFdLCB2KSAmJiAobm90QXNzb2NpYXRpdmUgfHwgaXMoZW50cnlbMF0sIGspKTtcbiAgICAgIH0pICYmIGVudHJpZXMubmV4dCgpLmRvbmVcbiAgICApO1xuICB9XG5cbiAgdmFyIGZsaXBwZWQgPSBmYWxzZTtcblxuICBpZiAoYS5zaXplID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoYi5zaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgYS5jYWNoZVJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhLmNhY2hlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsaXBwZWQgPSB0cnVlO1xuICAgICAgdmFyIF8gPSBhO1xuICAgICAgYSA9IGI7XG4gICAgICBiID0gXztcbiAgICB9XG4gIH1cblxuICB2YXIgYWxsRXF1YWwgPSB0cnVlO1xuICB2YXIgYlNpemUgPSBiLl9faXRlcmF0ZShmdW5jdGlvbiAodiwgaykge1xuICAgIGlmIChcbiAgICAgIG5vdEFzc29jaWF0aXZlXG4gICAgICAgID8gIWEuaGFzKHYpXG4gICAgICAgIDogZmxpcHBlZFxuICAgICAgICAgID8gIWlzKHYsIGEuZ2V0KGssIE5PVF9TRVQpKVxuICAgICAgICAgIDogIWlzKGEuZ2V0KGssIE5PVF9TRVQpLCB2KVxuICAgICkge1xuICAgICAgYWxsRXF1YWwgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhbGxFcXVhbCAmJiBhLnNpemUgPT09IGJTaXplO1xufVxuXG4vKipcbiAqIENvbnRyaWJ1dGVzIGFkZGl0aW9uYWwgbWV0aG9kcyB0byBhIGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIG1peGluKGN0b3IsIG1ldGhvZHMpIHtcbiAgdmFyIGtleUNvcGllciA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBjdG9yLnByb3RvdHlwZVtrZXldID0gbWV0aG9kc1trZXldO1xuICB9O1xuICBPYmplY3Qua2V5cyhtZXRob2RzKS5mb3JFYWNoKGtleUNvcGllcik7XG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiZcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG1ldGhvZHMpLmZvckVhY2goa2V5Q29waWVyKTtcbiAgcmV0dXJuIGN0b3I7XG59XG5cbmZ1bmN0aW9uIHRvSlModmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICghaXNDb2xsZWN0aW9uKHZhbHVlKSkge1xuICAgIGlmICghaXNEYXRhU3RydWN0dXJlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICB2YWx1ZSA9IFNlcSh2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzS2V5ZWQodmFsdWUpKSB7XG4gICAgdmFyIHJlc3VsdCQxID0ge307XG4gICAgdmFsdWUuX19pdGVyYXRlKGZ1bmN0aW9uICh2LCBrKSB7XG4gICAgICByZXN1bHQkMVtrXSA9IHRvSlModik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdCQxO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFsdWUuX19pdGVyYXRlKGZ1bmN0aW9uICh2KSB7XG4gICAgcmVzdWx0LnB1c2godG9KUyh2KSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG52YXIgU2V0ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoU2V0Q29sbGVjdGlvbiQkMSkge1xuICBmdW5jdGlvbiBTZXQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgPyBlbXB0eVNldCgpXG4gICAgICA6IGlzU2V0KHZhbHVlKSAmJiAhaXNPcmRlcmVkKHZhbHVlKVxuICAgICAgICA/IHZhbHVlXG4gICAgICAgIDogZW1wdHlTZXQoKS53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChzZXQpIHtcbiAgICAgICAgICAgIHZhciBpdGVyID0gU2V0Q29sbGVjdGlvbiQkMSh2YWx1ZSk7XG4gICAgICAgICAgICBhc3NlcnROb3RJbmZpbml0ZShpdGVyLnNpemUpO1xuICAgICAgICAgICAgaXRlci5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7IHJldHVybiBzZXQuYWRkKHYpOyB9KTtcbiAgICAgICAgICB9KTtcbiAgfVxuXG4gIGlmICggU2V0Q29sbGVjdGlvbiQkMSApIFNldC5fX3Byb3RvX18gPSBTZXRDb2xsZWN0aW9uJCQxO1xuICBTZXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggU2V0Q29sbGVjdGlvbiQkMSAmJiBTZXRDb2xsZWN0aW9uJCQxLnByb3RvdHlwZSApO1xuICBTZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2V0O1xuXG4gIFNldC5vZiA9IGZ1bmN0aW9uIG9mICgvKi4uLnZhbHVlcyovKSB7XG4gICAgcmV0dXJuIHRoaXMoYXJndW1lbnRzKTtcbiAgfTtcblxuICBTZXQuZnJvbUtleXMgPSBmdW5jdGlvbiBmcm9tS2V5cyAodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcyhLZXllZENvbGxlY3Rpb24odmFsdWUpLmtleVNlcSgpKTtcbiAgfTtcblxuICBTZXQuaW50ZXJzZWN0ID0gZnVuY3Rpb24gaW50ZXJzZWN0IChzZXRzKSB7XG4gICAgc2V0cyA9IENvbGxlY3Rpb24oc2V0cykudG9BcnJheSgpO1xuICAgIHJldHVybiBzZXRzLmxlbmd0aFxuICAgICAgPyBTZXRQcm90b3R5cGUuaW50ZXJzZWN0LmFwcGx5KFNldChzZXRzLnBvcCgpKSwgc2V0cylcbiAgICAgIDogZW1wdHlTZXQoKTtcbiAgfTtcblxuICBTZXQudW5pb24gPSBmdW5jdGlvbiB1bmlvbiAoc2V0cykge1xuICAgIHNldHMgPSBDb2xsZWN0aW9uKHNldHMpLnRvQXJyYXkoKTtcbiAgICByZXR1cm4gc2V0cy5sZW5ndGhcbiAgICAgID8gU2V0UHJvdG90eXBlLnVuaW9uLmFwcGx5KFNldChzZXRzLnBvcCgpKSwgc2V0cylcbiAgICAgIDogZW1wdHlTZXQoKTtcbiAgfTtcblxuICBTZXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLl9fdG9TdHJpbmcoJ1NldCB7JywgJ30nKTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIEFjY2Vzc1xuXG4gIFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzICh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9tYXAuaGFzKHZhbHVlKTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIE1vZGlmaWNhdGlvblxuXG4gIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkICh2YWx1ZSkge1xuICAgIHJldHVybiB1cGRhdGVTZXQodGhpcywgdGhpcy5fbWFwLnNldCh2YWx1ZSwgdmFsdWUpKTtcbiAgfTtcblxuICBTZXQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSAodmFsdWUpIHtcbiAgICByZXR1cm4gdXBkYXRlU2V0KHRoaXMsIHRoaXMuX21hcC5yZW1vdmUodmFsdWUpKTtcbiAgfTtcblxuICBTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIgKCkge1xuICAgIHJldHVybiB1cGRhdGVTZXQodGhpcywgdGhpcy5fbWFwLmNsZWFyKCkpO1xuICB9O1xuXG4gIC8vIEBwcmFnbWEgQ29tcG9zaXRpb25cblxuICBTZXQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1hcCAobWFwcGVyLCBjb250ZXh0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmVtb3ZlcyA9IFtdO1xuICAgIHZhciBhZGRzID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyIG1hcHBlZCA9IG1hcHBlci5jYWxsKGNvbnRleHQsIHZhbHVlLCB2YWx1ZSwgdGhpcyQxKTtcbiAgICAgIGlmIChtYXBwZWQgIT09IHZhbHVlKSB7XG4gICAgICAgIHJlbW92ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIGFkZHMucHVzaChtYXBwZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24gKHNldCkge1xuICAgICAgcmVtb3Zlcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gc2V0LnJlbW92ZSh2YWx1ZSk7IH0pO1xuICAgICAgYWRkcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gc2V0LmFkZCh2YWx1ZSk7IH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIFNldC5wcm90b3R5cGUudW5pb24gPSBmdW5jdGlvbiB1bmlvbiAoKSB7XG4gICAgdmFyIGl0ZXJzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGl0ZXJzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICBpdGVycyA9IGl0ZXJzLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5zaXplICE9PSAwOyB9KTtcbiAgICBpZiAoaXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCAmJiAhdGhpcy5fX293bmVySUQgJiYgaXRlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcihpdGVyc1swXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24gKHNldCkge1xuICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGl0ZXJzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICBTZXRDb2xsZWN0aW9uJCQxKGl0ZXJzW2lpXSkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHNldC5hZGQodmFsdWUpOyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBTZXQucHJvdG90eXBlLmludGVyc2VjdCA9IGZ1bmN0aW9uIGludGVyc2VjdCAoKSB7XG4gICAgdmFyIGl0ZXJzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGl0ZXJzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICBpZiAoaXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaXRlcnMgPSBpdGVycy5tYXAoZnVuY3Rpb24gKGl0ZXIpIHsgcmV0dXJuIFNldENvbGxlY3Rpb24kJDEoaXRlcik7IH0pO1xuICAgIHZhciB0b1JlbW92ZSA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICghaXRlcnMuZXZlcnkoZnVuY3Rpb24gKGl0ZXIpIHsgcmV0dXJuIGl0ZXIuaW5jbHVkZXModmFsdWUpOyB9KSkge1xuICAgICAgICB0b1JlbW92ZS5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChzZXQpIHtcbiAgICAgIHRvUmVtb3ZlLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHNldC5yZW1vdmUodmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgU2V0LnByb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIHN1YnRyYWN0ICgpIHtcbiAgICB2YXIgaXRlcnMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgaXRlcnNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIGlmIChpdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpdGVycyA9IGl0ZXJzLm1hcChmdW5jdGlvbiAoaXRlcikgeyByZXR1cm4gU2V0Q29sbGVjdGlvbiQkMShpdGVyKTsgfSk7XG4gICAgdmFyIHRvUmVtb3ZlID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKGl0ZXJzLnNvbWUoZnVuY3Rpb24gKGl0ZXIpIHsgcmV0dXJuIGl0ZXIuaW5jbHVkZXModmFsdWUpOyB9KSkge1xuICAgICAgICB0b1JlbW92ZS5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChzZXQpIHtcbiAgICAgIHRvUmVtb3ZlLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHNldC5yZW1vdmUodmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgU2V0LnByb3RvdHlwZS5zb3J0ID0gZnVuY3Rpb24gc29ydCAoY29tcGFyYXRvcikge1xuICAgIC8vIExhdGUgYmluZGluZ1xuICAgIHJldHVybiBPcmRlcmVkU2V0KHNvcnRGYWN0b3J5KHRoaXMsIGNvbXBhcmF0b3IpKTtcbiAgfTtcblxuICBTZXQucHJvdG90eXBlLnNvcnRCeSA9IGZ1bmN0aW9uIHNvcnRCeSAobWFwcGVyLCBjb21wYXJhdG9yKSB7XG4gICAgLy8gTGF0ZSBiaW5kaW5nXG4gICAgcmV0dXJuIE9yZGVyZWRTZXQoc29ydEZhY3RvcnkodGhpcywgY29tcGFyYXRvciwgbWFwcGVyKSk7XG4gIH07XG5cbiAgU2V0LnByb3RvdHlwZS53YXNBbHRlcmVkID0gZnVuY3Rpb24gd2FzQWx0ZXJlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcC53YXNBbHRlcmVkKCk7XG4gIH07XG5cbiAgU2V0LnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy5fbWFwLl9faXRlcmF0ZShmdW5jdGlvbiAoaykgeyByZXR1cm4gZm4oaywgaywgdGhpcyQxKTsgfSwgcmV2ZXJzZSk7XG4gIH07XG5cbiAgU2V0LnByb3RvdHlwZS5fX2l0ZXJhdG9yID0gZnVuY3Rpb24gX19pdGVyYXRvciAodHlwZSwgcmV2ZXJzZSkge1xuICAgIHJldHVybiB0aGlzLl9tYXAuX19pdGVyYXRvcih0eXBlLCByZXZlcnNlKTtcbiAgfTtcblxuICBTZXQucHJvdG90eXBlLl9fZW5zdXJlT3duZXIgPSBmdW5jdGlvbiBfX2Vuc3VyZU93bmVyIChvd25lcklEKSB7XG4gICAgaWYgKG93bmVySUQgPT09IHRoaXMuX19vd25lcklEKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdmFyIG5ld01hcCA9IHRoaXMuX21hcC5fX2Vuc3VyZU93bmVyKG93bmVySUQpO1xuICAgIGlmICghb3duZXJJRCkge1xuICAgICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2VtcHR5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9fb3duZXJJRCA9IG93bmVySUQ7XG4gICAgICB0aGlzLl9tYXAgPSBuZXdNYXA7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX19tYWtlKG5ld01hcCwgb3duZXJJRCk7XG4gIH07XG5cbiAgcmV0dXJuIFNldDtcbn0oU2V0Q29sbGVjdGlvbikpO1xuXG5TZXQuaXNTZXQgPSBpc1NldDtcblxudmFyIFNldFByb3RvdHlwZSA9IFNldC5wcm90b3R5cGU7XG5TZXRQcm90b3R5cGVbSVNfU0VUX1NZTUJPTF0gPSB0cnVlO1xuU2V0UHJvdG90eXBlW0RFTEVURV0gPSBTZXRQcm90b3R5cGUucmVtb3ZlO1xuU2V0UHJvdG90eXBlLm1lcmdlID0gU2V0UHJvdG90eXBlLmNvbmNhdCA9IFNldFByb3RvdHlwZS51bmlvbjtcblNldFByb3RvdHlwZS53aXRoTXV0YXRpb25zID0gd2l0aE11dGF0aW9ucztcblNldFByb3RvdHlwZS5hc0ltbXV0YWJsZSA9IGFzSW1tdXRhYmxlO1xuU2V0UHJvdG90eXBlWydAQHRyYW5zZHVjZXIvaW5pdCddID0gU2V0UHJvdG90eXBlLmFzTXV0YWJsZSA9IGFzTXV0YWJsZTtcblNldFByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL3N0ZXAnXSA9IGZ1bmN0aW9uKHJlc3VsdCwgYXJyKSB7XG4gIHJldHVybiByZXN1bHQuYWRkKGFycik7XG59O1xuU2V0UHJvdG90eXBlWydAQHRyYW5zZHVjZXIvcmVzdWx0J10gPSBmdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIG9iai5hc0ltbXV0YWJsZSgpO1xufTtcblxuU2V0UHJvdG90eXBlLl9fZW1wdHkgPSBlbXB0eVNldDtcblNldFByb3RvdHlwZS5fX21ha2UgPSBtYWtlU2V0O1xuXG5mdW5jdGlvbiB1cGRhdGVTZXQoc2V0LCBuZXdNYXApIHtcbiAgaWYgKHNldC5fX293bmVySUQpIHtcbiAgICBzZXQuc2l6ZSA9IG5ld01hcC5zaXplO1xuICAgIHNldC5fbWFwID0gbmV3TWFwO1xuICAgIHJldHVybiBzZXQ7XG4gIH1cbiAgcmV0dXJuIG5ld01hcCA9PT0gc2V0Ll9tYXBcbiAgICA/IHNldFxuICAgIDogbmV3TWFwLnNpemUgPT09IDBcbiAgICAgID8gc2V0Ll9fZW1wdHkoKVxuICAgICAgOiBzZXQuX19tYWtlKG5ld01hcCk7XG59XG5cbmZ1bmN0aW9uIG1ha2VTZXQobWFwLCBvd25lcklEKSB7XG4gIHZhciBzZXQgPSBPYmplY3QuY3JlYXRlKFNldFByb3RvdHlwZSk7XG4gIHNldC5zaXplID0gbWFwID8gbWFwLnNpemUgOiAwO1xuICBzZXQuX21hcCA9IG1hcDtcbiAgc2V0Ll9fb3duZXJJRCA9IG93bmVySUQ7XG4gIHJldHVybiBzZXQ7XG59XG5cbnZhciBFTVBUWV9TRVQ7XG5mdW5jdGlvbiBlbXB0eVNldCgpIHtcbiAgcmV0dXJuIEVNUFRZX1NFVCB8fCAoRU1QVFlfU0VUID0gbWFrZVNldChlbXB0eU1hcCgpKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxhenkgc2VxIG9mIG51bXMgZnJvbSBzdGFydCAoaW5jbHVzaXZlKSB0byBlbmRcbiAqIChleGNsdXNpdmUpLCBieSBzdGVwLCB3aGVyZSBzdGFydCBkZWZhdWx0cyB0byAwLCBzdGVwIHRvIDEsIGFuZCBlbmQgdG9cbiAqIGluZmluaXR5LiBXaGVuIHN0YXJ0IGlzIGVxdWFsIHRvIGVuZCwgcmV0dXJucyBlbXB0eSBsaXN0LlxuICovXG52YXIgUmFuZ2UgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChJbmRleGVkU2VxJCQxKSB7XG4gIGZ1bmN0aW9uIFJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmFuZ2UpKSB7XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApO1xuICAgIH1cbiAgICBpbnZhcmlhbnQoc3RlcCAhPT0gMCwgJ0Nhbm5vdCBzdGVwIGEgUmFuZ2UgYnkgMCcpO1xuICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuZCA9IEluZmluaXR5O1xuICAgIH1cbiAgICBzdGVwID0gc3RlcCA9PT0gdW5kZWZpbmVkID8gMSA6IE1hdGguYWJzKHN0ZXApO1xuICAgIGlmIChlbmQgPCBzdGFydCkge1xuICAgICAgc3RlcCA9IC1zdGVwO1xuICAgIH1cbiAgICB0aGlzLl9zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuX2VuZCA9IGVuZDtcbiAgICB0aGlzLl9zdGVwID0gc3RlcDtcbiAgICB0aGlzLnNpemUgPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoKGVuZCAtIHN0YXJ0KSAvIHN0ZXAgLSAxKSArIDEpO1xuICAgIGlmICh0aGlzLnNpemUgPT09IDApIHtcbiAgICAgIGlmIChFTVBUWV9SQU5HRSkge1xuICAgICAgICByZXR1cm4gRU1QVFlfUkFOR0U7XG4gICAgICB9XG4gICAgICBFTVBUWV9SQU5HRSA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgaWYgKCBJbmRleGVkU2VxJCQxICkgUmFuZ2UuX19wcm90b19fID0gSW5kZXhlZFNlcSQkMTtcbiAgUmFuZ2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSW5kZXhlZFNlcSQkMSAmJiBJbmRleGVkU2VxJCQxLnByb3RvdHlwZSApO1xuICBSYW5nZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5nZTtcblxuICBSYW5nZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuICdSYW5nZSBbXSc7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICAnUmFuZ2UgWyAnICtcbiAgICAgIHRoaXMuX3N0YXJ0ICtcbiAgICAgICcuLi4nICtcbiAgICAgIHRoaXMuX2VuZCArXG4gICAgICAodGhpcy5fc3RlcCAhPT0gMSA/ICcgYnkgJyArIHRoaXMuX3N0ZXAgOiAnJykgK1xuICAgICAgJyBdJ1xuICAgICk7XG4gIH07XG5cbiAgUmFuZ2UucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoaW5kZXgsIG5vdFNldFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKGluZGV4KVxuICAgICAgPyB0aGlzLl9zdGFydCArIHdyYXBJbmRleCh0aGlzLCBpbmRleCkgKiB0aGlzLl9zdGVwXG4gICAgICA6IG5vdFNldFZhbHVlO1xuICB9O1xuXG4gIFJhbmdlLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzIChzZWFyY2hWYWx1ZSkge1xuICAgIHZhciBwb3NzaWJsZUluZGV4ID0gKHNlYXJjaFZhbHVlIC0gdGhpcy5fc3RhcnQpIC8gdGhpcy5fc3RlcDtcbiAgICByZXR1cm4gKFxuICAgICAgcG9zc2libGVJbmRleCA+PSAwICYmXG4gICAgICBwb3NzaWJsZUluZGV4IDwgdGhpcy5zaXplICYmXG4gICAgICBwb3NzaWJsZUluZGV4ID09PSBNYXRoLmZsb29yKHBvc3NpYmxlSW5kZXgpXG4gICAgKTtcbiAgfTtcblxuICBSYW5nZS5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuICAgIGlmICh3aG9sZVNsaWNlKGJlZ2luLCBlbmQsIHRoaXMuc2l6ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBiZWdpbiA9IHJlc29sdmVCZWdpbihiZWdpbiwgdGhpcy5zaXplKTtcbiAgICBlbmQgPSByZXNvbHZlRW5kKGVuZCwgdGhpcy5zaXplKTtcbiAgICBpZiAoZW5kIDw9IGJlZ2luKSB7XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKDAsIDApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFJhbmdlKFxuICAgICAgdGhpcy5nZXQoYmVnaW4sIHRoaXMuX2VuZCksXG4gICAgICB0aGlzLmdldChlbmQsIHRoaXMuX2VuZCksXG4gICAgICB0aGlzLl9zdGVwXG4gICAgKTtcbiAgfTtcblxuICBSYW5nZS5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHNlYXJjaFZhbHVlKSB7XG4gICAgdmFyIG9mZnNldFZhbHVlID0gc2VhcmNoVmFsdWUgLSB0aGlzLl9zdGFydDtcbiAgICBpZiAob2Zmc2V0VmFsdWUgJSB0aGlzLl9zdGVwID09PSAwKSB7XG4gICAgICB2YXIgaW5kZXggPSBvZmZzZXRWYWx1ZSAvIHRoaXMuX3N0ZXA7XG4gICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuc2l6ZSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfTtcblxuICBSYW5nZS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAoc2VhcmNoVmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleE9mKHNlYXJjaFZhbHVlKTtcbiAgfTtcblxuICBSYW5nZS5wcm90b3R5cGUuX19pdGVyYXRlID0gZnVuY3Rpb24gX19pdGVyYXRlIChmbiwgcmV2ZXJzZSkge1xuICAgIHZhciBzaXplID0gdGhpcy5zaXplO1xuICAgIHZhciBzdGVwID0gdGhpcy5fc3RlcDtcbiAgICB2YXIgdmFsdWUgPSByZXZlcnNlID8gdGhpcy5fc3RhcnQgKyAoc2l6ZSAtIDEpICogc3RlcCA6IHRoaXMuX3N0YXJ0O1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSAhPT0gc2l6ZSkge1xuICAgICAgaWYgKGZuKHZhbHVlLCByZXZlcnNlID8gc2l6ZSAtICsraSA6IGkrKywgdGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdmFsdWUgKz0gcmV2ZXJzZSA/IC1zdGVwIDogc3RlcDtcbiAgICB9XG4gICAgcmV0dXJuIGk7XG4gIH07XG5cbiAgUmFuZ2UucHJvdG90eXBlLl9faXRlcmF0b3IgPSBmdW5jdGlvbiBfX2l0ZXJhdG9yICh0eXBlLCByZXZlcnNlKSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLnNpemU7XG4gICAgdmFyIHN0ZXAgPSB0aGlzLl9zdGVwO1xuICAgIHZhciB2YWx1ZSA9IHJldmVyc2UgPyB0aGlzLl9zdGFydCArIChzaXplIC0gMSkgKiBzdGVwIDogdGhpcy5fc3RhcnQ7XG4gICAgdmFyIGkgPSAwO1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGkgPT09IHNpemUpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yRG9uZSgpO1xuICAgICAgfVxuICAgICAgdmFyIHYgPSB2YWx1ZTtcbiAgICAgIHZhbHVlICs9IHJldmVyc2UgPyAtc3RlcCA6IHN0ZXA7XG4gICAgICByZXR1cm4gaXRlcmF0b3JWYWx1ZSh0eXBlLCByZXZlcnNlID8gc2l6ZSAtICsraSA6IGkrKywgdik7XG4gICAgfSk7XG4gIH07XG5cbiAgUmFuZ2UucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAob3RoZXIpIHtcbiAgICByZXR1cm4gb3RoZXIgaW5zdGFuY2VvZiBSYW5nZVxuICAgICAgPyB0aGlzLl9zdGFydCA9PT0gb3RoZXIuX3N0YXJ0ICYmXG4gICAgICAgICAgdGhpcy5fZW5kID09PSBvdGhlci5fZW5kICYmXG4gICAgICAgICAgdGhpcy5fc3RlcCA9PT0gb3RoZXIuX3N0ZXBcbiAgICAgIDogZGVlcEVxdWFsKHRoaXMsIG90aGVyKTtcbiAgfTtcblxuICByZXR1cm4gUmFuZ2U7XG59KEluZGV4ZWRTZXEpKTtcblxudmFyIEVNUFRZX1JBTkdFO1xuXG5mdW5jdGlvbiBnZXRJbihjb2xsZWN0aW9uLCBzZWFyY2hLZXlQYXRoLCBub3RTZXRWYWx1ZSkge1xuICB2YXIga2V5UGF0aCA9IGNvZXJjZUtleVBhdGgoc2VhcmNoS2V5UGF0aCk7XG4gIHZhciBpID0gMDtcbiAgd2hpbGUgKGkgIT09IGtleVBhdGgubGVuZ3RoKSB7XG4gICAgY29sbGVjdGlvbiA9IGdldChjb2xsZWN0aW9uLCBrZXlQYXRoW2krK10sIE5PVF9TRVQpO1xuICAgIGlmIChjb2xsZWN0aW9uID09PSBOT1RfU0VUKSB7XG4gICAgICByZXR1cm4gbm90U2V0VmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiBnZXRJbiQxKHNlYXJjaEtleVBhdGgsIG5vdFNldFZhbHVlKSB7XG4gIHJldHVybiBnZXRJbih0aGlzLCBzZWFyY2hLZXlQYXRoLCBub3RTZXRWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGhhc0luKGNvbGxlY3Rpb24sIGtleVBhdGgpIHtcbiAgcmV0dXJuIGdldEluKGNvbGxlY3Rpb24sIGtleVBhdGgsIE5PVF9TRVQpICE9PSBOT1RfU0VUO1xufVxuXG5mdW5jdGlvbiBoYXNJbiQxKHNlYXJjaEtleVBhdGgpIHtcbiAgcmV0dXJuIGhhc0luKHRoaXMsIHNlYXJjaEtleVBhdGgpO1xufVxuXG5mdW5jdGlvbiB0b09iamVjdCgpIHtcbiAgYXNzZXJ0Tm90SW5maW5pdGUodGhpcy5zaXplKTtcbiAgdmFyIG9iamVjdCA9IHt9O1xuICB0aGlzLl9faXRlcmF0ZShmdW5jdGlvbiAodiwgaykge1xuICAgIG9iamVjdFtrXSA9IHY7XG4gIH0pO1xuICByZXR1cm4gb2JqZWN0O1xufVxuXG4vLyBOb3RlOiBhbGwgb2YgdGhlc2UgbWV0aG9kcyBhcmUgZGVwcmVjYXRlZC5cbkNvbGxlY3Rpb24uaXNJdGVyYWJsZSA9IGlzQ29sbGVjdGlvbjtcbkNvbGxlY3Rpb24uaXNLZXllZCA9IGlzS2V5ZWQ7XG5Db2xsZWN0aW9uLmlzSW5kZXhlZCA9IGlzSW5kZXhlZDtcbkNvbGxlY3Rpb24uaXNBc3NvY2lhdGl2ZSA9IGlzQXNzb2NpYXRpdmU7XG5Db2xsZWN0aW9uLmlzT3JkZXJlZCA9IGlzT3JkZXJlZDtcblxuQ29sbGVjdGlvbi5JdGVyYXRvciA9IEl0ZXJhdG9yO1xuXG5taXhpbihDb2xsZWN0aW9uLCB7XG4gIC8vICMjIyBDb252ZXJzaW9uIHRvIG90aGVyIHR5cGVzXG5cbiAgdG9BcnJheTogZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgICBhc3NlcnROb3RJbmZpbml0ZSh0aGlzLnNpemUpO1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheSh0aGlzLnNpemUgfHwgMCk7XG4gICAgdmFyIHVzZVR1cGxlcyA9IGlzS2V5ZWQodGhpcyk7XG4gICAgdmFyIGkgPSAwO1xuICAgIHRoaXMuX19pdGVyYXRlKGZ1bmN0aW9uICh2LCBrKSB7XG4gICAgICAvLyBLZXllZCBjb2xsZWN0aW9ucyBwcm9kdWNlIGFuIGFycmF5IG9mIHR1cGxlcy5cbiAgICAgIGFycmF5W2krK10gPSB1c2VUdXBsZXMgPyBbaywgdl0gOiB2O1xuICAgIH0pO1xuICAgIHJldHVybiBhcnJheTtcbiAgfSxcblxuICB0b0luZGV4ZWRTZXE6IGZ1bmN0aW9uIHRvSW5kZXhlZFNlcSgpIHtcbiAgICByZXR1cm4gbmV3IFRvSW5kZXhlZFNlcXVlbmNlKHRoaXMpO1xuICB9LFxuXG4gIHRvSlM6IGZ1bmN0aW9uIHRvSlMkMSgpIHtcbiAgICByZXR1cm4gdG9KUyh0aGlzKTtcbiAgfSxcblxuICB0b0tleWVkU2VxOiBmdW5jdGlvbiB0b0tleWVkU2VxKCkge1xuICAgIHJldHVybiBuZXcgVG9LZXllZFNlcXVlbmNlKHRoaXMsIHRydWUpO1xuICB9LFxuXG4gIHRvTWFwOiBmdW5jdGlvbiB0b01hcCgpIHtcbiAgICAvLyBVc2UgTGF0ZSBCaW5kaW5nIGhlcmUgdG8gc29sdmUgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG4gICAgcmV0dXJuIE1hcCh0aGlzLnRvS2V5ZWRTZXEoKSk7XG4gIH0sXG5cbiAgdG9PYmplY3Q6IHRvT2JqZWN0LFxuXG4gIHRvT3JkZXJlZE1hcDogZnVuY3Rpb24gdG9PcmRlcmVkTWFwKCkge1xuICAgIC8vIFVzZSBMYXRlIEJpbmRpbmcgaGVyZSB0byBzb2x2ZSB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeS5cbiAgICByZXR1cm4gT3JkZXJlZE1hcCh0aGlzLnRvS2V5ZWRTZXEoKSk7XG4gIH0sXG5cbiAgdG9PcmRlcmVkU2V0OiBmdW5jdGlvbiB0b09yZGVyZWRTZXQoKSB7XG4gICAgLy8gVXNlIExhdGUgQmluZGluZyBoZXJlIHRvIHNvbHZlIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5LlxuICAgIHJldHVybiBPcmRlcmVkU2V0KGlzS2V5ZWQodGhpcykgPyB0aGlzLnZhbHVlU2VxKCkgOiB0aGlzKTtcbiAgfSxcblxuICB0b1NldDogZnVuY3Rpb24gdG9TZXQoKSB7XG4gICAgLy8gVXNlIExhdGUgQmluZGluZyBoZXJlIHRvIHNvbHZlIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5LlxuICAgIHJldHVybiBTZXQoaXNLZXllZCh0aGlzKSA/IHRoaXMudmFsdWVTZXEoKSA6IHRoaXMpO1xuICB9LFxuXG4gIHRvU2V0U2VxOiBmdW5jdGlvbiB0b1NldFNlcSgpIHtcbiAgICByZXR1cm4gbmV3IFRvU2V0U2VxdWVuY2UodGhpcyk7XG4gIH0sXG5cbiAgdG9TZXE6IGZ1bmN0aW9uIHRvU2VxKCkge1xuICAgIHJldHVybiBpc0luZGV4ZWQodGhpcylcbiAgICAgID8gdGhpcy50b0luZGV4ZWRTZXEoKVxuICAgICAgOiBpc0tleWVkKHRoaXMpXG4gICAgICAgID8gdGhpcy50b0tleWVkU2VxKClcbiAgICAgICAgOiB0aGlzLnRvU2V0U2VxKCk7XG4gIH0sXG5cbiAgdG9TdGFjazogZnVuY3Rpb24gdG9TdGFjaygpIHtcbiAgICAvLyBVc2UgTGF0ZSBCaW5kaW5nIGhlcmUgdG8gc29sdmUgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG4gICAgcmV0dXJuIFN0YWNrKGlzS2V5ZWQodGhpcykgPyB0aGlzLnZhbHVlU2VxKCkgOiB0aGlzKTtcbiAgfSxcblxuICB0b0xpc3Q6IGZ1bmN0aW9uIHRvTGlzdCgpIHtcbiAgICAvLyBVc2UgTGF0ZSBCaW5kaW5nIGhlcmUgdG8gc29sdmUgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG4gICAgcmV0dXJuIExpc3QoaXNLZXllZCh0aGlzKSA/IHRoaXMudmFsdWVTZXEoKSA6IHRoaXMpO1xuICB9LFxuXG4gIC8vICMjIyBDb21tb24gSmF2YVNjcmlwdCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzXG5cbiAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW0NvbGxlY3Rpb25dJztcbiAgfSxcblxuICBfX3RvU3RyaW5nOiBmdW5jdGlvbiBfX3RvU3RyaW5nKGhlYWQsIHRhaWwpIHtcbiAgICBpZiAodGhpcy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gaGVhZCArIHRhaWw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBoZWFkICtcbiAgICAgICcgJyArXG4gICAgICB0aGlzLnRvU2VxKClcbiAgICAgICAgLm1hcCh0aGlzLl9fdG9TdHJpbmdNYXBwZXIpXG4gICAgICAgIC5qb2luKCcsICcpICtcbiAgICAgICcgJyArXG4gICAgICB0YWlsXG4gICAgKTtcbiAgfSxcblxuICAvLyAjIyMgRVM2IENvbGxlY3Rpb24gbWV0aG9kcyAoRVM2IEFycmF5IGFuZCBNYXApXG5cbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSB2YWx1ZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIHJldHVybiByZWlmeSh0aGlzLCBjb25jYXRGYWN0b3J5KHRoaXMsIHZhbHVlcykpO1xuICB9LFxuXG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnNvbWUoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBpcyh2YWx1ZSwgc2VhcmNoVmFsdWUpOyB9KTtcbiAgfSxcblxuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9faXRlcmF0b3IoSVRFUkFURV9FTlRSSUVTKTtcbiAgfSxcblxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkocHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgYXNzZXJ0Tm90SW5maW5pdGUodGhpcy5zaXplKTtcbiAgICB2YXIgcmV0dXJuVmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX19pdGVyYXRlKGZ1bmN0aW9uICh2LCBrLCBjKSB7XG4gICAgICBpZiAoIXByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHYsIGssIGMpKSB7XG4gICAgICAgIHJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH0sXG5cbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIocHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHJlaWZ5KHRoaXMsIGZpbHRlckZhY3RvcnkodGhpcywgcHJlZGljYXRlLCBjb250ZXh0LCB0cnVlKSk7XG4gIH0sXG5cbiAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUsIGNvbnRleHQsIG5vdFNldFZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5maW5kRW50cnkocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gZW50cnkgPyBlbnRyeVsxXSA6IG5vdFNldFZhbHVlO1xuICB9LFxuXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goc2lkZUVmZmVjdCwgY29udGV4dCkge1xuICAgIGFzc2VydE5vdEluZmluaXRlKHRoaXMuc2l6ZSk7XG4gICAgcmV0dXJuIHRoaXMuX19pdGVyYXRlKGNvbnRleHQgPyBzaWRlRWZmZWN0LmJpbmQoY29udGV4dCkgOiBzaWRlRWZmZWN0KTtcbiAgfSxcblxuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIGFzc2VydE5vdEluZmluaXRlKHRoaXMuc2l6ZSk7XG4gICAgc2VwYXJhdG9yID0gc2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyAnJyArIHNlcGFyYXRvciA6ICcsJztcbiAgICB2YXIgam9pbmVkID0gJyc7XG4gICAgdmFyIGlzRmlyc3QgPSB0cnVlO1xuICAgIHRoaXMuX19pdGVyYXRlKGZ1bmN0aW9uICh2KSB7XG4gICAgICBpc0ZpcnN0ID8gKGlzRmlyc3QgPSBmYWxzZSkgOiAoam9pbmVkICs9IHNlcGFyYXRvcik7XG4gICAgICBqb2luZWQgKz0gdiAhPT0gbnVsbCAmJiB2ICE9PSB1bmRlZmluZWQgPyB2LnRvU3RyaW5nKCkgOiAnJztcbiAgICB9KTtcbiAgICByZXR1cm4gam9pbmVkO1xuICB9LFxuXG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX19pdGVyYXRvcihJVEVSQVRFX0tFWVMpO1xuICB9LFxuXG4gIG1hcDogZnVuY3Rpb24gbWFwKG1hcHBlciwgY29udGV4dCkge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCBtYXBGYWN0b3J5KHRoaXMsIG1hcHBlciwgY29udGV4dCkpO1xuICB9LFxuXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlJDEocmVkdWNlciwgaW5pdGlhbFJlZHVjdGlvbiwgY29udGV4dCkge1xuICAgIHJldHVybiByZWR1Y2UoXG4gICAgICB0aGlzLFxuICAgICAgcmVkdWNlcixcbiAgICAgIGluaXRpYWxSZWR1Y3Rpb24sXG4gICAgICBjb250ZXh0LFxuICAgICAgYXJndW1lbnRzLmxlbmd0aCA8IDIsXG4gICAgICBmYWxzZVxuICAgICk7XG4gIH0sXG5cbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KHJlZHVjZXIsIGluaXRpYWxSZWR1Y3Rpb24sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgdGhpcyxcbiAgICAgIHJlZHVjZXIsXG4gICAgICBpbml0aWFsUmVkdWN0aW9uLFxuICAgICAgY29udGV4dCxcbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPCAyLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH0sXG5cbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICByZXR1cm4gcmVpZnkodGhpcywgcmV2ZXJzZUZhY3RvcnkodGhpcywgdHJ1ZSkpO1xuICB9LFxuXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgcmV0dXJuIHJlaWZ5KHRoaXMsIHNsaWNlRmFjdG9yeSh0aGlzLCBiZWdpbiwgZW5kLCB0cnVlKSk7XG4gIH0sXG5cbiAgc29tZTogZnVuY3Rpb24gc29tZShwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gIXRoaXMuZXZlcnkobm90KHByZWRpY2F0ZSksIGNvbnRleHQpO1xuICB9LFxuXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyYXRvcikge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCBzb3J0RmFjdG9yeSh0aGlzLCBjb21wYXJhdG9yKSk7XG4gIH0sXG5cbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX19pdGVyYXRvcihJVEVSQVRFX1ZBTFVFUyk7XG4gIH0sXG5cbiAgLy8gIyMjIE1vcmUgc2VxdWVudGlhbCBtZXRob2RzXG5cbiAgYnV0TGFzdDogZnVuY3Rpb24gYnV0TGFzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5zbGljZSgwLCAtMSk7XG4gIH0sXG5cbiAgaXNFbXB0eTogZnVuY3Rpb24gaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplICE9PSB1bmRlZmluZWQgPyB0aGlzLnNpemUgPT09IDAgOiAhdGhpcy5zb21lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0pO1xuICB9LFxuXG4gIGNvdW50OiBmdW5jdGlvbiBjb3VudChwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gZW5zdXJlU2l6ZShcbiAgICAgIHByZWRpY2F0ZSA/IHRoaXMudG9TZXEoKS5maWx0ZXIocHJlZGljYXRlLCBjb250ZXh0KSA6IHRoaXNcbiAgICApO1xuICB9LFxuXG4gIGNvdW50Qnk6IGZ1bmN0aW9uIGNvdW50QnkoZ3JvdXBlciwgY29udGV4dCkge1xuICAgIHJldHVybiBjb3VudEJ5RmFjdG9yeSh0aGlzLCBncm91cGVyLCBjb250ZXh0KTtcbiAgfSxcblxuICBlcXVhbHM6IGZ1bmN0aW9uIGVxdWFscyhvdGhlcikge1xuICAgIHJldHVybiBkZWVwRXF1YWwodGhpcywgb3RoZXIpO1xuICB9LFxuXG4gIGVudHJ5U2VxOiBmdW5jdGlvbiBlbnRyeVNlcSgpIHtcbiAgICB2YXIgY29sbGVjdGlvbiA9IHRoaXM7XG4gICAgaWYgKGNvbGxlY3Rpb24uX2NhY2hlKSB7XG4gICAgICAvLyBXZSBjYWNoZSBhcyBhbiBlbnRyaWVzIGFycmF5LCBzbyB3ZSBjYW4ganVzdCByZXR1cm4gdGhlIGNhY2hlIVxuICAgICAgcmV0dXJuIG5ldyBBcnJheVNlcShjb2xsZWN0aW9uLl9jYWNoZSk7XG4gICAgfVxuICAgIHZhciBlbnRyaWVzU2VxdWVuY2UgPSBjb2xsZWN0aW9uXG4gICAgICAudG9TZXEoKVxuICAgICAgLm1hcChlbnRyeU1hcHBlcilcbiAgICAgIC50b0luZGV4ZWRTZXEoKTtcbiAgICBlbnRyaWVzU2VxdWVuY2UuZnJvbUVudHJ5U2VxID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY29sbGVjdGlvbi50b1NlcSgpOyB9O1xuICAgIHJldHVybiBlbnRyaWVzU2VxdWVuY2U7XG4gIH0sXG5cbiAgZmlsdGVyTm90OiBmdW5jdGlvbiBmaWx0ZXJOb3QocHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyKG5vdChwcmVkaWNhdGUpLCBjb250ZXh0KTtcbiAgfSxcblxuICBmaW5kRW50cnk6IGZ1bmN0aW9uIGZpbmRFbnRyeShwcmVkaWNhdGUsIGNvbnRleHQsIG5vdFNldFZhbHVlKSB7XG4gICAgdmFyIGZvdW5kID0gbm90U2V0VmFsdWU7XG4gICAgdGhpcy5fX2l0ZXJhdGUoZnVuY3Rpb24gKHYsIGssIGMpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUuY2FsbChjb250ZXh0LCB2LCBrLCBjKSkge1xuICAgICAgICBmb3VuZCA9IFtrLCB2XTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmb3VuZDtcbiAgfSxcblxuICBmaW5kS2V5OiBmdW5jdGlvbiBmaW5kS2V5KHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBlbnRyeSA9IHRoaXMuZmluZEVudHJ5KHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5WzBdO1xuICB9LFxuXG4gIGZpbmRMYXN0OiBmdW5jdGlvbiBmaW5kTGFzdChwcmVkaWNhdGUsIGNvbnRleHQsIG5vdFNldFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudG9LZXllZFNlcSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZmluZChwcmVkaWNhdGUsIGNvbnRleHQsIG5vdFNldFZhbHVlKTtcbiAgfSxcblxuICBmaW5kTGFzdEVudHJ5OiBmdW5jdGlvbiBmaW5kTGFzdEVudHJ5KHByZWRpY2F0ZSwgY29udGV4dCwgbm90U2V0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy50b0tleWVkU2VxKClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5maW5kRW50cnkocHJlZGljYXRlLCBjb250ZXh0LCBub3RTZXRWYWx1ZSk7XG4gIH0sXG5cbiAgZmluZExhc3RLZXk6IGZ1bmN0aW9uIGZpbmRMYXN0S2V5KHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLnRvS2V5ZWRTZXEoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpbmRLZXkocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgfSxcblxuICBmaXJzdDogZnVuY3Rpb24gZmlyc3Qobm90U2V0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kKHJldHVyblRydWUsIG51bGwsIG5vdFNldFZhbHVlKTtcbiAgfSxcblxuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKG1hcHBlciwgY29udGV4dCkge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCBmbGF0TWFwRmFjdG9yeSh0aGlzLCBtYXBwZXIsIGNvbnRleHQpKTtcbiAgfSxcblxuICBmbGF0dGVuOiBmdW5jdGlvbiBmbGF0dGVuKGRlcHRoKSB7XG4gICAgcmV0dXJuIHJlaWZ5KHRoaXMsIGZsYXR0ZW5GYWN0b3J5KHRoaXMsIGRlcHRoLCB0cnVlKSk7XG4gIH0sXG5cbiAgZnJvbUVudHJ5U2VxOiBmdW5jdGlvbiBmcm9tRW50cnlTZXEoKSB7XG4gICAgcmV0dXJuIG5ldyBGcm9tRW50cmllc1NlcXVlbmNlKHRoaXMpO1xuICB9LFxuXG4gIGdldDogZnVuY3Rpb24gZ2V0KHNlYXJjaEtleSwgbm90U2V0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kKGZ1bmN0aW9uIChfLCBrZXkpIHsgcmV0dXJuIGlzKGtleSwgc2VhcmNoS2V5KTsgfSwgdW5kZWZpbmVkLCBub3RTZXRWYWx1ZSk7XG4gIH0sXG5cbiAgZ2V0SW46IGdldEluJDEsXG5cbiAgZ3JvdXBCeTogZnVuY3Rpb24gZ3JvdXBCeShncm91cGVyLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGdyb3VwQnlGYWN0b3J5KHRoaXMsIGdyb3VwZXIsIGNvbnRleHQpO1xuICB9LFxuXG4gIGhhczogZnVuY3Rpb24gaGFzKHNlYXJjaEtleSkge1xuICAgIHJldHVybiB0aGlzLmdldChzZWFyY2hLZXksIE5PVF9TRVQpICE9PSBOT1RfU0VUO1xuICB9LFxuXG4gIGhhc0luOiBoYXNJbiQxLFxuXG4gIGlzU3Vic2V0OiBmdW5jdGlvbiBpc1N1YnNldChpdGVyKSB7XG4gICAgaXRlciA9IHR5cGVvZiBpdGVyLmluY2x1ZGVzID09PSAnZnVuY3Rpb24nID8gaXRlciA6IENvbGxlY3Rpb24oaXRlcik7XG4gICAgcmV0dXJuIHRoaXMuZXZlcnkoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBpdGVyLmluY2x1ZGVzKHZhbHVlKTsgfSk7XG4gIH0sXG5cbiAgaXNTdXBlcnNldDogZnVuY3Rpb24gaXNTdXBlcnNldChpdGVyKSB7XG4gICAgaXRlciA9IHR5cGVvZiBpdGVyLmlzU3Vic2V0ID09PSAnZnVuY3Rpb24nID8gaXRlciA6IENvbGxlY3Rpb24oaXRlcik7XG4gICAgcmV0dXJuIGl0ZXIuaXNTdWJzZXQodGhpcyk7XG4gIH0sXG5cbiAga2V5T2Y6IGZ1bmN0aW9uIGtleU9mKHNlYXJjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZEtleShmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGlzKHZhbHVlLCBzZWFyY2hWYWx1ZSk7IH0pO1xuICB9LFxuXG4gIGtleVNlcTogZnVuY3Rpb24ga2V5U2VxKCkge1xuICAgIHJldHVybiB0aGlzLnRvU2VxKClcbiAgICAgIC5tYXAoa2V5TWFwcGVyKVxuICAgICAgLnRvSW5kZXhlZFNlcSgpO1xuICB9LFxuXG4gIGxhc3Q6IGZ1bmN0aW9uIGxhc3Qobm90U2V0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy50b1NlcSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZmlyc3Qobm90U2V0VmFsdWUpO1xuICB9LFxuXG4gIGxhc3RLZXlPZjogZnVuY3Rpb24gbGFzdEtleU9mKHNlYXJjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudG9LZXllZFNlcSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAua2V5T2Yoc2VhcmNoVmFsdWUpO1xuICB9LFxuXG4gIG1heDogZnVuY3Rpb24gbWF4KGNvbXBhcmF0b3IpIHtcbiAgICByZXR1cm4gbWF4RmFjdG9yeSh0aGlzLCBjb21wYXJhdG9yKTtcbiAgfSxcblxuICBtYXhCeTogZnVuY3Rpb24gbWF4QnkobWFwcGVyLCBjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIG1heEZhY3RvcnkodGhpcywgY29tcGFyYXRvciwgbWFwcGVyKTtcbiAgfSxcblxuICBtaW46IGZ1bmN0aW9uIG1pbihjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIG1heEZhY3RvcnkoXG4gICAgICB0aGlzLFxuICAgICAgY29tcGFyYXRvciA/IG5lZyhjb21wYXJhdG9yKSA6IGRlZmF1bHROZWdDb21wYXJhdG9yXG4gICAgKTtcbiAgfSxcblxuICBtaW5CeTogZnVuY3Rpb24gbWluQnkobWFwcGVyLCBjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIG1heEZhY3RvcnkoXG4gICAgICB0aGlzLFxuICAgICAgY29tcGFyYXRvciA/IG5lZyhjb21wYXJhdG9yKSA6IGRlZmF1bHROZWdDb21wYXJhdG9yLFxuICAgICAgbWFwcGVyXG4gICAgKTtcbiAgfSxcblxuICByZXN0OiBmdW5jdGlvbiByZXN0KCkge1xuICAgIHJldHVybiB0aGlzLnNsaWNlKDEpO1xuICB9LFxuXG4gIHNraXA6IGZ1bmN0aW9uIHNraXAoYW1vdW50KSB7XG4gICAgcmV0dXJuIGFtb3VudCA9PT0gMCA/IHRoaXMgOiB0aGlzLnNsaWNlKE1hdGgubWF4KDAsIGFtb3VudCkpO1xuICB9LFxuXG4gIHNraXBMYXN0OiBmdW5jdGlvbiBza2lwTGFzdChhbW91bnQpIHtcbiAgICByZXR1cm4gYW1vdW50ID09PSAwID8gdGhpcyA6IHRoaXMuc2xpY2UoMCwgLU1hdGgubWF4KDAsIGFtb3VudCkpO1xuICB9LFxuXG4gIHNraXBXaGlsZTogZnVuY3Rpb24gc2tpcFdoaWxlKHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCBza2lwV2hpbGVGYWN0b3J5KHRoaXMsIHByZWRpY2F0ZSwgY29udGV4dCwgdHJ1ZSkpO1xuICB9LFxuXG4gIHNraXBVbnRpbDogZnVuY3Rpb24gc2tpcFVudGlsKHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLnNraXBXaGlsZShub3QocHJlZGljYXRlKSwgY29udGV4dCk7XG4gIH0sXG5cbiAgc29ydEJ5OiBmdW5jdGlvbiBzb3J0QnkobWFwcGVyLCBjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIHJlaWZ5KHRoaXMsIHNvcnRGYWN0b3J5KHRoaXMsIGNvbXBhcmF0b3IsIG1hcHBlcikpO1xuICB9LFxuXG4gIHRha2U6IGZ1bmN0aW9uIHRha2UoYW1vdW50KSB7XG4gICAgcmV0dXJuIHRoaXMuc2xpY2UoMCwgTWF0aC5tYXgoMCwgYW1vdW50KSk7XG4gIH0sXG5cbiAgdGFrZUxhc3Q6IGZ1bmN0aW9uIHRha2VMYXN0KGFtb3VudCkge1xuICAgIHJldHVybiB0aGlzLnNsaWNlKC1NYXRoLm1heCgwLCBhbW91bnQpKTtcbiAgfSxcblxuICB0YWtlV2hpbGU6IGZ1bmN0aW9uIHRha2VXaGlsZShwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gcmVpZnkodGhpcywgdGFrZVdoaWxlRmFjdG9yeSh0aGlzLCBwcmVkaWNhdGUsIGNvbnRleHQpKTtcbiAgfSxcblxuICB0YWtlVW50aWw6IGZ1bmN0aW9uIHRha2VVbnRpbChwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gdGhpcy50YWtlV2hpbGUobm90KHByZWRpY2F0ZSksIGNvbnRleHQpO1xuICB9LFxuXG4gIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGZuKSB7XG4gICAgcmV0dXJuIGZuKHRoaXMpO1xuICB9LFxuXG4gIHZhbHVlU2VxOiBmdW5jdGlvbiB2YWx1ZVNlcSgpIHtcbiAgICByZXR1cm4gdGhpcy50b0luZGV4ZWRTZXEoKTtcbiAgfSxcblxuICAvLyAjIyMgSGFzaGFibGUgT2JqZWN0XG5cbiAgaGFzaENvZGU6IGZ1bmN0aW9uIGhhc2hDb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9faGFzaCB8fCAodGhpcy5fX2hhc2ggPSBoYXNoQ29sbGVjdGlvbih0aGlzKSk7XG4gIH0sXG5cbiAgLy8gIyMjIEludGVybmFsXG5cbiAgLy8gYWJzdHJhY3QgX19pdGVyYXRlKGZuLCByZXZlcnNlKVxuXG4gIC8vIGFic3RyYWN0IF9faXRlcmF0b3IodHlwZSwgcmV2ZXJzZSlcbn0pO1xuXG52YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24ucHJvdG90eXBlO1xuQ29sbGVjdGlvblByb3RvdHlwZVtJU19DT0xMRUNUSU9OX1NZTUJPTF0gPSB0cnVlO1xuQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl9TWU1CT0xdID0gQ29sbGVjdGlvblByb3RvdHlwZS52YWx1ZXM7XG5Db2xsZWN0aW9uUHJvdG90eXBlLnRvSlNPTiA9IENvbGxlY3Rpb25Qcm90b3R5cGUudG9BcnJheTtcbkNvbGxlY3Rpb25Qcm90b3R5cGUuX190b1N0cmluZ01hcHBlciA9IHF1b3RlU3RyaW5nO1xuQ29sbGVjdGlvblByb3RvdHlwZS5pbnNwZWN0ID0gQ29sbGVjdGlvblByb3RvdHlwZS50b1NvdXJjZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50b1N0cmluZygpO1xufTtcbkNvbGxlY3Rpb25Qcm90b3R5cGUuY2hhaW4gPSBDb2xsZWN0aW9uUHJvdG90eXBlLmZsYXRNYXA7XG5Db2xsZWN0aW9uUHJvdG90eXBlLmNvbnRhaW5zID0gQ29sbGVjdGlvblByb3RvdHlwZS5pbmNsdWRlcztcblxubWl4aW4oS2V5ZWRDb2xsZWN0aW9uLCB7XG4gIC8vICMjIyBNb3JlIHNlcXVlbnRpYWwgbWV0aG9kc1xuXG4gIGZsaXA6IGZ1bmN0aW9uIGZsaXAoKSB7XG4gICAgcmV0dXJuIHJlaWZ5KHRoaXMsIGZsaXBGYWN0b3J5KHRoaXMpKTtcbiAgfSxcblxuICBtYXBFbnRyaWVzOiBmdW5jdGlvbiBtYXBFbnRyaWVzKG1hcHBlciwgY29udGV4dCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIHJldHVybiByZWlmeShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnRvU2VxKClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodiwgaykgeyByZXR1cm4gbWFwcGVyLmNhbGwoY29udGV4dCwgW2ssIHZdLCBpdGVyYXRpb25zKyssIHRoaXMkMSk7IH0pXG4gICAgICAgIC5mcm9tRW50cnlTZXEoKVxuICAgICk7XG4gIH0sXG5cbiAgbWFwS2V5czogZnVuY3Rpb24gbWFwS2V5cyhtYXBwZXIsIGNvbnRleHQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHJldHVybiByZWlmeShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnRvU2VxKClcbiAgICAgICAgLmZsaXAoKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChrLCB2KSB7IHJldHVybiBtYXBwZXIuY2FsbChjb250ZXh0LCBrLCB2LCB0aGlzJDEpOyB9KVxuICAgICAgICAuZmxpcCgpXG4gICAgKTtcbiAgfSxcbn0pO1xuXG52YXIgS2V5ZWRDb2xsZWN0aW9uUHJvdG90eXBlID0gS2V5ZWRDb2xsZWN0aW9uLnByb3RvdHlwZTtcbktleWVkQ29sbGVjdGlvblByb3RvdHlwZVtJU19LRVlFRF9TWU1CT0xdID0gdHJ1ZTtcbktleWVkQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl9TWU1CT0xdID0gQ29sbGVjdGlvblByb3RvdHlwZS5lbnRyaWVzO1xuS2V5ZWRDb2xsZWN0aW9uUHJvdG90eXBlLnRvSlNPTiA9IHRvT2JqZWN0O1xuS2V5ZWRDb2xsZWN0aW9uUHJvdG90eXBlLl9fdG9TdHJpbmdNYXBwZXIgPSBmdW5jdGlvbiAodiwgaykgeyByZXR1cm4gcXVvdGVTdHJpbmcoaykgKyAnOiAnICsgcXVvdGVTdHJpbmcodik7IH07XG5cbm1peGluKEluZGV4ZWRDb2xsZWN0aW9uLCB7XG4gIC8vICMjIyBDb252ZXJzaW9uIHRvIG90aGVyIHR5cGVzXG5cbiAgdG9LZXllZFNlcTogZnVuY3Rpb24gdG9LZXllZFNlcSgpIHtcbiAgICByZXR1cm4gbmV3IFRvS2V5ZWRTZXF1ZW5jZSh0aGlzLCBmYWxzZSk7XG4gIH0sXG5cbiAgLy8gIyMjIEVTNiBDb2xsZWN0aW9uIG1ldGhvZHMgKEVTNiBBcnJheSBhbmQgTWFwKVxuXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCBmaWx0ZXJGYWN0b3J5KHRoaXMsIHByZWRpY2F0ZSwgY29udGV4dCwgZmFsc2UpKTtcbiAgfSxcblxuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgZW50cnkgPSB0aGlzLmZpbmRFbnRyeShwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHJldHVybiBlbnRyeSA/IGVudHJ5WzBdIDogLTE7XG4gIH0sXG5cbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hWYWx1ZSkge1xuICAgIHZhciBrZXkgPSB0aGlzLmtleU9mKHNlYXJjaFZhbHVlKTtcbiAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgPyAtMSA6IGtleTtcbiAgfSxcblxuICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoVmFsdWUpIHtcbiAgICB2YXIga2V5ID0gdGhpcy5sYXN0S2V5T2Yoc2VhcmNoVmFsdWUpO1xuICAgIHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/IC0xIDoga2V5O1xuICB9LFxuXG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgcmV0dXJuIHJlaWZ5KHRoaXMsIHJldmVyc2VGYWN0b3J5KHRoaXMsIGZhbHNlKSk7XG4gIH0sXG5cbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKGJlZ2luLCBlbmQpIHtcbiAgICByZXR1cm4gcmVpZnkodGhpcywgc2xpY2VGYWN0b3J5KHRoaXMsIGJlZ2luLCBlbmQsIGZhbHNlKSk7XG4gIH0sXG5cbiAgc3BsaWNlOiBmdW5jdGlvbiBzcGxpY2UoaW5kZXgsIHJlbW92ZU51bSAvKiwgLi4udmFsdWVzKi8pIHtcbiAgICB2YXIgbnVtQXJncyA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmVtb3ZlTnVtID0gTWF0aC5tYXgocmVtb3ZlTnVtIHx8IDAsIDApO1xuICAgIGlmIChudW1BcmdzID09PSAwIHx8IChudW1BcmdzID09PSAyICYmICFyZW1vdmVOdW0pKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gSWYgaW5kZXggaXMgbmVnYXRpdmUsIGl0IHNob3VsZCByZXNvbHZlIHJlbGF0aXZlIHRvIHRoZSBzaXplIG9mIHRoZVxuICAgIC8vIGNvbGxlY3Rpb24uIEhvd2V2ZXIgc2l6ZSBtYXkgYmUgZXhwZW5zaXZlIHRvIGNvbXB1dGUgaWYgbm90IGNhY2hlZCwgc29cbiAgICAvLyBvbmx5IGNhbGwgY291bnQoKSBpZiB0aGUgbnVtYmVyIGlzIGluIGZhY3QgbmVnYXRpdmUuXG4gICAgaW5kZXggPSByZXNvbHZlQmVnaW4oaW5kZXgsIGluZGV4IDwgMCA/IHRoaXMuY291bnQoKSA6IHRoaXMuc2l6ZSk7XG4gICAgdmFyIHNwbGljZWQgPSB0aGlzLnNsaWNlKDAsIGluZGV4KTtcbiAgICByZXR1cm4gcmVpZnkoXG4gICAgICB0aGlzLFxuICAgICAgbnVtQXJncyA9PT0gMVxuICAgICAgICA/IHNwbGljZWRcbiAgICAgICAgOiBzcGxpY2VkLmNvbmNhdChhcnJDb3B5KGFyZ3VtZW50cywgMiksIHRoaXMuc2xpY2UoaW5kZXggKyByZW1vdmVOdW0pKVxuICAgICk7XG4gIH0sXG5cbiAgLy8gIyMjIE1vcmUgY29sbGVjdGlvbiBtZXRob2RzXG5cbiAgZmluZExhc3RJbmRleDogZnVuY3Rpb24gZmluZExhc3RJbmRleChwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgZW50cnkgPSB0aGlzLmZpbmRMYXN0RW50cnkocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gZW50cnkgPyBlbnRyeVswXSA6IC0xO1xuICB9LFxuXG4gIGZpcnN0OiBmdW5jdGlvbiBmaXJzdChub3RTZXRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmdldCgwLCBub3RTZXRWYWx1ZSk7XG4gIH0sXG5cbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbihkZXB0aCkge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCBmbGF0dGVuRmFjdG9yeSh0aGlzLCBkZXB0aCwgZmFsc2UpKTtcbiAgfSxcblxuICBnZXQ6IGZ1bmN0aW9uIGdldChpbmRleCwgbm90U2V0VmFsdWUpIHtcbiAgICBpbmRleCA9IHdyYXBJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgcmV0dXJuIGluZGV4IDwgMCB8fFxuICAgICAgKHRoaXMuc2l6ZSA9PT0gSW5maW5pdHkgfHwgKHRoaXMuc2l6ZSAhPT0gdW5kZWZpbmVkICYmIGluZGV4ID4gdGhpcy5zaXplKSlcbiAgICAgID8gbm90U2V0VmFsdWVcbiAgICAgIDogdGhpcy5maW5kKGZ1bmN0aW9uIChfLCBrZXkpIHsgcmV0dXJuIGtleSA9PT0gaW5kZXg7IH0sIHVuZGVmaW5lZCwgbm90U2V0VmFsdWUpO1xuICB9LFxuXG4gIGhhczogZnVuY3Rpb24gaGFzKGluZGV4KSB7XG4gICAgaW5kZXggPSB3cmFwSW5kZXgodGhpcywgaW5kZXgpO1xuICAgIHJldHVybiAoXG4gICAgICBpbmRleCA+PSAwICYmXG4gICAgICAodGhpcy5zaXplICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB0aGlzLnNpemUgPT09IEluZmluaXR5IHx8IGluZGV4IDwgdGhpcy5zaXplXG4gICAgICAgIDogdGhpcy5pbmRleE9mKGluZGV4KSAhPT0gLTEpXG4gICAgKTtcbiAgfSxcblxuICBpbnRlcnBvc2U6IGZ1bmN0aW9uIGludGVycG9zZShzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gcmVpZnkodGhpcywgaW50ZXJwb3NlRmFjdG9yeSh0aGlzLCBzZXBhcmF0b3IpKTtcbiAgfSxcblxuICBpbnRlcmxlYXZlOiBmdW5jdGlvbiBpbnRlcmxlYXZlKC8qLi4uY29sbGVjdGlvbnMqLykge1xuICAgIHZhciBjb2xsZWN0aW9ucyA9IFt0aGlzXS5jb25jYXQoYXJyQ29weShhcmd1bWVudHMpKTtcbiAgICB2YXIgemlwcGVkID0gemlwV2l0aEZhY3RvcnkodGhpcy50b1NlcSgpLCBJbmRleGVkU2VxLm9mLCBjb2xsZWN0aW9ucyk7XG4gICAgdmFyIGludGVybGVhdmVkID0gemlwcGVkLmZsYXR0ZW4odHJ1ZSk7XG4gICAgaWYgKHppcHBlZC5zaXplKSB7XG4gICAgICBpbnRlcmxlYXZlZC5zaXplID0gemlwcGVkLnNpemUgKiBjb2xsZWN0aW9ucy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiByZWlmeSh0aGlzLCBpbnRlcmxlYXZlZCk7XG4gIH0sXG5cbiAga2V5U2VxOiBmdW5jdGlvbiBrZXlTZXEoKSB7XG4gICAgcmV0dXJuIFJhbmdlKDAsIHRoaXMuc2l6ZSk7XG4gIH0sXG5cbiAgbGFzdDogZnVuY3Rpb24gbGFzdChub3RTZXRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmdldCgtMSwgbm90U2V0VmFsdWUpO1xuICB9LFxuXG4gIHNraXBXaGlsZTogZnVuY3Rpb24gc2tpcFdoaWxlKHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCBza2lwV2hpbGVGYWN0b3J5KHRoaXMsIHByZWRpY2F0ZSwgY29udGV4dCwgZmFsc2UpKTtcbiAgfSxcblxuICB6aXA6IGZ1bmN0aW9uIHppcCgvKiwgLi4uY29sbGVjdGlvbnMgKi8pIHtcbiAgICB2YXIgY29sbGVjdGlvbnMgPSBbdGhpc10uY29uY2F0KGFyckNvcHkoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHJlaWZ5KHRoaXMsIHppcFdpdGhGYWN0b3J5KHRoaXMsIGRlZmF1bHRaaXBwZXIsIGNvbGxlY3Rpb25zKSk7XG4gIH0sXG5cbiAgemlwQWxsOiBmdW5jdGlvbiB6aXBBbGwoLyosIC4uLmNvbGxlY3Rpb25zICovKSB7XG4gICAgdmFyIGNvbGxlY3Rpb25zID0gW3RoaXNdLmNvbmNhdChhcnJDb3B5KGFyZ3VtZW50cykpO1xuICAgIHJldHVybiByZWlmeSh0aGlzLCB6aXBXaXRoRmFjdG9yeSh0aGlzLCBkZWZhdWx0WmlwcGVyLCBjb2xsZWN0aW9ucywgdHJ1ZSkpO1xuICB9LFxuXG4gIHppcFdpdGg6IGZ1bmN0aW9uIHppcFdpdGgoemlwcGVyIC8qLCAuLi5jb2xsZWN0aW9ucyAqLykge1xuICAgIHZhciBjb2xsZWN0aW9ucyA9IGFyckNvcHkoYXJndW1lbnRzKTtcbiAgICBjb2xsZWN0aW9uc1swXSA9IHRoaXM7XG4gICAgcmV0dXJuIHJlaWZ5KHRoaXMsIHppcFdpdGhGYWN0b3J5KHRoaXMsIHppcHBlciwgY29sbGVjdGlvbnMpKTtcbiAgfSxcbn0pO1xuXG52YXIgSW5kZXhlZENvbGxlY3Rpb25Qcm90b3R5cGUgPSBJbmRleGVkQ29sbGVjdGlvbi5wcm90b3R5cGU7XG5JbmRleGVkQ29sbGVjdGlvblByb3RvdHlwZVtJU19JTkRFWEVEX1NZTUJPTF0gPSB0cnVlO1xuSW5kZXhlZENvbGxlY3Rpb25Qcm90b3R5cGVbSVNfT1JERVJFRF9TWU1CT0xdID0gdHJ1ZTtcblxubWl4aW4oU2V0Q29sbGVjdGlvbiwge1xuICAvLyAjIyMgRVM2IENvbGxlY3Rpb24gbWV0aG9kcyAoRVM2IEFycmF5IGFuZCBNYXApXG5cbiAgZ2V0OiBmdW5jdGlvbiBnZXQodmFsdWUsIG5vdFNldFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKHZhbHVlKSA/IHZhbHVlIDogbm90U2V0VmFsdWU7XG4gIH0sXG5cbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKHZhbHVlKTtcbiAgfSxcblxuICAvLyAjIyMgTW9yZSBzZXF1ZW50aWFsIG1ldGhvZHNcblxuICBrZXlTZXE6IGZ1bmN0aW9uIGtleVNlcSgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVNlcSgpO1xuICB9LFxufSk7XG5cblNldENvbGxlY3Rpb24ucHJvdG90eXBlLmhhcyA9IENvbGxlY3Rpb25Qcm90b3R5cGUuaW5jbHVkZXM7XG5TZXRDb2xsZWN0aW9uLnByb3RvdHlwZS5jb250YWlucyA9IFNldENvbGxlY3Rpb24ucHJvdG90eXBlLmluY2x1ZGVzO1xuXG4vLyBNaXhpbiBzdWJjbGFzc2VzXG5cbm1peGluKEtleWVkU2VxLCBLZXllZENvbGxlY3Rpb24ucHJvdG90eXBlKTtcbm1peGluKEluZGV4ZWRTZXEsIEluZGV4ZWRDb2xsZWN0aW9uLnByb3RvdHlwZSk7XG5taXhpbihTZXRTZXEsIFNldENvbGxlY3Rpb24ucHJvdG90eXBlKTtcblxuLy8gI3ByYWdtYSBIZWxwZXIgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIHJlZHVjZShjb2xsZWN0aW9uLCByZWR1Y2VyLCByZWR1Y3Rpb24sIGNvbnRleHQsIHVzZUZpcnN0LCByZXZlcnNlKSB7XG4gIGFzc2VydE5vdEluZmluaXRlKGNvbGxlY3Rpb24uc2l6ZSk7XG4gIGNvbGxlY3Rpb24uX19pdGVyYXRlKGZ1bmN0aW9uICh2LCBrLCBjKSB7XG4gICAgaWYgKHVzZUZpcnN0KSB7XG4gICAgICB1c2VGaXJzdCA9IGZhbHNlO1xuICAgICAgcmVkdWN0aW9uID0gdjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVkdWN0aW9uID0gcmVkdWNlci5jYWxsKGNvbnRleHQsIHJlZHVjdGlvbiwgdiwgaywgYyk7XG4gICAgfVxuICB9LCByZXZlcnNlKTtcbiAgcmV0dXJuIHJlZHVjdGlvbjtcbn1cblxuZnVuY3Rpb24ga2V5TWFwcGVyKHYsIGspIHtcbiAgcmV0dXJuIGs7XG59XG5cbmZ1bmN0aW9uIGVudHJ5TWFwcGVyKHYsIGspIHtcbiAgcmV0dXJuIFtrLCB2XTtcbn1cblxuZnVuY3Rpb24gbm90KHByZWRpY2F0ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbmVnKHByZWRpY2F0ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIC1wcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFppcHBlcigpIHtcbiAgcmV0dXJuIGFyckNvcHkoYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdE5lZ0NvbXBhcmF0b3IoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAxIDogYSA+IGIgPyAtMSA6IDA7XG59XG5cbmZ1bmN0aW9uIGhhc2hDb2xsZWN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgaWYgKGNvbGxlY3Rpb24uc2l6ZSA9PT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICB2YXIgb3JkZXJlZCA9IGlzT3JkZXJlZChjb2xsZWN0aW9uKTtcbiAgdmFyIGtleWVkID0gaXNLZXllZChjb2xsZWN0aW9uKTtcbiAgdmFyIGggPSBvcmRlcmVkID8gMSA6IDA7XG4gIHZhciBzaXplID0gY29sbGVjdGlvbi5fX2l0ZXJhdGUoXG4gICAga2V5ZWRcbiAgICAgID8gb3JkZXJlZFxuICAgICAgICA/IGZ1bmN0aW9uICh2LCBrKSB7XG4gICAgICAgICAgICBoID0gKDMxICogaCArIGhhc2hNZXJnZShoYXNoKHYpLCBoYXNoKGspKSkgfCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgOiBmdW5jdGlvbiAodiwgaykge1xuICAgICAgICAgICAgaCA9IChoICsgaGFzaE1lcmdlKGhhc2godiksIGhhc2goaykpKSB8IDA7XG4gICAgICAgICAgfVxuICAgICAgOiBvcmRlcmVkXG4gICAgICAgID8gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIGggPSAoMzEgKiBoICsgaGFzaCh2KSkgfCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgOiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgaCA9IChoICsgaGFzaCh2KSkgfCAwO1xuICAgICAgICAgIH1cbiAgKTtcbiAgcmV0dXJuIG11cm11ckhhc2hPZlNpemUoc2l6ZSwgaCk7XG59XG5cbmZ1bmN0aW9uIG11cm11ckhhc2hPZlNpemUoc2l6ZSwgaCkge1xuICBoID0gaW11bChoLCAweGNjOWUyZDUxKTtcbiAgaCA9IGltdWwoKGggPDwgMTUpIHwgKGggPj4+IC0xNSksIDB4MWI4NzM1OTMpO1xuICBoID0gaW11bCgoaCA8PCAxMykgfCAoaCA+Pj4gLTEzKSwgNSk7XG4gIGggPSAoKGggKyAweGU2NTQ2YjY0KSB8IDApIF4gc2l6ZTtcbiAgaCA9IGltdWwoaCBeIChoID4+PiAxNiksIDB4ODVlYmNhNmIpO1xuICBoID0gaW11bChoIF4gKGggPj4+IDEzKSwgMHhjMmIyYWUzNSk7XG4gIGggPSBzbWkoaCBeIChoID4+PiAxNikpO1xuICByZXR1cm4gaDtcbn1cblxuZnVuY3Rpb24gaGFzaE1lcmdlKGEsIGIpIHtcbiAgcmV0dXJuIChhIF4gKGIgKyAweDllMzc3OWI5ICsgKGEgPDwgNikgKyAoYSA+PiAyKSkpIHwgMDsgLy8gaW50XG59XG5cbnZhciBPcmRlcmVkU2V0ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoU2V0JCQxKSB7XG4gIGZ1bmN0aW9uIE9yZGVyZWRTZXQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgPyBlbXB0eU9yZGVyZWRTZXQoKVxuICAgICAgOiBpc09yZGVyZWRTZXQodmFsdWUpXG4gICAgICAgID8gdmFsdWVcbiAgICAgICAgOiBlbXB0eU9yZGVyZWRTZXQoKS53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChzZXQpIHtcbiAgICAgICAgICAgIHZhciBpdGVyID0gU2V0Q29sbGVjdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICBhc3NlcnROb3RJbmZpbml0ZShpdGVyLnNpemUpO1xuICAgICAgICAgICAgaXRlci5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7IHJldHVybiBzZXQuYWRkKHYpOyB9KTtcbiAgICAgICAgICB9KTtcbiAgfVxuXG4gIGlmICggU2V0JCQxICkgT3JkZXJlZFNldC5fX3Byb3RvX18gPSBTZXQkJDE7XG4gIE9yZGVyZWRTZXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggU2V0JCQxICYmIFNldCQkMS5wcm90b3R5cGUgKTtcbiAgT3JkZXJlZFNldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPcmRlcmVkU2V0O1xuXG4gIE9yZGVyZWRTZXQub2YgPSBmdW5jdGlvbiBvZiAoLyouLi52YWx1ZXMqLykge1xuICAgIHJldHVybiB0aGlzKGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgT3JkZXJlZFNldC5mcm9tS2V5cyA9IGZ1bmN0aW9uIGZyb21LZXlzICh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzKEtleWVkQ29sbGVjdGlvbih2YWx1ZSkua2V5U2VxKCkpO1xuICB9O1xuXG4gIE9yZGVyZWRTZXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLl9fdG9TdHJpbmcoJ09yZGVyZWRTZXQgeycsICd9Jyk7XG4gIH07XG5cbiAgcmV0dXJuIE9yZGVyZWRTZXQ7XG59KFNldCkpO1xuXG5PcmRlcmVkU2V0LmlzT3JkZXJlZFNldCA9IGlzT3JkZXJlZFNldDtcblxudmFyIE9yZGVyZWRTZXRQcm90b3R5cGUgPSBPcmRlcmVkU2V0LnByb3RvdHlwZTtcbk9yZGVyZWRTZXRQcm90b3R5cGVbSVNfT1JERVJFRF9TWU1CT0xdID0gdHJ1ZTtcbk9yZGVyZWRTZXRQcm90b3R5cGUuemlwID0gSW5kZXhlZENvbGxlY3Rpb25Qcm90b3R5cGUuemlwO1xuT3JkZXJlZFNldFByb3RvdHlwZS56aXBXaXRoID0gSW5kZXhlZENvbGxlY3Rpb25Qcm90b3R5cGUuemlwV2l0aDtcblxuT3JkZXJlZFNldFByb3RvdHlwZS5fX2VtcHR5ID0gZW1wdHlPcmRlcmVkU2V0O1xuT3JkZXJlZFNldFByb3RvdHlwZS5fX21ha2UgPSBtYWtlT3JkZXJlZFNldDtcblxuZnVuY3Rpb24gbWFrZU9yZGVyZWRTZXQobWFwLCBvd25lcklEKSB7XG4gIHZhciBzZXQgPSBPYmplY3QuY3JlYXRlKE9yZGVyZWRTZXRQcm90b3R5cGUpO1xuICBzZXQuc2l6ZSA9IG1hcCA/IG1hcC5zaXplIDogMDtcbiAgc2V0Ll9tYXAgPSBtYXA7XG4gIHNldC5fX293bmVySUQgPSBvd25lcklEO1xuICByZXR1cm4gc2V0O1xufVxuXG52YXIgRU1QVFlfT1JERVJFRF9TRVQ7XG5mdW5jdGlvbiBlbXB0eU9yZGVyZWRTZXQoKSB7XG4gIHJldHVybiAoXG4gICAgRU1QVFlfT1JERVJFRF9TRVQgfHwgKEVNUFRZX09SREVSRURfU0VUID0gbWFrZU9yZGVyZWRTZXQoZW1wdHlPcmRlcmVkTWFwKCkpKVxuICApO1xufVxuXG52YXIgUmVjb3JkID0gZnVuY3Rpb24gUmVjb3JkKGRlZmF1bHRWYWx1ZXMsIG5hbWUpIHtcbiAgdmFyIGhhc0luaXRpYWxpemVkO1xuXG4gIHZhciBSZWNvcmRUeXBlID0gZnVuY3Rpb24gUmVjb3JkKHZhbHVlcykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgaWYgKHZhbHVlcyBpbnN0YW5jZW9mIFJlY29yZFR5cGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWNvcmRUeXBlKSkge1xuICAgICAgcmV0dXJuIG5ldyBSZWNvcmRUeXBlKHZhbHVlcyk7XG4gICAgfVxuICAgIGlmICghaGFzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGhhc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGVmYXVsdFZhbHVlcyk7XG4gICAgICB2YXIgaW5kaWNlcyA9IChSZWNvcmRUeXBlUHJvdG90eXBlLl9pbmRpY2VzID0ge30pO1xuICAgICAgLy8gRGVwcmVjYXRlZDogbGVmdCB0byBhdHRlbXB0IG5vdCB0byBicmVhayBhbnkgZXh0ZXJuYWwgY29kZSB3aGljaFxuICAgICAgLy8gcmVsaWVzIG9uIGEgLl9uYW1lIHByb3BlcnR5IGV4aXN0aW5nIG9uIHJlY29yZCBpbnN0YW5jZXMuXG4gICAgICAvLyBVc2UgUmVjb3JkLmdldERlc2NyaXB0aXZlTmFtZSgpIGluc3RlYWRcbiAgICAgIFJlY29yZFR5cGVQcm90b3R5cGUuX25hbWUgPSBuYW1lO1xuICAgICAgUmVjb3JkVHlwZVByb3RvdHlwZS5fa2V5cyA9IGtleXM7XG4gICAgICBSZWNvcmRUeXBlUHJvdG90eXBlLl9kZWZhdWx0VmFsdWVzID0gZGVmYXVsdFZhbHVlcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSBrZXlzW2ldO1xuICAgICAgICBpbmRpY2VzW3Byb3BOYW1lXSA9IGk7XG4gICAgICAgIGlmIChSZWNvcmRUeXBlUHJvdG90eXBlW3Byb3BOYW1lXSkge1xuICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgICAgICB0eXBlb2YgY29uc29sZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FybiAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAnQ2Fubm90IGRlZmluZSAnICtcbiAgICAgICAgICAgICAgICByZWNvcmROYW1lKHRoaXMpICtcbiAgICAgICAgICAgICAgICAnIHdpdGggcHJvcGVydHkgXCInICtcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSArXG4gICAgICAgICAgICAgICAgJ1wiIHNpbmNlIHRoYXQgcHJvcGVydHkgbmFtZSBpcyBwYXJ0IG9mIHRoZSBSZWNvcmQgQVBJLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0UHJvcChSZWNvcmRUeXBlUHJvdG90eXBlLCBwcm9wTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fX293bmVySUQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fdmFsdWVzID0gTGlzdCgpLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24gKGwpIHtcbiAgICAgIGwuc2V0U2l6ZSh0aGlzJDEuX2tleXMubGVuZ3RoKTtcbiAgICAgIEtleWVkQ29sbGVjdGlvbih2YWx1ZXMpLmZvckVhY2goZnVuY3Rpb24gKHYsIGspIHtcbiAgICAgICAgbC5zZXQodGhpcyQxLl9pbmRpY2VzW2tdLCB2ID09PSB0aGlzJDEuX2RlZmF1bHRWYWx1ZXNba10gPyB1bmRlZmluZWQgOiB2KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciBSZWNvcmRUeXBlUHJvdG90eXBlID0gKFJlY29yZFR5cGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShcbiAgICBSZWNvcmRQcm90b3R5cGVcbiAgKSk7XG4gIFJlY29yZFR5cGVQcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWNvcmRUeXBlO1xuXG4gIGlmIChuYW1lKSB7XG4gICAgUmVjb3JkVHlwZS5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gIH1cblxuICByZXR1cm4gUmVjb3JkVHlwZTtcbn07XG5cblJlY29yZC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBzdHIgPSByZWNvcmROYW1lKHRoaXMpICsgJyB7ICc7XG4gIHZhciBrZXlzID0gdGhpcy5fa2V5cztcbiAgdmFyIGs7XG4gIGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgIT09IGw7IGkrKykge1xuICAgIGsgPSBrZXlzW2ldO1xuICAgIHN0ciArPSAoaSA/ICcsICcgOiAnJykgKyBrICsgJzogJyArIHF1b3RlU3RyaW5nKHRoaXMuZ2V0KGspKTtcbiAgfVxuICByZXR1cm4gc3RyICsgJyB9Jztcbn07XG5cblJlY29yZC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChvdGhlcikge1xuICByZXR1cm4gKFxuICAgIHRoaXMgPT09IG90aGVyIHx8XG4gICAgKG90aGVyICYmXG4gICAgICB0aGlzLl9rZXlzID09PSBvdGhlci5fa2V5cyAmJlxuICAgICAgcmVjb3JkU2VxKHRoaXMpLmVxdWFscyhyZWNvcmRTZXEob3RoZXIpKSlcbiAgKTtcbn07XG5cblJlY29yZC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbiBoYXNoQ29kZSAoKSB7XG4gIHJldHVybiByZWNvcmRTZXEodGhpcykuaGFzaENvZGUoKTtcbn07XG5cbi8vIEBwcmFnbWEgQWNjZXNzXG5cblJlY29yZC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChrKSB7XG4gIHJldHVybiB0aGlzLl9pbmRpY2VzLmhhc093blByb3BlcnR5KGspO1xufTtcblxuUmVjb3JkLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGssIG5vdFNldFZhbHVlKSB7XG4gIGlmICghdGhpcy5oYXMoaykpIHtcbiAgICByZXR1cm4gbm90U2V0VmFsdWU7XG4gIH1cbiAgdmFyIGluZGV4ID0gdGhpcy5faW5kaWNlc1trXTtcbiAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWVzLmdldChpbmRleCk7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdGhpcy5fZGVmYXVsdFZhbHVlc1trXSA6IHZhbHVlO1xufTtcblxuLy8gQHByYWdtYSBNb2RpZmljYXRpb25cblxuUmVjb3JkLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBzZXQgKGssIHYpIHtcbiAgaWYgKHRoaXMuaGFzKGspKSB7XG4gICAgdmFyIG5ld1ZhbHVlcyA9IHRoaXMuX3ZhbHVlcy5zZXQoXG4gICAgICB0aGlzLl9pbmRpY2VzW2tdLFxuICAgICAgdiA9PT0gdGhpcy5fZGVmYXVsdFZhbHVlc1trXSA/IHVuZGVmaW5lZCA6IHZcbiAgICApO1xuICAgIGlmIChuZXdWYWx1ZXMgIT09IHRoaXMuX3ZhbHVlcyAmJiAhdGhpcy5fX293bmVySUQpIHtcbiAgICAgIHJldHVybiBtYWtlUmVjb3JkKHRoaXMsIG5ld1ZhbHVlcyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVjb3JkLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUgKGspIHtcbiAgcmV0dXJuIHRoaXMuc2V0KGspO1xufTtcblxuUmVjb3JkLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgdmFyIG5ld1ZhbHVlcyA9IHRoaXMuX3ZhbHVlcy5jbGVhcigpLnNldFNpemUodGhpcy5fa2V5cy5sZW5ndGgpO1xuICByZXR1cm4gdGhpcy5fX293bmVySUQgPyB0aGlzIDogbWFrZVJlY29yZCh0aGlzLCBuZXdWYWx1ZXMpO1xufTtcblxuUmVjb3JkLnByb3RvdHlwZS53YXNBbHRlcmVkID0gZnVuY3Rpb24gd2FzQWx0ZXJlZCAoKSB7XG4gIHJldHVybiB0aGlzLl92YWx1ZXMud2FzQWx0ZXJlZCgpO1xufTtcblxuUmVjb3JkLnByb3RvdHlwZS50b1NlcSA9IGZ1bmN0aW9uIHRvU2VxICgpIHtcbiAgcmV0dXJuIHJlY29yZFNlcSh0aGlzKTtcbn07XG5cblJlY29yZC5wcm90b3R5cGUudG9KUyA9IGZ1bmN0aW9uIHRvSlMkMSAoKSB7XG4gIHJldHVybiB0b0pTKHRoaXMpO1xufTtcblxuUmVjb3JkLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24gZW50cmllcyAoKSB7XG4gIHJldHVybiB0aGlzLl9faXRlcmF0b3IoSVRFUkFURV9FTlRSSUVTKTtcbn07XG5cblJlY29yZC5wcm90b3R5cGUuX19pdGVyYXRvciA9IGZ1bmN0aW9uIF9faXRlcmF0b3IgKHR5cGUsIHJldmVyc2UpIHtcbiAgcmV0dXJuIHJlY29yZFNlcSh0aGlzKS5fX2l0ZXJhdG9yKHR5cGUsIHJldmVyc2UpO1xufTtcblxuUmVjb3JkLnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gIHJldHVybiByZWNvcmRTZXEodGhpcykuX19pdGVyYXRlKGZuLCByZXZlcnNlKTtcbn07XG5cblJlY29yZC5wcm90b3R5cGUuX19lbnN1cmVPd25lciA9IGZ1bmN0aW9uIF9fZW5zdXJlT3duZXIgKG93bmVySUQpIHtcbiAgaWYgKG93bmVySUQgPT09IHRoaXMuX19vd25lcklEKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgdmFyIG5ld1ZhbHVlcyA9IHRoaXMuX3ZhbHVlcy5fX2Vuc3VyZU93bmVyKG93bmVySUQpO1xuICBpZiAoIW93bmVySUQpIHtcbiAgICB0aGlzLl9fb3duZXJJRCA9IG93bmVySUQ7XG4gICAgdGhpcy5fdmFsdWVzID0gbmV3VmFsdWVzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHJldHVybiBtYWtlUmVjb3JkKHRoaXMsIG5ld1ZhbHVlcywgb3duZXJJRCk7XG59O1xuXG5SZWNvcmQuaXNSZWNvcmQgPSBpc1JlY29yZDtcblJlY29yZC5nZXREZXNjcmlwdGl2ZU5hbWUgPSByZWNvcmROYW1lO1xudmFyIFJlY29yZFByb3RvdHlwZSA9IFJlY29yZC5wcm90b3R5cGU7XG5SZWNvcmRQcm90b3R5cGVbSVNfUkVDT1JEX1NZTUJPTF0gPSB0cnVlO1xuUmVjb3JkUHJvdG90eXBlW0RFTEVURV0gPSBSZWNvcmRQcm90b3R5cGUucmVtb3ZlO1xuUmVjb3JkUHJvdG90eXBlLmRlbGV0ZUluID0gUmVjb3JkUHJvdG90eXBlLnJlbW92ZUluID0gZGVsZXRlSW47XG5SZWNvcmRQcm90b3R5cGUuZ2V0SW4gPSBnZXRJbiQxO1xuUmVjb3JkUHJvdG90eXBlLmhhc0luID0gQ29sbGVjdGlvblByb3RvdHlwZS5oYXNJbjtcblJlY29yZFByb3RvdHlwZS5tZXJnZSA9IG1lcmdlO1xuUmVjb3JkUHJvdG90eXBlLm1lcmdlV2l0aCA9IG1lcmdlV2l0aDtcblJlY29yZFByb3RvdHlwZS5tZXJnZUluID0gbWVyZ2VJbjtcblJlY29yZFByb3RvdHlwZS5tZXJnZURlZXAgPSBtZXJnZURlZXAkMTtcblJlY29yZFByb3RvdHlwZS5tZXJnZURlZXBXaXRoID0gbWVyZ2VEZWVwV2l0aCQxO1xuUmVjb3JkUHJvdG90eXBlLm1lcmdlRGVlcEluID0gbWVyZ2VEZWVwSW47XG5SZWNvcmRQcm90b3R5cGUuc2V0SW4gPSBzZXRJbiQxO1xuUmVjb3JkUHJvdG90eXBlLnVwZGF0ZSA9IHVwZGF0ZSQxO1xuUmVjb3JkUHJvdG90eXBlLnVwZGF0ZUluID0gdXBkYXRlSW4kMTtcblJlY29yZFByb3RvdHlwZS53aXRoTXV0YXRpb25zID0gd2l0aE11dGF0aW9ucztcblJlY29yZFByb3RvdHlwZS5hc011dGFibGUgPSBhc011dGFibGU7XG5SZWNvcmRQcm90b3R5cGUuYXNJbW11dGFibGUgPSBhc0ltbXV0YWJsZTtcblJlY29yZFByb3RvdHlwZVtJVEVSQVRPUl9TWU1CT0xdID0gUmVjb3JkUHJvdG90eXBlLmVudHJpZXM7XG5SZWNvcmRQcm90b3R5cGUudG9KU09OID0gUmVjb3JkUHJvdG90eXBlLnRvT2JqZWN0ID1cbiAgQ29sbGVjdGlvblByb3RvdHlwZS50b09iamVjdDtcblJlY29yZFByb3RvdHlwZS5pbnNwZWN0ID0gUmVjb3JkUHJvdG90eXBlLnRvU291cmNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG59O1xuXG5mdW5jdGlvbiBtYWtlUmVjb3JkKGxpa2VSZWNvcmQsIHZhbHVlcywgb3duZXJJRCkge1xuICB2YXIgcmVjb3JkID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobGlrZVJlY29yZCkpO1xuICByZWNvcmQuX3ZhbHVlcyA9IHZhbHVlcztcbiAgcmVjb3JkLl9fb3duZXJJRCA9IG93bmVySUQ7XG4gIHJldHVybiByZWNvcmQ7XG59XG5cbmZ1bmN0aW9uIHJlY29yZE5hbWUocmVjb3JkKSB7XG4gIHJldHVybiByZWNvcmQuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgcmVjb3JkLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ1JlY29yZCc7XG59XG5cbmZ1bmN0aW9uIHJlY29yZFNlcShyZWNvcmQpIHtcbiAgcmV0dXJuIGtleWVkU2VxRnJvbVZhbHVlKHJlY29yZC5fa2V5cy5tYXAoZnVuY3Rpb24gKGspIHsgcmV0dXJuIFtrLCByZWNvcmQuZ2V0KGspXTsgfSkpO1xufVxuXG5mdW5jdGlvbiBzZXRQcm9wKHByb3RvdHlwZSwgbmFtZSkge1xuICB0cnkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsIG5hbWUsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldChuYW1lKTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGludmFyaWFudCh0aGlzLl9fb3duZXJJRCwgJ0Nhbm5vdCBzZXQgb24gYW4gaW1tdXRhYmxlIHJlY29yZC4nKTtcbiAgICAgICAgdGhpcy5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBPYmplY3QuZGVmaW5lUHJvcGVydHkgZmFpbGVkLiBQcm9iYWJseSBJRTguXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbGF6eSBTZXEgb2YgYHZhbHVlYCByZXBlYXRlZCBgdGltZXNgIHRpbWVzLiBXaGVuIGB0aW1lc2AgaXNcbiAqIHVuZGVmaW5lZCwgcmV0dXJucyBhbiBpbmZpbml0ZSBzZXF1ZW5jZSBvZiBgdmFsdWVgLlxuICovXG52YXIgUmVwZWF0ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoSW5kZXhlZFNlcSQkMSkge1xuICBmdW5jdGlvbiBSZXBlYXQodmFsdWUsIHRpbWVzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcGVhdCkpIHtcbiAgICAgIHJldHVybiBuZXcgUmVwZWF0KHZhbHVlLCB0aW1lcyk7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zaXplID0gdGltZXMgPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogTWF0aC5tYXgoMCwgdGltZXMpO1xuICAgIGlmICh0aGlzLnNpemUgPT09IDApIHtcbiAgICAgIGlmIChFTVBUWV9SRVBFQVQpIHtcbiAgICAgICAgcmV0dXJuIEVNUFRZX1JFUEVBVDtcbiAgICAgIH1cbiAgICAgIEVNUFRZX1JFUEVBVCA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgaWYgKCBJbmRleGVkU2VxJCQxICkgUmVwZWF0Ll9fcHJvdG9fXyA9IEluZGV4ZWRTZXEkJDE7XG4gIFJlcGVhdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBJbmRleGVkU2VxJCQxICYmIEluZGV4ZWRTZXEkJDEucHJvdG90eXBlICk7XG4gIFJlcGVhdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZXBlYXQ7XG5cbiAgUmVwZWF0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICBpZiAodGhpcy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1JlcGVhdCBbXSc7XG4gICAgfVxuICAgIHJldHVybiAnUmVwZWF0IFsgJyArIHRoaXMuX3ZhbHVlICsgJyAnICsgdGhpcy5zaXplICsgJyB0aW1lcyBdJztcbiAgfTtcblxuICBSZXBlYXQucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoaW5kZXgsIG5vdFNldFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKGluZGV4KSA/IHRoaXMuX3ZhbHVlIDogbm90U2V0VmFsdWU7XG4gIH07XG5cbiAgUmVwZWF0LnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzIChzZWFyY2hWYWx1ZSkge1xuICAgIHJldHVybiBpcyh0aGlzLl92YWx1ZSwgc2VhcmNoVmFsdWUpO1xuICB9O1xuXG4gIFJlcGVhdC5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuICAgIHZhciBzaXplID0gdGhpcy5zaXplO1xuICAgIHJldHVybiB3aG9sZVNsaWNlKGJlZ2luLCBlbmQsIHNpemUpXG4gICAgICA/IHRoaXNcbiAgICAgIDogbmV3IFJlcGVhdChcbiAgICAgICAgICB0aGlzLl92YWx1ZSxcbiAgICAgICAgICByZXNvbHZlRW5kKGVuZCwgc2l6ZSkgLSByZXNvbHZlQmVnaW4oYmVnaW4sIHNpemUpXG4gICAgICAgICk7XG4gIH07XG5cbiAgUmVwZWF0LnByb3RvdHlwZS5yZXZlcnNlID0gZnVuY3Rpb24gcmV2ZXJzZSAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgUmVwZWF0LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAoc2VhcmNoVmFsdWUpIHtcbiAgICBpZiAoaXModGhpcy5fdmFsdWUsIHNlYXJjaFZhbHVlKSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfTtcblxuICBSZXBlYXQucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHNlYXJjaFZhbHVlKSB7XG4gICAgaWYgKGlzKHRoaXMuX3ZhbHVlLCBzZWFyY2hWYWx1ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemU7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfTtcblxuICBSZXBlYXQucHJvdG90eXBlLl9faXRlcmF0ZSA9IGZ1bmN0aW9uIF9faXRlcmF0ZSAoZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgIT09IHNpemUpIHtcbiAgICAgIGlmIChmbih0aGlzLl92YWx1ZSwgcmV2ZXJzZSA/IHNpemUgLSArK2kgOiBpKyssIHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGk7XG4gIH07XG5cbiAgUmVwZWF0LnByb3RvdHlwZS5fX2l0ZXJhdG9yID0gZnVuY3Rpb24gX19pdGVyYXRvciAodHlwZSwgcmV2ZXJzZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHNpemUgPSB0aGlzLnNpemU7XG4gICAgdmFyIGkgPSAwO1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3IoXG4gICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBpID09PSBzaXplXG4gICAgICAgICAgPyBpdGVyYXRvckRvbmUoKVxuICAgICAgICAgIDogaXRlcmF0b3JWYWx1ZSh0eXBlLCByZXZlcnNlID8gc2l6ZSAtICsraSA6IGkrKywgdGhpcyQxLl92YWx1ZSk7IH1cbiAgICApO1xuICB9O1xuXG4gIFJlcGVhdC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChvdGhlcikge1xuICAgIHJldHVybiBvdGhlciBpbnN0YW5jZW9mIFJlcGVhdFxuICAgICAgPyBpcyh0aGlzLl92YWx1ZSwgb3RoZXIuX3ZhbHVlKVxuICAgICAgOiBkZWVwRXF1YWwob3RoZXIpO1xuICB9O1xuXG4gIHJldHVybiBSZXBlYXQ7XG59KEluZGV4ZWRTZXEpKTtcblxudmFyIEVNUFRZX1JFUEVBVDtcblxuZnVuY3Rpb24gZnJvbUpTKHZhbHVlLCBjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIGZyb21KU1dpdGgoXG4gICAgW10sXG4gICAgY29udmVydGVyIHx8IGRlZmF1bHRDb252ZXJ0ZXIsXG4gICAgdmFsdWUsXG4gICAgJycsXG4gICAgY29udmVydGVyICYmIGNvbnZlcnRlci5sZW5ndGggPiAyID8gW10gOiB1bmRlZmluZWQsXG4gICAgeyAnJzogdmFsdWUgfVxuICApO1xufVxuXG5mdW5jdGlvbiBmcm9tSlNXaXRoKHN0YWNrLCBjb252ZXJ0ZXIsIHZhbHVlLCBrZXksIGtleVBhdGgsIHBhcmVudFZhbHVlKSB7XG4gIHZhciB0b1NlcSA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgPyBJbmRleGVkU2VxXG4gICAgOiBpc1BsYWluT2JqKHZhbHVlKVxuICAgICAgPyBLZXllZFNlcVxuICAgICAgOiBudWxsO1xuICBpZiAodG9TZXEpIHtcbiAgICBpZiAofnN0YWNrLmluZGV4T2YodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSW1tdXRhYmxlJyk7XG4gICAgfVxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuICAgIGtleVBhdGggJiYga2V5ICE9PSAnJyAmJiBrZXlQYXRoLnB1c2goa2V5KTtcbiAgICB2YXIgY29udmVydGVkID0gY29udmVydGVyLmNhbGwoXG4gICAgICBwYXJlbnRWYWx1ZSxcbiAgICAgIGtleSxcbiAgICAgIHRvU2VxKHZhbHVlKS5tYXAoZnVuY3Rpb24gKHYsIGspIHsgcmV0dXJuIGZyb21KU1dpdGgoc3RhY2ssIGNvbnZlcnRlciwgdiwgaywga2V5UGF0aCwgdmFsdWUpOyB9XG4gICAgICApLFxuICAgICAga2V5UGF0aCAmJiBrZXlQYXRoLnNsaWNlKClcbiAgICApO1xuICAgIHN0YWNrLnBvcCgpO1xuICAgIGtleVBhdGggJiYga2V5UGF0aC5wb3AoKTtcbiAgICByZXR1cm4gY29udmVydGVkO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENvbnZlcnRlcihrLCB2KSB7XG4gIHJldHVybiBpc0tleWVkKHYpID8gdi50b01hcCgpIDogdi50b0xpc3QoKTtcbn1cblxudmFyIHZlcnNpb24gPSBcIjQuMC4wLXJjLjExXCI7XG5cbnZhciBJbW11dGFibGUgPSB7XG4gIHZlcnNpb246IHZlcnNpb24sXG5cbiAgQ29sbGVjdGlvbjogQ29sbGVjdGlvbixcbiAgLy8gTm90ZTogSXRlcmFibGUgaXMgZGVwcmVjYXRlZFxuICBJdGVyYWJsZTogQ29sbGVjdGlvbixcblxuICBTZXE6IFNlcSxcbiAgTWFwOiBNYXAsXG4gIE9yZGVyZWRNYXA6IE9yZGVyZWRNYXAsXG4gIExpc3Q6IExpc3QsXG4gIFN0YWNrOiBTdGFjayxcbiAgU2V0OiBTZXQsXG4gIE9yZGVyZWRTZXQ6IE9yZGVyZWRTZXQsXG5cbiAgUmVjb3JkOiBSZWNvcmQsXG4gIFJhbmdlOiBSYW5nZSxcbiAgUmVwZWF0OiBSZXBlYXQsXG5cbiAgaXM6IGlzLFxuICBmcm9tSlM6IGZyb21KUyxcbiAgaGFzaDogaGFzaCxcblxuICBpc0ltbXV0YWJsZTogaXNJbW11dGFibGUsXG4gIGlzQ29sbGVjdGlvbjogaXNDb2xsZWN0aW9uLFxuICBpc0tleWVkOiBpc0tleWVkLFxuICBpc0luZGV4ZWQ6IGlzSW5kZXhlZCxcbiAgaXNBc3NvY2lhdGl2ZTogaXNBc3NvY2lhdGl2ZSxcbiAgaXNPcmRlcmVkOiBpc09yZGVyZWQsXG4gIGlzVmFsdWVPYmplY3Q6IGlzVmFsdWVPYmplY3QsXG4gIGlzU2VxOiBpc1NlcSxcbiAgaXNMaXN0OiBpc0xpc3QsXG4gIGlzTWFwOiBpc01hcCxcbiAgaXNPcmRlcmVkTWFwOiBpc09yZGVyZWRNYXAsXG4gIGlzU3RhY2s6IGlzU3RhY2ssXG4gIGlzU2V0OiBpc1NldCxcbiAgaXNPcmRlcmVkU2V0OiBpc09yZGVyZWRTZXQsXG4gIGlzUmVjb3JkOiBpc1JlY29yZCxcblxuICBnZXQ6IGdldCxcbiAgZ2V0SW46IGdldEluLFxuICBoYXM6IGhhcyxcbiAgaGFzSW46IGhhc0luLFxuICBtZXJnZTogbWVyZ2UkMSxcbiAgbWVyZ2VEZWVwOiBtZXJnZURlZXAsXG4gIG1lcmdlV2l0aDogbWVyZ2VXaXRoJDEsXG4gIG1lcmdlRGVlcFdpdGg6IG1lcmdlRGVlcFdpdGgsXG4gIHJlbW92ZTogcmVtb3ZlLFxuICByZW1vdmVJbjogcmVtb3ZlSW4sXG4gIHNldDogc2V0LFxuICBzZXRJbjogc2V0SW4sXG4gIHVwZGF0ZTogdXBkYXRlLFxuICB1cGRhdGVJbjogdXBkYXRlSW4sXG59O1xuXG4vLyBOb3RlOiBJdGVyYWJsZSBpcyBkZXByZWNhdGVkXG52YXIgSXRlcmFibGUgPSBDb2xsZWN0aW9uO1xuXG5leHBvcnQgZGVmYXVsdCBJbW11dGFibGU7XG5leHBvcnQgeyB2ZXJzaW9uLCBDb2xsZWN0aW9uLCBJdGVyYWJsZSwgU2VxLCBNYXAsIE9yZGVyZWRNYXAsIExpc3QsIFN0YWNrLCBTZXQsIE9yZGVyZWRTZXQsIFJlY29yZCwgUmFuZ2UsIFJlcGVhdCwgaXMsIGZyb21KUywgaGFzaCwgaXNJbW11dGFibGUsIGlzQ29sbGVjdGlvbiwgaXNLZXllZCwgaXNJbmRleGVkLCBpc0Fzc29jaWF0aXZlLCBpc09yZGVyZWQsIGlzVmFsdWVPYmplY3QsIGdldCwgZ2V0SW4sIGhhcywgaGFzSW4sIG1lcmdlJDEgYXMgbWVyZ2UsIG1lcmdlRGVlcCwgbWVyZ2VXaXRoJDEgYXMgbWVyZ2VXaXRoLCBtZXJnZURlZXBXaXRoLCByZW1vdmUsIHJlbW92ZUluLCBzZXQsIHNldEluLCB1cGRhdGUsIHVwZGF0ZUluIH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lbWl6ZSggZm4sIG9wdGlvbnMgKSB7XG5cdHZhciBzaXplID0gMCxcblx0XHRtYXhTaXplLCBoZWFkLCB0YWlsO1xuXG5cdGlmICggb3B0aW9ucyAmJiBvcHRpb25zLm1heFNpemUgKSB7XG5cdFx0bWF4U2l6ZSA9IG9wdGlvbnMubWF4U2l6ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIG1lbW9pemVkKCAvKiAuLi5hcmdzICovICkge1xuXHRcdHZhciBub2RlID0gaGVhZCxcblx0XHRcdGxlbiA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0XHRhcmdzLCBpO1xuXG5cdFx0c2VhcmNoQ2FjaGU6IHdoaWxlICggbm9kZSApIHtcblx0XHRcdC8vIFBlcmZvcm0gYSBzaGFsbG93IGVxdWFsaXR5IHRlc3QgdG8gY29uZmlybSB0aGF0IHdoZXRoZXIgdGhlIG5vZGVcblx0XHRcdC8vIHVuZGVyIHRlc3QgaXMgYSBjYW5kaWRhdGUgZm9yIHRoZSBhcmd1bWVudHMgcGFzc2VkLiBUd28gYXJyYXlzXG5cdFx0XHQvLyBhcmUgc2hhbGxvd2x5IGVxdWFsIGlmIHRoZWlyIGxlbmd0aCBtYXRjaGVzIGFuZCBlYWNoIGVudHJ5IGlzXG5cdFx0XHQvLyBzdHJpY3RseSBlcXVhbCBiZXR3ZWVuIHRoZSB0d28gc2V0cy4gQXZvaWQgYWJzdHJhY3RpbmcgdG8gYVxuXHRcdFx0Ly8gZnVuY3Rpb24gd2hpY2ggY291bGQgaW5jdXIgYW4gYXJndW1lbnRzIGxlYWtpbmcgZGVvcHRpbWl6YXRpb24uXG5cblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgbm9kZSBhcmd1bWVudHMgbWF0Y2ggYXJndW1lbnRzIGxlbmd0aFxuXHRcdFx0aWYgKCBub2RlLmFyZ3MubGVuZ3RoICE9PSBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRub2RlID0gbm9kZS5uZXh0O1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciBub2RlIGFyZ3VtZW50cyBtYXRjaCBhcmd1bWVudHMgdmFsdWVzXG5cdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRpZiAoIG5vZGUuYXJnc1sgaSBdICE9PSBhcmd1bWVudHNbIGkgXSApIHtcblx0XHRcdFx0XHRub2RlID0gbm9kZS5uZXh0O1xuXHRcdFx0XHRcdGNvbnRpbnVlIHNlYXJjaENhY2hlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEF0IHRoaXMgcG9pbnQgd2UgY2FuIGFzc3VtZSB3ZSd2ZSBmb3VuZCBhIG1hdGNoXG5cblx0XHRcdC8vIFN1cmZhY2UgbWF0Y2hlZCBub2RlIHRvIGhlYWQgaWYgbm90IGFscmVhZHlcblx0XHRcdGlmICggbm9kZSAhPT0gaGVhZCApIHtcblx0XHRcdFx0Ly8gQXMgdGFpbCwgc2hpZnQgdG8gcHJldmlvdXMuIE11c3Qgb25seSBzaGlmdCBpZiBub3QgYWxzb1xuXHRcdFx0XHQvLyBoZWFkLCBzaW5jZSBpZiBib3RoIGhlYWQgYW5kIHRhaWwsIHRoZXJlIGlzIG5vIHByZXZpb3VzLlxuXHRcdFx0XHRpZiAoIG5vZGUgPT09IHRhaWwgKSB7XG5cdFx0XHRcdFx0dGFpbCA9IG5vZGUucHJldjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkanVzdCBzaWJsaW5ncyB0byBwb2ludCB0byBlYWNoIG90aGVyLiBJZiBub2RlIHdhcyB0YWlsLFxuXHRcdFx0XHQvLyB0aGlzIGFsc28gaGFuZGxlcyBuZXcgdGFpbCdzIGVtcHR5IGBuZXh0YCBhc3NpZ25tZW50LlxuXHRcdFx0XHRub2RlLnByZXYubmV4dCA9IG5vZGUubmV4dDtcblx0XHRcdFx0aWYgKCBub2RlLm5leHQgKSB7XG5cdFx0XHRcdFx0bm9kZS5uZXh0LnByZXYgPSBub2RlLnByZXY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRub2RlLm5leHQgPSBoZWFkO1xuXHRcdFx0XHRub2RlLnByZXYgPSBudWxsO1xuXHRcdFx0XHRoZWFkLnByZXYgPSBub2RlO1xuXHRcdFx0XHRoZWFkID0gbm9kZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIGltbWVkaWF0ZWx5XG5cdFx0XHRyZXR1cm4gbm9kZS52YWw7XG5cdFx0fVxuXG5cdFx0Ly8gTm8gY2FjaGVkIHZhbHVlIGZvdW5kLiBDb250aW51ZSB0byBpbnNlcnRpb24gcGhhc2U6XG5cblx0XHQvLyBDcmVhdGUgYSBjb3B5IG9mIGFyZ3VtZW50cyAoYXZvaWQgbGVha2luZyBkZW9wdGltaXphdGlvbilcblx0XHRhcmdzID0gbmV3IEFycmF5KCBsZW4gKTtcblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0bm9kZSA9IHtcblx0XHRcdGFyZ3M6IGFyZ3MsXG5cblx0XHRcdC8vIEdlbmVyYXRlIHRoZSByZXN1bHQgZnJvbSBvcmlnaW5hbCBmdW5jdGlvblxuXHRcdFx0dmFsOiBmbi5hcHBseSggbnVsbCwgYXJncyApXG5cdFx0fTtcblxuXHRcdC8vIERvbid0IG5lZWQgdG8gY2hlY2sgd2hldGhlciBub2RlIGlzIGFscmVhZHkgaGVhZCwgc2luY2UgaXQgd291bGRcblx0XHQvLyBoYXZlIGJlZW4gcmV0dXJuZWQgYWJvdmUgYWxyZWFkeSBpZiBpdCB3YXNcblxuXHRcdC8vIFNoaWZ0IGV4aXN0aW5nIGhlYWQgZG93biBsaXN0XG5cdFx0aWYgKCBoZWFkICkge1xuXHRcdFx0aGVhZC5wcmV2ID0gbm9kZTtcblx0XHRcdG5vZGUubmV4dCA9IGhlYWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIElmIG5vIGhlYWQsIGZvbGxvd3MgdGhhdCB0aGVyZSdzIG5vIHRhaWwgKGF0IGluaXRpYWwgb3IgcmVzZXQpXG5cdFx0XHR0YWlsID0gbm9kZTtcblx0XHR9XG5cblx0XHQvLyBUcmltIHRhaWwgaWYgd2UncmUgcmVhY2hlZCBtYXggc2l6ZSBhbmQgYXJlIHBlbmRpbmcgY2FjaGUgaW5zZXJ0aW9uXG5cdFx0aWYgKCBzaXplID09PSBtYXhTaXplICkge1xuXHRcdFx0dGFpbCA9IHRhaWwucHJldjtcblx0XHRcdHRhaWwubmV4dCA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNpemUrKztcblx0XHR9XG5cblx0XHRoZWFkID0gbm9kZTtcblxuXHRcdHJldHVybiBub2RlLnZhbDtcblx0fVxuXG5cdG1lbW9pemVkLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdFx0aGVhZCA9IG51bGw7XG5cdFx0dGFpbCA9IG51bGw7XG5cdFx0c2l6ZSA9IDA7XG5cdH07XG5cblx0aWYgKCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnICkge1xuXHRcdC8vIENhY2hlIGlzIG5vdCBleHBvc2VkIGluIHRoZSBwdWJsaWMgQVBJLCBidXQgdXNlZCBpbiB0ZXN0cyB0byBlbnN1cmVcblx0XHQvLyBleHBlY3RlZCBsaXN0IHByb2dyZXNzaW9uXG5cdFx0bWVtb2l6ZWQuZ2V0Q2FjaGUgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIGhlYWQsIHRhaWwsIHNpemUgXTtcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIG1lbW9pemVkO1xufTtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAocm9vdCwgcGx1cmFsaXplKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlLlxuICAgIG1vZHVsZS5leHBvcnRzID0gcGx1cmFsaXplKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gQU1ELCByZWdpc3RlcnMgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHBsdXJhbGl6ZSgpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsLlxuICAgIHJvb3QucGx1cmFsaXplID0gcGx1cmFsaXplKCk7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgLy8gUnVsZSBzdG9yYWdlIC0gcGx1cmFsaXplIGFuZCBzaW5ndWxhcml6ZSBuZWVkIHRvIGJlIHJ1biBzZXF1ZW50aWFsbHksXG4gIC8vIHdoaWxlIG90aGVyIHJ1bGVzIGNhbiBiZSBvcHRpbWl6ZWQgdXNpbmcgYW4gb2JqZWN0IGZvciBpbnN0YW50IGxvb2t1cHMuXG4gIHZhciBwbHVyYWxSdWxlcyA9IFtdO1xuICB2YXIgc2luZ3VsYXJSdWxlcyA9IFtdO1xuICB2YXIgdW5jb3VudGFibGVzID0ge307XG4gIHZhciBpcnJlZ3VsYXJQbHVyYWxzID0ge307XG4gIHZhciBpcnJlZ3VsYXJTaW5nbGVzID0ge307XG5cbiAgLyoqXG4gICAqIFNhbml0aXplIGEgcGx1cmFsaXphdGlvbiBydWxlIHRvIGEgdXNhYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtICB7KFJlZ0V4cHxzdHJpbmcpfSBydWxlXG4gICAqIEByZXR1cm4ge1JlZ0V4cH1cbiAgICovXG4gIGZ1bmN0aW9uIHNhbml0aXplUnVsZSAocnVsZSkge1xuICAgIGlmICh0eXBlb2YgcnVsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKCdeJyArIHJ1bGUgKyAnJCcsICdpJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICAvKipcbiAgICogUGFzcyBpbiBhIHdvcmQgdG9rZW4gdG8gcHJvZHVjZSBhIGZ1bmN0aW9uIHRoYXQgY2FuIHJlcGxpY2F0ZSB0aGUgY2FzZSBvblxuICAgKiBhbm90aGVyIHdvcmQuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB3b3JkXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB0b2tlblxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc3RvcmVDYXNlICh3b3JkLCB0b2tlbikge1xuICAgIC8vIFRva2VucyBhcmUgYW4gZXhhY3QgbWF0Y2guXG4gICAgaWYgKHdvcmQgPT09IHRva2VuKSByZXR1cm4gdG9rZW47XG5cbiAgICAvLyBMb3dlciBjYXNlZCB3b3Jkcy4gRS5nLiBcImhlbGxvXCIuXG4gICAgaWYgKHdvcmQgPT09IHdvcmQudG9Mb3dlckNhc2UoKSkgcmV0dXJuIHRva2VuLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBVcHBlciBjYXNlZCB3b3Jkcy4gRS5nLiBcIldISVNLWVwiLlxuICAgIGlmICh3b3JkID09PSB3b3JkLnRvVXBwZXJDYXNlKCkpIHJldHVybiB0b2tlbi50b1VwcGVyQ2FzZSgpO1xuXG4gICAgLy8gVGl0bGUgY2FzZWQgd29yZHMuIEUuZy4gXCJUaXRsZVwiLlxuICAgIGlmICh3b3JkWzBdID09PSB3b3JkWzBdLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiB0b2tlbi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRva2VuLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8vIExvd2VyIGNhc2VkIHdvcmRzLiBFLmcuIFwidGVzdFwiLlxuICAgIHJldHVybiB0b2tlbi50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVycG9sYXRlIGEgcmVnZXhwIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtICB7QXJyYXl9ICBhcmdzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIGludGVycG9sYXRlIChzdHIsIGFyZ3MpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcJChcXGR7MSwyfSkvZywgZnVuY3Rpb24gKG1hdGNoLCBpbmRleCkge1xuICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdIHx8ICcnO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSB3b3JkIHVzaW5nIGEgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSB3b3JkXG4gICAqIEBwYXJhbSAge0FycmF5fSAgcnVsZVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiByZXBsYWNlICh3b3JkLCBydWxlKSB7XG4gICAgcmV0dXJuIHdvcmQucmVwbGFjZShydWxlWzBdLCBmdW5jdGlvbiAobWF0Y2gsIGluZGV4KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGUocnVsZVsxXSwgYXJndW1lbnRzKTtcblxuICAgICAgaWYgKG1hdGNoID09PSAnJykge1xuICAgICAgICByZXR1cm4gcmVzdG9yZUNhc2Uod29yZFtpbmRleCAtIDFdLCByZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdG9yZUNhc2UobWF0Y2gsIHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2FuaXRpemUgYSB3b3JkIGJ5IHBhc3NpbmcgaW4gdGhlIHdvcmQgYW5kIHNhbml0aXphdGlvbiBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIHRva2VuXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB3b3JkXG4gICAqIEBwYXJhbSAge0FycmF5fSAgICBydWxlc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBzYW5pdGl6ZVdvcmQgKHRva2VuLCB3b3JkLCBydWxlcykge1xuICAgIC8vIEVtcHR5IHN0cmluZyBvciBkb2Vzbid0IG5lZWQgZml4aW5nLlxuICAgIGlmICghdG9rZW4ubGVuZ3RoIHx8IHVuY291bnRhYmxlcy5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcbiAgICAgIHJldHVybiB3b3JkO1xuICAgIH1cblxuICAgIHZhciBsZW4gPSBydWxlcy5sZW5ndGg7XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHNhbml0aXphdGlvbiBydWxlcyBhbmQgdXNlIHRoZSBmaXJzdCBvbmUgdG8gbWF0Y2guXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICB2YXIgcnVsZSA9IHJ1bGVzW2xlbl07XG5cbiAgICAgIGlmIChydWxlWzBdLnRlc3Qod29yZCkpIHJldHVybiByZXBsYWNlKHdvcmQsIHJ1bGUpO1xuICAgIH1cblxuICAgIHJldHVybiB3b3JkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSB3b3JkIHdpdGggdGhlIHVwZGF0ZWQgd29yZC5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgIHJlcGxhY2VNYXBcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgIGtlZXBNYXBcbiAgICogQHBhcmFtICB7QXJyYXl9ICAgIHJ1bGVzXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZVdvcmQgKHJlcGxhY2VNYXAsIGtlZXBNYXAsIHJ1bGVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh3b3JkKSB7XG4gICAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdG9rZW4gYW5kIGNhc2UgcmVzdG9yYXRpb24gZnVuY3Rpb25zLlxuICAgICAgdmFyIHRva2VuID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAvLyBDaGVjayBhZ2FpbnN0IHRoZSBrZWVwIG9iamVjdCBtYXAuXG4gICAgICBpZiAoa2VlcE1hcC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVDYXNlKHdvcmQsIHRva2VuKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYWdhaW5zdCB0aGUgcmVwbGFjZW1lbnQgbWFwIGZvciBhIGRpcmVjdCB3b3JkIHJlcGxhY2VtZW50LlxuICAgICAgaWYgKHJlcGxhY2VNYXAuaGFzT3duUHJvcGVydHkodG9rZW4pKSB7XG4gICAgICAgIHJldHVybiByZXN0b3JlQ2FzZSh3b3JkLCByZXBsYWNlTWFwW3Rva2VuXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJ1biBhbGwgdGhlIHJ1bGVzIGFnYWluc3QgdGhlIHdvcmQuXG4gICAgICByZXR1cm4gc2FuaXRpemVXb3JkKHRva2VuLCB3b3JkLCBydWxlcyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHdvcmQgaXMgcGFydCBvZiB0aGUgbWFwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2tXb3JkIChyZXBsYWNlTWFwLCBrZWVwTWFwLCBydWxlcywgYm9vbCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAod29yZCkge1xuICAgICAgdmFyIHRva2VuID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAoa2VlcE1hcC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHJlcGxhY2VNYXAuaGFzT3duUHJvcGVydHkodG9rZW4pKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiBzYW5pdGl6ZVdvcmQodG9rZW4sIHRva2VuLCBydWxlcykgPT09IHRva2VuO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUGx1cmFsaXplIG9yIHNpbmd1bGFyaXplIGEgd29yZCBiYXNlZCBvbiB0aGUgcGFzc2VkIGluIGNvdW50LlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICB3b3JkICAgICAgVGhlIHdvcmQgdG8gcGx1cmFsaXplXG4gICAqIEBwYXJhbSAge251bWJlcn0gIGNvdW50ICAgICBIb3cgbWFueSBvZiB0aGUgd29yZCBleGlzdFxuICAgKiBAcGFyYW0gIHtib29sZWFufSBpbmNsdXNpdmUgV2hldGhlciB0byBwcmVmaXggd2l0aCB0aGUgbnVtYmVyIChlLmcuIDMgZHVja3MpXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIHBsdXJhbGl6ZSAod29yZCwgY291bnQsIGluY2x1c2l2ZSkge1xuICAgIHZhciBwbHVyYWxpemVkID0gY291bnQgPT09IDFcbiAgICAgID8gcGx1cmFsaXplLnNpbmd1bGFyKHdvcmQpIDogcGx1cmFsaXplLnBsdXJhbCh3b3JkKTtcblxuICAgIHJldHVybiAoaW5jbHVzaXZlID8gY291bnQgKyAnICcgOiAnJykgKyBwbHVyYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsdXJhbGl6ZSBhIHdvcmQuXG4gICAqXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHBsdXJhbGl6ZS5wbHVyYWwgPSByZXBsYWNlV29yZChcbiAgICBpcnJlZ3VsYXJTaW5nbGVzLCBpcnJlZ3VsYXJQbHVyYWxzLCBwbHVyYWxSdWxlc1xuICApO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHdvcmQgaXMgcGx1cmFsLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBwbHVyYWxpemUuaXNQbHVyYWwgPSBjaGVja1dvcmQoXG4gICAgaXJyZWd1bGFyU2luZ2xlcywgaXJyZWd1bGFyUGx1cmFscywgcGx1cmFsUnVsZXNcbiAgKTtcblxuICAvKipcbiAgICogU2luZ3VsYXJpemUgYSB3b3JkLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBwbHVyYWxpemUuc2luZ3VsYXIgPSByZXBsYWNlV29yZChcbiAgICBpcnJlZ3VsYXJQbHVyYWxzLCBpcnJlZ3VsYXJTaW5nbGVzLCBzaW5ndWxhclJ1bGVzXG4gICk7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgd29yZCBpcyBzaW5ndWxhci5cbiAgICpcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgcGx1cmFsaXplLmlzU2luZ3VsYXIgPSBjaGVja1dvcmQoXG4gICAgaXJyZWd1bGFyUGx1cmFscywgaXJyZWd1bGFyU2luZ2xlcywgc2luZ3VsYXJSdWxlc1xuICApO1xuXG4gIC8qKlxuICAgKiBBZGQgYSBwbHVyYWxpemF0aW9uIHJ1bGUgdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBydWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICByZXBsYWNlbWVudFxuICAgKi9cbiAgcGx1cmFsaXplLmFkZFBsdXJhbFJ1bGUgPSBmdW5jdGlvbiAocnVsZSwgcmVwbGFjZW1lbnQpIHtcbiAgICBwbHVyYWxSdWxlcy5wdXNoKFtzYW5pdGl6ZVJ1bGUocnVsZSksIHJlcGxhY2VtZW50XSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpbmd1bGFyaXphdGlvbiBydWxlIHRvIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcnVsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgcmVwbGFjZW1lbnRcbiAgICovXG4gIHBsdXJhbGl6ZS5hZGRTaW5ndWxhclJ1bGUgPSBmdW5jdGlvbiAocnVsZSwgcmVwbGFjZW1lbnQpIHtcbiAgICBzaW5ndWxhclJ1bGVzLnB1c2goW3Nhbml0aXplUnVsZShydWxlKSwgcmVwbGFjZW1lbnRdKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGFuIHVuY291bnRhYmxlIHdvcmQgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHdvcmRcbiAgICovXG4gIHBsdXJhbGl6ZS5hZGRVbmNvdW50YWJsZVJ1bGUgPSBmdW5jdGlvbiAod29yZCkge1xuICAgIGlmICh0eXBlb2Ygd29yZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHVuY291bnRhYmxlc1t3b3JkLnRvTG93ZXJDYXNlKCldID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZXQgc2luZ3VsYXIgYW5kIHBsdXJhbCByZWZlcmVuY2VzIGZvciB0aGUgd29yZC5cbiAgICBwbHVyYWxpemUuYWRkUGx1cmFsUnVsZSh3b3JkLCAnJDAnKTtcbiAgICBwbHVyYWxpemUuYWRkU2luZ3VsYXJSdWxlKHdvcmQsICckMCcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gaXJyZWd1bGFyIHdvcmQgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpbmdsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGx1cmFsXG4gICAqL1xuICBwbHVyYWxpemUuYWRkSXJyZWd1bGFyUnVsZSA9IGZ1bmN0aW9uIChzaW5nbGUsIHBsdXJhbCkge1xuICAgIHBsdXJhbCA9IHBsdXJhbC50b0xvd2VyQ2FzZSgpO1xuICAgIHNpbmdsZSA9IHNpbmdsZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaXJyZWd1bGFyU2luZ2xlc1tzaW5nbGVdID0gcGx1cmFsO1xuICAgIGlycmVndWxhclBsdXJhbHNbcGx1cmFsXSA9IHNpbmdsZTtcbiAgfTtcblxuICAvKipcbiAgICogSXJyZWd1bGFyIHJ1bGVzLlxuICAgKi9cbiAgW1xuICAgIC8vIFByb25vdW5zLlxuICAgIFsnSScsICd3ZSddLFxuICAgIFsnbWUnLCAndXMnXSxcbiAgICBbJ2hlJywgJ3RoZXknXSxcbiAgICBbJ3NoZScsICd0aGV5J10sXG4gICAgWyd0aGVtJywgJ3RoZW0nXSxcbiAgICBbJ215c2VsZicsICdvdXJzZWx2ZXMnXSxcbiAgICBbJ3lvdXJzZWxmJywgJ3lvdXJzZWx2ZXMnXSxcbiAgICBbJ2l0c2VsZicsICd0aGVtc2VsdmVzJ10sXG4gICAgWydoZXJzZWxmJywgJ3RoZW1zZWx2ZXMnXSxcbiAgICBbJ2hpbXNlbGYnLCAndGhlbXNlbHZlcyddLFxuICAgIFsndGhlbXNlbGYnLCAndGhlbXNlbHZlcyddLFxuICAgIFsnaXMnLCAnYXJlJ10sXG4gICAgWyd3YXMnLCAnd2VyZSddLFxuICAgIFsnaGFzJywgJ2hhdmUnXSxcbiAgICBbJ3RoaXMnLCAndGhlc2UnXSxcbiAgICBbJ3RoYXQnLCAndGhvc2UnXSxcbiAgICAvLyBXb3JkcyBlbmRpbmcgaW4gd2l0aCBhIGNvbnNvbmFudCBhbmQgYG9gLlxuICAgIFsnZWNobycsICdlY2hvZXMnXSxcbiAgICBbJ2RpbmdvJywgJ2RpbmdvZXMnXSxcbiAgICBbJ3ZvbGNhbm8nLCAndm9sY2Fub2VzJ10sXG4gICAgWyd0b3JuYWRvJywgJ3Rvcm5hZG9lcyddLFxuICAgIFsndG9ycGVkbycsICd0b3JwZWRvZXMnXSxcbiAgICAvLyBFbmRzIHdpdGggYHVzYC5cbiAgICBbJ2dlbnVzJywgJ2dlbmVyYSddLFxuICAgIFsndmlzY3VzJywgJ3Zpc2NlcmEnXSxcbiAgICAvLyBFbmRzIHdpdGggYG1hYC5cbiAgICBbJ3N0aWdtYScsICdzdGlnbWF0YSddLFxuICAgIFsnc3RvbWEnLCAnc3RvbWF0YSddLFxuICAgIFsnZG9nbWEnLCAnZG9nbWF0YSddLFxuICAgIFsnbGVtbWEnLCAnbGVtbWF0YSddLFxuICAgIFsnc2NoZW1hJywgJ3NjaGVtYXRhJ10sXG4gICAgWydhbmF0aGVtYScsICdhbmF0aGVtYXRhJ10sXG4gICAgLy8gT3RoZXIgaXJyZWd1bGFyIHJ1bGVzLlxuICAgIFsnb3gnLCAnb3hlbiddLFxuICAgIFsnYXhlJywgJ2F4ZXMnXSxcbiAgICBbJ2RpZScsICdkaWNlJ10sXG4gICAgWyd5ZXMnLCAneWVzZXMnXSxcbiAgICBbJ2Zvb3QnLCAnZmVldCddLFxuICAgIFsnZWF2ZScsICdlYXZlcyddLFxuICAgIFsnZ29vc2UnLCAnZ2Vlc2UnXSxcbiAgICBbJ3Rvb3RoJywgJ3RlZXRoJ10sXG4gICAgWydxdWl6JywgJ3F1aXp6ZXMnXSxcbiAgICBbJ2h1bWFuJywgJ2h1bWFucyddLFxuICAgIFsncHJvb2YnLCAncHJvb2ZzJ10sXG4gICAgWydjYXJ2ZScsICdjYXJ2ZXMnXSxcbiAgICBbJ3ZhbHZlJywgJ3ZhbHZlcyddLFxuICAgIFsnbG9vZXknLCAnbG9vaWVzJ10sXG4gICAgWyd0aGllZicsICd0aGlldmVzJ10sXG4gICAgWydncm9vdmUnLCAnZ3Jvb3ZlcyddLFxuICAgIFsncGlja2F4ZScsICdwaWNrYXhlcyddLFxuICAgIFsncGFzc2VyYnknLCAncGFzc2Vyc2J5J11cbiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZS5hZGRJcnJlZ3VsYXJSdWxlKHJ1bGVbMF0sIHJ1bGVbMV0pO1xuICB9KTtcblxuICAvKipcbiAgICogUGx1cmFsaXphdGlvbiBydWxlcy5cbiAgICovXG4gIFtcbiAgICBbL3M/JC9pLCAncyddLFxuICAgIFsvW15cXHUwMDAwLVxcdTAwN0ZdJC9pLCAnJDAnXSxcbiAgICBbLyhbXmFlaW91XWVzZSkkL2ksICckMSddLFxuICAgIFsvKGF4fHRlc3QpaXMkL2ksICckMWVzJ10sXG4gICAgWy8oYWxpYXN8W15hb3VddXN8dFtsbV1hc3xnYXN8cmlzKSQvaSwgJyQxZXMnXSxcbiAgICBbLyhlW21uXXUpcz8kL2ksICckMXMnXSxcbiAgICBbLyhbXmxdaWFzfFthZWlvdV1sYXN8W2VqenJdYXN8W2l1XWFtKSQvaSwgJyQxJ10sXG4gICAgWy8oYWx1bW58c3lsbGFifHZpcnxyYWRpfG51Y2xlfGZ1bmd8Y2FjdHxzdGltdWx8dGVybWlufGJhY2lsbHxmb2N8dXRlcnxsb2N8c3RyYXQpKD86dXN8aSkkL2ksICckMWknXSxcbiAgICBbLyhhbHVtbnxhbGd8dmVydGVicikoPzphfGFlKSQvaSwgJyQxYWUnXSxcbiAgICBbLyhzZXJhcGh8Y2hlcnViKSg/OmltKT8kL2ksICckMWltJ10sXG4gICAgWy8oaGVyfGF0fGdyKW8kL2ksICckMW9lcyddLFxuICAgIFsvKGFnZW5kfGFkZGVuZHxtaWxsZW5uaXxkYXR8ZXh0cmVtfGJhY3Rlcml8ZGVzaWRlcmF0fHN0cmF0fGNhbmRlbGFicnxlcnJhdHxvdnxzeW1wb3NpfGN1cnJpY3VsfGF1dG9tYXR8cXVvcikoPzphfHVtKSQvaSwgJyQxYSddLFxuICAgIFsvKGFwaGVsaXxoeXBlcmJhdHxwZXJpaGVsaXxhc3luZGV0fG5vdW1lbnxwaGVub21lbnxjcml0ZXJpfG9yZ2FufHByb2xlZ29tZW58aGVkcnxhdXRvbWF0KSg/OmF8b24pJC9pLCAnJDFhJ10sXG4gICAgWy9zaXMkL2ksICdzZXMnXSxcbiAgICBbLyg/Oihrbml8d2l8bGkpZmV8KGFyfGx8ZWF8ZW98b2F8aG9vKWYpJC9pLCAnJDEkMnZlcyddLFxuICAgIFsvKFteYWVpb3V5XXxxdSl5JC9pLCAnJDFpZXMnXSxcbiAgICBbLyhbXmNoXVtpZW9dW2xuXSlleSQvaSwgJyQxaWVzJ10sXG4gICAgWy8oeHxjaHxzc3xzaHx6eikkL2ksICckMWVzJ10sXG4gICAgWy8obWF0cnxjb2R8bXVyfHNpbHx2ZXJ0fGluZHxhcHBlbmQpKD86aXh8ZXgpJC9pLCAnJDFpY2VzJ10sXG4gICAgWy9cXGIoKD86dGl0KT9tfGwpKD86aWNlfG91c2UpJC9pLCAnJDFpY2UnXSxcbiAgICBbLyhwZSkoPzpyc29ufG9wbGUpJC9pLCAnJDFvcGxlJ10sXG4gICAgWy8oY2hpbGQpKD86cmVuKT8kL2ksICckMXJlbiddLFxuICAgIFsvZWF1eCQvaSwgJyQwJ10sXG4gICAgWy9tW2FlXW4kL2ksICdtZW4nXSxcbiAgICBbJ3Rob3UnLCAneW91J11cbiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZS5hZGRQbHVyYWxSdWxlKHJ1bGVbMF0sIHJ1bGVbMV0pO1xuICB9KTtcblxuICAvKipcbiAgICogU2luZ3VsYXJpemF0aW9uIHJ1bGVzLlxuICAgKi9cbiAgW1xuICAgIFsvcyQvaSwgJyddLFxuICAgIFsvKHNzKSQvaSwgJyQxJ10sXG4gICAgWy8od2l8a25pfCg/OmFmdGVyfGhhbGZ8aGlnaHxsb3d8bWlkfG5vbnxuaWdodHxbXlxcd118XilsaSl2ZXMkL2ksICckMWZlJ10sXG4gICAgWy8oYXJ8KD86d298W2FlXSlsfFtlb11bYW9dKXZlcyQvaSwgJyQxZiddLFxuICAgIFsvaWVzJC9pLCAneSddLFxuICAgIFsvXFxiKFtwbF18em9tYnwoPzpuZWNrfGNyb3NzKT90fGNvbGx8ZmFlcnxmb29kfGdlbnxnb29ufGdyb3VwfGxhc3N8dGFsa3xnb2FsfGN1dClpZXMkL2ksICckMWllJ10sXG4gICAgWy9cXGIobW9ufHNtaWwpaWVzJC9pLCAnJDFleSddLFxuICAgIFsvXFxiKCg/OnRpdCk/bXxsKWljZSQvaSwgJyQxb3VzZSddLFxuICAgIFsvKHNlcmFwaHxjaGVydWIpaW0kL2ksICckMSddLFxuICAgIFsvKHh8Y2h8c3N8c2h8enp8dHRvfGdvfGNob3xhbGlhc3xbXmFvdV11c3x0W2xtXWFzfGdhc3woPzpoZXJ8YXR8Z3Ipb3xbYWVpb3VdcmlzKSg/OmVzKT8kL2ksICckMSddLFxuICAgIFsvKGFuYWx5fGRpYWdub3xwYXJlbnRoZXxwcm9nbm98c3lub3B8dGhlfGVtcGhhfGNyaXxuZSkoPzpzaXN8c2VzKSQvaSwgJyQxc2lzJ10sXG4gICAgWy8obW92aWV8dHdlbHZlfGFidXNlfGVbbW5ddSlzJC9pLCAnJDEnXSxcbiAgICBbLyh0ZXN0KSg/OmlzfGVzKSQvaSwgJyQxaXMnXSxcbiAgICBbLyhhbHVtbnxzeWxsYWJ8dmlyfHJhZGl8bnVjbGV8ZnVuZ3xjYWN0fHN0aW11bHx0ZXJtaW58YmFjaWxsfGZvY3x1dGVyfGxvY3xzdHJhdCkoPzp1c3xpKSQvaSwgJyQxdXMnXSxcbiAgICBbLyhhZ2VuZHxhZGRlbmR8bWlsbGVubml8ZGF0fGV4dHJlbXxiYWN0ZXJpfGRlc2lkZXJhdHxzdHJhdHxjYW5kZWxhYnJ8ZXJyYXR8b3Z8c3ltcG9zaXxjdXJyaWN1bHxxdW9yKWEkL2ksICckMXVtJ10sXG4gICAgWy8oYXBoZWxpfGh5cGVyYmF0fHBlcmloZWxpfGFzeW5kZXR8bm91bWVufHBoZW5vbWVufGNyaXRlcml8b3JnYW58cHJvbGVnb21lbnxoZWRyfGF1dG9tYXQpYSQvaSwgJyQxb24nXSxcbiAgICBbLyhhbHVtbnxhbGd8dmVydGVicilhZSQvaSwgJyQxYSddLFxuICAgIFsvKGNvZHxtdXJ8c2lsfHZlcnR8aW5kKWljZXMkL2ksICckMWV4J10sXG4gICAgWy8obWF0cnxhcHBlbmQpaWNlcyQvaSwgJyQxaXgnXSxcbiAgICBbLyhwZSkocnNvbnxvcGxlKSQvaSwgJyQxcnNvbiddLFxuICAgIFsvKGNoaWxkKXJlbiQvaSwgJyQxJ10sXG4gICAgWy8oZWF1KXg/JC9pLCAnJDEnXSxcbiAgICBbL21lbiQvaSwgJ21hbiddXG4gIF0uZm9yRWFjaChmdW5jdGlvbiAocnVsZSkge1xuICAgIHJldHVybiBwbHVyYWxpemUuYWRkU2luZ3VsYXJSdWxlKHJ1bGVbMF0sIHJ1bGVbMV0pO1xuICB9KTtcblxuICAvKipcbiAgICogVW5jb3VudGFibGUgcnVsZXMuXG4gICAqL1xuICBbXG4gICAgLy8gU2luZ3VsYXIgd29yZHMgd2l0aCBubyBwbHVyYWxzLlxuICAgICdhZHVsdGhvb2QnLFxuICAgICdhZHZpY2UnLFxuICAgICdhZ2VuZGEnLFxuICAgICdhaWQnLFxuICAgICdhaXJjcmFmdCcsXG4gICAgJ2FsY29ob2wnLFxuICAgICdhbW1vJyxcbiAgICAnYW5hbHl0aWNzJyxcbiAgICAnYW5pbWUnLFxuICAgICdhdGhsZXRpY3MnLFxuICAgICdhdWRpbycsXG4gICAgJ2Jpc29uJyxcbiAgICAnYmxvb2QnLFxuICAgICdicmVhbScsXG4gICAgJ2J1ZmZhbG8nLFxuICAgICdidXR0ZXInLFxuICAgICdjYXJwJyxcbiAgICAnY2FzaCcsXG4gICAgJ2NoYXNzaXMnLFxuICAgICdjaGVzcycsXG4gICAgJ2Nsb3RoaW5nJyxcbiAgICAnY29kJyxcbiAgICAnY29tbWVyY2UnLFxuICAgICdjb29wZXJhdGlvbicsXG4gICAgJ2NvcnBzJyxcbiAgICAnZGVicmlzJyxcbiAgICAnZGlhYmV0ZXMnLFxuICAgICdkaWdlc3Rpb24nLFxuICAgICdlbGsnLFxuICAgICdlbmVyZ3knLFxuICAgICdlcXVpcG1lbnQnLFxuICAgICdleGNyZXRpb24nLFxuICAgICdleHBlcnRpc2UnLFxuICAgICdmaXJtd2FyZScsXG4gICAgJ2Zsb3VuZGVyJyxcbiAgICAnZnVuJyxcbiAgICAnZ2FsbG93cycsXG4gICAgJ2dhcmJhZ2UnLFxuICAgICdncmFmZml0aScsXG4gICAgJ2hhcmR3YXJlJyxcbiAgICAnaGVhZHF1YXJ0ZXJzJyxcbiAgICAnaGVhbHRoJyxcbiAgICAnaGVycGVzJyxcbiAgICAnaGlnaGppbmtzJyxcbiAgICAnaG9tZXdvcmsnLFxuICAgICdob3VzZXdvcmsnLFxuICAgICdpbmZvcm1hdGlvbicsXG4gICAgJ2plYW5zJyxcbiAgICAnanVzdGljZScsXG4gICAgJ2t1ZG9zJyxcbiAgICAnbGFib3VyJyxcbiAgICAnbGl0ZXJhdHVyZScsXG4gICAgJ21hY2hpbmVyeScsXG4gICAgJ21hY2tlcmVsJyxcbiAgICAnbWFpbCcsXG4gICAgJ21lZGlhJyxcbiAgICAnbWV3cycsXG4gICAgJ21vb3NlJyxcbiAgICAnbXVzaWMnLFxuICAgICdtdWQnLFxuICAgICdtYW5nYScsXG4gICAgJ25ld3MnLFxuICAgICdvbmx5JyxcbiAgICAncGVyc29ubmVsJyxcbiAgICAncGlrZScsXG4gICAgJ3BsYW5rdG9uJyxcbiAgICAncGxpZXJzJyxcbiAgICAncG9saWNlJyxcbiAgICAncG9sbHV0aW9uJyxcbiAgICAncHJlbWlzZXMnLFxuICAgICdyYWluJyxcbiAgICAncmVzZWFyY2gnLFxuICAgICdyaWNlJyxcbiAgICAnc2FsbW9uJyxcbiAgICAnc2Npc3NvcnMnLFxuICAgICdzZXJpZXMnLFxuICAgICdzZXdhZ2UnLFxuICAgICdzaGFtYmxlcycsXG4gICAgJ3NocmltcCcsXG4gICAgJ3NvZnR3YXJlJyxcbiAgICAnc3BlY2llcycsXG4gICAgJ3N0YWZmJyxcbiAgICAnc3dpbmUnLFxuICAgICd0ZW5uaXMnLFxuICAgICd0cmFmZmljJyxcbiAgICAndHJhbnNwb3J0YXRpb24nLFxuICAgICd0cm91dCcsXG4gICAgJ3R1bmEnLFxuICAgICd3ZWFsdGgnLFxuICAgICd3ZWxmYXJlJyxcbiAgICAnd2hpdGluZycsXG4gICAgJ3dpbGRlYmVlc3QnLFxuICAgICd3aWxkbGlmZScsXG4gICAgJ3lvdScsXG4gICAgL3Bva1tlw6ldbW9uJC9pLFxuICAgIC8vIFJlZ2V4ZXMuXG4gICAgL1teYWVpb3VdZXNlJC9pLCAvLyBcImNoaW5lc2VcIiwgXCJqYXBhbmVzZVwiXG4gICAgL2RlZXIkL2ksIC8vIFwiZGVlclwiLCBcInJlaW5kZWVyXCJcbiAgICAvZmlzaCQvaSwgLy8gXCJmaXNoXCIsIFwiYmxvd2Zpc2hcIiwgXCJhbmdlbGZpc2hcIlxuICAgIC9tZWFzbGVzJC9pLFxuICAgIC9vW2l1XXMkL2ksIC8vIFwiY2Fybml2b3JvdXNcIlxuICAgIC9wb3gkL2ksIC8vIFwiY2hpY2twb3hcIiwgXCJzbWFsbHBveFwiXG4gICAgL3NoZWVwJC9pXG4gIF0uZm9yRWFjaChwbHVyYWxpemUuYWRkVW5jb3VudGFibGVSdWxlKTtcblxuICByZXR1cm4gcGx1cmFsaXplO1xufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gIC8qIGdsb2JhbCBTeW1ib2wgKi9cbiAgdmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxuICAgKlxuICAgKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAgICpcbiAgICogICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTtcbiAgICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcbiAgICogICAgICAgLi4uXG4gICAqICAgICB9XG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbWF5YmVJdGVyYWJsZVxuICAgKiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gICAqL1xuICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXG4gICAqIHN1cHBsaWVkIHRvIFJlYWN0IGNvbXBvbmVudHMuIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcbiAgICogICB2YXIgTXlBcnRpY2xlID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICAgcHJvcFR5cGVzOiB7XG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFwiZGVzY3JpcHRpb25cIi5cbiAgICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZyxcbiAgICpcbiAgICogICAgICAgLy8gQSByZXF1aXJlZCBlbnVtIHByb3AgbmFtZWQgXCJjYXRlZ29yeVwiLlxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcHJvcCBuYW1lZCBcImRpYWxvZ1wiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxuICAgKiAgICAgICBkaWFsb2c6IFByb3BzLmluc3RhbmNlT2YoRGlhbG9nKS5pc1JlcXVpcmVkXG4gICAqICAgICB9LFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cbiAgICogICB9KTtcbiAgICpcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxuICAgKlxuICAgKiAgIHR5cGUgOj0gYXJyYXl8Ym9vbHxmdW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0YW5jZU9mKC4uLilcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XG4gICAqXG4gICAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXNcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiAgdmFyIE15TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgcHJvcFR5cGVzOiB7XG4gICAqICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIG9yIFVSSSBwcm9wIG5hbWVkIFwiaHJlZlwiLlxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgKiAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJvcFZhbHVlICE9PSAnc3RyaW5nJyAmJlxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xuICAgKiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgKiAgICAgICAgICAgICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcgaW4gJyArXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgKiAgICAgICAgICApO1xuICAgKiAgICAgICAgfVxuICAgKiAgICAgIH1cbiAgICogICAgfSxcbiAgICogICAgcmVuZGVyOiBmdW5jdGlvbigpIHsuLi59XG4gICAqICB9KTtcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuXG4gIHZhciBBTk9OWU1PVVMgPSAnPDxhbm9ueW1vdXM+Pic7XG5cbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2FycmF5JyksXG4gICAgYm9vbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4nKSxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcbiAgICBudW1iZXI6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdudW1iZXInKSxcbiAgICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdvYmplY3QnKSxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcbiAgICBzeW1ib2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzeW1ib2wnKSxcblxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcbiAgICBhcnJheU9mOiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIsXG4gICAgZWxlbWVudDogY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCksXG4gICAgZWxlbWVudFR5cGU6IGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSxcbiAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXG4gICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlcixcbiAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXG4gICAgZXhhY3Q6IGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIsXG4gIH07XG5cbiAgLyoqXG4gICAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gICAqL1xuICAvKmVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSovXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICAgIHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cbiAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gICAgfVxuICB9XG4gIC8qZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuXG4gIC8qKlxuICAgKiBXZSB1c2UgYW4gRXJyb3ItbGlrZSBvYmplY3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVvcGxlIG1heSBjYWxsXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXG4gICAqIEVycm9ycyBhbnltb3JlLiBXZSBkb24ndCBpbnNwZWN0IHRoZWlyIHN0YWNrIGFueXdheSwgYW5kIGNyZWF0aW5nIHRoZW1cbiAgICogaXMgcHJvaGliaXRpdmVseSBleHBlbnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0ZW4sIHN1Y2ggYXMgd2hhdFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXG4gICAqL1xuICBmdW5jdGlvbiBQcm9wVHlwZUVycm9yKG1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCkgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tXG4gICAgICAvLyBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArICBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhzaGFwZVR5cGVzKSwgbnVsbCwgJyAgJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xuICAgIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gIXByb3BWYWx1ZTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4ocHJvcFZhbHVlKTtcbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcbiAgICAgICAgICB2YXIgc3RlcDtcbiAgICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gcHJvcFZhbHVlLmVudHJpZXMpIHtcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc05vZGUoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNOb2RlKGVudHJ5WzFdKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSB7XG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cbiAgICBpZiAocHJvcFR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBmYWxzeSB2YWx1ZSBjYW4ndCBiZSBhIFN5bWJvbFxuICAgIGlmICghcHJvcFZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCdcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhL1xuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxuICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XG4gICAgfVxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHBvc3RmaXhlZCB0byBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCB0eXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgXCJ1bmRlZmluZWRcIiBvciBcIm9mIHR5cGUgYXJyYXlcIlxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiAnYW4gJyArIHR5cGU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlcztcbiAgUmVhY3RQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBjaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZTtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi44LjZcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlO1xudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHxcbiAgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKTtcbn1cblxuLyoqXG4gKiBGb3JrZWQgZnJvbSBmYmpzL3dhcm5pbmc6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmJqcy9ibG9iL2U2NmJhMjBhZDViZTQzM2ViNTQ0MjNmMmIwOTdkODI5MzI0ZDlkZTYvcGFja2FnZXMvZmJqcy9zcmMvX19mb3Jrc19fL3dhcm5pbmcuanNcbiAqXG4gKiBPbmx5IGNoYW5nZSBpcyB3ZSB1c2UgY29uc29sZS53YXJuIGluc3RlYWQgb2YgY29uc29sZS5lcnJvcixcbiAqIGFuZCBkbyBub3RoaW5nIHdoZW4gJ2NvbnNvbGUnIGlzIG5vdCBzdXBwb3J0ZWQuXG4gKiBUaGlzIHJlYWxseSBzaW1wbGlmaWVzIHRoZSBjb2RlLlxuICogLS0tXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIGxvd1ByaW9yaXR5V2FybmluZyA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIHZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xuXG4gIGxvd1ByaW9yaXR5V2FybmluZyA9IGZ1bmN0aW9uIChjb25kaXRpb24sIGZvcm1hdCkge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgbG93UHJpb3JpdHlXYXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgKyAnbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcuYXBwbHkodW5kZWZpbmVkLCBbZm9ybWF0XS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIGxvd1ByaW9yaXR5V2FybmluZyQxID0gbG93UHJpb3JpdHlXYXJuaW5nO1xuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcblxudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7XG5cbi8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7XG4gICAgICBsb3dQcmlvcml0eVdhcm5pbmckMShmYWxzZSwgJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBMRUFGX0tFWSwgaGFzV2Vha01hcDtcblxuLyoqXG4gKiBBcmJpdHJhcnkgdmFsdWUgdXNlZCBhcyBrZXkgZm9yIHJlZmVyZW5jaW5nIGNhY2hlIG9iamVjdCBpbiBXZWFrTWFwIHRyZWUuXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuTEVBRl9LRVkgPSB7fTtcblxuLyoqXG4gKiBXaGV0aGVyIGVudmlyb25tZW50IHN1cHBvcnRzIFdlYWtNYXAuXG4gKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmhhc1dlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgYXMgdGhlIHNvbGUgZW50cnkgaW4gYW4gYXJyYXkuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byByZXR1cm4uXG4gKlxuICogQHJldHVybiB7QXJyYXl9IFZhbHVlIHJldHVybmVkIGFzIGVudHJ5IGluIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU9mKCB2YWx1ZSApIHtcblx0cmV0dXJuIFsgdmFsdWUgXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvYmplY3QtbGlrZSwgb3IgZmFsc2Ugb3RoZXJ3aXNlLiBBIHZhbHVlXG4gKiBpcyBvYmplY3QtbGlrZSBpZiBpdCBjYW4gc3VwcG9ydCBwcm9wZXJ0eSBhc3NpZ25tZW50LCBlLmcuIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHRlc3QuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YWx1ZSBpcyBvYmplY3QtbGlrZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKCB2YWx1ZSApIHtcblx0cmV0dXJuICEhIHZhbHVlICYmICdvYmplY3QnID09PSB0eXBlb2YgdmFsdWU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBjYWNoZSBvYmplY3QuXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBDYWNoZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIgY2FjaGUgPSB7XG5cdFx0Y2xlYXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y2FjaGUuaGVhZCA9IG51bGw7XG5cdFx0fSxcblx0fTtcblxuXHRyZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGVudHJpZXMgd2l0aGluIHRoZSB0d28gYXJyYXlzIGFyZSBzdHJpY3RseSBlcXVhbCBieVxuICogcmVmZXJlbmNlIGZyb20gYSBzdGFydGluZyBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSAgYSAgICAgICAgIEZpcnN0IGFycmF5LlxuICogQHBhcmFtIHtBcnJheX0gIGIgICAgICAgICBTZWNvbmQgYXJyYXkuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IEluZGV4IGZyb20gd2hpY2ggdG8gc3RhcnQgY29tcGFyaXNvbi5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIGFycmF5cyBhcmUgc2hhbGxvd2x5IGVxdWFsLlxuICovXG5mdW5jdGlvbiBpc1NoYWxsb3dFcXVhbCggYSwgYiwgZnJvbUluZGV4ICkge1xuXHR2YXIgaTtcblxuXHRpZiAoIGEubGVuZ3RoICE9PSBiLmxlbmd0aCApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRmb3IgKCBpID0gZnJvbUluZGV4OyBpIDwgYS5sZW5ndGg7IGkrKyApIHtcblx0XHRpZiAoIGFbIGkgXSAhPT0gYlsgaSBdICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBtZW1vaXplZCBzZWxlY3RvciBmdW5jdGlvbi4gVGhlIGdldERlcGVuZGFudHMgZnVuY3Rpb24gYXJndW1lbnQgaXNcbiAqIGNhbGxlZCBiZWZvcmUgdGhlIG1lbW9pemVkIHNlbGVjdG9yIGFuZCBpcyBleHBlY3RlZCB0byByZXR1cm4gYW4gaW1tdXRhYmxlXG4gKiByZWZlcmVuY2Ugb3IgYXJyYXkgb2YgcmVmZXJlbmNlcyBvbiB3aGljaCB0aGUgc2VsZWN0b3IgZGVwZW5kcyBmb3IgY29tcHV0aW5nXG4gKiBpdHMgb3duIHJldHVybiB2YWx1ZS4gVGhlIG1lbW9pemUgY2FjaGUgaXMgcHJlc2VydmVkIG9ubHkgYXMgbG9uZyBhcyB0aG9zZVxuICogZGVwZW5kYW50IHJlZmVyZW5jZXMgcmVtYWluIHRoZSBzYW1lLiBJZiBnZXREZXBlbmRhbnRzIHJldHVybnMgYSBkaWZmZXJlbnRcbiAqIHJlZmVyZW5jZShzKSwgdGhlIGNhY2hlIGlzIGNsZWFyZWQgYW5kIHRoZSBzZWxlY3RvciB2YWx1ZSByZWdlbmVyYXRlZC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZWxlY3RvciAgICAgIFNlbGVjdG9yIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0RGVwZW5kYW50cyBEZXBlbmRhbnQgZ2V0dGVyIHJldHVybmluZyBhbiBpbW11dGFibGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIG9yIGFycmF5IG9mIHJlZmVyZW5jZSB1c2VkIGluXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlIGJ1c3QgY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gTWVtb2l6ZWQgc2VsZWN0b3IuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCBzZWxlY3RvciwgZ2V0RGVwZW5kYW50cyApIHtcblx0dmFyIHJvb3RDYWNoZSwgZ2V0Q2FjaGU7XG5cblx0Ly8gVXNlIG9iamVjdCBzb3VyY2UgYXMgZGVwZW5kYW50IGlmIGdldHRlciBub3QgcHJvdmlkZWRcblx0aWYgKCAhIGdldERlcGVuZGFudHMgKSB7XG5cdFx0Z2V0RGVwZW5kYW50cyA9IGFycmF5T2Y7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcm9vdCBjYWNoZS4gSWYgV2Vha01hcCBpcyBzdXBwb3J0ZWQsIHRoaXMgaXMgYXNzaWduZWQgdG8gdGhlXG5cdCAqIHJvb3QgV2Vha01hcCBjYWNoZSBzZXQsIG90aGVyd2lzZSBpdCBpcyBhIHNoYXJlZCBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdFxuXHQgKiBjYWNoZSBvYmplY3QuXG5cdCAqXG5cdCAqIEByZXR1cm4geyhXZWFrTWFwfE9iamVjdCl9IFJvb3QgY2FjaGUgb2JqZWN0LlxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0Um9vdENhY2hlKCkge1xuXHRcdHJldHVybiByb290Q2FjaGU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY2FjaGUgZm9yIGEgZ2l2ZW4gZGVwZW5kYW50cyBhcnJheS4gV2hlbiBwb3NzaWJsZSwgYSBXZWFrTWFwXG5cdCAqIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYSB1bmlxdWUgY2FjaGUgZm9yIGVhY2ggc2V0IG9mIGRlcGVuZGFudHMuIFRoaXNcblx0ICogaXMgZmVhc2libGUgZHVlIHRvIHRoZSBuYXR1cmUgb2YgV2Vha01hcCBpbiBhbGxvd2luZyBnYXJiYWdlIGNvbGxlY3Rpb25cblx0ICogdG8gb2NjdXIgb24gZW50cmllcyB3aGVyZSB0aGUga2V5IG9iamVjdCBpcyBubyBsb25nZXIgcmVmZXJlbmNlZC4gU2luY2Vcblx0ICogV2Vha01hcCByZXF1aXJlcyB0aGUga2V5IHRvIGJlIGFuIG9iamVjdCwgdGhpcyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlXG5cdCAqIGRlcGVuZGFudCBpcyBvYmplY3QtbGlrZS4gVGhlIHJvb3QgY2FjaGUgaXMgY3JlYXRlZCBhcyBhIGhpZXJhcmNoeSB3aGVyZVxuXHQgKiBlYWNoIHRvcC1sZXZlbCBrZXkgaXMgdGhlIGZpcnN0IGVudHJ5IGluIGEgZGVwZW5kYW50cyBzZXQsIHRoZSB2YWx1ZSBhXG5cdCAqIFdlYWtNYXAgd2hlcmUgZWFjaCBrZXkgaXMgdGhlIG5leHQgZGVwZW5kYW50LCBhbmQgc28gb24uIFRoaXMgY29udGludWVzXG5cdCAqIHNvIGxvbmcgYXMgdGhlIGRlcGVuZGFudHMgYXJlIG9iamVjdC1saWtlLiBJZiBubyBkZXBlbmRhbnRzIGFyZSBvYmplY3QtXG5cdCAqIGxpa2UsIHRoZW4gdGhlIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIGludm9jYXRpb25zLlxuXHQgKlxuXHQgKiBAc2VlIGlzT2JqZWN0TGlrZVxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5fSBkZXBlbmRhbnRzIFNlbGVjdG9yIGRlcGVuZGFudHMuXG5cdCAqXG5cdCAqIEByZXR1cm4ge09iamVjdH0gQ2FjaGUgb2JqZWN0LlxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0V2Vha01hcENhY2hlKCBkZXBlbmRhbnRzICkge1xuXHRcdHZhciBjYWNoZXMgPSByb290Q2FjaGUsXG5cdFx0XHRpc1VuaXF1ZUJ5RGVwZW5kYW50cyA9IHRydWUsXG5cdFx0XHRpLCBkZXBlbmRhbnQsIG1hcCwgY2FjaGU7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGRlcGVuZGFudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRkZXBlbmRhbnQgPSBkZXBlbmRhbnRzWyBpIF07XG5cblx0XHRcdC8vIENhbiBvbmx5IGNvbXBvc2UgV2Vha01hcCBmcm9tIG9iamVjdC1saWtlIGtleS5cblx0XHRcdGlmICggISBpc09iamVjdExpa2UoIGRlcGVuZGFudCApICkge1xuXHRcdFx0XHRpc1VuaXF1ZUJ5RGVwZW5kYW50cyA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Ly8gRG9lcyBjdXJyZW50IHNlZ21lbnQgb2YgY2FjaGUgYWxyZWFkeSBoYXZlIGEgV2Vha01hcD9cblx0XHRcdGlmICggY2FjaGVzLmhhcyggZGVwZW5kYW50ICkgKSB7XG5cdFx0XHRcdC8vIFRyYXZlcnNlIGludG8gbmVzdGVkIFdlYWtNYXAuXG5cdFx0XHRcdGNhY2hlcyA9IGNhY2hlcy5nZXQoIGRlcGVuZGFudCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQ3JlYXRlLCBzZXQsIGFuZCB0cmF2ZXJzZSBpbnRvIGEgbmV3IG9uZS5cblx0XHRcdFx0bWFwID0gbmV3IFdlYWtNYXAoKTtcblx0XHRcdFx0Y2FjaGVzLnNldCggZGVwZW5kYW50LCBtYXAgKTtcblx0XHRcdFx0Y2FjaGVzID0gbWFwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFdlIHVzZSBhbiBhcmJpdHJhcnkgKGJ1dCBjb25zaXN0ZW50KSBvYmplY3QgYXMga2V5IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0Ly8gaW4gdGhlIFdlYWtNYXAgdG8gc2VydmUgYXMgb3VyIHJ1bm5pbmcgY2FjaGUuXG5cdFx0aWYgKCAhIGNhY2hlcy5oYXMoIExFQUZfS0VZICkgKSB7XG5cdFx0XHRjYWNoZSA9IGNyZWF0ZUNhY2hlKCk7XG5cdFx0XHRjYWNoZS5pc1VuaXF1ZUJ5RGVwZW5kYW50cyA9IGlzVW5pcXVlQnlEZXBlbmRhbnRzO1xuXHRcdFx0Y2FjaGVzLnNldCggTEVBRl9LRVksIGNhY2hlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNhY2hlcy5nZXQoIExFQUZfS0VZICk7XG5cdH1cblxuXHQvLyBBc3NpZ24gY2FjaGUgaGFuZGxlciBieSBhdmFpbGFiaWxpdHkgb2YgV2Vha01hcFxuXHRnZXRDYWNoZSA9IGhhc1dlYWtNYXAgPyBnZXRXZWFrTWFwQ2FjaGUgOiBnZXRSb290Q2FjaGU7XG5cblx0LyoqXG5cdCAqIFJlc2V0cyByb290IG1lbW9pemF0aW9uIGNhY2hlLlxuXHQgKi9cblx0ZnVuY3Rpb24gY2xlYXIoKSB7XG5cdFx0cm9vdENhY2hlID0gaGFzV2Vha01hcCA/IG5ldyBXZWFrTWFwKCkgOiBjcmVhdGVDYWNoZSgpO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL2NoZWNrLXBhcmFtLW5hbWVzXG5cdC8qKlxuXHQgKiBUaGUgYXVnbWVudGVkIHNlbGVjdG9yIGNhbGwsIGNvbnNpZGVyaW5nIGZpcnN0IHdoZXRoZXIgZGVwZW5kYW50cyBoYXZlXG5cdCAqIGNoYW5nZWQgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdW5kZXJseWluZyBtZW1vaXplIGZ1bmN0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gc291cmNlICAgIFNvdXJjZSBvYmplY3QgZm9yIGRlcml2YXRpb24uXG5cdCAqIEBwYXJhbSB7Li4uKn0gICBleHRyYUFyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBzZWxlY3Rvci5cblx0ICpcblx0ICogQHJldHVybiB7Kn0gU2VsZWN0b3IgcmVzdWx0LlxuXHQgKi9cblx0ZnVuY3Rpb24gY2FsbFNlbGVjdG9yKCAvKiBzb3VyY2UsIC4uLmV4dHJhQXJncyAqLyApIHtcblx0XHR2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRcdGNhY2hlLCBub2RlLCBpLCBhcmdzLCBkZXBlbmRhbnRzO1xuXG5cdFx0Ly8gQ3JlYXRlIGNvcHkgb2YgYXJndW1lbnRzIChhdm9pZCBsZWFraW5nIGRlb3B0aW1pemF0aW9uKS5cblx0XHRhcmdzID0gbmV3IEFycmF5KCBsZW4gKTtcblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZGVwZW5kYW50cyA9IGdldERlcGVuZGFudHMuYXBwbHkoIG51bGwsIGFyZ3MgKTtcblx0XHRjYWNoZSA9IGdldENhY2hlKCBkZXBlbmRhbnRzICk7XG5cblx0XHQvLyBJZiBub3QgZ3VhcmFudGVlZCB1bmlxdWVuZXNzIGJ5IGRlcGVuZGFudHMgKHByaW1pdGl2ZSB0eXBlIG9yIGxhY2tcblx0XHQvLyBvZiBXZWFrTWFwIHN1cHBvcnQpLCBzaGFsbG93IGNvbXBhcmUgYWdhaW5zdCBsYXN0IGRlcGVuZGFudHMgYW5kLCBpZlxuXHRcdC8vIHJlZmVyZW5jZXMgaGF2ZSBjaGFuZ2VkLCBkZXN0cm95IGNhY2hlIHRvIHJlY2FsY3VsYXRlIHJlc3VsdC5cblx0XHRpZiAoICEgY2FjaGUuaXNVbmlxdWVCeURlcGVuZGFudHMgKSB7XG5cdFx0XHRpZiAoIGNhY2hlLmxhc3REZXBlbmRhbnRzICYmICEgaXNTaGFsbG93RXF1YWwoIGRlcGVuZGFudHMsIGNhY2hlLmxhc3REZXBlbmRhbnRzLCAwICkgKSB7XG5cdFx0XHRcdGNhY2hlLmNsZWFyKCk7XG5cdFx0XHR9XG5cblx0XHRcdGNhY2hlLmxhc3REZXBlbmRhbnRzID0gZGVwZW5kYW50cztcblx0XHR9XG5cblx0XHRub2RlID0gY2FjaGUuaGVhZDtcblx0XHR3aGlsZSAoIG5vZGUgKSB7XG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIG5vZGUgYXJndW1lbnRzIG1hdGNoIGFyZ3VtZW50c1xuXHRcdFx0aWYgKCAhIGlzU2hhbGxvd0VxdWFsKCBub2RlLmFyZ3MsIGFyZ3MsIDEgKSApIHtcblx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dDtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEF0IHRoaXMgcG9pbnQgd2UgY2FuIGFzc3VtZSB3ZSd2ZSBmb3VuZCBhIG1hdGNoXG5cblx0XHRcdC8vIFN1cmZhY2UgbWF0Y2hlZCBub2RlIHRvIGhlYWQgaWYgbm90IGFscmVhZHlcblx0XHRcdGlmICggbm9kZSAhPT0gY2FjaGUuaGVhZCApIHtcblx0XHRcdFx0Ly8gQWRqdXN0IHNpYmxpbmdzIHRvIHBvaW50IHRvIGVhY2ggb3RoZXIuXG5cdFx0XHRcdG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuXHRcdFx0XHRpZiAoIG5vZGUubmV4dCApIHtcblx0XHRcdFx0XHRub2RlLm5leHQucHJldiA9IG5vZGUucHJldjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG5vZGUubmV4dCA9IGNhY2hlLmhlYWQ7XG5cdFx0XHRcdG5vZGUucHJldiA9IG51bGw7XG5cdFx0XHRcdGNhY2hlLmhlYWQucHJldiA9IG5vZGU7XG5cdFx0XHRcdGNhY2hlLmhlYWQgPSBub2RlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gaW1tZWRpYXRlbHlcblx0XHRcdHJldHVybiBub2RlLnZhbDtcblx0XHR9XG5cblx0XHQvLyBObyBjYWNoZWQgdmFsdWUgZm91bmQuIENvbnRpbnVlIHRvIGluc2VydGlvbiBwaGFzZTpcblxuXHRcdG5vZGUgPSB7XG5cdFx0XHQvLyBHZW5lcmF0ZSB0aGUgcmVzdWx0IGZyb20gb3JpZ2luYWwgZnVuY3Rpb25cblx0XHRcdHZhbDogc2VsZWN0b3IuYXBwbHkoIG51bGwsIGFyZ3MgKSxcblx0XHR9O1xuXG5cdFx0Ly8gQXZvaWQgaW5jbHVkaW5nIHRoZSBzb3VyY2Ugb2JqZWN0IGluIHRoZSBjYWNoZS5cblx0XHRhcmdzWyAwIF0gPSBudWxsO1xuXHRcdG5vZGUuYXJncyA9IGFyZ3M7XG5cblx0XHQvLyBEb24ndCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgbm9kZSBpcyBhbHJlYWR5IGhlYWQsIHNpbmNlIGl0IHdvdWxkXG5cdFx0Ly8gaGF2ZSBiZWVuIHJldHVybmVkIGFib3ZlIGFscmVhZHkgaWYgaXQgd2FzXG5cblx0XHQvLyBTaGlmdCBleGlzdGluZyBoZWFkIGRvd24gbGlzdFxuXHRcdGlmICggY2FjaGUuaGVhZCApIHtcblx0XHRcdGNhY2hlLmhlYWQucHJldiA9IG5vZGU7XG5cdFx0XHRub2RlLm5leHQgPSBjYWNoZS5oZWFkO1xuXHRcdH1cblxuXHRcdGNhY2hlLmhlYWQgPSBub2RlO1xuXG5cdFx0cmV0dXJuIG5vZGUudmFsO1xuXHR9XG5cblx0Y2FsbFNlbGVjdG9yLmdldERlcGVuZGFudHMgPSBnZXREZXBlbmRhbnRzO1xuXHRjYWxsU2VsZWN0b3IuY2xlYXIgPSBjbGVhcjtcblx0Y2xlYXIoKTtcblxuXHRyZXR1cm4gY2FsbFNlbGVjdG9yO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBfX0RFVl9fID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJztcblxudmFyIHdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAoX19ERVZfXykge1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMSA/IGxlbiAtIDEgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAxOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDFdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArXG4gICAgICBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfVxuXG4gIHdhcm5pbmcgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMiA/IGxlbiAtIDIgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAyOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDJdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgICAnbWVzc2FnZSBhcmd1bWVudCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBwcmludFdhcm5pbmcuYXBwbHkobnVsbCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbiIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wicmVnZW5lcmF0b3JSdW50aW1lXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJoZWxwZXJzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcImkxOG5cIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1wibW9kZWxcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmFsaWRhdG9yc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJ2YWx1ZU9iamVjdHNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImFwaUZldGNoXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJkYXRhXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJob29rc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIndwXCJdW1wiaXNTaGFsbG93RXF1YWxcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcInVybFwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJ2ZW5kb3JcIl1bXCJjdWlkXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wibG9kYXNoXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZlbmRvclwiXVtcIm1vbWVudFwiXTsgfSgpKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vYmFzZS1jb250cm9scy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9iYXNlLW1vZGVsLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2Jhc2Utc2VsZWN0b3JzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvYWN0aW9ucy9hY3Rpb24tY3JlYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9hY3Rpb25zL2FjdGlvbi1nZW5lcmF0b3JzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvYWN0aW9ucy9hY3Rpb24tdHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9hY3Rpb25zL2NyZWF0ZS1lbnRpdGllcy1nZW5lcmF0b3JzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvYWN0aW9ucy9jcmVhdGUtcmVsYXRpb25zLWdlbmVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9hY3Rpb25zL2RlbGV0ZS1lbnRpdHktZ2VuZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvZGVsZXRlLXJlbGF0aW9ucy1nZW5lcmF0b3JzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvYWN0aW9ucy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvcGVyc2lzdC1lbnRpdHktZ2VuZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvcGVyc2lzdC1yZWxhdGlvbnMtZ2VuZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvcmVjZWl2ZS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvcmVjZWl2ZS1yZWxhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9hY3Rpb25zL3JlbW92ZS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvcmVtb3ZlLXJlbGF0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL2FjdGlvbnMvcmVzZXQuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL21vZGVsL2NoZWNraW4vYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL21vZGVsL2NoZWNraW4vcmVzb2x2ZXJzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvbW9kZWwvY2hlY2tpbi9zZWxlY3RvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9tb2RlbC9lbnRpdHktYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL21vZGVsL2VudGl0eS1yZXNvbHZlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9tb2RlbC9lbnRpdHktc2VsZWN0b3JzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvbW9kZWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9tb2RlbC9tb2RlbC1hY3Rpb25zLWluZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvbW9kZWwvbW9kZWwtcmVzb2x2ZXJzLWluZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvbW9kZWwvbW9kZWwtc2VsZWN0b3JzLWluZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvbW9kZWwvbW9kZWwtc3BlY2lmaWMtYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL21vZGVsL21vZGVsLXNwZWNpZmljLXNlbGVjdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL21vZGVsL3JlbGF0aW9uLWFjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9tb2RlbC9yZWxhdGlvbi1zZWxlY3RvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9yZWR1Y2Vycy9kaXJ0eS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3JlZHVjZXJzL2RpcnR5LXJlbGF0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3JlZHVjZXJzL2RpcnR5LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvcmVkdWNlcnMvZW50aXRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vY29yZS9yZWR1Y2Vycy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3JlZHVjZXJzL21vZGVsLXNwZWNpZmljLXJlZHVjZXJzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvcmVkdWNlcnMvcmVsYXRpb25zLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvcmVzb2x2ZXJzL2VudGl0aWVzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvcmVzb2x2ZXJzL2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2NvcmUvcmVzb2x2ZXJzL3JlbGF0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3Jlc29sdmVycy91dGlscy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3NlbGVjdG9ycy9lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3NlbGVjdG9ycy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9jb3JlL3NlbGVjdG9ycy9yZWxhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vZmlsdGVyLXN0YXRlL2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2xpc3RzL2FjdGlvbi10eXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9saXN0cy9hY3Rpb25zLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL2xpc3RzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9saXN0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9saXN0cy9tb2RlbC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9saXN0cy9yZWR1Y2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9saXN0cy9yZXNvbHZlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vbGlzdHMvc2VsZWN0b3JzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL3NjaGVtYS9hY3Rpb24tdHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vc2NoZW1hL2FjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vc2NoZW1hL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9zY2hlbWEvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2V2ZW50ZXNwcmVzc28vc2NoZW1hL21vZGVsLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL3NjaGVtYS9yZWR1Y2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvZXZlbnRlc3ByZXNzby9zY2hlbWEvcmVzb2x2ZXJzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9ldmVudGVzcHJlc3NvL3NjaGVtYS9zZWxlY3RvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9hc3NlcnRpb25zLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9hdHRlbmRlZS9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2F0dGVuZGVlL2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9hdHRlbmRlZS9xdWVyeS5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvYmFzZS1kYXRlLWZvcm1hdHRlci5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvY2hlY2tpbi9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2NoZWNraW4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2NoZWNraW4vcXVlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2RhdGV0aW1lL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZGF0ZXRpbWUvZm9ybWF0dGVyLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9kYXRldGltZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZGF0ZXRpbWUvcXVlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2RhdGV0aW1lL3N0YXR1cy1oZWxwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2RlZmF1bHQtbW9kZWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VuZHBvaW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvYXNzZXJ0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvYmFzZS1lbnRpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L2Jvb2xlYW5zLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvZXh0cmFjdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L3ZhbGlkYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2V2ZW50L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZXZlbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2V2ZW50L3F1ZXJ5LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvbW9kZWwtbmFtZXMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL21vZGVscy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvcHJpY2UtdHlwZS9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3ByaWNlLXR5cGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3ByaW1hcnkta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvcmVnaXN0cmF0aW9uL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvcmVnaXN0cmF0aW9uL2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9yZWdpc3RyYXRpb24vcXVlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3N0YXR1cy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3N0YXR1cy9oZWxwZXJzLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9zdGF0dXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3N0YXR1cy9xdWVyeS5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvdGlja2V0L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvdGlja2V0L2luZGV4LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC90aWNrZXQvcXVlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3RpY2tldC9zdGF0dXMtaGVscGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aEhvbGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVJlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ltbXV0YWJsZS9kaXN0L2ltbXV0YWJsZS5lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbWVtaXplL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wbHVyYWxpemUvcGx1cmFsaXplLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVtZW1vL2VzL3JlbWVtby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvd2FybmluZy93YXJuaW5nLmpzIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6XCJyZWdlbmVyYXRvclJ1bnRpbWVcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCJdfSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImhlbHBlcnNcIl19Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwiaTE4blwiXX0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJtb2RlbFwiXX0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2YWxpZGF0b3JzXCJdfSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcInZhbHVlT2JqZWN0c1wiXX0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiYXBpRmV0Y2hcIl19Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImRhdGFcIl19Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImhvb2tzXCJdfSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJpc1NoYWxsb3dFcXVhbFwiXX0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwidXJsXCJdfSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcInZlbmRvclwiLFwiY3VpZFwiXX0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInRoaXNcIjpcImxvZGFzaFwifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcInZlbmRvclwiLFwibW9tZW50XCJdfSJdLCJuYW1lcyI6WyJmZXRjaCIsInJlcXVlc3QiLCJ0eXBlIiwic2VsZWN0IiwicmVkdWNlcktleSIsInNlbGVjdG9yTmFtZSIsImFyZ3MiLCJyZXNvbHZlU2VsZWN0IiwiZGlzcGF0Y2giLCJkaXNwYXRjaE5hbWUiLCJyZXNvbHZlRGlzcGF0Y2giLCJyZXNvbHZlR2V0RW50aXR5QnlJZEZvcklkcyIsIm1vZGVsTmFtZSIsImVudGl0eUlkcyIsInJlc29sdmVHZXRSZWxhdGVkRW50aXRpZXMiLCJlbnRpdHkiLCJyZWxhdGlvbkVudGl0aWVzIiwicmVsYXRpb25JZHMiLCJjb250cm9scyIsIkZFVENIX0ZST01fQVBJIiwiYXBpRmV0Y2giLCJTRUxFQ1QiLCJzZWxlY3REYXRhIiwiRElTUEFUQ0giLCJkaXNwYXRjaERhdGEiLCJSRVNPTFZFX0RJU1BBVENIIiwiUkVTT0xWRV9TRUxFQ1QiLCJQcm9taXNlIiwicmVzb2x2ZSIsImhhc0ZpbmlzaGVkIiwiaGFzRmluaXNoZWRSZXNvbHV0aW9uIiwiZ2V0UmVzdWx0IiwiYXBwbHkiLCJyZXN1bHQiLCJ1bnN1YnNjcmliZSIsInN1YnNjcmliZSIsIlJFU09MVkVfR0VUX0VOVElUWV9CWV9JRF9GT1JfSURTIiwibGVuZ3RoIiwiQ09SRV9SRURVQ0VSX0tFWSIsInBvcCIsIlJFU09MVkVfR0VUX1JFTEFURURfRU5USVRJRVMiLCJyZWxhdGlvbkVudGl0eSIsImdldCIsInBsdXJhbE1vZGVsTmFtZSIsImdldE1ldGhvZE5hbWUiLCJzdWZmaXgiLCJwcmVmaXgiLCJ1c2VQbHVyYWwiLCJwbHVyYWxpemUiLCJ1cHBlckZpcnN0IiwiY2FtZWxDYXNlIiwia2VlcEV4aXN0aW5nRW50aXRpZXNJbk9iamVjdCIsImV4aXN0aW5nRW50aXRpZXMiLCJpbmNvbWluZ0VudGl0aWVzIiwiZ2V0RXhpc3RpbmdPckRlZmF1bHRFbnRpdHkiLCJkZWZhdWx0RW50aXR5IiwiZW50aXR5SWQiLCJpc01hcCIsImhhcyIsInJlZHVjZUNhbGxiYWNrIiwibWFwcGVkIiwibm9ybWFsaXplRW50aXR5SWQiLCJzZXQiLCJtYXBSZWR1Y2VyIiwiTWFwIiwicmVkdWNlIiwib3JpZ2luYWxJZCIsInBhcnNlSW50IiwiaXNOYU4iLCJpc1Jlc29sdmluZyIsImhhc0ZpbmlzaGVkUmVzb2x2aW5nIiwiZW50aXRpZXMiLCJSRUNFSVZFX0VOVElUWV9SRUNPUkRTIiwiUkVDRUlWRV9BTkRfUkVQTEFDRV9FTlRJVFlfUkVDT1JEUyIsIlJFQ0VJVkVfRU5USVRZIiwiUkVNT1ZFX0VOVElUWV9CWV9JRCIsIlJFTU9WRV9ERUxFVEVfRU5USVRZX0lEIiwiUkVNT1ZFX1RSQVNIX0VOVElUWV9JRCIsIlJFQ0VJVkVfVFJBU0hfRU5USVRZX0lEIiwiUkVDRUlWRV9ERUxFVEVfRU5USVRZX0lEIiwicmVsYXRpb25zIiwiUkVNT1ZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OIiwiUkVNT1ZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OIiwiUkVDRUlWRV9SRUxBVEVEX0VOVElUWV9JRFMiLCJSRU1PVkVfUkVMQVRFRF9FTlRJVFlfSURTIiwiUkVNT1ZFX1JFTEFURURfRU5USVRJRVNfRk9SX0VOVElUWSIsIlJFQ0VJVkVfRElSVFlfUkVMQVRJT05fQURESVRJT04iLCJSRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OIiwiUkVDRUlWRV9VUERBVEVEX0VOVElUWV9JRF9GT1JfUkVMQVRJT05TIiwicmVzZXRzIiwiUkVTRVRfQUxMX1NUQVRFIiwiUkVTRVRfU1RBVEVfRk9SX01PREVMIiwiUkVTRVRfQUxMX01PREVMX1NQRUNJRklDIiwiUkVTRVRfTU9ERUxfU1BFQ0lGSUNfRk9SX1NFTEVDVE9SIiwiUkVTRVRfTU9ERUxfU1BFQ0lGSUNfRk9SX1NFTEVDVE9SX0FORF9BUkdTIiwibW9kZWxTcGVjaWZpYyIsIlJFQ0VJVkVfU0VMRUNUT1JfVkFMVUUiLCJBQ1RJT05fVFlQRVMiLCJjcmVhdGVFbnRpdHkiLCJyZWNlaXZlRW50aXR5QW5kUmVzb2x2ZSIsInJlY2VpdmVFbnRpdGllc0FuZFJlc29sdmUiLCJzaW5ndWxhck1vZGVsTmFtZSIsIlNDSEVNQV9SRURVQ0VSX0tFWSIsImZhY3RvcnkiLCJpc01vZGVsRW50aXR5RmFjdG9yeU9mTW9kZWwiLCJlbnRpdHlJbnN0YW5jZSIsImNyZWF0ZU5ldyIsImFzc2VydElzTW9kZWxFbnRpdHkiLCJ0b0xvd2VyQ2FzZSIsImlkIiwibWFwIiwiaXNNb2RlbEVudGl0eSIsIkludmFsaWRNb2RlbEVudGl0eSIsImNyZWF0ZVJlbGF0aW9uIiwiY3JlYXRlUmVsYXRpb25zIiwicmVzb2x2ZVJlbGF0aW9uUmVjb3JkRm9yUmVsYXRpb24iLCJyZWxhdGlvbk5hbWUiLCJpc01vZGVsRW50aXR5T2ZNb2RlbCIsIndhcm5pbmciLCJSRURVQ0VSX0tFWSIsImFzc2VydEFycmF5SGFzRW50aXRpZXNGb3JNb2RlbCIsImdldElkc0Zyb21CYXNlRW50aXR5QXJyYXkiLCJtb2RlbEVudGl0eSIsInJlbGF0aW9uc1RvUmVzb2x2ZSIsIm1vZGVsSWQiLCJoYXNFbnRpdHkiLCJyZWxhdGlvbk1vZGVsTmFtZSIsImRlbGV0ZUVudGl0eUJ5SWQiLCJ0cmFzaEVudGl0eUJ5SWQiLCJyZW1vdmVFbnRpdHlCeUlkIiwicmVtb3ZlQWxsUmVsYXRlZEVudGl0aWVzRm9yTW9kZWxFbnRpdHkiLCJyZWNlaXZlRGVsZXRlRW50aXR5SWQiLCJyZWNlaXZlVHJhc2hFbnRpdHlJZCIsInJlbW92ZURpcnR5UmVsYXRpb25Gb3JBZGRpdGlvbiIsInJlbW92ZVJlbGF0aW9uRm9yRW50aXR5IiwicmVsYXRpb25FbnRpdHlJZCIsInJlbW92ZURpcnR5UmVsYXRpb25BZGRpdGlvbiIsInJlbW92ZVJlbGF0ZWRFbnRpdGllcyIsInJlY2VpdmVEaXJ0eVJlbGF0aW9uRGVsZXRpb24iLCJwZXJzaXN0RW50aXR5UmVjb3JkIiwicGVyc2lzdEZvckVudGl0eUlkIiwicGVyc2lzdEZvckVudGl0eUlkcyIsInBlcnNpc3REZWxldGVzRm9yTW9kZWwiLCJwZXJzaXN0VHJhc2hlc0Zvck1vZGVsIiwicGVyc2lzdEFsbERlbGV0ZXMiLCJERUZBVUxUX0VNUFRZX09CSkVDVCIsIkRFRkFVTFRfRU1QVFlfQVJSQVkiLCJpc0NsZWFuIiwicGF0aCIsImFwcGx5UXVlcnlTdHJpbmciLCJpc05ldyIsIm1ldGhvZCIsImRhdGEiLCJmb3JQZXJzaXN0IiwidXBkYXRlZEVudGl0eSIsImlzRW1wdHkiLCJ1cGRhdGVkRW50aXR5UmVjb3JkIiwiZnJvbUV4aXN0aW5nIiwibmV3SWQiLCJyZWNlaXZlVXBkYXRlZEVudGl0eUlkRm9yUmVsYXRpb25zIiwicmVjZWl2ZUFuZFJlcGxhY2VFbnRpdHlSZWNvcmRzIiwicGVyc2lzdGVkRW50aXR5IiwicmV0cmlldmVkRW50aXRpZXMiLCJpc0FycmF5Iiwia2V5RW50aXRpZXNCeVByaW1hcnlLZXlWYWx1ZSIsInJldHJpZXZlZElkcyIsIkFycmF5IiwiZnJvbSIsImtleXMiLCJwZXJzaXN0ZWRFbnRpdGllcyIsImRlbGV0ZWRJZHMiLCJmb3JjZSIsInJlc3BvbnNlIiwiZGVsZXRlZCIsInB1c2giLCJyZW1vdmVEZWxldGVFbnRpdHlJZCIsInRyYXNoZWRJZHMiLCJzdWNjZXNzIiwicmVtb3ZlVHJhc2hFbnRpdHlJZCIsIm1vZGVsc0ZvckRlbGV0ZSIsIm1vZGVsRm9yRGVsZXRlIiwiaWRzRGVsZXRlZCIsIm1vZGVsc0ZvclRyYXNoIiwibW9kZWxGb3JUcmFzaCIsImlkc1RyYXNoZWQiLCJ0cmFzaGVkIiwicGVyc2lzdEFkZFJlbGF0aW9uc0Zvck1vZGVsIiwicGVyc2lzdERlbGV0ZVJlbGF0aW9uc0Zvck1vZGVsIiwicGVyc2lzdFJlbGF0aW9uc0Zvck1vZGVsIiwicGVyc2lzdFJlbGF0aW9uc0ZvckVudGl0eUlkIiwicGVyc2lzdFJlbGF0aW9uc0ZvckVudGl0eUlkQW5kUmVsYXRpb24iLCJwZXJzaXN0UmVsYXRpb25zRm9yRW50aXR5SWRBbmRSZWxhdGlvbklkIiwicGVyc2lzdE5ld0VudGl0eUFuZFJlbW92ZURpcnR5UmVsYXRpb25zIiwiZ2V0UmVsYXRpb25TdGF0ZSIsImFkZFJlbGF0aW9uIiwicmVsYXRpb25TdGF0ZSIsInJlbGF0aW9uc1BlcnNpc3RlZCIsInBlcnNpc3RlZFJlbGF0aW9ucyIsInJlbGF0aW9uTmFtZXMiLCJwZXJzaXN0ZWRSZWxhdGlvbklkcyIsInJlbGF0aW9uRW50aXR5SWRzIiwicGVyc2lzdGVkUmVsYXRpb25JZCIsInJlbGF0aW9uSWQiLCJlbnRpdHlJZENoYW5nZWQiLCJjdWlkIiwiaXNDdWlkIiwiZW5kcG9pbnQiLCJyZW1vdmVEaXJ0eVJlbGF0aW9uRm9yVHlwZSIsInBlcnNpc3RpbmdBcmd1bWVudHMiLCJkb1JlbGF0aW9uUmVtb3ZhbCIsInNlbGVjdG9yIiwidHlwZXMiLCJyZWNlaXZlRW50aXR5UmVjb3JkcyIsInJlY2VpdmVFbnRpdHkiLCJyZWNlaXZlUmVsYXRlZEVudGl0aWVzIiwicmVsYXRlZEVudGl0eUlkcyIsInJlY2VpdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24iLCJxdWV1ZVR5cGUiLCJUWVBFX1FVRVVFX1JFTEFUSU9OX0FERCIsIlRZUEVfUVVFVUVfUkVMQVRJT05fREVMRVRFIiwib2xkRW50aXR5SWQiLCJuZXdFbnRpdHlJZCIsInJlbW92ZURpcnR5UmVsYXRpb25EZWxldGlvbiIsInJlc2V0QWxsU3RhdGUiLCJyZXNldFN0YXRlRm9yTW9kZWwiLCJyZXNldEFsbE1vZGVsU3BlY2lmaWMiLCJyZXNldE1vZGVsU3BlY2lmaWNGb3JTZWxlY3RvciIsInJlc2V0TW9kZWxTcGVjaWZpY0ZvclNlbGVjdG9yQW5kQXJncyIsInJlc29sdmVycyIsImludmFsaWRhdGVBY3Rpb25zQXZhaWxhYmxlIiwiX21hcCIsImVudHJ5IiwibW9kZWxOYW1lSW5TZWxlY3RvciIsIm1vZGVsTmFtZUluQXJncyIsInNlbGVjdG9ySXNNb2RlbFNwZWNpZmljIiwic2luZ3VsYXJOYW1lIiwiaW5kZXhPZiIsImhhc01vZGVsTmFtZSIsInNvbWUiLCJhcmciLCJzZWxlY3RvcnNUb0ludmFsaWRhdGUiLCJtb2RlbFNwZWNpZmljU2VsZWN0b3JzIiwidW5kZWZpbmVkIiwiZGF0YVNlbGVjdCIsImludmFsaWRhdGVSZXNvbHV0aW9uRm9yU3RvcmUiLCJyZWdpc3RlclN0b3JlIiwicmVkdWNlciIsImFjdGlvbnMiLCJtb2RlbEFjdGlvbnMiLCJzZWxlY3RvcnMiLCJtb2RlbFNlbGVjdG9ycyIsIm1vZGVsUmVzb2x2ZXJzIiwicmVjZWl2ZUxhdGVzdENoZWNraW4iLCJ0b2dnbGVDaGVja2luIiwiY2hlY2tpbkVudGl0eSIsInJlZ2lzdHJhdGlvbklkIiwiZGF0ZVRpbWVJZCIsImdldEVuZHBvaW50IiwiY2hlY2tJblJlc3BvbnNlIiwiX18iLCJuZXdDaGVja2luIiwiZ2V0TGF0ZXN0Q2hlY2tpbiIsImlzVW5kZWZpbmVkIiwic3RhdGUiLCJjaGVja2luSWQiLCJnZXRTZWxlY3RvclZhbHVlIiwiZ2V0RW50aXR5QnlJZCIsImNyZWF0ZUFjdGlvbnMiLCJhY3Rpb24iLCJNT0RFTF9OQU1FUyIsImNyZWF0ZVJlc29sdmVycyIsInJlc29sdmVyIiwiY3JlYXRlU2VsZWN0b3JzIiwiZ2V0RW50aXR5UmVjb3Jkc0Zvck1vZGVsIiwiZ2V0RW50aXRpZXNGb3JNb2RlbCIsImdldEVudGl0aWVzQnlJZHMiLCJnZXRFbnRpdHlJZHNRdWV1ZWRGb3JUcmFzaCIsImdldEVudGl0eUlkc1F1ZXVlZEZvckRlbGV0ZSIsImVudGl0eVNlbGVjdG9ycyIsImJhc2VTZWxlY3RvcnMiLCJyZWxhdGlvblNlbGVjdG9ycyIsImVudGl0eUFjdGlvbnMiLCJiYXNlQWN0aW9ucyIsInJlbGF0aW9uQWN0aW9ucyIsImVudGl0eVJlc29sdmVycyIsImJhc2VSZXNvbHZlcnMiLCJyZWNlaXZlU2VsZWN0b3JWYWx1ZSIsInZhbHVlIiwiY3JlYXRlU2VsZWN0b3IiLCJnZXRJbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJvbGRJZCIsImdldFJlbGF0aW9uQWRkaXRpb25zUXVldWVkRm9yTW9kZWwiLCJnZXRSZWxhdGlvbkRlbGV0aW9uc1F1ZXVlZEZvck1vZGVsIiwiY291bnRSZWxhdGlvbk1vZGVsc0luZGV4ZWRGb3JFbnRpdHkiLCJyZXNldFR5cGVzIiwiYWRkVG9TdGF0ZSIsImFkZCIsInJlbW92ZUZyb21TdGF0ZSIsIlNldCIsImluY2x1ZGVzIiwiZGVsZXRlIiwicHJvY2Vzc0FjdGlvbiIsImRlbGV0ZUVudGl0eSIsImZyb21KUyIsIkRFRkFVTFRfQ09SRV9TVEFURSIsImRpcnR5IiwidHJhc2hFbnRpdHkiLCJ0cmFzaCIsInJlbGF0aW9uRXhpc3RzSW5NYXAiLCJyZWxhdGlvbk1hcCIsImhhc1JlbGF0aW9uIiwiZ2V0UmVsYXRpb25NYXAiLCJpZEV4aXN0c0luU2V0IiwiaWRTZXQiLCJpbmRleFJlbGF0aW9ucyIsInNldEluIiwicmVtb3ZlRW1wdHlGcm9tU3RhdGUiLCJnZXRSZWxhdGlvbklkc0Zyb21TdGF0ZSIsImhhc0luIiwicmVxdWlyZXNVcGRhdGUiLCJ1cGRhdGVSZWxhdGlvblN0YXRlIiwiaWRzIiwicmVwbGFjZU9sZFJlbGF0aW9uSWRXaXRoTmV3UmVsYXRpb25JZCIsIm5ld1N0YXRlIiwicmVwbGFjZUlkcyIsInN0YXRlUHJvcGVydHkiLCJtYWluUGF0aCIsIm1haW5SZWNvcmQiLCJkZWxldGVJbiIsImZvckVhY2giLCJtYXBPcklkcyIsInVwZGF0ZUlkcyIsInJlbGF0aW9uUGF0aCIsImluZGV4UmVjb3JkIiwibm9ybWFsaXplQWN0aW9uRm9yU3RhdGUiLCJpbmRleCIsImRpcnR5UmVsYXRpb25zIiwiY2xlYXJSZWxhdGVkRW50aXRpZXNGb3JFbnRpdHkiLCJtb2RlbERhdGEiLCJtb2RlbFJlbW92ZWQiLCJlbnRpdHlJZFJlbW92ZWQiLCJpbmRleFR5cGUiLCJyZWxhdGlvblR5cGVzIiwicmVjb3JkUGF0aCIsImNsZWFyRW50aXR5SWRzSW5QYXRoIiwic3ViU3RhdGUiLCJ3aXRoTXV0YXRpb25zIiwicmVsYXRpb25SZWNvcmQiLCJyZWxhdGlvblR5cGUiLCJyZW1vdmVSZWxhdGVkRW50aXRpZXNGb3JFbnRpdHkiLCJjbGVhclN0YXRlRm9yTW9kZWwiLCJjbGVhck1vZGVsRnJvbVN1YnN0YXRlIiwic3ViU3RhdGVLZXkiLCJtdXRhdGVkU3RhdGUiLCJlbnRpdHlNYXBzIiwibW9kZWxNYXAiLCJkZWxldGVQYXRoIiwiY29tYmluZVJlZHVjZXJzIiwicmVwbGFjZUV4aXN0aW5nRW50aXRpZXNGcm9tU3RhdGUiLCJlbnRpdHlSZWNvcmRzIiwibWVyZ2UiLCJ1cGRhdGVTdGF0ZSIsImRpZmZlcmVuY2UiLCJoYW5kbGVSZWNlaXZlU2VsZWN0b3IiLCJub3JtYWxpemVkUmVjZWl2ZUFuZFJlbW92ZVJlbGF0aW9ucyIsInJlY2VpdmVBbmRSZW1vdmVSZWxhdGlvbnMiLCJuZXdBY3Rpb24iLCJleGlzdGluZ0lkcyIsImNvbmNhdCIsImlkc0FmdGVyUmVtb3ZhbCIsImZpbHRlciIsImtleU9mIiwiY291bnQiLCJ1cGRhdGVFbnRpdHlJZEZvclJlbGF0aW9ucyIsIm1vZGVsUmVjb3JkVG9SZXBsYWNlIiwicmVwbGFjZVJlbGF0aW9uUmVjb3JkcyIsIm1haW5SZWNvcmRUb1JlcGxhY2UiLCJyZW1vdmVPbmx5IiwidG9BcnJheSIsIm1vZGVsUmVsYXRpb25zIiwiY2FsY3VsYXRlZEZpZWxkcyIsImFwcGVuZENhbGN1bGF0ZWRGaWVsZHNUb1BhdGgiLCJmdWxsRW50aXR5IiwiZ2V0UmVsYXRlZEVudGl0aWVzIiwiZ2V0UmVsYXRlZEVudGl0aWVzRm9ySWRzIiwicGx1cmFsUmVsYXRpb25OYW1lIiwicmVsYXRpb25SZXNvdXJjZVByb3BlcnR5IiwicmVsYXRpb25FbmRwb2ludCIsInN0cmlwQmFzZVJvdXRlRnJvbVVybCIsInJlc291cmNlTGluayIsInNwcmludGYiLCJmdWxsRW50aXRpZXMiLCJjcmVhdGVBbmRLZXlFbnRpdGllc0J5UHJpbWFyeUtleVZhbHVlIiwiZW50aXRpZXNPYmplY3QiLCJlbnRpdHlPYmoiLCJlbnRpdHlBcnJheSIsInZhbHVlcyIsImhhc0pvaW5UYWJsZSIsInJlbGF0aW9uU2NoZW1hIiwicmVsYXRpb25fdHlwZSIsImdldFJlbGF0aW9uUmVxdWVzdFVybCIsInJlbGF0aW9uUHJpbWFyeUtleSIsImdldFByaW1hcnlLZXkiLCJtb2RlbFByaW1hcnlLZXkiLCJoYXNTZXRNYXAiLCJJbW11dGFibGVNYXAiLCJyZWNvcmQiLCJyZWxhdGlvblJlY29yZHMiLCJpc0JlbG9uZ3NUb1JlbGF0aW9uIiwiam9pbmluZ19tb2RlbF9uYW1lIiwiZ2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nIiwibW9kZWxOYW1lRm9yUXVlcnlTdHJpbmciLCJjYXN0QXJyYXkiLCJuYW1lRm9yUXVlcnlTdHJpbmciLCJxdWVyeVN0cmluZ3MiLCJmaWVsZCIsImFkZFF1ZXJ5QXJncyIsImNhbGN1bGF0ZSIsImpvaW4iLCJ0b0pTIiwidmFsdWVTZXEiLCJyZXRyaWV2ZUVudGl0aWVzQnlJZHMiLCJjbGVhciIsImdldERlcGVuZGFudHMiLCJzcGxpdCIsImdldE1vZGVsc1F1ZXVlZEZvclRyYXNoIiwia2V5U2VxIiwiZ2V0TW9kZWxzUXVldWVkRm9yRGVsZXRlIiwiZ2V0QWxsRW50aXRpZXNJblN0YXRlIiwiREVGQVVMVF9FTVBUWV9TRVQiLCJnZXRSZWxhdGlvbklkc0ZvckVudGl0eVJlbGF0aW9uIiwicmVsYXRlZEVudGl0aWVzIiwibG9va3VwUmVsYXRpb25zUXVldWVkRm9yTW9kZWwiLCJyZWxhdGlvbnNRdWV1ZWQiLCJtZXJnZURlZXAiLCJtb2RlbCIsImdldEFsbFJlbGF0aW9uc0luU3RhdGUiLCJERUZBVUxUX1NUQVRFIiwiU0VUX0ZJTFRFUiIsImdldFN0YXRlIiwiY29udGV4dCIsImZpbHRlclN0YXRlUmVkdWNlciIsInByZXZTdGF0ZSIsInNldEZpbHRlciIsImdldEZpbHRlciIsImRlZmF1bHRWYWx1ZSIsIlJFQ0VJVkVfTElTVCIsIlJFQ0VJVkVfRU5USVRZX0xJU1QiLCJSRVNFVF9UWVBFUyIsIlJFU0VUX1NUQVRFX0ZPUl9JREVOVElGSUVSIiwiUkVTRVRfU1BFQ0lGSUNfU1RBVEVfRk9SX0lERU5USUZJRVIiLCJyZXNldEZvclNlbGVjdG9yQW5kSWRlbnRpZmllciIsInJlc2V0R2VuZXJpY0l0ZW1zV2l0aElkZW50aWZpZXIiLCJyZXNldEVudGl0aWVzRm9yTW9kZWxOYW1lIiwicmVzZXRTcGVjaWZpY1N0YXRlRm9yU2VsZWN0b3IiLCJyZWNlaXZlUmVzcG9uc2UiLCJpZGVudGlmaWVyIiwicXVlcnlTdHJpbmciLCJpdGVtcyIsInJlY2VpdmVFbnRpdHlSZXNwb25zZSIsImlkZW50aWZpZXJJblNlbGVjdG9yIiwicGx1cmFsTmFtZSIsImNyZWF0ZUVudGl0eVNlbGVjdG9ycyIsImNyZWF0ZUVudGl0eVJlc29sdmVycyIsInNvdXJjZSIsIm1ldGhvZE5hbWVGb3JHZXQiLCJnZXRFbnRpdGllcyIsInJlY2VpdmVMaXN0SXRlbXMiLCJERUZBVUxUX0xJU1RTX1NUQVRFIiwiZG9VcGRhdGUiLCJleGlzdGluZ1ZhbHVlcyIsIk9yZGVyZWRNYXAiLCJnZXRJdGVtcyIsImJ1aWxkQW5kRGlzcGF0Y2hFbnRpdGllc0Zyb21SZXNwb25zZSIsImZpbmQiLCJleGlzdGluZ0VudGl0eSIsInJldHJpZXZlSXRlbXMiLCJkZWZhdWx0RW1wdHkiLCJlIiwiaXNSZXF1ZXN0aW5nIiwiYXNzZXJ0SW1tdXRhYmxlT2JqZWN0SGFzUGF0aCIsImlzUmVxdWVzdGluZ0l0ZW1zIiwiaXNSZXF1ZXN0aW5nRW50aXRpZXMiLCJSRUNFSVZFX1NDSEVNQV9SRUNPUkQiLCJSRUNFSVZFX0ZBQ1RPUllfRk9SX01PREVMIiwiUkVDRUlWRV9SRUxBVElPTl9FTkRQT0lOVF9GT1JfTU9ERUxfRU5USVRZIiwiUkVDRUlWRV9SRUxBVElPTl9TQ0hFTUEiLCJyZWNlaXZlU2NoZW1hRm9yTW9kZWwiLCJzY2hlbWEiLCJyZWNlaXZlRmFjdG9yeUZvck1vZGVsIiwicmVjZWl2ZVJlbGF0aW9uRW5kcG9pbnRGb3JNb2RlbEVudGl0eSIsInJlY2VpdmVSZWxhdGlvblNjaGVtYSIsIkpPSU5fUkVMQVRJT05fVFlQRVMiLCJTQ0hFTUFfS0VZIiwic2NoZW1hTWV0aG9kTmFtZSIsImZhY3RvcnlNZXRob2ROYW1lIiwiZ2V0U2NoZW1hRm9yTW9kZWwiLCJnZXRGYWN0b3J5Rm9yTW9kZWwiLCJyZWNlaXZlU2NoZW1hIiwiREVGQVVMVF9TQ0hFTUFfU1RBVEUiLCJpc1NjaGVtYVJlc3BvbnNlT2ZNb2RlbCIsInJlY2VpdmVGYWN0b3J5IiwicmVjZWl2ZVJlbGF0aW9uRW5kcG9pbnRGb3JFbnRpdHkiLCJyZWxhdGlvbkVuZHBvaW50cyIsImlzU2hhbGxvd0VxdWFsIiwiZ2V0UmVsYXRpb25FbmRwb2ludEZvckVudGl0eUlkIiwiZ2V0UmVsYXRpb25QcmltYXJ5S2V5U3RyaW5nIiwiZ2V0UmVsYXRpb25SZXNwb25zZVR5cGUiLCJoYXNKb2luVGFibGVSZWxhdGlvbiIsImdldFJlbGF0aW9uVHlwZSIsImdldFJlbGF0aW9uU2NoZW1hIiwiY3JlYXRlRW50aXR5RmFjdG9yeSIsIk1PREVMX1BSRUZJWEVTIiwiX2xpbmtzIiwibGlua3MiLCJiYXNlUmVsYXRpb25QYXRoIiwiRXJyb3IiLCJ0eXBlU2NoZW1hIiwicHJvcGVydGllcyIsImlzUmVxdWVzdGluZ1NjaGVtYUZvck1vZGVsIiwiaGFzUmVzb2x2ZWRTY2hlbWFGb3JNb2RlbCIsImlzUmVxdWVzdGluZ0ZhY3RvcnlGb3JNb2RlbCIsImhhc1Jlc29sdmVkRmFjdG9yeUZvck1vZGVsIiwiaXNSZXF1ZXN0aW5nUmVsYXRpb25FbmRwb2ludEZvckVudGl0eUlkIiwiYXNzZXJ0RW50aXR5SGFzS2V5Iiwia2V5IiwibWVzc2FnZSIsImhhc093blByb3BlcnR5IiwiRXhjZXB0aW9uIiwiaW1tdXRhYmxlIiwiYXNzZXJ0SXNBcnJheSIsImFzc2VydElzTm90RW1wdHkiLCJhc3NlcnRJc01hcCIsIml0ZW0iLCJNT0RFTF9OQU1FIiwib3JkZXJCeU1hcCIsImxhc3ROYW1lT25seSIsImZpcnN0TmFtZU9ubHkiLCJmaXJzdFRoZW5MYXN0TmFtZSIsImxhc3RUaGVuRmlyc3ROYW1lIiwicXVlcnlEYXRhVHlwZXMiLCJmb3JFdmVudElkIiwiUHJvcFR5cGVzIiwibnVtYmVyIiwiZm9yRGF0ZXRpbWVJZCIsImZvclRpY2tldElkIiwiZm9yU3RhdHVzSWQiLCJvbmVPZiIsIlJFR0lTVFJBVElPTl9TVEFUVVNfSURTIiwiZm9yUmVnaXN0cmF0aW9uSWQiLCJzaG93R3JhdmF0YXIiLCJib29sIiwicXVlcnlEYXRhIiwic2hhcGUiLCJsaW1pdCIsIm9yZGVyQnkiLCJPYmplY3QiLCJvcmRlciIsIkFMTE9XRURfT1JERVJfVkFMVUVTIiwiZGVmYXVsdFF1ZXJ5RGF0YSIsIlFVRVJZX09SREVSX0FTQyIsIm1hcE9yZGVyQnkiLCJ3aGVyZUNvbmRpdGlvbnMiLCJ3aGVyZSIsImdldFF1ZXJ5U3RyaW5nIiwiYmFzZUdldFF1ZXJ5U3RyaW5nIiwiZm9ybWF0RGF0ZXNPbkVudGl0aWVzIiwiZW50aXR5RGF0ZUZpZWxkcyIsImZvcm1hdCIsImRhdGVGb3JtYXRzIiwibG9jYWwiLCJmb3JtYXR0ZWRFbnRpdGllcyIsImZvcm1hdERhdGVzT25FbnRpdHkiLCJuZXdFbnRpdHkiLCJkYXRlRmllbGQiLCJmb3JtYXRFbnRpdGllc0RhdGVzVG9NeXNxbCIsImZvcm1hdEVudGl0eURhdGVzVG9NeXNxbCIsImZvcm1hdEVudGl0aWVzRGF0ZXNUb1NpdGUiLCJmb3JtYXRFbnRpdHlEYXRlc1RvU2l0ZSIsImNvbnZlcnRFbnRpdGllc0RhdGVzVG9Nb21lbnQiLCJjb252ZXJ0RW50aXR5RGF0ZXNUb01vbWVudCIsIlFVRVJZX09SREVSX0RFU0MiLCJHUkVBVEVSX1RIQU4iLCJlbmNvZGVVUklDb21wb25lbnQiLCJMRVNTX1RIQU4iLCJHUkVBVEVSX1RIQU5fQU5EX0VRVUFMIiwiTEVTU19USEFOX0FORF9FUVVBTCIsImRlZmF1bHRXaGVyZUNvbmRpdGlvbnMiLCJxdWVyeVBhcmFtcyIsIkNIRUNLSU5fU1RBVFVTX0lEIiwiU1RBVFVTX0NIRUNLRURfT1VUIiwiU1RBVFVTX0NIRUNLRURfSU4iLCJTVEFUVVNfQ0hFQ0tFRF9ORVZFUiIsIkNIRUNLSU5fU1RBVFVTX0lEUyIsImNoZWNraW5TdGF0dXMiLCJvcHRpb25zRW50aXR5TWFwIiwiZGVmYXVsdCIsImxhYmVsIiwicHJldHR5U3RhdHVzIiwidGltZXN0YW1wIiwiREFURVRJTUVfU1RBVFVTX0lEIiwiQUNUSVZFIiwiQ0FOQ0VMTEVEIiwiRVhQSVJFRCIsIklOQUNUSVZFIiwiUE9TVFBPTkVEIiwiU09MRF9PVVQiLCJUUkFTSEVEIiwiVVBDT01JTkciLCJEQVRFVElNRV9TVEFUVVNfSURTIiwiTUlOVVRFX0lOX1NFQ09ORFMiLCJIT1VSX0lOX1NFQ09ORFMiLCJEQVlfSU5fU0VDT05EUyIsIldFRUtfSU5fU0VDT05EUyIsIk1PTlRIX0lOX1NFQ09ORFMiLCJEQVRFX0ZJRUxEUyIsImZvcm1hdHRlcnMiLCJmb3JPd24iLCJiYXNlRm9ybWF0dGVyIiwiaW1wbGVtZW50YXRpb24iLCJmdW5jdGlvbk5hbWUiLCJpbmNvbWluZ0FyZ3MiLCJmaXJzdEFyZyIsInB1bGxBdCIsInByZXR0eURhdGVGcm9tRGF0ZVRpbWUiLCJEYXRlVGltZUVudGl0eSIsImNvbnRlbnQiLCJEVFRfRVZUX3N0YXJ0IiwiaGFzU2FtZSIsIkRUVF9FVlRfZW5kIiwiYWxsRGF0ZVRpbWVzQXNTdHJpbmciLCJTRVBBUkFUT1JfU1BBQ0VfREFTSF9TUEFDRSIsInRvRm9ybWF0IiwiREFURV9USU1FX0ZPUk1BVF9TSVRFIiwiVElNRV9GT1JNQVRfU0lURSIsIkRUVF9uYW1lIiwibm93RGF0ZUFuZFRpbWUiLCJtb21lbnQiLCJzaG93RXhwaXJlZCIsIm1vbnRoIiwic3RhcnRfZGF0ZSIsImVuZF9kYXRlIiwic3RhcnRPZiIsImVuZE9mIiwiYXNzZXJ0RGF0ZVRpbWVFbnRpdHkiLCJUeXBlRXJyb3IiLCJpc1ZhbGlkRW50aXR5T3JBcmNoaXZlIiwiaW5jbHVkZVRyYXNoZWQiLCJpc1RyYXNoZWQiLCJpc0FjdGl2ZSIsInN0YXJ0IiwiZGlmZk5vdyIsImFzU2Vjb25kcyIsImVuZCIsImlzRXhwaXJlZCIsImlzUmVjZW50bHlFeHBpcmVkIiwiaXNTb2xkT3V0IiwiY2FwIiwicmVnTGltaXQiLCJJbmZpbml0eSIsInNvbGQiLCJpc1VwY29taW5nIiwic3RhdHVzIiwiZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MiLCJnZXREYXRlVGltZVN0YXR1c1RleHRMYWJlbCIsImRhdGVTdGF0dXMiLCJtYXBUb09iamVjdFZhbHVlcyIsIm1vZGVsTmFtZUVuZHBvaW50cyIsIm1hcFZhbHVlcyIsImdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0IiwibWVtb2l6ZSIsImVuZHBvaW50cyIsInBhdGhzIiwiY29sbGVjdGlvbl9lbmRwb2ludHMiLCJiYXNlUmVzdFJvdXRlIiwiYmFzZV9yZXN0X3JvdXRlIiwidXJsIiwicmVwbGFjZSIsIm1heWJlQXNzZXJ0VmFsdWVPYmplY3QiLCJmaWVsZE5hbWUiLCJmaWVsZFZhbHVlIiwiaXNEYXRlVGltZUZpZWxkIiwiRGF0ZVRpbWUiLCJhc3NlcnRJc0RhdGVUaW1lIiwiaXNNb25leUZpZWxkIiwiTW9uZXkiLCJhc3NlcnRNb25leSIsImFzc2VydFZhbGlkU2NoZW1hIiwiaXNTY2hlbWEiLCJJbnZhbGlkU2NoZW1hIiwiYXNzZXJ0VmFsaWRTY2hlbWFGaWVsZFByb3BlcnRpZXMiLCJyYXciLCJhc3NlcnRWYWxpZFZhbHVlRm9yUHJlcGFyZWRGaWVsZCIsImluc3RhbmNlIiwiaXNWYWxpZCIsImlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZCIsImVudW0iLCJ2YWxpZGF0ZUVudW1UeXBlIiwidmFsaWRhdGVUeXBlIiwibWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0V2l0aEFzc2VydGlvbnMiLCJhc3NlcnRWYWxpZEZpZWxkQW5kVmFsdWVBZ2FpbnN0U2NoZW1hIiwidmFsaWRhdGlvblR5cGUiLCJ2YWxpZGF0ZVR5cGVGb3JGaWVsZCIsIlBSSVZBVEVfUFJPUEVSVElFUyIsIlNBVkVfU1RBVEUiLCJWQUxJREFURV9UWVBFUyIsIkJhc2VFbnRpdHkiLCJlbnRpdHlGaWVsZHNBbmRWYWx1ZXMiLCJmaWVsZFByZWZpeGVzIiwiQ0xFQU4iLCJjcmVhdGVHZXR0ZXIiLCJzZXRTYXZlU3RhdGUiLCJORVciLCJjcmVhdGVFbnRpdHlHZXR0ZXJzQW5kU2V0dGVycyIsImNyZWF0ZVBlcnNpc3RpbmdHZXR0ZXJzQW5kU2V0dGVycyIsInNlYWwiLCJzYXZlU3RhdGUiLCJESVJUWSIsInByb3RlY3RlZEZpZWxkcyIsImtlZXBJZCIsImNyZWF0ZUZhY3RvcnkiLCIkc2NoZW1hIiwiZm9yQ2xvbmUiLCJuYW1lQ2xhc3MiLCJuYW1lIiwiZXh0ZW5kZWRDbGFzcyIsIkVudGl0eSIsImNsYXNzRGVmIiwiZmllbGRzQW5kVmFsdWVzIiwiaGFzUmF3UHJvcGVydHkiLCJpc1BsYWluT2JqZWN0IiwiaGFzUHJldHR5UHJvcGVydHkiLCJwcmV0dHkiLCJoYXNSZW5kZXJlZFByb3BlcnR5IiwicmVuZGVyZWQiLCJoYXNGb3JtYXRQcm9wZXJ0eSIsImhhc0VudW1Qcm9wZXJ0eSIsImlzVmFsdWVPYmplY3RGaWVsZCIsImlzVVRDRGF0ZVRpbWVGaWVsZCIsImRhdGVUaW1lRmllbGROYW1lIiwiaXNQcmltYXJ5S2V5RmllbGQiLCJwcmltYXJ5X2tleSIsImlzUmVhZE9ubHkiLCJyZWFkb25seSIsImlzRW50aXR5RmllbGQiLCJpc0VudW1GaWVsZCIsIlN5bWJvbCIsIlZBTElEQVRFX1RZUEUiLCJSQVciLCJSRU5ERVJFRCIsIlBSRVRUWSIsInByZWZpeE1hcCIsImFwcGx5RmlsdGVycyIsImFuc3dlciIsImF0dGVuZGVlIiwiY2hhbmdlX2xvZyIsImNoZWNraW4iLCJjb3VudHJ5IiwiY3VycmVuY3kiLCJjdXJyZW5jeV9wYXltZW50X21ldGhvZCIsImRhdGV0aW1lIiwiZGF0ZXRpbWVfdGlja2V0IiwiZXZlbnQiLCJldmVudF9tZXNzYWdlX3RlbXBsYXRlIiwiZXZlbnRfcXVlc3Rpb25fZ3JvdXAiLCJldmVudF92ZW51ZSIsImV4dHJhX2pvaW4iLCJleHRyYV9tZXRhIiwibGluZV9pdGVtIiwibWVzc2FnZV90ZW1wbGF0ZSIsIm1lc3NhZ2VfdGVtcGxhdGVfZ3JvdXAiLCJwYXltZW50IiwicGF5bWVudF9tZXRob2QiLCJwb3N0X21ldGEiLCJwcmljZSIsInByaWNlX3R5cGUiLCJxdWVzdGlvbiIsInF1ZXN0aW9uX2dyb3VwIiwicXVlc3Rpb25fZ3JvdXBfcXVlc3Rpb24iLCJxdWVzdGlvbl9vcHRpb24iLCJyZWN1cnJlbmNlIiwicmVnaXN0cmF0aW9uIiwicmVnaXN0cmF0aW9uX3BheW1lbnQiLCJ0ZXJtIiwidGVybV9yZWxhdGlvbnNoaXAiLCJ0ZXJtX3RheG9ub215IiwidGlja2V0IiwidGlja2V0X3ByaWNlIiwidGlja2V0X3RlbXBsYXRlIiwidHJhbnNhY3Rpb24iLCJ2ZW51ZSIsIndwX3VzZXIiLCJvcHRzIiwiZGVmaW5lUHJvcGVydHkiLCJjcmVhdGVDYWxsYmFja0dldHRlciIsInByb3BlcnR5TmFtZSIsImNhbGxCYWNrIiwiY3JlYXRlR2V0dGVyQW5kU2V0dGVyIiwiaW5pdGlhbEZpZWxkVmFsdWUiLCJwcm9wZXJ0eVZhbHVlIiwicmVjZWl2ZWRWYWx1ZSIsImlzUHJpbWFyeUZpZWxkIiwic2V0RmllbGRUb1BlcnNpc3QiLCJjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlciIsIm9yaWdpbmFsRmllbGROYW1lIiwiYWxpYXNGaWVsZE5hbWUiLCJjcmVhdGVBbGlhc0dldHRlciIsImNyZWF0ZUZsdWVudFNldHRlciIsInByaW1hcnlLZXlzIiwib3JpZ2luYWxGaWVsZHNBbmRWYWx1ZXMiLCJpc1ByaW1hcnlLZXkiLCJzZXRWYWxpZGF0ZVR5cGVGb3JGaWVsZCIsInNldEluaXRpYWxFbnRpdHlGaWVsZHNBbmRWYWx1ZXMiLCJzZXRDYWxjdWxhdGVkRmllbGRBbmRWYWx1ZXMiLCJwb3B1bGF0ZVByb3RlY3RlZEZpZWxkc1Byb3BlcnR5Iiwic2V0UmVzb3VyY2VzIiwiY3JlYXRlUHJpbWFyeUtleUZpZWxkR2V0dGVycyIsInBvcHVsYXRlUHJpbWFyeUtleXMiLCJwb3B1bGF0ZU1pc3NpbmdGaWVsZHMiLCJfY2FsY3VsYXRlZF9maWVsZHMiLCJfcHJvdGVjdGVkIiwiZ2V0UHJpbWFyeUtleUZpZWxkc0Zyb21TY2hlbWEiLCJzY2hlbWFQcm9wZXJ0aWVzIiwic2NoZW1hRmllbGQiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwiY3JlYXRlQWxpYXNHZXR0ZXJBbmRTZXR0ZXJGb3JGaWVsZCIsImRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkIiwiZ2V0RW50aXR5RmllbGRzRnJvbVNjaGVtYSIsImdldEJhc2VGaWVsZHNBbmRWYWx1ZXNGb3JDbG9uaW5nIiwiZm9yVXBkYXRlIiwiZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmciLCJmb3JJbnNlcnQiLCJlbnRpdHlWYWx1ZXMiLCJwcmltYXJ5S2V5IiwiZ2V0RGVmYXVsdFZhbHVlRm9yRmllbGQiLCJjcmVhdGVSYXdFbnRpdHlHZXR0ZXJzU2V0dGVycyIsImRlcml2ZVByZXBhcmVkVmFsdWVGb3JGaWVsZCIsImNyZWF0ZVJlbmRlcmVkR2V0dGVycyIsImRlcml2ZVJlbmRlcmVkVmFsdWUiLCJjcmVhdGVBbGlhc0dldHRlckZvckZpZWxkIiwiY3JlYXRlQWxpYXNlc0Zvck1ldGhvZCIsIm5ld0ZpZWxkTmFtZSIsImZpZWxkUHJlZml4IiwiZ2V0UmVuZGVyZWRDYWxsYmFjayIsInJlcXVlc3RlZEZpZWxkTmFtZSIsInJlbW92ZVByZWZpeGVzRnJvbUZpZWxkIiwicHJlZml4ZXNUb1JlbW92ZSIsInNvcnRCeSIsImdldFJlbmRlcmVkIiwiaGFzTXVsdGlwbGVQcmltYXJ5S2V5c0NhbGxiYWNrIiwiaGFzQ2FsY3VsYXRlZEZpZWxkQ2FsbGJhY2siLCJmaWVsZE5hbWVUb0NoZWNrIiwiY2FsY3VsYXRlZEZpZWxkVmFsdWUiLCJjYWxjdWxhdGVkRmllbGROYW1lIiwicmVzb3VyY2VWYWx1ZSIsInJlc291cmNlTmFtZSIsImhyZWYiLCJnZXRSZWxhdGlvbk5hbWVGcm9tTGluayIsInNldFJlbGF0aW9uc1Jlc291cmNlIiwiZ2V0UmVsYXRpb25SZXNvdXJjZUNhbGxiYWNrIiwicmVzb3VyY2VJbmZvIiwic2luZ2xlIiwiZ2V0UmVsYXRpb25SZXNvdXJjZSIsIm92ZXJyaWRlIiwiY3VycmVudFN0YXRlIiwiSW52YWxpZEFyZ3VtZW50IiwiZmllbGRzVG9QZXJzaXN0T25JbnNlcnQiLCJtYXliZUNvbnZlcnRUb1ZhbHVlT2JqZWN0IiwidmFsaWRhdGVJc0RhdGVUaW1lIiwiZnJvbUlTTyIsImluc3RhbmNlT2YiLCJTaXRlQ3VycmVuY3kiLCJ0b0lTTyIsInRvTnVtYmVyIiwibWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0IiwibGFzdCIsIml0ZXJhdG9yIiwiZ2V0UHJpbWFyeUtleVZhbHVlcyIsInBpY2siLCJwaWNrQnkiLCJkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiZGVyaXZlVHlwZUZvckZpZWxkIiwidmFsaWQiLCJzaW5nbGVUeXBlIiwiaXNJbnRlZ2VyIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsImlzQm9vbGVhbiIsImVudW1WYWx1ZXMiLCJleHBlY3RWYWx1ZU9iamVjdHMiLCJpc0VudW0iLCJpc1ZhbHVlT2JqZWN0IiwiRVZFTlRfU1RBVFVTX0lEIiwiRVZFTlRfU1RBVFVTX0lEUyIsImNhdGVnb3J5U2x1ZyIsInN0cmluZyIsInRpY2tldF9zdGFydCIsInRpY2tldF9lbmQiLCJzaW5ndWxhciIsInN0YXJ0Q2FzZSIsIkJBU0VfUFJJQ0VfVFlQRVMiLCJCQVNFX1BSSUNFIiwiRElTQ09VTlQiLCJTVVJDSEFSR0UiLCJUQVgiLCJwcmltYXJ5X2tleXMiLCJ2YWx1ZXNGb3JDb21iaW5lZFByaW1hcnlLZXlzIiwidHJpbUVuZCIsInZhbHVlRm9yUHJpbWFyeUtleSIsImtleVZhbHVlcyIsImdldEVudGl0eVByaW1hcnlLZXlWYWx1ZXMiLCJtYXBwZWRFbnRpdGllcyIsInN0YXR1c01vZGVsIiwiZm9yQXR0ZW5kZWVJZCIsImZvclRyYW5zYWN0aW9uSWQiLCJyZWdfaWQiLCJyZWdfZGF0ZSIsIlNUQVRVU19UWVBFX0VNQUlMIiwiU1RBVFVTX1RZUEVfRVZFTlQiLCJTVEFUVVNfVFlQRV9NRVNTQUdFIiwiU1RBVFVTX1RZUEVfUEFZTUVOVCIsIlNUQVRVU19UWVBFX1JFR0lTVFJBVElPTiIsIlNUQVRVU19UWVBFX1RSQU5TQUNUSU9OIiwiRU1BSUxfU1RBVFVTX0lEIiwiRFJBRlQiLCJTRU5UIiwiUkVHSVNUUkFUSU9OX0NMT1NFRCIsIkRFTEVURUQiLCJERU5JRUQiLCJOT1RfQUNUSVZFIiwiTk9UX09QRU4iLCJPTkdPSU5HIiwiUkVHSVNUUkFUSU9OX09QRU4iLCJQRU5ESU5HIiwiU0VDT05EQVJZIiwiTUVTU0FHRV9TVEFUVVNfSUQiLCJERUJVRyIsIkVYRUNVVElORyIsIkZBSUwiLCJJTkNPTVBMRVRFIiwiSURMRSIsIlJFU0VORCIsIlJFVFJZIiwiUEFZTUVOVF9TVEFUVVNfSUQiLCJBUFBST1ZFRCIsIkRFQ0xJTkVEIiwiRkFJTEVEIiwiUkVHSVNUUkFUSU9OX1NUQVRVU19JRCIsIk5PVF9BUFBST1ZFRCIsIlBFTkRJTkdfUEFZTUVOVCIsIldBSVRfTElTVCIsIlRSQU5TQUNUSU9OX1NUQVRVU19JRCIsIkFCQU5ET05FRCIsIkNPTVBMRVRFIiwiT1ZFUlBBSUQiLCJDUFRfU1RBVFVTX0lEIiwiUFVCTElTSCIsIkZVVFVSRSIsIlBSSVZBVEUiLCJVTktOT1dOX1NUQVRVU19JRCIsIkFMTF9TVEFUVVNfSURTIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9SRUdJU1RSQVRJT04iLCJMYWJlbCIsImZyb21TYW1lU2luZ2xlQW5kUGx1cmFsIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9UUkFOU0FDVElPTiIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfUEFZTUVOVCIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfTUVTU0FHRSIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ1BUIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9FVkVOVCIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfVElDS0VUIiwiVElDS0VUX1NUQVRVU19JRCIsIkFSQ0hJVkVEIiwiT05TQUxFIiwiU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9EQVRFVElNRSIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ0hFQ0tJTiIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMIiwic3RhdHVzQ29kZSIsIkZPUk1BVF9TRU5URU5DRV9DQVNFIiwiYXNGb3JtYXR0ZWQiLCJwcmV0dHlTdGF0dXNlcyIsInN0YXR1c0NvZGVzIiwibWFwcGVkU3RhdHVzZXMiLCJzdGF0dXNUeXBlIiwiVElDS0VUX1NUQVRVU19JRFMiLCJhc3NlcnRUaWNrZXRFbnRpdHkiLCJUaWNrZXRFbnRpdHkiLCJpbmNsdWRlQXJjaGl2ZWQiLCJpc0FyY2hpdmVkIiwiaXNPblNhbGUiLCJzdGFydERhdGUiLCJlbmREYXRlIiwicXR5IiwiaXNQZW5kaW5nIiwiZ2V0VGlja2V0U3RhdHVzVGV4dExhYmVsIiwidGlja2V0U3RhdHVzIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFF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Q0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsVUFBVTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLEtBQUs7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLCtFQUErRTtBQUMvRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsVUFBVTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQix3QkFBd0I7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFD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Q0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsVUFBVTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFVBQVU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxXQUFXO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxnQkFBZ0I7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLGdCQUFnQjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsZUFBZTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLHNCQUFzQixFQUFFO0FBQ2xFLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDLEtBQUs7QUFDN0M7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsZ0RBQWdELEVBQUU7QUFDMUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCx5Q0FBeUMsRUFBRTtBQUM5RjtBQUNBO0FBQ0EsK0JBQStCLGlCQUFpQixFQUFFO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlCQUF5Qix5QkFBeUIsRUFBRTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsbUJBQW1CLEVBQUU7QUFDNUQsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsS0FBSztBQUN0Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esd0NBQXdDLDBCQUEwQixFQUFFO0FBQ3BFLHFDQUFxQyx1QkFBdUIsRUFBRTtBQUM5RCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVDQUF1QyxxQkFBcUIsRUFBRTtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixtQkFBbUI7QUFDekMsOERBQThELHVCQUF1QixFQUFFO0FBQ3ZGO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsK0JBQStCLEVBQUU7QUFDeEU7QUFDQTtBQUNBLHdDQUF3Qyw2QkFBNkIsRUFBRTtBQUN2RTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QywrQkFBK0IsRUFBRTtBQUN4RTtBQUNBO0FBQ0Esc0NBQXNDLDZCQUE2QixFQUFFO0FBQ3JFO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw2Q0FBNkMseUJBQXlCLEVBQUU7QUFDeEU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSx1Q0FBdUMsK0JBQStCLEVBQUU7QUFDeEUsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsK0VBQStFLGFBQWEsRUFBRTtBQUM5RixHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCwyQkFBMkI7QUFDM0U7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0Esd0NBQXdDLDJCQUEyQixFQUFFO0FBQ3JFLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBLHdDQUF3Qyw2QkFBNkIsRUFBRTtBQUN2RSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSwwQ0FBMEMsK0JBQStCLEVBQUU7QUFDM0UsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsMkRBQTJELEVBQUU7QUFDM0Y7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QiwyQ0FBMkMsRUFBRTtBQUMzRTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsK0NBQStDOztBQUU1RztBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxzQkFBc0IsRUFBRTtBQUM3RCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBEQUEwRDtBQUMxRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsbUJBQW1CLEVBQUU7QUFDNUQsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDLEtBQUs7QUFDN0M7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGlCQUFpQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBLGtDQUFrQyxTQUFTO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwREFBMEQsMkJBQTJCLEVBQUU7QUFDdkY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QywyREFBMkQ7QUFDbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFZSx3RUFBUyxFQUFDO0FBQ21WOzs7Ozs7Ozs7Ozs7QUN6ckw1VztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxjQUFjLFNBQVM7QUFDdkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLEtBQStCLEdBQUcsRUFNdEM7O0FBRUY7QUFDQTs7Ozs7Ozs7Ozs7OztBQ3BIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsVUFBVSxLQUFxQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixzQkFBc0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLElBQXFDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFD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QUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxzRkFBc0YsYUFBYTtBQUNuRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RkFBNEYsZUFBZTtBQUMzRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztB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O0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFdBQVc7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdEQSxhQUFhLDZDQUE2QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQTVELGFBQWEsK0JBQStCLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBOUMsYUFBYSwwQ0FBMEMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F6RCxhQUFhLHVDQUF1QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXRELGFBQWEsd0NBQXdDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBdkQsYUFBYSw2Q0FBNkMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0E1RCxhQUFhLCtDQUErQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQTlELGFBQWEseUNBQXlDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBeEQsYUFBYSxxQ0FBcUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0FwRCxhQUFhLHNDQUFzQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXJELGFBQWEsK0NBQStDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBOUQsYUFBYSxvQ0FBb0MsRUFBRSxJOzs7Ozs7Ozs7OztBQ0FuRCxhQUFhLGlEQUFpRCxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQWhFLGFBQWEsaUNBQWlDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBaEQsYUFBYSxtREFBbUQsRUFBRSxJIiwiZmlsZSI6ImV2ZW50ZXNwcmVzc28tZGF0YS1zdG9yZXMuZmJkOTUwZjdlMzc3ZjFjYjMxZWYuZGlzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgYXBpRmV0Y2ggZnJvbSAnQHdvcmRwcmVzcy9hcGktZmV0Y2gnO1xuaW1wb3J0IHtcblx0c2VsZWN0IGFzIHNlbGVjdERhdGEsXG5cdGRpc3BhdGNoIGFzIGRpc3BhdGNoRGF0YSxcblx0c3Vic2NyaWJlLFxufSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgcGx1cmFsTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgYXMgQ09SRV9SRURVQ0VSX0tFWSB9IGZyb20gJy4vY29yZS9jb25zdGFudHMnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFjdGlvbiBvYmplY3QgZm9yIGEgZmV0Y2ggY29udHJvbC5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0XG4gKiBAcmV0dXJuIHt7dHlwZTogc3RyaW5nLCByZXF1ZXN0OiBPYmplY3R9fSBBbiBhY3Rpb24gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaCggcmVxdWVzdCApIHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiAnRkVUQ0hfRlJPTV9BUEknLFxuXHRcdHJlcXVlc3QsXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYWN0aW9uIG9iamVjdCBmb3IgYSBzZWxlY3QgY29udHJvbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWR1Y2VyS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lXG4gKiBAcGFyYW0geypbXX0gYXJnc1xuICogQHJldHVybiB7e3R5cGU6IHN0cmluZywgcmVkdWNlcktleTogc3RyaW5nLCBzZWxlY3Rvck5hbWU6IHN0cmluZywgYXJnczogKltdfX1cbiAqIFJldHVybnMgYW4gYWN0aW9uIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdCggcmVkdWNlcktleSwgc2VsZWN0b3JOYW1lLCAuLi5hcmdzICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6ICdTRUxFQ1QnLFxuXHRcdHJlZHVjZXJLZXksXG5cdFx0c2VsZWN0b3JOYW1lLFxuXHRcdGFyZ3MsXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYWN0aW9uIG9iamVjdCBmb3IgcmVzb2x2aW5nIGEgc2VsZWN0b3IgdGhhdCBoYXMgYSByZXNvbHZlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWR1Y2VyS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzXG4gKiBAcmV0dXJuIHtPYmplY3R9IEFuIGFjdGlvbiBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2VsZWN0KCByZWR1Y2VyS2V5LCBzZWxlY3Rvck5hbWUsIC4uLmFyZ3MgKSB7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogJ1JFU09MVkVfU0VMRUNUJyxcblx0XHRyZWR1Y2VyS2V5LFxuXHRcdHNlbGVjdG9yTmFtZSxcblx0XHRhcmdzLFxuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFjdGlvbiBvYmplY3QgZm9yIGEgZGlzcGF0Y2ggY29udHJvbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWR1Y2VyS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hOYW1lXG4gKiBAcGFyYW0geypbXX0gYXJnc1xuICogQHJldHVybiB7e3R5cGU6IHN0cmluZywgcmVkdWNlcktleTogc3RyaW5nLCBkaXNwYXRjaE5hbWU6IHN0cmluZywgYXJnczogKltdfX1cbiAqIEFuIGFjdGlvbiBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoKCByZWR1Y2VyS2V5LCBkaXNwYXRjaE5hbWUsIC4uLmFyZ3MgKSB7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogJ0RJU1BBVENIJyxcblx0XHRyZWR1Y2VyS2V5LFxuXHRcdGRpc3BhdGNoTmFtZSxcblx0XHRhcmdzLFxuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFjdGlvbiBvYmplY3QgZm9yIGEgcmVzb2x2ZSBkaXNwYXRjaCBjb250cm9sXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZHVjZXJLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3NcbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGFjdGlvbiBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRGlzcGF0Y2goIHJlZHVjZXJLZXksIGRpc3BhdGNoTmFtZSwgLi4uYXJncyApIHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiAnUkVTT0xWRV9ESVNQQVRDSCcsXG5cdFx0cmVkdWNlcktleSxcblx0XHRkaXNwYXRjaE5hbWUsXG5cdFx0YXJncyxcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhY3Rpb24gb2JqZWN0IGZvciByZXNvbHZpbmcgdGhlIGdldEVudGl0eUJ5SWQgc2VsZWN0b3JcbiAqIGZvciBhbGwgdGhlIGdpdmVuIGlkcyBvbiB0aGUgZ2l2ZW4gbW9kZWxcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge0FycmF5fSBlbnRpdHlJZHNcbiAqIEByZXR1cm4ge09iamVjdH0gQW4gYWN0aW9uIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUdldEVudGl0eUJ5SWRGb3JJZHMoIG1vZGVsTmFtZSwgZW50aXR5SWRzICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6ICdSRVNPTFZFX0dFVF9FTlRJVFlfQllfSURfRk9SX0lEUycsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkcyxcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhY3Rpb24gb2JqZWN0IGZvciByZXNvbHZpbmcgdGhlIGdldFJlbGF0ZWRFbnRpdGllcyBzZWxlY3RvclxuICogb24gdGhlIGV2ZW50ZXNwcmVzc28vY29yZSBzdG9yZSBmb3IgdGhlIGdpdmVuIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eVxuICogQHBhcmFtIHtNYXB9IHJlbGF0aW9uRW50aXRpZXNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gcmVsYXRpb25JZHNcbiAqIEByZXR1cm4ge09iamVjdH0gQW4gYWN0aW9uIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUdldFJlbGF0ZWRFbnRpdGllcyhcblx0ZW50aXR5LFxuXHRyZWxhdGlvbkVudGl0aWVzLFxuXHRyZWxhdGlvbklkc1xuKSB7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogJ1JFU09MVkVfR0VUX1JFTEFURURfRU5USVRJRVMnLFxuXHRcdGVudGl0eSxcblx0XHRyZWxhdGlvbkVudGl0aWVzLFxuXHRcdHJlbGF0aW9uSWRzLFxuXHR9O1xufVxuXG5jb25zdCBjb250cm9scyA9IHtcblx0RkVUQ0hfRlJPTV9BUEkoIHsgcmVxdWVzdCB9ICkge1xuXHRcdHJldHVybiBhcGlGZXRjaCggcmVxdWVzdCApO1xuXHR9LFxuXHRTRUxFQ1QoIHsgcmVkdWNlcktleSwgc2VsZWN0b3JOYW1lLCBhcmdzIH0gKSB7XG5cdFx0cmV0dXJuIHNlbGVjdERhdGEoIHJlZHVjZXJLZXkgKVsgc2VsZWN0b3JOYW1lIF0oIC4uLmFyZ3MgKTtcblx0fSxcblx0RElTUEFUQ0goIHsgcmVkdWNlcktleSwgZGlzcGF0Y2hOYW1lLCBhcmdzIH0gKSB7XG5cdFx0cmV0dXJuIGRpc3BhdGNoRGF0YSggcmVkdWNlcktleSApWyBkaXNwYXRjaE5hbWUgXSggLi4uYXJncyApO1xuXHR9LFxuXHRhc3luYyBSRVNPTFZFX0RJU1BBVENIKCB7IHJlZHVjZXJLZXksIGRpc3BhdGNoTmFtZSwgYXJncyB9ICkge1xuXHRcdHJldHVybiBhd2FpdCBkaXNwYXRjaERhdGEoIHJlZHVjZXJLZXkgKVsgZGlzcGF0Y2hOYW1lIF0oIC4uLmFyZ3MgKTtcblx0fSxcblx0UkVTT0xWRV9TRUxFQ1QoIHsgcmVkdWNlcktleSwgc2VsZWN0b3JOYW1lLCBhcmdzIH0gKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKCAoIHJlc29sdmUgKSA9PiB7XG5cdFx0XHRjb25zdCBoYXNGaW5pc2hlZCA9ICgpID0+IHNlbGVjdERhdGEoICdjb3JlL2RhdGEnIClcblx0XHRcdFx0Lmhhc0ZpbmlzaGVkUmVzb2x1dGlvbiggcmVkdWNlcktleSwgc2VsZWN0b3JOYW1lLCBhcmdzICk7XG5cdFx0XHRjb25zdCBnZXRSZXN1bHQgPSAoKSA9PiBzZWxlY3REYXRhKCByZWR1Y2VyS2V5IClbIHNlbGVjdG9yTmFtZSBdXG5cdFx0XHRcdC5hcHBseSggbnVsbCwgYXJncyApO1xuXG5cdFx0XHQvLyB0cmlnZ2VyIHRoZSBzZWxlY3RvciAodG8gdHJpZ2dlciB0aGUgcmVzb2x2ZXIpXG5cdFx0XHRjb25zdCByZXN1bHQgPSBnZXRSZXN1bHQoKTtcblx0XHRcdGlmICggaGFzRmluaXNoZWQoKSApIHtcblx0XHRcdFx0cmV0dXJuIHJlc29sdmUoIHJlc3VsdCApO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB1bnN1YnNjcmliZSA9IHN1YnNjcmliZSggKCkgPT4ge1xuXHRcdFx0XHRpZiAoIGhhc0ZpbmlzaGVkKCkgKSB7XG5cdFx0XHRcdFx0dW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHRyZXNvbHZlKCBnZXRSZXN1bHQoKSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9LFxuXHRSRVNPTFZFX0dFVF9FTlRJVFlfQllfSURfRk9SX0lEUyggeyBtb2RlbE5hbWUsIGVudGl0eUlkcyB9ICkge1xuXHRcdHdoaWxlICggZW50aXR5SWRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRkaXNwYXRjaERhdGEoXG5cdFx0XHRcdCdjb3JlL2RhdGEnLFxuXHRcdFx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0XHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0XHRcdCdnZXRFbnRpdHlCeUlkJyxcblx0XHRcdFx0WyBtb2RlbE5hbWUsIGVudGl0eUlkcy5wb3AoKSBdXG5cdFx0XHQpO1xuXHRcdH1cblx0fSxcblx0UkVTT0xWRV9HRVRfUkVMQVRFRF9FTlRJVElFUyggeyBlbnRpdHksIHJlbGF0aW9uRW50aXRpZXMsIHJlbGF0aW9uSWRzIH0gKSB7XG5cdFx0d2hpbGUgKCByZWxhdGlvbklkcy5sZW5ndGggPiAwICkge1xuXHRcdFx0Y29uc3QgcmVsYXRpb25FbnRpdHkgPSByZWxhdGlvbkVudGl0aWVzLmdldCggcmVsYXRpb25JZHMucG9wKCkgKTtcblx0XHRcdGlmICggcmVsYXRpb25FbnRpdHkgKSB7XG5cdFx0XHRcdGRpc3BhdGNoRGF0YShcblx0XHRcdFx0XHQnY29yZS9kYXRhJyxcblx0XHRcdFx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0XHRcdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHRcdFx0XHQnZ2V0UmVsYXRlZEVudGl0aWVzJyxcblx0XHRcdFx0XHRbIHJlbGF0aW9uRW50aXR5LCBwbHVyYWxNb2RlbE5hbWUoIGVudGl0eS5tb2RlbE5hbWUgKSBdXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29udHJvbHM7XG4iLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyB1cHBlckZpcnN0LCBjYW1lbENhc2UsIHJlZHVjZSwgaXNNYXAsIGlzTmFOIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwbHVyYWxpemUgZnJvbSAncGx1cmFsaXplJztcbmltcG9ydCB7IG1hcFJlZHVjZXIgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcblxuLyoqXG4gKiBBIGhlbHBlciBmb3IgZ2V0dGluZyBhIG1ldGhvZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHN1ZmZpeFxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICogQHBhcmFtIHtib29sZWFufSB1c2VQbHVyYWxcbiAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyBhIG5hbWUgZm9yIGEgbWV0aG9kLlxuICovXG5leHBvcnQgY29uc3QgZ2V0TWV0aG9kTmFtZSA9IChcblx0bW9kZWxOYW1lLFxuXHRzdWZmaXggPSAnJyxcblx0cHJlZml4ID0gJ2dldCcsXG5cdHVzZVBsdXJhbCA9IGZhbHNlXG4pID0+IHtcblx0bW9kZWxOYW1lID0gdXNlUGx1cmFsID8gcGx1cmFsaXplKCBtb2RlbE5hbWUgKSA6IG1vZGVsTmFtZTtcblx0cmV0dXJuIHByZWZpeCArIHVwcGVyRmlyc3QoIGNhbWVsQ2FzZSggbW9kZWxOYW1lICsgdXBwZXJGaXJzdCggc3VmZml4ICkgKSApO1xufTtcblxuLyoqXG4gKiBHaXZlbiBhIGNvbGxlY3Rpb24gb2YgZXhpc3RpbmcgZW50aXRpZXMgYW5kIGEgY29sbGVjdGlvbiBvZiBpbmNvbWluZ1xuICogZW50aXRpZXMsIHRoaXMgcmV0dXJucyBhIG1lcmdlZCBvYmplY3Qgd2l0aCBwcmVmZXJlbmNlIGdpdmVuIHRvIGNvbW1vblxuICogZW50aXRpZXMgZnJvbSB0aGUgZXhpc3RpbmdFbnRpdGllcyBjb2xsZWN0aW9uLlxuICpcbiAqIEluY29taW5nIGNvbGxlY3Rpb25zIGNhbiBiZSBNYXBzIG9yIHBsYWluIG9iamVjdHMuXG4gKlxuICogTm90ZSBpZiBpbmNvbWluZ0VudGl0aWVzIGlzIGEgTWFwLCB0aGUgT1JERVIgb2YgdGhlIG1hcCB3aWxsIGJlIHByZXNlcnZlZFxuICogZXZlbiBpZiB0aGUgdmFsdWVzIG9mIGVudGl0aWVzIGluIHRoZSBtYXAgYXJlIHJlcGxhY2VkIGJ5IHZhbHVlcyBmcm9tXG4gKiBleGlzdGluZyBlbnRpdGllcy5cbiAqXG4gKiBAcGFyYW0ge01hcHxPYmplY3R9IGV4aXN0aW5nRW50aXRpZXNcbiAqIEBwYXJhbSB7TWFwfE9iamVjdH0gaW5jb21pbmdFbnRpdGllc1xuICogQHJldHVybiB7TWFwfSBBIG5ldyBjb2xsZWN0aW9uIG9mIGVudGl0aWVzLiBOb3RlIGlmIGV4aXN0aW5nIGVudGl0aWVzIGNhbWUgaW5cbiAqIGFzIGEgcGxhaW4gb2JqZWN0LCB0aGlzIHJldHVybnMgYSBNYXAuXG4gKi9cbmV4cG9ydCBjb25zdCBrZWVwRXhpc3RpbmdFbnRpdGllc0luT2JqZWN0ID0gKFxuXHRleGlzdGluZ0VudGl0aWVzLFxuXHRpbmNvbWluZ0VudGl0aWVzLFxuKSA9PiB7XG5cdGNvbnN0IGdldEV4aXN0aW5nT3JEZWZhdWx0RW50aXR5ID0gKCBkZWZhdWx0RW50aXR5LCBlbnRpdHlJZCApID0+IHtcblx0XHRpZiAoIGlzTWFwKCBleGlzdGluZ0VudGl0aWVzICkgJiYgZXhpc3RpbmdFbnRpdGllcy5oYXMoIGVudGl0eUlkICkgKSB7XG5cdFx0XHRyZXR1cm4gZXhpc3RpbmdFbnRpdGllcy5nZXQoIGVudGl0eUlkICk7XG5cdFx0fVxuXHRcdHJldHVybiBleGlzdGluZ0VudGl0aWVzWyBlbnRpdHlJZCBdIHx8IGRlZmF1bHRFbnRpdHk7XG5cdH07XG5cdGNvbnN0IHJlZHVjZUNhbGxiYWNrID0gKCBtYXBwZWQsIGVudGl0eSwgZW50aXR5SWQgKSA9PiB7XG5cdFx0ZW50aXR5SWQgPSBub3JtYWxpemVFbnRpdHlJZCggZW50aXR5SWQgKTtcblx0XHRtYXBwZWQuc2V0KCBlbnRpdHlJZCwgZ2V0RXhpc3RpbmdPckRlZmF1bHRFbnRpdHkoIGVudGl0eSwgZW50aXR5SWQgKSApO1xuXHRcdHJldHVybiBtYXBwZWQ7XG5cdH07XG5cdHJldHVybiBpc01hcCggaW5jb21pbmdFbnRpdGllcyApID9cblx0XHRtYXBSZWR1Y2VyKCBpbmNvbWluZ0VudGl0aWVzLCByZWR1Y2VDYWxsYmFjaywgbmV3IE1hcCgpICkgOlxuXHRcdHJlZHVjZSggaW5jb21pbmdFbnRpdGllcywgcmVkdWNlQ2FsbGJhY2ssIG5ldyBNYXAoKSApO1xufTtcblxuLyoqXG4gKiBUaGlzIG5vcm1hbGl6ZXMgbnVtZXJpYyB2YWx1ZXMgdG8gaW50ZWdlciBudW1iZXJzIGFuZCBsZWF2ZXMgbm9uIG51bWVyaWNcbiAqIHZhbHVlcyBhbG9uZS5cbiAqXG4gKiBAcGFyYW0geyp9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHsqfSBOb3JtYWxpemVkIHZhbHVlXG4gKi9cbmNvbnN0IG5vcm1hbGl6ZUVudGl0eUlkID0gKCBlbnRpdHlJZCApID0+IHtcblx0Y29uc3Qgb3JpZ2luYWxJZCA9IGVudGl0eUlkO1xuXHRlbnRpdHlJZCA9IHBhcnNlSW50KCBlbnRpdHlJZCwgMTAgKTtcblx0cmV0dXJuIGlzTmFOKCBlbnRpdHlJZCApID8gb3JpZ2luYWxJZCA6IGVudGl0eUlkO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbi8qKlxuICogSW52b2tlcyB0aGUgc2VsZWN0b3IgZm9yIHdoZXRoZXIgYSBnaXZlbiBzZWxlY3Rvck5hbWUgaW4gYSBnaXZlbiByZWdpc3RlcmVkXG4gKiByZWR1Y2VyIHN0b3JlIGlzIGluIHRoZSBtaWRzdCBvZiByZXNvbHZpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVkdWNlcktleVxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yTmFtZVxuICogQHBhcmFtIHsqW119IGFyZ3NcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBXaGV0aGVyIHJlc29sdXRpb24gaXMgaW4gcHJvZ3Jlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1Jlc29sdmluZyA9ICggcmVkdWNlcktleSwgc2VsZWN0b3JOYW1lLCAuLi5hcmdzICkgPT4ge1xuXHRyZXR1cm4gc2VsZWN0KCAnY29yZS9kYXRhJyApLmlzUmVzb2x2aW5nKCByZWR1Y2VyS2V5LCBzZWxlY3Rvck5hbWUsIGFyZ3MgKTtcbn07XG5cbi8qKlxuICogSW52b2tlcyB0aGUgc2VsZWN0b3IgZm9yIHdoZXRoZXIgYSBnaXZlbiBzZWxlY3Rvck5hbWUgaW4gYSBnaXZlbiByZWdpc3RlcmVkXG4gKiByZWR1Y2VyIHN0b3JlIGhhcyBmaW5pc2hlZCByZXNvbHZpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZHVjZXJLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3Rvck5hbWVcbiAqIEBwYXJhbSB7KltdfSBhcmdzXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHJlc29sdXRpb24gaGFzIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0ZpbmlzaGVkUmVzb2x2aW5nID0gKCByZWR1Y2VyS2V5LCBzZWxlY3Rvck5hbWUsIC4uLmFyZ3MgKSA9PiB7XG5cdHJldHVybiBzZWxlY3QoICdjb3JlL2RhdGEnIClcblx0XHQuaGFzRmluaXNoZWRSZXNvbHV0aW9uKCByZWR1Y2VyS2V5LCBzZWxlY3Rvck5hbWUsIGFyZ3MgKTtcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL3JlY2VpdmUtZW50aXRpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWNlaXZlLXJlbGF0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3JlbW92ZS1lbnRpdGllcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlbW92ZS1yZWxhdGlvbnMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUtZW50aXRpZXMtZ2VuZXJhdG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL2NyZWF0ZS1yZWxhdGlvbnMtZ2VuZXJhdG9ycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RlbGV0ZS1lbnRpdHktZ2VuZXJhdG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL2RlbGV0ZS1yZWxhdGlvbnMtZ2VuZXJhdG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL3BlcnNpc3QtZW50aXR5LWdlbmVyYXRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJzaXN0LXJlbGF0aW9ucy1nZW5lcmF0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzZXQnO1xuIiwiY29uc3QgZW50aXRpZXMgPSB7XG5cdFJFQ0VJVkVfRU5USVRZX1JFQ09SRFM6ICdSRUNFSVZFX0VOVElUWV9SRUNPUkRTJyxcblx0UkVDRUlWRV9BTkRfUkVQTEFDRV9FTlRJVFlfUkVDT1JEUzogJ1JFQ0VJVkVfQU5EX1JFUExBQ0VfRU5USVRZX1JFQ09SRFMnLFxuXHRSRUNFSVZFX0VOVElUWTogJ1JFQ0VJVkVfRU5USVRZJyxcblx0UkVNT1ZFX0VOVElUWV9CWV9JRDogJ1JFTU9WRV9FTlRJVFlfQllfSUQnLFxuXHRSRU1PVkVfREVMRVRFX0VOVElUWV9JRDogJ1JFTU9WRV9ERUxFVEVfRU5USVRZX0lEJyxcblx0UkVNT1ZFX1RSQVNIX0VOVElUWV9JRDogJ1JFTU9WRV9UUkFTSF9FTlRJVFlfSUQnLFxuXHRSRUNFSVZFX1RSQVNIX0VOVElUWV9JRDogJ1JFQ0VJVkVfVFJBU0hfRU5USVRZX0lEJyxcblx0UkVDRUlWRV9ERUxFVEVfRU5USVRZX0lEOiAnUkVDRUlWRV9ERUxFVEVfRU5USVRZX0lEJyxcbn07XG5jb25zdCByZWxhdGlvbnMgPSB7XG5cdFJFTU9WRV9ESVJUWV9SRUxBVElPTl9BRERJVElPTjogJ1JFTU9WRV9ESVJUWV9SRUxBVElPTl9BRERJVElPTicsXG5cdFJFTU9WRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTjogJ1JFTU9WRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTicsXG5cdFJFQ0VJVkVfUkVMQVRFRF9FTlRJVFlfSURTOiAnUkVDRUlWRV9SRUxBVEVEX0VOVElUWV9JRFMnLFxuXHRSRU1PVkVfUkVMQVRFRF9FTlRJVFlfSURTOiAnUkVNT1ZFX1JFTEFURURfRU5USVRZX0lEUycsXG5cdFJFTU9WRV9SRUxBVEVEX0VOVElUSUVTX0ZPUl9FTlRJVFk6ICdSRU1PVkVfUkVMQVRFRF9FTlRJVElFU19GT1JfRU5USVRZJyxcblx0UkVDRUlWRV9ESVJUWV9SRUxBVElPTl9BRERJVElPTjogJ1JFQ0VJVkVfRElSVFlfUkVMQVRJT05fQURESVRJT04nLFxuXHRSRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OOiAnUkVDRUlWRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTicsXG5cdFJFQ0VJVkVfVVBEQVRFRF9FTlRJVFlfSURfRk9SX1JFTEFUSU9OUzpcblx0XHQnUkVDRUlWRV9VUERBVEVEX0VOVElUWV9JRF9GT1JfUkVMQVRJT05TJyxcbn07XG5jb25zdCByZXNldHMgPSB7XG5cdFJFU0VUX0FMTF9TVEFURTogJ1JFU0VUX0FMTF9TVEFURScsXG5cdFJFU0VUX1NUQVRFX0ZPUl9NT0RFTDogJ1JFU0VUX1NUQVRFX0ZPUl9NT0RFTCcsXG5cdFJFU0VUX0FMTF9NT0RFTF9TUEVDSUZJQzogJ1JFU0VUX0FMTF9NT0RFTF9TUEVDSUZJQ19TVEFURScsXG5cdFJFU0VUX01PREVMX1NQRUNJRklDX0ZPUl9TRUxFQ1RPUjogJ1JFU0VUX01PREVMX1NQRUNJRklDX0ZPUl9TRUxFQ1RPUicsXG5cdFJFU0VUX01PREVMX1NQRUNJRklDX0ZPUl9TRUxFQ1RPUl9BTkRfQVJHUzpcblx0XHQnUkVTRVRfTU9ERUxfU1BFQ0lGSUNfRk9SX1NFTEVDVE9SX0FORF9BUkdTJyxcbn07XG5cbmNvbnN0IG1vZGVsU3BlY2lmaWMgPSB7XG5cdFJFQ0VJVkVfU0VMRUNUT1JfVkFMVUU6ICdSRUNFSVZFX1NFTEVDVE9SX1ZBTFVFJyxcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVFlQRVMgPSB7IGVudGl0aWVzLCByZWxhdGlvbnMsIG1vZGVsU3BlY2lmaWMsIHJlc2V0cyB9O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGlzTW9kZWxFbnRpdHlGYWN0b3J5T2ZNb2RlbCxcblx0aXNNb2RlbEVudGl0eSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBJbnZhbGlkTW9kZWxFbnRpdHkgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgcmVzb2x2ZVNlbGVjdCwgZGlzcGF0Y2ggfSBmcm9tICcuLi8uLi9iYXNlLWNvbnRyb2xzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIGFzIFNDSEVNQV9SRURVQ0VSX0tFWSB9IGZyb20gJy4uLy4uL3NjaGVtYS9jb25zdGFudHMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgYXMgQ09SRV9SRURVQ0VSX0tFWSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbi8qKlxuICogUmV0dXJucyBhbiBhY3Rpb24gZ2VuZXJhdG9yIGZvciBjcmVhdGluZyBhIG1vZGVsIGVudGl0eSBpbnN0YW5jZSBhbmRcbiAqIGluY2x1ZGluZyBpdCBpbiBhbiBhY3Rpb24gb2JqZWN0IGZvciBhZGRpbmcgdG8gc3RhdGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgVGhlIG5hbWUgb2YgdGhlIG1vZGVsIHRoZSBpbmNvbWluZyBvYmplY3QgaXMgZm9yLlxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eSAgQSBwbGFpbiBvYmplY3QgY29udGFpbmluZyB0aGUgZW50aXR5IHByb3BlcnRpZXMgYW5kXG4gKiB2YWx1ZXNcbiAqIEByZXR1cm4ge251bGx8T2JqZWN0fSAgSWYgdGhlIGVudGl0eSBpcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCB0aGUgbW9kZWwgZW50aXR5XG4gKiBpbnN0YW5jZSBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIG51bGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogY3JlYXRlRW50aXR5KCBtb2RlbE5hbWUsIGVudGl0eSApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBmYWN0b3J5ID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0J2dldEZhY3RvcnlGb3JNb2RlbCcsXG5cdFx0bW9kZWxOYW1lXG5cdCk7XG5cdGlmICggISBpc01vZGVsRW50aXR5RmFjdG9yeU9mTW9kZWwoIGZhY3RvcnksIG1vZGVsTmFtZSApICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IGVudGl0eUluc3RhbmNlID0gZmFjdG9yeS5jcmVhdGVOZXcoIGVudGl0eSApO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlRW50aXR5QW5kUmVzb2x2ZScsXG5cdFx0ZW50aXR5SW5zdGFuY2Vcblx0KTtcblx0cmV0dXJuIGVudGl0eUluc3RhbmNlO1xufVxuXG4vKipcbiAqIEdlbmVyYXRvciBmb3IgeWllbGRpbmcgYWN0aW9ucyBmb3IgYm90aCByZWNlaXZpbmcgYVxuICogQmFzZUVudGl0eSBpbnN0YW5jZSBhbmQgcmVzb2x2aW5nIHRoZSByZWxhdGVkIHNlbGVjdG9yIGZvciByZXRyaWV2aW5nIHRoYXRcbiAqIGVudGl0eSBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24qIHJlY2VpdmVFbnRpdHlBbmRSZXNvbHZlKCBlbnRpdHkgKSB7XG5cdGFzc2VydElzTW9kZWxFbnRpdHkoIGVudGl0eSApO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlRW50aXR5Jyxcblx0XHRlbnRpdHlcblx0KTtcblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0J2NvcmUvZGF0YScsXG5cdFx0J2ZpbmlzaFJlc29sdXRpb24nLFxuXHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0J2dldEVudGl0eUJ5SWQnLFxuXHRcdFsgZW50aXR5Lm1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpLCBlbnRpdHkuaWQgXVxuXHQpO1xufVxuXG4vKipcbiAqIFNhbWUgYXMgcmVjZWl2ZXNFbnRpdHlBbmRSZXNvbHZlIGV4Y2VwdCB0aGlzIGhhbmRsZXMgbXVsdGlwbGUgZW50aXRpZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge0FycmF5PEJhc2VFbnRpdHk+fWVudGl0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogcmVjZWl2ZUVudGl0aWVzQW5kUmVzb2x2ZSggbW9kZWxOYW1lLCBlbnRpdGllcyApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBlbnRpdHlJZHMgPSBlbnRpdGllcy5tYXAoXG5cdFx0KCBlbnRpdHkgKSA9PiB7XG5cdFx0XHRhc3NlcnRJc01vZGVsRW50aXR5KCBlbnRpdHkgKTtcblx0XHRcdHJldHVybiBlbnRpdHkuaWQ7XG5cdFx0fVxuXHQpO1xuXHR3aGlsZSAoIGVudGl0eUlkcy5sZW5ndGggPiAwICkge1xuXHRcdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFx0J2NvcmUvZGF0YScsXG5cdFx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdFx0J2dldEVudGl0eUJ5SWQnLFxuXHRcdFx0WyBtb2RlbE5hbWUsIGVudGl0eUlkcy5wb3AoKSBdXG5cdFx0KTtcblx0fVxuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlRW50aXR5UmVjb3JkcycsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0aWVzLFxuXHQpO1xufVxuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBtb2RlbCBlbnRpdHkgYW5kIHRocm93c1xuICogSW52YWxpZE1vZGVsRW50aXR5IGlmIGl0IGlzIG5vdC5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eVxuICogQHRocm93cyBJbnZhbGlkTW9kZWxFbnRpdHlcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0SXNNb2RlbEVudGl0eSggZW50aXR5ICkge1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eSggZW50aXR5ICkgKSB7XG5cdFx0dGhyb3cgbmV3IEludmFsaWRNb2RlbEVudGl0eShcblx0XHRcdCdyZWNlaXZlRW50aXR5SWRBbmRSZXNvbHZlIGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgQmFzZUVudGl0eScsXG5cdFx0XHRlbnRpdHksXG5cdFx0KTtcblx0fVxufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBzaW5ndWxhck1vZGVsTmFtZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuaW1wb3J0IHsgSW52YWxpZE1vZGVsRW50aXR5IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5pbXBvcnQgeyBnZXRJZHNGcm9tQmFzZUVudGl0eUFycmF5IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBkaXNwYXRjaCwgc2VsZWN0LCByZXNvbHZlU2VsZWN0IH0gZnJvbSAnLi4vLi4vYmFzZS1jb250cm9scyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQWN0aW9uIGdlbmVyYXRvciB5aWVsZGluZyBhY3Rpb25zIHRoYXQgYWRkIHRoZSByZWxhdGlvbiB0byB0aGUgc3RhdGUgZm9yIGFcbiAqIHNpbmdsZSByZWxhdGlvbiBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IHJlbGF0aW9uRW50aXR5XG4gKi9cbmZ1bmN0aW9uKiBjcmVhdGVSZWxhdGlvbihcblx0bW9kZWxOYW1lLFxuXHRlbnRpdHlJZCxcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvbkVudGl0eVxuKSB7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIHJlbGF0aW9uRW50aXR5LCByZWxhdGlvbk5hbWUgKSApIHtcblx0XHR3YXJuaW5nKFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHQnVGhlIHByb3ZpZGVkIHJlbGF0aW9uIGVudGl0eSAoJXMpIGlzIG5vdCBhIGJhc2UgZW50aXR5IGluc3RhbmNlJyArXG5cdFx0XHQnIGZvciB0aGUgJXMgcmVsYXRpb24gbW9kZWwnLFxuXHRcdFx0cmVsYXRpb25FbnRpdHksXG5cdFx0XHRyZWxhdGlvbk5hbWVcblx0XHQpO1xuXHRcdHJldHVybjtcblx0fVxuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRSRURVQ0VSX0tFWSxcblx0XHQncmVjZWl2ZUVudGl0eUFuZFJlc29sdmUnLFxuXHRcdHJlbGF0aW9uRW50aXR5XG5cdCk7XG5cdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFJFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlUmVsYXRlZEVudGl0aWVzJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdFsgcmVsYXRpb25FbnRpdHkuaWQgXVxuXHQpO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRSRURVQ0VSX0tFWSxcblx0XHQncmVjZWl2ZURpcnR5UmVsYXRpb25BZGRpdGlvbicsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5LmlkLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0KTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gZ2VuZXJhdG9yIHlpZWxkaW5nIGFjdGlvbnMgdGhhdCBhZGQgdGhlIHJlbGF0aW9uIHRvIHRoZSBzdGF0ZSBmb3JcbiAqIG11bHRpcGxlIHJlbGF0aW9uIGVudGl0aWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHBhcmFtIHtBcnJheTxCYXNlRW50aXR5Pn0gcmVsYXRpb25FbnRpdGllc1xuICovXG5mdW5jdGlvbiogY3JlYXRlUmVsYXRpb25zKFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuXHRyZWxhdGlvbk5hbWUsXG5cdHJlbGF0aW9uRW50aXRpZXMsXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cblx0dHJ5IHtcblx0XHRhc3NlcnRBcnJheUhhc0VudGl0aWVzRm9yTW9kZWwoIHJlbGF0aW9uRW50aXRpZXMsIHJlbGF0aW9uTmFtZSApO1xuXHR9IGNhdGNoICggZXhjZXB0aW9uICkge1xuXHRcdHdhcm5pbmcoXG5cdFx0XHRmYWxzZSxcblx0XHRcdCdJbmNvbWluZyByZWxhdGlvbiBFbnRpdGllcyBkbyBub3QgY29udGFpbiBCYXNlRW50aXR5IGluc3RhbmNlcyAnICtcblx0XHRcdCdmb3IgdGhlIGdpdmVuIHJlbGF0aW9uIG1vZGVsICglcyknLFxuXHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IHJlbGF0aW9uSWRzID0gZ2V0SWRzRnJvbUJhc2VFbnRpdHlBcnJheSggcmVsYXRpb25FbnRpdGllcyApO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRSRURVQ0VSX0tFWSxcblx0XHQncmVjZWl2ZUVudGl0aWVzQW5kUmVzb2x2ZScsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXRpZXNcblx0KTtcblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J3JlY2VpdmVSZWxhdGVkRW50aXRpZXMnLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0cmVsYXRpb25JZHMsXG5cdCk7XG5cdGNvbnN0IG1vZGVsRW50aXR5ID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRSRURVQ0VSX0tFWSxcblx0XHQnZ2V0RW50aXR5QnlJZCcsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHQpO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0ZWRFbnRpdGllcycsXG5cdFx0WyBtb2RlbEVudGl0eSwgcmVsYXRpb25OYW1lIF1cblx0KTtcblx0Y29uc3QgcmVsYXRpb25zVG9SZXNvbHZlID0gWyAuLi5yZWxhdGlvbkVudGl0aWVzIF07XG5cdHdoaWxlICggcmVsYXRpb25zVG9SZXNvbHZlLmxlbmd0aCA+IDAgKSB7XG5cdFx0Y29uc3QgcmVsYXRpb25FbnRpdHkgPSByZWxhdGlvbnNUb1Jlc29sdmUucG9wKCk7XG5cdFx0eWllbGQgZGlzcGF0Y2goXG5cdFx0XHRSRURVQ0VSX0tFWSxcblx0XHRcdCdyZWNlaXZlRGlydHlSZWxhdGlvbkFkZGl0aW9uJyxcblx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdHJlbGF0aW9uRW50aXR5LmlkLFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZW50aXR5SWQsXG5cdFx0KTtcblx0XHR5aWVsZCBkaXNwYXRjaChcblx0XHRcdCdjb3JlL2RhdGEnLFxuXHRcdFx0J2ZpbmlzaFJlc29sdXRpb24nLFxuXHRcdFx0UkVEVUNFUl9LRVksXG5cdFx0XHQnZ2V0UmVsYXRlZEVudGl0aWVzJyxcblx0XHRcdFsgcmVsYXRpb25FbnRpdHksIG1vZGVsTmFtZSBdXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgYWN0aW9uIGlzIHVzZWQgdG8gZW5zdXJlIGEgcmVsYXRpb24gRW50aXR5IHJlbGF0ZWQgdG8gdGhlIGdpdmVuXG4gKiBtb2RlbCBlbnRpdHkgaWQgaXMgYm90aCBhZGRlZCB0byB0aGUgc3RhdGUgYW5kIHZhcmlvdXMgc2VsZWN0b3JzIGZvciB0aGVzZVxuICogYXJlIHJlc29sdmVkIHNvIG5vIGFkZGl0aW9uYWwgcmVzb2x1dGlvbiBoYXBwZW5zIGZvciB0aGVzZS5cbiAqXG4gKiBUaGUgcHVycG9zZSBmb3IgdGhpcyBhY3Rpb24gaXMgdG8gYWxsb3cgZm9yIGRvaW5nIG1vcmUgZWZmaWNpZW50IGJhdGNoXG4gKiBxdWVyaWVzIG9mIGVudGl0aWVzIGZyb20gYW4gYXBpIHJlcXVlc3QgYW5kIHRoZW4gdHJpZ2dlcmluZyB0aGUgcmVzb2x1dGlvbiBvZlxuICogYW55IG1vcmUgZ3JhbnVsYXIgc2VsZWN0b3JzIHRoYXQgaGF2ZSByZXNvbHZlcnMuICBUaGlzIGJhc2ljYWxseSBhbGxvd3Mgb25lXG4gKiB0byBoeWRyYXRlIHRoZSBgZXZlbnRlc3ByZXNzby9jb3JlYCBzdGF0ZSB3aXRoIG1vcmUgZWZmaWNpZW50IHF1ZXJpZXMuXG4gKlxuICogQHBhcmFtIHtCYXNlRW50aXR5fSByZWxhdGlvbkVudGl0eVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBtb2RlbElkXG4gKi9cbmZ1bmN0aW9uKiByZXNvbHZlUmVsYXRpb25SZWNvcmRGb3JSZWxhdGlvbihcblx0cmVsYXRpb25FbnRpdHksXG5cdG1vZGVsTmFtZSxcblx0bW9kZWxJZFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0Y29uc3QgcmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uRW50aXR5Lm1vZGVsTmFtZSApO1xuXHRjb25zdCBoYXNFbnRpdHkgPSB5aWVsZCBzZWxlY3QoXG5cdFx0J2NvcmUvZGF0YScsXG5cdFx0J2hhc0ZpbmlzaGVkUmVzb2x1dGlvbicsXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldEVudGl0eUJ5SWQnLFxuXHRcdFsgcmVsYXRpb25OYW1lLCByZWxhdGlvbkVudGl0eS5pZCBdXG5cdCk7XG5cdHJlbGF0aW9uRW50aXR5ID0gaGFzRW50aXR5ID9cblx0XHR5aWVsZCBzZWxlY3QoXG5cdFx0XHRSRURVQ0VSX0tFWSxcblx0XHRcdCdnZXRFbnRpdHlCeUlkJyxcblx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdHJlbGF0aW9uRW50aXR5LmlkXG5cdFx0KSA6XG5cdFx0cmVsYXRpb25FbnRpdHk7XG5cdGlmICggISBoYXNFbnRpdHkgKSB7XG5cdFx0eWllbGQgZGlzcGF0Y2goXG5cdFx0XHRSRURVQ0VSX0tFWSxcblx0XHRcdCdyZWNlaXZlRW50aXR5QW5kUmVzb2x2ZScsXG5cdFx0XHRyZWxhdGlvbkVudGl0eVxuXHRcdCk7XG5cdH1cblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J3JlY2VpdmVSZWxhdGVkRW50aXRpZXMnLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRtb2RlbElkLFxuXHRcdHJlbGF0aW9uTmFtZSxcblx0XHRbIHJlbGF0aW9uRW50aXR5LmlkIF1cblx0KTtcblx0Y29uc3QgbW9kZWxFbnRpdHkgPSB5aWVsZCByZXNvbHZlU2VsZWN0KFxuXHRcdFJFRFVDRVJfS0VZLFxuXHRcdCdnZXRFbnRpdHlCeUlkJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0bW9kZWxJZFxuXHQpO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0ZWRFbnRpdGllcycsXG5cdFx0WyBtb2RlbEVudGl0eSwgcmVsYXRpb25OYW1lIF1cblx0KTtcblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0J2NvcmUvZGF0YScsXG5cdFx0J2ZpbmlzaFJlc29sdXRpb24nLFxuXHRcdFJFRFVDRVJfS0VZLFxuXHRcdCdnZXRSZWxhdGVkRW50aXRpZXMnLFxuXHRcdFsgcmVsYXRpb25FbnRpdHksIG1vZGVsTmFtZSBdXG5cdCk7XG59XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRoZSBwcm92aWRlZCBtYXAgaGFzIEJhc2VFbnRpdHkgaW5zdGFuY2VzIGZvciB0aGUgZXhwZWN0ZWRcbiAqIG1vZGVsIG5hbWUuXG4gKlxuICogQHBhcmFtIHtBcnJheTxCYXNlRW50aXR5Pn0gZW50aXRpZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk1vZGVsTmFtZSBFeHBlY3RlZCB0byBiZSB0aGUgc2luZ3VsYXIgZm9ybSBmb3IgdGhlXG4gKiBtb2RlbE5hbWUuXG4gKiBAdGhyb3dzIEludmFsaWRNb2RlbEVudGl0eVxuICovXG5jb25zdCBhc3NlcnRBcnJheUhhc0VudGl0aWVzRm9yTW9kZWwgPSAoIGVudGl0aWVzLCByZWxhdGlvbk1vZGVsTmFtZSApID0+IHtcblx0cmVsYXRpb25Nb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25Nb2RlbE5hbWUgKTtcblx0Zm9yICggY29uc3QgZW50aXR5IG9mIGVudGl0aWVzICkge1xuXHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggZW50aXR5LCByZWxhdGlvbk1vZGVsTmFtZSApICkge1xuXHRcdFx0dGhyb3cgbmV3IEludmFsaWRNb2RlbEVudGl0eSggJycsIGVudGl0eSApO1xuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0IHsgY3JlYXRlUmVsYXRpb24sIGNyZWF0ZVJlbGF0aW9ucywgcmVzb2x2ZVJlbGF0aW9uUmVjb3JkRm9yUmVsYXRpb24gfTtcbiIsIi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQgeyByZW1vdmVFbnRpdHlCeUlkIH0gZnJvbSAnLi9yZW1vdmUtZW50aXRpZXMnO1xuaW1wb3J0IHtcblx0cmVjZWl2ZVRyYXNoRW50aXR5SWQsXG5cdHJlY2VpdmVEZWxldGVFbnRpdHlJZCxcbn0gZnJvbSAnLi9yZWNlaXZlLWVudGl0aWVzJztcbmltcG9ydCB7IHJlbW92ZUFsbFJlbGF0ZWRFbnRpdGllc0Zvck1vZGVsRW50aXR5IH0gZnJvbSAnLi9yZW1vdmUtcmVsYXRpb25zJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgeWllbGRpbmcgYWN0aW9ucyBmb3IgcXVldWluZyBhbiBlbnRpdHkgZGVsZXRlIHJlY29yZFxuICogaW4gdGhlIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICovXG5leHBvcnQgZnVuY3Rpb24qIGRlbGV0ZUVudGl0eUJ5SWQoIG1vZGVsTmFtZSwgZW50aXR5SWQgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0eWllbGQgcmVtb3ZlRW50aXR5QnlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xuXHQvLyByZW1vdmUgYW55IHJlbGF0aW9uIHJlY29yZHMgZm9yIHRoaXMgZW50aXR5XG5cdHlpZWxkIHJlbW92ZUFsbFJlbGF0ZWRFbnRpdGllc0Zvck1vZGVsRW50aXR5KCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdHlpZWxkIHJlY2VpdmVEZWxldGVFbnRpdHlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgeWllbGRpbmcgYWN0aW9ucyBmb3IgcXVldWVpbmcgYW4gZW50aXR5IHRyYXNoIHJlY29yZCBpbiB0aGVcbiAqIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICovXG5leHBvcnQgZnVuY3Rpb24qIHRyYXNoRW50aXR5QnlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHR5aWVsZCByZW1vdmVFbnRpdHlCeUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdHlpZWxkIHJlbW92ZUFsbFJlbGF0ZWRFbnRpdGllc0Zvck1vZGVsRW50aXR5KCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdHlpZWxkIHJlY2VpdmVUcmFzaEVudGl0eUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG59XG4iLCIvKipcbiAqIEludGVybmFsIEltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0cmVjZWl2ZURpcnR5UmVsYXRpb25EZWxldGlvbixcbn0gZnJvbSAnLi9yZWNlaXZlLXJlbGF0aW9ucyc7XG5pbXBvcnQge1xuXHRyZW1vdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24sXG5cdHJlbW92ZVJlbGF0ZWRFbnRpdGllcyxcbn0gZnJvbSAnLi9yZW1vdmUtcmVsYXRpb25zJztcbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBzaW5ndWxhck1vZGVsTmFtZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcblxuLyoqXG4gKiBBY3Rpb24gZ2VuZXJhdG9yIHlpZWxkaW5nIGFjdGlvbnMgZm9yIGhhbmRsaW5nIHJlbW92aW5nIHRoZSBxdWV1ZWQgcmVsYXRpb25zXG4gKiBmb3IgYWRkaXRpb24gaW4gdGhlIHN0YXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gcmVsYXRpb25FbnRpdHlJZFxuICovXG5mdW5jdGlvbiogcmVtb3ZlRGlydHlSZWxhdGlvbkZvckFkZGl0aW9uKFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuXHRyZWxhdGlvbk5hbWUsXG5cdHJlbGF0aW9uRW50aXR5SWQsXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHR5aWVsZCByZW1vdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24oXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHQpO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgeWllbGRpbmcgYWN0aW9ucyBmb3IgYWN0aW9ucyBmb3IgcXVldWluZyB0aGUgcmVtb3ZhbCBvZiBhXG4gKiByZWxhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWxhdGlvbkVudGl0eUlkXG4gKi9cbmZ1bmN0aW9uKiByZW1vdmVSZWxhdGlvbkZvckVudGl0eShcblx0bW9kZWxOYW1lLFxuXHRlbnRpdHlJZCxcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvbkVudGl0eUlkXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdHlpZWxkIHJlbW92ZVJlbGF0ZWRFbnRpdGllcyhcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdFsgcmVsYXRpb25FbnRpdHlJZCBdLFxuXHQpO1xuXHR5aWVsZCByZW1vdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24oXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHRcdHJlbGF0aW9uTmFtZSxcblx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHQpO1xuXG5cdHlpZWxkIHJlY2VpdmVEaXJ0eVJlbGF0aW9uRGVsZXRpb24oXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkXG5cdCk7XG59XG5cbmV4cG9ydCB7IHJlbW92ZURpcnR5UmVsYXRpb25Gb3JBZGRpdGlvbiwgcmVtb3ZlUmVsYXRpb25Gb3JFbnRpdHkgfTtcbiIsImV4cG9ydCAqIGZyb20gJy4vYWN0aW9uLWNyZWF0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9uLWdlbmVyYXRvcnMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzLlxuICovXG5pbXBvcnQge1xuXHRpc01vZGVsRW50aXR5T2ZNb2RlbCxcblx0aXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7XG5cdGFwcGx5UXVlcnlTdHJpbmcsXG5cdGtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUsXG5cdHNpbmd1bGFyTW9kZWxOYW1lLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc0FycmF5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHMuXG4gKi9cbmltcG9ydCB7XG5cdGZldGNoLFxuXHRzZWxlY3QsXG5cdGRpc3BhdGNoLFxuXHRyZXNvbHZlU2VsZWN0LFxuXHRyZXNvbHZlRGlzcGF0Y2gsXG59IGZyb20gJy4uLy4uL2Jhc2UtY29udHJvbHMnO1xuaW1wb3J0IHtcblx0cmVtb3ZlRW50aXR5QnlJZCxcblx0cmVtb3ZlRGVsZXRlRW50aXR5SWQsXG5cdHJlbW92ZVRyYXNoRW50aXR5SWQsXG59IGZyb20gJy4vcmVtb3ZlLWVudGl0aWVzJztcbmltcG9ydCB7IHJlY2VpdmVBbmRSZXBsYWNlRW50aXR5UmVjb3JkcyB9IGZyb20gJy4vcmVjZWl2ZS1lbnRpdGllcyc7XG5pbXBvcnQgeyByZWNlaXZlVXBkYXRlZEVudGl0eUlkRm9yUmVsYXRpb25zIH0gZnJvbSAnLi9yZWNlaXZlLXJlbGF0aW9ucyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSBhcyBDT1JFX1JFRFVDRVJfS0VZIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIGFzIFNDSEVNQV9SRURVQ0VSX0tFWSB9IGZyb20gJy4uLy4uL3NjaGVtYS9jb25zdGFudHMnO1xuXG5jb25zdCBERUZBVUxUX0VNUFRZX09CSkVDVCA9IHt9O1xuY29uc3QgREVGQVVMVF9FTVBUWV9BUlJBWSA9IFtdO1xuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgZm9yIHBlcnNpc3RpbmcgYW4gZW50aXR5IHJlY29yZCAoaW5zZXJ0L3VwZGF0ZSlcbiAqIHRvIHRoZSBzZXJ2ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtCYXNlRW50aXR5fSBlbnRpdHlcbiAqIEByZXR1cm4ge251bGx8QmFzZUVudGl0eX0gSWYgc3VjY2Vzc2Z1bGx5IHBlcnNpc3RlZCB0aGUgcGVyc2lzdGVkIGVudGl0eSBpc1xuICogcmV0dXJuZWQuICBPdGhlcndpc2UgbnVsbC5cbiAqL1xuZnVuY3Rpb24qIHBlcnNpc3RFbnRpdHlSZWNvcmQoIG1vZGVsTmFtZSwgZW50aXR5ICkge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdC8vIGNoZWNrIGlmIGlzIGFuIGluc3RhbmNlIG9mIEJhc2VFbnRpdHlcblx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBlbnRpdHksIG1vZGVsTmFtZSApICkge1xuXHRcdHdhcm5pbmcoXG5cdFx0XHRmYWxzZSxcblx0XHRcdCdUaGUgcHJvdmlkZWQgZW50aXR5IGlzIG5vdCBhIEJhc2VFbnRpdHkgY2hpbGQgZm9yIHRoZSAnICtcblx0XHRcdCdwcm92aWRlZCBtb2RlbC4nXG5cdFx0KTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHQvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgaW4gdGhlIGVudGl0eVxuXHRpZiAoIGVudGl0eS5pc0NsZWFuICkge1xuXHRcdHdhcm5pbmcoXG5cdFx0XHRmYWxzZSxcblx0XHRcdCdUaGUgZW50aXR5IHByb3ZpZGVkIGhhcyBubyBjaGFuZ2VzIHRvIHBlcnNpc3QuJ1xuXHRcdCk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgZmFjdG9yeSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRGYWN0b3J5Rm9yTW9kZWwnLFxuXHRcdG1vZGVsTmFtZVxuXHQpO1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsKCBmYWN0b3J5LCBtb2RlbE5hbWUgKSApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRjb25zdCBwYXRoID0gYXBwbHlRdWVyeVN0cmluZyggbW9kZWxOYW1lICk7XG5cdGNvbnN0IHVwZGF0ZWRFbnRpdHkgPSB5aWVsZCBmZXRjaCgge1xuXHRcdHBhdGg6IGVudGl0eS5pc05ldyA/IHBhdGggOiBwYXRoICsgJy8nICsgZW50aXR5LmlkLFxuXHRcdG1ldGhvZDogZW50aXR5LmlzTmV3ID8gJ1BPU1QnIDogJ1BVVCcsXG5cdFx0ZGF0YTogZW50aXR5LmZvclBlcnNpc3QsXG5cdH0gKTtcblx0aWYgKCBpc0VtcHR5KCB1cGRhdGVkRW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgdXBkYXRlZEVudGl0eVJlY29yZCA9IGZhY3RvcnkuZnJvbUV4aXN0aW5nKCB1cGRhdGVkRW50aXR5ICk7XG5cdGNvbnN0IG5ld0lkID0gdXBkYXRlZEVudGl0eVJlY29yZC5pZDtcblx0aWYgKCBlbnRpdHkuaXNOZXcgKSB7XG5cdFx0eWllbGQgcmVtb3ZlRW50aXR5QnlJZCggbW9kZWxOYW1lLCBlbnRpdHkuaWQgKTtcblx0XHR5aWVsZCBkaXNwYXRjaChcblx0XHRcdCdjb3JlL2RhdGEnLFxuXHRcdFx0J2ZpbmlzaFJlc29sdXRpb24nLFxuXHRcdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHRcdCdnZXRFbnRpdHlCeUlkJyxcblx0XHRcdFsgbW9kZWxOYW1lLCBuZXdJZCBdXG5cdFx0KTtcblx0XHR5aWVsZCByZWNlaXZlVXBkYXRlZEVudGl0eUlkRm9yUmVsYXRpb25zKCBtb2RlbE5hbWUsIGVudGl0eS5pZCwgbmV3SWQgKTtcblx0fVxuXHR5aWVsZCByZWNlaXZlQW5kUmVwbGFjZUVudGl0eVJlY29yZHMoXG5cdFx0bW9kZWxOYW1lLFxuXHRcdFsgdXBkYXRlZEVudGl0eVJlY29yZCBdXG5cdCk7XG5cdHJldHVybiB1cGRhdGVkRW50aXR5UmVjb3JkO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgZm9yIHBlcnNpc3RpbmcgZW50aXRpZXMgd2l0aCB0aGUgZ2l2ZW4gaWQgdG8gdGhlIHNlcnZlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEByZXR1cm4ge0Jhc2VFbnRpdHl8bnVsbH0gSWYgdGhlIGVudGl0eSBpcyBzdWNjZXNzZnVsbHkgcGVyc2lzdGVkIGl0IGlzXG4gKiByZXR1cm5lZCAobWF5IGhhdmUgYSBuZXcgaWQhKSwgb3RoZXJ3aXNlIG51bGwgaXMgcmV0dXJuZWQuXG4gKi9cbmZ1bmN0aW9uKiBwZXJzaXN0Rm9yRW50aXR5SWQoIG1vZGVsTmFtZSwgZW50aXR5SWQgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0Y29uc3QgZW50aXR5ID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRFbnRpdHlCeUlkJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdCk7XG5cdGlmICggaXNNb2RlbEVudGl0eU9mTW9kZWwoIGVudGl0eSwgbW9kZWxOYW1lICkgKSB7XG5cdFx0Y29uc3QgcGVyc2lzdGVkRW50aXR5ID0geWllbGQgZGlzcGF0Y2goXG5cdFx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdFx0J3BlcnNpc3RFbnRpdHlSZWNvcmQnLFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZW50aXR5XG5cdFx0KTtcblx0XHRyZXR1cm4gaXNNb2RlbEVudGl0eU9mTW9kZWwoIHBlcnNpc3RlZEVudGl0eSwgbW9kZWxOYW1lICkgP1xuXHRcdFx0cGVyc2lzdGVkRW50aXR5IDpcblx0XHRcdG51bGw7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQWN0aW9uIGdlbmVyYXRvciBmb3IgcGVyc2lzdGluZyBlbnRpdGllcyB3aXRoIHRoZSBnaXZlbiBpZHMgdG8gdGhlIHNlcnZlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge0FycmF5fSBlbnRpdHlJZHNcbiAqIEByZXR1cm4ge09iamVjdH0gRW50aXRpZXMgcGVyc2lzdGVkIGluZGV4ZWQgYnkgSUQuXG4gKi9cbmZ1bmN0aW9uKiBwZXJzaXN0Rm9yRW50aXR5SWRzKCBtb2RlbE5hbWUsIGVudGl0eUlkcyA9IFtdICkge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdGNvbnN0IGVudGl0aWVzID0geWllbGQgc2VsZWN0KFxuXHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0J2dldEVudGl0aWVzQnlJZHMnLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZHMsXG5cdCk7XG5cdGNvbnN0IHJldHJpZXZlZEVudGl0aWVzID0gaXNBcnJheSggZW50aXRpZXMgKSA/XG5cdFx0a2V5RW50aXRpZXNCeVByaW1hcnlLZXlWYWx1ZSggJ2V2ZW50JywgZW50aXRpZXMgKSA6XG5cdFx0bmV3IE1hcCgpO1xuXHRjb25zdCByZXRyaWV2ZWRJZHMgPSBBcnJheS5mcm9tKCByZXRyaWV2ZWRFbnRpdGllcy5rZXlzKCkgKTtcblx0aWYgKCByZXRyaWV2ZWRJZHMubGVuZ3RoIDwgMSApIHtcblx0XHRyZXR1cm4gREVGQVVMVF9FTVBUWV9PQkpFQ1Q7XG5cdH1cblx0Y29uc3QgcGVyc2lzdGVkRW50aXRpZXMgPSB7fTtcblx0d2hpbGUgKCByZXRyaWV2ZWRJZHMubGVuZ3RoID4gMCApIHtcblx0XHRjb25zdCBwZXJzaXN0ZWRFbnRpdHkgPSB5aWVsZCBkaXNwYXRjaChcblx0XHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0XHQncGVyc2lzdEVudGl0eVJlY29yZCcsXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRyZXRyaWV2ZWRFbnRpdGllcy5nZXQoIHJldHJpZXZlZElkcy5wb3AoKSApXG5cdFx0KTtcblx0XHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBwZXJzaXN0ZWRFbnRpdHksIG1vZGVsTmFtZSApICkge1xuXHRcdFx0cGVyc2lzdGVkRW50aXRpZXNbIHBlcnNpc3RlZEVudGl0eS5pZCBdID0gcGVyc2lzdGVkRW50aXR5O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcGVyc2lzdGVkRW50aXRpZXM7XG59XG5cbi8qKlxuICogQWN0aW9uIGdlbmVyYXRvciBmb3IgcGVyc2lzdGluZyBhbnkgcXVldWVkIGRlbGV0ZXMgZm9yIHRoZSBnaXZlbiBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgZW50aXR5IGlkcyBmb3IgZW50aXRpZXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuXG4gKi9cbmZ1bmN0aW9uKiBwZXJzaXN0RGVsZXRlc0Zvck1vZGVsKCBtb2RlbE5hbWUgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0Y29uc3QgZW50aXR5SWRzID0geWllbGQgc2VsZWN0KFxuXHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0J2dldEVudGl0eUlkc1F1ZXVlZEZvckRlbGV0ZScsXG5cdFx0bW9kZWxOYW1lXG5cdCk7XG5cdGlmICggZW50aXR5SWRzLmxlbmd0aCA8IDAgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfRU1QVFlfQVJSQVk7XG5cdH1cblx0Y29uc3QgZGVsZXRlZElkcyA9IFtdO1xuXHR3aGlsZSAoIGVudGl0eUlkcy5sZW5ndGggPiAwICkge1xuXHRcdGNvbnN0IGVudGl0eUlkID0gZW50aXR5SWRzLnBvcCgpO1xuXHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgZmV0Y2goIHtcblx0XHRcdHBhdGg6IGFwcGx5UXVlcnlTdHJpbmcoIG1vZGVsTmFtZSApICsgJy8nICsgZW50aXR5SWQsXG5cdFx0XHRkYXRhOiB7IGZvcmNlOiB0cnVlIH0sXG5cdFx0XHRtZXRob2Q6ICdERUxFVEUnLFxuXHRcdH0gKTtcblx0XHRpZiAoIHJlc3BvbnNlLmRlbGV0ZWQgKSB7XG5cdFx0XHRkZWxldGVkSWRzLnB1c2goIGVudGl0eUlkICk7XG5cdFx0XHR5aWVsZCByZW1vdmVEZWxldGVFbnRpdHlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVsZXRlZElkcztcbn1cblxuLyoqXG4gKiBBY3Rpb24gZ2VuZXJhdG9yIGZvciBwZXJzaXN0aW5nIGFueSBxdWV1ZWQgdHJhc2hlcyBmb3IgdGhlIGdpdmVuIG1vZGVsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBlbnRpdHkgaWRzIGZvciBlbnRpdGllcyBzdWNjZXNzZnVsbHkgdHJhc2hlZC5cbiAqL1xuZnVuY3Rpb24qIHBlcnNpc3RUcmFzaGVzRm9yTW9kZWwoIG1vZGVsTmFtZSApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBlbnRpdHlJZHMgPSB5aWVsZCBzZWxlY3QoXG5cdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0RW50aXR5SWRzUXVldWVkRm9yVHJhc2gnLFxuXHRcdG1vZGVsTmFtZVxuXHQpO1xuXHRpZiAoIGVudGl0eUlkcy5sZW5ndGggPCAxICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHR9XG5cdGNvbnN0IHRyYXNoZWRJZHMgPSBbXTtcblx0d2hpbGUgKCBlbnRpdHlJZHMubGVuZ3RoID4gMCApIHtcblx0XHRjb25zdCBlbnRpdHlJZCA9IGVudGl0eUlkcy5wb3AoKTtcblx0XHRjb25zdCBzdWNjZXNzID0geWllbGQgZmV0Y2goIHtcblx0XHRcdHBhdGg6IGFwcGx5UXVlcnlTdHJpbmcoIG1vZGVsTmFtZSApICsgJy8nICsgZW50aXR5SWQsXG5cdFx0XHRtZXRob2Q6ICdERUxFVEUnLFxuXHRcdH0gKTtcblx0XHRpZiAoIHN1Y2Nlc3MgKSB7XG5cdFx0XHR0cmFzaGVkSWRzLnB1c2goIGVudGl0eUlkICk7XG5cdFx0XHR5aWVsZCByZW1vdmVUcmFzaEVudGl0eUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cmFzaGVkSWRzO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgZm9yIHBlcnNpc3RpbmcgcXVldWVkIGRlbGV0ZSBhbmQgdHJhc2ggYWN0aW9ucyBmb3IgYWxsXG4gKiBtb2RlbHMgaW4gdGhlIHN0YXRlLlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gQW4gb2JqZWN0IGluZGV4ZWQgYnkgZGVsZXRlL3RyYXNoIGNvbnRhaW5pbmcgYW4gYXJyYXkgb2ZcbiAqIGVudGl0eSBpZHMgdGhhdCB3ZXJlIHBlcnNpc3RlZC5cbiAqL1xuZnVuY3Rpb24qIHBlcnNpc3RBbGxEZWxldGVzKCkge1xuXHRjb25zdCBtb2RlbHNGb3JEZWxldGUgPSB5aWVsZCBzZWxlY3QoXG5cdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0TW9kZWxzUXVldWVkRm9yRGVsZXRlJ1xuXHQpO1xuXHRpZiAoIG1vZGVsc0ZvckRlbGV0ZS5sZW5ndGggPCAxICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX09CSkVDVDtcblx0fVxuXHRjb25zdCBkZWxldGVkSWRzID0ge307XG5cdHdoaWxlICggbW9kZWxzRm9yRGVsZXRlLmxlbmd0aCA+IDAgKSB7XG5cdFx0Y29uc3QgbW9kZWxGb3JEZWxldGUgPSBtb2RlbHNGb3JEZWxldGUucG9wKCk7XG5cdFx0Y29uc3QgaWRzRGVsZXRlZCA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0XHQncGVyc2lzdERlbGV0ZXNGb3JNb2RlbCcsXG5cdFx0XHRtb2RlbEZvckRlbGV0ZVxuXHRcdCk7XG5cdFx0aWYgKCAhIGlzRW1wdHkoIGlkc0RlbGV0ZWQgKSApIHtcblx0XHRcdGRlbGV0ZWRJZHNbIG1vZGVsRm9yRGVsZXRlIF0gPSBpZHNEZWxldGVkO1xuXHRcdH1cblx0fVxuXHRjb25zdCBtb2RlbHNGb3JUcmFzaCA9IHlpZWxkIHNlbGVjdChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRNb2RlbHNRdWV1ZWRGb3JUcmFzaCdcblx0KTtcblx0aWYgKCBtb2RlbHNGb3JUcmFzaC5sZW5ndGggPCAxICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX09CSkVDVDtcblx0fVxuXHRjb25zdCB0cmFzaGVkSWRzID0ge307XG5cdHdoaWxlICggbW9kZWxzRm9yVHJhc2gubGVuZ3RoID4gMCApIHtcblx0XHRjb25zdCBtb2RlbEZvclRyYXNoID0gbW9kZWxzRm9yVHJhc2gucG9wKCk7XG5cdFx0Y29uc3QgaWRzVHJhc2hlZCA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0XHQncGVyc2lzdFRyYXNoZXNGb3JNb2RlbCcsXG5cdFx0XHRtb2RlbEZvclRyYXNoXG5cdFx0KTtcblx0XHRpZiAoICEgaXNFbXB0eSggaWRzVHJhc2hlZCApICkge1xuXHRcdFx0dHJhc2hlZElkc1sgbW9kZWxGb3JUcmFzaCBdID0gaWRzVHJhc2hlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHsgZGVsZXRlZDogZGVsZXRlZElkcywgdHJhc2hlZDogdHJhc2hlZElkcyB9O1xufVxuXG5leHBvcnQge1xuXHRwZXJzaXN0RW50aXR5UmVjb3JkLFxuXHRwZXJzaXN0Rm9yRW50aXR5SWQsXG5cdHBlcnNpc3RGb3JFbnRpdHlJZHMsXG5cdHBlcnNpc3REZWxldGVzRm9yTW9kZWwsXG5cdHBlcnNpc3RUcmFzaGVzRm9yTW9kZWwsXG5cdHBlcnNpc3RBbGxEZWxldGVzLFxufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0cy5cbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSwga2V5cyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgY3VpZCBmcm9tICdjdWlkJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBzaW5ndWxhck1vZGVsTmFtZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzLlxuICovXG5pbXBvcnQge1xuXHRmZXRjaCxcblx0c2VsZWN0LFxuXHRyZXNvbHZlRGlzcGF0Y2gsXG5cdHJlc29sdmVTZWxlY3QsXG59IGZyb20gJy4uLy4uL2Jhc2UtY29udHJvbHMnO1xuaW1wb3J0IHsgcmVtb3ZlRGlydHlSZWxhdGlvbkZvclR5cGUgfSBmcm9tICcuL3JlbW92ZS1yZWxhdGlvbnMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgYXMgQ09SRV9SRURVQ0VSX0tFWSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSBhcyBTQ0hFTUFfUkVEVUNFUl9LRVkgfSBmcm9tICcuLi8uLi9zY2hlbWEvY29uc3RhbnRzJztcblxuY29uc3QgREVGQVVMVF9FTVBUWV9PQkpFQ1QgPSB7fTtcbmNvbnN0IERFRkFVTFRfRU1QVFlfQVJSQVkgPSBbXTtcblxuLyoqXG4gKiBBY3Rpb24gZ2VuZXJhdG9yIGZvciBwZXJzaXN0aW5nIGFueSBxdWV1ZWQgYWRkIHJlbGF0aW9ucyB0byB0aGUgc2VydmVyXG4gKiBzcGVjaWZpYyB0byB0aGUgZ2l2ZW4gbW9kZWwgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJldHVybnMgYW4gb2JqZWN0IGluZGV4ZWQgYnkgdGhlIG9yaWdpbmF0aW5nIGVudGl0eSBpZCBmb3JcbiAqIHRoZSByZXF1ZXN0ZWQgbW9kZWwgYW5kIHdpdGggdmFsdWVzIHRoYXQgYXJlIGFuIE9iamVjdCBpbmRleGVkIGJ5IHJlbGF0aW9uXG4gKiBuYW1lcyB3aXRoIHZhbHVlcyBvZiByZWxhdGlvbiBJZHMgcGVyc2lzdGVkLlxuICovXG5mdW5jdGlvbiogcGVyc2lzdEFkZFJlbGF0aW9uc0Zvck1vZGVsKCBtb2RlbE5hbWUgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdwZXJzaXN0UmVsYXRpb25zRm9yTW9kZWwnLFxuXHRcdG1vZGVsTmFtZVxuXHQpO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgZm9yIHBlcnNpc3RpbmcgYW55IHF1ZXVlZCBkZWxldGUgcmVsYXRpb25zIHRvIHRoZSBzZXJ2ZXJcbiAqIHNwZWNpZmljIHRvIHRoZSBnaXZlbiBtb2RlbCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge09iamVjdH0gcmV0dXJucyBhbiBvYmplY3QgaW5kZXhlZCBieSB0aGUgb3JpZ2luYXRpbmcgZW50aXR5IGlkIGZvclxuICogdGhlIHJlcXVlc3RlZCBtb2RlbCBhbmQgd2l0aCB2YWx1ZXMgdGhhdCBhcmUgYW4gT2JqZWN0IGluZGV4ZWQgYnkgcmVsYXRpb25cbiAqIG5hbWVzIHdpdGggdmFsdWVzIG9mIHJlbGF0aW9uIElkcyBwZXJzaXN0ZWQuXG4gKi9cbmZ1bmN0aW9uKiBwZXJzaXN0RGVsZXRlUmVsYXRpb25zRm9yTW9kZWwoIG1vZGVsTmFtZSApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZXR1cm4geWllbGQgcmVzb2x2ZURpc3BhdGNoKFxuXHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0J3BlcnNpc3RSZWxhdGlvbnNGb3JNb2RlbCcsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGZhbHNlXG5cdCk7XG59XG5cbi8qKlxuICogQWN0aW9uIGdlbmVyYXRvciBmb3IgcGVyc2lzdGluZyBhbnkgcXVldWVkIHJlbGF0aW9ucyB0byB0aGUgc2VydmVyIHNwZWNpZmljXG4gKiB0byB0aGUgZ2l2ZW4gbW9kZWwgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkZFJlbGF0aW9uICBXaGV0aGVyIHRoaXMgcGVyc2lzdCByZXF1ZXN0IGlzIGZvciBxdWV1ZWRcbiAqIHJlbGF0aW9ucyB0byBhZGQgZm9yIHRoZSBtb2RlbCBvciBxdWV1ZWQgcmVsYXRpb25zIHRvIGRlbGV0ZSBmb3IgdGhlIG1vZGVsLlxuICogQHJldHVybiB7T2JqZWN0fSByZXR1cm5zIGFuIG9iamVjdCBpbmRleGVkIGJ5IHRoZSBvcmlnaW5hdGluZyBlbnRpdHkgaWQgZm9yXG4gKiB0aGUgcmVxdWVzdGVkIG1vZGVsIGFuZCB3aXRoIHZhbHVlcyB0aGF0IGFyZSBhbiBPYmplY3QgaW5kZXhlZCBieSByZWxhdGlvblxuICogbmFtZXMgd2l0aCB2YWx1ZXMgb2YgcmVsYXRpb24gSWRzIHBlcnNpc3RlZC5cbiAqL1xuZnVuY3Rpb24qIHBlcnNpc3RSZWxhdGlvbnNGb3JNb2RlbCggbW9kZWxOYW1lLCBhZGRSZWxhdGlvbiA9IHRydWUgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0Y29uc3QgcmVsYXRpb25TdGF0ZSA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRSZWxhdGlvblN0YXRlJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0YWRkUmVsYXRpb25cblx0KTtcblx0aWYgKCBpc0VtcHR5KCByZWxhdGlvblN0YXRlICkgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfRU1QVFlfT0JKRUNUO1xuXHR9XG5cdGNvbnN0IGVudGl0eUlkcyA9IGtleXMoIHJlbGF0aW9uU3RhdGUgKTtcblx0Y29uc3QgcmVsYXRpb25zUGVyc2lzdGVkID0gZW50aXR5SWRzLmxlbmd0aCA+IDAgP1xuXHRcdHt9IDpcblx0XHRERUZBVUxUX0VNUFRZX09CSkVDVDtcblx0d2hpbGUgKCBlbnRpdHlJZHMubGVuZ3RoID4gMCApIHtcblx0XHRjb25zdCBlbnRpdHlJZCA9IGVudGl0eUlkcy5wb3AoKTtcblxuXHRcdGNvbnN0IHBlcnNpc3RlZFJlbGF0aW9ucyA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0XHQncGVyc2lzdFJlbGF0aW9uc0ZvckVudGl0eUlkJyxcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkLFxuXHRcdFx0YWRkUmVsYXRpb24sXG5cdFx0XHRyZWxhdGlvblN0YXRlXG5cdFx0KTtcblx0XHRpZiAoICEgaXNFbXB0eSggcGVyc2lzdGVkUmVsYXRpb25zICkgKSB7XG5cdFx0XHRyZWxhdGlvbnNQZXJzaXN0ZWRbIGVudGl0eUlkIF0gPSBwZXJzaXN0ZWRSZWxhdGlvbnM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZWxhdGlvbnNQZXJzaXN0ZWQ7XG59XG5cbi8qKlxuICogQWN0aW9uIGdlbmVyYXRvciBmb3IgcGVyc2lzdGluZyBhbnkgcXVldWVkIHJlbGF0aW9ucyB0byB0aGUgc2VydmVyIHNwZWNpZmljXG4gKiB0byB0aGUgZ2l2ZW4gZW50aXR5IGlkIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gbW9kZWwgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkUmVsYXRpb24gV2hldGhlciB0aGlzIHBlcnNpc3QgcmVxdWVzdCBpcyBmb3IgcXVldWVkXG4gKiByZWxhdGlvbnMgdG8gYWRkIGZvciB0aGUgbW9kZWwgb3IgcXVldWVkIHJlbGF0aW9ucyB0byBkZWxldGUgZm9yIHRoZSBtb2RlbC5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZWxhdGlvblN0YXRlIE9wdGlvbmFsLCBpZiB0aGUgY3VycmVudCByZWxhdGlvbiBzdGF0ZSBpcyBrbm93blxuICogaXQgY2FuIGJlIHBhc3NlZCBpbi4gIFR5cGljYWxseSBjbGllbnQgY29kZSB3b24ndCBrbm93IHRoaXMgc28gc2hvdWxkIG5vdCBiZVxuICogcGFzc2VkIGluLlxuICogQHJldHVybiB7T2JqZWN0fSBBbiBvYmplY3QgaW5kZXhlZCBieSByZWxhdGlvbiBuYW1lcyB3aXRoIHRoZSB2YWx1ZXMgYW4gYXJyYXlcbiAqIG9mIHJlbGF0aW9uIGlkcyBmb3IgZWFjaCByZWxhdGlvbiB0aGF0IHdlcmUgcGVyc2lzdGVkLlxuICovXG5mdW5jdGlvbiogcGVyc2lzdFJlbGF0aW9uc0ZvckVudGl0eUlkKFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuXHRhZGRSZWxhdGlvbiA9IHRydWUsXG5cdHJlbGF0aW9uU3RhdGUgPSBERUZBVUxUX0VNUFRZX09CSkVDVFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25TdGF0ZSA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRSZWxhdGlvblN0YXRlJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0YWRkUmVsYXRpb24sXG5cdFx0cmVsYXRpb25TdGF0ZVxuXHQpO1xuXHRpZiAoIGlzRW1wdHkoIHJlbGF0aW9uU3RhdGUgKSApIHtcblx0XHRyZXR1cm4gREVGQVVMVF9FTVBUWV9PQkpFQ1Q7XG5cdH1cblx0Y29uc3QgcmVsYXRpb25OYW1lcyA9IHJlbGF0aW9uU3RhdGVbIGVudGl0eUlkIF0gP1xuXHRcdGtleXMoIHJlbGF0aW9uU3RhdGVbIGVudGl0eUlkIF0gKSA6XG5cdFx0REVGQVVMVF9FTVBUWV9BUlJBWTtcblx0aWYgKCBpc0VtcHR5KCByZWxhdGlvbk5hbWVzICkgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfRU1QVFlfT0JKRUNUO1xuXHR9XG5cdGNvbnN0IHBlcnNpc3RlZFJlbGF0aW9ucyA9IHt9O1xuXHR3aGlsZSAoIHJlbGF0aW9uTmFtZXMubGVuZ3RoID4gMCApIHtcblx0XHRjb25zdCByZWxhdGlvbk5hbWUgPSByZWxhdGlvbk5hbWVzLnBvcCgpO1xuXHRcdGNvbnN0IHBlcnNpc3RlZFJlbGF0aW9uSWRzID1cblx0XHRcdHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRcdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHRcdFx0J3BlcnNpc3RSZWxhdGlvbnNGb3JFbnRpdHlJZEFuZFJlbGF0aW9uJyxcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRlbnRpdHlJZCxcblx0XHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdFx0XHRhZGRSZWxhdGlvbixcblx0XHRcdFx0cmVsYXRpb25TdGF0ZVxuXHRcdFx0KTtcblx0XHRpZiAoIHBlcnNpc3RlZFJlbGF0aW9uSWRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRwZXJzaXN0ZWRSZWxhdGlvbnNbIHJlbGF0aW9uTmFtZSBdID0gcGVyc2lzdGVkUmVsYXRpb25JZHM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwZXJzaXN0ZWRSZWxhdGlvbnM7XG59XG5cbi8qKlxuICogQWN0aW9uIGdlbmVyYXRvciBmb3IgcGVyc2lzdGluZyBhbnkgcXVldWVkIHJlbGF0aW9ucyB0byB0aGUgc2VydmVyIHNwZWNpZmljXG4gKiB0byB0aGUgZ2l2ZW4gZW50aXR5IGlkIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gbW9kZWwgbmFtZSBhbmQgZm9yIHRoZSBnaXZlblxuICogcmVsYXRpb24gdG8gdGhhdCBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkUmVsYXRpb24gV2hldGhlciB0aGlzIHBlcnNpc3QgcmVxdWVzdCBpcyBmb3IgcXVldWVkXG4gKiByZWxhdGlvbnMgdG8gYWRkIGZvciB0aGUgbW9kZWwgb3IgcXVldWVkIHJlbGF0aW9ucyB0byBkZWxldGUgZm9yIHRoZSBtb2RlbC5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZWxhdGlvblN0YXRlIE9wdGlvbmFsLCBpZiB0aGUgY3VycmVudCByZWxhdGlvbiBzdGF0ZSBpcyBrbm93blxuICogaXQgY2FuIGJlIHBhc3NlZCBpbi4gIFR5cGljYWxseSBjbGllbnQgY29kZSB3b24ndCBrbm93IHRoaXMgc28gc2hvdWxkIG5vdCBiZVxuICogcGFzc2VkIGluLlxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHJlbGF0aW9uIGlkcyBwZXJzaXN0ZWQgZm9yIHRoYXQgcmVsYXRpb24uXG4gKi9cbmZ1bmN0aW9uKiBwZXJzaXN0UmVsYXRpb25zRm9yRW50aXR5SWRBbmRSZWxhdGlvbihcblx0bW9kZWxOYW1lLFxuXHRlbnRpdHlJZCxcblx0cmVsYXRpb25OYW1lLFxuXHRhZGRSZWxhdGlvbiA9IHRydWUsXG5cdHJlbGF0aW9uU3RhdGUgPSBERUZBVUxUX0VNUFRZX09CSkVDVFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRyZWxhdGlvblN0YXRlID0geWllbGQgcmVzb2x2ZURpc3BhdGNoKFxuXHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0aW9uU3RhdGUnLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRhZGRSZWxhdGlvbixcblx0XHRyZWxhdGlvblN0YXRlXG5cdCk7XG5cdGlmICggaXNFbXB0eSggcmVsYXRpb25TdGF0ZSApICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHR9XG5cdGNvbnN0IHJlbGF0aW9uRW50aXR5SWRzID0gcmVsYXRpb25TdGF0ZVsgZW50aXR5SWQgXSAmJlxuXHRyZWxhdGlvblN0YXRlWyBlbnRpdHlJZCBdWyByZWxhdGlvbk5hbWUgXSA/XG5cdFx0WyAuLi5yZWxhdGlvblN0YXRlWyBlbnRpdHlJZCBdWyByZWxhdGlvbk5hbWUgXSBdIDpcblx0XHRERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHRpZiAoIHJlbGF0aW9uRW50aXR5SWRzLmxlbmd0aCA8IDEgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfRU1QVFlfQVJSQVk7XG5cdH1cblx0Y29uc3QgcGVyc2lzdGVkUmVsYXRpb25JZHMgPSBbXTtcblx0d2hpbGUgKCByZWxhdGlvbkVudGl0eUlkcy5sZW5ndGggPiAwICkge1xuXHRcdGNvbnN0IHBlcnNpc3RlZFJlbGF0aW9uSWQgPVxuXHRcdFx0eWllbGQgcmVzb2x2ZURpc3BhdGNoKFxuXHRcdFx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdFx0XHQncGVyc2lzdFJlbGF0aW9uc0ZvckVudGl0eUlkQW5kUmVsYXRpb25JZCcsXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0ZW50aXR5SWQsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25FbnRpdHlJZHMucG9wKCksXG5cdFx0XHRcdGFkZFJlbGF0aW9uLFxuXHRcdFx0XHRyZWxhdGlvblN0YXRlXG5cdFx0XHQpO1xuXHRcdGlmICggcGVyc2lzdGVkUmVsYXRpb25JZCApIHtcblx0XHRcdHBlcnNpc3RlZFJlbGF0aW9uSWRzLnB1c2goIHBlcnNpc3RlZFJlbGF0aW9uSWQgKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHBlcnNpc3RlZFJlbGF0aW9uSWRzO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgZm9yIHBlcnNpc3RpbmcgYW55IHF1ZXVlZCByZWxhdGlvbnMgdG8gdGhlIHNlcnZlciBzcGVjaWZpY1xuICogdG8gdGhlIGdpdmVuIGVudGl0eSBpZCBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG1vZGVsIG5hbWUsIGZvciB0aGUgZ2l2ZW5cbiAqIHJlbGF0aW9uIHRvIHRoYXQgbW9kZWwgYW5kIHRoZSBnaXZlbiByZWxhdGlvbiBpZCBmb3IgdGhhdCByZWxhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWxhdGlvbklkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkZFJlbGF0aW9uIFdoZXRoZXIgdGhpcyBwZXJzaXN0IHJlcXVlc3QgaXMgZm9yIHF1ZXVlZFxuICogcmVsYXRpb25zIHRvIGFkZCBmb3IgdGhlIG1vZGVsIG9yIHF1ZXVlZCByZWxhdGlvbnMgdG8gZGVsZXRlIGZvciB0aGUgbW9kZWwuXG4gKiBAcGFyYW0ge09iamVjdH0gcmVsYXRpb25TdGF0ZSBPcHRpb25hbCwgaWYgdGhlIGN1cnJlbnQgcmVsYXRpb24gc3RhdGUgaXMga25vd25cbiAqIGl0IGNhbiBiZSBwYXNzZWQgaW4uICBUeXBpY2FsbHkgY2xpZW50IGNvZGUgd29uJ3Qga25vdyB0aGlzIHNvIHNob3VsZCBub3QgYmVcbiAqIHBhc3NlZCBpbi5cbiAqIEByZXR1cm4ge251bWJlcn0gSWYgMCBpcyByZXR1cm5lZCB0aGVuIHRoZSBlbnRpdHkgd2FzIG5vdCBwZXJzaXN0ZWQsXG4gKiBvdGhlcndpc2UgdGhlIHZhbHVlIHJldHVybmVkIHdpbGwgYmUgdGhlIGlkIHBlcnNpc3RlZC5cbiAqL1xuZnVuY3Rpb24qIHBlcnNpc3RSZWxhdGlvbnNGb3JFbnRpdHlJZEFuZFJlbGF0aW9uSWQoXG5cdG1vZGVsTmFtZSxcblx0ZW50aXR5SWQsXG5cdHJlbGF0aW9uTmFtZSxcblx0cmVsYXRpb25JZCxcblx0YWRkUmVsYXRpb24gPSB0cnVlLFxuXHRyZWxhdGlvblN0YXRlID0gREVGQVVMVF9FTVBUWV9PQkpFQ1Rcbikge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0cmVsYXRpb25TdGF0ZSA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRSZWxhdGlvblN0YXRlJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0YWRkUmVsYXRpb24sXG5cdFx0cmVsYXRpb25TdGF0ZVxuXHQpO1xuXHRsZXQgZW50aXR5SWRDaGFuZ2VkID0gZmFsc2U7XG5cdGlmICggaXNFbXB0eSggcmVsYXRpb25TdGF0ZSApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cdC8vIGlzIHRoZSBlbnRpdHlJZCBhIGN1aWQ/ICBJZiBzbywgdGhlbiBsZXQncyBwZXJzaXN0LlxuXHRpZiAoIGN1aWQuaXNDdWlkKCBlbnRpdHlJZCApICkge1xuXHRcdGVudGl0eUlkID0geWllbGQgcmVzb2x2ZURpc3BhdGNoKFxuXHRcdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHRcdCdwZXJzaXN0TmV3RW50aXR5QW5kUmVtb3ZlRGlydHlSZWxhdGlvbnMnLFxuXHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdFx0cmVsYXRpb25JZCxcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkLFxuXHRcdFx0YWRkUmVsYXRpb24sXG5cdFx0XHRbIG1vZGVsTmFtZSwgZW50aXR5SWQgXSxcblx0XHQpO1xuXHRcdC8vIGlmIGVudGl0eUlkIGlzIDAgYmFpbCBiZWNhdXNlIGl0IGRpZG4ndCBnZXQgcGVyc2lzdGVkIHNvIHJlbGF0aW9uc1xuXHRcdC8vIGNhbid0IGJlIHBlcnNpc3RlZCBlaXRoZXIuXG5cdFx0aWYgKCBlbnRpdHlJZCA9PT0gMCApIHtcblx0XHRcdHJldHVybiBlbnRpdHlJZDtcblx0XHR9XG5cdFx0ZW50aXR5SWRDaGFuZ2VkID0gdHJ1ZTtcblx0fVxuXG5cdC8vIGlzIHRoZSByZWxhdGlvbklkIGEgY3VpZD8gSWYgc28sIHRoZW4gbGV0J3MgcGVyc2lzdFxuXHRpZiAoIGN1aWQuaXNDdWlkKCByZWxhdGlvbklkICkgKSB7XG5cdFx0cmVsYXRpb25JZCA9IHlpZWxkIHJlc29sdmVEaXNwYXRjaChcblx0XHRcdENPUkVfUkVEVUNFUl9LRVksXG5cdFx0XHQncGVyc2lzdE5ld0VudGl0eUFuZFJlbW92ZURpcnR5UmVsYXRpb25zJyxcblx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdHJlbGF0aW9uSWQsXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRlbnRpdHlJZCxcblx0XHRcdGFkZFJlbGF0aW9uLFxuXHRcdFx0WyByZWxhdGlvbk5hbWUsIHJlbGF0aW9uSWQgXSxcblx0XHRcdCEgZW50aXR5SWRDaGFuZ2VkLFxuXHRcdCk7XG5cdFx0Ly8gaWYgcmVsYXRpb25JZCBpcyAwLCBiYWlsIGJlY2F1c2UgaXQgZGlkbid0IGdldCBwZXJzaXN0ZWQgc28gcmVsYXRpb25zXG5cdFx0Ly8gY2FuJ3QgYmUgcGVyc2lzdGVkIGVpdGhlci5cblx0XHRpZiAoIHJlbGF0aW9uSWQgPT09IDAgKSB7XG5cdFx0XHRyZXR1cm4gcmVsYXRpb25JZDtcblx0XHR9XG5cdH1cblx0Y29uc3QgZW5kcG9pbnQgPSB5aWVsZCByZXNvbHZlU2VsZWN0KFxuXHRcdFNDSEVNQV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0UmVsYXRpb25FbmRwb2ludEZvckVudGl0eUlkJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHQpO1xuXHRjb25zdCBzdWNjZXNzID0gZW5kcG9pbnQgP1xuXHRcdHlpZWxkIGZldGNoKFxuXHRcdFx0e1xuXHRcdFx0XHRwYXRoOiBlbmRwb2ludCArICcvJyArIHJlbGF0aW9uSWQsXG5cdFx0XHRcdG1ldGhvZDogYWRkUmVsYXRpb24gPyAnUFVUJyA6ICdERUxFVEUnLFxuXHRcdFx0fVxuXHRcdCkgOlxuXHRcdGZhbHNlO1xuXHRpZiAoIHN1Y2Nlc3MgKSB7XG5cdFx0Ly8gRXZlbiB3aGVuIGlkcyBoYXZlIGNoYW5nZWQsIHRoaXMgc2hvdWxkIGNhdGNoIGFueSBwb3RlbnRpYWwgcXVldWVkXG5cdFx0Ly8gcmVsYXRpb24gaXRlbXMgZm9yIHRob3NlIHRoaW5ncyB0aGF0IGdvdCB1cGRhdGVkIGluIHN0YXRlIGluIGEgcHJpb3Jcblx0XHQvLyBkaXNwYXRjaFxuXHRcdHlpZWxkIHJlbW92ZURpcnR5UmVsYXRpb25Gb3JUeXBlKFxuXHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdFx0cmVsYXRpb25JZCxcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkLFxuXHRcdFx0YWRkUmVsYXRpb25cblx0XHQpO1xuXHRcdHJldHVybiByZWxhdGlvbklkO1xuXHR9XG5cdHJldHVybiAwO1xufVxuXG4vKipcbiAqIEFjdGlvbiBnZW5lcmF0b3IgZm9yIGhhbmRsaW5nIHBlcnNpc3RpbmcgYSBuZXcgZW50aXR5IGV4aXN0aW5nIGluIHRoZVxuICogcmVsYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IHJlbGF0aW9uSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHBhcmFtIHtib29sZWFufSBhZGRSZWxhdGlvblxuICogQHBhcmFtIHtBcnJheX0gcGVyc2lzdGluZ0FyZ3VtZW50c1xuICogQHBhcmFtIHtib29sZWFufSBkb1JlbGF0aW9uUmVtb3ZhbFxuICogQHJldHVybiB7bnVtYmVyfSBFaXRoZXIgdGhlIG5ldyBpZCBvciAwIGlmIHRoZSBlbnRpdHkgd2FzIG5vdCBzdWNjZXNzZnVsbHlcbiAqIHBlcnNpc3RlZC5cbiAqL1xuZnVuY3Rpb24qIHBlcnNpc3ROZXdFbnRpdHlBbmRSZW1vdmVEaXJ0eVJlbGF0aW9ucyhcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvbklkLFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuXHRhZGRSZWxhdGlvbixcblx0cGVyc2lzdGluZ0FyZ3VtZW50cyxcblx0ZG9SZWxhdGlvblJlbW92YWwgPSB0cnVlLFxuKSB7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBwZXJzaXN0ZWRFbnRpdHkgPSB5aWVsZCByZXNvbHZlRGlzcGF0Y2goXG5cdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHQncGVyc2lzdEZvckVudGl0eUlkJyxcblx0XHQuLi5wZXJzaXN0aW5nQXJndW1lbnRzLFxuXHQpO1xuXHQvLyBpZiBub3QgZGlzcGF0Y2hlZCBzdWNjZXNzZnVsbHkgdGhlbiBsZXQncyBiYWlsIGJlY2F1c2UgcmVsYXRpb24gY2FuJ3Rcblx0Ly8gYmUgcGVyc2lzdGVkXG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggcGVyc2lzdGVkRW50aXR5LCBwZXJzaXN0aW5nQXJndW1lbnRzWyAwIF0gKSApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXHRpZiAoIGRvUmVsYXRpb25SZW1vdmFsICkge1xuXHRcdC8vIGVuc3VyZSBvbGRJZCBpcyByZW1vdmVkIGZyb20gaXRlbXMgKHRoaXMgaXMgYSBmYWlsc2FmZSBpbiBjYXNlIHRoZVxuXHRcdC8vIGlkIHN3YXAgaW4gcmVsYXRpb24gc3RhdGUgaXNuJ3QgY29tcGxldGUgeWV0KS5cblx0XHR5aWVsZCByZW1vdmVEaXJ0eVJlbGF0aW9uRm9yVHlwZShcblx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdHJlbGF0aW9uSWQsXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRlbnRpdHlJZCxcblx0XHRcdGFkZFJlbGF0aW9uXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gcGVyc2lzdGVkRW50aXR5LmlkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRvciBmb3IgcmV0dXJuaW5nIHJlbGF0aW9uIHN0YXRlIGZvciB0aGUgZ2l2ZW4gbW9kZWwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtib29sZWFufSBhZGRSZWxhdGlvbiAgV2hldGhlciB0byByZXR1cm4gdGhlIHJlbGF0aW9uIHN0YXRlIGZvciByZWxhdGlvbnNcbiAqIHF1ZXVlZCBmb3IgYWRkaW5nICh0cnVlKSBvciBkZWxldGlvbiAoZmFsc2UpLlxuICogQHBhcmFtIHtPYmplY3R9IHJlbGF0aW9uU3RhdGUgIE9wdGlvbmFsbHksIGNhbGxlcnMgY2FuIHByb3ZpZGUgYSByZWxhdGlvblxuICogcmVsYXRpb24gc3RhdGUgYW5kIGlmIHByb3ZpZGVkIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHNlbGVjdGluZyBmcm9tIHRoZVxuICogc3RvcmUuXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSAgVGhlIHJlbGF0aW9uIHN0YXRlIGZvciB0aGUgZ2l2ZW4gbW9kZWwuXG4gKi9cbmZ1bmN0aW9uKiBnZXRSZWxhdGlvblN0YXRlKFxuXHRtb2RlbE5hbWUsXG5cdGFkZFJlbGF0aW9uID0gdHJ1ZSxcblx0cmVsYXRpb25TdGF0ZSA9IERFRkFVTFRfRU1QVFlfT0JKRUNUXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBzZWxlY3RvciA9IGFkZFJlbGF0aW9uID9cblx0XHQnZ2V0UmVsYXRpb25BZGRpdGlvbnNRdWV1ZWRGb3JNb2RlbCcgOlxuXHRcdCdnZXRSZWxhdGlvbkRlbGV0aW9uc1F1ZXVlZEZvck1vZGVsJztcblx0cmVsYXRpb25TdGF0ZSA9IGlzRW1wdHkoIHJlbGF0aW9uU3RhdGUgKSA/XG5cdFx0eWllbGQgc2VsZWN0KFxuXHRcdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdCkgOlxuXHRcdHJlbGF0aW9uU3RhdGU7XG5cdHJldHVybiByZWxhdGlvblN0YXRlO1xufVxuXG5leHBvcnQge1xuXHRwZXJzaXN0QWRkUmVsYXRpb25zRm9yTW9kZWwsXG5cdHBlcnNpc3REZWxldGVSZWxhdGlvbnNGb3JNb2RlbCxcblx0cGVyc2lzdFJlbGF0aW9uc0Zvck1vZGVsLFxuXHRwZXJzaXN0UmVsYXRpb25zRm9yRW50aXR5SWQsXG5cdHBlcnNpc3RSZWxhdGlvbnNGb3JFbnRpdHlJZEFuZFJlbGF0aW9uLFxuXHRwZXJzaXN0UmVsYXRpb25zRm9yRW50aXR5SWRBbmRSZWxhdGlvbklkLFxuXHRwZXJzaXN0TmV3RW50aXR5QW5kUmVtb3ZlRGlydHlSZWxhdGlvbnMsXG5cdGdldFJlbGF0aW9uU3RhdGUsXG59O1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEFDVElPTl9UWVBFUyB9IGZyb20gJy4vYWN0aW9uLXR5cGVzJztcbmNvbnN0IHsgZW50aXRpZXM6IHR5cGVzIH0gPSBBQ1RJT05fVFlQRVM7XG5cbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBzaW5ndWxhck1vZGVsTmFtZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcblxuLyoqXG4gKiBBY3Rpb24gZm9yIHJlY2VpdmluZyBlbnRpdHkgcmVjb3Jkcy5cbiAqIEVudGl0eSByZWNvcmRzIHJlY2VpdmVkIHdpbGwgTk9UIHJlcGxhY2UgYW55IGV4aXN0aW5nIGVudGl0aWVzIGluIHRoZSBzdGF0ZVxuICogKG1hdGNoaW5nIGlkcykuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSBleHBlY3RlZCB0byBiZSBhbiBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtBcnJheTxCYXNlRW50aXR5Pn0gZW50aXRpZXMgQXJyYXkgb2YgbW9kZWwgZW50aXR5XG4gKiBpbnN0YW5jZXMgaW5kZXhlZCBieSB0aGUgcHJpbWFyeSBrZXkuXG4gKiBAcmV0dXJuIHtcbiAqIHtcbiAqIFx0dHlwZTogc3RyaW5nLFxuICogXHRtb2RlbE5hbWU6IHN0cmluZyxcbiAqIFx0ZW50aXRpZXM6IEFycmF5PEJhc2VFbnRpdHk+XG4gKiBcdH1cbiAqIH0gIEFuIGFjdGlvbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVFbnRpdHlSZWNvcmRzKCBtb2RlbE5hbWUsIGVudGl0aWVzID0gW10gKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX0VOVElUWV9SRUNPUkRTLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdGllcyxcblx0fTtcbn1cblxuLyoqXG4gKiBTYW1lIGFzIHJlY2VpdmVFbnRpdHlSZWNvcmRzIGV4Y2VwdCBpbmNvbWluZyBlbnRpdGllcyB3aWxsIHJlcGxhY2UgYW55XG4gKiBtYXRjaGluZyByZWNvcmRzIChieSBJRCkgIGluIHRoZSBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IGVudGl0aWVzXG4gKiBAcmV0dXJuIHtcbiAqIHtcbiAqIFx0dHlwZTogc3RyaW5nLFxuICogXHRtb2RlbE5hbWU6IHN0cmluZyxcbiAqIFx0ZW50aXRpZXM6IEFycmF5PEJhc2VFbnRpdHk+XG4gKiBcdH1cbiAqIH0gIEFuIGFjdGlvbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVBbmRSZXBsYWNlRW50aXR5UmVjb3JkcyggbW9kZWxOYW1lLCBlbnRpdGllcyA9IFtdICkge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogdHlwZXMuUkVDRUlWRV9BTkRfUkVQTEFDRV9FTlRJVFlfUkVDT1JEUyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXRpZXMsXG5cdH07XG59XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIGFkZGluZyBhbiBlbnRpdHkgdG8gdGhlIHN0YXRlIChhcyBvcHBvc2VkIHRvIGFuIGVudGl0eVxuICogcmVjb3JkKVxuICpcbiAqIEBwYXJhbSB7QmFzZUVudGl0eX0gZW50aXR5XG4gKiBAcmV0dXJuIHt7dHlwZTogc3RyaW5nLCBlbnRpdHk6IEJhc2VFbnRpdHl9fSBBbiBhY3Rpb25cbiAqIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gcmVjZWl2ZUVudGl0eSggZW50aXR5ICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfRU5USVRZLFxuXHRcdGVudGl0eSxcblx0fTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gY3JlYXRvciBmb3IgcXVldWluZyBhbiBlbnRpdHkgaWQgZm9yIHRyYXNoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHJldHVybiB7e3R5cGU6IHN0cmluZywgbW9kZWxOYW1lOiBzdHJpbmcsIGVudGl0eUlkOiBudW1iZXJ9fSBBbiBhY3Rpb25cbiAqIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gcmVjZWl2ZVRyYXNoRW50aXR5SWQoIG1vZGVsTmFtZSwgZW50aXR5SWQgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX1RSQVNIX0VOVElUWV9JRCxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdH07XG59XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHF1ZXVlaW5nIGFuIGVudGl0eSBpZCBmb3IgaGFyZCBkZWxldGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHt7dHlwZTogc3RyaW5nLCBtb2RlbE5hbWU6IHN0cmluZywgZW50aXR5SWQ6IG51bWJlcn19IEFuIGFjdGlvblxuICogb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZWNlaXZlRGVsZXRlRW50aXR5SWQoIG1vZGVsTmFtZSwgZW50aXR5SWQgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX0RFTEVURV9FTlRJVFlfSUQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHR9O1xufVxuXG5leHBvcnQge1xuXHRyZWNlaXZlRW50aXR5UmVjb3Jkcyxcblx0cmVjZWl2ZUFuZFJlcGxhY2VFbnRpdHlSZWNvcmRzLFxuXHRyZWNlaXZlRW50aXR5LFxuXHRyZWNlaXZlRGVsZXRlRW50aXR5SWQsXG5cdHJlY2VpdmVUcmFzaEVudGl0eUlkLFxufTtcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRUWVBFX1FVRVVFX1JFTEFUSU9OX0FERCxcblx0VFlQRV9RVUVVRV9SRUxBVElPTl9ERUxFVEUsXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBQ1RJT05fVFlQRVMgfSBmcm9tICcuL2FjdGlvbi10eXBlcyc7XG5jb25zdCB7IHJlbGF0aW9uczogdHlwZXMgfSA9IEFDVElPTl9UWVBFUztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEFjdGlvbiBjcmVhdG9yIGZvciBhZGRpbmcgcmVsYXRpb24gaW5kZXhlcyBmb3IgZW50aXRpZXMgYW5kIHRoZWlyIHJlbGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IHJlbGF0ZWRFbnRpdHlJZHNcbiAqIEByZXR1cm4ge1xuICogXHR7XG4gKiBcdFx0dHlwZTogc3RyaW5nLFxuICogXHRcdG1vZGVsTmFtZTogc3RyaW5nLFxuICogXHRcdGVudGl0eUlkOiBudW1iZXIsXG4gKiBcdFx0cmVsYXRlZEVudGl0eUlkczogQXJyYXlcbiAqIFx0fVxuICogfSBBbiBhY3Rpb24gb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZWNlaXZlUmVsYXRlZEVudGl0aWVzKFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuXHRyZWxhdGlvbk5hbWUsXG5cdHJlbGF0ZWRFbnRpdHlJZHNcbikge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX1JFTEFURURfRU5USVRZX0lEUyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0ZWRFbnRpdHlJZHMsXG5cdH07XG59XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHF1ZXVpbmcgdGhlIGEgcmVsYXRpb24gY3JlYXRpb24gZm9yIHRoZSBnaXZlbiBkYXRhLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWxhdGlvbkVudGl0eUlkXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEByZXR1cm4ge1xuICogXHR7XG4gKiBcdFx0dHlwZTogc3RyaW5nLFxuICogXHRcdHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuICogXHRcdHJlbGF0aW9uRW50aXR5SWQ6IG51bWJlcixcbiAqIFx0XHRtb2RlbE5hbWU6IHN0cmluZyxcbiAqIFx0XHRlbnRpdHlJZDogbnVtYmVyLFxuICogXHRcdHF1ZXVlVHlwZTogc3RyaW5nXG4gKiBcdH1cbiAqIH1cbiAqIEFuIGFjdGlvbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24oXG5cdHJlbGF0aW9uTmFtZSxcblx0cmVsYXRpb25FbnRpdHlJZCxcblx0bW9kZWxOYW1lLFxuXHRlbnRpdHlJZCxcbikge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OLFxuXHRcdHJlbGF0aW9uTmFtZSxcblx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0XHRxdWV1ZVR5cGU6IFRZUEVfUVVFVUVfUkVMQVRJT05fQURELFxuXHR9O1xufVxuXG4vKipcbiAqIEFjdGlvbiBjcmVhdG9yIGZvciBxdWV1ZWluZyB0aGUgcmVsYXRpb24gZGVsZXRpb24gZm9yIHRoZSBnaXZlbiBkYXRhLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWxhdGlvbkVudGl0eUlkXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEByZXR1cm4ge1xuICogXHR7XG4gKiBcdFx0dHlwZTogc3RyaW5nLFxuICogXHRcdHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuICogXHRcdHJlbGF0aW9uRW50aXR5SWQ6IG51bWJlcixcbiAqIFx0XHRtb2RlbE5hbWU6IHN0cmluZyxcbiAqIFx0XHRlbnRpdHlJZDogbnVtYmVyLFxuICogXHRcdHF1ZXVlVHlwZTogc3RyaW5nXG4gKiBcdH1cbiAqIH0gQW4gYWN0aW9uIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gcmVjZWl2ZURpcnR5UmVsYXRpb25EZWxldGlvbihcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvbkVudGl0eUlkLFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfRElSVFlfUkVMQVRJT05fREVMRVRJT04sXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHRcdHF1ZXVlVHlwZTogVFlQRV9RVUVVRV9SRUxBVElPTl9ERUxFVEUsXG5cdH07XG59XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHRyaWdnZXJpbmcgdGhlIHJlcGxhY2VtZW50IG9mIGFueSBpbnN0YW5jZSBvZiB0aGUgb2xkXG4gKiBlbnRpdHkgaWQgaW4gdGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW4gbW9kZWwgd2l0aCB0aGUgbmV3IGVudGl0eSBpZC5cbiAqXG4gKiBUeXBpY2FsbHkgdGhpcyBpcyB0cmlnZ2VyZWQgYWZ0ZXIgcGVyc2lzdGluZyBhIG5ldyBlbnRpdHkgdG8gdGhlIHNlcnZlciBhbmRcbiAqIHJlY2VpdmluZyBpdHMgbmV3IGVudGl0eSBpZCBvbiByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gb2xkRW50aXR5SWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZXdFbnRpdHlJZFxuICogQHJldHVybiB7XG4gKiBcdHtcbiAqIFx0XHR0eXBlOiBzdHJpbmcsXG4gKiBcdFx0bW9kZWxOYW1lOiAqLFxuICogXHRcdG9sZEVudGl0eUlkOiAqLFxuICogXHRcdG5ld0VudGl0eUlkOiAqXG4gKiBcdH1cbiAqIH0gQW4gYWN0aW9uIG9iamVjdFxuICovXG5mdW5jdGlvbiByZWNlaXZlVXBkYXRlZEVudGl0eUlkRm9yUmVsYXRpb25zKFxuXHRtb2RlbE5hbWUsXG5cdG9sZEVudGl0eUlkLFxuXHRuZXdFbnRpdHlJZFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX1VQREFURURfRU5USVRZX0lEX0ZPUl9SRUxBVElPTlMsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdG9sZEVudGl0eUlkLFxuXHRcdG5ld0VudGl0eUlkLFxuXHR9O1xufVxuXG5leHBvcnQge1xuXHRyZWNlaXZlUmVsYXRlZEVudGl0aWVzLFxuXHRyZWNlaXZlRGlydHlSZWxhdGlvbkFkZGl0aW9uLFxuXHRyZWNlaXZlRGlydHlSZWxhdGlvbkRlbGV0aW9uLFxuXHRyZWNlaXZlVXBkYXRlZEVudGl0eUlkRm9yUmVsYXRpb25zLFxufTtcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBBQ1RJT05fVFlQRVMgfSBmcm9tICcuL2FjdGlvbi10eXBlcyc7XG5cbmNvbnN0IHsgZW50aXRpZXM6IHR5cGVzIH0gPSBBQ1RJT05fVFlQRVM7XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHJlbW92aW5nIHRoZSBlbnRpdHkgZnJvbSB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHt7dHlwZTogc3RyaW5nLCBtb2RlbE5hbWU6IHN0cmluZywgZW50aXR5SWQ6IG51bWJlcn19IEFuIGFjdGlvblxuICogb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW50aXR5QnlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApIHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRU1PVkVfRU5USVRZX0JZX0lELFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0fTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gY3JlYXRvciBmb3IgcXVldWVpbmcgdGhlIGRlbGV0aW9uIG9mIGVudGl0eSBvbiB0aGUgc2VydmVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHt7dHlwZTogc3RyaW5nLCBtb2RlbE5hbWU6IHN0cmluZywgZW50aXR5SWQ6IHtudW1iZXJ9fX0gQW4gYWN0aW9uXG4gKiBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURlbGV0ZUVudGl0eUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFTU9WRV9ERUxFVEVfRU5USVRZX0lELFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0fTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gY3JlYXRvciBmb3IgcXVldWluZyB0aGUgdHJhc2hpbmcgb2YgZW50aXR5IG9uIHRoZSBzZXJ2ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gZW50aXR5SWRcbiAqIEByZXR1cm4ge3t0eXBlOiBzdHJpbmcsIG1vZGVsTmFtZTogc3RyaW5nLCBlbnRpdHlJZDogbnVtYmVyfX0gQW4gYWN0aW9uXG4gKiBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVUcmFzaEVudGl0eUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFTU9WRV9UUkFTSF9FTlRJVFlfSUQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHR9O1xufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0VFlQRV9RVUVVRV9SRUxBVElPTl9BREQsXG5cdFRZUEVfUVVFVUVfUkVMQVRJT05fREVMRVRFLFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQUNUSU9OX1RZUEVTIH0gZnJvbSAnLi9hY3Rpb24tdHlwZXMnO1xuY29uc3QgeyByZWxhdGlvbnM6IHR5cGVzIH0gPSBBQ1RJT05fVFlQRVM7XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHJlbW92aW5nIGFsbCBpbmRleGVkIHJlbGF0aW9ucyBmb3IgYSBzcGVjaWZpYyBlbnRpdHkgZnJvbVxuICogdGhlIHN0YXRlLlxuICpcbiAqIE5vdGU6IFRoZSBmb2xsb3dpbmcgdGhpbmdzIGFyZSBhY2NvbXBsaXNoZWQgYnkgdGhpcyBhY3Rpb24gKHZpYSB0aGUgcmVkdWNlcik6XG4gKiAtIFRoZSByZWxhdGlvbiBpbmRleCBmb3IgdGhlIHJlbGF0aW9uIG9uIHRoaXMgZW50aXR5IGlzIHJlbW92ZWQgZnJvbSBzdGF0ZS5cbiAqIC0gSWYgdGhlIHJlbGF0aW9uIGVudGl0aWVzIHRoZW1zZWx2ZXMgaGF2ZSBubyBvdGhlciByZWxhdGlvbiBpbmRleCwgdGhleVxuICogICBhcmUgYWxzbyByZW1vdmVkIGZyb20gc3RhdGUuXG4gKiAtIEFueSBkaXJ0eSByZWxhdGlvbnMgZm9yIHRoaXMgZW50aXR5IGFyZSByZW1vdmVkIGZyb20gc3RhdGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHt7dHlwZTogc3RyaW5nLCBtb2RlbE5hbWU6IHN0cmluZywgZW50aXR5SWQ6IG51bWJlcn19XG4gKiBBbiBhY3Rpb24gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFsbFJlbGF0ZWRFbnRpdGllc0Zvck1vZGVsRW50aXR5KCBtb2RlbE5hbWUsIGVudGl0eUlkICkge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogdHlwZXMuUkVNT1ZFX1JFTEFURURfRU5USVRJRVNfRk9SX0VOVElUWSxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdH07XG59XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHJlbW92aW5nIHJlbGF0aW9ucyBmcm9tIHRoZSBnaXZlbiBtb2RlbCBmcm9tIHRoZSByZWxhdGlvbnNcbiAqIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHBhcmFtIHtBcnJheX0gcmVsYXRlZEVudGl0eUlkc1xuICogQHJldHVybiB7XG4gKiBcdHtcbiAqIFx0XHR0eXBlOiBzdHJpbmcsXG4gKiBcdFx0bW9kZWxOYW1lOiBzdHJpbmcsXG4gKiBcdFx0ZW50aXR5SWQ6IG51bWJlcixcbiAqIFx0XHRyZWxhdGlvbk5hbWU6IHN0cmluZyxcbiAqIFx0XHRyZWxhdGlvbkVudGl0eUlkczogQXJyYXlcbiAqIFx0fVxuICogfSBBbiBhY3Rpb24gb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZW1vdmVSZWxhdGVkRW50aXRpZXMoXG5cdG1vZGVsTmFtZSxcblx0ZW50aXR5SWQsXG5cdHJlbGF0aW9uTmFtZSxcblx0cmVsYXRlZEVudGl0eUlkcyxcbikge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRU1PVkVfUkVMQVRFRF9FTlRJVFlfSURTLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0cmVsYXRlZEVudGl0eUlkcyxcblx0fTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gY3JlYXRvciBmb3IgcmVtb3ZpbmcgdGhlIGRpcnR5IHJlbGF0aW9uIGZyb20gdGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW5cbiAqIHJlbGF0aW9uIGFjdGlvbiB0eXBlIChkZWxldGUgb3IgYWRkKS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gcmVsYXRpb25FbnRpdHlJZFxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkZFJlbGF0aW9uXG4gKiBAcmV0dXJuIHtcbiAqIFx0e1xuICogXHRcdHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuICogXHRcdHJlbGF0aW9uRW50aXR5SWQ6IG51bWJlcixcbiAqIFx0XHRtb2RlbE5hbWU6IHN0cmluZyxcbiAqIFx0XHRlbnRpdHlJZDogbnVtYmVyLFxuICogXHRcdHR5cGU6IHN0cmluZyxcbiAqIFx0XHRxdWV1ZVR5cGU6IHN0cmluZ1xuICogXHR9XG4gKiB9IEFuIGFjdGlvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRGlydHlSZWxhdGlvbkZvclR5cGUoXG5cdHJlbGF0aW9uTmFtZSxcblx0cmVsYXRpb25FbnRpdHlJZCxcblx0bW9kZWxOYW1lLFxuXHRlbnRpdHlJZCxcblx0YWRkUmVsYXRpb24gPSB0cnVlXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IHR5cGUgPSBhZGRSZWxhdGlvbiA/IHR5cGVzLlJFTU9WRV9ESVJUWV9SRUxBVElPTl9BRERJVElPTiA6XG5cdFx0dHlwZXMuUkVNT1ZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OO1xuXHRyZXR1cm4ge1xuXHRcdHJlbGF0aW9uTmFtZSxcblx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0XHR0eXBlLFxuXHRcdHF1ZXVlVHlwZTogYWRkUmVsYXRpb24gP1xuXHRcdFx0VFlQRV9RVUVVRV9SRUxBVElPTl9BREQgOlxuXHRcdFx0VFlQRV9RVUVVRV9SRUxBVElPTl9ERUxFVEUsXG5cdH07XG59XG5cbi8qKlxuICogQWN0aW9uIGNyZWF0b3IgZm9yIHJlbW92aW5nIHRoZSBkaXJ0eSByZWxhdGlvbiBmcm9tIHRoZSBhZGQgcmVsYXRpb24gc3RhdGVcbiAqIHJlY29yZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gcmVsYXRpb25FbnRpdHlJZFxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHtcbiAqIFx0e1xuICogXHRcdHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuICogXHRcdHJlbGF0aW9uRW50aXR5SWQ6IG51bWJlcixcbiAqIFx0XHRtb2RlbE5hbWU6IHN0cmluZyxcbiAqIFx0XHRlbnRpdHlJZDogbnVtYmVyLFxuICogXHRcdHR5cGU6IHN0cmluZyxcbiAqIFx0XHRxdWV1ZVR5cGU6IHN0cmluZ1xuICogXHR9XG4gKiB9IEFuIGFjdGlvbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZURpcnR5UmVsYXRpb25BZGRpdGlvbihcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvbkVudGl0eUlkLFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRyZXR1cm4gcmVtb3ZlRGlydHlSZWxhdGlvbkZvclR5cGUoXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHQpO1xufVxuXG4vKipcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIGZvciByZW1vdmluZyB0aGUgZGlydHkgcmVsYXRpb24gZnJvbSB0aGUgZGVsZXRlIHJlbGF0aW9uXG4gKiBzdGF0ZSByZWNvcmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IHJlbGF0aW9uRW50aXR5SWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHJldHVybiB7XG4gKiBcdHtcbiAqIFx0XHRyZWxhdGlvbk5hbWU6IHN0cmluZyxcbiAqIFx0XHRyZWxhdGlvbkVudGl0eUlkOiBudW1iZXIsXG4gKiBcdFx0bW9kZWxOYW1lOiBzdHJpbmcsXG4gKiBcdFx0ZW50aXR5SWQ6IG51bWJlcixcbiAqIFx0XHR0eXBlOiBzdHJpbmcsXG4gKiBcdFx0cXVldWVUeXBlOiBzdHJpbmdcbiAqIFx0fVxuICogfSBBbiBhY3Rpb24gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZURpcnR5UmVsYXRpb25EZWxldGlvbihcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvbkVudGl0eUlkLFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRyZXR1cm4gcmVtb3ZlRGlydHlSZWxhdGlvbkZvclR5cGUoXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHRcdGZhbHNlLFxuXHQpO1xufVxuXG5leHBvcnQge1xuXHRyZW1vdmVBbGxSZWxhdGVkRW50aXRpZXNGb3JNb2RlbEVudGl0eSxcblx0cmVtb3ZlUmVsYXRlZEVudGl0aWVzLFxuXHRyZW1vdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24sXG5cdHJlbW92ZURpcnR5UmVsYXRpb25EZWxldGlvbixcblx0cmVtb3ZlRGlydHlSZWxhdGlvbkZvclR5cGUsXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgc29tZSwga2V5cyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgc2VsZWN0IGFzIGRhdGFTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZGlzcGF0Y2gsIHNlbGVjdCB9IGZyb20gJy4uLy4uL2Jhc2UtY29udHJvbHMnO1xuaW1wb3J0IHsgQUNUSU9OX1RZUEVTIH0gZnJvbSAnLi9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0ICogYXMgbW9kZWxTcGVjaWZpY1NlbGVjdG9ycyBmcm9tICcuLi9tb2RlbC9tb2RlbC1zZWxlY3RvcnMtaW5kZXgnO1xuXG5jb25zdCB7IHJlc2V0czogdHlwZXMgfSA9IEFDVElPTl9UWVBFUztcblxuLyoqXG4gKiBSZXNldHMgdGhlIGVudGlyZSBzdGF0ZSB0byBpdHMgZGVmYXVsdCBmb3IgdGhlIHN0b3JlLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIHJlc2V0QWxsU3RhdGUoKSB7XG5cdC8vIGFjdGlvbiBmb3IgcmVzZXR0aW5nIHRoZSBlbnRpcmUgc3RhdGUuXG5cdHlpZWxkIHtcblx0XHR0eXBlOiB0eXBlcy5SRVNFVF9BTExfU1RBVEUsXG5cdH07XG5cblx0Ly8gZ2V0IHJlc29sdmVycyBmcm9tIGNvcmUvZGF0YSBhbmQgZGlzcGF0Y2ggaW52YWxpZGF0aW9uIG9mIGVhY2ggcmVzb2x2ZXIuXG5cdGNvbnN0IHJlc29sdmVycyA9IHlpZWxkIHNlbGVjdChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZ2V0Q2FjaGVkUmVzb2x2ZXJzJyxcblx0XHRSRURVQ0VSX0tFWVxuXHQpO1xuXG5cdGlmICggaW52YWxpZGF0ZUFjdGlvbnNBdmFpbGFibGUoKSApIHtcblx0XHR5aWVsZCBkaXNwYXRjaChcblx0XHRcdCdjb3JlL2RhdGEnLFxuXHRcdFx0J2ludmFsaWRhdGVSZXNvbHV0aW9uRm9yU3RvcmUnLFxuXHRcdFx0UkVEVUNFUl9LRVksXG5cdFx0KTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBkaXNwYXRjaCBpbnZhbGlkYXRpb24gb2YgdGhlIGNhY2hlZCByZXNvbHZlcnNcblx0Zm9yICggY29uc3Qgc2VsZWN0b3IgaW4gcmVzb2x2ZXJzICkge1xuXHRcdGZvciAoIGNvbnN0IGVudHJ5IG9mIHJlc29sdmVyc1sgc2VsZWN0b3IgXS5fbWFwICkge1xuXHRcdFx0eWllbGQgZGlzcGF0Y2goXG5cdFx0XHRcdCdjb3JlL2RhdGEnLFxuXHRcdFx0XHQnaW52YWxpZGF0ZVJlc29sdXRpb24nLFxuXHRcdFx0XHRSRURVQ0VSX0tFWSxcblx0XHRcdFx0c2VsZWN0b3IsXG5cdFx0XHRcdGVudHJ5WyAwIF1cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogUmVzZXRzIGFsbCBzdGF0ZSByZWxhdGVkIHRvIHRoZSBnaXZlbiBtb2RlbE5hbWVcbiAqXG4gKiBOb3RlOiBUaGlzIGRvZXMgbm90IHJlc2V0IGFueSBzdGF0ZSBpbiB0aGUgbW9kZWxTcGVjaWZpYyB0cmVlIGFzIHRoZXJlIGlzIG5vXG4gKiB3YXkgdG8ga25vdyB3aGF0IGFwcGxpZXMgdG8gdGhlIGN1cnJlbnQgbW9kZWwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24qIHJlc2V0U3RhdGVGb3JNb2RlbCggbW9kZWxOYW1lICkge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHlpZWxkIHtcblx0XHR0eXBlOiB0eXBlcy5SRVNFVF9TVEFURV9GT1JfTU9ERUwsXG5cdFx0bW9kZWxOYW1lLFxuXHR9O1xuXG5cdC8vIGdldCByZXNvbHZlcnMgZnJvbSBjb3JlL2RhdGFcblx0Y29uc3QgcmVzb2x2ZXJzID0geWllbGQgc2VsZWN0KFxuXHRcdCdjb3JlL2RhdGEnLFxuXHRcdCdnZXRDYWNoZWRSZXNvbHZlcnMnLFxuXHRcdFJFRFVDRVJfS0VZXG5cdCk7XG5cblx0Ly8gZGlzcGF0Y2ggaW52YWxpZGF0aW9uIG9mIHRoZSBjYWNoZWQgcmVzb2x2ZXJzIGZvciBhbnkgcmVzb2x2ZXIgdGhhdFxuXHQvLyBoYXMgYSB2YXJpYXRpb24gb2YgbW9kZWxOYW1lIGluIHRoZSBzZWxlY3RvciBuYW1lIG9yIGluIHRoZSBhcmdzIGZvciB0aGVcblx0Ly8gY2FjaGVkIHJlc29sdmVyLlxuXHRmb3IgKCBjb25zdCBzZWxlY3RvciBpbiByZXNvbHZlcnMgKSB7XG5cdFx0Zm9yICggY29uc3QgZW50cnkgb2YgcmVzb2x2ZXJzWyBzZWxlY3RvciBdLl9tYXAgKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChcblx0XHRcdFx0XHRtb2RlbE5hbWVJblNlbGVjdG9yKCBzZWxlY3RvciwgbW9kZWxOYW1lICkgfHxcblx0XHRcdFx0XHRtb2RlbE5hbWVJbkFyZ3MoIGVudHJ5WyAwIF0sIG1vZGVsTmFtZSApXG5cdFx0XHRcdCkgJiZcblx0XHRcdFx0ISBzZWxlY3RvcklzTW9kZWxTcGVjaWZpYyggc2VsZWN0b3IgKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFx0XHRcdCdjb3JlL2RhdGEnLFxuXHRcdFx0XHRcdCdpbnZhbGlkYXRlUmVzb2x1dGlvbicsXG5cdFx0XHRcdFx0UkVEVUNFUl9LRVksXG5cdFx0XHRcdFx0c2VsZWN0b3IsXG5cdFx0XHRcdFx0ZW50cnlbIDAgXSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGdpdmVuIG1vZGVsTmFtZSBpcyBmb3VuZCBpbiB0aGUgZ2l2ZW5cbiAqIHNlbGVjdG9yTmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyBpdCBpcyBwcmVzZW50LCBmYWxzZSBtZWFucyBpdCBpc24ndFxuICovXG5jb25zdCBtb2RlbE5hbWVJblNlbGVjdG9yID0gKCBzZWxlY3Rvck5hbWUsIG1vZGVsTmFtZSApID0+IHtcblx0Y29uc3Qgc2luZ3VsYXJOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRzZWxlY3Rvck5hbWUgPSBzZWxlY3Rvck5hbWUudG9Mb3dlckNhc2UoKTtcblx0cmV0dXJuIHNlbGVjdG9yTmFtZS5pbmRleE9mKCBzaW5ndWxhck5hbWUgKSA+IC0xO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGdpdmVuIG1vZGVsTmFtZSBpcyBmb3VuZCBpbiB0aGUgZ2l2ZW5cbiAqIHNldCBvZiBhcmdzLlxuICpcbiAqIFRoaXMgYWxzbyBjb25zaWRlcnMgaWYgYW55IG9mIHRoZSBhcmdzIGFyZSBhbiBpbnN0YW5jZSBvZiBCYXNlRW50aXR5IGFuZFxuICogaWYgdGhhdCBCYXNlRW50aXR5IGluc3RhbmNlIGlzIGZvciB0aGUgZ2l2ZW4gbW9kZWwuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJnc1xuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIGl0IGlzIHByZXNlbnQsIGZhbHNlIG1lYW5zIGl0IGlzbid0LlxuICovXG5jb25zdCBtb2RlbE5hbWVJbkFyZ3MgPSAoIGFyZ3MsIG1vZGVsTmFtZSApID0+IHtcblx0Y29uc3Qgc2luZ3VsYXJOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBoYXNNb2RlbE5hbWUgPSBhcmdzLmluZGV4T2YoIHNpbmd1bGFyTmFtZSApID4gLTE7XG5cdGlmICggaGFzTW9kZWxOYW1lICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gaXQncyBwb3NzaWJsZSBvbmUgb2YgdGhlIGFyZ3MgaXMgYW4gaW5zdGFuY2Ugb2YgQmFzZUVudGl0eS4gIElmIHNvLFxuXHQvLyB0aGVuIGxldCdzIGNvbXBhcmUgYWdhaW5zdCB0aGUgbW9kZWxOYW1lIG9uIHRoZSBlbnRpdHkgaW5zdGFuY2UuXG5cdHJldHVybiBzb21lKFxuXHRcdGFyZ3MsXG5cdFx0KCBhcmcgKSA9PiB7XG5cdFx0XHRyZXR1cm4gaXNNb2RlbEVudGl0eU9mTW9kZWwoIGFyZywgc2luZ3VsYXJOYW1lICk7XG5cdFx0fVxuXHQpO1xufTtcblxuLyoqXG4gKiBGb3IgdGhlIGdpdmVuIHNlbGVjdG9yIG5hbWUgYW5kIChvcHRpb25hbCkgc2VsZWN0b3JzVG9JbnZhbGlkYXRlLCB0aGlzXG4gKiByZXR1cm5zIHdoZXRoZXIgdGhlIHNlbGVjdG9yTmFtZSBpcyBhIG1hdGNoIGZvciB0aGUgc2VsZWN0b3JzIHRvIGludmFsaWRhdGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yTmFtZVxuICogQHBhcmFtIHtBcnJheXxudWxsP30gc2VsZWN0b3JzVG9JbnZhbGlkYXRlIElmIG51bGwsIHRoZW4gdGhlIG1hdGNoIGFycmF5IHdpbGxcbiAqIGJlIG9idGFpbmVkIGZyb20gdGhlIHJlZ2lzdGVyZWQgbW9kZWxTcGVjaWZpY1NlbGVjdG9ycyBpbXBvcnRlZCBmb3IgdGhlXG4gKiBtb2R1bGVcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIHRoZXJlIGlzIGEgbWF0Y2gsIGZhbHNlIG1lYW5zIHRoZXJlIGlzIG5vdC5cbiAqL1xuY29uc3Qgc2VsZWN0b3JJc01vZGVsU3BlY2lmaWMgPSAoXG5cdHNlbGVjdG9yTmFtZSxcblx0c2VsZWN0b3JzVG9JbnZhbGlkYXRlID0gbnVsbFxuKSA9PiB7XG5cdHNlbGVjdG9yc1RvSW52YWxpZGF0ZSA9IHNlbGVjdG9yc1RvSW52YWxpZGF0ZSA9PT0gbnVsbCA/XG5cdFx0a2V5cyggbW9kZWxTcGVjaWZpY1NlbGVjdG9ycyApIDpcblx0XHRzZWxlY3RvcnNUb0ludmFsaWRhdGU7XG5cdHJldHVybiBzZWxlY3RvcnNUb0ludmFsaWRhdGUuaW5kZXhPZiggc2VsZWN0b3JOYW1lICkgPiAtMTtcbn07XG5cbi8qKlxuICogUmVzZXRzIGFsbCBtb2RlbCBzcGVjaWZpYyBzdGF0ZSAob3B0aW9uYWxseSByZXN0cmljdGVkIHRvIHRoZSBnaXZlbiBzZWxlY3RvclxuICogbmFtZSBpZiBwcmVzZW50KS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lICBJZiBwcmVzZW50IHRoZW4gc3RhdGUgd2lsbCBvbmx5IGJlIHJlc2V0IGZvclxuICogdGhlIHNwZWNpZmljIHNlbGVjdG9yLiAgT3RoZXJ3aXNlIGFsbCBtb2RlbCBzcGVjaWZpYyBzdGF0ZSBpcyByZXNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiByZXNldEFsbE1vZGVsU3BlY2lmaWMoIHNlbGVjdG9yTmFtZSApIHtcblx0eWllbGQge1xuXHRcdHR5cGU6IHNlbGVjdG9yTmFtZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHR5cGVzLlJFU0VUX0FMTF9NT0RFTF9TUEVDSUZJQyA6XG5cdFx0XHR0eXBlcy5SRVNFVF9NT0RFTF9TUEVDSUZJQ19GT1JfU0VMRUNUT1IsXG5cdFx0c2VsZWN0b3I6IHNlbGVjdG9yTmFtZSxcblx0fTtcblxuXHQvLyBnZXQgcmVzb2x2ZXJzXG5cdGNvbnN0IHJlc29sdmVycyA9IHlpZWxkIHNlbGVjdChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZ2V0Q2FjaGVkUmVzb2x2ZXJzJyxcblx0XHRSRURVQ0VSX0tFWVxuXHQpO1xuXG5cdGNvbnN0IHNlbGVjdG9yc1RvSW52YWxpZGF0ZSA9IGtleXMoIG1vZGVsU3BlY2lmaWNTZWxlY3RvcnMgKTtcblxuXHQvLyBkaXNwYXRjaCBpbnZhbGlkYXRpb24gb2YgdGhlIGNhY2hlZCByZXNvbHZlcnMgZm9yIG1vZGVsIHNwZWNpZmljIHNlbGVjdG9yXG5cdGZvciAoIGNvbnN0IHNlbGVjdG9yIGluIHJlc29sdmVycyApIHtcblx0XHRpZiAoIHNlbGVjdG9yTmFtZSA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdG9yTmFtZSA9PT0gc2VsZWN0b3IgKSB7XG5cdFx0XHRmb3IgKCBjb25zdCBlbnRyeSBvZiByZXNvbHZlcnNbIHNlbGVjdG9yIF0uX21hcCApIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHNlbGVjdG9ySXNNb2RlbFNwZWNpZmljKCBzZWxlY3Rvciwgc2VsZWN0b3JzVG9JbnZhbGlkYXRlIClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0eWllbGQgZGlzcGF0Y2goXG5cdFx0XHRcdFx0XHQnY29yZS9kYXRhJyxcblx0XHRcdFx0XHRcdCdpbnZhbGlkYXRlUmVzb2x1dGlvbicsXG5cdFx0XHRcdFx0XHRSRURVQ0VSX0tFWSxcblx0XHRcdFx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0XHRcdFx0ZW50cnlbIDAgXSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogUmVzZXQgbW9kZWwgc3BlY2lmaWMgc3RhdGUgZm9yIHRoZSBnaXZlbiBzZWxlY3RvciBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3Rvck5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiByZXNldE1vZGVsU3BlY2lmaWNGb3JTZWxlY3Rvciggc2VsZWN0b3JOYW1lICkge1xuXHR5aWVsZCogcmVzZXRBbGxNb2RlbFNwZWNpZmljKCBzZWxlY3Rvck5hbWUgKTtcbn1cblxuLyoqXG4gKiBSZXNldHMgYWxsIHN0YXRlIGZvciBhIGdpdmVuIG1vZGVsIHNwZWNpZmljIHNlbGVjdG9yIGFuZCBpdHMgYXJnc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3Rvck5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiByZXNldE1vZGVsU3BlY2lmaWNGb3JTZWxlY3RvckFuZEFyZ3MoIHNlbGVjdG9yTmFtZSwgLi4uYXJncyApIHtcblx0eWllbGQge1xuXHRcdHR5cGU6IHR5cGVzLlJFU0VUX01PREVMX1NQRUNJRklDX0ZPUl9TRUxFQ1RPUl9BTkRfQVJHUyxcblx0XHRzZWxlY3Rvcjogc2VsZWN0b3JOYW1lLFxuXHRcdGFyZ3MsXG5cdH07XG5cblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0J2NvcmUvZGF0YScsXG5cdFx0J2ludmFsaWRhdGVSZXNvbHV0aW9uJyxcblx0XHRSRURVQ0VSX0tFWSxcblx0XHRzZWxlY3Rvck5hbWUsXG5cdFx0YXJncyxcblx0KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZm9yIGRldGVybWluaW5nIGlmIGFjdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgYGNvcmUvZGF0YWAgcGFja2FnZS5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBhZGRpdGlvbmFsIGludmFsaWRhdGlvbiBhY3Rpb25zIGF2YWlsYWJsZS5cbiAqL1xuY29uc3QgaW52YWxpZGF0ZUFjdGlvbnNBdmFpbGFibGUgPSAoKSA9PiB7XG5cdHJldHVybiBkYXRhU2VsZWN0KCAnY29yZS9kYXRhJyApLmludmFsaWRhdGVSZXNvbHV0aW9uRm9yU3RvcmUgIT09IHVuZGVmaW5lZDtcbn07XG4iLCJleHBvcnQgY29uc3QgUkVEVUNFUl9LRVkgPSAnZXZlbnRlc3ByZXNzby9jb3JlJztcbmV4cG9ydCBjb25zdCBUWVBFX1FVRVVFX1JFTEFUSU9OX0RFTEVURSA9ICdkZWxldGUnO1xuZXhwb3J0IGNvbnN0IFRZUEVfUVVFVUVfUkVMQVRJT05fQUREID0gJ2FkZCc7XG4iLCIvKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgcmVnaXN0ZXJTdG9yZSB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCByZWR1Y2VyIGZyb20gJy4vcmVkdWNlcnMnO1xuaW1wb3J0ICogYXMgc2VsZWN0b3JzIGZyb20gJy4vc2VsZWN0b3JzJztcbmltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCAqIGFzIHJlc29sdmVycyBmcm9tICcuL3Jlc29sdmVycyc7XG5pbXBvcnQge1xuXHRzZWxlY3RvcnMgYXMgbW9kZWxTZWxlY3RvcnMsXG5cdGFjdGlvbnMgYXMgbW9kZWxBY3Rpb25zLFxuXHRyZXNvbHZlcnMgYXMgbW9kZWxSZXNvbHZlcnMsXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgY29udHJvbHMgZnJvbSAnLi4vYmFzZS1jb250cm9scyc7XG5cbi8qKlxuICogUmVnaXN0ZXJzIHN0b3JlIGZvciAnZXZlbnRlc3ByZXNzby9jb3JlJy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmVnaXN0ZXJTdG9yZSggUkVEVUNFUl9LRVksIHtcblx0cmVkdWNlcixcblx0YWN0aW9uczogeyAuLi5hY3Rpb25zLCAuLi5tb2RlbEFjdGlvbnMgfSxcblx0c2VsZWN0b3JzOiB7IC4uLnNlbGVjdG9ycywgLi4ubW9kZWxTZWxlY3RvcnMgfSxcblx0cmVzb2x2ZXJzOiB7IC4uLnJlc29sdmVycywgLi4ubW9kZWxSZXNvbHZlcnMgfSxcblx0Y29udHJvbHMsXG59ICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0aXNNb2RlbEVudGl0eU9mTW9kZWwsXG5cdGlzTW9kZWxFbnRpdHlGYWN0b3J5T2ZNb2RlbCxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBJbnZhbGlkTW9kZWxFbnRpdHkgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IGdldEVuZHBvaW50IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZGlzcGF0Y2gsIGZldGNoLCByZXNvbHZlU2VsZWN0IH0gZnJvbSAnLi4vLi4vLi4vYmFzZS1jb250cm9scyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSBhcyBTQ0hFTUFfUkVEVUNFUl9LRVkgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvY29uc3RhbnRzJztcblxuLyoqXG4gKiBBY3Rpb24gZm9yIHJlY2VpdmluZyB0aGUgbGF0ZXN0IGNoZWNrLWluIHJlY29yZCBmb3IgdGhlIGdpdmVuIGRhdGV0aW1lIGlkIGFuZFxuICogcmVnaXN0cmF0aW9uIGlkLlxuICpcbiAqIEBwYXJhbSB7QmFzZUVudGl0eX0gY2hlY2tpbkVudGl0eVxuICogQHBhcmFtIHtudW1iZXJ9IHJlZ2lzdHJhdGlvbklkXG4gKiBAcGFyYW0ge251bWJlcn0gZGF0ZVRpbWVJZFxuICovXG5leHBvcnQgZnVuY3Rpb24qIHJlY2VpdmVMYXRlc3RDaGVja2luKFxuXHRjaGVja2luRW50aXR5LFxuXHRyZWdpc3RyYXRpb25JZCxcblx0ZGF0ZVRpbWVJZFxuKSB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggY2hlY2tpbkVudGl0eSwgJ2NoZWNraW4nICkgKSB7XG5cdFx0dGhyb3cgbmV3IEludmFsaWRNb2RlbEVudGl0eShcblx0XHRcdCdFeHBlY3RlZCBhIGNoZWNraW4gcmVjb3JkLicsXG5cdFx0XHRjaGVja2luRW50aXR5XG5cdFx0KTtcblx0fVxuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRSRURVQ0VSX0tFWSxcblx0XHQncmVjZWl2ZUVudGl0eScsXG5cdFx0Y2hlY2tpbkVudGl0eVxuXHQpO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldEVudGl0eUJ5SWQnLFxuXHRcdFsgJ2NoZWNraW4nLCBjaGVja2luRW50aXR5LmlkIF1cblx0KTtcblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J3JlY2VpdmVTZWxlY3RvclZhbHVlJyxcblx0XHQnZ2V0TGF0ZXN0Q2hlY2tpbicsXG5cdFx0Y2hlY2tpbkVudGl0eS5pZCxcblx0XHRyZWdpc3RyYXRpb25JZCxcblx0XHRkYXRlVGltZUlkLFxuXHQpO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldExhdGVzdENoZWNraW4nLFxuXHRcdFsgcmVnaXN0cmF0aW9uSWQsIGRhdGVUaW1lSWQgXVxuXHQpO1xufVxuXG4vKipcbiAqIFRvZ2dsZXMgdGhlIGNoZWNraW4gc3RhdGUgZm9yIHRoZSBnaXZlbiByZWdpc3RyYXRpb24gaWQgYW5kIGRhdGV0aW1lIGlkLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWdpc3RyYXRpb25JZFxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVUaW1lSWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2UgIElmIHRydWUsIHRoZW4gd2hldGhlciB0aGUgcmVnaXN0cmF0aW9uIENBTiBiZSBjaGVja2VkXG4gKiBpbiBvciBub3QgaXMgaWdub3JlZC5cbiAqIEByZXR1cm4ge0Jhc2VFbnRpdHl8bnVsbH0gTnVsbCBpZiB0aGVyZSBpcyBhbiBlcnJvciBvciB0aGUgbmV3IENoZWNraW4gZW50aXR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogdG9nZ2xlQ2hlY2tpbiggcmVnaXN0cmF0aW9uSWQsIGRhdGVUaW1lSWQsIGZvcmNlID0gZmFsc2UgKSB7XG5cdGxldCBjaGVja0luUmVzcG9uc2U7XG5cdGNvbnN0IHBhdGggPSBgJHsgZ2V0RW5kcG9pbnQoICdyZWdpc3RyYXRpb24nICkgfS9gICtcblx0XHRgJHsgcmVnaXN0cmF0aW9uSWQgfS90b2dnbGVfY2hlY2tpbl9mb3JfZGF0ZXRpbWUvJHsgZGF0ZVRpbWVJZCB9YDtcblx0dHJ5IHtcblx0XHRjaGVja0luUmVzcG9uc2UgPSB5aWVsZCBmZXRjaCgge1xuXHRcdFx0cGF0aCxcblx0XHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdFx0ZGF0YTogeyBmb3JjZSB9LFxuXHRcdH0gKTtcblx0fSBjYXRjaCAoIGVycm9yICkge1xuXHRcdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFx0J2NvcmUvbm90aWNlcycsXG5cdFx0XHQnY3JlYXRlRXJyb3JOb3RpY2UnLFxuXHRcdFx0X18oXG5cdFx0XHRcdCdUb2dnbGluZyB0aGUgY2hlY2tpbiBmYWlsZWQuIFVzdWFsbHkgdGhpcyBpcyBkdWUgdG8gdGhlIGNoZWNraW4gbm90IGhhdmluZyBhY2Nlc3MnLFxuXHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgZmFjdG9yeSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRGYWN0b3J5Rm9yTW9kZWwnLFxuXHRcdCdjaGVja2luJ1xuXHQpO1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsKCBmYWN0b3J5LCAnY2hlY2tpbicgKSApIHtcblx0XHR3YXJuaW5nKFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHQnVGhlIGZhY3RvcnkgZm9yIHRoZSBjaGVja2luIG1vZGVsIGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQuJ1xuXHRcdCk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgbmV3Q2hlY2tpbiA9IGZhY3RvcnkuZnJvbUV4aXN0aW5nKCBjaGVja0luUmVzcG9uc2UgKTtcblx0eWllbGQgZGlzcGF0Y2goXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J3JlY2VpdmVMYXRlc3RDaGVja2luJyxcblx0XHRuZXdDaGVja2luLFxuXHRcdHJlZ2lzdHJhdGlvbklkLFxuXHRcdGRhdGVUaW1lSWQsXG5cdCk7XG5cdHJldHVybiBuZXdDaGVja2luO1xufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGdldEVuZHBvaW50IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGZldGNoLCBkaXNwYXRjaCwgcmVzb2x2ZVNlbGVjdCB9IGZyb20gJy4uLy4uLy4uL2Jhc2UtY29udHJvbHMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgYXMgU0NIRU1BX1JFRFVDRVJfS0VZIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL2NvbnN0YW50cyc7XG5cbi8qKlxuICogUmVzb2x2ZXIgZm9yIHRoZSBnZXRMYXRlc3RDaGVja2luIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcmVnaXN0cmF0aW9uSWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlVGltZUlkXG4gKiBAcmV0dXJuIHtCYXNlRW50aXR5fG51bGx9IE51bGwgaWYgdGhlcmUgaXMgYW4gZXJyb3Igb3Igbm8gY2hlY2tpbiByZWNvcmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogZ2V0TGF0ZXN0Q2hlY2tpbiggcmVnaXN0cmF0aW9uSWQsIGRhdGVUaW1lSWQgKSB7XG5cdGxldCBjaGVja0luUmVzcG9uc2U7XG5cdHdhcm5pbmcoXG5cdFx0ISBpc1VuZGVmaW5lZCggcmVnaXN0cmF0aW9uSWQgKSAmJiAhIGlzVW5kZWZpbmVkKCBkYXRlVGltZUlkICksXG5cdFx0J0JvdGggYSByZWdpc3RyYXRpb24gaWQgYW5kIGRhdGV0aW1lIGlkIGFyZSBuZWVkZWQgZm9yIGdldHRpbmcgdGhlICcgK1xuXHRcdCdsYXRlc3QgY2hlY2tpbi4nXG5cdCk7XG5cdGNvbnN0IHBhdGggPSBgJHsgZ2V0RW5kcG9pbnQoICdjaGVja2luJyApIH0vYCArXG5cdFx0YD93aGVyZVtSRUdfSURdPSR7IHJlZ2lzdHJhdGlvbklkIH0md2hlcmVbRFRUX0lEXT0keyBkYXRlVGltZUlkIH1gICtcblx0XHQnJm9yZGVyX2J5W0NIS190aW1lc3RhbXBdPURFU0MmbGltaXQ9MSc7XG5cdHRyeSB7XG5cdFx0Y2hlY2tJblJlc3BvbnNlID0geWllbGQgZmV0Y2goIHtcblx0XHRcdHBhdGgsXG5cdFx0XHRtZXRob2Q6ICdHRVQnLFxuXHRcdH0gKTtcblx0XHRpZiAoIGlzRW1wdHkoIGNoZWNrSW5SZXNwb25zZSApICkge1xuXHRcdFx0Ly8gdGhlcmUgaXMgbm8gY2hlY2tpbiByZWNvcmQgeWV0IVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNoZWNrSW5SZXNwb25zZSA9IGNoZWNrSW5SZXNwb25zZS5wb3AoKTtcblx0fSBjYXRjaCAoIGVycm9yICkge1xuXHRcdC8vIEB0b2RvIG5lZWQgdG8gZG8gc29tZXRoaW5nIGRpZmZlcmVudCB3aGVuIHRoZSB1c2VyIGlzbid0IGF1dGhlZCBhbmRcblx0XHQvLyB0aGlzIGlzIHRoZSBjYXVzZSBmb3IgdGhlIGVycm9yP1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IGZhY3RvcnkgPSB5aWVsZCByZXNvbHZlU2VsZWN0KFxuXHRcdFNDSEVNQV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0RmFjdG9yeUZvck1vZGVsJyxcblx0XHQnY2hlY2tpbidcblx0KTtcblx0aWYgKCAhIGlzTW9kZWxFbnRpdHlGYWN0b3J5T2ZNb2RlbCggZmFjdG9yeSwgJ2NoZWNraW4nICkgKSB7XG5cdFx0d2FybmluZyhcblx0XHRcdGZhbHNlLFxuXHRcdFx0J1RoZSBmYWN0b3J5IGZvciB0aGUgY2hlY2tpbiBtb2RlbCBjb3VsZCBub3QgYmUgcmV0cmlldmVkLidcblx0XHQpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IG5ld0NoZWNraW4gPSBmYWN0b3J5LmZyb21FeGlzdGluZyggY2hlY2tJblJlc3BvbnNlICk7XG5cdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFJFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlTGF0ZXN0Q2hlY2tpbicsXG5cdFx0bmV3Q2hlY2tpbixcblx0XHRyZWdpc3RyYXRpb25JZCxcblx0XHRkYXRlVGltZUlkLFxuXHQpO1xuXHRyZXR1cm4gbmV3Q2hlY2tpbjtcbn1cbiIsImltcG9ydCB7IGdldFNlbGVjdG9yVmFsdWUgfSBmcm9tICcuLi9tb2RlbC1zcGVjaWZpYy1zZWxlY3RvcnMnO1xuaW1wb3J0IHsgZ2V0RW50aXR5QnlJZCB9IGZyb20gJy4uLy4uL3NlbGVjdG9ycyc7XG5cbi8qKlxuICogR2V0cyB0aGUgbGF0ZXN0IGNoZWNraW4gZW50aXR5IGluIHRoZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIHZhbHVlLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gcmVnaXN0cmF0aW9uSWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlVGltZUlkXG4gKiBAcmV0dXJuIHtudWxsfEJhc2VFbnRpdHl9IFRoZSBjaGVja2luIGVudGl0eSBpZiBpdCBleGlzdHMgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExhdGVzdENoZWNraW4oIHN0YXRlLCByZWdpc3RyYXRpb25JZCwgZGF0ZVRpbWVJZCApIHtcblx0Y29uc3QgY2hlY2tpbklkID0gZ2V0U2VsZWN0b3JWYWx1ZShcblx0XHRzdGF0ZSxcblx0XHQnZ2V0TGF0ZXN0Q2hlY2tpbicsXG5cdFx0cmVnaXN0cmF0aW9uSWQsXG5cdFx0ZGF0ZVRpbWVJZFxuXHQpO1xuXHRpZiAoICEgY2hlY2tpbklkICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiBnZXRFbnRpdHlCeUlkKCBzdGF0ZSwgJ2NoZWNraW4nLCBjaGVja2luSWQgKTtcbn1cbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0XG4gKi9cbmltcG9ydCB7IE1PREVMX05BTUVTIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZ2V0TWV0aG9kTmFtZSB9IGZyb20gJy4uLy4uL2Jhc2UtbW9kZWwnO1xuXG4vKipcbiAqIER5bmFtaWMgY3JlYXRpb24gb2YgYWN0aW9ucyBmb3IgZW50aXRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gVGhlIGFjdGlvbiBvYmplY3QgdGhhdCBkeW5hbWljYWxseSBjcmVhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCBiZSBtYXBwZWQgdG8uXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgYWN0aW9uIG9iamVjdCBjb250YWluaW5nIGZ1bmN0aW9ucyBmb3IgZWFjaCBtb2RlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjdGlvbnMgPSAoIGFjdGlvbiApID0+IE1PREVMX05BTUVTLnJlZHVjZShcblx0KCBhY3Rpb25zLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCcnLFxuXHRcdFx0J2NyZWF0ZSdcblx0XHQpIF0gPSAoIGVudGl0eSApID0+IGFjdGlvbi5jcmVhdGVFbnRpdHkoIG1vZGVsTmFtZSwgZW50aXR5ICk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdieUlkJyxcblx0XHRcdCdkZWxldGUnXG5cdFx0KSBdID0gKCBlbnRpdHlJZCApID0+IGFjdGlvbi5kZWxldGVFbnRpdHlCeUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdieUlkJyxcblx0XHRcdCd0cmFzaCcsXG5cdFx0KSBdID0gKCBlbnRpdHlJZCApID0+IGFjdGlvbi50cmFzaEVudGl0eUJ5SWQoIG1vZGVsTmFtZSwgZW50aXR5SWQgKTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J3JlY29yZCcsXG5cdFx0XHQncGVyc2lzdCdcblx0XHQpIF0gPSAoIGVudGl0eSApID0+IGFjdGlvbi5wZXJzaXN0RW50aXR5UmVjb3JkKCBtb2RlbE5hbWUsIGVudGl0eSApO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnaWQnLFxuXHRcdFx0J3BlcnNpc3RGb3InLFxuXHRcdCkgXSA9ICggZW50aXR5SWQgKSA9PiBhY3Rpb24ucGVyc2lzdEZvckVudGl0eUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdpZHMnLFxuXHRcdFx0J3BlcnNpc3RGb3InLFxuXHRcdCkgXSA9ICggZW50aXR5SWRzICkgPT4gYWN0aW9uLnBlcnNpc3RGb3JFbnRpdHlJZHMoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRlbnRpdHlJZHNcblx0XHQpO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnJyxcblx0XHRcdCdwZXJzaXN0RGVsZXRlc0ZvcicsXG5cdFx0KSBdID0gKCkgPT4gYWN0aW9uLnBlcnNpc3REZWxldGVzRm9yTW9kZWwoIG1vZGVsTmFtZSApO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnJyxcblx0XHRcdCdwZXJzaXN0VHJhc2hlc0ZvcicsXG5cdFx0KSBdID0gKCkgPT4gYWN0aW9uLnBlcnNpc3RUcmFzaGVzRm9yTW9kZWwoIG1vZGVsTmFtZSApO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnYnlJZCcsXG5cdFx0XHQncmVtb3ZlJyxcblx0XHQpIF0gPSAoIGVudGl0eUlkICkgPT4gYWN0aW9uLnJlbW92ZUVudGl0eUJ5SWQoIG1vZGVsTmFtZSwgZW50aXR5SWQgKTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2lkJyxcblx0XHRcdCdyZW1vdmVEZWxldGUnLFxuXHRcdCkgXSA9ICggZW50aXR5SWQgKSA9PiBhY3Rpb24ucmVtb3ZlRGVsZXRlRW50aXR5SWQoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRlbnRpdHlJZFxuXHRcdCk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdpZCcsXG5cdFx0XHQncmVtb3ZlVHJhc2gnLFxuXHRcdCkgXSA9ICggZW50aXR5SWQgKSA9PiBhY3Rpb24ucmVtb3ZlVHJhc2hFbnRpdHlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnYW5kUmVzb2x2ZScsXG5cdFx0XHQncmVjZWl2ZScsXG5cdFx0XHR0cnVlXG5cdFx0KSBdID0gKCBlbnRpdGllcyApID0+IGFjdGlvbi5yZWNlaXZlRW50aXRpZXNBbmRSZXNvbHZlKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZW50aXRpZXNcblx0XHQpO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQncmVjb3JkcycsXG5cdFx0XHQncmVjZWl2ZUFuZFJlcGxhY2UnLFxuXHRcdCkgXSA9ICggZW50aXRpZXMgKSA9PiBhY3Rpb24ucmVjZWl2ZUFuZFJlcGxhY2VFbnRpdHlSZWNvcmRzKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZW50aXRpZXNcblx0XHQpO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnaWQnLFxuXHRcdFx0J3JlY2VpdmVUcmFzaCcsXG5cdFx0KSBdID0gKCBlbnRpdHlJZCApID0+IGFjdGlvbi5yZWNlaXZlVHJhc2hFbnRpdHlJZChcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkXG5cdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2lkJyxcblx0XHRcdCdyZWNlaXZlRGVsZXRlJyxcblx0XHQpIF0gPSAoIGVudGl0eUlkICkgPT4gYWN0aW9uLnJlY2VpdmVEZWxldGVFbnRpdHlJZChcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkXG5cdFx0KTtcblx0XHRyZXR1cm4gYWN0aW9ucztcblx0fSxcblx0e31cbik7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydFxuICovXG5pbXBvcnQgeyBNT0RFTF9OQU1FUyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGdldE1ldGhvZE5hbWUgfSBmcm9tICcuLi8uLi9iYXNlLW1vZGVsJztcblxuLyoqXG4gKiBEeW5hbWljIGNyZWF0aW9uIG9mIHJlc29sdmVycyBmb3IgZW50aXRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSByZXNvbHZlciBUaGUgcmVzb2x2ZXIgb2JqZWN0IHRoYXQgZHluYW1pY2FsbHkgY3JlYXRlZFxuICogZnVuY3Rpb25zIHdpbGwgYmUgbWFwcGVkIHRvLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgbmV3IHJlc29sdmVyIG9iamVjdCBjb250YWluaW5nIGZ1bmN0aW9ucyBmb3IgZWFjaCBtb2RlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlc29sdmVycyA9ICggcmVzb2x2ZXIgKSA9PiBNT0RFTF9OQU1FUy5yZWR1Y2UoXG5cdCggcmVzb2x2ZXJzLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0cmVzb2x2ZXJzWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2J5SWQnLFxuXHRcdFx0J2dldCdcblx0XHQpIF0gPSAoIGVudGl0eUlkICkgPT4gcmVzb2x2ZXIuZ2V0RW50aXR5QnlJZCggbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xuXHRcdHJldHVybiByZXNvbHZlcnM7XG5cdH0sXG5cdHt9XG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRcbiAqL1xuaW1wb3J0IHsgTU9ERUxfTkFNRVMgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBnZXRNZXRob2ROYW1lIH0gZnJvbSAnLi4vLi4vYmFzZS1tb2RlbCc7XG5cbi8qKlxuICogRHluYW1pYyBjcmVhdGlvbiBvZiBzZWxlY3RvcnMgZm9yIGVudGl0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gc2VsZWN0b3Igc2VsZWN0b3Igb2JqZWN0IHRoYXQgZHluYW1pY2FsbHkgY3JlYXRlZCBmdW5jdGlvbnNcbiAqIHdpbGwgYmUgbWFwcGVkIHRvLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgbmV3IHNlbGVjdG9yIG9iamVjdHMgZm9yIGVhY2ggbW9kZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTZWxlY3RvcnMgPSAoIHNlbGVjdG9yICkgPT4gTU9ERUxfTkFNRVMucmVkdWNlKFxuXHQoIHNlbGVjdG9ycywgbW9kZWxOYW1lICkgPT4ge1xuXHRcdHNlbGVjdG9yc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdyZWNvcmRzJyxcblx0XHRcdCdnZXQnXG5cdFx0KSBdID0gKFxuXHRcdFx0c3RhdGVcblx0XHQpID0+IHNlbGVjdG9yLmdldEVudGl0eVJlY29yZHNGb3JNb2RlbCggc3RhdGUsIG1vZGVsTmFtZSApO1xuXHRcdHNlbGVjdG9yc1sgZ2V0TWV0aG9kTmFtZSggbW9kZWxOYW1lLCAnJywgJ2dldCcsIHRydWUgKSBdID0gKFxuXHRcdFx0c3RhdGVcblx0XHQpID0+IHNlbGVjdG9yLmdldEVudGl0aWVzRm9yTW9kZWwoIHN0YXRlLCBtb2RlbE5hbWUgKTtcblx0XHRzZWxlY3RvcnNbIGdldE1ldGhvZE5hbWUoIG1vZGVsTmFtZSwgJ2J5SWQnLCAnZ2V0JyApIF0gPSAoXG5cdFx0XHRzdGF0ZSxcblx0XHRcdGVudGl0eUlkXG5cdFx0KSA9PiBzZWxlY3Rvci5nZXRFbnRpdHlCeUlkKCBzdGF0ZSwgbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xuXHRcdHNlbGVjdG9yc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdieUlkcycsXG5cdFx0XHQnZ2V0Jyxcblx0XHRcdHRydWVcblx0XHQpIF0gPSAoXG5cdFx0XHRzdGF0ZSxcblx0XHRcdGVudGl0eUlkcyxcblx0XHQpID0+IHNlbGVjdG9yLmdldEVudGl0aWVzQnlJZHMoIHN0YXRlLCBtb2RlbE5hbWUsIGVudGl0eUlkcyApO1xuXHRcdHNlbGVjdG9yc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdpZHNRdWV1ZWRGb3JUcmFzaCcsXG5cdFx0XHQnZ2V0J1xuXHRcdCkgXSA9ICggc3RhdGUgKSA9PiBzZWxlY3Rvci5nZXRFbnRpdHlJZHNRdWV1ZWRGb3JUcmFzaChcblx0XHRcdHN0YXRlLFxuXHRcdFx0bW9kZWxOYW1lXG5cdFx0KTtcblx0XHRzZWxlY3RvcnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnaWRzUXVldWVkRm9yRGVsZXRlJyxcblx0XHRcdCdnZXQnXG5cdFx0KSBdID0gKCBzdGF0ZSApID0+IHNlbGVjdG9yLmdldEVudGl0eUlkc1F1ZXVlZEZvckRlbGV0ZShcblx0XHRcdHN0YXRlLFxuXHRcdFx0bW9kZWxOYW1lXG5cdFx0KTtcblx0XHRyZXR1cm4gc2VsZWN0b3JzO1xuXHR9LFxuXHR7fVxuKTtcbiIsImltcG9ydCAqIGFzIGVudGl0eUFjdGlvbnMgZnJvbSAnLi9lbnRpdHktYWN0aW9ucyc7XG5pbXBvcnQgKiBhcyBlbnRpdHlSZXNvbHZlcnMgZnJvbSAnLi9lbnRpdHktcmVzb2x2ZXJzJztcbmltcG9ydCAqIGFzIGVudGl0eVNlbGVjdG9ycyBmcm9tICcuL2VudGl0eS1zZWxlY3RvcnMnO1xuaW1wb3J0ICogYXMgcmVsYXRpb25BY3Rpb25zIGZyb20gJy4vcmVsYXRpb24tYWN0aW9ucyc7XG5pbXBvcnQgKiBhcyByZWxhdGlvblNlbGVjdG9ycyBmcm9tICcuL3JlbGF0aW9uLXNlbGVjdG9ycyc7XG5pbXBvcnQgKiBhcyBiYXNlU2VsZWN0b3JzIGZyb20gJy4uL3NlbGVjdG9ycyc7XG5pbXBvcnQgKiBhcyBiYXNlQWN0aW9ucyBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCAqIGFzIGJhc2VSZXNvbHZlcnMgZnJvbSAnLi4vcmVzb2x2ZXJzJztcbmltcG9ydCAqIGFzIG1vZGVsQWN0aW9ucyBmcm9tICcuL21vZGVsLWFjdGlvbnMtaW5kZXgnO1xuaW1wb3J0ICogYXMgbW9kZWxTZWxlY3RvcnMgZnJvbSAnLi9tb2RlbC1zZWxlY3RvcnMtaW5kZXgnO1xuaW1wb3J0ICogYXMgbW9kZWxSZXNvbHZlcnMgZnJvbSAnLi9tb2RlbC1yZXNvbHZlcnMtaW5kZXgnO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0b3JzID0ge1xuXHQuLi5lbnRpdHlTZWxlY3RvcnMuY3JlYXRlU2VsZWN0b3JzKCBiYXNlU2VsZWN0b3JzICksXG5cdC4uLnJlbGF0aW9uU2VsZWN0b3JzLmNyZWF0ZVNlbGVjdG9ycyggYmFzZVNlbGVjdG9ycyApLFxuXHQuLi5tb2RlbFNlbGVjdG9ycyxcbn07XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25zID0ge1xuXHQuLi5lbnRpdHlBY3Rpb25zLmNyZWF0ZUFjdGlvbnMoIGJhc2VBY3Rpb25zICksXG5cdC4uLnJlbGF0aW9uQWN0aW9ucy5jcmVhdGVBY3Rpb25zKCBiYXNlQWN0aW9ucyApLFxuXHQuLi5tb2RlbEFjdGlvbnMsXG59O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZXJzID0ge1xuXHQuLi5lbnRpdHlSZXNvbHZlcnMuY3JlYXRlUmVzb2x2ZXJzKCBiYXNlUmVzb2x2ZXJzICksXG5cdC4uLm1vZGVsUmVzb2x2ZXJzLFxufTtcbiIsImV4cG9ydCAqIGZyb20gJy4vbW9kZWwtc3BlY2lmaWMtYWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2NoZWNraW4vYWN0aW9ucyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL2NoZWNraW4vcmVzb2x2ZXJzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vbW9kZWwtc3BlY2lmaWMtc2VsZWN0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vY2hlY2tpbi9zZWxlY3RvcnMnO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEFDVElPTl9UWVBFUyB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9uLXR5cGVzJztcbmNvbnN0IHsgbW9kZWxTcGVjaWZpYzogdHlwZXMgfSA9IEFDVElPTl9UWVBFUztcblxuLyoqXG4gKiBBY3Rpb24gZm9yIGFkZGluZyB0aGUgcmVzdWx0cyBvZiBhIHNwZWNpZmljIHNlbGVjdG9yIGFuZCBpdHMgdmFsdWUgdG8gdGhlXG4gKiBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtBcnJheX0gYXJnc1xuICogQHJldHVybiB7T2JqZWN0fSBBbiBhY3Rpb24gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNlaXZlU2VsZWN0b3JWYWx1ZSggc2VsZWN0b3IsIHZhbHVlLCAuLi5hcmdzICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfU0VMRUNUT1JfVkFMVUUsXG5cdFx0c2VsZWN0b3IsXG5cdFx0YXJncyxcblx0XHR2YWx1ZSxcblx0fTtcbn1cbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY3JlYXRlU2VsZWN0b3IgZnJvbSAncmVtZW1vJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHNlbGVjdG9yIGFuZCBhcmdzIGluIHRoZSBjdXJyZW50IHN0YXRlLlxuICpcbiAqIEB0eXBlIHsqfSBSZXR1cm5zIHdoYXRldmVyIHRoZSB2YWx1ZSB3YXMgYXNzaWduZWQgdG8gdGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW5cbiAqIHNlbGVjdG9yIGFuZCBpdHMgYXJncy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlbGVjdG9yVmFsdWUgPSBjcmVhdGVTZWxlY3Rvcihcblx0KCBzdGF0ZSwgc2VsZWN0b3IsIC4uLmFyZ3MgKSA9PiB7XG5cdFx0cmV0dXJuIHN0YXRlLm1vZGVsU3BlY2lmaWMuZ2V0SW4oXG5cdFx0XHRbIHNlbGVjdG9yLCBKU09OLnN0cmluZ2lmeSggYXJncyApIF1cblx0XHQpIHx8IG51bGw7XG5cdH0sXG5cdCggc3RhdGUsIHNlbGVjdG9yLCAuLi5hcmdzICkgPT4gW1xuXHRcdHN0YXRlLm1vZGVsU3BlY2lmaWMuZ2V0SW4oIFtcblx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0SlNPTi5zdHJpbmdpZnkoIGFyZ3MgKSxcblx0XHRdICksXG5cdF0sXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRcbiAqL1xuaW1wb3J0IHsgTU9ERUxfTkFNRVMgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBnZXRNZXRob2ROYW1lIH0gZnJvbSAnLi4vLi4vYmFzZS1tb2RlbCc7XG5cbi8qKlxuICogRHluYW1pYyBjcmVhdGlvbiBvZiBhY3Rpb25zIGZvciByZWxhdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gVGhlIGFjdGlvbiBvYmplY3QgdGhhdCBkeW5hbWljYWxseSBjcmVhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCBiZSBtYXBwZWQgdG8uXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgYWN0aW9uIG9iamVjdCBjb250YWluaW5nIGZ1bmN0aW9ucyBmb3IgZWFjaCBtb2RlbFxuICogcmVsYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBY3Rpb25zID0gKCBhY3Rpb24gKSA9PiBNT0RFTF9OQU1FUy5yZWR1Y2UoXG5cdCggYWN0aW9ucywgbW9kZWxOYW1lICkgPT4ge1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQncmVsYXRpb24nLFxuXHRcdFx0J2NyZWF0ZScsXG5cdFx0KSBdID0gKCBlbnRpdHlJZCwgcmVsYXRpb25OYW1lLCByZWxhdGlvbkVudGl0eSApID0+IGFjdGlvblxuXHRcdFx0LmNyZWF0ZVJlbGF0aW9uKFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGVudGl0eUlkLFxuXHRcdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRcdHJlbGF0aW9uRW50aXR5LFxuXHRcdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J3JlbGF0aW9ucycsXG5cdFx0XHQnY3JlYXRlJyxcblx0XHQpIF0gPSAoIGVudGl0eUlkLCByZWxhdGlvbk5hbWUsIHJlbGF0aW9uRW50aXRpZXMgKSA9PiBhY3Rpb25cblx0XHRcdC5jcmVhdGVSZWxhdGlvbnMoXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0ZW50aXR5SWQsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25FbnRpdGllcyxcblx0XHRcdCk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdyZWxhdGlvbkZvckFkZGl0aW9uJyxcblx0XHRcdCdyZW1vdmVEaXJ0eSdcblx0XHQpIF0gPSAoIGVudGl0eUlkLCByZWxhdGlvbk5hbWUsIHJlbGF0aW9uRW50aXR5SWQgKSA9PiBhY3Rpb25cblx0XHRcdC5yZW1vdmVEaXJ0eVJlbGF0aW9uRm9yQWRkaXRpb24oXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0ZW50aXR5SWQsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25FbnRpdHlJZCxcblx0XHRcdCk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCcnLFxuXHRcdFx0J3JlbW92ZVJlbGF0aW9uRm9yJ1xuXHRcdCkgXSA9ICggZW50aXR5SWQsIHJlbGF0aW9uTmFtZSwgcmVsYXRpb25FbnRpdHlJZCApID0+IGFjdGlvblxuXHRcdFx0LnJlbW92ZVJlbGF0aW9uRm9yRW50aXR5KFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGVudGl0eUlkLFxuXHRcdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRcdHJlbGF0aW9uRW50aXR5SWRcblx0XHRcdCk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCcnLFxuXHRcdFx0J3BlcnNpc3RBZGRSZWxhdGlvbnNGb3InXG5cdFx0KSBdID0gKCkgPT4gYWN0aW9uLnBlcnNpc3RBZGRSZWxhdGlvbnNGb3JNb2RlbCggbW9kZWxOYW1lICk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCcnLFxuXHRcdFx0J3BlcnNpc3REZWxldGVSZWxhdGlvbnNGb3InXG5cdFx0KSBdID0gKCkgPT4gYWN0aW9uLnBlcnNpc3REZWxldGVSZWxhdGlvbnNGb3JNb2RlbCggbW9kZWxOYW1lICk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCcnLFxuXHRcdFx0J3BlcnNpc3RSZWxhdGlvbnNGb3InXG5cdFx0KSBdID0gKCBhZGRSZWxhdGlvbiA9IHRydWUgKSA9PlxuXHRcdFx0YWN0aW9uLnBlcnNpc3RSZWxhdGlvbnNGb3JNb2RlbCggbW9kZWxOYW1lLCBhZGRSZWxhdGlvbiApO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQncmVsYXRpb25zRm9ySWQnLFxuXHRcdFx0J3BlcnNpc3QnXG5cdFx0KSBdID0gKCBlbnRpdHlJZCwgYWRkUmVsYXRpb24gPSB0cnVlICkgPT4gYWN0aW9uXG5cdFx0XHQucGVyc2lzdFJlbGF0aW9uc0ZvckVudGl0eUlkKFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGVudGl0eUlkLFxuXHRcdFx0XHRhZGRSZWxhdGlvblxuXHRcdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J3JlbGF0aW9uc0ZvcklkQW5kUmVsYXRpb24nLFxuXHRcdFx0J3BlcnNpc3QnXG5cdFx0KSBdID0gKCBlbnRpdHlJZCwgcmVsYXRpb25OYW1lLCBhZGRSZWxhdGlvbiA9IHRydWUgKSA9PiBhY3Rpb25cblx0XHRcdC5wZXJzaXN0UmVsYXRpb25zRm9yRW50aXR5SWRBbmRSZWxhdGlvbihcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRlbnRpdHlJZCxcblx0XHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdFx0XHRhZGRSZWxhdGlvblxuXHRcdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J3JlbGF0aW9uc0ZvcklkQW5kUmVsYXRpb25JZCcsXG5cdFx0XHQncGVyc2lzdCdcblx0XHQpIF0gPSAoXG5cdFx0XHRlbnRpdHlJZCxcblx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdHJlbGF0aW9uSWQsXG5cdFx0XHRhZGRSZWxhdGlvbiA9IHRydWVcblx0XHQpID0+IGFjdGlvblxuXHRcdFx0LnBlcnNpc3RSZWxhdGlvbnNGb3JFbnRpdHlJZEFuZFJlbGF0aW9uSWQoXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0ZW50aXR5SWQsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25JZCxcblx0XHRcdFx0YWRkUmVsYXRpb25cblx0XHRcdCk7XG5cdFx0YWN0aW9uc1sgZ2V0TWV0aG9kTmFtZShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCdpZCcsXG5cdFx0XHQncmVjZWl2ZVJlbGF0ZWRFbnRpdGllc0Zvcidcblx0XHQpIF0gPSAoIGVudGl0eUlkLCByZWxhdGlvbk5hbWUsIHJlbGF0aW9uRW50aXR5SWRzICkgPT4gYWN0aW9uXG5cdFx0XHQucmVjZWl2ZVJlbGF0ZWRFbnRpdGllcyhcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRlbnRpdHlJZCxcblx0XHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdFx0XHRyZWxhdGlvbkVudGl0eUlkc1xuXHRcdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2lkJyxcblx0XHRcdCdyZWNlaXZlRGlydHlSZWxhdGlvbkFkZGl0aW9uRm9yJ1xuXHRcdCkgXSA9ICggcmVsYXRpb25OYW1lLCByZWxhdGlvbklkLCBlbnRpdHlJZCApID0+IGFjdGlvblxuXHRcdFx0LnJlY2VpdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24oXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25JZCxcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRlbnRpdHlJZFxuXHRcdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2lkJyxcblx0XHRcdCdyZWNlaXZlRGlydHlSZWxhdGlvbkRlbGV0aW9uRm9yJ1xuXHRcdCkgXSA9ICggcmVsYXRpb25OYW1lLCByZWxhdGlvbklkLCBlbnRpdHlJZCApID0+IGFjdGlvblxuXHRcdFx0LnJlY2VpdmVEaXJ0eVJlbGF0aW9uRGVsZXRpb24oXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25JZCxcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRlbnRpdHlJZFxuXHRcdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J3JlbGF0aW9ucycsXG5cdFx0XHQncmVjZWl2ZVVwZGF0ZWRFbnRpdHlJZEZvcidcblx0XHQpIF0gPSAoIG9sZElkLCBuZXdJZCApID0+IGFjdGlvblxuXHRcdFx0LnJlY2VpdmVVcGRhdGVkRW50aXR5SWRGb3JSZWxhdGlvbnMoXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0b2xkSWQsXG5cdFx0XHRcdG5ld0lkXG5cdFx0XHQpO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnaWQnLFxuXHRcdFx0J3JlbW92ZUFsbFJlbGF0ZWRFbnRpdGllc0Zvcidcblx0XHQpIF0gPSAoIGVudGl0eUlkICkgPT4gYWN0aW9uLnJlbW92ZUFsbFJlbGF0ZWRFbnRpdGllc0Zvck1vZGVsRW50aXR5KFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZW50aXR5SWRcblx0XHQpO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnaWRBbmRSZWxhdGlvbicsXG5cdFx0XHQncmVtb3ZlUmVsYXRlZEVudGl0aWVzRm9yJ1xuXHRcdCkgXSA9ICggZW50aXR5SWQsIHJlbGF0aW9uTmFtZSwgcmVsYXRpb25JZHMgKSA9PiBhY3Rpb25cblx0XHRcdC5yZW1vdmVSZWxhdGVkRW50aXRpZXMoXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0ZW50aXR5SWQsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0cmVsYXRpb25JZHMsXG5cdFx0XHQpO1xuXHRcdGFjdGlvbnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnaWRBbmRSZWxhdGlvbicsXG5cdFx0XHQncmVtb3ZlRGlydHlSZWxhdGlvbkFkZGl0aW9uRm9yJ1xuXHRcdCkgXSA9IChcblx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0XHRlbnRpdHlJZCxcblx0XHQpID0+IGFjdGlvbi5yZW1vdmVEaXJ0eVJlbGF0aW9uQWRkaXRpb24oXG5cdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZW50aXR5SWQsXG5cdFx0KTtcblx0XHRhY3Rpb25zWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2lkQW5kUmVsYXRpb24nLFxuXHRcdFx0J3JlbW92ZURpcnR5UmVsYXRpb25EZWxldGlvbkZvcidcblx0XHQpIF0gPSAoXG5cdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHRcdFx0ZW50aXR5SWQsXG5cdFx0KSA9PiBhY3Rpb24ucmVtb3ZlRGlydHlSZWxhdGlvbkRlbGV0aW9uKFxuXHRcdFx0cmVsYXRpb25OYW1lLFxuXHRcdFx0cmVsYXRpb25FbnRpdHlJZCxcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkLFxuXHRcdCk7XG5cdFx0cmV0dXJuIGFjdGlvbnM7XG5cdH0sXG5cdHt9XG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRcbiAqL1xuaW1wb3J0IHsgTU9ERUxfTkFNRVMgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBnZXRNZXRob2ROYW1lIH0gZnJvbSAnLi4vLi4vYmFzZS1tb2RlbCc7XG5cbi8qKlxuICogRHluYW1pYyBjcmVhdGlvbiBvZiBzZWxlY3RvcnMgZm9yIHJlbGF0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IHNlbGVjdG9yIHNlbGVjdG9yIG9iamVjdCB0aGF0IGR5bmFtaWNhbGx5IGNyZWF0ZWQgZnVuY3Rpb25zXG4gKiB3aWxsIGJlIG1hcHBlZCB0by5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIG5ldyBzZWxlY3RvciBvYmplY3RzIGZvciBlYWNoIG1vZGVsIHJlbGF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlU2VsZWN0b3JzID0gKCBzZWxlY3RvciApID0+IE1PREVMX05BTUVTLnJlZHVjZShcblx0KCBzZWxlY3RvcnMsIG1vZGVsTmFtZSApID0+IHtcblx0XHRzZWxlY3RvcnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnYWRkaXRpb25SZWxhdGlvbnMnLFxuXHRcdFx0J2dldFF1ZXVlZCdcblx0XHQpIF0gPSAoIHN0YXRlICkgPT4gc2VsZWN0b3IuZ2V0UmVsYXRpb25BZGRpdGlvbnNRdWV1ZWRGb3JNb2RlbChcblx0XHRcdHN0YXRlLFxuXHRcdFx0bW9kZWxOYW1lXG5cdFx0KTtcblx0XHRzZWxlY3RvcnNbIGdldE1ldGhvZE5hbWUoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHQnZGVsZXRlUmVsYXRpb25zJyxcblx0XHRcdCdnZXRRdWV1ZWQnXG5cdFx0KSBdID0gKCBzdGF0ZSApID0+IHNlbGVjdG9yLmdldFJlbGF0aW9uRGVsZXRpb25zUXVldWVkRm9yTW9kZWwoXG5cdFx0XHRzdGF0ZSxcblx0XHRcdG1vZGVsTmFtZVxuXHRcdCk7XG5cdFx0c2VsZWN0b3JzWyBnZXRNZXRob2ROYW1lKFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0J2lkJyxcblx0XHRcdCdjb3VudFJlbGF0aW9uTW9kZWxzSW5kZXhlZEZvcidcblx0XHQpIF0gPSAoIHN0YXRlLCBlbnRpdHlJZCApID0+IHNlbGVjdG9yXG5cdFx0XHQuY291bnRSZWxhdGlvbk1vZGVsc0luZGV4ZWRGb3JFbnRpdHkoXG5cdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGVudGl0eUlkXG5cdFx0XHQpO1xuXHRcdHJldHVybiBzZWxlY3RvcnM7XG5cdH0sXG5cdHt9XG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IERFRkFVTFRfQ09SRV9TVEFURSwgc2luZ3VsYXJNb2RlbE5hbWUgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBmcm9tSlMsIFNldCB9IGZyb20gJ2ltbXV0YWJsZSc7XG5pbXBvcnQgeyBub3JtYWxpemVFbnRpdHlJZCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHMuXG4gKi9cbmltcG9ydCB7IEFDVElPTl9UWVBFUyB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9uLXR5cGVzJztcbmNvbnN0IHsgZW50aXRpZXM6IHR5cGVzLCByZXNldHM6IHJlc2V0VHlwZXMgfSA9IEFDVElPTl9UWVBFUztcblxuLyoqXG4gKiBIYW5kbGUgYWRkaW5nIGluY29taW5nIGRhdGEgdG8gc3RhdGUuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5TZXR9IGV4aXN0aW5nRW50aXRpZXNcbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IE5ldyBzdGF0ZS5cbiAqL1xuY29uc3QgYWRkVG9TdGF0ZSA9ICggc3RhdGUsIG1vZGVsTmFtZSwgZW50aXR5SWQsIGV4aXN0aW5nRW50aXRpZXMgKSA9PiB7XG5cdGV4aXN0aW5nRW50aXRpZXMgPSBleGlzdGluZ0VudGl0aWVzLmFkZCggZW50aXR5SWQgKTtcblx0cmV0dXJuIHN0YXRlLnNldCggbW9kZWxOYW1lLCBleGlzdGluZ0VudGl0aWVzICk7XG59O1xuXG4vKipcbiAqIEhhbmRsZSByZW1vdmluZyBpbmNvbWluZyBkYXRhIGZyb20gc3RhdGVcbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBuZXcgc3RhdGUgb3IgZXhpc3Rpbmcgc3RhdGUgaWYgbm8gY2hhbmdlLlxuICovXG5jb25zdCByZW1vdmVGcm9tU3RhdGUgPSAoIHN0YXRlLCBtb2RlbE5hbWUsIGVudGl0eUlkICkgPT4ge1xuXHRsZXQgZW50aXR5SWRzID0gc3RhdGUuZ2V0KCBtb2RlbE5hbWUsIFNldCgpICk7XG5cdGlmICggISBlbnRpdHlJZHMuaW5jbHVkZXMoIGVudGl0eUlkICkgKSB7XG5cdFx0cmV0dXJuIHN0YXRlO1xuXHR9XG5cdGVudGl0eUlkcyA9IGVudGl0eUlkcy5kZWxldGUoIGVudGl0eUlkICk7XG5cdHJldHVybiBlbnRpdHlJZHMuaXNFbXB0eSgpID9cblx0XHRzdGF0ZS5kZWxldGUoIG1vZGVsTmFtZSApIDpcblx0XHRzdGF0ZS5zZXQoIG1vZGVsTmFtZSwgZW50aXR5SWRzICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgaW5jb21pbmcgYWN0aW9uXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gRWl0aGVyIHRoZSBleGlzdGluZyBzdGF0ZSBpZiBubyBjaGFuZ2Ugb3IgbmV3IHN0YXRlLlxuICovXG5jb25zdCBwcm9jZXNzQWN0aW9uID0gKCBzdGF0ZSwgYWN0aW9uICkgPT4ge1xuXHRjb25zdCB7IHR5cGUsIG1vZGVsTmFtZSB9ID0gYWN0aW9uO1xuXHRjb25zdCBlbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCBhY3Rpb24uZW50aXR5SWQgKTtcblx0Y29uc3QgZXhpc3RpbmdFbnRpdGllcyA9IHN0YXRlLmdldCggbW9kZWxOYW1lLCBTZXQoKSApO1xuXG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RFTEVURV9FTlRJVFlfSUQ6XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX1RSQVNIX0VOVElUWV9JRDpcblx0XHRcdHN0YXRlID0gYWRkVG9TdGF0ZSggc3RhdGUsIG1vZGVsTmFtZSwgZW50aXR5SWQsIGV4aXN0aW5nRW50aXRpZXMgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX0RFTEVURV9FTlRJVFlfSUQ6XG5cdFx0Y2FzZSB0eXBlcy5SRU1PVkVfVFJBU0hfRU5USVRZX0lEOlxuXHRcdFx0c3RhdGUgPSByZW1vdmVGcm9tU3RhdGUoIHN0YXRlLCBtb2RlbE5hbWUsIGVudGl0eUlkICk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIFJlZHVjZXIgZm9yIHF1ZXVpbmcgYW4gZW50aXR5IGZvciBkZWxldGlvbiBpbiB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gRXhpc3Rpbmcgb3IgbmV3IHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRW50aXR5KFxuXHRzdGF0ZSA9IGZyb21KUyggREVGQVVMVF9DT1JFX1NUQVRFLmRpcnR5LmRlbGV0ZSApLFxuXHRhY3Rpb25cbikge1xuXHRzd2l0Y2ggKCBhY3Rpb24udHlwZSApIHtcblx0XHRjYXNlIHR5cGVzLlJFQ0VJVkVfREVMRVRFX0VOVElUWV9JRDpcblx0XHRjYXNlIHR5cGVzLlJFTU9WRV9ERUxFVEVfRU5USVRZX0lEOlxuXHRcdFx0cmV0dXJuIHByb2Nlc3NBY3Rpb24oIHN0YXRlLCBhY3Rpb24gKTtcblx0XHRjYXNlIHJlc2V0VHlwZXMuUkVTRVRfQUxMX1NUQVRFOlxuXHRcdFx0cmV0dXJuIGZyb21KUyggREVGQVVMVF9DT1JFX1NUQVRFLmRpcnR5LmRlbGV0ZSApO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9TVEFURV9GT1JfTU9ERUw6XG5cdFx0XHRyZXR1cm4gc3RhdGUuZGVsZXRlKCBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLm1vZGVsTmFtZSApICk7XG5cdH1cblx0cmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFJlZHVjZXIgZm9yIHF1ZXVlaW5nIHRoZSBlbnRpdHkgZm9yIHRyYXNoaW5nIGluIHRoZSBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBFeGlzdGluZyBvciBuZXcgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFzaEVudGl0eShcblx0c3RhdGUgPSBmcm9tSlMoIERFRkFVTFRfQ09SRV9TVEFURS5kaXJ0eS50cmFzaCApLFxuXHRhY3Rpb25cbikge1xuXHRzd2l0Y2ggKCBhY3Rpb24udHlwZSApIHtcblx0XHRjYXNlIHR5cGVzLlJFQ0VJVkVfVFJBU0hfRU5USVRZX0lEOlxuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX1RSQVNIX0VOVElUWV9JRDpcblx0XHRcdHJldHVybiBwcm9jZXNzQWN0aW9uKCBzdGF0ZSwgYWN0aW9uICk7XG5cdFx0Y2FzZSByZXNldFR5cGVzLlJFU0VUX0FMTF9TVEFURTpcblx0XHRcdHJldHVybiBmcm9tSlMoIERFRkFVTFRfQ09SRV9TVEFURS5kaXJ0eS50cmFzaCApO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9TVEFURV9GT1JfTU9ERUw6XG5cdFx0XHRyZXR1cm4gc3RhdGUuZGVsZXRlKCBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLm1vZGVsTmFtZSApICk7XG5cdH1cblx0cmV0dXJuIHN0YXRlO1xufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdERFRkFVTFRfQ09SRV9TVEFURSxcblx0c2luZ3VsYXJNb2RlbE5hbWUsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGZyb21KUywgU2V0LCBNYXAgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHtcblx0cmVtb3ZlRW1wdHlGcm9tU3RhdGUsXG5cdG5vcm1hbGl6ZUVudGl0eUlkLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcbmltcG9ydCBjdWlkIGZyb20gJ2N1aWQnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHMuXG4gKi9cbmltcG9ydCB7IEFDVElPTl9UWVBFUyB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9uLXR5cGVzJztcbmNvbnN0IHsgcmVsYXRpb25zOiB0eXBlcywgcmVzZXRzOiByZXNldFR5cGVzIH0gPSBBQ1RJT05fVFlQRVM7XG5cbi8qKlxuICogVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgcmVsYXRpb24gZXhpc3RzIGluIHRoZSBwcm92aWRlZCBtYXAuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSByZWxhdGlvbk1hcFxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXVlVHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIHRoZSByZWxhdGlvbiBleGlzdHMgZm9yIHRoZSBnaXZlbiBlbnRpdHkgSWRcbiAqIGZhbHNlIG1lYW5zIGl0IGRvZXMgbm90IGV4aXN0LlxuICovXG5jb25zdCByZWxhdGlvbkV4aXN0c0luTWFwID0gKCByZWxhdGlvbk1hcCwgcXVldWVUeXBlLCBlbnRpdHlJZCApID0+IHtcblx0cmV0dXJuIHJlbGF0aW9uTWFwLmdldCggcXVldWVUeXBlLCBTZXQoKSApLmluY2x1ZGVzKCBlbnRpdHlJZCApO1xufTtcblxuLyoqXG4gKiBVc2VkIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHJlbGF0aW9uIGV4aXN0cyBhbHJlYWR5IGluIHRoZSBzdGF0ZSBmb3IgdGhlXG4gKiBnaXZlbiBkYXRhLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gcmVsYXRpb25NYXBcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgbWVhbnMgdGhlIHJlbGF0aW9uIGV4aXN0cyBpbiB0aGUgc3RhdGUuXG4gKi9cbmNvbnN0IGhhc1JlbGF0aW9uID0gKCBzdGF0ZSwgYWN0aW9uLCByZWxhdGlvbk1hcCApID0+IHtcblx0Y29uc3Qge1xuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0ZW50aXR5SWQsXG5cdFx0cXVldWVUeXBlLFxuXHR9ID0gYWN0aW9uO1xuXHRsZXQgeyByZWxhdGlvbk5hbWUsIG1vZGVsTmFtZSB9ID0gYWN0aW9uO1xuXHRpZiAoIHJlbGF0aW9uRXhpc3RzSW5NYXAoIHJlbGF0aW9uTWFwLCBxdWV1ZVR5cGUsIGVudGl0eUlkICkgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBzdGlsbCBoZXJlPyBPa2F5LCBsZXQncyBkbyBhIHJldmVyc2UgbG9va3VwIHRoZW4sIHdoZXJlIHRoZSByZWxhdGlvbiBtYXlcblx0Ly8gYmUgc3RvcmVkIHdpdGggdGhlIHJlbGF0aW9uIGFzIHRoZSBvcmlnaW5hdGluZyBlbnRpdHkuXG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRjb25zdCBlbnRpdHlJZHMgPSBzdGF0ZS5nZXRJbihcblx0XHRbIHF1ZXVlVHlwZSwgcmVsYXRpb25OYW1lLCByZWxhdGlvbkVudGl0eUlkLCBtb2RlbE5hbWUgXSxcblx0KTtcblx0cmV0dXJuIGVudGl0eUlkcyA/IGVudGl0eUlkcy5pbmNsdWRlcyggZW50aXR5SWQgKSA6IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgcmVsYXRpb24gbWFwIGZyb20gdGhlIGluZGV4IGZvciB0aGUgZ2l2ZW4gZGF0YS5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBBIG5ldyBtYXAgaXMgcmV0dXJuZWQgaWYgdGhlcmUgaXNuJ3QgYW4gZXhpc3RpbmcgbWFwIHByZXNlbnQuXG4gKi9cbmNvbnN0IGdldFJlbGF0aW9uTWFwID0gKCBzdGF0ZSwgYWN0aW9uICkgPT4ge1xuXHRjb25zdCB7IHJlbGF0aW9uTmFtZSwgcmVsYXRpb25FbnRpdHlJZDogcmVsYXRpb25JZCwgbW9kZWxOYW1lIH0gPSBhY3Rpb247XG5cdC8vIGdldCB0aGUgbWFwIGZvciB0aGUgcXVldWVUeXBlXG5cdHJldHVybiBzdGF0ZS5nZXRJbihcblx0XHRbICdpbmRleCcsIHJlbGF0aW9uTmFtZSwgcmVsYXRpb25JZCwgbW9kZWxOYW1lIF1cblx0KSB8fCBNYXAoKTtcbn07XG5cbi8qKlxuICogR2l2ZW4gYSBzZXQgb2YgaWRzLCB0aGlzIHJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gaWQgZXhpc3RzIGluIGl0LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHBhcmFtIHtJbW11dGFibGUuU2V0fSBpZFNldFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyBpdCBleGlzdHMgaW4gdGhlIGFycmF5LlxuICovXG5jb25zdCBpZEV4aXN0c0luU2V0ID0gKCBlbnRpdHlJZCwgaWRTZXQgKSA9PiB7XG5cdHJldHVybiAoXG5cdFx0aWRTZXQgaW5zdGFuY2VvZiBTZXQgJiZcblx0XHRpZFNldC5pbmNsdWRlcyggZW50aXR5SWQgKVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZWR1Y2VyIGZvciBhZGRpbmcgdG8gdGhlIHJlbGF0aW9ucyBpbmRleCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHJlbGF0aW9uTWFwXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSAgRWl0aGVyIGV4aXN0aW5nIHN0YXRlIGlmIG5vIGNoYW5nZSBvciBuZXcgc3RhdGUgaWYgY2hhbmdlLlxuICovXG5mdW5jdGlvbiBpbmRleFJlbGF0aW9ucyggc3RhdGUsIGFjdGlvbiwgcmVsYXRpb25NYXAgKSB7XG5cdGNvbnN0IHtcblx0XHR0eXBlLFxuXHRcdHJlbGF0aW9uTmFtZSxcblx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0XHRxdWV1ZVR5cGUsXG5cdH0gPSBhY3Rpb247XG5cdGxldCBlbnRpdHlJZHMgPSByZWxhdGlvbk1hcC5nZXQoIHF1ZXVlVHlwZSApIHx8IFNldCgpO1xuXHRjb25zdCBwYXRoID0gWyByZWxhdGlvbk5hbWUsIHJlbGF0aW9uRW50aXR5SWQsIG1vZGVsTmFtZSwgcXVldWVUeXBlIF07XG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OOlxuXHRcdGNhc2UgdHlwZXMuUkVDRUlWRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTjpcblx0XHRcdGlmICggaWRFeGlzdHNJblNldCggZW50aXR5SWQsIGVudGl0eUlkcyApICkge1xuXHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHR9XG5cdFx0XHRzdGF0ZSA9IHN0YXRlLnNldEluKCBwYXRoLCBlbnRpdHlJZHMuYWRkKCBlbnRpdHlJZCApICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIHR5cGVzLlJFTU9WRV9ESVJUWV9SRUxBVElPTl9BRERJVElPTjpcblx0XHRjYXNlIHR5cGVzLlJFTU9WRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTjpcblx0XHRcdGlmICggISBpZEV4aXN0c0luU2V0KCBlbnRpdHlJZCwgZW50aXR5SWRzICkgKSB7XG5cdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdH1cblx0XHRcdGVudGl0eUlkcyA9IGVudGl0eUlkcy5kZWxldGUoIGVudGl0eUlkICk7XG5cdFx0XHRpZiAoIGVudGl0eUlkcy5pc0VtcHR5KCkgKSB7XG5cdFx0XHRcdHN0YXRlID0gcmVtb3ZlRW1wdHlGcm9tU3RhdGUoIHN0YXRlLCBwYXRoLCAwICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGF0ZSA9IHN0YXRlLnNldEluKCBwYXRoLCBlbnRpdHlJZHMgKTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgcmVsYXRpb24gaWRzIGZyb20gc3RhdGUgZm9yIGdpdmVuIGRhdGEuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7SW1tdXRhYmxlLlNldH0gQSBMaXN0IG9mIGlkcyBpZiBwcmVzZW50IG9yIGVtcHR5IExpc3QgaWYgbm90LlxuICovXG5mdW5jdGlvbiBnZXRSZWxhdGlvbklkc0Zyb21TdGF0ZSggc3RhdGUsIGFjdGlvbiApIHtcblx0Y29uc3Qge1xuXHRcdHJlbGF0aW9uTmFtZSxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdH0gPSBhY3Rpb247XG5cdGNvbnN0IHBhdGggPSBbIG1vZGVsTmFtZSwgZW50aXR5SWQsIHJlbGF0aW9uTmFtZSBdO1xuXHRyZXR1cm4gc3RhdGUuaGFzSW4oIHBhdGggKSA/IHN0YXRlLmdldEluKCBwYXRoICkgOiBTZXQoKTtcbn1cblxuLyoqXG4gKiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBzdGF0ZSByZXF1aXJlcyBhbiB1cGRhdGUgb3Igbm90IGZvciB0aGUgZ2l2ZW5cbiAqIGRhdGEuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSByZWxhdGlvbk1hcFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpbmRpY2F0ZXMgdXBkYXRlIGlzIG5lZWRlZC5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZXNVcGRhdGUoIHN0YXRlLCBhY3Rpb24sIHJlbGF0aW9uTWFwICkge1xuXHRzd2l0Y2ggKCBhY3Rpb24udHlwZSApIHtcblx0XHRjYXNlIHR5cGVzLlJFQ0VJVkVfRElSVFlfUkVMQVRJT05fQURESVRJT046XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OOlxuXHRcdFx0cmV0dXJuICEgaGFzUmVsYXRpb24oIHN0YXRlLCBhY3Rpb24sIHJlbGF0aW9uTWFwICk7XG5cdFx0Y2FzZSB0eXBlcy5SRU1PVkVfRElSVFlfUkVMQVRJT05fQURESVRJT046XG5cdFx0Y2FzZSB0eXBlcy5SRU1PVkVfRElSVFlfUkVMQVRJT05fREVMRVRJT046XG5cdFx0XHRyZXR1cm4gaGFzUmVsYXRpb24oIHN0YXRlLCBhY3Rpb24sIHJlbGF0aW9uTWFwICk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJlZHVjZXIgZm9yIHVwZGF0aW5nIGRpcnR5IHJlbGF0aW9uIHN0YXRlIGZvciBnaXZlbiBkYXRhLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gcmVsYXRpb25NYXBcbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IElmIG5vIGNoYW5nZSBvcmlnaW5hbCBzdGF0ZSBpcyByZXR1cm5lZCBvdGhlcndpc2UgbmV3IHN0YXRlLlxuICovXG5mdW5jdGlvbiB1cGRhdGVSZWxhdGlvblN0YXRlKCBzdGF0ZSwgYWN0aW9uLCByZWxhdGlvbk1hcCApIHtcblx0Y29uc3Qge1xuXHRcdHR5cGUsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHJlbGF0aW9uRW50aXR5SWQsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHRcdHF1ZXVlVHlwZSxcblx0fSA9IGFjdGlvbjtcblx0Y29uc3QgaWRzID0gcmVsYXRpb25NYXAuZ2V0KCBxdWV1ZVR5cGUgKSB8fCBTZXQoKTtcblx0Y29uc3QgcGF0aCA9IFsgbW9kZWxOYW1lLCBlbnRpdHlJZCwgcmVsYXRpb25OYW1lIF07XG5cdGxldCByZWxhdGlvbklkcztcblx0c3dpdGNoICggdHlwZSApIHtcblx0XHRjYXNlIHR5cGVzLlJFQ0VJVkVfRElSVFlfUkVMQVRJT05fQURESVRJT046XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OOlxuXHRcdFx0aWYgKCBpZEV4aXN0c0luU2V0KCBlbnRpdHlJZCwgaWRzICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0cmVsYXRpb25JZHMgPSBnZXRSZWxhdGlvbklkc0Zyb21TdGF0ZSggc3RhdGUsIGFjdGlvbiApO1xuXHRcdFx0aWYgKCByZWxhdGlvbklkcy5pbmNsdWRlcyggcmVsYXRpb25FbnRpdHlJZCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHN0YXRlID0gc3RhdGUuc2V0SW4oIHBhdGgsIHJlbGF0aW9uSWRzLmFkZCggcmVsYXRpb25FbnRpdHlJZCApICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIHR5cGVzLlJFTU9WRV9ESVJUWV9SRUxBVElPTl9BRERJVElPTjpcblx0XHRjYXNlIHR5cGVzLlJFTU9WRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTjpcblx0XHRcdGlmICggISBpZEV4aXN0c0luU2V0KCBlbnRpdHlJZCwgaWRzICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0cmVsYXRpb25JZHMgPSBnZXRSZWxhdGlvbklkc0Zyb21TdGF0ZSggc3RhdGUsIGFjdGlvbiApO1xuXHRcdFx0aWYgKCAhIHJlbGF0aW9uSWRzLmluY2x1ZGVzKCByZWxhdGlvbkVudGl0eUlkICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0cmVsYXRpb25JZHMgPSByZWxhdGlvbklkcy5kZWxldGUoIHJlbGF0aW9uRW50aXR5SWQgKTtcblx0XHRcdGlmICggcmVsYXRpb25JZHMuaXNFbXB0eSgpICkge1xuXHRcdFx0XHRzdGF0ZSA9IHJlbW92ZUVtcHR5RnJvbVN0YXRlKCBzdGF0ZSwgcGF0aCwgMCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RhdGUgPSBzdGF0ZS5zZXRJbiggcGF0aCwgcmVsYXRpb25JZHMgKTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZCBhc3Npc3Rpbmcgd2l0aCByZXBsYWNpbmcgYW4gb2xkIHJlbGF0aW9uIGlkIGZvciBhIG5ldyByZWxhdGlvblxuICogaWQuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gRWl0aGVyIG9yaWdpbmFsIG9yIG5ldyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZU9sZFJlbGF0aW9uSWRXaXRoTmV3UmVsYXRpb25JZCggc3RhdGUsIGFjdGlvbiApIHtcblx0bGV0IHsgb2xkRW50aXR5SWQsIG5ld0VudGl0eUlkIH0gPSBhY3Rpb247XG5cdGNvbnN0IHsgbW9kZWxOYW1lIH0gPSBhY3Rpb247XG5cdG9sZEVudGl0eUlkID0gbm9ybWFsaXplRW50aXR5SWQoIG9sZEVudGl0eUlkICk7XG5cdG5ld0VudGl0eUlkID0gbm9ybWFsaXplRW50aXR5SWQoIG5ld0VudGl0eUlkICk7XG5cdC8vIHJlcGxhY2VtZW50cyBpbiBpbmRleFxuXHRsZXQgbmV3U3RhdGUgPSByZXBsYWNlSWRzKFxuXHRcdCdpbmRleCcsXG5cdFx0c3RhdGUsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdG9sZEVudGl0eUlkLFxuXHRcdG5ld0VudGl0eUlkXG5cdCk7XG5cdGlmICggbmV3U3RhdGUgPT09IHN0YXRlICkge1xuXHRcdG5ld1N0YXRlID0gcmVwbGFjZUlkcyhcblx0XHRcdCdkZWxldGUnLFxuXHRcdFx0bmV3U3RhdGUsXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRvbGRFbnRpdHlJZCxcblx0XHRcdG5ld0VudGl0eUlkLFxuXHRcdCk7XG5cdH1cblx0aWYgKCBuZXdTdGF0ZSA9PT0gc3RhdGUgKSB7XG5cdFx0bmV3U3RhdGUgPSByZXBsYWNlSWRzKFxuXHRcdFx0J2FkZCcsXG5cdFx0XHRuZXdTdGF0ZSxcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdG9sZEVudGl0eUlkLFxuXHRcdFx0bmV3RW50aXR5SWQsXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogSGFuZGxlcyBnb2luZyB0aHJvdWdoIHRoZSBwcm92aWRlZCBzdGF0ZSBvYmplY3QgYW5kIHVwZGF0aW5nIGFueSBvY2N1cnJlbmNlc1xuICogb2YgdGhlIHByb3ZpZGVkIG9sZElkIGZvciB0aGUgcHJvdmlkZWQgbW9kZWwgbmFtZSB3aXRoIHRoZSBuZXcgaWQuICBUaGlzXG4gKiBtdXRhdGVzIHRoZSBpbmNvbWluZyBzdGF0ZSBzbyBkbyBub3QgcHJvdmlkZSB0aGUgb3JpZ2luYWwgc3RhdGUgZnJvbSB0aGVcbiAqIHN0b3JlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVByb3BlcnR5ICh3aGF0IHByb3BlcnR5IGZvciB0aGUgc3RhdGUgc2hvdWxkIGJlXG4gKiAgIHJldmlld2VkKVxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IG9sZElkXG4gKiBAcGFyYW0ge251bWJlcn0gbmV3SWRcbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IFJldHVybnMgZWl0aGVyIG5ldyBzdGF0ZSBvciBleGlzdGluZyBzdGF0ZS5cbiAqL1xuY29uc3QgcmVwbGFjZUlkcyA9ICggc3RhdGVQcm9wZXJ0eSwgc3RhdGUsIG1vZGVsTmFtZSwgb2xkSWQsIG5ld0lkICkgPT4ge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdGNvbnN0IG1haW5QYXRoID0gWyBzdGF0ZVByb3BlcnR5LCBtb2RlbE5hbWUsIG9sZElkIF07XG5cblx0Ly8gZmlyc3QgZG8gdG9wLWxldmVsIGNoZWNrcyBpZiBpdCBkb2Vzbid0IGV4aXN0LCBiYWlsLlxuXHRpZiAoICEgc3RhdGUuaGFzSW4oIG1haW5QYXRoICkgKSB7XG5cdFx0cmV0dXJuIHN0YXRlO1xuXHR9XG5cblx0Y29uc3QgbWFpblJlY29yZCA9IHN0YXRlLmdldEluKCBtYWluUGF0aCApO1xuXG5cdHN0YXRlID0gc3RhdGVcblx0XHQuZGVsZXRlSW4oIG1haW5QYXRoIClcblx0XHQuc2V0SW4oIFsgc3RhdGVQcm9wZXJ0eSwgbW9kZWxOYW1lLCBuZXdJZCBdLCBtYWluUmVjb3JkICk7XG5cblx0Ly8gbWFpblJlY29yZCBwcm92aWRlcyB0aGUgaW5kZXggdG8gdGhlIG90aGVyIHJlY29yZHMgbmVlZGluZyB1cGRhdGVkLlxuXHRtYWluUmVjb3JkLmZvckVhY2goICggbWFwT3JJZHMsIHJlbGF0aW9uTW9kZWxOYW1lICkgPT4ge1xuXHRcdGNvbnN0IHVwZGF0ZUlkcyA9ICggcXVldWVUeXBlLCByZWxhdGlvbklkICkgPT4ge1xuXHRcdFx0Y29uc3QgcmVsYXRpb25QYXRoID0gW1xuXHRcdFx0XHRxdWV1ZVR5cGUsXG5cdFx0XHRcdHJlbGF0aW9uTW9kZWxOYW1lLFxuXHRcdFx0XHRyZWxhdGlvbklkLFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRdO1xuXHRcdFx0bGV0IGlkcyA9IHN0YXRlLmdldEluKCByZWxhdGlvblBhdGggKSB8fCBTZXQoKTtcblx0XHRcdGlkcyA9IGlkcy5kZWxldGUoIG9sZElkICkuYWRkKCBuZXdJZCApO1xuXHRcdFx0cmV0dXJuIHN0YXRlLnNldEluKCByZWxhdGlvblBhdGgsIGlkcyApO1xuXHRcdH07XG5cdFx0aWYgKCBtYXBPcklkcyBpbnN0YW5jZW9mIE1hcCApIHtcblx0XHRcdGlmICggbWFwT3JJZHMuaGFzKCAnYWRkJyApICkge1xuXHRcdFx0XHRtYXBPcklkcy5nZXQoICdhZGQnICkuZm9yRWFjaCggKCByZWxhdGlvbklkICkgPT4ge1xuXHRcdFx0XHRcdHN0YXRlID0gdXBkYXRlSWRzKCAnYWRkJywgcmVsYXRpb25JZCApO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG1hcE9ySWRzLmhhcyggJ2RlbGV0ZScgKSApIHtcblx0XHRcdFx0bWFwT3JJZHMuZ2V0KCAnZGVsZXRlJyApLmZvckVhY2goICggcmVsYXRpb25JZCApID0+IHtcblx0XHRcdFx0XHRzdGF0ZSA9IHVwZGF0ZUlkcyggJ2RlbGV0ZScsIHJlbGF0aW9uSWQgKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIG1hcE9ySWRzIGluc3RhbmNlb2YgU2V0ICkge1xuXHRcdFx0Y29uc3QgcmVsYXRpb25QYXRoID0gWyAnaW5kZXgnLCByZWxhdGlvbk1vZGVsTmFtZSBdO1xuXHRcdFx0bWFwT3JJZHMuZm9yRWFjaCggKCByZWxhdGlvbklkICkgPT4ge1xuXHRcdFx0XHRsZXQgaW5kZXhSZWNvcmQgPSBzdGF0ZS5nZXRJbihcblx0XHRcdFx0XHRbIC4uLnJlbGF0aW9uUGF0aCwgcmVsYXRpb25JZCwgbW9kZWxOYW1lIF1cblx0XHRcdFx0KTtcblx0XHRcdFx0bGV0IGlkcyA9IGluZGV4UmVjb3JkLmdldCggc3RhdGVQcm9wZXJ0eSApIHx8IFNldCgpO1xuXHRcdFx0XHRpZHMgPSBpZHMuZGVsZXRlKCBvbGRJZCApLmFkZCggbmV3SWQgKTtcblx0XHRcdFx0aW5kZXhSZWNvcmQgPSBpbmRleFJlY29yZC5zZXQoIHN0YXRlUHJvcGVydHksIGlkcyApO1xuXHRcdFx0XHRzdGF0ZSA9IHN0YXRlLnNldEluKFxuXHRcdFx0XHRcdFsgLi4ucmVsYXRpb25QYXRoLCByZWxhdGlvbklkLCBtb2RlbE5hbWUgXSxcblx0XHRcdFx0XHRpbmRleFJlY29yZFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblx0fSApO1xuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIFRoaXMgZW5zdXJlcyB0aGF0IGZvciBpbmNvbWluZyByZWxhdGlvbiBzdGF0ZSwgcmVsYXRpb25zIGFyZSByZWNvcmRlZCBpbiBvbmVcbiAqIGRpcmVjdGlvbi4gIEZvciBleGFtcGxlIGFkZGluZyBhIHJlbGF0aW9uIGZvciBgZXZlbnRgIHRvIGBkYXRldGltZWAgYW5kIHRoZW5cbiAqIHNvbWV0aW1lIGxhdGVyIGBkYXRldGltZWAgdG8gYGV2ZW50YCBmb3IgdGhlIHNhbWUgZW50aXRpZXMgc2hvdWxkIHJlc3VsdCBpblxuICoganVzdCBhIHNpbmdsZSByZWNvcmQsIG5vdCB0d28uXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgYWN0aW9uIG9iamVjdCB0byB3b3JrIHdpdGggYWZ0ZXIgbm9ybWFsaXphdGlvbi5cbiAqL1xuY29uc3Qgbm9ybWFsaXplQWN0aW9uRm9yU3RhdGUgPSAoIHN0YXRlLCBhY3Rpb24gKSA9PiB7XG5cdC8vIG5vcm1hbGl6ZUlkc1xuXHRhY3Rpb24uZW50aXR5SWQgPSBub3JtYWxpemVFbnRpdHlJZCggYWN0aW9uLmVudGl0eUlkICk7XG5cdGFjdGlvbi5yZWxhdGlvbkVudGl0eUlkID0gbm9ybWFsaXplRW50aXR5SWQoIGFjdGlvbi5yZWxhdGlvbkVudGl0eUlkICk7XG5cdC8vIHdlIG9ubHkgdXNlIGluZGV4IHRvIGhlbHAgd2l0aCBub3JtYWxpemF0aW9uXG5cdGNvbnN0IGluZGV4ID0gc3RhdGUuZ2V0KCAnaW5kZXgnICk7XG5cdGNvbnN0IG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ubW9kZWxOYW1lICk7XG5cdGNvbnN0IHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ucmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IHsgcmVsYXRpb25FbnRpdHlJZCwgZW50aXR5SWQgfSA9IGFjdGlvbjtcblx0aWYgKCBtb2RlbE5hbWUgJiZcblx0XHRyZWxhdGlvbk5hbWUgJiZcblx0XHRpbmRleC5oYXMoIG1vZGVsTmFtZSApXG5cdCkge1xuXHRcdC8vIG9rYXkgdGhpcyBtb2RlbCBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgYXMgYSByZWxhdGlvbiBvbiBhbm90aGVyIG1vZGVsXG5cdFx0Ly8gc28gbGV0J3Mgbm9ybWFsaXplIGFuZCBtYWtlIGl0IHRoZSByZWxhdGlvbiBpbnN0ZWFkLlxuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5hY3Rpb24sXG5cdFx0XHRtb2RlbE5hbWU6IHJlbGF0aW9uTmFtZSxcblx0XHRcdGVudGl0eUlkOiByZWxhdGlvbkVudGl0eUlkLFxuXHRcdFx0cmVsYXRpb25OYW1lOiBtb2RlbE5hbWUsXG5cdFx0XHRyZWxhdGlvbkVudGl0eUlkOiBlbnRpdHlJZCxcblx0XHR9O1xuXHR9XG5cdC8vIHdlIGNhbiByZXR1cm4gYXMgaXMgYnV0IGxldHMgbm9ybWFsaXplIHRoZSBpbmNvbWluZyBuYW1lc1xuXHRyZXR1cm4ge1xuXHRcdC4uLmFjdGlvbixcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHR9O1xufTtcblxuLyoqXG4gKiBSZWR1Y2VyIGZvciBkaXJ0eSByZWxhdGlvbiBzdGF0ZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IFJldHVybnMgb3JpZ2luYWwgc3RhdGUgaWYgbm8gY2hhbmdlcywgb3RoZXJ3aXNlIG5ldyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gZGlydHlSZWxhdGlvbnMoIHN0YXRlLCBhY3Rpb24gKSB7XG5cdGFjdGlvbiA9IG5vcm1hbGl6ZUFjdGlvbkZvclN0YXRlKCBzdGF0ZSwgYWN0aW9uICk7XG5cdGNvbnN0IHsgdHlwZSB9ID0gYWN0aW9uO1xuXHRjb25zdCByZWxhdGlvbk1hcCA9IGdldFJlbGF0aW9uTWFwKCBzdGF0ZSwgYWN0aW9uICk7XG5cdC8vIGRvZXMgdGhpcyBldmVuIG5lZWQgYW4gdXBkYXRlP1xuXHRpZiAoICEgcmVxdWlyZXNVcGRhdGUoIHN0YXRlLCBhY3Rpb24sIHJlbGF0aW9uTWFwICkgKSB7XG5cdFx0cmV0dXJuIHN0YXRlO1xuXHR9XG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OOlxuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OOlxuXHRcdFx0c3RhdGUgPSBzdGF0ZS5zZXQoXG5cdFx0XHRcdCdpbmRleCcsXG5cdFx0XHRcdGluZGV4UmVsYXRpb25zKFxuXHRcdFx0XHRcdE1hcCggc3RhdGUuZ2V0KCAnaW5kZXgnICkgKSxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0cmVsYXRpb25NYXBcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBzdGF0ZS5zZXQoXG5cdFx0XHRcdCdhZGQnLFxuXHRcdFx0XHR1cGRhdGVSZWxhdGlvblN0YXRlKFxuXHRcdFx0XHRcdE1hcCggc3RhdGUuZ2V0KCAnYWRkJyApICksXG5cdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdHJlbGF0aW9uTWFwXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OOlxuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX0RJUlRZX1JFTEFUSU9OX0RFTEVUSU9OOlxuXHRcdFx0Ly8gaWYgdGhlIHJlbGF0aW9uIG9yIGVudGl0eSBpZCBpcyBhIGN1aWQsIHRoZW4gd2Ugc2tpcCB0aGlzIGJlY2F1c2Vcblx0XHRcdC8vIHRoZSByZWxhdGlvbiBoYXMgbmV2ZXIgYmVlbiBwZXJzaXN0ZWQgYW55d2F5cy5cblx0XHRcdGlmIChcblx0XHRcdFx0Y3VpZC5pc0N1aWQoIGFjdGlvbi5yZWxhdGlvbkVudGl0eUlkICkgfHxcblx0XHRcdFx0Y3VpZC5pc0N1aWQoIGFjdGlvbi5lbnRpdHlJZCApXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0fVxuXHRcdFx0c3RhdGUgPSBzdGF0ZS5zZXQoXG5cdFx0XHRcdCdpbmRleCcsXG5cdFx0XHRcdGluZGV4UmVsYXRpb25zKFxuXHRcdFx0XHRcdE1hcCggc3RhdGUuZ2V0KCAnaW5kZXgnICkgKSxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0cmVsYXRpb25NYXBcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBzdGF0ZS5zZXQoXG5cdFx0XHRcdCdkZWxldGUnLFxuXHRcdFx0XHR1cGRhdGVSZWxhdGlvblN0YXRlKFxuXHRcdFx0XHRcdE1hcCggc3RhdGUuZ2V0KCAnZGVsZXRlJyApICksXG5cdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdHJlbGF0aW9uTWFwXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdH1cblx0cmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJlbW92aW5nIGVudGl0eSBpZCBpbiB0aGUgc3RhdGUgZm9yIGEgZ2l2ZW4gbW9kZWxOYW1lXG4gKiB3aGljaCBtYXkgZXhpc3QgYXMgYSByZWxhdGlvbiBpbiB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZSBJbW11dGFibGUgY29sbGVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IG1vZGVsRGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIGZvciB1c2UgaW4gdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gSW1tdXRhYmxlIGNvbGxlY3Rpb24gIGVpdGhlciB0aGUgb3JpZ2luYWwgc3RhdGUgb3IgYSBuZXcgc3RhdGUuXG4gKi9cbmNvbnN0IGNsZWFyUmVsYXRlZEVudGl0aWVzRm9yRW50aXR5ID0gKFxuXHRzdGF0ZSxcblx0bW9kZWxEYXRhXG4pID0+IHtcblx0Y29uc3Qge1xuXHRcdG1vZGVsUmVtb3ZlZCxcblx0XHRlbnRpdHlJZFJlbW92ZWQsXG5cdFx0aW5kZXhUeXBlLFxuXHRcdHJlbGF0aW9uVHlwZXMsXG5cdH0gPSBtb2RlbERhdGE7XG5cblx0Y29uc3QgcmVjb3JkUGF0aCA9IFtcblx0XHRpbmRleFR5cGUsXG5cdFx0bW9kZWxSZW1vdmVkLFxuXHRcdGVudGl0eUlkUmVtb3ZlZCxcblx0XTtcblxuXHRjb25zdCBjbGVhckVudGl0eUlkc0luUGF0aCA9ICggc3ViU3RhdGUsIHBhdGggKSA9PiB7XG5cdFx0aWYgKCBzdWJTdGF0ZS5oYXNJbiggcGF0aCApICkge1xuXHRcdFx0bGV0IGVudGl0eUlkcyA9IHN1YlN0YXRlLmdldEluKCBwYXRoICkgfHwgU2V0KCk7XG5cdFx0XHRlbnRpdHlJZHMgPSBlbnRpdHlJZHMuZGVsZXRlKCBlbnRpdHlJZFJlbW92ZWQgKTtcblx0XHRcdGlmICggISBlbnRpdHlJZHMuaXNFbXB0eSgpICkge1xuXHRcdFx0XHRzdWJTdGF0ZS5zZXRJbiggcGF0aCwgZW50aXR5SWRzICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZW1vdmVFbXB0eUZyb21TdGF0ZShcblx0XHRcdFx0XHRzdWJTdGF0ZSxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0aWYgKCBzdGF0ZS5oYXNJbiggcmVjb3JkUGF0aCApICkge1xuXHRcdHN0YXRlID0gc3RhdGUud2l0aE11dGF0aW9ucyggKCBzdWJTdGF0ZSApID0+IHtcblx0XHRcdGNvbnN0IG1haW5SZWNvcmQgPSBzdWJTdGF0ZS5nZXRJbiggcmVjb3JkUGF0aCApO1xuXHRcdFx0cmVtb3ZlRW1wdHlGcm9tU3RhdGUoXG5cdFx0XHRcdHN1YlN0YXRlLFxuXHRcdFx0XHRyZWNvcmRQYXRoLFxuXHRcdFx0XHQxLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KTtcblx0XHRcdG1haW5SZWNvcmQuZm9yRWFjaCggKCByZWxhdGlvblJlY29yZCwgcmVsYXRpb25Nb2RlbE5hbWUgKSA9PiB7XG5cdFx0XHRcdGlmICggcmVsYXRpb25SZWNvcmQgaW5zdGFuY2VvZiBTZXQgKSB7XG5cdFx0XHRcdFx0cmVsYXRpb25SZWNvcmQuZm9yRWFjaCggKCByZWxhdGlvbklkICkgPT4ge1xuXHRcdFx0XHRcdFx0Y2xlYXJFbnRpdHlJZHNJblBhdGgoXG5cdFx0XHRcdFx0XHRcdHN1YlN0YXRlLFxuXHRcdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdFx0J2luZGV4Jyxcblx0XHRcdFx0XHRcdFx0XHRyZWxhdGlvbk1vZGVsTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRyZWxhdGlvbklkLFxuXHRcdFx0XHRcdFx0XHRcdG1vZGVsUmVtb3ZlZCxcblx0XHRcdFx0XHRcdFx0XHRpbmRleFR5cGUsXG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdHJlbGF0aW9uVHlwZXMgIT09IG51bGwgJiZcblx0XHRcdFx0XHRyZWxhdGlvblJlY29yZCBpbnN0YW5jZW9mIE1hcFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZWxhdGlvblR5cGVzLmZvckVhY2goICggcmVsYXRpb25UeXBlICkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCByZWxhdGlvblJlY29yZC5oYXMoIHJlbGF0aW9uVHlwZSApICkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCByZWxhdGlvbklkcyA9IHJlbGF0aW9uUmVjb3JkLmdldChcblx0XHRcdFx0XHRcdFx0XHRyZWxhdGlvblR5cGVcblx0XHRcdFx0XHRcdFx0KSB8fCBTZXQoKTtcblx0XHRcdFx0XHRcdFx0cmVsYXRpb25JZHMuZm9yRWFjaCggKCByZWxhdGlvbklkICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNsZWFyRW50aXR5SWRzSW5QYXRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViU3RhdGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlbGF0aW9uVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVsYXRpb25Nb2RlbE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlbGF0aW9uSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1vZGVsUmVtb3ZlZCxcblx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogSGFuZGxlcyByZW1vdmluZyBhbGwgcmVsYXRpb25zaGlwcyBpbiB0aGUgZGlydHkgcmVsYXRpb25zIHN0YXRlIGZvciB0aGUgZ2l2ZW5cbiAqIGFjdGlvbiBvYmplY3QgKGNvbnRhaW5pbmcgbW9kZWxOYW1lIGFuZCBlbnRpdHlJZClcbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBFaXRoZXIgdGhlIG9yaWdpbmFsIHN0YXRlIG9yIG5ldyBzdGF0ZSBpZiBpdCB3YXMgdXBkYXRlZC5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlUmVsYXRlZEVudGl0aWVzRm9yRW50aXR5KCBzdGF0ZSwgYWN0aW9uICkge1xuXHRjb25zdCBtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLm1vZGVsTmFtZSApO1xuXHRjb25zdCBlbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCBhY3Rpb24uZW50aXR5SWQgKTtcblx0W1xuXHRcdFsgbW9kZWxOYW1lLCBlbnRpdHlJZCwgJ2luZGV4JywgWyAnYWRkJywgJ2RlbGV0ZScgXSBdLFxuXHRcdFsgbW9kZWxOYW1lLCBlbnRpdHlJZCwgJ2FkZCcgXSxcblx0XHRbIG1vZGVsTmFtZSwgZW50aXR5SWQsICdkZWxldGUnIF0sXG5cdF0uZm9yRWFjaCggKCBbXG5cdFx0bW9kZWxSZW1vdmVkLFxuXHRcdGVudGl0eUlkUmVtb3ZlZCxcblx0XHRpbmRleFR5cGUsXG5cdFx0cmVsYXRpb25UeXBlcyA9IG51bGwsXG5cdF0gKSA9PiB7XG5cdFx0c3RhdGUgPSBjbGVhclJlbGF0ZWRFbnRpdGllc0ZvckVudGl0eShcblx0XHRcdHN0YXRlLFxuXHRcdFx0eyBtb2RlbFJlbW92ZWQsIGVudGl0eUlkUmVtb3ZlZCwgaW5kZXhUeXBlLCByZWxhdGlvblR5cGVzIH1cblx0XHQpO1xuXHR9ICk7XG5cdHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsZWFyaW5nIHRoZSBnaXZlbiBtb2RlbCBmcm9tIHRoZSBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKlxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gTmV3IHN0YXRlLlxuICovXG5jb25zdCBjbGVhclN0YXRlRm9yTW9kZWwgPSAoIHN0YXRlLCBhY3Rpb24gKSA9PiB7XG5cdGNvbnN0IG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ubW9kZWxOYW1lICk7XG5cdC8vIGluZGV4IHJlY29yZCBwYXRoXG5cdHN0YXRlID0gY2xlYXJNb2RlbEZyb21TdWJzdGF0ZShcblx0XHRzdGF0ZSxcblx0XHQnaW5kZXgnLFxuXHRcdG1vZGVsTmFtZSxcblx0KTtcblxuXHQvLyBkZWxldGUgcmVjb3JkIHBhdGhcblx0c3RhdGUgPSBjbGVhck1vZGVsRnJvbVN1YnN0YXRlKFxuXHRcdHN0YXRlLFxuXHRcdCdkZWxldGUnLFxuXHRcdG1vZGVsTmFtZSxcblx0KTtcblxuXHQvLyBhZGQgcmVjb3JkIHBhdGhcblx0c3RhdGUgPSBjbGVhck1vZGVsRnJvbVN1YnN0YXRlKFxuXHRcdHN0YXRlLFxuXHRcdCdhZGQnLFxuXHRcdG1vZGVsTmFtZSxcblx0KTtcblx0cmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBGb3IgdGhlIGdpdmVuIGFyZ3VtZW50cyBjbGVhcnMgdGhlIG1vZGVsIGZyb20gdGhlIHN1YnN0YXRlIG9uIHRoZSBnaXZlbiBzdGF0ZVxuICogZm9yIHRoZSBnaXZlbiBzdWJzdGF0ZSBrZXkuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN1YlN0YXRlS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBUaGUgbmV3IHN0YXRlLlxuICovXG5jb25zdCBjbGVhck1vZGVsRnJvbVN1YnN0YXRlID0gKFxuXHRzdGF0ZSxcblx0c3ViU3RhdGVLZXksXG5cdG1vZGVsTmFtZSxcbikgPT4ge1xuXHRzdGF0ZSA9IHN0YXRlLmRlbGV0ZUluKCBbIHN1YlN0YXRlS2V5LCBtb2RlbE5hbWUgXSApO1xuXHRsZXQgc3ViU3RhdGUgPSBzdGF0ZS5nZXQoIHN1YlN0YXRlS2V5ICk7XG5cdHN1YlN0YXRlID0gc3ViU3RhdGUud2l0aE11dGF0aW9ucyggKCBtdXRhdGVkU3RhdGUgKSA9PiB7XG5cdFx0c3RhdGUuZ2V0KCBzdWJTdGF0ZUtleSApLmZvckVhY2goICggZW50aXR5TWFwcywgcmVsYXRpb25OYW1lICkgPT4ge1xuXHRcdFx0ZW50aXR5TWFwcy5mb3JFYWNoKCAoIG1vZGVsTWFwLCByZWxhdGlvbkVudGl0eUlkICkgPT4ge1xuXHRcdFx0XHRjb25zdCBkZWxldGVQYXRoID0gW1xuXHRcdFx0XHRcdHJlbGF0aW9uTmFtZSxcblx0XHRcdFx0XHRyZWxhdGlvbkVudGl0eUlkLFxuXHRcdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0XTtcblx0XHRcdFx0bXV0YXRlZFN0YXRlLmRlbGV0ZUluKCBkZWxldGVQYXRoICk7XG5cdFx0XHRcdHJlbW92ZUVtcHR5RnJvbVN0YXRlKFxuXHRcdFx0XHRcdG11dGF0ZWRTdGF0ZSxcblx0XHRcdFx0XHRkZWxldGVQYXRoLFxuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9ICk7XG5cdHN0YXRlID0gc3RhdGUuc2V0KCBzdWJTdGF0ZUtleSwgc3ViU3RhdGUgKTtcblx0cmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBleHBvcnRzIHVzZWZ1bCBmb3IgdGVzdGluZy5cbiAqL1xuZXhwb3J0IHtcblx0cmVwbGFjZU9sZFJlbGF0aW9uSWRXaXRoTmV3UmVsYXRpb25JZCxcblx0cmVtb3ZlUmVsYXRlZEVudGl0aWVzRm9yRW50aXR5LFxuXHRkaXJ0eVJlbGF0aW9ucyxcbn07XG5cbi8qKlxuICogRGVmYXVsdCByZWR1Y2VyIGZvciBoYW5kbGluZyBkaXJ0eSByZWxhdGlvbiBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBSZXR1cm5zIG9yaWdpbmFsIHN0YXRlIGlmIG5vIGNoYW5nZXMsIG90aGVyd2lzZSBuZXcgc3RhdGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IChcblx0c3RhdGUgPSBmcm9tSlMoIERFRkFVTFRfQ09SRV9TVEFURS5kaXJ0eS5yZWxhdGlvbnMgKSxcblx0YWN0aW9uXG4pID0+IHtcblx0c3dpdGNoICggYWN0aW9uLnR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX1VQREFURURfRU5USVRZX0lEX0ZPUl9SRUxBVElPTlM6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZU9sZFJlbGF0aW9uSWRXaXRoTmV3UmVsYXRpb25JZCggc3RhdGUsIGFjdGlvbiApO1xuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX1JFTEFURURfRU5USVRJRVNfRk9SX0VOVElUWTpcblx0XHRcdHJldHVybiByZW1vdmVSZWxhdGVkRW50aXRpZXNGb3JFbnRpdHkoIHN0YXRlLCBhY3Rpb24gKTtcblx0XHRjYXNlIHJlc2V0VHlwZXMuUkVTRVRfQUxMX1NUQVRFOlxuXHRcdFx0cmV0dXJuIGZyb21KUyggREVGQVVMVF9DT1JFX1NUQVRFLmRpcnR5LnJlbGF0aW9ucyApO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9TVEFURV9GT1JfTU9ERUw6XG5cdFx0XHRyZXR1cm4gY2xlYXJTdGF0ZUZvck1vZGVsKCBzdGF0ZSwgYWN0aW9uICk7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OOlxuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX0RJUlRZX1JFTEFUSU9OX0FERElUSU9OOlxuXHRcdGNhc2UgdHlwZXMuUkVDRUlWRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTjpcblx0XHRjYXNlIHR5cGVzLlJFTU9WRV9ESVJUWV9SRUxBVElPTl9ERUxFVElPTjpcblx0XHRcdHJldHVybiBkaXJ0eVJlbGF0aW9ucyggc3RhdGUsIGFjdGlvbiApO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgY29tYmluZVJlZHVjZXJzIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRlbGV0ZUVudGl0eSwgdHJhc2hFbnRpdHkgfSBmcm9tICcuL2RpcnR5LWVudGl0aWVzJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgcmVsYXRpb25zIH0gZnJvbSAnLi9kaXJ0eS1yZWxhdGlvbnMnO1xuXG4vKipcbiAqIFRoZSByb290IHN0YXRlICgnZGVsZXRlJywgJ3RyYXNoJywgcmVsYXRpb25zJykgaXMgYSBwbGFpbiBvYmplY3QsIGJ1dCB0aGVcbiAqIHNsaWNlcyBhcmUgaW1tdXRhYmxlIE1hcHMpLlxuICovXG5leHBvcnQgZGVmYXVsdCBjb21iaW5lUmVkdWNlcnMoIHtcblx0ZGVsZXRlOiBkZWxldGVFbnRpdHksXG5cdHRyYXNoOiB0cmFzaEVudGl0eSxcblx0cmVsYXRpb25zLFxufSApO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGZyb21KUywgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IGlzRW1wdHksIGRpZmZlcmVuY2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgREVGQVVMVF9DT1JFX1NUQVRFLCBzaW5ndWxhck1vZGVsTmFtZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHksIGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBub3JtYWxpemVFbnRpdHlJZCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgQUNUSU9OX1RZUEVTIH0gZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb24tdHlwZXMnO1xuY29uc3QgeyBlbnRpdGllczogdHlwZXMsIHJlc2V0czogcmVzZXRUeXBlcyB9ID0gQUNUSU9OX1RZUEVTO1xuXG4vKipcbiAqIFRoaXMgcmVwbGFjZXMgYW55IGVudGl0aWVzIGluIHRoZSBpbmNvbWluZyBvYmplY3Qgd2l0aCBtYXRjaGluZyBlbnRpdGllcyAoYnlcbiAqIGlkKSBpbiB0aGUgc3RhdGUgKGlmIHRoZXkgZXhpc3QpLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gZW50aXR5UmVjb3Jkc1xuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gTmV3IGVudGl0eVJlY29yZHMgb2JqZWN0LlxuICovXG5jb25zdCByZXBsYWNlRXhpc3RpbmdFbnRpdGllc0Zyb21TdGF0ZSA9ICggc3RhdGUsIG1vZGVsTmFtZSwgZW50aXR5UmVjb3JkcyApID0+IHtcblx0Y29uc3QgZXhpc3RpbmdFbnRpdGllcyA9IHN0YXRlLmdldCggbW9kZWxOYW1lLCBudWxsICk7XG5cdGlmICggZXhpc3RpbmdFbnRpdGllcyA9PT0gbnVsbCApIHtcblx0XHRyZXR1cm4gZW50aXR5UmVjb3Jkcztcblx0fVxuXHRyZXR1cm4gZW50aXR5UmVjb3Jkcy5tZXJnZSggZXhpc3RpbmdFbnRpdGllcyApO1xufTtcblxuLyoqXG4gKiBSZWR1Y2VyIGZvciByZWNlaXZpbmcgYW4gZW50aXR5IGludG8gdGhlIHN0YXRlLlxuICpcbiAqIFRoaXMgZG9lcyBub3QgcmVwbGFjZSBhbnkgZW50aXR5IHRoYXQgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IE5ldyBzdGF0ZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSBvdGhlcndpc2UgZXhpc3Rpbmcgc3RhdGUuXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVFbnRpdHkoIHN0YXRlLCBhY3Rpb24gKSB7XG5cdC8qKlxuXHQgKiBAdHlwZSB7c3RyaW5nfSBtb2RlbE5hbWVcblx0ICogQHR5cGUge0Jhc2VFbnRpdHl8bnVsbH0gZW50aXR5XG5cdCAqL1xuXHRjb25zdCB7IGVudGl0eSB9ID0gYWN0aW9uO1xuXG5cdGlmIChcblx0XHQhIGlzTW9kZWxFbnRpdHkoIGVudGl0eSApIHx8XG5cdFx0c3RhdGUuaGFzSW4oIFsgZW50aXR5Lm1vZGVsTmFtZSwgZW50aXR5LmlkIF0gKVxuXHQpIHtcblx0XHRyZXR1cm4gc3RhdGU7XG5cdH1cblx0cmV0dXJuIHN0YXRlLnNldEluKCBbIGVudGl0eS5tb2RlbE5hbWUsIGVudGl0eS5pZCBdLCBlbnRpdHkgKTtcbn1cblxuLyoqXG4gKiBBIHJlZHVjZXIgcmV0dXJuaW5nIHRoZSBuZXcgc3RhdGUgZm9yIGFjdGlvbi5cbiAqXG4gKiBIYW5kbGVzIHJlY2VpdmluZyBlbnRpdHkgcmVjb3JkcyBmcm9tIGEgcmVzdCByZXNwb25zZSBhbmQgY29udmVydGluZyB0aGVtIHRvXG4gKiBtb2RlbCBlbnRpdGllcyB1c2luZyB0aGUgcHJvdmlkZWQgZmFjdG9yeS5cbiAqXG4gKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBpbmNvbWluZyBlbnRpdHkgcmVjb3JkcyBhcmUgYW4gYXJyYXkgb2YgQmFzZUVudGl0eVxuICogY2hpbGRyZW4gaW5zdGFuY2VzLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IFRoZSBuZXcgc3RhdGUgKG9yIHRoZSBvcmlnaW5hbCBpZiBub1xuICogY2hhbmdlIGRldGVjdGVkIG9yIGFjdGlvbiBpc24ndCBoYW5kbGVkIGJ5IHRoaXMgbWV0aG9kKVxuICovXG5mdW5jdGlvbiByZWNlaXZlRW50aXR5UmVjb3Jkcyggc3RhdGUsIGFjdGlvbiApIHtcblx0Y29uc3QgeyB0eXBlLCBtb2RlbE5hbWUgfSA9IGFjdGlvbjtcblx0Ly8gY29udmVydCBmcm9tIGFycmF5IG9mIGVudGl0aWVzIHRvIGEgTWFwIGluZGV4ZWQgYnkgZW50aXR5IGlkLlxuXHRjb25zdCBpbmNvbWluZ0VudGl0aWVzID0gTWFwKCkud2l0aE11dGF0aW9ucyggKCBzdWJTdGF0ZSApID0+IHtcblx0XHRhY3Rpb24uZW50aXRpZXMuZm9yRWFjaChcblx0XHRcdCggZW50aXR5ICkgPT4ge1xuXHRcdFx0XHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBlbnRpdHksIG1vZGVsTmFtZSApICkge1xuXHRcdFx0XHRcdHN1YlN0YXRlLnNldCggZW50aXR5LmlkLCBlbnRpdHkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH0gKTtcblx0aWYgKCAhIHN0YXRlLmhhcyggbW9kZWxOYW1lICkgfHwgaW5jb21pbmdFbnRpdGllcy5pc0VtcHR5KCkgKSB7XG5cdFx0cmV0dXJuIHN0YXRlO1xuXHR9XG5cdGxldFx0dXBkYXRlU3RhdGUgPSBmYWxzZSxcblx0XHRlbnRpdHlSZWNvcmRzO1xuXHRzd2l0Y2ggKCB0eXBlICkge1xuXHRcdGNhc2UgdHlwZXMuUkVDRUlWRV9FTlRJVFlfUkVDT1JEUzpcblx0XHRcdC8vIGlmIGFsbCBpbmNvbWluZyBrZXlzIGV4aXN0IGluIHN0YXRlIGFscmVhZHkgdGhlbiB3ZSBkb24ndCBkb1xuXHRcdFx0Ly8gYW55dGhpbmdcblx0XHRcdGlmICggaXNFbXB0eSggZGlmZmVyZW5jZShcblx0XHRcdFx0QXJyYXkuZnJvbSggaW5jb21pbmdFbnRpdGllcy5rZXlzKCkgKSxcblx0XHRcdFx0QXJyYXkuZnJvbSggc3RhdGUuZ2V0KCBtb2RlbE5hbWUsIE1hcCgpICkua2V5cygpIClcblx0XHRcdCkgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHQvLyByZXBsYWNlIGFueSBpbmNvbWluZyBlbnRpdHlSZWNvcmRzIHdpdGggZXhpc3RpbmcgZW50aXR5UmVjb3JkcyBhbHJlYWR5XG5cdFx0XHQvLyBpbiB0aGUgc3RvcmUgc28gdGhpcyByZWdpc3RyeSBhY3RzIGFzIHRoZSBcImF1dGhvcml0eVwiXG5cdFx0XHQvLyBmb3IgZW50aXR5UmVjb3Jkcy5cblx0XHRcdGVudGl0eVJlY29yZHMgPSByZXBsYWNlRXhpc3RpbmdFbnRpdGllc0Zyb21TdGF0ZShcblx0XHRcdFx0c3RhdGUsXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0aW5jb21pbmdFbnRpdGllc1xuXHRcdFx0KTtcblx0XHRcdHVwZGF0ZVN0YXRlID0gdHJ1ZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgdHlwZXMuUkVDRUlWRV9BTkRfUkVQTEFDRV9FTlRJVFlfUkVDT1JEUzpcblx0XHRcdHVwZGF0ZVN0YXRlID0gdHJ1ZTtcblx0XHRcdGVudGl0eVJlY29yZHMgPSBzdGF0ZS5nZXQoIG1vZGVsTmFtZSwgTWFwKCkgKS5tZXJnZSggaW5jb21pbmdFbnRpdGllcyApO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKCB1cGRhdGVTdGF0ZSApIHtcblx0XHRyZXR1cm4gc3RhdGUuc2V0KCBtb2RlbE5hbWUsIGVudGl0eVJlY29yZHMgKTtcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQSByZWR1Y2VyIGhhbmRsaW5nIHRoZSByZW1vdmFsIG9mIGFuIGVudGl0eSBmcm9tIHN0YXRlIG1hdGNoaW5nIHRoZSBnaXZlblxuICogaWQuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gTmV3IG9yIGV4aXN0aW5nIHN0YXRlLlxuICovXG5mdW5jdGlvbiByZW1vdmVFbnRpdHlCeUlkKCBzdGF0ZSwgYWN0aW9uICkge1xuXHRjb25zdCB7IG1vZGVsTmFtZSwgZW50aXR5SWQgPSAwIH0gPSBhY3Rpb247XG5cdGNvbnN0IGlkID0gbm9ybWFsaXplRW50aXR5SWQoIGVudGl0eUlkICk7XG5cdHJldHVybiBzdGF0ZS5kZWxldGVJbiggWyBtb2RlbE5hbWUsIGlkIF0gKTtcbn1cblxuLyoqXG4gKiBFeHBvcnRzIHVzZWZ1bCBmb3IgdGVzdHMuXG4gKi9cbmV4cG9ydCB7XG5cdHJlY2VpdmVFbnRpdHksXG5cdHJlY2VpdmVFbnRpdHlSZWNvcmRzLFxuXHRyZW1vdmVFbnRpdHlCeUlkLFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IHJlZHVjZXIgZm9yIGhhbmRsaW5nIGVudGl0aWVzIGluIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IE5ldyBvciBleGlzdGluZyBzdGF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbnRpdGllcyhcblx0c3RhdGUgPSBmcm9tSlMoIERFRkFVTFRfQ09SRV9TVEFURS5lbnRpdGllcyApLFxuXHRhY3Rpb25cbikge1xuXHRpZiAoIGFjdGlvbi50eXBlICkge1xuXHRcdHN3aXRjaCAoIGFjdGlvbi50eXBlICkge1xuXHRcdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0VOVElUWV9SRUNPUkRTOlxuXHRcdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0FORF9SRVBMQUNFX0VOVElUWV9SRUNPUkRTOlxuXHRcdFx0XHRyZXR1cm4gcmVjZWl2ZUVudGl0eVJlY29yZHMoIHN0YXRlLCBhY3Rpb24gKTtcblx0XHRcdGNhc2UgdHlwZXMuUkVDRUlWRV9FTlRJVFk6XG5cdFx0XHRcdHJldHVybiByZWNlaXZlRW50aXR5KCBzdGF0ZSwgYWN0aW9uICk7XG5cdFx0XHRjYXNlIHR5cGVzLlJFTU9WRV9FTlRJVFlfQllfSUQgOlxuXHRcdFx0XHRyZXR1cm4gcmVtb3ZlRW50aXR5QnlJZCggc3RhdGUsIGFjdGlvbiApO1xuXHRcdFx0Y2FzZSByZXNldFR5cGVzLlJFU0VUX0FMTF9TVEFURSA6XG5cdFx0XHRcdHJldHVybiBmcm9tSlMoIERFRkFVTFRfQ09SRV9TVEFURS5lbnRpdGllcyApO1xuXHRcdFx0Y2FzZSByZXNldFR5cGVzLlJFU0VUX1NUQVRFX0ZPUl9NT0RFTCA6XG5cdFx0XHRcdHJldHVybiBzdGF0ZS5oYXMoIHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ubW9kZWxOYW1lICkgKSA/XG5cdFx0XHRcdFx0c3RhdGUuc2V0KCBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLm1vZGVsTmFtZSApLCBNYXAoKSApIDpcblx0XHRcdFx0XHRzdGF0ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHN0YXRlO1xufVxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGNvbWJpbmVSZWR1Y2VycyB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgZW50aXRpZXMgZnJvbSAnLi9lbnRpdGllcyc7XG5pbXBvcnQgcmVsYXRpb25zIGZyb20gJy4vcmVsYXRpb25zJztcbmltcG9ydCBkaXJ0eSBmcm9tICcuL2RpcnR5JztcbmltcG9ydCBtb2RlbFNwZWNpZmljIGZyb20gJy4vbW9kZWwtc3BlY2lmaWMtcmVkdWNlcnMnO1xuXG4vKipcbiAqIFJlZHVjZXJzIGZvciBlbnRpdGllcywgcmVsYXRpb25zIGFuZCBkaXJ0eSBzdGF0ZS5cbiAqXG4gKiBCZSBhd2FyZSB0aGF0IHRoZSByb290IHN0YXRlIGlzIGEgcGxhaW4gb2JqZWN0IGJ1dCB0aGUgc2xpY2VzIChlbnRpdGllcyxcbiAqIHJlbGF0aW9ucywgZGlydHkpIGFyZSBpbW11dGFibGUgTWFwcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY29tYmluZVJlZHVjZXJzKCB7XG5cdGVudGl0aWVzLFxuXHRyZWxhdGlvbnMsXG5cdGRpcnR5LFxuXHRtb2RlbFNwZWNpZmljLFxufSApO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IE1hcCB9IGZyb20gJ2ltbXV0YWJsZSc7XG5cbmltcG9ydCB7IEFDVElPTl9UWVBFUyB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9uLXR5cGVzJztcbmNvbnN0IHsgbW9kZWxTcGVjaWZpYzogdHlwZXMsIHJlc2V0czogcmVzZXRUeXBlcyB9ID0gQUNUSU9OX1RZUEVTO1xuXG4vKipcbiAqIEhhbmRsZSByZWNlaXZpbmcgYSBtb2RlbCBzcGVjaWZpYyBzZWxlY3RvciByZWNvcmQgaW50byB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtNYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtNYXB9IE5ldyBvciBleGlzdGluZyBzdGF0ZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFuZGxlUmVjZWl2ZVNlbGVjdG9yKCBzdGF0ZSA9IE1hcCgpLCBhY3Rpb24gKSB7XG5cdGNvbnN0IHtcblx0XHR0eXBlLFxuXHRcdHNlbGVjdG9yLFxuXHRcdGFyZ3MsXG5cdFx0dmFsdWUsXG5cdH0gPSBhY3Rpb247XG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX1NFTEVDVE9SX1ZBTFVFOlxuXHRcdFx0cmV0dXJuIHN0YXRlLnNldEluKCBbIHNlbGVjdG9yLCBKU09OLnN0cmluZ2lmeSggYXJncyApIF0sIHZhbHVlICk7XG5cdFx0Y2FzZSByZXNldFR5cGVzLlJFU0VUX0FMTF9NT0RFTF9TUEVDSUZJQzpcblx0XHRjYXNlIHJlc2V0VHlwZXMuUkVTRVRfQUxMX1NUQVRFOlxuXHRcdFx0cmV0dXJuIE1hcCgpO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9NT0RFTF9TUEVDSUZJQ19GT1JfU0VMRUNUT1I6XG5cdFx0XHRyZXR1cm4gc3RhdGUuZGVsZXRlKCBzZWxlY3RvciApO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9NT0RFTF9TUEVDSUZJQ19GT1JfU0VMRUNUT1JfQU5EX0FSR1M6XG5cdFx0XHRyZXR1cm4gc3RhdGUuZGVsZXRlSW4oIFsgc2VsZWN0b3IsIEpTT04uc3RyaW5naWZ5KCBhcmdzICkgXSApO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn1cbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0cy5cbiAqL1xuaW1wb3J0IHtcblx0REVGQVVMVF9DT1JFX1NUQVRFLFxuXHRzaW5ndWxhck1vZGVsTmFtZSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHtcblx0cmVtb3ZlRW1wdHlGcm9tU3RhdGUsXG5cdG5vcm1hbGl6ZUVudGl0eUlkLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcbmltcG9ydCB7IGZyb21KUywgU2V0LCBNYXAgfSBmcm9tICdpbW11dGFibGUnO1xuXG4vKipcbiAqIEludGVybmFsIEltcG9ydHNcbiAqL1xuaW1wb3J0IHsgQUNUSU9OX1RZUEVTIH0gZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb24tdHlwZXMnO1xuY29uc3QgeyByZWxhdGlvbnM6IHR5cGVzLCByZXNldHM6IHJlc2V0VHlwZXMgfSA9IEFDVElPTl9UWVBFUztcblxuLyoqXG4gKiBIYW5kbGVzIG5vcm1hbGl6aW5nIHRoZSBpbmNvbWluZyBhY3Rpb24gc28gdGhhdCB3ZSdyZSBhbHdheXMgb25seSByZWNlaXZpbmdcbiAqIHJlbGF0aW9uIGRhdGEgaW4gdGhlIHN0YXRlIG9yaWVudGVkIGZyb20gb25lIGRpcmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBFeGlzdGluZyBvciBuZXcgc3RhdGUuXG4gKi9cbmNvbnN0IG5vcm1hbGl6ZWRSZWNlaXZlQW5kUmVtb3ZlUmVsYXRpb25zID0gKCBzdGF0ZSwgYWN0aW9uICkgPT4ge1xuXHQvLyBmaXJzdCBub3JtYWxpemUgdGhlIGFjdGlvblxuXHRhY3Rpb24gPSB7XG5cdFx0Li4uYWN0aW9uLFxuXHRcdG1vZGVsTmFtZTogc2luZ3VsYXJNb2RlbE5hbWUoIGFjdGlvbi5tb2RlbE5hbWUgKSxcblx0XHRyZWxhdGlvbk5hbWU6IHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ucmVsYXRpb25OYW1lICksXG5cdFx0ZW50aXR5SWQ6IG5vcm1hbGl6ZUVudGl0eUlkKCBhY3Rpb24uZW50aXR5SWQgKSxcblx0fTtcblx0Y29uc3Qge1xuXHRcdG1vZGVsTmFtZSxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0cmVsYXRlZEVudGl0eUlkcyxcblx0XHRlbnRpdHlJZCxcblx0fSA9IGFjdGlvbjtcblxuXHQvLyBhZGQgdG8gc3RhdGUgZnJvbSB0aGUgY29udGV4dCBvZiB0aGUgbW9kZWxcblx0c3RhdGUgPSByZWNlaXZlQW5kUmVtb3ZlUmVsYXRpb25zKCBzdGF0ZSwgYWN0aW9uICk7XG5cblx0Ly8gYWRkIHRvIHN0YXRlIGZyb20gdGhlIGNvbnRleHQgb2YgdGhlIHJlbGF0aW9uXG5cdGNvbnN0IG5ld0FjdGlvbiA9IHtcblx0XHQuLi5hY3Rpb24sXG5cdFx0bW9kZWxOYW1lOiBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICksXG5cdFx0cmVsYXRpb25OYW1lOiBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICksXG5cdFx0cmVsYXRlZEVudGl0eUlkczogWyBlbnRpdHlJZCBdLFxuXHR9O1xuXG5cdHdoaWxlICggcmVsYXRlZEVudGl0eUlkcy5sZW5ndGggPiAwICkge1xuXHRcdG5ld0FjdGlvbi5lbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCByZWxhdGVkRW50aXR5SWRzLnBvcCgpICk7XG5cdFx0c3RhdGUgPSByZWNlaXZlQW5kUmVtb3ZlUmVsYXRpb25zKCBzdGF0ZSwgbmV3QWN0aW9uICk7XG5cdH1cblxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIFJlZHVjZXIgZm9yIHRoZSByZWxhdGlvbnMgc3RhdGUgaW4gdGhlIHN0b3JlLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IEVpdGhlciBhIG5ldyBzdGF0ZSBvciB0aGUgZXhpc3Rpbmcgc3RhdGUuXG4gKi9cbmZ1bmN0aW9uIHJlY2VpdmVBbmRSZW1vdmVSZWxhdGlvbnMoIHN0YXRlLCBhY3Rpb24gKSB7XG5cdGNvbnN0IHtcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdGVudGl0eUlkLFxuXHRcdHR5cGUsXG5cdH0gPSBhY3Rpb247XG5cdGNvbnN0IHJlbGF0aW9uRW50aXR5SWRzID0gU2V0KCBhY3Rpb24ucmVsYXRlZEVudGl0eUlkcyApO1xuXG5cdGNvbnN0IHBhdGggPSBbIG1vZGVsTmFtZSwgZW50aXR5SWQsIHJlbGF0aW9uTmFtZSBdO1xuXHRjb25zdCBleGlzdGluZ0lkcyA9IHN0YXRlLmdldEluKCBwYXRoLCBTZXQoKSApO1xuXG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX1JFTEFURURfRU5USVRZX0lEUzpcblx0XHRcdHJldHVybiBzdGF0ZS5zZXRJbihcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0ZXhpc3RpbmdJZHMuY29uY2F0KCByZWxhdGlvbkVudGl0eUlkcyApXG5cdFx0XHQpO1xuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX1JFTEFURURfRU5USVRZX0lEUzpcblx0XHRcdGNvbnN0IGlkc0FmdGVyUmVtb3ZhbCA9IGV4aXN0aW5nSWRzLmZpbHRlcihcblx0XHRcdFx0KCBpZCApID0+ICEgcmVsYXRpb25FbnRpdHlJZHMua2V5T2YoIG5vcm1hbGl6ZUVudGl0eUlkKCBpZCApIClcblx0XHRcdCk7XG5cblx0XHRcdC8vIEltbXV0YWJsZS5TZXQoKS5maWx0ZXIoKSByZXR1cm5zIG5ldyBpbnN0YW5jZSwgc28gbGV0J3MgY29tcGFyZVxuXHRcdFx0Ly8gc2l6ZVxuXHRcdFx0aWYgKCBpZHNBZnRlclJlbW92YWwuY291bnQoKSA9PT0gZXhpc3RpbmdJZHMuY291bnQoKSApIHtcblx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuICEgaWRzQWZ0ZXJSZW1vdmFsLmlzRW1wdHkoKSA/XG5cdFx0XHRcdHN0YXRlLnNldEluKCBwYXRoLCBpZHNBZnRlclJlbW92YWwgKSA6XG5cdFx0XHRcdHJlbW92ZUVtcHR5RnJvbVN0YXRlKCBzdGF0ZSwgcGF0aCApO1xuXHR9XG5cblx0cmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFJlZHVjZXIgZm9yIGhhbmRsaW5nIGVudGl0eSBpZHMgaW4gdGhlIHJlbGF0aW9uIHRoYXQgaGF2ZSBhIGN1aWQgdGhhdCBoYXNcbiAqIGJlZW4gdXBkYXRlZCB3aXRoIGEgbmV3IGVudGl0eSBpZCBmcm9tIHRoZSBzZXJ2ZXIuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH0gRWl0aGVyIG5ldyBvciBvcmlnaW5hbCBzdGF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVFbnRpdHlJZEZvclJlbGF0aW9ucyggc3RhdGUsIGFjdGlvbiApIHtcblx0bGV0IHtcblx0XHRvbGRFbnRpdHlJZCxcblx0XHRuZXdFbnRpdHlJZCxcblx0XHRtb2RlbE5hbWUsXG5cdH0gPSBhY3Rpb247XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0b2xkRW50aXR5SWQgPSBub3JtYWxpemVFbnRpdHlJZCggb2xkRW50aXR5SWQgKTtcblx0bmV3RW50aXR5SWQgPSBub3JtYWxpemVFbnRpdHlJZCggbmV3RW50aXR5SWQgKTtcblxuXHQvLyBmcm9tIGNvbnRleHQgb2YgbW9kZWxOYW1lXG5cdGNvbnN0IG1vZGVsUmVjb3JkVG9SZXBsYWNlID0gc3RhdGUuZ2V0SW4oXG5cdFx0WyBtb2RlbE5hbWUsIG9sZEVudGl0eUlkIF0sXG5cdFx0TWFwKClcblx0KTtcblxuXHRpZiAoICEgbW9kZWxSZWNvcmRUb1JlcGxhY2UuaXNFbXB0eSgpICkge1xuXHRcdHN0YXRlID0gcmVwbGFjZVJlbGF0aW9uUmVjb3Jkcyhcblx0XHRcdHN0YXRlLFxuXHRcdFx0e1xuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdG9sZEVudGl0eUlkLFxuXHRcdFx0XHRuZXdFbnRpdHlJZCxcblx0XHRcdFx0bWFpblJlY29yZFRvUmVwbGFjZTogbW9kZWxSZWNvcmRUb1JlcGxhY2UsXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2QgZm9yIGhhbmRsaW5nIHJlcGxhY2luZyB0aGUgb2xkIGVudGl0eSBpZCBmcm9tIGluY29taW5nIG1vZGVsXG4gKiB3aXRoIHRoZSBwcm92aWRlZCBuZXcgaWQgZGF0YSAob3IganVzdCByZW1vdmluZyBpdCBpZiByZW1vdmVPbmx5IGlzIHRydWUpXG4gKiBUaGlzIGhhbmRsZXMgYm90aCB0aGUgaW5kZXggYW5kIGVudGl0eU1hcCBvYmplY3RzIGluIHRoZSByZWxhdGlvbnMgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1vZGVsRGF0YVxuICogQHBhcmFtIHtib29sZWFufSByZW1vdmVPbmx5IElmIHRydWUsIHRoZW4gdGhlIHZhbHVlIGZvciBvbGRFbnRpdHlJZCB3aWxsIGJlXG4gKiByZW1vdmVkIGZyb20gc3RhdGUgYW5kIG5ld0VudGl0eSB3aWxsIG5vdCBiZSBhZGRlZCB0byBzdGF0ZS5cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IFJldHVybnMgZWl0aGVyIG5ldyBvciBleGlzdGluZyBzdGF0ZS5cbiAqL1xuY29uc3QgcmVwbGFjZVJlbGF0aW9uUmVjb3JkcyA9IChcblx0c3RhdGUsXG5cdG1vZGVsRGF0YSxcblx0cmVtb3ZlT25seSA9IGZhbHNlLFxuKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRtb2RlbE5hbWUsXG5cdFx0b2xkRW50aXR5SWQsXG5cdFx0bmV3RW50aXR5SWQgPSAwLFxuXHRcdG1haW5SZWNvcmRUb1JlcGxhY2UsXG5cdH0gPSBtb2RlbERhdGE7XG5cblx0Ly8gZmlyc3QgZnJvbSBjb250ZXh0IG9mIG1vZGVsXG5cdGNvbnN0IG1haW5QYXRoID0gWyBtb2RlbE5hbWUsIG9sZEVudGl0eUlkIF07XG5cdHN0YXRlID0gc3RhdGUud2l0aE11dGF0aW9ucyggKCBzdWJTdGF0ZSApID0+IHtcblx0XHRzdWJTdGF0ZS5kZWxldGVJbiggbWFpblBhdGggKTtcblx0XHRtYWluUGF0aC5wb3AoKTtcblx0XHRpZiAoIHJlbW92ZU9ubHkgKSB7XG5cdFx0XHRpZiAoIHN1YlN0YXRlLmdldEluKCBtYWluUGF0aCApLmlzRW1wdHkoKSApIHtcblx0XHRcdFx0c3ViU3RhdGUuZGVsZXRlSW4oIG1haW5QYXRoICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN1YlN0YXRlLnNldEluKFxuXHRcdFx0XHRbIC4uLm1haW5QYXRoLCBuZXdFbnRpdHlJZCBdLFxuXHRcdFx0XHRtYWluUmVjb3JkVG9SZXBsYWNlXG5cdFx0XHQpO1xuXHRcdH1cblx0fSApO1xuXG5cdC8vIG5vdyB3ZSBsb29wIHRocm91Z2ggdGhlIHJlbGF0aW9ucyBvbiB0aGUgbWFpbiByZWNvcmQgYW5kIHVzZSB0aGF0IHRvXG5cdC8vIGNoYW5nZSB0aGUgdmFsdWVzIGluIHRoZSByZWxhdGlvbiBzdGF0ZXMuXG5cdG1haW5SZWNvcmRUb1JlcGxhY2UuZm9yRWFjaCggKCByZWxhdGlvbklkcywgcmVsYXRpb25OYW1lICkgPT4ge1xuXHRcdHJlbGF0aW9uSWRzID0gcmVsYXRpb25JZHMudG9BcnJheSgpO1xuXHRcdHN0YXRlID0gc3RhdGUud2l0aE11dGF0aW9ucyggKCBzdWJTdGF0ZSApID0+IHtcblx0XHRcdHdoaWxlICggcmVsYXRpb25JZHMubGVuZ3RoID4gMCApIHtcblx0XHRcdFx0Y29uc3QgcmVsYXRpb25QYXRoID0gW1xuXHRcdFx0XHRcdHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKSxcblx0XHRcdFx0XHRyZWxhdGlvbklkcy5wb3AoKSxcblx0XHRcdFx0XHRzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICksXG5cdFx0XHRcdF07XG5cdFx0XHRcdGxldCByZWxhdGlvblJlY29yZCA9IHN1YlN0YXRlLmdldEluKCByZWxhdGlvblBhdGgsIFNldCgpICk7XG5cdFx0XHRcdHJlbGF0aW9uUmVjb3JkID0gcmVsYXRpb25SZWNvcmQuZGVsZXRlKCBvbGRFbnRpdHlJZCApO1xuXHRcdFx0XHRpZiAoIHJlbW92ZU9ubHkgJiYgcmVsYXRpb25SZWNvcmQuaXNFbXB0eSgpICkge1xuXHRcdFx0XHRcdHJlbW92ZUVtcHR5RnJvbVN0YXRlKFxuXHRcdFx0XHRcdFx0c3ViU3RhdGUsXG5cdFx0XHRcdFx0XHRyZWxhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHQxLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlbGF0aW9uUmVjb3JkID0gcmVtb3ZlT25seSA/XG5cdFx0XHRcdFx0XHRyZWxhdGlvblJlY29yZCA6XG5cdFx0XHRcdFx0XHRyZWxhdGlvblJlY29yZC5hZGQoIG5ld0VudGl0eUlkICk7XG5cdFx0XHRcdFx0c3ViU3RhdGUuc2V0SW4oIHJlbGF0aW9uUGF0aCwgcmVsYXRpb25SZWNvcmQgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSApO1xuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYW55IHJlbGF0aW9uIHJlcXVlc3RzIGZvciByZWxhdGVkIGVudGl0aWVzIGluIHRoZSBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBlaXRoZXIgZXhpc3RpbmcgKGlmIG5vIGNoYW5nZXMpIG9yIG5ldyBzdGF0ZS5cbiAqL1xuY29uc3QgcmVtb3ZlUmVsYXRlZEVudGl0aWVzRm9yRW50aXR5ID0gKCBzdGF0ZSwgYWN0aW9uICkgPT4ge1xuXHRsZXQge1xuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlJZCxcblx0fSA9IGFjdGlvbjtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRlbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCBlbnRpdHlJZCApO1xuXG5cdGNvbnN0IG1vZGVsUmVjb3JkVG9SZXBsYWNlID0gc3RhdGUuZ2V0SW4oXG5cdFx0WyBtb2RlbE5hbWUsIGVudGl0eUlkIF0sXG5cdFx0TWFwKClcblx0KTtcblxuXHRpZiAoICEgbW9kZWxSZWNvcmRUb1JlcGxhY2UuaXNFbXB0eSgpICkge1xuXHRcdHN0YXRlID0gcmVwbGFjZVJlbGF0aW9uUmVjb3Jkcyhcblx0XHRcdHN0YXRlLFxuXHRcdFx0e1xuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdG9sZEVudGl0eUlkOiBlbnRpdHlJZCxcblx0XHRcdFx0bWFpblJlY29yZFRvUmVwbGFjZTogbW9kZWxSZWNvcmRUb1JlcGxhY2UsXG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgcmVzZXR0aW5nIHRoZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIG1vZGVsTmFtZSBpbiB0aGUgYWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqXG4gKiBAcmV0dXJuIHtJbW11dGFibGUuTWFwfSBUaGUgbmV3IChvciBleGlzdGluZyBpZiBubyBjaGFuZ2VzKSBzdGF0ZS5cbiAqL1xuY29uc3QgcmVzZXRTdGF0ZUZvck1vZGVsID0gKCBzdGF0ZSwgYWN0aW9uICkgPT4ge1xuXHRjb25zdCBtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLm1vZGVsTmFtZSApO1xuXG5cdC8vIGdldCB0aGUgcmVsYXRpb25zIGZvciB0aGUgbW9kZWxcblx0Y29uc3QgbW9kZWxSZWxhdGlvbnMgPSBzdGF0ZS5nZXQoIG1vZGVsTmFtZSwgTWFwKCkgKTtcblxuXHRpZiAoICEgbW9kZWxSZWxhdGlvbnMuaXNFbXB0eSgpICkge1xuXHRcdC8vIGRlbGV0ZSB0aGUgbW9kZWxOYW1lIGZvcm0gdGhlIHN0YXRlXG5cdFx0c3RhdGUgPSBzdGF0ZS5kZWxldGUoIG1vZGVsTmFtZSApO1xuXG5cdFx0Ly8gbG9vcCB0aHJvdWdoIHRoZSByZWxhdGlvbnMgYW5kIGRlbGV0ZVxuXHRcdHN0YXRlID0gc3RhdGUud2l0aE11dGF0aW9ucyhcblx0XHRcdCggc3ViU3RhdGUgKSA9PiB7XG5cdFx0XHRcdG1vZGVsUmVsYXRpb25zLmZvckVhY2goICggcmVsYXRpb25TdGF0ZSApID0+IHtcblx0XHRcdFx0XHRyZWxhdGlvblN0YXRlLmZvckVhY2goICggcmVsYXRpb25JZHMsIHJlbGF0aW9uTmFtZSApID0+IHtcblx0XHRcdFx0XHRcdHJlbGF0aW9uSWRzID0gcmVsYXRpb25JZHMudG9BcnJheSgpO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCByZWxhdGlvbklkcy5sZW5ndGggPiAwICkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCByZWxhdGlvblBhdGggPSBbXG5cdFx0XHRcdFx0XHRcdFx0c2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApLFxuXHRcdFx0XHRcdFx0XHRcdHJlbGF0aW9uSWRzLnBvcCgpLFxuXHRcdFx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdFx0XHRsZXQgcmVsYXRpb25SZWNvcmQgPSBzdWJTdGF0ZS5nZXRJbihcblx0XHRcdFx0XHRcdFx0XHRyZWxhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0TWFwKClcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmVsYXRpb25SZWNvcmQgPSByZWxhdGlvblJlY29yZC5kZWxldGUoIG1vZGVsTmFtZSApO1xuXHRcdFx0XHRcdFx0XHRpZiAoIHJlbGF0aW9uUmVjb3JkLmlzRW1wdHkoKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZW1vdmVFbXB0eUZyb21TdGF0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHN1YlN0YXRlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVsYXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRzdWJTdGF0ZS5zZXRJbiggcmVsYXRpb25QYXRoLCByZWxhdGlvblJlY29yZCApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIGV4cG9ydCBmb3IgdGVzdHNcbiAqL1xuZXhwb3J0IHtcblx0bm9ybWFsaXplZFJlY2VpdmVBbmRSZW1vdmVSZWxhdGlvbnMsXG5cdHVwZGF0ZUVudGl0eUlkRm9yUmVsYXRpb25zLFxuXHRyZW1vdmVSZWxhdGVkRW50aXRpZXNGb3JFbnRpdHksXG59O1xuXG4vKipcbiAqIFJlZHVjZXIgZm9yIHJlbGF0aW9uIHJlbGF0ZWQgc3RhdGUgY2hhbmdlcy5cbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge0ltbXV0YWJsZS5NYXB9IE9yaWdpbmFsIHN0YXRlIGlmIG5vIGNoYW5nZSwgbmV3IHN0YXRlIGlmIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVsYXRpb25zKFxuXHRzdGF0ZSA9IGZyb21KUyggREVGQVVMVF9DT1JFX1NUQVRFLnJlbGF0aW9ucyApLFxuXHRhY3Rpb25cbikge1xuXHRzd2l0Y2ggKCBhY3Rpb24udHlwZSApIHtcblx0XHRjYXNlIHR5cGVzLlJFQ0VJVkVfUkVMQVRFRF9FTlRJVFlfSURTOlxuXHRcdGNhc2UgdHlwZXMuUkVNT1ZFX1JFTEFURURfRU5USVRZX0lEUzpcblx0XHRcdHJldHVybiBub3JtYWxpemVkUmVjZWl2ZUFuZFJlbW92ZVJlbGF0aW9ucyggc3RhdGUsIGFjdGlvbiApO1xuXHRcdGNhc2UgdHlwZXMuUkVDRUlWRV9VUERBVEVEX0VOVElUWV9JRF9GT1JfUkVMQVRJT05TOlxuXHRcdFx0cmV0dXJuIHVwZGF0ZUVudGl0eUlkRm9yUmVsYXRpb25zKCBzdGF0ZSwgYWN0aW9uICk7XG5cdFx0Y2FzZSB0eXBlcy5SRU1PVkVfUkVMQVRFRF9FTlRJVElFU19GT1JfRU5USVRZOlxuXHRcdFx0cmV0dXJuIHJlbW92ZVJlbGF0ZWRFbnRpdGllc0ZvckVudGl0eSggc3RhdGUsIGFjdGlvbiApO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9BTExfU1RBVEU6XG5cdFx0XHRyZXR1cm4gZnJvbUpTKCBERUZBVUxUX0NPUkVfU1RBVEUucmVsYXRpb25zICk7XG5cdFx0Y2FzZSByZXNldFR5cGVzLlJFU0VUX1NUQVRFX0ZPUl9NT0RFTDpcblx0XHRcdHJldHVybiByZXNldFN0YXRlRm9yTW9kZWwoIHN0YXRlLCBhY3Rpb24gKTtcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZ2V0RW5kcG9pbnQsIHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQgeyBmZXRjaCwgcmVzb2x2ZVNlbGVjdCB9IGZyb20gJy4uLy4uL2Jhc2UtY29udHJvbHMnO1xuaW1wb3J0IHsgcmVjZWl2ZUVudGl0eVJlY29yZHMgfSBmcm9tICcuLy4uL2FjdGlvbnMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgYXMgU0NIRU1BX1JFRFVDRVJfS0VZIH0gZnJvbSAnLi4vLi4vc2NoZW1hL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhcHBlbmRDYWxjdWxhdGVkRmllbGRzVG9QYXRoIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQSByZXNvbHZlciBmb3IgZ2V0dGluZyBhbiBlbnRpdHkgZm9yIHRoZSBnaXZlbiBtb2RlbCBuYW1lIGFuZCBlbnRpdHkgaWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGVudGl0eUlkXG4gKiBAcGFyYW0ge0FycmF5fSBjYWxjdWxhdGVkRmllbGRzXG4gKiBAcmV0dXJuIHtudWxsfEJhc2VFbnRpdHl9IElmIHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQsIHRoZSBlbnRpdHksXG4gKiBvdGhlcndpc2UgbnVsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBnZXRFbnRpdHlCeUlkKCBtb2RlbE5hbWUsIGVudGl0eUlkLCBjYWxjdWxhdGVkRmllbGRzID0gW10gKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0bGV0IHBhdGggPSBgJHsgZ2V0RW5kcG9pbnQoIG1vZGVsTmFtZSApIH0vJHsgZW50aXR5SWQgfWA7XG5cdHBhdGggPSBhcHBlbmRDYWxjdWxhdGVkRmllbGRzVG9QYXRoKFxuXHRcdHBhdGgsXG5cdFx0Y2FsY3VsYXRlZEZpZWxkc1xuXHQpO1xuXHRjb25zdCBlbnRpdHkgPSB5aWVsZCBmZXRjaCggeyBwYXRoIH0gKTtcblx0Y29uc3QgZmFjdG9yeSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRGYWN0b3J5Rm9yTW9kZWwnLFxuXHRcdG1vZGVsTmFtZVxuXHQpO1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsKCBmYWN0b3J5LCBtb2RlbE5hbWUgKSApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRjb25zdCBmdWxsRW50aXR5ID0gZmFjdG9yeS5mcm9tRXhpc3RpbmcoIGVudGl0eSApO1xuXHR5aWVsZCByZWNlaXZlRW50aXR5UmVjb3JkcyggbW9kZWxOYW1lLCBbIGZ1bGxFbnRpdHkgXSApO1xuXHRyZXR1cm4gZnVsbEVudGl0eTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vZW50aXRpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWxhdGlvbnMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGNyZWF0ZUFuZEtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUsXG5cdGtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUsXG5cdHNpbmd1bGFyTW9kZWxOYW1lLFxuXHRwbHVyYWxNb2RlbE5hbWUsXG5cdHN0cmlwQmFzZVJvdXRlRnJvbVVybCxcblx0Z2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nLFxuXHRnZXRQcmltYXJ5S2V5LFxuXHRnZXRFbmRwb2ludCxcblx0bW9kZWxOYW1lRm9yUXVlcnlTdHJpbmcsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7XG5cdGlzTW9kZWxFbnRpdHlGYWN0b3J5T2ZNb2RlbCxcblx0aXNNb2RlbEVudGl0eSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBJbnZhbGlkTW9kZWxFbnRpdHkgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuaW1wb3J0IHsgaXNFbXB0eSwgaXNVbmRlZmluZWQsIGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgTWFwIGFzIEltbXV0YWJsZU1hcCB9IGZyb20gJ2ltbXV0YWJsZSc7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRmZXRjaCxcblx0ZGlzcGF0Y2gsXG5cdHNlbGVjdCxcblx0cmVzb2x2ZVNlbGVjdCxcblx0cmVzb2x2ZUdldEVudGl0eUJ5SWRGb3JJZHMsXG5cdHJlc29sdmVHZXRSZWxhdGVkRW50aXRpZXMsXG59IGZyb20gJy4uLy4uL2Jhc2UtY29udHJvbHMnO1xuaW1wb3J0IHtcblx0cmVjZWl2ZUVudGl0eVJlY29yZHMsXG5cdHJlY2VpdmVSZWxhdGVkRW50aXRpZXMsXG59IGZyb20gJy4vLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBrZWVwRXhpc3RpbmdFbnRpdGllc0luT2JqZWN0IH0gZnJvbSAnLi4vLi4vYmFzZS1tb2RlbCc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSBhcyBDT1JFX1JFRFVDRVJfS0VZIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIGFzIFNDSEVNQV9SRURVQ0VSX0tFWSB9IGZyb20gJy4uLy4uL3NjaGVtYS9jb25zdGFudHMnO1xuaW1wb3J0IHsgYXBwZW5kQ2FsY3VsYXRlZEZpZWxkc1RvUGF0aCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBERUZBVUxUX0VNUFRZX0FSUkFZID0gW107XG5cbi8qKlxuICogQSByZXNvbHZlciBmb3IgZ2V0dGluZyByZWxhdGlvbiBlbnRpdGllcyBmb3IgdGhlIGdpdmVuIG1vZGVsIG5hbWUgYW5kIGVudGl0eVxuICogZm9yIHRoYXQgbW9kZWwuXG4gKlxuICogQHBhcmFtIHtCYXNlRW50aXR5fSBlbnRpdHlcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk1vZGVsTmFtZVxuICogQHBhcmFtIHtBcnJheX0gY2FsY3VsYXRlZEZpZWxkc1xuICogQHJldHVybiB7W118QXJyYXk8QmFzZUVudGl0eT59IElmIHRoZXJlIGFyZSByZWxhdGlvbnMsIHJldHVybnMgYW4gYXJyYXkgb2ZcbiAqIEJhc2VFbnRpdHkgaW5zdGFuY2VzIGZvciB0aGUgcmVsYXRpb25zLCBvdGhlcndpc2UgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogZ2V0UmVsYXRlZEVudGl0aWVzKFxuXHRlbnRpdHksXG5cdHJlbGF0aW9uTW9kZWxOYW1lLFxuXHRjYWxjdWxhdGVkRmllbGRzID0gW11cbikge1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eSggZW50aXR5ICkgKSB7XG5cdFx0dGhyb3cgbmV3IEludmFsaWRNb2RlbEVudGl0eSggJycsIGVudGl0eSApO1xuXHR9XG5cdC8vIGlmIGVudGl0eSBpcyBuZXcgdGhlbiB0aGVyZSB3b24ndCBiZSBhbnkgcmVsYXRpb25zIGZvciBpdCBvbiB0aGUgc2VydmVyXG5cdC8vIHlldCwgc28gbGV0J3MganVzdCByZXR1cm4gZWFybHkuXG5cdGlmICggZW50aXR5LmlzTmV3ICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHR9XG5cdHJlbGF0aW9uTW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTW9kZWxOYW1lICk7XG5cdGNvbnN0IHBsdXJhbFJlbGF0aW9uTmFtZSA9IHBsdXJhbE1vZGVsTmFtZSggcmVsYXRpb25Nb2RlbE5hbWUgKTtcblx0Y29uc3QgbW9kZWxOYW1lID0gZW50aXR5Lm1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRjb25zdCByZWxhdGlvblJlc291cmNlUHJvcGVydHkgPSBwbHVyYWxSZWxhdGlvbk5hbWUgKyAnUmVzb3VyY2UnO1xuXHRjb25zdCByZWxhdGlvbkVuZHBvaW50ID0gZW50aXR5WyByZWxhdGlvblJlc291cmNlUHJvcGVydHkgXSA/XG5cdFx0c3RyaXBCYXNlUm91dGVGcm9tVXJsKFxuXHRcdFx0ZW50aXR5WyByZWxhdGlvblJlc291cmNlUHJvcGVydHkgXS5yZXNvdXJjZUxpbmtcblx0XHQpIDpcblx0XHQnJztcblx0aWYgKCByZWxhdGlvbkVuZHBvaW50ID09PSAnJyApIHtcblx0XHR3YXJuaW5nKFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHQnVGhlcmUgaXMgbm8gcmVsYXRpb24gcmVzb3VyY2UgZm9yIHRoZSBnaXZlbiBtb2RlbCAoJXMpIGFuZCByZXF1ZXN0ZWQgcmVsYXRpb24gKCVzKScsXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdFx0cGx1cmFsUmVsYXRpb25OYW1lXG5cdFx0XHQpXG5cdFx0KTtcblx0XHRyZXR1cm4gREVGQVVMVF9FTVBUWV9BUlJBWTtcblx0fVxuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0J3JlY2VpdmVSZWxhdGlvbkVuZHBvaW50Rm9yTW9kZWxFbnRpdHknLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHkuaWQsXG5cdFx0cmVsYXRpb25Nb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25FbmRwb2ludFxuXHQpO1xuXHR5aWVsZCBkaXNwYXRjaChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZmluaXNoUmVzb2x1dGlvbicsXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlUmVsYXRpb25FbmRwb2ludEZvck1vZGVsRW50aXR5Jyxcblx0XHRbIG1vZGVsTmFtZSwgZW50aXR5LmlkLCByZWxhdGlvbk1vZGVsTmFtZSwgcmVsYXRpb25FbmRwb2ludCBdXG5cdCk7XG5cblx0Ly8gYWRkIGNhbGN1bGF0ZWRGaWVsZHMgdG8gZW5kcG9pbnQ/XG5cdGNvbnN0IHBhdGggPSBhcHBlbmRDYWxjdWxhdGVkRmllbGRzVG9QYXRoKFxuXHRcdHJlbGF0aW9uRW5kcG9pbnQsXG5cdFx0Y2FsY3VsYXRlZEZpZWxkc1xuXHQpO1xuXG5cdGxldCByZWxhdGlvbkVudGl0aWVzID0geWllbGQgZmV0Y2goIHsgcGF0aCB9ICk7XG5cblx0cmVsYXRpb25FbnRpdGllcyA9ICEgaXNFbXB0eSggcmVsYXRpb25FbnRpdGllcyApID9cblx0XHRyZWxhdGlvbkVudGl0aWVzIDpcblx0XHRERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHRyZWxhdGlvbkVudGl0aWVzID0gISBpc0FycmF5KCByZWxhdGlvbkVudGl0aWVzICkgP1xuXHRcdFsgcmVsYXRpb25FbnRpdGllcyBdIDpcblx0XHRyZWxhdGlvbkVudGl0aWVzO1xuXG5cdGlmICggISByZWxhdGlvbkVudGl0aWVzLmxlbmd0aCApIHtcblx0XHRyZXR1cm4gcmVsYXRpb25FbnRpdGllcztcblx0fVxuXG5cdGNvbnN0IGZhY3RvcnkgPSB5aWVsZCByZXNvbHZlU2VsZWN0KFxuXHRcdFNDSEVNQV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0RmFjdG9yeUZvck1vZGVsJyxcblx0XHRyZWxhdGlvbk1vZGVsTmFtZVxuXHQpO1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eUZhY3RvcnlPZk1vZGVsKFxuXHRcdGZhY3RvcnksXG5cdFx0cmVsYXRpb25Nb2RlbE5hbWVcblx0KSApIHtcblx0XHRyZXR1cm4gREVGQVVMVF9FTVBUWV9BUlJBWTtcblx0fVxuXG5cdGxldCBmdWxsRW50aXRpZXMgPSBrZXlFbnRpdGllc0J5UHJpbWFyeUtleVZhbHVlKFxuXHRcdHJlbGF0aW9uTW9kZWxOYW1lLFxuXHRcdHJlbGF0aW9uRW50aXRpZXNcblx0KTtcblx0ZnVsbEVudGl0aWVzID0gY3JlYXRlQW5kS2V5RW50aXRpZXNCeVByaW1hcnlLZXlWYWx1ZShcblx0XHRmYWN0b3J5LFxuXHRcdGZ1bGxFbnRpdGllcyxcblx0KTtcblx0Y29uc3QgZW50aXR5SWRzID0gQXJyYXkuZnJvbSggZnVsbEVudGl0aWVzLmtleXMoKSApO1xuXG5cdC8vIGFyZSB0aGVyZSBhbHJlYWR5IGVudGl0aWVzIGZvciB0aGUgaWRzIGluIHRoZSBzdG9yZT8gSWYgc28uLi53ZSB1c2Vcblx0Ly8gdGhvc2UuXG5cdGNvbnN0IGV4aXN0aW5nRW50aXRpZXMgPSB5aWVsZCBzZWxlY3QoXG5cdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0RW50aXRpZXNCeUlkcycsXG5cdFx0cmVsYXRpb25Nb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWRzXG5cdCk7XG5cblx0aWYgKCAhIGlzRW1wdHkoIGV4aXN0aW5nRW50aXRpZXMgKSApIHtcblx0XHRmdWxsRW50aXRpZXMgPSBrZWVwRXhpc3RpbmdFbnRpdGllc0luT2JqZWN0KFxuXHRcdFx0ZXhpc3RpbmdFbnRpdGllcy5yZWR1Y2UoXG5cdFx0XHRcdCggZW50aXRpZXNPYmplY3QsIGVudGl0eU9iaiApID0+IHtcblx0XHRcdFx0XHRlbnRpdGllc09iamVjdFsgZW50aXR5T2JqLmlkIF0gPSBlbnRpdHk7XG5cdFx0XHRcdFx0cmV0dXJuIGVudGl0aWVzT2JqZWN0O1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7fVxuXHRcdFx0KSxcblx0XHRcdGZ1bGxFbnRpdGllcyxcblx0XHQpO1xuXHR9XG5cblx0Ly8gaWYgZnVsbEVudGl0aWVzIGlzIG5vdCBhIG1hcCwgdGhlbiB3ZSBuZWVkIHRvIG1ha2UgaXQgYSBtYXBcblx0Y29uc3QgZW50aXR5QXJyYXkgPSBmdWxsRW50aXRpZXMgaW5zdGFuY2VvZiBNYXAgP1xuXHRcdEFycmF5LmZyb20oIGZ1bGxFbnRpdGllcy52YWx1ZXMoKSApIDpcblx0XHRmdWxsRW50aXRpZXM7XG5cblx0eWllbGQgcmVjZWl2ZUVudGl0eVJlY29yZHMoXG5cdFx0cmVsYXRpb25Nb2RlbE5hbWUsXG5cdFx0ZW50aXR5QXJyYXlcblx0KTtcblx0eWllbGQgcmVjZWl2ZVJlbGF0ZWRFbnRpdGllcyhcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5LmlkLFxuXHRcdHJlbGF0aW9uTW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkcyxcblx0KTtcblx0eWllbGQgcmVzb2x2ZUdldFJlbGF0ZWRFbnRpdGllcyhcblx0XHRlbnRpdHksXG5cdFx0ZnVsbEVudGl0aWVzLFxuXHRcdGVudGl0eUlkcyxcblx0KTtcblx0eWllbGQgcmVzb2x2ZUdldEVudGl0eUJ5SWRGb3JJZHMoXG5cdFx0cmVsYXRpb25Nb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWRzXG5cdCk7XG5cdHJldHVybiBlbnRpdHlBcnJheTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlciBmb3IgdGhlIGdldFJlbGF0ZWRFbnRpdGllc0ZvcklkcyBzZWxlY3RvclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gZW50aXR5SWRzXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge0FycmF5fSBjYWxjdWxhdGVkRmllbGRzICBUaGlzIHdpbGwgcmV0cmlldmUgYW55IG5hbWVkIGNhbGN1bGF0ZWRcbiAqIGZpZWxkcyBmb3IgdGhlIHJlbGF0ZWQgZW50aXRpZXMuXG4gKlxuICogQHJldHVybiB7QXJyYXl8dW5kZWZpbmVkfSBJZiB0aGVyZSBpcyBubyBzY2hlbWEgZm9yIHRoZSByZWxhdGlvbiwgYW5cbiAqIGVtcHR5IGFycmF5IGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIGdldFJlbGF0ZWRFbnRpdGllc0Zvcklkcyhcblx0bW9kZWxOYW1lLFxuXHRlbnRpdHlJZHMsXG5cdHJlbGF0aW9uTmFtZSxcblx0Y2FsY3VsYXRlZEZpZWxkcyA9IFtdXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IGhhc0pvaW5UYWJsZSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdoYXNKb2luVGFibGVSZWxhdGlvbicsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdHJlbGF0aW9uTmFtZSxcblx0KTtcblx0Y29uc3QgcmVsYXRpb25TY2hlbWEgPSB5aWVsZCByZXNvbHZlU2VsZWN0KFxuXHRcdFNDSEVNQV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0UmVsYXRpb25TY2hlbWEnLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdCk7XG5cdGlmICggcmVsYXRpb25TY2hlbWEgPT09IG51bGwgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfRU1QVFlfQVJSQVk7XG5cdH1cblx0Y29uc3QgcmVsYXRpb25UeXBlID0gcmVsYXRpb25TY2hlbWEucmVsYXRpb25fdHlwZTtcblxuXHRjb25zdCBmYWN0b3J5ID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0J2dldEZhY3RvcnlGb3JNb2RlbCcsXG5cdFx0cmVsYXRpb25OYW1lXG5cdCk7XG5cdGNvbnN0IHJlc3BvbnNlID0geWllbGQgZmV0Y2goIHtcblx0XHRwYXRoOiBnZXRSZWxhdGlvblJlcXVlc3RVcmwoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRlbnRpdHlJZHMsXG5cdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRyZWxhdGlvblNjaGVtYSxcblx0XHRcdHJlbGF0aW9uVHlwZSxcblx0XHRcdGhhc0pvaW5UYWJsZSxcblx0XHRcdGNhbGN1bGF0ZWRGaWVsZHMsXG5cdFx0KSxcblx0fSApO1xuXHRpZiAoICEgcmVzcG9uc2UubGVuZ3RoICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHR9XG5cdGNvbnN0IHJlbGF0aW9uUHJpbWFyeUtleSA9IGdldFByaW1hcnlLZXkoIHJlbGF0aW9uTmFtZSApO1xuXHRjb25zdCBtb2RlbFByaW1hcnlLZXkgPSBnZXRQcmltYXJ5S2V5KCBtb2RlbE5hbWUgKTtcblx0Y29uc3QgcGx1cmFsUmVsYXRpb25OYW1lID0gcGx1cmFsTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0bGV0IGhhc1NldE1hcCA9IEltbXV0YWJsZU1hcCgpO1xuXHRpZiAoIGhhc0pvaW5UYWJsZSApIHtcblx0XHR3aGlsZSAoIHJlc3BvbnNlLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRjb25zdCByZWNvcmQgPSByZXNwb25zZS5wb3AoKTtcblx0XHRcdGxldCByZWxhdGlvblJlY29yZHMgPSByZWNvcmRbIHBsdXJhbFJlbGF0aW9uTmFtZSBdIHx8IG51bGw7XG5cdFx0XHRyZWxhdGlvblJlY29yZHMgPSByZWxhdGlvblJlY29yZHMgPT09IG51bGwgJiZcblx0XHRcdCEgaXNVbmRlZmluZWQoIHJlY29yZFsgcmVsYXRpb25OYW1lIF0gKSA/XG5cdFx0XHRcdHJlY29yZFsgcmVsYXRpb25OYW1lIF0gOlxuXHRcdFx0XHRyZWxhdGlvblJlY29yZHM7XG5cdFx0XHRyZWxhdGlvblJlY29yZHMgPSByZWxhdGlvblJlY29yZHMgIT09IG51bGwgJiZcblx0XHRcdFx0ISBpc0FycmF5KCByZWxhdGlvblJlY29yZHMgKSA/XG5cdFx0XHRcdFsgcmVsYXRpb25SZWNvcmRzIF0gOlxuXHRcdFx0XHRyZWxhdGlvblJlY29yZHM7XG5cdFx0XHRpZiAoIHJlbGF0aW9uUmVjb3JkcyAhPT0gbnVsbCApIHtcblx0XHRcdFx0d2hpbGUgKCByZWxhdGlvblJlY29yZHMubGVuZ3RoID4gMCApIHtcblx0XHRcdFx0XHRjb25zdCBtb2RlbElkID0gcmVjb3JkWyBtb2RlbFByaW1hcnlLZXkgXTtcblx0XHRcdFx0XHRjb25zdCByZWxhdGlvbklkID0gcmVjb3JkWyByZWxhdGlvblByaW1hcnlLZXkgXTtcblx0XHRcdFx0XHRjb25zdCByZWxhdGlvblJlY29yZCA9IHJlbGF0aW9uUmVjb3Jkcy5wb3AoKTtcblx0XHRcdFx0XHRpZiAoIHJlbGF0aW9uUmVjb3JkICE9PSBudWxsICYmXG5cdFx0XHRcdFx0XHQhIGhhc1NldE1hcC5oYXNJbiggWyBtb2RlbElkLCByZWxhdGlvbklkIF0gKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVsYXRpb25FbnRpdHkgPSBmYWN0b3J5LmZyb21FeGlzdGluZyhcblx0XHRcdFx0XHRcdFx0cmVsYXRpb25SZWNvcmQgKTtcblx0XHRcdFx0XHRcdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFx0XHRcdFx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdFx0XHRcdFx0XHQncmVzb2x2ZVJlbGF0aW9uUmVjb3JkRm9yUmVsYXRpb24nLFxuXHRcdFx0XHRcdFx0XHRyZWxhdGlvbkVudGl0eSxcblx0XHRcdFx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRcdFx0XHRtb2RlbElkLFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGhhc1NldE1hcCA9IGhhc1NldE1hcC5zZXRJbihcblx0XHRcdFx0XHRcdFx0WyBtb2RlbElkLCByZWxhdGlvbklkIF0sXG5cdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHdoaWxlICggcmVzcG9uc2UubGVuZ3RoID4gMCApIHtcblx0XHRcdGNvbnN0IHJlY29yZCA9IHJlc3BvbnNlLnBvcCgpO1xuXHRcdFx0Y29uc3QgbW9kZWxJZCA9IGlzQmVsb25nc1RvUmVsYXRpb24oIHJlbGF0aW9uVHlwZSApID9cblx0XHRcdFx0cmVjb3JkWyBtb2RlbFByaW1hcnlLZXkgXSA6XG5cdFx0XHRcdHJlY29yZFsgbW9kZWxOYW1lIF0uaWQ7XG5cdFx0XHRjb25zdCByZWxhdGlvbklkID0gcmVjb3JkWyByZWxhdGlvblByaW1hcnlLZXkgXTtcblx0XHRcdGlmICggISBoYXNTZXRNYXAuaGFzSW4oIFsgbW9kZWxJZCwgcmVsYXRpb25JZCBdICkgKSB7XG5cdFx0XHRcdGNvbnN0IHJlbGF0aW9uRW50aXR5ID0gZmFjdG9yeS5mcm9tRXhpc3RpbmcoXG5cdFx0XHRcdFx0cmVjb3JkWyByZWxhdGlvbk5hbWUgXVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR5aWVsZCBkaXNwYXRjaChcblx0XHRcdFx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdFx0XHRcdCdyZXNvbHZlUmVsYXRpb25SZWNvcmRGb3JSZWxhdGlvbicsXG5cdFx0XHRcdFx0cmVsYXRpb25FbnRpdHksXG5cdFx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRcdG1vZGVsSWQsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGhhc1NldE1hcCA9IGhhc1NldE1hcC5zZXRJbihcblx0XHRcdFx0XHRbIG1vZGVsSWQsIHJlbGF0aW9uSWQgXSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyB0aGUgdXJsIGZvciBhIHJlbGF0aW9uIGVudGl0eSByZXF1ZXN0IHVzaW5nIHRoZSBnaXZlblxuICogYXJndW1lbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtBcnJheX0gZW50aXR5SWRzXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gcmVsYXRpb25TY2hlbWFcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvblR5cGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzSm9pblRhYmxlXG4gKiBAcGFyYW0ge0FycmF5fSBjYWxjdWxhdGVkRmllbGRzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEEgcGF0aCB0byB1c2UgZm9yIGEgcmVsYXRpb24gcmVxdWVzdC5cbiAqL1xuY29uc3QgZ2V0UmVsYXRpb25SZXF1ZXN0VXJsID0gKFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkcyxcblx0cmVsYXRpb25OYW1lLFxuXHRyZWxhdGlvblNjaGVtYSxcblx0cmVsYXRpb25UeXBlLFxuXHRoYXNKb2luVGFibGUsXG5cdGNhbGN1bGF0ZWRGaWVsZHMsXG4pID0+IHtcblx0bGV0IHBhdGg7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRzd2l0Y2ggKCB0cnVlICkge1xuXHRcdGNhc2UgaGFzSm9pblRhYmxlOlxuXHRcdFx0cGF0aCA9IGdldEVuZHBvaW50KFxuXHRcdFx0XHRzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25TY2hlbWEuam9pbmluZ19tb2RlbF9uYW1lIClcblx0XHRcdFx0XHQudG9Mb3dlckNhc2UoKVxuXHRcdFx0KTtcblx0XHRcdHBhdGggKz0gJy8/d2hlcmUnICsgZ2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nKFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGVudGl0eUlkc1xuXHRcdFx0KTtcblx0XHRcdHBhdGggKz0gYCZpbmNsdWRlPSR7IG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nKCByZWxhdGlvbk5hbWUgKSB9LipgO1xuXHRcdFx0cGF0aCA9IGFwcGVuZENhbGN1bGF0ZWRGaWVsZHNUb1BhdGgoXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdGNhbGN1bGF0ZWRGaWVsZHMsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgaXNCZWxvbmdzVG9SZWxhdGlvbiggcmVsYXRpb25UeXBlICk6XG5cdFx0XHRwYXRoID0gZ2V0RW5kcG9pbnQoIG1vZGVsTmFtZSApO1xuXHRcdFx0cGF0aCArPSBgLz93aGVyZSR7IGdldFByaW1hcnlLZXlRdWVyeVN0cmluZyggbW9kZWxOYW1lLCBlbnRpdHlJZHMgKSB9YDtcblx0XHRcdHBhdGggKz0gYCZpbmNsdWRlPSR7IG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nKCByZWxhdGlvbk5hbWUgKSB9LipgO1xuXHRcdFx0cGF0aCA9IGFwcGVuZENhbGN1bGF0ZWRGaWVsZHNUb1BhdGgoXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdGNhbGN1bGF0ZWRGaWVsZHMsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyB3ZSBkbyB0aGUgcmV2ZXJzZSBlbmRwb2ludCBzbyB0aGF0IHdlIGFyZSBnZXR0aW5nIHRoZSBiZWxvbmdzIHRvXG5cdFx0XHQvLyByZWxhdGlvbiByZXNwb25zZXMgYmFjayBhbmQgaW5jbHVkaW5nIHRoZSByZWxhdGlvbiBlbnRpdGllcyB3ZVxuXHRcdFx0Ly8gd2FudCBpbiB0aGUgcmVzcG9uc2UgKGJlbG9uZ3MgdG8pLiAgU28gZm9yIGluc3RhbmNlIGlmIHRoZVxuXHRcdFx0Ly8gaW5jb21pbmcgYXJndW1lbnRzIGFyZTpcblx0XHRcdC8vIGBnZXRSZWxhdGVkRW50aXRpZXNGb3JFbnRpdHlJZHMoXG5cdFx0XHQvLyBcdFx0J2F0dGVuZGVlJyxcblx0XHRcdC8vIFx0XHRbIDEwLCAyMF0sXG5cdFx0XHQvLyBcdFx0J3JlZ2lzdHJhdGlvbidcblx0XHRcdC8vIClcblx0XHRcdC8vIHRoZW4gdGhlIHF1ZXJ5IHdvdWxkIGJlOlxuXHRcdFx0Ly8gL3JlZ2lzdHJhdGlvbnMvP3doZXJlW0FUVF9JRF1bSU5dPTEwLDIwJmluY2x1ZGU9QXR0ZW5kZWUuKlxuXHRcdFx0Ly8gYmFzaWNhbGx5IHRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IG9uZSB0byBvbmUgcmVsYXRpb25zIHJldHVybmVkXG5cdFx0XHQvLyBpbiB0aGUgcXVlcnkgZm9yIGVhc2llciBwYXJzaW5nL2Rpc3BhdGNoaW5nLlxuXHRcdFx0Ly8gQHRvZG8sIGN1cnJlbnRseSB0aGlzIHdpbGwgTk9UIGFjY291bnQgZm9yIHBhZ2luZy5cblx0XHRcdHBhdGggPSBnZXRFbmRwb2ludCggcmVsYXRpb25OYW1lICk7XG5cdFx0XHRwYXRoICs9IGAvP3doZXJlJHsgZ2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nKCBtb2RlbE5hbWUsIGVudGl0eUlkcyApIH1gO1xuXHRcdFx0cGF0aCArPSBgJmluY2x1ZGU9JHsgbW9kZWxOYW1lRm9yUXVlcnlTdHJpbmcoIG1vZGVsTmFtZSApIH0uKmA7XG5cdFx0XHRwYXRoID0gYXBwZW5kQ2FsY3VsYXRlZEZpZWxkc1RvUGF0aChcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0Y2FsY3VsYXRlZEZpZWxkcyxcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gcGF0aDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiByZWxhdGlvblR5cGUgaXMgZXF1YWwgdG8gYEVFX0JlbG9uZ3NfVG9fUmVsYXRpb25gXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uVHlwZVxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgdGhlIGdpdmVuIHJlbGF0aW9uVHlwZSBpcyBgRUVfQmVsb25nc19Ub19SZWxhdGlvbmBcbiAqL1xuY29uc3QgaXNCZWxvbmdzVG9SZWxhdGlvbiA9ICggcmVsYXRpb25UeXBlICkgPT4ge1xuXHRyZXR1cm4gcmVsYXRpb25UeXBlID09PSAnRUVfQmVsb25nc19Ub19SZWxhdGlvbic7XG59O1xuIiwiaW1wb3J0IHtcblx0bW9kZWxOYW1lRm9yUXVlcnlTdHJpbmcsXG5cdHNpbmd1bGFyTW9kZWxOYW1lLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBjYXN0QXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgYWRkUXVlcnlBcmdzIH0gZnJvbSAnQHdvcmRwcmVzcy91cmwnO1xuXG4vKipcbiAqIEFwcGVuZHMgcHJvdmlkZWQgY2FsY3VsYXRlZCBmaWVsZHMgdG8gdGhlIHByb3ZpZGVkIHBhdGggaWYgbm90IGVtcHR5LlxuICpcbiAqIEFsc28sIGlmIG1vZGVsTmFtZSBpcyBwYXNzZWQgaW4gdW5kZWZpbmVkLCB0aGVuIGFueSBmaWVsZHMgYXJlIGFwcGVuZGVkXG4gKiB3aXRob3V0IG1vZGlmaWNhdGlvbi4gIE90aGVyd2lzZSB0aGV5IHdpbGwgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbW9kZWxOYW1lIGFzXG4gKiBhIHBhcnQgb2YgdGhlIHF1ZXJ5IHRvIGluZGljYXRlIHdoYXQgbW9kZWwgdGhlIGNhbGN1bGF0ZWQgZmllbGRzIGFwcGx5IHRvLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGNhbGN1bGF0ZWRGaWVsZHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHBhdGggd2l0aCBjYWxjdWxhdGVkIGZpZWxkcyBhcHBlbmRlZCBpZiBwcmVzZW50LlxuICovXG5leHBvcnQgY29uc3QgYXBwZW5kQ2FsY3VsYXRlZEZpZWxkc1RvUGF0aCA9IChcblx0cGF0aCxcblx0Y2FsY3VsYXRlZEZpZWxkcyxcblx0bW9kZWxOYW1lXG4pID0+IHtcblx0Y2FsY3VsYXRlZEZpZWxkcyA9IGNhc3RBcnJheSggY2FsY3VsYXRlZEZpZWxkcyApO1xuXHRpZiAoIGNhbGN1bGF0ZWRGaWVsZHMubGVuZ3RoID4gMCApIHtcblx0XHQvLyBzZXR1cCBmaWVsZHMgc3RyaW5nXG5cdFx0Y29uc3QgbmFtZUZvclF1ZXJ5U3RyaW5nID0gbW9kZWxOYW1lICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0bW9kZWxOYW1lRm9yUXVlcnlTdHJpbmcoXG5cdFx0XHRcdHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKVxuXHRcdFx0KSA6XG5cdFx0XHQnJztcblx0XHRjb25zdCBxdWVyeVN0cmluZ3MgPSBuYW1lRm9yUXVlcnlTdHJpbmcgP1xuXHRcdFx0Y2FsY3VsYXRlZEZpZWxkcy5tYXAoXG5cdFx0XHRcdCggZmllbGQgKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGAkeyBuYW1lRm9yUXVlcnlTdHJpbmcgfS4keyBmaWVsZCB9YDtcblx0XHRcdFx0fSxcblx0XHRcdCkgOlxuXHRcdFx0Y2FsY3VsYXRlZEZpZWxkcztcblx0XHRwYXRoID0gYWRkUXVlcnlBcmdzKCBwYXRoLCB7IGNhbGN1bGF0ZTogcXVlcnlTdHJpbmdzLmpvaW4oKSB9ICk7XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBjcmVhdGVTZWxlY3RvciBmcm9tICdyZW1lbW8nO1xuaW1wb3J0IHsgbm9ybWFsaXplRW50aXR5SWQgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIFJldHVybnMgYWxsIGVudGl0eSByZWNvcmRzIGZvciB0aGUgZ2l2ZW4gbW9kZWxOYW1lIGluIHRoZSBjdXJyZW50IHN0YXRlLlxuICogQW4gZW50aXR5IHJlY29yZCBpcyB0aGUgTWFwIG9mIGVudGl0aWVzIChlbnRpdHlJZCA9PiBlbnRpdHkpLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtPYmplY3Q8bnVtYmVyfHN0cmluZywgQmFzZUVudGl0eT59fG51bGx9IEEgY29sbGVjdGlvbiBvZiBlbnRpdHlcbiAqIHJlY29yZHMgZm9yIHRoZSBnaXZlbiBtb2RlbCBpbmRleGVkIGJ5IHByaW1hcnkga2V5IHZhbHVlIG9yIG51bGwgaWYgbm9uZVxuICogaGF2ZSBiZWVuIHNldCBpbiB0aGUgc3RhdGUuXG4gKi9cbmNvbnN0IGdldEVudGl0eVJlY29yZHNGb3JNb2RlbCA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdHJldHVybiBzdGF0ZS5lbnRpdGllcy5oYXMoIG1vZGVsTmFtZSApID9cblx0XHRcdHN0YXRlLmVudGl0aWVzLmdldCggbW9kZWxOYW1lICkudG9KUygpIDpcblx0XHRcdG51bGw7XG5cdH0sXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IFsgc3RhdGUuZW50aXRpZXMuZ2V0KCBtb2RlbE5hbWUgKSBdXG4pO1xuXG4vKipcbiAqIFJldHVybnMgYWxsIGVudGl0aWVzIGZvciB0aGUgZ2l2ZW4gbW9kZWwuXG4gKiBUaGlzIGRpZmZlcnMgZnJvbSBlbnRpdHlSZWNvcmRzLCBpbiB0aGF0IHRoZSBlbnRpdGllcyBhcmUgTk9UIGluZGV4ZWQgYnlcbiAqIHByaW1hcnkga2V5IHZhbHVlIGFuZCBhbiBBcnJheSBvZiBlbnRpdGllcyBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge0FycmF5PEJhc2VFbnRpdHk+fG51bGx9IEFuIGFycmF5IG9mIGVudGl0aWVzIGZvciB0aGUgZ2l2ZW4gbW9kZWwgb3JcbiAqIG51bGwgaWYgbm9uZSBoYXZlIGJlZW4gc2V0IGluIHRoZSBzdGF0ZS5cbiAqL1xuY29uc3QgZ2V0RW50aXRpZXNGb3JNb2RlbCA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdHJldHVybiBzdGF0ZS5lbnRpdGllcy5oYXMoIG1vZGVsTmFtZSApID9cblx0XHRcdHN0YXRlLmVudGl0aWVzLmdldCggbW9kZWxOYW1lICkudmFsdWVTZXEoKS50b0FycmF5KCkgOlxuXHRcdFx0W107XG5cdH0sXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IFsgc3RhdGUuZW50aXRpZXMuZ2V0KCBtb2RlbE5hbWUgKSBdLFxuKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtb2RlbCBlbnRpdHkgZm9yIHRoZSBnaXZlbiBtb2RlbCBhbmQgaWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGVudGl0eUlkXG4gKiBAcmV0dXJuIHtCYXNlRW50aXR5fG51bGx9IFJldHVybnMgdGhlIG1vZGVsIGVudGl0eSBvciBudWxsLlxuICovXG5mdW5jdGlvbiBnZXRFbnRpdHlCeUlkKCBzdGF0ZSwgbW9kZWxOYW1lLCBlbnRpdHlJZCApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZXR1cm4gc3RhdGUuZW50aXRpZXMuZ2V0SW4oIFtcblx0XHRtb2RlbE5hbWUsXG5cdFx0bm9ybWFsaXplRW50aXR5SWQoIGVudGl0eUlkICksXG5cdF0gKSB8fCBudWxsO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBtb2RlbCBlbnRpdGllcyBmb3IgdGhlIHByb3ZpZGVkIGFycmF5IG9mIGlkcyBhbmQgbW9kZWwuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZ3xudW1iZXI+fSBlbnRpdHlJZHNcbiAqIEByZXR1cm4ge0FycmF5PEJhc2VFbnRpdHk+fG51bGx9IFJldHVybnMgYW4gYXJyYXkgb2YgbW9kZWwgZW50aXRpZXMgZm9yIHRoZVxuICogcHJvdmlkZWQgaWRzIG9yIG51bGwgaWYgbmV2ZXIgYmVlbiBzZXQuXG4gKi9cbmNvbnN0IGdldEVudGl0aWVzQnlJZHMgPSAoIHN0YXRlLCBtb2RlbE5hbWUsIGVudGl0eUlkcyApID0+IHtcblx0cmV0dXJuIHJldHJpZXZlRW50aXRpZXNCeUlkcyggc3RhdGUsIG1vZGVsTmFtZSwgZW50aXR5SWRzLmpvaW4oKSApO1xufTtcblxuZ2V0RW50aXRpZXNCeUlkcy5jbGVhciA9ICgpID0+IHJldHJpZXZlRW50aXRpZXNCeUlkcy5jbGVhcigpO1xuZ2V0RW50aXRpZXNCeUlkcy5nZXREZXBlbmRhbnRzID0gKCBzdGF0ZSwgbW9kZWxOYW1lICkgPT4gcmV0cmlldmVFbnRpdGllc0J5SWRzXG5cdC5nZXREZXBlbmRhbnRzKCBzdGF0ZSwgbW9kZWxOYW1lICk7XG5cbi8qKlxuICogUmV0cmlldmVzIGFuIGFycmF5IG9mIG1vZGVsIGVudGl0aWVzIGZvciB0aGUgcHJvdmlkZWQgYXJyYXkgb2YgaWRzIGFuZCBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbnRpdHlJZHMgIEEgY29tbWEgZGVsaW1pdGVkIHN0cmluZyBvZiBpZHMuICBUaGlzIGlzIHNvXG4gKiB3ZSBhcmUgcGFzc2luZyBhIHByaW1pdGl2ZSBhcmcgdG8gcmVtZW1vIGZvciBiZXR0ZXIgY2FjaGUgdmFsaWRhdGlvbi5cbiAqIEByZXR1cm4ge0FycmF5PEJhc2VFbnRpdHk+fG51bGx9IFJldHVybnMgYW4gYXJyYXkgb2YgbW9kZWwgZW50aXRpZXMgZm9yIHRoZVxuICogcHJvdmlkZWQgaWRzIG9yIG51bGwgaWYgbmV2ZXIgYmVlbiBzZXQuXG4gKi9cbmNvbnN0IHJldHJpZXZlRW50aXRpZXNCeUlkcyA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUsIGVudGl0eUlkcyApID0+IHtcblx0XHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdFx0ZW50aXR5SWRzID0gZW50aXR5SWRzLnNwbGl0KCAnLCcgKTtcblx0XHRjb25zdCBlbnRpdGllcyA9IFtdO1xuXHRcdGlmICggc3RhdGUuZW50aXRpZXMuaGFzKCBtb2RlbE5hbWUgKSApIHtcblx0XHRcdGVudGl0eUlkcy5mb3JFYWNoKCAoIGVudGl0eUlkICkgPT4ge1xuXHRcdFx0XHRjb25zdCBlbnRpdHkgPSBnZXRFbnRpdHlCeUlkKCBzdGF0ZSwgbW9kZWxOYW1lLCBlbnRpdHlJZCApO1xuXHRcdFx0XHRpZiAoIGVudGl0eSAhPT0gbnVsbCApIHtcblx0XHRcdFx0XHRlbnRpdGllcy5wdXNoKCBlbnRpdHkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZW50aXRpZXM7XG5cdH0sXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IFsgc3RhdGUuZW50aXRpZXMuZ2V0KCBtb2RlbE5hbWUgKSBdXG4pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBlbnRpdHkgaWRzIHF1ZXVlZCBmb3IgdHJhc2ggZm9yIHRoZSBnaXZlbiBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge0FycmF5PG51bWJlcj59IEFuIGFycmF5IG9mIGVudGl0eSBpZHMuXG4gKi9cbmNvbnN0IGdldEVudGl0eUlkc1F1ZXVlZEZvclRyYXNoID0gY3JlYXRlU2VsZWN0b3IoXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IHtcblx0XHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdFx0cmV0dXJuIHN0YXRlLmRpcnR5LnRyYXNoLmhhcyggbW9kZWxOYW1lICkgP1xuXHRcdFx0c3RhdGUuZGlydHkudHJhc2guZ2V0KCBtb2RlbE5hbWUgKS50b0FycmF5KCkgOlxuXHRcdFx0W107XG5cdH0sXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IFsgc3RhdGUuZGlydHkudHJhc2guZ2V0KCBtb2RlbE5hbWUgKSBdXG4pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBlbnRpdHkgaWRzIHF1ZXVlZCBmb3IgZGVsZXRlIGZvciB0aGUgZ2l2ZW4gbW9kZWwuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtBcnJheTxudW1iZXJ8c3RyaW5nPn0gQW4gYXJyYXkgb2YgZW50aXR5IGlkcy5cbiAqL1xuY29uc3QgZ2V0RW50aXR5SWRzUXVldWVkRm9yRGVsZXRlID0gY3JlYXRlU2VsZWN0b3IoXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IHtcblx0XHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdFx0cmV0dXJuIHN0YXRlLmRpcnR5LmRlbGV0ZS5oYXMoIG1vZGVsTmFtZSApID9cblx0XHRcdHN0YXRlLmRpcnR5LmRlbGV0ZS5nZXQoIG1vZGVsTmFtZSApLnRvQXJyYXkoKSA6XG5cdFx0XHRbXTtcblx0fSxcblx0KCBzdGF0ZSwgbW9kZWxOYW1lICkgPT4gWyBzdGF0ZS5kaXJ0eS5kZWxldGUuZ2V0KCBtb2RlbE5hbWUgKSBdXG4pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgdGhlIG1vZGVscyBjdXJyZW50bHkgaGF2aW5nIGlkcyBxdWV1ZWQgZm9yIHRyYXNoXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcmV0dXJuIHtBcnJheTxzdHJpbmc+fSBBbiBhcnJheSBvZiBtb2RlbCBuYW1lcy5cbiAqL1xuY29uc3QgZ2V0TW9kZWxzUXVldWVkRm9yVHJhc2ggPSBjcmVhdGVTZWxlY3Rvcihcblx0KCBzdGF0ZSApID0+IHtcblx0XHRyZXR1cm4gc3RhdGUuZGlydHkudHJhc2gua2V5U2VxKCkudG9BcnJheSgpO1xuXHR9LFxuXHQoIHN0YXRlICkgPT4gWyBzdGF0ZS5kaXJ0eS50cmFzaCBdXG4pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgdGhlIG1vZGVscyBjdXJyZW50bHkgaGF2aW5nIGlkcyBxdWV1ZWQgZm9yIGRlbGV0ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEByZXR1cm4ge0FycmF5PHN0cmluZz59IEFuIGFycmF5IG9mIG1vZGVsIG5hbWVzLlxuICovXG5jb25zdCBnZXRNb2RlbHNRdWV1ZWRGb3JEZWxldGUgPSBjcmVhdGVTZWxlY3Rvcihcblx0KCBzdGF0ZSApID0+IHtcblx0XHRyZXR1cm4gc3RhdGUuZGlydHkuZGVsZXRlLmtleVNlcSgpLnRvQXJyYXkoKTtcblx0fSxcblx0KCBzdGF0ZSApID0+IFsgc3RhdGUuZGlydHkuZGVsZXRlIF1cbik7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3RhdGUuZW50aXRpZXMgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKlxuICogQHJldHVybiB7TWFwfSBUaGUgZW50aXRpZXMgc3RhdGUgaW1tdXRhYmxlIG1hcC5cbiAqL1xuY29uc3QgZ2V0QWxsRW50aXRpZXNJblN0YXRlID0gKCBzdGF0ZSApID0+IHN0YXRlLmVudGl0aWVzO1xuXG5leHBvcnQge1xuXHRnZXRFbnRpdHlSZWNvcmRzRm9yTW9kZWwsXG5cdGdldEVudGl0aWVzRm9yTW9kZWwsXG5cdGdldEVudGl0eUJ5SWQsXG5cdGdldEVudGl0aWVzQnlJZHMsXG5cdGdldEVudGl0eUlkc1F1ZXVlZEZvclRyYXNoLFxuXHRnZXRFbnRpdHlJZHNRdWV1ZWRGb3JEZWxldGUsXG5cdGdldE1vZGVsc1F1ZXVlZEZvckRlbGV0ZSxcblx0Z2V0TW9kZWxzUXVldWVkRm9yVHJhc2gsXG5cdGdldEFsbEVudGl0aWVzSW5TdGF0ZSxcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL2VudGl0aWVzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVsYXRpb25zJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc01vZGVsRW50aXR5IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBJbnZhbGlkTW9kZWxFbnRpdHkgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IGNyZWF0ZVNlbGVjdG9yIGZyb20gJ3JlbWVtbyc7XG5pbXBvcnQgeyBub3JtYWxpemVFbnRpdHlJZCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuaW1wb3J0IHsgTWFwLCBTZXQgfSBmcm9tICdpbW11dGFibGUnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0RW50aXRpZXNCeUlkcyxcblx0Z2V0RW50aXR5QnlJZCxcbn0gZnJvbSAnLi9lbnRpdGllcyc7XG5cbmNvbnN0IERFRkFVTFRfRU1QVFlfU0VUID0gU2V0KCk7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSByZWxhdGlvbiBpZHMgZm9yIHRoZSBnaXZlbiBlbnRpdHkgYW5kIHJlbGF0aW9uIG5hbWUgZnJvbSB0aGVcbiAqIHN0YXRlIGFuZCBjb25zaWRlcnMgaG93IHRoZSByZWxhdGlvbiBtaWdodCBiZSBzYXZlZCBpbiB0aGUgc3RhdGUgKGVpdGhlciBhc1xuICogcmVsYXRpb24gbWFwcGVkIHRvIG1vZGVsIChpbmRleCkgb3IgbW9kZWwgbWFwcGVkIHRvIHJlbGF0aW9uIChlbnRpdHlNYXApXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHJldHVybiB7QXJyYXl9IEFuIGVtcHR5IGFycmF5IGlmIHRoZXJlIGFyZSBubyBpZHMgZm9yIHRoZSBnaXZlbiByZWxhdGlvbi5cbiAqL1xuY29uc3QgZ2V0UmVsYXRpb25JZHNGb3JFbnRpdHlSZWxhdGlvbiA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBlbnRpdHksIHJlbGF0aW9uTmFtZSApID0+IHtcblx0XHRpZiAoICEgaXNNb2RlbEVudGl0eSggZW50aXR5ICkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgSW52YWxpZE1vZGVsRW50aXR5KCAnJywgZW50aXR5ICk7XG5cdFx0fVxuXHRcdGNvbnN0IG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBlbnRpdHkubW9kZWxOYW1lICk7XG5cdFx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRcdGlmICggc3RhdGUucmVsYXRpb25zLmhhc0luKCBbIG1vZGVsTmFtZSwgZW50aXR5LmlkLCByZWxhdGlvbk5hbWUgXSApICkge1xuXHRcdFx0cmV0dXJuICggc3RhdGUucmVsYXRpb25zLmdldEluKFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0XHRcdGVudGl0eS5pZCxcblx0XHRcdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRcdF0sXG5cdFx0XHQpIHx8IFNldCgpICkudG9BcnJheSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH0sXG5cdCggc3RhdGUsIGVudGl0eSwgcmVsYXRpb25OYW1lICkgPT4ge1xuXHRcdGlmICggISBpc01vZGVsRW50aXR5KCBlbnRpdHkgKSApIHtcblx0XHRcdHJldHVybiBbIERFRkFVTFRfRU1QVFlfU0VUIF07XG5cdFx0fVxuXHRcdGNvbnN0IG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBlbnRpdHkubW9kZWxOYW1lICksXG5cdFx0XHRpZCA9IGVudGl0eS5pZDtcblx0XHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHN0YXRlLnJlbGF0aW9ucy5nZXRJbiggW1xuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGlkLFxuXHRcdFx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0XHRdICksXG5cdFx0XTtcblx0fVxuKTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCB0aGUgcmVsYXRpb24gZW50aXRpZXMgZm9yIHRoZSByZWxhdGlvbiBvbiBtb2RlbCBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtBcnJheTxCYXNlRW50aXR5Pn0gQW4gYXJyYXkgb2YgZW50aXRpZXMgZm9yIHRoZSByZWxhdGlvbi5cbiAqL1xuY29uc3QgZ2V0UmVsYXRlZEVudGl0aWVzID0gY3JlYXRlU2VsZWN0b3IoXG5cdCggc3RhdGUsIGVudGl0eSwgcmVsYXRpb25Nb2RlbE5hbWUgKSA9PiB7XG5cdFx0aWYgKCAhIGlzTW9kZWxFbnRpdHkoIGVudGl0eSApICkge1xuXHRcdFx0dGhyb3cgbmV3IEludmFsaWRNb2RlbEVudGl0eSggJycsIGVudGl0eSApO1xuXHRcdH1cblx0XHRyZWxhdGlvbk1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk1vZGVsTmFtZSApO1xuXHRcdHJldHVybiBnZXRFbnRpdGllc0J5SWRzKFxuXHRcdFx0c3RhdGUsXG5cdFx0XHRyZWxhdGlvbk1vZGVsTmFtZSxcblx0XHRcdGdldFJlbGF0aW9uSWRzRm9yRW50aXR5UmVsYXRpb24oXG5cdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRlbnRpdHksXG5cdFx0XHRcdHJlbGF0aW9uTW9kZWxOYW1lXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblx0KCBzdGF0ZSwgZW50aXR5LCByZWxhdGlvbk5hbWUgKSA9PiBbXG5cdFx0Li4uZ2V0RW50aXRpZXNCeUlkcy5nZXREZXBlbmRhbnRzKFxuXHRcdFx0c3RhdGUsXG5cdFx0XHRzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lIClcblx0XHQpLFxuXHRcdC4uLmdldFJlbGF0aW9uSWRzRm9yRW50aXR5UmVsYXRpb24uZ2V0RGVwZW5kYW50cyhcblx0XHRcdHN0YXRlLFxuXHRcdFx0ZW50aXR5LFxuXHRcdFx0c2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApXG5cdFx0KSxcblx0XVxuKTtcblxuLyoqXG4gKiBFZmZpY2llbnQgc2VsZWN0b3IgZm9yIGdldHRpbmcgYWxsIHRoZSByZWxhdGVkIGVudGl0aWVzIGZvciB0aGUgZ2l2ZW4gbW9kZWwsXG4gKiBpdCdzIGVudGl0eSBpZHMsIGFuZCB0aGUgcmVsYXRpb24gbmFtZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBgZ2V0UmVsYXRpb25zYCBzZWxlY3RvciB3aGljaCBnZXRzIHRoZSByZWxhdGlvbnMgZm9yIGFcbiAqIHNpbmdsZSBlbnRpdHkuICBUaGlzIGFsbG93cyB5b3UgdG8gZ2V0IGFsbCB0aGUgcmVsYXRpb25zIGZvciBhIGdpdmVuIHNldCBvZlxuICogZW50aXR5IGlkcyAoaS5lLiBHZXQgYWxsIGRhdGV0aW1lcyByZWxhdGVkIHRvIHRoZSBldmVudCBpZHM6IDEwLCAyMCwgYW5kIDMwKS5cbiAqXG4gKiBUaGlzIHNlbGVjdG9yIGlzIHdpcmVkIHVwIHRvIGEgcmVzb2x2ZXIgdGhhdCBkb2VzIGFuIGVmZmljaWVudCByZXF1ZXN0IHRvXG4gKiByZXRyaWV2ZSBhbGwgdGhvc2UgZW50aXRpZXMgYW5kIHRoZW4gZGlzcGF0Y2ggdGhlIGFwcHJvcHJpYXRlIGFjdGlvbnMgc29cbiAqIHRoZSByZWxhdGlvbiBzdGF0ZSBpcyBjb3JyZWN0bHkgcmVjb3JkZWQgZm9yIGVhY2ggcmVsYXRpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGVudGl0eUlkc1xuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHJldHVybiB7QXJyYXk8QmFzZUVudGl0eT59IEFuIGFycmF5IG9mIEJhc2VFbnRpdHkgaW5zdGFuY2VzIGZvciB0aGVcbiAqIHJlbGF0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFJlbGF0ZWRFbnRpdGllc0ZvcklkcyA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUsIGVudGl0eUlkcywgcmVsYXRpb25OYW1lICkgPT4ge1xuXHRcdGxldCByZWxhdGlvbkVudGl0aWVzID0gU2V0KCk7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0XHRlbnRpdHlJZHMuZm9yRWFjaCggKCBlbnRpdHlJZCApID0+IHtcblx0XHRcdGNvbnN0IGVudGl0eSA9IGdldEVudGl0eUJ5SWQoXG5cdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRcdGVudGl0eUlkXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgcmVsYXRlZEVudGl0aWVzID0gZ2V0UmVsYXRlZEVudGl0aWVzKFxuXHRcdFx0XHRzdGF0ZSxcblx0XHRcdFx0ZW50aXR5LFxuXHRcdFx0XHRyZWxhdGlvbk5hbWVcblx0XHRcdCk7XG5cdFx0XHRyZWxhdGlvbkVudGl0aWVzID0gcmVsYXRpb25FbnRpdGllcy5tZXJnZSggcmVsYXRlZEVudGl0aWVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiByZWxhdGlvbkVudGl0aWVzLnRvSlMoKTtcblx0fSxcblx0KCBzdGF0ZSwgbW9kZWxOYW1lLCBlbnRpdHlJZHMsIHJlbGF0aW9uTmFtZSApID0+IFtcblx0XHQuLi5nZXRFbnRpdGllc0J5SWRzLmdldERlcGVuZGFudHMoXG5cdFx0XHRzdGF0ZSxcblx0XHRcdHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKSxcblx0XHQpLFxuXHRcdC4uLmdldEVudGl0aWVzQnlJZHMuZ2V0RGVwZW5kYW50cyhcblx0XHRcdHN0YXRlLFxuXHRcdFx0c2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApXG5cdFx0KSxcblx0XVxuKTtcblxuLyoqXG4gKiBMb29rcyB1cCB0aGUgcmVsYXRpb25zIHF1ZXVlZCBmb3IgYSBnaXZlbiBtb2RlbCBmaXJzdCBmcm9tIHRoZSBhY3R1YWwgcmVsYXRpb25cbiAqIHR5cGUgaW4gdGhlIHN0YXRlLCBhbmQgdGhlbiBhIHJldmVyc2UgbG9va3VwIGluIHRoZSBpbmRleCBpZiBub3QgdGhlcmUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAnYWRkJyBvciAnZGVsZXRlJ1xuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCBrZXllZCBieSBlbnRpdHkgaWRzIGZvciB0aGUgZ2l2ZW4gbW9kZWwuXG4gKiBUaGUgdmFsdWVzIG9uIGZvciBlYWNoIGVudGl0eSBpZCBpcyBhbiBvYmplY3Qga2V5ZWQgYnkgcmVsYXRpb24gbmFtZXMgYW5kXG4gKiB3aXRoIHZhbHVlcyBiZWluZyBhbiBhcnJheSBvZiBpZHMgZm9yIHJlbGF0aW9uLiBFeGFtcGxlOlxuICoge1xuICogICAxMDoge1xuICogICAgIGRhdGV0aW1lczogWyAyMiwgMjMgXSxcbiAqICAgICBtZXNzYWdlX3RlbXBsYXRlX2dyb3VwczogWyAyLCA0IF0sXG4gKiAgIH0sXG4gKiAgIDIwOiB7XG4gKiAgICAgZGF0ZXRpbWVzOiBbIDI0LCAyNSBdLFxuICogICB9LFxuICogfVxuICovXG5jb25zdCBsb29rdXBSZWxhdGlvbnNRdWV1ZWRGb3JNb2RlbCA9ICggc3RhdGUsIG1vZGVsTmFtZSwgdHlwZSA9ICdhZGQnICkgPT4ge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdGxldCByZWxhdGlvbnNRdWV1ZWQgPSBNYXAoKTtcblx0aWYgKCBzdGF0ZS5kaXJ0eS5yZWxhdGlvbnMuaGFzSW4oIFsgdHlwZSwgbW9kZWxOYW1lIF0gKSApIHtcblx0XHRyZWxhdGlvbnNRdWV1ZWQgPSByZWxhdGlvbnNRdWV1ZWQubWVyZ2VEZWVwKFxuXHRcdFx0c3RhdGUuZGlydHkucmVsYXRpb25zLmdldEluKCBbIHR5cGUsIG1vZGVsTmFtZSBdIClcblx0XHQpO1xuXHR9XG5cdGlmICggc3RhdGUuZGlydHkucmVsYXRpb25zLmhhc0luKCBbICdpbmRleCcsIG1vZGVsTmFtZSBdICkgKSB7XG5cdFx0bGV0IHJlbGF0aW9ucyA9IE1hcCgpO1xuXHRcdHN0YXRlLmRpcnR5LnJlbGF0aW9ucy5nZXRJbiggWyAnaW5kZXgnLCBtb2RlbE5hbWUgXSApLmZvckVhY2goXG5cdFx0XHQoIHJlbGF0aW9uTWFwLCBlbnRpdHlJZCApID0+IHtcblx0XHRcdFx0cmVsYXRpb25NYXAuZm9yRWFjaCggKCByZWxhdGlvblJlY29yZCwgbW9kZWwgKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCByZWxhdGlvblJlY29yZC5oYXMoIHR5cGUgKSApIHtcblx0XHRcdFx0XHRcdHJlbGF0aW9ucyA9IHJlbGF0aW9ucy5zZXRJbihcblx0XHRcdFx0XHRcdFx0WyBlbnRpdHlJZCwgc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsICkgXSxcblx0XHRcdFx0XHRcdFx0cmVsYXRpb25SZWNvcmQuZ2V0KCB0eXBlIClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0KTtcblx0XHRyZWxhdGlvbnNRdWV1ZWQgPSByZWxhdGlvbnNRdWV1ZWQubWVyZ2VEZWVwKCByZWxhdGlvbnMgKTtcblx0fVxuXHRyZXR1cm4gcmVsYXRpb25zUXVldWVkLnRvSlMoKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCB0aGUgcXVldWVkIHJlbGF0aW9uIGFkZGl0aW9ucyBmb3IgdGhlIGdpdmVuIG1vZGVsXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IGtleWVkIGJ5IGVudGl0eSBpZHMgZm9yIHRoZSBnaXZlbiBtb2RlbC5cbiAqIFRoZSB2YWx1ZXMgb24gZm9yIGVhY2ggZW50aXR5IGlkIGlzIGFuIG9iamVjdCBrZXllZCBieSByZWxhdGlvbiBuYW1lcyBhbmRcbiAqIHdpdGggdmFsdWVzIGJlaW5nIGFuIGFycmF5IG9mIGlkcyBmb3IgcmVsYXRpb24uIEV4YW1wbGU6XG4gKiB7XG4gKiAgIDEwOiB7XG4gKiAgICAgZGF0ZXRpbWVzOiBbIDIyLCAyMyBdLFxuICogICAgIG1lc3NhZ2VfdGVtcGxhdGVfZ3JvdXBzOiBbIDIsIDQgXSxcbiAqICAgfSxcbiAqICAgMjA6IHtcbiAqICAgICBkYXRldGltZXM6IFsgMjQsIDI1IF0sXG4gKiAgIH0sXG4gKiB9XG4gKlxuICovXG5jb25zdCBnZXRSZWxhdGlvbkFkZGl0aW9uc1F1ZXVlZEZvck1vZGVsID0gY3JlYXRlU2VsZWN0b3IoXG5cdCggc3RhdGUsIG1vZGVsTmFtZSApID0+IHtcblx0XHRyZXR1cm4gbG9va3VwUmVsYXRpb25zUXVldWVkRm9yTW9kZWwoIHN0YXRlLCBtb2RlbE5hbWUgKTtcblx0fSxcblx0KCBzdGF0ZSwgbW9kZWxOYW1lICkgPT4gW1xuXHRcdHN0YXRlLmRpcnR5LnJlbGF0aW9ucy5nZXRJbiggWyAnYWRkJywgc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApIF0gKSxcblx0XHRzdGF0ZS5kaXJ0eS5yZWxhdGlvbnMuZ2V0SW4oIFsgJ2luZGV4Jywgc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApIF0gKSxcblx0XVxuKTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYWxsIHRoZSBxdWV1ZWQgcmVsYXRpb24gZGVsZXRpb25zIGZvciB0aGUgZ2l2ZW4gbW9kZWxcbiAqIFNpbWlsYXIgdG8gYGdldFJlbGF0aW9uQWRkaXRpb25zUXVldWVkRm9yTW9kZWxgIGV4Y2VwdCB0aGlzIGlzIHJlbGF0aW9uc1xuICogcXVldWVkIGZvciBkZWxldGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qga2V5ZWQgYnkgZW50aXR5IGlkcyBmb3IgdGhlIGdpdmVuIG1vZGVsLlxuICogVGhlIHZhbHVlcyBvbiBmb3IgZWFjaCBlbnRpdHkgaWQgaXMgYW4gb2JqZWN0IGtleWVkIGJ5IHJlbGF0aW9uIG5hbWVzIGFuZFxuICogd2l0aCB2YWx1ZXMgYmVpbmcgYW4gYXJyYXkgb2YgaWRzIGZvciByZWxhdGlvbi5cbiAqL1xuY29uc3QgZ2V0UmVsYXRpb25EZWxldGlvbnNRdWV1ZWRGb3JNb2RlbCA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0cmV0dXJuIGxvb2t1cFJlbGF0aW9uc1F1ZXVlZEZvck1vZGVsKCBzdGF0ZSwgbW9kZWxOYW1lLCAnZGVsZXRlJyApO1xuXHR9LFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUgKSA9PiBbXG5cdFx0c3RhdGUuZGlydHkucmVsYXRpb25zLmdldEluKFxuXHRcdFx0WyAnZGVsZXRlJywgc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApIF1cblx0XHQpLFxuXHRcdHN0YXRlLmRpcnR5LnJlbGF0aW9ucy5nZXRJbiggWyAnaW5kZXgnLCBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICkgXSApLFxuXHRdXG4pO1xuXG4vKipcbiAqIFJldHVybnMgYSBjb3VudCBvZiBhbGwgdGhlIHJlbGF0aW9uIG1vZGVscyAobm90IGNvdW50IG9mIGVudGl0aWVzKSB0aGF0IGV4aXN0XG4gKiBpbiB0aGUgc3RhdGUgYmVpbmcgcmVsYXRlZCB0byB0aGUgZ2l2ZW4gbW9kZWwgYW5kIGVudGl0eUlkLlxuICpcbiAqIE5vdGU6IFRoaXMgb25seSBxdWVyaWVzIHRoZSBzdGF0ZSwgbm90IGFueSByZWxhdGlvbnMgdGhhdCBtaWdodCBleGlzdCBpbiB0aGVcbiAqIGRiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBlbnRpdHlJZFxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgY291bnQgb2YgcmVsYXRpb25zLlxuICovXG5jb25zdCBjb3VudFJlbGF0aW9uTW9kZWxzSW5kZXhlZEZvckVudGl0eSA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoXG5cdFx0c3RhdGUsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkXG5cdCkgPT4ge1xuXHRcdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0XHRlbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCBlbnRpdHlJZCApO1xuXHRcdC8vIHdlIGNhbiBqdXN0IGdldCB0aGlzIGZyb20gdGhlIGNvbnRleHQgb2YgdGhlIG1vZGVsXG5cdFx0cmV0dXJuIChcblx0XHRcdHN0YXRlLnJlbGF0aW9uc1xuXHRcdFx0XHQuZ2V0SW4oIFsgbW9kZWxOYW1lLCBlbnRpdHlJZCBdICkgfHwgTWFwKClcblx0XHQpLmNvdW50KCk7XG5cdH0sXG5cdCggc3RhdGUsIG1vZGVsTmFtZSwgZW50aXR5SWQgKSA9PiB7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdGVudGl0eUlkID0gbm9ybWFsaXplRW50aXR5SWQoIGVudGl0eUlkICk7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHN0YXRlLnJlbGF0aW9ucy5nZXRJbiggWyBtb2RlbE5hbWUsIGVudGl0eUlkIF0gKSxcblx0XHRdO1xuXHR9XG4pO1xuXG4vKipcbiAqIFJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIHN0YXRlLnJlbGF0aW9ucyBtYXAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKlxuICogQHJldHVybiB7TWFwfSBUaGUgc3RhdGUucmVsYXRpb25zIG1hcC5cbiAqL1xuY29uc3QgZ2V0QWxsUmVsYXRpb25zSW5TdGF0ZSA9ICggc3RhdGUgKSA9PiBzdGF0ZS5yZWxhdGlvbnM7XG5cbmV4cG9ydCB7XG5cdGdldFJlbGF0ZWRFbnRpdGllcyxcblx0Z2V0UmVsYXRpb25JZHNGb3JFbnRpdHlSZWxhdGlvbixcblx0Z2V0UmVsYXRpb25BZGRpdGlvbnNRdWV1ZWRGb3JNb2RlbCxcblx0Z2V0UmVsYXRpb25EZWxldGlvbnNRdWV1ZWRGb3JNb2RlbCxcblx0Y291bnRSZWxhdGlvbk1vZGVsc0luZGV4ZWRGb3JFbnRpdHksXG5cdGdldEFsbFJlbGF0aW9uc0luU3RhdGUsXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHJlZ2lzdGVyU3RvcmUgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuXG5jb25zdCBERUZBVUxUX1NUQVRFID0ge307XG5jb25zdCBTRVRfRklMVEVSID0gJ1NFVF9GSUxURVInO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBvcnRpb24gb2YgdGhlIHN0YXRlIG9iamVjdCBmb3IgdGhlIHByb3ZpZGVkIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0ICAgIGZpbHRlciBiYXIgbmFtZVxuICogQHJldHVybiB7T2JqZWN0fSBwYXJ0aWFsIHN0YXRlIG9iamVjdFxuICovXG5jb25zdCBnZXRTdGF0ZSA9ICggc3RhdGUsIGNvbnRleHQgKSA9PiB7XG5cdHJldHVybiB0eXBlb2Ygc3RhdGVbIGNvbnRleHQgXSA9PT0gJ3VuZGVmaW5lZCcgP1xuXHRcdE1hcCgpIDpcblx0XHRzdGF0ZVsgY29udGV4dCBdO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyBhY3Rpb25zIGFuZCByZXR1cm5zIGEgbmV3IHN0YXRlIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbi50eXBlICAgICAgU0VUX0ZJTFRFUiBjb25zdGFudFxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbi5jb250ZXh0IFx0ZmlsdGVyIGJhciBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uLmZpbHRlclx0ZmlsdGVyIHZhbHVlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24udmFsdWVcdFx0ZmlsdGVyIHZhbHVlXG4gKiBAcmV0dXJuIHtPYmplY3R9IG5ldyBzdGF0ZVxuICovXG5jb25zdCBmaWx0ZXJTdGF0ZVJlZHVjZXIgPSAoIHN0YXRlID0gREVGQVVMVF9TVEFURSwgYWN0aW9uICkgPT4ge1xuXHRjb25zdCB7IHR5cGUsIGNvbnRleHQsIGZpbHRlciwgdmFsdWUgfSA9IGFjdGlvbjtcblx0aWYgKCB0eXBlID09PSBTRVRfRklMVEVSICkge1xuXHRcdGNvbnN0IHByZXZTdGF0ZSA9IGdldFN0YXRlKCBzdGF0ZSwgY29udGV4dCApO1xuXHRcdGNvbnN0IG5ld1N0YXRlID0gcHJldlN0YXRlLnNldCggZmlsdGVyLCB2YWx1ZSApO1xuXHRcdGlmICggcHJldlN0YXRlICE9PSBuZXdTdGF0ZSApIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0XHRbIGNvbnRleHQgXTogbmV3U3RhdGUsXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYWN0aW9uIGZvciBzZXR0aW5nIHRoZSB2YWx1ZSBvZiBhIGZpbHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0IFx0ZmlsdGVyIGJhciBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsdGVyIFx0ZmlsdGVyIHZhbHVlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBcdGZpbHRlciB2YWx1ZVxuICogQHJldHVybiB7T2JqZWN0fSBhY3Rpb24gb2JqZWN0XG4gKi9cbmNvbnN0IHNldEZpbHRlciA9ICggY29udGV4dCwgZmlsdGVyLCB2YWx1ZSApID0+IHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBTRVRfRklMVEVSLFxuXHRcdGNvbnRleHQsXG5cdFx0ZmlsdGVyLFxuXHRcdHZhbHVlLFxuXHR9O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBmaWx0ZXIgb3IgdGhlIGRlZmF1bHQgdmFsdWUgaWYgbm90IHNldFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQgXHRcdGZpbHRlciBiYXIgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpbHRlciAgICBcdGZpbHRlciB2YWx1ZSBpZGVudGlmaWVyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVmYXVsdFZhbHVlIGZpbHRlciB2YWx1ZSBpZiBub3Qgc2V0XG4gKiBAcmV0dXJuIHtzdHJpbmd9IGZpbHRlciB2YWx1ZVxuICovXG5jb25zdCBnZXRGaWx0ZXIgPSAoIHN0YXRlLCBjb250ZXh0LCBmaWx0ZXIsIGRlZmF1bHRWYWx1ZSApID0+IHtcblx0cmV0dXJuIGdldFN0YXRlKCBzdGF0ZSwgY29udGV4dCApLmdldCggZmlsdGVyLCBkZWZhdWx0VmFsdWUgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJlZ2lzdGVyU3RvcmUoXG5cdCdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScsXG5cdHtcblx0XHRyZWR1Y2VyOiBmaWx0ZXJTdGF0ZVJlZHVjZXIsXG5cdFx0YWN0aW9uczogeyBzZXRGaWx0ZXIgfSxcblx0XHRzZWxlY3RvcnM6IHsgZ2V0RmlsdGVyIH0sXG5cdH1cbik7XG4iLCJleHBvcnQgY29uc3QgQUNUSU9OX1RZUEVTID0ge1xuXHRSRUNFSVZFX0xJU1Q6ICdSRUNFSVZFX0xJU1QnLFxuXHRSRUNFSVZFX0VOVElUWV9MSVNUOiAnUkVDRUlWRV9FTlRJVFlfTElTVCcsXG59O1xuZXhwb3J0IGNvbnN0IFJFU0VUX1RZUEVTID0ge1xuXHRSRVNFVF9BTExfU1RBVEU6ICdSRVNFVF9BTExfU1RBVEUnLFxuXHRSRVNFVF9TVEFURV9GT1JfSURFTlRJRklFUjogJ1JFU0VUX1NUQVRFX0ZPUl9JREVOVElGSUVSJyxcblx0UkVTRVRfU1BFQ0lGSUNfU1RBVEVfRk9SX0lERU5USUZJRVI6ICdSRVNFVF9TUEVDSUZJQ19TVEFURV9GT1JfSURFTlRJRklFUicsXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHNlbGVjdCBhcyBkYXRhU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IHNpbmd1bGFyTW9kZWxOYW1lLCBwbHVyYWxNb2RlbE5hbWUgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRBQ1RJT05fVFlQRVMgYXMgdHlwZXMsXG5cdFJFU0VUX1RZUEVTIGFzIHJlc2V0VHlwZXMsXG59IGZyb20gJy4vYWN0aW9uLXR5cGVzJztcbmltcG9ydCB7IGRpc3BhdGNoLCBzZWxlY3QgfSBmcm9tICcuLi9iYXNlLWNvbnRyb2xzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFJldHVybnMgYW4gYWN0aW9uIG9iamVjdCB1c2VkIGluIHVwZGF0aW5nIHRoZSBzdG9yZSB3aXRoIHRoZSBwcm92aWRlZCBpdGVtc1xuICogcmV0cmlldmVkIGZyb20gYSByZXF1ZXN0IHVzaW5nIHRoZSBnaXZlbiBxdWVyeXN0cmluZy5cbiAqXG4gKiBUaGlzIGlzIGEgZ2VuZXJpYyByZXNwb25zZSBhY3Rpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZyAgUmVzdWx0cyBhcmUgc3RvcmVkIGluZGV4ZWQgYnkgdGhlIHF1ZXJ5XG4gKiBzdHJpbmcgZ2VuZXJhdGluZyB0aGVtLlxuICogQHBhcmFtIHtBcnJheTwqPn0gaXRlbXMgICAgIGl0ZW1zIGF0dGFjaGVkIHdpdGggdGhlIGxpc3QuXG4gKiBAcmV0dXJuIHtcbiAqIFx0e1xuICogXHRcdHR5cGU6IHN0cmluZyxcbiAqIFx0XHRpZGVudGlmaWVyOiBzdHJpbmcsXG4gKiBcdFx0cXVlcnlTdHJpbmc6IHN0cmluZyxcbiAqIFx0XHRpdGVtczogQXJyYXk8Kj5cbiAqXHR9XG4gKiB9IE9iamVjdCBmb3IgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjZWl2ZVJlc3BvbnNlKCBpZGVudGlmaWVyLCBxdWVyeVN0cmluZywgaXRlbXMgPSBbXSApIHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiB0eXBlcy5SRUNFSVZFX0xJU1QsXG5cdFx0aWRlbnRpZmllcixcblx0XHRxdWVyeVN0cmluZyxcblx0XHRpdGVtcyxcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFjdGlvbiBvYmplY3QgdXNlZCBpbiB1cGRhdGluZyB0aGUgc3RvcmUgd2l0aCB0aGUgcHJvdmlkZWQgZW50aXR5XG4gKiBpdGVtcyByZXRyaWV2ZWQgZnJvbSBhIHJlcXVlc3QgdXNpbmcgdGhlIGdpdmVuIHF1ZXJ5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlTdHJpbmdcbiAqIEBwYXJhbSB7QXJyYXk8QmFzZUVudGl0eT59ZW50aXRpZXNcbiAqIEByZXR1cm4ge3t0eXBlOiBzdHJpbmcsIGlkZW50aWZpZXI6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgaXRlbXM6XG4gKiAgIEFycmF5PEJhc2VFbnRpdHk+fX0gQW4gYWN0aW9uIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY2VpdmVFbnRpdHlSZXNwb25zZShcblx0bW9kZWxOYW1lLFxuXHRxdWVyeVN0cmluZyxcblx0ZW50aXRpZXMgPSBbXSxcbikge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfRU5USVRZX0xJU1QsXG5cdFx0aWRlbnRpZmllcjogbW9kZWxOYW1lLFxuXHRcdHF1ZXJ5U3RyaW5nLFxuXHRcdGl0ZW1zOiBlbnRpdGllcyxcblx0fTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gdHJpZ2dlcmluZyByZXNldHRpbmcgYWxsIHN0YXRlIGluIHRoZSBzdG9yZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiByZXNldEFsbFN0YXRlKCkge1xuXHQvLyBhY3Rpb24gZm9yIHJlc2V0dGluZyB0aGUgZW50aXJlIHN0YXRlXG5cdHlpZWxkIHtcblx0XHR0eXBlOiByZXNldFR5cGVzLlJFU0VUX0FMTF9TVEFURSxcblx0fTtcblxuXHRpZiAoIGludmFsaWRhdGVBY3Rpb25zQXZhaWxhYmxlKCkgKSB7XG5cdFx0eWllbGQgZGlzcGF0Y2goXG5cdFx0XHQnY29yZS9kYXRhJyxcblx0XHRcdCdpbnZhbGlkYXRlUmVzb2x1dGlvbkZvclN0b3JlJyxcblx0XHRcdFJFRFVDRVJfS0VZLFxuXHRcdCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gZ2V0IHJlc29sdmVycyBmcm9tIGNvcmUvZGF0YSBhbmQgZGlzcGF0Y2ggaW52YWxpZGF0aW9uIG9mIGVhY2ggcmVzb2x2ZXIuXG5cdGNvbnN0IHJlc29sdmVycyA9IHlpZWxkIHNlbGVjdChcblx0XHQnY29yZS9kYXRhJyxcblx0XHQnZ2V0Q2FjaGVkUmVzb2x2ZXJzJyxcblx0XHRSRURVQ0VSX0tFWVxuXHQpO1xuXG5cdC8vIGRpc3BhdGNoIGludmFsaWRhdGlvbiBvZiB0aGUgY2FjaGVkIHJlc29sdmVyc1xuXHRmb3IgKCBjb25zdCBzZWxlY3RvciBpbiByZXNvbHZlcnMgKSB7XG5cdFx0Zm9yICggY29uc3QgZW50cnkgb2YgcmVzb2x2ZXJzWyBzZWxlY3RvciBdLl9tYXAgKSB7XG5cdFx0XHR5aWVsZCBkaXNwYXRjaChcblx0XHRcdFx0J2NvcmUvZGF0YScsXG5cdFx0XHRcdCdpbnZhbGlkYXRlUmVzb2x1dGlvbicsXG5cdFx0XHRcdFJFRFVDRVJfS0VZLFxuXHRcdFx0XHRzZWxlY3Rvcixcblx0XHRcdFx0ZW50cnlbIDAgXVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBBY3Rpb24gdHJpZ2dlcmluZyByZXNldHRpbmcgc3RhdGUgaW4gdGhlIHN0b3JlIGZvciB0aGUgZ2l2ZW4gc2VsZWN0b3IgbmFtZSBhbmRcbiAqIGlkZW50aWZpZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpZmllclxuICovXG5leHBvcnQgZnVuY3Rpb24qIHJlc2V0Rm9yU2VsZWN0b3JBbmRJZGVudGlmaWVyKCBzZWxlY3Rvck5hbWUsIGlkZW50aWZpZXIgKSB7XG5cdHlpZWxkIHtcblx0XHR0eXBlOiByZXNldFR5cGVzLlJFU0VUX1NUQVRFX0ZPUl9JREVOVElGSUVSLFxuXHRcdGlkZW50aWZpZXIsXG5cdH07XG5cblx0Ly8gZ2V0IHJlc29sdmVycyBmcm9tIGNvcmUvZGF0YVxuXHRjb25zdCByZXNvbHZlcnMgPSB5aWVsZCBzZWxlY3QoXG5cdFx0J2NvcmUvZGF0YScsXG5cdFx0J2dldENhY2hlZFJlc29sdmVycycsXG5cdFx0UkVEVUNFUl9LRVlcblx0KTtcblxuXHQvLyBkaXNwYXRjaCBpbnZhbGlkYXRpb24gb2YgdGhlIGNhY2hlZCByZXNvbHZlcnMgZm9yIGFueSByZXNvbHZlciB0aGF0XG5cdC8vIGhhcyBhIHZhcmlhdGlvbiBvZiBtb2RlbE5hbWUgaW4gdGhlIHNlbGVjdG9yIG5hbWUgb3IgaW4gdGhlIGFyZ3MgZm9yIHRoZVxuXHQvLyBjYWNoZWQgcmVzb2x2ZXIuXG5cdGZvciAoIGNvbnN0IHNlbGVjdG9yIGluIHJlc29sdmVycyApIHtcblx0XHRpZiAoXG5cdFx0XHRzZWxlY3Rvck5hbWUgPT09IHNlbGVjdG9yIHx8XG5cdFx0XHRpZGVudGlmaWVySW5TZWxlY3Rvciggc2VsZWN0b3IsIGlkZW50aWZpZXIgKVxuXHRcdCkge1xuXHRcdFx0Zm9yICggY29uc3QgZW50cnkgb2YgcmVzb2x2ZXJzWyBzZWxlY3RvciBdLl9tYXAgKSB7XG5cdFx0XHRcdGlmICggZW50cnlbIDAgXVsgMCBdID09PSBpZGVudGlmaWVyICkge1xuXHRcdFx0XHRcdHlpZWxkIGRpc3BhdGNoKFxuXHRcdFx0XHRcdFx0J2NvcmUvZGF0YScsXG5cdFx0XHRcdFx0XHQnaW52YWxpZGF0ZVJlc29sdXRpb24nLFxuXHRcdFx0XHRcdFx0UkVEVUNFUl9LRVksXG5cdFx0XHRcdFx0XHRzZWxlY3Rvcixcblx0XHRcdFx0XHRcdGVudHJ5WyAwIF0sXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEFjdGlvbiB0cmlnZ2VyaW5nIHRoZSBzdGF0ZSByZXNldCBmb3IgdGhlIFwiZ2VuZXJpY1wiIHNlbGVjdG9yICgnZ2V0SXRlbXMnKSBhbmRcbiAqIGl0J3MgaWRlbnRpZmllclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGlmaWVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogcmVzZXRHZW5lcmljSXRlbXNXaXRoSWRlbnRpZmllciggaWRlbnRpZmllciApIHtcblx0eWllbGQqIHJlc2V0Rm9yU2VsZWN0b3JBbmRJZGVudGlmaWVyKCAnZ2V0SXRlbXMnLCBpZGVudGlmaWVyICk7XG59XG5cbi8qKlxuICogQWN0aW9uIHRyaWdnZXJpbmcgdGhlIHN0YXRlIHJlc2V0IGZvciB0aGUgZW50aXR5IHNlbGVjdG9ycyBmb3IgdGhlIGdpdmVuXG4gKiBtb2RlbE5hbWVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogcmVzZXRFbnRpdGllc0Zvck1vZGVsTmFtZSggbW9kZWxOYW1lICkge1xuXHR5aWVsZCogcmVzZXRGb3JTZWxlY3RvckFuZElkZW50aWZpZXIoICdnZXRFbnRpdGllcycsIG1vZGVsTmFtZSApO1xuXHR5aWVsZCogcmVzZXRGb3JTZWxlY3RvckFuZElkZW50aWZpZXIoICdnZXRFbnRpdGllc0J5SWRzJywgbW9kZWxOYW1lICk7XG59XG5cbi8qKlxuICogQWN0aW9uIHRyaWdnZXJpbmcgdGhlIHN0YXRlIHJlc2V0IGZvciB0aGUgc3BlY2lmaWMgc2VsZWN0b3IgbmFtZSwgaWRlbnRpZmllclxuICogYW5kIHF1ZXJ5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpZmllclxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogcmVzZXRTcGVjaWZpY1N0YXRlRm9yU2VsZWN0b3IoXG5cdHNlbGVjdG9yTmFtZSxcblx0aWRlbnRpZmllcixcblx0cXVlcnlTdHJpbmdcbikge1xuXHR5aWVsZCB7XG5cdFx0dHlwZTogcmVzZXRUeXBlcy5SRVNFVF9TUEVDSUZJQ19TVEFURV9GT1JfSURFTlRJRklFUixcblx0XHRpZGVudGlmaWVyLFxuXHRcdHF1ZXJ5U3RyaW5nLFxuXHR9O1xuXG5cdHlpZWxkIGRpc3BhdGNoKFxuXHRcdCdjb3JlL2RhdGEnLFxuXHRcdCdpbnZhbGlkYXRlUmVzb2x1dGlvbicsXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0c2VsZWN0b3JOYW1lLFxuXHRcdFsgaWRlbnRpZmllciwgcXVlcnlTdHJpbmcgXVxuXHQpO1xufVxuXG4vKipcbiAqIEhlbHBlciBmb3IgZGV0ZXJtaW5pbmcgaWYgYWN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBgY29yZS9kYXRhYCBwYWNrYWdlLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIGFkZGl0aW9uYWwgaW52YWxpZGF0aW9uIGFjdGlvbnMgYXZhaWxhYmxlLlxuICovXG5jb25zdCBpbnZhbGlkYXRlQWN0aW9uc0F2YWlsYWJsZSA9ICgpID0+IHtcblx0cmV0dXJuIGRhdGFTZWxlY3QoICdjb3JlL2RhdGEnICkuaW52YWxpZGF0ZVJlc29sdXRpb25Gb3JTdG9yZSAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGdpdmVuIGlkZW50aWZpZXIgaXMgZm91bmQgaW4gdGhlIGdpdmVuXG4gKiBzZWxlY3Rvck5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aWZpZXJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgbWVhbnMgaXQgaXMgcHJlc2VudCwgZmFsc2UgbWVhbnMgaXQgaXNuJ3RcbiAqL1xuY29uc3QgaWRlbnRpZmllckluU2VsZWN0b3IgPSAoIHNlbGVjdG9yTmFtZSwgaWRlbnRpZmllciApID0+IHtcblx0aWYgKCBzZWxlY3Rvck5hbWUgPT09ICdnZXRJdGVtcycgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IHNpbmd1bGFyTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBpZGVudGlmaWVyICk7XG5cdGNvbnN0IHBsdXJhbE5hbWUgPSBwbHVyYWxNb2RlbE5hbWUoIGlkZW50aWZpZXIgKTtcblx0c2VsZWN0b3JOYW1lID0gc2VsZWN0b3JOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdHJldHVybiBzZWxlY3Rvck5hbWUuaW5kZXhPZiggc2luZ3VsYXJOYW1lICkgPiAtMSB8fFxuXHRcdHNlbGVjdG9yTmFtZS5pbmRleE9mKCBwbHVyYWxOYW1lICkgPiAtMTtcbn07XG4iLCIvKipcbiAqIFRoZSBrZXkgZm9yIHRoZSByZWR1Y2VyIG9uIHRoZSBzdG9yZS5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBSRURVQ0VSX0tFWSA9ICdldmVudGVzcHJlc3NvL2xpc3RzJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHJlZ2lzdGVyU3RvcmUgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgcmVkdWNlciBmcm9tICcuL3JlZHVjZXJzJztcbmltcG9ydCAqIGFzIHNlbGVjdG9ycyBmcm9tICcuL3NlbGVjdG9ycyc7XG5pbXBvcnQgKiBhcyBhY3Rpb25zIGZyb20gJy4vYWN0aW9ucyc7XG5pbXBvcnQgKiBhcyByZXNvbHZlcnMgZnJvbSAnLi9yZXNvbHZlcnMnO1xuaW1wb3J0IHsgY3JlYXRlRW50aXR5U2VsZWN0b3JzLCBjcmVhdGVFbnRpdHlSZXNvbHZlcnMgfSBmcm9tICcuL21vZGVsJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IGNvbnRyb2xzIGZyb20gJy4uL2Jhc2UtY29udHJvbHMnO1xuXG4vKipcbiAqIENyZWF0ZXMgc3BlY2lmaWMgbW9kZWwgZW50aXR5IHNlbGVjdG9ycyAoZ2V0RXZlbnRzLCBnZXREYXRldGltZXMgZXRjKVxuICogQHR5cGUge09iamVjdDxGdW5jdGlvbj59XG4gKi9cbmNvbnN0IGVudGl0eVNlbGVjdG9ycyA9IGNyZWF0ZUVudGl0eVNlbGVjdG9ycyggc2VsZWN0b3JzICk7XG5cbi8qKlxuICogQ3JlYXRlcyBzcGVjaWZpYyBtb2RlbCBlbnRpdHkgcmVzb2x2ZXJzIChnZXRFdmVudHMsIGdldERhdGV0aW1lcyBldGMpXG4gKiBAdHlwZSB7T2JqZWN0PEZ1bmN0aW9uPn1cbiAqL1xuY29uc3QgZW50aXR5UmVzb2x2ZXJzID0gY3JlYXRlRW50aXR5UmVzb2x2ZXJzKCByZXNvbHZlcnMgKTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIHN0b3JlIGZvciB0aGUgJ2V2ZW50ZXNwcmVzc28vbGlzdHNgIHJlZHVjZXIuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IHJlZ2lzdGVyU3RvcmUoIFJFRFVDRVJfS0VZLCB7XG5cdHJlZHVjZXIsXG5cdGFjdGlvbnMsXG5cdHNlbGVjdG9yczogeyAuLi5zZWxlY3RvcnMsIC4uLmVudGl0eVNlbGVjdG9ycyB9LFxuXHRyZXNvbHZlcnM6IHsgLi4ucmVzb2x2ZXJzLCAuLi5lbnRpdHlSZXNvbHZlcnMgfSxcblx0Y29udHJvbHMsXG59ICk7XG4iLCIvKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBnZXRNZXRob2ROYW1lIH0gZnJvbSAnLi4vYmFzZS1tb2RlbCc7XG5pbXBvcnQgeyBNT0RFTF9OQU1FUyB9IGZyb20gJy4uLy4uL21vZGVsJztcbmltcG9ydCB7IGlzUmVzb2x2aW5nIH0gZnJvbSAnLi4vYmFzZS1zZWxlY3RvcnMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY3JlYXRlcyBzZWxlY3RvcnMgZm9yIGVhY2ggcmVnaXN0ZXJlZCBtb2RlbCBuYW1lIHdyYXBwaW5nIHRoZVxuICogZ2VuZXJpYyBzb3VyY2Ugc2VsZWN0b3JzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGZ1bmN0aW9uPn0gc291cmNlXG4gKiBAcmV0dXJuIHtPYmplY3Q8ZnVuY3Rpb24+fSBBbGwgdGhlIGdlbmVyYXRlZCBzZWxlY3RvcnMgZm9yIGVhY2ggbW9kZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVFbnRpdHlTZWxlY3RvcnMgPSAoIHNvdXJjZSApID0+IE1PREVMX05BTUVTLnJlZHVjZShcblx0KCBzZWxlY3RvcnMsIG1vZGVsTmFtZSApID0+IHtcblx0XHRjb25zdCBtZXRob2ROYW1lRm9yR2V0ID0gZ2V0TWV0aG9kTmFtZSggbW9kZWxOYW1lLCAnJywgJ2dldCcsIHRydWUgKTtcblx0XHRzZWxlY3RvcnNbIG1ldGhvZE5hbWVGb3JHZXQgXSA9IChcblx0XHRcdHN0YXRlLFxuXHRcdFx0cXVlcnlTdHJpbmcsXG5cdFx0KSA9PiBzb3VyY2UuZ2V0RW50aXRpZXMoIHN0YXRlLCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nICk7XG5cdFx0c2VsZWN0b3JzW1xuXHRcdFx0Z2V0TWV0aG9kTmFtZSggbW9kZWxOYW1lLCAnYnlJZHMnLCAnZ2V0JywgdHJ1ZSApXG5cdFx0XSA9IChcblx0XHRcdHN0YXRlLFxuXHRcdFx0aWRzID0gW10sXG5cdFx0KSA9PiBzb3VyY2UuZ2V0RW50aXRpZXNCeUlkcyggc3RhdGUsIG1vZGVsTmFtZSwgaWRzICk7XG5cdFx0c2VsZWN0b3JzWyBnZXRNZXRob2ROYW1lKCBtb2RlbE5hbWUsICcnLCAnaXNSZXF1ZXN0aW5nJywgdHJ1ZSApIF0gPSAoXG5cdFx0XHRzdGF0ZSxcblx0XHRcdHF1ZXJ5U3RyaW5nLFxuXHRcdCkgPT4gaXNSZXNvbHZpbmcoXG5cdFx0XHRSRURVQ0VSX0tFWSxcblx0XHRcdG1ldGhvZE5hbWVGb3JHZXQsXG5cdFx0XHRxdWVyeVN0cmluZ1xuXHRcdCk7XG5cdFx0cmV0dXJuIHNlbGVjdG9ycztcblx0fSxcblx0e30sXG4pO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgcmVzb2x2ZXJzIGZvciBlYWNoIHJlZ2lzdGVyZWQgbW9kZWwgbmFtZSB3cmFwcGluZyB0aGVcbiAqIGdlbmVyaWMgc291cmNlIHJlc29sdmVycy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxmdW5jdGlvbj59IHNvdXJjZVxuICogQHJldHVybiB7T2JqZWN0PGZ1bmN0aW9uPn0gQWxsIHRoZSBnZW5lcmF0ZWQgcmVzb2x2ZXJzIGZvciBlYWNoIG1vZGVsLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRW50aXR5UmVzb2x2ZXJzID0gKCBzb3VyY2UgKSA9PiBNT0RFTF9OQU1FUy5yZWR1Y2UoXG5cdCggcmVzb2x2ZXJzLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0cmVzb2x2ZXJzWyBnZXRNZXRob2ROYW1lKCBtb2RlbE5hbWUsICcnLCAnZ2V0JywgdHJ1ZSApIF0gPSAoXG5cdFx0XHRxdWVyeVN0cmluZ1xuXHRcdCkgPT4gc291cmNlLmdldEVudGl0aWVzKCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nICk7XG5cdFx0cmVzb2x2ZXJzWyBnZXRNZXRob2ROYW1lKCBtb2RlbE5hbWUsICdieUlkcycsICdnZXQnLCB0cnVlICkgXSA9IChcblx0XHRcdGlkc1xuXHRcdCkgPT4gc291cmNlLmdldEVudGl0aWVzQnlJZHMoIG1vZGVsTmFtZSwgaWRzICk7XG5cdFx0cmV0dXJuIHJlc29sdmVycztcblx0fSxcblx0e30sXG4pO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0QUNUSU9OX1RZUEVTIGFzIHR5cGVzLFxuXHRSRVNFVF9UWVBFUyBhcyByZXNldFR5cGVzLFxufSBmcm9tICcuL2FjdGlvbi10eXBlcyc7XG5cbi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGZyb21KUywgU2V0LCBPcmRlcmVkTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IERFRkFVTFRfTElTVFNfU1RBVEUgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5cbi8qKlxuICogUmVkdWNlciBtYW5hZ2luZyBpdGVtIGxpc3Qgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZSAgQ3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cdERpc3BhdGNoZWQgYWN0aW9uLlxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcH1cdFVwZGF0ZWQgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNlaXZlTGlzdEl0ZW1zKFxuXHRzdGF0ZSA9IGZyb21KUyggREVGQVVMVF9MSVNUU19TVEFURSApLFxuXHRhY3Rpb25cbikge1xuXHRjb25zdCB7IHR5cGUsIGlkZW50aWZpZXIsIHF1ZXJ5U3RyaW5nIH0gPSBhY3Rpb247XG5cdGNvbnN0IHBhdGggPSBbIGlkZW50aWZpZXIsIHF1ZXJ5U3RyaW5nIF07XG5cdGxldCB7IGl0ZW1zIH0gPSBhY3Rpb247XG5cdGxldCBkb1VwZGF0ZSA9IHRydWUsXG5cdFx0ZXhpc3RpbmdWYWx1ZXM7XG5cdHN3aXRjaCAoIHR5cGUgKSB7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0xJU1Q6XG5cdFx0XHRleGlzdGluZ1ZhbHVlcyA9IHN0YXRlLmdldEluKCBwYXRoICkgfHwgU2V0KCk7XG5cdFx0XHRpdGVtcyA9IGV4aXN0aW5nVmFsdWVzLm1lcmdlKCBpdGVtcyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSB0eXBlcy5SRUNFSVZFX0VOVElUWV9MSVNUOlxuXHRcdFx0ZXhpc3RpbmdWYWx1ZXMgPSBzdGF0ZS5nZXRJbiggcGF0aCApIHx8IE9yZGVyZWRNYXAoKTtcblx0XHRcdGl0ZW1zID0gZXhpc3RpbmdWYWx1ZXMubWVyZ2UoXG5cdFx0XHRcdGl0ZW1zLm1hcCggKCBlbnRpdHkgKSA9PiBbIGVudGl0eS5pZCwgZW50aXR5IF0gKVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9BTExfU1RBVEU6XG5cdFx0XHRyZXR1cm4gZnJvbUpTKCBERUZBVUxUX0xJU1RTX1NUQVRFICk7XG5cdFx0Y2FzZSByZXNldFR5cGVzLlJFU0VUX1NUQVRFX0ZPUl9JREVOVElGSUVSOlxuXHRcdFx0cmV0dXJuIHN0YXRlLmRlbGV0ZSggaWRlbnRpZmllciApO1xuXHRcdGNhc2UgcmVzZXRUeXBlcy5SRVNFVF9TUEVDSUZJQ19TVEFURV9GT1JfSURFTlRJRklFUjpcblx0XHRcdHJldHVybiBzdGF0ZS5kZWxldGVJbiggWyBpZGVudGlmaWVyLCBxdWVyeVN0cmluZyBdICk7XG5cdFx0ZGVmYXVsdCA6XG5cdFx0XHRkb1VwZGF0ZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBkb1VwZGF0ZSA/XG5cdFx0c3RhdGUuc2V0SW4oIFsgaWRlbnRpZmllciwgcXVlcnlTdHJpbmcgXSwgaXRlbXMgKSA6XG5cdFx0c3RhdGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlY2VpdmVMaXN0SXRlbXM7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSwgZmluZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuXHRhcHBseVF1ZXJ5U3RyaW5nLFxuXHRnZXRQcmltYXJ5S2V5UXVlcnlTdHJpbmcsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgcmVjZWl2ZVJlc3BvbnNlLCByZWNlaXZlRW50aXR5UmVzcG9uc2UgfSBmcm9tICcuL2FjdGlvbnMnO1xuaW1wb3J0IHtcblx0ZmV0Y2gsXG5cdHNlbGVjdCxcblx0ZGlzcGF0Y2gsXG5cdHJlc29sdmVHZXRFbnRpdHlCeUlkRm9ySWRzLFxuXHRyZXNvbHZlU2VsZWN0LFxufSBmcm9tICcuLi9iYXNlLWNvbnRyb2xzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIGFzIENPUkVfUkVEVUNFUl9LRVkgfSBmcm9tICcuLi9jb3JlL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSBhcyBTQ0hFTUFfUkVEVUNFUl9LRVkgfSBmcm9tICcuLi9zY2hlbWEvY29uc3RhbnRzJztcblxuY29uc3QgREVGQVVMVF9FTVBUWV9BUlJBWSA9IFtdO1xuXG4vKipcbiAqIFJlc29sdmVyIGZvciBnZW5lcmljIGl0ZW1zIHJldHVybmVkIGZyb20gYW4gZW5kcG9pbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aWZpZXIgIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgaXRlbXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlTdHJpbmcgIEFkZGl0aW9uYWwgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgcGFzc2VkIG9uIHRvXG4gKiAgIHRoZSBSRVNUIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogZ2V0SXRlbXMoIGlkZW50aWZpZXIsIHF1ZXJ5U3RyaW5nICkge1xuXHRjb25zdCBpdGVtcyA9IHlpZWxkIGZldGNoKCB7XG5cdFx0cGF0aDogcXVlcnlTdHJpbmcsXG5cdH0gKTtcblx0eWllbGQgcmVjZWl2ZVJlc3BvbnNlKCBpZGVudGlmaWVyLCBxdWVyeVN0cmluZywgaXRlbXMgKTtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGZvciBoYW5kbGluZyBhbiBlbnRpdHkgcmVzcG9uc2UgYW5kIGNvbnN0cnVjdGluZyBCYXNlRW50aXR5XG4gKiBjaGlsZHJlbiBmcm9tIHRoZW0uXG4gKlxuICogTm90ZSwgdGhpcyB1c2VzIHRoZSBlbnRpdGllcyBzdG9yZWQgaW4gdGhlIGV2ZW50ZXNwcmVzc28vY29yZSBzdG9yZSBhcyB0aGVcbiAqIGF1dGhvcml0eSBzbyBpZiBhbiBlbnRpdHkgYWxyZWFkeSBleGlzdHMgdGhlcmUsIGl0IHJlcGxhY2VzIHdoYXQgd2FzXG4gKiByZXRyaWV2ZWQgZnJvbSB0aGUgc2VydmVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IHJlc3BvbnNlXG4gKiBAcmV0dXJuIHtJdGVyYWJsZUl0ZXJhdG9yPCo+fEFycmF5PEJhc2VFbnRpdHk+fSAgQW4gZW1wdHkgYXJyYXkgaWYgdGhlXG4gKiBmYWN0b3J5IGNhbm5vdCBiZSByZXRyaWV2ZWQgZm9yIHRoZSBtb2RlbC4gIE90aGVyd2lzZSB0aGUgY29uc3RydWN0ZWRcbiAqIGVudGl0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIGJ1aWxkQW5kRGlzcGF0Y2hFbnRpdGllc0Zyb21SZXNwb25zZSggbW9kZWxOYW1lLCByZXNwb25zZSApIHtcblx0Y29uc3QgZmFjdG9yeSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRGYWN0b3J5Rm9yTW9kZWwnLFxuXHRcdG1vZGVsTmFtZVxuXHQpO1xuXHRpZiAoIGlzRW1wdHkoIGZhY3RvcnkgKSApIHtcblx0XHRyZXR1cm4gREVGQVVMVF9FTVBUWV9BUlJBWTtcblx0fVxuXHRsZXQgZnVsbEVudGl0aWVzID0gcmVzcG9uc2UubWFwKFxuXHRcdCggZW50aXR5ICkgPT4gZmFjdG9yeS5mcm9tRXhpc3RpbmcoIGVudGl0eSApXG5cdCk7XG5cdGNvbnN0IGVudGl0eUlkcyA9IGZ1bGxFbnRpdGllcy5tYXAoICggZW50aXR5ICkgPT4gZW50aXR5LmlkICk7XG5cdC8vIGFyZSB0aGVyZSBhbHJlYWR5IGVudGl0aWVzIGZvciB0aGUgaWRzIGluIHRoZSBzdG9yZT8gIElmIHNvLCB3ZSB1c2UgdGhvc2Vcblx0Y29uc3QgZXhpc3RpbmdFbnRpdGllcyA9IHlpZWxkIHNlbGVjdChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRFbnRpdGllc0J5SWRzJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWRzXG5cdCk7XG5cdGlmICggISBpc0VtcHR5KCBleGlzdGluZ0VudGl0aWVzICkgKSB7XG5cdFx0ZnVsbEVudGl0aWVzID0gZnVsbEVudGl0aWVzLm1hcCggKCBlbnRpdHkgKSA9PiB7XG5cdFx0XHRyZXR1cm4gZmluZCggZXhpc3RpbmdFbnRpdGllcywgKCBleGlzdGluZ0VudGl0eSApID0+IHtcblx0XHRcdFx0cmV0dXJuIGV4aXN0aW5nRW50aXR5LmlkID09PSBlbnRpdHkuaWQ7XG5cdFx0XHR9ICkgfHwgZW50aXR5O1xuXHRcdH0gKTtcblx0fVxuXHR5aWVsZCBkaXNwYXRjaChcblx0XHRDT1JFX1JFRFVDRVJfS0VZLFxuXHRcdCdyZWNlaXZlRW50aXR5UmVjb3JkcycsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGZ1bGxFbnRpdGllc1xuXHQpO1xuXHR5aWVsZCByZXNvbHZlR2V0RW50aXR5QnlJZEZvcklkcyggbW9kZWxOYW1lLCBlbnRpdHlJZHMgKTtcblx0cmV0dXJuIGZ1bGxFbnRpdGllcztcbn1cblxuLyoqXG4gKiBSZXNvbHZlciBmb3IgbW9kZWwgZW50aXRpZXMgcmV0dXJuZWQgZnJvbSBhbiBlbmRwb2ludC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZ1xuICogQHJldHVybiB7SXRlcmFibGVJdGVyYXRvcjwqPnxBcnJheTxCYXNlRW50aXR5Pn0gQW4gZW1wdHkgYXJyYXkgaWYgbm9cbiAqIGVudGl0aWVzIHJldHJpZXZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBnZXRFbnRpdGllcyggbW9kZWxOYW1lLCBxdWVyeVN0cmluZyApIHtcblx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCBmZXRjaCgge1xuXHRcdHBhdGg6IGFwcGx5UXVlcnlTdHJpbmcoIG1vZGVsTmFtZSwgcXVlcnlTdHJpbmcgKSxcblx0fSApO1xuXHRpZiAoIGlzRW1wdHkoIHJlc3BvbnNlICkgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfRU1QVFlfQVJSQVk7XG5cdH1cblx0Y29uc3QgZnVsbEVudGl0aWVzID0geWllbGQgYnVpbGRBbmREaXNwYXRjaEVudGl0aWVzRnJvbVJlc3BvbnNlKFxuXHRcdG1vZGVsTmFtZSxcblx0XHRyZXNwb25zZVxuXHQpO1xuXHR5aWVsZCByZWNlaXZlRW50aXR5UmVzcG9uc2UoIG1vZGVsTmFtZSwgcXVlcnlTdHJpbmcsIGZ1bGxFbnRpdGllcyApO1xufVxuXG4vKipcbiAqIFJlc29sdmVyIGZvciBnZXR0aW5nIG1vZGVsIGVudGl0aWVzIGZvciBhIGdpdmVuIHNldCBvZiBpZHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn1pZHNcbiAqIEByZXR1cm4ge0l0ZXJhYmxlSXRlcmF0b3I8Kj58QXJyYXl9IEFuIGVtcHR5IGFycmF5IGlmIG5vIGVudGl0aWVzIHJldHJpZXZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBnZXRFbnRpdGllc0J5SWRzKCBtb2RlbE5hbWUsIGlkcyA9IFtdICkge1xuXHRjb25zdCBxdWVyeVN0cmluZyA9IGdldFByaW1hcnlLZXlRdWVyeVN0cmluZyggbW9kZWxOYW1lLCBpZHMgKTtcblx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCBmZXRjaCgge1xuXHRcdHBhdGg6IGFwcGx5UXVlcnlTdHJpbmcoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRxdWVyeVN0cmluZ1xuXHRcdCksXG5cdH0gKTtcblx0aWYgKCBpc0VtcHR5KCByZXNwb25zZSApICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHR9XG5cdGNvbnN0IGZ1bGxFbnRpdGllcyA9IHlpZWxkIGJ1aWxkQW5kRGlzcGF0Y2hFbnRpdGllc0Zyb21SZXNwb25zZShcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVzcG9uc2Vcblx0KTtcblx0eWllbGQgcmVjZWl2ZUVudGl0eVJlc3BvbnNlKCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nLCBmdWxsRW50aXRpZXMgKTtcbn1cbiIsIi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGlzUmVzb2x2aW5nIH0gZnJvbSAnLi4vYmFzZS1zZWxlY3RvcnMnO1xuaW1wb3J0IHsgUkVEVUNFUl9LRVkgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IF9fLCBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgY3JlYXRlU2VsZWN0b3IgZnJvbSAncmVtZW1vJztcbmltcG9ydCB7XG5cdGFzc2VydEltbXV0YWJsZU9iamVjdEhhc1BhdGgsXG5cdGdldFByaW1hcnlLZXlRdWVyeVN0cmluZyxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgT3JkZXJlZE1hcCwgU2V0IH0gZnJvbSAnaW1tdXRhYmxlJztcblxuY29uc3QgREVGQVVMVF9FTVBUWV9BUlJBWSA9IFtdO1xuXG4vKipcbiAqIEdlbmVyaWMgaGVscGVyIGZvciByZXRyaWV2aW5nIGl0ZW1zIGZyb20gc3RhdGUgZm9yIGdpdmVuIGlkZW50aWZpZXIgYW5kXG4gKiBxdWVyeVN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpZmllclxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nXG4gKiBAcGFyYW0geyp9IGRlZmF1bHRFbXB0eSAgQ2FsbGVyIGNhbiBzdXBwbHkgd2hhdCB0aGUgZGVmYXVsdCBpcyB3aGVuIHN0YXRlIGlzXG4gKiBkb2Vzbid0IGhhdmUgZW50cmllcyBmb3IgdGhlIGdpdmVuIGlkZW50aWZpZXIgYW5kIHF1ZXJ5U3RyaW5nXG4gKiBAcmV0dXJuIHtBcnJheXxPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIGl0ZW1zIGlmIHRoZSBnaXZlbiBpZGVudGlmaWVyL1xuICogcXVlcnlzdHJpbmcgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHN0YXRlIG9yIHRoZSBnaXZlbiBpdGVtcyBhcyBhbiBhcnJheSBvclxuICogb2JqZWN0IChkZXBlbmRpbmcgb24gaG93IHRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgc3RhdGUpLlxuICovXG5jb25zdCByZXRyaWV2ZUl0ZW1zID1cblx0KFxuXHRcdHN0YXRlLFxuXHRcdGlkZW50aWZpZXIsXG5cdFx0cXVlcnlTdHJpbmcsXG5cdFx0ZGVmYXVsdEVtcHR5ID0gU2V0KClcblx0KSA9PiBzdGF0ZS5nZXRJbiggWyBpZGVudGlmaWVyLCBxdWVyeVN0cmluZyBdICkgfHwgZGVmYXVsdEVtcHR5O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIHRoZSBpdGVtcyBmb3IgdGhlIGdpdmVuIGlkZW50aWZpZXIgYW5kIHF1ZXJ5U3RyaW5nXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZSBEYXRhIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aWZpZXIgVGhlIGlkZW50aWZpZXIgdGhlIGl0ZW1zIGFyZSBiZWluZyByZXRyaWV2ZWQgZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nIFRoZSBxdWVyeSBzdHJpbmcgZm9yIHJldHJpZXZpbmcgdGhlIGl0ZW1zLlxuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2YgaXRlbXMgZm9yIHRoZSBnaXZlbiBtb2RlbCBhbmQgcXVlcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRJdGVtcyA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBpZGVudGlmaWVyLCBxdWVyeVN0cmluZyApID0+IHJldHJpZXZlSXRlbXMoXG5cdFx0c3RhdGUsXG5cdFx0aWRlbnRpZmllcixcblx0XHRxdWVyeVN0cmluZ1xuXHQpLnRvQXJyYXkoKSxcblx0KCBzdGF0ZSwgaWRlbnRpZmllciwgcXVlcnlTdHJpbmcgKSA9PiBbXG5cdFx0c3RhdGUuZ2V0SW4oIFsgaWRlbnRpZmllciwgcXVlcnlTdHJpbmcgXSApLFxuXHRdXG4pO1xuXG4vKipcbiAqIFJldHVybnMgYWxsIHRoZSBtb2RlbCBlbnRpdGllcyBmb3IgdGhlIGdpdmVuIG1vZGVsTmFtZSBhbmQgcXVlcnkgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZ1xuICogQHJldHVybiB7QXJyYXk8QmFzZUVudGl0eT59IFJldHVybnMgYXJyYXkgb2YgZW50aXRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbnRpdGllcyA9IGNyZWF0ZVNlbGVjdG9yKFxuXHQoIHN0YXRlLCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nICkgPT4gcmV0cmlldmVJdGVtcyhcblx0XHRzdGF0ZSxcblx0XHRtb2RlbE5hbWUsXG5cdFx0cXVlcnlTdHJpbmcsXG5cdFx0T3JkZXJlZE1hcCgpXG5cdCkudmFsdWVTZXEoKS50b0FycmF5KCksXG5cdCggc3RhdGUsIG1vZGVsTmFtZSwgcXVlcnlTdHJpbmcgKSA9PiBbXG5cdFx0c3RhdGUuZ2V0SW4oIFsgbW9kZWxOYW1lLCBxdWVyeVN0cmluZyBdICksXG5cdF1cbik7XG5cbi8qKlxuICogUmV0dXJucyBhbGwgdGhlIG1vZGVsIGVudGl0aWVzIGZvciB0aGUgZ2l2ZW4gbW9kZWxOYW1lIGFuZCBxdWVyeSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtBcnJheX0gaWRzXG4gKiBAcmV0dXJuIHtBcnJheTxCYXNlRW50aXR5Pn0gQW4gYXJyYXkgb2YgZW50aXRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbnRpdGllc0J5SWRzID0gKCBzdGF0ZSwgbW9kZWxOYW1lLCBpZHMgPSBbXSApID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBxdWVyeVN0cmluZyA9IGdldFByaW1hcnlLZXlRdWVyeVN0cmluZyggbW9kZWxOYW1lLCBpZHMgKTtcblx0XHRyZXR1cm4gZ2V0RW50aXRpZXMoIHN0YXRlLCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHJldHVybiBERUZBVUxUX0VNUFRZX0FSUkFZO1xuXHR9XG59O1xuXG5nZXRFbnRpdGllc0J5SWRzLmNsZWFyID0gKCkgPT4gZ2V0RW50aXRpZXMuY2xlYXIoKTtcblxuLyoqXG4gKiBIZWxwZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBnaXZlbiBpZGVudGlmaWVyLCBzZWxlY3Rvck5hbWUsIGFuZCBxdWVyeVN0cmluZ1xuICogaXMgYmVpbmcgcmVzb2x2ZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGlmaWVyXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlTdHJpbmdcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VsZWN0b3IgaXMgY3VycmVudGx5IHJlcXVlc3RpbmcgaXRlbXMuXG4gKi9cbmZ1bmN0aW9uIGlzUmVxdWVzdGluZyggc3RhdGUsIGlkZW50aWZpZXIsIHNlbGVjdG9yTmFtZSwgcXVlcnlTdHJpbmcgKSB7XG5cdGFzc2VydEltbXV0YWJsZU9iamVjdEhhc1BhdGgoXG5cdFx0WyBpZGVudGlmaWVyIF0sXG5cdFx0c3RhdGUsXG5cdFx0c3ByaW50Zihcblx0XHRcdF9fKFxuXHRcdFx0XHQnVGhlIGdpdmVuIGlkZW50aWZpZXIgKCVzKSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc3RhdGUuJyxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdCksXG5cdFx0XHRpZGVudGlmaWVyLFxuXHRcdCksXG5cdCk7XG5cdHJldHVybiBpc1Jlc29sdmluZyggUkVEVUNFUl9LRVksIHNlbGVjdG9yTmFtZSwgaWRlbnRpZmllciwgcXVlcnlTdHJpbmcgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGl0ZW1zIGZvciB0aGUgZ2l2ZW4gaWRlbnRpZmllciBhbmQgcXVlcnkgc3RyaW5nIGFyZSBiZWluZ1xuICogcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcH0gc3RhdGUgRGF0YSBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGlmaWVyICBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGl0ZW1zIGJlaW5nIHJlcXVlc3RlZFxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nIFRoZSBxdWVyeSBzdHJpbmcgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIGl0ZW1zIGFyZSBiZWluZyByZXF1ZXN0ZWQgb3Igbm90LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXF1ZXN0aW5nSXRlbXMoIHN0YXRlLCBpZGVudGlmaWVyLCBxdWVyeVN0cmluZyApIHtcblx0cmV0dXJuIGlzUmVxdWVzdGluZyggc3RhdGUsIGlkZW50aWZpZXIsICdnZXRJdGVtcycsIHF1ZXJ5U3RyaW5nICk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBnZXQgZW50aXRpZXMgcmVxdWVzdCBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyByZXNvbHZlZFxuICogb3Igbm90LlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIGVudGl0aWVzIChmb3IgdGhlIGdpdmVuIG1vZGVsKSBhcmUgYmVpbmdcbiAqIHJlcXVlc3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVxdWVzdGluZ0VudGl0aWVzKFxuXHRzdGF0ZSxcblx0bW9kZWxOYW1lLFxuXHRxdWVyeVN0cmluZ1xuKSB7XG5cdHJldHVybiBpc1JlcXVlc3RpbmcoIHN0YXRlLCBtb2RlbE5hbWUsICdnZXRFbnRpdGllcycsIHF1ZXJ5U3RyaW5nICk7XG59XG4iLCJleHBvcnQgY29uc3QgQUNUSU9OX1RZUEVTID0ge1xuXHRSRUNFSVZFX1NDSEVNQV9SRUNPUkQ6ICdSRUNFSVZFX1NDSEVNQV9SRUNPUkQnLFxuXHRSRUNFSVZFX0ZBQ1RPUllfRk9SX01PREVMOiAnUkVDRUlWRV9GQUNUT1JZX0ZPUl9NT0RFTCcsXG5cdFJFQ0VJVkVfUkVMQVRJT05fRU5EUE9JTlRfRk9SX01PREVMX0VOVElUWTpcblx0XHQnUkVDRUlWRV9SRUxBVElPTl9FTkRQT0lOVF9GT1JfTU9ERUxfRU5USVRZJyxcblx0UkVDRUlWRV9SRUxBVElPTl9TQ0hFTUE6ICdSRUNFSVZFX1JFTEFUSU9OX1NDSEVNQScsXG59O1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEFDVElPTl9UWVBFUyBhcyB0eXBlcyB9IGZyb20gJy4vYWN0aW9uLXR5cGVzJztcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFjdGlvbiBvYmplY3QgdXNlZCB0byB1cGRhdGUgdGhlIHN0b3JlIHdpdGggdGhlIHByb3ZpZGVkIHNjaGVtYVxuICogZm9yIHRoZSBwcm92aWRlZCBtb2RlbE5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7e3R5cGU6IHN0cmluZywgbW9kZWxOYW1lOiAqLCBzY2hlbWF9fSAgVGhlIGFjdGlvbiBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNlaXZlU2NoZW1hRm9yTW9kZWwoIG1vZGVsTmFtZSwgc2NoZW1hID0ge30gKSB7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogdHlwZXMuUkVDRUlWRV9TQ0hFTUFfUkVDT1JELFxuXHRcdG1vZGVsTmFtZSxcblx0XHRzY2hlbWEsXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhY3Rpb24gb2JqZWN0IHVzZWQgdG8gdXBkYXRlIHRoZSBzdG9yZSB3aXRoIHRoZSBwcm92aWRlZCBtb2RlbFxuICogZW50aXR5IGZhY3RvcnkgZm9yIHRoZSBwcm92aWRlZCBtb2RlbE5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IGZhY3RvcnlcbiAqIEByZXR1cm4ge3t0eXBlOiBzdHJpbmcsIG1vZGVsTmFtZTogc3RyaW5nLCBmYWN0b3J5OiBPYmplY3R9fSBBbiBhY3Rpb25cbiAqIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY2VpdmVGYWN0b3J5Rm9yTW9kZWwoIG1vZGVsTmFtZSwgZmFjdG9yeSA9IHt9ICkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfRkFDVE9SWV9GT1JfTU9ERUwsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGZhY3RvcnksXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhY3Rpb24gb2JqZWN0IHVzZWQgdG8gdXBkYXRlIHRoZSBzdG9yZSB3aXRoIHRoZSBwcm92aWRlZCByZWxhdGlvblxuICogZW5kcG9pbnQgZm9yIHRoZSBtb2RlbCBhbmQgaWQsIGFuZCBpdHMgcmVsYXRpb25zLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuZHBvaW50XG4gKiBAcmV0dXJuIHtcbiAqIFx0e1xuICogXHRcdG1vZGVsTmFtZTogKixcbiAqIFx0XHRlbmRwb2ludDogKixcbiAqIFx0XHRyZWxhdGlvbk5hbWU6ICosXG4gKiBcdFx0ZW50aXR5SWQ6ICosXG4gKiBcdFx0dHlwZTogc3RyaW5nXG4gKiBcdH1cbiAqIH0gQW4gYWN0aW9uIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY2VpdmVSZWxhdGlvbkVuZHBvaW50Rm9yTW9kZWxFbnRpdHkoXG5cdG1vZGVsTmFtZSxcblx0ZW50aXR5SWQsXG5cdHJlbGF0aW9uTmFtZSxcblx0ZW5kcG9pbnRcbikge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfUkVMQVRJT05fRU5EUE9JTlRfRk9SX01PREVMX0VOVElUWSxcblx0XHRtb2RlbE5hbWUsXG5cdFx0ZW50aXR5SWQsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdGVuZHBvaW50LFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjZWl2ZVJlbGF0aW9uU2NoZW1hKFxuXHRtb2RlbE5hbWUsXG5cdHJlbGF0aW9uTmFtZSxcblx0cmVsYXRpb25TY2hlbWFcbikge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGVzLlJFQ0VJVkVfUkVMQVRJT05fU0NIRU1BLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0cmVsYXRpb25TY2hlbWEsXG5cdH07XG59XG4iLCIvKipcbiAqIElkZW50aWZpZXIga2V5IGZvciB0aGlzIHN0b3JlIHJlZHVjZXIuXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgUkVEVUNFUl9LRVkgPSAnZXZlbnRlc3ByZXNzby9zY2hlbWEnO1xuXG5leHBvcnQgY29uc3QgSk9JTl9SRUxBVElPTl9UWVBFUyA9IFtcblx0J0VFX0hBQlRNX1JlbGF0aW9uJyxcblx0J0VFX0hBQlRNX0FueV9SZWxhdGlvbicsXG5dO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgcmVnaXN0ZXJTdG9yZSB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IFJFRFVDRVJfS0VZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0ICogYXMgc2VsZWN0b3JzIGZyb20gJy4vc2VsZWN0b3JzJztcbmltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCAqIGFzIHJlc29sdmVycyBmcm9tICcuL3Jlc29sdmVycyc7XG5pbXBvcnQgcmVkdWNlciBmcm9tICcuL3JlZHVjZXJzJztcbmltcG9ydCBjb250cm9scyBmcm9tICcuLi9iYXNlLWNvbnRyb2xzJztcbmltcG9ydCB7IGNyZWF0ZUVudGl0eVNlbGVjdG9ycywgY3JlYXRlRW50aXR5UmVzb2x2ZXJzIH0gZnJvbSAnLi9tb2RlbCc7XG5cbi8qKlxuICogQ3JlYXRlcyBzcGVjaWZpYyBtb2RlbCBlbnRpdHkgc2VsZWN0b3JzIChnZXRGYWN0b3J5Rm9yRXZlbnQgZXRjKVxuICogQHR5cGUge09iamVjdDxGdW5jdGlvbj59XG4gKi9cbmNvbnN0IGVudGl0eVNlbGVjdG9ycyA9IGNyZWF0ZUVudGl0eVNlbGVjdG9ycyggc2VsZWN0b3JzICk7XG5cbi8qKlxuICogQ3JlYXRlcyBzcGVjaWZpYyBtb2RlbCBlbnRpdHkgcmVzb2x2ZXJzIChnZXRGYWN0b3J5Rm9yRXZlbnQgZXRjKVxuICogQHR5cGUge09iamVjdDxGdW5jdGlvbj59XG4gKi9cbmNvbnN0IGVudGl0eVJlc29sdmVycyA9IGNyZWF0ZUVudGl0eVJlc29sdmVycyggcmVzb2x2ZXJzICk7XG5cbi8qKlxuICogUmVnaXN0cmF0aW9uIG9mIHN0b3JlIGZvciBldmVudGVzcHJlc3NvL3NjaGVtYS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmVnaXN0ZXJTdG9yZSggUkVEVUNFUl9LRVksIHtcblx0cmVkdWNlcixcblx0YWN0aW9ucyxcblx0Y29udHJvbHMsXG5cdHNlbGVjdG9yczogeyAuLi5zZWxlY3RvcnMsIC4uLmVudGl0eVNlbGVjdG9ycyB9LFxuXHRyZXNvbHZlcnM6IHsgLi4ucmVzb2x2ZXJzLCAuLi5lbnRpdHlSZXNvbHZlcnMgfSxcbn0gKTtcblxuZXhwb3J0IGNvbnN0IFNDSEVNQV9LRVkgPSBSRURVQ0VSX0tFWTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IE1PREVMX05BTUVTIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBnZXRNZXRob2ROYW1lIH0gZnJvbSAnLi4vYmFzZS1tb2RlbCc7XG5pbXBvcnQgeyBpc1Jlc29sdmluZyB9IGZyb20gJy4uL2Jhc2Utc2VsZWN0b3JzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIENyZWF0ZXMgc2VsZWN0b3JzIGZvciBlYWNoIHJlZ2lzdGVyZWQgbW9kZWwgbmFtZSB3cmFwcGluZyB0aGUgZ2VuZXJpYyBzb3VyY2VcbiAqIHNlbGVjdG9ycy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxmdW5jdGlvbj59IHNvdXJjZVxuICogQHJldHVybiB7T2JqZWN0PGZ1bmN0aW9uPn0gQWxsIHRoZSBnZW5lcmF0ZWQgc2VsZWN0b3JzIGZvciBlYWNoIG1vZGVsLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRW50aXR5U2VsZWN0b3JzID0gKCBzb3VyY2UgKSA9PiBNT0RFTF9OQU1FUy5yZWR1Y2UoXG5cdCggc2VsZWN0b3JzLCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0Y29uc3Qgc2NoZW1hTWV0aG9kTmFtZSA9IGdldE1ldGhvZE5hbWUoIG1vZGVsTmFtZSwgJ3NjaGVtYScsICdnZXQnICk7XG5cdFx0Y29uc3QgZmFjdG9yeU1ldGhvZE5hbWUgPSBnZXRNZXRob2ROYW1lKCBtb2RlbE5hbWUsICdmYWN0b3J5JywgJ2dldCcgKTtcblx0XHRzZWxlY3RvcnNbIHNjaGVtYU1ldGhvZE5hbWUgXSA9IChcblx0XHRcdHN0YXRlXG5cdFx0KSA9PiBzb3VyY2UuZ2V0U2NoZW1hRm9yTW9kZWwoIHN0YXRlLCBtb2RlbE5hbWUgKTtcblx0XHRzZWxlY3RvcnNbIGdldE1ldGhvZE5hbWUoIG1vZGVsTmFtZSwgJ3NjaGVtYScsICdpc1JlcXVlc3RpbmcnICkgXSA9XG5cdFx0XHQoKSA9PiBpc1Jlc29sdmluZyggUkVEVUNFUl9LRVksIHNjaGVtYU1ldGhvZE5hbWUgKTtcblx0XHRzZWxlY3RvcnNbIGZhY3RvcnlNZXRob2ROYW1lIF0gPSAoXG5cdFx0XHRzdGF0ZVxuXHRcdCkgPT4gc291cmNlLmdldEZhY3RvcnlGb3JNb2RlbCggc3RhdGUsIG1vZGVsTmFtZSApO1xuXHRcdHNlbGVjdG9yc1sgZ2V0TWV0aG9kTmFtZSggbW9kZWxOYW1lLCAnZmFjdG9yeScsICdpc1JlcXVlc3RpbmcnICkgXSA9XG5cdFx0XHQoKSA9PiBpc1Jlc29sdmluZyggUkVEVUNFUl9LRVksIGZhY3RvcnlNZXRob2ROYW1lICk7XG5cdFx0cmV0dXJuIHNlbGVjdG9ycztcblx0fSxcblx0e31cbik7XG5cbi8qKlxuICogQ3JlYXRlcyByZXNvbHZlcnMgZm9yIGVhY2ggcmVnaXN0ZXJlZCBtb2RlbCBuYW1lIHdyYXBwaW5nIHRoZSBnZW5lcmljIHNvdXJjZVxuICogcmVzb2x2ZXJzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGZ1bmN0aW9uPn0gc291cmNlXG4gKiBAcmV0dXJuIHtPYmplY3Q8ZnVuY3Rpb24+fSBBbGwgdGhlIGdlbmVyYXRlZCByZXNvbHZlcnMgZm9yIGVhY2ggbW9kZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVFbnRpdHlSZXNvbHZlcnMgPSAoIHNvdXJjZSApID0+IE1PREVMX05BTUVTLnJlZHVjZShcblx0KCByZXNvbHZlcnMsIG1vZGVsTmFtZSApID0+IHtcblx0XHRyZXNvbHZlcnNbIGdldE1ldGhvZE5hbWUoIG1vZGVsTmFtZSwgJ3NjaGVtYScsICdnZXQnICkgXSA9ICgpID0+XG5cdFx0XHRzb3VyY2UuZ2V0U2NoZW1hRm9yTW9kZWwoIG1vZGVsTmFtZSApO1xuXHRcdHJlc29sdmVyc1sgZ2V0TWV0aG9kTmFtZSggbW9kZWxOYW1lLCAnZmFjdG9yeScsICdnZXQnICkgXSA9ICgpID0+XG5cdFx0XHRzb3VyY2UuZ2V0RmFjdG9yeUZvck1vZGVsKCBtb2RlbE5hbWUgKTtcblx0XHRyZXR1cm4gcmVzb2x2ZXJzO1xuXHR9LFxuXHR7fVxuKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGNvbWJpbmVSZWR1Y2VycyB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBub3JtYWxpemVFbnRpdHlJZCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuaW1wb3J0IHsgREVGQVVMVF9TQ0hFTUFfU1RBVEUsIHNpbmd1bGFyTW9kZWxOYW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHtcblx0aXNTY2hlbWFSZXNwb25zZU9mTW9kZWwsXG5cdGlzTW9kZWxFbnRpdHlGYWN0b3J5T2ZNb2RlbCxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBmcm9tSlMsIE1hcCB9IGZyb20gJ2ltbXV0YWJsZSc7XG5pbXBvcnQgaXNTaGFsbG93RXF1YWwgZnJvbSAnQHdvcmRwcmVzcy9pcy1zaGFsbG93LWVxdWFsJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEFDVElPTl9UWVBFUyBhcyB0eXBlcyB9IGZyb20gJy4vYWN0aW9uLXR5cGVzJztcbi8qKlxuICogUmVkdWNlciBmb3IgYSBtb2RlbCBzY2hlbWEuXG4gKiBAcGFyYW0ge01hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge01hcH0gVGhlIG5ldyAob3Igb3JpZ2luYWwpIHN0YXRlLlxuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZVNjaGVtYSA9IChcblx0c3RhdGUgPSBmcm9tSlMoIERFRkFVTFRfU0NIRU1BX1NUQVRFLnNjaGVtYSApLFxuXHRhY3Rpb25cbikgPT4ge1xuXHRjb25zdCB7IHR5cGUsIHNjaGVtYSB9ID0gYWN0aW9uO1xuXHR0cnkge1xuXHRcdGNvbnN0IG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ubW9kZWxOYW1lICk7XG5cdFx0aWYgKFxuXHRcdFx0aXNTY2hlbWFSZXNwb25zZU9mTW9kZWwoIHNjaGVtYSwgbW9kZWxOYW1lICkgJiZcblx0XHRcdHR5cGUgPT09IHR5cGVzLlJFQ0VJVkVfU0NIRU1BX1JFQ09SRFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHN0YXRlLnNldCggbW9kZWxOYW1lLCBzY2hlbWEgKTtcblx0XHR9XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHJldHVybiBzdGF0ZTtcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIFJlZHVjZXIgZm9yIGEgbW9kZWwgZmFjdG9yeVxuICogQHBhcmFtIHtNYXB9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtNYXB9IHRoZSBuZXcgKG9yIG9yaWdpbmFsKSBzdGF0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVGYWN0b3J5ID0gKFxuXHRzdGF0ZSA9IGZyb21KUyggREVGQVVMVF9TQ0hFTUFfU1RBVEUuZmFjdG9yeSApLFxuXHRhY3Rpb25cbikgPT4ge1xuXHRjb25zdCB7IHR5cGUsIGZhY3RvcnkgfSA9IGFjdGlvbjtcblx0dHJ5IHtcblx0XHRjb25zdCBtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLm1vZGVsTmFtZSApO1xuXHRcdGlmIChcblx0XHRcdGlzTW9kZWxFbnRpdHlGYWN0b3J5T2ZNb2RlbCggZmFjdG9yeSwgbW9kZWxOYW1lICkgJiZcblx0XHRcdHR5cGUgPT09IHR5cGVzLlJFQ0VJVkVfRkFDVE9SWV9GT1JfTU9ERUxcblx0XHQpIHtcblx0XHRcdHJldHVybiBzdGF0ZS5zZXQoIG1vZGVsTmFtZSwgZmFjdG9yeSApO1xuXHRcdH1cblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0cmV0dXJuIHN0YXRlO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogUmVkdWNlciBmb3IgcmVsYXRpb24gZW5kcG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7TWFwfXN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcmV0dXJuIHtNYXB9IE5ldyBvciBvcmlnaW5hbCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVSZWxhdGlvbkVuZHBvaW50Rm9yRW50aXR5ID0gKFxuXHRzdGF0ZSA9IGZyb21KUyggREVGQVVMVF9TQ0hFTUFfU1RBVEUucmVsYXRpb25FbmRwb2ludHMgKSxcblx0YWN0aW9uXG4pID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCB7IHR5cGUsIGVudGl0eUlkLCBlbmRwb2ludCB9ID0gYWN0aW9uO1xuXHRcdGNvbnN0IG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBhY3Rpb24ubW9kZWxOYW1lICk7XG5cdFx0Y29uc3QgcmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIGFjdGlvbi5yZWxhdGlvbk5hbWUgKTtcblx0XHRpZiAoIHR5cGUgPT09IHR5cGVzLlJFQ0VJVkVfUkVMQVRJT05fRU5EUE9JTlRfRk9SX01PREVMX0VOVElUWSApIHtcblx0XHRcdHJldHVybiBzdGF0ZS5zZXRJbihcblx0XHRcdFx0WyBtb2RlbE5hbWUsIG5vcm1hbGl6ZUVudGl0eUlkKCBlbnRpdHlJZCApLCByZWxhdGlvbk5hbWUgXSxcblx0XHRcdFx0ZW5kcG9pbnRcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGNhdGNoICggZSApIHtcblx0XHRyZXR1cm4gc3RhdGU7XG5cdH1cblx0cmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBSZWR1Y2VyIGZvciByZWxhdGlvbiBzY2hlbWFcbiAqXG4gKiBAcGFyYW0ge01hcH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEByZXR1cm4ge01hcH0gTmV3IG9yIG9yaWdpbmFsIHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlUmVsYXRpb25TY2hlbWEgPSAoIHN0YXRlID0gTWFwKCksIGFjdGlvbiApID0+IHtcblx0aWYgKCBhY3Rpb24udHlwZSA9PT0gdHlwZXMuUkVDRUlWRV9SRUxBVElPTl9TQ0hFTUEgKSB7XG5cdFx0Y29uc3QgbW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIGFjdGlvbi5tb2RlbE5hbWUgKTtcblx0XHRjb25zdCByZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggYWN0aW9uLnJlbGF0aW9uTmFtZSApO1xuXHRcdGlmICggaXNTaGFsbG93RXF1YWwoXG5cdFx0XHRzdGF0ZS5nZXRJbiggWyBtb2RlbE5hbWUsIHJlbGF0aW9uTmFtZSBdLCB7fSApLFxuXHRcdFx0YWN0aW9uLnJlbGF0aW9uU2NoZW1hLFxuXHRcdCkgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0fVxuXHRcdHJldHVybiBzdGF0ZS5zZXRJbihcblx0XHRcdFsgbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgXSxcblx0XHRcdGFjdGlvbi5yZWxhdGlvblNjaGVtYVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBCZSBhd2FyZSB0aGF0IHRoZSByb290IHN0YXRlIGlzIGEgcGxhaW4gb2JqZWN0IGJ1dCBlYWNoIHNsaWNlICgnc2NoZW1hJyxcbiAqICdmYWN0b3J5JywgJ3JlbGF0aW9uRW5kcG9pbnRzJykgaXMgYW4gaW1tdXRhYmxlIE1hcC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY29tYmluZVJlZHVjZXJzKCB7XG5cdHNjaGVtYTogcmVjZWl2ZVNjaGVtYSxcblx0ZmFjdG9yeTogcmVjZWl2ZUZhY3RvcnksXG5cdHJlbGF0aW9uRW5kcG9pbnRzOiByZWNlaXZlUmVsYXRpb25FbmRwb2ludEZvckVudGl0eSxcblx0cmVsYXRpb25TY2hlbWE6IHJlY2VpdmVSZWxhdGlvblNjaGVtYSxcbn0gKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdGlzU2NoZW1hUmVzcG9uc2VPZk1vZGVsLFxuXHRpc01vZGVsRW50aXR5LFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7XG5cdGdldEVuZHBvaW50LFxuXHRzdHJpcEJhc2VSb3V0ZUZyb21VcmwsXG5cdGNyZWF0ZUVudGl0eUZhY3RvcnksXG5cdE1PREVMX1BSRUZJWEVTLFxuXHRzaW5ndWxhck1vZGVsTmFtZSxcblx0cGx1cmFsTW9kZWxOYW1lLFxuXHRnZXRQcmltYXJ5S2V5LFxuXHRtb2RlbE5hbWVGb3JRdWVyeVN0cmluZyxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQge1xuXHRyZWNlaXZlU2NoZW1hRm9yTW9kZWwsXG5cdHJlY2VpdmVGYWN0b3J5Rm9yTW9kZWwsXG5cdHJlY2VpdmVSZWxhdGlvbkVuZHBvaW50Rm9yTW9kZWxFbnRpdHksXG5cdHJlY2VpdmVSZWxhdGlvblNjaGVtYSxcbn0gZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCB7IGZldGNoLCByZXNvbHZlU2VsZWN0IH0gZnJvbSAnLi4vYmFzZS1jb250cm9scyc7XG5pbXBvcnQgeyBSRURVQ0VSX0tFWSBhcyBDT1JFX1JFRFVDRVJfS0VZIH0gZnJvbSAnLi4vY29yZS9jb25zdGFudHMnO1xuaW1wb3J0IHtcblx0UkVEVUNFUl9LRVkgYXMgU0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRKT0lOX1JFTEFUSU9OX1RZUEVTLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQSByZXNvbHZlciBmb3IgZ2V0dGluZyB0aGUgc2NoZW1hIGZvciBhIGdpdmVuIG1vZGVsIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHJpZXZlZCBzY2hlbWEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogZ2V0U2NoZW1hRm9yTW9kZWwoIG1vZGVsTmFtZSApIHtcblx0Y29uc3QgcGF0aCA9IGdldEVuZHBvaW50KCBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICkgKTtcblx0Y29uc3Qgc2NoZW1hID0geWllbGQgZmV0Y2goIHsgcGF0aCwgbWV0aG9kOiAnT1BUSU9OUycgfSApO1xuXHR5aWVsZCByZWNlaXZlU2NoZW1hRm9yTW9kZWwoIG1vZGVsTmFtZSwgc2NoZW1hICk7XG5cdHJldHVybiBzY2hlbWE7XG59XG5cbi8qKlxuICogQSByZXNvbHZlciBmb3IgZ2V0dGluZyB0aGUgbW9kZWwgZW50aXR5IGZhY3RvcnkgZm9yIGEgZ2l2ZW4gbW9kZWwgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge09iamVjdHxudWxsfSByZXRyaWV2ZWQgZmFjdG9yeVxuICovXG5leHBvcnQgZnVuY3Rpb24qIGdldEZhY3RvcnlGb3JNb2RlbCggbW9kZWxOYW1lLCBzY2hlbWEgPSB7fSApIHtcblx0aWYgKCAhIGlzU2NoZW1hUmVzcG9uc2VPZk1vZGVsKCBzY2hlbWEsIG1vZGVsTmFtZSApICkge1xuXHRcdHNjaGVtYSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0XHQnZ2V0U2NoZW1hRm9yTW9kZWwnLFxuXHRcdFx0bW9kZWxOYW1lXG5cdFx0KTtcblx0fVxuXHRpZiAoICEgaXNTY2hlbWFSZXNwb25zZU9mTW9kZWwoIHNjaGVtYSwgbW9kZWxOYW1lICkgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgZmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZhY3RvcnkoXG5cdFx0bW9kZWxOYW1lLFxuXHRcdHNjaGVtYS5zY2hlbWEsXG5cdFx0TU9ERUxfUFJFRklYRVMoIG1vZGVsTmFtZSApXG5cdCk7XG5cdHlpZWxkIHJlY2VpdmVGYWN0b3J5Rm9yTW9kZWwoIG1vZGVsTmFtZSwgZmFjdG9yeSApO1xuXHRyZXR1cm4gZmFjdG9yeTtcbn1cblxuLyoqXG4gKiBBIHJlc29sdmVyIGZvciBnZXR0aW5nIHRoZSByZWxhdGlvbiBlbmRwb2ludCBmb3IgYSBnaXZlbiBtb2RlbCwgaXQncyBpZCwgYW5kXG4gKiB0aGUgcmVxdWVzdGVkIHJlbGF0aW9uLlxuICpcbiAqIFRoZSBFRSBSRVNUIGFwaSBuYW1lcyByZWxhdGlvbnMgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhleSB0aGVyZSBhcmUgc2luZ3VsYXJcbiAqIG9yIHBsdXJhbCByZWxhdGlvbnMgb24gYSBnaXZlbiBtb2RlbCAoZWcuIFJlZ2lzdHJhdGlvbnMgaGF2ZSBvbmUgZXZlbnRcbiAqIHJlbGF0aW9uLCBidXQgRXZlbnRzIGNhbiBoYXZlIG11bHRpcGxlIGRhdGV0aW1lcykuICBUaGlzIG1lYW5zIHRoZSBvbmx5IHdheVxuICogdG8gZGVyaXZlIGFuIGFjY3VyYXRlIGVuZHBvaW50IGZvciBhIGdpdmVuIHJlbGF0aW9uIHJlcXVlc3Qgb24gYW4gZW50aXR5IGlzXG4gKiB0byByZXRyaWV2ZSB0aGUgZW50aXR5IGZyb20gdGhlIHJlc291cmNlIGFuZCBkZXJpdmUgdGhlIGVuZHBvaW50IGZyb20gdGhlXG4gKiBsaW5rcyBpbiB0aGUgcmVzcG9uc2UuXG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbnRpdHlJZFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtJdGVyYWJsZUl0ZXJhdG9yPCo+fHN0cmluZ30gQSBnZW5lcmF0b3Igb3IgdGhlIGRlcml2ZWQgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogZ2V0UmVsYXRpb25FbmRwb2ludEZvckVudGl0eUlkKFxuXHRtb2RlbE5hbWUsXG5cdGVudGl0eUlkLFxuXHRyZWxhdGlvbk1vZGVsTmFtZVxuKSB7XG5cdC8vIGZpcnN0IGF0dGVtcHQgdG8gZ2V0IHRoZSByZWxhdGlvbiBlbmRwb2ludCBmcm9tIHRoZSBlbnRpdHkgdGhhdCBtaWdodFxuXHQvLyBhbHJlYWR5IGJlIGluIGNvcmUgc3RhdGUuXG5cdGNvbnN0IGVudGl0eSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0Q09SRV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0RW50aXR5QnlJZCcsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkXG5cdCk7XG5cdHJlbGF0aW9uTW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTW9kZWxOYW1lICk7XG5cdGNvbnN0IHBsdXJhbFJlbGF0aW9uTmFtZSA9IHBsdXJhbE1vZGVsTmFtZSggcmVsYXRpb25Nb2RlbE5hbWUgKTtcblx0bGV0IGVuZHBvaW50ID0gJyc7XG5cdGlmICggaXNNb2RlbEVudGl0eSggZW50aXR5ICkgJiYgZW50aXR5WyBwbHVyYWxSZWxhdGlvbk5hbWUgKyAnUmVzb3VyY2UnIF0gKSB7XG5cdFx0ZW5kcG9pbnQgPSBzdHJpcEJhc2VSb3V0ZUZyb21VcmwoXG5cdFx0XHRlbnRpdHlbIHBsdXJhbFJlbGF0aW9uTmFtZSArICdSZXNvdXJjZScgXS5yZXNvdXJjZUxpbmtcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgZmV0Y2goXG5cdFx0XHR7XG5cdFx0XHRcdHBhdGg6IGdldEVuZHBvaW50KCBtb2RlbE5hbWUgKSArICcvJyArIGVudGl0eUlkLFxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0aWYgKCAhIHJlc3BvbnNlLl9saW5rcyApIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdFx0Y29uc3QgbGlua3MgPSByZXNwb25zZS5fbGlua3MgfHwge307XG5cdFx0Y29uc3QgYmFzZVJlbGF0aW9uUGF0aCA9ICdodHRwczovL2FwaS5ldmVudGVzcHJlc3NvLmNvbS8nO1xuXHRcdGVuZHBvaW50ID0gbGlua3NbXG5cdFx0XHRiYXNlUmVsYXRpb25QYXRoICsgcmVsYXRpb25Nb2RlbE5hbWVcblx0XHRdIHx8ICcnO1xuXHRcdGVuZHBvaW50ID0gKCBlbmRwb2ludCA9PT0gJycgJiYgbGlua3NbXG5cdFx0XHRiYXNlUmVsYXRpb25QYXRoICsgcGx1cmFsUmVsYXRpb25OYW1lXG5cdFx0XSApIHx8IGVuZHBvaW50O1xuXHR9XG5cdGlmICggZW5kcG9pbnQgKSB7XG5cdFx0eWllbGQgcmVjZWl2ZVJlbGF0aW9uRW5kcG9pbnRGb3JNb2RlbEVudGl0eShcblx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdGVudGl0eUlkLFxuXHRcdFx0cmVsYXRpb25Nb2RlbE5hbWUsXG5cdFx0XHRlbmRwb2ludFxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIGVuZHBvaW50O1xufVxuXG4vKipcbiAqIEEgcmVzb2x2ZXIgZm9yIGdldHRpbmcgdGhlIHByaW1hcnkga2V5IHN0cmluZyB0byB1c2UgaW4gYSBxdWVyeSBmb3IgdGhlIGdpdmVuXG4gKiBtb2RlbCBhbmQgcmVsYXRpb24uIFRoaXMgY29uc2lkZXJzIHRoZSBqb2luIHR5cGUgZm9yIHRoZSByZWxhdGlvbi5cbiAqXG4gKiBAc2VlIHRoZSBgZ2V0UmVsYXRpb25QcmltYXJ5S2V5U3RyaW5nYCBzZWxlY3RvciBmb3IgZXhhbXBsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwcmltYXJ5IGtleSBzdHJpbmcgdG8gdXNlIG9yIGFuIGVtcHR5IHN0cmluZyBpZiByZWxhdGlvblxuICogdHlwZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBnZXRSZWxhdGlvblByaW1hcnlLZXlTdHJpbmcoIG1vZGVsTmFtZSwgcmVsYXRpb25OYW1lICkge1xuXHQvLyBub3JtYWxpemVcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IHJlbGF0aW9uVHlwZSA9IHlpZWxkIHJlc29sdmVTZWxlY3QoXG5cdFx0U0NIRU1BX1JFRFVDRVJfS0VZLFxuXHRcdCdnZXRSZWxhdGlvblR5cGUnLFxuXHRcdG1vZGVsTmFtZSxcblx0XHRyZWxhdGlvbk5hbWVcblx0KTtcblx0aWYgKCByZWxhdGlvblR5cGUgPT09ICcnICkge1xuXHRcdHJldHVybiAnJztcblx0fVxuXHRjb25zdCByZWxhdGlvblByaW1hcnlLZXkgPSBnZXRQcmltYXJ5S2V5KCByZWxhdGlvbk5hbWUgKTtcblx0cmV0dXJuIHJlbGF0aW9uVHlwZSA9PT0gJ0VFX0JlbG9uZ3NfVG9fUmVsYXRpb24nID9cblx0XHRyZWxhdGlvblByaW1hcnlLZXkgOlxuXHRcdGAkeyBtb2RlbE5hbWVGb3JRdWVyeVN0cmluZyggcmVsYXRpb25OYW1lICkgfS4keyByZWxhdGlvblByaW1hcnlLZXkgfWA7XG59XG5cbi8qKlxuICogQSByZXNvbHZlciBmb3IgcmV0dXJuaW5nIHdoYXQgdGhlIGV4cGVjdGVkIHJlc3BvbnNlIHR5cGUgaXMgZm9yIHRoZSBnaXZlblxuICogcmVsYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgVGhlIG1vZGVsIHRoZSByZWxhdGlvbiBpcyBmb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lIFRoZSBtb2RlbCBuYW1lIHRoZSByZWxhdGlvbiBpcyB0by5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHR5cGUgb2YgdGhlIHJlbGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIGdldFJlbGF0aW9uUmVzcG9uc2VUeXBlKCBtb2RlbE5hbWUsIHJlbGF0aW9uTmFtZSApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IHJlbGF0aW9uU2NoZW1hID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0aW9uU2NoZW1hJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHQpO1xuXHRyZXR1cm4gcmVsYXRpb25TY2hlbWEgIT09IG51bGwgPyByZWxhdGlvblNjaGVtYS50eXBlIDogJyc7XG59XG5cbi8qKlxuICogQSByZXNvbHZlciBmb3IgcmV0dXJuaW5nIHdoZXRoZXIgdGhlIGdpdmVuIG1vZGVsTmFtZSBhbmQgcmVsYXRpb25OYW1lIGhhdmVcbiAqIGEgam9pbiB0YWJsZSBmb3IgcmVwcmVzZW50aW5nIHRoZWlyIHJlbGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIHRoZXJlIGlzIGEgam9pbiB0YWJsZSwgZmFsc2UgbWVhbnMgdGhlcmUgaXNuJ3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogaGFzSm9pblRhYmxlUmVsYXRpb24oIG1vZGVsTmFtZSwgcmVsYXRpb25OYW1lICkge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0Y29uc3QgcmVsYXRpb25UeXBlID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0aW9uVHlwZScsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdHJlbGF0aW9uTmFtZSxcblx0KTtcblx0cmV0dXJuIEpPSU5fUkVMQVRJT05fVFlQRVMuaW5kZXhPZiggcmVsYXRpb25UeXBlICkgPiAtMTtcbn1cblxuLyoqXG4gKiBBIHJlc29sdmVyIGZvciBnZXR0aW5nIHRoZSByZWxhdGlvbiB0eXBlIGRlc2NyaWJpbmcgdGhlIHJlbGF0aW9uIGJldHdlZW5cbiAqIG1vZGVsTmFtZSBhbmQgcmVsYXRpb25OYW1lXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSAgVGhlIHJlbGF0aW9uIHR5cGUgdG8gZGVzY3JpYmUgdGhlIHJlbGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogZ2V0UmVsYXRpb25UeXBlKCBtb2RlbE5hbWUsIHJlbGF0aW9uTmFtZSApIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IHJlbGF0aW9uU2NoZW1hID0geWllbGQgcmVzb2x2ZVNlbGVjdChcblx0XHRTQ0hFTUFfUkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0aW9uU2NoZW1hJyxcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25OYW1lXG5cdCk7XG5cdHJldHVybiByZWxhdGlvblNjaGVtYSAhPT0gbnVsbCA/IHJlbGF0aW9uU2NoZW1hLnJlbGF0aW9uX3R5cGUgOiAnJztcbn1cblxuLyoqXG4gKiBBIHJlc29sdmVyIGZvciByZXRyaWV2aW5nIHRoZSByZWxhdGlvbiBzY2hlbWEgZnJvbSB0aGUgc2VydmVyIGZvciB0aGUgZ2l2ZW5cbiAqIG1vZGVsTmFtZSBhbmQgcmVsYXRpb25OYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEB0aHJvd3MgRXJyb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBnZXRSZWxhdGlvblNjaGVtYSggbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgKSB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRjb25zdCBwbHVyYWxSZWxhdGlvbk5hbWUgPSBwbHVyYWxNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRjb25zdCBzY2hlbWEgPSB5aWVsZCByZXNvbHZlU2VsZWN0KFxuXHRcdFNDSEVNQV9SRURVQ0VSX0tFWSxcblx0XHQnZ2V0U2NoZW1hRm9yTW9kZWwnLFxuXHRcdG1vZGVsTmFtZVxuXHQpO1xuXHRpZiAoIHNjaGVtYSA9PT0gbnVsbCApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHQnVGhlICcgKyBtb2RlbE5hbWUgKyAnIGRvZXMgbm90IGhhdmUgYSBzY2hlbWEnXG5cdFx0KTtcblx0fVxuXHQvLyBpcyB0aGVyZSBhIHNjaGVtYSBmb3IgcGx1cmFsIHJlbGF0aW9uIG5hbWU/XG5cdGxldCB0eXBlU2NoZW1hID0gc2NoZW1hLnNjaGVtYS5wcm9wZXJ0aWVzWyBwbHVyYWxSZWxhdGlvbk5hbWUgXSB8fCBudWxsO1xuXHR0eXBlU2NoZW1hID0gdHlwZVNjaGVtYSA9PT0gbnVsbCAmJlxuXHRcdCEgaXNVbmRlZmluZWQoIHNjaGVtYS5zY2hlbWEucHJvcGVydGllc1sgcmVsYXRpb25OYW1lIF0gKSA/XG5cdFx0c2NoZW1hLnNjaGVtYS5wcm9wZXJ0aWVzWyByZWxhdGlvbk5hbWUgXSA6XG5cdFx0dHlwZVNjaGVtYTtcblx0aWYgKCB0eXBlU2NoZW1hID09PSBudWxsICkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdCdUaGVyZSBpcyBubyByZWxhdGlvbiBmb3IgJyArIHJlbGF0aW9uTmFtZSArICcgb24gdGhlICcgK1xuXHRcdFx0J21vZGVsICcgKyBtb2RlbE5hbWVcblx0XHQpO1xuXHR9XG5cdHlpZWxkIHJlY2VpdmVSZWxhdGlvblNjaGVtYShcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHR5cGVTY2hlbWFcblx0KTtcbn1cbiIsIi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGlzUmVzb2x2aW5nLCBoYXNGaW5pc2hlZFJlc29sdmluZyB9IGZyb20gJy4uL2Jhc2Utc2VsZWN0b3JzJztcbmltcG9ydCB7IFJFRFVDRVJfS0VZLCBKT0lOX1JFTEFUSU9OX1RZUEVTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0c2luZ3VsYXJNb2RlbE5hbWUsXG5cdGdldFByaW1hcnlLZXksXG5cdG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBub3JtYWxpemVFbnRpdHlJZCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCBjcmVhdGVTZWxlY3RvciBmcm9tICdyZW1lbW8nO1xuXG4vKipcbiAqIFNlbGVjdG9yIGZvciByZXR1cm5pbmcgdGhlIHNjaGVtYSBvYmplY3QgZm9yIGEgZ2l2ZW4gbW9kZWwgbmFtZSBmcm9tIHRoZVxuICogc3RhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHNjaGVtYSBvYmplY3Qgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hRm9yTW9kZWwoIHN0YXRlLCBtb2RlbE5hbWUgKSB7XG5cdHJldHVybiBzdGF0ZS5zY2hlbWEuZ2V0KCBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICksIG51bGwgKTtcbn1cblxuLyoqXG4gKiBTZWxlY3RvciBmb3IgcmV0dXJuaW5nIHdoZXRoZXIgdGhlIHNjaGVtYSBpcyBiZWluZyByZXF1ZXN0ZWQgb3Igbm90IGZvciB0aGVcbiAqIGdpdmVuIG1vZGVsIG5hbWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBpdHMgYmVpbmcgcmVxdWVzdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXF1ZXN0aW5nU2NoZW1hRm9yTW9kZWwoIHN0YXRlLCBtb2RlbE5hbWUgKSB7XG5cdHJldHVybiBpc1Jlc29sdmluZyhcblx0XHRSRURVQ0VSX0tFWSxcblx0XHQnZ2V0U2NoZW1hRm9yTW9kZWwnLFxuXHRcdHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKVxuXHQpO1xufVxuXG4vKipcbiAqIFNlbGVjdG9yIGZvciByZXR1cm5pbmcgd2hldGhlciB0aGUgc2NoZW1hIGhhcyBiZWVuIHJlc29sdmVkIG9yIG5vdCBmb3IgdGhlXG4gKiBnaXZlbiBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIHRoYXQgdGhlIHNjaGVtYSBoYXMgZmluaXNoZWQgcmVzb2x2aW5nIGZvciB0aGlzXG4gKiBtb2RlbCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb2x2ZWRTY2hlbWFGb3JNb2RlbCggc3RhdGUsIG1vZGVsTmFtZSApIHtcblx0cmV0dXJuIGhhc0ZpbmlzaGVkUmVzb2x2aW5nKFxuXHRcdFJFRFVDRVJfS0VZLFxuXHRcdCdnZXRTY2hlbWFGb3JNb2RlbCcsXG5cdFx0c2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApXG5cdCk7XG59XG5cbi8qKlxuICogU2VsZWN0b3IgZm9yIHJldHVybmluZyB0aGUgbW9kZWwgZW50aXR5IGZhY3Rvcnkgb2JqZWN0IGZvciBhIGdpdmVuXG4gKiBtb2RlbCBuYW1lIGZyb20gdGhlIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtb2RlbCBlbnRpdHkgZmFjdG9yeSBvciBudWxsIGlmIGl0IGRvZXNuJ3RcbiAqIGV4aXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmFjdG9yeUZvck1vZGVsKCBzdGF0ZSwgbW9kZWxOYW1lICkge1xuXHRjb25zdCBmYWN0b3J5ID0gc3RhdGUuZmFjdG9yeS5nZXQoIHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKSwgbnVsbCApO1xuXHRyZXR1cm4gISAoIGZhY3RvcnkgaW5zdGFuY2VvZiBNYXAgKSA/IGZhY3RvcnkgOiBudWxsO1xufVxuXG4vKipcbiAqIFNlbGVjdG9yIGZvciByZXR1cm5pbmcgd2hldGhlciB0aGUgbW9kZWwgZW50aXR5IGZhY3RvcnkgaXMgYmVpbmcgcmVxdWVzdGVkXG4gKiBvciBub3QgZm9yIHRoZSBnaXZlbiBtb2RlbCBuYW1lIGZyb20gdGhlIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgaXQgaXMgYmVpbmcgcmVxdWVzdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXF1ZXN0aW5nRmFjdG9yeUZvck1vZGVsKCBzdGF0ZSwgbW9kZWxOYW1lICkge1xuXHRyZXR1cm4gaXNSZXNvbHZpbmcoXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldEZhY3RvcnlGb3JNb2RlbCcsXG5cdFx0c2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApXG5cdCk7XG59XG5cbi8qKlxuICogU2VsZWN0b3IgZm9yIHJldHVybmluZyB3aGV0aGVyIHRoZSBmYWN0b3J5IGhhcyBiZWVuIHJlc29sdmVkIG9yIG5vdCBmb3IgdGhlXG4gKiBnaXZlbiBtb2RlbCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyB0aGF0IHRoZSBmYWN0b3J5IGhhcyBmaW5pc2hlZCByZXNvbHZpbmcgZm9yIHRoaXNcbiAqIG1vZGVsIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvbHZlZEZhY3RvcnlGb3JNb2RlbCggc3RhdGUsIG1vZGVsTmFtZSApIHtcblx0cmV0dXJuIGhhc0ZpbmlzaGVkUmVzb2x2aW5nKFxuXHRcdFJFRFVDRVJfS0VZLFxuXHRcdCdnZXRGYWN0b3J5Rm9yTW9kZWwnLFxuXHRcdHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcmVsYXRpb24gZW5kcG9pbnQgZm9yIHRoZSBnaXZlbiBtb2RlbCwgZW50aXR5IGlkIGFuZCByZWxhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZW50aXR5SWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk1vZGVsTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSByZWxhdGlvbiBlbmRwb2ludCBpZiBhdmFpbGFibGUgb3IgYW4gZW1wdHlcbiAqIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbGF0aW9uRW5kcG9pbnRGb3JFbnRpdHlJZChcblx0c3RhdGUsXG5cdG1vZGVsTmFtZSxcblx0ZW50aXR5SWQsXG5cdHJlbGF0aW9uTW9kZWxOYW1lXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk1vZGVsTmFtZSApO1xuXHRlbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCBlbnRpdHlJZCApO1xuXHRyZXR1cm4gc3RhdGUucmVsYXRpb25FbmRwb2ludHMuZ2V0SW4oXG5cdFx0WyBtb2RlbE5hbWUsIGVudGl0eUlkLCByZWxhdGlvbk1vZGVsTmFtZSBdXG5cdCkgfHwgJyc7XG59XG5cbi8qKlxuICogU2VsZWN0b3IgZm9yIHJldHVybmluZyB3aGV0aGVyIHRoZSByZWxhdGlvbiBlbmRwb2ludCBpcyBiZWluZyByZXF1ZXN0ZWRcbiAqIG9yIG5vdCBmb3IgdGhlIGdpdmVuIG1vZGVsIG5hbWUsIGVudGl0eSBpZCwgYW5kIHJlbGF0aW9uIGZyb20gdGhlIHN0YXRlLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGVudGl0eUlkXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25Nb2RlbE5hbWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIGl0IGlzIGJlaW5nIHJlcXVlc3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVxdWVzdGluZ1JlbGF0aW9uRW5kcG9pbnRGb3JFbnRpdHlJZChcblx0c3RhdGUsXG5cdG1vZGVsTmFtZSxcblx0ZW50aXR5SWQsXG5cdHJlbGF0aW9uTW9kZWxOYW1lXG4pIHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRlbnRpdHlJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCBlbnRpdHlJZCApO1xuXHRyZWxhdGlvbk1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk1vZGVsTmFtZSApO1xuXHRyZXR1cm4gaXNSZXNvbHZpbmcoXG5cdFx0UkVEVUNFUl9LRVksXG5cdFx0J2dldFJlbGF0aW9uRW5kcG9pbnRGb3JFbnRpdHlJZCcsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUlkLFxuXHRcdHJlbGF0aW9uTW9kZWxOYW1lLFxuXHQpO1xufVxuXG4vKipcbiAqIFNlbGVjdG9yIGZvciByZXR1cm5pbmcgdGhlIHByaW1hcnkga2V5IHN0cmluZyB0byB1c2UgaW4gYSBxdWVyeSBmb3IgdGhlIGdpdmVuXG4gKiBtb2RlbCBhbmQgcmVsYXRpb24uICBUaGlzIGNvbnNpZGVycyB0aGUgam9pbiB0eXBlIGZvciB0aGUgcmVsYXRpb24uXG4gKlxuICogRm9yIGV4YW1wbGU6ICBJZiB5b3Ugd2VyZSBkb2luZyBhIHF1ZXJ5IHRvIGdldCB0aGUgcmVnaXN0cmF0aW9ucyByZWxhdGVkIHRvIGFuXG4gKiBhdHRlbmRlZSwgeW91IHdvdWxkIG5lZWQgdGhlIHN0cmluZyB0byB1c2UgZm9yIHRoZSBgUkVHX0lEYCBwcmltYXJ5IGtleSBpblxuICogdGhlIHF1ZXJ5LiAgU2luY2UgdGhlIGpvaW4gdHlwZSBmb3IgcmVnaXN0cmF0aW9ucyB0byBhdHRlbmRlZXMgaXNcbiAqIEVFX0hhc19NYW55X1JlbGF0aW9uLCB0aGVuIHRoZSBxdWVyeSBzdHJpbmcgd291bGQgbmVlZCB0byBiZVxuICogYFJlZ2lzdHJhdGlvbi5SRUdfSURgLiAgSWYgaG93ZXZlciB5b3Ugd2VyZSBnZXR0aW5nIHRoZSBhdHRlbmRlZSByZWxhdGVkXG4gKiB0byBhIHJlZ2lzdHJhdGlvbiwgdGhlbiB0aGUgam9pbiB0eXBlIGZvciBhdHRlbmRlZXMgb24gcmVnaXN0cmF0aW9ucyBpc1xuICogRUVfQmVsb25nc19Ub19SZWxhdGlvbiwgaW4gd2hpY2ggY2FzZSB0aGUgYXR0ZW5kZWUgcHJpbWFyeSBrZXkgd291bGQgYmVcbiAqIGBBVFRfSURgICh0aGUgcmVnaXN0cmF0aW9uIHRhYmxlIGhhcyB0aGUgZm9yZWlnbiBrZXkgb24gaXQpLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHByaW1hcnkga2V5IHN0cmluZyB0byB1c2Ugb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHJlbGF0aW9uXG4gKiB0eXBlIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVsYXRpb25QcmltYXJ5S2V5U3RyaW5nID0gY3JlYXRlU2VsZWN0b3IoXG5cdChcblx0XHRzdGF0ZSxcblx0XHRtb2RlbE5hbWUsXG5cdFx0cmVsYXRpb25OYW1lXG5cdCkgPT4ge1xuXHRcdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0XHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdFx0Y29uc3QgcmVsYXRpb25UeXBlID0gZ2V0UmVsYXRpb25UeXBlKCBzdGF0ZSwgbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgKTtcblx0XHRpZiAoIHJlbGF0aW9uVHlwZSA9PT0gJycgKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdGNvbnN0IHJlbGF0aW9uUHJpbWFyeUtleSA9IGdldFByaW1hcnlLZXkoIHJlbGF0aW9uTmFtZSApO1xuXHRcdHJldHVybiByZWxhdGlvblR5cGUgPT09ICdFRV9CZWxvbmdzX1RvX1JlbGF0aW9uJyA/XG5cdFx0XHRyZWxhdGlvblByaW1hcnlLZXkgOlxuXHRcdFx0YCR7IG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nKCByZWxhdGlvbk5hbWUgKSB9LiR7IHJlbGF0aW9uUHJpbWFyeUtleSB9YDtcblx0fSxcblx0KCBzdGF0ZSwgbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgKSA9PiB7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0XHRyZXR1cm4gW1xuXHRcdFx0c3RhdGUucmVsYXRpb25TY2hlbWEuZ2V0SW4oIFsgbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgXSwgJycgKSxcblx0XHRdO1xuXHR9LFxuKTtcblxuLyoqXG4gKiBTZWxlY3RvciByZXR1cm5pbmcgdGhlIHJlbGF0aW9uIHJlc3BvbnNlIHR5cGUgZm9yIHRoZSBnaXZlbiByZWxhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHR5cGUgZm9yIHRoZSByZWxhdGlvbiByZXR1cm5lZCBmb3IgdGhlIGdpdmVuIG1vZGVsIGFuZFxuICogcmVsYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRSZWxhdGlvblJlc3BvbnNlVHlwZSA9ICggc3RhdGUsIG1vZGVsTmFtZSwgcmVsYXRpb25OYW1lICkgPT4ge1xuXHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdHJlbGF0aW9uTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCByZWxhdGlvbk5hbWUgKTtcblx0Y29uc3QgcmVsYXRpb25TY2hlbWEgPSBnZXRSZWxhdGlvblNjaGVtYSggc3RhdGUsIG1vZGVsTmFtZSwgcmVsYXRpb25OYW1lICk7XG5cdHJldHVybiByZWxhdGlvblNjaGVtYSAhPT0gbnVsbCA/XG5cdFx0cmVsYXRpb25TY2hlbWEudHlwZSA6XG5cdFx0Jyc7XG59O1xuXG4vKipcbiAqIFNlbGVjdG9yIHJldHVybmluZyB3aGV0aGVyIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZSBnaXZlbiBtb2RlbCBuYW1lIGFuZFxuICogcmVsYXRpb24gbmFtZSBoYXMgYSBqb2luIHRhYmxlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uTmFtZVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyB0aGVyZSBpcyBhIGpvaW4gdGFibGUsIGZhbHNlIG1lYW5zIHRoZXJlIGlzbid0LlxuICovXG5leHBvcnQgY29uc3QgaGFzSm9pblRhYmxlUmVsYXRpb24gPSAoIHN0YXRlLCBtb2RlbE5hbWUsIHJlbGF0aW9uTmFtZSApID0+IHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdGNvbnN0IHJlbGF0aW9uVHlwZSA9IGdldFJlbGF0aW9uVHlwZSggc3RhdGUsIG1vZGVsTmFtZSwgcmVsYXRpb25OYW1lICk7XG5cdHJldHVybiBKT0lOX1JFTEFUSU9OX1RZUEVTLmluZGV4T2YoIHJlbGF0aW9uVHlwZSApID4gLTE7XG59O1xuXG4vKipcbiAqIFNlbGVjdG9yIHJldHVybmluZyB0aGUgcmVsYXRpb24gdHlwZSBkZXNjcmliaW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZVxuICogZ2l2ZW4gbW9kZWwgbmFtZSBhbmQgcmVsYXRpb24gbmFtZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gIFRoZSByZWxhdGlvbiB0eXBlIChlZy4gXCJFRV9IQUJUTV9SZWxhdGlvblwiKVxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVsYXRpb25UeXBlID0gKCBzdGF0ZSwgbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgKSA9PiB7XG5cdG1vZGVsTmFtZSA9IHNpbmd1bGFyTW9kZWxOYW1lKCBtb2RlbE5hbWUgKTtcblx0cmVsYXRpb25OYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIHJlbGF0aW9uTmFtZSApO1xuXHRjb25zdCByZWxhdGlvblNjaGVtYSA9IGdldFJlbGF0aW9uU2NoZW1hKCBzdGF0ZSwgbW9kZWxOYW1lLCByZWxhdGlvbk5hbWUgKTtcblx0cmV0dXJuIHJlbGF0aW9uU2NoZW1hICE9PSBudWxsID9cblx0XHRyZWxhdGlvblNjaGVtYS5yZWxhdGlvbl90eXBlIDpcblx0XHQnJztcbn07XG5cbi8qKlxuICogU2VsZWN0b3IgcmV0dXJuaW5nIHRoZSByZWxhdGlvbiBzY2hlbWEgZGVzY3JpYmluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiB0aGVcbiAqIGdpdmVuIG1vZGVsIG5hbWUgYW5kIHJlbGF0aW9uIG5hbWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcmV0dXJuIHtPYmplY3R8bnVsbH0gQW4gb2JqZWN0IG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gcmVsYXRpb24gc2NoZW1hLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVsYXRpb25TY2hlbWEgPSAoIHN0YXRlLCBtb2RlbE5hbWUsIHJlbGF0aW9uTmFtZSApID0+IHtcblx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRyZWxhdGlvbk5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggcmVsYXRpb25OYW1lICk7XG5cdHJldHVybiBzdGF0ZS5yZWxhdGlvblNjaGVtYS5nZXRJbiggWyBtb2RlbE5hbWUsIHJlbGF0aW9uTmFtZSBdLCBudWxsICk7XG59O1xuIiwiLyoqXG4gKiBSZWdpc3RlciBzdG9yZXNcbiAqL1xuaW1wb3J0ICcuL2V2ZW50ZXNwcmVzc28vc2NoZW1hJztcbmltcG9ydCAnLi9ldmVudGVzcHJlc3NvL2NvcmUnO1xuaW1wb3J0ICcuL2V2ZW50ZXNwcmVzc28vbGlzdHMnO1xuaW1wb3J0ICcuL2V2ZW50ZXNwcmVzc28vZmlsdGVyLXN0YXRlJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBFeGNlcHRpb24gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IHNwcmludGYsIF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0VtcHR5LCBpc01hcCB9IGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBnaXZlbiBrZXkgZXhpc3RzIGluIHRoZSBwcm92aWRlZCBlbnRpdHkgb2JqZWN0LlxuICogVGhpcyBpcyB1c2VkIHdoZW4gY2FsbGluZyBjb2RlIHdhbnRzIGFuIGV4Y2VwdGlvbiB0byBiZSB0aHJvd24uXG4gKlxuICogQHBhcmFtIHsgc3RyaW5nIH0ga2V5XG4gKiBAcGFyYW0geyBPYmplY3QgfSBlbnRpdHlcbiAqIEBwYXJhbSB7IHN0cmluZyB9IG1lc3NhZ2VcbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfSAgVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgcHJvdmlkZWQgZW50aXR5IGRvZXMgbm90XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSB0aGUgZ2l2ZW4ga2V5LlxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0RW50aXR5SGFzS2V5ID0gKCBrZXksIGVudGl0eSwgbWVzc2FnZSA9ICcnICkgPT4ge1xuXHRpZiAoIG1lc3NhZ2UgPT09ICcnICkge1xuXHRcdG1lc3NhZ2UgPSBzcHJpbnRmKFxuXHRcdFx0X18oXG5cdFx0XHRcdCdUaGUgcHJvdmlkZWQgZW50aXR5ICglcykgZG9lcyBub3QgaGF2ZSB0aGUgZ2l2ZW4gcHJvcGVydHkgKCVzKScsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHQpLFxuXHRcdFx0ZW50aXR5LFxuXHRcdFx0a2V5LFxuXHRcdCk7XG5cdH1cblx0aWYgKCAhIGVudGl0eS5oYXNPd25Qcm9wZXJ0eSgga2V5ICkgKSB7XG5cdFx0dGhyb3cgbmV3IEV4Y2VwdGlvbiggbWVzc2FnZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aCBpbiB0aGUgcHJvdmlkZWQgaW1tdXRhYmxlIG9iamVjdCBleGlzdHMuXG4gKiBUaGlzIGlzIHVzZWQgd2hlbiBjYWxsaW5nIGNvZGUgd2FudHMgYW4gZXhjZXB0aW9uIHRvIGJlIHRocm93biBpZiB0aGUgZ2l2ZW5cbiAqIHNlYXJjaCBwYXRoIGFycmF5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBpbW11dGFibGUgb2JqZWN0LlxuICpcbiAqIElmIHRoZSBpbW11dGFibGUgb2JqZWN0IGlzIHNldHVwIGxpa2UgdGhpczpcbiAqXG4gKiBpbW11dGFibGUgPSBJbW11dGFibGUuTWFwKCkuc2V0KCAnZXZlbnQnLCBJbW11dGFibGUuTWFwKCkuc2V0KCAxMCwgRXZlbnQgKSApO1xuICpcbiAqIFRoZW4gYSB2YWxpZCBzZWFyY2hhYmxlIHBhdGggY291bGQgYmUgYFsgJ2V2ZW50JywgMTAgXWAuICBBbiBpbnZhbGlkIHBhdGhcbiAqIHdvdWxkIGJlIGBbICdkYXRldGltZScsIDEwIF1gXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcGF0aCAgU2VhcmNoYWJsZSBwYXRoIGZvciB0aGUgaW1tdXRhYmxlIG9qYmVjdCB0byB2ZXJpZnkuXG4gKiBAcGFyYW0ge0ltbXV0YWJsZS5NYXB8SW1tdXRhYmxlLlNldH0gaW1tdXRhYmxlICBBbiBpbW11dGFibGUgb2JqZWN0IChNYXAsIFNldCwgTGlzdCBldGMpXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBBIGN1c3RvbSBtZXNzYWdlIHRvIHVzZS5cbiAqIEB0aHJvd3MgRXhjZXB0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRJbW11dGFibGVPYmplY3RIYXNQYXRoID0gKFxuXHRwYXRoLFxuXHRpbW11dGFibGUsXG5cdG1lc3NhZ2UgPSAnJ1xuKSA9PiB7XG5cdGlmICggbWVzc2FnZSA9PT0gJycgKSB7XG5cdFx0bWVzc2FnZSA9IHNwcmludGYoXG5cdFx0XHRfXyhcblx0XHRcdFx0J1RoZSBwcm92aWRlZCBpbW11dGFibGUgb2JqZWN0ICglcykgZG9lcyBub3QgaGF2ZSB0aGUgZ2l2ZW4gcGF0aCAoJXMpJyxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdCksXG5cdFx0XHRpbW11dGFibGUsXG5cdFx0XHRwYXRoLFxuXHRcdCk7XG5cdH1cblx0aWYgKCAhIGltbXV0YWJsZS5oYXNJbiggcGF0aCApICkge1xuXHRcdHRocm93IG5ldyBFeGNlcHRpb24oIG1lc3NhZ2UgKTtcblx0fVxufTtcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7Kn0gaXRlbXNcbiAqIEBwYXJhbSB7IHN0cmluZyB9ICBtZXNzYWdlXG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH0gVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IGFuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRJc0FycmF5ID0gKCBpdGVtcywgbWVzc2FnZSA9ICcnICkgPT4ge1xuXHRpZiAoIG1lc3NhZ2UgPT09ICcnICkge1xuXHRcdG1lc3NhZ2UgPSBfXyggJ1RoZSBwcm92aWRlZCB2YWx1ZSBpcyBub3QgYW4gYXJyYXkuJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHR9XG5cdGlmICggISBpc0FycmF5KCBpdGVtcyApICkge1xuXHRcdHRocm93IG5ldyBFeGNlcHRpb24oIG1lc3NhZ2UgKTtcblx0fVxufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgZW1wdHkgb3Igbm90LlxuICpcbiAqIENhbGwgdGhpcyB2YWxpZGF0b3Igd2hlbiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIHZhbHVlIGlzIE5PVCBlbXB0eS5cbiAqXG4gKiBAcGFyYW0geyp9IGl0ZW1zXG4gKiBAcGFyYW0geyBzdHJpbmcgfSBtZXNzYWdlXG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH0gVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRJc05vdEVtcHR5ID0gKCBpdGVtcywgbWVzc2FnZSA9ICcnICkgPT4ge1xuXHRpZiAoIG1lc3NhZ2UgPT09ICcnICkge1xuXHRcdG1lc3NhZ2UgPSBfXyhcblx0XHRcdCdUaGUgcHJvdmlkZWQgaXRlbXMgbXVzdCBub3QgYmUgZW1wdHknLFxuXHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHQpO1xuXHR9XG5cdGlmICggaXNFbXB0eSggaXRlbXMgKSApIHtcblx0XHR0aHJvdyBuZXcgRXhjZXB0aW9uKCBtZXNzYWdlICk7XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIE1hcCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHsqfSBpdGVtXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9XG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRJc01hcCA9ICggaXRlbSwgbWVzc2FnZSA9ICcnICkgPT4ge1xuXHRpZiAoIG1lc3NhZ2UgPT09ICcnICkge1xuXHRcdG1lc3NhZ2UgPSBfXyhcblx0XHRcdCdUaGUgcHJvdmlkZWQgaXRlbSBtdXN0IGJlIGEgTWFwIG9iamVjdCcsXG5cdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0KTtcblx0fVxuXHRpZiAoICEgaXNNYXAoIGl0ZW0gKSApIHtcblx0XHR0aHJvdyBuZXcgRXhjZXB0aW9uKCBtZXNzYWdlICk7XG5cdH1cbn07XG4iLCJleHBvcnQgY29uc3QgTU9ERUxfTkFNRSA9ICdhdHRlbmRlZSc7XG4iLCJleHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQge1xuXHRnZXRRdWVyeVN0cmluZyBhcyBiYXNlR2V0UXVlcnlTdHJpbmcsXG5cdFFVRVJZX09SREVSX0FTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG59IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IHsgUkVHSVNUUkFUSU9OX1NUQVRVU19JRFMgfSBmcm9tICcuLi9yZWdpc3RyYXRpb24vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IG9yZGVyQnlNYXAgPSB7XG5cdGlkOiAnQVRUX0lEJyxcblx0bGFzdE5hbWVPbmx5OiAnQVRUX2xuYW1lJyxcblx0Zmlyc3ROYW1lT25seTogJ0FUVF9mbmFtZScsXG5cdGZpcnN0VGhlbkxhc3ROYW1lOiBbICdBVFRfZm5hbWUnLCAnQVRUX2xuYW1lJyBdLFxuXHRsYXN0VGhlbkZpcnN0TmFtZTogWyAnQVRUX2xuYW1lJywgJ0FUVF9mbmFtZScgXSxcbn07XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0Zm9yRXZlbnRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yRGF0ZXRpbWVJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yVGlja2V0SWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclN0YXR1c0lkOiBQcm9wVHlwZXMub25lT2YoIFJFR0lTVFJBVElPTl9TVEFUVVNfSURTICksXG5cdGZvclJlZ2lzdHJhdGlvbklkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRzaG93R3JhdmF0YXI6IFByb3BUeXBlcy5ib29sLFxuXHRxdWVyeURhdGE6IFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdGxpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdG9yZGVyQnk6IFByb3BUeXBlcy5vbmVPZiggT2JqZWN0LmtleXMoIG9yZGVyQnlNYXAgKSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHR9XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRRdWVyeURhdGEgPSB7XG5cdHF1ZXJ5RGF0YToge1xuXHRcdGxpbWl0OiAxMDAsXG5cdFx0b3JkZXJCeTogJ2xhc3RUaGVuRmlyc3ROYW1lJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfQVNDLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWRcbiAqIGluIGEgUkVTVCBxdWVyeSBmcm9tIHRoZSBjb250ZXh0IG9mIGEgYXR0ZW5kZWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFx0XHRvcmRlckJ5XG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gXHRSZXR1cm5zIGFuIGFjdHVhbCBvcmRlckJ5IHN0cmluZ1xuICogXHRcdFx0XHRcdFx0Zm9yIHRoZSBSRVNUIHF1ZXJ5IGZvciB0aGUgcHJvdmlkZWQgYWxpYXNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcE9yZGVyQnkgPSAoIG9yZGVyQnkgKSA9PiB7XG5cdHJldHVybiBpc1VuZGVmaW5lZCggb3JkZXJCeU1hcFsgb3JkZXJCeSBdICkgP1xuXHRcdG9yZGVyQnkgOlxuXHRcdG9yZGVyQnlNYXBbIG9yZGVyQnkgXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHdoZXJlIGNvbmRpdGlvbnMgZm9yIGFuIGF0dGVuZGVlcyBlbmRwb2ludCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGZvckV2ZW50SWQgICAgXHRJRCBvZiBFdmVudCB0byByZXRyaWV2ZSBhdHRlbmRlZXMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRGF0ZXRpbWVJZCBcdElEIG9mIERhdGV0aW1lIHRvIHJldHJpZXZlIGF0dGVuZGVlcyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JUaWNrZXRJZCBcdFx0SUQgb2YgVGlja2V0IHRvIHJldHJpZXZlIGF0dGVuZGVlcyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JSZWdpc3RyYXRpb25JZFxuICogQHBhcmFtIHtzdHJpbmd9IGZvclN0YXR1c0lkIFx0XHRJRCBvZiBTdGF0dXMgdG8gcmV0cmlldmUgYXR0ZW5kZWVzIGZvclxuICogQHBhcmFtIHtzdHJpbmd9IHNob3dHcmF2YXRhciBcdEJvb2xlYW4gdG9nZ2xlIGZvciB3aGV0aGVyIHRvIGRpc3BsYXkgdXNlciBHcmF2YXRhclxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgICBcdFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICgge1xuXHRmb3JFdmVudElkID0gMCxcblx0Zm9yRGF0ZXRpbWVJZCA9IDAsXG5cdGZvclRpY2tldElkID0gMCxcblx0Zm9yUmVnaXN0cmF0aW9uSWQgPSAwLFxuXHRmb3JTdGF0dXNJZCA9ICdSQVAnLFxuXHRzaG93R3JhdmF0YXIgPSBmYWxzZSxcbn0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cblx0Ly8gZW5zdXJlIHRoYXQgZW50aXR5IElEcyBhcmUgaW50ZWdlcnNcblx0Zm9yUmVnaXN0cmF0aW9uSWQgPSBwYXJzZUludCggZm9yUmVnaXN0cmF0aW9uSWQsIDEwICk7XG5cdGZvclRpY2tldElkID0gcGFyc2VJbnQoIGZvclRpY2tldElkLCAxMCApO1xuXHRmb3JEYXRldGltZUlkID0gcGFyc2VJbnQoIGZvckRhdGV0aW1lSWQsIDEwICk7XG5cdGZvckV2ZW50SWQgPSBwYXJzZUludCggZm9yRXZlbnRJZCwgMTAgKTtcblxuXHQvLyBvcmRlciBvZiBwcmlvcml0eSBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuXHRpZiAoIGZvclJlZ2lzdHJhdGlvbklkICE9PSAwICYmICEgaXNOYU4oIGZvclJlZ2lzdHJhdGlvbklkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggYHdoZXJlW1JlZ2lzdHJhdGlvbi5SRUdfSURdPSR7IGZvclJlZ2lzdHJhdGlvbklkIH1gICk7XG5cdH0gZWxzZSBpZiAoIGZvclRpY2tldElkICE9PSAwICYmICEgaXNOYU4oIGZvclRpY2tldElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggYHdoZXJlW1JlZ2lzdHJhdGlvbi5UaWNrZXQuVEtUX0lEXT0keyBmb3JUaWNrZXRJZCB9YCApO1xuXHR9IGVsc2UgaWYgKCBmb3JEYXRldGltZUlkICE9PSAwICYmICEgaXNOYU4oIGZvckRhdGV0aW1lSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCBgd2hlcmVbUmVnaXN0cmF0aW9uLlRpY2tldC5EYXRldGltZS5EVFRfSURdPSR7IGZvckRhdGV0aW1lSWQgfWAgKTtcblx0fSBlbHNlIGlmICggZm9yRXZlbnRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JFdmVudElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggYHdoZXJlW1JlZ2lzdHJhdGlvbi5FVlRfSURdPSR7IGZvckV2ZW50SWQgfWAgKTtcblx0fVxuXG5cdGlmICggUkVHSVNUUkFUSU9OX1NUQVRVU19JRFMuaW5jbHVkZXMoIGZvclN0YXR1c0lkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggYHdoZXJlW1JlZ2lzdHJhdGlvbi5TdGF0dXMuU1RTX0lEXT0keyBmb3JTdGF0dXNJZCB9YCApO1xuXHR9XG5cdGlmICggc2hvd0dyYXZhdGFyID09PSB0cnVlICkge1xuXHRcdHdoZXJlLnB1c2goICdjYWxjdWxhdGU9dXNlcl9hdmF0YXInICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICogYXMgZGF0ZUZvcm1hdHMgZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBkYXRlIGZpZWxkcyBvbiBwcm92aWRlZCBlbnRpdGllcy4gIERvZXMgbm90IG11dGF0ZSBvcmlnaW5hbFxuICogZW50aXRpZXMuXG4gKlxuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdGllcyAgQW4gYXJyYXkgb2YgZW50aXR5IG9iamVjdHNcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyAgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcGFyYW0geyBzdHJpbmcgfSBmb3JtYXQgIFRoZSBmb3JtYXQgdG8gdHJhbnNmb3JtIHRoZSBkYXRlIGZpZWxkIHZhbHVlcyB0by5cbiAqIEBwYXJhbSB7IGJvb2xlYW4gfSBsb2NhbCAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbnZlcnQgdGhlIGRhdGUgZmllbGQgdmFsdWVcbiAqICAgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGZvciB0aGUgaG9zdC5cbiAqIEByZXR1cm4geyBBcnJheSB9ICBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIG5ldyBlbnRpdGllcyB3aXRoIHRoZSBkYXRlIGZpZWxkXG4gKiAgIHZhbHVlcyBmb3JtYXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdERhdGVzT25FbnRpdGllcyA9IChcblx0ZW50aXRpZXMgPSBbXSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuXHRmb3JtYXQgPSBkYXRlRm9ybWF0cy5EQVRFX1RJTUVfRk9STUFUX0lTTzg2MDEsXG5cdGxvY2FsID0gdHJ1ZSxcbikgPT4ge1xuXHRpZiAoIGlzRW1wdHkoIGVudGl0aWVzICkgfHwgaXNFbXB0eSggZW50aXR5RGF0ZUZpZWxkcyApICkge1xuXHRcdHJldHVybiBlbnRpdGllcztcblx0fVxuXHRjb25zdCBmb3JtYXR0ZWRFbnRpdGllcyA9IFtdO1xuXHRlbnRpdGllcy5mb3JFYWNoKCAoIGVudGl0eSApID0+IHtcblx0XHRmb3JtYXR0ZWRFbnRpdGllcy5wdXNoKCBmb3JtYXREYXRlc09uRW50aXR5KFxuXHRcdFx0ZW50aXR5LFxuXHRcdFx0ZW50aXR5RGF0ZUZpZWxkcyxcblx0XHRcdGZvcm1hdCxcblx0XHRcdGxvY2FsLFxuXHRcdCkgKTtcblx0fSApO1xuXHRyZXR1cm4gZm9ybWF0dGVkRW50aXRpZXM7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGRhdGUgZmllbGRzIG9uIHRoZSBwcm92aWRlZCBlbnRpdHkuICBEb2VzIG5vdCBtdXRhdGUgb3JpZ2luYWxcbiAqIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0geyBPYmplY3QgfSBlbnRpdHkgIEFuIGVudGl0eVxuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzICBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEBwYXJhbSB7IHN0cmluZyB9IGZvcm1hdCAgVGhlIGZvcm1hdCB0byB0cmFuc2Zvcm0gdGhlIGRhdGUgZmllbGQgdmFsdWVzIHRvLlxuICogQHBhcmFtIHsgYm9vbGVhbiB9IGxvY2FsICAgICAgV2hldGhlciBvciBub3QgdG8gY29udmVydCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZVxuICogICB0byB0aGUgbG9jYWwgdGltZXpvbmUgZm9yIHRoZSBob3N0LlxuICogQHJldHVybiB7IE9iamVjdCB9ICBSZXR1cm5zIGEgbmV3IGVudGl0eSB3aXRoIHRoZSBkYXRlIGZpZWxkIHZhbHVlcyBmb3JtYXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdERhdGVzT25FbnRpdHkgPSAoXG5cdGVudGl0eSA9IHt9LFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG5cdGZvcm1hdCA9IGRhdGVGb3JtYXRzLkRBVEVfVElNRV9GT1JNQVRfSVNPODYwMSxcblx0bG9jYWwgPSB0cnVlLFxuKSA9PiB7XG5cdGNvbnN0IG5ld0VudGl0eSA9IHsgLi4uZW50aXR5IH07XG5cdGVudGl0eURhdGVGaWVsZHMuZm9yRWFjaCggKCBkYXRlRmllbGQgKSA9PiB7XG5cdFx0aWYgKCBuZXdFbnRpdHlbIGRhdGVGaWVsZCBdICkge1xuXHRcdFx0bmV3RW50aXR5WyBkYXRlRmllbGQgXSA9IGRhdGVGb3JtYXRzLmZvcm1hdERhdGVTdHJpbmcoXG5cdFx0XHRcdG5ld0VudGl0eVsgZGF0ZUZpZWxkIF0sXG5cdFx0XHRcdGZvcm1hdCxcblx0XHRcdFx0bG9jYWwsXG5cdFx0XHQpO1xuXHRcdH1cblx0fSApO1xuXHRyZXR1cm4gbmV3RW50aXR5O1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBkYXRlIGZpZWxkcyB0byBteXNxbCBmb3JtYXQgb24gcHJvdmlkZWQgZW50aXRpZXMuICBEb2VzIG5vdFxuICogbXV0YXRlIG9yaWdpbmFsIGVudGl0aWVzLlxuICpcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXRpZXMgIEFuIGFycmF5IG9mIGVudGl0eSBvYmplY3RzXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHBhcmFtIHsgYm9vbGVhbiB9IGxvY2FsICAgICAgV2hldGhlciBvciBub3QgdG8gY29udmVydCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZVxuICogICB0byB0aGUgbG9jYWwgdGltZXpvbmUgZm9yIHRoZSBob3N0LlxuICogQHJldHVybiB7IEFycmF5IH0gIFJldHVybnMgYSBuZXcgYXJyYXkgb2YgbmV3IGVudGl0aWVzIHdpdGggdGhlIGRhdGUgZmllbGRcbiAqICAgdmFsdWVzIGZvcm1hdHRlZFxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RW50aXRpZXNEYXRlc1RvTXlzcWwgPSAoXG5cdGVudGl0aWVzID0gW10sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcblx0bG9jYWwgPSB0cnVlLFxuKSA9PiB7XG5cdHJldHVybiBmb3JtYXREYXRlc09uRW50aXRpZXMoXG5cdFx0ZW50aXRpZXMsXG5cdFx0ZW50aXR5RGF0ZUZpZWxkcyxcblx0XHRkYXRlRm9ybWF0cy5EQVRFX1RJTUVfRk9STUFUX01ZU1FMLFxuXHRcdGxvY2FsLFxuXHQpO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBkYXRlIGZpZWxkcyB0byBteXNxbCBmb3JtYXQgb24gcHJvdmlkZWQgZW50aXR5LiAgRG9lcyBub3RcbiAqIG11dGF0ZSBvcmlnaW5hbCBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHsgT2JqZWN0IH0gZW50aXR5ICBBbiBhcnJheSBvZiBlbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzICBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEBwYXJhbSB7IGJvb2xlYW4gfSBsb2NhbCAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbnZlcnQgdGhlIGRhdGUgZmllbGQgdmFsdWVcbiAqICAgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGZvciB0aGUgaG9zdC5cbiAqIEByZXR1cm4geyBPYmplY3QgfSAgUmV0dXJucyBhIG5ldyBlbnRpdHkgd2l0aCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZXMgZm9ybWF0dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRFbnRpdHlEYXRlc1RvTXlzcWwgPSAoXG5cdGVudGl0eSA9IHt9LFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG5cdGxvY2FsID0gdHJ1ZSxcbikgPT4ge1xuXHRyZXR1cm4gZm9ybWF0RGF0ZXNPbkVudGl0eShcblx0XHRlbnRpdHksXG5cdFx0ZW50aXR5RGF0ZUZpZWxkcyxcblx0XHRkYXRlRm9ybWF0cy5EQVRFX1RJTUVfRk9STUFUX01ZU1FMLFxuXHRcdGxvY2FsLFxuXHQpO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBkYXRlIGZpZWxkcyB0byB0aGUgc2l0ZSBmb3JtYXQgb24gcHJvdmlkZWQgZW50aXRpZXMuICBEb2VzIG5vdFxuICogbXV0YXRlIG9yaWdpbmFsIGVudGl0aWVzLlxuICpcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXRpZXMgIEFuIGFycmF5IG9mIGVudGl0eSBvYmplY3RzXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHBhcmFtIHsgYm9vbGVhbiB9IGxvY2FsICAgICAgV2hldGhlciBvciBub3QgdG8gY29udmVydCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZVxuICogICB0byB0aGUgbG9jYWwgdGltZXpvbmUgZm9yIHRoZSBob3N0LlxuICogQHJldHVybiB7IEFycmF5IH0gIFJldHVybnMgYSBuZXcgYXJyYXkgb2YgbmV3IGVudGl0aWVzIHdpdGggdGhlIGRhdGUgZmllbGRcbiAqICAgdmFsdWVzIGZvcm1hdHRlZFxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RW50aXRpZXNEYXRlc1RvU2l0ZSA9IChcblx0ZW50aXRpZXMgPSBbXSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuXHRsb2NhbCA9IHRydWUsXG4pID0+IHtcblx0cmV0dXJuIGZvcm1hdERhdGVzT25FbnRpdGllcyhcblx0XHRlbnRpdGllcyxcblx0XHRlbnRpdHlEYXRlRmllbGRzLFxuXHRcdGRhdGVGb3JtYXRzLkRBVEVfVElNRV9GT1JNQVRfU0lURSxcblx0XHRsb2NhbCxcblx0KTtcbn07XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGF0ZSBmaWVsZHMgdG8gdGhlIHNpdGUgZm9ybWF0IG9uIHByb3ZpZGVkIGVudGl0eS4gIERvZXMgbm90XG4gKiBtdXRhdGUgb3JpZ2luYWwgZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7IE9iamVjdCB9IGVudGl0eSAgQW4gYXJyYXkgb2YgZW50aXR5IG9iamVjdHNcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyAgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcGFyYW0geyBib29sZWFuIH0gbG9jYWwgICAgICBXaGV0aGVyIG9yIG5vdCB0byBjb252ZXJ0IHRoZSBkYXRlIGZpZWxkIHZhbHVlXG4gKiAgIHRvIHRoZSBsb2NhbCB0aW1lem9uZSBmb3IgdGhlIGhvc3QuXG4gKiBAcmV0dXJuIHsgT2JqZWN0IH0gIFJldHVybnMgYSBuZXcgZW50aXR5IHdpdGggdGhlIGRhdGUgZmllbGQgdmFsdWVzIGZvcm1hdHRlZFxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RW50aXR5RGF0ZXNUb1NpdGUgPSAoXG5cdGVudGl0eSA9IHt9LFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG5cdGxvY2FsID0gdHJ1ZSxcbikgPT4ge1xuXHRyZXR1cm4gZm9ybWF0RGF0ZXNPbkVudGl0eShcblx0XHRlbnRpdHksXG5cdFx0ZW50aXR5RGF0ZUZpZWxkcyxcblx0XHRkYXRlRm9ybWF0cy5EQVRFX1RJTUVfRk9STUFUX1NJVEUsXG5cdFx0bG9jYWwsXG5cdCk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGRhdGUgZmllbGQgdmFsdWVzIHRvIG1vbWVudCBvYmplY3RzIGZvciB0aGUgcHJvdmlkZWQgZW50aXRpZXMuXG4gKiBEb2VzIG5vdCBtdXRhdGUgb3JpZ2luYWwgZW50aXRpZXMuXG4gKlxuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdGllcyBBbiBhcnJheSBvZiBlbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHJldHVybiB7IEFycmF5IH0gUmV0dXJucyBhIG5ldyBhcnJheSBvZiBuZXcgZW50aXRpZXMgd2l0aCB0aGUgZGF0ZSBmaWVsZFxuICogICB2YWx1ZXMgY29udmVydGVkIHRvIG1vbWVudCBvYmplY3RzLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydEVudGl0aWVzRGF0ZXNUb01vbWVudCA9IChcblx0ZW50aXRpZXMgPSBbXSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuKSA9PiB7XG5cdGlmICggaXNFbXB0eSggZW50aXRpZXMgKSB8fCBpc0VtcHR5KCBlbnRpdHlEYXRlRmllbGRzICkgKSB7XG5cdFx0cmV0dXJuIGVudGl0aWVzO1xuXHR9XG5cdGNvbnN0IGZvcm1hdHRlZEVudGl0aWVzID0gW107XG5cdGVudGl0aWVzLmZvckVhY2goICggZW50aXR5ICkgPT4ge1xuXHRcdGZvcm1hdHRlZEVudGl0aWVzLnB1c2goIGNvbnZlcnRFbnRpdHlEYXRlc1RvTW9tZW50KFxuXHRcdFx0ZW50aXR5LFxuXHRcdFx0ZW50aXR5RGF0ZUZpZWxkcyxcblx0XHQpICk7XG5cdH0gKTtcblx0cmV0dXJuIGZvcm1hdHRlZEVudGl0aWVzO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBkYXRlIGZpZWxkIHZhbHVlcyB0byBtb21lbnQgb2JqZWN0cyBmb3IgdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAqIERvZXMgbm90IG11dGF0ZSBvcmlnaW5hbCBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHsgT2JqZWN0IH0gZW50aXR5IEFuIGVudGl0eS5cbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEByZXR1cm4geyBPYmplY3QgfSBSZXR1cm5zIGEgbmV3IGVudGl0eSB3aXRoIHRoZSBkYXRlIGZpZWxkIHZhbHVlcyBjb252ZXJ0ZWRcbiAqICAgdG8gbW9tZW50IG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0RW50aXR5RGF0ZXNUb01vbWVudCA9IChcblx0ZW50aXR5ID0ge30sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcbikgPT4ge1xuXHRjb25zdCBuZXdFbnRpdHkgPSB7IC4uLmVudGl0eSB9O1xuXHRlbnRpdHlEYXRlRmllbGRzLmZvckVhY2goICggZGF0ZUZpZWxkICkgPT4ge1xuXHRcdGlmICggbmV3RW50aXR5WyBkYXRlRmllbGQgXSApIHtcblx0XHRcdG5ld0VudGl0eVsgZGF0ZUZpZWxkIF0gPSBkYXRlRm9ybWF0cy5zdHJpbmdUb01vbWVudChcblx0XHRcdFx0bmV3RW50aXR5WyBkYXRlRmllbGQgXSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9ICk7XG5cdHJldHVybiBuZXdFbnRpdHk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzQXJyYXksIGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IFFVRVJZX09SREVSX0FTQyA9ICdBU0MnO1xuZXhwb3J0IGNvbnN0IFFVRVJZX09SREVSX0RFU0MgPSAnREVTQyc7XG5leHBvcnQgY29uc3QgQUxMT1dFRF9PUkRFUl9WQUxVRVMgPSBbICdhc2MnLCAnZGVzYycsICdBU0MnLCAnREVTQycgXTtcbmV4cG9ydCBjb25zdCBHUkVBVEVSX1RIQU4gPSBlbmNvZGVVUklDb21wb25lbnQoICc+JyApO1xuZXhwb3J0IGNvbnN0IExFU1NfVEhBTiA9IGVuY29kZVVSSUNvbXBvbmVudCggJzwnICk7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0FORF9FUVVBTCA9IGVuY29kZVVSSUNvbXBvbmVudCggJz49JyApO1xuZXhwb3J0IGNvbnN0IExFU1NfVEhBTl9BTkRfRVFVQUwgPSBlbmNvZGVVUklDb21wb25lbnQoICc8PScgKTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEBwYXJhbSB7IGZ1bmN0aW9uIH0gd2hlcmVDb25kaXRpb25zICBBIGZ1bmN0aW9uIGZvciBwcmVwcGluZyB0aGUgd2hlcmVcbiAqIFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uZGl0aW9ucyBmcm9tIHRoZSBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBmdW5jdGlvbiB9IG1hcE9yZGVyQnlcdFx0QSBmdW5jdGlvbiBmb3IgbWFwcGluZyBpbmNvbWluZyBvcmRlcl9ieVxuICogXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpbmdzIHRvIHRoZSB2YWx1ZSBuZWVkZWQgZm9yIHRoZVxuICogXHRcdFx0XHRcdFx0XHRcdFx0XHRxdWVyeV9zdHJpbmcuXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFx0XHRcdFx0XHRSZXR1cm5zIHRoZSBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVN0cmluZyA9IChcblx0cXVlcnlEYXRhID0ge30sXG5cdHdoZXJlQ29uZGl0aW9ucyA9ICgpID0+IG51bGwsXG5cdG1hcE9yZGVyQnkgPSAoIG9yZGVyQnkgKSA9PiBvcmRlckJ5LFxuKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gd2hlcmVDb25kaXRpb25zKCBxdWVyeURhdGEgKTtcblx0Y29uc3QgeyBsaW1pdCwgb3JkZXIsIG9yZGVyQnksIGRlZmF1bHRXaGVyZUNvbmRpdGlvbnMgfSA9IHF1ZXJ5RGF0YTtcblx0Y29uc3QgcXVlcnlQYXJhbXMgPSBbXTtcblx0aWYgKCAhIGlzVW5kZWZpbmVkKCBsaW1pdCApICkge1xuXHRcdHF1ZXJ5UGFyYW1zLnB1c2goIGBsaW1pdD0keyBsaW1pdCB9YCApO1xuXHR9XG5cdGlmICggISBpc1VuZGVmaW5lZCggZGVmYXVsdFdoZXJlQ29uZGl0aW9ucyApICkge1xuXHRcdHF1ZXJ5UGFyYW1zLnB1c2goXG5cdFx0XHRgZGVmYXVsdF93aGVyZV9jb25kaXRpb25zPSR7IGRlZmF1bHRXaGVyZUNvbmRpdGlvbnMgfWBcblx0XHQpO1xuXHR9XG5cdGlmICggISBpc1VuZGVmaW5lZCggbWFwT3JkZXJCeSggb3JkZXJCeSApICkgKSB7XG5cdFx0aWYgKCBpc0FycmF5KCBtYXBPcmRlckJ5KCBvcmRlckJ5ICkgKSApIHtcblx0XHRcdGZvciAoIGNvbnN0IGZpZWxkIG9mIG1hcE9yZGVyQnkoIG9yZGVyQnkgKSApIHtcblx0XHRcdFx0cXVlcnlQYXJhbXMucHVzaCggYG9yZGVyX2J5WyR7IGZpZWxkIH1dPSR7IG9yZGVyIH1gICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHF1ZXJ5UGFyYW1zLnB1c2goIGBvcmRlcj0keyBvcmRlciB9YCApO1xuXHRcdFx0cXVlcnlQYXJhbXMucHVzaCggYG9yZGVyX2J5PSR7IG1hcE9yZGVyQnkoIG9yZGVyQnkgKSB9YCApO1xuXHRcdH1cblx0fVxuXHRsZXQgcXVlcnlTdHJpbmcgPSBxdWVyeVBhcmFtcy5qb2luKCAnJicgKTtcblx0aWYgKCB3aGVyZSApIHtcblx0XHRxdWVyeVN0cmluZyArPSAnJicgKyB3aGVyZTtcblx0fVxuXHRyZXR1cm4gcXVlcnlTdHJpbmc7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ2NoZWNraW4nO1xuXG5leHBvcnQgY29uc3QgQ0hFQ0tJTl9TVEFUVVNfSUQgPSB7XG5cdFNUQVRVU19DSEVDS0VEX09VVDogZmFsc2UsXG5cdFNUQVRVU19DSEVDS0VEX0lOOiB0cnVlLFxuXHRTVEFUVVNfQ0hFQ0tFRF9ORVZFUjogMixcbn07XG5cbmV4cG9ydCBjb25zdCBDSEVDS0lOX1NUQVRVU19JRFMgPSB2YWx1ZXMoXG5cdENIRUNLSU5fU1RBVFVTX0lEXG4pO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHByZXR0eVN0YXR1cyB9IGZyb20gJy4uL3N0YXR1cyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRnZXRRdWVyeVN0cmluZyBhcyBiYXNlR2V0UXVlcnlTdHJpbmcsXG5cdFFVRVJZX09SREVSX0RFU0MsXG5cdEFMTE9XRURfT1JERVJfVkFMVUVTLFxufSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCAqIGFzIGNoZWNraW5TdGF0dXMgZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIERlc2NyaWJlZCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7e2F0dHJpYnV0ZXM6ICp9fVxuICovXG5leHBvcnQgY29uc3QgcXVlcnlEYXRhVHlwZXMgPSB7XG5cdGZvckRhdGV0aW1lSWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvckV2ZW50SWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclJlZ2lzdHJhdGlvbklkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JUaWNrZXRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yU3RhdHVzSWQ6IFByb3BUeXBlcy5vbmVPZiggY2hlY2tpblN0YXR1cy5DSEVDS0lOX1NUQVRVU19JRFMgKSxcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdDSEtfSUQnLFxuXHRcdFx0J1JFR19JRCcsXG5cdFx0XHQnQ0hLX3RpbWVzdGFtcCcsXG5cdFx0XHQnRFRUX0lEJyxcblx0XHRdICksXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0fSApLFxufTtcblxuZXhwb3J0IGNvbnN0IG9wdGlvbnNFbnRpdHlNYXAgPSB7XG5cdGRlZmF1bHQ6ICgpID0+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRsYWJlbDogcHJldHR5U3RhdHVzKFxuXHRcdFx0XHRcdGNoZWNraW5TdGF0dXMuQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfT1VUXG5cdFx0XHRcdCksXG5cdFx0XHRcdHZhbHVlOiBjaGVja2luU3RhdHVzLkNIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX09VVCxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGxhYmVsOiBwcmV0dHlTdGF0dXMoXG5cdFx0XHRcdFx0Y2hlY2tpblN0YXR1cy5DSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9JTlxuXHRcdFx0XHQpLFxuXHRcdFx0XHR2YWx1ZTogY2hlY2tpblN0YXR1cy5DSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9JTixcblx0XHRcdH0sXG5cdFx0XTtcblx0fSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHR9XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRRdWVyeURhdGEgPSB7XG5cdHF1ZXJ5RGF0YToge1xuXHRcdGxpbWl0OiAxMDAsXG5cdFx0b3JkZXJCeTogJ0NIS190aW1lc3RhbXAnLFxuXHRcdG9yZGVyOiBRVUVSWV9PUkRFUl9ERVNDLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGEgcmVnaXN0cmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHR0aW1lc3RhbXA6ICdDSEtfdGltZXN0YW1wJyxcblx0XHRpZDogJ0NIS19JRCcsXG5cdH07XG5cdHJldHVybiBpc1VuZGVmaW5lZCggb3JkZXJCeU1hcFsgb3JkZXJCeSBdICkgP1xuXHRcdG9yZGVyQnkgOlxuXHRcdG9yZGVyQnlNYXBbIG9yZGVyQnkgXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHdoZXJlIGNvbmRpdGlvbnMgZm9yIGFuIHJlZ2lzdHJhdGlvbnMgZW5kcG9pbnQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JEYXRldGltZUlkICAgIFx0SUQgb2YgRXZlbnQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JFdmVudElkICAgIElEIG9mIEF0dGVuZGVlIHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yUmVnaXN0cmF0aW9uSWQgSUQgb2YgVHJhbnNhY3Rpb24gdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JUaWNrZXRJZCBcdFx0SUQgb2YgVGlja2V0IHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yU3RhdHVzSWQgXHRcdElEIG9mIFN0YXR1cyB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgICBcdFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICgge1xuXHRmb3JEYXRldGltZUlkID0gMCxcblx0Zm9yRXZlbnRJZCA9IDAsXG5cdGZvclJlZ2lzdHJhdGlvbklkID0gMCxcblx0Zm9yVGlja2V0SWQgPSAwLFxuXHRmb3JTdGF0dXNJZCA9ICcnLFxufSApID0+IHtcblx0Y29uc3Qgd2hlcmUgPSBbXTtcblx0Zm9yRXZlbnRJZCA9IHBhcnNlSW50KCBmb3JFdmVudElkLCAxMCApO1xuXHRpZiAoIGZvckV2ZW50SWQgIT09IDAgJiYgISBpc05hTiggZm9yRXZlbnRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtSZWdpc3RyYXRpb24uRVZUX0lEXT0nICsgZm9yRXZlbnRJZCApO1xuXHR9XG5cdGZvckRhdGV0aW1lSWQgPSBwYXJzZUludCggZm9yRGF0ZXRpbWVJZCwgMTAgKTtcblx0aWYgKCBmb3JEYXRldGltZUlkICE9PSAwICYmICEgaXNOYU4oIGZvckRhdGV0aW1lSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRFRUX0lEXT0nICsgZm9yRGF0ZXRpbWVJZCApO1xuXHR9XG5cdGZvclJlZ2lzdHJhdGlvbklkID0gcGFyc2VJbnQoIGZvclJlZ2lzdHJhdGlvbklkLCAxMCApO1xuXHRpZiAoIGZvclJlZ2lzdHJhdGlvbklkICE9PSAwICYmICEgaXNOYU4oIGZvclJlZ2lzdHJhdGlvbklkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1JFR19JRF09JyArIGZvclJlZ2lzdHJhdGlvbklkICk7XG5cdH1cblx0Zm9yVGlja2V0SWQgPSBwYXJzZUludCggZm9yVGlja2V0SWQsIDEwICk7XG5cdGlmICggZm9yVGlja2V0SWQgIT09IDAgJiYgISBpc05hTiggZm9yVGlja2V0SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbUmVnaXN0cmF0aW9uLlRLVF9JRF09JyArIGZvclRpY2tldElkICk7XG5cdH1cblx0aWYgKCBmb3JTdGF0dXNJZCAhPT0gJycgJiYgZm9yU3RhdHVzSWQgIT09IG51bGwgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW0NIS19pbl09JyArIGZvclN0YXR1c0lkICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCJpbXBvcnQgeyB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgTU9ERUxfTkFNRSA9ICdkYXRldGltZSc7XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9TVEFUVVNfSUQgPSB7XG5cdEFDVElWRTogJ0RUQScsXG5cdENBTkNFTExFRDogJ0RUQycsXG5cdEVYUElSRUQ6ICdEVEUnLFxuXHRJTkFDVElWRTogJ0RUSScsXG5cdFBPU1RQT05FRDogJ0RUUCcsXG5cdFNPTERfT1VUOiAnRFRTJyxcblx0VFJBU0hFRDogJ0RUVCcsXG5cdFVQQ09NSU5HOiAnRFRVJyxcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9TVEFUVVNfSURTID0gdmFsdWVzKCBEQVRFVElNRV9TVEFUVVNfSUQgKTtcblxuZXhwb3J0IGNvbnN0IE1JTlVURV9JTl9TRUNPTkRTID0gNjA7XG5leHBvcnQgY29uc3QgSE9VUl9JTl9TRUNPTkRTID0gTUlOVVRFX0lOX1NFQ09ORFMgKiA2MDtcbmV4cG9ydCBjb25zdCBEQVlfSU5fU0VDT05EUyA9IEhPVVJfSU5fU0VDT05EUyAqIDI0O1xuZXhwb3J0IGNvbnN0IFdFRUtfSU5fU0VDT05EUyA9IEhPVVJfSU5fU0VDT05EUyAqIDc7XG5leHBvcnQgY29uc3QgTU9OVEhfSU5fU0VDT05EUyA9IERBWV9JTl9TRUNPTkRTICogMzA7XG4iLCIvKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICogYXMgYmFzZUZvcm1hdHRlciBmcm9tICcuLi9iYXNlLWRhdGUtZm9ybWF0dGVyJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGZvck93biwgcHVsbEF0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG5cdFRJTUVfRk9STUFUX1NJVEUsXG5cdERBVEVfVElNRV9GT1JNQVRfU0lURSxcblx0YWxsRGF0ZVRpbWVzQXNTdHJpbmcsXG5cdFNFUEFSQVRPUl9TUEFDRV9EQVNIX1NQQUNFLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogQXJyYXkgb2YgZmllbGRzIHRoYXQgaGF2ZSBkYXRlIGluZm9ybWF0aW9uXG4gKiBAdHlwZSB7IHN0cmluZ1tdIH1cbiAqL1xuZXhwb3J0IGNvbnN0IERBVEVfRklFTERTID0gW1xuXHQnRFRUX0VWVF9zdGFydCcsXG5cdCdEVFRfRVZUX2VuZCcsXG5dO1xuXG4vKipcbiAqIFdpbGwgaG9sZCB0aGUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGxpc3Qgb2YgZm9ybWF0dGVycyBmb3IgZGF0ZXMuICBGb3JtYXR0ZXJzXG4gKiBhcmUgZnVuY3Rpb25zIGRlZmluZWQgaW4gYC4uL2Jhc2UtZGF0ZS1mb3JtYXR0ZXJgIGJ1dCB3cmFwcGVkIGJ5IGR5bmFtaWNhbGx5XG4gKiBnZW5lcmF0ZWQgZnVuY3Rpb25zIChjYWxsYWJsZSB2aWEgc2FtZSBuYW1lKSB0aGF0IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZSB0aGVcbiAqIGNvcnJlY3QgZGF0ZUZpZWxkc01hcCBhcmd1bWVudC5cbiAqXG4gKiBFZy4gIGAuLi9iYXNlLWRhdGUtZm9ybWF0dGVyIGhhc1xuICogZm9ybWF0RGF0ZXNPbkVudGl0aWVzKCBlbnRpdGllcywgZW50aXR5RGF0ZUZpZWxkcywgZm9ybWF0LCBsb2NhbCApO1xuICogV2hlbiBpbXBvcnRpbmcgYGZvcm1hdERhdGVzT25FbnRpdGllc2AgZnJvbSB0aGlzIGZpbGUsIHlvdSBjYW4gY2FsbCBpdCBzaW1wbHlcbiAqIGJ5IGRvaW5nIHRoaXM6XG4gKlxuICogZm9ybWF0RGF0ZXNPbkVudGl0aWVzKCBkYXRlVGltZU9iamVjdHMsIGZvcm1hdCwgbG9jYWwgKTtcbiAqXG4gKiBOb3RpY2UgdGhhdCBpdCdzIGNhbGxlZCB3aXRob3V0IHRoZSBlbnRpdHlEYXRlRmllbGRzIGFyZ3VtZW50IGJlY2F1c2UgdGhhdCdzXG4gKiBwcm92aWRlZCBieSB0aGlzIGdlbmVyYXRvci5cbiAqXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IGZvcm1hdHRlcnMgPSB7fTtcblxuZm9yT3duKCBiYXNlRm9ybWF0dGVyLCAoIGltcGxlbWVudGF0aW9uLCBmdW5jdGlvbk5hbWUgKSA9PiB7XG5cdGZvcm1hdHRlcnNbIGZ1bmN0aW9uTmFtZSBdID0gKCAuLi5pbmNvbWluZ0FyZ3MgKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3RBcmcgPSBwdWxsQXQoIGluY29taW5nQXJncywgMCApO1xuXHRcdHJldHVybiBpbXBsZW1lbnRhdGlvbiggZmlyc3RBcmdbIDAgXSwgREFURV9GSUVMRFMsIC4uLmluY29taW5nQXJncyApO1xuXHR9O1xufSApO1xuXG4vKipcbiAqIFRoaXMgd2lsbCBzcGl0IG91dCBhIHByZXR0aWZpZWQgbGFiZWwgZm9yIHRoZSBwcm92aWRlZCBEYXRlVGltZSBlbnRpdHkuXG4gKlxuICogSWYgdGhlcmUgaXMgYSBEVFRfbmFtZSwgdGhlIGZvcm1hdCB3aWxsIGJlOlxuICogYERUVF9uYW1lIChEVFRfRVZUX3N0YXJ0IC0gRFRUX0VWVF9lbmQpYFxuICpcbiAqIElmIG5vIERUVF9uYW1lIHRoZW46XG4gKiBgRFRUX0VWVF9zdGFydCAtIERUVF9FVlRfZW5kYFxuICpcbiAqIFRoaXMgd2lsbCBhY2NvdW50IGZvciBpZiBib3RoIHN0YXJ0IGFuZCBlbmQgYXJlIGluIHRoZSBzYW1lIGRheSBhbmQgc2ltcGx5XG4gKiB1c2UgdGltZSBmb3IgdGhlIGVuZCBwYXJ0LlxuICpcbiAqIEBwYXJhbSB7IEJhc2VFbnRpdHkgfSBEYXRlVGltZUVudGl0eVxuICogQHJldHVybiB7IHN0cmluZyB9ICBBIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwcm92aWRlZFxuICogICAgRGF0ZVRpbWVFbnRpdHkuXG4gKi9cbmV4cG9ydCBjb25zdCBwcmV0dHlEYXRlRnJvbURhdGVUaW1lID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0bGV0IGNvbnRlbnQgPSAnJztcblx0aWYgKCBpc01vZGVsRW50aXR5T2ZNb2RlbCggRGF0ZVRpbWVFbnRpdHksICdkYXRldGltZScgKSApIHtcblx0XHRpZiAoIERhdGVUaW1lRW50aXR5LkRUVF9FVlRfc3RhcnQuaGFzU2FtZShcblx0XHRcdERhdGVUaW1lRW50aXR5LkRUVF9FVlRfZW5kLFxuXHRcdFx0J2RheSdcblx0XHQpICkge1xuXHRcdFx0Y29udGVudCArPSBhbGxEYXRlVGltZXNBc1N0cmluZyhcblx0XHRcdFx0U0VQQVJBVE9SX1NQQUNFX0RBU0hfU1BBQ0UsXG5cdFx0XHRcdERhdGVUaW1lRW50aXR5LkRUVF9FVlRfc3RhcnQudG9Gb3JtYXQoXG5cdFx0XHRcdFx0REFURV9USU1FX0ZPUk1BVF9TSVRFXG5cdFx0XHRcdCksXG5cdFx0XHRcdERhdGVUaW1lRW50aXR5LkRUVF9FVlRfZW5kLnRvRm9ybWF0KFxuXHRcdFx0XHRcdFRJTUVfRk9STUFUX1NJVEVcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRlbnQgKz0gYWxsRGF0ZVRpbWVzQXNTdHJpbmcoXG5cdFx0XHRcdFNFUEFSQVRPUl9TUEFDRV9EQVNIX1NQQUNFLFxuXHRcdFx0XHREYXRlVGltZUVudGl0eS5EVFRfRVZUX3N0YXJ0LnRvRm9ybWF0KFxuXHRcdFx0XHRcdERBVEVfVElNRV9GT1JNQVRfU0lURVxuXHRcdFx0XHQpLFxuXHRcdFx0XHREYXRlVGltZUVudGl0eS5EVFRfRVZUX2VuZC50b0Zvcm1hdChcblx0XHRcdFx0XHREQVRFX1RJTUVfRk9STUFUX1NJVEVcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGNvbnRlbnQgPSBEYXRlVGltZUVudGl0eS5EVFRfbmFtZSA/XG5cdFx0XHRgJHsgRGF0ZVRpbWVFbnRpdHkuRFRUX25hbWUgfSAoJHsgY29udGVudCB9KWAgOlxuXHRcdFx0Y29udGVudDtcblx0fVxuXHRyZXR1cm4gY29udGVudDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7XG4iLCJleHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybWF0dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdHVzLWhlbHBlcic7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcblx0R1JFQVRFUl9USEFOLFxuXHRHUkVBVEVSX1RIQU5fQU5EX0VRVUFMLFxuXHRMRVNTX1RIQU5fQU5EX0VRVUFMLFxufSBmcm9tICcuLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IG5vd0RhdGVBbmRUaW1lID0gbW9tZW50KCk7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdEVFRfbmFtZScsXG5cdFx0XHQnRFRUX0lEJyxcblx0XHRcdCdzdGFydF9kYXRlJyxcblx0XHRcdCdlbmRfZGF0ZScsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdFx0c2hvd0V4cGlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXHRcdG1vbnRoOiBQcm9wVHlwZXMubW9udGgsXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHRcdHNob3dFeHBpcmVkOiBib29sZWFuXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdzdGFydF9kYXRlJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfREVTQyxcblx0XHRzaG93RXhwaXJlZDogZmFsc2UsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHN0YXJ0X2RhdGU6ICdEVFRfRVZUX3N0YXJ0Jyxcblx0XHRlbmRfZGF0ZTogJ0RUVF9FVlRfZW5kJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gZXZlbnRzIGVuZHBvaW50IHJlcXVlc3QgdXNpbmcgcHJvdmlkZWRcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JFdmVudElkICBJRCBmb3IgRXZlbnQgdG8gcmV0cmlldmUgZGF0ZXRpbWVzIGZyb21cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd0V4cGlyZWQgIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgZXhwaXJlZCBldmVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9udGggICAgICAgICBSZXR1cm4gZXZlbnRzIGZvciB0aGUgZ2l2ZW4gbW9udGguICBDYW4gYmUgYW55XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGFueSBtb250aCBmb3JtYXQgcmVjb2duaXplZCBieSBtb21lbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgIFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICgge1xuXHRmb3JFdmVudElkID0gMCxcblx0c2hvd0V4cGlyZWQgPSBmYWxzZSxcblx0bW9udGggPSAnbm9uZScsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXHRpZiAoICEgc2hvd0V4cGlyZWQgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtEVFRfRVZUX2VuZCoqZXhwaXJlZF1bXT0nICsgR1JFQVRFUl9USEFOICtcblx0XHRcdCcmd2hlcmVbRFRUX0VWVF9lbmQqKmV4cGlyZWRdW109JyArXG5cdFx0XHRub3dEYXRlQW5kVGltZS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0fVxuXHRpZiAoIG1vbnRoICYmIG1vbnRoICE9PSAnbm9uZScgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtEVFRfRVZUX3N0YXJ0XVtdPScgKyBHUkVBVEVSX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbRFRUX0VWVF9zdGFydF1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLnN0YXJ0T2YoICdtb250aCcgKS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RUVF9FVlRfZW5kXVtdPScgKyBMRVNTX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbRFRUX0VWVF9lbmRdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5lbmRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGlmICggcGFyc2VJbnQoIGZvckV2ZW50SWQsIDEwICkgIT09IDAgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW0V2ZW50LkVWVF9JRF09JyArIGZvckV2ZW50SWQgKTtcblx0fVxuXHRyZXR1cm4gd2hlcmUuam9pbiggJyYnICk7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIHF1ZXJ5IHN0cmluZyBmb3IgdXNlIGJ5IGEgUkVTVCByZXF1ZXN0IGdpdmVuIGEgc2V0IG9mIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IE9iamVjdCB9IHF1ZXJ5RGF0YVxuICogQHJldHVybiB7IHN0cmluZyB9ICBSZXR1cm5zIHRoZSBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVN0cmluZyA9ICggcXVlcnlEYXRhID0ge30gKSA9PiB7XG5cdHF1ZXJ5RGF0YSA9IHsgLi4uZGVmYXVsdFF1ZXJ5RGF0YS5xdWVyeURhdGEsIC4uLnF1ZXJ5RGF0YSB9O1xuXHRyZXR1cm4gYmFzZUdldFF1ZXJ5U3RyaW5nKCBxdWVyeURhdGEsIHdoZXJlQ29uZGl0aW9ucywgbWFwT3JkZXJCeSApO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IERBVEVUSU1FX1NUQVRVU19JRCwgTU9ERUxfTkFNRSwgTU9OVEhfSU5fU0VDT05EUyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn1cbiAqL1xuY29uc3QgYXNzZXJ0RGF0ZVRpbWVFbnRpdHkgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIERhdGVUaW1lRW50aXR5LCBNT0RFTF9OQU1FICkgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdCdUaGUgcHJvdmlkZWQgZW50aXR5IGlzIG5vdCBhIGRhdGV0aW1lIGluc3RhbmNlJ1xuXHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVUcmFzaGVkIGlmIHRydWUgd2lsbCBub3QgZmlsdGVyIG91dCB0cmFzaGVkIGVudGl0aWVzXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGV2ZW50IGRhdGUgaXMgdmFsaWQgZW50aXR5IG9yIGFyY2hpdmVcbiAqL1xuY29uc3QgaXNWYWxpZEVudGl0eU9yQXJjaGl2ZSA9ICggRGF0ZVRpbWVFbnRpdHksIGluY2x1ZGVUcmFzaGVkICkgPT4ge1xuXHRyZXR1cm4gKCBpbmNsdWRlVHJhc2hlZCAmJiBhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKSApIHx8XG4gICAgICAgICggISBpbmNsdWRlVHJhc2hlZCAmJiAhIGlzVHJhc2hlZCggRGF0ZVRpbWVFbnRpdHkgKSApO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZVRyYXNoZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IHRyYXNoZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZXZlbnQgZGF0ZSBpcyBvY2N1cnJpbmcgTk9XXG4gKi9cbmV4cG9ydCBjb25zdCBpc0FjdGl2ZSA9ICggRGF0ZVRpbWVFbnRpdHksIGluY2x1ZGVUcmFzaGVkID0gZmFsc2UgKSA9PiB7XG5cdHJldHVybiBpc1ZhbGlkRW50aXR5T3JBcmNoaXZlKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgKSAmJlxuXHREYXRlVGltZUVudGl0eS5zdGFydC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPCAwICYmXG5cdERhdGVUaW1lRW50aXR5LmVuZC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPiAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZVRyYXNoZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IHRyYXNoZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZW5kIGRhdGUgaXMgaW4gdGhlIHBhc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRXhwaXJlZCA9ICggRGF0ZVRpbWVFbnRpdHksIGluY2x1ZGVUcmFzaGVkID0gZmFsc2UgKSA9PiB7XG5cdHJldHVybiBpc1ZhbGlkRW50aXR5T3JBcmNoaXZlKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgKSAmJlxuXHREYXRlVGltZUVudGl0eS5lbmQuZGlmZk5vdygpLmFzU2Vjb25kcygpIDwgMDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVUcmFzaGVkIGlmIHRydWUgd2lsbCBub3QgZmlsdGVyIG91dCB0cmFzaGVkIGVudGl0aWVzXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGVuZCBkYXRlIGlzIGluIHRoZSBwYXN0XG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlY2VudGx5RXhwaXJlZCA9ICggRGF0ZVRpbWVFbnRpdHksIGluY2x1ZGVUcmFzaGVkID0gZmFsc2UgKSA9PiB7XG5cdHJldHVybiBpc1ZhbGlkRW50aXR5T3JBcmNoaXZlKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgKSAmJlxuXHREYXRlVGltZUVudGl0eS5lbmQuZGlmZk5vdygpLmFzU2Vjb25kcygpIDwgMCAmJlxuXHREYXRlVGltZUVudGl0eS5lbmQuZGlmZk5vdygpLmFzU2Vjb25kcygpID4gKCBNT05USF9JTl9TRUNPTkRTICogLTEgKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVUcmFzaGVkIGlmIHRydWUgd2lsbCBub3QgZmlsdGVyIG91dCB0cmFzaGVkIGVudGl0aWVzXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldHMgc29sZCBtZWV0cyBvciBleGNlZWRzIHJlZ2lzdHJhdGlvbiBsaW1pdFxuICovXG5leHBvcnQgY29uc3QgaXNTb2xkT3V0ID0gKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgPSBmYWxzZSApID0+IHtcblx0aWYgKFxuXHRcdCggaW5jbHVkZVRyYXNoZWQgJiYgISBhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKSApIHx8XG5cdFx0KCAhIGluY2x1ZGVUcmFzaGVkICYmIGlzVHJhc2hlZCggRGF0ZVRpbWVFbnRpdHkgKSApXG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRjb25zdCBjYXAgPSBEYXRlVGltZUVudGl0eS5yZWdMaW1pdDtcblx0cmV0dXJuICggY2FwICE9PSBudWxsICYmIGNhcCAhPT0gJ0lORicgJiYgY2FwICE9PSBJbmZpbml0eSAmJiBjYXAgIT09IC0xICkgJiZcblx0XHREYXRlVGltZUVudGl0eS5zb2xkID49IGNhcDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVUcmFzaGVkIGlmIHRydWUgd2lsbCBub3QgZmlsdGVyIG91dCB0cmFzaGVkIGVudGl0aWVzXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHN0YXJ0IGRhdGUgaXMgaW4gdGhlIGZ1dHVyZVxuICovXG5leHBvcnQgY29uc3QgaXNVcGNvbWluZyA9ICggRGF0ZVRpbWVFbnRpdHksIGluY2x1ZGVUcmFzaGVkID0gZmFsc2UgKSA9PiB7XG5cdHJldHVybiBpc1ZhbGlkRW50aXR5T3JBcmNoaXZlKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgKSAmJlxuXHREYXRlVGltZUVudGl0eS5zdGFydC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPiAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZGF0ZSBpcyBhcmNoaXZlZFxuICovXG5leHBvcnQgY29uc3QgaXNUcmFzaGVkID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdHJldHVybiBEYXRlVGltZUVudGl0eS5kZWxldGVkO1xufTtcblxuLy8gUExaIE5PVEU6XG4vLyBsZWF2aW5nIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBiZWNhdXNlIGl0IGNhbiBiZSB1c2VkIGlmL3doZW4gd2UgZGVjaWRlXG4vLyB0byBmdWxseSBzdXBwb3J0IHRoZXNlIGRhdGV0aW1lIHN0YXR1c2VzIHdoaWNoIGFyZSBjdXJyZW50bHkgZGVmaW5lZFxuLy8gb24gdGhlIEVFX0RhdGV0aW1lIG1vZGVsIG9iamVjdCBjbGFzcyBidXQgbm90IHlldCB1c2VkXG5cbi8vIC8qKlxuLy8gICogQGZ1bmN0aW9uXG4vLyAgKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4vLyAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGRhdGUgaXMgY2FuY2VsbGVkXG4vLyAgKi9cbi8vIGV4cG9ydCBjb25zdCBpc0NhbmNlbGxlZCA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG4vLyBcdGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApO1xuLy8gXHRyZXR1cm4gRGF0ZVRpbWVFbnRpdHkuY2FuY2VsbGVkO1xuLy8gfTtcbi8vXG4vLyAvKipcbi8vICAqIEBmdW5jdGlvblxuLy8gICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuLy8gICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBkYXRlIGhhcyBiZWVuIHBvc3Rwb25lZFxuLy8gICovXG4vLyBleHBvcnQgY29uc3QgaXNQb3N0cG9uZWQgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuLy8gXHRhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKTtcbi8vIFx0cmV0dXJuIERhdGVUaW1lRW50aXR5LnBvc3Rwb25lZDtcbi8vIH07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9IHN0YXR1cyBJRFxuICovXG5leHBvcnQgY29uc3Qgc3RhdHVzID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0aWYgKCBpc1RyYXNoZWQoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5UUkFTSEVEO1xuXHR9XG5cdGlmICggaXNFeHBpcmVkKCBEYXRlVGltZUVudGl0eSApICkge1xuXHRcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuRVhQSVJFRDtcblx0fVxuXHRpZiAoIGlzU29sZE91dCggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELlNPTERfT1VUO1xuXHR9XG5cdGlmICggaXNVcGNvbWluZyggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELlVQQ09NSU5HO1xuXHR9XG5cdGlmICggaXNBY3RpdmUoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5BQ1RJVkU7XG5cdH1cblx0Ly8gUExaIFNFRSBOT1RFIEFCT1ZFXG5cdC8vIGlmICggaXNDYW5jZWxsZWQoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdC8vIFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5DQU5DRUxMRUQ7XG5cdC8vIH1cblx0Ly8gaWYgKCBpc1Bvc3Rwb25lZCggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0Ly8gXHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELlBPU1RQT05FRDtcblx0Ly8gfVxuXHRhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKTtcblx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5JTkFDVElWRTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgIENTUyBjbGFzcyBmb3IgdGhlIGJhY2tncm91bmQgY29sb3JcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJhY2tncm91bmRDb2xvckNsYXNzID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0cmV0dXJuIGBlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci0keyBzdGF0dXMoIERhdGVUaW1lRW50aXR5ICkgfWA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSBkYXRlIHN0YXR1c1xuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0ZVRpbWVTdGF0dXNUZXh0TGFiZWwgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRsZXQgZGF0ZVN0YXR1cyA9ICcnO1xuXHRzd2l0Y2ggKCBzdGF0dXMoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0Y2FzZSBEQVRFVElNRV9TVEFUVVNfSUQuU09MRF9PVVQgOlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnc29sZCBvdXQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5FWFBJUkVEIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2V4cGlyZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5VUENPTUlORyA6XG5cdFx0XHRkYXRlU3RhdHVzID0gX18oICd1cGNvbWluZycsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELkFDVElWRSA6XG5cdFx0XHRkYXRlU3RhdHVzID0gX18oICdhY3RpdmUnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5UUkFTSEVEIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2FyY2hpdmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBEQVRFVElNRV9TVEFUVVNfSUQuQ0FOQ0VMTEVEIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2NhbmNlbGxlZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELlBPU1RQT05FRCA6XG5cdFx0XHRkYXRlU3RhdHVzID0gX18oICdwb3N0cG9uZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5JTkFDVElWRSA6XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2luYWN0aXZlJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGRhdGVTdGF0dXM7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgbWFwVmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGVuZHBvaW50cyB9IGZyb20gJy4vZW5kcG9pbnRzLmpzJztcblxuLyoqXG4gKiBSZWNlaXZlcyBhbiBvYmplY3QgbWFwIG9mIG1vZGVsTmFtZSB0byBlbmRwb2ludCBhbmQgbWFwcyB0aGF0IHRvIGEgZGVmYXVsdFxuICogbWFwIG9mIG1vZGVsTmFtZSB0byBlbXB0eSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHsgT2JqZWN0IH0gbW9kZWxOYW1lRW5kcG9pbnRzXG4gKiBAcmV0dXJuIHsgT2JqZWN0IH0gQW4gb2JqZWN0IG9mIHsgeyBtb2RlbE5hbWUgfSA6IHt9IH1cbiAqL1xuY29uc3QgbWFwVG9PYmplY3RWYWx1ZXMgPSAoIG1vZGVsTmFtZUVuZHBvaW50cyApID0+IHtcblx0cmV0dXJuIG1hcFZhbHVlcyggbW9kZWxOYW1lRW5kcG9pbnRzLFxuXHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH0sXG5cdCk7XG59O1xuXG5jb25zdCBnZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCA9IG1lbW9pemUoXG5cdCgpID0+IG1hcFRvT2JqZWN0VmFsdWVzKCBlbmRwb2ludHMgKVxuKTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgZGVmYXVsdCBzdGF0ZSB0byBiZSB1c2VkIGJ5IHN0b3JlcyBjb250YWluaW5nIGxpc3RzLlxuICpcbiAqIEB0eXBlIHsgT2JqZWN0IH1cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElTVFNfU1RBVEUgPSBtYXBUb09iamVjdFZhbHVlcyggZW5kcG9pbnRzICk7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIGRlZmF1bHQgc3RhdGUgdG8gYmUgdXNlZCBieSB0aGUgY29yZSBzdG9yZS5cbiAqXG4gKiBAdHlwZSB7e2VudGl0aWVzOiB7fSwgZW50aXR5SWRzOiB7fSwgZGlydHk6IHt9fX1cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09SRV9TVEFURSA9IHtcblx0ZW50aXRpZXM6IHtcblx0XHQuLi5nZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCgpLFxuXHR9LFxuXHRyZWxhdGlvbnM6IHt9LFxuXHRkaXJ0eToge1xuXHRcdHJlbGF0aW9uczoge1xuXHRcdFx0aW5kZXg6IHt9LFxuXHRcdFx0ZGVsZXRlOiB7fSxcblx0XHRcdGFkZDoge30sXG5cdFx0fSxcblx0XHR0cmFzaDoge30sXG5cdFx0ZGVsZXRlOiB7fSxcblx0fSxcbn07XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIGRlZmF1bHQgc3RhdGUgdG8gYmUgdXNlZCBieSB0aGUgc2NoZW1hIHN0b3JlLlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0NIRU1BX1NUQVRFID0ge1xuXHRzY2hlbWE6IHtcblx0XHQuLi5nZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCgpLFxuXHR9LFxuXHRmYWN0b3J5OiB7XG5cdFx0Li4uZ2V0RGVmYXVsdE1vZGVsRW50aXRpZXNPYmplY3QoKSxcblx0fSxcblx0cmVsYXRpb25FbmRwb2ludHM6IHtcblx0XHQuLi5nZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCgpLFxuXHR9LFxuXHRyZWxhdGlvblNjaGVtYToge30sXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRhdGEgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGFzc2VydEVudGl0eUhhc0tleSB9IGZyb20gJy4vYXNzZXJ0aW9ucyc7XG5cbi8qKlxuICogQWxsIGF2YWlsYWJsZSBlbmRwb2ludHMgZXhwb3NlZCB2aWEgdGhlIGVlanMuZGF0YSBnbG9iYWwgZnJvbSB0aGUgc2VydmVyLlxuICpcbiAqIEB0eXBlIHt7fX1cbiAqL1xuZXhwb3J0IGNvbnN0IHtcblx0Y29sbGVjdGlvbl9lbmRwb2ludHM6IGVuZHBvaW50cyA9IHt9LFxuXHRiYXNlX3Jlc3Rfcm91dGU6IGJhc2VSZXN0Um91dGUsXG59ID0gZGF0YS5wYXRocztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGVuZHBvaW50IGZvciB0aGUgcHJvdmlkZWQgbW9kZWwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgV2hhdCBtb2RlbCB0byByZXRyaWV2ZSB0aGUgZW5kcG9pbnQgZm9yLlxuICogQHJldHVybiB7c3RyaW5nfSAgVGhlIGVuZHBvaW50IGZvciB0aGUgcHJvdmlkZWQgbW9kZWwuXG4gKiBAdGhyb3dzIHtFeGNlcHRpb259XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbmRwb2ludCA9ICggbW9kZWxOYW1lICkgPT4ge1xuXHRhc3NlcnRFbnRpdHlIYXNLZXkoIG1vZGVsTmFtZSwgZW5kcG9pbnRzICk7XG5cdHJldHVybiBlbmRwb2ludHNbIG1vZGVsTmFtZSBdO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBwcm92aWRlZCBxdWVyeVN0cmluZyB0byB0aGUgZW5kcG9pbnQgZm9yIHRoZSBwcm92aWRlZCBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgV2hhdCBtb2RlbCB0aGUgZmluYWwgc3RyaW5nIGlzIGZvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZyAgVGhlIHF1ZXJ5IGJlaW5nIGFwcGVuZGVkIHRvIHRoZSBlbmRwb2ludC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZpbmFsIGFzc2VtYmxlZCBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseVF1ZXJ5U3RyaW5nID0gKCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nID0gJycgKSA9PiB7XG5cdHJldHVybiBxdWVyeVN0cmluZyAhPT0gJycgP1xuXHRcdGdldEVuZHBvaW50KCBtb2RlbE5hbWUgKSArICc/JyArIHF1ZXJ5U3RyaW5nIDpcblx0XHRnZXRFbmRwb2ludCggbW9kZWxOYW1lICk7XG59O1xuXG4vKipcbiAqIFN0cmlwcyB0aGUgYmFzZV9yZXN0X3JvdXRlIChpLmUuIGh0dHBzOi8vbXl1cmwuY29tL3dwLWpzb24vKSBmcm9tIHRoZSBwcm92aWRlZFxuICogdXJsIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSB1cmwgd2l0aCB0aGUgYmFzZSByZXN0IHJvdXRlIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBzdHJpcEJhc2VSb3V0ZUZyb21VcmwgPSAoIHVybCApID0+IHtcblx0cmV0dXJuIHVybC5yZXBsYWNlKCBiYXNlUmVzdFJvdXRlLCAnJyApO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBJbnZhbGlkU2NoZW1hIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5pbXBvcnQgeyBpc1NjaGVtYSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtcblx0TW9uZXksXG5cdFNlcnZlckRhdGVUaW1lIGFzIERhdGVUaW1lLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRpc0RhdGVUaW1lRmllbGQsXG5cdGlzTW9uZXlGaWVsZCxcbn0gZnJvbSAnLi9ib29sZWFucyc7XG5pbXBvcnQge1xuXHRpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQsXG5cdHZhbGlkYXRlRW51bVR5cGUsXG5cdHZhbGlkYXRlVHlwZSxcblx0dmFsaWRhdGVUeXBlRm9yRmllbGQsXG59IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyB9IGZyb20gJy4vZXh0cmFjdG9ycyc7XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBwcm92aWRlZCBmaWVsZCB2YWx1ZSBpcyBhIGtub3duIHZhbHVlIG9iamVjdC5cbiAqXG4gKiBOb3RlOiB0aGlzIG9ubHkgYXNzZXJ0cyBrbm93biB2YWx1ZSBvYmplY3RzLCBpZiB0aGUgdmFsdWUgaXMgbm90IGRldGVjdGVkIGFzXG4gKiBhIGtub3duIHZhbHVlIG9iamVjdCBpdCBpcyBwYXNzZWQgYmFjayBhcyBpcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEB0aHJvd3MgSW52YWxpZERhdGVUaW1lXG4gKiBAdGhyb3dzIFR5cGVFcnJvclxuICovXG5leHBvcnQgY29uc3QgbWF5YmVBc3NlcnRWYWx1ZU9iamVjdCA9ICggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBzY2hlbWEgKSA9PiB7XG5cdGlmICggaXNEYXRlVGltZUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICkge1xuXHRcdERhdGVUaW1lLmFzc2VydElzRGF0ZVRpbWUoIGZpZWxkVmFsdWUgKTtcblx0fVxuXHRpZiAoIGlzTW9uZXlGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSApIHtcblx0XHRNb25leS5hc3NlcnRNb25leSggZmllbGRWYWx1ZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgcHJvdmlkZWQgb2JqZWN0IGlzIGEgdmFsaWQgbW9kZWwgc2NoZW1hIG9iamVjdC5cbiAqXG4gKiBDdXJyZW50bHksIGFuIG9iamVjdCBpcyBjb25zaWRlcmVkIGEgdmFsaWQgbW9kZWwgc2NoZW1hIGlmIGl0IGhhcyBhXG4gKiAncHJvcGVydGllcycgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHsqfSBzY2hlbWFcbiAqIEB0aHJvd3MgSW52YWxpZFNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0VmFsaWRTY2hlbWEgPSAoIHNjaGVtYSApID0+IHtcblx0aWYgKCAhIGlzU2NoZW1hKCBzY2hlbWEgKSApIHtcblx0XHR0aHJvdyBuZXcgSW52YWxpZFNjaGVtYShcblx0XHRcdCdUaGlzIGlzIGFuIGludmFsaWQgc2NoZW1hIGZvciBhIG1vZGVsLicsXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBBc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGZpZWxkIGV4aXN0cyBpbiB0aGUgcHJvdmlkZWQgc2NoZW1hIGFuZCB0aGUgc2hhcGUgZm9yXG4gKiB0aGUgc2NoZW1hIGVudHJ5IG9uIHRoYXQgZmllbGQgaXMgZXhwZWN0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgVGhlIG1vZGVsIHRoZSBzY2hlbWEgYmVsb25ncyB0bywgdGhpcyBpcyB1c2VkIGZvclxuICogZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lICBUaGUgZmllbGQgYmVpbmcgY2hlY2tlZCBhZ2FpbnN0IHRoZSBzY2hlbWFcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgICAgIFRoZSBzY2hlbWEgZm9yIHRoZSBtb2RlbCB1c2VkIGZvciB2YWxpZGF0aW9uXG4gKiBAdGhyb3dzIEludmFsaWRTY2hlbWFcbiAqIEB0aHJvd3MgVHlwZUVycm9yXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRWYWxpZFNjaGVtYUZpZWxkUHJvcGVydGllcyA9IChcblx0bW9kZWxOYW1lLFxuXHRmaWVsZE5hbWUsXG5cdHNjaGVtYSxcbikgPT4ge1xuXHRpZiAoIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdHNwcmludGYoXG5cdFx0XHRcdCdUaGUgZ2l2ZW4gXCIlc1wiIGZpZWxkTmFtZSBkb2VzIG5vdCBoYXZlIGEgZGVmaW5lZCBzY2hlbWEgZm9yIHRoZSBtb2RlbCBcIiVzXCInLFxuXHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCksXG5cdFx0KTtcblx0fVxuXHRpZiAoIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgKSB7XG5cdFx0aWYgKCBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzICkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgSW52YWxpZFNjaGVtYShcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIHNjaGVtYSBmb3IgdGhlIGZpZWxkICVzIG9uIHRoZSBtb2RlbCAlcyBpcyBvZiB0eXBlIFwib2JqZWN0XCIgYnV0IGRvZXMgbm90IGhhdmUgYSBwcm9wZXJ0aWVzIHByb3BlcnR5LicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdG1vZGVsTmFtZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpZiAoIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3ICkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgSW52YWxpZFNjaGVtYShcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIHNjaGVtYSBmb3IgdGhlIGZpZWxkICVzIG9uIHRoZSBtb2RlbCAlcyBpcyBvZiB0eXBlIFwib2JqZWN0XCIgYnV0IGRvZXMgbm90IGhhdmUgYSByYXcgcHJvcGVydHkgaW4gaXRcXCdzIFwicHJvcGVydGllc1wiIHByb3BlcnR5LicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdG1vZGVsTmFtZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpZiAoIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LnR5cGUgKSApIHtcblx0XHRcdHRocm93IG5ldyBJbnZhbGlkU2NoZW1hKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgc2NoZW1hIGZvciB0aGUgZmllbGQgJXMgb24gdGhlIG1vZGVsICVzIGlzIG9mIHR5cGUgXCJvYmplY3RcIiBhbmQgaGFzIGEgcHJvcGVydGllcy5yYXcgcHJvcGVydHksIGhvd2V2ZXIgdGhlcmUgaXMgbm8gXCJ0eXBlXCIgZGVmaW5lZCBmb3IgdGhlIHJhdyBwcm9wZXJ0eS4nLFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRtb2RlbE5hbWVcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgdmFsdWUgcHJvdmlkZWQgZm9yIHRoZSBwcmVwYXJlZCBmaWVsZCBpcyB2YWxpZCBhY2NvcmRpbmcgdG9cbiAqIHRoZSBzY2hlbWEuXG4gKlxuICogUHJlcGFyZWQgZmllbGRzIGFyZTpcbiAqXG4gKiAtIGZpZWxkcyBoYXZpbmcgdmFsdWVzIHRoYXQgYXJlIHNldCBhcyBhIHZhbHVlIG9iamVjdCBhbmQgZXhwZWN0IGEgdmFsdWVcbiAqICAgb2JqZWN0IG9uIHVwZGF0ZXMvaW5zZXJ0cy5cbiAqIC0gZmllbGRzIHRoYXQgYXJlIHRoZSBlcXVpdmFsZW50IGByYXdgIHZhbHVlIHdoZW4gdGhlIGZpZWxkIGluIHRoZSBzY2hlbWEgaXNcbiAqICAgZGVmaW5lZCB0byBoYXZlIHJhdyBhbmQgcmVuZGVyZWQvcHJldHR5IHZhbHVlcy5cbiAqXG4gKiBOb3RlOiAgVGhpcyB2YWxpZGF0ZXMgYWdhaW5zdCBwcmVwYXJlZCBmaWVsZHMgd2hpY2ggbWVhbnMgdGhhdDpcbiAqXG4gKiAtIGlmIHRoZSBwcmVwYXJlZCBmaWVsZCBoYXMgYSB2YWx1ZSBvYmplY3QgYXMgaXRzIHZhbHVlLCB0aGVuIHRoYXQgdmFsdWVcbiAqICAgb2JqZWN0IGlzIHZhbGlkYXRlZCBiZWZvcmUgYW55IG90aGVyIHZhbGlkYXRpb24uXG4gKiAtIGlmIHRoZSBwcmVwYXJlZCBmaWVsZCByZXByZXNlbnRzIGFuIG9iamVjdCBpbiB0aGUgc2NoZW1hLCB0aGVuIGl0cyB2YWx1ZSBpc1xuICogICB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgYHJhd2AgdHlwZSBpbiB0aGUgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAdGhyb3dzIFR5cGVFcnJvclxuICogQHRocm93cyBJbnZhbGlkRGF0ZVRpbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkID0gKFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGluc3RhbmNlLFxuKSA9PiB7XG5cdGNvbnN0IHsgc2NoZW1hIH0gPSBpbnN0YW5jZTtcblx0bGV0IGlzVmFsaWQgPSBpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQoXG5cdFx0ZmllbGROYW1lLFxuXHRcdGZpZWxkVmFsdWUsXG5cdFx0c2NoZW1hLFxuXHQpO1xuXHRpZiAoICEgaXNWYWxpZCAmJiBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgPT09ICdvYmplY3QnICYmXG5cdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzXG5cdCkge1xuXHRcdGlzVmFsaWQgPSBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LmVudW0gP1xuXHRcdFx0dmFsaWRhdGVFbnVtVHlwZShcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LmVudW0sXG5cdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHQpIDpcblx0XHRcdHZhbGlkYXRlVHlwZShcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlLFxuXHRcdFx0XHRtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyhcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdFx0XHRzY2hlbWFcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRpZiAoICEgaXNWYWxpZCApIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcdHNwcmludGYoXG5cdFx0XHRcdFx0J1RoZSBnaXZlbiBcIiUxJHNcIiBmaWVsZCAgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEuICBJdFxcJ3MgYHJhd2AgcHJvcGVydHkgVmFsdWUgKCUyJHMpIGlzIG5vdCB0aGUgY29ycmVjdCBleHBlY3RlZCB0eXBlICglMyRzKS4nLFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcudHlwZSxcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdGlmICggISBpc1ZhbGlkICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIGZpZWxkXFwncyBWYWx1ZSAoJTIkcykgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEgdHlwZSAoJTMkcykuJyxcblx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkIGlzIHZhbGlkIGFjY29yZGluZyB0byB0aGVcbiAqIHNjaGVtYS5cbiAqXG4gKiBUaGlzIGlzIHVzZWQgb24gZW50aXR5IGNvbnN0cnVjdGlvbiBhbmQgZG9lcyBub3QgdmFsaWRhdGUgcHJlcGFyZWQgZmllbGRcbiAqIHZhbHVlcyAoc2VlIGFzc2VydCBhc3NlcnRWYWxpZFZhbHVlRm9yUHJlcGFyZWRGaWVsZCkuXG4gKlxuICogVGhpcyBtZXRob2QgYWxzbyBhc3NlcnRzIHRoYXQgdGhlIHNjaGVtYSBoYXMgdmFsaWQgc2NoZW1hIGZpZWxkIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEB0aHJvd3MgVHlwZUVycm9yXG4gKiBAdGhyb3dzIEludmFsaWRTY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydFZhbGlkRmllbGRBbmRWYWx1ZUFnYWluc3RTY2hlbWEgPSAoXG5cdG1vZGVsTmFtZSxcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRpbnN0YW5jZSxcbikgPT4ge1xuXHRjb25zdCBzY2hlbWEgPSBpbnN0YW5jZS5zY2hlbWE7XG5cdGNvbnN0IHZhbGlkYXRpb25UeXBlID0gdmFsaWRhdGVUeXBlRm9yRmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2UgKTtcblx0YXNzZXJ0VmFsaWRTY2hlbWFGaWVsZFByb3BlcnRpZXMoIG1vZGVsTmFtZSwgZmllbGROYW1lLCBzY2hlbWEgKTtcblx0bGV0IGlzVmFsaWQgPSBpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQoXG5cdFx0ZmllbGROYW1lLFxuXHRcdGZpZWxkVmFsdWUsXG5cdFx0c2NoZW1hLFxuXHRcdGZhbHNlLFxuXHQpO1xuXHQvLyBhY2NvdW50IGZvciBmaWVsZE5hbWUgZmllbGRWYWx1ZXMgdGhhdCBoYXZlIHByb3BlcnR5IHNjaGVtYS4gRm9yIE1vZGVsXG5cdC8vIEVudGl0aWVzLCBvbmx5IHRoZSBWQUxJREFURV9UWVBFIHByb3BlcnR5IGlzIGNhcmVkIGFib3V0LlxuXHRpZiAoIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgJiZcblx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNcblx0KSB7XG5cdFx0aWYgKCBpc1VuZGVmaW5lZCggZmllbGRWYWx1ZVsgdmFsaWRhdGlvblR5cGUgXSApICkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIHZhbHVlIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGRlZmluZWQgc2NoZW1hLiBJdCBtdXN0IGJlIGFuIG9iamVjdCBhbmQgaXQgbXVzdCBoYXZlIGEgYCUyJHNgIGtleS4nLFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHR2YWxpZGF0aW9uVHlwZSxcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlzVmFsaWQgPSBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNbIHZhbGlkYXRpb25UeXBlIF0uZW51bSA/XG5cdFx0XHR2YWxpZGF0ZUVudW1UeXBlKFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNbIHZhbGlkYXRpb25UeXBlIF0udHlwZSxcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy5lbnVtLFxuXHRcdFx0XHRmaWVsZFZhbHVlWyB2YWxpZGF0aW9uVHlwZSBdLFxuXHRcdFx0KSA6XG5cdFx0XHR2YWxpZGF0ZVR5cGUoXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllc1sgdmFsaWRhdGlvblR5cGUgXS50eXBlLFxuXHRcdFx0XHRmaWVsZFZhbHVlWyB2YWxpZGF0aW9uVHlwZSBdXG5cdFx0XHQpO1xuXHRcdGlmICggISBpc1ZhbGlkICkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIHZhbHVlIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGRlZmluZWQgc2NoZW1hLiAgSXRcXCdzIGAlMiRzYCBwcm9wZXJ0eSB2YWx1ZSAoJTMkcykgaXMgbm90IHRoZSBjb3JyZWN0IGV4cGVjdGVkIHR5cGUgKCU0JHMpLicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdHZhbGlkYXRpb25UeXBlLFxuXHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzWyB2YWxpZGF0aW9uVHlwZSBdLnR5cGUsXG5cdFx0XHRcdCksXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRpZiAoICEgaXNWYWxpZCApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0c3ByaW50Zihcblx0XHRcdFx0J1RoZSBnaXZlbiBcIiUxJHNcIiBmaWVsZFxcJ3MgdmFsdWUgKCUyJHMpIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGRlZmluZWQgc2NoZW1hIHR5cGUgKCUzJHMpLicsXG5cdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlLFxuXHRcdFx0KSxcblx0XHQpO1xuXHR9XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzQXJyYXksIHVwcGVyRmlyc3QsIGNhbWVsQ2FzZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdtZW1pemUnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgYXNzZXJ0VmFsaWRTY2hlbWEgfSBmcm9tICcuL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHtcblx0Y3JlYXRlR2V0dGVyLFxuXHRjcmVhdGVFbnRpdHlHZXR0ZXJzQW5kU2V0dGVycyxcblx0Y3JlYXRlUGVyc2lzdGluZ0dldHRlcnNBbmRTZXR0ZXJzLFxuXHRzZXRTYXZlU3RhdGUsXG59IGZyb20gJy4vY3JlYXRlJztcbmltcG9ydCB7XG5cdFNBVkVfU1RBVEUsXG5cdFBSSVZBVEVfUFJPUEVSVElFUyxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEJhc2VFbnRpdHkgaXMgdGhlIGJhc2ljIGNsYXNzIGZvciBhbGwgZW50aXRpZXMuICBjcmVhdGVFbnRpdHlGYWN0b3J5IHJldHVybnNcbiAqIGFuIGluc3RhbmNlIG9mIHRoaXMgYW5kIGFsbCB0aGUgZ2V0dGVycy9zZXR0ZXJzIGZvciBmaWVsZHMgZXRjIGFyZVxuICogZHluYW1pY2FsbHkgY3JlYXRlZCB2aWEgdGhlIGNvbnN0cnVjdG9yLlxuICovXG5jbGFzcyBCYXNlRW50aXR5IHtcblx0WyBQUklWQVRFX1BST1BFUlRJRVMuU0FWRV9TVEFURSBdID0gU0FWRV9TVEFURS5DTEVBTjtcblx0WyBQUklWQVRFX1BST1BFUlRJRVMuVkFMSURBVEVfVFlQRVMgXSA9IHt9O1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RvciBmb3IgQmFzZSBFbnRpdHlcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gZW50aXR5RmllbGRzQW5kVmFsdWVzXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcblx0ICogQHBhcmFtIHtBcnJheX1maWVsZFByZWZpeGVzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNOZXdcblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlGaWVsZHNBbmRWYWx1ZXMsXG5cdFx0c2NoZW1hLFxuXHRcdGZpZWxkUHJlZml4ZXMgPSBbXSxcblx0XHRpc05ldyA9IGZhbHNlLFxuXHQpIHtcblx0XHRhc3NlcnRWYWxpZFNjaGVtYSggc2NoZW1hICk7XG5cdFx0ZmllbGRQcmVmaXhlcyA9IGlzQXJyYXkoIGZpZWxkUHJlZml4ZXMgKSA/IGZpZWxkUHJlZml4ZXMgOiBbXTtcblx0XHRjcmVhdGVHZXR0ZXIoIHRoaXMsICdmaWVsZFByZWZpeGVzJywgZmllbGRQcmVmaXhlcyApO1xuXHRcdGNyZWF0ZUdldHRlciggdGhpcywgJ3NjaGVtYScsIHNjaGVtYS5wcm9wZXJ0aWVzICk7XG5cdFx0c2V0U2F2ZVN0YXRlKFxuXHRcdFx0dGhpcyxcblx0XHRcdGlzTmV3ID8gU0FWRV9TVEFURS5ORVcgOiBTQVZFX1NUQVRFLkNMRUFOXG5cdFx0KTtcblx0XHRjcmVhdGVHZXR0ZXIoIHRoaXMsICdtb2RlbE5hbWUnLCBtb2RlbE5hbWUgKTtcblx0XHRjcmVhdGVHZXR0ZXIoIHRoaXMsICdvcmlnaW5hbEZpZWxkc0FuZFZhbHVlcycsIGVudGl0eUZpZWxkc0FuZFZhbHVlcyApO1xuXHRcdGNyZWF0ZUdldHRlcihcblx0XHRcdHRoaXMsXG5cdFx0XHQnZmllbGRzVG9QZXJzaXN0T25JbnNlcnQnLFxuXHRcdFx0bmV3IFNldCggT2JqZWN0LmtleXMoIGVudGl0eUZpZWxkc0FuZFZhbHVlcyApIClcblx0XHQpO1xuXHRcdGNyZWF0ZUVudGl0eUdldHRlcnNBbmRTZXR0ZXJzKCB0aGlzICk7XG5cdFx0Y3JlYXRlUGVyc2lzdGluZ0dldHRlcnNBbmRTZXR0ZXJzKCB0aGlzICk7XG5cdFx0T2JqZWN0LnNlYWwoIHRoaXMgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNhdmUgc3RhdGUgb24gdGhlIGVudGl0eS5cblx0ICpcblx0ICogU2F2ZSBzdGF0ZSBkZXNjcmliZXMgd2hldGhlciB0aGUgZW50aXR5IGlzOlxuXHQgKlxuXHQgKiAtIFNBVkVfU1RBVEUuTkVXOiBUaGUgZW50aXR5IGhhcyBuZXZlciBiZWVuIHBlcnNpc3RlZCB0byBzdG9yYWdlLlxuXHQgKiAtIFNBVkVfU1RBVEUuQ0xFQU46IFRoZSBlbnRpdHkgZXhpc3RzIGluIHN0b3JhZ2UgYW5kIGhhcyBub3QgYmVlbiBtdXRhdGVkLlxuXHQgKiAtIFNBVkVfU1RBVEUuRElSVFk6IFRoZSBlbnRpdHkgaXMgbXV0YXRlZCBhbmQgY2hhbmdlcyBoYXZlIG5vdCBiZWVuXG5cdCAqIHBlcnNpc3RlZCB0byBzdG9yYWdlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtTeW1ib2x9ICBSZXR1cm5zIHRoZSBjdXJyZW50IHNhdmUgc3RhdGUgZm9yIHRoZSBlbnRpdHkuXG5cdCAqL1xuXHRnZXQgc2F2ZVN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzWyBQUklWQVRFX1BST1BFUlRJRVMuU0FWRV9TVEFURSBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBpcyBTQVZFX1NUQVRFLk5FV1xuXHQgKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBTQVZFX1NUQVRFLk5FVyBpcyB0aGUgc2F2ZSBzdGF0ZS5cblx0ICovXG5cdGdldCBpc05ldygpIHtcblx0XHRyZXR1cm4gdGhpcy5zYXZlU3RhdGUgPT09IFNBVkVfU1RBVEUuTkVXO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBpcyBTQVZFX1NUQVRFLkRJUlRZXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIFNBVkVfU1RBVEUuRElSVFkgaXMgdGhlIHNhdmUgc3RhdGUuXG5cdCAqL1xuXHRnZXQgaXNEaXJ0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zYXZlU3RhdGUgPT09IFNBVkVfU1RBVEUuRElSVFk7XG5cdH1cblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgY3VycmVudCBzYXZlIHN0YXRlIGlzIFNBVkVfU1RBVEUuQ0xFQU5cblx0ICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgU0FWRV9TVEFURS5DTEVBTiBpcyB0aGUgc2F2ZSBzdGF0ZS5cblx0ICovXG5cdGdldCBpc0NsZWFuKCkge1xuXHRcdHJldHVybiB0aGlzLnNhdmVTdGF0ZSA9PT0gU0FWRV9TVEFURS5DTEVBTjtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBlbnRpdHkgaGFzIGFueSBwYXNzd29yZCBwcm90ZWN0ZWQgZmllbGRzLlxuXHQgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIGl0IGRvZXMsIGZhbHNlIG1lYW5zIGl0IGRvZXNuJ3QuXG5cdCAqL1xuXHRnZXQgaXNQYXNzd29yZFByb3RlY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5wcm90ZWN0ZWRGaWVsZHMubGVuZ3RoID4gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBnaXZlbiBmaWVsZE5hbWUgaXMgYSBwYXNzd29yZCBwcm90ZWN0ZWQgZmllbGQuXG5cdCAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6IGJvb2xlYW59ICBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZFxuXHQgKiB0byBjaGVjayBpZiB0aGUgZ2l2ZW4gZmllbGQgbmFtZSBpcyBhIHByb3RlY3RlZCBmaWVsZCBpbiB0aGlzIGVudGl0eS5cblx0ICovXG5cdGdldCBpc0ZpZWxkUGFzc3dvcmRQcm90ZWN0ZWQoKSB7XG5cdFx0cmV0dXJuICggZmllbGROYW1lICkgPT4gdGhpcy5wcm90ZWN0ZWRGaWVsZHMuaW5kZXhPZiggZmllbGROYW1lICkgPiAtMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVc2VkIHRvIGNsb25lIHRoZSBjdXJyZW50IGVudGl0eSBvYmplY3QuICBUaGlzIHJlc3VsdHMgaW4gYW4gaW5zdGFuY2Ugb2Zcblx0ICogQmFzZUVudGl0eSB0aGF0IGlzIGVxdWl2YWxlbnQgYXMgdGhpcyBjdXJyZW50IGluc3RhbmNlIChleGNlcHQgaXQgd2lsbFxuXHQgKiBoYXZlIGEgbmV3IGdlbmVyYXRlZCBpZCkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0Jhc2VFbnRpdHl9IEEgbmV3IGluc3RhbmNlIG9mIEJhc2VFbnRpdHlcblx0ICovXG5cdGdldCBjbG9uZSgpIHtcblx0XHRyZXR1cm4gKCBrZWVwSWQgPSBmYWxzZSApID0+IHtcblx0XHRcdGNvbnN0IGNyZWF0ZUZhY3RvcnkgPSBtZW1vaXplKCAoKSA9PiBjcmVhdGVFbnRpdHlGYWN0b3J5KFxuXHRcdFx0XHR0aGlzLm1vZGVsTmFtZSxcblx0XHRcdFx0eyAkc2NoZW1hOiB7fSwgcHJvcGVydGllczogdGhpcy5zY2hlbWEgfSxcblx0XHRcdFx0dGhpcy5maWVsZFByZWZpeGVzXG5cdFx0XHQpICk7XG5cdFx0XHRjb25zdCBmYWN0b3J5ID0gY3JlYXRlRmFjdG9yeSgpO1xuXHRcdFx0Y29uc3QgbmV3RW50aXR5ID0gZmFjdG9yeS5jcmVhdGVOZXcoIHRoaXMuZm9yQ2xvbmUgKTtcblx0XHRcdGlmICgga2VlcElkICkge1xuXHRcdFx0XHRuZXdFbnRpdHkuaWQgPSB0aGlzLmlkO1xuXHRcdFx0XHRzZXRTYXZlU3RhdGUoIG5ld0VudGl0eSwgdGhpcy5zYXZlU3RhdGUsIHRydWUgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBuZXdFbnRpdHk7XG5cdFx0fTtcblx0fVxuXG5cdHN0YXRpYyBuYW1lID0gJ0Jhc2VFbnRpdHknXG59XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGdpdmVzIGEgY2xhc3MgdGhlIHByb3ZpZGVkIG5hbWVcbiAqIChhbmQgb3B0aW9uYWxseSBleHRlbmRzIHRoZSBwcm92aWRlZCBvYmplY3QpLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRlbmRlZENsYXNzXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBmdW5jdGlvblxuICovXG5jb25zdCBuYW1lQ2xhc3MgPSAoIG5hbWUsIGV4dGVuZGVkQ2xhc3MgKSA9PiB7XG5cdHJldHVybiBjbGFzcyBleHRlbmRzIGV4dGVuZGVkQ2xhc3Mge1xuXHRcdHN0YXRpYyBnZXQgbmFtZSgpIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fTtcbn07XG5cbi8qKlxuICogQSBmYWN0b3J5IGZvciBlbnRpdHkgZmFjdG9yaWVzLlxuICpcbiAqIENhbGxpbmcgdGhpcyByZXR1cm5zIGFuIG9iamVjdCBvZiBmYWN0b3J5IGZ1bmN0aW9ucyB0aGF0IGluc3RhbnRpYXRlIGFuXG4gKiBpbnN0YW5jZSBvZiBhIG5hbWVkIEVudGl0eS4gIFRoZSBtb2RlbE5hbWUgaXMgdXNlZCBhcyB0aGUgbmFtZSBmb3IgdGhlIG5ld1xuICogZW50aXR5LlxuICpcbiAqIFR3byBtZXRob2RzIGFyZSBhdmFpbGFibGUgb24gdGhlIG9iamVjdCByZXR1cm5lZDogYGNyZWF0ZU5ld2AgYW5kXG4gKiBgZnJvbUV4aXN0aW5nYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lICBUaGUgbW9kZWwgZm9yIHRoZSBlbnRpdHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgICAgIFRoZSBzY2hlbWEgZm9yIHRoZSBtb2RlbC4gVGhpcyBpcyB0aGUgc2NoZW1hXG4gKiBwcm92aWRlZCBieSB0aGUgT1BUSU9OUyBlbmRwb2ludCBmb3IgdGhlIG1vZGVsLlxuICogQHBhcmFtIHtBcnJheX0gZmllbGRQcmVmaXhlcyBBbiBhcnJheSBvZiBmaWVsZCBwcmVmaXhlcyBmb3IgYmFzZSBmaWVsZHMgb25cbiAqIG9uIHRoZSBtb2RlbCAoZWcuIEV2ZW50IG1vZGVsIGhhcyBgWyBFVlQgXWAgcHJlZml4ZXMgb24gZmllbGRzLCBEYXRldGltZSBtb2RlbFxuICogaGFzIFsgYERUVGAsIGBEVFRfRVZUYCBdXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgZmFjdG9yeSBmb3IgaW5zdGFudGlhdGluZyBhbiBlbnRpdHkgaW5zdGFuY2UuXG4gKi9cbmNvbnN0IGNyZWF0ZUVudGl0eUZhY3RvcnkgPSAoIG1vZGVsTmFtZSwgc2NoZW1hLCBmaWVsZFByZWZpeGVzID0gW10gKSA9PiB7XG5cdGNvbnN0IEVudGl0eSA9IG5hbWVDbGFzcyhcblx0XHR1cHBlckZpcnN0KCBjYW1lbENhc2UoIG1vZGVsTmFtZSApICksXG5cdFx0QmFzZUVudGl0eVxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdC8qKlxuXHRcdCAqIEV4cG9zZXMgbW9kZWxOYW1lIHNvIGNsaWVudCBjb2RlIGNhbiBkZXJpdmUgd2hhdCBtb2RlbCB0aGlzIGZhY3Rvcnlcblx0XHQgKiBpcyBmb3IgZnJvbSBhbnkgZ2l2ZW4gZmFjdG9yeS5cblx0XHQgKiBAdHlwZSBzdHJpbmdcblx0XHQgKi9cblx0XHRtb2RlbE5hbWUsXG5cdFx0LyoqXG5cdFx0ICogVGhpcyBpcyB0aGUgY2xhc3MgZGVmaW5pdGlvbiBmb3IgdGhlIEVudGl0eS4gIFR5cGljYWxseSB0aGlzIGlzXG5cdFx0ICogcmV0cmlldmVkIGZvciB0aGUgYWJpbGl0eSB0byBkbyBpbnN0YW5jZW9mIGNoZWNrcy5cblx0XHQgKi9cblx0XHRjbGFzc0RlZjogRW50aXR5LFxuXHRcdC8qKlxuXHRcdCAqIFRoaXMgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBFbnRpdHkgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMgd2l0aCB0aGVcblx0XHQgKiBpbmRpY2F0aW9uIHRoaXMgaXMgYSBuZXcgbm9uLXBlcnNpc3RlZCBlbnRpdHkuICBUaGlzIG1lYW5zOlxuXHRcdCAqXG5cdFx0ICogLSBBbGwgZmllbGQgdmFsdWVzIGFyZSBwb3B1bGF0ZWQgYW5kIGFueSBub3QgcHJvdmlkZWQgd2lsbCBiZVxuXHRcdCAqICAgcG9wdWxhdGVkIHdpdGggZGVmYXVsdCB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgc2NoZW1hLlxuXHRcdCAqIC0gR2VuZXJhdGVzIHRlbXBvcmFyeSB1bmlxdWUgaWRzIGZvciB0aGUgcHJpbWFyeSBrZXkgZmllbGRzIG9uIHRoZVxuXHRcdCAqICAgZW50aXR5ICh1c2luZyBjdWlkKS5cblx0XHQgKiAtIFNldHMgdGhlIGBpc05ld2AgZmxhZyB0byB0cnVlIGZvciB0aGUgZW50aXR5IHNvIGNsaWVudCBjb2RlIGlzIGFibGVcblx0XHQgKiAgIHRvIGRpc2NvdmVyIHdoaWNoIGVudGl0aWVzIGhhdmUgbmV2ZXIgYmVlbiBwZXJzaXN0ZWQuXG5cdFx0ICogLSBUaGlzIGZhY3RvcnkgbWV0aG9kIGV4cGVjdHMgZmllbGRzIGFuZCB2YWx1ZXMgdG8gYmUgXCJwcmVwYXJlZFwiLlxuXHRcdCAqICAgV2hhdCB0aGF0IG1lYW5zIGlzIHRoYXQgZm9yIGFueSBmaWVsZHMgdGhhdCB0aGUgc2NoZW1hIGRlc2NyaWJlZCBhc1xuXHRcdCAqICAgaGF2aW5nIGEgYHJhd2AgcHJvcGVydHkgKGkuZS4geyBFVlRfZGVzYzogeyByYXc6ICdzb21ldGhpbmcnIH0gfSlcblx0XHQgKiAgIHRoZSB2YWx1ZSBzaG91bGQgYmUgb2YgdGhlIGNvcnJlY3QgdHlwZSBmb3IgdGhhdCByYXcgcHJvcGVydHkgYW5kLlxuXHRcdCAqICAgVGhpcyBhbHNvIG1lYW5zIGlzIHRoYXQgZm9yIGFueSBmaWVsZHMgdGhlIHNjaGVtYSBkZXNjcmliZXMgYXMgYVxuXHRcdCAqICAgZGF0ZS10aW1lIChmb3JtYXQpIG9yIG1vbmV5IChmb3JtYXQpIGZpZWxkLCB0aGUgdmFsdWUgaXMgZXhwZWN0ZWRcblx0XHQgKiAgIHRvIGJlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9iamVjdC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZHNBbmRWYWx1ZXNcblx0XHQgKiBAcmV0dXJuIHtFbnRpdHl9IGFuIGluc3RhbmNlIG9mIEVudGl0eVxuXHRcdCAqL1xuXHRcdGNyZWF0ZU5ldzogKCBmaWVsZHNBbmRWYWx1ZXMgKSA9PiBuZXcgRW50aXR5KFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZmllbGRzQW5kVmFsdWVzLFxuXHRcdFx0c2NoZW1hLFxuXHRcdFx0ZmllbGRQcmVmaXhlcyxcblx0XHRcdHRydWVcblx0XHQpLFxuXHRcdC8qKlxuXHRcdCAqIFRoaXMgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBFbnRpdHkgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMgd2l0aCB0aGVcblx0XHQgKiBpbmRpY2F0aW9uIHRoaXMgcmVwcmVzZW50cyB0aGUgZW50aXR5IGFzIGlzIGluIHRoZSBkYi4gIFRoaXMgbWVhbnM6XG5cdFx0ICpcblx0XHQgKiAtIEFsbCBmaWVsZCB2YWx1ZXMgYXJlIE5PVCBwb3B1bGF0ZWQgaWYgbWlzc2luZyB2YWx1ZXMuICBUaGlzIGlzXG5cdFx0ICogICBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgY29udGV4dHMgbGlrZSB1bmF1dGhvcml6ZWQgdmlld3Mgd2hlcmVcblx0XHQgKiAgIG9ubHkgcGFydGlhbCBlbnRpdGllcyBhcmUgcmV0dXJuZWQgaW4gUkVTVCByZXNwb25zZXMuXG5cdFx0ICogLSBpc05ldyBmbGFnIGlzIHNldCB0byBmYWxzZSAoYW5kIG5ldmVyIGNoYW5nZXMgZm9yIHRoaXMgZW50aXR5KVxuXHRcdCAqIC0gVGhlIGluY29taW5nIHZhbHVlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIGV4YWN0IHNoYXBlIGFzXG5cdFx0ICogICBkZXNjcmliZWQgYnkgdGhlIHNjaGVtYSBmb3IgdGhlIGVudGl0eSBtb2RlbC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZHNBbmRWYWx1ZXNcblx0XHQgKiBAcmV0dXJuIHtFbnRpdHl9IGFuIGluc3RhbmNlIG9mIEVudGl0eVxuXHRcdCAqL1xuXHRcdGZyb21FeGlzdGluZzogKCBmaWVsZHNBbmRWYWx1ZXMgKSA9PiBuZXcgRW50aXR5KFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZmllbGRzQW5kVmFsdWVzLFxuXHRcdFx0c2NoZW1hLFxuXHRcdFx0ZmllbGRQcmVmaXhlc1xuXHRcdCksXG5cdH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRW50aXR5RmFjdG9yeTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0LCBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGhhcyBhIFwicmF3XCIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QgYW5kIGhhcyBhIGByYXdgIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgaGFzUmF3UHJvcGVydHkgPSAoIHZhbHVlICkgPT4gaXNQbGFpbk9iamVjdCggdmFsdWUgKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCB2YWx1ZS5yYXcgKTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgdmFsdWUgaGFzIGEgXCJwcmV0dHlcIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGEgYHByZXR0eWAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNQcmV0dHlQcm9wZXJ0eSA9ICggdmFsdWUgKSA9PiBpc1BsYWluT2JqZWN0KCB2YWx1ZSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHZhbHVlLnByZXR0eSApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgYSBcInJlbmRlcmVkXCIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QgYW5kIGhhcyBhIGByZW5kZXJlZGAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNSZW5kZXJlZFByb3BlcnR5ID0gKCB2YWx1ZSApID0+IGlzUGxhaW5PYmplY3QoIHZhbHVlICkgJiZcblx0ISBpc1VuZGVmaW5lZCggdmFsdWUucmVuZGVyZWQgKTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgdmFsdWUgaGFzIGEgXCJmb3JtYXRcIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGEgYGZvcm1hdGAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNGb3JtYXRQcm9wZXJ0eSA9ICggdmFsdWUgKSA9PiBpc1BsYWluT2JqZWN0KCB2YWx1ZSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHZhbHVlLmZvcm1hdCApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgYSBcImVudW1cIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGFuIGVudW1cbiAqIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgaGFzRW51bVByb3BlcnR5ID0gKCB2YWx1ZSApID0+IGlzUGxhaW5PYmplY3QoIHZhbHVlICkgJiZcblx0ISBpc1VuZGVmaW5lZCggdmFsdWUuZW51bSApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBhIFwidmFsdWUgb2JqZWN0XCIgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHZhbHVlIG9iamVjdCBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVmFsdWVPYmplY3RGaWVsZCA9ICggZmllbGQsIHNjaGVtYSApID0+IHtcblx0cmV0dXJuIGlzRGF0ZVRpbWVGaWVsZCggZmllbGQsIHNjaGVtYSApIHx8IGlzTW9uZXlGaWVsZCggZmllbGQsIHNjaGVtYSApO1xufTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgaXMgYSBkYXRlLXRpbWUgZmllbGQgYWNjb3JkaW5nIHRvIHRoZVxuICogcHJvdmlkZWQgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZFxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyBpdCBpcyBhIGRhdGUtdGltZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGF0ZVRpbWVGaWVsZCA9ICggZmllbGQsIHNjaGVtYSApID0+XG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGQgXSApICYmXG5cdGhhc0Zvcm1hdFByb3BlcnR5KCBzY2hlbWFbIGZpZWxkIF0gKSAmJlxuXHRzY2hlbWFbIGZpZWxkIF0uZm9ybWF0ID09PSAnZGF0ZS10aW1lJztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgaXMgYSBVVEMgZGF0ZS10aW1lIGZpZWxkLlxuICpcbiAqIElmIHNjaGVtYSBpcyBwcm92aWRlZCwgdGhpcyBhbHNvIGNvbnNpZGVycyB3aGV0aGVyIHRoaXMgaXMgYSBkYXRlLXRpbWUgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGVUaW1lRmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hIFtvcHRpb25hbF1cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgbWVhbnMgdGhpcyBpcyBhIFVUQyBmaWVsZC4gIElmIHNjaGVtYSBpcyBwcm92aWRlZCBpdFxuICogbWVhbnMgdGhpcyBpcyBhbHNvIGEgZGF0ZS10aW1lIGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNVVENEYXRlVGltZUZpZWxkID0gKCBkYXRlVGltZUZpZWxkTmFtZSwgc2NoZW1hID0gbnVsbCApID0+IHtcblx0cmV0dXJuIHNjaGVtYSAhPT0gbnVsbCA/XG5cdFx0aXNEYXRlVGltZUZpZWxkKCBkYXRlVGltZUZpZWxkTmFtZSwgc2NoZW1hICkgJiZcblx0XHRcdGRhdGVUaW1lRmllbGROYW1lLmluZGV4T2YoICdfZ210JyApID4gMCA6XG5cdFx0ZGF0ZVRpbWVGaWVsZE5hbWUuaW5kZXhPZiggJ19nbXQnICkgPiAwO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZpZWxkIHJlcHJlc2VudHMgYSBwcmltYXJ5IGtleSBmaWVsZCB1c2luZyB0aGVcbiAqIHByb3ZpZGVkIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBpdCBpcyBhIHByaW1hcnkga2V5IGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNQcmltYXJ5S2V5RmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJpbWFyeV9rZXkgKTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZpZWxkIHJlcHJlc2VudHMgYSByZWFkb25seSBmaWVsZCB1c2luZyB0aGVcbiAqIHByb3ZpZGVkIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBpdCBpcyBhIHJlYWRvbmx5IGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNSZWFkT25seSA9ICggZmllbGROYW1lLCBzY2hlbWEgKSA9PlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkgJiZcblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXS5yZWFkb25seSApICYmXG5cdHNjaGVtYVsgZmllbGROYW1lIF0ucmVhZG9ubHk7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZpZWxkIGlzIGEgXCJlbnRpdHlcIiBmaWVsZCB1c2luZyB0aGUgcHJvdmlkZWRcbiAqIHNjaGVtYS5cbiAqXG4gKiBBbiBcImVudGl0eVwiIGZpZWxkIGlzIGFueSBmaWVsZCB0aGF0IHNhdGlzZmllcyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogLSBmaWVsZCBleGlzdHMgaW4gdGhlIHNjaGVtYVxuICogLSBpdCBpcyBub3QgcmVhZG9ubHkgb3IgaXMgYSBwcmltYXJ5IGtleSBmaWVsZC5cbiAqIC0gaXQgaXMgbm90IGEgdXRjIGZpZWxkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBpcyBhbiBlbnRpdHkgZmllbGRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRW50aXR5RmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdCggISBpc1JlYWRPbmx5KCBmaWVsZE5hbWUsIHNjaGVtYSApIHx8XG5cdFx0aXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hIClcblx0KSAmJlxuXHQhIGlzVVRDRGF0ZVRpbWVGaWVsZCggZmllbGROYW1lICkgJiZcblx0ZmllbGROYW1lICE9PSAnX3Byb3RlY3RlZCc7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpZWxkIHJlcHJlc2VudHMgYSB2YWx1ZSBvZiBtb25leSBmcm9tIHRoZSBwcm92aWRlZFxuICogc2NoZW1hLlxuICpcbiAqIEEgZmllbGQgaXMgYSBtb25leSBmaWVsZCBpZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHNhdGlzZmllZDpcbiAqXG4gKiAtIEl0IGV4aXN0cyBpbiB0aGUgc2NoZW1hXG4gKiAtIEl0IGhhcyBhIHByZXR0eSBwcm9wZXJ0eVxuICogLSBUaGUgcHJldHR5IHByb3BlcnR5IHZhbHVlIGhhcyBhIGZvcm1hdCBwcm9wZXJ0eS5cbiAqIC0gVGhlIGZvcm1hdCBwcm9wZXJ0eSBpcyBlcXVhbCB0byAnbW9uZXknXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBpdCBpcyBhIG1vbmV5IGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNNb25leUZpZWxkID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+XG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0gKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMgKSAmJlxuXHRoYXNQcmV0dHlQcm9wZXJ0eSggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzICkgJiZcblx0aGFzRm9ybWF0UHJvcGVydHkoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5wcmV0dHkgKSAmJlxuXHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucHJldHR5LmZvcm1hdCA9PT0gJ21vbmV5JztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZmllbGQgaXMgYW4gZW51bSB0eXBlIGZpZWxkIGFzIGRlZmluZWQgaW4gdGhlIHByb3ZpZGVkXG4gKiBzY2hlbWEuXG4gKlxuICogTm90ZTogdGhpcyBvbmx5IGV2YWx1YXRlcyB0aGUgdG9wLWxldmVsIGZvciB0aGUgZmllbGQgc2NoZW1hLiAgSWYgdGhlIGZpZWxkXG4gKiBpbiB0aGUgc2NoZW1hIGlzIG9mIHR5cGUgJ29iamVjdCcgYW5kIG9uZSBvZiB0aGUgb2JqZWN0IHByb3BlcnRpZXMgaXMgb2YgdHlwZVxuICogJ2VudW0nIHRoaXMgd2lsbCBub3QgY29uc2lkZXIgaXQgYW4gXCJlbnVtXCIgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgaWYgdGhlIGZpZWxkIGlzIGFuIGVudW0gdHlwZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRW51bUZpZWxkID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+XG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0gKSAmJlxuXHRoYXNFbnVtUHJvcGVydHkoIHNjaGVtYVsgZmllbGROYW1lIF0gKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLmVudW0ubGVuZ3RoICkgJiZcblx0c2NoZW1hWyBmaWVsZE5hbWUgXS5lbnVtLmxlbmd0aCA+IDA7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgYXBwbHlGaWx0ZXJzIH0gZnJvbSAnQHdvcmRwcmVzcy9ob29rcyc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogQ29uc3RhbnRzIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgXCJzYXZlIHN0YXRlXCIgZm9yIGFuIGVudGl0eS5cbiAqXG4gKiBAdHlwZSB7e0NMRUFOOiBTeW1ib2wsIE5FVzogU3ltYm9sLCBESVJUWTogU3ltYm9sfX1cbiAqL1xuZXhwb3J0IGNvbnN0IFNBVkVfU1RBVEUgPSB7XG5cdENMRUFOOiBTeW1ib2woICdFbnRpdHkgaXMgcGVyc2lzdGVkLicgKSxcblx0TkVXOiBTeW1ib2woICdFbnRpdHkgaXMgbmV3LicgKSxcblx0RElSVFk6IFN5bWJvbCggJ0V4aXN0aW5nIGVudGl0eSBoYXMgY2hhbmdlcyBhbmQgbmVlZHMgcGVyc2lzdGVkLicgKSxcbn07XG5cbi8qKlxuICogVmFsaWRhdGlvbiB0eXBlcyBhcmUgZm9yIHNjaGVtYSdzIHRoYXQgaGF2ZSB2YWx1ZSB2YXJpYXRpb25zLlxuICogQHR5cGUge3tSQVc6IHN0cmluZywgUkVOREVSRUQ6IHN0cmluZywgUFJFVFRZOiBzdHJpbmd9fVxuICovXG5leHBvcnQgY29uc3QgVkFMSURBVEVfVFlQRSA9IHtcblx0UkFXOiAncmF3Jyxcblx0UkVOREVSRUQ6ICdyZW5kZXJlZCcsXG5cdFBSRVRUWTogJ3ByZXR0eScsXG59O1xuXG4vKipcbiAqIFByaXZhdGUgcHJvcGVydGllcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIEJhc2UgRW50aXR5IENsYXNzXG4gKiBAdHlwZSB7e3NhdmVTdGF0ZTogYm9vbGVhbn19XG4gKi9cbmV4cG9ydCBjb25zdCBQUklWQVRFX1BST1BFUlRJRVMgPSB7XG5cdFNBVkVfU1RBVEU6IFN5bWJvbCggJ2Jhc2VFbnRpdHlQcml2YXRlUHJvcGVydGllc1NhdmVTdGF0ZScgKSxcblx0VkFMSURBVEVfVFlQRVM6IFN5bWJvbCggJ2Jhc2VFbnRpdHlQcml2YXRlUHJvcGVydGllc1ZhbGlkYXRlVHlwZXMnICksXG59O1xuXG4vKipcbiAqIEhhcmRjb2RlZCBsaXN0IG9mIG1vZGVsIHByZWZpeGVzIGZvciBmaWVsZHMgb24gbW9kZWxzLlxuXG4gKiBBIG1vZGVsIHByZWZpeCBpcyBzb21ldGhpbmcgdGhhdCBcIm5hbWVzcGFjZXNcIiBhIGZpZWxkIG9uIGEgbW9kZWwuICBGb3JcbiAqIGV4YW1wbGUsIGlmIHRoZSBmaWVsZCBpcyBcIkVWVF9JRFwiLCB0aGVuIHRoZSBwcmVmaXggaXMgXCJFVlRcIjsgaWYgdGhlIGZpZWxkIGlzXG4gKiBcIkRUVF9FVlRfc3RhcnRcIiwgdGhlbiB0aGUgcHJlZml4ZXMgYXJlIFwiRFRUXCIsIGFuZCBcIkRUVF9FVlRcIi5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7T2JqZWN0fSBBIGZpbHRlcmVkIG9iamVjdCBpbmRleGVkIGJ5IG1vZGVsIG5hbWUgYW5kIHRoZSB2YWx1ZXMgYXJlXG4gKiBhbiBhcnJheSBvZiBtb2RlbCBwcmVmaXhlcyBmb3IgdGhhdCBtb2RlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX1BSRUZJWEVTID0gKCBtb2RlbE5hbWUgKSA9PiB7XG5cdGNvbnN0IHByZWZpeE1hcCA9IGFwcGx5RmlsdGVycyhcblx0XHQnRkhFRV9fRU5USVRZX0ZBQ1RPUllfX0NPTlNUQU5UU19fTU9ERUxfUFJFRklYRVMnLFxuXHRcdHtcblx0XHRcdGFuc3dlcjogWyAnQU5TJyBdLFxuXHRcdFx0YXR0ZW5kZWU6IFsgJ0FUVCcgXSxcblx0XHRcdGNoYW5nZV9sb2c6IFsgJ0xPRycgXSxcblx0XHRcdGNoZWNraW46IFsgJ0NISycgXSxcblx0XHRcdGNvdW50cnk6IFsgJ0NOVCcgXSxcblx0XHRcdGN1cnJlbmN5OiBbICdDVVInIF0sXG5cdFx0XHRjdXJyZW5jeV9wYXltZW50X21ldGhvZDogWyAnQ1BNJyBdLFxuXHRcdFx0ZGF0ZXRpbWU6IFsgJ0RUVCcsICdEVFRfRVZUJyBdLFxuXHRcdFx0ZGF0ZXRpbWVfdGlja2V0OiBbICdEVEsnIF0sXG5cdFx0XHRldmVudDogWyAnRVZUJyBdLFxuXHRcdFx0ZXZlbnRfbWVzc2FnZV90ZW1wbGF0ZTogWyAnRU1UJyBdLFxuXHRcdFx0ZXZlbnRfcXVlc3Rpb25fZ3JvdXA6IFsgJ0VRRycgXSxcblx0XHRcdGV2ZW50X3ZlbnVlOiBbICdFVlYnIF0sXG5cdFx0XHRleHRyYV9qb2luOiBbICdFWEonIF0sXG5cdFx0XHRleHRyYV9tZXRhOiBbICdFWE0nIF0sXG5cdFx0XHRsaW5lX2l0ZW06IFsgJ0xJTicgXSxcblx0XHRcdG1lc3NhZ2U6IFsgJ01TRycgXSxcblx0XHRcdG1lc3NhZ2VfdGVtcGxhdGU6IFsgJ01UUCcgXSxcblx0XHRcdG1lc3NhZ2VfdGVtcGxhdGVfZ3JvdXA6IFsgJ0dSUCcsICdNVFAnIF0sXG5cdFx0XHRwYXltZW50OiBbICdQQVknIF0sXG5cdFx0XHRwYXltZW50X21ldGhvZDogWyAnUE1EJyBdLFxuXHRcdFx0cG9zdF9tZXRhOiBbICdtZXRhJyBdLFxuXHRcdFx0cHJpY2U6IFsgJ1BSQycgXSxcblx0XHRcdHByaWNlX3R5cGU6IFsgJ1BSVCcgXSxcblx0XHRcdHF1ZXN0aW9uOiBbICdRU1QnIF0sXG5cdFx0XHRxdWVzdGlvbl9ncm91cDogWyAnUVNHJyBdLFxuXHRcdFx0cXVlc3Rpb25fZ3JvdXBfcXVlc3Rpb246IFsgJ1FHUScgXSxcblx0XHRcdHF1ZXN0aW9uX29wdGlvbjogWyAnUVNPJyBdLFxuXHRcdFx0cmVjdXJyZW5jZTogWyAnUkNSJyBdLFxuXHRcdFx0cmVnaXN0cmF0aW9uOiBbICdSRUcnIF0sXG5cdFx0XHRyZWdpc3RyYXRpb25fcGF5bWVudDogWyAnUlBZJyBdLFxuXHRcdFx0c3RhdGU6IFsgJ1NUQScgXSxcblx0XHRcdHN0YXR1czogWyAnU1RTJyBdLFxuXHRcdFx0dGVybTogWyAndGVybScgXSxcblx0XHRcdHRlcm1fcmVsYXRpb25zaGlwOiBbXSxcblx0XHRcdHRlcm1fdGF4b25vbXk6IFsgJ3Rlcm1fdGF4b25vbXknIF0sXG5cdFx0XHR0aWNrZXQ6IFsgJ1RLVCcgXSxcblx0XHRcdHRpY2tldF9wcmljZTogWyAnVEtQJyBdLFxuXHRcdFx0dGlja2V0X3RlbXBsYXRlOiBbICdUVE0nIF0sXG5cdFx0XHR0cmFuc2FjdGlvbjogWyAnVFhOJyBdLFxuXHRcdFx0dmVudWU6IFsgJ1ZOVScgXSxcblx0XHRcdHdwX3VzZXI6IFsgJ3VzZXInIF0sXG5cdFx0fSApO1xuXHRyZXR1cm4gISBpc1VuZGVmaW5lZCggcHJlZml4TWFwWyBtb2RlbE5hbWUgXSApID9cblx0XHRwcmVmaXhNYXBbIG1vZGVsTmFtZSBdIDpcblx0XHRbXTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Y2FtZWxDYXNlLFxuXHR1cHBlckZpcnN0LFxuXHRmb3JFYWNoLFxuXHRpc1VuZGVmaW5lZCxcblx0aXNBcnJheSxcblx0a2V5cyxcblx0c29ydEJ5LFxufSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGN1aWQgZnJvbSAnY3VpZCc7XG5pbXBvcnQgeyBJbnZhbGlkQXJndW1lbnQgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGFzc2VydFZhbGlkRmllbGRBbmRWYWx1ZUFnYWluc3RTY2hlbWEsXG5cdGFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkLFxufSBmcm9tICcuL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHtcblx0ZGVyaXZlUmVuZGVyZWRWYWx1ZSxcblx0ZGVyaXZlUHJlcGFyZWRWYWx1ZUZvckZpZWxkLFxuXHRnZXRSZWxhdGlvbk5hbWVGcm9tTGluayxcblx0Z2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvckNsb25pbmcsXG5cdGdldEJhc2VGaWVsZHNBbmRWYWx1ZXNGb3JQZXJzaXN0aW5nLFxuXHRnZXRQcmltYXJ5S2V5RmllbGRzRnJvbVNjaGVtYSxcblx0Z2V0RW50aXR5RmllbGRzRnJvbVNjaGVtYSxcblx0Z2V0RGVmYXVsdFZhbHVlRm9yRmllbGQsXG5cdGRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkLFxufSBmcm9tICcuL2V4dHJhY3RvcnMnO1xuaW1wb3J0IHtcblx0aXNFbnRpdHlGaWVsZCxcblx0aXNQcmltYXJ5S2V5RmllbGQsXG59IGZyb20gJy4vYm9vbGVhbnMnO1xuaW1wb3J0IHsgUFJJVkFURV9QUk9QRVJUSUVTLCBTQVZFX1NUQVRFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKiooXG4gKiBBIGdlbmVyaWMgZ2V0dGVyIGNyZWF0b3IgZm9yIGEgcHJvdmlkZWQgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lICBUaGUgbmFtZSBvZiB0aGUgYWNjZXNzb3IuXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIHVzZWQgdG8gcGFzcyB0aHJvdWdoIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlXG4gKiBPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUdldHRlciA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSwgb3B0cyA9IHt9ICkgPT4ge1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGluc3RhbmNlLCBmaWVsZE5hbWUsIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRWYWx1ZTtcblx0XHR9LFxuXHRcdC4uLm9wdHMsXG5cdH0gKTtcbn07XG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIGEgZ2V0dGVyIHRoYXQgY2FsbHMgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIHdoZW4gaW52b2tlZC5cbiAqXG4gKiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgdGhlIGBpbnN0YW5jZWAgYXJndW1lbnQgcGFzc2VkIHRocm91Z2hcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oT2JqZWN0KX0gY2FsbEJhY2tcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVDYWxsYmFja0dldHRlciA9IChcblx0aW5zdGFuY2UsXG5cdHByb3BlcnR5TmFtZSxcblx0Y2FsbEJhY2ssXG5cdG9wdHMgPSB7fVxuKSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggaW5zdGFuY2UsIHByb3BlcnR5TmFtZSwge1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiBjYWxsQmFjayggaW5zdGFuY2UgKTtcblx0XHR9LFxuXHRcdC4uLm9wdHMsXG5cdH0gKTtcbn07XG5cbi8qKlxuICogQSBnZW5lcmljIGdldHRlciBhbmQgc2V0dGVyIGNyZWF0b3IgZm9yIGEgcHJvdmlkZWQgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gIGluaXRpYWxGaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCwgcGFzcyB0aHJvdWdoIG9wdGlvbnMgdXNlZCBieVxuICogT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVHZXR0ZXJBbmRTZXR0ZXIgPSAoXG5cdGluc3RhbmNlLFxuXHRmaWVsZE5hbWUsXG5cdGluaXRpYWxGaWVsZFZhbHVlLFxuXHRvcHRzID0ge30sXG4pID0+IHtcblx0bGV0IHByb3BlcnR5VmFsdWUgPSBpbml0aWFsRmllbGRWYWx1ZTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgZmllbGROYW1lLCB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWU7XG5cdFx0fSxcblx0XHRzZXQoIHJlY2VpdmVkVmFsdWUgKSB7XG5cdFx0XHRjb25zdCBpc1ByaW1hcnlGaWVsZCA9IGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGluc3RhbmNlLnNjaGVtYSApO1xuXHRcdFx0aWYgKCAhIGluc3RhbmNlLmlzTmV3ICYmIGlzUHJpbWFyeUZpZWxkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhc3NlcnRWYWxpZFZhbHVlRm9yUHJlcGFyZWRGaWVsZChcblx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRyZWNlaXZlZFZhbHVlLFxuXHRcdFx0XHRpbnN0YW5jZVxuXHRcdFx0KTtcblx0XHRcdGlmICggISBpc1ByaW1hcnlGaWVsZCApIHtcblx0XHRcdFx0c2V0U2F2ZVN0YXRlKCBpbnN0YW5jZSwgU0FWRV9TVEFURS5ESVJUWSApO1xuXHRcdFx0XHRzZXRGaWVsZFRvUGVyc2lzdCggaW5zdGFuY2UsIGZpZWxkTmFtZSApO1xuXHRcdFx0fVxuXHRcdFx0cHJvcGVydHlWYWx1ZSA9IHJlY2VpdmVkVmFsdWU7XG5cdFx0fSxcblx0XHQuLi5vcHRzLFxuXHR9ICk7XG59O1xuXG4vKipcbiAqIEEgZ2V0dGVyIGFuZCBzZXR0ZXIgY3JlYXRvciBmb3IgYW4gZmllbGQgYWxpYXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxGaWVsZE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbGlhc0ZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyID0gKFxuXHRpbnN0YW5jZSxcblx0b3JpZ2luYWxGaWVsZE5hbWUsXG5cdGFsaWFzRmllbGROYW1lLFxuXHRvcHRzID0ge30sXG4pID0+IHtcblx0aWYgKCBvcmlnaW5hbEZpZWxkTmFtZSAhPT0gYWxpYXNGaWVsZE5hbWUgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgYWxpYXNGaWVsZE5hbWUsIHtcblx0XHRcdGdldCgpIHtcblx0XHRcdFx0cmV0dXJuIGluc3RhbmNlWyBvcmlnaW5hbEZpZWxkTmFtZSBdO1xuXHRcdFx0fSxcblx0XHRcdHNldCggcmVjZWl2ZWRWYWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuIGluc3RhbmNlWyBvcmlnaW5hbEZpZWxkTmFtZSBdID0gcmVjZWl2ZWRWYWx1ZTtcblx0XHRcdH0sXG5cdFx0XHQuLi5vcHRzLFxuXHRcdH0gKTtcblx0fVxufTtcblxuLyoqXG4gKiBBIGdldHRlciBjcmVhdG9yIGZvciBhIGZpZWxkIGFsaWFzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpbmFsRmllbGROYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpYXNGaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBbGlhc0dldHRlciA9IChcblx0aW5zdGFuY2UsXG5cdG9yaWdpbmFsRmllbGROYW1lLFxuXHRhbGlhc0ZpZWxkTmFtZSxcblx0b3B0cyA9IHt9LFxuKSA9PiB7XG5cdGlmICggb3JpZ2luYWxGaWVsZE5hbWUgIT09IGFsaWFzRmllbGROYW1lICkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggaW5zdGFuY2UsIGFsaWFzRmllbGROYW1lLCB7XG5cdFx0XHRnZXQoKSB7XG5cdFx0XHRcdHJldHVybiBpbnN0YW5jZVsgb3JpZ2luYWxGaWVsZE5hbWUgXTtcblx0XHRcdH0sXG5cdFx0XHQuLi5vcHRzLFxuXHRcdH0gKTtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZmx1ZW50IHNldHRlciBvbiB0aGUgcHJvdmlkZWQgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBmaWVsZCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgIE9wdGlvbnMgZm9yIE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRmx1ZW50U2V0dGVyID0gKCBpbnN0YW5jZSwgZmllbGROYW1lLCBvcHRzID0ge30gKSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggaW5zdGFuY2UsICdzZXQnICsgdXBwZXJGaXJzdCggZmllbGROYW1lICksIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gKCByZWNlaXZlZFZhbHVlICkgPT4ge1xuXHRcdFx0XHRpbnN0YW5jZVsgZmllbGROYW1lIF0gPSByZWNlaXZlZFZhbHVlO1xuXHRcdFx0XHRyZXR1cm4gaW5zdGFuY2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0Li4ub3B0cyxcblx0fSApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGluaXRpYWwgZ2V0dGVycyBhbmQgc2V0dGVycyBmb3IgZW50aXRpZXMgb24gdGhlIHByb3ZpZGVkIGVudGl0eVxuICogaW5zdGFuY2UgdXNpbmcgdGhlIGdpdmVuIGRhdGEuXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIGtleXMgb24gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVFbnRpdHlHZXR0ZXJzQW5kU2V0dGVycyA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdGNvbnN0IHByaW1hcnlLZXlzID0gW107XG5cdGZvckVhY2goXG5cdFx0aW5zdGFuY2Uub3JpZ2luYWxGaWVsZHNBbmRWYWx1ZXMsXG5cdFx0KCBmaWVsZFZhbHVlLCBmaWVsZE5hbWUgKSA9PiB7XG5cdFx0XHRjb25zdCBpc1ByaW1hcnlLZXkgPSBpc1ByaW1hcnlLZXlGaWVsZCggZmllbGROYW1lLCBpbnN0YW5jZS5zY2hlbWEgKTtcblx0XHRcdHNldFZhbGlkYXRlVHlwZUZvckZpZWxkKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlICk7XG5cdFx0XHRpZiAoIGlzRW50aXR5RmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2Uuc2NoZW1hICkgKSB7XG5cdFx0XHRcdGlmICggaW5zdGFuY2UuaXNOZXcgKSB7XG5cdFx0XHRcdFx0YXNzZXJ0VmFsaWRWYWx1ZUZvclByZXBhcmVkRmllbGQoXG5cdFx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFzc2VydFZhbGlkRmllbGRBbmRWYWx1ZUFnYWluc3RTY2hlbWEoXG5cdFx0XHRcdFx0XHRpbnN0YW5jZS5tb2RlbE5hbWUsXG5cdFx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNldEluaXRpYWxFbnRpdHlGaWVsZHNBbmRWYWx1ZXMoXG5cdFx0XHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0aXNQcmltYXJ5S2V5XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGZpZWxkTmFtZSA9PT0gJ19jYWxjdWxhdGVkX2ZpZWxkcycgKSB7XG5cdFx0XHRcdHNldENhbGN1bGF0ZWRGaWVsZEFuZFZhbHVlcyggaW5zdGFuY2UsIGZpZWxkVmFsdWUgKTtcblx0XHRcdH1cblx0XHRcdGlmICggZmllbGROYW1lID09PSAnX3Byb3RlY3RlZCcgKSB7XG5cdFx0XHRcdHBvcHVsYXRlUHJvdGVjdGVkRmllbGRzUHJvcGVydHkoIGluc3RhbmNlLCBmaWVsZFZhbHVlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGZpZWxkTmFtZSA9PT0gJ2xpbmsnICkge1xuXHRcdFx0XHRjcmVhdGVHZXR0ZXIoIGluc3RhbmNlLCAnbGluaycsIGZpZWxkVmFsdWUgKTtcblx0XHRcdH1cblx0XHRcdGlmICggZmllbGROYW1lID09PSAnX2xpbmtzJyApIHtcblx0XHRcdFx0c2V0UmVzb3VyY2VzKCBpbnN0YW5jZSwgZmllbGRWYWx1ZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhIGluc3RhbmNlLmlzTmV3ICYmIGlzUHJpbWFyeUtleSApIHtcblx0XHRcdFx0cHJpbWFyeUtleXMucHVzaCggZmllbGROYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXHRpZiAoICEgaW5zdGFuY2UuaXNOZXcgJiYgcHJpbWFyeUtleXMubGVuZ3RoICkge1xuXHRcdGNyZWF0ZVByaW1hcnlLZXlGaWVsZEdldHRlcnMoIGluc3RhbmNlLCBwcmltYXJ5S2V5cyApO1xuXHR9XG5cblx0cG9wdWxhdGVQcmltYXJ5S2V5cyggaW5zdGFuY2UgKTtcblx0cG9wdWxhdGVNaXNzaW5nRmllbGRzKCBpbnN0YW5jZSApO1xufTtcblxuLyoqXG4gKiBQb3B1bGF0ZXMgdGhlIGBwcm90ZWN0ZWRGaWVsZHNgIHByb3BlcnR5IG9uIHRoZSBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3RlY3RlZEZpZWxkc1xuICovXG5jb25zdCBwb3B1bGF0ZVByb3RlY3RlZEZpZWxkc1Byb3BlcnR5ID0gKCBpbnN0YW5jZSwgcHJvdGVjdGVkRmllbGRzICkgPT4ge1xuXHQvLyBnZXQgYW55IGNhbGN1bGF0ZWQgcHJvdGVjdGVkIGZpZWxkcy5cblx0Y29uc3QgY2FsY3VsYXRlZEZpZWxkcyA9IGluc3RhbmNlXG5cdFx0Lm9yaWdpbmFsRmllbGRzQW5kVmFsdWVzXG5cdFx0Ll9jYWxjdWxhdGVkX2ZpZWxkcyB8fCB7fTtcblx0aWYgKFxuXHRcdGNhbGN1bGF0ZWRGaWVsZHMuX3Byb3RlY3RlZCAmJlxuXHRcdGlzQXJyYXkoIGNhbGN1bGF0ZWRGaWVsZHMuX3Byb3RlY3RlZCApXG5cdCkge1xuXHRcdHByb3RlY3RlZEZpZWxkcyA9IFtcblx0XHRcdC4uLnByb3RlY3RlZEZpZWxkcyxcblx0XHRcdC4uLmNhbGN1bGF0ZWRGaWVsZHMuX3Byb3RlY3RlZCxcblx0XHRdO1xuXHR9XG5cdGNyZWF0ZUdldHRlciggaW5zdGFuY2UsICdwcm90ZWN0ZWRGaWVsZHMnLCBwcm90ZWN0ZWRGaWVsZHMgKTtcbn07XG5cbi8qKlxuICogVGhpcyBwb3B1bGF0ZXMgcHJpbWFyeSBrZXkgZmllbGRzLlxuICogTm90ZSB0aGF0IGl0IGFsc28gb3ZlcnJpZGVzIGFueSBwcmltYXJ5IGtleSB2YWx1ZXMvcHJvcGVydGllcyB0aGF0IGFyZVxuICogYWxyZWFkeSBzZXQgaW4gdGhlIGVudGl0eSBzbyBpcyBvbmx5IHByb2Nlc3NlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBuZXcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKi9cbmNvbnN0IHBvcHVsYXRlUHJpbWFyeUtleXMgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRpZiAoICEgaW5zdGFuY2UuaXNOZXcgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IHByaW1hcnlLZXlzID0gZ2V0UHJpbWFyeUtleUZpZWxkc0Zyb21TY2hlbWEoIGluc3RhbmNlICk7XG5cdGZvckVhY2goIHByaW1hcnlLZXlzLCAoXG5cdFx0c2NoZW1hUHJvcGVydGllcyxcblx0XHRzY2hlbWFGaWVsZFxuXHQpID0+IHtcblx0XHQvLyBhbHdheXMgZGVsZXRlIGFuZCBvdmVycmlkZSB3aGF0IGlzIGV4aXN0aW5nLlxuXHRcdGlmICggaW5zdGFuY2VbIHNjaGVtYUZpZWxkIF0gKSB7XG5cdFx0XHRkZWxldGUgaW5zdGFuY2VbIHNjaGVtYUZpZWxkIF07XG5cdFx0fVxuXHRcdGNyZWF0ZUdldHRlckFuZFNldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0c2NoZW1hRmllbGQsXG5cdFx0XHRjdWlkKCksXG5cdFx0XHR7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9XG5cdFx0KTtcblx0XHRjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlckZvckZpZWxkKCBpbnN0YW5jZSwgc2NoZW1hRmllbGQgKTtcblx0fSApO1xuXHRjcmVhdGVQcmltYXJ5S2V5RmllbGRHZXR0ZXJzKFxuXHRcdGluc3RhbmNlLFxuXHRcdGtleXMoIHByaW1hcnlLZXlzIClcblx0KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgdmFsaWRhdGUgdHlwZSBmb3IgYSBmaWVsZCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKi9cbmNvbnN0IHNldFZhbGlkYXRlVHlwZUZvckZpZWxkID0gKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlICkgPT4ge1xuXHRpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlZBTElEQVRFX1RZUEVTIF1bIGZpZWxkTmFtZSBdID1cblx0XHRkZXJpdmVWYWxpZGF0ZVR5cGVGb3JGaWVsZCggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBpbnN0YW5jZS5zY2hlbWEgKTtcbn07XG5cbi8qKlxuICogIFBvcHVsYXRlcyBtaXNzaW5nIGZpZWxkcyBhbmQgdmFsdWVzIHVzaW5nIGRlZmF1bHRzIHByb3ZpZGVkIGJ5IHNjaGVtYS4gIElmXG4gKiAgc2NoZW1hIGRvZXNuJ3QgcHJvdmlkZSBhIGRlZmF1bHQgdGhlbiB0aGlzIHdpbGwgcG9wdWxhdGUgdGhlIGZpZWxkIHdpdGggYVxuICogIGRlZmF1bHQgdmFsdWUgdGhhdCBtYXRjaGVzIHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICovXG5jb25zdCBwb3B1bGF0ZU1pc3NpbmdGaWVsZHMgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRpZiAoIHR5cGVvZiBpbnN0YW5jZS5wcm90ZWN0ZWRGaWVsZHMgPT09ICd1bmRlZmluZWQnICkge1xuXHRcdHBvcHVsYXRlUHJvdGVjdGVkRmllbGRzUHJvcGVydHkoIGluc3RhbmNlLCBbXSApO1xuXHR9XG5cdGlmICggISBpbnN0YW5jZS5pc05ldyApIHtcblx0XHRyZXR1cm47XG5cdH1cblx0Zm9yRWFjaChcblx0XHRnZXRFbnRpdHlGaWVsZHNGcm9tU2NoZW1hKCBpbnN0YW5jZSApLFxuXHRcdCggc2NoZW1hUHJvcGVydGllcywgZmllbGROYW1lICkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0eXBlb2YgaW5zdGFuY2VbIGZpZWxkTmFtZSBdID09PSAndW5kZWZpbmVkJyAmJlxuXHRcdFx0XHQhIGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGluc3RhbmNlLnNjaGVtYSApXG5cdFx0XHQpIHtcblx0XHRcdFx0c2V0SW5pdGlhbEVudGl0eUZpZWxkc0FuZFZhbHVlcyhcblx0XHRcdFx0XHRpbnN0YW5jZSxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiBlbnRpdHkgZmllbGRzIGFuZCB2YWx1ZXMgZnJvbSB0aGlzIGVudGl0eSBpbnN0YW5jZVxuICogZm9yIHVzZSBpbiBjbG9uaW5nIHRoZSBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtCYXNlRW50aXR5fSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gUGxhaW4gb2JqZWN0IG9mIGFsbCBmaWVsZDp2YWx1ZSBwYWlycy5cbiAqL1xuY29uc3QgZm9yQ2xvbmUgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRyZXR1cm4gZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvckNsb25pbmcoIGluc3RhbmNlICk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwbGFpbiBvYmplY3Qgb2YgdGhlIGVudGl0eSBmaWVsZHMgYW5kIHZhbHVlcyBmcm9tIHRoaXMgZW50aXR5XG4gKiBpbnN0YW5jZSBwcmVwYXJlZCBmb3IgdXNlIGluIGFuIHVwZGF0ZSByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7T2JqZWN0fSBQbGFpbiBvYmplY3Qgb2YgZmllbGQ6dmFsdWUgcGFpcnMuXG4gKi9cbmNvbnN0IGZvclVwZGF0ZSA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdHJldHVybiBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yUGVyc2lzdGluZyggaW5zdGFuY2UgKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiB0aGUgZW50aXR5IGZpZWxkcyBhbmQgdmFsdWVzIGZyb20gdGhpcyBlbnRpdHlcbiAqIGluc3RhbmNlIHByZXBhcmVkIGZvciB1c2UgaW4gYW4gaW5zZXJ0IHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IFBsYWluIG9iamVjdCBvZiBmaWVsZDp2YWx1ZSBwYWlycy5cbiAqL1xuY29uc3QgZm9ySW5zZXJ0ID0gKCBpbnN0YW5jZSApID0+IHtcblx0Y29uc3QgZW50aXR5VmFsdWVzID0gZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmcoXG5cdFx0aW5zdGFuY2UsXG5cdFx0dHJ1ZVxuXHQpO1xuXHRpbnN0YW5jZS5wcmltYXJ5S2V5cy5mb3JFYWNoKCAoIHByaW1hcnlLZXkgKSA9PiB7XG5cdFx0ZW50aXR5VmFsdWVzWyBwcmltYXJ5S2V5IF0gPSBpbnN0YW5jZVsgcHJpbWFyeUtleSBdO1xuXHR9ICk7XG5cdHJldHVybiBlbnRpdHlWYWx1ZXM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwbGFpbiBvYmplY3Qgb2YgdGhlIGVudGl0eSBmaWVsZHMgYW5kIHZhbHVlcyBmcm9tIHRoaXMgZW50aXR5XG4gKiBpbnN0YW5jZSBwcmVwYXJlZCBmb3IgdXNlIGluIGVpdGhlciBhbiBpbnNlcnQgb3IgdXBkYXRlIHJlcXVlc3QuICBUaGUgdHlwZVxuICogaXMgYXV0b21hdGljYWxseSBkZXJpdmVkIGZyb20gdGhlIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGVudGl0eSBpcyBcIm5ld1wiIG9yXG4gKiBub3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IFBsYWluIG9iamVjdCBvZiBmaWVsZDp2YWx1ZSBwYWlycy5cbiAqL1xuY29uc3QgZm9yUGVyc2lzdCA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdGlmICggaW5zdGFuY2UuaXNOZXcgKSB7XG5cdFx0cmV0dXJuIGZvckluc2VydCggaW5zdGFuY2UgKTtcblx0fVxuXHRyZXR1cm4gZm9yVXBkYXRlKCBpbnN0YW5jZSApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGdldHRlcnMgZm9yIHJldHJpZXZpbmcgdGhlIGZpZWxkcyBhbmQgdmFsdWVzIG9mIHRoZSBlbnRpdHkgaW5zdGFuY2VcbiAqIGZvciBpbnNlcnQgb3IgdXBkYXRlIHJlcXVlc3RzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUGVyc2lzdGluZ0dldHRlcnNBbmRTZXR0ZXJzID0gKCBpbnN0YW5jZSApID0+IHtcblx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoIGluc3RhbmNlLCAnZm9yVXBkYXRlJywgZm9yVXBkYXRlICk7XG5cdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKCBpbnN0YW5jZSwgJ2Zvckluc2VydCcsIGZvckluc2VydCApO1xuXHRjcmVhdGVDYWxsYmFja0dldHRlciggaW5zdGFuY2UsICdmb3JQZXJzaXN0JywgZm9yUGVyc2lzdCApO1xuXHRjcmVhdGVDYWxsYmFja0dldHRlciggaW5zdGFuY2UsICdmb3JDbG9uZScsIGZvckNsb25lICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgaW5pdGlhbCBlbnRpdHkgZmllbGQgYWNjZXNzb3JzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJpbWFyeUtleVxuICovXG5jb25zdCBzZXRJbml0aWFsRW50aXR5RmllbGRzQW5kVmFsdWVzID0gKFxuXHRpbnN0YW5jZSxcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRpc1ByaW1hcnlLZXkgPSBmYWxzZSxcbikgPT4ge1xuXHRpZiAoIGlzVW5kZWZpbmVkKCBmaWVsZFZhbHVlICkgKSB7XG5cdFx0ZmllbGRWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZUZvckZpZWxkKCBmaWVsZE5hbWUsIGluc3RhbmNlLnNjaGVtYSApO1xuXHRcdHNldFZhbGlkYXRlVHlwZUZvckZpZWxkKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlICk7XG5cdH1cblx0Y3JlYXRlUmF3RW50aXR5R2V0dGVyc1NldHRlcnMoXG5cdFx0aW5zdGFuY2UsXG5cdFx0ZmllbGROYW1lLFxuXHRcdGRlcml2ZVByZXBhcmVkVmFsdWVGb3JGaWVsZCggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBpbnN0YW5jZSApLFxuXHRcdGlzUHJpbWFyeUtleVxuXHQpO1xuXHRpZiAoICEgaXNQcmltYXJ5S2V5ICkge1xuXHRcdGNyZWF0ZVJlbmRlcmVkR2V0dGVycyhcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0ZGVyaXZlUmVuZGVyZWRWYWx1ZSggZmllbGRWYWx1ZSApXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIHJhdyBlbnRpdHkgZ2V0dGVycyBhbmQgc2V0dGVycy4gIFRoZXNlIGFyZSB0aGUgcHJvcGVydGllcyBvZiBhblxuICogZW50aXR5IHRoYXQgaGF2ZSB0aGUgdmFsdWVzIHVzZWQgZm9yIG5vdCBvbmx5IGdldHRpbmcgYnV0IGFsc28gc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtib29sZWFufSBpc1ByaW1hcnlLZXkgc2V0IHRvIHRydWUgaWYgZmllbGQgaXMgdGhlIG1vZGVsJ3MgcHJpbWFyeSBrZXlcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVJhd0VudGl0eUdldHRlcnNTZXR0ZXJzID0gKFxuXHRpbnN0YW5jZSxcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRpc1ByaW1hcnlLZXkgPSBmYWxzZSxcbikgPT4ge1xuXHRjb25zdCBvcHRzID0geyBlbnVtZXJhYmxlOiB0cnVlIH07XG5cdC8vIHByaW1hcnkga2V5IGlzIGltbXV0YWJsZVxuXHRpZiAoIGlzUHJpbWFyeUtleSApIHtcblx0XHRjcmVhdGVHZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRvcHRzXG5cdFx0KTtcblx0XHRjcmVhdGVBbGlhc0dldHRlckZvckZpZWxkKCBpbnN0YW5jZSwgZmllbGROYW1lICk7XG5cdH0gZWxzZSB7XG5cdFx0Y3JlYXRlR2V0dGVyQW5kU2V0dGVyKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0b3B0c1xuXHRcdCk7XG5cdFx0Y3JlYXRlRmx1ZW50U2V0dGVyKCBpbnN0YW5jZSwgZmllbGROYW1lICk7XG5cdFx0Y3JlYXRlQWxpYXNHZXR0ZXJBbmRTZXR0ZXJGb3JGaWVsZCggaW5zdGFuY2UsIGZpZWxkTmFtZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgXCJhbGlhc1wiIGdldHRlciBmb3IgdGhlIGdpdmVuIGZpZWxkIG5hbWUgb24gdGhlIGVudGl0eSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQWxpYXNHZXR0ZXJGb3JGaWVsZCA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSApID0+IHtcblx0Y3JlYXRlQWxpYXNlc0Zvck1ldGhvZCggaW5zdGFuY2UsIGZpZWxkTmFtZSwgY3JlYXRlQWxpYXNHZXR0ZXIgKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBcImFsaWFzXCIgZ2V0dGVycyBhbmQgc2V0dGVycyBmb3IgdGhlIGdpdmVuIGZpZWxkIG9uIHRoZSBlbnRpdHlcbiAqIGluc3RhbmNlLlxuICpcbiAqIEV4YW1wbGU6IERhdGV0aW1lIGVudGl0aWVzIGhhdmUgYSBgRFRUX0VWVF9zdGFydGAgZmllbGQuICBPbiB0aGUgZW50aXR5XG4gKiBpbnN0YW5jZSwgeW91IHdpbGwgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHZhbHVlIG9mIHRoYXQgZmllbGQgdmlhOlxuICogLSBkYXRldGltZS5EVFRfRVZUX3N0YXJ0XG4gKiAtIGRhdGV0aW1lLmR0dEV2dFN0YXJ0XG4gKiAtIGRhdGV0aW1lLmV2dFN0YXJ0XG4gKiAtIGRhdGV0aW1lLnN0YXJ0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlckZvckZpZWxkID0gKCBpbnN0YW5jZSwgZmllbGROYW1lICkgPT4ge1xuXHRjcmVhdGVBbGlhc2VzRm9yTWV0aG9kKCBpbnN0YW5jZSwgZmllbGROYW1lLCBjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlciApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIEFsaWFzZXMgdXNpbmcgdGhlIHByb3ZpZGVkIG1ldGhvZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kXG4gKi9cbmNvbnN0IGNyZWF0ZUFsaWFzZXNGb3JNZXRob2QgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUsIG1ldGhvZCApID0+IHtcblx0Ly8gY2FtZWxDYXNlIGdldHRlciAob3Igc2V0dGVyKSBmb3IgZnVsbCBmaWVsZCBuYW1lIChlZy4gRVZUX2Rlc2MgPT4gZXZ0RGVzYylcblx0bWV0aG9kKCBpbnN0YW5jZSwgZmllbGROYW1lLCBjYW1lbENhc2UoIGZpZWxkTmFtZSApICk7XG5cdC8vIHN0cmlwIGZpZWxkIHByZWZpeGVzIGFuZCBjYW1lbENhc2UgKGlmIHRoZXJlIGFyZSBmaWVsZCBwcmVmaXhlcyBmb3IgdGhlXG5cdC8vIGVudGl0eS4gKGVnLiBFVlRfZGVzYyA9PiBkZXNjKTtcblx0aWYgKCBpbnN0YW5jZS5maWVsZFByZWZpeGVzICkge1xuXHRcdGxldCBuZXdGaWVsZE5hbWUgPSAnJztcblx0XHQvLyBZZXMsIGl0cyBpbnRlbmRlZCB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBwcmVmaXhlcywgdGhpcyBjb3VsZFxuXHRcdC8vIGVuZCB1cCBjcmVhdGluZyBtdWx0aXBsZSBhbGlhc2VkIGdldHRlcnMgKG9yIHNldHRlcnMpXG5cdFx0Ly8gKGVnIERhdGV0aW1lOiBEVFRfRVZUX3N0YXJ0IHdvdWxkIGVuZCB1cCB3aXRoIGBldnRTdGFydGAgYW5kIGBzdGFydGBcblx0XHQvLyBhcyBnZXR0ZXIgYWNjZXNzb3JzKS5cblx0XHRpbnN0YW5jZS5maWVsZFByZWZpeGVzLmZvckVhY2goICggZmllbGRQcmVmaXggKSA9PiB7XG5cdFx0XHRuZXdGaWVsZE5hbWUgPSBmaWVsZE5hbWUucmVwbGFjZSggZmllbGRQcmVmaXggKyAnXycsICcnICk7XG5cdFx0XHRpZiAoIG5ld0ZpZWxkTmFtZSAhPT0gZmllbGROYW1lICkge1xuXHRcdFx0XHRtZXRob2QoXG5cdFx0XHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdGNhbWVsQ2FzZSggbmV3RmllbGROYW1lIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGNhbGxiYWNrIHRoYXQgaXMgdXNlZCBpbiB0aGUgYGdldFJlbmRlcmVkYCBmaWVsZCBnZXR0ZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6ICp9ICBBIGNhbGxiYWNrLlxuICovXG5jb25zdCBnZXRSZW5kZXJlZENhbGxiYWNrID0gKCBpbnN0YW5jZSApID0+ICggcmVxdWVzdGVkRmllbGROYW1lICkgPT5cblx0aW5zdGFuY2VbIHJlcXVlc3RlZEZpZWxkTmFtZSArICdSZW5kZXJlZCcgXTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZmllbGROYW1lIHN0cmlwcGVkIG9mIGFsbCBwb3NzaWJsZSBwcmVmaXhlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHByZWZpeCBmcmVlIGZpZWxkTmFtZS5cbiAqL1xuY29uc3QgcmVtb3ZlUHJlZml4ZXNGcm9tRmllbGQgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUgKSA9PiB7XG5cdGNvbnN0IHByZWZpeGVzVG9SZW1vdmUgPSBzb3J0QnkoXG5cdFx0aW5zdGFuY2UuZmllbGRQcmVmaXhlcyxcblx0XHQoIHByZWZpeCApID0+IHByZWZpeC5sZW5ndGggKiAtMVxuXHQpO1xuXHRsZXQgbmV3RmllbGROYW1lID0gZmllbGROYW1lO1xuXHRmb3JFYWNoKCBwcmVmaXhlc1RvUmVtb3ZlLCAoIHByZWZpeCApID0+IHtcblx0XHRuZXdGaWVsZE5hbWUgPSBmaWVsZE5hbWUucmVwbGFjZSggcHJlZml4LCAnJyApO1xuXHRcdGlmICggbmV3RmllbGROYW1lICE9PSBmaWVsZE5hbWUgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9ICk7XG5cdHJldHVybiBuZXdGaWVsZE5hbWU7XG59O1xuXG4vKipcbiAqIFRoaXMgY3JlYXRlcyB0aGUgZ2V0dGVycyBmb3IgdGhlIHJlbmRlcmVkIHByb3BlcnR5IG9mIG1vZGVsIGZpZWxkcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gIGZpZWxkVmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlbmRlcmVkR2V0dGVycyA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSApID0+IHtcblx0Y3JlYXRlR2V0dGVyKFxuXHRcdGluc3RhbmNlLFxuXHRcdGNhbWVsQ2FzZSggcmVtb3ZlUHJlZml4ZXNGcm9tRmllbGQoIGluc3RhbmNlLCBmaWVsZE5hbWUgKSApICtcblx0XHQnUmVuZGVyZWQnLFxuXHRcdGZpZWxkVmFsdWVcblx0KTtcblx0aWYgKCBpc1VuZGVmaW5lZCggaW5zdGFuY2UuZ2V0UmVuZGVyZWQgKSApIHtcblx0XHRjcmVhdGVDYWxsYmFja0dldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0J2dldFJlbmRlcmVkJyxcblx0XHRcdGdldFJlbmRlcmVkQ2FsbGJhY2ssXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgdGhlIGBoYXNNdWx0aXBsZVByaW1hcnlLZXlzYCBnZXR0ZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbigpOiBib29sZWFufSBUaGUgY2FsbGJhY2sgZm9yIGhhc011bHRpcGxlUHJpbWFyeUtleXMgZ2V0dGVyXG4gKi9cbmNvbnN0IGhhc011bHRpcGxlUHJpbWFyeUtleXNDYWxsYmFjayA9ICggaW5zdGFuY2UgKSA9PlxuXHRpbnN0YW5jZS5wcmltYXJ5S2V5cy5sZW5ndGggPiAxO1xuXG4vKipcbiAqIENyZWF0ZXMgZ2V0dGVycyBmb3IgcHJpbWFyeSBrZXkgcmVsYXRlZCBkYXRhLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtBcnJheX0gcHJpbWFyeUtleXNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVByaW1hcnlLZXlGaWVsZEdldHRlcnMgPSAoIGluc3RhbmNlLCBwcmltYXJ5S2V5cyApID0+IHtcblx0Y29uc3Qgb3B0cyA9IHsgY29uZmlndXJhYmxlOiB0cnVlIH07XG5cdGlmICggaXNBcnJheSggcHJpbWFyeUtleXMgKSApIHtcblx0XHRjcmVhdGVHZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdCdwcmltYXJ5S2V5Jyxcblx0XHRcdHByaW1hcnlLZXlzWyAwIF0sXG5cdFx0XHRvcHRzXG5cdFx0KTtcblx0XHRjcmVhdGVHZXR0ZXJBbmRTZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdCdwcmltYXJ5S2V5cycsXG5cdFx0XHRwcmltYXJ5S2V5cyxcblx0XHRcdG9wdHNcblx0XHQpO1xuXHRcdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHQnaGFzTXVsdGlwbGVQcmltYXJ5S2V5cycsXG5cdFx0XHRoYXNNdWx0aXBsZVByaW1hcnlLZXlzQ2FsbGJhY2ssXG5cdFx0XHRvcHRzXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6IGJvb2xlYW59IFJldHVybnMgYSBjYWxsYmFjayBmb3IgdGhlXG4gKiBoYXNDYWxjdWxhdGVkRmllbGQgZ2V0dGVyXG4gKi9cbmNvbnN0IGhhc0NhbGN1bGF0ZWRGaWVsZENhbGxiYWNrID0gKCBpbnN0YW5jZSApID0+XG5cdCggZmllbGROYW1lVG9DaGVjayApID0+ICEgaXNVbmRlZmluZWQoIGluc3RhbmNlWyBmaWVsZE5hbWVUb0NoZWNrIF0gKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBnZXR0ZXJzIGZvciBhbGwgdGhlIGNhbGN1bGF0ZWQgZmllbGRzIGFuZCB2YWx1ZSBvbiB0aGUgZW50aXR5LlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fWZpZWxkc0FuZFZhbHVlc1xuICovXG5leHBvcnQgY29uc3Qgc2V0Q2FsY3VsYXRlZEZpZWxkQW5kVmFsdWVzID0gKCBpbnN0YW5jZSwgZmllbGRzQW5kVmFsdWVzICkgPT4ge1xuXHRmb3JFYWNoKCBmaWVsZHNBbmRWYWx1ZXMsICggY2FsY3VsYXRlZEZpZWxkVmFsdWUsIGNhbGN1bGF0ZWRGaWVsZE5hbWUgKSA9PiB7XG5cdFx0aWYgKCBjYWxjdWxhdGVkRmllbGROYW1lICE9PSAnX3Byb3RlY3RlZCcgKSB7XG5cdFx0XHRjcmVhdGVHZXR0ZXIoXG5cdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHRjYW1lbENhc2UoIGNhbGN1bGF0ZWRGaWVsZE5hbWUgKSxcblx0XHRcdFx0Y2FsY3VsYXRlZEZpZWxkVmFsdWVcblx0XHRcdCk7XG5cdFx0fVxuXHR9ICk7XG5cdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKFxuXHRcdGluc3RhbmNlLFxuXHRcdCdoYXNDYWxjdWxhdGVkRmllbGQnLFxuXHRcdGhhc0NhbGN1bGF0ZWRGaWVsZENhbGxiYWNrXG5cdCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBnZXR0ZXJzIGZvciB0aGUgdmFyaW91cyByZXNvdXJjZSBsaW5rcyBvbiB0aGUgZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn1maWVsZHNBbmRWYWx1ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFJlc291cmNlcyA9ICggaW5zdGFuY2UsIGZpZWxkc0FuZFZhbHVlcyApID0+IHtcblx0Y29uc3QgcmVsYXRpb25zID0gW107XG5cdGxldCByZWxhdGlvbk5hbWU7XG5cdGZvckVhY2goIGZpZWxkc0FuZFZhbHVlcywgKCByZXNvdXJjZVZhbHVlLCByZXNvdXJjZU5hbWUgKSA9PiB7XG5cdFx0aWYgKCByZXNvdXJjZU5hbWUgPT09ICdzZWxmJyApIHtcblx0XHRcdGNyZWF0ZUdldHRlciggaW5zdGFuY2UsICdyZXNvdXJjZUxpbmsnLCByZXNvdXJjZVZhbHVlWyAwIF0uaHJlZiApO1xuXHRcdH0gZWxzZSBpZiAoIHJlc291cmNlTmFtZSA9PT0gJ2NvbGxlY3Rpb24nICkge1xuXHRcdFx0Y3JlYXRlR2V0dGVyKFxuXHRcdFx0XHRpbnN0YW5jZSxcblx0XHRcdFx0J2NvbGxlY3Rpb25SZXNvdXJjZUxpbmsnLFxuXHRcdFx0XHRyZXNvdXJjZVZhbHVlWyAwIF0uaHJlZlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVsYXRpb25OYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUxpbmsoIHJlc291cmNlTmFtZSApO1xuXHRcdFx0cmVsYXRpb25zLnB1c2goIHJlbGF0aW9uTmFtZSApO1xuXHRcdFx0c2V0UmVsYXRpb25zUmVzb3VyY2UoXG5cdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHRyZWxhdGlvbk5hbWUgKyAnUmVzb3VyY2UnLFxuXHRcdFx0XHRyZXNvdXJjZVZhbHVlXG5cdFx0XHQpO1xuXHRcdH1cblx0fSApO1xuXHQvL3NldCByZWxhdGlvbnMgZ2V0dGVyXG5cdGNyZWF0ZUdldHRlciggaW5zdGFuY2UsICdnZXRSZWxhdGlvbnMnLCByZWxhdGlvbnMgKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihzdHJpbmcpOiBPYmplY3R9IFJldHVybnMgdGhlIGNhbGxiYWNrIGZvciBnZXR0aW5nIGFcbiAqIHJlbGF0aW9uIHJlc291cmNlXG4gKi9cbmNvbnN0IGdldFJlbGF0aW9uUmVzb3VyY2VDYWxsYmFjayA9ICggaW5zdGFuY2UgKSA9PlxuXHQoIHJlbGF0aW9uTmFtZSApID0+IGluc3RhbmNlWyByZWxhdGlvbk5hbWUucmVwbGFjZSggJ1Jlc291cmNlJywgJycgKSBdO1xuXG4vKipcbiAqIENyZWF0ZXMgZ2V0dGVycyBmb3IgdGhlIHJlbGF0aW9ucyByZXNvdXJjZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCBzdHJpbmc+fSByZXNvdXJjZUluZm9cbiAqL1xuZXhwb3J0IGNvbnN0IHNldFJlbGF0aW9uc1Jlc291cmNlID0gKFxuXHRpbnN0YW5jZSxcblx0cmVsYXRpb25OYW1lLFxuXHRyZXNvdXJjZUluZm9cbikgPT4ge1xuXHRjcmVhdGVHZXR0ZXIoXG5cdFx0aW5zdGFuY2UsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHtcblx0XHRcdHJlc291cmNlTGluazogcmVzb3VyY2VJbmZvWyAwIF0uaHJlZixcblx0XHRcdHNpbmdsZTogcmVzb3VyY2VJbmZvWyAwIF0uc2luZ2xlLFxuXHRcdH1cblx0KTtcblx0aWYgKCBpc1VuZGVmaW5lZCggaW5zdGFuY2UuZ2V0UmVsYXRpb25SZXNvdXJjZSApICkge1xuXHRcdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKCBpbnN0YW5jZSxcblx0XHRcdCdnZXRSZWxhdGlvblJlc291cmNlJyxcblx0XHRcdGdldFJlbGF0aW9uUmVzb3VyY2VDYWxsYmFja1xuXHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogU2V0cyB0aGUgaW50ZXJuYWwgc2F2ZSBzdGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgd2hlbiBjdXJyZW50IHN0YXRlIGlzXG4gKiBTQVZFX1NUQVRFLmNsZWFuIG90aGVyd2lzZSBjdXJyZW50IHNhdmUgc3RhdGUgaXMgcmV0YWluZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2F2ZVN0YXRlIEV4cGVjdGVkIHRvIGJlIG9uZSBvZiBTQVZFX1NUQVRFIGNvbnN0YW50IHZhbHVlcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3ZlcnJpZGUgU2V0IHRvIHRydWUgd2hlbiBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGxvZ2ljIGZvclxuICogc2V0dGluZyBzdGF0ZS4gIFdoZW4gdHJ1ZSwgdGhlIHNhdmVTdGF0ZSBpcyBzZXQgdG8gd2hhdGV2ZXIgdGhlIGluY29taW5nXG4gKiBzYXZlU3RhdGUgdmFsdWUgaXMuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTYXZlU3RhdGUgPSAoIGluc3RhbmNlLCBzYXZlU3RhdGUsIG92ZXJyaWRlID0gZmFsc2UgKSA9PiB7XG5cdGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGluc3RhbmNlWyBQUklWQVRFX1BST1BFUlRJRVMuU0FWRV9TVEFURSBdO1xuXHRzd2l0Y2ggKCBzYXZlU3RhdGUgKSB7XG5cdFx0Y2FzZSBTQVZFX1NUQVRFLkRJUlRZOlxuXHRcdGNhc2UgU0FWRV9TVEFURS5ORVc6XG5cdFx0Y2FzZSBTQVZFX1NUQVRFLkNMRUFOOlxuXHRcdFx0aWYgKCBvdmVycmlkZSApIHtcblx0XHRcdFx0aW5zdGFuY2VbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF0gPSBzYXZlU3RhdGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aW5zdGFuY2VbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF0gPVxuXHRcdFx0XHRjdXJyZW50U3RhdGUgPT09IFNBVkVfU1RBVEUuQ0xFQU4gP1xuXHRcdFx0XHRcdHNhdmVTdGF0ZSA6XG5cdFx0XHRcdFx0Y3VycmVudFN0YXRlO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnQoXG5cdFx0XHRcdCdTYXZlIHN0YXRlIGZvciBlbnRpdHkgY2FuIG9ubHkgYmUgc2V0IHRvIGVpdGhlciAnICtcblx0XHRcdFx0J1NBVkVfU1RBVEUuRElSVFksIFNBVkVfU1RBVEUuTkVXIG9yIFNBVkVfU1RBVEUuQ0xFQU4nXG5cdFx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZmllbGQgbmFtZSB0byB0aGUgZmllbGRUb1BlcnNpc3RPbkluc2VydCBwcm9wZXJ0eSBvbiB0aGUgaW5zdGFuY2VcbiAqIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpZWxkVG9QZXJzaXN0ID0gKCBpbnN0YW5jZSwgZmllbGROYW1lICkgPT4ge1xuXHRpZiAoIGluc3RhbmNlLmZpZWxkc1RvUGVyc2lzdE9uSW5zZXJ0ICkge1xuXHRcdGluc3RhbmNlLmZpZWxkc1RvUGVyc2lzdE9uSW5zZXJ0LmFkZCggZmllbGROYW1lICk7XG5cdH1cbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0aXNQbGFpbk9iamVjdCxcblx0Y2FtZWxDYXNlLFxuXHRsYXN0LFxuXHRwaWNrLFxuXHRwaWNrQnksXG5cdGlzQXJyYXksXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBpbnN0YW5jZU9mIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRNb25leSxcblx0U2l0ZUN1cnJlbmN5LFxuXHRTZXJ2ZXJEYXRlVGltZSBhcyBEYXRlVGltZSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5cbmltcG9ydCB7IHBsdXJhbE1vZGVsTmFtZSB9IGZyb20gJy4uL21vZGVsLW5hbWVzJztcblxuaW1wb3J0IHtcblx0aGFzUmF3UHJvcGVydHksXG5cdGhhc1ByZXR0eVByb3BlcnR5LFxuXHRoYXNSZW5kZXJlZFByb3BlcnR5LFxuXHRpc0RhdGVUaW1lRmllbGQsXG5cdGlzTW9uZXlGaWVsZCxcblx0aXNQcmltYXJ5S2V5RmllbGQsXG5cdGlzRW50aXR5RmllbGQsXG59IGZyb20gJy4vYm9vbGVhbnMnO1xuaW1wb3J0IHsgdmFsaWRhdGVUeXBlRm9yRmllbGQgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgVkFMSURBVEVfVFlQRSB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBUaGlzIHJlY2VpdmVzIGEgZmllbGQgbmFtZSwgaXQncyB2YWx1ZSBhbmQgdGhlIHNjaGVtYSBhbmQgY29udmVydHMgaXQgdG8gdGhlXG4gKiByZWxhdGVkIHZhbHVlIG9iamVjdCBJRiB0aGUgc2NoZW1hIGluZGljYXRlcyBpdCBpcyBvZiBhIHR5cGUgdGhhdCB0aGVyZSBpcyBhXG4gKiBrbm93biB2YWx1ZSBvYmplY3QgZm9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7RGF0ZVRpbWV8TW9uZXl8Kn0gIElmIHRoaXMgaXMgbm90IGEgdmFsdWUgb2JqZWN0LCB0aGUgb3JpZ2luYWwgZmllbGRcbiAqIHZhbHVlIGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgbWF5YmVDb252ZXJ0VG9WYWx1ZU9iamVjdCA9ICggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBzY2hlbWEgKSA9PiB7XG5cdGlmIChcblx0XHRpc0RhdGVUaW1lRmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgJiZcblx0XHQhIERhdGVUaW1lLnZhbGlkYXRlSXNEYXRlVGltZSggZmllbGRWYWx1ZSApXG5cdCkge1xuXHRcdHJldHVybiBEYXRlVGltZS5mcm9tSVNPKCBmaWVsZFZhbHVlICk7XG5cdH1cblx0aWYgKFxuXHRcdGlzTW9uZXlGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSAmJlxuXHRcdCEgKCBpbnN0YW5jZU9mKCBmaWVsZFZhbHVlLCAnTW9uZXknICkgKVxuXHQpIHtcblx0XHRyZXR1cm4gbmV3IE1vbmV5KCBmaWVsZFZhbHVlLCBTaXRlQ3VycmVuY3kgKTtcblx0fVxuXHQvLyBpZiBtb3JlIFZPcyBnZXQgYWRkZWQsIHRoZW4gaW5zdGVhZCBvZiBhZGRpbmcgbW9yZSBpZiBlbHNlIGJsb2Nrc1xuXHQvLyB0byB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgb25lcyBiZWxvdywgYWxsIFZPIGxvZ2ljIHNob3VsZCBiZSBleHRyYWN0ZWRcblx0Ly8gaW50byBzb21lIGtpbmQgb2YgIFZhbHVlT2JqZWN0RXh0cmFjdG9yIG9iamVjdCB0aGF0IHdvdWxkIGhvbGQgYWxsIG9mXG5cdC8vIHRoZSBuZWNlc3NhcnkgY2FsbGJhY2tzIGZvciBtYW5hZ2luZyB0aGUgZGV0ZWN0aW9uIG9mIFZPIGZpZWxkcyBhbmRcblx0Ly8gY29udmVyc2lvbiBvZiBkYXRhIHRvIGFuZCBmcm9tIHRoZSB2YXJpb3VzIFZPc1xuXHQvLyBwbHogc2VlOlxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vZXZlbnRlc3ByZXNzby9ldmVudC1lc3ByZXNzby1jb3JlL3B1bGwvNjM3L2ZpbGVzI3IyMjg2OTA3ODlcblx0cmV0dXJuIGZpZWxkVmFsdWU7XG59O1xuXG4vKipcbiAqIFRoaXMgY29udmVydHMgdGhlIGluY29taW5nIHZhbHVlIGZvciBhIGZpZWxkIHRvIGl0cyBlcXVpdmFsZW50IFwicmF3XCIgdmFsdWVcbiAqIGZyb20gYSB2YWx1ZSBvYmplY3QgaWYgaXQgaXMgYSB2YWx1ZSBvYmplY3QuICBPdGhlcndpc2UgaXQganVzdCByZXR1cm5zIHRoZVxuICogb3JpZ2luYWwgaW5jb21pbmcgdmFsdWUuICBUaGlzIGFsc28gYXNzZXJ0cyB0aGF0IGlmIHRoZSBwcm92aWRlZCBmaWVsZCBpc1xuICogZXhwZWN0ZWQgdG8gYmUgYSB2YWx1ZSBvYmplY3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgSVMgYSB2YWxpZCB2YWx1ZSBvYmplY3RcbiAqIGFuZCBpdCBpcyB0aGUgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYSB2YWx1ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfE1vbmV5fERhdGVUaW1lfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtzdHJpbmd8bnVtYmVyfCp9ICBJZiB0aGUgdmFsdWUgaXMgbm90IGEgdmFsdWUgb2JqZWN0LCByZXR1cm5zIHRoZVxuICogb3JpZ2luYWwgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zID0gKFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdHNjaGVtYVxuKSA9PiB7XG5cdGlmICggaXNEYXRlVGltZUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICkge1xuXHRcdERhdGVUaW1lLmFzc2VydElzRGF0ZVRpbWUoIGZpZWxkVmFsdWUgKTtcblx0XHRmaWVsZFZhbHVlID0gZmllbGRWYWx1ZS50b0lTTygpO1xuXHR9IGVsc2UgaWYgKCBpc01vbmV5RmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0TW9uZXkuYXNzZXJ0TW9uZXkoIGZpZWxkVmFsdWUgKTtcblx0XHRmaWVsZFZhbHVlID0gZmllbGRWYWx1ZS50b051bWJlcigpO1xuXHR9XG5cdHJldHVybiBmaWVsZFZhbHVlO1xufTtcblxuLyoqXG4gKiBUaGlzIGNvbnZlcnRzIHRoZSBpbmNvbWluZyB2YWx1ZSBmb3IgYSBmaWVsZCB0byBpdHMgZXF1aXZhbGVudCBcInJhd1wiIHZhbHVlXG4gKiBpZiB0aGUgaW5jb21pbmcgdmFsdWUgIGlzIGEgdmFsdWUgb2JqZWN0LiAgT3RoZXJ3aXNlIGl0IGp1c3QgcmV0dXJucyB0aGVcbiAqIG9yaWdpbmFsIGluY29taW5nIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7KnxEYXRlVGltZXxNb25leX1maWVsZFZhbHVlXG4gKiBAcmV0dXJuIHsqfSBUaGUgcmF3IHZhbHVlIGZvciB0aGUgdmFsdWUgb2JqZWN0IG9yIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdCA9ICggZmllbGRWYWx1ZSApID0+IHtcblx0aWYgKCBEYXRlVGltZS52YWxpZGF0ZUlzRGF0ZVRpbWUoIGZpZWxkVmFsdWUgKSApIHtcblx0XHRmaWVsZFZhbHVlID0gZmllbGRWYWx1ZS50b0lTTygpO1xuXHR9IGVsc2UgaWYgKCBpbnN0YW5jZU9mKCBmaWVsZFZhbHVlLCAnTW9uZXknICkgKSB7XG5cdFx0ZmllbGRWYWx1ZSA9IGZpZWxkVmFsdWUudG9OdW1iZXIoKTtcblx0fVxuXHRyZXR1cm4gZmllbGRWYWx1ZTtcbn07XG5cbi8qKlxuICogVGhpcyBkZXJpdmVzIHRoZSBcInByZXBhcmVkXCIgdmFsdWUgZm9yIHRoZSBnaXZlbiBmaWVsZCBhbmQgdmFsdWUuXG4gKlxuICogXCJQcmVwYXJlZFwiIG1lYW5zOlxuICpcbiAqIC0gY29udmVydGluZyB0byBhIHZhbHVlIG9iamVjdCBpZiB0aGlzIGlzIGEgZmllbGQgdGhhdCB0aGVyZSBhcmUgZGVmaW5lZFxuICogICB2YWx1ZSBvYmplY3RzIGZvci5cbiAqIC0gcmV0cmlldmluZyB0aGUgXCJyYXdcIiB2YWx1ZSBmcm9tIGZpZWxkIHZhbHVlcyB0aGF0IGhhdmUgYHJhd2AgYW5kIGByZW5kZXJlZGBcbiAqICAgb3IgYHByZXR0eWAgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9ICBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge0RhdGVUaW1lfE1vbmV5fCp9ICBSZXR1cm5zIHRoZSBvcmlnaW5hbCBpbmNvbWluZyB2YWx1ZSBpZiBpdCBkb2VzXG4gKiBub3QgaGF2ZSBhIHJhdyBlcXVpdmFsZW50IG9yIGlzIG5vdCBhIHZhbHVlIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlcml2ZVByZXBhcmVkVmFsdWVGb3JGaWVsZCA9IChcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRpbnN0YW5jZVxuKSA9PiB7XG5cdGNvbnN0IHZhbGlkYXRpb25UeXBlID0gdmFsaWRhdGVUeXBlRm9yRmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2UgKTtcblx0ZmllbGRWYWx1ZSA9IGlzUGxhaW5PYmplY3QoIGZpZWxkVmFsdWUgKSA/XG5cdFx0ZmllbGRWYWx1ZVsgdmFsaWRhdGlvblR5cGUgXSA6XG5cdFx0ZmllbGRWYWx1ZTtcblx0cmV0dXJuIG1heWJlQ29udmVydFRvVmFsdWVPYmplY3QoIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSwgaW5zdGFuY2Uuc2NoZW1hICk7XG59O1xuXG4vKipcbiAqIFRoaXMgcmV0dXJucyB0aGUgXCJyZW5kZXJlZFwiIG9yIFwicHJldHR5XCIgZXF1aXZhbGVudCBmcm9tIGEgdmFsdWUgaWYgaXQgZXhpc3RzXG4gKiBhcyBhIHByb3BlcnR5IG9uIGl0LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9ICBUaGUgb3JpZ2luYWwgdmFsdWUgaXMgcmV0dXJuZWQgaWYgaXRzIG5vdCBhIHBsYWluIG9iamVjdCBvciBpZlxuICogaXQgaGFzIG5vIGByZW5kZXJlZGAgb3IgYHByZXR0eWAgcHJvcGVydHkuICBIb3dldmVyLCBpZiBpdCBpcyBhIHBsYWluIG9iamVjdFxuICogYW5kIGhhcyBubyBwcmV0dHkvcmVuZGVyZWQgcHJvcGVydGllcyBidXQgRE9FUyBoYXZlIGEgcmF3IHByb3BlcnR5LCB0aGVuIHRoYXRcbiAqIGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgZGVyaXZlUmVuZGVyZWRWYWx1ZSA9ICggdmFsdWUgKSA9PiB7XG5cdGlmICggISBpc1BsYWluT2JqZWN0KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHR2YWx1ZSA9IGhhc1ByZXR0eVByb3BlcnR5KCB2YWx1ZSApID8gdmFsdWUucHJldHR5IDogdmFsdWU7XG5cdHZhbHVlID0gaGFzUmVuZGVyZWRQcm9wZXJ0eSggdmFsdWUgKSA/IHZhbHVlLnJlbmRlcmVkIDogdmFsdWU7XG5cdHJldHVybiBoYXNSYXdQcm9wZXJ0eSggdmFsdWUgKSA/IHZhbHVlLnJhdyA6IHZhbHVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgcmVzb3VyY2UgZnJvbSB0aGUgZ2l2ZW4gYHJlc291cmNlTGlua2AuXG4gKlxuICogZWcuIFwiaHR0cHM6Ly9hcGkuZXZlbnRlc3ByZXNzby5jb20vcmVnaXN0cmF0aW9uXCIgd2lsbCByZXR1cm4gJ3JlZ2lzdHJhdGlvbic7XG5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXNvdXJjZUxpbmtcbiAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgZnJvbSBhIHByb3ZpZGVkIHJlc291cmNlXG4gKiBsaW5rLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVsYXRpb25OYW1lRnJvbUxpbmsgPSAoIHJlc291cmNlTGluayApID0+IHtcblx0cmV0dXJuIHBsdXJhbE1vZGVsTmFtZSggY2FtZWxDYXNlKCBsYXN0KCByZXNvdXJjZUxpbmsuc3BsaXQoICcvJyApICkgKSApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVudGl0eSBmaWVsZCBuYW1lcyBhbmQgdmFsdWVzIGZyb20gdGhlXG4gKiBwcm92aWRlZCBlbnRpdHkgaW5zdGFuY2UuICBUaGUgdmFsdWVzIGFyZSBub3QgcHJlcGFyZWQgYW5kIG1hdGNoIGV4YWN0bHkgd2hhdFxuICogaXMgY3VycmVudGx5IHNldCBvbiB0aGlzIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eUluc3RhbmNlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBBIHBsYWluIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvckNsb25pbmcgPSAoIGVudGl0eUluc3RhbmNlICkgPT4ge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMoIGVudGl0eUluc3RhbmNlICkucmVkdWNlKCAoXG5cdFx0ZmllbGRzQW5kVmFsdWVzLFxuXHRcdGZpZWxkTmFtZVxuXHQpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRpc0VudGl0eUZpZWxkKCBmaWVsZE5hbWUsIGVudGl0eUluc3RhbmNlLnNjaGVtYSApICYmXG5cdFx0XHQhIGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGVudGl0eUluc3RhbmNlLnNjaGVtYSApXG5cdFx0KSB7XG5cdFx0XHRmaWVsZHNBbmRWYWx1ZXNbIGZpZWxkTmFtZSBdID0gZW50aXR5SW5zdGFuY2VbIGZpZWxkTmFtZSBdO1xuXHRcdFx0cmV0dXJuIGZpZWxkc0FuZFZhbHVlcztcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkc0FuZFZhbHVlcztcblx0fSwge30gKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBjb250YWluaW5nIHRoZSBlbnRpdHkgZmllbGQgbmFtZSBhbmQgdmFsdWVzIGZyb20gdGhlXG4gKiBwcm92aWRlZCBlbnRpdHkgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbnRpdHlJbnN0YW5jZVxuICogQHBhcmFtIHtib29sZWFufSBmb3JJbnNlcnQgIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSBmaWVsZHMgYW5kIHZhbHVlcyBmb3JcbiAqIGluc2VydCBvciBmb3IgdXBkYXRlLlxuICogQHJldHVybiB7T2JqZWN0fSBBIHBsYWluIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmcgPSAoXG5cdGVudGl0eUluc3RhbmNlLFxuXHRmb3JJbnNlcnQgPSBmYWxzZVxuKSA9PiB7XG5cdGNvbnN0IGl0ZXJhdG9yID0gZm9ySW5zZXJ0ID9cblx0XHRBcnJheS5mcm9tKCBlbnRpdHlJbnN0YW5jZS5maWVsZHNUb1BlcnNpc3RPbkluc2VydC52YWx1ZXMoKSApIDpcblx0XHRPYmplY3Qua2V5cyggZW50aXR5SW5zdGFuY2UgKTtcblxuXHRyZXR1cm4gaXRlcmF0b3IucmVkdWNlKCAoXG5cdFx0ZmllbGRzQW5kVmFsdWVzLFxuXHRcdGZpZWxkTmFtZVxuXHQpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRpc0VudGl0eUZpZWxkKCBmaWVsZE5hbWUsIGVudGl0eUluc3RhbmNlLnNjaGVtYSApICYmXG5cdFx0XHQhIGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGVudGl0eUluc3RhbmNlLnNjaGVtYSApXG5cdFx0KSB7XG5cdFx0XHRmaWVsZHNBbmRWYWx1ZXNbIGZpZWxkTmFtZSBdID0gbWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0KFxuXHRcdFx0XHRlbnRpdHlJbnN0YW5jZVsgZmllbGROYW1lIF0sXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGZpZWxkc0FuZFZhbHVlcztcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkc0FuZFZhbHVlcztcblx0fSwge30gKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJpbWFyeSBrZXkocykgYW5kIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGVudGl0eUluc3RhbmNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eUluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFuIGFycmF5IG9mIHZhbHVlcyBmb3IgdGhlIHByaW1hcnkga2V5cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByaW1hcnlLZXlWYWx1ZXMgPSAoIGVudGl0eUluc3RhbmNlICkgPT4gcGljayhcblx0ZW50aXR5SW5zdGFuY2UsXG5cdGVudGl0eUluc3RhbmNlLnByaW1hcnlLZXlzXG4pO1xuXG4vKipcbiAqIFRoaXMgcmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiBlbnRpdHkgZmllbGRzIGZyb20gdGhlIHNjaGVtYSBmb3IgdGhlIGVudGl0eVxuICogaW5zdGFuY2UgKHNjaGVtYSBmb3IgZmllbGRzIGFyZSBleHRyYWN0ZWQgYXMgd2VsbCkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eUluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgcGxhaW4gb2JqZWN0IHdpdGggZmllbGRzIGFuZCBzY2hlbWEgcHJvcGVydGllcyB0aGF0IGFyZVxuICogZW50aXR5IHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbnRpdHlGaWVsZHNGcm9tU2NoZW1hID0gKCBlbnRpdHlJbnN0YW5jZSApID0+IHBpY2tCeShcblx0ZW50aXR5SW5zdGFuY2Uuc2NoZW1hLFxuXHQoIGZpZWxkVmFsdWUsIGZpZWxkTmFtZSApID0+IGlzRW50aXR5RmllbGQoXG5cdFx0ZmllbGROYW1lLFxuXHRcdGVudGl0eUluc3RhbmNlLnNjaGVtYVxuXHQpXG4pO1xuXG4vKipcbiAqIFRoaXMgcmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiBleHRyYWN0ZWQgcHJpbWFyeUtleSBmaWVsZHMgZnJvbSB0aGUgc2NoZW1hXG4gKiBmb3IgdGhlIGVudGl0eSBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZW50aXR5SW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gQSBwbGFpbiBvYmplY3Qgd2l0aCBmaWVsZHMgYW5kIHNjaGVtYSBwcm9wZXJ0aWVzIHRoYXRcbiAqIFx0XHRcdFx0XHRyZXByZXNlbnQgcHJpbWFyeSBrZXkgZmllbGRzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJpbWFyeUtleUZpZWxkc0Zyb21TY2hlbWEgPSAoIGVudGl0eUluc3RhbmNlICkgPT4gcGlja0J5KFxuXHRlbnRpdHlJbnN0YW5jZS5zY2hlbWEsXG5cdCggZmllbGRWYWx1ZSwgZmllbGROYW1lICkgPT4gaXNQcmltYXJ5S2V5RmllbGQoXG5cdFx0ZmllbGROYW1lLFxuXHRcdGVudGl0eUluc3RhbmNlLnNjaGVtYVxuXHQpXG4pO1xuXG4vKipcbiAqIERlcml2ZXMgdGhlIGRlZmF1bHQgdmFsdWUgdG8gdXNlIGZvciBhIGdpdmVuIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4geyp9ICBBIHZhbHVlIHRvIHVzZSBmb3IgdGhlIGdpdmVuIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlID0gKCB0eXBlICkgPT4ge1xuXHRpZiAoIGlzQXJyYXkoIHR5cGUgKSApIHtcblx0XHRyZXR1cm4gdHlwZS5pbmRleE9mKCAnbnVsbCcgKSA+IC0xID9cblx0XHRcdG51bGwgOlxuXHRcdFx0ZGVyaXZlRGVmYXVsdFZhbHVlRm9yVHlwZSggdHlwZVsgMCBdICk7XG5cdH1cblx0c3dpdGNoICggdHlwZSApIHtcblx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0cmV0dXJuICcnO1xuXHRcdGNhc2UgJ251bWJlcic6XG5cdFx0Y2FzZSAnaW50ZWdlcic6XG5cdFx0XHRyZXR1cm4gMDtcblx0XHRjYXNlICdudWxsJzpcblx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0Y2FzZSAnYm9vbGVhbic6XG5cdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Y2FzZSAnZGF0ZS10aW1lJzpcblx0XHRcdHJldHVybiAoIG5ldyBEYXRlKCkgKS50b0lTT1N0cmluZygpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBEZXJpdmVzIHdoYXQgYHR5cGVgIGEgZmllbGQgaXMgZnJvbSB0aGUgc2NoZW1hLlxuICogSXQgYWNjb3VudHMgZm9yIGNhc2VzIHdoZXJlIHRoZSBcInR5cGVcIiBvZiBhIGZpZWxkIG1pZ2h0IGJlIGBkYXRlLXRpbWVgIG9yXG4gKiB3aGVyZSB0aGUgdHlwZSBpcyBhbiBvYmplY3QgYW5kIHRodXMgdGhlIGB0eXBlYCBmb3IgdGhlIHB1cnBvc2VzIG9mIG1vZGVsXG4gKiBlbnRpdGllcyBpcyBkZWZpbmVkIGJ5IHRoZSBgcmF3YCBwcm9wZXJ0eSBmb3IgdGhlIGZpZWxkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4geyp9ICBXaGF0IHR5cGUgdGhlIGZpbGVkIGlzLlxuICovXG5leHBvcnQgY29uc3QgZGVyaXZlVHlwZUZvckZpZWxkID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+IHtcblx0aWYgKCBpc0RhdGVUaW1lRmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0cmV0dXJuICdkYXRlLXRpbWUnO1xuXHR9XG5cdGlmICggc2NoZW1hWyBmaWVsZE5hbWUgXSAmJiBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgKSB7XG5cdFx0aWYgKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgPT09ICdvYmplY3QnICkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMgJiZcblx0XHRcdFx0aGFzUmF3UHJvcGVydHkoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcyApXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcudHlwZSA/XG5cdFx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlIDpcblx0XHRcdFx0XHRudWxsO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGU7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFRoaXMgZGVyaXZlcyB0aGUgdmFsaWRhdGUgdHlwZSBmcm9tIHRoZSBpbmNvbWluZyBmaWVsZCBhbmQgdmFsdWUgYWNjb3JkaW5nXG4gKiB0byB0aGUgc2NoZW1hIGFuZCBpbmNvbWluZyB2YWx1ZS5cbiAqXG4gKiBUaGlzIGFjY291bnRzIGZvciB0aGUgZmFjdCB0aGF0IGVudGl0aWVzIG1heSBiZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZVxuICogZm9sbG93aW5nIGNvbnRleHRzOlxuICpcbiAqIDEuIEF1dGhlZCBSRVNUIHJlc3BvbnNlICh3aGljaCBjb3VsZCBoYXZlIGJvdGggcmF3LCByZW5kZXJlZCBvciBwcmV0dHlcbiAqICAgIHZhbHVlcyBpbiB0aGUgZmllbGQgdmFsdWUpLlxuICogMi4gTm9uLWF1dGhlZCBSRVNUIHJlc3BvbnNlICh3aGljaCB3aWxsIG5vdCBoYXZlIGEgcmF3IHZhbHVlLCBidXQgY291bGQgaGF2ZVxuICogICAgYSBwcmV0dHkgb3IgcmVuZGVyZWQgdmFsdWUpLiAgVGhpcyBpcyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBpZiB0aGVcbiAqICAgIHJlbmRlcmVkIG9yIHByZXR0eSB2YWx1ZSBpcyBvZiBhIGRpZmZlcmVudCBkYXRhIHR5cGUgdGhhbiB0aGUgcmF3IHZhbHVlLlxuICogMy4gTmV3IGVudGl0aWVzIGJ1aWx0IGNsaWVudCBzaWRlLCB3aGljaCB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgcHJlcGFyZWRcbiAqICAgIGFnYWluc3QgdGhlIFwicmF3XCIgdmFsaWRhdGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge1N5bWJvbH0gIFRoZSB2YWxpZGF0ZSB0eXBlIGZvciB0aGUgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVWYWxpZGF0ZVR5cGVGb3JGaWVsZCA9ICggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBzY2hlbWEgKSA9PiB7XG5cdGlmICggaGFzUmF3UHJvcGVydHkoIGZpZWxkVmFsdWUgKSApIHtcblx0XHRyZXR1cm4gVkFMSURBVEVfVFlQRS5SQVc7XG5cdH1cblx0aWYgKCBzY2hlbWFbIGZpZWxkTmFtZSBdICYmIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSApIHtcblx0XHRpZiAoXG5cdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgPT09ICdvYmplY3QnICYmXG5cdFx0XHRpc1BsYWluT2JqZWN0KCBmaWVsZFZhbHVlIClcblx0XHQpIHtcblx0XHRcdHJldHVybiBoYXNSZW5kZXJlZFByb3BlcnR5KCBmaWVsZFZhbHVlICkgP1xuXHRcdFx0XHRWQUxJREFURV9UWVBFLlJFTkRFUkVEIDpcblx0XHRcdFx0VkFMSURBVEVfVFlQRS5QUkVUVFk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBWQUxJREFURV9UWVBFLlJBVztcbn07XG5cbi8qKlxuICogVGhpcyBnZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIGZpZWxkIGZyb20gdGhlIHByb3ZpZGVkIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHsqfSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGZpZWxkIGZyb20gdGhlIHNjaGVtYSBvciBpZiBub3RcbiAqIHByZXNlbnQgaW4gdGhlIHNjaGVtYSwgYSBkZXJpdmVkIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgc2NoZW1hIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0VmFsdWVGb3JGaWVsZCA9ICggZmllbGROYW1lLCBzY2hlbWEgKSA9PiB7XG5cdGlmICggc2NoZW1hWyBmaWVsZE5hbWUgXSApIHtcblx0XHRyZXR1cm4gc2NoZW1hWyBmaWVsZE5hbWUgXS5kZWZhdWx0ID9cblx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0uZGVmYXVsdCA6XG5cdFx0XHRkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgKTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZUVudGl0eUZhY3RvcnkgfSBmcm9tICcuL2Jhc2UtZW50aXR5JztcbmV4cG9ydCB7IE1PREVMX1BSRUZJWEVTLCBTQVZFX1NUQVRFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzSW50ZWdlcixcblx0aXNTdHJpbmcsXG5cdGlzUGxhaW5PYmplY3QsXG5cdGlzQm9vbGVhbixcblx0aXNOdW1iZXIsXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0VudW1GaWVsZCwgaXNQcmltYXJ5S2V5RmllbGQsIGlzVmFsdWVPYmplY3RGaWVsZCB9IGZyb20gJy4vYm9vbGVhbnMnO1xuaW1wb3J0IHsgbWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0V2l0aEFzc2VydGlvbnMgfSBmcm9tICcuL2V4dHJhY3RvcnMnO1xuaW1wb3J0IHsgUFJJVkFURV9QUk9QRVJUSUVTLCBWQUxJREFURV9UWVBFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgaW5jb21pbmcgdmFsdWUgZm9yIGdpdmVuIHR5cGUuICBUeXBlcyBhbGxvd2VkIGFyZTpcbiAqXG4gKiAtIGludGVnZXI6IGNoZWNrcyBpZiB2YWx1ZSBpcyBhbiBpbnRlZ2VyLlxuICogLSBudW1iZXI6IGNoZWNrcyBpZiB2YWx1ZSBpcyBjbGFzc2lmaWVkIGFzIGEgTnVtYmVyIHByaW1pdGl2ZSBvciBvYmplY3QgKHRoaXNcbiAqICAgbWVhbnMgYEluZmluaXR5YCwgYC1JbmZpbml0eWAsIGFuZCBgTmFOYCBhcmUgY29uc2lkZXJlZCB2YWxpZCBmb3IgdGhpcyB0eXBlXG4gKiAtIHN0cmluZ1xuICogLSBvYmplY3QgLSB0aGlzIHZhbGlkYXRlcyBhcyBhIFwicGxhaW5PYmplY3RcIiwgdGhhdCBpcyBhbiBvYmplY3QgY3JlYXRlZCBieVxuICogICB0aGUgT2JqZWN0IGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgW1tQcm90b3R5cGVdXSBvZiBudWxsLlxuICogLSBib29sZWFuXG4gKiAtIGJvb2w6IChzYW1lIGFzIGJvb2xlYW4gY2hlY2spXG4gKiAtIG51bGw6IHZhbHVlIG11c3QgZXhwbGljaXRseSBiZSBgbnVsbGBcbiAqXG4gKiBOb3RlOiBpZiB0aGUgcGFzc2VkIGluIHR5cGUgZG9lcyBub3QgZXhpc3QsIHRoZW4gdGhlIHZhbHVlIGlzIGNvbnNpZGVyZWRcbiAqIGludmFsaWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QXJyYXl9IHR5cGUgIFRoZSB0eXBlIG9yIHR5cGVzIHRvIGNoZWNrXG4gKiBAcGFyYW0geyp9IHZhbHVlICBUaGUgdmFsdWUgYmVpbmcgdmFsaWRhdGVkXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyB0aGUgdmFsdWUgaXMgdmFsaWQgZm9yIHRoZSBnaXZlbiB0eXBlLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUeXBlID0gKCB0eXBlLCB2YWx1ZSApID0+IHtcblx0bGV0IHZhbGlkID0gZmFsc2U7XG5cdC8vIGFjY291bnQgZm9yIHR5cGUgZGVmaW5pdGlvbnMgdGhhdCBhcmUgYW4gYXJyYXkgb2YgYWxsb3dlZCB0eXBlcy5cblx0aWYgKCBpc0FycmF5KCB0eXBlICkgKSB7XG5cdFx0Zm9yICggY29uc3Qgc2luZ2xlVHlwZSBvZiB0eXBlICkge1xuXHRcdFx0dmFsaWQgPSB2YWxpZGF0ZVR5cGUoIHNpbmdsZVR5cGUsIHZhbHVlICk7XG5cdFx0XHRpZiAoIHZhbGlkICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gcmV0dXJuIHJpZ2h0IGF3YXkgYmVjYXVzZSB3ZSd2ZSBkZXRlcm1pbmVkIHRoZSB2YWxpZGl0eSBvZiB0aGUgdHlwZS5cblx0XHRyZXR1cm4gdmFsaWQ7XG5cdH1cblx0c3dpdGNoICggdHlwZSApIHtcblx0XHRjYXNlICdpbnRlZ2VyJzpcblx0XHRcdHZhbGlkID0gaXNJbnRlZ2VyKCB2YWx1ZSApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdHZhbGlkID0gaXNOdW1iZXIoIHZhbHVlICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0dmFsaWQgPSBpc1N0cmluZyggdmFsdWUgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHR2YWxpZCA9IGlzUGxhaW5PYmplY3QoIHZhbHVlICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdib29sZWFuJzpcblx0XHRjYXNlICdib29sJzpcblx0XHRcdHZhbGlkID0gaXNCb29sZWFuKCB2YWx1ZSApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnbnVsbCc6XG5cdFx0XHR2YWxpZCA9IHZhbHVlID09PSBudWxsO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIHZhbGlkO1xufTtcblxuLyoqXG4gKiBUaGlzIHZhbGlkYXRlcyBlbnVtIHR5cGUgb2YgdmFsdWVzLlxuICpcbiAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbXVzdCBiZSBvbmUgb2YgdGhlIHByb3ZpZGVkIGFycmF5IG9mIGVudW1WYWx1ZXMgYXNcbiAqIHdlbGwgYXMgYmVpbmcgb2YgdGhlIGV4cGVjdGVkIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7QXJyYXl9IGVudW1WYWx1ZXNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIHRoaXMgdmFsdWUgaXMgdmFsaWQuXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVudW1UeXBlID0gKCB0eXBlLCBlbnVtVmFsdWVzLCB2YWx1ZSApID0+IHtcblx0cmV0dXJuIHZhbGlkYXRlVHlwZSggdHlwZSwgdmFsdWUgKSAmJlxuXHRcdGlzQXJyYXkoIGVudW1WYWx1ZXMgKSAmJlxuXHRcdGVudW1WYWx1ZXMuaW5kZXhPZiggdmFsdWUgKSA+IC0xO1xufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBkb2VzIGEgc2hhbGxvdyB2YWxpZGF0aW9uIGZvciB0aGUgZ2l2ZW4gdmFsdWUgYW5kIGZpZWxkLlxuICpcbiAqIFwiU2hhbGxvd1wiIGhlcmUgbWVhbnMgdGhhdCBpZiB0aGUgZmllbGQgc2NoZW1hIGlzIG9mIHR5cGUgJ29iamVjdCcsIHRoZW4gdGhlXG4gKiB2YWxpZGF0aW9uIG9ubHkgdmVyaWZpZXMgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAgVGhlIG9iamVjdCBjb250ZW50c1xuICogYXJlIG5vdCB2YWxpZGF0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4cGVjdFZhbHVlT2JqZWN0cyAgSWYgdHJ1ZSwgdGhlbiB0aGlzIGZsYWdzIHRoZSB2YWxpZGF0b3JcbiAqIHRvIGFzc3VtZSB0aGUgdmFsdWUgbWlnaHQgYmUgYSB2YWx1ZSBvYmplY3QgYW5kIGF0dGVtcHQgdG8gcmV0cmlldmUgdGhlIHJhd1xuICogdmFsdWUgZnJvbSB0aGF0IHZhbHVlIG9iamVjdCBmb3IgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZSBleHBlY3RlZCB0eXBlIGluIHRoZVxuICogc2NoZW1hIGZvciB0aGF0IGZpZWxkLlxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgdGhlIHZhbHVlIGlzIHZhbGlkLlxuICogQHRocm93cyBUeXBlRXJyb3JcbiAqIEB0aHJvd3MgSW52YWxpZERhdGVUaW1lXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQgPSAoXG5cdGZpZWxkTmFtZSxcblx0ZmllbGRWYWx1ZSxcblx0c2NoZW1hLFxuXHRleHBlY3RWYWx1ZU9iamVjdHMgPSB0cnVlXG4pID0+IHtcblx0Ly8gaWYgZmllbGQgaXMgYSBwcmltYXJ5IEtleSBmaWVsZCB0aGVuIHdlIG92ZXJyaWRlIHRoZSB2YWxpZGF0aW9uIHNvIGl0IGNhblxuXHQvLyBiZSBlaXRoZXIgc3RyaW5nIG9yIG51bWJlclxuXHRpZiAoIGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICkge1xuXHRcdHJldHVybiB2YWxpZGF0ZVR5cGUoICdzdHJpbmcnLCBmaWVsZFZhbHVlICkgfHxcblx0XHRcdHZhbGlkYXRlVHlwZSggJ251bWJlcicsIGZpZWxkVmFsdWUgKTtcblx0fVxuXHRjb25zdCBpc0VudW0gPSBpc0VudW1GaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKTtcblx0Y29uc3QgaXNWYWx1ZU9iamVjdCA9IGlzVmFsdWVPYmplY3RGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKTtcblx0ZmllbGRWYWx1ZSA9IGV4cGVjdFZhbHVlT2JqZWN0cyAmJiBpc1ZhbHVlT2JqZWN0ID9cblx0XHRtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyhcblx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRzY2hlbWFcblx0XHQpIDpcblx0XHRmaWVsZFZhbHVlO1xuXHRmaWVsZFZhbHVlID0gZXhwZWN0VmFsdWVPYmplY3RzICYmXG5cdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgPT09ICdvYmplY3QnICYmXG5cdFx0XHRpc1ZhbHVlT2JqZWN0ID9cblx0XHR7IHJhdzogZmllbGRWYWx1ZSB9IDpcblx0XHRmaWVsZFZhbHVlO1xuXHRjb25zdCBpc1ZhbGlkID0gaXNFbnVtID9cblx0XHR2YWxpZGF0ZUVudW1UeXBlKFxuXHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlLFxuXHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5lbnVtLFxuXHRcdFx0ZmllbGRWYWx1ZVxuXHRcdCkgOlxuXHRcdHZhbGlkYXRlVHlwZSggc2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlLCBmaWVsZFZhbHVlICk7XG5cdC8vIGlmIGlzRW51bSBhbmQgbm90IHZhbGlkLCB0aGVuIGxldHMgYmFpbCB3aXRoIGVycm9yXG5cdGlmICggaXNFbnVtICYmICEgaXNWYWxpZCApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0c3ByaW50Zihcblx0XHRcdFx0J1RoZSBnaXZlbiBcIiVzXCIgZmllbGROYW1lIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGRlZmluZWQgc2NoZW1hLiAgSXQgbXVzdCBiZSBhIFwiJXNcIiBhbmQgaXQgbXVzdCBiZSBvbmUgb2YgXCIlc1wiLiBUaGUgZmllbGRWYWx1ZSBnaXZlbiB3YXMgXCIlc1wiJyxcblx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLmVudW0uam9pbigpLFxuXHRcdFx0XHRmaWVsZFZhbHVlXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gaXNWYWxpZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB3aGF0IGlzIHNldCBhcyB0aGUgdmFsaWRhdGVUeXBlIGZvciB0aGUgZ2l2ZW4gZmllbGQgYW5kIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdmFsaWRhdGlvbiB0eXBlIGZvciB0aGUgZ2l2ZW4gZmllbGQgYW5kIGluc3RhbmNlLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUeXBlRm9yRmllbGQgPSAoIGZpZWxkTmFtZSwgaW5zdGFuY2UgKSA9PiB7XG5cdHJldHVybiBpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlZBTElEQVRFX1RZUEVTIF1bIGZpZWxkTmFtZSBdID9cblx0XHRpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlZBTElEQVRFX1RZUEVTIF1bIGZpZWxkTmFtZSBdIDpcblx0XHRWQUxJREFURV9UWVBFLlJBVztcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAnZXZlbnQnO1xuXG5leHBvcnQgY29uc3QgRVZFTlRfU1RBVFVTX0lEID0ge1xuXHRTT0xEX09VVDogJ3NvbGRfb3V0Jyxcblx0UE9TVFBPTkVEOiAncG9zdHBvbmVkJyxcblx0Q0FOQ0VMTEVEOiAnY2FuY2VsbGVkJyxcbn07XG5cbmV4cG9ydCBjb25zdCBFVkVOVF9TVEFUVVNfSURTID0gdmFsdWVzKCBFVkVOVF9TVEFUVVNfSUQgKTtcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnknO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG5cdEdSRUFURVJfVEhBTixcblx0R1JFQVRFUl9USEFOX0FORF9FUVVBTCxcblx0TEVTU19USEFOX0FORF9FUVVBTCxcbn0gZnJvbSAnLi4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBub3dEYXRlQW5kVGltZSA9IG1vbWVudCgpO1xuXG4vKipcbiAqIERlc2NyaWJlZCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7e2F0dHJpYnV0ZXM6ICp9fVxuICovXG5leHBvcnQgY29uc3QgcXVlcnlEYXRhVHlwZXMgPSB7XG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnRVZUX25hbWUnLFxuXHRcdFx0J0VWVF9JRCcsXG5cdFx0XHQnc3RhcnRfZGF0ZScsXG5cdFx0XHQnZW5kX2RhdGUnLFxuXHRcdFx0J3RpY2tldF9zdGFydCcsXG5cdFx0XHQndGlja2V0X2VuZCcsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdFx0c2hvd0V4cGlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXHRcdGNhdGVnb3J5U2x1ZzogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRtb250aDogUHJvcFR5cGVzLm1vbnRoLFxuXHR9ICksXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0XHRzaG93RXhwaXJlZDogYm9vbGVhblxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAnc3RhcnRfZGF0ZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdFx0c2hvd0V4cGlyZWQ6IGZhbHNlLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGFuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRzdGFydF9kYXRlOiAnRGF0ZXRpbWUuRFRUX0VWVF9zdGFydCcsXG5cdFx0ZW5kX2RhdGU6ICdEYXRldGltZS5EVFRfRVZUX2VuZCcsXG5cdFx0dGlja2V0X3N0YXJ0OiAnRGF0ZXRpbWUuVGlja2V0LlRLVF9zdGFydF9kYXRlJyxcblx0XHR0aWNrZXRfZW5kOiAnRGF0ZXRpbWUuVGlja2V0LlRLVF9lbmRfZGF0ZScsXG5cdH07XG5cdHJldHVybiBpc1VuZGVmaW5lZCggb3JkZXJCeU1hcFsgb3JkZXJCeSBdICkgP1xuXHRcdG9yZGVyQnkgOlxuXHRcdG9yZGVyQnlNYXBbIG9yZGVyQnkgXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHdoZXJlIGNvbmRpdGlvbnMgZm9yIGFuIGV2ZW50cyBlbmRwb2ludCByZXF1ZXN0IHVzaW5nIHByb3ZpZGVkXG4gKiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dFeHBpcmVkICBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGV4cGlyZWQgZXZlbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGNhdGVnb3J5U2x1ZyAgUmV0dXJuIGV2ZW50cyBmb3IgdGhlIGdpdmVuIGNhdGVnb3J5U2x1Z1xuICogQHBhcmFtIHtzdHJpbmd9IG1vbnRoICAgICAgICAgUmV0dXJuIGV2ZW50cyBmb3IgdGhlIGdpdmVuIG1vbnRoLlxuICogXHRcdFx0XHRcdFx0XHRcdCBDYW4gYmUgYW55IG1vbnRoIGZvcm1hdCByZWNvZ25pemVkIGJ5IG1vbWVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgIFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICgge1xuXHRzaG93RXhwaXJlZCA9IGZhbHNlLFxuXHRjYXRlZ29yeVNsdWcsXG5cdG1vbnRoID0gJ25vbmUnLFxufSApID0+IHtcblx0Y29uc3Qgd2hlcmUgPSBbXTtcblxuXHRpZiAoICEgc2hvd0V4cGlyZWQgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtEYXRldGltZS5EVFRfRVZUX2VuZCoqZXhwaXJlZF1bXT0nICsgR1JFQVRFUl9USEFOICtcblx0XHRcdCcmd2hlcmVbRGF0ZXRpbWUuRFRUX0VWVF9lbmQqKmV4cGlyZWRdW109JyArXG5cdFx0XHRub3dEYXRlQW5kVGltZS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0fVxuXHRpZiAoIGNhdGVnb3J5U2x1ZyApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW1Rlcm1fUmVsYXRpb25zaGlwLlRlcm1fVGF4b25vbXkuVGVybS5zbHVnXT0nICsgY2F0ZWdvcnlTbHVnXG5cdFx0KTtcblx0fVxuXHRpZiAoIG1vbnRoICYmIG1vbnRoICE9PSAnbm9uZScgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtEYXRldGltZS5EVFRfRVZUX3N0YXJ0XVtdPScgKyBHUkVBVEVSX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbRGF0ZXRpbWUuRFRUX0VWVF9zdGFydF1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLnN0YXJ0T2YoICdtb250aCcgKS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RhdGV0aW1lLkRUVF9FVlRfZW5kXVtdPScgKyBMRVNTX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbRGF0ZXRpbWUuRFRUX0VWVF9lbmRdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5lbmRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9hc3NlcnRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vYmFzZSc7XG5leHBvcnQgKiBmcm9tICcuL2RlZmF1bHQtbW9kZWwtc3RhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9lbmRwb2ludHMnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnRpdHktZmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL3ByaW1hcnkta2V5cyc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVsLW5hbWVzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBwcmltYXJ5S2V5cyB9IGZyb20gJy4vcHJpbWFyeS1rZXlzLmpzJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGtleXMsIHN0YXJ0Q2FzZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGx1cmFsaXplIGZyb20gJ3BsdXJhbGl6ZSc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdtZW1pemUnO1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgbW9kZWwgbmFtZXMgY3VycmVudGx5IGV4cG9zZWQgZm9yIFJFU1QgQVBJIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FUyA9IGtleXMoIHByaW1hcnlLZXlzICk7XG5cbi8qKlxuICogVXNlZCB0byBub3JtYWxpemUgdGhlIHBsdXJhbCBmb3JtIG9mIGEgZ2l2ZW4gbW9kZWwgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gIEVuc3VyZXMgdGhlIGdpdmVuIG1vZGVsTmFtZSBpcyBpdHMgcGx1cmFsIGZvcm0uXG4gKi9cbmV4cG9ydCBjb25zdCBwbHVyYWxNb2RlbE5hbWUgPSBtZW1vaXplKFxuXHQoIG1vZGVsTmFtZSApID0+IHBsdXJhbGl6ZSggbW9kZWxOYW1lIClcbik7XG5cbi8qKlxuICogVXNlZCB0byBub3JtYWxpemUgdGhlIHNpbmd1bGFyIGZvcm0gb2YgYSBnaXZlbiBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSBFbnN1cmVzIHRoZSBnaXZlbiBtb2RlbE5hbWUgaXMgaW4gaXRzIHNpbmd1bGFyIGZvcm0uXG4gKi9cbmV4cG9ydCBjb25zdCBzaW5ndWxhck1vZGVsTmFtZSA9IG1lbW9pemUoXG5cdCggbW9kZWxOYW1lICkgPT4gcGx1cmFsaXplLnNpbmd1bGFyKCBtb2RlbE5hbWUgKVxuKTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgY2FwaXRhbGl6ZWQgc25ha2VjYXNlIGZvcm1hdCBmb3IgdGhlIGdpdmVuIG1vZGVsIG5hbWUgdHlwaWNhbGx5XG4gKiB1c2VkIGluIHF1ZXJ5IHN0cmluZ3MuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBtb2RlbE5hbWVGb3JRdWVyeVN0cmluZyggJ21lc3NhZ2VfdGVtcGxhdGVfZ3JvdXAnICk7XG4gKiAvLyBNZXNzYWdlX1RlbXBsYXRlX0dyb3VwXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZm9ybWF0dGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nID0gbWVtb2l6ZShcblx0KCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdG1vZGVsTmFtZSA9IHN0YXJ0Q2FzZSggbW9kZWxOYW1lICk7XG5cdFx0cmV0dXJuIG1vZGVsTmFtZS5yZXBsYWNlKCAvXFxzL2csICdfJyApO1xuXHR9XG4pO1xuIiwiaW1wb3J0ICogYXMgYXR0ZW5kZWVNb2RlbCBmcm9tICcuL2F0dGVuZGVlJztcbmltcG9ydCAqIGFzIGNoZWNrSW5Nb2RlbCBmcm9tICcuL2NoZWNraW4nO1xuaW1wb3J0ICogYXMgZGF0ZVRpbWVNb2RlbCBmcm9tICcuL2RhdGV0aW1lJztcbmltcG9ydCAqIGFzIGV2ZW50TW9kZWwgZnJvbSAnLi9ldmVudCc7XG5pbXBvcnQgKiBhcyBwcmljZVR5cGVNb2RlbCBmcm9tICcuL3ByaWNlLXR5cGUnO1xuaW1wb3J0ICogYXMgcmVnaXN0cmF0aW9uTW9kZWwgZnJvbSAnLi9yZWdpc3RyYXRpb24nO1xuaW1wb3J0ICogYXMgc3RhdHVzTW9kZWwgZnJvbSAnLi9zdGF0dXMnO1xuaW1wb3J0ICogYXMgdGlja2V0TW9kZWwgZnJvbSAnLi90aWNrZXQnO1xuZXhwb3J0IHtcblx0YXR0ZW5kZWVNb2RlbCxcblx0Y2hlY2tJbk1vZGVsLFxuXHRkYXRlVGltZU1vZGVsLFxuXHRldmVudE1vZGVsLFxuXHRwcmljZVR5cGVNb2RlbCxcblx0cmVnaXN0cmF0aW9uTW9kZWwsXG5cdHN0YXR1c01vZGVsLFxuXHR0aWNrZXRNb2RlbCxcbn07XG4iLCJcbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ3ByaWNlX3R5cGUnO1xuXG5leHBvcnQgY29uc3QgQkFTRV9QUklDRV9UWVBFUyA9IHtcblx0QkFTRV9QUklDRTogMSxcblx0RElTQ09VTlQ6IDIsXG5cdFNVUkNIQVJHRTogMyxcblx0VEFYOiA0LFxufTtcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBkYXRhIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgaXNBcnJheSwgcmVkdWNlLCB0cmltRW5kIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRhc3NlcnRFbnRpdHlIYXNLZXksXG5cdGFzc2VydElzQXJyYXksXG5cdGFzc2VydElzTm90RW1wdHksXG5cdGFzc2VydElzTWFwLFxufSBmcm9tICcuL2Fzc2VydGlvbnMnO1xuXG4vKipcbiAqIEV4cG9zZXMgYSBtYXAgb2YgbW9kZWxuYW1lIHRvIHByaW1hcnkga2V5IGV4cG9zZWQgYnkgdGhlIGVlanMuZGF0YSBnbG9iYWxcbiAqIHZpYSB0aGUgc2VydmVyLlxuICpcbiAqIEB0eXBlIHt7fX1cbiAqL1xuZXhwb3J0IGNvbnN0IHsgcHJpbWFyeV9rZXlzOiBwcmltYXJ5S2V5cyA9IHt9IH0gPSBkYXRhLnBhdGhzO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGtleXMgZnJvbSB0aGUgcHJvdmlkZWQgZW50aXR5LlxuICogVGhpcyBmdW5jdGlvbiB3b3VsZCBiZSB1c2VkIGZvciBtb2RlbHMgdGhhdCBoYXZlIGNvbWJpbmVkIHByaW1hcnkga2V5c1xuICogKGRlbGl2ZXJlZCBhcyBhbiBhcnJheSkuXG4gKlxuICogQHR5cGUgeyBtZW1vaXplZCB9XG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHZhbHVlcy5cbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfVxuICovXG5leHBvcnQgY29uc3QgdmFsdWVzRm9yQ29tYmluZWRQcmltYXJ5S2V5cyA9IG1lbW9pemUoICgga2V5cywgZW50aXR5ICkgPT4ge1xuXHRhc3NlcnRJc0FycmF5KCBrZXlzICk7XG5cdGNvbnN0IHByaW1hcnlLZXkgPSByZWR1Y2UoIGtleXMsIGZ1bmN0aW9uKCByZXN1bHQsIGtleSApIHtcblx0XHRhc3NlcnRFbnRpdHlIYXNLZXkoIGtleSwgZW50aXR5ICk7XG5cdFx0cmV0dXJuIGVudGl0eVsgcmVzdWx0IF0gKyAnOicgKyBlbnRpdHlbIGtleSBdO1xuXHR9ICk7XG5cdHJldHVybiB0cmltRW5kKCBwcmltYXJ5S2V5LCAnOicgKTtcbn0gKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGtleSBmcm9tIHRoZSBwcm92aWRlZCBlbnRpdHkuXG4gKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHVzZWQgZm9yIG1vZGVscyB0aGF0IGhhdmUgb25seSBvbmUgcHJpbWFyeSBrZXkuXG4gKlxuICogQHR5cGUge21lbW9pemVkfVxuICogQHJldHVybiB7IGZ1bmN0aW9uIH0gVGhlIHZhbHVlIGZvciB0aGUga2V5IGluIHRoZSBwcm92aWRlZCBlbnRpdHkuXG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH1cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbHVlRm9yUHJpbWFyeUtleSA9IG1lbW9pemUoICgga2V5LCBlbnRpdHkgKSA9PiB7XG5cdGFzc2VydEVudGl0eUhhc0tleSgga2V5LCBlbnRpdHkgKTtcblx0cmV0dXJuIGVudGl0eVsga2V5IF07XG59ICk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJpbWFyeSBrZXkgKG9yIGNvbWJpbmVkIHByaW1hcnkga2V5cykgZnJvbSB0aGUgYXZhaWxhYmxlIGRhdGEuXG4gKlxuICogQHR5cGUge21lbW9pemVkfVxuICogQHJldHVybiB7IGZ1bmN0aW9uKHN0cmluZykgfVxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmltYXJ5S2V5ID0gbWVtb2l6ZSggKCBtb2RlbE5hbWUgKSA9PiB7XG5cdGFzc2VydEVudGl0eUhhc0tleSggbW9kZWxOYW1lLCBwcmltYXJ5S2V5cyApO1xuXHRyZXR1cm4gcHJpbWFyeUtleXNbIG1vZGVsTmFtZSBdO1xufSApO1xuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSBzdHJpbmcgZm9yIGdldHRpbmcgdGhlIGVudGl0aWVzIGJlbG9uZ2luZyB0byBhIG1vZGVsIGZvciB0aGVcbiAqIGdpdmVuIHByaW1hcnkga2V5IHZhbHVlc1xuICpcbiAqIEB0eXBlIHttZW1vaXplZH1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByaW1hcnlLZXlRdWVyeVN0cmluZyA9IG1lbW9pemUoXG5cdCggbW9kZWxOYW1lLCBrZXlWYWx1ZXMgPSBbXSApID0+IHtcblx0XHRjb25zdCBwcmltYXJ5S2V5ID0gZ2V0UHJpbWFyeUtleSggbW9kZWxOYW1lICk7XG5cdFx0cmV0dXJuIGBbJHsgcHJpbWFyeUtleSB9XVtJTl09YCArIGtleVZhbHVlcy5qb2luKCk7XG5cdH1cbik7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWVzIGZvciB0aGUgcHJpbWFyeSBrZXlzIGZyb20gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAqXG4gKiBAdHlwZSB7bWVtb2l6ZWR9XG4gKiBAcmV0dXJuIHsgZnVuY3Rpb24gfSAgSWYgdGhlIG1vZGVsIGhhcyBvbmx5IG9uZSBwcmltYXJ5IGtleSB0aGVuIHRoZSB2YWx1ZSB3aWxsXG4gKiBiZSBhIHNpbXBsZSBzdHJpbmcuICBJZiB0aGUgbW9kZWwgaGFzIGNvbWJpbmVkIHByaW1hcnkga2V5cywgdGhlbiB0aGUgdmFsdWVcbiAqIHdpbGwgYmUgYXMgc3RyaW5nIGluIHRoZSBmb3JtYXQgYCVzLiVzYCBmb3IgdGhlIHByaW1hcnkga2V5IHZhbHVlcy5cbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfVxuICovXG5leHBvcnQgY29uc3QgZ2V0RW50aXR5UHJpbWFyeUtleVZhbHVlcyA9IG1lbW9pemUoICggbW9kZWxOYW1lLCBlbnRpdHkgKSA9PiB7XG5cdGNvbnN0IGtleXMgPSBnZXRQcmltYXJ5S2V5KCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIGlzQXJyYXkoIGtleXMgKSA/XG5cdFx0dmFsdWVzRm9yQ29tYmluZWRQcmltYXJ5S2V5cygga2V5cywgZW50aXR5ICkgOlxuXHRcdHZhbHVlRm9yUHJpbWFyeUtleSgga2V5cywgZW50aXR5ICk7XG59ICk7XG5cbi8qKlxuICogVGhpcyByZWNlaXZlcyBhbiBhcnJheSBvZiBlbnRpdGllcyBhbmQgcmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgdGhvc2Ugc2FtZVxuICogZW50aXRpZXMgaW5kZXhlZCBieSB0aGUgcHJpbWFyeSBrZXkgdmFsdWUgZm9yIGVhY2ggZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IGVudGl0aWVzXG4gKiBAcmV0dXJuIHtNYXB9ICBBIGNvbGxlY3Rpb24gaW5kZXhlZCBieSB0aGUgcHJpbWFyeSBrZXkgdmFsdWVzIGZvciBlYWNoIGVudGl0eS5cbiAqIEB0aHJvd3Mge0V4Y2VwdGlvbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUgPSAoIG1vZGVsTmFtZSwgZW50aXRpZXMgPSBbXSApID0+IHtcblx0YXNzZXJ0SXNOb3RFbXB0eShcblx0XHRlbnRpdGllcyxcblx0XHRfXyhcblx0XHRcdCdUaGUgcHJvdmlkZWQgYXJyYXkgb2YgZW50aXRpZXMgbXVzdCBub3QgYmUgZW1wdHknLFxuXHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHQpXG5cdCk7XG5cdGFzc2VydElzQXJyYXkoIGVudGl0aWVzICk7XG5cblx0Y29uc3QgbWFwcGVkRW50aXRpZXMgPSBuZXcgTWFwKCk7XG5cdGVudGl0aWVzLmZvckVhY2goICggZW50aXR5ICkgPT4ge1xuXHRcdG1hcHBlZEVudGl0aWVzLnNldChcblx0XHRcdGdldEVudGl0eVByaW1hcnlLZXlWYWx1ZXMoIG1vZGVsTmFtZSwgZW50aXR5ICksXG5cdFx0XHRlbnRpdHlcblx0XHQpO1xuXHR9ICk7XG5cdHJldHVybiBtYXBwZWRFbnRpdGllcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbnRpdHkgaW5zdGFuY2VzIHVzaW5nIHRoZSBnaXZlbiBmYWN0b3J5IGFuZCBhcnJheVxuICogb2YgZW50aXR5IHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZmFjdG9yeVxuICogQHBhcmFtIHtNYXB9IGVudGl0aWVzXG4gKiBAcmV0dXJuIHtNYXB9ICBBbiBhcnJheSBvZiBlbnRpdHkgaW5zdGFuY2VzIGluZGV4ZWQgYnlcbiAqIHRoZWlyIHByaW1hcnkga2V5IHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBbmRLZXlFbnRpdGllc0J5UHJpbWFyeUtleVZhbHVlID0gKFxuXHRmYWN0b3J5LFxuXHRlbnRpdGllcyxcbikgPT4ge1xuXHRhc3NlcnRJc01hcChcblx0XHRlbnRpdGllcyxcblx0XHRfXyhcblx0XHRcdCdUaGUgcHJvdmlkZWQgb2JqZWN0IG9mIGVudGl0aWVzIG11c3QgYmUgYSBNYXAgb2JqZWN0Jyxcblx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0KVxuXHQpO1xuXHRlbnRpdGllcy5mb3JFYWNoKCAoIGVudGl0eSwgZW50aXR5SWQgKSA9PiB7XG5cdFx0ZW50aXRpZXMuc2V0KCBlbnRpdHlJZCwgZmFjdG9yeS5mcm9tRXhpc3RpbmcoIGVudGl0eSApICk7XG5cdH0gKTtcblx0cmV0dXJuIGVudGl0aWVzO1xufTtcbiIsIi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQgKiBhcyBzdGF0dXNNb2RlbCBmcm9tICcuLi9zdGF0dXMvY29uc3RhbnRzJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ3JlZ2lzdHJhdGlvbic7XG5cbmV4cG9ydCBjb25zdCBSRUdJU1RSQVRJT05fU1RBVFVTX0lEUyA9IHZhbHVlcyhcblx0c3RhdHVzTW9kZWwuUkVHSVNUUkFUSU9OX1NUQVRVU19JRFxuKTtcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnknO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkLCB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG59IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0ICogYXMgc3RhdHVzTW9kZWwgZnJvbSAnLi4vc3RhdHVzL2NvbnN0YW50cyc7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0Zm9yRXZlbnRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yQXR0ZW5kZWVJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yVHJhbnNhY3Rpb25JZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yVGlja2V0SWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclN0YXR1c0lkOiBQcm9wVHlwZXMub25lT2YoIHZhbHVlcyggc3RhdHVzTW9kZWwuUkVHSVNUUkFUSU9OX1NUQVRVU19JRCApICksXG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnUkVHX0lEJyxcblx0XHRcdCdSRUdfZGF0ZScsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdH0gKSxcbn07XG5cbmV4cG9ydCBjb25zdCBvcHRpb25zRW50aXR5TWFwID0ge1xuXHRkZWZhdWx0OiB7XG5cdFx0dmFsdWU6ICdSRUdfSUQnLFxuXHRcdGxhYmVsOiAnUkVHX2NvZGUnLFxuXHR9LFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHtcbiAqIFx0e1xuICogXHRcdGF0dHJpYnV0ZXM6IHtcbiAqIFx0XHRcdGxpbWl0OiBudW1iZXIsXG4gKiBcdFx0XHRvcmRlckJ5OiBzdHJpbmcsXG4gKiBcdFx0XHRvcmRlcjogc3RyaW5nLFxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAncmVnX2RhdGUnLFxuXHRcdG9yZGVyOiBRVUVSWV9PUkRFUl9ERVNDLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGEgcmVnaXN0cmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRyZWdfaWQ6ICdSRUdfSUQnLFxuXHRcdHJlZ19kYXRlOiAnUkVHX2RhdGUnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiByZWdpc3RyYXRpb25zIGVuZHBvaW50IHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRXZlbnRJZCAgICBcdElEIG9mIEV2ZW50IHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yQXR0ZW5kZWVJZCAgICBJRCBvZiBBdHRlbmRlZSB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclRyYW5zYWN0aW9uSWQgSUQgb2YgVHJhbnNhY3Rpb24gdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JUaWNrZXRJZCBcdFx0SUQgb2YgVGlja2V0IHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yU3RhdHVzSWQgXHRcdElEIG9mIFN0YXR1cyB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgICBcdFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICgge1xuXHRmb3JFdmVudElkID0gMCxcblx0Zm9yQXR0ZW5kZWVJZCA9IDAsXG5cdGZvclRyYW5zYWN0aW9uSWQgPSAwLFxuXHRmb3JUaWNrZXRJZCA9IDAsXG5cdGZvclN0YXR1c0lkID0gJycsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXHRmb3JFdmVudElkID0gcGFyc2VJbnQoIGZvckV2ZW50SWQsIDEwICk7XG5cdGlmICggZm9yRXZlbnRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JFdmVudElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW0VWVF9JRF09JyArIGZvckV2ZW50SWQgKTtcblx0fVxuXHRmb3JBdHRlbmRlZUlkID0gcGFyc2VJbnQoIGZvckF0dGVuZGVlSWQsIDEwICk7XG5cdGlmICggZm9yQXR0ZW5kZWVJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JBdHRlbmRlZUlkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW0FUVF9JRF09JyArIGZvckF0dGVuZGVlSWQgKTtcblx0fVxuXHRmb3JUcmFuc2FjdGlvbklkID0gcGFyc2VJbnQoIGZvclRyYW5zYWN0aW9uSWQsIDEwICk7XG5cdGlmICggZm9yVHJhbnNhY3Rpb25JZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JUcmFuc2FjdGlvbklkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1RYTl9JRF09JyArIGZvclRyYW5zYWN0aW9uSWQgKTtcblx0fVxuXHRmb3JUaWNrZXRJZCA9IHBhcnNlSW50KCBmb3JUaWNrZXRJZCwgMTAgKTtcblx0aWYgKCBmb3JUaWNrZXRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JUaWNrZXRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtUS1RfSURdPScgKyBmb3JUaWNrZXRJZCApO1xuXHR9XG5cdGlmICggZm9yU3RhdHVzSWQgIT09ICcnICYmIGZvclN0YXR1c0lkICE9PSBudWxsICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtTVFNfSURdPScgKyBmb3JTdGF0dXNJZCApO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ3N0YXR1cyc7XG4vLyB0eXBlc1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX0VNQUlMID0gJ2VtYWlsJztcbmV4cG9ydCBjb25zdCBTVEFUVVNfVFlQRV9FVkVOVCA9ICdldmVudCc7XG5leHBvcnQgY29uc3QgU1RBVFVTX1RZUEVfTUVTU0FHRSA9ICdtZXNzYWdlJztcbmV4cG9ydCBjb25zdCBTVEFUVVNfVFlQRV9QQVlNRU5UID0gJ3BheW1lbnQnO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX1JFR0lTVFJBVElPTiA9ICdyZWdpc3RyYXRpb24nO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX1RSQU5TQUNUSU9OID0gJ3RyYW5zYWN0aW9uJztcbi8vIGVtYWlsXG5leHBvcnQgY29uc3QgRU1BSUxfU1RBVFVTX0lEID0ge1xuXHREUkFGVDogJ0VEUicsXG5cdFNFTlQ6ICdFU04nLFxuXHRFWFBJUkVEOiAnRVhQJyxcbn07XG4vLyBldmVudFxuZXhwb3J0IGNvbnN0IEVWRU5UX1NUQVRVU19JRCA9IHtcblx0QUNUSVZFOiAnQUNUJyxcblx0UkVHSVNUUkFUSU9OX0NMT1NFRDogJ0NMUycsXG5cdERFTEVURUQ6ICdERUwnLFxuXHRERU5JRUQ6ICdERU4nLFxuXHREUkFGVDogJ0RSRicsXG5cdE5PVF9BQ1RJVkU6ICdOQUMnLFxuXHROT1RfT1BFTjogJ05PUCcsXG5cdE9OR09JTkc6ICdPTkcnLFxuXHRSRUdJU1RSQVRJT05fT1BFTjogJ09QTicsXG5cdFBFTkRJTkc6ICdQTkQnLFxuXHRTRUNPTkRBUlk6ICdTRUMnLFxufTtcbi8vIG1lc3NhZ2VcbmV4cG9ydCBjb25zdCBNRVNTQUdFX1NUQVRVU19JRCA9IHtcblx0REVCVUc6ICdNRE8nLFxuXHRFWEVDVVRJTkc6ICdNRVgnLFxuXHRGQUlMOiAnTUZMJyxcblx0SU5DT01QTEVURTogJ01JQycsXG5cdElETEU6ICdNSUQnLFxuXHRSRVNFTkQ6ICdNUlMnLFxuXHRSRVRSWTogJ01SVCcsXG5cdFNFTlQ6ICdNU04nLFxufTtcbi8vIHBheW1lbnRcbmV4cG9ydCBjb25zdCBQQVlNRU5UX1NUQVRVU19JRCA9IHtcblx0QVBQUk9WRUQ6ICdQQVAnLFxuXHRDQU5DRUxMRUQ6ICdQQ04nLFxuXHRERUNMSU5FRDogJ1BEQycsXG5cdEZBSUxFRDogJ1BGTCcsXG5cdFBFTkRJTkc6ICdQUE4nLFxufTtcbi8vIHJlZ2lzdHJhdGlvblxuZXhwb3J0IGNvbnN0IFJFR0lTVFJBVElPTl9TVEFUVVNfSUQgPSB7XG5cdEFQUFJPVkVEOiAnUkFQJyxcblx0Q0FOQ0VMTEVEOiAnUkNOJyxcblx0REVDTElORUQ6ICdSREMnLFxuXHRJTkNPTVBMRVRFOiAnUklDJyxcblx0Tk9UX0FQUFJPVkVEOiAnUk5BJyxcblx0UEVORElOR19QQVlNRU5UOiAnUlBQJyxcblx0V0FJVF9MSVNUOiAnUldMJyxcbn07XG4vLyB0cmFuc2FjdGlvblxuZXhwb3J0IGNvbnN0IFRSQU5TQUNUSU9OX1NUQVRVU19JRCA9IHtcblx0QUJBTkRPTkVEOiAnVEFCJyxcblx0Q09NUExFVEU6ICdUQ00nLFxuXHRGQUlMRUQ6ICdURkwnLFxuXHRJTkNPTVBMRVRFOiAnVElOJyxcblx0T1ZFUlBBSUQ6ICdUT1AnLFxufTtcblxuLy8gdGhlIGZvbGxvd2luZyBhcmUgbm90IGluIHRoZSBzdGF0dXMgZGF0YWJhc2UgYnV0IGFyZSBrZXB0IGhlcmUgZm9yXG4vLyBjb252ZW5pZW5jZVxuXG4vLyBjdXN0b20gcG9zdCB0eXBlc1xuZXhwb3J0IGNvbnN0IENQVF9TVEFUVVNfSUQgPSB7XG5cdFBVQkxJU0g6ICdwdWJsaXNoJyxcblx0RlVUVVJFOiAnZnV0dXJlJyxcblx0RFJBRlQ6ICdkcmFmdCcsXG5cdFBFTkRJTkc6ICdwZW5kaW5nJyxcblx0UFJJVkFURTogJ3ByaXZhdGUnLFxuXHRUUkFTSEVEOiAndHJhc2gnLFxufTtcblxuZXhwb3J0IGNvbnN0IFVOS05PV05fU1RBVFVTX0lEID0gJ3Vua25vd24nO1xuXG5leHBvcnQgY29uc3QgQUxMX1NUQVRVU19JRFMgPSBbXG5cdC4uLnZhbHVlcyggRU1BSUxfU1RBVFVTX0lEICksXG5cdC4uLnZhbHVlcyggRVZFTlRfU1RBVFVTX0lEICksXG5cdC4uLnZhbHVlcyggTUVTU0FHRV9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBQQVlNRU5UX1NUQVRVU19JRCApLFxuXHQuLi52YWx1ZXMoIFJFR0lTVFJBVElPTl9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBUUkFOU0FDVElPTl9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBDUFRfU1RBVFVTX0lEICksXG5cdFVOS05PV05fU1RBVFVTX0lELFxuXTtcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgKiBhcyBzdGF0dXMgZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRVZFTlRfU1RBVFVTX0lEIH0gZnJvbSAnLi4vZXZlbnQnO1xuaW1wb3J0IHsgVElDS0VUX1NUQVRVU19JRCB9IGZyb20gJy4uL3RpY2tldCc7XG5pbXBvcnQgeyBEQVRFVElNRV9TVEFUVVNfSUQgfSBmcm9tICcuLi9kYXRldGltZSc7XG5pbXBvcnQgeyBDSEVDS0lOX1NUQVRVU19JRCB9IGZyb20gJy4uL2NoZWNraW4nO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIFJlZ2lzdHJhdGlvbiBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1JFR0lTVFJBVElPTiA9IHtcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5QRU5ESU5HX1BBWU1FTlQgXTogbmV3IExhYmVsKFxuXHRcdF9fKCAncGVuZGluZyBwYXltZW50JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdF9fKCAncGVuZGluZyBwYXltZW50cycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELkFQUFJPVkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYXBwcm92ZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5OT1RfQVBQUk9WRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdub3QgYXBwcm92ZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5DQU5DRUxMRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdjYW5jZWxsZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5JTkNPTVBMRVRFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnaW5jb21wbGV0ZScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELkRFQ0xJTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZGVjbGluZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5XQUlUX0xJU1QgXTogbmV3IExhYmVsKFxuXHRcdF9fKCAnd2FpdCBsaXN0JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdF9fKCAnd2FpdCBsaXN0cycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIFRyYW5zYWN0aW9uIHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKlxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RSQU5TQUNUSU9OID0ge1xuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuT1ZFUlBBSUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdvdmVycGFpZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuQ09NUExFVEUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdjb21wbGV0ZScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuSU5DT01QTEVURSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2luY29tcGxldGUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuVFJBTlNBQ1RJT05fU1RBVFVTX0lELkZBSUxFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2ZhaWxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuQUJBTkRPTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYWJhbmRvbmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgcGF5bWVudCBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1BBWU1FTlQgPSB7XG5cdFsgc3RhdHVzLlBBWU1FTlRfU1RBVFVTX0lELkFQUFJPVkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYWNjZXB0ZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUEFZTUVOVF9TVEFUVVNfSUQuUEVORElORyBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3BlbmRpbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUEFZTUVOVF9TVEFUVVNfSUQuQ0FOQ0VMTEVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnY2FuY2VsbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHQpLFxuXHRbIHN0YXR1cy5QQVlNRU5UX1NUQVRVU19JRC5ERUNMSU5FRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2RlY2xpbmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHQpLFxuXHRbIHN0YXR1cy5QQVlNRU5UX1NUQVRVU19JRC5GQUlMRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdmYWlsZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gbWFwIGZvciBNZXNzYWdlIHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfTUVTU0FHRSA9IHtcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuU0VOVCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3NlbnQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuSURMRSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3F1ZXVlZCBmb3Igc2VuZGluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5GQUlMIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZmFpbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELkRFQlVHIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZGVidWcgb25seScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5FWEVDVVRJTkcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdtZXNzZW5nZXIgaXMgZXhlY3V0aW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELlJFU0VORCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3F1ZXVlZCBmb3IgcmVzZW5kaW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELklOQ09NUExFVEUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdxdWV1ZWQgZm9yIGdlbmVyYXRpbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuUkVUUlkgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdmYWlsZWQgc2VuZGluZywgY2FuIGJlIHJldHJpZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gbWFwIGZvciBDUFQgc3RhdHVzZXNcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DUFQgPSB7XG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuUFVCTElTSCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3B1Ymxpc2hlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5DUFRfU1RBVFVTX0lELkZVVFVSRSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3NjaGVkdWxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5DUFRfU1RBVFVTX0lELkRSQUZUIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZHJhZnQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuQ1BUX1NUQVRVU19JRC5QRU5ESU5HIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncGVuZGluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5DUFRfU1RBVFVTX0lELlBSSVZBVEUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdwcml2YXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuVFJBU0hFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3RyYXNoZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8vIHRoZSBmb2xsb3dpbmcgc3RhdHVzIG1hcHMgYXJlIGZvciBtb2RlbCBzdGF0dXNlcyB0aGF0IGFyZSBub3Qgc2F2ZWQgaW4gdGhlXG4vLyBzdGF0dXMgdGFibGUgYnV0IGZvciBjb252ZW5pZW5jZSBoYXZlIHRoZWlyIGxhYmVscyByZXRyaWV2YWJsZSB2aWEgaGVyZS5cblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIEV2ZW50IFN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfRVZFTlQgPSB7XG5cdFsgRVZFTlRfU1RBVFVTX0lELlNPTERfT1VUIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnc29sZCBvdXQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBFVkVOVF9TVEFUVVNfSUQuUE9TVFBPTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncG9zdHBvbmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgRVZFTlRfU1RBVFVTX0lELkNBTkNFTExFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2NhbmNlbGxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIFRpY2tldCBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RJQ0tFVCA9IHtcblx0WyBUSUNLRVRfU1RBVFVTX0lELkFSQ0hJVkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYXJjaGl2ZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBUSUNLRVRfU1RBVFVTX0lELkVYUElSRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdleHBpcmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgVElDS0VUX1NUQVRVU19JRC5TT0xEX09VVCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3NvbGQgb3V0JywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgVElDS0VUX1NUQVRVU19JRC5QRU5ESU5HIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAndXBjb21pbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBUSUNLRVRfU1RBVFVTX0lELk9OU0FMRSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ29uIHNhbGUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gbWFwIGZvciBkYXRldGltZSBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0RBVEVUSU1FID0ge1xuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5DQU5DRUxMRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdjYW5jZWxsZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBEQVRFVElNRV9TVEFUVVNfSUQuU09MRF9PVVQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdzb2xkIG91dCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5FWFBJUkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZXhwaXJlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5JTkFDVElWRSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2luYWN0aXZlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgREFURVRJTUVfU1RBVFVTX0lELlVQQ09NSU5HIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAndXBjb21pbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBEQVRFVElNRV9TVEFUVVNfSUQuQUNUSVZFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYWN0aXZlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgREFURVRJTUVfU1RBVFVTX0lELlBPU1RQT05FRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3Bvc3Rwb25lZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIGNoZWNraW4gc3RhdHVzZXNcbiAqXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ0hFQ0tJTiA9IHtcblx0WyBDSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9JTiBdOiBuZXcgTGFiZWwoXG5cdFx0X18oICdjaGVjay1pbicsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRfXyggJ2NoZWNrLWlucycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIENIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX09VVCBdOiBuZXcgTGFiZWwoXG5cdFx0X18oICdjaGVjay1vdXQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0X18oICdjaGVjay1vdXRzJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfTkVWRVIgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICduZXZlciBjaGVja2VkIGluJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIENvbWJpbmVkIHRyYW5zbGF0aW9uIG1hcCBmb3IgYWxsIHN0YXR1c2VzLlxuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0FMTCA9IHtcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9SRUdJU1RSQVRJT04sXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfVFJBTlNBQ1RJT04sXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfUEFZTUVOVCxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9NRVNTQUdFLFxuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX0NQVCxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9FVkVOVCxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9USUNLRVQsXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfREFURVRJTUUsXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ0hFQ0tJTixcblx0WyBzdGF0dXMuVU5LTk9XTl9TVEFUVVNfSUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICd1bmtub3duJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHByZXR0eSBzdGF0dXMgbGFiZWwgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0dXNDb2RlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNpbmd1bGFyICBXaGV0aGVyIHRvIHJldHVybiB0aGUgc2luZ3VsYXIgb3IgcGx1cmFsIGxhYmVsXG4gKiB2YWx1ZVxuICogQHBhcmFtIHsoc2VudGVuY2V8bG93ZXJ8dXBwZXIpfSBzY2hlbWFcbiAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyB0aGUgbWFwcGVkIHByZXR0eSBsYWJlbCBmb3IgdGhlIGdpdmVuIHN0YXR1cyBjb2RlIG9yXG4gKiBhIGZvcm1hdHRlZCAndW5rb3duJyBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gbWFwcGVkIHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZXR0eVN0YXR1cyA9IChcblx0c3RhdHVzQ29kZSxcblx0c2luZ3VsYXIgPSB0cnVlLFxuXHRzY2hlbWEgPSBMYWJlbC5GT1JNQVRfU0VOVEVOQ0VfQ0FTRVxuKSA9PiB7XG5cdHJldHVybiBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0FMTFsgc3RhdHVzQ29kZSBdID9cblx0XHRTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0FMTFsgc3RhdHVzQ29kZSBdLmFzRm9ybWF0dGVkKCBzaW5ndWxhciwgc2NoZW1hICkgOlxuXHRcdFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMWyBzdGF0dXMuVU5LTk9XTl9TVEFUVVNfSUQgXS5hc0Zvcm1hdHRlZChcblx0XHRcdHNpbmd1bGFyLFxuXHRcdFx0c2NoZW1hXG5cdFx0KTtcbn07XG5cbi8qKlxuICogRXhwZWN0cyBhbiBhcnJheSBvZiBzdGF0dXMgY29kZXMgYW5kIHJldHVybnMgYW4gb2JqZWN0IGluZGV4ZWQgYnkgY29kZXMgd2l0aFxuICogdmFsdWVzIGJlaW5nIHRoZSBmb3JtYXR0ZWQgcHJldHR5IGxhYmVscyBmb3IgZWFjaCBjb2RlIGFjY29yZGluZyB0byB0aGVcbiAqIHByb3ZpZGVkIGFyZ3VtZW50c1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXR1c0NvZGVzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNpbmd1bGFyXG4gKiBAcGFyYW0geyhzZW50ZW5jZXxsb3dlcnx1cHBlcil9IHNjaGVtYVxuICogQHJldHVybiB7T2JqZWN0fSBBbiBvYmplY3QgbWFwcGluZyBzdGF0dXMgY29kZSB0byBwcmV0dHkgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBwcmV0dHlTdGF0dXNlcyA9IChcblx0c3RhdHVzQ29kZXMsXG5cdHNpbmd1bGFyID0gdHJ1ZSxcblx0c2NoZW1hID0gTGFiZWwuRk9STUFUX1NFTlRFTkNFX0NBU0VcbikgPT4ge1xuXHRpZiAoICEgaXNBcnJheSggc3RhdHVzQ29kZXMgKSApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCAnRXhwZWN0IGluY29taW5nIHN0YXR1c0NvZGVzIGFyZ3VtZW50JyArXG5cdFx0XHQnIHRvIGJlIGFuIGFycmF5JyApO1xuXHR9XG5cdGNvbnN0IG1hcHBlZFN0YXR1c2VzID0ge307XG5cdHN0YXR1c0NvZGVzLmZvckVhY2goICggc3RhdHVzQ29kZSApID0+IHtcblx0XHRtYXBwZWRTdGF0dXNlc1sgc3RhdHVzQ29kZSBdID0gcHJldHR5U3RhdHVzKFxuXHRcdFx0c3RhdHVzQ29kZSxcblx0XHRcdHNpbmd1bGFyLFxuXHRcdFx0c2NoZW1hXG5cdFx0KTtcblx0fSApO1xuXHRyZXR1cm4gbWFwcGVkU3RhdHVzZXM7XG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfQVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcbn0gZnJvbSAnLi4vYmFzZSc7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHR9XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRRdWVyeURhdGEgPSB7XG5cdHF1ZXJ5RGF0YToge1xuXHRcdGxpbWl0OiAyNSxcblx0XHRvcmRlckJ5OiAnc3RhdHVzQ29kZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0FTQyxcblx0fSxcbn07XG5cbi8qKlxuICogVXNlZCB0byBtYXAgYW4gb3JkZXJCeSBzdHJpbmcgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkIGluIGEgUkVTVCBxdWVyeSBmcm9tXG4gKiB0aGUgY29udGV4dCBvZiBhbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JkZXJCeVxuICpcbiAqIEByZXR1cm4geyBzdHJpbmcgfSBSZXR1cm5zIGFuIGFjdHVhbCBvcmRlckJ5IHN0cmluZyBmb3IgdGhlIFJFU1QgcXVlcnkgZm9yXG4gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvdmlkZWQgYWxpYXNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcE9yZGVyQnkgPSAoIG9yZGVyQnkgKSA9PiB7XG5cdGNvbnN0IG9yZGVyQnlNYXAgPSB7XG5cdFx0c3RhdHVzQ29kZTogJ1NUU19jb2RlJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gZXZlbnRzIGVuZHBvaW50IHJlcXVlc3QgdXNpbmcgcHJvdmlkZWRcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGF0dXNUeXBlIFx0SUQgZm9yIHR5cGUgb2YgU3RhdHVzIHRvIHJldHJpZXZlXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgIFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICggeyBzdGF0dXNUeXBlIH0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGlmICggc3RhdHVzVHlwZSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbU1RTX3R5cGVdPScgKyBzdGF0dXNUeXBlICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG5cbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgTU9ERUxfTkFNRSA9ICd0aWNrZXQnO1xuXG5leHBvcnQgY29uc3QgVElDS0VUX1NUQVRVU19JRCA9IHtcblx0U09MRF9PVVQ6ICdUS1MnLFxuXHRFWFBJUkVEOiAnVEtFJyxcblx0QVJDSElWRUQ6ICdUS0EnLFxuXHRQRU5ESU5HOiAnVEtQJyxcblx0T05TQUxFOiAnVEtPJyxcbn07XG5cbmV4cG9ydCBjb25zdCBUSUNLRVRfU1RBVFVTX0lEUyA9IHZhbHVlcyggVElDS0VUX1NUQVRVU19JRCApO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cy1oZWxwZXInO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG5cdEdSRUFURVJfVEhBTixcblx0R1JFQVRFUl9USEFOX0FORF9FUVVBTCxcblx0TEVTU19USEFOX0FORF9FUVVBTCxcbn0gZnJvbSAnLi4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBub3dEYXRlQW5kVGltZSA9IG1vbWVudCgpO1xuXG4vKipcbiAqIERlc2NyaWJlZCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7e2F0dHJpYnV0ZXM6ICp9fVxuICovXG5leHBvcnQgY29uc3QgcXVlcnlEYXRhVHlwZXMgPSB7XG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnVEtUX25hbWUnLFxuXHRcdFx0J1RLVF9JRCcsXG5cdFx0XHQnc3RhcnRfZGF0ZScsXG5cdFx0XHQnZW5kX2RhdGUnLFxuXHRcdF0gKSxcblx0XHRvcmRlcjogUHJvcFR5cGVzLm9uZU9mKCBBTExPV0VEX09SREVSX1ZBTFVFUyApLFxuXHRcdHNob3dFeHBpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblx0XHRtb250aDogUHJvcFR5cGVzLm1vbnRoLFxuXHR9ICksXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0XHRzaG93RXhwaXJlZDogYm9vbGVhblxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAnc3RhcnRfZGF0ZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdFx0c2hvd0V4cGlyZWQ6IGZhbHNlLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGEgdGlja2V0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRzdGFydF9kYXRlOiAnVEtUX3N0YXJ0X2RhdGUnLFxuXHRcdGVuZF9kYXRlOiAnVEtUX2VuZF9kYXRlJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gdGlja2V0cyBlbmRwb2ludCByZXF1ZXN0IHVzaW5nIHByb3ZpZGVkXG4gKiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dFeHBpcmVkIFx0V2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBleHBpcmVkIHRpY2tldHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9udGggICAgICAgICAgICBSZXR1cm4gdGlja2V0cyBmb3IgdGhlIGdpdmVuIG1vbnRoLiBDYW4gYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdGluIGFueSBtb250aCBmb3JtYXQgcmVjb2duaXplZCBieSBtb21lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JFdmVudElkICAgIFx0SUQgb2YgRXZlbnQgdG8gcmV0cmlldmUgdGlja2V0cyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JEYXRldGltZUlkICAgIElEIG9mIERhdGV0aW1lIHRvIHJldHJpZXZlIHRpY2tldHMgZm9yXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgIFx0VGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdGZvckV2ZW50SWQgPSAwLFxuXHRmb3JEYXRldGltZUlkID0gMCxcblx0c2hvd0V4cGlyZWQgPSBmYWxzZSxcblx0bW9udGggPSAnbm9uZScsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXHRpZiAoICEgc2hvd0V4cGlyZWQgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtUS1RfZW5kX2RhdGUqKmV4cGlyZWRdW109JyArIEdSRUFURVJfVEhBTiArXG5cdFx0XHQnJndoZXJlW1RLVF9lbmRfZGF0ZSoqZXhwaXJlZF1bXT0nICtcblx0XHRcdG5vd0RhdGVBbmRUaW1lLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGlmICggbW9udGggJiYgbW9udGggIT09ICdub25lJyApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW1RLVF9zdGFydF9kYXRlXVtdPScgKyBHUkVBVEVSX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbVEtUX3N0YXJ0X2RhdGVdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5zdGFydE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtUS1RfZW5kX2RhdGVdW109JyArIExFU1NfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtUS1RfZW5kX2RhdGVdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5lbmRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGZvckV2ZW50SWQgPSBwYXJzZUludCggZm9yRXZlbnRJZCwgMTAgKTtcblx0aWYgKCBmb3JFdmVudElkICE9PSAwICYmICEgaXNOYU4oIGZvckV2ZW50SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRGF0ZXRpbWUuRXZlbnQuRVZUX0lEXT0nICsgZm9yRXZlbnRJZCApO1xuXHR9XG5cdGZvckRhdGV0aW1lSWQgPSBwYXJzZUludCggZm9yRGF0ZXRpbWVJZCwgMTAgKTtcblx0aWYgKCBmb3JEYXRldGltZUlkICE9PSAwICYmICEgaXNOYU4oIGZvckRhdGV0aW1lSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRGF0ZXRpbWUuRFRUX0lEXT0nICsgZm9yRGF0ZXRpbWVJZCApO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgTU9ERUxfTkFNRSwgVElDS0VUX1NUQVRVU19JRCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9XG4gKi9cbmNvbnN0IGFzc2VydFRpY2tldEVudGl0eSA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIFRpY2tldEVudGl0eSwgTU9ERUxfTkFNRSApICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHQnVGhlIHByb3ZpZGVkIGVudGl0eSBpcyBub3QgYSB0aWNrZXQgaW5zdGFuY2UnXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVBcmNoaXZlZCBpZiB0cnVlIHdpbGwgbm90IGZpbHRlciBvdXQgdHJhc2hlZCBlbnRpdGllc1xuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBldmVudCBkYXRlIGlzIHZhbGlkIGVudGl0eSBvciBhcmNoaXZlXG4gKi9cbmNvbnN0IGlzVmFsaWRFbnRpdHlPckFyY2hpdmUgPSAoIFRpY2tldEVudGl0eSwgaW5jbHVkZUFyY2hpdmVkICkgPT4ge1xuXHRyZXR1cm4gKCBpbmNsdWRlQXJjaGl2ZWQgJiYgYXNzZXJ0VGlja2V0RW50aXR5KCBUaWNrZXRFbnRpdHkgKSApIHx8XG4gICAgICAgICggISBpbmNsdWRlQXJjaGl2ZWQgJiYgISBpc0FyY2hpdmVkKCBUaWNrZXRFbnRpdHkgKSApO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVBcmNoaXZlZCBpZiB0cnVlIHdpbGwgbm90IGZpbHRlciBvdXQgYXJjaGl2ZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGlja2V0IGlzIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHB1cmNoYXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc09uU2FsZSA9ICggVGlja2V0RW50aXR5LCBpbmNsdWRlQXJjaGl2ZWQgPSBmYWxzZSApID0+IHtcblx0cmV0dXJuIGlzVmFsaWRFbnRpdHlPckFyY2hpdmUoIFRpY2tldEVudGl0eSwgaW5jbHVkZUFyY2hpdmVkICkgJiZcblx0VGlja2V0RW50aXR5LnN0YXJ0RGF0ZS5kaWZmTm93KCkgPCAwICYmXG5cdFRpY2tldEVudGl0eS5lbmREYXRlLmRpZmZOb3coKSA+IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUFyY2hpdmVkIGlmIHRydWUgd2lsbCBub3QgZmlsdGVyIG91dCBhcmNoaXZlZCBlbnRpdGllc1xuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aWNrZXQgY2FuIG5vIGxvbmdlciBiZSBwdXJjaGFzZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRXhwaXJlZCA9ICggVGlja2V0RW50aXR5LCBpbmNsdWRlQXJjaGl2ZWQgPSBmYWxzZSApID0+IHtcblx0cmV0dXJuIGlzVmFsaWRFbnRpdHlPckFyY2hpdmUoIFRpY2tldEVudGl0eSwgaW5jbHVkZUFyY2hpdmVkICkgJiZcblx0VGlja2V0RW50aXR5LmVuZERhdGUuZGlmZk5vdygpIDwgMDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlQXJjaGl2ZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IGFyY2hpdmVkIGVudGl0aWVzXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldHMgc29sZCBtZWV0cyBvciBleGNlZWRzIGF2YWlsYWJsZSBxdWFudGl0eVxuICovXG5leHBvcnQgY29uc3QgaXNTb2xkT3V0ID0gKCBUaWNrZXRFbnRpdHksIGluY2x1ZGVBcmNoaXZlZCA9IGZhbHNlICkgPT4ge1xuXHRpZiAoXG5cdFx0KCBpbmNsdWRlQXJjaGl2ZWQgJiYgISBhc3NlcnRUaWNrZXRFbnRpdHkoIFRpY2tldEVudGl0eSApICkgfHxcblx0XHQoICEgaW5jbHVkZUFyY2hpdmVkICYmIGlzQXJjaGl2ZWQoIFRpY2tldEVudGl0eSApIClcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IHF0eSA9IFRpY2tldEVudGl0eS5xdHk7XG5cdHJldHVybiAoIHF0eSAhPT0gbnVsbCAmJiBxdHkgIT09ICdJTkYnICYmIHF0eSAhPT0gSW5maW5pdHkgJiYgcXR5ICE9PSAtMSApICYmXG5cdFx0VGlja2V0RW50aXR5LnNvbGQgPj0gcXR5O1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVBcmNoaXZlZCBpZiB0cnVlIHdpbGwgbm90IGZpbHRlciBvdXQgYXJjaGl2ZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFx0dHJ1ZSBpZiB0aWNrZXQgaXMgbm90IHlldCBhdmFpbGFibGUgZm9yIHB1cmNoYXNlLFxuICogXHRcdFx0XHRcdFx0YnV0IHdpbGwgYmUgYXQgc29tZSBkYXRlIGluIHRoZSBmdXR1cmVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzUGVuZGluZyA9ICggVGlja2V0RW50aXR5LCBpbmNsdWRlQXJjaGl2ZWQgPSBmYWxzZSApID0+IHtcblx0cmV0dXJuIGlzVmFsaWRFbnRpdHlPckFyY2hpdmUoIFRpY2tldEVudGl0eSwgaW5jbHVkZUFyY2hpdmVkICkgJiZcblx0VGlja2V0RW50aXR5LnN0YXJ0RGF0ZS5kaWZmTm93KCkgPiAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldCBpcyBhcmNoaXZlZFxuICovXG5leHBvcnQgY29uc3QgaXNBcmNoaXZlZCA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRhc3NlcnRUaWNrZXRFbnRpdHkoIFRpY2tldEVudGl0eSApO1xuXHRyZXR1cm4gVGlja2V0RW50aXR5LmRlbGV0ZWQ7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gc3RhdHVzIElEXG4gKi9cbmV4cG9ydCBjb25zdCBzdGF0dXMgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0aWYgKCBpc0FyY2hpdmVkKCBUaWNrZXRFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gVElDS0VUX1NUQVRVU19JRC5BUkNISVZFRDtcblx0fVxuXHRpZiAoIGlzU29sZE91dCggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIFRJQ0tFVF9TVEFUVVNfSUQuU09MRF9PVVQ7XG5cdH1cblx0aWYgKCBpc0V4cGlyZWQoIFRpY2tldEVudGl0eSApICkge1xuXHRcdHJldHVybiBUSUNLRVRfU1RBVFVTX0lELkVYUElSRUQ7XG5cdH1cblx0aWYgKCBpc1BlbmRpbmcoIFRpY2tldEVudGl0eSApICkge1xuXHRcdHJldHVybiBUSUNLRVRfU1RBVFVTX0lELlBFTkRJTkc7XG5cdH1cblx0aWYgKCBpc09uU2FsZSggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIFRJQ0tFVF9TVEFUVVNfSUQuT05TQUxFO1xuXHR9XG5cdHJldHVybiAnJztcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSB0aWNrZXQgc3RhdHVzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUaWNrZXRTdGF0dXNUZXh0TGFiZWwgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0bGV0IHRpY2tldFN0YXR1cyA9ICcnO1xuXHRzd2l0Y2ggKCBzdGF0dXMoIFRpY2tldEVudGl0eSApICkge1xuXHRcdGNhc2UgVElDS0VUX1NUQVRVU19JRC5TT0xEX09VVCA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ3NvbGQgb3V0JywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUSUNLRVRfU1RBVFVTX0lELkVYUElSRUQgOlxuXHRcdFx0dGlja2V0U3RhdHVzID0gX18oICdleHBpcmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUSUNLRVRfU1RBVFVTX0lELlBFTkRJTkcgOlxuXHRcdFx0dGlja2V0U3RhdHVzID0gX18oICdwZW5kaW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUSUNLRVRfU1RBVFVTX0lELk9OU0FMRSA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ29uIHNhbGUnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRJQ0tFVF9TVEFUVVNfSUQuQVJDSElWRUQgOlxuXHRcdFx0dGlja2V0U3RhdHVzID0gX18oICdhcmNoaXZlZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiB0aWNrZXRTdGF0dXM7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgQ1NTIGNsYXNzIGZvciB0aGUgYmFja2dyb3VuZCBjb2xvclxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0cmV0dXJuIGBlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci0keyBzdGF0dXMoIFRpY2tldEVudGl0eSApIH1gO1xufTtcbiIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycjJbaV0gPSBhcnJbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXM7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcblxuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXIpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5OyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG4gIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdDsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZDsiLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiLi9kZWZpbmVQcm9wZXJ0eVwiKTtcblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICB2YXIgb3duS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG93bktleXMgPSBvd25LZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSkuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgb3duS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RTcHJlYWQ7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi4vaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIik7XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm47IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2Y7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXlMaW1pdCA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0XCIpO1xuXG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0XCIpO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2xpY2VkVG9BcnJheTsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheVwiKTtcblxudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWRcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXk7IiwiZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2YyKG9iaik7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mMihTeW1ib2wuaXRlcmF0b3IpID09PSBcInN5bWJvbFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2Y7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4vLyBVc2VkIGZvciBzZXR0aW5nIHByb3RvdHlwZSBtZXRob2RzIHRoYXQgSUU4IGNob2tlcyBvbi5cbnZhciBERUxFVEUgPSAnZGVsZXRlJztcblxuLy8gQ29uc3RhbnRzIGRlc2NyaWJpbmcgdGhlIHNpemUgb2YgdHJpZSBub2Rlcy5cbnZhciBTSElGVCA9IDU7IC8vIFJlc3VsdGVkIGluIGJlc3QgcGVyZm9ybWFuY2UgYWZ0ZXIgX19fX19fP1xudmFyIFNJWkUgPSAxIDw8IFNISUZUO1xudmFyIE1BU0sgPSBTSVpFIC0gMTtcblxuLy8gQSBjb25zaXN0ZW50IHNoYXJlZCB2YWx1ZSByZXByZXNlbnRpbmcgXCJub3Qgc2V0XCIgd2hpY2ggZXF1YWxzIG5vdGhpbmcgb3RoZXJcbi8vIHRoYW4gaXRzZWxmLCBhbmQgbm90aGluZyB0aGF0IGNvdWxkIGJlIHByb3ZpZGVkIGV4dGVybmFsbHkuXG52YXIgTk9UX1NFVCA9IHt9O1xuXG4vLyBCb29sZWFuIHJlZmVyZW5jZXMsIFJvdWdoIGVxdWl2YWxlbnQgb2YgYGJvb2wgJmAuXG5mdW5jdGlvbiBNYWtlUmVmKCkge1xuICByZXR1cm4geyB2YWx1ZTogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gU2V0UmVmKHJlZikge1xuICBpZiAocmVmKSB7XG4gICAgcmVmLnZhbHVlID0gdHJ1ZTtcbiAgfVxufVxuXG4vLyBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSB2YWx1ZSByZXByZXNlbnRpbmcgYW4gXCJvd25lclwiIGZvciB0cmFuc2llbnQgd3JpdGVzXG4vLyB0byB0cmllcy4gVGhlIHJldHVybiB2YWx1ZSB3aWxsIG9ubHkgZXZlciBlcXVhbCBpdHNlbGYsIGFuZCB3aWxsIG5vdCBlcXVhbFxuLy8gdGhlIHJldHVybiBvZiBhbnkgc3Vic2VxdWVudCBjYWxsIG9mIHRoaXMgZnVuY3Rpb24uXG5mdW5jdGlvbiBPd25lcklEKCkge31cblxuZnVuY3Rpb24gZW5zdXJlU2l6ZShpdGVyKSB7XG4gIGlmIChpdGVyLnNpemUgPT09IHVuZGVmaW5lZCkge1xuICAgIGl0ZXIuc2l6ZSA9IGl0ZXIuX19pdGVyYXRlKHJldHVyblRydWUpO1xuICB9XG4gIHJldHVybiBpdGVyLnNpemU7XG59XG5cbmZ1bmN0aW9uIHdyYXBJbmRleChpdGVyLCBpbmRleCkge1xuICAvLyBUaGlzIGltcGxlbWVudHMgXCJpcyBhcnJheSBpbmRleFwiIHdoaWNoIHRoZSBFQ01BU3RyaW5nIHNwZWMgZGVmaW5lcyBhczpcbiAgLy9cbiAgLy8gICAgIEEgU3RyaW5nIHByb3BlcnR5IG5hbWUgUCBpcyBhbiBhcnJheSBpbmRleCBpZiBhbmQgb25seSBpZlxuICAvLyAgICAgVG9TdHJpbmcoVG9VaW50MzIoUCkpIGlzIGVxdWFsIHRvIFAgYW5kIFRvVWludDMyKFApIGlzIG5vdCBlcXVhbFxuICAvLyAgICAgdG8gMl4zMuKIkjEuXG4gIC8vXG4gIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1hcnJheS1leG90aWMtb2JqZWN0c1xuICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgIHZhciB1aW50MzJJbmRleCA9IGluZGV4ID4+PiAwOyAvLyBOID4+PiAwIGlzIHNob3J0aGFuZCBmb3IgVG9VaW50MzJcbiAgICBpZiAoJycgKyB1aW50MzJJbmRleCAhPT0gaW5kZXggfHwgdWludDMySW5kZXggPT09IDQyOTQ5NjcyOTUpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGluZGV4ID0gdWludDMySW5kZXg7XG4gIH1cbiAgcmV0dXJuIGluZGV4IDwgMCA/IGVuc3VyZVNpemUoaXRlcikgKyBpbmRleCA6IGluZGV4O1xufVxuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gd2hvbGVTbGljZShiZWdpbiwgZW5kLCBzaXplKSB7XG4gIHJldHVybiAoXG4gICAgKChiZWdpbiA9PT0gMCAmJiAhaXNOZWcoYmVnaW4pKSB8fFxuICAgICAgKHNpemUgIT09IHVuZGVmaW5lZCAmJiBiZWdpbiA8PSAtc2l6ZSkpICYmXG4gICAgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IChzaXplICE9PSB1bmRlZmluZWQgJiYgZW5kID49IHNpemUpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQmVnaW4oYmVnaW4sIHNpemUpIHtcbiAgcmV0dXJuIHJlc29sdmVJbmRleChiZWdpbiwgc2l6ZSwgMCk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVFbmQoZW5kLCBzaXplKSB7XG4gIHJldHVybiByZXNvbHZlSW5kZXgoZW5kLCBzaXplLCBzaXplKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUluZGV4KGluZGV4LCBzaXplLCBkZWZhdWx0SW5kZXgpIHtcbiAgLy8gU2FuaXRpemUgaW5kaWNlcyB1c2luZyB0aGlzIHNob3J0aGFuZCBmb3IgVG9JbnQzMihhcmd1bWVudClcbiAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvaW50MzJcbiAgcmV0dXJuIGluZGV4ID09PSB1bmRlZmluZWRcbiAgICA/IGRlZmF1bHRJbmRleFxuICAgIDogaXNOZWcoaW5kZXgpXG4gICAgICA/IHNpemUgPT09IEluZmluaXR5XG4gICAgICAgID8gc2l6ZVxuICAgICAgICA6IE1hdGgubWF4KDAsIHNpemUgKyBpbmRleCkgfCAwXG4gICAgICA6IHNpemUgPT09IHVuZGVmaW5lZCB8fCBzaXplID09PSBpbmRleFxuICAgICAgICA/IGluZGV4XG4gICAgICAgIDogTWF0aC5taW4oc2l6ZSwgaW5kZXgpIHwgMDtcbn1cblxuZnVuY3Rpb24gaXNOZWcodmFsdWUpIHtcbiAgLy8gQWNjb3VudCBmb3IgLTAgd2hpY2ggaXMgbmVnYXRpdmUsIGJ1dCBub3QgbGVzcyB0aGFuIDAuXG4gIHJldHVybiB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA9PT0gLUluZmluaXR5KTtcbn1cblxuLy8gTm90ZTogdmFsdWUgaXMgdW5jaGFuZ2VkIHRvIG5vdCBicmVhayBpbW11dGFibGUtZGV2dG9vbHMuXG52YXIgSVNfQ09MTEVDVElPTl9TWU1CT0wgPSAnQEBfX0lNTVVUQUJMRV9JVEVSQUJMRV9fQEAnO1xuXG5mdW5jdGlvbiBpc0NvbGxlY3Rpb24obWF5YmVDb2xsZWN0aW9uKSB7XG4gIHJldHVybiBCb29sZWFuKG1heWJlQ29sbGVjdGlvbiAmJiBtYXliZUNvbGxlY3Rpb25bSVNfQ09MTEVDVElPTl9TWU1CT0xdKTtcbn1cblxudmFyIElTX0tFWUVEX1NZTUJPTCA9ICdAQF9fSU1NVVRBQkxFX0tFWUVEX19AQCc7XG5cbmZ1bmN0aW9uIGlzS2V5ZWQobWF5YmVLZXllZCkge1xuICByZXR1cm4gQm9vbGVhbihtYXliZUtleWVkICYmIG1heWJlS2V5ZWRbSVNfS0VZRURfU1lNQk9MXSk7XG59XG5cbnZhciBJU19JTkRFWEVEX1NZTUJPTCA9ICdAQF9fSU1NVVRBQkxFX0lOREVYRURfX0BAJztcblxuZnVuY3Rpb24gaXNJbmRleGVkKG1heWJlSW5kZXhlZCkge1xuICByZXR1cm4gQm9vbGVhbihtYXliZUluZGV4ZWQgJiYgbWF5YmVJbmRleGVkW0lTX0lOREVYRURfU1lNQk9MXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXNzb2NpYXRpdmUobWF5YmVBc3NvY2lhdGl2ZSkge1xuICByZXR1cm4gaXNLZXllZChtYXliZUFzc29jaWF0aXZlKSB8fCBpc0luZGV4ZWQobWF5YmVBc3NvY2lhdGl2ZSk7XG59XG5cbnZhciBDb2xsZWN0aW9uID0gZnVuY3Rpb24gQ29sbGVjdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNDb2xsZWN0aW9uKHZhbHVlKSA/IHZhbHVlIDogU2VxKHZhbHVlKTtcbn07XG5cbnZhciBLZXllZENvbGxlY3Rpb24gPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChDb2xsZWN0aW9uKSB7XG4gIGZ1bmN0aW9uIEtleWVkQ29sbGVjdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBpc0tleWVkKHZhbHVlKSA/IHZhbHVlIDogS2V5ZWRTZXEodmFsdWUpO1xuICB9XG5cbiAgaWYgKCBDb2xsZWN0aW9uICkgS2V5ZWRDb2xsZWN0aW9uLl9fcHJvdG9fXyA9IENvbGxlY3Rpb247XG4gIEtleWVkQ29sbGVjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlICk7XG4gIEtleWVkQ29sbGVjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBLZXllZENvbGxlY3Rpb247XG5cbiAgcmV0dXJuIEtleWVkQ29sbGVjdGlvbjtcbn0oQ29sbGVjdGlvbikpO1xuXG52YXIgSW5kZXhlZENvbGxlY3Rpb24gPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChDb2xsZWN0aW9uKSB7XG4gIGZ1bmN0aW9uIEluZGV4ZWRDb2xsZWN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzSW5kZXhlZCh2YWx1ZSkgPyB2YWx1ZSA6IEluZGV4ZWRTZXEodmFsdWUpO1xuICB9XG5cbiAgaWYgKCBDb2xsZWN0aW9uICkgSW5kZXhlZENvbGxlY3Rpb24uX19wcm90b19fID0gQ29sbGVjdGlvbjtcbiAgSW5kZXhlZENvbGxlY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZSApO1xuICBJbmRleGVkQ29sbGVjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbmRleGVkQ29sbGVjdGlvbjtcblxuICByZXR1cm4gSW5kZXhlZENvbGxlY3Rpb247XG59KENvbGxlY3Rpb24pKTtcblxudmFyIFNldENvbGxlY3Rpb24gPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChDb2xsZWN0aW9uKSB7XG4gIGZ1bmN0aW9uIFNldENvbGxlY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gaXNDb2xsZWN0aW9uKHZhbHVlKSAmJiAhaXNBc3NvY2lhdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IFNldFNlcSh2YWx1ZSk7XG4gIH1cblxuICBpZiAoIENvbGxlY3Rpb24gKSBTZXRDb2xsZWN0aW9uLl9fcHJvdG9fXyA9IENvbGxlY3Rpb247XG4gIFNldENvbGxlY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZSApO1xuICBTZXRDb2xsZWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNldENvbGxlY3Rpb247XG5cbiAgcmV0dXJuIFNldENvbGxlY3Rpb247XG59KENvbGxlY3Rpb24pKTtcblxuQ29sbGVjdGlvbi5LZXllZCA9IEtleWVkQ29sbGVjdGlvbjtcbkNvbGxlY3Rpb24uSW5kZXhlZCA9IEluZGV4ZWRDb2xsZWN0aW9uO1xuQ29sbGVjdGlvbi5TZXQgPSBTZXRDb2xsZWN0aW9uO1xuXG52YXIgSVNfU0VRX1NZTUJPTCA9ICdAQF9fSU1NVVRBQkxFX1NFUV9fQEAnO1xuXG5mdW5jdGlvbiBpc1NlcShtYXliZVNlcSkge1xuICByZXR1cm4gQm9vbGVhbihtYXliZVNlcSAmJiBtYXliZVNlcVtJU19TRVFfU1lNQk9MXSk7XG59XG5cbnZhciBJU19SRUNPUkRfU1lNQk9MID0gJ0BAX19JTU1VVEFCTEVfUkVDT1JEX19AQCc7XG5cbmZ1bmN0aW9uIGlzUmVjb3JkKG1heWJlUmVjb3JkKSB7XG4gIHJldHVybiBCb29sZWFuKG1heWJlUmVjb3JkICYmIG1heWJlUmVjb3JkW0lTX1JFQ09SRF9TWU1CT0xdKTtcbn1cblxuZnVuY3Rpb24gaXNJbW11dGFibGUobWF5YmVJbW11dGFibGUpIHtcbiAgcmV0dXJuIGlzQ29sbGVjdGlvbihtYXliZUltbXV0YWJsZSkgfHwgaXNSZWNvcmQobWF5YmVJbW11dGFibGUpO1xufVxuXG52YXIgSVNfT1JERVJFRF9TWU1CT0wgPSAnQEBfX0lNTVVUQUJMRV9PUkRFUkVEX19AQCc7XG5cbmZ1bmN0aW9uIGlzT3JkZXJlZChtYXliZU9yZGVyZWQpIHtcbiAgcmV0dXJuIEJvb2xlYW4obWF5YmVPcmRlcmVkICYmIG1heWJlT3JkZXJlZFtJU19PUkRFUkVEX1NZTUJPTF0pO1xufVxuXG52YXIgSVRFUkFURV9LRVlTID0gMDtcbnZhciBJVEVSQVRFX1ZBTFVFUyA9IDE7XG52YXIgSVRFUkFURV9FTlRSSUVTID0gMjtcblxudmFyIFJFQUxfSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5cbnZhciBJVEVSQVRPUl9TWU1CT0wgPSBSRUFMX0lURVJBVE9SX1NZTUJPTCB8fCBGQVVYX0lURVJBVE9SX1NZTUJPTDtcblxudmFyIEl0ZXJhdG9yID0gZnVuY3Rpb24gSXRlcmF0b3IobmV4dCkge1xuICB0aGlzLm5leHQgPSBuZXh0O1xufTtcblxuSXRlcmF0b3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICByZXR1cm4gJ1tJdGVyYXRvcl0nO1xufTtcblxuSXRlcmF0b3IuS0VZUyA9IElURVJBVEVfS0VZUztcbkl0ZXJhdG9yLlZBTFVFUyA9IElURVJBVEVfVkFMVUVTO1xuSXRlcmF0b3IuRU5UUklFUyA9IElURVJBVEVfRU5UUklFUztcblxuSXRlcmF0b3IucHJvdG90eXBlLmluc3BlY3QgPSBJdGVyYXRvci5wcm90b3R5cGUudG9Tb3VyY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbn07XG5JdGVyYXRvci5wcm90b3R5cGVbSVRFUkFUT1JfU1lNQk9MXSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGl0ZXJhdG9yVmFsdWUodHlwZSwgaywgdiwgaXRlcmF0b3JSZXN1bHQpIHtcbiAgdmFyIHZhbHVlID0gdHlwZSA9PT0gMCA/IGsgOiB0eXBlID09PSAxID8gdiA6IFtrLCB2XTtcbiAgaXRlcmF0b3JSZXN1bHRcbiAgICA/IChpdGVyYXRvclJlc3VsdC52YWx1ZSA9IHZhbHVlKVxuICAgIDogKGl0ZXJhdG9yUmVzdWx0ID0ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgfSk7XG4gIHJldHVybiBpdGVyYXRvclJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXRlcmF0b3JEb25lKCkge1xuICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG59XG5cbmZ1bmN0aW9uIGhhc0l0ZXJhdG9yKG1heWJlSXRlcmFibGUpIHtcbiAgcmV0dXJuICEhZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKTtcbn1cblxuZnVuY3Rpb24gaXNJdGVyYXRvcihtYXliZUl0ZXJhdG9yKSB7XG4gIHJldHVybiBtYXliZUl0ZXJhdG9yICYmIHR5cGVvZiBtYXliZUl0ZXJhdG9yLm5leHQgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGdldEl0ZXJhdG9yKGl0ZXJhYmxlKSB7XG4gIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihpdGVyYWJsZSk7XG4gIHJldHVybiBpdGVyYXRvckZuICYmIGl0ZXJhdG9yRm4uY2FsbChpdGVyYWJsZSk7XG59XG5cbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4oaXRlcmFibGUpIHtcbiAgdmFyIGl0ZXJhdG9yRm4gPVxuICAgIGl0ZXJhYmxlICYmXG4gICAgKChSRUFMX0lURVJBVE9SX1NZTUJPTCAmJiBpdGVyYWJsZVtSRUFMX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgICBpdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgfVxufVxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlLmxlbmd0aCkgJiZcbiAgICB2YWx1ZS5sZW5ndGggPj0gMCAmJlxuICAgICh2YWx1ZS5sZW5ndGggPT09IDBcbiAgICAgID8gLy8gT25seSB7bGVuZ3RoOiAwfSBpcyBjb25zaWRlcmVkIEFycmF5LWxpa2UuXG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDFcbiAgICAgIDogLy8gQW4gb2JqZWN0IGlzIG9ubHkgQXJyYXktbGlrZSBpZiBpdCBoYXMgYSBwcm9wZXJ0eSB3aGVyZSB0aGUgbGFzdCB2YWx1ZVxuICAgICAgICAvLyBpbiB0aGUgYXJyYXktbGlrZSBtYXkgYmUgZm91bmQgKHdoaWNoIGNvdWxkIGJlIHVuZGVmaW5lZCkuXG4gICAgICAgIHZhbHVlLmhhc093blByb3BlcnR5KHZhbHVlLmxlbmd0aCAtIDEpKVxuICApO1xufVxuXG52YXIgU2VxID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoQ29sbGVjdGlvbiQkMSkge1xuICBmdW5jdGlvbiBTZXEodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgPyBlbXB0eVNlcXVlbmNlKClcbiAgICAgIDogaXNJbW11dGFibGUodmFsdWUpXG4gICAgICAgID8gdmFsdWUudG9TZXEoKVxuICAgICAgICA6IHNlcUZyb21WYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBpZiAoIENvbGxlY3Rpb24kJDEgKSBTZXEuX19wcm90b19fID0gQ29sbGVjdGlvbiQkMTtcbiAgU2VxLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIENvbGxlY3Rpb24kJDEgJiYgQ29sbGVjdGlvbiQkMS5wcm90b3R5cGUgKTtcbiAgU2VxLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNlcTtcblxuICBTZXEucHJvdG90eXBlLnRvU2VxID0gZnVuY3Rpb24gdG9TZXEgKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIFNlcS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX190b1N0cmluZygnU2VxIHsnLCAnfScpO1xuICB9O1xuXG4gIFNlcS5wcm90b3R5cGUuY2FjaGVSZXN1bHQgPSBmdW5jdGlvbiBjYWNoZVJlc3VsdCAoKSB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZSAmJiB0aGlzLl9faXRlcmF0ZVVuY2FjaGVkKSB7XG4gICAgICB0aGlzLl9jYWNoZSA9IHRoaXMuZW50cnlTZXEoKS50b0FycmF5KCk7XG4gICAgICB0aGlzLnNpemUgPSB0aGlzLl9jYWNoZS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIGFic3RyYWN0IF9faXRlcmF0ZVVuY2FjaGVkKGZuLCByZXZlcnNlKVxuXG4gIFNlcS5wcm90b3R5cGUuX19pdGVyYXRlID0gZnVuY3Rpb24gX19pdGVyYXRlIChmbiwgcmV2ZXJzZSkge1xuICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuICAgIGlmIChjYWNoZSkge1xuICAgICAgdmFyIHNpemUgPSBjYWNoZS5sZW5ndGg7XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB3aGlsZSAoaSAhPT0gc2l6ZSkge1xuICAgICAgICB2YXIgZW50cnkgPSBjYWNoZVtyZXZlcnNlID8gc2l6ZSAtICsraSA6IGkrK107XG4gICAgICAgIGlmIChmbihlbnRyeVsxXSwgZW50cnlbMF0sIHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX19pdGVyYXRlVW5jYWNoZWQoZm4sIHJldmVyc2UpO1xuICB9O1xuXG4gIC8vIGFic3RyYWN0IF9faXRlcmF0b3JVbmNhY2hlZCh0eXBlLCByZXZlcnNlKVxuXG4gIFNlcS5wcm90b3R5cGUuX19pdGVyYXRvciA9IGZ1bmN0aW9uIF9faXRlcmF0b3IgKHR5cGUsIHJldmVyc2UpIHtcbiAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcbiAgICBpZiAoY2FjaGUpIHtcbiAgICAgIHZhciBzaXplID0gY2FjaGUubGVuZ3RoO1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpID09PSBzaXplKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yRG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlbnRyeSA9IGNhY2hlW3JldmVyc2UgPyBzaXplIC0gKytpIDogaSsrXTtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yVmFsdWUodHlwZSwgZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fX2l0ZXJhdG9yVW5jYWNoZWQodHlwZSwgcmV2ZXJzZSk7XG4gIH07XG5cbiAgcmV0dXJuIFNlcTtcbn0oQ29sbGVjdGlvbikpO1xuXG52YXIgS2V5ZWRTZXEgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChTZXEpIHtcbiAgZnVuY3Rpb24gS2V5ZWRTZXEodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgPyBlbXB0eVNlcXVlbmNlKCkudG9LZXllZFNlcSgpXG4gICAgICA6IGlzQ29sbGVjdGlvbih2YWx1ZSlcbiAgICAgICAgPyBpc0tleWVkKHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUudG9TZXEoKVxuICAgICAgICAgIDogdmFsdWUuZnJvbUVudHJ5U2VxKClcbiAgICAgICAgOiBpc1JlY29yZCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLnRvU2VxKClcbiAgICAgICAgICA6IGtleWVkU2VxRnJvbVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIGlmICggU2VxICkgS2V5ZWRTZXEuX19wcm90b19fID0gU2VxO1xuICBLZXllZFNlcS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBTZXEgJiYgU2VxLnByb3RvdHlwZSApO1xuICBLZXllZFNlcS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBLZXllZFNlcTtcblxuICBLZXllZFNlcS5wcm90b3R5cGUudG9LZXllZFNlcSA9IGZ1bmN0aW9uIHRvS2V5ZWRTZXEgKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHJldHVybiBLZXllZFNlcTtcbn0oU2VxKSk7XG5cbnZhciBJbmRleGVkU2VxID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoU2VxKSB7XG4gIGZ1bmN0aW9uIEluZGV4ZWRTZXEodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgPyBlbXB0eVNlcXVlbmNlKClcbiAgICAgIDogaXNDb2xsZWN0aW9uKHZhbHVlKVxuICAgICAgICA/IGlzS2V5ZWQodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5lbnRyeVNlcSgpXG4gICAgICAgICAgOiB2YWx1ZS50b0luZGV4ZWRTZXEoKVxuICAgICAgICA6IGlzUmVjb3JkKHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUudG9TZXEoKS5lbnRyeVNlcSgpXG4gICAgICAgICAgOiBpbmRleGVkU2VxRnJvbVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIGlmICggU2VxICkgSW5kZXhlZFNlcS5fX3Byb3RvX18gPSBTZXE7XG4gIEluZGV4ZWRTZXEucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggU2VxICYmIFNlcS5wcm90b3R5cGUgKTtcbiAgSW5kZXhlZFNlcS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbmRleGVkU2VxO1xuXG4gIEluZGV4ZWRTZXEub2YgPSBmdW5jdGlvbiBvZiAoLyouLi52YWx1ZXMqLykge1xuICAgIHJldHVybiBJbmRleGVkU2VxKGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgSW5kZXhlZFNlcS5wcm90b3R5cGUudG9JbmRleGVkU2VxID0gZnVuY3Rpb24gdG9JbmRleGVkU2VxICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBJbmRleGVkU2VxLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCdTZXEgWycsICddJyk7XG4gIH07XG5cbiAgcmV0dXJuIEluZGV4ZWRTZXE7XG59KFNlcSkpO1xuXG52YXIgU2V0U2VxID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoU2VxKSB7XG4gIGZ1bmN0aW9uIFNldFNlcSh2YWx1ZSkge1xuICAgIHJldHVybiAoaXNDb2xsZWN0aW9uKHZhbHVlKSAmJiAhaXNBc3NvY2lhdGl2ZSh2YWx1ZSlcbiAgICAgID8gdmFsdWVcbiAgICAgIDogSW5kZXhlZFNlcSh2YWx1ZSlcbiAgICApLnRvU2V0U2VxKCk7XG4gIH1cblxuICBpZiAoIFNlcSApIFNldFNlcS5fX3Byb3RvX18gPSBTZXE7XG4gIFNldFNlcS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBTZXEgJiYgU2VxLnByb3RvdHlwZSApO1xuICBTZXRTZXEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2V0U2VxO1xuXG4gIFNldFNlcS5vZiA9IGZ1bmN0aW9uIG9mICgvKi4uLnZhbHVlcyovKSB7XG4gICAgcmV0dXJuIFNldFNlcShhcmd1bWVudHMpO1xuICB9O1xuXG4gIFNldFNlcS5wcm90b3R5cGUudG9TZXRTZXEgPSBmdW5jdGlvbiB0b1NldFNlcSAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcmV0dXJuIFNldFNlcTtcbn0oU2VxKSk7XG5cblNlcS5pc1NlcSA9IGlzU2VxO1xuU2VxLktleWVkID0gS2V5ZWRTZXE7XG5TZXEuU2V0ID0gU2V0U2VxO1xuU2VxLkluZGV4ZWQgPSBJbmRleGVkU2VxO1xuXG5TZXEucHJvdG90eXBlW0lTX1NFUV9TWU1CT0xdID0gdHJ1ZTtcblxuLy8gI3ByYWdtYSBSb290IFNlcXVlbmNlc1xuXG52YXIgQXJyYXlTZXEgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChJbmRleGVkU2VxKSB7XG4gIGZ1bmN0aW9uIEFycmF5U2VxKGFycmF5KSB7XG4gICAgdGhpcy5fYXJyYXkgPSBhcnJheTtcbiAgICB0aGlzLnNpemUgPSBhcnJheS5sZW5ndGg7XG4gIH1cblxuICBpZiAoIEluZGV4ZWRTZXEgKSBBcnJheVNlcS5fX3Byb3RvX18gPSBJbmRleGVkU2VxO1xuICBBcnJheVNlcS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBJbmRleGVkU2VxICYmIEluZGV4ZWRTZXEucHJvdG90eXBlICk7XG4gIEFycmF5U2VxLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFycmF5U2VxO1xuXG4gIEFycmF5U2VxLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGluZGV4LCBub3RTZXRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmhhcyhpbmRleCkgPyB0aGlzLl9hcnJheVt3cmFwSW5kZXgodGhpcywgaW5kZXgpXSA6IG5vdFNldFZhbHVlO1xuICB9O1xuXG4gIEFycmF5U2VxLnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIGFycmF5ID0gdGhpcy5fYXJyYXk7XG4gICAgdmFyIHNpemUgPSBhcnJheS5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpICE9PSBzaXplKSB7XG4gICAgICB2YXIgaWkgPSByZXZlcnNlID8gc2l6ZSAtICsraSA6IGkrKztcbiAgICAgIGlmIChmbihhcnJheVtpaV0sIGlpLCB0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpO1xuICB9O1xuXG4gIEFycmF5U2VxLnByb3RvdHlwZS5fX2l0ZXJhdG9yID0gZnVuY3Rpb24gX19pdGVyYXRvciAodHlwZSwgcmV2ZXJzZSkge1xuICAgIHZhciBhcnJheSA9IHRoaXMuX2FycmF5O1xuICAgIHZhciBzaXplID0gYXJyYXkubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpID09PSBzaXplKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvckRvbmUoKTtcbiAgICAgIH1cbiAgICAgIHZhciBpaSA9IHJldmVyc2UgPyBzaXplIC0gKytpIDogaSsrO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yVmFsdWUodHlwZSwgaWksIGFycmF5W2lpXSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIEFycmF5U2VxO1xufShJbmRleGVkU2VxKSk7XG5cbnZhciBPYmplY3RTZXEgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChLZXllZFNlcSkge1xuICBmdW5jdGlvbiBPYmplY3RTZXEob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuICAgIHRoaXMuX29iamVjdCA9IG9iamVjdDtcbiAgICB0aGlzLl9rZXlzID0ga2V5cztcbiAgICB0aGlzLnNpemUgPSBrZXlzLmxlbmd0aDtcbiAgfVxuXG4gIGlmICggS2V5ZWRTZXEgKSBPYmplY3RTZXEuX19wcm90b19fID0gS2V5ZWRTZXE7XG4gIE9iamVjdFNlcS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBLZXllZFNlcSAmJiBLZXllZFNlcS5wcm90b3R5cGUgKTtcbiAgT2JqZWN0U2VxLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFNlcTtcblxuICBPYmplY3RTZXEucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoa2V5LCBub3RTZXRWYWx1ZSkge1xuICAgIGlmIChub3RTZXRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICF0aGlzLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gbm90U2V0VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vYmplY3Rba2V5XTtcbiAgfTtcblxuICBPYmplY3RTZXEucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIGhhcyAoa2V5KSB7XG4gICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwodGhpcy5fb2JqZWN0LCBrZXkpO1xuICB9O1xuXG4gIE9iamVjdFNlcS5wcm90b3R5cGUuX19pdGVyYXRlID0gZnVuY3Rpb24gX19pdGVyYXRlIChmbiwgcmV2ZXJzZSkge1xuICAgIHZhciBvYmplY3QgPSB0aGlzLl9vYmplY3Q7XG4gICAgdmFyIGtleXMgPSB0aGlzLl9rZXlzO1xuICAgIHZhciBzaXplID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpICE9PSBzaXplKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tyZXZlcnNlID8gc2l6ZSAtICsraSA6IGkrK107XG4gICAgICBpZiAoZm4ob2JqZWN0W2tleV0sIGtleSwgdGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaTtcbiAgfTtcblxuICBPYmplY3RTZXEucHJvdG90eXBlLl9faXRlcmF0b3IgPSBmdW5jdGlvbiBfX2l0ZXJhdG9yICh0eXBlLCByZXZlcnNlKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMuX29iamVjdDtcbiAgICB2YXIga2V5cyA9IHRoaXMuX2tleXM7XG4gICAgdmFyIHNpemUgPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaSA9PT0gc2l6ZSkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JEb25lKCk7XG4gICAgICB9XG4gICAgICB2YXIga2V5ID0ga2V5c1tyZXZlcnNlID8gc2l6ZSAtICsraSA6IGkrK107XG4gICAgICByZXR1cm4gaXRlcmF0b3JWYWx1ZSh0eXBlLCBrZXksIG9iamVjdFtrZXldKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0U2VxO1xufShLZXllZFNlcSkpO1xuT2JqZWN0U2VxLnByb3RvdHlwZVtJU19PUkRFUkVEX1NZTUJPTF0gPSB0cnVlO1xuXG52YXIgQ29sbGVjdGlvblNlcSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEluZGV4ZWRTZXEpIHtcbiAgZnVuY3Rpb24gQ29sbGVjdGlvblNlcShjb2xsZWN0aW9uKSB7XG4gICAgdGhpcy5fY29sbGVjdGlvbiA9IGNvbGxlY3Rpb247XG4gICAgdGhpcy5zaXplID0gY29sbGVjdGlvbi5sZW5ndGggfHwgY29sbGVjdGlvbi5zaXplO1xuICB9XG5cbiAgaWYgKCBJbmRleGVkU2VxICkgQ29sbGVjdGlvblNlcS5fX3Byb3RvX18gPSBJbmRleGVkU2VxO1xuICBDb2xsZWN0aW9uU2VxLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEluZGV4ZWRTZXEgJiYgSW5kZXhlZFNlcS5wcm90b3R5cGUgKTtcbiAgQ29sbGVjdGlvblNlcS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xsZWN0aW9uU2VxO1xuXG4gIENvbGxlY3Rpb25TZXEucHJvdG90eXBlLl9faXRlcmF0ZVVuY2FjaGVkID0gZnVuY3Rpb24gX19pdGVyYXRlVW5jYWNoZWQgKGZuLCByZXZlcnNlKSB7XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRlKGZuLCByZXZlcnNlKTtcbiAgICB9XG4gICAgdmFyIGNvbGxlY3Rpb24gPSB0aGlzLl9jb2xsZWN0aW9uO1xuICAgIHZhciBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGNvbGxlY3Rpb24pO1xuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICBpZiAoaXNJdGVyYXRvcihpdGVyYXRvcikpIHtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICBpZiAoZm4oc3RlcC52YWx1ZSwgaXRlcmF0aW9ucysrLCB0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXRlcmF0aW9ucztcbiAgfTtcblxuICBDb2xsZWN0aW9uU2VxLnByb3RvdHlwZS5fX2l0ZXJhdG9yVW5jYWNoZWQgPSBmdW5jdGlvbiBfX2l0ZXJhdG9yVW5jYWNoZWQgKHR5cGUsIHJldmVyc2UpIHtcbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdG9yKHR5cGUsIHJldmVyc2UpO1xuICAgIH1cbiAgICB2YXIgY29sbGVjdGlvbiA9IHRoaXMuX2NvbGxlY3Rpb247XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoY29sbGVjdGlvbik7XG4gICAgaWYgKCFpc0l0ZXJhdG9yKGl0ZXJhdG9yKSkge1xuICAgICAgcmV0dXJuIG5ldyBJdGVyYXRvcihpdGVyYXRvckRvbmUpO1xuICAgIH1cbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RlcCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIHJldHVybiBzdGVwLmRvbmUgPyBzdGVwIDogaXRlcmF0b3JWYWx1ZSh0eXBlLCBpdGVyYXRpb25zKyssIHN0ZXAudmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBDb2xsZWN0aW9uU2VxO1xufShJbmRleGVkU2VxKSk7XG5cbi8vICMgcHJhZ21hIEhlbHBlciBmdW5jdGlvbnNcblxudmFyIEVNUFRZX1NFUTtcblxuZnVuY3Rpb24gZW1wdHlTZXF1ZW5jZSgpIHtcbiAgcmV0dXJuIEVNUFRZX1NFUSB8fCAoRU1QVFlfU0VRID0gbmV3IEFycmF5U2VxKFtdKSk7XG59XG5cbmZ1bmN0aW9uIGtleWVkU2VxRnJvbVZhbHVlKHZhbHVlKSB7XG4gIHZhciBzZXEgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgID8gbmV3IEFycmF5U2VxKHZhbHVlKVxuICAgIDogaGFzSXRlcmF0b3IodmFsdWUpXG4gICAgICA/IG5ldyBDb2xsZWN0aW9uU2VxKHZhbHVlKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChzZXEpIHtcbiAgICByZXR1cm4gc2VxLmZyb21FbnRyeVNlcSgpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG5ldyBPYmplY3RTZXEodmFsdWUpO1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ0V4cGVjdGVkIEFycmF5IG9yIGNvbGxlY3Rpb24gb2JqZWN0IG9mIFtrLCB2XSBlbnRyaWVzLCBvciBrZXllZCBvYmplY3Q6ICcgK1xuICAgICAgdmFsdWVcbiAgKTtcbn1cblxuZnVuY3Rpb24gaW5kZXhlZFNlcUZyb21WYWx1ZSh2YWx1ZSkge1xuICB2YXIgc2VxID0gbWF5YmVJbmRleGVkU2VxRnJvbVZhbHVlKHZhbHVlKTtcbiAgaWYgKHNlcSkge1xuICAgIHJldHVybiBzZXE7XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnRXhwZWN0ZWQgQXJyYXkgb3IgY29sbGVjdGlvbiBvYmplY3Qgb2YgdmFsdWVzOiAnICsgdmFsdWVcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2VxRnJvbVZhbHVlKHZhbHVlKSB7XG4gIHZhciBzZXEgPSBtYXliZUluZGV4ZWRTZXFGcm9tVmFsdWUodmFsdWUpO1xuICBpZiAoc2VxKSB7XG4gICAgcmV0dXJuIHNlcTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBuZXcgT2JqZWN0U2VxKHZhbHVlKTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICdFeHBlY3RlZCBBcnJheSBvciBjb2xsZWN0aW9uIG9iamVjdCBvZiB2YWx1ZXMsIG9yIGtleWVkIG9iamVjdDogJyArIHZhbHVlXG4gICk7XG59XG5cbmZ1bmN0aW9uIG1heWJlSW5kZXhlZFNlcUZyb21WYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheUxpa2UodmFsdWUpXG4gICAgPyBuZXcgQXJyYXlTZXEodmFsdWUpXG4gICAgOiBoYXNJdGVyYXRvcih2YWx1ZSlcbiAgICAgID8gbmV3IENvbGxlY3Rpb25TZXEodmFsdWUpXG4gICAgICA6IHVuZGVmaW5lZDtcbn1cblxudmFyIElTX01BUF9TWU1CT0wgPSAnQEBfX0lNTVVUQUJMRV9NQVBfX0BAJztcblxuZnVuY3Rpb24gaXNNYXAobWF5YmVNYXApIHtcbiAgcmV0dXJuIEJvb2xlYW4obWF5YmVNYXAgJiYgbWF5YmVNYXBbSVNfTUFQX1NZTUJPTF0pO1xufVxuXG5mdW5jdGlvbiBpc09yZGVyZWRNYXAobWF5YmVPcmRlcmVkTWFwKSB7XG4gIHJldHVybiBpc01hcChtYXliZU9yZGVyZWRNYXApICYmIGlzT3JkZXJlZChtYXliZU9yZGVyZWRNYXApO1xufVxuXG5mdW5jdGlvbiBpc1ZhbHVlT2JqZWN0KG1heWJlVmFsdWUpIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgbWF5YmVWYWx1ZSAmJlxuICAgICAgdHlwZW9mIG1heWJlVmFsdWUuZXF1YWxzID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2YgbWF5YmVWYWx1ZS5oYXNoQ29kZSA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufVxuXG4vKipcbiAqIEFuIGV4dGVuc2lvbiBvZiB0aGUgXCJzYW1lLXZhbHVlXCIgYWxnb3JpdGhtIGFzIFtkZXNjcmliZWQgZm9yIHVzZSBieSBFUzYgTWFwXG4gKiBhbmQgU2V0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXAjS2V5X2VxdWFsaXR5KVxuICpcbiAqIE5hTiBpcyBjb25zaWRlcmVkIHRoZSBzYW1lIGFzIE5hTiwgaG93ZXZlciAtMCBhbmQgMCBhcmUgY29uc2lkZXJlZCB0aGUgc2FtZVxuICogdmFsdWUsIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGJ5XG4gKiBbYE9iamVjdC5pc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pcykuXG4gKlxuICogVGhpcyBpcyBleHRlbmRlZCBmdXJ0aGVyIHRvIGFsbG93IE9iamVjdHMgdG8gZGVzY3JpYmUgdGhlIHZhbHVlcyB0aGV5XG4gKiByZXByZXNlbnQsIGJ5IHdheSBvZiBgdmFsdWVPZmAgb3IgYGVxdWFsc2AgKGFuZCBgaGFzaENvZGVgKS5cbiAqXG4gKiBOb3RlOiBiZWNhdXNlIG9mIHRoaXMgZXh0ZW5zaW9uLCB0aGUga2V5IGVxdWFsaXR5IG9mIEltbXV0YWJsZS5NYXAgYW5kIHRoZVxuICogdmFsdWUgZXF1YWxpdHkgb2YgSW1tdXRhYmxlLlNldCB3aWxsIGRpZmZlciBmcm9tIEVTNiBNYXAgYW5kIFNldC5cbiAqXG4gKiAjIyMgRGVmaW5pbmcgY3VzdG9tIHZhbHVlc1xuICpcbiAqIFRoZSBlYXNpZXN0IHdheSB0byBkZXNjcmliZSB0aGUgdmFsdWUgYW4gb2JqZWN0IHJlcHJlc2VudHMgaXMgYnkgaW1wbGVtZW50aW5nXG4gKiBgdmFsdWVPZmAuIEZvciBleGFtcGxlLCBgRGF0ZWAgcmVwcmVzZW50cyBhIHZhbHVlIGJ5IHJldHVybmluZyBhIHVuaXhcbiAqIHRpbWVzdGFtcCBmb3IgYHZhbHVlT2ZgOlxuICpcbiAqICAgICB2YXIgZGF0ZTEgPSBuZXcgRGF0ZSgxMjM0NTY3ODkwMDAwKTsgLy8gRnJpIEZlYiAxMyAyMDA5IC4uLlxuICogICAgIHZhciBkYXRlMiA9IG5ldyBEYXRlKDEyMzQ1Njc4OTAwMDApO1xuICogICAgIGRhdGUxLnZhbHVlT2YoKTsgLy8gMTIzNDU2Nzg5MDAwMFxuICogICAgIGFzc2VydCggZGF0ZTEgIT09IGRhdGUyICk7XG4gKiAgICAgYXNzZXJ0KCBJbW11dGFibGUuaXMoIGRhdGUxLCBkYXRlMiApICk7XG4gKlxuICogTm90ZTogb3ZlcnJpZGluZyBgdmFsdWVPZmAgbWF5IGhhdmUgb3RoZXIgaW1wbGljYXRpb25zIGlmIHlvdSB1c2UgdGhpcyBvYmplY3RcbiAqIHdoZXJlIEphdmFTY3JpcHQgZXhwZWN0cyBhIHByaW1pdGl2ZSwgc3VjaCBhcyBpbXBsaWNpdCBzdHJpbmcgY29lcmNpb24uXG4gKlxuICogRm9yIG1vcmUgY29tcGxleCB0eXBlcywgZXNwZWNpYWxseSBjb2xsZWN0aW9ucywgaW1wbGVtZW50aW5nIGB2YWx1ZU9mYCBtYXlcbiAqIG5vdCBiZSBwZXJmb3JtYW50LiBBbiBhbHRlcm5hdGl2ZSBpcyB0byBpbXBsZW1lbnQgYGVxdWFsc2AgYW5kIGBoYXNoQ29kZWAuXG4gKlxuICogYGVxdWFsc2AgdGFrZXMgYW5vdGhlciBvYmplY3QsIHByZXN1bWFibHkgb2Ygc2ltaWxhciB0eXBlLCBhbmQgcmV0dXJucyB0cnVlXG4gKiBpZiBpdCBpcyBlcXVhbC4gRXF1YWxpdHkgaXMgc3ltbWV0cmljYWwsIHNvIHRoZSBzYW1lIHJlc3VsdCBzaG91bGQgYmVcbiAqIHJldHVybmVkIGlmIHRoaXMgYW5kIHRoZSBhcmd1bWVudCBhcmUgZmxpcHBlZC5cbiAqXG4gKiAgICAgYXNzZXJ0KCBhLmVxdWFscyhiKSA9PT0gYi5lcXVhbHMoYSkgKTtcbiAqXG4gKiBgaGFzaENvZGVgIHJldHVybnMgYSAzMmJpdCBpbnRlZ2VyIG51bWJlciByZXByZXNlbnRpbmcgdGhlIG9iamVjdCB3aGljaCB3aWxsXG4gKiBiZSB1c2VkIHRvIGRldGVybWluZSBob3cgdG8gc3RvcmUgdGhlIHZhbHVlIG9iamVjdCBpbiBhIE1hcCBvciBTZXQuIFlvdSBtdXN0XG4gKiBwcm92aWRlIGJvdGggb3IgbmVpdGhlciBtZXRob2RzLCBvbmUgbXVzdCBub3QgZXhpc3Qgd2l0aG91dCB0aGUgb3RoZXIuXG4gKlxuICogQWxzbywgYW4gaW1wb3J0YW50IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIG1ldGhvZHMgbXVzdCBiZSB1cGhlbGQ6IGlmIHR3b1xuICogdmFsdWVzIGFyZSBlcXVhbCwgdGhleSAqbXVzdCogcmV0dXJuIHRoZSBzYW1lIGhhc2hDb2RlLiBJZiB0aGUgdmFsdWVzIGFyZSBub3RcbiAqIGVxdWFsLCB0aGV5IG1pZ2h0IGhhdmUgdGhlIHNhbWUgaGFzaENvZGU7IHRoaXMgaXMgY2FsbGVkIGEgaGFzaCBjb2xsaXNpb24sXG4gKiBhbmQgd2hpbGUgdW5kZXNpcmFibGUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGl0IGlzIGFjY2VwdGFibGUuXG4gKlxuICogICAgIGlmIChhLmVxdWFscyhiKSkge1xuICogICAgICAgYXNzZXJ0KCBhLmhhc2hDb2RlKCkgPT09IGIuaGFzaENvZGUoKSApO1xuICogICAgIH1cbiAqXG4gKiBBbGwgSW1tdXRhYmxlIGNvbGxlY3Rpb25zIGFyZSBWYWx1ZSBPYmplY3RzOiB0aGV5IGltcGxlbWVudCBgZXF1YWxzKClgXG4gKiBhbmQgYGhhc2hDb2RlKClgLlxuICovXG5mdW5jdGlvbiBpcyh2YWx1ZUEsIHZhbHVlQikge1xuICBpZiAodmFsdWVBID09PSB2YWx1ZUIgfHwgKHZhbHVlQSAhPT0gdmFsdWVBICYmIHZhbHVlQiAhPT0gdmFsdWVCKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICghdmFsdWVBIHx8ICF2YWx1ZUIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiB2YWx1ZUEudmFsdWVPZiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiB2YWx1ZUIudmFsdWVPZiA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICB2YWx1ZUEgPSB2YWx1ZUEudmFsdWVPZigpO1xuICAgIHZhbHVlQiA9IHZhbHVlQi52YWx1ZU9mKCk7XG4gICAgaWYgKHZhbHVlQSA9PT0gdmFsdWVCIHx8ICh2YWx1ZUEgIT09IHZhbHVlQSAmJiB2YWx1ZUIgIT09IHZhbHVlQikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIXZhbHVlQSB8fCAhdmFsdWVCKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiAhIShcbiAgICBpc1ZhbHVlT2JqZWN0KHZhbHVlQSkgJiZcbiAgICBpc1ZhbHVlT2JqZWN0KHZhbHVlQikgJiZcbiAgICB2YWx1ZUEuZXF1YWxzKHZhbHVlQilcbiAgKTtcbn1cblxudmFyIGltdWwgPVxuICB0eXBlb2YgTWF0aC5pbXVsID09PSAnZnVuY3Rpb24nICYmIE1hdGguaW11bCgweGZmZmZmZmZmLCAyKSA9PT0gLTJcbiAgICA/IE1hdGguaW11bFxuICAgIDogZnVuY3Rpb24gaW11bChhLCBiKSB7XG4gICAgICAgIGEgfD0gMDsgLy8gaW50XG4gICAgICAgIGIgfD0gMDsgLy8gaW50XG4gICAgICAgIHZhciBjID0gYSAmIDB4ZmZmZjtcbiAgICAgICAgdmFyIGQgPSBiICYgMHhmZmZmO1xuICAgICAgICAvLyBTaGlmdCBieSAwIGZpeGVzIHRoZSBzaWduIG9uIHRoZSBoaWdoIHBhcnQuXG4gICAgICAgIHJldHVybiAoYyAqIGQgKyAoKCgoYSA+Pj4gMTYpICogZCArIGMgKiAoYiA+Pj4gMTYpKSA8PCAxNikgPj4+IDApKSB8IDA7IC8vIGludFxuICAgICAgfTtcblxuLy8gdjggaGFzIGFuIG9wdGltaXphdGlvbiBmb3Igc3RvcmluZyAzMS1iaXQgc2lnbmVkIG51bWJlcnMuXG4vLyBWYWx1ZXMgd2hpY2ggaGF2ZSBlaXRoZXIgMDAgb3IgMTEgYXMgdGhlIGhpZ2ggb3JkZXIgYml0cyBxdWFsaWZ5LlxuLy8gVGhpcyBmdW5jdGlvbiBkcm9wcyB0aGUgaGlnaGVzdCBvcmRlciBiaXQgaW4gYSBzaWduZWQgbnVtYmVyLCBtYWludGFpbmluZ1xuLy8gdGhlIHNpZ24gYml0LlxuZnVuY3Rpb24gc21pKGkzMikge1xuICByZXR1cm4gKChpMzIgPj4+IDEpICYgMHg0MDAwMDAwMCkgfCAoaTMyICYgMHhiZmZmZmZmZik7XG59XG5cbnZhciBkZWZhdWx0VmFsdWVPZiA9IE9iamVjdC5wcm90b3R5cGUudmFsdWVPZjtcblxuZnVuY3Rpb24gaGFzaChvKSB7XG4gIHN3aXRjaCAodHlwZW9mIG8pIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIC8vIFRoZSBoYXNoIHZhbHVlcyBmb3IgYnVpbHQtaW4gY29uc3RhbnRzIGFyZSBhIDEgdmFsdWUgZm9yIGVhY2ggNS1ieXRlXG4gICAgICAvLyBzaGlmdCByZWdpb24gZXhwZWN0IGZvciB0aGUgZmlyc3QsIHdoaWNoIGVuY29kZXMgdGhlIHZhbHVlLiBUaGlzXG4gICAgICAvLyByZWR1Y2VzIHRoZSBvZGRzIG9mIGEgaGFzaCBjb2xsaXNpb24gZm9yIHRoZXNlIGNvbW1vbiB2YWx1ZXMuXG4gICAgICByZXR1cm4gbyA/IDB4NDIxMDg0MjEgOiAweDQyMTA4NDIwO1xuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaGFzaE51bWJlcihvKTtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIG8ubGVuZ3RoID4gU1RSSU5HX0hBU0hfQ0FDSEVfTUlOX1NUUkxFTlxuICAgICAgICA/IGNhY2hlZEhhc2hTdHJpbmcobylcbiAgICAgICAgOiBoYXNoU3RyaW5nKG8pO1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgaWYgKG8gPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIDB4NDIxMDg0MjI7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG8uaGFzaENvZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRHJvcCBhbnkgaGlnaCBiaXRzIGZyb20gYWNjaWRlbnRhbGx5IGxvbmcgaGFzaCBjb2Rlcy5cbiAgICAgICAgcmV0dXJuIHNtaShvLmhhc2hDb2RlKG8pKTtcbiAgICAgIH1cbiAgICAgIGlmIChvLnZhbHVlT2YgIT09IGRlZmF1bHRWYWx1ZU9mICYmIHR5cGVvZiBvLnZhbHVlT2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbyA9IG8udmFsdWVPZihvKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNoSlNPYmoobyk7XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIHJldHVybiAweDQyMTA4NDIzO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIG8udG9TdHJpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGhhc2hTdHJpbmcoby50b1N0cmluZygpKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgdHlwZSAnICsgdHlwZW9mIG8gKyAnIGNhbm5vdCBiZSBoYXNoZWQuJyk7XG4gIH1cbn1cblxuLy8gQ29tcHJlc3MgYXJiaXRyYXJpbHkgbGFyZ2UgbnVtYmVycyBpbnRvIHNtaSBoYXNoZXMuXG5mdW5jdGlvbiBoYXNoTnVtYmVyKG4pIHtcbiAgaWYgKG4gIT09IG4gfHwgbiA9PT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICB2YXIgaGFzaCA9IG4gfCAwO1xuICBpZiAoaGFzaCAhPT0gbikge1xuICAgIGhhc2ggXj0gbiAqIDB4ZmZmZmZmZmY7XG4gIH1cbiAgd2hpbGUgKG4gPiAweGZmZmZmZmZmKSB7XG4gICAgbiAvPSAweGZmZmZmZmZmO1xuICAgIGhhc2ggXj0gbjtcbiAgfVxuICByZXR1cm4gc21pKGhhc2gpO1xufVxuXG5mdW5jdGlvbiBjYWNoZWRIYXNoU3RyaW5nKHN0cmluZykge1xuICB2YXIgaGFzaGVkID0gc3RyaW5nSGFzaENhY2hlW3N0cmluZ107XG4gIGlmIChoYXNoZWQgPT09IHVuZGVmaW5lZCkge1xuICAgIGhhc2hlZCA9IGhhc2hTdHJpbmcoc3RyaW5nKTtcbiAgICBpZiAoU1RSSU5HX0hBU0hfQ0FDSEVfU0laRSA9PT0gU1RSSU5HX0hBU0hfQ0FDSEVfTUFYX1NJWkUpIHtcbiAgICAgIFNUUklOR19IQVNIX0NBQ0hFX1NJWkUgPSAwO1xuICAgICAgc3RyaW5nSGFzaENhY2hlID0ge307XG4gICAgfVxuICAgIFNUUklOR19IQVNIX0NBQ0hFX1NJWkUrKztcbiAgICBzdHJpbmdIYXNoQ2FjaGVbc3RyaW5nXSA9IGhhc2hlZDtcbiAgfVxuICByZXR1cm4gaGFzaGVkO1xufVxuXG4vLyBodHRwOi8vanNwZXJmLmNvbS9oYXNoaW5nLXN0cmluZ3NcbmZ1bmN0aW9uIGhhc2hTdHJpbmcoc3RyaW5nKSB7XG4gIC8vIFRoaXMgaXMgdGhlIGhhc2ggZnJvbSBKVk1cbiAgLy8gVGhlIGhhc2ggY29kZSBmb3IgYSBzdHJpbmcgaXMgY29tcHV0ZWQgYXNcbiAgLy8gc1swXSAqIDMxIF4gKG4gLSAxKSArIHNbMV0gKiAzMSBeIChuIC0gMikgKyAuLi4gKyBzW24gLSAxXSxcbiAgLy8gd2hlcmUgc1tpXSBpcyB0aGUgaXRoIGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIGFuZCBuIGlzIHRoZSBsZW5ndGggb2ZcbiAgLy8gdGhlIHN0cmluZy4gV2UgXCJtb2RcIiB0aGUgcmVzdWx0IHRvIG1ha2UgaXQgYmV0d2VlbiAwIChpbmNsdXNpdmUpIGFuZCAyXjMxXG4gIC8vIChleGNsdXNpdmUpIGJ5IGRyb3BwaW5nIGhpZ2ggYml0cy5cbiAgdmFyIGhhc2hlZCA9IDA7XG4gIGZvciAodmFyIGlpID0gMDsgaWkgPCBzdHJpbmcubGVuZ3RoOyBpaSsrKSB7XG4gICAgaGFzaGVkID0gKDMxICogaGFzaGVkICsgc3RyaW5nLmNoYXJDb2RlQXQoaWkpKSB8IDA7XG4gIH1cbiAgcmV0dXJuIHNtaShoYXNoZWQpO1xufVxuXG5mdW5jdGlvbiBoYXNoSlNPYmoob2JqKSB7XG4gIHZhciBoYXNoZWQ7XG4gIGlmICh1c2luZ1dlYWtNYXApIHtcbiAgICBoYXNoZWQgPSB3ZWFrTWFwLmdldChvYmopO1xuICAgIGlmIChoYXNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGhhc2hlZDtcbiAgICB9XG4gIH1cblxuICBoYXNoZWQgPSBvYmpbVUlEX0hBU0hfS0VZXTtcbiAgaWYgKGhhc2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGhhc2hlZDtcbiAgfVxuXG4gIGlmICghY2FuRGVmaW5lUHJvcGVydHkpIHtcbiAgICBoYXNoZWQgPSBvYmoucHJvcGVydHlJc0VudW1lcmFibGUgJiYgb2JqLnByb3BlcnR5SXNFbnVtZXJhYmxlW1VJRF9IQVNIX0tFWV07XG4gICAgaWYgKGhhc2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gaGFzaGVkO1xuICAgIH1cblxuICAgIGhhc2hlZCA9IGdldElFTm9kZUhhc2gob2JqKTtcbiAgICBpZiAoaGFzaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBoYXNoZWQ7XG4gICAgfVxuICB9XG5cbiAgaGFzaGVkID0gKytvYmpIYXNoVUlEO1xuICBpZiAob2JqSGFzaFVJRCAmIDB4NDAwMDAwMDApIHtcbiAgICBvYmpIYXNoVUlEID0gMDtcbiAgfVxuXG4gIGlmICh1c2luZ1dlYWtNYXApIHtcbiAgICB3ZWFrTWFwLnNldChvYmosIGhhc2hlZCk7XG4gIH0gZWxzZSBpZiAoaXNFeHRlbnNpYmxlICE9PSB1bmRlZmluZWQgJiYgaXNFeHRlbnNpYmxlKG9iaikgPT09IGZhbHNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb24tZXh0ZW5zaWJsZSBvYmplY3RzIGFyZSBub3QgYWxsb3dlZCBhcyBrZXlzLicpO1xuICB9IGVsc2UgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgVUlEX0hBU0hfS0VZLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogaGFzaGVkLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKFxuICAgIG9iai5wcm9wZXJ0eUlzRW51bWVyYWJsZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgb2JqLnByb3BlcnR5SXNFbnVtZXJhYmxlID09PSBvYmouY29uc3RydWN0b3IucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlXG4gICkge1xuICAgIC8vIFNpbmNlIHdlIGNhbid0IGRlZmluZSBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IG9uIHRoZSBvYmplY3RcbiAgICAvLyB3ZSdsbCBoaWphY2sgb25lIG9mIHRoZSBsZXNzLXVzZWQgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyB0b1xuICAgIC8vIHNhdmUgb3VyIGhhc2ggb24gaXQuIFNpbmNlIHRoaXMgaXMgYSBmdW5jdGlvbiBpdCB3aWxsIG5vdCBzaG93IHVwIGluXG4gICAgLy8gYEpTT04uc3RyaW5naWZ5YCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuXG4gICAgb2JqLnByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYXBwbHkoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGFyZ3VtZW50c1xuICAgICAgKTtcbiAgICB9O1xuICAgIG9iai5wcm9wZXJ0eUlzRW51bWVyYWJsZVtVSURfSEFTSF9LRVldID0gaGFzaGVkO1xuICB9IGVsc2UgaWYgKG9iai5ub2RlVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBjb3VsZG4ndCBnZXQgdGhlIElFIGB1bmlxdWVJRGAgdG8gdXNlIGFzIGEgaGFzaFxuICAgIC8vIGFuZCB3ZSBjb3VsZG4ndCB1c2UgYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSB0byBleHBsb2l0IHRoZVxuICAgIC8vIGRvbnRFbnVtIGJ1ZyBzbyB3ZSBzaW1wbHkgYWRkIHRoZSBgVUlEX0hBU0hfS0VZYCBvbiB0aGUgbm9kZVxuICAgIC8vIGl0c2VsZi5cbiAgICBvYmpbVUlEX0hBU0hfS0VZXSA9IGhhc2hlZDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBzZXQgYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBvbiBvYmplY3QuJyk7XG4gIH1cblxuICByZXR1cm4gaGFzaGVkO1xufVxuXG4vLyBHZXQgcmVmZXJlbmNlcyB0byBFUzUgb2JqZWN0IG1ldGhvZHMuXG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuLy8gVHJ1ZSBpZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgd29ya3MgYXMgZXhwZWN0ZWQuIElFOCBmYWlscyB0aGlzIHRlc3QuXG52YXIgY2FuRGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnQCcsIHt9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSkoKTtcblxuLy8gSUUgaGFzIGEgYHVuaXF1ZUlEYCBwcm9wZXJ0eSBvbiBET00gbm9kZXMuIFdlIGNhbiBjb25zdHJ1Y3QgdGhlIGhhc2ggZnJvbSBpdFxuLy8gYW5kIGF2b2lkIG1lbW9yeSBsZWFrcyBmcm9tIHRoZSBJRSBjbG9uZU5vZGUgYnVnLlxuZnVuY3Rpb24gZ2V0SUVOb2RlSGFzaChub2RlKSB7XG4gIGlmIChub2RlICYmIG5vZGUubm9kZVR5cGUgPiAwKSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIDE6IC8vIEVsZW1lbnRcbiAgICAgICAgcmV0dXJuIG5vZGUudW5pcXVlSUQ7XG4gICAgICBjYXNlIDk6IC8vIERvY3VtZW50XG4gICAgICAgIHJldHVybiBub2RlLmRvY3VtZW50RWxlbWVudCAmJiBub2RlLmRvY3VtZW50RWxlbWVudC51bmlxdWVJRDtcbiAgICB9XG4gIH1cbn1cblxuLy8gSWYgcG9zc2libGUsIHVzZSBhIFdlYWtNYXAuXG52YXIgdXNpbmdXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbic7XG52YXIgd2Vha01hcDtcbmlmICh1c2luZ1dlYWtNYXApIHtcbiAgd2Vha01hcCA9IG5ldyBXZWFrTWFwKCk7XG59XG5cbnZhciBvYmpIYXNoVUlEID0gMDtcblxudmFyIFVJRF9IQVNIX0tFWSA9ICdfX2ltbXV0YWJsZWhhc2hfXyc7XG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJykge1xuICBVSURfSEFTSF9LRVkgPSBTeW1ib2woVUlEX0hBU0hfS0VZKTtcbn1cblxudmFyIFNUUklOR19IQVNIX0NBQ0hFX01JTl9TVFJMRU4gPSAxNjtcbnZhciBTVFJJTkdfSEFTSF9DQUNIRV9NQVhfU0laRSA9IDI1NTtcbnZhciBTVFJJTkdfSEFTSF9DQUNIRV9TSVpFID0gMDtcbnZhciBzdHJpbmdIYXNoQ2FjaGUgPSB7fTtcblxudmFyIFRvS2V5ZWRTZXF1ZW5jZSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEtleWVkU2VxJCQxKSB7XG4gIGZ1bmN0aW9uIFRvS2V5ZWRTZXF1ZW5jZShpbmRleGVkLCB1c2VLZXlzKSB7XG4gICAgdGhpcy5faXRlciA9IGluZGV4ZWQ7XG4gICAgdGhpcy5fdXNlS2V5cyA9IHVzZUtleXM7XG4gICAgdGhpcy5zaXplID0gaW5kZXhlZC5zaXplO1xuICB9XG5cbiAgaWYgKCBLZXllZFNlcSQkMSApIFRvS2V5ZWRTZXF1ZW5jZS5fX3Byb3RvX18gPSBLZXllZFNlcSQkMTtcbiAgVG9LZXllZFNlcXVlbmNlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEtleWVkU2VxJCQxICYmIEtleWVkU2VxJCQxLnByb3RvdHlwZSApO1xuICBUb0tleWVkU2VxdWVuY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVG9LZXllZFNlcXVlbmNlO1xuXG4gIFRvS2V5ZWRTZXF1ZW5jZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChrZXksIG5vdFNldFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZXIuZ2V0KGtleSwgbm90U2V0VmFsdWUpO1xuICB9O1xuXG4gIFRvS2V5ZWRTZXF1ZW5jZS5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlci5oYXMoa2V5KTtcbiAgfTtcblxuICBUb0tleWVkU2VxdWVuY2UucHJvdG90eXBlLnZhbHVlU2VxID0gZnVuY3Rpb24gdmFsdWVTZXEgKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVyLnZhbHVlU2VxKCk7XG4gIH07XG5cbiAgVG9LZXllZFNlcXVlbmNlLnByb3RvdHlwZS5yZXZlcnNlID0gZnVuY3Rpb24gcmV2ZXJzZSAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmV2ZXJzZWRTZXF1ZW5jZSA9IHJldmVyc2VGYWN0b3J5KHRoaXMsIHRydWUpO1xuICAgIGlmICghdGhpcy5fdXNlS2V5cykge1xuICAgICAgcmV2ZXJzZWRTZXF1ZW5jZS52YWx1ZVNlcSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS5faXRlci50b1NlcSgpLnJldmVyc2UoKTsgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJldmVyc2VkU2VxdWVuY2U7XG4gIH07XG5cbiAgVG9LZXllZFNlcXVlbmNlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAgKG1hcHBlciwgY29udGV4dCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIG1hcHBlZFNlcXVlbmNlID0gbWFwRmFjdG9yeSh0aGlzLCBtYXBwZXIsIGNvbnRleHQpO1xuICAgIGlmICghdGhpcy5fdXNlS2V5cykge1xuICAgICAgbWFwcGVkU2VxdWVuY2UudmFsdWVTZXEgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuX2l0ZXIudG9TZXEoKS5tYXAobWFwcGVyLCBjb250ZXh0KTsgfTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcHBlZFNlcXVlbmNlO1xuICB9O1xuXG4gIFRvS2V5ZWRTZXF1ZW5jZS5wcm90b3R5cGUuX19pdGVyYXRlID0gZnVuY3Rpb24gX19pdGVyYXRlIChmbiwgcmV2ZXJzZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgcmV0dXJuIHRoaXMuX2l0ZXIuX19pdGVyYXRlKGZ1bmN0aW9uICh2LCBrKSB7IHJldHVybiBmbih2LCBrLCB0aGlzJDEpOyB9LCByZXZlcnNlKTtcbiAgfTtcblxuICBUb0tleWVkU2VxdWVuY2UucHJvdG90eXBlLl9faXRlcmF0b3IgPSBmdW5jdGlvbiBfX2l0ZXJhdG9yICh0eXBlLCByZXZlcnNlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZXIuX19pdGVyYXRvcih0eXBlLCByZXZlcnNlKTtcbiAgfTtcblxuICByZXR1cm4gVG9LZXllZFNlcXVlbmNlO1xufShLZXllZFNlcSkpO1xuVG9LZXllZFNlcXVlbmNlLnByb3RvdHlwZVtJU19PUkRFUkVEX1NZTUJPTF0gPSB0cnVlO1xuXG52YXIgVG9JbmRleGVkU2VxdWVuY2UgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChJbmRleGVkU2VxJCQxKSB7XG4gIGZ1bmN0aW9uIFRvSW5kZXhlZFNlcXVlbmNlKGl0ZXIpIHtcbiAgICB0aGlzLl9pdGVyID0gaXRlcjtcbiAgICB0aGlzLnNpemUgPSBpdGVyLnNpemU7XG4gIH1cblxuICBpZiAoIEluZGV4ZWRTZXEkJDEgKSBUb0luZGV4ZWRTZXF1ZW5jZS5fX3Byb3RvX18gPSBJbmRleGVkU2VxJCQxO1xuICBUb0luZGV4ZWRTZXF1ZW5jZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBJbmRleGVkU2VxJCQxICYmIEluZGV4ZWRTZXEkJDEucHJvdG90eXBlICk7XG4gIFRvSW5kZXhlZFNlcXVlbmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRvSW5kZXhlZFNlcXVlbmNlO1xuXG4gIFRvSW5kZXhlZFNlcXVlbmNlLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9pdGVyLmluY2x1ZGVzKHZhbHVlKTtcbiAgfTtcblxuICBUb0luZGV4ZWRTZXF1ZW5jZS5wcm90b3R5cGUuX19pdGVyYXRlID0gZnVuY3Rpb24gX19pdGVyYXRlIChmbiwgcmV2ZXJzZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGkgPSAwO1xuICAgIHJldmVyc2UgJiYgZW5zdXJlU2l6ZSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5faXRlci5fX2l0ZXJhdGUoXG4gICAgICBmdW5jdGlvbiAodikgeyByZXR1cm4gZm4odiwgcmV2ZXJzZSA/IHRoaXMkMS5zaXplIC0gKytpIDogaSsrLCB0aGlzJDEpOyB9LFxuICAgICAgcmV2ZXJzZVxuICAgICk7XG4gIH07XG5cbiAgVG9JbmRleGVkU2VxdWVuY2UucHJvdG90eXBlLl9faXRlcmF0b3IgPSBmdW5jdGlvbiBfX2l0ZXJhdG9yICh0eXBlLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgaXRlcmF0b3IgPSB0aGlzLl9pdGVyLl9faXRlcmF0b3IoSVRFUkFURV9WQUxVRVMsIHJldmVyc2UpO1xuICAgIHZhciBpID0gMDtcbiAgICByZXZlcnNlICYmIGVuc3VyZVNpemUodGhpcyk7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RlcCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIHJldHVybiBzdGVwLmRvbmVcbiAgICAgICAgPyBzdGVwXG4gICAgICAgIDogaXRlcmF0b3JWYWx1ZShcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICByZXZlcnNlID8gdGhpcyQxLnNpemUgLSArK2kgOiBpKyssXG4gICAgICAgICAgICBzdGVwLnZhbHVlLFxuICAgICAgICAgICAgc3RlcFxuICAgICAgICAgICk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRvSW5kZXhlZFNlcXVlbmNlO1xufShJbmRleGVkU2VxKSk7XG5cbnZhciBUb1NldFNlcXVlbmNlID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoU2V0U2VxJCQxKSB7XG4gIGZ1bmN0aW9uIFRvU2V0U2VxdWVuY2UoaXRlcikge1xuICAgIHRoaXMuX2l0ZXIgPSBpdGVyO1xuICAgIHRoaXMuc2l6ZSA9IGl0ZXIuc2l6ZTtcbiAgfVxuXG4gIGlmICggU2V0U2VxJCQxICkgVG9TZXRTZXF1ZW5jZS5fX3Byb3RvX18gPSBTZXRTZXEkJDE7XG4gIFRvU2V0U2VxdWVuY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggU2V0U2VxJCQxICYmIFNldFNlcSQkMS5wcm90b3R5cGUgKTtcbiAgVG9TZXRTZXF1ZW5jZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUb1NldFNlcXVlbmNlO1xuXG4gIFRvU2V0U2VxdWVuY2UucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIGhhcyAoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZXIuaW5jbHVkZXMoa2V5KTtcbiAgfTtcblxuICBUb1NldFNlcXVlbmNlLnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy5faXRlci5fX2l0ZXJhdGUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGZuKHYsIHYsIHRoaXMkMSk7IH0sIHJldmVyc2UpO1xuICB9O1xuXG4gIFRvU2V0U2VxdWVuY2UucHJvdG90eXBlLl9faXRlcmF0b3IgPSBmdW5jdGlvbiBfX2l0ZXJhdG9yICh0eXBlLCByZXZlcnNlKSB7XG4gICAgdmFyIGl0ZXJhdG9yID0gdGhpcy5faXRlci5fX2l0ZXJhdG9yKElURVJBVEVfVkFMVUVTLCByZXZlcnNlKTtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGVwID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgcmV0dXJuIHN0ZXAuZG9uZVxuICAgICAgICA/IHN0ZXBcbiAgICAgICAgOiBpdGVyYXRvclZhbHVlKHR5cGUsIHN0ZXAudmFsdWUsIHN0ZXAudmFsdWUsIHN0ZXApO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBUb1NldFNlcXVlbmNlO1xufShTZXRTZXEpKTtcblxudmFyIEZyb21FbnRyaWVzU2VxdWVuY2UgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChLZXllZFNlcSQkMSkge1xuICBmdW5jdGlvbiBGcm9tRW50cmllc1NlcXVlbmNlKGVudHJpZXMpIHtcbiAgICB0aGlzLl9pdGVyID0gZW50cmllcztcbiAgICB0aGlzLnNpemUgPSBlbnRyaWVzLnNpemU7XG4gIH1cblxuICBpZiAoIEtleWVkU2VxJCQxICkgRnJvbUVudHJpZXNTZXF1ZW5jZS5fX3Byb3RvX18gPSBLZXllZFNlcSQkMTtcbiAgRnJvbUVudHJpZXNTZXF1ZW5jZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBLZXllZFNlcSQkMSAmJiBLZXllZFNlcSQkMS5wcm90b3R5cGUgKTtcbiAgRnJvbUVudHJpZXNTZXF1ZW5jZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGcm9tRW50cmllc1NlcXVlbmNlO1xuXG4gIEZyb21FbnRyaWVzU2VxdWVuY2UucHJvdG90eXBlLmVudHJ5U2VxID0gZnVuY3Rpb24gZW50cnlTZXEgKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVyLnRvU2VxKCk7XG4gIH07XG5cbiAgRnJvbUVudHJpZXNTZXF1ZW5jZS5wcm90b3R5cGUuX19pdGVyYXRlID0gZnVuY3Rpb24gX19pdGVyYXRlIChmbiwgcmV2ZXJzZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgcmV0dXJuIHRoaXMuX2l0ZXIuX19pdGVyYXRlKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgLy8gQ2hlY2sgaWYgZW50cnkgZXhpc3RzIGZpcnN0IHNvIGFycmF5IGFjY2VzcyBkb2Vzbid0IHRocm93IGZvciBob2xlc1xuICAgICAgLy8gaW4gdGhlIHBhcmVudCBpdGVyYXRpb24uXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgdmFsaWRhdGVFbnRyeShlbnRyeSk7XG4gICAgICAgIHZhciBpbmRleGVkQ29sbGVjdGlvbiA9IGlzQ29sbGVjdGlvbihlbnRyeSk7XG4gICAgICAgIHJldHVybiBmbihcbiAgICAgICAgICBpbmRleGVkQ29sbGVjdGlvbiA/IGVudHJ5LmdldCgxKSA6IGVudHJ5WzFdLFxuICAgICAgICAgIGluZGV4ZWRDb2xsZWN0aW9uID8gZW50cnkuZ2V0KDApIDogZW50cnlbMF0sXG4gICAgICAgICAgdGhpcyQxXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSwgcmV2ZXJzZSk7XG4gIH07XG5cbiAgRnJvbUVudHJpZXNTZXF1ZW5jZS5wcm90b3R5cGUuX19pdGVyYXRvciA9IGZ1bmN0aW9uIF9faXRlcmF0b3IgKHR5cGUsIHJldmVyc2UpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSB0aGlzLl9pdGVyLl9faXRlcmF0b3IoSVRFUkFURV9WQUxVRVMsIHJldmVyc2UpO1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHN0ZXAgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIGlmIChzdGVwLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAvLyBDaGVjayBpZiBlbnRyeSBleGlzdHMgZmlyc3Qgc28gYXJyYXkgYWNjZXNzIGRvZXNuJ3QgdGhyb3cgZm9yIGhvbGVzXG4gICAgICAgIC8vIGluIHRoZSBwYXJlbnQgaXRlcmF0aW9uLlxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YWxpZGF0ZUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB2YXIgaW5kZXhlZENvbGxlY3Rpb24gPSBpc0NvbGxlY3Rpb24oZW50cnkpO1xuICAgICAgICAgIHJldHVybiBpdGVyYXRvclZhbHVlKFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGluZGV4ZWRDb2xsZWN0aW9uID8gZW50cnkuZ2V0KDApIDogZW50cnlbMF0sXG4gICAgICAgICAgICBpbmRleGVkQ29sbGVjdGlvbiA/IGVudHJ5LmdldCgxKSA6IGVudHJ5WzFdLFxuICAgICAgICAgICAgc3RlcFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gRnJvbUVudHJpZXNTZXF1ZW5jZTtcbn0oS2V5ZWRTZXEpKTtcblxuVG9JbmRleGVkU2VxdWVuY2UucHJvdG90eXBlLmNhY2hlUmVzdWx0ID0gVG9LZXllZFNlcXVlbmNlLnByb3RvdHlwZS5jYWNoZVJlc3VsdCA9IFRvU2V0U2VxdWVuY2UucHJvdG90eXBlLmNhY2hlUmVzdWx0ID0gRnJvbUVudHJpZXNTZXF1ZW5jZS5wcm90b3R5cGUuY2FjaGVSZXN1bHQgPSBjYWNoZVJlc3VsdFRocm91Z2g7XG5cbmZ1bmN0aW9uIGZsaXBGYWN0b3J5KGNvbGxlY3Rpb24pIHtcbiAgdmFyIGZsaXBTZXF1ZW5jZSA9IG1ha2VTZXF1ZW5jZShjb2xsZWN0aW9uKTtcbiAgZmxpcFNlcXVlbmNlLl9pdGVyID0gY29sbGVjdGlvbjtcbiAgZmxpcFNlcXVlbmNlLnNpemUgPSBjb2xsZWN0aW9uLnNpemU7XG4gIGZsaXBTZXF1ZW5jZS5mbGlwID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY29sbGVjdGlvbjsgfTtcbiAgZmxpcFNlcXVlbmNlLnJldmVyc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmV2ZXJzZWRTZXF1ZW5jZSA9IGNvbGxlY3Rpb24ucmV2ZXJzZS5hcHBseSh0aGlzKTsgLy8gc3VwZXIucmV2ZXJzZSgpXG4gICAgcmV2ZXJzZWRTZXF1ZW5jZS5mbGlwID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY29sbGVjdGlvbi5yZXZlcnNlKCk7IH07XG4gICAgcmV0dXJuIHJldmVyc2VkU2VxdWVuY2U7XG4gIH07XG4gIGZsaXBTZXF1ZW5jZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBjb2xsZWN0aW9uLmluY2x1ZGVzKGtleSk7IH07XG4gIGZsaXBTZXF1ZW5jZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGNvbGxlY3Rpb24uaGFzKGtleSk7IH07XG4gIGZsaXBTZXF1ZW5jZS5jYWNoZVJlc3VsdCA9IGNhY2hlUmVzdWx0VGhyb3VnaDtcbiAgZmxpcFNlcXVlbmNlLl9faXRlcmF0ZVVuY2FjaGVkID0gZnVuY3Rpb24oZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHJldHVybiBjb2xsZWN0aW9uLl9faXRlcmF0ZShmdW5jdGlvbiAodiwgaykgeyByZXR1cm4gZm4oaywgdiwgdGhpcyQxKSAhPT0gZmFsc2U7IH0sIHJldmVyc2UpO1xuICB9O1xuICBmbGlwU2VxdWVuY2UuX19pdGVyYXRvclVuY2FjaGVkID0gZnVuY3Rpb24odHlwZSwgcmV2ZXJzZSkge1xuICAgIGlmICh0eXBlID09PSBJVEVSQVRFX0VOVFJJRVMpIHtcbiAgICAgIHZhciBpdGVyYXRvciA9IGNvbGxlY3Rpb24uX19pdGVyYXRvcih0eXBlLCByZXZlcnNlKTtcbiAgICAgIHJldHVybiBuZXcgSXRlcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RlcCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgaWYgKCFzdGVwLmRvbmUpIHtcbiAgICAgICAgICB2YXIgayA9IHN0ZXAudmFsdWVbMF07XG4gICAgICAgICAgc3RlcC52YWx1ZVswXSA9IHN0ZXAudmFsdWVbMV07XG4gICAgICAgICAgc3RlcC52YWx1ZVsxXSA9IGs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3Rpb24uX19pdGVyYXRvcihcbiAgICAgIHR5cGUgPT09IElURVJBVEVfVkFMVUVTID8gSVRFUkFURV9LRVlTIDogSVRFUkFURV9WQUxVRVMsXG4gICAgICByZXZlcnNlXG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIGZsaXBTZXF1ZW5jZTtcbn1cblxuZnVuY3Rpb24gbWFwRmFjdG9yeShjb2xsZWN0aW9uLCBtYXBwZXIsIGNvbnRleHQpIHtcbiAgdmFyIG1hcHBlZFNlcXVlbmNlID0gbWFrZVNlcXVlbmNlKGNvbGxlY3Rpb24pO1xuICBtYXBwZWRTZXF1ZW5jZS5zaXplID0gY29sbGVjdGlvbi5zaXplO1xuICBtYXBwZWRTZXF1ZW5jZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBjb2xsZWN0aW9uLmhhcyhrZXkpOyB9O1xuICBtYXBwZWRTZXF1ZW5jZS5nZXQgPSBmdW5jdGlvbiAoa2V5LCBub3RTZXRWYWx1ZSkge1xuICAgIHZhciB2ID0gY29sbGVjdGlvbi5nZXQoa2V5LCBOT1RfU0VUKTtcbiAgICByZXR1cm4gdiA9PT0gTk9UX1NFVFxuICAgICAgPyBub3RTZXRWYWx1ZVxuICAgICAgOiBtYXBwZXIuY2FsbChjb250ZXh0LCB2LCBrZXksIGNvbGxlY3Rpb24pO1xuICB9O1xuICBtYXBwZWRTZXF1ZW5jZS5fX2l0ZXJhdGVVbmNhY2hlZCA9IGZ1bmN0aW9uKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICByZXR1cm4gY29sbGVjdGlvbi5fX2l0ZXJhdGUoXG4gICAgICBmdW5jdGlvbiAodiwgaywgYykgeyByZXR1cm4gZm4obWFwcGVyLmNhbGwoY29udGV4dCwgdiwgaywgYyksIGssIHRoaXMkMSkgIT09IGZhbHNlOyB9LFxuICAgICAgcmV2ZXJzZVxuICAgICk7XG4gIH07XG4gIG1hcHBlZFNlcXVlbmNlLl9faXRlcmF0b3JVbmNhY2hlZCA9IGZ1bmN0aW9uKHR5cGUsIHJldmVyc2UpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSBjb2xsZWN0aW9uLl9faXRlcmF0b3IoSVRFUkFURV9FTlRSSUVTLCByZXZlcnNlKTtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGVwID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgaWYgKHN0ZXAuZG9uZSkge1xuICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgIH1cbiAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICB2YXIga2V5ID0gZW50cnlbMF07XG4gICAgICByZXR1cm4gaXRlcmF0b3JWYWx1ZShcbiAgICAgICAgdHlwZSxcbiAgICAgICAga2V5LFxuICAgICAgICBtYXBwZXIuY2FsbChjb250ZXh0LCBlbnRyeVsxXSwga2V5LCBjb2xsZWN0aW9uKSxcbiAgICAgICAgc3RlcFxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG1hcHBlZFNlcXVlbmNlO1xufVxuXG5mdW5jdGlvbiByZXZlcnNlRmFjdG9yeShjb2xsZWN0aW9uLCB1c2VLZXlzKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciByZXZlcnNlZFNlcXVlbmNlID0gbWFrZVNlcXVlbmNlKGNvbGxlY3Rpb24pO1xuICByZXZlcnNlZFNlcXVlbmNlLl9pdGVyID0gY29sbGVjdGlvbjtcbiAgcmV2ZXJzZWRTZXF1ZW5jZS5zaXplID0gY29sbGVjdGlvbi5zaXplO1xuICByZXZlcnNlZFNlcXVlbmNlLnJldmVyc2UgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2xsZWN0aW9uOyB9O1xuICBpZiAoY29sbGVjdGlvbi5mbGlwKSB7XG4gICAgcmV2ZXJzZWRTZXF1ZW5jZS5mbGlwID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZmxpcFNlcXVlbmNlID0gZmxpcEZhY3RvcnkoY29sbGVjdGlvbik7XG4gICAgICBmbGlwU2VxdWVuY2UucmV2ZXJzZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbGxlY3Rpb24uZmxpcCgpOyB9O1xuICAgICAgcmV0dXJuIGZsaXBTZXF1ZW5jZTtcbiAgICB9O1xuICB9XG4gIHJldmVyc2VkU2VxdWVuY2UuZ2V0ID0gZnVuY3Rpb24gKGtleSwgbm90U2V0VmFsdWUpIHsgcmV0dXJuIGNvbGxlY3Rpb24uZ2V0KHVzZUtleXMgPyBrZXkgOiAtMSAtIGtleSwgbm90U2V0VmFsdWUpOyB9O1xuICByZXZlcnNlZFNlcXVlbmNlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGNvbGxlY3Rpb24uaGFzKHVzZUtleXMgPyBrZXkgOiAtMSAtIGtleSk7IH07XG4gIHJldmVyc2VkU2VxdWVuY2UuaW5jbHVkZXMgPSBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGNvbGxlY3Rpb24uaW5jbHVkZXModmFsdWUpOyB9O1xuICByZXZlcnNlZFNlcXVlbmNlLmNhY2hlUmVzdWx0ID0gY2FjaGVSZXN1bHRUaHJvdWdoO1xuICByZXZlcnNlZFNlcXVlbmNlLl9faXRlcmF0ZSA9IGZ1bmN0aW9uKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgaSA9IDA7XG4gICAgcmV2ZXJzZSAmJiBlbnN1cmVTaXplKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiBjb2xsZWN0aW9uLl9faXRlcmF0ZShcbiAgICAgIGZ1bmN0aW9uICh2LCBrKSB7IHJldHVybiBmbih2LCB1c2VLZXlzID8gayA6IHJldmVyc2UgPyB0aGlzJDEuc2l6ZSAtICsraSA6IGkrKywgdGhpcyQxKTsgfSxcbiAgICAgICFyZXZlcnNlXG4gICAgKTtcbiAgfTtcbiAgcmV2ZXJzZWRTZXF1ZW5jZS5fX2l0ZXJhdG9yID0gZnVuY3Rpb24gKHR5cGUsIHJldmVyc2UpIHtcbiAgICB2YXIgaSA9IDA7XG4gICAgcmV2ZXJzZSAmJiBlbnN1cmVTaXplKGNvbGxlY3Rpb24pO1xuICAgIHZhciBpdGVyYXRvciA9IGNvbGxlY3Rpb24uX19pdGVyYXRvcihJVEVSQVRFX0VOVFJJRVMsICFyZXZlcnNlKTtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGVwID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgaWYgKHN0ZXAuZG9uZSkge1xuICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgIH1cbiAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICByZXR1cm4gaXRlcmF0b3JWYWx1ZShcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdXNlS2V5cyA/IGVudHJ5WzBdIDogcmV2ZXJzZSA/IHRoaXMkMS5zaXplIC0gKytpIDogaSsrLFxuICAgICAgICBlbnRyeVsxXSxcbiAgICAgICAgc3RlcFxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHJldmVyc2VkU2VxdWVuY2U7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckZhY3RvcnkoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBjb250ZXh0LCB1c2VLZXlzKSB7XG4gIHZhciBmaWx0ZXJTZXF1ZW5jZSA9IG1ha2VTZXF1ZW5jZShjb2xsZWN0aW9uKTtcbiAgaWYgKHVzZUtleXMpIHtcbiAgICBmaWx0ZXJTZXF1ZW5jZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgdiA9IGNvbGxlY3Rpb24uZ2V0KGtleSwgTk9UX1NFVCk7XG4gICAgICByZXR1cm4gdiAhPT0gTk9UX1NFVCAmJiAhIXByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHYsIGtleSwgY29sbGVjdGlvbik7XG4gICAgfTtcbiAgICBmaWx0ZXJTZXF1ZW5jZS5nZXQgPSBmdW5jdGlvbiAoa2V5LCBub3RTZXRWYWx1ZSkge1xuICAgICAgdmFyIHYgPSBjb2xsZWN0aW9uLmdldChrZXksIE5PVF9TRVQpO1xuICAgICAgcmV0dXJuIHYgIT09IE5PVF9TRVQgJiYgcHJlZGljYXRlLmNhbGwoY29udGV4dCwgdiwga2V5LCBjb2xsZWN0aW9uKVxuICAgICAgICA/IHZcbiAgICAgICAgOiBub3RTZXRWYWx1ZTtcbiAgICB9O1xuICB9XG4gIGZpbHRlclNlcXVlbmNlLl9faXRlcmF0ZVVuY2FjaGVkID0gZnVuY3Rpb24oZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICBjb2xsZWN0aW9uLl9faXRlcmF0ZShmdW5jdGlvbiAodiwgaywgYykge1xuICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHYsIGssIGMpKSB7XG4gICAgICAgIGl0ZXJhdGlvbnMrKztcbiAgICAgICAgcmV0dXJuIGZuKHYsIHVzZUtleXMgPyBrIDogaXRlcmF0aW9ucyAtIDEsIHRoaXMkMSk7XG4gICAgICB9XG4gICAgfSwgcmV2ZXJzZSk7XG4gICAgcmV0dXJuIGl0ZXJhdGlvbnM7XG4gIH07XG4gIGZpbHRlclNlcXVlbmNlLl9faXRlcmF0b3JVbmNhY2hlZCA9IGZ1bmN0aW9uKHR5cGUsIHJldmVyc2UpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSBjb2xsZWN0aW9uLl9faXRlcmF0b3IoSVRFUkFURV9FTlRSSUVTLCByZXZlcnNlKTtcbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgc3RlcCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgaWYgKHN0ZXAuZG9uZSkge1xuICAgICAgICAgIHJldHVybiBzdGVwO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgIHZhciBrZXkgPSBlbnRyeVswXTtcbiAgICAgICAgdmFyIHZhbHVlID0gZW50cnlbMV07XG4gICAgICAgIGlmIChwcmVkaWNhdGUuY2FsbChjb250ZXh0LCB2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSkge1xuICAgICAgICAgIHJldHVybiBpdGVyYXRvclZhbHVlKHR5cGUsIHVzZUtleXMgPyBrZXkgOiBpdGVyYXRpb25zKyssIHZhbHVlLCBzdGVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gZmlsdGVyU2VxdWVuY2U7XG59XG5cbmZ1bmN0aW9uIGNvdW50QnlGYWN0b3J5KGNvbGxlY3Rpb24sIGdyb3VwZXIsIGNvbnRleHQpIHtcbiAgdmFyIGdyb3VwcyA9IE1hcCgpLmFzTXV0YWJsZSgpO1xuICBjb2xsZWN0aW9uLl9faXRlcmF0ZShmdW5jdGlvbiAodiwgaykge1xuICAgIGdyb3Vwcy51cGRhdGUoZ3JvdXBlci5jYWxsKGNvbnRleHQsIHYsIGssIGNvbGxlY3Rpb24pLCAwLCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSArIDE7IH0pO1xuICB9KTtcbiAgcmV0dXJuIGdyb3Vwcy5hc0ltbXV0YWJsZSgpO1xufVxuXG5mdW5jdGlvbiBncm91cEJ5RmFjdG9yeShjb2xsZWN0aW9uLCBncm91cGVyLCBjb250ZXh0KSB7XG4gIHZhciBpc0tleWVkSXRlciA9IGlzS2V5ZWQoY29sbGVjdGlvbik7XG4gIHZhciBncm91cHMgPSAoaXNPcmRlcmVkKGNvbGxlY3Rpb24pID8gT3JkZXJlZE1hcCgpIDogTWFwKCkpLmFzTXV0YWJsZSgpO1xuICBjb2xsZWN0aW9uLl9faXRlcmF0ZShmdW5jdGlvbiAodiwgaykge1xuICAgIGdyb3Vwcy51cGRhdGUoXG4gICAgICBncm91cGVyLmNhbGwoY29udGV4dCwgdiwgaywgY29sbGVjdGlvbiksXG4gICAgICBmdW5jdGlvbiAoYSkgeyByZXR1cm4gKChhID0gYSB8fCBbXSksIGEucHVzaChpc0tleWVkSXRlciA/IFtrLCB2XSA6IHYpLCBhKTsgfVxuICAgICk7XG4gIH0pO1xuICB2YXIgY29lcmNlID0gY29sbGVjdGlvbkNsYXNzKGNvbGxlY3Rpb24pO1xuICByZXR1cm4gZ3JvdXBzLm1hcChmdW5jdGlvbiAoYXJyKSB7IHJldHVybiByZWlmeShjb2xsZWN0aW9uLCBjb2VyY2UoYXJyKSk7IH0pLmFzSW1tdXRhYmxlKCk7XG59XG5cbmZ1bmN0aW9uIHNsaWNlRmFjdG9yeShjb2xsZWN0aW9uLCBiZWdpbiwgZW5kLCB1c2VLZXlzKSB7XG4gIHZhciBvcmlnaW5hbFNpemUgPSBjb2xsZWN0aW9uLnNpemU7XG5cbiAgaWYgKHdob2xlU2xpY2UoYmVnaW4sIGVuZCwgb3JpZ2luYWxTaXplKSkge1xuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9XG5cbiAgdmFyIHJlc29sdmVkQmVnaW4gPSByZXNvbHZlQmVnaW4oYmVnaW4sIG9yaWdpbmFsU2l6ZSk7XG4gIHZhciByZXNvbHZlZEVuZCA9IHJlc29sdmVFbmQoZW5kLCBvcmlnaW5hbFNpemUpO1xuXG4gIC8vIGJlZ2luIG9yIGVuZCB3aWxsIGJlIE5hTiBpZiB0aGV5IHdlcmUgcHJvdmlkZWQgYXMgbmVnYXRpdmUgbnVtYmVycyBhbmRcbiAgLy8gdGhpcyBjb2xsZWN0aW9uJ3Mgc2l6ZSBpcyB1bmtub3duLiBJbiB0aGF0IGNhc2UsIGNhY2hlIGZpcnN0IHNvIHRoZXJlIGlzXG4gIC8vIGEga25vd24gc2l6ZSBhbmQgdGhlc2UgZG8gbm90IHJlc29sdmUgdG8gTmFOLlxuICBpZiAocmVzb2x2ZWRCZWdpbiAhPT0gcmVzb2x2ZWRCZWdpbiB8fCByZXNvbHZlZEVuZCAhPT0gcmVzb2x2ZWRFbmQpIHtcbiAgICByZXR1cm4gc2xpY2VGYWN0b3J5KGNvbGxlY3Rpb24udG9TZXEoKS5jYWNoZVJlc3VsdCgpLCBiZWdpbiwgZW5kLCB1c2VLZXlzKTtcbiAgfVxuXG4gIC8vIE5vdGU6IHJlc29sdmVkRW5kIGlzIHVuZGVmaW5lZCB3aGVuIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSdzIGxlbmd0aCBpc1xuICAvLyB1bmtub3duIGFuZCB0aGlzIHNsaWNlIGRpZCBub3Qgc3VwcGx5IGFuIGVuZCBhbmQgc2hvdWxkIGNvbnRhaW4gYWxsXG4gIC8vIGVsZW1lbnRzIGFmdGVyIHJlc29sdmVkQmVnaW4uXG4gIC8vIEluIHRoYXQgY2FzZSwgcmVzb2x2ZWRTaXplIHdpbGwgYmUgTmFOIGFuZCBzbGljZVNpemUgd2lsbCByZW1haW4gdW5kZWZpbmVkLlxuICB2YXIgcmVzb2x2ZWRTaXplID0gcmVzb2x2ZWRFbmQgLSByZXNvbHZlZEJlZ2luO1xuICB2YXIgc2xpY2VTaXplO1xuICBpZiAocmVzb2x2ZWRTaXplID09PSByZXNvbHZlZFNpemUpIHtcbiAgICBzbGljZVNpemUgPSByZXNvbHZlZFNpemUgPCAwID8gMCA6IHJlc29sdmVkU2l6ZTtcbiAgfVxuXG4gIHZhciBzbGljZVNlcSA9IG1ha2VTZXF1ZW5jZShjb2xsZWN0aW9uKTtcblxuICAvLyBJZiBjb2xsZWN0aW9uLnNpemUgaXMgdW5kZWZpbmVkLCB0aGUgc2l6ZSBvZiB0aGUgcmVhbGl6ZWQgc2xpY2VTZXEgaXNcbiAgLy8gdW5rbm93biBhdCB0aGlzIHBvaW50IHVubGVzcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHNsaWNlIGlzIDBcbiAgc2xpY2VTZXEuc2l6ZSA9XG4gICAgc2xpY2VTaXplID09PSAwID8gc2xpY2VTaXplIDogKGNvbGxlY3Rpb24uc2l6ZSAmJiBzbGljZVNpemUpIHx8IHVuZGVmaW5lZDtcblxuICBpZiAoIXVzZUtleXMgJiYgaXNTZXEoY29sbGVjdGlvbikgJiYgc2xpY2VTaXplID49IDApIHtcbiAgICBzbGljZVNlcS5nZXQgPSBmdW5jdGlvbihpbmRleCwgbm90U2V0VmFsdWUpIHtcbiAgICAgIGluZGV4ID0gd3JhcEluZGV4KHRoaXMsIGluZGV4KTtcbiAgICAgIHJldHVybiBpbmRleCA+PSAwICYmIGluZGV4IDwgc2xpY2VTaXplXG4gICAgICAgID8gY29sbGVjdGlvbi5nZXQoaW5kZXggKyByZXNvbHZlZEJlZ2luLCBub3RTZXRWYWx1ZSlcbiAgICAgICAgOiBub3RTZXRWYWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgc2xpY2VTZXEuX19pdGVyYXRlVW5jYWNoZWQgPSBmdW5jdGlvbihmbiwgcmV2ZXJzZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgaWYgKHNsaWNlU2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0ZShmbiwgcmV2ZXJzZSk7XG4gICAgfVxuICAgIHZhciBza2lwcGVkID0gMDtcbiAgICB2YXIgaXNTa2lwcGluZyA9IHRydWU7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIGNvbGxlY3Rpb24uX19pdGVyYXRlKGZ1bmN0aW9uICh2LCBrKSB7XG4gICAgICBpZiAoIShpc1NraXBwaW5nICYmIChpc1NraXBwaW5nID0gc2tpcHBlZCsrIDwgcmVzb2x2ZWRCZWdpbikpKSB7XG4gICAgICAgIGl0ZXJhdGlvbnMrKztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBmbih2LCB1c2VLZXlzID8gayA6IGl0ZXJhdGlvbnMgLSAxLCB0aGlzJDEpICE9PSBmYWxzZSAmJlxuICAgICAgICAgIGl0ZXJhdGlvbnMgIT09IHNsaWNlU2l6ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRpb25zO1xuICB9O1xuXG4gIHNsaWNlU2VxLl9faXRlcmF0b3JVbmNhY2hlZCA9IGZ1bmN0aW9uKHR5cGUsIHJldmVyc2UpIHtcbiAgICBpZiAoc2xpY2VTaXplICE9PSAwICYmIHJldmVyc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRvcih0eXBlLCByZXZlcnNlKTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgYm90aGVyIGluc3RhbnRpYXRpbmcgcGFyZW50IGl0ZXJhdG9yIGlmIHRha2luZyAwLlxuICAgIGlmIChzbGljZVNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgSXRlcmF0b3IoaXRlcmF0b3JEb25lKTtcbiAgICB9XG4gICAgdmFyIGl0ZXJhdG9yID0gY29sbGVjdGlvbi5fX2l0ZXJhdG9yKHR5cGUsIHJldmVyc2UpO1xuICAgIHZhciBza2lwcGVkID0gMDtcbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAoc2tpcHBlZCsrIDwgcmVzb2x2ZWRCZWdpbikge1xuICAgICAgICBpdGVyYXRvci5uZXh0KCk7XG4gICAgICB9XG4gICAgICBpZiAoKytpdGVyYXRpb25zID4gc2xpY2VTaXplKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvckRvbmUoKTtcbiAgICAgIH1cbiAgICAgIHZhciBzdGVwID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgaWYgKHVzZUtleXMgfHwgdHlwZSA9PT0gSVRFUkFURV9WQUxVRVMgfHwgc3RlcC5kb25lKSB7XG4gICAgICAgIHJldHVybiBzdGVwO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IElURVJBVEVfS0VZUykge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JWYWx1ZSh0eXBlLCBpdGVyYXRpb25zIC0gMSwgdW5kZWZpbmVkLCBzdGVwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVyYXRvclZhbHVlKHR5cGUsIGl0ZXJhdGlvbnMgLSAxLCBzdGVwLnZhbHVlWzFdLCBzdGVwKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gc2xpY2VTZXE7XG59XG5cbmZ1bmN0aW9uIHRha2VXaGlsZUZhY3RvcnkoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHZhciB0YWtlU2VxdWVuY2UgPSBtYWtlU2VxdWVuY2UoY29sbGVjdGlvbik7XG4gIHRha2VTZXF1ZW5jZS5fX2l0ZXJhdGVVbmNhY2hlZCA9IGZ1bmN0aW9uKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdGUoZm4sIHJldmVyc2UpO1xuICAgIH1cbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgY29sbGVjdGlvbi5fX2l0ZXJhdGUoXG4gICAgICBmdW5jdGlvbiAodiwgaywgYykgeyByZXR1cm4gcHJlZGljYXRlLmNhbGwoY29udGV4dCwgdiwgaywgYykgJiYgKytpdGVyYXRpb25zICYmIGZuKHYsIGssIHRoaXMkMSk7IH1cbiAgICApO1xuICAgIHJldHVybiBpdGVyYXRpb25zO1xuICB9O1xuICB0YWtlU2VxdWVuY2UuX19pdGVyYXRvclVuY2FjaGVkID0gZnVuY3Rpb24odHlwZSwgcmV2ZXJzZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRvcih0eXBlLCByZXZlcnNlKTtcbiAgICB9XG4gICAgdmFyIGl0ZXJhdG9yID0gY29sbGVjdGlvbi5fX2l0ZXJhdG9yKElURVJBVEVfRU5UUklFUywgcmV2ZXJzZSk7XG4gICAgdmFyIGl0ZXJhdGluZyA9IHRydWU7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWl0ZXJhdGluZykge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JEb25lKCk7XG4gICAgICB9XG4gICAgICB2YXIgc3RlcCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIGlmIChzdGVwLmRvbmUpIHtcbiAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICB9XG4gICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgdmFyIGsgPSBlbnRyeVswXTtcbiAgICAgIHZhciB2ID0gZW50cnlbMV07XG4gICAgICBpZiAoIXByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHYsIGssIHRoaXMkMSkpIHtcbiAgICAgICAgaXRlcmF0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBpdGVyYXRvckRvbmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlID09PSBJVEVSQVRFX0VOVFJJRVMgPyBzdGVwIDogaXRlcmF0b3JWYWx1ZSh0eXBlLCBrLCB2LCBzdGVwKTtcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHRha2VTZXF1ZW5jZTtcbn1cblxuZnVuY3Rpb24gc2tpcFdoaWxlRmFjdG9yeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGNvbnRleHQsIHVzZUtleXMpIHtcbiAgdmFyIHNraXBTZXF1ZW5jZSA9IG1ha2VTZXF1ZW5jZShjb2xsZWN0aW9uKTtcbiAgc2tpcFNlcXVlbmNlLl9faXRlcmF0ZVVuY2FjaGVkID0gZnVuY3Rpb24oZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0ZShmbiwgcmV2ZXJzZSk7XG4gICAgfVxuICAgIHZhciBpc1NraXBwaW5nID0gdHJ1ZTtcbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgY29sbGVjdGlvbi5fX2l0ZXJhdGUoZnVuY3Rpb24gKHYsIGssIGMpIHtcbiAgICAgIGlmICghKGlzU2tpcHBpbmcgJiYgKGlzU2tpcHBpbmcgPSBwcmVkaWNhdGUuY2FsbChjb250ZXh0LCB2LCBrLCBjKSkpKSB7XG4gICAgICAgIGl0ZXJhdGlvbnMrKztcbiAgICAgICAgcmV0dXJuIGZuKHYsIHVzZUtleXMgPyBrIDogaXRlcmF0aW9ucyAtIDEsIHRoaXMkMSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdGlvbnM7XG4gIH07XG4gIHNraXBTZXF1ZW5jZS5fX2l0ZXJhdG9yVW5jYWNoZWQgPSBmdW5jdGlvbih0eXBlLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdG9yKHR5cGUsIHJldmVyc2UpO1xuICAgIH1cbiAgICB2YXIgaXRlcmF0b3IgPSBjb2xsZWN0aW9uLl9faXRlcmF0b3IoSVRFUkFURV9FTlRSSUVTLCByZXZlcnNlKTtcbiAgICB2YXIgc2tpcHBpbmcgPSB0cnVlO1xuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgdmFyIGs7XG4gICAgICB2YXIgdjtcbiAgICAgIGRvIHtcbiAgICAgICAgc3RlcCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgaWYgKHN0ZXAuZG9uZSkge1xuICAgICAgICAgIGlmICh1c2VLZXlzIHx8IHR5cGUgPT09IElURVJBVEVfVkFMVUVTKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGUgPT09IElURVJBVEVfS0VZUykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yVmFsdWUodHlwZSwgaXRlcmF0aW9ucysrLCB1bmRlZmluZWQsIHN0ZXApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaXRlcmF0b3JWYWx1ZSh0eXBlLCBpdGVyYXRpb25zKyssIHN0ZXAudmFsdWVbMV0sIHN0ZXApO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgIGsgPSBlbnRyeVswXTtcbiAgICAgICAgdiA9IGVudHJ5WzFdO1xuICAgICAgICBza2lwcGluZyAmJiAoc2tpcHBpbmcgPSBwcmVkaWNhdGUuY2FsbChjb250ZXh0LCB2LCBrLCB0aGlzJDEpKTtcbiAgICAgIH0gd2hpbGUgKHNraXBwaW5nKTtcbiAgICAgIHJldHVybiB0eXBlID09PSBJVEVSQVRFX0VOVFJJRVMgPyBzdGVwIDogaXRlcmF0b3JWYWx1ZSh0eXBlLCBrLCB2LCBzdGVwKTtcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHNraXBTZXF1ZW5jZTtcbn1cblxuZnVuY3Rpb24gY29uY2F0RmFjdG9yeShjb2xsZWN0aW9uLCB2YWx1ZXMpIHtcbiAgdmFyIGlzS2V5ZWRDb2xsZWN0aW9uID0gaXNLZXllZChjb2xsZWN0aW9uKTtcbiAgdmFyIGl0ZXJzID0gW2NvbGxlY3Rpb25dXG4gICAgLmNvbmNhdCh2YWx1ZXMpXG4gICAgLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgaWYgKCFpc0NvbGxlY3Rpb24odikpIHtcbiAgICAgICAgdiA9IGlzS2V5ZWRDb2xsZWN0aW9uXG4gICAgICAgICAgPyBrZXllZFNlcUZyb21WYWx1ZSh2KVxuICAgICAgICAgIDogaW5kZXhlZFNlcUZyb21WYWx1ZShBcnJheS5pc0FycmF5KHYpID8gdiA6IFt2XSk7XG4gICAgICB9IGVsc2UgaWYgKGlzS2V5ZWRDb2xsZWN0aW9uKSB7XG4gICAgICAgIHYgPSBLZXllZENvbGxlY3Rpb24odik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdjtcbiAgICB9KVxuICAgIC5maWx0ZXIoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYuc2l6ZSAhPT0gMDsgfSk7XG5cbiAgaWYgKGl0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9XG5cbiAgaWYgKGl0ZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBzaW5nbGV0b24gPSBpdGVyc1swXTtcbiAgICBpZiAoXG4gICAgICBzaW5nbGV0b24gPT09IGNvbGxlY3Rpb24gfHxcbiAgICAgIChpc0tleWVkQ29sbGVjdGlvbiAmJiBpc0tleWVkKHNpbmdsZXRvbikpIHx8XG4gICAgICAoaXNJbmRleGVkKGNvbGxlY3Rpb24pICYmIGlzSW5kZXhlZChzaW5nbGV0b24pKVxuICAgICkge1xuICAgICAgcmV0dXJuIHNpbmdsZXRvbjtcbiAgICB9XG4gIH1cblxuICB2YXIgY29uY2F0U2VxID0gbmV3IEFycmF5U2VxKGl0ZXJzKTtcbiAgaWYgKGlzS2V5ZWRDb2xsZWN0aW9uKSB7XG4gICAgY29uY2F0U2VxID0gY29uY2F0U2VxLnRvS2V5ZWRTZXEoKTtcbiAgfSBlbHNlIGlmICghaXNJbmRleGVkKGNvbGxlY3Rpb24pKSB7XG4gICAgY29uY2F0U2VxID0gY29uY2F0U2VxLnRvU2V0U2VxKCk7XG4gIH1cbiAgY29uY2F0U2VxID0gY29uY2F0U2VxLmZsYXR0ZW4odHJ1ZSk7XG4gIGNvbmNhdFNlcS5zaXplID0gaXRlcnMucmVkdWNlKGZ1bmN0aW9uIChzdW0sIHNlcSkge1xuICAgIGlmIChzdW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHNpemUgPSBzZXEuc2l6ZTtcbiAgICAgIGlmIChzaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHN1bSArIHNpemU7XG4gICAgICB9XG4gICAgfVxuICB9LCAwKTtcbiAgcmV0dXJuIGNvbmNhdFNlcTtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbkZhY3RvcnkoY29sbGVjdGlvbiwgZGVwdGgsIHVzZUtleXMpIHtcbiAgdmFyIGZsYXRTZXF1ZW5jZSA9IG1ha2VTZXF1ZW5jZShjb2xsZWN0aW9uKTtcbiAgZmxhdFNlcXVlbmNlLl9faXRlcmF0ZVVuY2FjaGVkID0gZnVuY3Rpb24oZm4sIHJldmVyc2UpIHtcbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdGUoZm4sIHJldmVyc2UpO1xuICAgIH1cbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgdmFyIHN0b3BwZWQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBmbGF0RGVlcChpdGVyLCBjdXJyZW50RGVwdGgpIHtcbiAgICAgIGl0ZXIuX19pdGVyYXRlKGZ1bmN0aW9uICh2LCBrKSB7XG4gICAgICAgIGlmICgoIWRlcHRoIHx8IGN1cnJlbnREZXB0aCA8IGRlcHRoKSAmJiBpc0NvbGxlY3Rpb24odikpIHtcbiAgICAgICAgICBmbGF0RGVlcCh2LCBjdXJyZW50RGVwdGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVyYXRpb25zKys7XG4gICAgICAgICAgaWYgKGZuKHYsIHVzZUtleXMgPyBrIDogaXRlcmF0aW9ucyAtIDEsIGZsYXRTZXF1ZW5jZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFzdG9wcGVkO1xuICAgICAgfSwgcmV2ZXJzZSk7XG4gICAgfVxuICAgIGZsYXREZWVwKGNvbGxlY3Rpb24sIDApO1xuICAgIHJldHVybiBpdGVyYXRpb25zO1xuICB9O1xuICBmbGF0U2VxdWVuY2UuX19pdGVyYXRvclVuY2FjaGVkID0gZnVuY3Rpb24odHlwZSwgcmV2ZXJzZSkge1xuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0b3IodHlwZSwgcmV2ZXJzZSk7XG4gICAgfVxuICAgIHZhciBpdGVyYXRvciA9IGNvbGxlY3Rpb24uX19pdGVyYXRvcih0eXBlLCByZXZlcnNlKTtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAoaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN0ZXAgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIGlmIChzdGVwLmRvbmUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgaXRlcmF0b3IgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdiA9IHN0ZXAudmFsdWU7XG4gICAgICAgIGlmICh0eXBlID09PSBJVEVSQVRFX0VOVFJJRVMpIHtcbiAgICAgICAgICB2ID0gdlsxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKCFkZXB0aCB8fCBzdGFjay5sZW5ndGggPCBkZXB0aCkgJiYgaXNDb2xsZWN0aW9uKHYpKSB7XG4gICAgICAgICAgc3RhY2sucHVzaChpdGVyYXRvcik7XG4gICAgICAgICAgaXRlcmF0b3IgPSB2Ll9faXRlcmF0b3IodHlwZSwgcmV2ZXJzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHVzZUtleXMgPyBzdGVwIDogaXRlcmF0b3JWYWx1ZSh0eXBlLCBpdGVyYXRpb25zKyssIHYsIHN0ZXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0b3JEb25lKCk7XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBmbGF0U2VxdWVuY2U7XG59XG5cbmZ1bmN0aW9uIGZsYXRNYXBGYWN0b3J5KGNvbGxlY3Rpb24sIG1hcHBlciwgY29udGV4dCkge1xuICB2YXIgY29lcmNlID0gY29sbGVjdGlvbkNsYXNzKGNvbGxlY3Rpb24pO1xuICByZXR1cm4gY29sbGVjdGlvblxuICAgIC50b1NlcSgpXG4gICAgLm1hcChmdW5jdGlvbiAodiwgaykgeyByZXR1cm4gY29lcmNlKG1hcHBlci5jYWxsKGNvbnRleHQsIHYsIGssIGNvbGxlY3Rpb24pKTsgfSlcbiAgICAuZmxhdHRlbih0cnVlKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJwb3NlRmFjdG9yeShjb2xsZWN0aW9uLCBzZXBhcmF0b3IpIHtcbiAgdmFyIGludGVycG9zZWRTZXF1ZW5jZSA9IG1ha2VTZXF1ZW5jZShjb2xsZWN0aW9uKTtcbiAgaW50ZXJwb3NlZFNlcXVlbmNlLnNpemUgPSBjb2xsZWN0aW9uLnNpemUgJiYgY29sbGVjdGlvbi5zaXplICogMiAtIDE7XG4gIGludGVycG9zZWRTZXF1ZW5jZS5fX2l0ZXJhdGVVbmNhY2hlZCA9IGZ1bmN0aW9uKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgY29sbGVjdGlvbi5fX2l0ZXJhdGUoXG4gICAgICBmdW5jdGlvbiAodikgeyByZXR1cm4gKCFpdGVyYXRpb25zIHx8IGZuKHNlcGFyYXRvciwgaXRlcmF0aW9ucysrLCB0aGlzJDEpICE9PSBmYWxzZSkgJiZcbiAgICAgICAgZm4odiwgaXRlcmF0aW9ucysrLCB0aGlzJDEpICE9PSBmYWxzZTsgfSxcbiAgICAgIHJldmVyc2VcbiAgICApO1xuICAgIHJldHVybiBpdGVyYXRpb25zO1xuICB9O1xuICBpbnRlcnBvc2VkU2VxdWVuY2UuX19pdGVyYXRvclVuY2FjaGVkID0gZnVuY3Rpb24odHlwZSwgcmV2ZXJzZSkge1xuICAgIHZhciBpdGVyYXRvciA9IGNvbGxlY3Rpb24uX19pdGVyYXRvcihJVEVSQVRFX1ZBTFVFUywgcmV2ZXJzZSk7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIHZhciBzdGVwO1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzdGVwIHx8IGl0ZXJhdGlvbnMgJSAyKSB7XG4gICAgICAgIHN0ZXAgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIGlmIChzdGVwLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZXJhdGlvbnMgJSAyXG4gICAgICAgID8gaXRlcmF0b3JWYWx1ZSh0eXBlLCBpdGVyYXRpb25zKyssIHNlcGFyYXRvcilcbiAgICAgICAgOiBpdGVyYXRvclZhbHVlKHR5cGUsIGl0ZXJhdGlvbnMrKywgc3RlcC52YWx1ZSwgc3RlcCk7XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBpbnRlcnBvc2VkU2VxdWVuY2U7XG59XG5cbmZ1bmN0aW9uIHNvcnRGYWN0b3J5KGNvbGxlY3Rpb24sIGNvbXBhcmF0b3IsIG1hcHBlcikge1xuICBpZiAoIWNvbXBhcmF0b3IpIHtcbiAgICBjb21wYXJhdG9yID0gZGVmYXVsdENvbXBhcmF0b3I7XG4gIH1cbiAgdmFyIGlzS2V5ZWRDb2xsZWN0aW9uID0gaXNLZXllZChjb2xsZWN0aW9uKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGVudHJpZXMgPSBjb2xsZWN0aW9uXG4gICAgLnRvU2VxKClcbiAgICAubWFwKGZ1bmN0aW9uICh2LCBrKSB7IHJldHVybiBbaywgdiwgaW5kZXgrKywgbWFwcGVyID8gbWFwcGVyKHYsIGssIGNvbGxlY3Rpb24pIDogdl07IH0pXG4gICAgLnZhbHVlU2VxKClcbiAgICAudG9BcnJheSgpO1xuICBlbnRyaWVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGNvbXBhcmF0b3IoYVszXSwgYlszXSkgfHwgYVsyXSAtIGJbMl07IH0pLmZvckVhY2goXG4gICAgaXNLZXllZENvbGxlY3Rpb25cbiAgICAgID8gZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgICAgICBlbnRyaWVzW2ldLmxlbmd0aCA9IDI7XG4gICAgICAgIH1cbiAgICAgIDogZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgICAgICBlbnRyaWVzW2ldID0gdlsxXTtcbiAgICAgICAgfVxuICApO1xuICByZXR1cm4gaXNLZXllZENvbGxlY3Rpb25cbiAgICA/IEtleWVkU2VxKGVudHJpZXMpXG4gICAgOiBpc0luZGV4ZWQoY29sbGVjdGlvbilcbiAgICAgID8gSW5kZXhlZFNlcShlbnRyaWVzKVxuICAgICAgOiBTZXRTZXEoZW50cmllcyk7XG59XG5cbmZ1bmN0aW9uIG1heEZhY3RvcnkoY29sbGVjdGlvbiwgY29tcGFyYXRvciwgbWFwcGVyKSB7XG4gIGlmICghY29tcGFyYXRvcikge1xuICAgIGNvbXBhcmF0b3IgPSBkZWZhdWx0Q29tcGFyYXRvcjtcbiAgfVxuICBpZiAobWFwcGVyKSB7XG4gICAgdmFyIGVudHJ5ID0gY29sbGVjdGlvblxuICAgICAgLnRvU2VxKClcbiAgICAgIC5tYXAoZnVuY3Rpb24gKHYsIGspIHsgcmV0dXJuIFt2LCBtYXBwZXIodiwgaywgY29sbGVjdGlvbildOyB9KVxuICAgICAgLnJlZHVjZShmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gKG1heENvbXBhcmUoY29tcGFyYXRvciwgYVsxXSwgYlsxXSkgPyBiIDogYSk7IH0pO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeVswXTtcbiAgfVxuICByZXR1cm4gY29sbGVjdGlvbi5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIChtYXhDb21wYXJlKGNvbXBhcmF0b3IsIGEsIGIpID8gYiA6IGEpOyB9KTtcbn1cblxuZnVuY3Rpb24gbWF4Q29tcGFyZShjb21wYXJhdG9yLCBhLCBiKSB7XG4gIHZhciBjb21wID0gY29tcGFyYXRvcihiLCBhKTtcbiAgLy8gYiBpcyBjb25zaWRlcmVkIHRoZSBuZXcgbWF4IGlmIHRoZSBjb21wYXJhdG9yIGRlY2xhcmVzIHRoZW0gZXF1YWwsIGJ1dFxuICAvLyB0aGV5IGFyZSBub3QgZXF1YWwgYW5kIGIgaXMgaW4gZmFjdCBhIG51bGxpc2ggdmFsdWUuXG4gIHJldHVybiAoXG4gICAgKGNvbXAgPT09IDAgJiYgYiAhPT0gYSAmJiAoYiA9PT0gdW5kZWZpbmVkIHx8IGIgPT09IG51bGwgfHwgYiAhPT0gYikpIHx8XG4gICAgY29tcCA+IDBcbiAgKTtcbn1cblxuZnVuY3Rpb24gemlwV2l0aEZhY3Rvcnkoa2V5SXRlciwgemlwcGVyLCBpdGVycywgemlwQWxsKSB7XG4gIHZhciB6aXBTZXF1ZW5jZSA9IG1ha2VTZXF1ZW5jZShrZXlJdGVyKTtcbiAgdmFyIHNpemVzID0gbmV3IEFycmF5U2VxKGl0ZXJzKS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGkuc2l6ZTsgfSk7XG4gIHppcFNlcXVlbmNlLnNpemUgPSB6aXBBbGwgPyBzaXplcy5tYXgoKSA6IHNpemVzLm1pbigpO1xuICAvLyBOb3RlOiB0aGlzIGEgZ2VuZXJpYyBiYXNlIGltcGxlbWVudGF0aW9uIG9mIF9faXRlcmF0ZSBpbiB0ZXJtcyBvZlxuICAvLyBfX2l0ZXJhdG9yIHdoaWNoIG1heSBiZSBtb3JlIGdlbmVyaWNhbGx5IHVzZWZ1bCBpbiB0aGUgZnV0dXJlLlxuICB6aXBTZXF1ZW5jZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbihmbiwgcmV2ZXJzZSkge1xuICAgIC8qIGdlbmVyaWM6XG4gICAgdmFyIGl0ZXJhdG9yID0gdGhpcy5fX2l0ZXJhdG9yKElURVJBVEVfRU5UUklFUywgcmV2ZXJzZSk7XG4gICAgdmFyIHN0ZXA7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGl0ZXJhdGlvbnMrKztcbiAgICAgIGlmIChmbihzdGVwLnZhbHVlWzFdLCBzdGVwLnZhbHVlWzBdLCB0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVyYXRpb25zO1xuICAgICovXG4gICAgLy8gaW5kZXhlZDpcbiAgICB2YXIgaXRlcmF0b3IgPSB0aGlzLl9faXRlcmF0b3IoSVRFUkFURV9WQUxVRVMsIHJldmVyc2UpO1xuICAgIHZhciBzdGVwO1xuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICBpZiAoZm4oc3RlcC52YWx1ZSwgaXRlcmF0aW9ucysrLCB0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVyYXRpb25zO1xuICB9O1xuICB6aXBTZXF1ZW5jZS5fX2l0ZXJhdG9yVW5jYWNoZWQgPSBmdW5jdGlvbih0eXBlLCByZXZlcnNlKSB7XG4gICAgdmFyIGl0ZXJhdG9ycyA9IGl0ZXJzLm1hcChcbiAgICAgIGZ1bmN0aW9uIChpKSB7IHJldHVybiAoKGkgPSBDb2xsZWN0aW9uKGkpKSwgZ2V0SXRlcmF0b3IocmV2ZXJzZSA/IGkucmV2ZXJzZSgpIDogaSkpOyB9XG4gICAgKTtcbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgdmFyIGlzRG9uZSA9IGZhbHNlO1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0ZXBzO1xuICAgICAgaWYgKCFpc0RvbmUpIHtcbiAgICAgICAgc3RlcHMgPSBpdGVyYXRvcnMubWFwKGZ1bmN0aW9uIChpKSB7IHJldHVybiBpLm5leHQoKTsgfSk7XG4gICAgICAgIGlzRG9uZSA9IHppcEFsbCA/IHN0ZXBzLmV2ZXJ5KGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLmRvbmU7IH0pIDogc3RlcHMuc29tZShmdW5jdGlvbiAocykgeyByZXR1cm4gcy5kb25lOyB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0RvbmUpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yRG9uZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yVmFsdWUoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGl0ZXJhdGlvbnMrKyxcbiAgICAgICAgemlwcGVyLmFwcGx5KG51bGwsIHN0ZXBzLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy52YWx1ZTsgfSkpXG4gICAgICApO1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gemlwU2VxdWVuY2U7XG59XG5cbi8vICNwcmFnbWEgSGVscGVyIEZ1bmN0aW9uc1xuXG5mdW5jdGlvbiByZWlmeShpdGVyLCBzZXEpIHtcbiAgcmV0dXJuIGl0ZXIgPT09IHNlcSA/IGl0ZXIgOiBpc1NlcShpdGVyKSA/IHNlcSA6IGl0ZXIuY29uc3RydWN0b3Ioc2VxKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFbnRyeShlbnRyeSkge1xuICBpZiAoZW50cnkgIT09IE9iamVjdChlbnRyeSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBbSywgVl0gdHVwbGU6ICcgKyBlbnRyeSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbkNsYXNzKGNvbGxlY3Rpb24pIHtcbiAgcmV0dXJuIGlzS2V5ZWQoY29sbGVjdGlvbilcbiAgICA/IEtleWVkQ29sbGVjdGlvblxuICAgIDogaXNJbmRleGVkKGNvbGxlY3Rpb24pXG4gICAgICA/IEluZGV4ZWRDb2xsZWN0aW9uXG4gICAgICA6IFNldENvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIG1ha2VTZXF1ZW5jZShjb2xsZWN0aW9uKSB7XG4gIHJldHVybiBPYmplY3QuY3JlYXRlKFxuICAgIChpc0tleWVkKGNvbGxlY3Rpb24pXG4gICAgICA/IEtleWVkU2VxXG4gICAgICA6IGlzSW5kZXhlZChjb2xsZWN0aW9uKVxuICAgICAgICA/IEluZGV4ZWRTZXFcbiAgICAgICAgOiBTZXRTZXFcbiAgICApLnByb3RvdHlwZVxuICApO1xufVxuXG5mdW5jdGlvbiBjYWNoZVJlc3VsdFRocm91Z2goKSB7XG4gIGlmICh0aGlzLl9pdGVyLmNhY2hlUmVzdWx0KSB7XG4gICAgdGhpcy5faXRlci5jYWNoZVJlc3VsdCgpO1xuICAgIHRoaXMuc2l6ZSA9IHRoaXMuX2l0ZXIuc2l6ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICByZXR1cm4gU2VxLnByb3RvdHlwZS5jYWNoZVJlc3VsdC5jYWxsKHRoaXMpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q29tcGFyYXRvcihhLCBiKSB7XG4gIGlmIChhID09PSB1bmRlZmluZWQgJiYgYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgcmV0dXJuIGEgPiBiID8gMSA6IGEgPCBiID8gLTEgOiAwO1xufVxuXG4vLyBodHRwOi8vanNwZXJmLmNvbS9jb3B5LWFycmF5LWlubGluZVxuZnVuY3Rpb24gYXJyQ29weShhcnIsIG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcbiAgdmFyIGxlbiA9IE1hdGgubWF4KDAsIGFyci5sZW5ndGggLSBvZmZzZXQpO1xuICB2YXIgbmV3QXJyID0gbmV3IEFycmF5KGxlbik7XG4gIGZvciAodmFyIGlpID0gMDsgaWkgPCBsZW47IGlpKyspIHtcbiAgICBuZXdBcnJbaWldID0gYXJyW2lpICsgb2Zmc2V0XTtcbiAgfVxuICByZXR1cm4gbmV3QXJyO1xufVxuXG5mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBlcnJvcikge1xuICBpZiAoIWNvbmRpdGlvbikgeyB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpOyB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vdEluZmluaXRlKHNpemUpIHtcbiAgaW52YXJpYW50KFxuICAgIHNpemUgIT09IEluZmluaXR5LFxuICAgICdDYW5ub3QgcGVyZm9ybSB0aGlzIGFjdGlvbiB3aXRoIGFuIGluZmluaXRlIHNpemUuJ1xuICApO1xufVxuXG5mdW5jdGlvbiBjb2VyY2VLZXlQYXRoKGtleVBhdGgpIHtcbiAgaWYgKGlzQXJyYXlMaWtlKGtleVBhdGgpICYmIHR5cGVvZiBrZXlQYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBrZXlQYXRoO1xuICB9XG4gIGlmIChpc09yZGVyZWQoa2V5UGF0aCkpIHtcbiAgICByZXR1cm4ga2V5UGF0aC50b0FycmF5KCk7XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnSW52YWxpZCBrZXlQYXRoOiBleHBlY3RlZCBPcmRlcmVkIENvbGxlY3Rpb24gb3IgQXJyYXk6ICcgKyBrZXlQYXRoXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmoodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAmJlxuICAgICh0eXBlb2YgdmFsdWUuY29uc3RydWN0b3IgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdPYmplY3QnKVxuICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBwb3RlbnRpYWxseS1wZXJzaXN0ZW50IGRhdGEgc3RydWN0dXJlLCBlaXRoZXJcbiAqIHByb3ZpZGVkIGJ5IEltbXV0YWJsZS5qcyBvciBhIHBsYWluIEFycmF5IG9yIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gaXNEYXRhU3RydWN0dXJlKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIChpc0ltbXV0YWJsZSh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNQbGFpbk9iaih2YWx1ZSkpXG4gICk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSB2YWx1ZSB0byBhIHN0cmluZywgYWRkaW5nIHF1b3RlcyBpZiBhIHN0cmluZyB3YXMgcHJvdmlkZWQuXG4gKi9cbmZ1bmN0aW9uIHF1b3RlU3RyaW5nKHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xuICB9IGNhdGNoIChfaWdub3JlRXJyb3IpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhcyhjb2xsZWN0aW9uLCBrZXkpIHtcbiAgcmV0dXJuIGlzSW1tdXRhYmxlKGNvbGxlY3Rpb24pXG4gICAgPyBjb2xsZWN0aW9uLmhhcyhrZXkpXG4gICAgOiBpc0RhdGFTdHJ1Y3R1cmUoY29sbGVjdGlvbikgJiYgaGFzT3duUHJvcGVydHkuY2FsbChjb2xsZWN0aW9uLCBrZXkpO1xufVxuXG5mdW5jdGlvbiBnZXQoY29sbGVjdGlvbiwga2V5LCBub3RTZXRWYWx1ZSkge1xuICByZXR1cm4gaXNJbW11dGFibGUoY29sbGVjdGlvbilcbiAgICA/IGNvbGxlY3Rpb24uZ2V0KGtleSwgbm90U2V0VmFsdWUpXG4gICAgOiAhaGFzKGNvbGxlY3Rpb24sIGtleSlcbiAgICAgID8gbm90U2V0VmFsdWVcbiAgICAgIDogdHlwZW9mIGNvbGxlY3Rpb24uZ2V0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gY29sbGVjdGlvbi5nZXQoa2V5KVxuICAgICAgICA6IGNvbGxlY3Rpb25ba2V5XTtcbn1cblxuZnVuY3Rpb24gc2hhbGxvd0NvcHkoZnJvbSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShmcm9tKSkge1xuICAgIHJldHVybiBhcnJDb3B5KGZyb20pO1xuICB9XG4gIHZhciB0byA9IHt9O1xuICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcbiAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiB0bztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKGNvbGxlY3Rpb24sIGtleSkge1xuICBpZiAoIWlzRGF0YVN0cnVjdHVyZShjb2xsZWN0aW9uKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnQ2Fubm90IHVwZGF0ZSBub24tZGF0YS1zdHJ1Y3R1cmUgdmFsdWU6ICcgKyBjb2xsZWN0aW9uXG4gICAgKTtcbiAgfVxuICBpZiAoaXNJbW11dGFibGUoY29sbGVjdGlvbikpIHtcbiAgICBpZiAoIWNvbGxlY3Rpb24ucmVtb3ZlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnQ2Fubm90IHVwZGF0ZSBpbW11dGFibGUgdmFsdWUgd2l0aG91dCAucmVtb3ZlKCkgbWV0aG9kOiAnICsgY29sbGVjdGlvblxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3Rpb24ucmVtb3ZlKGtleSk7XG4gIH1cbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbGxlY3Rpb24sIGtleSkpIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgfVxuICB2YXIgY29sbGVjdGlvbkNvcHkgPSBzaGFsbG93Q29weShjb2xsZWN0aW9uKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY29sbGVjdGlvbkNvcHkpKSB7XG4gICAgY29sbGVjdGlvbkNvcHkuc3BsaWNlKGtleSwgMSk7XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIGNvbGxlY3Rpb25Db3B5W2tleV07XG4gIH1cbiAgcmV0dXJuIGNvbGxlY3Rpb25Db3B5O1xufVxuXG5mdW5jdGlvbiBzZXQoY29sbGVjdGlvbiwga2V5LCB2YWx1ZSkge1xuICBpZiAoIWlzRGF0YVN0cnVjdHVyZShjb2xsZWN0aW9uKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnQ2Fubm90IHVwZGF0ZSBub24tZGF0YS1zdHJ1Y3R1cmUgdmFsdWU6ICcgKyBjb2xsZWN0aW9uXG4gICAgKTtcbiAgfVxuICBpZiAoaXNJbW11dGFibGUoY29sbGVjdGlvbikpIHtcbiAgICBpZiAoIWNvbGxlY3Rpb24uc2V0KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnQ2Fubm90IHVwZGF0ZSBpbW11dGFibGUgdmFsdWUgd2l0aG91dCAuc2V0KCkgbWV0aG9kOiAnICsgY29sbGVjdGlvblxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3Rpb24uc2V0KGtleSwgdmFsdWUpO1xuICB9XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbGxlY3Rpb24sIGtleSkgJiYgdmFsdWUgPT09IGNvbGxlY3Rpb25ba2V5XSkge1xuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9XG4gIHZhciBjb2xsZWN0aW9uQ29weSA9IHNoYWxsb3dDb3B5KGNvbGxlY3Rpb24pO1xuICBjb2xsZWN0aW9uQ29weVtrZXldID0gdmFsdWU7XG4gIHJldHVybiBjb2xsZWN0aW9uQ29weTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSW4oY29sbGVjdGlvbiwga2V5UGF0aCwgbm90U2V0VmFsdWUsIHVwZGF0ZXIpIHtcbiAgaWYgKCF1cGRhdGVyKSB7XG4gICAgdXBkYXRlciA9IG5vdFNldFZhbHVlO1xuICAgIG5vdFNldFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIHZhciB1cGRhdGVkVmFsdWUgPSB1cGRhdGVJbkRlZXBseShcbiAgICBpc0ltbXV0YWJsZShjb2xsZWN0aW9uKSxcbiAgICBjb2xsZWN0aW9uLFxuICAgIGNvZXJjZUtleVBhdGgoa2V5UGF0aCksXG4gICAgMCxcbiAgICBub3RTZXRWYWx1ZSxcbiAgICB1cGRhdGVyXG4gICk7XG4gIHJldHVybiB1cGRhdGVkVmFsdWUgPT09IE5PVF9TRVQgPyBub3RTZXRWYWx1ZSA6IHVwZGF0ZWRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSW5EZWVwbHkoXG4gIGluSW1tdXRhYmxlLFxuICBleGlzdGluZyxcbiAga2V5UGF0aCxcbiAgaSxcbiAgbm90U2V0VmFsdWUsXG4gIHVwZGF0ZXJcbikge1xuICB2YXIgd2FzTm90U2V0ID0gZXhpc3RpbmcgPT09IE5PVF9TRVQ7XG4gIGlmIChpID09PSBrZXlQYXRoLmxlbmd0aCkge1xuICAgIHZhciBleGlzdGluZ1ZhbHVlID0gd2FzTm90U2V0ID8gbm90U2V0VmFsdWUgOiBleGlzdGluZztcbiAgICB2YXIgbmV3VmFsdWUgPSB1cGRhdGVyKGV4aXN0aW5nVmFsdWUpO1xuICAgIHJldHVybiBuZXdWYWx1ZSA9PT0gZXhpc3RpbmdWYWx1ZSA/IGV4aXN0aW5nIDogbmV3VmFsdWU7XG4gIH1cbiAgaWYgKCF3YXNOb3RTZXQgJiYgIWlzRGF0YVN0cnVjdHVyZShleGlzdGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ0Nhbm5vdCB1cGRhdGUgd2l0aGluIG5vbi1kYXRhLXN0cnVjdHVyZSB2YWx1ZSBpbiBwYXRoIFsnICtcbiAgICAgICAga2V5UGF0aC5zbGljZSgwLCBpKS5tYXAocXVvdGVTdHJpbmcpICtcbiAgICAgICAgJ106ICcgK1xuICAgICAgICBleGlzdGluZ1xuICAgICk7XG4gIH1cbiAgdmFyIGtleSA9IGtleVBhdGhbaV07XG4gIHZhciBuZXh0RXhpc3RpbmcgPSB3YXNOb3RTZXQgPyBOT1RfU0VUIDogZ2V0KGV4aXN0aW5nLCBrZXksIE5PVF9TRVQpO1xuICB2YXIgbmV4dFVwZGF0ZWQgPSB1cGRhdGVJbkRlZXBseShcbiAgICBuZXh0RXhpc3RpbmcgPT09IE5PVF9TRVQgPyBpbkltbXV0YWJsZSA6IGlzSW1tdXRhYmxlKG5leHRFeGlzdGluZyksXG4gICAgbmV4dEV4aXN0aW5nLFxuICAgIGtleVBhdGgsXG4gICAgaSArIDEsXG4gICAgbm90U2V0VmFsdWUsXG4gICAgdXBkYXRlclxuICApO1xuICByZXR1cm4gbmV4dFVwZGF0ZWQgPT09IG5leHRFeGlzdGluZ1xuICAgID8gZXhpc3RpbmdcbiAgICA6IG5leHRVcGRhdGVkID09PSBOT1RfU0VUXG4gICAgICA/IHJlbW92ZShleGlzdGluZywga2V5KVxuICAgICAgOiBzZXQoXG4gICAgICAgICAgd2FzTm90U2V0ID8gKGluSW1tdXRhYmxlID8gZW1wdHlNYXAoKSA6IHt9KSA6IGV4aXN0aW5nLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICBuZXh0VXBkYXRlZFxuICAgICAgICApO1xufVxuXG5mdW5jdGlvbiBzZXRJbihjb2xsZWN0aW9uLCBrZXlQYXRoLCB2YWx1ZSkge1xuICByZXR1cm4gdXBkYXRlSW4oY29sbGVjdGlvbiwga2V5UGF0aCwgTk9UX1NFVCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0pO1xufVxuXG5mdW5jdGlvbiBzZXRJbiQxKGtleVBhdGgsIHYpIHtcbiAgcmV0dXJuIHNldEluKHRoaXMsIGtleVBhdGgsIHYpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVJbihjb2xsZWN0aW9uLCBrZXlQYXRoKSB7XG4gIHJldHVybiB1cGRhdGVJbihjb2xsZWN0aW9uLCBrZXlQYXRoLCBmdW5jdGlvbiAoKSB7IHJldHVybiBOT1RfU0VUOyB9KTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlSW4oa2V5UGF0aCkge1xuICByZXR1cm4gcmVtb3ZlSW4odGhpcywga2V5UGF0aCk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZShjb2xsZWN0aW9uLCBrZXksIG5vdFNldFZhbHVlLCB1cGRhdGVyKSB7XG4gIHJldHVybiB1cGRhdGVJbihjb2xsZWN0aW9uLCBba2V5XSwgbm90U2V0VmFsdWUsIHVwZGF0ZXIpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGUkMShrZXksIG5vdFNldFZhbHVlLCB1cGRhdGVyKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxXG4gICAgPyBrZXkodGhpcylcbiAgICA6IHVwZGF0ZSh0aGlzLCBrZXksIG5vdFNldFZhbHVlLCB1cGRhdGVyKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSW4kMShrZXlQYXRoLCBub3RTZXRWYWx1ZSwgdXBkYXRlcikge1xuICByZXR1cm4gdXBkYXRlSW4odGhpcywga2V5UGF0aCwgbm90U2V0VmFsdWUsIHVwZGF0ZXIpO1xufVxuXG5mdW5jdGlvbiBtZXJnZSgpIHtcbiAgdmFyIGl0ZXJzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHdoaWxlICggbGVuLS0gKSBpdGVyc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gIHJldHVybiBtZXJnZUludG9LZXllZFdpdGgodGhpcywgaXRlcnMpO1xufVxuXG5mdW5jdGlvbiBtZXJnZVdpdGgobWVyZ2VyKSB7XG4gIHZhciBpdGVycyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgd2hpbGUgKCBsZW4tLSA+IDAgKSBpdGVyc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICBpZiAodHlwZW9mIG1lcmdlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbWVyZ2VyIGZ1bmN0aW9uOiAnICsgbWVyZ2VyKTtcbiAgfVxuICByZXR1cm4gbWVyZ2VJbnRvS2V5ZWRXaXRoKHRoaXMsIGl0ZXJzLCBtZXJnZXIpO1xufVxuXG5mdW5jdGlvbiBtZXJnZUludG9LZXllZFdpdGgoY29sbGVjdGlvbiwgY29sbGVjdGlvbnMsIG1lcmdlcikge1xuICB2YXIgaXRlcnMgPSBbXTtcbiAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaWkrKykge1xuICAgIHZhciBjb2xsZWN0aW9uJDEgPSBLZXllZENvbGxlY3Rpb24oY29sbGVjdGlvbnNbaWldKTtcbiAgICBpZiAoY29sbGVjdGlvbiQxLnNpemUgIT09IDApIHtcbiAgICAgIGl0ZXJzLnB1c2goY29sbGVjdGlvbiQxKTtcbiAgICB9XG4gIH1cbiAgaWYgKGl0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9XG4gIGlmIChcbiAgICBjb2xsZWN0aW9uLnRvU2VxKCkuc2l6ZSA9PT0gMCAmJlxuICAgICFjb2xsZWN0aW9uLl9fb3duZXJJRCAmJlxuICAgIGl0ZXJzLmxlbmd0aCA9PT0gMVxuICApIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbi5jb25zdHJ1Y3RvcihpdGVyc1swXSk7XG4gIH1cbiAgcmV0dXJuIGNvbGxlY3Rpb24ud2l0aE11dGF0aW9ucyhmdW5jdGlvbiAoY29sbGVjdGlvbikge1xuICAgIHZhciBtZXJnZUludG9Db2xsZWN0aW9uID0gbWVyZ2VyXG4gICAgICA/IGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgdXBkYXRlKFxuICAgICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIE5PVF9TRVQsXG4gICAgICAgICAgICBmdW5jdGlvbiAob2xkVmFsKSB7IHJldHVybiAob2xkVmFsID09PSBOT1RfU0VUID8gdmFsdWUgOiBtZXJnZXIob2xkVmFsLCB2YWx1ZSwga2V5KSk7IH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICA6IGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgY29sbGVjdGlvbi5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH07XG4gICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGl0ZXJzLmxlbmd0aDsgaWkrKykge1xuICAgICAgaXRlcnNbaWldLmZvckVhY2gobWVyZ2VJbnRvQ29sbGVjdGlvbik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gbWVyZ2UkMShjb2xsZWN0aW9uKSB7XG4gIHZhciBzb3VyY2VzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICB3aGlsZSAoIGxlbi0tID4gMCApIHNvdXJjZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgcmV0dXJuIG1lcmdlV2l0aFNvdXJjZXMoY29sbGVjdGlvbiwgc291cmNlcyk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlV2l0aCQxKG1lcmdlciwgY29sbGVjdGlvbikge1xuICB2YXIgc291cmNlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgd2hpbGUgKCBsZW4tLSA+IDAgKSBzb3VyY2VzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMiBdO1xuXG4gIHJldHVybiBtZXJnZVdpdGhTb3VyY2VzKGNvbGxlY3Rpb24sIHNvdXJjZXMsIG1lcmdlcik7XG59XG5cbmZ1bmN0aW9uIG1lcmdlRGVlcChjb2xsZWN0aW9uKSB7XG4gIHZhciBzb3VyY2VzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICB3aGlsZSAoIGxlbi0tID4gMCApIHNvdXJjZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgcmV0dXJuIG1lcmdlRGVlcFdpdGhTb3VyY2VzKGNvbGxlY3Rpb24sIHNvdXJjZXMpO1xufVxuXG5mdW5jdGlvbiBtZXJnZURlZXBXaXRoKG1lcmdlciwgY29sbGVjdGlvbikge1xuICB2YXIgc291cmNlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgd2hpbGUgKCBsZW4tLSA+IDAgKSBzb3VyY2VzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMiBdO1xuXG4gIHJldHVybiBtZXJnZURlZXBXaXRoU291cmNlcyhjb2xsZWN0aW9uLCBzb3VyY2VzLCBtZXJnZXIpO1xufVxuXG5mdW5jdGlvbiBtZXJnZURlZXBXaXRoU291cmNlcyhjb2xsZWN0aW9uLCBzb3VyY2VzLCBtZXJnZXIpIHtcbiAgcmV0dXJuIG1lcmdlV2l0aFNvdXJjZXMoY29sbGVjdGlvbiwgc291cmNlcywgZGVlcE1lcmdlcldpdGgobWVyZ2VyKSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlV2l0aFNvdXJjZXMoY29sbGVjdGlvbiwgc291cmNlcywgbWVyZ2VyKSB7XG4gIGlmICghaXNEYXRhU3RydWN0dXJlKGNvbGxlY3Rpb24pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdDYW5ub3QgbWVyZ2UgaW50byBub24tZGF0YS1zdHJ1Y3R1cmUgdmFsdWU6ICcgKyBjb2xsZWN0aW9uXG4gICAgKTtcbiAgfVxuICBpZiAoaXNJbW11dGFibGUoY29sbGVjdGlvbikpIHtcbiAgICByZXR1cm4gdHlwZW9mIG1lcmdlciA9PT0gJ2Z1bmN0aW9uJyAmJiBjb2xsZWN0aW9uLm1lcmdlV2l0aFxuICAgICAgPyBjb2xsZWN0aW9uLm1lcmdlV2l0aC5hcHBseShjb2xsZWN0aW9uLCBbIG1lcmdlciBdLmNvbmNhdCggc291cmNlcyApKVxuICAgICAgOiBjb2xsZWN0aW9uLm1lcmdlXG4gICAgICAgID8gY29sbGVjdGlvbi5tZXJnZS5hcHBseShjb2xsZWN0aW9uLCBzb3VyY2VzKVxuICAgICAgICA6IGNvbGxlY3Rpb24uY29uY2F0LmFwcGx5KGNvbGxlY3Rpb24sIHNvdXJjZXMpO1xuICB9XG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKTtcbiAgdmFyIG1lcmdlZCA9IGNvbGxlY3Rpb247XG4gIHZhciBDb2xsZWN0aW9uJCQxID0gaXNBcnJheSA/IEluZGV4ZWRDb2xsZWN0aW9uIDogS2V5ZWRDb2xsZWN0aW9uO1xuICB2YXIgbWVyZ2VJdGVtID0gaXNBcnJheVxuICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIC8vIENvcHkgb24gd3JpdGVcbiAgICAgICAgaWYgKG1lcmdlZCA9PT0gY29sbGVjdGlvbikge1xuICAgICAgICAgIG1lcmdlZCA9IHNoYWxsb3dDb3B5KG1lcmdlZCk7XG4gICAgICAgIH1cbiAgICAgICAgbWVyZ2VkLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIDogZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgdmFyIGhhc1ZhbCA9IGhhc093blByb3BlcnR5LmNhbGwobWVyZ2VkLCBrZXkpO1xuICAgICAgICB2YXIgbmV4dFZhbCA9XG4gICAgICAgICAgaGFzVmFsICYmIG1lcmdlciA/IG1lcmdlcihtZXJnZWRba2V5XSwgdmFsdWUsIGtleSkgOiB2YWx1ZTtcbiAgICAgICAgaWYgKCFoYXNWYWwgfHwgbmV4dFZhbCAhPT0gbWVyZ2VkW2tleV0pIHtcbiAgICAgICAgICAvLyBDb3B5IG9uIHdyaXRlXG4gICAgICAgICAgaWYgKG1lcmdlZCA9PT0gY29sbGVjdGlvbikge1xuICAgICAgICAgICAgbWVyZ2VkID0gc2hhbGxvd0NvcHkobWVyZ2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVyZ2VkW2tleV0gPSBuZXh0VmFsO1xuICAgICAgICB9XG4gICAgICB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICBDb2xsZWN0aW9uJCQxKHNvdXJjZXNbaV0pLmZvckVhY2gobWVyZ2VJdGVtKTtcbiAgfVxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG5mdW5jdGlvbiBkZWVwTWVyZ2VyV2l0aChtZXJnZXIpIHtcbiAgZnVuY3Rpb24gZGVlcE1lcmdlcihvbGRWYWx1ZSwgbmV3VmFsdWUsIGtleSkge1xuICAgIHJldHVybiBpc0RhdGFTdHJ1Y3R1cmUob2xkVmFsdWUpICYmIGlzRGF0YVN0cnVjdHVyZShuZXdWYWx1ZSlcbiAgICAgID8gbWVyZ2VXaXRoU291cmNlcyhvbGRWYWx1ZSwgW25ld1ZhbHVlXSwgZGVlcE1lcmdlcilcbiAgICAgIDogbWVyZ2VyXG4gICAgICAgID8gbWVyZ2VyKG9sZFZhbHVlLCBuZXdWYWx1ZSwga2V5KVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICB9XG4gIHJldHVybiBkZWVwTWVyZ2VyO1xufVxuXG5mdW5jdGlvbiBtZXJnZURlZXAkMSgpIHtcbiAgdmFyIGl0ZXJzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHdoaWxlICggbGVuLS0gKSBpdGVyc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gIHJldHVybiBtZXJnZURlZXBXaXRoU291cmNlcyh0aGlzLCBpdGVycyk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlRGVlcFdpdGgkMShtZXJnZXIpIHtcbiAgdmFyIGl0ZXJzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICB3aGlsZSAoIGxlbi0tID4gMCApIGl0ZXJzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gIHJldHVybiBtZXJnZURlZXBXaXRoU291cmNlcyh0aGlzLCBpdGVycywgbWVyZ2VyKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VJbihrZXlQYXRoKSB7XG4gIHZhciBpdGVycyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgd2hpbGUgKCBsZW4tLSA+IDAgKSBpdGVyc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICByZXR1cm4gdXBkYXRlSW4odGhpcywga2V5UGF0aCwgZW1wdHlNYXAoKSwgZnVuY3Rpb24gKG0pIHsgcmV0dXJuIG1lcmdlV2l0aFNvdXJjZXMobSwgaXRlcnMpOyB9KTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VEZWVwSW4oa2V5UGF0aCkge1xuICB2YXIgaXRlcnMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gIHdoaWxlICggbGVuLS0gPiAwICkgaXRlcnNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgcmV0dXJuIHVwZGF0ZUluKHRoaXMsIGtleVBhdGgsIGVtcHR5TWFwKCksIGZ1bmN0aW9uIChtKSB7IHJldHVybiBtZXJnZURlZXBXaXRoU291cmNlcyhtLCBpdGVycyk7IH1cbiAgKTtcbn1cblxuZnVuY3Rpb24gd2l0aE11dGF0aW9ucyhmbikge1xuICB2YXIgbXV0YWJsZSA9IHRoaXMuYXNNdXRhYmxlKCk7XG4gIGZuKG11dGFibGUpO1xuICByZXR1cm4gbXV0YWJsZS53YXNBbHRlcmVkKCkgPyBtdXRhYmxlLl9fZW5zdXJlT3duZXIodGhpcy5fX293bmVySUQpIDogdGhpcztcbn1cblxuZnVuY3Rpb24gYXNNdXRhYmxlKCkge1xuICByZXR1cm4gdGhpcy5fX293bmVySUQgPyB0aGlzIDogdGhpcy5fX2Vuc3VyZU93bmVyKG5ldyBPd25lcklEKCkpO1xufVxuXG5mdW5jdGlvbiBhc0ltbXV0YWJsZSgpIHtcbiAgcmV0dXJuIHRoaXMuX19lbnN1cmVPd25lcigpO1xufVxuXG5mdW5jdGlvbiB3YXNBbHRlcmVkKCkge1xuICByZXR1cm4gdGhpcy5fX2FsdGVyZWQ7XG59XG5cbnZhciBNYXAgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChLZXllZENvbGxlY3Rpb24kJDEpIHtcbiAgZnVuY3Rpb24gTWFwKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgID8gZW1wdHlNYXAoKVxuICAgICAgOiBpc01hcCh2YWx1ZSkgJiYgIWlzT3JkZXJlZCh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZVxuICAgICAgICA6IGVtcHR5TWFwKCkud2l0aE11dGF0aW9ucyhmdW5jdGlvbiAobWFwKSB7XG4gICAgICAgICAgICB2YXIgaXRlciA9IEtleWVkQ29sbGVjdGlvbiQkMSh2YWx1ZSk7XG4gICAgICAgICAgICBhc3NlcnROb3RJbmZpbml0ZShpdGVyLnNpemUpO1xuICAgICAgICAgICAgaXRlci5mb3JFYWNoKGZ1bmN0aW9uICh2LCBrKSB7IHJldHVybiBtYXAuc2V0KGssIHYpOyB9KTtcbiAgICAgICAgICB9KTtcbiAgfVxuXG4gIGlmICggS2V5ZWRDb2xsZWN0aW9uJCQxICkgTWFwLl9fcHJvdG9fXyA9IEtleWVkQ29sbGVjdGlvbiQkMTtcbiAgTWFwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEtleWVkQ29sbGVjdGlvbiQkMSAmJiBLZXllZENvbGxlY3Rpb24kJDEucHJvdG90eXBlICk7XG4gIE1hcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXA7XG5cbiAgTWFwLm9mID0gZnVuY3Rpb24gb2YgKCkge1xuICAgIHZhciBrZXlWYWx1ZXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkga2V5VmFsdWVzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICByZXR1cm4gZW1wdHlNYXAoKS53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChtYXApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5VmFsdWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIGlmIChpICsgMSA+PSBrZXlWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHZhbHVlIGZvciBrZXk6ICcgKyBrZXlWYWx1ZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIG1hcC5zZXQoa2V5VmFsdWVzW2ldLCBrZXlWYWx1ZXNbaSArIDFdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBNYXAucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLl9fdG9TdHJpbmcoJ01hcCB7JywgJ30nKTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIEFjY2Vzc1xuXG4gIE1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChrLCBub3RTZXRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9yb290XG4gICAgICA/IHRoaXMuX3Jvb3QuZ2V0KDAsIHVuZGVmaW5lZCwgaywgbm90U2V0VmFsdWUpXG4gICAgICA6IG5vdFNldFZhbHVlO1xuICB9O1xuXG4gIC8vIEBwcmFnbWEgTW9kaWZpY2F0aW9uXG5cbiAgTWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBzZXQgKGssIHYpIHtcbiAgICByZXR1cm4gdXBkYXRlTWFwKHRoaXMsIGssIHYpO1xuICB9O1xuXG4gIE1hcC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlIChrKSB7XG4gICAgcmV0dXJuIHVwZGF0ZU1hcCh0aGlzLCBrLCBOT1RfU0VUKTtcbiAgfTtcblxuICBNYXAucHJvdG90eXBlLmRlbGV0ZUFsbCA9IGZ1bmN0aW9uIGRlbGV0ZUFsbCAoa2V5cykge1xuICAgIHZhciBjb2xsZWN0aW9uID0gQ29sbGVjdGlvbihrZXlzKTtcblxuICAgIGlmIChjb2xsZWN0aW9uLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24gKG1hcCkge1xuICAgICAgY29sbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIG1hcC5yZW1vdmUoa2V5KTsgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgTWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICBpZiAodGhpcy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRoaXMuX19vd25lcklEKSB7XG4gICAgICB0aGlzLnNpemUgPSAwO1xuICAgICAgdGhpcy5fcm9vdCA9IG51bGw7XG4gICAgICB0aGlzLl9faGFzaCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX19hbHRlcmVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gZW1wdHlNYXAoKTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIENvbXBvc2l0aW9uXG5cbiAgTWFwLnByb3RvdHlwZS5zb3J0ID0gZnVuY3Rpb24gc29ydCAoY29tcGFyYXRvcikge1xuICAgIC8vIExhdGUgYmluZGluZ1xuICAgIHJldHVybiBPcmRlcmVkTWFwKHNvcnRGYWN0b3J5KHRoaXMsIGNvbXBhcmF0b3IpKTtcbiAgfTtcblxuICBNYXAucHJvdG90eXBlLnNvcnRCeSA9IGZ1bmN0aW9uIHNvcnRCeSAobWFwcGVyLCBjb21wYXJhdG9yKSB7XG4gICAgLy8gTGF0ZSBiaW5kaW5nXG4gICAgcmV0dXJuIE9yZGVyZWRNYXAoc29ydEZhY3RvcnkodGhpcywgY29tcGFyYXRvciwgbWFwcGVyKSk7XG4gIH07XG5cbiAgTWFwLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAgKG1hcHBlciwgY29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24gKG1hcCkge1xuICAgICAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgbWFwLnNldChrZXksIG1hcHBlci5jYWxsKGNvbnRleHQsIHZhbHVlLCBrZXksIG1hcCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQHByYWdtYSBNdXRhYmlsaXR5XG5cbiAgTWFwLnByb3RvdHlwZS5fX2l0ZXJhdG9yID0gZnVuY3Rpb24gX19pdGVyYXRvciAodHlwZSwgcmV2ZXJzZSkge1xuICAgIHJldHVybiBuZXcgTWFwSXRlcmF0b3IodGhpcywgdHlwZSwgcmV2ZXJzZSk7XG4gIH07XG5cbiAgTWFwLnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgdGhpcy5fcm9vdCAmJlxuICAgICAgdGhpcy5fcm9vdC5pdGVyYXRlKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICBpdGVyYXRpb25zKys7XG4gICAgICAgIHJldHVybiBmbihlbnRyeVsxXSwgZW50cnlbMF0sIHRoaXMkMSk7XG4gICAgICB9LCByZXZlcnNlKTtcbiAgICByZXR1cm4gaXRlcmF0aW9ucztcbiAgfTtcblxuICBNYXAucHJvdG90eXBlLl9fZW5zdXJlT3duZXIgPSBmdW5jdGlvbiBfX2Vuc3VyZU93bmVyIChvd25lcklEKSB7XG4gICAgaWYgKG93bmVySUQgPT09IHRoaXMuX19vd25lcklEKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKCFvd25lcklEKSB7XG4gICAgICBpZiAodGhpcy5zaXplID09PSAwKSB7XG4gICAgICAgIHJldHVybiBlbXB0eU1hcCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fX293bmVySUQgPSBvd25lcklEO1xuICAgICAgdGhpcy5fX2FsdGVyZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gbWFrZU1hcCh0aGlzLnNpemUsIHRoaXMuX3Jvb3QsIG93bmVySUQsIHRoaXMuX19oYXNoKTtcbiAgfTtcblxuICByZXR1cm4gTWFwO1xufShLZXllZENvbGxlY3Rpb24pKTtcblxuTWFwLmlzTWFwID0gaXNNYXA7XG5cbnZhciBNYXBQcm90b3R5cGUgPSBNYXAucHJvdG90eXBlO1xuTWFwUHJvdG90eXBlW0lTX01BUF9TWU1CT0xdID0gdHJ1ZTtcbk1hcFByb3RvdHlwZVtERUxFVEVdID0gTWFwUHJvdG90eXBlLnJlbW92ZTtcbk1hcFByb3RvdHlwZS5yZW1vdmVBbGwgPSBNYXBQcm90b3R5cGUuZGVsZXRlQWxsO1xuTWFwUHJvdG90eXBlLnNldEluID0gc2V0SW4kMTtcbk1hcFByb3RvdHlwZS5yZW1vdmVJbiA9IE1hcFByb3RvdHlwZS5kZWxldGVJbiA9IGRlbGV0ZUluO1xuTWFwUHJvdG90eXBlLnVwZGF0ZSA9IHVwZGF0ZSQxO1xuTWFwUHJvdG90eXBlLnVwZGF0ZUluID0gdXBkYXRlSW4kMTtcbk1hcFByb3RvdHlwZS5tZXJnZSA9IE1hcFByb3RvdHlwZS5jb25jYXQgPSBtZXJnZTtcbk1hcFByb3RvdHlwZS5tZXJnZVdpdGggPSBtZXJnZVdpdGg7XG5NYXBQcm90b3R5cGUubWVyZ2VEZWVwID0gbWVyZ2VEZWVwJDE7XG5NYXBQcm90b3R5cGUubWVyZ2VEZWVwV2l0aCA9IG1lcmdlRGVlcFdpdGgkMTtcbk1hcFByb3RvdHlwZS5tZXJnZUluID0gbWVyZ2VJbjtcbk1hcFByb3RvdHlwZS5tZXJnZURlZXBJbiA9IG1lcmdlRGVlcEluO1xuTWFwUHJvdG90eXBlLndpdGhNdXRhdGlvbnMgPSB3aXRoTXV0YXRpb25zO1xuTWFwUHJvdG90eXBlLndhc0FsdGVyZWQgPSB3YXNBbHRlcmVkO1xuTWFwUHJvdG90eXBlLmFzSW1tdXRhYmxlID0gYXNJbW11dGFibGU7XG5NYXBQcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9pbml0J10gPSBNYXBQcm90b3R5cGUuYXNNdXRhYmxlID0gYXNNdXRhYmxlO1xuTWFwUHJvdG90eXBlWydAQHRyYW5zZHVjZXIvc3RlcCddID0gZnVuY3Rpb24ocmVzdWx0LCBhcnIpIHtcbiAgcmV0dXJuIHJlc3VsdC5zZXQoYXJyWzBdLCBhcnJbMV0pO1xufTtcbk1hcFByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL3Jlc3VsdCddID0gZnVuY3Rpb24ob2JqKSB7XG4gIHJldHVybiBvYmouYXNJbW11dGFibGUoKTtcbn07XG5cbi8vICNwcmFnbWEgVHJpZSBOb2Rlc1xuXG52YXIgQXJyYXlNYXBOb2RlID0gZnVuY3Rpb24gQXJyYXlNYXBOb2RlKG93bmVySUQsIGVudHJpZXMpIHtcbiAgdGhpcy5vd25lcklEID0gb3duZXJJRDtcbiAgdGhpcy5lbnRyaWVzID0gZW50cmllcztcbn07XG5cbkFycmF5TWFwTm9kZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChzaGlmdCwga2V5SGFzaCwga2V5LCBub3RTZXRWYWx1ZSkge1xuICB2YXIgZW50cmllcyA9IHRoaXMuZW50cmllcztcbiAgZm9yICh2YXIgaWkgPSAwLCBsZW4gPSBlbnRyaWVzLmxlbmd0aDsgaWkgPCBsZW47IGlpKyspIHtcbiAgICBpZiAoaXMoa2V5LCBlbnRyaWVzW2lpXVswXSkpIHtcbiAgICAgIHJldHVybiBlbnRyaWVzW2lpXVsxXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vdFNldFZhbHVlO1xufTtcblxuQXJyYXlNYXBOb2RlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKG93bmVySUQsIHNoaWZ0LCBrZXlIYXNoLCBrZXksIHZhbHVlLCBkaWRDaGFuZ2VTaXplLCBkaWRBbHRlcikge1xuICB2YXIgcmVtb3ZlZCA9IHZhbHVlID09PSBOT1RfU0VUO1xuXG4gIHZhciBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuICB2YXIgaWR4ID0gMDtcbiAgdmFyIGxlbiA9IGVudHJpZXMubGVuZ3RoO1xuICBmb3IgKDsgaWR4IDwgbGVuOyBpZHgrKykge1xuICAgIGlmIChpcyhrZXksIGVudHJpZXNbaWR4XVswXSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB2YXIgZXhpc3RzID0gaWR4IDwgbGVuO1xuXG4gIGlmIChleGlzdHMgPyBlbnRyaWVzW2lkeF1bMV0gPT09IHZhbHVlIDogcmVtb3ZlZCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgU2V0UmVmKGRpZEFsdGVyKTtcbiAgKHJlbW92ZWQgfHwgIWV4aXN0cykgJiYgU2V0UmVmKGRpZENoYW5nZVNpemUpO1xuXG4gIGlmIChyZW1vdmVkICYmIGVudHJpZXMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuOyAvLyB1bmRlZmluZWRcbiAgfVxuXG4gIGlmICghZXhpc3RzICYmICFyZW1vdmVkICYmIGVudHJpZXMubGVuZ3RoID49IE1BWF9BUlJBWV9NQVBfU0laRSkge1xuICAgIHJldHVybiBjcmVhdGVOb2Rlcyhvd25lcklELCBlbnRyaWVzLCBrZXksIHZhbHVlKTtcbiAgfVxuXG4gIHZhciBpc0VkaXRhYmxlID0gb3duZXJJRCAmJiBvd25lcklEID09PSB0aGlzLm93bmVySUQ7XG4gIHZhciBuZXdFbnRyaWVzID0gaXNFZGl0YWJsZSA/IGVudHJpZXMgOiBhcnJDb3B5KGVudHJpZXMpO1xuXG4gIGlmIChleGlzdHMpIHtcbiAgICBpZiAocmVtb3ZlZCkge1xuICAgICAgaWR4ID09PSBsZW4gLSAxXG4gICAgICAgID8gbmV3RW50cmllcy5wb3AoKVxuICAgICAgICA6IChuZXdFbnRyaWVzW2lkeF0gPSBuZXdFbnRyaWVzLnBvcCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RW50cmllc1tpZHhdID0gW2tleSwgdmFsdWVdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXdFbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfVxuXG4gIGlmIChpc0VkaXRhYmxlKSB7XG4gICAgdGhpcy5lbnRyaWVzID0gbmV3RW50cmllcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJldHVybiBuZXcgQXJyYXlNYXBOb2RlKG93bmVySUQsIG5ld0VudHJpZXMpO1xufTtcblxudmFyIEJpdG1hcEluZGV4ZWROb2RlID0gZnVuY3Rpb24gQml0bWFwSW5kZXhlZE5vZGUob3duZXJJRCwgYml0bWFwLCBub2Rlcykge1xuICB0aGlzLm93bmVySUQgPSBvd25lcklEO1xuICB0aGlzLmJpdG1hcCA9IGJpdG1hcDtcbiAgdGhpcy5ub2RlcyA9IG5vZGVzO1xufTtcblxuQml0bWFwSW5kZXhlZE5vZGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoc2hpZnQsIGtleUhhc2gsIGtleSwgbm90U2V0VmFsdWUpIHtcbiAgaWYgKGtleUhhc2ggPT09IHVuZGVmaW5lZCkge1xuICAgIGtleUhhc2ggPSBoYXNoKGtleSk7XG4gIH1cbiAgdmFyIGJpdCA9IDEgPDwgKChzaGlmdCA9PT0gMCA/IGtleUhhc2ggOiBrZXlIYXNoID4+PiBzaGlmdCkgJiBNQVNLKTtcbiAgdmFyIGJpdG1hcCA9IHRoaXMuYml0bWFwO1xuICByZXR1cm4gKGJpdG1hcCAmIGJpdCkgPT09IDBcbiAgICA/IG5vdFNldFZhbHVlXG4gICAgOiB0aGlzLm5vZGVzW3BvcENvdW50KGJpdG1hcCAmIChiaXQgLSAxKSldLmdldChcbiAgICAgICAgc2hpZnQgKyBTSElGVCxcbiAgICAgICAga2V5SGFzaCxcbiAgICAgICAga2V5LFxuICAgICAgICBub3RTZXRWYWx1ZVxuICAgICAgKTtcbn07XG5cbkJpdG1hcEluZGV4ZWROb2RlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKG93bmVySUQsIHNoaWZ0LCBrZXlIYXNoLCBrZXksIHZhbHVlLCBkaWRDaGFuZ2VTaXplLCBkaWRBbHRlcikge1xuICBpZiAoa2V5SGFzaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAga2V5SGFzaCA9IGhhc2goa2V5KTtcbiAgfVxuICB2YXIga2V5SGFzaEZyYWcgPSAoc2hpZnQgPT09IDAgPyBrZXlIYXNoIDoga2V5SGFzaCA+Pj4gc2hpZnQpICYgTUFTSztcbiAgdmFyIGJpdCA9IDEgPDwga2V5SGFzaEZyYWc7XG4gIHZhciBiaXRtYXAgPSB0aGlzLmJpdG1hcDtcbiAgdmFyIGV4aXN0cyA9IChiaXRtYXAgJiBiaXQpICE9PSAwO1xuXG4gIGlmICghZXhpc3RzICYmIHZhbHVlID09PSBOT1RfU0VUKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgaWR4ID0gcG9wQ291bnQoYml0bWFwICYgKGJpdCAtIDEpKTtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcztcbiAgdmFyIG5vZGUgPSBleGlzdHMgPyBub2Rlc1tpZHhdIDogdW5kZWZpbmVkO1xuICB2YXIgbmV3Tm9kZSA9IHVwZGF0ZU5vZGUoXG4gICAgbm9kZSxcbiAgICBvd25lcklELFxuICAgIHNoaWZ0ICsgU0hJRlQsXG4gICAga2V5SGFzaCxcbiAgICBrZXksXG4gICAgdmFsdWUsXG4gICAgZGlkQ2hhbmdlU2l6ZSxcbiAgICBkaWRBbHRlclxuICApO1xuXG4gIGlmIChuZXdOb2RlID09PSBub2RlKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAoIWV4aXN0cyAmJiBuZXdOb2RlICYmIG5vZGVzLmxlbmd0aCA+PSBNQVhfQklUTUFQX0lOREVYRURfU0laRSkge1xuICAgIHJldHVybiBleHBhbmROb2Rlcyhvd25lcklELCBub2RlcywgYml0bWFwLCBrZXlIYXNoRnJhZywgbmV3Tm9kZSk7XG4gIH1cblxuICBpZiAoXG4gICAgZXhpc3RzICYmXG4gICAgIW5ld05vZGUgJiZcbiAgICBub2Rlcy5sZW5ndGggPT09IDIgJiZcbiAgICBpc0xlYWZOb2RlKG5vZGVzW2lkeCBeIDFdKVxuICApIHtcbiAgICByZXR1cm4gbm9kZXNbaWR4IF4gMV07XG4gIH1cblxuICBpZiAoZXhpc3RzICYmIG5ld05vZGUgJiYgbm9kZXMubGVuZ3RoID09PSAxICYmIGlzTGVhZk5vZGUobmV3Tm9kZSkpIHtcbiAgICByZXR1cm4gbmV3Tm9kZTtcbiAgfVxuXG4gIHZhciBpc0VkaXRhYmxlID0gb3duZXJJRCAmJiBvd25lcklEID09PSB0aGlzLm93bmVySUQ7XG4gIHZhciBuZXdCaXRtYXAgPSBleGlzdHMgPyAobmV3Tm9kZSA/IGJpdG1hcCA6IGJpdG1hcCBeIGJpdCkgOiBiaXRtYXAgfCBiaXQ7XG4gIHZhciBuZXdOb2RlcyA9IGV4aXN0c1xuICAgID8gbmV3Tm9kZVxuICAgICAgPyBzZXRBdChub2RlcywgaWR4LCBuZXdOb2RlLCBpc0VkaXRhYmxlKVxuICAgICAgOiBzcGxpY2VPdXQobm9kZXMsIGlkeCwgaXNFZGl0YWJsZSlcbiAgICA6IHNwbGljZUluKG5vZGVzLCBpZHgsIG5ld05vZGUsIGlzRWRpdGFibGUpO1xuXG4gIGlmIChpc0VkaXRhYmxlKSB7XG4gICAgdGhpcy5iaXRtYXAgPSBuZXdCaXRtYXA7XG4gICAgdGhpcy5ub2RlcyA9IG5ld05vZGVzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBCaXRtYXBJbmRleGVkTm9kZShvd25lcklELCBuZXdCaXRtYXAsIG5ld05vZGVzKTtcbn07XG5cbnZhciBIYXNoQXJyYXlNYXBOb2RlID0gZnVuY3Rpb24gSGFzaEFycmF5TWFwTm9kZShvd25lcklELCBjb3VudCwgbm9kZXMpIHtcbiAgdGhpcy5vd25lcklEID0gb3duZXJJRDtcbiAgdGhpcy5jb3VudCA9IGNvdW50O1xuICB0aGlzLm5vZGVzID0gbm9kZXM7XG59O1xuXG5IYXNoQXJyYXlNYXBOb2RlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKHNoaWZ0LCBrZXlIYXNoLCBrZXksIG5vdFNldFZhbHVlKSB7XG4gIGlmIChrZXlIYXNoID09PSB1bmRlZmluZWQpIHtcbiAgICBrZXlIYXNoID0gaGFzaChrZXkpO1xuICB9XG4gIHZhciBpZHggPSAoc2hpZnQgPT09IDAgPyBrZXlIYXNoIDoga2V5SGFzaCA+Pj4gc2hpZnQpICYgTUFTSztcbiAgdmFyIG5vZGUgPSB0aGlzLm5vZGVzW2lkeF07XG4gIHJldHVybiBub2RlXG4gICAgPyBub2RlLmdldChzaGlmdCArIFNISUZULCBrZXlIYXNoLCBrZXksIG5vdFNldFZhbHVlKVxuICAgIDogbm90U2V0VmFsdWU7XG59O1xuXG5IYXNoQXJyYXlNYXBOb2RlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKG93bmVySUQsIHNoaWZ0LCBrZXlIYXNoLCBrZXksIHZhbHVlLCBkaWRDaGFuZ2VTaXplLCBkaWRBbHRlcikge1xuICBpZiAoa2V5SGFzaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAga2V5SGFzaCA9IGhhc2goa2V5KTtcbiAgfVxuICB2YXIgaWR4ID0gKHNoaWZ0ID09PSAwID8ga2V5SGFzaCA6IGtleUhhc2ggPj4+IHNoaWZ0KSAmIE1BU0s7XG4gIHZhciByZW1vdmVkID0gdmFsdWUgPT09IE5PVF9TRVQ7XG4gIHZhciBub2RlcyA9IHRoaXMubm9kZXM7XG4gIHZhciBub2RlID0gbm9kZXNbaWR4XTtcblxuICBpZiAocmVtb3ZlZCAmJiAhbm9kZSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIG5ld05vZGUgPSB1cGRhdGVOb2RlKFxuICAgIG5vZGUsXG4gICAgb3duZXJJRCxcbiAgICBzaGlmdCArIFNISUZULFxuICAgIGtleUhhc2gsXG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgIGRpZENoYW5nZVNpemUsXG4gICAgZGlkQWx0ZXJcbiAgKTtcbiAgaWYgKG5ld05vZGUgPT09IG5vZGUpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBuZXdDb3VudCA9IHRoaXMuY291bnQ7XG4gIGlmICghbm9kZSkge1xuICAgIG5ld0NvdW50Kys7XG4gIH0gZWxzZSBpZiAoIW5ld05vZGUpIHtcbiAgICBuZXdDb3VudC0tO1xuICAgIGlmIChuZXdDb3VudCA8IE1JTl9IQVNIX0FSUkFZX01BUF9TSVpFKSB7XG4gICAgICByZXR1cm4gcGFja05vZGVzKG93bmVySUQsIG5vZGVzLCBuZXdDb3VudCwgaWR4KTtcbiAgICB9XG4gIH1cblxuICB2YXIgaXNFZGl0YWJsZSA9IG93bmVySUQgJiYgb3duZXJJRCA9PT0gdGhpcy5vd25lcklEO1xuICB2YXIgbmV3Tm9kZXMgPSBzZXRBdChub2RlcywgaWR4LCBuZXdOb2RlLCBpc0VkaXRhYmxlKTtcblxuICBpZiAoaXNFZGl0YWJsZSkge1xuICAgIHRoaXMuY291bnQgPSBuZXdDb3VudDtcbiAgICB0aGlzLm5vZGVzID0gbmV3Tm9kZXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZXR1cm4gbmV3IEhhc2hBcnJheU1hcE5vZGUob3duZXJJRCwgbmV3Q291bnQsIG5ld05vZGVzKTtcbn07XG5cbnZhciBIYXNoQ29sbGlzaW9uTm9kZSA9IGZ1bmN0aW9uIEhhc2hDb2xsaXNpb25Ob2RlKG93bmVySUQsIGtleUhhc2gsIGVudHJpZXMpIHtcbiAgdGhpcy5vd25lcklEID0gb3duZXJJRDtcbiAgdGhpcy5rZXlIYXNoID0ga2V5SGFzaDtcbiAgdGhpcy5lbnRyaWVzID0gZW50cmllcztcbn07XG5cbkhhc2hDb2xsaXNpb25Ob2RlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKHNoaWZ0LCBrZXlIYXNoLCBrZXksIG5vdFNldFZhbHVlKSB7XG4gIHZhciBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuICBmb3IgKHZhciBpaSA9IDAsIGxlbiA9IGVudHJpZXMubGVuZ3RoOyBpaSA8IGxlbjsgaWkrKykge1xuICAgIGlmIChpcyhrZXksIGVudHJpZXNbaWldWzBdKSkge1xuICAgICAgcmV0dXJuIGVudHJpZXNbaWldWzFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm90U2V0VmFsdWU7XG59O1xuXG5IYXNoQ29sbGlzaW9uTm9kZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlIChvd25lcklELCBzaGlmdCwga2V5SGFzaCwga2V5LCB2YWx1ZSwgZGlkQ2hhbmdlU2l6ZSwgZGlkQWx0ZXIpIHtcbiAgaWYgKGtleUhhc2ggPT09IHVuZGVmaW5lZCkge1xuICAgIGtleUhhc2ggPSBoYXNoKGtleSk7XG4gIH1cblxuICB2YXIgcmVtb3ZlZCA9IHZhbHVlID09PSBOT1RfU0VUO1xuXG4gIGlmIChrZXlIYXNoICE9PSB0aGlzLmtleUhhc2gpIHtcbiAgICBpZiAocmVtb3ZlZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIFNldFJlZihkaWRBbHRlcik7XG4gICAgU2V0UmVmKGRpZENoYW5nZVNpemUpO1xuICAgIHJldHVybiBtZXJnZUludG9Ob2RlKHRoaXMsIG93bmVySUQsIHNoaWZ0LCBrZXlIYXNoLCBba2V5LCB2YWx1ZV0pO1xuICB9XG5cbiAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG4gIHZhciBpZHggPSAwO1xuICB2YXIgbGVuID0gZW50cmllcy5sZW5ndGg7XG4gIGZvciAoOyBpZHggPCBsZW47IGlkeCsrKSB7XG4gICAgaWYgKGlzKGtleSwgZW50cmllc1tpZHhdWzBdKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHZhciBleGlzdHMgPSBpZHggPCBsZW47XG5cbiAgaWYgKGV4aXN0cyA/IGVudHJpZXNbaWR4XVsxXSA9PT0gdmFsdWUgOiByZW1vdmVkKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBTZXRSZWYoZGlkQWx0ZXIpO1xuICAocmVtb3ZlZCB8fCAhZXhpc3RzKSAmJiBTZXRSZWYoZGlkQ2hhbmdlU2l6ZSk7XG5cbiAgaWYgKHJlbW92ZWQgJiYgbGVuID09PSAyKSB7XG4gICAgcmV0dXJuIG5ldyBWYWx1ZU5vZGUob3duZXJJRCwgdGhpcy5rZXlIYXNoLCBlbnRyaWVzW2lkeCBeIDFdKTtcbiAgfVxuXG4gIHZhciBpc0VkaXRhYmxlID0gb3duZXJJRCAmJiBvd25lcklEID09PSB0aGlzLm93bmVySUQ7XG4gIHZhciBuZXdFbnRyaWVzID0gaXNFZGl0YWJsZSA/IGVudHJpZXMgOiBhcnJDb3B5KGVudHJpZXMpO1xuXG4gIGlmIChleGlzdHMpIHtcbiAgICBpZiAocmVtb3ZlZCkge1xuICAgICAgaWR4ID09PSBsZW4gLSAxXG4gICAgICAgID8gbmV3RW50cmllcy5wb3AoKVxuICAgICAgICA6IChuZXdFbnRyaWVzW2lkeF0gPSBuZXdFbnRyaWVzLnBvcCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RW50cmllc1tpZHhdID0gW2tleSwgdmFsdWVdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXdFbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfVxuXG4gIGlmIChpc0VkaXRhYmxlKSB7XG4gICAgdGhpcy5lbnRyaWVzID0gbmV3RW50cmllcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJldHVybiBuZXcgSGFzaENvbGxpc2lvbk5vZGUob3duZXJJRCwgdGhpcy5rZXlIYXNoLCBuZXdFbnRyaWVzKTtcbn07XG5cbnZhciBWYWx1ZU5vZGUgPSBmdW5jdGlvbiBWYWx1ZU5vZGUob3duZXJJRCwga2V5SGFzaCwgZW50cnkpIHtcbiAgdGhpcy5vd25lcklEID0gb3duZXJJRDtcbiAgdGhpcy5rZXlIYXNoID0ga2V5SGFzaDtcbiAgdGhpcy5lbnRyeSA9IGVudHJ5O1xufTtcblxuVmFsdWVOb2RlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKHNoaWZ0LCBrZXlIYXNoLCBrZXksIG5vdFNldFZhbHVlKSB7XG4gIHJldHVybiBpcyhrZXksIHRoaXMuZW50cnlbMF0pID8gdGhpcy5lbnRyeVsxXSA6IG5vdFNldFZhbHVlO1xufTtcblxuVmFsdWVOb2RlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKG93bmVySUQsIHNoaWZ0LCBrZXlIYXNoLCBrZXksIHZhbHVlLCBkaWRDaGFuZ2VTaXplLCBkaWRBbHRlcikge1xuICB2YXIgcmVtb3ZlZCA9IHZhbHVlID09PSBOT1RfU0VUO1xuICB2YXIga2V5TWF0Y2ggPSBpcyhrZXksIHRoaXMuZW50cnlbMF0pO1xuICBpZiAoa2V5TWF0Y2ggPyB2YWx1ZSA9PT0gdGhpcy5lbnRyeVsxXSA6IHJlbW92ZWQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIFNldFJlZihkaWRBbHRlcik7XG5cbiAgaWYgKHJlbW92ZWQpIHtcbiAgICBTZXRSZWYoZGlkQ2hhbmdlU2l6ZSk7XG4gICAgcmV0dXJuOyAvLyB1bmRlZmluZWRcbiAgfVxuXG4gIGlmIChrZXlNYXRjaCkge1xuICAgIGlmIChvd25lcklEICYmIG93bmVySUQgPT09IHRoaXMub3duZXJJRCkge1xuICAgICAgdGhpcy5lbnRyeVsxXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVmFsdWVOb2RlKG93bmVySUQsIHRoaXMua2V5SGFzaCwgW2tleSwgdmFsdWVdKTtcbiAgfVxuXG4gIFNldFJlZihkaWRDaGFuZ2VTaXplKTtcbiAgcmV0dXJuIG1lcmdlSW50b05vZGUodGhpcywgb3duZXJJRCwgc2hpZnQsIGhhc2goa2V5KSwgW2tleSwgdmFsdWVdKTtcbn07XG5cbi8vICNwcmFnbWEgSXRlcmF0b3JzXG5cbkFycmF5TWFwTm9kZS5wcm90b3R5cGUuaXRlcmF0ZSA9IEhhc2hDb2xsaXNpb25Ob2RlLnByb3RvdHlwZS5pdGVyYXRlID0gZnVuY3Rpb24oXG4gIGZuLFxuICByZXZlcnNlXG4pIHtcbiAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG4gIGZvciAodmFyIGlpID0gMCwgbWF4SW5kZXggPSBlbnRyaWVzLmxlbmd0aCAtIDE7IGlpIDw9IG1heEluZGV4OyBpaSsrKSB7XG4gICAgaWYgKGZuKGVudHJpZXNbcmV2ZXJzZSA/IG1heEluZGV4IC0gaWkgOiBpaV0pID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufTtcblxuQml0bWFwSW5kZXhlZE5vZGUucHJvdG90eXBlLml0ZXJhdGUgPSBIYXNoQXJyYXlNYXBOb2RlLnByb3RvdHlwZS5pdGVyYXRlID0gZnVuY3Rpb24oXG4gIGZuLFxuICByZXZlcnNlXG4pIHtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcztcbiAgZm9yICh2YXIgaWkgPSAwLCBtYXhJbmRleCA9IG5vZGVzLmxlbmd0aCAtIDE7IGlpIDw9IG1heEluZGV4OyBpaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBub2Rlc1tyZXZlcnNlID8gbWF4SW5kZXggLSBpaSA6IGlpXTtcbiAgICBpZiAobm9kZSAmJiBub2RlLml0ZXJhdGUoZm4sIHJldmVyc2UpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5WYWx1ZU5vZGUucHJvdG90eXBlLml0ZXJhdGUgPSBmdW5jdGlvbihmbiwgcmV2ZXJzZSkge1xuICByZXR1cm4gZm4odGhpcy5lbnRyeSk7XG59O1xuXG52YXIgTWFwSXRlcmF0b3IgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChJdGVyYXRvciQkMSkge1xuICBmdW5jdGlvbiBNYXBJdGVyYXRvcihtYXAsIHR5cGUsIHJldmVyc2UpIHtcbiAgICB0aGlzLl90eXBlID0gdHlwZTtcbiAgICB0aGlzLl9yZXZlcnNlID0gcmV2ZXJzZTtcbiAgICB0aGlzLl9zdGFjayA9IG1hcC5fcm9vdCAmJiBtYXBJdGVyYXRvckZyYW1lKG1hcC5fcm9vdCk7XG4gIH1cblxuICBpZiAoIEl0ZXJhdG9yJCQxICkgTWFwSXRlcmF0b3IuX19wcm90b19fID0gSXRlcmF0b3IkJDE7XG4gIE1hcEl0ZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEl0ZXJhdG9yJCQxICYmIEl0ZXJhdG9yJCQxLnByb3RvdHlwZSApO1xuICBNYXBJdGVyYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXBJdGVyYXRvcjtcblxuICBNYXBJdGVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uIG5leHQgKCkge1xuICAgIHZhciB0eXBlID0gdGhpcy5fdHlwZTtcbiAgICB2YXIgc3RhY2sgPSB0aGlzLl9zdGFjaztcbiAgICB3aGlsZSAoc3RhY2spIHtcbiAgICAgIHZhciBub2RlID0gc3RhY2subm9kZTtcbiAgICAgIHZhciBpbmRleCA9IHN0YWNrLmluZGV4Kys7XG4gICAgICB2YXIgbWF4SW5kZXggPSAodm9pZCAwKTtcbiAgICAgIGlmIChub2RlLmVudHJ5KSB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBtYXBJdGVyYXRvclZhbHVlKHR5cGUsIG5vZGUuZW50cnkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuZW50cmllcykge1xuICAgICAgICBtYXhJbmRleCA9IG5vZGUuZW50cmllcy5sZW5ndGggLSAxO1xuICAgICAgICBpZiAoaW5kZXggPD0gbWF4SW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gbWFwSXRlcmF0b3JWYWx1ZShcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBub2RlLmVudHJpZXNbdGhpcy5fcmV2ZXJzZSA/IG1heEluZGV4IC0gaW5kZXggOiBpbmRleF1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXhJbmRleCA9IG5vZGUubm9kZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKGluZGV4IDw9IG1heEluZGV4KSB7XG4gICAgICAgICAgdmFyIHN1Yk5vZGUgPSBub2RlLm5vZGVzW3RoaXMuX3JldmVyc2UgPyBtYXhJbmRleCAtIGluZGV4IDogaW5kZXhdO1xuICAgICAgICAgIGlmIChzdWJOb2RlKSB7XG4gICAgICAgICAgICBpZiAoc3ViTm9kZS5lbnRyeSkge1xuICAgICAgICAgICAgICByZXR1cm4gbWFwSXRlcmF0b3JWYWx1ZSh0eXBlLCBzdWJOb2RlLmVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrID0gdGhpcy5fc3RhY2sgPSBtYXBJdGVyYXRvckZyYW1lKHN1Yk5vZGUsIHN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YWNrID0gdGhpcy5fc3RhY2sgPSB0aGlzLl9zdGFjay5fX3ByZXY7XG4gICAgfVxuICAgIHJldHVybiBpdGVyYXRvckRvbmUoKTtcbiAgfTtcblxuICByZXR1cm4gTWFwSXRlcmF0b3I7XG59KEl0ZXJhdG9yKSk7XG5cbmZ1bmN0aW9uIG1hcEl0ZXJhdG9yVmFsdWUodHlwZSwgZW50cnkpIHtcbiAgcmV0dXJuIGl0ZXJhdG9yVmFsdWUodHlwZSwgZW50cnlbMF0sIGVudHJ5WzFdKTtcbn1cblxuZnVuY3Rpb24gbWFwSXRlcmF0b3JGcmFtZShub2RlLCBwcmV2KSB7XG4gIHJldHVybiB7XG4gICAgbm9kZTogbm9kZSxcbiAgICBpbmRleDogMCxcbiAgICBfX3ByZXY6IHByZXYsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1ha2VNYXAoc2l6ZSwgcm9vdCwgb3duZXJJRCwgaGFzaCQkMSkge1xuICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShNYXBQcm90b3R5cGUpO1xuICBtYXAuc2l6ZSA9IHNpemU7XG4gIG1hcC5fcm9vdCA9IHJvb3Q7XG4gIG1hcC5fX293bmVySUQgPSBvd25lcklEO1xuICBtYXAuX19oYXNoID0gaGFzaCQkMTtcbiAgbWFwLl9fYWx0ZXJlZCA9IGZhbHNlO1xuICByZXR1cm4gbWFwO1xufVxuXG52YXIgRU1QVFlfTUFQO1xuZnVuY3Rpb24gZW1wdHlNYXAoKSB7XG4gIHJldHVybiBFTVBUWV9NQVAgfHwgKEVNUFRZX01BUCA9IG1ha2VNYXAoMCkpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNYXAobWFwLCBrLCB2KSB7XG4gIHZhciBuZXdSb290O1xuICB2YXIgbmV3U2l6ZTtcbiAgaWYgKCFtYXAuX3Jvb3QpIHtcbiAgICBpZiAodiA9PT0gTk9UX1NFVCkge1xuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG4gICAgbmV3U2l6ZSA9IDE7XG4gICAgbmV3Um9vdCA9IG5ldyBBcnJheU1hcE5vZGUobWFwLl9fb3duZXJJRCwgW1trLCB2XV0pO1xuICB9IGVsc2Uge1xuICAgIHZhciBkaWRDaGFuZ2VTaXplID0gTWFrZVJlZigpO1xuICAgIHZhciBkaWRBbHRlciA9IE1ha2VSZWYoKTtcbiAgICBuZXdSb290ID0gdXBkYXRlTm9kZShcbiAgICAgIG1hcC5fcm9vdCxcbiAgICAgIG1hcC5fX293bmVySUQsXG4gICAgICAwLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgayxcbiAgICAgIHYsXG4gICAgICBkaWRDaGFuZ2VTaXplLFxuICAgICAgZGlkQWx0ZXJcbiAgICApO1xuICAgIGlmICghZGlkQWx0ZXIudmFsdWUpIHtcbiAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuICAgIG5ld1NpemUgPSBtYXAuc2l6ZSArIChkaWRDaGFuZ2VTaXplLnZhbHVlID8gKHYgPT09IE5PVF9TRVQgPyAtMSA6IDEpIDogMCk7XG4gIH1cbiAgaWYgKG1hcC5fX293bmVySUQpIHtcbiAgICBtYXAuc2l6ZSA9IG5ld1NpemU7XG4gICAgbWFwLl9yb290ID0gbmV3Um9vdDtcbiAgICBtYXAuX19oYXNoID0gdW5kZWZpbmVkO1xuICAgIG1hcC5fX2FsdGVyZWQgPSB0cnVlO1xuICAgIHJldHVybiBtYXA7XG4gIH1cbiAgcmV0dXJuIG5ld1Jvb3QgPyBtYWtlTWFwKG5ld1NpemUsIG5ld1Jvb3QpIDogZW1wdHlNYXAoKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTm9kZShcbiAgbm9kZSxcbiAgb3duZXJJRCxcbiAgc2hpZnQsXG4gIGtleUhhc2gsXG4gIGtleSxcbiAgdmFsdWUsXG4gIGRpZENoYW5nZVNpemUsXG4gIGRpZEFsdGVyXG4pIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgaWYgKHZhbHVlID09PSBOT1RfU0VUKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgU2V0UmVmKGRpZEFsdGVyKTtcbiAgICBTZXRSZWYoZGlkQ2hhbmdlU2l6ZSk7XG4gICAgcmV0dXJuIG5ldyBWYWx1ZU5vZGUob3duZXJJRCwga2V5SGFzaCwgW2tleSwgdmFsdWVdKTtcbiAgfVxuICByZXR1cm4gbm9kZS51cGRhdGUoXG4gICAgb3duZXJJRCxcbiAgICBzaGlmdCxcbiAgICBrZXlIYXNoLFxuICAgIGtleSxcbiAgICB2YWx1ZSxcbiAgICBkaWRDaGFuZ2VTaXplLFxuICAgIGRpZEFsdGVyXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzTGVhZk5vZGUobm9kZSkge1xuICByZXR1cm4gKFxuICAgIG5vZGUuY29uc3RydWN0b3IgPT09IFZhbHVlTm9kZSB8fCBub2RlLmNvbnN0cnVjdG9yID09PSBIYXNoQ29sbGlzaW9uTm9kZVxuICApO1xufVxuXG5mdW5jdGlvbiBtZXJnZUludG9Ob2RlKG5vZGUsIG93bmVySUQsIHNoaWZ0LCBrZXlIYXNoLCBlbnRyeSkge1xuICBpZiAobm9kZS5rZXlIYXNoID09PSBrZXlIYXNoKSB7XG4gICAgcmV0dXJuIG5ldyBIYXNoQ29sbGlzaW9uTm9kZShvd25lcklELCBrZXlIYXNoLCBbbm9kZS5lbnRyeSwgZW50cnldKTtcbiAgfVxuXG4gIHZhciBpZHgxID0gKHNoaWZ0ID09PSAwID8gbm9kZS5rZXlIYXNoIDogbm9kZS5rZXlIYXNoID4+PiBzaGlmdCkgJiBNQVNLO1xuICB2YXIgaWR4MiA9IChzaGlmdCA9PT0gMCA/IGtleUhhc2ggOiBrZXlIYXNoID4+PiBzaGlmdCkgJiBNQVNLO1xuXG4gIHZhciBuZXdOb2RlO1xuICB2YXIgbm9kZXMgPVxuICAgIGlkeDEgPT09IGlkeDJcbiAgICAgID8gW21lcmdlSW50b05vZGUobm9kZSwgb3duZXJJRCwgc2hpZnQgKyBTSElGVCwga2V5SGFzaCwgZW50cnkpXVxuICAgICAgOiAoKG5ld05vZGUgPSBuZXcgVmFsdWVOb2RlKG93bmVySUQsIGtleUhhc2gsIGVudHJ5KSksXG4gICAgICAgIGlkeDEgPCBpZHgyID8gW25vZGUsIG5ld05vZGVdIDogW25ld05vZGUsIG5vZGVdKTtcblxuICByZXR1cm4gbmV3IEJpdG1hcEluZGV4ZWROb2RlKG93bmVySUQsICgxIDw8IGlkeDEpIHwgKDEgPDwgaWR4MiksIG5vZGVzKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTm9kZXMob3duZXJJRCwgZW50cmllcywga2V5LCB2YWx1ZSkge1xuICBpZiAoIW93bmVySUQpIHtcbiAgICBvd25lcklEID0gbmV3IE93bmVySUQoKTtcbiAgfVxuICB2YXIgbm9kZSA9IG5ldyBWYWx1ZU5vZGUob3duZXJJRCwgaGFzaChrZXkpLCBba2V5LCB2YWx1ZV0pO1xuICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgZW50cmllcy5sZW5ndGg7IGlpKyspIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2lpXTtcbiAgICBub2RlID0gbm9kZS51cGRhdGUob3duZXJJRCwgMCwgdW5kZWZpbmVkLCBlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBwYWNrTm9kZXMob3duZXJJRCwgbm9kZXMsIGNvdW50LCBleGNsdWRpbmcpIHtcbiAgdmFyIGJpdG1hcCA9IDA7XG4gIHZhciBwYWNrZWRJSSA9IDA7XG4gIHZhciBwYWNrZWROb2RlcyA9IG5ldyBBcnJheShjb3VudCk7XG4gIGZvciAodmFyIGlpID0gMCwgYml0ID0gMSwgbGVuID0gbm9kZXMubGVuZ3RoOyBpaSA8IGxlbjsgaWkrKywgYml0IDw8PSAxKSB7XG4gICAgdmFyIG5vZGUgPSBub2Rlc1tpaV07XG4gICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCAmJiBpaSAhPT0gZXhjbHVkaW5nKSB7XG4gICAgICBiaXRtYXAgfD0gYml0O1xuICAgICAgcGFja2VkTm9kZXNbcGFja2VkSUkrK10gPSBub2RlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IEJpdG1hcEluZGV4ZWROb2RlKG93bmVySUQsIGJpdG1hcCwgcGFja2VkTm9kZXMpO1xufVxuXG5mdW5jdGlvbiBleHBhbmROb2Rlcyhvd25lcklELCBub2RlcywgYml0bWFwLCBpbmNsdWRpbmcsIG5vZGUpIHtcbiAgdmFyIGNvdW50ID0gMDtcbiAgdmFyIGV4cGFuZGVkTm9kZXMgPSBuZXcgQXJyYXkoU0laRSk7XG4gIGZvciAodmFyIGlpID0gMDsgYml0bWFwICE9PSAwOyBpaSsrLCBiaXRtYXAgPj4+PSAxKSB7XG4gICAgZXhwYW5kZWROb2Rlc1tpaV0gPSBiaXRtYXAgJiAxID8gbm9kZXNbY291bnQrK10gOiB1bmRlZmluZWQ7XG4gIH1cbiAgZXhwYW5kZWROb2Rlc1tpbmNsdWRpbmddID0gbm9kZTtcbiAgcmV0dXJuIG5ldyBIYXNoQXJyYXlNYXBOb2RlKG93bmVySUQsIGNvdW50ICsgMSwgZXhwYW5kZWROb2Rlcyk7XG59XG5cbmZ1bmN0aW9uIHBvcENvdW50KHgpIHtcbiAgeCAtPSAoeCA+PiAxKSAmIDB4NTU1NTU1NTU7XG4gIHggPSAoeCAmIDB4MzMzMzMzMzMpICsgKCh4ID4+IDIpICYgMHgzMzMzMzMzMyk7XG4gIHggPSAoeCArICh4ID4+IDQpKSAmIDB4MGYwZjBmMGY7XG4gIHggKz0geCA+PiA4O1xuICB4ICs9IHggPj4gMTY7XG4gIHJldHVybiB4ICYgMHg3Zjtcbn1cblxuZnVuY3Rpb24gc2V0QXQoYXJyYXksIGlkeCwgdmFsLCBjYW5FZGl0KSB7XG4gIHZhciBuZXdBcnJheSA9IGNhbkVkaXQgPyBhcnJheSA6IGFyckNvcHkoYXJyYXkpO1xuICBuZXdBcnJheVtpZHhdID0gdmFsO1xuICByZXR1cm4gbmV3QXJyYXk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZUluKGFycmF5LCBpZHgsIHZhbCwgY2FuRWRpdCkge1xuICB2YXIgbmV3TGVuID0gYXJyYXkubGVuZ3RoICsgMTtcbiAgaWYgKGNhbkVkaXQgJiYgaWR4ICsgMSA9PT0gbmV3TGVuKSB7XG4gICAgYXJyYXlbaWR4XSA9IHZhbDtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgdmFyIG5ld0FycmF5ID0gbmV3IEFycmF5KG5ld0xlbik7XG4gIHZhciBhZnRlciA9IDA7XG4gIGZvciAodmFyIGlpID0gMDsgaWkgPCBuZXdMZW47IGlpKyspIHtcbiAgICBpZiAoaWkgPT09IGlkeCkge1xuICAgICAgbmV3QXJyYXlbaWldID0gdmFsO1xuICAgICAgYWZ0ZXIgPSAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3QXJyYXlbaWldID0gYXJyYXlbaWkgKyBhZnRlcl07XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdBcnJheTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT3V0KGFycmF5LCBpZHgsIGNhbkVkaXQpIHtcbiAgdmFyIG5ld0xlbiA9IGFycmF5Lmxlbmd0aCAtIDE7XG4gIGlmIChjYW5FZGl0ICYmIGlkeCA9PT0gbmV3TGVuKSB7XG4gICAgYXJyYXkucG9wKCk7XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIHZhciBuZXdBcnJheSA9IG5ldyBBcnJheShuZXdMZW4pO1xuICB2YXIgYWZ0ZXIgPSAwO1xuICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgbmV3TGVuOyBpaSsrKSB7XG4gICAgaWYgKGlpID09PSBpZHgpIHtcbiAgICAgIGFmdGVyID0gMTtcbiAgICB9XG4gICAgbmV3QXJyYXlbaWldID0gYXJyYXlbaWkgKyBhZnRlcl07XG4gIH1cbiAgcmV0dXJuIG5ld0FycmF5O1xufVxuXG52YXIgTUFYX0FSUkFZX01BUF9TSVpFID0gU0laRSAvIDQ7XG52YXIgTUFYX0JJVE1BUF9JTkRFWEVEX1NJWkUgPSBTSVpFIC8gMjtcbnZhciBNSU5fSEFTSF9BUlJBWV9NQVBfU0laRSA9IFNJWkUgLyA0O1xuXG52YXIgSVNfTElTVF9TWU1CT0wgPSAnQEBfX0lNTVVUQUJMRV9MSVNUX19AQCc7XG5cbmZ1bmN0aW9uIGlzTGlzdChtYXliZUxpc3QpIHtcbiAgcmV0dXJuIEJvb2xlYW4obWF5YmVMaXN0ICYmIG1heWJlTGlzdFtJU19MSVNUX1NZTUJPTF0pO1xufVxuXG52YXIgTGlzdCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEluZGV4ZWRDb2xsZWN0aW9uJCQxKSB7XG4gIGZ1bmN0aW9uIExpc3QodmFsdWUpIHtcbiAgICB2YXIgZW1wdHkgPSBlbXB0eUxpc3QoKTtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH1cbiAgICBpZiAoaXNMaXN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICB2YXIgaXRlciA9IEluZGV4ZWRDb2xsZWN0aW9uJCQxKHZhbHVlKTtcbiAgICB2YXIgc2l6ZSA9IGl0ZXIuc2l6ZTtcbiAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH1cbiAgICBhc3NlcnROb3RJbmZpbml0ZShzaXplKTtcbiAgICBpZiAoc2l6ZSA+IDAgJiYgc2l6ZSA8IFNJWkUpIHtcbiAgICAgIHJldHVybiBtYWtlTGlzdCgwLCBzaXplLCBTSElGVCwgbnVsbCwgbmV3IFZOb2RlKGl0ZXIudG9BcnJheSgpKSk7XG4gICAgfVxuICAgIHJldHVybiBlbXB0eS53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICBsaXN0LnNldFNpemUoc2l6ZSk7XG4gICAgICBpdGVyLmZvckVhY2goZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGxpc3Quc2V0KGksIHYpOyB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICggSW5kZXhlZENvbGxlY3Rpb24kJDEgKSBMaXN0Ll9fcHJvdG9fXyA9IEluZGV4ZWRDb2xsZWN0aW9uJCQxO1xuICBMaXN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEluZGV4ZWRDb2xsZWN0aW9uJCQxICYmIEluZGV4ZWRDb2xsZWN0aW9uJCQxLnByb3RvdHlwZSApO1xuICBMaXN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExpc3Q7XG5cbiAgTGlzdC5vZiA9IGZ1bmN0aW9uIG9mICgvKi4uLnZhbHVlcyovKSB7XG4gICAgcmV0dXJuIHRoaXMoYXJndW1lbnRzKTtcbiAgfTtcblxuICBMaXN0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCdMaXN0IFsnLCAnXScpO1xuICB9O1xuXG4gIC8vIEBwcmFnbWEgQWNjZXNzXG5cbiAgTGlzdC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChpbmRleCwgbm90U2V0VmFsdWUpIHtcbiAgICBpbmRleCA9IHdyYXBJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnNpemUpIHtcbiAgICAgIGluZGV4ICs9IHRoaXMuX29yaWdpbjtcbiAgICAgIHZhciBub2RlID0gbGlzdE5vZGVGb3IodGhpcywgaW5kZXgpO1xuICAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS5hcnJheVtpbmRleCAmIE1BU0tdO1xuICAgIH1cbiAgICByZXR1cm4gbm90U2V0VmFsdWU7XG4gIH07XG5cbiAgLy8gQHByYWdtYSBNb2RpZmljYXRpb25cblxuICBMaXN0LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBzZXQgKGluZGV4LCB2YWx1ZSkge1xuICAgIHJldHVybiB1cGRhdGVMaXN0KHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gIH07XG5cbiAgTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlIChpbmRleCkge1xuICAgIHJldHVybiAhdGhpcy5oYXMoaW5kZXgpXG4gICAgICA/IHRoaXNcbiAgICAgIDogaW5kZXggPT09IDBcbiAgICAgICAgPyB0aGlzLnNoaWZ0KClcbiAgICAgICAgOiBpbmRleCA9PT0gdGhpcy5zaXplIC0gMVxuICAgICAgICAgID8gdGhpcy5wb3AoKVxuICAgICAgICAgIDogdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9O1xuXG4gIExpc3QucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIGluc2VydCAoaW5kZXgsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuc3BsaWNlKGluZGV4LCAwLCB2YWx1ZSk7XG4gIH07XG5cbiAgTGlzdC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhciAoKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmICh0aGlzLl9fb3duZXJJRCkge1xuICAgICAgdGhpcy5zaXplID0gdGhpcy5fb3JpZ2luID0gdGhpcy5fY2FwYWNpdHkgPSAwO1xuICAgICAgdGhpcy5fbGV2ZWwgPSBTSElGVDtcbiAgICAgIHRoaXMuX3Jvb3QgPSB0aGlzLl90YWlsID0gbnVsbDtcbiAgICAgIHRoaXMuX19oYXNoID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fX2FsdGVyZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBlbXB0eUxpc3QoKTtcbiAgfTtcblxuICBMaXN0LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAoLyouLi52YWx1ZXMqLykge1xuICAgIHZhciB2YWx1ZXMgPSBhcmd1bWVudHM7XG4gICAgdmFyIG9sZFNpemUgPSB0aGlzLnNpemU7XG4gICAgcmV0dXJuIHRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbiAobGlzdCkge1xuICAgICAgc2V0TGlzdEJvdW5kcyhsaXN0LCAwLCBvbGRTaXplICsgdmFsdWVzLmxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgdmFsdWVzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICBsaXN0LnNldChvbGRTaXplICsgaWksIHZhbHVlc1tpaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIExpc3QucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uIHBvcCAoKSB7XG4gICAgcmV0dXJuIHNldExpc3RCb3VuZHModGhpcywgMCwgLTEpO1xuICB9O1xuXG4gIExpc3QucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiB1bnNoaWZ0ICgvKi4uLnZhbHVlcyovKSB7XG4gICAgdmFyIHZhbHVlcyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gdGhpcy53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICBzZXRMaXN0Qm91bmRzKGxpc3QsIC12YWx1ZXMubGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCB2YWx1ZXMubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgIGxpc3Quc2V0KGlpLCB2YWx1ZXNbaWldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBMaXN0LnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uIHNoaWZ0ICgpIHtcbiAgICByZXR1cm4gc2V0TGlzdEJvdW5kcyh0aGlzLCAxKTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIENvbXBvc2l0aW9uXG5cbiAgTGlzdC5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0ICgvKi4uLmNvbGxlY3Rpb25zKi8pIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgICB2YXIgc2VxcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYXJndW1lbnQgPSBhcmd1bWVudHMkMVtpXTtcbiAgICAgIHZhciBzZXEgPSBJbmRleGVkQ29sbGVjdGlvbiQkMShcbiAgICAgICAgdHlwZW9mIGFyZ3VtZW50ICE9PSAnc3RyaW5nJyAmJiBoYXNJdGVyYXRvcihhcmd1bWVudClcbiAgICAgICAgICA/IGFyZ3VtZW50XG4gICAgICAgICAgOiBbYXJndW1lbnRdXG4gICAgICApO1xuICAgICAgaWYgKHNlcS5zaXplICE9PSAwKSB7XG4gICAgICAgIHNlcXMucHVzaChzZXEpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2Vxcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaXplID09PSAwICYmICF0aGlzLl9fb3duZXJJRCAmJiBzZXFzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3Ioc2Vxc1swXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24gKGxpc3QpIHtcbiAgICAgIHNlcXMuZm9yRWFjaChmdW5jdGlvbiAoc2VxKSB7IHJldHVybiBzZXEuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGxpc3QucHVzaCh2YWx1ZSk7IH0pOyB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBMaXN0LnByb3RvdHlwZS5zZXRTaXplID0gZnVuY3Rpb24gc2V0U2l6ZSAoc2l6ZSkge1xuICAgIHJldHVybiBzZXRMaXN0Qm91bmRzKHRoaXMsIDAsIHNpemUpO1xuICB9O1xuXG4gIExpc3QucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1hcCAobWFwcGVyLCBjb250ZXh0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMkMS5zaXplOyBpKyspIHtcbiAgICAgICAgbGlzdC5zZXQoaSwgbWFwcGVyLmNhbGwoY29udGV4dCwgbGlzdC5nZXQoaSksIGksIGxpc3QpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIEl0ZXJhdGlvblxuXG4gIExpc3QucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICBpZiAod2hvbGVTbGljZShiZWdpbiwgZW5kLCBzaXplKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBzZXRMaXN0Qm91bmRzKFxuICAgICAgdGhpcyxcbiAgICAgIHJlc29sdmVCZWdpbihiZWdpbiwgc2l6ZSksXG4gICAgICByZXNvbHZlRW5kKGVuZCwgc2l6ZSlcbiAgICApO1xuICB9O1xuXG4gIExpc3QucHJvdG90eXBlLl9faXRlcmF0b3IgPSBmdW5jdGlvbiBfX2l0ZXJhdG9yICh0eXBlLCByZXZlcnNlKSB7XG4gICAgdmFyIGluZGV4ID0gcmV2ZXJzZSA/IHRoaXMuc2l6ZSA6IDA7XG4gICAgdmFyIHZhbHVlcyA9IGl0ZXJhdGVMaXN0KHRoaXMsIHJldmVyc2UpO1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVzKCk7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IERPTkVcbiAgICAgICAgPyBpdGVyYXRvckRvbmUoKVxuICAgICAgICA6IGl0ZXJhdG9yVmFsdWUodHlwZSwgcmV2ZXJzZSA/IC0taW5kZXggOiBpbmRleCsrLCB2YWx1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgTGlzdC5wcm90b3R5cGUuX19pdGVyYXRlID0gZnVuY3Rpb24gX19pdGVyYXRlIChmbiwgcmV2ZXJzZSkge1xuICAgIHZhciBpbmRleCA9IHJldmVyc2UgPyB0aGlzLnNpemUgOiAwO1xuICAgIHZhciB2YWx1ZXMgPSBpdGVyYXRlTGlzdCh0aGlzLCByZXZlcnNlKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgd2hpbGUgKCh2YWx1ZSA9IHZhbHVlcygpKSAhPT0gRE9ORSkge1xuICAgICAgaWYgKGZuKHZhbHVlLCByZXZlcnNlID8gLS1pbmRleCA6IGluZGV4KyssIHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9O1xuXG4gIExpc3QucHJvdG90eXBlLl9fZW5zdXJlT3duZXIgPSBmdW5jdGlvbiBfX2Vuc3VyZU93bmVyIChvd25lcklEKSB7XG4gICAgaWYgKG93bmVySUQgPT09IHRoaXMuX19vd25lcklEKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKCFvd25lcklEKSB7XG4gICAgICBpZiAodGhpcy5zaXplID09PSAwKSB7XG4gICAgICAgIHJldHVybiBlbXB0eUxpc3QoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX19vd25lcklEID0gb3duZXJJRDtcbiAgICAgIHRoaXMuX19hbHRlcmVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIG1ha2VMaXN0KFxuICAgICAgdGhpcy5fb3JpZ2luLFxuICAgICAgdGhpcy5fY2FwYWNpdHksXG4gICAgICB0aGlzLl9sZXZlbCxcbiAgICAgIHRoaXMuX3Jvb3QsXG4gICAgICB0aGlzLl90YWlsLFxuICAgICAgb3duZXJJRCxcbiAgICAgIHRoaXMuX19oYXNoXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gTGlzdDtcbn0oSW5kZXhlZENvbGxlY3Rpb24pKTtcblxuTGlzdC5pc0xpc3QgPSBpc0xpc3Q7XG5cbnZhciBMaXN0UHJvdG90eXBlID0gTGlzdC5wcm90b3R5cGU7XG5MaXN0UHJvdG90eXBlW0lTX0xJU1RfU1lNQk9MXSA9IHRydWU7XG5MaXN0UHJvdG90eXBlW0RFTEVURV0gPSBMaXN0UHJvdG90eXBlLnJlbW92ZTtcbkxpc3RQcm90b3R5cGUubWVyZ2UgPSBMaXN0UHJvdG90eXBlLmNvbmNhdDtcbkxpc3RQcm90b3R5cGUuc2V0SW4gPSBzZXRJbiQxO1xuTGlzdFByb3RvdHlwZS5kZWxldGVJbiA9IExpc3RQcm90b3R5cGUucmVtb3ZlSW4gPSBkZWxldGVJbjtcbkxpc3RQcm90b3R5cGUudXBkYXRlID0gdXBkYXRlJDE7XG5MaXN0UHJvdG90eXBlLnVwZGF0ZUluID0gdXBkYXRlSW4kMTtcbkxpc3RQcm90b3R5cGUubWVyZ2VJbiA9IG1lcmdlSW47XG5MaXN0UHJvdG90eXBlLm1lcmdlRGVlcEluID0gbWVyZ2VEZWVwSW47XG5MaXN0UHJvdG90eXBlLndpdGhNdXRhdGlvbnMgPSB3aXRoTXV0YXRpb25zO1xuTGlzdFByb3RvdHlwZS53YXNBbHRlcmVkID0gd2FzQWx0ZXJlZDtcbkxpc3RQcm90b3R5cGUuYXNJbW11dGFibGUgPSBhc0ltbXV0YWJsZTtcbkxpc3RQcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9pbml0J10gPSBMaXN0UHJvdG90eXBlLmFzTXV0YWJsZSA9IGFzTXV0YWJsZTtcbkxpc3RQcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9zdGVwJ10gPSBmdW5jdGlvbihyZXN1bHQsIGFycikge1xuICByZXR1cm4gcmVzdWx0LnB1c2goYXJyKTtcbn07XG5MaXN0UHJvdG90eXBlWydAQHRyYW5zZHVjZXIvcmVzdWx0J10gPSBmdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIG9iai5hc0ltbXV0YWJsZSgpO1xufTtcblxudmFyIFZOb2RlID0gZnVuY3Rpb24gVk5vZGUoYXJyYXksIG93bmVySUQpIHtcbiAgdGhpcy5hcnJheSA9IGFycmF5O1xuICB0aGlzLm93bmVySUQgPSBvd25lcklEO1xufTtcblxuLy8gVE9ETzogc2VlbXMgbGlrZSB0aGVzZSBtZXRob2RzIGFyZSB2ZXJ5IHNpbWlsYXJcblxuVk5vZGUucHJvdG90eXBlLnJlbW92ZUJlZm9yZSA9IGZ1bmN0aW9uIHJlbW92ZUJlZm9yZSAob3duZXJJRCwgbGV2ZWwsIGluZGV4KSB7XG4gIGlmIChpbmRleCA9PT0gbGV2ZWwgPyAxIDw8IGxldmVsIDogdGhpcy5hcnJheS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgb3JpZ2luSW5kZXggPSAoaW5kZXggPj4+IGxldmVsKSAmIE1BU0s7XG4gIGlmIChvcmlnaW5JbmRleCA+PSB0aGlzLmFycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiBuZXcgVk5vZGUoW10sIG93bmVySUQpO1xuICB9XG4gIHZhciByZW1vdmluZ0ZpcnN0ID0gb3JpZ2luSW5kZXggPT09IDA7XG4gIHZhciBuZXdDaGlsZDtcbiAgaWYgKGxldmVsID4gMCkge1xuICAgIHZhciBvbGRDaGlsZCA9IHRoaXMuYXJyYXlbb3JpZ2luSW5kZXhdO1xuICAgIG5ld0NoaWxkID1cbiAgICAgIG9sZENoaWxkICYmIG9sZENoaWxkLnJlbW92ZUJlZm9yZShvd25lcklELCBsZXZlbCAtIFNISUZULCBpbmRleCk7XG4gICAgaWYgKG5ld0NoaWxkID09PSBvbGRDaGlsZCAmJiByZW1vdmluZ0ZpcnN0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cbiAgaWYgKHJlbW92aW5nRmlyc3QgJiYgIW5ld0NoaWxkKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgdmFyIGVkaXRhYmxlID0gZWRpdGFibGVWTm9kZSh0aGlzLCBvd25lcklEKTtcbiAgaWYgKCFyZW1vdmluZ0ZpcnN0KSB7XG4gICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IG9yaWdpbkluZGV4OyBpaSsrKSB7XG4gICAgICBlZGl0YWJsZS5hcnJheVtpaV0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGlmIChuZXdDaGlsZCkge1xuICAgIGVkaXRhYmxlLmFycmF5W29yaWdpbkluZGV4XSA9IG5ld0NoaWxkO1xuICB9XG4gIHJldHVybiBlZGl0YWJsZTtcbn07XG5cblZOb2RlLnByb3RvdHlwZS5yZW1vdmVBZnRlciA9IGZ1bmN0aW9uIHJlbW92ZUFmdGVyIChvd25lcklELCBsZXZlbCwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID09PSAobGV2ZWwgPyAxIDw8IGxldmVsIDogMCkgfHwgdGhpcy5hcnJheS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgc2l6ZUluZGV4ID0gKChpbmRleCAtIDEpID4+PiBsZXZlbCkgJiBNQVNLO1xuICBpZiAoc2l6ZUluZGV4ID49IHRoaXMuYXJyYXkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbmV3Q2hpbGQ7XG4gIGlmIChsZXZlbCA+IDApIHtcbiAgICB2YXIgb2xkQ2hpbGQgPSB0aGlzLmFycmF5W3NpemVJbmRleF07XG4gICAgbmV3Q2hpbGQgPVxuICAgICAgb2xkQ2hpbGQgJiYgb2xkQ2hpbGQucmVtb3ZlQWZ0ZXIob3duZXJJRCwgbGV2ZWwgLSBTSElGVCwgaW5kZXgpO1xuICAgIGlmIChuZXdDaGlsZCA9PT0gb2xkQ2hpbGQgJiYgc2l6ZUluZGV4ID09PSB0aGlzLmFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIHZhciBlZGl0YWJsZSA9IGVkaXRhYmxlVk5vZGUodGhpcywgb3duZXJJRCk7XG4gIGVkaXRhYmxlLmFycmF5LnNwbGljZShzaXplSW5kZXggKyAxKTtcbiAgaWYgKG5ld0NoaWxkKSB7XG4gICAgZWRpdGFibGUuYXJyYXlbc2l6ZUluZGV4XSA9IG5ld0NoaWxkO1xuICB9XG4gIHJldHVybiBlZGl0YWJsZTtcbn07XG5cbnZhciBET05FID0ge307XG5cbmZ1bmN0aW9uIGl0ZXJhdGVMaXN0KGxpc3QsIHJldmVyc2UpIHtcbiAgdmFyIGxlZnQgPSBsaXN0Ll9vcmlnaW47XG4gIHZhciByaWdodCA9IGxpc3QuX2NhcGFjaXR5O1xuICB2YXIgdGFpbFBvcyA9IGdldFRhaWxPZmZzZXQocmlnaHQpO1xuICB2YXIgdGFpbCA9IGxpc3QuX3RhaWw7XG5cbiAgcmV0dXJuIGl0ZXJhdGVOb2RlT3JMZWFmKGxpc3QuX3Jvb3QsIGxpc3QuX2xldmVsLCAwKTtcblxuICBmdW5jdGlvbiBpdGVyYXRlTm9kZU9yTGVhZihub2RlLCBsZXZlbCwgb2Zmc2V0KSB7XG4gICAgcmV0dXJuIGxldmVsID09PSAwXG4gICAgICA/IGl0ZXJhdGVMZWFmKG5vZGUsIG9mZnNldClcbiAgICAgIDogaXRlcmF0ZU5vZGUobm9kZSwgbGV2ZWwsIG9mZnNldCk7XG4gIH1cblxuICBmdW5jdGlvbiBpdGVyYXRlTGVhZihub2RlLCBvZmZzZXQpIHtcbiAgICB2YXIgYXJyYXkgPSBvZmZzZXQgPT09IHRhaWxQb3MgPyB0YWlsICYmIHRhaWwuYXJyYXkgOiBub2RlICYmIG5vZGUuYXJyYXk7XG4gICAgdmFyIGZyb20gPSBvZmZzZXQgPiBsZWZ0ID8gMCA6IGxlZnQgLSBvZmZzZXQ7XG4gICAgdmFyIHRvID0gcmlnaHQgLSBvZmZzZXQ7XG4gICAgaWYgKHRvID4gU0laRSkge1xuICAgICAgdG8gPSBTSVpFO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgICAgIHJldHVybiBET05FO1xuICAgICAgfVxuICAgICAgdmFyIGlkeCA9IHJldmVyc2UgPyAtLXRvIDogZnJvbSsrO1xuICAgICAgcmV0dXJuIGFycmF5ICYmIGFycmF5W2lkeF07XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGl0ZXJhdGVOb2RlKG5vZGUsIGxldmVsLCBvZmZzZXQpIHtcbiAgICB2YXIgdmFsdWVzO1xuICAgIHZhciBhcnJheSA9IG5vZGUgJiYgbm9kZS5hcnJheTtcbiAgICB2YXIgZnJvbSA9IG9mZnNldCA+IGxlZnQgPyAwIDogKGxlZnQgLSBvZmZzZXQpID4+IGxldmVsO1xuICAgIHZhciB0byA9ICgocmlnaHQgLSBvZmZzZXQpID4+IGxldmVsKSArIDE7XG4gICAgaWYgKHRvID4gU0laRSkge1xuICAgICAgdG8gPSBTSVpFO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlcygpO1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gRE9ORSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tID09PSB0bykge1xuICAgICAgICAgIHJldHVybiBET05FO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpZHggPSByZXZlcnNlID8gLS10byA6IGZyb20rKztcbiAgICAgICAgdmFsdWVzID0gaXRlcmF0ZU5vZGVPckxlYWYoXG4gICAgICAgICAgYXJyYXkgJiYgYXJyYXlbaWR4XSxcbiAgICAgICAgICBsZXZlbCAtIFNISUZULFxuICAgICAgICAgIG9mZnNldCArIChpZHggPDwgbGV2ZWwpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlTGlzdChvcmlnaW4sIGNhcGFjaXR5LCBsZXZlbCwgcm9vdCwgdGFpbCwgb3duZXJJRCwgaGFzaCkge1xuICB2YXIgbGlzdCA9IE9iamVjdC5jcmVhdGUoTGlzdFByb3RvdHlwZSk7XG4gIGxpc3Quc2l6ZSA9IGNhcGFjaXR5IC0gb3JpZ2luO1xuICBsaXN0Ll9vcmlnaW4gPSBvcmlnaW47XG4gIGxpc3QuX2NhcGFjaXR5ID0gY2FwYWNpdHk7XG4gIGxpc3QuX2xldmVsID0gbGV2ZWw7XG4gIGxpc3QuX3Jvb3QgPSByb290O1xuICBsaXN0Ll90YWlsID0gdGFpbDtcbiAgbGlzdC5fX293bmVySUQgPSBvd25lcklEO1xuICBsaXN0Ll9faGFzaCA9IGhhc2g7XG4gIGxpc3QuX19hbHRlcmVkID0gZmFsc2U7XG4gIHJldHVybiBsaXN0O1xufVxuXG52YXIgRU1QVFlfTElTVDtcbmZ1bmN0aW9uIGVtcHR5TGlzdCgpIHtcbiAgcmV0dXJuIEVNUFRZX0xJU1QgfHwgKEVNUFRZX0xJU1QgPSBtYWtlTGlzdCgwLCAwLCBTSElGVCkpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVMaXN0KGxpc3QsIGluZGV4LCB2YWx1ZSkge1xuICBpbmRleCA9IHdyYXBJbmRleChsaXN0LCBpbmRleCk7XG5cbiAgaWYgKGluZGV4ICE9PSBpbmRleCkge1xuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgaWYgKGluZGV4ID49IGxpc3Quc2l6ZSB8fCBpbmRleCA8IDApIHtcbiAgICByZXR1cm4gbGlzdC53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICBpbmRleCA8IDBcbiAgICAgICAgPyBzZXRMaXN0Qm91bmRzKGxpc3QsIGluZGV4KS5zZXQoMCwgdmFsdWUpXG4gICAgICAgIDogc2V0TGlzdEJvdW5kcyhsaXN0LCAwLCBpbmRleCArIDEpLnNldChpbmRleCwgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgaW5kZXggKz0gbGlzdC5fb3JpZ2luO1xuXG4gIHZhciBuZXdUYWlsID0gbGlzdC5fdGFpbDtcbiAgdmFyIG5ld1Jvb3QgPSBsaXN0Ll9yb290O1xuICB2YXIgZGlkQWx0ZXIgPSBNYWtlUmVmKCk7XG4gIGlmIChpbmRleCA+PSBnZXRUYWlsT2Zmc2V0KGxpc3QuX2NhcGFjaXR5KSkge1xuICAgIG5ld1RhaWwgPSB1cGRhdGVWTm9kZShuZXdUYWlsLCBsaXN0Ll9fb3duZXJJRCwgMCwgaW5kZXgsIHZhbHVlLCBkaWRBbHRlcik7XG4gIH0gZWxzZSB7XG4gICAgbmV3Um9vdCA9IHVwZGF0ZVZOb2RlKFxuICAgICAgbmV3Um9vdCxcbiAgICAgIGxpc3QuX19vd25lcklELFxuICAgICAgbGlzdC5fbGV2ZWwsXG4gICAgICBpbmRleCxcbiAgICAgIHZhbHVlLFxuICAgICAgZGlkQWx0ZXJcbiAgICApO1xuICB9XG5cbiAgaWYgKCFkaWRBbHRlci52YWx1ZSkge1xuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgaWYgKGxpc3QuX19vd25lcklEKSB7XG4gICAgbGlzdC5fcm9vdCA9IG5ld1Jvb3Q7XG4gICAgbGlzdC5fdGFpbCA9IG5ld1RhaWw7XG4gICAgbGlzdC5fX2hhc2ggPSB1bmRlZmluZWQ7XG4gICAgbGlzdC5fX2FsdGVyZWQgPSB0cnVlO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG4gIHJldHVybiBtYWtlTGlzdChsaXN0Ll9vcmlnaW4sIGxpc3QuX2NhcGFjaXR5LCBsaXN0Ll9sZXZlbCwgbmV3Um9vdCwgbmV3VGFpbCk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVZOb2RlKG5vZGUsIG93bmVySUQsIGxldmVsLCBpbmRleCwgdmFsdWUsIGRpZEFsdGVyKSB7XG4gIHZhciBpZHggPSAoaW5kZXggPj4+IGxldmVsKSAmIE1BU0s7XG4gIHZhciBub2RlSGFzID0gbm9kZSAmJiBpZHggPCBub2RlLmFycmF5Lmxlbmd0aDtcbiAgaWYgKCFub2RlSGFzICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHZhciBuZXdOb2RlO1xuXG4gIGlmIChsZXZlbCA+IDApIHtcbiAgICB2YXIgbG93ZXJOb2RlID0gbm9kZSAmJiBub2RlLmFycmF5W2lkeF07XG4gICAgdmFyIG5ld0xvd2VyTm9kZSA9IHVwZGF0ZVZOb2RlKFxuICAgICAgbG93ZXJOb2RlLFxuICAgICAgb3duZXJJRCxcbiAgICAgIGxldmVsIC0gU0hJRlQsXG4gICAgICBpbmRleCxcbiAgICAgIHZhbHVlLFxuICAgICAgZGlkQWx0ZXJcbiAgICApO1xuICAgIGlmIChuZXdMb3dlck5vZGUgPT09IGxvd2VyTm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIG5ld05vZGUgPSBlZGl0YWJsZVZOb2RlKG5vZGUsIG93bmVySUQpO1xuICAgIG5ld05vZGUuYXJyYXlbaWR4XSA9IG5ld0xvd2VyTm9kZTtcbiAgICByZXR1cm4gbmV3Tm9kZTtcbiAgfVxuXG4gIGlmIChub2RlSGFzICYmIG5vZGUuYXJyYXlbaWR4XSA9PT0gdmFsdWUpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIGlmIChkaWRBbHRlcikge1xuICAgIFNldFJlZihkaWRBbHRlcik7XG4gIH1cblxuICBuZXdOb2RlID0gZWRpdGFibGVWTm9kZShub2RlLCBvd25lcklEKTtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgaWR4ID09PSBuZXdOb2RlLmFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICBuZXdOb2RlLmFycmF5LnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIG5ld05vZGUuYXJyYXlbaWR4XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBuZXdOb2RlO1xufVxuXG5mdW5jdGlvbiBlZGl0YWJsZVZOb2RlKG5vZGUsIG93bmVySUQpIHtcbiAgaWYgKG93bmVySUQgJiYgbm9kZSAmJiBvd25lcklEID09PSBub2RlLm93bmVySUQpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICByZXR1cm4gbmV3IFZOb2RlKG5vZGUgPyBub2RlLmFycmF5LnNsaWNlKCkgOiBbXSwgb3duZXJJRCk7XG59XG5cbmZ1bmN0aW9uIGxpc3ROb2RlRm9yKGxpc3QsIHJhd0luZGV4KSB7XG4gIGlmIChyYXdJbmRleCA+PSBnZXRUYWlsT2Zmc2V0KGxpc3QuX2NhcGFjaXR5KSkge1xuICAgIHJldHVybiBsaXN0Ll90YWlsO1xuICB9XG4gIGlmIChyYXdJbmRleCA8IDEgPDwgKGxpc3QuX2xldmVsICsgU0hJRlQpKSB7XG4gICAgdmFyIG5vZGUgPSBsaXN0Ll9yb290O1xuICAgIHZhciBsZXZlbCA9IGxpc3QuX2xldmVsO1xuICAgIHdoaWxlIChub2RlICYmIGxldmVsID4gMCkge1xuICAgICAgbm9kZSA9IG5vZGUuYXJyYXlbKHJhd0luZGV4ID4+PiBsZXZlbCkgJiBNQVNLXTtcbiAgICAgIGxldmVsIC09IFNISUZUO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRMaXN0Qm91bmRzKGxpc3QsIGJlZ2luLCBlbmQpIHtcbiAgLy8gU2FuaXRpemUgYmVnaW4gJiBlbmQgdXNpbmcgdGhpcyBzaG9ydGhhbmQgZm9yIFRvSW50MzIoYXJndW1lbnQpXG4gIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b2ludDMyXG4gIGlmIChiZWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYmVnaW4gfD0gMDtcbiAgfVxuICBpZiAoZW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgfD0gMDtcbiAgfVxuICB2YXIgb3duZXIgPSBsaXN0Ll9fb3duZXJJRCB8fCBuZXcgT3duZXJJRCgpO1xuICB2YXIgb2xkT3JpZ2luID0gbGlzdC5fb3JpZ2luO1xuICB2YXIgb2xkQ2FwYWNpdHkgPSBsaXN0Ll9jYXBhY2l0eTtcbiAgdmFyIG5ld09yaWdpbiA9IG9sZE9yaWdpbiArIGJlZ2luO1xuICB2YXIgbmV3Q2FwYWNpdHkgPVxuICAgIGVuZCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IG9sZENhcGFjaXR5XG4gICAgICA6IGVuZCA8IDBcbiAgICAgICAgPyBvbGRDYXBhY2l0eSArIGVuZFxuICAgICAgICA6IG9sZE9yaWdpbiArIGVuZDtcbiAgaWYgKG5ld09yaWdpbiA9PT0gb2xkT3JpZ2luICYmIG5ld0NhcGFjaXR5ID09PSBvbGRDYXBhY2l0eSkge1xuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgLy8gSWYgaXQncyBnb2luZyB0byBlbmQgYWZ0ZXIgaXQgc3RhcnRzLCBpdCdzIGVtcHR5LlxuICBpZiAobmV3T3JpZ2luID49IG5ld0NhcGFjaXR5KSB7XG4gICAgcmV0dXJuIGxpc3QuY2xlYXIoKTtcbiAgfVxuXG4gIHZhciBuZXdMZXZlbCA9IGxpc3QuX2xldmVsO1xuICB2YXIgbmV3Um9vdCA9IGxpc3QuX3Jvb3Q7XG5cbiAgLy8gTmV3IG9yaWdpbiBtaWdodCBuZWVkIGNyZWF0aW5nIGEgaGlnaGVyIHJvb3QuXG4gIHZhciBvZmZzZXRTaGlmdCA9IDA7XG4gIHdoaWxlIChuZXdPcmlnaW4gKyBvZmZzZXRTaGlmdCA8IDApIHtcbiAgICBuZXdSb290ID0gbmV3IFZOb2RlKFxuICAgICAgbmV3Um9vdCAmJiBuZXdSb290LmFycmF5Lmxlbmd0aCA/IFt1bmRlZmluZWQsIG5ld1Jvb3RdIDogW10sXG4gICAgICBvd25lclxuICAgICk7XG4gICAgbmV3TGV2ZWwgKz0gU0hJRlQ7XG4gICAgb2Zmc2V0U2hpZnQgKz0gMSA8PCBuZXdMZXZlbDtcbiAgfVxuICBpZiAob2Zmc2V0U2hpZnQpIHtcbiAgICBuZXdPcmlnaW4gKz0gb2Zmc2V0U2hpZnQ7XG4gICAgb2xkT3JpZ2luICs9IG9mZnNldFNoaWZ0O1xuICAgIG5ld0NhcGFjaXR5ICs9IG9mZnNldFNoaWZ0O1xuICAgIG9sZENhcGFjaXR5ICs9IG9mZnNldFNoaWZ0O1xuICB9XG5cbiAgdmFyIG9sZFRhaWxPZmZzZXQgPSBnZXRUYWlsT2Zmc2V0KG9sZENhcGFjaXR5KTtcbiAgdmFyIG5ld1RhaWxPZmZzZXQgPSBnZXRUYWlsT2Zmc2V0KG5ld0NhcGFjaXR5KTtcblxuICAvLyBOZXcgc2l6ZSBtaWdodCBuZWVkIGNyZWF0aW5nIGEgaGlnaGVyIHJvb3QuXG4gIHdoaWxlIChuZXdUYWlsT2Zmc2V0ID49IDEgPDwgKG5ld0xldmVsICsgU0hJRlQpKSB7XG4gICAgbmV3Um9vdCA9IG5ldyBWTm9kZShcbiAgICAgIG5ld1Jvb3QgJiYgbmV3Um9vdC5hcnJheS5sZW5ndGggPyBbbmV3Um9vdF0gOiBbXSxcbiAgICAgIG93bmVyXG4gICAgKTtcbiAgICBuZXdMZXZlbCArPSBTSElGVDtcbiAgfVxuXG4gIC8vIExvY2F0ZSBvciBjcmVhdGUgdGhlIG5ldyB0YWlsLlxuICB2YXIgb2xkVGFpbCA9IGxpc3QuX3RhaWw7XG4gIHZhciBuZXdUYWlsID1cbiAgICBuZXdUYWlsT2Zmc2V0IDwgb2xkVGFpbE9mZnNldFxuICAgICAgPyBsaXN0Tm9kZUZvcihsaXN0LCBuZXdDYXBhY2l0eSAtIDEpXG4gICAgICA6IG5ld1RhaWxPZmZzZXQgPiBvbGRUYWlsT2Zmc2V0XG4gICAgICAgID8gbmV3IFZOb2RlKFtdLCBvd25lcilcbiAgICAgICAgOiBvbGRUYWlsO1xuXG4gIC8vIE1lcmdlIFRhaWwgaW50byB0cmVlLlxuICBpZiAoXG4gICAgb2xkVGFpbCAmJlxuICAgIG5ld1RhaWxPZmZzZXQgPiBvbGRUYWlsT2Zmc2V0ICYmXG4gICAgbmV3T3JpZ2luIDwgb2xkQ2FwYWNpdHkgJiZcbiAgICBvbGRUYWlsLmFycmF5Lmxlbmd0aFxuICApIHtcbiAgICBuZXdSb290ID0gZWRpdGFibGVWTm9kZShuZXdSb290LCBvd25lcik7XG4gICAgdmFyIG5vZGUgPSBuZXdSb290O1xuICAgIGZvciAodmFyIGxldmVsID0gbmV3TGV2ZWw7IGxldmVsID4gU0hJRlQ7IGxldmVsIC09IFNISUZUKSB7XG4gICAgICB2YXIgaWR4ID0gKG9sZFRhaWxPZmZzZXQgPj4+IGxldmVsKSAmIE1BU0s7XG4gICAgICBub2RlID0gbm9kZS5hcnJheVtpZHhdID0gZWRpdGFibGVWTm9kZShub2RlLmFycmF5W2lkeF0sIG93bmVyKTtcbiAgICB9XG4gICAgbm9kZS5hcnJheVsob2xkVGFpbE9mZnNldCA+Pj4gU0hJRlQpICYgTUFTS10gPSBvbGRUYWlsO1xuICB9XG5cbiAgLy8gSWYgdGhlIHNpemUgaGFzIGJlZW4gcmVkdWNlZCwgdGhlcmUncyBhIGNoYW5jZSB0aGUgdGFpbCBuZWVkcyB0byBiZSB0cmltbWVkLlxuICBpZiAobmV3Q2FwYWNpdHkgPCBvbGRDYXBhY2l0eSkge1xuICAgIG5ld1RhaWwgPSBuZXdUYWlsICYmIG5ld1RhaWwucmVtb3ZlQWZ0ZXIob3duZXIsIDAsIG5ld0NhcGFjaXR5KTtcbiAgfVxuXG4gIC8vIElmIHRoZSBuZXcgb3JpZ2luIGlzIHdpdGhpbiB0aGUgdGFpbCwgdGhlbiB3ZSBkbyBub3QgbmVlZCBhIHJvb3QuXG4gIGlmIChuZXdPcmlnaW4gPj0gbmV3VGFpbE9mZnNldCkge1xuICAgIG5ld09yaWdpbiAtPSBuZXdUYWlsT2Zmc2V0O1xuICAgIG5ld0NhcGFjaXR5IC09IG5ld1RhaWxPZmZzZXQ7XG4gICAgbmV3TGV2ZWwgPSBTSElGVDtcbiAgICBuZXdSb290ID0gbnVsbDtcbiAgICBuZXdUYWlsID0gbmV3VGFpbCAmJiBuZXdUYWlsLnJlbW92ZUJlZm9yZShvd25lciwgMCwgbmV3T3JpZ2luKTtcblxuICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIHJvb3QgaGFzIGJlZW4gdHJpbW1lZCwgZ2FyYmFnZSBjb2xsZWN0LlxuICB9IGVsc2UgaWYgKG5ld09yaWdpbiA+IG9sZE9yaWdpbiB8fCBuZXdUYWlsT2Zmc2V0IDwgb2xkVGFpbE9mZnNldCkge1xuICAgIG9mZnNldFNoaWZ0ID0gMDtcblxuICAgIC8vIElkZW50aWZ5IHRoZSBuZXcgdG9wIHJvb3Qgbm9kZSBvZiB0aGUgc3VidHJlZSBvZiB0aGUgb2xkIHJvb3QuXG4gICAgd2hpbGUgKG5ld1Jvb3QpIHtcbiAgICAgIHZhciBiZWdpbkluZGV4ID0gKG5ld09yaWdpbiA+Pj4gbmV3TGV2ZWwpICYgTUFTSztcbiAgICAgIGlmICgoYmVnaW5JbmRleCAhPT0gbmV3VGFpbE9mZnNldCA+Pj4gbmV3TGV2ZWwpICYgTUFTSykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChiZWdpbkluZGV4KSB7XG4gICAgICAgIG9mZnNldFNoaWZ0ICs9ICgxIDw8IG5ld0xldmVsKSAqIGJlZ2luSW5kZXg7XG4gICAgICB9XG4gICAgICBuZXdMZXZlbCAtPSBTSElGVDtcbiAgICAgIG5ld1Jvb3QgPSBuZXdSb290LmFycmF5W2JlZ2luSW5kZXhdO1xuICAgIH1cblxuICAgIC8vIFRyaW0gdGhlIG5ldyBzaWRlcyBvZiB0aGUgbmV3IHJvb3QuXG4gICAgaWYgKG5ld1Jvb3QgJiYgbmV3T3JpZ2luID4gb2xkT3JpZ2luKSB7XG4gICAgICBuZXdSb290ID0gbmV3Um9vdC5yZW1vdmVCZWZvcmUob3duZXIsIG5ld0xldmVsLCBuZXdPcmlnaW4gLSBvZmZzZXRTaGlmdCk7XG4gICAgfVxuICAgIGlmIChuZXdSb290ICYmIG5ld1RhaWxPZmZzZXQgPCBvbGRUYWlsT2Zmc2V0KSB7XG4gICAgICBuZXdSb290ID0gbmV3Um9vdC5yZW1vdmVBZnRlcihcbiAgICAgICAgb3duZXIsXG4gICAgICAgIG5ld0xldmVsLFxuICAgICAgICBuZXdUYWlsT2Zmc2V0IC0gb2Zmc2V0U2hpZnRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvZmZzZXRTaGlmdCkge1xuICAgICAgbmV3T3JpZ2luIC09IG9mZnNldFNoaWZ0O1xuICAgICAgbmV3Q2FwYWNpdHkgLT0gb2Zmc2V0U2hpZnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxpc3QuX19vd25lcklEKSB7XG4gICAgbGlzdC5zaXplID0gbmV3Q2FwYWNpdHkgLSBuZXdPcmlnaW47XG4gICAgbGlzdC5fb3JpZ2luID0gbmV3T3JpZ2luO1xuICAgIGxpc3QuX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7XG4gICAgbGlzdC5fbGV2ZWwgPSBuZXdMZXZlbDtcbiAgICBsaXN0Ll9yb290ID0gbmV3Um9vdDtcbiAgICBsaXN0Ll90YWlsID0gbmV3VGFpbDtcbiAgICBsaXN0Ll9faGFzaCA9IHVuZGVmaW5lZDtcbiAgICBsaXN0Ll9fYWx0ZXJlZCA9IHRydWU7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cbiAgcmV0dXJuIG1ha2VMaXN0KG5ld09yaWdpbiwgbmV3Q2FwYWNpdHksIG5ld0xldmVsLCBuZXdSb290LCBuZXdUYWlsKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFpbE9mZnNldChzaXplKSB7XG4gIHJldHVybiBzaXplIDwgU0laRSA/IDAgOiAoKHNpemUgLSAxKSA+Pj4gU0hJRlQpIDw8IFNISUZUO1xufVxuXG52YXIgT3JkZXJlZE1hcCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKE1hcCQkMSkge1xuICBmdW5jdGlvbiBPcmRlcmVkTWFwKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgID8gZW1wdHlPcmRlcmVkTWFwKClcbiAgICAgIDogaXNPcmRlcmVkTWFwKHZhbHVlKVxuICAgICAgICA/IHZhbHVlXG4gICAgICAgIDogZW1wdHlPcmRlcmVkTWFwKCkud2l0aE11dGF0aW9ucyhmdW5jdGlvbiAobWFwKSB7XG4gICAgICAgICAgICB2YXIgaXRlciA9IEtleWVkQ29sbGVjdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICBhc3NlcnROb3RJbmZpbml0ZShpdGVyLnNpemUpO1xuICAgICAgICAgICAgaXRlci5mb3JFYWNoKGZ1bmN0aW9uICh2LCBrKSB7IHJldHVybiBtYXAuc2V0KGssIHYpOyB9KTtcbiAgICAgICAgICB9KTtcbiAgfVxuXG4gIGlmICggTWFwJCQxICkgT3JkZXJlZE1hcC5fX3Byb3RvX18gPSBNYXAkJDE7XG4gIE9yZGVyZWRNYXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWFwJCQxICYmIE1hcCQkMS5wcm90b3R5cGUgKTtcbiAgT3JkZXJlZE1hcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPcmRlcmVkTWFwO1xuXG4gIE9yZGVyZWRNYXAub2YgPSBmdW5jdGlvbiBvZiAoLyouLi52YWx1ZXMqLykge1xuICAgIHJldHVybiB0aGlzKGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgT3JkZXJlZE1hcC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX190b1N0cmluZygnT3JkZXJlZE1hcCB7JywgJ30nKTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIEFjY2Vzc1xuXG4gIE9yZGVyZWRNYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoaywgbm90U2V0VmFsdWUpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLl9tYXAuZ2V0KGspO1xuICAgIHJldHVybiBpbmRleCAhPT0gdW5kZWZpbmVkID8gdGhpcy5fbGlzdC5nZXQoaW5kZXgpWzFdIDogbm90U2V0VmFsdWU7XG4gIH07XG5cbiAgLy8gQHByYWdtYSBNb2RpZmljYXRpb25cblxuICBPcmRlcmVkTWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICBpZiAodGhpcy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRoaXMuX19vd25lcklEKSB7XG4gICAgICB0aGlzLnNpemUgPSAwO1xuICAgICAgdGhpcy5fbWFwLmNsZWFyKCk7XG4gICAgICB0aGlzLl9saXN0LmNsZWFyKCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIGVtcHR5T3JkZXJlZE1hcCgpO1xuICB9O1xuXG4gIE9yZGVyZWRNYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIHNldCAoaywgdikge1xuICAgIHJldHVybiB1cGRhdGVPcmRlcmVkTWFwKHRoaXMsIGssIHYpO1xuICB9O1xuXG4gIE9yZGVyZWRNYXAucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSAoaykge1xuICAgIHJldHVybiB1cGRhdGVPcmRlcmVkTWFwKHRoaXMsIGssIE5PVF9TRVQpO1xuICB9O1xuXG4gIE9yZGVyZWRNYXAucHJvdG90eXBlLndhc0FsdGVyZWQgPSBmdW5jdGlvbiB3YXNBbHRlcmVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLndhc0FsdGVyZWQoKSB8fCB0aGlzLl9saXN0Lndhc0FsdGVyZWQoKTtcbiAgfTtcblxuICBPcmRlcmVkTWFwLnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy5fbGlzdC5fX2l0ZXJhdGUoXG4gICAgICBmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIGVudHJ5ICYmIGZuKGVudHJ5WzFdLCBlbnRyeVswXSwgdGhpcyQxKTsgfSxcbiAgICAgIHJldmVyc2VcbiAgICApO1xuICB9O1xuXG4gIE9yZGVyZWRNYXAucHJvdG90eXBlLl9faXRlcmF0b3IgPSBmdW5jdGlvbiBfX2l0ZXJhdG9yICh0eXBlLCByZXZlcnNlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3QuZnJvbUVudHJ5U2VxKCkuX19pdGVyYXRvcih0eXBlLCByZXZlcnNlKTtcbiAgfTtcblxuICBPcmRlcmVkTWFwLnByb3RvdHlwZS5fX2Vuc3VyZU93bmVyID0gZnVuY3Rpb24gX19lbnN1cmVPd25lciAob3duZXJJRCkge1xuICAgIGlmIChvd25lcklEID09PSB0aGlzLl9fb3duZXJJRCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHZhciBuZXdNYXAgPSB0aGlzLl9tYXAuX19lbnN1cmVPd25lcihvd25lcklEKTtcbiAgICB2YXIgbmV3TGlzdCA9IHRoaXMuX2xpc3QuX19lbnN1cmVPd25lcihvd25lcklEKTtcbiAgICBpZiAoIW93bmVySUQpIHtcbiAgICAgIGlmICh0aGlzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5T3JkZXJlZE1hcCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fX293bmVySUQgPSBvd25lcklEO1xuICAgICAgdGhpcy5fbWFwID0gbmV3TWFwO1xuICAgICAgdGhpcy5fbGlzdCA9IG5ld0xpc3Q7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIG1ha2VPcmRlcmVkTWFwKG5ld01hcCwgbmV3TGlzdCwgb3duZXJJRCwgdGhpcy5fX2hhc2gpO1xuICB9O1xuXG4gIHJldHVybiBPcmRlcmVkTWFwO1xufShNYXApKTtcblxuT3JkZXJlZE1hcC5pc09yZGVyZWRNYXAgPSBpc09yZGVyZWRNYXA7XG5cbk9yZGVyZWRNYXAucHJvdG90eXBlW0lTX09SREVSRURfU1lNQk9MXSA9IHRydWU7XG5PcmRlcmVkTWFwLnByb3RvdHlwZVtERUxFVEVdID0gT3JkZXJlZE1hcC5wcm90b3R5cGUucmVtb3ZlO1xuXG5mdW5jdGlvbiBtYWtlT3JkZXJlZE1hcChtYXAsIGxpc3QsIG93bmVySUQsIGhhc2gpIHtcbiAgdmFyIG9tYXAgPSBPYmplY3QuY3JlYXRlKE9yZGVyZWRNYXAucHJvdG90eXBlKTtcbiAgb21hcC5zaXplID0gbWFwID8gbWFwLnNpemUgOiAwO1xuICBvbWFwLl9tYXAgPSBtYXA7XG4gIG9tYXAuX2xpc3QgPSBsaXN0O1xuICBvbWFwLl9fb3duZXJJRCA9IG93bmVySUQ7XG4gIG9tYXAuX19oYXNoID0gaGFzaDtcbiAgcmV0dXJuIG9tYXA7XG59XG5cbnZhciBFTVBUWV9PUkRFUkVEX01BUDtcbmZ1bmN0aW9uIGVtcHR5T3JkZXJlZE1hcCgpIHtcbiAgcmV0dXJuIChcbiAgICBFTVBUWV9PUkRFUkVEX01BUCB8fFxuICAgIChFTVBUWV9PUkRFUkVEX01BUCA9IG1ha2VPcmRlcmVkTWFwKGVtcHR5TWFwKCksIGVtcHR5TGlzdCgpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlT3JkZXJlZE1hcChvbWFwLCBrLCB2KSB7XG4gIHZhciBtYXAgPSBvbWFwLl9tYXA7XG4gIHZhciBsaXN0ID0gb21hcC5fbGlzdDtcbiAgdmFyIGkgPSBtYXAuZ2V0KGspO1xuICB2YXIgaGFzID0gaSAhPT0gdW5kZWZpbmVkO1xuICB2YXIgbmV3TWFwO1xuICB2YXIgbmV3TGlzdDtcbiAgaWYgKHYgPT09IE5PVF9TRVQpIHtcbiAgICAvLyByZW1vdmVkXG4gICAgaWYgKCFoYXMpIHtcbiAgICAgIHJldHVybiBvbWFwO1xuICAgIH1cbiAgICBpZiAobGlzdC5zaXplID49IFNJWkUgJiYgbGlzdC5zaXplID49IG1hcC5zaXplICogMikge1xuICAgICAgbmV3TGlzdCA9IGxpc3QuZmlsdGVyKGZ1bmN0aW9uIChlbnRyeSwgaWR4KSB7IHJldHVybiBlbnRyeSAhPT0gdW5kZWZpbmVkICYmIGkgIT09IGlkeDsgfSk7XG4gICAgICBuZXdNYXAgPSBuZXdMaXN0XG4gICAgICAgIC50b0tleWVkU2VxKClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIGVudHJ5WzBdOyB9KVxuICAgICAgICAuZmxpcCgpXG4gICAgICAgIC50b01hcCgpO1xuICAgICAgaWYgKG9tYXAuX19vd25lcklEKSB7XG4gICAgICAgIG5ld01hcC5fX293bmVySUQgPSBuZXdMaXN0Ll9fb3duZXJJRCA9IG9tYXAuX19vd25lcklEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdNYXAgPSBtYXAucmVtb3ZlKGspO1xuICAgICAgbmV3TGlzdCA9IGkgPT09IGxpc3Quc2l6ZSAtIDEgPyBsaXN0LnBvcCgpIDogbGlzdC5zZXQoaSwgdW5kZWZpbmVkKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaGFzKSB7XG4gICAgaWYgKHYgPT09IGxpc3QuZ2V0KGkpWzFdKSB7XG4gICAgICByZXR1cm4gb21hcDtcbiAgICB9XG4gICAgbmV3TWFwID0gbWFwO1xuICAgIG5ld0xpc3QgPSBsaXN0LnNldChpLCBbaywgdl0pO1xuICB9IGVsc2Uge1xuICAgIG5ld01hcCA9IG1hcC5zZXQoaywgbGlzdC5zaXplKTtcbiAgICBuZXdMaXN0ID0gbGlzdC5zZXQobGlzdC5zaXplLCBbaywgdl0pO1xuICB9XG4gIGlmIChvbWFwLl9fb3duZXJJRCkge1xuICAgIG9tYXAuc2l6ZSA9IG5ld01hcC5zaXplO1xuICAgIG9tYXAuX21hcCA9IG5ld01hcDtcbiAgICBvbWFwLl9saXN0ID0gbmV3TGlzdDtcbiAgICBvbWFwLl9faGFzaCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gb21hcDtcbiAgfVxuICByZXR1cm4gbWFrZU9yZGVyZWRNYXAobmV3TWFwLCBuZXdMaXN0KTtcbn1cblxudmFyIElTX1NUQUNLX1NZTUJPTCA9ICdAQF9fSU1NVVRBQkxFX1NUQUNLX19AQCc7XG5cbmZ1bmN0aW9uIGlzU3RhY2sobWF5YmVTdGFjaykge1xuICByZXR1cm4gQm9vbGVhbihtYXliZVN0YWNrICYmIG1heWJlU3RhY2tbSVNfU1RBQ0tfU1lNQk9MXSk7XG59XG5cbnZhciBTdGFjayA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEluZGV4ZWRDb2xsZWN0aW9uJCQxKSB7XG4gIGZ1bmN0aW9uIFN0YWNrKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgID8gZW1wdHlTdGFjaygpXG4gICAgICA6IGlzU3RhY2sodmFsdWUpXG4gICAgICAgID8gdmFsdWVcbiAgICAgICAgOiBlbXB0eVN0YWNrKCkucHVzaEFsbCh2YWx1ZSk7XG4gIH1cblxuICBpZiAoIEluZGV4ZWRDb2xsZWN0aW9uJCQxICkgU3RhY2suX19wcm90b19fID0gSW5kZXhlZENvbGxlY3Rpb24kJDE7XG4gIFN0YWNrLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEluZGV4ZWRDb2xsZWN0aW9uJCQxICYmIEluZGV4ZWRDb2xsZWN0aW9uJCQxLnByb3RvdHlwZSApO1xuICBTdGFjay5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGFjaztcblxuICBTdGFjay5vZiA9IGZ1bmN0aW9uIG9mICgvKi4uLnZhbHVlcyovKSB7XG4gICAgcmV0dXJuIHRoaXMoYXJndW1lbnRzKTtcbiAgfTtcblxuICBTdGFjay5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX190b1N0cmluZygnU3RhY2sgWycsICddJyk7XG4gIH07XG5cbiAgLy8gQHByYWdtYSBBY2Nlc3NcblxuICBTdGFjay5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChpbmRleCwgbm90U2V0VmFsdWUpIHtcbiAgICB2YXIgaGVhZCA9IHRoaXMuX2hlYWQ7XG4gICAgaW5kZXggPSB3cmFwSW5kZXgodGhpcywgaW5kZXgpO1xuICAgIHdoaWxlIChoZWFkICYmIGluZGV4LS0pIHtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgfVxuICAgIHJldHVybiBoZWFkID8gaGVhZC52YWx1ZSA6IG5vdFNldFZhbHVlO1xuICB9O1xuXG4gIFN0YWNrLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24gcGVlayAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWQgJiYgdGhpcy5faGVhZC52YWx1ZTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIE1vZGlmaWNhdGlvblxuXG4gIFN0YWNrLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAoLyouLi52YWx1ZXMqLykge1xuICAgIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdmFyIG5ld1NpemUgPSB0aGlzLnNpemUgKyBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBoZWFkID0gdGhpcy5faGVhZDtcbiAgICBmb3IgKHZhciBpaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpaSA+PSAwOyBpaS0tKSB7XG4gICAgICBoZWFkID0ge1xuICAgICAgICB2YWx1ZTogYXJndW1lbnRzJDFbaWldLFxuICAgICAgICBuZXh0OiBoZWFkLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX19vd25lcklEKSB7XG4gICAgICB0aGlzLnNpemUgPSBuZXdTaXplO1xuICAgICAgdGhpcy5faGVhZCA9IGhlYWQ7XG4gICAgICB0aGlzLl9faGFzaCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX19hbHRlcmVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gbWFrZVN0YWNrKG5ld1NpemUsIGhlYWQpO1xuICB9O1xuXG4gIFN0YWNrLnByb3RvdHlwZS5wdXNoQWxsID0gZnVuY3Rpb24gcHVzaEFsbCAoaXRlcikge1xuICAgIGl0ZXIgPSBJbmRleGVkQ29sbGVjdGlvbiQkMShpdGVyKTtcbiAgICBpZiAoaXRlci5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCAmJiBpc1N0YWNrKGl0ZXIpKSB7XG4gICAgICByZXR1cm4gaXRlcjtcbiAgICB9XG4gICAgYXNzZXJ0Tm90SW5maW5pdGUoaXRlci5zaXplKTtcbiAgICB2YXIgbmV3U2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICB2YXIgaGVhZCA9IHRoaXMuX2hlYWQ7XG4gICAgaXRlci5fX2l0ZXJhdGUoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBuZXdTaXplKys7XG4gICAgICBoZWFkID0ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIG5leHQ6IGhlYWQsXG4gICAgICB9O1xuICAgIH0sIC8qIHJldmVyc2UgKi8gdHJ1ZSk7XG4gICAgaWYgKHRoaXMuX19vd25lcklEKSB7XG4gICAgICB0aGlzLnNpemUgPSBuZXdTaXplO1xuICAgICAgdGhpcy5faGVhZCA9IGhlYWQ7XG4gICAgICB0aGlzLl9faGFzaCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX19hbHRlcmVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gbWFrZVN0YWNrKG5ld1NpemUsIGhlYWQpO1xuICB9O1xuXG4gIFN0YWNrLnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbiBwb3AgKCkge1xuICAgIHJldHVybiB0aGlzLnNsaWNlKDEpO1xuICB9O1xuXG4gIFN0YWNrLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICBpZiAodGhpcy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRoaXMuX19vd25lcklEKSB7XG4gICAgICB0aGlzLnNpemUgPSAwO1xuICAgICAgdGhpcy5faGVhZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX19oYXNoID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fX2FsdGVyZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBlbXB0eVN0YWNrKCk7XG4gIH07XG5cbiAgU3RhY2sucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAod2hvbGVTbGljZShiZWdpbiwgZW5kLCB0aGlzLnNpemUpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdmFyIHJlc29sdmVkQmVnaW4gPSByZXNvbHZlQmVnaW4oYmVnaW4sIHRoaXMuc2l6ZSk7XG4gICAgdmFyIHJlc29sdmVkRW5kID0gcmVzb2x2ZUVuZChlbmQsIHRoaXMuc2l6ZSk7XG4gICAgaWYgKHJlc29sdmVkRW5kICE9PSB0aGlzLnNpemUpIHtcbiAgICAgIC8vIHN1cGVyLnNsaWNlKGJlZ2luLCBlbmQpO1xuICAgICAgcmV0dXJuIEluZGV4ZWRDb2xsZWN0aW9uJCQxLnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIH1cbiAgICB2YXIgbmV3U2l6ZSA9IHRoaXMuc2l6ZSAtIHJlc29sdmVkQmVnaW47XG4gICAgdmFyIGhlYWQgPSB0aGlzLl9oZWFkO1xuICAgIHdoaWxlIChyZXNvbHZlZEJlZ2luLS0pIHtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9fb3duZXJJRCkge1xuICAgICAgdGhpcy5zaXplID0gbmV3U2l6ZTtcbiAgICAgIHRoaXMuX2hlYWQgPSBoZWFkO1xuICAgICAgdGhpcy5fX2hhc2ggPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9fYWx0ZXJlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIG1ha2VTdGFjayhuZXdTaXplLCBoZWFkKTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIE11dGFiaWxpdHlcblxuICBTdGFjay5wcm90b3R5cGUuX19lbnN1cmVPd25lciA9IGZ1bmN0aW9uIF9fZW5zdXJlT3duZXIgKG93bmVySUQpIHtcbiAgICBpZiAob3duZXJJRCA9PT0gdGhpcy5fX293bmVySUQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAoIW93bmVySUQpIHtcbiAgICAgIGlmICh0aGlzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5U3RhY2soKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX19vd25lcklEID0gb3duZXJJRDtcbiAgICAgIHRoaXMuX19hbHRlcmVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIG1ha2VTdGFjayh0aGlzLnNpemUsIHRoaXMuX2hlYWQsIG93bmVySUQsIHRoaXMuX19oYXNoKTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIEl0ZXJhdGlvblxuXG4gIFN0YWNrLnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgcmV0dXJuIG5ldyBBcnJheVNlcSh0aGlzLnRvQXJyYXkoKSkuX19pdGVyYXRlKFxuICAgICAgICBmdW5jdGlvbiAodiwgaykgeyByZXR1cm4gZm4odiwgaywgdGhpcyQxKTsgfSxcbiAgICAgICAgcmV2ZXJzZVxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIHZhciBub2RlID0gdGhpcy5faGVhZDtcbiAgICB3aGlsZSAobm9kZSkge1xuICAgICAgaWYgKGZuKG5vZGUudmFsdWUsIGl0ZXJhdGlvbnMrKywgdGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZXJhdGlvbnM7XG4gIH07XG5cbiAgU3RhY2sucHJvdG90eXBlLl9faXRlcmF0b3IgPSBmdW5jdGlvbiBfX2l0ZXJhdG9yICh0eXBlLCByZXZlcnNlKSB7XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIHJldHVybiBuZXcgQXJyYXlTZXEodGhpcy50b0FycmF5KCkpLl9faXRlcmF0b3IodHlwZSwgcmV2ZXJzZSk7XG4gICAgfVxuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICB2YXIgbm9kZSA9IHRoaXMuX2hlYWQ7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBub2RlLnZhbHVlO1xuICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JWYWx1ZSh0eXBlLCBpdGVyYXRpb25zKyssIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVyYXRvckRvbmUoKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gU3RhY2s7XG59KEluZGV4ZWRDb2xsZWN0aW9uKSk7XG5cblN0YWNrLmlzU3RhY2sgPSBpc1N0YWNrO1xuXG52YXIgU3RhY2tQcm90b3R5cGUgPSBTdGFjay5wcm90b3R5cGU7XG5TdGFja1Byb3RvdHlwZVtJU19TVEFDS19TWU1CT0xdID0gdHJ1ZTtcblN0YWNrUHJvdG90eXBlLnNoaWZ0ID0gU3RhY2tQcm90b3R5cGUucG9wO1xuU3RhY2tQcm90b3R5cGUudW5zaGlmdCA9IFN0YWNrUHJvdG90eXBlLnB1c2g7XG5TdGFja1Byb3RvdHlwZS51bnNoaWZ0QWxsID0gU3RhY2tQcm90b3R5cGUucHVzaEFsbDtcblN0YWNrUHJvdG90eXBlLndpdGhNdXRhdGlvbnMgPSB3aXRoTXV0YXRpb25zO1xuU3RhY2tQcm90b3R5cGUud2FzQWx0ZXJlZCA9IHdhc0FsdGVyZWQ7XG5TdGFja1Byb3RvdHlwZS5hc0ltbXV0YWJsZSA9IGFzSW1tdXRhYmxlO1xuU3RhY2tQcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9pbml0J10gPSBTdGFja1Byb3RvdHlwZS5hc011dGFibGUgPSBhc011dGFibGU7XG5TdGFja1Byb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL3N0ZXAnXSA9IGZ1bmN0aW9uKHJlc3VsdCwgYXJyKSB7XG4gIHJldHVybiByZXN1bHQudW5zaGlmdChhcnIpO1xufTtcblN0YWNrUHJvdG90eXBlWydAQHRyYW5zZHVjZXIvcmVzdWx0J10gPSBmdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIG9iai5hc0ltbXV0YWJsZSgpO1xufTtcblxuZnVuY3Rpb24gbWFrZVN0YWNrKHNpemUsIGhlYWQsIG93bmVySUQsIGhhc2gpIHtcbiAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUoU3RhY2tQcm90b3R5cGUpO1xuICBtYXAuc2l6ZSA9IHNpemU7XG4gIG1hcC5faGVhZCA9IGhlYWQ7XG4gIG1hcC5fX293bmVySUQgPSBvd25lcklEO1xuICBtYXAuX19oYXNoID0gaGFzaDtcbiAgbWFwLl9fYWx0ZXJlZCA9IGZhbHNlO1xuICByZXR1cm4gbWFwO1xufVxuXG52YXIgRU1QVFlfU1RBQ0s7XG5mdW5jdGlvbiBlbXB0eVN0YWNrKCkge1xuICByZXR1cm4gRU1QVFlfU1RBQ0sgfHwgKEVNUFRZX1NUQUNLID0gbWFrZVN0YWNrKDApKTtcbn1cblxudmFyIElTX1NFVF9TWU1CT0wgPSAnQEBfX0lNTVVUQUJMRV9TRVRfX0BAJztcblxuZnVuY3Rpb24gaXNTZXQobWF5YmVTZXQpIHtcbiAgcmV0dXJuIEJvb2xlYW4obWF5YmVTZXQgJiYgbWF5YmVTZXRbSVNfU0VUX1NZTUJPTF0pO1xufVxuXG5mdW5jdGlvbiBpc09yZGVyZWRTZXQobWF5YmVPcmRlcmVkU2V0KSB7XG4gIHJldHVybiBpc1NldChtYXliZU9yZGVyZWRTZXQpICYmIGlzT3JkZXJlZChtYXliZU9yZGVyZWRTZXQpO1xufVxuXG5mdW5jdGlvbiBkZWVwRXF1YWwoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKFxuICAgICFpc0NvbGxlY3Rpb24oYikgfHxcbiAgICAoYS5zaXplICE9PSB1bmRlZmluZWQgJiYgYi5zaXplICE9PSB1bmRlZmluZWQgJiYgYS5zaXplICE9PSBiLnNpemUpIHx8XG4gICAgKGEuX19oYXNoICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGIuX19oYXNoICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGEuX19oYXNoICE9PSBiLl9faGFzaCkgfHxcbiAgICBpc0tleWVkKGEpICE9PSBpc0tleWVkKGIpIHx8XG4gICAgaXNJbmRleGVkKGEpICE9PSBpc0luZGV4ZWQoYikgfHxcbiAgICBpc09yZGVyZWQoYSkgIT09IGlzT3JkZXJlZChiKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYS5zaXplID09PSAwICYmIGIuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIG5vdEFzc29jaWF0aXZlID0gIWlzQXNzb2NpYXRpdmUoYSk7XG5cbiAgaWYgKGlzT3JkZXJlZChhKSkge1xuICAgIHZhciBlbnRyaWVzID0gYS5lbnRyaWVzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIGIuZXZlcnkoZnVuY3Rpb24gKHYsIGspIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllcy5uZXh0KCkudmFsdWU7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBpcyhlbnRyeVsxXSwgdikgJiYgKG5vdEFzc29jaWF0aXZlIHx8IGlzKGVudHJ5WzBdLCBrKSk7XG4gICAgICB9KSAmJiBlbnRyaWVzLm5leHQoKS5kb25lXG4gICAgKTtcbiAgfVxuXG4gIHZhciBmbGlwcGVkID0gZmFsc2U7XG5cbiAgaWYgKGEuc2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGIuc2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGEuY2FjaGVSZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYS5jYWNoZVJlc3VsdCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmbGlwcGVkID0gdHJ1ZTtcbiAgICAgIHZhciBfID0gYTtcbiAgICAgIGEgPSBiO1xuICAgICAgYiA9IF87XG4gICAgfVxuICB9XG5cbiAgdmFyIGFsbEVxdWFsID0gdHJ1ZTtcbiAgdmFyIGJTaXplID0gYi5fX2l0ZXJhdGUoZnVuY3Rpb24gKHYsIGspIHtcbiAgICBpZiAoXG4gICAgICBub3RBc3NvY2lhdGl2ZVxuICAgICAgICA/ICFhLmhhcyh2KVxuICAgICAgICA6IGZsaXBwZWRcbiAgICAgICAgICA/ICFpcyh2LCBhLmdldChrLCBOT1RfU0VUKSlcbiAgICAgICAgICA6ICFpcyhhLmdldChrLCBOT1RfU0VUKSwgdilcbiAgICApIHtcbiAgICAgIGFsbEVxdWFsID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYWxsRXF1YWwgJiYgYS5zaXplID09PSBiU2l6ZTtcbn1cblxuLyoqXG4gKiBDb250cmlidXRlcyBhZGRpdGlvbmFsIG1ldGhvZHMgdG8gYSBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBtaXhpbihjdG9yLCBtZXRob2RzKSB7XG4gIHZhciBrZXlDb3BpZXIgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgY3Rvci5wcm90b3R5cGVba2V5XSA9IG1ldGhvZHNba2V5XTtcbiAgfTtcbiAgT2JqZWN0LmtleXMobWV0aG9kcykuZm9yRWFjaChrZXlDb3BpZXIpO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtZXRob2RzKS5mb3JFYWNoKGtleUNvcGllcik7XG4gIHJldHVybiBjdG9yO1xufVxuXG5mdW5jdGlvbiB0b0pTKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoIWlzQ29sbGVjdGlvbih2YWx1ZSkpIHtcbiAgICBpZiAoIWlzRGF0YVN0cnVjdHVyZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgdmFsdWUgPSBTZXEodmFsdWUpO1xuICB9XG4gIGlmIChpc0tleWVkKHZhbHVlKSkge1xuICAgIHZhciByZXN1bHQkMSA9IHt9O1xuICAgIHZhbHVlLl9faXRlcmF0ZShmdW5jdGlvbiAodiwgaykge1xuICAgICAgcmVzdWx0JDFba10gPSB0b0pTKHYpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQkMTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhbHVlLl9faXRlcmF0ZShmdW5jdGlvbiAodikge1xuICAgIHJlc3VsdC5wdXNoKHRvSlModikpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmFyIFNldCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKFNldENvbGxlY3Rpb24kJDEpIHtcbiAgZnVuY3Rpb24gU2V0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgID8gZW1wdHlTZXQoKVxuICAgICAgOiBpc1NldCh2YWx1ZSkgJiYgIWlzT3JkZXJlZCh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZVxuICAgICAgICA6IGVtcHR5U2V0KCkud2l0aE11dGF0aW9ucyhmdW5jdGlvbiAoc2V0KSB7XG4gICAgICAgICAgICB2YXIgaXRlciA9IFNldENvbGxlY3Rpb24kJDEodmFsdWUpO1xuICAgICAgICAgICAgYXNzZXJ0Tm90SW5maW5pdGUoaXRlci5zaXplKTtcbiAgICAgICAgICAgIGl0ZXIuZm9yRWFjaChmdW5jdGlvbiAodikgeyByZXR1cm4gc2V0LmFkZCh2KTsgfSk7XG4gICAgICAgICAgfSk7XG4gIH1cblxuICBpZiAoIFNldENvbGxlY3Rpb24kJDEgKSBTZXQuX19wcm90b19fID0gU2V0Q29sbGVjdGlvbiQkMTtcbiAgU2V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFNldENvbGxlY3Rpb24kJDEgJiYgU2V0Q29sbGVjdGlvbiQkMS5wcm90b3R5cGUgKTtcbiAgU2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNldDtcblxuICBTZXQub2YgPSBmdW5jdGlvbiBvZiAoLyouLi52YWx1ZXMqLykge1xuICAgIHJldHVybiB0aGlzKGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgU2V0LmZyb21LZXlzID0gZnVuY3Rpb24gZnJvbUtleXMgKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMoS2V5ZWRDb2xsZWN0aW9uKHZhbHVlKS5rZXlTZXEoKSk7XG4gIH07XG5cbiAgU2V0LmludGVyc2VjdCA9IGZ1bmN0aW9uIGludGVyc2VjdCAoc2V0cykge1xuICAgIHNldHMgPSBDb2xsZWN0aW9uKHNldHMpLnRvQXJyYXkoKTtcbiAgICByZXR1cm4gc2V0cy5sZW5ndGhcbiAgICAgID8gU2V0UHJvdG90eXBlLmludGVyc2VjdC5hcHBseShTZXQoc2V0cy5wb3AoKSksIHNldHMpXG4gICAgICA6IGVtcHR5U2V0KCk7XG4gIH07XG5cbiAgU2V0LnVuaW9uID0gZnVuY3Rpb24gdW5pb24gKHNldHMpIHtcbiAgICBzZXRzID0gQ29sbGVjdGlvbihzZXRzKS50b0FycmF5KCk7XG4gICAgcmV0dXJuIHNldHMubGVuZ3RoXG4gICAgICA/IFNldFByb3RvdHlwZS51bmlvbi5hcHBseShTZXQoc2V0cy5wb3AoKSksIHNldHMpXG4gICAgICA6IGVtcHR5U2V0KCk7XG4gIH07XG5cbiAgU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCdTZXQgeycsICd9Jyk7XG4gIH07XG5cbiAgLy8gQHByYWdtYSBBY2Nlc3NcblxuICBTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIGhhcyAodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLmhhcyh2YWx1ZSk7XG4gIH07XG5cbiAgLy8gQHByYWdtYSBNb2RpZmljYXRpb25cblxuICBTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAodmFsdWUpIHtcbiAgICByZXR1cm4gdXBkYXRlU2V0KHRoaXMsIHRoaXMuX21hcC5zZXQodmFsdWUsIHZhbHVlKSk7XG4gIH07XG5cbiAgU2V0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUgKHZhbHVlKSB7XG4gICAgcmV0dXJuIHVwZGF0ZVNldCh0aGlzLCB0aGlzLl9tYXAucmVtb3ZlKHZhbHVlKSk7XG4gIH07XG5cbiAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICByZXR1cm4gdXBkYXRlU2V0KHRoaXMsIHRoaXMuX21hcC5jbGVhcigpKTtcbiAgfTtcblxuICAvLyBAcHJhZ21hIENvbXBvc2l0aW9uXG5cbiAgU2V0LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAgKG1hcHBlciwgY29udGV4dCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJlbW92ZXMgPSBbXTtcbiAgICB2YXIgYWRkcyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHZhciBtYXBwZWQgPSBtYXBwZXIuY2FsbChjb250ZXh0LCB2YWx1ZSwgdmFsdWUsIHRoaXMkMSk7XG4gICAgICBpZiAobWFwcGVkICE9PSB2YWx1ZSkge1xuICAgICAgICByZW1vdmVzLnB1c2godmFsdWUpO1xuICAgICAgICBhZGRzLnB1c2gobWFwcGVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChzZXQpIHtcbiAgICAgIHJlbW92ZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHNldC5yZW1vdmUodmFsdWUpOyB9KTtcbiAgICAgIGFkZHMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHNldC5hZGQodmFsdWUpOyB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBTZXQucHJvdG90eXBlLnVuaW9uID0gZnVuY3Rpb24gdW5pb24gKCkge1xuICAgIHZhciBpdGVycyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBpdGVyc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgaXRlcnMgPSBpdGVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguc2l6ZSAhPT0gMDsgfSk7XG4gICAgaWYgKGl0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmICh0aGlzLnNpemUgPT09IDAgJiYgIXRoaXMuX19vd25lcklEICYmIGl0ZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IoaXRlcnNbMF0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChzZXQpIHtcbiAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBpdGVycy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgU2V0Q29sbGVjdGlvbiQkMShpdGVyc1tpaV0pLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBzZXQuYWRkKHZhbHVlKTsgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3QgPSBmdW5jdGlvbiBpbnRlcnNlY3QgKCkge1xuICAgIHZhciBpdGVycyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBpdGVyc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgaWYgKGl0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGl0ZXJzID0gaXRlcnMubWFwKGZ1bmN0aW9uIChpdGVyKSB7IHJldHVybiBTZXRDb2xsZWN0aW9uJCQxKGl0ZXIpOyB9KTtcbiAgICB2YXIgdG9SZW1vdmUgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAoIWl0ZXJzLmV2ZXJ5KGZ1bmN0aW9uIChpdGVyKSB7IHJldHVybiBpdGVyLmluY2x1ZGVzKHZhbHVlKTsgfSkpIHtcbiAgICAgICAgdG9SZW1vdmUucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbiAoc2V0KSB7XG4gICAgICB0b1JlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBzZXQucmVtb3ZlKHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIFNldC5wcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiBzdWJ0cmFjdCAoKSB7XG4gICAgdmFyIGl0ZXJzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGl0ZXJzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICBpZiAoaXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaXRlcnMgPSBpdGVycy5tYXAoZnVuY3Rpb24gKGl0ZXIpIHsgcmV0dXJuIFNldENvbGxlY3Rpb24kJDEoaXRlcik7IH0pO1xuICAgIHZhciB0b1JlbW92ZSA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChpdGVycy5zb21lKGZ1bmN0aW9uIChpdGVyKSB7IHJldHVybiBpdGVyLmluY2x1ZGVzKHZhbHVlKTsgfSkpIHtcbiAgICAgICAgdG9SZW1vdmUucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbiAoc2V0KSB7XG4gICAgICB0b1JlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBzZXQucmVtb3ZlKHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIFNldC5wcm90b3R5cGUuc29ydCA9IGZ1bmN0aW9uIHNvcnQgKGNvbXBhcmF0b3IpIHtcbiAgICAvLyBMYXRlIGJpbmRpbmdcbiAgICByZXR1cm4gT3JkZXJlZFNldChzb3J0RmFjdG9yeSh0aGlzLCBjb21wYXJhdG9yKSk7XG4gIH07XG5cbiAgU2V0LnByb3RvdHlwZS5zb3J0QnkgPSBmdW5jdGlvbiBzb3J0QnkgKG1hcHBlciwgY29tcGFyYXRvcikge1xuICAgIC8vIExhdGUgYmluZGluZ1xuICAgIHJldHVybiBPcmRlcmVkU2V0KHNvcnRGYWN0b3J5KHRoaXMsIGNvbXBhcmF0b3IsIG1hcHBlcikpO1xuICB9O1xuXG4gIFNldC5wcm90b3R5cGUud2FzQWx0ZXJlZCA9IGZ1bmN0aW9uIHdhc0FsdGVyZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXAud2FzQWx0ZXJlZCgpO1xuICB9O1xuXG4gIFNldC5wcm90b3R5cGUuX19pdGVyYXRlID0gZnVuY3Rpb24gX19pdGVyYXRlIChmbiwgcmV2ZXJzZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgcmV0dXJuIHRoaXMuX21hcC5fX2l0ZXJhdGUoZnVuY3Rpb24gKGspIHsgcmV0dXJuIGZuKGssIGssIHRoaXMkMSk7IH0sIHJldmVyc2UpO1xuICB9O1xuXG4gIFNldC5wcm90b3R5cGUuX19pdGVyYXRvciA9IGZ1bmN0aW9uIF9faXRlcmF0b3IgKHR5cGUsIHJldmVyc2UpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLl9faXRlcmF0b3IodHlwZSwgcmV2ZXJzZSk7XG4gIH07XG5cbiAgU2V0LnByb3RvdHlwZS5fX2Vuc3VyZU93bmVyID0gZnVuY3Rpb24gX19lbnN1cmVPd25lciAob3duZXJJRCkge1xuICAgIGlmIChvd25lcklEID09PSB0aGlzLl9fb3duZXJJRCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHZhciBuZXdNYXAgPSB0aGlzLl9tYXAuX19lbnN1cmVPd25lcihvd25lcklEKTtcbiAgICBpZiAoIW93bmVySUQpIHtcbiAgICAgIGlmICh0aGlzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19lbXB0eSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fX293bmVySUQgPSBvd25lcklEO1xuICAgICAgdGhpcy5fbWFwID0gbmV3TWFwO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9fbWFrZShuZXdNYXAsIG93bmVySUQpO1xuICB9O1xuXG4gIHJldHVybiBTZXQ7XG59KFNldENvbGxlY3Rpb24pKTtcblxuU2V0LmlzU2V0ID0gaXNTZXQ7XG5cbnZhciBTZXRQcm90b3R5cGUgPSBTZXQucHJvdG90eXBlO1xuU2V0UHJvdG90eXBlW0lTX1NFVF9TWU1CT0xdID0gdHJ1ZTtcblNldFByb3RvdHlwZVtERUxFVEVdID0gU2V0UHJvdG90eXBlLnJlbW92ZTtcblNldFByb3RvdHlwZS5tZXJnZSA9IFNldFByb3RvdHlwZS5jb25jYXQgPSBTZXRQcm90b3R5cGUudW5pb247XG5TZXRQcm90b3R5cGUud2l0aE11dGF0aW9ucyA9IHdpdGhNdXRhdGlvbnM7XG5TZXRQcm90b3R5cGUuYXNJbW11dGFibGUgPSBhc0ltbXV0YWJsZTtcblNldFByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL2luaXQnXSA9IFNldFByb3RvdHlwZS5hc011dGFibGUgPSBhc011dGFibGU7XG5TZXRQcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9zdGVwJ10gPSBmdW5jdGlvbihyZXN1bHQsIGFycikge1xuICByZXR1cm4gcmVzdWx0LmFkZChhcnIpO1xufTtcblNldFByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL3Jlc3VsdCddID0gZnVuY3Rpb24ob2JqKSB7XG4gIHJldHVybiBvYmouYXNJbW11dGFibGUoKTtcbn07XG5cblNldFByb3RvdHlwZS5fX2VtcHR5ID0gZW1wdHlTZXQ7XG5TZXRQcm90b3R5cGUuX19tYWtlID0gbWFrZVNldDtcblxuZnVuY3Rpb24gdXBkYXRlU2V0KHNldCwgbmV3TWFwKSB7XG4gIGlmIChzZXQuX19vd25lcklEKSB7XG4gICAgc2V0LnNpemUgPSBuZXdNYXAuc2l6ZTtcbiAgICBzZXQuX21hcCA9IG5ld01hcDtcbiAgICByZXR1cm4gc2V0O1xuICB9XG4gIHJldHVybiBuZXdNYXAgPT09IHNldC5fbWFwXG4gICAgPyBzZXRcbiAgICA6IG5ld01hcC5zaXplID09PSAwXG4gICAgICA/IHNldC5fX2VtcHR5KClcbiAgICAgIDogc2V0Ll9fbWFrZShuZXdNYXApO1xufVxuXG5mdW5jdGlvbiBtYWtlU2V0KG1hcCwgb3duZXJJRCkge1xuICB2YXIgc2V0ID0gT2JqZWN0LmNyZWF0ZShTZXRQcm90b3R5cGUpO1xuICBzZXQuc2l6ZSA9IG1hcCA/IG1hcC5zaXplIDogMDtcbiAgc2V0Ll9tYXAgPSBtYXA7XG4gIHNldC5fX293bmVySUQgPSBvd25lcklEO1xuICByZXR1cm4gc2V0O1xufVxuXG52YXIgRU1QVFlfU0VUO1xuZnVuY3Rpb24gZW1wdHlTZXQoKSB7XG4gIHJldHVybiBFTVBUWV9TRVQgfHwgKEVNUFRZX1NFVCA9IG1ha2VTZXQoZW1wdHlNYXAoKSkpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBsYXp5IHNlcSBvZiBudW1zIGZyb20gc3RhcnQgKGluY2x1c2l2ZSkgdG8gZW5kXG4gKiAoZXhjbHVzaXZlKSwgYnkgc3RlcCwgd2hlcmUgc3RhcnQgZGVmYXVsdHMgdG8gMCwgc3RlcCB0byAxLCBhbmQgZW5kIHRvXG4gKiBpbmZpbml0eS4gV2hlbiBzdGFydCBpcyBlcXVhbCB0byBlbmQsIHJldHVybnMgZW1wdHkgbGlzdC5cbiAqL1xudmFyIFJhbmdlID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoSW5kZXhlZFNlcSQkMSkge1xuICBmdW5jdGlvbiBSYW5nZShzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJhbmdlKSkge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydCwgZW5kLCBzdGVwKTtcbiAgICB9XG4gICAgaW52YXJpYW50KHN0ZXAgIT09IDAsICdDYW5ub3Qgc3RlcCBhIFJhbmdlIGJ5IDAnKTtcbiAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBJbmZpbml0eTtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IDEgOiBNYXRoLmFicyhzdGVwKTtcbiAgICBpZiAoZW5kIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSAtc3RlcDtcbiAgICB9XG4gICAgdGhpcy5fc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLl9lbmQgPSBlbmQ7XG4gICAgdGhpcy5fc3RlcCA9IHN0ZXA7XG4gICAgdGhpcy5zaXplID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChlbmQgLSBzdGFydCkgLyBzdGVwIC0gMSkgKyAxKTtcbiAgICBpZiAodGhpcy5zaXplID09PSAwKSB7XG4gICAgICBpZiAoRU1QVFlfUkFOR0UpIHtcbiAgICAgICAgcmV0dXJuIEVNUFRZX1JBTkdFO1xuICAgICAgfVxuICAgICAgRU1QVFlfUkFOR0UgPSB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIGlmICggSW5kZXhlZFNlcSQkMSApIFJhbmdlLl9fcHJvdG9fXyA9IEluZGV4ZWRTZXEkJDE7XG4gIFJhbmdlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEluZGV4ZWRTZXEkJDEgJiYgSW5kZXhlZFNlcSQkMS5wcm90b3R5cGUgKTtcbiAgUmFuZ2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZ2U7XG5cbiAgUmFuZ2UucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgIGlmICh0aGlzLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiAnUmFuZ2UgW10nO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgJ1JhbmdlIFsgJyArXG4gICAgICB0aGlzLl9zdGFydCArXG4gICAgICAnLi4uJyArXG4gICAgICB0aGlzLl9lbmQgK1xuICAgICAgKHRoaXMuX3N0ZXAgIT09IDEgPyAnIGJ5ICcgKyB0aGlzLl9zdGVwIDogJycpICtcbiAgICAgICcgXSdcbiAgICApO1xuICB9O1xuXG4gIFJhbmdlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGluZGV4LCBub3RTZXRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmhhcyhpbmRleClcbiAgICAgID8gdGhpcy5fc3RhcnQgKyB3cmFwSW5kZXgodGhpcywgaW5kZXgpICogdGhpcy5fc3RlcFxuICAgICAgOiBub3RTZXRWYWx1ZTtcbiAgfTtcblxuICBSYW5nZS5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAoc2VhcmNoVmFsdWUpIHtcbiAgICB2YXIgcG9zc2libGVJbmRleCA9IChzZWFyY2hWYWx1ZSAtIHRoaXMuX3N0YXJ0KSAvIHRoaXMuX3N0ZXA7XG4gICAgcmV0dXJuIChcbiAgICAgIHBvc3NpYmxlSW5kZXggPj0gMCAmJlxuICAgICAgcG9zc2libGVJbmRleCA8IHRoaXMuc2l6ZSAmJlxuICAgICAgcG9zc2libGVJbmRleCA9PT0gTWF0aC5mbG9vcihwb3NzaWJsZUluZGV4KVxuICAgICk7XG4gIH07XG5cbiAgUmFuZ2UucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAod2hvbGVTbGljZShiZWdpbiwgZW5kLCB0aGlzLnNpemUpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYmVnaW4gPSByZXNvbHZlQmVnaW4oYmVnaW4sIHRoaXMuc2l6ZSk7XG4gICAgZW5kID0gcmVzb2x2ZUVuZChlbmQsIHRoaXMuc2l6ZSk7XG4gICAgaWYgKGVuZCA8PSBiZWdpbikge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZSgwLCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSYW5nZShcbiAgICAgIHRoaXMuZ2V0KGJlZ2luLCB0aGlzLl9lbmQpLFxuICAgICAgdGhpcy5nZXQoZW5kLCB0aGlzLl9lbmQpLFxuICAgICAgdGhpcy5fc3RlcFxuICAgICk7XG4gIH07XG5cbiAgUmFuZ2UucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mIChzZWFyY2hWYWx1ZSkge1xuICAgIHZhciBvZmZzZXRWYWx1ZSA9IHNlYXJjaFZhbHVlIC0gdGhpcy5fc3RhcnQ7XG4gICAgaWYgKG9mZnNldFZhbHVlICUgdGhpcy5fc3RlcCA9PT0gMCkge1xuICAgICAgdmFyIGluZGV4ID0gb2Zmc2V0VmFsdWUgLyB0aGlzLl9zdGVwO1xuICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnNpemUpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH07XG5cbiAgUmFuZ2UucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHNlYXJjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXhPZihzZWFyY2hWYWx1ZSk7XG4gIH07XG5cbiAgUmFuZ2UucHJvdG90eXBlLl9faXRlcmF0ZSA9IGZ1bmN0aW9uIF9faXRlcmF0ZSAoZm4sIHJldmVyc2UpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICB2YXIgc3RlcCA9IHRoaXMuX3N0ZXA7XG4gICAgdmFyIHZhbHVlID0gcmV2ZXJzZSA/IHRoaXMuX3N0YXJ0ICsgKHNpemUgLSAxKSAqIHN0ZXAgOiB0aGlzLl9zdGFydDtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgIT09IHNpemUpIHtcbiAgICAgIGlmIChmbih2YWx1ZSwgcmV2ZXJzZSA/IHNpemUgLSArK2kgOiBpKyssIHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHZhbHVlICs9IHJldmVyc2UgPyAtc3RlcCA6IHN0ZXA7XG4gICAgfVxuICAgIHJldHVybiBpO1xuICB9O1xuXG4gIFJhbmdlLnByb3RvdHlwZS5fX2l0ZXJhdG9yID0gZnVuY3Rpb24gX19pdGVyYXRvciAodHlwZSwgcmV2ZXJzZSkge1xuICAgIHZhciBzaXplID0gdGhpcy5zaXplO1xuICAgIHZhciBzdGVwID0gdGhpcy5fc3RlcDtcbiAgICB2YXIgdmFsdWUgPSByZXZlcnNlID8gdGhpcy5fc3RhcnQgKyAoc2l6ZSAtIDEpICogc3RlcCA6IHRoaXMuX3N0YXJ0O1xuICAgIHZhciBpID0gMDtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpID09PSBzaXplKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvckRvbmUoKTtcbiAgICAgIH1cbiAgICAgIHZhciB2ID0gdmFsdWU7XG4gICAgICB2YWx1ZSArPSByZXZlcnNlID8gLXN0ZXAgOiBzdGVwO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yVmFsdWUodHlwZSwgcmV2ZXJzZSA/IHNpemUgLSArK2kgOiBpKyssIHYpO1xuICAgIH0pO1xuICB9O1xuXG4gIFJhbmdlLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKG90aGVyKSB7XG4gICAgcmV0dXJuIG90aGVyIGluc3RhbmNlb2YgUmFuZ2VcbiAgICAgID8gdGhpcy5fc3RhcnQgPT09IG90aGVyLl9zdGFydCAmJlxuICAgICAgICAgIHRoaXMuX2VuZCA9PT0gb3RoZXIuX2VuZCAmJlxuICAgICAgICAgIHRoaXMuX3N0ZXAgPT09IG90aGVyLl9zdGVwXG4gICAgICA6IGRlZXBFcXVhbCh0aGlzLCBvdGhlcik7XG4gIH07XG5cbiAgcmV0dXJuIFJhbmdlO1xufShJbmRleGVkU2VxKSk7XG5cbnZhciBFTVBUWV9SQU5HRTtcblxuZnVuY3Rpb24gZ2V0SW4oY29sbGVjdGlvbiwgc2VhcmNoS2V5UGF0aCwgbm90U2V0VmFsdWUpIHtcbiAgdmFyIGtleVBhdGggPSBjb2VyY2VLZXlQYXRoKHNlYXJjaEtleVBhdGgpO1xuICB2YXIgaSA9IDA7XG4gIHdoaWxlIChpICE9PSBrZXlQYXRoLmxlbmd0aCkge1xuICAgIGNvbGxlY3Rpb24gPSBnZXQoY29sbGVjdGlvbiwga2V5UGF0aFtpKytdLCBOT1RfU0VUKTtcbiAgICBpZiAoY29sbGVjdGlvbiA9PT0gTk9UX1NFVCkge1xuICAgICAgcmV0dXJuIG5vdFNldFZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0SW4kMShzZWFyY2hLZXlQYXRoLCBub3RTZXRWYWx1ZSkge1xuICByZXR1cm4gZ2V0SW4odGhpcywgc2VhcmNoS2V5UGF0aCwgbm90U2V0VmFsdWUpO1xufVxuXG5mdW5jdGlvbiBoYXNJbihjb2xsZWN0aW9uLCBrZXlQYXRoKSB7XG4gIHJldHVybiBnZXRJbihjb2xsZWN0aW9uLCBrZXlQYXRoLCBOT1RfU0VUKSAhPT0gTk9UX1NFVDtcbn1cblxuZnVuY3Rpb24gaGFzSW4kMShzZWFyY2hLZXlQYXRoKSB7XG4gIHJldHVybiBoYXNJbih0aGlzLCBzZWFyY2hLZXlQYXRoKTtcbn1cblxuZnVuY3Rpb24gdG9PYmplY3QoKSB7XG4gIGFzc2VydE5vdEluZmluaXRlKHRoaXMuc2l6ZSk7XG4gIHZhciBvYmplY3QgPSB7fTtcbiAgdGhpcy5fX2l0ZXJhdGUoZnVuY3Rpb24gKHYsIGspIHtcbiAgICBvYmplY3Rba10gPSB2O1xuICB9KTtcbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuLy8gTm90ZTogYWxsIG9mIHRoZXNlIG1ldGhvZHMgYXJlIGRlcHJlY2F0ZWQuXG5Db2xsZWN0aW9uLmlzSXRlcmFibGUgPSBpc0NvbGxlY3Rpb247XG5Db2xsZWN0aW9uLmlzS2V5ZWQgPSBpc0tleWVkO1xuQ29sbGVjdGlvbi5pc0luZGV4ZWQgPSBpc0luZGV4ZWQ7XG5Db2xsZWN0aW9uLmlzQXNzb2NpYXRpdmUgPSBpc0Fzc29jaWF0aXZlO1xuQ29sbGVjdGlvbi5pc09yZGVyZWQgPSBpc09yZGVyZWQ7XG5cbkNvbGxlY3Rpb24uSXRlcmF0b3IgPSBJdGVyYXRvcjtcblxubWl4aW4oQ29sbGVjdGlvbiwge1xuICAvLyAjIyMgQ29udmVyc2lvbiB0byBvdGhlciB0eXBlc1xuXG4gIHRvQXJyYXk6IGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgYXNzZXJ0Tm90SW5maW5pdGUodGhpcy5zaXplKTtcbiAgICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkodGhpcy5zaXplIHx8IDApO1xuICAgIHZhciB1c2VUdXBsZXMgPSBpc0tleWVkKHRoaXMpO1xuICAgIHZhciBpID0gMDtcbiAgICB0aGlzLl9faXRlcmF0ZShmdW5jdGlvbiAodiwgaykge1xuICAgICAgLy8gS2V5ZWQgY29sbGVjdGlvbnMgcHJvZHVjZSBhbiBhcnJheSBvZiB0dXBsZXMuXG4gICAgICBhcnJheVtpKytdID0gdXNlVHVwbGVzID8gW2ssIHZdIDogdjtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH0sXG5cbiAgdG9JbmRleGVkU2VxOiBmdW5jdGlvbiB0b0luZGV4ZWRTZXEoKSB7XG4gICAgcmV0dXJuIG5ldyBUb0luZGV4ZWRTZXF1ZW5jZSh0aGlzKTtcbiAgfSxcblxuICB0b0pTOiBmdW5jdGlvbiB0b0pTJDEoKSB7XG4gICAgcmV0dXJuIHRvSlModGhpcyk7XG4gIH0sXG5cbiAgdG9LZXllZFNlcTogZnVuY3Rpb24gdG9LZXllZFNlcSgpIHtcbiAgICByZXR1cm4gbmV3IFRvS2V5ZWRTZXF1ZW5jZSh0aGlzLCB0cnVlKTtcbiAgfSxcblxuICB0b01hcDogZnVuY3Rpb24gdG9NYXAoKSB7XG4gICAgLy8gVXNlIExhdGUgQmluZGluZyBoZXJlIHRvIHNvbHZlIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5LlxuICAgIHJldHVybiBNYXAodGhpcy50b0tleWVkU2VxKCkpO1xuICB9LFxuXG4gIHRvT2JqZWN0OiB0b09iamVjdCxcblxuICB0b09yZGVyZWRNYXA6IGZ1bmN0aW9uIHRvT3JkZXJlZE1hcCgpIHtcbiAgICAvLyBVc2UgTGF0ZSBCaW5kaW5nIGhlcmUgdG8gc29sdmUgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG4gICAgcmV0dXJuIE9yZGVyZWRNYXAodGhpcy50b0tleWVkU2VxKCkpO1xuICB9LFxuXG4gIHRvT3JkZXJlZFNldDogZnVuY3Rpb24gdG9PcmRlcmVkU2V0KCkge1xuICAgIC8vIFVzZSBMYXRlIEJpbmRpbmcgaGVyZSB0byBzb2x2ZSB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeS5cbiAgICByZXR1cm4gT3JkZXJlZFNldChpc0tleWVkKHRoaXMpID8gdGhpcy52YWx1ZVNlcSgpIDogdGhpcyk7XG4gIH0sXG5cbiAgdG9TZXQ6IGZ1bmN0aW9uIHRvU2V0KCkge1xuICAgIC8vIFVzZSBMYXRlIEJpbmRpbmcgaGVyZSB0byBzb2x2ZSB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeS5cbiAgICByZXR1cm4gU2V0KGlzS2V5ZWQodGhpcykgPyB0aGlzLnZhbHVlU2VxKCkgOiB0aGlzKTtcbiAgfSxcblxuICB0b1NldFNlcTogZnVuY3Rpb24gdG9TZXRTZXEoKSB7XG4gICAgcmV0dXJuIG5ldyBUb1NldFNlcXVlbmNlKHRoaXMpO1xuICB9LFxuXG4gIHRvU2VxOiBmdW5jdGlvbiB0b1NlcSgpIHtcbiAgICByZXR1cm4gaXNJbmRleGVkKHRoaXMpXG4gICAgICA/IHRoaXMudG9JbmRleGVkU2VxKClcbiAgICAgIDogaXNLZXllZCh0aGlzKVxuICAgICAgICA/IHRoaXMudG9LZXllZFNlcSgpXG4gICAgICAgIDogdGhpcy50b1NldFNlcSgpO1xuICB9LFxuXG4gIHRvU3RhY2s6IGZ1bmN0aW9uIHRvU3RhY2soKSB7XG4gICAgLy8gVXNlIExhdGUgQmluZGluZyBoZXJlIHRvIHNvbHZlIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5LlxuICAgIHJldHVybiBTdGFjayhpc0tleWVkKHRoaXMpID8gdGhpcy52YWx1ZVNlcSgpIDogdGhpcyk7XG4gIH0sXG5cbiAgdG9MaXN0OiBmdW5jdGlvbiB0b0xpc3QoKSB7XG4gICAgLy8gVXNlIExhdGUgQmluZGluZyBoZXJlIHRvIHNvbHZlIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5LlxuICAgIHJldHVybiBMaXN0KGlzS2V5ZWQodGhpcykgPyB0aGlzLnZhbHVlU2VxKCkgOiB0aGlzKTtcbiAgfSxcblxuICAvLyAjIyMgQ29tbW9uIEphdmFTY3JpcHQgbWV0aG9kcyBhbmQgcHJvcGVydGllc1xuXG4gIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tDb2xsZWN0aW9uXSc7XG4gIH0sXG5cbiAgX190b1N0cmluZzogZnVuY3Rpb24gX190b1N0cmluZyhoZWFkLCB0YWlsKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIGhlYWQgKyB0YWlsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgaGVhZCArXG4gICAgICAnICcgK1xuICAgICAgdGhpcy50b1NlcSgpXG4gICAgICAgIC5tYXAodGhpcy5fX3RvU3RyaW5nTWFwcGVyKVxuICAgICAgICAuam9pbignLCAnKSArXG4gICAgICAnICcgK1xuICAgICAgdGFpbFxuICAgICk7XG4gIH0sXG5cbiAgLy8gIyMjIEVTNiBDb2xsZWN0aW9uIG1ldGhvZHMgKEVTNiBBcnJheSBhbmQgTWFwKVxuXG4gIGNvbmNhdDogZnVuY3Rpb24gY29uY2F0KCkge1xuICAgIHZhciB2YWx1ZXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgdmFsdWVzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICByZXR1cm4gcmVpZnkodGhpcywgY29uY2F0RmFjdG9yeSh0aGlzLCB2YWx1ZXMpKTtcbiAgfSxcblxuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoVmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5zb21lKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gaXModmFsdWUsIHNlYXJjaFZhbHVlKTsgfSk7XG4gIH0sXG5cbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5fX2l0ZXJhdG9yKElURVJBVEVfRU5UUklFUyk7XG4gIH0sXG5cbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIGFzc2VydE5vdEluZmluaXRlKHRoaXMuc2l6ZSk7XG4gICAgdmFyIHJldHVyblZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9faXRlcmF0ZShmdW5jdGlvbiAodiwgaywgYykge1xuICAgICAgaWYgKCFwcmVkaWNhdGUuY2FsbChjb250ZXh0LCB2LCBrLCBjKSkge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9LFxuXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCBmaWx0ZXJGYWN0b3J5KHRoaXMsIHByZWRpY2F0ZSwgY29udGV4dCwgdHJ1ZSkpO1xuICB9LFxuXG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQocHJlZGljYXRlLCBjb250ZXh0LCBub3RTZXRWYWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IHRoaXMuZmluZEVudHJ5KHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgcmV0dXJuIGVudHJ5ID8gZW50cnlbMV0gOiBub3RTZXRWYWx1ZTtcbiAgfSxcblxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKHNpZGVFZmZlY3QsIGNvbnRleHQpIHtcbiAgICBhc3NlcnROb3RJbmZpbml0ZSh0aGlzLnNpemUpO1xuICAgIHJldHVybiB0aGlzLl9faXRlcmF0ZShjb250ZXh0ID8gc2lkZUVmZmVjdC5iaW5kKGNvbnRleHQpIDogc2lkZUVmZmVjdCk7XG4gIH0sXG5cbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICBhc3NlcnROb3RJbmZpbml0ZSh0aGlzLnNpemUpO1xuICAgIHNlcGFyYXRvciA9IHNlcGFyYXRvciAhPT0gdW5kZWZpbmVkID8gJycgKyBzZXBhcmF0b3IgOiAnLCc7XG4gICAgdmFyIGpvaW5lZCA9ICcnO1xuICAgIHZhciBpc0ZpcnN0ID0gdHJ1ZTtcbiAgICB0aGlzLl9faXRlcmF0ZShmdW5jdGlvbiAodikge1xuICAgICAgaXNGaXJzdCA/IChpc0ZpcnN0ID0gZmFsc2UpIDogKGpvaW5lZCArPSBzZXBhcmF0b3IpO1xuICAgICAgam9pbmVkICs9IHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkID8gdi50b1N0cmluZygpIDogJyc7XG4gICAgfSk7XG4gICAgcmV0dXJuIGpvaW5lZDtcbiAgfSxcblxuICBrZXlzOiBmdW5jdGlvbiBrZXlzKCkge1xuICAgIHJldHVybiB0aGlzLl9faXRlcmF0b3IoSVRFUkFURV9LRVlTKTtcbiAgfSxcblxuICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBwZXIsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gcmVpZnkodGhpcywgbWFwRmFjdG9yeSh0aGlzLCBtYXBwZXIsIGNvbnRleHQpKTtcbiAgfSxcblxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZSQxKHJlZHVjZXIsIGluaXRpYWxSZWR1Y3Rpb24sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgdGhpcyxcbiAgICAgIHJlZHVjZXIsXG4gICAgICBpbml0aWFsUmVkdWN0aW9uLFxuICAgICAgY29udGV4dCxcbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPCAyLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9LFxuXG4gIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChyZWR1Y2VyLCBpbml0aWFsUmVkdWN0aW9uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHJlZHVjZShcbiAgICAgIHRoaXMsXG4gICAgICByZWR1Y2VyLFxuICAgICAgaW5pdGlhbFJlZHVjdGlvbixcbiAgICAgIGNvbnRleHQsXG4gICAgICBhcmd1bWVudHMubGVuZ3RoIDwgMixcbiAgICAgIHRydWVcbiAgICApO1xuICB9LFxuXG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgcmV0dXJuIHJlaWZ5KHRoaXMsIHJldmVyc2VGYWN0b3J5KHRoaXMsIHRydWUpKTtcbiAgfSxcblxuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCBzbGljZUZhY3RvcnkodGhpcywgYmVnaW4sIGVuZCwgdHJ1ZSkpO1xuICB9LFxuXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUocHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuICF0aGlzLmV2ZXJ5KG5vdChwcmVkaWNhdGUpLCBjb250ZXh0KTtcbiAgfSxcblxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmF0b3IpIHtcbiAgICByZXR1cm4gcmVpZnkodGhpcywgc29ydEZhY3RvcnkodGhpcywgY29tcGFyYXRvcikpO1xuICB9LFxuXG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9faXRlcmF0b3IoSVRFUkFURV9WQUxVRVMpO1xuICB9LFxuXG4gIC8vICMjIyBNb3JlIHNlcXVlbnRpYWwgbWV0aG9kc1xuXG4gIGJ1dExhc3Q6IGZ1bmN0aW9uIGJ1dExhc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2xpY2UoMCwgLTEpO1xuICB9LFxuXG4gIGlzRW1wdHk6IGZ1bmN0aW9uIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5zaXplID09PSAwIDogIXRoaXMuc29tZShmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9KTtcbiAgfSxcblxuICBjb3VudDogZnVuY3Rpb24gY291bnQocHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGVuc3VyZVNpemUoXG4gICAgICBwcmVkaWNhdGUgPyB0aGlzLnRvU2VxKCkuZmlsdGVyKHByZWRpY2F0ZSwgY29udGV4dCkgOiB0aGlzXG4gICAgKTtcbiAgfSxcblxuICBjb3VudEJ5OiBmdW5jdGlvbiBjb3VudEJ5KGdyb3VwZXIsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY291bnRCeUZhY3RvcnkodGhpcywgZ3JvdXBlciwgY29udGV4dCk7XG4gIH0sXG5cbiAgZXF1YWxzOiBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHtcbiAgICByZXR1cm4gZGVlcEVxdWFsKHRoaXMsIG90aGVyKTtcbiAgfSxcblxuICBlbnRyeVNlcTogZnVuY3Rpb24gZW50cnlTZXEoKSB7XG4gICAgdmFyIGNvbGxlY3Rpb24gPSB0aGlzO1xuICAgIGlmIChjb2xsZWN0aW9uLl9jYWNoZSkge1xuICAgICAgLy8gV2UgY2FjaGUgYXMgYW4gZW50cmllcyBhcnJheSwgc28gd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBjYWNoZSFcbiAgICAgIHJldHVybiBuZXcgQXJyYXlTZXEoY29sbGVjdGlvbi5fY2FjaGUpO1xuICAgIH1cbiAgICB2YXIgZW50cmllc1NlcXVlbmNlID0gY29sbGVjdGlvblxuICAgICAgLnRvU2VxKClcbiAgICAgIC5tYXAoZW50cnlNYXBwZXIpXG4gICAgICAudG9JbmRleGVkU2VxKCk7XG4gICAgZW50cmllc1NlcXVlbmNlLmZyb21FbnRyeVNlcSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbGxlY3Rpb24udG9TZXEoKTsgfTtcbiAgICByZXR1cm4gZW50cmllc1NlcXVlbmNlO1xuICB9LFxuXG4gIGZpbHRlck5vdDogZnVuY3Rpb24gZmlsdGVyTm90KHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcihub3QocHJlZGljYXRlKSwgY29udGV4dCk7XG4gIH0sXG5cbiAgZmluZEVudHJ5OiBmdW5jdGlvbiBmaW5kRW50cnkocHJlZGljYXRlLCBjb250ZXh0LCBub3RTZXRWYWx1ZSkge1xuICAgIHZhciBmb3VuZCA9IG5vdFNldFZhbHVlO1xuICAgIHRoaXMuX19pdGVyYXRlKGZ1bmN0aW9uICh2LCBrLCBjKSB7XG4gICAgICBpZiAocHJlZGljYXRlLmNhbGwoY29udGV4dCwgdiwgaywgYykpIHtcbiAgICAgICAgZm91bmQgPSBbaywgdl07XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm91bmQ7XG4gIH0sXG5cbiAgZmluZEtleTogZnVuY3Rpb24gZmluZEtleShwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgZW50cnkgPSB0aGlzLmZpbmRFbnRyeShwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeVswXTtcbiAgfSxcblxuICBmaW5kTGFzdDogZnVuY3Rpb24gZmluZExhc3QocHJlZGljYXRlLCBjb250ZXh0LCBub3RTZXRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnRvS2V5ZWRTZXEoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpbmQocHJlZGljYXRlLCBjb250ZXh0LCBub3RTZXRWYWx1ZSk7XG4gIH0sXG5cbiAgZmluZExhc3RFbnRyeTogZnVuY3Rpb24gZmluZExhc3RFbnRyeShwcmVkaWNhdGUsIGNvbnRleHQsIG5vdFNldFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudG9LZXllZFNlcSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZmluZEVudHJ5KHByZWRpY2F0ZSwgY29udGV4dCwgbm90U2V0VmFsdWUpO1xuICB9LFxuXG4gIGZpbmRMYXN0S2V5OiBmdW5jdGlvbiBmaW5kTGFzdEtleShwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gdGhpcy50b0tleWVkU2VxKClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5maW5kS2V5KHByZWRpY2F0ZSwgY29udGV4dCk7XG4gIH0sXG5cbiAgZmlyc3Q6IGZ1bmN0aW9uIGZpcnN0KG5vdFNldFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZChyZXR1cm5UcnVlLCBudWxsLCBub3RTZXRWYWx1ZSk7XG4gIH0sXG5cbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChtYXBwZXIsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gcmVpZnkodGhpcywgZmxhdE1hcEZhY3RvcnkodGhpcywgbWFwcGVyLCBjb250ZXh0KSk7XG4gIH0sXG5cbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbihkZXB0aCkge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCBmbGF0dGVuRmFjdG9yeSh0aGlzLCBkZXB0aCwgdHJ1ZSkpO1xuICB9LFxuXG4gIGZyb21FbnRyeVNlcTogZnVuY3Rpb24gZnJvbUVudHJ5U2VxKCkge1xuICAgIHJldHVybiBuZXcgRnJvbUVudHJpZXNTZXF1ZW5jZSh0aGlzKTtcbiAgfSxcblxuICBnZXQ6IGZ1bmN0aW9uIGdldChzZWFyY2hLZXksIG5vdFNldFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZChmdW5jdGlvbiAoXywga2V5KSB7IHJldHVybiBpcyhrZXksIHNlYXJjaEtleSk7IH0sIHVuZGVmaW5lZCwgbm90U2V0VmFsdWUpO1xuICB9LFxuXG4gIGdldEluOiBnZXRJbiQxLFxuXG4gIGdyb3VwQnk6IGZ1bmN0aW9uIGdyb3VwQnkoZ3JvdXBlciwgY29udGV4dCkge1xuICAgIHJldHVybiBncm91cEJ5RmFjdG9yeSh0aGlzLCBncm91cGVyLCBjb250ZXh0KTtcbiAgfSxcblxuICBoYXM6IGZ1bmN0aW9uIGhhcyhzZWFyY2hLZXkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoc2VhcmNoS2V5LCBOT1RfU0VUKSAhPT0gTk9UX1NFVDtcbiAgfSxcblxuICBoYXNJbjogaGFzSW4kMSxcblxuICBpc1N1YnNldDogZnVuY3Rpb24gaXNTdWJzZXQoaXRlcikge1xuICAgIGl0ZXIgPSB0eXBlb2YgaXRlci5pbmNsdWRlcyA9PT0gJ2Z1bmN0aW9uJyA/IGl0ZXIgOiBDb2xsZWN0aW9uKGl0ZXIpO1xuICAgIHJldHVybiB0aGlzLmV2ZXJ5KGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gaXRlci5pbmNsdWRlcyh2YWx1ZSk7IH0pO1xuICB9LFxuXG4gIGlzU3VwZXJzZXQ6IGZ1bmN0aW9uIGlzU3VwZXJzZXQoaXRlcikge1xuICAgIGl0ZXIgPSB0eXBlb2YgaXRlci5pc1N1YnNldCA9PT0gJ2Z1bmN0aW9uJyA/IGl0ZXIgOiBDb2xsZWN0aW9uKGl0ZXIpO1xuICAgIHJldHVybiBpdGVyLmlzU3Vic2V0KHRoaXMpO1xuICB9LFxuXG4gIGtleU9mOiBmdW5jdGlvbiBrZXlPZihzZWFyY2hWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmZpbmRLZXkoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBpcyh2YWx1ZSwgc2VhcmNoVmFsdWUpOyB9KTtcbiAgfSxcblxuICBrZXlTZXE6IGZ1bmN0aW9uIGtleVNlcSgpIHtcbiAgICByZXR1cm4gdGhpcy50b1NlcSgpXG4gICAgICAubWFwKGtleU1hcHBlcilcbiAgICAgIC50b0luZGV4ZWRTZXEoKTtcbiAgfSxcblxuICBsYXN0OiBmdW5jdGlvbiBsYXN0KG5vdFNldFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TZXEoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpcnN0KG5vdFNldFZhbHVlKTtcbiAgfSxcblxuICBsYXN0S2V5T2Y6IGZ1bmN0aW9uIGxhc3RLZXlPZihzZWFyY2hWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnRvS2V5ZWRTZXEoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmtleU9mKHNlYXJjaFZhbHVlKTtcbiAgfSxcblxuICBtYXg6IGZ1bmN0aW9uIG1heChjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIG1heEZhY3RvcnkodGhpcywgY29tcGFyYXRvcik7XG4gIH0sXG5cbiAgbWF4Qnk6IGZ1bmN0aW9uIG1heEJ5KG1hcHBlciwgY29tcGFyYXRvcikge1xuICAgIHJldHVybiBtYXhGYWN0b3J5KHRoaXMsIGNvbXBhcmF0b3IsIG1hcHBlcik7XG4gIH0sXG5cbiAgbWluOiBmdW5jdGlvbiBtaW4oY29tcGFyYXRvcikge1xuICAgIHJldHVybiBtYXhGYWN0b3J5KFxuICAgICAgdGhpcyxcbiAgICAgIGNvbXBhcmF0b3IgPyBuZWcoY29tcGFyYXRvcikgOiBkZWZhdWx0TmVnQ29tcGFyYXRvclxuICAgICk7XG4gIH0sXG5cbiAgbWluQnk6IGZ1bmN0aW9uIG1pbkJ5KG1hcHBlciwgY29tcGFyYXRvcikge1xuICAgIHJldHVybiBtYXhGYWN0b3J5KFxuICAgICAgdGhpcyxcbiAgICAgIGNvbXBhcmF0b3IgPyBuZWcoY29tcGFyYXRvcikgOiBkZWZhdWx0TmVnQ29tcGFyYXRvcixcbiAgICAgIG1hcHBlclxuICAgICk7XG4gIH0sXG5cbiAgcmVzdDogZnVuY3Rpb24gcmVzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5zbGljZSgxKTtcbiAgfSxcblxuICBza2lwOiBmdW5jdGlvbiBza2lwKGFtb3VudCkge1xuICAgIHJldHVybiBhbW91bnQgPT09IDAgPyB0aGlzIDogdGhpcy5zbGljZShNYXRoLm1heCgwLCBhbW91bnQpKTtcbiAgfSxcblxuICBza2lwTGFzdDogZnVuY3Rpb24gc2tpcExhc3QoYW1vdW50KSB7XG4gICAgcmV0dXJuIGFtb3VudCA9PT0gMCA/IHRoaXMgOiB0aGlzLnNsaWNlKDAsIC1NYXRoLm1heCgwLCBhbW91bnQpKTtcbiAgfSxcblxuICBza2lwV2hpbGU6IGZ1bmN0aW9uIHNraXBXaGlsZShwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gcmVpZnkodGhpcywgc2tpcFdoaWxlRmFjdG9yeSh0aGlzLCBwcmVkaWNhdGUsIGNvbnRleHQsIHRydWUpKTtcbiAgfSxcblxuICBza2lwVW50aWw6IGZ1bmN0aW9uIHNraXBVbnRpbChwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gdGhpcy5za2lwV2hpbGUobm90KHByZWRpY2F0ZSksIGNvbnRleHQpO1xuICB9LFxuXG4gIHNvcnRCeTogZnVuY3Rpb24gc29ydEJ5KG1hcHBlciwgY29tcGFyYXRvcikge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCBzb3J0RmFjdG9yeSh0aGlzLCBjb21wYXJhdG9yLCBtYXBwZXIpKTtcbiAgfSxcblxuICB0YWtlOiBmdW5jdGlvbiB0YWtlKGFtb3VudCkge1xuICAgIHJldHVybiB0aGlzLnNsaWNlKDAsIE1hdGgubWF4KDAsIGFtb3VudCkpO1xuICB9LFxuXG4gIHRha2VMYXN0OiBmdW5jdGlvbiB0YWtlTGFzdChhbW91bnQpIHtcbiAgICByZXR1cm4gdGhpcy5zbGljZSgtTWF0aC5tYXgoMCwgYW1vdW50KSk7XG4gIH0sXG5cbiAgdGFrZVdoaWxlOiBmdW5jdGlvbiB0YWtlV2hpbGUocHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHJlaWZ5KHRoaXMsIHRha2VXaGlsZUZhY3RvcnkodGhpcywgcHJlZGljYXRlLCBjb250ZXh0KSk7XG4gIH0sXG5cbiAgdGFrZVVudGlsOiBmdW5jdGlvbiB0YWtlVW50aWwocHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHRoaXMudGFrZVdoaWxlKG5vdChwcmVkaWNhdGUpLCBjb250ZXh0KTtcbiAgfSxcblxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShmbikge1xuICAgIHJldHVybiBmbih0aGlzKTtcbiAgfSxcblxuICB2YWx1ZVNlcTogZnVuY3Rpb24gdmFsdWVTZXEoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JbmRleGVkU2VxKCk7XG4gIH0sXG5cbiAgLy8gIyMjIEhhc2hhYmxlIE9iamVjdFxuXG4gIGhhc2hDb2RlOiBmdW5jdGlvbiBoYXNoQ29kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fX2hhc2ggfHwgKHRoaXMuX19oYXNoID0gaGFzaENvbGxlY3Rpb24odGhpcykpO1xuICB9LFxuXG4gIC8vICMjIyBJbnRlcm5hbFxuXG4gIC8vIGFic3RyYWN0IF9faXRlcmF0ZShmbiwgcmV2ZXJzZSlcblxuICAvLyBhYnN0cmFjdCBfX2l0ZXJhdG9yKHR5cGUsIHJldmVyc2UpXG59KTtcblxudmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbkNvbGxlY3Rpb25Qcm90b3R5cGVbSVNfQ09MTEVDVElPTl9TWU1CT0xdID0gdHJ1ZTtcbkNvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JfU1lNQk9MXSA9IENvbGxlY3Rpb25Qcm90b3R5cGUudmFsdWVzO1xuQ29sbGVjdGlvblByb3RvdHlwZS50b0pTT04gPSBDb2xsZWN0aW9uUHJvdG90eXBlLnRvQXJyYXk7XG5Db2xsZWN0aW9uUHJvdG90eXBlLl9fdG9TdHJpbmdNYXBwZXIgPSBxdW90ZVN0cmluZztcbkNvbGxlY3Rpb25Qcm90b3R5cGUuaW5zcGVjdCA9IENvbGxlY3Rpb25Qcm90b3R5cGUudG9Tb3VyY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbn07XG5Db2xsZWN0aW9uUHJvdG90eXBlLmNoYWluID0gQ29sbGVjdGlvblByb3RvdHlwZS5mbGF0TWFwO1xuQ29sbGVjdGlvblByb3RvdHlwZS5jb250YWlucyA9IENvbGxlY3Rpb25Qcm90b3R5cGUuaW5jbHVkZXM7XG5cbm1peGluKEtleWVkQ29sbGVjdGlvbiwge1xuICAvLyAjIyMgTW9yZSBzZXF1ZW50aWFsIG1ldGhvZHNcblxuICBmbGlwOiBmdW5jdGlvbiBmbGlwKCkge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCBmbGlwRmFjdG9yeSh0aGlzKSk7XG4gIH0sXG5cbiAgbWFwRW50cmllczogZnVuY3Rpb24gbWFwRW50cmllcyhtYXBwZXIsIGNvbnRleHQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICByZXR1cm4gcmVpZnkoXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy50b1NlcSgpXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHYsIGspIHsgcmV0dXJuIG1hcHBlci5jYWxsKGNvbnRleHQsIFtrLCB2XSwgaXRlcmF0aW9ucysrLCB0aGlzJDEpOyB9KVxuICAgICAgICAuZnJvbUVudHJ5U2VxKClcbiAgICApO1xuICB9LFxuXG4gIG1hcEtleXM6IGZ1bmN0aW9uIG1hcEtleXMobWFwcGVyLCBjb250ZXh0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICByZXR1cm4gcmVpZnkoXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy50b1NlcSgpXG4gICAgICAgIC5mbGlwKClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoaywgdikgeyByZXR1cm4gbWFwcGVyLmNhbGwoY29udGV4dCwgaywgdiwgdGhpcyQxKTsgfSlcbiAgICAgICAgLmZsaXAoKVxuICAgICk7XG4gIH0sXG59KTtcblxudmFyIEtleWVkQ29sbGVjdGlvblByb3RvdHlwZSA9IEtleWVkQ29sbGVjdGlvbi5wcm90b3R5cGU7XG5LZXllZENvbGxlY3Rpb25Qcm90b3R5cGVbSVNfS0VZRURfU1lNQk9MXSA9IHRydWU7XG5LZXllZENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JfU1lNQk9MXSA9IENvbGxlY3Rpb25Qcm90b3R5cGUuZW50cmllcztcbktleWVkQ29sbGVjdGlvblByb3RvdHlwZS50b0pTT04gPSB0b09iamVjdDtcbktleWVkQ29sbGVjdGlvblByb3RvdHlwZS5fX3RvU3RyaW5nTWFwcGVyID0gZnVuY3Rpb24gKHYsIGspIHsgcmV0dXJuIHF1b3RlU3RyaW5nKGspICsgJzogJyArIHF1b3RlU3RyaW5nKHYpOyB9O1xuXG5taXhpbihJbmRleGVkQ29sbGVjdGlvbiwge1xuICAvLyAjIyMgQ29udmVyc2lvbiB0byBvdGhlciB0eXBlc1xuXG4gIHRvS2V5ZWRTZXE6IGZ1bmN0aW9uIHRvS2V5ZWRTZXEoKSB7XG4gICAgcmV0dXJuIG5ldyBUb0tleWVkU2VxdWVuY2UodGhpcywgZmFsc2UpO1xuICB9LFxuXG4gIC8vICMjIyBFUzYgQ29sbGVjdGlvbiBtZXRob2RzIChFUzYgQXJyYXkgYW5kIE1hcClcblxuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gcmVpZnkodGhpcywgZmlsdGVyRmFjdG9yeSh0aGlzLCBwcmVkaWNhdGUsIGNvbnRleHQsIGZhbHNlKSk7XG4gIH0sXG5cbiAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5maW5kRW50cnkocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gZW50cnkgPyBlbnRyeVswXSA6IC0xO1xuICB9LFxuXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoVmFsdWUpIHtcbiAgICB2YXIga2V5ID0gdGhpcy5rZXlPZihzZWFyY2hWYWx1ZSk7XG4gICAgcmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID8gLTEgOiBrZXk7XG4gIH0sXG5cbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaFZhbHVlKSB7XG4gICAgdmFyIGtleSA9IHRoaXMubGFzdEtleU9mKHNlYXJjaFZhbHVlKTtcbiAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgPyAtMSA6IGtleTtcbiAgfSxcblxuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIHJldHVybiByZWlmeSh0aGlzLCByZXZlcnNlRmFjdG9yeSh0aGlzLCBmYWxzZSkpO1xuICB9LFxuXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgcmV0dXJuIHJlaWZ5KHRoaXMsIHNsaWNlRmFjdG9yeSh0aGlzLCBiZWdpbiwgZW5kLCBmYWxzZSkpO1xuICB9LFxuXG4gIHNwbGljZTogZnVuY3Rpb24gc3BsaWNlKGluZGV4LCByZW1vdmVOdW0gLyosIC4uLnZhbHVlcyovKSB7XG4gICAgdmFyIG51bUFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJlbW92ZU51bSA9IE1hdGgubWF4KHJlbW92ZU51bSB8fCAwLCAwKTtcbiAgICBpZiAobnVtQXJncyA9PT0gMCB8fCAobnVtQXJncyA9PT0gMiAmJiAhcmVtb3ZlTnVtKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIElmIGluZGV4IGlzIG5lZ2F0aXZlLCBpdCBzaG91bGQgcmVzb2x2ZSByZWxhdGl2ZSB0byB0aGUgc2l6ZSBvZiB0aGVcbiAgICAvLyBjb2xsZWN0aW9uLiBIb3dldmVyIHNpemUgbWF5IGJlIGV4cGVuc2l2ZSB0byBjb21wdXRlIGlmIG5vdCBjYWNoZWQsIHNvXG4gICAgLy8gb25seSBjYWxsIGNvdW50KCkgaWYgdGhlIG51bWJlciBpcyBpbiBmYWN0IG5lZ2F0aXZlLlxuICAgIGluZGV4ID0gcmVzb2x2ZUJlZ2luKGluZGV4LCBpbmRleCA8IDAgPyB0aGlzLmNvdW50KCkgOiB0aGlzLnNpemUpO1xuICAgIHZhciBzcGxpY2VkID0gdGhpcy5zbGljZSgwLCBpbmRleCk7XG4gICAgcmV0dXJuIHJlaWZ5KFxuICAgICAgdGhpcyxcbiAgICAgIG51bUFyZ3MgPT09IDFcbiAgICAgICAgPyBzcGxpY2VkXG4gICAgICAgIDogc3BsaWNlZC5jb25jYXQoYXJyQ29weShhcmd1bWVudHMsIDIpLCB0aGlzLnNsaWNlKGluZGV4ICsgcmVtb3ZlTnVtKSlcbiAgICApO1xuICB9LFxuXG4gIC8vICMjIyBNb3JlIGNvbGxlY3Rpb24gbWV0aG9kc1xuXG4gIGZpbmRMYXN0SW5kZXg6IGZ1bmN0aW9uIGZpbmRMYXN0SW5kZXgocHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5maW5kTGFzdEVudHJ5KHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgcmV0dXJuIGVudHJ5ID8gZW50cnlbMF0gOiAtMTtcbiAgfSxcblxuICBmaXJzdDogZnVuY3Rpb24gZmlyc3Qobm90U2V0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoMCwgbm90U2V0VmFsdWUpO1xuICB9LFxuXG4gIGZsYXR0ZW46IGZ1bmN0aW9uIGZsYXR0ZW4oZGVwdGgpIHtcbiAgICByZXR1cm4gcmVpZnkodGhpcywgZmxhdHRlbkZhY3RvcnkodGhpcywgZGVwdGgsIGZhbHNlKSk7XG4gIH0sXG5cbiAgZ2V0OiBmdW5jdGlvbiBnZXQoaW5kZXgsIG5vdFNldFZhbHVlKSB7XG4gICAgaW5kZXggPSB3cmFwSW5kZXgodGhpcywgaW5kZXgpO1xuICAgIHJldHVybiBpbmRleCA8IDAgfHxcbiAgICAgICh0aGlzLnNpemUgPT09IEluZmluaXR5IHx8ICh0aGlzLnNpemUgIT09IHVuZGVmaW5lZCAmJiBpbmRleCA+IHRoaXMuc2l6ZSkpXG4gICAgICA/IG5vdFNldFZhbHVlXG4gICAgICA6IHRoaXMuZmluZChmdW5jdGlvbiAoXywga2V5KSB7IHJldHVybiBrZXkgPT09IGluZGV4OyB9LCB1bmRlZmluZWQsIG5vdFNldFZhbHVlKTtcbiAgfSxcblxuICBoYXM6IGZ1bmN0aW9uIGhhcyhpbmRleCkge1xuICAgIGluZGV4ID0gd3JhcEluZGV4KHRoaXMsIGluZGV4KTtcbiAgICByZXR1cm4gKFxuICAgICAgaW5kZXggPj0gMCAmJlxuICAgICAgKHRoaXMuc2l6ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5zaXplID09PSBJbmZpbml0eSB8fCBpbmRleCA8IHRoaXMuc2l6ZVxuICAgICAgICA6IHRoaXMuaW5kZXhPZihpbmRleCkgIT09IC0xKVxuICAgICk7XG4gIH0sXG5cbiAgaW50ZXJwb3NlOiBmdW5jdGlvbiBpbnRlcnBvc2Uoc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIHJlaWZ5KHRoaXMsIGludGVycG9zZUZhY3RvcnkodGhpcywgc2VwYXJhdG9yKSk7XG4gIH0sXG5cbiAgaW50ZXJsZWF2ZTogZnVuY3Rpb24gaW50ZXJsZWF2ZSgvKi4uLmNvbGxlY3Rpb25zKi8pIHtcbiAgICB2YXIgY29sbGVjdGlvbnMgPSBbdGhpc10uY29uY2F0KGFyckNvcHkoYXJndW1lbnRzKSk7XG4gICAgdmFyIHppcHBlZCA9IHppcFdpdGhGYWN0b3J5KHRoaXMudG9TZXEoKSwgSW5kZXhlZFNlcS5vZiwgY29sbGVjdGlvbnMpO1xuICAgIHZhciBpbnRlcmxlYXZlZCA9IHppcHBlZC5mbGF0dGVuKHRydWUpO1xuICAgIGlmICh6aXBwZWQuc2l6ZSkge1xuICAgICAgaW50ZXJsZWF2ZWQuc2l6ZSA9IHppcHBlZC5zaXplICogY29sbGVjdGlvbnMubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gcmVpZnkodGhpcywgaW50ZXJsZWF2ZWQpO1xuICB9LFxuXG4gIGtleVNlcTogZnVuY3Rpb24ga2V5U2VxKCkge1xuICAgIHJldHVybiBSYW5nZSgwLCB0aGlzLnNpemUpO1xuICB9LFxuXG4gIGxhc3Q6IGZ1bmN0aW9uIGxhc3Qobm90U2V0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoLTEsIG5vdFNldFZhbHVlKTtcbiAgfSxcblxuICBza2lwV2hpbGU6IGZ1bmN0aW9uIHNraXBXaGlsZShwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gcmVpZnkodGhpcywgc2tpcFdoaWxlRmFjdG9yeSh0aGlzLCBwcmVkaWNhdGUsIGNvbnRleHQsIGZhbHNlKSk7XG4gIH0sXG5cbiAgemlwOiBmdW5jdGlvbiB6aXAoLyosIC4uLmNvbGxlY3Rpb25zICovKSB7XG4gICAgdmFyIGNvbGxlY3Rpb25zID0gW3RoaXNdLmNvbmNhdChhcnJDb3B5KGFyZ3VtZW50cykpO1xuICAgIHJldHVybiByZWlmeSh0aGlzLCB6aXBXaXRoRmFjdG9yeSh0aGlzLCBkZWZhdWx0WmlwcGVyLCBjb2xsZWN0aW9ucykpO1xuICB9LFxuXG4gIHppcEFsbDogZnVuY3Rpb24gemlwQWxsKC8qLCAuLi5jb2xsZWN0aW9ucyAqLykge1xuICAgIHZhciBjb2xsZWN0aW9ucyA9IFt0aGlzXS5jb25jYXQoYXJyQ29weShhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gcmVpZnkodGhpcywgemlwV2l0aEZhY3RvcnkodGhpcywgZGVmYXVsdFppcHBlciwgY29sbGVjdGlvbnMsIHRydWUpKTtcbiAgfSxcblxuICB6aXBXaXRoOiBmdW5jdGlvbiB6aXBXaXRoKHppcHBlciAvKiwgLi4uY29sbGVjdGlvbnMgKi8pIHtcbiAgICB2YXIgY29sbGVjdGlvbnMgPSBhcnJDb3B5KGFyZ3VtZW50cyk7XG4gICAgY29sbGVjdGlvbnNbMF0gPSB0aGlzO1xuICAgIHJldHVybiByZWlmeSh0aGlzLCB6aXBXaXRoRmFjdG9yeSh0aGlzLCB6aXBwZXIsIGNvbGxlY3Rpb25zKSk7XG4gIH0sXG59KTtcblxudmFyIEluZGV4ZWRDb2xsZWN0aW9uUHJvdG90eXBlID0gSW5kZXhlZENvbGxlY3Rpb24ucHJvdG90eXBlO1xuSW5kZXhlZENvbGxlY3Rpb25Qcm90b3R5cGVbSVNfSU5ERVhFRF9TWU1CT0xdID0gdHJ1ZTtcbkluZGV4ZWRDb2xsZWN0aW9uUHJvdG90eXBlW0lTX09SREVSRURfU1lNQk9MXSA9IHRydWU7XG5cbm1peGluKFNldENvbGxlY3Rpb24sIHtcbiAgLy8gIyMjIEVTNiBDb2xsZWN0aW9uIG1ldGhvZHMgKEVTNiBBcnJheSBhbmQgTWFwKVxuXG4gIGdldDogZnVuY3Rpb24gZ2V0KHZhbHVlLCBub3RTZXRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmhhcyh2YWx1ZSkgPyB2YWx1ZSA6IG5vdFNldFZhbHVlO1xuICB9LFxuXG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmhhcyh2YWx1ZSk7XG4gIH0sXG5cbiAgLy8gIyMjIE1vcmUgc2VxdWVudGlhbCBtZXRob2RzXG5cbiAga2V5U2VxOiBmdW5jdGlvbiBrZXlTZXEoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVTZXEoKTtcbiAgfSxcbn0pO1xuXG5TZXRDb2xsZWN0aW9uLnByb3RvdHlwZS5oYXMgPSBDb2xsZWN0aW9uUHJvdG90eXBlLmluY2x1ZGVzO1xuU2V0Q29sbGVjdGlvbi5wcm90b3R5cGUuY29udGFpbnMgPSBTZXRDb2xsZWN0aW9uLnByb3RvdHlwZS5pbmNsdWRlcztcblxuLy8gTWl4aW4gc3ViY2xhc3Nlc1xuXG5taXhpbihLZXllZFNlcSwgS2V5ZWRDb2xsZWN0aW9uLnByb3RvdHlwZSk7XG5taXhpbihJbmRleGVkU2VxLCBJbmRleGVkQ29sbGVjdGlvbi5wcm90b3R5cGUpO1xubWl4aW4oU2V0U2VxLCBTZXRDb2xsZWN0aW9uLnByb3RvdHlwZSk7XG5cbi8vICNwcmFnbWEgSGVscGVyIGZ1bmN0aW9uc1xuXG5mdW5jdGlvbiByZWR1Y2UoY29sbGVjdGlvbiwgcmVkdWNlciwgcmVkdWN0aW9uLCBjb250ZXh0LCB1c2VGaXJzdCwgcmV2ZXJzZSkge1xuICBhc3NlcnROb3RJbmZpbml0ZShjb2xsZWN0aW9uLnNpemUpO1xuICBjb2xsZWN0aW9uLl9faXRlcmF0ZShmdW5jdGlvbiAodiwgaywgYykge1xuICAgIGlmICh1c2VGaXJzdCkge1xuICAgICAgdXNlRmlyc3QgPSBmYWxzZTtcbiAgICAgIHJlZHVjdGlvbiA9IHY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZHVjdGlvbiA9IHJlZHVjZXIuY2FsbChjb250ZXh0LCByZWR1Y3Rpb24sIHYsIGssIGMpO1xuICAgIH1cbiAgfSwgcmV2ZXJzZSk7XG4gIHJldHVybiByZWR1Y3Rpb247XG59XG5cbmZ1bmN0aW9uIGtleU1hcHBlcih2LCBrKSB7XG4gIHJldHVybiBrO1xufVxuXG5mdW5jdGlvbiBlbnRyeU1hcHBlcih2LCBrKSB7XG4gIHJldHVybiBbaywgdl07XG59XG5cbmZ1bmN0aW9uIG5vdChwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG5lZyhwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAtcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRaaXBwZXIoKSB7XG4gIHJldHVybiBhcnJDb3B5KGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHROZWdDb21wYXJhdG9yKGEsIGIpIHtcbiAgcmV0dXJuIGEgPCBiID8gMSA6IGEgPiBiID8gLTEgOiAwO1xufVxuXG5mdW5jdGlvbiBoYXNoQ29sbGVjdGlvbihjb2xsZWN0aW9uKSB7XG4gIGlmIChjb2xsZWN0aW9uLnNpemUgPT09IEluZmluaXR5KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgdmFyIG9yZGVyZWQgPSBpc09yZGVyZWQoY29sbGVjdGlvbik7XG4gIHZhciBrZXllZCA9IGlzS2V5ZWQoY29sbGVjdGlvbik7XG4gIHZhciBoID0gb3JkZXJlZCA/IDEgOiAwO1xuICB2YXIgc2l6ZSA9IGNvbGxlY3Rpb24uX19pdGVyYXRlKFxuICAgIGtleWVkXG4gICAgICA/IG9yZGVyZWRcbiAgICAgICAgPyBmdW5jdGlvbiAodiwgaykge1xuICAgICAgICAgICAgaCA9ICgzMSAqIGggKyBoYXNoTWVyZ2UoaGFzaCh2KSwgaGFzaChrKSkpIHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIDogZnVuY3Rpb24gKHYsIGspIHtcbiAgICAgICAgICAgIGggPSAoaCArIGhhc2hNZXJnZShoYXNoKHYpLCBoYXNoKGspKSkgfCAwO1xuICAgICAgICAgIH1cbiAgICAgIDogb3JkZXJlZFxuICAgICAgICA/IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICBoID0gKDMxICogaCArIGhhc2godikpIHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIDogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIGggPSAoaCArIGhhc2godikpIHwgMDtcbiAgICAgICAgICB9XG4gICk7XG4gIHJldHVybiBtdXJtdXJIYXNoT2ZTaXplKHNpemUsIGgpO1xufVxuXG5mdW5jdGlvbiBtdXJtdXJIYXNoT2ZTaXplKHNpemUsIGgpIHtcbiAgaCA9IGltdWwoaCwgMHhjYzllMmQ1MSk7XG4gIGggPSBpbXVsKChoIDw8IDE1KSB8IChoID4+PiAtMTUpLCAweDFiODczNTkzKTtcbiAgaCA9IGltdWwoKGggPDwgMTMpIHwgKGggPj4+IC0xMyksIDUpO1xuICBoID0gKChoICsgMHhlNjU0NmI2NCkgfCAwKSBeIHNpemU7XG4gIGggPSBpbXVsKGggXiAoaCA+Pj4gMTYpLCAweDg1ZWJjYTZiKTtcbiAgaCA9IGltdWwoaCBeIChoID4+PiAxMyksIDB4YzJiMmFlMzUpO1xuICBoID0gc21pKGggXiAoaCA+Pj4gMTYpKTtcbiAgcmV0dXJuIGg7XG59XG5cbmZ1bmN0aW9uIGhhc2hNZXJnZShhLCBiKSB7XG4gIHJldHVybiAoYSBeIChiICsgMHg5ZTM3NzliOSArIChhIDw8IDYpICsgKGEgPj4gMikpKSB8IDA7IC8vIGludFxufVxuXG52YXIgT3JkZXJlZFNldCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKFNldCQkMSkge1xuICBmdW5jdGlvbiBPcmRlcmVkU2V0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgID8gZW1wdHlPcmRlcmVkU2V0KClcbiAgICAgIDogaXNPcmRlcmVkU2V0KHZhbHVlKVxuICAgICAgICA/IHZhbHVlXG4gICAgICAgIDogZW1wdHlPcmRlcmVkU2V0KCkud2l0aE11dGF0aW9ucyhmdW5jdGlvbiAoc2V0KSB7XG4gICAgICAgICAgICB2YXIgaXRlciA9IFNldENvbGxlY3Rpb24odmFsdWUpO1xuICAgICAgICAgICAgYXNzZXJ0Tm90SW5maW5pdGUoaXRlci5zaXplKTtcbiAgICAgICAgICAgIGl0ZXIuZm9yRWFjaChmdW5jdGlvbiAodikgeyByZXR1cm4gc2V0LmFkZCh2KTsgfSk7XG4gICAgICAgICAgfSk7XG4gIH1cblxuICBpZiAoIFNldCQkMSApIE9yZGVyZWRTZXQuX19wcm90b19fID0gU2V0JCQxO1xuICBPcmRlcmVkU2V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFNldCQkMSAmJiBTZXQkJDEucHJvdG90eXBlICk7XG4gIE9yZGVyZWRTZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gT3JkZXJlZFNldDtcblxuICBPcmRlcmVkU2V0Lm9mID0gZnVuY3Rpb24gb2YgKC8qLi4udmFsdWVzKi8pIHtcbiAgICByZXR1cm4gdGhpcyhhcmd1bWVudHMpO1xuICB9O1xuXG4gIE9yZGVyZWRTZXQuZnJvbUtleXMgPSBmdW5jdGlvbiBmcm9tS2V5cyAodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcyhLZXllZENvbGxlY3Rpb24odmFsdWUpLmtleVNlcSgpKTtcbiAgfTtcblxuICBPcmRlcmVkU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCdPcmRlcmVkU2V0IHsnLCAnfScpO1xuICB9O1xuXG4gIHJldHVybiBPcmRlcmVkU2V0O1xufShTZXQpKTtcblxuT3JkZXJlZFNldC5pc09yZGVyZWRTZXQgPSBpc09yZGVyZWRTZXQ7XG5cbnZhciBPcmRlcmVkU2V0UHJvdG90eXBlID0gT3JkZXJlZFNldC5wcm90b3R5cGU7XG5PcmRlcmVkU2V0UHJvdG90eXBlW0lTX09SREVSRURfU1lNQk9MXSA9IHRydWU7XG5PcmRlcmVkU2V0UHJvdG90eXBlLnppcCA9IEluZGV4ZWRDb2xsZWN0aW9uUHJvdG90eXBlLnppcDtcbk9yZGVyZWRTZXRQcm90b3R5cGUuemlwV2l0aCA9IEluZGV4ZWRDb2xsZWN0aW9uUHJvdG90eXBlLnppcFdpdGg7XG5cbk9yZGVyZWRTZXRQcm90b3R5cGUuX19lbXB0eSA9IGVtcHR5T3JkZXJlZFNldDtcbk9yZGVyZWRTZXRQcm90b3R5cGUuX19tYWtlID0gbWFrZU9yZGVyZWRTZXQ7XG5cbmZ1bmN0aW9uIG1ha2VPcmRlcmVkU2V0KG1hcCwgb3duZXJJRCkge1xuICB2YXIgc2V0ID0gT2JqZWN0LmNyZWF0ZShPcmRlcmVkU2V0UHJvdG90eXBlKTtcbiAgc2V0LnNpemUgPSBtYXAgPyBtYXAuc2l6ZSA6IDA7XG4gIHNldC5fbWFwID0gbWFwO1xuICBzZXQuX19vd25lcklEID0gb3duZXJJRDtcbiAgcmV0dXJuIHNldDtcbn1cblxudmFyIEVNUFRZX09SREVSRURfU0VUO1xuZnVuY3Rpb24gZW1wdHlPcmRlcmVkU2V0KCkge1xuICByZXR1cm4gKFxuICAgIEVNUFRZX09SREVSRURfU0VUIHx8IChFTVBUWV9PUkRFUkVEX1NFVCA9IG1ha2VPcmRlcmVkU2V0KGVtcHR5T3JkZXJlZE1hcCgpKSlcbiAgKTtcbn1cblxudmFyIFJlY29yZCA9IGZ1bmN0aW9uIFJlY29yZChkZWZhdWx0VmFsdWVzLCBuYW1lKSB7XG4gIHZhciBoYXNJbml0aWFsaXplZDtcblxuICB2YXIgUmVjb3JkVHlwZSA9IGZ1bmN0aW9uIFJlY29yZCh2YWx1ZXMpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBSZWNvcmRUeXBlKSB7XG4gICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVjb3JkVHlwZSkpIHtcbiAgICAgIHJldHVybiBuZXcgUmVjb3JkVHlwZSh2YWx1ZXMpO1xuICAgIH1cbiAgICBpZiAoIWhhc0luaXRpYWxpemVkKSB7XG4gICAgICBoYXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRWYWx1ZXMpO1xuICAgICAgdmFyIGluZGljZXMgPSAoUmVjb3JkVHlwZVByb3RvdHlwZS5faW5kaWNlcyA9IHt9KTtcbiAgICAgIC8vIERlcHJlY2F0ZWQ6IGxlZnQgdG8gYXR0ZW1wdCBub3QgdG8gYnJlYWsgYW55IGV4dGVybmFsIGNvZGUgd2hpY2hcbiAgICAgIC8vIHJlbGllcyBvbiBhIC5fbmFtZSBwcm9wZXJ0eSBleGlzdGluZyBvbiByZWNvcmQgaW5zdGFuY2VzLlxuICAgICAgLy8gVXNlIFJlY29yZC5nZXREZXNjcmlwdGl2ZU5hbWUoKSBpbnN0ZWFkXG4gICAgICBSZWNvcmRUeXBlUHJvdG90eXBlLl9uYW1lID0gbmFtZTtcbiAgICAgIFJlY29yZFR5cGVQcm90b3R5cGUuX2tleXMgPSBrZXlzO1xuICAgICAgUmVjb3JkVHlwZVByb3RvdHlwZS5fZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRWYWx1ZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3BOYW1lID0ga2V5c1tpXTtcbiAgICAgICAgaW5kaWNlc1twcm9wTmFtZV0gPSBpO1xuICAgICAgICBpZiAoUmVjb3JkVHlwZVByb3RvdHlwZVtwcm9wTmFtZV0pIHtcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgICAgICAgdHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBjb25zb2xlLndhcm4gJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgJ0Nhbm5vdCBkZWZpbmUgJyArXG4gICAgICAgICAgICAgICAgcmVjb3JkTmFtZSh0aGlzKSArXG4gICAgICAgICAgICAgICAgJyB3aXRoIHByb3BlcnR5IFwiJyArXG4gICAgICAgICAgICAgICAgcHJvcE5hbWUgK1xuICAgICAgICAgICAgICAgICdcIiBzaW5jZSB0aGF0IHByb3BlcnR5IG5hbWUgaXMgcGFydCBvZiB0aGUgUmVjb3JkIEFQSS4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFByb3AoUmVjb3JkVHlwZVByb3RvdHlwZSwgcHJvcE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX19vd25lcklEID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3ZhbHVlcyA9IExpc3QoKS53aXRoTXV0YXRpb25zKGZ1bmN0aW9uIChsKSB7XG4gICAgICBsLnNldFNpemUodGhpcyQxLl9rZXlzLmxlbmd0aCk7XG4gICAgICBLZXllZENvbGxlY3Rpb24odmFsdWVzKS5mb3JFYWNoKGZ1bmN0aW9uICh2LCBrKSB7XG4gICAgICAgIGwuc2V0KHRoaXMkMS5faW5kaWNlc1trXSwgdiA9PT0gdGhpcyQxLl9kZWZhdWx0VmFsdWVzW2tdID8gdW5kZWZpbmVkIDogdik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgUmVjb3JkVHlwZVByb3RvdHlwZSA9IChSZWNvcmRUeXBlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoXG4gICAgUmVjb3JkUHJvdG90eXBlXG4gICkpO1xuICBSZWNvcmRUeXBlUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjb3JkVHlwZTtcblxuICBpZiAobmFtZSkge1xuICAgIFJlY29yZFR5cGUuZGlzcGxheU5hbWUgPSBuYW1lO1xuICB9XG5cbiAgcmV0dXJuIFJlY29yZFR5cGU7XG59O1xuXG5SZWNvcmQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgc3RyID0gcmVjb3JkTmFtZSh0aGlzKSArICcgeyAnO1xuICB2YXIga2V5cyA9IHRoaXMuX2tleXM7XG4gIHZhciBrO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpICE9PSBsOyBpKyspIHtcbiAgICBrID0ga2V5c1tpXTtcbiAgICBzdHIgKz0gKGkgPyAnLCAnIDogJycpICsgayArICc6ICcgKyBxdW90ZVN0cmluZyh0aGlzLmdldChrKSk7XG4gIH1cbiAgcmV0dXJuIHN0ciArICcgfSc7XG59O1xuXG5SZWNvcmQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAob3RoZXIpIHtcbiAgcmV0dXJuIChcbiAgICB0aGlzID09PSBvdGhlciB8fFxuICAgIChvdGhlciAmJlxuICAgICAgdGhpcy5fa2V5cyA9PT0gb3RoZXIuX2tleXMgJiZcbiAgICAgIHJlY29yZFNlcSh0aGlzKS5lcXVhbHMocmVjb3JkU2VxKG90aGVyKSkpXG4gICk7XG59O1xuXG5SZWNvcmQucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24gaGFzaENvZGUgKCkge1xuICByZXR1cm4gcmVjb3JkU2VxKHRoaXMpLmhhc2hDb2RlKCk7XG59O1xuXG4vLyBAcHJhZ21hIEFjY2Vzc1xuXG5SZWNvcmQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIGhhcyAoaykge1xuICByZXR1cm4gdGhpcy5faW5kaWNlcy5oYXNPd25Qcm9wZXJ0eShrKTtcbn07XG5cblJlY29yZC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChrLCBub3RTZXRWYWx1ZSkge1xuICBpZiAoIXRoaXMuaGFzKGspKSB7XG4gICAgcmV0dXJuIG5vdFNldFZhbHVlO1xuICB9XG4gIHZhciBpbmRleCA9IHRoaXMuX2luZGljZXNba107XG4gIHZhciB2YWx1ZSA9IHRoaXMuX3ZhbHVlcy5nZXQoaW5kZXgpO1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHRoaXMuX2RlZmF1bHRWYWx1ZXNba10gOiB2YWx1ZTtcbn07XG5cbi8vIEBwcmFnbWEgTW9kaWZpY2F0aW9uXG5cblJlY29yZC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gc2V0IChrLCB2KSB7XG4gIGlmICh0aGlzLmhhcyhrKSkge1xuICAgIHZhciBuZXdWYWx1ZXMgPSB0aGlzLl92YWx1ZXMuc2V0KFxuICAgICAgdGhpcy5faW5kaWNlc1trXSxcbiAgICAgIHYgPT09IHRoaXMuX2RlZmF1bHRWYWx1ZXNba10gPyB1bmRlZmluZWQgOiB2XG4gICAgKTtcbiAgICBpZiAobmV3VmFsdWVzICE9PSB0aGlzLl92YWx1ZXMgJiYgIXRoaXMuX19vd25lcklEKSB7XG4gICAgICByZXR1cm4gbWFrZVJlY29yZCh0aGlzLCBuZXdWYWx1ZXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cblJlY29yZC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlIChrKSB7XG4gIHJldHVybiB0aGlzLnNldChrKTtcbn07XG5cblJlY29yZC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhciAoKSB7XG4gIHZhciBuZXdWYWx1ZXMgPSB0aGlzLl92YWx1ZXMuY2xlYXIoKS5zZXRTaXplKHRoaXMuX2tleXMubGVuZ3RoKTtcbiAgcmV0dXJuIHRoaXMuX19vd25lcklEID8gdGhpcyA6IG1ha2VSZWNvcmQodGhpcywgbmV3VmFsdWVzKTtcbn07XG5cblJlY29yZC5wcm90b3R5cGUud2FzQWx0ZXJlZCA9IGZ1bmN0aW9uIHdhc0FsdGVyZWQgKCkge1xuICByZXR1cm4gdGhpcy5fdmFsdWVzLndhc0FsdGVyZWQoKTtcbn07XG5cblJlY29yZC5wcm90b3R5cGUudG9TZXEgPSBmdW5jdGlvbiB0b1NlcSAoKSB7XG4gIHJldHVybiByZWNvcmRTZXEodGhpcyk7XG59O1xuXG5SZWNvcmQucHJvdG90eXBlLnRvSlMgPSBmdW5jdGlvbiB0b0pTJDEgKCkge1xuICByZXR1cm4gdG9KUyh0aGlzKTtcbn07XG5cblJlY29yZC5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uIGVudHJpZXMgKCkge1xuICByZXR1cm4gdGhpcy5fX2l0ZXJhdG9yKElURVJBVEVfRU5UUklFUyk7XG59O1xuXG5SZWNvcmQucHJvdG90eXBlLl9faXRlcmF0b3IgPSBmdW5jdGlvbiBfX2l0ZXJhdG9yICh0eXBlLCByZXZlcnNlKSB7XG4gIHJldHVybiByZWNvcmRTZXEodGhpcykuX19pdGVyYXRvcih0eXBlLCByZXZlcnNlKTtcbn07XG5cblJlY29yZC5wcm90b3R5cGUuX19pdGVyYXRlID0gZnVuY3Rpb24gX19pdGVyYXRlIChmbiwgcmV2ZXJzZSkge1xuICByZXR1cm4gcmVjb3JkU2VxKHRoaXMpLl9faXRlcmF0ZShmbiwgcmV2ZXJzZSk7XG59O1xuXG5SZWNvcmQucHJvdG90eXBlLl9fZW5zdXJlT3duZXIgPSBmdW5jdGlvbiBfX2Vuc3VyZU93bmVyIChvd25lcklEKSB7XG4gIGlmIChvd25lcklEID09PSB0aGlzLl9fb3duZXJJRCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHZhciBuZXdWYWx1ZXMgPSB0aGlzLl92YWx1ZXMuX19lbnN1cmVPd25lcihvd25lcklEKTtcbiAgaWYgKCFvd25lcklEKSB7XG4gICAgdGhpcy5fX293bmVySUQgPSBvd25lcklEO1xuICAgIHRoaXMuX3ZhbHVlcyA9IG5ld1ZhbHVlcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICByZXR1cm4gbWFrZVJlY29yZCh0aGlzLCBuZXdWYWx1ZXMsIG93bmVySUQpO1xufTtcblxuUmVjb3JkLmlzUmVjb3JkID0gaXNSZWNvcmQ7XG5SZWNvcmQuZ2V0RGVzY3JpcHRpdmVOYW1lID0gcmVjb3JkTmFtZTtcbnZhciBSZWNvcmRQcm90b3R5cGUgPSBSZWNvcmQucHJvdG90eXBlO1xuUmVjb3JkUHJvdG90eXBlW0lTX1JFQ09SRF9TWU1CT0xdID0gdHJ1ZTtcblJlY29yZFByb3RvdHlwZVtERUxFVEVdID0gUmVjb3JkUHJvdG90eXBlLnJlbW92ZTtcblJlY29yZFByb3RvdHlwZS5kZWxldGVJbiA9IFJlY29yZFByb3RvdHlwZS5yZW1vdmVJbiA9IGRlbGV0ZUluO1xuUmVjb3JkUHJvdG90eXBlLmdldEluID0gZ2V0SW4kMTtcblJlY29yZFByb3RvdHlwZS5oYXNJbiA9IENvbGxlY3Rpb25Qcm90b3R5cGUuaGFzSW47XG5SZWNvcmRQcm90b3R5cGUubWVyZ2UgPSBtZXJnZTtcblJlY29yZFByb3RvdHlwZS5tZXJnZVdpdGggPSBtZXJnZVdpdGg7XG5SZWNvcmRQcm90b3R5cGUubWVyZ2VJbiA9IG1lcmdlSW47XG5SZWNvcmRQcm90b3R5cGUubWVyZ2VEZWVwID0gbWVyZ2VEZWVwJDE7XG5SZWNvcmRQcm90b3R5cGUubWVyZ2VEZWVwV2l0aCA9IG1lcmdlRGVlcFdpdGgkMTtcblJlY29yZFByb3RvdHlwZS5tZXJnZURlZXBJbiA9IG1lcmdlRGVlcEluO1xuUmVjb3JkUHJvdG90eXBlLnNldEluID0gc2V0SW4kMTtcblJlY29yZFByb3RvdHlwZS51cGRhdGUgPSB1cGRhdGUkMTtcblJlY29yZFByb3RvdHlwZS51cGRhdGVJbiA9IHVwZGF0ZUluJDE7XG5SZWNvcmRQcm90b3R5cGUud2l0aE11dGF0aW9ucyA9IHdpdGhNdXRhdGlvbnM7XG5SZWNvcmRQcm90b3R5cGUuYXNNdXRhYmxlID0gYXNNdXRhYmxlO1xuUmVjb3JkUHJvdG90eXBlLmFzSW1tdXRhYmxlID0gYXNJbW11dGFibGU7XG5SZWNvcmRQcm90b3R5cGVbSVRFUkFUT1JfU1lNQk9MXSA9IFJlY29yZFByb3RvdHlwZS5lbnRyaWVzO1xuUmVjb3JkUHJvdG90eXBlLnRvSlNPTiA9IFJlY29yZFByb3RvdHlwZS50b09iamVjdCA9XG4gIENvbGxlY3Rpb25Qcm90b3R5cGUudG9PYmplY3Q7XG5SZWNvcmRQcm90b3R5cGUuaW5zcGVjdCA9IFJlY29yZFByb3RvdHlwZS50b1NvdXJjZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50b1N0cmluZygpO1xufTtcblxuZnVuY3Rpb24gbWFrZVJlY29yZChsaWtlUmVjb3JkLCB2YWx1ZXMsIG93bmVySUQpIHtcbiAgdmFyIHJlY29yZCA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGxpa2VSZWNvcmQpKTtcbiAgcmVjb3JkLl92YWx1ZXMgPSB2YWx1ZXM7XG4gIHJlY29yZC5fX293bmVySUQgPSBvd25lcklEO1xuICByZXR1cm4gcmVjb3JkO1xufVxuXG5mdW5jdGlvbiByZWNvcmROYW1lKHJlY29yZCkge1xuICByZXR1cm4gcmVjb3JkLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IHJlY29yZC5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdSZWNvcmQnO1xufVxuXG5mdW5jdGlvbiByZWNvcmRTZXEocmVjb3JkKSB7XG4gIHJldHVybiBrZXllZFNlcUZyb21WYWx1ZShyZWNvcmQuX2tleXMubWFwKGZ1bmN0aW9uIChrKSB7IHJldHVybiBbaywgcmVjb3JkLmdldChrKV07IH0pKTtcbn1cblxuZnVuY3Rpb24gc2V0UHJvcChwcm90b3R5cGUsIG5hbWUpIHtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCBuYW1lLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQobmFtZSk7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICBpbnZhcmlhbnQodGhpcy5fX293bmVySUQsICdDYW5ub3Qgc2V0IG9uIGFuIGltbXV0YWJsZSByZWNvcmQuJyk7XG4gICAgICAgIHRoaXMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5IGZhaWxlZC4gUHJvYmFibHkgSUU4LlxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxhenkgU2VxIG9mIGB2YWx1ZWAgcmVwZWF0ZWQgYHRpbWVzYCB0aW1lcy4gV2hlbiBgdGltZXNgIGlzXG4gKiB1bmRlZmluZWQsIHJldHVybnMgYW4gaW5maW5pdGUgc2VxdWVuY2Ugb2YgYHZhbHVlYC5cbiAqL1xudmFyIFJlcGVhdCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEluZGV4ZWRTZXEkJDEpIHtcbiAgZnVuY3Rpb24gUmVwZWF0KHZhbHVlLCB0aW1lcykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXBlYXQpKSB7XG4gICAgICByZXR1cm4gbmV3IFJlcGVhdCh2YWx1ZSwgdGltZXMpO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuc2l6ZSA9IHRpbWVzID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IE1hdGgubWF4KDAsIHRpbWVzKTtcbiAgICBpZiAodGhpcy5zaXplID09PSAwKSB7XG4gICAgICBpZiAoRU1QVFlfUkVQRUFUKSB7XG4gICAgICAgIHJldHVybiBFTVBUWV9SRVBFQVQ7XG4gICAgICB9XG4gICAgICBFTVBUWV9SRVBFQVQgPSB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIGlmICggSW5kZXhlZFNlcSQkMSApIFJlcGVhdC5fX3Byb3RvX18gPSBJbmRleGVkU2VxJCQxO1xuICBSZXBlYXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSW5kZXhlZFNlcSQkMSAmJiBJbmRleGVkU2VxJCQxLnByb3RvdHlwZSApO1xuICBSZXBlYXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVwZWF0O1xuXG4gIFJlcGVhdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuICdSZXBlYXQgW10nO1xuICAgIH1cbiAgICByZXR1cm4gJ1JlcGVhdCBbICcgKyB0aGlzLl92YWx1ZSArICcgJyArIHRoaXMuc2l6ZSArICcgdGltZXMgXSc7XG4gIH07XG5cbiAgUmVwZWF0LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGluZGV4LCBub3RTZXRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmhhcyhpbmRleCkgPyB0aGlzLl92YWx1ZSA6IG5vdFNldFZhbHVlO1xuICB9O1xuXG4gIFJlcGVhdC5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAoc2VhcmNoVmFsdWUpIHtcbiAgICByZXR1cm4gaXModGhpcy5fdmFsdWUsIHNlYXJjaFZhbHVlKTtcbiAgfTtcblxuICBSZXBlYXQucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICByZXR1cm4gd2hvbGVTbGljZShiZWdpbiwgZW5kLCBzaXplKVxuICAgICAgPyB0aGlzXG4gICAgICA6IG5ldyBSZXBlYXQoXG4gICAgICAgICAgdGhpcy5fdmFsdWUsXG4gICAgICAgICAgcmVzb2x2ZUVuZChlbmQsIHNpemUpIC0gcmVzb2x2ZUJlZ2luKGJlZ2luLCBzaXplKVxuICAgICAgICApO1xuICB9O1xuXG4gIFJlcGVhdC5wcm90b3R5cGUucmV2ZXJzZSA9IGZ1bmN0aW9uIHJldmVyc2UgKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIFJlcGVhdC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHNlYXJjaFZhbHVlKSB7XG4gICAgaWYgKGlzKHRoaXMuX3ZhbHVlLCBzZWFyY2hWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH07XG5cbiAgUmVwZWF0LnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mIChzZWFyY2hWYWx1ZSkge1xuICAgIGlmIChpcyh0aGlzLl92YWx1ZSwgc2VhcmNoVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaXplO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH07XG5cbiAgUmVwZWF0LnByb3RvdHlwZS5fX2l0ZXJhdGUgPSBmdW5jdGlvbiBfX2l0ZXJhdGUgKGZuLCByZXZlcnNlKSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLnNpemU7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpICE9PSBzaXplKSB7XG4gICAgICBpZiAoZm4odGhpcy5fdmFsdWUsIHJldmVyc2UgPyBzaXplIC0gKytpIDogaSsrLCB0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpO1xuICB9O1xuXG4gIFJlcGVhdC5wcm90b3R5cGUuX19pdGVyYXRvciA9IGZ1bmN0aW9uIF9faXRlcmF0b3IgKHR5cGUsIHJldmVyc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBzaXplID0gdGhpcy5zaXplO1xuICAgIHZhciBpID0gMDtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKFxuICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gaSA9PT0gc2l6ZVxuICAgICAgICAgID8gaXRlcmF0b3JEb25lKClcbiAgICAgICAgICA6IGl0ZXJhdG9yVmFsdWUodHlwZSwgcmV2ZXJzZSA/IHNpemUgLSArK2kgOiBpKyssIHRoaXMkMS5fdmFsdWUpOyB9XG4gICAgKTtcbiAgfTtcblxuICBSZXBlYXQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAob3RoZXIpIHtcbiAgICByZXR1cm4gb3RoZXIgaW5zdGFuY2VvZiBSZXBlYXRcbiAgICAgID8gaXModGhpcy5fdmFsdWUsIG90aGVyLl92YWx1ZSlcbiAgICAgIDogZGVlcEVxdWFsKG90aGVyKTtcbiAgfTtcblxuICByZXR1cm4gUmVwZWF0O1xufShJbmRleGVkU2VxKSk7XG5cbnZhciBFTVBUWV9SRVBFQVQ7XG5cbmZ1bmN0aW9uIGZyb21KUyh2YWx1ZSwgY29udmVydGVyKSB7XG4gIHJldHVybiBmcm9tSlNXaXRoKFxuICAgIFtdLFxuICAgIGNvbnZlcnRlciB8fCBkZWZhdWx0Q29udmVydGVyLFxuICAgIHZhbHVlLFxuICAgICcnLFxuICAgIGNvbnZlcnRlciAmJiBjb252ZXJ0ZXIubGVuZ3RoID4gMiA/IFtdIDogdW5kZWZpbmVkLFxuICAgIHsgJyc6IHZhbHVlIH1cbiAgKTtcbn1cblxuZnVuY3Rpb24gZnJvbUpTV2l0aChzdGFjaywgY29udmVydGVyLCB2YWx1ZSwga2V5LCBrZXlQYXRoLCBwYXJlbnRWYWx1ZSkge1xuICB2YXIgdG9TZXEgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgID8gSW5kZXhlZFNlcVxuICAgIDogaXNQbGFpbk9iaih2YWx1ZSlcbiAgICAgID8gS2V5ZWRTZXFcbiAgICAgIDogbnVsbDtcbiAgaWYgKHRvU2VxKSB7XG4gICAgaWYgKH5zdGFjay5pbmRleE9mKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEltbXV0YWJsZScpO1xuICAgIH1cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcbiAgICBrZXlQYXRoICYmIGtleSAhPT0gJycgJiYga2V5UGF0aC5wdXNoKGtleSk7XG4gICAgdmFyIGNvbnZlcnRlZCA9IGNvbnZlcnRlci5jYWxsKFxuICAgICAgcGFyZW50VmFsdWUsXG4gICAgICBrZXksXG4gICAgICB0b1NlcSh2YWx1ZSkubWFwKGZ1bmN0aW9uICh2LCBrKSB7IHJldHVybiBmcm9tSlNXaXRoKHN0YWNrLCBjb252ZXJ0ZXIsIHYsIGssIGtleVBhdGgsIHZhbHVlKTsgfVxuICAgICAgKSxcbiAgICAgIGtleVBhdGggJiYga2V5UGF0aC5zbGljZSgpXG4gICAgKTtcbiAgICBzdGFjay5wb3AoKTtcbiAgICBrZXlQYXRoICYmIGtleVBhdGgucG9wKCk7XG4gICAgcmV0dXJuIGNvbnZlcnRlZDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDb252ZXJ0ZXIoaywgdikge1xuICByZXR1cm4gaXNLZXllZCh2KSA/IHYudG9NYXAoKSA6IHYudG9MaXN0KCk7XG59XG5cbnZhciB2ZXJzaW9uID0gXCI0LjAuMC1yYy4xMVwiO1xuXG52YXIgSW1tdXRhYmxlID0ge1xuICB2ZXJzaW9uOiB2ZXJzaW9uLFxuXG4gIENvbGxlY3Rpb246IENvbGxlY3Rpb24sXG4gIC8vIE5vdGU6IEl0ZXJhYmxlIGlzIGRlcHJlY2F0ZWRcbiAgSXRlcmFibGU6IENvbGxlY3Rpb24sXG5cbiAgU2VxOiBTZXEsXG4gIE1hcDogTWFwLFxuICBPcmRlcmVkTWFwOiBPcmRlcmVkTWFwLFxuICBMaXN0OiBMaXN0LFxuICBTdGFjazogU3RhY2ssXG4gIFNldDogU2V0LFxuICBPcmRlcmVkU2V0OiBPcmRlcmVkU2V0LFxuXG4gIFJlY29yZDogUmVjb3JkLFxuICBSYW5nZTogUmFuZ2UsXG4gIFJlcGVhdDogUmVwZWF0LFxuXG4gIGlzOiBpcyxcbiAgZnJvbUpTOiBmcm9tSlMsXG4gIGhhc2g6IGhhc2gsXG5cbiAgaXNJbW11dGFibGU6IGlzSW1tdXRhYmxlLFxuICBpc0NvbGxlY3Rpb246IGlzQ29sbGVjdGlvbixcbiAgaXNLZXllZDogaXNLZXllZCxcbiAgaXNJbmRleGVkOiBpc0luZGV4ZWQsXG4gIGlzQXNzb2NpYXRpdmU6IGlzQXNzb2NpYXRpdmUsXG4gIGlzT3JkZXJlZDogaXNPcmRlcmVkLFxuICBpc1ZhbHVlT2JqZWN0OiBpc1ZhbHVlT2JqZWN0LFxuICBpc1NlcTogaXNTZXEsXG4gIGlzTGlzdDogaXNMaXN0LFxuICBpc01hcDogaXNNYXAsXG4gIGlzT3JkZXJlZE1hcDogaXNPcmRlcmVkTWFwLFxuICBpc1N0YWNrOiBpc1N0YWNrLFxuICBpc1NldDogaXNTZXQsXG4gIGlzT3JkZXJlZFNldDogaXNPcmRlcmVkU2V0LFxuICBpc1JlY29yZDogaXNSZWNvcmQsXG5cbiAgZ2V0OiBnZXQsXG4gIGdldEluOiBnZXRJbixcbiAgaGFzOiBoYXMsXG4gIGhhc0luOiBoYXNJbixcbiAgbWVyZ2U6IG1lcmdlJDEsXG4gIG1lcmdlRGVlcDogbWVyZ2VEZWVwLFxuICBtZXJnZVdpdGg6IG1lcmdlV2l0aCQxLFxuICBtZXJnZURlZXBXaXRoOiBtZXJnZURlZXBXaXRoLFxuICByZW1vdmU6IHJlbW92ZSxcbiAgcmVtb3ZlSW46IHJlbW92ZUluLFxuICBzZXQ6IHNldCxcbiAgc2V0SW46IHNldEluLFxuICB1cGRhdGU6IHVwZGF0ZSxcbiAgdXBkYXRlSW46IHVwZGF0ZUluLFxufTtcblxuLy8gTm90ZTogSXRlcmFibGUgaXMgZGVwcmVjYXRlZFxudmFyIEl0ZXJhYmxlID0gQ29sbGVjdGlvbjtcblxuZXhwb3J0IGRlZmF1bHQgSW1tdXRhYmxlO1xuZXhwb3J0IHsgdmVyc2lvbiwgQ29sbGVjdGlvbiwgSXRlcmFibGUsIFNlcSwgTWFwLCBPcmRlcmVkTWFwLCBMaXN0LCBTdGFjaywgU2V0LCBPcmRlcmVkU2V0LCBSZWNvcmQsIFJhbmdlLCBSZXBlYXQsIGlzLCBmcm9tSlMsIGhhc2gsIGlzSW1tdXRhYmxlLCBpc0NvbGxlY3Rpb24sIGlzS2V5ZWQsIGlzSW5kZXhlZCwgaXNBc3NvY2lhdGl2ZSwgaXNPcmRlcmVkLCBpc1ZhbHVlT2JqZWN0LCBnZXQsIGdldEluLCBoYXMsIGhhc0luLCBtZXJnZSQxIGFzIG1lcmdlLCBtZXJnZURlZXAsIG1lcmdlV2l0aCQxIGFzIG1lcmdlV2l0aCwgbWVyZ2VEZWVwV2l0aCwgcmVtb3ZlLCByZW1vdmVJbiwgc2V0LCBzZXRJbiwgdXBkYXRlLCB1cGRhdGVJbiB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZW1pemUoIGZuLCBvcHRpb25zICkge1xuXHR2YXIgc2l6ZSA9IDAsXG5cdFx0bWF4U2l6ZSwgaGVhZCwgdGFpbDtcblxuXHRpZiAoIG9wdGlvbnMgJiYgb3B0aW9ucy5tYXhTaXplICkge1xuXHRcdG1heFNpemUgPSBvcHRpb25zLm1heFNpemU7XG5cdH1cblxuXHRmdW5jdGlvbiBtZW1vaXplZCggLyogLi4uYXJncyAqLyApIHtcblx0XHR2YXIgbm9kZSA9IGhlYWQsXG5cdFx0XHRsZW4gPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdFx0YXJncywgaTtcblxuXHRcdHNlYXJjaENhY2hlOiB3aGlsZSAoIG5vZGUgKSB7XG5cdFx0XHQvLyBQZXJmb3JtIGEgc2hhbGxvdyBlcXVhbGl0eSB0ZXN0IHRvIGNvbmZpcm0gdGhhdCB3aGV0aGVyIHRoZSBub2RlXG5cdFx0XHQvLyB1bmRlciB0ZXN0IGlzIGEgY2FuZGlkYXRlIGZvciB0aGUgYXJndW1lbnRzIHBhc3NlZC4gVHdvIGFycmF5c1xuXHRcdFx0Ly8gYXJlIHNoYWxsb3dseSBlcXVhbCBpZiB0aGVpciBsZW5ndGggbWF0Y2hlcyBhbmQgZWFjaCBlbnRyeSBpc1xuXHRcdFx0Ly8gc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgdHdvIHNldHMuIEF2b2lkIGFic3RyYWN0aW5nIHRvIGFcblx0XHRcdC8vIGZ1bmN0aW9uIHdoaWNoIGNvdWxkIGluY3VyIGFuIGFyZ3VtZW50cyBsZWFraW5nIGRlb3B0aW1pemF0aW9uLlxuXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIG5vZGUgYXJndW1lbnRzIG1hdGNoIGFyZ3VtZW50cyBsZW5ndGhcblx0XHRcdGlmICggbm9kZS5hcmdzLmxlbmd0aCAhPT0gYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dDtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgbm9kZSBhcmd1bWVudHMgbWF0Y2ggYXJndW1lbnRzIHZhbHVlc1xuXHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0aWYgKCBub2RlLmFyZ3NbIGkgXSAhPT0gYXJndW1lbnRzWyBpIF0gKSB7XG5cdFx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dDtcblx0XHRcdFx0XHRjb250aW51ZSBzZWFyY2hDYWNoZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50IHdlIGNhbiBhc3N1bWUgd2UndmUgZm91bmQgYSBtYXRjaFxuXG5cdFx0XHQvLyBTdXJmYWNlIG1hdGNoZWQgbm9kZSB0byBoZWFkIGlmIG5vdCBhbHJlYWR5XG5cdFx0XHRpZiAoIG5vZGUgIT09IGhlYWQgKSB7XG5cdFx0XHRcdC8vIEFzIHRhaWwsIHNoaWZ0IHRvIHByZXZpb3VzLiBNdXN0IG9ubHkgc2hpZnQgaWYgbm90IGFsc29cblx0XHRcdFx0Ly8gaGVhZCwgc2luY2UgaWYgYm90aCBoZWFkIGFuZCB0YWlsLCB0aGVyZSBpcyBubyBwcmV2aW91cy5cblx0XHRcdFx0aWYgKCBub2RlID09PSB0YWlsICkge1xuXHRcdFx0XHRcdHRhaWwgPSBub2RlLnByZXY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGp1c3Qgc2libGluZ3MgdG8gcG9pbnQgdG8gZWFjaCBvdGhlci4gSWYgbm9kZSB3YXMgdGFpbCxcblx0XHRcdFx0Ly8gdGhpcyBhbHNvIGhhbmRsZXMgbmV3IHRhaWwncyBlbXB0eSBgbmV4dGAgYXNzaWdubWVudC5cblx0XHRcdFx0bm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQ7XG5cdFx0XHRcdGlmICggbm9kZS5uZXh0ICkge1xuXHRcdFx0XHRcdG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bm9kZS5uZXh0ID0gaGVhZDtcblx0XHRcdFx0bm9kZS5wcmV2ID0gbnVsbDtcblx0XHRcdFx0aGVhZC5wcmV2ID0gbm9kZTtcblx0XHRcdFx0aGVhZCA9IG5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBpbW1lZGlhdGVseVxuXHRcdFx0cmV0dXJuIG5vZGUudmFsO1xuXHRcdH1cblxuXHRcdC8vIE5vIGNhY2hlZCB2YWx1ZSBmb3VuZC4gQ29udGludWUgdG8gaW5zZXJ0aW9uIHBoYXNlOlxuXG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiBhcmd1bWVudHMgKGF2b2lkIGxlYWtpbmcgZGVvcHRpbWl6YXRpb24pXG5cdFx0YXJncyA9IG5ldyBBcnJheSggbGVuICk7XG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdG5vZGUgPSB7XG5cdFx0XHRhcmdzOiBhcmdzLFxuXG5cdFx0XHQvLyBHZW5lcmF0ZSB0aGUgcmVzdWx0IGZyb20gb3JpZ2luYWwgZnVuY3Rpb25cblx0XHRcdHZhbDogZm4uYXBwbHkoIG51bGwsIGFyZ3MgKVxuXHRcdH07XG5cblx0XHQvLyBEb24ndCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgbm9kZSBpcyBhbHJlYWR5IGhlYWQsIHNpbmNlIGl0IHdvdWxkXG5cdFx0Ly8gaGF2ZSBiZWVuIHJldHVybmVkIGFib3ZlIGFscmVhZHkgaWYgaXQgd2FzXG5cblx0XHQvLyBTaGlmdCBleGlzdGluZyBoZWFkIGRvd24gbGlzdFxuXHRcdGlmICggaGVhZCApIHtcblx0XHRcdGhlYWQucHJldiA9IG5vZGU7XG5cdFx0XHRub2RlLm5leHQgPSBoZWFkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJZiBubyBoZWFkLCBmb2xsb3dzIHRoYXQgdGhlcmUncyBubyB0YWlsIChhdCBpbml0aWFsIG9yIHJlc2V0KVxuXHRcdFx0dGFpbCA9IG5vZGU7XG5cdFx0fVxuXG5cdFx0Ly8gVHJpbSB0YWlsIGlmIHdlJ3JlIHJlYWNoZWQgbWF4IHNpemUgYW5kIGFyZSBwZW5kaW5nIGNhY2hlIGluc2VydGlvblxuXHRcdGlmICggc2l6ZSA9PT0gbWF4U2l6ZSApIHtcblx0XHRcdHRhaWwgPSB0YWlsLnByZXY7XG5cdFx0XHR0YWlsLm5leHQgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzaXplKys7XG5cdFx0fVxuXG5cdFx0aGVhZCA9IG5vZGU7XG5cblx0XHRyZXR1cm4gbm9kZS52YWw7XG5cdH1cblxuXHRtZW1vaXplZC5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXHRcdGhlYWQgPSBudWxsO1xuXHRcdHRhaWwgPSBudWxsO1xuXHRcdHNpemUgPSAwO1xuXHR9O1xuXG5cdGlmICggcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JyApIHtcblx0XHQvLyBDYWNoZSBpcyBub3QgZXhwb3NlZCBpbiB0aGUgcHVibGljIEFQSSwgYnV0IHVzZWQgaW4gdGVzdHMgdG8gZW5zdXJlXG5cdFx0Ly8gZXhwZWN0ZWQgbGlzdCBwcm9ncmVzc2lvblxuXHRcdG1lbW9pemVkLmdldENhY2hlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyBoZWFkLCB0YWlsLCBzaXplIF07XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBtZW1vaXplZDtcbn07XG4iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKHJvb3QsIHBsdXJhbGl6ZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAodHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gTm9kZS5cbiAgICBtb2R1bGUuZXhwb3J0cyA9IHBsdXJhbGl6ZSgpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIEFNRCwgcmVnaXN0ZXJzIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBwbHVyYWxpemUoKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBCcm93c2VyIGdsb2JhbC5cbiAgICByb290LnBsdXJhbGl6ZSA9IHBsdXJhbGl6ZSgpO1xuICB9XG59KSh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gIC8vIFJ1bGUgc3RvcmFnZSAtIHBsdXJhbGl6ZSBhbmQgc2luZ3VsYXJpemUgbmVlZCB0byBiZSBydW4gc2VxdWVudGlhbGx5LFxuICAvLyB3aGlsZSBvdGhlciBydWxlcyBjYW4gYmUgb3B0aW1pemVkIHVzaW5nIGFuIG9iamVjdCBmb3IgaW5zdGFudCBsb29rdXBzLlxuICB2YXIgcGx1cmFsUnVsZXMgPSBbXTtcbiAgdmFyIHNpbmd1bGFyUnVsZXMgPSBbXTtcbiAgdmFyIHVuY291bnRhYmxlcyA9IHt9O1xuICB2YXIgaXJyZWd1bGFyUGx1cmFscyA9IHt9O1xuICB2YXIgaXJyZWd1bGFyU2luZ2xlcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZSBhIHBsdXJhbGl6YXRpb24gcnVsZSB0byBhIHVzYWJsZSByZWd1bGFyIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSAgeyhSZWdFeHB8c3RyaW5nKX0gcnVsZVxuICAgKiBAcmV0dXJuIHtSZWdFeHB9XG4gICAqL1xuICBmdW5jdGlvbiBzYW5pdGl6ZVJ1bGUgKHJ1bGUpIHtcbiAgICBpZiAodHlwZW9mIHJ1bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyBydWxlICsgJyQnLCAnaScpO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhc3MgaW4gYSB3b3JkIHRva2VuIHRvIHByb2R1Y2UgYSBmdW5jdGlvbiB0aGF0IGNhbiByZXBsaWNhdGUgdGhlIGNhc2Ugb25cbiAgICogYW5vdGhlciB3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICAgd29yZFxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICAgdG9rZW5cbiAgICogQHJldHVybiB7RnVuY3Rpb259XG4gICAqL1xuICBmdW5jdGlvbiByZXN0b3JlQ2FzZSAod29yZCwgdG9rZW4pIHtcbiAgICAvLyBUb2tlbnMgYXJlIGFuIGV4YWN0IG1hdGNoLlxuICAgIGlmICh3b3JkID09PSB0b2tlbikgcmV0dXJuIHRva2VuO1xuXG4gICAgLy8gTG93ZXIgY2FzZWQgd29yZHMuIEUuZy4gXCJoZWxsb1wiLlxuICAgIGlmICh3b3JkID09PSB3b3JkLnRvTG93ZXJDYXNlKCkpIHJldHVybiB0b2tlbi50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gVXBwZXIgY2FzZWQgd29yZHMuIEUuZy4gXCJXSElTS1lcIi5cbiAgICBpZiAod29yZCA9PT0gd29yZC50b1VwcGVyQ2FzZSgpKSByZXR1cm4gdG9rZW4udG9VcHBlckNhc2UoKTtcblxuICAgIC8vIFRpdGxlIGNhc2VkIHdvcmRzLiBFLmcuIFwiVGl0bGVcIi5cbiAgICBpZiAod29yZFswXSA9PT0gd29yZFswXS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gdG9rZW4uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0b2tlbi5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvLyBMb3dlciBjYXNlZCB3b3Jkcy4gRS5nLiBcInRlc3RcIi5cbiAgICByZXR1cm4gdG9rZW4udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcnBvbGF0ZSBhIHJlZ2V4cCBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSAge0FycmF5fSAgYXJnc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBpbnRlcnBvbGF0ZSAoc3RyLCBhcmdzKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXCQoXFxkezEsMn0pL2csIGZ1bmN0aW9uIChtYXRjaCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBhcmdzW2luZGV4XSB8fCAnJztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgd29yZCB1c2luZyBhIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gd29yZFxuICAgKiBAcGFyYW0gIHtBcnJheX0gIHJ1bGVcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZSAod29yZCwgcnVsZSkge1xuICAgIHJldHVybiB3b3JkLnJlcGxhY2UocnVsZVswXSwgZnVuY3Rpb24gKG1hdGNoLCBpbmRleCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGludGVycG9sYXRlKHJ1bGVbMV0sIGFyZ3VtZW50cyk7XG5cbiAgICAgIGlmIChtYXRjaCA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVDYXNlKHdvcmRbaW5kZXggLSAxXSwgcmVzdWx0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RvcmVDYXNlKG1hdGNoLCByZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXplIGEgd29yZCBieSBwYXNzaW5nIGluIHRoZSB3b3JkIGFuZCBzYW5pdGl6YXRpb24gcnVsZXMuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB0b2tlblxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICAgd29yZFxuICAgKiBAcGFyYW0gIHtBcnJheX0gICAgcnVsZXNcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gc2FuaXRpemVXb3JkICh0b2tlbiwgd29yZCwgcnVsZXMpIHtcbiAgICAvLyBFbXB0eSBzdHJpbmcgb3IgZG9lc24ndCBuZWVkIGZpeGluZy5cbiAgICBpZiAoIXRva2VuLmxlbmd0aCB8fCB1bmNvdW50YWJsZXMuaGFzT3duUHJvcGVydHkodG9rZW4pKSB7XG4gICAgICByZXR1cm4gd29yZDtcbiAgICB9XG5cbiAgICB2YXIgbGVuID0gcnVsZXMubGVuZ3RoO1xuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBzYW5pdGl6YXRpb24gcnVsZXMgYW5kIHVzZSB0aGUgZmlyc3Qgb25lIHRvIG1hdGNoLlxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgdmFyIHJ1bGUgPSBydWxlc1tsZW5dO1xuXG4gICAgICBpZiAocnVsZVswXS50ZXN0KHdvcmQpKSByZXR1cm4gcmVwbGFjZSh3b3JkLCBydWxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd29yZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgd29yZCB3aXRoIHRoZSB1cGRhdGVkIHdvcmQuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gICByZXBsYWNlTWFwXG4gICAqIEBwYXJhbSAge09iamVjdH0gICBrZWVwTWFwXG4gICAqIEBwYXJhbSAge0FycmF5fSAgICBydWxlc1xuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIHJlcGxhY2VXb3JkIChyZXBsYWNlTWFwLCBrZWVwTWFwLCBydWxlcykge1xuICAgIHJldHVybiBmdW5jdGlvbiAod29yZCkge1xuICAgICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRva2VuIGFuZCBjYXNlIHJlc3RvcmF0aW9uIGZ1bmN0aW9ucy5cbiAgICAgIHZhciB0b2tlbiA9IHdvcmQudG9Mb3dlckNhc2UoKTtcblxuICAgICAgLy8gQ2hlY2sgYWdhaW5zdCB0aGUga2VlcCBvYmplY3QgbWFwLlxuICAgICAgaWYgKGtlZXBNYXAuaGFzT3duUHJvcGVydHkodG9rZW4pKSB7XG4gICAgICAgIHJldHVybiByZXN0b3JlQ2FzZSh3b3JkLCB0b2tlbik7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGFnYWluc3QgdGhlIHJlcGxhY2VtZW50IG1hcCBmb3IgYSBkaXJlY3Qgd29yZCByZXBsYWNlbWVudC5cbiAgICAgIGlmIChyZXBsYWNlTWFwLmhhc093blByb3BlcnR5KHRva2VuKSkge1xuICAgICAgICByZXR1cm4gcmVzdG9yZUNhc2Uod29yZCwgcmVwbGFjZU1hcFt0b2tlbl0pO1xuICAgICAgfVxuXG4gICAgICAvLyBSdW4gYWxsIHRoZSBydWxlcyBhZ2FpbnN0IHRoZSB3b3JkLlxuICAgICAgcmV0dXJuIHNhbml0aXplV29yZCh0b2tlbiwgd29yZCwgcnVsZXMpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB3b3JkIGlzIHBhcnQgb2YgdGhlIG1hcC5cbiAgICovXG4gIGZ1bmN0aW9uIGNoZWNrV29yZCAocmVwbGFjZU1hcCwga2VlcE1hcCwgcnVsZXMsIGJvb2wpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHdvcmQpIHtcbiAgICAgIHZhciB0b2tlbiA9IHdvcmQudG9Mb3dlckNhc2UoKTtcblxuICAgICAgaWYgKGtlZXBNYXAuaGFzT3duUHJvcGVydHkodG9rZW4pKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChyZXBsYWNlTWFwLmhhc093blByb3BlcnR5KHRva2VuKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXR1cm4gc2FuaXRpemVXb3JkKHRva2VuLCB0b2tlbiwgcnVsZXMpID09PSB0b2tlbjtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBsdXJhbGl6ZSBvciBzaW5ndWxhcml6ZSBhIHdvcmQgYmFzZWQgb24gdGhlIHBhc3NlZCBpbiBjb3VudC5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgd29yZCAgICAgIFRoZSB3b3JkIHRvIHBsdXJhbGl6ZVxuICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBjb3VudCAgICAgSG93IG1hbnkgb2YgdGhlIHdvcmQgZXhpc3RcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gaW5jbHVzaXZlIFdoZXRoZXIgdG8gcHJlZml4IHdpdGggdGhlIG51bWJlciAoZS5nLiAzIGR1Y2tzKVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBwbHVyYWxpemUgKHdvcmQsIGNvdW50LCBpbmNsdXNpdmUpIHtcbiAgICB2YXIgcGx1cmFsaXplZCA9IGNvdW50ID09PSAxXG4gICAgICA/IHBsdXJhbGl6ZS5zaW5ndWxhcih3b3JkKSA6IHBsdXJhbGl6ZS5wbHVyYWwod29yZCk7XG5cbiAgICByZXR1cm4gKGluY2x1c2l2ZSA/IGNvdW50ICsgJyAnIDogJycpICsgcGx1cmFsaXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQbHVyYWxpemUgYSB3b3JkLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBwbHVyYWxpemUucGx1cmFsID0gcmVwbGFjZVdvcmQoXG4gICAgaXJyZWd1bGFyU2luZ2xlcywgaXJyZWd1bGFyUGx1cmFscywgcGx1cmFsUnVsZXNcbiAgKTtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB3b3JkIGlzIHBsdXJhbC5cbiAgICpcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgcGx1cmFsaXplLmlzUGx1cmFsID0gY2hlY2tXb3JkKFxuICAgIGlycmVndWxhclNpbmdsZXMsIGlycmVndWxhclBsdXJhbHMsIHBsdXJhbFJ1bGVzXG4gICk7XG5cbiAgLyoqXG4gICAqIFNpbmd1bGFyaXplIGEgd29yZC5cbiAgICpcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgcGx1cmFsaXplLnNpbmd1bGFyID0gcmVwbGFjZVdvcmQoXG4gICAgaXJyZWd1bGFyUGx1cmFscywgaXJyZWd1bGFyU2luZ2xlcywgc2luZ3VsYXJSdWxlc1xuICApO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHdvcmQgaXMgc2luZ3VsYXIuXG4gICAqXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHBsdXJhbGl6ZS5pc1Npbmd1bGFyID0gY2hlY2tXb3JkKFxuICAgIGlycmVndWxhclBsdXJhbHMsIGlycmVndWxhclNpbmdsZXMsIHNpbmd1bGFyUnVsZXNcbiAgKTtcblxuICAvKipcbiAgICogQWRkIGEgcGx1cmFsaXphdGlvbiBydWxlIHRvIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcnVsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgcmVwbGFjZW1lbnRcbiAgICovXG4gIHBsdXJhbGl6ZS5hZGRQbHVyYWxSdWxlID0gZnVuY3Rpb24gKHJ1bGUsIHJlcGxhY2VtZW50KSB7XG4gICAgcGx1cmFsUnVsZXMucHVzaChbc2FuaXRpemVSdWxlKHJ1bGUpLCByZXBsYWNlbWVudF0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5ndWxhcml6YXRpb24gcnVsZSB0byB0aGUgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHJ1bGVcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgIHJlcGxhY2VtZW50XG4gICAqL1xuICBwbHVyYWxpemUuYWRkU2luZ3VsYXJSdWxlID0gZnVuY3Rpb24gKHJ1bGUsIHJlcGxhY2VtZW50KSB7XG4gICAgc2luZ3VsYXJSdWxlcy5wdXNoKFtzYW5pdGl6ZVJ1bGUocnVsZSksIHJlcGxhY2VtZW50XSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhbiB1bmNvdW50YWJsZSB3b3JkIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSB3b3JkXG4gICAqL1xuICBwbHVyYWxpemUuYWRkVW5jb3VudGFibGVSdWxlID0gZnVuY3Rpb24gKHdvcmQpIHtcbiAgICBpZiAodHlwZW9mIHdvcmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB1bmNvdW50YWJsZXNbd29yZC50b0xvd2VyQ2FzZSgpXSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2V0IHNpbmd1bGFyIGFuZCBwbHVyYWwgcmVmZXJlbmNlcyBmb3IgdGhlIHdvcmQuXG4gICAgcGx1cmFsaXplLmFkZFBsdXJhbFJ1bGUod29yZCwgJyQwJyk7XG4gICAgcGx1cmFsaXplLmFkZFNpbmd1bGFyUnVsZSh3b3JkLCAnJDAnKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGFuIGlycmVndWxhciB3b3JkIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaW5nbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBsdXJhbFxuICAgKi9cbiAgcGx1cmFsaXplLmFkZElycmVndWxhclJ1bGUgPSBmdW5jdGlvbiAoc2luZ2xlLCBwbHVyYWwpIHtcbiAgICBwbHVyYWwgPSBwbHVyYWwudG9Mb3dlckNhc2UoKTtcbiAgICBzaW5nbGUgPSBzaW5nbGUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlycmVndWxhclNpbmdsZXNbc2luZ2xlXSA9IHBsdXJhbDtcbiAgICBpcnJlZ3VsYXJQbHVyYWxzW3BsdXJhbF0gPSBzaW5nbGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIElycmVndWxhciBydWxlcy5cbiAgICovXG4gIFtcbiAgICAvLyBQcm9ub3Vucy5cbiAgICBbJ0knLCAnd2UnXSxcbiAgICBbJ21lJywgJ3VzJ10sXG4gICAgWydoZScsICd0aGV5J10sXG4gICAgWydzaGUnLCAndGhleSddLFxuICAgIFsndGhlbScsICd0aGVtJ10sXG4gICAgWydteXNlbGYnLCAnb3Vyc2VsdmVzJ10sXG4gICAgWyd5b3Vyc2VsZicsICd5b3Vyc2VsdmVzJ10sXG4gICAgWydpdHNlbGYnLCAndGhlbXNlbHZlcyddLFxuICAgIFsnaGVyc2VsZicsICd0aGVtc2VsdmVzJ10sXG4gICAgWydoaW1zZWxmJywgJ3RoZW1zZWx2ZXMnXSxcbiAgICBbJ3RoZW1zZWxmJywgJ3RoZW1zZWx2ZXMnXSxcbiAgICBbJ2lzJywgJ2FyZSddLFxuICAgIFsnd2FzJywgJ3dlcmUnXSxcbiAgICBbJ2hhcycsICdoYXZlJ10sXG4gICAgWyd0aGlzJywgJ3RoZXNlJ10sXG4gICAgWyd0aGF0JywgJ3Rob3NlJ10sXG4gICAgLy8gV29yZHMgZW5kaW5nIGluIHdpdGggYSBjb25zb25hbnQgYW5kIGBvYC5cbiAgICBbJ2VjaG8nLCAnZWNob2VzJ10sXG4gICAgWydkaW5nbycsICdkaW5nb2VzJ10sXG4gICAgWyd2b2xjYW5vJywgJ3ZvbGNhbm9lcyddLFxuICAgIFsndG9ybmFkbycsICd0b3JuYWRvZXMnXSxcbiAgICBbJ3RvcnBlZG8nLCAndG9ycGVkb2VzJ10sXG4gICAgLy8gRW5kcyB3aXRoIGB1c2AuXG4gICAgWydnZW51cycsICdnZW5lcmEnXSxcbiAgICBbJ3Zpc2N1cycsICd2aXNjZXJhJ10sXG4gICAgLy8gRW5kcyB3aXRoIGBtYWAuXG4gICAgWydzdGlnbWEnLCAnc3RpZ21hdGEnXSxcbiAgICBbJ3N0b21hJywgJ3N0b21hdGEnXSxcbiAgICBbJ2RvZ21hJywgJ2RvZ21hdGEnXSxcbiAgICBbJ2xlbW1hJywgJ2xlbW1hdGEnXSxcbiAgICBbJ3NjaGVtYScsICdzY2hlbWF0YSddLFxuICAgIFsnYW5hdGhlbWEnLCAnYW5hdGhlbWF0YSddLFxuICAgIC8vIE90aGVyIGlycmVndWxhciBydWxlcy5cbiAgICBbJ294JywgJ294ZW4nXSxcbiAgICBbJ2F4ZScsICdheGVzJ10sXG4gICAgWydkaWUnLCAnZGljZSddLFxuICAgIFsneWVzJywgJ3llc2VzJ10sXG4gICAgWydmb290JywgJ2ZlZXQnXSxcbiAgICBbJ2VhdmUnLCAnZWF2ZXMnXSxcbiAgICBbJ2dvb3NlJywgJ2dlZXNlJ10sXG4gICAgWyd0b290aCcsICd0ZWV0aCddLFxuICAgIFsncXVpeicsICdxdWl6emVzJ10sXG4gICAgWydodW1hbicsICdodW1hbnMnXSxcbiAgICBbJ3Byb29mJywgJ3Byb29mcyddLFxuICAgIFsnY2FydmUnLCAnY2FydmVzJ10sXG4gICAgWyd2YWx2ZScsICd2YWx2ZXMnXSxcbiAgICBbJ2xvb2V5JywgJ2xvb2llcyddLFxuICAgIFsndGhpZWYnLCAndGhpZXZlcyddLFxuICAgIFsnZ3Jvb3ZlJywgJ2dyb292ZXMnXSxcbiAgICBbJ3BpY2theGUnLCAncGlja2F4ZXMnXSxcbiAgICBbJ3Bhc3NlcmJ5JywgJ3Bhc3NlcnNieSddXG4gIF0uZm9yRWFjaChmdW5jdGlvbiAocnVsZSkge1xuICAgIHJldHVybiBwbHVyYWxpemUuYWRkSXJyZWd1bGFyUnVsZShydWxlWzBdLCBydWxlWzFdKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFBsdXJhbGl6YXRpb24gcnVsZXMuXG4gICAqL1xuICBbXG4gICAgWy9zPyQvaSwgJ3MnXSxcbiAgICBbL1teXFx1MDAwMC1cXHUwMDdGXSQvaSwgJyQwJ10sXG4gICAgWy8oW15hZWlvdV1lc2UpJC9pLCAnJDEnXSxcbiAgICBbLyhheHx0ZXN0KWlzJC9pLCAnJDFlcyddLFxuICAgIFsvKGFsaWFzfFteYW91XXVzfHRbbG1dYXN8Z2FzfHJpcykkL2ksICckMWVzJ10sXG4gICAgWy8oZVttbl11KXM/JC9pLCAnJDFzJ10sXG4gICAgWy8oW15sXWlhc3xbYWVpb3VdbGFzfFtlanpyXWFzfFtpdV1hbSkkL2ksICckMSddLFxuICAgIFsvKGFsdW1ufHN5bGxhYnx2aXJ8cmFkaXxudWNsZXxmdW5nfGNhY3R8c3RpbXVsfHRlcm1pbnxiYWNpbGx8Zm9jfHV0ZXJ8bG9jfHN0cmF0KSg/OnVzfGkpJC9pLCAnJDFpJ10sXG4gICAgWy8oYWx1bW58YWxnfHZlcnRlYnIpKD86YXxhZSkkL2ksICckMWFlJ10sXG4gICAgWy8oc2VyYXBofGNoZXJ1YikoPzppbSk/JC9pLCAnJDFpbSddLFxuICAgIFsvKGhlcnxhdHxncilvJC9pLCAnJDFvZXMnXSxcbiAgICBbLyhhZ2VuZHxhZGRlbmR8bWlsbGVubml8ZGF0fGV4dHJlbXxiYWN0ZXJpfGRlc2lkZXJhdHxzdHJhdHxjYW5kZWxhYnJ8ZXJyYXR8b3Z8c3ltcG9zaXxjdXJyaWN1bHxhdXRvbWF0fHF1b3IpKD86YXx1bSkkL2ksICckMWEnXSxcbiAgICBbLyhhcGhlbGl8aHlwZXJiYXR8cGVyaWhlbGl8YXN5bmRldHxub3VtZW58cGhlbm9tZW58Y3JpdGVyaXxvcmdhbnxwcm9sZWdvbWVufGhlZHJ8YXV0b21hdCkoPzphfG9uKSQvaSwgJyQxYSddLFxuICAgIFsvc2lzJC9pLCAnc2VzJ10sXG4gICAgWy8oPzooa25pfHdpfGxpKWZlfChhcnxsfGVhfGVvfG9hfGhvbylmKSQvaSwgJyQxJDJ2ZXMnXSxcbiAgICBbLyhbXmFlaW91eV18cXUpeSQvaSwgJyQxaWVzJ10sXG4gICAgWy8oW15jaF1baWVvXVtsbl0pZXkkL2ksICckMWllcyddLFxuICAgIFsvKHh8Y2h8c3N8c2h8enopJC9pLCAnJDFlcyddLFxuICAgIFsvKG1hdHJ8Y29kfG11cnxzaWx8dmVydHxpbmR8YXBwZW5kKSg/Oml4fGV4KSQvaSwgJyQxaWNlcyddLFxuICAgIFsvXFxiKCg/OnRpdCk/bXxsKSg/OmljZXxvdXNlKSQvaSwgJyQxaWNlJ10sXG4gICAgWy8ocGUpKD86cnNvbnxvcGxlKSQvaSwgJyQxb3BsZSddLFxuICAgIFsvKGNoaWxkKSg/OnJlbik/JC9pLCAnJDFyZW4nXSxcbiAgICBbL2VhdXgkL2ksICckMCddLFxuICAgIFsvbVthZV1uJC9pLCAnbWVuJ10sXG4gICAgWyd0aG91JywgJ3lvdSddXG4gIF0uZm9yRWFjaChmdW5jdGlvbiAocnVsZSkge1xuICAgIHJldHVybiBwbHVyYWxpemUuYWRkUGx1cmFsUnVsZShydWxlWzBdLCBydWxlWzFdKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFNpbmd1bGFyaXphdGlvbiBydWxlcy5cbiAgICovXG4gIFtcbiAgICBbL3MkL2ksICcnXSxcbiAgICBbLyhzcykkL2ksICckMSddLFxuICAgIFsvKHdpfGtuaXwoPzphZnRlcnxoYWxmfGhpZ2h8bG93fG1pZHxub258bmlnaHR8W15cXHddfF4pbGkpdmVzJC9pLCAnJDFmZSddLFxuICAgIFsvKGFyfCg/OndvfFthZV0pbHxbZW9dW2FvXSl2ZXMkL2ksICckMWYnXSxcbiAgICBbL2llcyQvaSwgJ3knXSxcbiAgICBbL1xcYihbcGxdfHpvbWJ8KD86bmVja3xjcm9zcyk/dHxjb2xsfGZhZXJ8Zm9vZHxnZW58Z29vbnxncm91cHxsYXNzfHRhbGt8Z29hbHxjdXQpaWVzJC9pLCAnJDFpZSddLFxuICAgIFsvXFxiKG1vbnxzbWlsKWllcyQvaSwgJyQxZXknXSxcbiAgICBbL1xcYigoPzp0aXQpP218bClpY2UkL2ksICckMW91c2UnXSxcbiAgICBbLyhzZXJhcGh8Y2hlcnViKWltJC9pLCAnJDEnXSxcbiAgICBbLyh4fGNofHNzfHNofHp6fHR0b3xnb3xjaG98YWxpYXN8W15hb3VddXN8dFtsbV1hc3xnYXN8KD86aGVyfGF0fGdyKW98W2FlaW91XXJpcykoPzplcyk/JC9pLCAnJDEnXSxcbiAgICBbLyhhbmFseXxkaWFnbm98cGFyZW50aGV8cHJvZ25vfHN5bm9wfHRoZXxlbXBoYXxjcml8bmUpKD86c2lzfHNlcykkL2ksICckMXNpcyddLFxuICAgIFsvKG1vdmllfHR3ZWx2ZXxhYnVzZXxlW21uXXUpcyQvaSwgJyQxJ10sXG4gICAgWy8odGVzdCkoPzppc3xlcykkL2ksICckMWlzJ10sXG4gICAgWy8oYWx1bW58c3lsbGFifHZpcnxyYWRpfG51Y2xlfGZ1bmd8Y2FjdHxzdGltdWx8dGVybWlufGJhY2lsbHxmb2N8dXRlcnxsb2N8c3RyYXQpKD86dXN8aSkkL2ksICckMXVzJ10sXG4gICAgWy8oYWdlbmR8YWRkZW5kfG1pbGxlbm5pfGRhdHxleHRyZW18YmFjdGVyaXxkZXNpZGVyYXR8c3RyYXR8Y2FuZGVsYWJyfGVycmF0fG92fHN5bXBvc2l8Y3VycmljdWx8cXVvcilhJC9pLCAnJDF1bSddLFxuICAgIFsvKGFwaGVsaXxoeXBlcmJhdHxwZXJpaGVsaXxhc3luZGV0fG5vdW1lbnxwaGVub21lbnxjcml0ZXJpfG9yZ2FufHByb2xlZ29tZW58aGVkcnxhdXRvbWF0KWEkL2ksICckMW9uJ10sXG4gICAgWy8oYWx1bW58YWxnfHZlcnRlYnIpYWUkL2ksICckMWEnXSxcbiAgICBbLyhjb2R8bXVyfHNpbHx2ZXJ0fGluZClpY2VzJC9pLCAnJDFleCddLFxuICAgIFsvKG1hdHJ8YXBwZW5kKWljZXMkL2ksICckMWl4J10sXG4gICAgWy8ocGUpKHJzb258b3BsZSkkL2ksICckMXJzb24nXSxcbiAgICBbLyhjaGlsZClyZW4kL2ksICckMSddLFxuICAgIFsvKGVhdSl4PyQvaSwgJyQxJ10sXG4gICAgWy9tZW4kL2ksICdtYW4nXVxuICBdLmZvckVhY2goZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICByZXR1cm4gcGx1cmFsaXplLmFkZFNpbmd1bGFyUnVsZShydWxlWzBdLCBydWxlWzFdKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFVuY291bnRhYmxlIHJ1bGVzLlxuICAgKi9cbiAgW1xuICAgIC8vIFNpbmd1bGFyIHdvcmRzIHdpdGggbm8gcGx1cmFscy5cbiAgICAnYWR1bHRob29kJyxcbiAgICAnYWR2aWNlJyxcbiAgICAnYWdlbmRhJyxcbiAgICAnYWlkJyxcbiAgICAnYWlyY3JhZnQnLFxuICAgICdhbGNvaG9sJyxcbiAgICAnYW1tbycsXG4gICAgJ2FuYWx5dGljcycsXG4gICAgJ2FuaW1lJyxcbiAgICAnYXRobGV0aWNzJyxcbiAgICAnYXVkaW8nLFxuICAgICdiaXNvbicsXG4gICAgJ2Jsb29kJyxcbiAgICAnYnJlYW0nLFxuICAgICdidWZmYWxvJyxcbiAgICAnYnV0dGVyJyxcbiAgICAnY2FycCcsXG4gICAgJ2Nhc2gnLFxuICAgICdjaGFzc2lzJyxcbiAgICAnY2hlc3MnLFxuICAgICdjbG90aGluZycsXG4gICAgJ2NvZCcsXG4gICAgJ2NvbW1lcmNlJyxcbiAgICAnY29vcGVyYXRpb24nLFxuICAgICdjb3JwcycsXG4gICAgJ2RlYnJpcycsXG4gICAgJ2RpYWJldGVzJyxcbiAgICAnZGlnZXN0aW9uJyxcbiAgICAnZWxrJyxcbiAgICAnZW5lcmd5JyxcbiAgICAnZXF1aXBtZW50JyxcbiAgICAnZXhjcmV0aW9uJyxcbiAgICAnZXhwZXJ0aXNlJyxcbiAgICAnZmlybXdhcmUnLFxuICAgICdmbG91bmRlcicsXG4gICAgJ2Z1bicsXG4gICAgJ2dhbGxvd3MnLFxuICAgICdnYXJiYWdlJyxcbiAgICAnZ3JhZmZpdGknLFxuICAgICdoYXJkd2FyZScsXG4gICAgJ2hlYWRxdWFydGVycycsXG4gICAgJ2hlYWx0aCcsXG4gICAgJ2hlcnBlcycsXG4gICAgJ2hpZ2hqaW5rcycsXG4gICAgJ2hvbWV3b3JrJyxcbiAgICAnaG91c2V3b3JrJyxcbiAgICAnaW5mb3JtYXRpb24nLFxuICAgICdqZWFucycsXG4gICAgJ2p1c3RpY2UnLFxuICAgICdrdWRvcycsXG4gICAgJ2xhYm91cicsXG4gICAgJ2xpdGVyYXR1cmUnLFxuICAgICdtYWNoaW5lcnknLFxuICAgICdtYWNrZXJlbCcsXG4gICAgJ21haWwnLFxuICAgICdtZWRpYScsXG4gICAgJ21ld3MnLFxuICAgICdtb29zZScsXG4gICAgJ211c2ljJyxcbiAgICAnbXVkJyxcbiAgICAnbWFuZ2EnLFxuICAgICduZXdzJyxcbiAgICAnb25seScsXG4gICAgJ3BlcnNvbm5lbCcsXG4gICAgJ3Bpa2UnLFxuICAgICdwbGFua3RvbicsXG4gICAgJ3BsaWVycycsXG4gICAgJ3BvbGljZScsXG4gICAgJ3BvbGx1dGlvbicsXG4gICAgJ3ByZW1pc2VzJyxcbiAgICAncmFpbicsXG4gICAgJ3Jlc2VhcmNoJyxcbiAgICAncmljZScsXG4gICAgJ3NhbG1vbicsXG4gICAgJ3NjaXNzb3JzJyxcbiAgICAnc2VyaWVzJyxcbiAgICAnc2V3YWdlJyxcbiAgICAnc2hhbWJsZXMnLFxuICAgICdzaHJpbXAnLFxuICAgICdzb2Z0d2FyZScsXG4gICAgJ3NwZWNpZXMnLFxuICAgICdzdGFmZicsXG4gICAgJ3N3aW5lJyxcbiAgICAndGVubmlzJyxcbiAgICAndHJhZmZpYycsXG4gICAgJ3RyYW5zcG9ydGF0aW9uJyxcbiAgICAndHJvdXQnLFxuICAgICd0dW5hJyxcbiAgICAnd2VhbHRoJyxcbiAgICAnd2VsZmFyZScsXG4gICAgJ3doaXRpbmcnLFxuICAgICd3aWxkZWJlZXN0JyxcbiAgICAnd2lsZGxpZmUnLFxuICAgICd5b3UnLFxuICAgIC9wb2tbZcOpXW1vbiQvaSxcbiAgICAvLyBSZWdleGVzLlxuICAgIC9bXmFlaW91XWVzZSQvaSwgLy8gXCJjaGluZXNlXCIsIFwiamFwYW5lc2VcIlxuICAgIC9kZWVyJC9pLCAvLyBcImRlZXJcIiwgXCJyZWluZGVlclwiXG4gICAgL2Zpc2gkL2ksIC8vIFwiZmlzaFwiLCBcImJsb3dmaXNoXCIsIFwiYW5nZWxmaXNoXCJcbiAgICAvbWVhc2xlcyQvaSxcbiAgICAvb1tpdV1zJC9pLCAvLyBcImNhcm5pdm9yb3VzXCJcbiAgICAvcG94JC9pLCAvLyBcImNoaWNrcG94XCIsIFwic21hbGxwb3hcIlxuICAgIC9zaGVlcCQvaVxuICBdLmZvckVhY2gocGx1cmFsaXplLmFkZFVuY291bnRhYmxlUnVsZSk7XG5cbiAgcmV0dXJuIHBsdXJhbGl6ZTtcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xudmFyIGNoZWNrUHJvcFR5cGVzID0gcmVxdWlyZSgnLi9jaGVja1Byb3BUeXBlcycpO1xuXG52YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSAgKyAnYC4gVGhpcyBpcyBkZXByZWNhdGVkICcgK1xuICAgICAgICAgICAgICAnYW5kIHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcbiAgICAgICAgICAgICAgJ2xpYnJhcnkuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmctZG9udC1jYWxsLXByb3B0eXBlcyAnICsgJ2ZvciBkZXRhaWxzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIVJlYWN0SXMuaXNWYWxpZEVsZW1lbnRUeXBlKHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50IHR5cGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LCBnb3QgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIGFyZ3VtZW50cy4gJyArXG4gICAgICAgICAgICAnQSBjb21tb24gbWlzdGFrZSBpcyB0byB3cml0ZSBvbmVPZih4LCB5LCB6KSBpbnN0ZWFkIG9mIG9uZU9mKFt4LCB5LCB6XSkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMsIGZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3ltYm9sJykge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIFN0cmluZyhwcm9wVmFsdWUpICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChoYXMocHJvcFZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xuICAgICAgICAgICdyZWNlaXZlZCAnICsgZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKGNoZWNrZXIpICsgJyBhdCBpbmRleCAnICsgaSArICcuJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIGlmIChjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbVxuICAgICAgLy8gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXG4gICAgICAgICAgICAnXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xuICAgICAgICAgICAgJ1xcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuOC42XG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcblxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTtcbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8XG4gIC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSk7XG59XG5cbi8qKlxuICogRm9ya2VkIGZyb20gZmJqcy93YXJuaW5nOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZianMvYmxvYi9lNjZiYTIwYWQ1YmU0MzNlYjU0NDIzZjJiMDk3ZDgyOTMyNGQ5ZGU2L3BhY2thZ2VzL2ZianMvc3JjL19fZm9ya3NfXy93YXJuaW5nLmpzXG4gKlxuICogT25seSBjaGFuZ2UgaXMgd2UgdXNlIGNvbnNvbGUud2FybiBpbnN0ZWFkIG9mIGNvbnNvbGUuZXJyb3IsXG4gKiBhbmQgZG8gbm90aGluZyB3aGVuICdjb25zb2xlJyBpcyBub3Qgc3VwcG9ydGVkLlxuICogVGhpcyByZWFsbHkgc2ltcGxpZmllcyB0aGUgY29kZS5cbiAqIC0tLVxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGxvd1ByaW9yaXR5V2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmckMSA9IGxvd1ByaW9yaXR5V2FybmluZztcblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG5cbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xuXG4vLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlO1xuICAgICAgbG93UHJpb3JpdHlXYXJuaW5nJDEoZmFsc2UsICdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgTEVBRl9LRVksIGhhc1dlYWtNYXA7XG5cbi8qKlxuICogQXJiaXRyYXJ5IHZhbHVlIHVzZWQgYXMga2V5IGZvciByZWZlcmVuY2luZyBjYWNoZSBvYmplY3QgaW4gV2Vha01hcCB0cmVlLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbkxFQUZfS0VZID0ge307XG5cbi8qKlxuICogV2hldGhlciBlbnZpcm9ubWVudCBzdXBwb3J0cyBXZWFrTWFwLlxuICpcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5oYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgIT09ICd1bmRlZmluZWQnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGFzIHRoZSBzb2xlIGVudHJ5IGluIGFuIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gcmV0dXJuLlxuICpcbiAqIEByZXR1cm4ge0FycmF5fSBWYWx1ZSByZXR1cm5lZCBhcyBlbnRyeSBpbiBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlPZiggdmFsdWUgKSB7XG5cdHJldHVybiBbIHZhbHVlIF07XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb2JqZWN0LWxpa2UsIG9yIGZhbHNlIG90aGVyd2lzZS4gQSB2YWx1ZVxuICogaXMgb2JqZWN0LWxpa2UgaWYgaXQgY2FuIHN1cHBvcnQgcHJvcGVydHkgYXNzaWdubWVudCwgZS5nLiBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFsdWUgaXMgb2JqZWN0LWxpa2UuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSggdmFsdWUgKSB7XG5cdHJldHVybiAhISB2YWx1ZSAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gQ2FjaGUgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGNhY2hlID0ge1xuXHRcdGNsZWFyOiBmdW5jdGlvbigpIHtcblx0XHRcdGNhY2hlLmhlYWQgPSBudWxsO1xuXHRcdH0sXG5cdH07XG5cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBlbnRyaWVzIHdpdGhpbiB0aGUgdHdvIGFycmF5cyBhcmUgc3RyaWN0bHkgZXF1YWwgYnlcbiAqIHJlZmVyZW5jZSBmcm9tIGEgc3RhcnRpbmcgaW5kZXguXG4gKlxuICogQHBhcmFtIHtBcnJheX0gIGEgICAgICAgICBGaXJzdCBhcnJheS5cbiAqIEBwYXJhbSB7QXJyYXl9ICBiICAgICAgICAgU2Vjb25kIGFycmF5LlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBJbmRleCBmcm9tIHdoaWNoIHRvIHN0YXJ0IGNvbXBhcmlzb24uXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciBhcnJheXMgYXJlIHNoYWxsb3dseSBlcXVhbC5cbiAqL1xuZnVuY3Rpb24gaXNTaGFsbG93RXF1YWwoIGEsIGIsIGZyb21JbmRleCApIHtcblx0dmFyIGk7XG5cblx0aWYgKCBhLmxlbmd0aCAhPT0gYi5sZW5ndGggKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Zm9yICggaSA9IGZyb21JbmRleDsgaSA8IGEubGVuZ3RoOyBpKysgKSB7XG5cdFx0aWYgKCBhWyBpIF0gIT09IGJbIGkgXSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbWVtb2l6ZWQgc2VsZWN0b3IgZnVuY3Rpb24uIFRoZSBnZXREZXBlbmRhbnRzIGZ1bmN0aW9uIGFyZ3VtZW50IGlzXG4gKiBjYWxsZWQgYmVmb3JlIHRoZSBtZW1vaXplZCBzZWxlY3RvciBhbmQgaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGFuIGltbXV0YWJsZVxuICogcmVmZXJlbmNlIG9yIGFycmF5IG9mIHJlZmVyZW5jZXMgb24gd2hpY2ggdGhlIHNlbGVjdG9yIGRlcGVuZHMgZm9yIGNvbXB1dGluZ1xuICogaXRzIG93biByZXR1cm4gdmFsdWUuIFRoZSBtZW1vaXplIGNhY2hlIGlzIHByZXNlcnZlZCBvbmx5IGFzIGxvbmcgYXMgdGhvc2VcbiAqIGRlcGVuZGFudCByZWZlcmVuY2VzIHJlbWFpbiB0aGUgc2FtZS4gSWYgZ2V0RGVwZW5kYW50cyByZXR1cm5zIGEgZGlmZmVyZW50XG4gKiByZWZlcmVuY2UocyksIHRoZSBjYWNoZSBpcyBjbGVhcmVkIGFuZCB0aGUgc2VsZWN0b3IgdmFsdWUgcmVnZW5lcmF0ZWQuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2VsZWN0b3IgICAgICBTZWxlY3RvciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldERlcGVuZGFudHMgRGVwZW5kYW50IGdldHRlciByZXR1cm5pbmcgYW4gaW1tdXRhYmxlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSBvciBhcnJheSBvZiByZWZlcmVuY2UgdXNlZCBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSBidXN0IGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259IE1lbW9pemVkIHNlbGVjdG9yLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiggc2VsZWN0b3IsIGdldERlcGVuZGFudHMgKSB7XG5cdHZhciByb290Q2FjaGUsIGdldENhY2hlO1xuXG5cdC8vIFVzZSBvYmplY3Qgc291cmNlIGFzIGRlcGVuZGFudCBpZiBnZXR0ZXIgbm90IHByb3ZpZGVkXG5cdGlmICggISBnZXREZXBlbmRhbnRzICkge1xuXHRcdGdldERlcGVuZGFudHMgPSBhcnJheU9mO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHJvb3QgY2FjaGUuIElmIFdlYWtNYXAgaXMgc3VwcG9ydGVkLCB0aGlzIGlzIGFzc2lnbmVkIHRvIHRoZVxuXHQgKiByb290IFdlYWtNYXAgY2FjaGUgc2V0LCBvdGhlcndpc2UgaXQgaXMgYSBzaGFyZWQgaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHRcblx0ICogY2FjaGUgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsoV2Vha01hcHxPYmplY3QpfSBSb290IGNhY2hlIG9iamVjdC5cblx0ICovXG5cdGZ1bmN0aW9uIGdldFJvb3RDYWNoZSgpIHtcblx0XHRyZXR1cm4gcm9vdENhY2hlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNhY2hlIGZvciBhIGdpdmVuIGRlcGVuZGFudHMgYXJyYXkuIFdoZW4gcG9zc2libGUsIGEgV2Vha01hcFxuXHQgKiB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIGEgdW5pcXVlIGNhY2hlIGZvciBlYWNoIHNldCBvZiBkZXBlbmRhbnRzLiBUaGlzXG5cdCAqIGlzIGZlYXNpYmxlIGR1ZSB0byB0aGUgbmF0dXJlIG9mIFdlYWtNYXAgaW4gYWxsb3dpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uXG5cdCAqIHRvIG9jY3VyIG9uIGVudHJpZXMgd2hlcmUgdGhlIGtleSBvYmplY3QgaXMgbm8gbG9uZ2VyIHJlZmVyZW5jZWQuIFNpbmNlXG5cdCAqIFdlYWtNYXAgcmVxdWlyZXMgdGhlIGtleSB0byBiZSBhbiBvYmplY3QsIHRoaXMgaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZVxuXHQgKiBkZXBlbmRhbnQgaXMgb2JqZWN0LWxpa2UuIFRoZSByb290IGNhY2hlIGlzIGNyZWF0ZWQgYXMgYSBoaWVyYXJjaHkgd2hlcmVcblx0ICogZWFjaCB0b3AtbGV2ZWwga2V5IGlzIHRoZSBmaXJzdCBlbnRyeSBpbiBhIGRlcGVuZGFudHMgc2V0LCB0aGUgdmFsdWUgYVxuXHQgKiBXZWFrTWFwIHdoZXJlIGVhY2gga2V5IGlzIHRoZSBuZXh0IGRlcGVuZGFudCwgYW5kIHNvIG9uLiBUaGlzIGNvbnRpbnVlc1xuXHQgKiBzbyBsb25nIGFzIHRoZSBkZXBlbmRhbnRzIGFyZSBvYmplY3QtbGlrZS4gSWYgbm8gZGVwZW5kYW50cyBhcmUgb2JqZWN0LVxuXHQgKiBsaWtlLCB0aGVuIHRoZSBjYWNoZSBpcyBzaGFyZWQgYWNyb3NzIGFsbCBpbnZvY2F0aW9ucy5cblx0ICpcblx0ICogQHNlZSBpc09iamVjdExpa2Vcblx0ICpcblx0ICogQHBhcmFtIHtBcnJheX0gZGVwZW5kYW50cyBTZWxlY3RvciBkZXBlbmRhbnRzLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9IENhY2hlIG9iamVjdC5cblx0ICovXG5cdGZ1bmN0aW9uIGdldFdlYWtNYXBDYWNoZSggZGVwZW5kYW50cyApIHtcblx0XHR2YXIgY2FjaGVzID0gcm9vdENhY2hlLFxuXHRcdFx0aXNVbmlxdWVCeURlcGVuZGFudHMgPSB0cnVlLFxuXHRcdFx0aSwgZGVwZW5kYW50LCBtYXAsIGNhY2hlO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBkZXBlbmRhbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0ZGVwZW5kYW50ID0gZGVwZW5kYW50c1sgaSBdO1xuXG5cdFx0XHQvLyBDYW4gb25seSBjb21wb3NlIFdlYWtNYXAgZnJvbSBvYmplY3QtbGlrZSBrZXkuXG5cdFx0XHRpZiAoICEgaXNPYmplY3RMaWtlKCBkZXBlbmRhbnQgKSApIHtcblx0XHRcdFx0aXNVbmlxdWVCeURlcGVuZGFudHMgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERvZXMgY3VycmVudCBzZWdtZW50IG9mIGNhY2hlIGFscmVhZHkgaGF2ZSBhIFdlYWtNYXA/XG5cdFx0XHRpZiAoIGNhY2hlcy5oYXMoIGRlcGVuZGFudCApICkge1xuXHRcdFx0XHQvLyBUcmF2ZXJzZSBpbnRvIG5lc3RlZCBXZWFrTWFwLlxuXHRcdFx0XHRjYWNoZXMgPSBjYWNoZXMuZ2V0KCBkZXBlbmRhbnQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIENyZWF0ZSwgc2V0LCBhbmQgdHJhdmVyc2UgaW50byBhIG5ldyBvbmUuXG5cdFx0XHRcdG1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cdFx0XHRcdGNhY2hlcy5zZXQoIGRlcGVuZGFudCwgbWFwICk7XG5cdFx0XHRcdGNhY2hlcyA9IG1hcDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBXZSB1c2UgYW4gYXJiaXRyYXJ5IChidXQgY29uc2lzdGVudCkgb2JqZWN0IGFzIGtleSBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdC8vIGluIHRoZSBXZWFrTWFwIHRvIHNlcnZlIGFzIG91ciBydW5uaW5nIGNhY2hlLlxuXHRcdGlmICggISBjYWNoZXMuaGFzKCBMRUFGX0tFWSApICkge1xuXHRcdFx0Y2FjaGUgPSBjcmVhdGVDYWNoZSgpO1xuXHRcdFx0Y2FjaGUuaXNVbmlxdWVCeURlcGVuZGFudHMgPSBpc1VuaXF1ZUJ5RGVwZW5kYW50cztcblx0XHRcdGNhY2hlcy5zZXQoIExFQUZfS0VZLCBjYWNoZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWNoZXMuZ2V0KCBMRUFGX0tFWSApO1xuXHR9XG5cblx0Ly8gQXNzaWduIGNhY2hlIGhhbmRsZXIgYnkgYXZhaWxhYmlsaXR5IG9mIFdlYWtNYXBcblx0Z2V0Q2FjaGUgPSBoYXNXZWFrTWFwID8gZ2V0V2Vha01hcENhY2hlIDogZ2V0Um9vdENhY2hlO1xuXG5cdC8qKlxuXHQgKiBSZXNldHMgcm9vdCBtZW1vaXphdGlvbiBjYWNoZS5cblx0ICovXG5cdGZ1bmN0aW9uIGNsZWFyKCkge1xuXHRcdHJvb3RDYWNoZSA9IGhhc1dlYWtNYXAgPyBuZXcgV2Vha01hcCgpIDogY3JlYXRlQ2FjaGUoKTtcblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9jaGVjay1wYXJhbS1uYW1lc1xuXHQvKipcblx0ICogVGhlIGF1Z21lbnRlZCBzZWxlY3RvciBjYWxsLCBjb25zaWRlcmluZyBmaXJzdCB3aGV0aGVyIGRlcGVuZGFudHMgaGF2ZVxuXHQgKiBjaGFuZ2VkIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHVuZGVybHlpbmcgbWVtb2l6ZSBmdW5jdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSAgICBTb3VyY2Ugb2JqZWN0IGZvciBkZXJpdmF0aW9uLlxuXHQgKiBAcGFyYW0gey4uLip9ICAgZXh0cmFBcmdzIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gc2VsZWN0b3IuXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9IFNlbGVjdG9yIHJlc3VsdC5cblx0ICovXG5cdGZ1bmN0aW9uIGNhbGxTZWxlY3RvciggLyogc291cmNlLCAuLi5leHRyYUFyZ3MgKi8gKSB7XG5cdFx0dmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0XHRjYWNoZSwgbm9kZSwgaSwgYXJncywgZGVwZW5kYW50cztcblxuXHRcdC8vIENyZWF0ZSBjb3B5IG9mIGFyZ3VtZW50cyAoYXZvaWQgbGVha2luZyBkZW9wdGltaXphdGlvbikuXG5cdFx0YXJncyA9IG5ldyBBcnJheSggbGVuICk7XG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdGRlcGVuZGFudHMgPSBnZXREZXBlbmRhbnRzLmFwcGx5KCBudWxsLCBhcmdzICk7XG5cdFx0Y2FjaGUgPSBnZXRDYWNoZSggZGVwZW5kYW50cyApO1xuXG5cdFx0Ly8gSWYgbm90IGd1YXJhbnRlZWQgdW5pcXVlbmVzcyBieSBkZXBlbmRhbnRzIChwcmltaXRpdmUgdHlwZSBvciBsYWNrXG5cdFx0Ly8gb2YgV2Vha01hcCBzdXBwb3J0KSwgc2hhbGxvdyBjb21wYXJlIGFnYWluc3QgbGFzdCBkZXBlbmRhbnRzIGFuZCwgaWZcblx0XHQvLyByZWZlcmVuY2VzIGhhdmUgY2hhbmdlZCwgZGVzdHJveSBjYWNoZSB0byByZWNhbGN1bGF0ZSByZXN1bHQuXG5cdFx0aWYgKCAhIGNhY2hlLmlzVW5pcXVlQnlEZXBlbmRhbnRzICkge1xuXHRcdFx0aWYgKCBjYWNoZS5sYXN0RGVwZW5kYW50cyAmJiAhIGlzU2hhbGxvd0VxdWFsKCBkZXBlbmRhbnRzLCBjYWNoZS5sYXN0RGVwZW5kYW50cywgMCApICkge1xuXHRcdFx0XHRjYWNoZS5jbGVhcigpO1xuXHRcdFx0fVxuXG5cdFx0XHRjYWNoZS5sYXN0RGVwZW5kYW50cyA9IGRlcGVuZGFudHM7XG5cdFx0fVxuXG5cdFx0bm9kZSA9IGNhY2hlLmhlYWQ7XG5cdFx0d2hpbGUgKCBub2RlICkge1xuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciBub2RlIGFyZ3VtZW50cyBtYXRjaCBhcmd1bWVudHNcblx0XHRcdGlmICggISBpc1NoYWxsb3dFcXVhbCggbm9kZS5hcmdzLCBhcmdzLCAxICkgKSB7XG5cdFx0XHRcdG5vZGUgPSBub2RlLm5leHQ7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50IHdlIGNhbiBhc3N1bWUgd2UndmUgZm91bmQgYSBtYXRjaFxuXG5cdFx0XHQvLyBTdXJmYWNlIG1hdGNoZWQgbm9kZSB0byBoZWFkIGlmIG5vdCBhbHJlYWR5XG5cdFx0XHRpZiAoIG5vZGUgIT09IGNhY2hlLmhlYWQgKSB7XG5cdFx0XHRcdC8vIEFkanVzdCBzaWJsaW5ncyB0byBwb2ludCB0byBlYWNoIG90aGVyLlxuXHRcdFx0XHRub2RlLnByZXYubmV4dCA9IG5vZGUubmV4dDtcblx0XHRcdFx0aWYgKCBub2RlLm5leHQgKSB7XG5cdFx0XHRcdFx0bm9kZS5uZXh0LnByZXYgPSBub2RlLnByZXY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRub2RlLm5leHQgPSBjYWNoZS5oZWFkO1xuXHRcdFx0XHRub2RlLnByZXYgPSBudWxsO1xuXHRcdFx0XHRjYWNoZS5oZWFkLnByZXYgPSBub2RlO1xuXHRcdFx0XHRjYWNoZS5oZWFkID0gbm9kZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIGltbWVkaWF0ZWx5XG5cdFx0XHRyZXR1cm4gbm9kZS52YWw7XG5cdFx0fVxuXG5cdFx0Ly8gTm8gY2FjaGVkIHZhbHVlIGZvdW5kLiBDb250aW51ZSB0byBpbnNlcnRpb24gcGhhc2U6XG5cblx0XHRub2RlID0ge1xuXHRcdFx0Ly8gR2VuZXJhdGUgdGhlIHJlc3VsdCBmcm9tIG9yaWdpbmFsIGZ1bmN0aW9uXG5cdFx0XHR2YWw6IHNlbGVjdG9yLmFwcGx5KCBudWxsLCBhcmdzICksXG5cdFx0fTtcblxuXHRcdC8vIEF2b2lkIGluY2x1ZGluZyB0aGUgc291cmNlIG9iamVjdCBpbiB0aGUgY2FjaGUuXG5cdFx0YXJnc1sgMCBdID0gbnVsbDtcblx0XHRub2RlLmFyZ3MgPSBhcmdzO1xuXG5cdFx0Ly8gRG9uJ3QgbmVlZCB0byBjaGVjayB3aGV0aGVyIG5vZGUgaXMgYWxyZWFkeSBoZWFkLCBzaW5jZSBpdCB3b3VsZFxuXHRcdC8vIGhhdmUgYmVlbiByZXR1cm5lZCBhYm92ZSBhbHJlYWR5IGlmIGl0IHdhc1xuXG5cdFx0Ly8gU2hpZnQgZXhpc3RpbmcgaGVhZCBkb3duIGxpc3Rcblx0XHRpZiAoIGNhY2hlLmhlYWQgKSB7XG5cdFx0XHRjYWNoZS5oZWFkLnByZXYgPSBub2RlO1xuXHRcdFx0bm9kZS5uZXh0ID0gY2FjaGUuaGVhZDtcblx0XHR9XG5cblx0XHRjYWNoZS5oZWFkID0gbm9kZTtcblxuXHRcdHJldHVybiBub2RlLnZhbDtcblx0fVxuXG5cdGNhbGxTZWxlY3Rvci5nZXREZXBlbmRhbnRzID0gZ2V0RGVwZW5kYW50cztcblx0Y2FsbFNlbGVjdG9yLmNsZWFyID0gY2xlYXI7XG5cdGNsZWFyKCk7XG5cblx0cmV0dXJuIGNhbGxTZWxlY3Rvcjtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgX19ERVZfXyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbic7XG5cbnZhciB3YXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKF9fREVWX18pIHtcbiAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIHByaW50V2FybmluZyhmb3JtYXQsIGFyZ3MpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiA+IDEgPyBsZW4gLSAxIDogMCk7XG4gICAgZm9yICh2YXIga2V5ID0gMTsga2V5IDwgbGVuOyBrZXkrKykge1xuICAgICAgYXJnc1trZXkgLSAxXSA9IGFyZ3VtZW50c1trZXldO1xuICAgIH1cbiAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgK1xuICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH1cblxuICB3YXJuaW5nID0gZnVuY3Rpb24oY29uZGl0aW9uLCBmb3JtYXQsIGFyZ3MpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiA+IDIgPyBsZW4gLSAyIDogMCk7XG4gICAgZm9yICh2YXIga2V5ID0gMjsga2V5IDwgbGVuOyBrZXkrKykge1xuICAgICAgYXJnc1trZXkgLSAyXSA9IGFyZ3VtZW50c1trZXldO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnYHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArXG4gICAgICAgICAgJ21lc3NhZ2UgYXJndW1lbnQnXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KG51bGwsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7XG4iLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcInJlZ2VuZXJhdG9yUnVudGltZVwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1wiaGVscGVyc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJpMThuXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcIm1vZGVsXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZhbGlkYXRvcnNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmFsdWVPYmplY3RzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJhcGlGZXRjaFwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIndwXCJdW1wiZGF0YVwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIndwXCJdW1wiaG9va3NcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImlzU2hhbGxvd0VxdWFsXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJ1cmxcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmVuZG9yXCJdW1wiY3VpZFwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImxvZGFzaFwiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJ2ZW5kb3JcIl1bXCJtb21lbnRcIl07IH0oKSk7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/assets/dist/eventespresso-editor.1eddf04782eb9ccfd2ce.dist.deps.json b/assets/dist/eventespresso-editor.5a703f12f809dacbf49c.dist.deps.json similarity index 100% rename from assets/dist/eventespresso-editor.1eddf04782eb9ccfd2ce.dist.deps.json rename to assets/dist/eventespresso-editor.5a703f12f809dacbf49c.dist.deps.json diff --git a/assets/dist/eventespresso-editor.1eddf04782eb9ccfd2ce.dist.js b/assets/dist/eventespresso-editor.5a703f12f809dacbf49c.dist.js similarity index 99% rename from assets/dist/eventespresso-editor.1eddf04782eb9ccfd2ce.dist.js rename to assets/dist/eventespresso-editor.5a703f12f809dacbf49c.dist.js index 1cf798bf757..be7f6baadc7 100644 --- a/assets/dist/eventespresso-editor.1eddf04782eb9ccfd2ce.dist.js +++ b/assets/dist/eventespresso-editor.5a703f12f809dacbf49c.dist.js @@ -13650,4 +13650,4 @@ module.exports = __webpack_require__(/*! ./assets/src/editor/index.js */"./asset /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLmVkaXRvci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2VkaXRvci5jc3M/MWU5MCIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGlja2V0cy1tZXRhYm94L2RhdGVzLWFuZC10aWNrZXRzLW1ldGFib3guanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZGF0ZXMtYW5kLXRpY2tldHMtbWV0YWJveC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvYWN0aW9uLWhhbmRsZXJzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9hY3Rpb24taGFuZGxlcnMvd2l0aC1jb3B5LWRhdGUtZW50aXR5LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9hY3Rpb24taGFuZGxlcnMvd2l0aC10cmFzaC1kYXRlLWVudGl0eS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvYWN0aW9uLWhhbmRsZXJzL3dpdGgtdXBkYXRlLWV2ZW50LWRhdGUtcmVsYXRpb24uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZGF0ZXMtYW5kLXRpbWVzL2VkaXRvci1kYXRlL2FjdGlvbnMtbWVudS9lZGl0b3ItZGF0ZS1lbnRpdHktYWN0aW9ucy1tZW51LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9hY3Rpb25zLW1lbnUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZGF0ZXMtYW5kLXRpbWVzL2VkaXRvci1kYXRlL2FjdGlvbnMtbWVudS9zdHlsZS5jc3M/MmYzYSIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZWRpdC1mb3JtL2RhdGUtZW50aXR5LWZvcm0taW5wdXRzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9lZGl0LWZvcm0vZGF0ZS1lbnRpdHktZm9ybS1tb2RhbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZWRpdC1mb3JtL2RhdGUtZW50aXR5LWZvcm0tc2NoZW1hLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9lZGl0LWZvcm0vZGF0ZS1lbnRpdHktZm9ybS1zdWJtaXQtaGFuZGxlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZWRpdC1mb3JtL2RhdGUtZW50aXR5LWZvcm0uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZGF0ZXMtYW5kLXRpbWVzL2VkaXRvci1kYXRlL2VkaXQtZm9ybS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZWRpdG9yLWRhdGUtZW50aXRpZXMtbGlzdC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZmlsdGVyLWJhci9kYXRlLWVudGl0aWVzLWxpc3QtZmlsdGVyLXV0aWxzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9maWx0ZXItYmFyL2RhdGUtbGlzdC1maWx0ZXItYmFyLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9maWx0ZXItYmFyL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9maWx0ZXItYmFyL3dpdGgtZGF0ZS1lbnRpdGllcy1saXN0LWZpbHRlci1iYXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZGF0ZXMtYW5kLXRpbWVzL2VkaXRvci1kYXRlL2ZpbHRlci1iYXIvd2l0aC1kYXRlLWVudGl0aWVzLWxpc3QtZmlsdGVyLXN0YXRlLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9maWx0ZXItYmFyL3dpdGgtZmlsdGVyZWQtZGF0ZS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZ3JpZC12aWV3L2VkaXRvci1kYXRlLWVudGl0aWVzLWdyaWQtdmlldy5jc3M/ZDRhNiIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZ3JpZC12aWV3L2VkaXRvci1kYXRlLWVudGl0aWVzLWdyaWQtdmlldy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZ3JpZC12aWV3L2VkaXRvci1kYXRlLWVudGl0eS1kZXRhaWxzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9ncmlkLXZpZXcvZWRpdG9yLWRhdGUtZW50aXR5LWdyaWQtaXRlbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZ3JpZC12aWV3L2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvbGlzdC12aWV3L2VkaXRvci1kYXRlLWVudGl0aWVzLWxpc3Qtdmlldy5jc3M/ZTQyMCIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvbGlzdC12aWV3L2VkaXRvci1kYXRlLWVudGl0aWVzLWxpc3Qtdmlldy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvbGlzdC12aWV3L2VkaXRvci1kYXRlLWVudGl0eS1saXN0LWl0ZW0uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZGF0ZXMtYW5kLXRpbWVzL2VkaXRvci1kYXRlL2xpc3Qtdmlldy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZXZlbnQtZWRpdG9yLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2hvY3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvaG9jcy93aXRoLWVkaXRvci1kYXRlLWVudGl0aWVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2hvY3Mvd2l0aC1lZGl0b3ItZGF0ZS10aWNrZXQtZW50aXRpZXMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvaG9jcy93aXRoLWVkaXRvci1ldmVudC1lbnRpdHkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvaG9jcy93aXRoLWVkaXRvci10aWNrZXQtZGF0ZS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9ob2NzL3dpdGgtZWRpdG9yLXRpY2tldC1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9ob2NzL3dpdGgtcHJpY2UtdHlwZS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9ob2NzL3dpdGgtdGlja2V0LXByaWNlLWVudGl0aWVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2luaXRpYWxpemF0aW9uL2NvbnRleHQvZWRpdG9yLWluaXRpYWxpemVkLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvaW5pdGlhbGl6YXRpb24vY29udGV4dC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9pbml0aWFsaXphdGlvbi9jb250ZXh0L3VzZS1lZGl0b3ItaW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvaW5pdGlhbGl6YXRpb24vZWRpdG9yLWluaXRpYWxpemF0aW9uLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2luaXRpYWxpemF0aW9uL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2luaXRpYWxpemF0aW9uL3VzZS1lZGl0b3ItaW5pdGlhbGl6YXRpb24uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvaW5pdGlhbGl6YXRpb24vd2l0aC1ldmVudC1kYXRlLWVudGl0aWVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2luaXRpYWxpemF0aW9uL3dpdGgtZXZlbnQtZW50aXR5LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2luaXRpYWxpemF0aW9uL3dpdGgtdGlja2V0LWVudGl0aWVzLWZvci1hbGwtZGF0ZS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci9ob29rcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci9ob29rcy91c2UtYXNzaWdubWVudHMtY2FsY3VsYXRvci5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci90aWNrZXQtYXNzaWdubWVudHMtaGFuZGxlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci1tb2RhbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci5jc3M/YzM4MiIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci93aXRoLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyLW1vZGFsLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9hY3Rpb24taGFuZGxlcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2FjdGlvbi1oYW5kbGVycy93aXRoLWNvcHktdGlja2V0LWVudGl0eS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvYWN0aW9uLWhhbmRsZXJzL3dpdGgtdHJhc2gtdGlja2V0LWVudGl0eS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvYWN0aW9ucy1tZW51L2VkaXRvci10aWNrZXQtYWN0aW9ucy1tZW51LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9hY3Rpb25zLW1lbnUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2FjdGlvbnMtbWVudS9zdHlsZS5jc3M/MDU4YyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvZWRpdC1mb3JtL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9lZGl0LWZvcm0vdGlja2V0LWVudGl0eS1mb3JtLWlucHV0cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvZWRpdC1mb3JtL3RpY2tldC1lbnRpdHktZm9ybS1zY2hlbWEuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2VkaXQtZm9ybS90aWNrZXQtZW50aXR5LWZvcm0uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2VkaXQtZm9ybS93aXRoLXRpY2tldC1lbnRpdHktZm9ybS1tb2RhbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvZWRpdG9yLXRpY2tldC1lbnRpdGllcy1saXN0LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL3N0eWxlLmNzcz82MGQxIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL3RpY2tldC1lbnRpdGllcy1saXN0LWZpbHRlci1iYXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2ZpbHRlci1iYXIvdGlja2V0LWVudGl0aWVzLWxpc3QtZmlsdGVyLXV0aWxzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL3dpdGgtZmlsdGVyZWQtdGlja2V0LWVudGl0aWVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL3dpdGgtdGlja2V0LWVudGl0aWVzLWZvci1maWx0ZXJlZC1kYXRlLWVudGl0aWVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL3dpdGgtdGlja2V0LWVudGl0aWVzLWxpc3QtZmlsdGVyLWJhci5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvZmlsdGVyLWJhci93aXRoLXRpY2tldC1lbnRpdGllcy1saXN0LWZpbHRlci1zdGF0ZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvZ3JpZC12aWV3L2VkaXRvci10aWNrZXQtZW50aXRpZXMtZ3JpZC12aWV3LmNzcz82NmU5Iiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9ncmlkLXZpZXcvZWRpdG9yLXRpY2tldC1lbnRpdGllcy1ncmlkLXZpZXcuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2dyaWQtdmlldy9lZGl0b3ItdGlja2V0LWVudGl0eS1kZXRhaWxzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9ncmlkLXZpZXcvZWRpdG9yLXRpY2tldC1lbnRpdHktZ3JpZC1pdGVtLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9ncmlkLXZpZXcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9saXN0LXZpZXcvZWRpdG9yLXRpY2tldC1lbnRpdGllcy1saXN0LXZpZXcuY3NzP2E0NWEiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2xpc3Qtdmlldy9lZGl0b3ItdGlja2V0LWVudGl0aWVzLWxpc3Qtdmlldy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvbGlzdC12aWV3L2VkaXRvci10aWNrZXQtZW50aXR5LWxpc3QtaXRlbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvbGlzdC12aWV3L2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9wcmljZS1jYWxjdWxhdG9yL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvcHJpY2UtY2FsY3VsYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvcHJpY2UtY2FsY3VsYXRvci9zdHlsZS5jc3M/MDBmMiIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvcHJpY2UtY2FsY3VsYXRvci90aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1mb3JtLWRhdGEtbWFwLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9wcmljZS1jYWxjdWxhdG9yL3RpY2tldC1wcmljZS1jYWxjdWxhdG9yLWZvcm0uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L3ByaWNlLWNhbGN1bGF0b3IvdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItbWVudS1pdGVtLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9wcmljZS1jYWxjdWxhdG9yL3VzZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1mb3JtLWRlY29yYXRvci5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvcHJpY2UtY2FsY3VsYXRvci91c2UtdGlja2V0LXByaWNlLWNhbGN1bGF0b3JzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9wcmljZS1jYWxjdWxhdG9yL3dpdGgtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItZm9ybS1tb2RhbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhIb2xlcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFNwcmVhZC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvZmluYWwtZm9ybS1jYWxjdWxhdGUvZGlzdC9maW5hbC1mb3JtLWNhbGN1bGF0ZS5lcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9maW5hbC1mb3JtL2Rpc3QvZmluYWwtZm9ybS5lcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9tZW1pemUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvd2FybmluZy93YXJuaW5nLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpcInJlZ2VuZXJhdG9yUnVudGltZVwifSIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwiY29tcG9uZW50c1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImVkaXRvckhvY3NcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwiaGVscGVyc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImhvY3NcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJob29rc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImkxOG5cIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJtb2RlbFwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcInZhbGlkYXRvcnNcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2YWx1ZU9iamVjdHNcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiY29tcG9uZW50c1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJjb21wb3NlXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImRhdGFcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiZWxlbWVudFwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJob29rc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJrZXljb2Rlc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJ1cmxcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2ZW5kb3JcIixcImNsYXNzbmFtZXNcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpcImxvZGFzaFwifSIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci9leHRlcm5hbCB7XCJ0aGlzXCI6XCJSZWFjdFwifSJdLCJuYW1lcyI6WyJNZXRhQm94IiwiZXZlbnRJZCIsImluaXRpYWxpemVkIiwidXNlRWRpdG9ySW5pdGlhbGl6ZWQiLCJzcHJpbnRmIiwiX3giLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJfXyIsIkRhdGVzQW5kVGlja2V0c01ldGFib3giLCJ3aXRoRWRpdG9ySW5pdGlhbGl6YXRpb24iLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvbmVPZlR5cGUiLCJudW1iZXIiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwid2l0aENvcHlEYXRlRW50aXR5IiwiY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQiLCJ3aXRoRGlzcGF0Y2giLCJkaXNwYXRjaCIsImV2ZW50RW50aXR5IiwiZGF0ZUVudGl0eSIsInRpY2tldEVudGl0aWVzIiwiaXNNb2RlbEVudGl0eU9mTW9kZWwiLCJjb3B5RGF0ZUVudGl0eSIsImNyZWF0ZUVudGl0eSIsImNyZWF0ZVJlbGF0aW9ucyIsImZvckNsb25lIiwibmV3RGF0ZUVudGl0eSIsImlzRW1wdHkiLCJpZCIsIndpdGhUcmFzaERhdGVFbnRpdHkiLCJEQVRFVElNRSIsImRhdGVUaW1lTW9kZWwiLCJNT0RFTF9OQU1FIiwidHJhc2hEYXRlRW50aXR5IiwidHJhc2hFbnRpdHlCeUlkIiwid2luZG93IiwiY29uZmlybSIsIkVWRU5UIiwiZXZlbnRNb2RlbCIsIndpdGhVcGRhdGVFdmVudERhdGVSZWxhdGlvbiIsImNvbXBvc2UiLCJ3aXRoRWRpdG9yRXZlbnRFbnRpdHkiLCJ1cGRhdGVFdmVudERhdGVSZWxhdGlvbiIsIkVycm9yIiwiY3JlYXRlUmVsYXRpb24iLCJERUZBVUxUX0VNUFRZX0FSUkFZIiwiRWRpdG9yRGF0ZUVudGl0eUFjdGlvbnNNZW51IiwidGl0bGUiLCJpY29uIiwib25DbGljayIsInByb3BzIiwidG9nZ2xlRWRpdG9yIiwidG9vbHRpcCIsInRvZ2dsZVRpY2tldEFzc2lnbm1lbnRzIiwibGVuZ3RoIiwic2lkZWJhck1lbnVJdGVtcyIsInB1c2giLCJtYWluRHJvcERvd25NZW51IiwiZWRpdERhdGVNZW51SXRlbSIsInZpZXdUaWNrZXRzTWVudUl0ZW0iLCJhcHBseUZpbHRlcnMiLCJnZXRTaWRlYmFyTWVudUl0ZW1zIiwibWFwIiwic2lkZWJhck1lbnVJdGVtIiwiaW5kZXgiLCJ0eXBlIiwiRHJvcERvd25NZW51IiwiRW50aXR5QWN0aW9uTWVudUl0ZW0iLCJJY29uTWVudUl0ZW0iLCJlZGl0b3JPcGVuIiwic2lkZWJhck1lbnUiLCJDb21wb25lbnQiLCJ3aXRoRWRpdG9yIiwid2l0aEVkaXRvckRhdGVUaWNrZXRFbnRpdGllcyIsIndpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCIsIm5hbWUiLCJzdGFydCIsInRvRm9ybWF0IiwiY2xvc2VCdXR0b25MYWJlbCIsImRhdGVFbnRpdHlGb3JtSW5wdXRzIiwiZXhjbHVkZSIsInZhbHVlcyIsIkZvcm1JbnB1dCIsImlucHV0cyIsInByZWZpeCIsIm5vcm1hbGl6ZUVudGl0eUlkIiwiaW5kZXhPZiIsInZhbGlkYXRpb25zIiwicmVxdWlyZWQiLCJJbmZpbml0eSIsIkRhdGVFbnRpdHlGb3JtTW9kYWwiLCJkYXRlRW50aXR5Rm9ybVNjaGVtYSIsInN0YXRlIiwiZGF0YSIsImRhdGVFbnRpdHlGb3JtU3VibWl0SGFuZGxlciIsInJlcGxhY2VEYXRlSW5TdG9yZSIsInNldFN0YXRlIiwib3JpZ2luYWxEYXRlRW50aXR5IiwiY2xvbmUiLCJsb2FkSGFuZGxlciIsInN1Ym1pdEhhbmRsZXIiLCJyZXNldEhhbmRsZXIiLCJvYmplY3QiLCJmdW5jIiwid2l0aEVkaXRvck1vZGFsIiwiY3VzdG9tQ2xhc3MiLCJyZWNlaXZlQW5kUmVwbGFjZUVudGl0eVJlY29yZHMiLCJyZXBsYWNlRGF0ZSIsIkVWVF9JRCIsImRlc2NyaXB0aW9uIiwidG9JU08iLCJlbmQiLCJzdHJpcEluZmluaXR5IiwicmVnTGltaXQiLCJzb2xkIiwicmVzZXJ2ZWQiLCJvcmRlciIsInBhcmVudCIsImRlbGV0ZWQiLCJmb3JtRGF0YSIsImdldFZhbHVlIiwiZmllbGQiLCJkZWZhdWx0VmFsdWUiLCJTZXJ2ZXJEYXRlVGltZSIsInBhcnNlSW50IiwiaXNQcmltYXJ5IiwiRGF0ZUVudGl0eUZvcm0iLCJzdWJtaXRCdXR0b24iLCJjYW5jZWxCdXR0b24iLCJjdXJyZW50VmFsdWVzIiwiaW5pdGlhbFZhbHVlcyIsIm5ld09iamVjdCIsInR3b0NvbHVtbkFkbWluRm9ybUxheW91dCIsIkZvcm1TZWN0aW9uIiwiRm9ybVdyYXBwZXIiLCJGb3JtU2F2ZUNhbmNlbEJ1dHRvbnMiLCJGb3JtSW5mbyIsImZvcm1Sb3dzIiwiQXJyYXkiLCJpc0FycmF5IiwidW5zaGlmdCIsIndpdGhGb3JtSGFuZGxlciIsIkVkaXRvckRhdGVFbnRpdGllc0xpc3QiLCJhZGREYXRlRW50aXR5IiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImFkZE5ld0RhdGVFbnRpdHkiLCJ2aWV3IiwiZW50aXRpZXMiLCJvdGhlclByb3BzIiwiRWRpdG9yRGF0ZUVudGl0aWVzR3JpZFZpZXciLCJFZGl0b3JEYXRlRW50aXRpZXNMaXN0VmlldyIsImFkZE5ld0RhdGVCdXR0b24iLCJ0aWNrZXRBc3NpZ25tZW50c0J1dHRvbiIsIndpdGhFZGl0b3JEYXRlRW50aXRpZXMiLCJ3aXRoUGFnaW5hdGVkRGF0ZUVudGl0aWVzTGlzdEFuZEZpbHRlckJhciIsInRoZW4iLCJmaWx0ZXJEYXRlRW50aXRpZXMiLCJkYXRlRW50aXRpZXMiLCJzaG93RGF0ZXMiLCJzb3J0RGF0ZUVudGl0aWVzTGlzdCIsImZpbHRlciIsImlzVHJhc2hlZCIsImlzQWN0aXZlIiwiaXNVcGNvbWluZyIsImZpcnN0IiwidmFsaWRTdGF0dXMiLCJpc1NvbGRPdXQiLCJjYXBhY2l0eUF0T3JBYm92ZSIsImNhcGFjaXR5QmVsb3ciLCJpc1JlY2VudGx5RXhwaXJlZCIsImlzRXhwaXJlZCIsInNvcnQiLCJzb3J0QnkiLCJEYXRlVGltZSIsImlzVmFsaWQiLCJ0b01pbGxpcyIsImNhcGFjaXR5IiwidmFsaWRTb2xkIiwidmFsaWRGaW5pdGVSZWdsaW1pdCIsInZhbGlkSW5maW5pdGVSZWdsaW1pdCIsInN0YXR1cyIsInZhbGlkUmVnbGltaXQiLCJzZWFyY2hEYXRlRW50aXRpZXMiLCJzZWFyY2hUZXh0IiwidG9Mb3dlckNhc2UiLCJzZWFyY2giLCJEYXRlTGlzdEZpbHRlckJhciIsInNldFNob3dEYXRlcyIsInZhbHVlIiwibGFiZWwiLCJkYXRlc1NvcnRlZEJ5Iiwic2V0RGF0ZXNTb3J0ZWRCeSIsImRpc3BsYXlEYXRlcyIsInNldERpc3BsYXlEYXRlcyIsInNob3dGaWx0ZXIiLCJzb3J0RmlsdGVyIiwiZGlzcGxheUZpbHRlciIsInBhZ2luYXRpb25Db25maWciLCJ3aXRoRGF0ZUVudGl0aWVzTGlzdEZpbHRlclN0YXRlIiwid2l0aERhdGVFbnRpdGllc0xpc3RGaWx0ZXJCYXIiLCJ3aXRoRW50aXR5UGFnaW5hdGlvbiIsImdldEZpbHRlcmVkRGF0ZUVudGl0aWVzTGlzdCIsIkVudGl0eUxpc3QiLCJzZWFyY2hEYXRlTmFtZSIsImRhdGVzUGVyUGFnZSIsImRhdGVzVmlldyIsInNldFNlYXJjaERhdGVOYW1lIiwic2V0RGF0ZXNQZXJQYWdlIiwic2V0RGF0ZXNMaXN0VmlldyIsInNldERhdGVzR3JpZFZpZXciLCJzZXRGaWx0ZXJlZERhdGVFbnRpdGllcyIsImZpbHRlcmVkRW50aXRpZXMiLCJ1c2VNZW1vIiwidXNlRWZmZWN0Iiwid2l0aFNlbGVjdCIsInNlbGVjdCIsIm93blByb3BzIiwic3RvcmUiLCJnZXRFbnRpdGllc0J5SWRzIiwiZ2V0RmlsdGVyIiwiZmlsdGVyZWREYXRlRW50aXRpZXMiLCJzZXRGaWx0ZXIiLCJkYXRlRW50aXR5SWRzIiwid2l0aEZpbHRlcmVkRGF0ZUVudGl0aWVzIiwiaHRtbENsYXNzIiwiY2xhc3NOYW1lcyIsIkFETUlOX1JPVVRFUyIsInJvdXRlcyIsIkFETUlOX1JPVVRFX0FDVElPTlMiLCJBRE1JTl9ST1VURV9BQ1RJT05fREVGQVVMVCIsImdldEFkbWluVXJsIiwiRWRpdG9yRGF0ZUVudGl0eURldGFpbHMiLCJ1cGRhdGVOYW1lIiwibGVmdCIsInNob3dEZXNjIiwiZGVzYyIsInVwZGF0ZURlc2NyaXB0aW9uIiwidmVudWVFbnRpdHkiLCJzaG93VmVudWUiLCJlZGl0VmVudWVVcmwiLCJhZGRRdWVyeUFyZ3MiLCJWRU5VRVMiLCJFRElUIiwicG9zdCIsInJldHVybiIsImRldGFpbHMiLCJlZGl0YWJsZSIsInZhbHVlVHlwZSIsIm9uQ2hhbmdlIiwidXBkYXRlQ2FwYWNpdHkiLCJnZXREYXRldGltZVJlZ2lzdHJhdGlvbnNMaW5rIiwicmVnTGlzdFVybCIsIlJFR0lTVFJBVElPTlMiLCJldmVudF9pZCIsImRhdGV0aW1lX2lkIiwiZGF0ZU5hbWUiLCJ2ZW51ZU5hbWUiLCJkYXRlU29sZFJlc2VydmVkQ2FwYWNpdHkiLCJpZlZhbGlkRGF0ZUVudGl0eSIsIndpdGhFdmVudFZlbnVlRW50aXR5IiwiZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MiLCJnZXREYXRlVGltZVN0YXR1c1RleHRMYWJlbCIsIkVkaXRvckRhdGVFbnRpdHlHcmlkSXRlbSIsInNob3dEYXRlIiwic2lkZWJhckNvbG9yQ2xhc3MiLCJkYXRlU3RhdHVzIiwiZW5kVGltZSIsInN0YXJ0VGltZSIsImRhdGVTdHlsZUNsYXNzIiwiZGlzcGxheURhdGUiLCJ3aXRoRW50aXR5UGFwZXJGcmFtZSIsIkVkaXRvckRhdGVFbnRpdHlMaXN0SXRlbSIsInN0YXR1c0NsYXNzIiwiZ2V0U3RhdHVzQ2xhc3MiLCJiZ0NsYXNzIiwicmVnTGluayIsImdldERhdGVSZWdpc3RyYXRpb25zTGluayIsImlmQ29uZGl0aW9uIiwiY29udGFpbmVyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImVkaXRvciIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJwcmVwZW5kIiwiZWVFZGl0b3JFdmVudElkIiwicmVuZGVyIiwiZ2V0RGF0ZXRpbWVzIiwiREVGQVVMVF9PQkpFQ1QiLCJnZXRSZWxhdGVkRW50aXRpZXMiLCJldmVudHMiLCJnZXRFdmVudHMiLCJzbGljZSIsInBvcCIsIndpdGhFZGl0b3JUaWNrZXREYXRlRW50aXRpZXMiLCJ0aWNrZXRFbnRpdHkiLCJnZXRUaWNrZXRzIiwiZ2V0RW50aXRpZXMiLCJwcmljZVR5cGVFbnRpdGllcyIsImhhc0ZpbmlzaGVkUmVzb2x1dGlvbiIsInByaWNlVHlwZUVudGl0aWVzTG9hZGVkIiwiRU1QVFlfT0JKRUNUIiwibm9CYXNlUHJpY2UiLCJwcmljZUVudGl0aWVzTG9hZGVkIiwicHJpY2VFbnRpdGllcyIsIkVkaXRvckluaXRpYWxpemVkQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJQcm92aWRlciIsIkNvbnN1bWVyIiwidXNlQ29udGV4dCIsIkVkaXRvckluaXRpYWxpemF0aW9uIiwiZXZlbnRFbnRpdHlMb2FkZWQiLCJkYXRlRW50aXRpZXNMb2FkZWQiLCJ0aWNrZXRFbnRpdGllc0xvYWRlZCIsImVkaXRvckluaXRpYWxpemVkIiwic2V0SW5pdGlhbGl6ZWQiLCJjaGlsZHJlbiIsIldyYXBwZWRDb21wb25lbnQiLCJ1c2VFZGl0b3JJbml0aWFsaXphdGlvbiIsIndpdGhFdmVudEVudGl0eSIsIndpdGhFdmVudERhdGVFbnRpdGllcyIsIndpdGhUaWNrZXRFbnRpdGllc0ZvckFsbERhdGVFbnRpdGllcyIsInVzZVN0YXRlIiwic2V0RWRpdG9ySW5pdGlhbGl6ZWQiLCJnZXRFdmVudEJ5SWQiLCJnZXRSZWxhdGVkRW50aXRpZXNGb3JJZHMiLCJkYXRlSWRzIiwidXNlQXNzaWdubWVudHNDYWxjdWxhdG9yIiwiYXNzaWduZWRDb3VudHMiLCJhc3NpZ25lZFN0YXRlIiwiZ2V0TWVzc2FnZSIsInVzZUNhbGxiYWNrIiwibWlzc2luZ0Fzc2lnbm1lbnRDb3VudHMiLCJtZXNzYWdlIiwidGlja2V0c01pc3NpbmciLCJkYXRlcyIsInRpY2tldHMiLCJkYXRlc01pc3NpbmciLCJib3RoTWlzc2luZyIsInRvdGFsTWlzc2luZ0Fzc2lnbm1lbnRzIiwidXBkYXRlZENvdW50cyIsImNsb25lRGVlcCIsImNvdW50QXNzaWdubWVudENoYW5nZXNGb3JEYXRlcyIsImVtcHR5Q291bnQiLCJjb3VudCIsImRhdGVJZCIsImFzc2lnbmVkU3RhdGVGb3JEYXRlIiwiYXNzaWduZWQiLCJmb3JFYWNoIiwidGlja2V0SWQiLCJyZW1vdmVkU3RhdGVGb3JEYXRlIiwicmVtb3ZlZCIsImNvdW50QXNzaWdubWVudENoYW5nZXNGb3JUaWNrZXRzIiwicmVkdWNlIiwiaGFzTWlzc2luZ0Fzc2lnbm1lbnRzIiwibm9Bc3NpZ25tZW50c01lc3NhZ2UiLCJ1cGRhdGVkQXNzaWdubWVudHNDb3VudHMiLCJub0luZGV4IiwiaXNBc3NpZ25lZCIsInJldHVybkluZGV4IiwicHJvY2Vzc0NoYW5nZXMiLCJhZGRUaWNrZXRzIiwicmVtb3ZlVGlja2V0RW50aXRpZXMiLCJyZWxhdGlvblVwZGF0ZXMiLCJ0aWNrZXRJZHNUb1JlbW92ZSIsInRpY2tldElkc1RvQXNzaWduIiwiUHJvbWlzZSIsImFsbCIsInVuQXNzaWduVGlja2V0RW50aXR5Iiwic3BsaWNlIiwib21pdEJ5IiwiaXNVbmRlZmluZWQiLCJhc3NpZ25UaWNrZXRFbnRpdHkiLCJwcmV2U3RhdGUiLCJpc1JlbW92ZWQiLCJ1blJlbW92ZVRpY2tldEVudGl0eSIsImNsZWFuU3RhdGUiLCJhc3NpZ25lZENvdW50IiwiZGF0ZUlEIiwicmVtb3ZlVGlja2V0RW50aXR5IiwicmVtb3ZlZENvdW50IiwiZ2V0RGF0ZUJnQ29sb3JDbGFzcyIsImdldFRpY2tldEJnQ29sb3JDbGFzcyIsInRpY2tldE1vZGVsIiwiVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWwiLCJ0aWNrZXRFbnRpdGllc0J5RGF0ZUlkcyIsImFkZFRpY2tldEVudGl0aWVzIiwicGFnaW5hdGlvbiIsImhhc05vQXNzaWdubWVudHMiLCJzZXRBc3NpZ25lZFN0YXRlIiwiYXNzaWdubWVudENvdW50cyIsInN1Ym1pdHRpbmciLCJzZXRTdWJtaXR0aW5nIiwiZm9ybUVycm9yIiwic2V0Rm9ybUVycm9yIiwiaGFuZGxlciIsInVwZGF0ZXMiLCJ3YXNVcGRhdGVkIiwidXBkYXRlZCIsImNhdGNoIiwiZXJyb3IiLCJ3YXJuaW5nIiwidGlja2V0SGVhZGVycyIsImRhdGVDb3VudCIsImhlYWRlckNlbGxzIiwiY2xhc3MiLCJ0aWNrZXQiLCJzYWxlRGF0ZSIsInN0YXJ0RGF0ZSIsInByaWNlIiwieWVhclJvdyIsInllYXIiLCJ0aWNrZXRFbnRpdGllc0ZvclllYXIiLCJyb3dEYXRhIiwicm93TnVtYmVyIiwiY29sTnVtYmVyIiwiZGV0ZXJtaW5lQ3VycmVudEFzc2lnbm1lbnQiLCJkYXRlVGlja2V0RW50aXRpZXMiLCJoYXNUaWNrZXQiLCJmaW5kSW5kZXgiLCJnZXRBY3Rpb25Nb2RpZmllcnMiLCJjdXJyZW50bHlBc3NpZ25lZCIsImdldEFjdGlvbiIsImdldEFzc2lnbm1lbnRzRXJyb3JDbGFzcyIsImVudGl0aWVzSGF2ZUVtcHR5QXNzaWdubWVudHMiLCJnZXRJY29uQW5kQmdDb2xvciIsImJnQ29sb3IiLCJ0aWNrZXRDZWxsIiwiYWN0aW9uIiwiYXNzaWdubWVudHNFcnJvckNsYXNzIiwia2V5Q29kZSIsIkVOVEVSIiwiZGF0ZUhlYWRlciIsImRhdGVSb3dzIiwicm93cyIsImV2ZW50RGF0ZSIsImRhdGVZZWFyIiwiZ2V0Rm9ybUVycm9yIiwiZXJyb3JNZXNzYWdlIiwiRm9ybVN1Ym1pdEJ1dHRvbiIsIkZvcm1DYW5jZWxCdXR0b24iLCJ0YWJsZUlkIiwidGFibGVDYXB0aW9uIiwiaGFzUm93SGVhZGVycyIsInRhYmxlQ2xhc3MiLCJ3aXRoRWRpdG9yVGlja2V0RW50aXRpZXMiLCJyZWdpc3RyeSIsInRpY2tldElkcyIsInJlbW92ZVJlbGF0aW9uRm9yRW50aXR5IiwicmVsYXRpb25zUmVtb3ZlZCIsInVzZVJlZiIsImR0bVByb3BzIiwibm90aWNlIiwiZGF0ZSIsImN1cnJlbnQiLCJyZWxhdGVkVGlja2V0cyIsInVwZGF0ZWRBc3NpZ25tZW50Q291bnRzIiwib25VcGRhdGUiLCJ0b2dnbGVUaWNrZXRBc3NpZ25tZW50c01hbmFnZXIiLCJ1cGRhdGUiLCJhbGVydCIsIndpdGhGb3JtQ29udGFpbmVyQW5kUGxhY2Vob2xkZXIiLCJyZXR1cm5Bc1Byb3AiLCJlbnRpdGllc1BlclBhZ2UiLCJwb3NpdGlvbiIsIm1vZGFsUHJvcHNDYWxsYmFjayIsInNob3dNYW5hZ2VyIiwic2V0U2hvd01hbmFnZXIiLCJ0b2dnbGVNYW5hZ2VyIiwicHJldlNob3dNYW5hZ2VyIiwiREVGQVVMVF9ESVNQQVRDSCIsImNvcHlUaWNrZXRFbnRpdHkiLCJ3aXRoQ29weVRpY2tldEVudGl0eSIsIlRJQ0tFVCIsIm5ld1RpY2tldCIsInJlbGF0ZWRQcmljZXMiLCJuZXdQcmljZXMiLCJpIiwibmV3UHJpY2UiLCJ0cmFzaFRpY2tldEVudGl0eSIsIndpdGhUcmFzaFRpY2tldEVudGl0eSIsIkVkaXRvclRpY2tldEFjdGlvbnNNZW51IiwidG9nZ2xlVGlja2V0RWRpdG9yIiwidG9nZ2xlQ2FsY3VsYXRvciIsImRvUmVmcmVzaCIsImFzc2lnbkRhdGVzTWVudUl0ZW0iLCJpc1ZhbGlkRWxlbWVudCIsIndpdGhUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtTW9kYWwiLCJ3aXRoVGlja2V0RW50aXR5Rm9ybU1vZGFsIiwidGlja2V0RW50aXR5Rm9ybUlucHV0cyIsImNhbGN1bGF0b3IiLCJyZWNhbGN1bGF0ZUJhc2VQcmljZSIsInByZXZWYWx1ZSIsIk1vbmV5IiwiU2l0ZUN1cnJlbmN5IiwidGF4YWJsZSIsImVuZERhdGUiLCJxdHkiLCJ1c2VzIiwibWluIiwibWF4IiwiaXNEZWZhdWx0IiwidGlja2V0RW50aXR5Rm9ybVNjaGVtYSIsImFtb3VudCIsInRvTnVtYmVyIiwid3BVc2VyIiwiZ2V0Rm9ybVJvd3MiLCJUaWNrZXRFbnRpdHlGb3JtIiwidXNlVGlja2V0UHJpY2VDYWxjdWxhdG9ycyIsImNhbGN1bGF0ZVRpY2tldEJhc2VQcmljZSIsIndpdGhUaWNrZXRQcmljZUVudGl0aWVzIiwid2l0aFByaWNlVHlwZUVudGl0aWVzIiwiVGlja2V0RW50aXR5Rm9ybU1vZGFsIiwib25DbG9zZVRpY2tldEVkaXRvciIsIm9uT3BlblRpY2tldEVkaXRvciIsInNob3dFZGl0b3IiLCJzZXRTaG93RWRpdG9yIiwicHJldlNob3dFZGl0b3IiLCJFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3QiLCJhZGROZXdUaWNrZXRFbnRpdHkiLCJhZGROZXdUaWNrZXRFbnRpdHlCdXR0b24iLCJFZGl0b3JUaWNrZXRFbnRpdGllc0dyaWRWaWV3IiwiRWRpdG9yVGlja2V0RW50aXRpZXNMaXN0VmlldyIsIndpdGhOZXdUaWNrZXRFbnRpdHkiLCJzZXROZXdUaWNrZXRFbnRpdHkiLCJiYXNlUHJpY2VUeXBlRW50aXR5IiwiZmluZCIsInByaWNlVHlwZSIsInBidElkIiwiY3JlYXRlTmV3VGlja2V0RW50aXR5IiwiUFJUX0lEIiwibmV3QmFzZVByaWNlIiwid2l0aFBhZ2luYXRlZFRpY2tldEVudGl0aWVzTGlzdEFuZEZpbHRlckJhciIsIkVkaXRvclRpY2tldEVudGl0aWVzT25seUxpc3QiLCJ3aXRoVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyU3RhdGUiLCJ3aXRoVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyQmFyIiwiVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyQmFyIiwic2hvd1RpY2tldHMiLCJzZXRTaG93VGlja2V0cyIsImlzQ2hhaW5lZCIsInRpY2tldHNTb3J0ZWRCeSIsInNldFRpY2tldHNTb3J0ZWRCeSIsImRpc3BsYXlUaWNrZXRzIiwic2V0RGlzcGxheVRpY2tldHMiLCJzZXRJc0NoYWluZWQiLCJkaXNwbGF5VGlja2V0RGF0ZSIsInNldERpc3BsYXlUaWNrZXREYXRlIiwiaXNDaGFpbmVkRmlsdGVyIiwidGlja2V0c0NoYWluZWQiLCJib29sIiwiZmlsdGVyVGlja2V0RW50aXRpZXMiLCJzaG93IiwiaXNPblNhbGUiLCJpc1BlbmRpbmciLCJzb3J0VGlja2V0RW50aXRpZXNMaXN0IiwicGVyY2VudFNvbGRBdE9yQWJvdmUiLCJwZXJjZW50U29sZEJlbG93IiwiaXNBcmNoaXZlZCIsIm1heFF1YW50aXR5IiwidmFsaWRGaW5pdGVRdWFudGl0eSIsInZhbGlkSW5maW5pdGVRdWFudGl0eSIsInNlYXJjaFRpY2tldEVudGl0aWVzIiwid2l0aEZpbHRlcmVkVGlja2V0RW50aXRpZXMiLCJmaWx0ZXJlZFRpY2tldEVudGl0aWVzIiwid2l0aFRpY2tldEVudGl0aWVzRm9yRmlsdGVyZWREYXRlRW50aXRpZXMiLCJnZXRSZWxhdGlvbklkc0ZvckVudGl0eVJlbGF0aW9uIiwicmVsYXRlZERhdGVFbnRpdGllcyIsImludGVyc2VjdGlvbiIsImdldEZpbHRlcmVkVGlja2V0RW50aXRpZXNMaXN0Iiwic2VhcmNoVGlja2V0TmFtZSIsInNldFNlYXJjaFRpY2tldE5hbWUiLCJ0aWNrZXRzUGVyUGFnZSIsInNldFRpY2tldHNQZXJQYWdlIiwidGlja2V0c1ZpZXciLCJzZXRUaWNrZXRzTGlzdFZpZXciLCJzZXRUaWNrZXRzR3JpZFZpZXciLCJzZXRGaWx0ZXJlZFRpY2tldEVudGl0aWVzIiwidGlja2V0RW50aXR5SWRzIiwiRWRpdG9yVGlja2V0RGV0YWlscyIsInNob3dQcmljZSIsInJlZnJlc2hlZCIsImN1cnJlbnRQcmljZXMiLCJ0aWNrZXROYW1lIiwidGlja2V0RGVzY3JpcHRpb24iLCJ1cGRhdGVUaWNrZXRQcmljZSIsInRpY2tldFByaWNlIiwiZm9ybWF0dGVyIiwiZm9ybWF0TW9uZXkiLCJzZXR0aW5ncyIsInRpY2tldFNvbGRSZXNlcnZlZENhcGFjaXR5IiwiZ2V0VGlja2V0U3RhdHVzVGV4dExhYmVsIiwiVElDS0VUX1NUQVRVU19JRCIsIkVkaXRvclRpY2tldEVudGl0eUdyaWRJdGVtIiwidGlja2V0U3RhdHVzSUQiLCJFWFBJUkVEIiwiUEVORElORyIsInRpY2tldFN0YXR1cyIsImRpc3BsYXlUaWNrZXQiLCJ1c2VSZWR1Y2VyIiwicyIsIkVkaXRvclRpY2tldEVudGl0eUxpc3RJdGVtIiwiZ2V0VGlja2V0U3RhdHVzQ2xhc3MiLCJ0b1N0cmluZyIsInJlZ0NvdW50IiwicmVmcmVzaGVyIiwiVElDS0VUX1BSSUNFX0NBTENVTEFUT1JfRk9STV9JTlBVVF9QUkVGSVgiLCJidWlsZFRpY2tldERhdGFNYXAiLCJ0aWNrZXRJRCIsInRpY2tldElzVGF4YWJsZSIsInRpY2tldFRvdGFsIiwiZm9ybWF0TnVtYmVyIiwiYnVpbGRQcmljZXNEYXRhTWFwIiwicHJpY2VJRHMiLCJwcmljZVR5cGVzIiwicHJpY2VFbnRpdHkiLCJwcmljZUlkIiwic2hvcnRlbkN1aWQiLCJwcnRJZCIsInByaWNlUHJlZml4IiwidW5pcSIsImpvaW4iLCJjdWlkIiwiaGFzT3duUHJvcGVydHkiLCJzdWJzdHJpbmciLCJ0aWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtRGF0YU1hcCIsInJldmVyc2VDYWxjdWxhdGUiLCJCQVNFX1BSSUNFX1RZUEVTIiwicHJpY2VUeXBlTW9kZWwiLCJJbnB1dExhYmVsIiwiVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybSIsInByaWNlVHlwZU9wdGlvbnMiLCJwcmljZVR5cGVFbnRpdHkiLCJwcmljZVR5cGVJZCIsImxhc3QiLCJzaWduQjQiLCJzaWduIiwic2lnbkNsYXNzIiwic2lnbkNoYXJzIiwiaXNQZXJjZW50IiwicGVyY2VudFNpZ24iLCJjdXJyZW5jeVNpZ24iLCJ0aWNrZXRQcmVmaXgiLCJsYXN0Um93IiwiZ2V0UHJpY2VUeXBlIiwiZ2V0RGVmYXVsdFByaWNlVHlwZUlkIiwiQkFTRV9QUklDRSIsIm1vZGlmaWVyU2lnbiIsImFtb3VudENsYXNzIiwicGFyc2VNb25leVZhbHVlIiwicHJldmlvdXMiLCJwYXJzZUZsb2F0IiwiZ2V0TW9kaWZpZXJBY3Rpb25CdXR0b25zIiwiYWRkTW9kaWZpZXIiLCJhZGRQcmljZU1vZGlmaWVyIiwiZGVsZXRlTW9kaWZpZXIiLCJ0cmFzaFByaWNlTW9kaWZpZXIiLCJzZXRSZXZlcnNlQ2FsY3VsYXRlIiwiY2FsY0Rpckljb24iLCJjYWxjRGlyVGV4dCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJhbGxQcmljZVR5cGVPcHRpb25zIiwiYnVpbGRQcmljZVR5cGVPcHRpb25zIiwid2FybmluZ3MiLCJwcmljZUNvdW50Iiwic29ydGVkUHJpY2VzIiwib3B0aW9ucyIsInByaWNlTW9kaWZpZXJSb3ciLCJmb3JtSGVhZGVyIiwidGlja2V0VG90YWxSb3ciLCJUaWNrZXRQcmljZUNhbGN1bGF0b3JNZW51SXRlbSIsIm9uT3BlblRpY2tldENhbGN1bGF0b3IiLCJvbkNsb3NlVGlja2V0Q2FsY3VsYXRvciIsInNob3dDYWxjdWxhdG9yIiwidG9nZ2xlIiwidG9nZ2xlQWN0aW9uIiwiZmxvdyIsIm1vbmV5VmFsdWUiLCJyZXBsYWNlIiwiUmVnRXhwIiwidGhvdXNhbmRzU2VwYXJhdG9yIiwiaXNOYU4iLCJnZXRUaWNrZXRJZCIsImdldFRpY2tldFRvdGFsIiwidG90YWwiLCJjYWxjdWxhdGVUaWNrZXRUb3RhbEZyb21Nb2RpZmllcnMiLCJwcmljZU1vZGlmaWVycyIsImdldFByaWNlTW9kaWZpZXJzRnJvbUZvcm1EYXRhIiwidG9GaXhlZCIsImRlY2ltYWxQbGFjZXMiLCJnZXRCYXNlUHJpY2VGb3JtRmllbGRJRCIsImJhc2VQcmVmaXgiLCJzcGxpdCIsInByaWNlSUQiLCJiYXNlUHJpY2UiLCJjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2VGcm9tVG90YWwiLCJiYXNlUHJpY2VGb3JtRmllbGRJRCIsInByaWNlQW1vdW50IiwidXNlVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybURlY29yYXRvciIsImRlbGF5IiwiY2FsY3VsYXRlVGlja2V0VG90YWwiLCJ0b3RhbENoYW5nZWRUbyIsInNldFRvdGFsQ2hhbmdpbmdUbyIsIm11dGF0b3JDYWxsYmFja3MiLCJzZXRNdXRhdG9yQ2FsbGJhY2tzIiwiZGVib3VuY2VkVG90YWxDaGFuZ2VkVG8iLCJ1c2VEZWJvdW5jZSIsInRvdGFsTXV0YXRvciIsIm5ld1RvdGFsIiwiY2hhbmdlVmFsdWUiLCJkZWNvcmF0b3IiLCJjcmVhdGVEZWNvcmF0b3IiLCJwcmV2RGF0YSIsImNhbGN1bGF0ZVRpY2tldFByaWNlcyIsImZvcm1Ub3RhbCIsIm11dGF0b3JzIiwibm9ybWFsQ2FzZXMiLCJjdXJyZW50VG90YWwiLCJESVNDT1VOVCIsIlNVUkNIQVJHRSIsIlRBWCIsInJldmVyc2VDYXNlcyIsImdldEJhc2VQcmljZSIsIm1lbW9pemUiLCJwcmljZXMiLCJhY2NydWVBbW91bnQiLCJjYXNlcyIsImRlZmF1bHRDYXNlIiwidHlwZUlkIiwiZ2V0UHJpY2VUeXBlRm9yUHJpY2UiLCJwdCIsInVwZGF0ZUJhc2VQcmljZSIsInJldmVyc2UiLCJiYXNlUHJpY2VUb3RhbCIsImNhbGN1bGF0ZVRpY2tldFRvdGFscyIsIlRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1Nb2RhbCIsImV4dHJhUHJvcHMiLCJzZXRGb3JtRGF0YSIsIm5ld0Zvcm1EYXRhIiwidG90YWxzIiwibG9hZGluZyIsImZvcm1Qcm9wcyIsIndpdGhTdGF0ZSIsImZvcm1DaGFuZ2VzIiwiUFJDX29yZGVyIiwicHJpY2VNb2RpZmllciIsInNldFNob3dDYWxjdWxhdG9yIiwicHJldlNob3dDYWxjdWxhdG9yIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixvQkFBb0I7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLGFBQWE7QUFDcEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULDRCQUE0QjtBQUM1QixPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsVUFBVSxLQUFxQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixzQkFBc0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Yjs7QUFFQTs7Ozs7Ozs7Ozs7OztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7Ozs7QUFJYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUEsOENBQThDLGNBQWM7O0FBRTVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxzRkFBc0YsYUFBYTtBQUNuRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RkFBNEYsZUFBZTtBQUMzRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7Ozs7Ozs7Ozs7O0FDbE9hOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQztBQUNELG1CQUFtQixtQkFBTyxDQUFDLGtIQUErQjtBQUMxRDs7Ozs7Ozs7Ozs7OztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYyxhQUFvQjs7QUFFbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsV0FBVztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsV0FBVztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN0RBLGFBQWEsNkNBQTZDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBNUQsYUFBYSw2Q0FBNkMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0E1RCxhQUFhLDZDQUE2QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQTVELGFBQWEsK0JBQStCLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBOUMsYUFBYSwwQ0FBMEMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F6RCxhQUFhLHVDQUF1QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXRELGFBQWEsd0NBQXdDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBdkQsYUFBYSx1Q0FBdUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F0RCxhQUFhLHdDQUF3QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXZELGFBQWEsNkNBQTZDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBNUQsYUFBYSwrQ0FBK0MsRUFBRSxJOzs7Ozs7Ozs7OztBQ0E5RCxhQUFhLDJDQUEyQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQTFELGFBQWEsd0NBQXdDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBdkQsYUFBYSxxQ0FBcUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0FwRCxhQUFhLHdDQUF3QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXZELGFBQWEsc0NBQXNDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBckQsYUFBYSx5Q0FBeUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F4RCxhQUFhLG9DQUFvQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQW5ELGFBQWEsdURBQXVELEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBdEUsYUFBYSxpQ0FBaUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0FoRCxhQUFhLGdDQUFnQyxFQUFFLEkiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1lZGl0b3IuMWVkZGYwNDc4MmViOWNjZmQyY2UuZGlzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1lZGl0b3ItZGl2XCI6XCJlZS1lZGl0b3ItZGl2XCIsXCJjb21wb25lbnRzLXBhbmVsXCI6XCJjb21wb25lbnRzLXBhbmVsXCIsXCJlc3ByZXNzby1lZGl0b3ItbGVnZW5kLWRpdlwiOlwiZXNwcmVzc28tZWRpdG9yLWxlZ2VuZC1kaXZcIixcImVzcHJlc3NvLWVkaXRvci1sZWdlbmQtdWxcIjpcImVzcHJlc3NvLWVkaXRvci1sZWdlbmQtdWxcIixcImVzcHJlc3NvLWVkaXRvclwiOlwiZXNwcmVzc28tZWRpdG9yXCIsXCJlZS1mb3JtLXJvd1wiOlwiZWUtZm9ybS1yb3dcIixcImNvbXBvbmVudHMtcGFuZWxfX2JvZHlcIjpcImNvbXBvbmVudHMtcGFuZWxfX2JvZHlcIixcImVlLWVkaXRvci1ldmVudC1kYXRlcy1hbmQtdGlja2V0c1wiOlwiZWUtZWRpdG9yLWV2ZW50LWRhdGVzLWFuZC10aWNrZXRzXCIsXCJlZS1tZXRhYm94LWhlYWRpbmdcIjpcImVlLW1ldGFib3gtaGVhZGluZ1wiLFwiZGFzaGljb25cIjpcImRhc2hpY29uXCIsXCJjb21wb25lbnRzLW1vZGFsX19mcmFtZVwiOlwiY29tcG9uZW50cy1tb2RhbF9fZnJhbWVcIixcImNvbXBvbmVudHMtbW9kYWxfX2NvbnRlbnRcIjpcImNvbXBvbmVudHMtbW9kYWxfX2NvbnRlbnRcIixcImNvbXBvbmVudHMtbW9kYWxfX2hlYWRlci1oZWFkaW5nXCI6XCJjb21wb25lbnRzLW1vZGFsX19oZWFkZXItaGVhZGluZ1wiLFwiY29tcG9uZW50cy1wYW5lbF9fYm9keS10aXRsZVwiOlwiY29tcG9uZW50cy1wYW5lbF9fYm9keS10aXRsZVwiLFwicmR0T3BlblwiOlwicmR0T3BlblwiLFwicmR0UGlja2VyXCI6XCJyZHRQaWNrZXJcIixcInJkdE5leHRcIjpcInJkdE5leHRcIixcInJkdFByZXZcIjpcInJkdFByZXZcIixcInJkdFN3aXRjaFwiOlwicmR0U3dpdGNoXCIsXCJkb3dcIjpcImRvd1wiLFwicmR0TmV3XCI6XCJyZHROZXdcIixcInJkdE9sZFwiOlwicmR0T2xkXCIsXCJyZHRBY3RpdmVcIjpcInJkdEFjdGl2ZVwiLFwicmR0VG9kYXlcIjpcInJkdFRvZGF5XCIsXCJ0aW1lX3BpY2tlcl9jb250YWluZXJcIjpcInRpbWVfcGlja2VyX2NvbnRhaW5lclwiLFwibW9kYWxfY29udGFpbmVyXCI6XCJtb2RhbF9jb250YWluZXJcIixcInBsLTNcIjpcInBsLTNcIixcInB4LTNcIjpcInB4LTNcIixcInByLTNcIjpcInByLTNcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7XG5cdERhc2hpY29uLFxuXHRQYW5lbCxcblx0UGFuZWxCb2R5LFxuXHRQYW5lbFJvdyxcbn0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fLCBfeCwgc3ByaW50ZiB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHtcblx0RXNwcmVzc29JY29uLFxuXHRGb3JtQ29udGFpbmVyLFxuXHRGb3JtUGxhY2Vob2xkZXIsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICcuLi8uLi9lZGl0b3IuY3NzJztcbmltcG9ydCBFZGl0b3JEYXRlRW50aXRpZXNMaXN0XG5cdGZyb20gJy4uL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9lZGl0b3ItZGF0ZS1lbnRpdGllcy1saXN0JztcbmltcG9ydCBFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3Rcblx0ZnJvbSAnLi4vdGlja2V0cy9lZGl0b3ItdGlja2V0L2VkaXRvci10aWNrZXQtZW50aXRpZXMtbGlzdCc7XG5pbXBvcnQgd2l0aEVkaXRvckluaXRpYWxpemF0aW9uLCB7IHVzZUVkaXRvckluaXRpYWxpemVkIH0gZnJvbSAnLi4vaW5pdGlhbGl6YXRpb24nO1xuXG5jb25zdCBNZXRhQm94ID0gKCB7IGV2ZW50SWQgfSApID0+IHtcblx0Y29uc3QgaW5pdGlhbGl6ZWQgPSB1c2VFZGl0b3JJbml0aWFsaXplZCgpO1xuXHRyZXR1cm4gKFxuXHRcdDxGcmFnbWVudD5cblx0XHRcdDxGb3JtUGxhY2Vob2xkZXJcblx0XHRcdFx0bG9hZGluZz17IGZhbHNlIH1cblx0XHRcdFx0bm90aWNlPXsgc3ByaW50Zihcblx0XHRcdFx0XHRfeChcblx0XHRcdFx0XHRcdCdsb2FkaW5nIGV2ZW50IGRhdGVzIGFuZCBhdmFpbGFibGUgdGlja2V0cyVzJyxcblx0XHRcdFx0XHRcdCdsb2FkaW5nIGV2ZW50IGRhdGVzIGFuZCBhdmFpbGFibGUgdGlja2V0cy4uLicsXG5cdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCA4MjMwIClcblx0XHRcdFx0KSB9XG5cdFx0XHQvPlxuXHRcdFx0PEZvcm1Db250YWluZXJcblx0XHRcdFx0bG9hZGluZz17IGZhbHNlIH1cblx0XHRcdFx0aWQ9eyBgZWUtZWRpdG9yLWV2ZW50LWRhdGVzLWFuZC10aWNrZXRzLSR7IGV2ZW50SWQgfWAgfVxuXHRcdFx0XHRodG1sQ2xhc3M9XCJlZS1lZGl0b3ItZXZlbnQtZGF0ZXMtYW5kLXRpY2tldHNcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8aDEgY2xhc3NOYW1lPVwiZWUtbWV0YWJveC1oZWFkaW5nXCI+XG5cdFx0XHRcdFx0PEVzcHJlc3NvSWNvbiBpY29uPVwiY2FsZW5kYXJcIiAvPlxuXHRcdFx0XHRcdHsgX18oICdFdmVudCBEYXRlcycsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdDwvaDE+XG5cdFx0XHRcdDxQYW5lbD5cblx0XHRcdFx0XHQ8UGFuZWxCb2R5XG5cdFx0XHRcdFx0XHRpZD17IGBlZS1lZGl0b3ItZXZlbnQtZGF0ZXMtJHsgZXZlbnRJZCB9YCB9XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS1lZGl0b3ItZXZlbnQtZGF0ZXMgZXNwcmVzc28tZWRpdG9yXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8UGFuZWxSb3dcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtZWRpdG9yLWV2ZW50LWRhdGVzIGVlLWZvcm0tcm93XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PEVkaXRvckRhdGVFbnRpdGllc0xpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdGxvYWRpbmc9eyAhIGluaXRpYWxpemVkIH1cblx0XHRcdFx0XHRcdFx0XHRcdGZvcj1cImV2ZW50LWRhdGVzLW1ldGFib3hcIlxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9QYW5lbFJvdz5cblx0XHRcdFx0XHQ8L1BhbmVsQm9keT5cblx0XHRcdFx0PC9QYW5lbD5cblx0XHRcdFx0PGJyIC8+XG5cdFx0XHRcdDxoMSBjbGFzc05hbWU9XCJlZS1tZXRhYm94LWhlYWRpbmdcIj5cblx0XHRcdFx0XHQ8RGFzaGljb24gaWNvbj1cInRpY2tldHMtYWx0XCIgLz5cblx0XHRcdFx0XHR7IF9fKCAnQXZhaWxhYmxlIFRpY2tldHMnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2gxPlxuXHRcdFx0XHQ8UGFuZWw+XG5cdFx0XHRcdFx0PFBhbmVsQm9keVxuXHRcdFx0XHRcdFx0aWQ9eyBgZWUtZWRpdG9yLWV2ZW50LXRpY2tldHMtJHsgZXZlbnRJZCB9YCB9XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS1lZGl0b3ItZXZlbnQtdGlja2V0cyBlc3ByZXNzby1lZGl0b3JcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxQYW5lbFJvd1xuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS1lZGl0b3ItZXZlbnQtdGlja2V0cyBlZS1mb3JtLXJvd1wiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdGxvYWRpbmc9eyAhIGluaXRpYWxpemVkIH1cblx0XHRcdFx0XHRcdFx0XHRcdGZvcj1cImV2ZW50LXRpY2tldHMtbWV0YWJveFwiXG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L1BhbmVsUm93PlxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PlxuXHRcdFx0XHQ8L1BhbmVsPlxuXHRcdFx0XHQ8YnIgLz5cblx0XHRcdDwvRm9ybUNvbnRhaW5lcj5cblx0XHQ8L0ZyYWdtZW50PlxuXHQpO1xufTtcblxuY29uc3QgRGF0ZXNBbmRUaWNrZXRzTWV0YWJveCA9IHdpdGhFZGl0b3JJbml0aWFsaXphdGlvbiggTWV0YUJveCApO1xuXG5NZXRhQm94LnByb3BUeXBlcyA9IHtcblx0ZXZlbnRJZDogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlc0FuZFRpY2tldHNNZXRhYm94O1xuIiwiZXhwb3J0IHtcblx0ZGVmYXVsdCBhcyBFdmVudERhdGVzQW5kVGlja2V0c01ldGFib3gsXG59IGZyb20gJy4vZGF0ZXMtYW5kLXRpY2tldHMtbWV0YWJveCc7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhDb3B5RGF0ZUVudGl0eSB9IGZyb20gJy4vd2l0aC1jb3B5LWRhdGUtZW50aXR5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aFVwZGF0ZUV2ZW50RGF0ZVJlbGF0aW9uIH0gZnJvbSAnLi93aXRoLXVwZGF0ZS1ldmVudC1kYXRlLXJlbGF0aW9uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aFRyYXNoRGF0ZUVudGl0eSB9IGZyb20gJy4vd2l0aC10cmFzaC1kYXRlLWVudGl0eSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3aXRoRGlzcGF0Y2ggfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcblxuY29uc3Qgd2l0aENvcHlEYXRlRW50aXR5ID0gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdHdpdGhEaXNwYXRjaCggKFxuXHRcdGRpc3BhdGNoLFxuXHRcdHtcblx0XHRcdGV2ZW50RW50aXR5LFxuXHRcdFx0ZGF0ZUVudGl0eSxcblx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdH1cblx0KSA9PiB7XG5cdFx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBkYXRlRW50aXR5LCAnZGF0ZXRpbWUnICkgKSB7XG5cdFx0XHRyZXR1cm4geyBjb3B5RGF0ZUVudGl0eTogKCkgPT4gbnVsbCB9O1xuXHRcdH1cblx0XHRjb25zdCB7XG5cdFx0XHRjcmVhdGVFbnRpdHksXG5cdFx0XHRjcmVhdGVSZWxhdGlvbnMsXG5cdFx0fSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdGNvbnN0IGNvcHlEYXRlRW50aXR5ID0gYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgbmV3RGF0ZUVudGl0eSA9IGF3YWl0IGNyZWF0ZUVudGl0eShcblx0XHRcdFx0J2RhdGV0aW1lJyxcblx0XHRcdFx0ZGF0ZUVudGl0eS5mb3JDbG9uZVxuXHRcdFx0KTtcblx0XHRcdGlmICggISBpc0VtcHR5KCB0aWNrZXRFbnRpdGllcyApICkge1xuXHRcdFx0XHRjcmVhdGVSZWxhdGlvbnMoXG5cdFx0XHRcdFx0J2RhdGV0aW1lJyxcblx0XHRcdFx0XHRuZXdEYXRlRW50aXR5LmlkLFxuXHRcdFx0XHRcdCd0aWNrZXQnLFxuXHRcdFx0XHRcdHRpY2tldEVudGl0aWVzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjcmVhdGVSZWxhdGlvbnMoXG5cdFx0XHRcdCdldmVudCcsXG5cdFx0XHRcdGV2ZW50RW50aXR5LmlkLFxuXHRcdFx0XHQnZGF0ZXRpbWUnLFxuXHRcdFx0XHRbIG5ld0RhdGVFbnRpdHkgXVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBuZXdEYXRlRW50aXR5O1xuXHRcdH07XG5cdFx0cmV0dXJuIHsgY29weURhdGVFbnRpdHkgfTtcblx0fSApLFxuXHQnd2l0aENvcHlEYXRlRW50aXR5J1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aENvcHlEYXRlRW50aXR5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHdpdGhEaXNwYXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgZGF0ZVRpbWVNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbmNvbnN0IHdpdGhUcmFzaERhdGVFbnRpdHkgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0d2l0aERpc3BhdGNoKCAoIGRpc3BhdGNoLCB7IGRhdGVFbnRpdHkgfSApID0+IHtcblx0XHRjb25zdCB7IE1PREVMX05BTUU6IERBVEVUSU1FIH0gPSBkYXRlVGltZU1vZGVsO1xuXHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgREFURVRJTUUgKSApIHtcblx0XHRcdHJldHVybiB7IHRyYXNoRGF0ZUVudGl0eTogKCkgPT4gbnVsbCB9O1xuXHRcdH1cblx0XHRjb25zdCB7IHRyYXNoRW50aXR5QnlJZCB9ID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0Y29uc3QgdHJhc2hEYXRlRW50aXR5ID0gKCkgPT4ge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFsZXJ0XG5cdFx0XHRpZiAoICEgd2luZG93LmNvbmZpcm0oXG5cdFx0XHRcdF9fKFxuXHRcdFx0XHRcdCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgZGF0ZT8nLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0KVxuXHRcdFx0KSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dHJhc2hFbnRpdHlCeUlkKCBEQVRFVElNRSwgZGF0ZUVudGl0eS5pZCApO1xuXHRcdH07XG5cdFx0cmV0dXJuIHsgdHJhc2hEYXRlRW50aXR5IH07XG5cdH0gKSxcblx0J3dpdGhUcmFzaERhdGVFbnRpdHknXG4pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoVHJhc2hEYXRlRW50aXR5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBkYXRlVGltZU1vZGVsLCBldmVudE1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7IHdpdGhEaXNwYXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCwgY29tcG9zZSB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmltcG9ydCB7IHdpdGhFZGl0b3JFdmVudEVudGl0eSB9IGZyb20gJy4uLy4uLy4uL2hvY3MnO1xuXG5jb25zdCB7IE1PREVMX05BTUU6IERBVEVUSU1FIH0gPSBkYXRlVGltZU1vZGVsO1xuY29uc3QgeyBNT0RFTF9OQU1FOiBFVkVOVCB9ID0gZXZlbnRNb2RlbDtcblxuY29uc3Qgd2l0aFVwZGF0ZUV2ZW50RGF0ZVJlbGF0aW9uID0gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoRWRpdG9yRXZlbnRFbnRpdHksXG5cdFx0d2l0aERpc3BhdGNoKFxuXHRcdFx0KCBkaXNwYXRjaCwgeyBldmVudEVudGl0eSB9ICkgPT4ge1xuXHRcdFx0XHRjb25zdCB1cGRhdGVFdmVudERhdGVSZWxhdGlvbiA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0XHRcdFx0XHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIGV2ZW50RW50aXR5LCBFVkVOVCApICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRfXyggJ1VuYWJsZSB0byBwcm9jZXNzIHRoZSBFdmVudCBEYXRlIEVudGl0eSBmb3JtIGJlY2F1c2UgYW4nICtcblx0XHRcdFx0XHRcdFx0XHQnIGludmFsaWQgRXZlbnQgRW50aXR5IHdhcyBzdXBwbGllZC4gJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIGRhdGVFbnRpdHksIERBVEVUSU1FICkgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdF9fKCAnVW5hYmxlIHRvIHByb2Nlc3MgdGhlIEV2ZW50IERhdGUgRW50aXR5IGZvcm0gYmVjYXVzZSBhbicgK1xuXHRcdFx0XHRcdFx0XHRcdCcgaW52YWxpZCBEYXRlIEVudGl0eSB3YXMgc3VwcGxpZWQuICcsICdldmVudF9lc3ByZXNzbycgKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgeyBjcmVhdGVSZWxhdGlvbiB9ID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0XHRcdFx0Y3JlYXRlUmVsYXRpb24oXG5cdFx0XHRcdFx0XHRFVkVOVCxcblx0XHRcdFx0XHRcdGV2ZW50RW50aXR5LmlkLFxuXHRcdFx0XHRcdFx0REFURVRJTUUsXG5cdFx0XHRcdFx0XHRkYXRlRW50aXR5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIHsgdXBkYXRlRXZlbnREYXRlUmVsYXRpb24gfTtcblx0XHRcdH1cblx0XHQpLFxuXHRdICksXG5cdCd3aXRoVXBkYXRlRXZlbnREYXRlUmVsYXRpb24nXG4pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoVXBkYXRlRXZlbnREYXRlUmVsYXRpb247XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgYXBwbHlGaWx0ZXJzIH0gZnJvbSAnQHdvcmRwcmVzcy9ob29rcyc7XG5pbXBvcnQge1xuXHREcm9wRG93bk1lbnUsXG5cdEVudGl0eUFjdGlvbk1lbnVJdGVtLFxuXHRJY29uTWVudUl0ZW0sXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18sIHNwcmludGYsIF94IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyB3aXRoRWRpdG9yIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWRpdG9yLWhvY3MnO1xuaW1wb3J0IHsgZGF0ZVRpbWVNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHdpdGhFZGl0b3JEYXRlVGlja2V0RW50aXRpZXMgfSBmcm9tICcuLi8uLi8uLi9ob2NzJztcbmltcG9ydCB7IERhdGVFbnRpdHlGb3JtTW9kYWwgfSBmcm9tICcuLi9lZGl0LWZvcm0nO1xuaW1wb3J0IHsgd2l0aENvcHlEYXRlRW50aXR5LCB3aXRoVHJhc2hEYXRlRW50aXR5IH0gZnJvbSAnLi4vYWN0aW9uLWhhbmRsZXJzJztcbmltcG9ydCB7IHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCB9IGZyb20gJy4uLy4uLy4uL3RpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyJztcbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG5jb25zdCB7IE1PREVMX05BTUU6IERBVEVUSU1FIH0gPSBkYXRlVGltZU1vZGVsO1xuY29uc3QgREVGQVVMVF9FTVBUWV9BUlJBWSA9IFtdO1xuXG4vKipcbiAqIEVkaXRvckRhdGVFbnRpdHlBY3Rpb25zTWVudVxuICogbWVudSBvZiBJY29uQnV0dG9ucyBmb3IgcGVyZm9ybWluZyBhY3Rpb25zIG9uIHRoZSBzdXBwbGllZCBFdmVudCBEYXRlXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGRhdGVFbnRpdHkgRGF0ZXRpbWUgZW50aXR5IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIG1lbnVcbiAqL1xuY2xhc3MgRWRpdG9yRGF0ZUVudGl0eUFjdGlvbnNNZW51IGV4dGVuZHMgQ29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGRhdGVFbnRpdHkgICAgXHQgRGF0ZXRpbWUgQmFzZUVudGl0eSBpbnN0YW5jZVxuXHQgKiBAcmV0dXJuIHtEcm9wRG93bk1lbnV9ICAgIFx0XHQgRWRpdCBFdmVudCBEYXRlIERyb3BEb3duTWVudVxuXHQgKi9cblx0bWFpbkRyb3BEb3duTWVudSA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PERyb3BEb3duTWVudVxuXHRcdFx0XHR0b29sdGlwPXsgX18oICdldmVudCBkYXRlIG1haW4gbWVudScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxDbGFzcz17IGBlZGl0b3ItZGF0ZS0keyBkYXRlRW50aXR5LmlkIH1gIH1cblx0XHRcdFx0bWVudUl0ZW1zPXsgW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHRpdGxlOiBfXyggJ2VkaXQgZGF0ZScsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHRcdGljb246ICdlZGl0Jyxcblx0XHRcdFx0XHRcdG9uQ2xpY2s6IHRoaXMucHJvcHMudG9nZ2xlRWRpdG9yLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dGl0bGU6IF9fKCAnY29weSBkYXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdFx0aWNvbjogJ2FkbWluLXBhZ2UnLFxuXHRcdFx0XHRcdFx0b25DbGljazogdGhpcy5wcm9wcy5jb3B5RGF0ZUVudGl0eSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHRpdGxlOiBfXyggJ3RyYXNoIGRhdGUnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdFx0XHRpY29uOiAndHJhc2gnLFxuXHRcdFx0XHRcdFx0b25DbGljazogdGhpcy5wcm9wcy50cmFzaERhdGVFbnRpdHksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBKU09OIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZVxuXHQgKiBAcmV0dXJuIHtJY29uTWVudUl0ZW19ICAgIEVkaXQgRXZlbnQgRGF0ZSBJY29uTWVudUl0ZW1cblx0ICovXG5cdGVkaXREYXRlTWVudUl0ZW0gPSAoIGRhdGVFbnRpdHkgKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxJY29uTWVudUl0ZW1cblx0XHRcdFx0aW5kZXg9eyAxIH1cblx0XHRcdFx0dG9vbHRpcD17IF9fKCAnZWRpdCBkYXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0aWQ9eyBgZWRpdC1kYXRlLSR7IGRhdGVFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRodG1sQ2xhc3M9XCJlZGl0LWRhdGVcIlxuXHRcdFx0XHRkYXNoaWNvbj1cImVkaXRcIlxuXHRcdFx0XHRvbkNsaWNrPXsgdGhpcy5wcm9wcy50b2dnbGVFZGl0b3IgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgSlNPTiBvYmplY3QgZGVmaW5pbmcgdGhlIEV2ZW50IERhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gdGlja2V0RW50aXRpZXMgICAgVGlja2V0cyBmb3IgRXZlbnQgRGF0ZVxuXHQgKiBAcmV0dXJuIHtJY29uTWVudUl0ZW19ICAgIFZpZXcgVGlja2V0cyBmb3IgRXZlbnQgRGF0ZSBJY29uTWVudUl0ZW1cblx0ICovXG5cdHZpZXdUaWNrZXRzTWVudUl0ZW0gPSAoIGRhdGVFbnRpdHksIHRpY2tldEVudGl0aWVzICkgPT4ge1xuXHRcdGNvbnN0IHRvb2x0aXAgPSBpc0VtcHR5KCB0aWNrZXRFbnRpdGllcyApID9cblx0XHRcdF9fKFxuXHRcdFx0XHQnd2FybmluZyEgbm8gYXNzaWduZWQgdGlja2V0cyAtIGNsaWNrIHRvIGZpeCcsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdCkgOlxuXHRcdFx0X18oICdhc3NpZ24gdGlja2V0cycsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEljb25NZW51SXRlbVxuXHRcdFx0XHRpbmRleD17IDIgfVxuXHRcdFx0XHR0b29sdGlwPXsgdG9vbHRpcCB9XG5cdFx0XHRcdGlkPXsgYHZpZXctdGlja2V0cy1kYXRlLSR7IGRhdGVFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRodG1sQ2xhc3M9XCJ2aWV3LXRpY2tldHMtZGF0ZVwiXG5cdFx0XHRcdGRhc2hpY29uPVwidGlja2V0cy1hbHRcIlxuXHRcdFx0XHRvbkNsaWNrPXsgdGhpcy5wcm9wcy50b2dnbGVUaWNrZXRBc3NpZ25tZW50cyB9XG5cdFx0XHRcdGl0ZW1Db3VudD17IHRpY2tldEVudGl0aWVzLmxlbmd0aCB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBcdCBKU09OIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSB0aWNrZXRFbnRpdGllcyAgICBUaWNrZXRzIGZvciBFdmVudCBEYXRlXG5cdCAqIEByZXR1cm4ge0FycmF5fSAgICBcdFx0XHRcdCBBcnJheSBvZiBJY29uTWVudUl0ZW0gb2JqZWN0c1xuXHQgKi9cblx0Z2V0U2lkZWJhck1lbnVJdGVtcyA9ICggZGF0ZUVudGl0eSwgdGlja2V0RW50aXRpZXMgKSA9PiB7XG5cdFx0Y29uc3Qgc2lkZWJhck1lbnVJdGVtcyA9IFtdO1xuXHRcdHNpZGViYXJNZW51SXRlbXMucHVzaChcblx0XHRcdHRoaXMubWFpbkRyb3BEb3duTWVudSggZGF0ZUVudGl0eSApXG5cdFx0KTtcblx0XHRzaWRlYmFyTWVudUl0ZW1zLnB1c2goIHRoaXMuZWRpdERhdGVNZW51SXRlbSggZGF0ZUVudGl0eSApICk7XG5cdFx0c2lkZWJhck1lbnVJdGVtcy5wdXNoKFxuXHRcdFx0dGhpcy52aWV3VGlja2V0c01lbnVJdGVtKCBkYXRlRW50aXR5LCB0aWNrZXRFbnRpdGllcyApXG5cdFx0KTtcblx0XHRyZXR1cm4gYXBwbHlGaWx0ZXJzKFxuXHRcdFx0J0ZIRUVfX0VkaXRvckRhdGVFbnRpdHlBY3Rpb25zTWVudV9fU2lkZWJhck1lbnVJdGVtcycsXG5cdFx0XHRzaWRlYmFyTWVudUl0ZW1zLFxuXHRcdFx0ZGF0ZUVudGl0eVxuXHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBcdEpTT04gb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG5cdCAqIEBwYXJhbSB7QXJyYXl9IHRpY2tldEVudGl0aWVzIFx0VGlja2V0cyBmb3IgRXZlbnQgRGF0ZVxuXHQgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgb2YgcmVuZGVyZWQgSWNvbk1lbnVJdGVtIGxpc3QgaXRlbXNcblx0ICovXG5cdHNpZGViYXJNZW51ID0gKCBkYXRlRW50aXR5LCB0aWNrZXRFbnRpdGllcyApID0+IHtcblx0XHRjb25zdCBzaWRlYmFyTWVudUl0ZW1zID0gdGhpcy5nZXRTaWRlYmFyTWVudUl0ZW1zKFxuXHRcdFx0ZGF0ZUVudGl0eSxcblx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHNpZGViYXJNZW51SXRlbXMubWFwKFxuXHRcdFx0ZnVuY3Rpb24oIHNpZGViYXJNZW51SXRlbSwgaW5kZXggKSB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0c2lkZWJhck1lbnVJdGVtICYmIHNpZGViYXJNZW51SXRlbS50eXBlICYmXG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0c2lkZWJhck1lbnVJdGVtLnR5cGUgPT09IERyb3BEb3duTWVudSB8fFxuXHRcdFx0XHRcdFx0c2lkZWJhck1lbnVJdGVtLnR5cGUgPT09IEVudGl0eUFjdGlvbk1lbnVJdGVtIHx8XG5cdFx0XHRcdFx0XHRzaWRlYmFyTWVudUl0ZW0udHlwZSA9PT0gSWNvbk1lbnVJdGVtXG5cdFx0XHRcdFx0KSA/XG5cdFx0XHRcdFx0XHQ8RnJhZ21lbnQga2V5PXsgaW5kZXggfT5cblx0XHRcdFx0XHRcdFx0eyBzaWRlYmFyTWVudUl0ZW0gfVxuXHRcdFx0XHRcdFx0PC9GcmFnbWVudD4gOlxuXHRcdFx0XHRcdFx0bnVsbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHQpO1xuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRldmVudEVudGl0eSxcblx0XHRcdGRhdGVFbnRpdHksXG5cdFx0XHRlZGl0b3JPcGVuLFxuXHRcdFx0dG9nZ2xlRWRpdG9yLFxuXHRcdFx0dGlja2V0RW50aXRpZXMgPSBERUZBVUxUX0VNUFRZX0FSUkFZLFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgREFURVRJTUUgKSApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF0ZUVudGl0eSAmJiBkYXRlRW50aXR5LmlkID8gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRpZD17IGBlZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnUtJHsgZGF0ZUVudGl0eS5pZCB9YCB9XG5cdFx0XHRcdGNsYXNzTmFtZT17ICdlZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnUnIH1cblx0XHRcdD5cblx0XHRcdFx0eyB0aGlzLnNpZGViYXJNZW51KCBkYXRlRW50aXR5LCB0aWNrZXRFbnRpdGllcyApIH1cblx0XHRcdFx0PERhdGVFbnRpdHlGb3JtTW9kYWxcblx0XHRcdFx0XHRldmVudEVudGl0eT17IGV2ZW50RW50aXR5IH1cblx0XHRcdFx0XHRkYXRlRW50aXR5PXsgZGF0ZUVudGl0eSB9XG5cdFx0XHRcdFx0dG9nZ2xlRWRpdG9yPXsgdG9nZ2xlRWRpdG9yIH1cblx0XHRcdFx0XHRlZGl0b3JPcGVuPXsgZWRpdG9yT3BlbiB9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpIDogbnVsbDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKCBbXG5cdHdpdGhFZGl0b3IsXG5cdHdpdGhFZGl0b3JEYXRlVGlja2V0RW50aXRpZXMsXG5cdHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbChcblx0XHQoIHsgZGF0ZUVudGl0eSB9ICkgPT4gKCB7XG5cdFx0XHR0aXRsZTogc3ByaW50Zihcblx0XHRcdFx0X3goXG5cdFx0XHRcdFx0J1RpY2tldCBBc3NpZ25tZW50cyBmb3I6ICUxJHMnLFxuXHRcdFx0XHRcdCdUaWNrZXQgQXNzaWdubWVudHMgZm9yOiBEYXRlICYgZGF0ZSBuYW1lJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdCksXG5cdFx0XHRcdGAkeyBkYXRlRW50aXR5Lm5hbWUgfSAoJHtcblx0XHRcdFx0XHRkYXRlRW50aXR5LnN0YXJ0LnRvRm9ybWF0KCAnZGRkIE1NTSBERCwgWVlZWScgKVxuXHRcdFx0XHR9KWBcblx0XHRcdCksXG5cdFx0XHRjbG9zZUJ1dHRvbkxhYmVsOiBudWxsLFxuXHRcdH0gKVxuXHQpLFxuXHR3aXRoQ29weURhdGVFbnRpdHksXG5cdHdpdGhUcmFzaERhdGVFbnRpdHksXG5dICkoIEVkaXRvckRhdGVFbnRpdHlBY3Rpb25zTWVudSApO1xuIiwiZXhwb3J0IHtcblx0ZGVmYXVsdCBhcyBFZGl0b3JEYXRlRW50aXR5QWN0aW9uc01lbnUsXG59IGZyb20gJy4vZWRpdG9yLWRhdGUtZW50aXR5LWFjdGlvbnMtbWVudSc7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZWRpdG9yLWRhdGUtYWN0aW9ucy1tZW51XCI6XCJlZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnVcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGluZGV4T2YgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IHZhbGlkYXRpb25zIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBkYXRlVGltZU1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVudGl0eUlkIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5cbmNvbnN0IHsgTU9ERUxfTkFNRTogREFURVRJTUUgfSA9IGRhdGVUaW1lTW9kZWw7XG5cbi8qKlxuICogZGF0ZUVudGl0eUZvcm1JbnB1dHNcbiAqIHJldHVybnMgYW4gYXJyYXkgb2YgaW5wdXRzIGNvcnJlc3BvbmRpbmcgdG9cbiAqIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBFdmVudCBEYXRlIEVudGl0eVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgIEVFIERhdGUgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5fSBleGNsdWRlICBBcnJheSBvZiBmaWVsZCBuYW1lcyB0byBub3QgZGlzcGxheSBpbnB1dHMgZm9yXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIGlucHV0IHZhbHVlc1xuICogQHBhcmFtIHtPYmplY3R9IEZvcm1JbnB1dCBJbnB1dCBvYmplY3QgdG8gdXNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGZvcm1cbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGVFbnRpdHlGb3JtSW5wdXRzID0gKFxuXHRkYXRlRW50aXR5LFxuXHRleGNsdWRlID0gW10sXG5cdHZhbHVlcyA9IHt9LFxuXHRGb3JtSW5wdXQsXG4pID0+IHtcblx0Y29uc3QgaW5wdXRzID0gW107XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgREFURVRJTUUgKSApIHtcblx0XHRyZXR1cm4gaW5wdXRzO1xuXHR9XG5cdGNvbnN0IHByZWZpeCA9IGBlZS1ldmVudC1kYXRlLSR7IGRhdGVFbnRpdHkuaWQgfWA7XG5cdGlmICggbm9ybWFsaXplRW50aXR5SWQoIGRhdGVFbnRpdHkuaWQgKSAmJiBpbmRleE9mKCBleGNsdWRlLCAnRFRUX0lEJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwiaWRcIlxuXHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdG5hbWU9eyBgJHsgcHJlZml4IH0taWRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0taWRgIF0gfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnRGF0ZSBJRCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1pZGAgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMyB9XG5cdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdGRpc2FibGVkXG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ0VWVF9JRCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImV2ZW50XCJcblx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LWV2ZW50LWlkYCB9XG5cdFx0XHRcdGluaXRpYWxWYWx1ZT17IHZhbHVlc1sgYCR7IHByZWZpeCB9LWV2ZW50LWlkYCBdIHx8IDAgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnRXZlbnQgSUQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tZXZlbnQtaWRgIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDMgfVxuXHRcdFx0XHRyZXF1aXJlZFxuXHRcdFx0XHRkaXNhYmxlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICduYW1lJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwibmFtZVwiXG5cdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1uYW1lYCB9XG5cdFx0XHRcdGluaXRpYWxWYWx1ZT17IHZhbHVlc1sgYCR7IHByZWZpeCB9LW5hbWVgIF0gfHwgJycgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnRGF0ZSBMYWJlbCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1uYW1lYCB9XG5cdFx0XHRcdG1pbkxlbmd0aD17IDMgfVxuXHRcdFx0XHRyZXF1aXJlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdkZXNjcmlwdGlvbicgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0dHlwZT1cInRleHRhcmVhXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgXSB8fCAnJyB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdEZXNjcmlwdGlvbicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdzdGFydCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cInN0YXJ0XCJcblx0XHRcdFx0dHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1zdGFydGAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1zdGFydGAgXSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdTdGFydCBUaW1lJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LXN0YXJ0YCB9XG5cdFx0XHRcdHZhbGlkYXRpb25zPXsgdmFsaWRhdGlvbnMucmVxdWlyZWQgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgNiB9XG5cdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ2VuZCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImVuZFwiXG5cdFx0XHRcdHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG5cdFx0XHRcdG5hbWU9eyBgJHsgcHJlZml4IH0tZW5kYCB9XG5cdFx0XHRcdGluaXRpYWxWYWx1ZT17IHZhbHVlc1sgYCR7IHByZWZpeCB9LWVuZGAgXSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdFbmQgVGltZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1lbmRgIH1cblx0XHRcdFx0dmFsaWRhdGlvbnM9eyB2YWxpZGF0aW9ucy5yZXF1aXJlZCB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyA2IH1cblx0XHRcdFx0cmVxdWlyZWRcblx0XHRcdC8+LFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpbmRleE9mKCBleGNsdWRlLCAncmVnTGltaXQnICkgPCAwICkge1xuXHRcdGlucHV0cy5wdXNoKFxuXHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRrZXk9XCJyZWdMaW1pdFwiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXJlZy1saW1pdGAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1yZWctbGltaXRgIF0gfHwgSW5maW5pdHkgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnQ2FwYWNpdHknLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tcmVnLWxpbWl0YCB9XG5cdFx0XHRcdGhlbHBUZXh0PXsgX18oXG5cdFx0XHRcdFx0J1RoZSBtYXhpbXVtIG51bWJlciBvZiByZWdpc3RyYW50cycgK1xuXHRcdFx0XHRcdCcgdGhhdCBjYW4gYXR0ZW5kIHRoZSBldmVudCBhdCB0aGlzJyArXG5cdFx0XHRcdFx0JyBwYXJ0aWN1bGFyIGRhdGUuIExlYXZlIGJsYW5rIGZvciBubyBsaW1pdC4nLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMyB9XG5cdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdzb2xkJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwic29sZFwiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXNvbGRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tc29sZGAgXSB8fCAwIH1cblx0XHRcdFx0bGFiZWw9eyBfXyggJ1NvbGQgQ291bnQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tc29sZGAgfVxuXHRcdFx0XHRoZWxwVGV4dD17IF9fKFxuXHRcdFx0XHRcdCdRdWFudGl0eSBvZiB0aWNrZXRzIHRoYXQgaGF2ZSBiZWVuJyArXG5cdFx0XHRcdFx0JyBzb2xkIGZvciB0aGlzIERhdGUnLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMyB9XG5cdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdyZXNlcnZlZCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cInJlc2VydmVkXCJcblx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdG5hbWU9eyBgJHsgcHJlZml4IH0tcmVzZXJ2ZWRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tcmVzZXJ2ZWRgIF0gfHwgMCB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdSZXNlcnZlZCBDb3VudCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1yZXNlcnZlZGAgfVxuXHRcdFx0XHRoZWxwVGV4dD17IF9fKFxuXHRcdFx0XHRcdCdRdWFudGl0eSBvZiB0aWNrZXRzIHJlc2VydmVkLCcgK1xuXHRcdFx0XHRcdCcgYnV0IG5vdCB5ZXQgZnVsbHkgcHVyY2hhc2VkJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDMgfVxuXHRcdFx0XHRtaW49eyAwIH1cblx0XHRcdC8+LFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpbmRleE9mKCBleGNsdWRlLCAnb3JkZXInICkgPCAwICkge1xuXHRcdGlucHV0cy5wdXNoKFxuXHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRrZXk9XCJvcmRlclwiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LW9yZGVyYCB9XG5cdFx0XHRcdGluaXRpYWxWYWx1ZT17IHZhbHVlc1sgYCR7IHByZWZpeCB9LW9yZGVyYCBdIHx8IDAgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnRGlzcGxheSBPcmRlcicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1vcmRlcmAgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMiB9XG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ3BhcmVudCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cInBhcmVudFwiXG5cdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1wYXJlbnRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tcGFyZW50YCBdIHx8IDAgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnUGFyZW50IERhdGUnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tcGFyZW50YCB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAyIH1cblx0XHRcdC8+LFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpbmRleE9mKCBleGNsdWRlLCAnZGVsZXRlZCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImRlbGV0ZWRcIlxuXHRcdFx0XHR0eXBlPVwidG9nZ2xlXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1kZWxldGVkYCB9XG5cdFx0XHRcdGluaXRpYWxWYWx1ZT17IHZhbHVlc1sgYCR7IHByZWZpeCB9LWRlbGV0ZWRgIF0gfHwgZmFsc2UgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnQXJjaGl2ZWQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tZGVsZXRlZGAgfVxuXHRcdFx0XHRoZWxwVGV4dElmQ2hlY2tlZD17IF9fKFxuXHRcdFx0XHRcdCd0aGlzIGV2ZW50IGRhdGUgaXMgYXJjaGl2ZWQnLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRoZWxwVGV4dElmTm90Q2hlY2tlZD17IF9fKFxuXHRcdFx0XHRcdCd0aGlzIGV2ZW50IGRhdGUgaXMgTk9UIGFyY2hpdmVkJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDIgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gaW5wdXRzO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyB3aXRoRWRpdG9yTW9kYWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZGl0b3ItaG9jcyc7XG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhEaXNwYXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgRGF0ZUVudGl0eUZvcm0gZnJvbSAnLi9kYXRlLWVudGl0eS1mb3JtJztcbmltcG9ydCB7IGRhdGVFbnRpdHlGb3JtU2NoZW1hIH0gZnJvbSAnLi9kYXRlLWVudGl0eS1mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBkYXRlRW50aXR5Rm9ybVN1Ym1pdEhhbmRsZXIgfSBmcm9tICcuL2RhdGUtZW50aXR5LWZvcm0tc3VibWl0LWhhbmRsZXInO1xuaW1wb3J0IHdpdGhVcGRhdGVFdmVudERhdGVSZWxhdGlvbiBmcm9tICcuLi9hY3Rpb24taGFuZGxlcnMvd2l0aC11cGRhdGUtZXZlbnQtZGF0ZS1yZWxhdGlvbic7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSBtb2RlbCBvYmplY3QgZGVmaW5pbmcgdGhlIEV2ZW50IERhdGVcbiAqL1xuY2xhc3MgRGF0ZUVudGl0eUZvcm1Nb2RhbCBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0ZGF0ZUVudGl0eTogUHJvcFR5cGVzLm9iamVjdCxcblx0XHR0b2dnbGVFZGl0b3I6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0bG9hZEhhbmRsZXI6IFByb3BUeXBlcy5mdW5jLFxuXHRcdHN1Ym1pdEhhbmRsZXI6IFByb3BUeXBlcy5mdW5jLFxuXHRcdHJlc2V0SGFuZGxlcjogUHJvcFR5cGVzLmZ1bmMsXG5cdH07XG5cblx0Y29uc3RydWN0b3IoIHByb3BzICkge1xuXHRcdHN1cGVyKCBwcm9wcyApO1xuXHRcdHRoaXMuc3RhdGUgPSB7XG5cdFx0XHRkYXRlRW50aXR5OiBpc01vZGVsRW50aXR5T2ZNb2RlbCggcHJvcHMuZGF0ZUVudGl0eSwgJ2RhdGV0aW1lJyApID9cblx0XHRcdFx0cHJvcHMuZGF0ZUVudGl0eS5jbG9uZSggdHJ1ZSApIDpcblx0XHRcdFx0e30sXG5cdFx0XHRvcmlnaW5hbERhdGVFbnRpdHk6IHByb3BzLmRhdGVFbnRpdHkgPyBwcm9wcy5kYXRlRW50aXR5IDoge30sXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHJldHVybiB7T2JqZWN0fSBkYXRhXG5cdCAqL1xuXHRsb2FkSGFuZGxlciA9ICgpID0+IHtcblx0XHRyZXR1cm4gZGF0ZUVudGl0eUZvcm1TY2hlbWEoIHRoaXMuc3RhdGUuZGF0ZUVudGl0eSApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGFcblx0ICovXG5cdHN1Ym1pdEhhbmRsZXIgPSAoIGRhdGEgKSA9PiB7XG5cdFx0ZGF0ZUVudGl0eUZvcm1TdWJtaXRIYW5kbGVyKFxuXHRcdFx0dGhpcy5zdGF0ZS5kYXRlRW50aXR5LFxuXHRcdFx0ZGF0YVxuXHRcdCk7XG5cdFx0dGhpcy5wcm9wcy5yZXBsYWNlRGF0ZUluU3RvcmUoIHRoaXMuc3RhdGUuZGF0ZUVudGl0eSApO1xuXHRcdHRoaXMucHJvcHMudG9nZ2xlRWRpdG9yKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKi9cblx0cmVzZXRIYW5kbGVyID0gKCkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoIHsgZGF0ZUVudGl0eTogdGhpcy5zdGF0ZS5vcmlnaW5hbERhdGVFbnRpdHkuY2xvbmUoIHRydWUgKSB9ICk7XG5cdFx0dGhpcy5wcm9wcy50b2dnbGVFZGl0b3IoKTtcblx0fTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxEYXRlRW50aXR5Rm9ybVxuXHRcdFx0XHR7IC4uLnRoaXMucHJvcHMgfVxuXHRcdFx0XHRsb2FkSGFuZGxlcj17IHRoaXMubG9hZEhhbmRsZXIgfVxuXHRcdFx0XHRzdWJtaXRIYW5kbGVyPXsgdGhpcy5zdWJtaXRIYW5kbGVyIH1cblx0XHRcdFx0cmVzZXRIYW5kbGVyPXsgdGhpcy5yZXNldEhhbmRsZXIgfVxuXHRcdFx0XHRkYXRlRW50aXR5PXsgdGhpcy5zdGF0ZS5kYXRlRW50aXR5IH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKCBbXG5cdHdpdGhFZGl0b3JNb2RhbCgge1xuXHRcdHRpdGxlOiBfXyggJ0V2ZW50IERhdGUgRWRpdG9yJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdGN1c3RvbUNsYXNzOiAnZWUtZXZlbnQtZGF0ZS1lZGl0b3ItbW9kYWwnLFxuXHRcdGNsb3NlQnV0dG9uTGFiZWw6IF9fKCAnY2xvc2UgZXZlbnQgZGF0ZSBlZGl0b3InLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdH0gKSxcblx0d2l0aFVwZGF0ZUV2ZW50RGF0ZVJlbGF0aW9uLFxuXHR3aXRoRGlzcGF0Y2goICggZGlzcGF0Y2gsIHsgdXBkYXRlRXZlbnREYXRlUmVsYXRpb24gfSApID0+IHtcblx0XHRjb25zdCB7IHJlY2VpdmVBbmRSZXBsYWNlRW50aXR5UmVjb3JkcyB9ID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0Y29uc3QgcmVwbGFjZURhdGVJblN0b3JlID0gKCByZXBsYWNlRGF0ZSApID0+IHtcblx0XHRcdHJlY2VpdmVBbmRSZXBsYWNlRW50aXR5UmVjb3JkcyggJ2RhdGV0aW1lJywgWyByZXBsYWNlRGF0ZSBdICk7XG5cdFx0XHR1cGRhdGVFdmVudERhdGVSZWxhdGlvbiggcmVwbGFjZURhdGUgKTtcblx0XHR9O1xuXHRcdHJldHVybiB7IHJlcGxhY2VEYXRlSW5TdG9yZSB9O1xuXHR9ICksXG5dICkoIERhdGVFbnRpdHlGb3JtTW9kYWwgKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIHJldHVybnMgYW4gb2JqZWN0IG1hcHBpbmdcbiAqIEV2ZW50IERhdGUgRW50aXR5IHByb3BlcnRpZXNcbiAqIHRvIGZvcm0gcHJlZml4ZXNcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICBFRSBEYXRlIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBmb3JtXG4gKi9cbmV4cG9ydCBjb25zdCBkYXRlRW50aXR5Rm9ybVNjaGVtYSA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBkYXRlRW50aXR5LCAnZGF0ZXRpbWUnICkgKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGNvbnN0IHByZWZpeCA9IGBlZS1ldmVudC1kYXRlLSR7IGRhdGVFbnRpdHkuaWQgfWA7XG5cdHJldHVybiB7XG5cdFx0WyBgJHsgcHJlZml4IH0taWRgIF06IGRhdGVFbnRpdHkuaWQsXG5cdFx0WyBgJHsgcHJlZml4IH0tZXZlbnQtaWRgIF06IGRhdGVFbnRpdHkuRVZUX0lELFxuXHRcdFsgYCR7IHByZWZpeCB9LW5hbWVgIF06IGRhdGVFbnRpdHkubmFtZSB8fCAnJyxcblx0XHRbIGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgXTogZGF0ZUVudGl0eS5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRbIGAkeyBwcmVmaXggfS1zdGFydGAgXTogZGF0ZUVudGl0eS5zdGFydC50b0lTTygpLFxuXHRcdFsgYCR7IHByZWZpeCB9LWVuZGAgXTogZGF0ZUVudGl0eS5lbmQudG9JU08oKSxcblx0XHRbIGAkeyBwcmVmaXggfS1zdGFydC10aW1lYCBdOiBkYXRlRW50aXR5LnN0YXJ0LnRvRm9ybWF0KCAnSEg6bW0nICksXG5cdFx0WyBgJHsgcHJlZml4IH0tZW5kLXRpbWVgIF06IGRhdGVFbnRpdHkuZW5kLnRvRm9ybWF0KCAnSEg6bW0nICksXG5cdFx0WyBgJHsgcHJlZml4IH0tcmVnLWxpbWl0YCBdOiBzdHJpcEluZmluaXR5KCBkYXRlRW50aXR5LnJlZ0xpbWl0ICksXG5cdFx0WyBgJHsgcHJlZml4IH0tc29sZGAgXTogZGF0ZUVudGl0eS5zb2xkIHx8IDAsXG5cdFx0WyBgJHsgcHJlZml4IH0tcmVzZXJ2ZWRgIF06IGRhdGVFbnRpdHkucmVzZXJ2ZWQgfHwgMCxcblx0XHRbIGAkeyBwcmVmaXggfS1vcmRlcmAgXTogZGF0ZUVudGl0eS5vcmRlciB8fCAwLFxuXHRcdFsgYCR7IHByZWZpeCB9LXBhcmVudGAgXTogZGF0ZUVudGl0eS5wYXJlbnQgfHwgMCxcblx0XHRbIGAkeyBwcmVmaXggfS1kZWxldGVkYCBdOiBkYXRlRW50aXR5LmRlbGV0ZWQgfHwgZmFsc2UsXG5cdH07XG59O1xuXG5jb25zdCBzdHJpcEluZmluaXR5ID0gKCBudW1iZXIgKSA9PiB7XG5cdHJldHVybiBudW1iZXIgIT09ICdJTkYnICYmIG51bWJlciAhPT0gSW5maW5pdHkgJiYgbnVtYmVyID4gMCA/XG5cdFx0bnVtYmVyIDpcblx0XHRudWxsO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgZGF0ZVRpbWVNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IFNlcnZlckRhdGVUaW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgbm9ybWFsaXplRW50aXR5SWQgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcblxuY29uc3QgeyBNT0RFTF9OQU1FOiBEQVRFVElNRSB9ID0gZGF0ZVRpbWVNb2RlbDtcblxuLyoqXG4gKiB1cGRhdGVzIEV2ZW50IERhdGUgRW50aXR5IHByb3BlcnRpZXNcbiAqIGdpdmVuIHRoZSBzdXBwbGllZCBmb3JtIGRhdGFcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICBFRSBEYXRlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhXG4gKi9cbmV4cG9ydCBjb25zdCBkYXRlRW50aXR5Rm9ybVN1Ym1pdEhhbmRsZXIgPSAoXG5cdGRhdGVFbnRpdHksXG5cdGZvcm1EYXRhLFxuKSA9PiB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgREFURVRJTUUgKSApIHtcblx0XHR0aHJvdyBFcnJvcihcblx0XHRcdF9fKCAnVW5hYmxlIHRvIHByb2Nlc3MgdGhlIEV2ZW50IERhdGUgRW50aXR5IGZvcm0gYmVjYXVzZSBhbicgK1xuXHRcdFx0XHQnIGludmFsaWQgRGF0ZSBFbnRpdHkgd2FzIHN1cHBsaWVkLiAnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0XHQpO1xuXHR9XG5cdGNvbnN0IHByZWZpeCA9IGBlZS1ldmVudC1kYXRlLSR7IGRhdGVFbnRpdHkuaWQgfWA7XG5cdGNvbnN0IGdldFZhbHVlID0gKCBmaWVsZCwgZGVmYXVsdFZhbHVlID0gJycgKSA9PiB7XG5cdFx0cmV0dXJuIGZvcm1EYXRhWyBgJHsgcHJlZml4IH0tJHsgZmllbGQgfWAgXSB8fCBkZWZhdWx0VmFsdWU7XG5cdH07XG5cdGRhdGVFbnRpdHkubmFtZSA9IGdldFZhbHVlKCAnbmFtZScgKTtcblx0ZGF0ZUVudGl0eS5kZXNjcmlwdGlvbiA9IGdldFZhbHVlKCAnZGVzY3JpcHRpb24nICk7XG5cdGRhdGVFbnRpdHkuc3RhcnQgPSBuZXcgU2VydmVyRGF0ZVRpbWUoIGdldFZhbHVlKCAnc3RhcnQnICkgKTtcblx0ZGF0ZUVudGl0eS5lbmQgPSBuZXcgU2VydmVyRGF0ZVRpbWUoIGdldFZhbHVlKCAnZW5kJyApICk7XG5cdGRhdGVFbnRpdHkucmVnTGltaXQgPSBwYXJzZUludCggZ2V0VmFsdWUoICdyZWctbGltaXQnLCAtMSApLCAxMCApO1xuXHRkYXRlRW50aXR5LmlzUHJpbWFyeSA9ICEhIGdldFZhbHVlKCAnaXMtcHJpbWFyeScsIGZhbHNlICk7XG5cdGRhdGVFbnRpdHkub3JkZXIgPSBwYXJzZUludCggZ2V0VmFsdWUoICdvcmRlcicsIDAgKSwgMTAgKTtcblx0ZGF0ZUVudGl0eS5wYXJlbnQgPSBub3JtYWxpemVFbnRpdHlJZCggZ2V0VmFsdWUoICdwYXJlbnQnLCAwICkgKTtcblx0ZGF0ZUVudGl0eS5kZWxldGVkID0gISEgZ2V0VmFsdWUoICdkZWxldGVkJywgZmFsc2UgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHtcblx0d2l0aEZvcm1IYW5kbGVyLFxuXHR0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGRhdGVUaW1lTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBkYXRlRW50aXR5Rm9ybUlucHV0cyB9IGZyb20gJy4vZGF0ZS1lbnRpdHktZm9ybS1pbnB1dHMnO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgbW9kZWwgb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG4gKi9cbmNsYXNzIERhdGVFbnRpdHlGb3JtIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdGRhdGVFbnRpdHksXG5cdFx0XHRzdWJtaXRCdXR0b24sXG5cdFx0XHRjYW5jZWxCdXR0b24sXG5cdFx0XHRjdXJyZW50VmFsdWVzID0ge30sXG5cdFx0XHRpbml0aWFsVmFsdWVzID0ge30sXG5cdFx0XHRuZXdPYmplY3QgPSBmYWxzZSxcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHQvLyBlZGl0IGZvcm1zIGZvciBleGlzdGluZyBvYmplY3RzIG11c3QgaGF2ZSBpbml0aWFsIHZhbHVlc1xuXHRcdGlmIChcblx0XHRcdCggISBuZXdPYmplY3QgJiYgaXNFbXB0eSggaW5pdGlhbFZhbHVlcyApICkgfHxcblx0XHRcdGlzRW1wdHkoIGN1cnJlbnRWYWx1ZXMgKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNvbnN0IHtcblx0XHRcdEZvcm1JbnB1dCxcblx0XHRcdEZvcm1TZWN0aW9uLFxuXHRcdFx0Rm9ybVdyYXBwZXIsXG5cdFx0XHRGb3JtU2F2ZUNhbmNlbEJ1dHRvbnMsXG5cdFx0XHRGb3JtSW5mbyxcblx0XHR9ID0gdHdvQ29sdW1uQWRtaW5Gb3JtTGF5b3V0O1xuXG5cdFx0Ly8gZW50aXR5IHByb3BlcnRpZXMgd2UgZG9uJ3Qgd2FudCB0byBiZSBlZGl0YWJsZVxuXHRcdGNvbnN0IGV4Y2x1ZGUgPSBbXG5cdFx0XHQnRVZUX0lEJyxcblx0XHRcdCdzb2xkJyxcblx0XHRcdCdyZXNlcnZlZCcsXG5cdFx0XHQnb3JkZXInLFxuXHRcdFx0J3BhcmVudCcsXG5cdFx0XHQnZGVsZXRlZCcsXG5cdFx0XTtcblx0XHRjb25zdCBmb3JtUm93cyA9IGRhdGVFbnRpdHlGb3JtSW5wdXRzKFxuXHRcdFx0ZGF0ZUVudGl0eSxcblx0XHRcdGV4Y2x1ZGUsXG5cdFx0XHRjdXJyZW50VmFsdWVzLFxuXHRcdFx0Rm9ybUlucHV0XG5cdFx0KTtcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGZvcm1Sb3dzICkgKSB7XG5cdFx0XHRmb3JtUm93cy51bnNoaWZ0KFxuXHRcdFx0XHQ8Rm9ybUluZm9cblx0XHRcdFx0XHRrZXk9XCJmb3JtSW5mb1wiXG5cdFx0XHRcdFx0Zm9ybUluZm89e1xuXHRcdFx0XHRcdFx0X18oXG5cdFx0XHRcdFx0XHRcdCdhbGwgZmllbGRzIG1hcmtlZCB3aXRoIGFuIGFzdGVyaXNrIGFyZSByZXF1aXJlZCcsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGlzbWlzc2FibGU9eyBmYWxzZSB9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRjb25zdCB7IE1PREVMX05BTUU6IERBVEVUSU1FIH0gPSBkYXRlVGltZU1vZGVsO1xuXHRcdHJldHVybiBpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgREFURVRJTUUgKSA/IChcblx0XHRcdDxGb3JtV3JhcHBlcj5cblx0XHRcdFx0PEZvcm1TZWN0aW9uXG5cdFx0XHRcdFx0aHRtbElkPXtcblx0XHRcdFx0XHRcdGBlZS1ldmVudC1kYXRlLWVkaXRvci0keyBkYXRlRW50aXR5LmlkIH0tZm9ybS1zZWN0aW9uYFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjaGlsZHJlbj17IGZvcm1Sb3dzIH1cblx0XHRcdFx0Lz5cblx0XHRcdFx0PEZvcm1TYXZlQ2FuY2VsQnV0dG9uc1xuXHRcdFx0XHRcdGh0bWxDbGFzcz17IGBlZS1ldmVudC1kYXRlLWVkaXRvci0keyBkYXRlRW50aXR5LmlkIH1gIH1cblx0XHRcdFx0XHRzdWJtaXRCdXR0b249eyBzdWJtaXRCdXR0b24gfVxuXHRcdFx0XHRcdGNhbmNlbEJ1dHRvbj17IGNhbmNlbEJ1dHRvbiB9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0Zvcm1XcmFwcGVyPlxuXHRcdCkgOiBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogRW5oYW5jZWQgRGF0ZUVudGl0eUZvcm0gd2l0aCBGb3JtSGFuZGxlclxuICovXG5leHBvcnQgZGVmYXVsdCB3aXRoRm9ybUhhbmRsZXIoIERhdGVFbnRpdHlGb3JtICk7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIERhdGVFbnRpdHlGb3JtIH0gZnJvbSAnLi9kYXRlLWVudGl0eS1mb3JtJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGF0ZUVudGl0eUZvcm1Nb2RhbCB9IGZyb20gJy4vZGF0ZS1lbnRpdHktZm9ybS1tb2RhbCc7XG5leHBvcnQgeyBkYXRlRW50aXR5Rm9ybUlucHV0cyB9IGZyb20gJy4vZGF0ZS1lbnRpdHktZm9ybS1pbnB1dHMnO1xuZXhwb3J0IHsgZGF0ZUVudGl0eUZvcm1TY2hlbWEgfSBmcm9tICcuL2RhdGUtZW50aXR5LWZvcm0tc2NoZW1hJztcbmV4cG9ydCB7IGRhdGVFbnRpdHlGb3JtU3VibWl0SGFuZGxlciB9IGZyb20gJy4vZGF0ZS1lbnRpdHktZm9ybS1zdWJtaXQtaGFuZGxlcic7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgY29tcG9zZSB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyB3aXRoRGlzcGF0Y2ggfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7XG5cdEVudGl0eUxpc3QsXG5cdEVzcHJlc3NvQnV0dG9uLFxuXHR0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgd2l0aEVkaXRvciB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VkaXRvci1ob2NzJztcbmltcG9ydCB7IF9fLCBfeCwgc3ByaW50ZiB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBFZGl0b3JEYXRlRW50aXRpZXNHcmlkVmlldyB9IGZyb20gJy4vZ3JpZC12aWV3JztcbmltcG9ydCB7IEVkaXRvckRhdGVFbnRpdGllc0xpc3RWaWV3IH0gZnJvbSAnLi9saXN0LXZpZXcnO1xuaW1wb3J0IHsgd2l0aFBhZ2luYXRlZERhdGVFbnRpdGllc0xpc3RBbmRGaWx0ZXJCYXIgfSBmcm9tICcuL2ZpbHRlci1iYXInO1xuaW1wb3J0IHsgRGF0ZUVudGl0eUZvcm1Nb2RhbCB9IGZyb20gJy4vZWRpdC1mb3JtJztcbmltcG9ydCB7IHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCB9IGZyb20gJy4uLy4uL3RpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyJztcbmltcG9ydCB3aXRoVXBkYXRlRXZlbnREYXRlUmVsYXRpb24gZnJvbSAnLi9hY3Rpb24taGFuZGxlcnMvd2l0aC11cGRhdGUtZXZlbnQtZGF0ZS1yZWxhdGlvbic7XG5pbXBvcnQgeyB3aXRoRWRpdG9yRGF0ZUVudGl0aWVzLCB3aXRoRWRpdG9yRXZlbnRFbnRpdHkgfSBmcm9tICcuLi8uLi9ob2NzJztcblxuY29uc3Qge1xuXHRGb3JtV3JhcHBlcixcblx0Rm9ybVNhdmVDYW5jZWxCdXR0b25zLFxufSA9IHR3b0NvbHVtbkFkbWluRm9ybUxheW91dDtcblxuLyoqXG4gKiBFZGl0b3JEYXRlRW50aXRpZXNMaXN0XG4gKiBFbnRpdHlMaXN0IGNvbXBvbmVudCBmb3IgZGlzcGxheWluZyBldmVudCBkYXRlcyBpbiB0aGUgZWRpdG9yXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0FycmF5fSBlbnRpdGllcyBcdGFycmF5IG9mIEpTT04gb2JqZWN0cyBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB2aWV3XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXRyaWV2ZURhdGVzXG4gKiBAcGFyYW0ge21peGVkfSBvdGhlclByb3BzXG4gKi9cbmNsYXNzIEVkaXRvckRhdGVFbnRpdGllc0xpc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0c3VwZXIoIHByb3BzICk7XG5cdFx0dGhpcy5zdGF0ZSA9IHsgbmV3RGF0ZUVudGl0eTogbnVsbCB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGJ1dHRvblxuXHQgKi9cblx0YWRkTmV3RGF0ZUJ1dHRvbiA9ICgpID0+IHtcblx0XHRjb25zdCBhZGREYXRlRW50aXR5ID0gKCBldmVudCApID0+IHtcblx0XHRcdGlmICggZXZlbnQgJiYgZXZlbnQucHJldmVudERlZmF1bHQgKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5wcm9wcy5hZGROZXdEYXRlRW50aXR5KFxuXHRcdFx0XHQoIHN0YXRlICkgPT4gdGhpcy5zZXRTdGF0ZSggc3RhdGUgKSxcblx0XHRcdFx0dGhpcy5wcm9wcy50b2dnbGVFZGl0b3Jcblx0XHRcdCk7XG5cdFx0fTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEVzcHJlc3NvQnV0dG9uXG5cdFx0XHRcdGljb249XCJjYWxlbmRhclwiXG5cdFx0XHRcdGJ1dHRvblRleHQ9eyBfXyggJ0FkZCBOZXcgRGF0ZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdG9uQ2xpY2s9eyBhZGREYXRlRW50aXR5IH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgYnV0dG9uXG5cdCAqL1xuXHR0aWNrZXRBc3NpZ25tZW50c0J1dHRvbiA9ICgpID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEVzcHJlc3NvQnV0dG9uXG5cdFx0XHRcdGljb249XCJ0aWNrZXRzLWFsdFwiXG5cdFx0XHRcdGJ1dHRvblRleHQ9eyBfXyhcblx0XHRcdFx0XHQnVGlja2V0IEFzc2lnbm1lbnRzJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRvbkNsaWNrPXsgdGhpcy5wcm9wcy50b2dnbGVUaWNrZXRBc3NpZ25tZW50cyB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdHZpZXcsXG5cdFx0XHRlbnRpdGllcyxcblx0XHRcdGVkaXRvck9wZW4sXG5cdFx0XHR0b2dnbGVFZGl0b3IsXG5cdFx0XHQuLi5vdGhlclByb3BzXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtV3JhcHBlcj5cblx0XHRcdFx0PEVudGl0eUxpc3Rcblx0XHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHRcdGVudGl0aWVzPXsgZW50aXRpZXMgfVxuXHRcdFx0XHRcdEVudGl0eUdyaWRWaWV3PXsgRWRpdG9yRGF0ZUVudGl0aWVzR3JpZFZpZXcgfVxuXHRcdFx0XHRcdEVudGl0eUxpc3RWaWV3PXsgRWRpdG9yRGF0ZUVudGl0aWVzTGlzdFZpZXcgfVxuXHRcdFx0XHRcdHZpZXc9eyB2aWV3IH1cblx0XHRcdFx0XHRsb2FkaW5nTm90aWNlPXsgc3ByaW50Zihcblx0XHRcdFx0XHRcdF94KFxuXHRcdFx0XHRcdFx0XHQnbG9hZGluZyBldmVudCBkYXRlcyVzJyxcblx0XHRcdFx0XHRcdFx0J2xvYWRpbmcgZXZlbnQgZGF0ZXMuLi4nLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggODIzMCApXG5cdFx0XHRcdFx0KSB9XG5cdFx0XHRcdC8+XG5cdFx0XHRcdDxGb3JtU2F2ZUNhbmNlbEJ1dHRvbnNcblx0XHRcdFx0XHRzdWJtaXRCdXR0b249eyB0aGlzLmFkZE5ld0RhdGVCdXR0b24oKSB9XG5cdFx0XHRcdFx0Y2FuY2VsQnV0dG9uPXsgdGhpcy50aWNrZXRBc3NpZ25tZW50c0J1dHRvbigpIH1cblx0XHRcdFx0Lz5cblx0XHRcdFx0PERhdGVFbnRpdHlGb3JtTW9kYWxcblx0XHRcdFx0XHRkYXRlRW50aXR5PXsgdGhpcy5zdGF0ZS5uZXdEYXRlRW50aXR5IH1cblx0XHRcdFx0XHR0b2dnbGVFZGl0b3I9eyB0b2dnbGVFZGl0b3IgfVxuXHRcdFx0XHRcdGVkaXRvck9wZW49eyBlZGl0b3JPcGVuIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvRm9ybVdyYXBwZXI+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKCBbXG5cdHdpdGhFZGl0b3IsXG5cdHdpdGhFZGl0b3JEYXRlRW50aXRpZXMsXG5cdHdpdGhQYWdpbmF0ZWREYXRlRW50aXRpZXNMaXN0QW5kRmlsdGVyQmFyKCksXG5cdHdpdGhFZGl0b3JFdmVudEVudGl0eSxcblx0d2l0aFVwZGF0ZUV2ZW50RGF0ZVJlbGF0aW9uLFxuXHR3aXRoRGlzcGF0Y2goIChcblx0XHRkaXNwYXRjaCxcblx0XHR7IHVwZGF0ZUV2ZW50RGF0ZVJlbGF0aW9uIH1cblx0KSA9PiB7XG5cdFx0Y29uc3QgeyBjcmVhdGVFbnRpdHkgfSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdGNvbnN0IGFkZE5ld0RhdGVFbnRpdHkgPSAoIHNldFN0YXRlLCB0b2dnbGVFZGl0b3IgKSA9PiB7XG5cdFx0XHRjcmVhdGVFbnRpdHkoICdkYXRldGltZScsIHt9ICkudGhlbihcblx0XHRcdFx0KCBuZXdEYXRlRW50aXR5ICkgPT4ge1xuXHRcdFx0XHRcdHNldFN0YXRlKCB7IG5ld0RhdGVFbnRpdHkgfSApO1xuXHRcdFx0XHRcdHVwZGF0ZUV2ZW50RGF0ZVJlbGF0aW9uKCBuZXdEYXRlRW50aXR5ICk7XG5cdFx0XHRcdFx0dG9nZ2xlRWRpdG9yKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHRcdH07XG5cdFx0cmV0dXJuIHsgYWRkTmV3RGF0ZUVudGl0eSB9O1xuXHR9ICksXG5cdHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCggKCkgPT4gKFxuXHRcdHtcblx0XHRcdHRpdGxlOiBfXyhcblx0XHRcdFx0J1RpY2tldCBBc3NpZ25tZW50cyBmb3IgQWxsIEV2ZW50IERhdGVzJyxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0KSxcblx0XHRcdGNsb3NlQnV0dG9uTGFiZWw6IG51bGwsXG5cdFx0fVxuXHQpICksXG5dICkoIEVkaXRvckRhdGVFbnRpdGllc0xpc3QgKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBzb3J0QnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZGF0ZVRpbWVNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5cbi8qKlxuICogZmlsdGVyRGF0ZUVudGl0aWVzXG4gKiByZWR1Y2VzIGRhdGVFbnRpdGllcyBhcnJheSBiYXNlZCBvbiB2YWx1ZSBvZiB0aGUgXCJzaG93RGF0ZXNcIiBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRlRW50aXRpZXMgICAgb3JpZ2luYWwgZGF0ZUVudGl0aWVzIGFycmF5XG4gKiBAcGFyYW0ge3N0cmluZ30gc2hvd0RhdGVzICAgIHZhbHVlIGZvciB0aGUgXCJzaG93RGF0ZXNcIiBmaWx0ZXJcbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgIGZpbHRlcmVkIGRhdGVFbnRpdGllcyBhcnJheVxuICovXG5leHBvcnQgY29uc3QgZmlsdGVyRGF0ZUVudGl0aWVzID0gKCBkYXRlRW50aXRpZXMsIHNob3dEYXRlcyA9ICdhY3RpdmUtdXBjb21pbmcnICkgPT4ge1xuXHRkYXRlRW50aXRpZXMgPSBzb3J0RGF0ZUVudGl0aWVzTGlzdCggZGF0ZUVudGl0aWVzICk7XG5cdHN3aXRjaCAoIHNob3dEYXRlcyApIHtcblx0XHRjYXNlICdhbGwnIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgZGF0ZVRpbWVNb2RlbC5pc1RyYXNoZWQoIGRhdGVFbnRpdHkgKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRjYXNlICdhY3RpdmUtdXBjb21pbmcnIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGVUaW1lTW9kZWwuaXNBY3RpdmUoIGRhdGVFbnRpdHkgKSB8fFxuXHRcdFx0XHRcdFx0ZGF0ZVRpbWVNb2RlbC5pc1VwY29taW5nKCBkYXRlRW50aXR5ICk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0Y2FzZSAnYWN0aXZlLW9ubHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGVUaW1lTW9kZWwuaXNBY3RpdmUoIGRhdGVFbnRpdHkgKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRjYXNlICd1cGNvbWluZy1vbmx5JyA6XG5cdFx0XHRyZXR1cm4gZmlsdGVyKFxuXHRcdFx0XHRkYXRlRW50aXRpZXMsXG5cdFx0XHRcdGZ1bmN0aW9uKCBkYXRlRW50aXR5ICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRlVGltZU1vZGVsLmlzVXBjb21pbmcoIGRhdGVFbnRpdHkgKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRjYXNlICduZXh0LWFjdGl2ZS11cGNvbWluZy1vbmx5JyA6XG5cdFx0XHRkYXRlRW50aXRpZXMgPSBmaWx0ZXJEYXRlRW50aXRpZXMoIGRhdGVFbnRpdGllcyApO1xuXHRcdFx0cmV0dXJuIFsgZmlyc3QoIGRhdGVFbnRpdGllcyApIF07XG5cdFx0Y2FzZSAnc29sZC1vdXQtb25seScgOlxuXHRcdFx0cmV0dXJuIGZpbHRlcihcblx0XHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdFx0XHRmdW5jdGlvbiggZGF0ZUVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISBkYXRlVGltZU1vZGVsLmlzVHJhc2hlZCggZGF0ZUVudGl0eSApICYmICggKFxuXHRcdFx0XHRcdFx0dmFsaWRTdGF0dXMoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0ZGF0ZVRpbWVNb2RlbC5pc1NvbGRPdXQoIGRhdGVFbnRpdHkgKVxuXHRcdFx0XHRcdCkgfHwgY2FwYWNpdHlBdE9yQWJvdmUoIGRhdGVFbnRpdHksIDEwMCApICk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0Y2FzZSAnYWJvdmUtOTAtY2FwYWNpdHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgZGF0ZVRpbWVNb2RlbC5pc1RyYXNoZWQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0Y2FwYWNpdHlBdE9yQWJvdmUoIGRhdGVFbnRpdHksIDkwICk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0Y2FzZSAnYWJvdmUtNzUtY2FwYWNpdHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgZGF0ZVRpbWVNb2RlbC5pc1RyYXNoZWQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0Y2FwYWNpdHlBdE9yQWJvdmUoIGRhdGVFbnRpdHksIDc1ICk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0Y2FzZSAnYWJvdmUtNTAtY2FwYWNpdHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgZGF0ZVRpbWVNb2RlbC5pc1RyYXNoZWQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0Y2FwYWNpdHlBdE9yQWJvdmUoIGRhdGVFbnRpdHksIDUwICk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0Y2FzZSAnYmVsb3ctNTAtY2FwYWNpdHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgZGF0ZVRpbWVNb2RlbC5pc1RyYXNoZWQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0Y2FwYWNpdHlCZWxvdyggZGF0ZUVudGl0eSwgNTAgKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRjYXNlICdyZWNlbnRseS1leHBpcmVkLW9ubHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGVUaW1lTW9kZWwuaXNSZWNlbnRseUV4cGlyZWQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0ISBkYXRlVGltZU1vZGVsLmlzVHJhc2hlZCggZGF0ZUVudGl0eSApO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdGNhc2UgJ2V4cGlyZWQtb25seScgOlxuXHRcdFx0cmV0dXJuIGZpbHRlcihcblx0XHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdFx0XHRmdW5jdGlvbiggZGF0ZUVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0ZVRpbWVNb2RlbC5pc0V4cGlyZWQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0ISBkYXRlVGltZU1vZGVsLmlzVHJhc2hlZCggZGF0ZUVudGl0eSApO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdGNhc2UgJ3RyYXNoZWQtb25seScgOlxuXHRcdFx0cmV0dXJuIGZpbHRlcihcblx0XHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdFx0XHRmdW5jdGlvbiggZGF0ZUVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0ZVRpbWVNb2RlbC5pc1RyYXNoZWQoIGRhdGVFbnRpdHkgKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0fVxuXHRyZXR1cm4gZGF0ZUVudGl0aWVzO1xufTtcblxuLyoqXG4gKiBzb3J0RGF0ZUVudGl0aWVzTGlzdFxuICogcmVkdWNlcyBkYXRlRW50aXRpZXMgYXJyYXkgYmFzZWQgb24gdmFsdWUgb2YgdGhlIFwiZGF0ZXNTb3J0ZWRCeVwiIGZpbHRlclxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGVFbnRpdGllcyAgICBvcmlnaW5hbCBkYXRlRW50aXRpZXMgYXJyYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0ICAgdmFsdWUgZm9yIHRoZSBcImRhdGVzU29ydGVkQnlcIiBmaWx0ZXJcbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgIGZpbHRlcmVkIGRhdGVFbnRpdGllcyBhcnJheVxuICovXG5leHBvcnQgY29uc3Qgc29ydERhdGVFbnRpdGllc0xpc3QgPSAoIGRhdGVFbnRpdGllcywgc29ydCA9ICdjaHJvbm9sb2dpY2FsbHknICkgPT4ge1xuXHRkYXRlRW50aXRpZXMgPSBkYXRlRW50aXRpZXMgfHwgW107XG5cdHN3aXRjaCAoIHNvcnQgKSB7XG5cdFx0Y2FzZSAnY2hyb25vbG9naWNhbGx5JyA6XG5cdFx0XHRkYXRlRW50aXRpZXMgPSBzb3J0QnkoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdGZ1bmN0aW9uKCBkYXRlRW50aXR5ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIERhdGVUaW1lLmlzVmFsaWQoIGRhdGVFbnRpdHkuc3RhcnQgKSA/XG5cdFx0XHRcdFx0XHRcdGRhdGVFbnRpdHkuc3RhcnQudG9NaWxsaXMoKSA6XG5cdFx0XHRcdFx0XHRcdDA7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2J5LW5hbWUnIDpcblx0XHRcdGRhdGVFbnRpdGllcyA9IHNvcnRCeSggZGF0ZUVudGl0aWVzLCBbICduYW1lJyBdICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdieS1pZCcgOlxuXHRcdFx0ZGF0ZUVudGl0aWVzID0gc29ydEJ5KCBkYXRlRW50aXRpZXMsIFsgJ2lkJyBdICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdieS1vcmRlcicgOlxuXHRcdFx0ZGF0ZUVudGl0aWVzID0gc29ydEJ5KCBkYXRlRW50aXRpZXMsIFsgJ29yZGVyJyBdICk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gZGF0ZUVudGl0aWVzO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBldmVudCBkYXRlRW50aXR5IG9iamVjdFxuICogQHBhcmFtIHtudW1iZXJ9IGNhcGFjaXR5XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHNvbGQvcmVnTGltaXQgPj0gY2FwYWNpdHlcbiAqL1xuY29uc3QgY2FwYWNpdHlBdE9yQWJvdmUgPSAoIGRhdGVFbnRpdHksIGNhcGFjaXR5ICkgPT4ge1xuXHRyZXR1cm4gdmFsaWRTb2xkKCBkYXRlRW50aXR5ICkgJiZcblx0XHR2YWxpZEZpbml0ZVJlZ2xpbWl0KCBkYXRlRW50aXR5ICkgJiZcblx0XHQoXG5cdFx0XHRwYXJzZUludCggZGF0ZUVudGl0eS5zb2xkLCAxMCApIC9cblx0XHRcdHBhcnNlSW50KCBkYXRlRW50aXR5LnJlZ0xpbWl0LCAxMCApID49ICggY2FwYWNpdHkgLyAxMDAgKVxuXHRcdCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICAgIGV2ZW50IGRhdGVFbnRpdHkgb2JqZWN0XG4gKiBAcGFyYW0ge251bWJlcn0gY2FwYWNpdHlcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgc29sZC9yZWdMaW1pdCBsZXNzIHRoYW4gdGhhbiBjYXBhY2l0eVxuICovXG5jb25zdCBjYXBhY2l0eUJlbG93ID0gKCBkYXRlRW50aXR5LCBjYXBhY2l0eSApID0+IHtcblx0cmV0dXJuIChcblx0XHR2YWxpZEluZmluaXRlUmVnbGltaXQoIGRhdGVFbnRpdHkgKVxuXHQpIHx8IChcblx0XHR2YWxpZFNvbGQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdHZhbGlkRmluaXRlUmVnbGltaXQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdChcblx0XHRcdHBhcnNlSW50KCBkYXRlRW50aXR5LnNvbGQsIDEwICkgL1xuXHRcdFx0cGFyc2VJbnQoIGRhdGVFbnRpdHkucmVnTGltaXQsIDEwICkgPCAoIGNhcGFjaXR5IC8gMTAwIClcblx0XHQpXG5cdCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICAgIGV2ZW50IGRhdGVFbnRpdHkgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHJlZ0xpbWl0IHByb3BlcnR5IGlzIHZhbGlkXG4gKi9cbmNvbnN0IHZhbGlkU3RhdHVzID0gKCBkYXRlRW50aXR5ICkgPT4ge1xuXHRyZXR1cm4gdHlwZW9mIGRhdGVFbnRpdHkuc3RhdHVzID09PSAnc3RyaW5nJztcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgICAgZXZlbnQgZGF0ZUVudGl0eSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgcmVnTGltaXQgcHJvcGVydHkgaXMgdmFsaWRcbiAqL1xuY29uc3QgdmFsaWRSZWdsaW1pdCA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0cmV0dXJuIHR5cGVvZiBkYXRlRW50aXR5LnJlZ0xpbWl0ID09PSAnc3RyaW5nJyB8fFxuXHRcdHR5cGVvZiBkYXRlRW50aXR5LnJlZ0xpbWl0ID09PSAnbnVtYmVyJztcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgICAgZXZlbnQgZGF0ZUVudGl0eSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgcmVnTGltaXQgcHJvcGVydHkgaXMgdmFsaWQgYW5kIE5PVCBpbmZpbml0ZVxuICovXG5jb25zdCB2YWxpZEZpbml0ZVJlZ2xpbWl0ID0gKCBkYXRlRW50aXR5ICkgPT4ge1xuXHRyZXR1cm4gdmFsaWRSZWdsaW1pdCggZGF0ZUVudGl0eSApICYmXG5cdFx0ZGF0ZUVudGl0eS5yZWdMaW1pdCAhPT0gJ0lORicgJiZcblx0XHRkYXRlRW50aXR5LnJlZ0xpbWl0ICE9PSBJbmZpbml0eTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgICAgZXZlbnQgZGF0ZUVudGl0eSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgcmVnTGltaXQgcHJvcGVydHkgaXMgdmFsaWQgYW5kIHVubGltaXRlZFxuICovXG5jb25zdCB2YWxpZEluZmluaXRlUmVnbGltaXQgPSAoIGRhdGVFbnRpdHkgKSA9PiB7XG5cdHJldHVybiB2YWxpZFJlZ2xpbWl0KCBkYXRlRW50aXR5ICkgJiYgKFxuXHRcdGRhdGVFbnRpdHkucmVnTGltaXQgPT09ICdJTkYnIHx8IGRhdGVFbnRpdHkucmVnTGltaXQgPT09IEluZmluaXR5XG5cdCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICAgIGV2ZW50IGRhdGVFbnRpdHkgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHJlZ0xpbWl0IHByb3BlcnR5IGlzIHZhbGlkXG4gKi9cbmNvbnN0IHZhbGlkU29sZCA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0cmV0dXJuIHR5cGVvZiBkYXRlRW50aXR5LnNvbGQgPT09ICdzdHJpbmcnIHx8XG5cdFx0dHlwZW9mIGRhdGVFbnRpdHkuc29sZCA9PT0gJ251bWJlcic7XG59O1xuXG4vKipcbiAqIHNlYXJjaERhdGVFbnRpdGllc1xuICogcmVkdWNlcyBkYXRlRW50aXRpZXMgYXJyYXkgYmFzZWQgb24gdmFsdWUgb2YgdGhlIFwic2VhcmNoRGF0ZU5hbWVcIiBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRlRW50aXRpZXMgICAgXHRcdG9yaWdpbmFsIGRhdGVFbnRpdGllcyBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRleHQgXHR2YWx1ZSBmb3IgdGhlIFwic2VhcmNoRGF0ZU5hbWVcIiBmaWx0ZXJcbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgIFx0XHRmaWx0ZXJlZCBkYXRlRW50aXRpZXMgYXJyYXlcbiAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaERhdGVFbnRpdGllcyA9ICggZGF0ZUVudGl0aWVzLCBzZWFyY2hUZXh0ID0gJycgKSA9PiB7XG5cdGRhdGVFbnRpdGllcyA9IHNlYXJjaFRleHQgIT09ICcnID9cblx0XHRkYXRlRW50aXRpZXMuZmlsdGVyKCAoIGRhdGVFbnRpdHkgKSA9PiB7XG5cdFx0XHRyZXR1cm4gZGF0ZUVudGl0eS5uYW1lLnRvTG93ZXJDYXNlKClcblx0XHRcdFx0LnNlYXJjaCggc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpICkgIT09IC0xO1xuXHRcdH0gKSA6XG5cdFx0ZGF0ZUVudGl0aWVzO1xuXHRyZXR1cm4gZGF0ZUVudGl0aWVzO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBTZWxlY3RDb250cm9sIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogRGF0ZXNMaXN0RmlsdGVyQmFyXG4gKiBmaWx0ZXJzIGZvciBjb250cm9sbGluZyB0aGUgZGlzcGxheSBvZiBhIGxpc3Qgb2YgRXZlbnQgRGF0ZXNcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblNob3dGaWx0ZXJDaGFuZ2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uT3JkZXJGaWx0ZXJDaGFuZ2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uRGlzcGxheUZpbHRlckNoYW5nZVxuICogQHJldHVybiB7T2JqZWN0fSBFZGl0b3JEYXRlc0xpc3RWaWV3IHdpdGggYWRkZWQgRGF0ZUxpc3RGaWx0ZXJzXG4gKi9cbmNsYXNzIERhdGVMaXN0RmlsdGVyQmFyIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRzaG93RGF0ZXM6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRkYXRlc1NvcnRlZEJ5OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdFx0ZGlzcGxheURhdGVzOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdFx0c2V0U2hvd0RhdGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHRcdHNldERhdGVzU29ydGVkQnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c2V0RGlzcGxheURhdGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2hvd0RhdGVzXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldFNob3dEYXRlc1xuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHNob3dEYXRlcyBmaWx0ZXJcblx0ICovXG5cdHNob3dEYXRlcyA9ICggc2hvd0RhdGVzLCBzZXRTaG93RGF0ZXMgKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRcdGxhYmVsPXsgX18oICdzaG93JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0Y2xhc3NOYW1lPVwiZXNwcmVzc28tZGF0ZS1saXN0LWZpbHRlci1iYXItc2hvdy1zZWxlY3RcIlxuXHRcdFx0XHR2YWx1ZT17IHNob3dEYXRlcyB9XG5cdFx0XHRcdG9wdGlvbnM9eyBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdhbGwnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnYWxsIGRhdGVzJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdhY3RpdmUtdXBjb21pbmcnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnYWxsIGFjdGl2ZSBhbmQgdXBjb21pbmcnLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdhY3RpdmUtb25seScsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oXG5cdFx0XHRcdFx0XHRcdCdhY3RpdmUgZGF0ZXMgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3VwY29taW5nLW9ubHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQndXBjb21pbmcgZGF0ZXMgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ25leHQtYWN0aXZlLXVwY29taW5nLW9ubHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnbmV4dCBhY3RpdmUgb3IgdXBjb21pbmcgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3NvbGQtb3V0LW9ubHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnc29sZCBvdXQgZGF0ZXMgb25seScsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYWJvdmUtOTAtY2FwYWNpdHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnZGF0ZXMgYWJvdmUgOTAlIGNhcGFjaXR5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYWJvdmUtNzUtY2FwYWNpdHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnZGF0ZXMgYWJvdmUgNzUlIGNhcGFjaXR5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYWJvdmUtNTAtY2FwYWNpdHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnZGF0ZXMgYWJvdmUgNTAlIGNhcGFjaXR5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYmVsb3ctNTAtY2FwYWNpdHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnZGF0ZXMgYmVsb3cgNTAlIGNhcGFjaXR5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAncmVjZW50bHktZXhwaXJlZC1vbmx5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyhcblx0XHRcdFx0XHRcdFx0J3JlY2VudGx5IGV4cGlyZWQgZGF0ZXMnLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdleHBpcmVkLW9ubHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnYWxsIGV4cGlyZWQgZGF0ZXMnLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICd0cmFzaGVkLW9ubHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQndHJhc2hlZCBkYXRlcyBvbmx5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdIH1cblx0XHRcdFx0b25DaGFuZ2U9eyBzZXRTaG93RGF0ZXMgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGF0ZXNTb3J0ZWRCeVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXREYXRlc1NvcnRlZEJ5XG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZGF0ZXNTb3J0ZWRCeSBmaWx0ZXJcblx0ICovXG5cdGRhdGVzU29ydGVkQnkgPSAoIGRhdGVzU29ydGVkQnksIHNldERhdGVzU29ydGVkQnkgKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRcdGxhYmVsPXsgX18oICdzb3J0JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0Y2xhc3NOYW1lPVwiZXNwcmVzc28tZGF0ZS1saXN0LWZpbHRlci1iYXItb3JkZXItc2VsZWN0XCJcblx0XHRcdFx0dmFsdWU9eyBkYXRlc1NvcnRlZEJ5IH1cblx0XHRcdFx0b3B0aW9ucz17IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2Nocm9ub2xvZ2ljYWxseScsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oICdjaHJvbm9sb2dpY2FsbHknLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdieS1uYW1lJyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyggJ2J5IGRhdGUgbmFtZScsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYnktaWQnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnYnkgZGF0ZSBJRCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYnktb3JkZXInLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnYnkgY3VzdG9tIG9yZGVyJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdIH1cblx0XHRcdFx0b25DaGFuZ2U9eyBzZXREYXRlc1NvcnRlZEJ5IH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGRpc3BsYXlEYXRlc1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXREaXNwbGF5RGF0ZXNcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBkaXNwbGF5RGF0ZXMgZmlsdGVyXG5cdCAqL1xuXHRkaXNwbGF5RGF0ZXMgPSAoIGRpc3BsYXlEYXRlcywgc2V0RGlzcGxheURhdGVzICkgPT4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8U2VsZWN0Q29udHJvbFxuXHRcdFx0XHRsYWJlbD17IF9fKCAnZGlzcGxheScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGNsYXNzTmFtZT1cImVzcHJlc3NvLWRhdGUtbGlzdC1maWx0ZXItYmFyLWRpc3BsYXktc2VsZWN0XCJcblx0XHRcdFx0dmFsdWU9eyBkaXNwbGF5RGF0ZXMgfVxuXHRcdFx0XHRvcHRpb25zPXsgW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnc3RhcnQnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnc3RhcnQgZGF0ZXMgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2VuZCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oICdlbmQgZGF0ZXMgb25seScsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYm90aCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oICdzdGFydCBhbmQgZW5kIGRhdGVzJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdIH1cblx0XHRcdFx0b25DaGFuZ2U9eyBzZXREaXNwbGF5RGF0ZXMgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRzaG93RGF0ZXMsXG5cdFx0XHRkYXRlc1NvcnRlZEJ5LFxuXHRcdFx0ZGlzcGxheURhdGVzLFxuXHRcdFx0c2V0U2hvd0RhdGVzLFxuXHRcdFx0c2V0RGF0ZXNTb3J0ZWRCeSxcblx0XHRcdHNldERpc3BsYXlEYXRlcyxcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRjb25zdCBzaG93RmlsdGVyID0gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1zaG93LWRhdGVzLWZpbHRlciBlZS1maWx0ZXItYmFyLWZpbHRlclwiPlxuXHRcdFx0XHR7IHRoaXMuc2hvd0RhdGVzKCBzaG93RGF0ZXMsIHNldFNob3dEYXRlcyApIH1cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdFx0Y29uc3Qgc29ydEZpbHRlciA9IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtc29ydC1kYXRlcy1maWx0ZXIgZWUtZmlsdGVyLWJhci1maWx0ZXJcIj5cblx0XHRcdFx0eyB0aGlzLmRhdGVzU29ydGVkQnkoIGRhdGVzU29ydGVkQnksIHNldERhdGVzU29ydGVkQnkgKSB9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpO1xuXHRcdGNvbnN0IGRpc3BsYXlGaWx0ZXIgPSAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWRpc3BsYXktZGF0ZXMtZGF0ZXMtZmlsdGVyIGVlLWZpbHRlci1iYXItZmlsdGVyXCI+XG5cdFx0XHRcdHsgdGhpcy5kaXNwbGF5RGF0ZXMoIGRpc3BsYXlEYXRlcywgc2V0RGlzcGxheURhdGVzICkgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHR7IHNob3dGaWx0ZXIgfVxuXHRcdFx0XHR7IHNvcnRGaWx0ZXIgfVxuXHRcdFx0XHR7IGRpc3BsYXlGaWx0ZXIgfVxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVMaXN0RmlsdGVyQmFyO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHdpdGhFbnRpdHlQYWdpbmF0aW9uIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgY29tcG9zZSwgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgd2l0aERhdGVFbnRpdGllc0xpc3RGaWx0ZXJCYXIsIHtcblx0Z2V0RmlsdGVyZWREYXRlRW50aXRpZXNMaXN0LFxufSBmcm9tICcuL3dpdGgtZGF0ZS1lbnRpdGllcy1saXN0LWZpbHRlci1iYXInO1xuaW1wb3J0IHdpdGhEYXRlRW50aXRpZXNMaXN0RmlsdGVyU3RhdGUgZnJvbSAnLi93aXRoLWRhdGUtZW50aXRpZXMtbGlzdC1maWx0ZXItc3RhdGUnO1xuaW1wb3J0IHdpdGhGaWx0ZXJlZERhdGVFbnRpdGllcyBmcm9tICcuL3dpdGgtZmlsdGVyZWQtZGF0ZS1lbnRpdGllcyc7XG5cbmNvbnN0IHdpdGhQYWdpbmF0ZWREYXRlRW50aXRpZXNMaXN0QW5kRmlsdGVyQmFyID0gKFxuXHRwYWdpbmF0aW9uQ29uZmlnID0ge31cbikgPT4gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoRGF0ZUVudGl0aWVzTGlzdEZpbHRlclN0YXRlLFxuXHRcdHdpdGhEYXRlRW50aXRpZXNMaXN0RmlsdGVyQmFyLFxuXHRcdHdpdGhFbnRpdHlQYWdpbmF0aW9uKCBwYWdpbmF0aW9uQ29uZmlnICksXG5cdF0gKSxcblx0J3dpdGhQYWdpbmF0ZWREYXRlRW50aXRpZXNMaXN0QW5kRmlsdGVyQmFyJ1xuKTtcblxuZXhwb3J0IHtcblx0d2l0aERhdGVFbnRpdGllc0xpc3RGaWx0ZXJCYXIsXG5cdHdpdGhEYXRlRW50aXRpZXNMaXN0RmlsdGVyU3RhdGUsXG5cdHdpdGhGaWx0ZXJlZERhdGVFbnRpdGllcyxcblx0d2l0aFBhZ2luYXRlZERhdGVFbnRpdGllc0xpc3RBbmRGaWx0ZXJCYXIsXG5cdGdldEZpbHRlcmVkRGF0ZUVudGl0aWVzTGlzdCxcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBGcmFnbWVudCwgdXNlTWVtbywgdXNlRWZmZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IEVudGl0eUxpc3RGaWx0ZXJCYXIgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9oaWdoZXItb3JkZXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBkZWZhdWx0IGFzIERhdGVMaXN0RmlsdGVyQmFyIH0gZnJvbSAnLi9kYXRlLWxpc3QtZmlsdGVyLWJhcic7XG5pbXBvcnQge1xuXHRmaWx0ZXJEYXRlRW50aXRpZXMsXG5cdHNlYXJjaERhdGVFbnRpdGllcyxcblx0c29ydERhdGVFbnRpdGllc0xpc3QsXG59IGZyb20gJy4vZGF0ZS1lbnRpdGllcy1saXN0LWZpbHRlci11dGlscyc7XG5cbmNvbnN0IERFRkFVTFRfRU1QVFlfQVJSQVkgPSBbXTtcblxuLyoqXG4gKiBmaWx0ZXJzIHRoZSBkYXRlcyBsaXN0IGJhc2VkIG9uIHRoZSBjdXJyZW50IGZpbHRlciBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGVFbnRpdGllc1xuICogQHBhcmFtIHtzdHJpbmd9IHNob3dEYXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IGRhdGVzU29ydGVkQnlcbiAqIEByZXR1cm4ge0FycmF5fSBmaWx0ZXJlZCBsaXN0IG9mIGRhdGVFbnRpdGllc1xuICovXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyZWREYXRlRW50aXRpZXNMaXN0ID0gKCBkYXRlRW50aXRpZXMsIHNob3dEYXRlcywgZGF0ZXNTb3J0ZWRCeSApID0+IHtcblx0cmV0dXJuIHNob3dEYXRlcyAmJiBkYXRlc1NvcnRlZEJ5ICYmICEgaXNFbXB0eSggZGF0ZUVudGl0aWVzICkgP1xuXHRcdHNvcnREYXRlRW50aXRpZXNMaXN0KFxuXHRcdFx0ZmlsdGVyRGF0ZUVudGl0aWVzKCBkYXRlRW50aXRpZXMsIHNob3dEYXRlcyApLFxuXHRcdFx0ZGF0ZXNTb3J0ZWRCeVxuXHRcdCkgOlxuXHRcdFtdO1xufTtcblxuLyoqXG4gKiB3aXRoRGF0ZUVudGl0aWVzTGlzdEZpbHRlckJhclxuICogSGlnaGVyLU9yZGVyLUNvbXBvbmVudCB0aGF0IHdyYXBzIGFuIFwiRW50aXR5TGlzdFwiIGNvbXBvbmVudFxuICogd2l0aCBhbiBFbnRpdHlMaXN0RmlsdGVyQmFyICYgRGF0ZUxpc3RGaWx0ZXJCYXIgY29tcG9uZW50XG4gKiB0aGF0IGNvbnRyb2xzIGhvdyBlbnRpdGllcyBhcmUgZGlzcGxheWVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IEVudGl0eUxpc3RcbiAqIEByZXR1cm4ge09iamVjdH0gRW50aXR5TGlzdCB3aXRoIGFkZGVkIERhdGVMaXN0RmlsdGVyQmFyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHQoIEVudGl0eUxpc3QgKSA9PiAoIHtcblx0XHRkaXNwbGF5RGF0ZXMsXG5cdFx0c2hvd0RhdGVzLFxuXHRcdGRhdGVzU29ydGVkQnksXG5cdFx0c2V0RGlzcGxheURhdGVzLFxuXHRcdHNldFNob3dEYXRlcyxcblx0XHRzZXREYXRlc1NvcnRlZEJ5LFxuXHRcdHNlYXJjaERhdGVOYW1lLFxuXHRcdGRhdGVzUGVyUGFnZSxcblx0XHRkYXRlc1ZpZXcsXG5cdFx0c2V0U2VhcmNoRGF0ZU5hbWUsXG5cdFx0c2V0RGF0ZXNQZXJQYWdlLFxuXHRcdHNldERhdGVzTGlzdFZpZXcsXG5cdFx0c2V0RGF0ZXNHcmlkVmlldyxcblx0XHRzZXRGaWx0ZXJlZERhdGVFbnRpdGllcyxcblx0XHRkYXRlRW50aXRpZXMgPSBERUZBVUxUX0VNUFRZX0FSUkFZLFxuXHRcdC4uLm90aGVyUHJvcHNcblx0fSApID0+IHtcblx0XHRjb25zdCBmaWx0ZXJlZEVudGl0aWVzID0gdXNlTWVtbyhcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgZW50aXRpZXMgPSBzZWFyY2hEYXRlRW50aXRpZXMoIGRhdGVFbnRpdGllcywgc2VhcmNoRGF0ZU5hbWUgKTtcblx0XHRcdFx0cmV0dXJuIGdldEZpbHRlcmVkRGF0ZUVudGl0aWVzTGlzdChcblx0XHRcdFx0XHRlbnRpdGllcyxcblx0XHRcdFx0XHRzaG93RGF0ZXMsXG5cdFx0XHRcdFx0ZGF0ZXNTb3J0ZWRCeVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdFtcblx0XHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdFx0XHRzZWFyY2hEYXRlTmFtZSxcblx0XHRcdFx0c2hvd0RhdGVzLFxuXHRcdFx0XHRkYXRlc1NvcnRlZEJ5LFxuXHRcdFx0XVxuXHRcdCk7XG5cdFx0Ly8gd2hlbmV2ZXIgZmlsdGVyZWQgZW50aXRpZXMgY2hhbmdlcyBsZXQncyB1cGRhdGUgdGhlIGRhdGUgaWRzXG5cdFx0Ly8gaW4gdGhlIHN0YXRlLlxuXHRcdHVzZUVmZmVjdCggKCkgPT4ge1xuXHRcdFx0c2V0RmlsdGVyZWREYXRlRW50aXRpZXMoXG5cdFx0XHRcdGZpbHRlcmVkRW50aXRpZXMubWFwKCAoIGRhdGVFbnRpdHkgKSA9PiBkYXRlRW50aXR5LmlkIClcblx0XHRcdCk7XG5cdFx0fSwgWyBmaWx0ZXJlZEVudGl0aWVzIF0gKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdDxFbnRpdHlMaXN0RmlsdGVyQmFyXG5cdFx0XHRcdFx0bmFtZT1cIkRhdGVMaXN0RmlsdGVyQmFyXCJcblx0XHRcdFx0XHRzZWFyY2hUZXh0PXsgc2VhcmNoRGF0ZU5hbWUgfVxuXHRcdFx0XHRcdHNldFNlYXJjaFRleHQ9eyBzZXRTZWFyY2hEYXRlTmFtZSB9XG5cdFx0XHRcdFx0cGVyUGFnZT17IGRhdGVzUGVyUGFnZSB9XG5cdFx0XHRcdFx0dmlldz17IGRhdGVzVmlldyB9XG5cdFx0XHRcdFx0c2V0UGVyUGFnZT17IHNldERhdGVzUGVyUGFnZSB9XG5cdFx0XHRcdFx0c2V0TGlzdFZpZXc9eyBzZXREYXRlc0xpc3RWaWV3IH1cblx0XHRcdFx0XHRzZXRHcmlkVmlldz17IHNldERhdGVzR3JpZFZpZXcgfVxuXHRcdFx0XHRcdGVudGl0eUZpbHRlcnM9e1xuXHRcdFx0XHRcdFx0PERhdGVMaXN0RmlsdGVyQmFyXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXlEYXRlcz17IGRpc3BsYXlEYXRlcyB9XG5cdFx0XHRcdFx0XHRcdHNob3dEYXRlcz17IHNob3dEYXRlcyB9XG5cdFx0XHRcdFx0XHRcdGRhdGVzU29ydGVkQnk9eyBkYXRlc1NvcnRlZEJ5IH1cblx0XHRcdFx0XHRcdFx0c2V0RGlzcGxheURhdGVzPXsgc2V0RGlzcGxheURhdGVzIH1cblx0XHRcdFx0XHRcdFx0c2V0U2hvd0RhdGVzPXsgc2V0U2hvd0RhdGVzIH1cblx0XHRcdFx0XHRcdFx0c2V0RGF0ZXNTb3J0ZWRCeT17IHNldERhdGVzU29ydGVkQnkgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdC8+XG5cdFx0XHRcdDxFbnRpdHlMaXN0XG5cdFx0XHRcdFx0ZW50aXRpZXM9eyBmaWx0ZXJlZEVudGl0aWVzIH1cblx0XHRcdFx0XHRlbnRpdGllc1BlclBhZ2U9eyBkYXRlc1BlclBhZ2UgfVxuXHRcdFx0XHRcdHZpZXc9eyBkYXRlc1ZpZXcgfVxuXHRcdFx0XHRcdG5vUmVzdWx0c1RleHQ9e1xuXHRcdFx0XHRcdFx0X18oXG5cdFx0XHRcdFx0XHRcdCdubyByZXN1bHRzIGZvdW5kICh0cnkgY2hhbmdpbmcgZmlsdGVycyknLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNob3dEYXRlPXsgZGlzcGxheURhdGVzIH1cblx0XHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9LFxuXHQnd2l0aERhdGVFbnRpdGllc0xpc3RGaWx0ZXJCYXInXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50LCBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhTZWxlY3QsIHdpdGhEaXNwYXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbmNvbnN0IERFRkFVTFRfRU1QVFlfQVJSQVkgPSBbXTtcblxuLyoqXG4gKiB3aXRoRGF0ZXNMaXN0RmlsdGVyU3RhdGVcbiAqIEhpZ2hlci1PcmRlci1Db21wb25lbnQgdGhhdCB3cmFwcyBhIFwiRGF0ZXNMaXN0RmlsdGVyQmFyXCIgY29tcG9uZW50XG4gKiAob3IgcGFyZW50IGNvbXBvbmVudCB0aGF0IHVsdGltYXRlbHkgd3JhcHMgYSBcIkRhdGVzTGlzdEZpbHRlckJhclwiIGNvbXBvbmVudClcbiAqIGluIG9yZGVyIHRvIHByb3ZpZGUgc3RhdGUgbWFuYWdlbWVudCBmb3IgaXQgYW5kIGl0cyBjaGlsZHJlblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBXcmFwcGVkQ29tcG9uZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9IFdyYXBwZWRDb21wb25lbnQgd2l0aCBhZGRlZCBEYXRlc0xpc3RGaWx0ZXJTdGF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0Y29tcG9zZSggW1xuXHRcdHdpdGhTZWxlY3QoICggc2VsZWN0LCBvd25Qcm9wcyApID0+IHtcblx0XHRcdGNvbnN0IHtcblx0XHRcdFx0c2hvd0RhdGVzID0gJ2FjdGl2ZS11cGNvbWluZycsXG5cdFx0XHRcdGRhdGVzU29ydGVkQnkgPSAnY2hyb25vbG9naWNhbGx5Jyxcblx0XHRcdFx0ZGlzcGxheURhdGVzID0gJ3N0YXJ0Jyxcblx0XHRcdFx0c2VhcmNoRGF0ZU5hbWUgPSAnJyxcblx0XHRcdFx0ZGF0ZXNQZXJQYWdlID0gNixcblx0XHRcdFx0ZGF0ZXNWaWV3ID0gJ2dyaWQnLFxuXHRcdFx0fSA9IG93blByb3BzO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdGNvbnN0IHsgZ2V0RW50aXRpZXNCeUlkcyB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2hvd0RhdGVzOiBzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2V2ZW50LWVkaXRvci1kYXRlcy1saXN0Jyxcblx0XHRcdFx0XHQnc2hvd0RhdGVzJyxcblx0XHRcdFx0XHRzaG93RGF0ZXNcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGF0ZXNTb3J0ZWRCeTogc3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItZGF0ZXMtbGlzdCcsXG5cdFx0XHRcdFx0J2RhdGVzU29ydGVkQnknLFxuXHRcdFx0XHRcdGRhdGVzU29ydGVkQnlcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGlzcGxheURhdGVzOiBzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2V2ZW50LWVkaXRvci1kYXRlcy1saXN0Jyxcblx0XHRcdFx0XHQnZGlzcGxheURhdGVzJyxcblx0XHRcdFx0XHRkaXNwbGF5RGF0ZXNcblx0XHRcdFx0KSxcblx0XHRcdFx0c2VhcmNoRGF0ZU5hbWU6IHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdzZWFyY2hEYXRlTmFtZScsXG5cdFx0XHRcdFx0c2VhcmNoRGF0ZU5hbWVcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGF0ZXNQZXJQYWdlOiBwYXJzZUludChcblx0XHRcdFx0XHRzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLWRhdGVzLWxpc3QnLFxuXHRcdFx0XHRcdFx0J2RhdGVzUGVyUGFnZScsXG5cdFx0XHRcdFx0XHRkYXRlc1BlclBhZ2Vcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdDEwXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRhdGVzVmlldzogc3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItZGF0ZXMtbGlzdCcsXG5cdFx0XHRcdFx0J2RhdGVzVmlldycsXG5cdFx0XHRcdFx0ZGF0ZXNWaWV3XG5cdFx0XHRcdCksXG5cdFx0XHRcdGZpbHRlcmVkRGF0ZUVudGl0aWVzOiBnZXRFbnRpdGllc0J5SWRzKFxuXHRcdFx0XHRcdCdkYXRldGltZScsXG5cdFx0XHRcdFx0c3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdFx0J2V2ZW50LWVkaXRvci1kYXRlcy1saXN0Jyxcblx0XHRcdFx0XHRcdCdmaWx0ZXJlZERhdGVJZHMnLFxuXHRcdFx0XHRcdFx0REVGQVVMVF9FTVBUWV9BUlJBWVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSxcblx0XHRcdH07XG5cdFx0fSApLFxuXHRcdHdpdGhEaXNwYXRjaCggKCBkaXNwYXRjaCApID0+IHtcblx0XHRcdGNvbnN0IHN0b3JlID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNldFNob3dEYXRlczogKCBzaG93RGF0ZXMgKSA9PiBzdG9yZS5zZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2V2ZW50LWVkaXRvci1kYXRlcy1saXN0Jyxcblx0XHRcdFx0XHQnc2hvd0RhdGVzJyxcblx0XHRcdFx0XHRzaG93RGF0ZXNcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0RGF0ZXNTb3J0ZWRCeTogKCBkYXRlc1NvcnRlZEJ5ICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItZGF0ZXMtbGlzdCcsXG5cdFx0XHRcdFx0J2RhdGVzU29ydGVkQnknLFxuXHRcdFx0XHRcdGRhdGVzU29ydGVkQnlcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0RGlzcGxheURhdGVzOiAoIGRpc3BsYXlEYXRlcyApID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLWRhdGVzLWxpc3QnLFxuXHRcdFx0XHRcdCdkaXNwbGF5RGF0ZXMnLFxuXHRcdFx0XHRcdGRpc3BsYXlEYXRlc1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRzZXRTZWFyY2hEYXRlTmFtZTogKCBzZWFyY2hEYXRlTmFtZSApID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdzZWFyY2hEYXRlTmFtZScsXG5cdFx0XHRcdFx0c2VhcmNoRGF0ZU5hbWVcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0RGF0ZXNQZXJQYWdlOiAoIGRhdGVzUGVyUGFnZSApID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLWRhdGVzLWxpc3QnLFxuXHRcdFx0XHRcdCdkYXRlc1BlclBhZ2UnLFxuXHRcdFx0XHRcdHBhcnNlSW50KCBkYXRlc1BlclBhZ2UsIDEwIClcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0RGF0ZXNMaXN0VmlldzogKCkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItZGF0ZXMtbGlzdCcsXG5cdFx0XHRcdFx0J2RhdGVzVmlldycsXG5cdFx0XHRcdFx0J2xpc3QnXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldERhdGVzR3JpZFZpZXc6ICgpID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLWRhdGVzLWxpc3QnLFxuXHRcdFx0XHRcdCdkYXRlc1ZpZXcnLFxuXHRcdFx0XHRcdCdncmlkJ1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRzZXRGaWx0ZXJlZERhdGVFbnRpdGllczogKCBkYXRlRW50aXR5SWRzICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItZGF0ZXMtbGlzdCcsXG5cdFx0XHRcdFx0J2ZpbHRlcmVkRGF0ZUlkcycsXG5cdFx0XHRcdFx0ZGF0ZUVudGl0eUlkc1xuXHRcdFx0XHQpLFxuXHRcdFx0fTtcblx0XHR9ICksXG5cdF0gKSxcblx0J3dpdGhEYXRlRW50aXRpZXNMaXN0RmlsdGVyU3RhdGUnXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuXG5jb25zdCBERUZBVUxUX0VNUFRZX0FSUkFZID0gW107XG5cbmNvbnN0IHdpdGhGaWx0ZXJlZERhdGVFbnRpdGllcyA9IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KFxuXHRcdCggc2VsZWN0ICkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdGNvbnN0IHsgZ2V0RW50aXRpZXNCeUlkcyB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZmlsdGVyZWREYXRlRW50aXRpZXM6IGdldEVudGl0aWVzQnlJZHMoXG5cdFx0XHRcdFx0J2RhdGV0aW1lJyxcblx0XHRcdFx0XHRzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLWRhdGVzLWxpc3QnLFxuXHRcdFx0XHRcdFx0J2ZpbHRlcmVkRGF0ZUlkcycsXG5cdFx0XHRcdFx0XHRERUZBVUxUX0VNUFRZX0FSUkFZXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpLFxuXHRcdFx0fTtcblx0XHR9XG5cdCksXG5cdCd3aXRoRmlsdGVyZWREYXRlRW50aXRpZXMnXG4pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoRmlsdGVyZWREYXRlRW50aXRpZXM7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZGF0ZXMtbGlzdC1ncmlkLXZpZXdcIjpcImVlLWRhdGVzLWxpc3QtZ3JpZC12aWV3XCIsXCJlZS1lZGl0b3ItZGF0ZS1tYWluXCI6XCJlZS1lZGl0b3ItZGF0ZS1tYWluXCIsXCJlZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXdyYXBwZXItZGl2XCI6XCJlZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXdyYXBwZXItZGl2XCIsXCJlZS1lZGl0b3ItZGF0ZS1uYW1lLWhlYWRpbmdcIjpcImVlLWVkaXRvci1kYXRlLW5hbWUtaGVhZGluZ1wiLFwiZWUtaW5saW5lLWVkaXQtdGV4dFwiOlwiZWUtaW5saW5lLWVkaXQtdGV4dFwiLFwiZWUtbG9uZy10aXRsZVwiOlwiZWUtbG9uZy10aXRsZVwiLFwiZWUtZWRpdG9yLWRhdGUtZGVzYy1kaXZcIjpcImVlLWVkaXRvci1kYXRlLWRlc2MtZGl2XCIsXCJlZS1kYXRlLWRlc2MtZXhjZXJwdFwiOlwiZWUtZGF0ZS1kZXNjLWV4Y2VycHRcIixcImVlLWVkaXRvci1kYXRlLWxvY2F0aW9uLWRpdlwiOlwiZWUtZWRpdG9yLWRhdGUtbG9jYXRpb24tZGl2XCIsXCJlZS1lZGl0b3ItZGF0ZS1lZGl0LXZlbnVlLWxpbmtcIjpcImVlLWVkaXRvci1kYXRlLWVkaXQtdmVudWUtbGlua1wiLFwiZWUtZWRpdG9yLWRhdGUtdmVudWUtbmFtZS1zcGFuXCI6XCJlZS1lZGl0b3ItZGF0ZS12ZW51ZS1uYW1lLXNwYW5cIixcImRhc2hpY29uXCI6XCJkYXNoaWNvblwiLFwiZWUtbWVudS1pdGVtLWljb25cIjpcImVlLW1lbnUtaXRlbS1pY29uXCIsXCJkYXNoaWNvbnMtbG9jYXRpb25cIjpcImRhc2hpY29ucy1sb2NhdGlvblwiLFwiZWUtZWRpdG9yLWRhdGUtZGV0YWlscy1zb2xkLXJzcnZkLWNhcC1kaXZcIjpcImVlLWVkaXRvci1kYXRlLWRldGFpbHMtc29sZC1yc3J2ZC1jYXAtZGl2XCIsXCJlZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnVcIjpcImVlLWVkaXRvci1kYXRlLWFjdGlvbnMtbWVudVwiLFwiZXZlbnQtZGF0ZS1yZWdpc3RyYW50cy1sYWJlbFwiOlwiZXZlbnQtZGF0ZS1yZWdpc3RyYW50cy1sYWJlbFwifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgRWRpdG9yRGF0ZUVudGl0eUdyaWRJdGVtIGZyb20gJy4vZWRpdG9yLWRhdGUtZW50aXR5LWdyaWQtaXRlbSc7XG5pbXBvcnQgJy4vZWRpdG9yLWRhdGUtZW50aXRpZXMtZ3JpZC12aWV3LmNzcyc7XG5cbi8qKlxuICogRWRpdG9yRGF0ZUVudGl0aWVzR3JpZFZpZXdcbiAqIERpc3BsYXlzIGRhdGVzIGFzIG1vYmlsZS9maW5nZXIgZnJpZW5kbHkgYmxvY2tzXG4gKiB3aXRoIHRoZSBtb3N0IHJlbGV2YW50IGluZm8gdmlzaWJsZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtBcnJheX0gZW50aXRpZXMgICAgYXJyYXkgb2YgSlNPTiBvYmplY3RzIGRlZmluaW5nIHRoZSBFdmVudCBEYXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHttaXhlZH0gb3RoZXJQcm9wc1xuICogQHJldHVybiB7Q29tcG9uZW50fSAgICAgICAgICBsaXN0IG9mIHJlbmRlcmVkIEV2ZW50IERhdGVzXG4gKi9cbmNvbnN0IEVkaXRvckRhdGVFbnRpdGllc0dyaWRWaWV3ID0gKCB7XG5cdGVudGl0aWVzLFxuXHRodG1sQ2xhc3MsXG5cdC4uLm90aGVyUHJvcHNcbn0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGNsYXNzTmFtZXMoIGh0bWxDbGFzcywgJ2VlLWRhdGVzLWxpc3QtZ3JpZC12aWV3JyApO1xuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0+XG5cdFx0XHR7XG5cdFx0XHRcdGVudGl0aWVzLm1hcChcblx0XHRcdFx0XHRmdW5jdGlvbiggZGF0ZUVudGl0eSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBpc01vZGVsRW50aXR5T2ZNb2RlbChcblx0XHRcdFx0XHRcdFx0ZGF0ZUVudGl0eSxcblx0XHRcdFx0XHRcdFx0J2RhdGV0aW1lJ1xuXHRcdFx0XHRcdFx0KSA/XG5cdFx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0XHQ8RWRpdG9yRGF0ZUVudGl0eUdyaWRJdGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRrZXk9eyBkYXRlRW50aXR5LmlkIH1cblx0XHRcdFx0XHRcdFx0XHRcdGRhdGVFbnRpdHk9eyBkYXRlRW50aXR5IH1cblx0XHRcdFx0XHRcdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0KSA6XG5cdFx0XHRcdFx0XHRcdG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0PC9kaXY+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFZGl0b3JEYXRlRW50aXRpZXNHcmlkVmlldztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IERhc2hpY29uLCBUb29sdGlwIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGFkZFF1ZXJ5QXJncyB9IGZyb20gJ0B3b3JkcHJlc3MvdXJsJztcbmltcG9ydCB7IEVudGl0eURldGFpbHNQYW5lbCwgSW5saW5lRWRpdElucHV0IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vY29tcG9uZW50cyc7XG5pbXBvcnQge1xuXHRpZlZhbGlkRGF0ZUVudGl0eSxcblx0d2l0aEV2ZW50VmVudWVFbnRpdHksXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2VkaXRvci1ob2NzJztcbmltcG9ydCB7IHJvdXRlcyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGRhdGVUaW1lTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG5jb25zdCB7IE1PREVMX05BTUU6IERBVEVUSU1FIH0gPSBkYXRlVGltZU1vZGVsO1xuY29uc3Qge1xuXHRBRE1JTl9ST1VURVMsXG5cdEFETUlOX1JPVVRFX0FDVElPTlMsXG5cdEFETUlOX1JPVVRFX0FDVElPTl9ERUZBVUxULFxuXHRnZXRBZG1pblVybCxcbn0gPSByb3V0ZXM7XG4vKipcbiAqIEVkaXRvckRhdGVFbnRpdHlEZXRhaWxzXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBKU09OIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZVxuICogQHJldHVybiB7c3RyaW5nfSAgICBkYXRlIGRldGFpbHNcbiAqL1xuY2xhc3MgRWRpdG9yRGF0ZUVudGl0eURldGFpbHMgZXh0ZW5kcyBDb21wb25lbnQge1xuXHQvKipcblx0ICogZGF0ZU5hbWVcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5IFx0bW9kZWwgb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gICAgZGF0ZSBuYW1lXG5cdCAqL1xuXHRkYXRlTmFtZSA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0XHRjb25zdCBodG1sQ2xhc3MgPSBjbGFzc05hbWVzKFxuXHRcdFx0J2VlLWVkaXRvci1kYXRlLW5hbWUtaGVhZGluZycsXG5cdFx0XHR7XG5cdFx0XHRcdCdlZS1sb25nLXRpdGxlJzogZGF0ZUVudGl0eS5uYW1lICYmIGRhdGVFbnRpdHkubmFtZS5sZW5ndGggPiA0MCxcblx0XHRcdH1cblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8aDEgY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0+XG5cdFx0XHRcdDxJbmxpbmVFZGl0SW5wdXRcblx0XHRcdFx0XHRodG1sSWQ9eyBgZXZlbnQtZGF0ZS1uYW1lLSR7IGRhdGVFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcblx0XHRcdFx0XHR2YWx1ZT17IGRhdGVFbnRpdHkubmFtZSB9XG5cdFx0XHRcdFx0b25DaGFuZ2U9eyAoIG5hbWUgKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy51cGRhdGVOYW1lKCBuYW1lLCBkYXRlRW50aXR5ICk7XG5cdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0bGFiZWw9eyBfXyggJ0RhdGUgTmFtZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0bm90aWNlU3R5bGU9e1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiAnNTBweCcsXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9oMT5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBkZXNjcmlwdGlvblxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgICAgbW9kZWwgb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzaG93RGVzY1xuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IGRhdGUgZGVzY3JpcHRpb25cblx0ICovXG5cdGRlc2NyaXB0aW9uID0gKCBkYXRlRW50aXR5LCBzaG93RGVzYyApID0+IHtcblx0XHRjb25zdCBodG1sQ2xhc3MgPSBjbGFzc05hbWVzKFxuXHRcdFx0J2VlLWVkaXRvci1kYXRlLWRlc2MtZGl2Jyxcblx0XHRcdHtcblx0XHRcdFx0J2VlLWRhdGUtZGVzYy1leGNlcnB0Jzogc2hvd0Rlc2MgPT09ICdleGNlcnB0Jyxcblx0XHRcdH1cblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9PlxuXHRcdFx0XHQ8SW5saW5lRWRpdElucHV0XG5cdFx0XHRcdFx0aHRtbElkPXsgYGV2ZW50LWRhdGUtZGVzYy0keyBkYXRlRW50aXR5LmlkIH1gIH1cblx0XHRcdFx0XHR0eXBlPVwidGV4dGFyZWFcIlxuXHRcdFx0XHRcdHZhbHVlPXsgZGF0ZUVudGl0eS5kZXNjcmlwdGlvbiB9XG5cdFx0XHRcdFx0b25DaGFuZ2U9eyAoIGRlc2MgKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy51cGRhdGVEZXNjcmlwdGlvbiggZGVzYywgZGF0ZUVudGl0eSApO1xuXHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdGxhYmVsPXsgX18oICdEYXRlIERlc2NyaXB0aW9uJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIHZlbnVlTmFtZVxuXHQgKnNwY28tZGlzcGxheS1ldmVudC1xdWVzdGlvbnMtbG5rXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gdmVudWVFbnRpdHkgbW9kZWwgb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlIFZlbnVlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd1ZlbnVlXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gZWRpdCB2ZW51ZSBsaW5rXG5cdCAqL1xuXHR2ZW51ZU5hbWUgPSAoIHZlbnVlRW50aXR5LCBzaG93VmVudWUgKSA9PiB7XG5cdFx0aWYgKCAhIHZlbnVlRW50aXR5IHx8ICEgc2hvd1ZlbnVlICkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblx0XHRjb25zdCBlZGl0VmVudWVVcmwgPSBhZGRRdWVyeUFyZ3MoXG5cdFx0XHRnZXRBZG1pblVybChcblx0XHRcdFx0QURNSU5fUk9VVEVTLlZFTlVFUyxcblx0XHRcdFx0QURNSU5fUk9VVEVfQUNUSU9OUy5WRU5VRVMuRURJVFxuXHRcdFx0KSxcblx0XHRcdHtcblx0XHRcdFx0cG9zdDogdmVudWVFbnRpdHkuaWQsXG5cdFx0XHRcdHJldHVybjogJ2VkaXQnLFxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxoMyBjbGFzc05hbWU9XCJlZS1lZGl0b3ItZGF0ZS1sb2NhdGlvbi1kaXZcIj5cblx0XHRcdFx0PFRvb2x0aXBcblx0XHRcdFx0XHR0ZXh0PXsgX18oXG5cdFx0XHRcdFx0XHQndmVudWUgZWRpdG9yIG9wZW5zIGluIGEgbmV3IHdpbmRvdycsXG5cdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHRcdCkgfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGFcblx0XHRcdFx0XHRcdGhyZWY9eyBlZGl0VmVudWVVcmwgfVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtZWRpdG9yLWRhdGUtZWRpdC12ZW51ZS1saW5rXCJcblx0XHRcdFx0XHRcdHRhcmdldD1cIl9ibGFua1wiXG5cdFx0XHRcdFx0XHRyZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RGFzaGljb24gaWNvbj1cImFkbWluLWhvbWVcIiBzaXplPXsgMTYgfSAvPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZWRpdG9yLWRhdGUtdmVudWUtbmFtZS1zcGFuXCI+XG5cdFx0XHRcdFx0XHRcdHsgdmVudWVFbnRpdHkubmFtZSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8RGFzaGljb24gaWNvbj1cImV4dGVybmFsXCIgc2l6ZT17IDEyIH0gLz5cblx0XHRcdFx0XHQ8L2E+XG5cdFx0XHRcdDwvVG9vbHRpcD5cblx0XHRcdDwvaDM+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogZGF0ZVNvbGRSZXNlcnZlZENhcGFjaXR5XG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRFbnRpdHkgICAgICAgIG1vZGVsIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnRcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgICAgbW9kZWwgb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gICAgZGF0ZSBkZXRhaWxzXG5cdCAqL1xuXHRkYXRlU29sZFJlc2VydmVkQ2FwYWNpdHkgPSAoIGV2ZW50RW50aXR5LCBkYXRlRW50aXR5ICkgPT4ge1xuXHRcdGNvbnN0IGRldGFpbHMgPSBbXG5cdFx0XHR7XG5cdFx0XHRcdGlkOiAnZXZlbnQtZGF0ZS1zb2xkJyxcblx0XHRcdFx0bGFiZWw6IF9fKCAnc29sZCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0dmFsdWU6IGRhdGVFbnRpdHkuc29sZCB8fCAwLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0aWQ6ICdldmVudC1kYXRlLXJlc2VydmVkJyxcblx0XHRcdFx0bGFiZWw6IF9fKCAncmVzZXJ2ZWQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdHZhbHVlOiBkYXRlRW50aXR5LnJlc2VydmVkIHx8IDAsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogJ2V2ZW50LWRhdGUtY2FwYWNpdHknLFxuXHRcdFx0XHRsYWJlbDogX18oICdjYXBhY2l0eScsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0dmFsdWU6IGRhdGVFbnRpdHkucmVnTGltaXQgfHwgSW5maW5pdHksXG5cdFx0XHRcdGVkaXRhYmxlOiB7XG5cdFx0XHRcdFx0dHlwZTogJ3RleHQnLFxuXHRcdFx0XHRcdHZhbHVlVHlwZTogJ251bWJlcicsXG5cdFx0XHRcdFx0b25DaGFuZ2U6ICggY2FwYWNpdHkgKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy51cGRhdGVDYXBhY2l0eSggY2FwYWNpdHksIGRhdGVFbnRpdHkgKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0aWQ6ICdldmVudC1kYXRlLXJlZ2lzdHJhbnRzJyxcblx0XHRcdFx0aHRtbENsYXNzOiAnaGFzLXRvb2x0aXAnLFxuXHRcdFx0XHRsYWJlbDogX18oICdyZWdpc3RyYW50cycsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0dmFsdWU6IHRoaXMuZ2V0RGF0ZXRpbWVSZWdpc3RyYXRpb25zTGluayggZXZlbnRFbnRpdHksIGRhdGVFbnRpdHkgKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0XHRyZXR1cm4gPEVudGl0eURldGFpbHNQYW5lbFxuXHRcdFx0ZGV0YWlscz17IGRldGFpbHMgfVxuXHRcdFx0aHRtbENsYXNzPVwiZWUtZWRpdG9yLWRhdGUtZGV0YWlscy1zb2xkLXJzcnZkLWNhcC1kaXZcIlxuXHRcdC8+O1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBkYXRlU29sZFJlc2VydmVkQ2FwYWNpdHlcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudEVudGl0eSAgICAgICAgQmFzZSBlbnRpdHkgaW5zdGFuY2UgZm9yIGV2ZW50LlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBtb2RlbCBvYmplY3QgZGVmaW5pbmcgdGhlIEV2ZW50IERhdGVcblx0ICogQHJldHVybiB7c3RyaW5nfSAgICBsaW5rIHRvIHJlZ2lzdHJhdGlvbnMgbGlzdCB0YWJsZSBmb3IgZGF0ZXRpbWVcblx0ICovXG5cdGdldERhdGV0aW1lUmVnaXN0cmF0aW9uc0xpbmsgPSAoIGV2ZW50RW50aXR5LCBkYXRlRW50aXR5ICkgPT4ge1xuXHRcdGNvbnN0IHJlZ0xpc3RVcmwgPSBhZGRRdWVyeUFyZ3MoXG5cdFx0XHRnZXRBZG1pblVybCggQURNSU5fUk9VVEVTLlJFR0lTVFJBVElPTlMsIEFETUlOX1JPVVRFX0FDVElPTl9ERUZBVUxUICksXG5cdFx0XHR7XG5cdFx0XHRcdGV2ZW50X2lkOiBldmVudEVudGl0eS5pZCxcblx0XHRcdFx0ZGF0ZXRpbWVfaWQ6IGRhdGVFbnRpdHkuaWQsXG5cdFx0XHRcdHJldHVybjogJ2VkaXQnLFxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUb29sdGlwXG5cdFx0XHRcdHRleHQ9eyBfXyhcblx0XHRcdFx0XHQndmlldyByZWdpc3RyYXRpb25zIGZvciB0aGlzIGRhdGV0aW1lLicsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHQpIH1cblx0XHRcdD5cblx0XHRcdFx0PGFcblx0XHRcdFx0XHRocmVmPXsgcmVnTGlzdFVybCB9XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXsgJ2VlLWVkaXRvci1kYXRlLWRldGFpbHMtcmVnLXVybC1saW5rJyB9XG5cdFx0XHRcdFx0dGFyZ2V0PXsgJ19ibGFuaycgfVxuXHRcdFx0XHRcdHJlbD17ICdub29wZW5lciBub3JlZmZlcmVyJyB9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8RGFzaGljb24gaWNvbj1cImdyb3Vwc1wiIHNpemU9eyAyNCB9IC8+XG5cdFx0XHRcdDwvYT5cblx0XHRcdDwvVG9vbHRpcD5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgXHRcdG5ldyBuYW1lIGZvciBldmVudCBkYXRlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICAgIG1vZGVsIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZVxuXHQgKi9cblx0dXBkYXRlTmFtZSA9ICggbmFtZSwgZGF0ZUVudGl0eSApID0+IHtcblx0XHRpZiAoXG5cdFx0XHRpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgREFURVRJTUUgKSAmJlxuXHRcdFx0ZGF0ZUVudGl0eS5uYW1lICE9PSBuYW1lXG5cdFx0KSB7XG5cdFx0XHRkYXRlRW50aXR5Lm5hbWUgPSBuYW1lO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvbiBcdG5ldyBkZXNjcmlwdGlvbiBmb3IgZXZlbnQgZGF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBtb2RlbCBvYmplY3QgZGVmaW5pbmcgdGhlIEV2ZW50IERhdGVcblx0ICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBzYXZlZFxuXHQgKi9cblx0dXBkYXRlRGVzY3JpcHRpb24gPSBhc3luYyAoIGRlc2NyaXB0aW9uLCBkYXRlRW50aXR5ICkgPT4ge1xuXHRcdGlmIChcblx0XHRcdGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBkYXRlRW50aXR5LCBEQVRFVElNRSApICYmXG5cdFx0XHRkYXRlRW50aXR5LmRlc2NyaXB0aW9uICE9PSBkZXNjcmlwdGlvblxuXHRcdCkge1xuXHRcdFx0ZGF0ZUVudGl0eS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gXHRcdGNhcGFjaXR5IG5ldyByZWcgbGltaXQgZm9yIGV2ZW50IGRhdGVcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgICAgbW9kZWwgb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG5cdCAqL1xuXHR1cGRhdGVDYXBhY2l0eSA9ICggY2FwYWNpdHksIGRhdGVFbnRpdHkgKSA9PiB7XG5cdFx0Y2FwYWNpdHkgPSBwYXJzZUludCggY2FwYWNpdHksIDEwICk7XG5cdFx0aWYgKFxuXHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoIGRhdGVFbnRpdHksIERBVEVUSU1FICkgJiZcblx0XHRcdGRhdGVFbnRpdHkucmVnTGltaXQgIT09IGNhcGFjaXR5XG5cdFx0KSB7XG5cdFx0XHRkYXRlRW50aXR5LnJlZ0xpbWl0ID0gY2FwYWNpdHk7XG5cdFx0fVxuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7IGV2ZW50RW50aXR5LCBkYXRlRW50aXR5LCB2ZW51ZUVudGl0eSB9ID0gdGhpcy5wcm9wcztcblx0XHRjb25zdCB7IHNob3dEZXNjID0gJ2V4Y2VycHQnLCBzaG93VmVudWUgPSB0cnVlIH0gPSB0aGlzLnByb3BzO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17ICdlZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXdyYXBwZXItZGl2JyB9PlxuXHRcdFx0XHR7IHRoaXMuZGF0ZU5hbWUoIGRhdGVFbnRpdHkgKSB9XG5cdFx0XHRcdHsgdGhpcy5kZXNjcmlwdGlvbiggZGF0ZUVudGl0eSwgc2hvd0Rlc2MgKSB9XG5cdFx0XHRcdHsgdGhpcy52ZW51ZU5hbWUoIHZlbnVlRW50aXR5LCBzaG93VmVudWUgKSB9XG5cdFx0XHRcdHsgdGhpcy5kYXRlU29sZFJlc2VydmVkQ2FwYWNpdHkoIGV2ZW50RW50aXR5LCBkYXRlRW50aXR5ICkgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKCBbXG5cdGlmVmFsaWREYXRlRW50aXR5LFxuXHR3aXRoRXZlbnRWZW51ZUVudGl0eSxcbl0gKSggRWRpdG9yRGF0ZUVudGl0eURldGFpbHMgKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHtcblx0QmlnZ2llQ2FsZW5kYXJEYXRlLFxuXHRDYWxlbmRhckRhdGVSYW5nZSxcblx0d2l0aEVudGl0eVBhcGVyRnJhbWUsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcblx0aWZWYWxpZERhdGVFbnRpdHksXG5cdHdpdGhFdmVudFZlbnVlRW50aXR5LFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZGl0b3ItaG9jcyc7XG5pbXBvcnQgeyBkYXRlVGltZU1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgRWRpdG9yRGF0ZUVudGl0eURldGFpbHMgZnJvbSAnLi9lZGl0b3ItZGF0ZS1lbnRpdHktZGV0YWlscyc7XG5pbXBvcnQgRWRpdG9yRGF0ZUVudGl0eUFjdGlvbnNNZW51XG5cdGZyb20gJy4uL2FjdGlvbnMtbWVudS9lZGl0b3ItZGF0ZS1lbnRpdHktYWN0aW9ucy1tZW51JztcblxuY29uc3QgeyBnZXRCYWNrZ3JvdW5kQ29sb3JDbGFzcywgZ2V0RGF0ZVRpbWVTdGF0dXNUZXh0TGFiZWwgfSA9IGRhdGVUaW1lTW9kZWw7XG5cbi8qKlxuICogRWRpdG9yRGF0ZUdyaWRJdGVtXG4gKiBDb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgYW4gRXZlbnQgRGF0ZSBhcyBhIHZpc3VhbCBibG9jayBpbiBncmlkIHZpZXdzXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0ZSAgICBKU09OIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZVxuICovXG5jbGFzcyBFZGl0b3JEYXRlRW50aXR5R3JpZEl0ZW0gZXh0ZW5kcyBDb21wb25lbnQge1xuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzaG93RGF0ZVxuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGRhdGVcblx0ICovXG5cdGRpc3BsYXlEYXRlID0gKCBkYXRlRW50aXR5LCBzaG93RGF0ZSApID0+IHtcblx0XHRsZXQgc2lkZWJhckNvbG9yQ2xhc3MgPSAnZWUtZWRpdG9yLWRhdGUtY2FsZW5kYXItc2lkZWJhciAnO1xuXHRcdHNpZGViYXJDb2xvckNsYXNzICs9IGdldEJhY2tncm91bmRDb2xvckNsYXNzKCBkYXRlRW50aXR5ICk7XG5cdFx0Y29uc3QgZGF0ZVN0YXR1cyA9IChcblx0XHRcdDxkaXYga2V5PXsgMSB9IGNsYXNzTmFtZT17ICdlZS1zdGF0dXMtdGFnJyB9PlxuXHRcdFx0XHR7IGdldERhdGVUaW1lU3RhdHVzVGV4dExhYmVsKCBkYXRlRW50aXR5ICkgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0XHRzd2l0Y2ggKCBzaG93RGF0ZSApIHtcblx0XHRcdGNhc2UgJ2VuZCcgOlxuXHRcdFx0XHRjb25zdCBlbmRUaW1lID0gZGF0ZUVudGl0eS5lbmQudG9Gb3JtYXQoICdoOm1tIGEnICk7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJpZ2dpZUNhbGVuZGFyRGF0ZVxuXHRcdFx0XHRcdFx0ZGF0ZT17IGRhdGVFbnRpdHkuZW5kIH1cblx0XHRcdFx0XHRcdGh0bWxDbGFzcz17IHNpZGViYXJDb2xvckNsYXNzIH1cblx0XHRcdFx0XHRcdGhlYWRlclRleHQ9eyBfXyggJ2VuZHMnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0Zm9vdGVyVGV4dD17IFsgZW5kVGltZSwgZGF0ZVN0YXR1cyBdIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSAnYm90aCcgOlxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxDYWxlbmRhckRhdGVSYW5nZVxuXHRcdFx0XHRcdFx0c3RhcnREYXRlPXsgZGF0ZUVudGl0eS5zdGFydCB9XG5cdFx0XHRcdFx0XHRlbmREYXRlPXsgZGF0ZUVudGl0eS5lbmQgfVxuXHRcdFx0XHRcdFx0aHRtbENsYXNzPXsgc2lkZWJhckNvbG9yQ2xhc3MgfVxuXHRcdFx0XHRcdFx0aGVhZGVyVGV4dD17IF9fKCAnRXZlbnQgRGF0ZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHRmb290ZXJUZXh0PXsgZGF0ZVN0YXR1cyB9XG5cdFx0XHRcdFx0XHRzaG93VGltZVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdzdGFydCcgOlxuXHRcdFx0ZGVmYXVsdCA6XG5cdFx0XHRcdGNvbnN0IHN0YXJ0VGltZSA9IGRhdGVFbnRpdHkuc3RhcnQudG9Gb3JtYXQoICdoOm1tIGEnICk7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJpZ2dpZUNhbGVuZGFyRGF0ZVxuXHRcdFx0XHRcdFx0ZGF0ZT17IGRhdGVFbnRpdHkuc3RhcnQgfVxuXHRcdFx0XHRcdFx0aHRtbENsYXNzPXsgc2lkZWJhckNvbG9yQ2xhc3MgfVxuXHRcdFx0XHRcdFx0aGVhZGVyVGV4dD17IF9fKCAnc3RhcnRzJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdGZvb3RlclRleHQ9eyBbIHN0YXJ0VGltZSwgZGF0ZVN0YXR1cyBdIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0ZGF0ZUVudGl0eSxcblx0XHRcdGV2ZW50RW50aXR5LFxuXHRcdFx0c2hvd0RhdGUgPSAnc3RhcnQnLFxuXHRcdFx0c2hvd0Rlc2MgPSAnZXhjZXJwdCcsXG5cdFx0XHRzaG93VmVudWUgPSB0cnVlLFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdGNvbnN0IGRhdGVTdHlsZUNsYXNzID0gY2xhc3NOYW1lcyhcblx0XHRcdCdlZS1lZGl0b3ItZGF0ZS1tYWluJyxcblx0XHRcdHtcblx0XHRcdFx0J2VlLWVkaXRvci1kYXRlLXJhbmdlJzogc2hvd0RhdGUgPT09ICdib3RoJyxcblx0XHRcdFx0J2VlLWVkaXRvci1kYXRlLXNpbmdsZSc6IHNob3dEYXRlICE9PSAnYm90aCcsXG5cdFx0XHR9XG5cdFx0KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGRhdGVTdHlsZUNsYXNzIH0+XG5cdFx0XHRcdFx0eyB0aGlzLmRpc3BsYXlEYXRlKCBkYXRlRW50aXR5LCBzaG93RGF0ZSApIH1cblx0XHRcdFx0XHQ8RWRpdG9yRGF0ZUVudGl0eURldGFpbHNcblx0XHRcdFx0XHRcdGV2ZW50RW50aXR5PXsgZXZlbnRFbnRpdHkgfVxuXHRcdFx0XHRcdFx0ZGF0ZUVudGl0eT17IGRhdGVFbnRpdHkgfVxuXHRcdFx0XHRcdFx0c2hvd0Rlc2M9eyBzaG93RGVzYyB9XG5cdFx0XHRcdFx0XHRzaG93VmVudWU9eyBzaG93VmVudWUgfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8RWRpdG9yRGF0ZUVudGl0eUFjdGlvbnNNZW51XG5cdFx0XHRcdFx0ZXZlbnRFbnRpdHk9eyBldmVudEVudGl0eSB9XG5cdFx0XHRcdFx0ZGF0ZUVudGl0eT17IGRhdGVFbnRpdHkgfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0aWZWYWxpZERhdGVFbnRpdHksXG5cdHdpdGhFdmVudFZlbnVlRW50aXR5LFxuXHR3aXRoRW50aXR5UGFwZXJGcmFtZSxcbl0gKSggRWRpdG9yRGF0ZUVudGl0eUdyaWRJdGVtICk7XG4iLCJleHBvcnQge1xuXHRkZWZhdWx0IGFzIEVkaXRvckRhdGVFbnRpdHlEZXRhaWxzLFxufSBmcm9tICcuL2VkaXRvci1kYXRlLWVudGl0eS1kZXRhaWxzJztcbmV4cG9ydCB7XG5cdGRlZmF1bHQgYXMgRWRpdG9yRGF0ZUVudGl0eUdyaWRJdGVtLFxufSBmcm9tICcuL2VkaXRvci1kYXRlLWVudGl0eS1ncmlkLWl0ZW0nO1xuZXhwb3J0IHtcblx0ZGVmYXVsdCBhcyBFZGl0b3JEYXRlRW50aXRpZXNHcmlkVmlldyxcbn0gZnJvbSAnLi9lZGl0b3ItZGF0ZS1lbnRpdGllcy1ncmlkLXZpZXcnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9hY3Rpb24taGFuZGxlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpb25zLW1lbnUnO1xuZXhwb3J0ICogZnJvbSAnLi9lZGl0LWZvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9maWx0ZXItYmFyJztcbmV4cG9ydCAqIGZyb20gJy4vZ3JpZC12aWV3JztcbmV4cG9ydCAqIGZyb20gJy4vbGlzdC12aWV3JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWRpdG9yRGF0ZUVudGl0aWVzTGlzdCB9IGZyb20gJy4vZWRpdG9yLWRhdGUtZW50aXRpZXMtbGlzdCc7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZGF0ZXMtbGlzdC1saXN0LXZpZXdcIjpcImVlLWRhdGVzLWxpc3QtbGlzdC12aWV3XCIsXCJlZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zXCI6XCJlZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zXCIsXCJlZS1lZGl0b3ItZGF0ZS1saXN0LXZpZXctZGl2XCI6XCJlZS1lZGl0b3ItZGF0ZS1saXN0LXZpZXctZGl2XCIsXCJlZS1kYXRlLWxpc3QtaXRlbVwiOlwiZWUtZGF0ZS1saXN0LWl0ZW1cIixcImVlLWluZmluaXR5LXNpZ25cIjpcImVlLWluZmluaXR5LXNpZ25cIixcImRhc2hpY29uc1wiOlwiZGFzaGljb25zXCIsXCJlZS1kYXRlLWxpc3QtaXRlbS1sYWJlbFwiOlwiZWUtZGF0ZS1saXN0LWl0ZW0tbGFiZWxcIixcImVlLWRhdGUtbGlzdC1pdGVtLXZhbHVlXCI6XCJlZS1kYXRlLWxpc3QtaXRlbS12YWx1ZVwiLFwiZWUtZWRpdG9yLWRhdGUtYWN0aW9ucy1tZW51XCI6XCJlZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnVcIixcImVlLWVkaXRvci1kYXRlLWRldGFpbHMtcmVnLXVybC1saW5rXCI6XCJlZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXJlZy11cmwtbGlua1wiLFwiZWUtZHJvcGRvd24tbWVudS1kaXZcIjpcImVlLWRyb3Bkb3duLW1lbnUtZGl2XCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgRWRpdG9yRGF0ZUVudGl0eUxpc3RJdGVtIGZyb20gJy4vZWRpdG9yLWRhdGUtZW50aXR5LWxpc3QtaXRlbSc7XG5pbXBvcnQgJy4vZWRpdG9yLWRhdGUtZW50aXRpZXMtbGlzdC12aWV3LmNzcyc7XG5cbi8qKlxuICogRWRpdG9yRGF0ZXNMaXN0Vmlld1xuICogRGlzcGxheXMgZGF0ZXMgaW4gYSBzdGFuZGFyZCBsaXN0IHRhYmxlIGxpa2Ugdmlld1xuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtBcnJheX0gZW50aXRpZXMgXHRhcnJheSBvZiBKU09OIG9iamVjdHMgZGVmaW5pbmcgdGhlIEV2ZW50IERhdGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge21peGVkfSBvdGhlclByb3BzXG4gKiBAcmV0dXJuIHtDb21wb25lbnR9IFx0XHRcdGxpc3Qgb2YgcmVuZGVyZWQgRXZlbnQgRGF0ZXNcbiAqL1xuY29uc3QgRWRpdG9yRGF0ZUVudGl0aWVzTGlzdFZpZXcgPSAoIHtcblx0ZW50aXRpZXMsXG5cdGh0bWxDbGFzcyxcblx0Li4ub3RoZXJQcm9wc1xufSApID0+IHtcblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcyggaHRtbENsYXNzLCAnZWUtZGF0ZXMtbGlzdC1saXN0LXZpZXcnICk7XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9PlxuXHRcdFx0PGRpdiBrZXk9eyAwIH0gY2xhc3NOYW1lPVwiZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtc1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtXCI+PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHR7IF9fKCAnSUQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdHsgX18oICdOYW1lJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHR7IF9fKCAnU3RhcnQgRGF0ZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ0VuZCBEYXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHR7IF9fKCAnU29sZCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ1Jlc2VydmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHR7IF9fKCAnQ2FwYWNpdHknLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdHsgX18oICdSZWdpc3RyYW50cycsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ0FjdGlvbnMnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0e1xuXHRcdFx0XHRlbnRpdGllcy5tYXAoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaXNNb2RlbEVudGl0eU9mTW9kZWwoIGRhdGVFbnRpdHksICdkYXRldGltZScgKSA/IChcblx0XHRcdFx0XHRcdFx0PEVkaXRvckRhdGVFbnRpdHlMaXN0SXRlbVxuXHRcdFx0XHRcdFx0XHRcdGtleT17IGRhdGVFbnRpdHkuaWQgfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGVFbnRpdHk9eyBkYXRlRW50aXR5IH1cblx0XHRcdFx0XHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSA6IG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0PC9kaXY+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFZGl0b3JEYXRlRW50aXRpZXNMaXN0VmlldztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBEYXNoaWNvbiwgVG9vbHRpcCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGRhdGVUaW1lTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgcm91dGVzIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5pbXBvcnQgeyBhZGRRdWVyeUFyZ3MgfSBmcm9tICdAd29yZHByZXNzL3VybCc7XG5pbXBvcnQgeyBpZkNvbmRpdGlvbiwgY29tcG9zZSB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmNvbnN0IHsgQURNSU5fUk9VVEVTLCBBRE1JTl9ST1VURV9BQ1RJT05fREVGQVVMVCwgZ2V0QWRtaW5VcmwgfSA9IHJvdXRlcztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IEVkaXRvckRhdGVFbnRpdHlBY3Rpb25zTWVudVxuXHRmcm9tICcuLi9hY3Rpb25zLW1lbnUvZWRpdG9yLWRhdGUtZW50aXR5LWFjdGlvbnMtbWVudSc7XG5pbXBvcnQgeyB3aXRoRWRpdG9yRXZlbnRFbnRpdHkgfSBmcm9tICcuLi8uLi8uLi9ob2NzJztcblxuY29uc3QgeyBNT0RFTF9OQU1FOiBEQVRFVElNRSwgZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MgfSA9IGRhdGVUaW1lTW9kZWw7XG5cbi8qKlxuICogRWRpdG9yRGF0ZUVudGl0eUxpc3RJdGVtXG4gKiBEaXNwbGF5cyBFdmVudCBEYXRlIGFzIGEgdGFibGUgcm93IHNpbWlsYXIgdG8gZXhpc3RpbmcgZXZlbnRFbnRpdHkgZWRpdG9yIFVJXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0ZSAgICBKU09OIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZVxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgVGhlIGRhdGUgcmVuZGVyZWQgYXMgYSBibG9ja1xuICovXG5jbGFzcyBFZGl0b3JEYXRlRW50aXR5TGlzdEl0ZW0gZXh0ZW5kcyBDb21wb25lbnQge1xuXHQvKipcblx0ICogZ2V0U3RhdHVzQ2xhc3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICAgIEpTT04gb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gICAgQ1NTIGNsYXNzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIERhdGUgc3RhdHVzXG5cdCAqL1xuXHRnZXRTdGF0dXNDbGFzcyA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0XHRzd2l0Y2ggKCBkYXRlRW50aXR5LnN0YXR1cyApIHtcblx0XHRcdGNhc2UgJ0RUQScgOlxuXHRcdFx0XHRyZXR1cm4gJ2VlLWRhdGV0aW1lLWFjdGl2ZSc7XG5cdFx0XHRjYXNlICdEVEUnIDpcblx0XHRcdFx0cmV0dXJuICdlZS1kYXRldGltZS1leHBpcmVkJztcblx0XHRcdGNhc2UgJ0RUUycgOlxuXHRcdFx0XHRyZXR1cm4gJ2VlLWRhdGV0aW1lLXNvbGQtb3V0Jztcblx0XHRcdGNhc2UgJ0RUVScgOlxuXHRcdFx0XHRyZXR1cm4gJ2VlLWRhdGV0aW1lLXVwY29taW5nJztcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIGRhdGVTb2xkUmVzZXJ2ZWRDYXBhY2l0eVxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRFbnRpdHkgIFRoZSBldmVudCBvYmplY3QuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICAgIFRoZSBkYXRlIG9iamVjdC5cblx0ICogQHJldHVybiB7c3RyaW5nfSAgICBsaW5rIHRvIHJlZ2lzdHJhdGlvbnMgbGlzdCB0YWJsZSBmb3IgZGF0ZXRpbWVcblx0ICovXG5cdGdldERhdGVSZWdpc3RyYXRpb25zTGluayA9ICggZXZlbnRFbnRpdHksIGRhdGVFbnRpdHkgKSA9PiB7XG5cdFx0Y29uc3QgcmVnTGlzdFVybCA9IGFkZFF1ZXJ5QXJncyhcblx0XHRcdGdldEFkbWluVXJsKCBBRE1JTl9ST1VURVMuUkVHSVNUUkFUSU9OUywgQURNSU5fUk9VVEVfQUNUSU9OX0RFRkFVTFQgKSxcblx0XHRcdHtcblx0XHRcdFx0ZXZlbnRfaWQ6IGV2ZW50RW50aXR5LmlkLFxuXHRcdFx0XHRkYXRldGltZV9pZDogZGF0ZUVudGl0eS5pZCxcblx0XHRcdFx0cmV0dXJuOiAnZWRpdCcsXG5cdFx0XHR9XG5cdFx0KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRvb2x0aXBcblx0XHRcdFx0dGV4dD17IF9fKFxuXHRcdFx0XHRcdCd2aWV3IHJlZ2lzdHJhdGlvbnMgZm9yIHRoaXMgZGF0ZS4nLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0KSB9XG5cdFx0XHQ+XG5cdFx0XHRcdDxhXG5cdFx0XHRcdFx0aHJlZj17IHJlZ0xpc3RVcmwgfVxuXHRcdFx0XHRcdGNsYXNzTmFtZT17ICdlZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXJlZy11cmwtbGluaycgfVxuXHRcdFx0XHRcdHRhcmdldD17ICdfYmxhbmsnIH1cblx0XHRcdFx0XHRyZWw9eyAnbm9vcGVuZXIgbm9yZWZmZXJlcicgfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PERhc2hpY29uIGljb249XCJncm91cHNcIiBzaXplPXsgMjQgfSAvPlxuXHRcdFx0XHQ8L2E+XG5cdFx0XHQ8L1Rvb2x0aXA+XG5cdFx0KTtcblx0fTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3QgeyBldmVudEVudGl0eSwgZGF0ZUVudGl0eSB9ID0gdGhpcy5wcm9wcztcblx0XHR0aGlzLmlkID0gYGV2ZW50LWRhdGUtdGlja2V0LWxpc3QtbW9kYWwtJHsgZGF0ZUVudGl0eS5pZCB9YDtcblx0XHRjb25zdCBzdGF0dXNDbGFzcyA9IHRoaXMuZ2V0U3RhdHVzQ2xhc3MoIGRhdGVFbnRpdHkgKTtcblx0XHRjb25zdCBiZ0NsYXNzID0gZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MoIGRhdGVFbnRpdHkgKTtcblx0XHRjb25zdCByZWdMaW1pdCA9IGRhdGVFbnRpdHkucmVnTGltaXQgPT09ICdJTkYnIHx8XG5cdFx0ZGF0ZUVudGl0eS5yZWdMaW1pdCA9PT0gSW5maW5pdHkgP1xuXHRcdFx0KCA8c3BhbiBjbGFzc05hbWU9eyAnZWUtaW5maW5pdHktc2lnbicgfT4maW5maW47PC9zcGFuPiApIDpcblx0XHRcdGRhdGVFbnRpdHkucmVnTGltaXQ7XG5cdFx0Y29uc3QgcmVnTGluayA9IHRoaXMuZ2V0RGF0ZVJlZ2lzdHJhdGlvbnNMaW5rKCBldmVudEVudGl0eSwgZGF0ZUVudGl0eSApO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgaWQ9eyBgZWUtZWRpdG9yLWRhdGUtbGlzdC12aWV3LWRpdi0keyBkYXRlRW50aXR5LmlkIH1gIH1cblx0XHRcdFx0Y2xhc3NOYW1lPXsgYGVlLWVkaXRvci1kYXRlLWxpc3Qtdmlldy1kaXYgJHsgc3RhdHVzQ2xhc3MgfWAgfVxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXNcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGAkeyBiZ0NsYXNzIH0gZWUtZGF0ZS1saXN0LWl0ZW1gIH0+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnTmFtZTonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyBkYXRlRW50aXR5Lm5hbWUgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdJRDonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyBkYXRlRW50aXR5LmlkIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnTmFtZTonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyBkYXRlRW50aXR5Lm5hbWUgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdTdGFydCBEYXRlOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IGRhdGVFbnRpdHkuc3RhcnQudG9Gb3JtYXQoICdkZGQgTU1NIFlZIGg6bW0gYScgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tbGFiZWxcIj5cblx0XHRcdFx0XHRcdFx0eyBfXyggJ0VuZCBEYXRlOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IGRhdGVFbnRpdHkuZW5kLnRvRm9ybWF0KCAnZGRkIE1NTSBZWSBoOm1tIGEnICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdTb2xkOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IGRhdGVFbnRpdHkuc29sZCB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tbGFiZWxcIj5cblx0XHRcdFx0XHRcdFx0eyBfXyggJ1Jlc2VydmVkOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IGRhdGVFbnRpdHkucmVzZXJ2ZWQgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdDYXBhY2l0eTonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyByZWdMaW1pdCB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tbGFiZWxcIj5cblx0XHRcdFx0XHRcdFx0eyBfXyggJ1JlZ2lzdHJhbnRzOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IHJlZ0xpbmsgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdBY3Rpb25zOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8RWRpdG9yRGF0ZUVudGl0eUFjdGlvbnNNZW51XG5cdFx0XHRcdFx0XHRcdGV2ZW50RW50aXR5PXsgZXZlbnRFbnRpdHkgfVxuXHRcdFx0XHRcdFx0XHRkYXRlRW50aXR5PXsgZGF0ZUVudGl0eSB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyAnY2xlYXItZmxvYXQnIH0+PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0aWZDb25kaXRpb24oXG5cdFx0KCB7IGRhdGVFbnRpdHkgfSApID0+IGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBkYXRlRW50aXR5LCBEQVRFVElNRSApXG5cdCksXG5cdHdpdGhFZGl0b3JFdmVudEVudGl0eSxcbl0gKSggRWRpdG9yRGF0ZUVudGl0eUxpc3RJdGVtICk7XG5cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRWRpdG9yRGF0ZUVudGl0eUxpc3RJdGVtIH0gZnJvbSAnLi9lZGl0b3ItZGF0ZS1lbnRpdHktbGlzdC1pdGVtJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWRpdG9yRGF0ZUVudGl0aWVzTGlzdFZpZXcgfSBmcm9tICcuL2VkaXRvci1kYXRlLWVudGl0aWVzLWxpc3Qtdmlldyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL2VkaXRvci1kYXRlJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuXG5pbXBvcnQgeyBFdmVudERhdGVzQW5kVGlja2V0c01ldGFib3ggfSBmcm9tICcuLyc7XG5cbmNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnbm9ybWFsLXNvcnRhYmxlcycgKTtcbmNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XG5lZGl0b3IuY2xhc3NOYW1lID0gJ2VlLWVkaXRvci1kaXYnO1xuY29udGFpbmVyLnByZXBlbmQoIGVkaXRvciApO1xuY29uc3QgZXZlbnRJZCA9IHdpbmRvdy5lZUVkaXRvckV2ZW50SWQ7XG5cbmlmICggZXZlbnRJZCApIHtcblx0cmVuZGVyKFxuXHRcdDxFdmVudERhdGVzQW5kVGlja2V0c01ldGFib3ggZXZlbnRJZD17IGV2ZW50SWQgfSAvPixcblx0XHRlZGl0b3Jcblx0KTtcbn1cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aEVkaXRvckRhdGVFbnRpdGllcyB9IGZyb20gJy4vd2l0aC1lZGl0b3ItZGF0ZS1lbnRpdGllcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhFZGl0b3JEYXRlVGlja2V0RW50aXRpZXMgfSBmcm9tICcuL3dpdGgtZWRpdG9yLWRhdGUtdGlja2V0LWVudGl0aWVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aEVkaXRvckV2ZW50RW50aXR5IH0gZnJvbSAnLi93aXRoLWVkaXRvci1ldmVudC1lbnRpdHknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoRWRpdG9yVGlja2V0RGF0ZUVudGl0aWVzIH0gZnJvbSAnLi93aXRoLWVkaXRvci10aWNrZXQtZGF0ZS1lbnRpdGllcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhFZGl0b3JUaWNrZXRFbnRpdGllcyB9IGZyb20gJy4vd2l0aC1lZGl0b3ItdGlja2V0LWVudGl0aWVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aFByaWNlVHlwZUVudGl0aWVzIH0gZnJvbSAnLi93aXRoLXByaWNlLXR5cGUtZW50aXRpZXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoVGlja2V0UHJpY2VFbnRpdGllcyB9IGZyb20gJy4vd2l0aC10aWNrZXQtcHJpY2UtZW50aXRpZXMnO1xuIiwiaW1wb3J0IHsgd2l0aFNlbGVjdCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KCAoIHNlbGVjdCApID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGF0ZUVudGl0aWVzOiBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnIClcblx0XHRcdFx0LmdldERhdGV0aW1lcygpLFxuXHRcdH07XG5cdH0gKSxcblx0J3dpdGhFZGl0b3JEYXRlRW50aXRpZXMnXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuY29uc3QgREVGQVVMVF9PQkpFQ1QgPSB7XG5cdHRpY2tldEVudGl0aWVzOiBbXSxcbn07XG5cbi8qKlxuICogQSBIb2MgZXhwb3NpbmcgdGlja2V0IGVudGl0aWVzIHJlbGF0ZWQgdG8gdGhlIHByb3ZpZGVkIERhdGVUaW1lRW50aXR5LlxuICpcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBBIGhpZ2hlciBvcmRlciBjb21wb25lbnQuXG4gKi9cbmNvbnN0IHdpdGhFZGl0b3JEYXRlVGlja2V0RW50aXRpZXMgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0d2l0aFNlbGVjdChcblx0XHQoIHNlbGVjdCwgeyBkYXRlRW50aXR5IH0gKSA9PiB7XG5cdFx0XHRjb25zdCB7IGdldFJlbGF0ZWRFbnRpdGllcyB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0aWYgKCBpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgJ2RhdGV0aW1lJyApICkge1xuXHRcdFx0XHRjb25zdCB0aWNrZXRFbnRpdGllcyA9IGdldFJlbGF0ZWRFbnRpdGllcyhcblx0XHRcdFx0XHRkYXRlRW50aXR5LFxuXHRcdFx0XHRcdCd0aWNrZXQnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiB7IHRpY2tldEVudGl0aWVzIH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0fVxuXHQpLFxuXHQnd2l0aEVkaXRvckRhdGVUaWNrZXRFbnRpdGllcydcbik7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhFZGl0b3JEYXRlVGlja2V0RW50aXRpZXM7XG4iLCJpbXBvcnQgeyB3aXRoU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbmNvbnN0IERFRkFVTFRfT0JKRUNUID0ge1xuXHRldmVudEVudGl0eTogbnVsbCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KCAoIHNlbGVjdCwgeyBldmVudEVudGl0eSB9ICkgPT4ge1xuXHRcdC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBldmVudCBlbnRpdHksIGp1c3QgcGFzcyBpdCB0aHJvdWdoXG5cdFx0aWYgKCBpc01vZGVsRW50aXR5T2ZNb2RlbCggZXZlbnRFbnRpdHksICdldmVudCcgKSApIHtcblx0XHRcdHJldHVybiB7IGV2ZW50RW50aXR5IH07XG5cdFx0fVxuXHRcdGNvbnN0IGV2ZW50cyA9IHNlbGVjdCggJ2V2ZW50ZXNwcmVzc28vY29yZScgKS5nZXRFdmVudHMoKTtcblx0XHRyZXR1cm4gZXZlbnRzLmxlbmd0aCA+IDAgP1xuXHRcdFx0e1xuXHRcdFx0XHRldmVudEVudGl0eTogZXZlbnRzLnNsaWNlKCAtMSApLnBvcCgpLFxuXHRcdFx0fSA6XG5cdFx0XHRERUZBVUxUX09CSkVDVDtcblx0fSApLFxuXHQnd2l0aEVkaXRvckV2ZW50RW50aXR5J1xuKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB3aXRoU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmNvbnN0IERFRkFVTFRfT0JKRUNUID0ge1xuXHRkYXRlRW50aXRpZXM6IFtdLFxufTtcblxuLyoqXG4gKiB3aXRoRWRpdG9yVGlja2V0RGF0ZUVudGl0aWVzXG4gKiByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmc6XG4gKiAgICBkYXRlRW50aXRpZXMgLSBhbiBhcnJheSBvZiBkYXRldGltZSBlbnRpdGllcyBmb3IgdGhlIHN1cHBsaWVkIHRpY2tldFxuICpcbiAqIEBmdW5jdGlvblxuICovXG5jb25zdCB3aXRoRWRpdG9yVGlja2V0RGF0ZUVudGl0aWVzID0gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdHdpdGhTZWxlY3QoXG5cdFx0KCBzZWxlY3QsIHsgdGlja2V0RW50aXR5IH0gKSA9PiB7XG5cdFx0XHRjb25zdCB7IGdldFJlbGF0ZWRFbnRpdGllcyB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0aWYgKCBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApICkge1xuXHRcdFx0XHRjb25zdCBkYXRlRW50aXRpZXMgPSBnZXRSZWxhdGVkRW50aXRpZXMoIHRpY2tldEVudGl0eSwgJ2RhdGV0aW1lJyApO1xuXHRcdFx0XHRyZXR1cm4geyBkYXRlRW50aXRpZXMgfTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBERUZBVUxUX09CSkVDVDtcblx0XHR9XG5cdCksXG5cdCd3aXRoRWRpdG9yVGlja2V0RGF0ZUVudGl0aWVzJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aEVkaXRvclRpY2tldERhdGVFbnRpdGllcztcbiIsImltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0d2l0aFNlbGVjdCggKCBzZWxlY3QgKSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpY2tldEVudGl0aWVzOiBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnICkuZ2V0VGlja2V0cygpLFxuXHRcdH07XG5cdH0gKSxcblx0J3dpdGhFZGl0b3JUaWNrZXRFbnRpdGllcydcbik7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgd2l0aFNlbGVjdCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbi8qKlxuICogd2l0aFByaWNlVHlwZUVudGl0aWVzXG4gKiByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmc6XG4gKiAgICBwcmljZVR5cGVFbnRpdGllcyAtIGFuIGFycmF5IG9mIHByaWNlX3R5cGUgZW50aXRpZXNcbiAqICAgIHByaWNlVHlwZUVudGl0aWVzTG9hZGVkIC0gYm9vbGVhbiB0cnVlIGlmIGxvYWRpbmcgaXMgY29tcGxldGVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdHdpdGhTZWxlY3QoXG5cdFx0KCBzZWxlY3QgKSA9PiB7XG5cdFx0XHRjb25zdCB7IGdldEVudGl0aWVzIH0gPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2xpc3RzJyApO1xuXHRcdFx0Y29uc3QgcHJpY2VUeXBlRW50aXRpZXMgPSBnZXRFbnRpdGllcyggJ3ByaWNlX3R5cGUnICk7XG5cdFx0XHRjb25zdCB7IGhhc0ZpbmlzaGVkUmVzb2x1dGlvbiB9ID0gc2VsZWN0KCAnY29yZS9kYXRhJyApO1xuXHRcdFx0Y29uc3QgcHJpY2VUeXBlRW50aXRpZXNMb2FkZWQgPSBoYXNGaW5pc2hlZFJlc29sdXRpb24oXG5cdFx0XHRcdCdldmVudGVzcHJlc3NvL2xpc3RzJyxcblx0XHRcdFx0J2dldEVudGl0aWVzJyxcblx0XHRcdFx0WyAncHJpY2VfdHlwZScgXVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB7IHByaWNlVHlwZUVudGl0aWVzLCBwcmljZVR5cGVFbnRpdGllc0xvYWRlZCB9O1xuXHRcdH1cblx0KSxcblx0J3dpdGhQcmljZVR5cGVFbnRpdGllcydcbik7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3aXRoU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmNvbnN0IEVNUFRZX09CSkVDVCA9IHtcblx0bm9CYXNlUHJpY2U6IHRydWUsXG5cdHByaWNlRW50aXRpZXNMb2FkZWQ6IGZhbHNlLFxuXHRwcmljZUVudGl0aWVzOiBbXSxcbn07XG5cbi8qKlxuICogd2l0aFRpY2tldFByaWNlRW50aXRpZXNcbiAqIHJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZzpcbiAqICAgIHByaWNlRW50aXRpZXMgLSBhbiBhcnJheSBvZiBwcmljZSBlbnRpdGllcyBmb3IgdGhlIHN1cHBsaWVkIHRpY2tldFxuICogICAgcHJpY2VFbnRpdGllc0xvYWRlZCAtIGJvb2xlYW4gdHJ1ZSBpZiBsb2FkaW5nIGlzIGNvbXBsZXRlXG4gKiAgICBub0Jhc2VQcmljZSAtIGJvb2xlYW4gdHJ1ZSBpZiBsb2FkaW5nIGlzIGNvbXBsZXRlIGJ1dCBwcmljZUVudGl0aWVzIGlzIGVtcHR5XG4gKlxuICogQGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KFxuXHRcdCggc2VsZWN0LCB7IHRpY2tldEVudGl0eSB9ICkgPT4ge1xuXHRcdFx0Y29uc3QgeyBnZXRSZWxhdGVkRW50aXRpZXMgfSA9IHNlbGVjdCggJ2V2ZW50ZXNwcmVzc28vY29yZScgKTtcblx0XHRcdGNvbnN0IHsgaGFzRmluaXNoZWRSZXNvbHV0aW9uIH0gPSBzZWxlY3QoICdjb3JlL2RhdGEnICk7XG5cdFx0XHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksICd0aWNrZXQnICkgKSB7XG5cdFx0XHRcdGNvbnN0IHByaWNlRW50aXRpZXMgPSBnZXRSZWxhdGVkRW50aXRpZXMoIHRpY2tldEVudGl0eSwgJ3ByaWNlJyApO1xuXHRcdFx0XHRjb25zdCBwcmljZUVudGl0aWVzTG9hZGVkID0gaGFzRmluaXNoZWRSZXNvbHV0aW9uKFxuXHRcdFx0XHRcdCdldmVudGVzcHJlc3NvL2NvcmUnLFxuXHRcdFx0XHRcdCdnZXRSZWxhdGVkRW50aXRpZXMnLFxuXHRcdFx0XHRcdFsgdGlja2V0RW50aXR5LCAncHJpY2UnIF1cblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKCBwcmljZUVudGl0aWVzTG9hZGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRub0Jhc2VQcmljZTogaXNFbXB0eSggcHJpY2VFbnRpdGllcyApLFxuXHRcdFx0XHRcdFx0cHJpY2VFbnRpdGllc0xvYWRlZCxcblx0XHRcdFx0XHRcdHByaWNlRW50aXRpZXMsXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIEVNUFRZX09CSkVDVDtcblx0XHR9XG5cdCksXG5cdCd3aXRoVGlja2V0UHJpY2VFbnRpdGllcydcbik7XG4iLCJleHBvcnQgKiBmcm9tICcuL2RhdGVzLWFuZC10aWNrZXRzLW1ldGFib3gnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlcy1hbmQtdGltZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9ob2NzJztcbmV4cG9ydCAqIGZyb20gJy4vdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXInO1xuZXhwb3J0ICogZnJvbSAnLi90aWNrZXRzJztcblxuaW1wb3J0ICcuL2V2ZW50LWVkaXRvcic7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbmNvbnN0IEVkaXRvckluaXRpYWxpemVkQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoIGZhbHNlICk7XG5jb25zdCB7IFByb3ZpZGVyLCBDb25zdW1lciB9ID0gRWRpdG9ySW5pdGlhbGl6ZWRDb250ZXh0O1xuXG5leHBvcnQge1xuXHRFZGl0b3JJbml0aWFsaXplZENvbnRleHQsXG5cdFByb3ZpZGVyLFxuXHRDb25zdW1lcixcbn07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIHVzZUVkaXRvckluaXRpYWxpemVkIH0gZnJvbSAnLi91c2UtZWRpdG9yLWluaXRpYWxpemVkJztcbmV4cG9ydCB7IFByb3ZpZGVyLCBDb25zdW1lciB9IGZyb20gJy4vZWRpdG9yLWluaXRpYWxpemVkLWNvbnRleHQnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgRWRpdG9ySW5pdGlhbGl6ZWRDb250ZXh0IH0gZnJvbSAnLi9lZGl0b3ItaW5pdGlhbGl6ZWQtY29udGV4dCc7XG5cbmNvbnN0IHVzZUVkaXRvckluaXRpYWxpemVkID0gKCkgPT4gdXNlQ29udGV4dCggRWRpdG9ySW5pdGlhbGl6ZWRDb250ZXh0ICk7XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUVkaXRvckluaXRpYWxpemVkO1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgd2l0aEV2ZW50VmVudWVFbnRpdHkgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZGl0b3ItaG9jcyc7XG5cbmltcG9ydCB1c2VFZGl0b3JJbml0aWFsaXphdGlvbiBmcm9tICcuL3VzZS1lZGl0b3ItaW5pdGlhbGl6YXRpb24nO1xuaW1wb3J0IHdpdGhFdmVudEVudGl0eSBmcm9tICcuL3dpdGgtZXZlbnQtZW50aXR5JztcbmltcG9ydCB3aXRoRXZlbnREYXRlRW50aXRpZXMgZnJvbSAnLi93aXRoLWV2ZW50LWRhdGUtZW50aXRpZXMnO1xuaW1wb3J0IHdpdGhUaWNrZXRFbnRpdGllc0ZvckFsbERhdGVFbnRpdGllcyBmcm9tICcuL3dpdGgtdGlja2V0LWVudGl0aWVzLWZvci1hbGwtZGF0ZS1lbnRpdGllcyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJy4vY29udGV4dCc7XG5cbmNvbnN0IEVkaXRvckluaXRpYWxpemF0aW9uID0gKCB7XG5cdGV2ZW50RW50aXR5TG9hZGVkLFxuXHRkYXRlRW50aXRpZXNMb2FkZWQsXG5cdHRpY2tldEVudGl0aWVzTG9hZGVkLFxuXHRlZGl0b3JJbml0aWFsaXplZCxcblx0c2V0SW5pdGlhbGl6ZWQsXG5cdGNoaWxkcmVuLFxufSApID0+IHtcblx0dXNlRWZmZWN0KCAoKSA9PiB7XG5cdFx0aWYgKCBldmVudEVudGl0eUxvYWRlZCAmJiBkYXRlRW50aXRpZXNMb2FkZWQgJiYgdGlja2V0RW50aXRpZXNMb2FkZWQgKSB7XG5cdFx0XHRzZXRJbml0aWFsaXplZCggdHJ1ZSApO1xuXHRcdH1cblx0fSwgWyBldmVudEVudGl0eUxvYWRlZCwgZGF0ZUVudGl0aWVzTG9hZGVkLCB0aWNrZXRFbnRpdGllc0xvYWRlZCBdICk7XG5cdHJldHVybiA8UHJvdmlkZXIgdmFsdWU9eyBlZGl0b3JJbml0aWFsaXplZCB9PlxuXHRcdHsgY2hpbGRyZW4gfVxuXHQ8L1Byb3ZpZGVyPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0KCBXcmFwcGVkQ29tcG9uZW50ICkgPT4gKCBwcm9wcyApID0+IHtcblx0XHRjb25zdCBbIGVkaXRvckluaXRpYWxpemVkLCBzZXRJbml0aWFsaXplZCBdID0gdXNlRWRpdG9ySW5pdGlhbGl6YXRpb24oKTtcblx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnRcblx0XHRcdGVkaXRvckluaXRpYWxpemVkPXsgZWRpdG9ySW5pdGlhbGl6ZWQgfVxuXHRcdFx0c2V0SW5pdGlhbGl6ZWQ9eyBzZXRJbml0aWFsaXplZCB9XG5cdFx0XHR7IC4uLnByb3BzIH1cblx0XHQvPjtcblx0fSxcblx0d2l0aEV2ZW50RW50aXR5LFxuXHR3aXRoRXZlbnRWZW51ZUVudGl0eSxcblx0d2l0aEV2ZW50RGF0ZUVudGl0aWVzLFxuXHR3aXRoVGlja2V0RW50aXRpZXNGb3JBbGxEYXRlRW50aXRpZXMsXG5dICkoIEVkaXRvckluaXRpYWxpemF0aW9uICk7XG4iLCJleHBvcnQge1xuXHR1c2VFZGl0b3JJbml0aWFsaXplZCxcblx0Q29uc3VtZXIsXG59IGZyb20gJy4vY29udGV4dCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhFdmVudEVudGl0eSB9IGZyb20gJy4vd2l0aC1ldmVudC1lbnRpdHknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoRXZlbnREYXRlRW50aXRpZXMgfSBmcm9tICcuL3dpdGgtZXZlbnQtZGF0ZS1lbnRpdGllcyc7XG5leHBvcnQge1xuXHRkZWZhdWx0IGFzIHdpdGhUaWNrZXRFbnRpdGllc0ZvckFsbERhdGVFbnRpdGllcyxcbn0gZnJvbSAnLi93aXRoLXRpY2tldC1lbnRpdGllcy1mb3ItYWxsLWRhdGUtZW50aXRpZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgRWRpdG9ySW5pdGlhbGl6YXRpb24gZnJvbSAnLi9lZGl0b3ItaW5pdGlhbGl6YXRpb24nO1xuXG5jb25zdCB3aXRoRWRpdG9ySW5pdGlhbGl6YXRpb24gPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0KCBXcmFwcGVkQ29tcG9uZW50ICkgPT4gKFxuXHRcdHsgZXZlbnRJZCB9XG5cdCkgPT4ge1xuXHRcdHJldHVybiA8RWRpdG9ySW5pdGlhbGl6YXRpb24gZXZlbnRJZD17IGV2ZW50SWQgfT5cblx0XHRcdDxXcmFwcGVkQ29tcG9uZW50IGV2ZW50SWQ9eyBldmVudElkIH0gLz5cblx0XHQ8L0VkaXRvckluaXRpYWxpemF0aW9uPjtcblx0fSxcblx0J3dpdGhFZGl0b3JJbml0aWFsaXphdGlvbidcbik7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhFZGl0b3JJbml0aWFsaXphdGlvbjtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcblxuY29uc3QgdXNlRWRpdG9ySW5pdGlhbGl6YXRpb24gPSAoKSA9PiB7XG5cdGNvbnN0IFsgZWRpdG9ySW5pdGlhbGl6ZWQsIHNldEVkaXRvckluaXRpYWxpemVkIF0gPSB1c2VTdGF0ZSggZmFsc2UgKTtcblx0cmV0dXJuIFsgZWRpdG9ySW5pdGlhbGl6ZWQsIHNldEVkaXRvckluaXRpYWxpemVkIF07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VFZGl0b3JJbml0aWFsaXphdGlvbjtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB3aXRoU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmNvbnN0IERFRkFVTFRfT0JKRUNUID0ge1xuXHRkYXRlRW50aXRpZXM6IFtdLFxuXHRkYXRlRW50aXRpZXNMb2FkZWQ6IGZhbHNlLFxufTtcblxuLyoqXG4gKiB3aXRoRXZlbnREYXRlRW50aXRpZXNcbiAqIHJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZzpcbiAqICAgIGRhdGVFbnRpdGllcyAtIGFuIGFycmF5IG9mIGRhdGV0aW1lIGVudGl0aWVzIGZvciB0aGUgc3VwcGxpZWQgZXZlbnRcbiAqICAgIGRhdGVFbnRpdGllc0xvYWRlZCAtIGJvb2xlYW4gdHJ1ZSBpZiBsb2FkaW5nIGlzIGNvbXBsZXRlXG4gKlxuICogQGZ1bmN0aW9uXG4gKi9cbmNvbnN0IHdpdGhFdmVudERhdGVFbnRpdGllcyA9IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KFxuXHRcdCggc2VsZWN0LCB7IGV2ZW50RW50aXR5LCBldmVudEVudGl0eUxvYWRlZCwgZWRpdG9ySW5pdGlhbGl6ZWQgfSApID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0ISBlZGl0b3JJbml0aWFsaXplZCAmJlxuXHRcdFx0XHRldmVudEVudGl0eUxvYWRlZCAmJlxuXHRcdFx0XHRpc01vZGVsRW50aXR5T2ZNb2RlbCggZXZlbnRFbnRpdHksICdldmVudCcgKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IHsgZ2V0UmVsYXRlZEVudGl0aWVzIH0gPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0XHRcdGNvbnN0IHsgaGFzRmluaXNoZWRSZXNvbHV0aW9uIH0gPSBzZWxlY3QoICdjb3JlL2RhdGEnICk7XG5cdFx0XHRcdGNvbnN0IGRhdGVFbnRpdGllcyA9IGdldFJlbGF0ZWRFbnRpdGllcyggZXZlbnRFbnRpdHksICdkYXRldGltZScgKTtcblx0XHRcdFx0Y29uc3QgZGF0ZUVudGl0aWVzTG9hZGVkID0gaGFzRmluaXNoZWRSZXNvbHV0aW9uKFxuXHRcdFx0XHRcdCdldmVudGVzcHJlc3NvL2NvcmUnLFxuXHRcdFx0XHRcdCdnZXRSZWxhdGVkRW50aXRpZXMnLFxuXHRcdFx0XHRcdFsgZXZlbnRFbnRpdHksICdkYXRldGltZScgXVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoIGRhdGVFbnRpdGllc0xvYWRlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBkYXRlRW50aXRpZXMsIGRhdGVFbnRpdGllc0xvYWRlZCB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0fVxuXHQpLFxuXHQnd2l0aEV2ZW50RGF0ZUVudGl0aWVzJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aEV2ZW50RGF0ZUVudGl0aWVzO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcblxuY29uc3QgRU1QVFlfT0JKRUNUID0ge307XG5cbi8qKlxuICogd2l0aEV2ZW50RW50aXR5XG4gKiByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmc6XG4gKiAgICBldmVudCAtIHRoZSBldmVudCBlbnRpdHkgZm9yIHRoZSBzdXBwbGllZCBldmVudElkXG4gKiAgICBldmVudExvYWRlZCAtIGJvb2xlYW4gdHJ1ZSBpZiBsb2FkaW5nIGlzIGNvbXBsZXRlXG4gKlxuICogQGZ1bmN0aW9uXG4gKi9cbmNvbnN0IHdpdGhFdmVudEVudGl0eSA9IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KFxuXHRcdCggc2VsZWN0LCB7IGV2ZW50SWQsIGVkaXRvckluaXRpYWxpemVkIH0gKSA9PiB7XG5cdFx0XHRpZiAoIGV2ZW50SWQgJiYgISBlZGl0b3JJbml0aWFsaXplZCApIHtcblx0XHRcdFx0Y29uc3QgeyBnZXRFdmVudEJ5SWQgfSA9IHNlbGVjdCggJ2V2ZW50ZXNwcmVzc28vY29yZScgKTtcblx0XHRcdFx0Y29uc3QgeyBoYXNGaW5pc2hlZFJlc29sdXRpb24gfSA9IHNlbGVjdCggJ2NvcmUvZGF0YScgKTtcblx0XHRcdFx0Y29uc3QgZXZlbnRFbnRpdHkgPSBnZXRFdmVudEJ5SWQoIGV2ZW50SWQgKTtcblx0XHRcdFx0Y29uc3QgZXZlbnRFbnRpdHlMb2FkZWQgPSBoYXNGaW5pc2hlZFJlc29sdXRpb24oXG5cdFx0XHRcdFx0J2V2ZW50ZXNwcmVzc28vY29yZScsXG5cdFx0XHRcdFx0J2dldEV2ZW50QnlJZCcsXG5cdFx0XHRcdFx0WyBldmVudElkIF1cblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGV2ZW50RW50aXR5TG9hZGVkICYmXG5cdFx0XHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoIGV2ZW50RW50aXR5LCAnZXZlbnQnIClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgZXZlbnRFbnRpdHksIGV2ZW50RW50aXR5TG9hZGVkIH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBFTVBUWV9PQkpFQ1Q7XG5cdFx0fVxuXHQpLFxuXHQnd2l0aEV2ZW50RW50aXR5J1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aEV2ZW50RW50aXR5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuXG5jb25zdCBERUZBVUxUX09CSkVDVCA9IHtcblx0dGlja2V0RW50aXRpZXM6IFtdLFxuXHR0aWNrZXRFbnRpdGllc0xvYWRlZDogZmFsc2UsXG59O1xuXG4vKipcbiAqIHdpdGhUaWNrZXRFbnRpdGllc1JlbGF0ZWRUb0FsbERhdGVFbnRpdGllc1xuICogcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9sbG93aW5nOlxuICogXHR0aWNrZXRFbnRpdGllcyAtIGFuIGFycmF5IG9mIHRpY2tldCBlbnRpdGllcyBmb3IgdGhlIHN1cHBsaWVkIGV2ZW50IGRhdGVcbiAqIFx0dGlja2V0RW50aXRpZXNMb2FkZWQgLSBib29sZWFuIHRydWUgaWYgbG9hZGluZyBpcyBjb21wbGV0ZVxuICpcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5jb25zdCB3aXRoVGlja2V0RW50aXRpZXNGb3JBbGxEYXRlRW50aXRpZXMgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0d2l0aFNlbGVjdChcblx0XHQoIHNlbGVjdCwgeyBkYXRlRW50aXRpZXMsIGRhdGVFbnRpdGllc0xvYWRlZCwgZWRpdG9ySW5pdGlhbGl6ZWQgfSApID0+IHtcblx0XHRcdGlmICggZGF0ZUVudGl0aWVzTG9hZGVkICYmICEgZWRpdG9ySW5pdGlhbGl6ZWQgKSB7XG5cdFx0XHRcdGNvbnN0IHsgZ2V0UmVsYXRlZEVudGl0aWVzRm9ySWRzIH0gPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0XHRcdGNvbnN0IHsgaGFzRmluaXNoZWRSZXNvbHV0aW9uIH0gPSBzZWxlY3QoICdjb3JlL2RhdGEnICk7XG5cdFx0XHRcdGNvbnN0IGRhdGVJZHMgPSBkYXRlRW50aXRpZXMubWFwKFxuXHRcdFx0XHRcdCggZGF0ZUVudGl0eSApID0+IGRhdGVFbnRpdHkuaWRcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgdGlja2V0RW50aXRpZXMgPSBnZXRSZWxhdGVkRW50aXRpZXNGb3JJZHMoXG5cdFx0XHRcdFx0J2RhdGV0aW1lJyxcblx0XHRcdFx0XHRkYXRlSWRzLFxuXHRcdFx0XHRcdCd0aWNrZXQnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IHRpY2tldEVudGl0aWVzTG9hZGVkID0gaGFzRmluaXNoZWRSZXNvbHV0aW9uKFxuXHRcdFx0XHRcdCdldmVudGVzcHJlc3NvL2NvcmUnLFxuXHRcdFx0XHRcdCdnZXRSZWxhdGVkRW50aXRpZXNGb3JJZHMnLFxuXHRcdFx0XHRcdFsgJ2RhdGV0aW1lJywgZGF0ZUlkcywgJ3RpY2tldCcgXVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoIHRpY2tldEVudGl0aWVzTG9hZGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB7IHRpY2tldEVudGl0aWVzLCB0aWNrZXRFbnRpdGllc0xvYWRlZCB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0fVxuXHQpLFxuXHQnd2l0aFRpY2tldEVudGl0aWVzRm9yQWxsRGF0ZUVudGl0aWVzJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFRpY2tldEVudGl0aWVzRm9yQWxsRGF0ZUVudGl0aWVzO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VBc3NpZ25tZW50c0NhbGN1bGF0b3IgfSBmcm9tICcuL3VzZS1hc3NpZ25tZW50cy1jYWxjdWxhdG9yJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyByZWR1Y2UsIGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuXG4vLyBAdG9kbywgd2hlbiB0aGUgd3AuZGF0YS51c2VTZWxlY3QgaG9vayBpcyBhdmFpbGFibGUsIHdlIGNhbiB1dGlsaXplIHRoYXQgaW5cbi8vIHRoaXMgY3VzdG9tIGhvb2sgYW5kIHRoZW4gd2UnbGwgYmUgYWJsZSB0byByZW1vdmUgdGhlIHdpdGhTZWxlY3QgaG9jIHVzYWdlXG4vLyBpbiB0aGUgY29tcG9zZWQgYFRpY2tldEFzc2lnbm1lbnRzTWFuYWdlck1vZGFsYCBjb21wb25lbnQuXG5cbi8qKlxuICogVGVtcG9yYXJ5IGRlc2NyaXB0aW9uIGZvciBob29rIHRvIGJlIGZsZXNoZWQgb3V0LlxuICpcbiAqIE5vdGUgdGhlIGZvbGxvd2luZyBhc3N1bXB0aW9ucyBhYm91dCB0aGlzIGhvb2s6XG4gKiAtIGluY29taW5nIGFzc2lnbmVkQ291bnRzIGhhcyBhbGwgdGlja2V0SWRzIGFuZCBkYXRlSWRzIGFjY291bnRlZCBmb3IgaW4gdGhlXG4gKiBjb2xsZWN0aW9uLiAgVGhhdCBtZWFucyBhc3NpZ25lZFN0YXRlIHNob3VsZCBuZXZlciBoYXZlIGEgZGF0ZUlkIG9yIGEgdGlja2V0SWRcbiAqIHRoYXQgZG9lc24ndCBleGlzdCBpbiB0aGUgYXNzaWduZWRDb3VudHMgY29sbGVjdGlvbi5cbiAqXG4gKlxuICpcbiAqIEBwYXJhbSB7QmFzZUVudGl0eVtdfSBkYXRlRW50aXRpZXMgYW4gYXJyYXkgb2YgQmFzZUVudGl0eSBpbnN0YW5jZXMgZm9yIHRoZVxuICogZGF0ZXRpbWUgbW9kZWwuXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHlbXX0gdGlja2V0RW50aXRpZXMgYW4gYXJyYXkgb2YgQmFzZUVudGl0eSBpbnN0YW5jZXMgZm9yIHRoZVxuICogdGlja2V0IG1vZGVsLlxuICogQHBhcmFtIHtPYmplY3R9IGFzc2lnbmVkQ291bnRzICBBbiBvYmplY3Qgd2l0aCB0d28ga2V5cyAoIGRhdGVzLCB0aWNrZXRzIClcbiAqIHRoYXQgY29udGFpbiBtYXBzIG9mIGlkcyB0byBjb3VudHMgb2YgaG93IG1hbnkgYXNzaWdubWVudHMgdGhhdCBpZCBoYXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYXNzaWduZWRTdGF0ZSAgQW4gb2JqZWN0IHdpdGggdHdvIGtleXMgKCBhc3NpZ25lZCwgcmVtb3ZlZClcbiAqIHRoYXQgY29udGFpbiBtYXBzIG9mIGRhdGUgaWRzIHRvIGFycmF5IG9mIHRpY2tldCBpZHMgYmVpbmcgY2hhbmdlZCBpbiB0aGVcbiAqIHNlc3Npb24uXG4gKiBAcmV0dXJuIHtbXX0gQSB0dXBsZSBsaWtlIGNvbnN0cnVjdGlvbiBvZiB0aHJlZSB2YWx1ZXM6XG4gKiAtIGhhc01pc3NpbmdBc3NpZ25tZW50cyB7Ym9vbH0gV2hldGhlciBvciBub3QgYW55IHRpY2tldHMgb3IgZGF0ZXMgaW4gdGhlXG4gKiBzZXNzaW9uIGhhdmUgbWlzc2luZyBhc3NpZ25tZW50c1xuICogLSBub0Fzc2lnbm1lbnRzTWVzc2FnZSB7c3RyaW5nfSBBIGhlbHBmdWwgY29udGV4dCBhd2FyZSBlcnJvciBtZXNzYWdlIHRvXG4gKiBzaG93IHRvIHRoZSB1c2VyIHdoZW4gdGhlcmUgaXMgYW4gZW50aXR5IHdpdGggbm8gYXNzaWdubWVudHNcbiAqIC0gdXBkYXRlZEFzc2lnbm1lbnRDb3VudHMge09iamVjdH0gVGhlIHNhbWUgYXMgYXNzaWduZWRDb3VudHMgZXhjZXB0IG1vZGlmaWVkXG4gKiB0byBhY2NvdW50IGZvciBjaGFuZ2VzIGluIGFzc2lnbmVkU3RhdGUuXG4gKiAtXG4gKi9cbmNvbnN0IHVzZUFzc2lnbm1lbnRzQ2FsY3VsYXRvciA9IChcblx0ZGF0ZUVudGl0aWVzLFxuXHR0aWNrZXRFbnRpdGllcyxcblx0YXNzaWduZWRDb3VudHMsXG5cdGFzc2lnbmVkU3RhdGUsXG4pID0+IHtcblx0Y29uc3QgZ2V0TWVzc2FnZSA9IHVzZUNhbGxiYWNrKCAoIG1pc3NpbmdBc3NpZ25tZW50Q291bnRzICkgPT4ge1xuXHRcdGxldCBtZXNzYWdlO1xuXHRcdGNvbnN0IHRpY2tldHNNaXNzaW5nID0gbWlzc2luZ0Fzc2lnbm1lbnRDb3VudHMuZGF0ZXMgPT09IDAgJiZcblx0XHRcdG1pc3NpbmdBc3NpZ25tZW50Q291bnRzLnRpY2tldHMgPiAwO1xuXHRcdGNvbnN0IGRhdGVzTWlzc2luZyA9IG1pc3NpbmdBc3NpZ25tZW50Q291bnRzLmRhdGVzID4gMCAmJlxuXHRcdFx0bWlzc2luZ0Fzc2lnbm1lbnRDb3VudHMudGlja2V0cyA9PT0gMDtcblx0XHRjb25zdCBib3RoTWlzc2luZyA9IG1pc3NpbmdBc3NpZ25tZW50Q291bnRzLmRhdGVzID4gMCB8fFxuXHRcdFx0bWlzc2luZ0Fzc2lnbm1lbnRDb3VudHMudGlja2V0cyA+IDA7XG5cblx0XHRzd2l0Y2ggKCB0cnVlICkge1xuXHRcdFx0Y2FzZSAoIGRhdGVFbnRpdGllcy5sZW5ndGggPT09IDEgJiYgZGF0ZXNNaXNzaW5nICkgfHxcblx0XHRcdCggdGlja2V0RW50aXRpZXMubGVuZ3RoID09PSAxICYmIGRhdGVzTWlzc2luZyApIDpcblx0XHRcdFx0bWVzc2FnZSA9IF9fKFxuXHRcdFx0XHRcdCdFdmVudCBEYXRlcyBtdXN0IGFsd2F5cyBoYXZlIGF0IGxlYXN0IG9uZSBUaWNrZXQgYXNzaWduZWQgdG8gdGhlbS4gSWYgdGhlIGN1cnJlbnQgYXNzaWdubWVudCBpcyBub3QgY29ycmVjdCwgYXNzaWduIHRoZSBjb3JyZWN0IFRpY2tldCBmaXJzdCwgdGhlbiByZW1vdmUgb3RoZXJzIGFzIHJlcXVpcmVkLicsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgKCB0aWNrZXRFbnRpdGllcy5sZW5ndGggPT09IDEgJiYgYm90aE1pc3NpbmcgKSB8fFxuXHRcdFx0KCBkYXRlRW50aXRpZXMubGVuZ3RoID09PSAxICYmIHRpY2tldHNNaXNzaW5nICkgOlxuXHRcdFx0XHRtZXNzYWdlID0gX18oXG5cdFx0XHRcdFx0J1RpY2tldHMgbXVzdCBhbHdheXMgaGF2ZSBhdCBsZWFzdCBvbmUgRXZlbnQgRGF0ZSBhc3NpZ25lZCB0byB0aGVtLiBJZiB0aGUgY3VycmVudCBhc3NpZ25tZW50IGlzIG5vdCBjb3JyZWN0LCBhc3NpZ24gdGhlIGNvcnJlY3QgRXZlbnQgRGF0ZSBmaXJzdCwgdGhlbiByZW1vdmUgb3RoZXJzIGFzIHJlcXVpcmVkLicsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgKCB0aWNrZXRzTWlzc2luZyApOlxuXHRcdFx0XHRtZXNzYWdlID0gX18oXG5cdFx0XHRcdFx0J1RpY2tldHMgbXVzdCBhbHdheXMgaGF2ZSBhdCBsZWFzdCBvbmUgZGF0ZSBhc3NpZ25lZCB0byB0aGVtIGJ1dCBvbmUgb3IgbW9yZSBvZiB0aGUgdGlja2V0cyBiZWxvdyBkb2VzIG5vdCBoYXZlIGFueS4gUGxlYXNlIGNvcnJlY3QgdGhlIGFzc2lnbm1lbnRzIGZvciB0aGUgaGlnaGxpZ2h0ZWQgY2VsbHMuJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0bWVzc2FnZSA9IF9fKFxuXHRcdFx0XHRcdCdFdmVudCBEYXRlcyBtdXN0IGFsd2F5cyBoYXZlIGF0IGxlYXN0IG9uZSBUaWNrZXQgYXNzaWduZWQgdG8gdGhlbSBidXQgb25lIG9yIG1vcmUgb2YgdGhlIEV2ZW50IERhdGVzIGJlbG93IGRvZXMgbm90IGhhdmUgYW55LiBQbGVhc2UgY29ycmVjdCB0aGUgYXNzaWdubWVudHMgZm9yIHRoZSBoaWdobGlnaHRlZCBjZWxscy4nLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdH0sIFsgZGF0ZUVudGl0aWVzLCB0aWNrZXRFbnRpdGllcyBdICk7XG5cblx0Y29uc3QgW1xuXHRcdGhhc01pc3NpbmdBc3NpZ25tZW50cyxcblx0XHRub0Fzc2lnbm1lbnRzTWVzc2FnZSxcblx0XHR1cGRhdGVkQXNzaWdubWVudHNDb3VudHMsXG5cdF0gPSB1c2VNZW1vKCAoKSA9PiB7XG5cdFx0bGV0IHRvdGFsTWlzc2luZ0Fzc2lnbm1lbnRzID0gMDtcblx0XHRjb25zdCBtaXNzaW5nQXNzaWdubWVudENvdW50cyA9IHsgZGF0ZXM6IDAsIHRpY2tldHM6IDAgfTtcblx0XHRjb25zdCB1cGRhdGVkQ291bnRzID0gY2xvbmVEZWVwKCBhc3NpZ25lZENvdW50cyApO1xuXG5cdFx0Ly8gY2FsbGJhY2sgZm9yIGNvdW50aW5nIGFzc2lnbm1lbnRzIGJlaW5nIGFkZGVkIG9yIHJlbW92ZWRcblx0XHRjb25zdCBjb3VudEFzc2lnbm1lbnRDaGFuZ2VzRm9yRGF0ZXMgPSAoIGVtcHR5Q291bnQsIGNvdW50LCBkYXRlSWQgKSA9PiB7XG5cdFx0XHQvLyBmaXJzdCBjb25zaWRlciBhbnkgYXNzaWduZWRTdGF0ZS5cblx0XHRcdGNvbnN0IGFzc2lnbmVkU3RhdGVGb3JEYXRlID0gYXNzaWduZWRTdGF0ZS5hc3NpZ25lZFsgZGF0ZUlkIF07XG5cblx0XHRcdGlmICggYXNzaWduZWRTdGF0ZUZvckRhdGUgJiYgQXJyYXkuaXNBcnJheSggYXNzaWduZWRTdGF0ZUZvckRhdGUgKSApIHtcblx0XHRcdFx0YXNzaWduZWRTdGF0ZUZvckRhdGUuZm9yRWFjaCggKCB0aWNrZXRJZCApID0+IHtcblx0XHRcdFx0XHR1cGRhdGVkQ291bnRzLmRhdGVzWyBkYXRlSWQgXSsrO1xuXHRcdFx0XHRcdHVwZGF0ZWRDb3VudHMudGlja2V0c1sgdGlja2V0SWQgXSsrO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGNvbnNpZGVyIGFueSByZW1vdmVkU3RhdGVcblx0XHRcdGNvbnN0IHJlbW92ZWRTdGF0ZUZvckRhdGUgPSBhc3NpZ25lZFN0YXRlLnJlbW92ZWRbIGRhdGVJZCBdO1xuXG5cdFx0XHRpZiAoIHJlbW92ZWRTdGF0ZUZvckRhdGUgJiYgQXJyYXkuaXNBcnJheSggcmVtb3ZlZFN0YXRlRm9yRGF0ZSApICkge1xuXHRcdFx0XHRyZW1vdmVkU3RhdGVGb3JEYXRlLmZvckVhY2goICggdGlja2V0SWQgKSA9PiB7XG5cdFx0XHRcdFx0dXBkYXRlZENvdW50cy5kYXRlc1sgZGF0ZUlkIF0tLTtcblx0XHRcdFx0XHR1cGRhdGVkQ291bnRzLnRpY2tldHNbIHRpY2tldElkIF0tLTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHVwZGF0ZWRDb3VudHMuZGF0ZXNbIGRhdGVJZCBdID09PSAwICkge1xuXHRcdFx0XHRtaXNzaW5nQXNzaWdubWVudENvdW50cy5kYXRlcysrO1xuXHRcdFx0XHRlbXB0eUNvdW50Kys7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbXB0eUNvdW50O1xuXHRcdH07XG5cblx0XHRjb25zdCBjb3VudEFzc2lnbm1lbnRDaGFuZ2VzRm9yVGlja2V0cyA9ICggZW1wdHlDb3VudCwgY291bnQgKSA9PiB7XG5cdFx0XHRpZiAoIGNvdW50ID09PSAwICkge1xuXHRcdFx0XHRtaXNzaW5nQXNzaWdubWVudENvdW50cy50aWNrZXRzKys7XG5cdFx0XHRcdGVtcHR5Q291bnQrKztcblx0XHRcdH1cblx0XHRcdHJldHVybiBlbXB0eUNvdW50O1xuXHRcdH07XG5cdFx0dG90YWxNaXNzaW5nQXNzaWdubWVudHMgPSByZWR1Y2UoXG5cdFx0XHR1cGRhdGVkQ291bnRzLmRhdGVzLFxuXHRcdFx0Y291bnRBc3NpZ25tZW50Q2hhbmdlc0ZvckRhdGVzLFxuXHRcdFx0dG90YWxNaXNzaW5nQXNzaWdubWVudHNcblx0XHQpO1xuXHRcdHRvdGFsTWlzc2luZ0Fzc2lnbm1lbnRzID0gcmVkdWNlKFxuXHRcdFx0dXBkYXRlZENvdW50cy50aWNrZXRzLFxuXHRcdFx0Y291bnRBc3NpZ25tZW50Q2hhbmdlc0ZvclRpY2tldHMsXG5cdFx0XHR0b3RhbE1pc3NpbmdBc3NpZ25tZW50c1xuXHRcdCk7XG5cblx0XHRpZiAoIHRvdGFsTWlzc2luZ0Fzc2lnbm1lbnRzID4gMCApIHtcblx0XHRcdHJldHVybiBbIHRydWUsIGdldE1lc3NhZ2UoIG1pc3NpbmdBc3NpZ25tZW50Q291bnRzICksIHVwZGF0ZWRDb3VudHMgXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gWyBmYWxzZSwgJycsIHVwZGF0ZWRDb3VudHMgXTtcblx0fSwgWyBhc3NpZ25lZENvdW50cywgYXNzaWduZWRTdGF0ZSBdICk7XG5cdHJldHVybiBbXG5cdFx0aGFzTWlzc2luZ0Fzc2lnbm1lbnRzLFxuXHRcdG5vQXNzaWdubWVudHNNZXNzYWdlLFxuXHRcdHVwZGF0ZWRBc3NpZ25tZW50c0NvdW50cyxcblx0XTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUFzc2lnbm1lbnRzQ2FsY3VsYXRvcjtcbiIsImV4cG9ydCB7XG5cdGRlZmF1bHQgYXMgVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWwsXG59IGZyb20gJy4vd2l0aC10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci1tb2RhbCc7XG5leHBvcnQge1xuXHRkZWZhdWx0IGFzIHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCxcbn0gZnJvbSAnLi93aXRoLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyLW1vZGFsJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0FycmF5LCBpc0VtcHR5LCBpc1VuZGVmaW5lZCwgb21pdEJ5IH0gZnJvbSAnbG9kYXNoJztcblxuY29uc3Qgbm9JbmRleCA9IC0xO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGFzc2lnbmVkXG4gKiBAcGFyYW0ge251bWJlcn0gZGF0ZUlkXG4gKiBAcGFyYW0ge251bWJlcn0gdGlja2V0SWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV0dXJuSW5kZXhcbiAqIEByZXR1cm4ge251bWJlcnxib29sZWFufSBpbmRleCBmb3IgZGF0ZSBpZCBpbiBhc3NpZ25lZCBhcnJheSBvclxuICogICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlmIHJldHVybkluZGV4IGlzIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Fzc2lnbmVkID0gKCBhc3NpZ25lZCwgZGF0ZUlkLCB0aWNrZXRJZCwgcmV0dXJuSW5kZXggPSBmYWxzZSApID0+IHtcblx0bGV0IGluZGV4ID0gbm9JbmRleDtcblx0aWYgKCBpc0FycmF5KCBhc3NpZ25lZFsgZGF0ZUlkIF0gKSApIHtcblx0XHRpbmRleCA9IGFzc2lnbmVkWyBkYXRlSWQgXS5pbmRleE9mKCB0aWNrZXRJZCApO1xuXHR9XG5cdHJldHVybiByZXR1cm5JbmRleCA/IGluZGV4IDogaW5kZXggPiBub0luZGV4O1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBhc3NpZ25lZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYWRkVGlja2V0c1xuICogQHBhcmFtIHtPYmplY3R9IHJlbW92ZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlbW92ZVRpY2tldEVudGl0aWVzXG4gKiBAcmV0dXJuIHtQcm9taXNlfSByZXNvbHZlcyB0byB0cnVlIGlmIHVwZGF0ZXMgb2NjdXJyZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHByb2Nlc3NDaGFuZ2VzID0gKFxuXHRhc3NpZ25lZCxcblx0YWRkVGlja2V0cyxcblx0cmVtb3ZlZCxcblx0cmVtb3ZlVGlja2V0RW50aXRpZXNcbikgPT4ge1xuXHRjb25zdCByZWxhdGlvblVwZGF0ZXMgPSBbXTtcblx0Zm9yICggY29uc3QgZGF0ZUlkIGluIHJlbW92ZWQgKSB7XG5cdFx0Y29uc3QgdGlja2V0SWRzVG9SZW1vdmUgPSByZW1vdmVkWyBkYXRlSWQgXTtcblx0XHRpZiAoIGlzQXJyYXkoIHRpY2tldElkc1RvUmVtb3ZlICkgKSB7XG5cdFx0XHRyZWxhdGlvblVwZGF0ZXMucHVzaChcblx0XHRcdFx0cmVtb3ZlVGlja2V0RW50aXRpZXMoIGRhdGVJZCwgdGlja2V0SWRzVG9SZW1vdmUgKVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0Zm9yICggY29uc3QgZGF0ZUlkIGluIGFzc2lnbmVkICkge1xuXHRcdGNvbnN0IHRpY2tldElkc1RvQXNzaWduID0gYXNzaWduZWRbIGRhdGVJZCBdO1xuXHRcdGlmICggaXNBcnJheSggdGlja2V0SWRzVG9Bc3NpZ24gKSApIHtcblx0XHRcdHJlbGF0aW9uVXBkYXRlcy5wdXNoKFxuXHRcdFx0XHRhZGRUaWNrZXRzKCBkYXRlSWQsIHRpY2tldElkc1RvQXNzaWduIClcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBQcm9taXNlLmFsbCggcmVsYXRpb25VcGRhdGVzICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGFzc2lnbmVkXG4gKiBAcGFyYW0ge251bWJlcn0gZGF0ZUlkXG4gKiBAcGFyYW0ge251bWJlcn0gdGlja2V0SWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7T2JqZWN0fSBhc3NpZ25lZFxuICovXG5leHBvcnQgY29uc3QgdW5Bc3NpZ25UaWNrZXRFbnRpdHkgPSAoIGFzc2lnbmVkLCBkYXRlSWQsIHRpY2tldElkLCBpbmRleCA9IG5vSW5kZXggKSA9PiB7XG5cdGluZGV4ID0gaW5kZXggPT09IG5vSW5kZXggP1xuXHRcdGlzQXNzaWduZWQoIGFzc2lnbmVkLCBkYXRlSWQsIHRpY2tldElkLCB0cnVlICkgOlxuXHRcdGluZGV4O1xuXHRpZiAoIGluZGV4ID4gbm9JbmRleCApIHtcblx0XHRhc3NpZ25lZFsgZGF0ZUlkIF0uc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdGlmICggaXNFbXB0eSggYXNzaWduZWRbIGRhdGVJZCBdICkgKSB7XG5cdFx0XHRkZWxldGUgYXNzaWduZWRbIGRhdGVJZCBdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb21pdEJ5KCBhc3NpZ25lZCwgaXNVbmRlZmluZWQgKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gcHJldlN0YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gZGF0ZUlkXG4gKiBAcGFyYW0ge251bWJlcn0gdGlja2V0SWRcbiAqIEByZXR1cm4ge09iamVjdH0gdXBkYXRlZCBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgYXNzaWduVGlja2V0RW50aXR5ID0gKCBwcmV2U3RhdGUsIGRhdGVJZCwgdGlja2V0SWQgKSA9PiB7XG5cdGNvbnN0IGluZGV4ID0gaXNSZW1vdmVkKCBwcmV2U3RhdGUucmVtb3ZlZCwgZGF0ZUlkLCB0aWNrZXRJZCwgdHJ1ZSApO1xuXHRpZiAoIGluZGV4ID4gbm9JbmRleCApIHtcblx0XHRwcmV2U3RhdGUucmVtb3ZlZCA9IHVuUmVtb3ZlVGlja2V0RW50aXR5KFxuXHRcdFx0cHJldlN0YXRlLnJlbW92ZWQsXG5cdFx0XHRkYXRlSWQsXG5cdFx0XHR0aWNrZXRJZCxcblx0XHRcdGluZGV4XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRpZiAoICEgaXNBcnJheSggcHJldlN0YXRlLmFzc2lnbmVkWyBkYXRlSWQgXSApICkge1xuXHRcdFx0cHJldlN0YXRlLmFzc2lnbmVkWyBkYXRlSWQgXSA9IFtdO1xuXHRcdH1cblx0XHRpZiAoICEgaXNBc3NpZ25lZCggcHJldlN0YXRlLmFzc2lnbmVkLCBkYXRlSWQsIHRpY2tldElkICkgKSB7XG5cdFx0XHRwcmV2U3RhdGUuYXNzaWduZWRbIGRhdGVJZCBdLnB1c2goIHRpY2tldElkICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjbGVhblN0YXRlKCBwcmV2U3RhdGUgKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gYXNzaWduZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlSWRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aWNrZXRJZFxuICogQHJldHVybiB7bnVtYmVyfSAgICBcdFx0dGhlIG51bWJlciBvZiBkYXRlRW50aXR5IHRpY2tldHMgaW4gYXNzaWduZWRcbiAqICAgICAgICAgICAgICBcdFx0XHRjb2xsZWN0aW9uIG1hdGNoaW5nIHN1cHBsaWVkIHRpY2tldFxuICovXG5leHBvcnQgY29uc3QgYXNzaWduZWRDb3VudCA9ICggYXNzaWduZWQsIGRhdGVJZCA9IDAsIHRpY2tldElkID0gMCApID0+IHtcblx0aWYgKCBkYXRlSWQgJiYgaXNBcnJheSggYXNzaWduZWRbIGRhdGVJZCBdICkgKSB7XG5cdFx0cmV0dXJuIGFzc2lnbmVkWyBkYXRlSWQgXS5sZW5ndGg7XG5cdH1cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGNvdW50ID0gMDtcblx0aWYgKCB0aWNrZXRJZCApIHtcblx0XHRmb3IgKCBjb25zdCBkYXRlSUQgaW4gYXNzaWduZWQgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXkoIGFzc2lnbmVkWyBkYXRlSUQgXSApICkge1xuXHRcdFx0XHRpbmRleCA9IGFzc2lnbmVkWyBkYXRlSUQgXS5pbmRleE9mKCB0aWNrZXRJZCApO1xuXHRcdFx0XHRpZiAoIGluZGV4ID4gbm9JbmRleCApIHtcblx0XHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb3VudDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gcmVtb3ZlZFxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVJZFxuICogQHBhcmFtIHtudW1iZXJ9IHRpY2tldElkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHJldHVybkluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ8Ym9vbGVhbn0gaW5kZXggZm9yIGRhdGUgaWQgaW4gcmVtb3ZlZCBhcnJheSBvclxuICogICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlmIHJldHVybkluZGV4IGlzIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlbW92ZWQgPSAoIHJlbW92ZWQsIGRhdGVJZCwgdGlja2V0SWQsIHJldHVybkluZGV4ID0gZmFsc2UgKSA9PiB7XG5cdGxldCBpbmRleCA9IG5vSW5kZXg7XG5cdGlmICggaXNBcnJheSggcmVtb3ZlZFsgZGF0ZUlkIF0gKSApIHtcblx0XHRpbmRleCA9IHJlbW92ZWRbIGRhdGVJZCBdLmluZGV4T2YoIHRpY2tldElkICk7XG5cdH1cblx0cmV0dXJuIHJldHVybkluZGV4ID8gaW5kZXggOiBpbmRleCA+IG5vSW5kZXg7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHJlbW92ZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlSWRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aWNrZXRJZFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbW92ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHVuUmVtb3ZlVGlja2V0RW50aXR5ID0gKCByZW1vdmVkLCBkYXRlSWQsIHRpY2tldElkLCBpbmRleCA9IG5vSW5kZXggKSA9PiB7XG5cdGluZGV4ID0gaW5kZXggPT09IG5vSW5kZXggP1xuXHRcdGlzUmVtb3ZlZCggcmVtb3ZlZCwgZGF0ZUlkLCB0aWNrZXRJZCwgdHJ1ZSApIDpcblx0XHRpbmRleDtcblx0aWYgKCBpbmRleCA+IG5vSW5kZXggKSB7XG5cdFx0cmVtb3ZlZFsgZGF0ZUlkIF0uc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdGlmICggaXNFbXB0eSggcmVtb3ZlZFsgZGF0ZUlkIF0gKSApIHtcblx0XHRcdGRlbGV0ZSByZW1vdmVkWyBkYXRlSWQgXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlbW92ZWQ7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHByZXZTdGF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVJZFxuICogQHBhcmFtIHtudW1iZXJ9IHRpY2tldElkXG4gKiBAcmV0dXJuIHtPYmplY3R9IHVwZGF0ZWQgc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZVRpY2tldEVudGl0eSA9ICggcHJldlN0YXRlLCBkYXRlSWQsIHRpY2tldElkICkgPT4ge1xuXHRjb25zdCBpbmRleCA9IGlzQXNzaWduZWQoIHByZXZTdGF0ZS5hc3NpZ25lZCwgZGF0ZUlkLCB0aWNrZXRJZCwgdHJ1ZSApO1xuXHRpZiAoIGluZGV4ID4gbm9JbmRleCApIHtcblx0XHRwcmV2U3RhdGUuYXNzaWduZWQgPSB1bkFzc2lnblRpY2tldEVudGl0eShcblx0XHRcdHByZXZTdGF0ZS5hc3NpZ25lZCxcblx0XHRcdGRhdGVJZCxcblx0XHRcdHRpY2tldElkLFxuXHRcdFx0aW5kZXhcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGlmICggISBpc0FycmF5KCBwcmV2U3RhdGUucmVtb3ZlZFsgZGF0ZUlkIF0gKSApIHtcblx0XHRcdHByZXZTdGF0ZS5yZW1vdmVkWyBkYXRlSWQgXSA9IFtdO1xuXHRcdH1cblx0XHRpZiAoICEgaXNSZW1vdmVkKCBwcmV2U3RhdGUucmVtb3ZlZCwgZGF0ZUlkLCB0aWNrZXRJZCApICkge1xuXHRcdFx0cHJldlN0YXRlLnJlbW92ZWRbIGRhdGVJZCBdLnB1c2goIHRpY2tldElkICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjbGVhblN0YXRlKCBwcmV2U3RhdGUgKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gcmVtb3ZlZFxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVJZFxuICogQHBhcmFtIHtudW1iZXJ9IHRpY2tldElkXG4gKiBAcmV0dXJuIHtudW1iZXJ9ICAgIFx0XHR0aGUgbnVtYmVyIG9mIGRhdGUgdGlja2V0cyBpbiByZW1vdmVkXG4gKiAgICAgICAgICAgICAgXHRcdFx0Y29sbGVjdGlvbiBtYXRjaGluZyBzdXBwbGllZCB0aWNrZXRcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZWRDb3VudCA9ICggcmVtb3ZlZCwgZGF0ZUlkID0gMCwgdGlja2V0SWQgPSAwICkgPT4ge1xuXHRpZiAoIGRhdGVJZCAmJiBpc0FycmF5KCByZW1vdmVkWyBkYXRlSWQgXSApICkge1xuXHRcdHJldHVybiByZW1vdmVkWyBkYXRlSWQgXS5sZW5ndGg7XG5cdH1cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGNvdW50ID0gMDtcblx0aWYgKCB0aWNrZXRJZCApIHtcblx0XHRmb3IgKCBjb25zdCBkYXRlSUQgaW4gcmVtb3ZlZCApIHtcblx0XHRcdGlmICggaXNBcnJheSggcmVtb3ZlZFsgZGF0ZUlEIF0gKSApIHtcblx0XHRcdFx0aW5kZXggPSByZW1vdmVkWyBkYXRlSUQgXS5pbmRleE9mKCB0aWNrZXRJZCApO1xuXHRcdFx0XHRpZiAoIGluZGV4ID4gbm9JbmRleCApIHtcblx0XHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb3VudDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gcHJldlN0YXRlXG4gKiBAcmV0dXJuIHtPYmplY3R9IHVwZGF0ZWQgc3RhdGVcbiAqL1xuY29uc3QgY2xlYW5TdGF0ZSA9ICggcHJldlN0YXRlICkgPT4ge1xuXHRjb25zdCBhc3NpZ25lZCA9IG9taXRCeSggcHJldlN0YXRlLmFzc2lnbmVkLCBpc1VuZGVmaW5lZCApO1xuXHRjb25zdCByZW1vdmVkID0gb21pdEJ5KCBwcmV2U3RhdGUucmVtb3ZlZCwgaXNVbmRlZmluZWQgKTtcblx0cmV0dXJuIHsgYXNzaWduZWQsIHJlbW92ZWQgfTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZmlsdGVyLCBmaW5kSW5kZXgsIGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VSZWYgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgRU5URVIgfSBmcm9tICdAd29yZHByZXNzL2tleWNvZGVzJztcbmltcG9ydCB7XG5cdENhbGVuZGFyUGFnZURhdGUsXG5cdFJlc3BvbnNpdmVUYWJsZSxcblx0dHdvQ29sdW1uQWRtaW5Gb3JtTGF5b3V0LFxuXHR3aXRoRm9ybUNvbnRhaW5lckFuZFBsYWNlaG9sZGVyLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBkYXRlVGltZU1vZGVsLCB0aWNrZXRNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGNvbXBvc2UsIGlmQ29uZGl0aW9uIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhFZGl0b3JNb2RhbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VkaXRvci1ob2NzJztcbmltcG9ydCB7IHdpdGhFbnRpdHlQYWdpbmF0aW9uIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgd2l0aERpc3BhdGNoLCB3aXRoU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgKiBhcyBoYW5kbGVyIGZyb20gJy4vdGlja2V0LWFzc2lnbm1lbnRzLWhhbmRsZXInO1xuaW1wb3J0ICcuL3RpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyLmNzcyc7XG5pbXBvcnQgeyBzb3J0RGF0ZUVudGl0aWVzTGlzdCB9IGZyb20gJy4uL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9maWx0ZXItYmFyL2RhdGUtZW50aXRpZXMtbGlzdC1maWx0ZXItdXRpbHMnO1xuaW1wb3J0IHsgd2l0aEVkaXRvckRhdGVFbnRpdGllcywgd2l0aEVkaXRvclRpY2tldEVudGl0aWVzIH0gZnJvbSAnLi4vaG9jcyc7XG5pbXBvcnQgeyB1c2VBc3NpZ25tZW50c0NhbGN1bGF0b3IgfSBmcm9tICcuL2hvb2tzJztcblxuY29uc3Qgbm9JbmRleCA9IC0xO1xuXG5jb25zdCB7XG5cdEZvcm1JbmZvLFxuXHRGb3JtU2VjdGlvbixcblx0Rm9ybVdyYXBwZXIsXG5cdEZvcm1TYXZlQ2FuY2VsQnV0dG9ucyxcbn0gPSB0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQ7XG5cbmNvbnN0IHsgZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3M6IGdldERhdGVCZ0NvbG9yQ2xhc3MgfSA9IGRhdGVUaW1lTW9kZWw7XG5jb25zdCB7IGdldEJhY2tncm91bmRDb2xvckNsYXNzOiBnZXRUaWNrZXRCZ0NvbG9yQ2xhc3MgfSA9IHRpY2tldE1vZGVsO1xuXG5jb25zdCBUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCA9ICgge1xuXHRlbnRpdGllczogZGF0ZUVudGl0aWVzLFxuXHR0aWNrZXRFbnRpdGllcyxcblx0dGlja2V0RW50aXRpZXNCeURhdGVJZHMsXG5cdGFkZFRpY2tldEVudGl0aWVzLFxuXHRyZW1vdmVUaWNrZXRFbnRpdGllcyxcblx0cGFnaW5hdGlvbixcblx0dG9nZ2xlRWRpdG9yLFxuXHRoYXNOb0Fzc2lnbm1lbnRzLFxuXHRub0Fzc2lnbm1lbnRzTWVzc2FnZSxcblx0YXNzaWduZWRTdGF0ZSxcblx0c2V0QXNzaWduZWRTdGF0ZSxcblx0YXNzaWdubWVudENvdW50cyxcbn0gKSA9PiB7XG5cdGNvbnN0IFsgc3VibWl0dGluZywgc2V0U3VibWl0dGluZyBdID0gdXNlU3RhdGUoIGZhbHNlICk7XG5cdGNvbnN0IFsgZm9ybUVycm9yLCBzZXRGb3JtRXJyb3IgXSA9IHVzZVN0YXRlKCAnJyApO1xuXHRjb25zdCBwcm9jZXNzQ2hhbmdlcyA9IHVzZUNhbGxiYWNrKCAoKSA9PiB7XG5cdFx0aWYgKCBoYXNOb0Fzc2lnbm1lbnRzICkge1xuXHRcdFx0Ly8gYnJpbmdzIHVwIGNvbmZpcm0gbW9kYWwgYmVjYXVzZSB0aGUgZWRpdG9yIHdvbid0IGNsb3NlXG5cdFx0XHR0b2dnbGVFZGl0b3IoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c2V0U3VibWl0dGluZyggdHJ1ZSApO1xuXHRcdGhhbmRsZXIucHJvY2Vzc0NoYW5nZXMoXG5cdFx0XHRhc3NpZ25lZFN0YXRlLmFzc2lnbmVkLFxuXHRcdFx0YWRkVGlja2V0RW50aXRpZXMsXG5cdFx0XHRhc3NpZ25lZFN0YXRlLnJlbW92ZWQsXG5cdFx0XHRyZW1vdmVUaWNrZXRFbnRpdGllcyxcblx0XHQpLnRoZW4oICggdXBkYXRlcyApID0+IHtcblx0XHRcdGNvbnN0IHdhc1VwZGF0ZWQgPSBmaWx0ZXIoIHVwZGF0ZXMsICggdXBkYXRlZCApID0+IHtcblx0XHRcdFx0cmV0dXJuICEhIHVwZGF0ZWQ7XG5cdFx0XHR9ICk7XG5cdFx0XHR0b2dnbGVFZGl0b3IoIHdhc1VwZGF0ZWQubGVuZ3RoID4gMCApO1xuXHRcdH0gKS5jYXRjaCggKCBlcnJvciApID0+IHtcblx0XHRcdHdhcm5pbmcoIGZhbHNlLCBlcnJvciApO1xuXHRcdH0gKTtcblx0fSwgW1xuXHRcdGFzc2lnbmVkU3RhdGUsXG5cdFx0YWRkVGlja2V0RW50aXRpZXMsXG5cdFx0cmVtb3ZlVGlja2V0RW50aXRpZXMsXG5cdFx0aGFzTm9Bc3NpZ25tZW50cyxcblx0XSApO1xuXHRjb25zdCBhc3NpZ25UaWNrZXRFbnRpdHkgPSB1c2VDYWxsYmFjayhcblx0XHQoIGRhdGVJZCwgdGlja2V0SWQgKSA9PiB7XG5cdFx0XHRzZXRBc3NpZ25lZFN0YXRlKCAoIHByZXZTdGF0ZSApID0+IHtcblx0XHRcdFx0cmV0dXJuIGhhbmRsZXIuYXNzaWduVGlja2V0RW50aXR5KFxuXHRcdFx0XHRcdGNsb25lRGVlcCggcHJldlN0YXRlICksXG5cdFx0XHRcdFx0ZGF0ZUlkLFxuXHRcdFx0XHRcdHRpY2tldElkXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0XHRzZXRGb3JtRXJyb3IoICcnICk7XG5cdFx0fSxcblx0XHRbIHNldEZvcm1FcnJvciBdXG5cdCk7XG5cdGNvbnN0IHJlbW92ZVRpY2tldEVudGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdCggZGF0ZUlkLCB0aWNrZXRJZCApID0+IHtcblx0XHRcdHNldEFzc2lnbmVkU3RhdGUoICggcHJldlN0YXRlICkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaGFuZGxlci5yZW1vdmVUaWNrZXRFbnRpdHkoXG5cdFx0XHRcdFx0Y2xvbmVEZWVwKCBwcmV2U3RhdGUgKSxcblx0XHRcdFx0XHRkYXRlSWQsXG5cdFx0XHRcdFx0dGlja2V0SWRcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9LFxuXHRcdFtdXG5cdCk7XG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtBcnJheX0gdGlja2V0RW50aXRpZXNcblx0ICogQHBhcmFtIHtudW1iZXJ9IGRhdGVDb3VudFxuXHQgKiBAcmV0dXJuIHtBcnJheX0gdGFibGUgaGVhZGVyIGNlbGwgZGF0YVxuXHQgKi9cblx0Y29uc3QgdGlja2V0SGVhZGVycyA9IHVzZUNhbGxiYWNrKFxuXHRcdCgpID0+IHtcblx0XHRcdGNvbnN0IGRhdGVDb3VudCA9IGRhdGVFbnRpdGllcy5sZW5ndGg7XG5cdFx0XHRjb25zdCBoZWFkZXJDZWxscyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdyb3cnLFxuXHRcdFx0XHRcdGNsYXNzOiAnJyxcblx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdH0sXG5cdFx0XHRdO1xuXHRcdFx0aWYgKCBkYXRlQ291bnQgPiAxICkge1xuXHRcdFx0XHRoZWFkZXJDZWxscy5wdXNoKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0XHRcdGNsYXNzOiAnZWUtdGFtLWRhdGVzLWhlYWRlcicsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dGlja2V0RW50aXRpZXMuZm9yRWFjaCggKCB0aWNrZXQgKSA9PiB7XG5cdFx0XHRcdHdhcm5pbmcoXG5cdFx0XHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoIHRpY2tldCwgJ3RpY2tldCcgKSxcblx0XHRcdFx0XHQnSW52YWxpZCBFRSBUaWNrZXQgbW9kZWwgb2JqZWN0ISdcblx0XHRcdFx0KTtcblx0XHRcdFx0bGV0IHN0YXR1c0NsYXNzID0gZ2V0VGlja2V0QmdDb2xvckNsYXNzKCB0aWNrZXQgKTtcblx0XHRcdFx0c3RhdHVzQ2xhc3MgPSBgZWUtdGFtLXRpY2tldC1oZWFkZXItc3RhdHVzICR7IHN0YXR1c0NsYXNzIH1gO1xuXHRcdFx0XHRjb25zdCBzYWxlRGF0ZSA9IHRpY2tldC5zdGFydERhdGUudG9Gb3JtYXQoICdNTU0gREQgWVlZWScgKTtcblx0XHRcdFx0aGVhZGVyQ2VsbHMucHVzaChcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR0eXBlOiAnY2VsbCcsXG5cdFx0XHRcdFx0XHRjbGFzczogJ2VlLXRhbS10aWNrZXQtaGVhZGVyJyxcblx0XHRcdFx0XHRcdHZhbHVlOiAoXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGFtLXRpY2tldC1oZWFkZXItZGl2XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyBzdGF0dXNDbGFzcyB9PlxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGFtLXRpY2tldC1oZWFkZXItZGF0ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHNhbGVEYXRlIH1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXRhbS10aWNrZXQtaWRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHsgYCMkeyB0aWNrZXQuaWQgfWAgfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGFtLXRpY2tldC1oZWFkZXItdGl0bGVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHsgdGlja2V0Lm5hbWUgfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGFtLXRpY2tldC1oZWFkZXItcHJpY2VcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHsgYCR7IHRpY2tldC5wcmljZSB9YCB9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10YW0tdGlja2V0LWhlYWRlci1kYXRlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgc2FsZURhdGUgfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdFx0cmV0dXJuIGhlYWRlckNlbGxzO1xuXHRcdH0sXG5cdFx0WyB0aWNrZXRFbnRpdGllcywgZGF0ZUVudGl0aWVzLCBnZXRUaWNrZXRCZ0NvbG9yQ2xhc3MgXVxuXHQpO1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtudW1iZXJ9IHllYXJcblx0ICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0aWVzXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgdGFibGUgcm93XG5cdCAqL1xuXHRjb25zdCB5ZWFyUm93ID0gdXNlQ2FsbGJhY2soXG5cdFx0KCB5ZWFyLCB0aWNrZXRFbnRpdGllc0ZvclllYXIgKSA9PiB7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3JvdycsXG5cdFx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHRcdGNsYXNzOiAnZWUtdGFtLXllYXItcm93Jyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0XHR2YWx1ZTogeWVhcixcblx0XHRcdFx0XHRjbGFzczogJ2VlLXRhbS1kYXRlLWxhYmVsJyxcblx0XHRcdFx0fSxcblx0XHRcdF07XG5cdFx0XHR0aWNrZXRFbnRpdGllc0ZvclllYXIuZm9yRWFjaCggKCkgPT4ge1xuXHRcdFx0XHRyb3dEYXRhLnB1c2goXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dHlwZTogJ2NlbGwnLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHRcdFx0cmVuZGVyOiAoIHJvd051bWJlciwgY29sTnVtYmVyICkgPT4gKFxuXHRcdFx0XHRcdFx0XHQ8dGRcblx0XHRcdFx0XHRcdFx0XHRrZXk9eyBgcm93LSR7IHJvd051bWJlciB9LWNvbC0keyBjb2xOdW1iZXIgfWAgfVxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17XG5cdFx0XHRcdFx0XHRcdFx0XHQnZWUtdGFtLWRhdGUtcm93LXRpY2tldCBlZS1yVGFibGUtYm9keS10ZCdcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdFx0cmV0dXJuIHJvd0RhdGE7XG5cdFx0fSxcblx0XHRbXVxuXHQpO1xuXG5cdC8qKiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHN1cHBsaWVkIGRhdGUgYWxyZWFkeSBoYXMgYSByZWxhdGlvbiB0byB0aGVcblx0ICogIHN1cHBsaWVkIHRpY2tldCwgb3IgaXMgcXVldWVkIGZvciByZW1vdmFsLCBvciBoYXMgYmVlbiBhc3NpZ25lZFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHlcblx0ICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuXHQgKiBAcGFyYW0ge0FycmF5fSBkYXRlVGlja2V0RW50aXRpZXNcblx0ICogQHBhcmFtIHtPYmplY3R9IGFzc2lnbmVkXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSByZW1vdmVkXG5cdCAqIEByZXR1cm4ge09iamVjdH0gSlNPTiBvYmplY3Qgd2l0aCBoYXNUaWNrZXQsIGlzQXNzaWduZWQsIGlzUmVtb3ZlZCB2YWx1ZXNcblx0ICovXG5cdGNvbnN0IGRldGVybWluZUN1cnJlbnRBc3NpZ25tZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KCBkYXRlRW50aXR5LCB0aWNrZXRFbnRpdHksIGRhdGVUaWNrZXRFbnRpdGllcyApID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGhhc1RpY2tldDogZmluZEluZGV4KFxuXHRcdFx0XHRcdGRhdGVUaWNrZXRFbnRpdGllcyxcblx0XHRcdFx0XHR7IGlkOiB0aWNrZXRFbnRpdHkuaWQgfVxuXHRcdFx0XHQpID4gbm9JbmRleCxcblx0XHRcdFx0aXNBc3NpZ25lZDogaGFuZGxlci5pc0Fzc2lnbmVkKFxuXHRcdFx0XHRcdGFzc2lnbmVkU3RhdGUuYXNzaWduZWQsXG5cdFx0XHRcdFx0ZGF0ZUVudGl0eS5pZCxcblx0XHRcdFx0XHR0aWNrZXRFbnRpdHkuaWQsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpID4gbm9JbmRleCxcblx0XHRcdFx0aXNSZW1vdmVkOiBoYW5kbGVyLmlzUmVtb3ZlZChcblx0XHRcdFx0XHRhc3NpZ25lZFN0YXRlLnJlbW92ZWQsXG5cdFx0XHRcdFx0ZGF0ZUVudGl0eS5pZCxcblx0XHRcdFx0XHR0aWNrZXRFbnRpdHkuaWQsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpID4gbm9JbmRleCxcblx0XHRcdH07XG5cdFx0fSxcblx0XHRbIGFzc2lnbmVkU3RhdGUgXVxuXHQpO1xuXG5cdC8qKlxuXHQgKiB1c2VkIHRvIGRldGVybWluZSBpZiB3ZSBhcmUgYWRkaW5nIG9yIHJlbW92aW5nIGEgdGlja2V0IGFzc2lnbm1lbnRcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzVGlja2V0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNBc3NpZ25lZFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVtb3ZlZFxuXHQgKiBAcGFyYW0ge251bWJlcn0gdG90YWxUaWNrZXRBc3NpZ25tZW50c0ZvckRhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsRGF0ZUFzc2lnbm1lbnRzRm9yVGlja2V0XG5cdCAqIEByZXR1cm4ge09iamVjdH0gSlNPTiBvYmplY3Qgd2l0aCBhY3Rpb24gbW9kaWZpZXIgdmFsdWVzXG5cdCAqL1xuXHRjb25zdCBnZXRBY3Rpb25Nb2RpZmllcnMgPSB1c2VDYWxsYmFjayhcblx0XHQoIGhhc1RpY2tldCwgaXNBc3NpZ25lZCwgaXNSZW1vdmVkICkgPT4ge1xuXHRcdFx0Y29uc3QgY3VycmVudGx5QXNzaWduZWQgPSBpc0Fzc2lnbmVkIHx8XG5cdFx0XHRcdCggaGFzVGlja2V0ICYmICEgaXNSZW1vdmVkICk7XG5cdFx0XHRyZXR1cm4geyBjdXJyZW50bHlBc3NpZ25lZCB9O1xuXHRcdH0sXG5cdFx0W11cblx0KTtcblxuXHQvKipcblx0ICogZGV0ZXJtaW5lcyB3aGF0IGNhbGxiYWNrIHRvIHVzZSB3aGVuIG1vZGlmeWluZyBhIHRpY2tldCBhc3NpZ25tZW50XG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGN1cnJlbnRseUFzc2lnbmVkXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FuUmVtb3ZlQXNzaWdubWVudFxuXHQgKiBAcGFyYW0ge251bWJlcn0gdG90YWxEYXRlQXNzaWdubWVudHNGb3JUaWNrZXRcblx0ICogQHJldHVybiB7RnVuY3Rpb259IHRpY2tldCBjZWxsIGJ1dHRvbiBhY3Rpb25cblx0ICovXG5cdGNvbnN0IGdldEFjdGlvbiA9IHVzZUNhbGxiYWNrKFxuXHRcdCggY3VycmVudGx5QXNzaWduZWQgKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3VycmVudGx5QXNzaWduZWQgP1xuXHRcdFx0XHRyZW1vdmVUaWNrZXRFbnRpdHkgOlxuXHRcdFx0XHRhc3NpZ25UaWNrZXRFbnRpdHk7XG5cdFx0fSxcblx0XHRbIHJlbW92ZVRpY2tldEVudGl0eSwgYXNzaWduVGlja2V0RW50aXR5IF1cblx0KTtcblxuXHQvKipcblx0ICogZXh0cmEgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGlja2V0IGNlbGwgaWYgYXNzaWdubWVudCBlcnJvciBleGlzdHNcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFRpY2tldEFzc2lnbm1lbnRzRm9yRGF0ZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdG90YWxEYXRlQXNzaWdubWVudHNGb3JUaWNrZXRcblx0ICogQHJldHVybiB7c3RyaW5nfSBjc3MgY2xhc3Ncblx0ICovXG5cdGNvbnN0IGdldEFzc2lnbm1lbnRzRXJyb3JDbGFzcyA9IHVzZUNhbGxiYWNrKFxuXHRcdCggZGF0ZUVudGl0eSwgdGlja2V0RW50aXR5ICkgPT4ge1xuXHRcdFx0Y29uc3QgZW50aXRpZXNIYXZlRW1wdHlBc3NpZ25tZW50cyA9ICgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFzc2lnbm1lbnRDb3VudHMuZGF0ZXNbIGRhdGVFbnRpdHkuaWQgXSA9PT0gMCB8fFxuXHRcdFx0XHRcdGFzc2lnbm1lbnRDb3VudHMudGlja2V0c1sgdGlja2V0RW50aXR5LmlkIF0gPT09IDA7XG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIGhhc05vQXNzaWdubWVudHMgJiYgZW50aXRpZXNIYXZlRW1wdHlBc3NpZ25tZW50cygpID9cblx0XHRcdFx0JyBlZS10YW0tYXNzaWdubWVudHMtZXJyb3InIDpcblx0XHRcdFx0Jyc7XG5cdFx0fSxcblx0XHRbIGhhc05vQXNzaWdubWVudHMsIGFzc2lnbm1lbnRDb3VudHMgXVxuXHQpO1xuXG5cdC8qKlxuXHQgKiBpY29uIGFuZCBjb2xvciBjbGFzcyByZXByZXNlbnRpbmcgY3VycmVudCB0aWNrZXQgZGF0ZSBhc3NpZ25tZW50XG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGhhc1RpY2tldFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzQXNzaWduZWRcblx0ICogQHBhcmFtIHtib29sZWFufSBpc1JlbW92ZWRcblx0ICogQHJldHVybiB7T2JqZWN0fSBKU09OIG9iamVjdCB3aXRoIGljb24gYW5kIGJnQ29sb3IgdmFsdWVzXG5cdCAqL1xuXHRjb25zdCBnZXRJY29uQW5kQmdDb2xvciA9IHVzZUNhbGxiYWNrKFxuXHRcdCggaGFzVGlja2V0LCBpc0Fzc2lnbmVkLCBpc1JlbW92ZWQgKSA9PiB7XG5cdFx0XHRsZXQgaWNvbiA9ICcnO1xuXHRcdFx0bGV0IGJnQ29sb3IgPSAnZWUtdGFtLXRpY2tldC1yZWxhdGlvbi1idXR0b24nO1xuXHRcdFx0aWYgKCBoYXNUaWNrZXQgKSB7XG5cdFx0XHRcdGlmICggaXNSZW1vdmVkICkge1xuXHRcdFx0XHRcdGljb24gPSAnbm8nO1xuXHRcdFx0XHRcdGJnQ29sb3IgKz0gJyBlZS10YW0tcmVtb3ZlLXRpY2tldC1yZWxhdGlvbic7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWNvbiA9ICd0aWNrZXRzLWFsdCc7XG5cdFx0XHRcdFx0YmdDb2xvciArPSAnIGVlLXRhbS1oYXMtdGlja2V0LXJlbGF0aW9uJztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICggaXNBc3NpZ25lZCApIHtcblx0XHRcdFx0aWNvbiA9ICd0aWNrZXRzLWFsdCc7XG5cdFx0XHRcdGJnQ29sb3IgKz0gJyBlZS10YW0tYWRkLXRpY2tldC1yZWxhdGlvbic7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpY29uID0gJ21pbnVzJztcblx0XHRcdFx0YmdDb2xvciArPSAnIGVlLXRhbS1uby10aWNrZXQtcmVsYXRpb24nO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgaWNvbiwgYmdDb2xvciB9O1xuXHRcdH0sXG5cdFx0W11cblx0KTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5XG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB0aWNrZXRFbnRpdHlcblx0ICogQHBhcmFtIHtBcnJheX0gZGF0ZVRpY2tldEVudGl0aWVzXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgdGFibGUgY2VsbFxuXHQgKi9cblx0Y29uc3QgdGlja2V0Q2VsbCA9IHVzZUNhbGxiYWNrKFxuXHRcdCggZGF0ZUVudGl0eSwgdGlja2V0RW50aXR5LCBkYXRlVGlja2V0RW50aXRpZXMgKSA9PiB7XG5cdFx0XHRjb25zdCB7XG5cdFx0XHRcdGhhc1RpY2tldCxcblx0XHRcdFx0aXNBc3NpZ25lZCxcblx0XHRcdFx0aXNSZW1vdmVkLFxuXHRcdFx0fSA9IGRldGVybWluZUN1cnJlbnRBc3NpZ25tZW50KFxuXHRcdFx0XHRkYXRlRW50aXR5LFxuXHRcdFx0XHR0aWNrZXRFbnRpdHksXG5cdFx0XHRcdGRhdGVUaWNrZXRFbnRpdGllcyxcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB7IGN1cnJlbnRseUFzc2lnbmVkIH0gPSBnZXRBY3Rpb25Nb2RpZmllcnMoXG5cdFx0XHRcdGhhc1RpY2tldCxcblx0XHRcdFx0aXNBc3NpZ25lZCxcblx0XHRcdFx0aXNSZW1vdmVkLFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGFjdGlvbiA9IGdldEFjdGlvbiggY3VycmVudGx5QXNzaWduZWQgKTtcblx0XHRcdGNvbnN0IGFzc2lnbm1lbnRzRXJyb3JDbGFzcyA9IGdldEFzc2lnbm1lbnRzRXJyb3JDbGFzcyggZGF0ZUVudGl0eSwgdGlja2V0RW50aXR5ICk7XG5cdFx0XHRjb25zdCB7IGljb24sIGJnQ29sb3IgfSA9IGdldEljb25BbmRCZ0NvbG9yKFxuXHRcdFx0XHRoYXNUaWNrZXQsXG5cdFx0XHRcdGlzQXNzaWduZWQsXG5cdFx0XHRcdGlzUmVtb3ZlZFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6IGBlZS10YW0tZGF0ZS1yb3ctdGlja2V0JHsgYXNzaWdubWVudHNFcnJvckNsYXNzIH1gLFxuXHRcdFx0XHR2YWx1ZTogKFxuXHRcdFx0XHRcdDxJY29uQnV0dG9uXG5cdFx0XHRcdFx0XHRpY29uPXsgaWNvbiB9XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9eyBiZ0NvbG9yIH1cblx0XHRcdFx0XHRcdHNpemU9eyA0NSB9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsgKCBldmVudCApID0+IHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdGFjdGlvbiggZGF0ZUVudGl0eS5pZCwgdGlja2V0RW50aXR5LmlkICk7XG5cdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdG9uS2V5RG93bj17ICggZXZlbnQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmICggZXZlbnQua2V5Q29kZSA9PT0gRU5URVIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb24oIGRhdGVFbnRpdHkuaWQsIHRpY2tldEVudGl0eS5pZCApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpLFxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdFtcblx0XHRcdGFzc2lnbmVkU3RhdGUsXG5cdFx0XHRnZXRBY3Rpb25Nb2RpZmllcnMsXG5cdFx0XHRnZXRBY3Rpb24sXG5cdFx0XHRnZXRBc3NpZ25tZW50c0Vycm9yQ2xhc3MsXG5cdFx0XHRnZXRJY29uQW5kQmdDb2xvcixcblx0XHRcdGRldGVybWluZUN1cnJlbnRBc3NpZ25tZW50LFxuXHRcdF1cblx0KTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5XG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgdGFibGUgY2VsbFxuXHQgKi9cblx0Y29uc3QgZGF0ZUhlYWRlciA9IHVzZUNhbGxiYWNrKFxuXHRcdCggZGF0ZUVudGl0eSApID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10YW0tZGF0ZS1sYWJlbCcsXG5cdFx0XHRcdHZhbHVlOiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10YW0tZGF0ZS1sYWJlbC1kaXZcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGFtLWRhdGUtaWRcIj5cblx0XHRcdFx0XHRcdFx0eyBgIyR7IGRhdGVFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXRhbS1kYXRlLWxhYmVsLXRleHRcIj5cblx0XHRcdFx0XHRcdFx0eyBkYXRlRW50aXR5Lm5hbWUgfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8Q2FsZW5kYXJQYWdlRGF0ZVxuXHRcdFx0XHRcdFx0XHRzdGFydERhdGU9eyBkYXRlRW50aXR5LnN0YXJ0IH1cblx0XHRcdFx0XHRcdFx0c3RhdHVzQ2xhc3M9eyBnZXREYXRlQmdDb2xvckNsYXNzKCBkYXRlRW50aXR5ICkgfVxuXHRcdFx0XHRcdFx0XHRzaXplPXsgJ3NtYWxsJyB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpLFxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdFtdXG5cdCk7XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge0FycmF5fSBkYXRlRW50aXRpZXNcblx0ICogQHBhcmFtIHtBcnJheX0gdGlja2V0RW50aXRpZXNcblx0ICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0aWVzQnlEYXRlSWRzXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlQ291bnRcblx0ICogQHJldHVybiB7QXJyYXl9IGFycmF5IG9mIHJvdyBkYXRhIG9iamVjdHNcblx0ICovXG5cdGNvbnN0IGRhdGVSb3dzID0gdXNlQ2FsbGJhY2soXG5cdFx0KCkgPT4ge1xuXHRcdFx0bGV0IHllYXIgPSAwO1xuXHRcdFx0Y29uc3QgZGF0ZUNvdW50ID0gZGF0ZUVudGl0aWVzLmxlbmd0aDtcblx0XHRcdGNvbnN0IHJvd3MgPSBbXTtcblx0XHRcdGRhdGVFbnRpdGllcy5mb3JFYWNoKFxuXHRcdFx0XHQoIGV2ZW50RGF0ZSApID0+IHtcblx0XHRcdFx0XHR3YXJuaW5nKFxuXHRcdFx0XHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoIGV2ZW50RGF0ZSwgJ2RhdGV0aW1lJyApLFxuXHRcdFx0XHRcdFx0J0ludmFsaWQgRUUgRGF0ZSBtb2RlbCBvYmplY3QhJ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgZGF0ZVllYXIgPSBwYXJzZUludChcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZS5zdGFydC50b0Zvcm1hdCggJ1lZWVknICksXG5cdFx0XHRcdFx0XHQxMFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKCBkYXRlQ291bnQgPiAxICYmIGRhdGVZZWFyID4geWVhciApIHtcblx0XHRcdFx0XHRcdHllYXIgPSBkYXRlWWVhcjtcblx0XHRcdFx0XHRcdHJvd3MucHVzaCggeWVhclJvdyggeWVhciwgdGlja2V0RW50aXRpZXMgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCByb3dEYXRhID0gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAncm93Jyxcblx0XHRcdFx0XHRcdFx0Y2xhc3M6ICdlZS10YW0tZGF0ZS1yb3cnLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0aWYgKCBkYXRlQ291bnQgPiAxICkge1xuXHRcdFx0XHRcdFx0cm93RGF0YS5wdXNoKCBkYXRlSGVhZGVyKCBldmVudERhdGUgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBkYXRlVGlja2V0RW50aXRpZXMgPSB0aWNrZXRFbnRpdGllc0J5RGF0ZUlkc1sgZXZlbnREYXRlLmlkIF0gP1xuXHRcdFx0XHRcdFx0dGlja2V0RW50aXRpZXNCeURhdGVJZHNbIGV2ZW50RGF0ZS5pZCBdIDpcblx0XHRcdFx0XHRcdFtdO1xuXHRcdFx0XHRcdHRpY2tldEVudGl0aWVzLmZvckVhY2goICggdGlja2V0ICkgPT4ge1xuXHRcdFx0XHRcdFx0d2FybmluZyhcblx0XHRcdFx0XHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoIHRpY2tldCwgJ3RpY2tldCcgKSxcblx0XHRcdFx0XHRcdFx0J0ludmFsaWQgRUUgVGlja2V0IG1vZGVsIG9iamVjdCEnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cm93RGF0YS5wdXNoKFxuXHRcdFx0XHRcdFx0XHR0aWNrZXRDZWxsKCBldmVudERhdGUsIHRpY2tldCwgZGF0ZVRpY2tldEVudGl0aWVzIClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdHJvd3MucHVzaCggcm93RGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHJvd3M7XG5cdFx0fSxcblx0XHRbIGRhdGVFbnRpdGllcywgdGlja2V0RW50aXRpZXMsIHRpY2tldEVudGl0aWVzQnlEYXRlSWRzLCB0aWNrZXRDZWxsIF1cblx0KTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgY2FuY2VsIGJ1dHRvblxuXHQgKi9cblx0Y29uc3QgZ2V0Rm9ybUVycm9yID0gdXNlQ2FsbGJhY2soXG5cdFx0KCkgPT4ge1xuXHRcdFx0bGV0IGVycm9yTWVzc2FnZSA9IGZvcm1FcnJvcjtcblx0XHRcdGlmICggaGFzTm9Bc3NpZ25tZW50cyApIHtcblx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gbm9Bc3NpZ25tZW50c01lc3NhZ2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZXJyb3JNZXNzYWdlID9cblx0XHRcdFx0PEZvcm1JbmZvXG5cdFx0XHRcdFx0Zm9ybUluZm89eyBlcnJvck1lc3NhZ2UgfVxuXHRcdFx0XHRcdGRhc2hpY29uPXsgJ3dhcm5pbmcnIH1cblx0XHRcdFx0XHRkaXNtaXNzYWJsZT17IHRydWUgfVxuXHRcdFx0XHRcdGNvbFNpemU9eyAxMCB9XG5cdFx0XHRcdFx0b2Zmc2V0PXsgMSB9XG5cdFx0XHRcdC8+IDogbnVsbDtcblx0XHR9LFxuXHRcdFsgaGFzTm9Bc3NpZ25tZW50cywgZm9ybUVycm9yIF1cblx0KTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHByb2Nlc3NDaGFuZ2VzXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgc3VibWl0IGJ1dHRvblxuXHQgKi9cblx0Y29uc3Qgc3VibWl0QnV0dG9uID0gdXNlQ2FsbGJhY2soXG5cdFx0KCkgPT4ge1xuXHRcdFx0Y29uc3QgeyBGb3JtU3VibWl0QnV0dG9uIH0gPSB0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQ7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8Rm9ybVN1Ym1pdEJ1dHRvblxuXHRcdFx0XHRcdG9uQ2xpY2s9e1xuXHRcdFx0XHRcdFx0KCBldmVudCApID0+IHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdHByb2Nlc3NDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdHNldEZvcm1FcnJvciggJycgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnV0dG9uVGV4dD17IF9fKFxuXHRcdFx0XHRcdFx0J1VwZGF0ZSBUaWNrZXQgQXNzaWdubWVudHMnLFxuXHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdCkgfVxuXHRcdFx0XHRcdHN1Ym1pdHRpbmc9eyBzdWJtaXR0aW5nIH1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fSxcblx0XHRbIHByb2Nlc3NDaGFuZ2VzLCBzdWJtaXR0aW5nLCBzZXRGb3JtRXJyb3IgXVxuXHQpO1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBjYW5jZWwgYnV0dG9uXG5cdCAqL1xuXHRjb25zdCBjYW5jZWxCdXR0b24gPSB1c2VDYWxsYmFjayhcblx0XHQoKSA9PiB7XG5cdFx0XHRjb25zdCB7IEZvcm1DYW5jZWxCdXR0b24gfSA9IHR3b0NvbHVtbkFkbWluRm9ybUxheW91dDtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxGb3JtQ2FuY2VsQnV0dG9uXG5cdFx0XHRcdFx0b25DbGljaz17XG5cdFx0XHRcdFx0XHQoIGV2ZW50ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdFx0c2V0Rm9ybUVycm9yKCAnJyApO1xuXHRcdFx0XHRcdFx0XHR0b2dnbGVFZGl0b3IoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH0sXG5cdFx0WyBzZXRGb3JtRXJyb3IsIHRvZ2dsZUVkaXRvciBdXG5cdCk7XG5cblx0bGV0IHRhYmxlSWQgPSAnZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXItJztcblx0aWYgKCBkYXRlRW50aXRpZXMubGVuZ3RoID09PSAxICkge1xuXHRcdHRhYmxlSWQgKz0gZGF0ZUVudGl0aWVzWyAwIF0uaWQ7XG5cdH0gZWxzZSB7XG5cdFx0dGFibGVJZCArPSBkYXRlRW50aXRpZXMubGVuZ3RoICsgJy0nICsgdGlja2V0RW50aXRpZXMubGVuZ3RoO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0PEZvcm1XcmFwcGVyPlxuXHRcdFx0PEZvcm1TZWN0aW9uPlxuXHRcdFx0XHR7IGdldEZvcm1FcnJvcigpIH1cblx0XHRcdFx0PFJlc3BvbnNpdmVUYWJsZVxuXHRcdFx0XHRcdGNvbHVtbnM9eyB0aWNrZXRIZWFkZXJzKCkgfVxuXHRcdFx0XHRcdHJvd0RhdGE9eyBkYXRlUm93cygpIH1cblx0XHRcdFx0XHRtZXRhRGF0YT17IHtcblx0XHRcdFx0XHRcdHRhYmxlSWQsXG5cdFx0XHRcdFx0XHR0YWJsZUNhcHRpb246IF9fKFxuXHRcdFx0XHRcdFx0XHQnVGlja2V0IEFzc2lnbm1lbnRzJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdGhhc1Jvd0hlYWRlcnM6IGRhdGVFbnRpdGllcy5sZW5ndGggPiAxLFxuXHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdGNsYXNzZXM9eyB7XG5cdFx0XHRcdFx0XHR0YWJsZUNsYXNzOiAnZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXInLFxuXHRcdFx0XHRcdH0gfVxuXHRcdFx0XHQvPlxuXHRcdFx0XHR7IHBhZ2luYXRpb24gfVxuXHRcdFx0PC9Gb3JtU2VjdGlvbj5cblx0XHRcdDxGb3JtU2F2ZUNhbmNlbEJ1dHRvbnNcblx0XHRcdFx0c3VibWl0QnV0dG9uPXsgc3VibWl0QnV0dG9uKCkgfVxuXHRcdFx0XHRjYW5jZWxCdXR0b249eyBjYW5jZWxCdXR0b24oKSB9XG5cdFx0XHQvPlxuXHRcdDwvRm9ybVdyYXBwZXI+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKCBbXG5cdGlmQ29uZGl0aW9uKCAoIHsgZWRpdG9yT3BlbiB9ICkgPT4gZWRpdG9yT3BlbiApLFxuXHR3aXRoRWRpdG9yRGF0ZUVudGl0aWVzLFxuXHR3aXRoRWRpdG9yVGlja2V0RW50aXRpZXMsXG5cdHdpdGhEaXNwYXRjaCggKCBkaXNwYXRjaCwgb3duUHJvcHMsIHJlZ2lzdHJ5ICkgPT4ge1xuXHRcdGNvbnN0IHsgZ2V0RW50aXRpZXNCeUlkcyB9ID0gcmVnaXN0cnkuc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdGNvbnN0IGFkZFRpY2tldEVudGl0aWVzID0gKCBkYXRlSWQsIHRpY2tldElkcyApID0+IHtcblx0XHRcdGNvbnN0IHsgY3JlYXRlUmVsYXRpb25zIH0gPSBkaXNwYXRjaCggJ2V2ZW50ZXNwcmVzc28vY29yZScgKTtcblx0XHRcdHJldHVybiBjcmVhdGVSZWxhdGlvbnMoXG5cdFx0XHRcdCdkYXRldGltZScsXG5cdFx0XHRcdGRhdGVJZCxcblx0XHRcdFx0J3RpY2tldCcsXG5cdFx0XHRcdGdldEVudGl0aWVzQnlJZHMoICd0aWNrZXQnLCB0aWNrZXRJZHMgKVxuXHRcdFx0KTtcblx0XHR9O1xuXHRcdGNvbnN0IHJlbW92ZVRpY2tldEVudGl0aWVzID0gKCBkYXRlSWQsIHRpY2tldElkcyApID0+IHtcblx0XHRcdGNvbnN0IHsgcmVtb3ZlUmVsYXRpb25Gb3JFbnRpdHkgfSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0Y29uc3QgcmVsYXRpb25zUmVtb3ZlZCA9IFtdO1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB0aWNrZXRJZHMgKSApIHtcblx0XHRcdFx0dGlja2V0SWRzLmZvckVhY2goICggdGlja2V0SWQgKSA9PiB7XG5cdFx0XHRcdFx0cmVsYXRpb25zUmVtb3ZlZC5wdXNoKFxuXHRcdFx0XHRcdFx0cmVtb3ZlUmVsYXRpb25Gb3JFbnRpdHkoXG5cdFx0XHRcdFx0XHRcdCdkYXRldGltZScsXG5cdFx0XHRcdFx0XHRcdGRhdGVJZCxcblx0XHRcdFx0XHRcdFx0J3RpY2tldCcsXG5cdFx0XHRcdFx0XHRcdHRpY2tldElkXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKCByZWxhdGlvbnNSZW1vdmVkICk7XG5cdFx0fTtcblx0XHRyZXR1cm4geyBhZGRUaWNrZXRFbnRpdGllcywgcmVtb3ZlVGlja2V0RW50aXRpZXMgfTtcblx0fSApLFxuXHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiAoIHByb3BzICkgPT4ge1xuXHRcdC8vIGFkZHMgYSByZWYgZm9yIGhhbmRsaW5nIGNvdW50IHVwZGF0ZXMuXG5cdFx0Y29uc3QgYXNzaWdubWVudENvdW50cyA9IHVzZVJlZiggeyBkYXRlczoge30sIHRpY2tldHM6IHt9IH0gKTtcblx0XHRjb25zdCB0aWNrZXRFbnRpdGllc0J5RGF0ZUlkcyA9IHVzZVJlZigge30gKTtcblx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnRcblx0XHRcdGFzc2lnbm1lbnRDb3VudHM9eyBhc3NpZ25tZW50Q291bnRzIH1cblx0XHRcdHRpY2tldEVudGl0aWVzQnlEYXRlSWRzPXsgdGlja2V0RW50aXRpZXNCeURhdGVJZHMgfVxuXHRcdFx0eyAuLi5wcm9wcyB9XG5cdFx0Lz47XG5cdH0sXG5cdHdpdGhTZWxlY3QoICggc2VsZWN0LCBvd25Qcm9wcyApID0+IHtcblx0XHRjb25zdCB7XG5cdFx0XHRkYXRlRW50aXR5LFxuXHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdFx0dGlja2V0RW50aXR5LFxuXHRcdFx0dGlja2V0RW50aXRpZXMsXG5cdFx0XHRlbnRpdGllcyA9IFtdLFxuXHRcdFx0YXNzaWdubWVudENvdW50cyxcblx0XHRcdHRpY2tldEVudGl0aWVzQnlEYXRlSWRzLFxuXHRcdH0gPSBvd25Qcm9wcztcblx0XHRjb25zdCBkdG1Qcm9wcyA9IHtcblx0XHRcdGVudGl0aWVzLFxuXHRcdFx0dGlja2V0RW50aXRpZXMsXG5cdFx0XHRkYXRlRW50aXRpZXMsXG5cdFx0XHRub3RpY2U6IF9fKFxuXHRcdFx0XHQnbG9hZGluZyBldmVudCBkYXRlIHRpY2tldCBhc3NpZ25tZW50cycsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdCksXG5cdFx0fTtcblx0XHRjb25zdCB7IGdldFJlbGF0ZWRFbnRpdGllcyB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXG5cdFx0Ly8gaW5pdGlhbCBzZXR1cCBiYXNlZCBvbiBpbmNvbWluZyBlbnRpdHlcblx0XHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBkYXRlRW50aXR5LCAnZGF0ZXRpbWUnICkgKSB7XG5cdFx0XHRkdG1Qcm9wcy5lbnRpdGllcyA9IFsgZGF0ZUVudGl0eSBdO1xuXHRcdH0gZWxzZSBpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksICd0aWNrZXQnICkgKSB7XG5cdFx0XHRkdG1Qcm9wcy5lbnRpdGllcyA9IHNvcnREYXRlRW50aXRpZXNMaXN0KCBkYXRlRW50aXRpZXMgKTtcblx0XHRcdGR0bVByb3BzLnRpY2tldEVudGl0aWVzID0gWyB0aWNrZXRFbnRpdHkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZHRtUHJvcHMuZW50aXRpZXMgPSBzb3J0RGF0ZUVudGl0aWVzTGlzdCggZGF0ZUVudGl0aWVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gbmVlZCB0byBzZXR1cCB0aGUgYXNzaWdubWVudENvdW50cyBmb3IgYWxsIHRoZSB0aWNrZXRzIGFuZCBhbGwgdGhlIGRhdGVzIVxuXHRcdGR0bVByb3BzLmVudGl0aWVzLmZvckVhY2goICggZGF0ZSApID0+IHtcblx0XHRcdGlmICggdHlwZW9mIGFzc2lnbm1lbnRDb3VudHMuY3VycmVudC5kYXRlc1sgZGF0ZS5pZCBdID09PSAndW5kZWZpbmVkJyApIHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZFRpY2tldHMgPSBnZXRSZWxhdGVkRW50aXRpZXMoIGRhdGUsICd0aWNrZXQnICk7XG5cdFx0XHRcdHRpY2tldEVudGl0aWVzQnlEYXRlSWRzLmN1cnJlbnRbIGRhdGUuaWQgXSA9IHJlbGF0ZWRUaWNrZXRzO1xuXHRcdFx0XHRhc3NpZ25tZW50Q291bnRzLmN1cnJlbnQuZGF0ZXNbIGRhdGUuaWQgXSA9IHJlbGF0ZWRUaWNrZXRzLmxlbmd0aCB8fCAwO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRkdG1Qcm9wcy50aWNrZXRFbnRpdGllcy5mb3JFYWNoKCAoIHRpY2tldCApID0+IHtcblx0XHRcdGlmICggdHlwZW9mIGFzc2lnbm1lbnRDb3VudHMuY3VycmVudC50aWNrZXRzWyB0aWNrZXQuaWQgXSA9PT0gJ3VuZGVmaW5lZCcgKSB7XG5cdFx0XHRcdGFzc2lnbm1lbnRDb3VudHMuY3VycmVudC50aWNrZXRzWyB0aWNrZXQuaWQgXSA9IGdldFJlbGF0ZWRFbnRpdGllcyhcblx0XHRcdFx0XHR0aWNrZXQsXG5cdFx0XHRcdFx0J2RhdGV0aW1lJ1xuXHRcdFx0XHQpLmxlbmd0aCB8fCAwO1xuXHRcdFx0XHQvLyBubyBuZWVkIHRvIHNldCB0aWNrZXRFbnRpdGllc0J5RGF0ZUlkcyBoZXJlIGFzXG5cdFx0XHRcdC8vIHRob3NlIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gc2V0dXAgZm9yIGFsbCBkYXRlcy5cblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIGR0bVByb3BzO1xuXHR9ICksXG5cdCggV3JhcHBlZENvbXBvbmVudCApID0+ICgge1xuXHRcdGFzc2lnbm1lbnRDb3VudHMsXG5cdFx0ZW50aXRpZXM6IGRhdGVFbnRpdGllcyxcblx0XHR0aWNrZXRFbnRpdGllcyxcblx0XHR0aWNrZXRFbnRpdGllc0J5RGF0ZUlkcyxcblx0XHQuLi5vdGhlclByb3BzXG5cdH0gKSA9PiB7XG5cdFx0Y29uc3QgWyBhc3NpZ25lZFN0YXRlLCBzZXRBc3NpZ25lZFN0YXRlIF0gPSB1c2VTdGF0ZShcblx0XHRcdHsgYXNzaWduZWQ6IHt9LCByZW1vdmVkOiB7fSB9XG5cdFx0KTtcblx0XHRjb25zdCBbXG5cdFx0XHRoYXNOb0Fzc2lnbm1lbnRzLFxuXHRcdFx0bm9Bc3NpZ25tZW50c01lc3NhZ2UsXG5cdFx0XHR1cGRhdGVkQXNzaWdubWVudENvdW50cyxcblx0XHRdID0gdXNlQXNzaWdubWVudHNDYWxjdWxhdG9yKFxuXHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdFx0dGlja2V0RW50aXRpZXMsXG5cdFx0XHRhc3NpZ25tZW50Q291bnRzLmN1cnJlbnQsXG5cdFx0XHRhc3NpZ25lZFN0YXRlXG5cdFx0KTtcblxuXHRcdHJldHVybiA8V3JhcHBlZENvbXBvbmVudFxuXHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdGFzc2lnbm1lbnRDb3VudHM9eyB1cGRhdGVkQXNzaWdubWVudENvdW50cyB9XG5cdFx0XHRlbnRpdGllcz17IGRhdGVFbnRpdGllcyB9XG5cdFx0XHR0aWNrZXRFbnRpdGllcz17IHRpY2tldEVudGl0aWVzIH1cblx0XHRcdHRpY2tldEVudGl0aWVzQnlEYXRlSWRzPXsgdGlja2V0RW50aXRpZXNCeURhdGVJZHMuY3VycmVudCB9XG5cdFx0XHRhc3NpZ25lZFN0YXRlPXsgYXNzaWduZWRTdGF0ZSB9XG5cdFx0XHRzZXRBc3NpZ25lZFN0YXRlPXsgc2V0QXNzaWduZWRTdGF0ZSB9XG5cdFx0XHRoYXNOb0Fzc2lnbm1lbnRzPXsgaGFzTm9Bc3NpZ25tZW50cyB9XG5cdFx0XHRub0Fzc2lnbm1lbnRzTWVzc2FnZT17IG5vQXNzaWdubWVudHNNZXNzYWdlIH1cblx0XHQvPjtcblx0fSxcblx0KCBXcmFwcGVkQ29tcG9uZW50ICkgPT4gKCB7XG5cdFx0dG9nZ2xlRWRpdG9yLFxuXHRcdG9uVXBkYXRlID0gKCkgPT4gbnVsbCxcblx0XHRoYXNOb0Fzc2lnbm1lbnRzLFxuXHRcdG5vQXNzaWdubWVudHNNZXNzYWdlLFxuXHRcdC4uLm90aGVyUHJvcHNcblx0fSApID0+IHtcblx0XHRjb25zdCB0b2dnbGVUaWNrZXRBc3NpZ25tZW50c01hbmFnZXIgPSB1c2VDYWxsYmFjayggKCB1cGRhdGUgPSBmYWxzZSApID0+IHtcblx0XHRcdGlmICggaGFzTm9Bc3NpZ25tZW50cyApIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFsZXJ0XG5cdFx0XHRcdHdpbmRvdy5hbGVydCggbm9Bc3NpZ25tZW50c01lc3NhZ2UgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCB1cGRhdGUgKSB7XG5cdFx0XHRcdG9uVXBkYXRlKCk7XG5cdFx0XHR9XG5cdFx0XHR0b2dnbGVFZGl0b3IoKTtcblx0XHR9LCBbIGhhc05vQXNzaWdubWVudHMgXSApO1xuXHRcdHJldHVybiA8V3JhcHBlZENvbXBvbmVudFxuXHRcdFx0dG9nZ2xlRWRpdG9yPXsgdG9nZ2xlVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyIH1cblx0XHRcdGhhc05vQXNzaWdubWVudHM9eyBoYXNOb0Fzc2lnbm1lbnRzIH1cblx0XHRcdG5vQXNzaWdubWVudHNNZXNzYWdlPXsgbm9Bc3NpZ25tZW50c01lc3NhZ2UgfVxuXHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHQvPjtcblx0fSxcblx0d2l0aEVkaXRvck1vZGFsKCB7XG5cdFx0dGl0bGU6IF9fKCAnRXZlbnQgRGF0ZSBUaWNrZXQgQXNzaWdubWVudHMnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0Y3VzdG9tQ2xhc3M6ICdlZS1ldmVudC1kYXRlLXRpY2tldHMtbWFuYWdlci1tb2RhbCcsXG5cdFx0Y2xvc2VCdXR0b25MYWJlbDogX18oICdjbG9zZSBldmVudCBkYXRlIHRpY2tldHMgbWFuYWdlcicsXG5cdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0KSxcblx0fSApLFxuXHR3aXRoRm9ybUNvbnRhaW5lckFuZFBsYWNlaG9sZGVyLFxuXHR3aXRoRW50aXR5UGFnaW5hdGlvbigge1xuXHRcdHJldHVybkFzUHJvcDogdHJ1ZSxcblx0XHRlbnRpdGllc1BlclBhZ2U6IDYsXG5cdFx0cG9zaXRpb246ICdib3R0b20nLFxuXHR9ICksXG5dICkoIFRpY2tldEFzc2lnbm1lbnRzTWFuYWdlck1vZGFsICk7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXJcIjpcImVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyXCIsXCJlZS10YW0tZGF0ZXMtaGVhZGVyXCI6XCJlZS10YW0tZGF0ZXMtaGVhZGVyXCIsXCJlZS10YW0tdGlja2V0LWhlYWRlci1kaXZcIjpcImVlLXRhbS10aWNrZXQtaGVhZGVyLWRpdlwiLFwiZWUtdGFtLXRpY2tldC1oZWFkZXItcHJpY2VcIjpcImVlLXRhbS10aWNrZXQtaGVhZGVyLXByaWNlXCIsXCJlZS10YW0tdGlja2V0LWhlYWRlci1zdGF0dXNcIjpcImVlLXRhbS10aWNrZXQtaGVhZGVyLXN0YXR1c1wiLFwiZWUtdGFtLXRpY2tldC1oZWFkZXItdGl0bGVcIjpcImVlLXRhbS10aWNrZXQtaGVhZGVyLXRpdGxlXCIsXCJlZS10YW0tdGlja2V0LWhlYWRlci1kYXRlXCI6XCJlZS10YW0tdGlja2V0LWhlYWRlci1kYXRlXCIsXCJlZS10YW0tZGF0ZS1pZFwiOlwiZWUtdGFtLWRhdGUtaWRcIixcImVlLXRhbS10aWNrZXQtaWRcIjpcImVlLXRhbS10aWNrZXQtaWRcIixcImVlLXRhbS15ZWFyLXJvd1wiOlwiZWUtdGFtLXllYXItcm93XCIsXCJlZS10YW0tZGF0ZS1sYWJlbFwiOlwiZWUtdGFtLWRhdGUtbGFiZWxcIixcImVlLXRhbS1kYXRlLXJvd1wiOlwiZWUtdGFtLWRhdGUtcm93XCIsXCJlZS10YW0tZGF0ZS1sYWJlbC1kaXZcIjpcImVlLXRhbS1kYXRlLWxhYmVsLWRpdlwiLFwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXJcIjpcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVyXCIsXCJlZS10YW0tZGF0ZS1sYWJlbC10ZXh0XCI6XCJlZS10YW0tZGF0ZS1sYWJlbC10ZXh0XCIsXCJlZS10YW0tZGF0ZS1yb3ctdGlja2V0XCI6XCJlZS10YW0tZGF0ZS1yb3ctdGlja2V0XCIsXCJjb21wb25lbnRzLWljb24tYnV0dG9uXCI6XCJjb21wb25lbnRzLWljb24tYnV0dG9uXCIsXCJlZS10YW0tdGlja2V0LXJlbGF0aW9uLWJ1dHRvblwiOlwiZWUtdGFtLXRpY2tldC1yZWxhdGlvbi1idXR0b25cIixcImRhc2hpY29uXCI6XCJkYXNoaWNvblwiLFwiZWUtdGFtLWFzc2lnbm1lbnRzLWVycm9yXCI6XCJlZS10YW0tYXNzaWdubWVudHMtZXJyb3JcIixcImVlLXRhbS1uby10aWNrZXQtcmVsYXRpb25cIjpcImVlLXRhbS1uby10aWNrZXQtcmVsYXRpb25cIixcImVlLXRhbS1oYXMtdGlja2V0LXJlbGF0aW9uXCI6XCJlZS10YW0taGFzLXRpY2tldC1yZWxhdGlvblwiLFwiZWUtdGFtLWFkZC10aWNrZXQtcmVsYXRpb25cIjpcImVlLXRhbS1hZGQtdGlja2V0LXJlbGF0aW9uXCIsXCJlZS10YW0tcmVtb3ZlLXRpY2tldC1yZWxhdGlvblwiOlwiZWUtdGFtLXJlbW92ZS10aWNrZXQtcmVsYXRpb25cIixcImVlLXJUYWJsZVwiOlwiZWUtclRhYmxlXCIsXCJlZS1yVGFibGUtYm9keVwiOlwiZWUtclRhYmxlLWJvZHlcIixcImVlLXJUYWJsZS1ib2R5LXJvd1wiOlwiZWUtclRhYmxlLWJvZHktcm93XCIsXCJlZS1yVGFibGUtYm9keS10ZFwiOlwiZWUtclRhYmxlLWJvZHktdGRcIixcImVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVyXCI6XCJlZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlclwiLFwiZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZVwiOlwiZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZVwifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgRnJhZ21lbnQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWwgZnJvbSAnLi90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci1tb2RhbCc7XG5cbi8qKlxuICogVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWxcbiAqIGNvbnRyb2xzIHRvZ2dsaW5nIG9mIHRoZSBtb2RhbFxuICogd3JhcHMgdGhlIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSB3aXRoVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWxcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBtb2RhbFByb3BzQ2FsbGJhY2sgT3ZlcnJpZGVzIGZvciB0aGUgbW9kYWwgcHJvcHMgc2V0IG9uIHRoZVxuICogbWFuYWdlci4gIFRoaXMgcmVjZWl2ZXMgYG93blByb3BzYCBhcyBhbiBhcmd1bWVudC5cbiAqXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gQSBjb21wb3NlZCBjb21wb25lbnRcbiAqL1xuY29uc3Qgd2l0aFRpY2tldEFzc2lnbm1lbnRzTWFuYWdlck1vZGFsID0gKFxuXHRtb2RhbFByb3BzQ2FsbGJhY2sgPSAoKSA9PiBudWxsXG4pID0+IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiAoIHByb3BzICkgPT4ge1xuXHRcdGNvbnN0IHtcblx0XHRcdGRhdGVFbnRpdHksXG5cdFx0XHR0aWNrZXRFbnRpdHksXG5cdFx0fSA9IHByb3BzO1xuXHRcdGNvbnN0IFsgc2hvd01hbmFnZXIsIHNldFNob3dNYW5hZ2VyIF0gPSB1c2VTdGF0ZSggZmFsc2UgKTtcblx0XHRjb25zdCB0b2dnbGVNYW5hZ2VyID0gdXNlQ2FsbGJhY2soICggZXZlbnQgKSA9PiB7XG5cdFx0XHRpZiAoIGV2ZW50ICkge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHRcdHNldFNob3dNYW5hZ2VyKFxuXHRcdFx0XHQoIHByZXZTaG93TWFuYWdlciApID0+ICEgcHJldlNob3dNYW5hZ2VyXG5cdFx0XHQpO1xuXHRcdH0sIFtdICk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PFdyYXBwZWRDb21wb25lbnRcblx0XHRcdFx0XHR7IC4uLnByb3BzIH1cblx0XHRcdFx0XHR0aWNrZXRBc3NpZ25tZW50c0lzT3Blbj17IHNob3dNYW5hZ2VyIH1cblx0XHRcdFx0XHR0b2dnbGVUaWNrZXRBc3NpZ25tZW50cz17IHRvZ2dsZU1hbmFnZXIgfVxuXHRcdFx0XHQvPlxuXHRcdFx0XHQ8VGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWxcblx0XHRcdFx0XHRtb2RhbFByb3BzPXsgbW9kYWxQcm9wc0NhbGxiYWNrKCBwcm9wcyApIH1cblx0XHRcdFx0XHRkYXRlRW50aXR5PXsgZGF0ZUVudGl0eSB9XG5cdFx0XHRcdFx0dGlja2V0RW50aXR5PXsgdGlja2V0RW50aXR5IH1cblx0XHRcdFx0XHRlZGl0b3JPcGVuPXsgc2hvd01hbmFnZXIgfVxuXHRcdFx0XHRcdHRvZ2dsZUVkaXRvcj17IHRvZ2dsZU1hbmFnZXIgfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9LFxuXHQnd2l0aFRpY2tldEFzc2lnbm1lbnRzTWFuYWdlck1vZGFsJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFRpY2tldEFzc2lnbm1lbnRzTWFuYWdlck1vZGFsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoQ29weVRpY2tldEVudGl0eSB9IGZyb20gJy4vd2l0aC1jb3B5LXRpY2tldC1lbnRpdHknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoVHJhc2hUaWNrZXRFbnRpdHkgfSBmcm9tICcuL3dpdGgtdHJhc2gtdGlja2V0LWVudGl0eSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgd2l0aERpc3BhdGNoIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyB0aWNrZXRNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcblxuY29uc3QgREVGQVVMVF9ESVNQQVRDSCA9IHsgY29weVRpY2tldEVudGl0eTogKCkgPT4gZmFsc2UgfTtcblxuY29uc3Qgd2l0aENvcHlUaWNrZXRFbnRpdHkgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0d2l0aERpc3BhdGNoKCAoXG5cdFx0ZGlzcGF0Y2gsXG5cdFx0e1xuXHRcdFx0dGlja2V0RW50aXR5LFxuXHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdH0sXG5cdFx0eyBzZWxlY3QgfVxuXHQpID0+IHtcblx0XHRjb25zdCB7IE1PREVMX05BTUU6IFRJQ0tFVCB9ID0gdGlja2V0TW9kZWw7XG5cdFx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksIFRJQ0tFVCApICkge1xuXHRcdFx0cmV0dXJuIERFRkFVTFRfRElTUEFUQ0g7XG5cdFx0fVxuXHRcdGNvbnN0IHtcblx0XHRcdGNyZWF0ZUVudGl0eSxcblx0XHRcdGNyZWF0ZVJlbGF0aW9ucyxcblx0XHR9ID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0Y29uc3QgeyBnZXRSZWxhdGVkRW50aXRpZXMgfSA9IHNlbGVjdCggJ2V2ZW50ZXNwcmVzc28vY29yZScgKTtcblx0XHRjb25zdCBjb3B5VGlja2V0RW50aXR5ID0gYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgbmV3VGlja2V0ID0gYXdhaXQgY3JlYXRlRW50aXR5KCBUSUNLRVQsIHRpY2tldEVudGl0eS5mb3JDbG9uZSApO1xuXHRcdFx0Y3JlYXRlUmVsYXRpb25zKFxuXHRcdFx0XHRUSUNLRVQsXG5cdFx0XHRcdG5ld1RpY2tldC5pZCxcblx0XHRcdFx0J2RhdGV0aW1lJyxcblx0XHRcdFx0ZGF0ZUVudGl0aWVzXG5cdFx0XHQpO1xuXHRcdFx0Ly8gQHRvZG8sIHRoaXMgaXMgbm90IHF1aXRlIGRvbmUgYmVjYXVzZSBpdCBuZWVkcyB0byBhZGQgdGhlIHJlbGF0aW9uc1xuXHRcdFx0Ly8gb2YgdGhlIHByaWNlcyB0byB0aGUgcHJpY2VUeXBlLlxuXHRcdFx0Ly8gZ2V0IHJlbGF0ZWQgcHJpY2VzIGNsb25lLCBhbmQgYWRkLlxuXHRcdFx0Y29uc3QgcmVsYXRlZFByaWNlcyA9IGdldFJlbGF0ZWRFbnRpdGllcyggdGlja2V0RW50aXR5LCAncHJpY2VzJyApO1xuXHRcdFx0aWYgKCByZWxhdGVkUHJpY2VzICkge1xuXHRcdFx0XHRjb25zdCBuZXdQcmljZXMgPSBbXTtcblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcmVsYXRlZFByaWNlcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRjb25zdCBuZXdQcmljZSA9IGF3YWl0IGNyZWF0ZUVudGl0eShcblx0XHRcdFx0XHRcdCdwcmljZScsXG5cdFx0XHRcdFx0XHRyZWxhdGVkUHJpY2VzWyBpIF0uZm9yQ2xvbmVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdG5ld1ByaWNlcy5wdXNoKCBuZXdQcmljZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNyZWF0ZVJlbGF0aW9ucyhcblx0XHRcdFx0XHRUSUNLRVQsXG5cdFx0XHRcdFx0bmV3VGlja2V0LmlkLFxuXHRcdFx0XHRcdCdwcmljZScsXG5cdFx0XHRcdFx0bmV3UHJpY2VzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4geyBjb3B5VGlja2V0RW50aXR5IH07XG5cdH0gKSxcblx0J3dpdGhDb3B5VGlja2V0RW50aXR5J1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aENvcHlUaWNrZXRFbnRpdHk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgd2l0aERpc3BhdGNoIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyB0aWNrZXRNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmNvbnN0IHsgY29uZmlybSB9ID0gd2luZG93O1xuXG5jb25zdCBERUZBVUxUX0RJU1BBVENIID0geyB0cmFzaFRpY2tldEVudGl0eTogKCkgPT4gZmFsc2UgfTtcblxuY29uc3Qgd2l0aFRyYXNoVGlja2V0RW50aXR5ID0gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdHdpdGhEaXNwYXRjaCggKFxuXHRcdGRpc3BhdGNoLFxuXHRcdHsgdGlja2V0RW50aXR5IH0sXG5cdCkgPT4ge1xuXHRcdGNvbnN0IHsgTU9ERUxfTkFNRTogVElDS0VUIH0gPSB0aWNrZXRNb2RlbDtcblx0XHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIHRpY2tldEVudGl0eSwgVElDS0VUICkgKSB7XG5cdFx0XHRyZXR1cm4gREVGQVVMVF9ESVNQQVRDSDtcblx0XHR9XG5cdFx0Y29uc3QgdHJhc2hUaWNrZXRFbnRpdHkgPSAoKSA9PiB7XG5cdFx0XHRpZiAoICEgY29uZmlybShcblx0XHRcdFx0X18oXG5cdFx0XHRcdFx0J0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB0aWNrZXQ/Jyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdClcblx0XHRcdCkgKSB7XG5cdFx0XHRcdHJldHVybiBERUZBVUxUX0RJU1BBVENIO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgeyB0cmFzaEVudGl0eUJ5SWQgfSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0dHJhc2hFbnRpdHlCeUlkKCBUSUNLRVQsIHRpY2tldEVudGl0eS5pZCApO1xuXHRcdH07XG5cdFx0cmV0dXJuIHsgdHJhc2hUaWNrZXRFbnRpdHkgfTtcblx0fSApLFxuXHQnd2l0aFRyYXNoVGlja2V0RW50aXR5J1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFRyYXNoVGlja2V0RW50aXR5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgY29tcG9zZSB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyBGcmFnbWVudCwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgYXBwbHlGaWx0ZXJzIH0gZnJvbSAnQHdvcmRwcmVzcy9ob29rcyc7XG5pbXBvcnQge1xuXHREcm9wRG93bk1lbnUsXG5cdEVudGl0eUFjdGlvbk1lbnVJdGVtLFxuXHRFc3ByZXNzb0ljb24sXG5cdEljb25NZW51SXRlbSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBfXywgc3ByaW50ZiwgX3ggfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHdpdGhFZGl0b3JUaWNrZXREYXRlRW50aXRpZXMgfSBmcm9tICcuLi8uLi8uLi9ob2NzJztcbmltcG9ydCB3aXRoVGlja2V0RW50aXR5Rm9ybU1vZGFsIGZyb20gJy4uL2VkaXQtZm9ybS93aXRoLXRpY2tldC1lbnRpdHktZm9ybS1tb2RhbCc7XG5pbXBvcnQgeyB3aXRoQ29weVRpY2tldEVudGl0eSwgd2l0aFRyYXNoVGlja2V0RW50aXR5IH0gZnJvbSAnLi4vYWN0aW9uLWhhbmRsZXJzJztcbmltcG9ydCB7XG5cdFRpY2tldFByaWNlQ2FsY3VsYXRvck1lbnVJdGVtLFxuXHR3aXRoVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybU1vZGFsLFxufSBmcm9tICcuLi9wcmljZS1jYWxjdWxhdG9yJztcbmltcG9ydCB7IHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCB9IGZyb20gJy4uLy4uLy4uL3RpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyJztcbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vLyBAdG9kbyBtb3ZlIHRoZSB2YXJpb3VzIHJlbmRlciBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBvciB3cmFwIHRoZW0gd2l0aCBgdXNlQ2FsbGJhY2tgIGFuZCB0aGUgYXBwcm9wcmlhdGUgZGVwZW5kZW5jaWVzLlxuLy8gcmlnaHQgbm93IHRoZXkgYXJlIHJlZ2VuZXJhdGVkIGV2ZXJ5IHRpbWUgRWRpdG9yVGlja2V0QWN0aW9uc01lbnUgaXMgcmUtcmVuZGVyZWQuXG5cbmNvbnN0IEVkaXRvclRpY2tldEFjdGlvbnNNZW51ID0gKCB7XG5cdHRpY2tldEVudGl0eSxcblx0dG9nZ2xlVGlja2V0RWRpdG9yLFxuXHRkYXRlRW50aXRpZXMgPSBbXSxcblx0bm9CYXNlUHJpY2UgPSBmYWxzZSxcblx0Y29weVRpY2tldEVudGl0eSxcblx0dHJhc2hUaWNrZXRFbnRpdHksXG5cdHRvZ2dsZVRpY2tldEFzc2lnbm1lbnRzLFxuXHR0b2dnbGVDYWxjdWxhdG9yLFxuXHRkb1JlZnJlc2gsXG59ICkgPT4ge1xuXHRjb25zdCBtYWluRHJvcERvd25NZW51ID0gKCkgPT4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RHJvcERvd25NZW51XG5cdFx0XHRcdHRvb2x0aXA9eyBfXyggJ3RpY2tldCBtYWluIG1lbnUnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuXHRcdFx0XHRodG1sQ2xhc3M9eyBgZWRpdG9yLXRpY2tldC0keyB0aWNrZXRFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRtZW51SXRlbXM9eyBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dGl0bGU6IF9fKCAnZWRpdCB0aWNrZXQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdFx0XHRpY29uOiAnZWRpdCcsXG5cdFx0XHRcdFx0XHRvbkNsaWNrOiB0b2dnbGVUaWNrZXRFZGl0b3IsXG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR0aXRsZTogX18oICdjb3B5IHRpY2tldCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHRcdGljb246ICdhZG1pbi1wYWdlJyxcblx0XHRcdFx0XHRcdG9uQ2xpY2s6ICgpID0+IGNvcHlUaWNrZXRFbnRpdHkoXG5cdFx0XHRcdFx0XHRcdHRpY2tldEVudGl0eSxcblx0XHRcdFx0XHRcdFx0ZGF0ZUVudGl0aWVzXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dGl0bGU6IF9fKCAndHJhc2ggdGlja2V0JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdFx0aWNvbjogJ3RyYXNoJyxcblx0XHRcdFx0XHRcdG9uQ2xpY2s6ICgpID0+IHRyYXNoVGlja2V0RW50aXR5KCB0aWNrZXRFbnRpdHkgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fTtcblxuXHRjb25zdCBhc3NpZ25EYXRlc01lbnVJdGVtID0gKCkgPT4ge1xuXHRcdGNvbnN0IHRvb2x0aXAgPSBpc0VtcHR5KCBkYXRlRW50aXRpZXMgKSA/XG5cdFx0XHRfXyhcblx0XHRcdFx0J3dhcm5pbmchIG5vIGFzc2lnbmVkIHRpY2tldCBkYXRlcyAtIGNsaWNrIHRvIGZpeCcsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdCkgOlxuXHRcdFx0X18oICdhc3NpZ24gdGlja2V0IHRvIGV2ZW50IGRhdGVzJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8SWNvbk1lbnVJdGVtXG5cdFx0XHRcdGluZGV4PXsgMiB9XG5cdFx0XHRcdHRvb2x0aXA9eyB0b29sdGlwIH1cblx0XHRcdFx0aWQ9eyBgYXNzaWduLXRpY2tldC1kYXRlcy10aWNrZXQtJHsgdGlja2V0RW50aXR5LmlkIH1gIH1cblx0XHRcdFx0aHRtbENsYXNzPXsgJ2Fzc2lnbi10aWNrZXQtZGF0ZXMnIH1cblx0XHRcdFx0ZGFzaGljb249eyA8RXNwcmVzc29JY29uIGljb249XCJjYWxlbmRhclwiIC8+IH1cblx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwidG9wIHJpZ2h0XCJcblx0XHRcdFx0b25DbGljaz17IHRvZ2dsZVRpY2tldEFzc2lnbm1lbnRzIH1cblx0XHRcdFx0aXRlbUNvdW50PXsgZGF0ZUVudGl0aWVzLmxlbmd0aCB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG5cblx0Y29uc3QgZ2V0U2lkZWJhck1lbnVJdGVtcyA9ICgpID0+IHtcblx0XHRjb25zdCBzaWRlYmFyTWVudUl0ZW1zID0gW107XG5cdFx0c2lkZWJhck1lbnVJdGVtcy5wdXNoKFxuXHRcdFx0bWFpbkRyb3BEb3duTWVudSgpXG5cdFx0KTtcblx0XHRzaWRlYmFyTWVudUl0ZW1zLnB1c2goXG5cdFx0XHQ8SWNvbk1lbnVJdGVtXG5cdFx0XHRcdGluZGV4PXsgMSB9XG5cdFx0XHRcdHRvb2x0aXA9eyBfXyggJ2VkaXQgdGlja2V0IGRldGFpbHMnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRpZD17IGBlZGl0LXRpY2tldC0keyB0aWNrZXRFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRodG1sQ2xhc3M9XCJlZGl0LXRpY2tldFwiXG5cdFx0XHRcdGRhc2hpY29uPVwiZWRpdFwiXG5cdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInRvcCByaWdodFwiXG5cdFx0XHRcdG9uQ2xpY2s9eyB0b2dnbGVUaWNrZXRFZGl0b3IgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdHNpZGViYXJNZW51SXRlbXMucHVzaChcblx0XHRcdDxUaWNrZXRQcmljZUNhbGN1bGF0b3JNZW51SXRlbVxuXHRcdFx0XHR0aWNrZXRFbnRpdHk9eyB0aWNrZXRFbnRpdHkgfVxuXHRcdFx0XHRub0Jhc2VQcmljZT17IG5vQmFzZVByaWNlIH1cblx0XHRcdFx0ZG9SZWZyZXNoPXsgZG9SZWZyZXNoIH1cblx0XHRcdFx0dG9nZ2xlQ2FsY3VsYXRvcj17IHRvZ2dsZUNhbGN1bGF0b3IgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdHNpZGViYXJNZW51SXRlbXMucHVzaCggYXNzaWduRGF0ZXNNZW51SXRlbSgpICk7XG5cdFx0LyoqXG5cdFx0ICogQHRvZG8sIFRoaXMgY291bGQgYmUgZnJhZ2lsZSBiZWNhdXNlIG9mIHJlbmRlciBleGVjdXRpb25cblx0XHQgKiBXZSBzaG91bGQgZXhwbG9yZSBpbXBsZW1lbnRpbmcgYSBzbG90L2ZpbGwgcGF0dGVybiBoZXJlLlxuXHRcdCAqL1xuXHRcdHJldHVybiBhcHBseUZpbHRlcnMoXG5cdFx0XHQnRkhFRV9fRWRpdG9yRGF0ZXNfX0VkaXRvckRhdGVTaWRlYmFyX19TaWRlYmFyTWVudUl0ZW1zJyxcblx0XHRcdHNpZGViYXJNZW51SXRlbXMsXG5cdFx0XHR0aWNrZXRFbnRpdHlcblx0XHQpO1xuXHR9O1xuXG5cdGNvbnN0IHNpZGViYXJNZW51ID0gKCBzaWRlYmFyTWVudUl0ZW1zICkgPT4ge1xuXHRcdHJldHVybiBzaWRlYmFyTWVudUl0ZW1zLm1hcChcblx0XHRcdCggc2lkZWJhck1lbnVJdGVtLCBpbmRleCApID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRzaWRlYmFyTWVudUl0ZW0gJiYgc2lkZWJhck1lbnVJdGVtLnR5cGUgJiZcblx0XHRcdFx0XHQoXG5cdFx0XHRcdFx0XHRzaWRlYmFyTWVudUl0ZW0udHlwZSA9PT0gRHJvcERvd25NZW51IHx8XG5cdFx0XHRcdFx0XHRzaWRlYmFyTWVudUl0ZW0udHlwZSA9PT0gRW50aXR5QWN0aW9uTWVudUl0ZW0gfHxcblx0XHRcdFx0XHRcdHNpZGViYXJNZW51SXRlbS50eXBlID09PSBJY29uTWVudUl0ZW0gfHxcblx0XHRcdFx0XHRcdGlzVmFsaWRFbGVtZW50KCBzaWRlYmFyTWVudUl0ZW0gKVxuXHRcdFx0XHRcdCkgP1xuXHRcdFx0XHRcdFx0PEZyYWdtZW50IGtleT17IGluZGV4IH0+XG5cdFx0XHRcdFx0XHRcdHsgc2lkZWJhck1lbnVJdGVtIH1cblx0XHRcdFx0XHRcdDwvRnJhZ21lbnQ+IDpcblx0XHRcdFx0XHRcdG51bGxcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0KTtcblx0fTtcblxuXHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIHRpY2tldEVudGl0eSwgJ3RpY2tldCcgKSApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGNvbnN0IHNpZGViYXJNZW51SXRlbXMgPSBnZXRTaWRlYmFyTWVudUl0ZW1zKCk7XG5cblx0cmV0dXJuIHRpY2tldEVudGl0eSAmJiB0aWNrZXRFbnRpdHkuaWQgPyAoXG5cdFx0PGRpdlxuXHRcdFx0aWQ9eyBgZWUtZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnUtJHsgdGlja2V0RW50aXR5LmlkIH1gIH1cblx0XHRcdGNsYXNzTmFtZT17ICdlZS1lZGl0b3ItdGlja2V0LWFjdGlvbnMtbWVudScgfVxuXHRcdD5cblx0XHRcdHsgc2lkZWJhck1lbnUoIHNpZGViYXJNZW51SXRlbXMgKSB9XG5cdFx0PC9kaXY+XG5cdCkgOiBudWxsO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZSggW1xuXHR3aXRoVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybU1vZGFsLFxuXHR3aXRoVGlja2V0RW50aXR5Rm9ybU1vZGFsLFxuXHR3aXRoVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWwoICggeyB0aWNrZXRFbnRpdHkgfSApID0+IChcblx0XHR7XG5cdFx0XHR0aXRsZTogc3ByaW50Zihcblx0XHRcdFx0X3goXG5cdFx0XHRcdFx0J0RhdGUgQXNzaWdubWVudHMgZm9yIFRpY2tldDogICUxJHMnLFxuXHRcdFx0XHRcdCdEYXRlIEFzc2lnbm1lbnRzIGZvciBUaWNrZXQ6ICBUaWNrZXQgbmFtZScsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHQpLFxuXHRcdFx0XHR0aWNrZXRFbnRpdHkubmFtZVxuXHRcdFx0KSxcblx0XHRcdGNsb3NlQnV0dG9uTGFiZWw6IG51bGwsXG5cdFx0fVxuXHQpICksXG5cdHdpdGhFZGl0b3JUaWNrZXREYXRlRW50aXRpZXMsXG5cdHdpdGhDb3B5VGlja2V0RW50aXR5LFxuXHR3aXRoVHJhc2hUaWNrZXRFbnRpdHksXG5dICkoIEVkaXRvclRpY2tldEFjdGlvbnNNZW51ICk7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEVkaXRvclRpY2tldEFjdGlvbnNNZW51IH0gZnJvbSAnLi9lZGl0b3ItdGlja2V0LWFjdGlvbnMtbWVudSc7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnVcIjpcImVlLWVkaXRvci10aWNrZXQtYWN0aW9ucy1tZW51XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGlja2V0RW50aXR5Rm9ybSB9IGZyb20gJy4vdGlja2V0LWVudGl0eS1mb3JtJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aFRpY2tldEVudGl0eUZvcm1Nb2RhbCB9IGZyb20gJy4vd2l0aC10aWNrZXQtZW50aXR5LWZvcm0tbW9kYWwnO1xuZXhwb3J0IHsgdGlja2V0RW50aXR5Rm9ybUlucHV0cyB9IGZyb20gJy4vdGlja2V0LWVudGl0eS1mb3JtLWlucHV0cyc7XG5leHBvcnQgeyB0aWNrZXRFbnRpdHlGb3JtU2NoZW1hIH0gZnJvbSAnLi90aWNrZXQtZW50aXR5LWZvcm0tc2NoZW1hJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IF9fLCBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyB2YWxpZGF0aW9ucyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcblx0U2VydmVyRGF0ZVRpbWUgYXMgRGF0ZVRpbWUsXG5cdE1vbmV5LFxuXHRTaXRlQ3VycmVuY3ksXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbHVlLW9iamVjdHMnO1xuXG4vKipcbiAqIHRpY2tldEVudGl0eUZvcm1JbnB1dHNcbiAqIHJldHVybnMgYW4gYXJyYXkgb2YgaW5wdXRzIGNvcnJlc3BvbmRpbmcgdG9cbiAqIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBUaWNrZXQgRW50aXR5XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdGlja2V0RW50aXR5ICBFRSBUaWNrZXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gY2FsY3VsYXRvciBUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtTW9kYWxcbiAqIEBwYXJhbSB7QXJyYXl9IGV4Y2x1ZGUgIEFycmF5IG9mIGZpZWxkIG5hbWVzIHRvIG5vdCBkaXNwbGF5IGlucHV0cyBmb3JcbiAqIEBwYXJhbSB7QXJyYXl9IGN1cnJlbnRWYWx1ZXMgIEFycmF5IG9mIGlucHV0IHZhbHVlc1xuICogQHBhcmFtIHtPYmplY3R9IEZvcm1JbnB1dCBJbnB1dCBvYmplY3QgdG8gdXNlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSByZWNhbGN1bGF0ZUJhc2VQcmljZVxuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBmb3JtXG4gKi9cbmV4cG9ydCBjb25zdCB0aWNrZXRFbnRpdHlGb3JtSW5wdXRzID0gKFxuXHR0aWNrZXRFbnRpdHksXG5cdGNhbGN1bGF0b3IsXG5cdGV4Y2x1ZGUgPSBbXSxcblx0Y3VycmVudFZhbHVlcyA9IFtdLFxuXHRGb3JtSW5wdXQsXG5cdHJlY2FsY3VsYXRlQmFzZVByaWNlLFxuKSA9PiB7XG5cdGlmICggISB0aWNrZXRFbnRpdHkgfHwgKCB0aWNrZXRFbnRpdHkgJiYgISB0aWNrZXRFbnRpdHkuaWQgKSApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRjb25zdCB2YWx1ZXMgPSBjdXJyZW50VmFsdWVzO1xuXHRjb25zdCBwcmVmaXggPSBgZWUtdGlja2V0LSR7IHRpY2tldEVudGl0eS5pZCB9YDtcblx0Y29uc3QgaW5wdXRzID0gW107XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ1RLVF9JRCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImlkXCJcblx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdG5hbWU9eyBgJHsgcHJlZml4IH0taWRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0taWRgIF0gfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnVGlja2V0IElEJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LWlkYCB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAzIH1cblx0XHRcdFx0cmVxdWlyZWRcblx0XHRcdFx0bWluPXsgMCB9XG5cdFx0XHRcdGRpc2FibGVkXG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ25hbWUnICkgPCAwICkge1xuXHRcdGlucHV0cy5wdXNoKFxuXHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRrZXk9XCJuYW1lXCJcblx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LW5hbWVgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tbmFtZWAgXSB8fCAnJyB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdUaWNrZXQgTGFiZWwnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tbmFtZWAgfVxuXHRcdFx0XHRtaW5MZW5ndGg9eyAzIH1cblx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdCggdmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkubmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXF1aXJlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdkZXNjcmlwdGlvbicgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0dHlwZT1cInRleHRhcmVhXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgXSB8fCAnJyB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdEZXNjcmlwdGlvbicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGNoYW5nZUxpc3RlbmVyPXtcblx0XHRcdFx0XHQoIHZhbHVlICkgPT4ge1xuXHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LmRlc2NyaXB0aW9uID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdwcmljZScgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cInByaWNlXCJcblx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdG5hbWU9eyBgJHsgcHJlZml4IH0tcHJpY2VgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tcHJpY2VgIF0gfHwgbnVsbCB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdUaWNrZXQgUHJpY2UnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tcHJpY2VgIH1cblx0XHRcdFx0aGVscFRleHQ9eyBzcHJpbnRmKFxuXHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0J1RoZSBhbW91bnQgb2YgbW9uZXkgY2hhcmdlZCBmb3IgdGhpcyB0aWNrZXQuIExlYXZlIGJsYW5rIHRvIG1ha2UgdGhpcyB0aWNrZXQgc2VsZWN0aW9uIGZyZWUuJXNDbGljayB0aGUgYnV0dG9uIGFmdGVyIHRoZSBpbnB1dCB0byB1c2UgdGhlIFRpY2tldCBQcmljZSBDYWxjdWxhdG9yICh3YXJuaW5nOiB3aWxsIGNsb3NlIHRoaXMgZWRpdCBmb3JtKScsXG5cdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHQnIFxcbidcblx0XHRcdFx0KSB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAzIH1cblx0XHRcdFx0bWluPXsgMCB9XG5cdFx0XHRcdHN0ZXA9XCIwLjAxXCJcblx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdCggdmFsdWUsIHByZXZWYWx1ZSApID0+IHtcblx0XHRcdFx0XHRcdGlmICggdmFsdWUgIT09IHByZXZWYWx1ZSApIHtcblx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnByaWNlID0gbmV3IE1vbmV5KFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlIHx8IDAsXG5cdFx0XHRcdFx0XHRcdFx0U2l0ZUN1cnJlbmN5XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJlY2FsY3VsYXRlQmFzZVByaWNlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGFmdGVySW5wdXQ9eyBjYWxjdWxhdG9yIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICd0YXhhYmxlJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwidGF4YWJsZVwiXG5cdFx0XHRcdHR5cGU9XCJ0b2dnbGVcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXRheGFibGVgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tdGF4YWJsZWAgXSB8fCBmYWxzZSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdUaWNrZXQgaXMgVGF4YWJsZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS10YXhhYmxlYCB9XG5cdFx0XHRcdGhlbHBUZXh0SWZDaGVja2VkPXsgX18oXG5cdFx0XHRcdFx0J1RoaXMgdGlja2V0IGlzIHRheGFibGUuIEFsbCBjb25maWd1cmVkIHRheGVzIHdpbGwgYmUnICtcblx0XHRcdFx0XHQnIGFwcGxpZWQgdG8gdGhlIHByaWNlIG9mIHRoaXMgdGlja2V0IHVwb24gcHVyY2hhc2UuICcsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdFx0KSB9XG5cdFx0XHRcdGhlbHBUZXh0SWZOb3RDaGVja2VkPXsgX18oXG5cdFx0XHRcdFx0J2NsaWNrIHRvIG1ha2UgdGhpcyB0aWNrZXQgdGF4YWJsZScsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdFx0KSB9XG5cdFx0XHRcdGNoYW5nZUxpc3RlbmVyPXtcblx0XHRcdFx0XHQoIHZhbHVlICkgPT4ge1xuXHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnRheGFibGUgPSAhISB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDIgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdzdGFydCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cInN0YXJ0XCJcblx0XHRcdFx0dHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1zdGFydGAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1zdGFydGAgXSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdUaWNrZXQgU2FsZXMgU3RhcnQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tc3RhcnRgIH1cblx0XHRcdFx0dmFsaWRhdGlvbnM9eyB2YWxpZGF0aW9ucy5yZXF1aXJlZCB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyA2IH1cblx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdCggdmFsdWUsIHByZXZWYWx1ZSApID0+IHtcblx0XHRcdFx0XHRcdGlmICggdmFsdWUgIT09IHByZXZWYWx1ZSApIHtcblx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnN0YXJ0RGF0ZSA9IG5ldyBEYXRlVGltZSggdmFsdWUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVxdWlyZWRcblx0XHRcdC8+LFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpbmRleE9mKCBleGNsdWRlLCAnZW5kJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwiZW5kXCJcblx0XHRcdFx0dHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1lbmRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tZW5kYCBdIH1cblx0XHRcdFx0bGFiZWw9eyBfXyggJ1RpY2tldCBTYWxlcyBFbmQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tZW5kYCB9XG5cdFx0XHRcdHZhbGlkYXRpb25zPXsgdmFsaWRhdGlvbnMucmVxdWlyZWQgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgNiB9XG5cdFx0XHRcdGNoYW5nZUxpc3RlbmVyPXtcblx0XHRcdFx0XHQoIHZhbHVlLCBwcmV2VmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIHZhbHVlICE9PSBwcmV2VmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHRpY2tldEVudGl0eS5lbmREYXRlID0gbmV3IERhdGVUaW1lKCB2YWx1ZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXF1aXJlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdxdHknICkgPCAwICkge1xuXHRcdGlucHV0cy5wdXNoKFxuXHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRrZXk9XCJxdHlcIlxuXHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1xdHlgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tcXR5YCBdIHx8IEluZmluaXR5IH1cblx0XHRcdFx0bGFiZWw9eyBfXyggJ1F1YW50aXR5JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LXF0eWAgfVxuXHRcdFx0XHRoZWxwVGV4dD17IF9fKFxuXHRcdFx0XHRcdCdUaGUgbWF4aW11bSBudW1iZXIgb2YgdGlja2V0cyBhdmFpbGFibGUgZm9yIHNhbGUuICcgK1xuXHRcdFx0XHRcdCdMZWF2ZSBibGFuayBmb3Igbm8gbGltaXQuJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDMgfVxuXHRcdFx0XHRjaGFuZ2VMaXN0ZW5lcj17XG5cdFx0XHRcdFx0KCB2YWx1ZSApID0+IHtcblx0XHRcdFx0XHRcdHRpY2tldEVudGl0eS5xdHkgPSBwYXJzZUludCggdmFsdWUgfHwgLTEsIDEwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdzb2xkJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwic29sZFwiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXNvbGRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tc29sZGAgXSB8fCAwIH1cblx0XHRcdFx0bGFiZWw9eyBfXyggJ1NvbGQgQ291bnQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tc29sZGAgfVxuXHRcdFx0XHRoZWxwVGV4dD17IF9fKFxuXHRcdFx0XHRcdCdRdWFudGl0eSBvZiB0aWNrZXRzIHRoYXQgaGF2ZSBiZWVuJyArXG5cdFx0XHRcdFx0JyBzb2xkIGZvciB0aGlzIFRpY2tldCcsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdFx0KSB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAzIH1cblx0XHRcdFx0bWluPXsgMCB9XG5cdFx0XHRcdGRpc2FibGVkXG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ3Jlc2VydmVkJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwicmVzZXJ2ZWRcIlxuXHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1yZXNlcnZlZGAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1yZXNlcnZlZGAgXSB8fCAwIH1cblx0XHRcdFx0bGFiZWw9eyBfXyggJ1Jlc2VydmVkIENvdW50JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LXJlc2VydmVkYCB9XG5cdFx0XHRcdGhlbHBUZXh0PXsgX18oXG5cdFx0XHRcdFx0J1F1YW50aXR5IG9mIHRpY2tldHMgcmVzZXJ2ZWQsJyArXG5cdFx0XHRcdFx0JyBidXQgbm90IHlldCBmdWxseSBwdXJjaGFzZWQnLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMyB9XG5cdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0XHRkaXNhYmxlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICd1c2VzJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwidXNlc1wiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXVzZXNgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tdXNlc2AgXSB8fCBJbmZpbml0eSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdOdW1iZXIgb2YgVXNlcycsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS11c2VzYCB9XG5cdFx0XHRcdGhlbHBUZXh0PXsgc3ByaW50Zihcblx0XHRcdFx0XHRfXyhcblx0XHRcdFx0XHRcdCdDb250cm9scyB0aGUgdG90YWwgbnVtYmVyIG9mIHRpbWVzIHRoaXMgdGlja2V0IGNhbiBiZSB1c2VkLCByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgZGF0ZXMgaXQgaXMgYXNzaWduZWQgdG8uJXNFeGFtcGxlOiBBIHRpY2tldCBtaWdodCBoYXZlIGFjY2VzcyB0byA0IGRpZmZlcmVudCBkYXRlcywgYnV0IHNldHRpbmcgdGhpcyBmaWVsZCB0byAyIHdvdWxkIG1lYW4gdGhhdCB0aGUgdGlja2V0IGNvdWxkIG9ubHkgYmUgdXNlZCB0d2ljZS4gTGVhdmUgYmxhbmsgZm9yIG5vIGxpbWl0LicsXG5cdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0J1xcbidcblx0XHRcdFx0KSB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAzIH1cblx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdCggdmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkudXNlcyA9IHBhcnNlSW50KCB2YWx1ZSB8fCAtMSwgMTAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0bWluPXsgMCB9XG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ3JlcXVpcmVkJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwicmVxdWlyZWRcIlxuXHRcdFx0XHR0eXBlPVwidG9nZ2xlXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1yZXF1aXJlZGAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1yZXF1aXJlZGAgXSB8fCBmYWxzZSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdSZXF1aXJlZCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1yZXF1aXJlZGAgfVxuXHRcdFx0XHRoZWxwVGV4dElmQ2hlY2tlZD17IF9fKFxuXHRcdFx0XHRcdCdUaGlzIHRpY2tldCBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBwdXJjaGFzZWQuIEl0IHdpbGwnICtcblx0XHRcdFx0XHQnIGFwcGVhciBmaXJzdCBpbiBmcm9udGVuZCB0aWNrZXQgbGlzdHMuJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aGVscFRleHRJZk5vdENoZWNrZWQ9eyBfXyhcblx0XHRcdFx0XHQnY2xpY2sgdG8gbWFrZSB0aGlzIHRpY2tldCBhIHJlcXVpcmVkIHNlbGVjdGlvbi4nLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMyB9XG5cdFx0XHRcdGNoYW5nZUxpc3RlbmVyPXtcblx0XHRcdFx0XHQoIHZhbHVlICkgPT4ge1xuXHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnJlcXVpcmVkID0gISEgdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdtaW4nICkgPCAwICkge1xuXHRcdGlucHV0cy5wdXNoKFxuXHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRrZXk9XCJtaW5cIlxuXHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1taW5gIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tbWluYCBdIHx8IG51bGwgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnTWluaW11bSBRdWFudGl0eScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1taW5gIH1cblx0XHRcdFx0aGVscFRleHQ9eyBfXyhcblx0XHRcdFx0XHQnVGhlIG1pbmltdW0gcXVhbnRpdHkgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgZm9yIHRoaXMnICtcblx0XHRcdFx0XHQnIHRpY2tldC4gVXNlIHRoaXMgdG8gY3JlYXRlIHRpY2tldCBidW5kbGVzIG9yIGdyYWR1YXRlZCcgK1xuXHRcdFx0XHRcdCcgcHJpY2luZy4gTGVhdmUgYmxhbmsgZm9yIG5vIG1pbmltdW0uJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdCggdmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkubWluID0gcGFyc2VJbnQoIHZhbHVlIHx8IDAsIDEwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAzIH1cblx0XHRcdFx0bWluPXsgMCB9XG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ21heCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cIm1heFwiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LW1heGAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1tYXhgIF0gfHwgSW5maW5pdHkgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnTWF4aW11bSBRdWFudGl0eScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1tYXhgIH1cblx0XHRcdFx0aGVscFRleHQ9eyBfXyhcblx0XHRcdFx0XHQnVGhlIG1heGltdW0gcXVhbnRpdHkgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgZm9yIHRoaXMnICtcblx0XHRcdFx0XHQnIHRpY2tldC4gVXNlIHRoaXMgdG8gY3JlYXRlIHRpY2tldCBidW5kbGVzIG9yIGdyYWR1YXRlZCcgK1xuXHRcdFx0XHRcdCcgcHJpY2luZy4gTGVhdmUgYmxhbmsgZm9yIG5vIG1heGltdW0uJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDMgfVxuXHRcdFx0XHRjaGFuZ2VMaXN0ZW5lcj17XG5cdFx0XHRcdFx0KCB2YWx1ZSApID0+IHtcblx0XHRcdFx0XHRcdHRpY2tldEVudGl0eS5tYXggPSBwYXJzZUludCggdmFsdWUgfHwgLTEsIDEwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdvcmRlcicgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cIm9yZGVyXCJcblx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdG5hbWU9eyBgJHsgcHJlZml4IH0tb3JkZXJgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tb3JkZXJgIF0gfHwgMCB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdEaXNwbGF5IE9yZGVyJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LW9yZGVyYCB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAyIH1cblx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdCggdmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkub3JkZXIgPSBwYXJzZUludCggdmFsdWUsIDEwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ2lzRGVmYXVsdCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImlzRGVmYXVsdFwiXG5cdFx0XHRcdHR5cGU9XCJ0b2dnbGVcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LWlzLWRlZmF1bHRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0taXMtZGVmYXVsdGAgXSB8fCBmYWxzZSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdEZWZhdWx0IFRpY2tldCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1pcy1kZWZhdWx0YCB9XG5cdFx0XHRcdGhlbHBUZXh0SWZDaGVja2VkPXsgX18oXG5cdFx0XHRcdFx0J3RoaXMgaXMgYSBkZWZhdWx0IHRpY2tldCBhbmQgd2lsbCBhcHBlYXIgb24gYWxsIG5ldycgK1xuXHRcdFx0XHRcdCcgZXZlbnRzJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aGVscFRleHRJZk5vdENoZWNrZWQ9eyBfXyhcblx0XHRcdFx0XHQnY2xpY2sgdG8gbWFrZSB0aGlzIGEgZGVmYXVsdCB0aWNrZXQgZm9yIGFueSBuZXcgZXZlbnRzJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDIgfVxuXHRcdFx0XHRjaGFuZ2VMaXN0ZW5lcj17XG5cdFx0XHRcdFx0KCB2YWx1ZSApID0+IHtcblx0XHRcdFx0XHRcdHRpY2tldEVudGl0eS5pc0RlZmF1bHQgPSAhISB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdC8+LFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpbmRleE9mKCBleGNsdWRlLCAnd3BVc2VyJyApIDwgMCApIHtcblx0XHQvLyBAdG9kbyB0aGlzIG5lZWRzIHRvIHJlYWQgZnJvbSB0aGUgY3VycmVudCBldmVudCBhdXRob3IgaW4gdGhlIGxvYWRlZFxuXHRcdC8vIGVkaXRvciwgYW5kIGV2ZW50dWFsbHkgY291bGQgYmUgYSBkcm9wZG93biBmb3Igc2VsZWN0aW5nIHRoZSBhdXRob3IuXG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cIndwVXNlclwiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXdwLXVzZXJgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0td3AtdXNlcmAgXSB8fCAwIH1cblx0XHRcdFx0bGFiZWw9eyBfXyggJ1BhcmVudCBUaWNrZXQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0td3AtdXNlcmAgfVxuXHRcdFx0XHRoZWxwVGV4dD17IF9fKFxuXHRcdFx0XHRcdCdUaGUgSUQgb2YgdGhlIGFkbWluIHRoYXQgY3JlYXRlZCB0aGlzIHRpY2tldC4nLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMiB9XG5cdFx0XHRcdGRpc2FibGVkXG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ3BhcmVudCcgKSA8IDAgKSB7XG5cdFx0Ly8gQHRvZG8gdGhpcyBpcyBtb3N0bHkgYSBmaWVsZCB0aGF0IHdhcyBhZGRlZCBvcmlnaW5hbGx5IGFzIGEgd2F5IG9mXG5cdFx0Ly8gdHJhY2tpbmcgYXV0b3NhdmVzL3JldmlzaW9ucyBmb3IgdGlja2V0cy4gUHJvYmFibHkgc2hvdWxkIG5ldmVyIGJlXG5cdFx0Ly8gYW4gZWRpdGFibGUgZmllbGQuXG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cInBhcmVudFwiXG5cdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1wYXJlbnRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tcGFyZW50YCBdIHx8IDAgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnUGFyZW50IFRpY2tldCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1wYXJlbnRgIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDIgfVxuXHRcdFx0XHRkaXNhYmxlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdkZWxldGVkJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwiZGVsZXRlZFwiXG5cdFx0XHRcdHR5cGU9XCJ0b2dnbGVcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LWRlbGV0ZWRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tZGVsZXRlZGAgXSB8fCBmYWxzZSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdBcmNoaXZlZCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1kZWxldGVkYCB9XG5cdFx0XHRcdGhlbHBUZXh0SWZDaGVja2VkPXsgX18oXG5cdFx0XHRcdFx0J3RoaXMgdGlja2V0IGlzIGFyY2hpdmVkJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aGVscFRleHRJZk5vdENoZWNrZWQ9eyBfXyhcblx0XHRcdFx0XHQndGhpcyB0aWNrZXQgaXMgTk9UIGFyY2hpdmVkJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDIgfVxuXHRcdFx0XHRkaXNhYmxlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gaW5wdXRzO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIHJldHVybnMgYW4gb2JqZWN0IG1hcHBpbmcgVGlja2V0IEVudGl0eSBwcm9wZXJ0aWVzIHRvIGZvcm0gcHJlZml4c1xuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBmb3JtXG4gKi9cbmV4cG9ydCBjb25zdCB0aWNrZXRFbnRpdHlGb3JtU2NoZW1hID0gKCB0aWNrZXRFbnRpdHkgKSA9PiB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApICkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRjb25zdCBwcmVmaXggPSBgZWUtdGlja2V0LSR7IHRpY2tldEVudGl0eS5pZCB9YDtcblx0cmV0dXJuIHtcblx0XHRbIGAkeyBwcmVmaXggfS1pZGAgXTogdGlja2V0RW50aXR5LmlkLFxuXHRcdFsgYCR7IHByZWZpeCB9LW5hbWVgIF06IHRpY2tldEVudGl0eS5uYW1lIHx8ICcnLFxuXHRcdFsgYCR7IHByZWZpeCB9LWRlc2NyaXB0aW9uYCBdOiB0aWNrZXRFbnRpdHkuZGVzY3JpcHRpb24gfHwgJycsXG5cdFx0WyBgJHsgcHJlZml4IH0tcXR5YCBdOiBzdHJpcEluZmluaXR5KCB0aWNrZXRFbnRpdHkucXR5ICksXG5cdFx0WyBgJHsgcHJlZml4IH0tc29sZGAgXTogdGlja2V0RW50aXR5LnNvbGQgfHwgMCxcblx0XHRbIGAkeyBwcmVmaXggfS1yZXNlcnZlZGAgXTogdGlja2V0RW50aXR5LnJlc2VydmVkIHx8IDAsXG5cdFx0WyBgJHsgcHJlZml4IH0tdXNlc2AgXTogc3RyaXBJbmZpbml0eSggdGlja2V0RW50aXR5LnVzZXMgKSxcblx0XHRbIGAkeyBwcmVmaXggfS1yZXF1aXJlZGAgXTogdGlja2V0RW50aXR5LnJlcXVpcmVkIHx8IGZhbHNlLFxuXHRcdFsgYCR7IHByZWZpeCB9LW1pbmAgXTogdGlja2V0RW50aXR5Lm1pbiB8fCBudWxsLFxuXHRcdFsgYCR7IHByZWZpeCB9LW1heGAgXTogc3RyaXBJbmZpbml0eSggdGlja2V0RW50aXR5Lm1heCApLFxuXHRcdFsgYCR7IHByZWZpeCB9LXByaWNlYCBdOiB0aWNrZXRFbnRpdHkucHJpY2UgJiYgdGlja2V0RW50aXR5LnByaWNlLmFtb3VudCA/XG5cdFx0XHR0aWNrZXRFbnRpdHkucHJpY2UuYW1vdW50LnRvTnVtYmVyKCkgOlxuXHRcdFx0bnVsbCxcblx0XHRbIGAkeyBwcmVmaXggfS1zdGFydGAgXTogdGlja2V0RW50aXR5LnN0YXJ0RGF0ZS50b0lTTygpLFxuXHRcdFsgYCR7IHByZWZpeCB9LWVuZGAgXTogdGlja2V0RW50aXR5LmVuZERhdGUudG9JU08oKSxcblx0XHRbIGAkeyBwcmVmaXggfS10YXhhYmxlYCBdOiB0aWNrZXRFbnRpdHkudGF4YWJsZSB8fCBmYWxzZSxcblx0XHRbIGAkeyBwcmVmaXggfS1vcmRlcmAgXTogdGlja2V0RW50aXR5Lm9yZGVyIHx8IDAsXG5cdFx0WyBgJHsgcHJlZml4IH0taXMtZGVmYXVsdGAgXTogdGlja2V0RW50aXR5LmlzRGVmYXVsdCB8fCBmYWxzZSxcblx0XHRbIGAkeyBwcmVmaXggfS13cC11c2VyYCBdOiB0aWNrZXRFbnRpdHkud3BVc2VyIHx8IDAsXG5cdFx0WyBgJHsgcHJlZml4IH0tcGFyZW50YCBdOiB0aWNrZXRFbnRpdHkucGFyZW50IHx8IDAsXG5cdFx0WyBgJHsgcHJlZml4IH0tZGVsZXRlZGAgXTogdGlja2V0RW50aXR5LmRlbGV0ZWQgfHwgZmFsc2UsXG5cdH07XG59O1xuXG5jb25zdCBzdHJpcEluZmluaXR5ID0gKCBudW1iZXIgKSA9PiBudW1iZXIgIT09ICdJTkYnIHx8IG51bWJlciAhPT0gSW5maW5pdHkgP1xuXHRudW1iZXIgOlxuXHRudWxsO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdHdpdGhGb3JtSGFuZGxlcixcblx0dHdvQ29sdW1uQWRtaW5Gb3JtTGF5b3V0LFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyB0aWNrZXRFbnRpdHlGb3JtSW5wdXRzIH0gZnJvbSAnLi4vJztcbmltcG9ydCB7IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvcnMgfSBmcm9tICcuLi9wcmljZS1jYWxjdWxhdG9yJztcbmltcG9ydCB7IHdpdGhUaWNrZXRQcmljZUVudGl0aWVzLCB3aXRoUHJpY2VUeXBlRW50aXRpZXMgfSBmcm9tICcuLi8uLi8uLi9ob2NzJztcblxuY29uc3QgZ2V0Rm9ybVJvd3MgPSAoXG5cdHRpY2tldEVudGl0eSxcblx0Y2FsY3VsYXRvcixcblx0ZXhjbHVkZSxcblx0Y3VycmVudFZhbHVlcyxcblx0Rm9ybUlucHV0LFxuXHRyZWNhbGN1bGF0ZUJhc2VQcmljZVxuKSA9PiB0aWNrZXRFbnRpdHlGb3JtSW5wdXRzKFxuXHR0aWNrZXRFbnRpdHksXG5cdGNhbGN1bGF0b3IsXG5cdGV4Y2x1ZGUsXG5cdGN1cnJlbnRWYWx1ZXMsXG5cdEZvcm1JbnB1dCxcblx0cmVjYWxjdWxhdGVCYXNlUHJpY2UsXG4pO1xuXG5jb25zdCBUaWNrZXRFbnRpdHlGb3JtID0gKCB7XG5cdHRpY2tldEVudGl0eSxcblx0cHJpY2VFbnRpdGllcyA9IFtdLFxuXHRwcmljZVR5cGVFbnRpdGllcyA9IFtdLFxuXHRjYWxjdWxhdG9yLFxuXHRzdWJtaXRCdXR0b24sXG5cdGNhbmNlbEJ1dHRvbixcblx0Y3VycmVudFZhbHVlcyA9IHt9LFxuXHRpbml0aWFsVmFsdWVzID0ge30sXG5cdG5ld09iamVjdCA9IGZhbHNlLFxufSApID0+IHtcblx0Y29uc3QgeyBjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2UgfSA9IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvcnMoIHByaWNlVHlwZUVudGl0aWVzICk7XG5cdC8vIGhvb2tzIG11c3QgYmUgYXQgdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24gYW5kIG5ldmVyIGNoYW5nZSBvcmRlci5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB3b3JkcHJlc3Mvbm8tdW51c2VkLXZhcnMtYmVmb3JlLXJldHVyblxuXHRjb25zdCByZWNhbGN1bGF0ZUJhc2VQcmljZSA9IHVzZUNhbGxiYWNrKCAoKSA9PiB7XG5cdFx0Y2FsY3VsYXRlVGlja2V0QmFzZVByaWNlKCB0aWNrZXRFbnRpdHkucHJpY2UudG9OdW1iZXIoKSwgcHJpY2VFbnRpdGllcyApO1xuXHR9LCBbIHRpY2tldEVudGl0eSwgcHJpY2VFbnRpdGllcywgY2FsY3VsYXRlVGlja2V0QmFzZVByaWNlIF0gKTtcblx0Ly8gZWRpdCBmb3JtcyBmb3IgZXhpc3Rpbmcgb2JqZWN0cyBtdXN0IGhhdmUgaW5pdGlhbCB2YWx1ZXNcblx0aWYgKFxuXHRcdCggISBuZXdPYmplY3QgJiYgaXNFbXB0eSggaW5pdGlhbFZhbHVlcyApICkgfHxcblx0XHRpc0VtcHR5KCBjdXJyZW50VmFsdWVzIClcblx0KSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3Qge1xuXHRcdEZvcm1JbnB1dCxcblx0XHRGb3JtU2VjdGlvbixcblx0XHRGb3JtV3JhcHBlcixcblx0XHRGb3JtU2F2ZUNhbmNlbEJ1dHRvbnMsXG5cdFx0Rm9ybUluZm8sXG5cdH0gPSB0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQ7XG5cblx0Ly8gZW50aXR5IHByb3BlcnRpZXMgd2UgZG9uJ3Qgd2FudCB0byBiZSBlZGl0YWJsZVxuXHRjb25zdCBleGNsdWRlID0gW1xuXHRcdCdUS1RfSUQnLFxuXHRcdCdzb2xkJyxcblx0XHQncmVzZXJ2ZWQnLFxuXHRcdCdvcmRlcicsXG5cdFx0J3BhcmVudCcsXG5cdFx0J2RlbGV0ZWQnLFxuXHRcdCd3cFVzZXInLFxuXHRcdCdzdGF0dXMnLFxuXHRdO1xuXHRjb25zdCBmb3JtUm93cyA9IGdldEZvcm1Sb3dzKFxuXHRcdHRpY2tldEVudGl0eSxcblx0XHRjYWxjdWxhdG9yLFxuXHRcdGV4Y2x1ZGUsXG5cdFx0Y3VycmVudFZhbHVlcyxcblx0XHRGb3JtSW5wdXQsXG5cdFx0cmVjYWxjdWxhdGVCYXNlUHJpY2UsXG5cdCk7XG5cdGZvcm1Sb3dzLnVuc2hpZnQoXG5cdFx0PEZvcm1JbmZvXG5cdFx0XHRrZXk9XCJmb3JtSW5mb1wiXG5cdFx0XHRmb3JtSW5mbz17XG5cdFx0XHRcdF9fKFxuXHRcdFx0XHRcdCdhbGwgZmllbGRzIG1hcmtlZCB3aXRoIGFuIGFzdGVyaXNrIGFyZSByZXF1aXJlZCcsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0XHRkaXNtaXNzYWJsZT17IGZhbHNlIH1cblx0XHQvPlxuXHQpO1xuXG5cdHJldHVybiB0aWNrZXRFbnRpdHkgJiYgdGlja2V0RW50aXR5LmlkID8gKFxuXHRcdDxGb3JtV3JhcHBlcj5cblx0XHRcdDxGb3JtU2VjdGlvblxuXHRcdFx0XHRodG1sSWQ9eyBgZWUtdGlja2V0LWVkaXRvci0keyB0aWNrZXRFbnRpdHkuaWQgfS1mb3JtLXNlY3Rpb25gIH1cblx0XHRcdFx0Y2hpbGRyZW49eyBmb3JtUm93cyB9XG5cdFx0XHQvPlxuXHRcdFx0PEZvcm1TYXZlQ2FuY2VsQnV0dG9uc1xuXHRcdFx0XHRodG1sQ2xhc3M9eyBgZWUtdGlja2V0LWVkaXRvci0keyB0aWNrZXRFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRzdWJtaXRCdXR0b249eyBzdWJtaXRCdXR0b24gfVxuXHRcdFx0XHRjYW5jZWxCdXR0b249eyBjYW5jZWxCdXR0b24gfVxuXHRcdFx0Lz5cblx0XHQ8L0Zvcm1XcmFwcGVyPlxuXHQpIDogbnVsbDtcbn07XG5cbi8qKlxuICogRW5oYW5jZWQgVGlja2V0RW50aXR5Rm9ybSB3aXRoIEZvcm1IYW5kbGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0d2l0aFRpY2tldFByaWNlRW50aXRpZXMsXG5cdHdpdGhQcmljZVR5cGVFbnRpdGllcyxcblx0d2l0aEZvcm1IYW5kbGVyLFxuXSApKCBUaWNrZXRFbnRpdHlGb3JtICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IHdpdGhFZGl0b3JNb2RhbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VkaXRvci1ob2NzJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCBGcmFnbWVudCwgdXNlU3RhdGUgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IFRpY2tldEVudGl0eUZvcm0gZnJvbSAnLi4vZWRpdC1mb3JtL3RpY2tldC1lbnRpdHktZm9ybSc7XG5pbXBvcnQgeyB0aWNrZXRFbnRpdHlGb3JtU2NoZW1hIH0gZnJvbSAnLi4vZWRpdC1mb3JtL3RpY2tldC1lbnRpdHktZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgVGlja2V0UHJpY2VDYWxjdWxhdG9yTWVudUl0ZW0gfSBmcm9tICcuLi9wcmljZS1jYWxjdWxhdG9yL3RpY2tldC1wcmljZS1jYWxjdWxhdG9yLW1lbnUtaXRlbSc7XG5cbmNvbnN0IFRpY2tldEVudGl0eUZvcm1Nb2RhbCA9IHdpdGhFZGl0b3JNb2RhbCgge1xuXHR0aXRsZTogX18oICdUaWNrZXQgRWRpdG9yJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRjdXN0b21DbGFzczogJ2VlLXRpY2tldC1lZGl0b3ItbW9kYWwnLFxuXHRjbG9zZUJ1dHRvbkxhYmVsOiBfXyggJ2Nsb3NlIHRpY2tldCBlZGl0b3InLCAnZXZlbnRfZXNwcmVzc28nICksXG59ICkoICgge1xuXHR0aWNrZXRFbnRpdHksXG5cdC4uLm90aGVyUHJvcHNcbn0gKSA9PiB7XG5cdGNvbnN0IGxvYWRIYW5kbGVyID0gdXNlQ2FsbGJhY2soXG5cdFx0KCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRpY2tldEVudGl0eUZvcm1TY2hlbWEoIHRpY2tldEVudGl0eSApO1xuXHRcdH0sXG5cdFx0WyB0aWNrZXRFbnRpdHkgXVxuXHQpO1xuXHRyZXR1cm4gPFRpY2tldEVudGl0eUZvcm1cblx0XHRsb2FkSGFuZGxlcj17IGxvYWRIYW5kbGVyIH1cblx0XHRzdWJtaXRIYW5kbGVyPXsgbnVsbCB9XG5cdFx0cmVzZXRIYW5kbGVyPXsgbnVsbCB9XG5cdFx0dGlja2V0RW50aXR5PXsgdGlja2V0RW50aXR5IH1cblx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHQvPjtcbn0gKTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdCggV3JhcHBlZENvbXBvbmVudCApID0+ICgge1xuXHRcdHRpY2tldEVudGl0eSxcblx0XHRub0Jhc2VQcmljZSxcblx0XHRkb1JlZnJlc2gsXG5cdFx0dG9nZ2xlQ2FsY3VsYXRvcixcblx0XHRvbkNsb3NlVGlja2V0RWRpdG9yID0gKCkgPT4gbnVsbCxcblx0XHRvbk9wZW5UaWNrZXRFZGl0b3IgPSAoKSA9PiBudWxsLFxuXHRcdC4uLm90aGVyUHJvcHNcblx0fSApID0+IHtcblx0XHRjb25zdCBbIHNob3dFZGl0b3IsIHNldFNob3dFZGl0b3IgXSA9IHVzZVN0YXRlKCBmYWxzZSApO1xuXHRcdGNvbnN0IHRvZ2dsZVRpY2tldEVkaXRvciA9IHVzZUNhbGxiYWNrKCAoKSA9PiB7XG5cdFx0XHRzZXRTaG93RWRpdG9yKCAoIHByZXZTaG93RWRpdG9yICkgPT4gISBwcmV2U2hvd0VkaXRvciApO1xuXHRcdH0sIFsgdGlja2V0RW50aXR5IF0gKTtcblx0XHRjb25zdCBjYWxjdWxhdG9yID0gPFRpY2tldFByaWNlQ2FsY3VsYXRvck1lbnVJdGVtXG5cdFx0XHR0aWNrZXRFbnRpdHk9eyB0aWNrZXRFbnRpdHkgfVxuXHRcdFx0bm9CYXNlUHJpY2U9eyBub0Jhc2VQcmljZSB9XG5cdFx0XHRvbk9wZW5UaWNrZXRDYWxjdWxhdG9yPXsgdG9nZ2xlVGlja2V0RWRpdG9yIH1cblx0XHRcdHRvZ2dsZUNhbGN1bGF0b3I9eyB0b2dnbGVDYWxjdWxhdG9yIH1cblx0XHRcdG9uQ2xvc2VUaWNrZXRDYWxjdWxhdG9yPXsgdG9nZ2xlVGlja2V0RWRpdG9yIH1cblx0XHRcdGRvUmVmcmVzaD17IGRvUmVmcmVzaCB9XG5cdFx0Lz47XG5cdFx0cmV0dXJuIDxGcmFnbWVudD5cblx0XHRcdDxXcmFwcGVkQ29tcG9uZW50XG5cdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHRcdHRpY2tldEVudGl0eT17IHRpY2tldEVudGl0eSB9XG5cdFx0XHRcdHRvZ2dsZVRpY2tldEVkaXRvcj17IHRvZ2dsZVRpY2tldEVkaXRvciB9XG5cdFx0XHRcdHRvZ2dsZUNhbGN1bGF0b3I9eyB0b2dnbGVDYWxjdWxhdG9yIH1cblx0XHRcdFx0ZG9SZWZyZXNoPXsgZG9SZWZyZXNoIH1cblx0XHRcdC8+XG5cdFx0XHQ8VGlja2V0RW50aXR5Rm9ybU1vZGFsXG5cdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHRcdHRpY2tldEVudGl0eT17IHRpY2tldEVudGl0eSB9XG5cdFx0XHRcdGVkaXRvck9wZW49eyBzaG93RWRpdG9yIH1cblx0XHRcdFx0b25PcGVuPXsgb25PcGVuVGlja2V0RWRpdG9yIH1cblx0XHRcdFx0b25DbG9zZT17IG9uQ2xvc2VUaWNrZXRFZGl0b3IgfVxuXHRcdFx0XHR0b2dnbGVFZGl0b3I9eyB0b2dnbGVUaWNrZXRFZGl0b3IgfVxuXHRcdFx0XHRjYWxjdWxhdG9yPXsgY2FsY3VsYXRvciB9XG5cdFx0XHRcdGRvUmVmcmVzaD17IGRvUmVmcmVzaCB9XG5cdFx0XHQvPlxuXHRcdDwvRnJhZ21lbnQ+O1xuXHR9LFxuXHQnd2l0aFRpY2tldEVudGl0eUZvcm1Nb2RhbCdcbik7XG4iLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBmaW5kIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGNvbXBvc2UsIGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhEaXNwYXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlRWZmZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7XG5cdEVudGl0eUxpc3QsXG5cdEVzcHJlc3NvQnV0dG9uLFxuXHR0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18sIF94LCBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHdpdGhQcmljZVR5cGVFbnRpdGllcywgd2l0aEVkaXRvclRpY2tldEVudGl0aWVzIH0gZnJvbSAnLi4vLi4vaG9jcyc7XG5pbXBvcnQgeyB3aXRoVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybU1vZGFsIH0gZnJvbSAnLi9wcmljZS1jYWxjdWxhdG9yJztcbmltcG9ydCB7IHdpdGhUaWNrZXRFbnRpdHlGb3JtTW9kYWwgfSBmcm9tICcuL2VkaXQtZm9ybSc7XG5pbXBvcnQgeyBFZGl0b3JUaWNrZXRFbnRpdGllc0dyaWRWaWV3IH0gZnJvbSAnLi9ncmlkLXZpZXcvJztcbmltcG9ydCB7IEVkaXRvclRpY2tldEVudGl0aWVzTGlzdFZpZXcgfSBmcm9tICcuL2xpc3Qtdmlldy8nO1xuaW1wb3J0IHsgd2l0aFBhZ2luYXRlZFRpY2tldEVudGl0aWVzTGlzdEFuZEZpbHRlckJhciB9IGZyb20gJy4vZmlsdGVyLWJhcic7XG5pbXBvcnQgeyB3aXRoVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWwgfSBmcm9tICcuLi8uLi90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlcic7XG5cbmNvbnN0IHtcblx0Rm9ybVdyYXBwZXIsXG5cdEZvcm1TYXZlQ2FuY2VsQnV0dG9ucyxcbn0gPSB0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQ7XG5cbmNvbnN0IEVkaXRvclRpY2tldEVudGl0aWVzTGlzdCA9ICgge1xuXHRlbnRpdGllcyxcblx0YWRkTmV3VGlja2V0RW50aXR5LFxuXHR0b2dnbGVUaWNrZXRFZGl0b3IsXG5cdHRpY2tldEVudGl0eSA9IG51bGwsXG5cdHZpZXcgPSAnZ3JpZCcsXG5cdC4uLm90aGVyUHJvcHNcbn0gKSA9PiB7XG5cdHVzZUVmZmVjdCggKCkgPT4ge1xuXHRcdGlmICggdGlja2V0RW50aXR5ICE9PSBudWxsICkge1xuXHRcdFx0dG9nZ2xlVGlja2V0RWRpdG9yKCk7XG5cdFx0fVxuXHR9LCBbIHRpY2tldEVudGl0eSBdICk7XG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBidXR0b25cblx0ICovXG5cdGNvbnN0IGFkZE5ld1RpY2tldEVudGl0eUJ1dHRvbiA9IHVzZU1lbW8oXG5cdFx0KCkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEVzcHJlc3NvQnV0dG9uXG5cdFx0XHRcdFx0aWNvbj1cInRpY2tldHMtYWx0XCJcblx0XHRcdFx0XHRidXR0b25UZXh0PXsgX18oICdBZGQgTmV3IFRpY2tldCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0b25DbGljaz17IGFkZE5ld1RpY2tldEVudGl0eSB9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH0sXG5cdFx0WyBhZGROZXdUaWNrZXRFbnRpdHkgXVxuXHQpO1xuXG5cdHJldHVybiAoXG5cdFx0PEZvcm1XcmFwcGVyPlxuXHRcdFx0PEVudGl0eUxpc3Rcblx0XHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdFx0ZW50aXRpZXM9eyBlbnRpdGllcyB9XG5cdFx0XHRcdEVudGl0eUdyaWRWaWV3PXsgRWRpdG9yVGlja2V0RW50aXRpZXNHcmlkVmlldyB9XG5cdFx0XHRcdEVudGl0eUxpc3RWaWV3PXsgRWRpdG9yVGlja2V0RW50aXRpZXNMaXN0VmlldyB9XG5cdFx0XHRcdHZpZXc9eyB2aWV3IH1cblx0XHRcdFx0bG9hZGluZ05vdGljZT17IHNwcmludGYoXG5cdFx0XHRcdFx0X3goXG5cdFx0XHRcdFx0XHQnbG9hZGluZyBhdmFpbGFibGUgdGlja2V0cyVzJyxcblx0XHRcdFx0XHRcdCdsb2FkaW5nIGF2YWlsYWJsZSB0aWNrZXRzLi4uJyxcblx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIDgyMzAgKVxuXHRcdFx0XHQpIH1cblx0XHRcdC8+XG5cdFx0XHQ8Rm9ybVNhdmVDYW5jZWxCdXR0b25zIHN1Ym1pdEJ1dHRvbj17IGFkZE5ld1RpY2tldEVudGl0eUJ1dHRvbiB9IC8+XG5cdFx0PC9Gb3JtV3JhcHBlcj5cblx0KTtcbn07XG5cbmNvbnN0IHdpdGhOZXdUaWNrZXRFbnRpdHkgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0KCBXcmFwcGVkQ29tcG9uZW50ICkgPT4gKCBwcm9wcyApID0+IHtcblx0XHRjb25zdCBbIG5ld1RpY2tldCwgc2V0TmV3VGlja2V0RW50aXR5IF0gPSB1c2VTdGF0ZSggbnVsbCApO1xuXHRcdGNvbnN0IGJhc2VQcmljZVR5cGVFbnRpdHkgPSB1c2VNZW1vKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAoICEgcHJvcHMucHJpY2VUeXBlRW50aXRpZXNMb2FkZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpbmQoXG5cdFx0XHRcdFx0cHJvcHMucHJpY2VUeXBlRW50aXRpZXMsXG5cdFx0XHRcdFx0KCBwcmljZVR5cGUgKSA9PiBwcmljZVR5cGUucGJ0SWQgPT09IDFcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRbIHByb3BzLnByaWNlVHlwZUVudGl0aWVzLCBwcm9wcy5wcmljZVR5cGVFbnRpdGllc0xvYWRlZCBdXG5cdFx0KTtcblx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnRcblx0XHRcdHNldE5ld1RpY2tldEVudGl0eT17IHNldE5ld1RpY2tldEVudGl0eSB9XG5cdFx0XHR0aWNrZXRFbnRpdHk9eyBuZXdUaWNrZXQgfVxuXHRcdFx0YmFzZVByaWNlVHlwZUVudGl0eT17IGJhc2VQcmljZVR5cGVFbnRpdHkgfVxuXHRcdFx0eyAuLi5wcm9wcyB9XG5cdFx0Lz47XG5cdH0sXG5cdCd3aXRoTmV3VGlja2V0J1xuKTtcblxuY29uc3QgY3JlYXRlTmV3VGlja2V0RW50aXR5ID0gd2l0aERpc3BhdGNoKFxuXHQoIGRpc3BhdGNoLCB7IHNldE5ld1RpY2tldEVudGl0eSwgYmFzZVByaWNlVHlwZUVudGl0eSB9ICkgPT4ge1xuXHRcdGNvbnN0IHsgY3JlYXRlRW50aXR5LCBjcmVhdGVSZWxhdGlvbnMgfSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdGNvbnN0IGFkZE5ld1RpY2tldEVudGl0eSA9IGFzeW5jICggZXZlbnQgKSA9PiB7XG5cdFx0XHRpZiAoIGV2ZW50ICYmIGV2ZW50LnByZXZlbnREZWZhdWx0ICkge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG5ld1RpY2tldCA9IGF3YWl0IGNyZWF0ZUVudGl0eSggJ3RpY2tldCcsIHt9ICk7XG5cdFx0XHRjb25zdCBuZXdCYXNlUHJpY2UgPSBhd2FpdCBjcmVhdGVFbnRpdHkoXG5cdFx0XHRcdCdwcmljZScsXG5cdFx0XHRcdHsgUFJUX0lEOiBiYXNlUHJpY2VUeXBlRW50aXR5LmlkIH1cblx0XHRcdCk7XG5cdFx0XHRjcmVhdGVSZWxhdGlvbnMoXG5cdFx0XHRcdCd0aWNrZXQnLFxuXHRcdFx0XHRuZXdUaWNrZXQuaWQsXG5cdFx0XHRcdCdwcmljZScsXG5cdFx0XHRcdFsgbmV3QmFzZVByaWNlIF1cblx0XHRcdCk7XG5cdFx0XHRzZXROZXdUaWNrZXRFbnRpdHkoIG5ld1RpY2tldCApO1xuXHRcdH07XG5cdFx0cmV0dXJuIHsgYWRkTmV3VGlja2V0RW50aXR5IH07XG5cdH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0d2l0aFByaWNlVHlwZUVudGl0aWVzLFxuXHR3aXRoTmV3VGlja2V0RW50aXR5LFxuXHR3aXRoRWRpdG9yVGlja2V0RW50aXRpZXMsXG5cdHdpdGhQYWdpbmF0ZWRUaWNrZXRFbnRpdGllc0xpc3RBbmRGaWx0ZXJCYXIoKSxcblx0Ly8gYWRkIHRpY2tldEFzc2lnbm1lbnRzIE1hbmFnZXJNb2RhbCBvbkNsb3NlXG5cdHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCggKCkgPT4gKFxuXHRcdHtcblx0XHRcdHRpdGxlOiBfXyhcblx0XHRcdFx0J1RpY2tldCBBc3NpZ25tZW50cyBmb3IgQWxsIEV2ZW50IERhdGVzJyxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0KSxcblx0XHRcdGNsb3NlQnV0dG9uTGFiZWw6IG51bGwsXG5cdFx0fVxuXHQpICksXG5cdGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHRcdCggV3JhcHBlZENvbXBvbmVudCApID0+ICggcHJvcHMgKSA9PiB7XG5cdFx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnRcblx0XHRcdFx0eyAuLi5wcm9wcyB9XG5cdFx0XHRcdG9uQ2xvc2VUaWNrZXRFZGl0b3I9eyBwcm9wcy50b2dnbGVUaWNrZXRBc3NpZ25tZW50cyB9XG5cdFx0XHQvPjtcblx0XHR9LFxuXHRcdCd3aXRoT25DbG9zZVRpY2tldEVkaXRvcidcblx0KSxcblx0d2l0aFRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1Nb2RhbCxcblx0d2l0aFRpY2tldEVudGl0eUZvcm1Nb2RhbCxcblx0Y3JlYXRlTmV3VGlja2V0RW50aXR5LFxuXSApKCBFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3QgKTtcblxuLyoqXG4gKiBhIHRyaW1tZWQgZG93biB0aWNrZXQgbGlzdDogb25seSBpbmNsdWRlcyB0aWNrZXQgcHJpY2UgY2FsY3VsYXRvclxuICovXG5leHBvcnQgY29uc3QgRWRpdG9yVGlja2V0RW50aXRpZXNPbmx5TGlzdCA9IGNvbXBvc2UoIFtcblx0d2l0aFByaWNlVHlwZUVudGl0aWVzLFxuXHR3aXRoTmV3VGlja2V0RW50aXR5LFxuXHR3aXRoRWRpdG9yVGlja2V0RW50aXRpZXMsXG5cdHdpdGhUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtTW9kYWwsXG5cdHdpdGhUaWNrZXRFbnRpdHlGb3JtTW9kYWwsXG5cdGNyZWF0ZU5ld1RpY2tldEVudGl0eSxcbl0gKSggRWRpdG9yVGlja2V0RW50aXRpZXNMaXN0ICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgd2l0aEVudGl0eVBhZ2luYXRpb24gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9oaWdoZXItb3JkZXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBjb21wb3NlLCBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB3aXRoVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyQmFyLCB7XG5cdGdldEZpbHRlcmVkVGlja2V0RW50aXRpZXNMaXN0LFxufSBmcm9tICcuL3dpdGgtdGlja2V0LWVudGl0aWVzLWxpc3QtZmlsdGVyLWJhcic7XG5pbXBvcnQgd2l0aFRpY2tldEVudGl0aWVzTGlzdEZpbHRlclN0YXRlXG5cdGZyb20gJy4vd2l0aC10aWNrZXQtZW50aXRpZXMtbGlzdC1maWx0ZXItc3RhdGUnO1xuaW1wb3J0IHdpdGhGaWx0ZXJlZFRpY2tldEVudGl0aWVzIGZyb20gJy4vd2l0aC1maWx0ZXJlZC10aWNrZXQtZW50aXRpZXMnO1xuXG5jb25zdCB3aXRoUGFnaW5hdGVkVGlja2V0RW50aXRpZXNMaXN0QW5kRmlsdGVyQmFyID0gKFxuXHRwYWdpbmF0aW9uQ29uZmlnID0ge31cbikgPT4gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyU3RhdGUsXG5cdFx0d2l0aFRpY2tldEVudGl0aWVzTGlzdEZpbHRlckJhcixcblx0XHR3aXRoRW50aXR5UGFnaW5hdGlvbiggcGFnaW5hdGlvbkNvbmZpZyApLFxuXHRdICksXG5cdCd3aXRoUGFnaW5hdGVkVGlja2V0RW50aXRpZXNMaXN0QW5kRmlsdGVyQmFyJ1xuKTtcblxuZXhwb3J0IHtcblx0d2l0aFRpY2tldEVudGl0aWVzTGlzdEZpbHRlckJhcixcblx0d2l0aFRpY2tldEVudGl0aWVzTGlzdEZpbHRlclN0YXRlLFxuXHR3aXRoRmlsdGVyZWRUaWNrZXRFbnRpdGllcyxcblx0d2l0aFBhZ2luYXRlZFRpY2tldEVudGl0aWVzTGlzdEFuZEZpbHRlckJhcixcblx0Z2V0RmlsdGVyZWRUaWNrZXRFbnRpdGllc0xpc3QsXG59O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWVudGl0eS1saXN0LWZpbHRlci1iYXJcIjpcImVlLWVudGl0eS1saXN0LWZpbHRlci1iYXJcIixcImVlLWZpbHRlci1iYXItZmlsdGVyXCI6XCJlZS1maWx0ZXItYmFyLWZpbHRlclwiLFwiZWUtc2hvdy10aWNrZXRzLWZpbHRlclwiOlwiZWUtc2hvdy10aWNrZXRzLWZpbHRlclwiLFwiZWUtdGlja2V0LWRhdGVzLWNoYWluZWQtZmlsdGVyXCI6XCJlZS10aWNrZXQtZGF0ZXMtY2hhaW5lZC1maWx0ZXJcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IEljb25CdXR0b24sIFNlbGVjdENvbnRyb2wgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5cbi8qKlxuICogVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyQmFyXG4gKiBmaWx0ZXJzIGZvciBjb250cm9sbGluZyB0aGUgZGlzcGxheSBvZiBhIGxpc3Qgb2YgVGlja2V0c1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uU2hvd0ZpbHRlckNoYW5nZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25PcmRlckZpbHRlckNoYW5nZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25EaXNwbGF5RmlsdGVyQ2hhbmdlXG4gKiBAcmV0dXJuIHtPYmplY3R9IEVkaXRvclRpY2tldHNMaXN0VmlldyB3aXRoIGFkZGVkIFRpY2tldExpc3RGaWx0ZXJzXG4gKi9cbmNsYXNzIFRpY2tldEVudGl0aWVzTGlzdEZpbHRlckJhciBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0c2hvd1RpY2tldHM6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHR0aWNrZXRzU29ydGVkQnk6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRkaXNwbGF5VGlja2V0RGF0ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdGlzQ2hhaW5lZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblx0XHRzZXRTaG93VGlja2V0czogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblx0XHRzZXRUaWNrZXRzU29ydGVkQnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c2V0RGlzcGxheVRpY2tldERhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c2V0SXNDaGFpbmVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2hvd1RpY2tldHNcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0U2hvd1RpY2tldHNcblx0ICogQHBhcmFtIHtib29sZWFufSBpc0NoYWluZWRcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBzaG93VGlja2V0cyBmaWx0ZXJcblx0ICovXG5cdHNob3dUaWNrZXRzID0gKCBzaG93VGlja2V0cywgc2V0U2hvd1RpY2tldHMsIGlzQ2hhaW5lZCApID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFNlbGVjdENvbnRyb2xcblx0XHRcdFx0bGFiZWw9eyBfXyggJ3Nob3cnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRjbGFzc05hbWU9XCJlc3ByZXNzby10aWNrZXQtbGlzdC1maWx0ZXItYmFyLXNob3ctc2VsZWN0XCJcblx0XHRcdFx0dmFsdWU9eyBzaG93VGlja2V0cyB9XG5cdFx0XHRcdG9wdGlvbnM9eyBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdhbGwnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGlzQ2hhaW5lZCA/XG5cdFx0XHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0XHRcdCdhbGwgdGlja2V0cyBmb3IgYWJvdmUgZGF0ZXMnLFxuXHRcdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdFx0KSA6XG5cdFx0XHRcdFx0XHRcdF9fKCAnYWxsIHRpY2tldHMgZm9yIGFsbCBkYXRlcycsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnb24tc2FsZS1hbmQtcGVuZGluZycsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oXG5cdFx0XHRcdFx0XHRcdCdhbGwgb24gc2FsZSBhbmQgc2FsZSBwZW5kaW5nJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnb24tc2FsZS1vbmx5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyhcblx0XHRcdFx0XHRcdFx0J29uIHNhbGUgdGlja2V0cyBvbmx5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAncGVuZGluZy1vbmx5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyhcblx0XHRcdFx0XHRcdFx0J3NhbGUgcGVuZGluZyB0aWNrZXRzIG9ubHknLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICduZXh0LW9uLXNhbGUtb3ItcGVuZGluZy1vbmx5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyhcblx0XHRcdFx0XHRcdFx0J25leHQgb24gc2FsZSBvciBzYWxlIHBlbmRpbmcgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3NvbGQtb3V0LW9ubHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnc29sZCBvdXQgdGlja2V0cyBvbmx5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYWJvdmUtOTAtc29sZCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oXG5cdFx0XHRcdFx0XHRcdCd0aWNrZXRzIHdpdGggOTAlIG9yIG1vcmUgc29sZCcsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2Fib3ZlLTc1LXNvbGQnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQndGlja2V0cyB3aXRoIDc1JSBvciBtb3JlIHNvbGQnLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdhYm92ZS01MC1zb2xkJyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyhcblx0XHRcdFx0XHRcdFx0J3RpY2tldHMgd2l0aCA1MCUgb3IgbW9yZSBzb2xkJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYmVsb3ctNTAtc29sZCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oXG5cdFx0XHRcdFx0XHRcdCd0aWNrZXRzIHdpdGggbGVzcyB0aGFuIDUwJSBzb2xkJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnZXhwaXJlZC1vbmx5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyhcblx0XHRcdFx0XHRcdFx0J2V4cGlyZWQgdGlja2V0cyBvbmx5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYXJjaGl2ZWQtb25seScsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oXG5cdFx0XHRcdFx0XHRcdCdhcmNoaXZlZCB0aWNrZXRzIG9ubHknLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0gfVxuXHRcdFx0XHRvbkNoYW5nZT17IHNldFNob3dUaWNrZXRzIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpY2tldHNTb3J0ZWRCeVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRUaWNrZXRzU29ydGVkQnlcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCB0aWNrZXRzU29ydGVkQnkgZmlsdGVyXG5cdCAqL1xuXHR0aWNrZXRzU29ydGVkQnkgPSAoIHRpY2tldHNTb3J0ZWRCeSwgc2V0VGlja2V0c1NvcnRlZEJ5ICkgPT4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8U2VsZWN0Q29udHJvbFxuXHRcdFx0XHRsYWJlbD17IF9fKCAnc29ydCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGNsYXNzTmFtZT1cImVzcHJlc3NvLXRpY2tldC1saXN0LWZpbHRlci1iYXItb3JkZXItc2VsZWN0XCJcblx0XHRcdFx0dmFsdWU9eyB0aWNrZXRzU29ydGVkQnkgfVxuXHRcdFx0XHRvcHRpb25zPXsgW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnY2hyb25vbG9naWNhbGx5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyggJ2Nocm9ub2xvZ2ljYWxseScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2J5LW5hbWUnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnYnkgdGlja2V0IG5hbWUnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2J5LWlkJyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyggJ2J5IHRpY2tldCBJRCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYnktb3JkZXInLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnYnkgY3VzdG9tIG9yZGVyJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdIH1cblx0XHRcdFx0b25DaGFuZ2U9eyBzZXRUaWNrZXRzU29ydGVkQnkgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGlzcGxheVRpY2tldHNcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0RGlzcGxheVRpY2tldHNcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBkaXNwbGF5VGlja2V0cyBmaWx0ZXJcblx0ICovXG5cdGRpc3BsYXlUaWNrZXRzID0gKCBkaXNwbGF5VGlja2V0cywgc2V0RGlzcGxheVRpY2tldHMgKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRcdGxhYmVsPXsgX18oICdkaXNwbGF5JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0Y2xhc3NOYW1lPVwiZXNwcmVzc28tdGlja2V0LWxpc3QtZmlsdGVyLWJhci1kaXNwbGF5LXNlbGVjdFwiXG5cdFx0XHRcdHZhbHVlPXsgZGlzcGxheVRpY2tldHMgfVxuXHRcdFx0XHRvcHRpb25zPXsgW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnc3RhcnQnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAndGlja2V0IHNhbGVzIHN0YXJ0IGRhdGUgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2VuZCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oXG5cdFx0XHRcdFx0XHRcdCd0aWNrZXQgc2FsZXMgZW5kIGRhdGUgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2JvdGgnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQndGlja2V0IHNhbGVzIHN0YXJ0IGFuZCBlbmQgZGF0ZXMnLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0gfVxuXHRcdFx0XHRvbkNoYW5nZT17IHNldERpc3BsYXlUaWNrZXRzIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBpc0NoYWluZWRcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0SXNDaGFpbmVkXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZGlzcGxheVRpY2tldHMgZmlsdGVyXG5cdCAqL1xuXHR0aWNrZXRzQ2hhaW5lZCA9ICggaXNDaGFpbmVkLCBzZXRJc0NoYWluZWQgKSA9PiB7XG5cdFx0aXNDaGFpbmVkID0gISEgaXNDaGFpbmVkO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8SWNvbkJ1dHRvblxuXHRcdFx0XHRsYWJlbD17IGlzQ2hhaW5lZCA/XG5cdFx0XHRcdFx0X18oICdzaG93aW5nIHRpY2tldHMgZm9yIGFib3ZlIGRhdGVzIG9ubHknLCAnZXZlbnRfZXNwcmVzc28nICkgOlxuXHRcdFx0XHRcdF9fKCAnc2hvd2luZyB0aWNrZXRzIGZvciBhbGwgZXZlbnQgZGF0ZXMnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0XHRcdFx0fVxuXHRcdFx0XHRpY29uPXsgaXNDaGFpbmVkID8gJ2FkbWluLWxpbmtzJyA6ICdlZGl0b3ItdW5saW5rJyB9XG5cdFx0XHRcdG9uQ2xpY2s9eyAoKSA9PiBzZXRJc0NoYWluZWQoICEgaXNDaGFpbmVkICkgfVxuXHRcdFx0XHR2YWx1ZT17IGlzQ2hhaW5lZCB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdHNob3dUaWNrZXRzLFxuXHRcdFx0c2V0U2hvd1RpY2tldHMsXG5cdFx0XHR0aWNrZXRzU29ydGVkQnksXG5cdFx0XHRzZXRUaWNrZXRzU29ydGVkQnksXG5cdFx0XHRkaXNwbGF5VGlja2V0RGF0ZSxcblx0XHRcdHNldERpc3BsYXlUaWNrZXREYXRlLFxuXHRcdFx0aXNDaGFpbmVkLFxuXHRcdFx0c2V0SXNDaGFpbmVkLFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdGNvbnN0IHNob3dGaWx0ZXIgPSAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXNob3ctdGlja2V0cy1maWx0ZXIgZWUtZmlsdGVyLWJhci1maWx0ZXJcIj5cblx0XHRcdFx0eyB0aGlzLnNob3dUaWNrZXRzKCBzaG93VGlja2V0cywgc2V0U2hvd1RpY2tldHMsIGlzQ2hhaW5lZCApIH1cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdFx0Y29uc3Qgc29ydEZpbHRlciA9IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtc29ydC10aWNrZXRzLWZpbHRlciBlZS1maWx0ZXItYmFyLWZpbHRlclwiPlxuXHRcdFx0XHR7IHRoaXMudGlja2V0c1NvcnRlZEJ5KCB0aWNrZXRzU29ydGVkQnksIHNldFRpY2tldHNTb3J0ZWRCeSApIH1cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdFx0Y29uc3QgZGlzcGxheUZpbHRlciA9IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGlzcGxheS10aWNrZXQtZGF0ZXMtZmlsdGVyIGVlLWZpbHRlci1iYXItZmlsdGVyXCI+XG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aGlzLmRpc3BsYXlUaWNrZXRzKFxuXHRcdFx0XHRcdFx0ZGlzcGxheVRpY2tldERhdGUsXG5cdFx0XHRcdFx0XHRzZXREaXNwbGF5VGlja2V0RGF0ZVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0XHRjb25zdCBpc0NoYWluZWRGaWx0ZXIgPSAoXG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cImVlLXRpY2tldC1kYXRlcy1jaGFpbmVkLWZpbHRlciBlZS1maWx0ZXItYmFyLWZpbHRlclwiPlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGhpcy50aWNrZXRzQ2hhaW5lZChcblx0XHRcdFx0XHRcdGlzQ2hhaW5lZCxcblx0XHRcdFx0XHRcdHNldElzQ2hhaW5lZFxuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHR7IHNob3dGaWx0ZXIgfVxuXHRcdFx0XHR7IGlzQ2hhaW5lZEZpbHRlciB9XG5cdFx0XHRcdHsgc29ydEZpbHRlciB9XG5cdFx0XHRcdHsgZGlzcGxheUZpbHRlciB9XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyQmFyO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cblxuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdCwgc29ydEJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHRpY2tldE1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBmaWx0ZXJUaWNrZXRFbnRpdGllc1xuICogcmVkdWNlcyB0aWNrZXRzIGFycmF5IGJhc2VkIG9uIHZhbHVlIG9mIHRoZSBcInNob3dcIiBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB0aWNrZXRFbnRpdGllcyAgICBvcmlnaW5hbCB0aWNrZXRzIGFycmF5XG4gKiBAcGFyYW0ge3N0cmluZ30gc2hvdyAgICB2YWx1ZSBmb3IgdGhlIFwic2hvd1wiIGZpbHRlclxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgZmlsdGVyZWQgdGlja2V0cyBhcnJheVxuICovXG5leHBvcnQgY29uc3QgZmlsdGVyVGlja2V0RW50aXRpZXMgPSAoIHRpY2tldEVudGl0aWVzLCBzaG93ID0gJ29uLXNhbGUtYW5kLXBlbmRpbmcnICkgPT4ge1xuXHRzd2l0Y2ggKCBzaG93ICkge1xuXHRcdGNhc2UgJ2FsbCcgOlxuXHRcdFx0cmV0dXJuIHRpY2tldEVudGl0aWVzO1xuXHRcdGNhc2UgJ29uLXNhbGUtYW5kLXBlbmRpbmcnIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdFx0XHRmdW5jdGlvbiggdGlja2V0RW50aXR5ICkge1xuXHRcdFx0XHRcdHJldHVybiB0aWNrZXRNb2RlbC5pc09uU2FsZSggdGlja2V0RW50aXR5ICkgfHxcblx0XHRcdFx0XHRcdHRpY2tldE1vZGVsLmlzUGVuZGluZyggdGlja2V0RW50aXR5ICk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHRcdGNhc2UgJ29uLXNhbGUtb25seScgOlxuXHRcdFx0cmV0dXJuIGZpbHRlcihcblx0XHRcdFx0dGlja2V0RW50aXRpZXMsXG5cdFx0XHRcdGZ1bmN0aW9uKCB0aWNrZXRFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRpY2tldE1vZGVsLmlzT25TYWxlKCB0aWNrZXRFbnRpdHkgKTtcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cdFx0Y2FzZSAncGVuZGluZy1vbmx5JyA6XG5cdFx0XHRyZXR1cm4gZmlsdGVyKFxuXHRcdFx0XHR0aWNrZXRFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIHRpY2tldEVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGlja2V0TW9kZWwuaXNQZW5kaW5nKCB0aWNrZXRFbnRpdHkgKTtcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cdFx0Y2FzZSAnbmV4dC1vbi1zYWxlLW9yLXBlbmRpbmctb25seScgOlxuXHRcdFx0dGlja2V0RW50aXRpZXMgPSBmaWx0ZXJUaWNrZXRFbnRpdGllcyggdGlja2V0RW50aXRpZXMgKTtcblx0XHRcdHRpY2tldEVudGl0aWVzID0gc29ydFRpY2tldEVudGl0aWVzTGlzdCggdGlja2V0RW50aXRpZXMgKTtcblx0XHRcdHJldHVybiBbIGZpcnN0KCB0aWNrZXRFbnRpdGllcyApIF07XG5cdFx0Y2FzZSAnc29sZC1vdXQtb25seScgOlxuXHRcdFx0cmV0dXJuIGZpbHRlcihcblx0XHRcdFx0dGlja2V0RW50aXRpZXMsXG5cdFx0XHRcdGZ1bmN0aW9uKCB0aWNrZXRFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRpY2tldE1vZGVsLmlzU29sZE91dCggdGlja2V0RW50aXR5ICkgfHxcblx0XHRcdFx0XHRcdHBlcmNlbnRTb2xkQXRPckFib3ZlKCB0aWNrZXRFbnRpdHksIDEwMCApO1xuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHRjYXNlICdhYm92ZS05MC1zb2xkJyA6XG5cdFx0XHRyZXR1cm4gZmlsdGVyKFxuXHRcdFx0XHR0aWNrZXRFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIHRpY2tldEVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGVyY2VudFNvbGRBdE9yQWJvdmUoIHRpY2tldEVudGl0eSwgOTAgKTtcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cdFx0Y2FzZSAnYWJvdmUtNzUtc29sZCcgOlxuXHRcdFx0cmV0dXJuIGZpbHRlcihcblx0XHRcdFx0dGlja2V0RW50aXRpZXMsXG5cdFx0XHRcdGZ1bmN0aW9uKCB0aWNrZXRFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBlcmNlbnRTb2xkQXRPckFib3ZlKCB0aWNrZXRFbnRpdHksIDc1ICk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHRcdGNhc2UgJ2Fib3ZlLTUwLXNvbGQnIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdFx0XHRmdW5jdGlvbiggdGlja2V0RW50aXR5ICkge1xuXHRcdFx0XHRcdHJldHVybiBwZXJjZW50U29sZEF0T3JBYm92ZSggdGlja2V0RW50aXR5LCA1MCApO1xuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHRjYXNlICdiZWxvdy01MC1zb2xkJyA6XG5cdFx0XHRyZXR1cm4gZmlsdGVyKFxuXHRcdFx0XHR0aWNrZXRFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIHRpY2tldEVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGVyY2VudFNvbGRCZWxvdyggdGlja2V0RW50aXR5LCA1MCApO1xuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHRjYXNlICdleHBpcmVkLW9ubHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdFx0XHRmdW5jdGlvbiggdGlja2V0RW50aXR5ICkge1xuXHRcdFx0XHRcdHJldHVybiB0aWNrZXRNb2RlbC5pc0V4cGlyZWQoIHRpY2tldEVudGl0eSApO1xuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHRjYXNlICdhcmNoaXZlZC1vbmx5JyA6XG5cdFx0XHRyZXR1cm4gZmlsdGVyKFxuXHRcdFx0XHR0aWNrZXRFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIHRpY2tldEVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGlja2V0TW9kZWwuaXNBcmNoaXZlZCggdGlja2V0RW50aXR5ICk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHR9XG5cdHJldHVybiB0aWNrZXRFbnRpdGllcztcbn07XG5cbi8qKlxuICogZmlsdGVyVGlja2V0RW50aXRpZXNcbiAqIHJlZHVjZXMgdGlja2V0cyBhcnJheSBiYXNlZCBvbiB2YWx1ZSBvZiB0aGUgXCJvcmRlclwiIGZpbHRlclxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHRpY2tldEVudGl0aWVzICAgIG9yaWdpbmFsIHRpY2tldHMgYXJyYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlciAgIHZhbHVlIGZvciB0aGUgXCJvcmRlclwiIGZpbHRlclxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgZmlsdGVyZWQgdGlja2V0cyBhcnJheVxuICovXG5leHBvcnQgY29uc3Qgc29ydFRpY2tldEVudGl0aWVzTGlzdCA9ICggdGlja2V0RW50aXRpZXMsIG9yZGVyID0gJ2Nocm9ub2xvZ2ljYWxseScgKSA9PiB7XG5cdHN3aXRjaCAoIG9yZGVyICkge1xuXHRcdGNhc2UgJ2Nocm9ub2xvZ2ljYWxseScgOlxuXHRcdFx0dGlja2V0RW50aXRpZXMgPSBzb3J0QnkoXG5cdFx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0ZnVuY3Rpb24oIHRpY2tldEVudGl0eSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApID9cblx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnN0YXJ0RGF0ZS50b01pbGxpcygpIDpcblx0XHRcdFx0XHRcdFx0MDtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2J5LW5hbWUnIDpcblx0XHRcdHRpY2tldEVudGl0aWVzID0gc29ydEJ5KCB0aWNrZXRFbnRpdGllcywgWyAnbmFtZScgXSApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnYnktaWQnIDpcblx0XHRcdHRpY2tldEVudGl0aWVzID0gc29ydEJ5KCB0aWNrZXRFbnRpdGllcywgWyAnaWQnIF0gKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2J5LW9yZGVyJyA6XG5cdFx0XHR0aWNrZXRFbnRpdGllcyA9IHNvcnRCeSggdGlja2V0RW50aXRpZXMsIFsgJ29yZGVyJyBdICk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gdGlja2V0RW50aXRpZXM7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSB0aWNrZXRFbnRpdHkgICAgZXZlbnQgdGlja2V0IG9iamVjdFxuICogQHBhcmFtIHtudW1iZXJ9IG1heFF1YW50aXR5XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHNvbGQvcXR5ID49IG1heFF1YW50aXR5XG4gKi9cbmNvbnN0IHBlcmNlbnRTb2xkQXRPckFib3ZlID0gKCB0aWNrZXRFbnRpdHksIG1heFF1YW50aXR5ICkgPT4ge1xuXHRyZXR1cm4gdmFsaWRGaW5pdGVRdWFudGl0eSggdGlja2V0RW50aXR5ICkgJiZcblx0XHQoXG5cdFx0XHRwYXJzZUludCggdGlja2V0RW50aXR5LnNvbGQsIDEwICkgL1xuXHRcdFx0cGFyc2VJbnQoIHRpY2tldEVudGl0eS5xdHksIDEwICkgPj0gKCBtYXhRdWFudGl0eSAvIDEwMCApXG5cdFx0KTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eSAgICBldmVudCB0aWNrZXQgb2JqZWN0XG4gKiBAcGFyYW0ge251bWJlcn0gbWF4UXVhbnRpdHlcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgc29sZC9xdHkgbGVzcyB0aGFuIHRoYW4gcXR5XG4gKi9cbmNvbnN0IHBlcmNlbnRTb2xkQmVsb3cgPSAoIHRpY2tldEVudGl0eSwgbWF4UXVhbnRpdHkgKSA9PiB7XG5cdHJldHVybiAoXG5cdFx0dmFsaWRJbmZpbml0ZVF1YW50aXR5KCB0aWNrZXRFbnRpdHkgKVxuXHQpIHx8IChcblx0XHR2YWxpZEZpbml0ZVF1YW50aXR5KCB0aWNrZXRFbnRpdHkgKSAmJlxuXHRcdChcblx0XHRcdHBhcnNlSW50KCB0aWNrZXRFbnRpdHkuc29sZCwgMTAgKSAvXG5cdFx0XHRwYXJzZUludCggdGlja2V0RW50aXR5LnF0eSwgMTAgKSA8ICggbWF4UXVhbnRpdHkgLyAxMDAgKVxuXHRcdClcblx0KTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eSAgICBldmVudCB0aWNrZXQgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHF0eSBwcm9wZXJ0eSBpcyB2YWxpZCBhbmQgTk9UIGluZmluaXRlXG4gKi9cbmNvbnN0IHZhbGlkRmluaXRlUXVhbnRpdHkgPSAoIHRpY2tldEVudGl0eSApID0+IHtcblx0cmV0dXJuIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksICd0aWNrZXQnICkgJiZcblx0XHR0aWNrZXRFbnRpdHkucXR5ICE9PSAnSU5GJyAmJlxuXHRcdHRpY2tldEVudGl0eS5xdHkgIT09IEluZmluaXR5ICYmXG5cdFx0cGFyc2VJbnQoIHRpY2tldEVudGl0eS5xdHksIDEwICkgPiAwO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gdGlja2V0RW50aXR5ICAgIGV2ZW50IHRpY2tldCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgcXR5IHByb3BlcnR5IGlzIHZhbGlkIGFuZCB1bmxpbWl0ZWRcbiAqL1xuY29uc3QgdmFsaWRJbmZpbml0ZVF1YW50aXR5ID0gKCB0aWNrZXRFbnRpdHkgKSA9PiB7XG5cdHJldHVybiBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApICYmIChcblx0XHR0aWNrZXRFbnRpdHkucXR5ID09PSAnSU5GJyB8fCB0aWNrZXRFbnRpdHkucXR5ID09PSBJbmZpbml0eVxuXHQpO1xufTtcblxuLyoqXG4gKiBzZWFyY2hUaWNrZXRFbnRpdGllc1xuICogcmVkdWNlcyB0aWNrZXRzIGFycmF5IGJhc2VkIG9uIHZhbHVlIG9mIHRoZSBcInNlYXJjaERhdGVOYW1lXCIgZmlsdGVyXG4gKlxuICogQHBhcmFtIHtBcnJheX0gdGlja2V0RW50aXRpZXMgXHRcdG9yaWdpbmFsIHRpY2tldHMgYXJyYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXh0IFx0dmFsdWUgZm9yIHRoZSBcInNlYXJjaFRpY2tldE5hbWVcIiBmaWx0ZXJcbiAqIEByZXR1cm4ge0FycmF5fSBcdFx0XHRcdGZpbHRlcmVkIHRpY2tldHMgYXJyYXlcbiAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaFRpY2tldEVudGl0aWVzID0gKCB0aWNrZXRFbnRpdGllcywgc2VhcmNoVGV4dCA9ICcnICkgPT4ge1xuXHRyZXR1cm4gc2VhcmNoVGV4dCAhPT0gJycgP1xuXHRcdHRpY2tldEVudGl0aWVzLmZpbHRlciggKCB0aWNrZXRFbnRpdHkgKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGlja2V0RW50aXR5Lm5hbWUudG9Mb3dlckNhc2UoKVxuXHRcdFx0XHQuc2VhcmNoKCBzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkgKSAhPT0gLTE7XG5cdFx0fSApIDpcblx0XHR0aWNrZXRFbnRpdGllcztcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgd2l0aFNlbGVjdCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbmNvbnN0IERFRkFVTFRfRU1QVFlfQVJSQVkgPSBbXTtcblxuY29uc3Qgd2l0aEZpbHRlcmVkVGlja2V0RW50aXRpZXMgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0d2l0aFNlbGVjdChcblx0XHQoIHNlbGVjdCApID0+IHtcblx0XHRcdGNvbnN0IHN0b3JlID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9maWx0ZXItc3RhdGUnICk7XG5cdFx0XHRjb25zdCB7IGdldEVudGl0aWVzQnlJZHMgfSA9IHNlbGVjdCggJ2V2ZW50ZXNwcmVzc28vY29yZScgKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZpbHRlcmVkVGlja2V0RW50aXRpZXM6IGdldEVudGl0aWVzQnlJZHMoXG5cdFx0XHRcdFx0J3RpY2tldCcsXG5cdFx0XHRcdFx0c3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdFx0J2V2ZW50LWVkaXRvci10aWNrZXQtbGlzdCcsXG5cdFx0XHRcdFx0XHQnZmlsdGVyZWRUaWNrZXRJZHMnLFxuXHRcdFx0XHRcdFx0REVGQVVMVF9FTVBUWV9BUlJBWVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSxcblx0XHRcdH07XG5cdFx0fVxuXHQpLFxuXHQnd2l0aEZpbHRlcmVkVGlja2V0RW50aXRpZXMnXG4pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoRmlsdGVyZWRUaWNrZXRFbnRpdGllcztcbiIsImltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgaW50ZXJzZWN0aW9uIH0gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgREVGQVVMVF9FTVBUWV9BUlJBWSA9IFtdO1xuXG5jb25zdCB3aXRoVGlja2V0RW50aXRpZXNGb3JGaWx0ZXJlZERhdGVFbnRpdGllcyA9IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KCAoXG5cdFx0c2VsZWN0LFxuXHRcdHtcblx0XHRcdGZpbHRlcmVkRGF0ZUVudGl0aWVzID0gREVGQVVMVF9FTVBUWV9BUlJBWSxcblx0XHRcdHRpY2tldEVudGl0aWVzID0gREVGQVVMVF9FTVBUWV9BUlJBWSxcblx0XHRcdGlzQ2hhaW5lZCA9IHRydWUsXG5cdFx0fVxuXHQpID0+IHtcblx0XHRpZiAoICEgaXNDaGFpbmVkICkge1xuXHRcdFx0cmV0dXJuIHsgdGlja2V0RW50aXRpZXMgfTtcblx0XHR9XG5cdFx0Y29uc3QgeyBnZXRSZWxhdGlvbklkc0ZvckVudGl0eVJlbGF0aW9uIH0gPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0Y29uc3QgZGF0ZUlkcyA9IGZpbHRlcmVkRGF0ZUVudGl0aWVzLm1hcCggKCBkYXRlRW50aXR5ICkgPT4gZGF0ZUVudGl0eS5pZCApO1xuXHRcdC8vIEB0b2RvIHBvdGVudGlhbCBvcHRpbWl6YXRpb24sIG9ubHkgcmVmaWx0ZXIgdGlja2V0IGVudGl0aWVzIGlmXG5cdFx0Ly8gZWl0aGVyIHRpY2tldEVudGl0aWVzIGhhdmUgY2hhbmdlZCBvciBkYXRlSWRzIGhhdmUgY2hhbmdlZC5cblx0XHQvLyByaWdodCBub3cgdGhpcyBpcyBjcmVhdGluZyBhIG5ldyBhcnJheSBvbiBldmVyeSByZW5kZXIgc29cblx0XHQvLyBpdCdzIG5vdCByZWFsbHkgb3B0aW1hbC5cblx0XHRjb25zdCBmaWx0ZXJlZFRpY2tldEVudGl0aWVzID0gdGlja2V0RW50aXRpZXMuZmlsdGVyKCAoIHRpY2tldEVudGl0eSApID0+IHtcblx0XHRcdGNvbnN0IHJlbGF0ZWREYXRlRW50aXRpZXMgPSBnZXRSZWxhdGlvbklkc0ZvckVudGl0eVJlbGF0aW9uKFxuXHRcdFx0XHR0aWNrZXRFbnRpdHksXG5cdFx0XHRcdCdkYXRldGltZSdcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gcmVsYXRlZERhdGVFbnRpdGllcy5sZW5ndGggPiAwICYmXG5cdFx0XHRcdGludGVyc2VjdGlvbiggcmVsYXRlZERhdGVFbnRpdGllcywgZGF0ZUlkcyApLmxlbmd0aCA+IDA7XG5cdFx0fSApO1xuXHRcdHJldHVybiB7IHRpY2tldEVudGl0aWVzOiBmaWx0ZXJlZFRpY2tldEVudGl0aWVzIH07XG5cdH0gKSxcblx0J3dpdGhUaWNrZXRFbnRpdGllc0ZvckZpbHRlcmVkRGF0ZUVudGl0aWVzJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFRpY2tldEVudGl0aWVzRm9yRmlsdGVyZWREYXRlRW50aXRpZXM7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBGcmFnbWVudCwgdXNlTWVtbywgdXNlRWZmZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50LCBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBFbnRpdHlMaXN0RmlsdGVyQmFyIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgd2l0aEZpbHRlcmVkRGF0ZUVudGl0aWVzIH0gZnJvbSAnLi4vLi4vLi4vZGF0ZXMtYW5kLXRpbWVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0ZmlsdGVyVGlja2V0RW50aXRpZXMsXG5cdHNlYXJjaFRpY2tldEVudGl0aWVzLFxuXHRzb3J0VGlja2V0RW50aXRpZXNMaXN0LFxufSBmcm9tICcuL3RpY2tldC1lbnRpdGllcy1saXN0LWZpbHRlci11dGlscyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFRpY2tldEVudGl0eUxpc3RGaWx0ZXJCYXIgfSBmcm9tICcuL3RpY2tldC1lbnRpdGllcy1saXN0LWZpbHRlci1iYXInO1xuaW1wb3J0IHdpdGhUaWNrZXRFbnRpdGllc0ZvckZpbHRlcmVkRGF0ZUVudGl0aWVzXG5cdGZyb20gJy4vd2l0aC10aWNrZXQtZW50aXRpZXMtZm9yLWZpbHRlcmVkLWRhdGUtZW50aXRpZXMnO1xuXG5jb25zdCBERUZBVUxUX0VNUFRZX0FSUkFZID0gW107XG5cbi8qKlxuICogZmlsdGVycyB0aGUgdGlja2V0cyBsaXN0IGJhc2VkIG9uIHRoZSBjdXJyZW50IGZpbHRlciBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHRpY2tldEVudGl0aWVzXG4gKiBAcGFyYW0ge3N0cmluZ30gc2hvd1RpY2tldHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aWNrZXRzU29ydGVkQnlcbiAqIEByZXR1cm4ge0FycmF5fSBmaWx0ZXJlZCBsaXN0IG9mIHRpY2tldHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpbHRlcmVkVGlja2V0RW50aXRpZXNMaXN0ID0gKCB0aWNrZXRFbnRpdGllcywgc2hvd1RpY2tldHMsIHRpY2tldHNTb3J0ZWRCeSApID0+IHtcblx0cmV0dXJuIHNob3dUaWNrZXRzICYmIHRpY2tldHNTb3J0ZWRCeSAmJiAhIGlzRW1wdHkoIHRpY2tldEVudGl0aWVzICkgP1xuXHRcdHNvcnRUaWNrZXRFbnRpdGllc0xpc3QoXG5cdFx0XHRmaWx0ZXJUaWNrZXRFbnRpdGllcyggdGlja2V0RW50aXRpZXMsIHNob3dUaWNrZXRzICksXG5cdFx0XHR0aWNrZXRzU29ydGVkQnlcblx0XHQpIDpcblx0XHRbXTtcbn07XG4vKipcbiAqIHdpdGhUaWNrZXRFbnRpdGllc0xpc3RGaWx0ZXJCYXJcbiAqIEhpZ2hlci1PcmRlci1Db21wb25lbnQgdGhhdCB3cmFwcyBhbiBcIkVudGl0eUxpc3RcIiBjb21wb25lbnRcbiAqIHdpdGggYW4gRW50aXR5TGlzdEZpbHRlckJhciAmIFRpY2tldEVudGl0eUxpc3RGaWx0ZXJCYXIgY29tcG9uZW50XG4gKiB0aGF0IGNvbnRyb2xzIGhvdyBlbnRpdGllcyBhcmUgZGlzcGxheWVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IEVudGl0eUxpc3RcbiAqIEByZXR1cm4ge09iamVjdH0gRW50aXR5TGlzdCB3aXRoIGFkZGVkIFRpY2tldHNMaXN0RmlsdGVyQmFyXG4gKi9cbmNvbnN0IHdpdGhUaWNrZXRFbnRpdGllc0xpc3RGaWx0ZXJCYXIgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0KCBFbnRpdHlMaXN0ICkgPT4gKCB7XG5cdFx0c2hvd1RpY2tldHMsXG5cdFx0c2V0U2hvd1RpY2tldHMsXG5cdFx0dGlja2V0c1NvcnRlZEJ5LFxuXHRcdHNldFRpY2tldHNTb3J0ZWRCeSxcblx0XHRkaXNwbGF5VGlja2V0RGF0ZSxcblx0XHRzZXREaXNwbGF5VGlja2V0RGF0ZSxcblx0XHRpc0NoYWluZWQsXG5cdFx0c2V0SXNDaGFpbmVkLFxuXHRcdHNlYXJjaFRpY2tldE5hbWUsXG5cdFx0c2V0U2VhcmNoVGlja2V0TmFtZSxcblx0XHR0aWNrZXRzUGVyUGFnZSxcblx0XHRzZXRUaWNrZXRzUGVyUGFnZSxcblx0XHR0aWNrZXRzVmlldyxcblx0XHRzZXRUaWNrZXRzTGlzdFZpZXcsXG5cdFx0c2V0VGlja2V0c0dyaWRWaWV3LFxuXHRcdHNldEZpbHRlcmVkVGlja2V0RW50aXRpZXMsXG5cdFx0dGlja2V0RW50aXRpZXMgPSBERUZBVUxUX0VNUFRZX0FSUkFZLFxuXHRcdGZpbHRlcmVkRGF0ZUVudGl0aWVzID0gREVGQVVMVF9FTVBUWV9BUlJBWSxcblx0XHQuLi5vdGhlclByb3BzXG5cdH0gKSA9PiB7XG5cdFx0Y29uc3QgZmlsdGVyZWRFbnRpdGllcyA9IHVzZU1lbW8oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGVudGl0aWVzID0gc2VhcmNoVGlja2V0RW50aXRpZXMoIHRpY2tldEVudGl0aWVzLCBzZWFyY2hUaWNrZXROYW1lICk7XG5cdFx0XHRcdHJldHVybiBnZXRGaWx0ZXJlZFRpY2tldEVudGl0aWVzTGlzdChcblx0XHRcdFx0XHRlbnRpdGllcyxcblx0XHRcdFx0XHRzaG93VGlja2V0cyxcblx0XHRcdFx0XHR0aWNrZXRzU29ydGVkQnlcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRbXG5cdFx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdFx0XHRzZWFyY2hUaWNrZXROYW1lLFxuXHRcdFx0XHRzaG93VGlja2V0cyxcblx0XHRcdFx0dGlja2V0c1NvcnRlZEJ5LFxuXHRcdFx0XVxuXHRcdCk7XG5cdFx0Ly8gd2hlbmV2ZXIgZmlsdGVyZWQgZW50aXRpZXMgY2hhbmdlcyBsZXQncyB1cGRhdGUgdGhlIHRpY2tldCBpZHNcblx0XHQvLyBpbiB0aGUgc3RhdGUuXG5cdFx0dXNlRWZmZWN0KCAoKSA9PiB7XG5cdFx0XHRzZXRGaWx0ZXJlZFRpY2tldEVudGl0aWVzKFxuXHRcdFx0XHRmaWx0ZXJlZEVudGl0aWVzLm1hcCggKCB0aWNrZXRFbnRpdHkgKSA9PiB0aWNrZXRFbnRpdHkuaWQgKVxuXHRcdFx0KTtcblx0XHR9LCBbIGlzQ2hhaW5lZCwgZmlsdGVyZWREYXRlRW50aXRpZXMgXSApO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PEVudGl0eUxpc3RGaWx0ZXJCYXJcblx0XHRcdFx0XHRuYW1lPVwiVGlja2V0RW50aXR5TGlzdEZpbHRlckJhclwiXG5cdFx0XHRcdFx0c2VhcmNoVGV4dD17IHNlYXJjaFRpY2tldE5hbWUgfVxuXHRcdFx0XHRcdHNldFNlYXJjaFRleHQ9eyBzZXRTZWFyY2hUaWNrZXROYW1lIH1cblx0XHRcdFx0XHRwZXJQYWdlPXsgdGlja2V0c1BlclBhZ2UgfVxuXHRcdFx0XHRcdHZpZXc9eyB0aWNrZXRzVmlldyB9XG5cdFx0XHRcdFx0c2V0UGVyUGFnZT17IHNldFRpY2tldHNQZXJQYWdlIH1cblx0XHRcdFx0XHRzZXRMaXN0Vmlldz17IHNldFRpY2tldHNMaXN0VmlldyB9XG5cdFx0XHRcdFx0c2V0R3JpZFZpZXc9eyBzZXRUaWNrZXRzR3JpZFZpZXcgfVxuXHRcdFx0XHRcdGVudGl0eUZpbHRlcnM9e1xuXHRcdFx0XHRcdFx0PFRpY2tldEVudGl0eUxpc3RGaWx0ZXJCYXJcblx0XHRcdFx0XHRcdFx0c2hvd1RpY2tldHM9eyBzaG93VGlja2V0cyB9XG5cdFx0XHRcdFx0XHRcdHNldFNob3dUaWNrZXRzPXsgc2V0U2hvd1RpY2tldHMgfVxuXHRcdFx0XHRcdFx0XHR0aWNrZXRzU29ydGVkQnk9eyB0aWNrZXRzU29ydGVkQnkgfVxuXHRcdFx0XHRcdFx0XHRzZXRUaWNrZXRzU29ydGVkQnk9eyBzZXRUaWNrZXRzU29ydGVkQnkgfVxuXHRcdFx0XHRcdFx0XHRkaXNwbGF5VGlja2V0RGF0ZT17IGRpc3BsYXlUaWNrZXREYXRlIH1cblx0XHRcdFx0XHRcdFx0c2V0RGlzcGxheVRpY2tldERhdGU9eyBzZXREaXNwbGF5VGlja2V0RGF0ZSB9XG5cdFx0XHRcdFx0XHRcdGlzQ2hhaW5lZD17IGlzQ2hhaW5lZCB9XG5cdFx0XHRcdFx0XHRcdHNldElzQ2hhaW5lZD17IHNldElzQ2hhaW5lZCB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0Lz5cblx0XHRcdFx0PEVudGl0eUxpc3Rcblx0XHRcdFx0XHRlbnRpdGllcz17IGZpbHRlcmVkRW50aXRpZXMgfVxuXHRcdFx0XHRcdGVudGl0aWVzUGVyUGFnZT17IHRpY2tldHNQZXJQYWdlIH1cblx0XHRcdFx0XHR2aWV3PXsgdGlja2V0c1ZpZXcgfVxuXHRcdFx0XHRcdG5vUmVzdWx0c1RleHQ9e1xuXHRcdFx0XHRcdFx0X18oXG5cdFx0XHRcdFx0XHRcdCdubyByZXN1bHRzIGZvdW5kICh0cnkgY2hhbmdpbmcgZmlsdGVycyknLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRpc3BsYXlUaWNrZXREYXRlPXsgZGlzcGxheVRpY2tldERhdGUgfVxuXHRcdFx0XHRcdGlzQ2hhaW5lZD17IGlzQ2hhaW5lZCB9XG5cdFx0XHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KTtcblx0fSxcblx0J3dpdGhUaWNrZXRFbnRpdGllc0xpc3RGaWx0ZXJCYXInXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKCBbXG5cdHdpdGhGaWx0ZXJlZERhdGVFbnRpdGllcyxcblx0d2l0aFRpY2tldEVudGl0aWVzRm9yRmlsdGVyZWREYXRlRW50aXRpZXMsXG5cdHdpdGhUaWNrZXRFbnRpdGllc0xpc3RGaWx0ZXJCYXIsXG5dICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQsIGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgd2l0aFNlbGVjdCwgd2l0aERpc3BhdGNoIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcblxuY29uc3QgREVGQVVMVF9FTVBUWV9BUlJBWSA9IFtdO1xuXG4vKipcbiAqIHdpdGhUaWNrZXRFbnRpdGllc0xpc3RGaWx0ZXJTdGF0ZVxuICogSGlnaGVyLU9yZGVyLUNvbXBvbmVudCB0aGF0IHdyYXBzIGEgXCJUaWNrZXRzTGlzdEZpbHRlckJhclwiIGNvbXBvbmVudFxuICogaW4gb3JkZXIgdG8gcHJvdmlkZSBzdGF0ZSBtYW5hZ2VtZW50IGZvciBpdCBhbmQgaXRzIGNoaWxkcmVuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFdyYXBwZWRDb21wb25lbnRcbiAqIEByZXR1cm4ge09iamVjdH0gV3JhcHBlZENvbXBvbmVudCB3aXRoIGFkZGVkIERhdGVzTGlzdEZpbHRlclN0YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHRjb21wb3NlKCBbXG5cdFx0d2l0aFNlbGVjdCggKCBzZWxlY3QsIG93blByb3BzICkgPT4ge1xuXHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRzaG93VGlja2V0cyA9ICdvbi1zYWxlLWFuZC1wZW5kaW5nJyxcblx0XHRcdFx0dGlja2V0c1NvcnRlZEJ5ID0gJ2Nocm9ub2xvZ2ljYWxseScsXG5cdFx0XHRcdGRpc3BsYXlUaWNrZXREYXRlID0gJ3N0YXJ0Jyxcblx0XHRcdFx0aXNDaGFpbmVkID0gdHJ1ZSxcblx0XHRcdFx0c2VhcmNoVGlja2V0TmFtZSA9ICcnLFxuXHRcdFx0XHR0aWNrZXRzUGVyUGFnZSA9IDYsXG5cdFx0XHRcdHRpY2tldHNWaWV3ID0gJ2dyaWQnLFxuXHRcdFx0fSA9IG93blByb3BzO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdGNvbnN0IHsgZ2V0RW50aXRpZXNCeUlkcyB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2hvd1RpY2tldHM6IHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLXRpY2tldC1saXN0Jyxcblx0XHRcdFx0XHQnc2hvd1RpY2tldHMnLFxuXHRcdFx0XHRcdHNob3dUaWNrZXRzXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRpY2tldHNTb3J0ZWRCeTogc3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCd0aWNrZXRzU29ydGVkQnknLFxuXHRcdFx0XHRcdHRpY2tldHNTb3J0ZWRCeVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkaXNwbGF5VGlja2V0RGF0ZTogc3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCdkaXNwbGF5VGlja2V0RGF0ZScsXG5cdFx0XHRcdFx0ZGlzcGxheVRpY2tldERhdGVcblx0XHRcdFx0KSxcblx0XHRcdFx0aXNDaGFpbmVkOiBzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2V2ZW50LWVkaXRvci10aWNrZXQtbGlzdCcsXG5cdFx0XHRcdFx0J2lzQ2hhaW5lZCcsXG5cdFx0XHRcdFx0aXNDaGFpbmVkXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNlYXJjaFRpY2tldE5hbWU6IHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdzZWFyY2hUaWNrZXROYW1lJyxcblx0XHRcdFx0XHRzZWFyY2hUaWNrZXROYW1lXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRpY2tldHNQZXJQYWdlOiBwYXJzZUludChcblx0XHRcdFx0XHRzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLXRpY2tldC1saXN0Jyxcblx0XHRcdFx0XHRcdCd0aWNrZXRzUGVyUGFnZScsXG5cdFx0XHRcdFx0XHR0aWNrZXRzUGVyUGFnZVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0MTBcblx0XHRcdFx0KSxcblx0XHRcdFx0dGlja2V0c1ZpZXc6IHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLXRpY2tldC1saXN0Jyxcblx0XHRcdFx0XHQndGlja2V0c1ZpZXcnLFxuXHRcdFx0XHRcdHRpY2tldHNWaWV3XG5cdFx0XHRcdCksXG5cdFx0XHRcdGZpbHRlcmVkVGlja2V0RW50aXRpZXM6IGdldEVudGl0aWVzQnlJZHMoXG5cdFx0XHRcdFx0J3RpY2tldCcsXG5cdFx0XHRcdFx0c3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdFx0J2V2ZW50LWVkaXRvci10aWNrZXQtbGlzdCcsXG5cdFx0XHRcdFx0XHQnZmlsdGVyZWRUaWNrZXRJZHMnLFxuXHRcdFx0XHRcdFx0REVGQVVMVF9FTVBUWV9BUlJBWVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSxcblx0XHRcdH07XG5cdFx0fSApLFxuXHRcdHdpdGhEaXNwYXRjaCggKCBkaXNwYXRjaCApID0+IHtcblx0XHRcdGNvbnN0IHN0b3JlID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNldFNob3dUaWNrZXRzOiAoIHNob3dUaWNrZXRzICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCdzaG93VGlja2V0cycsXG5cdFx0XHRcdFx0c2hvd1RpY2tldHNcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0VGlja2V0c1NvcnRlZEJ5OiAoIHRpY2tldHNTb3J0ZWRCeSApID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLXRpY2tldC1saXN0Jyxcblx0XHRcdFx0XHQndGlja2V0c1NvcnRlZEJ5Jyxcblx0XHRcdFx0XHR0aWNrZXRzU29ydGVkQnlcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0RGlzcGxheVRpY2tldERhdGU6ICggZGlzcGxheVRpY2tldERhdGUgKSA9PiBzdG9yZVxuXHRcdFx0XHRcdC5zZXRGaWx0ZXIoXG5cdFx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLXRpY2tldC1saXN0Jyxcblx0XHRcdFx0XHRcdCdkaXNwbGF5VGlja2V0RGF0ZScsXG5cdFx0XHRcdFx0XHRkaXNwbGF5VGlja2V0RGF0ZVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdHNldElzQ2hhaW5lZDogKCBpc0NoYWluZWQgKSA9PiBzdG9yZS5zZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2V2ZW50LWVkaXRvci10aWNrZXQtbGlzdCcsXG5cdFx0XHRcdFx0J2lzQ2hhaW5lZCcsXG5cdFx0XHRcdFx0ISEgaXNDaGFpbmVkXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldFNlYXJjaFRpY2tldE5hbWU6ICggc2VhcmNoVGlja2V0TmFtZSApID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdzZWFyY2hUaWNrZXROYW1lJyxcblx0XHRcdFx0XHRzZWFyY2hUaWNrZXROYW1lXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldFRpY2tldHNQZXJQYWdlOiAoIHRpY2tldHNQZXJQYWdlICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCd0aWNrZXRzUGVyUGFnZScsXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRpY2tldHNQZXJQYWdlLCAxMCApXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldFRpY2tldHNMaXN0VmlldzogKCkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCd0aWNrZXRzVmlldycsXG5cdFx0XHRcdFx0J2xpc3QnXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldFRpY2tldHNHcmlkVmlldzogKCkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCd0aWNrZXRzVmlldycsXG5cdFx0XHRcdFx0J2dyaWQnXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldEZpbHRlcmVkVGlja2V0RW50aXRpZXM6ICggdGlja2V0RW50aXR5SWRzICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCdmaWx0ZXJlZFRpY2tldElkcycsXG5cdFx0XHRcdFx0dGlja2V0RW50aXR5SWRzXG5cdFx0XHRcdCksXG5cdFx0XHR9O1xuXHRcdH0gKSxcblx0XSApLFxuXHQnd2l0aFRpY2tldEVudGl0aWVzTGlzdEZpbHRlclN0YXRlJ1xuKTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS10aWNrZXRzLWxpc3QtZ3JpZC12aWV3XCI6XCJlZS10aWNrZXRzLWxpc3QtZ3JpZC12aWV3XCIsXCJlZS1lZGl0b3ItdGlja2V0LW1haW5cIjpcImVlLWVkaXRvci10aWNrZXQtbWFpblwiLFwiZWUtZWRpdG9yLXRpY2tldC1kZXRhaWxzLXdyYXBwZXItZGl2XCI6XCJlZS1lZGl0b3ItdGlja2V0LWRldGFpbHMtd3JhcHBlci1kaXZcIixcImVlLWVkaXRvci10aWNrZXQtbmFtZS1oZWFkaW5nXCI6XCJlZS1lZGl0b3ItdGlja2V0LW5hbWUtaGVhZGluZ1wiLFwiZWUtaW5saW5lLWVkaXQtdGV4dFwiOlwiZWUtaW5saW5lLWVkaXQtdGV4dFwiLFwiZWUtbG9uZy10aXRsZVwiOlwiZWUtbG9uZy10aXRsZVwiLFwiZWUtZWRpdG9yLXRpY2tldC1kZXNjLWRpdlwiOlwiZWUtZWRpdG9yLXRpY2tldC1kZXNjLWRpdlwiLFwiZWUtdGlja2V0LWRlc2MtZXhjZXJwdFwiOlwiZWUtdGlja2V0LWRlc2MtZXhjZXJwdFwiLFwiZWUtdGlja2V0LXByaWNlXCI6XCJlZS10aWNrZXQtcHJpY2VcIixcImVlLWVkaXRvci10aWNrZXQtZGV0YWlscy1zb2xkLXJzcnZkLXF0eS1kaXZcIjpcImVlLWVkaXRvci10aWNrZXQtZGV0YWlscy1zb2xkLXJzcnZkLXF0eS1kaXZcIixcInRpY2tldC1yZWdpc3RyYW50cy1sYWJlbFwiOlwidGlja2V0LXJlZ2lzdHJhbnRzLWxhYmVsXCIsXCJlZS1lZGl0b3ItdGlja2V0LWFjdGlvbnMtbWVudVwiOlwiZWUtZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnVcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBFZGl0b3JUaWNrZXRFbnRpdHlHcmlkSXRlbSBmcm9tICcuL2VkaXRvci10aWNrZXQtZW50aXR5LWdyaWQtaXRlbSc7XG5pbXBvcnQgJy4vZWRpdG9yLXRpY2tldC1lbnRpdGllcy1ncmlkLXZpZXcuY3NzJztcblxuLyoqXG4gKiBFZGl0b3JUaWNrZXRFbnRpdGllc0dyaWRWaWV3XG4gKiBEaXNwbGF5cyB0aWNrZXRzIGFzIG1vYmlsZS9maW5nZXIgZnJpZW5kbHkgYmxvY2tzXG4gKiB3aXRoIHRoZSBtb3N0IHJlbGV2YW50IGluZm8gdmlzaWJsZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtBcnJheX0gZW50aXRpZXMgICAgYXJyYXkgb2YgSlNPTiBvYmplY3RzIGRlZmluaW5nIHRoZSBUaWNrZXRzXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge21peGVkfSBvdGhlclByb3BzXG4gKiBAcmV0dXJuIHtDb21wb25lbnR9ICAgICAgICAgIGxpc3Qgb2YgcmVuZGVyZWQgVGlja2V0c1xuICovXG5jb25zdCBFZGl0b3JUaWNrZXRFbnRpdGllc0dyaWRWaWV3ID0gKCB7XG5cdGVudGl0aWVzLFxuXHRodG1sQ2xhc3MsXG5cdC4uLm90aGVyUHJvcHNcbn0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyA/XG5cdFx0YCR7IGh0bWxDbGFzcyB9IGVlLXRpY2tldHMtbGlzdC1ncmlkLXZpZXdgIDpcblx0XHQnZWUtdGlja2V0cy1saXN0LWxpc3Qtdmlldyc7XG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfT5cblx0XHRcdHtcblx0XHRcdFx0ZW50aXRpZXMubWFwKFxuXHRcdFx0XHRcdGZ1bmN0aW9uKCB0aWNrZXRFbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaXNNb2RlbEVudGl0eU9mTW9kZWwoIHRpY2tldEVudGl0eSwgJ3RpY2tldCcgKSA/IChcblx0XHRcdFx0XHRcdFx0PEVkaXRvclRpY2tldEVudGl0eUdyaWRJdGVtXG5cdFx0XHRcdFx0XHRcdFx0a2V5PXsgdGlja2V0RW50aXR5LmlkIH1cblx0XHRcdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHk9eyB0aWNrZXRFbnRpdHkgfVxuXHRcdFx0XHRcdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpIDogbnVsbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvclRpY2tldEVudGl0aWVzR3JpZFZpZXc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgRW50aXR5RGV0YWlsc1BhbmVsLCBJbmxpbmVFZGl0SW5wdXQgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyB0aWNrZXRNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBNb25leSwgU2l0ZUN1cnJlbmN5IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdHdpdGhQcmljZVR5cGVFbnRpdGllcyxcblx0d2l0aFRpY2tldFByaWNlRW50aXRpZXMsXG59IGZyb20gJy4uLy4uLy4uL2hvY3MnO1xuaW1wb3J0IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvcnMgZnJvbSAnLi4vcHJpY2UtY2FsY3VsYXRvci91c2UtdGlja2V0LXByaWNlLWNhbGN1bGF0b3JzJztcblxuY29uc3QgeyBNT0RFTF9OQU1FOiBUSUNLRVQgfSA9IHRpY2tldE1vZGVsO1xuXG4vKipcbiAqIEVkaXRvclRpY2tldERldGFpbHNcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFRpY2tldCAgICBKU09OIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgVGlja2V0XG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgIHRpY2tldCBkZXRhaWxzXG4gKi9cbmNvbnN0IEVkaXRvclRpY2tldERldGFpbHMgPSAoIHtcblx0dGlja2V0RW50aXR5LFxuXHRzaG93RGVzYyA9ICdleGNlcnB0Jyxcblx0c2hvd1ByaWNlID0gdHJ1ZSxcblx0cHJpY2VUeXBlRW50aXRpZXMsXG5cdHByaWNlRW50aXRpZXMsXG5cdHJlZnJlc2hlZCxcbn0gKSA9PiB7XG5cdC8vIEB0b2RvIEkgdHJpZWQgbWFraW5nIHByaWNlcyBhIGRlcGVuZGVuY3kgb24gdGhlIHVwZGF0ZVRpY2tldFByaWNlIGhvb2sgYnV0IGZvclxuXHQvLyBzb21lIHJlYXNvbiBwcmljZXMgbmV2ZXIgZ2V0cyB1cGRhdGVkLCBzbyBmb3Igbm93IHVzaW5nIGEgcmVmIHdpbGwgY2F0Y2hcblx0Ly8gdGhlIGNoYW5nZSBpbiB0aGUgcHJpY2VzLiBGb3IgZnV0dXJlIHJlZmFjdG9yLCBtaWdodCB3YW50IHRvIHRyeSBhbmQgbW92ZVxuXHQvLyBwcmljZXMgc3RhdGUgdXAuXG5cdGNvbnN0IGN1cnJlbnRQcmljZXMgPSB1c2VSZWYoIHByaWNlRW50aXRpZXMgKTtcblx0dXNlRWZmZWN0KCAoKSA9PiB7XG5cdFx0Y3VycmVudFByaWNlcy5jdXJyZW50ID0gcHJpY2VFbnRpdGllcztcblx0fSwgWyBwcmljZUVudGl0aWVzIF0gKTtcblx0Y29uc3QgeyBjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2UgfSA9IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvcnMoIHByaWNlVHlwZUVudGl0aWVzICk7XG5cdGNvbnN0IHRpY2tldE5hbWUgPSB1c2VNZW1vKFxuXHRcdCgpID0+IHtcblx0XHRcdGNvbnN0IGh0bWxDbGFzcyA9IHRpY2tldEVudGl0eS5uYW1lICYmIHRpY2tldEVudGl0eS5uYW1lLmxlbmd0aCA+IDQwID9cblx0XHRcdFx0J2VlLWVkaXRvci10aWNrZXQtbmFtZS1oZWFkaW5nIGVlLWxvbmctdGl0bGUnIDpcblx0XHRcdFx0J2VlLWVkaXRvci10aWNrZXQtbmFtZS1oZWFkaW5nJztcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxoMSBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfT5cblx0XHRcdFx0XHQ8SW5saW5lRWRpdElucHV0XG5cdFx0XHRcdFx0XHRodG1sSWQ9eyBgZWRpdG9yLXRpY2tldC1uYW1lLSR7IHRpY2tldEVudGl0eS5pZCB9YCB9XG5cdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdFx0XHR2YWx1ZT17IHRpY2tldEVudGl0eS5uYW1lIH1cblx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuYW1lICkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkubmFtZSA9IG5hbWU7XG5cdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdUaWNrZXQgTmFtZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9oMT5cblx0XHRcdCk7XG5cdFx0fSxcblx0XHRbIHRpY2tldEVudGl0eSwgcmVmcmVzaGVkIF1cblx0KTtcblxuXHRjb25zdCB0aWNrZXREZXNjcmlwdGlvbiA9IHVzZU1lbW8oICgpID0+IHtcblx0XHRjb25zdCBodG1sQ2xhc3MgPSBzaG93RGVzYyA9PT0gJ2V4Y2VycHQnID9cblx0XHRcdCdlZS1lZGl0b3ItdGlja2V0LWRlc2MtZGl2IGVlLXRpY2tldC1kZXNjLWV4Y2VycHQnIDpcblx0XHRcdCdlZS1lZGl0b3ItdGlja2V0LWRlc2MtZGl2Jztcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfT5cblx0XHRcdFx0PElubGluZUVkaXRJbnB1dFxuXHRcdFx0XHRcdGh0bWxJZD17IGBlZGl0b3ItdGlja2V0LWRlc2MtJHsgdGlja2V0RW50aXR5LmlkIH1gIH1cblx0XHRcdFx0XHR0eXBlPVwidGV4dGFyZWFcIlxuXHRcdFx0XHRcdHZhbHVlPXsgdGlja2V0RW50aXR5LmRlc2NyaXB0aW9uIH1cblx0XHRcdFx0XHRvbkNoYW5nZT17ICggZGVzY3JpcHRpb24gKSA9PiB7XG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcblx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRsYWJlbD17IF9fKCAnVGlja2V0IERlc2NyaXB0aW9uJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH0sIFsgdGlja2V0RW50aXR5LCBzaG93RGVzYywgcmVmcmVzaGVkIF0gKTtcblxuXHRjb25zdCB1cGRhdGVUaWNrZXRQcmljZSA9IHVzZUNhbGxiYWNrKFxuXHRcdCggcHJpY2UgKSA9PiB7XG5cdFx0XHR0aWNrZXRFbnRpdHkucHJpY2UgPSBuZXcgTW9uZXkoIHByaWNlLCBTaXRlQ3VycmVuY3kgKTtcblx0XHRcdGNhbGN1bGF0ZVRpY2tldEJhc2VQcmljZSggcHJpY2UsIGN1cnJlbnRQcmljZXMuY3VycmVudCwgdHJ1ZSApO1xuXHRcdH0sXG5cdFx0WyB0aWNrZXRFbnRpdHksIHJlZnJlc2hlZCBdXG5cdCk7XG5cblx0LyoqXG5cdCAqIHRpY2tldFByaWNlXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gdGlja2V0IEpTT04gb2JqZWN0IGRlZmluaW5nIHRoZSB0aWNrZXRcblx0ICogQHBhcmFtIHtib29sZWFufSBzaG93UHJpY2Vcblx0ICogQHJldHVybiB7c3RyaW5nfSAgICB0aWNrZXQgcHJpY2Vcblx0ICovXG5cdGNvbnN0IHRpY2tldFByaWNlID0gdXNlTWVtbyhcblx0XHQoKSA9PiB7XG5cdFx0XHRyZXR1cm4gc2hvd1ByaWNlID9cblx0XHRcdFx0KFxuXHRcdFx0XHRcdDxoMiBjbGFzc05hbWU9XCJlZS10aWNrZXQtcHJpY2VcIj5cblx0XHRcdFx0XHRcdDxJbmxpbmVFZGl0SW5wdXRcblx0XHRcdFx0XHRcdFx0aHRtbElkPXsgYGVkaXRvci10aWNrZXQtcHJpY2UtJHsgdGlja2V0RW50aXR5LmlkIH1gIH1cblx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IHRpY2tldEVudGl0eS5wcmljZS5hbW91bnQudG9OdW1iZXIoKSB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBwcmljZSApID0+IHtcblx0XHRcdFx0XHRcdFx0XHR1cGRhdGVUaWNrZXRQcmljZSggcHJpY2UgKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdUaWNrZXQgUHJpY2UnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZUZvcm1hdHRlcj17IHRpY2tldEVudGl0eS5wcmljZS5mb3JtYXR0ZXIuZm9ybWF0TW9uZXkgfVxuXHRcdFx0XHRcdFx0XHRmb3JtYXR0ZXJTZXR0aW5ncz17IHRpY2tldEVudGl0eS5wcmljZS5mb3JtYXR0ZXIuc2V0dGluZ3MgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2gyPlxuXHRcdFx0XHQpIDpcblx0XHRcdFx0Jyc7XG5cdFx0fSxcblx0XHRbIHRpY2tldEVudGl0eSwgc2hvd1ByaWNlLCB1cGRhdGVUaWNrZXRQcmljZSBdXG5cdCk7XG5cblx0LyoqXG5cdCAqIHRpY2tldFNvbGRSZXNlcnZlZENhcGFjaXR5XG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gdGlja2V0RW50aXR5ICAgIEpTT04gb2JqZWN0IGRlZmluaW5nIHRoZSB0aWNrZXRcblx0ICogQHJldHVybiB7c3RyaW5nfSAgICB0aWNrZXQgZGV0YWlsc1xuXHQgKi9cblx0Y29uc3QgdGlja2V0U29sZFJlc2VydmVkQ2FwYWNpdHkgPSB1c2VNZW1vKFxuXHRcdCgpID0+IHtcblx0XHRcdGNvbnN0IGRldGFpbHMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZDogJ3RpY2tldC1zb2xkJyxcblx0XHRcdFx0XHRsYWJlbDogX18oICdzb2xkJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdHZhbHVlOiB0aWNrZXRFbnRpdHkuc29sZCxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGlkOiAndGlja2V0LXJlc2VydmVkJyxcblx0XHRcdFx0XHRsYWJlbDogX18oICdyZXNlcnZlZCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR2YWx1ZTogdGlja2V0RW50aXR5LnJlc2VydmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWQ6ICd0aWNrZXQtcXR5Jyxcblx0XHRcdFx0XHRsYWJlbDogX18oICdxdWFudGl0eScsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR2YWx1ZTogdGlja2V0RW50aXR5LnF0eSB8fCBJbmZpbml0eSxcblx0XHRcdFx0XHRlZGl0YWJsZToge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3RleHQnLFxuXHRcdFx0XHRcdFx0dmFsdWVUeXBlOiAnbnVtYmVyJyxcblx0XHRcdFx0XHRcdG9uQ2hhbmdlOiAoIHF0eSApID0+IHtcblx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnF0eSA9IHBhcnNlSW50KCBxdHksIDEwICk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZDogJ3RpY2tldC1yZWdpc3RyYW50cycsXG5cdFx0XHRcdFx0bGFiZWw6IF9fKCAncmVnaXN0cmFudHMnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdFx0dmFsdWU6IHRpY2tldEVudGl0eS5zb2xkLFxuXHRcdFx0XHR9LFxuXHRcdFx0XTtcblx0XHRcdHJldHVybiA8RW50aXR5RGV0YWlsc1BhbmVsXG5cdFx0XHRcdGRldGFpbHM9eyBkZXRhaWxzIH1cblx0XHRcdFx0aHRtbENsYXNzPVwiZWUtZWRpdG9yLXRpY2tldC1kZXRhaWxzLXNvbGQtcnNydmQtcXR5LWRpdlwiXG5cdFx0XHQvPjtcblx0XHR9LFxuXHRcdFsgdGlja2V0RW50aXR5LCByZWZyZXNoZWQgXVxuXHQpO1xuXG5cdHJldHVybiBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCBUSUNLRVQgKSA/IChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17ICdlZS1lZGl0b3ItdGlja2V0LWRldGFpbHMtd3JhcHBlci1kaXYnIH0+XG5cdFx0XHR7IHRpY2tldE5hbWUgfVxuXHRcdFx0eyB0aWNrZXRQcmljZSB9XG5cdFx0XHR7IHRpY2tldERlc2NyaXB0aW9uIH1cblx0XHRcdHsgdGlja2V0U29sZFJlc2VydmVkQ2FwYWNpdHkgfVxuXHRcdDwvZGl2PlxuXHQpIDogbnVsbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0d2l0aFByaWNlVHlwZUVudGl0aWVzLFxuXHR3aXRoVGlja2V0UHJpY2VFbnRpdGllcyxcbl0gKSggRWRpdG9yVGlja2V0RGV0YWlscyApO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQsIHVzZVJlZHVjZXIgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHtcblx0QmlnZ2llQ2FsZW5kYXJEYXRlLFxuXHRDYWxlbmRhckRhdGVSYW5nZSxcblx0d2l0aEVudGl0eVBhcGVyRnJhbWUsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgdGlja2V0TW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgRWRpdG9yVGlja2V0RW50aXR5RGV0YWlscyBmcm9tICcuL2VkaXRvci10aWNrZXQtZW50aXR5LWRldGFpbHMnO1xuaW1wb3J0IEVkaXRvclRpY2tldEFjdGlvbnNNZW51XG5cdGZyb20gJy4uL2FjdGlvbnMtbWVudS9lZGl0b3ItdGlja2V0LWFjdGlvbnMtbWVudSc7XG5cbmNvbnN0IHtcblx0Z2V0QmFja2dyb3VuZENvbG9yQ2xhc3MsXG5cdGdldFRpY2tldFN0YXR1c1RleHRMYWJlbCxcblx0c3RhdHVzLFxuXHRUSUNLRVRfU1RBVFVTX0lELFxufSA9IHRpY2tldE1vZGVsO1xuXG4vKipcbiAqIEVkaXRvclRpY2tldEVudGl0eUdyaWRJdGVtXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdGlja2V0ICAgIEpTT04gb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBUaWNrZXRcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgIFRoZSB0aWNrZXQgcmVuZGVyZWQgYXMgYSBibG9ja1xuICovXG5jbGFzcyBFZGl0b3JUaWNrZXRFbnRpdHlHcmlkSXRlbSBleHRlbmRzIENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2hvd0RhdGVcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCB0aWNrZXRcblx0ICovXG5cdGRpc3BsYXlUaWNrZXQgPSAoIHRpY2tldEVudGl0eSwgc2hvd0RhdGUgKSA9PiB7XG5cdFx0bGV0IHNpZGViYXJDb2xvckNsYXNzID0gJ2VlLWVkaXRvci10aWNrZXQtY2FsZW5kYXItc2lkZWJhciAnO1xuXHRcdHNpZGViYXJDb2xvckNsYXNzICs9IGdldEJhY2tncm91bmRDb2xvckNsYXNzKCB0aWNrZXRFbnRpdHkgKTtcblx0XHRjb25zdCB0aWNrZXRTdGF0dXNJRCA9IHN0YXR1cyggdGlja2V0RW50aXR5ICk7XG5cdFx0bGV0IGxhYmVsID0gJyc7XG5cdFx0aWYgKCBzaG93RGF0ZSA9PT0gJ3N0YXJ0JyApIHtcblx0XHRcdGxhYmVsID0gX18oICdTYWxlIFN0YXJ0ZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRpZiAoIHRpY2tldFN0YXR1c0lEID09PSBUSUNLRVRfU1RBVFVTX0lELkVYUElSRUQgKSB7XG5cdFx0XHRcdGxhYmVsID0gX18oICdTYWxlIEVuZGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0fSBlbHNlIGlmICggdGlja2V0U3RhdHVzSUQgPT09IFRJQ0tFVF9TVEFUVVNfSUQuUEVORElORyApIHtcblx0XHRcdFx0bGFiZWwgPSBfXyggJ0dvZXMgT24gU2FsZScsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKCBzaG93RGF0ZSA9PT0gJ2VuZCcgKSB7XG5cdFx0XHRsYWJlbCA9IF9fKCAnU2FsZSBFbmRzJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0aWYgKCB0aWNrZXRTdGF0dXNJRCA9PT0gVElDS0VUX1NUQVRVU19JRC5FWFBJUkVEICkge1xuXHRcdFx0XHRsYWJlbCA9IF9fKCAnU2FsZSBFbmRlZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdGlja2V0U3RhdHVzID0gKFxuXHRcdFx0PHNwYW4ga2V5PXsgMSB9IGNsYXNzTmFtZT17ICdlZS1zdGF0dXMtdGFnJyB9PlxuXHRcdFx0XHR7IGdldFRpY2tldFN0YXR1c1RleHRMYWJlbCggdGlja2V0RW50aXR5ICkgfVxuXHRcdFx0PC9zcGFuPlxuXHRcdCk7XG5cblx0XHRzd2l0Y2ggKCBzaG93RGF0ZSApIHtcblx0XHRcdGNhc2UgJ2VuZCcgOlxuXHRcdFx0XHRjb25zdCBlbmQgPSB0aWNrZXRFbnRpdHkuZW5kRGF0ZS50b0Zvcm1hdCggJ2g6bW0gYScgKTtcblx0XHRcdFx0cmV0dXJuIDxCaWdnaWVDYWxlbmRhckRhdGVcblx0XHRcdFx0XHRkYXRlPXsgdGlja2V0RW50aXR5LmVuZERhdGUgfVxuXHRcdFx0XHRcdGh0bWxDbGFzcz17IHNpZGViYXJDb2xvckNsYXNzIH1cblx0XHRcdFx0XHRoZWFkZXJUZXh0PXsgbGFiZWwgfVxuXHRcdFx0XHRcdGZvb3RlclRleHQ9eyBbIGVuZCwgdGlja2V0U3RhdHVzIF0gfVxuXHRcdFx0XHRcdHBvc2l0aW9uPVwicmlnaHRcIlxuXHRcdFx0XHQvPjtcblx0XHRcdGNhc2UgJ2JvdGgnIDpcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8Q2FsZW5kYXJEYXRlUmFuZ2Vcblx0XHRcdFx0XHRcdHN0YXJ0RGF0ZT17IHRpY2tldEVudGl0eS5zdGFydERhdGUgfVxuXHRcdFx0XHRcdFx0ZW5kRGF0ZT17IHRpY2tldEVudGl0eS5lbmREYXRlIH1cblx0XHRcdFx0XHRcdGh0bWxDbGFzcz17IHNpZGViYXJDb2xvckNsYXNzIH1cblx0XHRcdFx0XHRcdGhlYWRlclRleHQ9eyBfXyggJ1NhbGUgRGF0ZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHRmb290ZXJUZXh0PXsgdGlja2V0U3RhdHVzIH1cblx0XHRcdFx0XHRcdHBvc2l0aW9uPVwicmlnaHRcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdzdGFydCcgOlxuXHRcdFx0ZGVmYXVsdCA6XG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gdGlja2V0RW50aXR5LnN0YXJ0RGF0ZS50b0Zvcm1hdCggJ2g6bW0gYScgKTtcblx0XHRcdFx0cmV0dXJuIDxCaWdnaWVDYWxlbmRhckRhdGVcblx0XHRcdFx0XHRkYXRlPXsgdGlja2V0RW50aXR5LnN0YXJ0RGF0ZSB9XG5cdFx0XHRcdFx0aHRtbENsYXNzPXsgc2lkZWJhckNvbG9yQ2xhc3MgfVxuXHRcdFx0XHRcdGhlYWRlclRleHQ9eyBsYWJlbCB9XG5cdFx0XHRcdFx0Zm9vdGVyVGV4dD17IFsgc3RhcnQsIHRpY2tldFN0YXR1cyBdIH1cblx0XHRcdFx0XHRwb3NpdGlvbj1cInJpZ2h0XCJcblx0XHRcdFx0Lz47XG5cdFx0fVxuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHR0aWNrZXRFbnRpdHksXG5cdFx0XHRkaXNwbGF5VGlja2V0RGF0ZSA9ICdzdGFydCcsXG5cdFx0XHRkb1JlZnJlc2gsXG5cdFx0XHRyZWZyZXNoZWQsXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksICd0aWNrZXQnICkgKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgZGF0ZVN0eWxlQ2xhc3MgPSBkaXNwbGF5VGlja2V0RGF0ZSA9PT0gJ2JvdGgnID9cblx0XHRcdCdlZS1lZGl0b3ItZGF0ZS1yYW5nZScgOlxuXHRcdFx0J2VlLWVkaXRvci1kYXRlLXNpbmdsZSc7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyBgZWUtZWRpdG9yLXRpY2tldC1tYWluICR7IGRhdGVTdHlsZUNsYXNzIH1gIH0+XG5cdFx0XHRcdFx0PEVkaXRvclRpY2tldEVudGl0eURldGFpbHNcblx0XHRcdFx0XHRcdHRpY2tldEVudGl0eT17IHRpY2tldEVudGl0eSB9XG5cdFx0XHRcdFx0XHRyZWZyZXNoZWQ9eyByZWZyZXNoZWQgfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0eyB0aGlzLmRpc3BsYXlUaWNrZXQoIHRpY2tldEVudGl0eSwgZGlzcGxheVRpY2tldERhdGUgKSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8RWRpdG9yVGlja2V0QWN0aW9uc01lbnVcblx0XHRcdFx0XHR0aWNrZXRFbnRpdHk9eyB0aWNrZXRFbnRpdHkgfVxuXHRcdFx0XHRcdGRvUmVmcmVzaD17IGRvUmVmcmVzaCB9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZSggW1xuXHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiAoIHByb3BzICkgPT4ge1xuXHRcdGNvbnN0IFsgcmVmcmVzaGVkLCBkb1JlZnJlc2ggXSA9IHVzZVJlZHVjZXIoICggcyApID0+IHMgKyAxLCAwICk7XG5cdFx0cmV0dXJuIDxXcmFwcGVkQ29tcG9uZW50XG5cdFx0XHR7IC4uLnByb3BzIH1cblx0XHRcdGRvUmVmcmVzaD17IGRvUmVmcmVzaCB9XG5cdFx0XHRyZWZyZXNoZWQ9eyByZWZyZXNoZWQgfVxuXHRcdC8+O1xuXHR9LFxuXHR3aXRoRW50aXR5UGFwZXJGcmFtZSxcbl0gKSggRWRpdG9yVGlja2V0RW50aXR5R3JpZEl0ZW0gKTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRWRpdG9yVGlja2V0RW50aXR5RGV0YWlscyB9IGZyb20gJy4vZWRpdG9yLXRpY2tldC1lbnRpdHktZGV0YWlscyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVkaXRvclRpY2tldEVudGl0eUdyaWRJdGVtIH0gZnJvbSAnLi9lZGl0b3ItdGlja2V0LWVudGl0eS1ncmlkLWl0ZW0nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFZGl0b3JUaWNrZXRFbnRpdGllc0dyaWRWaWV3IH0gZnJvbSAnLi9lZGl0b3ItdGlja2V0LWVudGl0aWVzLWdyaWQtdmlldyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL2FjdGlvbi1oYW5kbGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbnMtbWVudSc7XG5leHBvcnQgKiBmcm9tICcuL2VkaXQtZm9ybSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbHRlci1iYXInO1xuZXhwb3J0ICogZnJvbSAnLi9ncmlkLXZpZXcnO1xuZXhwb3J0ICogZnJvbSAnLi9saXN0LXZpZXcnO1xuZXhwb3J0IHtcblx0ZGVmYXVsdCBhcyBFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3QsXG5cdEVkaXRvclRpY2tldEVudGl0aWVzT25seUxpc3QsXG59IGZyb20gJy4vZWRpdG9yLXRpY2tldC1lbnRpdGllcy1saXN0JztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS10aWNrZXRzLWxpc3QtbGlzdC12aWV3XCI6XCJlZS10aWNrZXRzLWxpc3QtbGlzdC12aWV3XCIsXCJlZS1lZGl0b3ItdGlja2V0LWxpc3Qtdmlldy1kaXZcIjpcImVlLWVkaXRvci10aWNrZXQtbGlzdC12aWV3LWRpdlwiLFwiZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zXCI6XCJlZS1lZGl0b3ItdGlja2V0LWxpc3QtaXRlbXNcIixcImVlLXRpY2tldC1saXN0LWl0ZW1cIjpcImVlLXRpY2tldC1saXN0LWl0ZW1cIixcImVlLWluZmluaXR5LXNpZ25cIjpcImVlLWluZmluaXR5LXNpZ25cIixcImRhc2hpY29uc1wiOlwiZGFzaGljb25zXCIsXCJlZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVsXCI6XCJlZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVsXCIsXCJlZS10aWNrZXQtbGlzdC1pdGVtLXZhbHVlXCI6XCJlZS10aWNrZXQtbGlzdC1pdGVtLXZhbHVlXCIsXCJlZS1lZGl0b3ItdGlja2V0LWFjdGlvbnMtbWVudVwiOlwiZWUtZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnVcIixcImVlLWRyb3Bkb3duLW1lbnUtZGl2XCI6XCJlZS1kcm9wZG93bi1tZW51LWRpdlwifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IEVkaXRvclRpY2tldEVudGl0eUxpc3RJdGVtIGZyb20gJy4vZWRpdG9yLXRpY2tldC1lbnRpdHktbGlzdC1pdGVtJztcbmltcG9ydCAnLi9lZGl0b3ItdGlja2V0LWVudGl0aWVzLWxpc3Qtdmlldy5jc3MnO1xuXG4vKipcbiAqIEVkaXRvclRpY2tldHNMaXN0Vmlld1xuICogRGlzcGxheXMgdGlja2V0cyBpbiBhIHN0YW5kYXJkIGxpc3QgdGFibGUgbGlrZSB2aWV3XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fSBlbnRpdGllcyBcdGFycmF5IG9mIEpTT04gb2JqZWN0cyBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7bWl4ZWR9IG90aGVyUHJvcHNcbiAqIEByZXR1cm4ge0NvbXBvbmVudH0gXHRcdFx0bGlzdCBvZiByZW5kZXJlZCBFdmVudCBEYXRlc1xuICovXG5jb25zdCBFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3RWaWV3ID0gKCB7XG5cdGVudGl0aWVzLFxuXHRodG1sQ2xhc3MsXG5cdC4uLm90aGVyUHJvcHNcbn0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyA/XG5cdFx0YCR7IGh0bWxDbGFzcyB9IGVlLXRpY2tldHMtbGlzdC1saXN0LXZpZXdgIDpcblx0XHQnZWUtdGlja2V0cy1saXN0LWxpc3Qtdmlldyc7XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9PlxuXHRcdFx0PGRpdiBrZXk9eyAwIH0gY2xhc3NOYW1lPVwiZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPjwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHR7IF9fKCAnSUQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ05hbWUnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ1ByaWNlJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdHsgX18oICdHb2VzIG9uIFNhbGUnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ1NvbGQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ1Jlc2VydmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdHsgX18oICdDYXBhY2l0eScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHR7IF9fKCAnUmVnaXN0cmFudHMnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ0FjdGlvbnMnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0e1xuXHRcdFx0XHRlbnRpdGllcy5tYXAoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oIHRpY2tldEVudGl0eSApIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxFZGl0b3JUaWNrZXRFbnRpdHlMaXN0SXRlbVxuXHRcdFx0XHRcdFx0XHRcdGtleT17IHRpY2tldEVudGl0eS5pZCB9XG5cdFx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5PXsgdGlja2V0RW50aXR5IH1cblx0XHRcdFx0XHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvclRpY2tldEVudGl0aWVzTGlzdFZpZXc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCB1c2VSZWR1Y2VyIH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyB0aWNrZXRNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBFZGl0b3JUaWNrZXRBY3Rpb25zTWVudSBmcm9tICcuLi9hY3Rpb25zLW1lbnUvZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnUnO1xuXG5jb25zdCB7IE1PREVMX05BTUU6IFRJQ0tFVCwgZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MgfSA9IHRpY2tldE1vZGVsO1xuXG4vKipcbiAqIEVkaXRvckRhdGVHcmlkQmxvY2tcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aWNrZXQgICAgSlNPTiBvYmplY3QgZGVmaW5pbmcgdGhlIFRpY2tldFxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgVGhlIHRpY2tldCByZW5kZXJlZCBhcyBhIGJsb2NrXG4gKi9cbmNsYXNzIEVkaXRvclRpY2tldEVudGl0eUxpc3RJdGVtIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gdGlja2V0RW50aXR5XG5cdCAqIEByZXR1cm4ge3N0cmluZ30gdGlja2V0IHN0YXR1c1xuXHQgKi9cblx0Z2V0VGlja2V0U3RhdHVzQ2xhc3MgPSAoIHRpY2tldEVudGl0eSApID0+IHtcblx0XHRzd2l0Y2ggKCB0aWNrZXRFbnRpdHkuc3RhdHVzICkge1xuXHRcdFx0Y2FzZSAnVEtTJyA6XG5cdFx0XHRcdHJldHVybiAnZWUtdGlja2V0LXN0YXR1cy1zb2xkLW91dCc7XG5cdFx0XHRjYXNlICdUS0UnIDpcblx0XHRcdFx0cmV0dXJuICdlZS10aWNrZXQtc3RhdHVzLWV4cGlyZWQnO1xuXHRcdFx0Y2FzZSAnVEtQJyA6XG5cdFx0XHRcdHJldHVybiAnZWUtdGlja2V0LXN0YXR1cy1wZW5kaW5nJztcblx0XHRcdGNhc2UgJ1RLTycgOlxuXHRcdFx0XHRyZXR1cm4gJ2VlLXRpY2tldC1zdGF0dXMtb24tc2FsZSc7XG5cdFx0XHRjYXNlICdUS0EnIDpcblx0XHRcdFx0cmV0dXJuICdlZS10aWNrZXQtc3RhdHVzLWFyY2hpdmVkJztcblx0XHR9XG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdHRpY2tldEVudGl0eSxcblx0XHRcdGRvUmVmcmVzaCxcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIHRpY2tldEVudGl0eSwgVElDS0VUICkgKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3Qgc3RhdHVzQ2xhc3MgPSB0aGlzLmdldFRpY2tldFN0YXR1c0NsYXNzKCB0aWNrZXRFbnRpdHkgKTtcblx0XHRjb25zdCBiZ0NsYXNzID0gZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MoIHRpY2tldEVudGl0eSApO1xuXHRcdGNvbnN0IHF0eSA9IHRpY2tldEVudGl0eS5xdHkgPT09ICdJTkYnIHx8IHRpY2tldEVudGl0eS5xdHkgPT09IEluZmluaXR5ID9cblx0XHRcdCggPHNwYW4gY2xhc3NOYW1lPXsgJ2VlLWluZmluaXR5LXNpZ24nIH0+JmluZmluOzwvc3Bhbj4gKSA6XG5cdFx0XHR0aWNrZXRFbnRpdHkucXR5O1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgaWQ9eyBgZWUtZWRpdG9yLXRpY2tldC1saXN0LXZpZXctZGl2LSR7IHRpY2tldEVudGl0eS5pZCB9YCB9XG5cdFx0XHRcdGNsYXNzTmFtZT17IGBlZS1lZGl0b3ItdGlja2V0LWxpc3Qtdmlldy1kaXYgJHsgc3RhdHVzQ2xhc3MgfWAgfVxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtc1wiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgYCR7IGJnQ2xhc3MgfSBlZS10aWNrZXQtbGlzdC1pdGVtYCB9PlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnTmFtZTonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IHRpY2tldEVudGl0eS5uYW1lIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW0tbGFiZWxcIj5cblx0XHRcdFx0XHRcdFx0eyBfXyggJ0lEOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtLXZhbHVlXCI+XG5cdFx0XHRcdFx0XHRcdHsgdGlja2V0RW50aXR5LmlkIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW0tbGFiZWxcIj5cblx0XHRcdFx0XHRcdFx0eyBfXyggJ05hbWU6JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyB0aWNrZXRFbnRpdHkubmFtZSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdQcmljZTonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IHRpY2tldEVudGl0eS5wcmljZS5hbW91bnQudG9TdHJpbmcoKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdTdGFydCBEYXRlOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtLXZhbHVlXCI+XG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkuc3RhcnREYXRlXG5cdFx0XHRcdFx0XHRcdFx0XHQudG9Gb3JtYXQoICdkZGQgTU1NIFlZIGg6bW0gYScgKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdTb2xkOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtLXZhbHVlXCI+XG5cdFx0XHRcdFx0XHRcdHsgdGlja2V0RW50aXR5LnNvbGQgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnUmVzZXJ2ZWQ6JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyB0aWNrZXRFbnRpdHkucmVzZXJ2ZWQgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnUXVhbnRpdHk6JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyBxdHkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnUmVnaXN0cmFudHM6JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyB0aWNrZXRFbnRpdHkucmVnQ291bnQgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnQWN0aW9uczonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PEVkaXRvclRpY2tldEFjdGlvbnNNZW51XG5cdFx0XHRcdFx0XHRcdHRpY2tldEVudGl0eT17IHRpY2tldEVudGl0eSB9XG5cdFx0XHRcdFx0XHRcdGRvUmVmcmVzaD17IGRvUmVmcmVzaCB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyAnY2xlYXItZmxvYXQnIH0+PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IChcblx0KCBXcmFwcGVkQ29tcG9uZW50ICkgPT4gKCBwcm9wcyApID0+IHtcblx0XHRjb25zdCBbICwgZG9SZWZyZXNoIF0gPSB1c2VSZWR1Y2VyKCAoIHMgKSA9PiBzICsgMSwgMCApO1xuXHRcdGNvbnN0IHJlZnJlc2hlciA9ICgpID0+IHtcblx0XHRcdGRvUmVmcmVzaCgge30gKTtcblx0XHR9O1xuXHRcdHJldHVybiA8V3JhcHBlZENvbXBvbmVudCB7IC4uLnByb3BzIH0gZG9SZWZyZXNoPXsgcmVmcmVzaGVyIH0gLz47XG5cdH1cbikoIEVkaXRvclRpY2tldEVudGl0eUxpc3RJdGVtICk7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEVkaXRvclRpY2tldEVudGl0eUxpc3RJdGVtIH0gZnJvbSAnLi9lZGl0b3ItdGlja2V0LWVudGl0eS1saXN0LWl0ZW0nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3RWaWV3IH0gZnJvbSAnLi9lZGl0b3ItdGlja2V0LWVudGl0aWVzLWxpc3Qtdmlldyc7XG4iLCJleHBvcnQgY29uc3QgVElDS0VUX1BSSUNFX0NBTENVTEFUT1JfRk9STV9JTlBVVF9QUkVGSVggPSAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3InO1xuIiwiZXhwb3J0IHtcblx0VElDS0VUX1BSSUNFX0NBTENVTEFUT1JfRk9STV9JTlBVVF9QUkVGSVgsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCB7XG5cdGRlZmF1bHQgYXMgdXNlVGlja2V0UHJpY2VDYWxjdWxhdG9ycyxcbn0gZnJvbSAnLi91c2UtdGlja2V0LXByaWNlLWNhbGN1bGF0b3JzJztcbmV4cG9ydCB7XG5cdHBhcnNlTW9uZXlWYWx1ZSxcblx0ZGVmYXVsdCBhcyB1c2VUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtRGVjb3JhdG9yLFxufSBmcm9tICcuL3VzZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1mb3JtLWRlY29yYXRvcic7XG5leHBvcnQge1xuXHRkZWZhdWx0IGFzIFRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm0sXG59IGZyb20gJy4vdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItZm9ybSc7XG5leHBvcnQge1xuXHRzaG9ydGVuQ3VpZCxcblx0dGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybURhdGFNYXAsXG59IGZyb20gJy4vdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItZm9ybS1kYXRhLW1hcCc7XG5leHBvcnQge1xuXHRkZWZhdWx0IGFzIHdpdGhUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtTW9kYWwsXG59IGZyb20gJy4vd2l0aC10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1mb3JtLW1vZGFsJztcbmV4cG9ydCB7XG5cdGRlZmF1bHQgYXMgVGlja2V0UHJpY2VDYWxjdWxhdG9yTWVudUl0ZW1XaXRoTW9kYWwsXG5cdFRpY2tldFByaWNlQ2FsY3VsYXRvck1lbnVJdGVtLFxufSBmcm9tICcuL3RpY2tldC1wcmljZS1jYWxjdWxhdG9yLW1lbnUtaXRlbSc7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3JcIjpcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yXCIsXCJjb2wtMFwiOlwiY29sLTBcIixcImNvbC0xXCI6XCJjb2wtMVwiLFwiY29sLTJcIjpcImNvbC0yXCIsXCJjb2wtM1wiOlwiY29sLTNcIixcImNvbC00XCI6XCJjb2wtNFwiLFwiY29sLTVcIjpcImNvbC01XCIsXCJlZS1yVGFibGUtYm9keS10ZFwiOlwiZWUtclRhYmxlLWJvZHktdGRcIixcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXByaWNlLWFjdGlvbnNcIjpcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXByaWNlLWFjdGlvbnNcIixcImNvbXBvbmVudHMtaWNvbi1idXR0b25cIjpcImNvbXBvbmVudHMtaWNvbi1idXR0b25cIixcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFtb3VudFwiOlwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYW1vdW50XCIsXCJlZS1zaWduLWJlZm9yZVwiOlwiZWUtc2lnbi1iZWZvcmVcIixcImVlLXNpZ24tYWZ0ZXJcIjpcImVlLXNpZ24tYWZ0ZXJcIixcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsLWxhYmVsXCI6XCJlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1sYWJlbFwiLFwiY29sLWZvcm0tbGFiZWxcIjpcImNvbC1mb3JtLWxhYmVsXCIsXCJlZS1yVGFibGUtZm9vdGVyXCI6XCJlZS1yVGFibGUtZm9vdGVyXCIsXCJlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1yb3dcIjpcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsLXJvd1wiLFwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWxcIjpcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsXCIsXCJlZS1jdXJyZW5jeS1zaWduXCI6XCJlZS1jdXJyZW5jeS1zaWduXCIsXCJlZS1tb25leS1maWVsZFwiOlwiZWUtbW9uZXktZmllbGRcIixcImVlLXBlcmNlbnQtZmllbGRcIjpcImVlLXBlcmNlbnQtZmllbGRcIixcImVlLWN1clNpZ24tMlwiOlwiZWUtY3VyU2lnbi0yXCIsXCJlZS1jdXJTaWduLTNcIjpcImVlLWN1clNpZ24tM1wiLFwiZWUtY3VyU2lnbi00XCI6XCJlZS1jdXJTaWduLTRcIixcImVlLXBlcmNlbnQtc2lnblwiOlwiZWUtcGVyY2VudC1zaWduXCIsXCJlZS1hZGQtcHJpY2UtbW9kaWZpZXItYnRuXCI6XCJlZS1hZGQtcHJpY2UtbW9kaWZpZXItYnRuXCIsXCJlZS10cGMtbmV3LW1vZGlmaWVyLXVwZGF0ZVwiOlwiZWUtdHBjLW5ldy1tb2RpZmllci11cGRhdGVcIixcInNoYWtlXCI6XCJzaGFrZVwiLFwiZWUtclRhYmxlXCI6XCJlZS1yVGFibGVcIixcImVlLXJUYWJsZS1ib2R5XCI6XCJlZS1yVGFibGUtYm9keVwiLFwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItcHJpY2Utcm93XCI6XCJlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1yb3dcIixcImVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVyXCI6XCJlZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlclwiLFwiZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZVwiOlwiZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZVwiLFwiZWUtbnVtYmVyLWNvbHVtblwiOlwiZWUtbnVtYmVyLWNvbHVtblwiLFwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYWRkLXByaWNlLWlkXCI6XCJlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hZGQtcHJpY2UtaWRcIixcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFkZC1wcmljZS1hY3Rpb25zXCI6XCJlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hZGQtcHJpY2UtYWN0aW9uc1wiLFwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYWRkLXByaWNlLXJvd1wiOlwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYWRkLXByaWNlLXJvd1wiLFwiZWUtclRhYmxlLWJvZHktcm93XCI6XCJlZS1yVGFibGUtYm9keS1yb3dcIixcImVlLXJUYWJsZS1mb290ZXItcm93XCI6XCJlZS1yVGFibGUtZm9vdGVyLXJvd1wiLFwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtYWN0aW9uc1wiOlwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtYWN0aW9uc1wifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSwgaXNFbXB0eSwgdW5pcSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG5pbXBvcnQgeyBUSUNLRVRfUFJJQ0VfQ0FMQ1VMQVRPUl9GT1JNX0lOUFVUX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtRGF0YVxuICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuICogQHJldHVybiB7T2JqZWN0fSBmb3JtIGRhdGFcbiAqL1xuY29uc3QgYnVpbGRUaWNrZXREYXRhTWFwID0gKCBmb3JtRGF0YSwgdGlja2V0RW50aXR5ICkgPT4ge1xuXHRmb3JtRGF0YS50aWNrZXRJRCA9IHRpY2tldEVudGl0eS5pZDtcblx0Zm9ybURhdGEudGlja2V0SXNUYXhhYmxlID0gdGlja2V0RW50aXR5LnRheGFibGU7XG5cdGZvcm1EYXRhLnRpY2tldFRvdGFsID0gdGlja2V0RW50aXR5LnByaWNlICYmIHRpY2tldEVudGl0eS5wcmljZS5hbW91bnQgP1xuXHRcdHRpY2tldEVudGl0eS5wcmljZS5mb3JtYXR0ZXIuZm9ybWF0TnVtYmVyKCB0aWNrZXRFbnRpdHkucHJpY2UuYW1vdW50LnRvTnVtYmVyKCkgKSA6XG5cdFx0bnVsbDtcblx0cmV0dXJuIGZvcm1EYXRhO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtRGF0YVxuICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuICogQHBhcmFtIHtBcnJheX0gcHJpY2VFbnRpdGllc1xuICogQHJldHVybiB7T2JqZWN0fSBmb3JtIGRhdGFcbiAqL1xuY29uc3QgYnVpbGRQcmljZXNEYXRhTWFwID0gKCBmb3JtRGF0YSwgdGlja2V0RW50aXR5LCBwcmljZUVudGl0aWVzICkgPT4ge1xuXHRpZiAoICEgaXNBcnJheSggcHJpY2VFbnRpdGllcyApIHx8IHByaWNlRW50aXRpZXMubGVuZ3RoID09PSAwICkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRsZXQgcHJlZml4ID0gVElDS0VUX1BSSUNFX0NBTENVTEFUT1JfRk9STV9JTlBVVF9QUkVGSVg7XG5cdHByZWZpeCArPSAnLXRpY2tldC0nICsgdGlja2V0RW50aXR5LmlkICsgJy1wcmljZSc7XG5cdGNvbnN0IHByaWNlSURzID0gW107XG5cdGNvbnN0IHByaWNlVHlwZXMgPSBbXTtcblx0cHJpY2VFbnRpdGllcy5mb3JFYWNoKCAoIHByaWNlRW50aXR5ICkgPT4ge1xuXHRcdGlmICggaXNNb2RlbEVudGl0eU9mTW9kZWwoIHByaWNlRW50aXR5LCAncHJpY2UnICkgKSB7XG5cdFx0XHRjb25zdCBwcmljZUlkID0gc2hvcnRlbkN1aWQoIHByaWNlRW50aXR5LmlkICk7XG5cdFx0XHRwcmljZUlEcy5wdXNoKCBwcmljZUlkICk7XG5cdFx0XHRwcmljZVR5cGVzLnB1c2goIHByaWNlRW50aXR5LnBydElkICk7XG5cdFx0XHRjb25zdCBwcmljZVByZWZpeCA9IGAkeyBwcmVmaXggfS0keyBwcmljZUlkIH1gO1xuXHRcdFx0Zm9ybURhdGFbIGAkeyBwcmljZVByZWZpeCB9LWlkYCBdID0gcHJpY2VJZDtcblx0XHRcdGZvcm1EYXRhWyBgJHsgcHJpY2VQcmVmaXggfS10eXBlYCBdID0gcGFyc2VJbnQoIHByaWNlRW50aXR5LnBydElkLCAxMCApO1xuXHRcdFx0Zm9ybURhdGFbIGAkeyBwcmljZVByZWZpeCB9LW5hbWVgIF0gPSBwcmljZUVudGl0eS5uYW1lIHx8ICcnO1xuXHRcdFx0Zm9ybURhdGFbIGAkeyBwcmljZVByZWZpeCB9LWRlc2NgIF0gPSBwcmljZUVudGl0eS5kZXNjIHx8ICcnO1xuXHRcdFx0Zm9ybURhdGFbIGAkeyBwcmljZVByZWZpeCB9LWFtb3VudGAgXSA9IHByaWNlRW50aXR5LmFtb3VudCAmJlxuXHRcdFx0cHJpY2VFbnRpdHkuYW1vdW50LmFtb3VudCA/XG5cdFx0XHRcdHByaWNlRW50aXR5LmFtb3VudC5mb3JtYXR0ZXIuZm9ybWF0TnVtYmVyKFxuXHRcdFx0XHRcdHByaWNlRW50aXR5LmFtb3VudC5hbW91bnQudG9OdW1iZXIoKVxuXHRcdFx0XHQpIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cdH0gKTtcblx0Zm9ybURhdGEucHJpY2VJRHMgPSBpc0FycmF5KCBwcmljZUlEcyApICYmICEgaXNFbXB0eSggcHJpY2VJRHMgKSA/XG5cdFx0dW5pcSggcHJpY2VJRHMgKS5qb2luKCkgOlxuXHRcdCcnO1xuXHRmb3JtRGF0YS5wcmljZVR5cGVzID0gaXNBcnJheSggcHJpY2VUeXBlcyApICYmICEgaXNFbXB0eSggcHJpY2VUeXBlcyApID9cblx0XHR1bmlxKCBwcmljZVR5cGVzICkuam9pbigpIDpcblx0XHQnJztcblx0cmV0dXJuIGZvcm1EYXRhO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBjdWlkXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGN1aWQgc25pcHBldFxuICovXG5leHBvcnQgY29uc3Qgc2hvcnRlbkN1aWQgPSAoIGN1aWQgKSA9PiB7XG5cdGlmICggY3VpZC5oYXNPd25Qcm9wZXJ0eSggJ2xlbmd0aCcgKSAmJiBjdWlkLmxlbmd0aCA+IDE4ICkge1xuXHRcdC8vIHVzZSBhIHNtYWxsZXIgbW9yZSB1bmlxdWUgcG9ydGlvbiBvZiB0aGUgQ1VJRFxuXHRcdHJldHVybiBjdWlkLnN1YnN0cmluZyggMTIsIDE4ICk7XG5cdH1cblx0cmV0dXJuIGN1aWQ7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuICogQHBhcmFtIHtBcnJheX0gcHJpY2VFbnRpdGllc1xuICogQHBhcmFtIHtib29sZWFufSByZXZlcnNlQ2FsY3VsYXRlXG4gKiBAcmV0dXJuIHtPYmplY3R9IGZvcm0gZGF0YVxuICovXG5leHBvcnQgY29uc3QgdGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybURhdGFNYXAgPSAoXG5cdHRpY2tldEVudGl0eSxcblx0cHJpY2VFbnRpdGllcyxcblx0cmV2ZXJzZUNhbGN1bGF0ZVxuKSA9PiB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApICkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRsZXQgZm9ybURhdGEgPSB7fTtcblx0Zm9ybURhdGEgPSBidWlsZFRpY2tldERhdGFNYXAoIGZvcm1EYXRhLCB0aWNrZXRFbnRpdHkgKTtcblx0Zm9ybURhdGEgPSBidWlsZFByaWNlc0RhdGFNYXAoIGZvcm1EYXRhLCB0aWNrZXRFbnRpdHksIHByaWNlRW50aXRpZXMgKTtcblx0Zm9ybURhdGEucmV2ZXJzZUNhbGN1bGF0ZSA9ICEhIHJldmVyc2VDYWxjdWxhdGU7XG5cdHJldHVybiBmb3JtRGF0YTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSwgZmlsdGVyLCBmaW5kLCBsYXN0LCBzb3J0QnksIGZpcnN0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgRGFzaGljb24sIEljb25CdXR0b24sIFRvb2x0aXAgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgc3ByaW50ZiwgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7XG5cdFJlc3BvbnNpdmVUYWJsZSxcblx0dHdvQ29sdW1uQWRtaW5Gb3JtTGF5b3V0LFxuXHR3aXRoRm9ybUhhbmRsZXIsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgcHJpY2VUeXBlTW9kZWwsIHRpY2tldE1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7IE1vbmV5LCBTaXRlQ3VycmVuY3kgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVudGl0eUlkIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IFRJQ0tFVF9QUklDRV9DQUxDVUxBVE9SX0ZPUk1fSU5QVVRfUFJFRklYIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgcGFyc2VNb25leVZhbHVlIH0gZnJvbSAnLi91c2UtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItZm9ybS1kZWNvcmF0b3InO1xuaW1wb3J0IHsgc2hvcnRlbkN1aWQgfSBmcm9tICcuL3RpY2tldC1wcmljZS1jYWxjdWxhdG9yLWZvcm0tZGF0YS1tYXAnO1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5cbmNvbnN0IHsgTU9ERUxfTkFNRTogVElDS0VUIH0gPSB0aWNrZXRNb2RlbDtcbmNvbnN0IHsgQkFTRV9QUklDRV9UWVBFUyB9ID0gcHJpY2VUeXBlTW9kZWw7XG5cbmNvbnN0IHtcblx0Rm9ybUluZm8sXG5cdEZvcm1JbnB1dCxcblx0SW5wdXRMYWJlbCxcblx0Rm9ybVNlY3Rpb24sXG5cdEZvcm1XcmFwcGVyLFxuXHRGb3JtU2F2ZUNhbmNlbEJ1dHRvbnMsXG59ID0gdHdvQ29sdW1uQWRtaW5Gb3JtTGF5b3V0O1xuXG4vKipcbiAqIFRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuY2xhc3MgVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybSBleHRlbmRzIENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtBcnJheX0gcHJpY2VUeXBlRW50aXRpZXNcblx0ICogQHJldHVybiB7QXJyYXl9IHByaWNlIHR5cGUgb3B0aW9ucyBmb3IgdXNlIGluIHNlbGVjdCBpbnB1dFxuXHQgKi9cblx0YnVpbGRQcmljZVR5cGVPcHRpb25zID0gKCBwcmljZVR5cGVFbnRpdGllcyApID0+IHtcblx0XHRjb25zdCBwcmljZVR5cGVPcHRpb25zID0gW107XG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcHJpY2VUeXBlRW50aXRpZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjb25zdCBwcmljZVR5cGVFbnRpdHkgPSBwcmljZVR5cGVFbnRpdGllc1sgaSBdO1xuXHRcdFx0aWYgKCBpc01vZGVsRW50aXR5T2ZNb2RlbCggcHJpY2VUeXBlRW50aXR5LCAncHJpY2VfdHlwZScgKSApIHtcblx0XHRcdFx0cHJpY2VUeXBlT3B0aW9ucy5wdXNoKCB7XG5cdFx0XHRcdFx0dmFsdWU6IHByaWNlVHlwZUVudGl0eS5pZCxcblx0XHRcdFx0XHRsYWJlbDogcHJpY2VUeXBlRW50aXR5Lm5hbWUsXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHByaWNlVHlwZU9wdGlvbnM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHByaWNlVHlwZUlkXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcHJpY2VUeXBlXG5cdCAqL1xuXHRnZXRQcmljZVR5cGUgPSAoIHByaWNlVHlwZUlkICkgPT4ge1xuXHRcdHByaWNlVHlwZUlkID0gbm9ybWFsaXplRW50aXR5SWQoIHByaWNlVHlwZUlkICk7XG5cdFx0Y29uc3QgcHJpY2VUeXBlRW50aXR5ID0gZmluZCggdGhpcy5wcmljZVR5cGVFbnRpdGllcywgWyAnaWQnLCBwcmljZVR5cGVJZCBdICk7XG5cdFx0aWYgKCBpc01vZGVsRW50aXR5T2ZNb2RlbCggcHJpY2VUeXBlRW50aXR5LCAncHJpY2VfdHlwZScgKSApIHtcblx0XHRcdHJldHVybiBwcmljZVR5cGVFbnRpdHk7XG5cdFx0fVxuXHRcdHJldHVybiBsYXN0KCB0aGlzLnByaWNlVHlwZUVudGl0aWVzICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IGN1cnJlbmN5IHNpZ24gcG9zaXRpb24gY3NzIGNsYXNzXG5cdCAqL1xuXHRzaWduQjQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIFNpdGVDdXJyZW5jeS5zaWduQjQgPyAnIGVlLXNpZ24tYmVmb3JlJyA6ICcgZWUtc2lnbi1hZnRlcic7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IGN1cnJlbmN5IHNpZ24gY2hhciBsZW5ndGggY3NzIGNsYXNzXG5cdCAqL1xuXHRzaWduQ2hhcnMgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIFNpdGVDdXJyZW5jeS5zaWduLmxlbmd0aCA+IDEgP1xuXHRcdFx0JyBlZS1jdXJTaWduLScgKyBTaXRlQ3VycmVuY3kuc2lnbi5sZW5ndGggOlxuXHRcdFx0Jyc7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcmV0dXJuIHtPYmplY3R9ICQgc2lnblxuXHQgKi9cblx0Y3VycmVuY3lTaWduID0gKCkgPT4ge1xuXHRcdGxldCBzaWduQ2xhc3MgPSAnZWUtY3VycmVuY3ktc2lnbic7XG5cdFx0c2lnbkNsYXNzICs9IHRoaXMuc2lnbkI0KCkgKyB0aGlzLnNpZ25DaGFycygpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IHNpZ25DbGFzcyB9PlxuXHRcdFx0XHR7IFNpdGVDdXJyZW5jeS5zaWduIH1cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcmV0dXJuIHtPYmplY3R9ICUgc2lnblxuXHQgKi9cblx0cGVyY2VudFNpZ24gPSAoKSA9PiB7XG5cdFx0bGV0IHNpZ25DbGFzcyA9ICdlZS1wZXJjZW50LXNpZ24nO1xuXHRcdHNpZ25DbGFzcyArPSB0aGlzLnNpZ25CNCgpICsgdGhpcy5zaWduQ2hhcnMoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eyBzaWduQ2xhc3MgfT5cblx0XHRcdFx0eyBfXyggJyUnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwcmljZVR5cGVFbnRpdHlcblx0ICogQHJldHVybiB7T2JqZWN0fSAlIG9yICQgc2lnblxuXHQgKi9cblx0bW9kaWZpZXJTaWduID0gKCBwcmljZVR5cGVFbnRpdHkgKSA9PiB7XG5cdFx0cmV0dXJuIHByaWNlVHlwZUVudGl0eSAmJiBwcmljZVR5cGVFbnRpdHkuaXNQZXJjZW50ID9cblx0XHRcdHRoaXMucGVyY2VudFNpZ24oKSA6XG5cdFx0XHR0aGlzLmN1cnJlbmN5U2lnbigpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IHByaWNlVHlwZUVudGl0eVxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IGlucHV0IGZpZWxkIGNzcyBjbGFzc1xuXHQgKi9cblx0YW1vdW50Q2xhc3MgPSAoIHByaWNlVHlwZUVudGl0eSA9IG51bGwgKSA9PiB7XG5cdFx0cmV0dXJuIHByaWNlVHlwZUVudGl0eSAmJiBwcmljZVR5cGVFbnRpdHkuaXNQZXJjZW50ID9cblx0XHRcdGBlZS1wZXJjZW50LWZpZWxkJHsgdGhpcy5zaWduQjQoKSB9JHsgdGhpcy5zaWduQ2hhcnMoKSB9YCA6XG5cdFx0XHRgZWUtbW9uZXktZmllbGQkeyB0aGlzLnNpZ25CNCgpIH0keyB0aGlzLnNpZ25DaGFycygpIH1gO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHJldHVybiB7QXJyYXl9IGZvcm0gaGVhZGVyIGRhdGFcblx0ICovXG5cdGZvcm1IZWFkZXIgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ3JvdycsXG5cdFx0XHRcdGNsYXNzOiAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItaGVhZGVyLXJvdycsXG5cdFx0XHRcdHZhbHVlOiAnJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1pZCBlZS1udW1iZXItY29sdW1uJyxcblx0XHRcdFx0dmFsdWU6IF9fKCAnSUQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnY2VsbCcsXG5cdFx0XHRcdGNsYXNzOiAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdHlwZScsXG5cdFx0XHRcdHZhbHVlOiBfXyggJ1ByaWNlIFR5cGUnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnY2VsbCcsXG5cdFx0XHRcdGNsYXNzOiAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItbmFtZScsXG5cdFx0XHRcdHZhbHVlOiBfXyggJ0xhYmVsJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2NlbGwnLFxuXHRcdFx0XHRjbGFzczogJ2VlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWRlc2MnLFxuXHRcdFx0XHR2YWx1ZTogX18oICdEZXNjcmlwdGlvbicsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hbW91bnQgJyArXG5cdFx0XHRcdFx0J2VlLW51bWJlci1jb2x1bW4gJyArIHRoaXMuc2lnbkI0KCksXG5cdFx0XHRcdHZhbHVlOiBfXyggJ0Ftb3VudCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hY3Rpb25zJyxcblx0XHRcdFx0dmFsdWU6IF9fKCAnQWN0aW9ucycsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEByZXR1cm4ge251bWJlcnxzdHJpbmd9IHByaWNlVHlwZSBJRFxuXHQgKi9cblx0Z2V0RGVmYXVsdFByaWNlVHlwZUlkID0gKCkgPT4ge1xuXHRcdHJldHVybiBmaXJzdChcblx0XHRcdGZpbHRlcihcblx0XHRcdFx0dGhpcy5wcmljZVR5cGVFbnRpdGllcyxcblx0XHRcdFx0KCBwcmljZVR5cGVFbnRpdHkgKSA9PiBwcmljZVR5cGVFbnRpdHkuaWQgIT09IDFcblx0XHRcdClcblx0XHQpLmlkO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGlja2V0UHJlZml4XG5cdCAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlc1xuXHQgKiBAcGFyYW0ge09iamVjdH0gcHJpY2VFbnRpdHlcblx0ICogQHBhcmFtIHtBcnJheX0gcHJpY2VUeXBlT3B0aW9uc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGxhc3RSb3dcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBwcmljZSBtb2RpZmllciBmb3JtIHJvd1xuXHQgKi9cblx0cHJpY2VNb2RpZmllclJvdyA9IChcblx0XHR0aWNrZXRFbnRpdHksXG5cdFx0dGlja2V0UHJlZml4LFxuXHRcdHZhbHVlcyxcblx0XHRwcmljZUVudGl0eSxcblx0XHRwcmljZVR5cGVPcHRpb25zLFxuXHRcdGxhc3RSb3csXG5cdCkgPT4ge1xuXHRcdGNvbnN0IHByaWNlSWQgPSBzaG9ydGVuQ3VpZCggcHJpY2VFbnRpdHkuaWQgKTtcblx0XHRjb25zdCBwcmVmaXggPSBgJHsgdGlja2V0UHJlZml4IH0tcHJpY2UtJHsgcHJpY2VJZCB9YDtcblx0XHRjb25zdCBwcmljZVR5cGVJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCB2YWx1ZXNbIGAkeyBwcmVmaXggfS10eXBlYCBdICkgfHwgMDtcblx0XHRjb25zdCBwcmljZVR5cGVFbnRpdHkgPSB0aGlzLmdldFByaWNlVHlwZSggcHJpY2VUeXBlSWQgKTtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAncm93Jyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1yb3cnLFxuXHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnY2VsbCcsXG5cdFx0XHRcdGNsYXNzOiAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItcHJpY2UtaWQgZWUtbnVtYmVyLWNvbHVtbicsXG5cdFx0XHRcdHZhbHVlOiAoXG5cdFx0XHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRcdFx0a2V5PVwiaWRcIlxuXHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1pZGAgfVxuXHRcdFx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LWlkYCB9XG5cdFx0XHRcdFx0XHR2YWx1ZT17IHZhbHVlc1sgYCR7IHByZWZpeCB9LWlkYCBdIH1cblx0XHRcdFx0XHRcdGRpc2FibGVkXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS10eXBlJyxcblx0XHRcdFx0dmFsdWU6IChcblx0XHRcdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdFx0XHQ8SW5wdXRMYWJlbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnUHJpY2UgVHlwZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHRcdGh0bWxGb3I9eyBgJHsgcHJlZml4IH0tdHlwZWAgfVxuXHRcdFx0XHRcdFx0XHRodG1sQ2xhc3M9XCJlZS1oaWRkZW4tbGFiZWxcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0XHRcdFx0a2V5PVwidHlwZVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJzZWxlY3RcIlxuXHRcdFx0XHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXR5cGVgIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyBwcmljZVR5cGVJZCB9XG5cdFx0XHRcdFx0XHRcdG9wdGlvbnM9eyBwcmljZVR5cGVPcHRpb25zIH1cblx0XHRcdFx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LXR5cGVgIH1cblx0XHRcdFx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdFx0XHRcdCggdmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcmljZUVudGl0eS5wcnRJZCA9IHZhbHVlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9ybWFsaXplRW50aXR5SWQoIHZhbHVlICkgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdldERlZmF1bHRQcmljZVR5cGVJZCgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17XG5cdFx0XHRcdFx0XHRcdFx0cHJpY2VFbnRpdHkucHJ0SWQgPT09IEJBU0VfUFJJQ0VfVFlQRVMuQkFTRV9QUklDRVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnY2VsbCcsXG5cdFx0XHRcdGNsYXNzOiAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItcHJpY2UtbmFtZScsXG5cdFx0XHRcdHZhbHVlOiAoXG5cdFx0XHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHRcdFx0PElucHV0TGFiZWxcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ0xhYmVsJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdFx0aHRtbEZvcj17IGAkeyBwcmVmaXggfS1uYW1lYCB9XG5cdFx0XHRcdFx0XHRcdGh0bWxDbGFzcz1cImVlLWhpZGRlbi1sYWJlbFwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRcdFx0XHRrZXk9XCJuYW1lXCJcblx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LW5hbWVgIH1cblx0XHRcdFx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LW5hbWVgIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1uYW1lYCBdIHx8ICcnIH1cblx0XHRcdFx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9eyAoIHZhbHVlICkgPT4gcHJpY2VFbnRpdHkubmFtZSA9IHZhbHVlIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1kZXNjJyxcblx0XHRcdFx0dmFsdWU6IChcblx0XHRcdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdFx0XHQ8SW5wdXRMYWJlbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnRGVzY3JpcHRpb24nLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0XHRodG1sRm9yPXsgYCR7IHByZWZpeCB9LWRlc2NgIH1cblx0XHRcdFx0XHRcdFx0aHRtbENsYXNzPVwiZWUtaGlkZGVuLWxhYmVsXCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdFx0XHRcdGtleT1cImRlc2NcIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwidGV4dGFyZWFcIlxuXHRcdFx0XHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LWRlc2NgIH1cblx0XHRcdFx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LWRlc2NgIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1kZXNjYCBdIHx8ICcnIH1cblx0XHRcdFx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9eyAoIHZhbHVlICkgPT4gcHJpY2VFbnRpdHkuZGVzYyA9IHZhbHVlIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1hbW91bnQgZWUtbnVtYmVyLWNvbHVtbicsXG5cdFx0XHRcdHZhbHVlOiAoXG5cdFx0XHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHRcdFx0PElucHV0TGFiZWxcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ0Ftb3VudCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHRcdGh0bWxGb3I9eyBgJHsgcHJlZml4IH0tYW1vdW50YCB9XG5cdFx0XHRcdFx0XHRcdGh0bWxDbGFzcz1cImVlLWhpZGRlbi1sYWJlbFwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0eyB0aGlzLm1vZGlmaWVyU2lnbiggcHJpY2VUeXBlRW50aXR5ICkgfVxuXHRcdFx0XHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRcdFx0XHRrZXk9XCJwcmljZVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcblx0XHRcdFx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1hbW91bnRgIH1cblx0XHRcdFx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LWFtb3VudGAgfVxuXHRcdFx0XHRcdFx0XHRodG1sQ2xhc3M9eyB0aGlzLmFtb3VudENsYXNzKCBwcmljZVR5cGVFbnRpdHkgKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXtcblx0XHRcdFx0XHRcdFx0XHRwcmljZUVudGl0eS5hbW91bnQuZm9ybWF0dGVyLmZvcm1hdE51bWJlcihcblx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlTW9uZXlWYWx1ZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWVzWyBgJHsgcHJlZml4IH0tYW1vdW50YCBdIHx8IDBcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdFx0XHRcdCggdmFsdWUsIHByZXZpb3VzICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZUZsb2F0KCB2YWx1ZSApICE9PSBwYXJzZUZsb2F0KCBwcmV2aW91cyApXG5cdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpY2VFbnRpdHkuYW1vdW50ID0gbmV3IE1vbmV5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlTW9uZXlWYWx1ZSggdmFsdWUgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRTaXRlQ3VycmVuY3lcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e1xuXHRcdFx0XHRcdFx0XHRcdHByaWNlRW50aXR5LnBydElkID09PSBCQVNFX1BSSUNFX1RZUEVTLkJBU0VfUFJJQ0UgJiZcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZXMucmV2ZXJzZUNhbGN1bGF0ZSA9PT0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGZvcm1hdD17ICggdmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByaWNlRW50aXR5LmFtb3VudC5mb3JtYXR0ZXIuZm9ybWF0TnVtYmVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0cGFyc2VNb25leVZhbHVlKCB2YWx1ZSApXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdGZvcm1hdE9uQmx1clxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdFx0XHQpLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2NlbGwnLFxuXHRcdFx0XHRjbGFzczogJ2VlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXByaWNlLWFjdGlvbnMnLFxuXHRcdFx0XHR2YWx1ZTogdGhpcy5nZXRNb2RpZmllckFjdGlvbkJ1dHRvbnMoXG5cdFx0XHRcdFx0cHJpY2VUeXBlRW50aXR5LFxuXHRcdFx0XHRcdHByaWNlRW50aXR5LFxuXHRcdFx0XHRcdHRpY2tldEVudGl0eSxcblx0XHRcdFx0XHRwcmVmaXgsXG5cdFx0XHRcdFx0dmFsdWVzLFxuXHRcdFx0XHRcdGxhc3RSb3dcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwcmljZVR5cGVFbnRpdHlcblx0ICogQHBhcmFtIHtPYmplY3R9IHByaWNlRW50aXR5XG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB0aWNrZXRFbnRpdHlcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuXHQgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXNcblx0ICogQHBhcmFtIHtib29sZWFufSBsYXN0Um93XG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgcHJpY2UgbW9kaWZpZXIgZm9ybSByb3dcblx0ICovXG5cdGdldE1vZGlmaWVyQWN0aW9uQnV0dG9ucyA9IChcblx0XHRwcmljZVR5cGVFbnRpdHksXG5cdFx0cHJpY2VFbnRpdHksXG5cdFx0dGlja2V0RW50aXR5LFxuXHRcdHByZWZpeCxcblx0XHR2YWx1ZXMsXG5cdFx0bGFzdFJvd1xuXHQpID0+IHtcblx0XHRjb25zdCBhZGRNb2RpZmllciA9IGxhc3RSb3cgP1xuXHRcdFx0PFRvb2x0aXBcblx0XHRcdFx0cG9zaXRpb249eyAndG9wIGxlZnQnIH1cblx0XHRcdFx0dGV4dD17IF9fKFxuXHRcdFx0XHRcdCdjbGljayB0byBhZGQgcHJpY2UgbW9kaWZpZXInLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0KSB9XG5cdFx0XHQ+XG5cdFx0XHRcdDxJY29uQnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1sYWJlbD17IF9fKFxuXHRcdFx0XHRcdFx0J2NsaWNrIHRvIGFkZCBwcmljZSBtb2RpZmllcicsXG5cdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0KSB9XG5cdFx0XHRcdFx0aWNvbj1cInBsdXMtYWx0XCJcblx0XHRcdFx0XHRvbkNsaWNrPXtcblx0XHRcdFx0XHRcdCgpID0+IHRoaXMuYWRkUHJpY2VNb2RpZmllcihcblx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogdmFsdWVzWyBgJHsgcHJlZml4IH0tdHlwZWAgXSxcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiB2YWx1ZXNbIGAkeyBwcmVmaXggfS1uYW1lYCBdLFxuXHRcdFx0XHRcdFx0XHRcdGRlc2M6IHZhbHVlc1sgYCR7IHByZWZpeCB9LWRlc2NgIF0sXG5cdFx0XHRcdFx0XHRcdFx0YW1vdW50OiB2YWx1ZXNbIGAkeyBwcmVmaXggfS1hbW91bnRgIF0sXG5cdFx0XHRcdFx0XHRcdFx0b3JkZXI6ICcnLFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNsYXNzTmFtZT17ICdlZS1hZGQtcHJpY2UtbW9kaWZpZXItYnRuJyB9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L1Rvb2x0aXA+IDpcblx0XHRcdCcnO1xuXHRcdGNvbnN0IGRlbGV0ZU1vZGlmaWVyID0gcHJpY2VUeXBlRW50aXR5LnBidElkICE9PSBCQVNFX1BSSUNFX1RZUEVTLkJBU0VfUFJJQ0UgP1xuXHRcdFx0PFRvb2x0aXBcblx0XHRcdFx0cG9zaXRpb249eyAndG9wIGxlZnQnIH1cblx0XHRcdFx0dGV4dD17IF9fKCAnY2xpY2sgdG8gZGVsZXRlIHByaWNlIG1vZGlmaWVyJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdD5cblx0XHRcdFx0PEljb25CdXR0b25cblx0XHRcdFx0XHRhcmlhLWxhYmVsPXsgX18oXG5cdFx0XHRcdFx0XHQnY2xpY2sgdG8gZGVsZXRlIHByaWNlIG1vZGlmaWVyJyxcblx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHQpIH1cblx0XHRcdFx0XHRpY29uPVwidHJhc2hcIlxuXHRcdFx0XHRcdG9uQ2xpY2s9e1xuXHRcdFx0XHRcdFx0KCkgPT4gdGhpcy50cmFzaFByaWNlTW9kaWZpZXIoIHByaWNlRW50aXR5LCB0aWNrZXRFbnRpdHkgKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvVG9vbHRpcD4gOlxuXHRcdFx0Jyc7XG5cdFx0cmV0dXJuIDxGcmFnbWVudD5cblx0XHRcdHsgZGVsZXRlTW9kaWZpZXIgfVxuXHRcdFx0eyBhZGRNb2RpZmllciB9XG5cdFx0PC9GcmFnbWVudD47XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gdGlja2V0RW50aXR5XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aWNrZXRQcmVmaXhcblx0ICogQHBhcmFtIHtBcnJheX0gdmFsdWVzXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldFJldmVyc2VDYWxjdWxhdGVcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBmb3JtIGZvb3RlclxuXHQgKi9cblx0dGlja2V0VG90YWxSb3cgPSAoIHRpY2tldEVudGl0eSwgdGlja2V0UHJlZml4LCB2YWx1ZXMsIHNldFJldmVyc2VDYWxjdWxhdGUgKSA9PiB7XG5cdFx0Y29uc3QgY2FsY0Rpckljb24gPSB2YWx1ZXMucmV2ZXJzZUNhbGN1bGF0ZSA/ICd1cCcgOiAnZG93bic7XG5cdFx0Y29uc3QgY2FsY0RpclRleHQgPSB2YWx1ZXMucmV2ZXJzZUNhbGN1bGF0ZSA/XG5cdFx0XHRfXyggJ3JldmVyc2UgY2FsY3VsYXRlIGJhc2UgcHJpY2UgZnJvbSB0b3RhbCcsICdldmVudF9lc3ByZXNzbycgKSA6XG5cdFx0XHRfXyggJ2NhbGN1bGF0ZSB0b3RhbCBmcm9tIGJhc2UgcHJpY2UnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ3JvdycsXG5cdFx0XHRcdGNsYXNzOiAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtcm93Jyxcblx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2NlbGwnLFxuXHRcdFx0XHRjbGFzczogJycsXG5cdFx0XHRcdHZhbHVlOiAnJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICcnLFxuXHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnY2VsbCcsXG5cdFx0XHRcdGNsYXNzOiAnJyxcblx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2NlbGwnLFxuXHRcdFx0XHRjbGFzczogJ2VlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsLWxhYmVsJyArXG5cdFx0XHRcdFx0JyBlZS1udW1iZXItY29sdW1uJyxcblx0XHRcdFx0dmFsdWU6IChcblx0XHRcdFx0XHQ8SW5wdXRMYWJlbFxuXHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ1RvdGFsJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdGh0bWxGb3I9eyBgJHsgdGlja2V0UHJlZml4IH0tdG90YWxgIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2NlbGwnLFxuXHRcdFx0XHRjbGFzczogJ2VlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsIGVlLW51bWJlci1jb2x1bW4nLFxuXHRcdFx0XHR2YWx1ZTogKFxuXHRcdFx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0XHRcdHsgdGhpcy5jdXJyZW5jeVNpZ24oKSB9XG5cdFx0XHRcdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdFx0XHRcdGtleT1cInRvdGFsXCJcblx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0XHRuYW1lPVwidGlja2V0VG90YWxcIlxuXHRcdFx0XHRcdFx0XHRodG1sSWQ9XCJ0aWNrZXRUb3RhbFwiXG5cdFx0XHRcdFx0XHRcdGh0bWxDbGFzcz17IHRoaXMuYW1vdW50Q2xhc3MoKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXtcblx0XHRcdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkucHJpY2UuZm9ybWF0dGVyLmZvcm1hdE51bWJlcihcblx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlTW9uZXlWYWx1ZSggdmFsdWVzLnRpY2tldFRvdGFsIClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdFx0XHRcdCggdmFsdWUsIHByZXZpb3VzICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZUZsb2F0KCB2YWx1ZSApICE9PSBwYXJzZUZsb2F0KCBwcmV2aW91cyApXG5cdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnByaWNlID0gbmV3IE1vbmV5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlTW9uZXlWYWx1ZSggdmFsdWUgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRTaXRlQ3VycmVuY3lcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9eyB2YWx1ZXMucmV2ZXJzZUNhbGN1bGF0ZSA9PT0gZmFsc2UgfVxuXHRcdFx0XHRcdFx0XHRmb3JtYXQ9eyAoIHZhbHVlICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0aWNrZXRFbnRpdHkucHJpY2UuZm9ybWF0dGVyLmZvcm1hdE51bWJlcihcblx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlTW9uZXlWYWx1ZSggdmFsdWUgKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRmb3JtYXRPbkJsdXJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1hY3Rpb25zJyxcblx0XHRcdFx0dmFsdWU6IChcblx0XHRcdFx0XHQ8VG9vbHRpcCB0ZXh0PXsgY2FsY0RpclRleHQgfSBwb3NpdGlvbj17ICd0b3AgbGVmdCcgfSA+XG5cdFx0XHRcdFx0XHQ8SWNvbkJ1dHRvblxuXHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPXsgY2FsY0RpclRleHQgfVxuXHRcdFx0XHRcdFx0XHRpY29uPXsgYGFycm93LSR7IGNhbGNEaXJJY29uIH0tYWx0MmAgfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldFJldmVyc2VDYWxjdWxhdGUoICEgdmFsdWVzLnJldmVyc2VDYWxjdWxhdGUgKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvVG9vbHRpcD5cblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IGZvcm1hdHRlZCBtb25leSB2YWx1ZVxuXHQgKi9cblx0Zm9ybWF0TW9uZXkgPSAoIHZhbHVlICkgPT4gc3ByaW50ZiggJyQgJTEkZCcsIHZhbHVlICk7XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdHRpY2tldEVudGl0eSxcblx0XHRcdHByaWNlRW50aXRpZXMsXG5cdFx0XHRwcmljZVR5cGVFbnRpdGllcyxcblx0XHRcdGFkZFByaWNlTW9kaWZpZXIsXG5cdFx0XHR0cmFzaFByaWNlTW9kaWZpZXIsXG5cdFx0XHRzZXRSZXZlcnNlQ2FsY3VsYXRlLFxuXHRcdFx0c3VibWl0QnV0dG9uLFxuXHRcdFx0Y2FuY2VsQnV0dG9uLFxuXHRcdFx0aW5pdGlhbFZhbHVlcyA9IHt9LFxuXHRcdFx0Y3VycmVudFZhbHVlcyA9IHt9LFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdHRoaXMuc2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG5cdFx0dGhpcy5jbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG5cdFx0dGhpcy5hZGRQcmljZU1vZGlmaWVyID0gYWRkUHJpY2VNb2RpZmllcjtcblx0XHR0aGlzLnRyYXNoUHJpY2VNb2RpZmllciA9IHRyYXNoUHJpY2VNb2RpZmllcjtcblx0XHRpZiAoXG5cdFx0XHQhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksIFRJQ0tFVCApIHx8XG5cdFx0XHRpc0VtcHR5KCBwcmljZVR5cGVFbnRpdGllcyApXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dGhpcy5wcmljZVR5cGVFbnRpdGllcyA9IHByaWNlVHlwZUVudGl0aWVzO1xuXHRcdGNvbnN0IHZhbHVlcyA9IGlzRW1wdHkoIGN1cnJlbnRWYWx1ZXMgKSA/XG5cdFx0XHRpbml0aWFsVmFsdWVzIDpcblx0XHRcdGN1cnJlbnRWYWx1ZXM7XG5cdFx0Y29uc3QgYWxsUHJpY2VUeXBlT3B0aW9ucyA9IHRoaXMuYnVpbGRQcmljZVR5cGVPcHRpb25zKFxuXHRcdFx0dGhpcy5wcmljZVR5cGVFbnRpdGllc1xuXHRcdCk7XG5cdFx0bGV0IHRpY2tldFByZWZpeCA9IFRJQ0tFVF9QUklDRV9DQUxDVUxBVE9SX0ZPUk1fSU5QVVRfUFJFRklYO1xuXHRcdHRpY2tldFByZWZpeCArPSAnLXRpY2tldC0nICsgdGlja2V0RW50aXR5LmlkO1xuXG5cdFx0bGV0IHdhcm5pbmdzID0gbnVsbDtcblx0XHRjb25zdCBmb3JtUm93cyA9IFtdO1xuXHRcdGNvbnN0IHByaWNlQ291bnQgPSBwcmljZUVudGl0aWVzLmxlbmd0aDtcblx0XHRpZiAoIHByaWNlQ291bnQgPiAwICkge1xuXHRcdFx0Y29uc3QgcHJpY2VUeXBlT3B0aW9ucyA9IGZpbHRlcihcblx0XHRcdFx0YWxsUHJpY2VUeXBlT3B0aW9ucyxcblx0XHRcdFx0KCBwcmljZVR5cGVFbnRpdHkgKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHByaWNlVHlwZUVudGl0eS52YWx1ZSAhPT0gQkFTRV9QUklDRV9UWVBFUy5CQVNFX1BSSUNFO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgc29ydGVkUHJpY2VzID0gc29ydEJ5KCBwcmljZUVudGl0aWVzLCBbICdvcmRlcicsICduYW1lJyBdICk7XG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBwcmljZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdGNvbnN0IHByaWNlRW50aXR5ID0gc29ydGVkUHJpY2VzWyBpIF07XG5cdFx0XHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggcHJpY2VFbnRpdHksICdwcmljZScgKSApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gd2UgZG9uJ3Qgd2FudCBcIkJhc2UgUHJpY2VcIiB0byBiZSBhbiBvcHRpb24gZm9yXG5cdFx0XHRcdC8vIHByaWNlIG1vZGlmaWVycyBiZWNhdXNlIFRIRVJFIENBTiBPTkxZIEJFIE9ORSEhIVxuXHRcdFx0XHRjb25zdCBvcHRpb25zID0gcHJpY2VFbnRpdHkucHJ0SWQgPT09IEJBU0VfUFJJQ0VfVFlQRVMuQkFTRV9QUklDRSA/XG5cdFx0XHRcdFx0YWxsUHJpY2VUeXBlT3B0aW9ucyA6XG5cdFx0XHRcdFx0cHJpY2VUeXBlT3B0aW9ucztcblx0XHRcdFx0Zm9ybVJvd3MucHVzaChcblx0XHRcdFx0XHR0aGlzLnByaWNlTW9kaWZpZXJSb3coXG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHksXG5cdFx0XHRcdFx0XHR0aWNrZXRQcmVmaXgsXG5cdFx0XHRcdFx0XHR2YWx1ZXMsXG5cdFx0XHRcdFx0XHRwcmljZUVudGl0eSxcblx0XHRcdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdFx0XHQoIGkgKyAxICkgPT09IHByaWNlQ291bnRcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdhcm5pbmdzID0gKFxuXHRcdFx0XHQ8Rm9ybUluZm9cblx0XHRcdFx0XHRmb3JtSW5mbz17XG5cdFx0XHRcdFx0XHRfXyhcblx0XHRcdFx0XHRcdFx0J05vIHRpY2tldCBwcmljZXMgaGF2ZSBiZWVuIHNldCEgQSBiYXNlIHByaWNlJyArXG5cdFx0XHRcdFx0XHRcdCcgaXMgcmVxdWlyZWQgYXQgdGhlIHZlcnkgbWluaW11bS4gUGxlYXNlJyArXG5cdFx0XHRcdFx0XHRcdCcgcHJvdmlkZSBhIFwiTGFiZWxcIiBhbmQgXCJBbW91bnRcIiBhbmQgdGhlbicgK1xuXHRcdFx0XHRcdFx0XHQnIGNsaWNrIHRoZSAlJXZhciUlIGJ1dHRvbiBpbiB0aGUgXCJBY3Rpb25zXCInICtcblx0XHRcdFx0XHRcdFx0JyBjb2x1bW4gdG8gYWRkIHRoZSBiYXNlIHByaWNlLicsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm9ybUluZm9WYXJzPXsgW1xuXHRcdFx0XHRcdFx0PERhc2hpY29uIGljb249XCJwbHVzLWFsdFwiIGtleT17IDAgfSAvPixcblx0XHRcdFx0XHRdIH1cblx0XHRcdFx0XHRkYXNoaWNvbj17ICd3YXJuaW5nJyB9XG5cdFx0XHRcdFx0ZGlzbWlzc2FibGU9eyBmYWxzZSB9XG5cdFx0XHRcdFx0Y29sU2l6ZT17IDExIH1cblx0XHRcdFx0XHRvZmZzZXQ9eyAxIH1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aWNrZXRFbnRpdHkgJiYgdGlja2V0RW50aXR5LmlkID8gKFxuXHRcdFx0PEZvcm1XcmFwcGVyPlxuXHRcdFx0XHQ8Rm9ybVNlY3Rpb25cblx0XHRcdFx0XHRodG1sSWQ9eyBgJHsgdGlja2V0UHJlZml4IH0tZm9ybS1zZWN0aW9uYCB9XG5cdFx0XHRcdFx0aHRtbENsYXNzPVwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItZm9ybS1zZWN0aW9uXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHsgd2FybmluZ3MgfVxuXHRcdFx0XHRcdDxSZXNwb25zaXZlVGFibGVcblx0XHRcdFx0XHRcdGNvbHVtbnM9eyB0aGlzLmZvcm1IZWFkZXIoKSB9XG5cdFx0XHRcdFx0XHRyb3dEYXRhPXsgZm9ybVJvd3MgfVxuXHRcdFx0XHRcdFx0Zm9vdGVyRGF0YT17XG5cdFx0XHRcdFx0XHRcdHRoaXMudGlja2V0VG90YWxSb3coXG5cdFx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdHRpY2tldFByZWZpeCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZXMsXG5cdFx0XHRcdFx0XHRcdFx0c2V0UmV2ZXJzZUNhbGN1bGF0ZVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtZXRhRGF0YT17IHtcblx0XHRcdFx0XHRcdFx0dGFibGVJZDogdGlja2V0UHJlZml4LFxuXHRcdFx0XHRcdFx0XHR0YWJsZUNhcHRpb246IF9fKFxuXHRcdFx0XHRcdFx0XHRcdCdUaWNrZXQgUHJpY2UgTW9kaWZpZXJzJyxcblx0XHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdGNsYXNzZXM9eyB7IHRhYmxlQ2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvcicgfSB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdFx0XHR0eXBlPVwiaGlkZGVuXCJcblx0XHRcdFx0XHRcdGtleT1cInRpY2tldElEXCJcblx0XHRcdFx0XHRcdG5hbWU9XCJ0aWNrZXRJRFwiXG5cdFx0XHRcdFx0XHRodG1sSWQ9XCJ0aWNrZXRJRFwiXG5cdFx0XHRcdFx0XHR2YWx1ZT17IHZhbHVlcy50aWNrZXRJRCB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdFx0XHR0eXBlPVwiaGlkZGVuXCJcblx0XHRcdFx0XHRcdGtleT1cInByaWNlSURzXCJcblx0XHRcdFx0XHRcdG5hbWU9XCJwcmljZUlEc1wiXG5cdFx0XHRcdFx0XHRodG1sSWQ9XCJwcmljZUlEc1wiXG5cdFx0XHRcdFx0XHR2YWx1ZT17IHZhbHVlcy5wcmljZUlEcyB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdFx0XHR0eXBlPVwiaGlkZGVuXCJcblx0XHRcdFx0XHRcdGtleT1cInByaWNlVHlwZXNcIlxuXHRcdFx0XHRcdFx0bmFtZT1cInByaWNlVHlwZXNcIlxuXHRcdFx0XHRcdFx0aHRtbElkPVwicHJpY2VUeXBlc1wiXG5cdFx0XHRcdFx0XHR2YWx1ZT17IHZhbHVlcy5wcmljZVR5cGVzIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0XHRcdHR5cGU9XCJoaWRkZW5cIlxuXHRcdFx0XHRcdFx0a2V5PVwicmV2ZXJzZUNhbGN1bGF0ZVwiXG5cdFx0XHRcdFx0XHRuYW1lPVwicmV2ZXJzZUNhbGN1bGF0ZVwiXG5cdFx0XHRcdFx0XHRodG1sSWQ9XCJyZXZlcnNlQ2FsY3VsYXRlXCJcblx0XHRcdFx0XHRcdHZhbHVlPXsgdmFsdWVzLnJldmVyc2VDYWxjdWxhdGUgfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvRm9ybVNlY3Rpb24+XG5cdFx0XHRcdDxGb3JtU2F2ZUNhbmNlbEJ1dHRvbnNcblx0XHRcdFx0XHRodG1sQ2xhc3M9eyAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYnV0dG9ucycgfVxuXHRcdFx0XHRcdHN1Ym1pdEJ1dHRvbj17IHN1Ym1pdEJ1dHRvbiB9XG5cdFx0XHRcdFx0Y2FuY2VsQnV0dG9uPXsgY2FuY2VsQnV0dG9uIH1cblx0XHRcdFx0Lz5cblx0XHRcdFx0PEZvcm1TZWN0aW9uIGh0bWxDbGFzcz1cImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWZvcm0taW5mb1wiID5cblx0XHRcdFx0XHQ8Rm9ybUluZm9cblx0XHRcdFx0XHRcdGZvcm1JbmZvPXtcblx0XHRcdFx0XHRcdFx0dmFsdWVzLnJldmVyc2VDYWxjdWxhdGUgP1xuXHRcdFx0XHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3RpY2tldCBiYXNlIHByaWNlIGlzIGJlaW5nIGNhbGN1bGF0ZWQnICtcblx0XHRcdFx0XHRcdFx0XHRcdCcgYnkgcmV2ZXJzaW5nIHRoZSBwcmljZSBtb2RpZmllcnMnICtcblx0XHRcdFx0XHRcdFx0XHRcdCcgYXBwbGllZCB0byB0aGUgdGlja2V0IHRvdGFsIC0gY2hhbmdlJyArXG5cdFx0XHRcdFx0XHRcdFx0XHQnIHRoZSBjYWxjdWxhdGlvbiBkaXJlY3Rpb24gYnkgY2xpY2tpbmcnICtcblx0XHRcdFx0XHRcdFx0XHRcdCcgb24gdGhlIGFycm93IGJ1dHRvbiB0byB0aGUgcmlnaHQgb2YgdGhlJyArXG5cdFx0XHRcdFx0XHRcdFx0XHQnIHRpY2tldCB0b3RhbCBmaWVsZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHRcdFx0KSA6XG5cdFx0XHRcdFx0XHRcdFx0X18oXG5cdFx0XHRcdFx0XHRcdFx0XHQndGlja2V0IHRvdGFsIGlzIGJlaW5nIGNhbGN1bGF0ZWQgYnkgJyArXG5cdFx0XHRcdFx0XHRcdFx0XHQnIGFwcGx5aW5nIHByaWNlIG1vZGlmaWVycyB0byBiYXNlIHByaWNlJyArXG5cdFx0XHRcdFx0XHRcdFx0XHQnIC0gY2hhbmdlIHRoZSBjYWxjdWxhdGlvbiBkaXJlY3Rpb24gYnknICtcblx0XHRcdFx0XHRcdFx0XHRcdCcgY2xpY2tpbmcgb24gdGhlIGFycm93IGJ1dHRvbiB0byB0aGUnICtcblx0XHRcdFx0XHRcdFx0XHRcdCcgcmlnaHQgb2YgdGhlIHRpY2tldCB0b3RhbCBmaWVsZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGFzaGljb249eyAnaW5mbycgfVxuXHRcdFx0XHRcdFx0ZGlzbWlzc2FibGU9eyBmYWxzZSB9XG5cdFx0XHRcdFx0XHRjb2xTaXplPXsgMTEgfVxuXHRcdFx0XHRcdFx0b2Zmc2V0PXsgMSB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Gb3JtU2VjdGlvbj5cblx0XHRcdDwvRm9ybVdyYXBwZXI+XG5cdFx0KSA6IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBFbmhhbmNlZCBUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtIHdpdGggRm9ybUhhbmRsZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgd2l0aEZvcm1IYW5kbGVyKCBUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgRXNwcmVzc29JY29uLCBJY29uTWVudUl0ZW0gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBmbG93IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgd2l0aFRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1Nb2RhbCBmcm9tICcuL3dpdGgtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItZm9ybS1tb2RhbCc7XG5cbmV4cG9ydCBjb25zdCBUaWNrZXRQcmljZUNhbGN1bGF0b3JNZW51SXRlbSA9ICgge1xuXHR0aWNrZXRFbnRpdHksXG5cdHRvZ2dsZUNhbGN1bGF0b3IgPSAoKSA9PiBudWxsLFxuXHRvbk9wZW5UaWNrZXRDYWxjdWxhdG9yID0gKCkgPT4gbnVsbCxcblx0b25DbG9zZVRpY2tldENhbGN1bGF0b3IgPSAoKSA9PiBudWxsLFxuXHRzaG93Q2FsY3VsYXRvcixcblx0bm9CYXNlUHJpY2UgPSBmYWxzZSxcbn0gKSA9PiB7XG5cdGNvbnN0IHRvZ2dsZSA9IHVzZUNhbGxiYWNrKCAoKSA9PiB7XG5cdFx0Y29uc3QgdG9nZ2xlQWN0aW9uID0gc2hvd0NhbGN1bGF0b3IgP1xuXHRcdFx0ZmxvdyggdG9nZ2xlQ2FsY3VsYXRvciwgb25DbG9zZVRpY2tldENhbGN1bGF0b3IgKSA6XG5cdFx0XHRmbG93KCBvbk9wZW5UaWNrZXRDYWxjdWxhdG9yLCB0b2dnbGVDYWxjdWxhdG9yICk7XG5cdFx0dG9nZ2xlQWN0aW9uKCk7XG5cdH0sIFtcblx0XHR0b2dnbGVDYWxjdWxhdG9yLFxuXHRcdHNob3dDYWxjdWxhdG9yLFxuXHRcdG9uT3BlblRpY2tldENhbGN1bGF0b3IsXG5cdFx0b25DbG9zZVRpY2tldENhbGN1bGF0b3IsXG5cdF0gKTtcblx0Y29uc3QgdG9vbHRpcCA9IG5vQmFzZVByaWNlID9cblx0XHRfXyggJ3dhcm5pbmchIG5vIHRpY2tldCBwcmljZSBzZXQgLSBjbGljayB0byBmaXgnLCAnZXZlbnRfZXNwcmVzc28nICkgOlxuXHRcdF9fKCAndGlja2V0IHByaWNlIGNhbGN1bGF0b3InLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdHJldHVybiBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApID8gKFxuXHRcdDxJY29uTWVudUl0ZW1cblx0XHRcdGluZGV4PXsgMiB9XG5cdFx0XHR0b29sdGlwPXsgdG9vbHRpcCB9XG5cdFx0XHRpZD17IGBjYWxjdWxhdGUtdGlja2V0LXByaWNlLXRpY2tldC0keyB0aWNrZXRFbnRpdHkuaWQgfWAgfVxuXHRcdFx0aHRtbENsYXNzPXsgJ2NhbGN1bGF0ZS10aWNrZXRzLXByaWNlJyB9XG5cdFx0XHRkYXNoaWNvbj17IDxFc3ByZXNzb0ljb24gaWNvbj1cImNhbGN1bGF0b3JcIiAvPiB9XG5cdFx0XHR0b29sdGlwUG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuXHRcdFx0b25DbGljaz17IHRvZ2dsZSB9XG5cdFx0XHRpdGVtQ291bnQ9eyBub0Jhc2VQcmljZSA/IDAgOiBudWxsIH1cblx0XHQvPlxuXHQpIDogbnVsbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtTW9kYWwoIFRpY2tldFByaWNlQ2FsY3VsYXRvck1lbnVJdGVtICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSwgaXNFbXB0eSwgZm9yRWFjaCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBwcmljZVR5cGVNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IFNpdGVDdXJyZW5jeSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbHVlLW9iamVjdHMnO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IGNyZWF0ZURlY29yYXRvciBmcm9tICdmaW5hbC1mb3JtLWNhbGN1bGF0ZSc7XG5pbXBvcnQgeyB1c2VEZWJvdW5jZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hvb2tzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVudGl0eUlkIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBUSUNLRVRfUFJJQ0VfQ0FMQ1VMQVRPUl9GT1JNX0lOUFVUX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB1c2VUaWNrZXRQcmljZUNhbGN1bGF0b3JzIGZyb20gJy4vdXNlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9ycyc7XG5cbmNvbnN0IHsgQkFTRV9QUklDRV9UWVBFUyB9ID0gcHJpY2VUeXBlTW9kZWw7XG5jb25zdCBERUZBVUxUX09CSkVDVCA9IHt9O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBtb25leVZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9IG1vbmV5IHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZU1vbmV5VmFsdWUgPSAoIG1vbmV5VmFsdWUgKSA9PiB7XG5cdG1vbmV5VmFsdWUgPSBtb25leVZhbHVlICYmIG1vbmV5VmFsdWUudG9TdHJpbmcgP1xuXHRcdG1vbmV5VmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKFxuXHRcdFx0bmV3IFJlZ0V4cCggU2l0ZUN1cnJlbmN5LnRob3VzYW5kc1NlcGFyYXRvciwgJ2cnICksXG5cdFx0XHQnJ1xuXHRcdCkucmVwbGFjZShcblx0XHRcdFNpdGVDdXJyZW5jeS5zaWduLFxuXHRcdFx0Jydcblx0XHQpIDpcblx0XHQwO1xuXHRtb25leVZhbHVlID0gcGFyc2VGbG9hdCggbW9uZXlWYWx1ZSApO1xuXHRyZXR1cm4gISBpc05hTiggbW9uZXlWYWx1ZSApID8gbW9uZXlWYWx1ZSA6IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhXG4gKiBAcmV0dXJuIHtudW1iZXJ8c3RyaW5nfSB0aWNrZXRJZFxuICovXG5jb25zdCBnZXRUaWNrZXRJZCA9ICggZm9ybURhdGEgKSA9PiBmb3JtRGF0YS50aWNrZXRJRCB8fCAwO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRvdGFsXG4gKi9cbmNvbnN0IGdldFRpY2tldFRvdGFsID0gKCBmb3JtRGF0YSApID0+IHtcblx0Y29uc3QgdG90YWwgPSBmb3JtRGF0YS50aWNrZXRUb3RhbCB8fCAwO1xuXHRyZXR1cm4gcGFyc2VNb25leVZhbHVlKCB0b3RhbCApO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtRGF0YVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsY3VsYXRvciAgQSBjYWxjdWxhdG9yIGZvciBjYWxjdWxhdGluZyB0aGUgdG90YWwuXG4gKiBAcmV0dXJuIHtPYmplY3R9IG5ldyBmaWVsZCBkYXRhXG4gKi9cbmNvbnN0IGNhbGN1bGF0ZVRpY2tldFRvdGFsRnJvbU1vZGlmaWVycyA9ICggZm9ybURhdGEsIGNhbGN1bGF0b3IgKSA9PiB7XG5cdGNvbnN0IHRpY2tldElkID0gZ2V0VGlja2V0SWQoIGZvcm1EYXRhICk7XG5cdGlmICggISB0aWNrZXRJZCB8fCB0eXBlb2YgY2FsY3VsYXRvciAhPT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdH1cblx0Y29uc3QgcHJpY2VNb2RpZmllcnMgPSBnZXRQcmljZU1vZGlmaWVyc0Zyb21Gb3JtRGF0YSggdGlja2V0SWQsIGZvcm1EYXRhICk7XG5cdGlmICggISBpc0FycmF5KCBwcmljZU1vZGlmaWVycyApIHx8IGlzRW1wdHkoIHByaWNlTW9kaWZpZXJzICkgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfT0JKRUNUO1xuXHR9XG5cdGNvbnN0IHRvdGFsID0gY2FsY3VsYXRvciggMCwgcHJpY2VNb2RpZmllcnMgKTtcblx0cmV0dXJuIHsgdGlja2V0VG90YWw6IHRvdGFsLnRvRml4ZWQoIFNpdGVDdXJyZW5jeS5kZWNpbWFsUGxhY2VzICkgfTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHRpY2tldElkXG4gKiBAcGFyYW0ge09iamVjdH0gZm9ybURhdGFcbiAqIEByZXR1cm4ge3N0cmluZ30gZm9ybSBmaWVsZCBuYW1lXG4gKi9cbmNvbnN0IGdldEJhc2VQcmljZUZvcm1GaWVsZElEID0gKCB0aWNrZXRJZCwgZm9ybURhdGEgKSA9PiB7XG5cdGNvbnN0IGJhc2VQcmVmaXggPSBUSUNLRVRfUFJJQ0VfQ0FMQ1VMQVRPUl9GT1JNX0lOUFVUX1BSRUZJWCArXG5cdFx0YC10aWNrZXQtJHsgdGlja2V0SWQgfS1wcmljZWA7XG5cdGlmICggISBmb3JtRGF0YS5wcmljZUlEcyApIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0Y29uc3QgcHJpY2VJRHMgPSBmb3JtRGF0YS5wcmljZUlEcy5zcGxpdCggJywnICk7XG5cdGZvciAoIGNvbnN0IHByaWNlSUQgb2YgcHJpY2VJRHMgKSB7XG5cdFx0Y29uc3QgcHJlZml4ID0gYCR7IGJhc2VQcmVmaXggfS0keyBwcmljZUlEIH1gO1xuXHRcdGNvbnN0IHByaWNlVHlwZUlkID0gdHlwZW9mIGZvcm1EYXRhWyBgJHsgcHJlZml4IH0tdHlwZWAgXSAhPT0gJ3VuZGVmaW5lZCcgP1xuXHRcdFx0bm9ybWFsaXplRW50aXR5SWQoIGZvcm1EYXRhWyBgJHsgcHJlZml4IH0tdHlwZWAgXSApIDpcblx0XHRcdG51bGw7XG5cdFx0Ly8gYmFzZSBwcmljZXMgaGF2ZSBhIHR5cGUgaWQgb2YgMVxuXHRcdGlmICggcHJpY2VUeXBlSWQgPT09IEJBU0VfUFJJQ0VfVFlQRVMuQkFTRV9QUklDRSApIHtcblx0XHRcdGNvbnN0IGJhc2VQcmljZSA9IHR5cGVvZiBmb3JtRGF0YVsgYCR7IHByZWZpeCB9LWFtb3VudGAgXSAhPT0gJ3VuZGVmaW5lZCcgP1xuXHRcdFx0XHRmb3JtRGF0YVsgYCR7IHByZWZpeCB9LWFtb3VudGAgXSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRpZiAoIGJhc2VQcmljZSAhPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIGAkeyBwcmVmaXggfS1hbW91bnRgO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxjdWxhdG9yICBBIGNhbGN1bGF0b3IgZm9yIGNhbGN1bGF0aW5nIHRoZSB0b3RhbC5cbiAqIEByZXR1cm4ge09iamVjdH0gbmV3IGZpZWxkIGRhdGFcbiAqL1xuY29uc3QgY2FsY3VsYXRlVGlja2V0QmFzZVByaWNlRnJvbVRvdGFsID0gKCBmb3JtRGF0YSwgY2FsY3VsYXRvciApID0+IHtcblx0Y29uc3QgdGlja2V0SWQgPSBnZXRUaWNrZXRJZCggZm9ybURhdGEgKTtcblx0aWYgKCAhIHRpY2tldElkIHx8IHR5cGVvZiBjYWxjdWxhdG9yICE9PSAnZnVuY3Rpb24nICkge1xuXHRcdHJldHVybiBERUZBVUxUX09CSkVDVDtcblx0fVxuXHRjb25zdCBiYXNlUHJpY2VGb3JtRmllbGRJRCA9IGdldEJhc2VQcmljZUZvcm1GaWVsZElEKCB0aWNrZXRJZCwgZm9ybURhdGEgKTtcblx0aWYgKCBiYXNlUHJpY2VGb3JtRmllbGRJRCA9PT0gJycgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfT0JKRUNUO1xuXHR9XG5cdGxldCBiYXNlUHJpY2UgPSBnZXRUaWNrZXRUb3RhbCggZm9ybURhdGEgKTtcblx0Y29uc3QgcHJpY2VNb2RpZmllcnMgPSBnZXRQcmljZU1vZGlmaWVyc0Zyb21Gb3JtRGF0YSggdGlja2V0SWQsIGZvcm1EYXRhICk7XG5cdGlmICggaXNBcnJheSggcHJpY2VNb2RpZmllcnMgKSAmJiAhIGlzRW1wdHkoIHByaWNlTW9kaWZpZXJzICkgKSB7XG5cdFx0YmFzZVByaWNlID0gY2FsY3VsYXRvcihcblx0XHRcdGJhc2VQcmljZSxcblx0XHRcdHByaWNlTW9kaWZpZXJzXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdFsgYmFzZVByaWNlRm9ybUZpZWxkSUQgXTogYmFzZVByaWNlLnRvRml4ZWQoXG5cdFx0XHRTaXRlQ3VycmVuY3kuZGVjaW1hbFBsYWNlc1xuXHRcdCksXG5cdH07XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB0aWNrZXRJZFxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhXG4gKiBAcmV0dXJuIHtBcnJheX0gcHJpY2UgbW9kaWZpZXJzXG4gKi9cbmNvbnN0IGdldFByaWNlTW9kaWZpZXJzRnJvbUZvcm1EYXRhID0gKCB0aWNrZXRJZCwgZm9ybURhdGEgKSA9PiB7XG5cdGxldCBiYXNlUHJlZml4ID0gVElDS0VUX1BSSUNFX0NBTENVTEFUT1JfRk9STV9JTlBVVF9QUkVGSVg7XG5cdGJhc2VQcmVmaXggKz0gJy10aWNrZXQtJyArIHRpY2tldElkICsgJy1wcmljZSc7XG5cdGNvbnN0IHByaWNlTW9kaWZpZXJzID0gW107XG5cdGNvbnN0IHByaWNlSURzID0gZm9ybURhdGEucHJpY2VJRHMgPyBmb3JtRGF0YS5wcmljZUlEcy5zcGxpdCggJywnICkgOiBbXTtcblx0Zm9yICggY29uc3QgcHJpY2VJRCBvZiBwcmljZUlEcyApIHtcblx0XHRjb25zdCBwcmVmaXggPSBgJHsgYmFzZVByZWZpeCB9LSR7IHByaWNlSUQgfWA7XG5cdFx0Y29uc3QgcHJpY2VUeXBlSWQgPSB0eXBlb2YgZm9ybURhdGFbIGAkeyBwcmVmaXggfS10eXBlYCBdICE9PSAndW5kZWZpbmVkJyA/XG5cdFx0XHRub3JtYWxpemVFbnRpdHlJZCggZm9ybURhdGFbIGAkeyBwcmVmaXggfS10eXBlYCBdICkgOlxuXHRcdFx0MDtcblx0XHRjb25zdCBwcmljZUFtb3VudCA9IHR5cGVvZiBmb3JtRGF0YVsgYCR7IHByZWZpeCB9LWFtb3VudGAgXSAhPT0gJ3VuZGVmaW5lZCcgP1xuXHRcdFx0cGFyc2VNb25leVZhbHVlKCBmb3JtRGF0YVsgYCR7IHByZWZpeCB9LWFtb3VudGAgXSApIDpcblx0XHRcdDA7XG5cdFx0aWYgKCBwcmljZUFtb3VudCApIHtcblx0XHRcdC8vIEB0b2RvIHRoZSBjYWxjdWxhdG9ycyAoZXhwb3NlZCBieSB1c2VUaWNrZXRQcmljZUNhbGN1bGF0b3JzKSBzb3J0IGJ5IG9yZGVyIGFuZCBpZFxuXHRcdFx0Ly8gYnV0IHRoZSBvcmlnaW5hbCBjb2RlIGhlcmUgbmV2ZXIgZXhwb3NlZCB0aG9zZSB2YWx1ZXMgdG8gdGhlIGNhbGN1bGF0aW9ucy5cblx0XHRcdC8vIHNvIGl0IGxvb2tzIGxpa2UgaXQgd2FzIGEgYml0IHVuZmluaXNoZWQgd2hpY2ggbWVhbnMgd2hhdCB3ZSB3YW50IHRvIGRvIGhlcmVcblx0XHRcdC8vIGlzIHJldHVybiB0aGUgYWN0dWFsIHByaWNlIG9iamVjdHMgZm9yIHRoZSBjYWxjdWxhdG9ycyB0byBkby5cblx0XHRcdC8vIHdlJ2xsIHByb2JhYmx5IGhhdmUgdG8gZXhwb3NlIHRoZSBwcmljZSBvYmplY3RzIHRocm91Z2ggdGhlIGhvb2tzIGJlY2F1c2UgdGhleVxuXHRcdFx0Ly8gYXJlIGF2YWlsYWJsZSFcblx0XHRcdHByaWNlTW9kaWZpZXJzLnB1c2goIHtcblx0XHRcdFx0UFJUX0lEOiBwcmljZVR5cGVJZCxcblx0XHRcdFx0YW1vdW50OiBwcmljZUFtb3VudCxcblx0XHRcdH0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHByaWNlTW9kaWZpZXJzO1xufTtcblxuLyoqXG4gKiBBIGhvb2sgcmV0dXJuaW5nIGEgZm9ybSBkZWNvcmF0b3IgdXNlZCBmb3IgdXBkYXRpbmcgdG90YWwgY2FsY3VsYXRpb25zIGluIGFcbiAqIHRpY2tldCBwcmljZSBjYWxjdWxhdG9yIGZvcm0uXG4gKlxuICogQHBhcmFtIHtCYXNlRW50aXR5W119IHByaWNlVHlwZUVudGl0aWVzICBBbiBhcnJheSBvZiBwcmljZSB0eXBlIEJhc2VFbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHtudW1iZXJ9ICBkZWxheSAgQSBkZWxheSB0byB1c2UgZm9yIGRlYm91bmNpbmcgdGhlIGNhbGN1bGF0ZWQgdG90YWwuXG4gKiBAcmV0dXJuIHtPYmplY3R9ICBkZWNvcmF0b3IsIG11dGF0b3JzLCBhbmQgY2FsbGJhY2tzIGZvciByZWFjdC1maW5hbC1mb3JtXG4gKi9cbmNvbnN0IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1EZWNvcmF0b3IgPSAoIHByaWNlVHlwZUVudGl0aWVzLCBkZWxheSA9IDI1MCApID0+IHtcblx0Y29uc3Qge1xuXHRcdGNhbGN1bGF0ZVRpY2tldFRvdGFsLFxuXHRcdGNhbGN1bGF0ZVRpY2tldEJhc2VQcmljZSxcblx0fSA9IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvcnMoIHByaWNlVHlwZUVudGl0aWVzICk7XG5cdGNvbnN0IFsgdG90YWxDaGFuZ2VkVG8sIHNldFRvdGFsQ2hhbmdpbmdUbyBdID0gdXNlU3RhdGUoIG51bGwgKTtcblx0Y29uc3QgWyBtdXRhdG9yQ2FsbGJhY2tzLCBzZXRNdXRhdG9yQ2FsbGJhY2tzIF0gPSB1c2VTdGF0ZSggbnVsbCApO1xuXHRjb25zdCBkZWJvdW5jZWRUb3RhbENoYW5nZWRUbyA9IHVzZURlYm91bmNlKCB0b3RhbENoYW5nZWRUbywgZGVsYXkgKTtcblxuXHR1c2VFZmZlY3QoICgpID0+IHtcblx0XHRpZiAoIGRlYm91bmNlZFRvdGFsQ2hhbmdlZFRvICkge1xuXHRcdFx0aWYgKCBtdXRhdG9yQ2FsbGJhY2tzLnRvdGFsTXV0YXRvciApIHtcblx0XHRcdFx0bXV0YXRvckNhbGxiYWNrcy50b3RhbE11dGF0b3IoIGRlYm91bmNlZFRvdGFsQ2hhbmdlZFRvICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCBbIGRlYm91bmNlZFRvdGFsQ2hhbmdlZFRvIF0gKTtcblxuXHRjb25zdCB0b3RhbE11dGF0b3IgPSB1c2VDYWxsYmFjayggKFxuXHRcdFsgbmV3VG90YWwgXSxcblx0XHRzdGF0ZSxcblx0XHR7IGNoYW5nZVZhbHVlIH1cblx0KSA9PiB7XG5cdFx0aWYgKCBuZXdUb3RhbCApIHtcblx0XHRcdGZvckVhY2goIG5ld1RvdGFsLCAoIHZhbHVlLCBmaWVsZCApID0+IHtcblx0XHRcdFx0Y2hhbmdlVmFsdWUoIHN0YXRlLCBmaWVsZCwgKCkgPT4gdmFsdWUgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cdH0sIFtdICk7XG5cblx0Y29uc3QgZGVjb3JhdG9yID0gdXNlTWVtbyggKCkgPT4ge1xuXHRcdHJldHVybiBjcmVhdGVEZWNvcmF0b3IoXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAvXiguKj8oXFxiLWFtb3VudFxcYikpJC8sXG5cdFx0XHRcdHVwZGF0ZXM6ICggdmFsdWUsIG5hbWUsIGZvcm1EYXRhLCBwcmV2RGF0YSApID0+IHtcblx0XHRcdFx0XHRpZiAoIHBhcnNlRmxvYXQoIGZvcm1EYXRhWyBuYW1lIF0gKSA9PT0gcGFyc2VGbG9hdCggcHJldkRhdGFbIG5hbWUgXSApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIERFRkFVTFRfT0JKRUNUO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYWxjdWxhdGVUaWNrZXRQcmljZXMoIGZvcm1EYXRhICk7XG5cdFx0XHRcdFx0cmV0dXJuIERFRkFVTFRfT0JKRUNUO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6IC9eKC4qPyhcXGItdHlwZVxcYikpJC8sXG5cdFx0XHRcdHVwZGF0ZXM6ICggdmFsdWUsIG5hbWUsIGZvcm1EYXRhLCBwcmV2RGF0YSApID0+IHtcblx0XHRcdFx0XHRpZiAoIGZvcm1EYXRhWyBuYW1lIF0gPT09IHByZXZEYXRhWyBuYW1lIF0gKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhbGN1bGF0ZVRpY2tldFByaWNlcyggZm9ybURhdGEgKTtcblx0XHRcdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3RpY2tldFRvdGFsJyxcblx0XHRcdFx0dXBkYXRlczogKCB2YWx1ZSwgbmFtZSwgZm9ybURhdGEsIHByZXZEYXRhICkgPT4ge1xuXHRcdFx0XHRcdGlmICggcGFyc2VGbG9hdCggZm9ybURhdGFbIG5hbWUgXSApID09PSBwYXJzZUZsb2F0KCBwcmV2RGF0YVsgbmFtZSBdICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhbGN1bGF0ZVRpY2tldFByaWNlcyggZm9ybURhdGEgKTtcblx0XHRcdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdCk7XG5cdH0sIFtdICk7XG5cblx0Y29uc3QgY2FsY3VsYXRlVGlja2V0UHJpY2VzID0gdXNlQ2FsbGJhY2soICggZm9ybURhdGEgKSA9PiB7XG5cdFx0Y29uc3QgZm9ybVRvdGFsID0gZm9ybURhdGEucmV2ZXJzZUNhbGN1bGF0ZSA/XG5cdFx0XHRjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2VGcm9tVG90YWwoXG5cdFx0XHRcdGZvcm1EYXRhLFxuXHRcdFx0XHRjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2Vcblx0XHRcdCkgOlxuXHRcdFx0Y2FsY3VsYXRlVGlja2V0VG90YWxGcm9tTW9kaWZpZXJzKFxuXHRcdFx0XHRmb3JtRGF0YSxcblx0XHRcdFx0Y2FsY3VsYXRlVGlja2V0VG90YWxcblx0XHRcdCk7XG5cdFx0c2V0VG90YWxDaGFuZ2luZ1RvKCBmb3JtVG90YWwgKTtcblx0fSwgWyBjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2UsIGNhbGN1bGF0ZVRpY2tldFRvdGFsIF0gKTtcblxuXHRyZXR1cm4ge1xuXHRcdGRlY29yYXRvcixcblx0XHRtdXRhdG9yczogeyB0b3RhbE11dGF0b3IgfSxcblx0XHRjYWxjdWxhdGVUaWNrZXRQcmljZXMsXG5cdFx0c2V0TXV0YXRvckNhbGxiYWNrcyxcblx0fTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1EZWNvcmF0b3I7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZmluZCwgcmV2ZXJzZSwgc29ydEJ5LCBmaXJzdCwgZmlsdGVyLCBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHByaWNlVHlwZU1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IE1vbmV5LCBTaXRlQ3VycmVuY3kgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbmNvbnN0IHsgQkFTRV9QUklDRV9UWVBFUyB9ID0gcHJpY2VUeXBlTW9kZWw7XG5cbmNvbnN0IG5vcm1hbENhc2VzID0gKCBjdXJyZW50VG90YWwsIGFtb3VudCwgaXNQZXJjZW50ICkgPT4gKCB7XG5cdFsgQkFTRV9QUklDRV9UWVBFUy5CQVNFX1BSSUNFIF06ICgpID0+IGN1cnJlbnRUb3RhbCArIGFtb3VudCxcblx0WyBCQVNFX1BSSUNFX1RZUEVTLkRJU0NPVU5UIF06ICgpID0+IGlzUGVyY2VudCA/XG5cdFx0Y3VycmVudFRvdGFsIC0gKCAoIGFtb3VudCAvIDEwMCApICogY3VycmVudFRvdGFsICkgOlxuXHRcdGN1cnJlbnRUb3RhbCAtIGFtb3VudCxcblx0WyBCQVNFX1BSSUNFX1RZUEVTLlNVUkNIQVJHRSBdOiAoKSA9PiBpc1BlcmNlbnQgP1xuXHRcdGN1cnJlbnRUb3RhbCArICggKCBhbW91bnQgLyAxMDAgKSAqIGN1cnJlbnRUb3RhbCApIDpcblx0XHRjdXJyZW50VG90YWwgKyBhbW91bnQsXG5cdFsgQkFTRV9QUklDRV9UWVBFUy5UQVggXTogKCkgPT5cblx0XHRjdXJyZW50VG90YWwgKyAoICggYW1vdW50IC8gMTAwICkgKiBjdXJyZW50VG90YWwgKSxcbn0gKTtcblxuY29uc3QgcmV2ZXJzZUNhc2VzID0gKCBjdXJyZW50VG90YWwsIGFtb3VudCwgaXNQZXJjZW50ICkgPT4gKCB7XG5cdFsgQkFTRV9QUklDRV9UWVBFUy5ESVNDT1VOVCBdOiAoKSA9PiBpc1BlcmNlbnQgP1xuXHRcdGN1cnJlbnRUb3RhbCAvICggKCAxMDAgLSBhbW91bnQgKSAvIDEwMCApIDpcblx0XHRjdXJyZW50VG90YWwgKyBhbW91bnQsXG5cdFsgQkFTRV9QUklDRV9UWVBFUy5TVVJDSEFSR0UgXTogKCkgPT4gaXNQZXJjZW50ID9cblx0XHRjdXJyZW50VG90YWwgLyAoICggMTAwICsgYW1vdW50ICkgLyAxMDAgKSA6XG5cdFx0Y3VycmVudFRvdGFsIC0gYW1vdW50LFxuXHRbIEJBU0VfUFJJQ0VfVFlQRVMuVEFYIF06ICgpID0+IGN1cnJlbnRUb3RhbCAvICggKCAxMDAgKyBhbW91bnQgKSAvIDEwMCApLFxufSApO1xuXG5jb25zdCBnZXRCYXNlUHJpY2UgPSBtZW1vaXplKFxuXHQoIHByaWNlcyApID0+IGZpbmQoIHByaWNlcywgKCBwcmljZSApID0+IHtcblx0XHRyZXR1cm4gcHJpY2UucHJ0SWQgPT09IEJBU0VfUFJJQ0VfVFlQRVMuQkFTRV9QUklDRTtcblx0fSApXG4pO1xuXG5jb25zdCBhY2NydWVBbW91bnQgPSAoIGNhc2VzICkgPT4gKCBkZWZhdWx0Q2FzZSApID0+ICggdHlwZUlkICkgPT5cblx0Y2FzZXMuaGFzT3duUHJvcGVydHkoIHR5cGVJZCApID9cblx0XHRjYXNlc1sgdHlwZUlkIF0oKSA6XG5cdFx0ZGVmYXVsdENhc2U7XG5cbmNvbnN0IGdldFByaWNlVHlwZUZvclByaWNlID0gKCBwcmljZUVudGl0eSwgcHJpY2VUeXBlcyApID0+IHtcblx0Y29uc3QgcHJpY2VUeXBlID0gZmluZCggcHJpY2VUeXBlcywgWyAnaWQnLCBwcmljZUVudGl0eS5QUlRfSUQgXSApO1xuXHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBwcmljZVR5cGUsICdwcmljZV90eXBlJyApICkge1xuXHRcdHJldHVybiBwcmljZVR5cGU7XG5cdH1cblx0cmV0dXJuIGZpcnN0KCBmaWx0ZXIoIHByaWNlVHlwZXMsICggcHQgKSA9PiBwdC5pZCAhPT0gMSApICk7XG59O1xuXG5jb25zdCB1c2VUaWNrZXRQcmljZUNhbGN1bGF0b3JzID0gKCBwcmljZVR5cGVFbnRpdGllcyApID0+IHtcblx0Y29uc3QgY2FsY3VsYXRlVGlja2V0VG90YWwgPSB1c2VDYWxsYmFjayggKCB0b3RhbCA9IDAsIHByaWNlRW50aXRpZXMgKSA9PiB7XG5cdFx0cHJpY2VFbnRpdGllcyA9IHNvcnRCeSggcHJpY2VFbnRpdGllcywgWyAnb3JkZXInLCAnaWQnIF0gKTtcblx0XHRyZXR1cm4gcHJpY2VFbnRpdGllcy5yZWR1Y2UoICggbmV3VG90YWwsIHByaWNlRW50aXR5ICkgPT4ge1xuXHRcdFx0Y29uc3QgcHJpY2VUeXBlRW50aXR5ID0gZ2V0UHJpY2VUeXBlRm9yUHJpY2UoIHByaWNlRW50aXR5LCBwcmljZVR5cGVFbnRpdGllcyApO1xuXHRcdFx0cmV0dXJuIGFjY3J1ZUFtb3VudCggbm9ybWFsQ2FzZXMoXG5cdFx0XHRcdG5ld1RvdGFsLFxuXHRcdFx0XHRwcmljZUVudGl0eS5hbW91bnQsXG5cdFx0XHRcdHByaWNlVHlwZUVudGl0eS5pc1BlcmNlbnRcblx0XHRcdCkgKSggbmV3VG90YWwgKSggcHJpY2VUeXBlRW50aXR5LnBidElkICk7XG5cdFx0fSwgdG90YWwgKTtcblx0fSwgWyBwcmljZVR5cGVFbnRpdGllcyBdICk7XG5cblx0Y29uc3QgY2FsY3VsYXRlVGlja2V0QmFzZVByaWNlID0gdXNlQ2FsbGJhY2soIChcblx0XHR0b3RhbCxcblx0XHRwcmljZUVudGl0aWVzLFxuXHRcdHVwZGF0ZUJhc2VQcmljZSA9IGZhbHNlXG5cdCkgPT4ge1xuXHRcdGlmICggaXNFbXB0eSggcHJpY2VFbnRpdGllcyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwcmljZUVudGl0aWVzID0gcmV2ZXJzZSggc29ydEJ5KCBwcmljZUVudGl0aWVzLCBbICdvcmRlcicsICdpZCcgXSApICk7XG5cdFx0Y29uc3QgYmFzZVByaWNlVG90YWwgPSBwcmljZUVudGl0aWVzLnJlZHVjZSggKCBuZXdUb3RhbCwgcHJpY2VFbnRpdHkgKSA9PiB7XG5cdFx0XHRjb25zdCBwcmljZVR5cGVFbnRpdHkgPSBnZXRQcmljZVR5cGVGb3JQcmljZSggcHJpY2VFbnRpdHksIHByaWNlVHlwZUVudGl0aWVzICk7XG5cdFx0XHRjb25zdCBhbW91bnQgPSBwcmljZUVudGl0eS5hbW91bnQgaW5zdGFuY2VvZiBNb25leSA/XG5cdFx0XHRcdHByaWNlRW50aXR5LmFtb3VudC50b051bWJlcigpIDpcblx0XHRcdFx0cHJpY2VFbnRpdHkuYW1vdW50O1xuXHRcdFx0cmV0dXJuIGFjY3J1ZUFtb3VudCggcmV2ZXJzZUNhc2VzKFxuXHRcdFx0XHRuZXdUb3RhbCxcblx0XHRcdFx0YW1vdW50LFxuXHRcdFx0XHRwcmljZVR5cGVFbnRpdHkuaXNQZXJjZW50XG5cdFx0XHQpICkoIG5ld1RvdGFsICkoIHByaWNlVHlwZUVudGl0eS5wYnRJZCApO1xuXHRcdH0sIHRvdGFsICk7XG5cdFx0aWYgKCB1cGRhdGVCYXNlUHJpY2UgKSB7XG5cdFx0XHRjb25zdCBiYXNlUHJpY2UgPSBnZXRCYXNlUHJpY2UoIHByaWNlRW50aXRpZXMgKTtcblx0XHRcdGJhc2VQcmljZS5hbW91bnQgPSBuZXcgTW9uZXkoIGJhc2VQcmljZVRvdGFsLCBTaXRlQ3VycmVuY3kgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2VQcmljZVRvdGFsO1xuXHR9LCBbIHByaWNlVHlwZUVudGl0aWVzIF0gKTtcblxuXHRjb25zdCBjYWxjdWxhdGVUaWNrZXRUb3RhbHMgPSB1c2VDYWxsYmFjayggKCB0b3RhbCwgcHJpY2VFbnRpdGllcywgcmV2ZXJzZUNhbGN1bGF0ZSApID0+IHtcblx0XHRyZXR1cm4gcmV2ZXJzZUNhbGN1bGF0ZSA/XG5cdFx0XHRjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2UoIHRvdGFsLCBwcmljZUVudGl0aWVzICkgOlxuXHRcdFx0Y2FsY3VsYXRlVGlja2V0VG90YWwoIHRvdGFsLCBwcmljZUVudGl0aWVzICk7XG5cdH0gKTtcblxuXHRyZXR1cm4ge1xuXHRcdGNhbGN1bGF0ZVRpY2tldEJhc2VQcmljZSxcblx0XHRjYWxjdWxhdGVUaWNrZXRUb3RhbCxcblx0XHRjYWxjdWxhdGVUaWNrZXRUb3RhbHMsXG5cdH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VUaWNrZXRQcmljZUNhbGN1bGF0b3JzO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGNvbXBvc2UsIHdpdGhTdGF0ZSwgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgd2l0aERpc3BhdGNoIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBfXywgX3gsIHNwcmludGYgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IHdpdGhFZGl0b3JNb2RhbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VkaXRvci1ob2NzJztcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHdpdGhUaWNrZXRQcmljZUVudGl0aWVzLCB3aXRoUHJpY2VUeXBlRW50aXRpZXMgfSBmcm9tICcuLi8uLi8uLi9ob2NzJztcbmltcG9ydCB1c2VUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtRGVjb3JhdG9yIGZyb20gJy4vdXNlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWZvcm0tZGVjb3JhdG9yJztcbmltcG9ydCB7XG5cdFRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm0sXG5cdHRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1EYXRhTWFwLFxufSBmcm9tICcuLyc7XG5cbi8qKlxuICogVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybU1vZGFsXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmNvbnN0IFRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1Nb2RhbCA9IHdpdGhFZGl0b3JNb2RhbCgge1xuXHR0aXRsZTogX18oICdUaWNrZXQgUHJpY2UgQ2FsY3VsYXRvcicsICdldmVudF9lc3ByZXNzbycgKSxcblx0Y3VzdG9tQ2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1tb2RhbCcsXG5cdGNsb3NlQnV0dG9uTGFiZWw6IF9fKCAnY2xvc2UgdGlja2V0IHByaWNlIGNhbGN1bGF0b3InLFxuXHRcdCdldmVudF9lc3ByZXNzbydcblx0KSxcbn0gKSggKCB7XG5cdHRpY2tldEVudGl0eSxcblx0cHJpY2VFbnRpdGllcyxcblx0cHJpY2VFbnRpdGllc0xvYWRlZCxcblx0cHJpY2VUeXBlRW50aXRpZXMsXG5cdHByaWNlVHlwZUVudGl0aWVzTG9hZGVkLFxuXHQuLi5leHRyYVByb3BzXG59ICkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGVjb3JhdG9yLFxuXHRcdGNhbGN1bGF0ZVRpY2tldFByaWNlcyxcblx0XHRzZXRNdXRhdG9yQ2FsbGJhY2tzLFxuXHRcdG11dGF0b3JzLFxuXHR9ID0gdXNlVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybURlY29yYXRvcihcblx0XHRwcmljZVR5cGVFbnRpdGllcyxcblx0XHRwcmljZVR5cGVFbnRpdGllc0xvYWRlZFxuXHQpO1xuXHRjb25zdCBbIGZvcm1EYXRhLCBzZXRGb3JtRGF0YSBdID0gdXNlU3RhdGUoIHt9ICk7XG5cdGNvbnN0IFsgcmV2ZXJzZUNhbGN1bGF0ZSwgc2V0UmV2ZXJzZUNhbGN1bGF0ZSBdID0gdXNlU3RhdGUoIGZhbHNlICk7XG5cblx0dXNlRWZmZWN0KCAoKSA9PiB7XG5cdFx0Y29uc3QgbmV3Rm9ybURhdGEgPSB0aWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtRGF0YU1hcChcblx0XHRcdHRpY2tldEVudGl0eSxcblx0XHRcdHByaWNlRW50aXRpZXMsXG5cdFx0XHRyZXZlcnNlQ2FsY3VsYXRlXG5cdFx0KTtcblx0XHRjb25zdCB0b3RhbHMgPSBjYWxjdWxhdGVUaWNrZXRQcmljZXMoIG5ld0Zvcm1EYXRhICk7XG5cdFx0c2V0Rm9ybURhdGEoIHsgLi4ubmV3Rm9ybURhdGEsIC4uLnRvdGFscyB9ICk7XG5cdH0sIFsgdGlja2V0RW50aXR5LCBwcmljZUVudGl0aWVzLCByZXZlcnNlQ2FsY3VsYXRlLCBjYWxjdWxhdGVUaWNrZXRQcmljZXMgXSApO1xuXG5cdGNvbnN0IGxvYWRpbmcgPSAhICggcHJpY2VFbnRpdGllc0xvYWRlZCAmJiBwcmljZVR5cGVFbnRpdGllc0xvYWRlZCApO1xuXHRjb25zdCBmb3JtUHJvcHMgPSBsb2FkaW5nID9cblx0XHR7IGxvYWRpbmcgfSA6XG5cdFx0e1xuXHRcdFx0bG9hZGluZyxcblx0XHRcdHRpY2tldEVudGl0eSxcblx0XHRcdHByaWNlRW50aXRpZXMsXG5cdFx0XHRwcmljZVR5cGVFbnRpdGllcyxcblx0XHRcdGZvcm1EYXRhLFxuXHRcdH07XG5cblx0cmV0dXJuIChcblx0XHQ8VGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybVxuXHRcdFx0eyAuLi5mb3JtUHJvcHMgfVxuXHRcdFx0ZGVjb3JhdG9ycz17IGRlY29yYXRvciB9XG5cdFx0XHRtdXRhdG9ycz17IG11dGF0b3JzIH1cblx0XHRcdHNldE11dGF0b3JDYWxsYmFja3M9eyBzZXRNdXRhdG9yQ2FsbGJhY2tzIH1cblx0XHRcdHNldFJldmVyc2VDYWxjdWxhdGU9eyBzZXRSZXZlcnNlQ2FsY3VsYXRlIH1cblx0XHRcdGxvYWRIYW5kbGVyPXsgbnVsbCB9XG5cdFx0XHRzdWJtaXRIYW5kbGVyPXsgbnVsbCB9XG5cdFx0XHRyZXNldEhhbmRsZXI9eyBudWxsIH1cblx0XHRcdGxvYWRpbmdOb3RpY2U9e1xuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdF94KFxuXHRcdFx0XHRcdFx0J2xvYWRpbmcgdGlja2V0IHByaWNlcyVzJyxcblx0XHRcdFx0XHRcdCdsb2FkaW5nIHRpY2tldCBwcmljZXMuLi4nLFxuXHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggJzgyMzAnIClcblx0XHRcdFx0KVxuXHRcdFx0fVxuXHRcdFx0eyAuLi5leHRyYVByb3BzIH1cblx0XHQvPlxuXHQpO1xufSApO1xuXG4vKlxuICogRW5oYW5jZWQgVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybSB3aXRoIE1vZGFsXG4gKiB3aXRoU2VsZWN0VGlja2V0UHJpY2VzQW5kUHJpY2VUeXBlc1xuICovXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCggY29tcG9zZSggW1xuXHR3aXRoUHJpY2VUeXBlRW50aXRpZXMsXG5cdHdpdGhUaWNrZXRQcmljZUVudGl0aWVzLFxuXHR3aXRoU3RhdGUoIHsgZm9ybUNoYW5nZXM6IGZhbHNlIH0gKSxcblx0d2l0aERpc3BhdGNoKCAoIGRpc3BhdGNoLCBvd25Qcm9wcyApID0+IHtcblx0XHRjb25zdCB7XG5cdFx0XHRzZXRTdGF0ZSxcblx0XHRcdHByaWNlRW50aXRpZXMsXG5cdFx0fSA9IG93blByb3BzO1xuXHRcdGNvbnN0IHtcblx0XHRcdGNyZWF0ZUVudGl0eSxcblx0XHRcdGNyZWF0ZVJlbGF0aW9uLFxuXHRcdFx0cmVtb3ZlUmVsYXRpb25Gb3JFbnRpdHksXG5cdFx0XHR0cmFzaEVudGl0eUJ5SWQsXG5cdFx0fSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdGNvbnN0IGFkZFByaWNlTW9kaWZpZXIgPSBhc3luYyAoIHRpY2tldEVudGl0eSApID0+IHtcblx0XHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcmljZU1vZGlmaWVyID0gYXdhaXQgY3JlYXRlRW50aXR5KFxuXHRcdFx0XHQncHJpY2UnLFxuXHRcdFx0XHR7IFBSQ19vcmRlcjogcHJpY2VFbnRpdGllcy5sZW5ndGggKyAxIH1cblx0XHRcdCk7XG5cdFx0XHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBwcmljZU1vZGlmaWVyLCAncHJpY2UnICkgKSB7XG5cdFx0XHRcdGNyZWF0ZVJlbGF0aW9uKCAndGlja2V0JywgdGlja2V0RW50aXR5LmlkLCAncHJpY2UnLCBwcmljZU1vZGlmaWVyICk7XG5cdFx0XHRcdHNldFN0YXRlKCB7IGZvcm1DaGFuZ2VzOiB0cnVlIH0gKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IHRyYXNoUHJpY2VNb2RpZmllciA9IGFzeW5jICggcHJpY2VNb2RpZmllciwgdGlja2V0RW50aXR5ICkgPT4ge1xuXHRcdFx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBwcmljZU1vZGlmaWVyLCAncHJpY2UnICkgKSB7XG5cdFx0XHRcdEVycm9yKFxuXHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0J1VuYWJsZSB0byBwZXJmb3JtIGRlbGV0aW9uIGJlY2F1c2UgYW4gaW52YWxpZCBQcmljZScgK1xuXHRcdFx0XHRcdFx0JyBFbnRpdHkgd2FzIHN1cHBsaWVkIGJ5IHRoZSBUaWNrZXQgUHJpY2UgQ2FsY3VsYXRvci4nLFxuXHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksICd0aWNrZXQnICkgKSB7XG5cdFx0XHRcdEVycm9yKFxuXHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0J1VuYWJsZSB0byBwZXJmb3JtIGRlbGV0aW9uIGJlY2F1c2UgYW4gaW52YWxpZCBUaWNrZXQnICtcblx0XHRcdFx0XHRcdCcgRW50aXR5IHdhcyBzdXBwbGllZCBieSB0aGUgVGlja2V0IFByaWNlIENhbGN1bGF0b3IuJyxcblx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHJlbW92ZVJlbGF0aW9uRm9yRW50aXR5KFxuXHRcdFx0XHQndGlja2V0Jyxcblx0XHRcdFx0dGlja2V0RW50aXR5LmlkLFxuXHRcdFx0XHQncHJpY2UnLFxuXHRcdFx0XHRwcmljZU1vZGlmaWVyLmlkXG5cdFx0XHQpO1xuXHRcdFx0dHJhc2hFbnRpdHlCeUlkKCAncHJpY2UnLCBwcmljZU1vZGlmaWVyLmlkICk7XG5cdFx0XHRzZXRTdGF0ZSggeyBmb3JtQ2hhbmdlczogdHJ1ZSB9ICk7XG5cdFx0fTtcblx0XHRyZXR1cm4geyBhZGRQcmljZU1vZGlmaWVyLCB0cmFzaFByaWNlTW9kaWZpZXIgfTtcblx0fSApLFxuXHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiAoIHByb3BzICkgPT4ge1xuXHRcdGNvbnN0IFsgc2hvd0NhbGN1bGF0b3IsIHNldFNob3dDYWxjdWxhdG9yIF0gPSB1c2VTdGF0ZSggZmFsc2UgKTtcblx0XHRjb25zdCB0b2dnbGVDYWxjdWxhdG9yID0gdXNlQ2FsbGJhY2soICgpID0+IHtcblx0XHRcdHNldFNob3dDYWxjdWxhdG9yKCAoIHByZXZTaG93Q2FsY3VsYXRvciApID0+IHtcblx0XHRcdFx0cmV0dXJuICEgcHJldlNob3dDYWxjdWxhdG9yO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gPEZyYWdtZW50PlxuXHRcdFx0PFdyYXBwZWRDb21wb25lbnRcblx0XHRcdFx0eyAuLi5wcm9wcyB9XG5cdFx0XHRcdHRvZ2dsZUNhbGN1bGF0b3I9eyB0b2dnbGVDYWxjdWxhdG9yIH1cblx0XHRcdC8+XG5cdFx0XHQ8VGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybU1vZGFsXG5cdFx0XHRcdHsgLi4ucHJvcHMgfVxuXHRcdFx0XHRlZGl0b3JPcGVuPXsgc2hvd0NhbGN1bGF0b3IgfVxuXHRcdFx0XHR0b2dnbGVFZGl0b3I9eyB0b2dnbGVDYWxjdWxhdG9yIH1cblx0XHRcdC8+XG5cdFx0PC9GcmFnbWVudD47XG5cdH0sXG5dICksICd3aXRoVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybU1vZGFsJyApO1xuXG4iLCJleHBvcnQgKiBmcm9tICcuL2VkaXRvci10aWNrZXQnO1xuIiwiaW1wb3J0ICcuL2VkaXRvci5jc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudHMnO1xuIiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlczsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mXCIpO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG4gIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdDsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0OyIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL2RlZmluZVByb3BlcnR5XCIpO1xuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3duS2V5cyA9IG93bktleXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBvd25LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFNwcmVhZDsiLCJ2YXIgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSA9IHJlcXVpcmUoXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIik7XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcbiAgdmFyIGtleSwgaTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07XG4gICAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXM7IiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2U7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi4vaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIik7XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm47IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2Y7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXlMaW1pdCA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0XCIpO1xuXG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0XCIpO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2xpY2VkVG9BcnJheTsiLCJmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcikgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCJpbXBvcnQgeyBnZXRJbiB9IGZyb20gJ2ZpbmFsLWZvcm0nO1xuXG52YXIgaXNQcm9taXNlID0gKGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XG59KTtcblxuLy8gICAgICBcblxudmFyIHRyaXBsZUVxdWFscyA9IGZ1bmN0aW9uIHRyaXBsZUVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufTtcblxudmFyIGNyZWF0ZURlY29yYXRvciA9IGZ1bmN0aW9uIGNyZWF0ZURlY29yYXRvcigpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNhbGN1bGF0aW9ucyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBjYWxjdWxhdGlvbnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSB7fTtcbiAgICB2YXIgdW5zdWJzY3JpYmUgPSBmb3JtLnN1YnNjcmliZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHZhbHVlcyA9IF9yZWYudmFsdWVzO1xuICAgICAgZm9ybS5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBydW5VcGRhdGVzID0gZnVuY3Rpb24gcnVuVXBkYXRlcyhmaWVsZCwgaXNFcXVhbCwgdXBkYXRlcykge1xuICAgICAgICAgIHZhciBuZXh0ID0gdmFsdWVzICYmIGdldEluKHZhbHVlcywgZmllbGQpO1xuICAgICAgICAgIHZhciBwcmV2aW91cyA9IHByZXZpb3VzVmFsdWVzICYmIGdldEluKHByZXZpb3VzVmFsdWVzLCBmaWVsZCk7XG5cbiAgICAgICAgICBpZiAoIWlzRXF1YWwobmV4dCwgcHJldmlvdXMpKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVwZGF0ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB1cGRhdGVzKG5leHQsIGZpZWxkLCB2YWx1ZXMsIHByZXZpb3VzVmFsdWVzKTtcblxuICAgICAgICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdHMpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy50aGVuKGZ1bmN0aW9uIChyZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocmVzb2x2ZWQpLmZvckVhY2goZnVuY3Rpb24gKGRlc3RGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtLmNoYW5nZShkZXN0RmllbGQsIHJlc29sdmVkW2Rlc3RGaWVsZF0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoZGVzdEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICBmb3JtLmNoYW5nZShkZXN0RmllbGQsIHJlc3VsdHNbZGVzdEZpZWxkXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGRlc3RGaWVsZCkge1xuICAgICAgICAgICAgICAgIHZhciB1cGRhdGUgPSB1cGRhdGVzW2Rlc3RGaWVsZF07XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHVwZGF0ZShuZXh0LCB2YWx1ZXMsIHByZXZpb3VzVmFsdWVzKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0LnRoZW4oZnVuY3Rpb24gKHJlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm0uY2hhbmdlKGRlc3RGaWVsZCwgcmVzb2x2ZWQpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGZvcm0uY2hhbmdlKGRlc3RGaWVsZCwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgZmllbGRzID0gZm9ybS5nZXRSZWdpc3RlcmVkRmllbGRzKCk7XG4gICAgICAgIGNhbGN1bGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICAgIHZhciBmaWVsZCA9IF9yZWYyLmZpZWxkLFxuICAgICAgICAgICAgICBpc0VxdWFsID0gX3JlZjIuaXNFcXVhbCxcbiAgICAgICAgICAgICAgdXBkYXRlcyA9IF9yZWYyLnVwZGF0ZXM7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcnVuVXBkYXRlcyhmaWVsZCwgaXNFcXVhbCB8fCB0cmlwbGVFcXVhbHMsIHVwZGF0ZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBmaWVsZCBpcyBhIGVpdGhlciBhcnJheSBvciByZWdleFxuICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB+ZmllbGQuaW5kZXhPZihuYW1lKSB8fCBmaWVsZC5maW5kSW5kZXgoZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBmLnRlc3QobmFtZSk7XG4gICAgICAgICAgICAgIH0pICE9PSAtMTtcbiAgICAgICAgICAgIH0gOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmllbGQudGVzdChuYW1lKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGROYW1lKSB7XG4gICAgICAgICAgICAgIGlmIChtYXRjaGVzKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBydW5VcGRhdGVzKGZpZWxkTmFtZSwgaXNFcXVhbCB8fCB0cmlwbGVFcXVhbHMsIHVwZGF0ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBwcmV2aW91c1ZhbHVlcyA9IHZhbHVlcztcbiAgICAgIH0pO1xuICAgIH0sIHtcbiAgICAgIHZhbHVlczogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgfTtcbn07XG5cbi8vXG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZURlY29yYXRvcjtcbiIsImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJztcblxuLy8gICAgICBcbnZhciB0b1BhdGggPSBmdW5jdGlvbiB0b1BhdGgoa2V5KSB7XG4gIGlmIChrZXkgPT09IG51bGwgfHwga2V5ID09PSB1bmRlZmluZWQgfHwgIWtleS5sZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvUGF0aCgpIGV4cGVjdHMgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIHJldHVybiBrZXkuc3BsaXQoL1suW1xcXV0rLykuZmlsdGVyKEJvb2xlYW4pO1xufTtcblxuLy8gICAgICBcblxudmFyIGdldEluID0gZnVuY3Rpb24gZ2V0SW4oc3RhdGUsIGNvbXBsZXhLZXkpIHtcbiAgLy8gSW50ZW50aW9uYWxseSB1c2luZyBpdGVyYXRpb24gcmF0aGVyIHRoYW4gcmVjdXJzaW9uXG4gIHZhciBwYXRoID0gdG9QYXRoKGNvbXBsZXhLZXkpO1xuICB2YXIgY3VycmVudCA9IHN0YXRlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuXG4gICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fCBjdXJyZW50ID09PSBudWxsIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGN1cnJlbnQpICYmIGlzTmFOKGtleSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50O1xufTtcblxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7IHZhciBrZXkgPSBfdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTsgcmV0dXJuIHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTsgfVxuXG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHsgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0OyB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmIChwcmltICE9PSB1bmRlZmluZWQpIHsgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7IGlmICh0eXBlb2YgcmVzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7IH1cblxudmFyIHNldEluUmVjdXJzb3IgPSBmdW5jdGlvbiBzZXRJblJlY3Vyc29yKGN1cnJlbnQsIGluZGV4LCBwYXRoLCB2YWx1ZSwgZGVzdHJveUFycmF5cykge1xuICBpZiAoaW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcbiAgICAvLyBlbmQgb2YgcmVjdXJzaW9uXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIGtleSA9IHBhdGhbaW5kZXhdOyAvLyBkZXRlcm1pbmUgdHlwZSBvZiBrZXlcblxuICBpZiAoaXNOYU4oa2V5KSkge1xuICAgIHZhciBfZXh0ZW5kczI7XG5cbiAgICAvLyBvYmplY3Qgc2V0XG4gICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fCBjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICB2YXIgX3JlZjtcblxuICAgICAgLy8gcmVjdXJzZVxuICAgICAgdmFyIF9yZXN1bHQyID0gc2V0SW5SZWN1cnNvcih1bmRlZmluZWQsIGluZGV4ICsgMSwgcGF0aCwgdmFsdWUsIGRlc3Ryb3lBcnJheXMpOyAvLyBkZWxldGUgb3IgY3JlYXRlIGFuIG9iamVjdFxuXG5cbiAgICAgIHJldHVybiBfcmVzdWx0MiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogKF9yZWYgPSB7fSwgX3JlZltrZXldID0gX3Jlc3VsdDIsIF9yZWYpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgYSBub24tbnVtZXJpYyBwcm9wZXJ0eSBvbiBhbiBhcnJheScpO1xuICAgIH0gLy8gY3VycmVudCBleGlzdHMsIHNvIG1ha2UgYSBjb3B5IG9mIGFsbCBpdHMgdmFsdWVzLCBhbmQgYWRkL3VwZGF0ZSB0aGUgbmV3IG9uZVxuXG5cbiAgICB2YXIgX3Jlc3VsdCA9IHNldEluUmVjdXJzb3IoY3VycmVudFtrZXldLCBpbmRleCArIDEsIHBhdGgsIHZhbHVlLCBkZXN0cm95QXJyYXlzKTtcblxuICAgIGlmIChfcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBudW1LZXlzID0gT2JqZWN0LmtleXMoY3VycmVudCkubGVuZ3RoO1xuXG4gICAgICBpZiAoY3VycmVudFtrZXldID09PSB1bmRlZmluZWQgJiYgbnVtS2V5cyA9PT0gMCkge1xuICAgICAgICAvLyBvYmplY3Qgd2FzIGFscmVhZHkgZW1wdHlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnRba2V5XSAhPT0gdW5kZWZpbmVkICYmIG51bUtleXMgPD0gMSkge1xuICAgICAgICAvLyBvbmx5IGtleSB3ZSBoYWQgd2FzIHRoZSBvbmUgd2UgYXJlIGRlbGV0aW5nXG4gICAgICAgIGlmICghaXNOYU4ocGF0aFtpbmRleCAtIDFdKSAmJiAhZGVzdHJveUFycmF5cykge1xuICAgICAgICAgIC8vIHdlIGFyZSBpbiBhbiBhcnJheSwgc28gcmV0dXJuIGFuIGVtcHR5IG9iamVjdFxuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBfcmVtb3ZlZCA9IGN1cnJlbnRba2V5XSxcbiAgICAgICAgICBfZmluYWwgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShjdXJyZW50LCBba2V5XS5tYXAoX3RvUHJvcGVydHlLZXkpKTtcblxuICAgICAgcmV0dXJuIF9maW5hbDtcbiAgICB9IC8vIHNldCByZXN1bHQgaW4ga2V5XG5cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgY3VycmVudCwgKF9leHRlbmRzMiA9IHt9LCBfZXh0ZW5kczJba2V5XSA9IF9yZXN1bHQsIF9leHRlbmRzMikpO1xuICB9IC8vIGFycmF5IHNldFxuXG5cbiAgdmFyIG51bWVyaWNLZXkgPSBOdW1iZXIoa2V5KTtcblxuICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyByZWN1cnNlXG4gICAgdmFyIF9yZXN1bHQzID0gc2V0SW5SZWN1cnNvcih1bmRlZmluZWQsIGluZGV4ICsgMSwgcGF0aCwgdmFsdWUsIGRlc3Ryb3lBcnJheXMpOyAvLyBpZiBub3RoaW5nIHJldHVybmVkLCBkZWxldGUgaXRcblxuXG4gICAgaWYgKF9yZXN1bHQzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSAvLyBjcmVhdGUgYW4gYXJyYXlcblxuXG4gICAgdmFyIF9hcnJheSA9IFtdO1xuICAgIF9hcnJheVtudW1lcmljS2V5XSA9IF9yZXN1bHQzO1xuICAgIHJldHVybiBfYXJyYXk7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgYSBudW1lcmljIHByb3BlcnR5IG9uIGFuIG9iamVjdCcpO1xuICB9IC8vIHJlY3Vyc2VcblxuXG4gIHZhciBleGlzdGluZ1ZhbHVlID0gY3VycmVudFtudW1lcmljS2V5XTtcbiAgdmFyIHJlc3VsdCA9IHNldEluUmVjdXJzb3IoZXhpc3RpbmdWYWx1ZSwgaW5kZXggKyAxLCBwYXRoLCB2YWx1ZSwgZGVzdHJveUFycmF5cyk7IC8vIGN1cnJlbnQgZXhpc3RzLCBzbyBtYWtlIGEgY29weSBvZiBhbGwgaXRzIHZhbHVlcywgYW5kIGFkZC91cGRhdGUgdGhlIG5ldyBvbmVcblxuICB2YXIgYXJyYXkgPSBbXS5jb25jYXQoY3VycmVudCk7XG5cbiAgaWYgKGRlc3Ryb3lBcnJheXMgJiYgcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheS5zcGxpY2UobnVtZXJpY0tleSwgMSk7XG5cbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhcnJheVtudW1lcmljS2V5XSA9IHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn07XG5cbnZhciBzZXRJbiA9IGZ1bmN0aW9uIHNldEluKHN0YXRlLCBrZXksIHZhbHVlLCBkZXN0cm95QXJyYXlzKSB7XG4gIGlmIChkZXN0cm95QXJyYXlzID09PSB2b2lkIDApIHtcbiAgICBkZXN0cm95QXJyYXlzID0gZmFsc2U7XG4gIH1cblxuICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCB8fCBzdGF0ZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjYWxsIHNldEluKCkgd2l0aCBcIiArIFN0cmluZyhzdGF0ZSkgKyBcIiBzdGF0ZVwiKTtcbiAgfVxuXG4gIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY2FsbCBzZXRJbigpIHdpdGggXCIgKyBTdHJpbmcoa2V5KSArIFwiIGtleVwiKTtcbiAgfSAvLyBSZWN1cnNpdmUgZnVuY3Rpb24gbmVlZHMgdG8gYWNjZXB0IGFuZCByZXR1cm4gU3RhdGUsIGJ1dCBwdWJsaWMgQVBJIHNob3VsZFxuICAvLyBvbmx5IGRlYWwgd2l0aCBPYmplY3RzXG5cblxuICByZXR1cm4gc2V0SW5SZWN1cnNvcihzdGF0ZSwgMCwgdG9QYXRoKGtleSksIHZhbHVlLCBkZXN0cm95QXJyYXlzKTtcbn07XG5cbnZhciBGT1JNX0VSUk9SID0gJ0ZJTkFMX0ZPUk0vZm9ybS1lcnJvcic7XG52YXIgQVJSQVlfRVJST1IgPSAnRklOQUxfRk9STS9hcnJheS1lcnJvcic7XG5cbi8vICAgICAgXG4vKipcbiAqIENvbnZlcnRzIGludGVybmFsIGZpZWxkIHN0YXRlIHRvIHB1Ymxpc2hlZCBmaWVsZCBzdGF0ZVxuICovXG5cbnZhciBwdWJsaXNoRmllbGRTdGF0ZSA9IGZ1bmN0aW9uIHB1Ymxpc2hGaWVsZFN0YXRlKGZvcm1TdGF0ZSwgZmllbGQpIHtcbiAgdmFyIGVycm9ycyA9IGZvcm1TdGF0ZS5lcnJvcnMsXG4gICAgICBpbml0aWFsVmFsdWVzID0gZm9ybVN0YXRlLmluaXRpYWxWYWx1ZXMsXG4gICAgICBsYXN0U3VibWl0dGVkVmFsdWVzID0gZm9ybVN0YXRlLmxhc3RTdWJtaXR0ZWRWYWx1ZXMsXG4gICAgICBzdWJtaXRFcnJvcnMgPSBmb3JtU3RhdGUuc3VibWl0RXJyb3JzLFxuICAgICAgc3VibWl0RmFpbGVkID0gZm9ybVN0YXRlLnN1Ym1pdEZhaWxlZCxcbiAgICAgIHN1Ym1pdFN1Y2NlZWRlZCA9IGZvcm1TdGF0ZS5zdWJtaXRTdWNjZWVkZWQsXG4gICAgICBzdWJtaXR0aW5nID0gZm9ybVN0YXRlLnN1Ym1pdHRpbmcsXG4gICAgICB2YWx1ZXMgPSBmb3JtU3RhdGUudmFsdWVzO1xuICB2YXIgYWN0aXZlID0gZmllbGQuYWN0aXZlLFxuICAgICAgYmx1ciA9IGZpZWxkLmJsdXIsXG4gICAgICBjaGFuZ2UgPSBmaWVsZC5jaGFuZ2UsXG4gICAgICBkYXRhID0gZmllbGQuZGF0YSxcbiAgICAgIGZvY3VzID0gZmllbGQuZm9jdXMsXG4gICAgICBtb2RpZmllZCA9IGZpZWxkLm1vZGlmaWVkLFxuICAgICAgbmFtZSA9IGZpZWxkLm5hbWUsXG4gICAgICB0b3VjaGVkID0gZmllbGQudG91Y2hlZCxcbiAgICAgIHZpc2l0ZWQgPSBmaWVsZC52aXNpdGVkO1xuICB2YXIgdmFsdWUgPSBnZXRJbih2YWx1ZXMsIG5hbWUpO1xuICB2YXIgZXJyb3IgPSBnZXRJbihlcnJvcnMsIG5hbWUpO1xuXG4gIGlmIChlcnJvciAmJiBlcnJvcltBUlJBWV9FUlJPUl0pIHtcbiAgICBlcnJvciA9IGVycm9yW0FSUkFZX0VSUk9SXTtcbiAgfVxuXG4gIHZhciBzdWJtaXRFcnJvciA9IHN1Ym1pdEVycm9ycyAmJiBnZXRJbihzdWJtaXRFcnJvcnMsIG5hbWUpO1xuICB2YXIgaW5pdGlhbCA9IGluaXRpYWxWYWx1ZXMgJiYgZ2V0SW4oaW5pdGlhbFZhbHVlcywgbmFtZSk7XG4gIHZhciBwcmlzdGluZSA9IGZpZWxkLmlzRXF1YWwoaW5pdGlhbCwgdmFsdWUpO1xuICB2YXIgZGlydHlTaW5jZUxhc3RTdWJtaXQgPSAhIShsYXN0U3VibWl0dGVkVmFsdWVzICYmICFmaWVsZC5pc0VxdWFsKGdldEluKGxhc3RTdWJtaXR0ZWRWYWx1ZXMsIG5hbWUpLCB2YWx1ZSkpO1xuICB2YXIgdmFsaWQgPSAhZXJyb3IgJiYgIXN1Ym1pdEVycm9yO1xuICByZXR1cm4ge1xuICAgIGFjdGl2ZTogYWN0aXZlLFxuICAgIGJsdXI6IGJsdXIsXG4gICAgY2hhbmdlOiBjaGFuZ2UsXG4gICAgZGF0YTogZGF0YSxcbiAgICBkaXJ0eTogIXByaXN0aW5lLFxuICAgIGRpcnR5U2luY2VMYXN0U3VibWl0OiBkaXJ0eVNpbmNlTGFzdFN1Ym1pdCxcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgZm9jdXM6IGZvY3VzLFxuICAgIGluaXRpYWw6IGluaXRpYWwsXG4gICAgaW52YWxpZDogIXZhbGlkLFxuICAgIGxlbmd0aDogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5sZW5ndGggOiB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IG1vZGlmaWVkLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcHJpc3RpbmU6IHByaXN0aW5lLFxuICAgIHN1Ym1pdEVycm9yOiBzdWJtaXRFcnJvcixcbiAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcbiAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcbiAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxuICAgIHRvdWNoZWQ6IHRvdWNoZWQsXG4gICAgdmFsaWQ6IHZhbGlkLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB2aXNpdGVkOiB2aXNpdGVkXG4gIH07XG59O1xuXG4vLyAgICAgIFxudmFyIGZpZWxkU3Vic2NyaXB0aW9uSXRlbXMgPSBbJ2FjdGl2ZScsICdkYXRhJywgJ2RpcnR5JywgJ2RpcnR5U2luY2VMYXN0U3VibWl0JywgJ2Vycm9yJywgJ2luaXRpYWwnLCAnaW52YWxpZCcsICdsZW5ndGgnLCAnbW9kaWZpZWQnLCAncHJpc3RpbmUnLCAnc3VibWl0RXJyb3InLCAnc3VibWl0RmFpbGVkJywgJ3N1Ym1pdFN1Y2NlZWRlZCcsICdzdWJtaXR0aW5nJywgJ3RvdWNoZWQnLCAndmFsaWQnLCAndmFsdWUnLCAndmlzaXRlZCddO1xuXG4vLyAgICAgIFxudmFyIHNoYWxsb3dFcXVhbCA9IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnIHx8ICFhIHx8IHR5cGVvZiBiICE9PSAnb2JqZWN0JyB8fCAhYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgYkhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5iaW5kKGIpO1xuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGtleXNBLmxlbmd0aDsgaWR4KyspIHtcbiAgICB2YXIga2V5ID0ga2V5c0FbaWR4XTtcblxuICAgIGlmICghYkhhc093blByb3BlcnR5KGtleSkgfHwgYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vICAgICAgXG5mdW5jdGlvbiBzdWJzY3JpcHRpb25GaWx0ZXIgKGRlc3QsIHNyYywgcHJldmlvdXMsIHN1YnNjcmlwdGlvbiwga2V5cywgc2hhbGxvd0VxdWFsS2V5cykge1xuICB2YXIgZGlmZmVyZW50ID0gZmFsc2U7XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHN1YnNjcmlwdGlvbltrZXldKSB7XG4gICAgICBkZXN0W2tleV0gPSBzcmNba2V5XTtcblxuICAgICAgaWYgKCFwcmV2aW91cyB8fCAofnNoYWxsb3dFcXVhbEtleXMuaW5kZXhPZihrZXkpID8gIXNoYWxsb3dFcXVhbChzcmNba2V5XSwgcHJldmlvdXNba2V5XSkgOiBzcmNba2V5XSAhPT0gcHJldmlvdXNba2V5XSkpIHtcbiAgICAgICAgZGlmZmVyZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGlmZmVyZW50O1xufVxuXG4vLyAgICAgIFxudmFyIHNoYWxsb3dFcXVhbEtleXMgPSBbJ2RhdGEnXTtcbi8qKlxuICogRmlsdGVycyBpdGVtcyBpbiBhIEZpZWxkU3RhdGUgYmFzZWQgb24gYSBGaWVsZFN1YnNjcmlwdGlvblxuICovXG5cbnZhciBmaWx0ZXJGaWVsZFN0YXRlID0gZnVuY3Rpb24gZmlsdGVyRmllbGRTdGF0ZShzdGF0ZSwgcHJldmlvdXNTdGF0ZSwgc3Vic2NyaXB0aW9uLCBmb3JjZSkge1xuICB2YXIgcmVzdWx0ID0ge1xuICAgIGJsdXI6IHN0YXRlLmJsdXIsXG4gICAgY2hhbmdlOiBzdGF0ZS5jaGFuZ2UsXG4gICAgZm9jdXM6IHN0YXRlLmZvY3VzLFxuICAgIG5hbWU6IHN0YXRlLm5hbWVcbiAgfTtcbiAgdmFyIGRpZmZlcmVudCA9IHN1YnNjcmlwdGlvbkZpbHRlcihyZXN1bHQsIHN0YXRlLCBwcmV2aW91c1N0YXRlLCBzdWJzY3JpcHRpb24sIGZpZWxkU3Vic2NyaXB0aW9uSXRlbXMsIHNoYWxsb3dFcXVhbEtleXMpIHx8ICFwcmV2aW91c1N0YXRlO1xuICByZXR1cm4gZGlmZmVyZW50IHx8IGZvcmNlID8gcmVzdWx0IDogdW5kZWZpbmVkO1xufTtcblxuLy8gICAgICBcbnZhciBmb3JtU3Vic2NyaXB0aW9uSXRlbXMgPSBbJ2FjdGl2ZScsICdkaXJ0eScsICdkaXJ0eUZpZWxkcycsICdkaXJ0eVNpbmNlTGFzdFN1Ym1pdCcsICdlcnJvcicsICdlcnJvcnMnLCAnaGFzU3VibWl0RXJyb3JzJywgJ2hhc1ZhbGlkYXRpb25FcnJvcnMnLCAnaW5pdGlhbFZhbHVlcycsICdpbnZhbGlkJywgJ21vZGlmaWVkJywgJ3ByaXN0aW5lJywgJ3N1Ym1pdHRpbmcnLCAnc3VibWl0RXJyb3InLCAnc3VibWl0RXJyb3JzJywgJ3N1Ym1pdEZhaWxlZCcsICdzdWJtaXRTdWNjZWVkZWQnLCAndG91Y2hlZCcsICd2YWxpZCcsICd2YWxpZGF0aW5nJywgJ3ZhbHVlcycsICd2aXNpdGVkJ107XG5cbi8vICAgICAgXG52YXIgc2hhbGxvd0VxdWFsS2V5cyQxID0gWyd0b3VjaGVkJywgJ3Zpc2l0ZWQnXTtcbi8qKlxuICogRmlsdGVycyBpdGVtcyBpbiBhIEZvcm1TdGF0ZSBiYXNlZCBvbiBhIEZvcm1TdWJzY3JpcHRpb25cbiAqL1xuXG52YXIgZmlsdGVyRm9ybVN0YXRlID0gZnVuY3Rpb24gZmlsdGVyRm9ybVN0YXRlKHN0YXRlLCBwcmV2aW91c1N0YXRlLCBzdWJzY3JpcHRpb24sIGZvcmNlKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIGRpZmZlcmVudCA9IHN1YnNjcmlwdGlvbkZpbHRlcihyZXN1bHQsIHN0YXRlLCBwcmV2aW91c1N0YXRlLCBzdWJzY3JpcHRpb24sIGZvcm1TdWJzY3JpcHRpb25JdGVtcywgc2hhbGxvd0VxdWFsS2V5cyQxKSB8fCAhcHJldmlvdXNTdGF0ZTtcbiAgcmV0dXJuIGRpZmZlcmVudCB8fCBmb3JjZSA/IHJlc3VsdCA6IHVuZGVmaW5lZDtcbn07XG5cbi8vICAgICAgXG5cbnZhciBtZW1vaXplID0gZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgbGFzdEFyZ3M7XG4gIHZhciBsYXN0UmVzdWx0O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAoIWxhc3RBcmdzIHx8IGFyZ3MubGVuZ3RoICE9PSBsYXN0QXJncy5sZW5ndGggfHwgYXJncy5zb21lKGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChsYXN0QXJnc1tpbmRleF0sIGFyZyk7XG4gICAgfSkpIHtcbiAgICAgIGxhc3RBcmdzID0gYXJncztcbiAgICAgIGxhc3RSZXN1bHQgPSBmbi5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICB9O1xufTtcblxudmFyIGlzUHJvbWlzZSA9IChmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiAhIW9iaiAmJiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykgJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nO1xufSk7XG5cbnZhciBjb25maWdPcHRpb25zID0gWydkZWJ1ZycsICdpbml0aWFsVmFsdWVzJywgJ2tlZXBEaXJ0eU9uUmVpbml0aWFsaXplJywgJ211dGF0b3JzJywgJ29uU3VibWl0JywgJ3ZhbGlkYXRlJywgJ3ZhbGlkYXRlT25CbHVyJ107XG52YXIgdmVyc2lvbiA9ICc0LjEzLjAnO1xuXG52YXIgdHJpcGxlRXF1YWxzID0gZnVuY3Rpb24gdHJpcGxlRXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGI7XG59O1xuXG52YXIgaGFzQW55RXJyb3IgPSBmdW5jdGlvbiBoYXNBbnlFcnJvcihlcnJvcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycykuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbHVlID0gZXJyb3JzW2tleV07XG5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGhhc0FueUVycm9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcbiAgfSk7XG59O1xuXG52YXIgY29udmVydFRvRXh0ZXJuYWxGb3JtU3RhdGUgPSBmdW5jdGlvbiBjb252ZXJ0VG9FeHRlcm5hbEZvcm1TdGF0ZShfcmVmKSB7XG4gIHZhciBhY3RpdmUgPSBfcmVmLmFjdGl2ZSxcbiAgICAgIGRpcnR5U2luY2VMYXN0U3VibWl0ID0gX3JlZi5kaXJ0eVNpbmNlTGFzdFN1Ym1pdCxcbiAgICAgIGVycm9yID0gX3JlZi5lcnJvcixcbiAgICAgIGVycm9ycyA9IF9yZWYuZXJyb3JzLFxuICAgICAgaW5pdGlhbFZhbHVlcyA9IF9yZWYuaW5pdGlhbFZhbHVlcyxcbiAgICAgIHByaXN0aW5lID0gX3JlZi5wcmlzdGluZSxcbiAgICAgIHN1Ym1pdHRpbmcgPSBfcmVmLnN1Ym1pdHRpbmcsXG4gICAgICBzdWJtaXRGYWlsZWQgPSBfcmVmLnN1Ym1pdEZhaWxlZCxcbiAgICAgIHN1Ym1pdFN1Y2NlZWRlZCA9IF9yZWYuc3VibWl0U3VjY2VlZGVkLFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxuICAgICAgc3VibWl0RXJyb3JzID0gX3JlZi5zdWJtaXRFcnJvcnMsXG4gICAgICB2YWxpZCA9IF9yZWYudmFsaWQsXG4gICAgICB2YWxpZGF0aW5nID0gX3JlZi52YWxpZGF0aW5nLFxuICAgICAgdmFsdWVzID0gX3JlZi52YWx1ZXM7XG4gIHJldHVybiB7XG4gICAgYWN0aXZlOiBhY3RpdmUsXG4gICAgZGlydHk6ICFwcmlzdGluZSxcbiAgICBkaXJ0eVNpbmNlTGFzdFN1Ym1pdDogZGlydHlTaW5jZUxhc3RTdWJtaXQsXG4gICAgZXJyb3I6IGVycm9yLFxuICAgIGVycm9yczogZXJyb3JzLFxuICAgIGhhc1N1Ym1pdEVycm9yczogISEoc3VibWl0RXJyb3IgfHwgc3VibWl0RXJyb3JzICYmIGhhc0FueUVycm9yKHN1Ym1pdEVycm9ycykpLFxuICAgIGhhc1ZhbGlkYXRpb25FcnJvcnM6ICEhKGVycm9yIHx8IGhhc0FueUVycm9yKGVycm9ycykpLFxuICAgIGludmFsaWQ6ICF2YWxpZCxcbiAgICBpbml0aWFsVmFsdWVzOiBpbml0aWFsVmFsdWVzLFxuICAgIHByaXN0aW5lOiBwcmlzdGluZSxcbiAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxuICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxuICAgIHN1Ym1pdFN1Y2NlZWRlZDogc3VibWl0U3VjY2VlZGVkLFxuICAgIHN1Ym1pdEVycm9yOiBzdWJtaXRFcnJvcixcbiAgICBzdWJtaXRFcnJvcnM6IHN1Ym1pdEVycm9ycyxcbiAgICB2YWxpZDogdmFsaWQsXG4gICAgdmFsaWRhdGluZzogdmFsaWRhdGluZyA+IDAsXG4gICAgdmFsdWVzOiB2YWx1ZXNcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIG5vdGlmeVN1YnNjcmliZXIoc3Vic2NyaWJlciwgc3Vic2NyaXB0aW9uLCBzdGF0ZSwgbGFzdFN0YXRlLCBmaWx0ZXIsIGZvcmNlKSB7XG4gIGlmIChmb3JjZSA9PT0gdm9pZCAwKSB7XG4gICAgZm9yY2UgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBub3RpZmljYXRpb24gPSBmaWx0ZXIoc3RhdGUsIGxhc3RTdGF0ZSwgc3Vic2NyaXB0aW9uLCBmb3JjZSk7XG5cbiAgaWYgKG5vdGlmaWNhdGlvbikge1xuICAgIHN1YnNjcmliZXIobm90aWZpY2F0aW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3RpZnkoX3JlZjIsIHN0YXRlLCBsYXN0U3RhdGUsIGZpbHRlcikge1xuICB2YXIgZW50cmllcyA9IF9yZWYyLmVudHJpZXM7XG4gIE9iamVjdC5rZXlzKGVudHJpZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbTnVtYmVyKGtleSldOyAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gZW50cnkuc3Vic2NyaXB0aW9uLFxuICAgICAgICAgIHN1YnNjcmliZXIgPSBlbnRyeS5zdWJzY3JpYmVyO1xuICAgICAgbm90aWZ5U3Vic2NyaWJlcihzdWJzY3JpYmVyLCBzdWJzY3JpcHRpb24sIHN0YXRlLCBsYXN0U3RhdGUsIGZpbHRlcik7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIGNyZWF0ZUZvcm0gPSBmdW5jdGlvbiBjcmVhdGVGb3JtKGNvbmZpZykge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gY29uZmlnIHNwZWNpZmllZCcpO1xuICB9XG5cbiAgdmFyIGRlYnVnID0gY29uZmlnLmRlYnVnLFxuICAgICAgZGVzdHJveU9uVW5yZWdpc3RlciA9IGNvbmZpZy5kZXN0cm95T25VbnJlZ2lzdGVyLFxuICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBjb25maWcua2VlcERpcnR5T25SZWluaXRpYWxpemUsXG4gICAgICBpbml0aWFsVmFsdWVzID0gY29uZmlnLmluaXRpYWxWYWx1ZXMsXG4gICAgICBtdXRhdG9ycyA9IGNvbmZpZy5tdXRhdG9ycyxcbiAgICAgIG9uU3VibWl0ID0gY29uZmlnLm9uU3VibWl0LFxuICAgICAgdmFsaWRhdGUgPSBjb25maWcudmFsaWRhdGUsXG4gICAgICB2YWxpZGF0ZU9uQmx1ciA9IGNvbmZpZy52YWxpZGF0ZU9uQmx1cjtcblxuICBpZiAoIW9uU3VibWl0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBvblN1Ym1pdCBmdW5jdGlvbiBzcGVjaWZpZWQnKTtcbiAgfVxuXG4gIHZhciBzdGF0ZSA9IHtcbiAgICBzdWJzY3JpYmVyczoge1xuICAgICAgaW5kZXg6IDAsXG4gICAgICBlbnRyaWVzOiB7fVxuICAgIH0sXG4gICAgZmllbGRTdWJzY3JpYmVyczoge30sXG4gICAgZmllbGRzOiB7fSxcbiAgICBmb3JtU3RhdGU6IHtcbiAgICAgIGRpcnR5U2luY2VMYXN0U3VibWl0OiBmYWxzZSxcbiAgICAgIGVycm9yczoge30sXG4gICAgICBpbml0aWFsVmFsdWVzOiBpbml0aWFsVmFsdWVzICYmIF9leHRlbmRzKHt9LCBpbml0aWFsVmFsdWVzKSxcbiAgICAgIGludmFsaWQ6IGZhbHNlLFxuICAgICAgcHJpc3RpbmU6IHRydWUsXG4gICAgICBzdWJtaXR0aW5nOiBmYWxzZSxcbiAgICAgIHN1Ym1pdEZhaWxlZDogZmFsc2UsXG4gICAgICBzdWJtaXRTdWNjZWVkZWQ6IGZhbHNlLFxuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW5nOiAwLFxuICAgICAgdmFsdWVzOiBpbml0aWFsVmFsdWVzID8gX2V4dGVuZHMoe30sIGluaXRpYWxWYWx1ZXMpIDoge31cbiAgICB9LFxuICAgIGxhc3RGb3JtU3RhdGU6IHVuZGVmaW5lZFxuICB9O1xuICB2YXIgaW5CYXRjaCA9IGZhbHNlO1xuICB2YXIgdmFsaWRhdGlvblBhdXNlZCA9IGZhbHNlO1xuICB2YXIgdmFsaWRhdGlvbkJsb2NrZWQgPSBmYWxzZTtcbiAgdmFyIG5leHRBc3luY1ZhbGlkYXRpb25LZXkgPSAwO1xuICB2YXIgYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXMgPSB7fTtcblxuICB2YXIgY2xlYXJBc3luY1ZhbGlkYXRpb25Qcm9taXNlID0gZnVuY3Rpb24gY2xlYXJBc3luY1ZhbGlkYXRpb25Qcm9taXNlKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICBkZWxldGUgYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgY2hhbmdlVmFsdWUgPSBmdW5jdGlvbiBjaGFuZ2VWYWx1ZShzdGF0ZSwgbmFtZSwgbXV0YXRlKSB7XG4gICAgdmFyIGJlZm9yZSA9IGdldEluKHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIG5hbWUpO1xuICAgIHZhciBhZnRlciA9IG11dGF0ZShiZWZvcmUpO1xuICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCBuYW1lLCBhZnRlcikgfHwge307XG4gIH07XG5cbiAgdmFyIHJlbmFtZUZpZWxkID0gZnVuY3Rpb24gcmVuYW1lRmllbGQoc3RhdGUsIGZyb20sIHRvKSB7XG4gICAgaWYgKHN0YXRlLmZpZWxkc1tmcm9tXSkge1xuICAgICAgdmFyIF9leHRlbmRzMiwgX2V4dGVuZHMzO1xuXG4gICAgICBzdGF0ZS5maWVsZHMgPSBfZXh0ZW5kcyh7fSwgc3RhdGUuZmllbGRzLCAoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMlt0b10gPSBfZXh0ZW5kcyh7fSwgc3RhdGUuZmllbGRzW2Zyb21dLCB7XG4gICAgICAgIG5hbWU6IHRvLFxuICAgICAgICBsYXN0RmllbGRTdGF0ZTogdW5kZWZpbmVkXG4gICAgICB9KSwgX2V4dGVuZHMyKSk7XG4gICAgICBkZWxldGUgc3RhdGUuZmllbGRzW2Zyb21dO1xuICAgICAgc3RhdGUuZmllbGRTdWJzY3JpYmVycyA9IF9leHRlbmRzKHt9LCBzdGF0ZS5maWVsZFN1YnNjcmliZXJzLCAoX2V4dGVuZHMzID0ge30sIF9leHRlbmRzM1t0b10gPSBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW2Zyb21dLCBfZXh0ZW5kczMpKTtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW2Zyb21dO1xuICAgICAgdmFyIHZhbHVlID0gZ2V0SW4oc3RhdGUuZm9ybVN0YXRlLnZhbHVlcywgZnJvbSk7XG4gICAgICBzdGF0ZS5mb3JtU3RhdGUudmFsdWVzID0gc2V0SW4oc3RhdGUuZm9ybVN0YXRlLnZhbHVlcywgZnJvbSwgdW5kZWZpbmVkKSB8fCB7fTtcbiAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCB0bywgdmFsdWUpO1xuICAgICAgZGVsZXRlIHN0YXRlLmxhc3RGb3JtU3RhdGU7XG4gICAgfVxuICB9OyAvLyBiaW5kIHN0YXRlIHRvIG11dGF0b3JzXG5cblxuICB2YXIgZ2V0TXV0YXRvckFwaSA9IGZ1bmN0aW9uIGdldE11dGF0b3JBcGkoa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICBpZiAobXV0YXRvcnMpIHtcbiAgICAgICAgLy8gXl4gY2F1c2VzIGJyYW5jaCBjb3ZlcmFnZSB3YXJuaW5nLCBidXQgbmVlZGVkIHRvIGFwcGVhc2UgdGhlIEZsb3cgZ29kc1xuICAgICAgICB2YXIgbXV0YXRhYmxlU3RhdGUgPSB7XG4gICAgICAgICAgZm9ybVN0YXRlOiBzdGF0ZS5mb3JtU3RhdGUsXG4gICAgICAgICAgZmllbGRzOiBzdGF0ZS5maWVsZHMsXG4gICAgICAgICAgZmllbGRTdWJzY3JpYmVyczogc3RhdGUuZmllbGRTdWJzY3JpYmVycyxcbiAgICAgICAgICBsYXN0Rm9ybVN0YXRlOiBzdGF0ZS5sYXN0Rm9ybVN0YXRlXG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG11dGF0b3JzW2tleV0oYXJncywgbXV0YXRhYmxlU3RhdGUsIHtcbiAgICAgICAgICBjaGFuZ2VWYWx1ZTogY2hhbmdlVmFsdWUsXG4gICAgICAgICAgZ2V0SW46IGdldEluLFxuICAgICAgICAgIHJlbmFtZUZpZWxkOiByZW5hbWVGaWVsZCxcbiAgICAgICAgICBzZXRJbjogc2V0SW4sXG4gICAgICAgICAgc2hhbGxvd0VxdWFsOiBzaGFsbG93RXF1YWxcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXRlLmZvcm1TdGF0ZSA9IG11dGF0YWJsZVN0YXRlLmZvcm1TdGF0ZTtcbiAgICAgICAgc3RhdGUuZmllbGRzID0gbXV0YXRhYmxlU3RhdGUuZmllbGRzO1xuICAgICAgICBzdGF0ZS5maWVsZFN1YnNjcmliZXJzID0gbXV0YXRhYmxlU3RhdGUuZmllbGRTdWJzY3JpYmVycztcbiAgICAgICAgc3RhdGUubGFzdEZvcm1TdGF0ZSA9IG11dGF0YWJsZVN0YXRlLmxhc3RGb3JtU3RhdGU7XG4gICAgICAgIHJ1blZhbGlkYXRpb24odW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICB2YXIgbXV0YXRvcnNBcGkgPSBtdXRhdG9ycyA/IE9iamVjdC5rZXlzKG11dGF0b3JzKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSBnZXRNdXRhdG9yQXBpKGtleSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pIDoge307XG5cbiAgdmFyIHJ1blJlY29yZExldmVsVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHJ1blJlY29yZExldmVsVmFsaWRhdGlvbihzZXRFcnJvcnMpIHtcbiAgICB2YXIgcHJvbWlzZXMgPSBbXTtcblxuICAgIGlmICh2YWxpZGF0ZSkge1xuICAgICAgdmFyIGVycm9yc09yUHJvbWlzZSA9IHZhbGlkYXRlKF9leHRlbmRzKHt9LCBzdGF0ZS5mb3JtU3RhdGUudmFsdWVzKSk7IC8vIGNsb25lIHRvIGF2b2lkIHdyaXRpbmdcblxuICAgICAgaWYgKGlzUHJvbWlzZShlcnJvcnNPclByb21pc2UpKSB7XG4gICAgICAgIHZhciBhc3luY1ZhbGlkYXRpb25Qcm9taXNlS2V5ID0gbmV4dEFzeW5jVmFsaWRhdGlvbktleSsrO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IGVycm9yc09yUHJvbWlzZS50aGVuKHNldEVycm9ycykudGhlbihjbGVhckFzeW5jVmFsaWRhdGlvblByb21pc2UoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZUtleSkpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgICAgICBhc3luY1ZhbGlkYXRpb25Qcm9taXNlc1thc3luY1ZhbGlkYXRpb25Qcm9taXNlS2V5XSA9IHByb21pc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRFcnJvcnMoZXJyb3JzT3JQcm9taXNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZXM7XG4gIH07XG5cbiAgdmFyIGdldFZhbGlkYXRvcnMgPSBmdW5jdGlvbiBnZXRWYWxpZGF0b3JzKGZpZWxkKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpZWxkLnZhbGlkYXRvcnMpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkge1xuICAgICAgdmFyIHZhbGlkYXRvciA9IGZpZWxkLnZhbGlkYXRvcnNbTnVtYmVyKGluZGV4KV0oKTtcblxuICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICByZXN1bHQucHVzaCh2YWxpZGF0b3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKTtcbiAgfTtcblxuICB2YXIgcnVuRmllbGRMZXZlbFZhbGlkYXRpb24gPSBmdW5jdGlvbiBydW5GaWVsZExldmVsVmFsaWRhdGlvbihmaWVsZCwgc2V0RXJyb3IpIHtcbiAgICB2YXIgcHJvbWlzZXMgPSBbXTtcbiAgICB2YXIgdmFsaWRhdG9ycyA9IGdldFZhbGlkYXRvcnMoZmllbGQpO1xuXG4gICAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgICB2YXIgZXJyb3I7XG4gICAgICB2YWxpZGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKHZhbGlkYXRvcikge1xuICAgICAgICB2YXIgZXJyb3JPclByb21pc2UgPSB2YWxpZGF0b3IoZ2V0SW4oc3RhdGUuZm9ybVN0YXRlLnZhbHVlcywgZmllbGQubmFtZSksIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIHZhbGlkYXRvci5sZW5ndGggPT09IDMgPyBwdWJsaXNoRmllbGRTdGF0ZShzdGF0ZS5mb3JtU3RhdGUsIHN0YXRlLmZpZWxkc1tmaWVsZC5uYW1lXSkgOiB1bmRlZmluZWQpO1xuXG4gICAgICAgIGlmIChlcnJvck9yUHJvbWlzZSAmJiBpc1Byb21pc2UoZXJyb3JPclByb21pc2UpKSB7XG4gICAgICAgICAgdmFyIGFzeW5jVmFsaWRhdGlvblByb21pc2VLZXkgPSBuZXh0QXN5bmNWYWxpZGF0aW9uS2V5Kys7XG4gICAgICAgICAgdmFyIHByb21pc2UgPSBlcnJvck9yUHJvbWlzZS50aGVuKHNldEVycm9yKSAvLyBlcnJvcnMgbXVzdCBiZSByZXNvbHZlZCwgbm90IHJlamVjdGVkXG4gICAgICAgICAgLnRoZW4oY2xlYXJBc3luY1ZhbGlkYXRpb25Qcm9taXNlKGFzeW5jVmFsaWRhdGlvblByb21pc2VLZXkpKTtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgICAgICAgIGFzeW5jVmFsaWRhdGlvblByb21pc2VzW2FzeW5jVmFsaWRhdGlvblByb21pc2VLZXldID0gcHJvbWlzZTtcbiAgICAgICAgfSBlbHNlIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAvLyBmaXJzdCByZWdpc3RlcmVkIHZhbGlkYXRvciB3aW5zXG4gICAgICAgICAgZXJyb3IgPSBlcnJvck9yUHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZXRFcnJvcihlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2VzO1xuICB9O1xuXG4gIHZhciBydW5WYWxpZGF0aW9uID0gZnVuY3Rpb24gcnVuVmFsaWRhdGlvbihmaWVsZENoYW5nZWQsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHZhbGlkYXRpb25QYXVzZWQpIHtcbiAgICAgIHZhbGlkYXRpb25CbG9ja2VkID0gdHJ1ZTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGZpZWxkcyA9IHN0YXRlLmZpZWxkcyxcbiAgICAgICAgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlO1xuXG4gICAgdmFyIHNhZmVGaWVsZHMgPSBfZXh0ZW5kcyh7fSwgZmllbGRzKTtcblxuICAgIHZhciBmaWVsZEtleXMgPSBPYmplY3Qua2V5cyhzYWZlRmllbGRzKTtcblxuICAgIGlmICghdmFsaWRhdGUgJiYgIWZpZWxkS2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBnZXRWYWxpZGF0b3JzKHNhZmVGaWVsZHNba2V5XSkubGVuZ3RoO1xuICAgIH0pKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuOyAvLyBubyB2YWxpZGF0aW9uIHJ1bGVzXG4gICAgfSAvLyBwYXJlIGRvd24gZmllbGQga2V5cyB0byBhY3R1YWxseSB2YWxpZGF0ZVxuXG5cbiAgICB2YXIgbGltaXRlZEZpZWxkTGV2ZWxWYWxpZGF0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoZmllbGRDaGFuZ2VkKSB7XG4gICAgICB2YXIgY2hhbmdlZEZpZWxkID0gc2FmZUZpZWxkc1tmaWVsZENoYW5nZWRdO1xuXG4gICAgICBpZiAoY2hhbmdlZEZpZWxkKSB7XG4gICAgICAgIHZhciB2YWxpZGF0ZUZpZWxkcyA9IGNoYW5nZWRGaWVsZC52YWxpZGF0ZUZpZWxkcztcblxuICAgICAgICBpZiAodmFsaWRhdGVGaWVsZHMpIHtcbiAgICAgICAgICBsaW1pdGVkRmllbGRMZXZlbFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgIGZpZWxkS2V5cyA9IHZhbGlkYXRlRmllbGRzLmxlbmd0aCA/IHZhbGlkYXRlRmllbGRzLmNvbmNhdChmaWVsZENoYW5nZWQpIDogW2ZpZWxkQ2hhbmdlZF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkTGV2ZWxFcnJvcnMgPSB7fTtcbiAgICB2YXIgZmllbGRMZXZlbEVycm9ycyA9IHt9O1xuICAgIHZhciBwcm9taXNlcyA9IFtdLmNvbmNhdChydW5SZWNvcmRMZXZlbFZhbGlkYXRpb24oZnVuY3Rpb24gKGVycm9ycykge1xuICAgICAgcmVjb3JkTGV2ZWxFcnJvcnMgPSBlcnJvcnMgfHwge307XG4gICAgfSksIGZpZWxkS2V5cy5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwgbmFtZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5jb25jYXQocnVuRmllbGRMZXZlbFZhbGlkYXRpb24oc2FmZUZpZWxkc1tuYW1lXSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGZpZWxkTGV2ZWxFcnJvcnNbbmFtZV0gPSBlcnJvcjtcbiAgICAgIH0pKTtcbiAgICB9LCBbXSkpO1xuXG4gICAgdmFyIHByb2Nlc3NFcnJvcnMgPSBmdW5jdGlvbiBwcm9jZXNzRXJyb3JzKCkge1xuICAgICAgdmFyIG1lcmdlZCA9IF9leHRlbmRzKHt9LCBsaW1pdGVkRmllbGRMZXZlbFZhbGlkYXRpb24gPyBmb3JtU3RhdGUuZXJyb3JzIDoge30sIHJlY29yZExldmVsRXJyb3JzKTtcblxuICAgICAgdmFyIGZvckVhY2hFcnJvciA9IGZ1bmN0aW9uIGZvckVhY2hFcnJvcihmbikge1xuICAgICAgICBmaWVsZEtleXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIGlmIChmaWVsZHNbbmFtZV0pIHtcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBmaWVsZCBpcyBzdGlsbCByZWdpc3RlcmVkXG4gICAgICAgICAgICAvLyBmaWVsZC1sZXZlbCBlcnJvcnMgdGFrZSBwcmVjZWRlbnQgb3ZlciByZWNvcmQtbGV2ZWwgZXJyb3JzXG4gICAgICAgICAgICB2YXIgcmVjb3JkTGV2ZWxFcnJvciA9IGdldEluKHJlY29yZExldmVsRXJyb3JzLCBuYW1lKTtcbiAgICAgICAgICAgIHZhciBlcnJvckZyb21QYXJlbnQgPSBnZXRJbihtZXJnZWQsIG5hbWUpO1xuICAgICAgICAgICAgdmFyIGhhc0ZpZWxkTGV2ZWxWYWxpZGF0aW9uID0gZ2V0VmFsaWRhdG9ycyhzYWZlRmllbGRzW25hbWVdKS5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZmllbGRMZXZlbEVycm9yID0gZmllbGRMZXZlbEVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIGZuKG5hbWUsIGhhc0ZpZWxkTGV2ZWxWYWxpZGF0aW9uICYmIGZpZWxkTGV2ZWxFcnJvciB8fCB2YWxpZGF0ZSAmJiByZWNvcmRMZXZlbEVycm9yIHx8ICghcmVjb3JkTGV2ZWxFcnJvciAmJiAhbGltaXRlZEZpZWxkTGV2ZWxWYWxpZGF0aW9uID8gZXJyb3JGcm9tUGFyZW50IDogdW5kZWZpbmVkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGZvckVhY2hFcnJvcihmdW5jdGlvbiAobmFtZSwgZXJyb3IpIHtcbiAgICAgICAgbWVyZ2VkID0gc2V0SW4obWVyZ2VkLCBuYW1lLCBlcnJvcikgfHwge307XG4gICAgICB9KTtcbiAgICAgIGZvckVhY2hFcnJvcihmdW5jdGlvbiAobmFtZSwgZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yW0FSUkFZX0VSUk9SXSkge1xuICAgICAgICAgIHZhciBleGlzdGluZyA9IGdldEluKG1lcmdlZCwgbmFtZSk7XG4gICAgICAgICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoZXhpc3RpbmcpO1xuICAgICAgICAgIGNvcHlbQVJSQVlfRVJST1JdID0gZXJyb3JbQVJSQVlfRVJST1JdO1xuICAgICAgICAgIG1lcmdlZCA9IHNldEluKG1lcmdlZCwgbmFtZSwgY29weSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXNoYWxsb3dFcXVhbChmb3JtU3RhdGUuZXJyb3JzLCBtZXJnZWQpKSB7XG4gICAgICAgIGZvcm1TdGF0ZS5lcnJvcnMgPSBtZXJnZWQ7XG4gICAgICB9XG5cbiAgICAgIGZvcm1TdGF0ZS5lcnJvciA9IHJlY29yZExldmVsRXJyb3JzW0ZPUk1fRVJST1JdO1xuICAgIH07IC8vIHByb2Nlc3Mgc3luYyBlcnJvcnNcblxuXG4gICAgcHJvY2Vzc0Vycm9ycygpO1xuXG4gICAgaWYgKHByb21pc2VzLmxlbmd0aCkge1xuICAgICAgLy8gc3luYyBlcnJvcnMgaGF2ZSBiZWVuIHNldC4gbm90aWZ5IGxpc3RlbmVycyB3aGlsZSB3ZSB3YWl0IGZvciBvdGhlcnNcbiAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWxpZGF0aW5nKys7XG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWZ0ZXJQcm9taXNlcyA9IGZ1bmN0aW9uIGFmdGVyUHJvbWlzZXMoKSB7XG4gICAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWxpZGF0aW5nLS07XG4gICAgICAgIHByb2Nlc3NFcnJvcnMoKTtcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihhZnRlclByb21pc2VzLCBhZnRlclByb21pc2VzKTtcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgbm90aWZ5RmllbGRMaXN0ZW5lcnMgPSBmdW5jdGlvbiBub3RpZnlGaWVsZExpc3RlbmVycyhmb3JjZSkge1xuICAgIGlmIChpbkJhdGNoIHx8IHZhbGlkYXRpb25QYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICBmaWVsZFN1YnNjcmliZXJzID0gc3RhdGUuZmllbGRTdWJzY3JpYmVycyxcbiAgICAgICAgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlO1xuXG4gICAgdmFyIHNhZmVGaWVsZHMgPSBfZXh0ZW5kcyh7fSwgZmllbGRzKTtcblxuICAgIE9iamVjdC5rZXlzKHNhZmVGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBmaWVsZCA9IHNhZmVGaWVsZHNbbmFtZV07XG4gICAgICB2YXIgZmllbGRTdGF0ZSA9IHB1Ymxpc2hGaWVsZFN0YXRlKGZvcm1TdGF0ZSwgZmllbGQpO1xuICAgICAgdmFyIGxhc3RGaWVsZFN0YXRlID0gZmllbGQubGFzdEZpZWxkU3RhdGU7XG5cbiAgICAgIGlmICghc2hhbGxvd0VxdWFsKGZpZWxkU3RhdGUsIGxhc3RGaWVsZFN0YXRlKSkge1xuICAgICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAvLyBDdXJpb3VzIGFib3V0IHdoeSBhIGZpZWxkIGlzIGdldHRpbmcgbm90aWZpZWQ/IFVuY29tbWVudCB0aGlzLlxuICAgICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAvLyBjb25zdCBkaWZmS2V5cyA9IE9iamVjdC5rZXlzKGZpZWxkU3RhdGUpLmZpbHRlcihcbiAgICAgICAgLy8gICBrZXkgPT4gZmllbGRTdGF0ZVtrZXldICE9PSAobGFzdEZpZWxkU3RhdGUgJiYgbGFzdEZpZWxkU3RhdGVba2V5XSlcbiAgICAgICAgLy8gKVxuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKFxuICAgICAgICAvLyAgICdub3RpZnlpbmcnLFxuICAgICAgICAvLyAgIGZpZWxkLm5hbWUsXG4gICAgICAgIC8vICAgJ1xcbkZpZWxkIFN0YXRlXFxuJyxcbiAgICAgICAgLy8gICBkaWZmS2V5cy5yZWR1Y2UoXG4gICAgICAgIC8vICAgICAocmVzdWx0LCBrZXkpID0+ICh7IC4uLnJlc3VsdCwgW2tleV06IGZpZWxkU3RhdGVba2V5XSB9KSxcbiAgICAgICAgLy8gICAgIHt9XG4gICAgICAgIC8vICAgKSxcbiAgICAgICAgLy8gICAnXFxuTGFzdCBGaWVsZCBTdGF0ZVxcbicsXG4gICAgICAgIC8vICAgZGlmZktleXMucmVkdWNlKFxuICAgICAgICAvLyAgICAgKHJlc3VsdCwga2V5KSA9PiAoe1xuICAgICAgICAvLyAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgIC8vICAgICAgIFtrZXldOiBsYXN0RmllbGRTdGF0ZSAmJiBsYXN0RmllbGRTdGF0ZVtrZXldXG4gICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgLy8gICAgIHt9XG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyApXG4gICAgICAgIGZpZWxkLmxhc3RGaWVsZFN0YXRlID0gZmllbGRTdGF0ZTtcbiAgICAgICAgdmFyIGZpZWxkU3Vic2NyaWJlciA9IGZpZWxkU3Vic2NyaWJlcnNbbmFtZV07XG5cbiAgICAgICAgaWYgKGZpZWxkU3Vic2NyaWJlcikge1xuICAgICAgICAgIG5vdGlmeShmaWVsZFN1YnNjcmliZXIsIGZpZWxkU3RhdGUsIGxhc3RGaWVsZFN0YXRlLCBmaWx0ZXJGaWVsZFN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHZhciBtYXJrQWxsRmllbGRzVG91Y2hlZCA9IGZ1bmN0aW9uIG1hcmtBbGxGaWVsZHNUb3VjaGVkKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBzdGF0ZS5maWVsZHNba2V5XS50b3VjaGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgaGFzU3luY0Vycm9ycyA9IGZ1bmN0aW9uIGhhc1N5bmNFcnJvcnMoKSB7XG4gICAgcmV0dXJuICEhKHN0YXRlLmZvcm1TdGF0ZS5lcnJvciB8fCBoYXNBbnlFcnJvcihzdGF0ZS5mb3JtU3RhdGUuZXJyb3JzKSk7XG4gIH07XG5cbiAgdmFyIGNhbGN1bGF0ZU5leHRGb3JtU3RhdGUgPSBmdW5jdGlvbiBjYWxjdWxhdGVOZXh0Rm9ybVN0YXRlKCkge1xuICAgIHZhciBmaWVsZHMgPSBzdGF0ZS5maWVsZHMsXG4gICAgICAgIGZvcm1TdGF0ZSA9IHN0YXRlLmZvcm1TdGF0ZSxcbiAgICAgICAgbGFzdEZvcm1TdGF0ZSA9IHN0YXRlLmxhc3RGb3JtU3RhdGU7XG5cbiAgICB2YXIgc2FmZUZpZWxkcyA9IF9leHRlbmRzKHt9LCBmaWVsZHMpO1xuXG4gICAgdmFyIHNhZmVGaWVsZEtleXMgPSBPYmplY3Qua2V5cyhzYWZlRmllbGRzKTsgLy8gY2FsY3VsYXRlIGRpcnR5L3ByaXN0aW5lXG5cbiAgICB2YXIgZm91bmREaXJ0eSA9IGZhbHNlO1xuICAgIHZhciBkaXJ0eUZpZWxkcyA9IHNhZmVGaWVsZEtleXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgdmFyIGRpcnR5ID0gIXNhZmVGaWVsZHNba2V5XS5pc0VxdWFsKGdldEluKGZvcm1TdGF0ZS52YWx1ZXMsIGtleSksIGdldEluKGZvcm1TdGF0ZS5pbml0aWFsVmFsdWVzIHx8IHt9LCBrZXkpKTtcblxuICAgICAgaWYgKGRpcnR5KSB7XG4gICAgICAgIGZvdW5kRGlydHkgPSB0cnVlO1xuICAgICAgICByZXN1bHRba2V5XSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pO1xuICAgIGZvcm1TdGF0ZS5wcmlzdGluZSA9ICFmb3VuZERpcnR5O1xuICAgIGZvcm1TdGF0ZS5kaXJ0eVNpbmNlTGFzdFN1Ym1pdCA9ICEhKGZvcm1TdGF0ZS5sYXN0U3VibWl0dGVkVmFsdWVzICYmICFzYWZlRmllbGRLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICB2YXIgbm9uTnVsbExhc3RTdWJtaXR0ZWRWYWx1ZXMgPSBmb3JtU3RhdGUubGFzdFN1Ym1pdHRlZFZhbHVlcyB8fCB7fTsgLy8gfHwge30gaXMgZm9yIGZsb3csIGJ1dCBjYXVzZXMgYnJhbmNoIGNvdmVyYWdlIGNvbXBsYWludFxuXG4gICAgICByZXR1cm4gc2FmZUZpZWxkc1trZXldLmlzRXF1YWwoZ2V0SW4oZm9ybVN0YXRlLnZhbHVlcywga2V5KSwgZ2V0SW4obm9uTnVsbExhc3RTdWJtaXR0ZWRWYWx1ZXMsIGtleSkpO1xuICAgIH0pKTtcbiAgICBmb3JtU3RhdGUudmFsaWQgPSAhZm9ybVN0YXRlLmVycm9yICYmICFmb3JtU3RhdGUuc3VibWl0RXJyb3IgJiYgIWhhc0FueUVycm9yKGZvcm1TdGF0ZS5lcnJvcnMpICYmICEoZm9ybVN0YXRlLnN1Ym1pdEVycm9ycyAmJiBoYXNBbnlFcnJvcihmb3JtU3RhdGUuc3VibWl0RXJyb3JzKSk7XG4gICAgdmFyIG5leHRGb3JtU3RhdGUgPSBjb252ZXJ0VG9FeHRlcm5hbEZvcm1TdGF0ZShmb3JtU3RhdGUpO1xuXG4gICAgdmFyIF9zYWZlRmllbGRLZXlzJHJlZHVjZSA9IHNhZmVGaWVsZEtleXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgcmVzdWx0Lm1vZGlmaWVkW2tleV0gPSBzYWZlRmllbGRzW2tleV0ubW9kaWZpZWQ7XG4gICAgICByZXN1bHQudG91Y2hlZFtrZXldID0gc2FmZUZpZWxkc1trZXldLnRvdWNoZWQ7XG4gICAgICByZXN1bHQudmlzaXRlZFtrZXldID0gc2FmZUZpZWxkc1trZXldLnZpc2l0ZWQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHtcbiAgICAgIG1vZGlmaWVkOiB7fSxcbiAgICAgIHRvdWNoZWQ6IHt9LFxuICAgICAgdmlzaXRlZDoge31cbiAgICB9KSxcbiAgICAgICAgbW9kaWZpZWQgPSBfc2FmZUZpZWxkS2V5cyRyZWR1Y2UubW9kaWZpZWQsXG4gICAgICAgIHRvdWNoZWQgPSBfc2FmZUZpZWxkS2V5cyRyZWR1Y2UudG91Y2hlZCxcbiAgICAgICAgdmlzaXRlZCA9IF9zYWZlRmllbGRLZXlzJHJlZHVjZS52aXNpdGVkO1xuXG4gICAgbmV4dEZvcm1TdGF0ZS5kaXJ0eUZpZWxkcyA9IGxhc3RGb3JtU3RhdGUgJiYgc2hhbGxvd0VxdWFsKGxhc3RGb3JtU3RhdGUuZGlydHlGaWVsZHMsIGRpcnR5RmllbGRzKSA/IGxhc3RGb3JtU3RhdGUuZGlydHlGaWVsZHMgOiBkaXJ0eUZpZWxkcztcbiAgICBuZXh0Rm9ybVN0YXRlLm1vZGlmaWVkID0gbGFzdEZvcm1TdGF0ZSAmJiBzaGFsbG93RXF1YWwobGFzdEZvcm1TdGF0ZS5tb2RpZmllZCwgbW9kaWZpZWQpID8gbGFzdEZvcm1TdGF0ZS5tb2RpZmllZCA6IG1vZGlmaWVkO1xuICAgIG5leHRGb3JtU3RhdGUudG91Y2hlZCA9IGxhc3RGb3JtU3RhdGUgJiYgc2hhbGxvd0VxdWFsKGxhc3RGb3JtU3RhdGUudG91Y2hlZCwgdG91Y2hlZCkgPyBsYXN0Rm9ybVN0YXRlLnRvdWNoZWQgOiB0b3VjaGVkO1xuICAgIG5leHRGb3JtU3RhdGUudmlzaXRlZCA9IGxhc3RGb3JtU3RhdGUgJiYgc2hhbGxvd0VxdWFsKGxhc3RGb3JtU3RhdGUudmlzaXRlZCwgdmlzaXRlZCkgPyBsYXN0Rm9ybVN0YXRlLnZpc2l0ZWQgOiB2aXNpdGVkO1xuICAgIHJldHVybiBsYXN0Rm9ybVN0YXRlICYmIHNoYWxsb3dFcXVhbChsYXN0Rm9ybVN0YXRlLCBuZXh0Rm9ybVN0YXRlKSA/IGxhc3RGb3JtU3RhdGUgOiBuZXh0Rm9ybVN0YXRlO1xuICB9O1xuXG4gIHZhciBjYWxsRGVidWcgPSBmdW5jdGlvbiBjYWxsRGVidWcoKSB7XG4gICAgcmV0dXJuIGRlYnVnICYmIFwiZGV2ZWxvcG1lbnRcIiAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRlYnVnKGNhbGN1bGF0ZU5leHRGb3JtU3RhdGUoKSwgT2JqZWN0LmtleXMoc3RhdGUuZmllbGRzKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHN0YXRlLmZpZWxkc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSkpO1xuICB9O1xuXG4gIHZhciBub3RpZnlpbmcgPSBmYWxzZTtcbiAgdmFyIHNjaGVkdWxlTm90aWZpY2F0aW9uID0gZmFsc2U7XG5cbiAgdmFyIG5vdGlmeUZvcm1MaXN0ZW5lcnMgPSBmdW5jdGlvbiBub3RpZnlGb3JtTGlzdGVuZXJzKCkge1xuICAgIGlmIChub3RpZnlpbmcpIHtcbiAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm90aWZ5aW5nID0gdHJ1ZTtcbiAgICAgIGNhbGxEZWJ1ZygpO1xuXG4gICAgICBpZiAoIWluQmF0Y2ggJiYgIXZhbGlkYXRpb25QYXVzZWQpIHtcbiAgICAgICAgdmFyIGxhc3RGb3JtU3RhdGUgPSBzdGF0ZS5sYXN0Rm9ybVN0YXRlO1xuICAgICAgICB2YXIgbmV4dEZvcm1TdGF0ZSA9IGNhbGN1bGF0ZU5leHRGb3JtU3RhdGUoKTtcblxuICAgICAgICBpZiAobmV4dEZvcm1TdGF0ZSAhPT0gbGFzdEZvcm1TdGF0ZSkge1xuICAgICAgICAgIHN0YXRlLmxhc3RGb3JtU3RhdGUgPSBuZXh0Rm9ybVN0YXRlO1xuICAgICAgICAgIG5vdGlmeShzdGF0ZS5zdWJzY3JpYmVycywgbmV4dEZvcm1TdGF0ZSwgbGFzdEZvcm1TdGF0ZSwgZmlsdGVyRm9ybVN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub3RpZnlpbmcgPSBmYWxzZTtcblxuICAgICAgaWYgKHNjaGVkdWxlTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uID0gZmFsc2U7XG4gICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIGJlZm9yZVN1Ym1pdCA9IGZ1bmN0aW9uIGJlZm9yZVN1Ym1pdCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc3RhdGUuZmllbGRzKS5maW5kKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gc3RhdGUuZmllbGRzW25hbWVdLmJlZm9yZVN1Ym1pdCAmJiBzdGF0ZS5maWVsZHNbbmFtZV0uYmVmb3JlU3VibWl0KCkgPT09IGZhbHNlO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciBhZnRlclN1Ym1pdCA9IGZ1bmN0aW9uIGFmdGVyU3VibWl0KCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzdGF0ZS5maWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5maWVsZHNbbmFtZV0uYWZ0ZXJTdWJtaXQgJiYgc3RhdGUuZmllbGRzW25hbWVdLmFmdGVyU3VibWl0KCk7XG4gICAgfSk7XG4gIH07IC8vIGdlbmVyYXRlIGluaXRpYWwgZXJyb3JzXG5cblxuICBydW5WYWxpZGF0aW9uKCk7XG4gIHZhciBhcGkgPSB7XG4gICAgYmF0Y2g6IGZ1bmN0aW9uIGJhdGNoKGZuKSB7XG4gICAgICBpbkJhdGNoID0gdHJ1ZTtcbiAgICAgIGZuKCk7XG4gICAgICBpbkJhdGNoID0gZmFsc2U7XG4gICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuICAgIH0sXG4gICAgYmx1cjogZnVuY3Rpb24gYmx1cihuYW1lKSB7XG4gICAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICAgIGZvcm1TdGF0ZSA9IHN0YXRlLmZvcm1TdGF0ZTtcbiAgICAgIHZhciBwcmV2aW91cyA9IGZpZWxkc1tuYW1lXTtcblxuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgIC8vIGNhbiBvbmx5IGJsdXIgcmVnaXN0ZXJlZCBmaWVsZHNcbiAgICAgICAgZGVsZXRlIGZvcm1TdGF0ZS5hY3RpdmU7XG4gICAgICAgIGZpZWxkc1tuYW1lXSA9IF9leHRlbmRzKHt9LCBwcmV2aW91cywge1xuICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgdG91Y2hlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodmFsaWRhdGVPbkJsdXIpIHtcbiAgICAgICAgICBydW5WYWxpZGF0aW9uKG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNoYW5nZTogZnVuY3Rpb24gY2hhbmdlKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICAgIGZvcm1TdGF0ZSA9IHN0YXRlLmZvcm1TdGF0ZTtcblxuICAgICAgaWYgKGdldEluKGZvcm1TdGF0ZS52YWx1ZXMsIG5hbWUpICE9PSB2YWx1ZSkge1xuICAgICAgICBjaGFuZ2VWYWx1ZShzdGF0ZSwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBwcmV2aW91cyA9IGZpZWxkc1tuYW1lXTtcblxuICAgICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgICAvLyBvbmx5IHRyYWNrIG1vZGlmaWVkIGZvciByZWdpc3RlcmVkIGZpZWxkc1xuICAgICAgICAgIGZpZWxkc1tuYW1lXSA9IF9leHRlbmRzKHt9LCBwcmV2aW91cywge1xuICAgICAgICAgICAgbW9kaWZpZWQ6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZU9uQmx1cikge1xuICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJ1blZhbGlkYXRpb24obmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZm9jdXM6IGZ1bmN0aW9uIGZvY3VzKG5hbWUpIHtcbiAgICAgIHZhciBmaWVsZCA9IHN0YXRlLmZpZWxkc1tuYW1lXTtcblxuICAgICAgaWYgKGZpZWxkICYmICFmaWVsZC5hY3RpdmUpIHtcbiAgICAgICAgc3RhdGUuZm9ybVN0YXRlLmFjdGl2ZSA9IG5hbWU7XG4gICAgICAgIGZpZWxkLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGZpZWxkLnZpc2l0ZWQgPSB0cnVlO1xuICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtdXRhdG9yczogbXV0YXRvcnNBcGksXG4gICAgZ2V0RmllbGRTdGF0ZTogZnVuY3Rpb24gZ2V0RmllbGRTdGF0ZShuYW1lKSB7XG4gICAgICB2YXIgZmllbGQgPSBzdGF0ZS5maWVsZHNbbmFtZV07XG4gICAgICByZXR1cm4gZmllbGQgJiYgZmllbGQubGFzdEZpZWxkU3RhdGU7XG4gICAgfSxcbiAgICBnZXRSZWdpc3RlcmVkRmllbGRzOiBmdW5jdGlvbiBnZXRSZWdpc3RlcmVkRmllbGRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHN0YXRlLmZpZWxkcyk7XG4gICAgfSxcbiAgICBnZXRTdGF0ZTogZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gICAgICByZXR1cm4gY2FsY3VsYXRlTmV4dEZvcm1TdGF0ZSgpO1xuICAgIH0sXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZShkYXRhKSB7XG4gICAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICAgIGZvcm1TdGF0ZSA9IHN0YXRlLmZvcm1TdGF0ZTtcblxuICAgICAgdmFyIHNhZmVGaWVsZHMgPSBfZXh0ZW5kcyh7fSwgZmllbGRzKTtcblxuICAgICAgdmFyIHZhbHVlcyA9IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nID8gZGF0YShmb3JtU3RhdGUudmFsdWVzKSA6IGRhdGE7XG5cbiAgICAgIGlmICgha2VlcERpcnR5T25SZWluaXRpYWxpemUpIHtcbiAgICAgICAgZm9ybVN0YXRlLnZhbHVlcyA9IHZhbHVlcztcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmtleXMoc2FmZUZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBmaWVsZCA9IHNhZmVGaWVsZHNba2V5XTtcbiAgICAgICAgZmllbGQubW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgZmllbGQudG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICBmaWVsZC52aXNpdGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplKSB7XG4gICAgICAgICAgdmFyIHByaXN0aW5lID0gZmllbGQuaXNFcXVhbChnZXRJbihmb3JtU3RhdGUudmFsdWVzLCBrZXkpLCBnZXRJbihmb3JtU3RhdGUuaW5pdGlhbFZhbHVlcyB8fCB7fSwga2V5KSk7XG5cbiAgICAgICAgICBpZiAocHJpc3RpbmUpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgdXBkYXRlIHByaXN0aW5lIHZhbHVlc1xuICAgICAgICAgICAgZm9ybVN0YXRlLnZhbHVlcyA9IHNldEluKGZvcm1TdGF0ZS52YWx1ZXMsIGtleSwgZ2V0SW4odmFsdWVzLCBrZXkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9ybVN0YXRlLmluaXRpYWxWYWx1ZXMgPSB2YWx1ZXM7XG4gICAgICBydW5WYWxpZGF0aW9uKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGlzVmFsaWRhdGlvblBhdXNlZDogZnVuY3Rpb24gaXNWYWxpZGF0aW9uUGF1c2VkKCkge1xuICAgICAgcmV0dXJuIHZhbGlkYXRpb25QYXVzZWQ7XG4gICAgfSxcbiAgICBwYXVzZVZhbGlkYXRpb246IGZ1bmN0aW9uIHBhdXNlVmFsaWRhdGlvbigpIHtcbiAgICAgIHZhbGlkYXRpb25QYXVzZWQgPSB0cnVlO1xuICAgIH0sXG4gICAgcmVnaXN0ZXJGaWVsZDogZnVuY3Rpb24gcmVnaXN0ZXJGaWVsZChuYW1lLCBzdWJzY3JpYmVyLCBzdWJzY3JpcHRpb24sIGZpZWxkQ29uZmlnKSB7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uID09PSB2b2lkIDApIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmICghc3RhdGUuZmllbGRTdWJzY3JpYmVyc1tuYW1lXSkge1xuICAgICAgICBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW25hbWVdID0ge1xuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIGVudHJpZXM6IHt9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBpbmRleCA9IHN0YXRlLmZpZWxkU3Vic2NyaWJlcnNbbmFtZV0uaW5kZXgrKzsgLy8gc2F2ZSBmaWVsZCBzdWJzY3JpYmVyIGNhbGxiYWNrXG5cbiAgICAgIHN0YXRlLmZpZWxkU3Vic2NyaWJlcnNbbmFtZV0uZW50cmllc1tpbmRleF0gPSB7XG4gICAgICAgIHN1YnNjcmliZXI6IG1lbW9pemUoc3Vic2NyaWJlciksXG4gICAgICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXN0YXRlLmZpZWxkc1tuYW1lXSkge1xuICAgICAgICAvLyBjcmVhdGUgaW5pdGlhbCBmaWVsZCBzdGF0ZVxuICAgICAgICBzdGF0ZS5maWVsZHNbbmFtZV0gPSB7XG4gICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBhZnRlclN1Ym1pdDogZmllbGRDb25maWcgJiYgZmllbGRDb25maWcuYWZ0ZXJTdWJtaXQsXG4gICAgICAgICAgYmVmb3JlU3VibWl0OiBmaWVsZENvbmZpZyAmJiBmaWVsZENvbmZpZy5iZWZvcmVTdWJtaXQsXG4gICAgICAgICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGkuYmx1cihuYW1lKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gY2hhbmdlKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBpLmNoYW5nZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICBmb2N1czogZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBpLmZvY3VzKG5hbWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaXNFcXVhbDogZmllbGRDb25maWcgJiYgZmllbGRDb25maWcuaXNFcXVhbCB8fCB0cmlwbGVFcXVhbHMsXG4gICAgICAgICAgbGFzdEZpZWxkU3RhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtb2RpZmllZDogZmFsc2UsXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICB0b3VjaGVkOiBmYWxzZSxcbiAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICB2YWxpZGF0ZUZpZWxkczogZmllbGRDb25maWcgJiYgZmllbGRDb25maWcudmFsaWRhdGVGaWVsZHMsXG4gICAgICAgICAgdmFsaWRhdG9yczoge30sXG4gICAgICAgICAgdmlzaXRlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkQ29uZmlnKSB7XG4gICAgICAgIGlmIChmaWVsZENvbmZpZy5nZXRWYWxpZGF0b3IpIHtcbiAgICAgICAgICBzdGF0ZS5maWVsZHNbbmFtZV0udmFsaWRhdG9yc1tpbmRleF0gPSBmaWVsZENvbmZpZy5nZXRWYWxpZGF0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGRDb25maWcuaW5pdGlhbFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdGF0ZS5mb3JtU3RhdGUuaW5pdGlhbFZhbHVlcyA9IHNldEluKHN0YXRlLmZvcm1TdGF0ZS5pbml0aWFsVmFsdWVzIHx8IHt9LCBuYW1lLCBmaWVsZENvbmZpZy5pbml0aWFsVmFsdWUpO1xuICAgICAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCBuYW1lLCBmaWVsZENvbmZpZy5pbml0aWFsVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkQ29uZmlnLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RhdGUuZm9ybVN0YXRlLnZhbHVlcyA9IHNldEluKHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIG5hbWUsIGZpZWxkQ29uZmlnLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHNlbnRGaXJzdE5vdGlmaWNhdGlvbiA9IGZhbHNlO1xuXG4gICAgICB2YXIgZmlyc3ROb3RpZmljYXRpb24gPSBmdW5jdGlvbiBmaXJzdE5vdGlmaWNhdGlvbigpIHtcbiAgICAgICAgdmFyIGZpZWxkU3RhdGUgPSBwdWJsaXNoRmllbGRTdGF0ZShzdGF0ZS5mb3JtU3RhdGUsIHN0YXRlLmZpZWxkc1tuYW1lXSk7XG4gICAgICAgIG5vdGlmeVN1YnNjcmliZXIoc3Vic2NyaWJlciwgc3Vic2NyaXB0aW9uLCBmaWVsZFN0YXRlLCB1bmRlZmluZWQsIGZpbHRlckZpZWxkU3RhdGUsIHRydWUpO1xuICAgICAgICBzdGF0ZS5maWVsZHNbbmFtZV0ubGFzdEZpZWxkU3RhdGUgPSBmaWVsZFN0YXRlO1xuICAgICAgICBzZW50Rmlyc3ROb3RpZmljYXRpb24gPSB0cnVlO1xuICAgICAgfTtcblxuICAgICAgcnVuVmFsaWRhdGlvbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuXG4gICAgICAgIGlmICghc2VudEZpcnN0Tm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgZmlyc3ROb3RpZmljYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlbGV0ZSBzdGF0ZS5maWVsZHNbbmFtZV0udmFsaWRhdG9yc1tpbmRleF07XG4gICAgICAgIGRlbGV0ZSBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW25hbWVdLmVudHJpZXNbaW5kZXhdO1xuXG4gICAgICAgIGlmICghT2JqZWN0LmtleXMoc3RhdGUuZmllbGRTdWJzY3JpYmVyc1tuYW1lXS5lbnRyaWVzKS5sZW5ndGgpIHtcbiAgICAgICAgICBkZWxldGUgc3RhdGUuZmllbGRTdWJzY3JpYmVyc1tuYW1lXTtcbiAgICAgICAgICBkZWxldGUgc3RhdGUuZmllbGRzW25hbWVdO1xuICAgICAgICAgIHN0YXRlLmZvcm1TdGF0ZS5lcnJvcnMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUuZXJyb3JzLCBuYW1lLCB1bmRlZmluZWQpIHx8IHt9O1xuXG4gICAgICAgICAgaWYgKGRlc3Ryb3lPblVucmVnaXN0ZXIpIHtcbiAgICAgICAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCBuYW1lLCB1bmRlZmluZWQsIHRydWUpIHx8IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJ1blZhbGlkYXRpb24odW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChpbml0aWFsVmFsdWVzKSB7XG4gICAgICBpZiAoaW5pdGlhbFZhbHVlcyA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBzdGF0ZS5mb3JtU3RhdGUuaW5pdGlhbFZhbHVlcztcbiAgICAgIH1cblxuICAgICAgc3RhdGUuZm9ybVN0YXRlLnN1Ym1pdEZhaWxlZCA9IGZhbHNlO1xuICAgICAgc3RhdGUuZm9ybVN0YXRlLnN1Ym1pdFN1Y2NlZWRlZCA9IGZhbHNlO1xuICAgICAgZGVsZXRlIHN0YXRlLmZvcm1TdGF0ZS5zdWJtaXRFcnJvcjtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5mb3JtU3RhdGUuc3VibWl0RXJyb3JzO1xuICAgICAgZGVsZXRlIHN0YXRlLmZvcm1TdGF0ZS5sYXN0U3VibWl0dGVkVmFsdWVzO1xuICAgICAgYXBpLmluaXRpYWxpemUoaW5pdGlhbFZhbHVlcyB8fCB7fSk7XG4gICAgfSxcbiAgICByZXN1bWVWYWxpZGF0aW9uOiBmdW5jdGlvbiByZXN1bWVWYWxpZGF0aW9uKCkge1xuICAgICAgdmFsaWRhdGlvblBhdXNlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodmFsaWRhdGlvbkJsb2NrZWQpIHtcbiAgICAgICAgLy8gdmFsaWRhdGlvbiB3YXMgYXR0ZW1wdGVkIHdoaWxlIGl0IHdhcyBwYXVzZWQsIHNvIHJ1biBpdCBub3dcbiAgICAgICAgcnVuVmFsaWRhdGlvbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhbGlkYXRpb25CbG9ja2VkID0gZmFsc2U7XG4gICAgfSxcbiAgICBzZXRDb25maWc6IGZ1bmN0aW9uIHNldENvbmZpZyhuYW1lLCB2YWx1ZSkge1xuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIGNhc2UgJ2RlYnVnJzpcbiAgICAgICAgICBkZWJ1ZyA9IHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Rlc3Ryb3lPblVucmVnaXN0ZXInOlxuICAgICAgICAgIGRlc3Ryb3lPblVucmVnaXN0ZXIgPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdpbml0aWFsVmFsdWVzJzpcbiAgICAgICAgICBhcGkuaW5pdGlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAna2VlcERpcnR5T25SZWluaXRpYWxpemUnOlxuICAgICAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbXV0YXRvcnMnOlxuICAgICAgICAgIG11dGF0b3JzID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG11dGF0b3JzQXBpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBtdXRhdG9yc0FwaVtrZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgbXV0YXRvcnNBcGlba2V5XSA9IGdldE11dGF0b3JBcGkoa2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhtdXRhdG9yc0FwaSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBtdXRhdG9yc0FwaVtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnb25TdWJtaXQnOlxuICAgICAgICAgIG9uU3VibWl0ID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAndmFsaWRhdGUnOlxuICAgICAgICAgIHZhbGlkYXRlID0gdmFsdWU7XG4gICAgICAgICAgcnVuVmFsaWRhdGlvbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAndmFsaWRhdGVPbkJsdXInOlxuICAgICAgICAgIHZhbGlkYXRlT25CbHVyID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXNlZCBvcHRpb24gJyArIG5hbWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3VibWl0OiBmdW5jdGlvbiBzdWJtaXQoKSB7XG4gICAgICB2YXIgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlO1xuXG4gICAgICBpZiAoZm9ybVN0YXRlLnN1Ym1pdHRpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzU3luY0Vycm9ycygpKSB7XG4gICAgICAgIG1hcmtBbGxGaWVsZHNUb3VjaGVkKCk7XG4gICAgICAgIHN0YXRlLmZvcm1TdGF0ZS5zdWJtaXRGYWlsZWQgPSB0cnVlO1xuICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgIHJldHVybjsgLy8gbm8gc3VibWl0IGZvciB5b3UhIVxuICAgICAgfVxuXG4gICAgICB2YXIgYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNLZXlzID0gT2JqZWN0LmtleXMoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXMpO1xuXG4gICAgICBpZiAoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNLZXlzLmxlbmd0aCkge1xuICAgICAgICAvLyBzdGlsbCB3YWl0aW5nIG9uIGFzeW5jIHZhbGlkYXRpb24gdG8gY29tcGxldGUuLi5cbiAgICAgICAgUHJvbWlzZS5hbGwoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNLZXlzLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChhc3luY1ZhbGlkYXRpb25Qcm9taXNlc1tOdW1iZXIoa2V5KV0pO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIFtdKSkudGhlbihhcGkuc3VibWl0LCBhcGkuc3VibWl0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmllbGRCbG9ja2luZ1N1Ym1pdCA9IGJlZm9yZVN1Ym1pdCgpO1xuXG4gICAgICBpZiAoZmllbGRCbG9ja2luZ1N1Ym1pdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgICAgIHZhciBjb21wbGV0ZUNhbGxlZCA9IGZhbHNlO1xuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZShlcnJvcnMpIHtcbiAgICAgICAgZm9ybVN0YXRlLnN1Ym1pdHRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAoZXJyb3JzICYmIGhhc0FueUVycm9yKGVycm9ycykpIHtcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0RmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0U3VjY2VlZGVkID0gZmFsc2U7XG4gICAgICAgICAgZm9ybVN0YXRlLnN1Ym1pdEVycm9ycyA9IGVycm9ycztcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0RXJyb3IgPSBlcnJvcnNbRk9STV9FUlJPUl07XG4gICAgICAgICAgbWFya0FsbEZpZWxkc1RvdWNoZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZm9ybVN0YXRlLnN1Ym1pdEVycm9ycztcbiAgICAgICAgICBkZWxldGUgZm9ybVN0YXRlLnN1Ym1pdEVycm9yO1xuICAgICAgICAgIGZvcm1TdGF0ZS5zdWJtaXRGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0U3VjY2VlZGVkID0gdHJ1ZTtcbiAgICAgICAgICBhZnRlclN1Ym1pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICBjb21wbGV0ZUNhbGxlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHJlc29sdmVQcm9taXNlKSB7XG4gICAgICAgICAgcmVzb2x2ZVByb21pc2UoZXJyb3JzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgICB9O1xuXG4gICAgICBmb3JtU3RhdGUuc3VibWl0dGluZyA9IHRydWU7XG4gICAgICBmb3JtU3RhdGUuc3VibWl0RmFpbGVkID0gZmFsc2U7XG4gICAgICBmb3JtU3RhdGUuc3VibWl0U3VjY2VlZGVkID0gZmFsc2U7XG4gICAgICBmb3JtU3RhdGUubGFzdFN1Ym1pdHRlZFZhbHVlcyA9IF9leHRlbmRzKHt9LCBmb3JtU3RhdGUudmFsdWVzKTsgLy8gb25TdWJtaXQgaXMgZWl0aGVyIHN5bmMsIGNhbGxiYWNrIG9yIGFzeW5jIHdpdGggYSBQcm9taXNlXG5cbiAgICAgIHZhciByZXN1bHQgPSBvblN1Ym1pdChmb3JtU3RhdGUudmFsdWVzLCBhcGksIGNvbXBsZXRlKTtcblxuICAgICAgaWYgKCFjb21wbGV0ZUNhbGxlZCkge1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgLy8gb25TdWJtaXQgaXMgYXN5bmMgd2l0aCBhIFByb21pc2VcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7IC8vIGxldCBldmVyeW9uZSBrbm93IHdlIGFyZSBzdWJtaXR0aW5nXG5cbiAgICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpOyAvLyBub3RpZnkgZmllbGRzIGFsc29cblxuICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbihjb21wbGV0ZSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAob25TdWJtaXQubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAvLyBtdXN0IGJlIGFzeW5jLCBzbyB3ZSBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZVxuICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTsgLy8gbGV0IGV2ZXJ5b25lIGtub3cgd2UgYXJlIHN1Ym1pdHRpbmdcblxuICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7IC8vIG5vdGlmeSBmaWVsZHMgYWxzb1xuXG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb25TdWJtaXQgaXMgc3luY1xuICAgICAgICAgIGNvbXBsZXRlKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKHN1YnNjcmliZXIsIHN1YnNjcmlwdGlvbikge1xuICAgICAgaWYgKCFzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY2FsbGJhY2sgZ2l2ZW4uJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc3Vic2NyaXB0aW9uIHByb3ZpZGVkLiBXaGF0IHZhbHVlcyBkbyB5b3Ugd2FudCB0byBsaXN0ZW4gdG8/Jyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBtZW1vaXplZCA9IG1lbW9pemUoc3Vic2NyaWJlcik7XG4gICAgICB2YXIgc3Vic2NyaWJlcnMgPSBzdGF0ZS5zdWJzY3JpYmVycyxcbiAgICAgICAgICBsYXN0Rm9ybVN0YXRlID0gc3RhdGUubGFzdEZvcm1TdGF0ZTtcbiAgICAgIHZhciBpbmRleCA9IHN1YnNjcmliZXJzLmluZGV4Kys7XG4gICAgICBzdWJzY3JpYmVycy5lbnRyaWVzW2luZGV4XSA9IHtcbiAgICAgICAgc3Vic2NyaWJlcjogbWVtb2l6ZWQsXG4gICAgICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uXG4gICAgICB9O1xuICAgICAgdmFyIG5leHRGb3JtU3RhdGUgPSBjYWxjdWxhdGVOZXh0Rm9ybVN0YXRlKCk7XG5cbiAgICAgIGlmIChuZXh0Rm9ybVN0YXRlICE9PSBsYXN0Rm9ybVN0YXRlKSB7XG4gICAgICAgIHN0YXRlLmxhc3RGb3JtU3RhdGUgPSBuZXh0Rm9ybVN0YXRlO1xuICAgICAgfVxuXG4gICAgICBub3RpZnlTdWJzY3JpYmVyKG1lbW9pemVkLCBzdWJzY3JpcHRpb24sIG5leHRGb3JtU3RhdGUsIG5leHRGb3JtU3RhdGUsIGZpbHRlckZvcm1TdGF0ZSwgdHJ1ZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWxldGUgc3Vic2NyaWJlcnMuZW50cmllc1tpbmRleF07XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGFwaTtcbn07XG5cbi8vXG5cbmV4cG9ydCB7IEFSUkFZX0VSUk9SLCBGT1JNX0VSUk9SLCBjb25maWdPcHRpb25zLCBjcmVhdGVGb3JtLCBmaWVsZFN1YnNjcmlwdGlvbkl0ZW1zLCBmb3JtU3Vic2NyaXB0aW9uSXRlbXMsIGdldEluLCBzZXRJbiwgdmVyc2lvbiB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZW1pemUoIGZuLCBvcHRpb25zICkge1xuXHR2YXIgc2l6ZSA9IDAsXG5cdFx0bWF4U2l6ZSwgaGVhZCwgdGFpbDtcblxuXHRpZiAoIG9wdGlvbnMgJiYgb3B0aW9ucy5tYXhTaXplICkge1xuXHRcdG1heFNpemUgPSBvcHRpb25zLm1heFNpemU7XG5cdH1cblxuXHRmdW5jdGlvbiBtZW1vaXplZCggLyogLi4uYXJncyAqLyApIHtcblx0XHR2YXIgbm9kZSA9IGhlYWQsXG5cdFx0XHRsZW4gPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdFx0YXJncywgaTtcblxuXHRcdHNlYXJjaENhY2hlOiB3aGlsZSAoIG5vZGUgKSB7XG5cdFx0XHQvLyBQZXJmb3JtIGEgc2hhbGxvdyBlcXVhbGl0eSB0ZXN0IHRvIGNvbmZpcm0gdGhhdCB3aGV0aGVyIHRoZSBub2RlXG5cdFx0XHQvLyB1bmRlciB0ZXN0IGlzIGEgY2FuZGlkYXRlIGZvciB0aGUgYXJndW1lbnRzIHBhc3NlZC4gVHdvIGFycmF5c1xuXHRcdFx0Ly8gYXJlIHNoYWxsb3dseSBlcXVhbCBpZiB0aGVpciBsZW5ndGggbWF0Y2hlcyBhbmQgZWFjaCBlbnRyeSBpc1xuXHRcdFx0Ly8gc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgdHdvIHNldHMuIEF2b2lkIGFic3RyYWN0aW5nIHRvIGFcblx0XHRcdC8vIGZ1bmN0aW9uIHdoaWNoIGNvdWxkIGluY3VyIGFuIGFyZ3VtZW50cyBsZWFraW5nIGRlb3B0aW1pemF0aW9uLlxuXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIG5vZGUgYXJndW1lbnRzIG1hdGNoIGFyZ3VtZW50cyBsZW5ndGhcblx0XHRcdGlmICggbm9kZS5hcmdzLmxlbmd0aCAhPT0gYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dDtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgbm9kZSBhcmd1bWVudHMgbWF0Y2ggYXJndW1lbnRzIHZhbHVlc1xuXHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0aWYgKCBub2RlLmFyZ3NbIGkgXSAhPT0gYXJndW1lbnRzWyBpIF0gKSB7XG5cdFx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dDtcblx0XHRcdFx0XHRjb250aW51ZSBzZWFyY2hDYWNoZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50IHdlIGNhbiBhc3N1bWUgd2UndmUgZm91bmQgYSBtYXRjaFxuXG5cdFx0XHQvLyBTdXJmYWNlIG1hdGNoZWQgbm9kZSB0byBoZWFkIGlmIG5vdCBhbHJlYWR5XG5cdFx0XHRpZiAoIG5vZGUgIT09IGhlYWQgKSB7XG5cdFx0XHRcdC8vIEFzIHRhaWwsIHNoaWZ0IHRvIHByZXZpb3VzLiBNdXN0IG9ubHkgc2hpZnQgaWYgbm90IGFsc29cblx0XHRcdFx0Ly8gaGVhZCwgc2luY2UgaWYgYm90aCBoZWFkIGFuZCB0YWlsLCB0aGVyZSBpcyBubyBwcmV2aW91cy5cblx0XHRcdFx0aWYgKCBub2RlID09PSB0YWlsICkge1xuXHRcdFx0XHRcdHRhaWwgPSBub2RlLnByZXY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGp1c3Qgc2libGluZ3MgdG8gcG9pbnQgdG8gZWFjaCBvdGhlci4gSWYgbm9kZSB3YXMgdGFpbCxcblx0XHRcdFx0Ly8gdGhpcyBhbHNvIGhhbmRsZXMgbmV3IHRhaWwncyBlbXB0eSBgbmV4dGAgYXNzaWdubWVudC5cblx0XHRcdFx0bm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQ7XG5cdFx0XHRcdGlmICggbm9kZS5uZXh0ICkge1xuXHRcdFx0XHRcdG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bm9kZS5uZXh0ID0gaGVhZDtcblx0XHRcdFx0bm9kZS5wcmV2ID0gbnVsbDtcblx0XHRcdFx0aGVhZC5wcmV2ID0gbm9kZTtcblx0XHRcdFx0aGVhZCA9IG5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBpbW1lZGlhdGVseVxuXHRcdFx0cmV0dXJuIG5vZGUudmFsO1xuXHRcdH1cblxuXHRcdC8vIE5vIGNhY2hlZCB2YWx1ZSBmb3VuZC4gQ29udGludWUgdG8gaW5zZXJ0aW9uIHBoYXNlOlxuXG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiBhcmd1bWVudHMgKGF2b2lkIGxlYWtpbmcgZGVvcHRpbWl6YXRpb24pXG5cdFx0YXJncyA9IG5ldyBBcnJheSggbGVuICk7XG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdG5vZGUgPSB7XG5cdFx0XHRhcmdzOiBhcmdzLFxuXG5cdFx0XHQvLyBHZW5lcmF0ZSB0aGUgcmVzdWx0IGZyb20gb3JpZ2luYWwgZnVuY3Rpb25cblx0XHRcdHZhbDogZm4uYXBwbHkoIG51bGwsIGFyZ3MgKVxuXHRcdH07XG5cblx0XHQvLyBEb24ndCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgbm9kZSBpcyBhbHJlYWR5IGhlYWQsIHNpbmNlIGl0IHdvdWxkXG5cdFx0Ly8gaGF2ZSBiZWVuIHJldHVybmVkIGFib3ZlIGFscmVhZHkgaWYgaXQgd2FzXG5cblx0XHQvLyBTaGlmdCBleGlzdGluZyBoZWFkIGRvd24gbGlzdFxuXHRcdGlmICggaGVhZCApIHtcblx0XHRcdGhlYWQucHJldiA9IG5vZGU7XG5cdFx0XHRub2RlLm5leHQgPSBoZWFkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJZiBubyBoZWFkLCBmb2xsb3dzIHRoYXQgdGhlcmUncyBubyB0YWlsIChhdCBpbml0aWFsIG9yIHJlc2V0KVxuXHRcdFx0dGFpbCA9IG5vZGU7XG5cdFx0fVxuXG5cdFx0Ly8gVHJpbSB0YWlsIGlmIHdlJ3JlIHJlYWNoZWQgbWF4IHNpemUgYW5kIGFyZSBwZW5kaW5nIGNhY2hlIGluc2VydGlvblxuXHRcdGlmICggc2l6ZSA9PT0gbWF4U2l6ZSApIHtcblx0XHRcdHRhaWwgPSB0YWlsLnByZXY7XG5cdFx0XHR0YWlsLm5leHQgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzaXplKys7XG5cdFx0fVxuXG5cdFx0aGVhZCA9IG5vZGU7XG5cblx0XHRyZXR1cm4gbm9kZS52YWw7XG5cdH1cblxuXHRtZW1vaXplZC5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXHRcdGhlYWQgPSBudWxsO1xuXHRcdHRhaWwgPSBudWxsO1xuXHRcdHNpemUgPSAwO1xuXHR9O1xuXG5cdGlmICggcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JyApIHtcblx0XHQvLyBDYWNoZSBpcyBub3QgZXhwb3NlZCBpbiB0aGUgcHVibGljIEFQSSwgYnV0IHVzZWQgaW4gdGVzdHMgdG8gZW5zdXJlXG5cdFx0Ly8gZXhwZWN0ZWQgbGlzdCBwcm9ncmVzc2lvblxuXHRcdG1lbW9pemVkLmdldENhY2hlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyBoZWFkLCB0YWlsLCBzaXplIF07XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBtZW1vaXplZDtcbn07XG4iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xudmFyIGNoZWNrUHJvcFR5cGVzID0gcmVxdWlyZSgnLi9jaGVja1Byb3BUeXBlcycpO1xuXG52YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSAgKyAnYC4gVGhpcyBpcyBkZXByZWNhdGVkICcgK1xuICAgICAgICAgICAgICAnYW5kIHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcbiAgICAgICAgICAgICAgJ2xpYnJhcnkuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmctZG9udC1jYWxsLXByb3B0eXBlcyAnICsgJ2ZvciBkZXRhaWxzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIVJlYWN0SXMuaXNWYWxpZEVsZW1lbnRUeXBlKHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50IHR5cGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LCBnb3QgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIGFyZ3VtZW50cy4gJyArXG4gICAgICAgICAgICAnQSBjb21tb24gbWlzdGFrZSBpcyB0byB3cml0ZSBvbmVPZih4LCB5LCB6KSBpbnN0ZWFkIG9mIG9uZU9mKFt4LCB5LCB6XSkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMsIGZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3ltYm9sJykge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIFN0cmluZyhwcm9wVmFsdWUpICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChoYXMocHJvcFZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xuICAgICAgICAgICdyZWNlaXZlZCAnICsgZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKGNoZWNrZXIpICsgJyBhdCBpbmRleCAnICsgaSArICcuJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIGlmIChjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbVxuICAgICAgLy8gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXG4gICAgICAgICAgICAnXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xuICAgICAgICAgICAgJ1xcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuOC42XG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcblxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTtcbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8XG4gIC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSk7XG59XG5cbi8qKlxuICogRm9ya2VkIGZyb20gZmJqcy93YXJuaW5nOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZianMvYmxvYi9lNjZiYTIwYWQ1YmU0MzNlYjU0NDIzZjJiMDk3ZDgyOTMyNGQ5ZGU2L3BhY2thZ2VzL2ZianMvc3JjL19fZm9ya3NfXy93YXJuaW5nLmpzXG4gKlxuICogT25seSBjaGFuZ2UgaXMgd2UgdXNlIGNvbnNvbGUud2FybiBpbnN0ZWFkIG9mIGNvbnNvbGUuZXJyb3IsXG4gKiBhbmQgZG8gbm90aGluZyB3aGVuICdjb25zb2xlJyBpcyBub3Qgc3VwcG9ydGVkLlxuICogVGhpcyByZWFsbHkgc2ltcGxpZmllcyB0aGUgY29kZS5cbiAqIC0tLVxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGxvd1ByaW9yaXR5V2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmckMSA9IGxvd1ByaW9yaXR5V2FybmluZztcblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG5cbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xuXG4vLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlO1xuICAgICAgbG93UHJpb3JpdHlXYXJuaW5nJDEoZmFsc2UsICdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBfX0RFVl9fID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJztcblxudmFyIHdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAoX19ERVZfXykge1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMSA/IGxlbiAtIDEgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAxOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDFdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArXG4gICAgICBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfVxuXG4gIHdhcm5pbmcgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMiA/IGxlbiAtIDIgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAyOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDJdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgICAnbWVzc2FnZSBhcmd1bWVudCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBwcmludFdhcm5pbmcuYXBwbHkobnVsbCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbiIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wicmVnZW5lcmF0b3JSdW50aW1lXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcImNvbXBvbmVudHNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1wiZWRpdG9ySG9jc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1wiaGVscGVyc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJob2NzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcImhvb2tzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcImkxOG5cIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1wibW9kZWxcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmFsaWRhdG9yc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJ2YWx1ZU9iamVjdHNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImNvbXBvbmVudHNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImNvbXBvc2VcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImRhdGFcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImVsZW1lbnRcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImhvb2tzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJrZXljb2Rlc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIndwXCJdW1widXJsXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZlbmRvclwiXVtcImNsYXNzbmFtZXNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJsb2Rhc2hcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJSZWFjdFwiXTsgfSgpKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLmVkaXRvci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2VkaXRvci5jc3M/MWU5MCIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGlja2V0cy1tZXRhYm94L2RhdGVzLWFuZC10aWNrZXRzLW1ldGFib3guanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZGF0ZXMtYW5kLXRpY2tldHMtbWV0YWJveC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvYWN0aW9uLWhhbmRsZXJzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9hY3Rpb24taGFuZGxlcnMvd2l0aC1jb3B5LWRhdGUtZW50aXR5LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9hY3Rpb24taGFuZGxlcnMvd2l0aC10cmFzaC1kYXRlLWVudGl0eS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvYWN0aW9uLWhhbmRsZXJzL3dpdGgtdXBkYXRlLWV2ZW50LWRhdGUtcmVsYXRpb24uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZGF0ZXMtYW5kLXRpbWVzL2VkaXRvci1kYXRlL2FjdGlvbnMtbWVudS9lZGl0b3ItZGF0ZS1lbnRpdHktYWN0aW9ucy1tZW51LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9hY3Rpb25zLW1lbnUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZGF0ZXMtYW5kLXRpbWVzL2VkaXRvci1kYXRlL2FjdGlvbnMtbWVudS9zdHlsZS5jc3M/MmYzYSIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZWRpdC1mb3JtL2RhdGUtZW50aXR5LWZvcm0taW5wdXRzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9lZGl0LWZvcm0vZGF0ZS1lbnRpdHktZm9ybS1tb2RhbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZWRpdC1mb3JtL2RhdGUtZW50aXR5LWZvcm0tc2NoZW1hLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9lZGl0LWZvcm0vZGF0ZS1lbnRpdHktZm9ybS1zdWJtaXQtaGFuZGxlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZWRpdC1mb3JtL2RhdGUtZW50aXR5LWZvcm0uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZGF0ZXMtYW5kLXRpbWVzL2VkaXRvci1kYXRlL2VkaXQtZm9ybS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZWRpdG9yLWRhdGUtZW50aXRpZXMtbGlzdC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZmlsdGVyLWJhci9kYXRlLWVudGl0aWVzLWxpc3QtZmlsdGVyLXV0aWxzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9maWx0ZXItYmFyL2RhdGUtbGlzdC1maWx0ZXItYmFyLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9maWx0ZXItYmFyL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9maWx0ZXItYmFyL3dpdGgtZGF0ZS1lbnRpdGllcy1saXN0LWZpbHRlci1iYXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZGF0ZXMtYW5kLXRpbWVzL2VkaXRvci1kYXRlL2ZpbHRlci1iYXIvd2l0aC1kYXRlLWVudGl0aWVzLWxpc3QtZmlsdGVyLXN0YXRlLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9maWx0ZXItYmFyL3dpdGgtZmlsdGVyZWQtZGF0ZS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZ3JpZC12aWV3L2VkaXRvci1kYXRlLWVudGl0aWVzLWdyaWQtdmlldy5jc3M/ZDRhNiIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZ3JpZC12aWV3L2VkaXRvci1kYXRlLWVudGl0aWVzLWdyaWQtdmlldy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZ3JpZC12aWV3L2VkaXRvci1kYXRlLWVudGl0eS1kZXRhaWxzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9ncmlkLXZpZXcvZWRpdG9yLWRhdGUtZW50aXR5LWdyaWQtaXRlbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvZ3JpZC12aWV3L2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvbGlzdC12aWV3L2VkaXRvci1kYXRlLWVudGl0aWVzLWxpc3Qtdmlldy5jc3M/ZTQyMCIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvbGlzdC12aWV3L2VkaXRvci1kYXRlLWVudGl0aWVzLWxpc3Qtdmlldy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvbGlzdC12aWV3L2VkaXRvci1kYXRlLWVudGl0eS1saXN0LWl0ZW0uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZGF0ZXMtYW5kLXRpbWVzL2VkaXRvci1kYXRlL2xpc3Qtdmlldy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvZXZlbnQtZWRpdG9yLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2hvY3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvaG9jcy93aXRoLWVkaXRvci1kYXRlLWVudGl0aWVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2hvY3Mvd2l0aC1lZGl0b3ItZGF0ZS10aWNrZXQtZW50aXRpZXMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvaG9jcy93aXRoLWVkaXRvci1ldmVudC1lbnRpdHkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvaG9jcy93aXRoLWVkaXRvci10aWNrZXQtZGF0ZS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9ob2NzL3dpdGgtZWRpdG9yLXRpY2tldC1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9ob2NzL3dpdGgtcHJpY2UtdHlwZS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9ob2NzL3dpdGgtdGlja2V0LXByaWNlLWVudGl0aWVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2luaXRpYWxpemF0aW9uL2NvbnRleHQvZWRpdG9yLWluaXRpYWxpemVkLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvaW5pdGlhbGl6YXRpb24vY29udGV4dC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9pbml0aWFsaXphdGlvbi9jb250ZXh0L3VzZS1lZGl0b3ItaW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvaW5pdGlhbGl6YXRpb24vZWRpdG9yLWluaXRpYWxpemF0aW9uLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2luaXRpYWxpemF0aW9uL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2luaXRpYWxpemF0aW9uL3VzZS1lZGl0b3ItaW5pdGlhbGl6YXRpb24uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvaW5pdGlhbGl6YXRpb24vd2l0aC1ldmVudC1kYXRlLWVudGl0aWVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2luaXRpYWxpemF0aW9uL3dpdGgtZXZlbnQtZW50aXR5LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2luaXRpYWxpemF0aW9uL3dpdGgtdGlja2V0LWVudGl0aWVzLWZvci1hbGwtZGF0ZS1lbnRpdGllcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci9ob29rcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci9ob29rcy91c2UtYXNzaWdubWVudHMtY2FsY3VsYXRvci5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci90aWNrZXQtYXNzaWdubWVudHMtaGFuZGxlci5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci1tb2RhbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci5jc3M/YzM4MiIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci93aXRoLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyLW1vZGFsLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9hY3Rpb24taGFuZGxlcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2FjdGlvbi1oYW5kbGVycy93aXRoLWNvcHktdGlja2V0LWVudGl0eS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvYWN0aW9uLWhhbmRsZXJzL3dpdGgtdHJhc2gtdGlja2V0LWVudGl0eS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvYWN0aW9ucy1tZW51L2VkaXRvci10aWNrZXQtYWN0aW9ucy1tZW51LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9hY3Rpb25zLW1lbnUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2FjdGlvbnMtbWVudS9zdHlsZS5jc3M/MDU4YyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvZWRpdC1mb3JtL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9lZGl0LWZvcm0vdGlja2V0LWVudGl0eS1mb3JtLWlucHV0cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvZWRpdC1mb3JtL3RpY2tldC1lbnRpdHktZm9ybS1zY2hlbWEuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2VkaXQtZm9ybS90aWNrZXQtZW50aXR5LWZvcm0uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2VkaXQtZm9ybS93aXRoLXRpY2tldC1lbnRpdHktZm9ybS1tb2RhbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvZWRpdG9yLXRpY2tldC1lbnRpdGllcy1saXN0LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL3N0eWxlLmNzcz82MGQxIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL3RpY2tldC1lbnRpdGllcy1saXN0LWZpbHRlci1iYXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2ZpbHRlci1iYXIvdGlja2V0LWVudGl0aWVzLWxpc3QtZmlsdGVyLXV0aWxzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL3dpdGgtZmlsdGVyZWQtdGlja2V0LWVudGl0aWVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL3dpdGgtdGlja2V0LWVudGl0aWVzLWZvci1maWx0ZXJlZC1kYXRlLWVudGl0aWVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL3dpdGgtdGlja2V0LWVudGl0aWVzLWxpc3QtZmlsdGVyLWJhci5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvZmlsdGVyLWJhci93aXRoLXRpY2tldC1lbnRpdGllcy1saXN0LWZpbHRlci1zdGF0ZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvZ3JpZC12aWV3L2VkaXRvci10aWNrZXQtZW50aXRpZXMtZ3JpZC12aWV3LmNzcz82NmU5Iiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9ncmlkLXZpZXcvZWRpdG9yLXRpY2tldC1lbnRpdGllcy1ncmlkLXZpZXcuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2dyaWQtdmlldy9lZGl0b3ItdGlja2V0LWVudGl0eS1kZXRhaWxzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9ncmlkLXZpZXcvZWRpdG9yLXRpY2tldC1lbnRpdHktZ3JpZC1pdGVtLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9ncmlkLXZpZXcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9saXN0LXZpZXcvZWRpdG9yLXRpY2tldC1lbnRpdGllcy1saXN0LXZpZXcuY3NzP2E0NWEiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L2xpc3Qtdmlldy9lZGl0b3ItdGlja2V0LWVudGl0aWVzLWxpc3Qtdmlldy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvbGlzdC12aWV3L2VkaXRvci10aWNrZXQtZW50aXR5LWxpc3QtaXRlbS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvbGlzdC12aWV3L2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9wcmljZS1jYWxjdWxhdG9yL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvcHJpY2UtY2FsY3VsYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvcHJpY2UtY2FsY3VsYXRvci9zdHlsZS5jc3M/MDBmMiIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvcHJpY2UtY2FsY3VsYXRvci90aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1mb3JtLWRhdGEtbWFwLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9wcmljZS1jYWxjdWxhdG9yL3RpY2tldC1wcmljZS1jYWxjdWxhdG9yLWZvcm0uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L3ByaWNlLWNhbGN1bGF0b3IvdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItbWVudS1pdGVtLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9wcmljZS1jYWxjdWxhdG9yL3VzZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1mb3JtLWRlY29yYXRvci5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvcHJpY2UtY2FsY3VsYXRvci91c2UtdGlja2V0LXByaWNlLWNhbGN1bGF0b3JzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9wcmljZS1jYWxjdWxhdG9yL3dpdGgtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItZm9ybS1tb2RhbC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhIb2xlcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFNwcmVhZC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvZmluYWwtZm9ybS1jYWxjdWxhdGUvZGlzdC9maW5hbC1mb3JtLWNhbGN1bGF0ZS5lcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9maW5hbC1mb3JtL2Rpc3QvZmluYWwtZm9ybS5lcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9tZW1pemUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9ub2RlX21vZHVsZXMvd2FybmluZy93YXJuaW5nLmpzIiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpcInJlZ2VuZXJhdG9yUnVudGltZVwifSIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwiY29tcG9uZW50c1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImVkaXRvckhvY3NcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwiaGVscGVyc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImhvY3NcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJob29rc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImkxOG5cIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJtb2RlbFwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcInZhbGlkYXRvcnNcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2YWx1ZU9iamVjdHNcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiY29tcG9uZW50c1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJjb21wb3NlXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImRhdGFcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJ3cFwiLFwiZWxlbWVudFwiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJob29rc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJrZXljb2Rlc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJ1cmxcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2ZW5kb3JcIixcImNsYXNzbmFtZXNcIl19Iiwid2VicGFjazovL2VlanMuZWRpdG9yL2V4dGVybmFsIHtcInRoaXNcIjpcImxvZGFzaFwifSIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci9leHRlcm5hbCB7XCJ0aGlzXCI6XCJSZWFjdFwifSJdLCJuYW1lcyI6WyJNZXRhQm94IiwiZXZlbnRJZCIsImluaXRpYWxpemVkIiwidXNlRWRpdG9ySW5pdGlhbGl6ZWQiLCJzcHJpbnRmIiwiX3giLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJfXyIsIkRhdGVzQW5kVGlja2V0c01ldGFib3giLCJ3aXRoRWRpdG9ySW5pdGlhbGl6YXRpb24iLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvbmVPZlR5cGUiLCJudW1iZXIiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwid2l0aENvcHlEYXRlRW50aXR5IiwiY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQiLCJ3aXRoRGlzcGF0Y2giLCJkaXNwYXRjaCIsImV2ZW50RW50aXR5IiwiZGF0ZUVudGl0eSIsInRpY2tldEVudGl0aWVzIiwiaXNNb2RlbEVudGl0eU9mTW9kZWwiLCJjb3B5RGF0ZUVudGl0eSIsImNyZWF0ZUVudGl0eSIsImNyZWF0ZVJlbGF0aW9ucyIsImZvckNsb25lIiwibmV3RGF0ZUVudGl0eSIsImlzRW1wdHkiLCJpZCIsIndpdGhUcmFzaERhdGVFbnRpdHkiLCJEQVRFVElNRSIsImRhdGVUaW1lTW9kZWwiLCJNT0RFTF9OQU1FIiwidHJhc2hEYXRlRW50aXR5IiwidHJhc2hFbnRpdHlCeUlkIiwid2luZG93IiwiY29uZmlybSIsIkVWRU5UIiwiZXZlbnRNb2RlbCIsIndpdGhVcGRhdGVFdmVudERhdGVSZWxhdGlvbiIsImNvbXBvc2UiLCJ3aXRoRWRpdG9yRXZlbnRFbnRpdHkiLCJ1cGRhdGVFdmVudERhdGVSZWxhdGlvbiIsIkVycm9yIiwiY3JlYXRlUmVsYXRpb24iLCJERUZBVUxUX0VNUFRZX0FSUkFZIiwiRWRpdG9yRGF0ZUVudGl0eUFjdGlvbnNNZW51IiwidGl0bGUiLCJpY29uIiwib25DbGljayIsInByb3BzIiwidG9nZ2xlRWRpdG9yIiwidG9vbHRpcCIsInRvZ2dsZVRpY2tldEFzc2lnbm1lbnRzIiwibGVuZ3RoIiwic2lkZWJhck1lbnVJdGVtcyIsInB1c2giLCJtYWluRHJvcERvd25NZW51IiwiZWRpdERhdGVNZW51SXRlbSIsInZpZXdUaWNrZXRzTWVudUl0ZW0iLCJhcHBseUZpbHRlcnMiLCJnZXRTaWRlYmFyTWVudUl0ZW1zIiwibWFwIiwic2lkZWJhck1lbnVJdGVtIiwiaW5kZXgiLCJ0eXBlIiwiRHJvcERvd25NZW51IiwiRW50aXR5QWN0aW9uTWVudUl0ZW0iLCJJY29uTWVudUl0ZW0iLCJlZGl0b3JPcGVuIiwic2lkZWJhck1lbnUiLCJDb21wb25lbnQiLCJ3aXRoRWRpdG9yIiwid2l0aEVkaXRvckRhdGVUaWNrZXRFbnRpdGllcyIsIndpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCIsIm5hbWUiLCJzdGFydCIsInRvRm9ybWF0IiwiY2xvc2VCdXR0b25MYWJlbCIsImRhdGVFbnRpdHlGb3JtSW5wdXRzIiwiZXhjbHVkZSIsInZhbHVlcyIsIkZvcm1JbnB1dCIsImlucHV0cyIsInByZWZpeCIsIm5vcm1hbGl6ZUVudGl0eUlkIiwiaW5kZXhPZiIsInZhbGlkYXRpb25zIiwicmVxdWlyZWQiLCJJbmZpbml0eSIsIkRhdGVFbnRpdHlGb3JtTW9kYWwiLCJkYXRlRW50aXR5Rm9ybVNjaGVtYSIsInN0YXRlIiwiZGF0YSIsImRhdGVFbnRpdHlGb3JtU3VibWl0SGFuZGxlciIsInJlcGxhY2VEYXRlSW5TdG9yZSIsInNldFN0YXRlIiwib3JpZ2luYWxEYXRlRW50aXR5IiwiY2xvbmUiLCJsb2FkSGFuZGxlciIsInN1Ym1pdEhhbmRsZXIiLCJyZXNldEhhbmRsZXIiLCJvYmplY3QiLCJmdW5jIiwid2l0aEVkaXRvck1vZGFsIiwiY3VzdG9tQ2xhc3MiLCJyZWNlaXZlQW5kUmVwbGFjZUVudGl0eVJlY29yZHMiLCJyZXBsYWNlRGF0ZSIsIkVWVF9JRCIsImRlc2NyaXB0aW9uIiwidG9JU08iLCJlbmQiLCJzdHJpcEluZmluaXR5IiwicmVnTGltaXQiLCJzb2xkIiwicmVzZXJ2ZWQiLCJvcmRlciIsInBhcmVudCIsImRlbGV0ZWQiLCJmb3JtRGF0YSIsImdldFZhbHVlIiwiZmllbGQiLCJkZWZhdWx0VmFsdWUiLCJTZXJ2ZXJEYXRlVGltZSIsInBhcnNlSW50IiwiaXNQcmltYXJ5IiwiRGF0ZUVudGl0eUZvcm0iLCJzdWJtaXRCdXR0b24iLCJjYW5jZWxCdXR0b24iLCJjdXJyZW50VmFsdWVzIiwiaW5pdGlhbFZhbHVlcyIsIm5ld09iamVjdCIsInR3b0NvbHVtbkFkbWluRm9ybUxheW91dCIsIkZvcm1TZWN0aW9uIiwiRm9ybVdyYXBwZXIiLCJGb3JtU2F2ZUNhbmNlbEJ1dHRvbnMiLCJGb3JtSW5mbyIsImZvcm1Sb3dzIiwiQXJyYXkiLCJpc0FycmF5IiwidW5zaGlmdCIsIndpdGhGb3JtSGFuZGxlciIsIkVkaXRvckRhdGVFbnRpdGllc0xpc3QiLCJhZGREYXRlRW50aXR5IiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImFkZE5ld0RhdGVFbnRpdHkiLCJ2aWV3IiwiZW50aXRpZXMiLCJvdGhlclByb3BzIiwiRWRpdG9yRGF0ZUVudGl0aWVzR3JpZFZpZXciLCJFZGl0b3JEYXRlRW50aXRpZXNMaXN0VmlldyIsImFkZE5ld0RhdGVCdXR0b24iLCJ0aWNrZXRBc3NpZ25tZW50c0J1dHRvbiIsIndpdGhFZGl0b3JEYXRlRW50aXRpZXMiLCJ3aXRoUGFnaW5hdGVkRGF0ZUVudGl0aWVzTGlzdEFuZEZpbHRlckJhciIsInRoZW4iLCJmaWx0ZXJEYXRlRW50aXRpZXMiLCJkYXRlRW50aXRpZXMiLCJzaG93RGF0ZXMiLCJzb3J0RGF0ZUVudGl0aWVzTGlzdCIsImZpbHRlciIsImlzVHJhc2hlZCIsImlzQWN0aXZlIiwiaXNVcGNvbWluZyIsImZpcnN0IiwidmFsaWRTdGF0dXMiLCJpc1NvbGRPdXQiLCJjYXBhY2l0eUF0T3JBYm92ZSIsImNhcGFjaXR5QmVsb3ciLCJpc1JlY2VudGx5RXhwaXJlZCIsImlzRXhwaXJlZCIsInNvcnQiLCJzb3J0QnkiLCJEYXRlVGltZSIsImlzVmFsaWQiLCJ0b01pbGxpcyIsImNhcGFjaXR5IiwidmFsaWRTb2xkIiwidmFsaWRGaW5pdGVSZWdsaW1pdCIsInZhbGlkSW5maW5pdGVSZWdsaW1pdCIsInN0YXR1cyIsInZhbGlkUmVnbGltaXQiLCJzZWFyY2hEYXRlRW50aXRpZXMiLCJzZWFyY2hUZXh0IiwidG9Mb3dlckNhc2UiLCJzZWFyY2giLCJEYXRlTGlzdEZpbHRlckJhciIsInNldFNob3dEYXRlcyIsInZhbHVlIiwibGFiZWwiLCJkYXRlc1NvcnRlZEJ5Iiwic2V0RGF0ZXNTb3J0ZWRCeSIsImRpc3BsYXlEYXRlcyIsInNldERpc3BsYXlEYXRlcyIsInNob3dGaWx0ZXIiLCJzb3J0RmlsdGVyIiwiZGlzcGxheUZpbHRlciIsInBhZ2luYXRpb25Db25maWciLCJ3aXRoRGF0ZUVudGl0aWVzTGlzdEZpbHRlclN0YXRlIiwid2l0aERhdGVFbnRpdGllc0xpc3RGaWx0ZXJCYXIiLCJ3aXRoRW50aXR5UGFnaW5hdGlvbiIsImdldEZpbHRlcmVkRGF0ZUVudGl0aWVzTGlzdCIsIkVudGl0eUxpc3QiLCJzZWFyY2hEYXRlTmFtZSIsImRhdGVzUGVyUGFnZSIsImRhdGVzVmlldyIsInNldFNlYXJjaERhdGVOYW1lIiwic2V0RGF0ZXNQZXJQYWdlIiwic2V0RGF0ZXNMaXN0VmlldyIsInNldERhdGVzR3JpZFZpZXciLCJzZXRGaWx0ZXJlZERhdGVFbnRpdGllcyIsImZpbHRlcmVkRW50aXRpZXMiLCJ1c2VNZW1vIiwidXNlRWZmZWN0Iiwid2l0aFNlbGVjdCIsInNlbGVjdCIsIm93blByb3BzIiwic3RvcmUiLCJnZXRFbnRpdGllc0J5SWRzIiwiZ2V0RmlsdGVyIiwiZmlsdGVyZWREYXRlRW50aXRpZXMiLCJzZXRGaWx0ZXIiLCJkYXRlRW50aXR5SWRzIiwid2l0aEZpbHRlcmVkRGF0ZUVudGl0aWVzIiwiaHRtbENsYXNzIiwiY2xhc3NOYW1lcyIsIkFETUlOX1JPVVRFUyIsInJvdXRlcyIsIkFETUlOX1JPVVRFX0FDVElPTlMiLCJBRE1JTl9ST1VURV9BQ1RJT05fREVGQVVMVCIsImdldEFkbWluVXJsIiwiRWRpdG9yRGF0ZUVudGl0eURldGFpbHMiLCJ1cGRhdGVOYW1lIiwibGVmdCIsInNob3dEZXNjIiwiZGVzYyIsInVwZGF0ZURlc2NyaXB0aW9uIiwidmVudWVFbnRpdHkiLCJzaG93VmVudWUiLCJlZGl0VmVudWVVcmwiLCJhZGRRdWVyeUFyZ3MiLCJWRU5VRVMiLCJFRElUIiwicG9zdCIsInJldHVybiIsImRldGFpbHMiLCJlZGl0YWJsZSIsInZhbHVlVHlwZSIsIm9uQ2hhbmdlIiwidXBkYXRlQ2FwYWNpdHkiLCJnZXREYXRldGltZVJlZ2lzdHJhdGlvbnNMaW5rIiwicmVnTGlzdFVybCIsIlJFR0lTVFJBVElPTlMiLCJldmVudF9pZCIsImRhdGV0aW1lX2lkIiwiZGF0ZU5hbWUiLCJ2ZW51ZU5hbWUiLCJkYXRlU29sZFJlc2VydmVkQ2FwYWNpdHkiLCJpZlZhbGlkRGF0ZUVudGl0eSIsIndpdGhFdmVudFZlbnVlRW50aXR5IiwiZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MiLCJnZXREYXRlVGltZVN0YXR1c1RleHRMYWJlbCIsIkVkaXRvckRhdGVFbnRpdHlHcmlkSXRlbSIsInNob3dEYXRlIiwic2lkZWJhckNvbG9yQ2xhc3MiLCJkYXRlU3RhdHVzIiwiZW5kVGltZSIsInN0YXJ0VGltZSIsImRhdGVTdHlsZUNsYXNzIiwiZGlzcGxheURhdGUiLCJ3aXRoRW50aXR5UGFwZXJGcmFtZSIsIkVkaXRvckRhdGVFbnRpdHlMaXN0SXRlbSIsInN0YXR1c0NsYXNzIiwiZ2V0U3RhdHVzQ2xhc3MiLCJiZ0NsYXNzIiwicmVnTGluayIsImdldERhdGVSZWdpc3RyYXRpb25zTGluayIsImlmQ29uZGl0aW9uIiwiY29udGFpbmVyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImVkaXRvciIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJwcmVwZW5kIiwiZWVFZGl0b3JFdmVudElkIiwicmVuZGVyIiwiZ2V0RGF0ZXRpbWVzIiwiREVGQVVMVF9PQkpFQ1QiLCJnZXRSZWxhdGVkRW50aXRpZXMiLCJldmVudHMiLCJnZXRFdmVudHMiLCJzbGljZSIsInBvcCIsIndpdGhFZGl0b3JUaWNrZXREYXRlRW50aXRpZXMiLCJ0aWNrZXRFbnRpdHkiLCJnZXRUaWNrZXRzIiwiZ2V0RW50aXRpZXMiLCJwcmljZVR5cGVFbnRpdGllcyIsImhhc0ZpbmlzaGVkUmVzb2x1dGlvbiIsInByaWNlVHlwZUVudGl0aWVzTG9hZGVkIiwiRU1QVFlfT0JKRUNUIiwibm9CYXNlUHJpY2UiLCJwcmljZUVudGl0aWVzTG9hZGVkIiwicHJpY2VFbnRpdGllcyIsIkVkaXRvckluaXRpYWxpemVkQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJQcm92aWRlciIsIkNvbnN1bWVyIiwidXNlQ29udGV4dCIsIkVkaXRvckluaXRpYWxpemF0aW9uIiwiZXZlbnRFbnRpdHlMb2FkZWQiLCJkYXRlRW50aXRpZXNMb2FkZWQiLCJ0aWNrZXRFbnRpdGllc0xvYWRlZCIsImVkaXRvckluaXRpYWxpemVkIiwic2V0SW5pdGlhbGl6ZWQiLCJjaGlsZHJlbiIsIldyYXBwZWRDb21wb25lbnQiLCJ1c2VFZGl0b3JJbml0aWFsaXphdGlvbiIsIndpdGhFdmVudEVudGl0eSIsIndpdGhFdmVudERhdGVFbnRpdGllcyIsIndpdGhUaWNrZXRFbnRpdGllc0ZvckFsbERhdGVFbnRpdGllcyIsInVzZVN0YXRlIiwic2V0RWRpdG9ySW5pdGlhbGl6ZWQiLCJnZXRFdmVudEJ5SWQiLCJnZXRSZWxhdGVkRW50aXRpZXNGb3JJZHMiLCJkYXRlSWRzIiwidXNlQXNzaWdubWVudHNDYWxjdWxhdG9yIiwiYXNzaWduZWRDb3VudHMiLCJhc3NpZ25lZFN0YXRlIiwiZ2V0TWVzc2FnZSIsInVzZUNhbGxiYWNrIiwibWlzc2luZ0Fzc2lnbm1lbnRDb3VudHMiLCJtZXNzYWdlIiwidGlja2V0c01pc3NpbmciLCJkYXRlcyIsInRpY2tldHMiLCJkYXRlc01pc3NpbmciLCJib3RoTWlzc2luZyIsInRvdGFsTWlzc2luZ0Fzc2lnbm1lbnRzIiwidXBkYXRlZENvdW50cyIsImNsb25lRGVlcCIsImNvdW50QXNzaWdubWVudENoYW5nZXNGb3JEYXRlcyIsImVtcHR5Q291bnQiLCJjb3VudCIsImRhdGVJZCIsImFzc2lnbmVkU3RhdGVGb3JEYXRlIiwiYXNzaWduZWQiLCJmb3JFYWNoIiwidGlja2V0SWQiLCJyZW1vdmVkU3RhdGVGb3JEYXRlIiwicmVtb3ZlZCIsImNvdW50QXNzaWdubWVudENoYW5nZXNGb3JUaWNrZXRzIiwicmVkdWNlIiwiaGFzTWlzc2luZ0Fzc2lnbm1lbnRzIiwibm9Bc3NpZ25tZW50c01lc3NhZ2UiLCJ1cGRhdGVkQXNzaWdubWVudHNDb3VudHMiLCJub0luZGV4IiwiaXNBc3NpZ25lZCIsInJldHVybkluZGV4IiwicHJvY2Vzc0NoYW5nZXMiLCJhZGRUaWNrZXRzIiwicmVtb3ZlVGlja2V0RW50aXRpZXMiLCJyZWxhdGlvblVwZGF0ZXMiLCJ0aWNrZXRJZHNUb1JlbW92ZSIsInRpY2tldElkc1RvQXNzaWduIiwiUHJvbWlzZSIsImFsbCIsInVuQXNzaWduVGlja2V0RW50aXR5Iiwic3BsaWNlIiwib21pdEJ5IiwiaXNVbmRlZmluZWQiLCJhc3NpZ25UaWNrZXRFbnRpdHkiLCJwcmV2U3RhdGUiLCJpc1JlbW92ZWQiLCJ1blJlbW92ZVRpY2tldEVudGl0eSIsImNsZWFuU3RhdGUiLCJhc3NpZ25lZENvdW50IiwiZGF0ZUlEIiwicmVtb3ZlVGlja2V0RW50aXR5IiwicmVtb3ZlZENvdW50IiwiZ2V0RGF0ZUJnQ29sb3JDbGFzcyIsImdldFRpY2tldEJnQ29sb3JDbGFzcyIsInRpY2tldE1vZGVsIiwiVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWwiLCJ0aWNrZXRFbnRpdGllc0J5RGF0ZUlkcyIsImFkZFRpY2tldEVudGl0aWVzIiwicGFnaW5hdGlvbiIsImhhc05vQXNzaWdubWVudHMiLCJzZXRBc3NpZ25lZFN0YXRlIiwiYXNzaWdubWVudENvdW50cyIsInN1Ym1pdHRpbmciLCJzZXRTdWJtaXR0aW5nIiwiZm9ybUVycm9yIiwic2V0Rm9ybUVycm9yIiwiaGFuZGxlciIsInVwZGF0ZXMiLCJ3YXNVcGRhdGVkIiwidXBkYXRlZCIsImNhdGNoIiwiZXJyb3IiLCJ3YXJuaW5nIiwidGlja2V0SGVhZGVycyIsImRhdGVDb3VudCIsImhlYWRlckNlbGxzIiwiY2xhc3MiLCJ0aWNrZXQiLCJzYWxlRGF0ZSIsInN0YXJ0RGF0ZSIsInByaWNlIiwieWVhclJvdyIsInllYXIiLCJ0aWNrZXRFbnRpdGllc0ZvclllYXIiLCJyb3dEYXRhIiwicm93TnVtYmVyIiwiY29sTnVtYmVyIiwiZGV0ZXJtaW5lQ3VycmVudEFzc2lnbm1lbnQiLCJkYXRlVGlja2V0RW50aXRpZXMiLCJoYXNUaWNrZXQiLCJmaW5kSW5kZXgiLCJnZXRBY3Rpb25Nb2RpZmllcnMiLCJjdXJyZW50bHlBc3NpZ25lZCIsImdldEFjdGlvbiIsImdldEFzc2lnbm1lbnRzRXJyb3JDbGFzcyIsImVudGl0aWVzSGF2ZUVtcHR5QXNzaWdubWVudHMiLCJnZXRJY29uQW5kQmdDb2xvciIsImJnQ29sb3IiLCJ0aWNrZXRDZWxsIiwiYWN0aW9uIiwiYXNzaWdubWVudHNFcnJvckNsYXNzIiwia2V5Q29kZSIsIkVOVEVSIiwiZGF0ZUhlYWRlciIsImRhdGVSb3dzIiwicm93cyIsImV2ZW50RGF0ZSIsImRhdGVZZWFyIiwiZ2V0Rm9ybUVycm9yIiwiZXJyb3JNZXNzYWdlIiwiRm9ybVN1Ym1pdEJ1dHRvbiIsIkZvcm1DYW5jZWxCdXR0b24iLCJ0YWJsZUlkIiwidGFibGVDYXB0aW9uIiwiaGFzUm93SGVhZGVycyIsInRhYmxlQ2xhc3MiLCJ3aXRoRWRpdG9yVGlja2V0RW50aXRpZXMiLCJyZWdpc3RyeSIsInRpY2tldElkcyIsInJlbW92ZVJlbGF0aW9uRm9yRW50aXR5IiwicmVsYXRpb25zUmVtb3ZlZCIsInVzZVJlZiIsImR0bVByb3BzIiwibm90aWNlIiwiZGF0ZSIsImN1cnJlbnQiLCJyZWxhdGVkVGlja2V0cyIsInVwZGF0ZWRBc3NpZ25tZW50Q291bnRzIiwib25VcGRhdGUiLCJ0b2dnbGVUaWNrZXRBc3NpZ25tZW50c01hbmFnZXIiLCJ1cGRhdGUiLCJhbGVydCIsIndpdGhGb3JtQ29udGFpbmVyQW5kUGxhY2Vob2xkZXIiLCJyZXR1cm5Bc1Byb3AiLCJlbnRpdGllc1BlclBhZ2UiLCJwb3NpdGlvbiIsIm1vZGFsUHJvcHNDYWxsYmFjayIsInNob3dNYW5hZ2VyIiwic2V0U2hvd01hbmFnZXIiLCJ0b2dnbGVNYW5hZ2VyIiwicHJldlNob3dNYW5hZ2VyIiwiREVGQVVMVF9ESVNQQVRDSCIsImNvcHlUaWNrZXRFbnRpdHkiLCJ3aXRoQ29weVRpY2tldEVudGl0eSIsIlRJQ0tFVCIsIm5ld1RpY2tldCIsInJlbGF0ZWRQcmljZXMiLCJuZXdQcmljZXMiLCJpIiwibmV3UHJpY2UiLCJ0cmFzaFRpY2tldEVudGl0eSIsIndpdGhUcmFzaFRpY2tldEVudGl0eSIsIkVkaXRvclRpY2tldEFjdGlvbnNNZW51IiwidG9nZ2xlVGlja2V0RWRpdG9yIiwidG9nZ2xlQ2FsY3VsYXRvciIsImRvUmVmcmVzaCIsImFzc2lnbkRhdGVzTWVudUl0ZW0iLCJpc1ZhbGlkRWxlbWVudCIsIndpdGhUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtTW9kYWwiLCJ3aXRoVGlja2V0RW50aXR5Rm9ybU1vZGFsIiwidGlja2V0RW50aXR5Rm9ybUlucHV0cyIsImNhbGN1bGF0b3IiLCJyZWNhbGN1bGF0ZUJhc2VQcmljZSIsInByZXZWYWx1ZSIsIk1vbmV5IiwiU2l0ZUN1cnJlbmN5IiwidGF4YWJsZSIsImVuZERhdGUiLCJxdHkiLCJ1c2VzIiwibWluIiwibWF4IiwiaXNEZWZhdWx0IiwidGlja2V0RW50aXR5Rm9ybVNjaGVtYSIsImFtb3VudCIsInRvTnVtYmVyIiwid3BVc2VyIiwiZ2V0Rm9ybVJvd3MiLCJUaWNrZXRFbnRpdHlGb3JtIiwidXNlVGlja2V0UHJpY2VDYWxjdWxhdG9ycyIsImNhbGN1bGF0ZVRpY2tldEJhc2VQcmljZSIsIndpdGhUaWNrZXRQcmljZUVudGl0aWVzIiwid2l0aFByaWNlVHlwZUVudGl0aWVzIiwiVGlja2V0RW50aXR5Rm9ybU1vZGFsIiwib25DbG9zZVRpY2tldEVkaXRvciIsIm9uT3BlblRpY2tldEVkaXRvciIsInNob3dFZGl0b3IiLCJzZXRTaG93RWRpdG9yIiwicHJldlNob3dFZGl0b3IiLCJFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3QiLCJhZGROZXdUaWNrZXRFbnRpdHkiLCJhZGROZXdUaWNrZXRFbnRpdHlCdXR0b24iLCJFZGl0b3JUaWNrZXRFbnRpdGllc0dyaWRWaWV3IiwiRWRpdG9yVGlja2V0RW50aXRpZXNMaXN0VmlldyIsIndpdGhOZXdUaWNrZXRFbnRpdHkiLCJzZXROZXdUaWNrZXRFbnRpdHkiLCJiYXNlUHJpY2VUeXBlRW50aXR5IiwiZmluZCIsInByaWNlVHlwZSIsInBidElkIiwiY3JlYXRlTmV3VGlja2V0RW50aXR5IiwiUFJUX0lEIiwibmV3QmFzZVByaWNlIiwid2l0aFBhZ2luYXRlZFRpY2tldEVudGl0aWVzTGlzdEFuZEZpbHRlckJhciIsIkVkaXRvclRpY2tldEVudGl0aWVzT25seUxpc3QiLCJ3aXRoVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyU3RhdGUiLCJ3aXRoVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyQmFyIiwiVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyQmFyIiwic2hvd1RpY2tldHMiLCJzZXRTaG93VGlja2V0cyIsImlzQ2hhaW5lZCIsInRpY2tldHNTb3J0ZWRCeSIsInNldFRpY2tldHNTb3J0ZWRCeSIsImRpc3BsYXlUaWNrZXRzIiwic2V0RGlzcGxheVRpY2tldHMiLCJzZXRJc0NoYWluZWQiLCJkaXNwbGF5VGlja2V0RGF0ZSIsInNldERpc3BsYXlUaWNrZXREYXRlIiwiaXNDaGFpbmVkRmlsdGVyIiwidGlja2V0c0NoYWluZWQiLCJib29sIiwiZmlsdGVyVGlja2V0RW50aXRpZXMiLCJzaG93IiwiaXNPblNhbGUiLCJpc1BlbmRpbmciLCJzb3J0VGlja2V0RW50aXRpZXNMaXN0IiwicGVyY2VudFNvbGRBdE9yQWJvdmUiLCJwZXJjZW50U29sZEJlbG93IiwiaXNBcmNoaXZlZCIsIm1heFF1YW50aXR5IiwidmFsaWRGaW5pdGVRdWFudGl0eSIsInZhbGlkSW5maW5pdGVRdWFudGl0eSIsInNlYXJjaFRpY2tldEVudGl0aWVzIiwid2l0aEZpbHRlcmVkVGlja2V0RW50aXRpZXMiLCJmaWx0ZXJlZFRpY2tldEVudGl0aWVzIiwid2l0aFRpY2tldEVudGl0aWVzRm9yRmlsdGVyZWREYXRlRW50aXRpZXMiLCJnZXRSZWxhdGlvbklkc0ZvckVudGl0eVJlbGF0aW9uIiwicmVsYXRlZERhdGVFbnRpdGllcyIsImludGVyc2VjdGlvbiIsImdldEZpbHRlcmVkVGlja2V0RW50aXRpZXNMaXN0Iiwic2VhcmNoVGlja2V0TmFtZSIsInNldFNlYXJjaFRpY2tldE5hbWUiLCJ0aWNrZXRzUGVyUGFnZSIsInNldFRpY2tldHNQZXJQYWdlIiwidGlja2V0c1ZpZXciLCJzZXRUaWNrZXRzTGlzdFZpZXciLCJzZXRUaWNrZXRzR3JpZFZpZXciLCJzZXRGaWx0ZXJlZFRpY2tldEVudGl0aWVzIiwidGlja2V0RW50aXR5SWRzIiwiRWRpdG9yVGlja2V0RGV0YWlscyIsInNob3dQcmljZSIsInJlZnJlc2hlZCIsImN1cnJlbnRQcmljZXMiLCJ0aWNrZXROYW1lIiwidGlja2V0RGVzY3JpcHRpb24iLCJ1cGRhdGVUaWNrZXRQcmljZSIsInRpY2tldFByaWNlIiwiZm9ybWF0dGVyIiwiZm9ybWF0TW9uZXkiLCJzZXR0aW5ncyIsInRpY2tldFNvbGRSZXNlcnZlZENhcGFjaXR5IiwiZ2V0VGlja2V0U3RhdHVzVGV4dExhYmVsIiwiVElDS0VUX1NUQVRVU19JRCIsIkVkaXRvclRpY2tldEVudGl0eUdyaWRJdGVtIiwidGlja2V0U3RhdHVzSUQiLCJFWFBJUkVEIiwiUEVORElORyIsInRpY2tldFN0YXR1cyIsImRpc3BsYXlUaWNrZXQiLCJ1c2VSZWR1Y2VyIiwicyIsIkVkaXRvclRpY2tldEVudGl0eUxpc3RJdGVtIiwiZ2V0VGlja2V0U3RhdHVzQ2xhc3MiLCJ0b1N0cmluZyIsInJlZ0NvdW50IiwicmVmcmVzaGVyIiwiVElDS0VUX1BSSUNFX0NBTENVTEFUT1JfRk9STV9JTlBVVF9QUkVGSVgiLCJidWlsZFRpY2tldERhdGFNYXAiLCJ0aWNrZXRJRCIsInRpY2tldElzVGF4YWJsZSIsInRpY2tldFRvdGFsIiwiZm9ybWF0TnVtYmVyIiwiYnVpbGRQcmljZXNEYXRhTWFwIiwicHJpY2VJRHMiLCJwcmljZVR5cGVzIiwicHJpY2VFbnRpdHkiLCJwcmljZUlkIiwic2hvcnRlbkN1aWQiLCJwcnRJZCIsInByaWNlUHJlZml4IiwidW5pcSIsImpvaW4iLCJjdWlkIiwiaGFzT3duUHJvcGVydHkiLCJzdWJzdHJpbmciLCJ0aWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtRGF0YU1hcCIsInJldmVyc2VDYWxjdWxhdGUiLCJCQVNFX1BSSUNFX1RZUEVTIiwicHJpY2VUeXBlTW9kZWwiLCJJbnB1dExhYmVsIiwiVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybSIsInByaWNlVHlwZU9wdGlvbnMiLCJwcmljZVR5cGVFbnRpdHkiLCJwcmljZVR5cGVJZCIsImxhc3QiLCJzaWduQjQiLCJzaWduIiwic2lnbkNsYXNzIiwic2lnbkNoYXJzIiwiaXNQZXJjZW50IiwicGVyY2VudFNpZ24iLCJjdXJyZW5jeVNpZ24iLCJ0aWNrZXRQcmVmaXgiLCJsYXN0Um93IiwiZ2V0UHJpY2VUeXBlIiwiZ2V0RGVmYXVsdFByaWNlVHlwZUlkIiwiQkFTRV9QUklDRSIsIm1vZGlmaWVyU2lnbiIsImFtb3VudENsYXNzIiwicGFyc2VNb25leVZhbHVlIiwicHJldmlvdXMiLCJwYXJzZUZsb2F0IiwiZ2V0TW9kaWZpZXJBY3Rpb25CdXR0b25zIiwiYWRkTW9kaWZpZXIiLCJhZGRQcmljZU1vZGlmaWVyIiwiZGVsZXRlTW9kaWZpZXIiLCJ0cmFzaFByaWNlTW9kaWZpZXIiLCJzZXRSZXZlcnNlQ2FsY3VsYXRlIiwiY2FsY0Rpckljb24iLCJjYWxjRGlyVGV4dCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJhbGxQcmljZVR5cGVPcHRpb25zIiwiYnVpbGRQcmljZVR5cGVPcHRpb25zIiwid2FybmluZ3MiLCJwcmljZUNvdW50Iiwic29ydGVkUHJpY2VzIiwib3B0aW9ucyIsInByaWNlTW9kaWZpZXJSb3ciLCJmb3JtSGVhZGVyIiwidGlja2V0VG90YWxSb3ciLCJUaWNrZXRQcmljZUNhbGN1bGF0b3JNZW51SXRlbSIsIm9uT3BlblRpY2tldENhbGN1bGF0b3IiLCJvbkNsb3NlVGlja2V0Q2FsY3VsYXRvciIsInNob3dDYWxjdWxhdG9yIiwidG9nZ2xlIiwidG9nZ2xlQWN0aW9uIiwiZmxvdyIsIm1vbmV5VmFsdWUiLCJyZXBsYWNlIiwiUmVnRXhwIiwidGhvdXNhbmRzU2VwYXJhdG9yIiwiaXNOYU4iLCJnZXRUaWNrZXRJZCIsImdldFRpY2tldFRvdGFsIiwidG90YWwiLCJjYWxjdWxhdGVUaWNrZXRUb3RhbEZyb21Nb2RpZmllcnMiLCJwcmljZU1vZGlmaWVycyIsImdldFByaWNlTW9kaWZpZXJzRnJvbUZvcm1EYXRhIiwidG9GaXhlZCIsImRlY2ltYWxQbGFjZXMiLCJnZXRCYXNlUHJpY2VGb3JtRmllbGRJRCIsImJhc2VQcmVmaXgiLCJzcGxpdCIsInByaWNlSUQiLCJiYXNlUHJpY2UiLCJjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2VGcm9tVG90YWwiLCJiYXNlUHJpY2VGb3JtRmllbGRJRCIsInByaWNlQW1vdW50IiwidXNlVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybURlY29yYXRvciIsImRlbGF5IiwiY2FsY3VsYXRlVGlja2V0VG90YWwiLCJ0b3RhbENoYW5nZWRUbyIsInNldFRvdGFsQ2hhbmdpbmdUbyIsIm11dGF0b3JDYWxsYmFja3MiLCJzZXRNdXRhdG9yQ2FsbGJhY2tzIiwiZGVib3VuY2VkVG90YWxDaGFuZ2VkVG8iLCJ1c2VEZWJvdW5jZSIsInRvdGFsTXV0YXRvciIsIm5ld1RvdGFsIiwiY2hhbmdlVmFsdWUiLCJkZWNvcmF0b3IiLCJjcmVhdGVEZWNvcmF0b3IiLCJwcmV2RGF0YSIsImNhbGN1bGF0ZVRpY2tldFByaWNlcyIsImZvcm1Ub3RhbCIsIm11dGF0b3JzIiwibm9ybWFsQ2FzZXMiLCJjdXJyZW50VG90YWwiLCJESVNDT1VOVCIsIlNVUkNIQVJHRSIsIlRBWCIsInJldmVyc2VDYXNlcyIsImdldEJhc2VQcmljZSIsIm1lbW9pemUiLCJwcmljZXMiLCJhY2NydWVBbW91bnQiLCJjYXNlcyIsImRlZmF1bHRDYXNlIiwidHlwZUlkIiwiZ2V0UHJpY2VUeXBlRm9yUHJpY2UiLCJwdCIsInVwZGF0ZUJhc2VQcmljZSIsInJldmVyc2UiLCJiYXNlUHJpY2VUb3RhbCIsImNhbGN1bGF0ZVRpY2tldFRvdGFscyIsIlRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1Nb2RhbCIsImV4dHJhUHJvcHMiLCJzZXRGb3JtRGF0YSIsIm5ld0Zvcm1EYXRhIiwidG90YWxzIiwibG9hZGluZyIsImZvcm1Qcm9wcyIsIndpdGhTdGF0ZSIsImZvcm1DaGFuZ2VzIiwiUFJDX29yZGVyIiwicHJpY2VNb2RpZmllciIsInNldFNob3dDYWxjdWxhdG9yIiwicHJldlNob3dDYWxjdWxhdG9yIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixvQkFBb0I7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLGFBQWE7QUFDcEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLHdCQUF3QjtBQUN4QixjQUFjO0FBQ2Q7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixzQ0FBc0Msa0ZBQVEsR0FBRztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixrRkFBUSxHQUFHO0FBQ3pDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLGtGQUFRLEdBQUcsK0JBQStCLGtCQUFrQixrRkFBUSxHQUFHO0FBQzVGO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSwrQkFBK0Isa0ZBQVEsR0FBRyx5Q0FBeUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyRUFBMkUsYUFBYTtBQUN4RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUk7O0FBRVA7QUFDQTs7QUFFQTtBQUNBLHFDQUFxQyxrRkFBUSxHQUFHLDJCQUEyQjs7QUFFM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHFCQUFxQixrRkFBUSxHQUFHOztBQUVoQzs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQSxhQUFhO0FBQ2IsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQSxtQkFBbUIsa0ZBQVEsR0FBRyxxREFBcUQ7O0FBRW5GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTs7O0FBR047O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsa0ZBQVEsR0FBRzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLG9DQUFvQztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLGtGQUFRLEdBQUc7O0FBRWhDLGdEQUFnRDs7QUFFaEQ7QUFDQTtBQUNBLDRHQUE0Rzs7QUFFNUc7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLLElBQUk7QUFDVDtBQUNBO0FBQ0E7QUFDQSwyRUFBMkUsU0FBUzs7QUFFcEY7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGtCQUFrQjtBQUNsQixpQkFBaUI7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSTtBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsa0ZBQVEsR0FBRztBQUNsQztBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0EseUJBQXlCLGtGQUFRLEdBQUc7QUFDcEM7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsa0ZBQVEsR0FBRzs7QUFFbEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3R0FBd0c7O0FBRXhHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUZBQW1GO0FBQ25GO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QyxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxrRkFBUSxHQUFHLG9CQUFvQjs7QUFFckU7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxnQ0FBZ0M7O0FBRWhDLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFb0k7Ozs7Ozs7Ozs7OztBQzl3Q3BJO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGNBQWMsU0FBUztBQUN2QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sS0FBK0IsR0FBRyxFQU10Qzs7QUFFRjtBQUNBOzs7Ozs7Ozs7Ozs7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixzQkFBc0I7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLG9CQUFvQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7OztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7O0FBRUEsSUFBSSxJQUFxQztBQUN6Qyw2QkFBNkIsbUJBQU8sQ0FBQyx5RkFBNEI7QUFDakU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0R0FBNEc7QUFDNUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7OztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsY0FBYyxtQkFBTyxDQUFDLDBFQUFVO0FBQ2hDLGFBQWEsbUJBQU8sQ0FBQyw0REFBZTs7QUFFcEMsMkJBQTJCLG1CQUFPLENBQUMseUZBQTRCO0FBQy9ELHFCQUFxQixtQkFBTyxDQUFDLHFFQUFrQjs7QUFFL0M7QUFDQTs7QUFFQSxJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLDZCQUE2QjtBQUM3QixRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsS0FBSztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULDRCQUE0QjtBQUM1QixPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsVUFBVSxLQUFxQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixzQkFBc0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLElBQXFDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLDJCQUEyQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sS0FBcUMsNEZBQTRGLFNBQU07QUFDN0k7QUFDQTs7QUFFQSxtQkFBbUIsZ0NBQWdDO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixnQ0FBZ0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDOWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSxJQUFxQztBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBVTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsdUZBQTJCO0FBQ3RELENBQUMsTUFBTSxFQUlOOzs7Ozs7Ozs7Ozs7O0FDbEJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYjs7QUFFQTs7Ozs7Ozs7Ozs7OztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7Ozs7QUFJYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUEsOENBQThDLGNBQWM7O0FBRTVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxzRkFBc0YsYUFBYTtBQUNuRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RkFBNEYsZUFBZTtBQUMzRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7Ozs7Ozs7Ozs7O0FDbE9hOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQztBQUNELG1CQUFtQixtQkFBTyxDQUFDLGtIQUErQjtBQUMxRDs7Ozs7Ozs7Ozs7OztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYyxhQUFvQjs7QUFFbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsV0FBVztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsV0FBVztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN0RBLGFBQWEsNkNBQTZDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBNUQsYUFBYSw2Q0FBNkMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0E1RCxhQUFhLDZDQUE2QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQTVELGFBQWEsK0JBQStCLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBOUMsYUFBYSwwQ0FBMEMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F6RCxhQUFhLHVDQUF1QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXRELGFBQWEsd0NBQXdDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBdkQsYUFBYSx1Q0FBdUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F0RCxhQUFhLHdDQUF3QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXZELGFBQWEsNkNBQTZDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBNUQsYUFBYSwrQ0FBK0MsRUFBRSxJOzs7Ozs7Ozs7OztBQ0E5RCxhQUFhLDJDQUEyQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQTFELGFBQWEsd0NBQXdDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBdkQsYUFBYSxxQ0FBcUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0FwRCxhQUFhLHdDQUF3QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXZELGFBQWEsc0NBQXNDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBckQsYUFBYSx5Q0FBeUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F4RCxhQUFhLG9DQUFvQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQW5ELGFBQWEsdURBQXVELEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBdEUsYUFBYSxpQ0FBaUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0FoRCxhQUFhLGdDQUFnQyxFQUFFLEkiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1lZGl0b3IuNWE3MDNmMTJmODA5ZGFjYmY0OWMuZGlzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1lZGl0b3ItZGl2XCI6XCJlZS1lZGl0b3ItZGl2XCIsXCJjb21wb25lbnRzLXBhbmVsXCI6XCJjb21wb25lbnRzLXBhbmVsXCIsXCJlc3ByZXNzby1lZGl0b3ItbGVnZW5kLWRpdlwiOlwiZXNwcmVzc28tZWRpdG9yLWxlZ2VuZC1kaXZcIixcImVzcHJlc3NvLWVkaXRvci1sZWdlbmQtdWxcIjpcImVzcHJlc3NvLWVkaXRvci1sZWdlbmQtdWxcIixcImVzcHJlc3NvLWVkaXRvclwiOlwiZXNwcmVzc28tZWRpdG9yXCIsXCJlZS1mb3JtLXJvd1wiOlwiZWUtZm9ybS1yb3dcIixcImNvbXBvbmVudHMtcGFuZWxfX2JvZHlcIjpcImNvbXBvbmVudHMtcGFuZWxfX2JvZHlcIixcImVlLWVkaXRvci1ldmVudC1kYXRlcy1hbmQtdGlja2V0c1wiOlwiZWUtZWRpdG9yLWV2ZW50LWRhdGVzLWFuZC10aWNrZXRzXCIsXCJlZS1tZXRhYm94LWhlYWRpbmdcIjpcImVlLW1ldGFib3gtaGVhZGluZ1wiLFwiZGFzaGljb25cIjpcImRhc2hpY29uXCIsXCJjb21wb25lbnRzLW1vZGFsX19mcmFtZVwiOlwiY29tcG9uZW50cy1tb2RhbF9fZnJhbWVcIixcImNvbXBvbmVudHMtbW9kYWxfX2NvbnRlbnRcIjpcImNvbXBvbmVudHMtbW9kYWxfX2NvbnRlbnRcIixcImNvbXBvbmVudHMtbW9kYWxfX2hlYWRlci1oZWFkaW5nXCI6XCJjb21wb25lbnRzLW1vZGFsX19oZWFkZXItaGVhZGluZ1wiLFwiY29tcG9uZW50cy1wYW5lbF9fYm9keS10aXRsZVwiOlwiY29tcG9uZW50cy1wYW5lbF9fYm9keS10aXRsZVwiLFwicmR0T3BlblwiOlwicmR0T3BlblwiLFwicmR0UGlja2VyXCI6XCJyZHRQaWNrZXJcIixcInJkdE5leHRcIjpcInJkdE5leHRcIixcInJkdFByZXZcIjpcInJkdFByZXZcIixcInJkdFN3aXRjaFwiOlwicmR0U3dpdGNoXCIsXCJkb3dcIjpcImRvd1wiLFwicmR0TmV3XCI6XCJyZHROZXdcIixcInJkdE9sZFwiOlwicmR0T2xkXCIsXCJyZHRBY3RpdmVcIjpcInJkdEFjdGl2ZVwiLFwicmR0VG9kYXlcIjpcInJkdFRvZGF5XCIsXCJ0aW1lX3BpY2tlcl9jb250YWluZXJcIjpcInRpbWVfcGlja2VyX2NvbnRhaW5lclwiLFwibW9kYWxfY29udGFpbmVyXCI6XCJtb2RhbF9jb250YWluZXJcIixcInBsLTNcIjpcInBsLTNcIixcInB4LTNcIjpcInB4LTNcIixcInByLTNcIjpcInByLTNcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7XG5cdERhc2hpY29uLFxuXHRQYW5lbCxcblx0UGFuZWxCb2R5LFxuXHRQYW5lbFJvdyxcbn0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fLCBfeCwgc3ByaW50ZiB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHtcblx0RXNwcmVzc29JY29uLFxuXHRGb3JtQ29udGFpbmVyLFxuXHRGb3JtUGxhY2Vob2xkZXIsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0ICcuLi8uLi9lZGl0b3IuY3NzJztcbmltcG9ydCBFZGl0b3JEYXRlRW50aXRpZXNMaXN0XG5cdGZyb20gJy4uL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9lZGl0b3ItZGF0ZS1lbnRpdGllcy1saXN0JztcbmltcG9ydCBFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3Rcblx0ZnJvbSAnLi4vdGlja2V0cy9lZGl0b3ItdGlja2V0L2VkaXRvci10aWNrZXQtZW50aXRpZXMtbGlzdCc7XG5pbXBvcnQgd2l0aEVkaXRvckluaXRpYWxpemF0aW9uLCB7IHVzZUVkaXRvckluaXRpYWxpemVkIH0gZnJvbSAnLi4vaW5pdGlhbGl6YXRpb24nO1xuXG5jb25zdCBNZXRhQm94ID0gKCB7IGV2ZW50SWQgfSApID0+IHtcblx0Y29uc3QgaW5pdGlhbGl6ZWQgPSB1c2VFZGl0b3JJbml0aWFsaXplZCgpO1xuXHRyZXR1cm4gKFxuXHRcdDxGcmFnbWVudD5cblx0XHRcdDxGb3JtUGxhY2Vob2xkZXJcblx0XHRcdFx0bG9hZGluZz17IGZhbHNlIH1cblx0XHRcdFx0bm90aWNlPXsgc3ByaW50Zihcblx0XHRcdFx0XHRfeChcblx0XHRcdFx0XHRcdCdsb2FkaW5nIGV2ZW50IGRhdGVzIGFuZCBhdmFpbGFibGUgdGlja2V0cyVzJyxcblx0XHRcdFx0XHRcdCdsb2FkaW5nIGV2ZW50IGRhdGVzIGFuZCBhdmFpbGFibGUgdGlja2V0cy4uLicsXG5cdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCA4MjMwIClcblx0XHRcdFx0KSB9XG5cdFx0XHQvPlxuXHRcdFx0PEZvcm1Db250YWluZXJcblx0XHRcdFx0bG9hZGluZz17IGZhbHNlIH1cblx0XHRcdFx0aWQ9eyBgZWUtZWRpdG9yLWV2ZW50LWRhdGVzLWFuZC10aWNrZXRzLSR7IGV2ZW50SWQgfWAgfVxuXHRcdFx0XHRodG1sQ2xhc3M9XCJlZS1lZGl0b3ItZXZlbnQtZGF0ZXMtYW5kLXRpY2tldHNcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8aDEgY2xhc3NOYW1lPVwiZWUtbWV0YWJveC1oZWFkaW5nXCI+XG5cdFx0XHRcdFx0PEVzcHJlc3NvSWNvbiBpY29uPVwiY2FsZW5kYXJcIiAvPlxuXHRcdFx0XHRcdHsgX18oICdFdmVudCBEYXRlcycsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdDwvaDE+XG5cdFx0XHRcdDxQYW5lbD5cblx0XHRcdFx0XHQ8UGFuZWxCb2R5XG5cdFx0XHRcdFx0XHRpZD17IGBlZS1lZGl0b3ItZXZlbnQtZGF0ZXMtJHsgZXZlbnRJZCB9YCB9XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS1lZGl0b3ItZXZlbnQtZGF0ZXMgZXNwcmVzc28tZWRpdG9yXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8UGFuZWxSb3dcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtZWRpdG9yLWV2ZW50LWRhdGVzIGVlLWZvcm0tcm93XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PEVkaXRvckRhdGVFbnRpdGllc0xpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdGxvYWRpbmc9eyAhIGluaXRpYWxpemVkIH1cblx0XHRcdFx0XHRcdFx0XHRcdGZvcj1cImV2ZW50LWRhdGVzLW1ldGFib3hcIlxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9QYW5lbFJvdz5cblx0XHRcdFx0XHQ8L1BhbmVsQm9keT5cblx0XHRcdFx0PC9QYW5lbD5cblx0XHRcdFx0PGJyIC8+XG5cdFx0XHRcdDxoMSBjbGFzc05hbWU9XCJlZS1tZXRhYm94LWhlYWRpbmdcIj5cblx0XHRcdFx0XHQ8RGFzaGljb24gaWNvbj1cInRpY2tldHMtYWx0XCIgLz5cblx0XHRcdFx0XHR7IF9fKCAnQXZhaWxhYmxlIFRpY2tldHMnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2gxPlxuXHRcdFx0XHQ8UGFuZWw+XG5cdFx0XHRcdFx0PFBhbmVsQm9keVxuXHRcdFx0XHRcdFx0aWQ9eyBgZWUtZWRpdG9yLWV2ZW50LXRpY2tldHMtJHsgZXZlbnRJZCB9YCB9XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS1lZGl0b3ItZXZlbnQtdGlja2V0cyBlc3ByZXNzby1lZGl0b3JcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxQYW5lbFJvd1xuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS1lZGl0b3ItZXZlbnQtdGlja2V0cyBlZS1mb3JtLXJvd1wiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdGxvYWRpbmc9eyAhIGluaXRpYWxpemVkIH1cblx0XHRcdFx0XHRcdFx0XHRcdGZvcj1cImV2ZW50LXRpY2tldHMtbWV0YWJveFwiXG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L1BhbmVsUm93PlxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PlxuXHRcdFx0XHQ8L1BhbmVsPlxuXHRcdFx0XHQ8YnIgLz5cblx0XHRcdDwvRm9ybUNvbnRhaW5lcj5cblx0XHQ8L0ZyYWdtZW50PlxuXHQpO1xufTtcblxuY29uc3QgRGF0ZXNBbmRUaWNrZXRzTWV0YWJveCA9IHdpdGhFZGl0b3JJbml0aWFsaXphdGlvbiggTWV0YUJveCApO1xuXG5NZXRhQm94LnByb3BUeXBlcyA9IHtcblx0ZXZlbnRJZDogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XSApLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlc0FuZFRpY2tldHNNZXRhYm94O1xuIiwiZXhwb3J0IHtcblx0ZGVmYXVsdCBhcyBFdmVudERhdGVzQW5kVGlja2V0c01ldGFib3gsXG59IGZyb20gJy4vZGF0ZXMtYW5kLXRpY2tldHMtbWV0YWJveCc7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhDb3B5RGF0ZUVudGl0eSB9IGZyb20gJy4vd2l0aC1jb3B5LWRhdGUtZW50aXR5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aFVwZGF0ZUV2ZW50RGF0ZVJlbGF0aW9uIH0gZnJvbSAnLi93aXRoLXVwZGF0ZS1ldmVudC1kYXRlLXJlbGF0aW9uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aFRyYXNoRGF0ZUVudGl0eSB9IGZyb20gJy4vd2l0aC10cmFzaC1kYXRlLWVudGl0eSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3aXRoRGlzcGF0Y2ggfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcblxuY29uc3Qgd2l0aENvcHlEYXRlRW50aXR5ID0gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdHdpdGhEaXNwYXRjaCggKFxuXHRcdGRpc3BhdGNoLFxuXHRcdHtcblx0XHRcdGV2ZW50RW50aXR5LFxuXHRcdFx0ZGF0ZUVudGl0eSxcblx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdH1cblx0KSA9PiB7XG5cdFx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBkYXRlRW50aXR5LCAnZGF0ZXRpbWUnICkgKSB7XG5cdFx0XHRyZXR1cm4geyBjb3B5RGF0ZUVudGl0eTogKCkgPT4gbnVsbCB9O1xuXHRcdH1cblx0XHRjb25zdCB7XG5cdFx0XHRjcmVhdGVFbnRpdHksXG5cdFx0XHRjcmVhdGVSZWxhdGlvbnMsXG5cdFx0fSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdGNvbnN0IGNvcHlEYXRlRW50aXR5ID0gYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgbmV3RGF0ZUVudGl0eSA9IGF3YWl0IGNyZWF0ZUVudGl0eShcblx0XHRcdFx0J2RhdGV0aW1lJyxcblx0XHRcdFx0ZGF0ZUVudGl0eS5mb3JDbG9uZVxuXHRcdFx0KTtcblx0XHRcdGlmICggISBpc0VtcHR5KCB0aWNrZXRFbnRpdGllcyApICkge1xuXHRcdFx0XHRjcmVhdGVSZWxhdGlvbnMoXG5cdFx0XHRcdFx0J2RhdGV0aW1lJyxcblx0XHRcdFx0XHRuZXdEYXRlRW50aXR5LmlkLFxuXHRcdFx0XHRcdCd0aWNrZXQnLFxuXHRcdFx0XHRcdHRpY2tldEVudGl0aWVzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjcmVhdGVSZWxhdGlvbnMoXG5cdFx0XHRcdCdldmVudCcsXG5cdFx0XHRcdGV2ZW50RW50aXR5LmlkLFxuXHRcdFx0XHQnZGF0ZXRpbWUnLFxuXHRcdFx0XHRbIG5ld0RhdGVFbnRpdHkgXVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBuZXdEYXRlRW50aXR5O1xuXHRcdH07XG5cdFx0cmV0dXJuIHsgY29weURhdGVFbnRpdHkgfTtcblx0fSApLFxuXHQnd2l0aENvcHlEYXRlRW50aXR5J1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aENvcHlEYXRlRW50aXR5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHdpdGhEaXNwYXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgZGF0ZVRpbWVNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbmNvbnN0IHdpdGhUcmFzaERhdGVFbnRpdHkgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0d2l0aERpc3BhdGNoKCAoIGRpc3BhdGNoLCB7IGRhdGVFbnRpdHkgfSApID0+IHtcblx0XHRjb25zdCB7IE1PREVMX05BTUU6IERBVEVUSU1FIH0gPSBkYXRlVGltZU1vZGVsO1xuXHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgREFURVRJTUUgKSApIHtcblx0XHRcdHJldHVybiB7IHRyYXNoRGF0ZUVudGl0eTogKCkgPT4gbnVsbCB9O1xuXHRcdH1cblx0XHRjb25zdCB7IHRyYXNoRW50aXR5QnlJZCB9ID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0Y29uc3QgdHJhc2hEYXRlRW50aXR5ID0gKCkgPT4ge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFsZXJ0XG5cdFx0XHRpZiAoICEgd2luZG93LmNvbmZpcm0oXG5cdFx0XHRcdF9fKFxuXHRcdFx0XHRcdCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgZGF0ZT8nLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0KVxuXHRcdFx0KSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dHJhc2hFbnRpdHlCeUlkKCBEQVRFVElNRSwgZGF0ZUVudGl0eS5pZCApO1xuXHRcdH07XG5cdFx0cmV0dXJuIHsgdHJhc2hEYXRlRW50aXR5IH07XG5cdH0gKSxcblx0J3dpdGhUcmFzaERhdGVFbnRpdHknXG4pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoVHJhc2hEYXRlRW50aXR5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBkYXRlVGltZU1vZGVsLCBldmVudE1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7IHdpdGhEaXNwYXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCwgY29tcG9zZSB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmltcG9ydCB7IHdpdGhFZGl0b3JFdmVudEVudGl0eSB9IGZyb20gJy4uLy4uLy4uL2hvY3MnO1xuXG5jb25zdCB7IE1PREVMX05BTUU6IERBVEVUSU1FIH0gPSBkYXRlVGltZU1vZGVsO1xuY29uc3QgeyBNT0RFTF9OQU1FOiBFVkVOVCB9ID0gZXZlbnRNb2RlbDtcblxuY29uc3Qgd2l0aFVwZGF0ZUV2ZW50RGF0ZVJlbGF0aW9uID0gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoRWRpdG9yRXZlbnRFbnRpdHksXG5cdFx0d2l0aERpc3BhdGNoKFxuXHRcdFx0KCBkaXNwYXRjaCwgeyBldmVudEVudGl0eSB9ICkgPT4ge1xuXHRcdFx0XHRjb25zdCB1cGRhdGVFdmVudERhdGVSZWxhdGlvbiA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0XHRcdFx0XHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIGV2ZW50RW50aXR5LCBFVkVOVCApICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRfXyggJ1VuYWJsZSB0byBwcm9jZXNzIHRoZSBFdmVudCBEYXRlIEVudGl0eSBmb3JtIGJlY2F1c2UgYW4nICtcblx0XHRcdFx0XHRcdFx0XHQnIGludmFsaWQgRXZlbnQgRW50aXR5IHdhcyBzdXBwbGllZC4gJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIGRhdGVFbnRpdHksIERBVEVUSU1FICkgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdF9fKCAnVW5hYmxlIHRvIHByb2Nlc3MgdGhlIEV2ZW50IERhdGUgRW50aXR5IGZvcm0gYmVjYXVzZSBhbicgK1xuXHRcdFx0XHRcdFx0XHRcdCcgaW52YWxpZCBEYXRlIEVudGl0eSB3YXMgc3VwcGxpZWQuICcsICdldmVudF9lc3ByZXNzbycgKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgeyBjcmVhdGVSZWxhdGlvbiB9ID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0XHRcdFx0Y3JlYXRlUmVsYXRpb24oXG5cdFx0XHRcdFx0XHRFVkVOVCxcblx0XHRcdFx0XHRcdGV2ZW50RW50aXR5LmlkLFxuXHRcdFx0XHRcdFx0REFURVRJTUUsXG5cdFx0XHRcdFx0XHRkYXRlRW50aXR5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIHsgdXBkYXRlRXZlbnREYXRlUmVsYXRpb24gfTtcblx0XHRcdH1cblx0XHQpLFxuXHRdICksXG5cdCd3aXRoVXBkYXRlRXZlbnREYXRlUmVsYXRpb24nXG4pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoVXBkYXRlRXZlbnREYXRlUmVsYXRpb247XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgYXBwbHlGaWx0ZXJzIH0gZnJvbSAnQHdvcmRwcmVzcy9ob29rcyc7XG5pbXBvcnQge1xuXHREcm9wRG93bk1lbnUsXG5cdEVudGl0eUFjdGlvbk1lbnVJdGVtLFxuXHRJY29uTWVudUl0ZW0sXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18sIHNwcmludGYsIF94IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyB3aXRoRWRpdG9yIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWRpdG9yLWhvY3MnO1xuaW1wb3J0IHsgZGF0ZVRpbWVNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHdpdGhFZGl0b3JEYXRlVGlja2V0RW50aXRpZXMgfSBmcm9tICcuLi8uLi8uLi9ob2NzJztcbmltcG9ydCB7IERhdGVFbnRpdHlGb3JtTW9kYWwgfSBmcm9tICcuLi9lZGl0LWZvcm0nO1xuaW1wb3J0IHsgd2l0aENvcHlEYXRlRW50aXR5LCB3aXRoVHJhc2hEYXRlRW50aXR5IH0gZnJvbSAnLi4vYWN0aW9uLWhhbmRsZXJzJztcbmltcG9ydCB7IHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCB9IGZyb20gJy4uLy4uLy4uL3RpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyJztcbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG5jb25zdCB7IE1PREVMX05BTUU6IERBVEVUSU1FIH0gPSBkYXRlVGltZU1vZGVsO1xuY29uc3QgREVGQVVMVF9FTVBUWV9BUlJBWSA9IFtdO1xuXG4vKipcbiAqIEVkaXRvckRhdGVFbnRpdHlBY3Rpb25zTWVudVxuICogbWVudSBvZiBJY29uQnV0dG9ucyBmb3IgcGVyZm9ybWluZyBhY3Rpb25zIG9uIHRoZSBzdXBwbGllZCBFdmVudCBEYXRlXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGRhdGVFbnRpdHkgRGF0ZXRpbWUgZW50aXR5IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIG1lbnVcbiAqL1xuY2xhc3MgRWRpdG9yRGF0ZUVudGl0eUFjdGlvbnNNZW51IGV4dGVuZHMgQ29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGRhdGVFbnRpdHkgICAgXHQgRGF0ZXRpbWUgQmFzZUVudGl0eSBpbnN0YW5jZVxuXHQgKiBAcmV0dXJuIHtEcm9wRG93bk1lbnV9ICAgIFx0XHQgRWRpdCBFdmVudCBEYXRlIERyb3BEb3duTWVudVxuXHQgKi9cblx0bWFpbkRyb3BEb3duTWVudSA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PERyb3BEb3duTWVudVxuXHRcdFx0XHR0b29sdGlwPXsgX18oICdldmVudCBkYXRlIG1haW4gbWVudScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxDbGFzcz17IGBlZGl0b3ItZGF0ZS0keyBkYXRlRW50aXR5LmlkIH1gIH1cblx0XHRcdFx0bWVudUl0ZW1zPXsgW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHRpdGxlOiBfXyggJ2VkaXQgZGF0ZScsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHRcdGljb246ICdlZGl0Jyxcblx0XHRcdFx0XHRcdG9uQ2xpY2s6IHRoaXMucHJvcHMudG9nZ2xlRWRpdG9yLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dGl0bGU6IF9fKCAnY29weSBkYXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdFx0aWNvbjogJ2FkbWluLXBhZ2UnLFxuXHRcdFx0XHRcdFx0b25DbGljazogdGhpcy5wcm9wcy5jb3B5RGF0ZUVudGl0eSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHRpdGxlOiBfXyggJ3RyYXNoIGRhdGUnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdFx0XHRpY29uOiAndHJhc2gnLFxuXHRcdFx0XHRcdFx0b25DbGljazogdGhpcy5wcm9wcy50cmFzaERhdGVFbnRpdHksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBKU09OIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZVxuXHQgKiBAcmV0dXJuIHtJY29uTWVudUl0ZW19ICAgIEVkaXQgRXZlbnQgRGF0ZSBJY29uTWVudUl0ZW1cblx0ICovXG5cdGVkaXREYXRlTWVudUl0ZW0gPSAoIGRhdGVFbnRpdHkgKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxJY29uTWVudUl0ZW1cblx0XHRcdFx0aW5kZXg9eyAxIH1cblx0XHRcdFx0dG9vbHRpcD17IF9fKCAnZWRpdCBkYXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0aWQ9eyBgZWRpdC1kYXRlLSR7IGRhdGVFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRodG1sQ2xhc3M9XCJlZGl0LWRhdGVcIlxuXHRcdFx0XHRkYXNoaWNvbj1cImVkaXRcIlxuXHRcdFx0XHRvbkNsaWNrPXsgdGhpcy5wcm9wcy50b2dnbGVFZGl0b3IgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgSlNPTiBvYmplY3QgZGVmaW5pbmcgdGhlIEV2ZW50IERhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gdGlja2V0RW50aXRpZXMgICAgVGlja2V0cyBmb3IgRXZlbnQgRGF0ZVxuXHQgKiBAcmV0dXJuIHtJY29uTWVudUl0ZW19ICAgIFZpZXcgVGlja2V0cyBmb3IgRXZlbnQgRGF0ZSBJY29uTWVudUl0ZW1cblx0ICovXG5cdHZpZXdUaWNrZXRzTWVudUl0ZW0gPSAoIGRhdGVFbnRpdHksIHRpY2tldEVudGl0aWVzICkgPT4ge1xuXHRcdGNvbnN0IHRvb2x0aXAgPSBpc0VtcHR5KCB0aWNrZXRFbnRpdGllcyApID9cblx0XHRcdF9fKFxuXHRcdFx0XHQnd2FybmluZyEgbm8gYXNzaWduZWQgdGlja2V0cyAtIGNsaWNrIHRvIGZpeCcsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdCkgOlxuXHRcdFx0X18oICdhc3NpZ24gdGlja2V0cycsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEljb25NZW51SXRlbVxuXHRcdFx0XHRpbmRleD17IDIgfVxuXHRcdFx0XHR0b29sdGlwPXsgdG9vbHRpcCB9XG5cdFx0XHRcdGlkPXsgYHZpZXctdGlja2V0cy1kYXRlLSR7IGRhdGVFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRodG1sQ2xhc3M9XCJ2aWV3LXRpY2tldHMtZGF0ZVwiXG5cdFx0XHRcdGRhc2hpY29uPVwidGlja2V0cy1hbHRcIlxuXHRcdFx0XHRvbkNsaWNrPXsgdGhpcy5wcm9wcy50b2dnbGVUaWNrZXRBc3NpZ25tZW50cyB9XG5cdFx0XHRcdGl0ZW1Db3VudD17IHRpY2tldEVudGl0aWVzLmxlbmd0aCB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBcdCBKU09OIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSB0aWNrZXRFbnRpdGllcyAgICBUaWNrZXRzIGZvciBFdmVudCBEYXRlXG5cdCAqIEByZXR1cm4ge0FycmF5fSAgICBcdFx0XHRcdCBBcnJheSBvZiBJY29uTWVudUl0ZW0gb2JqZWN0c1xuXHQgKi9cblx0Z2V0U2lkZWJhck1lbnVJdGVtcyA9ICggZGF0ZUVudGl0eSwgdGlja2V0RW50aXRpZXMgKSA9PiB7XG5cdFx0Y29uc3Qgc2lkZWJhck1lbnVJdGVtcyA9IFtdO1xuXHRcdHNpZGViYXJNZW51SXRlbXMucHVzaChcblx0XHRcdHRoaXMubWFpbkRyb3BEb3duTWVudSggZGF0ZUVudGl0eSApXG5cdFx0KTtcblx0XHRzaWRlYmFyTWVudUl0ZW1zLnB1c2goIHRoaXMuZWRpdERhdGVNZW51SXRlbSggZGF0ZUVudGl0eSApICk7XG5cdFx0c2lkZWJhck1lbnVJdGVtcy5wdXNoKFxuXHRcdFx0dGhpcy52aWV3VGlja2V0c01lbnVJdGVtKCBkYXRlRW50aXR5LCB0aWNrZXRFbnRpdGllcyApXG5cdFx0KTtcblx0XHRyZXR1cm4gYXBwbHlGaWx0ZXJzKFxuXHRcdFx0J0ZIRUVfX0VkaXRvckRhdGVFbnRpdHlBY3Rpb25zTWVudV9fU2lkZWJhck1lbnVJdGVtcycsXG5cdFx0XHRzaWRlYmFyTWVudUl0ZW1zLFxuXHRcdFx0ZGF0ZUVudGl0eVxuXHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBcdEpTT04gb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG5cdCAqIEBwYXJhbSB7QXJyYXl9IHRpY2tldEVudGl0aWVzIFx0VGlja2V0cyBmb3IgRXZlbnQgRGF0ZVxuXHQgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgb2YgcmVuZGVyZWQgSWNvbk1lbnVJdGVtIGxpc3QgaXRlbXNcblx0ICovXG5cdHNpZGViYXJNZW51ID0gKCBkYXRlRW50aXR5LCB0aWNrZXRFbnRpdGllcyApID0+IHtcblx0XHRjb25zdCBzaWRlYmFyTWVudUl0ZW1zID0gdGhpcy5nZXRTaWRlYmFyTWVudUl0ZW1zKFxuXHRcdFx0ZGF0ZUVudGl0eSxcblx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHNpZGViYXJNZW51SXRlbXMubWFwKFxuXHRcdFx0ZnVuY3Rpb24oIHNpZGViYXJNZW51SXRlbSwgaW5kZXggKSB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0c2lkZWJhck1lbnVJdGVtICYmIHNpZGViYXJNZW51SXRlbS50eXBlICYmXG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0c2lkZWJhck1lbnVJdGVtLnR5cGUgPT09IERyb3BEb3duTWVudSB8fFxuXHRcdFx0XHRcdFx0c2lkZWJhck1lbnVJdGVtLnR5cGUgPT09IEVudGl0eUFjdGlvbk1lbnVJdGVtIHx8XG5cdFx0XHRcdFx0XHRzaWRlYmFyTWVudUl0ZW0udHlwZSA9PT0gSWNvbk1lbnVJdGVtXG5cdFx0XHRcdFx0KSA/XG5cdFx0XHRcdFx0XHQ8RnJhZ21lbnQga2V5PXsgaW5kZXggfT5cblx0XHRcdFx0XHRcdFx0eyBzaWRlYmFyTWVudUl0ZW0gfVxuXHRcdFx0XHRcdFx0PC9GcmFnbWVudD4gOlxuXHRcdFx0XHRcdFx0bnVsbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHQpO1xuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRldmVudEVudGl0eSxcblx0XHRcdGRhdGVFbnRpdHksXG5cdFx0XHRlZGl0b3JPcGVuLFxuXHRcdFx0dG9nZ2xlRWRpdG9yLFxuXHRcdFx0dGlja2V0RW50aXRpZXMgPSBERUZBVUxUX0VNUFRZX0FSUkFZLFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgREFURVRJTUUgKSApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF0ZUVudGl0eSAmJiBkYXRlRW50aXR5LmlkID8gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRpZD17IGBlZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnUtJHsgZGF0ZUVudGl0eS5pZCB9YCB9XG5cdFx0XHRcdGNsYXNzTmFtZT17ICdlZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnUnIH1cblx0XHRcdD5cblx0XHRcdFx0eyB0aGlzLnNpZGViYXJNZW51KCBkYXRlRW50aXR5LCB0aWNrZXRFbnRpdGllcyApIH1cblx0XHRcdFx0PERhdGVFbnRpdHlGb3JtTW9kYWxcblx0XHRcdFx0XHRldmVudEVudGl0eT17IGV2ZW50RW50aXR5IH1cblx0XHRcdFx0XHRkYXRlRW50aXR5PXsgZGF0ZUVudGl0eSB9XG5cdFx0XHRcdFx0dG9nZ2xlRWRpdG9yPXsgdG9nZ2xlRWRpdG9yIH1cblx0XHRcdFx0XHRlZGl0b3JPcGVuPXsgZWRpdG9yT3BlbiB9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpIDogbnVsbDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKCBbXG5cdHdpdGhFZGl0b3IsXG5cdHdpdGhFZGl0b3JEYXRlVGlja2V0RW50aXRpZXMsXG5cdHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbChcblx0XHQoIHsgZGF0ZUVudGl0eSB9ICkgPT4gKCB7XG5cdFx0XHR0aXRsZTogc3ByaW50Zihcblx0XHRcdFx0X3goXG5cdFx0XHRcdFx0J1RpY2tldCBBc3NpZ25tZW50cyBmb3I6ICUxJHMnLFxuXHRcdFx0XHRcdCdUaWNrZXQgQXNzaWdubWVudHMgZm9yOiBEYXRlICYgZGF0ZSBuYW1lJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdCksXG5cdFx0XHRcdGAkeyBkYXRlRW50aXR5Lm5hbWUgfSAoJHtcblx0XHRcdFx0XHRkYXRlRW50aXR5LnN0YXJ0LnRvRm9ybWF0KCAnZGRkIE1NTSBERCwgWVlZWScgKVxuXHRcdFx0XHR9KWBcblx0XHRcdCksXG5cdFx0XHRjbG9zZUJ1dHRvbkxhYmVsOiBudWxsLFxuXHRcdH0gKVxuXHQpLFxuXHR3aXRoQ29weURhdGVFbnRpdHksXG5cdHdpdGhUcmFzaERhdGVFbnRpdHksXG5dICkoIEVkaXRvckRhdGVFbnRpdHlBY3Rpb25zTWVudSApO1xuIiwiZXhwb3J0IHtcblx0ZGVmYXVsdCBhcyBFZGl0b3JEYXRlRW50aXR5QWN0aW9uc01lbnUsXG59IGZyb20gJy4vZWRpdG9yLWRhdGUtZW50aXR5LWFjdGlvbnMtbWVudSc7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZWRpdG9yLWRhdGUtYWN0aW9ucy1tZW51XCI6XCJlZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnVcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGluZGV4T2YgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IHZhbGlkYXRpb25zIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBkYXRlVGltZU1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVudGl0eUlkIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5cbmNvbnN0IHsgTU9ERUxfTkFNRTogREFURVRJTUUgfSA9IGRhdGVUaW1lTW9kZWw7XG5cbi8qKlxuICogZGF0ZUVudGl0eUZvcm1JbnB1dHNcbiAqIHJldHVybnMgYW4gYXJyYXkgb2YgaW5wdXRzIGNvcnJlc3BvbmRpbmcgdG9cbiAqIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBFdmVudCBEYXRlIEVudGl0eVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgIEVFIERhdGUgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5fSBleGNsdWRlICBBcnJheSBvZiBmaWVsZCBuYW1lcyB0byBub3QgZGlzcGxheSBpbnB1dHMgZm9yXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIGlucHV0IHZhbHVlc1xuICogQHBhcmFtIHtPYmplY3R9IEZvcm1JbnB1dCBJbnB1dCBvYmplY3QgdG8gdXNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGZvcm1cbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGVFbnRpdHlGb3JtSW5wdXRzID0gKFxuXHRkYXRlRW50aXR5LFxuXHRleGNsdWRlID0gW10sXG5cdHZhbHVlcyA9IHt9LFxuXHRGb3JtSW5wdXQsXG4pID0+IHtcblx0Y29uc3QgaW5wdXRzID0gW107XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgREFURVRJTUUgKSApIHtcblx0XHRyZXR1cm4gaW5wdXRzO1xuXHR9XG5cdGNvbnN0IHByZWZpeCA9IGBlZS1ldmVudC1kYXRlLSR7IGRhdGVFbnRpdHkuaWQgfWA7XG5cdGlmICggbm9ybWFsaXplRW50aXR5SWQoIGRhdGVFbnRpdHkuaWQgKSAmJiBpbmRleE9mKCBleGNsdWRlLCAnRFRUX0lEJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwiaWRcIlxuXHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdG5hbWU9eyBgJHsgcHJlZml4IH0taWRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0taWRgIF0gfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnRGF0ZSBJRCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1pZGAgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMyB9XG5cdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdGRpc2FibGVkXG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ0VWVF9JRCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImV2ZW50XCJcblx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LWV2ZW50LWlkYCB9XG5cdFx0XHRcdGluaXRpYWxWYWx1ZT17IHZhbHVlc1sgYCR7IHByZWZpeCB9LWV2ZW50LWlkYCBdIHx8IDAgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnRXZlbnQgSUQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tZXZlbnQtaWRgIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDMgfVxuXHRcdFx0XHRyZXF1aXJlZFxuXHRcdFx0XHRkaXNhYmxlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICduYW1lJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwibmFtZVwiXG5cdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1uYW1lYCB9XG5cdFx0XHRcdGluaXRpYWxWYWx1ZT17IHZhbHVlc1sgYCR7IHByZWZpeCB9LW5hbWVgIF0gfHwgJycgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnRGF0ZSBMYWJlbCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1uYW1lYCB9XG5cdFx0XHRcdG1pbkxlbmd0aD17IDMgfVxuXHRcdFx0XHRyZXF1aXJlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdkZXNjcmlwdGlvbicgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0dHlwZT1cInRleHRhcmVhXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgXSB8fCAnJyB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdEZXNjcmlwdGlvbicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdzdGFydCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cInN0YXJ0XCJcblx0XHRcdFx0dHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1zdGFydGAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1zdGFydGAgXSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdTdGFydCBUaW1lJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LXN0YXJ0YCB9XG5cdFx0XHRcdHZhbGlkYXRpb25zPXsgdmFsaWRhdGlvbnMucmVxdWlyZWQgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgNiB9XG5cdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ2VuZCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImVuZFwiXG5cdFx0XHRcdHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG5cdFx0XHRcdG5hbWU9eyBgJHsgcHJlZml4IH0tZW5kYCB9XG5cdFx0XHRcdGluaXRpYWxWYWx1ZT17IHZhbHVlc1sgYCR7IHByZWZpeCB9LWVuZGAgXSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdFbmQgVGltZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1lbmRgIH1cblx0XHRcdFx0dmFsaWRhdGlvbnM9eyB2YWxpZGF0aW9ucy5yZXF1aXJlZCB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyA2IH1cblx0XHRcdFx0cmVxdWlyZWRcblx0XHRcdC8+LFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpbmRleE9mKCBleGNsdWRlLCAncmVnTGltaXQnICkgPCAwICkge1xuXHRcdGlucHV0cy5wdXNoKFxuXHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRrZXk9XCJyZWdMaW1pdFwiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXJlZy1saW1pdGAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1yZWctbGltaXRgIF0gfHwgSW5maW5pdHkgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnQ2FwYWNpdHknLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tcmVnLWxpbWl0YCB9XG5cdFx0XHRcdGhlbHBUZXh0PXsgX18oXG5cdFx0XHRcdFx0J1RoZSBtYXhpbXVtIG51bWJlciBvZiByZWdpc3RyYW50cycgK1xuXHRcdFx0XHRcdCcgdGhhdCBjYW4gYXR0ZW5kIHRoZSBldmVudCBhdCB0aGlzJyArXG5cdFx0XHRcdFx0JyBwYXJ0aWN1bGFyIGRhdGUuIExlYXZlIGJsYW5rIGZvciBubyBsaW1pdC4nLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMyB9XG5cdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdzb2xkJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwic29sZFwiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXNvbGRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tc29sZGAgXSB8fCAwIH1cblx0XHRcdFx0bGFiZWw9eyBfXyggJ1NvbGQgQ291bnQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tc29sZGAgfVxuXHRcdFx0XHRoZWxwVGV4dD17IF9fKFxuXHRcdFx0XHRcdCdRdWFudGl0eSBvZiB0aWNrZXRzIHRoYXQgaGF2ZSBiZWVuJyArXG5cdFx0XHRcdFx0JyBzb2xkIGZvciB0aGlzIERhdGUnLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMyB9XG5cdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdyZXNlcnZlZCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cInJlc2VydmVkXCJcblx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdG5hbWU9eyBgJHsgcHJlZml4IH0tcmVzZXJ2ZWRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tcmVzZXJ2ZWRgIF0gfHwgMCB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdSZXNlcnZlZCBDb3VudCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1yZXNlcnZlZGAgfVxuXHRcdFx0XHRoZWxwVGV4dD17IF9fKFxuXHRcdFx0XHRcdCdRdWFudGl0eSBvZiB0aWNrZXRzIHJlc2VydmVkLCcgK1xuXHRcdFx0XHRcdCcgYnV0IG5vdCB5ZXQgZnVsbHkgcHVyY2hhc2VkJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDMgfVxuXHRcdFx0XHRtaW49eyAwIH1cblx0XHRcdC8+LFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpbmRleE9mKCBleGNsdWRlLCAnb3JkZXInICkgPCAwICkge1xuXHRcdGlucHV0cy5wdXNoKFxuXHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRrZXk9XCJvcmRlclwiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LW9yZGVyYCB9XG5cdFx0XHRcdGluaXRpYWxWYWx1ZT17IHZhbHVlc1sgYCR7IHByZWZpeCB9LW9yZGVyYCBdIHx8IDAgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnRGlzcGxheSBPcmRlcicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1vcmRlcmAgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMiB9XG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ3BhcmVudCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cInBhcmVudFwiXG5cdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1wYXJlbnRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tcGFyZW50YCBdIHx8IDAgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnUGFyZW50IERhdGUnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tcGFyZW50YCB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAyIH1cblx0XHRcdC8+LFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpbmRleE9mKCBleGNsdWRlLCAnZGVsZXRlZCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImRlbGV0ZWRcIlxuXHRcdFx0XHR0eXBlPVwidG9nZ2xlXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1kZWxldGVkYCB9XG5cdFx0XHRcdGluaXRpYWxWYWx1ZT17IHZhbHVlc1sgYCR7IHByZWZpeCB9LWRlbGV0ZWRgIF0gfHwgZmFsc2UgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnQXJjaGl2ZWQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tZGVsZXRlZGAgfVxuXHRcdFx0XHRoZWxwVGV4dElmQ2hlY2tlZD17IF9fKFxuXHRcdFx0XHRcdCd0aGlzIGV2ZW50IGRhdGUgaXMgYXJjaGl2ZWQnLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRoZWxwVGV4dElmTm90Q2hlY2tlZD17IF9fKFxuXHRcdFx0XHRcdCd0aGlzIGV2ZW50IGRhdGUgaXMgTk9UIGFyY2hpdmVkJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDIgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gaW5wdXRzO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyB3aXRoRWRpdG9yTW9kYWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZGl0b3ItaG9jcyc7XG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhEaXNwYXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgRGF0ZUVudGl0eUZvcm0gZnJvbSAnLi9kYXRlLWVudGl0eS1mb3JtJztcbmltcG9ydCB7IGRhdGVFbnRpdHlGb3JtU2NoZW1hIH0gZnJvbSAnLi9kYXRlLWVudGl0eS1mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBkYXRlRW50aXR5Rm9ybVN1Ym1pdEhhbmRsZXIgfSBmcm9tICcuL2RhdGUtZW50aXR5LWZvcm0tc3VibWl0LWhhbmRsZXInO1xuaW1wb3J0IHdpdGhVcGRhdGVFdmVudERhdGVSZWxhdGlvbiBmcm9tICcuLi9hY3Rpb24taGFuZGxlcnMvd2l0aC11cGRhdGUtZXZlbnQtZGF0ZS1yZWxhdGlvbic7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSBtb2RlbCBvYmplY3QgZGVmaW5pbmcgdGhlIEV2ZW50IERhdGVcbiAqL1xuY2xhc3MgRGF0ZUVudGl0eUZvcm1Nb2RhbCBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0ZGF0ZUVudGl0eTogUHJvcFR5cGVzLm9iamVjdCxcblx0XHR0b2dnbGVFZGl0b3I6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0bG9hZEhhbmRsZXI6IFByb3BUeXBlcy5mdW5jLFxuXHRcdHN1Ym1pdEhhbmRsZXI6IFByb3BUeXBlcy5mdW5jLFxuXHRcdHJlc2V0SGFuZGxlcjogUHJvcFR5cGVzLmZ1bmMsXG5cdH07XG5cblx0Y29uc3RydWN0b3IoIHByb3BzICkge1xuXHRcdHN1cGVyKCBwcm9wcyApO1xuXHRcdHRoaXMuc3RhdGUgPSB7XG5cdFx0XHRkYXRlRW50aXR5OiBpc01vZGVsRW50aXR5T2ZNb2RlbCggcHJvcHMuZGF0ZUVudGl0eSwgJ2RhdGV0aW1lJyApID9cblx0XHRcdFx0cHJvcHMuZGF0ZUVudGl0eS5jbG9uZSggdHJ1ZSApIDpcblx0XHRcdFx0e30sXG5cdFx0XHRvcmlnaW5hbERhdGVFbnRpdHk6IHByb3BzLmRhdGVFbnRpdHkgPyBwcm9wcy5kYXRlRW50aXR5IDoge30sXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHJldHVybiB7T2JqZWN0fSBkYXRhXG5cdCAqL1xuXHRsb2FkSGFuZGxlciA9ICgpID0+IHtcblx0XHRyZXR1cm4gZGF0ZUVudGl0eUZvcm1TY2hlbWEoIHRoaXMuc3RhdGUuZGF0ZUVudGl0eSApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGFcblx0ICovXG5cdHN1Ym1pdEhhbmRsZXIgPSAoIGRhdGEgKSA9PiB7XG5cdFx0ZGF0ZUVudGl0eUZvcm1TdWJtaXRIYW5kbGVyKFxuXHRcdFx0dGhpcy5zdGF0ZS5kYXRlRW50aXR5LFxuXHRcdFx0ZGF0YVxuXHRcdCk7XG5cdFx0dGhpcy5wcm9wcy5yZXBsYWNlRGF0ZUluU3RvcmUoIHRoaXMuc3RhdGUuZGF0ZUVudGl0eSApO1xuXHRcdHRoaXMucHJvcHMudG9nZ2xlRWRpdG9yKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKi9cblx0cmVzZXRIYW5kbGVyID0gKCkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoIHsgZGF0ZUVudGl0eTogdGhpcy5zdGF0ZS5vcmlnaW5hbERhdGVFbnRpdHkuY2xvbmUoIHRydWUgKSB9ICk7XG5cdFx0dGhpcy5wcm9wcy50b2dnbGVFZGl0b3IoKTtcblx0fTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxEYXRlRW50aXR5Rm9ybVxuXHRcdFx0XHR7IC4uLnRoaXMucHJvcHMgfVxuXHRcdFx0XHRsb2FkSGFuZGxlcj17IHRoaXMubG9hZEhhbmRsZXIgfVxuXHRcdFx0XHRzdWJtaXRIYW5kbGVyPXsgdGhpcy5zdWJtaXRIYW5kbGVyIH1cblx0XHRcdFx0cmVzZXRIYW5kbGVyPXsgdGhpcy5yZXNldEhhbmRsZXIgfVxuXHRcdFx0XHRkYXRlRW50aXR5PXsgdGhpcy5zdGF0ZS5kYXRlRW50aXR5IH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKCBbXG5cdHdpdGhFZGl0b3JNb2RhbCgge1xuXHRcdHRpdGxlOiBfXyggJ0V2ZW50IERhdGUgRWRpdG9yJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdGN1c3RvbUNsYXNzOiAnZWUtZXZlbnQtZGF0ZS1lZGl0b3ItbW9kYWwnLFxuXHRcdGNsb3NlQnV0dG9uTGFiZWw6IF9fKCAnY2xvc2UgZXZlbnQgZGF0ZSBlZGl0b3InLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdH0gKSxcblx0d2l0aFVwZGF0ZUV2ZW50RGF0ZVJlbGF0aW9uLFxuXHR3aXRoRGlzcGF0Y2goICggZGlzcGF0Y2gsIHsgdXBkYXRlRXZlbnREYXRlUmVsYXRpb24gfSApID0+IHtcblx0XHRjb25zdCB7IHJlY2VpdmVBbmRSZXBsYWNlRW50aXR5UmVjb3JkcyB9ID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0Y29uc3QgcmVwbGFjZURhdGVJblN0b3JlID0gKCByZXBsYWNlRGF0ZSApID0+IHtcblx0XHRcdHJlY2VpdmVBbmRSZXBsYWNlRW50aXR5UmVjb3JkcyggJ2RhdGV0aW1lJywgWyByZXBsYWNlRGF0ZSBdICk7XG5cdFx0XHR1cGRhdGVFdmVudERhdGVSZWxhdGlvbiggcmVwbGFjZURhdGUgKTtcblx0XHR9O1xuXHRcdHJldHVybiB7IHJlcGxhY2VEYXRlSW5TdG9yZSB9O1xuXHR9ICksXG5dICkoIERhdGVFbnRpdHlGb3JtTW9kYWwgKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIHJldHVybnMgYW4gb2JqZWN0IG1hcHBpbmdcbiAqIEV2ZW50IERhdGUgRW50aXR5IHByb3BlcnRpZXNcbiAqIHRvIGZvcm0gcHJlZml4ZXNcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICBFRSBEYXRlIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBmb3JtXG4gKi9cbmV4cG9ydCBjb25zdCBkYXRlRW50aXR5Rm9ybVNjaGVtYSA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBkYXRlRW50aXR5LCAnZGF0ZXRpbWUnICkgKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGNvbnN0IHByZWZpeCA9IGBlZS1ldmVudC1kYXRlLSR7IGRhdGVFbnRpdHkuaWQgfWA7XG5cdHJldHVybiB7XG5cdFx0WyBgJHsgcHJlZml4IH0taWRgIF06IGRhdGVFbnRpdHkuaWQsXG5cdFx0WyBgJHsgcHJlZml4IH0tZXZlbnQtaWRgIF06IGRhdGVFbnRpdHkuRVZUX0lELFxuXHRcdFsgYCR7IHByZWZpeCB9LW5hbWVgIF06IGRhdGVFbnRpdHkubmFtZSB8fCAnJyxcblx0XHRbIGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgXTogZGF0ZUVudGl0eS5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRbIGAkeyBwcmVmaXggfS1zdGFydGAgXTogZGF0ZUVudGl0eS5zdGFydC50b0lTTygpLFxuXHRcdFsgYCR7IHByZWZpeCB9LWVuZGAgXTogZGF0ZUVudGl0eS5lbmQudG9JU08oKSxcblx0XHRbIGAkeyBwcmVmaXggfS1zdGFydC10aW1lYCBdOiBkYXRlRW50aXR5LnN0YXJ0LnRvRm9ybWF0KCAnSEg6bW0nICksXG5cdFx0WyBgJHsgcHJlZml4IH0tZW5kLXRpbWVgIF06IGRhdGVFbnRpdHkuZW5kLnRvRm9ybWF0KCAnSEg6bW0nICksXG5cdFx0WyBgJHsgcHJlZml4IH0tcmVnLWxpbWl0YCBdOiBzdHJpcEluZmluaXR5KCBkYXRlRW50aXR5LnJlZ0xpbWl0ICksXG5cdFx0WyBgJHsgcHJlZml4IH0tc29sZGAgXTogZGF0ZUVudGl0eS5zb2xkIHx8IDAsXG5cdFx0WyBgJHsgcHJlZml4IH0tcmVzZXJ2ZWRgIF06IGRhdGVFbnRpdHkucmVzZXJ2ZWQgfHwgMCxcblx0XHRbIGAkeyBwcmVmaXggfS1vcmRlcmAgXTogZGF0ZUVudGl0eS5vcmRlciB8fCAwLFxuXHRcdFsgYCR7IHByZWZpeCB9LXBhcmVudGAgXTogZGF0ZUVudGl0eS5wYXJlbnQgfHwgMCxcblx0XHRbIGAkeyBwcmVmaXggfS1kZWxldGVkYCBdOiBkYXRlRW50aXR5LmRlbGV0ZWQgfHwgZmFsc2UsXG5cdH07XG59O1xuXG5jb25zdCBzdHJpcEluZmluaXR5ID0gKCBudW1iZXIgKSA9PiB7XG5cdHJldHVybiBudW1iZXIgIT09ICdJTkYnICYmIG51bWJlciAhPT0gSW5maW5pdHkgJiYgbnVtYmVyID4gMCA/XG5cdFx0bnVtYmVyIDpcblx0XHRudWxsO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgZGF0ZVRpbWVNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IFNlcnZlckRhdGVUaW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgbm9ybWFsaXplRW50aXR5SWQgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcblxuY29uc3QgeyBNT0RFTF9OQU1FOiBEQVRFVElNRSB9ID0gZGF0ZVRpbWVNb2RlbDtcblxuLyoqXG4gKiB1cGRhdGVzIEV2ZW50IERhdGUgRW50aXR5IHByb3BlcnRpZXNcbiAqIGdpdmVuIHRoZSBzdXBwbGllZCBmb3JtIGRhdGFcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICBFRSBEYXRlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhXG4gKi9cbmV4cG9ydCBjb25zdCBkYXRlRW50aXR5Rm9ybVN1Ym1pdEhhbmRsZXIgPSAoXG5cdGRhdGVFbnRpdHksXG5cdGZvcm1EYXRhLFxuKSA9PiB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgREFURVRJTUUgKSApIHtcblx0XHR0aHJvdyBFcnJvcihcblx0XHRcdF9fKCAnVW5hYmxlIHRvIHByb2Nlc3MgdGhlIEV2ZW50IERhdGUgRW50aXR5IGZvcm0gYmVjYXVzZSBhbicgK1xuXHRcdFx0XHQnIGludmFsaWQgRGF0ZSBFbnRpdHkgd2FzIHN1cHBsaWVkLiAnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0XHQpO1xuXHR9XG5cdGNvbnN0IHByZWZpeCA9IGBlZS1ldmVudC1kYXRlLSR7IGRhdGVFbnRpdHkuaWQgfWA7XG5cdGNvbnN0IGdldFZhbHVlID0gKCBmaWVsZCwgZGVmYXVsdFZhbHVlID0gJycgKSA9PiB7XG5cdFx0cmV0dXJuIGZvcm1EYXRhWyBgJHsgcHJlZml4IH0tJHsgZmllbGQgfWAgXSB8fCBkZWZhdWx0VmFsdWU7XG5cdH07XG5cdGRhdGVFbnRpdHkubmFtZSA9IGdldFZhbHVlKCAnbmFtZScgKTtcblx0ZGF0ZUVudGl0eS5kZXNjcmlwdGlvbiA9IGdldFZhbHVlKCAnZGVzY3JpcHRpb24nICk7XG5cdGRhdGVFbnRpdHkuc3RhcnQgPSBuZXcgU2VydmVyRGF0ZVRpbWUoIGdldFZhbHVlKCAnc3RhcnQnICkgKTtcblx0ZGF0ZUVudGl0eS5lbmQgPSBuZXcgU2VydmVyRGF0ZVRpbWUoIGdldFZhbHVlKCAnZW5kJyApICk7XG5cdGRhdGVFbnRpdHkucmVnTGltaXQgPSBwYXJzZUludCggZ2V0VmFsdWUoICdyZWctbGltaXQnLCAtMSApLCAxMCApO1xuXHRkYXRlRW50aXR5LmlzUHJpbWFyeSA9ICEhIGdldFZhbHVlKCAnaXMtcHJpbWFyeScsIGZhbHNlICk7XG5cdGRhdGVFbnRpdHkub3JkZXIgPSBwYXJzZUludCggZ2V0VmFsdWUoICdvcmRlcicsIDAgKSwgMTAgKTtcblx0ZGF0ZUVudGl0eS5wYXJlbnQgPSBub3JtYWxpemVFbnRpdHlJZCggZ2V0VmFsdWUoICdwYXJlbnQnLCAwICkgKTtcblx0ZGF0ZUVudGl0eS5kZWxldGVkID0gISEgZ2V0VmFsdWUoICdkZWxldGVkJywgZmFsc2UgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHtcblx0d2l0aEZvcm1IYW5kbGVyLFxuXHR0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGRhdGVUaW1lTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBkYXRlRW50aXR5Rm9ybUlucHV0cyB9IGZyb20gJy4vZGF0ZS1lbnRpdHktZm9ybS1pbnB1dHMnO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgbW9kZWwgb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG4gKi9cbmNsYXNzIERhdGVFbnRpdHlGb3JtIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdGRhdGVFbnRpdHksXG5cdFx0XHRzdWJtaXRCdXR0b24sXG5cdFx0XHRjYW5jZWxCdXR0b24sXG5cdFx0XHRjdXJyZW50VmFsdWVzID0ge30sXG5cdFx0XHRpbml0aWFsVmFsdWVzID0ge30sXG5cdFx0XHRuZXdPYmplY3QgPSBmYWxzZSxcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHQvLyBlZGl0IGZvcm1zIGZvciBleGlzdGluZyBvYmplY3RzIG11c3QgaGF2ZSBpbml0aWFsIHZhbHVlc1xuXHRcdGlmIChcblx0XHRcdCggISBuZXdPYmplY3QgJiYgaXNFbXB0eSggaW5pdGlhbFZhbHVlcyApICkgfHxcblx0XHRcdGlzRW1wdHkoIGN1cnJlbnRWYWx1ZXMgKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNvbnN0IHtcblx0XHRcdEZvcm1JbnB1dCxcblx0XHRcdEZvcm1TZWN0aW9uLFxuXHRcdFx0Rm9ybVdyYXBwZXIsXG5cdFx0XHRGb3JtU2F2ZUNhbmNlbEJ1dHRvbnMsXG5cdFx0XHRGb3JtSW5mbyxcblx0XHR9ID0gdHdvQ29sdW1uQWRtaW5Gb3JtTGF5b3V0O1xuXG5cdFx0Ly8gZW50aXR5IHByb3BlcnRpZXMgd2UgZG9uJ3Qgd2FudCB0byBiZSBlZGl0YWJsZVxuXHRcdGNvbnN0IGV4Y2x1ZGUgPSBbXG5cdFx0XHQnRVZUX0lEJyxcblx0XHRcdCdzb2xkJyxcblx0XHRcdCdyZXNlcnZlZCcsXG5cdFx0XHQnb3JkZXInLFxuXHRcdFx0J3BhcmVudCcsXG5cdFx0XHQnZGVsZXRlZCcsXG5cdFx0XTtcblx0XHRjb25zdCBmb3JtUm93cyA9IGRhdGVFbnRpdHlGb3JtSW5wdXRzKFxuXHRcdFx0ZGF0ZUVudGl0eSxcblx0XHRcdGV4Y2x1ZGUsXG5cdFx0XHRjdXJyZW50VmFsdWVzLFxuXHRcdFx0Rm9ybUlucHV0XG5cdFx0KTtcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGZvcm1Sb3dzICkgKSB7XG5cdFx0XHRmb3JtUm93cy51bnNoaWZ0KFxuXHRcdFx0XHQ8Rm9ybUluZm9cblx0XHRcdFx0XHRrZXk9XCJmb3JtSW5mb1wiXG5cdFx0XHRcdFx0Zm9ybUluZm89e1xuXHRcdFx0XHRcdFx0X18oXG5cdFx0XHRcdFx0XHRcdCdhbGwgZmllbGRzIG1hcmtlZCB3aXRoIGFuIGFzdGVyaXNrIGFyZSByZXF1aXJlZCcsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGlzbWlzc2FibGU9eyBmYWxzZSB9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRjb25zdCB7IE1PREVMX05BTUU6IERBVEVUSU1FIH0gPSBkYXRlVGltZU1vZGVsO1xuXHRcdHJldHVybiBpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgREFURVRJTUUgKSA/IChcblx0XHRcdDxGb3JtV3JhcHBlcj5cblx0XHRcdFx0PEZvcm1TZWN0aW9uXG5cdFx0XHRcdFx0aHRtbElkPXtcblx0XHRcdFx0XHRcdGBlZS1ldmVudC1kYXRlLWVkaXRvci0keyBkYXRlRW50aXR5LmlkIH0tZm9ybS1zZWN0aW9uYFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjaGlsZHJlbj17IGZvcm1Sb3dzIH1cblx0XHRcdFx0Lz5cblx0XHRcdFx0PEZvcm1TYXZlQ2FuY2VsQnV0dG9uc1xuXHRcdFx0XHRcdGh0bWxDbGFzcz17IGBlZS1ldmVudC1kYXRlLWVkaXRvci0keyBkYXRlRW50aXR5LmlkIH1gIH1cblx0XHRcdFx0XHRzdWJtaXRCdXR0b249eyBzdWJtaXRCdXR0b24gfVxuXHRcdFx0XHRcdGNhbmNlbEJ1dHRvbj17IGNhbmNlbEJ1dHRvbiB9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0Zvcm1XcmFwcGVyPlxuXHRcdCkgOiBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogRW5oYW5jZWQgRGF0ZUVudGl0eUZvcm0gd2l0aCBGb3JtSGFuZGxlclxuICovXG5leHBvcnQgZGVmYXVsdCB3aXRoRm9ybUhhbmRsZXIoIERhdGVFbnRpdHlGb3JtICk7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIERhdGVFbnRpdHlGb3JtIH0gZnJvbSAnLi9kYXRlLWVudGl0eS1mb3JtJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGF0ZUVudGl0eUZvcm1Nb2RhbCB9IGZyb20gJy4vZGF0ZS1lbnRpdHktZm9ybS1tb2RhbCc7XG5leHBvcnQgeyBkYXRlRW50aXR5Rm9ybUlucHV0cyB9IGZyb20gJy4vZGF0ZS1lbnRpdHktZm9ybS1pbnB1dHMnO1xuZXhwb3J0IHsgZGF0ZUVudGl0eUZvcm1TY2hlbWEgfSBmcm9tICcuL2RhdGUtZW50aXR5LWZvcm0tc2NoZW1hJztcbmV4cG9ydCB7IGRhdGVFbnRpdHlGb3JtU3VibWl0SGFuZGxlciB9IGZyb20gJy4vZGF0ZS1lbnRpdHktZm9ybS1zdWJtaXQtaGFuZGxlcic7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgY29tcG9zZSB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyB3aXRoRGlzcGF0Y2ggfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7XG5cdEVudGl0eUxpc3QsXG5cdEVzcHJlc3NvQnV0dG9uLFxuXHR0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgd2l0aEVkaXRvciB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VkaXRvci1ob2NzJztcbmltcG9ydCB7IF9fLCBfeCwgc3ByaW50ZiB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBFZGl0b3JEYXRlRW50aXRpZXNHcmlkVmlldyB9IGZyb20gJy4vZ3JpZC12aWV3JztcbmltcG9ydCB7IEVkaXRvckRhdGVFbnRpdGllc0xpc3RWaWV3IH0gZnJvbSAnLi9saXN0LXZpZXcnO1xuaW1wb3J0IHsgd2l0aFBhZ2luYXRlZERhdGVFbnRpdGllc0xpc3RBbmRGaWx0ZXJCYXIgfSBmcm9tICcuL2ZpbHRlci1iYXInO1xuaW1wb3J0IHsgRGF0ZUVudGl0eUZvcm1Nb2RhbCB9IGZyb20gJy4vZWRpdC1mb3JtJztcbmltcG9ydCB7IHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCB9IGZyb20gJy4uLy4uL3RpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyJztcbmltcG9ydCB3aXRoVXBkYXRlRXZlbnREYXRlUmVsYXRpb24gZnJvbSAnLi9hY3Rpb24taGFuZGxlcnMvd2l0aC11cGRhdGUtZXZlbnQtZGF0ZS1yZWxhdGlvbic7XG5pbXBvcnQgeyB3aXRoRWRpdG9yRGF0ZUVudGl0aWVzLCB3aXRoRWRpdG9yRXZlbnRFbnRpdHkgfSBmcm9tICcuLi8uLi9ob2NzJztcblxuY29uc3Qge1xuXHRGb3JtV3JhcHBlcixcblx0Rm9ybVNhdmVDYW5jZWxCdXR0b25zLFxufSA9IHR3b0NvbHVtbkFkbWluRm9ybUxheW91dDtcblxuLyoqXG4gKiBFZGl0b3JEYXRlRW50aXRpZXNMaXN0XG4gKiBFbnRpdHlMaXN0IGNvbXBvbmVudCBmb3IgZGlzcGxheWluZyBldmVudCBkYXRlcyBpbiB0aGUgZWRpdG9yXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0FycmF5fSBlbnRpdGllcyBcdGFycmF5IG9mIEpTT04gb2JqZWN0cyBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB2aWV3XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXRyaWV2ZURhdGVzXG4gKiBAcGFyYW0ge21peGVkfSBvdGhlclByb3BzXG4gKi9cbmNsYXNzIEVkaXRvckRhdGVFbnRpdGllc0xpc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0c3VwZXIoIHByb3BzICk7XG5cdFx0dGhpcy5zdGF0ZSA9IHsgbmV3RGF0ZUVudGl0eTogbnVsbCB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGJ1dHRvblxuXHQgKi9cblx0YWRkTmV3RGF0ZUJ1dHRvbiA9ICgpID0+IHtcblx0XHRjb25zdCBhZGREYXRlRW50aXR5ID0gKCBldmVudCApID0+IHtcblx0XHRcdGlmICggZXZlbnQgJiYgZXZlbnQucHJldmVudERlZmF1bHQgKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5wcm9wcy5hZGROZXdEYXRlRW50aXR5KFxuXHRcdFx0XHQoIHN0YXRlICkgPT4gdGhpcy5zZXRTdGF0ZSggc3RhdGUgKSxcblx0XHRcdFx0dGhpcy5wcm9wcy50b2dnbGVFZGl0b3Jcblx0XHRcdCk7XG5cdFx0fTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEVzcHJlc3NvQnV0dG9uXG5cdFx0XHRcdGljb249XCJjYWxlbmRhclwiXG5cdFx0XHRcdGJ1dHRvblRleHQ9eyBfXyggJ0FkZCBOZXcgRGF0ZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdG9uQ2xpY2s9eyBhZGREYXRlRW50aXR5IH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgYnV0dG9uXG5cdCAqL1xuXHR0aWNrZXRBc3NpZ25tZW50c0J1dHRvbiA9ICgpID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEVzcHJlc3NvQnV0dG9uXG5cdFx0XHRcdGljb249XCJ0aWNrZXRzLWFsdFwiXG5cdFx0XHRcdGJ1dHRvblRleHQ9eyBfXyhcblx0XHRcdFx0XHQnVGlja2V0IEFzc2lnbm1lbnRzJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRvbkNsaWNrPXsgdGhpcy5wcm9wcy50b2dnbGVUaWNrZXRBc3NpZ25tZW50cyB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdHZpZXcsXG5cdFx0XHRlbnRpdGllcyxcblx0XHRcdGVkaXRvck9wZW4sXG5cdFx0XHR0b2dnbGVFZGl0b3IsXG5cdFx0XHQuLi5vdGhlclByb3BzXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtV3JhcHBlcj5cblx0XHRcdFx0PEVudGl0eUxpc3Rcblx0XHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHRcdGVudGl0aWVzPXsgZW50aXRpZXMgfVxuXHRcdFx0XHRcdEVudGl0eUdyaWRWaWV3PXsgRWRpdG9yRGF0ZUVudGl0aWVzR3JpZFZpZXcgfVxuXHRcdFx0XHRcdEVudGl0eUxpc3RWaWV3PXsgRWRpdG9yRGF0ZUVudGl0aWVzTGlzdFZpZXcgfVxuXHRcdFx0XHRcdHZpZXc9eyB2aWV3IH1cblx0XHRcdFx0XHRsb2FkaW5nTm90aWNlPXsgc3ByaW50Zihcblx0XHRcdFx0XHRcdF94KFxuXHRcdFx0XHRcdFx0XHQnbG9hZGluZyBldmVudCBkYXRlcyVzJyxcblx0XHRcdFx0XHRcdFx0J2xvYWRpbmcgZXZlbnQgZGF0ZXMuLi4nLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggODIzMCApXG5cdFx0XHRcdFx0KSB9XG5cdFx0XHRcdC8+XG5cdFx0XHRcdDxGb3JtU2F2ZUNhbmNlbEJ1dHRvbnNcblx0XHRcdFx0XHRzdWJtaXRCdXR0b249eyB0aGlzLmFkZE5ld0RhdGVCdXR0b24oKSB9XG5cdFx0XHRcdFx0Y2FuY2VsQnV0dG9uPXsgdGhpcy50aWNrZXRBc3NpZ25tZW50c0J1dHRvbigpIH1cblx0XHRcdFx0Lz5cblx0XHRcdFx0PERhdGVFbnRpdHlGb3JtTW9kYWxcblx0XHRcdFx0XHRkYXRlRW50aXR5PXsgdGhpcy5zdGF0ZS5uZXdEYXRlRW50aXR5IH1cblx0XHRcdFx0XHR0b2dnbGVFZGl0b3I9eyB0b2dnbGVFZGl0b3IgfVxuXHRcdFx0XHRcdGVkaXRvck9wZW49eyBlZGl0b3JPcGVuIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvRm9ybVdyYXBwZXI+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKCBbXG5cdHdpdGhFZGl0b3IsXG5cdHdpdGhFZGl0b3JEYXRlRW50aXRpZXMsXG5cdHdpdGhQYWdpbmF0ZWREYXRlRW50aXRpZXNMaXN0QW5kRmlsdGVyQmFyKCksXG5cdHdpdGhFZGl0b3JFdmVudEVudGl0eSxcblx0d2l0aFVwZGF0ZUV2ZW50RGF0ZVJlbGF0aW9uLFxuXHR3aXRoRGlzcGF0Y2goIChcblx0XHRkaXNwYXRjaCxcblx0XHR7IHVwZGF0ZUV2ZW50RGF0ZVJlbGF0aW9uIH1cblx0KSA9PiB7XG5cdFx0Y29uc3QgeyBjcmVhdGVFbnRpdHkgfSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdGNvbnN0IGFkZE5ld0RhdGVFbnRpdHkgPSAoIHNldFN0YXRlLCB0b2dnbGVFZGl0b3IgKSA9PiB7XG5cdFx0XHRjcmVhdGVFbnRpdHkoICdkYXRldGltZScsIHt9ICkudGhlbihcblx0XHRcdFx0KCBuZXdEYXRlRW50aXR5ICkgPT4ge1xuXHRcdFx0XHRcdHNldFN0YXRlKCB7IG5ld0RhdGVFbnRpdHkgfSApO1xuXHRcdFx0XHRcdHVwZGF0ZUV2ZW50RGF0ZVJlbGF0aW9uKCBuZXdEYXRlRW50aXR5ICk7XG5cdFx0XHRcdFx0dG9nZ2xlRWRpdG9yKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHRcdH07XG5cdFx0cmV0dXJuIHsgYWRkTmV3RGF0ZUVudGl0eSB9O1xuXHR9ICksXG5cdHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCggKCkgPT4gKFxuXHRcdHtcblx0XHRcdHRpdGxlOiBfXyhcblx0XHRcdFx0J1RpY2tldCBBc3NpZ25tZW50cyBmb3IgQWxsIEV2ZW50IERhdGVzJyxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0KSxcblx0XHRcdGNsb3NlQnV0dG9uTGFiZWw6IG51bGwsXG5cdFx0fVxuXHQpICksXG5dICkoIEVkaXRvckRhdGVFbnRpdGllc0xpc3QgKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBzb3J0QnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZGF0ZVRpbWVNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5cbi8qKlxuICogZmlsdGVyRGF0ZUVudGl0aWVzXG4gKiByZWR1Y2VzIGRhdGVFbnRpdGllcyBhcnJheSBiYXNlZCBvbiB2YWx1ZSBvZiB0aGUgXCJzaG93RGF0ZXNcIiBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRlRW50aXRpZXMgICAgb3JpZ2luYWwgZGF0ZUVudGl0aWVzIGFycmF5XG4gKiBAcGFyYW0ge3N0cmluZ30gc2hvd0RhdGVzICAgIHZhbHVlIGZvciB0aGUgXCJzaG93RGF0ZXNcIiBmaWx0ZXJcbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgIGZpbHRlcmVkIGRhdGVFbnRpdGllcyBhcnJheVxuICovXG5leHBvcnQgY29uc3QgZmlsdGVyRGF0ZUVudGl0aWVzID0gKCBkYXRlRW50aXRpZXMsIHNob3dEYXRlcyA9ICdhY3RpdmUtdXBjb21pbmcnICkgPT4ge1xuXHRkYXRlRW50aXRpZXMgPSBzb3J0RGF0ZUVudGl0aWVzTGlzdCggZGF0ZUVudGl0aWVzICk7XG5cdHN3aXRjaCAoIHNob3dEYXRlcyApIHtcblx0XHRjYXNlICdhbGwnIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgZGF0ZVRpbWVNb2RlbC5pc1RyYXNoZWQoIGRhdGVFbnRpdHkgKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRjYXNlICdhY3RpdmUtdXBjb21pbmcnIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGVUaW1lTW9kZWwuaXNBY3RpdmUoIGRhdGVFbnRpdHkgKSB8fFxuXHRcdFx0XHRcdFx0ZGF0ZVRpbWVNb2RlbC5pc1VwY29taW5nKCBkYXRlRW50aXR5ICk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0Y2FzZSAnYWN0aXZlLW9ubHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGVUaW1lTW9kZWwuaXNBY3RpdmUoIGRhdGVFbnRpdHkgKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRjYXNlICd1cGNvbWluZy1vbmx5JyA6XG5cdFx0XHRyZXR1cm4gZmlsdGVyKFxuXHRcdFx0XHRkYXRlRW50aXRpZXMsXG5cdFx0XHRcdGZ1bmN0aW9uKCBkYXRlRW50aXR5ICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRlVGltZU1vZGVsLmlzVXBjb21pbmcoIGRhdGVFbnRpdHkgKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRjYXNlICduZXh0LWFjdGl2ZS11cGNvbWluZy1vbmx5JyA6XG5cdFx0XHRkYXRlRW50aXRpZXMgPSBmaWx0ZXJEYXRlRW50aXRpZXMoIGRhdGVFbnRpdGllcyApO1xuXHRcdFx0cmV0dXJuIFsgZmlyc3QoIGRhdGVFbnRpdGllcyApIF07XG5cdFx0Y2FzZSAnc29sZC1vdXQtb25seScgOlxuXHRcdFx0cmV0dXJuIGZpbHRlcihcblx0XHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdFx0XHRmdW5jdGlvbiggZGF0ZUVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISBkYXRlVGltZU1vZGVsLmlzVHJhc2hlZCggZGF0ZUVudGl0eSApICYmICggKFxuXHRcdFx0XHRcdFx0dmFsaWRTdGF0dXMoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0ZGF0ZVRpbWVNb2RlbC5pc1NvbGRPdXQoIGRhdGVFbnRpdHkgKVxuXHRcdFx0XHRcdCkgfHwgY2FwYWNpdHlBdE9yQWJvdmUoIGRhdGVFbnRpdHksIDEwMCApICk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0Y2FzZSAnYWJvdmUtOTAtY2FwYWNpdHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgZGF0ZVRpbWVNb2RlbC5pc1RyYXNoZWQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0Y2FwYWNpdHlBdE9yQWJvdmUoIGRhdGVFbnRpdHksIDkwICk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0Y2FzZSAnYWJvdmUtNzUtY2FwYWNpdHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgZGF0ZVRpbWVNb2RlbC5pc1RyYXNoZWQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0Y2FwYWNpdHlBdE9yQWJvdmUoIGRhdGVFbnRpdHksIDc1ICk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0Y2FzZSAnYWJvdmUtNTAtY2FwYWNpdHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgZGF0ZVRpbWVNb2RlbC5pc1RyYXNoZWQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0Y2FwYWNpdHlBdE9yQWJvdmUoIGRhdGVFbnRpdHksIDUwICk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0Y2FzZSAnYmVsb3ctNTAtY2FwYWNpdHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgZGF0ZVRpbWVNb2RlbC5pc1RyYXNoZWQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0Y2FwYWNpdHlCZWxvdyggZGF0ZUVudGl0eSwgNTAgKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRjYXNlICdyZWNlbnRseS1leHBpcmVkLW9ubHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGVUaW1lTW9kZWwuaXNSZWNlbnRseUV4cGlyZWQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0ISBkYXRlVGltZU1vZGVsLmlzVHJhc2hlZCggZGF0ZUVudGl0eSApO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdGNhc2UgJ2V4cGlyZWQtb25seScgOlxuXHRcdFx0cmV0dXJuIGZpbHRlcihcblx0XHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdFx0XHRmdW5jdGlvbiggZGF0ZUVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0ZVRpbWVNb2RlbC5pc0V4cGlyZWQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdFx0XHRcdFx0ISBkYXRlVGltZU1vZGVsLmlzVHJhc2hlZCggZGF0ZUVudGl0eSApO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdGNhc2UgJ3RyYXNoZWQtb25seScgOlxuXHRcdFx0cmV0dXJuIGZpbHRlcihcblx0XHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdFx0XHRmdW5jdGlvbiggZGF0ZUVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0ZVRpbWVNb2RlbC5pc1RyYXNoZWQoIGRhdGVFbnRpdHkgKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0fVxuXHRyZXR1cm4gZGF0ZUVudGl0aWVzO1xufTtcblxuLyoqXG4gKiBzb3J0RGF0ZUVudGl0aWVzTGlzdFxuICogcmVkdWNlcyBkYXRlRW50aXRpZXMgYXJyYXkgYmFzZWQgb24gdmFsdWUgb2YgdGhlIFwiZGF0ZXNTb3J0ZWRCeVwiIGZpbHRlclxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGVFbnRpdGllcyAgICBvcmlnaW5hbCBkYXRlRW50aXRpZXMgYXJyYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0ICAgdmFsdWUgZm9yIHRoZSBcImRhdGVzU29ydGVkQnlcIiBmaWx0ZXJcbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgIGZpbHRlcmVkIGRhdGVFbnRpdGllcyBhcnJheVxuICovXG5leHBvcnQgY29uc3Qgc29ydERhdGVFbnRpdGllc0xpc3QgPSAoIGRhdGVFbnRpdGllcywgc29ydCA9ICdjaHJvbm9sb2dpY2FsbHknICkgPT4ge1xuXHRkYXRlRW50aXRpZXMgPSBkYXRlRW50aXRpZXMgfHwgW107XG5cdHN3aXRjaCAoIHNvcnQgKSB7XG5cdFx0Y2FzZSAnY2hyb25vbG9naWNhbGx5JyA6XG5cdFx0XHRkYXRlRW50aXRpZXMgPSBzb3J0QnkoXG5cdFx0XHRcdGRhdGVFbnRpdGllcyxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdGZ1bmN0aW9uKCBkYXRlRW50aXR5ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIERhdGVUaW1lLmlzVmFsaWQoIGRhdGVFbnRpdHkuc3RhcnQgKSA/XG5cdFx0XHRcdFx0XHRcdGRhdGVFbnRpdHkuc3RhcnQudG9NaWxsaXMoKSA6XG5cdFx0XHRcdFx0XHRcdDA7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2J5LW5hbWUnIDpcblx0XHRcdGRhdGVFbnRpdGllcyA9IHNvcnRCeSggZGF0ZUVudGl0aWVzLCBbICduYW1lJyBdICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdieS1pZCcgOlxuXHRcdFx0ZGF0ZUVudGl0aWVzID0gc29ydEJ5KCBkYXRlRW50aXRpZXMsIFsgJ2lkJyBdICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdieS1vcmRlcicgOlxuXHRcdFx0ZGF0ZUVudGl0aWVzID0gc29ydEJ5KCBkYXRlRW50aXRpZXMsIFsgJ29yZGVyJyBdICk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gZGF0ZUVudGl0aWVzO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBldmVudCBkYXRlRW50aXR5IG9iamVjdFxuICogQHBhcmFtIHtudW1iZXJ9IGNhcGFjaXR5XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHNvbGQvcmVnTGltaXQgPj0gY2FwYWNpdHlcbiAqL1xuY29uc3QgY2FwYWNpdHlBdE9yQWJvdmUgPSAoIGRhdGVFbnRpdHksIGNhcGFjaXR5ICkgPT4ge1xuXHRyZXR1cm4gdmFsaWRTb2xkKCBkYXRlRW50aXR5ICkgJiZcblx0XHR2YWxpZEZpbml0ZVJlZ2xpbWl0KCBkYXRlRW50aXR5ICkgJiZcblx0XHQoXG5cdFx0XHRwYXJzZUludCggZGF0ZUVudGl0eS5zb2xkLCAxMCApIC9cblx0XHRcdHBhcnNlSW50KCBkYXRlRW50aXR5LnJlZ0xpbWl0LCAxMCApID49ICggY2FwYWNpdHkgLyAxMDAgKVxuXHRcdCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICAgIGV2ZW50IGRhdGVFbnRpdHkgb2JqZWN0XG4gKiBAcGFyYW0ge251bWJlcn0gY2FwYWNpdHlcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgc29sZC9yZWdMaW1pdCBsZXNzIHRoYW4gdGhhbiBjYXBhY2l0eVxuICovXG5jb25zdCBjYXBhY2l0eUJlbG93ID0gKCBkYXRlRW50aXR5LCBjYXBhY2l0eSApID0+IHtcblx0cmV0dXJuIChcblx0XHR2YWxpZEluZmluaXRlUmVnbGltaXQoIGRhdGVFbnRpdHkgKVxuXHQpIHx8IChcblx0XHR2YWxpZFNvbGQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdHZhbGlkRmluaXRlUmVnbGltaXQoIGRhdGVFbnRpdHkgKSAmJlxuXHRcdChcblx0XHRcdHBhcnNlSW50KCBkYXRlRW50aXR5LnNvbGQsIDEwICkgL1xuXHRcdFx0cGFyc2VJbnQoIGRhdGVFbnRpdHkucmVnTGltaXQsIDEwICkgPCAoIGNhcGFjaXR5IC8gMTAwIClcblx0XHQpXG5cdCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICAgIGV2ZW50IGRhdGVFbnRpdHkgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHJlZ0xpbWl0IHByb3BlcnR5IGlzIHZhbGlkXG4gKi9cbmNvbnN0IHZhbGlkU3RhdHVzID0gKCBkYXRlRW50aXR5ICkgPT4ge1xuXHRyZXR1cm4gdHlwZW9mIGRhdGVFbnRpdHkuc3RhdHVzID09PSAnc3RyaW5nJztcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgICAgZXZlbnQgZGF0ZUVudGl0eSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgcmVnTGltaXQgcHJvcGVydHkgaXMgdmFsaWRcbiAqL1xuY29uc3QgdmFsaWRSZWdsaW1pdCA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0cmV0dXJuIHR5cGVvZiBkYXRlRW50aXR5LnJlZ0xpbWl0ID09PSAnc3RyaW5nJyB8fFxuXHRcdHR5cGVvZiBkYXRlRW50aXR5LnJlZ0xpbWl0ID09PSAnbnVtYmVyJztcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgICAgZXZlbnQgZGF0ZUVudGl0eSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgcmVnTGltaXQgcHJvcGVydHkgaXMgdmFsaWQgYW5kIE5PVCBpbmZpbml0ZVxuICovXG5jb25zdCB2YWxpZEZpbml0ZVJlZ2xpbWl0ID0gKCBkYXRlRW50aXR5ICkgPT4ge1xuXHRyZXR1cm4gdmFsaWRSZWdsaW1pdCggZGF0ZUVudGl0eSApICYmXG5cdFx0ZGF0ZUVudGl0eS5yZWdMaW1pdCAhPT0gJ0lORicgJiZcblx0XHRkYXRlRW50aXR5LnJlZ0xpbWl0ICE9PSBJbmZpbml0eTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgICAgZXZlbnQgZGF0ZUVudGl0eSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgcmVnTGltaXQgcHJvcGVydHkgaXMgdmFsaWQgYW5kIHVubGltaXRlZFxuICovXG5jb25zdCB2YWxpZEluZmluaXRlUmVnbGltaXQgPSAoIGRhdGVFbnRpdHkgKSA9PiB7XG5cdHJldHVybiB2YWxpZFJlZ2xpbWl0KCBkYXRlRW50aXR5ICkgJiYgKFxuXHRcdGRhdGVFbnRpdHkucmVnTGltaXQgPT09ICdJTkYnIHx8IGRhdGVFbnRpdHkucmVnTGltaXQgPT09IEluZmluaXR5XG5cdCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICAgIGV2ZW50IGRhdGVFbnRpdHkgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHJlZ0xpbWl0IHByb3BlcnR5IGlzIHZhbGlkXG4gKi9cbmNvbnN0IHZhbGlkU29sZCA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0cmV0dXJuIHR5cGVvZiBkYXRlRW50aXR5LnNvbGQgPT09ICdzdHJpbmcnIHx8XG5cdFx0dHlwZW9mIGRhdGVFbnRpdHkuc29sZCA9PT0gJ251bWJlcic7XG59O1xuXG4vKipcbiAqIHNlYXJjaERhdGVFbnRpdGllc1xuICogcmVkdWNlcyBkYXRlRW50aXRpZXMgYXJyYXkgYmFzZWQgb24gdmFsdWUgb2YgdGhlIFwic2VhcmNoRGF0ZU5hbWVcIiBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRlRW50aXRpZXMgICAgXHRcdG9yaWdpbmFsIGRhdGVFbnRpdGllcyBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRleHQgXHR2YWx1ZSBmb3IgdGhlIFwic2VhcmNoRGF0ZU5hbWVcIiBmaWx0ZXJcbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgIFx0XHRmaWx0ZXJlZCBkYXRlRW50aXRpZXMgYXJyYXlcbiAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaERhdGVFbnRpdGllcyA9ICggZGF0ZUVudGl0aWVzLCBzZWFyY2hUZXh0ID0gJycgKSA9PiB7XG5cdGRhdGVFbnRpdGllcyA9IHNlYXJjaFRleHQgIT09ICcnID9cblx0XHRkYXRlRW50aXRpZXMuZmlsdGVyKCAoIGRhdGVFbnRpdHkgKSA9PiB7XG5cdFx0XHRyZXR1cm4gZGF0ZUVudGl0eS5uYW1lLnRvTG93ZXJDYXNlKClcblx0XHRcdFx0LnNlYXJjaCggc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpICkgIT09IC0xO1xuXHRcdH0gKSA6XG5cdFx0ZGF0ZUVudGl0aWVzO1xuXHRyZXR1cm4gZGF0ZUVudGl0aWVzO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBTZWxlY3RDb250cm9sIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogRGF0ZXNMaXN0RmlsdGVyQmFyXG4gKiBmaWx0ZXJzIGZvciBjb250cm9sbGluZyB0aGUgZGlzcGxheSBvZiBhIGxpc3Qgb2YgRXZlbnQgRGF0ZXNcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblNob3dGaWx0ZXJDaGFuZ2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uT3JkZXJGaWx0ZXJDaGFuZ2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uRGlzcGxheUZpbHRlckNoYW5nZVxuICogQHJldHVybiB7T2JqZWN0fSBFZGl0b3JEYXRlc0xpc3RWaWV3IHdpdGggYWRkZWQgRGF0ZUxpc3RGaWx0ZXJzXG4gKi9cbmNsYXNzIERhdGVMaXN0RmlsdGVyQmFyIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRzaG93RGF0ZXM6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRkYXRlc1NvcnRlZEJ5OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdFx0ZGlzcGxheURhdGVzOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdFx0c2V0U2hvd0RhdGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHRcdHNldERhdGVzU29ydGVkQnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c2V0RGlzcGxheURhdGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2hvd0RhdGVzXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldFNob3dEYXRlc1xuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHNob3dEYXRlcyBmaWx0ZXJcblx0ICovXG5cdHNob3dEYXRlcyA9ICggc2hvd0RhdGVzLCBzZXRTaG93RGF0ZXMgKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRcdGxhYmVsPXsgX18oICdzaG93JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0Y2xhc3NOYW1lPVwiZXNwcmVzc28tZGF0ZS1saXN0LWZpbHRlci1iYXItc2hvdy1zZWxlY3RcIlxuXHRcdFx0XHR2YWx1ZT17IHNob3dEYXRlcyB9XG5cdFx0XHRcdG9wdGlvbnM9eyBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdhbGwnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnYWxsIGRhdGVzJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdhY3RpdmUtdXBjb21pbmcnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnYWxsIGFjdGl2ZSBhbmQgdXBjb21pbmcnLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdhY3RpdmUtb25seScsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oXG5cdFx0XHRcdFx0XHRcdCdhY3RpdmUgZGF0ZXMgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3VwY29taW5nLW9ubHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQndXBjb21pbmcgZGF0ZXMgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ25leHQtYWN0aXZlLXVwY29taW5nLW9ubHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnbmV4dCBhY3RpdmUgb3IgdXBjb21pbmcgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3NvbGQtb3V0LW9ubHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnc29sZCBvdXQgZGF0ZXMgb25seScsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYWJvdmUtOTAtY2FwYWNpdHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnZGF0ZXMgYWJvdmUgOTAlIGNhcGFjaXR5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYWJvdmUtNzUtY2FwYWNpdHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnZGF0ZXMgYWJvdmUgNzUlIGNhcGFjaXR5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYWJvdmUtNTAtY2FwYWNpdHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnZGF0ZXMgYWJvdmUgNTAlIGNhcGFjaXR5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYmVsb3ctNTAtY2FwYWNpdHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnZGF0ZXMgYmVsb3cgNTAlIGNhcGFjaXR5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAncmVjZW50bHktZXhwaXJlZC1vbmx5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyhcblx0XHRcdFx0XHRcdFx0J3JlY2VudGx5IGV4cGlyZWQgZGF0ZXMnLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdleHBpcmVkLW9ubHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnYWxsIGV4cGlyZWQgZGF0ZXMnLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICd0cmFzaGVkLW9ubHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQndHJhc2hlZCBkYXRlcyBvbmx5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdIH1cblx0XHRcdFx0b25DaGFuZ2U9eyBzZXRTaG93RGF0ZXMgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGF0ZXNTb3J0ZWRCeVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXREYXRlc1NvcnRlZEJ5XG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZGF0ZXNTb3J0ZWRCeSBmaWx0ZXJcblx0ICovXG5cdGRhdGVzU29ydGVkQnkgPSAoIGRhdGVzU29ydGVkQnksIHNldERhdGVzU29ydGVkQnkgKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRcdGxhYmVsPXsgX18oICdzb3J0JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0Y2xhc3NOYW1lPVwiZXNwcmVzc28tZGF0ZS1saXN0LWZpbHRlci1iYXItb3JkZXItc2VsZWN0XCJcblx0XHRcdFx0dmFsdWU9eyBkYXRlc1NvcnRlZEJ5IH1cblx0XHRcdFx0b3B0aW9ucz17IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2Nocm9ub2xvZ2ljYWxseScsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oICdjaHJvbm9sb2dpY2FsbHknLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdieS1uYW1lJyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyggJ2J5IGRhdGUgbmFtZScsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYnktaWQnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnYnkgZGF0ZSBJRCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYnktb3JkZXInLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnYnkgY3VzdG9tIG9yZGVyJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdIH1cblx0XHRcdFx0b25DaGFuZ2U9eyBzZXREYXRlc1NvcnRlZEJ5IH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGRpc3BsYXlEYXRlc1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXREaXNwbGF5RGF0ZXNcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBkaXNwbGF5RGF0ZXMgZmlsdGVyXG5cdCAqL1xuXHRkaXNwbGF5RGF0ZXMgPSAoIGRpc3BsYXlEYXRlcywgc2V0RGlzcGxheURhdGVzICkgPT4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8U2VsZWN0Q29udHJvbFxuXHRcdFx0XHRsYWJlbD17IF9fKCAnZGlzcGxheScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGNsYXNzTmFtZT1cImVzcHJlc3NvLWRhdGUtbGlzdC1maWx0ZXItYmFyLWRpc3BsYXktc2VsZWN0XCJcblx0XHRcdFx0dmFsdWU9eyBkaXNwbGF5RGF0ZXMgfVxuXHRcdFx0XHRvcHRpb25zPXsgW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnc3RhcnQnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnc3RhcnQgZGF0ZXMgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2VuZCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oICdlbmQgZGF0ZXMgb25seScsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYm90aCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oICdzdGFydCBhbmQgZW5kIGRhdGVzJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdIH1cblx0XHRcdFx0b25DaGFuZ2U9eyBzZXREaXNwbGF5RGF0ZXMgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRzaG93RGF0ZXMsXG5cdFx0XHRkYXRlc1NvcnRlZEJ5LFxuXHRcdFx0ZGlzcGxheURhdGVzLFxuXHRcdFx0c2V0U2hvd0RhdGVzLFxuXHRcdFx0c2V0RGF0ZXNTb3J0ZWRCeSxcblx0XHRcdHNldERpc3BsYXlEYXRlcyxcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRjb25zdCBzaG93RmlsdGVyID0gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1zaG93LWRhdGVzLWZpbHRlciBlZS1maWx0ZXItYmFyLWZpbHRlclwiPlxuXHRcdFx0XHR7IHRoaXMuc2hvd0RhdGVzKCBzaG93RGF0ZXMsIHNldFNob3dEYXRlcyApIH1cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdFx0Y29uc3Qgc29ydEZpbHRlciA9IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtc29ydC1kYXRlcy1maWx0ZXIgZWUtZmlsdGVyLWJhci1maWx0ZXJcIj5cblx0XHRcdFx0eyB0aGlzLmRhdGVzU29ydGVkQnkoIGRhdGVzU29ydGVkQnksIHNldERhdGVzU29ydGVkQnkgKSB9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpO1xuXHRcdGNvbnN0IGRpc3BsYXlGaWx0ZXIgPSAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWRpc3BsYXktZGF0ZXMtZGF0ZXMtZmlsdGVyIGVlLWZpbHRlci1iYXItZmlsdGVyXCI+XG5cdFx0XHRcdHsgdGhpcy5kaXNwbGF5RGF0ZXMoIGRpc3BsYXlEYXRlcywgc2V0RGlzcGxheURhdGVzICkgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHR7IHNob3dGaWx0ZXIgfVxuXHRcdFx0XHR7IHNvcnRGaWx0ZXIgfVxuXHRcdFx0XHR7IGRpc3BsYXlGaWx0ZXIgfVxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVMaXN0RmlsdGVyQmFyO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHdpdGhFbnRpdHlQYWdpbmF0aW9uIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgY29tcG9zZSwgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgd2l0aERhdGVFbnRpdGllc0xpc3RGaWx0ZXJCYXIsIHtcblx0Z2V0RmlsdGVyZWREYXRlRW50aXRpZXNMaXN0LFxufSBmcm9tICcuL3dpdGgtZGF0ZS1lbnRpdGllcy1saXN0LWZpbHRlci1iYXInO1xuaW1wb3J0IHdpdGhEYXRlRW50aXRpZXNMaXN0RmlsdGVyU3RhdGUgZnJvbSAnLi93aXRoLWRhdGUtZW50aXRpZXMtbGlzdC1maWx0ZXItc3RhdGUnO1xuaW1wb3J0IHdpdGhGaWx0ZXJlZERhdGVFbnRpdGllcyBmcm9tICcuL3dpdGgtZmlsdGVyZWQtZGF0ZS1lbnRpdGllcyc7XG5cbmNvbnN0IHdpdGhQYWdpbmF0ZWREYXRlRW50aXRpZXNMaXN0QW5kRmlsdGVyQmFyID0gKFxuXHRwYWdpbmF0aW9uQ29uZmlnID0ge31cbikgPT4gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoRGF0ZUVudGl0aWVzTGlzdEZpbHRlclN0YXRlLFxuXHRcdHdpdGhEYXRlRW50aXRpZXNMaXN0RmlsdGVyQmFyLFxuXHRcdHdpdGhFbnRpdHlQYWdpbmF0aW9uKCBwYWdpbmF0aW9uQ29uZmlnICksXG5cdF0gKSxcblx0J3dpdGhQYWdpbmF0ZWREYXRlRW50aXRpZXNMaXN0QW5kRmlsdGVyQmFyJ1xuKTtcblxuZXhwb3J0IHtcblx0d2l0aERhdGVFbnRpdGllc0xpc3RGaWx0ZXJCYXIsXG5cdHdpdGhEYXRlRW50aXRpZXNMaXN0RmlsdGVyU3RhdGUsXG5cdHdpdGhGaWx0ZXJlZERhdGVFbnRpdGllcyxcblx0d2l0aFBhZ2luYXRlZERhdGVFbnRpdGllc0xpc3RBbmRGaWx0ZXJCYXIsXG5cdGdldEZpbHRlcmVkRGF0ZUVudGl0aWVzTGlzdCxcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBGcmFnbWVudCwgdXNlTWVtbywgdXNlRWZmZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IEVudGl0eUxpc3RGaWx0ZXJCYXIgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9oaWdoZXItb3JkZXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBkZWZhdWx0IGFzIERhdGVMaXN0RmlsdGVyQmFyIH0gZnJvbSAnLi9kYXRlLWxpc3QtZmlsdGVyLWJhcic7XG5pbXBvcnQge1xuXHRmaWx0ZXJEYXRlRW50aXRpZXMsXG5cdHNlYXJjaERhdGVFbnRpdGllcyxcblx0c29ydERhdGVFbnRpdGllc0xpc3QsXG59IGZyb20gJy4vZGF0ZS1lbnRpdGllcy1saXN0LWZpbHRlci11dGlscyc7XG5cbmNvbnN0IERFRkFVTFRfRU1QVFlfQVJSQVkgPSBbXTtcblxuLyoqXG4gKiBmaWx0ZXJzIHRoZSBkYXRlcyBsaXN0IGJhc2VkIG9uIHRoZSBjdXJyZW50IGZpbHRlciBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGVFbnRpdGllc1xuICogQHBhcmFtIHtzdHJpbmd9IHNob3dEYXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IGRhdGVzU29ydGVkQnlcbiAqIEByZXR1cm4ge0FycmF5fSBmaWx0ZXJlZCBsaXN0IG9mIGRhdGVFbnRpdGllc1xuICovXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyZWREYXRlRW50aXRpZXNMaXN0ID0gKCBkYXRlRW50aXRpZXMsIHNob3dEYXRlcywgZGF0ZXNTb3J0ZWRCeSApID0+IHtcblx0cmV0dXJuIHNob3dEYXRlcyAmJiBkYXRlc1NvcnRlZEJ5ICYmICEgaXNFbXB0eSggZGF0ZUVudGl0aWVzICkgP1xuXHRcdHNvcnREYXRlRW50aXRpZXNMaXN0KFxuXHRcdFx0ZmlsdGVyRGF0ZUVudGl0aWVzKCBkYXRlRW50aXRpZXMsIHNob3dEYXRlcyApLFxuXHRcdFx0ZGF0ZXNTb3J0ZWRCeVxuXHRcdCkgOlxuXHRcdFtdO1xufTtcblxuLyoqXG4gKiB3aXRoRGF0ZUVudGl0aWVzTGlzdEZpbHRlckJhclxuICogSGlnaGVyLU9yZGVyLUNvbXBvbmVudCB0aGF0IHdyYXBzIGFuIFwiRW50aXR5TGlzdFwiIGNvbXBvbmVudFxuICogd2l0aCBhbiBFbnRpdHlMaXN0RmlsdGVyQmFyICYgRGF0ZUxpc3RGaWx0ZXJCYXIgY29tcG9uZW50XG4gKiB0aGF0IGNvbnRyb2xzIGhvdyBlbnRpdGllcyBhcmUgZGlzcGxheWVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IEVudGl0eUxpc3RcbiAqIEByZXR1cm4ge09iamVjdH0gRW50aXR5TGlzdCB3aXRoIGFkZGVkIERhdGVMaXN0RmlsdGVyQmFyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHQoIEVudGl0eUxpc3QgKSA9PiAoIHtcblx0XHRkaXNwbGF5RGF0ZXMsXG5cdFx0c2hvd0RhdGVzLFxuXHRcdGRhdGVzU29ydGVkQnksXG5cdFx0c2V0RGlzcGxheURhdGVzLFxuXHRcdHNldFNob3dEYXRlcyxcblx0XHRzZXREYXRlc1NvcnRlZEJ5LFxuXHRcdHNlYXJjaERhdGVOYW1lLFxuXHRcdGRhdGVzUGVyUGFnZSxcblx0XHRkYXRlc1ZpZXcsXG5cdFx0c2V0U2VhcmNoRGF0ZU5hbWUsXG5cdFx0c2V0RGF0ZXNQZXJQYWdlLFxuXHRcdHNldERhdGVzTGlzdFZpZXcsXG5cdFx0c2V0RGF0ZXNHcmlkVmlldyxcblx0XHRzZXRGaWx0ZXJlZERhdGVFbnRpdGllcyxcblx0XHRkYXRlRW50aXRpZXMgPSBERUZBVUxUX0VNUFRZX0FSUkFZLFxuXHRcdC4uLm90aGVyUHJvcHNcblx0fSApID0+IHtcblx0XHRjb25zdCBmaWx0ZXJlZEVudGl0aWVzID0gdXNlTWVtbyhcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgZW50aXRpZXMgPSBzZWFyY2hEYXRlRW50aXRpZXMoIGRhdGVFbnRpdGllcywgc2VhcmNoRGF0ZU5hbWUgKTtcblx0XHRcdFx0cmV0dXJuIGdldEZpbHRlcmVkRGF0ZUVudGl0aWVzTGlzdChcblx0XHRcdFx0XHRlbnRpdGllcyxcblx0XHRcdFx0XHRzaG93RGF0ZXMsXG5cdFx0XHRcdFx0ZGF0ZXNTb3J0ZWRCeVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdFtcblx0XHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdFx0XHRzZWFyY2hEYXRlTmFtZSxcblx0XHRcdFx0c2hvd0RhdGVzLFxuXHRcdFx0XHRkYXRlc1NvcnRlZEJ5LFxuXHRcdFx0XVxuXHRcdCk7XG5cdFx0Ly8gd2hlbmV2ZXIgZmlsdGVyZWQgZW50aXRpZXMgY2hhbmdlcyBsZXQncyB1cGRhdGUgdGhlIGRhdGUgaWRzXG5cdFx0Ly8gaW4gdGhlIHN0YXRlLlxuXHRcdHVzZUVmZmVjdCggKCkgPT4ge1xuXHRcdFx0c2V0RmlsdGVyZWREYXRlRW50aXRpZXMoXG5cdFx0XHRcdGZpbHRlcmVkRW50aXRpZXMubWFwKCAoIGRhdGVFbnRpdHkgKSA9PiBkYXRlRW50aXR5LmlkIClcblx0XHRcdCk7XG5cdFx0fSwgWyBmaWx0ZXJlZEVudGl0aWVzIF0gKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdDxFbnRpdHlMaXN0RmlsdGVyQmFyXG5cdFx0XHRcdFx0bmFtZT1cIkRhdGVMaXN0RmlsdGVyQmFyXCJcblx0XHRcdFx0XHRzZWFyY2hUZXh0PXsgc2VhcmNoRGF0ZU5hbWUgfVxuXHRcdFx0XHRcdHNldFNlYXJjaFRleHQ9eyBzZXRTZWFyY2hEYXRlTmFtZSB9XG5cdFx0XHRcdFx0cGVyUGFnZT17IGRhdGVzUGVyUGFnZSB9XG5cdFx0XHRcdFx0dmlldz17IGRhdGVzVmlldyB9XG5cdFx0XHRcdFx0c2V0UGVyUGFnZT17IHNldERhdGVzUGVyUGFnZSB9XG5cdFx0XHRcdFx0c2V0TGlzdFZpZXc9eyBzZXREYXRlc0xpc3RWaWV3IH1cblx0XHRcdFx0XHRzZXRHcmlkVmlldz17IHNldERhdGVzR3JpZFZpZXcgfVxuXHRcdFx0XHRcdGVudGl0eUZpbHRlcnM9e1xuXHRcdFx0XHRcdFx0PERhdGVMaXN0RmlsdGVyQmFyXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXlEYXRlcz17IGRpc3BsYXlEYXRlcyB9XG5cdFx0XHRcdFx0XHRcdHNob3dEYXRlcz17IHNob3dEYXRlcyB9XG5cdFx0XHRcdFx0XHRcdGRhdGVzU29ydGVkQnk9eyBkYXRlc1NvcnRlZEJ5IH1cblx0XHRcdFx0XHRcdFx0c2V0RGlzcGxheURhdGVzPXsgc2V0RGlzcGxheURhdGVzIH1cblx0XHRcdFx0XHRcdFx0c2V0U2hvd0RhdGVzPXsgc2V0U2hvd0RhdGVzIH1cblx0XHRcdFx0XHRcdFx0c2V0RGF0ZXNTb3J0ZWRCeT17IHNldERhdGVzU29ydGVkQnkgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdC8+XG5cdFx0XHRcdDxFbnRpdHlMaXN0XG5cdFx0XHRcdFx0ZW50aXRpZXM9eyBmaWx0ZXJlZEVudGl0aWVzIH1cblx0XHRcdFx0XHRlbnRpdGllc1BlclBhZ2U9eyBkYXRlc1BlclBhZ2UgfVxuXHRcdFx0XHRcdHZpZXc9eyBkYXRlc1ZpZXcgfVxuXHRcdFx0XHRcdG5vUmVzdWx0c1RleHQ9e1xuXHRcdFx0XHRcdFx0X18oXG5cdFx0XHRcdFx0XHRcdCdubyByZXN1bHRzIGZvdW5kICh0cnkgY2hhbmdpbmcgZmlsdGVycyknLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNob3dEYXRlPXsgZGlzcGxheURhdGVzIH1cblx0XHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9LFxuXHQnd2l0aERhdGVFbnRpdGllc0xpc3RGaWx0ZXJCYXInXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50LCBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhTZWxlY3QsIHdpdGhEaXNwYXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbmNvbnN0IERFRkFVTFRfRU1QVFlfQVJSQVkgPSBbXTtcblxuLyoqXG4gKiB3aXRoRGF0ZXNMaXN0RmlsdGVyU3RhdGVcbiAqIEhpZ2hlci1PcmRlci1Db21wb25lbnQgdGhhdCB3cmFwcyBhIFwiRGF0ZXNMaXN0RmlsdGVyQmFyXCIgY29tcG9uZW50XG4gKiAob3IgcGFyZW50IGNvbXBvbmVudCB0aGF0IHVsdGltYXRlbHkgd3JhcHMgYSBcIkRhdGVzTGlzdEZpbHRlckJhclwiIGNvbXBvbmVudClcbiAqIGluIG9yZGVyIHRvIHByb3ZpZGUgc3RhdGUgbWFuYWdlbWVudCBmb3IgaXQgYW5kIGl0cyBjaGlsZHJlblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBXcmFwcGVkQ29tcG9uZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9IFdyYXBwZWRDb21wb25lbnQgd2l0aCBhZGRlZCBEYXRlc0xpc3RGaWx0ZXJTdGF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0Y29tcG9zZSggW1xuXHRcdHdpdGhTZWxlY3QoICggc2VsZWN0LCBvd25Qcm9wcyApID0+IHtcblx0XHRcdGNvbnN0IHtcblx0XHRcdFx0c2hvd0RhdGVzID0gJ2FjdGl2ZS11cGNvbWluZycsXG5cdFx0XHRcdGRhdGVzU29ydGVkQnkgPSAnY2hyb25vbG9naWNhbGx5Jyxcblx0XHRcdFx0ZGlzcGxheURhdGVzID0gJ3N0YXJ0Jyxcblx0XHRcdFx0c2VhcmNoRGF0ZU5hbWUgPSAnJyxcblx0XHRcdFx0ZGF0ZXNQZXJQYWdlID0gNixcblx0XHRcdFx0ZGF0ZXNWaWV3ID0gJ2dyaWQnLFxuXHRcdFx0fSA9IG93blByb3BzO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdGNvbnN0IHsgZ2V0RW50aXRpZXNCeUlkcyB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2hvd0RhdGVzOiBzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2V2ZW50LWVkaXRvci1kYXRlcy1saXN0Jyxcblx0XHRcdFx0XHQnc2hvd0RhdGVzJyxcblx0XHRcdFx0XHRzaG93RGF0ZXNcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGF0ZXNTb3J0ZWRCeTogc3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItZGF0ZXMtbGlzdCcsXG5cdFx0XHRcdFx0J2RhdGVzU29ydGVkQnknLFxuXHRcdFx0XHRcdGRhdGVzU29ydGVkQnlcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGlzcGxheURhdGVzOiBzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2V2ZW50LWVkaXRvci1kYXRlcy1saXN0Jyxcblx0XHRcdFx0XHQnZGlzcGxheURhdGVzJyxcblx0XHRcdFx0XHRkaXNwbGF5RGF0ZXNcblx0XHRcdFx0KSxcblx0XHRcdFx0c2VhcmNoRGF0ZU5hbWU6IHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdzZWFyY2hEYXRlTmFtZScsXG5cdFx0XHRcdFx0c2VhcmNoRGF0ZU5hbWVcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGF0ZXNQZXJQYWdlOiBwYXJzZUludChcblx0XHRcdFx0XHRzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLWRhdGVzLWxpc3QnLFxuXHRcdFx0XHRcdFx0J2RhdGVzUGVyUGFnZScsXG5cdFx0XHRcdFx0XHRkYXRlc1BlclBhZ2Vcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdDEwXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRhdGVzVmlldzogc3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItZGF0ZXMtbGlzdCcsXG5cdFx0XHRcdFx0J2RhdGVzVmlldycsXG5cdFx0XHRcdFx0ZGF0ZXNWaWV3XG5cdFx0XHRcdCksXG5cdFx0XHRcdGZpbHRlcmVkRGF0ZUVudGl0aWVzOiBnZXRFbnRpdGllc0J5SWRzKFxuXHRcdFx0XHRcdCdkYXRldGltZScsXG5cdFx0XHRcdFx0c3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdFx0J2V2ZW50LWVkaXRvci1kYXRlcy1saXN0Jyxcblx0XHRcdFx0XHRcdCdmaWx0ZXJlZERhdGVJZHMnLFxuXHRcdFx0XHRcdFx0REVGQVVMVF9FTVBUWV9BUlJBWVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSxcblx0XHRcdH07XG5cdFx0fSApLFxuXHRcdHdpdGhEaXNwYXRjaCggKCBkaXNwYXRjaCApID0+IHtcblx0XHRcdGNvbnN0IHN0b3JlID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNldFNob3dEYXRlczogKCBzaG93RGF0ZXMgKSA9PiBzdG9yZS5zZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2V2ZW50LWVkaXRvci1kYXRlcy1saXN0Jyxcblx0XHRcdFx0XHQnc2hvd0RhdGVzJyxcblx0XHRcdFx0XHRzaG93RGF0ZXNcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0RGF0ZXNTb3J0ZWRCeTogKCBkYXRlc1NvcnRlZEJ5ICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItZGF0ZXMtbGlzdCcsXG5cdFx0XHRcdFx0J2RhdGVzU29ydGVkQnknLFxuXHRcdFx0XHRcdGRhdGVzU29ydGVkQnlcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0RGlzcGxheURhdGVzOiAoIGRpc3BsYXlEYXRlcyApID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLWRhdGVzLWxpc3QnLFxuXHRcdFx0XHRcdCdkaXNwbGF5RGF0ZXMnLFxuXHRcdFx0XHRcdGRpc3BsYXlEYXRlc1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRzZXRTZWFyY2hEYXRlTmFtZTogKCBzZWFyY2hEYXRlTmFtZSApID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdzZWFyY2hEYXRlTmFtZScsXG5cdFx0XHRcdFx0c2VhcmNoRGF0ZU5hbWVcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0RGF0ZXNQZXJQYWdlOiAoIGRhdGVzUGVyUGFnZSApID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLWRhdGVzLWxpc3QnLFxuXHRcdFx0XHRcdCdkYXRlc1BlclBhZ2UnLFxuXHRcdFx0XHRcdHBhcnNlSW50KCBkYXRlc1BlclBhZ2UsIDEwIClcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0RGF0ZXNMaXN0VmlldzogKCkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItZGF0ZXMtbGlzdCcsXG5cdFx0XHRcdFx0J2RhdGVzVmlldycsXG5cdFx0XHRcdFx0J2xpc3QnXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldERhdGVzR3JpZFZpZXc6ICgpID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLWRhdGVzLWxpc3QnLFxuXHRcdFx0XHRcdCdkYXRlc1ZpZXcnLFxuXHRcdFx0XHRcdCdncmlkJ1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRzZXRGaWx0ZXJlZERhdGVFbnRpdGllczogKCBkYXRlRW50aXR5SWRzICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItZGF0ZXMtbGlzdCcsXG5cdFx0XHRcdFx0J2ZpbHRlcmVkRGF0ZUlkcycsXG5cdFx0XHRcdFx0ZGF0ZUVudGl0eUlkc1xuXHRcdFx0XHQpLFxuXHRcdFx0fTtcblx0XHR9ICksXG5cdF0gKSxcblx0J3dpdGhEYXRlRW50aXRpZXNMaXN0RmlsdGVyU3RhdGUnXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuXG5jb25zdCBERUZBVUxUX0VNUFRZX0FSUkFZID0gW107XG5cbmNvbnN0IHdpdGhGaWx0ZXJlZERhdGVFbnRpdGllcyA9IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KFxuXHRcdCggc2VsZWN0ICkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdGNvbnN0IHsgZ2V0RW50aXRpZXNCeUlkcyB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZmlsdGVyZWREYXRlRW50aXRpZXM6IGdldEVudGl0aWVzQnlJZHMoXG5cdFx0XHRcdFx0J2RhdGV0aW1lJyxcblx0XHRcdFx0XHRzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLWRhdGVzLWxpc3QnLFxuXHRcdFx0XHRcdFx0J2ZpbHRlcmVkRGF0ZUlkcycsXG5cdFx0XHRcdFx0XHRERUZBVUxUX0VNUFRZX0FSUkFZXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpLFxuXHRcdFx0fTtcblx0XHR9XG5cdCksXG5cdCd3aXRoRmlsdGVyZWREYXRlRW50aXRpZXMnXG4pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoRmlsdGVyZWREYXRlRW50aXRpZXM7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZGF0ZXMtbGlzdC1ncmlkLXZpZXdcIjpcImVlLWRhdGVzLWxpc3QtZ3JpZC12aWV3XCIsXCJlZS1lZGl0b3ItZGF0ZS1tYWluXCI6XCJlZS1lZGl0b3ItZGF0ZS1tYWluXCIsXCJlZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXdyYXBwZXItZGl2XCI6XCJlZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXdyYXBwZXItZGl2XCIsXCJlZS1lZGl0b3ItZGF0ZS1uYW1lLWhlYWRpbmdcIjpcImVlLWVkaXRvci1kYXRlLW5hbWUtaGVhZGluZ1wiLFwiZWUtaW5saW5lLWVkaXQtdGV4dFwiOlwiZWUtaW5saW5lLWVkaXQtdGV4dFwiLFwiZWUtbG9uZy10aXRsZVwiOlwiZWUtbG9uZy10aXRsZVwiLFwiZWUtZWRpdG9yLWRhdGUtZGVzYy1kaXZcIjpcImVlLWVkaXRvci1kYXRlLWRlc2MtZGl2XCIsXCJlZS1kYXRlLWRlc2MtZXhjZXJwdFwiOlwiZWUtZGF0ZS1kZXNjLWV4Y2VycHRcIixcImVlLWVkaXRvci1kYXRlLWxvY2F0aW9uLWRpdlwiOlwiZWUtZWRpdG9yLWRhdGUtbG9jYXRpb24tZGl2XCIsXCJlZS1lZGl0b3ItZGF0ZS1lZGl0LXZlbnVlLWxpbmtcIjpcImVlLWVkaXRvci1kYXRlLWVkaXQtdmVudWUtbGlua1wiLFwiZWUtZWRpdG9yLWRhdGUtdmVudWUtbmFtZS1zcGFuXCI6XCJlZS1lZGl0b3ItZGF0ZS12ZW51ZS1uYW1lLXNwYW5cIixcImRhc2hpY29uXCI6XCJkYXNoaWNvblwiLFwiZWUtbWVudS1pdGVtLWljb25cIjpcImVlLW1lbnUtaXRlbS1pY29uXCIsXCJkYXNoaWNvbnMtbG9jYXRpb25cIjpcImRhc2hpY29ucy1sb2NhdGlvblwiLFwiZWUtZWRpdG9yLWRhdGUtZGV0YWlscy1zb2xkLXJzcnZkLWNhcC1kaXZcIjpcImVlLWVkaXRvci1kYXRlLWRldGFpbHMtc29sZC1yc3J2ZC1jYXAtZGl2XCIsXCJlZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnVcIjpcImVlLWVkaXRvci1kYXRlLWFjdGlvbnMtbWVudVwiLFwiZXZlbnQtZGF0ZS1yZWdpc3RyYW50cy1sYWJlbFwiOlwiZXZlbnQtZGF0ZS1yZWdpc3RyYW50cy1sYWJlbFwifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgRWRpdG9yRGF0ZUVudGl0eUdyaWRJdGVtIGZyb20gJy4vZWRpdG9yLWRhdGUtZW50aXR5LWdyaWQtaXRlbSc7XG5pbXBvcnQgJy4vZWRpdG9yLWRhdGUtZW50aXRpZXMtZ3JpZC12aWV3LmNzcyc7XG5cbi8qKlxuICogRWRpdG9yRGF0ZUVudGl0aWVzR3JpZFZpZXdcbiAqIERpc3BsYXlzIGRhdGVzIGFzIG1vYmlsZS9maW5nZXIgZnJpZW5kbHkgYmxvY2tzXG4gKiB3aXRoIHRoZSBtb3N0IHJlbGV2YW50IGluZm8gdmlzaWJsZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtBcnJheX0gZW50aXRpZXMgICAgYXJyYXkgb2YgSlNPTiBvYmplY3RzIGRlZmluaW5nIHRoZSBFdmVudCBEYXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzc1xuICogQHBhcmFtIHttaXhlZH0gb3RoZXJQcm9wc1xuICogQHJldHVybiB7Q29tcG9uZW50fSAgICAgICAgICBsaXN0IG9mIHJlbmRlcmVkIEV2ZW50IERhdGVzXG4gKi9cbmNvbnN0IEVkaXRvckRhdGVFbnRpdGllc0dyaWRWaWV3ID0gKCB7XG5cdGVudGl0aWVzLFxuXHRodG1sQ2xhc3MsXG5cdC4uLm90aGVyUHJvcHNcbn0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGNsYXNzTmFtZXMoIGh0bWxDbGFzcywgJ2VlLWRhdGVzLWxpc3QtZ3JpZC12aWV3JyApO1xuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0+XG5cdFx0XHR7XG5cdFx0XHRcdGVudGl0aWVzLm1hcChcblx0XHRcdFx0XHRmdW5jdGlvbiggZGF0ZUVudGl0eSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBpc01vZGVsRW50aXR5T2ZNb2RlbChcblx0XHRcdFx0XHRcdFx0ZGF0ZUVudGl0eSxcblx0XHRcdFx0XHRcdFx0J2RhdGV0aW1lJ1xuXHRcdFx0XHRcdFx0KSA/XG5cdFx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0XHQ8RWRpdG9yRGF0ZUVudGl0eUdyaWRJdGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRrZXk9eyBkYXRlRW50aXR5LmlkIH1cblx0XHRcdFx0XHRcdFx0XHRcdGRhdGVFbnRpdHk9eyBkYXRlRW50aXR5IH1cblx0XHRcdFx0XHRcdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0KSA6XG5cdFx0XHRcdFx0XHRcdG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0PC9kaXY+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFZGl0b3JEYXRlRW50aXRpZXNHcmlkVmlldztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IERhc2hpY29uLCBUb29sdGlwIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGFkZFF1ZXJ5QXJncyB9IGZyb20gJ0B3b3JkcHJlc3MvdXJsJztcbmltcG9ydCB7IEVudGl0eURldGFpbHNQYW5lbCwgSW5saW5lRWRpdElucHV0IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vY29tcG9uZW50cyc7XG5pbXBvcnQge1xuXHRpZlZhbGlkRGF0ZUVudGl0eSxcblx0d2l0aEV2ZW50VmVudWVFbnRpdHksXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2VkaXRvci1ob2NzJztcbmltcG9ydCB7IHJvdXRlcyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGRhdGVUaW1lTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG5jb25zdCB7IE1PREVMX05BTUU6IERBVEVUSU1FIH0gPSBkYXRlVGltZU1vZGVsO1xuY29uc3Qge1xuXHRBRE1JTl9ST1VURVMsXG5cdEFETUlOX1JPVVRFX0FDVElPTlMsXG5cdEFETUlOX1JPVVRFX0FDVElPTl9ERUZBVUxULFxuXHRnZXRBZG1pblVybCxcbn0gPSByb3V0ZXM7XG4vKipcbiAqIEVkaXRvckRhdGVFbnRpdHlEZXRhaWxzXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBKU09OIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZVxuICogQHJldHVybiB7c3RyaW5nfSAgICBkYXRlIGRldGFpbHNcbiAqL1xuY2xhc3MgRWRpdG9yRGF0ZUVudGl0eURldGFpbHMgZXh0ZW5kcyBDb21wb25lbnQge1xuXHQvKipcblx0ICogZGF0ZU5hbWVcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5IFx0bW9kZWwgb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gICAgZGF0ZSBuYW1lXG5cdCAqL1xuXHRkYXRlTmFtZSA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0XHRjb25zdCBodG1sQ2xhc3MgPSBjbGFzc05hbWVzKFxuXHRcdFx0J2VlLWVkaXRvci1kYXRlLW5hbWUtaGVhZGluZycsXG5cdFx0XHR7XG5cdFx0XHRcdCdlZS1sb25nLXRpdGxlJzogZGF0ZUVudGl0eS5uYW1lICYmIGRhdGVFbnRpdHkubmFtZS5sZW5ndGggPiA0MCxcblx0XHRcdH1cblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8aDEgY2xhc3NOYW1lPXsgaHRtbENsYXNzIH0+XG5cdFx0XHRcdDxJbmxpbmVFZGl0SW5wdXRcblx0XHRcdFx0XHRodG1sSWQ9eyBgZXZlbnQtZGF0ZS1uYW1lLSR7IGRhdGVFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcblx0XHRcdFx0XHR2YWx1ZT17IGRhdGVFbnRpdHkubmFtZSB9XG5cdFx0XHRcdFx0b25DaGFuZ2U9eyAoIG5hbWUgKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy51cGRhdGVOYW1lKCBuYW1lLCBkYXRlRW50aXR5ICk7XG5cdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0bGFiZWw9eyBfXyggJ0RhdGUgTmFtZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0bm90aWNlU3R5bGU9e1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiAnNTBweCcsXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9oMT5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBkZXNjcmlwdGlvblxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgICAgbW9kZWwgb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzaG93RGVzY1xuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IGRhdGUgZGVzY3JpcHRpb25cblx0ICovXG5cdGRlc2NyaXB0aW9uID0gKCBkYXRlRW50aXR5LCBzaG93RGVzYyApID0+IHtcblx0XHRjb25zdCBodG1sQ2xhc3MgPSBjbGFzc05hbWVzKFxuXHRcdFx0J2VlLWVkaXRvci1kYXRlLWRlc2MtZGl2Jyxcblx0XHRcdHtcblx0XHRcdFx0J2VlLWRhdGUtZGVzYy1leGNlcnB0Jzogc2hvd0Rlc2MgPT09ICdleGNlcnB0Jyxcblx0XHRcdH1cblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9PlxuXHRcdFx0XHQ8SW5saW5lRWRpdElucHV0XG5cdFx0XHRcdFx0aHRtbElkPXsgYGV2ZW50LWRhdGUtZGVzYy0keyBkYXRlRW50aXR5LmlkIH1gIH1cblx0XHRcdFx0XHR0eXBlPVwidGV4dGFyZWFcIlxuXHRcdFx0XHRcdHZhbHVlPXsgZGF0ZUVudGl0eS5kZXNjcmlwdGlvbiB9XG5cdFx0XHRcdFx0b25DaGFuZ2U9eyAoIGRlc2MgKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy51cGRhdGVEZXNjcmlwdGlvbiggZGVzYywgZGF0ZUVudGl0eSApO1xuXHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdGxhYmVsPXsgX18oICdEYXRlIERlc2NyaXB0aW9uJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIHZlbnVlTmFtZVxuXHQgKnNwY28tZGlzcGxheS1ldmVudC1xdWVzdGlvbnMtbG5rXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gdmVudWVFbnRpdHkgbW9kZWwgb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlIFZlbnVlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd1ZlbnVlXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gZWRpdCB2ZW51ZSBsaW5rXG5cdCAqL1xuXHR2ZW51ZU5hbWUgPSAoIHZlbnVlRW50aXR5LCBzaG93VmVudWUgKSA9PiB7XG5cdFx0aWYgKCAhIHZlbnVlRW50aXR5IHx8ICEgc2hvd1ZlbnVlICkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblx0XHRjb25zdCBlZGl0VmVudWVVcmwgPSBhZGRRdWVyeUFyZ3MoXG5cdFx0XHRnZXRBZG1pblVybChcblx0XHRcdFx0QURNSU5fUk9VVEVTLlZFTlVFUyxcblx0XHRcdFx0QURNSU5fUk9VVEVfQUNUSU9OUy5WRU5VRVMuRURJVFxuXHRcdFx0KSxcblx0XHRcdHtcblx0XHRcdFx0cG9zdDogdmVudWVFbnRpdHkuaWQsXG5cdFx0XHRcdHJldHVybjogJ2VkaXQnLFxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxoMyBjbGFzc05hbWU9XCJlZS1lZGl0b3ItZGF0ZS1sb2NhdGlvbi1kaXZcIj5cblx0XHRcdFx0PFRvb2x0aXBcblx0XHRcdFx0XHR0ZXh0PXsgX18oXG5cdFx0XHRcdFx0XHQndmVudWUgZWRpdG9yIG9wZW5zIGluIGEgbmV3IHdpbmRvdycsXG5cdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHRcdCkgfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGFcblx0XHRcdFx0XHRcdGhyZWY9eyBlZGl0VmVudWVVcmwgfVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtZWRpdG9yLWRhdGUtZWRpdC12ZW51ZS1saW5rXCJcblx0XHRcdFx0XHRcdHRhcmdldD1cIl9ibGFua1wiXG5cdFx0XHRcdFx0XHRyZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RGFzaGljb24gaWNvbj1cImFkbWluLWhvbWVcIiBzaXplPXsgMTYgfSAvPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZWRpdG9yLWRhdGUtdmVudWUtbmFtZS1zcGFuXCI+XG5cdFx0XHRcdFx0XHRcdHsgdmVudWVFbnRpdHkubmFtZSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8RGFzaGljb24gaWNvbj1cImV4dGVybmFsXCIgc2l6ZT17IDEyIH0gLz5cblx0XHRcdFx0XHQ8L2E+XG5cdFx0XHRcdDwvVG9vbHRpcD5cblx0XHRcdDwvaDM+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogZGF0ZVNvbGRSZXNlcnZlZENhcGFjaXR5XG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRFbnRpdHkgICAgICAgIG1vZGVsIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnRcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgICAgbW9kZWwgb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gICAgZGF0ZSBkZXRhaWxzXG5cdCAqL1xuXHRkYXRlU29sZFJlc2VydmVkQ2FwYWNpdHkgPSAoIGV2ZW50RW50aXR5LCBkYXRlRW50aXR5ICkgPT4ge1xuXHRcdGNvbnN0IGRldGFpbHMgPSBbXG5cdFx0XHR7XG5cdFx0XHRcdGlkOiAnZXZlbnQtZGF0ZS1zb2xkJyxcblx0XHRcdFx0bGFiZWw6IF9fKCAnc29sZCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0dmFsdWU6IGRhdGVFbnRpdHkuc29sZCB8fCAwLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0aWQ6ICdldmVudC1kYXRlLXJlc2VydmVkJyxcblx0XHRcdFx0bGFiZWw6IF9fKCAncmVzZXJ2ZWQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdHZhbHVlOiBkYXRlRW50aXR5LnJlc2VydmVkIHx8IDAsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogJ2V2ZW50LWRhdGUtY2FwYWNpdHknLFxuXHRcdFx0XHRsYWJlbDogX18oICdjYXBhY2l0eScsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0dmFsdWU6IGRhdGVFbnRpdHkucmVnTGltaXQgfHwgSW5maW5pdHksXG5cdFx0XHRcdGVkaXRhYmxlOiB7XG5cdFx0XHRcdFx0dHlwZTogJ3RleHQnLFxuXHRcdFx0XHRcdHZhbHVlVHlwZTogJ251bWJlcicsXG5cdFx0XHRcdFx0b25DaGFuZ2U6ICggY2FwYWNpdHkgKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy51cGRhdGVDYXBhY2l0eSggY2FwYWNpdHksIGRhdGVFbnRpdHkgKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0aWQ6ICdldmVudC1kYXRlLXJlZ2lzdHJhbnRzJyxcblx0XHRcdFx0aHRtbENsYXNzOiAnaGFzLXRvb2x0aXAnLFxuXHRcdFx0XHRsYWJlbDogX18oICdyZWdpc3RyYW50cycsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0dmFsdWU6IHRoaXMuZ2V0RGF0ZXRpbWVSZWdpc3RyYXRpb25zTGluayggZXZlbnRFbnRpdHksIGRhdGVFbnRpdHkgKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0XHRyZXR1cm4gPEVudGl0eURldGFpbHNQYW5lbFxuXHRcdFx0ZGV0YWlscz17IGRldGFpbHMgfVxuXHRcdFx0aHRtbENsYXNzPVwiZWUtZWRpdG9yLWRhdGUtZGV0YWlscy1zb2xkLXJzcnZkLWNhcC1kaXZcIlxuXHRcdC8+O1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBkYXRlU29sZFJlc2VydmVkQ2FwYWNpdHlcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudEVudGl0eSAgICAgICAgQmFzZSBlbnRpdHkgaW5zdGFuY2UgZm9yIGV2ZW50LlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBtb2RlbCBvYmplY3QgZGVmaW5pbmcgdGhlIEV2ZW50IERhdGVcblx0ICogQHJldHVybiB7c3RyaW5nfSAgICBsaW5rIHRvIHJlZ2lzdHJhdGlvbnMgbGlzdCB0YWJsZSBmb3IgZGF0ZXRpbWVcblx0ICovXG5cdGdldERhdGV0aW1lUmVnaXN0cmF0aW9uc0xpbmsgPSAoIGV2ZW50RW50aXR5LCBkYXRlRW50aXR5ICkgPT4ge1xuXHRcdGNvbnN0IHJlZ0xpc3RVcmwgPSBhZGRRdWVyeUFyZ3MoXG5cdFx0XHRnZXRBZG1pblVybCggQURNSU5fUk9VVEVTLlJFR0lTVFJBVElPTlMsIEFETUlOX1JPVVRFX0FDVElPTl9ERUZBVUxUICksXG5cdFx0XHR7XG5cdFx0XHRcdGV2ZW50X2lkOiBldmVudEVudGl0eS5pZCxcblx0XHRcdFx0ZGF0ZXRpbWVfaWQ6IGRhdGVFbnRpdHkuaWQsXG5cdFx0XHRcdHJldHVybjogJ2VkaXQnLFxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUb29sdGlwXG5cdFx0XHRcdHRleHQ9eyBfXyhcblx0XHRcdFx0XHQndmlldyByZWdpc3RyYXRpb25zIGZvciB0aGlzIGRhdGV0aW1lLicsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHQpIH1cblx0XHRcdD5cblx0XHRcdFx0PGFcblx0XHRcdFx0XHRocmVmPXsgcmVnTGlzdFVybCB9XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXsgJ2VlLWVkaXRvci1kYXRlLWRldGFpbHMtcmVnLXVybC1saW5rJyB9XG5cdFx0XHRcdFx0dGFyZ2V0PXsgJ19ibGFuaycgfVxuXHRcdFx0XHRcdHJlbD17ICdub29wZW5lciBub3JlZmZlcmVyJyB9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8RGFzaGljb24gaWNvbj1cImdyb3Vwc1wiIHNpemU9eyAyNCB9IC8+XG5cdFx0XHRcdDwvYT5cblx0XHRcdDwvVG9vbHRpcD5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgXHRcdG5ldyBuYW1lIGZvciBldmVudCBkYXRlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICAgIG1vZGVsIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZVxuXHQgKi9cblx0dXBkYXRlTmFtZSA9ICggbmFtZSwgZGF0ZUVudGl0eSApID0+IHtcblx0XHRpZiAoXG5cdFx0XHRpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgREFURVRJTUUgKSAmJlxuXHRcdFx0ZGF0ZUVudGl0eS5uYW1lICE9PSBuYW1lXG5cdFx0KSB7XG5cdFx0XHRkYXRlRW50aXR5Lm5hbWUgPSBuYW1lO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvbiBcdG5ldyBkZXNjcmlwdGlvbiBmb3IgZXZlbnQgZGF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0ZUVudGl0eSAgICBtb2RlbCBvYmplY3QgZGVmaW5pbmcgdGhlIEV2ZW50IERhdGVcblx0ICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBzYXZlZFxuXHQgKi9cblx0dXBkYXRlRGVzY3JpcHRpb24gPSBhc3luYyAoIGRlc2NyaXB0aW9uLCBkYXRlRW50aXR5ICkgPT4ge1xuXHRcdGlmIChcblx0XHRcdGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBkYXRlRW50aXR5LCBEQVRFVElNRSApICYmXG5cdFx0XHRkYXRlRW50aXR5LmRlc2NyaXB0aW9uICE9PSBkZXNjcmlwdGlvblxuXHRcdCkge1xuXHRcdFx0ZGF0ZUVudGl0eS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gXHRcdGNhcGFjaXR5IG5ldyByZWcgbGltaXQgZm9yIGV2ZW50IGRhdGVcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHkgICAgbW9kZWwgb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG5cdCAqL1xuXHR1cGRhdGVDYXBhY2l0eSA9ICggY2FwYWNpdHksIGRhdGVFbnRpdHkgKSA9PiB7XG5cdFx0Y2FwYWNpdHkgPSBwYXJzZUludCggY2FwYWNpdHksIDEwICk7XG5cdFx0aWYgKFxuXHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoIGRhdGVFbnRpdHksIERBVEVUSU1FICkgJiZcblx0XHRcdGRhdGVFbnRpdHkucmVnTGltaXQgIT09IGNhcGFjaXR5XG5cdFx0KSB7XG5cdFx0XHRkYXRlRW50aXR5LnJlZ0xpbWl0ID0gY2FwYWNpdHk7XG5cdFx0fVxuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7IGV2ZW50RW50aXR5LCBkYXRlRW50aXR5LCB2ZW51ZUVudGl0eSB9ID0gdGhpcy5wcm9wcztcblx0XHRjb25zdCB7IHNob3dEZXNjID0gJ2V4Y2VycHQnLCBzaG93VmVudWUgPSB0cnVlIH0gPSB0aGlzLnByb3BzO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17ICdlZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXdyYXBwZXItZGl2JyB9PlxuXHRcdFx0XHR7IHRoaXMuZGF0ZU5hbWUoIGRhdGVFbnRpdHkgKSB9XG5cdFx0XHRcdHsgdGhpcy5kZXNjcmlwdGlvbiggZGF0ZUVudGl0eSwgc2hvd0Rlc2MgKSB9XG5cdFx0XHRcdHsgdGhpcy52ZW51ZU5hbWUoIHZlbnVlRW50aXR5LCBzaG93VmVudWUgKSB9XG5cdFx0XHRcdHsgdGhpcy5kYXRlU29sZFJlc2VydmVkQ2FwYWNpdHkoIGV2ZW50RW50aXR5LCBkYXRlRW50aXR5ICkgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKCBbXG5cdGlmVmFsaWREYXRlRW50aXR5LFxuXHR3aXRoRXZlbnRWZW51ZUVudGl0eSxcbl0gKSggRWRpdG9yRGF0ZUVudGl0eURldGFpbHMgKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHtcblx0QmlnZ2llQ2FsZW5kYXJEYXRlLFxuXHRDYWxlbmRhckRhdGVSYW5nZSxcblx0d2l0aEVudGl0eVBhcGVyRnJhbWUsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcblx0aWZWYWxpZERhdGVFbnRpdHksXG5cdHdpdGhFdmVudFZlbnVlRW50aXR5LFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZGl0b3ItaG9jcyc7XG5pbXBvcnQgeyBkYXRlVGltZU1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgRWRpdG9yRGF0ZUVudGl0eURldGFpbHMgZnJvbSAnLi9lZGl0b3ItZGF0ZS1lbnRpdHktZGV0YWlscyc7XG5pbXBvcnQgRWRpdG9yRGF0ZUVudGl0eUFjdGlvbnNNZW51XG5cdGZyb20gJy4uL2FjdGlvbnMtbWVudS9lZGl0b3ItZGF0ZS1lbnRpdHktYWN0aW9ucy1tZW51JztcblxuY29uc3QgeyBnZXRCYWNrZ3JvdW5kQ29sb3JDbGFzcywgZ2V0RGF0ZVRpbWVTdGF0dXNUZXh0TGFiZWwgfSA9IGRhdGVUaW1lTW9kZWw7XG5cbi8qKlxuICogRWRpdG9yRGF0ZUdyaWRJdGVtXG4gKiBDb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgYW4gRXZlbnQgRGF0ZSBhcyBhIHZpc3VhbCBibG9jayBpbiBncmlkIHZpZXdzXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0ZSAgICBKU09OIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZVxuICovXG5jbGFzcyBFZGl0b3JEYXRlRW50aXR5R3JpZEl0ZW0gZXh0ZW5kcyBDb21wb25lbnQge1xuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzaG93RGF0ZVxuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGRhdGVcblx0ICovXG5cdGRpc3BsYXlEYXRlID0gKCBkYXRlRW50aXR5LCBzaG93RGF0ZSApID0+IHtcblx0XHRsZXQgc2lkZWJhckNvbG9yQ2xhc3MgPSAnZWUtZWRpdG9yLWRhdGUtY2FsZW5kYXItc2lkZWJhciAnO1xuXHRcdHNpZGViYXJDb2xvckNsYXNzICs9IGdldEJhY2tncm91bmRDb2xvckNsYXNzKCBkYXRlRW50aXR5ICk7XG5cdFx0Y29uc3QgZGF0ZVN0YXR1cyA9IChcblx0XHRcdDxkaXYga2V5PXsgMSB9IGNsYXNzTmFtZT17ICdlZS1zdGF0dXMtdGFnJyB9PlxuXHRcdFx0XHR7IGdldERhdGVUaW1lU3RhdHVzVGV4dExhYmVsKCBkYXRlRW50aXR5ICkgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0XHRzd2l0Y2ggKCBzaG93RGF0ZSApIHtcblx0XHRcdGNhc2UgJ2VuZCcgOlxuXHRcdFx0XHRjb25zdCBlbmRUaW1lID0gZGF0ZUVudGl0eS5lbmQudG9Gb3JtYXQoICdoOm1tIGEnICk7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJpZ2dpZUNhbGVuZGFyRGF0ZVxuXHRcdFx0XHRcdFx0ZGF0ZT17IGRhdGVFbnRpdHkuZW5kIH1cblx0XHRcdFx0XHRcdGh0bWxDbGFzcz17IHNpZGViYXJDb2xvckNsYXNzIH1cblx0XHRcdFx0XHRcdGhlYWRlclRleHQ9eyBfXyggJ2VuZHMnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0Zm9vdGVyVGV4dD17IFsgZW5kVGltZSwgZGF0ZVN0YXR1cyBdIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSAnYm90aCcgOlxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxDYWxlbmRhckRhdGVSYW5nZVxuXHRcdFx0XHRcdFx0c3RhcnREYXRlPXsgZGF0ZUVudGl0eS5zdGFydCB9XG5cdFx0XHRcdFx0XHRlbmREYXRlPXsgZGF0ZUVudGl0eS5lbmQgfVxuXHRcdFx0XHRcdFx0aHRtbENsYXNzPXsgc2lkZWJhckNvbG9yQ2xhc3MgfVxuXHRcdFx0XHRcdFx0aGVhZGVyVGV4dD17IF9fKCAnRXZlbnQgRGF0ZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHRmb290ZXJUZXh0PXsgZGF0ZVN0YXR1cyB9XG5cdFx0XHRcdFx0XHRzaG93VGltZVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdzdGFydCcgOlxuXHRcdFx0ZGVmYXVsdCA6XG5cdFx0XHRcdGNvbnN0IHN0YXJ0VGltZSA9IGRhdGVFbnRpdHkuc3RhcnQudG9Gb3JtYXQoICdoOm1tIGEnICk7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJpZ2dpZUNhbGVuZGFyRGF0ZVxuXHRcdFx0XHRcdFx0ZGF0ZT17IGRhdGVFbnRpdHkuc3RhcnQgfVxuXHRcdFx0XHRcdFx0aHRtbENsYXNzPXsgc2lkZWJhckNvbG9yQ2xhc3MgfVxuXHRcdFx0XHRcdFx0aGVhZGVyVGV4dD17IF9fKCAnc3RhcnRzJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdGZvb3RlclRleHQ9eyBbIHN0YXJ0VGltZSwgZGF0ZVN0YXR1cyBdIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0ZGF0ZUVudGl0eSxcblx0XHRcdGV2ZW50RW50aXR5LFxuXHRcdFx0c2hvd0RhdGUgPSAnc3RhcnQnLFxuXHRcdFx0c2hvd0Rlc2MgPSAnZXhjZXJwdCcsXG5cdFx0XHRzaG93VmVudWUgPSB0cnVlLFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdGNvbnN0IGRhdGVTdHlsZUNsYXNzID0gY2xhc3NOYW1lcyhcblx0XHRcdCdlZS1lZGl0b3ItZGF0ZS1tYWluJyxcblx0XHRcdHtcblx0XHRcdFx0J2VlLWVkaXRvci1kYXRlLXJhbmdlJzogc2hvd0RhdGUgPT09ICdib3RoJyxcblx0XHRcdFx0J2VlLWVkaXRvci1kYXRlLXNpbmdsZSc6IHNob3dEYXRlICE9PSAnYm90aCcsXG5cdFx0XHR9XG5cdFx0KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGRhdGVTdHlsZUNsYXNzIH0+XG5cdFx0XHRcdFx0eyB0aGlzLmRpc3BsYXlEYXRlKCBkYXRlRW50aXR5LCBzaG93RGF0ZSApIH1cblx0XHRcdFx0XHQ8RWRpdG9yRGF0ZUVudGl0eURldGFpbHNcblx0XHRcdFx0XHRcdGV2ZW50RW50aXR5PXsgZXZlbnRFbnRpdHkgfVxuXHRcdFx0XHRcdFx0ZGF0ZUVudGl0eT17IGRhdGVFbnRpdHkgfVxuXHRcdFx0XHRcdFx0c2hvd0Rlc2M9eyBzaG93RGVzYyB9XG5cdFx0XHRcdFx0XHRzaG93VmVudWU9eyBzaG93VmVudWUgfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8RWRpdG9yRGF0ZUVudGl0eUFjdGlvbnNNZW51XG5cdFx0XHRcdFx0ZXZlbnRFbnRpdHk9eyBldmVudEVudGl0eSB9XG5cdFx0XHRcdFx0ZGF0ZUVudGl0eT17IGRhdGVFbnRpdHkgfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0aWZWYWxpZERhdGVFbnRpdHksXG5cdHdpdGhFdmVudFZlbnVlRW50aXR5LFxuXHR3aXRoRW50aXR5UGFwZXJGcmFtZSxcbl0gKSggRWRpdG9yRGF0ZUVudGl0eUdyaWRJdGVtICk7XG4iLCJleHBvcnQge1xuXHRkZWZhdWx0IGFzIEVkaXRvckRhdGVFbnRpdHlEZXRhaWxzLFxufSBmcm9tICcuL2VkaXRvci1kYXRlLWVudGl0eS1kZXRhaWxzJztcbmV4cG9ydCB7XG5cdGRlZmF1bHQgYXMgRWRpdG9yRGF0ZUVudGl0eUdyaWRJdGVtLFxufSBmcm9tICcuL2VkaXRvci1kYXRlLWVudGl0eS1ncmlkLWl0ZW0nO1xuZXhwb3J0IHtcblx0ZGVmYXVsdCBhcyBFZGl0b3JEYXRlRW50aXRpZXNHcmlkVmlldyxcbn0gZnJvbSAnLi9lZGl0b3ItZGF0ZS1lbnRpdGllcy1ncmlkLXZpZXcnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9hY3Rpb24taGFuZGxlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpb25zLW1lbnUnO1xuZXhwb3J0ICogZnJvbSAnLi9lZGl0LWZvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9maWx0ZXItYmFyJztcbmV4cG9ydCAqIGZyb20gJy4vZ3JpZC12aWV3JztcbmV4cG9ydCAqIGZyb20gJy4vbGlzdC12aWV3JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWRpdG9yRGF0ZUVudGl0aWVzTGlzdCB9IGZyb20gJy4vZWRpdG9yLWRhdGUtZW50aXRpZXMtbGlzdCc7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZGF0ZXMtbGlzdC1saXN0LXZpZXdcIjpcImVlLWRhdGVzLWxpc3QtbGlzdC12aWV3XCIsXCJlZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zXCI6XCJlZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zXCIsXCJlZS1lZGl0b3ItZGF0ZS1saXN0LXZpZXctZGl2XCI6XCJlZS1lZGl0b3ItZGF0ZS1saXN0LXZpZXctZGl2XCIsXCJlZS1kYXRlLWxpc3QtaXRlbVwiOlwiZWUtZGF0ZS1saXN0LWl0ZW1cIixcImVlLWluZmluaXR5LXNpZ25cIjpcImVlLWluZmluaXR5LXNpZ25cIixcImRhc2hpY29uc1wiOlwiZGFzaGljb25zXCIsXCJlZS1kYXRlLWxpc3QtaXRlbS1sYWJlbFwiOlwiZWUtZGF0ZS1saXN0LWl0ZW0tbGFiZWxcIixcImVlLWRhdGUtbGlzdC1pdGVtLXZhbHVlXCI6XCJlZS1kYXRlLWxpc3QtaXRlbS12YWx1ZVwiLFwiZWUtZWRpdG9yLWRhdGUtYWN0aW9ucy1tZW51XCI6XCJlZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnVcIixcImVlLWVkaXRvci1kYXRlLWRldGFpbHMtcmVnLXVybC1saW5rXCI6XCJlZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXJlZy11cmwtbGlua1wiLFwiZWUtZHJvcGRvd24tbWVudS1kaXZcIjpcImVlLWRyb3Bkb3duLW1lbnUtZGl2XCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgRWRpdG9yRGF0ZUVudGl0eUxpc3RJdGVtIGZyb20gJy4vZWRpdG9yLWRhdGUtZW50aXR5LWxpc3QtaXRlbSc7XG5pbXBvcnQgJy4vZWRpdG9yLWRhdGUtZW50aXRpZXMtbGlzdC12aWV3LmNzcyc7XG5cbi8qKlxuICogRWRpdG9yRGF0ZXNMaXN0Vmlld1xuICogRGlzcGxheXMgZGF0ZXMgaW4gYSBzdGFuZGFyZCBsaXN0IHRhYmxlIGxpa2Ugdmlld1xuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtBcnJheX0gZW50aXRpZXMgXHRhcnJheSBvZiBKU09OIG9iamVjdHMgZGVmaW5pbmcgdGhlIEV2ZW50IERhdGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge21peGVkfSBvdGhlclByb3BzXG4gKiBAcmV0dXJuIHtDb21wb25lbnR9IFx0XHRcdGxpc3Qgb2YgcmVuZGVyZWQgRXZlbnQgRGF0ZXNcbiAqL1xuY29uc3QgRWRpdG9yRGF0ZUVudGl0aWVzTGlzdFZpZXcgPSAoIHtcblx0ZW50aXRpZXMsXG5cdGh0bWxDbGFzcyxcblx0Li4ub3RoZXJQcm9wc1xufSApID0+IHtcblx0aHRtbENsYXNzID0gY2xhc3NOYW1lcyggaHRtbENsYXNzLCAnZWUtZGF0ZXMtbGlzdC1saXN0LXZpZXcnICk7XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9PlxuXHRcdFx0PGRpdiBrZXk9eyAwIH0gY2xhc3NOYW1lPVwiZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtc1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtXCI+PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHR7IF9fKCAnSUQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdHsgX18oICdOYW1lJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHR7IF9fKCAnU3RhcnQgRGF0ZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ0VuZCBEYXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHR7IF9fKCAnU29sZCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ1Jlc2VydmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHR7IF9fKCAnQ2FwYWNpdHknLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdHsgX18oICdSZWdpc3RyYW50cycsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ0FjdGlvbnMnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0e1xuXHRcdFx0XHRlbnRpdGllcy5tYXAoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oIGRhdGVFbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaXNNb2RlbEVudGl0eU9mTW9kZWwoIGRhdGVFbnRpdHksICdkYXRldGltZScgKSA/IChcblx0XHRcdFx0XHRcdFx0PEVkaXRvckRhdGVFbnRpdHlMaXN0SXRlbVxuXHRcdFx0XHRcdFx0XHRcdGtleT17IGRhdGVFbnRpdHkuaWQgfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGVFbnRpdHk9eyBkYXRlRW50aXR5IH1cblx0XHRcdFx0XHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSA6IG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0PC9kaXY+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFZGl0b3JEYXRlRW50aXRpZXNMaXN0VmlldztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBEYXNoaWNvbiwgVG9vbHRpcCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGRhdGVUaW1lTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgcm91dGVzIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5pbXBvcnQgeyBhZGRRdWVyeUFyZ3MgfSBmcm9tICdAd29yZHByZXNzL3VybCc7XG5pbXBvcnQgeyBpZkNvbmRpdGlvbiwgY29tcG9zZSB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmNvbnN0IHsgQURNSU5fUk9VVEVTLCBBRE1JTl9ST1VURV9BQ1RJT05fREVGQVVMVCwgZ2V0QWRtaW5VcmwgfSA9IHJvdXRlcztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IEVkaXRvckRhdGVFbnRpdHlBY3Rpb25zTWVudVxuXHRmcm9tICcuLi9hY3Rpb25zLW1lbnUvZWRpdG9yLWRhdGUtZW50aXR5LWFjdGlvbnMtbWVudSc7XG5pbXBvcnQgeyB3aXRoRWRpdG9yRXZlbnRFbnRpdHkgfSBmcm9tICcuLi8uLi8uLi9ob2NzJztcblxuY29uc3QgeyBNT0RFTF9OQU1FOiBEQVRFVElNRSwgZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MgfSA9IGRhdGVUaW1lTW9kZWw7XG5cbi8qKlxuICogRWRpdG9yRGF0ZUVudGl0eUxpc3RJdGVtXG4gKiBEaXNwbGF5cyBFdmVudCBEYXRlIGFzIGEgdGFibGUgcm93IHNpbWlsYXIgdG8gZXhpc3RpbmcgZXZlbnRFbnRpdHkgZWRpdG9yIFVJXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0ZSAgICBKU09OIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZVxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgVGhlIGRhdGUgcmVuZGVyZWQgYXMgYSBibG9ja1xuICovXG5jbGFzcyBFZGl0b3JEYXRlRW50aXR5TGlzdEl0ZW0gZXh0ZW5kcyBDb21wb25lbnQge1xuXHQvKipcblx0ICogZ2V0U3RhdHVzQ2xhc3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICAgIEpTT04gb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBEYXRlXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gICAgQ1NTIGNsYXNzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIERhdGUgc3RhdHVzXG5cdCAqL1xuXHRnZXRTdGF0dXNDbGFzcyA9ICggZGF0ZUVudGl0eSApID0+IHtcblx0XHRzd2l0Y2ggKCBkYXRlRW50aXR5LnN0YXR1cyApIHtcblx0XHRcdGNhc2UgJ0RUQScgOlxuXHRcdFx0XHRyZXR1cm4gJ2VlLWRhdGV0aW1lLWFjdGl2ZSc7XG5cdFx0XHRjYXNlICdEVEUnIDpcblx0XHRcdFx0cmV0dXJuICdlZS1kYXRldGltZS1leHBpcmVkJztcblx0XHRcdGNhc2UgJ0RUUycgOlxuXHRcdFx0XHRyZXR1cm4gJ2VlLWRhdGV0aW1lLXNvbGQtb3V0Jztcblx0XHRcdGNhc2UgJ0RUVScgOlxuXHRcdFx0XHRyZXR1cm4gJ2VlLWRhdGV0aW1lLXVwY29taW5nJztcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIGRhdGVTb2xkUmVzZXJ2ZWRDYXBhY2l0eVxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRFbnRpdHkgIFRoZSBldmVudCBvYmplY3QuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5ICAgIFRoZSBkYXRlIG9iamVjdC5cblx0ICogQHJldHVybiB7c3RyaW5nfSAgICBsaW5rIHRvIHJlZ2lzdHJhdGlvbnMgbGlzdCB0YWJsZSBmb3IgZGF0ZXRpbWVcblx0ICovXG5cdGdldERhdGVSZWdpc3RyYXRpb25zTGluayA9ICggZXZlbnRFbnRpdHksIGRhdGVFbnRpdHkgKSA9PiB7XG5cdFx0Y29uc3QgcmVnTGlzdFVybCA9IGFkZFF1ZXJ5QXJncyhcblx0XHRcdGdldEFkbWluVXJsKCBBRE1JTl9ST1VURVMuUkVHSVNUUkFUSU9OUywgQURNSU5fUk9VVEVfQUNUSU9OX0RFRkFVTFQgKSxcblx0XHRcdHtcblx0XHRcdFx0ZXZlbnRfaWQ6IGV2ZW50RW50aXR5LmlkLFxuXHRcdFx0XHRkYXRldGltZV9pZDogZGF0ZUVudGl0eS5pZCxcblx0XHRcdFx0cmV0dXJuOiAnZWRpdCcsXG5cdFx0XHR9XG5cdFx0KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRvb2x0aXBcblx0XHRcdFx0dGV4dD17IF9fKFxuXHRcdFx0XHRcdCd2aWV3IHJlZ2lzdHJhdGlvbnMgZm9yIHRoaXMgZGF0ZS4nLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0KSB9XG5cdFx0XHQ+XG5cdFx0XHRcdDxhXG5cdFx0XHRcdFx0aHJlZj17IHJlZ0xpc3RVcmwgfVxuXHRcdFx0XHRcdGNsYXNzTmFtZT17ICdlZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXJlZy11cmwtbGluaycgfVxuXHRcdFx0XHRcdHRhcmdldD17ICdfYmxhbmsnIH1cblx0XHRcdFx0XHRyZWw9eyAnbm9vcGVuZXIgbm9yZWZmZXJlcicgfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PERhc2hpY29uIGljb249XCJncm91cHNcIiBzaXplPXsgMjQgfSAvPlxuXHRcdFx0XHQ8L2E+XG5cdFx0XHQ8L1Rvb2x0aXA+XG5cdFx0KTtcblx0fTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3QgeyBldmVudEVudGl0eSwgZGF0ZUVudGl0eSB9ID0gdGhpcy5wcm9wcztcblx0XHR0aGlzLmlkID0gYGV2ZW50LWRhdGUtdGlja2V0LWxpc3QtbW9kYWwtJHsgZGF0ZUVudGl0eS5pZCB9YDtcblx0XHRjb25zdCBzdGF0dXNDbGFzcyA9IHRoaXMuZ2V0U3RhdHVzQ2xhc3MoIGRhdGVFbnRpdHkgKTtcblx0XHRjb25zdCBiZ0NsYXNzID0gZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MoIGRhdGVFbnRpdHkgKTtcblx0XHRjb25zdCByZWdMaW1pdCA9IGRhdGVFbnRpdHkucmVnTGltaXQgPT09ICdJTkYnIHx8XG5cdFx0ZGF0ZUVudGl0eS5yZWdMaW1pdCA9PT0gSW5maW5pdHkgP1xuXHRcdFx0KCA8c3BhbiBjbGFzc05hbWU9eyAnZWUtaW5maW5pdHktc2lnbicgfT4maW5maW47PC9zcGFuPiApIDpcblx0XHRcdGRhdGVFbnRpdHkucmVnTGltaXQ7XG5cdFx0Y29uc3QgcmVnTGluayA9IHRoaXMuZ2V0RGF0ZVJlZ2lzdHJhdGlvbnNMaW5rKCBldmVudEVudGl0eSwgZGF0ZUVudGl0eSApO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgaWQ9eyBgZWUtZWRpdG9yLWRhdGUtbGlzdC12aWV3LWRpdi0keyBkYXRlRW50aXR5LmlkIH1gIH1cblx0XHRcdFx0Y2xhc3NOYW1lPXsgYGVlLWVkaXRvci1kYXRlLWxpc3Qtdmlldy1kaXYgJHsgc3RhdHVzQ2xhc3MgfWAgfVxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXNcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGAkeyBiZ0NsYXNzIH0gZWUtZGF0ZS1saXN0LWl0ZW1gIH0+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnTmFtZTonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyBkYXRlRW50aXR5Lm5hbWUgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdJRDonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyBkYXRlRW50aXR5LmlkIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnTmFtZTonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyBkYXRlRW50aXR5Lm5hbWUgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdTdGFydCBEYXRlOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IGRhdGVFbnRpdHkuc3RhcnQudG9Gb3JtYXQoICdkZGQgTU1NIFlZIGg6bW0gYScgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tbGFiZWxcIj5cblx0XHRcdFx0XHRcdFx0eyBfXyggJ0VuZCBEYXRlOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IGRhdGVFbnRpdHkuZW5kLnRvRm9ybWF0KCAnZGRkIE1NTSBZWSBoOm1tIGEnICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdTb2xkOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IGRhdGVFbnRpdHkuc29sZCB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tbGFiZWxcIj5cblx0XHRcdFx0XHRcdFx0eyBfXyggJ1Jlc2VydmVkOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IGRhdGVFbnRpdHkucmVzZXJ2ZWQgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdDYXBhY2l0eTonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyByZWdMaW1pdCB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW0tbGFiZWxcIj5cblx0XHRcdFx0XHRcdFx0eyBfXyggJ1JlZ2lzdHJhbnRzOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS1kYXRlLWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IHJlZ0xpbmsgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGF0ZS1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLWRhdGUtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdBY3Rpb25zOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8RWRpdG9yRGF0ZUVudGl0eUFjdGlvbnNNZW51XG5cdFx0XHRcdFx0XHRcdGV2ZW50RW50aXR5PXsgZXZlbnRFbnRpdHkgfVxuXHRcdFx0XHRcdFx0XHRkYXRlRW50aXR5PXsgZGF0ZUVudGl0eSB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyAnY2xlYXItZmxvYXQnIH0+PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0aWZDb25kaXRpb24oXG5cdFx0KCB7IGRhdGVFbnRpdHkgfSApID0+IGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBkYXRlRW50aXR5LCBEQVRFVElNRSApXG5cdCksXG5cdHdpdGhFZGl0b3JFdmVudEVudGl0eSxcbl0gKSggRWRpdG9yRGF0ZUVudGl0eUxpc3RJdGVtICk7XG5cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRWRpdG9yRGF0ZUVudGl0eUxpc3RJdGVtIH0gZnJvbSAnLi9lZGl0b3ItZGF0ZS1lbnRpdHktbGlzdC1pdGVtJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWRpdG9yRGF0ZUVudGl0aWVzTGlzdFZpZXcgfSBmcm9tICcuL2VkaXRvci1kYXRlLWVudGl0aWVzLWxpc3Qtdmlldyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL2VkaXRvci1kYXRlJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuXG5pbXBvcnQgeyBFdmVudERhdGVzQW5kVGlja2V0c01ldGFib3ggfSBmcm9tICcuLyc7XG5cbmNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnbm9ybWFsLXNvcnRhYmxlcycgKTtcbmNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XG5lZGl0b3IuY2xhc3NOYW1lID0gJ2VlLWVkaXRvci1kaXYnO1xuY29udGFpbmVyLnByZXBlbmQoIGVkaXRvciApO1xuY29uc3QgZXZlbnRJZCA9IHdpbmRvdy5lZUVkaXRvckV2ZW50SWQ7XG5cbmlmICggZXZlbnRJZCApIHtcblx0cmVuZGVyKFxuXHRcdDxFdmVudERhdGVzQW5kVGlja2V0c01ldGFib3ggZXZlbnRJZD17IGV2ZW50SWQgfSAvPixcblx0XHRlZGl0b3Jcblx0KTtcbn1cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aEVkaXRvckRhdGVFbnRpdGllcyB9IGZyb20gJy4vd2l0aC1lZGl0b3ItZGF0ZS1lbnRpdGllcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhFZGl0b3JEYXRlVGlja2V0RW50aXRpZXMgfSBmcm9tICcuL3dpdGgtZWRpdG9yLWRhdGUtdGlja2V0LWVudGl0aWVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aEVkaXRvckV2ZW50RW50aXR5IH0gZnJvbSAnLi93aXRoLWVkaXRvci1ldmVudC1lbnRpdHknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoRWRpdG9yVGlja2V0RGF0ZUVudGl0aWVzIH0gZnJvbSAnLi93aXRoLWVkaXRvci10aWNrZXQtZGF0ZS1lbnRpdGllcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhFZGl0b3JUaWNrZXRFbnRpdGllcyB9IGZyb20gJy4vd2l0aC1lZGl0b3ItdGlja2V0LWVudGl0aWVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aFByaWNlVHlwZUVudGl0aWVzIH0gZnJvbSAnLi93aXRoLXByaWNlLXR5cGUtZW50aXRpZXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoVGlja2V0UHJpY2VFbnRpdGllcyB9IGZyb20gJy4vd2l0aC10aWNrZXQtcHJpY2UtZW50aXRpZXMnO1xuIiwiaW1wb3J0IHsgd2l0aFNlbGVjdCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KCAoIHNlbGVjdCApID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGF0ZUVudGl0aWVzOiBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnIClcblx0XHRcdFx0LmdldERhdGV0aW1lcygpLFxuXHRcdH07XG5cdH0gKSxcblx0J3dpdGhFZGl0b3JEYXRlRW50aXRpZXMnXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuY29uc3QgREVGQVVMVF9PQkpFQ1QgPSB7XG5cdHRpY2tldEVudGl0aWVzOiBbXSxcbn07XG5cbi8qKlxuICogQSBIb2MgZXhwb3NpbmcgdGlja2V0IGVudGl0aWVzIHJlbGF0ZWQgdG8gdGhlIHByb3ZpZGVkIERhdGVUaW1lRW50aXR5LlxuICpcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBBIGhpZ2hlciBvcmRlciBjb21wb25lbnQuXG4gKi9cbmNvbnN0IHdpdGhFZGl0b3JEYXRlVGlja2V0RW50aXRpZXMgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0d2l0aFNlbGVjdChcblx0XHQoIHNlbGVjdCwgeyBkYXRlRW50aXR5IH0gKSA9PiB7XG5cdFx0XHRjb25zdCB7IGdldFJlbGF0ZWRFbnRpdGllcyB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0aWYgKCBpc01vZGVsRW50aXR5T2ZNb2RlbCggZGF0ZUVudGl0eSwgJ2RhdGV0aW1lJyApICkge1xuXHRcdFx0XHRjb25zdCB0aWNrZXRFbnRpdGllcyA9IGdldFJlbGF0ZWRFbnRpdGllcyhcblx0XHRcdFx0XHRkYXRlRW50aXR5LFxuXHRcdFx0XHRcdCd0aWNrZXQnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiB7IHRpY2tldEVudGl0aWVzIH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0fVxuXHQpLFxuXHQnd2l0aEVkaXRvckRhdGVUaWNrZXRFbnRpdGllcydcbik7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhFZGl0b3JEYXRlVGlja2V0RW50aXRpZXM7XG4iLCJpbXBvcnQgeyB3aXRoU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbmNvbnN0IERFRkFVTFRfT0JKRUNUID0ge1xuXHRldmVudEVudGl0eTogbnVsbCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KCAoIHNlbGVjdCwgeyBldmVudEVudGl0eSB9ICkgPT4ge1xuXHRcdC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBldmVudCBlbnRpdHksIGp1c3QgcGFzcyBpdCB0aHJvdWdoXG5cdFx0aWYgKCBpc01vZGVsRW50aXR5T2ZNb2RlbCggZXZlbnRFbnRpdHksICdldmVudCcgKSApIHtcblx0XHRcdHJldHVybiB7IGV2ZW50RW50aXR5IH07XG5cdFx0fVxuXHRcdGNvbnN0IGV2ZW50cyA9IHNlbGVjdCggJ2V2ZW50ZXNwcmVzc28vY29yZScgKS5nZXRFdmVudHMoKTtcblx0XHRyZXR1cm4gZXZlbnRzLmxlbmd0aCA+IDAgP1xuXHRcdFx0e1xuXHRcdFx0XHRldmVudEVudGl0eTogZXZlbnRzLnNsaWNlKCAtMSApLnBvcCgpLFxuXHRcdFx0fSA6XG5cdFx0XHRERUZBVUxUX09CSkVDVDtcblx0fSApLFxuXHQnd2l0aEVkaXRvckV2ZW50RW50aXR5J1xuKTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB3aXRoU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmNvbnN0IERFRkFVTFRfT0JKRUNUID0ge1xuXHRkYXRlRW50aXRpZXM6IFtdLFxufTtcblxuLyoqXG4gKiB3aXRoRWRpdG9yVGlja2V0RGF0ZUVudGl0aWVzXG4gKiByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmc6XG4gKiAgICBkYXRlRW50aXRpZXMgLSBhbiBhcnJheSBvZiBkYXRldGltZSBlbnRpdGllcyBmb3IgdGhlIHN1cHBsaWVkIHRpY2tldFxuICpcbiAqIEBmdW5jdGlvblxuICovXG5jb25zdCB3aXRoRWRpdG9yVGlja2V0RGF0ZUVudGl0aWVzID0gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdHdpdGhTZWxlY3QoXG5cdFx0KCBzZWxlY3QsIHsgdGlja2V0RW50aXR5IH0gKSA9PiB7XG5cdFx0XHRjb25zdCB7IGdldFJlbGF0ZWRFbnRpdGllcyB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0aWYgKCBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApICkge1xuXHRcdFx0XHRjb25zdCBkYXRlRW50aXRpZXMgPSBnZXRSZWxhdGVkRW50aXRpZXMoIHRpY2tldEVudGl0eSwgJ2RhdGV0aW1lJyApO1xuXHRcdFx0XHRyZXR1cm4geyBkYXRlRW50aXRpZXMgfTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBERUZBVUxUX09CSkVDVDtcblx0XHR9XG5cdCksXG5cdCd3aXRoRWRpdG9yVGlja2V0RGF0ZUVudGl0aWVzJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aEVkaXRvclRpY2tldERhdGVFbnRpdGllcztcbiIsImltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0d2l0aFNlbGVjdCggKCBzZWxlY3QgKSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpY2tldEVudGl0aWVzOiBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnICkuZ2V0VGlja2V0cygpLFxuXHRcdH07XG5cdH0gKSxcblx0J3dpdGhFZGl0b3JUaWNrZXRFbnRpdGllcydcbik7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgd2l0aFNlbGVjdCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbi8qKlxuICogd2l0aFByaWNlVHlwZUVudGl0aWVzXG4gKiByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmc6XG4gKiAgICBwcmljZVR5cGVFbnRpdGllcyAtIGFuIGFycmF5IG9mIHByaWNlX3R5cGUgZW50aXRpZXNcbiAqICAgIHByaWNlVHlwZUVudGl0aWVzTG9hZGVkIC0gYm9vbGVhbiB0cnVlIGlmIGxvYWRpbmcgaXMgY29tcGxldGVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdHdpdGhTZWxlY3QoXG5cdFx0KCBzZWxlY3QgKSA9PiB7XG5cdFx0XHRjb25zdCB7IGdldEVudGl0aWVzIH0gPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2xpc3RzJyApO1xuXHRcdFx0Y29uc3QgcHJpY2VUeXBlRW50aXRpZXMgPSBnZXRFbnRpdGllcyggJ3ByaWNlX3R5cGUnICk7XG5cdFx0XHRjb25zdCB7IGhhc0ZpbmlzaGVkUmVzb2x1dGlvbiB9ID0gc2VsZWN0KCAnY29yZS9kYXRhJyApO1xuXHRcdFx0Y29uc3QgcHJpY2VUeXBlRW50aXRpZXNMb2FkZWQgPSBoYXNGaW5pc2hlZFJlc29sdXRpb24oXG5cdFx0XHRcdCdldmVudGVzcHJlc3NvL2xpc3RzJyxcblx0XHRcdFx0J2dldEVudGl0aWVzJyxcblx0XHRcdFx0WyAncHJpY2VfdHlwZScgXVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB7IHByaWNlVHlwZUVudGl0aWVzLCBwcmljZVR5cGVFbnRpdGllc0xvYWRlZCB9O1xuXHRcdH1cblx0KSxcblx0J3dpdGhQcmljZVR5cGVFbnRpdGllcydcbik7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3aXRoU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmNvbnN0IEVNUFRZX09CSkVDVCA9IHtcblx0bm9CYXNlUHJpY2U6IHRydWUsXG5cdHByaWNlRW50aXRpZXNMb2FkZWQ6IGZhbHNlLFxuXHRwcmljZUVudGl0aWVzOiBbXSxcbn07XG5cbi8qKlxuICogd2l0aFRpY2tldFByaWNlRW50aXRpZXNcbiAqIHJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZzpcbiAqICAgIHByaWNlRW50aXRpZXMgLSBhbiBhcnJheSBvZiBwcmljZSBlbnRpdGllcyBmb3IgdGhlIHN1cHBsaWVkIHRpY2tldFxuICogICAgcHJpY2VFbnRpdGllc0xvYWRlZCAtIGJvb2xlYW4gdHJ1ZSBpZiBsb2FkaW5nIGlzIGNvbXBsZXRlXG4gKiAgICBub0Jhc2VQcmljZSAtIGJvb2xlYW4gdHJ1ZSBpZiBsb2FkaW5nIGlzIGNvbXBsZXRlIGJ1dCBwcmljZUVudGl0aWVzIGlzIGVtcHR5XG4gKlxuICogQGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KFxuXHRcdCggc2VsZWN0LCB7IHRpY2tldEVudGl0eSB9ICkgPT4ge1xuXHRcdFx0Y29uc3QgeyBnZXRSZWxhdGVkRW50aXRpZXMgfSA9IHNlbGVjdCggJ2V2ZW50ZXNwcmVzc28vY29yZScgKTtcblx0XHRcdGNvbnN0IHsgaGFzRmluaXNoZWRSZXNvbHV0aW9uIH0gPSBzZWxlY3QoICdjb3JlL2RhdGEnICk7XG5cdFx0XHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksICd0aWNrZXQnICkgKSB7XG5cdFx0XHRcdGNvbnN0IHByaWNlRW50aXRpZXMgPSBnZXRSZWxhdGVkRW50aXRpZXMoIHRpY2tldEVudGl0eSwgJ3ByaWNlJyApO1xuXHRcdFx0XHRjb25zdCBwcmljZUVudGl0aWVzTG9hZGVkID0gaGFzRmluaXNoZWRSZXNvbHV0aW9uKFxuXHRcdFx0XHRcdCdldmVudGVzcHJlc3NvL2NvcmUnLFxuXHRcdFx0XHRcdCdnZXRSZWxhdGVkRW50aXRpZXMnLFxuXHRcdFx0XHRcdFsgdGlja2V0RW50aXR5LCAncHJpY2UnIF1cblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKCBwcmljZUVudGl0aWVzTG9hZGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRub0Jhc2VQcmljZTogaXNFbXB0eSggcHJpY2VFbnRpdGllcyApLFxuXHRcdFx0XHRcdFx0cHJpY2VFbnRpdGllc0xvYWRlZCxcblx0XHRcdFx0XHRcdHByaWNlRW50aXRpZXMsXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIEVNUFRZX09CSkVDVDtcblx0XHR9XG5cdCksXG5cdCd3aXRoVGlja2V0UHJpY2VFbnRpdGllcydcbik7XG4iLCJleHBvcnQgKiBmcm9tICcuL2RhdGVzLWFuZC10aWNrZXRzLW1ldGFib3gnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlcy1hbmQtdGltZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9ob2NzJztcbmV4cG9ydCAqIGZyb20gJy4vdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXInO1xuZXhwb3J0ICogZnJvbSAnLi90aWNrZXRzJztcblxuaW1wb3J0ICcuL2V2ZW50LWVkaXRvcic7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbmNvbnN0IEVkaXRvckluaXRpYWxpemVkQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoIGZhbHNlICk7XG5jb25zdCB7IFByb3ZpZGVyLCBDb25zdW1lciB9ID0gRWRpdG9ySW5pdGlhbGl6ZWRDb250ZXh0O1xuXG5leHBvcnQge1xuXHRFZGl0b3JJbml0aWFsaXplZENvbnRleHQsXG5cdFByb3ZpZGVyLFxuXHRDb25zdW1lcixcbn07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIHVzZUVkaXRvckluaXRpYWxpemVkIH0gZnJvbSAnLi91c2UtZWRpdG9yLWluaXRpYWxpemVkJztcbmV4cG9ydCB7IFByb3ZpZGVyLCBDb25zdW1lciB9IGZyb20gJy4vZWRpdG9yLWluaXRpYWxpemVkLWNvbnRleHQnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgRWRpdG9ySW5pdGlhbGl6ZWRDb250ZXh0IH0gZnJvbSAnLi9lZGl0b3ItaW5pdGlhbGl6ZWQtY29udGV4dCc7XG5cbmNvbnN0IHVzZUVkaXRvckluaXRpYWxpemVkID0gKCkgPT4gdXNlQ29udGV4dCggRWRpdG9ySW5pdGlhbGl6ZWRDb250ZXh0ICk7XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUVkaXRvckluaXRpYWxpemVkO1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgd2l0aEV2ZW50VmVudWVFbnRpdHkgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZGl0b3ItaG9jcyc7XG5cbmltcG9ydCB1c2VFZGl0b3JJbml0aWFsaXphdGlvbiBmcm9tICcuL3VzZS1lZGl0b3ItaW5pdGlhbGl6YXRpb24nO1xuaW1wb3J0IHdpdGhFdmVudEVudGl0eSBmcm9tICcuL3dpdGgtZXZlbnQtZW50aXR5JztcbmltcG9ydCB3aXRoRXZlbnREYXRlRW50aXRpZXMgZnJvbSAnLi93aXRoLWV2ZW50LWRhdGUtZW50aXRpZXMnO1xuaW1wb3J0IHdpdGhUaWNrZXRFbnRpdGllc0ZvckFsbERhdGVFbnRpdGllcyBmcm9tICcuL3dpdGgtdGlja2V0LWVudGl0aWVzLWZvci1hbGwtZGF0ZS1lbnRpdGllcyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJy4vY29udGV4dCc7XG5cbmNvbnN0IEVkaXRvckluaXRpYWxpemF0aW9uID0gKCB7XG5cdGV2ZW50RW50aXR5TG9hZGVkLFxuXHRkYXRlRW50aXRpZXNMb2FkZWQsXG5cdHRpY2tldEVudGl0aWVzTG9hZGVkLFxuXHRlZGl0b3JJbml0aWFsaXplZCxcblx0c2V0SW5pdGlhbGl6ZWQsXG5cdGNoaWxkcmVuLFxufSApID0+IHtcblx0dXNlRWZmZWN0KCAoKSA9PiB7XG5cdFx0aWYgKCBldmVudEVudGl0eUxvYWRlZCAmJiBkYXRlRW50aXRpZXNMb2FkZWQgJiYgdGlja2V0RW50aXRpZXNMb2FkZWQgKSB7XG5cdFx0XHRzZXRJbml0aWFsaXplZCggdHJ1ZSApO1xuXHRcdH1cblx0fSwgWyBldmVudEVudGl0eUxvYWRlZCwgZGF0ZUVudGl0aWVzTG9hZGVkLCB0aWNrZXRFbnRpdGllc0xvYWRlZCBdICk7XG5cdHJldHVybiA8UHJvdmlkZXIgdmFsdWU9eyBlZGl0b3JJbml0aWFsaXplZCB9PlxuXHRcdHsgY2hpbGRyZW4gfVxuXHQ8L1Byb3ZpZGVyPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0KCBXcmFwcGVkQ29tcG9uZW50ICkgPT4gKCBwcm9wcyApID0+IHtcblx0XHRjb25zdCBbIGVkaXRvckluaXRpYWxpemVkLCBzZXRJbml0aWFsaXplZCBdID0gdXNlRWRpdG9ySW5pdGlhbGl6YXRpb24oKTtcblx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnRcblx0XHRcdGVkaXRvckluaXRpYWxpemVkPXsgZWRpdG9ySW5pdGlhbGl6ZWQgfVxuXHRcdFx0c2V0SW5pdGlhbGl6ZWQ9eyBzZXRJbml0aWFsaXplZCB9XG5cdFx0XHR7IC4uLnByb3BzIH1cblx0XHQvPjtcblx0fSxcblx0d2l0aEV2ZW50RW50aXR5LFxuXHR3aXRoRXZlbnRWZW51ZUVudGl0eSxcblx0d2l0aEV2ZW50RGF0ZUVudGl0aWVzLFxuXHR3aXRoVGlja2V0RW50aXRpZXNGb3JBbGxEYXRlRW50aXRpZXMsXG5dICkoIEVkaXRvckluaXRpYWxpemF0aW9uICk7XG4iLCJleHBvcnQge1xuXHR1c2VFZGl0b3JJbml0aWFsaXplZCxcblx0Q29uc3VtZXIsXG59IGZyb20gJy4vY29udGV4dCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhFdmVudEVudGl0eSB9IGZyb20gJy4vd2l0aC1ldmVudC1lbnRpdHknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoRXZlbnREYXRlRW50aXRpZXMgfSBmcm9tICcuL3dpdGgtZXZlbnQtZGF0ZS1lbnRpdGllcyc7XG5leHBvcnQge1xuXHRkZWZhdWx0IGFzIHdpdGhUaWNrZXRFbnRpdGllc0ZvckFsbERhdGVFbnRpdGllcyxcbn0gZnJvbSAnLi93aXRoLXRpY2tldC1lbnRpdGllcy1mb3ItYWxsLWRhdGUtZW50aXRpZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgRWRpdG9ySW5pdGlhbGl6YXRpb24gZnJvbSAnLi9lZGl0b3ItaW5pdGlhbGl6YXRpb24nO1xuXG5jb25zdCB3aXRoRWRpdG9ySW5pdGlhbGl6YXRpb24gPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0KCBXcmFwcGVkQ29tcG9uZW50ICkgPT4gKFxuXHRcdHsgZXZlbnRJZCB9XG5cdCkgPT4ge1xuXHRcdHJldHVybiA8RWRpdG9ySW5pdGlhbGl6YXRpb24gZXZlbnRJZD17IGV2ZW50SWQgfT5cblx0XHRcdDxXcmFwcGVkQ29tcG9uZW50IGV2ZW50SWQ9eyBldmVudElkIH0gLz5cblx0XHQ8L0VkaXRvckluaXRpYWxpemF0aW9uPjtcblx0fSxcblx0J3dpdGhFZGl0b3JJbml0aWFsaXphdGlvbidcbik7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhFZGl0b3JJbml0aWFsaXphdGlvbjtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcblxuY29uc3QgdXNlRWRpdG9ySW5pdGlhbGl6YXRpb24gPSAoKSA9PiB7XG5cdGNvbnN0IFsgZWRpdG9ySW5pdGlhbGl6ZWQsIHNldEVkaXRvckluaXRpYWxpemVkIF0gPSB1c2VTdGF0ZSggZmFsc2UgKTtcblx0cmV0dXJuIFsgZWRpdG9ySW5pdGlhbGl6ZWQsIHNldEVkaXRvckluaXRpYWxpemVkIF07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VFZGl0b3JJbml0aWFsaXphdGlvbjtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB3aXRoU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmNvbnN0IERFRkFVTFRfT0JKRUNUID0ge1xuXHRkYXRlRW50aXRpZXM6IFtdLFxuXHRkYXRlRW50aXRpZXNMb2FkZWQ6IGZhbHNlLFxufTtcblxuLyoqXG4gKiB3aXRoRXZlbnREYXRlRW50aXRpZXNcbiAqIHJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZzpcbiAqICAgIGRhdGVFbnRpdGllcyAtIGFuIGFycmF5IG9mIGRhdGV0aW1lIGVudGl0aWVzIGZvciB0aGUgc3VwcGxpZWQgZXZlbnRcbiAqICAgIGRhdGVFbnRpdGllc0xvYWRlZCAtIGJvb2xlYW4gdHJ1ZSBpZiBsb2FkaW5nIGlzIGNvbXBsZXRlXG4gKlxuICogQGZ1bmN0aW9uXG4gKi9cbmNvbnN0IHdpdGhFdmVudERhdGVFbnRpdGllcyA9IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KFxuXHRcdCggc2VsZWN0LCB7IGV2ZW50RW50aXR5LCBldmVudEVudGl0eUxvYWRlZCwgZWRpdG9ySW5pdGlhbGl6ZWQgfSApID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0ISBlZGl0b3JJbml0aWFsaXplZCAmJlxuXHRcdFx0XHRldmVudEVudGl0eUxvYWRlZCAmJlxuXHRcdFx0XHRpc01vZGVsRW50aXR5T2ZNb2RlbCggZXZlbnRFbnRpdHksICdldmVudCcgKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IHsgZ2V0UmVsYXRlZEVudGl0aWVzIH0gPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0XHRcdGNvbnN0IHsgaGFzRmluaXNoZWRSZXNvbHV0aW9uIH0gPSBzZWxlY3QoICdjb3JlL2RhdGEnICk7XG5cdFx0XHRcdGNvbnN0IGRhdGVFbnRpdGllcyA9IGdldFJlbGF0ZWRFbnRpdGllcyggZXZlbnRFbnRpdHksICdkYXRldGltZScgKTtcblx0XHRcdFx0Y29uc3QgZGF0ZUVudGl0aWVzTG9hZGVkID0gaGFzRmluaXNoZWRSZXNvbHV0aW9uKFxuXHRcdFx0XHRcdCdldmVudGVzcHJlc3NvL2NvcmUnLFxuXHRcdFx0XHRcdCdnZXRSZWxhdGVkRW50aXRpZXMnLFxuXHRcdFx0XHRcdFsgZXZlbnRFbnRpdHksICdkYXRldGltZScgXVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoIGRhdGVFbnRpdGllc0xvYWRlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBkYXRlRW50aXRpZXMsIGRhdGVFbnRpdGllc0xvYWRlZCB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0fVxuXHQpLFxuXHQnd2l0aEV2ZW50RGF0ZUVudGl0aWVzJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aEV2ZW50RGF0ZUVudGl0aWVzO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcblxuY29uc3QgRU1QVFlfT0JKRUNUID0ge307XG5cbi8qKlxuICogd2l0aEV2ZW50RW50aXR5XG4gKiByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmc6XG4gKiAgICBldmVudCAtIHRoZSBldmVudCBlbnRpdHkgZm9yIHRoZSBzdXBwbGllZCBldmVudElkXG4gKiAgICBldmVudExvYWRlZCAtIGJvb2xlYW4gdHJ1ZSBpZiBsb2FkaW5nIGlzIGNvbXBsZXRlXG4gKlxuICogQGZ1bmN0aW9uXG4gKi9cbmNvbnN0IHdpdGhFdmVudEVudGl0eSA9IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KFxuXHRcdCggc2VsZWN0LCB7IGV2ZW50SWQsIGVkaXRvckluaXRpYWxpemVkIH0gKSA9PiB7XG5cdFx0XHRpZiAoIGV2ZW50SWQgJiYgISBlZGl0b3JJbml0aWFsaXplZCApIHtcblx0XHRcdFx0Y29uc3QgeyBnZXRFdmVudEJ5SWQgfSA9IHNlbGVjdCggJ2V2ZW50ZXNwcmVzc28vY29yZScgKTtcblx0XHRcdFx0Y29uc3QgeyBoYXNGaW5pc2hlZFJlc29sdXRpb24gfSA9IHNlbGVjdCggJ2NvcmUvZGF0YScgKTtcblx0XHRcdFx0Y29uc3QgZXZlbnRFbnRpdHkgPSBnZXRFdmVudEJ5SWQoIGV2ZW50SWQgKTtcblx0XHRcdFx0Y29uc3QgZXZlbnRFbnRpdHlMb2FkZWQgPSBoYXNGaW5pc2hlZFJlc29sdXRpb24oXG5cdFx0XHRcdFx0J2V2ZW50ZXNwcmVzc28vY29yZScsXG5cdFx0XHRcdFx0J2dldEV2ZW50QnlJZCcsXG5cdFx0XHRcdFx0WyBldmVudElkIF1cblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGV2ZW50RW50aXR5TG9hZGVkICYmXG5cdFx0XHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoIGV2ZW50RW50aXR5LCAnZXZlbnQnIClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgZXZlbnRFbnRpdHksIGV2ZW50RW50aXR5TG9hZGVkIH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBFTVBUWV9PQkpFQ1Q7XG5cdFx0fVxuXHQpLFxuXHQnd2l0aEV2ZW50RW50aXR5J1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aEV2ZW50RW50aXR5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuXG5jb25zdCBERUZBVUxUX09CSkVDVCA9IHtcblx0dGlja2V0RW50aXRpZXM6IFtdLFxuXHR0aWNrZXRFbnRpdGllc0xvYWRlZDogZmFsc2UsXG59O1xuXG4vKipcbiAqIHdpdGhUaWNrZXRFbnRpdGllc1JlbGF0ZWRUb0FsbERhdGVFbnRpdGllc1xuICogcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9sbG93aW5nOlxuICogXHR0aWNrZXRFbnRpdGllcyAtIGFuIGFycmF5IG9mIHRpY2tldCBlbnRpdGllcyBmb3IgdGhlIHN1cHBsaWVkIGV2ZW50IGRhdGVcbiAqIFx0dGlja2V0RW50aXRpZXNMb2FkZWQgLSBib29sZWFuIHRydWUgaWYgbG9hZGluZyBpcyBjb21wbGV0ZVxuICpcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5jb25zdCB3aXRoVGlja2V0RW50aXRpZXNGb3JBbGxEYXRlRW50aXRpZXMgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0d2l0aFNlbGVjdChcblx0XHQoIHNlbGVjdCwgeyBkYXRlRW50aXRpZXMsIGRhdGVFbnRpdGllc0xvYWRlZCwgZWRpdG9ySW5pdGlhbGl6ZWQgfSApID0+IHtcblx0XHRcdGlmICggZGF0ZUVudGl0aWVzTG9hZGVkICYmICEgZWRpdG9ySW5pdGlhbGl6ZWQgKSB7XG5cdFx0XHRcdGNvbnN0IHsgZ2V0UmVsYXRlZEVudGl0aWVzRm9ySWRzIH0gPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0XHRcdGNvbnN0IHsgaGFzRmluaXNoZWRSZXNvbHV0aW9uIH0gPSBzZWxlY3QoICdjb3JlL2RhdGEnICk7XG5cdFx0XHRcdGNvbnN0IGRhdGVJZHMgPSBkYXRlRW50aXRpZXMubWFwKFxuXHRcdFx0XHRcdCggZGF0ZUVudGl0eSApID0+IGRhdGVFbnRpdHkuaWRcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgdGlja2V0RW50aXRpZXMgPSBnZXRSZWxhdGVkRW50aXRpZXNGb3JJZHMoXG5cdFx0XHRcdFx0J2RhdGV0aW1lJyxcblx0XHRcdFx0XHRkYXRlSWRzLFxuXHRcdFx0XHRcdCd0aWNrZXQnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IHRpY2tldEVudGl0aWVzTG9hZGVkID0gaGFzRmluaXNoZWRSZXNvbHV0aW9uKFxuXHRcdFx0XHRcdCdldmVudGVzcHJlc3NvL2NvcmUnLFxuXHRcdFx0XHRcdCdnZXRSZWxhdGVkRW50aXRpZXNGb3JJZHMnLFxuXHRcdFx0XHRcdFsgJ2RhdGV0aW1lJywgZGF0ZUlkcywgJ3RpY2tldCcgXVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoIHRpY2tldEVudGl0aWVzTG9hZGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB7IHRpY2tldEVudGl0aWVzLCB0aWNrZXRFbnRpdGllc0xvYWRlZCB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0fVxuXHQpLFxuXHQnd2l0aFRpY2tldEVudGl0aWVzRm9yQWxsRGF0ZUVudGl0aWVzJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFRpY2tldEVudGl0aWVzRm9yQWxsRGF0ZUVudGl0aWVzO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VBc3NpZ25tZW50c0NhbGN1bGF0b3IgfSBmcm9tICcuL3VzZS1hc3NpZ25tZW50cy1jYWxjdWxhdG9yJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyByZWR1Y2UsIGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuXG4vLyBAdG9kbywgd2hlbiB0aGUgd3AuZGF0YS51c2VTZWxlY3QgaG9vayBpcyBhdmFpbGFibGUsIHdlIGNhbiB1dGlsaXplIHRoYXQgaW5cbi8vIHRoaXMgY3VzdG9tIGhvb2sgYW5kIHRoZW4gd2UnbGwgYmUgYWJsZSB0byByZW1vdmUgdGhlIHdpdGhTZWxlY3QgaG9jIHVzYWdlXG4vLyBpbiB0aGUgY29tcG9zZWQgYFRpY2tldEFzc2lnbm1lbnRzTWFuYWdlck1vZGFsYCBjb21wb25lbnQuXG5cbi8qKlxuICogVGVtcG9yYXJ5IGRlc2NyaXB0aW9uIGZvciBob29rIHRvIGJlIGZsZXNoZWQgb3V0LlxuICpcbiAqIE5vdGUgdGhlIGZvbGxvd2luZyBhc3N1bXB0aW9ucyBhYm91dCB0aGlzIGhvb2s6XG4gKiAtIGluY29taW5nIGFzc2lnbmVkQ291bnRzIGhhcyBhbGwgdGlja2V0SWRzIGFuZCBkYXRlSWRzIGFjY291bnRlZCBmb3IgaW4gdGhlXG4gKiBjb2xsZWN0aW9uLiAgVGhhdCBtZWFucyBhc3NpZ25lZFN0YXRlIHNob3VsZCBuZXZlciBoYXZlIGEgZGF0ZUlkIG9yIGEgdGlja2V0SWRcbiAqIHRoYXQgZG9lc24ndCBleGlzdCBpbiB0aGUgYXNzaWduZWRDb3VudHMgY29sbGVjdGlvbi5cbiAqXG4gKlxuICpcbiAqIEBwYXJhbSB7QmFzZUVudGl0eVtdfSBkYXRlRW50aXRpZXMgYW4gYXJyYXkgb2YgQmFzZUVudGl0eSBpbnN0YW5jZXMgZm9yIHRoZVxuICogZGF0ZXRpbWUgbW9kZWwuXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHlbXX0gdGlja2V0RW50aXRpZXMgYW4gYXJyYXkgb2YgQmFzZUVudGl0eSBpbnN0YW5jZXMgZm9yIHRoZVxuICogdGlja2V0IG1vZGVsLlxuICogQHBhcmFtIHtPYmplY3R9IGFzc2lnbmVkQ291bnRzICBBbiBvYmplY3Qgd2l0aCB0d28ga2V5cyAoIGRhdGVzLCB0aWNrZXRzIClcbiAqIHRoYXQgY29udGFpbiBtYXBzIG9mIGlkcyB0byBjb3VudHMgb2YgaG93IG1hbnkgYXNzaWdubWVudHMgdGhhdCBpZCBoYXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYXNzaWduZWRTdGF0ZSAgQW4gb2JqZWN0IHdpdGggdHdvIGtleXMgKCBhc3NpZ25lZCwgcmVtb3ZlZClcbiAqIHRoYXQgY29udGFpbiBtYXBzIG9mIGRhdGUgaWRzIHRvIGFycmF5IG9mIHRpY2tldCBpZHMgYmVpbmcgY2hhbmdlZCBpbiB0aGVcbiAqIHNlc3Npb24uXG4gKiBAcmV0dXJuIHtbXX0gQSB0dXBsZSBsaWtlIGNvbnN0cnVjdGlvbiBvZiB0aHJlZSB2YWx1ZXM6XG4gKiAtIGhhc01pc3NpbmdBc3NpZ25tZW50cyB7Ym9vbH0gV2hldGhlciBvciBub3QgYW55IHRpY2tldHMgb3IgZGF0ZXMgaW4gdGhlXG4gKiBzZXNzaW9uIGhhdmUgbWlzc2luZyBhc3NpZ25tZW50c1xuICogLSBub0Fzc2lnbm1lbnRzTWVzc2FnZSB7c3RyaW5nfSBBIGhlbHBmdWwgY29udGV4dCBhd2FyZSBlcnJvciBtZXNzYWdlIHRvXG4gKiBzaG93IHRvIHRoZSB1c2VyIHdoZW4gdGhlcmUgaXMgYW4gZW50aXR5IHdpdGggbm8gYXNzaWdubWVudHNcbiAqIC0gdXBkYXRlZEFzc2lnbm1lbnRDb3VudHMge09iamVjdH0gVGhlIHNhbWUgYXMgYXNzaWduZWRDb3VudHMgZXhjZXB0IG1vZGlmaWVkXG4gKiB0byBhY2NvdW50IGZvciBjaGFuZ2VzIGluIGFzc2lnbmVkU3RhdGUuXG4gKiAtXG4gKi9cbmNvbnN0IHVzZUFzc2lnbm1lbnRzQ2FsY3VsYXRvciA9IChcblx0ZGF0ZUVudGl0aWVzLFxuXHR0aWNrZXRFbnRpdGllcyxcblx0YXNzaWduZWRDb3VudHMsXG5cdGFzc2lnbmVkU3RhdGUsXG4pID0+IHtcblx0Y29uc3QgZ2V0TWVzc2FnZSA9IHVzZUNhbGxiYWNrKCAoIG1pc3NpbmdBc3NpZ25tZW50Q291bnRzICkgPT4ge1xuXHRcdGxldCBtZXNzYWdlO1xuXHRcdGNvbnN0IHRpY2tldHNNaXNzaW5nID0gbWlzc2luZ0Fzc2lnbm1lbnRDb3VudHMuZGF0ZXMgPT09IDAgJiZcblx0XHRcdG1pc3NpbmdBc3NpZ25tZW50Q291bnRzLnRpY2tldHMgPiAwO1xuXHRcdGNvbnN0IGRhdGVzTWlzc2luZyA9IG1pc3NpbmdBc3NpZ25tZW50Q291bnRzLmRhdGVzID4gMCAmJlxuXHRcdFx0bWlzc2luZ0Fzc2lnbm1lbnRDb3VudHMudGlja2V0cyA9PT0gMDtcblx0XHRjb25zdCBib3RoTWlzc2luZyA9IG1pc3NpbmdBc3NpZ25tZW50Q291bnRzLmRhdGVzID4gMCB8fFxuXHRcdFx0bWlzc2luZ0Fzc2lnbm1lbnRDb3VudHMudGlja2V0cyA+IDA7XG5cblx0XHRzd2l0Y2ggKCB0cnVlICkge1xuXHRcdFx0Y2FzZSAoIGRhdGVFbnRpdGllcy5sZW5ndGggPT09IDEgJiYgZGF0ZXNNaXNzaW5nICkgfHxcblx0XHRcdCggdGlja2V0RW50aXRpZXMubGVuZ3RoID09PSAxICYmIGRhdGVzTWlzc2luZyApIDpcblx0XHRcdFx0bWVzc2FnZSA9IF9fKFxuXHRcdFx0XHRcdCdFdmVudCBEYXRlcyBtdXN0IGFsd2F5cyBoYXZlIGF0IGxlYXN0IG9uZSBUaWNrZXQgYXNzaWduZWQgdG8gdGhlbS4gSWYgdGhlIGN1cnJlbnQgYXNzaWdubWVudCBpcyBub3QgY29ycmVjdCwgYXNzaWduIHRoZSBjb3JyZWN0IFRpY2tldCBmaXJzdCwgdGhlbiByZW1vdmUgb3RoZXJzIGFzIHJlcXVpcmVkLicsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgKCB0aWNrZXRFbnRpdGllcy5sZW5ndGggPT09IDEgJiYgYm90aE1pc3NpbmcgKSB8fFxuXHRcdFx0KCBkYXRlRW50aXRpZXMubGVuZ3RoID09PSAxICYmIHRpY2tldHNNaXNzaW5nICkgOlxuXHRcdFx0XHRtZXNzYWdlID0gX18oXG5cdFx0XHRcdFx0J1RpY2tldHMgbXVzdCBhbHdheXMgaGF2ZSBhdCBsZWFzdCBvbmUgRXZlbnQgRGF0ZSBhc3NpZ25lZCB0byB0aGVtLiBJZiB0aGUgY3VycmVudCBhc3NpZ25tZW50IGlzIG5vdCBjb3JyZWN0LCBhc3NpZ24gdGhlIGNvcnJlY3QgRXZlbnQgRGF0ZSBmaXJzdCwgdGhlbiByZW1vdmUgb3RoZXJzIGFzIHJlcXVpcmVkLicsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgKCB0aWNrZXRzTWlzc2luZyApOlxuXHRcdFx0XHRtZXNzYWdlID0gX18oXG5cdFx0XHRcdFx0J1RpY2tldHMgbXVzdCBhbHdheXMgaGF2ZSBhdCBsZWFzdCBvbmUgZGF0ZSBhc3NpZ25lZCB0byB0aGVtIGJ1dCBvbmUgb3IgbW9yZSBvZiB0aGUgdGlja2V0cyBiZWxvdyBkb2VzIG5vdCBoYXZlIGFueS4gUGxlYXNlIGNvcnJlY3QgdGhlIGFzc2lnbm1lbnRzIGZvciB0aGUgaGlnaGxpZ2h0ZWQgY2VsbHMuJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0bWVzc2FnZSA9IF9fKFxuXHRcdFx0XHRcdCdFdmVudCBEYXRlcyBtdXN0IGFsd2F5cyBoYXZlIGF0IGxlYXN0IG9uZSBUaWNrZXQgYXNzaWduZWQgdG8gdGhlbSBidXQgb25lIG9yIG1vcmUgb2YgdGhlIEV2ZW50IERhdGVzIGJlbG93IGRvZXMgbm90IGhhdmUgYW55LiBQbGVhc2UgY29ycmVjdCB0aGUgYXNzaWdubWVudHMgZm9yIHRoZSBoaWdobGlnaHRlZCBjZWxscy4nLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdH0sIFsgZGF0ZUVudGl0aWVzLCB0aWNrZXRFbnRpdGllcyBdICk7XG5cblx0Y29uc3QgW1xuXHRcdGhhc01pc3NpbmdBc3NpZ25tZW50cyxcblx0XHRub0Fzc2lnbm1lbnRzTWVzc2FnZSxcblx0XHR1cGRhdGVkQXNzaWdubWVudHNDb3VudHMsXG5cdF0gPSB1c2VNZW1vKCAoKSA9PiB7XG5cdFx0bGV0IHRvdGFsTWlzc2luZ0Fzc2lnbm1lbnRzID0gMDtcblx0XHRjb25zdCBtaXNzaW5nQXNzaWdubWVudENvdW50cyA9IHsgZGF0ZXM6IDAsIHRpY2tldHM6IDAgfTtcblx0XHRjb25zdCB1cGRhdGVkQ291bnRzID0gY2xvbmVEZWVwKCBhc3NpZ25lZENvdW50cyApO1xuXG5cdFx0Ly8gY2FsbGJhY2sgZm9yIGNvdW50aW5nIGFzc2lnbm1lbnRzIGJlaW5nIGFkZGVkIG9yIHJlbW92ZWRcblx0XHRjb25zdCBjb3VudEFzc2lnbm1lbnRDaGFuZ2VzRm9yRGF0ZXMgPSAoIGVtcHR5Q291bnQsIGNvdW50LCBkYXRlSWQgKSA9PiB7XG5cdFx0XHQvLyBmaXJzdCBjb25zaWRlciBhbnkgYXNzaWduZWRTdGF0ZS5cblx0XHRcdGNvbnN0IGFzc2lnbmVkU3RhdGVGb3JEYXRlID0gYXNzaWduZWRTdGF0ZS5hc3NpZ25lZFsgZGF0ZUlkIF07XG5cblx0XHRcdGlmICggYXNzaWduZWRTdGF0ZUZvckRhdGUgJiYgQXJyYXkuaXNBcnJheSggYXNzaWduZWRTdGF0ZUZvckRhdGUgKSApIHtcblx0XHRcdFx0YXNzaWduZWRTdGF0ZUZvckRhdGUuZm9yRWFjaCggKCB0aWNrZXRJZCApID0+IHtcblx0XHRcdFx0XHR1cGRhdGVkQ291bnRzLmRhdGVzWyBkYXRlSWQgXSsrO1xuXHRcdFx0XHRcdHVwZGF0ZWRDb3VudHMudGlja2V0c1sgdGlja2V0SWQgXSsrO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGNvbnNpZGVyIGFueSByZW1vdmVkU3RhdGVcblx0XHRcdGNvbnN0IHJlbW92ZWRTdGF0ZUZvckRhdGUgPSBhc3NpZ25lZFN0YXRlLnJlbW92ZWRbIGRhdGVJZCBdO1xuXG5cdFx0XHRpZiAoIHJlbW92ZWRTdGF0ZUZvckRhdGUgJiYgQXJyYXkuaXNBcnJheSggcmVtb3ZlZFN0YXRlRm9yRGF0ZSApICkge1xuXHRcdFx0XHRyZW1vdmVkU3RhdGVGb3JEYXRlLmZvckVhY2goICggdGlja2V0SWQgKSA9PiB7XG5cdFx0XHRcdFx0dXBkYXRlZENvdW50cy5kYXRlc1sgZGF0ZUlkIF0tLTtcblx0XHRcdFx0XHR1cGRhdGVkQ291bnRzLnRpY2tldHNbIHRpY2tldElkIF0tLTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHVwZGF0ZWRDb3VudHMuZGF0ZXNbIGRhdGVJZCBdID09PSAwICkge1xuXHRcdFx0XHRtaXNzaW5nQXNzaWdubWVudENvdW50cy5kYXRlcysrO1xuXHRcdFx0XHRlbXB0eUNvdW50Kys7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbXB0eUNvdW50O1xuXHRcdH07XG5cblx0XHRjb25zdCBjb3VudEFzc2lnbm1lbnRDaGFuZ2VzRm9yVGlja2V0cyA9ICggZW1wdHlDb3VudCwgY291bnQgKSA9PiB7XG5cdFx0XHRpZiAoIGNvdW50ID09PSAwICkge1xuXHRcdFx0XHRtaXNzaW5nQXNzaWdubWVudENvdW50cy50aWNrZXRzKys7XG5cdFx0XHRcdGVtcHR5Q291bnQrKztcblx0XHRcdH1cblx0XHRcdHJldHVybiBlbXB0eUNvdW50O1xuXHRcdH07XG5cdFx0dG90YWxNaXNzaW5nQXNzaWdubWVudHMgPSByZWR1Y2UoXG5cdFx0XHR1cGRhdGVkQ291bnRzLmRhdGVzLFxuXHRcdFx0Y291bnRBc3NpZ25tZW50Q2hhbmdlc0ZvckRhdGVzLFxuXHRcdFx0dG90YWxNaXNzaW5nQXNzaWdubWVudHNcblx0XHQpO1xuXHRcdHRvdGFsTWlzc2luZ0Fzc2lnbm1lbnRzID0gcmVkdWNlKFxuXHRcdFx0dXBkYXRlZENvdW50cy50aWNrZXRzLFxuXHRcdFx0Y291bnRBc3NpZ25tZW50Q2hhbmdlc0ZvclRpY2tldHMsXG5cdFx0XHR0b3RhbE1pc3NpbmdBc3NpZ25tZW50c1xuXHRcdCk7XG5cblx0XHRpZiAoIHRvdGFsTWlzc2luZ0Fzc2lnbm1lbnRzID4gMCApIHtcblx0XHRcdHJldHVybiBbIHRydWUsIGdldE1lc3NhZ2UoIG1pc3NpbmdBc3NpZ25tZW50Q291bnRzICksIHVwZGF0ZWRDb3VudHMgXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gWyBmYWxzZSwgJycsIHVwZGF0ZWRDb3VudHMgXTtcblx0fSwgWyBhc3NpZ25lZENvdW50cywgYXNzaWduZWRTdGF0ZSBdICk7XG5cdHJldHVybiBbXG5cdFx0aGFzTWlzc2luZ0Fzc2lnbm1lbnRzLFxuXHRcdG5vQXNzaWdubWVudHNNZXNzYWdlLFxuXHRcdHVwZGF0ZWRBc3NpZ25tZW50c0NvdW50cyxcblx0XTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUFzc2lnbm1lbnRzQ2FsY3VsYXRvcjtcbiIsImV4cG9ydCB7XG5cdGRlZmF1bHQgYXMgVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWwsXG59IGZyb20gJy4vd2l0aC10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci1tb2RhbCc7XG5leHBvcnQge1xuXHRkZWZhdWx0IGFzIHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCxcbn0gZnJvbSAnLi93aXRoLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyLW1vZGFsJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0FycmF5LCBpc0VtcHR5LCBpc1VuZGVmaW5lZCwgb21pdEJ5IH0gZnJvbSAnbG9kYXNoJztcblxuY29uc3Qgbm9JbmRleCA9IC0xO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGFzc2lnbmVkXG4gKiBAcGFyYW0ge251bWJlcn0gZGF0ZUlkXG4gKiBAcGFyYW0ge251bWJlcn0gdGlja2V0SWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV0dXJuSW5kZXhcbiAqIEByZXR1cm4ge251bWJlcnxib29sZWFufSBpbmRleCBmb3IgZGF0ZSBpZCBpbiBhc3NpZ25lZCBhcnJheSBvclxuICogICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlmIHJldHVybkluZGV4IGlzIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Fzc2lnbmVkID0gKCBhc3NpZ25lZCwgZGF0ZUlkLCB0aWNrZXRJZCwgcmV0dXJuSW5kZXggPSBmYWxzZSApID0+IHtcblx0bGV0IGluZGV4ID0gbm9JbmRleDtcblx0aWYgKCBpc0FycmF5KCBhc3NpZ25lZFsgZGF0ZUlkIF0gKSApIHtcblx0XHRpbmRleCA9IGFzc2lnbmVkWyBkYXRlSWQgXS5pbmRleE9mKCB0aWNrZXRJZCApO1xuXHR9XG5cdHJldHVybiByZXR1cm5JbmRleCA/IGluZGV4IDogaW5kZXggPiBub0luZGV4O1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBhc3NpZ25lZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYWRkVGlja2V0c1xuICogQHBhcmFtIHtPYmplY3R9IHJlbW92ZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlbW92ZVRpY2tldEVudGl0aWVzXG4gKiBAcmV0dXJuIHtQcm9taXNlfSByZXNvbHZlcyB0byB0cnVlIGlmIHVwZGF0ZXMgb2NjdXJyZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHByb2Nlc3NDaGFuZ2VzID0gKFxuXHRhc3NpZ25lZCxcblx0YWRkVGlja2V0cyxcblx0cmVtb3ZlZCxcblx0cmVtb3ZlVGlja2V0RW50aXRpZXNcbikgPT4ge1xuXHRjb25zdCByZWxhdGlvblVwZGF0ZXMgPSBbXTtcblx0Zm9yICggY29uc3QgZGF0ZUlkIGluIHJlbW92ZWQgKSB7XG5cdFx0Y29uc3QgdGlja2V0SWRzVG9SZW1vdmUgPSByZW1vdmVkWyBkYXRlSWQgXTtcblx0XHRpZiAoIGlzQXJyYXkoIHRpY2tldElkc1RvUmVtb3ZlICkgKSB7XG5cdFx0XHRyZWxhdGlvblVwZGF0ZXMucHVzaChcblx0XHRcdFx0cmVtb3ZlVGlja2V0RW50aXRpZXMoIGRhdGVJZCwgdGlja2V0SWRzVG9SZW1vdmUgKVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0Zm9yICggY29uc3QgZGF0ZUlkIGluIGFzc2lnbmVkICkge1xuXHRcdGNvbnN0IHRpY2tldElkc1RvQXNzaWduID0gYXNzaWduZWRbIGRhdGVJZCBdO1xuXHRcdGlmICggaXNBcnJheSggdGlja2V0SWRzVG9Bc3NpZ24gKSApIHtcblx0XHRcdHJlbGF0aW9uVXBkYXRlcy5wdXNoKFxuXHRcdFx0XHRhZGRUaWNrZXRzKCBkYXRlSWQsIHRpY2tldElkc1RvQXNzaWduIClcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBQcm9taXNlLmFsbCggcmVsYXRpb25VcGRhdGVzICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGFzc2lnbmVkXG4gKiBAcGFyYW0ge251bWJlcn0gZGF0ZUlkXG4gKiBAcGFyYW0ge251bWJlcn0gdGlja2V0SWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7T2JqZWN0fSBhc3NpZ25lZFxuICovXG5leHBvcnQgY29uc3QgdW5Bc3NpZ25UaWNrZXRFbnRpdHkgPSAoIGFzc2lnbmVkLCBkYXRlSWQsIHRpY2tldElkLCBpbmRleCA9IG5vSW5kZXggKSA9PiB7XG5cdGluZGV4ID0gaW5kZXggPT09IG5vSW5kZXggP1xuXHRcdGlzQXNzaWduZWQoIGFzc2lnbmVkLCBkYXRlSWQsIHRpY2tldElkLCB0cnVlICkgOlxuXHRcdGluZGV4O1xuXHRpZiAoIGluZGV4ID4gbm9JbmRleCApIHtcblx0XHRhc3NpZ25lZFsgZGF0ZUlkIF0uc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdGlmICggaXNFbXB0eSggYXNzaWduZWRbIGRhdGVJZCBdICkgKSB7XG5cdFx0XHRkZWxldGUgYXNzaWduZWRbIGRhdGVJZCBdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb21pdEJ5KCBhc3NpZ25lZCwgaXNVbmRlZmluZWQgKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gcHJldlN0YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gZGF0ZUlkXG4gKiBAcGFyYW0ge251bWJlcn0gdGlja2V0SWRcbiAqIEByZXR1cm4ge09iamVjdH0gdXBkYXRlZCBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgYXNzaWduVGlja2V0RW50aXR5ID0gKCBwcmV2U3RhdGUsIGRhdGVJZCwgdGlja2V0SWQgKSA9PiB7XG5cdGNvbnN0IGluZGV4ID0gaXNSZW1vdmVkKCBwcmV2U3RhdGUucmVtb3ZlZCwgZGF0ZUlkLCB0aWNrZXRJZCwgdHJ1ZSApO1xuXHRpZiAoIGluZGV4ID4gbm9JbmRleCApIHtcblx0XHRwcmV2U3RhdGUucmVtb3ZlZCA9IHVuUmVtb3ZlVGlja2V0RW50aXR5KFxuXHRcdFx0cHJldlN0YXRlLnJlbW92ZWQsXG5cdFx0XHRkYXRlSWQsXG5cdFx0XHR0aWNrZXRJZCxcblx0XHRcdGluZGV4XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRpZiAoICEgaXNBcnJheSggcHJldlN0YXRlLmFzc2lnbmVkWyBkYXRlSWQgXSApICkge1xuXHRcdFx0cHJldlN0YXRlLmFzc2lnbmVkWyBkYXRlSWQgXSA9IFtdO1xuXHRcdH1cblx0XHRpZiAoICEgaXNBc3NpZ25lZCggcHJldlN0YXRlLmFzc2lnbmVkLCBkYXRlSWQsIHRpY2tldElkICkgKSB7XG5cdFx0XHRwcmV2U3RhdGUuYXNzaWduZWRbIGRhdGVJZCBdLnB1c2goIHRpY2tldElkICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjbGVhblN0YXRlKCBwcmV2U3RhdGUgKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gYXNzaWduZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlSWRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aWNrZXRJZFxuICogQHJldHVybiB7bnVtYmVyfSAgICBcdFx0dGhlIG51bWJlciBvZiBkYXRlRW50aXR5IHRpY2tldHMgaW4gYXNzaWduZWRcbiAqICAgICAgICAgICAgICBcdFx0XHRjb2xsZWN0aW9uIG1hdGNoaW5nIHN1cHBsaWVkIHRpY2tldFxuICovXG5leHBvcnQgY29uc3QgYXNzaWduZWRDb3VudCA9ICggYXNzaWduZWQsIGRhdGVJZCA9IDAsIHRpY2tldElkID0gMCApID0+IHtcblx0aWYgKCBkYXRlSWQgJiYgaXNBcnJheSggYXNzaWduZWRbIGRhdGVJZCBdICkgKSB7XG5cdFx0cmV0dXJuIGFzc2lnbmVkWyBkYXRlSWQgXS5sZW5ndGg7XG5cdH1cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGNvdW50ID0gMDtcblx0aWYgKCB0aWNrZXRJZCApIHtcblx0XHRmb3IgKCBjb25zdCBkYXRlSUQgaW4gYXNzaWduZWQgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXkoIGFzc2lnbmVkWyBkYXRlSUQgXSApICkge1xuXHRcdFx0XHRpbmRleCA9IGFzc2lnbmVkWyBkYXRlSUQgXS5pbmRleE9mKCB0aWNrZXRJZCApO1xuXHRcdFx0XHRpZiAoIGluZGV4ID4gbm9JbmRleCApIHtcblx0XHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb3VudDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gcmVtb3ZlZFxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVJZFxuICogQHBhcmFtIHtudW1iZXJ9IHRpY2tldElkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHJldHVybkluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ8Ym9vbGVhbn0gaW5kZXggZm9yIGRhdGUgaWQgaW4gcmVtb3ZlZCBhcnJheSBvclxuICogICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlmIHJldHVybkluZGV4IGlzIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlbW92ZWQgPSAoIHJlbW92ZWQsIGRhdGVJZCwgdGlja2V0SWQsIHJldHVybkluZGV4ID0gZmFsc2UgKSA9PiB7XG5cdGxldCBpbmRleCA9IG5vSW5kZXg7XG5cdGlmICggaXNBcnJheSggcmVtb3ZlZFsgZGF0ZUlkIF0gKSApIHtcblx0XHRpbmRleCA9IHJlbW92ZWRbIGRhdGVJZCBdLmluZGV4T2YoIHRpY2tldElkICk7XG5cdH1cblx0cmV0dXJuIHJldHVybkluZGV4ID8gaW5kZXggOiBpbmRleCA+IG5vSW5kZXg7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHJlbW92ZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlSWRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aWNrZXRJZFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlbW92ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHVuUmVtb3ZlVGlja2V0RW50aXR5ID0gKCByZW1vdmVkLCBkYXRlSWQsIHRpY2tldElkLCBpbmRleCA9IG5vSW5kZXggKSA9PiB7XG5cdGluZGV4ID0gaW5kZXggPT09IG5vSW5kZXggP1xuXHRcdGlzUmVtb3ZlZCggcmVtb3ZlZCwgZGF0ZUlkLCB0aWNrZXRJZCwgdHJ1ZSApIDpcblx0XHRpbmRleDtcblx0aWYgKCBpbmRleCA+IG5vSW5kZXggKSB7XG5cdFx0cmVtb3ZlZFsgZGF0ZUlkIF0uc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdGlmICggaXNFbXB0eSggcmVtb3ZlZFsgZGF0ZUlkIF0gKSApIHtcblx0XHRcdGRlbGV0ZSByZW1vdmVkWyBkYXRlSWQgXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlbW92ZWQ7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHByZXZTdGF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVJZFxuICogQHBhcmFtIHtudW1iZXJ9IHRpY2tldElkXG4gKiBAcmV0dXJuIHtPYmplY3R9IHVwZGF0ZWQgc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZVRpY2tldEVudGl0eSA9ICggcHJldlN0YXRlLCBkYXRlSWQsIHRpY2tldElkICkgPT4ge1xuXHRjb25zdCBpbmRleCA9IGlzQXNzaWduZWQoIHByZXZTdGF0ZS5hc3NpZ25lZCwgZGF0ZUlkLCB0aWNrZXRJZCwgdHJ1ZSApO1xuXHRpZiAoIGluZGV4ID4gbm9JbmRleCApIHtcblx0XHRwcmV2U3RhdGUuYXNzaWduZWQgPSB1bkFzc2lnblRpY2tldEVudGl0eShcblx0XHRcdHByZXZTdGF0ZS5hc3NpZ25lZCxcblx0XHRcdGRhdGVJZCxcblx0XHRcdHRpY2tldElkLFxuXHRcdFx0aW5kZXhcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGlmICggISBpc0FycmF5KCBwcmV2U3RhdGUucmVtb3ZlZFsgZGF0ZUlkIF0gKSApIHtcblx0XHRcdHByZXZTdGF0ZS5yZW1vdmVkWyBkYXRlSWQgXSA9IFtdO1xuXHRcdH1cblx0XHRpZiAoICEgaXNSZW1vdmVkKCBwcmV2U3RhdGUucmVtb3ZlZCwgZGF0ZUlkLCB0aWNrZXRJZCApICkge1xuXHRcdFx0cHJldlN0YXRlLnJlbW92ZWRbIGRhdGVJZCBdLnB1c2goIHRpY2tldElkICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjbGVhblN0YXRlKCBwcmV2U3RhdGUgKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gcmVtb3ZlZFxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVJZFxuICogQHBhcmFtIHtudW1iZXJ9IHRpY2tldElkXG4gKiBAcmV0dXJuIHtudW1iZXJ9ICAgIFx0XHR0aGUgbnVtYmVyIG9mIGRhdGUgdGlja2V0cyBpbiByZW1vdmVkXG4gKiAgICAgICAgICAgICAgXHRcdFx0Y29sbGVjdGlvbiBtYXRjaGluZyBzdXBwbGllZCB0aWNrZXRcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZWRDb3VudCA9ICggcmVtb3ZlZCwgZGF0ZUlkID0gMCwgdGlja2V0SWQgPSAwICkgPT4ge1xuXHRpZiAoIGRhdGVJZCAmJiBpc0FycmF5KCByZW1vdmVkWyBkYXRlSWQgXSApICkge1xuXHRcdHJldHVybiByZW1vdmVkWyBkYXRlSWQgXS5sZW5ndGg7XG5cdH1cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGNvdW50ID0gMDtcblx0aWYgKCB0aWNrZXRJZCApIHtcblx0XHRmb3IgKCBjb25zdCBkYXRlSUQgaW4gcmVtb3ZlZCApIHtcblx0XHRcdGlmICggaXNBcnJheSggcmVtb3ZlZFsgZGF0ZUlEIF0gKSApIHtcblx0XHRcdFx0aW5kZXggPSByZW1vdmVkWyBkYXRlSUQgXS5pbmRleE9mKCB0aWNrZXRJZCApO1xuXHRcdFx0XHRpZiAoIGluZGV4ID4gbm9JbmRleCApIHtcblx0XHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb3VudDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gcHJldlN0YXRlXG4gKiBAcmV0dXJuIHtPYmplY3R9IHVwZGF0ZWQgc3RhdGVcbiAqL1xuY29uc3QgY2xlYW5TdGF0ZSA9ICggcHJldlN0YXRlICkgPT4ge1xuXHRjb25zdCBhc3NpZ25lZCA9IG9taXRCeSggcHJldlN0YXRlLmFzc2lnbmVkLCBpc1VuZGVmaW5lZCApO1xuXHRjb25zdCByZW1vdmVkID0gb21pdEJ5KCBwcmV2U3RhdGUucmVtb3ZlZCwgaXNVbmRlZmluZWQgKTtcblx0cmV0dXJuIHsgYXNzaWduZWQsIHJlbW92ZWQgfTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZmlsdGVyLCBmaW5kSW5kZXgsIGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VSZWYgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgRU5URVIgfSBmcm9tICdAd29yZHByZXNzL2tleWNvZGVzJztcbmltcG9ydCB7XG5cdENhbGVuZGFyUGFnZURhdGUsXG5cdFJlc3BvbnNpdmVUYWJsZSxcblx0dHdvQ29sdW1uQWRtaW5Gb3JtTGF5b3V0LFxuXHR3aXRoRm9ybUNvbnRhaW5lckFuZFBsYWNlaG9sZGVyLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBkYXRlVGltZU1vZGVsLCB0aWNrZXRNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGNvbXBvc2UsIGlmQ29uZGl0aW9uIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhFZGl0b3JNb2RhbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VkaXRvci1ob2NzJztcbmltcG9ydCB7IHdpdGhFbnRpdHlQYWdpbmF0aW9uIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgd2l0aERpc3BhdGNoLCB3aXRoU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgKiBhcyBoYW5kbGVyIGZyb20gJy4vdGlja2V0LWFzc2lnbm1lbnRzLWhhbmRsZXInO1xuaW1wb3J0ICcuL3RpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyLmNzcyc7XG5pbXBvcnQgeyBzb3J0RGF0ZUVudGl0aWVzTGlzdCB9IGZyb20gJy4uL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9maWx0ZXItYmFyL2RhdGUtZW50aXRpZXMtbGlzdC1maWx0ZXItdXRpbHMnO1xuaW1wb3J0IHsgd2l0aEVkaXRvckRhdGVFbnRpdGllcywgd2l0aEVkaXRvclRpY2tldEVudGl0aWVzIH0gZnJvbSAnLi4vaG9jcyc7XG5pbXBvcnQgeyB1c2VBc3NpZ25tZW50c0NhbGN1bGF0b3IgfSBmcm9tICcuL2hvb2tzJztcblxuY29uc3Qgbm9JbmRleCA9IC0xO1xuXG5jb25zdCB7XG5cdEZvcm1JbmZvLFxuXHRGb3JtU2VjdGlvbixcblx0Rm9ybVdyYXBwZXIsXG5cdEZvcm1TYXZlQ2FuY2VsQnV0dG9ucyxcbn0gPSB0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQ7XG5cbmNvbnN0IHsgZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3M6IGdldERhdGVCZ0NvbG9yQ2xhc3MgfSA9IGRhdGVUaW1lTW9kZWw7XG5jb25zdCB7IGdldEJhY2tncm91bmRDb2xvckNsYXNzOiBnZXRUaWNrZXRCZ0NvbG9yQ2xhc3MgfSA9IHRpY2tldE1vZGVsO1xuXG5jb25zdCBUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCA9ICgge1xuXHRlbnRpdGllczogZGF0ZUVudGl0aWVzLFxuXHR0aWNrZXRFbnRpdGllcyxcblx0dGlja2V0RW50aXRpZXNCeURhdGVJZHMsXG5cdGFkZFRpY2tldEVudGl0aWVzLFxuXHRyZW1vdmVUaWNrZXRFbnRpdGllcyxcblx0cGFnaW5hdGlvbixcblx0dG9nZ2xlRWRpdG9yLFxuXHRoYXNOb0Fzc2lnbm1lbnRzLFxuXHRub0Fzc2lnbm1lbnRzTWVzc2FnZSxcblx0YXNzaWduZWRTdGF0ZSxcblx0c2V0QXNzaWduZWRTdGF0ZSxcblx0YXNzaWdubWVudENvdW50cyxcbn0gKSA9PiB7XG5cdGNvbnN0IFsgc3VibWl0dGluZywgc2V0U3VibWl0dGluZyBdID0gdXNlU3RhdGUoIGZhbHNlICk7XG5cdGNvbnN0IFsgZm9ybUVycm9yLCBzZXRGb3JtRXJyb3IgXSA9IHVzZVN0YXRlKCAnJyApO1xuXHRjb25zdCBwcm9jZXNzQ2hhbmdlcyA9IHVzZUNhbGxiYWNrKCAoKSA9PiB7XG5cdFx0aWYgKCBoYXNOb0Fzc2lnbm1lbnRzICkge1xuXHRcdFx0Ly8gYnJpbmdzIHVwIGNvbmZpcm0gbW9kYWwgYmVjYXVzZSB0aGUgZWRpdG9yIHdvbid0IGNsb3NlXG5cdFx0XHR0b2dnbGVFZGl0b3IoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c2V0U3VibWl0dGluZyggdHJ1ZSApO1xuXHRcdGhhbmRsZXIucHJvY2Vzc0NoYW5nZXMoXG5cdFx0XHRhc3NpZ25lZFN0YXRlLmFzc2lnbmVkLFxuXHRcdFx0YWRkVGlja2V0RW50aXRpZXMsXG5cdFx0XHRhc3NpZ25lZFN0YXRlLnJlbW92ZWQsXG5cdFx0XHRyZW1vdmVUaWNrZXRFbnRpdGllcyxcblx0XHQpLnRoZW4oICggdXBkYXRlcyApID0+IHtcblx0XHRcdGNvbnN0IHdhc1VwZGF0ZWQgPSBmaWx0ZXIoIHVwZGF0ZXMsICggdXBkYXRlZCApID0+IHtcblx0XHRcdFx0cmV0dXJuICEhIHVwZGF0ZWQ7XG5cdFx0XHR9ICk7XG5cdFx0XHR0b2dnbGVFZGl0b3IoIHdhc1VwZGF0ZWQubGVuZ3RoID4gMCApO1xuXHRcdH0gKS5jYXRjaCggKCBlcnJvciApID0+IHtcblx0XHRcdHdhcm5pbmcoIGZhbHNlLCBlcnJvciApO1xuXHRcdH0gKTtcblx0fSwgW1xuXHRcdGFzc2lnbmVkU3RhdGUsXG5cdFx0YWRkVGlja2V0RW50aXRpZXMsXG5cdFx0cmVtb3ZlVGlja2V0RW50aXRpZXMsXG5cdFx0aGFzTm9Bc3NpZ25tZW50cyxcblx0XSApO1xuXHRjb25zdCBhc3NpZ25UaWNrZXRFbnRpdHkgPSB1c2VDYWxsYmFjayhcblx0XHQoIGRhdGVJZCwgdGlja2V0SWQgKSA9PiB7XG5cdFx0XHRzZXRBc3NpZ25lZFN0YXRlKCAoIHByZXZTdGF0ZSApID0+IHtcblx0XHRcdFx0cmV0dXJuIGhhbmRsZXIuYXNzaWduVGlja2V0RW50aXR5KFxuXHRcdFx0XHRcdGNsb25lRGVlcCggcHJldlN0YXRlICksXG5cdFx0XHRcdFx0ZGF0ZUlkLFxuXHRcdFx0XHRcdHRpY2tldElkXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0XHRzZXRGb3JtRXJyb3IoICcnICk7XG5cdFx0fSxcblx0XHRbIHNldEZvcm1FcnJvciBdXG5cdCk7XG5cdGNvbnN0IHJlbW92ZVRpY2tldEVudGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdCggZGF0ZUlkLCB0aWNrZXRJZCApID0+IHtcblx0XHRcdHNldEFzc2lnbmVkU3RhdGUoICggcHJldlN0YXRlICkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaGFuZGxlci5yZW1vdmVUaWNrZXRFbnRpdHkoXG5cdFx0XHRcdFx0Y2xvbmVEZWVwKCBwcmV2U3RhdGUgKSxcblx0XHRcdFx0XHRkYXRlSWQsXG5cdFx0XHRcdFx0dGlja2V0SWRcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9LFxuXHRcdFtdXG5cdCk7XG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtBcnJheX0gdGlja2V0RW50aXRpZXNcblx0ICogQHBhcmFtIHtudW1iZXJ9IGRhdGVDb3VudFxuXHQgKiBAcmV0dXJuIHtBcnJheX0gdGFibGUgaGVhZGVyIGNlbGwgZGF0YVxuXHQgKi9cblx0Y29uc3QgdGlja2V0SGVhZGVycyA9IHVzZUNhbGxiYWNrKFxuXHRcdCgpID0+IHtcblx0XHRcdGNvbnN0IGRhdGVDb3VudCA9IGRhdGVFbnRpdGllcy5sZW5ndGg7XG5cdFx0XHRjb25zdCBoZWFkZXJDZWxscyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdyb3cnLFxuXHRcdFx0XHRcdGNsYXNzOiAnJyxcblx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdH0sXG5cdFx0XHRdO1xuXHRcdFx0aWYgKCBkYXRlQ291bnQgPiAxICkge1xuXHRcdFx0XHRoZWFkZXJDZWxscy5wdXNoKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0XHRcdGNsYXNzOiAnZWUtdGFtLWRhdGVzLWhlYWRlcicsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dGlja2V0RW50aXRpZXMuZm9yRWFjaCggKCB0aWNrZXQgKSA9PiB7XG5cdFx0XHRcdHdhcm5pbmcoXG5cdFx0XHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoIHRpY2tldCwgJ3RpY2tldCcgKSxcblx0XHRcdFx0XHQnSW52YWxpZCBFRSBUaWNrZXQgbW9kZWwgb2JqZWN0ISdcblx0XHRcdFx0KTtcblx0XHRcdFx0bGV0IHN0YXR1c0NsYXNzID0gZ2V0VGlja2V0QmdDb2xvckNsYXNzKCB0aWNrZXQgKTtcblx0XHRcdFx0c3RhdHVzQ2xhc3MgPSBgZWUtdGFtLXRpY2tldC1oZWFkZXItc3RhdHVzICR7IHN0YXR1c0NsYXNzIH1gO1xuXHRcdFx0XHRjb25zdCBzYWxlRGF0ZSA9IHRpY2tldC5zdGFydERhdGUudG9Gb3JtYXQoICdNTU0gREQgWVlZWScgKTtcblx0XHRcdFx0aGVhZGVyQ2VsbHMucHVzaChcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR0eXBlOiAnY2VsbCcsXG5cdFx0XHRcdFx0XHRjbGFzczogJ2VlLXRhbS10aWNrZXQtaGVhZGVyJyxcblx0XHRcdFx0XHRcdHZhbHVlOiAoXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGFtLXRpY2tldC1oZWFkZXItZGl2XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyBzdGF0dXNDbGFzcyB9PlxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGFtLXRpY2tldC1oZWFkZXItZGF0ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHNhbGVEYXRlIH1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXRhbS10aWNrZXQtaWRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHsgYCMkeyB0aWNrZXQuaWQgfWAgfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGFtLXRpY2tldC1oZWFkZXItdGl0bGVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHsgdGlja2V0Lm5hbWUgfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGFtLXRpY2tldC1oZWFkZXItcHJpY2VcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHsgYCR7IHRpY2tldC5wcmljZSB9YCB9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10YW0tdGlja2V0LWhlYWRlci1kYXRlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgc2FsZURhdGUgfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdFx0cmV0dXJuIGhlYWRlckNlbGxzO1xuXHRcdH0sXG5cdFx0WyB0aWNrZXRFbnRpdGllcywgZGF0ZUVudGl0aWVzLCBnZXRUaWNrZXRCZ0NvbG9yQ2xhc3MgXVxuXHQpO1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtudW1iZXJ9IHllYXJcblx0ICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0aWVzXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgdGFibGUgcm93XG5cdCAqL1xuXHRjb25zdCB5ZWFyUm93ID0gdXNlQ2FsbGJhY2soXG5cdFx0KCB5ZWFyLCB0aWNrZXRFbnRpdGllc0ZvclllYXIgKSA9PiB7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3JvdycsXG5cdFx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHRcdGNsYXNzOiAnZWUtdGFtLXllYXItcm93Jyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0XHR2YWx1ZTogeWVhcixcblx0XHRcdFx0XHRjbGFzczogJ2VlLXRhbS1kYXRlLWxhYmVsJyxcblx0XHRcdFx0fSxcblx0XHRcdF07XG5cdFx0XHR0aWNrZXRFbnRpdGllc0ZvclllYXIuZm9yRWFjaCggKCkgPT4ge1xuXHRcdFx0XHRyb3dEYXRhLnB1c2goXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dHlwZTogJ2NlbGwnLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHRcdFx0cmVuZGVyOiAoIHJvd051bWJlciwgY29sTnVtYmVyICkgPT4gKFxuXHRcdFx0XHRcdFx0XHQ8dGRcblx0XHRcdFx0XHRcdFx0XHRrZXk9eyBgcm93LSR7IHJvd051bWJlciB9LWNvbC0keyBjb2xOdW1iZXIgfWAgfVxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17XG5cdFx0XHRcdFx0XHRcdFx0XHQnZWUtdGFtLWRhdGUtcm93LXRpY2tldCBlZS1yVGFibGUtYm9keS10ZCdcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdFx0cmV0dXJuIHJvd0RhdGE7XG5cdFx0fSxcblx0XHRbXVxuXHQpO1xuXG5cdC8qKiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHN1cHBsaWVkIGRhdGUgYWxyZWFkeSBoYXMgYSByZWxhdGlvbiB0byB0aGVcblx0ICogIHN1cHBsaWVkIHRpY2tldCwgb3IgaXMgcXVldWVkIGZvciByZW1vdmFsLCBvciBoYXMgYmVlbiBhc3NpZ25lZFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGVFbnRpdHlcblx0ICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuXHQgKiBAcGFyYW0ge0FycmF5fSBkYXRlVGlja2V0RW50aXRpZXNcblx0ICogQHBhcmFtIHtPYmplY3R9IGFzc2lnbmVkXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSByZW1vdmVkXG5cdCAqIEByZXR1cm4ge09iamVjdH0gSlNPTiBvYmplY3Qgd2l0aCBoYXNUaWNrZXQsIGlzQXNzaWduZWQsIGlzUmVtb3ZlZCB2YWx1ZXNcblx0ICovXG5cdGNvbnN0IGRldGVybWluZUN1cnJlbnRBc3NpZ25tZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KCBkYXRlRW50aXR5LCB0aWNrZXRFbnRpdHksIGRhdGVUaWNrZXRFbnRpdGllcyApID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGhhc1RpY2tldDogZmluZEluZGV4KFxuXHRcdFx0XHRcdGRhdGVUaWNrZXRFbnRpdGllcyxcblx0XHRcdFx0XHR7IGlkOiB0aWNrZXRFbnRpdHkuaWQgfVxuXHRcdFx0XHQpID4gbm9JbmRleCxcblx0XHRcdFx0aXNBc3NpZ25lZDogaGFuZGxlci5pc0Fzc2lnbmVkKFxuXHRcdFx0XHRcdGFzc2lnbmVkU3RhdGUuYXNzaWduZWQsXG5cdFx0XHRcdFx0ZGF0ZUVudGl0eS5pZCxcblx0XHRcdFx0XHR0aWNrZXRFbnRpdHkuaWQsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpID4gbm9JbmRleCxcblx0XHRcdFx0aXNSZW1vdmVkOiBoYW5kbGVyLmlzUmVtb3ZlZChcblx0XHRcdFx0XHRhc3NpZ25lZFN0YXRlLnJlbW92ZWQsXG5cdFx0XHRcdFx0ZGF0ZUVudGl0eS5pZCxcblx0XHRcdFx0XHR0aWNrZXRFbnRpdHkuaWQsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpID4gbm9JbmRleCxcblx0XHRcdH07XG5cdFx0fSxcblx0XHRbIGFzc2lnbmVkU3RhdGUgXVxuXHQpO1xuXG5cdC8qKlxuXHQgKiB1c2VkIHRvIGRldGVybWluZSBpZiB3ZSBhcmUgYWRkaW5nIG9yIHJlbW92aW5nIGEgdGlja2V0IGFzc2lnbm1lbnRcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzVGlja2V0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNBc3NpZ25lZFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVtb3ZlZFxuXHQgKiBAcGFyYW0ge251bWJlcn0gdG90YWxUaWNrZXRBc3NpZ25tZW50c0ZvckRhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsRGF0ZUFzc2lnbm1lbnRzRm9yVGlja2V0XG5cdCAqIEByZXR1cm4ge09iamVjdH0gSlNPTiBvYmplY3Qgd2l0aCBhY3Rpb24gbW9kaWZpZXIgdmFsdWVzXG5cdCAqL1xuXHRjb25zdCBnZXRBY3Rpb25Nb2RpZmllcnMgPSB1c2VDYWxsYmFjayhcblx0XHQoIGhhc1RpY2tldCwgaXNBc3NpZ25lZCwgaXNSZW1vdmVkICkgPT4ge1xuXHRcdFx0Y29uc3QgY3VycmVudGx5QXNzaWduZWQgPSBpc0Fzc2lnbmVkIHx8XG5cdFx0XHRcdCggaGFzVGlja2V0ICYmICEgaXNSZW1vdmVkICk7XG5cdFx0XHRyZXR1cm4geyBjdXJyZW50bHlBc3NpZ25lZCB9O1xuXHRcdH0sXG5cdFx0W11cblx0KTtcblxuXHQvKipcblx0ICogZGV0ZXJtaW5lcyB3aGF0IGNhbGxiYWNrIHRvIHVzZSB3aGVuIG1vZGlmeWluZyBhIHRpY2tldCBhc3NpZ25tZW50XG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGN1cnJlbnRseUFzc2lnbmVkXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FuUmVtb3ZlQXNzaWdubWVudFxuXHQgKiBAcGFyYW0ge251bWJlcn0gdG90YWxEYXRlQXNzaWdubWVudHNGb3JUaWNrZXRcblx0ICogQHJldHVybiB7RnVuY3Rpb259IHRpY2tldCBjZWxsIGJ1dHRvbiBhY3Rpb25cblx0ICovXG5cdGNvbnN0IGdldEFjdGlvbiA9IHVzZUNhbGxiYWNrKFxuXHRcdCggY3VycmVudGx5QXNzaWduZWQgKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3VycmVudGx5QXNzaWduZWQgP1xuXHRcdFx0XHRyZW1vdmVUaWNrZXRFbnRpdHkgOlxuXHRcdFx0XHRhc3NpZ25UaWNrZXRFbnRpdHk7XG5cdFx0fSxcblx0XHRbIHJlbW92ZVRpY2tldEVudGl0eSwgYXNzaWduVGlja2V0RW50aXR5IF1cblx0KTtcblxuXHQvKipcblx0ICogZXh0cmEgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGlja2V0IGNlbGwgaWYgYXNzaWdubWVudCBlcnJvciBleGlzdHNcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFRpY2tldEFzc2lnbm1lbnRzRm9yRGF0ZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdG90YWxEYXRlQXNzaWdubWVudHNGb3JUaWNrZXRcblx0ICogQHJldHVybiB7c3RyaW5nfSBjc3MgY2xhc3Ncblx0ICovXG5cdGNvbnN0IGdldEFzc2lnbm1lbnRzRXJyb3JDbGFzcyA9IHVzZUNhbGxiYWNrKFxuXHRcdCggZGF0ZUVudGl0eSwgdGlja2V0RW50aXR5ICkgPT4ge1xuXHRcdFx0Y29uc3QgZW50aXRpZXNIYXZlRW1wdHlBc3NpZ25tZW50cyA9ICgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFzc2lnbm1lbnRDb3VudHMuZGF0ZXNbIGRhdGVFbnRpdHkuaWQgXSA9PT0gMCB8fFxuXHRcdFx0XHRcdGFzc2lnbm1lbnRDb3VudHMudGlja2V0c1sgdGlja2V0RW50aXR5LmlkIF0gPT09IDA7XG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIGhhc05vQXNzaWdubWVudHMgJiYgZW50aXRpZXNIYXZlRW1wdHlBc3NpZ25tZW50cygpID9cblx0XHRcdFx0JyBlZS10YW0tYXNzaWdubWVudHMtZXJyb3InIDpcblx0XHRcdFx0Jyc7XG5cdFx0fSxcblx0XHRbIGhhc05vQXNzaWdubWVudHMsIGFzc2lnbm1lbnRDb3VudHMgXVxuXHQpO1xuXG5cdC8qKlxuXHQgKiBpY29uIGFuZCBjb2xvciBjbGFzcyByZXByZXNlbnRpbmcgY3VycmVudCB0aWNrZXQgZGF0ZSBhc3NpZ25tZW50XG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGhhc1RpY2tldFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzQXNzaWduZWRcblx0ICogQHBhcmFtIHtib29sZWFufSBpc1JlbW92ZWRcblx0ICogQHJldHVybiB7T2JqZWN0fSBKU09OIG9iamVjdCB3aXRoIGljb24gYW5kIGJnQ29sb3IgdmFsdWVzXG5cdCAqL1xuXHRjb25zdCBnZXRJY29uQW5kQmdDb2xvciA9IHVzZUNhbGxiYWNrKFxuXHRcdCggaGFzVGlja2V0LCBpc0Fzc2lnbmVkLCBpc1JlbW92ZWQgKSA9PiB7XG5cdFx0XHRsZXQgaWNvbiA9ICcnO1xuXHRcdFx0bGV0IGJnQ29sb3IgPSAnZWUtdGFtLXRpY2tldC1yZWxhdGlvbi1idXR0b24nO1xuXHRcdFx0aWYgKCBoYXNUaWNrZXQgKSB7XG5cdFx0XHRcdGlmICggaXNSZW1vdmVkICkge1xuXHRcdFx0XHRcdGljb24gPSAnbm8nO1xuXHRcdFx0XHRcdGJnQ29sb3IgKz0gJyBlZS10YW0tcmVtb3ZlLXRpY2tldC1yZWxhdGlvbic7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWNvbiA9ICd0aWNrZXRzLWFsdCc7XG5cdFx0XHRcdFx0YmdDb2xvciArPSAnIGVlLXRhbS1oYXMtdGlja2V0LXJlbGF0aW9uJztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICggaXNBc3NpZ25lZCApIHtcblx0XHRcdFx0aWNvbiA9ICd0aWNrZXRzLWFsdCc7XG5cdFx0XHRcdGJnQ29sb3IgKz0gJyBlZS10YW0tYWRkLXRpY2tldC1yZWxhdGlvbic7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpY29uID0gJ21pbnVzJztcblx0XHRcdFx0YmdDb2xvciArPSAnIGVlLXRhbS1uby10aWNrZXQtcmVsYXRpb24nO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgaWNvbiwgYmdDb2xvciB9O1xuXHRcdH0sXG5cdFx0W11cblx0KTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5XG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB0aWNrZXRFbnRpdHlcblx0ICogQHBhcmFtIHtBcnJheX0gZGF0ZVRpY2tldEVudGl0aWVzXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgdGFibGUgY2VsbFxuXHQgKi9cblx0Y29uc3QgdGlja2V0Q2VsbCA9IHVzZUNhbGxiYWNrKFxuXHRcdCggZGF0ZUVudGl0eSwgdGlja2V0RW50aXR5LCBkYXRlVGlja2V0RW50aXRpZXMgKSA9PiB7XG5cdFx0XHRjb25zdCB7XG5cdFx0XHRcdGhhc1RpY2tldCxcblx0XHRcdFx0aXNBc3NpZ25lZCxcblx0XHRcdFx0aXNSZW1vdmVkLFxuXHRcdFx0fSA9IGRldGVybWluZUN1cnJlbnRBc3NpZ25tZW50KFxuXHRcdFx0XHRkYXRlRW50aXR5LFxuXHRcdFx0XHR0aWNrZXRFbnRpdHksXG5cdFx0XHRcdGRhdGVUaWNrZXRFbnRpdGllcyxcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB7IGN1cnJlbnRseUFzc2lnbmVkIH0gPSBnZXRBY3Rpb25Nb2RpZmllcnMoXG5cdFx0XHRcdGhhc1RpY2tldCxcblx0XHRcdFx0aXNBc3NpZ25lZCxcblx0XHRcdFx0aXNSZW1vdmVkLFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGFjdGlvbiA9IGdldEFjdGlvbiggY3VycmVudGx5QXNzaWduZWQgKTtcblx0XHRcdGNvbnN0IGFzc2lnbm1lbnRzRXJyb3JDbGFzcyA9IGdldEFzc2lnbm1lbnRzRXJyb3JDbGFzcyggZGF0ZUVudGl0eSwgdGlja2V0RW50aXR5ICk7XG5cdFx0XHRjb25zdCB7IGljb24sIGJnQ29sb3IgfSA9IGdldEljb25BbmRCZ0NvbG9yKFxuXHRcdFx0XHRoYXNUaWNrZXQsXG5cdFx0XHRcdGlzQXNzaWduZWQsXG5cdFx0XHRcdGlzUmVtb3ZlZFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6IGBlZS10YW0tZGF0ZS1yb3ctdGlja2V0JHsgYXNzaWdubWVudHNFcnJvckNsYXNzIH1gLFxuXHRcdFx0XHR2YWx1ZTogKFxuXHRcdFx0XHRcdDxJY29uQnV0dG9uXG5cdFx0XHRcdFx0XHRpY29uPXsgaWNvbiB9XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9eyBiZ0NvbG9yIH1cblx0XHRcdFx0XHRcdHNpemU9eyA0NSB9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsgKCBldmVudCApID0+IHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdGFjdGlvbiggZGF0ZUVudGl0eS5pZCwgdGlja2V0RW50aXR5LmlkICk7XG5cdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdG9uS2V5RG93bj17ICggZXZlbnQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmICggZXZlbnQua2V5Q29kZSA9PT0gRU5URVIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb24oIGRhdGVFbnRpdHkuaWQsIHRpY2tldEVudGl0eS5pZCApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpLFxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdFtcblx0XHRcdGFzc2lnbmVkU3RhdGUsXG5cdFx0XHRnZXRBY3Rpb25Nb2RpZmllcnMsXG5cdFx0XHRnZXRBY3Rpb24sXG5cdFx0XHRnZXRBc3NpZ25tZW50c0Vycm9yQ2xhc3MsXG5cdFx0XHRnZXRJY29uQW5kQmdDb2xvcixcblx0XHRcdGRldGVybWluZUN1cnJlbnRBc3NpZ25tZW50LFxuXHRcdF1cblx0KTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRlRW50aXR5XG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgdGFibGUgY2VsbFxuXHQgKi9cblx0Y29uc3QgZGF0ZUhlYWRlciA9IHVzZUNhbGxiYWNrKFxuXHRcdCggZGF0ZUVudGl0eSApID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10YW0tZGF0ZS1sYWJlbCcsXG5cdFx0XHRcdHZhbHVlOiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10YW0tZGF0ZS1sYWJlbC1kaXZcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGFtLWRhdGUtaWRcIj5cblx0XHRcdFx0XHRcdFx0eyBgIyR7IGRhdGVFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXRhbS1kYXRlLWxhYmVsLXRleHRcIj5cblx0XHRcdFx0XHRcdFx0eyBkYXRlRW50aXR5Lm5hbWUgfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8Q2FsZW5kYXJQYWdlRGF0ZVxuXHRcdFx0XHRcdFx0XHRzdGFydERhdGU9eyBkYXRlRW50aXR5LnN0YXJ0IH1cblx0XHRcdFx0XHRcdFx0c3RhdHVzQ2xhc3M9eyBnZXREYXRlQmdDb2xvckNsYXNzKCBkYXRlRW50aXR5ICkgfVxuXHRcdFx0XHRcdFx0XHRzaXplPXsgJ3NtYWxsJyB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpLFxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdFtdXG5cdCk7XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge0FycmF5fSBkYXRlRW50aXRpZXNcblx0ICogQHBhcmFtIHtBcnJheX0gdGlja2V0RW50aXRpZXNcblx0ICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0aWVzQnlEYXRlSWRzXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlQ291bnRcblx0ICogQHJldHVybiB7QXJyYXl9IGFycmF5IG9mIHJvdyBkYXRhIG9iamVjdHNcblx0ICovXG5cdGNvbnN0IGRhdGVSb3dzID0gdXNlQ2FsbGJhY2soXG5cdFx0KCkgPT4ge1xuXHRcdFx0bGV0IHllYXIgPSAwO1xuXHRcdFx0Y29uc3QgZGF0ZUNvdW50ID0gZGF0ZUVudGl0aWVzLmxlbmd0aDtcblx0XHRcdGNvbnN0IHJvd3MgPSBbXTtcblx0XHRcdGRhdGVFbnRpdGllcy5mb3JFYWNoKFxuXHRcdFx0XHQoIGV2ZW50RGF0ZSApID0+IHtcblx0XHRcdFx0XHR3YXJuaW5nKFxuXHRcdFx0XHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoIGV2ZW50RGF0ZSwgJ2RhdGV0aW1lJyApLFxuXHRcdFx0XHRcdFx0J0ludmFsaWQgRUUgRGF0ZSBtb2RlbCBvYmplY3QhJ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgZGF0ZVllYXIgPSBwYXJzZUludChcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZS5zdGFydC50b0Zvcm1hdCggJ1lZWVknICksXG5cdFx0XHRcdFx0XHQxMFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKCBkYXRlQ291bnQgPiAxICYmIGRhdGVZZWFyID4geWVhciApIHtcblx0XHRcdFx0XHRcdHllYXIgPSBkYXRlWWVhcjtcblx0XHRcdFx0XHRcdHJvd3MucHVzaCggeWVhclJvdyggeWVhciwgdGlja2V0RW50aXRpZXMgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCByb3dEYXRhID0gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAncm93Jyxcblx0XHRcdFx0XHRcdFx0Y2xhc3M6ICdlZS10YW0tZGF0ZS1yb3cnLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0aWYgKCBkYXRlQ291bnQgPiAxICkge1xuXHRcdFx0XHRcdFx0cm93RGF0YS5wdXNoKCBkYXRlSGVhZGVyKCBldmVudERhdGUgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBkYXRlVGlja2V0RW50aXRpZXMgPSB0aWNrZXRFbnRpdGllc0J5RGF0ZUlkc1sgZXZlbnREYXRlLmlkIF0gP1xuXHRcdFx0XHRcdFx0dGlja2V0RW50aXRpZXNCeURhdGVJZHNbIGV2ZW50RGF0ZS5pZCBdIDpcblx0XHRcdFx0XHRcdFtdO1xuXHRcdFx0XHRcdHRpY2tldEVudGl0aWVzLmZvckVhY2goICggdGlja2V0ICkgPT4ge1xuXHRcdFx0XHRcdFx0d2FybmluZyhcblx0XHRcdFx0XHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoIHRpY2tldCwgJ3RpY2tldCcgKSxcblx0XHRcdFx0XHRcdFx0J0ludmFsaWQgRUUgVGlja2V0IG1vZGVsIG9iamVjdCEnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cm93RGF0YS5wdXNoKFxuXHRcdFx0XHRcdFx0XHR0aWNrZXRDZWxsKCBldmVudERhdGUsIHRpY2tldCwgZGF0ZVRpY2tldEVudGl0aWVzIClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdHJvd3MucHVzaCggcm93RGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHJvd3M7XG5cdFx0fSxcblx0XHRbIGRhdGVFbnRpdGllcywgdGlja2V0RW50aXRpZXMsIHRpY2tldEVudGl0aWVzQnlEYXRlSWRzLCB0aWNrZXRDZWxsIF1cblx0KTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgY2FuY2VsIGJ1dHRvblxuXHQgKi9cblx0Y29uc3QgZ2V0Rm9ybUVycm9yID0gdXNlQ2FsbGJhY2soXG5cdFx0KCkgPT4ge1xuXHRcdFx0bGV0IGVycm9yTWVzc2FnZSA9IGZvcm1FcnJvcjtcblx0XHRcdGlmICggaGFzTm9Bc3NpZ25tZW50cyApIHtcblx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gbm9Bc3NpZ25tZW50c01lc3NhZ2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZXJyb3JNZXNzYWdlID9cblx0XHRcdFx0PEZvcm1JbmZvXG5cdFx0XHRcdFx0Zm9ybUluZm89eyBlcnJvck1lc3NhZ2UgfVxuXHRcdFx0XHRcdGRhc2hpY29uPXsgJ3dhcm5pbmcnIH1cblx0XHRcdFx0XHRkaXNtaXNzYWJsZT17IHRydWUgfVxuXHRcdFx0XHRcdGNvbFNpemU9eyAxMCB9XG5cdFx0XHRcdFx0b2Zmc2V0PXsgMSB9XG5cdFx0XHRcdC8+IDogbnVsbDtcblx0XHR9LFxuXHRcdFsgaGFzTm9Bc3NpZ25tZW50cywgZm9ybUVycm9yIF1cblx0KTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHByb2Nlc3NDaGFuZ2VzXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgc3VibWl0IGJ1dHRvblxuXHQgKi9cblx0Y29uc3Qgc3VibWl0QnV0dG9uID0gdXNlQ2FsbGJhY2soXG5cdFx0KCkgPT4ge1xuXHRcdFx0Y29uc3QgeyBGb3JtU3VibWl0QnV0dG9uIH0gPSB0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQ7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8Rm9ybVN1Ym1pdEJ1dHRvblxuXHRcdFx0XHRcdG9uQ2xpY2s9e1xuXHRcdFx0XHRcdFx0KCBldmVudCApID0+IHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdHByb2Nlc3NDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdHNldEZvcm1FcnJvciggJycgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnV0dG9uVGV4dD17IF9fKFxuXHRcdFx0XHRcdFx0J1VwZGF0ZSBUaWNrZXQgQXNzaWdubWVudHMnLFxuXHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdCkgfVxuXHRcdFx0XHRcdHN1Ym1pdHRpbmc9eyBzdWJtaXR0aW5nIH1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fSxcblx0XHRbIHByb2Nlc3NDaGFuZ2VzLCBzdWJtaXR0aW5nLCBzZXRGb3JtRXJyb3IgXVxuXHQpO1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBjYW5jZWwgYnV0dG9uXG5cdCAqL1xuXHRjb25zdCBjYW5jZWxCdXR0b24gPSB1c2VDYWxsYmFjayhcblx0XHQoKSA9PiB7XG5cdFx0XHRjb25zdCB7IEZvcm1DYW5jZWxCdXR0b24gfSA9IHR3b0NvbHVtbkFkbWluRm9ybUxheW91dDtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxGb3JtQ2FuY2VsQnV0dG9uXG5cdFx0XHRcdFx0b25DbGljaz17XG5cdFx0XHRcdFx0XHQoIGV2ZW50ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdFx0c2V0Rm9ybUVycm9yKCAnJyApO1xuXHRcdFx0XHRcdFx0XHR0b2dnbGVFZGl0b3IoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH0sXG5cdFx0WyBzZXRGb3JtRXJyb3IsIHRvZ2dsZUVkaXRvciBdXG5cdCk7XG5cblx0bGV0IHRhYmxlSWQgPSAnZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXItJztcblx0aWYgKCBkYXRlRW50aXRpZXMubGVuZ3RoID09PSAxICkge1xuXHRcdHRhYmxlSWQgKz0gZGF0ZUVudGl0aWVzWyAwIF0uaWQ7XG5cdH0gZWxzZSB7XG5cdFx0dGFibGVJZCArPSBkYXRlRW50aXRpZXMubGVuZ3RoICsgJy0nICsgdGlja2V0RW50aXRpZXMubGVuZ3RoO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0PEZvcm1XcmFwcGVyPlxuXHRcdFx0PEZvcm1TZWN0aW9uPlxuXHRcdFx0XHR7IGdldEZvcm1FcnJvcigpIH1cblx0XHRcdFx0PFJlc3BvbnNpdmVUYWJsZVxuXHRcdFx0XHRcdGNvbHVtbnM9eyB0aWNrZXRIZWFkZXJzKCkgfVxuXHRcdFx0XHRcdHJvd0RhdGE9eyBkYXRlUm93cygpIH1cblx0XHRcdFx0XHRtZXRhRGF0YT17IHtcblx0XHRcdFx0XHRcdHRhYmxlSWQsXG5cdFx0XHRcdFx0XHR0YWJsZUNhcHRpb246IF9fKFxuXHRcdFx0XHRcdFx0XHQnVGlja2V0IEFzc2lnbm1lbnRzJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdGhhc1Jvd0hlYWRlcnM6IGRhdGVFbnRpdGllcy5sZW5ndGggPiAxLFxuXHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdGNsYXNzZXM9eyB7XG5cdFx0XHRcdFx0XHR0YWJsZUNsYXNzOiAnZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXInLFxuXHRcdFx0XHRcdH0gfVxuXHRcdFx0XHQvPlxuXHRcdFx0XHR7IHBhZ2luYXRpb24gfVxuXHRcdFx0PC9Gb3JtU2VjdGlvbj5cblx0XHRcdDxGb3JtU2F2ZUNhbmNlbEJ1dHRvbnNcblx0XHRcdFx0c3VibWl0QnV0dG9uPXsgc3VibWl0QnV0dG9uKCkgfVxuXHRcdFx0XHRjYW5jZWxCdXR0b249eyBjYW5jZWxCdXR0b24oKSB9XG5cdFx0XHQvPlxuXHRcdDwvRm9ybVdyYXBwZXI+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKCBbXG5cdGlmQ29uZGl0aW9uKCAoIHsgZWRpdG9yT3BlbiB9ICkgPT4gZWRpdG9yT3BlbiApLFxuXHR3aXRoRWRpdG9yRGF0ZUVudGl0aWVzLFxuXHR3aXRoRWRpdG9yVGlja2V0RW50aXRpZXMsXG5cdHdpdGhEaXNwYXRjaCggKCBkaXNwYXRjaCwgb3duUHJvcHMsIHJlZ2lzdHJ5ICkgPT4ge1xuXHRcdGNvbnN0IHsgZ2V0RW50aXRpZXNCeUlkcyB9ID0gcmVnaXN0cnkuc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdGNvbnN0IGFkZFRpY2tldEVudGl0aWVzID0gKCBkYXRlSWQsIHRpY2tldElkcyApID0+IHtcblx0XHRcdGNvbnN0IHsgY3JlYXRlUmVsYXRpb25zIH0gPSBkaXNwYXRjaCggJ2V2ZW50ZXNwcmVzc28vY29yZScgKTtcblx0XHRcdHJldHVybiBjcmVhdGVSZWxhdGlvbnMoXG5cdFx0XHRcdCdkYXRldGltZScsXG5cdFx0XHRcdGRhdGVJZCxcblx0XHRcdFx0J3RpY2tldCcsXG5cdFx0XHRcdGdldEVudGl0aWVzQnlJZHMoICd0aWNrZXQnLCB0aWNrZXRJZHMgKVxuXHRcdFx0KTtcblx0XHR9O1xuXHRcdGNvbnN0IHJlbW92ZVRpY2tldEVudGl0aWVzID0gKCBkYXRlSWQsIHRpY2tldElkcyApID0+IHtcblx0XHRcdGNvbnN0IHsgcmVtb3ZlUmVsYXRpb25Gb3JFbnRpdHkgfSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0Y29uc3QgcmVsYXRpb25zUmVtb3ZlZCA9IFtdO1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB0aWNrZXRJZHMgKSApIHtcblx0XHRcdFx0dGlja2V0SWRzLmZvckVhY2goICggdGlja2V0SWQgKSA9PiB7XG5cdFx0XHRcdFx0cmVsYXRpb25zUmVtb3ZlZC5wdXNoKFxuXHRcdFx0XHRcdFx0cmVtb3ZlUmVsYXRpb25Gb3JFbnRpdHkoXG5cdFx0XHRcdFx0XHRcdCdkYXRldGltZScsXG5cdFx0XHRcdFx0XHRcdGRhdGVJZCxcblx0XHRcdFx0XHRcdFx0J3RpY2tldCcsXG5cdFx0XHRcdFx0XHRcdHRpY2tldElkXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKCByZWxhdGlvbnNSZW1vdmVkICk7XG5cdFx0fTtcblx0XHRyZXR1cm4geyBhZGRUaWNrZXRFbnRpdGllcywgcmVtb3ZlVGlja2V0RW50aXRpZXMgfTtcblx0fSApLFxuXHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiAoIHByb3BzICkgPT4ge1xuXHRcdC8vIGFkZHMgYSByZWYgZm9yIGhhbmRsaW5nIGNvdW50IHVwZGF0ZXMuXG5cdFx0Y29uc3QgYXNzaWdubWVudENvdW50cyA9IHVzZVJlZiggeyBkYXRlczoge30sIHRpY2tldHM6IHt9IH0gKTtcblx0XHRjb25zdCB0aWNrZXRFbnRpdGllc0J5RGF0ZUlkcyA9IHVzZVJlZigge30gKTtcblx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnRcblx0XHRcdGFzc2lnbm1lbnRDb3VudHM9eyBhc3NpZ25tZW50Q291bnRzIH1cblx0XHRcdHRpY2tldEVudGl0aWVzQnlEYXRlSWRzPXsgdGlja2V0RW50aXRpZXNCeURhdGVJZHMgfVxuXHRcdFx0eyAuLi5wcm9wcyB9XG5cdFx0Lz47XG5cdH0sXG5cdHdpdGhTZWxlY3QoICggc2VsZWN0LCBvd25Qcm9wcyApID0+IHtcblx0XHRjb25zdCB7XG5cdFx0XHRkYXRlRW50aXR5LFxuXHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdFx0dGlja2V0RW50aXR5LFxuXHRcdFx0dGlja2V0RW50aXRpZXMsXG5cdFx0XHRlbnRpdGllcyA9IFtdLFxuXHRcdFx0YXNzaWdubWVudENvdW50cyxcblx0XHRcdHRpY2tldEVudGl0aWVzQnlEYXRlSWRzLFxuXHRcdH0gPSBvd25Qcm9wcztcblx0XHRjb25zdCBkdG1Qcm9wcyA9IHtcblx0XHRcdGVudGl0aWVzLFxuXHRcdFx0dGlja2V0RW50aXRpZXMsXG5cdFx0XHRkYXRlRW50aXRpZXMsXG5cdFx0XHRub3RpY2U6IF9fKFxuXHRcdFx0XHQnbG9hZGluZyBldmVudCBkYXRlIHRpY2tldCBhc3NpZ25tZW50cycsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdCksXG5cdFx0fTtcblx0XHRjb25zdCB7IGdldFJlbGF0ZWRFbnRpdGllcyB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXG5cdFx0Ly8gaW5pdGlhbCBzZXR1cCBiYXNlZCBvbiBpbmNvbWluZyBlbnRpdHlcblx0XHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBkYXRlRW50aXR5LCAnZGF0ZXRpbWUnICkgKSB7XG5cdFx0XHRkdG1Qcm9wcy5lbnRpdGllcyA9IFsgZGF0ZUVudGl0eSBdO1xuXHRcdH0gZWxzZSBpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksICd0aWNrZXQnICkgKSB7XG5cdFx0XHRkdG1Qcm9wcy5lbnRpdGllcyA9IHNvcnREYXRlRW50aXRpZXNMaXN0KCBkYXRlRW50aXRpZXMgKTtcblx0XHRcdGR0bVByb3BzLnRpY2tldEVudGl0aWVzID0gWyB0aWNrZXRFbnRpdHkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZHRtUHJvcHMuZW50aXRpZXMgPSBzb3J0RGF0ZUVudGl0aWVzTGlzdCggZGF0ZUVudGl0aWVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gbmVlZCB0byBzZXR1cCB0aGUgYXNzaWdubWVudENvdW50cyBmb3IgYWxsIHRoZSB0aWNrZXRzIGFuZCBhbGwgdGhlIGRhdGVzIVxuXHRcdGR0bVByb3BzLmVudGl0aWVzLmZvckVhY2goICggZGF0ZSApID0+IHtcblx0XHRcdGlmICggdHlwZW9mIGFzc2lnbm1lbnRDb3VudHMuY3VycmVudC5kYXRlc1sgZGF0ZS5pZCBdID09PSAndW5kZWZpbmVkJyApIHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZFRpY2tldHMgPSBnZXRSZWxhdGVkRW50aXRpZXMoIGRhdGUsICd0aWNrZXQnICk7XG5cdFx0XHRcdHRpY2tldEVudGl0aWVzQnlEYXRlSWRzLmN1cnJlbnRbIGRhdGUuaWQgXSA9IHJlbGF0ZWRUaWNrZXRzO1xuXHRcdFx0XHRhc3NpZ25tZW50Q291bnRzLmN1cnJlbnQuZGF0ZXNbIGRhdGUuaWQgXSA9IHJlbGF0ZWRUaWNrZXRzLmxlbmd0aCB8fCAwO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRkdG1Qcm9wcy50aWNrZXRFbnRpdGllcy5mb3JFYWNoKCAoIHRpY2tldCApID0+IHtcblx0XHRcdGlmICggdHlwZW9mIGFzc2lnbm1lbnRDb3VudHMuY3VycmVudC50aWNrZXRzWyB0aWNrZXQuaWQgXSA9PT0gJ3VuZGVmaW5lZCcgKSB7XG5cdFx0XHRcdGFzc2lnbm1lbnRDb3VudHMuY3VycmVudC50aWNrZXRzWyB0aWNrZXQuaWQgXSA9IGdldFJlbGF0ZWRFbnRpdGllcyhcblx0XHRcdFx0XHR0aWNrZXQsXG5cdFx0XHRcdFx0J2RhdGV0aW1lJ1xuXHRcdFx0XHQpLmxlbmd0aCB8fCAwO1xuXHRcdFx0XHQvLyBubyBuZWVkIHRvIHNldCB0aWNrZXRFbnRpdGllc0J5RGF0ZUlkcyBoZXJlIGFzXG5cdFx0XHRcdC8vIHRob3NlIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gc2V0dXAgZm9yIGFsbCBkYXRlcy5cblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIGR0bVByb3BzO1xuXHR9ICksXG5cdCggV3JhcHBlZENvbXBvbmVudCApID0+ICgge1xuXHRcdGFzc2lnbm1lbnRDb3VudHMsXG5cdFx0ZW50aXRpZXM6IGRhdGVFbnRpdGllcyxcblx0XHR0aWNrZXRFbnRpdGllcyxcblx0XHR0aWNrZXRFbnRpdGllc0J5RGF0ZUlkcyxcblx0XHQuLi5vdGhlclByb3BzXG5cdH0gKSA9PiB7XG5cdFx0Y29uc3QgWyBhc3NpZ25lZFN0YXRlLCBzZXRBc3NpZ25lZFN0YXRlIF0gPSB1c2VTdGF0ZShcblx0XHRcdHsgYXNzaWduZWQ6IHt9LCByZW1vdmVkOiB7fSB9XG5cdFx0KTtcblx0XHRjb25zdCBbXG5cdFx0XHRoYXNOb0Fzc2lnbm1lbnRzLFxuXHRcdFx0bm9Bc3NpZ25tZW50c01lc3NhZ2UsXG5cdFx0XHR1cGRhdGVkQXNzaWdubWVudENvdW50cyxcblx0XHRdID0gdXNlQXNzaWdubWVudHNDYWxjdWxhdG9yKFxuXHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdFx0dGlja2V0RW50aXRpZXMsXG5cdFx0XHRhc3NpZ25tZW50Q291bnRzLmN1cnJlbnQsXG5cdFx0XHRhc3NpZ25lZFN0YXRlXG5cdFx0KTtcblxuXHRcdHJldHVybiA8V3JhcHBlZENvbXBvbmVudFxuXHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdGFzc2lnbm1lbnRDb3VudHM9eyB1cGRhdGVkQXNzaWdubWVudENvdW50cyB9XG5cdFx0XHRlbnRpdGllcz17IGRhdGVFbnRpdGllcyB9XG5cdFx0XHR0aWNrZXRFbnRpdGllcz17IHRpY2tldEVudGl0aWVzIH1cblx0XHRcdHRpY2tldEVudGl0aWVzQnlEYXRlSWRzPXsgdGlja2V0RW50aXRpZXNCeURhdGVJZHMuY3VycmVudCB9XG5cdFx0XHRhc3NpZ25lZFN0YXRlPXsgYXNzaWduZWRTdGF0ZSB9XG5cdFx0XHRzZXRBc3NpZ25lZFN0YXRlPXsgc2V0QXNzaWduZWRTdGF0ZSB9XG5cdFx0XHRoYXNOb0Fzc2lnbm1lbnRzPXsgaGFzTm9Bc3NpZ25tZW50cyB9XG5cdFx0XHRub0Fzc2lnbm1lbnRzTWVzc2FnZT17IG5vQXNzaWdubWVudHNNZXNzYWdlIH1cblx0XHQvPjtcblx0fSxcblx0KCBXcmFwcGVkQ29tcG9uZW50ICkgPT4gKCB7XG5cdFx0dG9nZ2xlRWRpdG9yLFxuXHRcdG9uVXBkYXRlID0gKCkgPT4gbnVsbCxcblx0XHRoYXNOb0Fzc2lnbm1lbnRzLFxuXHRcdG5vQXNzaWdubWVudHNNZXNzYWdlLFxuXHRcdC4uLm90aGVyUHJvcHNcblx0fSApID0+IHtcblx0XHRjb25zdCB0b2dnbGVUaWNrZXRBc3NpZ25tZW50c01hbmFnZXIgPSB1c2VDYWxsYmFjayggKCB1cGRhdGUgPSBmYWxzZSApID0+IHtcblx0XHRcdGlmICggaGFzTm9Bc3NpZ25tZW50cyApIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFsZXJ0XG5cdFx0XHRcdHdpbmRvdy5hbGVydCggbm9Bc3NpZ25tZW50c01lc3NhZ2UgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCB1cGRhdGUgKSB7XG5cdFx0XHRcdG9uVXBkYXRlKCk7XG5cdFx0XHR9XG5cdFx0XHR0b2dnbGVFZGl0b3IoKTtcblx0XHR9LCBbIGhhc05vQXNzaWdubWVudHMgXSApO1xuXHRcdHJldHVybiA8V3JhcHBlZENvbXBvbmVudFxuXHRcdFx0dG9nZ2xlRWRpdG9yPXsgdG9nZ2xlVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyIH1cblx0XHRcdGhhc05vQXNzaWdubWVudHM9eyBoYXNOb0Fzc2lnbm1lbnRzIH1cblx0XHRcdG5vQXNzaWdubWVudHNNZXNzYWdlPXsgbm9Bc3NpZ25tZW50c01lc3NhZ2UgfVxuXHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHQvPjtcblx0fSxcblx0d2l0aEVkaXRvck1vZGFsKCB7XG5cdFx0dGl0bGU6IF9fKCAnRXZlbnQgRGF0ZSBUaWNrZXQgQXNzaWdubWVudHMnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0Y3VzdG9tQ2xhc3M6ICdlZS1ldmVudC1kYXRlLXRpY2tldHMtbWFuYWdlci1tb2RhbCcsXG5cdFx0Y2xvc2VCdXR0b25MYWJlbDogX18oICdjbG9zZSBldmVudCBkYXRlIHRpY2tldHMgbWFuYWdlcicsXG5cdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0KSxcblx0fSApLFxuXHR3aXRoRm9ybUNvbnRhaW5lckFuZFBsYWNlaG9sZGVyLFxuXHR3aXRoRW50aXR5UGFnaW5hdGlvbigge1xuXHRcdHJldHVybkFzUHJvcDogdHJ1ZSxcblx0XHRlbnRpdGllc1BlclBhZ2U6IDYsXG5cdFx0cG9zaXRpb246ICdib3R0b20nLFxuXHR9ICksXG5dICkoIFRpY2tldEFzc2lnbm1lbnRzTWFuYWdlck1vZGFsICk7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXJcIjpcImVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyXCIsXCJlZS10YW0tZGF0ZXMtaGVhZGVyXCI6XCJlZS10YW0tZGF0ZXMtaGVhZGVyXCIsXCJlZS10YW0tdGlja2V0LWhlYWRlci1kaXZcIjpcImVlLXRhbS10aWNrZXQtaGVhZGVyLWRpdlwiLFwiZWUtdGFtLXRpY2tldC1oZWFkZXItcHJpY2VcIjpcImVlLXRhbS10aWNrZXQtaGVhZGVyLXByaWNlXCIsXCJlZS10YW0tdGlja2V0LWhlYWRlci1zdGF0dXNcIjpcImVlLXRhbS10aWNrZXQtaGVhZGVyLXN0YXR1c1wiLFwiZWUtdGFtLXRpY2tldC1oZWFkZXItdGl0bGVcIjpcImVlLXRhbS10aWNrZXQtaGVhZGVyLXRpdGxlXCIsXCJlZS10YW0tdGlja2V0LWhlYWRlci1kYXRlXCI6XCJlZS10YW0tdGlja2V0LWhlYWRlci1kYXRlXCIsXCJlZS10YW0tZGF0ZS1pZFwiOlwiZWUtdGFtLWRhdGUtaWRcIixcImVlLXRhbS10aWNrZXQtaWRcIjpcImVlLXRhbS10aWNrZXQtaWRcIixcImVlLXRhbS15ZWFyLXJvd1wiOlwiZWUtdGFtLXllYXItcm93XCIsXCJlZS10YW0tZGF0ZS1sYWJlbFwiOlwiZWUtdGFtLWRhdGUtbGFiZWxcIixcImVlLXRhbS1kYXRlLXJvd1wiOlwiZWUtdGFtLWRhdGUtcm93XCIsXCJlZS10YW0tZGF0ZS1sYWJlbC1kaXZcIjpcImVlLXRhbS1kYXRlLWxhYmVsLWRpdlwiLFwiZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXJcIjpcImVlLWNhbGVuZGFyLXBhZ2UtZGF0ZS13cmFwcGVyXCIsXCJlZS10YW0tZGF0ZS1sYWJlbC10ZXh0XCI6XCJlZS10YW0tZGF0ZS1sYWJlbC10ZXh0XCIsXCJlZS10YW0tZGF0ZS1yb3ctdGlja2V0XCI6XCJlZS10YW0tZGF0ZS1yb3ctdGlja2V0XCIsXCJjb21wb25lbnRzLWljb24tYnV0dG9uXCI6XCJjb21wb25lbnRzLWljb24tYnV0dG9uXCIsXCJlZS10YW0tdGlja2V0LXJlbGF0aW9uLWJ1dHRvblwiOlwiZWUtdGFtLXRpY2tldC1yZWxhdGlvbi1idXR0b25cIixcImRhc2hpY29uXCI6XCJkYXNoaWNvblwiLFwiZWUtdGFtLWFzc2lnbm1lbnRzLWVycm9yXCI6XCJlZS10YW0tYXNzaWdubWVudHMtZXJyb3JcIixcImVlLXRhbS1uby10aWNrZXQtcmVsYXRpb25cIjpcImVlLXRhbS1uby10aWNrZXQtcmVsYXRpb25cIixcImVlLXRhbS1oYXMtdGlja2V0LXJlbGF0aW9uXCI6XCJlZS10YW0taGFzLXRpY2tldC1yZWxhdGlvblwiLFwiZWUtdGFtLWFkZC10aWNrZXQtcmVsYXRpb25cIjpcImVlLXRhbS1hZGQtdGlja2V0LXJlbGF0aW9uXCIsXCJlZS10YW0tcmVtb3ZlLXRpY2tldC1yZWxhdGlvblwiOlwiZWUtdGFtLXJlbW92ZS10aWNrZXQtcmVsYXRpb25cIixcImVlLXJUYWJsZVwiOlwiZWUtclRhYmxlXCIsXCJlZS1yVGFibGUtYm9keVwiOlwiZWUtclRhYmxlLWJvZHlcIixcImVlLXJUYWJsZS1ib2R5LXJvd1wiOlwiZWUtclRhYmxlLWJvZHktcm93XCIsXCJlZS1yVGFibGUtYm9keS10ZFwiOlwiZWUtclRhYmxlLWJvZHktdGRcIixcImVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVyXCI6XCJlZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlclwiLFwiZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZVwiOlwiZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZVwifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgRnJhZ21lbnQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWwgZnJvbSAnLi90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlci1tb2RhbCc7XG5cbi8qKlxuICogVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWxcbiAqIGNvbnRyb2xzIHRvZ2dsaW5nIG9mIHRoZSBtb2RhbFxuICogd3JhcHMgdGhlIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSB3aXRoVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWxcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBtb2RhbFByb3BzQ2FsbGJhY2sgT3ZlcnJpZGVzIGZvciB0aGUgbW9kYWwgcHJvcHMgc2V0IG9uIHRoZVxuICogbWFuYWdlci4gIFRoaXMgcmVjZWl2ZXMgYG93blByb3BzYCBhcyBhbiBhcmd1bWVudC5cbiAqXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gQSBjb21wb3NlZCBjb21wb25lbnRcbiAqL1xuY29uc3Qgd2l0aFRpY2tldEFzc2lnbm1lbnRzTWFuYWdlck1vZGFsID0gKFxuXHRtb2RhbFByb3BzQ2FsbGJhY2sgPSAoKSA9PiBudWxsXG4pID0+IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiAoIHByb3BzICkgPT4ge1xuXHRcdGNvbnN0IHtcblx0XHRcdGRhdGVFbnRpdHksXG5cdFx0XHR0aWNrZXRFbnRpdHksXG5cdFx0fSA9IHByb3BzO1xuXHRcdGNvbnN0IFsgc2hvd01hbmFnZXIsIHNldFNob3dNYW5hZ2VyIF0gPSB1c2VTdGF0ZSggZmFsc2UgKTtcblx0XHRjb25zdCB0b2dnbGVNYW5hZ2VyID0gdXNlQ2FsbGJhY2soICggZXZlbnQgKSA9PiB7XG5cdFx0XHRpZiAoIGV2ZW50ICkge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHRcdHNldFNob3dNYW5hZ2VyKFxuXHRcdFx0XHQoIHByZXZTaG93TWFuYWdlciApID0+ICEgcHJldlNob3dNYW5hZ2VyXG5cdFx0XHQpO1xuXHRcdH0sIFtdICk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PFdyYXBwZWRDb21wb25lbnRcblx0XHRcdFx0XHR7IC4uLnByb3BzIH1cblx0XHRcdFx0XHR0aWNrZXRBc3NpZ25tZW50c0lzT3Blbj17IHNob3dNYW5hZ2VyIH1cblx0XHRcdFx0XHR0b2dnbGVUaWNrZXRBc3NpZ25tZW50cz17IHRvZ2dsZU1hbmFnZXIgfVxuXHRcdFx0XHQvPlxuXHRcdFx0XHQ8VGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWxcblx0XHRcdFx0XHRtb2RhbFByb3BzPXsgbW9kYWxQcm9wc0NhbGxiYWNrKCBwcm9wcyApIH1cblx0XHRcdFx0XHRkYXRlRW50aXR5PXsgZGF0ZUVudGl0eSB9XG5cdFx0XHRcdFx0dGlja2V0RW50aXR5PXsgdGlja2V0RW50aXR5IH1cblx0XHRcdFx0XHRlZGl0b3JPcGVuPXsgc2hvd01hbmFnZXIgfVxuXHRcdFx0XHRcdHRvZ2dsZUVkaXRvcj17IHRvZ2dsZU1hbmFnZXIgfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9LFxuXHQnd2l0aFRpY2tldEFzc2lnbm1lbnRzTWFuYWdlck1vZGFsJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFRpY2tldEFzc2lnbm1lbnRzTWFuYWdlck1vZGFsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoQ29weVRpY2tldEVudGl0eSB9IGZyb20gJy4vd2l0aC1jb3B5LXRpY2tldC1lbnRpdHknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoVHJhc2hUaWNrZXRFbnRpdHkgfSBmcm9tICcuL3dpdGgtdHJhc2gtdGlja2V0LWVudGl0eSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgd2l0aERpc3BhdGNoIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyB0aWNrZXRNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcblxuY29uc3QgREVGQVVMVF9ESVNQQVRDSCA9IHsgY29weVRpY2tldEVudGl0eTogKCkgPT4gZmFsc2UgfTtcblxuY29uc3Qgd2l0aENvcHlUaWNrZXRFbnRpdHkgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0d2l0aERpc3BhdGNoKCAoXG5cdFx0ZGlzcGF0Y2gsXG5cdFx0e1xuXHRcdFx0dGlja2V0RW50aXR5LFxuXHRcdFx0ZGF0ZUVudGl0aWVzLFxuXHRcdH0sXG5cdFx0eyBzZWxlY3QgfVxuXHQpID0+IHtcblx0XHRjb25zdCB7IE1PREVMX05BTUU6IFRJQ0tFVCB9ID0gdGlja2V0TW9kZWw7XG5cdFx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksIFRJQ0tFVCApICkge1xuXHRcdFx0cmV0dXJuIERFRkFVTFRfRElTUEFUQ0g7XG5cdFx0fVxuXHRcdGNvbnN0IHtcblx0XHRcdGNyZWF0ZUVudGl0eSxcblx0XHRcdGNyZWF0ZVJlbGF0aW9ucyxcblx0XHR9ID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0Y29uc3QgeyBnZXRSZWxhdGVkRW50aXRpZXMgfSA9IHNlbGVjdCggJ2V2ZW50ZXNwcmVzc28vY29yZScgKTtcblx0XHRjb25zdCBjb3B5VGlja2V0RW50aXR5ID0gYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgbmV3VGlja2V0ID0gYXdhaXQgY3JlYXRlRW50aXR5KCBUSUNLRVQsIHRpY2tldEVudGl0eS5mb3JDbG9uZSApO1xuXHRcdFx0Y3JlYXRlUmVsYXRpb25zKFxuXHRcdFx0XHRUSUNLRVQsXG5cdFx0XHRcdG5ld1RpY2tldC5pZCxcblx0XHRcdFx0J2RhdGV0aW1lJyxcblx0XHRcdFx0ZGF0ZUVudGl0aWVzXG5cdFx0XHQpO1xuXHRcdFx0Ly8gQHRvZG8sIHRoaXMgaXMgbm90IHF1aXRlIGRvbmUgYmVjYXVzZSBpdCBuZWVkcyB0byBhZGQgdGhlIHJlbGF0aW9uc1xuXHRcdFx0Ly8gb2YgdGhlIHByaWNlcyB0byB0aGUgcHJpY2VUeXBlLlxuXHRcdFx0Ly8gZ2V0IHJlbGF0ZWQgcHJpY2VzIGNsb25lLCBhbmQgYWRkLlxuXHRcdFx0Y29uc3QgcmVsYXRlZFByaWNlcyA9IGdldFJlbGF0ZWRFbnRpdGllcyggdGlja2V0RW50aXR5LCAncHJpY2VzJyApO1xuXHRcdFx0aWYgKCByZWxhdGVkUHJpY2VzICkge1xuXHRcdFx0XHRjb25zdCBuZXdQcmljZXMgPSBbXTtcblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcmVsYXRlZFByaWNlcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRjb25zdCBuZXdQcmljZSA9IGF3YWl0IGNyZWF0ZUVudGl0eShcblx0XHRcdFx0XHRcdCdwcmljZScsXG5cdFx0XHRcdFx0XHRyZWxhdGVkUHJpY2VzWyBpIF0uZm9yQ2xvbmVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdG5ld1ByaWNlcy5wdXNoKCBuZXdQcmljZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNyZWF0ZVJlbGF0aW9ucyhcblx0XHRcdFx0XHRUSUNLRVQsXG5cdFx0XHRcdFx0bmV3VGlja2V0LmlkLFxuXHRcdFx0XHRcdCdwcmljZScsXG5cdFx0XHRcdFx0bmV3UHJpY2VzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4geyBjb3B5VGlja2V0RW50aXR5IH07XG5cdH0gKSxcblx0J3dpdGhDb3B5VGlja2V0RW50aXR5J1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aENvcHlUaWNrZXRFbnRpdHk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgd2l0aERpc3BhdGNoIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyB0aWNrZXRNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbmNvbnN0IHsgY29uZmlybSB9ID0gd2luZG93O1xuXG5jb25zdCBERUZBVUxUX0RJU1BBVENIID0geyB0cmFzaFRpY2tldEVudGl0eTogKCkgPT4gZmFsc2UgfTtcblxuY29uc3Qgd2l0aFRyYXNoVGlja2V0RW50aXR5ID0gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdHdpdGhEaXNwYXRjaCggKFxuXHRcdGRpc3BhdGNoLFxuXHRcdHsgdGlja2V0RW50aXR5IH0sXG5cdCkgPT4ge1xuXHRcdGNvbnN0IHsgTU9ERUxfTkFNRTogVElDS0VUIH0gPSB0aWNrZXRNb2RlbDtcblx0XHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIHRpY2tldEVudGl0eSwgVElDS0VUICkgKSB7XG5cdFx0XHRyZXR1cm4gREVGQVVMVF9ESVNQQVRDSDtcblx0XHR9XG5cdFx0Y29uc3QgdHJhc2hUaWNrZXRFbnRpdHkgPSAoKSA9PiB7XG5cdFx0XHRpZiAoICEgY29uZmlybShcblx0XHRcdFx0X18oXG5cdFx0XHRcdFx0J0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB0aWNrZXQ/Jyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdClcblx0XHRcdCkgKSB7XG5cdFx0XHRcdHJldHVybiBERUZBVUxUX0RJU1BBVENIO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgeyB0cmFzaEVudGl0eUJ5SWQgfSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0dHJhc2hFbnRpdHlCeUlkKCBUSUNLRVQsIHRpY2tldEVudGl0eS5pZCApO1xuXHRcdH07XG5cdFx0cmV0dXJuIHsgdHJhc2hUaWNrZXRFbnRpdHkgfTtcblx0fSApLFxuXHQnd2l0aFRyYXNoVGlja2V0RW50aXR5J1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFRyYXNoVGlja2V0RW50aXR5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgY29tcG9zZSB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyBGcmFnbWVudCwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgYXBwbHlGaWx0ZXJzIH0gZnJvbSAnQHdvcmRwcmVzcy9ob29rcyc7XG5pbXBvcnQge1xuXHREcm9wRG93bk1lbnUsXG5cdEVudGl0eUFjdGlvbk1lbnVJdGVtLFxuXHRFc3ByZXNzb0ljb24sXG5cdEljb25NZW51SXRlbSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBfXywgc3ByaW50ZiwgX3ggfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHdpdGhFZGl0b3JUaWNrZXREYXRlRW50aXRpZXMgfSBmcm9tICcuLi8uLi8uLi9ob2NzJztcbmltcG9ydCB3aXRoVGlja2V0RW50aXR5Rm9ybU1vZGFsIGZyb20gJy4uL2VkaXQtZm9ybS93aXRoLXRpY2tldC1lbnRpdHktZm9ybS1tb2RhbCc7XG5pbXBvcnQgeyB3aXRoQ29weVRpY2tldEVudGl0eSwgd2l0aFRyYXNoVGlja2V0RW50aXR5IH0gZnJvbSAnLi4vYWN0aW9uLWhhbmRsZXJzJztcbmltcG9ydCB7XG5cdFRpY2tldFByaWNlQ2FsY3VsYXRvck1lbnVJdGVtLFxuXHR3aXRoVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybU1vZGFsLFxufSBmcm9tICcuLi9wcmljZS1jYWxjdWxhdG9yJztcbmltcG9ydCB7IHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCB9IGZyb20gJy4uLy4uLy4uL3RpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyJztcbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vLyBAdG9kbyBtb3ZlIHRoZSB2YXJpb3VzIHJlbmRlciBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBvciB3cmFwIHRoZW0gd2l0aCBgdXNlQ2FsbGJhY2tgIGFuZCB0aGUgYXBwcm9wcmlhdGUgZGVwZW5kZW5jaWVzLlxuLy8gcmlnaHQgbm93IHRoZXkgYXJlIHJlZ2VuZXJhdGVkIGV2ZXJ5IHRpbWUgRWRpdG9yVGlja2V0QWN0aW9uc01lbnUgaXMgcmUtcmVuZGVyZWQuXG5cbmNvbnN0IEVkaXRvclRpY2tldEFjdGlvbnNNZW51ID0gKCB7XG5cdHRpY2tldEVudGl0eSxcblx0dG9nZ2xlVGlja2V0RWRpdG9yLFxuXHRkYXRlRW50aXRpZXMgPSBbXSxcblx0bm9CYXNlUHJpY2UgPSBmYWxzZSxcblx0Y29weVRpY2tldEVudGl0eSxcblx0dHJhc2hUaWNrZXRFbnRpdHksXG5cdHRvZ2dsZVRpY2tldEFzc2lnbm1lbnRzLFxuXHR0b2dnbGVDYWxjdWxhdG9yLFxuXHRkb1JlZnJlc2gsXG59ICkgPT4ge1xuXHRjb25zdCBtYWluRHJvcERvd25NZW51ID0gKCkgPT4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RHJvcERvd25NZW51XG5cdFx0XHRcdHRvb2x0aXA9eyBfXyggJ3RpY2tldCBtYWluIG1lbnUnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuXHRcdFx0XHRodG1sQ2xhc3M9eyBgZWRpdG9yLXRpY2tldC0keyB0aWNrZXRFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRtZW51SXRlbXM9eyBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dGl0bGU6IF9fKCAnZWRpdCB0aWNrZXQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdFx0XHRpY29uOiAnZWRpdCcsXG5cdFx0XHRcdFx0XHRvbkNsaWNrOiB0b2dnbGVUaWNrZXRFZGl0b3IsXG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR0aXRsZTogX18oICdjb3B5IHRpY2tldCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHRcdGljb246ICdhZG1pbi1wYWdlJyxcblx0XHRcdFx0XHRcdG9uQ2xpY2s6ICgpID0+IGNvcHlUaWNrZXRFbnRpdHkoXG5cdFx0XHRcdFx0XHRcdHRpY2tldEVudGl0eSxcblx0XHRcdFx0XHRcdFx0ZGF0ZUVudGl0aWVzXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dGl0bGU6IF9fKCAndHJhc2ggdGlja2V0JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdFx0aWNvbjogJ3RyYXNoJyxcblx0XHRcdFx0XHRcdG9uQ2xpY2s6ICgpID0+IHRyYXNoVGlja2V0RW50aXR5KCB0aWNrZXRFbnRpdHkgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fTtcblxuXHRjb25zdCBhc3NpZ25EYXRlc01lbnVJdGVtID0gKCkgPT4ge1xuXHRcdGNvbnN0IHRvb2x0aXAgPSBpc0VtcHR5KCBkYXRlRW50aXRpZXMgKSA/XG5cdFx0XHRfXyhcblx0XHRcdFx0J3dhcm5pbmchIG5vIGFzc2lnbmVkIHRpY2tldCBkYXRlcyAtIGNsaWNrIHRvIGZpeCcsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdCkgOlxuXHRcdFx0X18oICdhc3NpZ24gdGlja2V0IHRvIGV2ZW50IGRhdGVzJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8SWNvbk1lbnVJdGVtXG5cdFx0XHRcdGluZGV4PXsgMiB9XG5cdFx0XHRcdHRvb2x0aXA9eyB0b29sdGlwIH1cblx0XHRcdFx0aWQ9eyBgYXNzaWduLXRpY2tldC1kYXRlcy10aWNrZXQtJHsgdGlja2V0RW50aXR5LmlkIH1gIH1cblx0XHRcdFx0aHRtbENsYXNzPXsgJ2Fzc2lnbi10aWNrZXQtZGF0ZXMnIH1cblx0XHRcdFx0ZGFzaGljb249eyA8RXNwcmVzc29JY29uIGljb249XCJjYWxlbmRhclwiIC8+IH1cblx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwidG9wIHJpZ2h0XCJcblx0XHRcdFx0b25DbGljaz17IHRvZ2dsZVRpY2tldEFzc2lnbm1lbnRzIH1cblx0XHRcdFx0aXRlbUNvdW50PXsgZGF0ZUVudGl0aWVzLmxlbmd0aCB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG5cblx0Y29uc3QgZ2V0U2lkZWJhck1lbnVJdGVtcyA9ICgpID0+IHtcblx0XHRjb25zdCBzaWRlYmFyTWVudUl0ZW1zID0gW107XG5cdFx0c2lkZWJhck1lbnVJdGVtcy5wdXNoKFxuXHRcdFx0bWFpbkRyb3BEb3duTWVudSgpXG5cdFx0KTtcblx0XHRzaWRlYmFyTWVudUl0ZW1zLnB1c2goXG5cdFx0XHQ8SWNvbk1lbnVJdGVtXG5cdFx0XHRcdGluZGV4PXsgMSB9XG5cdFx0XHRcdHRvb2x0aXA9eyBfXyggJ2VkaXQgdGlja2V0IGRldGFpbHMnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRpZD17IGBlZGl0LXRpY2tldC0keyB0aWNrZXRFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRodG1sQ2xhc3M9XCJlZGl0LXRpY2tldFwiXG5cdFx0XHRcdGRhc2hpY29uPVwiZWRpdFwiXG5cdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInRvcCByaWdodFwiXG5cdFx0XHRcdG9uQ2xpY2s9eyB0b2dnbGVUaWNrZXRFZGl0b3IgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdHNpZGViYXJNZW51SXRlbXMucHVzaChcblx0XHRcdDxUaWNrZXRQcmljZUNhbGN1bGF0b3JNZW51SXRlbVxuXHRcdFx0XHR0aWNrZXRFbnRpdHk9eyB0aWNrZXRFbnRpdHkgfVxuXHRcdFx0XHRub0Jhc2VQcmljZT17IG5vQmFzZVByaWNlIH1cblx0XHRcdFx0ZG9SZWZyZXNoPXsgZG9SZWZyZXNoIH1cblx0XHRcdFx0dG9nZ2xlQ2FsY3VsYXRvcj17IHRvZ2dsZUNhbGN1bGF0b3IgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdHNpZGViYXJNZW51SXRlbXMucHVzaCggYXNzaWduRGF0ZXNNZW51SXRlbSgpICk7XG5cdFx0LyoqXG5cdFx0ICogQHRvZG8sIFRoaXMgY291bGQgYmUgZnJhZ2lsZSBiZWNhdXNlIG9mIHJlbmRlciBleGVjdXRpb25cblx0XHQgKiBXZSBzaG91bGQgZXhwbG9yZSBpbXBsZW1lbnRpbmcgYSBzbG90L2ZpbGwgcGF0dGVybiBoZXJlLlxuXHRcdCAqL1xuXHRcdHJldHVybiBhcHBseUZpbHRlcnMoXG5cdFx0XHQnRkhFRV9fRWRpdG9yRGF0ZXNfX0VkaXRvckRhdGVTaWRlYmFyX19TaWRlYmFyTWVudUl0ZW1zJyxcblx0XHRcdHNpZGViYXJNZW51SXRlbXMsXG5cdFx0XHR0aWNrZXRFbnRpdHlcblx0XHQpO1xuXHR9O1xuXG5cdGNvbnN0IHNpZGViYXJNZW51ID0gKCBzaWRlYmFyTWVudUl0ZW1zICkgPT4ge1xuXHRcdHJldHVybiBzaWRlYmFyTWVudUl0ZW1zLm1hcChcblx0XHRcdCggc2lkZWJhck1lbnVJdGVtLCBpbmRleCApID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRzaWRlYmFyTWVudUl0ZW0gJiYgc2lkZWJhck1lbnVJdGVtLnR5cGUgJiZcblx0XHRcdFx0XHQoXG5cdFx0XHRcdFx0XHRzaWRlYmFyTWVudUl0ZW0udHlwZSA9PT0gRHJvcERvd25NZW51IHx8XG5cdFx0XHRcdFx0XHRzaWRlYmFyTWVudUl0ZW0udHlwZSA9PT0gRW50aXR5QWN0aW9uTWVudUl0ZW0gfHxcblx0XHRcdFx0XHRcdHNpZGViYXJNZW51SXRlbS50eXBlID09PSBJY29uTWVudUl0ZW0gfHxcblx0XHRcdFx0XHRcdGlzVmFsaWRFbGVtZW50KCBzaWRlYmFyTWVudUl0ZW0gKVxuXHRcdFx0XHRcdCkgP1xuXHRcdFx0XHRcdFx0PEZyYWdtZW50IGtleT17IGluZGV4IH0+XG5cdFx0XHRcdFx0XHRcdHsgc2lkZWJhck1lbnVJdGVtIH1cblx0XHRcdFx0XHRcdDwvRnJhZ21lbnQ+IDpcblx0XHRcdFx0XHRcdG51bGxcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0KTtcblx0fTtcblxuXHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIHRpY2tldEVudGl0eSwgJ3RpY2tldCcgKSApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGNvbnN0IHNpZGViYXJNZW51SXRlbXMgPSBnZXRTaWRlYmFyTWVudUl0ZW1zKCk7XG5cblx0cmV0dXJuIHRpY2tldEVudGl0eSAmJiB0aWNrZXRFbnRpdHkuaWQgPyAoXG5cdFx0PGRpdlxuXHRcdFx0aWQ9eyBgZWUtZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnUtJHsgdGlja2V0RW50aXR5LmlkIH1gIH1cblx0XHRcdGNsYXNzTmFtZT17ICdlZS1lZGl0b3ItdGlja2V0LWFjdGlvbnMtbWVudScgfVxuXHRcdD5cblx0XHRcdHsgc2lkZWJhck1lbnUoIHNpZGViYXJNZW51SXRlbXMgKSB9XG5cdFx0PC9kaXY+XG5cdCkgOiBudWxsO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZSggW1xuXHR3aXRoVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybU1vZGFsLFxuXHR3aXRoVGlja2V0RW50aXR5Rm9ybU1vZGFsLFxuXHR3aXRoVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWwoICggeyB0aWNrZXRFbnRpdHkgfSApID0+IChcblx0XHR7XG5cdFx0XHR0aXRsZTogc3ByaW50Zihcblx0XHRcdFx0X3goXG5cdFx0XHRcdFx0J0RhdGUgQXNzaWdubWVudHMgZm9yIFRpY2tldDogICUxJHMnLFxuXHRcdFx0XHRcdCdEYXRlIEFzc2lnbm1lbnRzIGZvciBUaWNrZXQ6ICBUaWNrZXQgbmFtZScsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHQpLFxuXHRcdFx0XHR0aWNrZXRFbnRpdHkubmFtZVxuXHRcdFx0KSxcblx0XHRcdGNsb3NlQnV0dG9uTGFiZWw6IG51bGwsXG5cdFx0fVxuXHQpICksXG5cdHdpdGhFZGl0b3JUaWNrZXREYXRlRW50aXRpZXMsXG5cdHdpdGhDb3B5VGlja2V0RW50aXR5LFxuXHR3aXRoVHJhc2hUaWNrZXRFbnRpdHksXG5dICkoIEVkaXRvclRpY2tldEFjdGlvbnNNZW51ICk7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEVkaXRvclRpY2tldEFjdGlvbnNNZW51IH0gZnJvbSAnLi9lZGl0b3ItdGlja2V0LWFjdGlvbnMtbWVudSc7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnVcIjpcImVlLWVkaXRvci10aWNrZXQtYWN0aW9ucy1tZW51XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGlja2V0RW50aXR5Rm9ybSB9IGZyb20gJy4vdGlja2V0LWVudGl0eS1mb3JtJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aFRpY2tldEVudGl0eUZvcm1Nb2RhbCB9IGZyb20gJy4vd2l0aC10aWNrZXQtZW50aXR5LWZvcm0tbW9kYWwnO1xuZXhwb3J0IHsgdGlja2V0RW50aXR5Rm9ybUlucHV0cyB9IGZyb20gJy4vdGlja2V0LWVudGl0eS1mb3JtLWlucHV0cyc7XG5leHBvcnQgeyB0aWNrZXRFbnRpdHlGb3JtU2NoZW1hIH0gZnJvbSAnLi90aWNrZXQtZW50aXR5LWZvcm0tc2NoZW1hJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IF9fLCBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyB2YWxpZGF0aW9ucyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcblx0U2VydmVyRGF0ZVRpbWUgYXMgRGF0ZVRpbWUsXG5cdE1vbmV5LFxuXHRTaXRlQ3VycmVuY3ksXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbHVlLW9iamVjdHMnO1xuXG4vKipcbiAqIHRpY2tldEVudGl0eUZvcm1JbnB1dHNcbiAqIHJldHVybnMgYW4gYXJyYXkgb2YgaW5wdXRzIGNvcnJlc3BvbmRpbmcgdG9cbiAqIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBUaWNrZXQgRW50aXR5XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdGlja2V0RW50aXR5ICBFRSBUaWNrZXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gY2FsY3VsYXRvciBUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtTW9kYWxcbiAqIEBwYXJhbSB7QXJyYXl9IGV4Y2x1ZGUgIEFycmF5IG9mIGZpZWxkIG5hbWVzIHRvIG5vdCBkaXNwbGF5IGlucHV0cyBmb3JcbiAqIEBwYXJhbSB7QXJyYXl9IGN1cnJlbnRWYWx1ZXMgIEFycmF5IG9mIGlucHV0IHZhbHVlc1xuICogQHBhcmFtIHtPYmplY3R9IEZvcm1JbnB1dCBJbnB1dCBvYmplY3QgdG8gdXNlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSByZWNhbGN1bGF0ZUJhc2VQcmljZVxuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBmb3JtXG4gKi9cbmV4cG9ydCBjb25zdCB0aWNrZXRFbnRpdHlGb3JtSW5wdXRzID0gKFxuXHR0aWNrZXRFbnRpdHksXG5cdGNhbGN1bGF0b3IsXG5cdGV4Y2x1ZGUgPSBbXSxcblx0Y3VycmVudFZhbHVlcyA9IFtdLFxuXHRGb3JtSW5wdXQsXG5cdHJlY2FsY3VsYXRlQmFzZVByaWNlLFxuKSA9PiB7XG5cdGlmICggISB0aWNrZXRFbnRpdHkgfHwgKCB0aWNrZXRFbnRpdHkgJiYgISB0aWNrZXRFbnRpdHkuaWQgKSApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRjb25zdCB2YWx1ZXMgPSBjdXJyZW50VmFsdWVzO1xuXHRjb25zdCBwcmVmaXggPSBgZWUtdGlja2V0LSR7IHRpY2tldEVudGl0eS5pZCB9YDtcblx0Y29uc3QgaW5wdXRzID0gW107XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ1RLVF9JRCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImlkXCJcblx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdG5hbWU9eyBgJHsgcHJlZml4IH0taWRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0taWRgIF0gfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnVGlja2V0IElEJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LWlkYCB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAzIH1cblx0XHRcdFx0cmVxdWlyZWRcblx0XHRcdFx0bWluPXsgMCB9XG5cdFx0XHRcdGRpc2FibGVkXG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ25hbWUnICkgPCAwICkge1xuXHRcdGlucHV0cy5wdXNoKFxuXHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRrZXk9XCJuYW1lXCJcblx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LW5hbWVgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tbmFtZWAgXSB8fCAnJyB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdUaWNrZXQgTGFiZWwnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tbmFtZWAgfVxuXHRcdFx0XHRtaW5MZW5ndGg9eyAzIH1cblx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdCggdmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkubmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXF1aXJlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdkZXNjcmlwdGlvbicgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0dHlwZT1cInRleHRhcmVhXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgXSB8fCAnJyB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdEZXNjcmlwdGlvbicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGNoYW5nZUxpc3RlbmVyPXtcblx0XHRcdFx0XHQoIHZhbHVlICkgPT4ge1xuXHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LmRlc2NyaXB0aW9uID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1kZXNjcmlwdGlvbmAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdwcmljZScgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cInByaWNlXCJcblx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdG5hbWU9eyBgJHsgcHJlZml4IH0tcHJpY2VgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tcHJpY2VgIF0gfHwgbnVsbCB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdUaWNrZXQgUHJpY2UnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tcHJpY2VgIH1cblx0XHRcdFx0aGVscFRleHQ9eyBzcHJpbnRmKFxuXHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0J1RoZSBhbW91bnQgb2YgbW9uZXkgY2hhcmdlZCBmb3IgdGhpcyB0aWNrZXQuIExlYXZlIGJsYW5rIHRvIG1ha2UgdGhpcyB0aWNrZXQgc2VsZWN0aW9uIGZyZWUuJXNDbGljayB0aGUgYnV0dG9uIGFmdGVyIHRoZSBpbnB1dCB0byB1c2UgdGhlIFRpY2tldCBQcmljZSBDYWxjdWxhdG9yICh3YXJuaW5nOiB3aWxsIGNsb3NlIHRoaXMgZWRpdCBmb3JtKScsXG5cdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHQnIFxcbidcblx0XHRcdFx0KSB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAzIH1cblx0XHRcdFx0bWluPXsgMCB9XG5cdFx0XHRcdHN0ZXA9XCIwLjAxXCJcblx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdCggdmFsdWUsIHByZXZWYWx1ZSApID0+IHtcblx0XHRcdFx0XHRcdGlmICggdmFsdWUgIT09IHByZXZWYWx1ZSApIHtcblx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnByaWNlID0gbmV3IE1vbmV5KFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlIHx8IDAsXG5cdFx0XHRcdFx0XHRcdFx0U2l0ZUN1cnJlbmN5XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJlY2FsY3VsYXRlQmFzZVByaWNlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGFmdGVySW5wdXQ9eyBjYWxjdWxhdG9yIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICd0YXhhYmxlJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwidGF4YWJsZVwiXG5cdFx0XHRcdHR5cGU9XCJ0b2dnbGVcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXRheGFibGVgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tdGF4YWJsZWAgXSB8fCBmYWxzZSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdUaWNrZXQgaXMgVGF4YWJsZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS10YXhhYmxlYCB9XG5cdFx0XHRcdGhlbHBUZXh0SWZDaGVja2VkPXsgX18oXG5cdFx0XHRcdFx0J1RoaXMgdGlja2V0IGlzIHRheGFibGUuIEFsbCBjb25maWd1cmVkIHRheGVzIHdpbGwgYmUnICtcblx0XHRcdFx0XHQnIGFwcGxpZWQgdG8gdGhlIHByaWNlIG9mIHRoaXMgdGlja2V0IHVwb24gcHVyY2hhc2UuICcsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdFx0KSB9XG5cdFx0XHRcdGhlbHBUZXh0SWZOb3RDaGVja2VkPXsgX18oXG5cdFx0XHRcdFx0J2NsaWNrIHRvIG1ha2UgdGhpcyB0aWNrZXQgdGF4YWJsZScsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdFx0KSB9XG5cdFx0XHRcdGNoYW5nZUxpc3RlbmVyPXtcblx0XHRcdFx0XHQoIHZhbHVlICkgPT4ge1xuXHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnRheGFibGUgPSAhISB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDIgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdzdGFydCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cInN0YXJ0XCJcblx0XHRcdFx0dHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1zdGFydGAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1zdGFydGAgXSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdUaWNrZXQgU2FsZXMgU3RhcnQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tc3RhcnRgIH1cblx0XHRcdFx0dmFsaWRhdGlvbnM9eyB2YWxpZGF0aW9ucy5yZXF1aXJlZCB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyA2IH1cblx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdCggdmFsdWUsIHByZXZWYWx1ZSApID0+IHtcblx0XHRcdFx0XHRcdGlmICggdmFsdWUgIT09IHByZXZWYWx1ZSApIHtcblx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnN0YXJ0RGF0ZSA9IG5ldyBEYXRlVGltZSggdmFsdWUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVxdWlyZWRcblx0XHRcdC8+LFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpbmRleE9mKCBleGNsdWRlLCAnZW5kJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwiZW5kXCJcblx0XHRcdFx0dHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1lbmRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tZW5kYCBdIH1cblx0XHRcdFx0bGFiZWw9eyBfXyggJ1RpY2tldCBTYWxlcyBFbmQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tZW5kYCB9XG5cdFx0XHRcdHZhbGlkYXRpb25zPXsgdmFsaWRhdGlvbnMucmVxdWlyZWQgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgNiB9XG5cdFx0XHRcdGNoYW5nZUxpc3RlbmVyPXtcblx0XHRcdFx0XHQoIHZhbHVlLCBwcmV2VmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIHZhbHVlICE9PSBwcmV2VmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHRpY2tldEVudGl0eS5lbmREYXRlID0gbmV3IERhdGVUaW1lKCB2YWx1ZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXF1aXJlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdxdHknICkgPCAwICkge1xuXHRcdGlucHV0cy5wdXNoKFxuXHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRrZXk9XCJxdHlcIlxuXHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1xdHlgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tcXR5YCBdIHx8IEluZmluaXR5IH1cblx0XHRcdFx0bGFiZWw9eyBfXyggJ1F1YW50aXR5JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LXF0eWAgfVxuXHRcdFx0XHRoZWxwVGV4dD17IF9fKFxuXHRcdFx0XHRcdCdUaGUgbWF4aW11bSBudW1iZXIgb2YgdGlja2V0cyBhdmFpbGFibGUgZm9yIHNhbGUuICcgK1xuXHRcdFx0XHRcdCdMZWF2ZSBibGFuayBmb3Igbm8gbGltaXQuJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDMgfVxuXHRcdFx0XHRjaGFuZ2VMaXN0ZW5lcj17XG5cdFx0XHRcdFx0KCB2YWx1ZSApID0+IHtcblx0XHRcdFx0XHRcdHRpY2tldEVudGl0eS5xdHkgPSBwYXJzZUludCggdmFsdWUgfHwgLTEsIDEwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdzb2xkJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwic29sZFwiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXNvbGRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tc29sZGAgXSB8fCAwIH1cblx0XHRcdFx0bGFiZWw9eyBfXyggJ1NvbGQgQ291bnQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0tc29sZGAgfVxuXHRcdFx0XHRoZWxwVGV4dD17IF9fKFxuXHRcdFx0XHRcdCdRdWFudGl0eSBvZiB0aWNrZXRzIHRoYXQgaGF2ZSBiZWVuJyArXG5cdFx0XHRcdFx0JyBzb2xkIGZvciB0aGlzIFRpY2tldCcsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdFx0KSB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAzIH1cblx0XHRcdFx0bWluPXsgMCB9XG5cdFx0XHRcdGRpc2FibGVkXG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ3Jlc2VydmVkJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwicmVzZXJ2ZWRcIlxuXHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1yZXNlcnZlZGAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1yZXNlcnZlZGAgXSB8fCAwIH1cblx0XHRcdFx0bGFiZWw9eyBfXyggJ1Jlc2VydmVkIENvdW50JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LXJlc2VydmVkYCB9XG5cdFx0XHRcdGhlbHBUZXh0PXsgX18oXG5cdFx0XHRcdFx0J1F1YW50aXR5IG9mIHRpY2tldHMgcmVzZXJ2ZWQsJyArXG5cdFx0XHRcdFx0JyBidXQgbm90IHlldCBmdWxseSBwdXJjaGFzZWQnLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMyB9XG5cdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0XHRkaXNhYmxlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICd1c2VzJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwidXNlc1wiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXVzZXNgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tdXNlc2AgXSB8fCBJbmZpbml0eSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdOdW1iZXIgb2YgVXNlcycsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS11c2VzYCB9XG5cdFx0XHRcdGhlbHBUZXh0PXsgc3ByaW50Zihcblx0XHRcdFx0XHRfXyhcblx0XHRcdFx0XHRcdCdDb250cm9scyB0aGUgdG90YWwgbnVtYmVyIG9mIHRpbWVzIHRoaXMgdGlja2V0IGNhbiBiZSB1c2VkLCByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgZGF0ZXMgaXQgaXMgYXNzaWduZWQgdG8uJXNFeGFtcGxlOiBBIHRpY2tldCBtaWdodCBoYXZlIGFjY2VzcyB0byA0IGRpZmZlcmVudCBkYXRlcywgYnV0IHNldHRpbmcgdGhpcyBmaWVsZCB0byAyIHdvdWxkIG1lYW4gdGhhdCB0aGUgdGlja2V0IGNvdWxkIG9ubHkgYmUgdXNlZCB0d2ljZS4gTGVhdmUgYmxhbmsgZm9yIG5vIGxpbWl0LicsXG5cdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0J1xcbidcblx0XHRcdFx0KSB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAzIH1cblx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdCggdmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkudXNlcyA9IHBhcnNlSW50KCB2YWx1ZSB8fCAtMSwgMTAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0bWluPXsgMCB9XG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ3JlcXVpcmVkJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwicmVxdWlyZWRcIlxuXHRcdFx0XHR0eXBlPVwidG9nZ2xlXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1yZXF1aXJlZGAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1yZXF1aXJlZGAgXSB8fCBmYWxzZSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdSZXF1aXJlZCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1yZXF1aXJlZGAgfVxuXHRcdFx0XHRoZWxwVGV4dElmQ2hlY2tlZD17IF9fKFxuXHRcdFx0XHRcdCdUaGlzIHRpY2tldCBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBwdXJjaGFzZWQuIEl0IHdpbGwnICtcblx0XHRcdFx0XHQnIGFwcGVhciBmaXJzdCBpbiBmcm9udGVuZCB0aWNrZXQgbGlzdHMuJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aGVscFRleHRJZk5vdENoZWNrZWQ9eyBfXyhcblx0XHRcdFx0XHQnY2xpY2sgdG8gbWFrZSB0aGlzIHRpY2tldCBhIHJlcXVpcmVkIHNlbGVjdGlvbi4nLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMyB9XG5cdFx0XHRcdGNoYW5nZUxpc3RlbmVyPXtcblx0XHRcdFx0XHQoIHZhbHVlICkgPT4ge1xuXHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnJlcXVpcmVkID0gISEgdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdtaW4nICkgPCAwICkge1xuXHRcdGlucHV0cy5wdXNoKFxuXHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRrZXk9XCJtaW5cIlxuXHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1taW5gIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tbWluYCBdIHx8IG51bGwgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnTWluaW11bSBRdWFudGl0eScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1taW5gIH1cblx0XHRcdFx0aGVscFRleHQ9eyBfXyhcblx0XHRcdFx0XHQnVGhlIG1pbmltdW0gcXVhbnRpdHkgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgZm9yIHRoaXMnICtcblx0XHRcdFx0XHQnIHRpY2tldC4gVXNlIHRoaXMgdG8gY3JlYXRlIHRpY2tldCBidW5kbGVzIG9yIGdyYWR1YXRlZCcgK1xuXHRcdFx0XHRcdCcgcHJpY2luZy4gTGVhdmUgYmxhbmsgZm9yIG5vIG1pbmltdW0uJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdCggdmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkubWluID0gcGFyc2VJbnQoIHZhbHVlIHx8IDAsIDEwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAzIH1cblx0XHRcdFx0bWluPXsgMCB9XG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ21heCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cIm1heFwiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LW1heGAgfVxuXHRcdFx0XHRpbml0aWFsVmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1tYXhgIF0gfHwgSW5maW5pdHkgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnTWF4aW11bSBRdWFudGl0eScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1tYXhgIH1cblx0XHRcdFx0aGVscFRleHQ9eyBfXyhcblx0XHRcdFx0XHQnVGhlIG1heGltdW0gcXVhbnRpdHkgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgZm9yIHRoaXMnICtcblx0XHRcdFx0XHQnIHRpY2tldC4gVXNlIHRoaXMgdG8gY3JlYXRlIHRpY2tldCBidW5kbGVzIG9yIGdyYWR1YXRlZCcgK1xuXHRcdFx0XHRcdCcgcHJpY2luZy4gTGVhdmUgYmxhbmsgZm9yIG5vIG1heGltdW0uJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDMgfVxuXHRcdFx0XHRjaGFuZ2VMaXN0ZW5lcj17XG5cdFx0XHRcdFx0KCB2YWx1ZSApID0+IHtcblx0XHRcdFx0XHRcdHRpY2tldEVudGl0eS5tYXggPSBwYXJzZUludCggdmFsdWUgfHwgLTEsIDEwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdvcmRlcicgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cIm9yZGVyXCJcblx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdG5hbWU9eyBgJHsgcHJlZml4IH0tb3JkZXJgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tb3JkZXJgIF0gfHwgMCB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdEaXNwbGF5IE9yZGVyJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LW9yZGVyYCB9XG5cdFx0XHRcdGlucHV0V2lkdGg9eyAyIH1cblx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdCggdmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkub3JkZXIgPSBwYXJzZUludCggdmFsdWUsIDEwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ2lzRGVmYXVsdCcgKSA8IDAgKSB7XG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cImlzRGVmYXVsdFwiXG5cdFx0XHRcdHR5cGU9XCJ0b2dnbGVcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LWlzLWRlZmF1bHRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0taXMtZGVmYXVsdGAgXSB8fCBmYWxzZSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdEZWZhdWx0IFRpY2tldCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1pcy1kZWZhdWx0YCB9XG5cdFx0XHRcdGhlbHBUZXh0SWZDaGVja2VkPXsgX18oXG5cdFx0XHRcdFx0J3RoaXMgaXMgYSBkZWZhdWx0IHRpY2tldCBhbmQgd2lsbCBhcHBlYXIgb24gYWxsIG5ldycgK1xuXHRcdFx0XHRcdCcgZXZlbnRzJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aGVscFRleHRJZk5vdENoZWNrZWQ9eyBfXyhcblx0XHRcdFx0XHQnY2xpY2sgdG8gbWFrZSB0aGlzIGEgZGVmYXVsdCB0aWNrZXQgZm9yIGFueSBuZXcgZXZlbnRzJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDIgfVxuXHRcdFx0XHRjaGFuZ2VMaXN0ZW5lcj17XG5cdFx0XHRcdFx0KCB2YWx1ZSApID0+IHtcblx0XHRcdFx0XHRcdHRpY2tldEVudGl0eS5pc0RlZmF1bHQgPSAhISB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdC8+LFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpbmRleE9mKCBleGNsdWRlLCAnd3BVc2VyJyApIDwgMCApIHtcblx0XHQvLyBAdG9kbyB0aGlzIG5lZWRzIHRvIHJlYWQgZnJvbSB0aGUgY3VycmVudCBldmVudCBhdXRob3IgaW4gdGhlIGxvYWRlZFxuXHRcdC8vIGVkaXRvciwgYW5kIGV2ZW50dWFsbHkgY291bGQgYmUgYSBkcm9wZG93biBmb3Igc2VsZWN0aW5nIHRoZSBhdXRob3IuXG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cIndwVXNlclwiXG5cdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXdwLXVzZXJgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0td3AtdXNlcmAgXSB8fCAwIH1cblx0XHRcdFx0bGFiZWw9eyBfXyggJ1BhcmVudCBUaWNrZXQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRodG1sSWQ9eyBgJHsgcHJlZml4IH0td3AtdXNlcmAgfVxuXHRcdFx0XHRoZWxwVGV4dD17IF9fKFxuXHRcdFx0XHRcdCdUaGUgSUQgb2YgdGhlIGFkbWluIHRoYXQgY3JlYXRlZCB0aGlzIHRpY2tldC4nLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHRcdCkgfVxuXHRcdFx0XHRpbnB1dFdpZHRoPXsgMiB9XG5cdFx0XHRcdGRpc2FibGVkXG5cdFx0XHQvPixcblx0XHQpO1xuXHR9XG5cdGlmICggaW5kZXhPZiggZXhjbHVkZSwgJ3BhcmVudCcgKSA8IDAgKSB7XG5cdFx0Ly8gQHRvZG8gdGhpcyBpcyBtb3N0bHkgYSBmaWVsZCB0aGF0IHdhcyBhZGRlZCBvcmlnaW5hbGx5IGFzIGEgd2F5IG9mXG5cdFx0Ly8gdHJhY2tpbmcgYXV0b3NhdmVzL3JldmlzaW9ucyBmb3IgdGlja2V0cy4gUHJvYmFibHkgc2hvdWxkIG5ldmVyIGJlXG5cdFx0Ly8gYW4gZWRpdGFibGUgZmllbGQuXG5cdFx0aW5wdXRzLnB1c2goXG5cdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdGtleT1cInBhcmVudFwiXG5cdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcblx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1wYXJlbnRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tcGFyZW50YCBdIHx8IDAgfVxuXHRcdFx0XHRsYWJlbD17IF9fKCAnUGFyZW50IFRpY2tldCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1wYXJlbnRgIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDIgfVxuXHRcdFx0XHRkaXNhYmxlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRpZiAoIGluZGV4T2YoIGV4Y2x1ZGUsICdkZWxldGVkJyApIDwgMCApIHtcblx0XHRpbnB1dHMucHVzaChcblx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0a2V5PVwiZGVsZXRlZFwiXG5cdFx0XHRcdHR5cGU9XCJ0b2dnbGVcIlxuXHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LWRlbGV0ZWRgIH1cblx0XHRcdFx0aW5pdGlhbFZhbHVlPXsgdmFsdWVzWyBgJHsgcHJlZml4IH0tZGVsZXRlZGAgXSB8fCBmYWxzZSB9XG5cdFx0XHRcdGxhYmVsPXsgX18oICdBcmNoaXZlZCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGh0bWxJZD17IGAkeyBwcmVmaXggfS1kZWxldGVkYCB9XG5cdFx0XHRcdGhlbHBUZXh0SWZDaGVja2VkPXsgX18oXG5cdFx0XHRcdFx0J3RoaXMgdGlja2V0IGlzIGFyY2hpdmVkJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aGVscFRleHRJZk5vdENoZWNrZWQ9eyBfXyhcblx0XHRcdFx0XHQndGhpcyB0aWNrZXQgaXMgTk9UIGFyY2hpdmVkJyxcblx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0XHQpIH1cblx0XHRcdFx0aW5wdXRXaWR0aD17IDIgfVxuXHRcdFx0XHRkaXNhYmxlZFxuXHRcdFx0Lz4sXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gaW5wdXRzO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIHJldHVybnMgYW4gb2JqZWN0IG1hcHBpbmcgVGlja2V0IEVudGl0eSBwcm9wZXJ0aWVzIHRvIGZvcm0gcHJlZml4c1xuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBmb3JtXG4gKi9cbmV4cG9ydCBjb25zdCB0aWNrZXRFbnRpdHlGb3JtU2NoZW1hID0gKCB0aWNrZXRFbnRpdHkgKSA9PiB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApICkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRjb25zdCBwcmVmaXggPSBgZWUtdGlja2V0LSR7IHRpY2tldEVudGl0eS5pZCB9YDtcblx0cmV0dXJuIHtcblx0XHRbIGAkeyBwcmVmaXggfS1pZGAgXTogdGlja2V0RW50aXR5LmlkLFxuXHRcdFsgYCR7IHByZWZpeCB9LW5hbWVgIF06IHRpY2tldEVudGl0eS5uYW1lIHx8ICcnLFxuXHRcdFsgYCR7IHByZWZpeCB9LWRlc2NyaXB0aW9uYCBdOiB0aWNrZXRFbnRpdHkuZGVzY3JpcHRpb24gfHwgJycsXG5cdFx0WyBgJHsgcHJlZml4IH0tcXR5YCBdOiBzdHJpcEluZmluaXR5KCB0aWNrZXRFbnRpdHkucXR5ICksXG5cdFx0WyBgJHsgcHJlZml4IH0tc29sZGAgXTogdGlja2V0RW50aXR5LnNvbGQgfHwgMCxcblx0XHRbIGAkeyBwcmVmaXggfS1yZXNlcnZlZGAgXTogdGlja2V0RW50aXR5LnJlc2VydmVkIHx8IDAsXG5cdFx0WyBgJHsgcHJlZml4IH0tdXNlc2AgXTogc3RyaXBJbmZpbml0eSggdGlja2V0RW50aXR5LnVzZXMgKSxcblx0XHRbIGAkeyBwcmVmaXggfS1yZXF1aXJlZGAgXTogdGlja2V0RW50aXR5LnJlcXVpcmVkIHx8IGZhbHNlLFxuXHRcdFsgYCR7IHByZWZpeCB9LW1pbmAgXTogdGlja2V0RW50aXR5Lm1pbiB8fCBudWxsLFxuXHRcdFsgYCR7IHByZWZpeCB9LW1heGAgXTogc3RyaXBJbmZpbml0eSggdGlja2V0RW50aXR5Lm1heCApLFxuXHRcdFsgYCR7IHByZWZpeCB9LXByaWNlYCBdOiB0aWNrZXRFbnRpdHkucHJpY2UgJiYgdGlja2V0RW50aXR5LnByaWNlLmFtb3VudCA/XG5cdFx0XHR0aWNrZXRFbnRpdHkucHJpY2UuYW1vdW50LnRvTnVtYmVyKCkgOlxuXHRcdFx0bnVsbCxcblx0XHRbIGAkeyBwcmVmaXggfS1zdGFydGAgXTogdGlja2V0RW50aXR5LnN0YXJ0RGF0ZS50b0lTTygpLFxuXHRcdFsgYCR7IHByZWZpeCB9LWVuZGAgXTogdGlja2V0RW50aXR5LmVuZERhdGUudG9JU08oKSxcblx0XHRbIGAkeyBwcmVmaXggfS10YXhhYmxlYCBdOiB0aWNrZXRFbnRpdHkudGF4YWJsZSB8fCBmYWxzZSxcblx0XHRbIGAkeyBwcmVmaXggfS1vcmRlcmAgXTogdGlja2V0RW50aXR5Lm9yZGVyIHx8IDAsXG5cdFx0WyBgJHsgcHJlZml4IH0taXMtZGVmYXVsdGAgXTogdGlja2V0RW50aXR5LmlzRGVmYXVsdCB8fCBmYWxzZSxcblx0XHRbIGAkeyBwcmVmaXggfS13cC11c2VyYCBdOiB0aWNrZXRFbnRpdHkud3BVc2VyIHx8IDAsXG5cdFx0WyBgJHsgcHJlZml4IH0tcGFyZW50YCBdOiB0aWNrZXRFbnRpdHkucGFyZW50IHx8IDAsXG5cdFx0WyBgJHsgcHJlZml4IH0tZGVsZXRlZGAgXTogdGlja2V0RW50aXR5LmRlbGV0ZWQgfHwgZmFsc2UsXG5cdH07XG59O1xuXG5jb25zdCBzdHJpcEluZmluaXR5ID0gKCBudW1iZXIgKSA9PiBudW1iZXIgIT09ICdJTkYnIHx8IG51bWJlciAhPT0gSW5maW5pdHkgP1xuXHRudW1iZXIgOlxuXHRudWxsO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdHdpdGhGb3JtSGFuZGxlcixcblx0dHdvQ29sdW1uQWRtaW5Gb3JtTGF5b3V0LFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyB0aWNrZXRFbnRpdHlGb3JtSW5wdXRzIH0gZnJvbSAnLi4vJztcbmltcG9ydCB7IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvcnMgfSBmcm9tICcuLi9wcmljZS1jYWxjdWxhdG9yJztcbmltcG9ydCB7IHdpdGhUaWNrZXRQcmljZUVudGl0aWVzLCB3aXRoUHJpY2VUeXBlRW50aXRpZXMgfSBmcm9tICcuLi8uLi8uLi9ob2NzJztcblxuY29uc3QgZ2V0Rm9ybVJvd3MgPSAoXG5cdHRpY2tldEVudGl0eSxcblx0Y2FsY3VsYXRvcixcblx0ZXhjbHVkZSxcblx0Y3VycmVudFZhbHVlcyxcblx0Rm9ybUlucHV0LFxuXHRyZWNhbGN1bGF0ZUJhc2VQcmljZVxuKSA9PiB0aWNrZXRFbnRpdHlGb3JtSW5wdXRzKFxuXHR0aWNrZXRFbnRpdHksXG5cdGNhbGN1bGF0b3IsXG5cdGV4Y2x1ZGUsXG5cdGN1cnJlbnRWYWx1ZXMsXG5cdEZvcm1JbnB1dCxcblx0cmVjYWxjdWxhdGVCYXNlUHJpY2UsXG4pO1xuXG5jb25zdCBUaWNrZXRFbnRpdHlGb3JtID0gKCB7XG5cdHRpY2tldEVudGl0eSxcblx0cHJpY2VFbnRpdGllcyA9IFtdLFxuXHRwcmljZVR5cGVFbnRpdGllcyA9IFtdLFxuXHRjYWxjdWxhdG9yLFxuXHRzdWJtaXRCdXR0b24sXG5cdGNhbmNlbEJ1dHRvbixcblx0Y3VycmVudFZhbHVlcyA9IHt9LFxuXHRpbml0aWFsVmFsdWVzID0ge30sXG5cdG5ld09iamVjdCA9IGZhbHNlLFxufSApID0+IHtcblx0Y29uc3QgeyBjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2UgfSA9IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvcnMoIHByaWNlVHlwZUVudGl0aWVzICk7XG5cdC8vIGhvb2tzIG11c3QgYmUgYXQgdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24gYW5kIG5ldmVyIGNoYW5nZSBvcmRlci5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB3b3JkcHJlc3Mvbm8tdW51c2VkLXZhcnMtYmVmb3JlLXJldHVyblxuXHRjb25zdCByZWNhbGN1bGF0ZUJhc2VQcmljZSA9IHVzZUNhbGxiYWNrKCAoKSA9PiB7XG5cdFx0Y2FsY3VsYXRlVGlja2V0QmFzZVByaWNlKCB0aWNrZXRFbnRpdHkucHJpY2UudG9OdW1iZXIoKSwgcHJpY2VFbnRpdGllcyApO1xuXHR9LCBbIHRpY2tldEVudGl0eSwgcHJpY2VFbnRpdGllcywgY2FsY3VsYXRlVGlja2V0QmFzZVByaWNlIF0gKTtcblx0Ly8gZWRpdCBmb3JtcyBmb3IgZXhpc3Rpbmcgb2JqZWN0cyBtdXN0IGhhdmUgaW5pdGlhbCB2YWx1ZXNcblx0aWYgKFxuXHRcdCggISBuZXdPYmplY3QgJiYgaXNFbXB0eSggaW5pdGlhbFZhbHVlcyApICkgfHxcblx0XHRpc0VtcHR5KCBjdXJyZW50VmFsdWVzIClcblx0KSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3Qge1xuXHRcdEZvcm1JbnB1dCxcblx0XHRGb3JtU2VjdGlvbixcblx0XHRGb3JtV3JhcHBlcixcblx0XHRGb3JtU2F2ZUNhbmNlbEJ1dHRvbnMsXG5cdFx0Rm9ybUluZm8sXG5cdH0gPSB0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQ7XG5cblx0Ly8gZW50aXR5IHByb3BlcnRpZXMgd2UgZG9uJ3Qgd2FudCB0byBiZSBlZGl0YWJsZVxuXHRjb25zdCBleGNsdWRlID0gW1xuXHRcdCdUS1RfSUQnLFxuXHRcdCdzb2xkJyxcblx0XHQncmVzZXJ2ZWQnLFxuXHRcdCdvcmRlcicsXG5cdFx0J3BhcmVudCcsXG5cdFx0J2RlbGV0ZWQnLFxuXHRcdCd3cFVzZXInLFxuXHRcdCdzdGF0dXMnLFxuXHRdO1xuXHRjb25zdCBmb3JtUm93cyA9IGdldEZvcm1Sb3dzKFxuXHRcdHRpY2tldEVudGl0eSxcblx0XHRjYWxjdWxhdG9yLFxuXHRcdGV4Y2x1ZGUsXG5cdFx0Y3VycmVudFZhbHVlcyxcblx0XHRGb3JtSW5wdXQsXG5cdFx0cmVjYWxjdWxhdGVCYXNlUHJpY2UsXG5cdCk7XG5cdGZvcm1Sb3dzLnVuc2hpZnQoXG5cdFx0PEZvcm1JbmZvXG5cdFx0XHRrZXk9XCJmb3JtSW5mb1wiXG5cdFx0XHRmb3JtSW5mbz17XG5cdFx0XHRcdF9fKFxuXHRcdFx0XHRcdCdhbGwgZmllbGRzIG1hcmtlZCB3aXRoIGFuIGFzdGVyaXNrIGFyZSByZXF1aXJlZCcsXG5cdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0XHRkaXNtaXNzYWJsZT17IGZhbHNlIH1cblx0XHQvPlxuXHQpO1xuXG5cdHJldHVybiB0aWNrZXRFbnRpdHkgJiYgdGlja2V0RW50aXR5LmlkID8gKFxuXHRcdDxGb3JtV3JhcHBlcj5cblx0XHRcdDxGb3JtU2VjdGlvblxuXHRcdFx0XHRodG1sSWQ9eyBgZWUtdGlja2V0LWVkaXRvci0keyB0aWNrZXRFbnRpdHkuaWQgfS1mb3JtLXNlY3Rpb25gIH1cblx0XHRcdFx0Y2hpbGRyZW49eyBmb3JtUm93cyB9XG5cdFx0XHQvPlxuXHRcdFx0PEZvcm1TYXZlQ2FuY2VsQnV0dG9uc1xuXHRcdFx0XHRodG1sQ2xhc3M9eyBgZWUtdGlja2V0LWVkaXRvci0keyB0aWNrZXRFbnRpdHkuaWQgfWAgfVxuXHRcdFx0XHRzdWJtaXRCdXR0b249eyBzdWJtaXRCdXR0b24gfVxuXHRcdFx0XHRjYW5jZWxCdXR0b249eyBjYW5jZWxCdXR0b24gfVxuXHRcdFx0Lz5cblx0XHQ8L0Zvcm1XcmFwcGVyPlxuXHQpIDogbnVsbDtcbn07XG5cbi8qKlxuICogRW5oYW5jZWQgVGlja2V0RW50aXR5Rm9ybSB3aXRoIEZvcm1IYW5kbGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0d2l0aFRpY2tldFByaWNlRW50aXRpZXMsXG5cdHdpdGhQcmljZVR5cGVFbnRpdGllcyxcblx0d2l0aEZvcm1IYW5kbGVyLFxuXSApKCBUaWNrZXRFbnRpdHlGb3JtICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IHdpdGhFZGl0b3JNb2RhbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VkaXRvci1ob2NzJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCBGcmFnbWVudCwgdXNlU3RhdGUgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IFRpY2tldEVudGl0eUZvcm0gZnJvbSAnLi4vZWRpdC1mb3JtL3RpY2tldC1lbnRpdHktZm9ybSc7XG5pbXBvcnQgeyB0aWNrZXRFbnRpdHlGb3JtU2NoZW1hIH0gZnJvbSAnLi4vZWRpdC1mb3JtL3RpY2tldC1lbnRpdHktZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgVGlja2V0UHJpY2VDYWxjdWxhdG9yTWVudUl0ZW0gfSBmcm9tICcuLi9wcmljZS1jYWxjdWxhdG9yL3RpY2tldC1wcmljZS1jYWxjdWxhdG9yLW1lbnUtaXRlbSc7XG5cbmNvbnN0IFRpY2tldEVudGl0eUZvcm1Nb2RhbCA9IHdpdGhFZGl0b3JNb2RhbCgge1xuXHR0aXRsZTogX18oICdUaWNrZXQgRWRpdG9yJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRjdXN0b21DbGFzczogJ2VlLXRpY2tldC1lZGl0b3ItbW9kYWwnLFxuXHRjbG9zZUJ1dHRvbkxhYmVsOiBfXyggJ2Nsb3NlIHRpY2tldCBlZGl0b3InLCAnZXZlbnRfZXNwcmVzc28nICksXG59ICkoICgge1xuXHR0aWNrZXRFbnRpdHksXG5cdC4uLm90aGVyUHJvcHNcbn0gKSA9PiB7XG5cdGNvbnN0IGxvYWRIYW5kbGVyID0gdXNlQ2FsbGJhY2soXG5cdFx0KCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRpY2tldEVudGl0eUZvcm1TY2hlbWEoIHRpY2tldEVudGl0eSApO1xuXHRcdH0sXG5cdFx0WyB0aWNrZXRFbnRpdHkgXVxuXHQpO1xuXHRyZXR1cm4gPFRpY2tldEVudGl0eUZvcm1cblx0XHRsb2FkSGFuZGxlcj17IGxvYWRIYW5kbGVyIH1cblx0XHRzdWJtaXRIYW5kbGVyPXsgbnVsbCB9XG5cdFx0cmVzZXRIYW5kbGVyPXsgbnVsbCB9XG5cdFx0dGlja2V0RW50aXR5PXsgdGlja2V0RW50aXR5IH1cblx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHQvPjtcbn0gKTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdCggV3JhcHBlZENvbXBvbmVudCApID0+ICgge1xuXHRcdHRpY2tldEVudGl0eSxcblx0XHRub0Jhc2VQcmljZSxcblx0XHRkb1JlZnJlc2gsXG5cdFx0dG9nZ2xlQ2FsY3VsYXRvcixcblx0XHRvbkNsb3NlVGlja2V0RWRpdG9yID0gKCkgPT4gbnVsbCxcblx0XHRvbk9wZW5UaWNrZXRFZGl0b3IgPSAoKSA9PiBudWxsLFxuXHRcdC4uLm90aGVyUHJvcHNcblx0fSApID0+IHtcblx0XHRjb25zdCBbIHNob3dFZGl0b3IsIHNldFNob3dFZGl0b3IgXSA9IHVzZVN0YXRlKCBmYWxzZSApO1xuXHRcdGNvbnN0IHRvZ2dsZVRpY2tldEVkaXRvciA9IHVzZUNhbGxiYWNrKCAoKSA9PiB7XG5cdFx0XHRzZXRTaG93RWRpdG9yKCAoIHByZXZTaG93RWRpdG9yICkgPT4gISBwcmV2U2hvd0VkaXRvciApO1xuXHRcdH0sIFsgdGlja2V0RW50aXR5IF0gKTtcblx0XHRjb25zdCBjYWxjdWxhdG9yID0gPFRpY2tldFByaWNlQ2FsY3VsYXRvck1lbnVJdGVtXG5cdFx0XHR0aWNrZXRFbnRpdHk9eyB0aWNrZXRFbnRpdHkgfVxuXHRcdFx0bm9CYXNlUHJpY2U9eyBub0Jhc2VQcmljZSB9XG5cdFx0XHRvbk9wZW5UaWNrZXRDYWxjdWxhdG9yPXsgdG9nZ2xlVGlja2V0RWRpdG9yIH1cblx0XHRcdHRvZ2dsZUNhbGN1bGF0b3I9eyB0b2dnbGVDYWxjdWxhdG9yIH1cblx0XHRcdG9uQ2xvc2VUaWNrZXRDYWxjdWxhdG9yPXsgdG9nZ2xlVGlja2V0RWRpdG9yIH1cblx0XHRcdGRvUmVmcmVzaD17IGRvUmVmcmVzaCB9XG5cdFx0Lz47XG5cdFx0cmV0dXJuIDxGcmFnbWVudD5cblx0XHRcdDxXcmFwcGVkQ29tcG9uZW50XG5cdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHRcdHRpY2tldEVudGl0eT17IHRpY2tldEVudGl0eSB9XG5cdFx0XHRcdHRvZ2dsZVRpY2tldEVkaXRvcj17IHRvZ2dsZVRpY2tldEVkaXRvciB9XG5cdFx0XHRcdHRvZ2dsZUNhbGN1bGF0b3I9eyB0b2dnbGVDYWxjdWxhdG9yIH1cblx0XHRcdFx0ZG9SZWZyZXNoPXsgZG9SZWZyZXNoIH1cblx0XHRcdC8+XG5cdFx0XHQ8VGlja2V0RW50aXR5Rm9ybU1vZGFsXG5cdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHRcdHRpY2tldEVudGl0eT17IHRpY2tldEVudGl0eSB9XG5cdFx0XHRcdGVkaXRvck9wZW49eyBzaG93RWRpdG9yIH1cblx0XHRcdFx0b25PcGVuPXsgb25PcGVuVGlja2V0RWRpdG9yIH1cblx0XHRcdFx0b25DbG9zZT17IG9uQ2xvc2VUaWNrZXRFZGl0b3IgfVxuXHRcdFx0XHR0b2dnbGVFZGl0b3I9eyB0b2dnbGVUaWNrZXRFZGl0b3IgfVxuXHRcdFx0XHRjYWxjdWxhdG9yPXsgY2FsY3VsYXRvciB9XG5cdFx0XHRcdGRvUmVmcmVzaD17IGRvUmVmcmVzaCB9XG5cdFx0XHQvPlxuXHRcdDwvRnJhZ21lbnQ+O1xuXHR9LFxuXHQnd2l0aFRpY2tldEVudGl0eUZvcm1Nb2RhbCdcbik7XG4iLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBmaW5kIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGNvbXBvc2UsIGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhEaXNwYXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlRWZmZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7XG5cdEVudGl0eUxpc3QsXG5cdEVzcHJlc3NvQnV0dG9uLFxuXHR0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18sIF94LCBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHdpdGhQcmljZVR5cGVFbnRpdGllcywgd2l0aEVkaXRvclRpY2tldEVudGl0aWVzIH0gZnJvbSAnLi4vLi4vaG9jcyc7XG5pbXBvcnQgeyB3aXRoVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybU1vZGFsIH0gZnJvbSAnLi9wcmljZS1jYWxjdWxhdG9yJztcbmltcG9ydCB7IHdpdGhUaWNrZXRFbnRpdHlGb3JtTW9kYWwgfSBmcm9tICcuL2VkaXQtZm9ybSc7XG5pbXBvcnQgeyBFZGl0b3JUaWNrZXRFbnRpdGllc0dyaWRWaWV3IH0gZnJvbSAnLi9ncmlkLXZpZXcvJztcbmltcG9ydCB7IEVkaXRvclRpY2tldEVudGl0aWVzTGlzdFZpZXcgfSBmcm9tICcuL2xpc3Qtdmlldy8nO1xuaW1wb3J0IHsgd2l0aFBhZ2luYXRlZFRpY2tldEVudGl0aWVzTGlzdEFuZEZpbHRlckJhciB9IGZyb20gJy4vZmlsdGVyLWJhcic7XG5pbXBvcnQgeyB3aXRoVGlja2V0QXNzaWdubWVudHNNYW5hZ2VyTW9kYWwgfSBmcm9tICcuLi8uLi90aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlcic7XG5cbmNvbnN0IHtcblx0Rm9ybVdyYXBwZXIsXG5cdEZvcm1TYXZlQ2FuY2VsQnV0dG9ucyxcbn0gPSB0d29Db2x1bW5BZG1pbkZvcm1MYXlvdXQ7XG5cbmNvbnN0IEVkaXRvclRpY2tldEVudGl0aWVzTGlzdCA9ICgge1xuXHRlbnRpdGllcyxcblx0YWRkTmV3VGlja2V0RW50aXR5LFxuXHR0b2dnbGVUaWNrZXRFZGl0b3IsXG5cdHRpY2tldEVudGl0eSA9IG51bGwsXG5cdHZpZXcgPSAnZ3JpZCcsXG5cdC4uLm90aGVyUHJvcHNcbn0gKSA9PiB7XG5cdHVzZUVmZmVjdCggKCkgPT4ge1xuXHRcdGlmICggdGlja2V0RW50aXR5ICE9PSBudWxsICkge1xuXHRcdFx0dG9nZ2xlVGlja2V0RWRpdG9yKCk7XG5cdFx0fVxuXHR9LCBbIHRpY2tldEVudGl0eSBdICk7XG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBidXR0b25cblx0ICovXG5cdGNvbnN0IGFkZE5ld1RpY2tldEVudGl0eUJ1dHRvbiA9IHVzZU1lbW8oXG5cdFx0KCkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEVzcHJlc3NvQnV0dG9uXG5cdFx0XHRcdFx0aWNvbj1cInRpY2tldHMtYWx0XCJcblx0XHRcdFx0XHRidXR0b25UZXh0PXsgX18oICdBZGQgTmV3IFRpY2tldCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0b25DbGljaz17IGFkZE5ld1RpY2tldEVudGl0eSB9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH0sXG5cdFx0WyBhZGROZXdUaWNrZXRFbnRpdHkgXVxuXHQpO1xuXG5cdHJldHVybiAoXG5cdFx0PEZvcm1XcmFwcGVyPlxuXHRcdFx0PEVudGl0eUxpc3Rcblx0XHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdFx0ZW50aXRpZXM9eyBlbnRpdGllcyB9XG5cdFx0XHRcdEVudGl0eUdyaWRWaWV3PXsgRWRpdG9yVGlja2V0RW50aXRpZXNHcmlkVmlldyB9XG5cdFx0XHRcdEVudGl0eUxpc3RWaWV3PXsgRWRpdG9yVGlja2V0RW50aXRpZXNMaXN0VmlldyB9XG5cdFx0XHRcdHZpZXc9eyB2aWV3IH1cblx0XHRcdFx0bG9hZGluZ05vdGljZT17IHNwcmludGYoXG5cdFx0XHRcdFx0X3goXG5cdFx0XHRcdFx0XHQnbG9hZGluZyBhdmFpbGFibGUgdGlja2V0cyVzJyxcblx0XHRcdFx0XHRcdCdsb2FkaW5nIGF2YWlsYWJsZSB0aWNrZXRzLi4uJyxcblx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIDgyMzAgKVxuXHRcdFx0XHQpIH1cblx0XHRcdC8+XG5cdFx0XHQ8Rm9ybVNhdmVDYW5jZWxCdXR0b25zIHN1Ym1pdEJ1dHRvbj17IGFkZE5ld1RpY2tldEVudGl0eUJ1dHRvbiB9IC8+XG5cdFx0PC9Gb3JtV3JhcHBlcj5cblx0KTtcbn07XG5cbmNvbnN0IHdpdGhOZXdUaWNrZXRFbnRpdHkgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0KCBXcmFwcGVkQ29tcG9uZW50ICkgPT4gKCBwcm9wcyApID0+IHtcblx0XHRjb25zdCBbIG5ld1RpY2tldCwgc2V0TmV3VGlja2V0RW50aXR5IF0gPSB1c2VTdGF0ZSggbnVsbCApO1xuXHRcdGNvbnN0IGJhc2VQcmljZVR5cGVFbnRpdHkgPSB1c2VNZW1vKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAoICEgcHJvcHMucHJpY2VUeXBlRW50aXRpZXNMb2FkZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpbmQoXG5cdFx0XHRcdFx0cHJvcHMucHJpY2VUeXBlRW50aXRpZXMsXG5cdFx0XHRcdFx0KCBwcmljZVR5cGUgKSA9PiBwcmljZVR5cGUucGJ0SWQgPT09IDFcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRbIHByb3BzLnByaWNlVHlwZUVudGl0aWVzLCBwcm9wcy5wcmljZVR5cGVFbnRpdGllc0xvYWRlZCBdXG5cdFx0KTtcblx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnRcblx0XHRcdHNldE5ld1RpY2tldEVudGl0eT17IHNldE5ld1RpY2tldEVudGl0eSB9XG5cdFx0XHR0aWNrZXRFbnRpdHk9eyBuZXdUaWNrZXQgfVxuXHRcdFx0YmFzZVByaWNlVHlwZUVudGl0eT17IGJhc2VQcmljZVR5cGVFbnRpdHkgfVxuXHRcdFx0eyAuLi5wcm9wcyB9XG5cdFx0Lz47XG5cdH0sXG5cdCd3aXRoTmV3VGlja2V0J1xuKTtcblxuY29uc3QgY3JlYXRlTmV3VGlja2V0RW50aXR5ID0gd2l0aERpc3BhdGNoKFxuXHQoIGRpc3BhdGNoLCB7IHNldE5ld1RpY2tldEVudGl0eSwgYmFzZVByaWNlVHlwZUVudGl0eSB9ICkgPT4ge1xuXHRcdGNvbnN0IHsgY3JlYXRlRW50aXR5LCBjcmVhdGVSZWxhdGlvbnMgfSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdGNvbnN0IGFkZE5ld1RpY2tldEVudGl0eSA9IGFzeW5jICggZXZlbnQgKSA9PiB7XG5cdFx0XHRpZiAoIGV2ZW50ICYmIGV2ZW50LnByZXZlbnREZWZhdWx0ICkge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG5ld1RpY2tldCA9IGF3YWl0IGNyZWF0ZUVudGl0eSggJ3RpY2tldCcsIHt9ICk7XG5cdFx0XHRjb25zdCBuZXdCYXNlUHJpY2UgPSBhd2FpdCBjcmVhdGVFbnRpdHkoXG5cdFx0XHRcdCdwcmljZScsXG5cdFx0XHRcdHsgUFJUX0lEOiBiYXNlUHJpY2VUeXBlRW50aXR5LmlkIH1cblx0XHRcdCk7XG5cdFx0XHRjcmVhdGVSZWxhdGlvbnMoXG5cdFx0XHRcdCd0aWNrZXQnLFxuXHRcdFx0XHRuZXdUaWNrZXQuaWQsXG5cdFx0XHRcdCdwcmljZScsXG5cdFx0XHRcdFsgbmV3QmFzZVByaWNlIF1cblx0XHRcdCk7XG5cdFx0XHRzZXROZXdUaWNrZXRFbnRpdHkoIG5ld1RpY2tldCApO1xuXHRcdH07XG5cdFx0cmV0dXJuIHsgYWRkTmV3VGlja2V0RW50aXR5IH07XG5cdH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0d2l0aFByaWNlVHlwZUVudGl0aWVzLFxuXHR3aXRoTmV3VGlja2V0RW50aXR5LFxuXHR3aXRoRWRpdG9yVGlja2V0RW50aXRpZXMsXG5cdHdpdGhQYWdpbmF0ZWRUaWNrZXRFbnRpdGllc0xpc3RBbmRGaWx0ZXJCYXIoKSxcblx0Ly8gYWRkIHRpY2tldEFzc2lnbm1lbnRzIE1hbmFnZXJNb2RhbCBvbkNsb3NlXG5cdHdpdGhUaWNrZXRBc3NpZ25tZW50c01hbmFnZXJNb2RhbCggKCkgPT4gKFxuXHRcdHtcblx0XHRcdHRpdGxlOiBfXyhcblx0XHRcdFx0J1RpY2tldCBBc3NpZ25tZW50cyBmb3IgQWxsIEV2ZW50IERhdGVzJyxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0KSxcblx0XHRcdGNsb3NlQnV0dG9uTGFiZWw6IG51bGwsXG5cdFx0fVxuXHQpICksXG5cdGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHRcdCggV3JhcHBlZENvbXBvbmVudCApID0+ICggcHJvcHMgKSA9PiB7XG5cdFx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnRcblx0XHRcdFx0eyAuLi5wcm9wcyB9XG5cdFx0XHRcdG9uQ2xvc2VUaWNrZXRFZGl0b3I9eyBwcm9wcy50b2dnbGVUaWNrZXRBc3NpZ25tZW50cyB9XG5cdFx0XHQvPjtcblx0XHR9LFxuXHRcdCd3aXRoT25DbG9zZVRpY2tldEVkaXRvcidcblx0KSxcblx0d2l0aFRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1Nb2RhbCxcblx0d2l0aFRpY2tldEVudGl0eUZvcm1Nb2RhbCxcblx0Y3JlYXRlTmV3VGlja2V0RW50aXR5LFxuXSApKCBFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3QgKTtcblxuLyoqXG4gKiBhIHRyaW1tZWQgZG93biB0aWNrZXQgbGlzdDogb25seSBpbmNsdWRlcyB0aWNrZXQgcHJpY2UgY2FsY3VsYXRvclxuICovXG5leHBvcnQgY29uc3QgRWRpdG9yVGlja2V0RW50aXRpZXNPbmx5TGlzdCA9IGNvbXBvc2UoIFtcblx0d2l0aFByaWNlVHlwZUVudGl0aWVzLFxuXHR3aXRoTmV3VGlja2V0RW50aXR5LFxuXHR3aXRoRWRpdG9yVGlja2V0RW50aXRpZXMsXG5cdHdpdGhUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtTW9kYWwsXG5cdHdpdGhUaWNrZXRFbnRpdHlGb3JtTW9kYWwsXG5cdGNyZWF0ZU5ld1RpY2tldEVudGl0eSxcbl0gKSggRWRpdG9yVGlja2V0RW50aXRpZXNMaXN0ICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgd2l0aEVudGl0eVBhZ2luYXRpb24gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9oaWdoZXItb3JkZXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBjb21wb3NlLCBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB3aXRoVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyQmFyLCB7XG5cdGdldEZpbHRlcmVkVGlja2V0RW50aXRpZXNMaXN0LFxufSBmcm9tICcuL3dpdGgtdGlja2V0LWVudGl0aWVzLWxpc3QtZmlsdGVyLWJhcic7XG5pbXBvcnQgd2l0aFRpY2tldEVudGl0aWVzTGlzdEZpbHRlclN0YXRlXG5cdGZyb20gJy4vd2l0aC10aWNrZXQtZW50aXRpZXMtbGlzdC1maWx0ZXItc3RhdGUnO1xuaW1wb3J0IHdpdGhGaWx0ZXJlZFRpY2tldEVudGl0aWVzIGZyb20gJy4vd2l0aC1maWx0ZXJlZC10aWNrZXQtZW50aXRpZXMnO1xuXG5jb25zdCB3aXRoUGFnaW5hdGVkVGlja2V0RW50aXRpZXNMaXN0QW5kRmlsdGVyQmFyID0gKFxuXHRwYWdpbmF0aW9uQ29uZmlnID0ge31cbikgPT4gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyU3RhdGUsXG5cdFx0d2l0aFRpY2tldEVudGl0aWVzTGlzdEZpbHRlckJhcixcblx0XHR3aXRoRW50aXR5UGFnaW5hdGlvbiggcGFnaW5hdGlvbkNvbmZpZyApLFxuXHRdICksXG5cdCd3aXRoUGFnaW5hdGVkVGlja2V0RW50aXRpZXNMaXN0QW5kRmlsdGVyQmFyJ1xuKTtcblxuZXhwb3J0IHtcblx0d2l0aFRpY2tldEVudGl0aWVzTGlzdEZpbHRlckJhcixcblx0d2l0aFRpY2tldEVudGl0aWVzTGlzdEZpbHRlclN0YXRlLFxuXHR3aXRoRmlsdGVyZWRUaWNrZXRFbnRpdGllcyxcblx0d2l0aFBhZ2luYXRlZFRpY2tldEVudGl0aWVzTGlzdEFuZEZpbHRlckJhcixcblx0Z2V0RmlsdGVyZWRUaWNrZXRFbnRpdGllc0xpc3QsXG59O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImVlLWVudGl0eS1saXN0LWZpbHRlci1iYXJcIjpcImVlLWVudGl0eS1saXN0LWZpbHRlci1iYXJcIixcImVlLWZpbHRlci1iYXItZmlsdGVyXCI6XCJlZS1maWx0ZXItYmFyLWZpbHRlclwiLFwiZWUtc2hvdy10aWNrZXRzLWZpbHRlclwiOlwiZWUtc2hvdy10aWNrZXRzLWZpbHRlclwiLFwiZWUtdGlja2V0LWRhdGVzLWNoYWluZWQtZmlsdGVyXCI6XCJlZS10aWNrZXQtZGF0ZXMtY2hhaW5lZC1maWx0ZXJcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IEljb25CdXR0b24sIFNlbGVjdENvbnRyb2wgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5cbi8qKlxuICogVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyQmFyXG4gKiBmaWx0ZXJzIGZvciBjb250cm9sbGluZyB0aGUgZGlzcGxheSBvZiBhIGxpc3Qgb2YgVGlja2V0c1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uU2hvd0ZpbHRlckNoYW5nZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25PcmRlckZpbHRlckNoYW5nZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25EaXNwbGF5RmlsdGVyQ2hhbmdlXG4gKiBAcmV0dXJuIHtPYmplY3R9IEVkaXRvclRpY2tldHNMaXN0VmlldyB3aXRoIGFkZGVkIFRpY2tldExpc3RGaWx0ZXJzXG4gKi9cbmNsYXNzIFRpY2tldEVudGl0aWVzTGlzdEZpbHRlckJhciBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0c2hvd1RpY2tldHM6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHR0aWNrZXRzU29ydGVkQnk6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRkaXNwbGF5VGlja2V0RGF0ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdGlzQ2hhaW5lZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblx0XHRzZXRTaG93VGlja2V0czogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblx0XHRzZXRUaWNrZXRzU29ydGVkQnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c2V0RGlzcGxheVRpY2tldERhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c2V0SXNDaGFpbmVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2hvd1RpY2tldHNcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0U2hvd1RpY2tldHNcblx0ICogQHBhcmFtIHtib29sZWFufSBpc0NoYWluZWRcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBzaG93VGlja2V0cyBmaWx0ZXJcblx0ICovXG5cdHNob3dUaWNrZXRzID0gKCBzaG93VGlja2V0cywgc2V0U2hvd1RpY2tldHMsIGlzQ2hhaW5lZCApID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFNlbGVjdENvbnRyb2xcblx0XHRcdFx0bGFiZWw9eyBfXyggJ3Nob3cnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRjbGFzc05hbWU9XCJlc3ByZXNzby10aWNrZXQtbGlzdC1maWx0ZXItYmFyLXNob3ctc2VsZWN0XCJcblx0XHRcdFx0dmFsdWU9eyBzaG93VGlja2V0cyB9XG5cdFx0XHRcdG9wdGlvbnM9eyBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdhbGwnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGlzQ2hhaW5lZCA/XG5cdFx0XHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0XHRcdCdhbGwgdGlja2V0cyBmb3IgYWJvdmUgZGF0ZXMnLFxuXHRcdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdFx0KSA6XG5cdFx0XHRcdFx0XHRcdF9fKCAnYWxsIHRpY2tldHMgZm9yIGFsbCBkYXRlcycsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnb24tc2FsZS1hbmQtcGVuZGluZycsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oXG5cdFx0XHRcdFx0XHRcdCdhbGwgb24gc2FsZSBhbmQgc2FsZSBwZW5kaW5nJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnb24tc2FsZS1vbmx5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyhcblx0XHRcdFx0XHRcdFx0J29uIHNhbGUgdGlja2V0cyBvbmx5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAncGVuZGluZy1vbmx5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyhcblx0XHRcdFx0XHRcdFx0J3NhbGUgcGVuZGluZyB0aWNrZXRzIG9ubHknLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICduZXh0LW9uLXNhbGUtb3ItcGVuZGluZy1vbmx5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyhcblx0XHRcdFx0XHRcdFx0J25leHQgb24gc2FsZSBvciBzYWxlIHBlbmRpbmcgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3NvbGQtb3V0LW9ubHknLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQnc29sZCBvdXQgdGlja2V0cyBvbmx5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYWJvdmUtOTAtc29sZCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oXG5cdFx0XHRcdFx0XHRcdCd0aWNrZXRzIHdpdGggOTAlIG9yIG1vcmUgc29sZCcsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2Fib3ZlLTc1LXNvbGQnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQndGlja2V0cyB3aXRoIDc1JSBvciBtb3JlIHNvbGQnLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dmFsdWU6ICdhYm92ZS01MC1zb2xkJyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyhcblx0XHRcdFx0XHRcdFx0J3RpY2tldHMgd2l0aCA1MCUgb3IgbW9yZSBzb2xkJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYmVsb3ctNTAtc29sZCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oXG5cdFx0XHRcdFx0XHRcdCd0aWNrZXRzIHdpdGggbGVzcyB0aGFuIDUwJSBzb2xkJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnZXhwaXJlZC1vbmx5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyhcblx0XHRcdFx0XHRcdFx0J2V4cGlyZWQgdGlja2V0cyBvbmx5Jyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYXJjaGl2ZWQtb25seScsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oXG5cdFx0XHRcdFx0XHRcdCdhcmNoaXZlZCB0aWNrZXRzIG9ubHknLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0gfVxuXHRcdFx0XHRvbkNoYW5nZT17IHNldFNob3dUaWNrZXRzIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpY2tldHNTb3J0ZWRCeVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRUaWNrZXRzU29ydGVkQnlcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCB0aWNrZXRzU29ydGVkQnkgZmlsdGVyXG5cdCAqL1xuXHR0aWNrZXRzU29ydGVkQnkgPSAoIHRpY2tldHNTb3J0ZWRCeSwgc2V0VGlja2V0c1NvcnRlZEJ5ICkgPT4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8U2VsZWN0Q29udHJvbFxuXHRcdFx0XHRsYWJlbD17IF9fKCAnc29ydCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdGNsYXNzTmFtZT1cImVzcHJlc3NvLXRpY2tldC1saXN0LWZpbHRlci1iYXItb3JkZXItc2VsZWN0XCJcblx0XHRcdFx0dmFsdWU9eyB0aWNrZXRzU29ydGVkQnkgfVxuXHRcdFx0XHRvcHRpb25zPXsgW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnY2hyb25vbG9naWNhbGx5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyggJ2Nocm9ub2xvZ2ljYWxseScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2J5LW5hbWUnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnYnkgdGlja2V0IG5hbWUnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2J5LWlkJyxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXyggJ2J5IHRpY2tldCBJRCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnYnktb3JkZXInLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAnYnkgY3VzdG9tIG9yZGVyJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdIH1cblx0XHRcdFx0b25DaGFuZ2U9eyBzZXRUaWNrZXRzU29ydGVkQnkgfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGlzcGxheVRpY2tldHNcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0RGlzcGxheVRpY2tldHNcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBkaXNwbGF5VGlja2V0cyBmaWx0ZXJcblx0ICovXG5cdGRpc3BsYXlUaWNrZXRzID0gKCBkaXNwbGF5VGlja2V0cywgc2V0RGlzcGxheVRpY2tldHMgKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRcdGxhYmVsPXsgX18oICdkaXNwbGF5JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0Y2xhc3NOYW1lPVwiZXNwcmVzc28tdGlja2V0LWxpc3QtZmlsdGVyLWJhci1kaXNwbGF5LXNlbGVjdFwiXG5cdFx0XHRcdHZhbHVlPXsgZGlzcGxheVRpY2tldHMgfVxuXHRcdFx0XHRvcHRpb25zPXsgW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHZhbHVlOiAnc3RhcnQnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCAndGlja2V0IHNhbGVzIHN0YXJ0IGRhdGUgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2VuZCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogX18oXG5cdFx0XHRcdFx0XHRcdCd0aWNrZXQgc2FsZXMgZW5kIGRhdGUgb25seScsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2JvdGgnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKFxuXHRcdFx0XHRcdFx0XHQndGlja2V0IHNhbGVzIHN0YXJ0IGFuZCBlbmQgZGF0ZXMnLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0gfVxuXHRcdFx0XHRvbkNoYW5nZT17IHNldERpc3BsYXlUaWNrZXRzIH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBpc0NoYWluZWRcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0SXNDaGFpbmVkXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZGlzcGxheVRpY2tldHMgZmlsdGVyXG5cdCAqL1xuXHR0aWNrZXRzQ2hhaW5lZCA9ICggaXNDaGFpbmVkLCBzZXRJc0NoYWluZWQgKSA9PiB7XG5cdFx0aXNDaGFpbmVkID0gISEgaXNDaGFpbmVkO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8SWNvbkJ1dHRvblxuXHRcdFx0XHRsYWJlbD17IGlzQ2hhaW5lZCA/XG5cdFx0XHRcdFx0X18oICdzaG93aW5nIHRpY2tldHMgZm9yIGFib3ZlIGRhdGVzIG9ubHknLCAnZXZlbnRfZXNwcmVzc28nICkgOlxuXHRcdFx0XHRcdF9fKCAnc2hvd2luZyB0aWNrZXRzIGZvciBhbGwgZXZlbnQgZGF0ZXMnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0XHRcdFx0fVxuXHRcdFx0XHRpY29uPXsgaXNDaGFpbmVkID8gJ2FkbWluLWxpbmtzJyA6ICdlZGl0b3ItdW5saW5rJyB9XG5cdFx0XHRcdG9uQ2xpY2s9eyAoKSA9PiBzZXRJc0NoYWluZWQoICEgaXNDaGFpbmVkICkgfVxuXHRcdFx0XHR2YWx1ZT17IGlzQ2hhaW5lZCB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdHNob3dUaWNrZXRzLFxuXHRcdFx0c2V0U2hvd1RpY2tldHMsXG5cdFx0XHR0aWNrZXRzU29ydGVkQnksXG5cdFx0XHRzZXRUaWNrZXRzU29ydGVkQnksXG5cdFx0XHRkaXNwbGF5VGlja2V0RGF0ZSxcblx0XHRcdHNldERpc3BsYXlUaWNrZXREYXRlLFxuXHRcdFx0aXNDaGFpbmVkLFxuXHRcdFx0c2V0SXNDaGFpbmVkLFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdGNvbnN0IHNob3dGaWx0ZXIgPSAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXNob3ctdGlja2V0cy1maWx0ZXIgZWUtZmlsdGVyLWJhci1maWx0ZXJcIj5cblx0XHRcdFx0eyB0aGlzLnNob3dUaWNrZXRzKCBzaG93VGlja2V0cywgc2V0U2hvd1RpY2tldHMsIGlzQ2hhaW5lZCApIH1cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdFx0Y29uc3Qgc29ydEZpbHRlciA9IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtc29ydC10aWNrZXRzLWZpbHRlciBlZS1maWx0ZXItYmFyLWZpbHRlclwiPlxuXHRcdFx0XHR7IHRoaXMudGlja2V0c1NvcnRlZEJ5KCB0aWNrZXRzU29ydGVkQnksIHNldFRpY2tldHNTb3J0ZWRCeSApIH1cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdFx0Y29uc3QgZGlzcGxheUZpbHRlciA9IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZGlzcGxheS10aWNrZXQtZGF0ZXMtZmlsdGVyIGVlLWZpbHRlci1iYXItZmlsdGVyXCI+XG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aGlzLmRpc3BsYXlUaWNrZXRzKFxuXHRcdFx0XHRcdFx0ZGlzcGxheVRpY2tldERhdGUsXG5cdFx0XHRcdFx0XHRzZXREaXNwbGF5VGlja2V0RGF0ZVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0XHRjb25zdCBpc0NoYWluZWRGaWx0ZXIgPSAoXG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cImVlLXRpY2tldC1kYXRlcy1jaGFpbmVkLWZpbHRlciBlZS1maWx0ZXItYmFyLWZpbHRlclwiPlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGhpcy50aWNrZXRzQ2hhaW5lZChcblx0XHRcdFx0XHRcdGlzQ2hhaW5lZCxcblx0XHRcdFx0XHRcdHNldElzQ2hhaW5lZFxuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHR7IHNob3dGaWx0ZXIgfVxuXHRcdFx0XHR7IGlzQ2hhaW5lZEZpbHRlciB9XG5cdFx0XHRcdHsgc29ydEZpbHRlciB9XG5cdFx0XHRcdHsgZGlzcGxheUZpbHRlciB9XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlja2V0RW50aXRpZXNMaXN0RmlsdGVyQmFyO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cblxuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdCwgc29ydEJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHRpY2tldE1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBmaWx0ZXJUaWNrZXRFbnRpdGllc1xuICogcmVkdWNlcyB0aWNrZXRzIGFycmF5IGJhc2VkIG9uIHZhbHVlIG9mIHRoZSBcInNob3dcIiBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB0aWNrZXRFbnRpdGllcyAgICBvcmlnaW5hbCB0aWNrZXRzIGFycmF5XG4gKiBAcGFyYW0ge3N0cmluZ30gc2hvdyAgICB2YWx1ZSBmb3IgdGhlIFwic2hvd1wiIGZpbHRlclxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgZmlsdGVyZWQgdGlja2V0cyBhcnJheVxuICovXG5leHBvcnQgY29uc3QgZmlsdGVyVGlja2V0RW50aXRpZXMgPSAoIHRpY2tldEVudGl0aWVzLCBzaG93ID0gJ29uLXNhbGUtYW5kLXBlbmRpbmcnICkgPT4ge1xuXHRzd2l0Y2ggKCBzaG93ICkge1xuXHRcdGNhc2UgJ2FsbCcgOlxuXHRcdFx0cmV0dXJuIHRpY2tldEVudGl0aWVzO1xuXHRcdGNhc2UgJ29uLXNhbGUtYW5kLXBlbmRpbmcnIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdFx0XHRmdW5jdGlvbiggdGlja2V0RW50aXR5ICkge1xuXHRcdFx0XHRcdHJldHVybiB0aWNrZXRNb2RlbC5pc09uU2FsZSggdGlja2V0RW50aXR5ICkgfHxcblx0XHRcdFx0XHRcdHRpY2tldE1vZGVsLmlzUGVuZGluZyggdGlja2V0RW50aXR5ICk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHRcdGNhc2UgJ29uLXNhbGUtb25seScgOlxuXHRcdFx0cmV0dXJuIGZpbHRlcihcblx0XHRcdFx0dGlja2V0RW50aXRpZXMsXG5cdFx0XHRcdGZ1bmN0aW9uKCB0aWNrZXRFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRpY2tldE1vZGVsLmlzT25TYWxlKCB0aWNrZXRFbnRpdHkgKTtcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cdFx0Y2FzZSAncGVuZGluZy1vbmx5JyA6XG5cdFx0XHRyZXR1cm4gZmlsdGVyKFxuXHRcdFx0XHR0aWNrZXRFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIHRpY2tldEVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGlja2V0TW9kZWwuaXNQZW5kaW5nKCB0aWNrZXRFbnRpdHkgKTtcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cdFx0Y2FzZSAnbmV4dC1vbi1zYWxlLW9yLXBlbmRpbmctb25seScgOlxuXHRcdFx0dGlja2V0RW50aXRpZXMgPSBmaWx0ZXJUaWNrZXRFbnRpdGllcyggdGlja2V0RW50aXRpZXMgKTtcblx0XHRcdHRpY2tldEVudGl0aWVzID0gc29ydFRpY2tldEVudGl0aWVzTGlzdCggdGlja2V0RW50aXRpZXMgKTtcblx0XHRcdHJldHVybiBbIGZpcnN0KCB0aWNrZXRFbnRpdGllcyApIF07XG5cdFx0Y2FzZSAnc29sZC1vdXQtb25seScgOlxuXHRcdFx0cmV0dXJuIGZpbHRlcihcblx0XHRcdFx0dGlja2V0RW50aXRpZXMsXG5cdFx0XHRcdGZ1bmN0aW9uKCB0aWNrZXRFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRpY2tldE1vZGVsLmlzU29sZE91dCggdGlja2V0RW50aXR5ICkgfHxcblx0XHRcdFx0XHRcdHBlcmNlbnRTb2xkQXRPckFib3ZlKCB0aWNrZXRFbnRpdHksIDEwMCApO1xuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHRjYXNlICdhYm92ZS05MC1zb2xkJyA6XG5cdFx0XHRyZXR1cm4gZmlsdGVyKFxuXHRcdFx0XHR0aWNrZXRFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIHRpY2tldEVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGVyY2VudFNvbGRBdE9yQWJvdmUoIHRpY2tldEVudGl0eSwgOTAgKTtcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cdFx0Y2FzZSAnYWJvdmUtNzUtc29sZCcgOlxuXHRcdFx0cmV0dXJuIGZpbHRlcihcblx0XHRcdFx0dGlja2V0RW50aXRpZXMsXG5cdFx0XHRcdGZ1bmN0aW9uKCB0aWNrZXRFbnRpdHkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBlcmNlbnRTb2xkQXRPckFib3ZlKCB0aWNrZXRFbnRpdHksIDc1ICk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHRcdGNhc2UgJ2Fib3ZlLTUwLXNvbGQnIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdFx0XHRmdW5jdGlvbiggdGlja2V0RW50aXR5ICkge1xuXHRcdFx0XHRcdHJldHVybiBwZXJjZW50U29sZEF0T3JBYm92ZSggdGlja2V0RW50aXR5LCA1MCApO1xuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHRjYXNlICdiZWxvdy01MC1zb2xkJyA6XG5cdFx0XHRyZXR1cm4gZmlsdGVyKFxuXHRcdFx0XHR0aWNrZXRFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIHRpY2tldEVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGVyY2VudFNvbGRCZWxvdyggdGlja2V0RW50aXR5LCA1MCApO1xuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHRjYXNlICdleHBpcmVkLW9ubHknIDpcblx0XHRcdHJldHVybiBmaWx0ZXIoXG5cdFx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdFx0XHRmdW5jdGlvbiggdGlja2V0RW50aXR5ICkge1xuXHRcdFx0XHRcdHJldHVybiB0aWNrZXRNb2RlbC5pc0V4cGlyZWQoIHRpY2tldEVudGl0eSApO1xuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHRjYXNlICdhcmNoaXZlZC1vbmx5JyA6XG5cdFx0XHRyZXR1cm4gZmlsdGVyKFxuXHRcdFx0XHR0aWNrZXRFbnRpdGllcyxcblx0XHRcdFx0ZnVuY3Rpb24oIHRpY2tldEVudGl0eSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGlja2V0TW9kZWwuaXNBcmNoaXZlZCggdGlja2V0RW50aXR5ICk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHR9XG5cdHJldHVybiB0aWNrZXRFbnRpdGllcztcbn07XG5cbi8qKlxuICogZmlsdGVyVGlja2V0RW50aXRpZXNcbiAqIHJlZHVjZXMgdGlja2V0cyBhcnJheSBiYXNlZCBvbiB2YWx1ZSBvZiB0aGUgXCJvcmRlclwiIGZpbHRlclxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHRpY2tldEVudGl0aWVzICAgIG9yaWdpbmFsIHRpY2tldHMgYXJyYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlciAgIHZhbHVlIGZvciB0aGUgXCJvcmRlclwiIGZpbHRlclxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgZmlsdGVyZWQgdGlja2V0cyBhcnJheVxuICovXG5leHBvcnQgY29uc3Qgc29ydFRpY2tldEVudGl0aWVzTGlzdCA9ICggdGlja2V0RW50aXRpZXMsIG9yZGVyID0gJ2Nocm9ub2xvZ2ljYWxseScgKSA9PiB7XG5cdHN3aXRjaCAoIG9yZGVyICkge1xuXHRcdGNhc2UgJ2Nocm9ub2xvZ2ljYWxseScgOlxuXHRcdFx0dGlja2V0RW50aXRpZXMgPSBzb3J0QnkoXG5cdFx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0ZnVuY3Rpb24oIHRpY2tldEVudGl0eSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApID9cblx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnN0YXJ0RGF0ZS50b01pbGxpcygpIDpcblx0XHRcdFx0XHRcdFx0MDtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2J5LW5hbWUnIDpcblx0XHRcdHRpY2tldEVudGl0aWVzID0gc29ydEJ5KCB0aWNrZXRFbnRpdGllcywgWyAnbmFtZScgXSApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnYnktaWQnIDpcblx0XHRcdHRpY2tldEVudGl0aWVzID0gc29ydEJ5KCB0aWNrZXRFbnRpdGllcywgWyAnaWQnIF0gKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2J5LW9yZGVyJyA6XG5cdFx0XHR0aWNrZXRFbnRpdGllcyA9IHNvcnRCeSggdGlja2V0RW50aXRpZXMsIFsgJ29yZGVyJyBdICk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gdGlja2V0RW50aXRpZXM7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSB0aWNrZXRFbnRpdHkgICAgZXZlbnQgdGlja2V0IG9iamVjdFxuICogQHBhcmFtIHtudW1iZXJ9IG1heFF1YW50aXR5XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHNvbGQvcXR5ID49IG1heFF1YW50aXR5XG4gKi9cbmNvbnN0IHBlcmNlbnRTb2xkQXRPckFib3ZlID0gKCB0aWNrZXRFbnRpdHksIG1heFF1YW50aXR5ICkgPT4ge1xuXHRyZXR1cm4gdmFsaWRGaW5pdGVRdWFudGl0eSggdGlja2V0RW50aXR5ICkgJiZcblx0XHQoXG5cdFx0XHRwYXJzZUludCggdGlja2V0RW50aXR5LnNvbGQsIDEwICkgL1xuXHRcdFx0cGFyc2VJbnQoIHRpY2tldEVudGl0eS5xdHksIDEwICkgPj0gKCBtYXhRdWFudGl0eSAvIDEwMCApXG5cdFx0KTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eSAgICBldmVudCB0aWNrZXQgb2JqZWN0XG4gKiBAcGFyYW0ge251bWJlcn0gbWF4UXVhbnRpdHlcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgc29sZC9xdHkgbGVzcyB0aGFuIHRoYW4gcXR5XG4gKi9cbmNvbnN0IHBlcmNlbnRTb2xkQmVsb3cgPSAoIHRpY2tldEVudGl0eSwgbWF4UXVhbnRpdHkgKSA9PiB7XG5cdHJldHVybiAoXG5cdFx0dmFsaWRJbmZpbml0ZVF1YW50aXR5KCB0aWNrZXRFbnRpdHkgKVxuXHQpIHx8IChcblx0XHR2YWxpZEZpbml0ZVF1YW50aXR5KCB0aWNrZXRFbnRpdHkgKSAmJlxuXHRcdChcblx0XHRcdHBhcnNlSW50KCB0aWNrZXRFbnRpdHkuc29sZCwgMTAgKSAvXG5cdFx0XHRwYXJzZUludCggdGlja2V0RW50aXR5LnF0eSwgMTAgKSA8ICggbWF4UXVhbnRpdHkgLyAxMDAgKVxuXHRcdClcblx0KTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eSAgICBldmVudCB0aWNrZXQgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHF0eSBwcm9wZXJ0eSBpcyB2YWxpZCBhbmQgTk9UIGluZmluaXRlXG4gKi9cbmNvbnN0IHZhbGlkRmluaXRlUXVhbnRpdHkgPSAoIHRpY2tldEVudGl0eSApID0+IHtcblx0cmV0dXJuIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksICd0aWNrZXQnICkgJiZcblx0XHR0aWNrZXRFbnRpdHkucXR5ICE9PSAnSU5GJyAmJlxuXHRcdHRpY2tldEVudGl0eS5xdHkgIT09IEluZmluaXR5ICYmXG5cdFx0cGFyc2VJbnQoIHRpY2tldEVudGl0eS5xdHksIDEwICkgPiAwO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gdGlja2V0RW50aXR5ICAgIGV2ZW50IHRpY2tldCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgcXR5IHByb3BlcnR5IGlzIHZhbGlkIGFuZCB1bmxpbWl0ZWRcbiAqL1xuY29uc3QgdmFsaWRJbmZpbml0ZVF1YW50aXR5ID0gKCB0aWNrZXRFbnRpdHkgKSA9PiB7XG5cdHJldHVybiBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApICYmIChcblx0XHR0aWNrZXRFbnRpdHkucXR5ID09PSAnSU5GJyB8fCB0aWNrZXRFbnRpdHkucXR5ID09PSBJbmZpbml0eVxuXHQpO1xufTtcblxuLyoqXG4gKiBzZWFyY2hUaWNrZXRFbnRpdGllc1xuICogcmVkdWNlcyB0aWNrZXRzIGFycmF5IGJhc2VkIG9uIHZhbHVlIG9mIHRoZSBcInNlYXJjaERhdGVOYW1lXCIgZmlsdGVyXG4gKlxuICogQHBhcmFtIHtBcnJheX0gdGlja2V0RW50aXRpZXMgXHRcdG9yaWdpbmFsIHRpY2tldHMgYXJyYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXh0IFx0dmFsdWUgZm9yIHRoZSBcInNlYXJjaFRpY2tldE5hbWVcIiBmaWx0ZXJcbiAqIEByZXR1cm4ge0FycmF5fSBcdFx0XHRcdGZpbHRlcmVkIHRpY2tldHMgYXJyYXlcbiAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaFRpY2tldEVudGl0aWVzID0gKCB0aWNrZXRFbnRpdGllcywgc2VhcmNoVGV4dCA9ICcnICkgPT4ge1xuXHRyZXR1cm4gc2VhcmNoVGV4dCAhPT0gJycgP1xuXHRcdHRpY2tldEVudGl0aWVzLmZpbHRlciggKCB0aWNrZXRFbnRpdHkgKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGlja2V0RW50aXR5Lm5hbWUudG9Mb3dlckNhc2UoKVxuXHRcdFx0XHQuc2VhcmNoKCBzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkgKSAhPT0gLTE7XG5cdFx0fSApIDpcblx0XHR0aWNrZXRFbnRpdGllcztcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgd2l0aFNlbGVjdCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbmNvbnN0IERFRkFVTFRfRU1QVFlfQVJSQVkgPSBbXTtcblxuY29uc3Qgd2l0aEZpbHRlcmVkVGlja2V0RW50aXRpZXMgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0d2l0aFNlbGVjdChcblx0XHQoIHNlbGVjdCApID0+IHtcblx0XHRcdGNvbnN0IHN0b3JlID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9maWx0ZXItc3RhdGUnICk7XG5cdFx0XHRjb25zdCB7IGdldEVudGl0aWVzQnlJZHMgfSA9IHNlbGVjdCggJ2V2ZW50ZXNwcmVzc28vY29yZScgKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZpbHRlcmVkVGlja2V0RW50aXRpZXM6IGdldEVudGl0aWVzQnlJZHMoXG5cdFx0XHRcdFx0J3RpY2tldCcsXG5cdFx0XHRcdFx0c3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdFx0J2V2ZW50LWVkaXRvci10aWNrZXQtbGlzdCcsXG5cdFx0XHRcdFx0XHQnZmlsdGVyZWRUaWNrZXRJZHMnLFxuXHRcdFx0XHRcdFx0REVGQVVMVF9FTVBUWV9BUlJBWVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSxcblx0XHRcdH07XG5cdFx0fVxuXHQpLFxuXHQnd2l0aEZpbHRlcmVkVGlja2V0RW50aXRpZXMnXG4pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoRmlsdGVyZWRUaWNrZXRFbnRpdGllcztcbiIsImltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IHdpdGhTZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgaW50ZXJzZWN0aW9uIH0gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgREVGQVVMVF9FTVBUWV9BUlJBWSA9IFtdO1xuXG5jb25zdCB3aXRoVGlja2V0RW50aXRpZXNGb3JGaWx0ZXJlZERhdGVFbnRpdGllcyA9IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHR3aXRoU2VsZWN0KCAoXG5cdFx0c2VsZWN0LFxuXHRcdHtcblx0XHRcdGZpbHRlcmVkRGF0ZUVudGl0aWVzID0gREVGQVVMVF9FTVBUWV9BUlJBWSxcblx0XHRcdHRpY2tldEVudGl0aWVzID0gREVGQVVMVF9FTVBUWV9BUlJBWSxcblx0XHRcdGlzQ2hhaW5lZCA9IHRydWUsXG5cdFx0fVxuXHQpID0+IHtcblx0XHRpZiAoICEgaXNDaGFpbmVkICkge1xuXHRcdFx0cmV0dXJuIHsgdGlja2V0RW50aXRpZXMgfTtcblx0XHR9XG5cdFx0Y29uc3QgeyBnZXRSZWxhdGlvbklkc0ZvckVudGl0eVJlbGF0aW9uIH0gPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0Y29uc3QgZGF0ZUlkcyA9IGZpbHRlcmVkRGF0ZUVudGl0aWVzLm1hcCggKCBkYXRlRW50aXR5ICkgPT4gZGF0ZUVudGl0eS5pZCApO1xuXHRcdC8vIEB0b2RvIHBvdGVudGlhbCBvcHRpbWl6YXRpb24sIG9ubHkgcmVmaWx0ZXIgdGlja2V0IGVudGl0aWVzIGlmXG5cdFx0Ly8gZWl0aGVyIHRpY2tldEVudGl0aWVzIGhhdmUgY2hhbmdlZCBvciBkYXRlSWRzIGhhdmUgY2hhbmdlZC5cblx0XHQvLyByaWdodCBub3cgdGhpcyBpcyBjcmVhdGluZyBhIG5ldyBhcnJheSBvbiBldmVyeSByZW5kZXIgc29cblx0XHQvLyBpdCdzIG5vdCByZWFsbHkgb3B0aW1hbC5cblx0XHRjb25zdCBmaWx0ZXJlZFRpY2tldEVudGl0aWVzID0gdGlja2V0RW50aXRpZXMuZmlsdGVyKCAoIHRpY2tldEVudGl0eSApID0+IHtcblx0XHRcdGNvbnN0IHJlbGF0ZWREYXRlRW50aXRpZXMgPSBnZXRSZWxhdGlvbklkc0ZvckVudGl0eVJlbGF0aW9uKFxuXHRcdFx0XHR0aWNrZXRFbnRpdHksXG5cdFx0XHRcdCdkYXRldGltZSdcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gcmVsYXRlZERhdGVFbnRpdGllcy5sZW5ndGggPiAwICYmXG5cdFx0XHRcdGludGVyc2VjdGlvbiggcmVsYXRlZERhdGVFbnRpdGllcywgZGF0ZUlkcyApLmxlbmd0aCA+IDA7XG5cdFx0fSApO1xuXHRcdHJldHVybiB7IHRpY2tldEVudGl0aWVzOiBmaWx0ZXJlZFRpY2tldEVudGl0aWVzIH07XG5cdH0gKSxcblx0J3dpdGhUaWNrZXRFbnRpdGllc0ZvckZpbHRlcmVkRGF0ZUVudGl0aWVzJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFRpY2tldEVudGl0aWVzRm9yRmlsdGVyZWREYXRlRW50aXRpZXM7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBGcmFnbWVudCwgdXNlTWVtbywgdXNlRWZmZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50LCBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBFbnRpdHlMaXN0RmlsdGVyQmFyIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgd2l0aEZpbHRlcmVkRGF0ZUVudGl0aWVzIH0gZnJvbSAnLi4vLi4vLi4vZGF0ZXMtYW5kLXRpbWVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0ZmlsdGVyVGlja2V0RW50aXRpZXMsXG5cdHNlYXJjaFRpY2tldEVudGl0aWVzLFxuXHRzb3J0VGlja2V0RW50aXRpZXNMaXN0LFxufSBmcm9tICcuL3RpY2tldC1lbnRpdGllcy1saXN0LWZpbHRlci11dGlscyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFRpY2tldEVudGl0eUxpc3RGaWx0ZXJCYXIgfSBmcm9tICcuL3RpY2tldC1lbnRpdGllcy1saXN0LWZpbHRlci1iYXInO1xuaW1wb3J0IHdpdGhUaWNrZXRFbnRpdGllc0ZvckZpbHRlcmVkRGF0ZUVudGl0aWVzXG5cdGZyb20gJy4vd2l0aC10aWNrZXQtZW50aXRpZXMtZm9yLWZpbHRlcmVkLWRhdGUtZW50aXRpZXMnO1xuXG5jb25zdCBERUZBVUxUX0VNUFRZX0FSUkFZID0gW107XG5cbi8qKlxuICogZmlsdGVycyB0aGUgdGlja2V0cyBsaXN0IGJhc2VkIG9uIHRoZSBjdXJyZW50IGZpbHRlciBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHRpY2tldEVudGl0aWVzXG4gKiBAcGFyYW0ge3N0cmluZ30gc2hvd1RpY2tldHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aWNrZXRzU29ydGVkQnlcbiAqIEByZXR1cm4ge0FycmF5fSBmaWx0ZXJlZCBsaXN0IG9mIHRpY2tldHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpbHRlcmVkVGlja2V0RW50aXRpZXNMaXN0ID0gKCB0aWNrZXRFbnRpdGllcywgc2hvd1RpY2tldHMsIHRpY2tldHNTb3J0ZWRCeSApID0+IHtcblx0cmV0dXJuIHNob3dUaWNrZXRzICYmIHRpY2tldHNTb3J0ZWRCeSAmJiAhIGlzRW1wdHkoIHRpY2tldEVudGl0aWVzICkgP1xuXHRcdHNvcnRUaWNrZXRFbnRpdGllc0xpc3QoXG5cdFx0XHRmaWx0ZXJUaWNrZXRFbnRpdGllcyggdGlja2V0RW50aXRpZXMsIHNob3dUaWNrZXRzICksXG5cdFx0XHR0aWNrZXRzU29ydGVkQnlcblx0XHQpIDpcblx0XHRbXTtcbn07XG4vKipcbiAqIHdpdGhUaWNrZXRFbnRpdGllc0xpc3RGaWx0ZXJCYXJcbiAqIEhpZ2hlci1PcmRlci1Db21wb25lbnQgdGhhdCB3cmFwcyBhbiBcIkVudGl0eUxpc3RcIiBjb21wb25lbnRcbiAqIHdpdGggYW4gRW50aXR5TGlzdEZpbHRlckJhciAmIFRpY2tldEVudGl0eUxpc3RGaWx0ZXJCYXIgY29tcG9uZW50XG4gKiB0aGF0IGNvbnRyb2xzIGhvdyBlbnRpdGllcyBhcmUgZGlzcGxheWVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IEVudGl0eUxpc3RcbiAqIEByZXR1cm4ge09iamVjdH0gRW50aXR5TGlzdCB3aXRoIGFkZGVkIFRpY2tldHNMaXN0RmlsdGVyQmFyXG4gKi9cbmNvbnN0IHdpdGhUaWNrZXRFbnRpdGllc0xpc3RGaWx0ZXJCYXIgPSBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0KCBFbnRpdHlMaXN0ICkgPT4gKCB7XG5cdFx0c2hvd1RpY2tldHMsXG5cdFx0c2V0U2hvd1RpY2tldHMsXG5cdFx0dGlja2V0c1NvcnRlZEJ5LFxuXHRcdHNldFRpY2tldHNTb3J0ZWRCeSxcblx0XHRkaXNwbGF5VGlja2V0RGF0ZSxcblx0XHRzZXREaXNwbGF5VGlja2V0RGF0ZSxcblx0XHRpc0NoYWluZWQsXG5cdFx0c2V0SXNDaGFpbmVkLFxuXHRcdHNlYXJjaFRpY2tldE5hbWUsXG5cdFx0c2V0U2VhcmNoVGlja2V0TmFtZSxcblx0XHR0aWNrZXRzUGVyUGFnZSxcblx0XHRzZXRUaWNrZXRzUGVyUGFnZSxcblx0XHR0aWNrZXRzVmlldyxcblx0XHRzZXRUaWNrZXRzTGlzdFZpZXcsXG5cdFx0c2V0VGlja2V0c0dyaWRWaWV3LFxuXHRcdHNldEZpbHRlcmVkVGlja2V0RW50aXRpZXMsXG5cdFx0dGlja2V0RW50aXRpZXMgPSBERUZBVUxUX0VNUFRZX0FSUkFZLFxuXHRcdGZpbHRlcmVkRGF0ZUVudGl0aWVzID0gREVGQVVMVF9FTVBUWV9BUlJBWSxcblx0XHQuLi5vdGhlclByb3BzXG5cdH0gKSA9PiB7XG5cdFx0Y29uc3QgZmlsdGVyZWRFbnRpdGllcyA9IHVzZU1lbW8oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGVudGl0aWVzID0gc2VhcmNoVGlja2V0RW50aXRpZXMoIHRpY2tldEVudGl0aWVzLCBzZWFyY2hUaWNrZXROYW1lICk7XG5cdFx0XHRcdHJldHVybiBnZXRGaWx0ZXJlZFRpY2tldEVudGl0aWVzTGlzdChcblx0XHRcdFx0XHRlbnRpdGllcyxcblx0XHRcdFx0XHRzaG93VGlja2V0cyxcblx0XHRcdFx0XHR0aWNrZXRzU29ydGVkQnlcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRbXG5cdFx0XHRcdHRpY2tldEVudGl0aWVzLFxuXHRcdFx0XHRzZWFyY2hUaWNrZXROYW1lLFxuXHRcdFx0XHRzaG93VGlja2V0cyxcblx0XHRcdFx0dGlja2V0c1NvcnRlZEJ5LFxuXHRcdFx0XVxuXHRcdCk7XG5cdFx0Ly8gd2hlbmV2ZXIgZmlsdGVyZWQgZW50aXRpZXMgY2hhbmdlcyBsZXQncyB1cGRhdGUgdGhlIHRpY2tldCBpZHNcblx0XHQvLyBpbiB0aGUgc3RhdGUuXG5cdFx0dXNlRWZmZWN0KCAoKSA9PiB7XG5cdFx0XHRzZXRGaWx0ZXJlZFRpY2tldEVudGl0aWVzKFxuXHRcdFx0XHRmaWx0ZXJlZEVudGl0aWVzLm1hcCggKCB0aWNrZXRFbnRpdHkgKSA9PiB0aWNrZXRFbnRpdHkuaWQgKVxuXHRcdFx0KTtcblx0XHR9LCBbIGlzQ2hhaW5lZCwgZmlsdGVyZWREYXRlRW50aXRpZXMgXSApO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PEVudGl0eUxpc3RGaWx0ZXJCYXJcblx0XHRcdFx0XHRuYW1lPVwiVGlja2V0RW50aXR5TGlzdEZpbHRlckJhclwiXG5cdFx0XHRcdFx0c2VhcmNoVGV4dD17IHNlYXJjaFRpY2tldE5hbWUgfVxuXHRcdFx0XHRcdHNldFNlYXJjaFRleHQ9eyBzZXRTZWFyY2hUaWNrZXROYW1lIH1cblx0XHRcdFx0XHRwZXJQYWdlPXsgdGlja2V0c1BlclBhZ2UgfVxuXHRcdFx0XHRcdHZpZXc9eyB0aWNrZXRzVmlldyB9XG5cdFx0XHRcdFx0c2V0UGVyUGFnZT17IHNldFRpY2tldHNQZXJQYWdlIH1cblx0XHRcdFx0XHRzZXRMaXN0Vmlldz17IHNldFRpY2tldHNMaXN0VmlldyB9XG5cdFx0XHRcdFx0c2V0R3JpZFZpZXc9eyBzZXRUaWNrZXRzR3JpZFZpZXcgfVxuXHRcdFx0XHRcdGVudGl0eUZpbHRlcnM9e1xuXHRcdFx0XHRcdFx0PFRpY2tldEVudGl0eUxpc3RGaWx0ZXJCYXJcblx0XHRcdFx0XHRcdFx0c2hvd1RpY2tldHM9eyBzaG93VGlja2V0cyB9XG5cdFx0XHRcdFx0XHRcdHNldFNob3dUaWNrZXRzPXsgc2V0U2hvd1RpY2tldHMgfVxuXHRcdFx0XHRcdFx0XHR0aWNrZXRzU29ydGVkQnk9eyB0aWNrZXRzU29ydGVkQnkgfVxuXHRcdFx0XHRcdFx0XHRzZXRUaWNrZXRzU29ydGVkQnk9eyBzZXRUaWNrZXRzU29ydGVkQnkgfVxuXHRcdFx0XHRcdFx0XHRkaXNwbGF5VGlja2V0RGF0ZT17IGRpc3BsYXlUaWNrZXREYXRlIH1cblx0XHRcdFx0XHRcdFx0c2V0RGlzcGxheVRpY2tldERhdGU9eyBzZXREaXNwbGF5VGlja2V0RGF0ZSB9XG5cdFx0XHRcdFx0XHRcdGlzQ2hhaW5lZD17IGlzQ2hhaW5lZCB9XG5cdFx0XHRcdFx0XHRcdHNldElzQ2hhaW5lZD17IHNldElzQ2hhaW5lZCB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0Lz5cblx0XHRcdFx0PEVudGl0eUxpc3Rcblx0XHRcdFx0XHRlbnRpdGllcz17IGZpbHRlcmVkRW50aXRpZXMgfVxuXHRcdFx0XHRcdGVudGl0aWVzUGVyUGFnZT17IHRpY2tldHNQZXJQYWdlIH1cblx0XHRcdFx0XHR2aWV3PXsgdGlja2V0c1ZpZXcgfVxuXHRcdFx0XHRcdG5vUmVzdWx0c1RleHQ9e1xuXHRcdFx0XHRcdFx0X18oXG5cdFx0XHRcdFx0XHRcdCdubyByZXN1bHRzIGZvdW5kICh0cnkgY2hhbmdpbmcgZmlsdGVycyknLFxuXHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRpc3BsYXlUaWNrZXREYXRlPXsgZGlzcGxheVRpY2tldERhdGUgfVxuXHRcdFx0XHRcdGlzQ2hhaW5lZD17IGlzQ2hhaW5lZCB9XG5cdFx0XHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KTtcblx0fSxcblx0J3dpdGhUaWNrZXRFbnRpdGllc0xpc3RGaWx0ZXJCYXInXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKCBbXG5cdHdpdGhGaWx0ZXJlZERhdGVFbnRpdGllcyxcblx0d2l0aFRpY2tldEVudGl0aWVzRm9yRmlsdGVyZWREYXRlRW50aXRpZXMsXG5cdHdpdGhUaWNrZXRFbnRpdGllc0xpc3RGaWx0ZXJCYXIsXG5dICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQsIGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgd2l0aFNlbGVjdCwgd2l0aERpc3BhdGNoIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcblxuY29uc3QgREVGQVVMVF9FTVBUWV9BUlJBWSA9IFtdO1xuXG4vKipcbiAqIHdpdGhUaWNrZXRFbnRpdGllc0xpc3RGaWx0ZXJTdGF0ZVxuICogSGlnaGVyLU9yZGVyLUNvbXBvbmVudCB0aGF0IHdyYXBzIGEgXCJUaWNrZXRzTGlzdEZpbHRlckJhclwiIGNvbXBvbmVudFxuICogaW4gb3JkZXIgdG8gcHJvdmlkZSBzdGF0ZSBtYW5hZ2VtZW50IGZvciBpdCBhbmQgaXRzIGNoaWxkcmVuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFdyYXBwZWRDb21wb25lbnRcbiAqIEByZXR1cm4ge09iamVjdH0gV3JhcHBlZENvbXBvbmVudCB3aXRoIGFkZGVkIERhdGVzTGlzdEZpbHRlclN0YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHRjb21wb3NlKCBbXG5cdFx0d2l0aFNlbGVjdCggKCBzZWxlY3QsIG93blByb3BzICkgPT4ge1xuXHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRzaG93VGlja2V0cyA9ICdvbi1zYWxlLWFuZC1wZW5kaW5nJyxcblx0XHRcdFx0dGlja2V0c1NvcnRlZEJ5ID0gJ2Nocm9ub2xvZ2ljYWxseScsXG5cdFx0XHRcdGRpc3BsYXlUaWNrZXREYXRlID0gJ3N0YXJ0Jyxcblx0XHRcdFx0aXNDaGFpbmVkID0gdHJ1ZSxcblx0XHRcdFx0c2VhcmNoVGlja2V0TmFtZSA9ICcnLFxuXHRcdFx0XHR0aWNrZXRzUGVyUGFnZSA9IDYsXG5cdFx0XHRcdHRpY2tldHNWaWV3ID0gJ2dyaWQnLFxuXHRcdFx0fSA9IG93blByb3BzO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdGNvbnN0IHsgZ2V0RW50aXRpZXNCeUlkcyB9ID0gc2VsZWN0KCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2hvd1RpY2tldHM6IHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLXRpY2tldC1saXN0Jyxcblx0XHRcdFx0XHQnc2hvd1RpY2tldHMnLFxuXHRcdFx0XHRcdHNob3dUaWNrZXRzXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRpY2tldHNTb3J0ZWRCeTogc3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCd0aWNrZXRzU29ydGVkQnknLFxuXHRcdFx0XHRcdHRpY2tldHNTb3J0ZWRCeVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkaXNwbGF5VGlja2V0RGF0ZTogc3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCdkaXNwbGF5VGlja2V0RGF0ZScsXG5cdFx0XHRcdFx0ZGlzcGxheVRpY2tldERhdGVcblx0XHRcdFx0KSxcblx0XHRcdFx0aXNDaGFpbmVkOiBzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2V2ZW50LWVkaXRvci10aWNrZXQtbGlzdCcsXG5cdFx0XHRcdFx0J2lzQ2hhaW5lZCcsXG5cdFx0XHRcdFx0aXNDaGFpbmVkXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNlYXJjaFRpY2tldE5hbWU6IHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdzZWFyY2hUaWNrZXROYW1lJyxcblx0XHRcdFx0XHRzZWFyY2hUaWNrZXROYW1lXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRpY2tldHNQZXJQYWdlOiBwYXJzZUludChcblx0XHRcdFx0XHRzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLXRpY2tldC1saXN0Jyxcblx0XHRcdFx0XHRcdCd0aWNrZXRzUGVyUGFnZScsXG5cdFx0XHRcdFx0XHR0aWNrZXRzUGVyUGFnZVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0MTBcblx0XHRcdFx0KSxcblx0XHRcdFx0dGlja2V0c1ZpZXc6IHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLXRpY2tldC1saXN0Jyxcblx0XHRcdFx0XHQndGlja2V0c1ZpZXcnLFxuXHRcdFx0XHRcdHRpY2tldHNWaWV3XG5cdFx0XHRcdCksXG5cdFx0XHRcdGZpbHRlcmVkVGlja2V0RW50aXRpZXM6IGdldEVudGl0aWVzQnlJZHMoXG5cdFx0XHRcdFx0J3RpY2tldCcsXG5cdFx0XHRcdFx0c3RvcmUuZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdFx0J2V2ZW50LWVkaXRvci10aWNrZXQtbGlzdCcsXG5cdFx0XHRcdFx0XHQnZmlsdGVyZWRUaWNrZXRJZHMnLFxuXHRcdFx0XHRcdFx0REVGQVVMVF9FTVBUWV9BUlJBWVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSxcblx0XHRcdH07XG5cdFx0fSApLFxuXHRcdHdpdGhEaXNwYXRjaCggKCBkaXNwYXRjaCApID0+IHtcblx0XHRcdGNvbnN0IHN0b3JlID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNldFNob3dUaWNrZXRzOiAoIHNob3dUaWNrZXRzICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCdzaG93VGlja2V0cycsXG5cdFx0XHRcdFx0c2hvd1RpY2tldHNcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0VGlja2V0c1NvcnRlZEJ5OiAoIHRpY2tldHNTb3J0ZWRCeSApID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLXRpY2tldC1saXN0Jyxcblx0XHRcdFx0XHQndGlja2V0c1NvcnRlZEJ5Jyxcblx0XHRcdFx0XHR0aWNrZXRzU29ydGVkQnlcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0RGlzcGxheVRpY2tldERhdGU6ICggZGlzcGxheVRpY2tldERhdGUgKSA9PiBzdG9yZVxuXHRcdFx0XHRcdC5zZXRGaWx0ZXIoXG5cdFx0XHRcdFx0XHQnZXZlbnQtZWRpdG9yLXRpY2tldC1saXN0Jyxcblx0XHRcdFx0XHRcdCdkaXNwbGF5VGlja2V0RGF0ZScsXG5cdFx0XHRcdFx0XHRkaXNwbGF5VGlja2V0RGF0ZVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdHNldElzQ2hhaW5lZDogKCBpc0NoYWluZWQgKSA9PiBzdG9yZS5zZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2V2ZW50LWVkaXRvci10aWNrZXQtbGlzdCcsXG5cdFx0XHRcdFx0J2lzQ2hhaW5lZCcsXG5cdFx0XHRcdFx0ISEgaXNDaGFpbmVkXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldFNlYXJjaFRpY2tldE5hbWU6ICggc2VhcmNoVGlja2V0TmFtZSApID0+IHN0b3JlLnNldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdzZWFyY2hUaWNrZXROYW1lJyxcblx0XHRcdFx0XHRzZWFyY2hUaWNrZXROYW1lXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldFRpY2tldHNQZXJQYWdlOiAoIHRpY2tldHNQZXJQYWdlICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCd0aWNrZXRzUGVyUGFnZScsXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRpY2tldHNQZXJQYWdlLCAxMCApXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldFRpY2tldHNMaXN0VmlldzogKCkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCd0aWNrZXRzVmlldycsXG5cdFx0XHRcdFx0J2xpc3QnXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldFRpY2tldHNHcmlkVmlldzogKCkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCd0aWNrZXRzVmlldycsXG5cdFx0XHRcdFx0J2dyaWQnXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldEZpbHRlcmVkVGlja2V0RW50aXRpZXM6ICggdGlja2V0RW50aXR5SWRzICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdldmVudC1lZGl0b3ItdGlja2V0LWxpc3QnLFxuXHRcdFx0XHRcdCdmaWx0ZXJlZFRpY2tldElkcycsXG5cdFx0XHRcdFx0dGlja2V0RW50aXR5SWRzXG5cdFx0XHRcdCksXG5cdFx0XHR9O1xuXHRcdH0gKSxcblx0XSApLFxuXHQnd2l0aFRpY2tldEVudGl0aWVzTGlzdEZpbHRlclN0YXRlJ1xuKTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS10aWNrZXRzLWxpc3QtZ3JpZC12aWV3XCI6XCJlZS10aWNrZXRzLWxpc3QtZ3JpZC12aWV3XCIsXCJlZS1lZGl0b3ItdGlja2V0LW1haW5cIjpcImVlLWVkaXRvci10aWNrZXQtbWFpblwiLFwiZWUtZWRpdG9yLXRpY2tldC1kZXRhaWxzLXdyYXBwZXItZGl2XCI6XCJlZS1lZGl0b3ItdGlja2V0LWRldGFpbHMtd3JhcHBlci1kaXZcIixcImVlLWVkaXRvci10aWNrZXQtbmFtZS1oZWFkaW5nXCI6XCJlZS1lZGl0b3ItdGlja2V0LW5hbWUtaGVhZGluZ1wiLFwiZWUtaW5saW5lLWVkaXQtdGV4dFwiOlwiZWUtaW5saW5lLWVkaXQtdGV4dFwiLFwiZWUtbG9uZy10aXRsZVwiOlwiZWUtbG9uZy10aXRsZVwiLFwiZWUtZWRpdG9yLXRpY2tldC1kZXNjLWRpdlwiOlwiZWUtZWRpdG9yLXRpY2tldC1kZXNjLWRpdlwiLFwiZWUtdGlja2V0LWRlc2MtZXhjZXJwdFwiOlwiZWUtdGlja2V0LWRlc2MtZXhjZXJwdFwiLFwiZWUtdGlja2V0LXByaWNlXCI6XCJlZS10aWNrZXQtcHJpY2VcIixcImVlLWVkaXRvci10aWNrZXQtZGV0YWlscy1zb2xkLXJzcnZkLXF0eS1kaXZcIjpcImVlLWVkaXRvci10aWNrZXQtZGV0YWlscy1zb2xkLXJzcnZkLXF0eS1kaXZcIixcInRpY2tldC1yZWdpc3RyYW50cy1sYWJlbFwiOlwidGlja2V0LXJlZ2lzdHJhbnRzLWxhYmVsXCIsXCJlZS1lZGl0b3ItdGlja2V0LWFjdGlvbnMtbWVudVwiOlwiZWUtZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnVcIn07IiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBFZGl0b3JUaWNrZXRFbnRpdHlHcmlkSXRlbSBmcm9tICcuL2VkaXRvci10aWNrZXQtZW50aXR5LWdyaWQtaXRlbSc7XG5pbXBvcnQgJy4vZWRpdG9yLXRpY2tldC1lbnRpdGllcy1ncmlkLXZpZXcuY3NzJztcblxuLyoqXG4gKiBFZGl0b3JUaWNrZXRFbnRpdGllc0dyaWRWaWV3XG4gKiBEaXNwbGF5cyB0aWNrZXRzIGFzIG1vYmlsZS9maW5nZXIgZnJpZW5kbHkgYmxvY2tzXG4gKiB3aXRoIHRoZSBtb3N0IHJlbGV2YW50IGluZm8gdmlzaWJsZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtBcnJheX0gZW50aXRpZXMgICAgYXJyYXkgb2YgSlNPTiBvYmplY3RzIGRlZmluaW5nIHRoZSBUaWNrZXRzXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzXG4gKiBAcGFyYW0ge21peGVkfSBvdGhlclByb3BzXG4gKiBAcmV0dXJuIHtDb21wb25lbnR9ICAgICAgICAgIGxpc3Qgb2YgcmVuZGVyZWQgVGlja2V0c1xuICovXG5jb25zdCBFZGl0b3JUaWNrZXRFbnRpdGllc0dyaWRWaWV3ID0gKCB7XG5cdGVudGl0aWVzLFxuXHRodG1sQ2xhc3MsXG5cdC4uLm90aGVyUHJvcHNcbn0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyA/XG5cdFx0YCR7IGh0bWxDbGFzcyB9IGVlLXRpY2tldHMtbGlzdC1ncmlkLXZpZXdgIDpcblx0XHQnZWUtdGlja2V0cy1saXN0LWxpc3Qtdmlldyc7XG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfT5cblx0XHRcdHtcblx0XHRcdFx0ZW50aXRpZXMubWFwKFxuXHRcdFx0XHRcdGZ1bmN0aW9uKCB0aWNrZXRFbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaXNNb2RlbEVudGl0eU9mTW9kZWwoIHRpY2tldEVudGl0eSwgJ3RpY2tldCcgKSA/IChcblx0XHRcdFx0XHRcdFx0PEVkaXRvclRpY2tldEVudGl0eUdyaWRJdGVtXG5cdFx0XHRcdFx0XHRcdFx0a2V5PXsgdGlja2V0RW50aXR5LmlkIH1cblx0XHRcdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHk9eyB0aWNrZXRFbnRpdHkgfVxuXHRcdFx0XHRcdFx0XHRcdHsgLi4ub3RoZXJQcm9wcyB9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpIDogbnVsbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvclRpY2tldEVudGl0aWVzR3JpZFZpZXc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgRW50aXR5RGV0YWlsc1BhbmVsLCBJbmxpbmVFZGl0SW5wdXQgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyB0aWNrZXRNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBNb25leSwgU2l0ZUN1cnJlbmN5IH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdHdpdGhQcmljZVR5cGVFbnRpdGllcyxcblx0d2l0aFRpY2tldFByaWNlRW50aXRpZXMsXG59IGZyb20gJy4uLy4uLy4uL2hvY3MnO1xuaW1wb3J0IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvcnMgZnJvbSAnLi4vcHJpY2UtY2FsY3VsYXRvci91c2UtdGlja2V0LXByaWNlLWNhbGN1bGF0b3JzJztcblxuY29uc3QgeyBNT0RFTF9OQU1FOiBUSUNLRVQgfSA9IHRpY2tldE1vZGVsO1xuXG4vKipcbiAqIEVkaXRvclRpY2tldERldGFpbHNcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFRpY2tldCAgICBKU09OIG9iamVjdCBkZWZpbmluZyB0aGUgRXZlbnQgVGlja2V0XG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgIHRpY2tldCBkZXRhaWxzXG4gKi9cbmNvbnN0IEVkaXRvclRpY2tldERldGFpbHMgPSAoIHtcblx0dGlja2V0RW50aXR5LFxuXHRzaG93RGVzYyA9ICdleGNlcnB0Jyxcblx0c2hvd1ByaWNlID0gdHJ1ZSxcblx0cHJpY2VUeXBlRW50aXRpZXMsXG5cdHByaWNlRW50aXRpZXMsXG5cdHJlZnJlc2hlZCxcbn0gKSA9PiB7XG5cdC8vIEB0b2RvIEkgdHJpZWQgbWFraW5nIHByaWNlcyBhIGRlcGVuZGVuY3kgb24gdGhlIHVwZGF0ZVRpY2tldFByaWNlIGhvb2sgYnV0IGZvclxuXHQvLyBzb21lIHJlYXNvbiBwcmljZXMgbmV2ZXIgZ2V0cyB1cGRhdGVkLCBzbyBmb3Igbm93IHVzaW5nIGEgcmVmIHdpbGwgY2F0Y2hcblx0Ly8gdGhlIGNoYW5nZSBpbiB0aGUgcHJpY2VzLiBGb3IgZnV0dXJlIHJlZmFjdG9yLCBtaWdodCB3YW50IHRvIHRyeSBhbmQgbW92ZVxuXHQvLyBwcmljZXMgc3RhdGUgdXAuXG5cdGNvbnN0IGN1cnJlbnRQcmljZXMgPSB1c2VSZWYoIHByaWNlRW50aXRpZXMgKTtcblx0dXNlRWZmZWN0KCAoKSA9PiB7XG5cdFx0Y3VycmVudFByaWNlcy5jdXJyZW50ID0gcHJpY2VFbnRpdGllcztcblx0fSwgWyBwcmljZUVudGl0aWVzIF0gKTtcblx0Y29uc3QgeyBjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2UgfSA9IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvcnMoIHByaWNlVHlwZUVudGl0aWVzICk7XG5cdGNvbnN0IHRpY2tldE5hbWUgPSB1c2VNZW1vKFxuXHRcdCgpID0+IHtcblx0XHRcdGNvbnN0IGh0bWxDbGFzcyA9IHRpY2tldEVudGl0eS5uYW1lICYmIHRpY2tldEVudGl0eS5uYW1lLmxlbmd0aCA+IDQwID9cblx0XHRcdFx0J2VlLWVkaXRvci10aWNrZXQtbmFtZS1oZWFkaW5nIGVlLWxvbmctdGl0bGUnIDpcblx0XHRcdFx0J2VlLWVkaXRvci10aWNrZXQtbmFtZS1oZWFkaW5nJztcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxoMSBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfT5cblx0XHRcdFx0XHQ8SW5saW5lRWRpdElucHV0XG5cdFx0XHRcdFx0XHRodG1sSWQ9eyBgZWRpdG9yLXRpY2tldC1uYW1lLSR7IHRpY2tldEVudGl0eS5pZCB9YCB9XG5cdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdFx0XHR2YWx1ZT17IHRpY2tldEVudGl0eS5uYW1lIH1cblx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuYW1lICkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkubmFtZSA9IG5hbWU7XG5cdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdUaWNrZXQgTmFtZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9oMT5cblx0XHRcdCk7XG5cdFx0fSxcblx0XHRbIHRpY2tldEVudGl0eSwgcmVmcmVzaGVkIF1cblx0KTtcblxuXHRjb25zdCB0aWNrZXREZXNjcmlwdGlvbiA9IHVzZU1lbW8oICgpID0+IHtcblx0XHRjb25zdCBodG1sQ2xhc3MgPSBzaG93RGVzYyA9PT0gJ2V4Y2VycHQnID9cblx0XHRcdCdlZS1lZGl0b3ItdGlja2V0LWRlc2MtZGl2IGVlLXRpY2tldC1kZXNjLWV4Y2VycHQnIDpcblx0XHRcdCdlZS1lZGl0b3ItdGlja2V0LWRlc2MtZGl2Jztcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eyBodG1sQ2xhc3MgfT5cblx0XHRcdFx0PElubGluZUVkaXRJbnB1dFxuXHRcdFx0XHRcdGh0bWxJZD17IGBlZGl0b3ItdGlja2V0LWRlc2MtJHsgdGlja2V0RW50aXR5LmlkIH1gIH1cblx0XHRcdFx0XHR0eXBlPVwidGV4dGFyZWFcIlxuXHRcdFx0XHRcdHZhbHVlPXsgdGlja2V0RW50aXR5LmRlc2NyaXB0aW9uIH1cblx0XHRcdFx0XHRvbkNoYW5nZT17ICggZGVzY3JpcHRpb24gKSA9PiB7XG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcblx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRsYWJlbD17IF9fKCAnVGlja2V0IERlc2NyaXB0aW9uJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH0sIFsgdGlja2V0RW50aXR5LCBzaG93RGVzYywgcmVmcmVzaGVkIF0gKTtcblxuXHRjb25zdCB1cGRhdGVUaWNrZXRQcmljZSA9IHVzZUNhbGxiYWNrKFxuXHRcdCggcHJpY2UgKSA9PiB7XG5cdFx0XHR0aWNrZXRFbnRpdHkucHJpY2UgPSBuZXcgTW9uZXkoIHByaWNlLCBTaXRlQ3VycmVuY3kgKTtcblx0XHRcdGNhbGN1bGF0ZVRpY2tldEJhc2VQcmljZSggcHJpY2UsIGN1cnJlbnRQcmljZXMuY3VycmVudCwgdHJ1ZSApO1xuXHRcdH0sXG5cdFx0WyB0aWNrZXRFbnRpdHksIHJlZnJlc2hlZCBdXG5cdCk7XG5cblx0LyoqXG5cdCAqIHRpY2tldFByaWNlXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gdGlja2V0IEpTT04gb2JqZWN0IGRlZmluaW5nIHRoZSB0aWNrZXRcblx0ICogQHBhcmFtIHtib29sZWFufSBzaG93UHJpY2Vcblx0ICogQHJldHVybiB7c3RyaW5nfSAgICB0aWNrZXQgcHJpY2Vcblx0ICovXG5cdGNvbnN0IHRpY2tldFByaWNlID0gdXNlTWVtbyhcblx0XHQoKSA9PiB7XG5cdFx0XHRyZXR1cm4gc2hvd1ByaWNlID9cblx0XHRcdFx0KFxuXHRcdFx0XHRcdDxoMiBjbGFzc05hbWU9XCJlZS10aWNrZXQtcHJpY2VcIj5cblx0XHRcdFx0XHRcdDxJbmxpbmVFZGl0SW5wdXRcblx0XHRcdFx0XHRcdFx0aHRtbElkPXsgYGVkaXRvci10aWNrZXQtcHJpY2UtJHsgdGlja2V0RW50aXR5LmlkIH1gIH1cblx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IHRpY2tldEVudGl0eS5wcmljZS5hbW91bnQudG9OdW1iZXIoKSB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBwcmljZSApID0+IHtcblx0XHRcdFx0XHRcdFx0XHR1cGRhdGVUaWNrZXRQcmljZSggcHJpY2UgKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdUaWNrZXQgUHJpY2UnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZUZvcm1hdHRlcj17IHRpY2tldEVudGl0eS5wcmljZS5mb3JtYXR0ZXIuZm9ybWF0TW9uZXkgfVxuXHRcdFx0XHRcdFx0XHRmb3JtYXR0ZXJTZXR0aW5ncz17IHRpY2tldEVudGl0eS5wcmljZS5mb3JtYXR0ZXIuc2V0dGluZ3MgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2gyPlxuXHRcdFx0XHQpIDpcblx0XHRcdFx0Jyc7XG5cdFx0fSxcblx0XHRbIHRpY2tldEVudGl0eSwgc2hvd1ByaWNlLCB1cGRhdGVUaWNrZXRQcmljZSBdXG5cdCk7XG5cblx0LyoqXG5cdCAqIHRpY2tldFNvbGRSZXNlcnZlZENhcGFjaXR5XG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gdGlja2V0RW50aXR5ICAgIEpTT04gb2JqZWN0IGRlZmluaW5nIHRoZSB0aWNrZXRcblx0ICogQHJldHVybiB7c3RyaW5nfSAgICB0aWNrZXQgZGV0YWlsc1xuXHQgKi9cblx0Y29uc3QgdGlja2V0U29sZFJlc2VydmVkQ2FwYWNpdHkgPSB1c2VNZW1vKFxuXHRcdCgpID0+IHtcblx0XHRcdGNvbnN0IGRldGFpbHMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZDogJ3RpY2tldC1zb2xkJyxcblx0XHRcdFx0XHRsYWJlbDogX18oICdzb2xkJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdHZhbHVlOiB0aWNrZXRFbnRpdHkuc29sZCxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGlkOiAndGlja2V0LXJlc2VydmVkJyxcblx0XHRcdFx0XHRsYWJlbDogX18oICdyZXNlcnZlZCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR2YWx1ZTogdGlja2V0RW50aXR5LnJlc2VydmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWQ6ICd0aWNrZXQtcXR5Jyxcblx0XHRcdFx0XHRsYWJlbDogX18oICdxdWFudGl0eScsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHR2YWx1ZTogdGlja2V0RW50aXR5LnF0eSB8fCBJbmZpbml0eSxcblx0XHRcdFx0XHRlZGl0YWJsZToge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3RleHQnLFxuXHRcdFx0XHRcdFx0dmFsdWVUeXBlOiAnbnVtYmVyJyxcblx0XHRcdFx0XHRcdG9uQ2hhbmdlOiAoIHF0eSApID0+IHtcblx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnF0eSA9IHBhcnNlSW50KCBxdHksIDEwICk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZDogJ3RpY2tldC1yZWdpc3RyYW50cycsXG5cdFx0XHRcdFx0bGFiZWw6IF9fKCAncmVnaXN0cmFudHMnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdFx0dmFsdWU6IHRpY2tldEVudGl0eS5zb2xkLFxuXHRcdFx0XHR9LFxuXHRcdFx0XTtcblx0XHRcdHJldHVybiA8RW50aXR5RGV0YWlsc1BhbmVsXG5cdFx0XHRcdGRldGFpbHM9eyBkZXRhaWxzIH1cblx0XHRcdFx0aHRtbENsYXNzPVwiZWUtZWRpdG9yLXRpY2tldC1kZXRhaWxzLXNvbGQtcnNydmQtcXR5LWRpdlwiXG5cdFx0XHQvPjtcblx0XHR9LFxuXHRcdFsgdGlja2V0RW50aXR5LCByZWZyZXNoZWQgXVxuXHQpO1xuXG5cdHJldHVybiBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCBUSUNLRVQgKSA/IChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17ICdlZS1lZGl0b3ItdGlja2V0LWRldGFpbHMtd3JhcHBlci1kaXYnIH0+XG5cdFx0XHR7IHRpY2tldE5hbWUgfVxuXHRcdFx0eyB0aWNrZXRQcmljZSB9XG5cdFx0XHR7IHRpY2tldERlc2NyaXB0aW9uIH1cblx0XHRcdHsgdGlja2V0U29sZFJlc2VydmVkQ2FwYWNpdHkgfVxuXHRcdDwvZGl2PlxuXHQpIDogbnVsbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoIFtcblx0d2l0aFByaWNlVHlwZUVudGl0aWVzLFxuXHR3aXRoVGlja2V0UHJpY2VFbnRpdGllcyxcbl0gKSggRWRpdG9yVGlja2V0RGV0YWlscyApO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQsIHVzZVJlZHVjZXIgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHtcblx0QmlnZ2llQ2FsZW5kYXJEYXRlLFxuXHRDYWxlbmRhckRhdGVSYW5nZSxcblx0d2l0aEVudGl0eVBhcGVyRnJhbWUsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgdGlja2V0TW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9tb2RlbCc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgRWRpdG9yVGlja2V0RW50aXR5RGV0YWlscyBmcm9tICcuL2VkaXRvci10aWNrZXQtZW50aXR5LWRldGFpbHMnO1xuaW1wb3J0IEVkaXRvclRpY2tldEFjdGlvbnNNZW51XG5cdGZyb20gJy4uL2FjdGlvbnMtbWVudS9lZGl0b3ItdGlja2V0LWFjdGlvbnMtbWVudSc7XG5cbmNvbnN0IHtcblx0Z2V0QmFja2dyb3VuZENvbG9yQ2xhc3MsXG5cdGdldFRpY2tldFN0YXR1c1RleHRMYWJlbCxcblx0c3RhdHVzLFxuXHRUSUNLRVRfU1RBVFVTX0lELFxufSA9IHRpY2tldE1vZGVsO1xuXG4vKipcbiAqIEVkaXRvclRpY2tldEVudGl0eUdyaWRJdGVtXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdGlja2V0ICAgIEpTT04gb2JqZWN0IGRlZmluaW5nIHRoZSBFdmVudCBUaWNrZXRcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgIFRoZSB0aWNrZXQgcmVuZGVyZWQgYXMgYSBibG9ja1xuICovXG5jbGFzcyBFZGl0b3JUaWNrZXRFbnRpdHlHcmlkSXRlbSBleHRlbmRzIENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2hvd0RhdGVcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCB0aWNrZXRcblx0ICovXG5cdGRpc3BsYXlUaWNrZXQgPSAoIHRpY2tldEVudGl0eSwgc2hvd0RhdGUgKSA9PiB7XG5cdFx0bGV0IHNpZGViYXJDb2xvckNsYXNzID0gJ2VlLWVkaXRvci10aWNrZXQtY2FsZW5kYXItc2lkZWJhciAnO1xuXHRcdHNpZGViYXJDb2xvckNsYXNzICs9IGdldEJhY2tncm91bmRDb2xvckNsYXNzKCB0aWNrZXRFbnRpdHkgKTtcblx0XHRjb25zdCB0aWNrZXRTdGF0dXNJRCA9IHN0YXR1cyggdGlja2V0RW50aXR5ICk7XG5cdFx0bGV0IGxhYmVsID0gJyc7XG5cdFx0aWYgKCBzaG93RGF0ZSA9PT0gJ3N0YXJ0JyApIHtcblx0XHRcdGxhYmVsID0gX18oICdTYWxlIFN0YXJ0ZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRpZiAoIHRpY2tldFN0YXR1c0lEID09PSBUSUNLRVRfU1RBVFVTX0lELkVYUElSRUQgKSB7XG5cdFx0XHRcdGxhYmVsID0gX18oICdTYWxlIEVuZGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0fSBlbHNlIGlmICggdGlja2V0U3RhdHVzSUQgPT09IFRJQ0tFVF9TVEFUVVNfSUQuUEVORElORyApIHtcblx0XHRcdFx0bGFiZWwgPSBfXyggJ0dvZXMgT24gU2FsZScsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKCBzaG93RGF0ZSA9PT0gJ2VuZCcgKSB7XG5cdFx0XHRsYWJlbCA9IF9fKCAnU2FsZSBFbmRzJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0aWYgKCB0aWNrZXRTdGF0dXNJRCA9PT0gVElDS0VUX1NUQVRVU19JRC5FWFBJUkVEICkge1xuXHRcdFx0XHRsYWJlbCA9IF9fKCAnU2FsZSBFbmRlZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdGlja2V0U3RhdHVzID0gKFxuXHRcdFx0PHNwYW4ga2V5PXsgMSB9IGNsYXNzTmFtZT17ICdlZS1zdGF0dXMtdGFnJyB9PlxuXHRcdFx0XHR7IGdldFRpY2tldFN0YXR1c1RleHRMYWJlbCggdGlja2V0RW50aXR5ICkgfVxuXHRcdFx0PC9zcGFuPlxuXHRcdCk7XG5cblx0XHRzd2l0Y2ggKCBzaG93RGF0ZSApIHtcblx0XHRcdGNhc2UgJ2VuZCcgOlxuXHRcdFx0XHRjb25zdCBlbmQgPSB0aWNrZXRFbnRpdHkuZW5kRGF0ZS50b0Zvcm1hdCggJ2g6bW0gYScgKTtcblx0XHRcdFx0cmV0dXJuIDxCaWdnaWVDYWxlbmRhckRhdGVcblx0XHRcdFx0XHRkYXRlPXsgdGlja2V0RW50aXR5LmVuZERhdGUgfVxuXHRcdFx0XHRcdGh0bWxDbGFzcz17IHNpZGViYXJDb2xvckNsYXNzIH1cblx0XHRcdFx0XHRoZWFkZXJUZXh0PXsgbGFiZWwgfVxuXHRcdFx0XHRcdGZvb3RlclRleHQ9eyBbIGVuZCwgdGlja2V0U3RhdHVzIF0gfVxuXHRcdFx0XHRcdHBvc2l0aW9uPVwicmlnaHRcIlxuXHRcdFx0XHQvPjtcblx0XHRcdGNhc2UgJ2JvdGgnIDpcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8Q2FsZW5kYXJEYXRlUmFuZ2Vcblx0XHRcdFx0XHRcdHN0YXJ0RGF0ZT17IHRpY2tldEVudGl0eS5zdGFydERhdGUgfVxuXHRcdFx0XHRcdFx0ZW5kRGF0ZT17IHRpY2tldEVudGl0eS5lbmREYXRlIH1cblx0XHRcdFx0XHRcdGh0bWxDbGFzcz17IHNpZGViYXJDb2xvckNsYXNzIH1cblx0XHRcdFx0XHRcdGhlYWRlclRleHQ9eyBfXyggJ1NhbGUgRGF0ZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHRmb290ZXJUZXh0PXsgdGlja2V0U3RhdHVzIH1cblx0XHRcdFx0XHRcdHBvc2l0aW9uPVwicmlnaHRcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdzdGFydCcgOlxuXHRcdFx0ZGVmYXVsdCA6XG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gdGlja2V0RW50aXR5LnN0YXJ0RGF0ZS50b0Zvcm1hdCggJ2g6bW0gYScgKTtcblx0XHRcdFx0cmV0dXJuIDxCaWdnaWVDYWxlbmRhckRhdGVcblx0XHRcdFx0XHRkYXRlPXsgdGlja2V0RW50aXR5LnN0YXJ0RGF0ZSB9XG5cdFx0XHRcdFx0aHRtbENsYXNzPXsgc2lkZWJhckNvbG9yQ2xhc3MgfVxuXHRcdFx0XHRcdGhlYWRlclRleHQ9eyBsYWJlbCB9XG5cdFx0XHRcdFx0Zm9vdGVyVGV4dD17IFsgc3RhcnQsIHRpY2tldFN0YXR1cyBdIH1cblx0XHRcdFx0XHRwb3NpdGlvbj1cInJpZ2h0XCJcblx0XHRcdFx0Lz47XG5cdFx0fVxuXHR9O1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHR0aWNrZXRFbnRpdHksXG5cdFx0XHRkaXNwbGF5VGlja2V0RGF0ZSA9ICdzdGFydCcsXG5cdFx0XHRkb1JlZnJlc2gsXG5cdFx0XHRyZWZyZXNoZWQsXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksICd0aWNrZXQnICkgKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgZGF0ZVN0eWxlQ2xhc3MgPSBkaXNwbGF5VGlja2V0RGF0ZSA9PT0gJ2JvdGgnID9cblx0XHRcdCdlZS1lZGl0b3ItZGF0ZS1yYW5nZScgOlxuXHRcdFx0J2VlLWVkaXRvci1kYXRlLXNpbmdsZSc7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyBgZWUtZWRpdG9yLXRpY2tldC1tYWluICR7IGRhdGVTdHlsZUNsYXNzIH1gIH0+XG5cdFx0XHRcdFx0PEVkaXRvclRpY2tldEVudGl0eURldGFpbHNcblx0XHRcdFx0XHRcdHRpY2tldEVudGl0eT17IHRpY2tldEVudGl0eSB9XG5cdFx0XHRcdFx0XHRyZWZyZXNoZWQ9eyByZWZyZXNoZWQgfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0eyB0aGlzLmRpc3BsYXlUaWNrZXQoIHRpY2tldEVudGl0eSwgZGlzcGxheVRpY2tldERhdGUgKSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8RWRpdG9yVGlja2V0QWN0aW9uc01lbnVcblx0XHRcdFx0XHR0aWNrZXRFbnRpdHk9eyB0aWNrZXRFbnRpdHkgfVxuXHRcdFx0XHRcdGRvUmVmcmVzaD17IGRvUmVmcmVzaCB9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZSggW1xuXHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiAoIHByb3BzICkgPT4ge1xuXHRcdGNvbnN0IFsgcmVmcmVzaGVkLCBkb1JlZnJlc2ggXSA9IHVzZVJlZHVjZXIoICggcyApID0+IHMgKyAxLCAwICk7XG5cdFx0cmV0dXJuIDxXcmFwcGVkQ29tcG9uZW50XG5cdFx0XHR7IC4uLnByb3BzIH1cblx0XHRcdGRvUmVmcmVzaD17IGRvUmVmcmVzaCB9XG5cdFx0XHRyZWZyZXNoZWQ9eyByZWZyZXNoZWQgfVxuXHRcdC8+O1xuXHR9LFxuXHR3aXRoRW50aXR5UGFwZXJGcmFtZSxcbl0gKSggRWRpdG9yVGlja2V0RW50aXR5R3JpZEl0ZW0gKTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRWRpdG9yVGlja2V0RW50aXR5RGV0YWlscyB9IGZyb20gJy4vZWRpdG9yLXRpY2tldC1lbnRpdHktZGV0YWlscyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVkaXRvclRpY2tldEVudGl0eUdyaWRJdGVtIH0gZnJvbSAnLi9lZGl0b3ItdGlja2V0LWVudGl0eS1ncmlkLWl0ZW0nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFZGl0b3JUaWNrZXRFbnRpdGllc0dyaWRWaWV3IH0gZnJvbSAnLi9lZGl0b3ItdGlja2V0LWVudGl0aWVzLWdyaWQtdmlldyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL2FjdGlvbi1oYW5kbGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbnMtbWVudSc7XG5leHBvcnQgKiBmcm9tICcuL2VkaXQtZm9ybSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbHRlci1iYXInO1xuZXhwb3J0ICogZnJvbSAnLi9ncmlkLXZpZXcnO1xuZXhwb3J0ICogZnJvbSAnLi9saXN0LXZpZXcnO1xuZXhwb3J0IHtcblx0ZGVmYXVsdCBhcyBFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3QsXG5cdEVkaXRvclRpY2tldEVudGl0aWVzT25seUxpc3QsXG59IGZyb20gJy4vZWRpdG9yLXRpY2tldC1lbnRpdGllcy1saXN0JztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS10aWNrZXRzLWxpc3QtbGlzdC12aWV3XCI6XCJlZS10aWNrZXRzLWxpc3QtbGlzdC12aWV3XCIsXCJlZS1lZGl0b3ItdGlja2V0LWxpc3Qtdmlldy1kaXZcIjpcImVlLWVkaXRvci10aWNrZXQtbGlzdC12aWV3LWRpdlwiLFwiZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zXCI6XCJlZS1lZGl0b3ItdGlja2V0LWxpc3QtaXRlbXNcIixcImVlLXRpY2tldC1saXN0LWl0ZW1cIjpcImVlLXRpY2tldC1saXN0LWl0ZW1cIixcImVlLWluZmluaXR5LXNpZ25cIjpcImVlLWluZmluaXR5LXNpZ25cIixcImRhc2hpY29uc1wiOlwiZGFzaGljb25zXCIsXCJlZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVsXCI6XCJlZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVsXCIsXCJlZS10aWNrZXQtbGlzdC1pdGVtLXZhbHVlXCI6XCJlZS10aWNrZXQtbGlzdC1pdGVtLXZhbHVlXCIsXCJlZS1lZGl0b3ItdGlja2V0LWFjdGlvbnMtbWVudVwiOlwiZWUtZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnVcIixcImVlLWRyb3Bkb3duLW1lbnUtZGl2XCI6XCJlZS1kcm9wZG93bi1tZW51LWRpdlwifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IEVkaXRvclRpY2tldEVudGl0eUxpc3RJdGVtIGZyb20gJy4vZWRpdG9yLXRpY2tldC1lbnRpdHktbGlzdC1pdGVtJztcbmltcG9ydCAnLi9lZGl0b3ItdGlja2V0LWVudGl0aWVzLWxpc3Qtdmlldy5jc3MnO1xuXG4vKipcbiAqIEVkaXRvclRpY2tldHNMaXN0Vmlld1xuICogRGlzcGxheXMgdGlja2V0cyBpbiBhIHN0YW5kYXJkIGxpc3QgdGFibGUgbGlrZSB2aWV3XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fSBlbnRpdGllcyBcdGFycmF5IG9mIEpTT04gb2JqZWN0cyBkZWZpbmluZyB0aGUgRXZlbnQgRGF0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3NcbiAqIEBwYXJhbSB7bWl4ZWR9IG90aGVyUHJvcHNcbiAqIEByZXR1cm4ge0NvbXBvbmVudH0gXHRcdFx0bGlzdCBvZiByZW5kZXJlZCBFdmVudCBEYXRlc1xuICovXG5jb25zdCBFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3RWaWV3ID0gKCB7XG5cdGVudGl0aWVzLFxuXHRodG1sQ2xhc3MsXG5cdC4uLm90aGVyUHJvcHNcbn0gKSA9PiB7XG5cdGh0bWxDbGFzcyA9IGh0bWxDbGFzcyA/XG5cdFx0YCR7IGh0bWxDbGFzcyB9IGVlLXRpY2tldHMtbGlzdC1saXN0LXZpZXdgIDpcblx0XHQnZWUtdGlja2V0cy1saXN0LWxpc3Qtdmlldyc7XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17IGh0bWxDbGFzcyB9PlxuXHRcdFx0PGRpdiBrZXk9eyAwIH0gY2xhc3NOYW1lPVwiZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPjwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHR7IF9fKCAnSUQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ05hbWUnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ1ByaWNlJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdHsgX18oICdHb2VzIG9uIFNhbGUnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ1NvbGQnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ1Jlc2VydmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdHsgX18oICdDYXBhY2l0eScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHR7IF9fKCAnUmVnaXN0cmFudHMnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0eyBfXyggJ0FjdGlvbnMnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0e1xuXHRcdFx0XHRlbnRpdGllcy5tYXAoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oIHRpY2tldEVudGl0eSApIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxFZGl0b3JUaWNrZXRFbnRpdHlMaXN0SXRlbVxuXHRcdFx0XHRcdFx0XHRcdGtleT17IHRpY2tldEVudGl0eS5pZCB9XG5cdFx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5PXsgdGlja2V0RW50aXR5IH1cblx0XHRcdFx0XHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvclRpY2tldEVudGl0aWVzTGlzdFZpZXc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCB1c2VSZWR1Y2VyIH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyB0aWNrZXRNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBFZGl0b3JUaWNrZXRBY3Rpb25zTWVudSBmcm9tICcuLi9hY3Rpb25zLW1lbnUvZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnUnO1xuXG5jb25zdCB7IE1PREVMX05BTUU6IFRJQ0tFVCwgZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MgfSA9IHRpY2tldE1vZGVsO1xuXG4vKipcbiAqIEVkaXRvckRhdGVHcmlkQmxvY2tcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aWNrZXQgICAgSlNPTiBvYmplY3QgZGVmaW5pbmcgdGhlIFRpY2tldFxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgVGhlIHRpY2tldCByZW5kZXJlZCBhcyBhIGJsb2NrXG4gKi9cbmNsYXNzIEVkaXRvclRpY2tldEVudGl0eUxpc3RJdGVtIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gdGlja2V0RW50aXR5XG5cdCAqIEByZXR1cm4ge3N0cmluZ30gdGlja2V0IHN0YXR1c1xuXHQgKi9cblx0Z2V0VGlja2V0U3RhdHVzQ2xhc3MgPSAoIHRpY2tldEVudGl0eSApID0+IHtcblx0XHRzd2l0Y2ggKCB0aWNrZXRFbnRpdHkuc3RhdHVzICkge1xuXHRcdFx0Y2FzZSAnVEtTJyA6XG5cdFx0XHRcdHJldHVybiAnZWUtdGlja2V0LXN0YXR1cy1zb2xkLW91dCc7XG5cdFx0XHRjYXNlICdUS0UnIDpcblx0XHRcdFx0cmV0dXJuICdlZS10aWNrZXQtc3RhdHVzLWV4cGlyZWQnO1xuXHRcdFx0Y2FzZSAnVEtQJyA6XG5cdFx0XHRcdHJldHVybiAnZWUtdGlja2V0LXN0YXR1cy1wZW5kaW5nJztcblx0XHRcdGNhc2UgJ1RLTycgOlxuXHRcdFx0XHRyZXR1cm4gJ2VlLXRpY2tldC1zdGF0dXMtb24tc2FsZSc7XG5cdFx0XHRjYXNlICdUS0EnIDpcblx0XHRcdFx0cmV0dXJuICdlZS10aWNrZXQtc3RhdHVzLWFyY2hpdmVkJztcblx0XHR9XG5cdH07XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdHRpY2tldEVudGl0eSxcblx0XHRcdGRvUmVmcmVzaCxcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIHRpY2tldEVudGl0eSwgVElDS0VUICkgKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3Qgc3RhdHVzQ2xhc3MgPSB0aGlzLmdldFRpY2tldFN0YXR1c0NsYXNzKCB0aWNrZXRFbnRpdHkgKTtcblx0XHRjb25zdCBiZ0NsYXNzID0gZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MoIHRpY2tldEVudGl0eSApO1xuXHRcdGNvbnN0IHF0eSA9IHRpY2tldEVudGl0eS5xdHkgPT09ICdJTkYnIHx8IHRpY2tldEVudGl0eS5xdHkgPT09IEluZmluaXR5ID9cblx0XHRcdCggPHNwYW4gY2xhc3NOYW1lPXsgJ2VlLWluZmluaXR5LXNpZ24nIH0+JmluZmluOzwvc3Bhbj4gKSA6XG5cdFx0XHR0aWNrZXRFbnRpdHkucXR5O1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgaWQ9eyBgZWUtZWRpdG9yLXRpY2tldC1saXN0LXZpZXctZGl2LSR7IHRpY2tldEVudGl0eS5pZCB9YCB9XG5cdFx0XHRcdGNsYXNzTmFtZT17IGBlZS1lZGl0b3ItdGlja2V0LWxpc3Qtdmlldy1kaXYgJHsgc3RhdHVzQ2xhc3MgfWAgfVxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtc1wiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgYCR7IGJnQ2xhc3MgfSBlZS10aWNrZXQtbGlzdC1pdGVtYCB9PlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnTmFtZTonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IHRpY2tldEVudGl0eS5uYW1lIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW0tbGFiZWxcIj5cblx0XHRcdFx0XHRcdFx0eyBfXyggJ0lEOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtLXZhbHVlXCI+XG5cdFx0XHRcdFx0XHRcdHsgdGlja2V0RW50aXR5LmlkIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW0tbGFiZWxcIj5cblx0XHRcdFx0XHRcdFx0eyBfXyggJ05hbWU6JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyB0aWNrZXRFbnRpdHkubmFtZSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdQcmljZTonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS12YWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHR7IHRpY2tldEVudGl0eS5wcmljZS5hbW91bnQudG9TdHJpbmcoKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdTdGFydCBEYXRlOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtLXZhbHVlXCI+XG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkuc3RhcnREYXRlXG5cdFx0XHRcdFx0XHRcdFx0XHQudG9Gb3JtYXQoICdkZGQgTU1NIFlZIGg6bW0gYScgKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdHsgX18oICdTb2xkOicsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJlZS10aWNrZXQtbGlzdC1pdGVtLXZhbHVlXCI+XG5cdFx0XHRcdFx0XHRcdHsgdGlja2V0RW50aXR5LnNvbGQgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnUmVzZXJ2ZWQ6JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyB0aWNrZXRFbnRpdHkucmVzZXJ2ZWQgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnUXVhbnRpdHk6JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyBxdHkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnUmVnaXN0cmFudHM6JywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImVlLXRpY2tldC1saXN0LWl0ZW0tdmFsdWVcIj5cblx0XHRcdFx0XHRcdFx0eyB0aWNrZXRFbnRpdHkucmVnQ291bnQgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbVwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZWUtdGlja2V0LWxpc3QtaXRlbS1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHR7IF9fKCAnQWN0aW9uczonLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PEVkaXRvclRpY2tldEFjdGlvbnNNZW51XG5cdFx0XHRcdFx0XHRcdHRpY2tldEVudGl0eT17IHRpY2tldEVudGl0eSB9XG5cdFx0XHRcdFx0XHRcdGRvUmVmcmVzaD17IGRvUmVmcmVzaCB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyAnY2xlYXItZmxvYXQnIH0+PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IChcblx0KCBXcmFwcGVkQ29tcG9uZW50ICkgPT4gKCBwcm9wcyApID0+IHtcblx0XHRjb25zdCBbICwgZG9SZWZyZXNoIF0gPSB1c2VSZWR1Y2VyKCAoIHMgKSA9PiBzICsgMSwgMCApO1xuXHRcdGNvbnN0IHJlZnJlc2hlciA9ICgpID0+IHtcblx0XHRcdGRvUmVmcmVzaCgge30gKTtcblx0XHR9O1xuXHRcdHJldHVybiA8V3JhcHBlZENvbXBvbmVudCB7IC4uLnByb3BzIH0gZG9SZWZyZXNoPXsgcmVmcmVzaGVyIH0gLz47XG5cdH1cbikoIEVkaXRvclRpY2tldEVudGl0eUxpc3RJdGVtICk7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEVkaXRvclRpY2tldEVudGl0eUxpc3RJdGVtIH0gZnJvbSAnLi9lZGl0b3ItdGlja2V0LWVudGl0eS1saXN0LWl0ZW0nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFZGl0b3JUaWNrZXRFbnRpdGllc0xpc3RWaWV3IH0gZnJvbSAnLi9lZGl0b3ItdGlja2V0LWVudGl0aWVzLWxpc3Qtdmlldyc7XG4iLCJleHBvcnQgY29uc3QgVElDS0VUX1BSSUNFX0NBTENVTEFUT1JfRk9STV9JTlBVVF9QUkVGSVggPSAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3InO1xuIiwiZXhwb3J0IHtcblx0VElDS0VUX1BSSUNFX0NBTENVTEFUT1JfRk9STV9JTlBVVF9QUkVGSVgsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCB7XG5cdGRlZmF1bHQgYXMgdXNlVGlja2V0UHJpY2VDYWxjdWxhdG9ycyxcbn0gZnJvbSAnLi91c2UtdGlja2V0LXByaWNlLWNhbGN1bGF0b3JzJztcbmV4cG9ydCB7XG5cdHBhcnNlTW9uZXlWYWx1ZSxcblx0ZGVmYXVsdCBhcyB1c2VUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtRGVjb3JhdG9yLFxufSBmcm9tICcuL3VzZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1mb3JtLWRlY29yYXRvcic7XG5leHBvcnQge1xuXHRkZWZhdWx0IGFzIFRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm0sXG59IGZyb20gJy4vdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItZm9ybSc7XG5leHBvcnQge1xuXHRzaG9ydGVuQ3VpZCxcblx0dGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybURhdGFNYXAsXG59IGZyb20gJy4vdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItZm9ybS1kYXRhLW1hcCc7XG5leHBvcnQge1xuXHRkZWZhdWx0IGFzIHdpdGhUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtTW9kYWwsXG59IGZyb20gJy4vd2l0aC10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1mb3JtLW1vZGFsJztcbmV4cG9ydCB7XG5cdGRlZmF1bHQgYXMgVGlja2V0UHJpY2VDYWxjdWxhdG9yTWVudUl0ZW1XaXRoTW9kYWwsXG5cdFRpY2tldFByaWNlQ2FsY3VsYXRvck1lbnVJdGVtLFxufSBmcm9tICcuL3RpY2tldC1wcmljZS1jYWxjdWxhdG9yLW1lbnUtaXRlbSc7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3JcIjpcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yXCIsXCJjb2wtMFwiOlwiY29sLTBcIixcImNvbC0xXCI6XCJjb2wtMVwiLFwiY29sLTJcIjpcImNvbC0yXCIsXCJjb2wtM1wiOlwiY29sLTNcIixcImNvbC00XCI6XCJjb2wtNFwiLFwiY29sLTVcIjpcImNvbC01XCIsXCJlZS1yVGFibGUtYm9keS10ZFwiOlwiZWUtclRhYmxlLWJvZHktdGRcIixcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXByaWNlLWFjdGlvbnNcIjpcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXByaWNlLWFjdGlvbnNcIixcImNvbXBvbmVudHMtaWNvbi1idXR0b25cIjpcImNvbXBvbmVudHMtaWNvbi1idXR0b25cIixcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFtb3VudFwiOlwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYW1vdW50XCIsXCJlZS1zaWduLWJlZm9yZVwiOlwiZWUtc2lnbi1iZWZvcmVcIixcImVlLXNpZ24tYWZ0ZXJcIjpcImVlLXNpZ24tYWZ0ZXJcIixcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsLWxhYmVsXCI6XCJlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1sYWJlbFwiLFwiY29sLWZvcm0tbGFiZWxcIjpcImNvbC1mb3JtLWxhYmVsXCIsXCJlZS1yVGFibGUtZm9vdGVyXCI6XCJlZS1yVGFibGUtZm9vdGVyXCIsXCJlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1yb3dcIjpcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsLXJvd1wiLFwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWxcIjpcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsXCIsXCJlZS1jdXJyZW5jeS1zaWduXCI6XCJlZS1jdXJyZW5jeS1zaWduXCIsXCJlZS1tb25leS1maWVsZFwiOlwiZWUtbW9uZXktZmllbGRcIixcImVlLXBlcmNlbnQtZmllbGRcIjpcImVlLXBlcmNlbnQtZmllbGRcIixcImVlLWN1clNpZ24tMlwiOlwiZWUtY3VyU2lnbi0yXCIsXCJlZS1jdXJTaWduLTNcIjpcImVlLWN1clNpZ24tM1wiLFwiZWUtY3VyU2lnbi00XCI6XCJlZS1jdXJTaWduLTRcIixcImVlLXBlcmNlbnQtc2lnblwiOlwiZWUtcGVyY2VudC1zaWduXCIsXCJlZS1hZGQtcHJpY2UtbW9kaWZpZXItYnRuXCI6XCJlZS1hZGQtcHJpY2UtbW9kaWZpZXItYnRuXCIsXCJlZS10cGMtbmV3LW1vZGlmaWVyLXVwZGF0ZVwiOlwiZWUtdHBjLW5ldy1tb2RpZmllci11cGRhdGVcIixcInNoYWtlXCI6XCJzaGFrZVwiLFwiZWUtclRhYmxlXCI6XCJlZS1yVGFibGVcIixcImVlLXJUYWJsZS1ib2R5XCI6XCJlZS1yVGFibGUtYm9keVwiLFwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItcHJpY2Utcm93XCI6XCJlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1yb3dcIixcImVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVyXCI6XCJlZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlclwiLFwiZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZVwiOlwiZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZVwiLFwiZWUtbnVtYmVyLWNvbHVtblwiOlwiZWUtbnVtYmVyLWNvbHVtblwiLFwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYWRkLXByaWNlLWlkXCI6XCJlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hZGQtcHJpY2UtaWRcIixcImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFkZC1wcmljZS1hY3Rpb25zXCI6XCJlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hZGQtcHJpY2UtYWN0aW9uc1wiLFwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYWRkLXByaWNlLXJvd1wiOlwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYWRkLXByaWNlLXJvd1wiLFwiZWUtclRhYmxlLWJvZHktcm93XCI6XCJlZS1yVGFibGUtYm9keS1yb3dcIixcImVlLXJUYWJsZS1mb290ZXItcm93XCI6XCJlZS1yVGFibGUtZm9vdGVyLXJvd1wiLFwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtYWN0aW9uc1wiOlwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtYWN0aW9uc1wifTsiLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSwgaXNFbXB0eSwgdW5pcSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG5pbXBvcnQgeyBUSUNLRVRfUFJJQ0VfQ0FMQ1VMQVRPUl9GT1JNX0lOUFVUX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtRGF0YVxuICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuICogQHJldHVybiB7T2JqZWN0fSBmb3JtIGRhdGFcbiAqL1xuY29uc3QgYnVpbGRUaWNrZXREYXRhTWFwID0gKCBmb3JtRGF0YSwgdGlja2V0RW50aXR5ICkgPT4ge1xuXHRmb3JtRGF0YS50aWNrZXRJRCA9IHRpY2tldEVudGl0eS5pZDtcblx0Zm9ybURhdGEudGlja2V0SXNUYXhhYmxlID0gdGlja2V0RW50aXR5LnRheGFibGU7XG5cdGZvcm1EYXRhLnRpY2tldFRvdGFsID0gdGlja2V0RW50aXR5LnByaWNlICYmIHRpY2tldEVudGl0eS5wcmljZS5hbW91bnQgP1xuXHRcdHRpY2tldEVudGl0eS5wcmljZS5mb3JtYXR0ZXIuZm9ybWF0TnVtYmVyKCB0aWNrZXRFbnRpdHkucHJpY2UuYW1vdW50LnRvTnVtYmVyKCkgKSA6XG5cdFx0bnVsbDtcblx0cmV0dXJuIGZvcm1EYXRhO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtRGF0YVxuICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuICogQHBhcmFtIHtBcnJheX0gcHJpY2VFbnRpdGllc1xuICogQHJldHVybiB7T2JqZWN0fSBmb3JtIGRhdGFcbiAqL1xuY29uc3QgYnVpbGRQcmljZXNEYXRhTWFwID0gKCBmb3JtRGF0YSwgdGlja2V0RW50aXR5LCBwcmljZUVudGl0aWVzICkgPT4ge1xuXHRpZiAoICEgaXNBcnJheSggcHJpY2VFbnRpdGllcyApIHx8IHByaWNlRW50aXRpZXMubGVuZ3RoID09PSAwICkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRsZXQgcHJlZml4ID0gVElDS0VUX1BSSUNFX0NBTENVTEFUT1JfRk9STV9JTlBVVF9QUkVGSVg7XG5cdHByZWZpeCArPSAnLXRpY2tldC0nICsgdGlja2V0RW50aXR5LmlkICsgJy1wcmljZSc7XG5cdGNvbnN0IHByaWNlSURzID0gW107XG5cdGNvbnN0IHByaWNlVHlwZXMgPSBbXTtcblx0cHJpY2VFbnRpdGllcy5mb3JFYWNoKCAoIHByaWNlRW50aXR5ICkgPT4ge1xuXHRcdGlmICggaXNNb2RlbEVudGl0eU9mTW9kZWwoIHByaWNlRW50aXR5LCAncHJpY2UnICkgKSB7XG5cdFx0XHRjb25zdCBwcmljZUlkID0gc2hvcnRlbkN1aWQoIHByaWNlRW50aXR5LmlkICk7XG5cdFx0XHRwcmljZUlEcy5wdXNoKCBwcmljZUlkICk7XG5cdFx0XHRwcmljZVR5cGVzLnB1c2goIHByaWNlRW50aXR5LnBydElkICk7XG5cdFx0XHRjb25zdCBwcmljZVByZWZpeCA9IGAkeyBwcmVmaXggfS0keyBwcmljZUlkIH1gO1xuXHRcdFx0Zm9ybURhdGFbIGAkeyBwcmljZVByZWZpeCB9LWlkYCBdID0gcHJpY2VJZDtcblx0XHRcdGZvcm1EYXRhWyBgJHsgcHJpY2VQcmVmaXggfS10eXBlYCBdID0gcGFyc2VJbnQoIHByaWNlRW50aXR5LnBydElkLCAxMCApO1xuXHRcdFx0Zm9ybURhdGFbIGAkeyBwcmljZVByZWZpeCB9LW5hbWVgIF0gPSBwcmljZUVudGl0eS5uYW1lIHx8ICcnO1xuXHRcdFx0Zm9ybURhdGFbIGAkeyBwcmljZVByZWZpeCB9LWRlc2NgIF0gPSBwcmljZUVudGl0eS5kZXNjIHx8ICcnO1xuXHRcdFx0Zm9ybURhdGFbIGAkeyBwcmljZVByZWZpeCB9LWFtb3VudGAgXSA9IHByaWNlRW50aXR5LmFtb3VudCAmJlxuXHRcdFx0cHJpY2VFbnRpdHkuYW1vdW50LmFtb3VudCA/XG5cdFx0XHRcdHByaWNlRW50aXR5LmFtb3VudC5mb3JtYXR0ZXIuZm9ybWF0TnVtYmVyKFxuXHRcdFx0XHRcdHByaWNlRW50aXR5LmFtb3VudC5hbW91bnQudG9OdW1iZXIoKVxuXHRcdFx0XHQpIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cdH0gKTtcblx0Zm9ybURhdGEucHJpY2VJRHMgPSBpc0FycmF5KCBwcmljZUlEcyApICYmICEgaXNFbXB0eSggcHJpY2VJRHMgKSA/XG5cdFx0dW5pcSggcHJpY2VJRHMgKS5qb2luKCkgOlxuXHRcdCcnO1xuXHRmb3JtRGF0YS5wcmljZVR5cGVzID0gaXNBcnJheSggcHJpY2VUeXBlcyApICYmICEgaXNFbXB0eSggcHJpY2VUeXBlcyApID9cblx0XHR1bmlxKCBwcmljZVR5cGVzICkuam9pbigpIDpcblx0XHQnJztcblx0cmV0dXJuIGZvcm1EYXRhO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBjdWlkXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGN1aWQgc25pcHBldFxuICovXG5leHBvcnQgY29uc3Qgc2hvcnRlbkN1aWQgPSAoIGN1aWQgKSA9PiB7XG5cdGlmICggY3VpZC5oYXNPd25Qcm9wZXJ0eSggJ2xlbmd0aCcgKSAmJiBjdWlkLmxlbmd0aCA+IDE4ICkge1xuXHRcdC8vIHVzZSBhIHNtYWxsZXIgbW9yZSB1bmlxdWUgcG9ydGlvbiBvZiB0aGUgQ1VJRFxuXHRcdHJldHVybiBjdWlkLnN1YnN0cmluZyggMTIsIDE4ICk7XG5cdH1cblx0cmV0dXJuIGN1aWQ7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuICogQHBhcmFtIHtBcnJheX0gcHJpY2VFbnRpdGllc1xuICogQHBhcmFtIHtib29sZWFufSByZXZlcnNlQ2FsY3VsYXRlXG4gKiBAcmV0dXJuIHtPYmplY3R9IGZvcm0gZGF0YVxuICovXG5leHBvcnQgY29uc3QgdGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybURhdGFNYXAgPSAoXG5cdHRpY2tldEVudGl0eSxcblx0cHJpY2VFbnRpdGllcyxcblx0cmV2ZXJzZUNhbGN1bGF0ZVxuKSA9PiB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApICkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRsZXQgZm9ybURhdGEgPSB7fTtcblx0Zm9ybURhdGEgPSBidWlsZFRpY2tldERhdGFNYXAoIGZvcm1EYXRhLCB0aWNrZXRFbnRpdHkgKTtcblx0Zm9ybURhdGEgPSBidWlsZFByaWNlc0RhdGFNYXAoIGZvcm1EYXRhLCB0aWNrZXRFbnRpdHksIHByaWNlRW50aXRpZXMgKTtcblx0Zm9ybURhdGEucmV2ZXJzZUNhbGN1bGF0ZSA9ICEhIHJldmVyc2VDYWxjdWxhdGU7XG5cdHJldHVybiBmb3JtRGF0YTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNFbXB0eSwgZmlsdGVyLCBmaW5kLCBsYXN0LCBzb3J0QnksIGZpcnN0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgRGFzaGljb24sIEljb25CdXR0b24sIFRvb2x0aXAgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgc3ByaW50ZiwgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7XG5cdFJlc3BvbnNpdmVUYWJsZSxcblx0dHdvQ29sdW1uQWRtaW5Gb3JtTGF5b3V0LFxuXHR3aXRoRm9ybUhhbmRsZXIsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgcHJpY2VUeXBlTW9kZWwsIHRpY2tldE1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7IE1vbmV5LCBTaXRlQ3VycmVuY3kgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVudGl0eUlkIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IFRJQ0tFVF9QUklDRV9DQUxDVUxBVE9SX0ZPUk1fSU5QVVRfUFJFRklYIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgcGFyc2VNb25leVZhbHVlIH0gZnJvbSAnLi91c2UtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItZm9ybS1kZWNvcmF0b3InO1xuaW1wb3J0IHsgc2hvcnRlbkN1aWQgfSBmcm9tICcuL3RpY2tldC1wcmljZS1jYWxjdWxhdG9yLWZvcm0tZGF0YS1tYXAnO1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5cbmNvbnN0IHsgTU9ERUxfTkFNRTogVElDS0VUIH0gPSB0aWNrZXRNb2RlbDtcbmNvbnN0IHsgQkFTRV9QUklDRV9UWVBFUyB9ID0gcHJpY2VUeXBlTW9kZWw7XG5cbmNvbnN0IHtcblx0Rm9ybUluZm8sXG5cdEZvcm1JbnB1dCxcblx0SW5wdXRMYWJlbCxcblx0Rm9ybVNlY3Rpb24sXG5cdEZvcm1XcmFwcGVyLFxuXHRGb3JtU2F2ZUNhbmNlbEJ1dHRvbnMsXG59ID0gdHdvQ29sdW1uQWRtaW5Gb3JtTGF5b3V0O1xuXG4vKipcbiAqIFRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuY2xhc3MgVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybSBleHRlbmRzIENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtBcnJheX0gcHJpY2VUeXBlRW50aXRpZXNcblx0ICogQHJldHVybiB7QXJyYXl9IHByaWNlIHR5cGUgb3B0aW9ucyBmb3IgdXNlIGluIHNlbGVjdCBpbnB1dFxuXHQgKi9cblx0YnVpbGRQcmljZVR5cGVPcHRpb25zID0gKCBwcmljZVR5cGVFbnRpdGllcyApID0+IHtcblx0XHRjb25zdCBwcmljZVR5cGVPcHRpb25zID0gW107XG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcHJpY2VUeXBlRW50aXRpZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjb25zdCBwcmljZVR5cGVFbnRpdHkgPSBwcmljZVR5cGVFbnRpdGllc1sgaSBdO1xuXHRcdFx0aWYgKCBpc01vZGVsRW50aXR5T2ZNb2RlbCggcHJpY2VUeXBlRW50aXR5LCAncHJpY2VfdHlwZScgKSApIHtcblx0XHRcdFx0cHJpY2VUeXBlT3B0aW9ucy5wdXNoKCB7XG5cdFx0XHRcdFx0dmFsdWU6IHByaWNlVHlwZUVudGl0eS5pZCxcblx0XHRcdFx0XHRsYWJlbDogcHJpY2VUeXBlRW50aXR5Lm5hbWUsXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHByaWNlVHlwZU9wdGlvbnM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHByaWNlVHlwZUlkXG5cdCAqIEByZXR1cm4ge09iamVjdH0gcHJpY2VUeXBlXG5cdCAqL1xuXHRnZXRQcmljZVR5cGUgPSAoIHByaWNlVHlwZUlkICkgPT4ge1xuXHRcdHByaWNlVHlwZUlkID0gbm9ybWFsaXplRW50aXR5SWQoIHByaWNlVHlwZUlkICk7XG5cdFx0Y29uc3QgcHJpY2VUeXBlRW50aXR5ID0gZmluZCggdGhpcy5wcmljZVR5cGVFbnRpdGllcywgWyAnaWQnLCBwcmljZVR5cGVJZCBdICk7XG5cdFx0aWYgKCBpc01vZGVsRW50aXR5T2ZNb2RlbCggcHJpY2VUeXBlRW50aXR5LCAncHJpY2VfdHlwZScgKSApIHtcblx0XHRcdHJldHVybiBwcmljZVR5cGVFbnRpdHk7XG5cdFx0fVxuXHRcdHJldHVybiBsYXN0KCB0aGlzLnByaWNlVHlwZUVudGl0aWVzICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IGN1cnJlbmN5IHNpZ24gcG9zaXRpb24gY3NzIGNsYXNzXG5cdCAqL1xuXHRzaWduQjQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIFNpdGVDdXJyZW5jeS5zaWduQjQgPyAnIGVlLXNpZ24tYmVmb3JlJyA6ICcgZWUtc2lnbi1hZnRlcic7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IGN1cnJlbmN5IHNpZ24gY2hhciBsZW5ndGggY3NzIGNsYXNzXG5cdCAqL1xuXHRzaWduQ2hhcnMgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIFNpdGVDdXJyZW5jeS5zaWduLmxlbmd0aCA+IDEgP1xuXHRcdFx0JyBlZS1jdXJTaWduLScgKyBTaXRlQ3VycmVuY3kuc2lnbi5sZW5ndGggOlxuXHRcdFx0Jyc7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcmV0dXJuIHtPYmplY3R9ICQgc2lnblxuXHQgKi9cblx0Y3VycmVuY3lTaWduID0gKCkgPT4ge1xuXHRcdGxldCBzaWduQ2xhc3MgPSAnZWUtY3VycmVuY3ktc2lnbic7XG5cdFx0c2lnbkNsYXNzICs9IHRoaXMuc2lnbkI0KCkgKyB0aGlzLnNpZ25DaGFycygpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IHNpZ25DbGFzcyB9PlxuXHRcdFx0XHR7IFNpdGVDdXJyZW5jeS5zaWduIH1cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcmV0dXJuIHtPYmplY3R9ICUgc2lnblxuXHQgKi9cblx0cGVyY2VudFNpZ24gPSAoKSA9PiB7XG5cdFx0bGV0IHNpZ25DbGFzcyA9ICdlZS1wZXJjZW50LXNpZ24nO1xuXHRcdHNpZ25DbGFzcyArPSB0aGlzLnNpZ25CNCgpICsgdGhpcy5zaWduQ2hhcnMoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eyBzaWduQ2xhc3MgfT5cblx0XHRcdFx0eyBfXyggJyUnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwcmljZVR5cGVFbnRpdHlcblx0ICogQHJldHVybiB7T2JqZWN0fSAlIG9yICQgc2lnblxuXHQgKi9cblx0bW9kaWZpZXJTaWduID0gKCBwcmljZVR5cGVFbnRpdHkgKSA9PiB7XG5cdFx0cmV0dXJuIHByaWNlVHlwZUVudGl0eSAmJiBwcmljZVR5cGVFbnRpdHkuaXNQZXJjZW50ID9cblx0XHRcdHRoaXMucGVyY2VudFNpZ24oKSA6XG5cdFx0XHR0aGlzLmN1cnJlbmN5U2lnbigpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IHByaWNlVHlwZUVudGl0eVxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IGlucHV0IGZpZWxkIGNzcyBjbGFzc1xuXHQgKi9cblx0YW1vdW50Q2xhc3MgPSAoIHByaWNlVHlwZUVudGl0eSA9IG51bGwgKSA9PiB7XG5cdFx0cmV0dXJuIHByaWNlVHlwZUVudGl0eSAmJiBwcmljZVR5cGVFbnRpdHkuaXNQZXJjZW50ID9cblx0XHRcdGBlZS1wZXJjZW50LWZpZWxkJHsgdGhpcy5zaWduQjQoKSB9JHsgdGhpcy5zaWduQ2hhcnMoKSB9YCA6XG5cdFx0XHRgZWUtbW9uZXktZmllbGQkeyB0aGlzLnNpZ25CNCgpIH0keyB0aGlzLnNpZ25DaGFycygpIH1gO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHJldHVybiB7QXJyYXl9IGZvcm0gaGVhZGVyIGRhdGFcblx0ICovXG5cdGZvcm1IZWFkZXIgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ3JvdycsXG5cdFx0XHRcdGNsYXNzOiAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItaGVhZGVyLXJvdycsXG5cdFx0XHRcdHZhbHVlOiAnJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1pZCBlZS1udW1iZXItY29sdW1uJyxcblx0XHRcdFx0dmFsdWU6IF9fKCAnSUQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnY2VsbCcsXG5cdFx0XHRcdGNsYXNzOiAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdHlwZScsXG5cdFx0XHRcdHZhbHVlOiBfXyggJ1ByaWNlIFR5cGUnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnY2VsbCcsXG5cdFx0XHRcdGNsYXNzOiAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItbmFtZScsXG5cdFx0XHRcdHZhbHVlOiBfXyggJ0xhYmVsJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2NlbGwnLFxuXHRcdFx0XHRjbGFzczogJ2VlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWRlc2MnLFxuXHRcdFx0XHR2YWx1ZTogX18oICdEZXNjcmlwdGlvbicsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hbW91bnQgJyArXG5cdFx0XHRcdFx0J2VlLW51bWJlci1jb2x1bW4gJyArIHRoaXMuc2lnbkI0KCksXG5cdFx0XHRcdHZhbHVlOiBfXyggJ0Ftb3VudCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hY3Rpb25zJyxcblx0XHRcdFx0dmFsdWU6IF9fKCAnQWN0aW9ucycsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEByZXR1cm4ge251bWJlcnxzdHJpbmd9IHByaWNlVHlwZSBJRFxuXHQgKi9cblx0Z2V0RGVmYXVsdFByaWNlVHlwZUlkID0gKCkgPT4ge1xuXHRcdHJldHVybiBmaXJzdChcblx0XHRcdGZpbHRlcihcblx0XHRcdFx0dGhpcy5wcmljZVR5cGVFbnRpdGllcyxcblx0XHRcdFx0KCBwcmljZVR5cGVFbnRpdHkgKSA9PiBwcmljZVR5cGVFbnRpdHkuaWQgIT09IDFcblx0XHRcdClcblx0XHQpLmlkO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3R9IHRpY2tldEVudGl0eVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGlja2V0UHJlZml4XG5cdCAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlc1xuXHQgKiBAcGFyYW0ge09iamVjdH0gcHJpY2VFbnRpdHlcblx0ICogQHBhcmFtIHtBcnJheX0gcHJpY2VUeXBlT3B0aW9uc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGxhc3RSb3dcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBwcmljZSBtb2RpZmllciBmb3JtIHJvd1xuXHQgKi9cblx0cHJpY2VNb2RpZmllclJvdyA9IChcblx0XHR0aWNrZXRFbnRpdHksXG5cdFx0dGlja2V0UHJlZml4LFxuXHRcdHZhbHVlcyxcblx0XHRwcmljZUVudGl0eSxcblx0XHRwcmljZVR5cGVPcHRpb25zLFxuXHRcdGxhc3RSb3csXG5cdCkgPT4ge1xuXHRcdGNvbnN0IHByaWNlSWQgPSBzaG9ydGVuQ3VpZCggcHJpY2VFbnRpdHkuaWQgKTtcblx0XHRjb25zdCBwcmVmaXggPSBgJHsgdGlja2V0UHJlZml4IH0tcHJpY2UtJHsgcHJpY2VJZCB9YDtcblx0XHRjb25zdCBwcmljZVR5cGVJZCA9IG5vcm1hbGl6ZUVudGl0eUlkKCB2YWx1ZXNbIGAkeyBwcmVmaXggfS10eXBlYCBdICkgfHwgMDtcblx0XHRjb25zdCBwcmljZVR5cGVFbnRpdHkgPSB0aGlzLmdldFByaWNlVHlwZSggcHJpY2VUeXBlSWQgKTtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAncm93Jyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1yb3cnLFxuXHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnY2VsbCcsXG5cdFx0XHRcdGNsYXNzOiAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItcHJpY2UtaWQgZWUtbnVtYmVyLWNvbHVtbicsXG5cdFx0XHRcdHZhbHVlOiAoXG5cdFx0XHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRcdFx0a2V5PVwiaWRcIlxuXHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1pZGAgfVxuXHRcdFx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LWlkYCB9XG5cdFx0XHRcdFx0XHR2YWx1ZT17IHZhbHVlc1sgYCR7IHByZWZpeCB9LWlkYCBdIH1cblx0XHRcdFx0XHRcdGRpc2FibGVkXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS10eXBlJyxcblx0XHRcdFx0dmFsdWU6IChcblx0XHRcdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdFx0XHQ8SW5wdXRMYWJlbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnUHJpY2UgVHlwZScsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHRcdGh0bWxGb3I9eyBgJHsgcHJlZml4IH0tdHlwZWAgfVxuXHRcdFx0XHRcdFx0XHRodG1sQ2xhc3M9XCJlZS1oaWRkZW4tbGFiZWxcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0XHRcdFx0a2V5PVwidHlwZVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJzZWxlY3RcIlxuXHRcdFx0XHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LXR5cGVgIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyBwcmljZVR5cGVJZCB9XG5cdFx0XHRcdFx0XHRcdG9wdGlvbnM9eyBwcmljZVR5cGVPcHRpb25zIH1cblx0XHRcdFx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LXR5cGVgIH1cblx0XHRcdFx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdFx0XHRcdCggdmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcmljZUVudGl0eS5wcnRJZCA9IHZhbHVlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9ybWFsaXplRW50aXR5SWQoIHZhbHVlICkgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdldERlZmF1bHRQcmljZVR5cGVJZCgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17XG5cdFx0XHRcdFx0XHRcdFx0cHJpY2VFbnRpdHkucHJ0SWQgPT09IEJBU0VfUFJJQ0VfVFlQRVMuQkFTRV9QUklDRVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnY2VsbCcsXG5cdFx0XHRcdGNsYXNzOiAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItcHJpY2UtbmFtZScsXG5cdFx0XHRcdHZhbHVlOiAoXG5cdFx0XHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHRcdFx0PElucHV0TGFiZWxcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ0xhYmVsJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdFx0aHRtbEZvcj17IGAkeyBwcmVmaXggfS1uYW1lYCB9XG5cdFx0XHRcdFx0XHRcdGh0bWxDbGFzcz1cImVlLWhpZGRlbi1sYWJlbFwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRcdFx0XHRrZXk9XCJuYW1lXCJcblx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LW5hbWVgIH1cblx0XHRcdFx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LW5hbWVgIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1uYW1lYCBdIHx8ICcnIH1cblx0XHRcdFx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9eyAoIHZhbHVlICkgPT4gcHJpY2VFbnRpdHkubmFtZSA9IHZhbHVlIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1kZXNjJyxcblx0XHRcdFx0dmFsdWU6IChcblx0XHRcdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdFx0XHQ8SW5wdXRMYWJlbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnRGVzY3JpcHRpb24nLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0XHRcdFx0XHRodG1sRm9yPXsgYCR7IHByZWZpeCB9LWRlc2NgIH1cblx0XHRcdFx0XHRcdFx0aHRtbENsYXNzPVwiZWUtaGlkZGVuLWxhYmVsXCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdFx0XHRcdGtleT1cImRlc2NcIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwidGV4dGFyZWFcIlxuXHRcdFx0XHRcdFx0XHRuYW1lPXsgYCR7IHByZWZpeCB9LWRlc2NgIH1cblx0XHRcdFx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LWRlc2NgIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyB2YWx1ZXNbIGAkeyBwcmVmaXggfS1kZXNjYCBdIHx8ICcnIH1cblx0XHRcdFx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9eyAoIHZhbHVlICkgPT4gcHJpY2VFbnRpdHkuZGVzYyA9IHZhbHVlIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1hbW91bnQgZWUtbnVtYmVyLWNvbHVtbicsXG5cdFx0XHRcdHZhbHVlOiAoXG5cdFx0XHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHRcdFx0PElucHV0TGFiZWxcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ0Ftb3VudCcsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRcdFx0XHRcdGh0bWxGb3I9eyBgJHsgcHJlZml4IH0tYW1vdW50YCB9XG5cdFx0XHRcdFx0XHRcdGh0bWxDbGFzcz1cImVlLWhpZGRlbi1sYWJlbFwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0eyB0aGlzLm1vZGlmaWVyU2lnbiggcHJpY2VUeXBlRW50aXR5ICkgfVxuXHRcdFx0XHRcdFx0PEZvcm1JbnB1dFxuXHRcdFx0XHRcdFx0XHRrZXk9XCJwcmljZVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcblx0XHRcdFx0XHRcdFx0bmFtZT17IGAkeyBwcmVmaXggfS1hbW91bnRgIH1cblx0XHRcdFx0XHRcdFx0aHRtbElkPXsgYCR7IHByZWZpeCB9LWFtb3VudGAgfVxuXHRcdFx0XHRcdFx0XHRodG1sQ2xhc3M9eyB0aGlzLmFtb3VudENsYXNzKCBwcmljZVR5cGVFbnRpdHkgKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXtcblx0XHRcdFx0XHRcdFx0XHRwcmljZUVudGl0eS5hbW91bnQuZm9ybWF0dGVyLmZvcm1hdE51bWJlcihcblx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlTW9uZXlWYWx1ZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWVzWyBgJHsgcHJlZml4IH0tYW1vdW50YCBdIHx8IDBcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdFx0XHRcdCggdmFsdWUsIHByZXZpb3VzICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZUZsb2F0KCB2YWx1ZSApICE9PSBwYXJzZUZsb2F0KCBwcmV2aW91cyApXG5cdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpY2VFbnRpdHkuYW1vdW50ID0gbmV3IE1vbmV5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlTW9uZXlWYWx1ZSggdmFsdWUgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRTaXRlQ3VycmVuY3lcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e1xuXHRcdFx0XHRcdFx0XHRcdHByaWNlRW50aXR5LnBydElkID09PSBCQVNFX1BSSUNFX1RZUEVTLkJBU0VfUFJJQ0UgJiZcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZXMucmV2ZXJzZUNhbGN1bGF0ZSA9PT0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGZvcm1hdD17ICggdmFsdWUgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByaWNlRW50aXR5LmFtb3VudC5mb3JtYXR0ZXIuZm9ybWF0TnVtYmVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0cGFyc2VNb25leVZhbHVlKCB2YWx1ZSApXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdGZvcm1hdE9uQmx1clxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdFx0XHQpLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2NlbGwnLFxuXHRcdFx0XHRjbGFzczogJ2VlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXByaWNlLWFjdGlvbnMnLFxuXHRcdFx0XHR2YWx1ZTogdGhpcy5nZXRNb2RpZmllckFjdGlvbkJ1dHRvbnMoXG5cdFx0XHRcdFx0cHJpY2VUeXBlRW50aXR5LFxuXHRcdFx0XHRcdHByaWNlRW50aXR5LFxuXHRcdFx0XHRcdHRpY2tldEVudGl0eSxcblx0XHRcdFx0XHRwcmVmaXgsXG5cdFx0XHRcdFx0dmFsdWVzLFxuXHRcdFx0XHRcdGxhc3RSb3dcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwcmljZVR5cGVFbnRpdHlcblx0ICogQHBhcmFtIHtPYmplY3R9IHByaWNlRW50aXR5XG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB0aWNrZXRFbnRpdHlcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuXHQgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXNcblx0ICogQHBhcmFtIHtib29sZWFufSBsYXN0Um93XG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgcHJpY2UgbW9kaWZpZXIgZm9ybSByb3dcblx0ICovXG5cdGdldE1vZGlmaWVyQWN0aW9uQnV0dG9ucyA9IChcblx0XHRwcmljZVR5cGVFbnRpdHksXG5cdFx0cHJpY2VFbnRpdHksXG5cdFx0dGlja2V0RW50aXR5LFxuXHRcdHByZWZpeCxcblx0XHR2YWx1ZXMsXG5cdFx0bGFzdFJvd1xuXHQpID0+IHtcblx0XHRjb25zdCBhZGRNb2RpZmllciA9IGxhc3RSb3cgP1xuXHRcdFx0PFRvb2x0aXBcblx0XHRcdFx0cG9zaXRpb249eyAndG9wIGxlZnQnIH1cblx0XHRcdFx0dGV4dD17IF9fKFxuXHRcdFx0XHRcdCdjbGljayB0byBhZGQgcHJpY2UgbW9kaWZpZXInLFxuXHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0KSB9XG5cdFx0XHQ+XG5cdFx0XHRcdDxJY29uQnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1sYWJlbD17IF9fKFxuXHRcdFx0XHRcdFx0J2NsaWNrIHRvIGFkZCBwcmljZSBtb2RpZmllcicsXG5cdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0KSB9XG5cdFx0XHRcdFx0aWNvbj1cInBsdXMtYWx0XCJcblx0XHRcdFx0XHRvbkNsaWNrPXtcblx0XHRcdFx0XHRcdCgpID0+IHRoaXMuYWRkUHJpY2VNb2RpZmllcihcblx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogdmFsdWVzWyBgJHsgcHJlZml4IH0tdHlwZWAgXSxcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiB2YWx1ZXNbIGAkeyBwcmVmaXggfS1uYW1lYCBdLFxuXHRcdFx0XHRcdFx0XHRcdGRlc2M6IHZhbHVlc1sgYCR7IHByZWZpeCB9LWRlc2NgIF0sXG5cdFx0XHRcdFx0XHRcdFx0YW1vdW50OiB2YWx1ZXNbIGAkeyBwcmVmaXggfS1hbW91bnRgIF0sXG5cdFx0XHRcdFx0XHRcdFx0b3JkZXI6ICcnLFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNsYXNzTmFtZT17ICdlZS1hZGQtcHJpY2UtbW9kaWZpZXItYnRuJyB9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L1Rvb2x0aXA+IDpcblx0XHRcdCcnO1xuXHRcdGNvbnN0IGRlbGV0ZU1vZGlmaWVyID0gcHJpY2VUeXBlRW50aXR5LnBidElkICE9PSBCQVNFX1BSSUNFX1RZUEVTLkJBU0VfUFJJQ0UgP1xuXHRcdFx0PFRvb2x0aXBcblx0XHRcdFx0cG9zaXRpb249eyAndG9wIGxlZnQnIH1cblx0XHRcdFx0dGV4dD17IF9fKCAnY2xpY2sgdG8gZGVsZXRlIHByaWNlIG1vZGlmaWVyJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdD5cblx0XHRcdFx0PEljb25CdXR0b25cblx0XHRcdFx0XHRhcmlhLWxhYmVsPXsgX18oXG5cdFx0XHRcdFx0XHQnY2xpY2sgdG8gZGVsZXRlIHByaWNlIG1vZGlmaWVyJyxcblx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHQpIH1cblx0XHRcdFx0XHRpY29uPVwidHJhc2hcIlxuXHRcdFx0XHRcdG9uQ2xpY2s9e1xuXHRcdFx0XHRcdFx0KCkgPT4gdGhpcy50cmFzaFByaWNlTW9kaWZpZXIoIHByaWNlRW50aXR5LCB0aWNrZXRFbnRpdHkgKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvVG9vbHRpcD4gOlxuXHRcdFx0Jyc7XG5cdFx0cmV0dXJuIDxGcmFnbWVudD5cblx0XHRcdHsgZGVsZXRlTW9kaWZpZXIgfVxuXHRcdFx0eyBhZGRNb2RpZmllciB9XG5cdFx0PC9GcmFnbWVudD47XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gdGlja2V0RW50aXR5XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aWNrZXRQcmVmaXhcblx0ICogQHBhcmFtIHtBcnJheX0gdmFsdWVzXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldFJldmVyc2VDYWxjdWxhdGVcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBmb3JtIGZvb3RlclxuXHQgKi9cblx0dGlja2V0VG90YWxSb3cgPSAoIHRpY2tldEVudGl0eSwgdGlja2V0UHJlZml4LCB2YWx1ZXMsIHNldFJldmVyc2VDYWxjdWxhdGUgKSA9PiB7XG5cdFx0Y29uc3QgY2FsY0Rpckljb24gPSB2YWx1ZXMucmV2ZXJzZUNhbGN1bGF0ZSA/ICd1cCcgOiAnZG93bic7XG5cdFx0Y29uc3QgY2FsY0RpclRleHQgPSB2YWx1ZXMucmV2ZXJzZUNhbGN1bGF0ZSA/XG5cdFx0XHRfXyggJ3JldmVyc2UgY2FsY3VsYXRlIGJhc2UgcHJpY2UgZnJvbSB0b3RhbCcsICdldmVudF9lc3ByZXNzbycgKSA6XG5cdFx0XHRfXyggJ2NhbGN1bGF0ZSB0b3RhbCBmcm9tIGJhc2UgcHJpY2UnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ3JvdycsXG5cdFx0XHRcdGNsYXNzOiAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtcm93Jyxcblx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2NlbGwnLFxuXHRcdFx0XHRjbGFzczogJycsXG5cdFx0XHRcdHZhbHVlOiAnJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICcnLFxuXHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnY2VsbCcsXG5cdFx0XHRcdGNsYXNzOiAnJyxcblx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2NlbGwnLFxuXHRcdFx0XHRjbGFzczogJ2VlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsLWxhYmVsJyArXG5cdFx0XHRcdFx0JyBlZS1udW1iZXItY29sdW1uJyxcblx0XHRcdFx0dmFsdWU6IChcblx0XHRcdFx0XHQ8SW5wdXRMYWJlbFxuXHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ1RvdGFsJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRcdGh0bWxGb3I9eyBgJHsgdGlja2V0UHJlZml4IH0tdG90YWxgIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2NlbGwnLFxuXHRcdFx0XHRjbGFzczogJ2VlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsIGVlLW51bWJlci1jb2x1bW4nLFxuXHRcdFx0XHR2YWx1ZTogKFxuXHRcdFx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0XHRcdHsgdGhpcy5jdXJyZW5jeVNpZ24oKSB9XG5cdFx0XHRcdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdFx0XHRcdGtleT1cInRvdGFsXCJcblx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0XHRuYW1lPVwidGlja2V0VG90YWxcIlxuXHRcdFx0XHRcdFx0XHRodG1sSWQ9XCJ0aWNrZXRUb3RhbFwiXG5cdFx0XHRcdFx0XHRcdGh0bWxDbGFzcz17IHRoaXMuYW1vdW50Q2xhc3MoKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXtcblx0XHRcdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHkucHJpY2UuZm9ybWF0dGVyLmZvcm1hdE51bWJlcihcblx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlTW9uZXlWYWx1ZSggdmFsdWVzLnRpY2tldFRvdGFsIClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y2hhbmdlTGlzdGVuZXI9e1xuXHRcdFx0XHRcdFx0XHRcdCggdmFsdWUsIHByZXZpb3VzICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZUZsb2F0KCB2YWx1ZSApICE9PSBwYXJzZUZsb2F0KCBwcmV2aW91cyApXG5cdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LnByaWNlID0gbmV3IE1vbmV5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlTW9uZXlWYWx1ZSggdmFsdWUgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRTaXRlQ3VycmVuY3lcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9eyB2YWx1ZXMucmV2ZXJzZUNhbGN1bGF0ZSA9PT0gZmFsc2UgfVxuXHRcdFx0XHRcdFx0XHRmb3JtYXQ9eyAoIHZhbHVlICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0aWNrZXRFbnRpdHkucHJpY2UuZm9ybWF0dGVyLmZvcm1hdE51bWJlcihcblx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlTW9uZXlWYWx1ZSggdmFsdWUgKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRmb3JtYXRPbkJsdXJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdjZWxsJyxcblx0XHRcdFx0Y2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1hY3Rpb25zJyxcblx0XHRcdFx0dmFsdWU6IChcblx0XHRcdFx0XHQ8VG9vbHRpcCB0ZXh0PXsgY2FsY0RpclRleHQgfSBwb3NpdGlvbj17ICd0b3AgbGVmdCcgfSA+XG5cdFx0XHRcdFx0XHQ8SWNvbkJ1dHRvblxuXHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPXsgY2FsY0RpclRleHQgfVxuXHRcdFx0XHRcdFx0XHRpY29uPXsgYGFycm93LSR7IGNhbGNEaXJJY29uIH0tYWx0MmAgfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldFJldmVyc2VDYWxjdWxhdGUoICEgdmFsdWVzLnJldmVyc2VDYWxjdWxhdGUgKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvVG9vbHRpcD5cblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IGZvcm1hdHRlZCBtb25leSB2YWx1ZVxuXHQgKi9cblx0Zm9ybWF0TW9uZXkgPSAoIHZhbHVlICkgPT4gc3ByaW50ZiggJyQgJTEkZCcsIHZhbHVlICk7XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdHRpY2tldEVudGl0eSxcblx0XHRcdHByaWNlRW50aXRpZXMsXG5cdFx0XHRwcmljZVR5cGVFbnRpdGllcyxcblx0XHRcdGFkZFByaWNlTW9kaWZpZXIsXG5cdFx0XHR0cmFzaFByaWNlTW9kaWZpZXIsXG5cdFx0XHRzZXRSZXZlcnNlQ2FsY3VsYXRlLFxuXHRcdFx0c3VibWl0QnV0dG9uLFxuXHRcdFx0Y2FuY2VsQnV0dG9uLFxuXHRcdFx0aW5pdGlhbFZhbHVlcyA9IHt9LFxuXHRcdFx0Y3VycmVudFZhbHVlcyA9IHt9LFxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdHRoaXMuc2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG5cdFx0dGhpcy5jbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG5cdFx0dGhpcy5hZGRQcmljZU1vZGlmaWVyID0gYWRkUHJpY2VNb2RpZmllcjtcblx0XHR0aGlzLnRyYXNoUHJpY2VNb2RpZmllciA9IHRyYXNoUHJpY2VNb2RpZmllcjtcblx0XHRpZiAoXG5cdFx0XHQhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksIFRJQ0tFVCApIHx8XG5cdFx0XHRpc0VtcHR5KCBwcmljZVR5cGVFbnRpdGllcyApXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dGhpcy5wcmljZVR5cGVFbnRpdGllcyA9IHByaWNlVHlwZUVudGl0aWVzO1xuXHRcdGNvbnN0IHZhbHVlcyA9IGlzRW1wdHkoIGN1cnJlbnRWYWx1ZXMgKSA/XG5cdFx0XHRpbml0aWFsVmFsdWVzIDpcblx0XHRcdGN1cnJlbnRWYWx1ZXM7XG5cdFx0Y29uc3QgYWxsUHJpY2VUeXBlT3B0aW9ucyA9IHRoaXMuYnVpbGRQcmljZVR5cGVPcHRpb25zKFxuXHRcdFx0dGhpcy5wcmljZVR5cGVFbnRpdGllc1xuXHRcdCk7XG5cdFx0bGV0IHRpY2tldFByZWZpeCA9IFRJQ0tFVF9QUklDRV9DQUxDVUxBVE9SX0ZPUk1fSU5QVVRfUFJFRklYO1xuXHRcdHRpY2tldFByZWZpeCArPSAnLXRpY2tldC0nICsgdGlja2V0RW50aXR5LmlkO1xuXG5cdFx0bGV0IHdhcm5pbmdzID0gbnVsbDtcblx0XHRjb25zdCBmb3JtUm93cyA9IFtdO1xuXHRcdGNvbnN0IHByaWNlQ291bnQgPSBwcmljZUVudGl0aWVzLmxlbmd0aDtcblx0XHRpZiAoIHByaWNlQ291bnQgPiAwICkge1xuXHRcdFx0Y29uc3QgcHJpY2VUeXBlT3B0aW9ucyA9IGZpbHRlcihcblx0XHRcdFx0YWxsUHJpY2VUeXBlT3B0aW9ucyxcblx0XHRcdFx0KCBwcmljZVR5cGVFbnRpdHkgKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHByaWNlVHlwZUVudGl0eS52YWx1ZSAhPT0gQkFTRV9QUklDRV9UWVBFUy5CQVNFX1BSSUNFO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgc29ydGVkUHJpY2VzID0gc29ydEJ5KCBwcmljZUVudGl0aWVzLCBbICdvcmRlcicsICduYW1lJyBdICk7XG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBwcmljZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdGNvbnN0IHByaWNlRW50aXR5ID0gc29ydGVkUHJpY2VzWyBpIF07XG5cdFx0XHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggcHJpY2VFbnRpdHksICdwcmljZScgKSApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gd2UgZG9uJ3Qgd2FudCBcIkJhc2UgUHJpY2VcIiB0byBiZSBhbiBvcHRpb24gZm9yXG5cdFx0XHRcdC8vIHByaWNlIG1vZGlmaWVycyBiZWNhdXNlIFRIRVJFIENBTiBPTkxZIEJFIE9ORSEhIVxuXHRcdFx0XHRjb25zdCBvcHRpb25zID0gcHJpY2VFbnRpdHkucHJ0SWQgPT09IEJBU0VfUFJJQ0VfVFlQRVMuQkFTRV9QUklDRSA/XG5cdFx0XHRcdFx0YWxsUHJpY2VUeXBlT3B0aW9ucyA6XG5cdFx0XHRcdFx0cHJpY2VUeXBlT3B0aW9ucztcblx0XHRcdFx0Zm9ybVJvd3MucHVzaChcblx0XHRcdFx0XHR0aGlzLnByaWNlTW9kaWZpZXJSb3coXG5cdFx0XHRcdFx0XHR0aWNrZXRFbnRpdHksXG5cdFx0XHRcdFx0XHR0aWNrZXRQcmVmaXgsXG5cdFx0XHRcdFx0XHR2YWx1ZXMsXG5cdFx0XHRcdFx0XHRwcmljZUVudGl0eSxcblx0XHRcdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdFx0XHQoIGkgKyAxICkgPT09IHByaWNlQ291bnRcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdhcm5pbmdzID0gKFxuXHRcdFx0XHQ8Rm9ybUluZm9cblx0XHRcdFx0XHRmb3JtSW5mbz17XG5cdFx0XHRcdFx0XHRfXyhcblx0XHRcdFx0XHRcdFx0J05vIHRpY2tldCBwcmljZXMgaGF2ZSBiZWVuIHNldCEgQSBiYXNlIHByaWNlJyArXG5cdFx0XHRcdFx0XHRcdCcgaXMgcmVxdWlyZWQgYXQgdGhlIHZlcnkgbWluaW11bS4gUGxlYXNlJyArXG5cdFx0XHRcdFx0XHRcdCcgcHJvdmlkZSBhIFwiTGFiZWxcIiBhbmQgXCJBbW91bnRcIiBhbmQgdGhlbicgK1xuXHRcdFx0XHRcdFx0XHQnIGNsaWNrIHRoZSAlJXZhciUlIGJ1dHRvbiBpbiB0aGUgXCJBY3Rpb25zXCInICtcblx0XHRcdFx0XHRcdFx0JyBjb2x1bW4gdG8gYWRkIHRoZSBiYXNlIHByaWNlLicsXG5cdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm9ybUluZm9WYXJzPXsgW1xuXHRcdFx0XHRcdFx0PERhc2hpY29uIGljb249XCJwbHVzLWFsdFwiIGtleT17IDAgfSAvPixcblx0XHRcdFx0XHRdIH1cblx0XHRcdFx0XHRkYXNoaWNvbj17ICd3YXJuaW5nJyB9XG5cdFx0XHRcdFx0ZGlzbWlzc2FibGU9eyBmYWxzZSB9XG5cdFx0XHRcdFx0Y29sU2l6ZT17IDExIH1cblx0XHRcdFx0XHRvZmZzZXQ9eyAxIH1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aWNrZXRFbnRpdHkgJiYgdGlja2V0RW50aXR5LmlkID8gKFxuXHRcdFx0PEZvcm1XcmFwcGVyPlxuXHRcdFx0XHQ8Rm9ybVNlY3Rpb25cblx0XHRcdFx0XHRodG1sSWQ9eyBgJHsgdGlja2V0UHJlZml4IH0tZm9ybS1zZWN0aW9uYCB9XG5cdFx0XHRcdFx0aHRtbENsYXNzPVwiZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItZm9ybS1zZWN0aW9uXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHsgd2FybmluZ3MgfVxuXHRcdFx0XHRcdDxSZXNwb25zaXZlVGFibGVcblx0XHRcdFx0XHRcdGNvbHVtbnM9eyB0aGlzLmZvcm1IZWFkZXIoKSB9XG5cdFx0XHRcdFx0XHRyb3dEYXRhPXsgZm9ybVJvd3MgfVxuXHRcdFx0XHRcdFx0Zm9vdGVyRGF0YT17XG5cdFx0XHRcdFx0XHRcdHRoaXMudGlja2V0VG90YWxSb3coXG5cdFx0XHRcdFx0XHRcdFx0dGlja2V0RW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdHRpY2tldFByZWZpeCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZXMsXG5cdFx0XHRcdFx0XHRcdFx0c2V0UmV2ZXJzZUNhbGN1bGF0ZVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtZXRhRGF0YT17IHtcblx0XHRcdFx0XHRcdFx0dGFibGVJZDogdGlja2V0UHJlZml4LFxuXHRcdFx0XHRcdFx0XHR0YWJsZUNhcHRpb246IF9fKFxuXHRcdFx0XHRcdFx0XHRcdCdUaWNrZXQgUHJpY2UgTW9kaWZpZXJzJyxcblx0XHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdGNsYXNzZXM9eyB7IHRhYmxlQ2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvcicgfSB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdFx0XHR0eXBlPVwiaGlkZGVuXCJcblx0XHRcdFx0XHRcdGtleT1cInRpY2tldElEXCJcblx0XHRcdFx0XHRcdG5hbWU9XCJ0aWNrZXRJRFwiXG5cdFx0XHRcdFx0XHRodG1sSWQ9XCJ0aWNrZXRJRFwiXG5cdFx0XHRcdFx0XHR2YWx1ZT17IHZhbHVlcy50aWNrZXRJRCB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdFx0XHR0eXBlPVwiaGlkZGVuXCJcblx0XHRcdFx0XHRcdGtleT1cInByaWNlSURzXCJcblx0XHRcdFx0XHRcdG5hbWU9XCJwcmljZUlEc1wiXG5cdFx0XHRcdFx0XHRodG1sSWQ9XCJwcmljZUlEc1wiXG5cdFx0XHRcdFx0XHR2YWx1ZT17IHZhbHVlcy5wcmljZUlEcyB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Rm9ybUlucHV0XG5cdFx0XHRcdFx0XHR0eXBlPVwiaGlkZGVuXCJcblx0XHRcdFx0XHRcdGtleT1cInByaWNlVHlwZXNcIlxuXHRcdFx0XHRcdFx0bmFtZT1cInByaWNlVHlwZXNcIlxuXHRcdFx0XHRcdFx0aHRtbElkPVwicHJpY2VUeXBlc1wiXG5cdFx0XHRcdFx0XHR2YWx1ZT17IHZhbHVlcy5wcmljZVR5cGVzIH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDxGb3JtSW5wdXRcblx0XHRcdFx0XHRcdHR5cGU9XCJoaWRkZW5cIlxuXHRcdFx0XHRcdFx0a2V5PVwicmV2ZXJzZUNhbGN1bGF0ZVwiXG5cdFx0XHRcdFx0XHRuYW1lPVwicmV2ZXJzZUNhbGN1bGF0ZVwiXG5cdFx0XHRcdFx0XHRodG1sSWQ9XCJyZXZlcnNlQ2FsY3VsYXRlXCJcblx0XHRcdFx0XHRcdHZhbHVlPXsgdmFsdWVzLnJldmVyc2VDYWxjdWxhdGUgfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvRm9ybVNlY3Rpb24+XG5cdFx0XHRcdDxGb3JtU2F2ZUNhbmNlbEJ1dHRvbnNcblx0XHRcdFx0XHRodG1sQ2xhc3M9eyAnZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYnV0dG9ucycgfVxuXHRcdFx0XHRcdHN1Ym1pdEJ1dHRvbj17IHN1Ym1pdEJ1dHRvbiB9XG5cdFx0XHRcdFx0Y2FuY2VsQnV0dG9uPXsgY2FuY2VsQnV0dG9uIH1cblx0XHRcdFx0Lz5cblx0XHRcdFx0PEZvcm1TZWN0aW9uIGh0bWxDbGFzcz1cImVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWZvcm0taW5mb1wiID5cblx0XHRcdFx0XHQ8Rm9ybUluZm9cblx0XHRcdFx0XHRcdGZvcm1JbmZvPXtcblx0XHRcdFx0XHRcdFx0dmFsdWVzLnJldmVyc2VDYWxjdWxhdGUgP1xuXHRcdFx0XHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3RpY2tldCBiYXNlIHByaWNlIGlzIGJlaW5nIGNhbGN1bGF0ZWQnICtcblx0XHRcdFx0XHRcdFx0XHRcdCcgYnkgcmV2ZXJzaW5nIHRoZSBwcmljZSBtb2RpZmllcnMnICtcblx0XHRcdFx0XHRcdFx0XHRcdCcgYXBwbGllZCB0byB0aGUgdGlja2V0IHRvdGFsIC0gY2hhbmdlJyArXG5cdFx0XHRcdFx0XHRcdFx0XHQnIHRoZSBjYWxjdWxhdGlvbiBkaXJlY3Rpb24gYnkgY2xpY2tpbmcnICtcblx0XHRcdFx0XHRcdFx0XHRcdCcgb24gdGhlIGFycm93IGJ1dHRvbiB0byB0aGUgcmlnaHQgb2YgdGhlJyArXG5cdFx0XHRcdFx0XHRcdFx0XHQnIHRpY2tldCB0b3RhbCBmaWVsZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHRcdFx0KSA6XG5cdFx0XHRcdFx0XHRcdFx0X18oXG5cdFx0XHRcdFx0XHRcdFx0XHQndGlja2V0IHRvdGFsIGlzIGJlaW5nIGNhbGN1bGF0ZWQgYnkgJyArXG5cdFx0XHRcdFx0XHRcdFx0XHQnIGFwcGx5aW5nIHByaWNlIG1vZGlmaWVycyB0byBiYXNlIHByaWNlJyArXG5cdFx0XHRcdFx0XHRcdFx0XHQnIC0gY2hhbmdlIHRoZSBjYWxjdWxhdGlvbiBkaXJlY3Rpb24gYnknICtcblx0XHRcdFx0XHRcdFx0XHRcdCcgY2xpY2tpbmcgb24gdGhlIGFycm93IGJ1dHRvbiB0byB0aGUnICtcblx0XHRcdFx0XHRcdFx0XHRcdCcgcmlnaHQgb2YgdGhlIHRpY2tldCB0b3RhbCBmaWVsZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGFzaGljb249eyAnaW5mbycgfVxuXHRcdFx0XHRcdFx0ZGlzbWlzc2FibGU9eyBmYWxzZSB9XG5cdFx0XHRcdFx0XHRjb2xTaXplPXsgMTEgfVxuXHRcdFx0XHRcdFx0b2Zmc2V0PXsgMSB9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Gb3JtU2VjdGlvbj5cblx0XHRcdDwvRm9ybVdyYXBwZXI+XG5cdFx0KSA6IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBFbmhhbmNlZCBUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtIHdpdGggRm9ybUhhbmRsZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgd2l0aEZvcm1IYW5kbGVyKCBUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgRXNwcmVzc29JY29uLCBJY29uTWVudUl0ZW0gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBmbG93IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgd2l0aFRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1Nb2RhbCBmcm9tICcuL3dpdGgtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItZm9ybS1tb2RhbCc7XG5cbmV4cG9ydCBjb25zdCBUaWNrZXRQcmljZUNhbGN1bGF0b3JNZW51SXRlbSA9ICgge1xuXHR0aWNrZXRFbnRpdHksXG5cdHRvZ2dsZUNhbGN1bGF0b3IgPSAoKSA9PiBudWxsLFxuXHRvbk9wZW5UaWNrZXRDYWxjdWxhdG9yID0gKCkgPT4gbnVsbCxcblx0b25DbG9zZVRpY2tldENhbGN1bGF0b3IgPSAoKSA9PiBudWxsLFxuXHRzaG93Q2FsY3VsYXRvcixcblx0bm9CYXNlUHJpY2UgPSBmYWxzZSxcbn0gKSA9PiB7XG5cdGNvbnN0IHRvZ2dsZSA9IHVzZUNhbGxiYWNrKCAoKSA9PiB7XG5cdFx0Y29uc3QgdG9nZ2xlQWN0aW9uID0gc2hvd0NhbGN1bGF0b3IgP1xuXHRcdFx0ZmxvdyggdG9nZ2xlQ2FsY3VsYXRvciwgb25DbG9zZVRpY2tldENhbGN1bGF0b3IgKSA6XG5cdFx0XHRmbG93KCBvbk9wZW5UaWNrZXRDYWxjdWxhdG9yLCB0b2dnbGVDYWxjdWxhdG9yICk7XG5cdFx0dG9nZ2xlQWN0aW9uKCk7XG5cdH0sIFtcblx0XHR0b2dnbGVDYWxjdWxhdG9yLFxuXHRcdHNob3dDYWxjdWxhdG9yLFxuXHRcdG9uT3BlblRpY2tldENhbGN1bGF0b3IsXG5cdFx0b25DbG9zZVRpY2tldENhbGN1bGF0b3IsXG5cdF0gKTtcblx0Y29uc3QgdG9vbHRpcCA9IG5vQmFzZVByaWNlID9cblx0XHRfXyggJ3dhcm5pbmchIG5vIHRpY2tldCBwcmljZSBzZXQgLSBjbGljayB0byBmaXgnLCAnZXZlbnRfZXNwcmVzc28nICkgOlxuXHRcdF9fKCAndGlja2V0IHByaWNlIGNhbGN1bGF0b3InLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdHJldHVybiBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApID8gKFxuXHRcdDxJY29uTWVudUl0ZW1cblx0XHRcdGluZGV4PXsgMiB9XG5cdFx0XHR0b29sdGlwPXsgdG9vbHRpcCB9XG5cdFx0XHRpZD17IGBjYWxjdWxhdGUtdGlja2V0LXByaWNlLXRpY2tldC0keyB0aWNrZXRFbnRpdHkuaWQgfWAgfVxuXHRcdFx0aHRtbENsYXNzPXsgJ2NhbGN1bGF0ZS10aWNrZXRzLXByaWNlJyB9XG5cdFx0XHRkYXNoaWNvbj17IDxFc3ByZXNzb0ljb24gaWNvbj1cImNhbGN1bGF0b3JcIiAvPiB9XG5cdFx0XHR0b29sdGlwUG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuXHRcdFx0b25DbGljaz17IHRvZ2dsZSB9XG5cdFx0XHRpdGVtQ291bnQ9eyBub0Jhc2VQcmljZSA/IDAgOiBudWxsIH1cblx0XHQvPlxuXHQpIDogbnVsbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtTW9kYWwoIFRpY2tldFByaWNlQ2FsY3VsYXRvck1lbnVJdGVtICk7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSwgaXNFbXB0eSwgZm9yRWFjaCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBwcmljZVR5cGVNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL21vZGVsJztcbmltcG9ydCB7IFNpdGVDdXJyZW5jeSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbHVlLW9iamVjdHMnO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IGNyZWF0ZURlY29yYXRvciBmcm9tICdmaW5hbC1mb3JtLWNhbGN1bGF0ZSc7XG5pbXBvcnQgeyB1c2VEZWJvdW5jZSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2hvb2tzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVudGl0eUlkIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBUSUNLRVRfUFJJQ0VfQ0FMQ1VMQVRPUl9GT1JNX0lOUFVUX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB1c2VUaWNrZXRQcmljZUNhbGN1bGF0b3JzIGZyb20gJy4vdXNlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9ycyc7XG5cbmNvbnN0IHsgQkFTRV9QUklDRV9UWVBFUyB9ID0gcHJpY2VUeXBlTW9kZWw7XG5jb25zdCBERUZBVUxUX09CSkVDVCA9IHt9O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBtb25leVZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9IG1vbmV5IHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZU1vbmV5VmFsdWUgPSAoIG1vbmV5VmFsdWUgKSA9PiB7XG5cdG1vbmV5VmFsdWUgPSBtb25leVZhbHVlICYmIG1vbmV5VmFsdWUudG9TdHJpbmcgP1xuXHRcdG1vbmV5VmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKFxuXHRcdFx0bmV3IFJlZ0V4cCggU2l0ZUN1cnJlbmN5LnRob3VzYW5kc1NlcGFyYXRvciwgJ2cnICksXG5cdFx0XHQnJ1xuXHRcdCkucmVwbGFjZShcblx0XHRcdFNpdGVDdXJyZW5jeS5zaWduLFxuXHRcdFx0Jydcblx0XHQpIDpcblx0XHQwO1xuXHRtb25leVZhbHVlID0gcGFyc2VGbG9hdCggbW9uZXlWYWx1ZSApO1xuXHRyZXR1cm4gISBpc05hTiggbW9uZXlWYWx1ZSApID8gbW9uZXlWYWx1ZSA6IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhXG4gKiBAcmV0dXJuIHtudW1iZXJ8c3RyaW5nfSB0aWNrZXRJZFxuICovXG5jb25zdCBnZXRUaWNrZXRJZCA9ICggZm9ybURhdGEgKSA9PiBmb3JtRGF0YS50aWNrZXRJRCB8fCAwO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRvdGFsXG4gKi9cbmNvbnN0IGdldFRpY2tldFRvdGFsID0gKCBmb3JtRGF0YSApID0+IHtcblx0Y29uc3QgdG90YWwgPSBmb3JtRGF0YS50aWNrZXRUb3RhbCB8fCAwO1xuXHRyZXR1cm4gcGFyc2VNb25leVZhbHVlKCB0b3RhbCApO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtRGF0YVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsY3VsYXRvciAgQSBjYWxjdWxhdG9yIGZvciBjYWxjdWxhdGluZyB0aGUgdG90YWwuXG4gKiBAcmV0dXJuIHtPYmplY3R9IG5ldyBmaWVsZCBkYXRhXG4gKi9cbmNvbnN0IGNhbGN1bGF0ZVRpY2tldFRvdGFsRnJvbU1vZGlmaWVycyA9ICggZm9ybURhdGEsIGNhbGN1bGF0b3IgKSA9PiB7XG5cdGNvbnN0IHRpY2tldElkID0gZ2V0VGlja2V0SWQoIGZvcm1EYXRhICk7XG5cdGlmICggISB0aWNrZXRJZCB8fCB0eXBlb2YgY2FsY3VsYXRvciAhPT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdH1cblx0Y29uc3QgcHJpY2VNb2RpZmllcnMgPSBnZXRQcmljZU1vZGlmaWVyc0Zyb21Gb3JtRGF0YSggdGlja2V0SWQsIGZvcm1EYXRhICk7XG5cdGlmICggISBpc0FycmF5KCBwcmljZU1vZGlmaWVycyApIHx8IGlzRW1wdHkoIHByaWNlTW9kaWZpZXJzICkgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfT0JKRUNUO1xuXHR9XG5cdGNvbnN0IHRvdGFsID0gY2FsY3VsYXRvciggMCwgcHJpY2VNb2RpZmllcnMgKTtcblx0cmV0dXJuIHsgdGlja2V0VG90YWw6IHRvdGFsLnRvRml4ZWQoIFNpdGVDdXJyZW5jeS5kZWNpbWFsUGxhY2VzICkgfTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHRpY2tldElkXG4gKiBAcGFyYW0ge09iamVjdH0gZm9ybURhdGFcbiAqIEByZXR1cm4ge3N0cmluZ30gZm9ybSBmaWVsZCBuYW1lXG4gKi9cbmNvbnN0IGdldEJhc2VQcmljZUZvcm1GaWVsZElEID0gKCB0aWNrZXRJZCwgZm9ybURhdGEgKSA9PiB7XG5cdGNvbnN0IGJhc2VQcmVmaXggPSBUSUNLRVRfUFJJQ0VfQ0FMQ1VMQVRPUl9GT1JNX0lOUFVUX1BSRUZJWCArXG5cdFx0YC10aWNrZXQtJHsgdGlja2V0SWQgfS1wcmljZWA7XG5cdGlmICggISBmb3JtRGF0YS5wcmljZUlEcyApIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0Y29uc3QgcHJpY2VJRHMgPSBmb3JtRGF0YS5wcmljZUlEcy5zcGxpdCggJywnICk7XG5cdGZvciAoIGNvbnN0IHByaWNlSUQgb2YgcHJpY2VJRHMgKSB7XG5cdFx0Y29uc3QgcHJlZml4ID0gYCR7IGJhc2VQcmVmaXggfS0keyBwcmljZUlEIH1gO1xuXHRcdGNvbnN0IHByaWNlVHlwZUlkID0gdHlwZW9mIGZvcm1EYXRhWyBgJHsgcHJlZml4IH0tdHlwZWAgXSAhPT0gJ3VuZGVmaW5lZCcgP1xuXHRcdFx0bm9ybWFsaXplRW50aXR5SWQoIGZvcm1EYXRhWyBgJHsgcHJlZml4IH0tdHlwZWAgXSApIDpcblx0XHRcdG51bGw7XG5cdFx0Ly8gYmFzZSBwcmljZXMgaGF2ZSBhIHR5cGUgaWQgb2YgMVxuXHRcdGlmICggcHJpY2VUeXBlSWQgPT09IEJBU0VfUFJJQ0VfVFlQRVMuQkFTRV9QUklDRSApIHtcblx0XHRcdGNvbnN0IGJhc2VQcmljZSA9IHR5cGVvZiBmb3JtRGF0YVsgYCR7IHByZWZpeCB9LWFtb3VudGAgXSAhPT0gJ3VuZGVmaW5lZCcgP1xuXHRcdFx0XHRmb3JtRGF0YVsgYCR7IHByZWZpeCB9LWFtb3VudGAgXSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRpZiAoIGJhc2VQcmljZSAhPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIGAkeyBwcmVmaXggfS1hbW91bnRgO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxjdWxhdG9yICBBIGNhbGN1bGF0b3IgZm9yIGNhbGN1bGF0aW5nIHRoZSB0b3RhbC5cbiAqIEByZXR1cm4ge09iamVjdH0gbmV3IGZpZWxkIGRhdGFcbiAqL1xuY29uc3QgY2FsY3VsYXRlVGlja2V0QmFzZVByaWNlRnJvbVRvdGFsID0gKCBmb3JtRGF0YSwgY2FsY3VsYXRvciApID0+IHtcblx0Y29uc3QgdGlja2V0SWQgPSBnZXRUaWNrZXRJZCggZm9ybURhdGEgKTtcblx0aWYgKCAhIHRpY2tldElkIHx8IHR5cGVvZiBjYWxjdWxhdG9yICE9PSAnZnVuY3Rpb24nICkge1xuXHRcdHJldHVybiBERUZBVUxUX09CSkVDVDtcblx0fVxuXHRjb25zdCBiYXNlUHJpY2VGb3JtRmllbGRJRCA9IGdldEJhc2VQcmljZUZvcm1GaWVsZElEKCB0aWNrZXRJZCwgZm9ybURhdGEgKTtcblx0aWYgKCBiYXNlUHJpY2VGb3JtRmllbGRJRCA9PT0gJycgKSB7XG5cdFx0cmV0dXJuIERFRkFVTFRfT0JKRUNUO1xuXHR9XG5cdGxldCBiYXNlUHJpY2UgPSBnZXRUaWNrZXRUb3RhbCggZm9ybURhdGEgKTtcblx0Y29uc3QgcHJpY2VNb2RpZmllcnMgPSBnZXRQcmljZU1vZGlmaWVyc0Zyb21Gb3JtRGF0YSggdGlja2V0SWQsIGZvcm1EYXRhICk7XG5cdGlmICggaXNBcnJheSggcHJpY2VNb2RpZmllcnMgKSAmJiAhIGlzRW1wdHkoIHByaWNlTW9kaWZpZXJzICkgKSB7XG5cdFx0YmFzZVByaWNlID0gY2FsY3VsYXRvcihcblx0XHRcdGJhc2VQcmljZSxcblx0XHRcdHByaWNlTW9kaWZpZXJzXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdFsgYmFzZVByaWNlRm9ybUZpZWxkSUQgXTogYmFzZVByaWNlLnRvRml4ZWQoXG5cdFx0XHRTaXRlQ3VycmVuY3kuZGVjaW1hbFBsYWNlc1xuXHRcdCksXG5cdH07XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB0aWNrZXRJZFxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhXG4gKiBAcmV0dXJuIHtBcnJheX0gcHJpY2UgbW9kaWZpZXJzXG4gKi9cbmNvbnN0IGdldFByaWNlTW9kaWZpZXJzRnJvbUZvcm1EYXRhID0gKCB0aWNrZXRJZCwgZm9ybURhdGEgKSA9PiB7XG5cdGxldCBiYXNlUHJlZml4ID0gVElDS0VUX1BSSUNFX0NBTENVTEFUT1JfRk9STV9JTlBVVF9QUkVGSVg7XG5cdGJhc2VQcmVmaXggKz0gJy10aWNrZXQtJyArIHRpY2tldElkICsgJy1wcmljZSc7XG5cdGNvbnN0IHByaWNlTW9kaWZpZXJzID0gW107XG5cdGNvbnN0IHByaWNlSURzID0gZm9ybURhdGEucHJpY2VJRHMgPyBmb3JtRGF0YS5wcmljZUlEcy5zcGxpdCggJywnICkgOiBbXTtcblx0Zm9yICggY29uc3QgcHJpY2VJRCBvZiBwcmljZUlEcyApIHtcblx0XHRjb25zdCBwcmVmaXggPSBgJHsgYmFzZVByZWZpeCB9LSR7IHByaWNlSUQgfWA7XG5cdFx0Y29uc3QgcHJpY2VUeXBlSWQgPSB0eXBlb2YgZm9ybURhdGFbIGAkeyBwcmVmaXggfS10eXBlYCBdICE9PSAndW5kZWZpbmVkJyA/XG5cdFx0XHRub3JtYWxpemVFbnRpdHlJZCggZm9ybURhdGFbIGAkeyBwcmVmaXggfS10eXBlYCBdICkgOlxuXHRcdFx0MDtcblx0XHRjb25zdCBwcmljZUFtb3VudCA9IHR5cGVvZiBmb3JtRGF0YVsgYCR7IHByZWZpeCB9LWFtb3VudGAgXSAhPT0gJ3VuZGVmaW5lZCcgP1xuXHRcdFx0cGFyc2VNb25leVZhbHVlKCBmb3JtRGF0YVsgYCR7IHByZWZpeCB9LWFtb3VudGAgXSApIDpcblx0XHRcdDA7XG5cdFx0aWYgKCBwcmljZUFtb3VudCApIHtcblx0XHRcdC8vIEB0b2RvIHRoZSBjYWxjdWxhdG9ycyAoZXhwb3NlZCBieSB1c2VUaWNrZXRQcmljZUNhbGN1bGF0b3JzKSBzb3J0IGJ5IG9yZGVyIGFuZCBpZFxuXHRcdFx0Ly8gYnV0IHRoZSBvcmlnaW5hbCBjb2RlIGhlcmUgbmV2ZXIgZXhwb3NlZCB0aG9zZSB2YWx1ZXMgdG8gdGhlIGNhbGN1bGF0aW9ucy5cblx0XHRcdC8vIHNvIGl0IGxvb2tzIGxpa2UgaXQgd2FzIGEgYml0IHVuZmluaXNoZWQgd2hpY2ggbWVhbnMgd2hhdCB3ZSB3YW50IHRvIGRvIGhlcmVcblx0XHRcdC8vIGlzIHJldHVybiB0aGUgYWN0dWFsIHByaWNlIG9iamVjdHMgZm9yIHRoZSBjYWxjdWxhdG9ycyB0byBkby5cblx0XHRcdC8vIHdlJ2xsIHByb2JhYmx5IGhhdmUgdG8gZXhwb3NlIHRoZSBwcmljZSBvYmplY3RzIHRocm91Z2ggdGhlIGhvb2tzIGJlY2F1c2UgdGhleVxuXHRcdFx0Ly8gYXJlIGF2YWlsYWJsZSFcblx0XHRcdHByaWNlTW9kaWZpZXJzLnB1c2goIHtcblx0XHRcdFx0UFJUX0lEOiBwcmljZVR5cGVJZCxcblx0XHRcdFx0YW1vdW50OiBwcmljZUFtb3VudCxcblx0XHRcdH0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHByaWNlTW9kaWZpZXJzO1xufTtcblxuLyoqXG4gKiBBIGhvb2sgcmV0dXJuaW5nIGEgZm9ybSBkZWNvcmF0b3IgdXNlZCBmb3IgdXBkYXRpbmcgdG90YWwgY2FsY3VsYXRpb25zIGluIGFcbiAqIHRpY2tldCBwcmljZSBjYWxjdWxhdG9yIGZvcm0uXG4gKlxuICogQHBhcmFtIHtCYXNlRW50aXR5W119IHByaWNlVHlwZUVudGl0aWVzICBBbiBhcnJheSBvZiBwcmljZSB0eXBlIEJhc2VFbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHtudW1iZXJ9ICBkZWxheSAgQSBkZWxheSB0byB1c2UgZm9yIGRlYm91bmNpbmcgdGhlIGNhbGN1bGF0ZWQgdG90YWwuXG4gKiBAcmV0dXJuIHtPYmplY3R9ICBkZWNvcmF0b3IsIG11dGF0b3JzLCBhbmQgY2FsbGJhY2tzIGZvciByZWFjdC1maW5hbC1mb3JtXG4gKi9cbmNvbnN0IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1EZWNvcmF0b3IgPSAoIHByaWNlVHlwZUVudGl0aWVzLCBkZWxheSA9IDI1MCApID0+IHtcblx0Y29uc3Qge1xuXHRcdGNhbGN1bGF0ZVRpY2tldFRvdGFsLFxuXHRcdGNhbGN1bGF0ZVRpY2tldEJhc2VQcmljZSxcblx0fSA9IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvcnMoIHByaWNlVHlwZUVudGl0aWVzICk7XG5cdGNvbnN0IFsgdG90YWxDaGFuZ2VkVG8sIHNldFRvdGFsQ2hhbmdpbmdUbyBdID0gdXNlU3RhdGUoIG51bGwgKTtcblx0Y29uc3QgWyBtdXRhdG9yQ2FsbGJhY2tzLCBzZXRNdXRhdG9yQ2FsbGJhY2tzIF0gPSB1c2VTdGF0ZSggbnVsbCApO1xuXHRjb25zdCBkZWJvdW5jZWRUb3RhbENoYW5nZWRUbyA9IHVzZURlYm91bmNlKCB0b3RhbENoYW5nZWRUbywgZGVsYXkgKTtcblxuXHR1c2VFZmZlY3QoICgpID0+IHtcblx0XHRpZiAoIGRlYm91bmNlZFRvdGFsQ2hhbmdlZFRvICkge1xuXHRcdFx0aWYgKCBtdXRhdG9yQ2FsbGJhY2tzLnRvdGFsTXV0YXRvciApIHtcblx0XHRcdFx0bXV0YXRvckNhbGxiYWNrcy50b3RhbE11dGF0b3IoIGRlYm91bmNlZFRvdGFsQ2hhbmdlZFRvICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCBbIGRlYm91bmNlZFRvdGFsQ2hhbmdlZFRvIF0gKTtcblxuXHRjb25zdCB0b3RhbE11dGF0b3IgPSB1c2VDYWxsYmFjayggKFxuXHRcdFsgbmV3VG90YWwgXSxcblx0XHRzdGF0ZSxcblx0XHR7IGNoYW5nZVZhbHVlIH1cblx0KSA9PiB7XG5cdFx0aWYgKCBuZXdUb3RhbCApIHtcblx0XHRcdGZvckVhY2goIG5ld1RvdGFsLCAoIHZhbHVlLCBmaWVsZCApID0+IHtcblx0XHRcdFx0Y2hhbmdlVmFsdWUoIHN0YXRlLCBmaWVsZCwgKCkgPT4gdmFsdWUgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cdH0sIFtdICk7XG5cblx0Y29uc3QgZGVjb3JhdG9yID0gdXNlTWVtbyggKCkgPT4ge1xuXHRcdHJldHVybiBjcmVhdGVEZWNvcmF0b3IoXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAvXiguKj8oXFxiLWFtb3VudFxcYikpJC8sXG5cdFx0XHRcdHVwZGF0ZXM6ICggdmFsdWUsIG5hbWUsIGZvcm1EYXRhLCBwcmV2RGF0YSApID0+IHtcblx0XHRcdFx0XHRpZiAoIHBhcnNlRmxvYXQoIGZvcm1EYXRhWyBuYW1lIF0gKSA9PT0gcGFyc2VGbG9hdCggcHJldkRhdGFbIG5hbWUgXSApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIERFRkFVTFRfT0JKRUNUO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYWxjdWxhdGVUaWNrZXRQcmljZXMoIGZvcm1EYXRhICk7XG5cdFx0XHRcdFx0cmV0dXJuIERFRkFVTFRfT0JKRUNUO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6IC9eKC4qPyhcXGItdHlwZVxcYikpJC8sXG5cdFx0XHRcdHVwZGF0ZXM6ICggdmFsdWUsIG5hbWUsIGZvcm1EYXRhLCBwcmV2RGF0YSApID0+IHtcblx0XHRcdFx0XHRpZiAoIGZvcm1EYXRhWyBuYW1lIF0gPT09IHByZXZEYXRhWyBuYW1lIF0gKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhbGN1bGF0ZVRpY2tldFByaWNlcyggZm9ybURhdGEgKTtcblx0XHRcdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3RpY2tldFRvdGFsJyxcblx0XHRcdFx0dXBkYXRlczogKCB2YWx1ZSwgbmFtZSwgZm9ybURhdGEsIHByZXZEYXRhICkgPT4ge1xuXHRcdFx0XHRcdGlmICggcGFyc2VGbG9hdCggZm9ybURhdGFbIG5hbWUgXSApID09PSBwYXJzZUZsb2F0KCBwcmV2RGF0YVsgbmFtZSBdICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhbGN1bGF0ZVRpY2tldFByaWNlcyggZm9ybURhdGEgKTtcblx0XHRcdFx0XHRyZXR1cm4gREVGQVVMVF9PQkpFQ1Q7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdCk7XG5cdH0sIFtdICk7XG5cblx0Y29uc3QgY2FsY3VsYXRlVGlja2V0UHJpY2VzID0gdXNlQ2FsbGJhY2soICggZm9ybURhdGEgKSA9PiB7XG5cdFx0Y29uc3QgZm9ybVRvdGFsID0gZm9ybURhdGEucmV2ZXJzZUNhbGN1bGF0ZSA/XG5cdFx0XHRjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2VGcm9tVG90YWwoXG5cdFx0XHRcdGZvcm1EYXRhLFxuXHRcdFx0XHRjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2Vcblx0XHRcdCkgOlxuXHRcdFx0Y2FsY3VsYXRlVGlja2V0VG90YWxGcm9tTW9kaWZpZXJzKFxuXHRcdFx0XHRmb3JtRGF0YSxcblx0XHRcdFx0Y2FsY3VsYXRlVGlja2V0VG90YWxcblx0XHRcdCk7XG5cdFx0c2V0VG90YWxDaGFuZ2luZ1RvKCBmb3JtVG90YWwgKTtcblx0fSwgWyBjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2UsIGNhbGN1bGF0ZVRpY2tldFRvdGFsIF0gKTtcblxuXHRyZXR1cm4ge1xuXHRcdGRlY29yYXRvcixcblx0XHRtdXRhdG9yczogeyB0b3RhbE11dGF0b3IgfSxcblx0XHRjYWxjdWxhdGVUaWNrZXRQcmljZXMsXG5cdFx0c2V0TXV0YXRvckNhbGxiYWNrcyxcblx0fTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1EZWNvcmF0b3I7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZmluZCwgcmV2ZXJzZSwgc29ydEJ5LCBmaXJzdCwgZmlsdGVyLCBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHByaWNlVHlwZU1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vbW9kZWwnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IE1vbmV5LCBTaXRlQ3VycmVuY3kgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbmNvbnN0IHsgQkFTRV9QUklDRV9UWVBFUyB9ID0gcHJpY2VUeXBlTW9kZWw7XG5cbmNvbnN0IG5vcm1hbENhc2VzID0gKCBjdXJyZW50VG90YWwsIGFtb3VudCwgaXNQZXJjZW50ICkgPT4gKCB7XG5cdFsgQkFTRV9QUklDRV9UWVBFUy5CQVNFX1BSSUNFIF06ICgpID0+IGN1cnJlbnRUb3RhbCArIGFtb3VudCxcblx0WyBCQVNFX1BSSUNFX1RZUEVTLkRJU0NPVU5UIF06ICgpID0+IGlzUGVyY2VudCA/XG5cdFx0Y3VycmVudFRvdGFsIC0gKCAoIGFtb3VudCAvIDEwMCApICogY3VycmVudFRvdGFsICkgOlxuXHRcdGN1cnJlbnRUb3RhbCAtIGFtb3VudCxcblx0WyBCQVNFX1BSSUNFX1RZUEVTLlNVUkNIQVJHRSBdOiAoKSA9PiBpc1BlcmNlbnQgP1xuXHRcdGN1cnJlbnRUb3RhbCArICggKCBhbW91bnQgLyAxMDAgKSAqIGN1cnJlbnRUb3RhbCApIDpcblx0XHRjdXJyZW50VG90YWwgKyBhbW91bnQsXG5cdFsgQkFTRV9QUklDRV9UWVBFUy5UQVggXTogKCkgPT5cblx0XHRjdXJyZW50VG90YWwgKyAoICggYW1vdW50IC8gMTAwICkgKiBjdXJyZW50VG90YWwgKSxcbn0gKTtcblxuY29uc3QgcmV2ZXJzZUNhc2VzID0gKCBjdXJyZW50VG90YWwsIGFtb3VudCwgaXNQZXJjZW50ICkgPT4gKCB7XG5cdFsgQkFTRV9QUklDRV9UWVBFUy5ESVNDT1VOVCBdOiAoKSA9PiBpc1BlcmNlbnQgP1xuXHRcdGN1cnJlbnRUb3RhbCAvICggKCAxMDAgLSBhbW91bnQgKSAvIDEwMCApIDpcblx0XHRjdXJyZW50VG90YWwgKyBhbW91bnQsXG5cdFsgQkFTRV9QUklDRV9UWVBFUy5TVVJDSEFSR0UgXTogKCkgPT4gaXNQZXJjZW50ID9cblx0XHRjdXJyZW50VG90YWwgLyAoICggMTAwICsgYW1vdW50ICkgLyAxMDAgKSA6XG5cdFx0Y3VycmVudFRvdGFsIC0gYW1vdW50LFxuXHRbIEJBU0VfUFJJQ0VfVFlQRVMuVEFYIF06ICgpID0+IGN1cnJlbnRUb3RhbCAvICggKCAxMDAgKyBhbW91bnQgKSAvIDEwMCApLFxufSApO1xuXG5jb25zdCBnZXRCYXNlUHJpY2UgPSBtZW1vaXplKFxuXHQoIHByaWNlcyApID0+IGZpbmQoIHByaWNlcywgKCBwcmljZSApID0+IHtcblx0XHRyZXR1cm4gcHJpY2UucHJ0SWQgPT09IEJBU0VfUFJJQ0VfVFlQRVMuQkFTRV9QUklDRTtcblx0fSApXG4pO1xuXG5jb25zdCBhY2NydWVBbW91bnQgPSAoIGNhc2VzICkgPT4gKCBkZWZhdWx0Q2FzZSApID0+ICggdHlwZUlkICkgPT5cblx0Y2FzZXMuaGFzT3duUHJvcGVydHkoIHR5cGVJZCApID9cblx0XHRjYXNlc1sgdHlwZUlkIF0oKSA6XG5cdFx0ZGVmYXVsdENhc2U7XG5cbmNvbnN0IGdldFByaWNlVHlwZUZvclByaWNlID0gKCBwcmljZUVudGl0eSwgcHJpY2VUeXBlcyApID0+IHtcblx0Y29uc3QgcHJpY2VUeXBlID0gZmluZCggcHJpY2VUeXBlcywgWyAnaWQnLCBwcmljZUVudGl0eS5QUlRfSUQgXSApO1xuXHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBwcmljZVR5cGUsICdwcmljZV90eXBlJyApICkge1xuXHRcdHJldHVybiBwcmljZVR5cGU7XG5cdH1cblx0cmV0dXJuIGZpcnN0KCBmaWx0ZXIoIHByaWNlVHlwZXMsICggcHQgKSA9PiBwdC5pZCAhPT0gMSApICk7XG59O1xuXG5jb25zdCB1c2VUaWNrZXRQcmljZUNhbGN1bGF0b3JzID0gKCBwcmljZVR5cGVFbnRpdGllcyApID0+IHtcblx0Y29uc3QgY2FsY3VsYXRlVGlja2V0VG90YWwgPSB1c2VDYWxsYmFjayggKCB0b3RhbCA9IDAsIHByaWNlRW50aXRpZXMgKSA9PiB7XG5cdFx0cHJpY2VFbnRpdGllcyA9IHNvcnRCeSggcHJpY2VFbnRpdGllcywgWyAnb3JkZXInLCAnaWQnIF0gKTtcblx0XHRyZXR1cm4gcHJpY2VFbnRpdGllcy5yZWR1Y2UoICggbmV3VG90YWwsIHByaWNlRW50aXR5ICkgPT4ge1xuXHRcdFx0Y29uc3QgcHJpY2VUeXBlRW50aXR5ID0gZ2V0UHJpY2VUeXBlRm9yUHJpY2UoIHByaWNlRW50aXR5LCBwcmljZVR5cGVFbnRpdGllcyApO1xuXHRcdFx0cmV0dXJuIGFjY3J1ZUFtb3VudCggbm9ybWFsQ2FzZXMoXG5cdFx0XHRcdG5ld1RvdGFsLFxuXHRcdFx0XHRwcmljZUVudGl0eS5hbW91bnQsXG5cdFx0XHRcdHByaWNlVHlwZUVudGl0eS5pc1BlcmNlbnRcblx0XHRcdCkgKSggbmV3VG90YWwgKSggcHJpY2VUeXBlRW50aXR5LnBidElkICk7XG5cdFx0fSwgdG90YWwgKTtcblx0fSwgWyBwcmljZVR5cGVFbnRpdGllcyBdICk7XG5cblx0Y29uc3QgY2FsY3VsYXRlVGlja2V0QmFzZVByaWNlID0gdXNlQ2FsbGJhY2soIChcblx0XHR0b3RhbCxcblx0XHRwcmljZUVudGl0aWVzLFxuXHRcdHVwZGF0ZUJhc2VQcmljZSA9IGZhbHNlXG5cdCkgPT4ge1xuXHRcdGlmICggaXNFbXB0eSggcHJpY2VFbnRpdGllcyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwcmljZUVudGl0aWVzID0gcmV2ZXJzZSggc29ydEJ5KCBwcmljZUVudGl0aWVzLCBbICdvcmRlcicsICdpZCcgXSApICk7XG5cdFx0Y29uc3QgYmFzZVByaWNlVG90YWwgPSBwcmljZUVudGl0aWVzLnJlZHVjZSggKCBuZXdUb3RhbCwgcHJpY2VFbnRpdHkgKSA9PiB7XG5cdFx0XHRjb25zdCBwcmljZVR5cGVFbnRpdHkgPSBnZXRQcmljZVR5cGVGb3JQcmljZSggcHJpY2VFbnRpdHksIHByaWNlVHlwZUVudGl0aWVzICk7XG5cdFx0XHRjb25zdCBhbW91bnQgPSBwcmljZUVudGl0eS5hbW91bnQgaW5zdGFuY2VvZiBNb25leSA/XG5cdFx0XHRcdHByaWNlRW50aXR5LmFtb3VudC50b051bWJlcigpIDpcblx0XHRcdFx0cHJpY2VFbnRpdHkuYW1vdW50O1xuXHRcdFx0cmV0dXJuIGFjY3J1ZUFtb3VudCggcmV2ZXJzZUNhc2VzKFxuXHRcdFx0XHRuZXdUb3RhbCxcblx0XHRcdFx0YW1vdW50LFxuXHRcdFx0XHRwcmljZVR5cGVFbnRpdHkuaXNQZXJjZW50XG5cdFx0XHQpICkoIG5ld1RvdGFsICkoIHByaWNlVHlwZUVudGl0eS5wYnRJZCApO1xuXHRcdH0sIHRvdGFsICk7XG5cdFx0aWYgKCB1cGRhdGVCYXNlUHJpY2UgKSB7XG5cdFx0XHRjb25zdCBiYXNlUHJpY2UgPSBnZXRCYXNlUHJpY2UoIHByaWNlRW50aXRpZXMgKTtcblx0XHRcdGJhc2VQcmljZS5hbW91bnQgPSBuZXcgTW9uZXkoIGJhc2VQcmljZVRvdGFsLCBTaXRlQ3VycmVuY3kgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2VQcmljZVRvdGFsO1xuXHR9LCBbIHByaWNlVHlwZUVudGl0aWVzIF0gKTtcblxuXHRjb25zdCBjYWxjdWxhdGVUaWNrZXRUb3RhbHMgPSB1c2VDYWxsYmFjayggKCB0b3RhbCwgcHJpY2VFbnRpdGllcywgcmV2ZXJzZUNhbGN1bGF0ZSApID0+IHtcblx0XHRyZXR1cm4gcmV2ZXJzZUNhbGN1bGF0ZSA/XG5cdFx0XHRjYWxjdWxhdGVUaWNrZXRCYXNlUHJpY2UoIHRvdGFsLCBwcmljZUVudGl0aWVzICkgOlxuXHRcdFx0Y2FsY3VsYXRlVGlja2V0VG90YWwoIHRvdGFsLCBwcmljZUVudGl0aWVzICk7XG5cdH0gKTtcblxuXHRyZXR1cm4ge1xuXHRcdGNhbGN1bGF0ZVRpY2tldEJhc2VQcmljZSxcblx0XHRjYWxjdWxhdGVUaWNrZXRUb3RhbCxcblx0XHRjYWxjdWxhdGVUaWNrZXRUb3RhbHMsXG5cdH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VUaWNrZXRQcmljZUNhbGN1bGF0b3JzO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGNvbXBvc2UsIHdpdGhTdGF0ZSwgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgd2l0aERpc3BhdGNoIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBfXywgX3gsIHNwcmludGYgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IHdpdGhFZGl0b3JNb2RhbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VkaXRvci1ob2NzJztcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IHdpdGhUaWNrZXRQcmljZUVudGl0aWVzLCB3aXRoUHJpY2VUeXBlRW50aXRpZXMgfSBmcm9tICcuLi8uLi8uLi9ob2NzJztcbmltcG9ydCB1c2VUaWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtRGVjb3JhdG9yIGZyb20gJy4vdXNlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWZvcm0tZGVjb3JhdG9yJztcbmltcG9ydCB7XG5cdFRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm0sXG5cdHRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1EYXRhTWFwLFxufSBmcm9tICcuLyc7XG5cbi8qKlxuICogVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybU1vZGFsXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmNvbnN0IFRpY2tldFByaWNlQ2FsY3VsYXRvckZvcm1Nb2RhbCA9IHdpdGhFZGl0b3JNb2RhbCgge1xuXHR0aXRsZTogX18oICdUaWNrZXQgUHJpY2UgQ2FsY3VsYXRvcicsICdldmVudF9lc3ByZXNzbycgKSxcblx0Y3VzdG9tQ2xhc3M6ICdlZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1tb2RhbCcsXG5cdGNsb3NlQnV0dG9uTGFiZWw6IF9fKCAnY2xvc2UgdGlja2V0IHByaWNlIGNhbGN1bGF0b3InLFxuXHRcdCdldmVudF9lc3ByZXNzbydcblx0KSxcbn0gKSggKCB7XG5cdHRpY2tldEVudGl0eSxcblx0cHJpY2VFbnRpdGllcyxcblx0cHJpY2VFbnRpdGllc0xvYWRlZCxcblx0cHJpY2VUeXBlRW50aXRpZXMsXG5cdHByaWNlVHlwZUVudGl0aWVzTG9hZGVkLFxuXHQuLi5leHRyYVByb3BzXG59ICkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGVjb3JhdG9yLFxuXHRcdGNhbGN1bGF0ZVRpY2tldFByaWNlcyxcblx0XHRzZXRNdXRhdG9yQ2FsbGJhY2tzLFxuXHRcdG11dGF0b3JzLFxuXHR9ID0gdXNlVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybURlY29yYXRvcihcblx0XHRwcmljZVR5cGVFbnRpdGllcyxcblx0XHRwcmljZVR5cGVFbnRpdGllc0xvYWRlZFxuXHQpO1xuXHRjb25zdCBbIGZvcm1EYXRhLCBzZXRGb3JtRGF0YSBdID0gdXNlU3RhdGUoIHt9ICk7XG5cdGNvbnN0IFsgcmV2ZXJzZUNhbGN1bGF0ZSwgc2V0UmV2ZXJzZUNhbGN1bGF0ZSBdID0gdXNlU3RhdGUoIGZhbHNlICk7XG5cblx0dXNlRWZmZWN0KCAoKSA9PiB7XG5cdFx0Y29uc3QgbmV3Rm9ybURhdGEgPSB0aWNrZXRQcmljZUNhbGN1bGF0b3JGb3JtRGF0YU1hcChcblx0XHRcdHRpY2tldEVudGl0eSxcblx0XHRcdHByaWNlRW50aXRpZXMsXG5cdFx0XHRyZXZlcnNlQ2FsY3VsYXRlXG5cdFx0KTtcblx0XHRjb25zdCB0b3RhbHMgPSBjYWxjdWxhdGVUaWNrZXRQcmljZXMoIG5ld0Zvcm1EYXRhICk7XG5cdFx0c2V0Rm9ybURhdGEoIHsgLi4ubmV3Rm9ybURhdGEsIC4uLnRvdGFscyB9ICk7XG5cdH0sIFsgdGlja2V0RW50aXR5LCBwcmljZUVudGl0aWVzLCByZXZlcnNlQ2FsY3VsYXRlLCBjYWxjdWxhdGVUaWNrZXRQcmljZXMgXSApO1xuXG5cdGNvbnN0IGxvYWRpbmcgPSAhICggcHJpY2VFbnRpdGllc0xvYWRlZCAmJiBwcmljZVR5cGVFbnRpdGllc0xvYWRlZCApO1xuXHRjb25zdCBmb3JtUHJvcHMgPSBsb2FkaW5nID9cblx0XHR7IGxvYWRpbmcgfSA6XG5cdFx0e1xuXHRcdFx0bG9hZGluZyxcblx0XHRcdHRpY2tldEVudGl0eSxcblx0XHRcdHByaWNlRW50aXRpZXMsXG5cdFx0XHRwcmljZVR5cGVFbnRpdGllcyxcblx0XHRcdGZvcm1EYXRhLFxuXHRcdH07XG5cblx0cmV0dXJuIChcblx0XHQ8VGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybVxuXHRcdFx0eyAuLi5mb3JtUHJvcHMgfVxuXHRcdFx0ZGVjb3JhdG9ycz17IGRlY29yYXRvciB9XG5cdFx0XHRtdXRhdG9ycz17IG11dGF0b3JzIH1cblx0XHRcdHNldE11dGF0b3JDYWxsYmFja3M9eyBzZXRNdXRhdG9yQ2FsbGJhY2tzIH1cblx0XHRcdHNldFJldmVyc2VDYWxjdWxhdGU9eyBzZXRSZXZlcnNlQ2FsY3VsYXRlIH1cblx0XHRcdGxvYWRIYW5kbGVyPXsgbnVsbCB9XG5cdFx0XHRzdWJtaXRIYW5kbGVyPXsgbnVsbCB9XG5cdFx0XHRyZXNldEhhbmRsZXI9eyBudWxsIH1cblx0XHRcdGxvYWRpbmdOb3RpY2U9e1xuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdF94KFxuXHRcdFx0XHRcdFx0J2xvYWRpbmcgdGlja2V0IHByaWNlcyVzJyxcblx0XHRcdFx0XHRcdCdsb2FkaW5nIHRpY2tldCBwcmljZXMuLi4nLFxuXHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggJzgyMzAnIClcblx0XHRcdFx0KVxuXHRcdFx0fVxuXHRcdFx0eyAuLi5leHRyYVByb3BzIH1cblx0XHQvPlxuXHQpO1xufSApO1xuXG4vKlxuICogRW5oYW5jZWQgVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybSB3aXRoIE1vZGFsXG4gKiB3aXRoU2VsZWN0VGlja2V0UHJpY2VzQW5kUHJpY2VUeXBlc1xuICovXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCggY29tcG9zZSggW1xuXHR3aXRoUHJpY2VUeXBlRW50aXRpZXMsXG5cdHdpdGhUaWNrZXRQcmljZUVudGl0aWVzLFxuXHR3aXRoU3RhdGUoIHsgZm9ybUNoYW5nZXM6IGZhbHNlIH0gKSxcblx0d2l0aERpc3BhdGNoKCAoIGRpc3BhdGNoLCBvd25Qcm9wcyApID0+IHtcblx0XHRjb25zdCB7XG5cdFx0XHRzZXRTdGF0ZSxcblx0XHRcdHByaWNlRW50aXRpZXMsXG5cdFx0fSA9IG93blByb3BzO1xuXHRcdGNvbnN0IHtcblx0XHRcdGNyZWF0ZUVudGl0eSxcblx0XHRcdGNyZWF0ZVJlbGF0aW9uLFxuXHRcdFx0cmVtb3ZlUmVsYXRpb25Gb3JFbnRpdHksXG5cdFx0XHR0cmFzaEVudGl0eUJ5SWQsXG5cdFx0fSA9IGRpc3BhdGNoKCAnZXZlbnRlc3ByZXNzby9jb3JlJyApO1xuXHRcdGNvbnN0IGFkZFByaWNlTW9kaWZpZXIgPSBhc3luYyAoIHRpY2tldEVudGl0eSApID0+IHtcblx0XHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggdGlja2V0RW50aXR5LCAndGlja2V0JyApICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcmljZU1vZGlmaWVyID0gYXdhaXQgY3JlYXRlRW50aXR5KFxuXHRcdFx0XHQncHJpY2UnLFxuXHRcdFx0XHR7IFBSQ19vcmRlcjogcHJpY2VFbnRpdGllcy5sZW5ndGggKyAxIH1cblx0XHRcdCk7XG5cdFx0XHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBwcmljZU1vZGlmaWVyLCAncHJpY2UnICkgKSB7XG5cdFx0XHRcdGNyZWF0ZVJlbGF0aW9uKCAndGlja2V0JywgdGlja2V0RW50aXR5LmlkLCAncHJpY2UnLCBwcmljZU1vZGlmaWVyICk7XG5cdFx0XHRcdHNldFN0YXRlKCB7IGZvcm1DaGFuZ2VzOiB0cnVlIH0gKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IHRyYXNoUHJpY2VNb2RpZmllciA9IGFzeW5jICggcHJpY2VNb2RpZmllciwgdGlja2V0RW50aXR5ICkgPT4ge1xuXHRcdFx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBwcmljZU1vZGlmaWVyLCAncHJpY2UnICkgKSB7XG5cdFx0XHRcdEVycm9yKFxuXHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0J1VuYWJsZSB0byBwZXJmb3JtIGRlbGV0aW9uIGJlY2F1c2UgYW4gaW52YWxpZCBQcmljZScgK1xuXHRcdFx0XHRcdFx0JyBFbnRpdHkgd2FzIHN1cHBsaWVkIGJ5IHRoZSBUaWNrZXQgUHJpY2UgQ2FsY3VsYXRvci4nLFxuXHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCB0aWNrZXRFbnRpdHksICd0aWNrZXQnICkgKSB7XG5cdFx0XHRcdEVycm9yKFxuXHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0J1VuYWJsZSB0byBwZXJmb3JtIGRlbGV0aW9uIGJlY2F1c2UgYW4gaW52YWxpZCBUaWNrZXQnICtcblx0XHRcdFx0XHRcdCcgRW50aXR5IHdhcyBzdXBwbGllZCBieSB0aGUgVGlja2V0IFByaWNlIENhbGN1bGF0b3IuJyxcblx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHJlbW92ZVJlbGF0aW9uRm9yRW50aXR5KFxuXHRcdFx0XHQndGlja2V0Jyxcblx0XHRcdFx0dGlja2V0RW50aXR5LmlkLFxuXHRcdFx0XHQncHJpY2UnLFxuXHRcdFx0XHRwcmljZU1vZGlmaWVyLmlkXG5cdFx0XHQpO1xuXHRcdFx0dHJhc2hFbnRpdHlCeUlkKCAncHJpY2UnLCBwcmljZU1vZGlmaWVyLmlkICk7XG5cdFx0XHRzZXRTdGF0ZSggeyBmb3JtQ2hhbmdlczogdHJ1ZSB9ICk7XG5cdFx0fTtcblx0XHRyZXR1cm4geyBhZGRQcmljZU1vZGlmaWVyLCB0cmFzaFByaWNlTW9kaWZpZXIgfTtcblx0fSApLFxuXHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiAoIHByb3BzICkgPT4ge1xuXHRcdGNvbnN0IFsgc2hvd0NhbGN1bGF0b3IsIHNldFNob3dDYWxjdWxhdG9yIF0gPSB1c2VTdGF0ZSggZmFsc2UgKTtcblx0XHRjb25zdCB0b2dnbGVDYWxjdWxhdG9yID0gdXNlQ2FsbGJhY2soICgpID0+IHtcblx0XHRcdHNldFNob3dDYWxjdWxhdG9yKCAoIHByZXZTaG93Q2FsY3VsYXRvciApID0+IHtcblx0XHRcdFx0cmV0dXJuICEgcHJldlNob3dDYWxjdWxhdG9yO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gPEZyYWdtZW50PlxuXHRcdFx0PFdyYXBwZWRDb21wb25lbnRcblx0XHRcdFx0eyAuLi5wcm9wcyB9XG5cdFx0XHRcdHRvZ2dsZUNhbGN1bGF0b3I9eyB0b2dnbGVDYWxjdWxhdG9yIH1cblx0XHRcdC8+XG5cdFx0XHQ8VGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybU1vZGFsXG5cdFx0XHRcdHsgLi4ucHJvcHMgfVxuXHRcdFx0XHRlZGl0b3JPcGVuPXsgc2hvd0NhbGN1bGF0b3IgfVxuXHRcdFx0XHR0b2dnbGVFZGl0b3I9eyB0b2dnbGVDYWxjdWxhdG9yIH1cblx0XHRcdC8+XG5cdFx0PC9GcmFnbWVudD47XG5cdH0sXG5dICksICd3aXRoVGlja2V0UHJpY2VDYWxjdWxhdG9yRm9ybU1vZGFsJyApO1xuXG4iLCJleHBvcnQgKiBmcm9tICcuL2VkaXRvci10aWNrZXQnO1xuIiwiaW1wb3J0ICcuL2VkaXRvci5jc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudHMnO1xuIiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlczsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mXCIpO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG4gIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdDsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0OyIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL2RlZmluZVByb3BlcnR5XCIpO1xuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3duS2V5cyA9IG93bktleXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBvd25LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFNwcmVhZDsiLCJ2YXIgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSA9IHJlcXVpcmUoXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIik7XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcbiAgdmFyIGtleSwgaTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07XG4gICAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXM7IiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2U7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi4vaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIik7XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm47IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2Y7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXlMaW1pdCA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0XCIpO1xuXG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0XCIpO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2xpY2VkVG9BcnJheTsiLCJmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcikgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCJpbXBvcnQgeyBnZXRJbiB9IGZyb20gJ2ZpbmFsLWZvcm0nO1xuXG52YXIgaXNQcm9taXNlID0gKGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XG59KTtcblxuLy8gICAgICBcblxudmFyIHRyaXBsZUVxdWFscyA9IGZ1bmN0aW9uIHRyaXBsZUVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufTtcblxudmFyIGNyZWF0ZURlY29yYXRvciA9IGZ1bmN0aW9uIGNyZWF0ZURlY29yYXRvcigpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNhbGN1bGF0aW9ucyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBjYWxjdWxhdGlvbnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSB7fTtcbiAgICB2YXIgdW5zdWJzY3JpYmUgPSBmb3JtLnN1YnNjcmliZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHZhbHVlcyA9IF9yZWYudmFsdWVzO1xuICAgICAgZm9ybS5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBydW5VcGRhdGVzID0gZnVuY3Rpb24gcnVuVXBkYXRlcyhmaWVsZCwgaXNFcXVhbCwgdXBkYXRlcykge1xuICAgICAgICAgIHZhciBuZXh0ID0gdmFsdWVzICYmIGdldEluKHZhbHVlcywgZmllbGQpO1xuICAgICAgICAgIHZhciBwcmV2aW91cyA9IHByZXZpb3VzVmFsdWVzICYmIGdldEluKHByZXZpb3VzVmFsdWVzLCBmaWVsZCk7XG5cbiAgICAgICAgICBpZiAoIWlzRXF1YWwobmV4dCwgcHJldmlvdXMpKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVwZGF0ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB1cGRhdGVzKG5leHQsIGZpZWxkLCB2YWx1ZXMsIHByZXZpb3VzVmFsdWVzKTtcblxuICAgICAgICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdHMpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy50aGVuKGZ1bmN0aW9uIChyZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocmVzb2x2ZWQpLmZvckVhY2goZnVuY3Rpb24gKGRlc3RGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtLmNoYW5nZShkZXN0RmllbGQsIHJlc29sdmVkW2Rlc3RGaWVsZF0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoZGVzdEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICBmb3JtLmNoYW5nZShkZXN0RmllbGQsIHJlc3VsdHNbZGVzdEZpZWxkXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGRlc3RGaWVsZCkge1xuICAgICAgICAgICAgICAgIHZhciB1cGRhdGUgPSB1cGRhdGVzW2Rlc3RGaWVsZF07XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHVwZGF0ZShuZXh0LCB2YWx1ZXMsIHByZXZpb3VzVmFsdWVzKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0LnRoZW4oZnVuY3Rpb24gKHJlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm0uY2hhbmdlKGRlc3RGaWVsZCwgcmVzb2x2ZWQpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGZvcm0uY2hhbmdlKGRlc3RGaWVsZCwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgZmllbGRzID0gZm9ybS5nZXRSZWdpc3RlcmVkRmllbGRzKCk7XG4gICAgICAgIGNhbGN1bGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICAgIHZhciBmaWVsZCA9IF9yZWYyLmZpZWxkLFxuICAgICAgICAgICAgICBpc0VxdWFsID0gX3JlZjIuaXNFcXVhbCxcbiAgICAgICAgICAgICAgdXBkYXRlcyA9IF9yZWYyLnVwZGF0ZXM7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcnVuVXBkYXRlcyhmaWVsZCwgaXNFcXVhbCB8fCB0cmlwbGVFcXVhbHMsIHVwZGF0ZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBmaWVsZCBpcyBhIGVpdGhlciBhcnJheSBvciByZWdleFxuICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB+ZmllbGQuaW5kZXhPZihuYW1lKSB8fCBmaWVsZC5maW5kSW5kZXgoZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBmLnRlc3QobmFtZSk7XG4gICAgICAgICAgICAgIH0pICE9PSAtMTtcbiAgICAgICAgICAgIH0gOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmllbGQudGVzdChuYW1lKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGROYW1lKSB7XG4gICAgICAgICAgICAgIGlmIChtYXRjaGVzKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBydW5VcGRhdGVzKGZpZWxkTmFtZSwgaXNFcXVhbCB8fCB0cmlwbGVFcXVhbHMsIHVwZGF0ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBwcmV2aW91c1ZhbHVlcyA9IHZhbHVlcztcbiAgICAgIH0pO1xuICAgIH0sIHtcbiAgICAgIHZhbHVlczogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgfTtcbn07XG5cbi8vXG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZURlY29yYXRvcjtcbiIsImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJztcblxuLy8gICAgICBcbnZhciB0b1BhdGggPSBmdW5jdGlvbiB0b1BhdGgoa2V5KSB7XG4gIGlmIChrZXkgPT09IG51bGwgfHwga2V5ID09PSB1bmRlZmluZWQgfHwgIWtleS5sZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvUGF0aCgpIGV4cGVjdHMgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIHJldHVybiBrZXkuc3BsaXQoL1suW1xcXV0rLykuZmlsdGVyKEJvb2xlYW4pO1xufTtcblxuLy8gICAgICBcblxudmFyIGdldEluID0gZnVuY3Rpb24gZ2V0SW4oc3RhdGUsIGNvbXBsZXhLZXkpIHtcbiAgLy8gSW50ZW50aW9uYWxseSB1c2luZyBpdGVyYXRpb24gcmF0aGVyIHRoYW4gcmVjdXJzaW9uXG4gIHZhciBwYXRoID0gdG9QYXRoKGNvbXBsZXhLZXkpO1xuICB2YXIgY3VycmVudCA9IHN0YXRlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuXG4gICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fCBjdXJyZW50ID09PSBudWxsIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGN1cnJlbnQpICYmIGlzTmFOKGtleSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50O1xufTtcblxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7IHZhciBrZXkgPSBfdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTsgcmV0dXJuIHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTsgfVxuXG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHsgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0OyB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmIChwcmltICE9PSB1bmRlZmluZWQpIHsgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7IGlmICh0eXBlb2YgcmVzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7IH1cblxudmFyIHNldEluUmVjdXJzb3IgPSBmdW5jdGlvbiBzZXRJblJlY3Vyc29yKGN1cnJlbnQsIGluZGV4LCBwYXRoLCB2YWx1ZSwgZGVzdHJveUFycmF5cykge1xuICBpZiAoaW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcbiAgICAvLyBlbmQgb2YgcmVjdXJzaW9uXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIGtleSA9IHBhdGhbaW5kZXhdOyAvLyBkZXRlcm1pbmUgdHlwZSBvZiBrZXlcblxuICBpZiAoaXNOYU4oa2V5KSkge1xuICAgIHZhciBfZXh0ZW5kczI7XG5cbiAgICAvLyBvYmplY3Qgc2V0XG4gICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fCBjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICB2YXIgX3JlZjtcblxuICAgICAgLy8gcmVjdXJzZVxuICAgICAgdmFyIF9yZXN1bHQyID0gc2V0SW5SZWN1cnNvcih1bmRlZmluZWQsIGluZGV4ICsgMSwgcGF0aCwgdmFsdWUsIGRlc3Ryb3lBcnJheXMpOyAvLyBkZWxldGUgb3IgY3JlYXRlIGFuIG9iamVjdFxuXG5cbiAgICAgIHJldHVybiBfcmVzdWx0MiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogKF9yZWYgPSB7fSwgX3JlZltrZXldID0gX3Jlc3VsdDIsIF9yZWYpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgYSBub24tbnVtZXJpYyBwcm9wZXJ0eSBvbiBhbiBhcnJheScpO1xuICAgIH0gLy8gY3VycmVudCBleGlzdHMsIHNvIG1ha2UgYSBjb3B5IG9mIGFsbCBpdHMgdmFsdWVzLCBhbmQgYWRkL3VwZGF0ZSB0aGUgbmV3IG9uZVxuXG5cbiAgICB2YXIgX3Jlc3VsdCA9IHNldEluUmVjdXJzb3IoY3VycmVudFtrZXldLCBpbmRleCArIDEsIHBhdGgsIHZhbHVlLCBkZXN0cm95QXJyYXlzKTtcblxuICAgIGlmIChfcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBudW1LZXlzID0gT2JqZWN0LmtleXMoY3VycmVudCkubGVuZ3RoO1xuXG4gICAgICBpZiAoY3VycmVudFtrZXldID09PSB1bmRlZmluZWQgJiYgbnVtS2V5cyA9PT0gMCkge1xuICAgICAgICAvLyBvYmplY3Qgd2FzIGFscmVhZHkgZW1wdHlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnRba2V5XSAhPT0gdW5kZWZpbmVkICYmIG51bUtleXMgPD0gMSkge1xuICAgICAgICAvLyBvbmx5IGtleSB3ZSBoYWQgd2FzIHRoZSBvbmUgd2UgYXJlIGRlbGV0aW5nXG4gICAgICAgIGlmICghaXNOYU4ocGF0aFtpbmRleCAtIDFdKSAmJiAhZGVzdHJveUFycmF5cykge1xuICAgICAgICAgIC8vIHdlIGFyZSBpbiBhbiBhcnJheSwgc28gcmV0dXJuIGFuIGVtcHR5IG9iamVjdFxuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBfcmVtb3ZlZCA9IGN1cnJlbnRba2V5XSxcbiAgICAgICAgICBfZmluYWwgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShjdXJyZW50LCBba2V5XS5tYXAoX3RvUHJvcGVydHlLZXkpKTtcblxuICAgICAgcmV0dXJuIF9maW5hbDtcbiAgICB9IC8vIHNldCByZXN1bHQgaW4ga2V5XG5cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgY3VycmVudCwgKF9leHRlbmRzMiA9IHt9LCBfZXh0ZW5kczJba2V5XSA9IF9yZXN1bHQsIF9leHRlbmRzMikpO1xuICB9IC8vIGFycmF5IHNldFxuXG5cbiAgdmFyIG51bWVyaWNLZXkgPSBOdW1iZXIoa2V5KTtcblxuICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyByZWN1cnNlXG4gICAgdmFyIF9yZXN1bHQzID0gc2V0SW5SZWN1cnNvcih1bmRlZmluZWQsIGluZGV4ICsgMSwgcGF0aCwgdmFsdWUsIGRlc3Ryb3lBcnJheXMpOyAvLyBpZiBub3RoaW5nIHJldHVybmVkLCBkZWxldGUgaXRcblxuXG4gICAgaWYgKF9yZXN1bHQzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSAvLyBjcmVhdGUgYW4gYXJyYXlcblxuXG4gICAgdmFyIF9hcnJheSA9IFtdO1xuICAgIF9hcnJheVtudW1lcmljS2V5XSA9IF9yZXN1bHQzO1xuICAgIHJldHVybiBfYXJyYXk7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgYSBudW1lcmljIHByb3BlcnR5IG9uIGFuIG9iamVjdCcpO1xuICB9IC8vIHJlY3Vyc2VcblxuXG4gIHZhciBleGlzdGluZ1ZhbHVlID0gY3VycmVudFtudW1lcmljS2V5XTtcbiAgdmFyIHJlc3VsdCA9IHNldEluUmVjdXJzb3IoZXhpc3RpbmdWYWx1ZSwgaW5kZXggKyAxLCBwYXRoLCB2YWx1ZSwgZGVzdHJveUFycmF5cyk7IC8vIGN1cnJlbnQgZXhpc3RzLCBzbyBtYWtlIGEgY29weSBvZiBhbGwgaXRzIHZhbHVlcywgYW5kIGFkZC91cGRhdGUgdGhlIG5ldyBvbmVcblxuICB2YXIgYXJyYXkgPSBbXS5jb25jYXQoY3VycmVudCk7XG5cbiAgaWYgKGRlc3Ryb3lBcnJheXMgJiYgcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheS5zcGxpY2UobnVtZXJpY0tleSwgMSk7XG5cbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhcnJheVtudW1lcmljS2V5XSA9IHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn07XG5cbnZhciBzZXRJbiA9IGZ1bmN0aW9uIHNldEluKHN0YXRlLCBrZXksIHZhbHVlLCBkZXN0cm95QXJyYXlzKSB7XG4gIGlmIChkZXN0cm95QXJyYXlzID09PSB2b2lkIDApIHtcbiAgICBkZXN0cm95QXJyYXlzID0gZmFsc2U7XG4gIH1cblxuICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCB8fCBzdGF0ZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjYWxsIHNldEluKCkgd2l0aCBcIiArIFN0cmluZyhzdGF0ZSkgKyBcIiBzdGF0ZVwiKTtcbiAgfVxuXG4gIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY2FsbCBzZXRJbigpIHdpdGggXCIgKyBTdHJpbmcoa2V5KSArIFwiIGtleVwiKTtcbiAgfSAvLyBSZWN1cnNpdmUgZnVuY3Rpb24gbmVlZHMgdG8gYWNjZXB0IGFuZCByZXR1cm4gU3RhdGUsIGJ1dCBwdWJsaWMgQVBJIHNob3VsZFxuICAvLyBvbmx5IGRlYWwgd2l0aCBPYmplY3RzXG5cblxuICByZXR1cm4gc2V0SW5SZWN1cnNvcihzdGF0ZSwgMCwgdG9QYXRoKGtleSksIHZhbHVlLCBkZXN0cm95QXJyYXlzKTtcbn07XG5cbnZhciBGT1JNX0VSUk9SID0gJ0ZJTkFMX0ZPUk0vZm9ybS1lcnJvcic7XG52YXIgQVJSQVlfRVJST1IgPSAnRklOQUxfRk9STS9hcnJheS1lcnJvcic7XG5cbi8vICAgICAgXG4vKipcbiAqIENvbnZlcnRzIGludGVybmFsIGZpZWxkIHN0YXRlIHRvIHB1Ymxpc2hlZCBmaWVsZCBzdGF0ZVxuICovXG5cbnZhciBwdWJsaXNoRmllbGRTdGF0ZSA9IGZ1bmN0aW9uIHB1Ymxpc2hGaWVsZFN0YXRlKGZvcm1TdGF0ZSwgZmllbGQpIHtcbiAgdmFyIGVycm9ycyA9IGZvcm1TdGF0ZS5lcnJvcnMsXG4gICAgICBpbml0aWFsVmFsdWVzID0gZm9ybVN0YXRlLmluaXRpYWxWYWx1ZXMsXG4gICAgICBsYXN0U3VibWl0dGVkVmFsdWVzID0gZm9ybVN0YXRlLmxhc3RTdWJtaXR0ZWRWYWx1ZXMsXG4gICAgICBzdWJtaXRFcnJvcnMgPSBmb3JtU3RhdGUuc3VibWl0RXJyb3JzLFxuICAgICAgc3VibWl0RmFpbGVkID0gZm9ybVN0YXRlLnN1Ym1pdEZhaWxlZCxcbiAgICAgIHN1Ym1pdFN1Y2NlZWRlZCA9IGZvcm1TdGF0ZS5zdWJtaXRTdWNjZWVkZWQsXG4gICAgICBzdWJtaXR0aW5nID0gZm9ybVN0YXRlLnN1Ym1pdHRpbmcsXG4gICAgICB2YWx1ZXMgPSBmb3JtU3RhdGUudmFsdWVzO1xuICB2YXIgYWN0aXZlID0gZmllbGQuYWN0aXZlLFxuICAgICAgYmx1ciA9IGZpZWxkLmJsdXIsXG4gICAgICBjaGFuZ2UgPSBmaWVsZC5jaGFuZ2UsXG4gICAgICBkYXRhID0gZmllbGQuZGF0YSxcbiAgICAgIGZvY3VzID0gZmllbGQuZm9jdXMsXG4gICAgICBtb2RpZmllZCA9IGZpZWxkLm1vZGlmaWVkLFxuICAgICAgbmFtZSA9IGZpZWxkLm5hbWUsXG4gICAgICB0b3VjaGVkID0gZmllbGQudG91Y2hlZCxcbiAgICAgIHZpc2l0ZWQgPSBmaWVsZC52aXNpdGVkO1xuICB2YXIgdmFsdWUgPSBnZXRJbih2YWx1ZXMsIG5hbWUpO1xuICB2YXIgZXJyb3IgPSBnZXRJbihlcnJvcnMsIG5hbWUpO1xuXG4gIGlmIChlcnJvciAmJiBlcnJvcltBUlJBWV9FUlJPUl0pIHtcbiAgICBlcnJvciA9IGVycm9yW0FSUkFZX0VSUk9SXTtcbiAgfVxuXG4gIHZhciBzdWJtaXRFcnJvciA9IHN1Ym1pdEVycm9ycyAmJiBnZXRJbihzdWJtaXRFcnJvcnMsIG5hbWUpO1xuICB2YXIgaW5pdGlhbCA9IGluaXRpYWxWYWx1ZXMgJiYgZ2V0SW4oaW5pdGlhbFZhbHVlcywgbmFtZSk7XG4gIHZhciBwcmlzdGluZSA9IGZpZWxkLmlzRXF1YWwoaW5pdGlhbCwgdmFsdWUpO1xuICB2YXIgZGlydHlTaW5jZUxhc3RTdWJtaXQgPSAhIShsYXN0U3VibWl0dGVkVmFsdWVzICYmICFmaWVsZC5pc0VxdWFsKGdldEluKGxhc3RTdWJtaXR0ZWRWYWx1ZXMsIG5hbWUpLCB2YWx1ZSkpO1xuICB2YXIgdmFsaWQgPSAhZXJyb3IgJiYgIXN1Ym1pdEVycm9yO1xuICByZXR1cm4ge1xuICAgIGFjdGl2ZTogYWN0aXZlLFxuICAgIGJsdXI6IGJsdXIsXG4gICAgY2hhbmdlOiBjaGFuZ2UsXG4gICAgZGF0YTogZGF0YSxcbiAgICBkaXJ0eTogIXByaXN0aW5lLFxuICAgIGRpcnR5U2luY2VMYXN0U3VibWl0OiBkaXJ0eVNpbmNlTGFzdFN1Ym1pdCxcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgZm9jdXM6IGZvY3VzLFxuICAgIGluaXRpYWw6IGluaXRpYWwsXG4gICAgaW52YWxpZDogIXZhbGlkLFxuICAgIGxlbmd0aDogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5sZW5ndGggOiB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IG1vZGlmaWVkLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcHJpc3RpbmU6IHByaXN0aW5lLFxuICAgIHN1Ym1pdEVycm9yOiBzdWJtaXRFcnJvcixcbiAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcbiAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcbiAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxuICAgIHRvdWNoZWQ6IHRvdWNoZWQsXG4gICAgdmFsaWQ6IHZhbGlkLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB2aXNpdGVkOiB2aXNpdGVkXG4gIH07XG59O1xuXG4vLyAgICAgIFxudmFyIGZpZWxkU3Vic2NyaXB0aW9uSXRlbXMgPSBbJ2FjdGl2ZScsICdkYXRhJywgJ2RpcnR5JywgJ2RpcnR5U2luY2VMYXN0U3VibWl0JywgJ2Vycm9yJywgJ2luaXRpYWwnLCAnaW52YWxpZCcsICdsZW5ndGgnLCAnbW9kaWZpZWQnLCAncHJpc3RpbmUnLCAnc3VibWl0RXJyb3InLCAnc3VibWl0RmFpbGVkJywgJ3N1Ym1pdFN1Y2NlZWRlZCcsICdzdWJtaXR0aW5nJywgJ3RvdWNoZWQnLCAndmFsaWQnLCAndmFsdWUnLCAndmlzaXRlZCddO1xuXG4vLyAgICAgIFxudmFyIHNoYWxsb3dFcXVhbCA9IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnIHx8ICFhIHx8IHR5cGVvZiBiICE9PSAnb2JqZWN0JyB8fCAhYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgYkhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5iaW5kKGIpO1xuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGtleXNBLmxlbmd0aDsgaWR4KyspIHtcbiAgICB2YXIga2V5ID0ga2V5c0FbaWR4XTtcblxuICAgIGlmICghYkhhc093blByb3BlcnR5KGtleSkgfHwgYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vICAgICAgXG5mdW5jdGlvbiBzdWJzY3JpcHRpb25GaWx0ZXIgKGRlc3QsIHNyYywgcHJldmlvdXMsIHN1YnNjcmlwdGlvbiwga2V5cywgc2hhbGxvd0VxdWFsS2V5cykge1xuICB2YXIgZGlmZmVyZW50ID0gZmFsc2U7XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHN1YnNjcmlwdGlvbltrZXldKSB7XG4gICAgICBkZXN0W2tleV0gPSBzcmNba2V5XTtcblxuICAgICAgaWYgKCFwcmV2aW91cyB8fCAofnNoYWxsb3dFcXVhbEtleXMuaW5kZXhPZihrZXkpID8gIXNoYWxsb3dFcXVhbChzcmNba2V5XSwgcHJldmlvdXNba2V5XSkgOiBzcmNba2V5XSAhPT0gcHJldmlvdXNba2V5XSkpIHtcbiAgICAgICAgZGlmZmVyZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGlmZmVyZW50O1xufVxuXG4vLyAgICAgIFxudmFyIHNoYWxsb3dFcXVhbEtleXMgPSBbJ2RhdGEnXTtcbi8qKlxuICogRmlsdGVycyBpdGVtcyBpbiBhIEZpZWxkU3RhdGUgYmFzZWQgb24gYSBGaWVsZFN1YnNjcmlwdGlvblxuICovXG5cbnZhciBmaWx0ZXJGaWVsZFN0YXRlID0gZnVuY3Rpb24gZmlsdGVyRmllbGRTdGF0ZShzdGF0ZSwgcHJldmlvdXNTdGF0ZSwgc3Vic2NyaXB0aW9uLCBmb3JjZSkge1xuICB2YXIgcmVzdWx0ID0ge1xuICAgIGJsdXI6IHN0YXRlLmJsdXIsXG4gICAgY2hhbmdlOiBzdGF0ZS5jaGFuZ2UsXG4gICAgZm9jdXM6IHN0YXRlLmZvY3VzLFxuICAgIG5hbWU6IHN0YXRlLm5hbWVcbiAgfTtcbiAgdmFyIGRpZmZlcmVudCA9IHN1YnNjcmlwdGlvbkZpbHRlcihyZXN1bHQsIHN0YXRlLCBwcmV2aW91c1N0YXRlLCBzdWJzY3JpcHRpb24sIGZpZWxkU3Vic2NyaXB0aW9uSXRlbXMsIHNoYWxsb3dFcXVhbEtleXMpIHx8ICFwcmV2aW91c1N0YXRlO1xuICByZXR1cm4gZGlmZmVyZW50IHx8IGZvcmNlID8gcmVzdWx0IDogdW5kZWZpbmVkO1xufTtcblxuLy8gICAgICBcbnZhciBmb3JtU3Vic2NyaXB0aW9uSXRlbXMgPSBbJ2FjdGl2ZScsICdkaXJ0eScsICdkaXJ0eUZpZWxkcycsICdkaXJ0eVNpbmNlTGFzdFN1Ym1pdCcsICdlcnJvcicsICdlcnJvcnMnLCAnaGFzU3VibWl0RXJyb3JzJywgJ2hhc1ZhbGlkYXRpb25FcnJvcnMnLCAnaW5pdGlhbFZhbHVlcycsICdpbnZhbGlkJywgJ21vZGlmaWVkJywgJ3ByaXN0aW5lJywgJ3N1Ym1pdHRpbmcnLCAnc3VibWl0RXJyb3InLCAnc3VibWl0RXJyb3JzJywgJ3N1Ym1pdEZhaWxlZCcsICdzdWJtaXRTdWNjZWVkZWQnLCAndG91Y2hlZCcsICd2YWxpZCcsICd2YWxpZGF0aW5nJywgJ3ZhbHVlcycsICd2aXNpdGVkJ107XG5cbi8vICAgICAgXG52YXIgc2hhbGxvd0VxdWFsS2V5cyQxID0gWyd0b3VjaGVkJywgJ3Zpc2l0ZWQnXTtcbi8qKlxuICogRmlsdGVycyBpdGVtcyBpbiBhIEZvcm1TdGF0ZSBiYXNlZCBvbiBhIEZvcm1TdWJzY3JpcHRpb25cbiAqL1xuXG52YXIgZmlsdGVyRm9ybVN0YXRlID0gZnVuY3Rpb24gZmlsdGVyRm9ybVN0YXRlKHN0YXRlLCBwcmV2aW91c1N0YXRlLCBzdWJzY3JpcHRpb24sIGZvcmNlKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIGRpZmZlcmVudCA9IHN1YnNjcmlwdGlvbkZpbHRlcihyZXN1bHQsIHN0YXRlLCBwcmV2aW91c1N0YXRlLCBzdWJzY3JpcHRpb24sIGZvcm1TdWJzY3JpcHRpb25JdGVtcywgc2hhbGxvd0VxdWFsS2V5cyQxKSB8fCAhcHJldmlvdXNTdGF0ZTtcbiAgcmV0dXJuIGRpZmZlcmVudCB8fCBmb3JjZSA/IHJlc3VsdCA6IHVuZGVmaW5lZDtcbn07XG5cbi8vICAgICAgXG5cbnZhciBtZW1vaXplID0gZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgbGFzdEFyZ3M7XG4gIHZhciBsYXN0UmVzdWx0O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAoIWxhc3RBcmdzIHx8IGFyZ3MubGVuZ3RoICE9PSBsYXN0QXJncy5sZW5ndGggfHwgYXJncy5zb21lKGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChsYXN0QXJnc1tpbmRleF0sIGFyZyk7XG4gICAgfSkpIHtcbiAgICAgIGxhc3RBcmdzID0gYXJncztcbiAgICAgIGxhc3RSZXN1bHQgPSBmbi5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICB9O1xufTtcblxudmFyIGlzUHJvbWlzZSA9IChmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiAhIW9iaiAmJiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykgJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nO1xufSk7XG5cbnZhciBjb25maWdPcHRpb25zID0gWydkZWJ1ZycsICdpbml0aWFsVmFsdWVzJywgJ2tlZXBEaXJ0eU9uUmVpbml0aWFsaXplJywgJ211dGF0b3JzJywgJ29uU3VibWl0JywgJ3ZhbGlkYXRlJywgJ3ZhbGlkYXRlT25CbHVyJ107XG52YXIgdmVyc2lvbiA9ICc0LjEzLjAnO1xuXG52YXIgdHJpcGxlRXF1YWxzID0gZnVuY3Rpb24gdHJpcGxlRXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGI7XG59O1xuXG52YXIgaGFzQW55RXJyb3IgPSBmdW5jdGlvbiBoYXNBbnlFcnJvcihlcnJvcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycykuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbHVlID0gZXJyb3JzW2tleV07XG5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGhhc0FueUVycm9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcbiAgfSk7XG59O1xuXG52YXIgY29udmVydFRvRXh0ZXJuYWxGb3JtU3RhdGUgPSBmdW5jdGlvbiBjb252ZXJ0VG9FeHRlcm5hbEZvcm1TdGF0ZShfcmVmKSB7XG4gIHZhciBhY3RpdmUgPSBfcmVmLmFjdGl2ZSxcbiAgICAgIGRpcnR5U2luY2VMYXN0U3VibWl0ID0gX3JlZi5kaXJ0eVNpbmNlTGFzdFN1Ym1pdCxcbiAgICAgIGVycm9yID0gX3JlZi5lcnJvcixcbiAgICAgIGVycm9ycyA9IF9yZWYuZXJyb3JzLFxuICAgICAgaW5pdGlhbFZhbHVlcyA9IF9yZWYuaW5pdGlhbFZhbHVlcyxcbiAgICAgIHByaXN0aW5lID0gX3JlZi5wcmlzdGluZSxcbiAgICAgIHN1Ym1pdHRpbmcgPSBfcmVmLnN1Ym1pdHRpbmcsXG4gICAgICBzdWJtaXRGYWlsZWQgPSBfcmVmLnN1Ym1pdEZhaWxlZCxcbiAgICAgIHN1Ym1pdFN1Y2NlZWRlZCA9IF9yZWYuc3VibWl0U3VjY2VlZGVkLFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxuICAgICAgc3VibWl0RXJyb3JzID0gX3JlZi5zdWJtaXRFcnJvcnMsXG4gICAgICB2YWxpZCA9IF9yZWYudmFsaWQsXG4gICAgICB2YWxpZGF0aW5nID0gX3JlZi52YWxpZGF0aW5nLFxuICAgICAgdmFsdWVzID0gX3JlZi52YWx1ZXM7XG4gIHJldHVybiB7XG4gICAgYWN0aXZlOiBhY3RpdmUsXG4gICAgZGlydHk6ICFwcmlzdGluZSxcbiAgICBkaXJ0eVNpbmNlTGFzdFN1Ym1pdDogZGlydHlTaW5jZUxhc3RTdWJtaXQsXG4gICAgZXJyb3I6IGVycm9yLFxuICAgIGVycm9yczogZXJyb3JzLFxuICAgIGhhc1N1Ym1pdEVycm9yczogISEoc3VibWl0RXJyb3IgfHwgc3VibWl0RXJyb3JzICYmIGhhc0FueUVycm9yKHN1Ym1pdEVycm9ycykpLFxuICAgIGhhc1ZhbGlkYXRpb25FcnJvcnM6ICEhKGVycm9yIHx8IGhhc0FueUVycm9yKGVycm9ycykpLFxuICAgIGludmFsaWQ6ICF2YWxpZCxcbiAgICBpbml0aWFsVmFsdWVzOiBpbml0aWFsVmFsdWVzLFxuICAgIHByaXN0aW5lOiBwcmlzdGluZSxcbiAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxuICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxuICAgIHN1Ym1pdFN1Y2NlZWRlZDogc3VibWl0U3VjY2VlZGVkLFxuICAgIHN1Ym1pdEVycm9yOiBzdWJtaXRFcnJvcixcbiAgICBzdWJtaXRFcnJvcnM6IHN1Ym1pdEVycm9ycyxcbiAgICB2YWxpZDogdmFsaWQsXG4gICAgdmFsaWRhdGluZzogdmFsaWRhdGluZyA+IDAsXG4gICAgdmFsdWVzOiB2YWx1ZXNcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIG5vdGlmeVN1YnNjcmliZXIoc3Vic2NyaWJlciwgc3Vic2NyaXB0aW9uLCBzdGF0ZSwgbGFzdFN0YXRlLCBmaWx0ZXIsIGZvcmNlKSB7XG4gIGlmIChmb3JjZSA9PT0gdm9pZCAwKSB7XG4gICAgZm9yY2UgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBub3RpZmljYXRpb24gPSBmaWx0ZXIoc3RhdGUsIGxhc3RTdGF0ZSwgc3Vic2NyaXB0aW9uLCBmb3JjZSk7XG5cbiAgaWYgKG5vdGlmaWNhdGlvbikge1xuICAgIHN1YnNjcmliZXIobm90aWZpY2F0aW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3RpZnkoX3JlZjIsIHN0YXRlLCBsYXN0U3RhdGUsIGZpbHRlcikge1xuICB2YXIgZW50cmllcyA9IF9yZWYyLmVudHJpZXM7XG4gIE9iamVjdC5rZXlzKGVudHJpZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbTnVtYmVyKGtleSldOyAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gZW50cnkuc3Vic2NyaXB0aW9uLFxuICAgICAgICAgIHN1YnNjcmliZXIgPSBlbnRyeS5zdWJzY3JpYmVyO1xuICAgICAgbm90aWZ5U3Vic2NyaWJlcihzdWJzY3JpYmVyLCBzdWJzY3JpcHRpb24sIHN0YXRlLCBsYXN0U3RhdGUsIGZpbHRlcik7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIGNyZWF0ZUZvcm0gPSBmdW5jdGlvbiBjcmVhdGVGb3JtKGNvbmZpZykge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gY29uZmlnIHNwZWNpZmllZCcpO1xuICB9XG5cbiAgdmFyIGRlYnVnID0gY29uZmlnLmRlYnVnLFxuICAgICAgZGVzdHJveU9uVW5yZWdpc3RlciA9IGNvbmZpZy5kZXN0cm95T25VbnJlZ2lzdGVyLFxuICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBjb25maWcua2VlcERpcnR5T25SZWluaXRpYWxpemUsXG4gICAgICBpbml0aWFsVmFsdWVzID0gY29uZmlnLmluaXRpYWxWYWx1ZXMsXG4gICAgICBtdXRhdG9ycyA9IGNvbmZpZy5tdXRhdG9ycyxcbiAgICAgIG9uU3VibWl0ID0gY29uZmlnLm9uU3VibWl0LFxuICAgICAgdmFsaWRhdGUgPSBjb25maWcudmFsaWRhdGUsXG4gICAgICB2YWxpZGF0ZU9uQmx1ciA9IGNvbmZpZy52YWxpZGF0ZU9uQmx1cjtcblxuICBpZiAoIW9uU3VibWl0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBvblN1Ym1pdCBmdW5jdGlvbiBzcGVjaWZpZWQnKTtcbiAgfVxuXG4gIHZhciBzdGF0ZSA9IHtcbiAgICBzdWJzY3JpYmVyczoge1xuICAgICAgaW5kZXg6IDAsXG4gICAgICBlbnRyaWVzOiB7fVxuICAgIH0sXG4gICAgZmllbGRTdWJzY3JpYmVyczoge30sXG4gICAgZmllbGRzOiB7fSxcbiAgICBmb3JtU3RhdGU6IHtcbiAgICAgIGRpcnR5U2luY2VMYXN0U3VibWl0OiBmYWxzZSxcbiAgICAgIGVycm9yczoge30sXG4gICAgICBpbml0aWFsVmFsdWVzOiBpbml0aWFsVmFsdWVzICYmIF9leHRlbmRzKHt9LCBpbml0aWFsVmFsdWVzKSxcbiAgICAgIGludmFsaWQ6IGZhbHNlLFxuICAgICAgcHJpc3RpbmU6IHRydWUsXG4gICAgICBzdWJtaXR0aW5nOiBmYWxzZSxcbiAgICAgIHN1Ym1pdEZhaWxlZDogZmFsc2UsXG4gICAgICBzdWJtaXRTdWNjZWVkZWQ6IGZhbHNlLFxuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW5nOiAwLFxuICAgICAgdmFsdWVzOiBpbml0aWFsVmFsdWVzID8gX2V4dGVuZHMoe30sIGluaXRpYWxWYWx1ZXMpIDoge31cbiAgICB9LFxuICAgIGxhc3RGb3JtU3RhdGU6IHVuZGVmaW5lZFxuICB9O1xuICB2YXIgaW5CYXRjaCA9IGZhbHNlO1xuICB2YXIgdmFsaWRhdGlvblBhdXNlZCA9IGZhbHNlO1xuICB2YXIgdmFsaWRhdGlvbkJsb2NrZWQgPSBmYWxzZTtcbiAgdmFyIG5leHRBc3luY1ZhbGlkYXRpb25LZXkgPSAwO1xuICB2YXIgYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXMgPSB7fTtcblxuICB2YXIgY2xlYXJBc3luY1ZhbGlkYXRpb25Qcm9taXNlID0gZnVuY3Rpb24gY2xlYXJBc3luY1ZhbGlkYXRpb25Qcm9taXNlKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICBkZWxldGUgYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgY2hhbmdlVmFsdWUgPSBmdW5jdGlvbiBjaGFuZ2VWYWx1ZShzdGF0ZSwgbmFtZSwgbXV0YXRlKSB7XG4gICAgdmFyIGJlZm9yZSA9IGdldEluKHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIG5hbWUpO1xuICAgIHZhciBhZnRlciA9IG11dGF0ZShiZWZvcmUpO1xuICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCBuYW1lLCBhZnRlcikgfHwge307XG4gIH07XG5cbiAgdmFyIHJlbmFtZUZpZWxkID0gZnVuY3Rpb24gcmVuYW1lRmllbGQoc3RhdGUsIGZyb20sIHRvKSB7XG4gICAgaWYgKHN0YXRlLmZpZWxkc1tmcm9tXSkge1xuICAgICAgdmFyIF9leHRlbmRzMiwgX2V4dGVuZHMzO1xuXG4gICAgICBzdGF0ZS5maWVsZHMgPSBfZXh0ZW5kcyh7fSwgc3RhdGUuZmllbGRzLCAoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMlt0b10gPSBfZXh0ZW5kcyh7fSwgc3RhdGUuZmllbGRzW2Zyb21dLCB7XG4gICAgICAgIG5hbWU6IHRvLFxuICAgICAgICBsYXN0RmllbGRTdGF0ZTogdW5kZWZpbmVkXG4gICAgICB9KSwgX2V4dGVuZHMyKSk7XG4gICAgICBkZWxldGUgc3RhdGUuZmllbGRzW2Zyb21dO1xuICAgICAgc3RhdGUuZmllbGRTdWJzY3JpYmVycyA9IF9leHRlbmRzKHt9LCBzdGF0ZS5maWVsZFN1YnNjcmliZXJzLCAoX2V4dGVuZHMzID0ge30sIF9leHRlbmRzM1t0b10gPSBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW2Zyb21dLCBfZXh0ZW5kczMpKTtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW2Zyb21dO1xuICAgICAgdmFyIHZhbHVlID0gZ2V0SW4oc3RhdGUuZm9ybVN0YXRlLnZhbHVlcywgZnJvbSk7XG4gICAgICBzdGF0ZS5mb3JtU3RhdGUudmFsdWVzID0gc2V0SW4oc3RhdGUuZm9ybVN0YXRlLnZhbHVlcywgZnJvbSwgdW5kZWZpbmVkKSB8fCB7fTtcbiAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCB0bywgdmFsdWUpO1xuICAgICAgZGVsZXRlIHN0YXRlLmxhc3RGb3JtU3RhdGU7XG4gICAgfVxuICB9OyAvLyBiaW5kIHN0YXRlIHRvIG11dGF0b3JzXG5cblxuICB2YXIgZ2V0TXV0YXRvckFwaSA9IGZ1bmN0aW9uIGdldE11dGF0b3JBcGkoa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICBpZiAobXV0YXRvcnMpIHtcbiAgICAgICAgLy8gXl4gY2F1c2VzIGJyYW5jaCBjb3ZlcmFnZSB3YXJuaW5nLCBidXQgbmVlZGVkIHRvIGFwcGVhc2UgdGhlIEZsb3cgZ29kc1xuICAgICAgICB2YXIgbXV0YXRhYmxlU3RhdGUgPSB7XG4gICAgICAgICAgZm9ybVN0YXRlOiBzdGF0ZS5mb3JtU3RhdGUsXG4gICAgICAgICAgZmllbGRzOiBzdGF0ZS5maWVsZHMsXG4gICAgICAgICAgZmllbGRTdWJzY3JpYmVyczogc3RhdGUuZmllbGRTdWJzY3JpYmVycyxcbiAgICAgICAgICBsYXN0Rm9ybVN0YXRlOiBzdGF0ZS5sYXN0Rm9ybVN0YXRlXG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG11dGF0b3JzW2tleV0oYXJncywgbXV0YXRhYmxlU3RhdGUsIHtcbiAgICAgICAgICBjaGFuZ2VWYWx1ZTogY2hhbmdlVmFsdWUsXG4gICAgICAgICAgZ2V0SW46IGdldEluLFxuICAgICAgICAgIHJlbmFtZUZpZWxkOiByZW5hbWVGaWVsZCxcbiAgICAgICAgICBzZXRJbjogc2V0SW4sXG4gICAgICAgICAgc2hhbGxvd0VxdWFsOiBzaGFsbG93RXF1YWxcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXRlLmZvcm1TdGF0ZSA9IG11dGF0YWJsZVN0YXRlLmZvcm1TdGF0ZTtcbiAgICAgICAgc3RhdGUuZmllbGRzID0gbXV0YXRhYmxlU3RhdGUuZmllbGRzO1xuICAgICAgICBzdGF0ZS5maWVsZFN1YnNjcmliZXJzID0gbXV0YXRhYmxlU3RhdGUuZmllbGRTdWJzY3JpYmVycztcbiAgICAgICAgc3RhdGUubGFzdEZvcm1TdGF0ZSA9IG11dGF0YWJsZVN0YXRlLmxhc3RGb3JtU3RhdGU7XG4gICAgICAgIHJ1blZhbGlkYXRpb24odW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICB2YXIgbXV0YXRvcnNBcGkgPSBtdXRhdG9ycyA/IE9iamVjdC5rZXlzKG11dGF0b3JzKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSBnZXRNdXRhdG9yQXBpKGtleSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pIDoge307XG5cbiAgdmFyIHJ1blJlY29yZExldmVsVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHJ1blJlY29yZExldmVsVmFsaWRhdGlvbihzZXRFcnJvcnMpIHtcbiAgICB2YXIgcHJvbWlzZXMgPSBbXTtcblxuICAgIGlmICh2YWxpZGF0ZSkge1xuICAgICAgdmFyIGVycm9yc09yUHJvbWlzZSA9IHZhbGlkYXRlKF9leHRlbmRzKHt9LCBzdGF0ZS5mb3JtU3RhdGUudmFsdWVzKSk7IC8vIGNsb25lIHRvIGF2b2lkIHdyaXRpbmdcblxuICAgICAgaWYgKGlzUHJvbWlzZShlcnJvcnNPclByb21pc2UpKSB7XG4gICAgICAgIHZhciBhc3luY1ZhbGlkYXRpb25Qcm9taXNlS2V5ID0gbmV4dEFzeW5jVmFsaWRhdGlvbktleSsrO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IGVycm9yc09yUHJvbWlzZS50aGVuKHNldEVycm9ycykudGhlbihjbGVhckFzeW5jVmFsaWRhdGlvblByb21pc2UoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZUtleSkpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgICAgICBhc3luY1ZhbGlkYXRpb25Qcm9taXNlc1thc3luY1ZhbGlkYXRpb25Qcm9taXNlS2V5XSA9IHByb21pc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRFcnJvcnMoZXJyb3JzT3JQcm9taXNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZXM7XG4gIH07XG5cbiAgdmFyIGdldFZhbGlkYXRvcnMgPSBmdW5jdGlvbiBnZXRWYWxpZGF0b3JzKGZpZWxkKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpZWxkLnZhbGlkYXRvcnMpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkge1xuICAgICAgdmFyIHZhbGlkYXRvciA9IGZpZWxkLnZhbGlkYXRvcnNbTnVtYmVyKGluZGV4KV0oKTtcblxuICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICByZXN1bHQucHVzaCh2YWxpZGF0b3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKTtcbiAgfTtcblxuICB2YXIgcnVuRmllbGRMZXZlbFZhbGlkYXRpb24gPSBmdW5jdGlvbiBydW5GaWVsZExldmVsVmFsaWRhdGlvbihmaWVsZCwgc2V0RXJyb3IpIHtcbiAgICB2YXIgcHJvbWlzZXMgPSBbXTtcbiAgICB2YXIgdmFsaWRhdG9ycyA9IGdldFZhbGlkYXRvcnMoZmllbGQpO1xuXG4gICAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgICB2YXIgZXJyb3I7XG4gICAgICB2YWxpZGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKHZhbGlkYXRvcikge1xuICAgICAgICB2YXIgZXJyb3JPclByb21pc2UgPSB2YWxpZGF0b3IoZ2V0SW4oc3RhdGUuZm9ybVN0YXRlLnZhbHVlcywgZmllbGQubmFtZSksIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIHZhbGlkYXRvci5sZW5ndGggPT09IDMgPyBwdWJsaXNoRmllbGRTdGF0ZShzdGF0ZS5mb3JtU3RhdGUsIHN0YXRlLmZpZWxkc1tmaWVsZC5uYW1lXSkgOiB1bmRlZmluZWQpO1xuXG4gICAgICAgIGlmIChlcnJvck9yUHJvbWlzZSAmJiBpc1Byb21pc2UoZXJyb3JPclByb21pc2UpKSB7XG4gICAgICAgICAgdmFyIGFzeW5jVmFsaWRhdGlvblByb21pc2VLZXkgPSBuZXh0QXN5bmNWYWxpZGF0aW9uS2V5Kys7XG4gICAgICAgICAgdmFyIHByb21pc2UgPSBlcnJvck9yUHJvbWlzZS50aGVuKHNldEVycm9yKSAvLyBlcnJvcnMgbXVzdCBiZSByZXNvbHZlZCwgbm90IHJlamVjdGVkXG4gICAgICAgICAgLnRoZW4oY2xlYXJBc3luY1ZhbGlkYXRpb25Qcm9taXNlKGFzeW5jVmFsaWRhdGlvblByb21pc2VLZXkpKTtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgICAgICAgIGFzeW5jVmFsaWRhdGlvblByb21pc2VzW2FzeW5jVmFsaWRhdGlvblByb21pc2VLZXldID0gcHJvbWlzZTtcbiAgICAgICAgfSBlbHNlIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAvLyBmaXJzdCByZWdpc3RlcmVkIHZhbGlkYXRvciB3aW5zXG4gICAgICAgICAgZXJyb3IgPSBlcnJvck9yUHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZXRFcnJvcihlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2VzO1xuICB9O1xuXG4gIHZhciBydW5WYWxpZGF0aW9uID0gZnVuY3Rpb24gcnVuVmFsaWRhdGlvbihmaWVsZENoYW5nZWQsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHZhbGlkYXRpb25QYXVzZWQpIHtcbiAgICAgIHZhbGlkYXRpb25CbG9ja2VkID0gdHJ1ZTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGZpZWxkcyA9IHN0YXRlLmZpZWxkcyxcbiAgICAgICAgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlO1xuXG4gICAgdmFyIHNhZmVGaWVsZHMgPSBfZXh0ZW5kcyh7fSwgZmllbGRzKTtcblxuICAgIHZhciBmaWVsZEtleXMgPSBPYmplY3Qua2V5cyhzYWZlRmllbGRzKTtcblxuICAgIGlmICghdmFsaWRhdGUgJiYgIWZpZWxkS2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBnZXRWYWxpZGF0b3JzKHNhZmVGaWVsZHNba2V5XSkubGVuZ3RoO1xuICAgIH0pKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuOyAvLyBubyB2YWxpZGF0aW9uIHJ1bGVzXG4gICAgfSAvLyBwYXJlIGRvd24gZmllbGQga2V5cyB0byBhY3R1YWxseSB2YWxpZGF0ZVxuXG5cbiAgICB2YXIgbGltaXRlZEZpZWxkTGV2ZWxWYWxpZGF0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoZmllbGRDaGFuZ2VkKSB7XG4gICAgICB2YXIgY2hhbmdlZEZpZWxkID0gc2FmZUZpZWxkc1tmaWVsZENoYW5nZWRdO1xuXG4gICAgICBpZiAoY2hhbmdlZEZpZWxkKSB7XG4gICAgICAgIHZhciB2YWxpZGF0ZUZpZWxkcyA9IGNoYW5nZWRGaWVsZC52YWxpZGF0ZUZpZWxkcztcblxuICAgICAgICBpZiAodmFsaWRhdGVGaWVsZHMpIHtcbiAgICAgICAgICBsaW1pdGVkRmllbGRMZXZlbFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgIGZpZWxkS2V5cyA9IHZhbGlkYXRlRmllbGRzLmxlbmd0aCA/IHZhbGlkYXRlRmllbGRzLmNvbmNhdChmaWVsZENoYW5nZWQpIDogW2ZpZWxkQ2hhbmdlZF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkTGV2ZWxFcnJvcnMgPSB7fTtcbiAgICB2YXIgZmllbGRMZXZlbEVycm9ycyA9IHt9O1xuICAgIHZhciBwcm9taXNlcyA9IFtdLmNvbmNhdChydW5SZWNvcmRMZXZlbFZhbGlkYXRpb24oZnVuY3Rpb24gKGVycm9ycykge1xuICAgICAgcmVjb3JkTGV2ZWxFcnJvcnMgPSBlcnJvcnMgfHwge307XG4gICAgfSksIGZpZWxkS2V5cy5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwgbmFtZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5jb25jYXQocnVuRmllbGRMZXZlbFZhbGlkYXRpb24oc2FmZUZpZWxkc1tuYW1lXSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGZpZWxkTGV2ZWxFcnJvcnNbbmFtZV0gPSBlcnJvcjtcbiAgICAgIH0pKTtcbiAgICB9LCBbXSkpO1xuXG4gICAgdmFyIHByb2Nlc3NFcnJvcnMgPSBmdW5jdGlvbiBwcm9jZXNzRXJyb3JzKCkge1xuICAgICAgdmFyIG1lcmdlZCA9IF9leHRlbmRzKHt9LCBsaW1pdGVkRmllbGRMZXZlbFZhbGlkYXRpb24gPyBmb3JtU3RhdGUuZXJyb3JzIDoge30sIHJlY29yZExldmVsRXJyb3JzKTtcblxuICAgICAgdmFyIGZvckVhY2hFcnJvciA9IGZ1bmN0aW9uIGZvckVhY2hFcnJvcihmbikge1xuICAgICAgICBmaWVsZEtleXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIGlmIChmaWVsZHNbbmFtZV0pIHtcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBmaWVsZCBpcyBzdGlsbCByZWdpc3RlcmVkXG4gICAgICAgICAgICAvLyBmaWVsZC1sZXZlbCBlcnJvcnMgdGFrZSBwcmVjZWRlbnQgb3ZlciByZWNvcmQtbGV2ZWwgZXJyb3JzXG4gICAgICAgICAgICB2YXIgcmVjb3JkTGV2ZWxFcnJvciA9IGdldEluKHJlY29yZExldmVsRXJyb3JzLCBuYW1lKTtcbiAgICAgICAgICAgIHZhciBlcnJvckZyb21QYXJlbnQgPSBnZXRJbihtZXJnZWQsIG5hbWUpO1xuICAgICAgICAgICAgdmFyIGhhc0ZpZWxkTGV2ZWxWYWxpZGF0aW9uID0gZ2V0VmFsaWRhdG9ycyhzYWZlRmllbGRzW25hbWVdKS5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZmllbGRMZXZlbEVycm9yID0gZmllbGRMZXZlbEVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIGZuKG5hbWUsIGhhc0ZpZWxkTGV2ZWxWYWxpZGF0aW9uICYmIGZpZWxkTGV2ZWxFcnJvciB8fCB2YWxpZGF0ZSAmJiByZWNvcmRMZXZlbEVycm9yIHx8ICghcmVjb3JkTGV2ZWxFcnJvciAmJiAhbGltaXRlZEZpZWxkTGV2ZWxWYWxpZGF0aW9uID8gZXJyb3JGcm9tUGFyZW50IDogdW5kZWZpbmVkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGZvckVhY2hFcnJvcihmdW5jdGlvbiAobmFtZSwgZXJyb3IpIHtcbiAgICAgICAgbWVyZ2VkID0gc2V0SW4obWVyZ2VkLCBuYW1lLCBlcnJvcikgfHwge307XG4gICAgICB9KTtcbiAgICAgIGZvckVhY2hFcnJvcihmdW5jdGlvbiAobmFtZSwgZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yW0FSUkFZX0VSUk9SXSkge1xuICAgICAgICAgIHZhciBleGlzdGluZyA9IGdldEluKG1lcmdlZCwgbmFtZSk7XG4gICAgICAgICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoZXhpc3RpbmcpO1xuICAgICAgICAgIGNvcHlbQVJSQVlfRVJST1JdID0gZXJyb3JbQVJSQVlfRVJST1JdO1xuICAgICAgICAgIG1lcmdlZCA9IHNldEluKG1lcmdlZCwgbmFtZSwgY29weSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXNoYWxsb3dFcXVhbChmb3JtU3RhdGUuZXJyb3JzLCBtZXJnZWQpKSB7XG4gICAgICAgIGZvcm1TdGF0ZS5lcnJvcnMgPSBtZXJnZWQ7XG4gICAgICB9XG5cbiAgICAgIGZvcm1TdGF0ZS5lcnJvciA9IHJlY29yZExldmVsRXJyb3JzW0ZPUk1fRVJST1JdO1xuICAgIH07IC8vIHByb2Nlc3Mgc3luYyBlcnJvcnNcblxuXG4gICAgcHJvY2Vzc0Vycm9ycygpO1xuXG4gICAgaWYgKHByb21pc2VzLmxlbmd0aCkge1xuICAgICAgLy8gc3luYyBlcnJvcnMgaGF2ZSBiZWVuIHNldC4gbm90aWZ5IGxpc3RlbmVycyB3aGlsZSB3ZSB3YWl0IGZvciBvdGhlcnNcbiAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWxpZGF0aW5nKys7XG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWZ0ZXJQcm9taXNlcyA9IGZ1bmN0aW9uIGFmdGVyUHJvbWlzZXMoKSB7XG4gICAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWxpZGF0aW5nLS07XG4gICAgICAgIHByb2Nlc3NFcnJvcnMoKTtcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihhZnRlclByb21pc2VzLCBhZnRlclByb21pc2VzKTtcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgbm90aWZ5RmllbGRMaXN0ZW5lcnMgPSBmdW5jdGlvbiBub3RpZnlGaWVsZExpc3RlbmVycyhmb3JjZSkge1xuICAgIGlmIChpbkJhdGNoIHx8IHZhbGlkYXRpb25QYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICBmaWVsZFN1YnNjcmliZXJzID0gc3RhdGUuZmllbGRTdWJzY3JpYmVycyxcbiAgICAgICAgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlO1xuXG4gICAgdmFyIHNhZmVGaWVsZHMgPSBfZXh0ZW5kcyh7fSwgZmllbGRzKTtcblxuICAgIE9iamVjdC5rZXlzKHNhZmVGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBmaWVsZCA9IHNhZmVGaWVsZHNbbmFtZV07XG4gICAgICB2YXIgZmllbGRTdGF0ZSA9IHB1Ymxpc2hGaWVsZFN0YXRlKGZvcm1TdGF0ZSwgZmllbGQpO1xuICAgICAgdmFyIGxhc3RGaWVsZFN0YXRlID0gZmllbGQubGFzdEZpZWxkU3RhdGU7XG5cbiAgICAgIGlmICghc2hhbGxvd0VxdWFsKGZpZWxkU3RhdGUsIGxhc3RGaWVsZFN0YXRlKSkge1xuICAgICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAvLyBDdXJpb3VzIGFib3V0IHdoeSBhIGZpZWxkIGlzIGdldHRpbmcgbm90aWZpZWQ/IFVuY29tbWVudCB0aGlzLlxuICAgICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAvLyBjb25zdCBkaWZmS2V5cyA9IE9iamVjdC5rZXlzKGZpZWxkU3RhdGUpLmZpbHRlcihcbiAgICAgICAgLy8gICBrZXkgPT4gZmllbGRTdGF0ZVtrZXldICE9PSAobGFzdEZpZWxkU3RhdGUgJiYgbGFzdEZpZWxkU3RhdGVba2V5XSlcbiAgICAgICAgLy8gKVxuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKFxuICAgICAgICAvLyAgICdub3RpZnlpbmcnLFxuICAgICAgICAvLyAgIGZpZWxkLm5hbWUsXG4gICAgICAgIC8vICAgJ1xcbkZpZWxkIFN0YXRlXFxuJyxcbiAgICAgICAgLy8gICBkaWZmS2V5cy5yZWR1Y2UoXG4gICAgICAgIC8vICAgICAocmVzdWx0LCBrZXkpID0+ICh7IC4uLnJlc3VsdCwgW2tleV06IGZpZWxkU3RhdGVba2V5XSB9KSxcbiAgICAgICAgLy8gICAgIHt9XG4gICAgICAgIC8vICAgKSxcbiAgICAgICAgLy8gICAnXFxuTGFzdCBGaWVsZCBTdGF0ZVxcbicsXG4gICAgICAgIC8vICAgZGlmZktleXMucmVkdWNlKFxuICAgICAgICAvLyAgICAgKHJlc3VsdCwga2V5KSA9PiAoe1xuICAgICAgICAvLyAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgIC8vICAgICAgIFtrZXldOiBsYXN0RmllbGRTdGF0ZSAmJiBsYXN0RmllbGRTdGF0ZVtrZXldXG4gICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgLy8gICAgIHt9XG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyApXG4gICAgICAgIGZpZWxkLmxhc3RGaWVsZFN0YXRlID0gZmllbGRTdGF0ZTtcbiAgICAgICAgdmFyIGZpZWxkU3Vic2NyaWJlciA9IGZpZWxkU3Vic2NyaWJlcnNbbmFtZV07XG5cbiAgICAgICAgaWYgKGZpZWxkU3Vic2NyaWJlcikge1xuICAgICAgICAgIG5vdGlmeShmaWVsZFN1YnNjcmliZXIsIGZpZWxkU3RhdGUsIGxhc3RGaWVsZFN0YXRlLCBmaWx0ZXJGaWVsZFN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHZhciBtYXJrQWxsRmllbGRzVG91Y2hlZCA9IGZ1bmN0aW9uIG1hcmtBbGxGaWVsZHNUb3VjaGVkKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBzdGF0ZS5maWVsZHNba2V5XS50b3VjaGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgaGFzU3luY0Vycm9ycyA9IGZ1bmN0aW9uIGhhc1N5bmNFcnJvcnMoKSB7XG4gICAgcmV0dXJuICEhKHN0YXRlLmZvcm1TdGF0ZS5lcnJvciB8fCBoYXNBbnlFcnJvcihzdGF0ZS5mb3JtU3RhdGUuZXJyb3JzKSk7XG4gIH07XG5cbiAgdmFyIGNhbGN1bGF0ZU5leHRGb3JtU3RhdGUgPSBmdW5jdGlvbiBjYWxjdWxhdGVOZXh0Rm9ybVN0YXRlKCkge1xuICAgIHZhciBmaWVsZHMgPSBzdGF0ZS5maWVsZHMsXG4gICAgICAgIGZvcm1TdGF0ZSA9IHN0YXRlLmZvcm1TdGF0ZSxcbiAgICAgICAgbGFzdEZvcm1TdGF0ZSA9IHN0YXRlLmxhc3RGb3JtU3RhdGU7XG5cbiAgICB2YXIgc2FmZUZpZWxkcyA9IF9leHRlbmRzKHt9LCBmaWVsZHMpO1xuXG4gICAgdmFyIHNhZmVGaWVsZEtleXMgPSBPYmplY3Qua2V5cyhzYWZlRmllbGRzKTsgLy8gY2FsY3VsYXRlIGRpcnR5L3ByaXN0aW5lXG5cbiAgICB2YXIgZm91bmREaXJ0eSA9IGZhbHNlO1xuICAgIHZhciBkaXJ0eUZpZWxkcyA9IHNhZmVGaWVsZEtleXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgdmFyIGRpcnR5ID0gIXNhZmVGaWVsZHNba2V5XS5pc0VxdWFsKGdldEluKGZvcm1TdGF0ZS52YWx1ZXMsIGtleSksIGdldEluKGZvcm1TdGF0ZS5pbml0aWFsVmFsdWVzIHx8IHt9LCBrZXkpKTtcblxuICAgICAgaWYgKGRpcnR5KSB7XG4gICAgICAgIGZvdW5kRGlydHkgPSB0cnVlO1xuICAgICAgICByZXN1bHRba2V5XSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pO1xuICAgIGZvcm1TdGF0ZS5wcmlzdGluZSA9ICFmb3VuZERpcnR5O1xuICAgIGZvcm1TdGF0ZS5kaXJ0eVNpbmNlTGFzdFN1Ym1pdCA9ICEhKGZvcm1TdGF0ZS5sYXN0U3VibWl0dGVkVmFsdWVzICYmICFzYWZlRmllbGRLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICB2YXIgbm9uTnVsbExhc3RTdWJtaXR0ZWRWYWx1ZXMgPSBmb3JtU3RhdGUubGFzdFN1Ym1pdHRlZFZhbHVlcyB8fCB7fTsgLy8gfHwge30gaXMgZm9yIGZsb3csIGJ1dCBjYXVzZXMgYnJhbmNoIGNvdmVyYWdlIGNvbXBsYWludFxuXG4gICAgICByZXR1cm4gc2FmZUZpZWxkc1trZXldLmlzRXF1YWwoZ2V0SW4oZm9ybVN0YXRlLnZhbHVlcywga2V5KSwgZ2V0SW4obm9uTnVsbExhc3RTdWJtaXR0ZWRWYWx1ZXMsIGtleSkpO1xuICAgIH0pKTtcbiAgICBmb3JtU3RhdGUudmFsaWQgPSAhZm9ybVN0YXRlLmVycm9yICYmICFmb3JtU3RhdGUuc3VibWl0RXJyb3IgJiYgIWhhc0FueUVycm9yKGZvcm1TdGF0ZS5lcnJvcnMpICYmICEoZm9ybVN0YXRlLnN1Ym1pdEVycm9ycyAmJiBoYXNBbnlFcnJvcihmb3JtU3RhdGUuc3VibWl0RXJyb3JzKSk7XG4gICAgdmFyIG5leHRGb3JtU3RhdGUgPSBjb252ZXJ0VG9FeHRlcm5hbEZvcm1TdGF0ZShmb3JtU3RhdGUpO1xuXG4gICAgdmFyIF9zYWZlRmllbGRLZXlzJHJlZHVjZSA9IHNhZmVGaWVsZEtleXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgcmVzdWx0Lm1vZGlmaWVkW2tleV0gPSBzYWZlRmllbGRzW2tleV0ubW9kaWZpZWQ7XG4gICAgICByZXN1bHQudG91Y2hlZFtrZXldID0gc2FmZUZpZWxkc1trZXldLnRvdWNoZWQ7XG4gICAgICByZXN1bHQudmlzaXRlZFtrZXldID0gc2FmZUZpZWxkc1trZXldLnZpc2l0ZWQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHtcbiAgICAgIG1vZGlmaWVkOiB7fSxcbiAgICAgIHRvdWNoZWQ6IHt9LFxuICAgICAgdmlzaXRlZDoge31cbiAgICB9KSxcbiAgICAgICAgbW9kaWZpZWQgPSBfc2FmZUZpZWxkS2V5cyRyZWR1Y2UubW9kaWZpZWQsXG4gICAgICAgIHRvdWNoZWQgPSBfc2FmZUZpZWxkS2V5cyRyZWR1Y2UudG91Y2hlZCxcbiAgICAgICAgdmlzaXRlZCA9IF9zYWZlRmllbGRLZXlzJHJlZHVjZS52aXNpdGVkO1xuXG4gICAgbmV4dEZvcm1TdGF0ZS5kaXJ0eUZpZWxkcyA9IGxhc3RGb3JtU3RhdGUgJiYgc2hhbGxvd0VxdWFsKGxhc3RGb3JtU3RhdGUuZGlydHlGaWVsZHMsIGRpcnR5RmllbGRzKSA/IGxhc3RGb3JtU3RhdGUuZGlydHlGaWVsZHMgOiBkaXJ0eUZpZWxkcztcbiAgICBuZXh0Rm9ybVN0YXRlLm1vZGlmaWVkID0gbGFzdEZvcm1TdGF0ZSAmJiBzaGFsbG93RXF1YWwobGFzdEZvcm1TdGF0ZS5tb2RpZmllZCwgbW9kaWZpZWQpID8gbGFzdEZvcm1TdGF0ZS5tb2RpZmllZCA6IG1vZGlmaWVkO1xuICAgIG5leHRGb3JtU3RhdGUudG91Y2hlZCA9IGxhc3RGb3JtU3RhdGUgJiYgc2hhbGxvd0VxdWFsKGxhc3RGb3JtU3RhdGUudG91Y2hlZCwgdG91Y2hlZCkgPyBsYXN0Rm9ybVN0YXRlLnRvdWNoZWQgOiB0b3VjaGVkO1xuICAgIG5leHRGb3JtU3RhdGUudmlzaXRlZCA9IGxhc3RGb3JtU3RhdGUgJiYgc2hhbGxvd0VxdWFsKGxhc3RGb3JtU3RhdGUudmlzaXRlZCwgdmlzaXRlZCkgPyBsYXN0Rm9ybVN0YXRlLnZpc2l0ZWQgOiB2aXNpdGVkO1xuICAgIHJldHVybiBsYXN0Rm9ybVN0YXRlICYmIHNoYWxsb3dFcXVhbChsYXN0Rm9ybVN0YXRlLCBuZXh0Rm9ybVN0YXRlKSA/IGxhc3RGb3JtU3RhdGUgOiBuZXh0Rm9ybVN0YXRlO1xuICB9O1xuXG4gIHZhciBjYWxsRGVidWcgPSBmdW5jdGlvbiBjYWxsRGVidWcoKSB7XG4gICAgcmV0dXJuIGRlYnVnICYmIFwiZGV2ZWxvcG1lbnRcIiAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRlYnVnKGNhbGN1bGF0ZU5leHRGb3JtU3RhdGUoKSwgT2JqZWN0LmtleXMoc3RhdGUuZmllbGRzKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHN0YXRlLmZpZWxkc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSkpO1xuICB9O1xuXG4gIHZhciBub3RpZnlpbmcgPSBmYWxzZTtcbiAgdmFyIHNjaGVkdWxlTm90aWZpY2F0aW9uID0gZmFsc2U7XG5cbiAgdmFyIG5vdGlmeUZvcm1MaXN0ZW5lcnMgPSBmdW5jdGlvbiBub3RpZnlGb3JtTGlzdGVuZXJzKCkge1xuICAgIGlmIChub3RpZnlpbmcpIHtcbiAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm90aWZ5aW5nID0gdHJ1ZTtcbiAgICAgIGNhbGxEZWJ1ZygpO1xuXG4gICAgICBpZiAoIWluQmF0Y2ggJiYgIXZhbGlkYXRpb25QYXVzZWQpIHtcbiAgICAgICAgdmFyIGxhc3RGb3JtU3RhdGUgPSBzdGF0ZS5sYXN0Rm9ybVN0YXRlO1xuICAgICAgICB2YXIgbmV4dEZvcm1TdGF0ZSA9IGNhbGN1bGF0ZU5leHRGb3JtU3RhdGUoKTtcblxuICAgICAgICBpZiAobmV4dEZvcm1TdGF0ZSAhPT0gbGFzdEZvcm1TdGF0ZSkge1xuICAgICAgICAgIHN0YXRlLmxhc3RGb3JtU3RhdGUgPSBuZXh0Rm9ybVN0YXRlO1xuICAgICAgICAgIG5vdGlmeShzdGF0ZS5zdWJzY3JpYmVycywgbmV4dEZvcm1TdGF0ZSwgbGFzdEZvcm1TdGF0ZSwgZmlsdGVyRm9ybVN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub3RpZnlpbmcgPSBmYWxzZTtcblxuICAgICAgaWYgKHNjaGVkdWxlTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uID0gZmFsc2U7XG4gICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIGJlZm9yZVN1Ym1pdCA9IGZ1bmN0aW9uIGJlZm9yZVN1Ym1pdCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc3RhdGUuZmllbGRzKS5maW5kKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gc3RhdGUuZmllbGRzW25hbWVdLmJlZm9yZVN1Ym1pdCAmJiBzdGF0ZS5maWVsZHNbbmFtZV0uYmVmb3JlU3VibWl0KCkgPT09IGZhbHNlO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciBhZnRlclN1Ym1pdCA9IGZ1bmN0aW9uIGFmdGVyU3VibWl0KCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzdGF0ZS5maWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5maWVsZHNbbmFtZV0uYWZ0ZXJTdWJtaXQgJiYgc3RhdGUuZmllbGRzW25hbWVdLmFmdGVyU3VibWl0KCk7XG4gICAgfSk7XG4gIH07IC8vIGdlbmVyYXRlIGluaXRpYWwgZXJyb3JzXG5cblxuICBydW5WYWxpZGF0aW9uKCk7XG4gIHZhciBhcGkgPSB7XG4gICAgYmF0Y2g6IGZ1bmN0aW9uIGJhdGNoKGZuKSB7XG4gICAgICBpbkJhdGNoID0gdHJ1ZTtcbiAgICAgIGZuKCk7XG4gICAgICBpbkJhdGNoID0gZmFsc2U7XG4gICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuICAgIH0sXG4gICAgYmx1cjogZnVuY3Rpb24gYmx1cihuYW1lKSB7XG4gICAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICAgIGZvcm1TdGF0ZSA9IHN0YXRlLmZvcm1TdGF0ZTtcbiAgICAgIHZhciBwcmV2aW91cyA9IGZpZWxkc1tuYW1lXTtcblxuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgIC8vIGNhbiBvbmx5IGJsdXIgcmVnaXN0ZXJlZCBmaWVsZHNcbiAgICAgICAgZGVsZXRlIGZvcm1TdGF0ZS5hY3RpdmU7XG4gICAgICAgIGZpZWxkc1tuYW1lXSA9IF9leHRlbmRzKHt9LCBwcmV2aW91cywge1xuICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgdG91Y2hlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodmFsaWRhdGVPbkJsdXIpIHtcbiAgICAgICAgICBydW5WYWxpZGF0aW9uKG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNoYW5nZTogZnVuY3Rpb24gY2hhbmdlKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICAgIGZvcm1TdGF0ZSA9IHN0YXRlLmZvcm1TdGF0ZTtcblxuICAgICAgaWYgKGdldEluKGZvcm1TdGF0ZS52YWx1ZXMsIG5hbWUpICE9PSB2YWx1ZSkge1xuICAgICAgICBjaGFuZ2VWYWx1ZShzdGF0ZSwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBwcmV2aW91cyA9IGZpZWxkc1tuYW1lXTtcblxuICAgICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgICAvLyBvbmx5IHRyYWNrIG1vZGlmaWVkIGZvciByZWdpc3RlcmVkIGZpZWxkc1xuICAgICAgICAgIGZpZWxkc1tuYW1lXSA9IF9leHRlbmRzKHt9LCBwcmV2aW91cywge1xuICAgICAgICAgICAgbW9kaWZpZWQ6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZU9uQmx1cikge1xuICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJ1blZhbGlkYXRpb24obmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZm9jdXM6IGZ1bmN0aW9uIGZvY3VzKG5hbWUpIHtcbiAgICAgIHZhciBmaWVsZCA9IHN0YXRlLmZpZWxkc1tuYW1lXTtcblxuICAgICAgaWYgKGZpZWxkICYmICFmaWVsZC5hY3RpdmUpIHtcbiAgICAgICAgc3RhdGUuZm9ybVN0YXRlLmFjdGl2ZSA9IG5hbWU7XG4gICAgICAgIGZpZWxkLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGZpZWxkLnZpc2l0ZWQgPSB0cnVlO1xuICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtdXRhdG9yczogbXV0YXRvcnNBcGksXG4gICAgZ2V0RmllbGRTdGF0ZTogZnVuY3Rpb24gZ2V0RmllbGRTdGF0ZShuYW1lKSB7XG4gICAgICB2YXIgZmllbGQgPSBzdGF0ZS5maWVsZHNbbmFtZV07XG4gICAgICByZXR1cm4gZmllbGQgJiYgZmllbGQubGFzdEZpZWxkU3RhdGU7XG4gICAgfSxcbiAgICBnZXRSZWdpc3RlcmVkRmllbGRzOiBmdW5jdGlvbiBnZXRSZWdpc3RlcmVkRmllbGRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHN0YXRlLmZpZWxkcyk7XG4gICAgfSxcbiAgICBnZXRTdGF0ZTogZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gICAgICByZXR1cm4gY2FsY3VsYXRlTmV4dEZvcm1TdGF0ZSgpO1xuICAgIH0sXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZShkYXRhKSB7XG4gICAgICB2YXIgZmllbGRzID0gc3RhdGUuZmllbGRzLFxuICAgICAgICAgIGZvcm1TdGF0ZSA9IHN0YXRlLmZvcm1TdGF0ZTtcblxuICAgICAgdmFyIHNhZmVGaWVsZHMgPSBfZXh0ZW5kcyh7fSwgZmllbGRzKTtcblxuICAgICAgdmFyIHZhbHVlcyA9IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nID8gZGF0YShmb3JtU3RhdGUudmFsdWVzKSA6IGRhdGE7XG5cbiAgICAgIGlmICgha2VlcERpcnR5T25SZWluaXRpYWxpemUpIHtcbiAgICAgICAgZm9ybVN0YXRlLnZhbHVlcyA9IHZhbHVlcztcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmtleXMoc2FmZUZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBmaWVsZCA9IHNhZmVGaWVsZHNba2V5XTtcbiAgICAgICAgZmllbGQubW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgZmllbGQudG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICBmaWVsZC52aXNpdGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplKSB7XG4gICAgICAgICAgdmFyIHByaXN0aW5lID0gZmllbGQuaXNFcXVhbChnZXRJbihmb3JtU3RhdGUudmFsdWVzLCBrZXkpLCBnZXRJbihmb3JtU3RhdGUuaW5pdGlhbFZhbHVlcyB8fCB7fSwga2V5KSk7XG5cbiAgICAgICAgICBpZiAocHJpc3RpbmUpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgdXBkYXRlIHByaXN0aW5lIHZhbHVlc1xuICAgICAgICAgICAgZm9ybVN0YXRlLnZhbHVlcyA9IHNldEluKGZvcm1TdGF0ZS52YWx1ZXMsIGtleSwgZ2V0SW4odmFsdWVzLCBrZXkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9ybVN0YXRlLmluaXRpYWxWYWx1ZXMgPSB2YWx1ZXM7XG4gICAgICBydW5WYWxpZGF0aW9uKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGlzVmFsaWRhdGlvblBhdXNlZDogZnVuY3Rpb24gaXNWYWxpZGF0aW9uUGF1c2VkKCkge1xuICAgICAgcmV0dXJuIHZhbGlkYXRpb25QYXVzZWQ7XG4gICAgfSxcbiAgICBwYXVzZVZhbGlkYXRpb246IGZ1bmN0aW9uIHBhdXNlVmFsaWRhdGlvbigpIHtcbiAgICAgIHZhbGlkYXRpb25QYXVzZWQgPSB0cnVlO1xuICAgIH0sXG4gICAgcmVnaXN0ZXJGaWVsZDogZnVuY3Rpb24gcmVnaXN0ZXJGaWVsZChuYW1lLCBzdWJzY3JpYmVyLCBzdWJzY3JpcHRpb24sIGZpZWxkQ29uZmlnKSB7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uID09PSB2b2lkIDApIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmICghc3RhdGUuZmllbGRTdWJzY3JpYmVyc1tuYW1lXSkge1xuICAgICAgICBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW25hbWVdID0ge1xuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIGVudHJpZXM6IHt9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBpbmRleCA9IHN0YXRlLmZpZWxkU3Vic2NyaWJlcnNbbmFtZV0uaW5kZXgrKzsgLy8gc2F2ZSBmaWVsZCBzdWJzY3JpYmVyIGNhbGxiYWNrXG5cbiAgICAgIHN0YXRlLmZpZWxkU3Vic2NyaWJlcnNbbmFtZV0uZW50cmllc1tpbmRleF0gPSB7XG4gICAgICAgIHN1YnNjcmliZXI6IG1lbW9pemUoc3Vic2NyaWJlciksXG4gICAgICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXN0YXRlLmZpZWxkc1tuYW1lXSkge1xuICAgICAgICAvLyBjcmVhdGUgaW5pdGlhbCBmaWVsZCBzdGF0ZVxuICAgICAgICBzdGF0ZS5maWVsZHNbbmFtZV0gPSB7XG4gICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBhZnRlclN1Ym1pdDogZmllbGRDb25maWcgJiYgZmllbGRDb25maWcuYWZ0ZXJTdWJtaXQsXG4gICAgICAgICAgYmVmb3JlU3VibWl0OiBmaWVsZENvbmZpZyAmJiBmaWVsZENvbmZpZy5iZWZvcmVTdWJtaXQsXG4gICAgICAgICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGkuYmx1cihuYW1lKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gY2hhbmdlKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBpLmNoYW5nZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICBmb2N1czogZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBpLmZvY3VzKG5hbWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaXNFcXVhbDogZmllbGRDb25maWcgJiYgZmllbGRDb25maWcuaXNFcXVhbCB8fCB0cmlwbGVFcXVhbHMsXG4gICAgICAgICAgbGFzdEZpZWxkU3RhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtb2RpZmllZDogZmFsc2UsXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICB0b3VjaGVkOiBmYWxzZSxcbiAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICB2YWxpZGF0ZUZpZWxkczogZmllbGRDb25maWcgJiYgZmllbGRDb25maWcudmFsaWRhdGVGaWVsZHMsXG4gICAgICAgICAgdmFsaWRhdG9yczoge30sXG4gICAgICAgICAgdmlzaXRlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkQ29uZmlnKSB7XG4gICAgICAgIGlmIChmaWVsZENvbmZpZy5nZXRWYWxpZGF0b3IpIHtcbiAgICAgICAgICBzdGF0ZS5maWVsZHNbbmFtZV0udmFsaWRhdG9yc1tpbmRleF0gPSBmaWVsZENvbmZpZy5nZXRWYWxpZGF0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGRDb25maWcuaW5pdGlhbFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdGF0ZS5mb3JtU3RhdGUuaW5pdGlhbFZhbHVlcyA9IHNldEluKHN0YXRlLmZvcm1TdGF0ZS5pbml0aWFsVmFsdWVzIHx8IHt9LCBuYW1lLCBmaWVsZENvbmZpZy5pbml0aWFsVmFsdWUpO1xuICAgICAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCBuYW1lLCBmaWVsZENvbmZpZy5pbml0aWFsVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkQ29uZmlnLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RhdGUuZm9ybVN0YXRlLnZhbHVlcyA9IHNldEluKHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMsIG5hbWUsIGZpZWxkQ29uZmlnLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHNlbnRGaXJzdE5vdGlmaWNhdGlvbiA9IGZhbHNlO1xuXG4gICAgICB2YXIgZmlyc3ROb3RpZmljYXRpb24gPSBmdW5jdGlvbiBmaXJzdE5vdGlmaWNhdGlvbigpIHtcbiAgICAgICAgdmFyIGZpZWxkU3RhdGUgPSBwdWJsaXNoRmllbGRTdGF0ZShzdGF0ZS5mb3JtU3RhdGUsIHN0YXRlLmZpZWxkc1tuYW1lXSk7XG4gICAgICAgIG5vdGlmeVN1YnNjcmliZXIoc3Vic2NyaWJlciwgc3Vic2NyaXB0aW9uLCBmaWVsZFN0YXRlLCB1bmRlZmluZWQsIGZpbHRlckZpZWxkU3RhdGUsIHRydWUpO1xuICAgICAgICBzdGF0ZS5maWVsZHNbbmFtZV0ubGFzdEZpZWxkU3RhdGUgPSBmaWVsZFN0YXRlO1xuICAgICAgICBzZW50Rmlyc3ROb3RpZmljYXRpb24gPSB0cnVlO1xuICAgICAgfTtcblxuICAgICAgcnVuVmFsaWRhdGlvbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuXG4gICAgICAgIGlmICghc2VudEZpcnN0Tm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgZmlyc3ROb3RpZmljYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlbGV0ZSBzdGF0ZS5maWVsZHNbbmFtZV0udmFsaWRhdG9yc1tpbmRleF07XG4gICAgICAgIGRlbGV0ZSBzdGF0ZS5maWVsZFN1YnNjcmliZXJzW25hbWVdLmVudHJpZXNbaW5kZXhdO1xuXG4gICAgICAgIGlmICghT2JqZWN0LmtleXMoc3RhdGUuZmllbGRTdWJzY3JpYmVyc1tuYW1lXS5lbnRyaWVzKS5sZW5ndGgpIHtcbiAgICAgICAgICBkZWxldGUgc3RhdGUuZmllbGRTdWJzY3JpYmVyc1tuYW1lXTtcbiAgICAgICAgICBkZWxldGUgc3RhdGUuZmllbGRzW25hbWVdO1xuICAgICAgICAgIHN0YXRlLmZvcm1TdGF0ZS5lcnJvcnMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUuZXJyb3JzLCBuYW1lLCB1bmRlZmluZWQpIHx8IHt9O1xuXG4gICAgICAgICAgaWYgKGRlc3Ryb3lPblVucmVnaXN0ZXIpIHtcbiAgICAgICAgICAgIHN0YXRlLmZvcm1TdGF0ZS52YWx1ZXMgPSBzZXRJbihzdGF0ZS5mb3JtU3RhdGUudmFsdWVzLCBuYW1lLCB1bmRlZmluZWQsIHRydWUpIHx8IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJ1blZhbGlkYXRpb24odW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbm90aWZ5RmllbGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChpbml0aWFsVmFsdWVzKSB7XG4gICAgICBpZiAoaW5pdGlhbFZhbHVlcyA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBzdGF0ZS5mb3JtU3RhdGUuaW5pdGlhbFZhbHVlcztcbiAgICAgIH1cblxuICAgICAgc3RhdGUuZm9ybVN0YXRlLnN1Ym1pdEZhaWxlZCA9IGZhbHNlO1xuICAgICAgc3RhdGUuZm9ybVN0YXRlLnN1Ym1pdFN1Y2NlZWRlZCA9IGZhbHNlO1xuICAgICAgZGVsZXRlIHN0YXRlLmZvcm1TdGF0ZS5zdWJtaXRFcnJvcjtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5mb3JtU3RhdGUuc3VibWl0RXJyb3JzO1xuICAgICAgZGVsZXRlIHN0YXRlLmZvcm1TdGF0ZS5sYXN0U3VibWl0dGVkVmFsdWVzO1xuICAgICAgYXBpLmluaXRpYWxpemUoaW5pdGlhbFZhbHVlcyB8fCB7fSk7XG4gICAgfSxcbiAgICByZXN1bWVWYWxpZGF0aW9uOiBmdW5jdGlvbiByZXN1bWVWYWxpZGF0aW9uKCkge1xuICAgICAgdmFsaWRhdGlvblBhdXNlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodmFsaWRhdGlvbkJsb2NrZWQpIHtcbiAgICAgICAgLy8gdmFsaWRhdGlvbiB3YXMgYXR0ZW1wdGVkIHdoaWxlIGl0IHdhcyBwYXVzZWQsIHNvIHJ1biBpdCBub3dcbiAgICAgICAgcnVuVmFsaWRhdGlvbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhbGlkYXRpb25CbG9ja2VkID0gZmFsc2U7XG4gICAgfSxcbiAgICBzZXRDb25maWc6IGZ1bmN0aW9uIHNldENvbmZpZyhuYW1lLCB2YWx1ZSkge1xuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIGNhc2UgJ2RlYnVnJzpcbiAgICAgICAgICBkZWJ1ZyA9IHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Rlc3Ryb3lPblVucmVnaXN0ZXInOlxuICAgICAgICAgIGRlc3Ryb3lPblVucmVnaXN0ZXIgPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdpbml0aWFsVmFsdWVzJzpcbiAgICAgICAgICBhcGkuaW5pdGlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAna2VlcERpcnR5T25SZWluaXRpYWxpemUnOlxuICAgICAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbXV0YXRvcnMnOlxuICAgICAgICAgIG11dGF0b3JzID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG11dGF0b3JzQXBpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBtdXRhdG9yc0FwaVtrZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgbXV0YXRvcnNBcGlba2V5XSA9IGdldE11dGF0b3JBcGkoa2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhtdXRhdG9yc0FwaSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBtdXRhdG9yc0FwaVtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnb25TdWJtaXQnOlxuICAgICAgICAgIG9uU3VibWl0ID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAndmFsaWRhdGUnOlxuICAgICAgICAgIHZhbGlkYXRlID0gdmFsdWU7XG4gICAgICAgICAgcnVuVmFsaWRhdGlvbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAndmFsaWRhdGVPbkJsdXInOlxuICAgICAgICAgIHZhbGlkYXRlT25CbHVyID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXNlZCBvcHRpb24gJyArIG5hbWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3VibWl0OiBmdW5jdGlvbiBzdWJtaXQoKSB7XG4gICAgICB2YXIgZm9ybVN0YXRlID0gc3RhdGUuZm9ybVN0YXRlO1xuXG4gICAgICBpZiAoZm9ybVN0YXRlLnN1Ym1pdHRpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzU3luY0Vycm9ycygpKSB7XG4gICAgICAgIG1hcmtBbGxGaWVsZHNUb3VjaGVkKCk7XG4gICAgICAgIHN0YXRlLmZvcm1TdGF0ZS5zdWJtaXRGYWlsZWQgPSB0cnVlO1xuICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7XG4gICAgICAgIHJldHVybjsgLy8gbm8gc3VibWl0IGZvciB5b3UhIVxuICAgICAgfVxuXG4gICAgICB2YXIgYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNLZXlzID0gT2JqZWN0LmtleXMoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXMpO1xuXG4gICAgICBpZiAoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNLZXlzLmxlbmd0aCkge1xuICAgICAgICAvLyBzdGlsbCB3YWl0aW5nIG9uIGFzeW5jIHZhbGlkYXRpb24gdG8gY29tcGxldGUuLi5cbiAgICAgICAgUHJvbWlzZS5hbGwoYXN5bmNWYWxpZGF0aW9uUHJvbWlzZXNLZXlzLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChhc3luY1ZhbGlkYXRpb25Qcm9taXNlc1tOdW1iZXIoa2V5KV0pO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIFtdKSkudGhlbihhcGkuc3VibWl0LCBhcGkuc3VibWl0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmllbGRCbG9ja2luZ1N1Ym1pdCA9IGJlZm9yZVN1Ym1pdCgpO1xuXG4gICAgICBpZiAoZmllbGRCbG9ja2luZ1N1Ym1pdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgICAgIHZhciBjb21wbGV0ZUNhbGxlZCA9IGZhbHNlO1xuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZShlcnJvcnMpIHtcbiAgICAgICAgZm9ybVN0YXRlLnN1Ym1pdHRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAoZXJyb3JzICYmIGhhc0FueUVycm9yKGVycm9ycykpIHtcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0RmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0U3VjY2VlZGVkID0gZmFsc2U7XG4gICAgICAgICAgZm9ybVN0YXRlLnN1Ym1pdEVycm9ycyA9IGVycm9ycztcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0RXJyb3IgPSBlcnJvcnNbRk9STV9FUlJPUl07XG4gICAgICAgICAgbWFya0FsbEZpZWxkc1RvdWNoZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZm9ybVN0YXRlLnN1Ym1pdEVycm9ycztcbiAgICAgICAgICBkZWxldGUgZm9ybVN0YXRlLnN1Ym1pdEVycm9yO1xuICAgICAgICAgIGZvcm1TdGF0ZS5zdWJtaXRGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICBmb3JtU3RhdGUuc3VibWl0U3VjY2VlZGVkID0gdHJ1ZTtcbiAgICAgICAgICBhZnRlclN1Ym1pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbm90aWZ5Rm9ybUxpc3RlbmVycygpO1xuICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpO1xuICAgICAgICBjb21wbGV0ZUNhbGxlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHJlc29sdmVQcm9taXNlKSB7XG4gICAgICAgICAgcmVzb2x2ZVByb21pc2UoZXJyb3JzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgICB9O1xuXG4gICAgICBmb3JtU3RhdGUuc3VibWl0dGluZyA9IHRydWU7XG4gICAgICBmb3JtU3RhdGUuc3VibWl0RmFpbGVkID0gZmFsc2U7XG4gICAgICBmb3JtU3RhdGUuc3VibWl0U3VjY2VlZGVkID0gZmFsc2U7XG4gICAgICBmb3JtU3RhdGUubGFzdFN1Ym1pdHRlZFZhbHVlcyA9IF9leHRlbmRzKHt9LCBmb3JtU3RhdGUudmFsdWVzKTsgLy8gb25TdWJtaXQgaXMgZWl0aGVyIHN5bmMsIGNhbGxiYWNrIG9yIGFzeW5jIHdpdGggYSBQcm9taXNlXG5cbiAgICAgIHZhciByZXN1bHQgPSBvblN1Ym1pdChmb3JtU3RhdGUudmFsdWVzLCBhcGksIGNvbXBsZXRlKTtcblxuICAgICAgaWYgKCFjb21wbGV0ZUNhbGxlZCkge1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgLy8gb25TdWJtaXQgaXMgYXN5bmMgd2l0aCBhIFByb21pc2VcbiAgICAgICAgICBub3RpZnlGb3JtTGlzdGVuZXJzKCk7IC8vIGxldCBldmVyeW9uZSBrbm93IHdlIGFyZSBzdWJtaXR0aW5nXG5cbiAgICAgICAgICBub3RpZnlGaWVsZExpc3RlbmVycygpOyAvLyBub3RpZnkgZmllbGRzIGFsc29cblxuICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbihjb21wbGV0ZSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAob25TdWJtaXQubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAvLyBtdXN0IGJlIGFzeW5jLCBzbyB3ZSBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZVxuICAgICAgICAgIG5vdGlmeUZvcm1MaXN0ZW5lcnMoKTsgLy8gbGV0IGV2ZXJ5b25lIGtub3cgd2UgYXJlIHN1Ym1pdHRpbmdcblxuICAgICAgICAgIG5vdGlmeUZpZWxkTGlzdGVuZXJzKCk7IC8vIG5vdGlmeSBmaWVsZHMgYWxzb1xuXG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb25TdWJtaXQgaXMgc3luY1xuICAgICAgICAgIGNvbXBsZXRlKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKHN1YnNjcmliZXIsIHN1YnNjcmlwdGlvbikge1xuICAgICAgaWYgKCFzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY2FsbGJhY2sgZ2l2ZW4uJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc3Vic2NyaXB0aW9uIHByb3ZpZGVkLiBXaGF0IHZhbHVlcyBkbyB5b3Ugd2FudCB0byBsaXN0ZW4gdG8/Jyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBtZW1vaXplZCA9IG1lbW9pemUoc3Vic2NyaWJlcik7XG4gICAgICB2YXIgc3Vic2NyaWJlcnMgPSBzdGF0ZS5zdWJzY3JpYmVycyxcbiAgICAgICAgICBsYXN0Rm9ybVN0YXRlID0gc3RhdGUubGFzdEZvcm1TdGF0ZTtcbiAgICAgIHZhciBpbmRleCA9IHN1YnNjcmliZXJzLmluZGV4Kys7XG4gICAgICBzdWJzY3JpYmVycy5lbnRyaWVzW2luZGV4XSA9IHtcbiAgICAgICAgc3Vic2NyaWJlcjogbWVtb2l6ZWQsXG4gICAgICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uXG4gICAgICB9O1xuICAgICAgdmFyIG5leHRGb3JtU3RhdGUgPSBjYWxjdWxhdGVOZXh0Rm9ybVN0YXRlKCk7XG5cbiAgICAgIGlmIChuZXh0Rm9ybVN0YXRlICE9PSBsYXN0Rm9ybVN0YXRlKSB7XG4gICAgICAgIHN0YXRlLmxhc3RGb3JtU3RhdGUgPSBuZXh0Rm9ybVN0YXRlO1xuICAgICAgfVxuXG4gICAgICBub3RpZnlTdWJzY3JpYmVyKG1lbW9pemVkLCBzdWJzY3JpcHRpb24sIG5leHRGb3JtU3RhdGUsIG5leHRGb3JtU3RhdGUsIGZpbHRlckZvcm1TdGF0ZSwgdHJ1ZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWxldGUgc3Vic2NyaWJlcnMuZW50cmllc1tpbmRleF07XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGFwaTtcbn07XG5cbi8vXG5cbmV4cG9ydCB7IEFSUkFZX0VSUk9SLCBGT1JNX0VSUk9SLCBjb25maWdPcHRpb25zLCBjcmVhdGVGb3JtLCBmaWVsZFN1YnNjcmlwdGlvbkl0ZW1zLCBmb3JtU3Vic2NyaXB0aW9uSXRlbXMsIGdldEluLCBzZXRJbiwgdmVyc2lvbiB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZW1pemUoIGZuLCBvcHRpb25zICkge1xuXHR2YXIgc2l6ZSA9IDAsXG5cdFx0bWF4U2l6ZSwgaGVhZCwgdGFpbDtcblxuXHRpZiAoIG9wdGlvbnMgJiYgb3B0aW9ucy5tYXhTaXplICkge1xuXHRcdG1heFNpemUgPSBvcHRpb25zLm1heFNpemU7XG5cdH1cblxuXHRmdW5jdGlvbiBtZW1vaXplZCggLyogLi4uYXJncyAqLyApIHtcblx0XHR2YXIgbm9kZSA9IGhlYWQsXG5cdFx0XHRsZW4gPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdFx0YXJncywgaTtcblxuXHRcdHNlYXJjaENhY2hlOiB3aGlsZSAoIG5vZGUgKSB7XG5cdFx0XHQvLyBQZXJmb3JtIGEgc2hhbGxvdyBlcXVhbGl0eSB0ZXN0IHRvIGNvbmZpcm0gdGhhdCB3aGV0aGVyIHRoZSBub2RlXG5cdFx0XHQvLyB1bmRlciB0ZXN0IGlzIGEgY2FuZGlkYXRlIGZvciB0aGUgYXJndW1lbnRzIHBhc3NlZC4gVHdvIGFycmF5c1xuXHRcdFx0Ly8gYXJlIHNoYWxsb3dseSBlcXVhbCBpZiB0aGVpciBsZW5ndGggbWF0Y2hlcyBhbmQgZWFjaCBlbnRyeSBpc1xuXHRcdFx0Ly8gc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgdHdvIHNldHMuIEF2b2lkIGFic3RyYWN0aW5nIHRvIGFcblx0XHRcdC8vIGZ1bmN0aW9uIHdoaWNoIGNvdWxkIGluY3VyIGFuIGFyZ3VtZW50cyBsZWFraW5nIGRlb3B0aW1pemF0aW9uLlxuXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIG5vZGUgYXJndW1lbnRzIG1hdGNoIGFyZ3VtZW50cyBsZW5ndGhcblx0XHRcdGlmICggbm9kZS5hcmdzLmxlbmd0aCAhPT0gYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dDtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgbm9kZSBhcmd1bWVudHMgbWF0Y2ggYXJndW1lbnRzIHZhbHVlc1xuXHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0aWYgKCBub2RlLmFyZ3NbIGkgXSAhPT0gYXJndW1lbnRzWyBpIF0gKSB7XG5cdFx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dDtcblx0XHRcdFx0XHRjb250aW51ZSBzZWFyY2hDYWNoZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50IHdlIGNhbiBhc3N1bWUgd2UndmUgZm91bmQgYSBtYXRjaFxuXG5cdFx0XHQvLyBTdXJmYWNlIG1hdGNoZWQgbm9kZSB0byBoZWFkIGlmIG5vdCBhbHJlYWR5XG5cdFx0XHRpZiAoIG5vZGUgIT09IGhlYWQgKSB7XG5cdFx0XHRcdC8vIEFzIHRhaWwsIHNoaWZ0IHRvIHByZXZpb3VzLiBNdXN0IG9ubHkgc2hpZnQgaWYgbm90IGFsc29cblx0XHRcdFx0Ly8gaGVhZCwgc2luY2UgaWYgYm90aCBoZWFkIGFuZCB0YWlsLCB0aGVyZSBpcyBubyBwcmV2aW91cy5cblx0XHRcdFx0aWYgKCBub2RlID09PSB0YWlsICkge1xuXHRcdFx0XHRcdHRhaWwgPSBub2RlLnByZXY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGp1c3Qgc2libGluZ3MgdG8gcG9pbnQgdG8gZWFjaCBvdGhlci4gSWYgbm9kZSB3YXMgdGFpbCxcblx0XHRcdFx0Ly8gdGhpcyBhbHNvIGhhbmRsZXMgbmV3IHRhaWwncyBlbXB0eSBgbmV4dGAgYXNzaWdubWVudC5cblx0XHRcdFx0bm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQ7XG5cdFx0XHRcdGlmICggbm9kZS5uZXh0ICkge1xuXHRcdFx0XHRcdG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bm9kZS5uZXh0ID0gaGVhZDtcblx0XHRcdFx0bm9kZS5wcmV2ID0gbnVsbDtcblx0XHRcdFx0aGVhZC5wcmV2ID0gbm9kZTtcblx0XHRcdFx0aGVhZCA9IG5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBpbW1lZGlhdGVseVxuXHRcdFx0cmV0dXJuIG5vZGUudmFsO1xuXHRcdH1cblxuXHRcdC8vIE5vIGNhY2hlZCB2YWx1ZSBmb3VuZC4gQ29udGludWUgdG8gaW5zZXJ0aW9uIHBoYXNlOlxuXG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiBhcmd1bWVudHMgKGF2b2lkIGxlYWtpbmcgZGVvcHRpbWl6YXRpb24pXG5cdFx0YXJncyA9IG5ldyBBcnJheSggbGVuICk7XG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdG5vZGUgPSB7XG5cdFx0XHRhcmdzOiBhcmdzLFxuXG5cdFx0XHQvLyBHZW5lcmF0ZSB0aGUgcmVzdWx0IGZyb20gb3JpZ2luYWwgZnVuY3Rpb25cblx0XHRcdHZhbDogZm4uYXBwbHkoIG51bGwsIGFyZ3MgKVxuXHRcdH07XG5cblx0XHQvLyBEb24ndCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgbm9kZSBpcyBhbHJlYWR5IGhlYWQsIHNpbmNlIGl0IHdvdWxkXG5cdFx0Ly8gaGF2ZSBiZWVuIHJldHVybmVkIGFib3ZlIGFscmVhZHkgaWYgaXQgd2FzXG5cblx0XHQvLyBTaGlmdCBleGlzdGluZyBoZWFkIGRvd24gbGlzdFxuXHRcdGlmICggaGVhZCApIHtcblx0XHRcdGhlYWQucHJldiA9IG5vZGU7XG5cdFx0XHRub2RlLm5leHQgPSBoZWFkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJZiBubyBoZWFkLCBmb2xsb3dzIHRoYXQgdGhlcmUncyBubyB0YWlsIChhdCBpbml0aWFsIG9yIHJlc2V0KVxuXHRcdFx0dGFpbCA9IG5vZGU7XG5cdFx0fVxuXG5cdFx0Ly8gVHJpbSB0YWlsIGlmIHdlJ3JlIHJlYWNoZWQgbWF4IHNpemUgYW5kIGFyZSBwZW5kaW5nIGNhY2hlIGluc2VydGlvblxuXHRcdGlmICggc2l6ZSA9PT0gbWF4U2l6ZSApIHtcblx0XHRcdHRhaWwgPSB0YWlsLnByZXY7XG5cdFx0XHR0YWlsLm5leHQgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzaXplKys7XG5cdFx0fVxuXG5cdFx0aGVhZCA9IG5vZGU7XG5cblx0XHRyZXR1cm4gbm9kZS52YWw7XG5cdH1cblxuXHRtZW1vaXplZC5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXHRcdGhlYWQgPSBudWxsO1xuXHRcdHRhaWwgPSBudWxsO1xuXHRcdHNpemUgPSAwO1xuXHR9O1xuXG5cdGlmICggcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JyApIHtcblx0XHQvLyBDYWNoZSBpcyBub3QgZXhwb3NlZCBpbiB0aGUgcHVibGljIEFQSSwgYnV0IHVzZWQgaW4gdGVzdHMgdG8gZW5zdXJlXG5cdFx0Ly8gZXhwZWN0ZWQgbGlzdCBwcm9ncmVzc2lvblxuXHRcdG1lbW9pemVkLmdldENhY2hlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyBoZWFkLCB0YWlsLCBzaXplIF07XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBtZW1vaXplZDtcbn07XG4iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xudmFyIGNoZWNrUHJvcFR5cGVzID0gcmVxdWlyZSgnLi9jaGVja1Byb3BUeXBlcycpO1xuXG52YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSAgKyAnYC4gVGhpcyBpcyBkZXByZWNhdGVkICcgK1xuICAgICAgICAgICAgICAnYW5kIHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcbiAgICAgICAgICAgICAgJ2xpYnJhcnkuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmctZG9udC1jYWxsLXByb3B0eXBlcyAnICsgJ2ZvciBkZXRhaWxzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIVJlYWN0SXMuaXNWYWxpZEVsZW1lbnRUeXBlKHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50IHR5cGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LCBnb3QgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIGFyZ3VtZW50cy4gJyArXG4gICAgICAgICAgICAnQSBjb21tb24gbWlzdGFrZSBpcyB0byB3cml0ZSBvbmVPZih4LCB5LCB6KSBpbnN0ZWFkIG9mIG9uZU9mKFt4LCB5LCB6XSkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMsIGZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3ltYm9sJykge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIFN0cmluZyhwcm9wVmFsdWUpICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChoYXMocHJvcFZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xuICAgICAgICAgICdyZWNlaXZlZCAnICsgZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKGNoZWNrZXIpICsgJyBhdCBpbmRleCAnICsgaSArICcuJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIGlmIChjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbVxuICAgICAgLy8gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXG4gICAgICAgICAgICAnXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xuICAgICAgICAgICAgJ1xcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuOC42XG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcblxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTtcbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8XG4gIC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSk7XG59XG5cbi8qKlxuICogRm9ya2VkIGZyb20gZmJqcy93YXJuaW5nOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZianMvYmxvYi9lNjZiYTIwYWQ1YmU0MzNlYjU0NDIzZjJiMDk3ZDgyOTMyNGQ5ZGU2L3BhY2thZ2VzL2ZianMvc3JjL19fZm9ya3NfXy93YXJuaW5nLmpzXG4gKlxuICogT25seSBjaGFuZ2UgaXMgd2UgdXNlIGNvbnNvbGUud2FybiBpbnN0ZWFkIG9mIGNvbnNvbGUuZXJyb3IsXG4gKiBhbmQgZG8gbm90aGluZyB3aGVuICdjb25zb2xlJyBpcyBub3Qgc3VwcG9ydGVkLlxuICogVGhpcyByZWFsbHkgc2ltcGxpZmllcyB0aGUgY29kZS5cbiAqIC0tLVxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGxvd1ByaW9yaXR5V2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmckMSA9IGxvd1ByaW9yaXR5V2FybmluZztcblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG5cbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xuXG4vLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlO1xuICAgICAgbG93UHJpb3JpdHlXYXJuaW5nJDEoZmFsc2UsICdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBfX0RFVl9fID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJztcblxudmFyIHdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAoX19ERVZfXykge1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMSA/IGxlbiAtIDEgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAxOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDFdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArXG4gICAgICBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfVxuXG4gIHdhcm5pbmcgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMiA/IGxlbiAtIDIgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAyOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDJdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgICAnbWVzc2FnZSBhcmd1bWVudCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBwcmludFdhcm5pbmcuYXBwbHkobnVsbCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbiIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wicmVnZW5lcmF0b3JSdW50aW1lXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcImNvbXBvbmVudHNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1wiZWRpdG9ySG9jc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1wiaGVscGVyc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJob2NzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcImhvb2tzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcImkxOG5cIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1wibW9kZWxcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmFsaWRhdG9yc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJ2YWx1ZU9iamVjdHNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImNvbXBvbmVudHNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImNvbXBvc2VcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImRhdGFcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImVsZW1lbnRcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImhvb2tzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJrZXljb2Rlc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcIndwXCJdW1widXJsXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZlbmRvclwiXVtcImNsYXNzbmFtZXNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJsb2Rhc2hcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJSZWFjdFwiXTsgfSgpKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/assets/dist/eventespresso-editor.ea844dfc2e21ea4396ef.dist.css b/assets/dist/eventespresso-editor.ac44fb7dd7004be16905.dist.css similarity index 99% rename from assets/dist/eventespresso-editor.ea844dfc2e21ea4396ef.dist.css rename to assets/dist/eventespresso-editor.ac44fb7dd7004be16905.dist.css index 4c5103057de..bf7f74ec546 100644 --- a/assets/dist/eventespresso-editor.ea844dfc2e21ea4396ef.dist.css +++ b/assets/dist/eventespresso-editor.ac44fb7dd7004be16905.dist.css @@ -9,4 +9,4 @@ .ee-tickets-list-grid-view{display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:flex-start;margin:var(--ee-margin-smaller) 0 0}.ee-editor-ticket-main{background:var(--ee-background-color);color:var(--ee-default-text-color);display:flex;flex-direction:row;justify-content:space-between;min-height:calc(var(--ee-font-size-default)*12.5);padding:0 0 0 calc(var(--ee-icon-button-size) + 8px);position:relative;overflow:hidden}.ee-editor-ticket-details-wrapper-div{align-items:center;box-sizing:border-box;display:flex;flex-direction:column;font-size:var(--ee-font-size-small);justify-content:flex-start;min-width:calc(var(--ee-font-size-small)*25);padding:var(--ee-padding-smaller) calc(var(--ee-padding-micro)*36) var(--ee-padding-extreme) var(--ee-padding-smaller);text-align:center;width:100%}.ee-editor-ticket-name-heading,.ee-editor-ticket-name-heading .ee-inline-edit-text{color:var(--ee-default-text-color);font-size:var(--ee-font-size-big)!important;font-weight:700!important;line-height:var(--ee-font-size-big)!important;margin:var(--ee-margin-micro) 0 0!important;min-height:var(--ee-font-size-bigger);overflow:hidden;padding:0 0 var(--ee-padding-tiny)!important;text-overflow:ellipsis;width:100%}.ee-editor-ticket-name-heading.ee-long-title,.ee-editor-ticket-name-heading.ee-long-title .ee-inline-edit-text{font-size:var(--ee-font-size-default)!important;line-height:var(--ee-font-size-default)!important}.ee-editor-ticket-desc-div{color:var(--ee-default-text-color-high-contrast);font-size:var(--ee-font-size-smaller);margin:0 0 var(--ee-margin-tiny);width:90%}.ee-editor-ticket-desc-div.ee-ticket-desc-excerpt span{display:block;max-height:var(--ee-font-size-huge);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ee-editor-ticket-desc-div.ee-ticket-desc-excerpt textarea{max-height:unset}.ee-ticket-price,.ee-ticket-price .ee-inline-edit-text{color:var(--ee-default-text-color-low-contrast)!important;font-size:var(--ee-font-size-big)!important;font-weight:700!important;line-height:var(--ee-font-size-big)!important;margin:0!important;padding:0 0 var(--ee-padding-tiny)!important;text-align:center}.ee-editor-ticket-details-sold-rsrvd-qty-div{bottom:var(--ee-padding-micro);margin-left:calc(var(--ee-margin-tiny)*-1);position:absolute;z-index:10}.ee-editor-ticket-details-sold-rsrvd-qty-div .ticket-registrants-label{margin-left:calc(var(--ee-margin-micro)*-1)}.ee-tickets-list-grid-view .ee-editor-ticket-actions-menu{flex-direction:column;position:absolute;left:var(--ee-padding-micro);top:var(--ee-padding-micro)}@media only screen and (max-width:1280px){.ee-tickets-list-grid-view{flex-direction:column;justify-content:center}}@media screen and (max-width:600px){.ee-editor-ticket-details-wrapper-div{font-size:var(--ee-font-size-smaller);min-width:calc(var(--ee-font-size-default)*21.25)}.ee-editor-ticket-name-heading,.ee-editor-ticket-name-heading .ee-inline-edit-text{font-size:var(--ee-font-size-default)!important;line-height:var(--ee-font-size-default)!important}.ee-editor-ticket-name-heading.ee-long-title,.ee-editor-ticket-name-heading.ee-long-title .ee-inline-edit-text{font-size:var(--ee-font-size-small)!important;line-height:var(--ee-font-size-small)!important}.ee-editor-ticket-desc-div{font-size:var(--ee-font-size-tiny)}}@media only screen and (max-width:480px){.ee-editor-ticket-main{flex-direction:column;justify-content:center;padding:0;width:100%}.ee-editor-ticket-details-wrapper-div{min-width:unset;padding:var(--ee-padding-tiny) var(--ee-padding-tiny) var(--ee-padding-smaller) var(--ee-padding-default)}.ee-editor-ticket-name-heading{max-height:unset}.ee-editor-ticket-desc-div{margin-top:var(--ee-margin-smaller)}.ee-editor-ticket-details-sold-rsrvd-qty-div{bottom:unset;position:relative}} .ee-tickets-list-list-view{font-size:var(--ee-font-size-default);font-weight:400;margin:var(--ee-margin-tiny) 0 var(--ee-margin-small);max-width:100%}.ee-editor-ticket-list-view-div{margin:0 0 1px;border:1px solid var(--ee-color-grey-14)}.ee-tickets-list-list-view>div:first-of-type{background:none!important;border:none!important}.ee-tickets-list-list-view>div:nth-of-type(2n){background:var(--ee-color-grey-15);border:1px solid var(--ee-color-grey-15)}.ee-tickets-list-list-view>div:hover{background:var(--ee-color-grey-14);border:1px solid var(--ee-color-grey-14)}.ee-editor-ticket-list-items{display:flex;flex-flow:row nowrap}.ee-ticket-list-item{box-sizing:border-box;font-size:var(--ee-font-size-small);line-height:var(--ee-font-size-bigger);height:var(--ee-font-size-extreme);padding:var(--ee-padding-tiny);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ee-tickets-list-list-view>div:first-of-type .ee-ticket-list-item{font-size:var(--ee-font-size-smaller);font-weight:700;line-height:var(--ee-font-size-big);height:auto;padding-bottom:var(--ee-padding-micro)}.ee-editor-ticket-list-items>div:first-of-type{padding:0;width:var(--ee-padding-micro)}.ee-editor-ticket-list-items>div:nth-of-type(2){min-width:20px;text-align:right;width:5%}.ee-editor-ticket-list-items>div:nth-of-type(3){width:25%}.ee-editor-ticket-list-items>div:nth-of-type(4){text-align:right;width:6%}.ee-editor-ticket-list-items>div:nth-of-type(5){width:15%}.ee-editor-ticket-list-items>div:nth-of-type(6),.ee-editor-ticket-list-items>div:nth-of-type(7),.ee-editor-ticket-list-items>div:nth-of-type(8){text-align:right;width:6%}.ee-editor-ticket-list-items>div:nth-of-type(9){text-align:center;width:7.5%}.ee-editor-ticket-list-items>div:nth-of-type(10){position:relative;overflow:visible;text-align:center;width:14%}.ee-ticket-list-item .ee-infinity-sign{font-size:var(--ee-font-size-default);margin-top:calc(var(--ee-margin-micro)*-1)}.ee-ticket-list-item .dashicons{margin:0}.ee-ticket-list-item-label{display:none}.ee-editor-ticket-list-items>div:first-of-type .ee-ticket-list-item-value{display:none}@media only screen and (max-width:1280px){.ee-editor-ticket-list-items{flex-flow:row wrap}}@media only screen and (max-width:480px){.ee-tickets-list-list-view{display:flex;flex-flow:row wrap;justify-content:space-between}.ee-editor-ticket-list-view-div{margin:0 0 var(--ee-margin-default);min-width:calc(var(--ee-font-size-default)*12.5);width:47.5%}.ee-tickets-list-list-view>div:first-of-type{display:none!important}.ee-tickets-list-list-view>div,.ee-tickets-list-list-view>div:hover{background:none!important;border:none}.ee-editor-ticket-list-items{flex-flow:column nowrap;border:1px solid var(--ee-border-color)}.ee-ticket-list-item{line-height:var(--ee-font-size-big);height:auto;overflow:visible;padding:var(--ee-padding-tiny);text-align:left!important;text-overflow:unset;white-space:normal;width:auto!important;word-break:break-word}.ee-ticket-list-item-label{color:var(--ee-default-text-color);display:inline-block;font-size:var(--ee-font-size-smaller);padding:0 var(--ee-padding-tiny) 0 0;text-align:right;width:33%}.ee-ticket-list-item-value{display:inline-block}.ee-editor-ticket-list-items>div:first-of-type .ee-ticket-list-item-value{display:block}.ee-editor-ticket-list-items>div:first-of-type{color:var(--ee-color-white)!important;padding:var(--ee-padding-tiny);width:auto}.ee-editor-ticket-list-items>div:first-of-type .ee-ticket-list-item-label,.ee-editor-ticket-list-items>div:nth-of-type(3){display:none}.ee-tickets-list-list-view .ee-editor-ticket-actions-menu{left:33%;padding-left:var(--ee-padding-tiny);right:unset;top:var(--ee-padding-nano)}.ee-tickets-list-list-view .ee-dropdown-menu-div{left:12%;right:unset}}@media only screen and (max-width:360px){.ee-editor-ticket-list-view-div{min-width:calc(var(--ee-font-size-default)*15);width:100%}.ee-tickets-list-list-view{justify-content:center}} -/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2VkaXRvci5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIvdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIuY3NzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9hY3Rpb25zLW1lbnUvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9ncmlkLXZpZXcvZWRpdG9yLWRhdGUtZW50aXRpZXMtZ3JpZC12aWV3LmNzcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvbGlzdC12aWV3L2VkaXRvci1kYXRlLWVudGl0aWVzLWxpc3Qtdmlldy5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L3ByaWNlLWNhbGN1bGF0b3Ivc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9hY3Rpb25zLW1lbnUvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvZ3JpZC12aWV3L2VkaXRvci10aWNrZXQtZW50aXRpZXMtZ3JpZC12aWV3LmNzcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvbGlzdC12aWV3L2VkaXRvci10aWNrZXQtZW50aXRpZXMtbGlzdC12aWV3LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUMsWUFBWSw0QkFBNEIsbUNBQW1DLDhCQUE4QixXQUFXLG9DQUFvQyxnQ0FBZ0MsbUNBQW1DLGtCQUFrQixrQ0FBa0MsV0FBVyx3Q0FBd0Msc0NBQXNDLGdCQUFnQixtQ0FBbUMsdURBQXVELG1DQUFtQyxnQkFBZ0IsOENBQThDLDhCQUE4Qix3REFBd0QseUNBQXlDLFdBQVcsZUFBZSwrQkFBK0IsUUFBUSxVQUFVLDJDQUEyQyxVQUFVLGtEQUFrRCxpQkFBaUIsc0VBQXNFLGVBQWUscUNBQXFDLGNBQWMsNEJBQTRCLGFBQWEsa0JBQWtCLFlBQVksZ0NBQWdDLGVBQWUsd0JBQXdCLHNDQUFzQyx5Q0FBeUMsc0NBQXNDLHVCQUF1Qix5QkFBeUIsb0JBQW9CLG1CQUFtQixrQ0FBa0MsV0FBVyxTQUFTLDhEQUE4RCxrQkFBa0IsWUFBWSwrQkFBK0IsZ0RBQWdELCtCQUErQixlQUFlLDhFQUE4RSxlQUFlLG1CQUFtQiw4REFBOEQsY0FBYywyQkFBMkIseUJBQXlCLHNCQUFzQixxQkFBcUIsaUJBQWlCLG9EQUFvRCxlQUFlLHlDQUF5QyxZQUFZLGlDQUFpQyxlQUFlLG1CQUFtQiw0RUFBNEUsNkJBQTZCLHlEQUF5RCw0Q0FBNEMsK0NBQStDLFdBQVcscUJBQXFCLGtDQUFrQyxnREFBZ0Qsd0NBQXdDLGtCQUFrQixXQUFXLFVBQVUsdUVBQXVFLHlDQUF5QyxnQ0FBZ0Msd0NBQXdDLHdDQUF3QyxrQkFBa0IseURBQXlELFVBQVUsZ0JBQWdCLDBDQUEwQyx5Q0FBeUMsV0FBVyxlQUFlLDhCQUE4QixRQUFRLFVBQVUsOENBQThDLHlCQUF5Qiw4Q0FBOEMsMkJBQTJCLHlDQUF5Qyx5Q0FBeUMsV0FBVyxlQUFlLDhCQUE4QixRQUFRLFdBQVcsK0RBQStELHlDQUF5QyxXQUFXLGNBQWMsZ0NBQWdDLFNBQVMsV0FBVywrREFBK0QseUNBQXlDLFlBQVksZUFBZSxlQUFlLE1BQU0sWUFBWSx5Q0FBeUMseUNBQXlDLFlBQVksZUFBZSxlQUFlLE1BQU0sWTtBQ0F0eEgsK0JBQStCLGlCQUFpQixtQ0FBbUMsb0RBQW9ELHVEQUF1RCx5REFBeUQsc0NBQXNDLGdCQUFnQixZQUFZLG9DQUFvQyxrRkFBa0Ysa0JBQWtCLGtCQUFrQixzQkFBc0Isa0xBQWtMLGVBQWUsV0FBVywyREFBMkQsdUNBQXVDLGdCQUFnQixzQkFBc0IsNERBQTRELFNBQVMsUUFBUSwrQkFBK0IsK0JBQStCLGtCQUFrQix1RkFBdUYsNEJBQTRCLG9DQUFvQyxpQ0FBaUMsd0RBQXdELHNDQUFzQyxrQkFBa0IseUJBQXlCLFNBQVMsc0JBQXNCLHNGQUFzRixhQUFhLGtCQUFrQixnR0FBZ0csNkJBQTZCLG9DQUFvQyxnQkFBZ0Isa0JBQWtCLCtDQUErQyw2QkFBNkIscUNBQXFDLE1BQU0sVUFBVSxxQkFBcUIscUJBQXFCLGlEQUFpRCxTQUFTLHVEQUF1RCwrQ0FBK0Msa0JBQWtCLFVBQVUsZ0NBQWdDLGdEQUFnRCxnQkFBZ0Isa0NBQWtDLG1FQUFtRSxtQ0FBbUMsZ0JBQWdCLGtDQUFrQyx3REFBd0QsZ0ZBQWdGLGlCQUFpQix1RUFBdUUsbUJBQW1CLGFBQWEscUJBQXFCLHlCQUF5QixxQ0FBcUMsc0dBQXNHLGtCQUFrQixpQkFBaUIsdUJBQXVCLFdBQVcsOERBQThELGlDQUFpQyxpQ0FBaUMsOEJBQThCLFVBQVUsdURBQXVELG9DQUFvQyx3Q0FBd0Msa0NBQWtDLHVEQUF1RCxjQUFjLCtCQUErQixrQkFBa0IscUZBQXFGLDBCQUEwQix1Q0FBdUMsMEJBQTBCLGlDQUFpQyxZQUFZLG9DQUFvQyxVQUFVLGtCQUFrQixzQkFBc0IsV0FBVywrRkFBK0YsVUFBVSx1UEFBdVAsOENBQThDLGlGQUFpRiw2Q0FBNkMsZ0NBQWdDLHNRQUFzUSxtREFBbUQsMENBQTBDLGtGQUFrRixnREFBZ0QsdUNBQXVDLHVDQUF1Qyx5UUFBeVEsc0NBQXNDLGtGQUFrRiwyQ0FBMkMsdUNBQXVDLHNEQUFzRCx5UUFBeVEsaURBQWlELHFGQUFxRiw4Q0FBOEMsdUNBQXVDLDJDQUEyQyxrUkFBa1Isb0RBQW9ELG9DQUFvQyw2REFBNkQsZ0JBQWdCLDRDQUE0QyxxQ0FBcUMsK0RBQStELG1DQUFtQyxxQ0FBcUMsK0RBQStELFVBQVUsK0RBQStELHVCQUF1QixtQkFBbUIsOENBQThDLG1FQUFtRSxrQkFBa0IsdUVBQXVFLDZCQUE2Qix1QkFBdUIsZ0JBQWdCLHVEQUF1RCxzQ0FBc0Msb0NBQW9DLGdDQUFnQyxVQUFVLG9EQUFvRCxXQUFXLGVBQWUsZ0JBQWdCLGtFQUFrRSxtQ0FBbUMsOEZBQThGLHdCQUF3Qix1QkFBdUIsb0NBQW9DLHdDQUF3QywyREFBMkQsaUJBQWlCLFdBQVcsMkRBQTJELDZCQUE2Qiw0REFBNEQsYUFBYSxpQ0FBaUMsVUFBVSxRQUFRLFVBQVUsdUZBQXVGLGFBQWEsa0JBQWtCLHNHQUFzRyxjQUFjLGNBQWMsa0JBQWtCLGlCQUFpQiwwQkFBMEIsbUJBQW1CLG9FQUFvRSxpQkFBaUIsc0ZBQXNGLDRDQUE0QyxxRkFBcUYsY0FBYyw2Q0FBNkMsb0NBQW9DLDhGQUE4RixzQ0FBc0MsV0FBVyx1REFBdUQsNENBQTRDLG9FQUFvRSxpQkFBaUIsVUFBVSxzRkFBc0YseUNBQXlDLFdBQVcseUNBQXlDLDhGQUE4RixtQ0FBbUMsdURBQXVELFdBQVcsdURBQXVELG9DQUFvQyx3Q0FBd0MsNkNBQTZDLHNGQUFzRixvQ0FBb0MsVUFBVSxvRUFBb0UsZUFBZSxVQUFVLGtEO0FDQS8xUyw2QkFBNkIsYUFBYSxtQkFBbUIsdUI7QUNBN0QseUJBQXlCLGFBQWEsbUJBQW1CLDJCQUEyQix1QkFBdUIsb0NBQW9DLHFCQUFxQixzQ0FBc0MsbUNBQW1DLGFBQWEsbUJBQW1CLDhCQUE4QixrREFBa0QscURBQXFELGtCQUFrQixnQkFBZ0Isb0NBQW9DLG1CQUFtQixzQkFBc0IsYUFBYSxzQkFBc0Isb0NBQW9DLDJCQUEyQiw2Q0FBNkMsdUhBQXVILGtCQUFrQixXQUFXLCtFQUErRSxtQ0FBbUMsNENBQTRDLDBCQUEwQiw4Q0FBOEMsbUJBQW1CLG1DQUFtQyxnQkFBZ0IsNkNBQTZDLHVCQUF1QixXQUFXLDJHQUEyRyxnREFBZ0Qsa0RBQWtELHlCQUF5QixtQ0FBbUMsc0NBQXNDLDBEQUEwRCxnQ0FBZ0MsVUFBVSxtREFBbUQsY0FBYyx1Q0FBdUMsZ0JBQWdCLHVEQUF1RCxpQkFBaUIsNkJBQTZCLDhDQUE4Qyx5Q0FBeUMsc0JBQXNCLFdBQVcsZ0NBQWdDLG1DQUFtQywwQkFBMEIscUJBQXFCLHNDQUFzQyw4QkFBOEIsZ0NBQWdDLG9DQUFvQyx3REFBd0QsdUNBQXVDLGtCQUFrQixRQUFRLG1FQUFtRSxtQkFBbUIsMkNBQTJDLDhCQUE4QixrQkFBa0IsV0FBVyxzREFBc0Qsc0JBQXNCLGtCQUFrQixVQUFVLFFBQVEseUVBQXlFLDRDQUE0QywwQ0FBMEMseUJBQXlCLHNCQUFzQix3QkFBd0Isb0NBQW9DLG9DQUFvQyxzQ0FBc0MsZ0JBQWdCLCtFQUErRSxnREFBZ0Qsa0RBQWtELDJHQUEyRyw4Q0FBOEMsZ0RBQWdELHlCQUF5Qix1Q0FBdUMseUNBQXlDLHFCQUFxQixzQkFBc0IsdUJBQXVCLFVBQVUsV0FBVyxvQ0FBb0MsZ0JBQWdCLHVHQUF1RyxzREFBc0QsU0FBUyw2QkFBNkIsaUJBQWlCLHlCQUF5QixvQ0FBb0MsMkNBQTJDLGFBQWEsbUI7QUNBajBILHlCQUF5QixzQ0FBc0MsZ0JBQWdCLHNEQUFzRCxlQUFlLHlEQUF5RCxlQUFlLHlDQUF5QywyQ0FBMkMsMEJBQTBCLHNCQUFzQiw2Q0FBNkMsbUNBQW1DLHlDQUF5QyxtQ0FBbUMsbUNBQW1DLHlDQUF5QywyQkFBMkIsYUFBYSxxQkFBcUIsbUJBQW1CLHNCQUFzQixvQ0FBb0MsdUNBQXVDLG1DQUFtQywrQkFBK0Isa0JBQWtCLG1CQUFtQix1QkFBdUIsZ0JBQWdCLDhEQUE4RCxzQ0FBc0MsZ0JBQWdCLG9DQUFvQyxZQUFZLHVDQUF1Qyw2Q0FBNkMsVUFBVSw4QkFBOEIsOENBQThDLGVBQWUsaUJBQWlCLFNBQVMsOENBQThDLFVBQVUsNEZBQTRGLFVBQVUsMElBQTBJLGlCQUFpQixTQUFTLDhDQUE4QyxrQkFBa0IsV0FBVywrQ0FBK0Msa0JBQWtCLGlCQUFpQixrQkFBa0IsVUFBVSxxQ0FBcUMsc0NBQXNDLDJDQUEyQyw4QkFBOEIsU0FBUyx5QkFBeUIsYUFBYSxzRUFBc0UsYUFBYSxnRUFBZ0UsOEJBQThCLG9DQUFvQywyQkFBMkIsbUJBQW1CLDJDQUEyQyx1QkFBdUIsbUJBQW1CLDBDQUEwQyxVQUFVLHdCQUF3QixzQkFBc0IsZ0NBQWdDLFdBQVcseUJBQXlCLGNBQWMsc0NBQXNDLGdCQUFnQiwrQkFBK0IsT0FBTyxvQ0FBb0Msa0JBQWtCLGdCQUFnQixNQUFNLG1CQUFtQix5QkFBeUIsK0JBQStCLGNBQWMsZ0NBQWdDLE9BQU8sa0JBQWtCLHNCQUFzQix3REFBd0QsOEJBQThCLDRCQUE0QixrQkFBa0IsbUJBQW1CLDZDQUE2QywwQ0FBMEMsa0JBQWtCLDhDQUE4QyxnREFBZ0QsVUFBVSw4Q0FBOEMsZ0RBQWdELFVBQVUsNEZBQTRGLGdEQUFnRCxVQUFVLHdMQUF3TCxVQUFVLDZRQUE2USw0QkFBNEIsK0NBQStDLFVBQVUsNEVBQTRFLCtCQUErQix5QkFBeUIsUUFBUSxtQkFBbUIseUNBQXlDLDJDQUEyQyx1QkFBdUIseUJBQXlCLGFBQWEsbUJBQW1CLDhCQUE4Qiw4QkFBOEIsb0NBQW9DLGlEQUFpRCxZQUFZLDZHQUE2RywwQkFBMEIsWUFBWSwyQkFBMkIsd0JBQXdCLHdDQUF3QyxtQkFBbUIsb0NBQW9DLFlBQVksaUJBQWlCLCtCQUErQiwwQkFBMEIsb0JBQW9CLG1CQUFtQixxQkFBcUIsc0JBQXNCLHlCQUF5QixtQ0FBbUMscUJBQXFCLHNDQUFzQyxxQ0FBcUMsaUJBQWlCLFVBQVUseUJBQXlCLHFCQUFxQiw4REFBOEQsNEJBQTRCLGtCQUFrQiwyQkFBMkIsc0VBQXNFLGNBQWMsNkNBQTZDLHNDQUFzQywrQkFBK0IsV0FBVyxvSEFBb0gsYUFBYSwrQ0FBK0MsU0FBUyxhQUFhLHlDQUF5Qyw4QkFBOEIsK0NBQStDLFdBQVcseUJBQXlCLHdCO0FDQTV1TCw0QkFBNEIsNkJBQTZCLGVBQWUsZ0JBQWdCLHNCQUFzQixtQ0FBbUMsZUFBZSxXQUFXLG1DQUFtQyxZQUFZLHNFQUFzRSxVQUFVLG1DQUFtQyxVQUFVLG1DQUFtQyxnQkFBZ0IsU0FBUyxnSEFBZ0gsb0JBQW9CLCtCQUErQixvQkFBb0IscUNBQXFDLGdCQUFnQix3QkFBd0Isb0VBQW9FLGdCQUFnQix1QkFBdUIsbVFBQW1RLFlBQVksZ0JBQWdCLDhFQUE4RSxzQkFBc0IsNkVBQTZFLHNCQUFzQixvRkFBb0YsNkJBQTZCLGNBQWMsaUJBQWlCLFVBQVUsaUJBQWlCLG1DQUFtQywrQkFBK0Isd0NBQXdDLFdBQVcsY0FBYyxhQUFhLFdBQVcsNEhBQTRILHdCQUF3QixzSEFBc0gseUJBQXlCLHdJQUF3SSxnQkFBZ0IsZ0lBQWdJLG9DQUFvQywwSkFBMEosb0NBQW9DLDBKQUEwSixvQ0FBb0MsMEpBQTBKLG9DQUFvQyxrSUFBa0ksa0NBQWtDLDRKQUE0SixvQ0FBb0MsNEpBQTRKLG9DQUFvQyw0SkFBNEosb0NBQW9DLCtEQUErRCxjQUFjLGVBQWUsZ0VBQWdFLGNBQWMsb0JBQW9CLGlFQUFpRSxjQUFjLGtFQUFrRSxtQkFBbUIsK0VBQStFLG1CQUFtQiwrRUFBK0UsbUJBQW1CLCtFQUErRSxtQkFBbUIsMkRBQTJELFlBQVksd0VBQXdFLG9CQUFvQix3RUFBd0Usb0JBQW9CLHdFQUF3RSxxQkFBcUIsNERBQTRELFlBQVksMkJBQTJCLHNDQUFzQyxnQ0FBZ0MsNEJBQTRCLHVDQUF1QyxpRUFBaUUsbUNBQW1DLGlCQUFpQixRQUFRLGdDQUFnQyxRQUFRLCtCQUErQixZQUFZLGdDQUFnQyxRQUFRLGdDQUFnQyxvQ0FBb0MsNEJBQTRCLDZCQUE2QixrTkFBa04sV0FBVyxpRUFBaUUsc0JBQXNCLHVHQUF1Ryw2Q0FBNkMsbUJBQW1CLGlFQUFpRSxnQkFBZ0Isa0JBQWtCLFVBQVUsbUZBQW1GLFVBQVUseUZBQXlGLFVBQVUseUZBQXlGLFVBQVUseUZBQXlGLFVBQVUsb0lBQW9JLDBCQUEwQiwwR0FBMEcsYUFBYSx5R0FBeUcsZ0JBQWdCLGdCQUFnQiwwQkFBMEIsZ01BQWdNLFlBQVkseUZBQXlGLGlCQUFpQiw4UEFBOFAsb0JBQW9CLHFGQUFxRixtQ0FBbUMsaUJBQWlCLGNBQWMsb0VBQW9FLGFBQWEscUJBQXFCLGtCQUFrQiwySEFBMkgsYUFBYSxTQUFTLFVBQVUsUUFBUSxvRUFBb0UscUJBQXFCLFVBQVUsc0hBQXNILHFCQUFxQixXQUFXLHVCQUF1QiwrQkFBK0IsOEhBQThILHFCQUFxQixlQUFlLFdBQVcsd0NBQXdDLGFBQWEsU0FBUyxTQUFTLFlBQVksZ0JBQWdCLGdJQUFnSSxvQ0FBb0MsMEpBQTBKLHFDQUFxQywwSkFBMEosa0NBQWtDLDBKQUEwSixxQ0FBcUMsaUpBQWlKLHFCQUFxQiwrRUFBK0Usb0NBQW9DLCtJQUErSSxvQ0FBb0MsNkVBQTZFLHFDQUFxQyw2RUFBNkUsa0NBQWtDLDZFQUE2RSxxQ0FBcUMsdXNCQUF1c0IsY0FBYyxnQkFBZ0Isb0NBQW9DLHlGQUF5RixVQUFVLHlGQUF5RixVQUFVLHlGQUF5RixXQUFXLHlDQUF5Qyw0QkFBNEIsU0FBUyxpRUFBaUUsZ0JBQWdCLDhEQUE4RCx1QkFBdUIsd0pBQXdKLFNBQVMsZ0NBQWdDLGdCQUFnQixXQUFXLDJjQUEyYyxTQUFTLFdBQVcseUZBQXlGLFlBQVksOFBBQThQLG9CQUFvQiw0UEFBNFAsb0JBQW9CLG9FQUFvRSxtQkFBbUIsNEhBQTRILHVCQUF1QixvRkFBb0YsZ0JBQWdCLHNIQUFzSCxpQztBQ0F6OVksK0JBQStCLGFBQWEsbUJBQW1CLHVCO0FDQS9ELHdFQUF3RSxvQkFBb0IsMkRBQTJELG9CQUFvQixlO0FDQTNLLDJCQUEyQixhQUFhLG1CQUFtQiwyQkFBMkIsdUJBQXVCLG9DQUFvQyx1QkFBdUIsc0NBQXNDLG1DQUFtQyxhQUFhLG1CQUFtQiw4QkFBOEIsa0RBQWtELHFEQUFxRCxrQkFBa0IsZ0JBQWdCLHNDQUFzQyxtQkFBbUIsc0JBQXNCLGFBQWEsc0JBQXNCLG9DQUFvQywyQkFBMkIsNkNBQTZDLHVIQUF1SCxrQkFBa0IsV0FBVyxtRkFBbUYsbUNBQW1DLDRDQUE0QywwQkFBMEIsOENBQThDLDRDQUE0QyxzQ0FBc0MsZ0JBQWdCLDZDQUE2Qyx1QkFBdUIsV0FBVywrR0FBK0csZ0RBQWdELGtEQUFrRCwyQkFBMkIsaURBQWlELHNDQUFzQyxpQ0FBaUMsVUFBVSx1REFBdUQsY0FBYyxvQ0FBb0MsZ0JBQWdCLHVCQUF1QixtQkFBbUIsMkRBQTJELGlCQUFpQix1REFBdUQsMERBQTBELDRDQUE0QywwQkFBMEIsOENBQThDLG1CQUFtQiw2Q0FBNkMsa0JBQWtCLDZDQUE2QywrQkFBK0IsMkNBQTJDLGtCQUFrQixXQUFXLHVFQUF1RSw0Q0FBNEMsMERBQTBELHNCQUFzQixrQkFBa0IsNkJBQTZCLDRCQUE0QiwwQ0FBMEMsMkJBQTJCLHNCQUFzQix3QkFBd0Isb0NBQW9DLHNDQUFzQyxzQ0FBc0Msa0RBQWtELG1GQUFtRixnREFBZ0Qsa0RBQWtELCtHQUErRyw4Q0FBOEMsZ0RBQWdELDJCQUEyQixvQ0FBb0MseUNBQXlDLHVCQUF1QixzQkFBc0IsdUJBQXVCLFVBQVUsV0FBVyxzQ0FBc0MsZ0JBQWdCLDBHQUEwRywrQkFBK0IsaUJBQWlCLDJCQUEyQixvQ0FBb0MsNkNBQTZDLGFBQWEsbUI7QUNBNXBILDJCQUEyQixzQ0FBc0MsZ0JBQWdCLHNEQUFzRCxlQUFlLGdDQUFnQyxlQUFlLHlDQUF5Qyw2Q0FBNkMsMEJBQTBCLHNCQUFzQiwrQ0FBK0MsbUNBQW1DLHlDQUF5QyxxQ0FBcUMsbUNBQW1DLHlDQUF5Qyw2QkFBNkIsYUFBYSxxQkFBcUIscUJBQXFCLHNCQUFzQixvQ0FBb0MsdUNBQXVDLG1DQUFtQywrQkFBK0IsbUJBQW1CLHVCQUF1QixnQkFBZ0Isa0VBQWtFLHNDQUFzQyxnQkFBZ0Isb0NBQW9DLFlBQVksdUNBQXVDLCtDQUErQyxVQUFVLDhCQUE4QixnREFBZ0QsZUFBZSxpQkFBaUIsU0FBUyxnREFBZ0QsVUFBVSxnREFBZ0QsaUJBQWlCLFNBQVMsZ0RBQWdELFVBQVUsZ0pBQWdKLGlCQUFpQixTQUFTLGdEQUFnRCxrQkFBa0IsV0FBVyxpREFBaUQsa0JBQWtCLGlCQUFpQixrQkFBa0IsVUFBVSx1Q0FBdUMsc0NBQXNDLDJDQUEyQyxnQ0FBZ0MsU0FBUywyQkFBMkIsYUFBYSwwRUFBMEUsYUFBYSwwQ0FBMEMsNkJBQTZCLG9CQUFvQix5Q0FBeUMsMkJBQTJCLGFBQWEsbUJBQW1CLDhCQUE4QixnQ0FBZ0Msb0NBQW9DLGlEQUFpRCxZQUFZLDZDQUE2Qyx1QkFBdUIsb0VBQW9FLDBCQUEwQixZQUFZLDZCQUE2Qix3QkFBd0Isd0NBQXdDLHFCQUFxQixvQ0FBb0MsWUFBWSxpQkFBaUIsK0JBQStCLDBCQUEwQixvQkFBb0IsbUJBQW1CLHFCQUFxQixzQkFBc0IsMkJBQTJCLG1DQUFtQyxxQkFBcUIsc0NBQXNDLHFDQUFxQyxpQkFBaUIsVUFBVSwyQkFBMkIscUJBQXFCLDBFQUEwRSxjQUFjLCtDQUErQyxzQ0FBc0MsK0JBQStCLFdBQVcsMEhBQTBILGFBQWEsMERBQTBELFNBQVMsb0NBQW9DLFlBQVksMkJBQTJCLGlEQUFpRCxTQUFTLGFBQWEseUNBQXlDLGdDQUFnQywrQ0FBK0MsV0FBVywyQkFBMkIsd0IiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1lZGl0b3IuZWE4NDRkZmMyZTIxZWE0Mzk2ZWYuZGlzdC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZWUtZWRpdG9yLWRpdiAuY29tcG9uZW50cy1wYW5lbHtib3JkZXI6bm9uZX0uZXNwcmVzc28tZWRpdG9yLWxlZ2VuZC1kaXZ7cGFkZGluZy10b3A6dmFyKC0tZWUtcGFkZGluZy10aW55KX0uZXNwcmVzc28tZWRpdG9yLWxlZ2VuZC11bCBsaXtjbGVhcjpib3RoO21hcmdpbi1ib3R0b206dmFyKC0tZWUtbWFyZ2luLXRpbnkpfS5lc3ByZXNzby1lZGl0b3ItbGVnZW5kLXVsIGxpIHB7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtmb250LXN0eWxlOml0YWxpY30uZXNwcmVzc28tZWRpdG9yIC5lZS1mb3JtLXJvdz5kaXZ7d2lkdGg6MTAwJX0uZXNwcmVzc28tZWRpdG9yLmNvbXBvbmVudHMtcGFuZWxfX2JvZHl7YmFja2dyb3VuZDp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItdG9wOm5vbmU7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKX0uZWUtZWRpdG9yLWV2ZW50LWRhdGVzLWFuZC10aWNrZXRzIC5lZS1tZXRhYm94LWhlYWRpbmd7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtmb250LXdlaWdodDo3MDA7dGV4dC1zaGFkb3c6dmFyKC0tZWUtdGV4dC1zaGFkb3ctaW5zZXQtbGlnaHQpfS5lZS1tZXRhYm94LWhlYWRpbmcgLmRhc2hpY29ue21hcmdpbjowIHZhcigtLWVlLW1hcmdpbi10aW55KSAwIHZhcigtLWVlLW1hcmdpbi1taWNybyl9LmVzcHJlc3NvLWVkaXRvci5jb21wb25lbnRzLW1vZGFsX19mcmFtZXtoZWlnaHQ6ODAlO21heC13aWR0aDoxMDAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtMTAlKTt0b3A6MTUlO3dpZHRoOjYwJX0uZXNwcmVzc28tZWRpdG9yLmNvbXBvbmVudHMtbW9kYWxfX2NvbnRlbnR7cGFkZGluZzowfS5lc3ByZXNzby1lZGl0b3IuY29tcG9uZW50cy1tb2RhbF9faGVhZGVyLWhlYWRpbmd7Zm9udC1zaXplOjEuNXJlbX0uZXNwcmVzc28tZWRpdG9yLmNvbXBvbmVudHMtcGFuZWxfX2JvZHk+LmNvbXBvbmVudHMtcGFuZWxfX2JvZHktdGl0bGV7Zm9udC1zaXplOjFyZW19LmVzcHJlc3NvLWVkaXRvciAucmR0T3BlbiAucmR0UGlja2Vye2Rpc3BsYXk6YmxvY2t9LmVzcHJlc3NvLWVkaXRvciAucmR0UGlja2Vye2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoyNTBweDtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbWljcm8pO21hcmdpbi10b3A6MXB4O3otaW5kZXg6OTk5OTkhaW1wb3J0YW50O2JhY2tncm91bmQ6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTEwKTtib3gtc2hhZG93OnZhcigtLWVlLWJveC1zaGFkb3ctc21hbGwpfS5lc3ByZXNzby1lZGl0b3IgdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfS5lc3ByZXNzby1lZGl0b3IgdGh7dGV4dC1hbGlnbjppbmhlcml0fS5lc3ByZXNzby1lZGl0b3IgLnJkdFBpY2tlciB0YWJsZXt3aWR0aDoxMDAlO21hcmdpbjowfS5lc3ByZXNzby1lZGl0b3IgLnJkdFBpY2tlciB0ZCwuZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGh7dGV4dC1hbGlnbjpjZW50ZXI7aGVpZ2h0OjI4cHh9LmVzcHJlc3NvLWVkaXRvciAucmR0UGlja2VyIHRoe2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktMTApfS5lc3ByZXNzby1lZGl0b3IgLnJkdFBpY2tlciB0ZHtjdXJzb3I6cG9pbnRlcn0uZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGgucmR0TmV4dCwuZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGgucmR0UHJldntmb250LXNpemU6MjFweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVzcHJlc3NvLWVkaXRvciAucmR0TmV4dCBzcGFuLC5lc3ByZXNzby1lZGl0b3IgLnJkdFByZXYgc3BhbntkaXNwbGF5OmJsb2NrOy13ZWJraXQtdG91Y2gtY2FsbG91dDpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGh7Y3Vyc29yOnBvaW50ZXJ9LmVzcHJlc3NvLWVkaXRvciAucmR0UGlja2VyIHRoLnJkdFN3aXRjaHt3aWR0aDoxMDBweH0uZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgLmRvd3t3aWR0aDoxNC4yODU3JTtib3JkZXItYm90dG9tOm5vbmV9LmVzcHJlc3NvLWVkaXRvciAucmR0UGlja2VyIHRkLnJkdE5ldywuZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGQucmR0T2xke2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVzcHJlc3NvLWVkaXRvciAucmR0UGlja2VyIHRkLnJkdEFjdGl2ZS5yZHRUb2RheTpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1lZS1jb2xvci1ncmV5LTE1KX0uZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGQucmR0VG9kYXk6YmVmb3Jle2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItbGVmdDo3cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTo3cHggc29saWQgdmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ncmV5LTcpO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTo0cHg7cmlnaHQ6NHB4fS5lc3ByZXNzby1lZGl0b3IgLnJkdFBpY2tlciB0ZC5yZHRBY3RpdmUsLnJkdFBpY2tlciB0ZC5yZHRBY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLXByaW1hcnkpO3RleHQtc2hhZG93OnZhcigtLWVlLXRleHQtc2hhZG93LWluc2V0KX0uZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGQucmR0VG9kYXl7cG9zaXRpb246cmVsYXRpdmV9LmVzcHJlc3NvLWVkaXRvciAudGltZV9waWNrZXJfY29udGFpbmVyIC5tb2RhbF9jb250YWluZXJ7dG9wOi0zOHB4O21pbi13aWR0aDozMDBweH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MTI4MHB4KXsuZXNwcmVzc28tZWRpdG9yLmNvbXBvbmVudHMtbW9kYWxfX2ZyYW1le2hlaWdodDo5MCU7bWF4LXdpZHRoOjEwMCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01JSk7dG9wOjEwJTt3aWR0aDo4MCV9LmVzcHJlc3NvLWVkaXRvciAucGwtMywuZXNwcmVzc28tZWRpdG9yIC5weC0ze3BhZGRpbmctbGVmdDowIWltcG9ydGFudH0uZXNwcmVzc28tZWRpdG9yIC5wci0zLC5lc3ByZXNzby1lZGl0b3IgLnB4LTN7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsuZXNwcmVzc28tZWRpdG9yLmNvbXBvbmVudHMtbW9kYWxfX2ZyYW1le2hlaWdodDo5MCU7bWF4LXdpZHRoOjEwMCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01JSk7dG9wOjEwJTt3aWR0aDo5MCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo2MDBweCkgYW5kIChtaW4td2lkdGg6NDgxcHgpey5lc3ByZXNzby1lZGl0b3IuY29tcG9uZW50cy1tb2RhbF9fZnJhbWV7aGVpZ2h0Ojk1JTttYXgtd2lkdGg6OTUlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtMi41JSk7dG9wOjIuNSU7d2lkdGg6OTUlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTQwcHgpIGFuZCAobWluLXdpZHRoOjQ4MHB4KXsuZXNwcmVzc28tZWRpdG9yLmNvbXBvbmVudHMtbW9kYWxfX2ZyYW1le2hlaWdodDoxMDAlO21heC13aWR0aDoxMDAlO3RyYW5zZm9ybTpub25lO3RvcDowO3dpZHRoOjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVzcHJlc3NvLWVkaXRvci5jb21wb25lbnRzLW1vZGFsX19mcmFtZXtoZWlnaHQ6MTAwJTttYXgtd2lkdGg6MTAwJTt0cmFuc2Zvcm06bm9uZTt0b3A6MDt3aWR0aDoxMDAlfX0iLCIuZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXJ7Ym9yZGVyLXNwYWNpbmc6MDttYXJnaW46MCBhdXRvIHZhcigtLWVlLW1hcmdpbi1iaWcpfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLWRhdGVzLWhlYWRlcntwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbmFubykgdmFyKC0tZWUtcGFkZGluZy1taWNybyl9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tdGlja2V0LWhlYWRlci1kaXZ7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtmb250LXdlaWdodDo3MDA7aGVpZ2h0OjEwMCU7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKSB2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKSB2YXIoLS1lZS1wYWRkaW5nLWRlZmF1bHQpO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS10aWNrZXQtaGVhZGVyLXByaWNlLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLXRpY2tldC1oZWFkZXItc3RhdHVzLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLXRpY2tldC1oZWFkZXItdGl0bGV7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS10aWNrZXQtaGVhZGVyLXRpdGxle2hlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpKjMpO292ZXJmbG93OmhpZGRlbjt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tdGlja2V0LWhlYWRlci1zdGF0dXN7Ym90dG9tOjA7cmlnaHQ6MDtoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW5hbm8pO3Bvc2l0aW9uOmFic29sdXRlfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLXRpY2tldC1oZWFkZXItc3RhdHVzIC5lZS10YW0tdGlja2V0LWhlYWRlci1kYXRle2NvbG9yOnZhcigtLWVlLWNvbG9yLXdoaXRlKTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLW1pY3JvKTtoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLW1pY3JvKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1taWNybyk7cG9zaXRpb246cmVsYXRpdmU7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RvcDotNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS10aWNrZXQtaGVhZGVyLXByaWNlIC5lZS10YW0tdGlja2V0LWhlYWRlci1kYXRle2Rpc3BsYXk6bm9uZTt2aXNpYmlsaXR5OmhpZGRlbn0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS1kYXRlLWlkLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLXRpY2tldC1pZHtjb2xvcjp2YXIoLS1lZS1jb2xvci1ncmV5LTcpO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtbWljcm8pO2ZvbnQtd2VpZ2h0OjQwMDtwb3NpdGlvbjphYnNvbHV0ZX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS1kYXRlLWlke2xlZnQ6dmFyKC0tZWUtcGFkZGluZy1taWNybyk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXRpbnkpO3RvcDowO3dpZHRoOjFweDt3b3JkLXdyYXA6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS10aWNrZXQtaWR7bGVmdDo1MCU7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLXRpbnkpO21hcmdpbi1sZWZ0OmNhbGModmFyKC0tZWUtcGFkZGluZy1kZWZhdWx0KSotMik7dGV4dC1hbGlnbjpjZW50ZXI7dG9wOi0xcmVtO3dpZHRoOnZhcigtLWVlLXBhZGRpbmctZXh0cmVtZSl9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0teWVhci1yb3d7YmFja2dyb3VuZDpub25lO2hlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS15ZWFyLXJvdyAuZWUtdGFtLWRhdGUtbGFiZWx7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtmb250LXdlaWdodDo3MDA7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO2xldHRlci1zcGFjaW5nOnZhcigtLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS1taWNybyk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIHZhcigtLWVlLXBhZGRpbmctc21hbGwpIHZhcigtLWVlLXBhZGRpbmctbmFubykgMDt0ZXh0LWFsaWduOnJpZ2h0fS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLWRhdGUtcm93IC5lZS10YW0tZGF0ZS1sYWJlbC1kaXZ7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWF4LWhlaWdodDp2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1uYW5vKSB2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKSB2YXIoLS1lZS1wYWRkaW5nLW5hbm8pIHZhcigtLWVlLXBhZGRpbmctc21hbGwpO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246cmlnaHQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aWR0aDoxMDAlfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXJ7bWF4LXdpZHRoOnZhcigtLWVlLXBhZGRpbmctaHVnZSk7bWluLXdpZHRoOnZhcigtLWVlLXBhZGRpbmctaHVnZSk7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1taWNybyk7cGFkZGluZzowfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLWRhdGUtbGFiZWwtdGV4dHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLWRhdGUtcm93LXRpY2tldHttYXgtd2lkdGg6NTAlO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1uYW5vKTt0ZXh0LWFsaWduOmNlbnRlcn0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uZWUtdGFtLXRpY2tldC1yZWxhdGlvbi1idXR0b257Ym9yZGVyLXJhZGl1czowIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLXdoaXRlKTtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50O2hlaWdodDp2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpO21hcmdpbjphdXRvO21pbi13aWR0aDp2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpO3BhZGRpbmc6MDt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6MTAwJX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uZWUtdGFtLXRpY2tldC1yZWxhdGlvbi1idXR0b24gLmRhc2hpY29ue2ZsZXg6YXV0b30uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS1hc3NpZ25tZW50cy1lcnJvciwuZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS1hc3NpZ25tZW50cy1lcnJvcjphY3RpdmUsLmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tYXNzaWdubWVudHMtZXJyb3I6Zm9jdXMsLmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tYXNzaWdubWVudHMtZXJyb3I6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1ob3QtcGluaykhaW1wb3J0YW50fS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0tbm8tdGlja2V0LXJlbGF0aW9ue2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xNCkhaW1wb3J0YW50O2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JleS0xNCl9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5jb21wb25lbnRzLWljb24tYnV0dG9uLmVlLXRhbS1uby10aWNrZXQtcmVsYXRpb246YWN0aXZlLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0tbm8tdGlja2V0LXJlbGF0aW9uOmZvY3VzLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0tbm8tdGlja2V0LXJlbGF0aW9uOmhvdmVye2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3ItZ3JleS0xMCkhaW1wb3J0YW50O2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JleS0xMCkhaW1wb3J0YW50fS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0taGFzLXRpY2tldC1yZWxhdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLXdoaXRlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpIWltcG9ydGFudH0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uZWUtdGFtLWhhcy10aWNrZXQtcmVsYXRpb246YWN0aXZlLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0taGFzLXRpY2tldC1yZWxhdGlvbjpmb2N1cywuZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uZWUtdGFtLWhhcy10aWNrZXQtcmVsYXRpb246aG92ZXJ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ibHVlKX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uZWUtdGFtLWFkZC10aWNrZXQtcmVsYXRpb257YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1ncmVlbikhaW1wb3J0YW50O2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3Itd2hpdGUpO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4taGlnaC1jb250cmFzdCkhaW1wb3J0YW50fS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0tYWRkLXRpY2tldC1yZWxhdGlvbjphY3RpdmUsLmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5jb21wb25lbnRzLWljb24tYnV0dG9uLmVlLXRhbS1hZGQtdGlja2V0LXJlbGF0aW9uOmZvY3VzLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0tYWRkLXRpY2tldC1yZWxhdGlvbjpob3Zlcntib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZWVuKSFpbXBvcnRhbnR9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5jb21wb25lbnRzLWljb24tYnV0dG9uLmVlLXRhbS1yZW1vdmUtdGlja2V0LXJlbGF0aW9ue2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLXdoaXRlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWhvdC1waW5rKSFpbXBvcnRhbnR9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5jb21wb25lbnRzLWljb24tYnV0dG9uLmVlLXRhbS1yZW1vdmUtdGlja2V0LXJlbGF0aW9uOmFjdGl2ZSwuZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uZWUtdGFtLXJlbW92ZS10aWNrZXQtcmVsYXRpb246Zm9jdXMsLmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5jb21wb25lbnRzLWljb24tYnV0dG9uLmVlLXRhbS1yZW1vdmUtdGlja2V0LXJlbGF0aW9uOmhvdmVye2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3ItaG90LXBpbmspIWltcG9ydGFudH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc4MnB4KXsuZWUtclRhYmxlIC5lZS1yVGFibGUtYm9keSAuZWUtclRhYmxlLWJvZHktcm93Om50aC1jaGlsZCgybil7YmFja2dyb3VuZDpub25lfS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS10YW0tZGF0ZS1yb3d7bWFyZ2luLWJvdHRvbTp2YXIoLS1lZS1tYXJnaW4tc21hbGwpfS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS10YW0tZGF0ZS1yb3cgLmVlLXRhbS1kYXRlLWxhYmVse2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xMik7bWFyZ2luLWJvdHRvbTp2YXIoLS1lZS1tYXJnaW4tc21hbGwpfS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS1yb3cuZWUtdGFtLXllYXItcm93e3BhZGRpbmc6MH0uZWUtclRhYmxlIC5lZS1yVGFibGUtYm9keSAuZWUtdGFtLXllYXItcm93IC5lZS1yVGFibGUtYm9keS10ZHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50O2hlaWdodDowIWltcG9ydGFudDtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctc21hbGwpIDAgMCFpbXBvcnRhbnR9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0teWVhci1yb3cgLmVlLXRhbS1kYXRlLWxhYmVse3RleHQtYWxpZ246Y2VudGVyfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLWRhdGUtcm93IC5lZS10YW0tZGF0ZS1sYWJlbC1kaXZ7ZmxleC1mbG93OnJvdy1yZXZlcnNlIG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3RleHQtYWxpZ246bGVmdH0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS1kYXRlLWxhYmVsLXRleHR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKTttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tbWljcm8pO3dpZHRoOjUwJX0uZWUtclRhYmxlIC5lZS10YW0tZGF0ZS1yb3cgLmVlLXRhbS1kYXRlLXJvdy10aWNrZXR7ZmxleDp1bnNldDttYXgtd2lkdGg6MTAwJTt0ZXh0LWFsaWduOmxlZnR9LmVlLXJUYWJsZSAuZWUtdGFtLWRhdGUtcm93IC5lZS10YW0tZGF0ZS1yb3ctdGlja2V0Om50aC1jaGlsZCgybil7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1ncmV5LTE0KX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVyIC5lZS10YW0tdGlja2V0LWhlYWRlci1kaXZ7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW5hbm8pIHZhcigtLWVlLXBhZGRpbmctc21hbGwpIDAgMDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjEwMCV9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tdGlja2V0LWhlYWRlci10aXRsZXtoZWlnaHQ6dmFyKC0tZWUtcGFkZGluZy1iaWcpfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLXRpY2tldC1oZWFkZXItc3RhdHVze2JvdHRvbTp1bnNldDtoZWlnaHQ6dmFyKC0tZWUtcGFkZGluZy1leHRyZW1lKTtwYWRkaW5nOjA7dG9wOjFweDt3aWR0aDo1cHh9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tdGlja2V0LWhlYWRlci1zdGF0dXMgLmVlLXRhbS10aWNrZXQtaGVhZGVyLWRhdGV7ZGlzcGxheTpub25lO3Zpc2liaWxpdHk6aGlkZGVufS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtclRhYmxlLWJvZHkgLmVlLXRhbS10aWNrZXQtaGVhZGVyLXByaWNlIC5lZS10YW0tdGlja2V0LWhlYWRlci1kYXRle2NvbG9yOmluaGVyaXQ7ZGlzcGxheTpibG9jaztmb250LXNpemU6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzowO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7dmlzaWJpbGl0eTp2aXNpYmxlfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi1oZWFkZXJ7cGFkZGluZy1sZWZ0OjE1JX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXJUYWJsZS1ib2R5LXRkIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle21pbi13aWR0aDpjYWxjKHZhcigtLWVlLXBhZGRpbmctZXh0cmVtZSkqMil9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5jb21wb25lbnRzLWljb24tYnV0dG9uLmVlLXRhbS10aWNrZXQtcmVsYXRpb24tYnV0dG9ue21hcmdpbjphdXRvIDA7bWF4LXdpZHRoOmNhbGModmFyKC0tZWUtcGFkZGluZy1leHRyZW1lKSoyKX19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo2MDBweCl7LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlciAuZWUtdGFtLXRpY2tldC1oZWFkZXItZGl2e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7d2lkdGg6MTAwJX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS1kYXRlLWxhYmVsLXRleHR7d2lkdGg6Y2FsYyg3NSUgLSB2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpKX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVye3BhZGRpbmctbGVmdDoxMCU7d2lkdGg6NTUlfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtclRhYmxlLWJvZHktdGQgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWV7bWluLXdpZHRoOmNhbGModmFyKC0tZWUtcGFkZGluZy1odWdlKSozKTt3aWR0aDo0NSV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlciAuZWUtdGFtLXRpY2tldC1oZWFkZXItZGl2e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLXRpbnkpO3dpZHRoOjEwMCV9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tZGF0ZS1sYWJlbC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGwpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpKX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXJUYWJsZS1ib2R5LXRkIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle21pbi13aWR0aDp2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpO3dpZHRoOjQwJX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVye3BhZGRpbmctbGVmdDowO3dpZHRoOjYwJTttYXgtd2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tZWUtcGFkZGluZy1leHRyZW1lKSl9fSIsIi5lZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfSIsIi5lZS1kYXRlcy1saXN0LWdyaWQtdmlld3tkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwIDB9LmVlLWVkaXRvci1kYXRlLW1haW57YmFja2dyb3VuZDp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3IpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWluLWhlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSoxMi41KTtwYWRkaW5nOjAgY2FsYyh2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKSArIDhweCkgMCAwO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uZWUtZWRpdG9yLWRhdGUtZGV0YWlscy13cmFwcGVyLWRpdnthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWluLXdpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSoyNSk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXNtYWxsZXIpIHZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy1leHRyZW1lKSBjYWxjKHZhcigtLWVlLXBhZGRpbmctbWljcm8pKjM2KTt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlfS5lZS1lZGl0b3ItZGF0ZS1uYW1lLWhlYWRpbmcsLmVlLWVkaXRvci1kYXRlLW5hbWUtaGVhZGluZyAuZWUtaW5saW5lLWVkaXQtdGV4dHtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnKSFpbXBvcnRhbnQ7Zm9udC13ZWlnaHQ6NzAwIWltcG9ydGFudDtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKSFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50O21pbi1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MCAwIHZhcigtLWVlLXBhZGRpbmctdGlueSkhaW1wb3J0YW50O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2lkdGg6MTAwJX0uZWUtZWRpdG9yLWRhdGUtbmFtZS1oZWFkaW5nLmVlLWxvbmctdGl0bGUsLmVlLWVkaXRvci1kYXRlLW5hbWUtaGVhZGluZy5lZS1sb25nLXRpdGxlIC5lZS1pbmxpbmUtZWRpdC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSFpbXBvcnRhbnR9LmVlLWVkaXRvci1kYXRlLWRlc2MtZGl2e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1leHRyZW1lKS8zKSFpbXBvcnRhbnQ7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1taWNybykgMDt3aWR0aDo5NSV9LmVlLWVkaXRvci1kYXRlLWRlc2MtZGl2LmVlLWRhdGUtZGVzYy1leGNlcnB0PnNwYW57ZGlzcGxheTpibG9jazttYXgtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1leHRyZW1lKTtvdmVyZmxvdzpoaWRkZW59LmVlLWVkaXRvci1kYXRlLWRlc2MtZGl2LmVlLWRhdGUtZGVzYy1leGNlcnB0PnRleHRhcmVhe21heC1oZWlnaHQ6dW5zZXR9LmVlLWVkaXRvci1kYXRlLWxvY2F0aW9uLWRpdntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSFpbXBvcnRhbnQ7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi10aW55KSAwIWltcG9ydGFudDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6MTAwJX0uZWUtZWRpdG9yLWRhdGUtZWRpdC12ZW51ZS1saW5re2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7Zm9udC13ZWlnaHQ6NDAwIWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246bm9uZX0uZWUtZWRpdG9yLWRhdGUtZWRpdC12ZW51ZS1saW5rOmhvdmVye2NvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnkpfS5lZS1lZGl0b3ItZGF0ZS12ZW51ZS1uYW1lLXNwYW57Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7bWFyZ2luOjAgdmFyKC0tZWUtbWFyZ2luLXRpbnkpIDAgdmFyKC0tZWUtbWFyZ2luLW1pY3JvKX0uZWUtZWRpdG9yLWRhdGUtbG9jYXRpb24tZGl2IC5kYXNoaWNvbntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MnB4fS5lZS1lZGl0b3ItZGF0ZS1sb2NhdGlvbi1kaXYgLmVlLW1lbnUtaXRlbS1pY29uLmRhc2hpY29ucy1sb2NhdGlvbnttYXJnaW4tYm90dG9tOi0ycHh9LmVlLWVkaXRvci1kYXRlLWRldGFpbHMtc29sZC1yc3J2ZC1jYXAtZGl2e2JvdHRvbTp2YXIoLS1lZS1tYXJnaW4tbWljcm8pO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTB9LmVlLWRhdGVzLWxpc3QtZ3JpZC12aWV3IC5lZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnV7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjJweDt0b3A6MnB4fS5lZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXNvbGQtcnNydmQtY2FwLWRpdiAuZXZlbnQtZGF0ZS1yZWdpc3RyYW50cy1sYWJlbHttYXJnaW4tbGVmdDpjYWxjKHZhcigtLWVlLW1hcmdpbi1taWNybykqLTEpfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDoxMjgwcHgpey5lZS1kYXRlcy1saXN0LWdyaWQtdmlld3tmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcn19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo2MDBweCl7LmVlLWVkaXRvci1kYXRlLWRldGFpbHMtd3JhcHBlci1kaXZ7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTttaW4td2lkdGg6MzgwcHh9LmVlLWVkaXRvci1kYXRlLW5hbWUtaGVhZGluZywuZWUtZWRpdG9yLWRhdGUtbmFtZS1oZWFkaW5nIC5lZS1pbmxpbmUtZWRpdC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSFpbXBvcnRhbnR9LmVlLWVkaXRvci1kYXRlLW5hbWUtaGVhZGluZy5lZS1sb25nLXRpdGxlLC5lZS1lZGl0b3ItZGF0ZS1uYW1lLWhlYWRpbmcuZWUtbG9uZy10aXRsZSAuZWUtaW5saW5lLWVkaXQtdGV4dHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSFpbXBvcnRhbnR9LmVlLWVkaXRvci1kYXRlLWRlc2MtZGl2e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcil9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVlLWVkaXRvci1kYXRlLW1haW57ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzowO3dpZHRoOjEwMCV9LmVlLWVkaXRvci1kYXRlLWRldGFpbHMtd3JhcHBlci1kaXZ7bWluLXdpZHRoOnVuc2V0O3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy10aW55KSB2YXIoLS1lZS1wYWRkaW5nLWh1Z2UpIHZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy10aW55KX0uZWUtZGF0ZXMtbGlzdC1ncmlkLXZpZXcgLmVlLWVkaXRvci1kYXRlLWFjdGlvbnMtbWVudXt0b3A6OTRweH0uZWUtZWRpdG9yLWRhdGUtbmFtZS1oZWFkaW5ne21heC1oZWlnaHQ6dW5zZXR9LmVlLWVkaXRvci1kYXRlLWRlc2MtZGl2e21hcmdpbi10b3A6dmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpfS5lZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXNvbGQtcnNydmQtY2FwLWRpdntib3R0b206dW5zZXQ7cG9zaXRpb246cmVsYXRpdmV9fSIsIi5lZS1kYXRlcy1saXN0LWxpc3Qtdmlld3tmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO2ZvbnQtd2VpZ2h0OjQwMDttYXJnaW46dmFyKC0tZWUtbWFyZ2luLXRpbnkpIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKTttYXgtd2lkdGg6MTAwJX0uZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcywuZWUtZWRpdG9yLWRhdGUtbGlzdC12aWV3LWRpdnttYXJnaW46MCAwIDFweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktMTQpfS5lZS1kYXRlcy1saXN0LWxpc3Qtdmlldz5kaXY6Zmlyc3Qtb2YtdHlwZXtiYWNrZ3JvdW5kOm5vbmUhaW1wb3J0YW50O2JvcmRlcjpub25lIWltcG9ydGFudH0uZWUtZGF0ZXMtbGlzdC1saXN0LXZpZXc+ZGl2Om50aC1vZi10eXBlKDJuKXtiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWdyZXktMTUpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3ItZ3JleS0xNSl9LmVlLWRhdGVzLWxpc3QtbGlzdC12aWV3PmRpdjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWdyZXktMTQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3ItZ3JleS0xNCl9LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXN7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwfS5lZS1kYXRlLWxpc3QtaXRlbXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcik7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1leHRyZW1lKTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctdGlueSk7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVufS5lZS1kYXRlcy1saXN0LWxpc3Qtdmlldz5kaXY6Zmlyc3Qtb2YtdHlwZSAuZWUtZGF0ZS1saXN0LWl0ZW17Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7aGVpZ2h0OmF1dG87cGFkZGluZy1ib3R0b206dmFyKC0tZWUtcGFkZGluZy1taWNybyl9LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2OmZpcnN0LW9mLXR5cGV7cGFkZGluZzowO3dpZHRoOnZhcigtLWVlLXBhZGRpbmctbWljcm8pfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgyKXttaW4td2lkdGg6MjBweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjUlfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgzKXt3aWR0aDoyNSV9LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDQpLC5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSg1KXt3aWR0aDoxNSV9LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDYpLC5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSg3KSwuZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoOCl7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo2JX0uZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoOSl7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6Ny41JX0uZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoMTApe3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnZpc2libGU7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTQlfS5lZS1kYXRlLWxpc3QtaXRlbSAuZWUtaW5maW5pdHktc2lnbntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1lZS1tYXJnaW4tbWljcm8pKi0xKX0uZWUtZGF0ZS1saXN0LWl0ZW0gLmRhc2hpY29uc3ttYXJnaW46MH0uZWUtZGF0ZS1saXN0LWl0ZW0tbGFiZWx7ZGlzcGxheTpub25lfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpmaXJzdC1vZi10eXBlIC5lZS1kYXRlLWxpc3QtaXRlbS12YWx1ZXtkaXNwbGF5Om5vbmV9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjEyODBweCkgYW5kIChtaW4td2lkdGg6NDgxcHgpey5lZS1lZGl0b3ItZGF0ZS1saXN0LXZpZXctZGl2e21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1ze2ZsZXgtZmxvdzpyb3cgd3JhcH0uZWUtZGF0ZXMtbGlzdC1saXN0LXZpZXc+ZGl2OmZpcnN0LW9mLXR5cGV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZWUtZGF0ZS1saXN0LWl0ZW17aGVpZ2h0OmNhbGModmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcikqMyk7cGFkZGluZzowfS5lZS1kYXRlLWxpc3QtaXRlbSBzcGFue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbWljcm8pO3dpZHRoOjEwMCV9LmVlLWRhdGUtbGlzdC1pdGVtLWxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtmb250LXdlaWdodDo3MDA7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO2xlZnQ6MDtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKTtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmxlZnQ7dG9wOjA7dmVydGljYWwtYWxpZ246dG9wfS5lZS1kYXRlLWxpc3QtaXRlbS12YWx1ZXtib3R0b206dmFyKC0tZWUtcGFkZGluZy1taWNybyk7ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWh1Z2UpO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXMgLmVlLWVkaXRvci1kYXRlLWFjdGlvbnMtbWVudXtib3R0b206dmFyKC0tZWUtcGFkZGluZy10aW55KTtsZWZ0OnZhcigtLWVlLXBhZGRpbmctdGlueSk7cG9zaXRpb246YWJzb2x1dGU7dmVydGljYWwtYWxpZ246dG9wfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpmaXJzdC1vZi10eXBle2hlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpKjYpO3Bvc2l0aW9uOmFic29sdXRlfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgyKXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTE0KTt3aWR0aDoxMCV9LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDMpe2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktMTQpO3dpZHRoOjQwJX0uZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoNCksLmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDUpe2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktMTQpO3dpZHRoOjI1JX0uZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoNiksLmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDcpLC5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSg4KSwuZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoOSl7d2lkdGg6MTUlfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgyKSBzcGFuOmZpcnN0LW9mLXR5cGUsLmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDYpIHNwYW4sLmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDcpIHNwYW4sLmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDgpIHNwYW4sLmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDkpIHNwYW57dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgxMCl7d2lkdGg6NDAlfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgxMCkgLmVlLWVkaXRvci1kYXRlLWFjdGlvbnMtbWVudXtib3R0b206dmFyKC0tZWUtcGFkZGluZy1taWNybyk7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3JpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVlLWRhdGVzLWxpc3QtbGlzdC12aWV3PmRpdjpmaXJzdC1vZi10eXBle2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmVlLWRhdGVzLWxpc3QtbGlzdC12aWV3e2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IHdyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmVlLWVkaXRvci1kYXRlLWxpc3Qtdmlldy1kaXZ7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tZGVmYXVsdCk7bWluLXdpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjEyLjUpO3dpZHRoOjQ3LjUlfS5lZS1kYXRlcy1saXN0LWxpc3Qtdmlldz5kaXYsLmVlLWRhdGVzLWxpc3QtbGlzdC12aWV3PmRpdjpob3ZlciwuZWUtZGF0ZXMtbGlzdC1saXN0LXZpZXc+ZGl2Om50aC1vZi10eXBlKDJuKXtiYWNrZ3JvdW5kOm5vbmUhaW1wb3J0YW50O2JvcmRlcjpub25lfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1ze2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtYm9yZGVyLWNvbG9yKX0uZWUtZGF0ZS1saXN0LWl0ZW17bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7aGVpZ2h0OmF1dG87b3ZlcmZsb3c6dmlzaWJsZTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctdGlueSk7dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudDt0ZXh0LW92ZXJmbG93OnVuc2V0O3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDphdXRvIWltcG9ydGFudDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmVlLWRhdGUtbGlzdC1pdGVtLWxhYmVse2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtwYWRkaW5nOjAgdmFyKC0tZWUtcGFkZGluZy10aW55KSAwIDA7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo1MCV9LmVlLWRhdGUtbGlzdC1pdGVtLXZhbHVle2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lZS1kYXRlLWxpc3QtaXRlbS12YWx1ZSAuZWUtZWRpdG9yLWRhdGUtZGV0YWlscy1yZWctdXJsLWxpbmt7bGVmdDp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpmaXJzdC1vZi10eXBlIC5lZS1kYXRlLWxpc3QtaXRlbS12YWx1ZXtkaXNwbGF5OmJsb2NrfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpmaXJzdC1vZi10eXBle2NvbG9yOnZhcigtLWVlLWNvbG9yLXdoaXRlKSFpbXBvcnRhbnQ7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3dpZHRoOmF1dG99LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2OmZpcnN0LW9mLXR5cGUgLmVlLWRhdGUtbGlzdC1pdGVtLWxhYmVsLC5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgzKXtkaXNwbGF5Om5vbmV9LmVlLWRhdGVzLWxpc3QtbGlzdC12aWV3IC5lZS1kcm9wZG93bi1tZW51LWRpdntsZWZ0OjEyJTtyaWdodDp1bnNldH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjM2MHB4KXsuZWUtZWRpdG9yLWRhdGUtbGlzdC12aWV3LWRpdnttaW4td2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMTUpO3dpZHRoOjEwMCV9LmVlLWRhdGVzLWxpc3QtbGlzdC12aWV3e2p1c3RpZnktY29udGVudDpjZW50ZXJ9fSIsIi5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvcntjb2xvcjp2YXIoLS1lZS1jb2xvci1ncmV5LTIpO2ZvbnQtc2l6ZToxcmVtO2xpbmUtaGVpZ2h0OjEuMTttYXJnaW46MCAuNXJlbSAuMjVyZW19LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5jb2wtMHttaW4td2lkdGg6ODBweDt3aWR0aDo3LjUlfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuY29sLTF7d2lkdGg6MTcuNSV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5jb2wtMiwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmNvbC0ze3dpZHRoOjI1JX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmNvbC00e3dpZHRoOjIwJX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmNvbC01e21pbi13aWR0aDoxNTBweDt3aWR0aDo1JX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1ib2R5LXRkLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXByaWNlLWFjdGlvbnMgLmNvbXBvbmVudHMtaWNvbi1idXR0b257ZGlzcGxheTppbmxpbmUtZmxleH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgdHJ7cGFkZGluZzowIDAgLjM3NXJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgdGhlYWQgdGh7bGluZS1oZWlnaHQ6MS4xO3BhZGRpbmc6LjI1cmVtIC43NXJlbSAwfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciB0ZCwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgdGZvb3QgdGh7bGluZS1oZWlnaHQ6MS4xO3BhZGRpbmc6LjI1cmVtIC4zNzVyZW19aW5wdXRbdHlwZT1kYXRlXSxpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXSxpbnB1dFt0eXBlPWRhdGV0aW1lXSxpbnB1dFt0eXBlPWVtYWlsXSxpbnB1dFt0eXBlPW1vbnRoXSxpbnB1dFt0eXBlPW51bWJlcl0saW5wdXRbdHlwZT1wYXNzd29yZF0saW5wdXRbdHlwZT1zZWFyY2hdLGlucHV0W3R5cGU9dGVsXSxpbnB1dFt0eXBlPXRleHRdLGlucHV0W3R5cGU9dGltZV0saW5wdXRbdHlwZT11cmxdLGlucHV0W3R5cGU9d2Vla10sc2VsZWN0LHRleHRhcmVhe2hlaWdodDozOHB4O21pbi1oZWlnaHQ6MzhweH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFtb3VudC5lZS1zaWduLWJlZm9yZXtwYWRkaW5nLXJpZ2h0OjIuMjVyZW19LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hbW91bnQuZWUtc2lnbi1hZnRlcntwYWRkaW5nLXJpZ2h0OjMuNzVyZW19LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1sYWJlbCAuY29sLWZvcm0tbGFiZWx7Y29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS03KTtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjVyZW07cGFkZGluZzowO3RleHQtYWxpZ246cmlnaHR9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGJ1dHRvbnttYXJnaW46LjM3NXJlbSAuNXJlbSAuMzc1cmVtIDB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIHRib2R5OmFmdGVye2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDouNXJlbTt3aWR0aDoxMDAlfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWZvb3RlciAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtcm93IC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1sYWJlbHtwYWRkaW5nOi4ycmVtIC4zNzVyZW0gMH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsLXJvdyAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWx7cGFkZGluZzouMjVyZW0gLjM3NXJlbSAwfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWZvb3RlciAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtcm93IC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbCAuZWUtY3VycmVuY3ktc2lnbntmb250LXdlaWdodDo0MDB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLW1vbmV5LWZpZWxkLmVlLXNpZ24tYWZ0ZXIsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1hZnRlcnt3aWR0aDpjYWxjKDEwMCUgLSAxLjVyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1hZnRlci5lZS1jdXJTaWduLTIsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1hZnRlci5lZS1jdXJTaWduLTJ7d2lkdGg6Y2FsYygxMDAlIC0gMi4ycmVtKSFpbXBvcnRhbnR9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLW1vbmV5LWZpZWxkLmVlLXNpZ24tYWZ0ZXIuZWUtY3VyU2lnbi0zLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYWZ0ZXIuZWUtY3VyU2lnbi0ze3dpZHRoOmNhbGMoMTAwJSAtIDIuOHJlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tNCwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tNHt3aWR0aDpjYWxjKDEwMCUgLSAzLjJyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1iZWZvcmUsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmV7d2lkdGg6Y2FsYygxMDAlIC0gM3JlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1zaWduLWJlZm9yZS5lZS1jdXJTaWduLTIsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi0ye3dpZHRoOmNhbGMoMTAwJSAtIDMuN3JlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1zaWduLWJlZm9yZS5lZS1jdXJTaWduLTMsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi0ze3dpZHRoOmNhbGMoMTAwJSAtIDQuM3JlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1zaWduLWJlZm9yZS5lZS1jdXJTaWduLTQsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi00e3dpZHRoOmNhbGMoMTAwJSAtIDQuN3JlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1zaWduLWFmdGVye21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLW1vbmV5LWZpZWxkLmVlLXNpZ24tYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjEuNXJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWFmdGVye21hcmdpbi1sZWZ0OjB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmV7bWFyZ2luLWxlZnQ6MS41cmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYmVmb3JlLmVlLWN1clNpZ24tMnttYXJnaW4tbGVmdDoyLjJyZW19LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi0ze21hcmdpbi1sZWZ0OjIuOHJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWJlZm9yZS5lZS1jdXJTaWduLTR7bWFyZ2luLWxlZnQ6My4ycmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtcGVyY2VudC1zaWduLmVlLXNpZ24tYWZ0ZXJ7ZmxvYXQ6cmlnaHR9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1wZXJjZW50LXNpZ24uZWUtc2lnbi1hZnRlci5lZS1jdXJTaWduLTJ7bWFyZ2luLXJpZ2h0Oi43NXJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXBlcmNlbnQtc2lnbi5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tM3ttYXJnaW4tcmlnaHQ6MS41cmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtcGVyY2VudC1zaWduLmVlLXNpZ24tYWZ0ZXIuZWUtY3VyU2lnbi00e21hcmdpbi1yaWdodDoyLjI1cmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtcGVyY2VudC1zaWduLmVlLXNpZ24tYmVmb3Jle2Zsb2F0OnJpZ2h0fS5lZS1hZGQtcHJpY2UtbW9kaWZpZXItYnRue3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMjVzIGVhc2U7dHJhbnNpdGlvbjpib3gtc2hhZG93IC4yNXMgZWFzZX0uZWUtdHBjLW5ldy1tb2RpZmllci11cGRhdGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci13aGl0ZSk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAycHggdmFyKC0tZWUtY29sb3ItYnJpZ2h0LWJsdWUpIWltcG9ydGFudDthbmltYXRpb246c2hha2UgLjI1cyBlYXNlIGluZmluaXRlfUBrZXlmcmFtZXMgc2hha2V7MTAlLDkwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTFweCwwLDApfTIwJSw4MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDJweCwwLDApfTMwJSw1MCUsNzAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtM3B4LDAsMCl9NDAlLDYwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoM3B4LDAsMCl9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzgycHgpey5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvcnttYXJnaW46MCAuNXJlbSAuMjVyZW0gLjI1cmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuY29sLTAsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5jb2wtMSwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmNvbC0yLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuY29sLTMsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5jb2wtNCwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmNvbC01e3dpZHRoOjEwMCV9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXByaWNlLXJvd3twYWRkaW5nLWJvdHRvbToxLjVyZW19LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXByaWNlLXJvdysuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItcHJpY2Utcm93e2JvcmRlci10b3A6MnB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktMTApO3BhZGRpbmctdG9wOjEuNXJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVye2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nLXRvcDouNXJlbTt3aWR0aDoyNSV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtYm9keS10ZCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZXt3aWR0aDo3NSV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtYm9keS10ZC5jb2wtMCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZXt3aWR0aDoyNSV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtYm9keS10ZC5jb2wtMiAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZXt3aWR0aDo1MCV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtYm9keS10ZC5jb2wtNCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZXt3aWR0aDozMyV9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXJUYWJsZS1ib2R5LXRkLmVlLW51bWJlci1jb2x1bW4sLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hZGQtcHJpY2UtaWR7dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFkZC1wcmljZS1pZCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi1oZWFkZXJ7ZGlzcGxheTpub25lfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYWRkLXByaWNlLWlkIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tbGVmdDoyNSU7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFkZC1wcmljZS1hY3Rpb25zIC5jb21wb25lbnRzLWljb24tYnV0dG9uLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItcHJpY2UtYWN0aW9ucyAuY29tcG9uZW50cy1pY29uLWJ1dHRvbnt0b3A6LjM3NXJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFkZC1wcmljZS1yb3cuZWUtclRhYmxlLWJvZHktcm93e3BhZGRpbmctdG9wOjFyZW19LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hZGQtcHJpY2UtYWN0aW9ucy5lZS1yVGFibGUtYm9keS10ZCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi1oZWFkZXIsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1hY3Rpb25zLmVlLXJUYWJsZS1ib2R5LXRkIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlcntwYWRkaW5nLXRvcDoxLjI1cmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWJvZHkgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFkZC1wcmljZS1pZHtiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWdyZXktMTEpO21hcmdpbjowIDAgLjVyZW07cGFkZGluZzouNXJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXJUYWJsZS1mb290ZXItcm93e2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtwYWRkaW5nOi41cmVtIDAgMH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgdGZvb3QgLmNvbC0wLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciB0Zm9vdCAuY29sLTEsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIHRmb290IC5jb2wtMntkaXNwbGF5Om5vbmU7aGVpZ2h0OjA7cGFkZGluZzowO3dpZHRoOjB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyNSV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtZm9vdGVyIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1yb3cgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFse2Rpc3BsYXk6aW5saW5lLWJsb2NrO2Zsb2F0OmxlZnQ7cGFkZGluZzouMjVyZW0gLjVyZW0gMDt3aWR0aDpjYWxjKDY2JSAtIDQwcHggLSAuNXJlbSl9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtZm9vdGVyIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1yb3cgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsLWFjdGlvbnN7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjQwcHg7d2lkdGg6NDBweH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgdGJvZHk6YWZ0ZXJ7ZGlzcGxheTpub25lO2hlaWdodDowfXRleHRhcmVhe2hlaWdodDo3NnB4O21pbi1oZWlnaHQ6NzZweH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1hZnRlciwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWFmdGVye3dpZHRoOmNhbGMoMTAwJSAtIDEuNXJlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tMiwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tMnt3aWR0aDpjYWxjKDEwMCUgLSAyLjI1cmVtKSFpbXBvcnRhbnR9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLW1vbmV5LWZpZWxkLmVlLXNpZ24tYWZ0ZXIuZWUtY3VyU2lnbi0zLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYWZ0ZXIuZWUtY3VyU2lnbi0ze3dpZHRoOmNhbGMoMTAwJSAtIDNyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1hZnRlci5lZS1jdXJTaWduLTQsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1hZnRlci5lZS1jdXJTaWduLTR7d2lkdGg6Y2FsYygxMDAlIC0gMy43NXJlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYmVmb3JlLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYmVmb3JlLmVlLWN1clNpZ24tMnt3aWR0aDoxMDAlIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWJlZm9yZS5lZS1jdXJTaWduLTN7d2lkdGg6Y2FsYygxMDAlIC0gLjc1cmVtKSFpbXBvcnRhbnR9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLW1vbmV5LWZpZWxkLmVlLXNpZ24tYmVmb3JlLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYmVmb3JlLmVlLWN1clNpZ24tNHt3aWR0aDpjYWxjKDEwMCUgLSAxLjVyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi0ye3dpZHRoOmNhbGMoMTAwJSAtIDIuMjVyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi0ze3dpZHRoOmNhbGMoMTAwJSAtIDNyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi00e3dpZHRoOmNhbGMoMTAwJSAtIDMuNzVyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXBlcmNlbnQtc2lnbi5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tMiwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXBlcmNlbnQtc2lnbi5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tMywuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXBlcmNlbnQtc2lnbi5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tNCwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1hZnRlciwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1iZWZvcmUsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1hZnRlciwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWJlZm9yZSwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWJlZm9yZS5lZS1jdXJTaWduLTIsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi0zLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYmVmb3JlLmVlLWN1clNpZ24tNHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjYwMHB4KXsuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1ib2R5LXRkLmNvbC0wIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle3dpZHRoOjI1JX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1ib2R5LXRkLmNvbC0yIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle3dpZHRoOjc1JX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1ib2R5LXRkLmNvbC00IC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle3dpZHRoOjUwJX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjQ4MHB4KXsuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3J7bWFyZ2luOjB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlcntmb250LXNpemU6LjlyZW19LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIHRkLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciB0aHtwYWRkaW5nOi4zNzVyZW0gLjI1cmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWJvZHktdGQgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVyLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtbGFiZWx7bWFyZ2luOjA7cGFkZGluZzouMjVyZW0gMCAuMjVyZW0gLjM3NXJlbTt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6MTAwJX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWJvZHktdGQuY29sLTAgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWUsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtYm9keS10ZC5jb2wtMiAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZSwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1ib2R5LXRkLmNvbC00IC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVlLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWJvZHktdGQgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWUsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbHttYXJnaW46MDt3aWR0aDoxMDAlfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWJvZHktdGQuY29sLTAgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWV7d2lkdGg6MzcuNSV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hZGQtcHJpY2UtYWN0aW9ucy5lZS1yVGFibGUtYm9keS10ZCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi1oZWFkZXIsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1hY3Rpb25zLmVlLXJUYWJsZS1ib2R5LXRkIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlcnt3aWR0aDoyNSUhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWJvZHktdGQuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYWRkLXByaWNlLWFjdGlvbnMgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWUsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtYm9keS10ZC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1hY3Rpb25zIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle3dpZHRoOjc1JSFpbXBvcnRhbnR9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtZm9vdGVyIC5lZS1yVGFibGUtZm9vdGVyLXJvd3tmbGV4LWZsb3c6cm93IHdyYXB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtZm9vdGVyIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1yb3cgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsLWxhYmVse3BhZGRpbmc6Ljc1cmVtIC41cmVtIDB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1sYWJlbCAuY29sLWZvcm0tbGFiZWx7dGV4dC1hbGlnbjpsZWZ0fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWZvb3RlciAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtcm93IC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbHt3aWR0aDpjYWxjKDEwMCUgLSA0MHB4IC0gLjVyZW0pfX0iLCIuZWUtZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfSIsIi5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyIC5lZS1maWx0ZXItYmFyLWZpbHRlci5lZS1zaG93LXRpY2tldHMtZmlsdGVye21hcmdpbi1yaWdodDouMjVyZW19LmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXIgLmVlLXRpY2tldC1kYXRlcy1jaGFpbmVkLWZpbHRlcnttYXJnaW4tcmlnaHQ6Ljc1cmVtO21hcmdpbi10b3A6MXB4fSIsIi5lZS10aWNrZXRzLWxpc3QtZ3JpZC12aWV3e2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IHdyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDttYXJnaW46dmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpIDAgMH0uZWUtZWRpdG9yLXRpY2tldC1tYWlue2JhY2tncm91bmQ6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMTIuNSk7cGFkZGluZzowIDAgMCBjYWxjKHZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpICsgOHB4KTtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LmVlLWVkaXRvci10aWNrZXQtZGV0YWlscy13cmFwcGVyLWRpdnthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWluLXdpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSoyNSk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXNtYWxsZXIpIGNhbGModmFyKC0tZWUtcGFkZGluZy1taWNybykqMzYpIHZhcigtLWVlLXBhZGRpbmctZXh0cmVtZSkgdmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKTt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlfS5lZS1lZGl0b3ItdGlja2V0LW5hbWUtaGVhZGluZywuZWUtZWRpdG9yLXRpY2tldC1uYW1lLWhlYWRpbmcgLmVlLWlubGluZS1lZGl0LXRleHR7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZykhaW1wb3J0YW50O2ZvbnQtd2VpZ2h0OjcwMCFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZykhaW1wb3J0YW50O21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tbWljcm8pIDAgMCFpbXBvcnRhbnQ7bWluLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowIDAgdmFyKC0tZWUtcGFkZGluZy10aW55KSFpbXBvcnRhbnQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aWR0aDoxMDAlfS5lZS1lZGl0b3ItdGlja2V0LW5hbWUtaGVhZGluZy5lZS1sb25nLXRpdGxlLC5lZS1lZGl0b3ItdGlja2V0LW5hbWUtaGVhZGluZy5lZS1sb25nLXRpdGxlIC5lZS1pbmxpbmUtZWRpdC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSFpbXBvcnRhbnR9LmVlLWVkaXRvci10aWNrZXQtZGVzYy1kaXZ7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yLWhpZ2gtY29udHJhc3QpO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tdGlueSk7d2lkdGg6OTAlfS5lZS1lZGl0b3ItdGlja2V0LWRlc2MtZGl2LmVlLXRpY2tldC1kZXNjLWV4Y2VycHQgc3BhbntkaXNwbGF5OmJsb2NrO21heC1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWh1Z2UpO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uZWUtZWRpdG9yLXRpY2tldC1kZXNjLWRpdi5lZS10aWNrZXQtZGVzYy1leGNlcnB0IHRleHRhcmVhe21heC1oZWlnaHQ6dW5zZXR9LmVlLXRpY2tldC1wcmljZSwuZWUtdGlja2V0LXByaWNlIC5lZS1pbmxpbmUtZWRpdC10ZXh0e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1sb3ctY29udHJhc3QpIWltcG9ydGFudDtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZykhaW1wb3J0YW50O2ZvbnQtd2VpZ2h0OjcwMCFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZykhaW1wb3J0YW50O21hcmdpbjowIWltcG9ydGFudDtwYWRkaW5nOjAgMCB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIWltcG9ydGFudDt0ZXh0LWFsaWduOmNlbnRlcn0uZWUtZWRpdG9yLXRpY2tldC1kZXRhaWxzLXNvbGQtcnNydmQtcXR5LWRpdntib3R0b206dmFyKC0tZWUtcGFkZGluZy1taWNybyk7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1lZS1tYXJnaW4tdGlueSkqLTEpO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTB9LmVlLWVkaXRvci10aWNrZXQtZGV0YWlscy1zb2xkLXJzcnZkLXF0eS1kaXYgLnRpY2tldC1yZWdpc3RyYW50cy1sYWJlbHttYXJnaW4tbGVmdDpjYWxjKHZhcigtLWVlLW1hcmdpbi1taWNybykqLTEpfS5lZS10aWNrZXRzLWxpc3QtZ3JpZC12aWV3IC5lZS1lZGl0b3ItdGlja2V0LWFjdGlvbnMtbWVudXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246YWJzb2x1dGU7bGVmdDp2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKTt0b3A6dmFyKC0tZWUtcGFkZGluZy1taWNybyl9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjEyODBweCl7LmVlLXRpY2tldHMtbGlzdC1ncmlkLXZpZXd7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lZS1lZGl0b3ItdGlja2V0LWRldGFpbHMtd3JhcHBlci1kaXZ7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTttaW4td2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMjEuMjUpfS5lZS1lZGl0b3ItdGlja2V0LW5hbWUtaGVhZGluZywuZWUtZWRpdG9yLXRpY2tldC1uYW1lLWhlYWRpbmcgLmVlLWlubGluZS1lZGl0LXRleHR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpIWltcG9ydGFudH0uZWUtZWRpdG9yLXRpY2tldC1uYW1lLWhlYWRpbmcuZWUtbG9uZy10aXRsZSwuZWUtZWRpdG9yLXRpY2tldC1uYW1lLWhlYWRpbmcuZWUtbG9uZy10aXRsZSAuZWUtaW5saW5lLWVkaXQtdGV4dHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSFpbXBvcnRhbnR9LmVlLWVkaXRvci10aWNrZXQtZGVzYy1kaXZ7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjQ4MHB4KXsuZWUtZWRpdG9yLXRpY2tldC1tYWlue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MDt3aWR0aDoxMDAlfS5lZS1lZGl0b3ItdGlja2V0LWRldGFpbHMtd3JhcHBlci1kaXZ7bWluLXdpZHRoOnVuc2V0O3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy10aW55KSB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIHZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy1kZWZhdWx0KX0uZWUtZWRpdG9yLXRpY2tldC1uYW1lLWhlYWRpbmd7bWF4LWhlaWdodDp1bnNldH0uZWUtZWRpdG9yLXRpY2tldC1kZXNjLWRpdnttYXJnaW4tdG9wOnZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKX0uZWUtZWRpdG9yLXRpY2tldC1kZXRhaWxzLXNvbGQtcnNydmQtcXR5LWRpdntib3R0b206dW5zZXQ7cG9zaXRpb246cmVsYXRpdmV9fSIsIi5lZS10aWNrZXRzLWxpc3QtbGlzdC12aWV3e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7Zm9udC13ZWlnaHQ6NDAwO21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tdGlueSkgMCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpO21heC13aWR0aDoxMDAlfS5lZS1lZGl0b3ItdGlja2V0LWxpc3Qtdmlldy1kaXZ7bWFyZ2luOjAgMCAxcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTE0KX0uZWUtdGlja2V0cy1saXN0LWxpc3Qtdmlldz5kaXY6Zmlyc3Qtb2YtdHlwZXtiYWNrZ3JvdW5kOm5vbmUhaW1wb3J0YW50O2JvcmRlcjpub25lIWltcG9ydGFudH0uZWUtdGlja2V0cy1saXN0LWxpc3Qtdmlldz5kaXY6bnRoLW9mLXR5cGUoMm4pe2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xNSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTE1KX0uZWUtdGlja2V0cy1saXN0LWxpc3Qtdmlldz5kaXY6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1ncmV5LTE0KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktMTQpfS5lZS1lZGl0b3ItdGlja2V0LWxpc3QtaXRlbXN7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwfS5lZS10aWNrZXQtbGlzdC1pdGVte2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTtoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWV4dHJlbWUpO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy10aW55KTt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW59LmVlLXRpY2tldHMtbGlzdC1saXN0LXZpZXc+ZGl2OmZpcnN0LW9mLXR5cGUgLmVlLXRpY2tldC1saXN0LWl0ZW17Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7aGVpZ2h0OmF1dG87cGFkZGluZy1ib3R0b206dmFyKC0tZWUtcGFkZGluZy1taWNybyl9LmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6Zmlyc3Qtb2YtdHlwZXtwYWRkaW5nOjA7d2lkdGg6dmFyKC0tZWUtcGFkZGluZy1taWNybyl9LmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoMil7bWluLXdpZHRoOjIwcHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo1JX0uZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgzKXt3aWR0aDoyNSV9LmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoNCl7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo2JX0uZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSg1KXt3aWR0aDoxNSV9LmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoNiksLmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoNyksLmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoOCl7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo2JX0uZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSg5KXt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDo3LjUlfS5lZS1lZGl0b3ItdGlja2V0LWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDEwKXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzp2aXNpYmxlO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjE0JX0uZWUtdGlja2V0LWxpc3QtaXRlbSAuZWUtaW5maW5pdHktc2lnbntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1lZS1tYXJnaW4tbWljcm8pKi0xKX0uZWUtdGlja2V0LWxpc3QtaXRlbSAuZGFzaGljb25ze21hcmdpbjowfS5lZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVse2Rpc3BsYXk6bm9uZX0uZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zPmRpdjpmaXJzdC1vZi10eXBlIC5lZS10aWNrZXQtbGlzdC1pdGVtLXZhbHVle2Rpc3BsYXk6bm9uZX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MTI4MHB4KXsuZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1ze2ZsZXgtZmxvdzpyb3cgd3JhcH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjQ4MHB4KXsuZWUtdGlja2V0cy1saXN0LWxpc3Qtdmlld3tkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5lZS1lZGl0b3ItdGlja2V0LWxpc3Qtdmlldy1kaXZ7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tZGVmYXVsdCk7bWluLXdpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjEyLjUpO3dpZHRoOjQ3LjUlfS5lZS10aWNrZXRzLWxpc3QtbGlzdC12aWV3PmRpdjpmaXJzdC1vZi10eXBle2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmVlLXRpY2tldHMtbGlzdC1saXN0LXZpZXc+ZGl2LC5lZS10aWNrZXRzLWxpc3QtbGlzdC12aWV3PmRpdjpob3ZlcntiYWNrZ3JvdW5kOm5vbmUhaW1wb3J0YW50O2JvcmRlcjpub25lfS5lZS1lZGl0b3ItdGlja2V0LWxpc3QtaXRlbXN7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpfS5lZS10aWNrZXQtbGlzdC1pdGVte2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO2hlaWdodDphdXRvO292ZXJmbG93OnZpc2libGU7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnQ7dGV4dC1vdmVyZmxvdzp1bnNldDt3aGl0ZS1zcGFjZTpub3JtYWw7d2lkdGg6YXV0byFpbXBvcnRhbnQ7d29yZC1icmVhazpicmVhay13b3JkfS5lZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVse2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtwYWRkaW5nOjAgdmFyKC0tZWUtcGFkZGluZy10aW55KSAwIDA7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDozMyV9LmVlLXRpY2tldC1saXN0LWl0ZW0tdmFsdWV7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6Zmlyc3Qtb2YtdHlwZSAuZWUtdGlja2V0LWxpc3QtaXRlbS12YWx1ZXtkaXNwbGF5OmJsb2NrfS5lZS1lZGl0b3ItdGlja2V0LWxpc3QtaXRlbXM+ZGl2OmZpcnN0LW9mLXR5cGV7Y29sb3I6dmFyKC0tZWUtY29sb3Itd2hpdGUpIWltcG9ydGFudDtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctdGlueSk7d2lkdGg6YXV0b30uZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zPmRpdjpmaXJzdC1vZi10eXBlIC5lZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVsLC5lZS1lZGl0b3ItdGlja2V0LWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDMpe2Rpc3BsYXk6bm9uZX0uZWUtdGlja2V0cy1saXN0LWxpc3QtdmlldyAuZWUtZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnV7bGVmdDozMyU7cGFkZGluZy1sZWZ0OnZhcigtLWVlLXBhZGRpbmctdGlueSk7cmlnaHQ6dW5zZXQ7dG9wOnZhcigtLWVlLXBhZGRpbmctbmFubyl9LmVlLXRpY2tldHMtbGlzdC1saXN0LXZpZXcgLmVlLWRyb3Bkb3duLW1lbnUtZGl2e2xlZnQ6MTIlO3JpZ2h0OnVuc2V0fX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzYwcHgpey5lZS1lZGl0b3ItdGlja2V0LWxpc3Qtdmlldy1kaXZ7bWluLXdpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjE1KTt3aWR0aDoxMDAlfS5lZS10aWNrZXRzLWxpc3QtbGlzdC12aWV3e2p1c3RpZnktY29udGVudDpjZW50ZXJ9fSJdLCJzb3VyY2VSb290IjoiIn0=*/ \ No newline at end of file +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2VkaXRvci5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIvdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIuY3NzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9hY3Rpb25zLW1lbnUvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL2RhdGVzLWFuZC10aW1lcy9lZGl0b3ItZGF0ZS9ncmlkLXZpZXcvZWRpdG9yLWRhdGUtZW50aXRpZXMtZ3JpZC12aWV3LmNzcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy9kYXRlcy1hbmQtdGltZXMvZWRpdG9yLWRhdGUvbGlzdC12aWV3L2VkaXRvci1kYXRlLWVudGl0aWVzLWxpc3Qtdmlldy5jc3MiLCJ3ZWJwYWNrOi8vZWVqcy5lZGl0b3IvLi9hc3NldHMvc3JjL2VkaXRvci9ldmVudHMvdGlja2V0cy9lZGl0b3ItdGlja2V0L3ByaWNlLWNhbGN1bGF0b3Ivc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9hY3Rpb25zLW1lbnUvc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuZWRpdG9yLy4vYXNzZXRzL3NyYy9lZGl0b3IvZXZlbnRzL3RpY2tldHMvZWRpdG9yLXRpY2tldC9maWx0ZXItYmFyL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvZ3JpZC12aWV3L2VkaXRvci10aWNrZXQtZW50aXRpZXMtZ3JpZC12aWV3LmNzcyIsIndlYnBhY2s6Ly9lZWpzLmVkaXRvci8uL2Fzc2V0cy9zcmMvZWRpdG9yL2V2ZW50cy90aWNrZXRzL2VkaXRvci10aWNrZXQvbGlzdC12aWV3L2VkaXRvci10aWNrZXQtZW50aXRpZXMtbGlzdC12aWV3LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUMsWUFBWSw0QkFBNEIsbUNBQW1DLDhCQUE4QixXQUFXLG9DQUFvQyxnQ0FBZ0MsbUNBQW1DLGtCQUFrQixrQ0FBa0MsV0FBVyx3Q0FBd0Msc0NBQXNDLGdCQUFnQixtQ0FBbUMsdURBQXVELG1DQUFtQyxnQkFBZ0IsOENBQThDLDhCQUE4Qix3REFBd0QseUNBQXlDLFdBQVcsZUFBZSwrQkFBK0IsUUFBUSxVQUFVLDJDQUEyQyxVQUFVLGtEQUFrRCxpQkFBaUIsc0VBQXNFLGVBQWUscUNBQXFDLGNBQWMsNEJBQTRCLGFBQWEsa0JBQWtCLFlBQVksZ0NBQWdDLGVBQWUsd0JBQXdCLHNDQUFzQyx5Q0FBeUMsc0NBQXNDLHVCQUF1Qix5QkFBeUIsb0JBQW9CLG1CQUFtQixrQ0FBa0MsV0FBVyxTQUFTLDhEQUE4RCxrQkFBa0IsWUFBWSwrQkFBK0IsZ0RBQWdELCtCQUErQixlQUFlLDhFQUE4RSxlQUFlLG1CQUFtQiw4REFBOEQsY0FBYywyQkFBMkIseUJBQXlCLHNCQUFzQixxQkFBcUIsaUJBQWlCLG9EQUFvRCxlQUFlLHlDQUF5QyxZQUFZLGlDQUFpQyxlQUFlLG1CQUFtQiw0RUFBNEUsNkJBQTZCLHlEQUF5RCw0Q0FBNEMsK0NBQStDLFdBQVcscUJBQXFCLGtDQUFrQyxnREFBZ0Qsd0NBQXdDLGtCQUFrQixXQUFXLFVBQVUsdUVBQXVFLHlDQUF5QyxnQ0FBZ0Msd0NBQXdDLHdDQUF3QyxrQkFBa0IseURBQXlELFVBQVUsZ0JBQWdCLDBDQUEwQyx5Q0FBeUMsV0FBVyxlQUFlLDhCQUE4QixRQUFRLFVBQVUsOENBQThDLHlCQUF5Qiw4Q0FBOEMs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ZSxpQkFBaUIsU0FBUyxnREFBZ0QsVUFBVSxnREFBZ0QsaUJBQWlCLFNBQVMsZ0RBQWdELFVBQVUsZ0pBQWdKLGlCQUFpQixTQUFTLGdEQUFnRCxrQkFBa0IsV0FBVyxpREFBaUQsa0JBQWtCLGlCQUFpQixrQkFBa0IsVUFBVSx1Q0FBdUMsc0NBQXNDLDJDQUEyQyxnQ0FBZ0MsU0FBUywyQkFBMkIsYUFBYSwwRUFBMEUsYUFBYSwwQ0FBMEMsNkJBQTZCLG9CQUFvQix5Q0FBeUMsMkJBQTJCLGFBQWEsbUJBQW1CLDhCQUE4QixnQ0FBZ0Msb0NBQW9DLGlEQUFpRCxZQUFZLDZDQUE2Qyx1QkFBdUIsb0VBQW9FLDBCQUEwQixZQUFZLDZCQUE2Qix3QkFBd0Isd0NBQXdDLHFCQUFxQixvQ0FBb0MsWUFBWSxpQkFBaUIsK0JBQStCLDBCQUEwQixvQkFBb0IsbUJBQW1CLHFCQUFxQixzQkFBc0IsMkJBQTJCLG1DQUFtQyxxQkFBcUIsc0NBQXNDLHFDQUFxQyxpQkFBaUIsVUFBVSwyQkFBMkIscUJBQXFCLDBFQUEwRSxjQUFjLCtDQUErQyxzQ0FBc0MsK0JBQStCLFdBQVcsMEhBQTBILGFBQWEsMERBQTBELFNBQVMsb0NBQW9DLFlBQVksMkJBQTJCLGlEQUFpRCxTQUFTLGFBQWEseUNBQXlDLGdDQUFnQywrQ0FBK0MsV0FBVywyQkFBMkIsd0IiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1lZGl0b3IuYWM0NGZiN2RkNzAwNGJlMTY5MDUuZGlzdC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZWUtZWRpdG9yLWRpdiAuY29tcG9uZW50cy1wYW5lbHtib3JkZXI6bm9uZX0uZXNwcmVzc28tZWRpdG9yLWxlZ2VuZC1kaXZ7cGFkZGluZy10b3A6dmFyKC0tZWUtcGFkZGluZy10aW55KX0uZXNwcmVzc28tZWRpdG9yLWxlZ2VuZC11bCBsaXtjbGVhcjpib3RoO21hcmdpbi1ib3R0b206dmFyKC0tZWUtbWFyZ2luLXRpbnkpfS5lc3ByZXNzby1lZGl0b3ItbGVnZW5kLXVsIGxpIHB7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtmb250LXN0eWxlOml0YWxpY30uZXNwcmVzc28tZWRpdG9yIC5lZS1mb3JtLXJvdz5kaXZ7d2lkdGg6MTAwJX0uZXNwcmVzc28tZWRpdG9yLmNvbXBvbmVudHMtcGFuZWxfX2JvZHl7YmFja2dyb3VuZDp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItdG9wOm5vbmU7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKX0uZWUtZWRpdG9yLWV2ZW50LWRhdGVzLWFuZC10aWNrZXRzIC5lZS1tZXRhYm94LWhlYWRpbmd7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtmb250LXdlaWdodDo3MDA7dGV4dC1zaGFkb3c6dmFyKC0tZWUtdGV4dC1zaGFkb3ctaW5zZXQtbGlnaHQpfS5lZS1tZXRhYm94LWhlYWRpbmcgLmRhc2hpY29ue21hcmdpbjowIHZhcigtLWVlLW1hcmdpbi10aW55KSAwIHZhcigtLWVlLW1hcmdpbi1taWNybyl9LmVzcHJlc3NvLWVkaXRvci5jb21wb25lbnRzLW1vZGFsX19mcmFtZXtoZWlnaHQ6ODAlO21heC13aWR0aDoxMDAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtMTAlKTt0b3A6MTUlO3dpZHRoOjYwJX0uZXNwcmVzc28tZWRpdG9yLmNvbXBvbmVudHMtbW9kYWxfX2NvbnRlbnR7cGFkZGluZzowfS5lc3ByZXNzby1lZGl0b3IuY29tcG9uZW50cy1tb2RhbF9faGVhZGVyLWhlYWRpbmd7Zm9udC1zaXplOjEuNXJlbX0uZXNwcmVzc28tZWRpdG9yLmNvbXBvbmVudHMtcGFuZWxfX2JvZHk+LmNvbXBvbmVudHMtcGFuZWxfX2JvZHktdGl0bGV7Zm9udC1zaXplOjFyZW19LmVzcHJlc3NvLWVkaXRvciAucmR0T3BlbiAucmR0UGlja2Vye2Rpc3BsYXk6YmxvY2t9LmVzcHJlc3NvLWVkaXRvciAucmR0UGlja2Vye2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoyNTBweDtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbWljcm8pO21hcmdpbi10b3A6MXB4O3otaW5kZXg6OTk5OTkhaW1wb3J0YW50O2JhY2tncm91bmQ6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTEwKTtib3gtc2hhZG93OnZhcigtLWVlLWJveC1zaGFkb3ctc21hbGwpfS5lc3ByZXNzby1lZGl0b3IgdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfS5lc3ByZXNzby1lZGl0b3IgdGh7dGV4dC1hbGlnbjppbmhlcml0fS5lc3ByZXNzby1lZGl0b3IgLnJkdFBpY2tlciB0YWJsZXt3aWR0aDoxMDAlO21hcmdpbjowfS5lc3ByZXNzby1lZGl0b3IgLnJkdFBpY2tlciB0ZCwuZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGh7dGV4dC1hbGlnbjpjZW50ZXI7aGVpZ2h0OjI4cHh9LmVzcHJlc3NvLWVkaXRvciAucmR0UGlja2VyIHRoe2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktMTApfS5lc3ByZXNzby1lZGl0b3IgLnJkdFBpY2tlciB0ZHtjdXJzb3I6cG9pbnRlcn0uZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGgucmR0TmV4dCwuZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGgucmR0UHJldntmb250LXNpemU6MjFweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVzcHJlc3NvLWVkaXRvciAucmR0TmV4dCBzcGFuLC5lc3ByZXNzby1lZGl0b3IgLnJkdFByZXYgc3BhbntkaXNwbGF5OmJsb2NrOy13ZWJraXQtdG91Y2gtY2FsbG91dDpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGh7Y3Vyc29yOnBvaW50ZXJ9LmVzcHJlc3NvLWVkaXRvciAucmR0UGlja2VyIHRoLnJkdFN3aXRjaHt3aWR0aDoxMDBweH0uZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgLmRvd3t3aWR0aDoxNC4yODU3JTtib3JkZXItYm90dG9tOm5vbmV9LmVzcHJlc3NvLWVkaXRvciAucmR0UGlja2VyIHRkLnJkdE5ldywuZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGQucmR0T2xke2NvbG9yOnZhcigtLWVlLWNvbG9yLWdyZXktNyl9LmVzcHJlc3NvLWVkaXRvciAucmR0UGlja2VyIHRkLnJkdEFjdGl2ZS5yZHRUb2RheTpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1lZS1jb2xvci1ncmV5LTE1KX0uZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGQucmR0VG9kYXk6YmVmb3Jle2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItbGVmdDo3cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTo3cHggc29saWQgdmFyKC0tZWUtY29sb3ItcHJpbWFyeSk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ncmV5LTcpO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTo0cHg7cmlnaHQ6NHB4fS5lc3ByZXNzby1lZGl0b3IgLnJkdFBpY2tlciB0ZC5yZHRBY3RpdmUsLnJkdFBpY2tlciB0ZC5yZHRBY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLXByaW1hcnkpO3RleHQtc2hhZG93OnZhcigtLWVlLXRleHQtc2hhZG93LWluc2V0KX0uZXNwcmVzc28tZWRpdG9yIC5yZHRQaWNrZXIgdGQucmR0VG9kYXl7cG9zaXRpb246cmVsYXRpdmV9LmVzcHJlc3NvLWVkaXRvciAudGltZV9waWNrZXJfY29udGFpbmVyIC5tb2RhbF9jb250YWluZXJ7dG9wOi0zOHB4O21pbi13aWR0aDozMDBweH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MTI4MHB4KXsuZXNwcmVzc28tZWRpdG9yLmNvbXBvbmVudHMtbW9kYWxfX2ZyYW1le2hlaWdodDo5MCU7bWF4LXdpZHRoOjEwMCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01JSk7dG9wOjEwJTt3aWR0aDo4MCV9LmVzcHJlc3NvLWVkaXRvciAucGwtMywuZXNwcmVzc28tZWRpdG9yIC5weC0ze3BhZGRpbmctbGVmdDowIWltcG9ydGFudH0uZXNwcmVzc28tZWRpdG9yIC5wci0zLC5lc3ByZXNzby1lZGl0b3IgLnB4LTN7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsuZXNwcmVzc28tZWRpdG9yLmNvbXBvbmVudHMtbW9kYWxfX2ZyYW1le2hlaWdodDo5MCU7bWF4LXdpZHRoOjEwMCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01JSk7dG9wOjEwJTt3aWR0aDo5MCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo2MDBweCkgYW5kIChtaW4td2lkdGg6NDgxcHgpey5lc3ByZXNzby1lZGl0b3IuY29tcG9uZW50cy1tb2RhbF9fZnJhbWV7aGVpZ2h0Ojk1JTttYXgtd2lkdGg6OTUlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtMi41JSk7dG9wOjIuNSU7d2lkdGg6OTUlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTQwcHgpIGFuZCAobWluLXdpZHRoOjQ4MHB4KXsuZXNwcmVzc28tZWRpdG9yLmNvbXBvbmVudHMtbW9kYWxfX2ZyYW1le2hlaWdodDoxMDAlO21heC13aWR0aDoxMDAlO3RyYW5zZm9ybTpub25lO3RvcDowO3dpZHRoOjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVzcHJlc3NvLWVkaXRvci5jb21wb25lbnRzLW1vZGFsX19mcmFtZXtoZWlnaHQ6MTAwJTttYXgtd2lkdGg6MTAwJTt0cmFuc2Zvcm06bm9uZTt0b3A6MDt3aWR0aDoxMDAlfX0iLCIuZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXJ7Ym9yZGVyLXNwYWNpbmc6MDttYXJnaW46MCBhdXRvIHZhcigtLWVlLW1hcmdpbi1iaWcpfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLWRhdGVzLWhlYWRlcntwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbmFubykgdmFyKC0tZWUtcGFkZGluZy1taWNybyl9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tdGlja2V0LWhlYWRlci1kaXZ7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtmb250LXdlaWdodDo3MDA7aGVpZ2h0OjEwMCU7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKSB2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKSB2YXIoLS1lZS1wYWRkaW5nLWRlZmF1bHQpO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS10aWNrZXQtaGVhZGVyLXByaWNlLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLXRpY2tldC1oZWFkZXItc3RhdHVzLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLXRpY2tldC1oZWFkZXItdGl0bGV7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS10aWNrZXQtaGVhZGVyLXRpdGxle2hlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpKjMpO292ZXJmbG93OmhpZGRlbjt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tdGlja2V0LWhlYWRlci1zdGF0dXN7Ym90dG9tOjA7cmlnaHQ6MDtoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW5hbm8pO3Bvc2l0aW9uOmFic29sdXRlfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLXRpY2tldC1oZWFkZXItc3RhdHVzIC5lZS10YW0tdGlja2V0LWhlYWRlci1kYXRle2NvbG9yOnZhcigtLWVlLWNvbG9yLXdoaXRlKTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLW1pY3JvKTtoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLW1pY3JvKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1lZS1sZXR0ZXItc3BhY2luZy1mb250LXNpemUtbWljcm8pO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1taWNybyk7cG9zaXRpb246cmVsYXRpdmU7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RvcDotNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS10aWNrZXQtaGVhZGVyLXByaWNlIC5lZS10YW0tdGlja2V0LWhlYWRlci1kYXRle2Rpc3BsYXk6bm9uZTt2aXNpYmlsaXR5OmhpZGRlbn0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS1kYXRlLWlkLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLXRpY2tldC1pZHtjb2xvcjp2YXIoLS1lZS1jb2xvci1ncmV5LTcpO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtbWljcm8pO2ZvbnQtd2VpZ2h0OjQwMDtwb3NpdGlvbjphYnNvbHV0ZX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS1kYXRlLWlke2xlZnQ6dmFyKC0tZWUtcGFkZGluZy1taWNybyk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXRpbnkpO3RvcDowO3dpZHRoOjFweDt3b3JkLXdyYXA6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS10aWNrZXQtaWR7bGVmdDo1MCU7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLXRpbnkpO21hcmdpbi1sZWZ0OmNhbGModmFyKC0tZWUtcGFkZGluZy1kZWZhdWx0KSotMik7dGV4dC1hbGlnbjpjZW50ZXI7dG9wOi0xcmVtO3dpZHRoOnZhcigtLWVlLXBhZGRpbmctZXh0cmVtZSl9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0teWVhci1yb3d7YmFja2dyb3VuZDpub25lO2hlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS15ZWFyLXJvdyAuZWUtdGFtLWRhdGUtbGFiZWx7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtmb250LXdlaWdodDo3MDA7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpO2xldHRlci1zcGFjaW5nOnZhcigtLWVlLWxldHRlci1zcGFjaW5nLWZvbnQtc2l6ZS1taWNybyk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIHZhcigtLWVlLXBhZGRpbmctc21hbGwpIHZhcigtLWVlLXBhZGRpbmctbmFubykgMDt0ZXh0LWFsaWduOnJpZ2h0fS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLWRhdGUtcm93IC5lZS10YW0tZGF0ZS1sYWJlbC1kaXZ7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWF4LWhlaWdodDp2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1uYW5vKSB2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKSB2YXIoLS1lZS1wYWRkaW5nLW5hbm8pIHZhcigtLWVlLXBhZGRpbmctc21hbGwpO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246cmlnaHQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aWR0aDoxMDAlfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtY2FsZW5kYXItcGFnZS1kYXRlLXdyYXBwZXJ7bWF4LXdpZHRoOnZhcigtLWVlLXBhZGRpbmctaHVnZSk7bWluLXdpZHRoOnZhcigtLWVlLXBhZGRpbmctaHVnZSk7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1taWNybyk7cGFkZGluZzowfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLWRhdGUtbGFiZWwtdGV4dHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLWRhdGUtcm93LXRpY2tldHttYXgtd2lkdGg6NTAlO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy1uYW5vKTt0ZXh0LWFsaWduOmNlbnRlcn0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uZWUtdGFtLXRpY2tldC1yZWxhdGlvbi1idXR0b257Ym9yZGVyLXJhZGl1czowIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLXdoaXRlKTtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50O2hlaWdodDp2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpO21hcmdpbjphdXRvO21pbi13aWR0aDp2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpO3BhZGRpbmc6MDt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6MTAwJX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uZWUtdGFtLXRpY2tldC1yZWxhdGlvbi1idXR0b24gLmRhc2hpY29ue2ZsZXg6YXV0b30uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS1hc3NpZ25tZW50cy1lcnJvciwuZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS1hc3NpZ25tZW50cy1lcnJvcjphY3RpdmUsLmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tYXNzaWdubWVudHMtZXJyb3I6Zm9jdXMsLmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tYXNzaWdubWVudHMtZXJyb3I6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1ob3QtcGluaykhaW1wb3J0YW50fS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0tbm8tdGlja2V0LXJlbGF0aW9ue2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xNCkhaW1wb3J0YW50O2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JleS0xNCl9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5jb21wb25lbnRzLWljb24tYnV0dG9uLmVlLXRhbS1uby10aWNrZXQtcmVsYXRpb246YWN0aXZlLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0tbm8tdGlja2V0LXJlbGF0aW9uOmZvY3VzLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0tbm8tdGlja2V0LXJlbGF0aW9uOmhvdmVye2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3ItZ3JleS0xMCkhaW1wb3J0YW50O2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JleS0xMCkhaW1wb3J0YW50fS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0taGFzLXRpY2tldC1yZWxhdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWVlLWNvbG9yLWJsdWUpIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLXdoaXRlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWJsdWUpIWltcG9ydGFudH0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uZWUtdGFtLWhhcy10aWNrZXQtcmVsYXRpb246YWN0aXZlLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0taGFzLXRpY2tldC1yZWxhdGlvbjpmb2N1cywuZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uZWUtdGFtLWhhcy10aWNrZXQtcmVsYXRpb246aG92ZXJ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ibHVlKX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uZWUtdGFtLWFkZC10aWNrZXQtcmVsYXRpb257YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1ncmVlbikhaW1wb3J0YW50O2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3Itd2hpdGUpO2NvbG9yOnZhcigtLWVlLXRleHQtb24tZ3JlZW4taGlnaC1jb250cmFzdCkhaW1wb3J0YW50fS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0tYWRkLXRpY2tldC1yZWxhdGlvbjphY3RpdmUsLmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5jb21wb25lbnRzLWljb24tYnV0dG9uLmVlLXRhbS1hZGQtdGlja2V0LXJlbGF0aW9uOmZvY3VzLC5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5lZS10YW0tYWRkLXRpY2tldC1yZWxhdGlvbjpob3Zlcntib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZWVuKSFpbXBvcnRhbnR9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5jb21wb25lbnRzLWljb24tYnV0dG9uLmVlLXRhbS1yZW1vdmUtdGlja2V0LXJlbGF0aW9ue2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItaG90LXBpbmspIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLXdoaXRlKTtjb2xvcjp2YXIoLS1lZS10ZXh0LW9uLWhvdC1waW5rKSFpbXBvcnRhbnR9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5jb21wb25lbnRzLWljb24tYnV0dG9uLmVlLXRhbS1yZW1vdmUtdGlja2V0LXJlbGF0aW9uOmFjdGl2ZSwuZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmNvbXBvbmVudHMtaWNvbi1idXR0b24uZWUtdGFtLXJlbW92ZS10aWNrZXQtcmVsYXRpb246Zm9jdXMsLmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5jb21wb25lbnRzLWljb24tYnV0dG9uLmVlLXRhbS1yZW1vdmUtdGlja2V0LXJlbGF0aW9uOmhvdmVye2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3ItaG90LXBpbmspIWltcG9ydGFudH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc4MnB4KXsuZWUtclRhYmxlIC5lZS1yVGFibGUtYm9keSAuZWUtclRhYmxlLWJvZHktcm93Om50aC1jaGlsZCgybil7YmFja2dyb3VuZDpub25lfS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS10YW0tZGF0ZS1yb3d7bWFyZ2luLWJvdHRvbTp2YXIoLS1lZS1tYXJnaW4tc21hbGwpfS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS10YW0tZGF0ZS1yb3cgLmVlLXRhbS1kYXRlLWxhYmVse2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xMik7bWFyZ2luLWJvdHRvbTp2YXIoLS1lZS1tYXJnaW4tc21hbGwpfS5lZS1yVGFibGUgLmVlLXJUYWJsZS1ib2R5IC5lZS1yVGFibGUtYm9keS1yb3cuZWUtdGFtLXllYXItcm93e3BhZGRpbmc6MH0uZWUtclRhYmxlIC5lZS1yVGFibGUtYm9keSAuZWUtdGFtLXllYXItcm93IC5lZS1yVGFibGUtYm9keS10ZHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50O2hlaWdodDowIWltcG9ydGFudDtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctc21hbGwpIDAgMCFpbXBvcnRhbnR9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0teWVhci1yb3cgLmVlLXRhbS1kYXRlLWxhYmVse3RleHQtYWxpZ246Y2VudGVyfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLWRhdGUtcm93IC5lZS10YW0tZGF0ZS1sYWJlbC1kaXZ7ZmxleC1mbG93OnJvdy1yZXZlcnNlIG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3RleHQtYWxpZ246bGVmdH0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS1kYXRlLWxhYmVsLXRleHR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKTttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tbWljcm8pO3dpZHRoOjUwJX0uZWUtclRhYmxlIC5lZS10YW0tZGF0ZS1yb3cgLmVlLXRhbS1kYXRlLXJvdy10aWNrZXR7ZmxleDp1bnNldDttYXgtd2lkdGg6MTAwJTt0ZXh0LWFsaWduOmxlZnR9LmVlLXJUYWJsZSAuZWUtdGFtLWRhdGUtcm93IC5lZS10YW0tZGF0ZS1yb3ctdGlja2V0Om50aC1jaGlsZCgybil7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1ncmV5LTE0KX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVyIC5lZS10YW0tdGlja2V0LWhlYWRlci1kaXZ7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLW5hbm8pIHZhcigtLWVlLXBhZGRpbmctc21hbGwpIDAgMDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjEwMCV9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tdGlja2V0LWhlYWRlci10aXRsZXtoZWlnaHQ6dmFyKC0tZWUtcGFkZGluZy1iaWcpfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtdGFtLXRpY2tldC1oZWFkZXItc3RhdHVze2JvdHRvbTp1bnNldDtoZWlnaHQ6dmFyKC0tZWUtcGFkZGluZy1leHRyZW1lKTtwYWRkaW5nOjA7dG9wOjFweDt3aWR0aDo1cHh9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tdGlja2V0LWhlYWRlci1zdGF0dXMgLmVlLXRhbS10aWNrZXQtaGVhZGVyLWRhdGV7ZGlzcGxheTpub25lO3Zpc2liaWxpdHk6aGlkZGVufS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtclRhYmxlLWJvZHkgLmVlLXRhbS10aWNrZXQtaGVhZGVyLXByaWNlIC5lZS10YW0tdGlja2V0LWhlYWRlci1kYXRle2NvbG9yOmluaGVyaXQ7ZGlzcGxheTpibG9jaztmb250LXNpemU6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzowO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7dmlzaWJpbGl0eTp2aXNpYmxlfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi1oZWFkZXJ7cGFkZGluZy1sZWZ0OjE1JX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXJUYWJsZS1ib2R5LXRkIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle21pbi13aWR0aDpjYWxjKHZhcigtLWVlLXBhZGRpbmctZXh0cmVtZSkqMil9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5jb21wb25lbnRzLWljb24tYnV0dG9uLmVlLXRhbS10aWNrZXQtcmVsYXRpb24tYnV0dG9ue21hcmdpbjphdXRvIDA7bWF4LXdpZHRoOmNhbGModmFyKC0tZWUtcGFkZGluZy1leHRyZW1lKSoyKX19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo2MDBweCl7LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlciAuZWUtdGFtLXRpY2tldC1oZWFkZXItZGl2e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7d2lkdGg6MTAwJX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXRhbS1kYXRlLWxhYmVsLXRleHR7d2lkdGg6Y2FsYyg3NSUgLSB2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpKX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVye3BhZGRpbmctbGVmdDoxMCU7d2lkdGg6NTUlfS5lZS10aWNrZXQtYXNzaWdubWVudHMtbWFuYWdlciAuZWUtclRhYmxlLWJvZHktdGQgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWV7bWluLXdpZHRoOmNhbGModmFyKC0tZWUtcGFkZGluZy1odWdlKSozKTt3aWR0aDo0NSV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlciAuZWUtdGFtLXRpY2tldC1oZWFkZXItZGl2e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtdGlueSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tZWUtbGV0dGVyLXNwYWNpbmctZm9udC1zaXplLXRpbnkpO3dpZHRoOjEwMCV9LmVlLXRpY2tldC1hc3NpZ25tZW50cy1tYW5hZ2VyIC5lZS10YW0tZGF0ZS1sYWJlbC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGwpO2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KTt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpKX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXJUYWJsZS1ib2R5LXRkIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle21pbi13aWR0aDp2YXIoLS1lZS1wYWRkaW5nLWV4dHJlbWUpO3dpZHRoOjQwJX0uZWUtdGlja2V0LWFzc2lnbm1lbnRzLW1hbmFnZXIgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVye3BhZGRpbmctbGVmdDowO3dpZHRoOjYwJTttYXgtd2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tZWUtcGFkZGluZy1leHRyZW1lKSl9fSIsIi5lZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfSIsIi5lZS1kYXRlcy1saXN0LWdyaWQtdmlld3tkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwIDB9LmVlLWVkaXRvci1kYXRlLW1haW57YmFja2dyb3VuZDp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3IpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWluLWhlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSoxMi41KTtwYWRkaW5nOjAgY2FsYyh2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKSArIDhweCkgMCAwO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uZWUtZWRpdG9yLWRhdGUtZGV0YWlscy13cmFwcGVyLWRpdnthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWluLXdpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSoyNSk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXNtYWxsZXIpIHZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy1leHRyZW1lKSBjYWxjKHZhcigtLWVlLXBhZGRpbmctbWljcm8pKjM2KTt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlfS5lZS1lZGl0b3ItZGF0ZS1uYW1lLWhlYWRpbmcsLmVlLWVkaXRvci1kYXRlLW5hbWUtaGVhZGluZyAuZWUtaW5saW5lLWVkaXQtdGV4dHtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtYmlnKSFpbXBvcnRhbnQ7Zm9udC13ZWlnaHQ6NzAwIWltcG9ydGFudDtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKSFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50O21pbi1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MCAwIHZhcigtLWVlLXBhZGRpbmctdGlueSkhaW1wb3J0YW50O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2lkdGg6MTAwJX0uZWUtZWRpdG9yLWRhdGUtbmFtZS1oZWFkaW5nLmVlLWxvbmctdGl0bGUsLmVlLWVkaXRvci1kYXRlLW5hbWUtaGVhZGluZy5lZS1sb25nLXRpdGxlIC5lZS1pbmxpbmUtZWRpdC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSFpbXBvcnRhbnR9LmVlLWVkaXRvci1kYXRlLWRlc2MtZGl2e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1leHRyZW1lKS8zKSFpbXBvcnRhbnQ7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1taWNybykgMDt3aWR0aDo5NSV9LmVlLWVkaXRvci1kYXRlLWRlc2MtZGl2LmVlLWRhdGUtZGVzYy1leGNlcnB0PnNwYW57ZGlzcGxheTpibG9jazttYXgtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1leHRyZW1lKTtvdmVyZmxvdzpoaWRkZW59LmVlLWVkaXRvci1kYXRlLWRlc2MtZGl2LmVlLWRhdGUtZGVzYy1leGNlcnB0PnRleHRhcmVhe21heC1oZWlnaHQ6dW5zZXR9LmVlLWVkaXRvci1kYXRlLWxvY2F0aW9uLWRpdntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSFpbXBvcnRhbnQ7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi10aW55KSAwIWltcG9ydGFudDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6MTAwJX0uZWUtZWRpdG9yLWRhdGUtZWRpdC12ZW51ZS1saW5re2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7Zm9udC13ZWlnaHQ6NDAwIWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246bm9uZX0uZWUtZWRpdG9yLWRhdGUtZWRpdC12ZW51ZS1saW5rOmhvdmVye2NvbG9yOnZhcigtLWVlLWNvbG9yLXByaW1hcnkpfS5lZS1lZGl0b3ItZGF0ZS12ZW51ZS1uYW1lLXNwYW57Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7bWFyZ2luOjAgdmFyKC0tZWUtbWFyZ2luLXRpbnkpIDAgdmFyKC0tZWUtbWFyZ2luLW1pY3JvKX0uZWUtZWRpdG9yLWRhdGUtbG9jYXRpb24tZGl2IC5kYXNoaWNvbntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MnB4fS5lZS1lZGl0b3ItZGF0ZS1sb2NhdGlvbi1kaXYgLmVlLW1lbnUtaXRlbS1pY29uLmRhc2hpY29ucy1sb2NhdGlvbnttYXJnaW4tYm90dG9tOi0ycHh9LmVlLWVkaXRvci1kYXRlLWRldGFpbHMtc29sZC1yc3J2ZC1jYXAtZGl2e2JvdHRvbTp2YXIoLS1lZS1tYXJnaW4tbWljcm8pO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTB9LmVlLWRhdGVzLWxpc3QtZ3JpZC12aWV3IC5lZS1lZGl0b3ItZGF0ZS1hY3Rpb25zLW1lbnV7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjJweDt0b3A6MnB4fS5lZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXNvbGQtcnNydmQtY2FwLWRpdiAuZXZlbnQtZGF0ZS1yZWdpc3RyYW50cy1sYWJlbHttYXJnaW4tbGVmdDpjYWxjKHZhcigtLWVlLW1hcmdpbi1taWNybykqLTEpfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDoxMjgwcHgpey5lZS1kYXRlcy1saXN0LWdyaWQtdmlld3tmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcn19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo2MDBweCl7LmVlLWVkaXRvci1kYXRlLWRldGFpbHMtd3JhcHBlci1kaXZ7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTttaW4td2lkdGg6MzgwcHh9LmVlLWVkaXRvci1kYXRlLW5hbWUtaGVhZGluZywuZWUtZWRpdG9yLWRhdGUtbmFtZS1oZWFkaW5nIC5lZS1pbmxpbmUtZWRpdC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSFpbXBvcnRhbnR9LmVlLWVkaXRvci1kYXRlLW5hbWUtaGVhZGluZy5lZS1sb25nLXRpdGxlLC5lZS1lZGl0b3ItZGF0ZS1uYW1lLWhlYWRpbmcuZWUtbG9uZy10aXRsZSAuZWUtaW5saW5lLWVkaXQtdGV4dHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSFpbXBvcnRhbnR9LmVlLWVkaXRvci1kYXRlLWRlc2MtZGl2e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcil9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVlLWVkaXRvci1kYXRlLW1haW57ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzowO3dpZHRoOjEwMCV9LmVlLWVkaXRvci1kYXRlLWRldGFpbHMtd3JhcHBlci1kaXZ7bWluLXdpZHRoOnVuc2V0O3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy10aW55KSB2YXIoLS1lZS1wYWRkaW5nLWh1Z2UpIHZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy10aW55KX0uZWUtZGF0ZXMtbGlzdC1ncmlkLXZpZXcgLmVlLWVkaXRvci1kYXRlLWFjdGlvbnMtbWVudXt0b3A6OTRweH0uZWUtZWRpdG9yLWRhdGUtbmFtZS1oZWFkaW5ne21heC1oZWlnaHQ6dW5zZXR9LmVlLWVkaXRvci1kYXRlLWRlc2MtZGl2e21hcmdpbi10b3A6dmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpfS5lZS1lZGl0b3ItZGF0ZS1kZXRhaWxzLXNvbGQtcnNydmQtY2FwLWRpdntib3R0b206dW5zZXQ7cG9zaXRpb246cmVsYXRpdmV9fSIsIi5lZS1kYXRlcy1saXN0LWxpc3Qtdmlld3tmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO2ZvbnQtd2VpZ2h0OjQwMDttYXJnaW46dmFyKC0tZWUtbWFyZ2luLXRpbnkpIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsKTttYXgtd2lkdGg6MTAwJX0uZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcywuZWUtZWRpdG9yLWRhdGUtbGlzdC12aWV3LWRpdnttYXJnaW46MCAwIDFweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktMTQpfS5lZS1kYXRlcy1saXN0LWxpc3Qtdmlldz5kaXY6Zmlyc3Qtb2YtdHlwZXtiYWNrZ3JvdW5kOm5vbmUhaW1wb3J0YW50O2JvcmRlcjpub25lIWltcG9ydGFudH0uZWUtZGF0ZXMtbGlzdC1saXN0LXZpZXc+ZGl2Om50aC1vZi10eXBlKDJuKXtiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWdyZXktMTUpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3ItZ3JleS0xNSl9LmVlLWRhdGVzLWxpc3QtbGlzdC12aWV3PmRpdjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWdyZXktMTQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtY29sb3ItZ3JleS0xNCl9LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXN7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwfS5lZS1kYXRlLWxpc3QtaXRlbXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcik7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1leHRyZW1lKTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctdGlueSk7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVufS5lZS1kYXRlcy1saXN0LWxpc3Qtdmlldz5kaXY6Zmlyc3Qtb2YtdHlwZSAuZWUtZGF0ZS1saXN0LWl0ZW17Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7aGVpZ2h0OmF1dG87cGFkZGluZy1ib3R0b206dmFyKC0tZWUtcGFkZGluZy1taWNybyl9LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2OmZpcnN0LW9mLXR5cGV7cGFkZGluZzowO3dpZHRoOnZhcigtLWVlLXBhZGRpbmctbWljcm8pfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgyKXttaW4td2lkdGg6MjBweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjUlfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgzKXt3aWR0aDoyNSV9LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDQpLC5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSg1KXt3aWR0aDoxNSV9LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDYpLC5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSg3KSwuZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoOCl7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo2JX0uZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoOSl7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6Ny41JX0uZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoMTApe3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnZpc2libGU7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTQlfS5lZS1kYXRlLWxpc3QtaXRlbSAuZWUtaW5maW5pdHktc2lnbntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1lZS1tYXJnaW4tbWljcm8pKi0xKX0uZWUtZGF0ZS1saXN0LWl0ZW0gLmRhc2hpY29uc3ttYXJnaW46MH0uZWUtZGF0ZS1saXN0LWl0ZW0tbGFiZWx7ZGlzcGxheTpub25lfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpmaXJzdC1vZi10eXBlIC5lZS1kYXRlLWxpc3QtaXRlbS12YWx1ZXtkaXNwbGF5Om5vbmV9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjEyODBweCkgYW5kIChtaW4td2lkdGg6NDgxcHgpey5lZS1lZGl0b3ItZGF0ZS1saXN0LXZpZXctZGl2e21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1ze2ZsZXgtZmxvdzpyb3cgd3JhcH0uZWUtZGF0ZXMtbGlzdC1saXN0LXZpZXc+ZGl2OmZpcnN0LW9mLXR5cGV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZWUtZGF0ZS1saXN0LWl0ZW17aGVpZ2h0OmNhbGModmFyKC0tZWUtZm9udC1zaXplLWJpZ2dlcikqMyk7cGFkZGluZzowfS5lZS1kYXRlLWxpc3QtaXRlbSBzcGFue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbWljcm8pO3dpZHRoOjEwMCV9LmVlLWRhdGUtbGlzdC1pdGVtLWxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtmb250LXdlaWdodDo3MDA7aGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO2xlZnQ6MDtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnKTtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmxlZnQ7dG9wOjA7dmVydGljYWwtYWxpZ246dG9wfS5lZS1kYXRlLWxpc3QtaXRlbS12YWx1ZXtib3R0b206dmFyKC0tZWUtcGFkZGluZy1taWNybyk7ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWh1Z2UpO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXMgLmVlLWVkaXRvci1kYXRlLWFjdGlvbnMtbWVudXtib3R0b206dmFyKC0tZWUtcGFkZGluZy10aW55KTtsZWZ0OnZhcigtLWVlLXBhZGRpbmctdGlueSk7cG9zaXRpb246YWJzb2x1dGU7dmVydGljYWwtYWxpZ246dG9wfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpmaXJzdC1vZi10eXBle2hlaWdodDpjYWxjKHZhcigtLWVlLWZvbnQtc2l6ZS1iaWdnZXIpKjYpO3Bvc2l0aW9uOmFic29sdXRlfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgyKXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTE0KTt3aWR0aDoxMCV9LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDMpe2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktMTQpO3dpZHRoOjQwJX0uZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoNCksLmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDUpe2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktMTQpO3dpZHRoOjI1JX0uZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoNiksLmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDcpLC5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSg4KSwuZWUtZWRpdG9yLWRhdGUtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoOSl7d2lkdGg6MTUlfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgyKSBzcGFuOmZpcnN0LW9mLXR5cGUsLmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDYpIHNwYW4sLmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDcpIHNwYW4sLmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDgpIHNwYW4sLmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDkpIHNwYW57dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgxMCl7d2lkdGg6NDAlfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgxMCkgLmVlLWVkaXRvci1kYXRlLWFjdGlvbnMtbWVudXtib3R0b206dmFyKC0tZWUtcGFkZGluZy1taWNybyk7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3JpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmVlLWRhdGVzLWxpc3QtbGlzdC12aWV3PmRpdjpmaXJzdC1vZi10eXBle2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmVlLWRhdGVzLWxpc3QtbGlzdC12aWV3e2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IHdyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmVlLWVkaXRvci1kYXRlLWxpc3Qtdmlldy1kaXZ7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tZGVmYXVsdCk7bWluLXdpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjEyLjUpO3dpZHRoOjQ3LjUlfS5lZS1kYXRlcy1saXN0LWxpc3Qtdmlldz5kaXYsLmVlLWRhdGVzLWxpc3QtbGlzdC12aWV3PmRpdjpob3ZlciwuZWUtZGF0ZXMtbGlzdC1saXN0LXZpZXc+ZGl2Om50aC1vZi10eXBlKDJuKXtiYWNrZ3JvdW5kOm5vbmUhaW1wb3J0YW50O2JvcmRlcjpub25lfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1ze2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWUtYm9yZGVyLWNvbG9yKX0uZWUtZGF0ZS1saXN0LWl0ZW17bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7aGVpZ2h0OmF1dG87b3ZlcmZsb3c6dmlzaWJsZTtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctdGlueSk7dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudDt0ZXh0LW92ZXJmbG93OnVuc2V0O3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDphdXRvIWltcG9ydGFudDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmVlLWRhdGUtbGlzdC1pdGVtLWxhYmVse2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtwYWRkaW5nOjAgdmFyKC0tZWUtcGFkZGluZy10aW55KSAwIDA7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo1MCV9LmVlLWRhdGUtbGlzdC1pdGVtLXZhbHVle2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lZS1kYXRlLWxpc3QtaXRlbS12YWx1ZSAuZWUtZWRpdG9yLWRhdGUtZGV0YWlscy1yZWctdXJsLWxpbmt7bGVmdDp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpmaXJzdC1vZi10eXBlIC5lZS1kYXRlLWxpc3QtaXRlbS12YWx1ZXtkaXNwbGF5OmJsb2NrfS5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpmaXJzdC1vZi10eXBle2NvbG9yOnZhcigtLWVlLWNvbG9yLXdoaXRlKSFpbXBvcnRhbnQ7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3dpZHRoOmF1dG99LmVlLWVkaXRvci1kYXRlLWxpc3QtaXRlbXM+ZGl2OmZpcnN0LW9mLXR5cGUgLmVlLWRhdGUtbGlzdC1pdGVtLWxhYmVsLC5lZS1lZGl0b3ItZGF0ZS1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgzKXtkaXNwbGF5Om5vbmV9LmVlLWRhdGVzLWxpc3QtbGlzdC12aWV3IC5lZS1kcm9wZG93bi1tZW51LWRpdntsZWZ0OjEyJTtyaWdodDp1bnNldH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjM2MHB4KXsuZWUtZWRpdG9yLWRhdGUtbGlzdC12aWV3LWRpdnttaW4td2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMTUpO3dpZHRoOjEwMCV9LmVlLWRhdGVzLWxpc3QtbGlzdC12aWV3e2p1c3RpZnktY29udGVudDpjZW50ZXJ9fSIsIi5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvcntjb2xvcjp2YXIoLS1lZS1jb2xvci1ncmV5LTIpO2ZvbnQtc2l6ZToxcmVtO2xpbmUtaGVpZ2h0OjEuMTttYXJnaW46MCAuNXJlbSAuMjVyZW19LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5jb2wtMHttaW4td2lkdGg6ODBweDt3aWR0aDo3LjUlfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuY29sLTF7d2lkdGg6MTcuNSV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5jb2wtMiwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmNvbC0ze3dpZHRoOjI1JX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmNvbC00e3dpZHRoOjIwJX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmNvbC01e21pbi13aWR0aDoxNTBweDt3aWR0aDo1JX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1ib2R5LXRkLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXByaWNlLWFjdGlvbnMgLmNvbXBvbmVudHMtaWNvbi1idXR0b257ZGlzcGxheTppbmxpbmUtZmxleH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgdHJ7cGFkZGluZzowIDAgLjM3NXJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgdGhlYWQgdGh7bGluZS1oZWlnaHQ6MS4xO3BhZGRpbmc6LjI1cmVtIC43NXJlbSAwfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciB0ZCwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgdGZvb3QgdGh7bGluZS1oZWlnaHQ6MS4xO3BhZGRpbmc6LjI1cmVtIC4zNzVyZW19aW5wdXRbdHlwZT1kYXRlXSxpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXSxpbnB1dFt0eXBlPWRhdGV0aW1lXSxpbnB1dFt0eXBlPWVtYWlsXSxpbnB1dFt0eXBlPW1vbnRoXSxpbnB1dFt0eXBlPW51bWJlcl0saW5wdXRbdHlwZT1wYXNzd29yZF0saW5wdXRbdHlwZT1zZWFyY2hdLGlucHV0W3R5cGU9dGVsXSxpbnB1dFt0eXBlPXRleHRdLGlucHV0W3R5cGU9dGltZV0saW5wdXRbdHlwZT11cmxdLGlucHV0W3R5cGU9d2Vla10sc2VsZWN0LHRleHRhcmVhe2hlaWdodDozOHB4O21pbi1oZWlnaHQ6MzhweH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFtb3VudC5lZS1zaWduLWJlZm9yZXtwYWRkaW5nLXJpZ2h0OjIuMjVyZW19LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hbW91bnQuZWUtc2lnbi1hZnRlcntwYWRkaW5nLXJpZ2h0OjMuNzVyZW19LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1sYWJlbCAuY29sLWZvcm0tbGFiZWx7Y29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS03KTtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjVyZW07cGFkZGluZzowO3RleHQtYWxpZ246cmlnaHR9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGJ1dHRvbnttYXJnaW46LjM3NXJlbSAuNXJlbSAuMzc1cmVtIDB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIHRib2R5OmFmdGVye2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDouNXJlbTt3aWR0aDoxMDAlfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWZvb3RlciAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtcm93IC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1sYWJlbHtwYWRkaW5nOi4ycmVtIC4zNzVyZW0gMH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsLXJvdyAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWx7cGFkZGluZzouMjVyZW0gLjM3NXJlbSAwfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWZvb3RlciAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtcm93IC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbCAuZWUtY3VycmVuY3ktc2lnbntmb250LXdlaWdodDo0MDB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLW1vbmV5LWZpZWxkLmVlLXNpZ24tYWZ0ZXIsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1hZnRlcnt3aWR0aDpjYWxjKDEwMCUgLSAxLjVyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1hZnRlci5lZS1jdXJTaWduLTIsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1hZnRlci5lZS1jdXJTaWduLTJ7d2lkdGg6Y2FsYygxMDAlIC0gMi4ycmVtKSFpbXBvcnRhbnR9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLW1vbmV5LWZpZWxkLmVlLXNpZ24tYWZ0ZXIuZWUtY3VyU2lnbi0zLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYWZ0ZXIuZWUtY3VyU2lnbi0ze3dpZHRoOmNhbGMoMTAwJSAtIDIuOHJlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tNCwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tNHt3aWR0aDpjYWxjKDEwMCUgLSAzLjJyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1iZWZvcmUsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmV7d2lkdGg6Y2FsYygxMDAlIC0gM3JlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1zaWduLWJlZm9yZS5lZS1jdXJTaWduLTIsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi0ye3dpZHRoOmNhbGMoMTAwJSAtIDMuN3JlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1zaWduLWJlZm9yZS5lZS1jdXJTaWduLTMsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi0ze3dpZHRoOmNhbGMoMTAwJSAtIDQuM3JlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1zaWduLWJlZm9yZS5lZS1jdXJTaWduLTQsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi00e3dpZHRoOmNhbGMoMTAwJSAtIDQuN3JlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1zaWduLWFmdGVye21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLW1vbmV5LWZpZWxkLmVlLXNpZ24tYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjEuNXJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWFmdGVye21hcmdpbi1sZWZ0OjB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmV7bWFyZ2luLWxlZnQ6MS41cmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYmVmb3JlLmVlLWN1clNpZ24tMnttYXJnaW4tbGVmdDoyLjJyZW19LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi0ze21hcmdpbi1sZWZ0OjIuOHJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWJlZm9yZS5lZS1jdXJTaWduLTR7bWFyZ2luLWxlZnQ6My4ycmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtcGVyY2VudC1zaWduLmVlLXNpZ24tYWZ0ZXJ7ZmxvYXQ6cmlnaHR9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1wZXJjZW50LXNpZ24uZWUtc2lnbi1hZnRlci5lZS1jdXJTaWduLTJ7bWFyZ2luLXJpZ2h0Oi43NXJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXBlcmNlbnQtc2lnbi5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tM3ttYXJnaW4tcmlnaHQ6MS41cmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtcGVyY2VudC1zaWduLmVlLXNpZ24tYWZ0ZXIuZWUtY3VyU2lnbi00e21hcmdpbi1yaWdodDoyLjI1cmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtcGVyY2VudC1zaWduLmVlLXNpZ24tYmVmb3Jle2Zsb2F0OnJpZ2h0fS5lZS1hZGQtcHJpY2UtbW9kaWZpZXItYnRue3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMjVzIGVhc2U7dHJhbnNpdGlvbjpib3gtc2hhZG93IC4yNXMgZWFzZX0uZWUtdHBjLW5ldy1tb2RpZmllci11cGRhdGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci13aGl0ZSk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAycHggdmFyKC0tZWUtY29sb3ItYnJpZ2h0LWJsdWUpIWltcG9ydGFudDthbmltYXRpb246c2hha2UgLjI1cyBlYXNlIGluZmluaXRlfUBrZXlmcmFtZXMgc2hha2V7MTAlLDkwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTFweCwwLDApfTIwJSw4MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDJweCwwLDApfTMwJSw1MCUsNzAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtM3B4LDAsMCl9NDAlLDYwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoM3B4LDAsMCl9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzgycHgpey5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvcnttYXJnaW46MCAuNXJlbSAuMjVyZW0gLjI1cmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuY29sLTAsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5jb2wtMSwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmNvbC0yLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuY29sLTMsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5jb2wtNCwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmNvbC01e3dpZHRoOjEwMCV9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXByaWNlLXJvd3twYWRkaW5nLWJvdHRvbToxLjVyZW19LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXByaWNlLXJvdysuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItcHJpY2Utcm93e2JvcmRlci10b3A6MnB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktMTApO3BhZGRpbmctdG9wOjEuNXJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVye2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nLXRvcDouNXJlbTt3aWR0aDoyNSV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtYm9keS10ZCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZXt3aWR0aDo3NSV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtYm9keS10ZC5jb2wtMCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZXt3aWR0aDoyNSV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtYm9keS10ZC5jb2wtMiAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZXt3aWR0aDo1MCV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtYm9keS10ZC5jb2wtNCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZXt3aWR0aDozMyV9LmVlLXJUYWJsZSAuZWUtclRhYmxlLWJvZHkgLmVlLXJUYWJsZS1ib2R5LXRkLmVlLW51bWJlci1jb2x1bW4sLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hZGQtcHJpY2UtaWR7dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFkZC1wcmljZS1pZCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi1oZWFkZXJ7ZGlzcGxheTpub25lfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYWRkLXByaWNlLWlkIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tbGVmdDoyNSU7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFkZC1wcmljZS1hY3Rpb25zIC5jb21wb25lbnRzLWljb24tYnV0dG9uLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItcHJpY2UtYWN0aW9ucyAuY29tcG9uZW50cy1pY29uLWJ1dHRvbnt0b3A6LjM3NXJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFkZC1wcmljZS1yb3cuZWUtclRhYmxlLWJvZHktcm93e3BhZGRpbmctdG9wOjFyZW19LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hZGQtcHJpY2UtYWN0aW9ucy5lZS1yVGFibGUtYm9keS10ZCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi1oZWFkZXIsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1hY3Rpb25zLmVlLXJUYWJsZS1ib2R5LXRkIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlcntwYWRkaW5nLXRvcDoxLjI1cmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWJvZHkgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLWFkZC1wcmljZS1pZHtiYWNrZ3JvdW5kOnZhcigtLWVlLWNvbG9yLWdyZXktMTEpO21hcmdpbjowIDAgLjVyZW07cGFkZGluZzouNXJlbX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1mb290ZXIgLmVlLXJUYWJsZS1mb290ZXItcm93e2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtwYWRkaW5nOi41cmVtIDAgMH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgdGZvb3QgLmNvbC0wLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciB0Zm9vdCAuY29sLTEsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIHRmb290IC5jb2wtMntkaXNwbGF5Om5vbmU7aGVpZ2h0OjA7cGFkZGluZzowO3dpZHRoOjB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyNSV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtZm9vdGVyIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1yb3cgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFse2Rpc3BsYXk6aW5saW5lLWJsb2NrO2Zsb2F0OmxlZnQ7cGFkZGluZzouMjVyZW0gLjVyZW0gMDt3aWR0aDpjYWxjKDY2JSAtIDQwcHggLSAuNXJlbSl9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtZm9vdGVyIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1yb3cgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsLWFjdGlvbnN7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjQwcHg7d2lkdGg6NDBweH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgdGJvZHk6YWZ0ZXJ7ZGlzcGxheTpub25lO2hlaWdodDowfXRleHRhcmVhe2hlaWdodDo3NnB4O21pbi1oZWlnaHQ6NzZweH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1hZnRlciwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWFmdGVye3dpZHRoOmNhbGMoMTAwJSAtIDEuNXJlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1tb25leS1maWVsZC5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tMiwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tMnt3aWR0aDpjYWxjKDEwMCUgLSAyLjI1cmVtKSFpbXBvcnRhbnR9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLW1vbmV5LWZpZWxkLmVlLXNpZ24tYWZ0ZXIuZWUtY3VyU2lnbi0zLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYWZ0ZXIuZWUtY3VyU2lnbi0ze3dpZHRoOmNhbGMoMTAwJSAtIDNyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1hZnRlci5lZS1jdXJTaWduLTQsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1hZnRlci5lZS1jdXJTaWduLTR7d2lkdGg6Y2FsYygxMDAlIC0gMy43NXJlbSkhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYmVmb3JlLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYmVmb3JlLmVlLWN1clNpZ24tMnt3aWR0aDoxMDAlIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWJlZm9yZS5lZS1jdXJTaWduLTN7d2lkdGg6Y2FsYygxMDAlIC0gLjc1cmVtKSFpbXBvcnRhbnR9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLW1vbmV5LWZpZWxkLmVlLXNpZ24tYmVmb3JlLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYmVmb3JlLmVlLWN1clNpZ24tNHt3aWR0aDpjYWxjKDEwMCUgLSAxLjVyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi0ye3dpZHRoOmNhbGMoMTAwJSAtIDIuMjVyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi0ze3dpZHRoOmNhbGMoMTAwJSAtIDNyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi00e3dpZHRoOmNhbGMoMTAwJSAtIDMuNzVyZW0pIWltcG9ydGFudH0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXBlcmNlbnQtc2lnbi5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tMiwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXBlcmNlbnQtc2lnbi5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tMywuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXBlcmNlbnQtc2lnbi5lZS1zaWduLWFmdGVyLmVlLWN1clNpZ24tNCwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1hZnRlciwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtbW9uZXktZmllbGQuZWUtc2lnbi1iZWZvcmUsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1hZnRlciwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWJlZm9yZSwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgaW5wdXQuZWUtcGVyY2VudC1maWVsZC5lZS1zaWduLWJlZm9yZS5lZS1jdXJTaWduLTIsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIGlucHV0LmVlLXBlcmNlbnQtZmllbGQuZWUtc2lnbi1iZWZvcmUuZWUtY3VyU2lnbi0zLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciBpbnB1dC5lZS1wZXJjZW50LWZpZWxkLmVlLXNpZ24tYmVmb3JlLmVlLWN1clNpZ24tNHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjYwMHB4KXsuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1ib2R5LXRkLmNvbC0wIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle3dpZHRoOjI1JX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1ib2R5LXRkLmNvbC0yIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle3dpZHRoOjc1JX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1ib2R5LXRkLmNvbC00IC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle3dpZHRoOjUwJX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjQ4MHB4KXsuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3J7bWFyZ2luOjB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlcntmb250LXNpemU6LjlyZW19LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIHRkLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciB0aHtwYWRkaW5nOi4zNzVyZW0gLjI1cmVtfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWJvZHktdGQgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4taGVhZGVyLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtbGFiZWx7bWFyZ2luOjA7cGFkZGluZzouMjVyZW0gMCAuMjVyZW0gLjM3NXJlbTt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6MTAwJX0uZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1ib2R5LXRkLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWJvZHktdGQuY29sLTAgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWUsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtYm9keS10ZC5jb2wtMiAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi12YWx1ZSwuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3IgLmVlLXJUYWJsZS1ib2R5LXRkLmNvbC00IC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVlLC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWJvZHktdGQgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWUsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbHttYXJnaW46MDt3aWR0aDoxMDAlfS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWJvZHktdGQuY29sLTAgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWV7d2lkdGg6MzcuNSV9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1hZGQtcHJpY2UtYWN0aW9ucy5lZS1yVGFibGUtYm9keS10ZCAuZWUtclRhYmxlLW1vYmlsZS1vbmx5LWNvbHVtbi1oZWFkZXIsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1hY3Rpb25zLmVlLXJUYWJsZS1ib2R5LXRkIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLWhlYWRlcnt3aWR0aDoyNSUhaW1wb3J0YW50fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWJvZHktdGQuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItYWRkLXByaWNlLWFjdGlvbnMgLmVlLXJUYWJsZS1tb2JpbGUtb25seS1jb2x1bW4tdmFsdWUsLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtYm9keS10ZC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci1wcmljZS1hY3Rpb25zIC5lZS1yVGFibGUtbW9iaWxlLW9ubHktY29sdW1uLXZhbHVle3dpZHRoOjc1JSFpbXBvcnRhbnR9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtZm9vdGVyIC5lZS1yVGFibGUtZm9vdGVyLXJvd3tmbGV4LWZsb3c6cm93IHdyYXB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS1yVGFibGUtZm9vdGVyIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1yb3cgLmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yLXRvdGFsLWxhYmVse3BhZGRpbmc6Ljc1cmVtIC41cmVtIDB9LmVlLXRpY2tldC1wcmljZS1jYWxjdWxhdG9yIC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbC1sYWJlbCAuY29sLWZvcm0tbGFiZWx7dGV4dC1hbGlnbjpsZWZ0fS5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvciAuZWUtclRhYmxlLWZvb3RlciAuZWUtdGlja2V0LXByaWNlLWNhbGN1bGF0b3ItdG90YWwtcm93IC5lZS10aWNrZXQtcHJpY2UtY2FsY3VsYXRvci10b3RhbHt3aWR0aDpjYWxjKDEwMCUgLSA0MHB4IC0gLjVyZW0pfX0iLCIuZWUtZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfSIsIi5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyIC5lZS1maWx0ZXItYmFyLWZpbHRlci5lZS1zaG93LXRpY2tldHMtZmlsdGVye21hcmdpbi1yaWdodDouMjVyZW19LmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXIgLmVlLXRpY2tldC1kYXRlcy1jaGFpbmVkLWZpbHRlcnttYXJnaW4tcmlnaHQ6Ljc1cmVtO21hcmdpbi10b3A6MXB4fSIsIi5lZS10aWNrZXRzLWxpc3QtZ3JpZC12aWV3e2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IHdyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDttYXJnaW46dmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpIDAgMH0uZWUtZWRpdG9yLXRpY2tldC1tYWlue2JhY2tncm91bmQ6dmFyKC0tZWUtYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMTIuNSk7cGFkZGluZzowIDAgMCBjYWxjKHZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpICsgOHB4KTtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LmVlLWVkaXRvci10aWNrZXQtZGV0YWlscy13cmFwcGVyLWRpdnthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbCk7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWluLXdpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSoyNSk7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXNtYWxsZXIpIGNhbGModmFyKC0tZWUtcGFkZGluZy1taWNybykqMzYpIHZhcigtLWVlLXBhZGRpbmctZXh0cmVtZSkgdmFyKC0tZWUtcGFkZGluZy1zbWFsbGVyKTt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlfS5lZS1lZGl0b3ItdGlja2V0LW5hbWUtaGVhZGluZywuZWUtZWRpdG9yLXRpY2tldC1uYW1lLWhlYWRpbmcgLmVlLWlubGluZS1lZGl0LXRleHR7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZykhaW1wb3J0YW50O2ZvbnQtd2VpZ2h0OjcwMCFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZykhaW1wb3J0YW50O21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tbWljcm8pIDAgMCFpbXBvcnRhbnQ7bWluLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowIDAgdmFyKC0tZWUtcGFkZGluZy10aW55KSFpbXBvcnRhbnQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aWR0aDoxMDAlfS5lZS1lZGl0b3ItdGlja2V0LW5hbWUtaGVhZGluZy5lZS1sb25nLXRpdGxlLC5lZS1lZGl0b3ItdGlja2V0LW5hbWUtaGVhZGluZy5lZS1sb25nLXRpdGxlIC5lZS1pbmxpbmUtZWRpdC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSFpbXBvcnRhbnR9LmVlLWVkaXRvci10aWNrZXQtZGVzYy1kaXZ7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yLWhpZ2gtY29udHJhc3QpO2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtc21hbGxlcik7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tdGlueSk7d2lkdGg6OTAlfS5lZS1lZGl0b3ItdGlja2V0LWRlc2MtZGl2LmVlLXRpY2tldC1kZXNjLWV4Y2VycHQgc3BhbntkaXNwbGF5OmJsb2NrO21heC1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWh1Z2UpO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uZWUtZWRpdG9yLXRpY2tldC1kZXNjLWRpdi5lZS10aWNrZXQtZGVzYy1leGNlcnB0IHRleHRhcmVhe21heC1oZWlnaHQ6dW5zZXR9LmVlLXRpY2tldC1wcmljZSwuZWUtdGlja2V0LXByaWNlIC5lZS1pbmxpbmUtZWRpdC10ZXh0e2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvci1sb3ctY29udHJhc3QpIWltcG9ydGFudDtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWJpZykhaW1wb3J0YW50O2ZvbnQtd2VpZ2h0OjcwMCFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZykhaW1wb3J0YW50O21hcmdpbjowIWltcG9ydGFudDtwYWRkaW5nOjAgMCB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIWltcG9ydGFudDt0ZXh0LWFsaWduOmNlbnRlcn0uZWUtZWRpdG9yLXRpY2tldC1kZXRhaWxzLXNvbGQtcnNydmQtcXR5LWRpdntib3R0b206dmFyKC0tZWUtcGFkZGluZy1taWNybyk7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1lZS1tYXJnaW4tdGlueSkqLTEpO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTB9LmVlLWVkaXRvci10aWNrZXQtZGV0YWlscy1zb2xkLXJzcnZkLXF0eS1kaXYgLnRpY2tldC1yZWdpc3RyYW50cy1sYWJlbHttYXJnaW4tbGVmdDpjYWxjKHZhcigtLWVlLW1hcmdpbi1taWNybykqLTEpfS5lZS10aWNrZXRzLWxpc3QtZ3JpZC12aWV3IC5lZS1lZGl0b3ItdGlja2V0LWFjdGlvbnMtbWVudXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246YWJzb2x1dGU7bGVmdDp2YXIoLS1lZS1wYWRkaW5nLW1pY3JvKTt0b3A6dmFyKC0tZWUtcGFkZGluZy1taWNybyl9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjEyODBweCl7LmVlLXRpY2tldHMtbGlzdC1ncmlkLXZpZXd7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjAwcHgpey5lZS1lZGl0b3ItdGlja2V0LWRldGFpbHMtd3JhcHBlci1kaXZ7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTttaW4td2lkdGg6Y2FsYyh2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCkqMjEuMjUpfS5lZS1lZGl0b3ItdGlja2V0LW5hbWUtaGVhZGluZywuZWUtZWRpdG9yLXRpY2tldC1uYW1lLWhlYWRpbmcgLmVlLWlubGluZS1lZGl0LXRleHR7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1kZWZhdWx0KSFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpIWltcG9ydGFudH0uZWUtZWRpdG9yLXRpY2tldC1uYW1lLWhlYWRpbmcuZWUtbG9uZy10aXRsZSwuZWUtZWRpdG9yLXRpY2tldC1uYW1lLWhlYWRpbmcuZWUtbG9uZy10aXRsZSAuZWUtaW5saW5lLWVkaXQtdGV4dHtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKSFpbXBvcnRhbnR9LmVlLWVkaXRvci10aWNrZXQtZGVzYy1kaXZ7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS10aW55KX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjQ4MHB4KXsuZWUtZWRpdG9yLXRpY2tldC1tYWlue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MDt3aWR0aDoxMDAlfS5lZS1lZGl0b3ItdGlja2V0LWRldGFpbHMtd3JhcHBlci1kaXZ7bWluLXdpZHRoOnVuc2V0O3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy10aW55KSB2YXIoLS1lZS1wYWRkaW5nLXRpbnkpIHZhcigtLWVlLXBhZGRpbmctc21hbGxlcikgdmFyKC0tZWUtcGFkZGluZy1kZWZhdWx0KX0uZWUtZWRpdG9yLXRpY2tldC1uYW1lLWhlYWRpbmd7bWF4LWhlaWdodDp1bnNldH0uZWUtZWRpdG9yLXRpY2tldC1kZXNjLWRpdnttYXJnaW4tdG9wOnZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKX0uZWUtZWRpdG9yLXRpY2tldC1kZXRhaWxzLXNvbGQtcnNydmQtcXR5LWRpdntib3R0b206dW5zZXQ7cG9zaXRpb246cmVsYXRpdmV9fSIsIi5lZS10aWNrZXRzLWxpc3QtbGlzdC12aWV3e2ZvbnQtc2l6ZTp2YXIoLS1lZS1mb250LXNpemUtZGVmYXVsdCk7Zm9udC13ZWlnaHQ6NDAwO21hcmdpbjp2YXIoLS1lZS1tYXJnaW4tdGlueSkgMCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpO21heC13aWR0aDoxMDAlfS5lZS1lZGl0b3ItdGlja2V0LWxpc3Qtdmlldy1kaXZ7bWFyZ2luOjAgMCAxcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTE0KX0uZWUtdGlja2V0cy1saXN0LWxpc3Qtdmlldz5kaXY6Zmlyc3Qtb2YtdHlwZXtiYWNrZ3JvdW5kOm5vbmUhaW1wb3J0YW50O2JvcmRlcjpub25lIWltcG9ydGFudH0uZWUtdGlja2V0cy1saXN0LWxpc3Qtdmlldz5kaXY6bnRoLW9mLXR5cGUoMm4pe2JhY2tncm91bmQ6dmFyKC0tZWUtY29sb3ItZ3JleS0xNSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1jb2xvci1ncmV5LTE1KX0uZWUtdGlja2V0cy1saXN0LWxpc3Qtdmlldz5kaXY6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1lZS1jb2xvci1ncmV5LTE0KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktMTQpfS5lZS1lZGl0b3ItdGlja2V0LWxpc3QtaXRlbXN7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwfS5lZS10aWNrZXQtbGlzdC1pdGVte2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLXNtYWxsKTtsaW5lLWhlaWdodDp2YXIoLS1lZS1mb250LXNpemUtYmlnZ2VyKTtoZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWV4dHJlbWUpO3BhZGRpbmc6dmFyKC0tZWUtcGFkZGluZy10aW55KTt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW59LmVlLXRpY2tldHMtbGlzdC1saXN0LXZpZXc+ZGl2OmZpcnN0LW9mLXR5cGUgLmVlLXRpY2tldC1saXN0LWl0ZW17Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6dmFyKC0tZWUtZm9udC1zaXplLWJpZyk7aGVpZ2h0OmF1dG87cGFkZGluZy1ib3R0b206dmFyKC0tZWUtcGFkZGluZy1taWNybyl9LmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6Zmlyc3Qtb2YtdHlwZXtwYWRkaW5nOjA7d2lkdGg6dmFyKC0tZWUtcGFkZGluZy1taWNybyl9LmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoMil7bWluLXdpZHRoOjIwcHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo1JX0uZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSgzKXt3aWR0aDoyNSV9LmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoNCl7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo2JX0uZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSg1KXt3aWR0aDoxNSV9LmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoNiksLmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoNyksLmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6bnRoLW9mLXR5cGUoOCl7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo2JX0uZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zPmRpdjpudGgtb2YtdHlwZSg5KXt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDo3LjUlfS5lZS1lZGl0b3ItdGlja2V0LWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDEwKXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzp2aXNpYmxlO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjE0JX0uZWUtdGlja2V0LWxpc3QtaXRlbSAuZWUtaW5maW5pdHktc2lnbntmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1lZS1tYXJnaW4tbWljcm8pKi0xKX0uZWUtdGlja2V0LWxpc3QtaXRlbSAuZGFzaGljb25ze21hcmdpbjowfS5lZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVse2Rpc3BsYXk6bm9uZX0uZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zPmRpdjpmaXJzdC1vZi10eXBlIC5lZS10aWNrZXQtbGlzdC1pdGVtLXZhbHVle2Rpc3BsYXk6bm9uZX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MTI4MHB4KXsuZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1ze2ZsZXgtZmxvdzpyb3cgd3JhcH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjQ4MHB4KXsuZWUtdGlja2V0cy1saXN0LWxpc3Qtdmlld3tkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5lZS1lZGl0b3ItdGlja2V0LWxpc3Qtdmlldy1kaXZ7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tZGVmYXVsdCk7bWluLXdpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjEyLjUpO3dpZHRoOjQ3LjUlfS5lZS10aWNrZXRzLWxpc3QtbGlzdC12aWV3PmRpdjpmaXJzdC1vZi10eXBle2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmVlLXRpY2tldHMtbGlzdC1saXN0LXZpZXc+ZGl2LC5lZS10aWNrZXRzLWxpc3QtbGlzdC12aWV3PmRpdjpob3ZlcntiYWNrZ3JvdW5kOm5vbmUhaW1wb3J0YW50O2JvcmRlcjpub25lfS5lZS1lZGl0b3ItdGlja2V0LWxpc3QtaXRlbXN7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpfS5lZS10aWNrZXQtbGlzdC1pdGVte2xpbmUtaGVpZ2h0OnZhcigtLWVlLWZvbnQtc2l6ZS1iaWcpO2hlaWdodDphdXRvO292ZXJmbG93OnZpc2libGU7cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnQ7dGV4dC1vdmVyZmxvdzp1bnNldDt3aGl0ZS1zcGFjZTpub3JtYWw7d2lkdGg6YXV0byFpbXBvcnRhbnQ7d29yZC1icmVhazpicmVhay13b3JkfS5lZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVse2NvbG9yOnZhcigtLWVlLWRlZmF1bHQtdGV4dC1jb2xvcik7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWVlLWZvbnQtc2l6ZS1zbWFsbGVyKTtwYWRkaW5nOjAgdmFyKC0tZWUtcGFkZGluZy10aW55KSAwIDA7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDozMyV9LmVlLXRpY2tldC1saXN0LWl0ZW0tdmFsdWV7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVlLWVkaXRvci10aWNrZXQtbGlzdC1pdGVtcz5kaXY6Zmlyc3Qtb2YtdHlwZSAuZWUtdGlja2V0LWxpc3QtaXRlbS12YWx1ZXtkaXNwbGF5OmJsb2NrfS5lZS1lZGl0b3ItdGlja2V0LWxpc3QtaXRlbXM+ZGl2OmZpcnN0LW9mLXR5cGV7Y29sb3I6dmFyKC0tZWUtY29sb3Itd2hpdGUpIWltcG9ydGFudDtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctdGlueSk7d2lkdGg6YXV0b30uZWUtZWRpdG9yLXRpY2tldC1saXN0LWl0ZW1zPmRpdjpmaXJzdC1vZi10eXBlIC5lZS10aWNrZXQtbGlzdC1pdGVtLWxhYmVsLC5lZS1lZGl0b3ItdGlja2V0LWxpc3QtaXRlbXM+ZGl2Om50aC1vZi10eXBlKDMpe2Rpc3BsYXk6bm9uZX0uZWUtdGlja2V0cy1saXN0LWxpc3QtdmlldyAuZWUtZWRpdG9yLXRpY2tldC1hY3Rpb25zLW1lbnV7bGVmdDozMyU7cGFkZGluZy1sZWZ0OnZhcigtLWVlLXBhZGRpbmctdGlueSk7cmlnaHQ6dW5zZXQ7dG9wOnZhcigtLWVlLXBhZGRpbmctbmFubyl9LmVlLXRpY2tldHMtbGlzdC1saXN0LXZpZXcgLmVlLWRyb3Bkb3duLW1lbnUtZGl2e2xlZnQ6MTIlO3JpZ2h0OnVuc2V0fX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzYwcHgpey5lZS1lZGl0b3ItdGlja2V0LWxpc3Qtdmlldy1kaXZ7bWluLXdpZHRoOmNhbGModmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpKjE1KTt3aWR0aDoxMDAlfS5lZS10aWNrZXRzLWxpc3QtbGlzdC12aWV3e2p1c3RpZnktY29udGVudDpjZW50ZXJ9fSJdLCJzb3VyY2VSb290IjoiIn0=*/ \ No newline at end of file diff --git a/assets/dist/eventespresso-hocs.98b168389377d411b1bd.dist.css b/assets/dist/eventespresso-hocs.0920a94a8a19d35a9f4e.dist.css similarity index 99% rename from assets/dist/eventespresso-hocs.98b168389377d411b1bd.dist.css rename to assets/dist/eventespresso-hocs.0920a94a8a19d35a9f4e.dist.css index 4fc057521be..148355bd07d 100644 --- a/assets/dist/eventespresso-hocs.98b168389377d411b1bd.dist.css +++ b/assets/dist/eventespresso-hocs.0920a94a8a19d35a9f4e.dist.css @@ -1,4 +1,4 @@ .ee-entity-pagination{display:flex;flex-flow:row nowrap;justify-content:flex-end}.ee-entity-pagination .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.ee-entity-pagination .pagination>li{display:inline}.ee-entity-pagination .pagination>li>a,.ee-entity-pagination .pagination>li>span{position:relative;cursor:pointer;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:var(--ee-color-primary);text-decoration:none;background-color:inherit;border:1px solid var(--ee-border-color)}.ee-entity-pagination .pagination>li:first-child>a,.ee-entity-pagination .pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.ee-entity-pagination .pagination>li:last-child>a,.ee-entity-pagination .pagination>li:last-child>span{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px}.ee-entity-pagination .pagination>.disabled>a,.ee-entity-pagination .pagination>.disabled>a:focus,.ee-entity-pagination .pagination>.disabled>a:hover,.ee-entity-pagination .pagination>.disabled>span,.ee-entity-pagination .pagination>.disabled>span:focus,.ee-entity-pagination .pagination>.disabled>span:hover{color:var(--ee-color-grey-10);cursor:default;border-color:var(--ee-border-color)}.ee-entity-pagination .pagination>li>a:focus,.ee-entity-pagination .pagination>li>a:hover,.ee-entity-pagination .pagination>li>span:focus,.ee-entity-pagination .pagination>li>span:hover{background-color:var(--ee-color-grey-14);z-index:3}.ee-entity-pagination .pagination>.active>a,.ee-entity-pagination .pagination>.active>a:focus,.ee-entity-pagination .pagination>.active>a:hover,.ee-entity-pagination .pagination>.active>span,.ee-entity-pagination .pagination>.active>span:focus,.ee-entity-pagination .pagination>.active>span:hover{z-index:2;color:var(--ee-text-on-primary);background-color:var(--ee-color-primary);border-color:var(--ee-color-primary)} .ee-entity-list-filter-bar-wrapper{background:var(--ee-background-color);box-sizing:border-box;color:var(--ee-default-text-color);display:flex;flex-flow:row wrap;justify-content:space-between;padding:var(--ee-padding-tiny);border-bottom:1px solid var(--ee-color-grey-9);margin:0 0 var(--ee-margin-small)}.ee-entity-list-filter-bar,.ee-entity-list-view-bar{display:flex;flex-flow:row wrap;align-items:flex-end}.ee-entity-list-filter-bar{justify-content:flex-start}.ee-entity-list-view-bar{max-height:var(--ee-icon-button-size);justify-content:flex-end;margin:-1px calc(var(--ee-margin-micro)*-1) var(--ee-margin-smaller) 0}.ee-entity-list-filter-bar-perPage-select{text-align:right}.ee-entity-list-filter-bar .ee-filter-bar-filter{margin:0 var(--ee-margin-small) var(--ee-margin-smaller) 0;max-width:100%;white-space:pre}.ee-entity-list-view-bar .ee-filter-bar-filter{display:flex;flex-flow:row nowrap;height:var(--ee-icon-button-size);justify-content:flex-end;align-items:flex-end;margin:0 0 0 var(--ee-margin-small);max-width:100%}.ee-entity-list-view-bar .ee-search-filter{margin:0}.ee-entity-list-view-bar .ee-per-page-filter{margin-right:var(--ee-margin-micro);max-height:var(--ee-icon-button-size)}.ee-entity-list-view-bar .ee-grid-view-filter{margin:0 calc(var(--ee-margin-micro)*-1) 0 0}.ee-entity-list-view-bar .ee-grid-view-filter,.ee-entity-list-view-bar .ee-list-view-filter{height:var(--ee-icon-button-size);width:var(--ee-icon-button-size)}.ee-entity-list-view-bar .components-icon-button{color:var(--ee-default-text-color)}.ee-entity-list-view-bar .components-icon-button.active-list{color:var(--ee-color-primary)}.ee-entity-list-filter-bar-wrapper .components-base-control__label{color:var(--ee-default-text-color);font-weight:700;margin:var(--ee-margin-micro) var(--ee-margin-tiny) var(--ee-margin-micro) var(--ee-margin-micro);white-space:nowrap}.ee-entity-list-filter-bar-wrapper .components-base-control__label,.ee-entity-list-filter-bar-wrapper .components-select-control__input,.ee-entity-list-filter-bar-wrapper .components-text-control__input{display:inline-block;width:auto;max-width:100%}.ee-entity-list-filter-bar-wrapper input,.ee-entity-list-filter-bar-wrapper select{background-color:var(--ee-background-color);background-clip:padding-box;border:1px solid var(--ee-border-color);border-radius:var(--ee-border-radius-small);box-shadow:none;box-sizing:border-box!important;color:var(--ee-default-text-color);display:inline-block;font-size:var(--ee-font-size-default);line-height:1;height:var(--ee-icon-button-size)!important;padding:var(--ee-padding-micro) var(--ee-padding-tiny);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;width:100%}.ee-entity-list-filter-bar-wrapper select option{line-height:20!important;min-height:calc(var(--ee-padding-small)*30)!important;padding:calc(var(--ee-padding-small)*10) var(--ee-padding-tiny)!important}@media only screen and (max-width:1280px){.ee-entity-list-filter-bar-wrapper .components-base-control__label,.ee-entity-list-filter-bar-wrapper .components-select-control__input{display:block}.ee-entity-list-filter-bar{margin:0 0 var(--ee-margin-default)}.ee-entity-list-view-bar{max-height:118px}}@media screen and (max-width:600px){.ee-entity-list-filter-bar-wrapper{flex-flow:column nowrap;padding-bottom:var(--ee-padding-small)}.ee-entity-list-filter-bar,.ee-entity-list-view-bar{width:100%}.ee-entity-list-view-bar{flex-flow:row nowrap;justify-content:flex-start;height:calc(var(--ee-icon-button-size)*1.5);margin:0;text-align:left}.ee-entity-list-view-bar .ee-filter-bar-filter{height:auto;margin:0 var(--ee-margin-small) 0 0}}@media only screen and (max-width:480px){.ee-entity-list-filter-bar .ee-filter-bar-filter{margin:0 var(--ee-margin-small) var(--ee-margin-smaller) 0}.ee-entity-list-view-bar{flex-flow:row wrap;height:auto;max-height:unset}.ee-entity-list-view-bar .ee-filter-bar-filter{height:auto;justify-content:flex-start;margin:0 var(--ee-margin-small) var(--ee-margin-smaller) 0;max-height:unset}} -/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL3BhZ2luYXRpb24vc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuaG9jcy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvZmlsdGVyLWJhci9zdHlsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCLGFBQWEscUJBQXFCLHlCQUF5QixrQ0FBa0MscUJBQXFCLGVBQWUsY0FBYyxrQkFBa0IscUNBQXFDLGVBQWUsaUZBQWlGLGtCQUFrQixlQUFlLFdBQVcsaUJBQWlCLGlCQUFpQix1QkFBdUIsOEJBQThCLHFCQUFxQix5QkFBeUIsd0NBQXdDLHlHQUF5RyxjQUFjLDJCQUEyQiw4QkFBOEIsdUdBQXVHLGVBQWUsNEJBQTRCLCtCQUErQixxVEFBcVQsOEJBQThCLGVBQWUsb0NBQW9DLDBMQUEwTCx5Q0FBeUMsVUFBVSx5U0FBeVMsVUFBVSxnQ0FBZ0MseUNBQXlDLHFDO0FDQXIyRCxtQ0FBbUMsc0NBQXNDLHNCQUFzQixtQ0FBbUMsYUFBYSxtQkFBbUIsOEJBQThCLCtCQUErQiwrQ0FBK0Msa0NBQWtDLG9EQUFvRCxhQUFhLG1CQUFtQixxQkFBcUIsMkJBQTJCLDJCQUEyQix5QkFBeUIsc0NBQXNDLHlCQUF5Qix1RUFBdUUsMENBQTBDLGlCQUFpQixpREFBaUQsMkRBQTJELGVBQWUsZ0JBQWdCLCtDQUErQyxhQUFhLHFCQUFxQixrQ0FBa0MseUJBQXlCLHFCQUFxQixvQ0FBb0MsZUFBZSwyQ0FBMkMsU0FBUyw2Q0FBNkMsb0NBQW9DLHNDQUFzQyw4Q0FBOEMsNkNBQTZDLDRGQUE0RixrQ0FBa0MsaUNBQWlDLGlEQUFpRCxtQ0FBbUMsNkRBQTZELDhCQUE4QixtRUFBbUUsbUNBQW1DLGdCQUFnQixrR0FBa0csbUJBQW1CLDJNQUEyTSxxQkFBcUIsV0FBVyxlQUFlLG1GQUFtRiw0Q0FBNEMsNEJBQTRCLHdDQUF3Qyw0Q0FBNEMsZ0JBQWdCLGdDQUFnQyxtQ0FBbUMscUJBQXFCLHNDQUFzQyxjQUFjLDRDQUE0Qyx1REFBdUQscUVBQXFFLHNCQUFzQixXQUFXLGlEQUFpRCx5QkFBeUIsc0RBQXNELDBFQUEwRSwwQ0FBMEMsd0lBQXdJLGNBQWMsMkJBQTJCLG9DQUFvQyx5QkFBeUIsa0JBQWtCLG9DQUFvQyxtQ0FBbUMsd0JBQXdCLHVDQUF1QyxvREFBb0QsV0FBVyx5QkFBeUIscUJBQXFCLDJCQUEyQiw0Q0FBNEMsU0FBUyxnQkFBZ0IsK0NBQStDLFlBQVkscUNBQXFDLHlDQUF5QyxpREFBaUQsMkRBQTJELHlCQUF5QixtQkFBbUIsWUFBWSxpQkFBaUIsK0NBQStDLFlBQVksMkJBQTJCLDJEQUEyRCxrQiIsImZpbGUiOiJldmVudGVzcHJlc3NvLWhvY3MuOThiMTY4Mzg5Mzc3ZDQxMWIxYmQuZGlzdC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZWUtZW50aXR5LXBhZ2luYXRpb257ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjA7bWFyZ2luOjIwcHggMDtib3JkZXItcmFkaXVzOjRweH0uZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+bGl7ZGlzcGxheTppbmxpbmV9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpPmEsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpPnNwYW57cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7ZmxvYXQ6bGVmdDtwYWRkaW5nOjZweCAxMnB4O21hcmdpbi1sZWZ0Oi0xcHg7bGluZS1oZWlnaHQ6MS40Mjg1NzE0Mztjb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpfS5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saTpmaXJzdC1jaGlsZD5hLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saTpmaXJzdC1jaGlsZD5zcGFue21hcmdpbi1sZWZ0OjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHh9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpOmxhc3QtY2hpbGQ+YSwuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+bGk6bGFzdC1jaGlsZD5zcGFue21hcmdpbi1yaWdodDowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5kaXNhYmxlZD5hLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uZGlzYWJsZWQ+YTpmb2N1cywuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmRpc2FibGVkPmE6aG92ZXIsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5kaXNhYmxlZD5zcGFuLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uZGlzYWJsZWQ+c3Bhbjpmb2N1cywuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmRpc2FibGVkPnNwYW46aG92ZXJ7Y29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS0xMCk7Y3Vyc29yOmRlZmF1bHQ7Ym9yZGVyLWNvbG9yOnZhcigtLWVlLWJvcmRlci1jb2xvcil9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpPmE6Zm9jdXMsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpPmE6aG92ZXIsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpPnNwYW46Zm9jdXMsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpPnNwYW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ncmV5LTE0KTt6LWluZGV4OjN9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5hY3RpdmU+YSwuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmFjdGl2ZT5hOmZvY3VzLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uYWN0aXZlPmE6aG92ZXIsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5hY3RpdmU+c3BhbiwuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmFjdGl2ZT5zcGFuOmZvY3VzLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uYWN0aXZlPnNwYW46aG92ZXJ7ei1pbmRleDoyO2NvbG9yOnZhcigtLWVlLXRleHQtb24tcHJpbWFyeSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTtib3JkZXItY29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSl9IiwiLmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlcntiYWNrZ3JvdW5kOnZhcigtLWVlLWJhY2tncm91bmQtY29sb3IpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3IpO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IHdyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktOSk7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLC5lZS1lbnRpdHktbGlzdC12aWV3LWJhcntkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2FsaWduLWl0ZW1zOmZsZXgtZW5kfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFye2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5lZS1lbnRpdHktbGlzdC12aWV3LWJhcnttYXgtaGVpZ2h0OnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW46LTFweCBjYWxjKHZhcigtLWVlLW1hcmdpbi1taWNybykqLTEpIHZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXBlclBhZ2Utc2VsZWN0e3RleHQtYWxpZ246cmlnaHR9LmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXIgLmVlLWZpbHRlci1iYXItZmlsdGVye21hcmdpbjowIHZhcigtLWVlLW1hcmdpbi1zbWFsbCkgdmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpIDA7bWF4LXdpZHRoOjEwMCU7d2hpdGUtc3BhY2U6cHJlfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuZWUtZmlsdGVyLWJhci1maWx0ZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwO2hlaWdodDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7YWxpZ24taXRlbXM6ZmxleC1lbmQ7bWFyZ2luOjAgMCAwIHZhcigtLWVlLW1hcmdpbi1zbWFsbCk7bWF4LXdpZHRoOjEwMCV9LmVlLWVudGl0eS1saXN0LXZpZXctYmFyIC5lZS1zZWFyY2gtZmlsdGVye21hcmdpbjowfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuZWUtcGVyLXBhZ2UtZmlsdGVye21hcmdpbi1yaWdodDp2YXIoLS1lZS1tYXJnaW4tbWljcm8pO21heC1oZWlnaHQ6dmFyKC0tZWUtaWNvbi1idXR0b24tc2l6ZSl9LmVlLWVudGl0eS1saXN0LXZpZXctYmFyIC5lZS1ncmlkLXZpZXctZmlsdGVye21hcmdpbjowIGNhbGModmFyKC0tZWUtbWFyZ2luLW1pY3JvKSotMSkgMCAwfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuZWUtZ3JpZC12aWV3LWZpbHRlciwuZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmVlLWxpc3Qtdmlldy1maWx0ZXJ7aGVpZ2h0OnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpO3dpZHRoOnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbntjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3IpfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5hY3RpdmUtbGlzdHtjb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5KX0uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyIC5jb21wb25lbnRzLWJhc2UtY29udHJvbF9fbGFiZWx7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtmb250LXdlaWdodDo3MDA7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1taWNybykgdmFyKC0tZWUtbWFyZ2luLXRpbnkpIHZhcigtLWVlLW1hcmdpbi1taWNybykgdmFyKC0tZWUtbWFyZ2luLW1pY3JvKTt3aGl0ZS1zcGFjZTpub3dyYXB9LmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlciAuY29tcG9uZW50cy1iYXNlLWNvbnRyb2xfX2xhYmVsLC5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgLmNvbXBvbmVudHMtc2VsZWN0LWNvbnRyb2xfX2lucHV0LC5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgLmNvbXBvbmVudHMtdGV4dC1jb250cm9sX19pbnB1dHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDphdXRvO21heC13aWR0aDoxMDAlfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgaW5wdXQsLmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlciBzZWxlY3R7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWUtYm9yZGVyLXJhZGl1cy1zbWFsbCk7Ym94LXNoYWRvdzpub25lO2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO2xpbmUtaGVpZ2h0OjE7aGVpZ2h0OnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpIWltcG9ydGFudDtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbWljcm8pIHZhcigtLWVlLXBhZGRpbmctdGlueSk7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCxib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQ7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOjEwMCV9LmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlciBzZWxlY3Qgb3B0aW9ue2xpbmUtaGVpZ2h0OjIwIWltcG9ydGFudDttaW4taGVpZ2h0OmNhbGModmFyKC0tZWUtcGFkZGluZy1zbWFsbCkqMzApIWltcG9ydGFudDtwYWRkaW5nOmNhbGModmFyKC0tZWUtcGFkZGluZy1zbWFsbCkqMTApIHZhcigtLWVlLXBhZGRpbmctdGlueSkhaW1wb3J0YW50fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDoxMjgwcHgpey5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgLmNvbXBvbmVudHMtYmFzZS1jb250cm9sX19sYWJlbCwuZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyIC5jb21wb25lbnRzLXNlbGVjdC1jb250cm9sX19pbnB1dHtkaXNwbGF5OmJsb2NrfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFye21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLWRlZmF1bHQpfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhcnttYXgtaGVpZ2h0OjExOHB4fX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjYwMHB4KXsuZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVye2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3BhZGRpbmctYm90dG9tOnZhcigtLWVlLXBhZGRpbmctc21hbGwpfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLC5lZS1lbnRpdHktbGlzdC12aWV3LWJhcnt3aWR0aDoxMDAlfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhcntmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtoZWlnaHQ6Y2FsYyh2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKSoxLjUpO21hcmdpbjowO3RleHQtYWxpZ246bGVmdH0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmVlLWZpbHRlci1iYXItZmlsdGVye2hlaWdodDphdXRvO21hcmdpbjowIHZhcigtLWVlLW1hcmdpbi1zbWFsbCkgMCAwfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyIC5lZS1maWx0ZXItYmFyLWZpbHRlcnttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpIHZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhcntmbGV4LWZsb3c6cm93IHdyYXA7aGVpZ2h0OmF1dG87bWF4LWhlaWdodDp1bnNldH0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmVlLWZpbHRlci1iYXItZmlsdGVye2hlaWdodDphdXRvO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O21hcmdpbjowIHZhcigtLWVlLW1hcmdpbi1zbWFsbCkgdmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpIDA7bWF4LWhlaWdodDp1bnNldH19Il0sInNvdXJjZVJvb3QiOiIifQ==*/ \ No newline at end of file +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL3BhZ2luYXRpb24vc3R5bGUuY3NzIiwid2VicGFjazovL2VlanMuaG9jcy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvZmlsdGVyLWJhci9zdHlsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCLGFBQWEscUJBQXFCLHlCQUF5QixrQ0FBa0MscUJBQXFCLGVBQWUsY0FBYyxrQkFBa0IscUNBQXFDLGVBQWUsaUZBQWlGLGtCQUFrQixlQUFlLFdBQVcsaUJBQWlCLGlCQUFpQix1QkFBdUIsOEJBQThCLHFCQUFxQix5QkFBeUIsd0NBQXdDLHlHQUF5RyxjQUFjLDJCQUEyQiw4QkFBOEIsdUdBQXVHLGVBQWUsNEJBQTRCLCtCQUErQixxVEFBcVQsOEJBQThCLGVBQWUsb0NBQW9DLDBMQUEwTCx5Q0FBeUMsVUFBVSx5U0FBeVMsVUFBVSxnQ0FBZ0MseUNBQXlDLHFDO0FDQXIyRCxtQ0FBbUMsc0NBQXNDLHNCQUFzQixtQ0FBbUMsYUFBYSxtQkFBbUIsOEJBQThCLCtCQUErQiwrQ0FBK0Msa0NBQWtDLG9EQUFvRCxhQUFhLG1CQUFtQixxQkFBcUIsMkJBQTJCLDJCQUEyQix5QkFBeUIsc0NBQXNDLHlCQUF5Qix1RUFBdUUsMENBQTBDLGlCQUFpQixpREFBaUQsMkRBQTJELGVBQWUsZ0JBQWdCLCtDQUErQyxhQUFhLHFCQUFxQixrQ0FBa0MseUJBQXlCLHFCQUFxQixvQ0FBb0MsZUFBZSwyQ0FBMkMsU0FBUyw2Q0FBNkMsb0NBQW9DLHNDQUFzQyw4Q0FBOEMsNkNBQTZDLDRGQUE0RixrQ0FBa0MsaUNBQWlDLGlEQUFpRCxtQ0FBbUMsNkRBQTZELDhCQUE4QixtRUFBbUUsbUNBQW1DLGdCQUFnQixrR0FBa0csbUJBQW1CLDJNQUEyTSxxQkFBcUIsV0FBVyxlQUFlLG1GQUFtRiw0Q0FBNEMsNEJBQTRCLHdDQUF3Qyw0Q0FBNEMsZ0JBQWdCLGdDQUFnQyxtQ0FBbUMscUJBQXFCLHNDQUFzQyxjQUFjLDRDQUE0Qyx1REFBdUQscUVBQXFFLHNCQUFzQixXQUFXLGlEQUFpRCx5QkFBeUIsc0RBQXNELDBFQUEwRSwwQ0FBMEMsd0lBQXdJLGNBQWMsMkJBQTJCLG9DQUFvQyx5QkFBeUIsa0JBQWtCLG9DQUFvQyxtQ0FBbUMsd0JBQXdCLHVDQUF1QyxvREFBb0QsV0FBVyx5QkFBeUIscUJBQXFCLDJCQUEyQiw0Q0FBNEMsU0FBUyxnQkFBZ0IsK0NBQStDLFlBQVkscUNBQXFDLHlDQUF5QyxpREFBaUQsMkRBQTJELHlCQUF5QixtQkFBbUIsWUFBWSxpQkFBaUIsK0NBQStDLFlBQVksMkJBQTJCLDJEQUEyRCxrQiIsImZpbGUiOiJldmVudGVzcHJlc3NvLWhvY3MuMDkyMGE5NGE4YTE5ZDM1YTlmNGUuZGlzdC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZWUtZW50aXR5LXBhZ2luYXRpb257ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjA7bWFyZ2luOjIwcHggMDtib3JkZXItcmFkaXVzOjRweH0uZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+bGl7ZGlzcGxheTppbmxpbmV9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpPmEsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpPnNwYW57cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7ZmxvYXQ6bGVmdDtwYWRkaW5nOjZweCAxMnB4O21hcmdpbi1sZWZ0Oi0xcHg7bGluZS1oZWlnaHQ6MS40Mjg1NzE0Mztjb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpfS5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saTpmaXJzdC1jaGlsZD5hLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj5saTpmaXJzdC1jaGlsZD5zcGFue21hcmdpbi1sZWZ0OjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHh9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpOmxhc3QtY2hpbGQ+YSwuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+bGk6bGFzdC1jaGlsZD5zcGFue21hcmdpbi1yaWdodDowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5kaXNhYmxlZD5hLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uZGlzYWJsZWQ+YTpmb2N1cywuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmRpc2FibGVkPmE6aG92ZXIsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5kaXNhYmxlZD5zcGFuLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uZGlzYWJsZWQ+c3Bhbjpmb2N1cywuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmRpc2FibGVkPnNwYW46aG92ZXJ7Y29sb3I6dmFyKC0tZWUtY29sb3ItZ3JleS0xMCk7Y3Vyc29yOmRlZmF1bHQ7Ym9yZGVyLWNvbG9yOnZhcigtLWVlLWJvcmRlci1jb2xvcil9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpPmE6Zm9jdXMsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpPmE6aG92ZXIsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpPnNwYW46Zm9jdXMsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPmxpPnNwYW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1ncmV5LTE0KTt6LWluZGV4OjN9LmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5hY3RpdmU+YSwuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmFjdGl2ZT5hOmZvY3VzLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uYWN0aXZlPmE6aG92ZXIsLmVlLWVudGl0eS1wYWdpbmF0aW9uIC5wYWdpbmF0aW9uPi5hY3RpdmU+c3BhbiwuZWUtZW50aXR5LXBhZ2luYXRpb24gLnBhZ2luYXRpb24+LmFjdGl2ZT5zcGFuOmZvY3VzLC5lZS1lbnRpdHktcGFnaW5hdGlvbiAucGFnaW5hdGlvbj4uYWN0aXZlPnNwYW46aG92ZXJ7ei1pbmRleDoyO2NvbG9yOnZhcigtLWVlLXRleHQtb24tcHJpbWFyeSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5KTtib3JkZXItY29sb3I6dmFyKC0tZWUtY29sb3ItcHJpbWFyeSl9IiwiLmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlcntiYWNrZ3JvdW5kOnZhcigtLWVlLWJhY2tncm91bmQtY29sb3IpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3IpO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IHdyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzp2YXIoLS1lZS1wYWRkaW5nLXRpbnkpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWVlLWNvbG9yLWdyZXktOSk7bWFyZ2luOjAgMCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLC5lZS1lbnRpdHktbGlzdC12aWV3LWJhcntkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2FsaWduLWl0ZW1zOmZsZXgtZW5kfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFye2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5lZS1lbnRpdHktbGlzdC12aWV3LWJhcnttYXgtaGVpZ2h0OnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW46LTFweCBjYWxjKHZhcigtLWVlLW1hcmdpbi1taWNybykqLTEpIHZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXBlclBhZ2Utc2VsZWN0e3RleHQtYWxpZ246cmlnaHR9LmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXIgLmVlLWZpbHRlci1iYXItZmlsdGVye21hcmdpbjowIHZhcigtLWVlLW1hcmdpbi1zbWFsbCkgdmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpIDA7bWF4LXdpZHRoOjEwMCU7d2hpdGUtc3BhY2U6cHJlfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuZWUtZmlsdGVyLWJhci1maWx0ZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwO2hlaWdodDp2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7YWxpZ24taXRlbXM6ZmxleC1lbmQ7bWFyZ2luOjAgMCAwIHZhcigtLWVlLW1hcmdpbi1zbWFsbCk7bWF4LXdpZHRoOjEwMCV9LmVlLWVudGl0eS1saXN0LXZpZXctYmFyIC5lZS1zZWFyY2gtZmlsdGVye21hcmdpbjowfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuZWUtcGVyLXBhZ2UtZmlsdGVye21hcmdpbi1yaWdodDp2YXIoLS1lZS1tYXJnaW4tbWljcm8pO21heC1oZWlnaHQ6dmFyKC0tZWUtaWNvbi1idXR0b24tc2l6ZSl9LmVlLWVudGl0eS1saXN0LXZpZXctYmFyIC5lZS1ncmlkLXZpZXctZmlsdGVye21hcmdpbjowIGNhbGModmFyKC0tZWUtbWFyZ2luLW1pY3JvKSotMSkgMCAwfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuZWUtZ3JpZC12aWV3LWZpbHRlciwuZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmVlLWxpc3Qtdmlldy1maWx0ZXJ7aGVpZ2h0OnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpO3dpZHRoOnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbntjb2xvcjp2YXIoLS1lZS1kZWZhdWx0LXRleHQtY29sb3IpfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhciAuY29tcG9uZW50cy1pY29uLWJ1dHRvbi5hY3RpdmUtbGlzdHtjb2xvcjp2YXIoLS1lZS1jb2xvci1wcmltYXJ5KX0uZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyIC5jb21wb25lbnRzLWJhc2UtY29udHJvbF9fbGFiZWx7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtmb250LXdlaWdodDo3MDA7bWFyZ2luOnZhcigtLWVlLW1hcmdpbi1taWNybykgdmFyKC0tZWUtbWFyZ2luLXRpbnkpIHZhcigtLWVlLW1hcmdpbi1taWNybykgdmFyKC0tZWUtbWFyZ2luLW1pY3JvKTt3aGl0ZS1zcGFjZTpub3dyYXB9LmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlciAuY29tcG9uZW50cy1iYXNlLWNvbnRyb2xfX2xhYmVsLC5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgLmNvbXBvbmVudHMtc2VsZWN0LWNvbnRyb2xfX2lucHV0LC5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgLmNvbXBvbmVudHMtdGV4dC1jb250cm9sX19pbnB1dHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDphdXRvO21heC13aWR0aDoxMDAlfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgaW5wdXQsLmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlciBzZWxlY3R7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1lZS1iYWNrZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1lZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWUtYm9yZGVyLXJhZGl1cy1zbWFsbCk7Ym94LXNoYWRvdzpub25lO2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7Y29sb3I6dmFyKC0tZWUtZGVmYXVsdC10ZXh0LWNvbG9yKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6dmFyKC0tZWUtZm9udC1zaXplLWRlZmF1bHQpO2xpbmUtaGVpZ2h0OjE7aGVpZ2h0OnZhcigtLWVlLWljb24tYnV0dG9uLXNpemUpIWltcG9ydGFudDtwYWRkaW5nOnZhcigtLWVlLXBhZGRpbmctbWljcm8pIHZhcigtLWVlLXBhZGRpbmctdGlueSk7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCxib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQ7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOjEwMCV9LmVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlciBzZWxlY3Qgb3B0aW9ue2xpbmUtaGVpZ2h0OjIwIWltcG9ydGFudDttaW4taGVpZ2h0OmNhbGModmFyKC0tZWUtcGFkZGluZy1zbWFsbCkqMzApIWltcG9ydGFudDtwYWRkaW5nOmNhbGModmFyKC0tZWUtcGFkZGluZy1zbWFsbCkqMTApIHZhcigtLWVlLXBhZGRpbmctdGlueSkhaW1wb3J0YW50fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDoxMjgwcHgpey5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXIgLmNvbXBvbmVudHMtYmFzZS1jb250cm9sX19sYWJlbCwuZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVyIC5jb21wb25lbnRzLXNlbGVjdC1jb250cm9sX19pbnB1dHtkaXNwbGF5OmJsb2NrfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFye21hcmdpbjowIDAgdmFyKC0tZWUtbWFyZ2luLWRlZmF1bHQpfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhcnttYXgtaGVpZ2h0OjExOHB4fX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjYwMHB4KXsuZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci13cmFwcGVye2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3BhZGRpbmctYm90dG9tOnZhcigtLWVlLXBhZGRpbmctc21hbGwpfS5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLC5lZS1lbnRpdHktbGlzdC12aWV3LWJhcnt3aWR0aDoxMDAlfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhcntmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtoZWlnaHQ6Y2FsYyh2YXIoLS1lZS1pY29uLWJ1dHRvbi1zaXplKSoxLjUpO21hcmdpbjowO3RleHQtYWxpZ246bGVmdH0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmVlLWZpbHRlci1iYXItZmlsdGVye2hlaWdodDphdXRvO21hcmdpbjowIHZhcigtLWVlLW1hcmdpbi1zbWFsbCkgMCAwfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5lZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyIC5lZS1maWx0ZXItYmFyLWZpbHRlcnttYXJnaW46MCB2YXIoLS1lZS1tYXJnaW4tc21hbGwpIHZhcigtLWVlLW1hcmdpbi1zbWFsbGVyKSAwfS5lZS1lbnRpdHktbGlzdC12aWV3LWJhcntmbGV4LWZsb3c6cm93IHdyYXA7aGVpZ2h0OmF1dG87bWF4LWhlaWdodDp1bnNldH0uZWUtZW50aXR5LWxpc3Qtdmlldy1iYXIgLmVlLWZpbHRlci1iYXItZmlsdGVye2hlaWdodDphdXRvO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O21hcmdpbjowIHZhcigtLWVlLW1hcmdpbi1zbWFsbCkgdmFyKC0tZWUtbWFyZ2luLXNtYWxsZXIpIDA7bWF4LWhlaWdodDp1bnNldH19Il0sInNvdXJjZVJvb3QiOiIifQ==*/ \ No newline at end of file diff --git a/assets/dist/eventespresso-hocs.9fc63293a71bdd9da4e1.dist.deps.json b/assets/dist/eventespresso-hocs.27ddcb22082639d95dfd.dist.deps.json similarity index 100% rename from assets/dist/eventespresso-hocs.9fc63293a71bdd9da4e1.dist.deps.json rename to assets/dist/eventespresso-hocs.27ddcb22082639d95dfd.dist.deps.json diff --git a/assets/dist/eventespresso-hocs.9fc63293a71bdd9da4e1.dist.js b/assets/dist/eventespresso-hocs.27ddcb22082639d95dfd.dist.js similarity index 99% rename from assets/dist/eventespresso-hocs.9fc63293a71bdd9da4e1.dist.js rename to assets/dist/eventespresso-hocs.27ddcb22082639d95dfd.dist.js index 1209638e8d9..f0d8dc10eb4 100644 --- a/assets/dist/eventespresso-hocs.9fc63293a71bdd9da4e1.dist.js +++ b/assets/dist/eventespresso-hocs.27ddcb22082639d95dfd.dist.js @@ -2813,4 +2813,4 @@ module.exports = warning; /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLmhvY3Mvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9iYXNlLWNvbnRyb2wuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9maWx0ZXItYmFyL2VudGl0eS1saXN0LWZpbHRlci1iYXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9maWx0ZXItYmFyL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvZmlsdGVyLWJhci9zdHlsZS5jc3M/MjFmMiIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL2ZpbHRlci1iYXIvd2l0aC1lbnRpdHktbGlzdC1maWx0ZXItYmFyLmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvZmlsdGVyLWJhci93aXRoLWVudGl0eS1saXN0LWZpbHRlci1zdGF0ZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvbW9uZXkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9wYWdpbmF0aW9uL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvcGFnaW5hdGlvbi9zdHlsZS5jc3M/NzBlMyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL3dpdGgtbGF0ZXN0LWNoZWNraW4uanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkLmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL2p3LXJlYWN0LXBhZ2luYXRpb24vbGliL0p3UGFnaW5hdGlvbi5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL3dhcm5pbmcvd2FybmluZy5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImkxOG5cIl19Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwidmFsaWRhdG9yc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2YWx1ZU9iamVjdHNcIl19Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImNvbXBvbmVudHNcIl19Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImNvbXBvc2VcIl19Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImRhdGFcIl19Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImVsZW1lbnRcIl19Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImlzU2hhbGxvd0VxdWFsXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvZXh0ZXJuYWwge1widGhpc1wiOlwibG9kYXNoXCJ9Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6XCJSZWFjdFwifSJdLCJuYW1lcyI6WyJjdXN0b21JZCIsImNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IiwiY29tcG9zZSIsIndpdGhJbnN0YW5jZUlkIiwiV3JhcHBlZENvbXBvbmVudCIsInByb3BzIiwibGFiZWwiLCJpbnN0YW5jZUlkIiwiY2xhc3NOYW1lIiwiaGVscCIsImlkIiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwic3RyaW5nIiwib25lT2ZUeXBlIiwibnVtYmVyIiwiZGVmYXVsdFByb3BzIiwiRW50aXR5TGlzdEZpbHRlckJhciIsInNlYXJjaFRleHQiLCJzZXRTZWFyY2hUZXh0IiwiaXNGdW5jdGlvbiIsIl9fIiwicGVyUGFnZSIsInNldFBlclBhZ2UiLCJ2YWx1ZSIsInZpZXciLCJzZXRMaXN0VmlldyIsInNldEdyaWRWaWV3IiwiZW50aXR5RmlsdGVycyIsInNlYXJjaCIsImxpc3RWaWV3IiwiZ3JpZFZpZXciLCJvYmplY3QiLCJpc1JlcXVpcmVkIiwiZnVuYyIsIlBhZ2luYXRlZEVudGl0eUxpc3RXaXRoRmlsdGVyQmFyIiwiRW50aXR5TGlzdCIsInBhZ2luYXRpb25Db25maWciLCJ3aXRoRW50aXR5TGlzdEZpbHRlckJhciIsIndpdGhFbnRpdHlQYWdpbmF0aW9uIiwiUGFnaW5hdGVkRW50aXR5TGlzdFdpdGhGaWx0ZXJCYXJBbmRTdGF0ZSIsIndpdGhFbnRpdHlMaXN0RmlsdGVyU3RhdGUiLCJlbnRpdGllcyIsImZpbHRlciIsImVudGl0eSIsImVudGl0eU5hbWUiLCJuYW1lIiwidG9Mb3dlckNhc2UiLCJvdGhlclByb3BzIiwic2VhcmNoRW50aXRpZXMiLCJ3aXRoU2VsZWN0Iiwic2VsZWN0Iiwib3duUHJvcHMiLCJzdG9yZSIsImdldEZpbHRlciIsInBhcnNlSW50Iiwid2l0aERpc3BhdGNoIiwiZGlzcGF0Y2giLCJzZXRGaWx0ZXIiLCJhcnJheU9mIiwidmFsaWRhdGVOZXh0U3RhdGUiLCJuZXh0U3RhdGVSZXNwb25zZSIsIndhcm5pbmciLCJoYXNPd25Qcm9wZXJ0eSIsImlzQXJyYXkiLCJjb252ZXJ0ZWRWYWx1ZXMiLCJ3aXRoTW9uZXkiLCJwcm9wTmFtZU1hcCIsIkVuaGFuY2VkQ29tcG9uZW50IiwibmV4dFN0YXRlIiwiTW9uZXkiLCJmb3JFYWNoIiwicHJvcE5hbWUiLCJTaXRlQ3VycmVuY3kiLCJwdXNoIiwidG9OdW1iZXIiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJpc1NoYWxsb3dFcXVhbEFycmF5cyIsInNldFN0YXRlIiwiZ2V0TmV4dFN0YXRlIiwic2hvdWxkVXBkYXRlU3RhdGVXaXRoQ29udmVydGVkVmFsdWVzIiwic3RhdGUiLCJlbnRpdHlQYWdlIiwibmV4dFByb3BzIiwiaXNFcXVhbCIsImVudGl0aWVzUGVyUGFnZSIsInBvc2l0aW9uIiwibGFiZWxzIiwiZmlyc3QiLCJsYXN0IiwicHJldmlvdXMiLCJuZXh0Iiwibm9SZXN1bHRzVGV4dCIsInJldHVybkFzUHJvcCIsInBhZ2luYXRpb24iLCJvblBhZ2luYXRpb25DaGFuZ2UiLCJ0b3BQYWdpbmF0aW9uIiwiYm90dG9tUGFnaW5hdGlvbiIsImFycmF5Iiwid2l0aExhdGVzdENoZWNraW4iLCJyZWdpc3RyYXRpb24iLCJkYXRldGltZUlkIiwiaXNNb2RlbEVudGl0eU9mTW9kZWwiLCJnZXRMYXRlc3RDaGVja2luIiwiaGFzRmluaXNoZWRSZXNvbHV0aW9uIiwiY2hlY2tJbkVudGl0eSIsImNoZWNraW5FbnRpdHkiLCJoYXNSZXNvbHZlZENoZWNraW4iLCJ0b2dnbGVDaGVja2luIiwib25DbGljayJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUEwQyxnQ0FBZ0M7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBd0Qsa0JBQWtCO0FBQzFFO0FBQ0EseURBQWlELGNBQWM7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUF5QyxpQ0FBaUM7QUFDMUUsd0hBQWdILG1CQUFtQixFQUFFO0FBQ3JJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7OztBQUdBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQTs7O0FBR0E7QUFL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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxVQUFVLEtBQXFDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHNCQUFzQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsSUFBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQkFBcUIsMkJBQTJCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQyw0RkFBNEYsU0FBTTtBQUM3STtBQUNBOztBQUVBLG1CQUFtQixnQ0FBZ0M7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLGdDQUFnQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7QUM5a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLElBQXFDO0FBQ3pDLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1RkFBMkI7QUFDdEQsQ0FBQyxNQUFNLEVBSU47Ozs7Ozs7Ozs7Ozs7QUNsQkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViOztBQUVBOzs7Ozs7Ozs7Ozs7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7OztBQUliLElBQUksSUFBcUM7QUFDekM7QUFDQTs7QUFFQSw4Q0FBOEMsY0FBYzs7QUFFNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNGQUFzRixhQUFhO0FBQ25HO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRGQUE0RixlQUFlO0FBQzNHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7Ozs7Ozs7Ozs7Ozs7QUNsT2E7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDO0FBQ0QsbUJBQW1CLG1CQUFPLENBQUMsa0hBQStCO0FBQzFEOzs7Ozs7Ozs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLGFBQW9COztBQUVsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixXQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixXQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7QUM3REEsYUFBYSx1Q0FBdUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F0RCxhQUFhLDZDQUE2QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQTVELGFBQWEsK0NBQStDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBOUQsYUFBYSwyQ0FBMkMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0ExRCxhQUFhLHdDQUF3QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXZELGFBQWEscUNBQXFDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBcEQsYUFBYSx3Q0FBd0MsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F2RCxhQUFhLCtDQUErQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQTlELGFBQWEsaUNBQWlDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBaEQsYUFBYSxnQ0FBZ0MsRUFBRSxJIiwiZmlsZSI6ImV2ZW50ZXNwcmVzc28taG9jcy45ZmM2MzI5M2E3MWJkZDlkYTRlMS5kaXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL2luZGV4LmpzXCIpO1xuIiwiLyoqXG4gKiBXb3JkUHJlc3MgSW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRjb21wb3NlLFxuXHRjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCxcblx0d2l0aEluc3RhbmNlSWQsXG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgQmFzZUNvbnRyb2wgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuXG4vKipcbiAqIEV4dGVybmFsIEltcG9ydHNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgKCBjdXN0b21JZCA9ICcnICkgPT4gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoSW5zdGFuY2VJZCxcblx0XHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiB7XG5cdFx0XHRyZXR1cm4gY2xhc3MgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRcdFx0XHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdFx0XHRcdGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRcdGluc3RhbmNlSWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRcdFx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRcdF0gKSxcblx0XHRcdFx0XHRjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRcdFx0aGVscDogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuXHRcdFx0XHRcdGxhYmVsOiBXcmFwcGVkQ29tcG9uZW50LmRlZmF1bHRQcm9wcyAmJlxuXHRcdFx0XHRcdFx0V3JhcHBlZENvbXBvbmVudC5kZWZhdWx0UHJvcHMubGFiZWwgP1xuXHRcdFx0XHRcdFx0V3JhcHBlZENvbXBvbmVudC5kZWZhdWx0UHJvcHMubGFiZWwgOlxuXHRcdFx0XHRcdFx0JycsXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0cmVuZGVyKCkge1xuXHRcdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRcdGxhYmVsLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2VJZCxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0XHRcdGhlbHAsXG5cdFx0XHRcdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0XHRcdFx0Y29uc3QgaWQgPSBgaW5zcGVjdG9yLSR7IGN1c3RvbUlkIH0tY29udHJvbC0keyBpbnN0YW5jZUlkIH1gO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QmFzZUNvbnRyb2xcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBsYWJlbCB9XG5cdFx0XHRcdFx0XHRcdGlkPXsgaWQgfVxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9eyBjbGFzc05hbWUgfVxuXHRcdFx0XHRcdFx0XHRoZWxwPXsgaGVscCB9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxXcmFwcGVkQ29tcG9uZW50IHsgLi4udGhpcy5wcm9wcyB9IGxhYmVsPXsgJycgfSBpZD17IGlkIH0gLz5cblx0XHRcdFx0XHRcdDwvQmFzZUNvbnRyb2w+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9LFxuXHRdICksXG5cdCd3aXRoQmFzZUNvbnRyb2wnXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiwgU2VsZWN0Q29udHJvbCwgVGV4dENvbnRyb2wgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5cbi8qKlxuICogRW50aXR5TGlzdEZpbHRlckJhclxuICogYSBncm91cCBvZiBpbnB1dHMgZm9yIGNvbnRyb2xsaW5nIGhvdyBhIGxpc3Qgb2YgZW50aXRpZXMgaXMgZGlzcGxheWVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eUZpbHRlcnMgYWRkaXRpb25hbCBlbnRpdHkgc3BlY2lmaWMgZmlsdGVyc1xuICogQHBhcmFtIHtudW1iZXJ9IHBlclBhZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSB2aWV3XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRQZXJQYWdlIGNhbGxiYWNrIGZvciBwZXJQYWdlIGlucHV0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRMaXN0VmlldyBjYWxsYmFjayBmb3IgbGlzdCB2aWV3IGljb24gYnV0dG9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRHcmlkVmlldyBjYWxsYmFjayBmb3IgZ3JpZCB2aWV3IGljb24gYnV0dG9uXG4gKiBAcmV0dXJuIHtPYmplY3R9IEVudGl0eUxpc3RGaWx0ZXJCYXJcbiAqL1xuY2xhc3MgRW50aXR5TGlzdEZpbHRlckJhciBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0ZW50aXR5RmlsdGVyczogUHJvcFR5cGVzLm9iamVjdCxcblx0XHRwZXJQYWdlOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cdFx0dmlldzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdHNldFBlclBhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c2V0TGlzdFZpZXc6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c2V0R3JpZFZpZXc6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXh0XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldFNlYXJjaFRleHRcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBzZWFyY2ggaW5wdXRcblx0ICovXG5cdHNlYXJjaCA9ICggc2VhcmNoVGV4dCwgc2V0U2VhcmNoVGV4dCApID0+IHtcblx0XHRyZXR1cm4gaXNGdW5jdGlvbiggc2V0U2VhcmNoVGV4dCApID8gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8VGV4dENvbnRyb2xcblx0XHRcdFx0XHRsYWJlbD17IF9fKCAnc2VhcmNoJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXNlYXJjaFwiXG5cdFx0XHRcdFx0dmFsdWU9eyBzZWFyY2hUZXh0IH1cblx0XHRcdFx0XHRvbkNoYW5nZT17IHNldFNlYXJjaFRleHQgfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpIDogbnVsbDtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBlclBhZ2Vcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0UGVyUGFnZVxuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHBlclBhZ2Ugc2VsZWN0IGlucHV0XG5cdCAqL1xuXHRwZXJQYWdlID0gKCBwZXJQYWdlLCBzZXRQZXJQYWdlICkgPT4gKFxuXHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRsYWJlbD17IF9fKCAncGVyIHBhZ2UnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0Y2xhc3NOYW1lPVwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci1wZXJQYWdlLXNlbGVjdFwiXG5cdFx0XHR2YWx1ZT17IHBlclBhZ2UgfVxuXHRcdFx0b3B0aW9ucz17IFtcblx0XHRcdFx0eyB2YWx1ZTogMiwgbGFiZWw6IDIgfSxcblx0XHRcdFx0eyB2YWx1ZTogNiwgbGFiZWw6IDYgfSxcblx0XHRcdFx0eyB2YWx1ZTogMTIsIGxhYmVsOiAxMiB9LFxuXHRcdFx0XHR7IHZhbHVlOiAyNCwgbGFiZWw6IDI0IH0sXG5cdFx0XHRcdHsgdmFsdWU6IDQ4LCBsYWJlbDogNDggfSxcblx0XHRcdF0gfVxuXHRcdFx0b25DaGFuZ2U9eyBzZXRQZXJQYWdlIH1cblx0XHQvPlxuXHQpO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdmlld1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRMaXN0Vmlld1xuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGxpc3QgdmlldyBpY29uIGJ1dHRvblxuXHQgKi9cblx0bGlzdFZpZXcgPSAoIHZpZXcsIHNldExpc3RWaWV3ICkgPT4gKFxuXHRcdDxJY29uQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9eyB2aWV3ID09PSAnbGlzdCcgPyAnYWN0aXZlLWxpc3QnIDogJycgfVxuXHRcdFx0aWNvbj1cImVkaXRvci1qdXN0aWZ5XCJcblx0XHRcdHRvb2x0aXA9eyBfXyggJ2xpc3QgdmlldycsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRvbkNsaWNrPXsgc2V0TGlzdFZpZXcgfVxuXHRcdC8+XG5cdCk7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2aWV3XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldEdyaWRWaWV3XG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZ3JpZCB2aWV3IGljb24gYnV0dG9uXG5cdCAqL1xuXHRncmlkVmlldyA9ICggdmlldywgc2V0R3JpZFZpZXcgKSA9PiAoXG5cdFx0PEljb25CdXR0b25cblx0XHRcdGNsYXNzTmFtZT17IHZpZXcgPT09ICdncmlkJyA/ICdhY3RpdmUtbGlzdCcgOiAnJyB9XG5cdFx0XHRpY29uPVwic2NyZWVub3B0aW9uc1wiXG5cdFx0XHR0b29sdGlwPXsgX18oICdncmlkIHZpZXcnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0b25DbGljaz17IHNldEdyaWRWaWV3IH1cblx0XHQvPlxuXHQpO1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRzZWFyY2hUZXh0ID0gJycsXG5cdFx0XHRzZXRTZWFyY2hUZXh0LFxuXHRcdFx0cGVyUGFnZSxcblx0XHRcdHZpZXcsXG5cdFx0XHRzZXRQZXJQYWdlLFxuXHRcdFx0c2V0TGlzdFZpZXcsXG5cdFx0XHRzZXRHcmlkVmlldyxcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRjb25zdCBlbnRpdHlGaWx0ZXJzID0gdGhpcy5wcm9wcy5lbnRpdHlGaWx0ZXJzID9cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhclwiPlxuXHRcdFx0XHR7IHRoaXMucHJvcHMuZW50aXR5RmlsdGVycyB9XG5cdFx0XHQ8L2Rpdj4gOlxuXHRcdFx0bnVsbDtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXJcIj5cblx0XHRcdFx0eyBlbnRpdHlGaWx0ZXJzIH1cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1lbnRpdHktbGlzdC12aWV3LWJhclwiPlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImVlLXNlYXJjaC1maWx0ZXIgZWUtZmlsdGVyLWJhci1maWx0ZXJcIj5cblx0XHRcdFx0XHRcdHsgdGhpcy5zZWFyY2goIHNlYXJjaFRleHQsIHNldFNlYXJjaFRleHQgKSB9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtcGVyLXBhZ2UtZmlsdGVyIGVlLWZpbHRlci1iYXItZmlsdGVyXCI+XG5cdFx0XHRcdFx0XHR7IHRoaXMucGVyUGFnZSggcGVyUGFnZSwgc2V0UGVyUGFnZSApIH1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS12aWV3LWZpbHRlciBlZS1maWx0ZXItYmFyLWZpbHRlclwiPlxuXHRcdFx0XHRcdFx0eyB0aGlzLmxpc3RWaWV3KCB2aWV3LCBzZXRMaXN0VmlldyApIH1cblx0XHRcdFx0XHRcdHsgdGhpcy5ncmlkVmlldyggdmlldywgc2V0R3JpZFZpZXcgKSB9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBFbnRpdHlMaXN0RmlsdGVyQmFyO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRlZmF1bHQgYXMgd2l0aEVudGl0eVBhZ2luYXRpb24gfSBmcm9tICcuLi9wYWdpbmF0aW9uJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0ZGVmYXVsdCBhcyB3aXRoRW50aXR5TGlzdEZpbHRlckJhcixcbn0gZnJvbSAnLi93aXRoLWVudGl0eS1saXN0LWZpbHRlci1iYXInO1xuaW1wb3J0IHtcblx0ZGVmYXVsdCBhcyB3aXRoRW50aXR5TGlzdEZpbHRlclN0YXRlLFxufSBmcm9tICcuL3dpdGgtZW50aXR5LWxpc3QtZmlsdGVyLXN0YXRlJztcblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRlZEVudGl0eUxpc3RXaXRoRmlsdGVyQmFyID0gKFxuXHRFbnRpdHlMaXN0LFxuXHRwYWdpbmF0aW9uQ29uZmlnID0ge30sXG4pID0+IHdpdGhFbnRpdHlMaXN0RmlsdGVyQmFyKFxuXHR3aXRoRW50aXR5UGFnaW5hdGlvbiggcGFnaW5hdGlvbkNvbmZpZyApKCBFbnRpdHlMaXN0IClcbik7XG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0ZWRFbnRpdHlMaXN0V2l0aEZpbHRlckJhckFuZFN0YXRlID0gKFxuXHRFbnRpdHlMaXN0LFxuXHRwYWdpbmF0aW9uQ29uZmlnID0ge30sXG4pID0+IHdpdGhFbnRpdHlMaXN0RmlsdGVyU3RhdGUoIHdpdGhFbnRpdHlMaXN0RmlsdGVyQmFyKFxuXHR3aXRoRW50aXR5UGFnaW5hdGlvbiggcGFnaW5hdGlvbkNvbmZpZyApKCBFbnRpdHlMaXN0IClcbikgKTtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbnRpdHlMaXN0RmlsdGVyQmFyIH0gZnJvbSAnLi9lbnRpdHktbGlzdC1maWx0ZXItYmFyJztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXJcIjpcImVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlclwiLFwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhclwiOlwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhclwiLFwiZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJcIjpcImVlLWVudGl0eS1saXN0LXZpZXctYmFyXCIsXCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXBlclBhZ2Utc2VsZWN0XCI6XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXBlclBhZ2Utc2VsZWN0XCIsXCJlZS1maWx0ZXItYmFyLWZpbHRlclwiOlwiZWUtZmlsdGVyLWJhci1maWx0ZXJcIixcImVlLXNlYXJjaC1maWx0ZXJcIjpcImVlLXNlYXJjaC1maWx0ZXJcIixcImVlLXBlci1wYWdlLWZpbHRlclwiOlwiZWUtcGVyLXBhZ2UtZmlsdGVyXCIsXCJlZS1ncmlkLXZpZXctZmlsdGVyXCI6XCJlZS1ncmlkLXZpZXctZmlsdGVyXCIsXCJlZS1saXN0LXZpZXctZmlsdGVyXCI6XCJlZS1saXN0LXZpZXctZmlsdGVyXCIsXCJjb21wb25lbnRzLWljb24tYnV0dG9uXCI6XCJjb21wb25lbnRzLWljb24tYnV0dG9uXCIsXCJhY3RpdmUtbGlzdFwiOlwiYWN0aXZlLWxpc3RcIixcImNvbXBvbmVudHMtYmFzZS1jb250cm9sX19sYWJlbFwiOlwiY29tcG9uZW50cy1iYXNlLWNvbnRyb2xfX2xhYmVsXCIsXCJjb21wb25lbnRzLXNlbGVjdC1jb250cm9sX19pbnB1dFwiOlwiY29tcG9uZW50cy1zZWxlY3QtY29udHJvbF9faW5wdXRcIixcImNvbXBvbmVudHMtdGV4dC1jb250cm9sX19pbnB1dFwiOlwiY29tcG9uZW50cy10ZXh0LWNvbnRyb2xfX2lucHV0XCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFbnRpdHlMaXN0RmlsdGVyQmFyIH0gZnJvbSAnLi9lbnRpdHktbGlzdC1maWx0ZXItYmFyJztcblxuLyoqXG4gKiB3aXRoRW50aXR5TGlzdEZpbHRlckJhclxuICogSGlnaGVyLU9yZGVyLUNvbXBvbmVudCB0aGF0IHdyYXBzIGFuIEVudGl0eUxpc3QgY29tcG9uZW50XG4gKiBmb3IgY2hhbmdpbmcgaG93IHRoZSBFbnRpdHlMaXN0IGlzIHZpZXdlZFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gRW50aXR5TGlzdCB3aXRoIGFkZGVkIEVudGl0eUxpc3RGaWx0ZXJCYXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdCggRW50aXR5TGlzdCApID0+IHtcblx0XHRyZXR1cm4gY2xhc3MgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRcdFx0c2VhcmNoRW50aXRpZXMgPSAoIHNlYXJjaFRleHQsIGVudGl0aWVzICkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gc2VhcmNoVGV4dCAhPT0gJycgP1xuXHRcdFx0XHRcdGVudGl0aWVzLmZpbHRlciggKCBlbnRpdHkgKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlOYW1lID0gZW50aXR5Lm5hbWUgPyBlbnRpdHkubmFtZSA6ICcnO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVudGl0eU5hbWUudG9Mb3dlckNhc2UoKS5zZWFyY2goXG5cdFx0XHRcdFx0XHRcdHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSApICE9PSAtMTtcblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGVudGl0aWVzO1xuXHRcdFx0fTtcblxuXHRcdFx0cmVuZGVyKCkge1xuXHRcdFx0XHRsZXQgeyBlbnRpdGllcyB9ID0gdGhpcy5wcm9wcztcblx0XHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRcdHNlYXJjaFRleHQsXG5cdFx0XHRcdFx0c2V0U2VhcmNoVGV4dCxcblx0XHRcdFx0XHRwZXJQYWdlLFxuXHRcdFx0XHRcdHZpZXcsXG5cdFx0XHRcdFx0c2V0UGVyUGFnZSxcblx0XHRcdFx0XHRzZXRMaXN0Vmlldyxcblx0XHRcdFx0XHRzZXRHcmlkVmlldyxcblx0XHRcdFx0XHQuLi5vdGhlclByb3BzXG5cdFx0XHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdFx0XHRlbnRpdGllcyA9IGlzRnVuY3Rpb24oIHNldFNlYXJjaFRleHQgKSA/XG5cdFx0XHRcdFx0dGhpcy5zZWFyY2hFbnRpdGllcyggc2VhcmNoVGV4dCwgZW50aXRpZXMgKSA6XG5cdFx0XHRcdFx0ZW50aXRpZXM7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHRcdFx0PEVudGl0eUxpc3RGaWx0ZXJCYXJcblx0XHRcdFx0XHRcdFx0c2VhcmNoVGV4dD17IHNlYXJjaFRleHQgfVxuXHRcdFx0XHRcdFx0XHRzZXRTZWFyY2hUZXh0PXsgc2V0U2VhcmNoVGV4dCB9XG5cdFx0XHRcdFx0XHRcdHBlclBhZ2U9eyBwZXJQYWdlIH1cblx0XHRcdFx0XHRcdFx0dmlldz17IHZpZXcgfVxuXHRcdFx0XHRcdFx0XHRzZXRQZXJQYWdlPXsgc2V0UGVyUGFnZSB9XG5cdFx0XHRcdFx0XHRcdHNldExpc3RWaWV3PXsgc2V0TGlzdFZpZXcgfVxuXHRcdFx0XHRcdFx0XHRzZXRHcmlkVmlldz17IHNldEdyaWRWaWV3IH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8RW50aXR5TGlzdFxuXHRcdFx0XHRcdFx0XHRlbnRpdGllcz17IGVudGl0aWVzIH1cblx0XHRcdFx0XHRcdFx0ZW50aXRpZXNQZXJQYWdlPXsgcGVyUGFnZSB9XG5cdFx0XHRcdFx0XHRcdHZpZXc9eyB2aWV3IH1cblx0XHRcdFx0XHRcdFx0bm9SZXN1bHRzVGV4dD17XG5cdFx0XHRcdFx0XHRcdFx0X18oXG5cdFx0XHRcdFx0XHRcdFx0XHQnbm8gcmVzdWx0cyBmb3VuZCAodHJ5IGNoYW5naW5nIGZpbHRlcnMpJyxcblx0XHRcdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9LFxuXHQnd2l0aEVudGl0eUxpc3RGaWx0ZXJCYXInXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQsIGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgd2l0aFNlbGVjdCwgd2l0aERpc3BhdGNoIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcblxuLyoqXG4gKiB3aXRoRW50aXR5TGlzdEZpbHRlclN0YXRlXG4gKiBIaWdoZXItT3JkZXItQ29tcG9uZW50IHRoYXQgd3JhcHMgYW4gXCJFbnRpdHlMaXN0RmlsdGVyQmFyXCIgY29tcG9uZW50XG4gKiBpbiBvcmRlciB0byBwcm92aWRlIHN0YXRlIG1hbmFnZW1lbnQgZm9yIGl0IGFuZCBpdHMgY2hpbGRyZW5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gV3JhcHBlZENvbXBvbmVudFxuICogQHJldHVybiB7T2JqZWN0fSBXcmFwcGVkQ29tcG9uZW50IHdpdGggYWRkZWQgRW50aXR5TGlzdEZpbHRlclN0YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHRjb21wb3NlKCBbXG5cdFx0d2l0aFNlbGVjdCggKCBzZWxlY3QsIG93blByb3BzICkgPT4ge1xuXHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRzZWFyY2hUZXh0ID0gJycsXG5cdFx0XHRcdHBlclBhZ2UgPSA2LFxuXHRcdFx0XHR2aWV3ID0gJ2dyaWQnLFxuXHRcdFx0fSA9IG93blByb3BzO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlYXJjaFRleHQ6IHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdzZWFyY2hUZXh0Jyxcblx0XHRcdFx0XHRzZWFyY2hUZXh0XG5cdFx0XHRcdCksXG5cdFx0XHRcdHBlclBhZ2U6IHBhcnNlSW50KFxuXHRcdFx0XHRcdHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHRcdCdlbnRpdHktbGlzdCcsXG5cdFx0XHRcdFx0XHQncGVyUGFnZScsXG5cdFx0XHRcdFx0XHRwZXJQYWdlXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHQxMFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR2aWV3OiBzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2VudGl0eS1saXN0Jyxcblx0XHRcdFx0XHQndmlldycsXG5cdFx0XHRcdFx0dmlld1xuXHRcdFx0XHQpLFxuXHRcdFx0fTtcblx0XHR9ICksXG5cdFx0d2l0aERpc3BhdGNoKCAoIGRpc3BhdGNoICkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBkaXNwYXRjaCggJ2V2ZW50ZXNwcmVzc28vZmlsdGVyLXN0YXRlJyApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2V0U2VhcmNoVGV4dDogKCBzZWFyY2hUZXh0ICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdlbnRpdHktbGlzdCcsXG5cdFx0XHRcdFx0J3NlYXJjaFRleHQnLFxuXHRcdFx0XHRcdHNlYXJjaFRleHRcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0UGVyUGFnZTogKCBwZXJQYWdlICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdlbnRpdHktbGlzdCcsXG5cdFx0XHRcdFx0J3BlclBhZ2UnLFxuXHRcdFx0XHRcdHBhcnNlSW50KCBwZXJQYWdlLCAxMCApXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldExpc3RWaWV3OiAoKSA9PiBzdG9yZS5zZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2VudGl0eS1saXN0Jyxcblx0XHRcdFx0XHQndmlldycsXG5cdFx0XHRcdFx0J2xpc3QnXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldEdyaWRWaWV3OiAoKSA9PiBzdG9yZS5zZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2VudGl0eS1saXN0Jyxcblx0XHRcdFx0XHQndmlldycsXG5cdFx0XHRcdFx0J2dyaWQnXG5cdFx0XHRcdCksXG5cdFx0XHR9O1xuXHRcdH0gKSxcblx0XHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiB7XG5cdFx0XHRyZXR1cm4gY2xhc3MgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRcdFx0XHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdFx0XHRcdGVudGl0aWVzOiBQcm9wVHlwZXMuYXJyYXlPZiggUHJvcFR5cGVzLm9iamVjdCApLmlzUmVxdWlyZWQsXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJlbmRlcigpIHtcblx0XHRcdFx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnQgeyAuLi50aGlzLnByb3BzIH0gLz47XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSxcblx0XSApLFxuXHQnd2l0aEVudGl0eUxpc3RGaWx0ZXJTdGF0ZSdcbik7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhCYXNlQ29udHJvbCB9IGZyb20gJy4vYmFzZS1jb250cm9sJztcbmV4cG9ydCB7XG5cdFBhZ2luYXRlZEVudGl0eUxpc3RXaXRoRmlsdGVyQmFyLFxuXHRQYWdpbmF0ZWRFbnRpdHlMaXN0V2l0aEZpbHRlckJhckFuZFN0YXRlLFxuXHRFbnRpdHlMaXN0RmlsdGVyQmFyLFxufSBmcm9tICcuL2ZpbHRlci1iYXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoRW50aXR5UGFnaW5hdGlvbiB9IGZyb20gJy4vcGFnaW5hdGlvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhMYXRlc3RDaGVja2luIH0gZnJvbSAnLi93aXRoLWxhdGVzdC1jaGVja2luJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aE1vbmV5IH0gZnJvbSAnLi9tb25leSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGlzU2hhbGxvd0VxdWFsQXJyYXlzIGZyb20gJ0B3b3JkcHJlc3MvaXMtc2hhbGxvdy1lcXVhbCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcbmltcG9ydCB7IE1vbmV5LCBTaXRlQ3VycmVuY3kgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcblxuLyoqXG4gKiBUaGlzIHZhbGlkYXRlcyB3aGV0aGVyIHRoZSBuZXh0U3RhdGVSZXNwb25zZSBpcyBpbiB0aGUgZXhwZWN0ZWQgc2hhcGUuXG4gKiBJZiBhbnkgb2YgdGhlIHZhbGlkYXRpb24gZmFpbHMsIHRoZW4gYSBjb25zb2xlLmVycm9yIGlzIHRyaWdnZXJlZCAodmlhXG4gKiB3YXJuaW5nKVxuICpcbiAqIEBwYXJhbSB7e319IG5leHRTdGF0ZVJlc3BvbnNlXG4gKi9cbmNvbnN0IHZhbGlkYXRlTmV4dFN0YXRlID0gKCBuZXh0U3RhdGVSZXNwb25zZSApID0+IHtcblx0d2FybmluZyhcblx0XHRuZXh0U3RhdGVSZXNwb25zZSAmJlxuXHRcdG5leHRTdGF0ZVJlc3BvbnNlLmhhc093blByb3BlcnR5KCAnY29udmVydGVkVmFsdWVzJyApLFxuXHRcdCdUaGUgcHJvcE5hbWVNYXAgY2FsbGJhY2sgZm9yIHRoZSB3aXRoTW9uZXkgSE9DIHNob3VsZCByZXR1cm4gYW4nICtcblx0XHQnIG9iamVjdCB3aXRoIGEgXCJjb252ZXJ0ZWRWYWx1ZXNcIiBrZXkuJ1xuXHQpO1xuXHRpZiAoIG5leHRTdGF0ZVJlc3BvbnNlICYmXG5cdFx0bmV4dFN0YXRlUmVzcG9uc2UuaGFzT3duUHJvcGVydHkoICdjb252ZXJ0ZWRWYWx1ZXMnICkgKSB7XG5cdFx0d2FybmluZyhcblx0XHRcdGlzQXJyYXkoIG5leHRTdGF0ZVJlc3BvbnNlLmNvbnZlcnRlZFZhbHVlcyApLFxuXHRcdFx0J1RoZSBwcm9wTmFtZU1hcCBjYWxsYmFjayBmb3IgdGhlIHdpdGhNb25leSBIT0Mgc2hvdWxkIHJldHVybiBhbiAnICtcblx0XHRcdCdvYmplY3Qgd2l0aCBhIFwiY29udmVydGVkVmFsdWVzXCIga2V5IHRoYXQgaGFzIGFuIGFycmF5JyArXG5cdFx0XHQnIG9mIG51bWJlcnMgYXMgdGhlIHZhbHVlLidcblx0XHQpO1xuXHR9XG5cdHdhcm5pbmcoXG5cdFx0bmV4dFN0YXRlUmVzcG9uc2UgJiYgbmV4dFN0YXRlUmVzcG9uc2UuaGFzT3duUHJvcGVydHkoICdwcm9wcycgKSxcblx0XHQnVGhlIHByb3BOYW1lTWFwIGNhbGxiYWNrIGZvciB0aGUgd2l0aE1vbmV5SE9DIHNob3VsZCByZXR1cm4gYW4nICtcblx0XHQnIG9iamVjdCB3aXRoIGEgXCJwcm9wc1wiIGtleS4nXG5cdCk7XG59O1xuXG4vKipcbiAqIEEgaGlnaGVyIG9yZGVyIGNvbXBvbmVudCB0aGF0IGNvbnZlcnRzIGFueSBwcm9wcyBtYXRjaGluZyB0aGUgbWFwIHByb3ZpZGVkXG4gKiBhcyBhbiBhcmd1bWVudCB0byBNb25leSB2YWx1ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlbSB0byB0aGUgV3JhcHBlZENvbXBvbmVudFxuICpcbiAqIEBwYXJhbSB7QXJyYXl8ZnVuY3Rpb259IHByb3BOYW1lTWFwXG4gKiBAcmV0dXJuIHtmdW5jdGlvbigqKTogRW5oYW5jZWRDb21wb25lbnR9ICBSZXR1cm5zIGFuIGVuaGFuY2VkIGNvbXBvbmVudCB3aGVyZVxuICogcHJvcHMgdGhhdCByZXByZXNlbnQgbW9uZXkgdmFsdWVzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gYSBNb25leSB2YWx1ZSBvYmplY3RcbiAqL1xuY29uc3Qgd2l0aE1vbmV5ID0gKCBwcm9wTmFtZU1hcCA9IFtdICkgPT4gKCBXcmFwcGVkQ29tcG9uZW50ICkgPT4ge1xuXHRjbGFzcyBFbmhhbmNlZENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudCB7XG5cdFx0c3RhdGUgPSB7XG5cdFx0XHRjb252ZXJ0ZWRWYWx1ZXM6IFtdLFxuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBUaGlzIHByb3ZpZGVzIHRoZSBuZXh0IHN0YXRlIG9uIGFueSBwcm9wIGNoYW5nZS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7e319IHByb3BzXG5cdFx0ICogQHJldHVybiB7e319IEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5leHRTdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cblx0XHQgKi9cblx0XHRnZXROZXh0U3RhdGUgPSAoIHByb3BzICkgPT4ge1xuXHRcdFx0bGV0IG5leHRTdGF0ZVJlc3BvbnNlLFxuXHRcdFx0XHRuZXh0U3RhdGUgPSB7fSxcblx0XHRcdFx0Y29udmVydGVkVmFsdWVzID0gW107XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BOYW1lTWFwICkgKSB7XG5cdFx0XHRcdG5leHRTdGF0ZVJlc3BvbnNlID0gcHJvcE5hbWVNYXAoIHByb3BzLCBNb25leSApO1xuXHRcdFx0XHR2YWxpZGF0ZU5leHRTdGF0ZSggbmV4dFN0YXRlUmVzcG9uc2UgKTtcblx0XHRcdFx0aWYgKCBuZXh0U3RhdGVSZXNwb25zZSAmJiBuZXh0U3RhdGVSZXNwb25zZS5wcm9wcyApIHtcblx0XHRcdFx0XHRuZXh0U3RhdGUgPSB7IC4uLm5leHRTdGF0ZVJlc3BvbnNlLnByb3BzIH07XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udmVydGVkVmFsdWVzID0gbmV4dFN0YXRlUmVzcG9uc2UuY29udmVydGVkVmFsdWVzIHx8XG5cdFx0XHRcdFx0Y29udmVydGVkVmFsdWVzO1xuXHRcdFx0fSBlbHNlIGlmICggaXNBcnJheSggcHJvcE5hbWVNYXAgKSApIHtcblx0XHRcdFx0cHJvcE5hbWVNYXAuZm9yRWFjaCggKCBwcm9wTmFtZSApID0+IHtcblx0XHRcdFx0XHRpZiAoIHByb3BzWyBwcm9wTmFtZSBdICkge1xuXHRcdFx0XHRcdFx0bmV4dFN0YXRlWyBwcm9wTmFtZSBdID1cblx0XHRcdFx0XHRcdFx0bmV3IE1vbmV5KFxuXHRcdFx0XHRcdFx0XHRcdHByb3BzWyBwcm9wTmFtZSBdLFxuXHRcdFx0XHRcdFx0XHRcdFNpdGVDdXJyZW5jeVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Y29udmVydGVkVmFsdWVzLnB1c2goXG5cdFx0XHRcdFx0XHRcdG5leHRTdGF0ZVsgcHJvcE5hbWUgXS50b051bWJlcigpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2FybmluZyhcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHQnVGhlIHByb3BOYW1lTWFwIGFyZ3VtZW50IHByb3ZpZGVkIHRvIHdpdGhNb25leSBtdXN0IGJlIGVpdGhlciBhJyArXG5cdFx0XHRcdFx0JyBmdW5jdGlvbiBvciBhbiBhcnJheSdcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG5leHRTdGF0ZS5jb252ZXJ0ZWRWYWx1ZXMgPSBjb252ZXJ0ZWRWYWx1ZXM7XG5cdFx0XHRyZXR1cm4gbmV4dFN0YXRlO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBDYWxjdWxhdGVzIHdoZXRoZXIgdGhlIHN0YXRlIHNob3VsZCBiZSB1cGRhdGVkIHVzaW5nIHRoZSBwcm92aWRlZFxuXHRcdCAqIGFyZ3VtZW50cy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7e319IHByZXZQcm9wc1xuXHRcdCAqIEBwYXJhbSB7e319IHByZXZTdGF0ZVxuXHRcdCAqIEBwYXJhbSB7e319IG5leHRTdGF0ZVxuXHRcdCAqIEByZXR1cm4ge2Jvb2xlYW59ICBJZiBhIHNoYWxsb3cgY29tcGFyZSBvZiBwcmV2U3RhdGUuY29udmVydGVkVmFsdWVzXG5cdFx0ICogYW5kIG5leHRTdGF0ZS5jb252ZXJ0ZWRWYWx1ZXMgaXMgZmFsc2UsIHRoZW4gdGhpcyByZXR1cm5zIHRydWUgdG9cblx0XHQgKiBzaWduYWwgc3RhdGUgc2hvdWxkIGJlIHVwZGF0ZWQuXG5cdFx0ICovXG5cdFx0c2hvdWxkVXBkYXRlU3RhdGVXaXRoQ29udmVydGVkVmFsdWVzID0gKFxuXHRcdFx0cHJldlByb3BzLFxuXHRcdFx0cHJldlN0YXRlLFxuXHRcdFx0bmV4dFN0YXRlXG5cdFx0KSA9PiB7XG5cdFx0XHRyZXR1cm4gISBpc1NoYWxsb3dFcXVhbEFycmF5cyhcblx0XHRcdFx0bmV4dFN0YXRlLmNvbnZlcnRlZFZhbHVlcyxcblx0XHRcdFx0cHJldlN0YXRlLmNvbnZlcnRlZFZhbHVlc1xuXHRcdFx0KSAmJlxuXHRcdFx0XHRuZXh0U3RhdGUuY29udmVydGVkVmFsdWVzWyAwIF0gIT09XG5cdFx0XHRcdHByZXZTdGF0ZS5jb252ZXJ0ZWRWYWx1ZXNbIDAgXTtcblx0XHR9O1xuXG5cdFx0Y29tcG9uZW50RGlkTW91bnQoKSB7XG5cdFx0XHR0aGlzLnNldFN0YXRlKCB0aGlzLmdldE5leHRTdGF0ZSggdGhpcy5wcm9wcyApICk7XG5cdFx0fVxuXG5cdFx0Y29tcG9uZW50RGlkVXBkYXRlKCBwcmV2UHJvcHMsIHByZXZTdGF0ZSApIHtcblx0XHRcdGNvbnN0IG5leHRTdGF0ZSA9IHRoaXMuZ2V0TmV4dFN0YXRlKCB0aGlzLnByb3BzICk7XG5cdFx0XHRpZiAoIHRoaXMuc2hvdWxkVXBkYXRlU3RhdGVXaXRoQ29udmVydGVkVmFsdWVzKFxuXHRcdFx0XHRwcmV2UHJvcHMsXG5cdFx0XHRcdHByZXZTdGF0ZSxcblx0XHRcdFx0bmV4dFN0YXRlXG5cdFx0XHQpICkge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKCBuZXh0U3RhdGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZW5kZXIoKSB7XG5cdFx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnQgeyAuLi50aGlzLnByb3BzIH0geyAuLi50aGlzLnN0YXRlIH0gLz47XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIEVuaGFuY2VkQ29tcG9uZW50O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aE1vbmV5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBKd1BhZ2luYXRpb24gZnJvbSAnanctcmVhY3QtcGFnaW5hdGlvbic7XG5pbXBvcnQge1xuXHRjb21wb3NlLFxuXHRjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCxcblx0d2l0aEluc3RhbmNlSWQsXG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vKipcbiAqIHdpdGhFbnRpdHlQYWdpbmF0aW9uXG4gKiBIaWdoZXItT3JkZXItQ29tcG9uZW50IHRoYXQgd3JhcHMgYW4gXCJFbnRpdHlMaXN0XCIgY29tcG9uZW50XG4gKiB3aXRoIGFuIEVudGl0eVBhZ2luYXRpb24gY29tcG9uZW50IHRoYXQgYWRkcyBhIHBhZ2luYXRpb24gY29udGFpbmVyXG4gKiBiZWxvdyB0aGUgRW50aXR5TGlzdCBhbmQgY29udHJvbHMgd2hhdCBlbnRpdGllcyBhcmUgZGlzcGxheWVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhZ2luYXRpb25Db25maWdcbiAqIEByZXR1cm4ge09iamVjdH0gRW50aXR5TGlzdCB3aXRoIGFkZGVkIEVudGl0eVBhZ2luYXRpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgKCBwYWdpbmF0aW9uQ29uZmlnID0ge30gKSA9PiBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0Y29tcG9zZSggW1xuXHRcdHdpdGhJbnN0YW5jZUlkLFxuXHRcdCggRW50aXR5TGlzdCApID0+IHtcblx0XHRcdHJldHVybiBjbGFzcyBFbnRpdHlQYWdpbmF0aW9uIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0XHRcdFx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRcdFx0XHRlbnRpdGllczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG5cdFx0XHRcdFx0aW5zdGFuY2VJZDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXHRcdFx0XHRcdGVudGl0aWVzUGVyUGFnZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0XHRcdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRcdFx0XSApLFxuXHRcdFx0XHRcdHBvc2l0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0cnVjdG9yKCBwcm9wcyApIHtcblx0XHRcdFx0XHRzdXBlciggcHJvcHMgKTtcblx0XHRcdFx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0XHRcdFx0ZW50aXR5UGFnZTogW10sXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNob3VsZENvbXBvbmVudFVwZGF0ZSggbmV4dFByb3BzLCBuZXh0U3RhdGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgKFxuXHRcdFx0XHRcdFx0aXNFcXVhbCggbmV4dFByb3BzLCB0aGlzLnByb3BzICkgJiZcblx0XHRcdFx0XHRcdGlzRXF1YWwoIG5leHRTdGF0ZS5lbnRpdHlQYWdlLCB0aGlzLnN0YXRlLmVudGl0eVBhZ2UgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogQGZ1bmN0aW9uXG5cdFx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IGVudGl0eVBhZ2Vcblx0XHRcdFx0ICovXG5cdFx0XHRcdG9uUGFnaW5hdGlvbkNoYW5nZSA9ICggZW50aXR5UGFnZSApID0+IHtcblx0XHRcdFx0XHQvLyB1cGRhdGUgbG9jYWwgc3RhdGUgd2l0aCBuZXcgcGFnZSBvZiBpdGVtc1xuXHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoIHsgZW50aXR5UGFnZSB9ICk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0cmVuZGVyKCkge1xuXHRcdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRcdGVudGl0aWVzLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2VJZCxcblx0XHRcdFx0XHRcdGVudGl0aWVzUGVyUGFnZSA9IDEwLFxuXHRcdFx0XHRcdFx0cG9zaXRpb24gPSAndG9wJyxcblx0XHRcdFx0XHRcdC4uLm90aGVyUHJvcHNcblx0XHRcdFx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRcdFx0XHRwYWdpbmF0aW9uQ29uZmlnLmxhYmVscyA9IHBhZ2luYXRpb25Db25maWcubGFiZWxzICYmXG5cdFx0XHRcdFx0XHRwYWdpbmF0aW9uQ29uZmlnLmxhYmVscy5maXJzdCAmJlxuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5sYWJlbHMubGFzdCAmJlxuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5sYWJlbHMucHJldmlvdXMgJiZcblx0XHRcdFx0XHRcdHBhZ2luYXRpb25Db25maWcubGFiZWxzLm5leHQgP1xuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5sYWJlbHMgOlxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRmaXJzdDogX18oICdGaXJzdCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHRcdFx0bGFzdDogX18oICdMYXN0JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdFx0XHRwcmV2aW91czogX18oICdQcmV2JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdFx0XHRuZXh0OiBfXyggJ05leHQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IG5vUmVzdWx0c1RleHQgPSBwYWdpbmF0aW9uQ29uZmlnLm5vUmVzdWx0c1RleHQgP1xuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5ub1Jlc3VsdHNUZXh0IDpcblx0XHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0XHQnbm8gcmVzdWx0cyBmb3VuZCAodHJ5IGNoYW5naW5nIGZpbHRlcnMpJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCByZXR1cm5Bc1Byb3AgPSBwYWdpbmF0aW9uQ29uZmlnLnJldHVybkFzUHJvcCA/XG5cdFx0XHRcdFx0XHRwYWdpbmF0aW9uQ29uZmlnLnJldHVybkFzUHJvcCA6XG5cdFx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdFx0XHRjb25zdCBwYWdpbmF0aW9uID0gKFxuXHRcdFx0XHRcdFx0PGRpdiBpZD17IGBlZS1lbnRpdHktcGFnaW5hdGlvbi0keyBpbnN0YW5jZUlkIH1gIH1cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtZW50aXR5LXBhZ2luYXRpb25cIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8SndQYWdpbmF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0aXRlbXM9eyBlbnRpdGllcyB9XG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2VQYWdlPXsgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UgfVxuXHRcdFx0XHRcdFx0XHRcdHBhZ2VTaXplPXsgcGFyc2VJbnQoIGVudGl0aWVzUGVyUGFnZSwgMTAgKSB9XG5cdFx0XHRcdFx0XHRcdFx0eyAuLi5wYWdpbmF0aW9uQ29uZmlnIH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgdG9wUGFnaW5hdGlvbiA9IHBvc2l0aW9uID09PSAoICd0b3AnIHx8ICdib3RoJyApID9cblx0XHRcdFx0XHRcdHBhZ2luYXRpb24gOlxuXHRcdFx0XHRcdFx0bnVsbDtcblx0XHRcdFx0XHRjb25zdCBib3R0b21QYWdpbmF0aW9uID0gcG9zaXRpb24gPT09ICggJ2JvdHRvbScgfHwgJ2JvdGgnICkgP1xuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbiA6XG5cdFx0XHRcdFx0XHRudWxsO1xuXHRcdFx0XHRcdHJldHVybiByZXR1cm5Bc1Byb3AgPyAoXG5cdFx0XHRcdFx0XHQ8RW50aXR5TGlzdFxuXHRcdFx0XHRcdFx0XHRwYWdpbmF0aW9uPXsgcGFnaW5hdGlvbiB9XG5cdFx0XHRcdFx0XHRcdGVudGl0aWVzPXsgdGhpcy5zdGF0ZS5lbnRpdHlQYWdlIH1cblx0XHRcdFx0XHRcdFx0bm9SZXN1bHRzVGV4dD17IG5vUmVzdWx0c1RleHQgfVxuXHRcdFx0XHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHRcdFx0XHR7IHRvcFBhZ2luYXRpb24gfVxuXHRcdFx0XHRcdFx0XHQ8RW50aXR5TGlzdFxuXHRcdFx0XHRcdFx0XHRcdGVudGl0aWVzPXsgdGhpcy5zdGF0ZS5lbnRpdHlQYWdlIH1cblx0XHRcdFx0XHRcdFx0XHRub1Jlc3VsdHNUZXh0PXsgbm9SZXN1bHRzVGV4dCB9XG5cdFx0XHRcdFx0XHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0eyBib3R0b21QYWdpbmF0aW9uIH1cblx0XHRcdFx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9LFxuXHRdICksXG5cdCd3aXRoRW50aXR5UGFnaW5hdGlvbidcbik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZW50aXR5LXBhZ2luYXRpb25cIjpcImVlLWVudGl0eS1wYWdpbmF0aW9uXCIsXCJwYWdpbmF0aW9uXCI6XCJwYWdpbmF0aW9uXCIsXCJkaXNhYmxlZFwiOlwiZGlzYWJsZWRcIixcImFjdGl2ZVwiOlwiYWN0aXZlXCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB3aXRoU2VsZWN0LCB3aXRoRGlzcGF0Y2ggfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQsIGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBFeHBvc2VzIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGUgbGF0ZXN0IGNoZWNrLWluIGVudGl0eSBmb3IgYSBnaXZlblxuICogcmVnaXN0cmF0aW9uIGFuZCBkYXRldGltZS5cbiAqXG4gKiBQcm9wZXJ0aWVzIHBhc3NlZCB0aHJvdWdoIHRvIHdyYXBwZWQgY29tcG9uZW50IGFyZTpcbiAqXG4gKiAtIGNoZWNrSW5FbnRpdHkge0Jhc2VFbnRpdHl8bnVsbH0gVGhlIGNoZWNrLWluIGVudGl0eSB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhlXG4gKiBnaXZlbiByZWdpc3RyYXRpb24gYW5kIGRhdGV0aW1lIGlkLlxuICogLSBoYXNSZXNvbHZlZENoZWNraW4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGNoZWNrLWluIGVudGl0eSBzZWxlY3RvciBoYXNcbiAqIHJlc29sdmVkLiAgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdHMgcG9zc2libGUgdGhlcmUgaXMgbm8gZW50aXR5IGZvclxuICogdGhpcyByZWdpc3RyYXRpb24gYW5kIGRhdGV0aW1lIGlmIHRoYXQgcmVnaXN0cmF0aW9uIGhhc24gbmV2ZXIgYmVlbiBjaGVja2VkXG4gKiBpbi5cbiAqIC0gb25DbGljayB7ZnVuY3Rpb259IEEgY2xpY2sgaGFuZGxlciB3aGljaCB3aGVuIGludm9rZWQsIHdpbGwgdG9nZ2xlIHRoZVxuICogY2hlY2staW4gc3RhdGUgZm9yIHRoZSBnaXZlbiByZWdpc3RyYXRpb24gYW5kIGRhdGV0aW1lSWQuIE5vdGU6IHRoaXMgd2lsbFxuICogcmVwbGFjZSB0aGUgc3RvcmUgbGF0ZXN0Q2hlY2tpbiByZWNvcmQgaW4gdGhlIHN0YXRlIGZvciB0aGlzIGdpdmVuXG4gKiByZWdpc3RyYXRpb24gYW5kIGRhdGV0aW1lIGlkIHdoaWNoIHdpbGwgZ2V0IHBpY2tlZCB1cCBieSB0aGUgYHdpdGhTZWxlY3RgXG4gKiBIT0MgaW4gdGhlIGNvbXBvc2VkIGNvbXBvbmVudC5cbiAqXG4gKiBAdHlwZSB7V1BDb21wb25lbnR9XG4gKi9cbmNvbnN0IHdpdGhMYXRlc3RDaGVja2luID0gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoU2VsZWN0KFxuXHRcdFx0KCBzZWxlY3QsIHsgcmVnaXN0cmF0aW9uLCBkYXRldGltZUlkIH0gKSA9PiB7XG5cdFx0XHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbChcblx0XHRcdFx0XHRyZWdpc3RyYXRpb24sXG5cdFx0XHRcdFx0J3JlZ2lzdHJhdGlvbidcblx0XHRcdFx0KSApIHtcblx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgeyBnZXRMYXRlc3RDaGVja2luIH0gPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0XHRcdGNvbnN0IHsgaGFzRmluaXNoZWRSZXNvbHV0aW9uIH0gPSBzZWxlY3QoICdjb3JlL2RhdGEnICk7XG5cdFx0XHRcdGNvbnN0IGNoZWNrSW5FbnRpdHkgPSBnZXRMYXRlc3RDaGVja2luKFxuXHRcdFx0XHRcdHJlZ2lzdHJhdGlvbi5pZCxcblx0XHRcdFx0XHRkYXRldGltZUlkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Y2hlY2tpbkVudGl0eTogY2hlY2tJbkVudGl0eSB8fCBudWxsLFxuXHRcdFx0XHRcdGhhc1Jlc29sdmVkQ2hlY2tpbjogaGFzRmluaXNoZWRSZXNvbHV0aW9uKFxuXHRcdFx0XHRcdFx0J2V2ZW50ZXNwcmVzc28vY29yZScsXG5cdFx0XHRcdFx0XHQnZ2V0TGF0ZXN0Q2hlY2tpbicsXG5cdFx0XHRcdFx0XHRbIHJlZ2lzdHJhdGlvbi5pZCwgZGF0ZXRpbWVJZCBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHQpLFxuXHRcdHdpdGhEaXNwYXRjaChcblx0XHRcdCggZGlzcGF0Y2gsIHsgcmVnaXN0cmF0aW9uLCBkYXRldGltZUlkIH0gKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHsgdG9nZ2xlQ2hlY2tpbiB9ID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0b25DbGljaygpIHtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoXG5cdFx0XHRcdFx0XHRcdFx0cmVnaXN0cmF0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdCdyZWdpc3RyYXRpb24nXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHR0b2dnbGVDaGVja2luKCByZWdpc3RyYXRpb24uaWQsIGRhdGV0aW1lSWQgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdCksXG5cdF0gKSxcblx0J3dpdGhMYXRlc3RDaGVja2luJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aExhdGVzdENoZWNraW47XG4iLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiLi9kZWZpbmVQcm9wZXJ0eVwiKTtcblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICB2YXIgb3duS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG93bktleXMgPSBvd25LZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSkuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgb3duS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RTcHJlYWQ7IiwidmFyIG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgPSByZXF1aXJlKFwiLi9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpO1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7XG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzOyIsImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpO1xuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyIsImZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mMihvYmopOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZjIoU3ltYm9sLml0ZXJhdG9yKSA9PT0gXCJzeW1ib2xcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gX3R5cGVvZjIob2JqKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogX3R5cGVvZjIob2JqKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mOyIsIm1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIHIobil7aWYodFtuXSlyZXR1cm4gdFtuXS5leHBvcnRzO3ZhciBvPXRbbl09e2k6bixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW25dLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLHIpLG8ubD0hMCxvLmV4cG9ydHN9cmV0dXJuIHIubT1lLHIuYz10LHIuZD1mdW5jdGlvbihlLHQsbil7ci5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0Om59KX0sci5yPWZ1bmN0aW9uKGUpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LHIudD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9cihlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmXCJvYmplY3RcIj09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHIucihuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiZcInN0cmluZ1wiIT10eXBlb2YgZSlmb3IodmFyIG8gaW4gZSlyLmQobixvLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwsbykpO3JldHVybiBufSxyLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHIuZCh0LFwiYVwiLHQpLHR9LHIubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sci5wPVwiXCIscihyLnM9MCl9KFtmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0sbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIHImJmUodC5wcm90b3R5cGUsciksbiYmZSh0LG4pLHR9fSgpLGE9aShyKDEpKSx1PWkocig0KSksbD1pKHIoNykpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBzPXtpdGVtczp1LmRlZmF1bHQuYXJyYXkuaXNSZXF1aXJlZCxvbkNoYW5nZVBhZ2U6dS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxpbml0aWFsUGFnZTp1LmRlZmF1bHQubnVtYmVyLHBhZ2VTaXplOnUuZGVmYXVsdC5udW1iZXIsbWF4UGFnZXM6dS5kZWZhdWx0Lm51bWJlcixsYWJlbHM6dS5kZWZhdWx0Lm9iamVjdCxzdHlsZXM6dS5kZWZhdWx0Lm9iamVjdCxkaXNhYmxlRGVmYXVsdFN0eWxlczp1LmRlZmF1bHQuYm9vbH0sYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsdCk7dmFyIHI9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIXR8fFwib2JqZWN0XCIhPXR5cGVvZiB0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0P2U6dH0odGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gci5zdGF0ZT17cGFnZXI6e319LHIuc3R5bGVzPXt9LGUuZGlzYWJsZURlZmF1bHRTdHlsZXN8fChyLnN0eWxlcz17dWw6e21hcmdpbjowLHBhZGRpbmc6MCxkaXNwbGF5OlwiaW5saW5lLWJsb2NrXCJ9LGxpOntsaXN0U3R5bGU6XCJub25lXCIsZGlzcGxheTpcImlubGluZVwiLHRleHRBbGlnbjpcImNlbnRlclwifSxhOntjdXJzb3I6XCJwb2ludGVyXCIscGFkZGluZzpcIjZweCAxMnB4XCIsZGlzcGxheTpcImJsb2NrXCIsZmxvYXQ6XCJsZWZ0XCJ9fSksZS5zdHlsZXMmJihyLnN0eWxlcz17dWw6bih7fSxyLnN0eWxlcy51bCxlLnN0eWxlcy51bCksbGk6bih7fSxyLnN0eWxlcy5saSxlLnN0eWxlcy5saSksYTpuKHt9LHIuc3R5bGVzLmEsZS5zdHlsZXMuYSl9KSxyfXJldHVybiBmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfSh0LGEuZGVmYXVsdC5Db21wb25lbnQpLG8odCxbe2tleTpcImNvbXBvbmVudFdpbGxNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5pdGVtcyYmdGhpcy5wcm9wcy5pdGVtcy5sZW5ndGgmJnRoaXMuc2V0UGFnZSh0aGlzLnByb3BzLmluaXRpYWxQYWdlKX19LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMucHJvcHMuaXRlbXMhPT1lLml0ZW1zJiZ0aGlzLnNldFBhZ2UodGhpcy5wcm9wcy5pbml0aWFsUGFnZSl9fSx7a2V5Olwic2V0UGFnZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMscj10Lml0ZW1zLG49dC5wYWdlU2l6ZSxvPXQubWF4UGFnZXMsYT10aGlzLnN0YXRlLnBhZ2VyO2E9KDAsbC5kZWZhdWx0KShyLmxlbmd0aCxlLG4sbyk7dmFyIHU9ci5zbGljZShhLnN0YXJ0SW5kZXgsYS5lbmRJbmRleCsxKTt0aGlzLnNldFN0YXRlKHtwYWdlcjphfSksdGhpcy5wcm9wcy5vbkNoYW5nZVBhZ2UodSl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5zdGF0ZS5wYWdlcixyPXRoaXMucHJvcHMubGFiZWxzLG49dGhpcy5zdHlsZXM7cmV0dXJuIXQucGFnZXN8fHQucGFnZXMubGVuZ3RoPD0xP251bGw6YS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLHtjbGFzc05hbWU6XCJwYWdpbmF0aW9uXCIsc3R5bGU6bi51bH0sYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLHtjbGFzc05hbWU6XCJwYWdlLWl0ZW0gZmlyc3QgXCIrKDE9PT10LmN1cnJlbnRQYWdlP1wiZGlzYWJsZWRcIjpcIlwiKSxzdHlsZTpuLmxpfSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIix7Y2xhc3NOYW1lOlwicGFnZS1saW5rXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldFBhZ2UoMSl9LHN0eWxlOm4uYX0sci5maXJzdCkpLGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGlcIix7Y2xhc3NOYW1lOlwicGFnZS1pdGVtIHByZXZpb3VzIFwiKygxPT09dC5jdXJyZW50UGFnZT9cImRpc2FibGVkXCI6XCJcIiksc3R5bGU6bi5saX0sYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJhXCIse2NsYXNzTmFtZTpcInBhZ2UtbGlua1wiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXRQYWdlKHQuY3VycmVudFBhZ2UtMSl9LHN0eWxlOm4uYX0sci5wcmV2aW91cykpLHQucGFnZXMubWFwKGZ1bmN0aW9uKHIsbyl7cmV0dXJuIGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGlcIix7a2V5Om8sY2xhc3NOYW1lOlwicGFnZS1pdGVtIHBhZ2UtbnVtYmVyIFwiKyh0LmN1cnJlbnRQYWdlPT09cj9cImFjdGl2ZVwiOlwiXCIpLHN0eWxlOm4ubGl9LGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYVwiLHtjbGFzc05hbWU6XCJwYWdlLWxpbmtcIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0UGFnZShyKX0sc3R5bGU6bi5hfSxyKSl9KSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImxpXCIse2NsYXNzTmFtZTpcInBhZ2UtaXRlbSBuZXh0IFwiKyh0LmN1cnJlbnRQYWdlPT09dC50b3RhbFBhZ2VzP1wiZGlzYWJsZWRcIjpcIlwiKSxzdHlsZTpuLmxpfSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIix7Y2xhc3NOYW1lOlwicGFnZS1saW5rXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldFBhZ2UodC5jdXJyZW50UGFnZSsxKX0sc3R5bGU6bi5hfSxyLm5leHQpKSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImxpXCIse2NsYXNzTmFtZTpcInBhZ2UtaXRlbSBsYXN0IFwiKyh0LmN1cnJlbnRQYWdlPT09dC50b3RhbFBhZ2VzP1wiZGlzYWJsZWRcIjpcIlwiKSxzdHlsZTpuLmxpfSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIix7Y2xhc3NOYW1lOlwicGFnZS1saW5rXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldFBhZ2UodC50b3RhbFBhZ2VzKX0sc3R5bGU6bi5hfSxyLmxhc3QpKSl9fV0pLHR9KCk7Yy5wcm9wVHlwZXM9cyxjLmRlZmF1bHRQcm9wcz17aW5pdGlhbFBhZ2U6MSxwYWdlU2l6ZToxMCxtYXhQYWdlczoxMCxsYWJlbHM6e2ZpcnN0OlwiRmlyc3RcIixsYXN0OlwiTGFzdFwiLHByZXZpb3VzOlwiUHJldmlvdXNcIixuZXh0OlwiTmV4dFwifX0sdC5kZWZhdWx0PWN9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9cigyKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO1xuLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi44LjZcbiAqIHJlYWN0LnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi92YXIgbj1yKDMpLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGE9bz9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyx1PW8/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixsPW8/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGk9bz9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgscz1vP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxjPW8/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGY9bz9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxwPW8/U3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKTo2MDExMSx5PW8/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLGQ9bz9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTMsbT1vP1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOjYwMTE1LGc9bz9TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTo2MDExNixiPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIHYoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMSxyPVwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIrZSxuPTA7bjx0O24rKylyKz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tuKzFdKTshZnVuY3Rpb24oZSx0LHIsbixvLGEsdSxsKXtpZighZSl7aWYoZT12b2lkIDAsdm9pZCAwPT09dCllPUVycm9yKFwiTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIik7ZWxzZXt2YXIgaT1bcixuLG8sYSx1LGxdLHM9MDsoZT1FcnJvcih0LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gaVtzKytdfSkpKS5uYW1lPVwiSW52YXJpYW50IFZpb2xhdGlvblwifXRocm93IGUuZnJhbWVzVG9Qb3A9MSxlfX0oITEsXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrZStcIjsgdmlzaXQgJXMgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiBcIixyKX12YXIgaD17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0sUD17fTtmdW5jdGlvbiBfKGUsdCxyKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPVAsdGhpcy51cGRhdGVyPXJ8fGh9ZnVuY3Rpb24gTygpe31mdW5jdGlvbiBTKGUsdCxyKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPVAsdGhpcy51cGRhdGVyPXJ8fGh9Xy5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSxfLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe1wib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT1lJiZ2KFwiODVcIiksdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGUsdCxcInNldFN0YXRlXCIpfSxfLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSxcImZvcmNlVXBkYXRlXCIpfSxPLnByb3RvdHlwZT1fLnByb3RvdHlwZTt2YXIgaz1TLnByb3RvdHlwZT1uZXcgTztrLmNvbnN0cnVjdG9yPVMsbihrLF8ucHJvdG90eXBlKSxrLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwO3ZhciBqPXtjdXJyZW50Om51bGx9LHg9e2N1cnJlbnQ6bnVsbH0sdz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEU9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtmdW5jdGlvbiBDKGUsdCxyKXt2YXIgbj12b2lkIDAsbz17fSx1PW51bGwsbD1udWxsO2lmKG51bGwhPXQpZm9yKG4gaW4gdm9pZCAwIT09dC5yZWYmJihsPXQucmVmKSx2b2lkIDAhPT10LmtleSYmKHU9XCJcIit0LmtleSksdCl3LmNhbGwodCxuKSYmIUUuaGFzT3duUHJvcGVydHkobikmJihvW25dPXRbbl0pO3ZhciBpPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09aSlvLmNoaWxkcmVuPXI7ZWxzZSBpZigxPGkpe2Zvcih2YXIgcz1BcnJheShpKSxjPTA7YzxpO2MrKylzW2NdPWFyZ3VtZW50c1tjKzJdO28uY2hpbGRyZW49c31pZihlJiZlLmRlZmF1bHRQcm9wcylmb3IobiBpbiBpPWUuZGVmYXVsdFByb3BzKXZvaWQgMD09PW9bbl0mJihvW25dPWlbbl0pO3JldHVybnskJHR5cGVvZjphLHR5cGU6ZSxrZXk6dSxyZWY6bCxwcm9wczpvLF9vd25lcjp4LmN1cnJlbnR9fWZ1bmN0aW9uIFIoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09YX12YXIgJD0vXFwvKy9nLFQ9W107ZnVuY3Rpb24gTShlLHQscixuKXtpZihULmxlbmd0aCl7dmFyIG89VC5wb3AoKTtyZXR1cm4gby5yZXN1bHQ9ZSxvLmtleVByZWZpeD10LG8uZnVuYz1yLG8uY29udGV4dD1uLG8uY291bnQ9MCxvfXJldHVybntyZXN1bHQ6ZSxrZXlQcmVmaXg6dCxmdW5jOnIsY29udGV4dDpuLGNvdW50OjB9fWZ1bmN0aW9uIE4oZSl7ZS5yZXN1bHQ9bnVsbCxlLmtleVByZWZpeD1udWxsLGUuZnVuYz1udWxsLGUuY29udGV4dD1udWxsLGUuY291bnQ9MCwxMD5ULmxlbmd0aCYmVC5wdXNoKGUpfWZ1bmN0aW9uIEkoZSx0LHIpe3JldHVybiBudWxsPT1lPzA6ZnVuY3Rpb24gZSh0LHIsbixvKXt2YXIgbD10eXBlb2YgdDtcInVuZGVmaW5lZFwiIT09bCYmXCJib29sZWFuXCIhPT1sfHwodD1udWxsKTt2YXIgaT0hMTtpZihudWxsPT09dClpPSEwO2Vsc2Ugc3dpdGNoKGwpe2Nhc2VcInN0cmluZ1wiOmNhc2VcIm51bWJlclwiOmk9ITA7YnJlYWs7Y2FzZVwib2JqZWN0XCI6c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgYTpjYXNlIHU6aT0hMH19aWYoaSlyZXR1cm4gbihvLHQsXCJcIj09PXI/XCIuXCIrQSh0LDApOnIpLDE7aWYoaT0wLHI9XCJcIj09PXI/XCIuXCI6citcIjpcIixBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgYz1yK0EobD10W3NdLHMpO2krPWUobCxjLG4sbyl9ZWxzZSBpZihjPW51bGw9PT10fHxcIm9iamVjdFwiIT10eXBlb2YgdD9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mKGM9YiYmdFtiXXx8dFtcIkBAaXRlcmF0b3JcIl0pP2M6bnVsbCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjKWZvcih0PWMuY2FsbCh0KSxzPTA7IShsPXQubmV4dCgpKS5kb25lOylpKz1lKGw9bC52YWx1ZSxjPXIrQShsLHMrKyksbixvKTtlbHNlXCJvYmplY3RcIj09PWwmJnYoXCIzMVwiLFwiW29iamVjdCBPYmplY3RdXCI9PShuPVwiXCIrdCk/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyh0KS5qb2luKFwiLCBcIikrXCJ9XCI6bixcIlwiKTtyZXR1cm4gaX0oZSxcIlwiLHQscil9ZnVuY3Rpb24gQShlLHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9ZS5rZXk/ZnVuY3Rpb24oZSl7dmFyIHQ9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9O3JldHVyblwiJFwiKyhcIlwiK2UpLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfShlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gcShlLHQpe2UuZnVuYy5jYWxsKGUuY29udGV4dCx0LGUuY291bnQrKyl9ZnVuY3Rpb24gVShlLHQscil7dmFyIG49ZS5yZXN1bHQsbz1lLmtleVByZWZpeDtlPWUuZnVuYy5jYWxsKGUuY29udGV4dCx0LGUuY291bnQrKyksQXJyYXkuaXNBcnJheShlKT9EKGUsbixyLGZ1bmN0aW9uKGUpe3JldHVybiBlfSk6bnVsbCE9ZSYmKFIoZSkmJihlPWZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOmEsdHlwZTplLnR5cGUsa2V5OnQscmVmOmUucmVmLHByb3BzOmUucHJvcHMsX293bmVyOmUuX293bmVyfX0oZSxvKyghZS5rZXl8fHQmJnQua2V5PT09ZS5rZXk/XCJcIjooXCJcIitlLmtleSkucmVwbGFjZSgkLFwiJCYvXCIpK1wiL1wiKStyKSksbi5wdXNoKGUpKX1mdW5jdGlvbiBEKGUsdCxyLG4sbyl7dmFyIGE9XCJcIjtudWxsIT1yJiYoYT0oXCJcIityKS5yZXBsYWNlKCQsXCIkJi9cIikrXCIvXCIpLEkoZSxVLHQ9TSh0LGEsbixvKSksTih0KX1mdW5jdGlvbiBMKCl7dmFyIGU9ai5jdXJyZW50O3JldHVybiBudWxsPT09ZSYmdihcIjMyMVwiKSxlfXZhciBGPXtDaGlsZHJlbjp7bWFwOmZ1bmN0aW9uKGUsdCxyKXtpZihudWxsPT1lKXJldHVybiBlO3ZhciBuPVtdO3JldHVybiBEKGUsbixudWxsLHQsciksbn0sZm9yRWFjaDpmdW5jdGlvbihlLHQscil7aWYobnVsbD09ZSlyZXR1cm4gZTtJKGUscSx0PU0obnVsbCxudWxsLHQscikpLE4odCl9LGNvdW50OmZ1bmN0aW9uKGUpe3JldHVybiBJKGUsZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbnVsbCl9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIEQoZSx0LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSx0fSxvbmx5OmZ1bmN0aW9uKGUpe3JldHVybiBSKGUpfHx2KFwiMTQzXCIpLGV9fSxjcmVhdGVSZWY6ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX0sQ29tcG9uZW50Ol8sUHVyZUNvbXBvbmVudDpTLGNyZWF0ZUNvbnRleHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksKGU9eyQkdHlwZW9mOmYsX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOnQsX2N1cnJlbnRWYWx1ZTplLF9jdXJyZW50VmFsdWUyOmUsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsfSkuUHJvdmlkZXI9eyQkdHlwZW9mOmMsX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfSxmb3J3YXJkUmVmOmZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjp5LHJlbmRlcjplfX0sbGF6eTpmdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6ZyxfY3RvcjplLF9zdGF0dXM6LTEsX3Jlc3VsdDpudWxsfX0sbWVtbzpmdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjptLHR5cGU6ZSxjb21wYXJlOnZvaWQgMD09PXQ/bnVsbDp0fX0sdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTCgpLnVzZUNhbGxiYWNrKGUsdCl9LHVzZUNvbnRleHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTCgpLnVzZUNvbnRleHQoZSx0KX0sdXNlRWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEwoKS51c2VFZmZlY3QoZSx0KX0sdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIEwoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxyKX0sdXNlRGVidWdWYWx1ZTpmdW5jdGlvbigpe30sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEwoKS51c2VMYXlvdXRFZmZlY3QoZSx0KX0sdXNlTWVtbzpmdW5jdGlvbihlLHQpe3JldHVybiBMKCkudXNlTWVtbyhlLHQpfSx1c2VSZWR1Y2VyOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTCgpLnVzZVJlZHVjZXIoZSx0LHIpfSx1c2VSZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIEwoKS51c2VSZWYoZSl9LHVzZVN0YXRlOmZ1bmN0aW9uKGUpe3JldHVybiBMKCkudXNlU3RhdGUoZSl9LEZyYWdtZW50OmwsU3RyaWN0TW9kZTppLFN1c3BlbnNlOmQsY3JlYXRlRWxlbWVudDpDLGNsb25lRWxlbWVudDpmdW5jdGlvbihlLHQscil7bnVsbD09ZSYmdihcIjI2N1wiLGUpO3ZhciBvPXZvaWQgMCx1PW4oe30sZS5wcm9wcyksbD1lLmtleSxpPWUucmVmLHM9ZS5fb3duZXI7aWYobnVsbCE9dCl7dm9pZCAwIT09dC5yZWYmJihpPXQucmVmLHM9eC5jdXJyZW50KSx2b2lkIDAhPT10LmtleSYmKGw9XCJcIit0LmtleSk7dmFyIGM9dm9pZCAwO2ZvcihvIGluIGUudHlwZSYmZS50eXBlLmRlZmF1bHRQcm9wcyYmKGM9ZS50eXBlLmRlZmF1bHRQcm9wcyksdCl3LmNhbGwodCxvKSYmIUUuaGFzT3duUHJvcGVydHkobykmJih1W29dPXZvaWQgMD09PXRbb10mJnZvaWQgMCE9PWM/Y1tvXTp0W29dKX1pZigxPT09KG89YXJndW1lbnRzLmxlbmd0aC0yKSl1LmNoaWxkcmVuPXI7ZWxzZSBpZigxPG8pe2M9QXJyYXkobyk7Zm9yKHZhciBmPTA7ZjxvO2YrKyljW2ZdPWFyZ3VtZW50c1tmKzJdO3UuY2hpbGRyZW49Y31yZXR1cm57JCR0eXBlb2Y6YSx0eXBlOmUudHlwZSxrZXk6bCxyZWY6aSxwcm9wczp1LF9vd25lcjpzfX0sY3JlYXRlRmFjdG9yeTpmdW5jdGlvbihlKXt2YXIgdD1DLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH0saXNWYWxpZEVsZW1lbnQ6Uix2ZXJzaW9uOlwiMTYuOC42XCIsdW5zdGFibGVfQ29uY3VycmVudE1vZGU6cCx1bnN0YWJsZV9Qcm9maWxlcjpzLF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOntSZWFjdEN1cnJlbnREaXNwYXRjaGVyOmosUmVhY3RDdXJyZW50T3duZXI6eCxhc3NpZ246bn19LHo9e2RlZmF1bHQ6Rn0sVj16JiZGfHx6O2UuZXhwb3J0cz1WLmRlZmF1bHR8fFZ9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtcbi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFyIGU9bmV3IFN0cmluZyhcImFiY1wiKTtpZihlWzVdPVwiZGVcIixcIjVcIj09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpWzBdKXJldHVybiExO2Zvcih2YXIgdD17fSxyPTA7cjwxMDtyKyspdFtcIl9cIitTdHJpbmcuZnJvbUNoYXJDb2RlKHIpXT1yO2lmKFwiMDEyMzQ1Njc4OVwiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkuam9pbihcIlwiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm5cImFiY2RlZmdoaWprbG1ub3BxcnN0XCIuc3BsaXQoXCJcIikuZm9yRWFjaChmdW5jdGlvbihlKXtuW2VdPWV9KSxcImFiY2RlZmdoaWprbG1ub3BxcnN0XCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LG4pKS5qb2luKFwiXCIpfWNhdGNoKGUpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLHUsbD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gT2JqZWN0KGUpfShlKSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7Zm9yKHZhciBzIGluIHI9T2JqZWN0KGFyZ3VtZW50c1tpXSkpby5jYWxsKHIscykmJihsW3NdPXJbc10pO2lmKG4pe3U9bihyKTtmb3IodmFyIGM9MDtjPHUubGVuZ3RoO2MrKylhLmNhbGwocix1W2NdKSYmKGxbdVtjXV09clt1W2NdXSl9fXJldHVybiBsfX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDUpKCl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDYpO2Z1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gYSgpe31hLnJlc2V0V2FybmluZ0NhY2hlPW8sZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixvLGEsdSl7aWYodSE9PW4pe3ZhciBsPW5ldyBFcnJvcihcIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXNcIik7dGhyb3cgbC5uYW1lPVwiSW52YXJpYW50IFZpb2xhdGlvblwiLGx9fWZ1bmN0aW9uIHQoKXtyZXR1cm4gZX1lLmlzUmVxdWlyZWQ9ZTt2YXIgcj17YXJyYXk6ZSxib29sOmUsZnVuYzplLG51bWJlcjplLG9iamVjdDplLHN0cmluZzplLHN5bWJvbDplLGFueTplLGFycmF5T2Y6dCxlbGVtZW50OmUsZWxlbWVudFR5cGU6ZSxpbnN0YW5jZU9mOnQsbm9kZTplLG9iamVjdE9mOnQsb25lT2Y6dCxvbmVPZlR5cGU6dCxzaGFwZTp0LGV4YWN0OnQsY2hlY2tQcm9wVHlwZXM6YSxyZXNldFdhcm5pbmdDYWNoZTpvfTtyZXR1cm4gci5Qcm9wVHlwZXM9cixyfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1cIlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEXCJ9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09dCYmKHQ9MSksdm9pZCAwPT09ciYmKHI9MTApLHZvaWQgMD09PW4mJihuPTEwKTt2YXIgbyxhLHU9TWF0aC5jZWlsKGUvcik7aWYodDwxP3Q9MTp0PnUmJih0PXUpLHU8PW4pbz0xLGE9dTtlbHNle3ZhciBsPU1hdGguZmxvb3Iobi8yKSxpPU1hdGguY2VpbChuLzIpLTE7dDw9bD8obz0xLGE9bik6dCtpPj11PyhvPXUtbisxLGE9dSk6KG89dC1sLGE9dCtpKX12YXIgcz0odC0xKSpyLGM9TWF0aC5taW4ocytyLTEsZS0xKSxmPUFycmF5LmZyb20oQXJyYXkoYSsxLW8pLmtleXMoKSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBvK2V9KTtyZXR1cm57dG90YWxJdGVtczplLGN1cnJlbnRQYWdlOnQscGFnZVNpemU6cix0b3RhbFBhZ2VzOnUsc3RhcnRQYWdlOm8sZW5kUGFnZTphLHN0YXJ0SW5kZXg6cyxlbmRJbmRleDpjLHBhZ2VzOmZ9fX1dKTsiLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xudmFyIGNoZWNrUHJvcFR5cGVzID0gcmVxdWlyZSgnLi9jaGVja1Byb3BUeXBlcycpO1xuXG52YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSAgKyAnYC4gVGhpcyBpcyBkZXByZWNhdGVkICcgK1xuICAgICAgICAgICAgICAnYW5kIHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcbiAgICAgICAgICAgICAgJ2xpYnJhcnkuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmctZG9udC1jYWxsLXByb3B0eXBlcyAnICsgJ2ZvciBkZXRhaWxzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIVJlYWN0SXMuaXNWYWxpZEVsZW1lbnRUeXBlKHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50IHR5cGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LCBnb3QgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIGFyZ3VtZW50cy4gJyArXG4gICAgICAgICAgICAnQSBjb21tb24gbWlzdGFrZSBpcyB0byB3cml0ZSBvbmVPZih4LCB5LCB6KSBpbnN0ZWFkIG9mIG9uZU9mKFt4LCB5LCB6XSkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMsIGZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3ltYm9sJykge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIFN0cmluZyhwcm9wVmFsdWUpICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChoYXMocHJvcFZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xuICAgICAgICAgICdyZWNlaXZlZCAnICsgZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKGNoZWNrZXIpICsgJyBhdCBpbmRleCAnICsgaSArICcuJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIGlmIChjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbVxuICAgICAgLy8gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXG4gICAgICAgICAgICAnXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xuICAgICAgICAgICAgJ1xcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuOC42XG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcblxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTtcbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8XG4gIC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSk7XG59XG5cbi8qKlxuICogRm9ya2VkIGZyb20gZmJqcy93YXJuaW5nOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZianMvYmxvYi9lNjZiYTIwYWQ1YmU0MzNlYjU0NDIzZjJiMDk3ZDgyOTMyNGQ5ZGU2L3BhY2thZ2VzL2ZianMvc3JjL19fZm9ya3NfXy93YXJuaW5nLmpzXG4gKlxuICogT25seSBjaGFuZ2UgaXMgd2UgdXNlIGNvbnNvbGUud2FybiBpbnN0ZWFkIG9mIGNvbnNvbGUuZXJyb3IsXG4gKiBhbmQgZG8gbm90aGluZyB3aGVuICdjb25zb2xlJyBpcyBub3Qgc3VwcG9ydGVkLlxuICogVGhpcyByZWFsbHkgc2ltcGxpZmllcyB0aGUgY29kZS5cbiAqIC0tLVxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGxvd1ByaW9yaXR5V2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmckMSA9IGxvd1ByaW9yaXR5V2FybmluZztcblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG5cbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xuXG4vLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlO1xuICAgICAgbG93UHJpb3JpdHlXYXJuaW5nJDEoZmFsc2UsICdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBfX0RFVl9fID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJztcblxudmFyIHdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAoX19ERVZfXykge1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMSA/IGxlbiAtIDEgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAxOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDFdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArXG4gICAgICBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfVxuXG4gIHdhcm5pbmcgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMiA/IGxlbiAtIDIgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAyOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDJdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgICAnbWVzc2FnZSBhcmd1bWVudCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBwcmludFdhcm5pbmcuYXBwbHkobnVsbCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbiIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcImkxOG5cIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmFsaWRhdG9yc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJ2YWx1ZU9iamVjdHNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImNvbXBvbmVudHNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImNvbXBvc2VcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImRhdGFcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImVsZW1lbnRcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImlzU2hhbGxvd0VxdWFsXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wibG9kYXNoXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiUmVhY3RcIl07IH0oKSk7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLmhvY3Mvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9iYXNlLWNvbnRyb2wuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9maWx0ZXItYmFyL2VudGl0eS1saXN0LWZpbHRlci1iYXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9maWx0ZXItYmFyL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvZmlsdGVyLWJhci9zdHlsZS5jc3M/MjFmMiIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL2ZpbHRlci1iYXIvd2l0aC1lbnRpdHktbGlzdC1maWx0ZXItYmFyLmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvZmlsdGVyLWJhci93aXRoLWVudGl0eS1saXN0LWZpbHRlci1zdGF0ZS5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvbW9uZXkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vYXNzZXRzL3NyYy9oaWdoZXItb3JkZXItY29tcG9uZW50cy9wYWdpbmF0aW9uL2luZGV4LmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL2Fzc2V0cy9zcmMvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMvcGFnaW5hdGlvbi9zdHlsZS5jc3M/NzBlMyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL3dpdGgtbGF0ZXN0LWNoZWNraW4uanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkLmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL2VlanMuaG9jcy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL2p3LXJlYWN0LXBhZ2luYXRpb24vbGliL0p3UGFnaW5hdGlvbi5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzLy4vbm9kZV9tb2R1bGVzL3dhcm5pbmcvd2FybmluZy5qcyIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvZXh0ZXJuYWwge1widGhpc1wiOltcImVlanNcIixcImkxOG5cIl19Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwidmFsaWRhdG9yc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5ob2NzL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2YWx1ZU9iamVjdHNcIl19Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImNvbXBvbmVudHNcIl19Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImNvbXBvc2VcIl19Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImRhdGFcIl19Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImVsZW1lbnRcIl19Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6W1wid3BcIixcImlzU2hhbGxvd0VxdWFsXCJdfSIsIndlYnBhY2s6Ly9lZWpzLmhvY3MvZXh0ZXJuYWwge1widGhpc1wiOlwibG9kYXNoXCJ9Iiwid2VicGFjazovL2VlanMuaG9jcy9leHRlcm5hbCB7XCJ0aGlzXCI6XCJSZWFjdFwifSJdLCJuYW1lcyI6WyJjdXN0b21JZCIsImNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IiwiY29tcG9zZSIsIndpdGhJbnN0YW5jZUlkIiwiV3JhcHBlZENvbXBvbmVudCIsInByb3BzIiwibGFiZWwiLCJpbnN0YW5jZUlkIiwiY2xhc3NOYW1lIiwiaGVscCIsImlkIiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwic3RyaW5nIiwib25lT2ZUeXBlIiwibnVtYmVyIiwiZGVmYXVsdFByb3BzIiwiRW50aXR5TGlzdEZpbHRlckJhciIsInNlYXJjaFRleHQiLCJzZXRTZWFyY2hUZXh0IiwiaXNGdW5jdGlvbiIsIl9fIiwicGVyUGFnZSIsInNldFBlclBhZ2UiLCJ2YWx1ZSIsInZpZXciLCJzZXRMaXN0VmlldyIsInNldEdyaWRWaWV3IiwiZW50aXR5RmlsdGVycyIsInNlYXJjaCIsImxpc3RWaWV3IiwiZ3JpZFZpZXciLCJvYmplY3QiLCJpc1JlcXVpcmVkIiwiZnVuYyIsIlBhZ2luYXRlZEVudGl0eUxpc3RXaXRoRmlsdGVyQmFyIiwiRW50aXR5TGlzdCIsInBhZ2luYXRpb25Db25maWciLCJ3aXRoRW50aXR5TGlzdEZpbHRlckJhciIsIndpdGhFbnRpdHlQYWdpbmF0aW9uIiwiUGFnaW5hdGVkRW50aXR5TGlzdFdpdGhGaWx0ZXJCYXJBbmRTdGF0ZSIsIndpdGhFbnRpdHlMaXN0RmlsdGVyU3RhdGUiLCJlbnRpdGllcyIsImZpbHRlciIsImVudGl0eSIsImVudGl0eU5hbWUiLCJuYW1lIiwidG9Mb3dlckNhc2UiLCJvdGhlclByb3BzIiwic2VhcmNoRW50aXRpZXMiLCJ3aXRoU2VsZWN0Iiwic2VsZWN0Iiwib3duUHJvcHMiLCJzdG9yZSIsImdldEZpbHRlciIsInBhcnNlSW50Iiwid2l0aERpc3BhdGNoIiwiZGlzcGF0Y2giLCJzZXRGaWx0ZXIiLCJhcnJheU9mIiwidmFsaWRhdGVOZXh0U3RhdGUiLCJuZXh0U3RhdGVSZXNwb25zZSIsIndhcm5pbmciLCJoYXNPd25Qcm9wZXJ0eSIsImlzQXJyYXkiLCJjb252ZXJ0ZWRWYWx1ZXMiLCJ3aXRoTW9uZXkiLCJwcm9wTmFtZU1hcCIsIkVuaGFuY2VkQ29tcG9uZW50IiwibmV4dFN0YXRlIiwiTW9uZXkiLCJmb3JFYWNoIiwicHJvcE5hbWUiLCJTaXRlQ3VycmVuY3kiLCJwdXNoIiwidG9OdW1iZXIiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJpc1NoYWxsb3dFcXVhbEFycmF5cyIsInNldFN0YXRlIiwiZ2V0TmV4dFN0YXRlIiwic2hvdWxkVXBkYXRlU3RhdGVXaXRoQ29udmVydGVkVmFsdWVzIiwic3RhdGUiLCJlbnRpdHlQYWdlIiwibmV4dFByb3BzIiwiaXNFcXVhbCIsImVudGl0aWVzUGVyUGFnZSIsInBvc2l0aW9uIiwibGFiZWxzIiwiZmlyc3QiLCJsYXN0IiwicHJldmlvdXMiLCJuZXh0Iiwibm9SZXN1bHRzVGV4dCIsInJldHVybkFzUHJvcCIsInBhZ2luYXRpb24iLCJvblBhZ2luYXRpb25DaGFuZ2UiLCJ0b3BQYWdpbmF0aW9uIiwiYm90dG9tUGFnaW5hdGlvbiIsImFycmF5Iiwid2l0aExhdGVzdENoZWNraW4iLCJyZWdpc3RyYXRpb24iLCJkYXRldGltZUlkIiwiaXNNb2RlbEVudGl0eU9mTW9kZWwiLCJnZXRMYXRlc3RDaGVja2luIiwiaGFzRmluaXNoZWRSZXNvbHV0aW9uIiwiY2hlY2tJbkVudGl0eSIsImNoZWNraW5FbnRpdHkiLCJoYXNSZXNvbHZlZENoZWNraW4iLCJ0b2dnbGVDaGVja2luIiwib25DbGljayJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUEwQyxnQ0FBZ0M7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBd0Qsa0JBQWtCO0FBQzFFO0FBQ0EseURBQWlELGNBQWM7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUF5QyxpQ0FBaUM7QUFDMUUsd0hBQWdILG1CQUFtQixFQUFFO0FBQ3JJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7OztBQUdBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQTs7O0FBR0E7QUFL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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxVQUFVLEtBQXFDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHNCQUFzQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsSUFBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQkFBcUIsMkJBQTJCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQyw0RkFBNEYsU0FBTTtBQUM3STtBQUNBOztBQUVBLG1CQUFtQixnQ0FBZ0M7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLGdDQUFnQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7QUM5a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLElBQXFDO0FBQ3pDLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1RkFBMkI7QUFDdEQsQ0FBQyxNQUFNLEVBSU47Ozs7Ozs7Ozs7Ozs7QUNsQkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViOztBQUVBOzs7Ozs7Ozs7Ozs7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7OztBQUliLElBQUksSUFBcUM7QUFDekM7QUFDQTs7QUFFQSw4Q0FBOEMsY0FBYzs7QUFFNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNGQUFzRixhQUFhO0FBQ25HO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRGQUE0RixlQUFlO0FBQzNHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7Ozs7Ozs7Ozs7Ozs7QUNsT2E7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDO0FBQ0QsbUJBQW1CLG1CQUFPLENBQUMsa0hBQStCO0FBQzFEOzs7Ozs7Ozs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLGFBQW9COztBQUVsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixXQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixXQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7QUM3REEsYUFBYSx1Q0FBdUMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F0RCxhQUFhLDZDQUE2QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQTVELGFBQWEsK0NBQStDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBOUQsYUFBYSwyQ0FBMkMsRUFBRSxJOzs7Ozs7Ozs7OztBQ0ExRCxhQUFhLHdDQUF3QyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQXZELGFBQWEscUNBQXFDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBcEQsYUFBYSx3Q0FBd0MsRUFBRSxJOzs7Ozs7Ozs7OztBQ0F2RCxhQUFhLCtDQUErQyxFQUFFLEk7Ozs7Ozs7Ozs7O0FDQTlELGFBQWEsaUNBQWlDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBaEQsYUFBYSxnQ0FBZ0MsRUFBRSxJIiwiZmlsZSI6ImV2ZW50ZXNwcmVzc28taG9jcy4yN2RkY2IyMjA4MjYzOWQ5NWRmZC5kaXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9hc3NldHMvc3JjL2hpZ2hlci1vcmRlci1jb21wb25lbnRzL2luZGV4LmpzXCIpO1xuIiwiLyoqXG4gKiBXb3JkUHJlc3MgSW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRjb21wb3NlLFxuXHRjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCxcblx0d2l0aEluc3RhbmNlSWQsXG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgQmFzZUNvbnRyb2wgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuXG4vKipcbiAqIEV4dGVybmFsIEltcG9ydHNcbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgKCBjdXN0b21JZCA9ICcnICkgPT4gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoSW5zdGFuY2VJZCxcblx0XHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiB7XG5cdFx0XHRyZXR1cm4gY2xhc3MgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRcdFx0XHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdFx0XHRcdGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRcdGluc3RhbmNlSWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRcdFx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRcdFx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHRcdF0gKSxcblx0XHRcdFx0XHRjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0XHRcdFx0aGVscDogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuXHRcdFx0XHRcdGxhYmVsOiBXcmFwcGVkQ29tcG9uZW50LmRlZmF1bHRQcm9wcyAmJlxuXHRcdFx0XHRcdFx0V3JhcHBlZENvbXBvbmVudC5kZWZhdWx0UHJvcHMubGFiZWwgP1xuXHRcdFx0XHRcdFx0V3JhcHBlZENvbXBvbmVudC5kZWZhdWx0UHJvcHMubGFiZWwgOlxuXHRcdFx0XHRcdFx0JycsXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0cmVuZGVyKCkge1xuXHRcdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRcdGxhYmVsLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2VJZCxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0XHRcdGhlbHAsXG5cdFx0XHRcdFx0fSA9IHRoaXMucHJvcHM7XG5cdFx0XHRcdFx0Y29uc3QgaWQgPSBgaW5zcGVjdG9yLSR7IGN1c3RvbUlkIH0tY29udHJvbC0keyBpbnN0YW5jZUlkIH1gO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QmFzZUNvbnRyb2xcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBsYWJlbCB9XG5cdFx0XHRcdFx0XHRcdGlkPXsgaWQgfVxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9eyBjbGFzc05hbWUgfVxuXHRcdFx0XHRcdFx0XHRoZWxwPXsgaGVscCB9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxXcmFwcGVkQ29tcG9uZW50IHsgLi4udGhpcy5wcm9wcyB9IGxhYmVsPXsgJycgfSBpZD17IGlkIH0gLz5cblx0XHRcdFx0XHRcdDwvQmFzZUNvbnRyb2w+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9LFxuXHRdICksXG5cdCd3aXRoQmFzZUNvbnRyb2wnXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiwgU2VsZWN0Q29udHJvbCwgVGV4dENvbnRyb2wgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5cbi8qKlxuICogRW50aXR5TGlzdEZpbHRlckJhclxuICogYSBncm91cCBvZiBpbnB1dHMgZm9yIGNvbnRyb2xsaW5nIGhvdyBhIGxpc3Qgb2YgZW50aXRpZXMgaXMgZGlzcGxheWVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eUZpbHRlcnMgYWRkaXRpb25hbCBlbnRpdHkgc3BlY2lmaWMgZmlsdGVyc1xuICogQHBhcmFtIHtudW1iZXJ9IHBlclBhZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSB2aWV3XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRQZXJQYWdlIGNhbGxiYWNrIGZvciBwZXJQYWdlIGlucHV0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRMaXN0VmlldyBjYWxsYmFjayBmb3IgbGlzdCB2aWV3IGljb24gYnV0dG9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRHcmlkVmlldyBjYWxsYmFjayBmb3IgZ3JpZCB2aWV3IGljb24gYnV0dG9uXG4gKiBAcmV0dXJuIHtPYmplY3R9IEVudGl0eUxpc3RGaWx0ZXJCYXJcbiAqL1xuY2xhc3MgRW50aXR5TGlzdEZpbHRlckJhciBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0ZW50aXR5RmlsdGVyczogUHJvcFR5cGVzLm9iamVjdCxcblx0XHRwZXJQYWdlOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cdFx0dmlldzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdHNldFBlclBhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c2V0TGlzdFZpZXc6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c2V0R3JpZFZpZXc6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXh0XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldFNlYXJjaFRleHRcblx0ICogQHJldHVybiB7T2JqZWN0fSByZW5kZXJlZCBzZWFyY2ggaW5wdXRcblx0ICovXG5cdHNlYXJjaCA9ICggc2VhcmNoVGV4dCwgc2V0U2VhcmNoVGV4dCApID0+IHtcblx0XHRyZXR1cm4gaXNGdW5jdGlvbiggc2V0U2VhcmNoVGV4dCApID8gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8VGV4dENvbnRyb2xcblx0XHRcdFx0XHRsYWJlbD17IF9fKCAnc2VhcmNoJywgJ2V2ZW50X2VzcHJlc3NvJyApIH1cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXNlYXJjaFwiXG5cdFx0XHRcdFx0dmFsdWU9eyBzZWFyY2hUZXh0IH1cblx0XHRcdFx0XHRvbkNoYW5nZT17IHNldFNlYXJjaFRleHQgfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpIDogbnVsbDtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBlclBhZ2Vcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0UGVyUGFnZVxuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIHBlclBhZ2Ugc2VsZWN0IGlucHV0XG5cdCAqL1xuXHRwZXJQYWdlID0gKCBwZXJQYWdlLCBzZXRQZXJQYWdlICkgPT4gKFxuXHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRsYWJlbD17IF9fKCAncGVyIHBhZ2UnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0Y2xhc3NOYW1lPVwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhci1wZXJQYWdlLXNlbGVjdFwiXG5cdFx0XHR2YWx1ZT17IHBlclBhZ2UgfVxuXHRcdFx0b3B0aW9ucz17IFtcblx0XHRcdFx0eyB2YWx1ZTogMiwgbGFiZWw6IDIgfSxcblx0XHRcdFx0eyB2YWx1ZTogNiwgbGFiZWw6IDYgfSxcblx0XHRcdFx0eyB2YWx1ZTogMTIsIGxhYmVsOiAxMiB9LFxuXHRcdFx0XHR7IHZhbHVlOiAyNCwgbGFiZWw6IDI0IH0sXG5cdFx0XHRcdHsgdmFsdWU6IDQ4LCBsYWJlbDogNDggfSxcblx0XHRcdF0gfVxuXHRcdFx0b25DaGFuZ2U9eyBzZXRQZXJQYWdlIH1cblx0XHQvPlxuXHQpO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdmlld1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRMaXN0Vmlld1xuXHQgKiBAcmV0dXJuIHtPYmplY3R9IHJlbmRlcmVkIGxpc3QgdmlldyBpY29uIGJ1dHRvblxuXHQgKi9cblx0bGlzdFZpZXcgPSAoIHZpZXcsIHNldExpc3RWaWV3ICkgPT4gKFxuXHRcdDxJY29uQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9eyB2aWV3ID09PSAnbGlzdCcgPyAnYWN0aXZlLWxpc3QnIDogJycgfVxuXHRcdFx0aWNvbj1cImVkaXRvci1qdXN0aWZ5XCJcblx0XHRcdHRvb2x0aXA9eyBfXyggJ2xpc3QgdmlldycsICdldmVudF9lc3ByZXNzbycgKSB9XG5cdFx0XHRvbkNsaWNrPXsgc2V0TGlzdFZpZXcgfVxuXHRcdC8+XG5cdCk7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2aWV3XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldEdyaWRWaWV3XG5cdCAqIEByZXR1cm4ge09iamVjdH0gcmVuZGVyZWQgZ3JpZCB2aWV3IGljb24gYnV0dG9uXG5cdCAqL1xuXHRncmlkVmlldyA9ICggdmlldywgc2V0R3JpZFZpZXcgKSA9PiAoXG5cdFx0PEljb25CdXR0b25cblx0XHRcdGNsYXNzTmFtZT17IHZpZXcgPT09ICdncmlkJyA/ICdhY3RpdmUtbGlzdCcgOiAnJyB9XG5cdFx0XHRpY29uPVwic2NyZWVub3B0aW9uc1wiXG5cdFx0XHR0b29sdGlwPXsgX18oICdncmlkIHZpZXcnLCAnZXZlbnRfZXNwcmVzc28nICkgfVxuXHRcdFx0b25DbGljaz17IHNldEdyaWRWaWV3IH1cblx0XHQvPlxuXHQpO1xuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRzZWFyY2hUZXh0ID0gJycsXG5cdFx0XHRzZXRTZWFyY2hUZXh0LFxuXHRcdFx0cGVyUGFnZSxcblx0XHRcdHZpZXcsXG5cdFx0XHRzZXRQZXJQYWdlLFxuXHRcdFx0c2V0TGlzdFZpZXcsXG5cdFx0XHRzZXRHcmlkVmlldyxcblx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRjb25zdCBlbnRpdHlGaWx0ZXJzID0gdGhpcy5wcm9wcy5lbnRpdHlGaWx0ZXJzID9cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhclwiPlxuXHRcdFx0XHR7IHRoaXMucHJvcHMuZW50aXR5RmlsdGVycyB9XG5cdFx0XHQ8L2Rpdj4gOlxuXHRcdFx0bnVsbDtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXJcIj5cblx0XHRcdFx0eyBlbnRpdHlGaWx0ZXJzIH1cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJlZS1lbnRpdHktbGlzdC12aWV3LWJhclwiPlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImVlLXNlYXJjaC1maWx0ZXIgZWUtZmlsdGVyLWJhci1maWx0ZXJcIj5cblx0XHRcdFx0XHRcdHsgdGhpcy5zZWFyY2goIHNlYXJjaFRleHQsIHNldFNlYXJjaFRleHQgKSB9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtcGVyLXBhZ2UtZmlsdGVyIGVlLWZpbHRlci1iYXItZmlsdGVyXCI+XG5cdFx0XHRcdFx0XHR7IHRoaXMucGVyUGFnZSggcGVyUGFnZSwgc2V0UGVyUGFnZSApIH1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJlZS12aWV3LWZpbHRlciBlZS1maWx0ZXItYmFyLWZpbHRlclwiPlxuXHRcdFx0XHRcdFx0eyB0aGlzLmxpc3RWaWV3KCB2aWV3LCBzZXRMaXN0VmlldyApIH1cblx0XHRcdFx0XHRcdHsgdGhpcy5ncmlkVmlldyggdmlldywgc2V0R3JpZFZpZXcgKSB9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBFbnRpdHlMaXN0RmlsdGVyQmFyO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRlZmF1bHQgYXMgd2l0aEVudGl0eVBhZ2luYXRpb24gfSBmcm9tICcuLi9wYWdpbmF0aW9uJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0ZGVmYXVsdCBhcyB3aXRoRW50aXR5TGlzdEZpbHRlckJhcixcbn0gZnJvbSAnLi93aXRoLWVudGl0eS1saXN0LWZpbHRlci1iYXInO1xuaW1wb3J0IHtcblx0ZGVmYXVsdCBhcyB3aXRoRW50aXR5TGlzdEZpbHRlclN0YXRlLFxufSBmcm9tICcuL3dpdGgtZW50aXR5LWxpc3QtZmlsdGVyLXN0YXRlJztcblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRlZEVudGl0eUxpc3RXaXRoRmlsdGVyQmFyID0gKFxuXHRFbnRpdHlMaXN0LFxuXHRwYWdpbmF0aW9uQ29uZmlnID0ge30sXG4pID0+IHdpdGhFbnRpdHlMaXN0RmlsdGVyQmFyKFxuXHR3aXRoRW50aXR5UGFnaW5hdGlvbiggcGFnaW5hdGlvbkNvbmZpZyApKCBFbnRpdHlMaXN0IClcbik7XG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0ZWRFbnRpdHlMaXN0V2l0aEZpbHRlckJhckFuZFN0YXRlID0gKFxuXHRFbnRpdHlMaXN0LFxuXHRwYWdpbmF0aW9uQ29uZmlnID0ge30sXG4pID0+IHdpdGhFbnRpdHlMaXN0RmlsdGVyU3RhdGUoIHdpdGhFbnRpdHlMaXN0RmlsdGVyQmFyKFxuXHR3aXRoRW50aXR5UGFnaW5hdGlvbiggcGFnaW5hdGlvbkNvbmZpZyApKCBFbnRpdHlMaXN0IClcbikgKTtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbnRpdHlMaXN0RmlsdGVyQmFyIH0gZnJvbSAnLi9lbnRpdHktbGlzdC1maWx0ZXItYmFyJztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXdyYXBwZXJcIjpcImVlLWVudGl0eS1saXN0LWZpbHRlci1iYXItd3JhcHBlclwiLFwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhclwiOlwiZWUtZW50aXR5LWxpc3QtZmlsdGVyLWJhclwiLFwiZWUtZW50aXR5LWxpc3Qtdmlldy1iYXJcIjpcImVlLWVudGl0eS1saXN0LXZpZXctYmFyXCIsXCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXBlclBhZ2Utc2VsZWN0XCI6XCJlZS1lbnRpdHktbGlzdC1maWx0ZXItYmFyLXBlclBhZ2Utc2VsZWN0XCIsXCJlZS1maWx0ZXItYmFyLWZpbHRlclwiOlwiZWUtZmlsdGVyLWJhci1maWx0ZXJcIixcImVlLXNlYXJjaC1maWx0ZXJcIjpcImVlLXNlYXJjaC1maWx0ZXJcIixcImVlLXBlci1wYWdlLWZpbHRlclwiOlwiZWUtcGVyLXBhZ2UtZmlsdGVyXCIsXCJlZS1ncmlkLXZpZXctZmlsdGVyXCI6XCJlZS1ncmlkLXZpZXctZmlsdGVyXCIsXCJlZS1saXN0LXZpZXctZmlsdGVyXCI6XCJlZS1saXN0LXZpZXctZmlsdGVyXCIsXCJjb21wb25lbnRzLWljb24tYnV0dG9uXCI6XCJjb21wb25lbnRzLWljb24tYnV0dG9uXCIsXCJhY3RpdmUtbGlzdFwiOlwiYWN0aXZlLWxpc3RcIixcImNvbXBvbmVudHMtYmFzZS1jb250cm9sX19sYWJlbFwiOlwiY29tcG9uZW50cy1iYXNlLWNvbnRyb2xfX2xhYmVsXCIsXCJjb21wb25lbnRzLXNlbGVjdC1jb250cm9sX19pbnB1dFwiOlwiY29tcG9uZW50cy1zZWxlY3QtY29udHJvbF9faW5wdXRcIixcImNvbXBvbmVudHMtdGV4dC1jb250cm9sX19pbnB1dFwiOlwiY29tcG9uZW50cy10ZXh0LWNvbnRyb2xfX2lucHV0XCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFbnRpdHlMaXN0RmlsdGVyQmFyIH0gZnJvbSAnLi9lbnRpdHktbGlzdC1maWx0ZXItYmFyJztcblxuLyoqXG4gKiB3aXRoRW50aXR5TGlzdEZpbHRlckJhclxuICogSGlnaGVyLU9yZGVyLUNvbXBvbmVudCB0aGF0IHdyYXBzIGFuIEVudGl0eUxpc3QgY29tcG9uZW50XG4gKiBmb3IgY2hhbmdpbmcgaG93IHRoZSBFbnRpdHlMaXN0IGlzIHZpZXdlZFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gRW50aXR5TGlzdCB3aXRoIGFkZGVkIEVudGl0eUxpc3RGaWx0ZXJCYXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdCggRW50aXR5TGlzdCApID0+IHtcblx0XHRyZXR1cm4gY2xhc3MgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRcdFx0c2VhcmNoRW50aXRpZXMgPSAoIHNlYXJjaFRleHQsIGVudGl0aWVzICkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gc2VhcmNoVGV4dCAhPT0gJycgP1xuXHRcdFx0XHRcdGVudGl0aWVzLmZpbHRlciggKCBlbnRpdHkgKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlOYW1lID0gZW50aXR5Lm5hbWUgPyBlbnRpdHkubmFtZSA6ICcnO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVudGl0eU5hbWUudG9Mb3dlckNhc2UoKS5zZWFyY2goXG5cdFx0XHRcdFx0XHRcdHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSApICE9PSAtMTtcblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGVudGl0aWVzO1xuXHRcdFx0fTtcblxuXHRcdFx0cmVuZGVyKCkge1xuXHRcdFx0XHRsZXQgeyBlbnRpdGllcyB9ID0gdGhpcy5wcm9wcztcblx0XHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRcdHNlYXJjaFRleHQsXG5cdFx0XHRcdFx0c2V0U2VhcmNoVGV4dCxcblx0XHRcdFx0XHRwZXJQYWdlLFxuXHRcdFx0XHRcdHZpZXcsXG5cdFx0XHRcdFx0c2V0UGVyUGFnZSxcblx0XHRcdFx0XHRzZXRMaXN0Vmlldyxcblx0XHRcdFx0XHRzZXRHcmlkVmlldyxcblx0XHRcdFx0XHQuLi5vdGhlclByb3BzXG5cdFx0XHRcdH0gPSB0aGlzLnByb3BzO1xuXHRcdFx0XHRlbnRpdGllcyA9IGlzRnVuY3Rpb24oIHNldFNlYXJjaFRleHQgKSA/XG5cdFx0XHRcdFx0dGhpcy5zZWFyY2hFbnRpdGllcyggc2VhcmNoVGV4dCwgZW50aXRpZXMgKSA6XG5cdFx0XHRcdFx0ZW50aXRpZXM7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHRcdFx0PEVudGl0eUxpc3RGaWx0ZXJCYXJcblx0XHRcdFx0XHRcdFx0c2VhcmNoVGV4dD17IHNlYXJjaFRleHQgfVxuXHRcdFx0XHRcdFx0XHRzZXRTZWFyY2hUZXh0PXsgc2V0U2VhcmNoVGV4dCB9XG5cdFx0XHRcdFx0XHRcdHBlclBhZ2U9eyBwZXJQYWdlIH1cblx0XHRcdFx0XHRcdFx0dmlldz17IHZpZXcgfVxuXHRcdFx0XHRcdFx0XHRzZXRQZXJQYWdlPXsgc2V0UGVyUGFnZSB9XG5cdFx0XHRcdFx0XHRcdHNldExpc3RWaWV3PXsgc2V0TGlzdFZpZXcgfVxuXHRcdFx0XHRcdFx0XHRzZXRHcmlkVmlldz17IHNldEdyaWRWaWV3IH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8RW50aXR5TGlzdFxuXHRcdFx0XHRcdFx0XHRlbnRpdGllcz17IGVudGl0aWVzIH1cblx0XHRcdFx0XHRcdFx0ZW50aXRpZXNQZXJQYWdlPXsgcGVyUGFnZSB9XG5cdFx0XHRcdFx0XHRcdHZpZXc9eyB2aWV3IH1cblx0XHRcdFx0XHRcdFx0bm9SZXN1bHRzVGV4dD17XG5cdFx0XHRcdFx0XHRcdFx0X18oXG5cdFx0XHRcdFx0XHRcdFx0XHQnbm8gcmVzdWx0cyBmb3VuZCAodHJ5IGNoYW5naW5nIGZpbHRlcnMpJyxcblx0XHRcdFx0XHRcdFx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9LFxuXHQnd2l0aEVudGl0eUxpc3RGaWx0ZXJCYXInXG4pO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQsIGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgd2l0aFNlbGVjdCwgd2l0aERpc3BhdGNoIH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcblxuLyoqXG4gKiB3aXRoRW50aXR5TGlzdEZpbHRlclN0YXRlXG4gKiBIaWdoZXItT3JkZXItQ29tcG9uZW50IHRoYXQgd3JhcHMgYW4gXCJFbnRpdHlMaXN0RmlsdGVyQmFyXCIgY29tcG9uZW50XG4gKiBpbiBvcmRlciB0byBwcm92aWRlIHN0YXRlIG1hbmFnZW1lbnQgZm9yIGl0IGFuZCBpdHMgY2hpbGRyZW5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gV3JhcHBlZENvbXBvbmVudFxuICogQHJldHVybiB7T2JqZWN0fSBXcmFwcGVkQ29tcG9uZW50IHdpdGggYWRkZWQgRW50aXR5TGlzdEZpbHRlclN0YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHRjb21wb3NlKCBbXG5cdFx0d2l0aFNlbGVjdCggKCBzZWxlY3QsIG93blByb3BzICkgPT4ge1xuXHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRzZWFyY2hUZXh0ID0gJycsXG5cdFx0XHRcdHBlclBhZ2UgPSA2LFxuXHRcdFx0XHR2aWV3ID0gJ2dyaWQnLFxuXHRcdFx0fSA9IG93blByb3BzO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2ZpbHRlci1zdGF0ZScgKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlYXJjaFRleHQ6IHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHQnZW50aXR5LWxpc3QnLFxuXHRcdFx0XHRcdCdzZWFyY2hUZXh0Jyxcblx0XHRcdFx0XHRzZWFyY2hUZXh0XG5cdFx0XHRcdCksXG5cdFx0XHRcdHBlclBhZ2U6IHBhcnNlSW50KFxuXHRcdFx0XHRcdHN0b3JlLmdldEZpbHRlcihcblx0XHRcdFx0XHRcdCdlbnRpdHktbGlzdCcsXG5cdFx0XHRcdFx0XHQncGVyUGFnZScsXG5cdFx0XHRcdFx0XHRwZXJQYWdlXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHQxMFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR2aWV3OiBzdG9yZS5nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2VudGl0eS1saXN0Jyxcblx0XHRcdFx0XHQndmlldycsXG5cdFx0XHRcdFx0dmlld1xuXHRcdFx0XHQpLFxuXHRcdFx0fTtcblx0XHR9ICksXG5cdFx0d2l0aERpc3BhdGNoKCAoIGRpc3BhdGNoICkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBkaXNwYXRjaCggJ2V2ZW50ZXNwcmVzc28vZmlsdGVyLXN0YXRlJyApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2V0U2VhcmNoVGV4dDogKCBzZWFyY2hUZXh0ICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdlbnRpdHktbGlzdCcsXG5cdFx0XHRcdFx0J3NlYXJjaFRleHQnLFxuXHRcdFx0XHRcdHNlYXJjaFRleHRcblx0XHRcdFx0KSxcblx0XHRcdFx0c2V0UGVyUGFnZTogKCBwZXJQYWdlICkgPT4gc3RvcmUuc2V0RmlsdGVyKFxuXHRcdFx0XHRcdCdlbnRpdHktbGlzdCcsXG5cdFx0XHRcdFx0J3BlclBhZ2UnLFxuXHRcdFx0XHRcdHBhcnNlSW50KCBwZXJQYWdlLCAxMCApXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldExpc3RWaWV3OiAoKSA9PiBzdG9yZS5zZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2VudGl0eS1saXN0Jyxcblx0XHRcdFx0XHQndmlldycsXG5cdFx0XHRcdFx0J2xpc3QnXG5cdFx0XHRcdCksXG5cdFx0XHRcdHNldEdyaWRWaWV3OiAoKSA9PiBzdG9yZS5zZXRGaWx0ZXIoXG5cdFx0XHRcdFx0J2VudGl0eS1saXN0Jyxcblx0XHRcdFx0XHQndmlldycsXG5cdFx0XHRcdFx0J2dyaWQnXG5cdFx0XHRcdCksXG5cdFx0XHR9O1xuXHRcdH0gKSxcblx0XHQoIFdyYXBwZWRDb21wb25lbnQgKSA9PiB7XG5cdFx0XHRyZXR1cm4gY2xhc3MgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRcdFx0XHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdFx0XHRcdGVudGl0aWVzOiBQcm9wVHlwZXMuYXJyYXlPZiggUHJvcFR5cGVzLm9iamVjdCApLmlzUmVxdWlyZWQsXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJlbmRlcigpIHtcblx0XHRcdFx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnQgeyAuLi50aGlzLnByb3BzIH0gLz47XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSxcblx0XSApLFxuXHQnd2l0aEVudGl0eUxpc3RGaWx0ZXJTdGF0ZSdcbik7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhCYXNlQ29udHJvbCB9IGZyb20gJy4vYmFzZS1jb250cm9sJztcbmV4cG9ydCB7XG5cdFBhZ2luYXRlZEVudGl0eUxpc3RXaXRoRmlsdGVyQmFyLFxuXHRQYWdpbmF0ZWRFbnRpdHlMaXN0V2l0aEZpbHRlckJhckFuZFN0YXRlLFxuXHRFbnRpdHlMaXN0RmlsdGVyQmFyLFxufSBmcm9tICcuL2ZpbHRlci1iYXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoRW50aXR5UGFnaW5hdGlvbiB9IGZyb20gJy4vcGFnaW5hdGlvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhMYXRlc3RDaGVja2luIH0gZnJvbSAnLi93aXRoLWxhdGVzdC1jaGVja2luJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aE1vbmV5IH0gZnJvbSAnLi9tb25leSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGlzU2hhbGxvd0VxdWFsQXJyYXlzIGZyb20gJ0B3b3JkcHJlc3MvaXMtc2hhbGxvdy1lcXVhbCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcbmltcG9ydCB7IE1vbmV5LCBTaXRlQ3VycmVuY3kgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcblxuLyoqXG4gKiBUaGlzIHZhbGlkYXRlcyB3aGV0aGVyIHRoZSBuZXh0U3RhdGVSZXNwb25zZSBpcyBpbiB0aGUgZXhwZWN0ZWQgc2hhcGUuXG4gKiBJZiBhbnkgb2YgdGhlIHZhbGlkYXRpb24gZmFpbHMsIHRoZW4gYSBjb25zb2xlLmVycm9yIGlzIHRyaWdnZXJlZCAodmlhXG4gKiB3YXJuaW5nKVxuICpcbiAqIEBwYXJhbSB7e319IG5leHRTdGF0ZVJlc3BvbnNlXG4gKi9cbmNvbnN0IHZhbGlkYXRlTmV4dFN0YXRlID0gKCBuZXh0U3RhdGVSZXNwb25zZSApID0+IHtcblx0d2FybmluZyhcblx0XHRuZXh0U3RhdGVSZXNwb25zZSAmJlxuXHRcdG5leHRTdGF0ZVJlc3BvbnNlLmhhc093blByb3BlcnR5KCAnY29udmVydGVkVmFsdWVzJyApLFxuXHRcdCdUaGUgcHJvcE5hbWVNYXAgY2FsbGJhY2sgZm9yIHRoZSB3aXRoTW9uZXkgSE9DIHNob3VsZCByZXR1cm4gYW4nICtcblx0XHQnIG9iamVjdCB3aXRoIGEgXCJjb252ZXJ0ZWRWYWx1ZXNcIiBrZXkuJ1xuXHQpO1xuXHRpZiAoIG5leHRTdGF0ZVJlc3BvbnNlICYmXG5cdFx0bmV4dFN0YXRlUmVzcG9uc2UuaGFzT3duUHJvcGVydHkoICdjb252ZXJ0ZWRWYWx1ZXMnICkgKSB7XG5cdFx0d2FybmluZyhcblx0XHRcdGlzQXJyYXkoIG5leHRTdGF0ZVJlc3BvbnNlLmNvbnZlcnRlZFZhbHVlcyApLFxuXHRcdFx0J1RoZSBwcm9wTmFtZU1hcCBjYWxsYmFjayBmb3IgdGhlIHdpdGhNb25leSBIT0Mgc2hvdWxkIHJldHVybiBhbiAnICtcblx0XHRcdCdvYmplY3Qgd2l0aCBhIFwiY29udmVydGVkVmFsdWVzXCIga2V5IHRoYXQgaGFzIGFuIGFycmF5JyArXG5cdFx0XHQnIG9mIG51bWJlcnMgYXMgdGhlIHZhbHVlLidcblx0XHQpO1xuXHR9XG5cdHdhcm5pbmcoXG5cdFx0bmV4dFN0YXRlUmVzcG9uc2UgJiYgbmV4dFN0YXRlUmVzcG9uc2UuaGFzT3duUHJvcGVydHkoICdwcm9wcycgKSxcblx0XHQnVGhlIHByb3BOYW1lTWFwIGNhbGxiYWNrIGZvciB0aGUgd2l0aE1vbmV5SE9DIHNob3VsZCByZXR1cm4gYW4nICtcblx0XHQnIG9iamVjdCB3aXRoIGEgXCJwcm9wc1wiIGtleS4nXG5cdCk7XG59O1xuXG4vKipcbiAqIEEgaGlnaGVyIG9yZGVyIGNvbXBvbmVudCB0aGF0IGNvbnZlcnRzIGFueSBwcm9wcyBtYXRjaGluZyB0aGUgbWFwIHByb3ZpZGVkXG4gKiBhcyBhbiBhcmd1bWVudCB0byBNb25leSB2YWx1ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlbSB0byB0aGUgV3JhcHBlZENvbXBvbmVudFxuICpcbiAqIEBwYXJhbSB7QXJyYXl8ZnVuY3Rpb259IHByb3BOYW1lTWFwXG4gKiBAcmV0dXJuIHtmdW5jdGlvbigqKTogRW5oYW5jZWRDb21wb25lbnR9ICBSZXR1cm5zIGFuIGVuaGFuY2VkIGNvbXBvbmVudCB3aGVyZVxuICogcHJvcHMgdGhhdCByZXByZXNlbnQgbW9uZXkgdmFsdWVzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gYSBNb25leSB2YWx1ZSBvYmplY3RcbiAqL1xuY29uc3Qgd2l0aE1vbmV5ID0gKCBwcm9wTmFtZU1hcCA9IFtdICkgPT4gKCBXcmFwcGVkQ29tcG9uZW50ICkgPT4ge1xuXHRjbGFzcyBFbmhhbmNlZENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudCB7XG5cdFx0c3RhdGUgPSB7XG5cdFx0XHRjb252ZXJ0ZWRWYWx1ZXM6IFtdLFxuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBUaGlzIHByb3ZpZGVzIHRoZSBuZXh0IHN0YXRlIG9uIGFueSBwcm9wIGNoYW5nZS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7e319IHByb3BzXG5cdFx0ICogQHJldHVybiB7e319IEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5leHRTdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cblx0XHQgKi9cblx0XHRnZXROZXh0U3RhdGUgPSAoIHByb3BzICkgPT4ge1xuXHRcdFx0bGV0IG5leHRTdGF0ZVJlc3BvbnNlLFxuXHRcdFx0XHRuZXh0U3RhdGUgPSB7fSxcblx0XHRcdFx0Y29udmVydGVkVmFsdWVzID0gW107XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BOYW1lTWFwICkgKSB7XG5cdFx0XHRcdG5leHRTdGF0ZVJlc3BvbnNlID0gcHJvcE5hbWVNYXAoIHByb3BzLCBNb25leSApO1xuXHRcdFx0XHR2YWxpZGF0ZU5leHRTdGF0ZSggbmV4dFN0YXRlUmVzcG9uc2UgKTtcblx0XHRcdFx0aWYgKCBuZXh0U3RhdGVSZXNwb25zZSAmJiBuZXh0U3RhdGVSZXNwb25zZS5wcm9wcyApIHtcblx0XHRcdFx0XHRuZXh0U3RhdGUgPSB7IC4uLm5leHRTdGF0ZVJlc3BvbnNlLnByb3BzIH07XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udmVydGVkVmFsdWVzID0gbmV4dFN0YXRlUmVzcG9uc2UuY29udmVydGVkVmFsdWVzIHx8XG5cdFx0XHRcdFx0Y29udmVydGVkVmFsdWVzO1xuXHRcdFx0fSBlbHNlIGlmICggaXNBcnJheSggcHJvcE5hbWVNYXAgKSApIHtcblx0XHRcdFx0cHJvcE5hbWVNYXAuZm9yRWFjaCggKCBwcm9wTmFtZSApID0+IHtcblx0XHRcdFx0XHRpZiAoIHByb3BzWyBwcm9wTmFtZSBdICkge1xuXHRcdFx0XHRcdFx0bmV4dFN0YXRlWyBwcm9wTmFtZSBdID1cblx0XHRcdFx0XHRcdFx0bmV3IE1vbmV5KFxuXHRcdFx0XHRcdFx0XHRcdHByb3BzWyBwcm9wTmFtZSBdLFxuXHRcdFx0XHRcdFx0XHRcdFNpdGVDdXJyZW5jeVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Y29udmVydGVkVmFsdWVzLnB1c2goXG5cdFx0XHRcdFx0XHRcdG5leHRTdGF0ZVsgcHJvcE5hbWUgXS50b051bWJlcigpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2FybmluZyhcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHQnVGhlIHByb3BOYW1lTWFwIGFyZ3VtZW50IHByb3ZpZGVkIHRvIHdpdGhNb25leSBtdXN0IGJlIGVpdGhlciBhJyArXG5cdFx0XHRcdFx0JyBmdW5jdGlvbiBvciBhbiBhcnJheSdcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG5leHRTdGF0ZS5jb252ZXJ0ZWRWYWx1ZXMgPSBjb252ZXJ0ZWRWYWx1ZXM7XG5cdFx0XHRyZXR1cm4gbmV4dFN0YXRlO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBDYWxjdWxhdGVzIHdoZXRoZXIgdGhlIHN0YXRlIHNob3VsZCBiZSB1cGRhdGVkIHVzaW5nIHRoZSBwcm92aWRlZFxuXHRcdCAqIGFyZ3VtZW50cy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7e319IHByZXZQcm9wc1xuXHRcdCAqIEBwYXJhbSB7e319IHByZXZTdGF0ZVxuXHRcdCAqIEBwYXJhbSB7e319IG5leHRTdGF0ZVxuXHRcdCAqIEByZXR1cm4ge2Jvb2xlYW59ICBJZiBhIHNoYWxsb3cgY29tcGFyZSBvZiBwcmV2U3RhdGUuY29udmVydGVkVmFsdWVzXG5cdFx0ICogYW5kIG5leHRTdGF0ZS5jb252ZXJ0ZWRWYWx1ZXMgaXMgZmFsc2UsIHRoZW4gdGhpcyByZXR1cm5zIHRydWUgdG9cblx0XHQgKiBzaWduYWwgc3RhdGUgc2hvdWxkIGJlIHVwZGF0ZWQuXG5cdFx0ICovXG5cdFx0c2hvdWxkVXBkYXRlU3RhdGVXaXRoQ29udmVydGVkVmFsdWVzID0gKFxuXHRcdFx0cHJldlByb3BzLFxuXHRcdFx0cHJldlN0YXRlLFxuXHRcdFx0bmV4dFN0YXRlXG5cdFx0KSA9PiB7XG5cdFx0XHRyZXR1cm4gISBpc1NoYWxsb3dFcXVhbEFycmF5cyhcblx0XHRcdFx0bmV4dFN0YXRlLmNvbnZlcnRlZFZhbHVlcyxcblx0XHRcdFx0cHJldlN0YXRlLmNvbnZlcnRlZFZhbHVlc1xuXHRcdFx0KSAmJlxuXHRcdFx0XHRuZXh0U3RhdGUuY29udmVydGVkVmFsdWVzWyAwIF0gIT09XG5cdFx0XHRcdHByZXZTdGF0ZS5jb252ZXJ0ZWRWYWx1ZXNbIDAgXTtcblx0XHR9O1xuXG5cdFx0Y29tcG9uZW50RGlkTW91bnQoKSB7XG5cdFx0XHR0aGlzLnNldFN0YXRlKCB0aGlzLmdldE5leHRTdGF0ZSggdGhpcy5wcm9wcyApICk7XG5cdFx0fVxuXG5cdFx0Y29tcG9uZW50RGlkVXBkYXRlKCBwcmV2UHJvcHMsIHByZXZTdGF0ZSApIHtcblx0XHRcdGNvbnN0IG5leHRTdGF0ZSA9IHRoaXMuZ2V0TmV4dFN0YXRlKCB0aGlzLnByb3BzICk7XG5cdFx0XHRpZiAoIHRoaXMuc2hvdWxkVXBkYXRlU3RhdGVXaXRoQ29udmVydGVkVmFsdWVzKFxuXHRcdFx0XHRwcmV2UHJvcHMsXG5cdFx0XHRcdHByZXZTdGF0ZSxcblx0XHRcdFx0bmV4dFN0YXRlXG5cdFx0XHQpICkge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKCBuZXh0U3RhdGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZW5kZXIoKSB7XG5cdFx0XHRyZXR1cm4gPFdyYXBwZWRDb21wb25lbnQgeyAuLi50aGlzLnByb3BzIH0geyAuLi50aGlzLnN0YXRlIH0gLz47XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIEVuaGFuY2VkQ29tcG9uZW50O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aE1vbmV5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBKd1BhZ2luYXRpb24gZnJvbSAnanctcmVhY3QtcGFnaW5hdGlvbic7XG5pbXBvcnQge1xuXHRjb21wb3NlLFxuXHRjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCxcblx0d2l0aEluc3RhbmNlSWQsXG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuXG4vKipcbiAqIHdpdGhFbnRpdHlQYWdpbmF0aW9uXG4gKiBIaWdoZXItT3JkZXItQ29tcG9uZW50IHRoYXQgd3JhcHMgYW4gXCJFbnRpdHlMaXN0XCIgY29tcG9uZW50XG4gKiB3aXRoIGFuIEVudGl0eVBhZ2luYXRpb24gY29tcG9uZW50IHRoYXQgYWRkcyBhIHBhZ2luYXRpb24gY29udGFpbmVyXG4gKiBiZWxvdyB0aGUgRW50aXR5TGlzdCBhbmQgY29udHJvbHMgd2hhdCBlbnRpdGllcyBhcmUgZGlzcGxheWVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhZ2luYXRpb25Db25maWdcbiAqIEByZXR1cm4ge09iamVjdH0gRW50aXR5TGlzdCB3aXRoIGFkZGVkIEVudGl0eVBhZ2luYXRpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgKCBwYWdpbmF0aW9uQ29uZmlnID0ge30gKSA9PiBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChcblx0Y29tcG9zZSggW1xuXHRcdHdpdGhJbnN0YW5jZUlkLFxuXHRcdCggRW50aXR5TGlzdCApID0+IHtcblx0XHRcdHJldHVybiBjbGFzcyBFbnRpdHlQYWdpbmF0aW9uIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0XHRcdFx0c3RhdGljIHByb3BUeXBlcyA9IHtcblx0XHRcdFx0XHRlbnRpdGllczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG5cdFx0XHRcdFx0aW5zdGFuY2VJZDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXHRcdFx0XHRcdGVudGl0aWVzUGVyUGFnZTogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFx0XHRcdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdFx0XHRcdFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRcdFx0XSApLFxuXHRcdFx0XHRcdHBvc2l0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0cnVjdG9yKCBwcm9wcyApIHtcblx0XHRcdFx0XHRzdXBlciggcHJvcHMgKTtcblx0XHRcdFx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0XHRcdFx0ZW50aXR5UGFnZTogW10sXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNob3VsZENvbXBvbmVudFVwZGF0ZSggbmV4dFByb3BzLCBuZXh0U3RhdGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEgKFxuXHRcdFx0XHRcdFx0aXNFcXVhbCggbmV4dFByb3BzLCB0aGlzLnByb3BzICkgJiZcblx0XHRcdFx0XHRcdGlzRXF1YWwoIG5leHRTdGF0ZS5lbnRpdHlQYWdlLCB0aGlzLnN0YXRlLmVudGl0eVBhZ2UgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogQGZ1bmN0aW9uXG5cdFx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IGVudGl0eVBhZ2Vcblx0XHRcdFx0ICovXG5cdFx0XHRcdG9uUGFnaW5hdGlvbkNoYW5nZSA9ICggZW50aXR5UGFnZSApID0+IHtcblx0XHRcdFx0XHQvLyB1cGRhdGUgbG9jYWwgc3RhdGUgd2l0aCBuZXcgcGFnZSBvZiBpdGVtc1xuXHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoIHsgZW50aXR5UGFnZSB9ICk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0cmVuZGVyKCkge1xuXHRcdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRcdGVudGl0aWVzLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2VJZCxcblx0XHRcdFx0XHRcdGVudGl0aWVzUGVyUGFnZSA9IDEwLFxuXHRcdFx0XHRcdFx0cG9zaXRpb24gPSAndG9wJyxcblx0XHRcdFx0XHRcdC4uLm90aGVyUHJvcHNcblx0XHRcdFx0XHR9ID0gdGhpcy5wcm9wcztcblx0XHRcdFx0XHRwYWdpbmF0aW9uQ29uZmlnLmxhYmVscyA9IHBhZ2luYXRpb25Db25maWcubGFiZWxzICYmXG5cdFx0XHRcdFx0XHRwYWdpbmF0aW9uQ29uZmlnLmxhYmVscy5maXJzdCAmJlxuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5sYWJlbHMubGFzdCAmJlxuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5sYWJlbHMucHJldmlvdXMgJiZcblx0XHRcdFx0XHRcdHBhZ2luYXRpb25Db25maWcubGFiZWxzLm5leHQgP1xuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5sYWJlbHMgOlxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRmaXJzdDogX18oICdGaXJzdCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRcdFx0XHRcdFx0bGFzdDogX18oICdMYXN0JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdFx0XHRwcmV2aW91czogX18oICdQcmV2JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdFx0XHRcdFx0XHRuZXh0OiBfXyggJ05leHQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IG5vUmVzdWx0c1RleHQgPSBwYWdpbmF0aW9uQ29uZmlnLm5vUmVzdWx0c1RleHQgP1xuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbkNvbmZpZy5ub1Jlc3VsdHNUZXh0IDpcblx0XHRcdFx0XHRcdF9fKFxuXHRcdFx0XHRcdFx0XHQnbm8gcmVzdWx0cyBmb3VuZCAodHJ5IGNoYW5naW5nIGZpbHRlcnMpJyxcblx0XHRcdFx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCByZXR1cm5Bc1Byb3AgPSBwYWdpbmF0aW9uQ29uZmlnLnJldHVybkFzUHJvcCA/XG5cdFx0XHRcdFx0XHRwYWdpbmF0aW9uQ29uZmlnLnJldHVybkFzUHJvcCA6XG5cdFx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdFx0XHRjb25zdCBwYWdpbmF0aW9uID0gKFxuXHRcdFx0XHRcdFx0PGRpdiBpZD17IGBlZS1lbnRpdHktcGFnaW5hdGlvbi0keyBpbnN0YW5jZUlkIH1gIH1cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZWUtZW50aXR5LXBhZ2luYXRpb25cIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8SndQYWdpbmF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0aXRlbXM9eyBlbnRpdGllcyB9XG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2VQYWdlPXsgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UgfVxuXHRcdFx0XHRcdFx0XHRcdHBhZ2VTaXplPXsgcGFyc2VJbnQoIGVudGl0aWVzUGVyUGFnZSwgMTAgKSB9XG5cdFx0XHRcdFx0XHRcdFx0eyAuLi5wYWdpbmF0aW9uQ29uZmlnIH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgdG9wUGFnaW5hdGlvbiA9IHBvc2l0aW9uID09PSAoICd0b3AnIHx8ICdib3RoJyApID9cblx0XHRcdFx0XHRcdHBhZ2luYXRpb24gOlxuXHRcdFx0XHRcdFx0bnVsbDtcblx0XHRcdFx0XHRjb25zdCBib3R0b21QYWdpbmF0aW9uID0gcG9zaXRpb24gPT09ICggJ2JvdHRvbScgfHwgJ2JvdGgnICkgP1xuXHRcdFx0XHRcdFx0cGFnaW5hdGlvbiA6XG5cdFx0XHRcdFx0XHRudWxsO1xuXHRcdFx0XHRcdHJldHVybiByZXR1cm5Bc1Byb3AgPyAoXG5cdFx0XHRcdFx0XHQ8RW50aXR5TGlzdFxuXHRcdFx0XHRcdFx0XHRwYWdpbmF0aW9uPXsgcGFnaW5hdGlvbiB9XG5cdFx0XHRcdFx0XHRcdGVudGl0aWVzPXsgdGhpcy5zdGF0ZS5lbnRpdHlQYWdlIH1cblx0XHRcdFx0XHRcdFx0bm9SZXN1bHRzVGV4dD17IG5vUmVzdWx0c1RleHQgfVxuXHRcdFx0XHRcdFx0XHR7IC4uLm90aGVyUHJvcHMgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHRcdFx0XHR7IHRvcFBhZ2luYXRpb24gfVxuXHRcdFx0XHRcdFx0XHQ8RW50aXR5TGlzdFxuXHRcdFx0XHRcdFx0XHRcdGVudGl0aWVzPXsgdGhpcy5zdGF0ZS5lbnRpdHlQYWdlIH1cblx0XHRcdFx0XHRcdFx0XHRub1Jlc3VsdHNUZXh0PXsgbm9SZXN1bHRzVGV4dCB9XG5cdFx0XHRcdFx0XHRcdFx0eyAuLi5vdGhlclByb3BzIH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0eyBib3R0b21QYWdpbmF0aW9uIH1cblx0XHRcdFx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9LFxuXHRdICksXG5cdCd3aXRoRW50aXR5UGFnaW5hdGlvbidcbik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiZWUtZW50aXR5LXBhZ2luYXRpb25cIjpcImVlLWVudGl0eS1wYWdpbmF0aW9uXCIsXCJwYWdpbmF0aW9uXCI6XCJwYWdpbmF0aW9uXCIsXCJkaXNhYmxlZFwiOlwiZGlzYWJsZWRcIixcImFjdGl2ZVwiOlwiYWN0aXZlXCJ9OyIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB3aXRoU2VsZWN0LCB3aXRoRGlzcGF0Y2ggfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHsgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQsIGNvbXBvc2UgfSBmcm9tICdAd29yZHByZXNzL2NvbXBvc2UnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBFeHBvc2VzIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGUgbGF0ZXN0IGNoZWNrLWluIGVudGl0eSBmb3IgYSBnaXZlblxuICogcmVnaXN0cmF0aW9uIGFuZCBkYXRldGltZS5cbiAqXG4gKiBQcm9wZXJ0aWVzIHBhc3NlZCB0aHJvdWdoIHRvIHdyYXBwZWQgY29tcG9uZW50IGFyZTpcbiAqXG4gKiAtIGNoZWNrSW5FbnRpdHkge0Jhc2VFbnRpdHl8bnVsbH0gVGhlIGNoZWNrLWluIGVudGl0eSB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhlXG4gKiBnaXZlbiByZWdpc3RyYXRpb24gYW5kIGRhdGV0aW1lIGlkLlxuICogLSBoYXNSZXNvbHZlZENoZWNraW4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGNoZWNrLWluIGVudGl0eSBzZWxlY3RvciBoYXNcbiAqIHJlc29sdmVkLiAgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdHMgcG9zc2libGUgdGhlcmUgaXMgbm8gZW50aXR5IGZvclxuICogdGhpcyByZWdpc3RyYXRpb24gYW5kIGRhdGV0aW1lIGlmIHRoYXQgcmVnaXN0cmF0aW9uIGhhc24gbmV2ZXIgYmVlbiBjaGVja2VkXG4gKiBpbi5cbiAqIC0gb25DbGljayB7ZnVuY3Rpb259IEEgY2xpY2sgaGFuZGxlciB3aGljaCB3aGVuIGludm9rZWQsIHdpbGwgdG9nZ2xlIHRoZVxuICogY2hlY2staW4gc3RhdGUgZm9yIHRoZSBnaXZlbiByZWdpc3RyYXRpb24gYW5kIGRhdGV0aW1lSWQuIE5vdGU6IHRoaXMgd2lsbFxuICogcmVwbGFjZSB0aGUgc3RvcmUgbGF0ZXN0Q2hlY2tpbiByZWNvcmQgaW4gdGhlIHN0YXRlIGZvciB0aGlzIGdpdmVuXG4gKiByZWdpc3RyYXRpb24gYW5kIGRhdGV0aW1lIGlkIHdoaWNoIHdpbGwgZ2V0IHBpY2tlZCB1cCBieSB0aGUgYHdpdGhTZWxlY3RgXG4gKiBIT0MgaW4gdGhlIGNvbXBvc2VkIGNvbXBvbmVudC5cbiAqXG4gKiBAdHlwZSB7V1BDb21wb25lbnR9XG4gKi9cbmNvbnN0IHdpdGhMYXRlc3RDaGVja2luID0gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoXG5cdGNvbXBvc2UoIFtcblx0XHR3aXRoU2VsZWN0KFxuXHRcdFx0KCBzZWxlY3QsIHsgcmVnaXN0cmF0aW9uLCBkYXRldGltZUlkIH0gKSA9PiB7XG5cdFx0XHRcdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbChcblx0XHRcdFx0XHRyZWdpc3RyYXRpb24sXG5cdFx0XHRcdFx0J3JlZ2lzdHJhdGlvbidcblx0XHRcdFx0KSApIHtcblx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgeyBnZXRMYXRlc3RDaGVja2luIH0gPSBzZWxlY3QoICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0XHRcdGNvbnN0IHsgaGFzRmluaXNoZWRSZXNvbHV0aW9uIH0gPSBzZWxlY3QoICdjb3JlL2RhdGEnICk7XG5cdFx0XHRcdGNvbnN0IGNoZWNrSW5FbnRpdHkgPSBnZXRMYXRlc3RDaGVja2luKFxuXHRcdFx0XHRcdHJlZ2lzdHJhdGlvbi5pZCxcblx0XHRcdFx0XHRkYXRldGltZUlkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Y2hlY2tpbkVudGl0eTogY2hlY2tJbkVudGl0eSB8fCBudWxsLFxuXHRcdFx0XHRcdGhhc1Jlc29sdmVkQ2hlY2tpbjogaGFzRmluaXNoZWRSZXNvbHV0aW9uKFxuXHRcdFx0XHRcdFx0J2V2ZW50ZXNwcmVzc28vY29yZScsXG5cdFx0XHRcdFx0XHQnZ2V0TGF0ZXN0Q2hlY2tpbicsXG5cdFx0XHRcdFx0XHRbIHJlZ2lzdHJhdGlvbi5pZCwgZGF0ZXRpbWVJZCBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHQpLFxuXHRcdHdpdGhEaXNwYXRjaChcblx0XHRcdCggZGlzcGF0Y2gsIHsgcmVnaXN0cmF0aW9uLCBkYXRldGltZUlkIH0gKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHsgdG9nZ2xlQ2hlY2tpbiB9ID0gZGlzcGF0Y2goICdldmVudGVzcHJlc3NvL2NvcmUnICk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0b25DbGljaygpIHtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0aXNNb2RlbEVudGl0eU9mTW9kZWwoXG5cdFx0XHRcdFx0XHRcdFx0cmVnaXN0cmF0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdCdyZWdpc3RyYXRpb24nXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHR0b2dnbGVDaGVja2luKCByZWdpc3RyYXRpb24uaWQsIGRhdGV0aW1lSWQgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdCksXG5cdF0gKSxcblx0J3dpdGhMYXRlc3RDaGVja2luJ1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aExhdGVzdENoZWNraW47XG4iLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiLi9kZWZpbmVQcm9wZXJ0eVwiKTtcblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICB2YXIgb3duS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG93bktleXMgPSBvd25LZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSkuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgb3duS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RTcHJlYWQ7IiwidmFyIG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgPSByZXF1aXJlKFwiLi9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpO1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7XG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzOyIsImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpO1xuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyIsImZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mMihvYmopOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZjIoU3ltYm9sLml0ZXJhdG9yKSA9PT0gXCJzeW1ib2xcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gX3R5cGVvZjIob2JqKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogX3R5cGVvZjIob2JqKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mOyIsIm1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIHIobil7aWYodFtuXSlyZXR1cm4gdFtuXS5leHBvcnRzO3ZhciBvPXRbbl09e2k6bixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW25dLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLHIpLG8ubD0hMCxvLmV4cG9ydHN9cmV0dXJuIHIubT1lLHIuYz10LHIuZD1mdW5jdGlvbihlLHQsbil7ci5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0Om59KX0sci5yPWZ1bmN0aW9uKGUpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LHIudD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9cihlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmXCJvYmplY3RcIj09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHIucihuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiZcInN0cmluZ1wiIT10eXBlb2YgZSlmb3IodmFyIG8gaW4gZSlyLmQobixvLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwsbykpO3JldHVybiBufSxyLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHIuZCh0LFwiYVwiLHQpLHR9LHIubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sci5wPVwiXCIscihyLnM9MCl9KFtmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0sbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIHImJmUodC5wcm90b3R5cGUsciksbiYmZSh0LG4pLHR9fSgpLGE9aShyKDEpKSx1PWkocig0KSksbD1pKHIoNykpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBzPXtpdGVtczp1LmRlZmF1bHQuYXJyYXkuaXNSZXF1aXJlZCxvbkNoYW5nZVBhZ2U6dS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxpbml0aWFsUGFnZTp1LmRlZmF1bHQubnVtYmVyLHBhZ2VTaXplOnUuZGVmYXVsdC5udW1iZXIsbWF4UGFnZXM6dS5kZWZhdWx0Lm51bWJlcixsYWJlbHM6dS5kZWZhdWx0Lm9iamVjdCxzdHlsZXM6dS5kZWZhdWx0Lm9iamVjdCxkaXNhYmxlRGVmYXVsdFN0eWxlczp1LmRlZmF1bHQuYm9vbH0sYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsdCk7dmFyIHI9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIXR8fFwib2JqZWN0XCIhPXR5cGVvZiB0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0P2U6dH0odGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gci5zdGF0ZT17cGFnZXI6e319LHIuc3R5bGVzPXt9LGUuZGlzYWJsZURlZmF1bHRTdHlsZXN8fChyLnN0eWxlcz17dWw6e21hcmdpbjowLHBhZGRpbmc6MCxkaXNwbGF5OlwiaW5saW5lLWJsb2NrXCJ9LGxpOntsaXN0U3R5bGU6XCJub25lXCIsZGlzcGxheTpcImlubGluZVwiLHRleHRBbGlnbjpcImNlbnRlclwifSxhOntjdXJzb3I6XCJwb2ludGVyXCIscGFkZGluZzpcIjZweCAxMnB4XCIsZGlzcGxheTpcImJsb2NrXCIsZmxvYXQ6XCJsZWZ0XCJ9fSksZS5zdHlsZXMmJihyLnN0eWxlcz17dWw6bih7fSxyLnN0eWxlcy51bCxlLnN0eWxlcy51bCksbGk6bih7fSxyLnN0eWxlcy5saSxlLnN0eWxlcy5saSksYTpuKHt9LHIuc3R5bGVzLmEsZS5zdHlsZXMuYSl9KSxyfXJldHVybiBmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfSh0LGEuZGVmYXVsdC5Db21wb25lbnQpLG8odCxbe2tleTpcImNvbXBvbmVudFdpbGxNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5pdGVtcyYmdGhpcy5wcm9wcy5pdGVtcy5sZW5ndGgmJnRoaXMuc2V0UGFnZSh0aGlzLnByb3BzLmluaXRpYWxQYWdlKX19LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMucHJvcHMuaXRlbXMhPT1lLml0ZW1zJiZ0aGlzLnNldFBhZ2UodGhpcy5wcm9wcy5pbml0aWFsUGFnZSl9fSx7a2V5Olwic2V0UGFnZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMscj10Lml0ZW1zLG49dC5wYWdlU2l6ZSxvPXQubWF4UGFnZXMsYT10aGlzLnN0YXRlLnBhZ2VyO2E9KDAsbC5kZWZhdWx0KShyLmxlbmd0aCxlLG4sbyk7dmFyIHU9ci5zbGljZShhLnN0YXJ0SW5kZXgsYS5lbmRJbmRleCsxKTt0aGlzLnNldFN0YXRlKHtwYWdlcjphfSksdGhpcy5wcm9wcy5vbkNoYW5nZVBhZ2UodSl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5zdGF0ZS5wYWdlcixyPXRoaXMucHJvcHMubGFiZWxzLG49dGhpcy5zdHlsZXM7cmV0dXJuIXQucGFnZXN8fHQucGFnZXMubGVuZ3RoPD0xP251bGw6YS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLHtjbGFzc05hbWU6XCJwYWdpbmF0aW9uXCIsc3R5bGU6bi51bH0sYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLHtjbGFzc05hbWU6XCJwYWdlLWl0ZW0gZmlyc3QgXCIrKDE9PT10LmN1cnJlbnRQYWdlP1wiZGlzYWJsZWRcIjpcIlwiKSxzdHlsZTpuLmxpfSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIix7Y2xhc3NOYW1lOlwicGFnZS1saW5rXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldFBhZ2UoMSl9LHN0eWxlOm4uYX0sci5maXJzdCkpLGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGlcIix7Y2xhc3NOYW1lOlwicGFnZS1pdGVtIHByZXZpb3VzIFwiKygxPT09dC5jdXJyZW50UGFnZT9cImRpc2FibGVkXCI6XCJcIiksc3R5bGU6bi5saX0sYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJhXCIse2NsYXNzTmFtZTpcInBhZ2UtbGlua1wiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXRQYWdlKHQuY3VycmVudFBhZ2UtMSl9LHN0eWxlOm4uYX0sci5wcmV2aW91cykpLHQucGFnZXMubWFwKGZ1bmN0aW9uKHIsbyl7cmV0dXJuIGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGlcIix7a2V5Om8sY2xhc3NOYW1lOlwicGFnZS1pdGVtIHBhZ2UtbnVtYmVyIFwiKyh0LmN1cnJlbnRQYWdlPT09cj9cImFjdGl2ZVwiOlwiXCIpLHN0eWxlOm4ubGl9LGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYVwiLHtjbGFzc05hbWU6XCJwYWdlLWxpbmtcIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0UGFnZShyKX0sc3R5bGU6bi5hfSxyKSl9KSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImxpXCIse2NsYXNzTmFtZTpcInBhZ2UtaXRlbSBuZXh0IFwiKyh0LmN1cnJlbnRQYWdlPT09dC50b3RhbFBhZ2VzP1wiZGlzYWJsZWRcIjpcIlwiKSxzdHlsZTpuLmxpfSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIix7Y2xhc3NOYW1lOlwicGFnZS1saW5rXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldFBhZ2UodC5jdXJyZW50UGFnZSsxKX0sc3R5bGU6bi5hfSxyLm5leHQpKSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImxpXCIse2NsYXNzTmFtZTpcInBhZ2UtaXRlbSBsYXN0IFwiKyh0LmN1cnJlbnRQYWdlPT09dC50b3RhbFBhZ2VzP1wiZGlzYWJsZWRcIjpcIlwiKSxzdHlsZTpuLmxpfSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIix7Y2xhc3NOYW1lOlwicGFnZS1saW5rXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldFBhZ2UodC50b3RhbFBhZ2VzKX0sc3R5bGU6bi5hfSxyLmxhc3QpKSl9fV0pLHR9KCk7Yy5wcm9wVHlwZXM9cyxjLmRlZmF1bHRQcm9wcz17aW5pdGlhbFBhZ2U6MSxwYWdlU2l6ZToxMCxtYXhQYWdlczoxMCxsYWJlbHM6e2ZpcnN0OlwiRmlyc3RcIixsYXN0OlwiTGFzdFwiLHByZXZpb3VzOlwiUHJldmlvdXNcIixuZXh0OlwiTmV4dFwifX0sdC5kZWZhdWx0PWN9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9cigyKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO1xuLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi44LjZcbiAqIHJlYWN0LnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi92YXIgbj1yKDMpLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGE9bz9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyx1PW8/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixsPW8/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGk9bz9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgscz1vP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxjPW8/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGY9bz9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxwPW8/U3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKTo2MDExMSx5PW8/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLGQ9bz9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTMsbT1vP1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOjYwMTE1LGc9bz9TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTo2MDExNixiPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIHYoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMSxyPVwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIrZSxuPTA7bjx0O24rKylyKz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tuKzFdKTshZnVuY3Rpb24oZSx0LHIsbixvLGEsdSxsKXtpZighZSl7aWYoZT12b2lkIDAsdm9pZCAwPT09dCllPUVycm9yKFwiTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIik7ZWxzZXt2YXIgaT1bcixuLG8sYSx1LGxdLHM9MDsoZT1FcnJvcih0LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gaVtzKytdfSkpKS5uYW1lPVwiSW52YXJpYW50IFZpb2xhdGlvblwifXRocm93IGUuZnJhbWVzVG9Qb3A9MSxlfX0oITEsXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrZStcIjsgdmlzaXQgJXMgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiBcIixyKX12YXIgaD17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0sUD17fTtmdW5jdGlvbiBfKGUsdCxyKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPVAsdGhpcy51cGRhdGVyPXJ8fGh9ZnVuY3Rpb24gTygpe31mdW5jdGlvbiBTKGUsdCxyKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPVAsdGhpcy51cGRhdGVyPXJ8fGh9Xy5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSxfLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe1wib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT1lJiZ2KFwiODVcIiksdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGUsdCxcInNldFN0YXRlXCIpfSxfLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSxcImZvcmNlVXBkYXRlXCIpfSxPLnByb3RvdHlwZT1fLnByb3RvdHlwZTt2YXIgaz1TLnByb3RvdHlwZT1uZXcgTztrLmNvbnN0cnVjdG9yPVMsbihrLF8ucHJvdG90eXBlKSxrLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwO3ZhciBqPXtjdXJyZW50Om51bGx9LHg9e2N1cnJlbnQ6bnVsbH0sdz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEU9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtmdW5jdGlvbiBDKGUsdCxyKXt2YXIgbj12b2lkIDAsbz17fSx1PW51bGwsbD1udWxsO2lmKG51bGwhPXQpZm9yKG4gaW4gdm9pZCAwIT09dC5yZWYmJihsPXQucmVmKSx2b2lkIDAhPT10LmtleSYmKHU9XCJcIit0LmtleSksdCl3LmNhbGwodCxuKSYmIUUuaGFzT3duUHJvcGVydHkobikmJihvW25dPXRbbl0pO3ZhciBpPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09aSlvLmNoaWxkcmVuPXI7ZWxzZSBpZigxPGkpe2Zvcih2YXIgcz1BcnJheShpKSxjPTA7YzxpO2MrKylzW2NdPWFyZ3VtZW50c1tjKzJdO28uY2hpbGRyZW49c31pZihlJiZlLmRlZmF1bHRQcm9wcylmb3IobiBpbiBpPWUuZGVmYXVsdFByb3BzKXZvaWQgMD09PW9bbl0mJihvW25dPWlbbl0pO3JldHVybnskJHR5cGVvZjphLHR5cGU6ZSxrZXk6dSxyZWY6bCxwcm9wczpvLF9vd25lcjp4LmN1cnJlbnR9fWZ1bmN0aW9uIFIoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09YX12YXIgJD0vXFwvKy9nLFQ9W107ZnVuY3Rpb24gTShlLHQscixuKXtpZihULmxlbmd0aCl7dmFyIG89VC5wb3AoKTtyZXR1cm4gby5yZXN1bHQ9ZSxvLmtleVByZWZpeD10LG8uZnVuYz1yLG8uY29udGV4dD1uLG8uY291bnQ9MCxvfXJldHVybntyZXN1bHQ6ZSxrZXlQcmVmaXg6dCxmdW5jOnIsY29udGV4dDpuLGNvdW50OjB9fWZ1bmN0aW9uIE4oZSl7ZS5yZXN1bHQ9bnVsbCxlLmtleVByZWZpeD1udWxsLGUuZnVuYz1udWxsLGUuY29udGV4dD1udWxsLGUuY291bnQ9MCwxMD5ULmxlbmd0aCYmVC5wdXNoKGUpfWZ1bmN0aW9uIEkoZSx0LHIpe3JldHVybiBudWxsPT1lPzA6ZnVuY3Rpb24gZSh0LHIsbixvKXt2YXIgbD10eXBlb2YgdDtcInVuZGVmaW5lZFwiIT09bCYmXCJib29sZWFuXCIhPT1sfHwodD1udWxsKTt2YXIgaT0hMTtpZihudWxsPT09dClpPSEwO2Vsc2Ugc3dpdGNoKGwpe2Nhc2VcInN0cmluZ1wiOmNhc2VcIm51bWJlclwiOmk9ITA7YnJlYWs7Y2FzZVwib2JqZWN0XCI6c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgYTpjYXNlIHU6aT0hMH19aWYoaSlyZXR1cm4gbihvLHQsXCJcIj09PXI/XCIuXCIrQSh0LDApOnIpLDE7aWYoaT0wLHI9XCJcIj09PXI/XCIuXCI6citcIjpcIixBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgYz1yK0EobD10W3NdLHMpO2krPWUobCxjLG4sbyl9ZWxzZSBpZihjPW51bGw9PT10fHxcIm9iamVjdFwiIT10eXBlb2YgdD9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mKGM9YiYmdFtiXXx8dFtcIkBAaXRlcmF0b3JcIl0pP2M6bnVsbCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjKWZvcih0PWMuY2FsbCh0KSxzPTA7IShsPXQubmV4dCgpKS5kb25lOylpKz1lKGw9bC52YWx1ZSxjPXIrQShsLHMrKyksbixvKTtlbHNlXCJvYmplY3RcIj09PWwmJnYoXCIzMVwiLFwiW29iamVjdCBPYmplY3RdXCI9PShuPVwiXCIrdCk/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyh0KS5qb2luKFwiLCBcIikrXCJ9XCI6bixcIlwiKTtyZXR1cm4gaX0oZSxcIlwiLHQscil9ZnVuY3Rpb24gQShlLHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9ZS5rZXk/ZnVuY3Rpb24oZSl7dmFyIHQ9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9O3JldHVyblwiJFwiKyhcIlwiK2UpLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfShlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gcShlLHQpe2UuZnVuYy5jYWxsKGUuY29udGV4dCx0LGUuY291bnQrKyl9ZnVuY3Rpb24gVShlLHQscil7dmFyIG49ZS5yZXN1bHQsbz1lLmtleVByZWZpeDtlPWUuZnVuYy5jYWxsKGUuY29udGV4dCx0LGUuY291bnQrKyksQXJyYXkuaXNBcnJheShlKT9EKGUsbixyLGZ1bmN0aW9uKGUpe3JldHVybiBlfSk6bnVsbCE9ZSYmKFIoZSkmJihlPWZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOmEsdHlwZTplLnR5cGUsa2V5OnQscmVmOmUucmVmLHByb3BzOmUucHJvcHMsX293bmVyOmUuX293bmVyfX0oZSxvKyghZS5rZXl8fHQmJnQua2V5PT09ZS5rZXk/XCJcIjooXCJcIitlLmtleSkucmVwbGFjZSgkLFwiJCYvXCIpK1wiL1wiKStyKSksbi5wdXNoKGUpKX1mdW5jdGlvbiBEKGUsdCxyLG4sbyl7dmFyIGE9XCJcIjtudWxsIT1yJiYoYT0oXCJcIityKS5yZXBsYWNlKCQsXCIkJi9cIikrXCIvXCIpLEkoZSxVLHQ9TSh0LGEsbixvKSksTih0KX1mdW5jdGlvbiBMKCl7dmFyIGU9ai5jdXJyZW50O3JldHVybiBudWxsPT09ZSYmdihcIjMyMVwiKSxlfXZhciBGPXtDaGlsZHJlbjp7bWFwOmZ1bmN0aW9uKGUsdCxyKXtpZihudWxsPT1lKXJldHVybiBlO3ZhciBuPVtdO3JldHVybiBEKGUsbixudWxsLHQsciksbn0sZm9yRWFjaDpmdW5jdGlvbihlLHQscil7aWYobnVsbD09ZSlyZXR1cm4gZTtJKGUscSx0PU0obnVsbCxudWxsLHQscikpLE4odCl9LGNvdW50OmZ1bmN0aW9uKGUpe3JldHVybiBJKGUsZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbnVsbCl9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIEQoZSx0LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSx0fSxvbmx5OmZ1bmN0aW9uKGUpe3JldHVybiBSKGUpfHx2KFwiMTQzXCIpLGV9fSxjcmVhdGVSZWY6ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX0sQ29tcG9uZW50Ol8sUHVyZUNvbXBvbmVudDpTLGNyZWF0ZUNvbnRleHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksKGU9eyQkdHlwZW9mOmYsX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOnQsX2N1cnJlbnRWYWx1ZTplLF9jdXJyZW50VmFsdWUyOmUsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsfSkuUHJvdmlkZXI9eyQkdHlwZW9mOmMsX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfSxmb3J3YXJkUmVmOmZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjp5LHJlbmRlcjplfX0sbGF6eTpmdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6ZyxfY3RvcjplLF9zdGF0dXM6LTEsX3Jlc3VsdDpudWxsfX0sbWVtbzpmdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjptLHR5cGU6ZSxjb21wYXJlOnZvaWQgMD09PXQ/bnVsbDp0fX0sdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTCgpLnVzZUNhbGxiYWNrKGUsdCl9LHVzZUNvbnRleHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTCgpLnVzZUNvbnRleHQoZSx0KX0sdXNlRWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEwoKS51c2VFZmZlY3QoZSx0KX0sdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIEwoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxyKX0sdXNlRGVidWdWYWx1ZTpmdW5jdGlvbigpe30sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEwoKS51c2VMYXlvdXRFZmZlY3QoZSx0KX0sdXNlTWVtbzpmdW5jdGlvbihlLHQpe3JldHVybiBMKCkudXNlTWVtbyhlLHQpfSx1c2VSZWR1Y2VyOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTCgpLnVzZVJlZHVjZXIoZSx0LHIpfSx1c2VSZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIEwoKS51c2VSZWYoZSl9LHVzZVN0YXRlOmZ1bmN0aW9uKGUpe3JldHVybiBMKCkudXNlU3RhdGUoZSl9LEZyYWdtZW50OmwsU3RyaWN0TW9kZTppLFN1c3BlbnNlOmQsY3JlYXRlRWxlbWVudDpDLGNsb25lRWxlbWVudDpmdW5jdGlvbihlLHQscil7bnVsbD09ZSYmdihcIjI2N1wiLGUpO3ZhciBvPXZvaWQgMCx1PW4oe30sZS5wcm9wcyksbD1lLmtleSxpPWUucmVmLHM9ZS5fb3duZXI7aWYobnVsbCE9dCl7dm9pZCAwIT09dC5yZWYmJihpPXQucmVmLHM9eC5jdXJyZW50KSx2b2lkIDAhPT10LmtleSYmKGw9XCJcIit0LmtleSk7dmFyIGM9dm9pZCAwO2ZvcihvIGluIGUudHlwZSYmZS50eXBlLmRlZmF1bHRQcm9wcyYmKGM9ZS50eXBlLmRlZmF1bHRQcm9wcyksdCl3LmNhbGwodCxvKSYmIUUuaGFzT3duUHJvcGVydHkobykmJih1W29dPXZvaWQgMD09PXRbb10mJnZvaWQgMCE9PWM/Y1tvXTp0W29dKX1pZigxPT09KG89YXJndW1lbnRzLmxlbmd0aC0yKSl1LmNoaWxkcmVuPXI7ZWxzZSBpZigxPG8pe2M9QXJyYXkobyk7Zm9yKHZhciBmPTA7ZjxvO2YrKyljW2ZdPWFyZ3VtZW50c1tmKzJdO3UuY2hpbGRyZW49Y31yZXR1cm57JCR0eXBlb2Y6YSx0eXBlOmUudHlwZSxrZXk6bCxyZWY6aSxwcm9wczp1LF9vd25lcjpzfX0sY3JlYXRlRmFjdG9yeTpmdW5jdGlvbihlKXt2YXIgdD1DLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH0saXNWYWxpZEVsZW1lbnQ6Uix2ZXJzaW9uOlwiMTYuOC42XCIsdW5zdGFibGVfQ29uY3VycmVudE1vZGU6cCx1bnN0YWJsZV9Qcm9maWxlcjpzLF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOntSZWFjdEN1cnJlbnREaXNwYXRjaGVyOmosUmVhY3RDdXJyZW50T3duZXI6eCxhc3NpZ246bn19LHo9e2RlZmF1bHQ6Rn0sVj16JiZGfHx6O2UuZXhwb3J0cz1WLmRlZmF1bHR8fFZ9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtcbi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFyIGU9bmV3IFN0cmluZyhcImFiY1wiKTtpZihlWzVdPVwiZGVcIixcIjVcIj09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpWzBdKXJldHVybiExO2Zvcih2YXIgdD17fSxyPTA7cjwxMDtyKyspdFtcIl9cIitTdHJpbmcuZnJvbUNoYXJDb2RlKHIpXT1yO2lmKFwiMDEyMzQ1Njc4OVwiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkuam9pbihcIlwiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm5cImFiY2RlZmdoaWprbG1ub3BxcnN0XCIuc3BsaXQoXCJcIikuZm9yRWFjaChmdW5jdGlvbihlKXtuW2VdPWV9KSxcImFiY2RlZmdoaWprbG1ub3BxcnN0XCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LG4pKS5qb2luKFwiXCIpfWNhdGNoKGUpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLHUsbD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gT2JqZWN0KGUpfShlKSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7Zm9yKHZhciBzIGluIHI9T2JqZWN0KGFyZ3VtZW50c1tpXSkpby5jYWxsKHIscykmJihsW3NdPXJbc10pO2lmKG4pe3U9bihyKTtmb3IodmFyIGM9MDtjPHUubGVuZ3RoO2MrKylhLmNhbGwocix1W2NdKSYmKGxbdVtjXV09clt1W2NdXSl9fXJldHVybiBsfX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDUpKCl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDYpO2Z1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gYSgpe31hLnJlc2V0V2FybmluZ0NhY2hlPW8sZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixvLGEsdSl7aWYodSE9PW4pe3ZhciBsPW5ldyBFcnJvcihcIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXNcIik7dGhyb3cgbC5uYW1lPVwiSW52YXJpYW50IFZpb2xhdGlvblwiLGx9fWZ1bmN0aW9uIHQoKXtyZXR1cm4gZX1lLmlzUmVxdWlyZWQ9ZTt2YXIgcj17YXJyYXk6ZSxib29sOmUsZnVuYzplLG51bWJlcjplLG9iamVjdDplLHN0cmluZzplLHN5bWJvbDplLGFueTplLGFycmF5T2Y6dCxlbGVtZW50OmUsZWxlbWVudFR5cGU6ZSxpbnN0YW5jZU9mOnQsbm9kZTplLG9iamVjdE9mOnQsb25lT2Y6dCxvbmVPZlR5cGU6dCxzaGFwZTp0LGV4YWN0OnQsY2hlY2tQcm9wVHlwZXM6YSxyZXNldFdhcm5pbmdDYWNoZTpvfTtyZXR1cm4gci5Qcm9wVHlwZXM9cixyfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1cIlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEXCJ9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09dCYmKHQ9MSksdm9pZCAwPT09ciYmKHI9MTApLHZvaWQgMD09PW4mJihuPTEwKTt2YXIgbyxhLHU9TWF0aC5jZWlsKGUvcik7aWYodDwxP3Q9MTp0PnUmJih0PXUpLHU8PW4pbz0xLGE9dTtlbHNle3ZhciBsPU1hdGguZmxvb3Iobi8yKSxpPU1hdGguY2VpbChuLzIpLTE7dDw9bD8obz0xLGE9bik6dCtpPj11PyhvPXUtbisxLGE9dSk6KG89dC1sLGE9dCtpKX12YXIgcz0odC0xKSpyLGM9TWF0aC5taW4ocytyLTEsZS0xKSxmPUFycmF5LmZyb20oQXJyYXkoYSsxLW8pLmtleXMoKSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBvK2V9KTtyZXR1cm57dG90YWxJdGVtczplLGN1cnJlbnRQYWdlOnQscGFnZVNpemU6cix0b3RhbFBhZ2VzOnUsc3RhcnRQYWdlOm8sZW5kUGFnZTphLHN0YXJ0SW5kZXg6cyxlbmRJbmRleDpjLHBhZ2VzOmZ9fX1dKTsiLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xudmFyIGNoZWNrUHJvcFR5cGVzID0gcmVxdWlyZSgnLi9jaGVja1Byb3BUeXBlcycpO1xuXG52YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSAgKyAnYC4gVGhpcyBpcyBkZXByZWNhdGVkICcgK1xuICAgICAgICAgICAgICAnYW5kIHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcbiAgICAgICAgICAgICAgJ2xpYnJhcnkuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmctZG9udC1jYWxsLXByb3B0eXBlcyAnICsgJ2ZvciBkZXRhaWxzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIVJlYWN0SXMuaXNWYWxpZEVsZW1lbnRUeXBlKHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50IHR5cGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LCBnb3QgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIGFyZ3VtZW50cy4gJyArXG4gICAgICAgICAgICAnQSBjb21tb24gbWlzdGFrZSBpcyB0byB3cml0ZSBvbmVPZih4LCB5LCB6KSBpbnN0ZWFkIG9mIG9uZU9mKFt4LCB5LCB6XSkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMsIGZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3ltYm9sJykge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIFN0cmluZyhwcm9wVmFsdWUpICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChoYXMocHJvcFZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xuICAgICAgICAgICdyZWNlaXZlZCAnICsgZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKGNoZWNrZXIpICsgJyBhdCBpbmRleCAnICsgaSArICcuJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIGlmIChjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbVxuICAgICAgLy8gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXG4gICAgICAgICAgICAnXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xuICAgICAgICAgICAgJ1xcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuOC42XG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcblxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTtcbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8XG4gIC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSk7XG59XG5cbi8qKlxuICogRm9ya2VkIGZyb20gZmJqcy93YXJuaW5nOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZianMvYmxvYi9lNjZiYTIwYWQ1YmU0MzNlYjU0NDIzZjJiMDk3ZDgyOTMyNGQ5ZGU2L3BhY2thZ2VzL2ZianMvc3JjL19fZm9ya3NfXy93YXJuaW5nLmpzXG4gKlxuICogT25seSBjaGFuZ2UgaXMgd2UgdXNlIGNvbnNvbGUud2FybiBpbnN0ZWFkIG9mIGNvbnNvbGUuZXJyb3IsXG4gKiBhbmQgZG8gbm90aGluZyB3aGVuICdjb25zb2xlJyBpcyBub3Qgc3VwcG9ydGVkLlxuICogVGhpcyByZWFsbHkgc2ltcGxpZmllcyB0aGUgY29kZS5cbiAqIC0tLVxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGxvd1ByaW9yaXR5V2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmckMSA9IGxvd1ByaW9yaXR5V2FybmluZztcblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG5cbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xuXG4vLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlO1xuICAgICAgbG93UHJpb3JpdHlXYXJuaW5nJDEoZmFsc2UsICdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBfX0RFVl9fID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJztcblxudmFyIHdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAoX19ERVZfXykge1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMSA/IGxlbiAtIDEgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAxOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDFdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArXG4gICAgICBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfVxuXG4gIHdhcm5pbmcgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMiA/IGxlbiAtIDIgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAyOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDJdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgICAnbWVzc2FnZSBhcmd1bWVudCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBwcmludFdhcm5pbmcuYXBwbHkobnVsbCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbiIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcImkxOG5cIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmFsaWRhdG9yc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJ2YWx1ZU9iamVjdHNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImNvbXBvbmVudHNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImNvbXBvc2VcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImRhdGFcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImVsZW1lbnRcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImlzU2hhbGxvd0VxdWFsXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wibG9kYXNoXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiUmVhY3RcIl07IH0oKSk7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/assets/dist/eventespresso-model.f01901513a4780059954.dist.deps.json b/assets/dist/eventespresso-model.805714d693ee7340e4b0.dist.deps.json similarity index 100% rename from assets/dist/eventespresso-model.f01901513a4780059954.dist.deps.json rename to assets/dist/eventespresso-model.805714d693ee7340e4b0.dist.deps.json diff --git a/assets/dist/eventespresso-model.f01901513a4780059954.dist.js b/assets/dist/eventespresso-model.805714d693ee7340e4b0.dist.js similarity index 51% rename from assets/dist/eventespresso-model.f01901513a4780059954.dist.js rename to assets/dist/eventespresso-model.805714d693ee7340e4b0.dist.js index 08ac8ca5d9b..62ddea3734d 100644 --- a/assets/dist/eventespresso-model.f01901513a4780059954.dist.js +++ b/assets/dist/eventespresso-model.805714d693ee7340e4b0.dist.js @@ -1376,54 +1376,75 @@ var assertDateTimeEntity = function assertDateTimeEntity(DateTimeEntity) { /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities + * @return {boolean} true if event date is valid entity or archive + */ + + +var isValidEntityOrArchive = function isValidEntityOrArchive(DateTimeEntity, includeTrashed) { + return includeTrashed && assertDateTimeEntity(DateTimeEntity) || !includeTrashed && !isTrashed(DateTimeEntity); +}; +/** + * @function + * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if event date is occurring NOW */ var isActive = function isActive(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - return DateTimeEntity.start.diffNow().asSeconds() < 0 && DateTimeEntity.end.diffNow().asSeconds() > 0; + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(DateTimeEntity, includeTrashed) && DateTimeEntity.start.diffNow().asSeconds() < 0 && DateTimeEntity.end.diffNow().asSeconds() > 0; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if end date is in the past */ var isExpired = function isExpired(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - return DateTimeEntity.end.diffNow().asSeconds() < 0; + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(DateTimeEntity, includeTrashed) && DateTimeEntity.end.diffNow().asSeconds() < 0; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if end date is in the past */ var isRecentlyExpired = function isRecentlyExpired(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - return DateTimeEntity.end.diffNow().asSeconds() < 0 && DateTimeEntity.end.diffNow().asSeconds() > _constants__WEBPACK_IMPORTED_MODULE_2__["MONTH_IN_SECONDS"] * -1; + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(DateTimeEntity, includeTrashed) && DateTimeEntity.end.diffNow().asSeconds() < 0 && DateTimeEntity.end.diffNow().asSeconds() > _constants__WEBPACK_IMPORTED_MODULE_2__["MONTH_IN_SECONDS"] * -1; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if tickets sold meets or exceeds registration limit */ var isSoldOut = function isSoldOut(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (includeTrashed && !assertDateTimeEntity(DateTimeEntity) || !includeTrashed && isTrashed(DateTimeEntity)) { + return false; + } + var cap = DateTimeEntity.regLimit; return cap !== null && cap !== 'INF' && cap !== Infinity && cap !== -1 && DateTimeEntity.sold >= cap; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if start date is in the future */ var isUpcoming = function isUpcoming(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - return DateTimeEntity.start.diffNow().asSeconds() > 0; + var includeTrashed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(DateTimeEntity, includeTrashed) && DateTimeEntity.start.diffNow().asSeconds() > 0; }; /** * @function @@ -1465,8 +1486,6 @@ var isTrashed = function isTrashed(DateTimeEntity) { */ var status = function status(DateTimeEntity) { - assertDateTimeEntity(DateTimeEntity); - if (isTrashed(DateTimeEntity)) { return _constants__WEBPACK_IMPORTED_MODULE_2__["DATETIME_STATUS_ID"].TRASHED; } @@ -1494,6 +1513,7 @@ var status = function status(DateTimeEntity) { // } + assertDateTimeEntity(DateTimeEntity); return _constants__WEBPACK_IMPORTED_MODULE_2__["DATETIME_STATUS_ID"].INACTIVE; }; /** @@ -5404,45 +5424,65 @@ var assertTicketEntity = function assertTicketEntity(TicketEntity) { /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out trashed entities + * @return {boolean} true if event date is valid entity or archive + */ + + +var isValidEntityOrArchive = function isValidEntityOrArchive(TicketEntity, includeArchived) { + return includeArchived && assertTicketEntity(TicketEntity) || !includeArchived && !isArchived(TicketEntity); +}; +/** + * @function + * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if ticket is currently available for purchase */ var isOnSale = function isOnSale(TicketEntity) { - assertTicketEntity(TicketEntity); - return !isArchived(TicketEntity) && TicketEntity.startDate.diffNow() < 0 && TicketEntity.endDate.diffNow() > 0; + var includeArchived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(TicketEntity, includeArchived) && TicketEntity.startDate.diffNow() < 0 && TicketEntity.endDate.diffNow() > 0; }; /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if ticket can no longer be purchased */ var isExpired = function isExpired(TicketEntity) { - assertTicketEntity(TicketEntity); - return TicketEntity.endDate.diffNow() < 0; + var includeArchived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(TicketEntity, includeArchived) && TicketEntity.endDate.diffNow() < 0; }; /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if tickets sold meets or exceeds available quantity */ var isSoldOut = function isSoldOut(TicketEntity) { - assertTicketEntity(TicketEntity); + var includeArchived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (includeArchived && !assertTicketEntity(TicketEntity) || !includeArchived && isArchived(TicketEntity)) { + return false; + } + var qty = TicketEntity.qty; - return qty !== null && qty !== 'INF' && qty !== Infinity && TicketEntity.sold >= qty; + return qty !== null && qty !== 'INF' && qty !== Infinity && qty !== -1 && TicketEntity.sold >= qty; }; /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if ticket is not yet available for purchase, * but will be at some date in the future */ var isPending = function isPending(TicketEntity) { - assertTicketEntity(TicketEntity); - return !isArchived(TicketEntity) && TicketEntity.startDate.diffNow() > 0; + var includeArchived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return isValidEntityOrArchive(TicketEntity, includeArchived) && TicketEntity.startDate.diffNow() > 0; }; /** * @function @@ -5461,8 +5501,6 @@ var isArchived = function isArchived(TicketEntity) { */ var status = function status(TicketEntity) { - assertTicketEntity(TicketEntity); - if (isArchived(TicketEntity)) { return _constants__WEBPACK_IMPORTED_MODULE_2__["TICKET_STATUS_ID"].ARCHIVED; } @@ -7692,4 +7730,4 @@ if (false) {} else { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLm1vZGVsL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvYXNzZXJ0aW9ucy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2F0dGVuZGVlL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2F0dGVuZGVlL2luZGV4LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvYXR0ZW5kZWUvcXVlcnkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9iYXNlLWRhdGUtZm9ybWF0dGVyLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvYmFzZS5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2NoZWNraW4vY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvY2hlY2tpbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2NoZWNraW4vcXVlcnkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9kYXRldGltZS9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9kYXRldGltZS9mb3JtYXR0ZXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9kYXRldGltZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2RhdGV0aW1lL3F1ZXJ5LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZGF0ZXRpbWUvc3RhdHVzLWhlbHBlci5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2RlZmF1bHQtbW9kZWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbmRwb2ludHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9hc3NlcnRpb25zLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvYmFzZS1lbnRpdHkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9ib29sZWFucy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L2V4dHJhY3RvcnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L3ZhbGlkYXRvcnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9ldmVudC9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9ldmVudC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2V2ZW50L3F1ZXJ5LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9tb2RlbC1uYW1lcy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL21vZGVscy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3ByaWNlLXR5cGUvY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvcHJpY2UtdHlwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3ByaW1hcnkta2V5cy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3JlZ2lzdHJhdGlvbi9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9yZWdpc3RyYXRpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9yZWdpc3RyYXRpb24vcXVlcnkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9zdGF0dXMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvc3RhdHVzL2hlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9zdGF0dXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9zdGF0dXMvcXVlcnkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC90aWNrZXQvY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvdGlja2V0L2luZGV4LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvdGlja2V0L3F1ZXJ5LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvdGlja2V0L3N0YXR1cy1oZWxwZXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL21lbWl6ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9wbHVyYWxpemUvcGx1cmFsaXplLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCJdfSIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJoZWxwZXJzXCJdfSIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJpMThuXCJdfSIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2YWxpZGF0b3JzXCJdfSIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2YWx1ZU9iamVjdHNcIl19Iiwid2VicGFjazovL2VlanMubW9kZWwvZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJob29rc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwidmVuZG9yXCIsXCJjdWlkXCJdfSIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpcImxvZGFzaFwifSIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2ZW5kb3JcIixcIm1vbWVudFwiXX0iXSwibmFtZXMiOlsiYXNzZXJ0RW50aXR5SGFzS2V5Iiwia2V5IiwiZW50aXR5IiwibWVzc2FnZSIsInNwcmludGYiLCJfXyIsImhhc093blByb3BlcnR5IiwiRXhjZXB0aW9uIiwiYXNzZXJ0SW1tdXRhYmxlT2JqZWN0SGFzUGF0aCIsInBhdGgiLCJpbW11dGFibGUiLCJoYXNJbiIsImFzc2VydElzQXJyYXkiLCJpdGVtcyIsImlzQXJyYXkiLCJhc3NlcnRJc05vdEVtcHR5IiwiaXNFbXB0eSIsImFzc2VydElzTWFwIiwiaXRlbSIsImlzTWFwIiwiTU9ERUxfTkFNRSIsIm9yZGVyQnlNYXAiLCJpZCIsImxhc3ROYW1lT25seSIsImZpcnN0TmFtZU9ubHkiLCJmaXJzdFRoZW5MYXN0TmFtZSIsImxhc3RUaGVuRmlyc3ROYW1lIiwicXVlcnlEYXRhVHlwZXMiLCJmb3JFdmVudElkIiwiUHJvcFR5cGVzIiwibnVtYmVyIiwiZm9yRGF0ZXRpbWVJZCIsImZvclRpY2tldElkIiwiZm9yU3RhdHVzSWQiLCJvbmVPZiIsIlJFR0lTVFJBVElPTl9TVEFUVVNfSURTIiwiZm9yUmVnaXN0cmF0aW9uSWQiLCJzaG93R3JhdmF0YXIiLCJib29sIiwicXVlcnlEYXRhIiwic2hhcGUiLCJsaW1pdCIsIm9yZGVyQnkiLCJPYmplY3QiLCJrZXlzIiwib3JkZXIiLCJBTExPV0VEX09SREVSX1ZBTFVFUyIsImRlZmF1bHRRdWVyeURhdGEiLCJRVUVSWV9PUkRFUl9BU0MiLCJtYXBPcmRlckJ5IiwiaXNVbmRlZmluZWQiLCJ3aGVyZUNvbmRpdGlvbnMiLCJ3aGVyZSIsInBhcnNlSW50IiwiaXNOYU4iLCJwdXNoIiwiaW5jbHVkZXMiLCJqb2luIiwiZ2V0UXVlcnlTdHJpbmciLCJiYXNlR2V0UXVlcnlTdHJpbmciLCJmb3JtYXREYXRlc09uRW50aXRpZXMiLCJlbnRpdGllcyIsImVudGl0eURhdGVGaWVsZHMiLCJmb3JtYXQiLCJkYXRlRm9ybWF0cyIsImxvY2FsIiwiZm9ybWF0dGVkRW50aXRpZXMiLCJmb3JFYWNoIiwiZm9ybWF0RGF0ZXNPbkVudGl0eSIsIm5ld0VudGl0eSIsImRhdGVGaWVsZCIsImZvcm1hdEVudGl0aWVzRGF0ZXNUb015c3FsIiwiZm9ybWF0RW50aXR5RGF0ZXNUb015c3FsIiwiZm9ybWF0RW50aXRpZXNEYXRlc1RvU2l0ZSIsImZvcm1hdEVudGl0eURhdGVzVG9TaXRlIiwiY29udmVydEVudGl0aWVzRGF0ZXNUb01vbWVudCIsImNvbnZlcnRFbnRpdHlEYXRlc1RvTW9tZW50IiwiUVVFUllfT1JERVJfREVTQyIsIkdSRUFURVJfVEhBTiIsImVuY29kZVVSSUNvbXBvbmVudCIsIkxFU1NfVEhBTiIsIkdSRUFURVJfVEhBTl9BTkRfRVFVQUwiLCJMRVNTX1RIQU5fQU5EX0VRVUFMIiwiZGVmYXVsdFdoZXJlQ29uZGl0aW9ucyIsInF1ZXJ5UGFyYW1zIiwiZmllbGQiLCJxdWVyeVN0cmluZyIsIkNIRUNLSU5fU1RBVFVTX0lEIiwiU1RBVFVTX0NIRUNLRURfT1VUIiwiU1RBVFVTX0NIRUNLRURfSU4iLCJTVEFUVVNfQ0hFQ0tFRF9ORVZFUiIsIkNIRUNLSU5fU1RBVFVTX0lEUyIsInZhbHVlcyIsImNoZWNraW5TdGF0dXMiLCJvcHRpb25zRW50aXR5TWFwIiwiZGVmYXVsdCIsImxhYmVsIiwicHJldHR5U3RhdHVzIiwidmFsdWUiLCJ0aW1lc3RhbXAiLCJEQVRFVElNRV9TVEFUVVNfSUQiLCJBQ1RJVkUiLCJDQU5DRUxMRUQiLCJFWFBJUkVEIiwiSU5BQ1RJVkUiLCJQT1NUUE9ORUQiLCJTT0xEX09VVCIsIlRSQVNIRUQiLCJVUENPTUlORyIsIkRBVEVUSU1FX1NUQVRVU19JRFMiLCJNSU5VVEVfSU5fU0VDT05EUyIsIkhPVVJfSU5fU0VDT05EUyIsIkRBWV9JTl9TRUNPTkRTIiwiV0VFS19JTl9TRUNPTkRTIiwiTU9OVEhfSU5fU0VDT05EUyIsIkRBVEVfRklFTERTIiwiZm9ybWF0dGVycyIsImZvck93biIsImJhc2VGb3JtYXR0ZXIiLCJpbXBsZW1lbnRhdGlvbiIsImZ1bmN0aW9uTmFtZSIsImluY29taW5nQXJncyIsImZpcnN0QXJnIiwicHVsbEF0IiwicHJldHR5RGF0ZUZyb21EYXRlVGltZSIsIkRhdGVUaW1lRW50aXR5IiwiY29udGVudCIsImlzTW9kZWxFbnRpdHlPZk1vZGVsIiwiRFRUX0VWVF9zdGFydCIsImhhc1NhbWUiLCJEVFRfRVZUX2VuZCIsImFsbERhdGVUaW1lc0FzU3RyaW5nIiwiU0VQQVJBVE9SX1NQQUNFX0RBU0hfU1BBQ0UiLCJ0b0Zvcm1hdCIsIkRBVEVfVElNRV9GT1JNQVRfU0lURSIsIlRJTUVfRk9STUFUX1NJVEUiLCJEVFRfbmFtZSIsIm5vd0RhdGVBbmRUaW1lIiwibW9tZW50Iiwic2hvd0V4cGlyZWQiLCJtb250aCIsInN0YXJ0X2RhdGUiLCJlbmRfZGF0ZSIsInN0YXJ0T2YiLCJlbmRPZiIsImFzc2VydERhdGVUaW1lRW50aXR5IiwiVHlwZUVycm9yIiwiaXNBY3RpdmUiLCJzdGFydCIsImRpZmZOb3ciLCJhc1NlY29uZHMiLCJlbmQiLCJpc0V4cGlyZWQiLCJpc1JlY2VudGx5RXhwaXJlZCIsImlzU29sZE91dCIsImNhcCIsInJlZ0xpbWl0IiwiSW5maW5pdHkiLCJzb2xkIiwiaXNVcGNvbWluZyIsImlzVHJhc2hlZCIsImRlbGV0ZWQiLCJzdGF0dXMiLCJnZXRCYWNrZ3JvdW5kQ29sb3JDbGFzcyIsImdldERhdGVUaW1lU3RhdHVzVGV4dExhYmVsIiwiZGF0ZVN0YXR1cyIsIm1hcFRvT2JqZWN0VmFsdWVzIiwibW9kZWxOYW1lRW5kcG9pbnRzIiwibWFwVmFsdWVzIiwiZ2V0RGVmYXVsdE1vZGVsRW50aXRpZXNPYmplY3QiLCJtZW1vaXplIiwiZW5kcG9pbnRzIiwiREVGQVVMVF9MSVNUU19TVEFURSIsIkRFRkFVTFRfQ09SRV9TVEFURSIsInJlbGF0aW9ucyIsImRpcnR5IiwiaW5kZXgiLCJkZWxldGUiLCJhZGQiLCJ0cmFzaCIsIkRFRkFVTFRfU0NIRU1BX1NUQVRFIiwic2NoZW1hIiwiZmFjdG9yeSIsInJlbGF0aW9uRW5kcG9pbnRzIiwicmVsYXRpb25TY2hlbWEiLCJkYXRhIiwicGF0aHMiLCJjb2xsZWN0aW9uX2VuZHBvaW50cyIsImJhc2VSZXN0Um91dGUiLCJiYXNlX3Jlc3Rfcm91dGUiLCJnZXRFbmRwb2ludCIsIm1vZGVsTmFtZSIsImFwcGx5UXVlcnlTdHJpbmciLCJzdHJpcEJhc2VSb3V0ZUZyb21VcmwiLCJ1cmwiLCJyZXBsYWNlIiwibWF5YmVBc3NlcnRWYWx1ZU9iamVjdCIsImZpZWxkTmFtZSIsImZpZWxkVmFsdWUiLCJpc0RhdGVUaW1lRmllbGQiLCJEYXRlVGltZSIsImFzc2VydElzRGF0ZVRpbWUiLCJpc01vbmV5RmllbGQiLCJNb25leSIsImFzc2VydE1vbmV5IiwiYXNzZXJ0VmFsaWRTY2hlbWEiLCJpc1NjaGVtYSIsIkludmFsaWRTY2hlbWEiLCJhc3NlcnRWYWxpZFNjaGVtYUZpZWxkUHJvcGVydGllcyIsInR5cGUiLCJwcm9wZXJ0aWVzIiwicmF3IiwiYXNzZXJ0VmFsaWRWYWx1ZUZvclByZXBhcmVkRmllbGQiLCJpbnN0YW5jZSIsImlzVmFsaWQiLCJpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQiLCJlbnVtIiwidmFsaWRhdGVFbnVtVHlwZSIsInZhbGlkYXRlVHlwZSIsIm1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zIiwiYXNzZXJ0VmFsaWRGaWVsZEFuZFZhbHVlQWdhaW5zdFNjaGVtYSIsInZhbGlkYXRpb25UeXBlIiwidmFsaWRhdGVUeXBlRm9yRmllbGQiLCJQUklWQVRFX1BST1BFUlRJRVMiLCJTQVZFX1NUQVRFIiwiVkFMSURBVEVfVFlQRVMiLCJCYXNlRW50aXR5IiwiZW50aXR5RmllbGRzQW5kVmFsdWVzIiwiZmllbGRQcmVmaXhlcyIsImlzTmV3IiwiQ0xFQU4iLCJjcmVhdGVHZXR0ZXIiLCJzZXRTYXZlU3RhdGUiLCJORVciLCJTZXQiLCJjcmVhdGVFbnRpdHlHZXR0ZXJzQW5kU2V0dGVycyIsImNyZWF0ZVBlcnNpc3RpbmdHZXR0ZXJzQW5kU2V0dGVycyIsInNlYWwiLCJzYXZlU3RhdGUiLCJESVJUWSIsInByb3RlY3RlZEZpZWxkcyIsImxlbmd0aCIsImluZGV4T2YiLCJrZWVwSWQiLCJjcmVhdGVGYWN0b3J5IiwiY3JlYXRlRW50aXR5RmFjdG9yeSIsIiRzY2hlbWEiLCJjcmVhdGVOZXciLCJmb3JDbG9uZSIsIm5hbWVDbGFzcyIsIm5hbWUiLCJleHRlbmRlZENsYXNzIiwiRW50aXR5IiwidXBwZXJGaXJzdCIsImNhbWVsQ2FzZSIsImNsYXNzRGVmIiwiZmllbGRzQW5kVmFsdWVzIiwiZnJvbUV4aXN0aW5nIiwiaGFzUmF3UHJvcGVydHkiLCJpc1BsYWluT2JqZWN0IiwiaGFzUHJldHR5UHJvcGVydHkiLCJwcmV0dHkiLCJoYXNSZW5kZXJlZFByb3BlcnR5IiwicmVuZGVyZWQiLCJoYXNGb3JtYXRQcm9wZXJ0eSIsImhhc0VudW1Qcm9wZXJ0eSIsImlzVmFsdWVPYmplY3RGaWVsZCIsImlzVVRDRGF0ZVRpbWVGaWVsZCIsImRhdGVUaW1lRmllbGROYW1lIiwiaXNQcmltYXJ5S2V5RmllbGQiLCJwcmltYXJ5X2tleSIsImlzUmVhZE9ubHkiLCJyZWFkb25seSIsImlzRW50aXR5RmllbGQiLCJpc0VudW1GaWVsZCIsIlN5bWJvbCIsIlZBTElEQVRFX1RZUEUiLCJSQVciLCJSRU5ERVJFRCIsIlBSRVRUWSIsIk1PREVMX1BSRUZJWEVTIiwicHJlZml4TWFwIiwiYXBwbHlGaWx0ZXJzIiwiYW5zd2VyIiwiYXR0ZW5kZWUiLCJjaGFuZ2VfbG9nIiwiY2hlY2tpbiIsImNvdW50cnkiLCJjdXJyZW5jeSIsImN1cnJlbmN5X3BheW1lbnRfbWV0aG9kIiwiZGF0ZXRpbWUiLCJkYXRldGltZV90aWNrZXQiLCJldmVudCIsImV2ZW50X21lc3NhZ2VfdGVtcGxhdGUiLCJldmVudF9xdWVzdGlvbl9ncm91cCIsImV2ZW50X3ZlbnVlIiwiZXh0cmFfam9pbiIsImV4dHJhX21ldGEiLCJsaW5lX2l0ZW0iLCJtZXNzYWdlX3RlbXBsYXRlIiwibWVzc2FnZV90ZW1wbGF0ZV9ncm91cCIsInBheW1lbnQiLCJwYXltZW50X21ldGhvZCIsInBvc3RfbWV0YSIsInByaWNlIiwicHJpY2VfdHlwZSIsInF1ZXN0aW9uIiwicXVlc3Rpb25fZ3JvdXAiLCJxdWVzdGlvbl9ncm91cF9xdWVzdGlvbiIsInF1ZXN0aW9uX29wdGlvbiIsInJlY3VycmVuY2UiLCJyZWdpc3RyYXRpb24iLCJyZWdpc3RyYXRpb25fcGF5bWVudCIsInN0YXRlIiwidGVybSIsInRlcm1fcmVsYXRpb25zaGlwIiwidGVybV90YXhvbm9teSIsInRpY2tldCIsInRpY2tldF9wcmljZSIsInRpY2tldF90ZW1wbGF0ZSIsInRyYW5zYWN0aW9uIiwidmVudWUiLCJ3cF91c2VyIiwib3B0cyIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiY3JlYXRlQ2FsbGJhY2tHZXR0ZXIiLCJwcm9wZXJ0eU5hbWUiLCJjYWxsQmFjayIsImNyZWF0ZUdldHRlckFuZFNldHRlciIsImluaXRpYWxGaWVsZFZhbHVlIiwicHJvcGVydHlWYWx1ZSIsInNldCIsInJlY2VpdmVkVmFsdWUiLCJpc1ByaW1hcnlGaWVsZCIsInNldEZpZWxkVG9QZXJzaXN0IiwiY3JlYXRlQWxpYXNHZXR0ZXJBbmRTZXR0ZXIiLCJvcmlnaW5hbEZpZWxkTmFtZSIsImFsaWFzRmllbGROYW1lIiwiY3JlYXRlQWxpYXNHZXR0ZXIiLCJjcmVhdGVGbHVlbnRTZXR0ZXIiLCJwcmltYXJ5S2V5cyIsIm9yaWdpbmFsRmllbGRzQW5kVmFsdWVzIiwiaXNQcmltYXJ5S2V5Iiwic2V0VmFsaWRhdGVUeXBlRm9yRmllbGQiLCJzZXRJbml0aWFsRW50aXR5RmllbGRzQW5kVmFsdWVzIiwic2V0Q2FsY3VsYXRlZEZpZWxkQW5kVmFsdWVzIiwicG9wdWxhdGVQcm90ZWN0ZWRGaWVsZHNQcm9wZXJ0eSIsInNldFJlc291cmNlcyIsImNyZWF0ZVByaW1hcnlLZXlGaWVsZEdldHRlcnMiLCJwb3B1bGF0ZVByaW1hcnlLZXlzIiwicG9wdWxhdGVNaXNzaW5nRmllbGRzIiwiY2FsY3VsYXRlZEZpZWxkcyIsIl9jYWxjdWxhdGVkX2ZpZWxkcyIsIl9wcm90ZWN0ZWQiLCJnZXRQcmltYXJ5S2V5RmllbGRzRnJvbVNjaGVtYSIsInNjaGVtYVByb3BlcnRpZXMiLCJzY2hlbWFGaWVsZCIsImN1aWQiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwiY3JlYXRlQWxpYXNHZXR0ZXJBbmRTZXR0ZXJGb3JGaWVsZCIsImRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkIiwiZ2V0RW50aXR5RmllbGRzRnJvbVNjaGVtYSIsInVuZGVmaW5lZCIsImdldEJhc2VGaWVsZHNBbmRWYWx1ZXNGb3JDbG9uaW5nIiwiZm9yVXBkYXRlIiwiZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmciLCJmb3JJbnNlcnQiLCJlbnRpdHlWYWx1ZXMiLCJwcmltYXJ5S2V5IiwiZm9yUGVyc2lzdCIsImdldERlZmF1bHRWYWx1ZUZvckZpZWxkIiwiY3JlYXRlUmF3RW50aXR5R2V0dGVyc1NldHRlcnMiLCJkZXJpdmVQcmVwYXJlZFZhbHVlRm9yRmllbGQiLCJjcmVhdGVSZW5kZXJlZEdldHRlcnMiLCJkZXJpdmVSZW5kZXJlZFZhbHVlIiwiY3JlYXRlQWxpYXNHZXR0ZXJGb3JGaWVsZCIsImNyZWF0ZUFsaWFzZXNGb3JNZXRob2QiLCJtZXRob2QiLCJuZXdGaWVsZE5hbWUiLCJmaWVsZFByZWZpeCIsImdldFJlbmRlcmVkQ2FsbGJhY2siLCJyZXF1ZXN0ZWRGaWVsZE5hbWUiLCJyZW1vdmVQcmVmaXhlc0Zyb21GaWVsZCIsInByZWZpeGVzVG9SZW1vdmUiLCJzb3J0QnkiLCJwcmVmaXgiLCJnZXRSZW5kZXJlZCIsImhhc011bHRpcGxlUHJpbWFyeUtleXNDYWxsYmFjayIsImhhc0NhbGN1bGF0ZWRGaWVsZENhbGxiYWNrIiwiZmllbGROYW1lVG9DaGVjayIsImNhbGN1bGF0ZWRGaWVsZFZhbHVlIiwiY2FsY3VsYXRlZEZpZWxkTmFtZSIsInJlbGF0aW9uTmFtZSIsInJlc291cmNlVmFsdWUiLCJyZXNvdXJjZU5hbWUiLCJocmVmIiwiZ2V0UmVsYXRpb25OYW1lRnJvbUxpbmsiLCJzZXRSZWxhdGlvbnNSZXNvdXJjZSIsImdldFJlbGF0aW9uUmVzb3VyY2VDYWxsYmFjayIsInJlc291cmNlSW5mbyIsInJlc291cmNlTGluayIsInNpbmdsZSIsImdldFJlbGF0aW9uUmVzb3VyY2UiLCJvdmVycmlkZSIsImN1cnJlbnRTdGF0ZSIsIkludmFsaWRBcmd1bWVudCIsImZpZWxkc1RvUGVyc2lzdE9uSW5zZXJ0IiwibWF5YmVDb252ZXJ0VG9WYWx1ZU9iamVjdCIsInZhbGlkYXRlSXNEYXRlVGltZSIsImZyb21JU08iLCJpbnN0YW5jZU9mIiwiU2l0ZUN1cnJlbmN5IiwidG9JU08iLCJ0b051bWJlciIsIm1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdCIsInBsdXJhbE1vZGVsTmFtZSIsImxhc3QiLCJzcGxpdCIsImVudGl0eUluc3RhbmNlIiwicmVkdWNlIiwiaXRlcmF0b3IiLCJBcnJheSIsImZyb20iLCJnZXRQcmltYXJ5S2V5VmFsdWVzIiwicGljayIsInBpY2tCeSIsImRlcml2ZURlZmF1bHRWYWx1ZUZvclR5cGUiLCJEYXRlIiwidG9JU09TdHJpbmciLCJkZXJpdmVUeXBlRm9yRmllbGQiLCJ2YWxpZCIsInNpbmdsZVR5cGUiLCJpc0ludGVnZXIiLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNCb29sZWFuIiwiZW51bVZhbHVlcyIsImV4cGVjdFZhbHVlT2JqZWN0cyIsImlzRW51bSIsImlzVmFsdWVPYmplY3QiLCJFVkVOVF9TVEFUVVNfSUQiLCJFVkVOVF9TVEFUVVNfSURTIiwiY2F0ZWdvcnlTbHVnIiwic3RyaW5nIiwidGlja2V0X3N0YXJ0IiwidGlja2V0X2VuZCIsIk1PREVMX05BTUVTIiwicGx1cmFsaXplIiwic2luZ3VsYXJNb2RlbE5hbWUiLCJzaW5ndWxhciIsIm1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nIiwic3RhcnRDYXNlIiwiQkFTRV9QUklDRV9UWVBFUyIsIkJBU0VfUFJJQ0UiLCJESVNDT1VOVCIsIlNVUkNIQVJHRSIsIlRBWCIsInByaW1hcnlfa2V5cyIsInZhbHVlc0ZvckNvbWJpbmVkUHJpbWFyeUtleXMiLCJyZXN1bHQiLCJ0cmltRW5kIiwidmFsdWVGb3JQcmltYXJ5S2V5IiwiZ2V0UHJpbWFyeUtleSIsImdldFByaW1hcnlLZXlRdWVyeVN0cmluZyIsImtleVZhbHVlcyIsImdldEVudGl0eVByaW1hcnlLZXlWYWx1ZXMiLCJrZXlFbnRpdGllc0J5UHJpbWFyeUtleVZhbHVlIiwibWFwcGVkRW50aXRpZXMiLCJNYXAiLCJjcmVhdGVBbmRLZXlFbnRpdGllc0J5UHJpbWFyeUtleVZhbHVlIiwiZW50aXR5SWQiLCJzdGF0dXNNb2RlbCIsImZvckF0dGVuZGVlSWQiLCJmb3JUcmFuc2FjdGlvbklkIiwicmVnX2lkIiwicmVnX2RhdGUiLCJTVEFUVVNfVFlQRV9FTUFJTCIsIlNUQVRVU19UWVBFX0VWRU5UIiwiU1RBVFVTX1RZUEVfTUVTU0FHRSIsIlNUQVRVU19UWVBFX1BBWU1FTlQiLCJTVEFUVVNfVFlQRV9SRUdJU1RSQVRJT04iLCJTVEFUVVNfVFlQRV9UUkFOU0FDVElPTiIsIkVNQUlMX1NUQVRVU19JRCIsIkRSQUZUIiwiU0VOVCIsIlJFR0lTVFJBVElPTl9DTE9TRUQiLCJERUxFVEVEIiwiREVOSUVEIiwiTk9UX0FDVElWRSIsIk5PVF9PUEVOIiwiT05HT0lORyIsIlJFR0lTVFJBVElPTl9PUEVOIiwiUEVORElORyIsIlNFQ09OREFSWSIsIk1FU1NBR0VfU1RBVFVTX0lEIiwiREVCVUciLCJFWEVDVVRJTkciLCJGQUlMIiwiSU5DT01QTEVURSIsIklETEUiLCJSRVNFTkQiLCJSRVRSWSIsIlBBWU1FTlRfU1RBVFVTX0lEIiwiQVBQUk9WRUQiLCJERUNMSU5FRCIsIkZBSUxFRCIsIlJFR0lTVFJBVElPTl9TVEFUVVNfSUQiLCJOT1RfQVBQUk9WRUQiLCJQRU5ESU5HX1BBWU1FTlQiLCJXQUlUX0xJU1QiLCJUUkFOU0FDVElPTl9TVEFUVVNfSUQiLCJBQkFORE9ORUQiLCJDT01QTEVURSIsIk9WRVJQQUlEIiwiQ1BUX1NUQVRVU19JRCIsIlBVQkxJU0giLCJGVVRVUkUiLCJQUklWQVRFIiwiVU5LTk9XTl9TVEFUVVNfSUQiLCJBTExfU1RBVFVTX0lEUyIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfUkVHSVNUUkFUSU9OIiwiTGFiZWwiLCJmcm9tU2FtZVNpbmdsZUFuZFBsdXJhbCIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfVFJBTlNBQ1RJT04iLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1BBWU1FTlQiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX01FU1NBR0UiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0NQVCIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfRVZFTlQiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RJQ0tFVCIsIlRJQ0tFVF9TVEFUVVNfSUQiLCJBUkNISVZFRCIsIk9OU0FMRSIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfREFURVRJTUUiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0NIRUNLSU4iLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0FMTCIsInN0YXR1c0NvZGUiLCJGT1JNQVRfU0VOVEVOQ0VfQ0FTRSIsImFzRm9ybWF0dGVkIiwicHJldHR5U3RhdHVzZXMiLCJzdGF0dXNDb2RlcyIsIm1hcHBlZFN0YXR1c2VzIiwic3RhdHVzVHlwZSIsIlRJQ0tFVF9TVEFUVVNfSURTIiwiYXNzZXJ0VGlja2V0RW50aXR5IiwiVGlja2V0RW50aXR5IiwiaXNPblNhbGUiLCJpc0FyY2hpdmVkIiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsInF0eSIsImlzUGVuZGluZyIsImdldFRpY2tldFN0YXR1c1RleHRMYWJlbCIsInRpY2tldFN0YXR1cyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUEwQyxnQ0FBZ0M7QUFDMUU7QUFDQTs7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7Ozs7Ozs7Ozs7Ozs7QUN0ZkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViOztBQUVBLElBQUksSUFBcUM7QUFDekMsNkJBQTZCLG1CQUFPLENBQUMseUZBQTRCO0FBQ2pFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEdBQTRHO0FBQzVHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7QUNyR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLGNBQWMsbUJBQU8sQ0FBQywwRUFBVTtBQUNoQyxhQUFhLG1CQUFPLENBQUMsNERBQWU7O0FBRXBDLDJCQUEyQixtQkFBTyxDQUFDLHlGQUE0QjtBQUMvRCxxQkFBcUIsbUJBQU8sQ0FBQyxxRUFBa0I7O0FBRS9DO0FBQ0E7O0FBRUEsSUFBSSxJQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDViw2QkFBNkI7QUFDN0IsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEtBQUs7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCw0QkFBNEI7QUFDNUIsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFVBQVUsS0FBcUM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsc0JBQXNCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxJQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQiwyQkFBMkI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDLDRGQUE0RixTQUFNO0FBQzdJO0FBQ0E7O0FBRUEsbUJBQW1CLGdDQUFnQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsZ0NBQWdDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Ozs7Ozs7Ozs7OztBQ0FoRCxhQUFhLG1EQUFtRCxFQUFFLEkiLCJmaWxlIjoiZXZlbnRlc3ByZXNzby1tb2RlbC5mMDE5MDE1MTNhNDc4MDA1OTk1NC5kaXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvaW5kZXguanNcIik7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgRXhjZXB0aW9uIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5pbXBvcnQgeyBzcHJpbnRmLCBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNFbXB0eSwgaXNNYXAgfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgZ2l2ZW4ga2V5IGV4aXN0cyBpbiB0aGUgcHJvdmlkZWQgZW50aXR5IG9iamVjdC5cbiAqIFRoaXMgaXMgdXNlZCB3aGVuIGNhbGxpbmcgY29kZSB3YW50cyBhbiBleGNlcHRpb24gdG8gYmUgdGhyb3duLlxuICpcbiAqIEBwYXJhbSB7IHN0cmluZyB9IGtleVxuICogQHBhcmFtIHsgT2JqZWN0IH0gZW50aXR5XG4gKiBAcGFyYW0geyBzdHJpbmcgfSBtZXNzYWdlXG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH0gIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHByb3ZpZGVkIGVudGl0eSBkb2VzIG5vdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgdGhlIGdpdmVuIGtleS5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydEVudGl0eUhhc0tleSA9ICgga2V5LCBlbnRpdHksIG1lc3NhZ2UgPSAnJyApID0+IHtcblx0aWYgKCBtZXNzYWdlID09PSAnJyApIHtcblx0XHRtZXNzYWdlID0gc3ByaW50Zihcblx0XHRcdF9fKFxuXHRcdFx0XHQnVGhlIHByb3ZpZGVkIGVudGl0eSAoJXMpIGRvZXMgbm90IGhhdmUgdGhlIGdpdmVuIHByb3BlcnR5ICglcyknLFxuXHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0KSxcblx0XHRcdGVudGl0eSxcblx0XHRcdGtleSxcblx0XHQpO1xuXHR9XG5cdGlmICggISBlbnRpdHkuaGFzT3duUHJvcGVydHkoIGtleSApICkge1xuXHRcdHRocm93IG5ldyBFeGNlcHRpb24oIG1lc3NhZ2UgKTtcblx0fVxufTtcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIGdpdmVuIHBhdGggaW4gdGhlIHByb3ZpZGVkIGltbXV0YWJsZSBvYmplY3QgZXhpc3RzLlxuICogVGhpcyBpcyB1c2VkIHdoZW4gY2FsbGluZyBjb2RlIHdhbnRzIGFuIGV4Y2VwdGlvbiB0byBiZSB0aHJvd24gaWYgdGhlIGdpdmVuXG4gKiBzZWFyY2ggcGF0aCBhcnJheSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW1tdXRhYmxlIG9iamVjdC5cbiAqXG4gKiBJZiB0aGUgaW1tdXRhYmxlIG9iamVjdCBpcyBzZXR1cCBsaWtlIHRoaXM6XG4gKlxuICogaW1tdXRhYmxlID0gSW1tdXRhYmxlLk1hcCgpLnNldCggJ2V2ZW50JywgSW1tdXRhYmxlLk1hcCgpLnNldCggMTAsIEV2ZW50ICkgKTtcbiAqXG4gKiBUaGVuIGEgdmFsaWQgc2VhcmNoYWJsZSBwYXRoIGNvdWxkIGJlIGBbICdldmVudCcsIDEwIF1gLiAgQW4gaW52YWxpZCBwYXRoXG4gKiB3b3VsZCBiZSBgWyAnZGF0ZXRpbWUnLCAxMCBdYFxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggIFNlYXJjaGFibGUgcGF0aCBmb3IgdGhlIGltbXV0YWJsZSBvamJlY3QgdG8gdmVyaWZ5LlxuICogQHBhcmFtIHtJbW11dGFibGUuTWFwfEltbXV0YWJsZS5TZXR9IGltbXV0YWJsZSAgQW4gaW1tdXRhYmxlIG9iamVjdCAoTWFwLCBTZXQsIExpc3QgZXRjKVxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgQSBjdXN0b20gbWVzc2FnZSB0byB1c2UuXG4gKiBAdGhyb3dzIEV4Y2VwdGlvblxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0SW1tdXRhYmxlT2JqZWN0SGFzUGF0aCA9IChcblx0cGF0aCxcblx0aW1tdXRhYmxlLFxuXHRtZXNzYWdlID0gJydcbikgPT4ge1xuXHRpZiAoIG1lc3NhZ2UgPT09ICcnICkge1xuXHRcdG1lc3NhZ2UgPSBzcHJpbnRmKFxuXHRcdFx0X18oXG5cdFx0XHRcdCdUaGUgcHJvdmlkZWQgaW1tdXRhYmxlIG9iamVjdCAoJXMpIGRvZXMgbm90IGhhdmUgdGhlIGdpdmVuIHBhdGggKCVzKScsXG5cdFx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0XHQpLFxuXHRcdFx0aW1tdXRhYmxlLFxuXHRcdFx0cGF0aCxcblx0XHQpO1xuXHR9XG5cdGlmICggISBpbW11dGFibGUuaGFzSW4oIHBhdGggKSApIHtcblx0XHR0aHJvdyBuZXcgRXhjZXB0aW9uKCBtZXNzYWdlICk7XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0geyp9IGl0ZW1zXG4gKiBAcGFyYW0geyBzdHJpbmcgfSAgbWVzc2FnZVxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9IFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LlxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0SXNBcnJheSA9ICggaXRlbXMsIG1lc3NhZ2UgPSAnJyApID0+IHtcblx0aWYgKCBtZXNzYWdlID09PSAnJyApIHtcblx0XHRtZXNzYWdlID0gX18oICdUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IGFuIGFycmF5LicsICdldmVudF9lc3ByZXNzbycgKTtcblx0fVxuXHRpZiAoICEgaXNBcnJheSggaXRlbXMgKSApIHtcblx0XHR0aHJvdyBuZXcgRXhjZXB0aW9uKCBtZXNzYWdlICk7XG5cdH1cbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGVtcHR5IG9yIG5vdC5cbiAqXG4gKiBDYWxsIHRoaXMgdmFsaWRhdG9yIHdoZW4geW91IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSB2YWx1ZSBpcyBOT1QgZW1wdHkuXG4gKlxuICogQHBhcmFtIHsqfSBpdGVtc1xuICogQHBhcmFtIHsgc3RyaW5nIH0gbWVzc2FnZVxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9IFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGVtcHR5LlxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0SXNOb3RFbXB0eSA9ICggaXRlbXMsIG1lc3NhZ2UgPSAnJyApID0+IHtcblx0aWYgKCBtZXNzYWdlID09PSAnJyApIHtcblx0XHRtZXNzYWdlID0gX18oXG5cdFx0XHQnVGhlIHByb3ZpZGVkIGl0ZW1zIG11c3Qgbm90IGJlIGVtcHR5Jyxcblx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0KTtcblx0fVxuXHRpZiAoIGlzRW1wdHkoIGl0ZW1zICkgKSB7XG5cdFx0dGhyb3cgbmV3IEV4Y2VwdGlvbiggbWVzc2FnZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBNYXAgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7Kn0gaXRlbVxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfVxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0SXNNYXAgPSAoIGl0ZW0sIG1lc3NhZ2UgPSAnJyApID0+IHtcblx0aWYgKCBtZXNzYWdlID09PSAnJyApIHtcblx0XHRtZXNzYWdlID0gX18oXG5cdFx0XHQnVGhlIHByb3ZpZGVkIGl0ZW0gbXVzdCBiZSBhIE1hcCBvYmplY3QnLFxuXHRcdFx0J2V2ZW50X2VzcHJlc3NvJ1xuXHRcdCk7XG5cdH1cblx0aWYgKCAhIGlzTWFwKCBpdGVtICkgKSB7XG5cdFx0dGhyb3cgbmV3IEV4Y2VwdGlvbiggbWVzc2FnZSApO1xuXHR9XG59O1xuIiwiZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAnYXR0ZW5kZWUnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9BU0MsXG5cdEFMTE9XRURfT1JERVJfVkFMVUVTLFxufSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCB7IFJFR0lTVFJBVElPTl9TVEFUVVNfSURTIH0gZnJvbSAnLi4vcmVnaXN0cmF0aW9uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRpZDogJ0FUVF9JRCcsXG5cdGxhc3ROYW1lT25seTogJ0FUVF9sbmFtZScsXG5cdGZpcnN0TmFtZU9ubHk6ICdBVFRfZm5hbWUnLFxuXHRmaXJzdFRoZW5MYXN0TmFtZTogWyAnQVRUX2ZuYW1lJywgJ0FUVF9sbmFtZScgXSxcblx0bGFzdFRoZW5GaXJzdE5hbWU6IFsgJ0FUVF9sbmFtZScsICdBVFRfZm5hbWUnIF0sXG59O1xuXG4vKipcbiAqIERlc2NyaWJlZCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7e2F0dHJpYnV0ZXM6ICp9fVxuICovXG5leHBvcnQgY29uc3QgcXVlcnlEYXRhVHlwZXMgPSB7XG5cdGZvckV2ZW50SWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvckRhdGV0aW1lSWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclRpY2tldElkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JTdGF0dXNJZDogUHJvcFR5cGVzLm9uZU9mKCBSRUdJU1RSQVRJT05fU1RBVFVTX0lEUyApLFxuXHRmb3JSZWdpc3RyYXRpb25JZDogUHJvcFR5cGVzLm51bWJlcixcblx0c2hvd0dyYXZhdGFyOiBQcm9wVHlwZXMuYm9vbCxcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIE9iamVjdC5rZXlzKCBvcmRlckJ5TWFwICkgKSxcblx0XHRvcmRlcjogUHJvcFR5cGVzLm9uZU9mKCBBTExPV0VEX09SREVSX1ZBTFVFUyApLFxuXHR9ICksXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdsYXN0VGhlbkZpcnN0TmFtZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0FTQyxcblx0fSxcbn07XG5cbi8qKlxuICogVXNlZCB0byBtYXAgYW4gb3JkZXJCeSBzdHJpbmcgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkXG4gKiBpbiBhIFJFU1QgcXVlcnkgZnJvbSB0aGUgY29udGV4dCBvZiBhIGF0dGVuZGVlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBcdFx0b3JkZXJCeVxuICogQHJldHVybiB7IHN0cmluZyB9IFx0UmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmdcbiAqIFx0XHRcdFx0XHRcdGZvciB0aGUgUkVTVCBxdWVyeSBmb3IgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiBhdHRlbmRlZXMgZW5kcG9pbnQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JFdmVudElkICAgIFx0SUQgb2YgRXZlbnQgdG8gcmV0cmlldmUgYXR0ZW5kZWVzIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvckRhdGV0aW1lSWQgXHRJRCBvZiBEYXRldGltZSB0byByZXRyaWV2ZSBhdHRlbmRlZXMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yVGlja2V0SWQgXHRcdElEIG9mIFRpY2tldCB0byByZXRyaWV2ZSBhdHRlbmRlZXMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yUmVnaXN0cmF0aW9uSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JTdGF0dXNJZCBcdFx0SUQgb2YgU3RhdHVzIHRvIHJldHJpZXZlIGF0dGVuZGVlcyBmb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBzaG93R3JhdmF0YXIgXHRCb29sZWFuIHRvZ2dsZSBmb3Igd2hldGhlciB0byBkaXNwbGF5IHVzZXIgR3JhdmF0YXJcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAgXHRUaGUgYXNzZW1ibGVkIHdoZXJlIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCB3aGVyZUNvbmRpdGlvbnMgPSAoIHtcblx0Zm9yRXZlbnRJZCA9IDAsXG5cdGZvckRhdGV0aW1lSWQgPSAwLFxuXHRmb3JUaWNrZXRJZCA9IDAsXG5cdGZvclJlZ2lzdHJhdGlvbklkID0gMCxcblx0Zm9yU3RhdHVzSWQgPSAnUkFQJyxcblx0c2hvd0dyYXZhdGFyID0gZmFsc2UsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXG5cdC8vIGVuc3VyZSB0aGF0IGVudGl0eSBJRHMgYXJlIGludGVnZXJzXG5cdGZvclJlZ2lzdHJhdGlvbklkID0gcGFyc2VJbnQoIGZvclJlZ2lzdHJhdGlvbklkLCAxMCApO1xuXHRmb3JUaWNrZXRJZCA9IHBhcnNlSW50KCBmb3JUaWNrZXRJZCwgMTAgKTtcblx0Zm9yRGF0ZXRpbWVJZCA9IHBhcnNlSW50KCBmb3JEYXRldGltZUlkLCAxMCApO1xuXHRmb3JFdmVudElkID0gcGFyc2VJbnQoIGZvckV2ZW50SWQsIDEwICk7XG5cblx0Ly8gb3JkZXIgb2YgcHJpb3JpdHkgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cblx0aWYgKCBmb3JSZWdpc3RyYXRpb25JZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JSZWdpc3RyYXRpb25JZCApICkge1xuXHRcdHdoZXJlLnB1c2goIGB3aGVyZVtSZWdpc3RyYXRpb24uUkVHX0lEXT0keyBmb3JSZWdpc3RyYXRpb25JZCB9YCApO1xuXHR9IGVsc2UgaWYgKCBmb3JUaWNrZXRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JUaWNrZXRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goIGB3aGVyZVtSZWdpc3RyYXRpb24uVGlja2V0LlRLVF9JRF09JHsgZm9yVGlja2V0SWQgfWAgKTtcblx0fSBlbHNlIGlmICggZm9yRGF0ZXRpbWVJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JEYXRldGltZUlkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggYHdoZXJlW1JlZ2lzdHJhdGlvbi5UaWNrZXQuRGF0ZXRpbWUuRFRUX0lEXT0keyBmb3JEYXRldGltZUlkIH1gICk7XG5cdH0gZWxzZSBpZiAoIGZvckV2ZW50SWQgIT09IDAgJiYgISBpc05hTiggZm9yRXZlbnRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goIGB3aGVyZVtSZWdpc3RyYXRpb24uRVZUX0lEXT0keyBmb3JFdmVudElkIH1gICk7XG5cdH1cblxuXHRpZiAoIFJFR0lTVFJBVElPTl9TVEFUVVNfSURTLmluY2x1ZGVzKCBmb3JTdGF0dXNJZCApICkge1xuXHRcdHdoZXJlLnB1c2goIGB3aGVyZVtSZWdpc3RyYXRpb24uU3RhdHVzLlNUU19JRF09JHsgZm9yU3RhdHVzSWQgfWAgKTtcblx0fVxuXHRpZiAoIHNob3dHcmF2YXRhciA9PT0gdHJ1ZSApIHtcblx0XHR3aGVyZS5wdXNoKCAnY2FsY3VsYXRlPXVzZXJfYXZhdGFyJyApO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAqIGFzIGRhdGVGb3JtYXRzIGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGF0ZSBmaWVsZHMgb24gcHJvdmlkZWQgZW50aXRpZXMuICBEb2VzIG5vdCBtdXRhdGUgb3JpZ2luYWxcbiAqIGVudGl0aWVzLlxuICpcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXRpZXMgIEFuIGFycmF5IG9mIGVudGl0eSBvYmplY3RzXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHBhcmFtIHsgc3RyaW5nIH0gZm9ybWF0ICBUaGUgZm9ybWF0IHRvIHRyYW5zZm9ybSB0aGUgZGF0ZSBmaWVsZCB2YWx1ZXMgdG8uXG4gKiBAcGFyYW0geyBib29sZWFuIH0gbG9jYWwgICAgICBXaGV0aGVyIG9yIG5vdCB0byBjb252ZXJ0IHRoZSBkYXRlIGZpZWxkIHZhbHVlXG4gKiAgIHRvIHRoZSBsb2NhbCB0aW1lem9uZSBmb3IgdGhlIGhvc3QuXG4gKiBAcmV0dXJuIHsgQXJyYXkgfSAgUmV0dXJucyBhIG5ldyBhcnJheSBvZiBuZXcgZW50aXRpZXMgd2l0aCB0aGUgZGF0ZSBmaWVsZFxuICogICB2YWx1ZXMgZm9ybWF0dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXREYXRlc09uRW50aXRpZXMgPSAoXG5cdGVudGl0aWVzID0gW10sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcblx0Zm9ybWF0ID0gZGF0ZUZvcm1hdHMuREFURV9USU1FX0ZPUk1BVF9JU084NjAxLFxuXHRsb2NhbCA9IHRydWUsXG4pID0+IHtcblx0aWYgKCBpc0VtcHR5KCBlbnRpdGllcyApIHx8IGlzRW1wdHkoIGVudGl0eURhdGVGaWVsZHMgKSApIHtcblx0XHRyZXR1cm4gZW50aXRpZXM7XG5cdH1cblx0Y29uc3QgZm9ybWF0dGVkRW50aXRpZXMgPSBbXTtcblx0ZW50aXRpZXMuZm9yRWFjaCggKCBlbnRpdHkgKSA9PiB7XG5cdFx0Zm9ybWF0dGVkRW50aXRpZXMucHVzaCggZm9ybWF0RGF0ZXNPbkVudGl0eShcblx0XHRcdGVudGl0eSxcblx0XHRcdGVudGl0eURhdGVGaWVsZHMsXG5cdFx0XHRmb3JtYXQsXG5cdFx0XHRsb2NhbCxcblx0XHQpICk7XG5cdH0gKTtcblx0cmV0dXJuIGZvcm1hdHRlZEVudGl0aWVzO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBkYXRlIGZpZWxkcyBvbiB0aGUgcHJvdmlkZWQgZW50aXR5LiAgRG9lcyBub3QgbXV0YXRlIG9yaWdpbmFsXG4gKiBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHsgT2JqZWN0IH0gZW50aXR5ICBBbiBlbnRpdHlcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyAgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcGFyYW0geyBzdHJpbmcgfSBmb3JtYXQgIFRoZSBmb3JtYXQgdG8gdHJhbnNmb3JtIHRoZSBkYXRlIGZpZWxkIHZhbHVlcyB0by5cbiAqIEBwYXJhbSB7IGJvb2xlYW4gfSBsb2NhbCAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbnZlcnQgdGhlIGRhdGUgZmllbGQgdmFsdWVcbiAqICAgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGZvciB0aGUgaG9zdC5cbiAqIEByZXR1cm4geyBPYmplY3QgfSAgUmV0dXJucyBhIG5ldyBlbnRpdHkgd2l0aCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZXMgZm9ybWF0dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXREYXRlc09uRW50aXR5ID0gKFxuXHRlbnRpdHkgPSB7fSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuXHRmb3JtYXQgPSBkYXRlRm9ybWF0cy5EQVRFX1RJTUVfRk9STUFUX0lTTzg2MDEsXG5cdGxvY2FsID0gdHJ1ZSxcbikgPT4ge1xuXHRjb25zdCBuZXdFbnRpdHkgPSB7IC4uLmVudGl0eSB9O1xuXHRlbnRpdHlEYXRlRmllbGRzLmZvckVhY2goICggZGF0ZUZpZWxkICkgPT4ge1xuXHRcdGlmICggbmV3RW50aXR5WyBkYXRlRmllbGQgXSApIHtcblx0XHRcdG5ld0VudGl0eVsgZGF0ZUZpZWxkIF0gPSBkYXRlRm9ybWF0cy5mb3JtYXREYXRlU3RyaW5nKFxuXHRcdFx0XHRuZXdFbnRpdHlbIGRhdGVGaWVsZCBdLFxuXHRcdFx0XHRmb3JtYXQsXG5cdFx0XHRcdGxvY2FsLFxuXHRcdFx0KTtcblx0XHR9XG5cdH0gKTtcblx0cmV0dXJuIG5ld0VudGl0eTtcbn07XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGF0ZSBmaWVsZHMgdG8gbXlzcWwgZm9ybWF0IG9uIHByb3ZpZGVkIGVudGl0aWVzLiAgRG9lcyBub3RcbiAqIG11dGF0ZSBvcmlnaW5hbCBlbnRpdGllcy5cbiAqXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0aWVzICBBbiBhcnJheSBvZiBlbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzICBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEBwYXJhbSB7IGJvb2xlYW4gfSBsb2NhbCAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbnZlcnQgdGhlIGRhdGUgZmllbGQgdmFsdWVcbiAqICAgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGZvciB0aGUgaG9zdC5cbiAqIEByZXR1cm4geyBBcnJheSB9ICBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIG5ldyBlbnRpdGllcyB3aXRoIHRoZSBkYXRlIGZpZWxkXG4gKiAgIHZhbHVlcyBmb3JtYXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdEVudGl0aWVzRGF0ZXNUb015c3FsID0gKFxuXHRlbnRpdGllcyA9IFtdLFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG5cdGxvY2FsID0gdHJ1ZSxcbikgPT4ge1xuXHRyZXR1cm4gZm9ybWF0RGF0ZXNPbkVudGl0aWVzKFxuXHRcdGVudGl0aWVzLFxuXHRcdGVudGl0eURhdGVGaWVsZHMsXG5cdFx0ZGF0ZUZvcm1hdHMuREFURV9USU1FX0ZPUk1BVF9NWVNRTCxcblx0XHRsb2NhbCxcblx0KTtcbn07XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGF0ZSBmaWVsZHMgdG8gbXlzcWwgZm9ybWF0IG9uIHByb3ZpZGVkIGVudGl0eS4gIERvZXMgbm90XG4gKiBtdXRhdGUgb3JpZ2luYWwgZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7IE9iamVjdCB9IGVudGl0eSAgQW4gYXJyYXkgb2YgZW50aXR5IG9iamVjdHNcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyAgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcGFyYW0geyBib29sZWFuIH0gbG9jYWwgICAgICBXaGV0aGVyIG9yIG5vdCB0byBjb252ZXJ0IHRoZSBkYXRlIGZpZWxkIHZhbHVlXG4gKiAgIHRvIHRoZSBsb2NhbCB0aW1lem9uZSBmb3IgdGhlIGhvc3QuXG4gKiBAcmV0dXJuIHsgT2JqZWN0IH0gIFJldHVybnMgYSBuZXcgZW50aXR5IHdpdGggdGhlIGRhdGUgZmllbGQgdmFsdWVzIGZvcm1hdHRlZFxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RW50aXR5RGF0ZXNUb015c3FsID0gKFxuXHRlbnRpdHkgPSB7fSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuXHRsb2NhbCA9IHRydWUsXG4pID0+IHtcblx0cmV0dXJuIGZvcm1hdERhdGVzT25FbnRpdHkoXG5cdFx0ZW50aXR5LFxuXHRcdGVudGl0eURhdGVGaWVsZHMsXG5cdFx0ZGF0ZUZvcm1hdHMuREFURV9USU1FX0ZPUk1BVF9NWVNRTCxcblx0XHRsb2NhbCxcblx0KTtcbn07XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGF0ZSBmaWVsZHMgdG8gdGhlIHNpdGUgZm9ybWF0IG9uIHByb3ZpZGVkIGVudGl0aWVzLiAgRG9lcyBub3RcbiAqIG11dGF0ZSBvcmlnaW5hbCBlbnRpdGllcy5cbiAqXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0aWVzICBBbiBhcnJheSBvZiBlbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzICBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEBwYXJhbSB7IGJvb2xlYW4gfSBsb2NhbCAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbnZlcnQgdGhlIGRhdGUgZmllbGQgdmFsdWVcbiAqICAgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGZvciB0aGUgaG9zdC5cbiAqIEByZXR1cm4geyBBcnJheSB9ICBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIG5ldyBlbnRpdGllcyB3aXRoIHRoZSBkYXRlIGZpZWxkXG4gKiAgIHZhbHVlcyBmb3JtYXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdEVudGl0aWVzRGF0ZXNUb1NpdGUgPSAoXG5cdGVudGl0aWVzID0gW10sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcblx0bG9jYWwgPSB0cnVlLFxuKSA9PiB7XG5cdHJldHVybiBmb3JtYXREYXRlc09uRW50aXRpZXMoXG5cdFx0ZW50aXRpZXMsXG5cdFx0ZW50aXR5RGF0ZUZpZWxkcyxcblx0XHRkYXRlRm9ybWF0cy5EQVRFX1RJTUVfRk9STUFUX1NJVEUsXG5cdFx0bG9jYWwsXG5cdCk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGRhdGUgZmllbGRzIHRvIHRoZSBzaXRlIGZvcm1hdCBvbiBwcm92aWRlZCBlbnRpdHkuICBEb2VzIG5vdFxuICogbXV0YXRlIG9yaWdpbmFsIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0geyBPYmplY3QgfSBlbnRpdHkgIEFuIGFycmF5IG9mIGVudGl0eSBvYmplY3RzXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHBhcmFtIHsgYm9vbGVhbiB9IGxvY2FsICAgICAgV2hldGhlciBvciBub3QgdG8gY29udmVydCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZVxuICogICB0byB0aGUgbG9jYWwgdGltZXpvbmUgZm9yIHRoZSBob3N0LlxuICogQHJldHVybiB7IE9iamVjdCB9ICBSZXR1cm5zIGEgbmV3IGVudGl0eSB3aXRoIHRoZSBkYXRlIGZpZWxkIHZhbHVlcyBmb3JtYXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdEVudGl0eURhdGVzVG9TaXRlID0gKFxuXHRlbnRpdHkgPSB7fSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuXHRsb2NhbCA9IHRydWUsXG4pID0+IHtcblx0cmV0dXJuIGZvcm1hdERhdGVzT25FbnRpdHkoXG5cdFx0ZW50aXR5LFxuXHRcdGVudGl0eURhdGVGaWVsZHMsXG5cdFx0ZGF0ZUZvcm1hdHMuREFURV9USU1FX0ZPUk1BVF9TSVRFLFxuXHRcdGxvY2FsLFxuXHQpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBkYXRlIGZpZWxkIHZhbHVlcyB0byBtb21lbnQgb2JqZWN0cyBmb3IgdGhlIHByb3ZpZGVkIGVudGl0aWVzLlxuICogRG9lcyBub3QgbXV0YXRlIG9yaWdpbmFsIGVudGl0aWVzLlxuICpcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXRpZXMgQW4gYXJyYXkgb2YgZW50aXR5IG9iamVjdHNcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEByZXR1cm4geyBBcnJheSB9IFJldHVybnMgYSBuZXcgYXJyYXkgb2YgbmV3IGVudGl0aWVzIHdpdGggdGhlIGRhdGUgZmllbGRcbiAqICAgdmFsdWVzIGNvbnZlcnRlZCB0byBtb21lbnQgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRFbnRpdGllc0RhdGVzVG9Nb21lbnQgPSAoXG5cdGVudGl0aWVzID0gW10sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcbikgPT4ge1xuXHRpZiAoIGlzRW1wdHkoIGVudGl0aWVzICkgfHwgaXNFbXB0eSggZW50aXR5RGF0ZUZpZWxkcyApICkge1xuXHRcdHJldHVybiBlbnRpdGllcztcblx0fVxuXHRjb25zdCBmb3JtYXR0ZWRFbnRpdGllcyA9IFtdO1xuXHRlbnRpdGllcy5mb3JFYWNoKCAoIGVudGl0eSApID0+IHtcblx0XHRmb3JtYXR0ZWRFbnRpdGllcy5wdXNoKCBjb252ZXJ0RW50aXR5RGF0ZXNUb01vbWVudChcblx0XHRcdGVudGl0eSxcblx0XHRcdGVudGl0eURhdGVGaWVsZHMsXG5cdFx0KSApO1xuXHR9ICk7XG5cdHJldHVybiBmb3JtYXR0ZWRFbnRpdGllcztcbn07XG5cbi8qKlxuICogQ29udmVydHMgZGF0ZSBmaWVsZCB2YWx1ZXMgdG8gbW9tZW50IG9iamVjdHMgZm9yIHRoZSBwcm92aWRlZCBlbnRpdHkuXG4gKiBEb2VzIG5vdCBtdXRhdGUgb3JpZ2luYWwgZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7IE9iamVjdCB9IGVudGl0eSBBbiBlbnRpdHkuXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcmV0dXJuIHsgT2JqZWN0IH0gUmV0dXJucyBhIG5ldyBlbnRpdHkgd2l0aCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZXMgY29udmVydGVkXG4gKiAgIHRvIG1vbWVudCBvYmplY3RzLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydEVudGl0eURhdGVzVG9Nb21lbnQgPSAoXG5cdGVudGl0eSA9IHt9LFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG4pID0+IHtcblx0Y29uc3QgbmV3RW50aXR5ID0geyAuLi5lbnRpdHkgfTtcblx0ZW50aXR5RGF0ZUZpZWxkcy5mb3JFYWNoKCAoIGRhdGVGaWVsZCApID0+IHtcblx0XHRpZiAoIG5ld0VudGl0eVsgZGF0ZUZpZWxkIF0gKSB7XG5cdFx0XHRuZXdFbnRpdHlbIGRhdGVGaWVsZCBdID0gZGF0ZUZvcm1hdHMuc3RyaW5nVG9Nb21lbnQoXG5cdFx0XHRcdG5ld0VudGl0eVsgZGF0ZUZpZWxkIF0sXG5cdFx0XHQpO1xuXHRcdH1cblx0fSApO1xuXHRyZXR1cm4gbmV3RW50aXR5O1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0FycmF5LCBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBRVUVSWV9PUkRFUl9BU0MgPSAnQVNDJztcbmV4cG9ydCBjb25zdCBRVUVSWV9PUkRFUl9ERVNDID0gJ0RFU0MnO1xuZXhwb3J0IGNvbnN0IEFMTE9XRURfT1JERVJfVkFMVUVTID0gWyAnYXNjJywgJ2Rlc2MnLCAnQVNDJywgJ0RFU0MnIF07XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOID0gZW5jb2RlVVJJQ29tcG9uZW50KCAnPicgKTtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU4gPSBlbmNvZGVVUklDb21wb25lbnQoICc8JyApO1xuZXhwb3J0IGNvbnN0IEdSRUFURVJfVEhBTl9BTkRfRVFVQUwgPSBlbmNvZGVVUklDb21wb25lbnQoICc+PScgKTtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU5fQU5EX0VRVUFMID0gZW5jb2RlVVJJQ29tcG9uZW50KCAnPD0nICk7XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcGFyYW0geyBmdW5jdGlvbiB9IHdoZXJlQ29uZGl0aW9ucyAgQSBmdW5jdGlvbiBmb3IgcHJlcHBpbmcgdGhlIHdoZXJlXG4gKiBcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmRpdGlvbnMgZnJvbSB0aGUgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgZnVuY3Rpb24gfSBtYXBPcmRlckJ5XHRcdEEgZnVuY3Rpb24gZm9yIG1hcHBpbmcgaW5jb21pbmcgb3JkZXJfYnlcbiAqIFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaW5ncyB0byB0aGUgdmFsdWUgbmVlZGVkIGZvciB0aGVcbiAqIFx0XHRcdFx0XHRcdFx0XHRcdFx0cXVlcnlfc3RyaW5nLlxuICogQHJldHVybiB7IHN0cmluZyB9ICBcdFx0XHRcdFx0UmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoXG5cdHF1ZXJ5RGF0YSA9IHt9LFxuXHR3aGVyZUNvbmRpdGlvbnMgPSAoKSA9PiBudWxsLFxuXHRtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4gb3JkZXJCeSxcbikgPT4ge1xuXHRjb25zdCB3aGVyZSA9IHdoZXJlQ29uZGl0aW9ucyggcXVlcnlEYXRhICk7XG5cdGNvbnN0IHsgbGltaXQsIG9yZGVyLCBvcmRlckJ5LCBkZWZhdWx0V2hlcmVDb25kaXRpb25zIH0gPSBxdWVyeURhdGE7XG5cdGNvbnN0IHF1ZXJ5UGFyYW1zID0gW107XG5cdGlmICggISBpc1VuZGVmaW5lZCggbGltaXQgKSApIHtcblx0XHRxdWVyeVBhcmFtcy5wdXNoKCBgbGltaXQ9JHsgbGltaXQgfWAgKTtcblx0fVxuXHRpZiAoICEgaXNVbmRlZmluZWQoIGRlZmF1bHRXaGVyZUNvbmRpdGlvbnMgKSApIHtcblx0XHRxdWVyeVBhcmFtcy5wdXNoKFxuXHRcdFx0YGRlZmF1bHRfd2hlcmVfY29uZGl0aW9ucz0keyBkZWZhdWx0V2hlcmVDb25kaXRpb25zIH1gXG5cdFx0KTtcblx0fVxuXHRpZiAoICEgaXNVbmRlZmluZWQoIG1hcE9yZGVyQnkoIG9yZGVyQnkgKSApICkge1xuXHRcdGlmICggaXNBcnJheSggbWFwT3JkZXJCeSggb3JkZXJCeSApICkgKSB7XG5cdFx0XHRmb3IgKCBjb25zdCBmaWVsZCBvZiBtYXBPcmRlckJ5KCBvcmRlckJ5ICkgKSB7XG5cdFx0XHRcdHF1ZXJ5UGFyYW1zLnB1c2goIGBvcmRlcl9ieVskeyBmaWVsZCB9XT0keyBvcmRlciB9YCApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRxdWVyeVBhcmFtcy5wdXNoKCBgb3JkZXI9JHsgb3JkZXIgfWAgKTtcblx0XHRcdHF1ZXJ5UGFyYW1zLnB1c2goIGBvcmRlcl9ieT0keyBtYXBPcmRlckJ5KCBvcmRlckJ5ICkgfWAgKTtcblx0XHR9XG5cdH1cblx0bGV0IHF1ZXJ5U3RyaW5nID0gcXVlcnlQYXJhbXMuam9pbiggJyYnICk7XG5cdGlmICggd2hlcmUgKSB7XG5cdFx0cXVlcnlTdHJpbmcgKz0gJyYnICsgd2hlcmU7XG5cdH1cblx0cmV0dXJuIHF1ZXJ5U3RyaW5nO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgTU9ERUxfTkFNRSA9ICdjaGVja2luJztcblxuZXhwb3J0IGNvbnN0IENIRUNLSU5fU1RBVFVTX0lEID0ge1xuXHRTVEFUVVNfQ0hFQ0tFRF9PVVQ6IGZhbHNlLFxuXHRTVEFUVVNfQ0hFQ0tFRF9JTjogdHJ1ZSxcblx0U1RBVFVTX0NIRUNLRURfTkVWRVI6IDIsXG59O1xuXG5leHBvcnQgY29uc3QgQ0hFQ0tJTl9TVEFUVVNfSURTID0gdmFsdWVzKFxuXHRDSEVDS0lOX1NUQVRVU19JRFxuKTtcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnknO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBwcmV0dHlTdGF0dXMgfSBmcm9tICcuLi9zdGF0dXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcbn0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgKiBhcyBjaGVja2luU3RhdHVzIGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBEZXNjcmliZWQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge3thdHRyaWJ1dGVzOiAqfX1cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5RGF0YVR5cGVzID0ge1xuXHRmb3JEYXRldGltZUlkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JFdmVudElkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JSZWdpc3RyYXRpb25JZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yVGlja2V0SWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclN0YXR1c0lkOiBQcm9wVHlwZXMub25lT2YoIGNoZWNraW5TdGF0dXMuQ0hFQ0tJTl9TVEFUVVNfSURTICksXG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnQ0hLX0lEJyxcblx0XHRcdCdSRUdfSUQnLFxuXHRcdFx0J0NIS190aW1lc3RhbXAnLFxuXHRcdFx0J0RUVF9JRCcsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdH0gKSxcbn07XG5cbmV4cG9ydCBjb25zdCBvcHRpb25zRW50aXR5TWFwID0ge1xuXHRkZWZhdWx0OiAoKSA9PiB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0bGFiZWw6IHByZXR0eVN0YXR1cyhcblx0XHRcdFx0XHRjaGVja2luU3RhdHVzLkNIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX09VVFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR2YWx1ZTogY2hlY2tpblN0YXR1cy5DSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9PVVQsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRsYWJlbDogcHJldHR5U3RhdHVzKFxuXHRcdFx0XHRcdGNoZWNraW5TdGF0dXMuQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfSU5cblx0XHRcdFx0KSxcblx0XHRcdFx0dmFsdWU6IGNoZWNraW5TdGF0dXMuQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfSU4sXG5cdFx0XHR9LFxuXHRcdF07XG5cdH0sXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdDSEtfdGltZXN0YW1wJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfREVTQyxcblx0fSxcbn07XG5cbi8qKlxuICogVXNlZCB0byBtYXAgYW4gb3JkZXJCeSBzdHJpbmcgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkIGluIGEgUkVTVCBxdWVyeSBmcm9tXG4gKiB0aGUgY29udGV4dCBvZiBhIHJlZ2lzdHJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JkZXJCeVxuICpcbiAqIEByZXR1cm4geyBzdHJpbmcgfSBSZXR1cm5zIGFuIGFjdHVhbCBvcmRlckJ5IHN0cmluZyBmb3IgdGhlIFJFU1QgcXVlcnkgZm9yXG4gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvdmlkZWQgYWxpYXNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcE9yZGVyQnkgPSAoIG9yZGVyQnkgKSA9PiB7XG5cdGNvbnN0IG9yZGVyQnlNYXAgPSB7XG5cdFx0dGltZXN0YW1wOiAnQ0hLX3RpbWVzdGFtcCcsXG5cdFx0aWQ6ICdDSEtfSUQnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiByZWdpc3RyYXRpb25zIGVuZHBvaW50IHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRGF0ZXRpbWVJZCAgICBcdElEIG9mIEV2ZW50IHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRXZlbnRJZCAgICBJRCBvZiBBdHRlbmRlZSB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclJlZ2lzdHJhdGlvbklkIElEIG9mIFRyYW5zYWN0aW9uIHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yVGlja2V0SWQgXHRcdElEIG9mIFRpY2tldCB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtzdHJpbmd9IGZvclN0YXR1c0lkIFx0XHRJRCBvZiBTdGF0dXMgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAgXHRUaGUgYXNzZW1ibGVkIHdoZXJlIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCB3aGVyZUNvbmRpdGlvbnMgPSAoIHtcblx0Zm9yRGF0ZXRpbWVJZCA9IDAsXG5cdGZvckV2ZW50SWQgPSAwLFxuXHRmb3JSZWdpc3RyYXRpb25JZCA9IDAsXG5cdGZvclRpY2tldElkID0gMCxcblx0Zm9yU3RhdHVzSWQgPSAnJyxcbn0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGZvckV2ZW50SWQgPSBwYXJzZUludCggZm9yRXZlbnRJZCwgMTAgKTtcblx0aWYgKCBmb3JFdmVudElkICE9PSAwICYmICEgaXNOYU4oIGZvckV2ZW50SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbUmVnaXN0cmF0aW9uLkVWVF9JRF09JyArIGZvckV2ZW50SWQgKTtcblx0fVxuXHRmb3JEYXRldGltZUlkID0gcGFyc2VJbnQoIGZvckRhdGV0aW1lSWQsIDEwICk7XG5cdGlmICggZm9yRGF0ZXRpbWVJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JEYXRldGltZUlkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW0RUVF9JRF09JyArIGZvckRhdGV0aW1lSWQgKTtcblx0fVxuXHRmb3JSZWdpc3RyYXRpb25JZCA9IHBhcnNlSW50KCBmb3JSZWdpc3RyYXRpb25JZCwgMTAgKTtcblx0aWYgKCBmb3JSZWdpc3RyYXRpb25JZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JSZWdpc3RyYXRpb25JZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtSRUdfSURdPScgKyBmb3JSZWdpc3RyYXRpb25JZCApO1xuXHR9XG5cdGZvclRpY2tldElkID0gcGFyc2VJbnQoIGZvclRpY2tldElkLCAxMCApO1xuXHRpZiAoIGZvclRpY2tldElkICE9PSAwICYmICEgaXNOYU4oIGZvclRpY2tldElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1JlZ2lzdHJhdGlvbi5US1RfSURdPScgKyBmb3JUaWNrZXRJZCApO1xuXHR9XG5cdGlmICggZm9yU3RhdHVzSWQgIT09ICcnICYmIGZvclN0YXR1c0lkICE9PSBudWxsICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtDSEtfaW5dPScgKyBmb3JTdGF0dXNJZCApO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAnZGF0ZXRpbWUnO1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfU1RBVFVTX0lEID0ge1xuXHRBQ1RJVkU6ICdEVEEnLFxuXHRDQU5DRUxMRUQ6ICdEVEMnLFxuXHRFWFBJUkVEOiAnRFRFJyxcblx0SU5BQ1RJVkU6ICdEVEknLFxuXHRQT1NUUE9ORUQ6ICdEVFAnLFxuXHRTT0xEX09VVDogJ0RUUycsXG5cdFRSQVNIRUQ6ICdEVFQnLFxuXHRVUENPTUlORzogJ0RUVScsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfU1RBVFVTX0lEUyA9IHZhbHVlcyggREFURVRJTUVfU1RBVFVTX0lEICk7XG5cbmV4cG9ydCBjb25zdCBNSU5VVEVfSU5fU0VDT05EUyA9IDYwO1xuZXhwb3J0IGNvbnN0IEhPVVJfSU5fU0VDT05EUyA9IE1JTlVURV9JTl9TRUNPTkRTICogNjA7XG5leHBvcnQgY29uc3QgREFZX0lOX1NFQ09ORFMgPSBIT1VSX0lOX1NFQ09ORFMgKiAyNDtcbmV4cG9ydCBjb25zdCBXRUVLX0lOX1NFQ09ORFMgPSBIT1VSX0lOX1NFQ09ORFMgKiA3O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0lOX1NFQ09ORFMgPSBEQVlfSU5fU0VDT05EUyAqIDMwO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAqIGFzIGJhc2VGb3JtYXR0ZXIgZnJvbSAnLi4vYmFzZS1kYXRlLWZvcm1hdHRlcic7XG5cbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBmb3JPd24sIHB1bGxBdCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuXHRUSU1FX0ZPUk1BVF9TSVRFLFxuXHREQVRFX1RJTUVfRk9STUFUX1NJVEUsXG5cdGFsbERhdGVUaW1lc0FzU3RyaW5nLFxuXHRTRVBBUkFUT1JfU1BBQ0VfREFTSF9TUEFDRSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaGVscGVycyc7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEFycmF5IG9mIGZpZWxkcyB0aGF0IGhhdmUgZGF0ZSBpbmZvcm1hdGlvblxuICogQHR5cGUgeyBzdHJpbmdbXSB9XG4gKi9cbmV4cG9ydCBjb25zdCBEQVRFX0ZJRUxEUyA9IFtcblx0J0RUVF9FVlRfc3RhcnQnLFxuXHQnRFRUX0VWVF9lbmQnLFxuXTtcblxuLyoqXG4gKiBXaWxsIGhvbGQgdGhlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBsaXN0IG9mIGZvcm1hdHRlcnMgZm9yIGRhdGVzLiAgRm9ybWF0dGVyc1xuICogYXJlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGAuLi9iYXNlLWRhdGUtZm9ybWF0dGVyYCBidXQgd3JhcHBlZCBieSBkeW5hbWljYWxseVxuICogZ2VuZXJhdGVkIGZ1bmN0aW9ucyAoY2FsbGFibGUgdmlhIHNhbWUgbmFtZSkgdGhhdCBhdXRvbWF0aWNhbGx5IHJlY2VpdmUgdGhlXG4gKiBjb3JyZWN0IGRhdGVGaWVsZHNNYXAgYXJndW1lbnQuXG4gKlxuICogRWcuICBgLi4vYmFzZS1kYXRlLWZvcm1hdHRlciBoYXNcbiAqIGZvcm1hdERhdGVzT25FbnRpdGllcyggZW50aXRpZXMsIGVudGl0eURhdGVGaWVsZHMsIGZvcm1hdCwgbG9jYWwgKTtcbiAqIFdoZW4gaW1wb3J0aW5nIGBmb3JtYXREYXRlc09uRW50aXRpZXNgIGZyb20gdGhpcyBmaWxlLCB5b3UgY2FuIGNhbGwgaXQgc2ltcGx5XG4gKiBieSBkb2luZyB0aGlzOlxuICpcbiAqIGZvcm1hdERhdGVzT25FbnRpdGllcyggZGF0ZVRpbWVPYmplY3RzLCBmb3JtYXQsIGxvY2FsICk7XG4gKlxuICogTm90aWNlIHRoYXQgaXQncyBjYWxsZWQgd2l0aG91dCB0aGUgZW50aXR5RGF0ZUZpZWxkcyBhcmd1bWVudCBiZWNhdXNlIHRoYXQnc1xuICogcHJvdmlkZWQgYnkgdGhpcyBnZW5lcmF0b3IuXG4gKlxuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBmb3JtYXR0ZXJzID0ge307XG5cbmZvck93biggYmFzZUZvcm1hdHRlciwgKCBpbXBsZW1lbnRhdGlvbiwgZnVuY3Rpb25OYW1lICkgPT4ge1xuXHRmb3JtYXR0ZXJzWyBmdW5jdGlvbk5hbWUgXSA9ICggLi4uaW5jb21pbmdBcmdzICkgPT4ge1xuXHRcdGNvbnN0IGZpcnN0QXJnID0gcHVsbEF0KCBpbmNvbWluZ0FyZ3MsIDAgKTtcblx0XHRyZXR1cm4gaW1wbGVtZW50YXRpb24oIGZpcnN0QXJnWyAwIF0sIERBVEVfRklFTERTLCAuLi5pbmNvbWluZ0FyZ3MgKTtcblx0fTtcbn0gKTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgc3BpdCBvdXQgYSBwcmV0dGlmaWVkIGxhYmVsIGZvciB0aGUgcHJvdmlkZWQgRGF0ZVRpbWUgZW50aXR5LlxuICpcbiAqIElmIHRoZXJlIGlzIGEgRFRUX25hbWUsIHRoZSBmb3JtYXQgd2lsbCBiZTpcbiAqIGBEVFRfbmFtZSAoRFRUX0VWVF9zdGFydCAtIERUVF9FVlRfZW5kKWBcbiAqXG4gKiBJZiBubyBEVFRfbmFtZSB0aGVuOlxuICogYERUVF9FVlRfc3RhcnQgLSBEVFRfRVZUX2VuZGBcbiAqXG4gKiBUaGlzIHdpbGwgYWNjb3VudCBmb3IgaWYgYm90aCBzdGFydCBhbmQgZW5kIGFyZSBpbiB0aGUgc2FtZSBkYXkgYW5kIHNpbXBseVxuICogdXNlIHRpbWUgZm9yIHRoZSBlbmQgcGFydC5cbiAqXG4gKiBAcGFyYW0geyBCYXNlRW50aXR5IH0gRGF0ZVRpbWVFbnRpdHlcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgQSBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcHJvdmlkZWRcbiAqICAgIERhdGVUaW1lRW50aXR5LlxuICovXG5leHBvcnQgY29uc3QgcHJldHR5RGF0ZUZyb21EYXRlVGltZSA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG5cdGxldCBjb250ZW50ID0gJyc7XG5cdGlmICggaXNNb2RlbEVudGl0eU9mTW9kZWwoIERhdGVUaW1lRW50aXR5LCAnZGF0ZXRpbWUnICkgKSB7XG5cdFx0aWYgKCBEYXRlVGltZUVudGl0eS5EVFRfRVZUX3N0YXJ0Lmhhc1NhbWUoXG5cdFx0XHREYXRlVGltZUVudGl0eS5EVFRfRVZUX2VuZCxcblx0XHRcdCdkYXknXG5cdFx0KSApIHtcblx0XHRcdGNvbnRlbnQgKz0gYWxsRGF0ZVRpbWVzQXNTdHJpbmcoXG5cdFx0XHRcdFNFUEFSQVRPUl9TUEFDRV9EQVNIX1NQQUNFLFxuXHRcdFx0XHREYXRlVGltZUVudGl0eS5EVFRfRVZUX3N0YXJ0LnRvRm9ybWF0KFxuXHRcdFx0XHRcdERBVEVfVElNRV9GT1JNQVRfU0lURVxuXHRcdFx0XHQpLFxuXHRcdFx0XHREYXRlVGltZUVudGl0eS5EVFRfRVZUX2VuZC50b0Zvcm1hdChcblx0XHRcdFx0XHRUSU1FX0ZPUk1BVF9TSVRFXG5cdFx0XHRcdCksXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZW50ICs9IGFsbERhdGVUaW1lc0FzU3RyaW5nKFxuXHRcdFx0XHRTRVBBUkFUT1JfU1BBQ0VfREFTSF9TUEFDRSxcblx0XHRcdFx0RGF0ZVRpbWVFbnRpdHkuRFRUX0VWVF9zdGFydC50b0Zvcm1hdChcblx0XHRcdFx0XHREQVRFX1RJTUVfRk9STUFUX1NJVEVcblx0XHRcdFx0KSxcblx0XHRcdFx0RGF0ZVRpbWVFbnRpdHkuRFRUX0VWVF9lbmQudG9Gb3JtYXQoXG5cdFx0XHRcdFx0REFURV9USU1FX0ZPUk1BVF9TSVRFXG5cdFx0XHRcdCksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRjb250ZW50ID0gRGF0ZVRpbWVFbnRpdHkuRFRUX25hbWUgP1xuXHRcdFx0YCR7IERhdGVUaW1lRW50aXR5LkRUVF9uYW1lIH0gKCR7IGNvbnRlbnQgfSlgIDpcblx0XHRcdGNvbnRlbnQ7XG5cdH1cblx0cmV0dXJuIGNvbnRlbnQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm1hdHRlcic7XG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cy1oZWxwZXInO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG5cdEdSRUFURVJfVEhBTixcblx0R1JFQVRFUl9USEFOX0FORF9FUVVBTCxcblx0TEVTU19USEFOX0FORF9FUVVBTCxcbn0gZnJvbSAnLi4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBub3dEYXRlQW5kVGltZSA9IG1vbWVudCgpO1xuXG4vKipcbiAqIERlc2NyaWJlZCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7e2F0dHJpYnV0ZXM6ICp9fVxuICovXG5leHBvcnQgY29uc3QgcXVlcnlEYXRhVHlwZXMgPSB7XG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnRFRUX25hbWUnLFxuXHRcdFx0J0RUVF9JRCcsXG5cdFx0XHQnc3RhcnRfZGF0ZScsXG5cdFx0XHQnZW5kX2RhdGUnLFxuXHRcdF0gKSxcblx0XHRvcmRlcjogUHJvcFR5cGVzLm9uZU9mKCBBTExPV0VEX09SREVSX1ZBTFVFUyApLFxuXHRcdHNob3dFeHBpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblx0XHRtb250aDogUHJvcFR5cGVzLm1vbnRoLFxuXHR9ICksXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0XHRzaG93RXhwaXJlZDogYm9vbGVhblxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAnc3RhcnRfZGF0ZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdFx0c2hvd0V4cGlyZWQ6IGZhbHNlLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGFuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRzdGFydF9kYXRlOiAnRFRUX0VWVF9zdGFydCcsXG5cdFx0ZW5kX2RhdGU6ICdEVFRfRVZUX2VuZCcsXG5cdH07XG5cdHJldHVybiBpc1VuZGVmaW5lZCggb3JkZXJCeU1hcFsgb3JkZXJCeSBdICkgP1xuXHRcdG9yZGVyQnkgOlxuXHRcdG9yZGVyQnlNYXBbIG9yZGVyQnkgXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHdoZXJlIGNvbmRpdGlvbnMgZm9yIGFuIGV2ZW50cyBlbmRwb2ludCByZXF1ZXN0IHVzaW5nIHByb3ZpZGVkXG4gKiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRXZlbnRJZCAgSUQgZm9yIEV2ZW50IHRvIHJldHJpZXZlIGRhdGV0aW1lcyBmcm9tXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dFeHBpcmVkICBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGV4cGlyZWQgZXZlbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vbnRoICAgICAgICAgUmV0dXJuIGV2ZW50cyBmb3IgdGhlIGdpdmVuIG1vbnRoLiAgQ2FuIGJlIGFueVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhbnkgbW9udGggZm9ybWF0IHJlY29nbml6ZWQgYnkgbW9tZW50LlxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICBUaGUgYXNzZW1ibGVkIHdoZXJlIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCB3aGVyZUNvbmRpdGlvbnMgPSAoIHtcblx0Zm9yRXZlbnRJZCA9IDAsXG5cdHNob3dFeHBpcmVkID0gZmFsc2UsXG5cdG1vbnRoID0gJ25vbmUnLFxufSApID0+IHtcblx0Y29uc3Qgd2hlcmUgPSBbXTtcblx0aWYgKCAhIHNob3dFeHBpcmVkICkge1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbRFRUX0VWVF9lbmQqKmV4cGlyZWRdW109JyArIEdSRUFURVJfVEhBTiArXG5cdFx0XHQnJndoZXJlW0RUVF9FVlRfZW5kKipleHBpcmVkXVtdPScgK1xuXHRcdFx0bm93RGF0ZUFuZFRpbWUubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0aWYgKCBtb250aCAmJiBtb250aCAhPT0gJ25vbmUnICkge1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbRFRUX0VWVF9zdGFydF1bXT0nICsgR1JFQVRFUl9USEFOX0FORF9FUVVBTCArXG5cdFx0XHQnJndoZXJlW0RUVF9FVlRfc3RhcnRdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5zdGFydE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtEVFRfRVZUX2VuZF1bXT0nICsgTEVTU19USEFOX0FORF9FUVVBTCArXG5cdFx0XHQnJndoZXJlW0RUVF9FVlRfZW5kXVtdPScgK1xuXHRcdFx0bW9tZW50KCkubW9udGgoIG1vbnRoICkuZW5kT2YoICdtb250aCcgKS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0fVxuXHRpZiAoIHBhcnNlSW50KCBmb3JFdmVudElkLCAxMCApICE9PSAwICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtFdmVudC5FVlRfSURdPScgKyBmb3JFdmVudElkICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBEQVRFVElNRV9TVEFUVVNfSUQsIE1PREVMX05BTUUsIE1PTlRIX0lOX1NFQ09ORFMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9XG4gKi9cbmNvbnN0IGFzc2VydERhdGVUaW1lRW50aXR5ID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0aWYgKCAhIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBEYXRlVGltZUVudGl0eSwgTU9ERUxfTkFNRSApICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHQnVGhlIHByb3ZpZGVkIGVudGl0eSBpcyBub3QgYSBkYXRldGltZSBpbnN0YW5jZSdcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBldmVudCBkYXRlIGlzIG9jY3VycmluZyBOT1dcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQWN0aXZlID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdHJldHVybiBEYXRlVGltZUVudGl0eS5zdGFydC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPCAwICYmXG5cdFx0RGF0ZVRpbWVFbnRpdHkuZW5kLmRpZmZOb3coKS5hc1NlY29uZHMoKSA+IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlbmQgZGF0ZSBpcyBpbiB0aGUgcGFzdFxuICovXG5leHBvcnQgY29uc3QgaXNFeHBpcmVkID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdHJldHVybiBEYXRlVGltZUVudGl0eS5lbmQuZGlmZk5vdygpLmFzU2Vjb25kcygpIDwgMDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGVuZCBkYXRlIGlzIGluIHRoZSBwYXN0XG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlY2VudGx5RXhwaXJlZCA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG5cdGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApO1xuXHRyZXR1cm4gRGF0ZVRpbWVFbnRpdHkuZW5kLmRpZmZOb3coKS5hc1NlY29uZHMoKSA8IDAgJiZcblx0XHREYXRlVGltZUVudGl0eS5lbmQuZGlmZk5vdygpLmFzU2Vjb25kcygpID4gKCBNT05USF9JTl9TRUNPTkRTICogLTEgKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldHMgc29sZCBtZWV0cyBvciBleGNlZWRzIHJlZ2lzdHJhdGlvbiBsaW1pdFxuICovXG5leHBvcnQgY29uc3QgaXNTb2xkT3V0ID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdGNvbnN0IGNhcCA9IERhdGVUaW1lRW50aXR5LnJlZ0xpbWl0O1xuXHRyZXR1cm4gKCBjYXAgIT09IG51bGwgJiYgY2FwICE9PSAnSU5GJyAmJiBjYXAgIT09IEluZmluaXR5ICYmIGNhcCAhPT0gLTEgKSAmJlxuXHRcdERhdGVUaW1lRW50aXR5LnNvbGQgPj0gY2FwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgc3RhcnQgZGF0ZSBpcyBpbiB0aGUgZnV0dXJlXG4gKi9cbmV4cG9ydCBjb25zdCBpc1VwY29taW5nID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdHJldHVybiBEYXRlVGltZUVudGl0eS5zdGFydC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPiAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZGF0ZSBpcyBhcmNoaXZlZFxuICovXG5leHBvcnQgY29uc3QgaXNUcmFzaGVkID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdHJldHVybiBEYXRlVGltZUVudGl0eS5kZWxldGVkO1xufTtcblxuLy8gUExaIE5PVEU6XG4vLyBsZWF2aW5nIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBiZWNhdXNlIGl0IGNhbiBiZSB1c2VkIGlmL3doZW4gd2UgZGVjaWRlXG4vLyB0byBmdWxseSBzdXBwb3J0IHRoZXNlIGRhdGV0aW1lIHN0YXR1c2VzIHdoaWNoIGFyZSBjdXJyZW50bHkgZGVmaW5lZFxuLy8gb24gdGhlIEVFX0RhdGV0aW1lIG1vZGVsIG9iamVjdCBjbGFzcyBidXQgbm90IHlldCB1c2VkXG5cbi8vIC8qKlxuLy8gICogQGZ1bmN0aW9uXG4vLyAgKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4vLyAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGRhdGUgaXMgY2FuY2VsbGVkXG4vLyAgKi9cbi8vIGV4cG9ydCBjb25zdCBpc0NhbmNlbGxlZCA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG4vLyBcdGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApO1xuLy8gXHRyZXR1cm4gRGF0ZVRpbWVFbnRpdHkuY2FuY2VsbGVkO1xuLy8gfTtcbi8vXG4vLyAvKipcbi8vICAqIEBmdW5jdGlvblxuLy8gICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuLy8gICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBkYXRlIGhhcyBiZWVuIHBvc3Rwb25lZFxuLy8gICovXG4vLyBleHBvcnQgY29uc3QgaXNQb3N0cG9uZWQgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuLy8gXHRhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKTtcbi8vIFx0cmV0dXJuIERhdGVUaW1lRW50aXR5LnBvc3Rwb25lZDtcbi8vIH07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9IHN0YXR1cyBJRFxuICovXG5leHBvcnQgY29uc3Qgc3RhdHVzID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG5cdGlmICggaXNUcmFzaGVkKCBEYXRlVGltZUVudGl0eSApICkge1xuXHRcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuVFJBU0hFRDtcblx0fVxuXHRpZiAoIGlzRXhwaXJlZCggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELkVYUElSRUQ7XG5cdH1cblx0aWYgKCBpc1NvbGRPdXQoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5TT0xEX09VVDtcblx0fVxuXHRpZiAoIGlzVXBjb21pbmcoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5VUENPTUlORztcblx0fVxuXHRpZiAoIGlzQWN0aXZlKCBEYXRlVGltZUVudGl0eSApICkge1xuXHRcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuQUNUSVZFO1xuXHR9XG5cdC8vIFBMWiBTRUUgTk9URSBBQk9WRVxuXHQvLyBpZiAoIGlzQ2FuY2VsbGVkKCBEYXRlVGltZUVudGl0eSApICkge1xuXHQvLyBcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuQ0FOQ0VMTEVEO1xuXHQvLyB9XG5cdC8vIGlmICggaXNQb3N0cG9uZWQoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdC8vIFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5QT1NUUE9ORUQ7XG5cdC8vIH1cblx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5JTkFDVElWRTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgIENTUyBjbGFzcyBmb3IgdGhlIGJhY2tncm91bmQgY29sb3JcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJhY2tncm91bmRDb2xvckNsYXNzID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcblx0cmV0dXJuIGBlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci0keyBzdGF0dXMoIERhdGVUaW1lRW50aXR5ICkgfWA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSBkYXRlIHN0YXR1c1xuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0ZVRpbWVTdGF0dXNUZXh0TGFiZWwgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRsZXQgZGF0ZVN0YXR1cyA9ICcnO1xuXHRzd2l0Y2ggKCBzdGF0dXMoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0Y2FzZSBEQVRFVElNRV9TVEFUVVNfSUQuU09MRF9PVVQgOlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnc29sZCBvdXQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5FWFBJUkVEIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2V4cGlyZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5VUENPTUlORyA6XG5cdFx0XHRkYXRlU3RhdHVzID0gX18oICd1cGNvbWluZycsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELkFDVElWRSA6XG5cdFx0XHRkYXRlU3RhdHVzID0gX18oICdhY3RpdmUnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5UUkFTSEVEIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2FyY2hpdmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBEQVRFVElNRV9TVEFUVVNfSUQuQ0FOQ0VMTEVEIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2NhbmNlbGxlZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELlBPU1RQT05FRCA6XG5cdFx0XHRkYXRlU3RhdHVzID0gX18oICdwb3N0cG9uZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5JTkFDVElWRSA6XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2luYWN0aXZlJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGRhdGVTdGF0dXM7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgbWFwVmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGVuZHBvaW50cyB9IGZyb20gJy4vZW5kcG9pbnRzLmpzJztcblxuLyoqXG4gKiBSZWNlaXZlcyBhbiBvYmplY3QgbWFwIG9mIG1vZGVsTmFtZSB0byBlbmRwb2ludCBhbmQgbWFwcyB0aGF0IHRvIGEgZGVmYXVsdFxuICogbWFwIG9mIG1vZGVsTmFtZSB0byBlbXB0eSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHsgT2JqZWN0IH0gbW9kZWxOYW1lRW5kcG9pbnRzXG4gKiBAcmV0dXJuIHsgT2JqZWN0IH0gQW4gb2JqZWN0IG9mIHsgeyBtb2RlbE5hbWUgfSA6IHt9IH1cbiAqL1xuY29uc3QgbWFwVG9PYmplY3RWYWx1ZXMgPSAoIG1vZGVsTmFtZUVuZHBvaW50cyApID0+IHtcblx0cmV0dXJuIG1hcFZhbHVlcyggbW9kZWxOYW1lRW5kcG9pbnRzLFxuXHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH0sXG5cdCk7XG59O1xuXG5jb25zdCBnZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCA9IG1lbW9pemUoXG5cdCgpID0+IG1hcFRvT2JqZWN0VmFsdWVzKCBlbmRwb2ludHMgKVxuKTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgZGVmYXVsdCBzdGF0ZSB0byBiZSB1c2VkIGJ5IHN0b3JlcyBjb250YWluaW5nIGxpc3RzLlxuICpcbiAqIEB0eXBlIHsgT2JqZWN0IH1cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElTVFNfU1RBVEUgPSBtYXBUb09iamVjdFZhbHVlcyggZW5kcG9pbnRzICk7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIGRlZmF1bHQgc3RhdGUgdG8gYmUgdXNlZCBieSB0aGUgY29yZSBzdG9yZS5cbiAqXG4gKiBAdHlwZSB7e2VudGl0aWVzOiB7fSwgZW50aXR5SWRzOiB7fSwgZGlydHk6IHt9fX1cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09SRV9TVEFURSA9IHtcblx0ZW50aXRpZXM6IHtcblx0XHQuLi5nZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCgpLFxuXHR9LFxuXHRyZWxhdGlvbnM6IHt9LFxuXHRkaXJ0eToge1xuXHRcdHJlbGF0aW9uczoge1xuXHRcdFx0aW5kZXg6IHt9LFxuXHRcdFx0ZGVsZXRlOiB7fSxcblx0XHRcdGFkZDoge30sXG5cdFx0fSxcblx0XHR0cmFzaDoge30sXG5cdFx0ZGVsZXRlOiB7fSxcblx0fSxcbn07XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIGRlZmF1bHQgc3RhdGUgdG8gYmUgdXNlZCBieSB0aGUgc2NoZW1hIHN0b3JlLlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0NIRU1BX1NUQVRFID0ge1xuXHRzY2hlbWE6IHtcblx0XHQuLi5nZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCgpLFxuXHR9LFxuXHRmYWN0b3J5OiB7XG5cdFx0Li4uZ2V0RGVmYXVsdE1vZGVsRW50aXRpZXNPYmplY3QoKSxcblx0fSxcblx0cmVsYXRpb25FbmRwb2ludHM6IHtcblx0XHQuLi5nZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCgpLFxuXHR9LFxuXHRyZWxhdGlvblNjaGVtYToge30sXG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRhdGEgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGFzc2VydEVudGl0eUhhc0tleSB9IGZyb20gJy4vYXNzZXJ0aW9ucyc7XG5cbi8qKlxuICogQWxsIGF2YWlsYWJsZSBlbmRwb2ludHMgZXhwb3NlZCB2aWEgdGhlIGVlanMuZGF0YSBnbG9iYWwgZnJvbSB0aGUgc2VydmVyLlxuICpcbiAqIEB0eXBlIHt7fX1cbiAqL1xuZXhwb3J0IGNvbnN0IHtcblx0Y29sbGVjdGlvbl9lbmRwb2ludHM6IGVuZHBvaW50cyA9IHt9LFxuXHRiYXNlX3Jlc3Rfcm91dGU6IGJhc2VSZXN0Um91dGUsXG59ID0gZGF0YS5wYXRocztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGVuZHBvaW50IGZvciB0aGUgcHJvdmlkZWQgbW9kZWwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgV2hhdCBtb2RlbCB0byByZXRyaWV2ZSB0aGUgZW5kcG9pbnQgZm9yLlxuICogQHJldHVybiB7c3RyaW5nfSAgVGhlIGVuZHBvaW50IGZvciB0aGUgcHJvdmlkZWQgbW9kZWwuXG4gKiBAdGhyb3dzIHtFeGNlcHRpb259XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbmRwb2ludCA9ICggbW9kZWxOYW1lICkgPT4ge1xuXHRhc3NlcnRFbnRpdHlIYXNLZXkoIG1vZGVsTmFtZSwgZW5kcG9pbnRzICk7XG5cdHJldHVybiBlbmRwb2ludHNbIG1vZGVsTmFtZSBdO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBwcm92aWRlZCBxdWVyeVN0cmluZyB0byB0aGUgZW5kcG9pbnQgZm9yIHRoZSBwcm92aWRlZCBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgV2hhdCBtb2RlbCB0aGUgZmluYWwgc3RyaW5nIGlzIGZvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZyAgVGhlIHF1ZXJ5IGJlaW5nIGFwcGVuZGVkIHRvIHRoZSBlbmRwb2ludC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZpbmFsIGFzc2VtYmxlZCBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseVF1ZXJ5U3RyaW5nID0gKCBtb2RlbE5hbWUsIHF1ZXJ5U3RyaW5nID0gJycgKSA9PiB7XG5cdHJldHVybiBxdWVyeVN0cmluZyAhPT0gJycgP1xuXHRcdGdldEVuZHBvaW50KCBtb2RlbE5hbWUgKSArICc/JyArIHF1ZXJ5U3RyaW5nIDpcblx0XHRnZXRFbmRwb2ludCggbW9kZWxOYW1lICk7XG59O1xuXG4vKipcbiAqIFN0cmlwcyB0aGUgYmFzZV9yZXN0X3JvdXRlIChpLmUuIGh0dHBzOi8vbXl1cmwuY29tL3dwLWpzb24vKSBmcm9tIHRoZSBwcm92aWRlZFxuICogdXJsIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSB1cmwgd2l0aCB0aGUgYmFzZSByZXN0IHJvdXRlIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBzdHJpcEJhc2VSb3V0ZUZyb21VcmwgPSAoIHVybCApID0+IHtcblx0cmV0dXJuIHVybC5yZXBsYWNlKCBiYXNlUmVzdFJvdXRlLCAnJyApO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBJbnZhbGlkU2NoZW1hIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5pbXBvcnQgeyBpc1NjaGVtYSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtcblx0TW9uZXksXG5cdFNlcnZlckRhdGVUaW1lIGFzIERhdGVUaW1lLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRpc0RhdGVUaW1lRmllbGQsXG5cdGlzTW9uZXlGaWVsZCxcbn0gZnJvbSAnLi9ib29sZWFucyc7XG5pbXBvcnQge1xuXHRpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQsXG5cdHZhbGlkYXRlRW51bVR5cGUsXG5cdHZhbGlkYXRlVHlwZSxcblx0dmFsaWRhdGVUeXBlRm9yRmllbGQsXG59IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyB9IGZyb20gJy4vZXh0cmFjdG9ycyc7XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBwcm92aWRlZCBmaWVsZCB2YWx1ZSBpcyBhIGtub3duIHZhbHVlIG9iamVjdC5cbiAqXG4gKiBOb3RlOiB0aGlzIG9ubHkgYXNzZXJ0cyBrbm93biB2YWx1ZSBvYmplY3RzLCBpZiB0aGUgdmFsdWUgaXMgbm90IGRldGVjdGVkIGFzXG4gKiBhIGtub3duIHZhbHVlIG9iamVjdCBpdCBpcyBwYXNzZWQgYmFjayBhcyBpcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEB0aHJvd3MgSW52YWxpZERhdGVUaW1lXG4gKiBAdGhyb3dzIFR5cGVFcnJvclxuICovXG5leHBvcnQgY29uc3QgbWF5YmVBc3NlcnRWYWx1ZU9iamVjdCA9ICggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBzY2hlbWEgKSA9PiB7XG5cdGlmICggaXNEYXRlVGltZUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICkge1xuXHRcdERhdGVUaW1lLmFzc2VydElzRGF0ZVRpbWUoIGZpZWxkVmFsdWUgKTtcblx0fVxuXHRpZiAoIGlzTW9uZXlGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSApIHtcblx0XHRNb25leS5hc3NlcnRNb25leSggZmllbGRWYWx1ZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgcHJvdmlkZWQgb2JqZWN0IGlzIGEgdmFsaWQgbW9kZWwgc2NoZW1hIG9iamVjdC5cbiAqXG4gKiBDdXJyZW50bHksIGFuIG9iamVjdCBpcyBjb25zaWRlcmVkIGEgdmFsaWQgbW9kZWwgc2NoZW1hIGlmIGl0IGhhcyBhXG4gKiAncHJvcGVydGllcycgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHsqfSBzY2hlbWFcbiAqIEB0aHJvd3MgSW52YWxpZFNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0VmFsaWRTY2hlbWEgPSAoIHNjaGVtYSApID0+IHtcblx0aWYgKCAhIGlzU2NoZW1hKCBzY2hlbWEgKSApIHtcblx0XHR0aHJvdyBuZXcgSW52YWxpZFNjaGVtYShcblx0XHRcdCdUaGlzIGlzIGFuIGludmFsaWQgc2NoZW1hIGZvciBhIG1vZGVsLicsXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBBc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGZpZWxkIGV4aXN0cyBpbiB0aGUgcHJvdmlkZWQgc2NoZW1hIGFuZCB0aGUgc2hhcGUgZm9yXG4gKiB0aGUgc2NoZW1hIGVudHJ5IG9uIHRoYXQgZmllbGQgaXMgZXhwZWN0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAgVGhlIG1vZGVsIHRoZSBzY2hlbWEgYmVsb25ncyB0bywgdGhpcyBpcyB1c2VkIGZvclxuICogZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lICBUaGUgZmllbGQgYmVpbmcgY2hlY2tlZCBhZ2FpbnN0IHRoZSBzY2hlbWFcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgICAgIFRoZSBzY2hlbWEgZm9yIHRoZSBtb2RlbCB1c2VkIGZvciB2YWxpZGF0aW9uXG4gKiBAdGhyb3dzIEludmFsaWRTY2hlbWFcbiAqIEB0aHJvd3MgVHlwZUVycm9yXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRWYWxpZFNjaGVtYUZpZWxkUHJvcGVydGllcyA9IChcblx0bW9kZWxOYW1lLFxuXHRmaWVsZE5hbWUsXG5cdHNjaGVtYSxcbikgPT4ge1xuXHRpZiAoIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdHNwcmludGYoXG5cdFx0XHRcdCdUaGUgZ2l2ZW4gXCIlc1wiIGZpZWxkTmFtZSBkb2VzIG5vdCBoYXZlIGEgZGVmaW5lZCBzY2hlbWEgZm9yIHRoZSBtb2RlbCBcIiVzXCInLFxuXHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdG1vZGVsTmFtZSxcblx0XHRcdCksXG5cdFx0KTtcblx0fVxuXHRpZiAoIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgKSB7XG5cdFx0aWYgKCBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzICkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgSW52YWxpZFNjaGVtYShcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIHNjaGVtYSBmb3IgdGhlIGZpZWxkICVzIG9uIHRoZSBtb2RlbCAlcyBpcyBvZiB0eXBlIFwib2JqZWN0XCIgYnV0IGRvZXMgbm90IGhhdmUgYSBwcm9wZXJ0aWVzIHByb3BlcnR5LicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdG1vZGVsTmFtZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpZiAoIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3ICkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgSW52YWxpZFNjaGVtYShcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIHNjaGVtYSBmb3IgdGhlIGZpZWxkICVzIG9uIHRoZSBtb2RlbCAlcyBpcyBvZiB0eXBlIFwib2JqZWN0XCIgYnV0IGRvZXMgbm90IGhhdmUgYSByYXcgcHJvcGVydHkgaW4gaXRcXCdzIFwicHJvcGVydGllc1wiIHByb3BlcnR5LicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdG1vZGVsTmFtZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpZiAoIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LnR5cGUgKSApIHtcblx0XHRcdHRocm93IG5ldyBJbnZhbGlkU2NoZW1hKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgc2NoZW1hIGZvciB0aGUgZmllbGQgJXMgb24gdGhlIG1vZGVsICVzIGlzIG9mIHR5cGUgXCJvYmplY3RcIiBhbmQgaGFzIGEgcHJvcGVydGllcy5yYXcgcHJvcGVydHksIGhvd2V2ZXIgdGhlcmUgaXMgbm8gXCJ0eXBlXCIgZGVmaW5lZCBmb3IgdGhlIHJhdyBwcm9wZXJ0eS4nLFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRtb2RlbE5hbWVcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgdmFsdWUgcHJvdmlkZWQgZm9yIHRoZSBwcmVwYXJlZCBmaWVsZCBpcyB2YWxpZCBhY2NvcmRpbmcgdG9cbiAqIHRoZSBzY2hlbWEuXG4gKlxuICogUHJlcGFyZWQgZmllbGRzIGFyZTpcbiAqXG4gKiAtIGZpZWxkcyBoYXZpbmcgdmFsdWVzIHRoYXQgYXJlIHNldCBhcyBhIHZhbHVlIG9iamVjdCBhbmQgZXhwZWN0IGEgdmFsdWVcbiAqICAgb2JqZWN0IG9uIHVwZGF0ZXMvaW5zZXJ0cy5cbiAqIC0gZmllbGRzIHRoYXQgYXJlIHRoZSBlcXVpdmFsZW50IGByYXdgIHZhbHVlIHdoZW4gdGhlIGZpZWxkIGluIHRoZSBzY2hlbWEgaXNcbiAqICAgZGVmaW5lZCB0byBoYXZlIHJhdyBhbmQgcmVuZGVyZWQvcHJldHR5IHZhbHVlcy5cbiAqXG4gKiBOb3RlOiAgVGhpcyB2YWxpZGF0ZXMgYWdhaW5zdCBwcmVwYXJlZCBmaWVsZHMgd2hpY2ggbWVhbnMgdGhhdDpcbiAqXG4gKiAtIGlmIHRoZSBwcmVwYXJlZCBmaWVsZCBoYXMgYSB2YWx1ZSBvYmplY3QgYXMgaXRzIHZhbHVlLCB0aGVuIHRoYXQgdmFsdWVcbiAqICAgb2JqZWN0IGlzIHZhbGlkYXRlZCBiZWZvcmUgYW55IG90aGVyIHZhbGlkYXRpb24uXG4gKiAtIGlmIHRoZSBwcmVwYXJlZCBmaWVsZCByZXByZXNlbnRzIGFuIG9iamVjdCBpbiB0aGUgc2NoZW1hLCB0aGVuIGl0cyB2YWx1ZSBpc1xuICogICB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgYHJhd2AgdHlwZSBpbiB0aGUgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAdGhyb3dzIFR5cGVFcnJvclxuICogQHRocm93cyBJbnZhbGlkRGF0ZVRpbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkID0gKFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGluc3RhbmNlLFxuKSA9PiB7XG5cdGNvbnN0IHsgc2NoZW1hIH0gPSBpbnN0YW5jZTtcblx0bGV0IGlzVmFsaWQgPSBpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQoXG5cdFx0ZmllbGROYW1lLFxuXHRcdGZpZWxkVmFsdWUsXG5cdFx0c2NoZW1hLFxuXHQpO1xuXHRpZiAoICEgaXNWYWxpZCAmJiBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgPT09ICdvYmplY3QnICYmXG5cdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzXG5cdCkge1xuXHRcdGlzVmFsaWQgPSBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LmVudW0gP1xuXHRcdFx0dmFsaWRhdGVFbnVtVHlwZShcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LmVudW0sXG5cdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHQpIDpcblx0XHRcdHZhbGlkYXRlVHlwZShcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlLFxuXHRcdFx0XHRtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyhcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdFx0XHRzY2hlbWFcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRpZiAoICEgaXNWYWxpZCApIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcdHNwcmludGYoXG5cdFx0XHRcdFx0J1RoZSBnaXZlbiBcIiUxJHNcIiBmaWVsZCAgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEuICBJdFxcJ3MgYHJhd2AgcHJvcGVydHkgVmFsdWUgKCUyJHMpIGlzIG5vdCB0aGUgY29ycmVjdCBleHBlY3RlZCB0eXBlICglMyRzKS4nLFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcudHlwZSxcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdGlmICggISBpc1ZhbGlkICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIGZpZWxkXFwncyBWYWx1ZSAoJTIkcykgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEgdHlwZSAoJTMkcykuJyxcblx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkIGlzIHZhbGlkIGFjY29yZGluZyB0byB0aGVcbiAqIHNjaGVtYS5cbiAqXG4gKiBUaGlzIGlzIHVzZWQgb24gZW50aXR5IGNvbnN0cnVjdGlvbiBhbmQgZG9lcyBub3QgdmFsaWRhdGUgcHJlcGFyZWQgZmllbGRcbiAqIHZhbHVlcyAoc2VlIGFzc2VydCBhc3NlcnRWYWxpZFZhbHVlRm9yUHJlcGFyZWRGaWVsZCkuXG4gKlxuICogVGhpcyBtZXRob2QgYWxzbyBhc3NlcnRzIHRoYXQgdGhlIHNjaGVtYSBoYXMgdmFsaWQgc2NoZW1hIGZpZWxkIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEB0aHJvd3MgVHlwZUVycm9yXG4gKiBAdGhyb3dzIEludmFsaWRTY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydFZhbGlkRmllbGRBbmRWYWx1ZUFnYWluc3RTY2hlbWEgPSAoXG5cdG1vZGVsTmFtZSxcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRpbnN0YW5jZSxcbikgPT4ge1xuXHRjb25zdCBzY2hlbWEgPSBpbnN0YW5jZS5zY2hlbWE7XG5cdGNvbnN0IHZhbGlkYXRpb25UeXBlID0gdmFsaWRhdGVUeXBlRm9yRmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2UgKTtcblx0YXNzZXJ0VmFsaWRTY2hlbWFGaWVsZFByb3BlcnRpZXMoIG1vZGVsTmFtZSwgZmllbGROYW1lLCBzY2hlbWEgKTtcblx0bGV0IGlzVmFsaWQgPSBpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQoXG5cdFx0ZmllbGROYW1lLFxuXHRcdGZpZWxkVmFsdWUsXG5cdFx0c2NoZW1hLFxuXHRcdGZhbHNlLFxuXHQpO1xuXHQvLyBhY2NvdW50IGZvciBmaWVsZE5hbWUgZmllbGRWYWx1ZXMgdGhhdCBoYXZlIHByb3BlcnR5IHNjaGVtYS4gRm9yIE1vZGVsXG5cdC8vIEVudGl0aWVzLCBvbmx5IHRoZSBWQUxJREFURV9UWVBFIHByb3BlcnR5IGlzIGNhcmVkIGFib3V0LlxuXHRpZiAoIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgJiZcblx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNcblx0KSB7XG5cdFx0aWYgKCBpc1VuZGVmaW5lZCggZmllbGRWYWx1ZVsgdmFsaWRhdGlvblR5cGUgXSApICkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIHZhbHVlIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGRlZmluZWQgc2NoZW1hLiBJdCBtdXN0IGJlIGFuIG9iamVjdCBhbmQgaXQgbXVzdCBoYXZlIGEgYCUyJHNgIGtleS4nLFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHR2YWxpZGF0aW9uVHlwZSxcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlzVmFsaWQgPSBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNbIHZhbGlkYXRpb25UeXBlIF0uZW51bSA/XG5cdFx0XHR2YWxpZGF0ZUVudW1UeXBlKFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNbIHZhbGlkYXRpb25UeXBlIF0udHlwZSxcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy5lbnVtLFxuXHRcdFx0XHRmaWVsZFZhbHVlWyB2YWxpZGF0aW9uVHlwZSBdLFxuXHRcdFx0KSA6XG5cdFx0XHR2YWxpZGF0ZVR5cGUoXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllc1sgdmFsaWRhdGlvblR5cGUgXS50eXBlLFxuXHRcdFx0XHRmaWVsZFZhbHVlWyB2YWxpZGF0aW9uVHlwZSBdXG5cdFx0XHQpO1xuXHRcdGlmICggISBpc1ZhbGlkICkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIHZhbHVlIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGRlZmluZWQgc2NoZW1hLiAgSXRcXCdzIGAlMiRzYCBwcm9wZXJ0eSB2YWx1ZSAoJTMkcykgaXMgbm90IHRoZSBjb3JyZWN0IGV4cGVjdGVkIHR5cGUgKCU0JHMpLicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdHZhbGlkYXRpb25UeXBlLFxuXHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzWyB2YWxpZGF0aW9uVHlwZSBdLnR5cGUsXG5cdFx0XHRcdCksXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRpZiAoICEgaXNWYWxpZCApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0c3ByaW50Zihcblx0XHRcdFx0J1RoZSBnaXZlbiBcIiUxJHNcIiBmaWVsZFxcJ3MgdmFsdWUgKCUyJHMpIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGRlZmluZWQgc2NoZW1hIHR5cGUgKCUzJHMpLicsXG5cdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlLFxuXHRcdFx0KSxcblx0XHQpO1xuXHR9XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzQXJyYXksIHVwcGVyRmlyc3QsIGNhbWVsQ2FzZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdtZW1pemUnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgYXNzZXJ0VmFsaWRTY2hlbWEgfSBmcm9tICcuL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHtcblx0Y3JlYXRlR2V0dGVyLFxuXHRjcmVhdGVFbnRpdHlHZXR0ZXJzQW5kU2V0dGVycyxcblx0Y3JlYXRlUGVyc2lzdGluZ0dldHRlcnNBbmRTZXR0ZXJzLFxuXHRzZXRTYXZlU3RhdGUsXG59IGZyb20gJy4vY3JlYXRlJztcbmltcG9ydCB7XG5cdFNBVkVfU1RBVEUsXG5cdFBSSVZBVEVfUFJPUEVSVElFUyxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEJhc2VFbnRpdHkgaXMgdGhlIGJhc2ljIGNsYXNzIGZvciBhbGwgZW50aXRpZXMuICBjcmVhdGVFbnRpdHlGYWN0b3J5IHJldHVybnNcbiAqIGFuIGluc3RhbmNlIG9mIHRoaXMgYW5kIGFsbCB0aGUgZ2V0dGVycy9zZXR0ZXJzIGZvciBmaWVsZHMgZXRjIGFyZVxuICogZHluYW1pY2FsbHkgY3JlYXRlZCB2aWEgdGhlIGNvbnN0cnVjdG9yLlxuICovXG5jbGFzcyBCYXNlRW50aXR5IHtcblx0WyBQUklWQVRFX1BST1BFUlRJRVMuU0FWRV9TVEFURSBdID0gU0FWRV9TVEFURS5DTEVBTjtcblx0WyBQUklWQVRFX1BST1BFUlRJRVMuVkFMSURBVEVfVFlQRVMgXSA9IHt9O1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RvciBmb3IgQmFzZSBFbnRpdHlcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gZW50aXR5RmllbGRzQW5kVmFsdWVzXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcblx0ICogQHBhcmFtIHtBcnJheX1maWVsZFByZWZpeGVzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNOZXdcblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdG1vZGVsTmFtZSxcblx0XHRlbnRpdHlGaWVsZHNBbmRWYWx1ZXMsXG5cdFx0c2NoZW1hLFxuXHRcdGZpZWxkUHJlZml4ZXMgPSBbXSxcblx0XHRpc05ldyA9IGZhbHNlLFxuXHQpIHtcblx0XHRhc3NlcnRWYWxpZFNjaGVtYSggc2NoZW1hICk7XG5cdFx0ZmllbGRQcmVmaXhlcyA9IGlzQXJyYXkoIGZpZWxkUHJlZml4ZXMgKSA/IGZpZWxkUHJlZml4ZXMgOiBbXTtcblx0XHRjcmVhdGVHZXR0ZXIoIHRoaXMsICdmaWVsZFByZWZpeGVzJywgZmllbGRQcmVmaXhlcyApO1xuXHRcdGNyZWF0ZUdldHRlciggdGhpcywgJ3NjaGVtYScsIHNjaGVtYS5wcm9wZXJ0aWVzICk7XG5cdFx0c2V0U2F2ZVN0YXRlKFxuXHRcdFx0dGhpcyxcblx0XHRcdGlzTmV3ID8gU0FWRV9TVEFURS5ORVcgOiBTQVZFX1NUQVRFLkNMRUFOXG5cdFx0KTtcblx0XHRjcmVhdGVHZXR0ZXIoIHRoaXMsICdtb2RlbE5hbWUnLCBtb2RlbE5hbWUgKTtcblx0XHRjcmVhdGVHZXR0ZXIoIHRoaXMsICdvcmlnaW5hbEZpZWxkc0FuZFZhbHVlcycsIGVudGl0eUZpZWxkc0FuZFZhbHVlcyApO1xuXHRcdGNyZWF0ZUdldHRlcihcblx0XHRcdHRoaXMsXG5cdFx0XHQnZmllbGRzVG9QZXJzaXN0T25JbnNlcnQnLFxuXHRcdFx0bmV3IFNldCggT2JqZWN0LmtleXMoIGVudGl0eUZpZWxkc0FuZFZhbHVlcyApIClcblx0XHQpO1xuXHRcdGNyZWF0ZUVudGl0eUdldHRlcnNBbmRTZXR0ZXJzKCB0aGlzICk7XG5cdFx0Y3JlYXRlUGVyc2lzdGluZ0dldHRlcnNBbmRTZXR0ZXJzKCB0aGlzICk7XG5cdFx0T2JqZWN0LnNlYWwoIHRoaXMgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNhdmUgc3RhdGUgb24gdGhlIGVudGl0eS5cblx0ICpcblx0ICogU2F2ZSBzdGF0ZSBkZXNjcmliZXMgd2hldGhlciB0aGUgZW50aXR5IGlzOlxuXHQgKlxuXHQgKiAtIFNBVkVfU1RBVEUuTkVXOiBUaGUgZW50aXR5IGhhcyBuZXZlciBiZWVuIHBlcnNpc3RlZCB0byBzdG9yYWdlLlxuXHQgKiAtIFNBVkVfU1RBVEUuQ0xFQU46IFRoZSBlbnRpdHkgZXhpc3RzIGluIHN0b3JhZ2UgYW5kIGhhcyBub3QgYmVlbiBtdXRhdGVkLlxuXHQgKiAtIFNBVkVfU1RBVEUuRElSVFk6IFRoZSBlbnRpdHkgaXMgbXV0YXRlZCBhbmQgY2hhbmdlcyBoYXZlIG5vdCBiZWVuXG5cdCAqIHBlcnNpc3RlZCB0byBzdG9yYWdlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtTeW1ib2x9ICBSZXR1cm5zIHRoZSBjdXJyZW50IHNhdmUgc3RhdGUgZm9yIHRoZSBlbnRpdHkuXG5cdCAqL1xuXHRnZXQgc2F2ZVN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzWyBQUklWQVRFX1BST1BFUlRJRVMuU0FWRV9TVEFURSBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBpcyBTQVZFX1NUQVRFLk5FV1xuXHQgKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBTQVZFX1NUQVRFLk5FVyBpcyB0aGUgc2F2ZSBzdGF0ZS5cblx0ICovXG5cdGdldCBpc05ldygpIHtcblx0XHRyZXR1cm4gdGhpcy5zYXZlU3RhdGUgPT09IFNBVkVfU1RBVEUuTkVXO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBpcyBTQVZFX1NUQVRFLkRJUlRZXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIFNBVkVfU1RBVEUuRElSVFkgaXMgdGhlIHNhdmUgc3RhdGUuXG5cdCAqL1xuXHRnZXQgaXNEaXJ0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zYXZlU3RhdGUgPT09IFNBVkVfU1RBVEUuRElSVFk7XG5cdH1cblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgY3VycmVudCBzYXZlIHN0YXRlIGlzIFNBVkVfU1RBVEUuQ0xFQU5cblx0ICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgU0FWRV9TVEFURS5DTEVBTiBpcyB0aGUgc2F2ZSBzdGF0ZS5cblx0ICovXG5cdGdldCBpc0NsZWFuKCkge1xuXHRcdHJldHVybiB0aGlzLnNhdmVTdGF0ZSA9PT0gU0FWRV9TVEFURS5DTEVBTjtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBlbnRpdHkgaGFzIGFueSBwYXNzd29yZCBwcm90ZWN0ZWQgZmllbGRzLlxuXHQgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIGl0IGRvZXMsIGZhbHNlIG1lYW5zIGl0IGRvZXNuJ3QuXG5cdCAqL1xuXHRnZXQgaXNQYXNzd29yZFByb3RlY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5wcm90ZWN0ZWRGaWVsZHMubGVuZ3RoID4gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBnaXZlbiBmaWVsZE5hbWUgaXMgYSBwYXNzd29yZCBwcm90ZWN0ZWQgZmllbGQuXG5cdCAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6IGJvb2xlYW59ICBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZFxuXHQgKiB0byBjaGVjayBpZiB0aGUgZ2l2ZW4gZmllbGQgbmFtZSBpcyBhIHByb3RlY3RlZCBmaWVsZCBpbiB0aGlzIGVudGl0eS5cblx0ICovXG5cdGdldCBpc0ZpZWxkUGFzc3dvcmRQcm90ZWN0ZWQoKSB7XG5cdFx0cmV0dXJuICggZmllbGROYW1lICkgPT4gdGhpcy5wcm90ZWN0ZWRGaWVsZHMuaW5kZXhPZiggZmllbGROYW1lICkgPiAtMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVc2VkIHRvIGNsb25lIHRoZSBjdXJyZW50IGVudGl0eSBvYmplY3QuICBUaGlzIHJlc3VsdHMgaW4gYW4gaW5zdGFuY2Ugb2Zcblx0ICogQmFzZUVudGl0eSB0aGF0IGlzIGVxdWl2YWxlbnQgYXMgdGhpcyBjdXJyZW50IGluc3RhbmNlIChleGNlcHQgaXQgd2lsbFxuXHQgKiBoYXZlIGEgbmV3IGdlbmVyYXRlZCBpZCkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0Jhc2VFbnRpdHl9IEEgbmV3IGluc3RhbmNlIG9mIEJhc2VFbnRpdHlcblx0ICovXG5cdGdldCBjbG9uZSgpIHtcblx0XHRyZXR1cm4gKCBrZWVwSWQgPSBmYWxzZSApID0+IHtcblx0XHRcdGNvbnN0IGNyZWF0ZUZhY3RvcnkgPSBtZW1vaXplKCAoKSA9PiBjcmVhdGVFbnRpdHlGYWN0b3J5KFxuXHRcdFx0XHR0aGlzLm1vZGVsTmFtZSxcblx0XHRcdFx0eyAkc2NoZW1hOiB7fSwgcHJvcGVydGllczogdGhpcy5zY2hlbWEgfSxcblx0XHRcdFx0dGhpcy5maWVsZFByZWZpeGVzXG5cdFx0XHQpICk7XG5cdFx0XHRjb25zdCBmYWN0b3J5ID0gY3JlYXRlRmFjdG9yeSgpO1xuXHRcdFx0Y29uc3QgbmV3RW50aXR5ID0gZmFjdG9yeS5jcmVhdGVOZXcoIHRoaXMuZm9yQ2xvbmUgKTtcblx0XHRcdGlmICgga2VlcElkICkge1xuXHRcdFx0XHRuZXdFbnRpdHkuaWQgPSB0aGlzLmlkO1xuXHRcdFx0XHRzZXRTYXZlU3RhdGUoIG5ld0VudGl0eSwgdGhpcy5zYXZlU3RhdGUsIHRydWUgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBuZXdFbnRpdHk7XG5cdFx0fTtcblx0fVxuXG5cdHN0YXRpYyBuYW1lID0gJ0Jhc2VFbnRpdHknXG59XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGdpdmVzIGEgY2xhc3MgdGhlIHByb3ZpZGVkIG5hbWVcbiAqIChhbmQgb3B0aW9uYWxseSBleHRlbmRzIHRoZSBwcm92aWRlZCBvYmplY3QpLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRlbmRlZENsYXNzXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBmdW5jdGlvblxuICovXG5jb25zdCBuYW1lQ2xhc3MgPSAoIG5hbWUsIGV4dGVuZGVkQ2xhc3MgKSA9PiB7XG5cdHJldHVybiBjbGFzcyBleHRlbmRzIGV4dGVuZGVkQ2xhc3Mge1xuXHRcdHN0YXRpYyBnZXQgbmFtZSgpIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fTtcbn07XG5cbi8qKlxuICogQSBmYWN0b3J5IGZvciBlbnRpdHkgZmFjdG9yaWVzLlxuICpcbiAqIENhbGxpbmcgdGhpcyByZXR1cm5zIGFuIG9iamVjdCBvZiBmYWN0b3J5IGZ1bmN0aW9ucyB0aGF0IGluc3RhbnRpYXRlIGFuXG4gKiBpbnN0YW5jZSBvZiBhIG5hbWVkIEVudGl0eS4gIFRoZSBtb2RlbE5hbWUgaXMgdXNlZCBhcyB0aGUgbmFtZSBmb3IgdGhlIG5ld1xuICogZW50aXR5LlxuICpcbiAqIFR3byBtZXRob2RzIGFyZSBhdmFpbGFibGUgb24gdGhlIG9iamVjdCByZXR1cm5lZDogYGNyZWF0ZU5ld2AgYW5kXG4gKiBgZnJvbUV4aXN0aW5nYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lICBUaGUgbW9kZWwgZm9yIHRoZSBlbnRpdHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgICAgIFRoZSBzY2hlbWEgZm9yIHRoZSBtb2RlbC4gVGhpcyBpcyB0aGUgc2NoZW1hXG4gKiBwcm92aWRlZCBieSB0aGUgT1BUSU9OUyBlbmRwb2ludCBmb3IgdGhlIG1vZGVsLlxuICogQHBhcmFtIHtBcnJheX0gZmllbGRQcmVmaXhlcyBBbiBhcnJheSBvZiBmaWVsZCBwcmVmaXhlcyBmb3IgYmFzZSBmaWVsZHMgb25cbiAqIG9uIHRoZSBtb2RlbCAoZWcuIEV2ZW50IG1vZGVsIGhhcyBgWyBFVlQgXWAgcHJlZml4ZXMgb24gZmllbGRzLCBEYXRldGltZSBtb2RlbFxuICogaGFzIFsgYERUVGAsIGBEVFRfRVZUYCBdXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgZmFjdG9yeSBmb3IgaW5zdGFudGlhdGluZyBhbiBlbnRpdHkgaW5zdGFuY2UuXG4gKi9cbmNvbnN0IGNyZWF0ZUVudGl0eUZhY3RvcnkgPSAoIG1vZGVsTmFtZSwgc2NoZW1hLCBmaWVsZFByZWZpeGVzID0gW10gKSA9PiB7XG5cdGNvbnN0IEVudGl0eSA9IG5hbWVDbGFzcyhcblx0XHR1cHBlckZpcnN0KCBjYW1lbENhc2UoIG1vZGVsTmFtZSApICksXG5cdFx0QmFzZUVudGl0eVxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdC8qKlxuXHRcdCAqIEV4cG9zZXMgbW9kZWxOYW1lIHNvIGNsaWVudCBjb2RlIGNhbiBkZXJpdmUgd2hhdCBtb2RlbCB0aGlzIGZhY3Rvcnlcblx0XHQgKiBpcyBmb3IgZnJvbSBhbnkgZ2l2ZW4gZmFjdG9yeS5cblx0XHQgKiBAdHlwZSBzdHJpbmdcblx0XHQgKi9cblx0XHRtb2RlbE5hbWUsXG5cdFx0LyoqXG5cdFx0ICogVGhpcyBpcyB0aGUgY2xhc3MgZGVmaW5pdGlvbiBmb3IgdGhlIEVudGl0eS4gIFR5cGljYWxseSB0aGlzIGlzXG5cdFx0ICogcmV0cmlldmVkIGZvciB0aGUgYWJpbGl0eSB0byBkbyBpbnN0YW5jZW9mIGNoZWNrcy5cblx0XHQgKi9cblx0XHRjbGFzc0RlZjogRW50aXR5LFxuXHRcdC8qKlxuXHRcdCAqIFRoaXMgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBFbnRpdHkgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMgd2l0aCB0aGVcblx0XHQgKiBpbmRpY2F0aW9uIHRoaXMgaXMgYSBuZXcgbm9uLXBlcnNpc3RlZCBlbnRpdHkuICBUaGlzIG1lYW5zOlxuXHRcdCAqXG5cdFx0ICogLSBBbGwgZmllbGQgdmFsdWVzIGFyZSBwb3B1bGF0ZWQgYW5kIGFueSBub3QgcHJvdmlkZWQgd2lsbCBiZVxuXHRcdCAqICAgcG9wdWxhdGVkIHdpdGggZGVmYXVsdCB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgc2NoZW1hLlxuXHRcdCAqIC0gR2VuZXJhdGVzIHRlbXBvcmFyeSB1bmlxdWUgaWRzIGZvciB0aGUgcHJpbWFyeSBrZXkgZmllbGRzIG9uIHRoZVxuXHRcdCAqICAgZW50aXR5ICh1c2luZyBjdWlkKS5cblx0XHQgKiAtIFNldHMgdGhlIGBpc05ld2AgZmxhZyB0byB0cnVlIGZvciB0aGUgZW50aXR5IHNvIGNsaWVudCBjb2RlIGlzIGFibGVcblx0XHQgKiAgIHRvIGRpc2NvdmVyIHdoaWNoIGVudGl0aWVzIGhhdmUgbmV2ZXIgYmVlbiBwZXJzaXN0ZWQuXG5cdFx0ICogLSBUaGlzIGZhY3RvcnkgbWV0aG9kIGV4cGVjdHMgZmllbGRzIGFuZCB2YWx1ZXMgdG8gYmUgXCJwcmVwYXJlZFwiLlxuXHRcdCAqICAgV2hhdCB0aGF0IG1lYW5zIGlzIHRoYXQgZm9yIGFueSBmaWVsZHMgdGhhdCB0aGUgc2NoZW1hIGRlc2NyaWJlZCBhc1xuXHRcdCAqICAgaGF2aW5nIGEgYHJhd2AgcHJvcGVydHkgKGkuZS4geyBFVlRfZGVzYzogeyByYXc6ICdzb21ldGhpbmcnIH0gfSlcblx0XHQgKiAgIHRoZSB2YWx1ZSBzaG91bGQgYmUgb2YgdGhlIGNvcnJlY3QgdHlwZSBmb3IgdGhhdCByYXcgcHJvcGVydHkgYW5kLlxuXHRcdCAqICAgVGhpcyBhbHNvIG1lYW5zIGlzIHRoYXQgZm9yIGFueSBmaWVsZHMgdGhlIHNjaGVtYSBkZXNjcmliZXMgYXMgYVxuXHRcdCAqICAgZGF0ZS10aW1lIChmb3JtYXQpIG9yIG1vbmV5IChmb3JtYXQpIGZpZWxkLCB0aGUgdmFsdWUgaXMgZXhwZWN0ZWRcblx0XHQgKiAgIHRvIGJlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9iamVjdC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZHNBbmRWYWx1ZXNcblx0XHQgKiBAcmV0dXJuIHtFbnRpdHl9IGFuIGluc3RhbmNlIG9mIEVudGl0eVxuXHRcdCAqL1xuXHRcdGNyZWF0ZU5ldzogKCBmaWVsZHNBbmRWYWx1ZXMgKSA9PiBuZXcgRW50aXR5KFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZmllbGRzQW5kVmFsdWVzLFxuXHRcdFx0c2NoZW1hLFxuXHRcdFx0ZmllbGRQcmVmaXhlcyxcblx0XHRcdHRydWVcblx0XHQpLFxuXHRcdC8qKlxuXHRcdCAqIFRoaXMgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBFbnRpdHkgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMgd2l0aCB0aGVcblx0XHQgKiBpbmRpY2F0aW9uIHRoaXMgcmVwcmVzZW50cyB0aGUgZW50aXR5IGFzIGlzIGluIHRoZSBkYi4gIFRoaXMgbWVhbnM6XG5cdFx0ICpcblx0XHQgKiAtIEFsbCBmaWVsZCB2YWx1ZXMgYXJlIE5PVCBwb3B1bGF0ZWQgaWYgbWlzc2luZyB2YWx1ZXMuICBUaGlzIGlzXG5cdFx0ICogICBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgY29udGV4dHMgbGlrZSB1bmF1dGhvcml6ZWQgdmlld3Mgd2hlcmVcblx0XHQgKiAgIG9ubHkgcGFydGlhbCBlbnRpdGllcyBhcmUgcmV0dXJuZWQgaW4gUkVTVCByZXNwb25zZXMuXG5cdFx0ICogLSBpc05ldyBmbGFnIGlzIHNldCB0byBmYWxzZSAoYW5kIG5ldmVyIGNoYW5nZXMgZm9yIHRoaXMgZW50aXR5KVxuXHRcdCAqIC0gVGhlIGluY29taW5nIHZhbHVlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIGV4YWN0IHNoYXBlIGFzXG5cdFx0ICogICBkZXNjcmliZWQgYnkgdGhlIHNjaGVtYSBmb3IgdGhlIGVudGl0eSBtb2RlbC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZHNBbmRWYWx1ZXNcblx0XHQgKiBAcmV0dXJuIHtFbnRpdHl9IGFuIGluc3RhbmNlIG9mIEVudGl0eVxuXHRcdCAqL1xuXHRcdGZyb21FeGlzdGluZzogKCBmaWVsZHNBbmRWYWx1ZXMgKSA9PiBuZXcgRW50aXR5KFxuXHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0ZmllbGRzQW5kVmFsdWVzLFxuXHRcdFx0c2NoZW1hLFxuXHRcdFx0ZmllbGRQcmVmaXhlc1xuXHRcdCksXG5cdH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRW50aXR5RmFjdG9yeTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0LCBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGhhcyBhIFwicmF3XCIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QgYW5kIGhhcyBhIGByYXdgIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgaGFzUmF3UHJvcGVydHkgPSAoIHZhbHVlICkgPT4gaXNQbGFpbk9iamVjdCggdmFsdWUgKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCB2YWx1ZS5yYXcgKTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgdmFsdWUgaGFzIGEgXCJwcmV0dHlcIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGEgYHByZXR0eWAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNQcmV0dHlQcm9wZXJ0eSA9ICggdmFsdWUgKSA9PiBpc1BsYWluT2JqZWN0KCB2YWx1ZSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHZhbHVlLnByZXR0eSApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgYSBcInJlbmRlcmVkXCIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QgYW5kIGhhcyBhIGByZW5kZXJlZGAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNSZW5kZXJlZFByb3BlcnR5ID0gKCB2YWx1ZSApID0+IGlzUGxhaW5PYmplY3QoIHZhbHVlICkgJiZcblx0ISBpc1VuZGVmaW5lZCggdmFsdWUucmVuZGVyZWQgKTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgdmFsdWUgaGFzIGEgXCJmb3JtYXRcIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGEgYGZvcm1hdGAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNGb3JtYXRQcm9wZXJ0eSA9ICggdmFsdWUgKSA9PiBpc1BsYWluT2JqZWN0KCB2YWx1ZSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHZhbHVlLmZvcm1hdCApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgYSBcImVudW1cIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGFuIGVudW1cbiAqIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgaGFzRW51bVByb3BlcnR5ID0gKCB2YWx1ZSApID0+IGlzUGxhaW5PYmplY3QoIHZhbHVlICkgJiZcblx0ISBpc1VuZGVmaW5lZCggdmFsdWUuZW51bSApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBhIFwidmFsdWUgb2JqZWN0XCIgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHZhbHVlIG9iamVjdCBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVmFsdWVPYmplY3RGaWVsZCA9ICggZmllbGQsIHNjaGVtYSApID0+IHtcblx0cmV0dXJuIGlzRGF0ZVRpbWVGaWVsZCggZmllbGQsIHNjaGVtYSApIHx8IGlzTW9uZXlGaWVsZCggZmllbGQsIHNjaGVtYSApO1xufTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgaXMgYSBkYXRlLXRpbWUgZmllbGQgYWNjb3JkaW5nIHRvIHRoZVxuICogcHJvdmlkZWQgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZFxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyBpdCBpcyBhIGRhdGUtdGltZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGF0ZVRpbWVGaWVsZCA9ICggZmllbGQsIHNjaGVtYSApID0+XG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGQgXSApICYmXG5cdGhhc0Zvcm1hdFByb3BlcnR5KCBzY2hlbWFbIGZpZWxkIF0gKSAmJlxuXHRzY2hlbWFbIGZpZWxkIF0uZm9ybWF0ID09PSAnZGF0ZS10aW1lJztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgaXMgYSBVVEMgZGF0ZS10aW1lIGZpZWxkLlxuICpcbiAqIElmIHNjaGVtYSBpcyBwcm92aWRlZCwgdGhpcyBhbHNvIGNvbnNpZGVycyB3aGV0aGVyIHRoaXMgaXMgYSBkYXRlLXRpbWUgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGVUaW1lRmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hIFtvcHRpb25hbF1cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgbWVhbnMgdGhpcyBpcyBhIFVUQyBmaWVsZC4gIElmIHNjaGVtYSBpcyBwcm92aWRlZCBpdFxuICogbWVhbnMgdGhpcyBpcyBhbHNvIGEgZGF0ZS10aW1lIGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNVVENEYXRlVGltZUZpZWxkID0gKCBkYXRlVGltZUZpZWxkTmFtZSwgc2NoZW1hID0gbnVsbCApID0+IHtcblx0cmV0dXJuIHNjaGVtYSAhPT0gbnVsbCA/XG5cdFx0aXNEYXRlVGltZUZpZWxkKCBkYXRlVGltZUZpZWxkTmFtZSwgc2NoZW1hICkgJiZcblx0XHRcdGRhdGVUaW1lRmllbGROYW1lLmluZGV4T2YoICdfZ210JyApID4gMCA6XG5cdFx0ZGF0ZVRpbWVGaWVsZE5hbWUuaW5kZXhPZiggJ19nbXQnICkgPiAwO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZpZWxkIHJlcHJlc2VudHMgYSBwcmltYXJ5IGtleSBmaWVsZCB1c2luZyB0aGVcbiAqIHByb3ZpZGVkIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBpdCBpcyBhIHByaW1hcnkga2V5IGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNQcmltYXJ5S2V5RmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJpbWFyeV9rZXkgKTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZpZWxkIHJlcHJlc2VudHMgYSByZWFkb25seSBmaWVsZCB1c2luZyB0aGVcbiAqIHByb3ZpZGVkIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBpdCBpcyBhIHJlYWRvbmx5IGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNSZWFkT25seSA9ICggZmllbGROYW1lLCBzY2hlbWEgKSA9PlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkgJiZcblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXS5yZWFkb25seSApICYmXG5cdHNjaGVtYVsgZmllbGROYW1lIF0ucmVhZG9ubHk7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZpZWxkIGlzIGEgXCJlbnRpdHlcIiBmaWVsZCB1c2luZyB0aGUgcHJvdmlkZWRcbiAqIHNjaGVtYS5cbiAqXG4gKiBBbiBcImVudGl0eVwiIGZpZWxkIGlzIGFueSBmaWVsZCB0aGF0IHNhdGlzZmllcyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogLSBmaWVsZCBleGlzdHMgaW4gdGhlIHNjaGVtYVxuICogLSBpdCBpcyBub3QgcmVhZG9ubHkgb3IgaXMgYSBwcmltYXJ5IGtleSBmaWVsZC5cbiAqIC0gaXQgaXMgbm90IGEgdXRjIGZpZWxkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBpcyBhbiBlbnRpdHkgZmllbGRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRW50aXR5RmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdCggISBpc1JlYWRPbmx5KCBmaWVsZE5hbWUsIHNjaGVtYSApIHx8XG5cdFx0aXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hIClcblx0KSAmJlxuXHQhIGlzVVRDRGF0ZVRpbWVGaWVsZCggZmllbGROYW1lICkgJiZcblx0ZmllbGROYW1lICE9PSAnX3Byb3RlY3RlZCc7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpZWxkIHJlcHJlc2VudHMgYSB2YWx1ZSBvZiBtb25leSBmcm9tIHRoZSBwcm92aWRlZFxuICogc2NoZW1hLlxuICpcbiAqIEEgZmllbGQgaXMgYSBtb25leSBmaWVsZCBpZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHNhdGlzZmllZDpcbiAqXG4gKiAtIEl0IGV4aXN0cyBpbiB0aGUgc2NoZW1hXG4gKiAtIEl0IGhhcyBhIHByZXR0eSBwcm9wZXJ0eVxuICogLSBUaGUgcHJldHR5IHByb3BlcnR5IHZhbHVlIGhhcyBhIGZvcm1hdCBwcm9wZXJ0eS5cbiAqIC0gVGhlIGZvcm1hdCBwcm9wZXJ0eSBpcyBlcXVhbCB0byAnbW9uZXknXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBpdCBpcyBhIG1vbmV5IGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNNb25leUZpZWxkID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+XG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0gKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMgKSAmJlxuXHRoYXNQcmV0dHlQcm9wZXJ0eSggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzICkgJiZcblx0aGFzRm9ybWF0UHJvcGVydHkoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5wcmV0dHkgKSAmJlxuXHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucHJldHR5LmZvcm1hdCA9PT0gJ21vbmV5JztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZmllbGQgaXMgYW4gZW51bSB0eXBlIGZpZWxkIGFzIGRlZmluZWQgaW4gdGhlIHByb3ZpZGVkXG4gKiBzY2hlbWEuXG4gKlxuICogTm90ZTogdGhpcyBvbmx5IGV2YWx1YXRlcyB0aGUgdG9wLWxldmVsIGZvciB0aGUgZmllbGQgc2NoZW1hLiAgSWYgdGhlIGZpZWxkXG4gKiBpbiB0aGUgc2NoZW1hIGlzIG9mIHR5cGUgJ29iamVjdCcgYW5kIG9uZSBvZiB0aGUgb2JqZWN0IHByb3BlcnRpZXMgaXMgb2YgdHlwZVxuICogJ2VudW0nIHRoaXMgd2lsbCBub3QgY29uc2lkZXIgaXQgYW4gXCJlbnVtXCIgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgaWYgdGhlIGZpZWxkIGlzIGFuIGVudW0gdHlwZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRW51bUZpZWxkID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+XG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0gKSAmJlxuXHRoYXNFbnVtUHJvcGVydHkoIHNjaGVtYVsgZmllbGROYW1lIF0gKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLmVudW0ubGVuZ3RoICkgJiZcblx0c2NoZW1hWyBmaWVsZE5hbWUgXS5lbnVtLmxlbmd0aCA+IDA7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgYXBwbHlGaWx0ZXJzIH0gZnJvbSAnQHdvcmRwcmVzcy9ob29rcyc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogQ29uc3RhbnRzIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgXCJzYXZlIHN0YXRlXCIgZm9yIGFuIGVudGl0eS5cbiAqXG4gKiBAdHlwZSB7e0NMRUFOOiBTeW1ib2wsIE5FVzogU3ltYm9sLCBESVJUWTogU3ltYm9sfX1cbiAqL1xuZXhwb3J0IGNvbnN0IFNBVkVfU1RBVEUgPSB7XG5cdENMRUFOOiBTeW1ib2woICdFbnRpdHkgaXMgcGVyc2lzdGVkLicgKSxcblx0TkVXOiBTeW1ib2woICdFbnRpdHkgaXMgbmV3LicgKSxcblx0RElSVFk6IFN5bWJvbCggJ0V4aXN0aW5nIGVudGl0eSBoYXMgY2hhbmdlcyBhbmQgbmVlZHMgcGVyc2lzdGVkLicgKSxcbn07XG5cbi8qKlxuICogVmFsaWRhdGlvbiB0eXBlcyBhcmUgZm9yIHNjaGVtYSdzIHRoYXQgaGF2ZSB2YWx1ZSB2YXJpYXRpb25zLlxuICogQHR5cGUge3tSQVc6IHN0cmluZywgUkVOREVSRUQ6IHN0cmluZywgUFJFVFRZOiBzdHJpbmd9fVxuICovXG5leHBvcnQgY29uc3QgVkFMSURBVEVfVFlQRSA9IHtcblx0UkFXOiAncmF3Jyxcblx0UkVOREVSRUQ6ICdyZW5kZXJlZCcsXG5cdFBSRVRUWTogJ3ByZXR0eScsXG59O1xuXG4vKipcbiAqIFByaXZhdGUgcHJvcGVydGllcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIEJhc2UgRW50aXR5IENsYXNzXG4gKiBAdHlwZSB7e3NhdmVTdGF0ZTogYm9vbGVhbn19XG4gKi9cbmV4cG9ydCBjb25zdCBQUklWQVRFX1BST1BFUlRJRVMgPSB7XG5cdFNBVkVfU1RBVEU6IFN5bWJvbCggJ2Jhc2VFbnRpdHlQcml2YXRlUHJvcGVydGllc1NhdmVTdGF0ZScgKSxcblx0VkFMSURBVEVfVFlQRVM6IFN5bWJvbCggJ2Jhc2VFbnRpdHlQcml2YXRlUHJvcGVydGllc1ZhbGlkYXRlVHlwZXMnICksXG59O1xuXG4vKipcbiAqIEhhcmRjb2RlZCBsaXN0IG9mIG1vZGVsIHByZWZpeGVzIGZvciBmaWVsZHMgb24gbW9kZWxzLlxuXG4gKiBBIG1vZGVsIHByZWZpeCBpcyBzb21ldGhpbmcgdGhhdCBcIm5hbWVzcGFjZXNcIiBhIGZpZWxkIG9uIGEgbW9kZWwuICBGb3JcbiAqIGV4YW1wbGUsIGlmIHRoZSBmaWVsZCBpcyBcIkVWVF9JRFwiLCB0aGVuIHRoZSBwcmVmaXggaXMgXCJFVlRcIjsgaWYgdGhlIGZpZWxkIGlzXG4gKiBcIkRUVF9FVlRfc3RhcnRcIiwgdGhlbiB0aGUgcHJlZml4ZXMgYXJlIFwiRFRUXCIsIGFuZCBcIkRUVF9FVlRcIi5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7T2JqZWN0fSBBIGZpbHRlcmVkIG9iamVjdCBpbmRleGVkIGJ5IG1vZGVsIG5hbWUgYW5kIHRoZSB2YWx1ZXMgYXJlXG4gKiBhbiBhcnJheSBvZiBtb2RlbCBwcmVmaXhlcyBmb3IgdGhhdCBtb2RlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX1BSRUZJWEVTID0gKCBtb2RlbE5hbWUgKSA9PiB7XG5cdGNvbnN0IHByZWZpeE1hcCA9IGFwcGx5RmlsdGVycyhcblx0XHQnRkhFRV9fRU5USVRZX0ZBQ1RPUllfX0NPTlNUQU5UU19fTU9ERUxfUFJFRklYRVMnLFxuXHRcdHtcblx0XHRcdGFuc3dlcjogWyAnQU5TJyBdLFxuXHRcdFx0YXR0ZW5kZWU6IFsgJ0FUVCcgXSxcblx0XHRcdGNoYW5nZV9sb2c6IFsgJ0xPRycgXSxcblx0XHRcdGNoZWNraW46IFsgJ0NISycgXSxcblx0XHRcdGNvdW50cnk6IFsgJ0NOVCcgXSxcblx0XHRcdGN1cnJlbmN5OiBbICdDVVInIF0sXG5cdFx0XHRjdXJyZW5jeV9wYXltZW50X21ldGhvZDogWyAnQ1BNJyBdLFxuXHRcdFx0ZGF0ZXRpbWU6IFsgJ0RUVCcsICdEVFRfRVZUJyBdLFxuXHRcdFx0ZGF0ZXRpbWVfdGlja2V0OiBbICdEVEsnIF0sXG5cdFx0XHRldmVudDogWyAnRVZUJyBdLFxuXHRcdFx0ZXZlbnRfbWVzc2FnZV90ZW1wbGF0ZTogWyAnRU1UJyBdLFxuXHRcdFx0ZXZlbnRfcXVlc3Rpb25fZ3JvdXA6IFsgJ0VRRycgXSxcblx0XHRcdGV2ZW50X3ZlbnVlOiBbICdFVlYnIF0sXG5cdFx0XHRleHRyYV9qb2luOiBbICdFWEonIF0sXG5cdFx0XHRleHRyYV9tZXRhOiBbICdFWE0nIF0sXG5cdFx0XHRsaW5lX2l0ZW06IFsgJ0xJTicgXSxcblx0XHRcdG1lc3NhZ2U6IFsgJ01TRycgXSxcblx0XHRcdG1lc3NhZ2VfdGVtcGxhdGU6IFsgJ01UUCcgXSxcblx0XHRcdG1lc3NhZ2VfdGVtcGxhdGVfZ3JvdXA6IFsgJ0dSUCcsICdNVFAnIF0sXG5cdFx0XHRwYXltZW50OiBbICdQQVknIF0sXG5cdFx0XHRwYXltZW50X21ldGhvZDogWyAnUE1EJyBdLFxuXHRcdFx0cG9zdF9tZXRhOiBbICdtZXRhJyBdLFxuXHRcdFx0cHJpY2U6IFsgJ1BSQycgXSxcblx0XHRcdHByaWNlX3R5cGU6IFsgJ1BSVCcgXSxcblx0XHRcdHF1ZXN0aW9uOiBbICdRU1QnIF0sXG5cdFx0XHRxdWVzdGlvbl9ncm91cDogWyAnUVNHJyBdLFxuXHRcdFx0cXVlc3Rpb25fZ3JvdXBfcXVlc3Rpb246IFsgJ1FHUScgXSxcblx0XHRcdHF1ZXN0aW9uX29wdGlvbjogWyAnUVNPJyBdLFxuXHRcdFx0cmVjdXJyZW5jZTogWyAnUkNSJyBdLFxuXHRcdFx0cmVnaXN0cmF0aW9uOiBbICdSRUcnIF0sXG5cdFx0XHRyZWdpc3RyYXRpb25fcGF5bWVudDogWyAnUlBZJyBdLFxuXHRcdFx0c3RhdGU6IFsgJ1NUQScgXSxcblx0XHRcdHN0YXR1czogWyAnU1RTJyBdLFxuXHRcdFx0dGVybTogWyAndGVybScgXSxcblx0XHRcdHRlcm1fcmVsYXRpb25zaGlwOiBbXSxcblx0XHRcdHRlcm1fdGF4b25vbXk6IFsgJ3Rlcm1fdGF4b25vbXknIF0sXG5cdFx0XHR0aWNrZXQ6IFsgJ1RLVCcgXSxcblx0XHRcdHRpY2tldF9wcmljZTogWyAnVEtQJyBdLFxuXHRcdFx0dGlja2V0X3RlbXBsYXRlOiBbICdUVE0nIF0sXG5cdFx0XHR0cmFuc2FjdGlvbjogWyAnVFhOJyBdLFxuXHRcdFx0dmVudWU6IFsgJ1ZOVScgXSxcblx0XHRcdHdwX3VzZXI6IFsgJ3VzZXInIF0sXG5cdFx0fSApO1xuXHRyZXR1cm4gISBpc1VuZGVmaW5lZCggcHJlZml4TWFwWyBtb2RlbE5hbWUgXSApID9cblx0XHRwcmVmaXhNYXBbIG1vZGVsTmFtZSBdIDpcblx0XHRbXTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Y2FtZWxDYXNlLFxuXHR1cHBlckZpcnN0LFxuXHRmb3JFYWNoLFxuXHRpc1VuZGVmaW5lZCxcblx0aXNBcnJheSxcblx0a2V5cyxcblx0c29ydEJ5LFxufSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGN1aWQgZnJvbSAnY3VpZCc7XG5pbXBvcnQgeyBJbnZhbGlkQXJndW1lbnQgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGFzc2VydFZhbGlkRmllbGRBbmRWYWx1ZUFnYWluc3RTY2hlbWEsXG5cdGFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkLFxufSBmcm9tICcuL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHtcblx0ZGVyaXZlUmVuZGVyZWRWYWx1ZSxcblx0ZGVyaXZlUHJlcGFyZWRWYWx1ZUZvckZpZWxkLFxuXHRnZXRSZWxhdGlvbk5hbWVGcm9tTGluayxcblx0Z2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvckNsb25pbmcsXG5cdGdldEJhc2VGaWVsZHNBbmRWYWx1ZXNGb3JQZXJzaXN0aW5nLFxuXHRnZXRQcmltYXJ5S2V5RmllbGRzRnJvbVNjaGVtYSxcblx0Z2V0RW50aXR5RmllbGRzRnJvbVNjaGVtYSxcblx0Z2V0RGVmYXVsdFZhbHVlRm9yRmllbGQsXG5cdGRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkLFxufSBmcm9tICcuL2V4dHJhY3RvcnMnO1xuaW1wb3J0IHtcblx0aXNFbnRpdHlGaWVsZCxcblx0aXNQcmltYXJ5S2V5RmllbGQsXG59IGZyb20gJy4vYm9vbGVhbnMnO1xuaW1wb3J0IHsgUFJJVkFURV9QUk9QRVJUSUVTLCBTQVZFX1NUQVRFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKiooXG4gKiBBIGdlbmVyaWMgZ2V0dGVyIGNyZWF0b3IgZm9yIGEgcHJvdmlkZWQgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lICBUaGUgbmFtZSBvZiB0aGUgYWNjZXNzb3IuXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIHVzZWQgdG8gcGFzcyB0aHJvdWdoIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlXG4gKiBPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUdldHRlciA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSwgb3B0cyA9IHt9ICkgPT4ge1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGluc3RhbmNlLCBmaWVsZE5hbWUsIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRWYWx1ZTtcblx0XHR9LFxuXHRcdC4uLm9wdHMsXG5cdH0gKTtcbn07XG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIGEgZ2V0dGVyIHRoYXQgY2FsbHMgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIHdoZW4gaW52b2tlZC5cbiAqXG4gKiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgdGhlIGBpbnN0YW5jZWAgYXJndW1lbnQgcGFzc2VkIHRocm91Z2hcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oT2JqZWN0KX0gY2FsbEJhY2tcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVDYWxsYmFja0dldHRlciA9IChcblx0aW5zdGFuY2UsXG5cdHByb3BlcnR5TmFtZSxcblx0Y2FsbEJhY2ssXG5cdG9wdHMgPSB7fVxuKSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggaW5zdGFuY2UsIHByb3BlcnR5TmFtZSwge1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiBjYWxsQmFjayggaW5zdGFuY2UgKTtcblx0XHR9LFxuXHRcdC4uLm9wdHMsXG5cdH0gKTtcbn07XG5cbi8qKlxuICogQSBnZW5lcmljIGdldHRlciBhbmQgc2V0dGVyIGNyZWF0b3IgZm9yIGEgcHJvdmlkZWQgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gIGluaXRpYWxGaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCwgcGFzcyB0aHJvdWdoIG9wdGlvbnMgdXNlZCBieVxuICogT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVHZXR0ZXJBbmRTZXR0ZXIgPSAoXG5cdGluc3RhbmNlLFxuXHRmaWVsZE5hbWUsXG5cdGluaXRpYWxGaWVsZFZhbHVlLFxuXHRvcHRzID0ge30sXG4pID0+IHtcblx0bGV0IHByb3BlcnR5VmFsdWUgPSBpbml0aWFsRmllbGRWYWx1ZTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgZmllbGROYW1lLCB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWU7XG5cdFx0fSxcblx0XHRzZXQoIHJlY2VpdmVkVmFsdWUgKSB7XG5cdFx0XHRjb25zdCBpc1ByaW1hcnlGaWVsZCA9IGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGluc3RhbmNlLnNjaGVtYSApO1xuXHRcdFx0aWYgKCAhIGluc3RhbmNlLmlzTmV3ICYmIGlzUHJpbWFyeUZpZWxkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhc3NlcnRWYWxpZFZhbHVlRm9yUHJlcGFyZWRGaWVsZChcblx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRyZWNlaXZlZFZhbHVlLFxuXHRcdFx0XHRpbnN0YW5jZVxuXHRcdFx0KTtcblx0XHRcdGlmICggISBpc1ByaW1hcnlGaWVsZCApIHtcblx0XHRcdFx0c2V0U2F2ZVN0YXRlKCBpbnN0YW5jZSwgU0FWRV9TVEFURS5ESVJUWSApO1xuXHRcdFx0XHRzZXRGaWVsZFRvUGVyc2lzdCggaW5zdGFuY2UsIGZpZWxkTmFtZSApO1xuXHRcdFx0fVxuXHRcdFx0cHJvcGVydHlWYWx1ZSA9IHJlY2VpdmVkVmFsdWU7XG5cdFx0fSxcblx0XHQuLi5vcHRzLFxuXHR9ICk7XG59O1xuXG4vKipcbiAqIEEgZ2V0dGVyIGFuZCBzZXR0ZXIgY3JlYXRvciBmb3IgYW4gZmllbGQgYWxpYXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxGaWVsZE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbGlhc0ZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyID0gKFxuXHRpbnN0YW5jZSxcblx0b3JpZ2luYWxGaWVsZE5hbWUsXG5cdGFsaWFzRmllbGROYW1lLFxuXHRvcHRzID0ge30sXG4pID0+IHtcblx0aWYgKCBvcmlnaW5hbEZpZWxkTmFtZSAhPT0gYWxpYXNGaWVsZE5hbWUgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgYWxpYXNGaWVsZE5hbWUsIHtcblx0XHRcdGdldCgpIHtcblx0XHRcdFx0cmV0dXJuIGluc3RhbmNlWyBvcmlnaW5hbEZpZWxkTmFtZSBdO1xuXHRcdFx0fSxcblx0XHRcdHNldCggcmVjZWl2ZWRWYWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuIGluc3RhbmNlWyBvcmlnaW5hbEZpZWxkTmFtZSBdID0gcmVjZWl2ZWRWYWx1ZTtcblx0XHRcdH0sXG5cdFx0XHQuLi5vcHRzLFxuXHRcdH0gKTtcblx0fVxufTtcblxuLyoqXG4gKiBBIGdldHRlciBjcmVhdG9yIGZvciBhIGZpZWxkIGFsaWFzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpbmFsRmllbGROYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpYXNGaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBbGlhc0dldHRlciA9IChcblx0aW5zdGFuY2UsXG5cdG9yaWdpbmFsRmllbGROYW1lLFxuXHRhbGlhc0ZpZWxkTmFtZSxcblx0b3B0cyA9IHt9LFxuKSA9PiB7XG5cdGlmICggb3JpZ2luYWxGaWVsZE5hbWUgIT09IGFsaWFzRmllbGROYW1lICkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggaW5zdGFuY2UsIGFsaWFzRmllbGROYW1lLCB7XG5cdFx0XHRnZXQoKSB7XG5cdFx0XHRcdHJldHVybiBpbnN0YW5jZVsgb3JpZ2luYWxGaWVsZE5hbWUgXTtcblx0XHRcdH0sXG5cdFx0XHQuLi5vcHRzLFxuXHRcdH0gKTtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZmx1ZW50IHNldHRlciBvbiB0aGUgcHJvdmlkZWQgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBmaWVsZCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgIE9wdGlvbnMgZm9yIE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRmx1ZW50U2V0dGVyID0gKCBpbnN0YW5jZSwgZmllbGROYW1lLCBvcHRzID0ge30gKSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggaW5zdGFuY2UsICdzZXQnICsgdXBwZXJGaXJzdCggZmllbGROYW1lICksIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gKCByZWNlaXZlZFZhbHVlICkgPT4ge1xuXHRcdFx0XHRpbnN0YW5jZVsgZmllbGROYW1lIF0gPSByZWNlaXZlZFZhbHVlO1xuXHRcdFx0XHRyZXR1cm4gaW5zdGFuY2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0Li4ub3B0cyxcblx0fSApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGluaXRpYWwgZ2V0dGVycyBhbmQgc2V0dGVycyBmb3IgZW50aXRpZXMgb24gdGhlIHByb3ZpZGVkIGVudGl0eVxuICogaW5zdGFuY2UgdXNpbmcgdGhlIGdpdmVuIGRhdGEuXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIGtleXMgb24gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVFbnRpdHlHZXR0ZXJzQW5kU2V0dGVycyA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdGNvbnN0IHByaW1hcnlLZXlzID0gW107XG5cdGZvckVhY2goXG5cdFx0aW5zdGFuY2Uub3JpZ2luYWxGaWVsZHNBbmRWYWx1ZXMsXG5cdFx0KCBmaWVsZFZhbHVlLCBmaWVsZE5hbWUgKSA9PiB7XG5cdFx0XHRjb25zdCBpc1ByaW1hcnlLZXkgPSBpc1ByaW1hcnlLZXlGaWVsZCggZmllbGROYW1lLCBpbnN0YW5jZS5zY2hlbWEgKTtcblx0XHRcdHNldFZhbGlkYXRlVHlwZUZvckZpZWxkKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlICk7XG5cdFx0XHRpZiAoIGlzRW50aXR5RmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2Uuc2NoZW1hICkgKSB7XG5cdFx0XHRcdGlmICggaW5zdGFuY2UuaXNOZXcgKSB7XG5cdFx0XHRcdFx0YXNzZXJ0VmFsaWRWYWx1ZUZvclByZXBhcmVkRmllbGQoXG5cdFx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFzc2VydFZhbGlkRmllbGRBbmRWYWx1ZUFnYWluc3RTY2hlbWEoXG5cdFx0XHRcdFx0XHRpbnN0YW5jZS5tb2RlbE5hbWUsXG5cdFx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNldEluaXRpYWxFbnRpdHlGaWVsZHNBbmRWYWx1ZXMoXG5cdFx0XHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0aXNQcmltYXJ5S2V5XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGZpZWxkTmFtZSA9PT0gJ19jYWxjdWxhdGVkX2ZpZWxkcycgKSB7XG5cdFx0XHRcdHNldENhbGN1bGF0ZWRGaWVsZEFuZFZhbHVlcyggaW5zdGFuY2UsIGZpZWxkVmFsdWUgKTtcblx0XHRcdH1cblx0XHRcdGlmICggZmllbGROYW1lID09PSAnX3Byb3RlY3RlZCcgKSB7XG5cdFx0XHRcdHBvcHVsYXRlUHJvdGVjdGVkRmllbGRzUHJvcGVydHkoIGluc3RhbmNlLCBmaWVsZFZhbHVlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGZpZWxkTmFtZSA9PT0gJ2xpbmsnICkge1xuXHRcdFx0XHRjcmVhdGVHZXR0ZXIoIGluc3RhbmNlLCAnbGluaycsIGZpZWxkVmFsdWUgKTtcblx0XHRcdH1cblx0XHRcdGlmICggZmllbGROYW1lID09PSAnX2xpbmtzJyApIHtcblx0XHRcdFx0c2V0UmVzb3VyY2VzKCBpbnN0YW5jZSwgZmllbGRWYWx1ZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhIGluc3RhbmNlLmlzTmV3ICYmIGlzUHJpbWFyeUtleSApIHtcblx0XHRcdFx0cHJpbWFyeUtleXMucHVzaCggZmllbGROYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXHRpZiAoICEgaW5zdGFuY2UuaXNOZXcgJiYgcHJpbWFyeUtleXMubGVuZ3RoICkge1xuXHRcdGNyZWF0ZVByaW1hcnlLZXlGaWVsZEdldHRlcnMoIGluc3RhbmNlLCBwcmltYXJ5S2V5cyApO1xuXHR9XG5cblx0cG9wdWxhdGVQcmltYXJ5S2V5cyggaW5zdGFuY2UgKTtcblx0cG9wdWxhdGVNaXNzaW5nRmllbGRzKCBpbnN0YW5jZSApO1xufTtcblxuLyoqXG4gKiBQb3B1bGF0ZXMgdGhlIGBwcm90ZWN0ZWRGaWVsZHNgIHByb3BlcnR5IG9uIHRoZSBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3RlY3RlZEZpZWxkc1xuICovXG5jb25zdCBwb3B1bGF0ZVByb3RlY3RlZEZpZWxkc1Byb3BlcnR5ID0gKCBpbnN0YW5jZSwgcHJvdGVjdGVkRmllbGRzICkgPT4ge1xuXHQvLyBnZXQgYW55IGNhbGN1bGF0ZWQgcHJvdGVjdGVkIGZpZWxkcy5cblx0Y29uc3QgY2FsY3VsYXRlZEZpZWxkcyA9IGluc3RhbmNlXG5cdFx0Lm9yaWdpbmFsRmllbGRzQW5kVmFsdWVzXG5cdFx0Ll9jYWxjdWxhdGVkX2ZpZWxkcyB8fCB7fTtcblx0aWYgKFxuXHRcdGNhbGN1bGF0ZWRGaWVsZHMuX3Byb3RlY3RlZCAmJlxuXHRcdGlzQXJyYXkoIGNhbGN1bGF0ZWRGaWVsZHMuX3Byb3RlY3RlZCApXG5cdCkge1xuXHRcdHByb3RlY3RlZEZpZWxkcyA9IFtcblx0XHRcdC4uLnByb3RlY3RlZEZpZWxkcyxcblx0XHRcdC4uLmNhbGN1bGF0ZWRGaWVsZHMuX3Byb3RlY3RlZCxcblx0XHRdO1xuXHR9XG5cdGNyZWF0ZUdldHRlciggaW5zdGFuY2UsICdwcm90ZWN0ZWRGaWVsZHMnLCBwcm90ZWN0ZWRGaWVsZHMgKTtcbn07XG5cbi8qKlxuICogVGhpcyBwb3B1bGF0ZXMgcHJpbWFyeSBrZXkgZmllbGRzLlxuICogTm90ZSB0aGF0IGl0IGFsc28gb3ZlcnJpZGVzIGFueSBwcmltYXJ5IGtleSB2YWx1ZXMvcHJvcGVydGllcyB0aGF0IGFyZVxuICogYWxyZWFkeSBzZXQgaW4gdGhlIGVudGl0eSBzbyBpcyBvbmx5IHByb2Nlc3NlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBuZXcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKi9cbmNvbnN0IHBvcHVsYXRlUHJpbWFyeUtleXMgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRpZiAoICEgaW5zdGFuY2UuaXNOZXcgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IHByaW1hcnlLZXlzID0gZ2V0UHJpbWFyeUtleUZpZWxkc0Zyb21TY2hlbWEoIGluc3RhbmNlICk7XG5cdGZvckVhY2goIHByaW1hcnlLZXlzLCAoXG5cdFx0c2NoZW1hUHJvcGVydGllcyxcblx0XHRzY2hlbWFGaWVsZFxuXHQpID0+IHtcblx0XHQvLyBhbHdheXMgZGVsZXRlIGFuZCBvdmVycmlkZSB3aGF0IGlzIGV4aXN0aW5nLlxuXHRcdGlmICggaW5zdGFuY2VbIHNjaGVtYUZpZWxkIF0gKSB7XG5cdFx0XHRkZWxldGUgaW5zdGFuY2VbIHNjaGVtYUZpZWxkIF07XG5cdFx0fVxuXHRcdGNyZWF0ZUdldHRlckFuZFNldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0c2NoZW1hRmllbGQsXG5cdFx0XHRjdWlkKCksXG5cdFx0XHR7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9XG5cdFx0KTtcblx0XHRjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlckZvckZpZWxkKCBpbnN0YW5jZSwgc2NoZW1hRmllbGQgKTtcblx0fSApO1xuXHRjcmVhdGVQcmltYXJ5S2V5RmllbGRHZXR0ZXJzKFxuXHRcdGluc3RhbmNlLFxuXHRcdGtleXMoIHByaW1hcnlLZXlzIClcblx0KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgdmFsaWRhdGUgdHlwZSBmb3IgYSBmaWVsZCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKi9cbmNvbnN0IHNldFZhbGlkYXRlVHlwZUZvckZpZWxkID0gKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlICkgPT4ge1xuXHRpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlZBTElEQVRFX1RZUEVTIF1bIGZpZWxkTmFtZSBdID1cblx0XHRkZXJpdmVWYWxpZGF0ZVR5cGVGb3JGaWVsZCggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBpbnN0YW5jZS5zY2hlbWEgKTtcbn07XG5cbi8qKlxuICogIFBvcHVsYXRlcyBtaXNzaW5nIGZpZWxkcyBhbmQgdmFsdWVzIHVzaW5nIGRlZmF1bHRzIHByb3ZpZGVkIGJ5IHNjaGVtYS4gIElmXG4gKiAgc2NoZW1hIGRvZXNuJ3QgcHJvdmlkZSBhIGRlZmF1bHQgdGhlbiB0aGlzIHdpbGwgcG9wdWxhdGUgdGhlIGZpZWxkIHdpdGggYVxuICogIGRlZmF1bHQgdmFsdWUgdGhhdCBtYXRjaGVzIHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICovXG5jb25zdCBwb3B1bGF0ZU1pc3NpbmdGaWVsZHMgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRpZiAoIHR5cGVvZiBpbnN0YW5jZS5wcm90ZWN0ZWRGaWVsZHMgPT09ICd1bmRlZmluZWQnICkge1xuXHRcdHBvcHVsYXRlUHJvdGVjdGVkRmllbGRzUHJvcGVydHkoIGluc3RhbmNlLCBbXSApO1xuXHR9XG5cdGlmICggISBpbnN0YW5jZS5pc05ldyApIHtcblx0XHRyZXR1cm47XG5cdH1cblx0Zm9yRWFjaChcblx0XHRnZXRFbnRpdHlGaWVsZHNGcm9tU2NoZW1hKCBpbnN0YW5jZSApLFxuXHRcdCggc2NoZW1hUHJvcGVydGllcywgZmllbGROYW1lICkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0eXBlb2YgaW5zdGFuY2VbIGZpZWxkTmFtZSBdID09PSAndW5kZWZpbmVkJyAmJlxuXHRcdFx0XHQhIGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGluc3RhbmNlLnNjaGVtYSApXG5cdFx0XHQpIHtcblx0XHRcdFx0c2V0SW5pdGlhbEVudGl0eUZpZWxkc0FuZFZhbHVlcyhcblx0XHRcdFx0XHRpbnN0YW5jZSxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiBlbnRpdHkgZmllbGRzIGFuZCB2YWx1ZXMgZnJvbSB0aGlzIGVudGl0eSBpbnN0YW5jZVxuICogZm9yIHVzZSBpbiBjbG9uaW5nIHRoZSBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtCYXNlRW50aXR5fSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gUGxhaW4gb2JqZWN0IG9mIGFsbCBmaWVsZDp2YWx1ZSBwYWlycy5cbiAqL1xuY29uc3QgZm9yQ2xvbmUgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRyZXR1cm4gZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvckNsb25pbmcoIGluc3RhbmNlICk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwbGFpbiBvYmplY3Qgb2YgdGhlIGVudGl0eSBmaWVsZHMgYW5kIHZhbHVlcyBmcm9tIHRoaXMgZW50aXR5XG4gKiBpbnN0YW5jZSBwcmVwYXJlZCBmb3IgdXNlIGluIGFuIHVwZGF0ZSByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7T2JqZWN0fSBQbGFpbiBvYmplY3Qgb2YgZmllbGQ6dmFsdWUgcGFpcnMuXG4gKi9cbmNvbnN0IGZvclVwZGF0ZSA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdHJldHVybiBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yUGVyc2lzdGluZyggaW5zdGFuY2UgKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiB0aGUgZW50aXR5IGZpZWxkcyBhbmQgdmFsdWVzIGZyb20gdGhpcyBlbnRpdHlcbiAqIGluc3RhbmNlIHByZXBhcmVkIGZvciB1c2UgaW4gYW4gaW5zZXJ0IHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IFBsYWluIG9iamVjdCBvZiBmaWVsZDp2YWx1ZSBwYWlycy5cbiAqL1xuY29uc3QgZm9ySW5zZXJ0ID0gKCBpbnN0YW5jZSApID0+IHtcblx0Y29uc3QgZW50aXR5VmFsdWVzID0gZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmcoXG5cdFx0aW5zdGFuY2UsXG5cdFx0dHJ1ZVxuXHQpO1xuXHRpbnN0YW5jZS5wcmltYXJ5S2V5cy5mb3JFYWNoKCAoIHByaW1hcnlLZXkgKSA9PiB7XG5cdFx0ZW50aXR5VmFsdWVzWyBwcmltYXJ5S2V5IF0gPSBpbnN0YW5jZVsgcHJpbWFyeUtleSBdO1xuXHR9ICk7XG5cdHJldHVybiBlbnRpdHlWYWx1ZXM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwbGFpbiBvYmplY3Qgb2YgdGhlIGVudGl0eSBmaWVsZHMgYW5kIHZhbHVlcyBmcm9tIHRoaXMgZW50aXR5XG4gKiBpbnN0YW5jZSBwcmVwYXJlZCBmb3IgdXNlIGluIGVpdGhlciBhbiBpbnNlcnQgb3IgdXBkYXRlIHJlcXVlc3QuICBUaGUgdHlwZVxuICogaXMgYXV0b21hdGljYWxseSBkZXJpdmVkIGZyb20gdGhlIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGVudGl0eSBpcyBcIm5ld1wiIG9yXG4gKiBub3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IFBsYWluIG9iamVjdCBvZiBmaWVsZDp2YWx1ZSBwYWlycy5cbiAqL1xuY29uc3QgZm9yUGVyc2lzdCA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdGlmICggaW5zdGFuY2UuaXNOZXcgKSB7XG5cdFx0cmV0dXJuIGZvckluc2VydCggaW5zdGFuY2UgKTtcblx0fVxuXHRyZXR1cm4gZm9yVXBkYXRlKCBpbnN0YW5jZSApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGdldHRlcnMgZm9yIHJldHJpZXZpbmcgdGhlIGZpZWxkcyBhbmQgdmFsdWVzIG9mIHRoZSBlbnRpdHkgaW5zdGFuY2VcbiAqIGZvciBpbnNlcnQgb3IgdXBkYXRlIHJlcXVlc3RzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUGVyc2lzdGluZ0dldHRlcnNBbmRTZXR0ZXJzID0gKCBpbnN0YW5jZSApID0+IHtcblx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoIGluc3RhbmNlLCAnZm9yVXBkYXRlJywgZm9yVXBkYXRlICk7XG5cdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKCBpbnN0YW5jZSwgJ2Zvckluc2VydCcsIGZvckluc2VydCApO1xuXHRjcmVhdGVDYWxsYmFja0dldHRlciggaW5zdGFuY2UsICdmb3JQZXJzaXN0JywgZm9yUGVyc2lzdCApO1xuXHRjcmVhdGVDYWxsYmFja0dldHRlciggaW5zdGFuY2UsICdmb3JDbG9uZScsIGZvckNsb25lICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgaW5pdGlhbCBlbnRpdHkgZmllbGQgYWNjZXNzb3JzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJpbWFyeUtleVxuICovXG5jb25zdCBzZXRJbml0aWFsRW50aXR5RmllbGRzQW5kVmFsdWVzID0gKFxuXHRpbnN0YW5jZSxcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRpc1ByaW1hcnlLZXkgPSBmYWxzZSxcbikgPT4ge1xuXHRpZiAoIGlzVW5kZWZpbmVkKCBmaWVsZFZhbHVlICkgKSB7XG5cdFx0ZmllbGRWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZUZvckZpZWxkKCBmaWVsZE5hbWUsIGluc3RhbmNlLnNjaGVtYSApO1xuXHRcdHNldFZhbGlkYXRlVHlwZUZvckZpZWxkKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlICk7XG5cdH1cblx0Y3JlYXRlUmF3RW50aXR5R2V0dGVyc1NldHRlcnMoXG5cdFx0aW5zdGFuY2UsXG5cdFx0ZmllbGROYW1lLFxuXHRcdGRlcml2ZVByZXBhcmVkVmFsdWVGb3JGaWVsZCggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBpbnN0YW5jZSApLFxuXHRcdGlzUHJpbWFyeUtleVxuXHQpO1xuXHRpZiAoICEgaXNQcmltYXJ5S2V5ICkge1xuXHRcdGNyZWF0ZVJlbmRlcmVkR2V0dGVycyhcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0ZGVyaXZlUmVuZGVyZWRWYWx1ZSggZmllbGRWYWx1ZSApXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIHJhdyBlbnRpdHkgZ2V0dGVycyBhbmQgc2V0dGVycy4gIFRoZXNlIGFyZSB0aGUgcHJvcGVydGllcyBvZiBhblxuICogZW50aXR5IHRoYXQgaGF2ZSB0aGUgdmFsdWVzIHVzZWQgZm9yIG5vdCBvbmx5IGdldHRpbmcgYnV0IGFsc28gc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtib29sZWFufSBpc1ByaW1hcnlLZXkgc2V0IHRvIHRydWUgaWYgZmllbGQgaXMgdGhlIG1vZGVsJ3MgcHJpbWFyeSBrZXlcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVJhd0VudGl0eUdldHRlcnNTZXR0ZXJzID0gKFxuXHRpbnN0YW5jZSxcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRpc1ByaW1hcnlLZXkgPSBmYWxzZSxcbikgPT4ge1xuXHRjb25zdCBvcHRzID0geyBlbnVtZXJhYmxlOiB0cnVlIH07XG5cdC8vIHByaW1hcnkga2V5IGlzIGltbXV0YWJsZVxuXHRpZiAoIGlzUHJpbWFyeUtleSApIHtcblx0XHRjcmVhdGVHZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRvcHRzXG5cdFx0KTtcblx0XHRjcmVhdGVBbGlhc0dldHRlckZvckZpZWxkKCBpbnN0YW5jZSwgZmllbGROYW1lICk7XG5cdH0gZWxzZSB7XG5cdFx0Y3JlYXRlR2V0dGVyQW5kU2V0dGVyKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0b3B0c1xuXHRcdCk7XG5cdFx0Y3JlYXRlRmx1ZW50U2V0dGVyKCBpbnN0YW5jZSwgZmllbGROYW1lICk7XG5cdFx0Y3JlYXRlQWxpYXNHZXR0ZXJBbmRTZXR0ZXJGb3JGaWVsZCggaW5zdGFuY2UsIGZpZWxkTmFtZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgXCJhbGlhc1wiIGdldHRlciBmb3IgdGhlIGdpdmVuIGZpZWxkIG5hbWUgb24gdGhlIGVudGl0eSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQWxpYXNHZXR0ZXJGb3JGaWVsZCA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSApID0+IHtcblx0Y3JlYXRlQWxpYXNlc0Zvck1ldGhvZCggaW5zdGFuY2UsIGZpZWxkTmFtZSwgY3JlYXRlQWxpYXNHZXR0ZXIgKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBcImFsaWFzXCIgZ2V0dGVycyBhbmQgc2V0dGVycyBmb3IgdGhlIGdpdmVuIGZpZWxkIG9uIHRoZSBlbnRpdHlcbiAqIGluc3RhbmNlLlxuICpcbiAqIEV4YW1wbGU6IERhdGV0aW1lIGVudGl0aWVzIGhhdmUgYSBgRFRUX0VWVF9zdGFydGAgZmllbGQuICBPbiB0aGUgZW50aXR5XG4gKiBpbnN0YW5jZSwgeW91IHdpbGwgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHZhbHVlIG9mIHRoYXQgZmllbGQgdmlhOlxuICogLSBkYXRldGltZS5EVFRfRVZUX3N0YXJ0XG4gKiAtIGRhdGV0aW1lLmR0dEV2dFN0YXJ0XG4gKiAtIGRhdGV0aW1lLmV2dFN0YXJ0XG4gKiAtIGRhdGV0aW1lLnN0YXJ0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlckZvckZpZWxkID0gKCBpbnN0YW5jZSwgZmllbGROYW1lICkgPT4ge1xuXHRjcmVhdGVBbGlhc2VzRm9yTWV0aG9kKCBpbnN0YW5jZSwgZmllbGROYW1lLCBjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlciApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIEFsaWFzZXMgdXNpbmcgdGhlIHByb3ZpZGVkIG1ldGhvZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kXG4gKi9cbmNvbnN0IGNyZWF0ZUFsaWFzZXNGb3JNZXRob2QgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUsIG1ldGhvZCApID0+IHtcblx0Ly8gY2FtZWxDYXNlIGdldHRlciAob3Igc2V0dGVyKSBmb3IgZnVsbCBmaWVsZCBuYW1lIChlZy4gRVZUX2Rlc2MgPT4gZXZ0RGVzYylcblx0bWV0aG9kKCBpbnN0YW5jZSwgZmllbGROYW1lLCBjYW1lbENhc2UoIGZpZWxkTmFtZSApICk7XG5cdC8vIHN0cmlwIGZpZWxkIHByZWZpeGVzIGFuZCBjYW1lbENhc2UgKGlmIHRoZXJlIGFyZSBmaWVsZCBwcmVmaXhlcyBmb3IgdGhlXG5cdC8vIGVudGl0eS4gKGVnLiBFVlRfZGVzYyA9PiBkZXNjKTtcblx0aWYgKCBpbnN0YW5jZS5maWVsZFByZWZpeGVzICkge1xuXHRcdGxldCBuZXdGaWVsZE5hbWUgPSAnJztcblx0XHQvLyBZZXMsIGl0cyBpbnRlbmRlZCB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBwcmVmaXhlcywgdGhpcyBjb3VsZFxuXHRcdC8vIGVuZCB1cCBjcmVhdGluZyBtdWx0aXBsZSBhbGlhc2VkIGdldHRlcnMgKG9yIHNldHRlcnMpXG5cdFx0Ly8gKGVnIERhdGV0aW1lOiBEVFRfRVZUX3N0YXJ0IHdvdWxkIGVuZCB1cCB3aXRoIGBldnRTdGFydGAgYW5kIGBzdGFydGBcblx0XHQvLyBhcyBnZXR0ZXIgYWNjZXNzb3JzKS5cblx0XHRpbnN0YW5jZS5maWVsZFByZWZpeGVzLmZvckVhY2goICggZmllbGRQcmVmaXggKSA9PiB7XG5cdFx0XHRuZXdGaWVsZE5hbWUgPSBmaWVsZE5hbWUucmVwbGFjZSggZmllbGRQcmVmaXggKyAnXycsICcnICk7XG5cdFx0XHRpZiAoIG5ld0ZpZWxkTmFtZSAhPT0gZmllbGROYW1lICkge1xuXHRcdFx0XHRtZXRob2QoXG5cdFx0XHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdGNhbWVsQ2FzZSggbmV3RmllbGROYW1lIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGNhbGxiYWNrIHRoYXQgaXMgdXNlZCBpbiB0aGUgYGdldFJlbmRlcmVkYCBmaWVsZCBnZXR0ZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6ICp9ICBBIGNhbGxiYWNrLlxuICovXG5jb25zdCBnZXRSZW5kZXJlZENhbGxiYWNrID0gKCBpbnN0YW5jZSApID0+ICggcmVxdWVzdGVkRmllbGROYW1lICkgPT5cblx0aW5zdGFuY2VbIHJlcXVlc3RlZEZpZWxkTmFtZSArICdSZW5kZXJlZCcgXTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZmllbGROYW1lIHN0cmlwcGVkIG9mIGFsbCBwb3NzaWJsZSBwcmVmaXhlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHByZWZpeCBmcmVlIGZpZWxkTmFtZS5cbiAqL1xuY29uc3QgcmVtb3ZlUHJlZml4ZXNGcm9tRmllbGQgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUgKSA9PiB7XG5cdGNvbnN0IHByZWZpeGVzVG9SZW1vdmUgPSBzb3J0QnkoXG5cdFx0aW5zdGFuY2UuZmllbGRQcmVmaXhlcyxcblx0XHQoIHByZWZpeCApID0+IHByZWZpeC5sZW5ndGggKiAtMVxuXHQpO1xuXHRsZXQgbmV3RmllbGROYW1lID0gZmllbGROYW1lO1xuXHRmb3JFYWNoKCBwcmVmaXhlc1RvUmVtb3ZlLCAoIHByZWZpeCApID0+IHtcblx0XHRuZXdGaWVsZE5hbWUgPSBmaWVsZE5hbWUucmVwbGFjZSggcHJlZml4LCAnJyApO1xuXHRcdGlmICggbmV3RmllbGROYW1lICE9PSBmaWVsZE5hbWUgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9ICk7XG5cdHJldHVybiBuZXdGaWVsZE5hbWU7XG59O1xuXG4vKipcbiAqIFRoaXMgY3JlYXRlcyB0aGUgZ2V0dGVycyBmb3IgdGhlIHJlbmRlcmVkIHByb3BlcnR5IG9mIG1vZGVsIGZpZWxkcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gIGZpZWxkVmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlbmRlcmVkR2V0dGVycyA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSApID0+IHtcblx0Y3JlYXRlR2V0dGVyKFxuXHRcdGluc3RhbmNlLFxuXHRcdGNhbWVsQ2FzZSggcmVtb3ZlUHJlZml4ZXNGcm9tRmllbGQoIGluc3RhbmNlLCBmaWVsZE5hbWUgKSApICtcblx0XHQnUmVuZGVyZWQnLFxuXHRcdGZpZWxkVmFsdWVcblx0KTtcblx0aWYgKCBpc1VuZGVmaW5lZCggaW5zdGFuY2UuZ2V0UmVuZGVyZWQgKSApIHtcblx0XHRjcmVhdGVDYWxsYmFja0dldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0J2dldFJlbmRlcmVkJyxcblx0XHRcdGdldFJlbmRlcmVkQ2FsbGJhY2ssXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgdGhlIGBoYXNNdWx0aXBsZVByaW1hcnlLZXlzYCBnZXR0ZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbigpOiBib29sZWFufSBUaGUgY2FsbGJhY2sgZm9yIGhhc011bHRpcGxlUHJpbWFyeUtleXMgZ2V0dGVyXG4gKi9cbmNvbnN0IGhhc011bHRpcGxlUHJpbWFyeUtleXNDYWxsYmFjayA9ICggaW5zdGFuY2UgKSA9PlxuXHRpbnN0YW5jZS5wcmltYXJ5S2V5cy5sZW5ndGggPiAxO1xuXG4vKipcbiAqIENyZWF0ZXMgZ2V0dGVycyBmb3IgcHJpbWFyeSBrZXkgcmVsYXRlZCBkYXRhLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtBcnJheX0gcHJpbWFyeUtleXNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVByaW1hcnlLZXlGaWVsZEdldHRlcnMgPSAoIGluc3RhbmNlLCBwcmltYXJ5S2V5cyApID0+IHtcblx0Y29uc3Qgb3B0cyA9IHsgY29uZmlndXJhYmxlOiB0cnVlIH07XG5cdGlmICggaXNBcnJheSggcHJpbWFyeUtleXMgKSApIHtcblx0XHRjcmVhdGVHZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdCdwcmltYXJ5S2V5Jyxcblx0XHRcdHByaW1hcnlLZXlzWyAwIF0sXG5cdFx0XHRvcHRzXG5cdFx0KTtcblx0XHRjcmVhdGVHZXR0ZXJBbmRTZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdCdwcmltYXJ5S2V5cycsXG5cdFx0XHRwcmltYXJ5S2V5cyxcblx0XHRcdG9wdHNcblx0XHQpO1xuXHRcdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHQnaGFzTXVsdGlwbGVQcmltYXJ5S2V5cycsXG5cdFx0XHRoYXNNdWx0aXBsZVByaW1hcnlLZXlzQ2FsbGJhY2ssXG5cdFx0XHRvcHRzXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6IGJvb2xlYW59IFJldHVybnMgYSBjYWxsYmFjayBmb3IgdGhlXG4gKiBoYXNDYWxjdWxhdGVkRmllbGQgZ2V0dGVyXG4gKi9cbmNvbnN0IGhhc0NhbGN1bGF0ZWRGaWVsZENhbGxiYWNrID0gKCBpbnN0YW5jZSApID0+XG5cdCggZmllbGROYW1lVG9DaGVjayApID0+ICEgaXNVbmRlZmluZWQoIGluc3RhbmNlWyBmaWVsZE5hbWVUb0NoZWNrIF0gKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBnZXR0ZXJzIGZvciBhbGwgdGhlIGNhbGN1bGF0ZWQgZmllbGRzIGFuZCB2YWx1ZSBvbiB0aGUgZW50aXR5LlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fWZpZWxkc0FuZFZhbHVlc1xuICovXG5leHBvcnQgY29uc3Qgc2V0Q2FsY3VsYXRlZEZpZWxkQW5kVmFsdWVzID0gKCBpbnN0YW5jZSwgZmllbGRzQW5kVmFsdWVzICkgPT4ge1xuXHRmb3JFYWNoKCBmaWVsZHNBbmRWYWx1ZXMsICggY2FsY3VsYXRlZEZpZWxkVmFsdWUsIGNhbGN1bGF0ZWRGaWVsZE5hbWUgKSA9PiB7XG5cdFx0aWYgKCBjYWxjdWxhdGVkRmllbGROYW1lICE9PSAnX3Byb3RlY3RlZCcgKSB7XG5cdFx0XHRjcmVhdGVHZXR0ZXIoXG5cdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHRjYW1lbENhc2UoIGNhbGN1bGF0ZWRGaWVsZE5hbWUgKSxcblx0XHRcdFx0Y2FsY3VsYXRlZEZpZWxkVmFsdWVcblx0XHRcdCk7XG5cdFx0fVxuXHR9ICk7XG5cdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKFxuXHRcdGluc3RhbmNlLFxuXHRcdCdoYXNDYWxjdWxhdGVkRmllbGQnLFxuXHRcdGhhc0NhbGN1bGF0ZWRGaWVsZENhbGxiYWNrXG5cdCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBnZXR0ZXJzIGZvciB0aGUgdmFyaW91cyByZXNvdXJjZSBsaW5rcyBvbiB0aGUgZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn1maWVsZHNBbmRWYWx1ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFJlc291cmNlcyA9ICggaW5zdGFuY2UsIGZpZWxkc0FuZFZhbHVlcyApID0+IHtcblx0Y29uc3QgcmVsYXRpb25zID0gW107XG5cdGxldCByZWxhdGlvbk5hbWU7XG5cdGZvckVhY2goIGZpZWxkc0FuZFZhbHVlcywgKCByZXNvdXJjZVZhbHVlLCByZXNvdXJjZU5hbWUgKSA9PiB7XG5cdFx0aWYgKCByZXNvdXJjZU5hbWUgPT09ICdzZWxmJyApIHtcblx0XHRcdGNyZWF0ZUdldHRlciggaW5zdGFuY2UsICdyZXNvdXJjZUxpbmsnLCByZXNvdXJjZVZhbHVlWyAwIF0uaHJlZiApO1xuXHRcdH0gZWxzZSBpZiAoIHJlc291cmNlTmFtZSA9PT0gJ2NvbGxlY3Rpb24nICkge1xuXHRcdFx0Y3JlYXRlR2V0dGVyKFxuXHRcdFx0XHRpbnN0YW5jZSxcblx0XHRcdFx0J2NvbGxlY3Rpb25SZXNvdXJjZUxpbmsnLFxuXHRcdFx0XHRyZXNvdXJjZVZhbHVlWyAwIF0uaHJlZlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVsYXRpb25OYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUxpbmsoIHJlc291cmNlTmFtZSApO1xuXHRcdFx0cmVsYXRpb25zLnB1c2goIHJlbGF0aW9uTmFtZSApO1xuXHRcdFx0c2V0UmVsYXRpb25zUmVzb3VyY2UoXG5cdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHRyZWxhdGlvbk5hbWUgKyAnUmVzb3VyY2UnLFxuXHRcdFx0XHRyZXNvdXJjZVZhbHVlXG5cdFx0XHQpO1xuXHRcdH1cblx0fSApO1xuXHQvL3NldCByZWxhdGlvbnMgZ2V0dGVyXG5cdGNyZWF0ZUdldHRlciggaW5zdGFuY2UsICdnZXRSZWxhdGlvbnMnLCByZWxhdGlvbnMgKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihzdHJpbmcpOiBPYmplY3R9IFJldHVybnMgdGhlIGNhbGxiYWNrIGZvciBnZXR0aW5nIGFcbiAqIHJlbGF0aW9uIHJlc291cmNlXG4gKi9cbmNvbnN0IGdldFJlbGF0aW9uUmVzb3VyY2VDYWxsYmFjayA9ICggaW5zdGFuY2UgKSA9PlxuXHQoIHJlbGF0aW9uTmFtZSApID0+IGluc3RhbmNlWyByZWxhdGlvbk5hbWUucmVwbGFjZSggJ1Jlc291cmNlJywgJycgKSBdO1xuXG4vKipcbiAqIENyZWF0ZXMgZ2V0dGVycyBmb3IgdGhlIHJlbGF0aW9ucyByZXNvdXJjZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25OYW1lXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCBzdHJpbmc+fSByZXNvdXJjZUluZm9cbiAqL1xuZXhwb3J0IGNvbnN0IHNldFJlbGF0aW9uc1Jlc291cmNlID0gKFxuXHRpbnN0YW5jZSxcblx0cmVsYXRpb25OYW1lLFxuXHRyZXNvdXJjZUluZm9cbikgPT4ge1xuXHRjcmVhdGVHZXR0ZXIoXG5cdFx0aW5zdGFuY2UsXG5cdFx0cmVsYXRpb25OYW1lLFxuXHRcdHtcblx0XHRcdHJlc291cmNlTGluazogcmVzb3VyY2VJbmZvWyAwIF0uaHJlZixcblx0XHRcdHNpbmdsZTogcmVzb3VyY2VJbmZvWyAwIF0uc2luZ2xlLFxuXHRcdH1cblx0KTtcblx0aWYgKCBpc1VuZGVmaW5lZCggaW5zdGFuY2UuZ2V0UmVsYXRpb25SZXNvdXJjZSApICkge1xuXHRcdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKCBpbnN0YW5jZSxcblx0XHRcdCdnZXRSZWxhdGlvblJlc291cmNlJyxcblx0XHRcdGdldFJlbGF0aW9uUmVzb3VyY2VDYWxsYmFja1xuXHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogU2V0cyB0aGUgaW50ZXJuYWwgc2F2ZSBzdGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgd2hlbiBjdXJyZW50IHN0YXRlIGlzXG4gKiBTQVZFX1NUQVRFLmNsZWFuIG90aGVyd2lzZSBjdXJyZW50IHNhdmUgc3RhdGUgaXMgcmV0YWluZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2F2ZVN0YXRlIEV4cGVjdGVkIHRvIGJlIG9uZSBvZiBTQVZFX1NUQVRFIGNvbnN0YW50IHZhbHVlcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3ZlcnJpZGUgU2V0IHRvIHRydWUgd2hlbiBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGxvZ2ljIGZvclxuICogc2V0dGluZyBzdGF0ZS4gIFdoZW4gdHJ1ZSwgdGhlIHNhdmVTdGF0ZSBpcyBzZXQgdG8gd2hhdGV2ZXIgdGhlIGluY29taW5nXG4gKiBzYXZlU3RhdGUgdmFsdWUgaXMuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTYXZlU3RhdGUgPSAoIGluc3RhbmNlLCBzYXZlU3RhdGUsIG92ZXJyaWRlID0gZmFsc2UgKSA9PiB7XG5cdGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGluc3RhbmNlWyBQUklWQVRFX1BST1BFUlRJRVMuU0FWRV9TVEFURSBdO1xuXHRzd2l0Y2ggKCBzYXZlU3RhdGUgKSB7XG5cdFx0Y2FzZSBTQVZFX1NUQVRFLkRJUlRZOlxuXHRcdGNhc2UgU0FWRV9TVEFURS5ORVc6XG5cdFx0Y2FzZSBTQVZFX1NUQVRFLkNMRUFOOlxuXHRcdFx0aWYgKCBvdmVycmlkZSApIHtcblx0XHRcdFx0aW5zdGFuY2VbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF0gPSBzYXZlU3RhdGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aW5zdGFuY2VbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF0gPVxuXHRcdFx0XHRjdXJyZW50U3RhdGUgPT09IFNBVkVfU1RBVEUuQ0xFQU4gP1xuXHRcdFx0XHRcdHNhdmVTdGF0ZSA6XG5cdFx0XHRcdFx0Y3VycmVudFN0YXRlO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnQoXG5cdFx0XHRcdCdTYXZlIHN0YXRlIGZvciBlbnRpdHkgY2FuIG9ubHkgYmUgc2V0IHRvIGVpdGhlciAnICtcblx0XHRcdFx0J1NBVkVfU1RBVEUuRElSVFksIFNBVkVfU1RBVEUuTkVXIG9yIFNBVkVfU1RBVEUuQ0xFQU4nXG5cdFx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZmllbGQgbmFtZSB0byB0aGUgZmllbGRUb1BlcnNpc3RPbkluc2VydCBwcm9wZXJ0eSBvbiB0aGUgaW5zdGFuY2VcbiAqIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpZWxkVG9QZXJzaXN0ID0gKCBpbnN0YW5jZSwgZmllbGROYW1lICkgPT4ge1xuXHRpZiAoIGluc3RhbmNlLmZpZWxkc1RvUGVyc2lzdE9uSW5zZXJ0ICkge1xuXHRcdGluc3RhbmNlLmZpZWxkc1RvUGVyc2lzdE9uSW5zZXJ0LmFkZCggZmllbGROYW1lICk7XG5cdH1cbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0aXNQbGFpbk9iamVjdCxcblx0Y2FtZWxDYXNlLFxuXHRsYXN0LFxuXHRwaWNrLFxuXHRwaWNrQnksXG5cdGlzQXJyYXksXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBpbnN0YW5jZU9mIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRNb25leSxcblx0U2l0ZUN1cnJlbmN5LFxuXHRTZXJ2ZXJEYXRlVGltZSBhcyBEYXRlVGltZSxcbn0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5cbmltcG9ydCB7IHBsdXJhbE1vZGVsTmFtZSB9IGZyb20gJy4uL21vZGVsLW5hbWVzJztcblxuaW1wb3J0IHtcblx0aGFzUmF3UHJvcGVydHksXG5cdGhhc1ByZXR0eVByb3BlcnR5LFxuXHRoYXNSZW5kZXJlZFByb3BlcnR5LFxuXHRpc0RhdGVUaW1lRmllbGQsXG5cdGlzTW9uZXlGaWVsZCxcblx0aXNQcmltYXJ5S2V5RmllbGQsXG5cdGlzRW50aXR5RmllbGQsXG59IGZyb20gJy4vYm9vbGVhbnMnO1xuaW1wb3J0IHsgdmFsaWRhdGVUeXBlRm9yRmllbGQgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgVkFMSURBVEVfVFlQRSB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBUaGlzIHJlY2VpdmVzIGEgZmllbGQgbmFtZSwgaXQncyB2YWx1ZSBhbmQgdGhlIHNjaGVtYSBhbmQgY29udmVydHMgaXQgdG8gdGhlXG4gKiByZWxhdGVkIHZhbHVlIG9iamVjdCBJRiB0aGUgc2NoZW1hIGluZGljYXRlcyBpdCBpcyBvZiBhIHR5cGUgdGhhdCB0aGVyZSBpcyBhXG4gKiBrbm93biB2YWx1ZSBvYmplY3QgZm9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7RGF0ZVRpbWV8TW9uZXl8Kn0gIElmIHRoaXMgaXMgbm90IGEgdmFsdWUgb2JqZWN0LCB0aGUgb3JpZ2luYWwgZmllbGRcbiAqIHZhbHVlIGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgbWF5YmVDb252ZXJ0VG9WYWx1ZU9iamVjdCA9ICggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBzY2hlbWEgKSA9PiB7XG5cdGlmIChcblx0XHRpc0RhdGVUaW1lRmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgJiZcblx0XHQhIERhdGVUaW1lLnZhbGlkYXRlSXNEYXRlVGltZSggZmllbGRWYWx1ZSApXG5cdCkge1xuXHRcdHJldHVybiBEYXRlVGltZS5mcm9tSVNPKCBmaWVsZFZhbHVlICk7XG5cdH1cblx0aWYgKFxuXHRcdGlzTW9uZXlGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSAmJlxuXHRcdCEgKCBpbnN0YW5jZU9mKCBmaWVsZFZhbHVlLCAnTW9uZXknICkgKVxuXHQpIHtcblx0XHRyZXR1cm4gbmV3IE1vbmV5KCBmaWVsZFZhbHVlLCBTaXRlQ3VycmVuY3kgKTtcblx0fVxuXHQvLyBpZiBtb3JlIFZPcyBnZXQgYWRkZWQsIHRoZW4gaW5zdGVhZCBvZiBhZGRpbmcgbW9yZSBpZiBlbHNlIGJsb2Nrc1xuXHQvLyB0byB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgb25lcyBiZWxvdywgYWxsIFZPIGxvZ2ljIHNob3VsZCBiZSBleHRyYWN0ZWRcblx0Ly8gaW50byBzb21lIGtpbmQgb2YgIFZhbHVlT2JqZWN0RXh0cmFjdG9yIG9iamVjdCB0aGF0IHdvdWxkIGhvbGQgYWxsIG9mXG5cdC8vIHRoZSBuZWNlc3NhcnkgY2FsbGJhY2tzIGZvciBtYW5hZ2luZyB0aGUgZGV0ZWN0aW9uIG9mIFZPIGZpZWxkcyBhbmRcblx0Ly8gY29udmVyc2lvbiBvZiBkYXRhIHRvIGFuZCBmcm9tIHRoZSB2YXJpb3VzIFZPc1xuXHQvLyBwbHogc2VlOlxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vZXZlbnRlc3ByZXNzby9ldmVudC1lc3ByZXNzby1jb3JlL3B1bGwvNjM3L2ZpbGVzI3IyMjg2OTA3ODlcblx0cmV0dXJuIGZpZWxkVmFsdWU7XG59O1xuXG4vKipcbiAqIFRoaXMgY29udmVydHMgdGhlIGluY29taW5nIHZhbHVlIGZvciBhIGZpZWxkIHRvIGl0cyBlcXVpdmFsZW50IFwicmF3XCIgdmFsdWVcbiAqIGZyb20gYSB2YWx1ZSBvYmplY3QgaWYgaXQgaXMgYSB2YWx1ZSBvYmplY3QuICBPdGhlcndpc2UgaXQganVzdCByZXR1cm5zIHRoZVxuICogb3JpZ2luYWwgaW5jb21pbmcgdmFsdWUuICBUaGlzIGFsc28gYXNzZXJ0cyB0aGF0IGlmIHRoZSBwcm92aWRlZCBmaWVsZCBpc1xuICogZXhwZWN0ZWQgdG8gYmUgYSB2YWx1ZSBvYmplY3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgSVMgYSB2YWxpZCB2YWx1ZSBvYmplY3RcbiAqIGFuZCBpdCBpcyB0aGUgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYSB2YWx1ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfE1vbmV5fERhdGVUaW1lfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtzdHJpbmd8bnVtYmVyfCp9ICBJZiB0aGUgdmFsdWUgaXMgbm90IGEgdmFsdWUgb2JqZWN0LCByZXR1cm5zIHRoZVxuICogb3JpZ2luYWwgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zID0gKFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdHNjaGVtYVxuKSA9PiB7XG5cdGlmICggaXNEYXRlVGltZUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICkge1xuXHRcdERhdGVUaW1lLmFzc2VydElzRGF0ZVRpbWUoIGZpZWxkVmFsdWUgKTtcblx0XHRmaWVsZFZhbHVlID0gZmllbGRWYWx1ZS50b0lTTygpO1xuXHR9IGVsc2UgaWYgKCBpc01vbmV5RmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0TW9uZXkuYXNzZXJ0TW9uZXkoIGZpZWxkVmFsdWUgKTtcblx0XHRmaWVsZFZhbHVlID0gZmllbGRWYWx1ZS50b051bWJlcigpO1xuXHR9XG5cdHJldHVybiBmaWVsZFZhbHVlO1xufTtcblxuLyoqXG4gKiBUaGlzIGNvbnZlcnRzIHRoZSBpbmNvbWluZyB2YWx1ZSBmb3IgYSBmaWVsZCB0byBpdHMgZXF1aXZhbGVudCBcInJhd1wiIHZhbHVlXG4gKiBpZiB0aGUgaW5jb21pbmcgdmFsdWUgIGlzIGEgdmFsdWUgb2JqZWN0LiAgT3RoZXJ3aXNlIGl0IGp1c3QgcmV0dXJucyB0aGVcbiAqIG9yaWdpbmFsIGluY29taW5nIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7KnxEYXRlVGltZXxNb25leX1maWVsZFZhbHVlXG4gKiBAcmV0dXJuIHsqfSBUaGUgcmF3IHZhbHVlIGZvciB0aGUgdmFsdWUgb2JqZWN0IG9yIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdCA9ICggZmllbGRWYWx1ZSApID0+IHtcblx0aWYgKCBEYXRlVGltZS52YWxpZGF0ZUlzRGF0ZVRpbWUoIGZpZWxkVmFsdWUgKSApIHtcblx0XHRmaWVsZFZhbHVlID0gZmllbGRWYWx1ZS50b0lTTygpO1xuXHR9IGVsc2UgaWYgKCBpbnN0YW5jZU9mKCBmaWVsZFZhbHVlLCAnTW9uZXknICkgKSB7XG5cdFx0ZmllbGRWYWx1ZSA9IGZpZWxkVmFsdWUudG9OdW1iZXIoKTtcblx0fVxuXHRyZXR1cm4gZmllbGRWYWx1ZTtcbn07XG5cbi8qKlxuICogVGhpcyBkZXJpdmVzIHRoZSBcInByZXBhcmVkXCIgdmFsdWUgZm9yIHRoZSBnaXZlbiBmaWVsZCBhbmQgdmFsdWUuXG4gKlxuICogXCJQcmVwYXJlZFwiIG1lYW5zOlxuICpcbiAqIC0gY29udmVydGluZyB0byBhIHZhbHVlIG9iamVjdCBpZiB0aGlzIGlzIGEgZmllbGQgdGhhdCB0aGVyZSBhcmUgZGVmaW5lZFxuICogICB2YWx1ZSBvYmplY3RzIGZvci5cbiAqIC0gcmV0cmlldmluZyB0aGUgXCJyYXdcIiB2YWx1ZSBmcm9tIGZpZWxkIHZhbHVlcyB0aGF0IGhhdmUgYHJhd2AgYW5kIGByZW5kZXJlZGBcbiAqICAgb3IgYHByZXR0eWAgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9ICBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge0RhdGVUaW1lfE1vbmV5fCp9ICBSZXR1cm5zIHRoZSBvcmlnaW5hbCBpbmNvbWluZyB2YWx1ZSBpZiBpdCBkb2VzXG4gKiBub3QgaGF2ZSBhIHJhdyBlcXVpdmFsZW50IG9yIGlzIG5vdCBhIHZhbHVlIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlcml2ZVByZXBhcmVkVmFsdWVGb3JGaWVsZCA9IChcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRpbnN0YW5jZVxuKSA9PiB7XG5cdGNvbnN0IHZhbGlkYXRpb25UeXBlID0gdmFsaWRhdGVUeXBlRm9yRmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2UgKTtcblx0ZmllbGRWYWx1ZSA9IGlzUGxhaW5PYmplY3QoIGZpZWxkVmFsdWUgKSA/XG5cdFx0ZmllbGRWYWx1ZVsgdmFsaWRhdGlvblR5cGUgXSA6XG5cdFx0ZmllbGRWYWx1ZTtcblx0cmV0dXJuIG1heWJlQ29udmVydFRvVmFsdWVPYmplY3QoIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSwgaW5zdGFuY2Uuc2NoZW1hICk7XG59O1xuXG4vKipcbiAqIFRoaXMgcmV0dXJucyB0aGUgXCJyZW5kZXJlZFwiIG9yIFwicHJldHR5XCIgZXF1aXZhbGVudCBmcm9tIGEgdmFsdWUgaWYgaXQgZXhpc3RzXG4gKiBhcyBhIHByb3BlcnR5IG9uIGl0LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9ICBUaGUgb3JpZ2luYWwgdmFsdWUgaXMgcmV0dXJuZWQgaWYgaXRzIG5vdCBhIHBsYWluIG9iamVjdCBvciBpZlxuICogaXQgaGFzIG5vIGByZW5kZXJlZGAgb3IgYHByZXR0eWAgcHJvcGVydHkuICBIb3dldmVyLCBpZiBpdCBpcyBhIHBsYWluIG9iamVjdFxuICogYW5kIGhhcyBubyBwcmV0dHkvcmVuZGVyZWQgcHJvcGVydGllcyBidXQgRE9FUyBoYXZlIGEgcmF3IHByb3BlcnR5LCB0aGVuIHRoYXRcbiAqIGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgZGVyaXZlUmVuZGVyZWRWYWx1ZSA9ICggdmFsdWUgKSA9PiB7XG5cdGlmICggISBpc1BsYWluT2JqZWN0KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHR2YWx1ZSA9IGhhc1ByZXR0eVByb3BlcnR5KCB2YWx1ZSApID8gdmFsdWUucHJldHR5IDogdmFsdWU7XG5cdHZhbHVlID0gaGFzUmVuZGVyZWRQcm9wZXJ0eSggdmFsdWUgKSA/IHZhbHVlLnJlbmRlcmVkIDogdmFsdWU7XG5cdHJldHVybiBoYXNSYXdQcm9wZXJ0eSggdmFsdWUgKSA/IHZhbHVlLnJhdyA6IHZhbHVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgcmVzb3VyY2UgZnJvbSB0aGUgZ2l2ZW4gYHJlc291cmNlTGlua2AuXG4gKlxuICogZWcuIFwiaHR0cHM6Ly9hcGkuZXZlbnRlc3ByZXNzby5jb20vcmVnaXN0cmF0aW9uXCIgd2lsbCByZXR1cm4gJ3JlZ2lzdHJhdGlvbic7XG5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXNvdXJjZUxpbmtcbiAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgZnJvbSBhIHByb3ZpZGVkIHJlc291cmNlXG4gKiBsaW5rLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVsYXRpb25OYW1lRnJvbUxpbmsgPSAoIHJlc291cmNlTGluayApID0+IHtcblx0cmV0dXJuIHBsdXJhbE1vZGVsTmFtZSggY2FtZWxDYXNlKCBsYXN0KCByZXNvdXJjZUxpbmsuc3BsaXQoICcvJyApICkgKSApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVudGl0eSBmaWVsZCBuYW1lcyBhbmQgdmFsdWVzIGZyb20gdGhlXG4gKiBwcm92aWRlZCBlbnRpdHkgaW5zdGFuY2UuICBUaGUgdmFsdWVzIGFyZSBub3QgcHJlcGFyZWQgYW5kIG1hdGNoIGV4YWN0bHkgd2hhdFxuICogaXMgY3VycmVudGx5IHNldCBvbiB0aGlzIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGVudGl0eUluc3RhbmNlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBBIHBsYWluIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvckNsb25pbmcgPSAoIGVudGl0eUluc3RhbmNlICkgPT4ge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMoIGVudGl0eUluc3RhbmNlICkucmVkdWNlKCAoXG5cdFx0ZmllbGRzQW5kVmFsdWVzLFxuXHRcdGZpZWxkTmFtZVxuXHQpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRpc0VudGl0eUZpZWxkKCBmaWVsZE5hbWUsIGVudGl0eUluc3RhbmNlLnNjaGVtYSApICYmXG5cdFx0XHQhIGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGVudGl0eUluc3RhbmNlLnNjaGVtYSApXG5cdFx0KSB7XG5cdFx0XHRmaWVsZHNBbmRWYWx1ZXNbIGZpZWxkTmFtZSBdID0gZW50aXR5SW5zdGFuY2VbIGZpZWxkTmFtZSBdO1xuXHRcdFx0cmV0dXJuIGZpZWxkc0FuZFZhbHVlcztcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkc0FuZFZhbHVlcztcblx0fSwge30gKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBjb250YWluaW5nIHRoZSBlbnRpdHkgZmllbGQgbmFtZSBhbmQgdmFsdWVzIGZyb20gdGhlXG4gKiBwcm92aWRlZCBlbnRpdHkgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbnRpdHlJbnN0YW5jZVxuICogQHBhcmFtIHtib29sZWFufSBmb3JJbnNlcnQgIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSBmaWVsZHMgYW5kIHZhbHVlcyBmb3JcbiAqIGluc2VydCBvciBmb3IgdXBkYXRlLlxuICogQHJldHVybiB7T2JqZWN0fSBBIHBsYWluIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmcgPSAoXG5cdGVudGl0eUluc3RhbmNlLFxuXHRmb3JJbnNlcnQgPSBmYWxzZVxuKSA9PiB7XG5cdGNvbnN0IGl0ZXJhdG9yID0gZm9ySW5zZXJ0ID9cblx0XHRBcnJheS5mcm9tKCBlbnRpdHlJbnN0YW5jZS5maWVsZHNUb1BlcnNpc3RPbkluc2VydC52YWx1ZXMoKSApIDpcblx0XHRPYmplY3Qua2V5cyggZW50aXR5SW5zdGFuY2UgKTtcblxuXHRyZXR1cm4gaXRlcmF0b3IucmVkdWNlKCAoXG5cdFx0ZmllbGRzQW5kVmFsdWVzLFxuXHRcdGZpZWxkTmFtZVxuXHQpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRpc0VudGl0eUZpZWxkKCBmaWVsZE5hbWUsIGVudGl0eUluc3RhbmNlLnNjaGVtYSApICYmXG5cdFx0XHQhIGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGVudGl0eUluc3RhbmNlLnNjaGVtYSApXG5cdFx0KSB7XG5cdFx0XHRmaWVsZHNBbmRWYWx1ZXNbIGZpZWxkTmFtZSBdID0gbWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0KFxuXHRcdFx0XHRlbnRpdHlJbnN0YW5jZVsgZmllbGROYW1lIF0sXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGZpZWxkc0FuZFZhbHVlcztcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkc0FuZFZhbHVlcztcblx0fSwge30gKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJpbWFyeSBrZXkocykgYW5kIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGVudGl0eUluc3RhbmNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eUluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFuIGFycmF5IG9mIHZhbHVlcyBmb3IgdGhlIHByaW1hcnkga2V5cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByaW1hcnlLZXlWYWx1ZXMgPSAoIGVudGl0eUluc3RhbmNlICkgPT4gcGljayhcblx0ZW50aXR5SW5zdGFuY2UsXG5cdGVudGl0eUluc3RhbmNlLnByaW1hcnlLZXlzXG4pO1xuXG4vKipcbiAqIFRoaXMgcmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiBlbnRpdHkgZmllbGRzIGZyb20gdGhlIHNjaGVtYSBmb3IgdGhlIGVudGl0eVxuICogaW5zdGFuY2UgKHNjaGVtYSBmb3IgZmllbGRzIGFyZSBleHRyYWN0ZWQgYXMgd2VsbCkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eUluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgcGxhaW4gb2JqZWN0IHdpdGggZmllbGRzIGFuZCBzY2hlbWEgcHJvcGVydGllcyB0aGF0IGFyZVxuICogZW50aXR5IHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbnRpdHlGaWVsZHNGcm9tU2NoZW1hID0gKCBlbnRpdHlJbnN0YW5jZSApID0+IHBpY2tCeShcblx0ZW50aXR5SW5zdGFuY2Uuc2NoZW1hLFxuXHQoIGZpZWxkVmFsdWUsIGZpZWxkTmFtZSApID0+IGlzRW50aXR5RmllbGQoXG5cdFx0ZmllbGROYW1lLFxuXHRcdGVudGl0eUluc3RhbmNlLnNjaGVtYVxuXHQpXG4pO1xuXG4vKipcbiAqIFRoaXMgcmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiBleHRyYWN0ZWQgcHJpbWFyeUtleSBmaWVsZHMgZnJvbSB0aGUgc2NoZW1hXG4gKiBmb3IgdGhlIGVudGl0eSBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZW50aXR5SW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gQSBwbGFpbiBvYmplY3Qgd2l0aCBmaWVsZHMgYW5kIHNjaGVtYSBwcm9wZXJ0aWVzIHRoYXRcbiAqIFx0XHRcdFx0XHRyZXByZXNlbnQgcHJpbWFyeSBrZXkgZmllbGRzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJpbWFyeUtleUZpZWxkc0Zyb21TY2hlbWEgPSAoIGVudGl0eUluc3RhbmNlICkgPT4gcGlja0J5KFxuXHRlbnRpdHlJbnN0YW5jZS5zY2hlbWEsXG5cdCggZmllbGRWYWx1ZSwgZmllbGROYW1lICkgPT4gaXNQcmltYXJ5S2V5RmllbGQoXG5cdFx0ZmllbGROYW1lLFxuXHRcdGVudGl0eUluc3RhbmNlLnNjaGVtYVxuXHQpXG4pO1xuXG4vKipcbiAqIERlcml2ZXMgdGhlIGRlZmF1bHQgdmFsdWUgdG8gdXNlIGZvciBhIGdpdmVuIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4geyp9ICBBIHZhbHVlIHRvIHVzZSBmb3IgdGhlIGdpdmVuIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlID0gKCB0eXBlICkgPT4ge1xuXHRpZiAoIGlzQXJyYXkoIHR5cGUgKSApIHtcblx0XHRyZXR1cm4gdHlwZS5pbmRleE9mKCAnbnVsbCcgKSA+IC0xID9cblx0XHRcdG51bGwgOlxuXHRcdFx0ZGVyaXZlRGVmYXVsdFZhbHVlRm9yVHlwZSggdHlwZVsgMCBdICk7XG5cdH1cblx0c3dpdGNoICggdHlwZSApIHtcblx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0cmV0dXJuICcnO1xuXHRcdGNhc2UgJ251bWJlcic6XG5cdFx0Y2FzZSAnaW50ZWdlcic6XG5cdFx0XHRyZXR1cm4gMDtcblx0XHRjYXNlICdudWxsJzpcblx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0Y2FzZSAnYm9vbGVhbic6XG5cdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Y2FzZSAnZGF0ZS10aW1lJzpcblx0XHRcdHJldHVybiAoIG5ldyBEYXRlKCkgKS50b0lTT1N0cmluZygpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBEZXJpdmVzIHdoYXQgYHR5cGVgIGEgZmllbGQgaXMgZnJvbSB0aGUgc2NoZW1hLlxuICogSXQgYWNjb3VudHMgZm9yIGNhc2VzIHdoZXJlIHRoZSBcInR5cGVcIiBvZiBhIGZpZWxkIG1pZ2h0IGJlIGBkYXRlLXRpbWVgIG9yXG4gKiB3aGVyZSB0aGUgdHlwZSBpcyBhbiBvYmplY3QgYW5kIHRodXMgdGhlIGB0eXBlYCBmb3IgdGhlIHB1cnBvc2VzIG9mIG1vZGVsXG4gKiBlbnRpdGllcyBpcyBkZWZpbmVkIGJ5IHRoZSBgcmF3YCBwcm9wZXJ0eSBmb3IgdGhlIGZpZWxkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4geyp9ICBXaGF0IHR5cGUgdGhlIGZpbGVkIGlzLlxuICovXG5leHBvcnQgY29uc3QgZGVyaXZlVHlwZUZvckZpZWxkID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+IHtcblx0aWYgKCBpc0RhdGVUaW1lRmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0cmV0dXJuICdkYXRlLXRpbWUnO1xuXHR9XG5cdGlmICggc2NoZW1hWyBmaWVsZE5hbWUgXSAmJiBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgKSB7XG5cdFx0aWYgKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgPT09ICdvYmplY3QnICkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMgJiZcblx0XHRcdFx0aGFzUmF3UHJvcGVydHkoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcyApXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcudHlwZSA/XG5cdFx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlIDpcblx0XHRcdFx0XHRudWxsO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGU7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFRoaXMgZGVyaXZlcyB0aGUgdmFsaWRhdGUgdHlwZSBmcm9tIHRoZSBpbmNvbWluZyBmaWVsZCBhbmQgdmFsdWUgYWNjb3JkaW5nXG4gKiB0byB0aGUgc2NoZW1hIGFuZCBpbmNvbWluZyB2YWx1ZS5cbiAqXG4gKiBUaGlzIGFjY291bnRzIGZvciB0aGUgZmFjdCB0aGF0IGVudGl0aWVzIG1heSBiZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZVxuICogZm9sbG93aW5nIGNvbnRleHRzOlxuICpcbiAqIDEuIEF1dGhlZCBSRVNUIHJlc3BvbnNlICh3aGljaCBjb3VsZCBoYXZlIGJvdGggcmF3LCByZW5kZXJlZCBvciBwcmV0dHlcbiAqICAgIHZhbHVlcyBpbiB0aGUgZmllbGQgdmFsdWUpLlxuICogMi4gTm9uLWF1dGhlZCBSRVNUIHJlc3BvbnNlICh3aGljaCB3aWxsIG5vdCBoYXZlIGEgcmF3IHZhbHVlLCBidXQgY291bGQgaGF2ZVxuICogICAgYSBwcmV0dHkgb3IgcmVuZGVyZWQgdmFsdWUpLiAgVGhpcyBpcyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBpZiB0aGVcbiAqICAgIHJlbmRlcmVkIG9yIHByZXR0eSB2YWx1ZSBpcyBvZiBhIGRpZmZlcmVudCBkYXRhIHR5cGUgdGhhbiB0aGUgcmF3IHZhbHVlLlxuICogMy4gTmV3IGVudGl0aWVzIGJ1aWx0IGNsaWVudCBzaWRlLCB3aGljaCB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgcHJlcGFyZWRcbiAqICAgIGFnYWluc3QgdGhlIFwicmF3XCIgdmFsaWRhdGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge1N5bWJvbH0gIFRoZSB2YWxpZGF0ZSB0eXBlIGZvciB0aGUgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVWYWxpZGF0ZVR5cGVGb3JGaWVsZCA9ICggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBzY2hlbWEgKSA9PiB7XG5cdGlmICggaGFzUmF3UHJvcGVydHkoIGZpZWxkVmFsdWUgKSApIHtcblx0XHRyZXR1cm4gVkFMSURBVEVfVFlQRS5SQVc7XG5cdH1cblx0aWYgKCBzY2hlbWFbIGZpZWxkTmFtZSBdICYmIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSApIHtcblx0XHRpZiAoXG5cdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgPT09ICdvYmplY3QnICYmXG5cdFx0XHRpc1BsYWluT2JqZWN0KCBmaWVsZFZhbHVlIClcblx0XHQpIHtcblx0XHRcdHJldHVybiBoYXNSZW5kZXJlZFByb3BlcnR5KCBmaWVsZFZhbHVlICkgP1xuXHRcdFx0XHRWQUxJREFURV9UWVBFLlJFTkRFUkVEIDpcblx0XHRcdFx0VkFMSURBVEVfVFlQRS5QUkVUVFk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBWQUxJREFURV9UWVBFLlJBVztcbn07XG5cbi8qKlxuICogVGhpcyBnZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIGZpZWxkIGZyb20gdGhlIHByb3ZpZGVkIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHsqfSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGZpZWxkIGZyb20gdGhlIHNjaGVtYSBvciBpZiBub3RcbiAqIHByZXNlbnQgaW4gdGhlIHNjaGVtYSwgYSBkZXJpdmVkIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgc2NoZW1hIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0VmFsdWVGb3JGaWVsZCA9ICggZmllbGROYW1lLCBzY2hlbWEgKSA9PiB7XG5cdGlmICggc2NoZW1hWyBmaWVsZE5hbWUgXSApIHtcblx0XHRyZXR1cm4gc2NoZW1hWyBmaWVsZE5hbWUgXS5kZWZhdWx0ID9cblx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0uZGVmYXVsdCA6XG5cdFx0XHRkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgKTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZUVudGl0eUZhY3RvcnkgfSBmcm9tICcuL2Jhc2UtZW50aXR5JztcbmV4cG9ydCB7IE1PREVMX1BSRUZJWEVTLCBTQVZFX1NUQVRFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzSW50ZWdlcixcblx0aXNTdHJpbmcsXG5cdGlzUGxhaW5PYmplY3QsXG5cdGlzQm9vbGVhbixcblx0aXNOdW1iZXIsXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5cbi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc0VudW1GaWVsZCwgaXNQcmltYXJ5S2V5RmllbGQsIGlzVmFsdWVPYmplY3RGaWVsZCB9IGZyb20gJy4vYm9vbGVhbnMnO1xuaW1wb3J0IHsgbWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0V2l0aEFzc2VydGlvbnMgfSBmcm9tICcuL2V4dHJhY3RvcnMnO1xuaW1wb3J0IHsgUFJJVkFURV9QUk9QRVJUSUVTLCBWQUxJREFURV9UWVBFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgaW5jb21pbmcgdmFsdWUgZm9yIGdpdmVuIHR5cGUuICBUeXBlcyBhbGxvd2VkIGFyZTpcbiAqXG4gKiAtIGludGVnZXI6IGNoZWNrcyBpZiB2YWx1ZSBpcyBhbiBpbnRlZ2VyLlxuICogLSBudW1iZXI6IGNoZWNrcyBpZiB2YWx1ZSBpcyBjbGFzc2lmaWVkIGFzIGEgTnVtYmVyIHByaW1pdGl2ZSBvciBvYmplY3QgKHRoaXNcbiAqICAgbWVhbnMgYEluZmluaXR5YCwgYC1JbmZpbml0eWAsIGFuZCBgTmFOYCBhcmUgY29uc2lkZXJlZCB2YWxpZCBmb3IgdGhpcyB0eXBlXG4gKiAtIHN0cmluZ1xuICogLSBvYmplY3QgLSB0aGlzIHZhbGlkYXRlcyBhcyBhIFwicGxhaW5PYmplY3RcIiwgdGhhdCBpcyBhbiBvYmplY3QgY3JlYXRlZCBieVxuICogICB0aGUgT2JqZWN0IGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgW1tQcm90b3R5cGVdXSBvZiBudWxsLlxuICogLSBib29sZWFuXG4gKiAtIGJvb2w6IChzYW1lIGFzIGJvb2xlYW4gY2hlY2spXG4gKiAtIG51bGw6IHZhbHVlIG11c3QgZXhwbGljaXRseSBiZSBgbnVsbGBcbiAqXG4gKiBOb3RlOiBpZiB0aGUgcGFzc2VkIGluIHR5cGUgZG9lcyBub3QgZXhpc3QsIHRoZW4gdGhlIHZhbHVlIGlzIGNvbnNpZGVyZWRcbiAqIGludmFsaWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QXJyYXl9IHR5cGUgIFRoZSB0eXBlIG9yIHR5cGVzIHRvIGNoZWNrXG4gKiBAcGFyYW0geyp9IHZhbHVlICBUaGUgdmFsdWUgYmVpbmcgdmFsaWRhdGVkXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyB0aGUgdmFsdWUgaXMgdmFsaWQgZm9yIHRoZSBnaXZlbiB0eXBlLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUeXBlID0gKCB0eXBlLCB2YWx1ZSApID0+IHtcblx0bGV0IHZhbGlkID0gZmFsc2U7XG5cdC8vIGFjY291bnQgZm9yIHR5cGUgZGVmaW5pdGlvbnMgdGhhdCBhcmUgYW4gYXJyYXkgb2YgYWxsb3dlZCB0eXBlcy5cblx0aWYgKCBpc0FycmF5KCB0eXBlICkgKSB7XG5cdFx0Zm9yICggY29uc3Qgc2luZ2xlVHlwZSBvZiB0eXBlICkge1xuXHRcdFx0dmFsaWQgPSB2YWxpZGF0ZVR5cGUoIHNpbmdsZVR5cGUsIHZhbHVlICk7XG5cdFx0XHRpZiAoIHZhbGlkICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gcmV0dXJuIHJpZ2h0IGF3YXkgYmVjYXVzZSB3ZSd2ZSBkZXRlcm1pbmVkIHRoZSB2YWxpZGl0eSBvZiB0aGUgdHlwZS5cblx0XHRyZXR1cm4gdmFsaWQ7XG5cdH1cblx0c3dpdGNoICggdHlwZSApIHtcblx0XHRjYXNlICdpbnRlZ2VyJzpcblx0XHRcdHZhbGlkID0gaXNJbnRlZ2VyKCB2YWx1ZSApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdHZhbGlkID0gaXNOdW1iZXIoIHZhbHVlICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0dmFsaWQgPSBpc1N0cmluZyggdmFsdWUgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHR2YWxpZCA9IGlzUGxhaW5PYmplY3QoIHZhbHVlICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdib29sZWFuJzpcblx0XHRjYXNlICdib29sJzpcblx0XHRcdHZhbGlkID0gaXNCb29sZWFuKCB2YWx1ZSApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnbnVsbCc6XG5cdFx0XHR2YWxpZCA9IHZhbHVlID09PSBudWxsO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIHZhbGlkO1xufTtcblxuLyoqXG4gKiBUaGlzIHZhbGlkYXRlcyBlbnVtIHR5cGUgb2YgdmFsdWVzLlxuICpcbiAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbXVzdCBiZSBvbmUgb2YgdGhlIHByb3ZpZGVkIGFycmF5IG9mIGVudW1WYWx1ZXMgYXNcbiAqIHdlbGwgYXMgYmVpbmcgb2YgdGhlIGV4cGVjdGVkIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7QXJyYXl9IGVudW1WYWx1ZXNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIHRoaXMgdmFsdWUgaXMgdmFsaWQuXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVudW1UeXBlID0gKCB0eXBlLCBlbnVtVmFsdWVzLCB2YWx1ZSApID0+IHtcblx0cmV0dXJuIHZhbGlkYXRlVHlwZSggdHlwZSwgdmFsdWUgKSAmJlxuXHRcdGlzQXJyYXkoIGVudW1WYWx1ZXMgKSAmJlxuXHRcdGVudW1WYWx1ZXMuaW5kZXhPZiggdmFsdWUgKSA+IC0xO1xufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBkb2VzIGEgc2hhbGxvdyB2YWxpZGF0aW9uIGZvciB0aGUgZ2l2ZW4gdmFsdWUgYW5kIGZpZWxkLlxuICpcbiAqIFwiU2hhbGxvd1wiIGhlcmUgbWVhbnMgdGhhdCBpZiB0aGUgZmllbGQgc2NoZW1hIGlzIG9mIHR5cGUgJ29iamVjdCcsIHRoZW4gdGhlXG4gKiB2YWxpZGF0aW9uIG9ubHkgdmVyaWZpZXMgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAgVGhlIG9iamVjdCBjb250ZW50c1xuICogYXJlIG5vdCB2YWxpZGF0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4cGVjdFZhbHVlT2JqZWN0cyAgSWYgdHJ1ZSwgdGhlbiB0aGlzIGZsYWdzIHRoZSB2YWxpZGF0b3JcbiAqIHRvIGFzc3VtZSB0aGUgdmFsdWUgbWlnaHQgYmUgYSB2YWx1ZSBvYmplY3QgYW5kIGF0dGVtcHQgdG8gcmV0cmlldmUgdGhlIHJhd1xuICogdmFsdWUgZnJvbSB0aGF0IHZhbHVlIG9iamVjdCBmb3IgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZSBleHBlY3RlZCB0eXBlIGluIHRoZVxuICogc2NoZW1hIGZvciB0aGF0IGZpZWxkLlxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgdGhlIHZhbHVlIGlzIHZhbGlkLlxuICogQHRocm93cyBUeXBlRXJyb3JcbiAqIEB0aHJvd3MgSW52YWxpZERhdGVUaW1lXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQgPSAoXG5cdGZpZWxkTmFtZSxcblx0ZmllbGRWYWx1ZSxcblx0c2NoZW1hLFxuXHRleHBlY3RWYWx1ZU9iamVjdHMgPSB0cnVlXG4pID0+IHtcblx0Ly8gaWYgZmllbGQgaXMgYSBwcmltYXJ5IEtleSBmaWVsZCB0aGVuIHdlIG92ZXJyaWRlIHRoZSB2YWxpZGF0aW9uIHNvIGl0IGNhblxuXHQvLyBiZSBlaXRoZXIgc3RyaW5nIG9yIG51bWJlclxuXHRpZiAoIGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICkge1xuXHRcdHJldHVybiB2YWxpZGF0ZVR5cGUoICdzdHJpbmcnLCBmaWVsZFZhbHVlICkgfHxcblx0XHRcdHZhbGlkYXRlVHlwZSggJ251bWJlcicsIGZpZWxkVmFsdWUgKTtcblx0fVxuXHRjb25zdCBpc0VudW0gPSBpc0VudW1GaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKTtcblx0Y29uc3QgaXNWYWx1ZU9iamVjdCA9IGlzVmFsdWVPYmplY3RGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKTtcblx0ZmllbGRWYWx1ZSA9IGV4cGVjdFZhbHVlT2JqZWN0cyAmJiBpc1ZhbHVlT2JqZWN0ID9cblx0XHRtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyhcblx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRzY2hlbWFcblx0XHQpIDpcblx0XHRmaWVsZFZhbHVlO1xuXHRmaWVsZFZhbHVlID0gZXhwZWN0VmFsdWVPYmplY3RzICYmXG5cdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUgPT09ICdvYmplY3QnICYmXG5cdFx0XHRpc1ZhbHVlT2JqZWN0ID9cblx0XHR7IHJhdzogZmllbGRWYWx1ZSB9IDpcblx0XHRmaWVsZFZhbHVlO1xuXHRjb25zdCBpc1ZhbGlkID0gaXNFbnVtID9cblx0XHR2YWxpZGF0ZUVudW1UeXBlKFxuXHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlLFxuXHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5lbnVtLFxuXHRcdFx0ZmllbGRWYWx1ZVxuXHRcdCkgOlxuXHRcdHZhbGlkYXRlVHlwZSggc2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlLCBmaWVsZFZhbHVlICk7XG5cdC8vIGlmIGlzRW51bSBhbmQgbm90IHZhbGlkLCB0aGVuIGxldHMgYmFpbCB3aXRoIGVycm9yXG5cdGlmICggaXNFbnVtICYmICEgaXNWYWxpZCApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0c3ByaW50Zihcblx0XHRcdFx0J1RoZSBnaXZlbiBcIiVzXCIgZmllbGROYW1lIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGRlZmluZWQgc2NoZW1hLiAgSXQgbXVzdCBiZSBhIFwiJXNcIiBhbmQgaXQgbXVzdCBiZSBvbmUgb2YgXCIlc1wiLiBUaGUgZmllbGRWYWx1ZSBnaXZlbiB3YXMgXCIlc1wiJyxcblx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLmVudW0uam9pbigpLFxuXHRcdFx0XHRmaWVsZFZhbHVlXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gaXNWYWxpZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB3aGF0IGlzIHNldCBhcyB0aGUgdmFsaWRhdGVUeXBlIGZvciB0aGUgZ2l2ZW4gZmllbGQgYW5kIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdmFsaWRhdGlvbiB0eXBlIGZvciB0aGUgZ2l2ZW4gZmllbGQgYW5kIGluc3RhbmNlLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUeXBlRm9yRmllbGQgPSAoIGZpZWxkTmFtZSwgaW5zdGFuY2UgKSA9PiB7XG5cdHJldHVybiBpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlZBTElEQVRFX1RZUEVTIF1bIGZpZWxkTmFtZSBdID9cblx0XHRpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlZBTElEQVRFX1RZUEVTIF1bIGZpZWxkTmFtZSBdIDpcblx0XHRWQUxJREFURV9UWVBFLlJBVztcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAnZXZlbnQnO1xuXG5leHBvcnQgY29uc3QgRVZFTlRfU1RBVFVTX0lEID0ge1xuXHRTT0xEX09VVDogJ3NvbGRfb3V0Jyxcblx0UE9TVFBPTkVEOiAncG9zdHBvbmVkJyxcblx0Q0FOQ0VMTEVEOiAnY2FuY2VsbGVkJyxcbn07XG5cbmV4cG9ydCBjb25zdCBFVkVOVF9TVEFUVVNfSURTID0gdmFsdWVzKCBFVkVOVF9TVEFUVVNfSUQgKTtcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnknO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG5cdEdSRUFURVJfVEhBTixcblx0R1JFQVRFUl9USEFOX0FORF9FUVVBTCxcblx0TEVTU19USEFOX0FORF9FUVVBTCxcbn0gZnJvbSAnLi4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBub3dEYXRlQW5kVGltZSA9IG1vbWVudCgpO1xuXG4vKipcbiAqIERlc2NyaWJlZCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7e2F0dHJpYnV0ZXM6ICp9fVxuICovXG5leHBvcnQgY29uc3QgcXVlcnlEYXRhVHlwZXMgPSB7XG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnRVZUX25hbWUnLFxuXHRcdFx0J0VWVF9JRCcsXG5cdFx0XHQnc3RhcnRfZGF0ZScsXG5cdFx0XHQnZW5kX2RhdGUnLFxuXHRcdFx0J3RpY2tldF9zdGFydCcsXG5cdFx0XHQndGlja2V0X2VuZCcsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdFx0c2hvd0V4cGlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXHRcdGNhdGVnb3J5U2x1ZzogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRtb250aDogUHJvcFR5cGVzLm1vbnRoLFxuXHR9ICksXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0XHRzaG93RXhwaXJlZDogYm9vbGVhblxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAnc3RhcnRfZGF0ZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdFx0c2hvd0V4cGlyZWQ6IGZhbHNlLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGFuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRzdGFydF9kYXRlOiAnRGF0ZXRpbWUuRFRUX0VWVF9zdGFydCcsXG5cdFx0ZW5kX2RhdGU6ICdEYXRldGltZS5EVFRfRVZUX2VuZCcsXG5cdFx0dGlja2V0X3N0YXJ0OiAnRGF0ZXRpbWUuVGlja2V0LlRLVF9zdGFydF9kYXRlJyxcblx0XHR0aWNrZXRfZW5kOiAnRGF0ZXRpbWUuVGlja2V0LlRLVF9lbmRfZGF0ZScsXG5cdH07XG5cdHJldHVybiBpc1VuZGVmaW5lZCggb3JkZXJCeU1hcFsgb3JkZXJCeSBdICkgP1xuXHRcdG9yZGVyQnkgOlxuXHRcdG9yZGVyQnlNYXBbIG9yZGVyQnkgXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHdoZXJlIGNvbmRpdGlvbnMgZm9yIGFuIGV2ZW50cyBlbmRwb2ludCByZXF1ZXN0IHVzaW5nIHByb3ZpZGVkXG4gKiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dFeHBpcmVkICBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGV4cGlyZWQgZXZlbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGNhdGVnb3J5U2x1ZyAgUmV0dXJuIGV2ZW50cyBmb3IgdGhlIGdpdmVuIGNhdGVnb3J5U2x1Z1xuICogQHBhcmFtIHtzdHJpbmd9IG1vbnRoICAgICAgICAgUmV0dXJuIGV2ZW50cyBmb3IgdGhlIGdpdmVuIG1vbnRoLlxuICogXHRcdFx0XHRcdFx0XHRcdCBDYW4gYmUgYW55IG1vbnRoIGZvcm1hdCByZWNvZ25pemVkIGJ5IG1vbWVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgIFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICgge1xuXHRzaG93RXhwaXJlZCA9IGZhbHNlLFxuXHRjYXRlZ29yeVNsdWcsXG5cdG1vbnRoID0gJ25vbmUnLFxufSApID0+IHtcblx0Y29uc3Qgd2hlcmUgPSBbXTtcblxuXHRpZiAoICEgc2hvd0V4cGlyZWQgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtEYXRldGltZS5EVFRfRVZUX2VuZCoqZXhwaXJlZF1bXT0nICsgR1JFQVRFUl9USEFOICtcblx0XHRcdCcmd2hlcmVbRGF0ZXRpbWUuRFRUX0VWVF9lbmQqKmV4cGlyZWRdW109JyArXG5cdFx0XHRub3dEYXRlQW5kVGltZS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0fVxuXHRpZiAoIGNhdGVnb3J5U2x1ZyApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW1Rlcm1fUmVsYXRpb25zaGlwLlRlcm1fVGF4b25vbXkuVGVybS5zbHVnXT0nICsgY2F0ZWdvcnlTbHVnXG5cdFx0KTtcblx0fVxuXHRpZiAoIG1vbnRoICYmIG1vbnRoICE9PSAnbm9uZScgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtEYXRldGltZS5EVFRfRVZUX3N0YXJ0XVtdPScgKyBHUkVBVEVSX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbRGF0ZXRpbWUuRFRUX0VWVF9zdGFydF1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLnN0YXJ0T2YoICdtb250aCcgKS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RhdGV0aW1lLkRUVF9FVlRfZW5kXVtdPScgKyBMRVNTX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbRGF0ZXRpbWUuRFRUX0VWVF9lbmRdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5lbmRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9hc3NlcnRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vYmFzZSc7XG5leHBvcnQgKiBmcm9tICcuL2RlZmF1bHQtbW9kZWwtc3RhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9lbmRwb2ludHMnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnRpdHktZmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL3ByaW1hcnkta2V5cyc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVsLW5hbWVzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBwcmltYXJ5S2V5cyB9IGZyb20gJy4vcHJpbWFyeS1rZXlzLmpzJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGtleXMsIHN0YXJ0Q2FzZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGx1cmFsaXplIGZyb20gJ3BsdXJhbGl6ZSc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdtZW1pemUnO1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgbW9kZWwgbmFtZXMgY3VycmVudGx5IGV4cG9zZWQgZm9yIFJFU1QgQVBJIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FUyA9IGtleXMoIHByaW1hcnlLZXlzICk7XG5cbi8qKlxuICogVXNlZCB0byBub3JtYWxpemUgdGhlIHBsdXJhbCBmb3JtIG9mIGEgZ2l2ZW4gbW9kZWwgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ30gIEVuc3VyZXMgdGhlIGdpdmVuIG1vZGVsTmFtZSBpcyBpdHMgcGx1cmFsIGZvcm0uXG4gKi9cbmV4cG9ydCBjb25zdCBwbHVyYWxNb2RlbE5hbWUgPSBtZW1vaXplKFxuXHQoIG1vZGVsTmFtZSApID0+IHBsdXJhbGl6ZSggbW9kZWxOYW1lIClcbik7XG5cbi8qKlxuICogVXNlZCB0byBub3JtYWxpemUgdGhlIHNpbmd1bGFyIGZvcm0gb2YgYSBnaXZlbiBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSBFbnN1cmVzIHRoZSBnaXZlbiBtb2RlbE5hbWUgaXMgaW4gaXRzIHNpbmd1bGFyIGZvcm0uXG4gKi9cbmV4cG9ydCBjb25zdCBzaW5ndWxhck1vZGVsTmFtZSA9IG1lbW9pemUoXG5cdCggbW9kZWxOYW1lICkgPT4gcGx1cmFsaXplLnNpbmd1bGFyKCBtb2RlbE5hbWUgKVxuKTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgY2FwaXRhbGl6ZWQgc25ha2VjYXNlIGZvcm1hdCBmb3IgdGhlIGdpdmVuIG1vZGVsIG5hbWUgdHlwaWNhbGx5XG4gKiB1c2VkIGluIHF1ZXJ5IHN0cmluZ3MuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBtb2RlbE5hbWVGb3JRdWVyeVN0cmluZyggJ21lc3NhZ2VfdGVtcGxhdGVfZ3JvdXAnICk7XG4gKiAvLyBNZXNzYWdlX1RlbXBsYXRlX0dyb3VwXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZm9ybWF0dGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nID0gbWVtb2l6ZShcblx0KCBtb2RlbE5hbWUgKSA9PiB7XG5cdFx0bW9kZWxOYW1lID0gc2luZ3VsYXJNb2RlbE5hbWUoIG1vZGVsTmFtZSApO1xuXHRcdG1vZGVsTmFtZSA9IHN0YXJ0Q2FzZSggbW9kZWxOYW1lICk7XG5cdFx0cmV0dXJuIG1vZGVsTmFtZS5yZXBsYWNlKCAvXFxzL2csICdfJyApO1xuXHR9XG4pO1xuIiwiaW1wb3J0ICogYXMgYXR0ZW5kZWVNb2RlbCBmcm9tICcuL2F0dGVuZGVlJztcbmltcG9ydCAqIGFzIGNoZWNrSW5Nb2RlbCBmcm9tICcuL2NoZWNraW4nO1xuaW1wb3J0ICogYXMgZGF0ZVRpbWVNb2RlbCBmcm9tICcuL2RhdGV0aW1lJztcbmltcG9ydCAqIGFzIGV2ZW50TW9kZWwgZnJvbSAnLi9ldmVudCc7XG5pbXBvcnQgKiBhcyBwcmljZVR5cGVNb2RlbCBmcm9tICcuL3ByaWNlLXR5cGUnO1xuaW1wb3J0ICogYXMgcmVnaXN0cmF0aW9uTW9kZWwgZnJvbSAnLi9yZWdpc3RyYXRpb24nO1xuaW1wb3J0ICogYXMgc3RhdHVzTW9kZWwgZnJvbSAnLi9zdGF0dXMnO1xuaW1wb3J0ICogYXMgdGlja2V0TW9kZWwgZnJvbSAnLi90aWNrZXQnO1xuZXhwb3J0IHtcblx0YXR0ZW5kZWVNb2RlbCxcblx0Y2hlY2tJbk1vZGVsLFxuXHRkYXRlVGltZU1vZGVsLFxuXHRldmVudE1vZGVsLFxuXHRwcmljZVR5cGVNb2RlbCxcblx0cmVnaXN0cmF0aW9uTW9kZWwsXG5cdHN0YXR1c01vZGVsLFxuXHR0aWNrZXRNb2RlbCxcbn07XG4iLCJcbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ3ByaWNlX3R5cGUnO1xuXG5leHBvcnQgY29uc3QgQkFTRV9QUklDRV9UWVBFUyA9IHtcblx0QkFTRV9QUklDRTogMSxcblx0RElTQ09VTlQ6IDIsXG5cdFNVUkNIQVJHRTogMyxcblx0VEFYOiA0LFxufTtcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBkYXRhIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vZWVqcyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgaXNBcnJheSwgcmVkdWNlLCB0cmltRW5kIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRhc3NlcnRFbnRpdHlIYXNLZXksXG5cdGFzc2VydElzQXJyYXksXG5cdGFzc2VydElzTm90RW1wdHksXG5cdGFzc2VydElzTWFwLFxufSBmcm9tICcuL2Fzc2VydGlvbnMnO1xuXG4vKipcbiAqIEV4cG9zZXMgYSBtYXAgb2YgbW9kZWxuYW1lIHRvIHByaW1hcnkga2V5IGV4cG9zZWQgYnkgdGhlIGVlanMuZGF0YSBnbG9iYWxcbiAqIHZpYSB0aGUgc2VydmVyLlxuICpcbiAqIEB0eXBlIHt7fX1cbiAqL1xuZXhwb3J0IGNvbnN0IHsgcHJpbWFyeV9rZXlzOiBwcmltYXJ5S2V5cyA9IHt9IH0gPSBkYXRhLnBhdGhzO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGtleXMgZnJvbSB0aGUgcHJvdmlkZWQgZW50aXR5LlxuICogVGhpcyBmdW5jdGlvbiB3b3VsZCBiZSB1c2VkIGZvciBtb2RlbHMgdGhhdCBoYXZlIGNvbWJpbmVkIHByaW1hcnkga2V5c1xuICogKGRlbGl2ZXJlZCBhcyBhbiBhcnJheSkuXG4gKlxuICogQHR5cGUgeyBtZW1vaXplZCB9XG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHZhbHVlcy5cbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfVxuICovXG5leHBvcnQgY29uc3QgdmFsdWVzRm9yQ29tYmluZWRQcmltYXJ5S2V5cyA9IG1lbW9pemUoICgga2V5cywgZW50aXR5ICkgPT4ge1xuXHRhc3NlcnRJc0FycmF5KCBrZXlzICk7XG5cdGNvbnN0IHByaW1hcnlLZXkgPSByZWR1Y2UoIGtleXMsIGZ1bmN0aW9uKCByZXN1bHQsIGtleSApIHtcblx0XHRhc3NlcnRFbnRpdHlIYXNLZXkoIGtleSwgZW50aXR5ICk7XG5cdFx0cmV0dXJuIGVudGl0eVsgcmVzdWx0IF0gKyAnOicgKyBlbnRpdHlbIGtleSBdO1xuXHR9ICk7XG5cdHJldHVybiB0cmltRW5kKCBwcmltYXJ5S2V5LCAnOicgKTtcbn0gKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGtleSBmcm9tIHRoZSBwcm92aWRlZCBlbnRpdHkuXG4gKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHVzZWQgZm9yIG1vZGVscyB0aGF0IGhhdmUgb25seSBvbmUgcHJpbWFyeSBrZXkuXG4gKlxuICogQHR5cGUge21lbW9pemVkfVxuICogQHJldHVybiB7IGZ1bmN0aW9uIH0gVGhlIHZhbHVlIGZvciB0aGUga2V5IGluIHRoZSBwcm92aWRlZCBlbnRpdHkuXG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH1cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbHVlRm9yUHJpbWFyeUtleSA9IG1lbW9pemUoICgga2V5LCBlbnRpdHkgKSA9PiB7XG5cdGFzc2VydEVudGl0eUhhc0tleSgga2V5LCBlbnRpdHkgKTtcblx0cmV0dXJuIGVudGl0eVsga2V5IF07XG59ICk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJpbWFyeSBrZXkgKG9yIGNvbWJpbmVkIHByaW1hcnkga2V5cykgZnJvbSB0aGUgYXZhaWxhYmxlIGRhdGEuXG4gKlxuICogQHR5cGUge21lbW9pemVkfVxuICogQHJldHVybiB7IGZ1bmN0aW9uKHN0cmluZykgfVxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmltYXJ5S2V5ID0gbWVtb2l6ZSggKCBtb2RlbE5hbWUgKSA9PiB7XG5cdGFzc2VydEVudGl0eUhhc0tleSggbW9kZWxOYW1lLCBwcmltYXJ5S2V5cyApO1xuXHRyZXR1cm4gcHJpbWFyeUtleXNbIG1vZGVsTmFtZSBdO1xufSApO1xuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSBzdHJpbmcgZm9yIGdldHRpbmcgdGhlIGVudGl0aWVzIGJlbG9uZ2luZyB0byBhIG1vZGVsIGZvciB0aGVcbiAqIGdpdmVuIHByaW1hcnkga2V5IHZhbHVlc1xuICpcbiAqIEB0eXBlIHttZW1vaXplZH1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByaW1hcnlLZXlRdWVyeVN0cmluZyA9IG1lbW9pemUoXG5cdCggbW9kZWxOYW1lLCBrZXlWYWx1ZXMgPSBbXSApID0+IHtcblx0XHRjb25zdCBwcmltYXJ5S2V5ID0gZ2V0UHJpbWFyeUtleSggbW9kZWxOYW1lICk7XG5cdFx0cmV0dXJuIGBbJHsgcHJpbWFyeUtleSB9XVtJTl09YCArIGtleVZhbHVlcy5qb2luKCk7XG5cdH1cbik7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWVzIGZvciB0aGUgcHJpbWFyeSBrZXlzIGZyb20gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAqXG4gKiBAdHlwZSB7bWVtb2l6ZWR9XG4gKiBAcmV0dXJuIHsgZnVuY3Rpb24gfSAgSWYgdGhlIG1vZGVsIGhhcyBvbmx5IG9uZSBwcmltYXJ5IGtleSB0aGVuIHRoZSB2YWx1ZSB3aWxsXG4gKiBiZSBhIHNpbXBsZSBzdHJpbmcuICBJZiB0aGUgbW9kZWwgaGFzIGNvbWJpbmVkIHByaW1hcnkga2V5cywgdGhlbiB0aGUgdmFsdWVcbiAqIHdpbGwgYmUgYXMgc3RyaW5nIGluIHRoZSBmb3JtYXQgYCVzLiVzYCBmb3IgdGhlIHByaW1hcnkga2V5IHZhbHVlcy5cbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfVxuICovXG5leHBvcnQgY29uc3QgZ2V0RW50aXR5UHJpbWFyeUtleVZhbHVlcyA9IG1lbW9pemUoICggbW9kZWxOYW1lLCBlbnRpdHkgKSA9PiB7XG5cdGNvbnN0IGtleXMgPSBnZXRQcmltYXJ5S2V5KCBtb2RlbE5hbWUgKTtcblx0cmV0dXJuIGlzQXJyYXkoIGtleXMgKSA/XG5cdFx0dmFsdWVzRm9yQ29tYmluZWRQcmltYXJ5S2V5cygga2V5cywgZW50aXR5ICkgOlxuXHRcdHZhbHVlRm9yUHJpbWFyeUtleSgga2V5cywgZW50aXR5ICk7XG59ICk7XG5cbi8qKlxuICogVGhpcyByZWNlaXZlcyBhbiBhcnJheSBvZiBlbnRpdGllcyBhbmQgcmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgdGhvc2Ugc2FtZVxuICogZW50aXRpZXMgaW5kZXhlZCBieSB0aGUgcHJpbWFyeSBrZXkgdmFsdWUgZm9yIGVhY2ggZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB7QXJyYXl9IGVudGl0aWVzXG4gKiBAcmV0dXJuIHtNYXB9ICBBIGNvbGxlY3Rpb24gaW5kZXhlZCBieSB0aGUgcHJpbWFyeSBrZXkgdmFsdWVzIGZvciBlYWNoIGVudGl0eS5cbiAqIEB0aHJvd3Mge0V4Y2VwdGlvbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUgPSAoIG1vZGVsTmFtZSwgZW50aXRpZXMgPSBbXSApID0+IHtcblx0YXNzZXJ0SXNOb3RFbXB0eShcblx0XHRlbnRpdGllcyxcblx0XHRfXyhcblx0XHRcdCdUaGUgcHJvdmlkZWQgYXJyYXkgb2YgZW50aXRpZXMgbXVzdCBub3QgYmUgZW1wdHknLFxuXHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHQpXG5cdCk7XG5cdGFzc2VydElzQXJyYXkoIGVudGl0aWVzICk7XG5cblx0Y29uc3QgbWFwcGVkRW50aXRpZXMgPSBuZXcgTWFwKCk7XG5cdGVudGl0aWVzLmZvckVhY2goICggZW50aXR5ICkgPT4ge1xuXHRcdG1hcHBlZEVudGl0aWVzLnNldChcblx0XHRcdGdldEVudGl0eVByaW1hcnlLZXlWYWx1ZXMoIG1vZGVsTmFtZSwgZW50aXR5ICksXG5cdFx0XHRlbnRpdHlcblx0XHQpO1xuXHR9ICk7XG5cdHJldHVybiBtYXBwZWRFbnRpdGllcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbnRpdHkgaW5zdGFuY2VzIHVzaW5nIHRoZSBnaXZlbiBmYWN0b3J5IGFuZCBhcnJheVxuICogb2YgZW50aXR5IHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZmFjdG9yeVxuICogQHBhcmFtIHtNYXB9IGVudGl0aWVzXG4gKiBAcmV0dXJuIHtNYXB9ICBBbiBhcnJheSBvZiBlbnRpdHkgaW5zdGFuY2VzIGluZGV4ZWQgYnlcbiAqIHRoZWlyIHByaW1hcnkga2V5IHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBbmRLZXlFbnRpdGllc0J5UHJpbWFyeUtleVZhbHVlID0gKFxuXHRmYWN0b3J5LFxuXHRlbnRpdGllcyxcbikgPT4ge1xuXHRhc3NlcnRJc01hcChcblx0XHRlbnRpdGllcyxcblx0XHRfXyhcblx0XHRcdCdUaGUgcHJvdmlkZWQgb2JqZWN0IG9mIGVudGl0aWVzIG11c3QgYmUgYSBNYXAgb2JqZWN0Jyxcblx0XHRcdCdldmVudF9lc3ByZXNzbycsXG5cdFx0KVxuXHQpO1xuXHRlbnRpdGllcy5mb3JFYWNoKCAoIGVudGl0eSwgZW50aXR5SWQgKSA9PiB7XG5cdFx0ZW50aXRpZXMuc2V0KCBlbnRpdHlJZCwgZmFjdG9yeS5mcm9tRXhpc3RpbmcoIGVudGl0eSApICk7XG5cdH0gKTtcblx0cmV0dXJuIGVudGl0aWVzO1xufTtcbiIsIi8qKlxuICogSW50ZXJuYWwgSW1wb3J0c1xuICovXG5pbXBvcnQgKiBhcyBzdGF0dXNNb2RlbCBmcm9tICcuLi9zdGF0dXMvY29uc3RhbnRzJztcblxuLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ3JlZ2lzdHJhdGlvbic7XG5cbmV4cG9ydCBjb25zdCBSRUdJU1RSQVRJT05fU1RBVFVTX0lEUyA9IHZhbHVlcyhcblx0c3RhdHVzTW9kZWwuUkVHSVNUUkFUSU9OX1NUQVRVU19JRFxuKTtcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnknO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkLCB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG59IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0ICogYXMgc3RhdHVzTW9kZWwgZnJvbSAnLi4vc3RhdHVzL2NvbnN0YW50cyc7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0Zm9yRXZlbnRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yQXR0ZW5kZWVJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yVHJhbnNhY3Rpb25JZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yVGlja2V0SWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclN0YXR1c0lkOiBQcm9wVHlwZXMub25lT2YoIHZhbHVlcyggc3RhdHVzTW9kZWwuUkVHSVNUUkFUSU9OX1NUQVRVU19JRCApICksXG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnUkVHX0lEJyxcblx0XHRcdCdSRUdfZGF0ZScsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdH0gKSxcbn07XG5cbmV4cG9ydCBjb25zdCBvcHRpb25zRW50aXR5TWFwID0ge1xuXHRkZWZhdWx0OiB7XG5cdFx0dmFsdWU6ICdSRUdfSUQnLFxuXHRcdGxhYmVsOiAnUkVHX2NvZGUnLFxuXHR9LFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHtcbiAqIFx0e1xuICogXHRcdGF0dHJpYnV0ZXM6IHtcbiAqIFx0XHRcdGxpbWl0OiBudW1iZXIsXG4gKiBcdFx0XHRvcmRlckJ5OiBzdHJpbmcsXG4gKiBcdFx0XHRvcmRlcjogc3RyaW5nLFxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAncmVnX2RhdGUnLFxuXHRcdG9yZGVyOiBRVUVSWV9PUkRFUl9ERVNDLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGEgcmVnaXN0cmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRyZWdfaWQ6ICdSRUdfSUQnLFxuXHRcdHJlZ19kYXRlOiAnUkVHX2RhdGUnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiByZWdpc3RyYXRpb25zIGVuZHBvaW50IHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRXZlbnRJZCAgICBcdElEIG9mIEV2ZW50IHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yQXR0ZW5kZWVJZCAgICBJRCBvZiBBdHRlbmRlZSB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclRyYW5zYWN0aW9uSWQgSUQgb2YgVHJhbnNhY3Rpb24gdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JUaWNrZXRJZCBcdFx0SUQgb2YgVGlja2V0IHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yU3RhdHVzSWQgXHRcdElEIG9mIFN0YXR1cyB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgICBcdFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICgge1xuXHRmb3JFdmVudElkID0gMCxcblx0Zm9yQXR0ZW5kZWVJZCA9IDAsXG5cdGZvclRyYW5zYWN0aW9uSWQgPSAwLFxuXHRmb3JUaWNrZXRJZCA9IDAsXG5cdGZvclN0YXR1c0lkID0gJycsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXHRmb3JFdmVudElkID0gcGFyc2VJbnQoIGZvckV2ZW50SWQsIDEwICk7XG5cdGlmICggZm9yRXZlbnRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JFdmVudElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW0VWVF9JRF09JyArIGZvckV2ZW50SWQgKTtcblx0fVxuXHRmb3JBdHRlbmRlZUlkID0gcGFyc2VJbnQoIGZvckF0dGVuZGVlSWQsIDEwICk7XG5cdGlmICggZm9yQXR0ZW5kZWVJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JBdHRlbmRlZUlkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW0FUVF9JRF09JyArIGZvckF0dGVuZGVlSWQgKTtcblx0fVxuXHRmb3JUcmFuc2FjdGlvbklkID0gcGFyc2VJbnQoIGZvclRyYW5zYWN0aW9uSWQsIDEwICk7XG5cdGlmICggZm9yVHJhbnNhY3Rpb25JZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JUcmFuc2FjdGlvbklkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1RYTl9JRF09JyArIGZvclRyYW5zYWN0aW9uSWQgKTtcblx0fVxuXHRmb3JUaWNrZXRJZCA9IHBhcnNlSW50KCBmb3JUaWNrZXRJZCwgMTAgKTtcblx0aWYgKCBmb3JUaWNrZXRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JUaWNrZXRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtUS1RfSURdPScgKyBmb3JUaWNrZXRJZCApO1xuXHR9XG5cdGlmICggZm9yU3RhdHVzSWQgIT09ICcnICYmIGZvclN0YXR1c0lkICE9PSBudWxsICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtTVFNfSURdPScgKyBmb3JTdGF0dXNJZCApO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ3N0YXR1cyc7XG4vLyB0eXBlc1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX0VNQUlMID0gJ2VtYWlsJztcbmV4cG9ydCBjb25zdCBTVEFUVVNfVFlQRV9FVkVOVCA9ICdldmVudCc7XG5leHBvcnQgY29uc3QgU1RBVFVTX1RZUEVfTUVTU0FHRSA9ICdtZXNzYWdlJztcbmV4cG9ydCBjb25zdCBTVEFUVVNfVFlQRV9QQVlNRU5UID0gJ3BheW1lbnQnO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX1JFR0lTVFJBVElPTiA9ICdyZWdpc3RyYXRpb24nO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX1RSQU5TQUNUSU9OID0gJ3RyYW5zYWN0aW9uJztcbi8vIGVtYWlsXG5leHBvcnQgY29uc3QgRU1BSUxfU1RBVFVTX0lEID0ge1xuXHREUkFGVDogJ0VEUicsXG5cdFNFTlQ6ICdFU04nLFxuXHRFWFBJUkVEOiAnRVhQJyxcbn07XG4vLyBldmVudFxuZXhwb3J0IGNvbnN0IEVWRU5UX1NUQVRVU19JRCA9IHtcblx0QUNUSVZFOiAnQUNUJyxcblx0UkVHSVNUUkFUSU9OX0NMT1NFRDogJ0NMUycsXG5cdERFTEVURUQ6ICdERUwnLFxuXHRERU5JRUQ6ICdERU4nLFxuXHREUkFGVDogJ0RSRicsXG5cdE5PVF9BQ1RJVkU6ICdOQUMnLFxuXHROT1RfT1BFTjogJ05PUCcsXG5cdE9OR09JTkc6ICdPTkcnLFxuXHRSRUdJU1RSQVRJT05fT1BFTjogJ09QTicsXG5cdFBFTkRJTkc6ICdQTkQnLFxuXHRTRUNPTkRBUlk6ICdTRUMnLFxufTtcbi8vIG1lc3NhZ2VcbmV4cG9ydCBjb25zdCBNRVNTQUdFX1NUQVRVU19JRCA9IHtcblx0REVCVUc6ICdNRE8nLFxuXHRFWEVDVVRJTkc6ICdNRVgnLFxuXHRGQUlMOiAnTUZMJyxcblx0SU5DT01QTEVURTogJ01JQycsXG5cdElETEU6ICdNSUQnLFxuXHRSRVNFTkQ6ICdNUlMnLFxuXHRSRVRSWTogJ01SVCcsXG5cdFNFTlQ6ICdNU04nLFxufTtcbi8vIHBheW1lbnRcbmV4cG9ydCBjb25zdCBQQVlNRU5UX1NUQVRVU19JRCA9IHtcblx0QVBQUk9WRUQ6ICdQQVAnLFxuXHRDQU5DRUxMRUQ6ICdQQ04nLFxuXHRERUNMSU5FRDogJ1BEQycsXG5cdEZBSUxFRDogJ1BGTCcsXG5cdFBFTkRJTkc6ICdQUE4nLFxufTtcbi8vIHJlZ2lzdHJhdGlvblxuZXhwb3J0IGNvbnN0IFJFR0lTVFJBVElPTl9TVEFUVVNfSUQgPSB7XG5cdEFQUFJPVkVEOiAnUkFQJyxcblx0Q0FOQ0VMTEVEOiAnUkNOJyxcblx0REVDTElORUQ6ICdSREMnLFxuXHRJTkNPTVBMRVRFOiAnUklDJyxcblx0Tk9UX0FQUFJPVkVEOiAnUk5BJyxcblx0UEVORElOR19QQVlNRU5UOiAnUlBQJyxcblx0V0FJVF9MSVNUOiAnUldMJyxcbn07XG4vLyB0cmFuc2FjdGlvblxuZXhwb3J0IGNvbnN0IFRSQU5TQUNUSU9OX1NUQVRVU19JRCA9IHtcblx0QUJBTkRPTkVEOiAnVEFCJyxcblx0Q09NUExFVEU6ICdUQ00nLFxuXHRGQUlMRUQ6ICdURkwnLFxuXHRJTkNPTVBMRVRFOiAnVElOJyxcblx0T1ZFUlBBSUQ6ICdUT1AnLFxufTtcblxuLy8gdGhlIGZvbGxvd2luZyBhcmUgbm90IGluIHRoZSBzdGF0dXMgZGF0YWJhc2UgYnV0IGFyZSBrZXB0IGhlcmUgZm9yXG4vLyBjb252ZW5pZW5jZVxuXG4vLyBjdXN0b20gcG9zdCB0eXBlc1xuZXhwb3J0IGNvbnN0IENQVF9TVEFUVVNfSUQgPSB7XG5cdFBVQkxJU0g6ICdwdWJsaXNoJyxcblx0RlVUVVJFOiAnZnV0dXJlJyxcblx0RFJBRlQ6ICdkcmFmdCcsXG5cdFBFTkRJTkc6ICdwZW5kaW5nJyxcblx0UFJJVkFURTogJ3ByaXZhdGUnLFxuXHRUUkFTSEVEOiAndHJhc2gnLFxufTtcblxuZXhwb3J0IGNvbnN0IFVOS05PV05fU1RBVFVTX0lEID0gJ3Vua25vd24nO1xuXG5leHBvcnQgY29uc3QgQUxMX1NUQVRVU19JRFMgPSBbXG5cdC4uLnZhbHVlcyggRU1BSUxfU1RBVFVTX0lEICksXG5cdC4uLnZhbHVlcyggRVZFTlRfU1RBVFVTX0lEICksXG5cdC4uLnZhbHVlcyggTUVTU0FHRV9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBQQVlNRU5UX1NUQVRVU19JRCApLFxuXHQuLi52YWx1ZXMoIFJFR0lTVFJBVElPTl9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBUUkFOU0FDVElPTl9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBDUFRfU1RBVFVTX0lEICksXG5cdFVOS05PV05fU1RBVFVTX0lELFxuXTtcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgKiBhcyBzdGF0dXMgZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRVZFTlRfU1RBVFVTX0lEIH0gZnJvbSAnLi4vZXZlbnQnO1xuaW1wb3J0IHsgVElDS0VUX1NUQVRVU19JRCB9IGZyb20gJy4uL3RpY2tldCc7XG5pbXBvcnQgeyBEQVRFVElNRV9TVEFUVVNfSUQgfSBmcm9tICcuLi9kYXRldGltZSc7XG5pbXBvcnQgeyBDSEVDS0lOX1NUQVRVU19JRCB9IGZyb20gJy4uL2NoZWNraW4nO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsdWUtb2JqZWN0cyc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIFJlZ2lzdHJhdGlvbiBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1JFR0lTVFJBVElPTiA9IHtcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5QRU5ESU5HX1BBWU1FTlQgXTogbmV3IExhYmVsKFxuXHRcdF9fKCAncGVuZGluZyBwYXltZW50JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdF9fKCAncGVuZGluZyBwYXltZW50cycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELkFQUFJPVkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYXBwcm92ZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5OT1RfQVBQUk9WRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdub3QgYXBwcm92ZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5DQU5DRUxMRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdjYW5jZWxsZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5JTkNPTVBMRVRFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnaW5jb21wbGV0ZScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELkRFQ0xJTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZGVjbGluZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUkVHSVNUUkFUSU9OX1NUQVRVU19JRC5XQUlUX0xJU1QgXTogbmV3IExhYmVsKFxuXHRcdF9fKCAnd2FpdCBsaXN0JywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdF9fKCAnd2FpdCBsaXN0cycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIFRyYW5zYWN0aW9uIHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKlxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RSQU5TQUNUSU9OID0ge1xuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuT1ZFUlBBSUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdvdmVycGFpZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuQ09NUExFVEUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdjb21wbGV0ZScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuSU5DT01QTEVURSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2luY29tcGxldGUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuVFJBTlNBQ1RJT05fU1RBVFVTX0lELkZBSUxFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2ZhaWxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuQUJBTkRPTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYWJhbmRvbmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgcGF5bWVudCBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1BBWU1FTlQgPSB7XG5cdFsgc3RhdHVzLlBBWU1FTlRfU1RBVFVTX0lELkFQUFJPVkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYWNjZXB0ZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUEFZTUVOVF9TVEFUVVNfSUQuUEVORElORyBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3BlbmRpbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuUEFZTUVOVF9TVEFUVVNfSUQuQ0FOQ0VMTEVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnY2FuY2VsbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHQpLFxuXHRbIHN0YXR1cy5QQVlNRU5UX1NUQVRVU19JRC5ERUNMSU5FRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2RlY2xpbmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHQpLFxuXHRbIHN0YXR1cy5QQVlNRU5UX1NUQVRVU19JRC5GQUlMRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdmYWlsZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gbWFwIGZvciBNZXNzYWdlIHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfTUVTU0FHRSA9IHtcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuU0VOVCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3NlbnQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuSURMRSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3F1ZXVlZCBmb3Igc2VuZGluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5GQUlMIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZmFpbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELkRFQlVHIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZGVidWcgb25seScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5FWEVDVVRJTkcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdtZXNzZW5nZXIgaXMgZXhlY3V0aW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELlJFU0VORCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3F1ZXVlZCBmb3IgcmVzZW5kaW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELklOQ09NUExFVEUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdxdWV1ZWQgZm9yIGdlbmVyYXRpbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuUkVUUlkgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdmYWlsZWQgc2VuZGluZywgY2FuIGJlIHJldHJpZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gbWFwIGZvciBDUFQgc3RhdHVzZXNcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DUFQgPSB7XG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuUFVCTElTSCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3B1Ymxpc2hlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5DUFRfU1RBVFVTX0lELkZVVFVSRSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3NjaGVkdWxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5DUFRfU1RBVFVTX0lELkRSQUZUIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZHJhZnQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuQ1BUX1NUQVRVU19JRC5QRU5ESU5HIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncGVuZGluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5DUFRfU1RBVFVTX0lELlBSSVZBVEUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdwcml2YXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuVFJBU0hFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3RyYXNoZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8vIHRoZSBmb2xsb3dpbmcgc3RhdHVzIG1hcHMgYXJlIGZvciBtb2RlbCBzdGF0dXNlcyB0aGF0IGFyZSBub3Qgc2F2ZWQgaW4gdGhlXG4vLyBzdGF0dXMgdGFibGUgYnV0IGZvciBjb252ZW5pZW5jZSBoYXZlIHRoZWlyIGxhYmVscyByZXRyaWV2YWJsZSB2aWEgaGVyZS5cblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIEV2ZW50IFN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfRVZFTlQgPSB7XG5cdFsgRVZFTlRfU1RBVFVTX0lELlNPTERfT1VUIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnc29sZCBvdXQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBFVkVOVF9TVEFUVVNfSUQuUE9TVFBPTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncG9zdHBvbmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgRVZFTlRfU1RBVFVTX0lELkNBTkNFTExFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2NhbmNlbGxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIFRpY2tldCBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RJQ0tFVCA9IHtcblx0WyBUSUNLRVRfU1RBVFVTX0lELkFSQ0hJVkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYXJjaGl2ZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBUSUNLRVRfU1RBVFVTX0lELkVYUElSRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdleHBpcmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgVElDS0VUX1NUQVRVU19JRC5TT0xEX09VVCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3NvbGQgb3V0JywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgVElDS0VUX1NUQVRVU19JRC5QRU5ESU5HIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAndXBjb21pbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBUSUNLRVRfU1RBVFVTX0lELk9OU0FMRSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ29uIHNhbGUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gbWFwIGZvciBkYXRldGltZSBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0RBVEVUSU1FID0ge1xuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5DQU5DRUxMRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdjYW5jZWxsZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBEQVRFVElNRV9TVEFUVVNfSUQuU09MRF9PVVQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdzb2xkIG91dCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5FWFBJUkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZXhwaXJlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5JTkFDVElWRSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2luYWN0aXZlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgREFURVRJTUVfU1RBVFVTX0lELlVQQ09NSU5HIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAndXBjb21pbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBEQVRFVElNRV9TVEFUVVNfSUQuQUNUSVZFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnYWN0aXZlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgREFURVRJTUVfU1RBVFVTX0lELlBPU1RQT05FRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3Bvc3Rwb25lZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIGNoZWNraW4gc3RhdHVzZXNcbiAqXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ0hFQ0tJTiA9IHtcblx0WyBDSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9JTiBdOiBuZXcgTGFiZWwoXG5cdFx0X18oICdjaGVjay1pbicsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRfXyggJ2NoZWNrLWlucycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIENIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX09VVCBdOiBuZXcgTGFiZWwoXG5cdFx0X18oICdjaGVjay1vdXQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0X18oICdjaGVjay1vdXRzJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfTkVWRVIgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICduZXZlciBjaGVja2VkIGluJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIENvbWJpbmVkIHRyYW5zbGF0aW9uIG1hcCBmb3IgYWxsIHN0YXR1c2VzLlxuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0FMTCA9IHtcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9SRUdJU1RSQVRJT04sXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfVFJBTlNBQ1RJT04sXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfUEFZTUVOVCxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9NRVNTQUdFLFxuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX0NQVCxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9FVkVOVCxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9USUNLRVQsXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfREFURVRJTUUsXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ0hFQ0tJTixcblx0WyBzdGF0dXMuVU5LTk9XTl9TVEFUVVNfSUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICd1bmtub3duJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHByZXR0eSBzdGF0dXMgbGFiZWwgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0dXNDb2RlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNpbmd1bGFyICBXaGV0aGVyIHRvIHJldHVybiB0aGUgc2luZ3VsYXIgb3IgcGx1cmFsIGxhYmVsXG4gKiB2YWx1ZVxuICogQHBhcmFtIHsoc2VudGVuY2V8bG93ZXJ8dXBwZXIpfSBzY2hlbWFcbiAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyB0aGUgbWFwcGVkIHByZXR0eSBsYWJlbCBmb3IgdGhlIGdpdmVuIHN0YXR1cyBjb2RlIG9yXG4gKiBhIGZvcm1hdHRlZCAndW5rb3duJyBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gbWFwcGVkIHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZXR0eVN0YXR1cyA9IChcblx0c3RhdHVzQ29kZSxcblx0c2luZ3VsYXIgPSB0cnVlLFxuXHRzY2hlbWEgPSBMYWJlbC5GT1JNQVRfU0VOVEVOQ0VfQ0FTRVxuKSA9PiB7XG5cdHJldHVybiBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0FMTFsgc3RhdHVzQ29kZSBdID9cblx0XHRTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0FMTFsgc3RhdHVzQ29kZSBdLmFzRm9ybWF0dGVkKCBzaW5ndWxhciwgc2NoZW1hICkgOlxuXHRcdFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMWyBzdGF0dXMuVU5LTk9XTl9TVEFUVVNfSUQgXS5hc0Zvcm1hdHRlZChcblx0XHRcdHNpbmd1bGFyLFxuXHRcdFx0c2NoZW1hXG5cdFx0KTtcbn07XG5cbi8qKlxuICogRXhwZWN0cyBhbiBhcnJheSBvZiBzdGF0dXMgY29kZXMgYW5kIHJldHVybnMgYW4gb2JqZWN0IGluZGV4ZWQgYnkgY29kZXMgd2l0aFxuICogdmFsdWVzIGJlaW5nIHRoZSBmb3JtYXR0ZWQgcHJldHR5IGxhYmVscyBmb3IgZWFjaCBjb2RlIGFjY29yZGluZyB0byB0aGVcbiAqIHByb3ZpZGVkIGFyZ3VtZW50c1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXR1c0NvZGVzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNpbmd1bGFyXG4gKiBAcGFyYW0geyhzZW50ZW5jZXxsb3dlcnx1cHBlcil9IHNjaGVtYVxuICogQHJldHVybiB7T2JqZWN0fSBBbiBvYmplY3QgbWFwcGluZyBzdGF0dXMgY29kZSB0byBwcmV0dHkgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBwcmV0dHlTdGF0dXNlcyA9IChcblx0c3RhdHVzQ29kZXMsXG5cdHNpbmd1bGFyID0gdHJ1ZSxcblx0c2NoZW1hID0gTGFiZWwuRk9STUFUX1NFTlRFTkNFX0NBU0VcbikgPT4ge1xuXHRpZiAoICEgaXNBcnJheSggc3RhdHVzQ29kZXMgKSApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCAnRXhwZWN0IGluY29taW5nIHN0YXR1c0NvZGVzIGFyZ3VtZW50JyArXG5cdFx0XHQnIHRvIGJlIGFuIGFycmF5JyApO1xuXHR9XG5cdGNvbnN0IG1hcHBlZFN0YXR1c2VzID0ge307XG5cdHN0YXR1c0NvZGVzLmZvckVhY2goICggc3RhdHVzQ29kZSApID0+IHtcblx0XHRtYXBwZWRTdGF0dXNlc1sgc3RhdHVzQ29kZSBdID0gcHJldHR5U3RhdHVzKFxuXHRcdFx0c3RhdHVzQ29kZSxcblx0XHRcdHNpbmd1bGFyLFxuXHRcdFx0c2NoZW1hXG5cdFx0KTtcblx0fSApO1xuXHRyZXR1cm4gbWFwcGVkU3RhdHVzZXM7XG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfQVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcbn0gZnJvbSAnLi4vYmFzZSc7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHR9XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRRdWVyeURhdGEgPSB7XG5cdHF1ZXJ5RGF0YToge1xuXHRcdGxpbWl0OiAyNSxcblx0XHRvcmRlckJ5OiAnc3RhdHVzQ29kZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0FTQyxcblx0fSxcbn07XG5cbi8qKlxuICogVXNlZCB0byBtYXAgYW4gb3JkZXJCeSBzdHJpbmcgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkIGluIGEgUkVTVCBxdWVyeSBmcm9tXG4gKiB0aGUgY29udGV4dCBvZiBhbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JkZXJCeVxuICpcbiAqIEByZXR1cm4geyBzdHJpbmcgfSBSZXR1cm5zIGFuIGFjdHVhbCBvcmRlckJ5IHN0cmluZyBmb3IgdGhlIFJFU1QgcXVlcnkgZm9yXG4gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvdmlkZWQgYWxpYXNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcE9yZGVyQnkgPSAoIG9yZGVyQnkgKSA9PiB7XG5cdGNvbnN0IG9yZGVyQnlNYXAgPSB7XG5cdFx0c3RhdHVzQ29kZTogJ1NUU19jb2RlJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gZXZlbnRzIGVuZHBvaW50IHJlcXVlc3QgdXNpbmcgcHJvdmlkZWRcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGF0dXNUeXBlIFx0SUQgZm9yIHR5cGUgb2YgU3RhdHVzIHRvIHJldHJpZXZlXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgIFRoZSBhc3NlbWJsZWQgd2hlcmUgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9ICggeyBzdGF0dXNUeXBlIH0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGlmICggc3RhdHVzVHlwZSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbU1RTX3R5cGVdPScgKyBzdGF0dXNUeXBlICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG5cbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgTU9ERUxfTkFNRSA9ICd0aWNrZXQnO1xuXG5leHBvcnQgY29uc3QgVElDS0VUX1NUQVRVU19JRCA9IHtcblx0U09MRF9PVVQ6ICdUS1MnLFxuXHRFWFBJUkVEOiAnVEtFJyxcblx0QVJDSElWRUQ6ICdUS0EnLFxuXHRQRU5ESU5HOiAnVEtQJyxcblx0T05TQUxFOiAnVEtPJyxcbn07XG5cbmV4cG9ydCBjb25zdCBUSUNLRVRfU1RBVFVTX0lEUyA9IHZhbHVlcyggVElDS0VUX1NUQVRVU19JRCApO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cy1oZWxwZXInO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG5cdEdSRUFURVJfVEhBTixcblx0R1JFQVRFUl9USEFOX0FORF9FUVVBTCxcblx0TEVTU19USEFOX0FORF9FUVVBTCxcbn0gZnJvbSAnLi4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBub3dEYXRlQW5kVGltZSA9IG1vbWVudCgpO1xuXG4vKipcbiAqIERlc2NyaWJlZCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7e2F0dHJpYnV0ZXM6ICp9fVxuICovXG5leHBvcnQgY29uc3QgcXVlcnlEYXRhVHlwZXMgPSB7XG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBbXG5cdFx0XHQnVEtUX25hbWUnLFxuXHRcdFx0J1RLVF9JRCcsXG5cdFx0XHQnc3RhcnRfZGF0ZScsXG5cdFx0XHQnZW5kX2RhdGUnLFxuXHRcdF0gKSxcblx0XHRvcmRlcjogUHJvcFR5cGVzLm9uZU9mKCBBTExPV0VEX09SREVSX1ZBTFVFUyApLFxuXHRcdHNob3dFeHBpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblx0XHRtb250aDogUHJvcFR5cGVzLm1vbnRoLFxuXHR9ICksXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0XHRzaG93RXhwaXJlZDogYm9vbGVhblxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAnc3RhcnRfZGF0ZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdFx0c2hvd0V4cGlyZWQ6IGZhbHNlLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGEgdGlja2V0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRzdGFydF9kYXRlOiAnVEtUX3N0YXJ0X2RhdGUnLFxuXHRcdGVuZF9kYXRlOiAnVEtUX2VuZF9kYXRlJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gdGlja2V0cyBlbmRwb2ludCByZXF1ZXN0IHVzaW5nIHByb3ZpZGVkXG4gKiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dFeHBpcmVkIFx0V2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBleHBpcmVkIHRpY2tldHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9udGggICAgICAgICAgICBSZXR1cm4gdGlja2V0cyBmb3IgdGhlIGdpdmVuIG1vbnRoLiBDYW4gYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdGluIGFueSBtb250aCBmb3JtYXQgcmVjb2duaXplZCBieSBtb21lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JFdmVudElkICAgIFx0SUQgb2YgRXZlbnQgdG8gcmV0cmlldmUgdGlja2V0cyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JEYXRldGltZUlkICAgIElEIG9mIERhdGV0aW1lIHRvIHJldHJpZXZlIHRpY2tldHMgZm9yXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgIFx0VGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdGZvckV2ZW50SWQgPSAwLFxuXHRmb3JEYXRldGltZUlkID0gMCxcblx0c2hvd0V4cGlyZWQgPSBmYWxzZSxcblx0bW9udGggPSAnbm9uZScsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXHRpZiAoICEgc2hvd0V4cGlyZWQgKSB7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtUS1RfZW5kX2RhdGUqKmV4cGlyZWRdW109JyArIEdSRUFURVJfVEhBTiArXG5cdFx0XHQnJndoZXJlW1RLVF9lbmRfZGF0ZSoqZXhwaXJlZF1bXT0nICtcblx0XHRcdG5vd0RhdGVBbmRUaW1lLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGlmICggbW9udGggJiYgbW9udGggIT09ICdub25lJyApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW1RLVF9zdGFydF9kYXRlXVtdPScgKyBHUkVBVEVSX1RIQU5fQU5EX0VRVUFMICtcblx0XHRcdCcmd2hlcmVbVEtUX3N0YXJ0X2RhdGVdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5zdGFydE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdFx0d2hlcmUucHVzaChcblx0XHRcdCd3aGVyZVtUS1RfZW5kX2RhdGVdW109JyArIExFU1NfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtUS1RfZW5kX2RhdGVdW109JyArXG5cdFx0XHRtb21lbnQoKS5tb250aCggbW9udGggKS5lbmRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGZvckV2ZW50SWQgPSBwYXJzZUludCggZm9yRXZlbnRJZCwgMTAgKTtcblx0aWYgKCBmb3JFdmVudElkICE9PSAwICYmICEgaXNOYU4oIGZvckV2ZW50SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRGF0ZXRpbWUuRXZlbnQuRVZUX0lEXT0nICsgZm9yRXZlbnRJZCApO1xuXHR9XG5cdGZvckRhdGV0aW1lSWQgPSBwYXJzZUludCggZm9yRGF0ZXRpbWVJZCwgMTAgKTtcblx0aWYgKCBmb3JEYXRldGltZUlkICE9PSAwICYmICEgaXNOYU4oIGZvckRhdGV0aW1lSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRGF0ZXRpbWUuRFRUX0lEXT0nICsgZm9yRGF0ZXRpbWVJZCApO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgTU9ERUxfTkFNRSwgVElDS0VUX1NUQVRVU19JRCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9XG4gKi9cbmNvbnN0IGFzc2VydFRpY2tldEVudGl0eSA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRpZiAoICEgaXNNb2RlbEVudGl0eU9mTW9kZWwoIFRpY2tldEVudGl0eSwgTU9ERUxfTkFNRSApICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHQnVGhlIHByb3ZpZGVkIGVudGl0eSBpcyBub3QgYSB0aWNrZXQgaW5zdGFuY2UnXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciBwdXJjaGFzZVxuICovXG5leHBvcnQgY29uc3QgaXNPblNhbGUgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0YXNzZXJ0VGlja2V0RW50aXR5KCBUaWNrZXRFbnRpdHkgKTtcblx0cmV0dXJuICEgaXNBcmNoaXZlZCggVGlja2V0RW50aXR5ICkgJiZcblx0XHRUaWNrZXRFbnRpdHkuc3RhcnREYXRlLmRpZmZOb3coKSA8IDAgJiZcblx0XHRUaWNrZXRFbnRpdHkuZW5kRGF0ZS5kaWZmTm93KCkgPiAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldCBjYW4gbm8gbG9uZ2VyIGJlIHB1cmNoYXNlZFxuICovXG5leHBvcnQgY29uc3QgaXNFeHBpcmVkID0gKCBUaWNrZXRFbnRpdHkgKSA9PiB7XG5cdGFzc2VydFRpY2tldEVudGl0eSggVGlja2V0RW50aXR5ICk7XG5cdHJldHVybiBUaWNrZXRFbnRpdHkuZW5kRGF0ZS5kaWZmTm93KCkgPCAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldHMgc29sZCBtZWV0cyBvciBleGNlZWRzIGF2YWlsYWJsZSBxdWFudGl0eVxuICovXG5leHBvcnQgY29uc3QgaXNTb2xkT3V0ID0gKCBUaWNrZXRFbnRpdHkgKSA9PiB7XG5cdGFzc2VydFRpY2tldEVudGl0eSggVGlja2V0RW50aXR5ICk7XG5cdGNvbnN0IHF0eSA9IFRpY2tldEVudGl0eS5xdHk7XG5cdHJldHVybiAoIHF0eSAhPT0gbnVsbCAmJiBxdHkgIT09ICdJTkYnICYmIHF0eSAhPT0gSW5maW5pdHkgKSAmJlxuXHRcdFRpY2tldEVudGl0eS5zb2xkID49IHF0eTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gXHR0cnVlIGlmIHRpY2tldCBpcyBub3QgeWV0IGF2YWlsYWJsZSBmb3IgcHVyY2hhc2UsXG4gKiBcdFx0XHRcdFx0XHRidXQgd2lsbCBiZSBhdCBzb21lIGRhdGUgaW4gdGhlIGZ1dHVyZVxuICovXG5leHBvcnQgY29uc3QgaXNQZW5kaW5nID0gKCBUaWNrZXRFbnRpdHkgKSA9PiB7XG5cdGFzc2VydFRpY2tldEVudGl0eSggVGlja2V0RW50aXR5ICk7XG5cdHJldHVybiAhIGlzQXJjaGl2ZWQoIFRpY2tldEVudGl0eSApICYmXG5cdFx0VGlja2V0RW50aXR5LnN0YXJ0RGF0ZS5kaWZmTm93KCkgPiAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldCBpcyBhcmNoaXZlZFxuICovXG5leHBvcnQgY29uc3QgaXNBcmNoaXZlZCA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRhc3NlcnRUaWNrZXRFbnRpdHkoIFRpY2tldEVudGl0eSApO1xuXHRyZXR1cm4gVGlja2V0RW50aXR5LmRlbGV0ZWQ7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gc3RhdHVzIElEXG4gKi9cbmV4cG9ydCBjb25zdCBzdGF0dXMgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0YXNzZXJ0VGlja2V0RW50aXR5KCBUaWNrZXRFbnRpdHkgKTtcblx0aWYgKCBpc0FyY2hpdmVkKCBUaWNrZXRFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gVElDS0VUX1NUQVRVU19JRC5BUkNISVZFRDtcblx0fVxuXHRpZiAoIGlzU29sZE91dCggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIFRJQ0tFVF9TVEFUVVNfSUQuU09MRF9PVVQ7XG5cdH1cblx0aWYgKCBpc0V4cGlyZWQoIFRpY2tldEVudGl0eSApICkge1xuXHRcdHJldHVybiBUSUNLRVRfU1RBVFVTX0lELkVYUElSRUQ7XG5cdH1cblx0aWYgKCBpc1BlbmRpbmcoIFRpY2tldEVudGl0eSApICkge1xuXHRcdHJldHVybiBUSUNLRVRfU1RBVFVTX0lELlBFTkRJTkc7XG5cdH1cblx0aWYgKCBpc09uU2FsZSggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIFRJQ0tFVF9TVEFUVVNfSUQuT05TQUxFO1xuXHR9XG5cdHJldHVybiAnJztcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSB0aWNrZXQgc3RhdHVzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUaWNrZXRTdGF0dXNUZXh0TGFiZWwgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0bGV0IHRpY2tldFN0YXR1cyA9ICcnO1xuXHRzd2l0Y2ggKCBzdGF0dXMoIFRpY2tldEVudGl0eSApICkge1xuXHRcdGNhc2UgVElDS0VUX1NUQVRVU19JRC5TT0xEX09VVCA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ3NvbGQgb3V0JywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUSUNLRVRfU1RBVFVTX0lELkVYUElSRUQgOlxuXHRcdFx0dGlja2V0U3RhdHVzID0gX18oICdleHBpcmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUSUNLRVRfU1RBVFVTX0lELlBFTkRJTkcgOlxuXHRcdFx0dGlja2V0U3RhdHVzID0gX18oICdwZW5kaW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUSUNLRVRfU1RBVFVTX0lELk9OU0FMRSA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ29uIHNhbGUnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRJQ0tFVF9TVEFUVVNfSUQuQVJDSElWRUQgOlxuXHRcdFx0dGlja2V0U3RhdHVzID0gX18oICdhcmNoaXZlZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiB0aWNrZXRTdGF0dXM7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgQ1NTIGNsYXNzIGZvciB0aGUgYmFja2dyb3VuZCBjb2xvclxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MgPSAoIFRpY2tldEVudGl0eSApID0+IHtcblx0cmV0dXJuIGBlZS1zdGF0dXMtYmFja2dyb3VuZC1jb2xvci0keyBzdGF0dXMoIFRpY2tldEVudGl0eSApIH1gO1xufTtcbiIsImZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBhcnIyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZDsiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjazsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eTsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2Y7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2ZcIik7XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVyKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIikgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheTsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQ7IiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4vZGVmaW5lUHJvcGVydHlcIik7XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgdmFyIG93bktleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvd25LZXlzID0gb3duS2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSkpO1xuICAgIH1cblxuICAgIG93bktleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0U3ByZWFkOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpO1xuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheTsiLCJmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcikgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lbWl6ZSggZm4sIG9wdGlvbnMgKSB7XG5cdHZhciBzaXplID0gMCxcblx0XHRtYXhTaXplLCBoZWFkLCB0YWlsO1xuXG5cdGlmICggb3B0aW9ucyAmJiBvcHRpb25zLm1heFNpemUgKSB7XG5cdFx0bWF4U2l6ZSA9IG9wdGlvbnMubWF4U2l6ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIG1lbW9pemVkKCAvKiAuLi5hcmdzICovICkge1xuXHRcdHZhciBub2RlID0gaGVhZCxcblx0XHRcdGxlbiA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0XHRhcmdzLCBpO1xuXG5cdFx0c2VhcmNoQ2FjaGU6IHdoaWxlICggbm9kZSApIHtcblx0XHRcdC8vIFBlcmZvcm0gYSBzaGFsbG93IGVxdWFsaXR5IHRlc3QgdG8gY29uZmlybSB0aGF0IHdoZXRoZXIgdGhlIG5vZGVcblx0XHRcdC8vIHVuZGVyIHRlc3QgaXMgYSBjYW5kaWRhdGUgZm9yIHRoZSBhcmd1bWVudHMgcGFzc2VkLiBUd28gYXJyYXlzXG5cdFx0XHQvLyBhcmUgc2hhbGxvd2x5IGVxdWFsIGlmIHRoZWlyIGxlbmd0aCBtYXRjaGVzIGFuZCBlYWNoIGVudHJ5IGlzXG5cdFx0XHQvLyBzdHJpY3RseSBlcXVhbCBiZXR3ZWVuIHRoZSB0d28gc2V0cy4gQXZvaWQgYWJzdHJhY3RpbmcgdG8gYVxuXHRcdFx0Ly8gZnVuY3Rpb24gd2hpY2ggY291bGQgaW5jdXIgYW4gYXJndW1lbnRzIGxlYWtpbmcgZGVvcHRpbWl6YXRpb24uXG5cblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgbm9kZSBhcmd1bWVudHMgbWF0Y2ggYXJndW1lbnRzIGxlbmd0aFxuXHRcdFx0aWYgKCBub2RlLmFyZ3MubGVuZ3RoICE9PSBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRub2RlID0gbm9kZS5uZXh0O1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciBub2RlIGFyZ3VtZW50cyBtYXRjaCBhcmd1bWVudHMgdmFsdWVzXG5cdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRpZiAoIG5vZGUuYXJnc1sgaSBdICE9PSBhcmd1bWVudHNbIGkgXSApIHtcblx0XHRcdFx0XHRub2RlID0gbm9kZS5uZXh0O1xuXHRcdFx0XHRcdGNvbnRpbnVlIHNlYXJjaENhY2hlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEF0IHRoaXMgcG9pbnQgd2UgY2FuIGFzc3VtZSB3ZSd2ZSBmb3VuZCBhIG1hdGNoXG5cblx0XHRcdC8vIFN1cmZhY2UgbWF0Y2hlZCBub2RlIHRvIGhlYWQgaWYgbm90IGFscmVhZHlcblx0XHRcdGlmICggbm9kZSAhPT0gaGVhZCApIHtcblx0XHRcdFx0Ly8gQXMgdGFpbCwgc2hpZnQgdG8gcHJldmlvdXMuIE11c3Qgb25seSBzaGlmdCBpZiBub3QgYWxzb1xuXHRcdFx0XHQvLyBoZWFkLCBzaW5jZSBpZiBib3RoIGhlYWQgYW5kIHRhaWwsIHRoZXJlIGlzIG5vIHByZXZpb3VzLlxuXHRcdFx0XHRpZiAoIG5vZGUgPT09IHRhaWwgKSB7XG5cdFx0XHRcdFx0dGFpbCA9IG5vZGUucHJldjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkanVzdCBzaWJsaW5ncyB0byBwb2ludCB0byBlYWNoIG90aGVyLiBJZiBub2RlIHdhcyB0YWlsLFxuXHRcdFx0XHQvLyB0aGlzIGFsc28gaGFuZGxlcyBuZXcgdGFpbCdzIGVtcHR5IGBuZXh0YCBhc3NpZ25tZW50LlxuXHRcdFx0XHRub2RlLnByZXYubmV4dCA9IG5vZGUubmV4dDtcblx0XHRcdFx0aWYgKCBub2RlLm5leHQgKSB7XG5cdFx0XHRcdFx0bm9kZS5uZXh0LnByZXYgPSBub2RlLnByZXY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRub2RlLm5leHQgPSBoZWFkO1xuXHRcdFx0XHRub2RlLnByZXYgPSBudWxsO1xuXHRcdFx0XHRoZWFkLnByZXYgPSBub2RlO1xuXHRcdFx0XHRoZWFkID0gbm9kZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIGltbWVkaWF0ZWx5XG5cdFx0XHRyZXR1cm4gbm9kZS52YWw7XG5cdFx0fVxuXG5cdFx0Ly8gTm8gY2FjaGVkIHZhbHVlIGZvdW5kLiBDb250aW51ZSB0byBpbnNlcnRpb24gcGhhc2U6XG5cblx0XHQvLyBDcmVhdGUgYSBjb3B5IG9mIGFyZ3VtZW50cyAoYXZvaWQgbGVha2luZyBkZW9wdGltaXphdGlvbilcblx0XHRhcmdzID0gbmV3IEFycmF5KCBsZW4gKTtcblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0bm9kZSA9IHtcblx0XHRcdGFyZ3M6IGFyZ3MsXG5cblx0XHRcdC8vIEdlbmVyYXRlIHRoZSByZXN1bHQgZnJvbSBvcmlnaW5hbCBmdW5jdGlvblxuXHRcdFx0dmFsOiBmbi5hcHBseSggbnVsbCwgYXJncyApXG5cdFx0fTtcblxuXHRcdC8vIERvbid0IG5lZWQgdG8gY2hlY2sgd2hldGhlciBub2RlIGlzIGFscmVhZHkgaGVhZCwgc2luY2UgaXQgd291bGRcblx0XHQvLyBoYXZlIGJlZW4gcmV0dXJuZWQgYWJvdmUgYWxyZWFkeSBpZiBpdCB3YXNcblxuXHRcdC8vIFNoaWZ0IGV4aXN0aW5nIGhlYWQgZG93biBsaXN0XG5cdFx0aWYgKCBoZWFkICkge1xuXHRcdFx0aGVhZC5wcmV2ID0gbm9kZTtcblx0XHRcdG5vZGUubmV4dCA9IGhlYWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIElmIG5vIGhlYWQsIGZvbGxvd3MgdGhhdCB0aGVyZSdzIG5vIHRhaWwgKGF0IGluaXRpYWwgb3IgcmVzZXQpXG5cdFx0XHR0YWlsID0gbm9kZTtcblx0XHR9XG5cblx0XHQvLyBUcmltIHRhaWwgaWYgd2UncmUgcmVhY2hlZCBtYXggc2l6ZSBhbmQgYXJlIHBlbmRpbmcgY2FjaGUgaW5zZXJ0aW9uXG5cdFx0aWYgKCBzaXplID09PSBtYXhTaXplICkge1xuXHRcdFx0dGFpbCA9IHRhaWwucHJldjtcblx0XHRcdHRhaWwubmV4dCA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNpemUrKztcblx0XHR9XG5cblx0XHRoZWFkID0gbm9kZTtcblxuXHRcdHJldHVybiBub2RlLnZhbDtcblx0fVxuXG5cdG1lbW9pemVkLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdFx0aGVhZCA9IG51bGw7XG5cdFx0dGFpbCA9IG51bGw7XG5cdFx0c2l6ZSA9IDA7XG5cdH07XG5cblx0aWYgKCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnICkge1xuXHRcdC8vIENhY2hlIGlzIG5vdCBleHBvc2VkIGluIHRoZSBwdWJsaWMgQVBJLCBidXQgdXNlZCBpbiB0ZXN0cyB0byBlbnN1cmVcblx0XHQvLyBleHBlY3RlZCBsaXN0IHByb2dyZXNzaW9uXG5cdFx0bWVtb2l6ZWQuZ2V0Q2FjaGUgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIGhlYWQsIHRhaWwsIHNpemUgXTtcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIG1lbW9pemVkO1xufTtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAocm9vdCwgcGx1cmFsaXplKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlLlxuICAgIG1vZHVsZS5leHBvcnRzID0gcGx1cmFsaXplKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gQU1ELCByZWdpc3RlcnMgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHBsdXJhbGl6ZSgpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsLlxuICAgIHJvb3QucGx1cmFsaXplID0gcGx1cmFsaXplKCk7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgLy8gUnVsZSBzdG9yYWdlIC0gcGx1cmFsaXplIGFuZCBzaW5ndWxhcml6ZSBuZWVkIHRvIGJlIHJ1biBzZXF1ZW50aWFsbHksXG4gIC8vIHdoaWxlIG90aGVyIHJ1bGVzIGNhbiBiZSBvcHRpbWl6ZWQgdXNpbmcgYW4gb2JqZWN0IGZvciBpbnN0YW50IGxvb2t1cHMuXG4gIHZhciBwbHVyYWxSdWxlcyA9IFtdO1xuICB2YXIgc2luZ3VsYXJSdWxlcyA9IFtdO1xuICB2YXIgdW5jb3VudGFibGVzID0ge307XG4gIHZhciBpcnJlZ3VsYXJQbHVyYWxzID0ge307XG4gIHZhciBpcnJlZ3VsYXJTaW5nbGVzID0ge307XG5cbiAgLyoqXG4gICAqIFNhbml0aXplIGEgcGx1cmFsaXphdGlvbiBydWxlIHRvIGEgdXNhYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtICB7KFJlZ0V4cHxzdHJpbmcpfSBydWxlXG4gICAqIEByZXR1cm4ge1JlZ0V4cH1cbiAgICovXG4gIGZ1bmN0aW9uIHNhbml0aXplUnVsZSAocnVsZSkge1xuICAgIGlmICh0eXBlb2YgcnVsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKCdeJyArIHJ1bGUgKyAnJCcsICdpJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICAvKipcbiAgICogUGFzcyBpbiBhIHdvcmQgdG9rZW4gdG8gcHJvZHVjZSBhIGZ1bmN0aW9uIHRoYXQgY2FuIHJlcGxpY2F0ZSB0aGUgY2FzZSBvblxuICAgKiBhbm90aGVyIHdvcmQuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB3b3JkXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB0b2tlblxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc3RvcmVDYXNlICh3b3JkLCB0b2tlbikge1xuICAgIC8vIFRva2VucyBhcmUgYW4gZXhhY3QgbWF0Y2guXG4gICAgaWYgKHdvcmQgPT09IHRva2VuKSByZXR1cm4gdG9rZW47XG5cbiAgICAvLyBMb3dlciBjYXNlZCB3b3Jkcy4gRS5nLiBcImhlbGxvXCIuXG4gICAgaWYgKHdvcmQgPT09IHdvcmQudG9Mb3dlckNhc2UoKSkgcmV0dXJuIHRva2VuLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBVcHBlciBjYXNlZCB3b3Jkcy4gRS5nLiBcIldISVNLWVwiLlxuICAgIGlmICh3b3JkID09PSB3b3JkLnRvVXBwZXJDYXNlKCkpIHJldHVybiB0b2tlbi50b1VwcGVyQ2FzZSgpO1xuXG4gICAgLy8gVGl0bGUgY2FzZWQgd29yZHMuIEUuZy4gXCJUaXRsZVwiLlxuICAgIGlmICh3b3JkWzBdID09PSB3b3JkWzBdLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiB0b2tlbi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRva2VuLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8vIExvd2VyIGNhc2VkIHdvcmRzLiBFLmcuIFwidGVzdFwiLlxuICAgIHJldHVybiB0b2tlbi50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVycG9sYXRlIGEgcmVnZXhwIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtICB7QXJyYXl9ICBhcmdzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIGludGVycG9sYXRlIChzdHIsIGFyZ3MpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcJChcXGR7MSwyfSkvZywgZnVuY3Rpb24gKG1hdGNoLCBpbmRleCkge1xuICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdIHx8ICcnO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSB3b3JkIHVzaW5nIGEgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSB3b3JkXG4gICAqIEBwYXJhbSAge0FycmF5fSAgcnVsZVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiByZXBsYWNlICh3b3JkLCBydWxlKSB7XG4gICAgcmV0dXJuIHdvcmQucmVwbGFjZShydWxlWzBdLCBmdW5jdGlvbiAobWF0Y2gsIGluZGV4KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGUocnVsZVsxXSwgYXJndW1lbnRzKTtcblxuICAgICAgaWYgKG1hdGNoID09PSAnJykge1xuICAgICAgICByZXR1cm4gcmVzdG9yZUNhc2Uod29yZFtpbmRleCAtIDFdLCByZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdG9yZUNhc2UobWF0Y2gsIHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2FuaXRpemUgYSB3b3JkIGJ5IHBhc3NpbmcgaW4gdGhlIHdvcmQgYW5kIHNhbml0aXphdGlvbiBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIHRva2VuXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB3b3JkXG4gICAqIEBwYXJhbSAge0FycmF5fSAgICBydWxlc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBzYW5pdGl6ZVdvcmQgKHRva2VuLCB3b3JkLCBydWxlcykge1xuICAgIC8vIEVtcHR5IHN0cmluZyBvciBkb2Vzbid0IG5lZWQgZml4aW5nLlxuICAgIGlmICghdG9rZW4ubGVuZ3RoIHx8IHVuY291bnRhYmxlcy5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcbiAgICAgIHJldHVybiB3b3JkO1xuICAgIH1cblxuICAgIHZhciBsZW4gPSBydWxlcy5sZW5ndGg7XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHNhbml0aXphdGlvbiBydWxlcyBhbmQgdXNlIHRoZSBmaXJzdCBvbmUgdG8gbWF0Y2guXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICB2YXIgcnVsZSA9IHJ1bGVzW2xlbl07XG5cbiAgICAgIGlmIChydWxlWzBdLnRlc3Qod29yZCkpIHJldHVybiByZXBsYWNlKHdvcmQsIHJ1bGUpO1xuICAgIH1cblxuICAgIHJldHVybiB3b3JkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSB3b3JkIHdpdGggdGhlIHVwZGF0ZWQgd29yZC5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgIHJlcGxhY2VNYXBcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgIGtlZXBNYXBcbiAgICogQHBhcmFtICB7QXJyYXl9ICAgIHJ1bGVzXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZVdvcmQgKHJlcGxhY2VNYXAsIGtlZXBNYXAsIHJ1bGVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh3b3JkKSB7XG4gICAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdG9rZW4gYW5kIGNhc2UgcmVzdG9yYXRpb24gZnVuY3Rpb25zLlxuICAgICAgdmFyIHRva2VuID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAvLyBDaGVjayBhZ2FpbnN0IHRoZSBrZWVwIG9iamVjdCBtYXAuXG4gICAgICBpZiAoa2VlcE1hcC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVDYXNlKHdvcmQsIHRva2VuKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYWdhaW5zdCB0aGUgcmVwbGFjZW1lbnQgbWFwIGZvciBhIGRpcmVjdCB3b3JkIHJlcGxhY2VtZW50LlxuICAgICAgaWYgKHJlcGxhY2VNYXAuaGFzT3duUHJvcGVydHkodG9rZW4pKSB7XG4gICAgICAgIHJldHVybiByZXN0b3JlQ2FzZSh3b3JkLCByZXBsYWNlTWFwW3Rva2VuXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJ1biBhbGwgdGhlIHJ1bGVzIGFnYWluc3QgdGhlIHdvcmQuXG4gICAgICByZXR1cm4gc2FuaXRpemVXb3JkKHRva2VuLCB3b3JkLCBydWxlcyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHdvcmQgaXMgcGFydCBvZiB0aGUgbWFwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2tXb3JkIChyZXBsYWNlTWFwLCBrZWVwTWFwLCBydWxlcywgYm9vbCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAod29yZCkge1xuICAgICAgdmFyIHRva2VuID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAoa2VlcE1hcC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHJlcGxhY2VNYXAuaGFzT3duUHJvcGVydHkodG9rZW4pKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiBzYW5pdGl6ZVdvcmQodG9rZW4sIHRva2VuLCBydWxlcykgPT09IHRva2VuO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUGx1cmFsaXplIG9yIHNpbmd1bGFyaXplIGEgd29yZCBiYXNlZCBvbiB0aGUgcGFzc2VkIGluIGNvdW50LlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICB3b3JkICAgICAgVGhlIHdvcmQgdG8gcGx1cmFsaXplXG4gICAqIEBwYXJhbSAge251bWJlcn0gIGNvdW50ICAgICBIb3cgbWFueSBvZiB0aGUgd29yZCBleGlzdFxuICAgKiBAcGFyYW0gIHtib29sZWFufSBpbmNsdXNpdmUgV2hldGhlciB0byBwcmVmaXggd2l0aCB0aGUgbnVtYmVyIChlLmcuIDMgZHVja3MpXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIHBsdXJhbGl6ZSAod29yZCwgY291bnQsIGluY2x1c2l2ZSkge1xuICAgIHZhciBwbHVyYWxpemVkID0gY291bnQgPT09IDFcbiAgICAgID8gcGx1cmFsaXplLnNpbmd1bGFyKHdvcmQpIDogcGx1cmFsaXplLnBsdXJhbCh3b3JkKTtcblxuICAgIHJldHVybiAoaW5jbHVzaXZlID8gY291bnQgKyAnICcgOiAnJykgKyBwbHVyYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsdXJhbGl6ZSBhIHdvcmQuXG4gICAqXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHBsdXJhbGl6ZS5wbHVyYWwgPSByZXBsYWNlV29yZChcbiAgICBpcnJlZ3VsYXJTaW5nbGVzLCBpcnJlZ3VsYXJQbHVyYWxzLCBwbHVyYWxSdWxlc1xuICApO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHdvcmQgaXMgcGx1cmFsLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBwbHVyYWxpemUuaXNQbHVyYWwgPSBjaGVja1dvcmQoXG4gICAgaXJyZWd1bGFyU2luZ2xlcywgaXJyZWd1bGFyUGx1cmFscywgcGx1cmFsUnVsZXNcbiAgKTtcblxuICAvKipcbiAgICogU2luZ3VsYXJpemUgYSB3b3JkLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBwbHVyYWxpemUuc2luZ3VsYXIgPSByZXBsYWNlV29yZChcbiAgICBpcnJlZ3VsYXJQbHVyYWxzLCBpcnJlZ3VsYXJTaW5nbGVzLCBzaW5ndWxhclJ1bGVzXG4gICk7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgd29yZCBpcyBzaW5ndWxhci5cbiAgICpcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgcGx1cmFsaXplLmlzU2luZ3VsYXIgPSBjaGVja1dvcmQoXG4gICAgaXJyZWd1bGFyUGx1cmFscywgaXJyZWd1bGFyU2luZ2xlcywgc2luZ3VsYXJSdWxlc1xuICApO1xuXG4gIC8qKlxuICAgKiBBZGQgYSBwbHVyYWxpemF0aW9uIHJ1bGUgdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBydWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICByZXBsYWNlbWVudFxuICAgKi9cbiAgcGx1cmFsaXplLmFkZFBsdXJhbFJ1bGUgPSBmdW5jdGlvbiAocnVsZSwgcmVwbGFjZW1lbnQpIHtcbiAgICBwbHVyYWxSdWxlcy5wdXNoKFtzYW5pdGl6ZVJ1bGUocnVsZSksIHJlcGxhY2VtZW50XSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpbmd1bGFyaXphdGlvbiBydWxlIHRvIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcnVsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgcmVwbGFjZW1lbnRcbiAgICovXG4gIHBsdXJhbGl6ZS5hZGRTaW5ndWxhclJ1bGUgPSBmdW5jdGlvbiAocnVsZSwgcmVwbGFjZW1lbnQpIHtcbiAgICBzaW5ndWxhclJ1bGVzLnB1c2goW3Nhbml0aXplUnVsZShydWxlKSwgcmVwbGFjZW1lbnRdKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGFuIHVuY291bnRhYmxlIHdvcmQgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHdvcmRcbiAgICovXG4gIHBsdXJhbGl6ZS5hZGRVbmNvdW50YWJsZVJ1bGUgPSBmdW5jdGlvbiAod29yZCkge1xuICAgIGlmICh0eXBlb2Ygd29yZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHVuY291bnRhYmxlc1t3b3JkLnRvTG93ZXJDYXNlKCldID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZXQgc2luZ3VsYXIgYW5kIHBsdXJhbCByZWZlcmVuY2VzIGZvciB0aGUgd29yZC5cbiAgICBwbHVyYWxpemUuYWRkUGx1cmFsUnVsZSh3b3JkLCAnJDAnKTtcbiAgICBwbHVyYWxpemUuYWRkU2luZ3VsYXJSdWxlKHdvcmQsICckMCcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gaXJyZWd1bGFyIHdvcmQgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpbmdsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGx1cmFsXG4gICAqL1xuICBwbHVyYWxpemUuYWRkSXJyZWd1bGFyUnVsZSA9IGZ1bmN0aW9uIChzaW5nbGUsIHBsdXJhbCkge1xuICAgIHBsdXJhbCA9IHBsdXJhbC50b0xvd2VyQ2FzZSgpO1xuICAgIHNpbmdsZSA9IHNpbmdsZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaXJyZWd1bGFyU2luZ2xlc1tzaW5nbGVdID0gcGx1cmFsO1xuICAgIGlycmVndWxhclBsdXJhbHNbcGx1cmFsXSA9IHNpbmdsZTtcbiAgfTtcblxuICAvKipcbiAgICogSXJyZWd1bGFyIHJ1bGVzLlxuICAgKi9cbiAgW1xuICAgIC8vIFByb25vdW5zLlxuICAgIFsnSScsICd3ZSddLFxuICAgIFsnbWUnLCAndXMnXSxcbiAgICBbJ2hlJywgJ3RoZXknXSxcbiAgICBbJ3NoZScsICd0aGV5J10sXG4gICAgWyd0aGVtJywgJ3RoZW0nXSxcbiAgICBbJ215c2VsZicsICdvdXJzZWx2ZXMnXSxcbiAgICBbJ3lvdXJzZWxmJywgJ3lvdXJzZWx2ZXMnXSxcbiAgICBbJ2l0c2VsZicsICd0aGVtc2VsdmVzJ10sXG4gICAgWydoZXJzZWxmJywgJ3RoZW1zZWx2ZXMnXSxcbiAgICBbJ2hpbXNlbGYnLCAndGhlbXNlbHZlcyddLFxuICAgIFsndGhlbXNlbGYnLCAndGhlbXNlbHZlcyddLFxuICAgIFsnaXMnLCAnYXJlJ10sXG4gICAgWyd3YXMnLCAnd2VyZSddLFxuICAgIFsnaGFzJywgJ2hhdmUnXSxcbiAgICBbJ3RoaXMnLCAndGhlc2UnXSxcbiAgICBbJ3RoYXQnLCAndGhvc2UnXSxcbiAgICAvLyBXb3JkcyBlbmRpbmcgaW4gd2l0aCBhIGNvbnNvbmFudCBhbmQgYG9gLlxuICAgIFsnZWNobycsICdlY2hvZXMnXSxcbiAgICBbJ2RpbmdvJywgJ2RpbmdvZXMnXSxcbiAgICBbJ3ZvbGNhbm8nLCAndm9sY2Fub2VzJ10sXG4gICAgWyd0b3JuYWRvJywgJ3Rvcm5hZG9lcyddLFxuICAgIFsndG9ycGVkbycsICd0b3JwZWRvZXMnXSxcbiAgICAvLyBFbmRzIHdpdGggYHVzYC5cbiAgICBbJ2dlbnVzJywgJ2dlbmVyYSddLFxuICAgIFsndmlzY3VzJywgJ3Zpc2NlcmEnXSxcbiAgICAvLyBFbmRzIHdpdGggYG1hYC5cbiAgICBbJ3N0aWdtYScsICdzdGlnbWF0YSddLFxuICAgIFsnc3RvbWEnLCAnc3RvbWF0YSddLFxuICAgIFsnZG9nbWEnLCAnZG9nbWF0YSddLFxuICAgIFsnbGVtbWEnLCAnbGVtbWF0YSddLFxuICAgIFsnc2NoZW1hJywgJ3NjaGVtYXRhJ10sXG4gICAgWydhbmF0aGVtYScsICdhbmF0aGVtYXRhJ10sXG4gICAgLy8gT3RoZXIgaXJyZWd1bGFyIHJ1bGVzLlxuICAgIFsnb3gnLCAnb3hlbiddLFxuICAgIFsnYXhlJywgJ2F4ZXMnXSxcbiAgICBbJ2RpZScsICdkaWNlJ10sXG4gICAgWyd5ZXMnLCAneWVzZXMnXSxcbiAgICBbJ2Zvb3QnLCAnZmVldCddLFxuICAgIFsnZWF2ZScsICdlYXZlcyddLFxuICAgIFsnZ29vc2UnLCAnZ2Vlc2UnXSxcbiAgICBbJ3Rvb3RoJywgJ3RlZXRoJ10sXG4gICAgWydxdWl6JywgJ3F1aXp6ZXMnXSxcbiAgICBbJ2h1bWFuJywgJ2h1bWFucyddLFxuICAgIFsncHJvb2YnLCAncHJvb2ZzJ10sXG4gICAgWydjYXJ2ZScsICdjYXJ2ZXMnXSxcbiAgICBbJ3ZhbHZlJywgJ3ZhbHZlcyddLFxuICAgIFsnbG9vZXknLCAnbG9vaWVzJ10sXG4gICAgWyd0aGllZicsICd0aGlldmVzJ10sXG4gICAgWydncm9vdmUnLCAnZ3Jvb3ZlcyddLFxuICAgIFsncGlja2F4ZScsICdwaWNrYXhlcyddLFxuICAgIFsncGFzc2VyYnknLCAncGFzc2Vyc2J5J11cbiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZS5hZGRJcnJlZ3VsYXJSdWxlKHJ1bGVbMF0sIHJ1bGVbMV0pO1xuICB9KTtcblxuICAvKipcbiAgICogUGx1cmFsaXphdGlvbiBydWxlcy5cbiAgICovXG4gIFtcbiAgICBbL3M/JC9pLCAncyddLFxuICAgIFsvW15cXHUwMDAwLVxcdTAwN0ZdJC9pLCAnJDAnXSxcbiAgICBbLyhbXmFlaW91XWVzZSkkL2ksICckMSddLFxuICAgIFsvKGF4fHRlc3QpaXMkL2ksICckMWVzJ10sXG4gICAgWy8oYWxpYXN8W15hb3VddXN8dFtsbV1hc3xnYXN8cmlzKSQvaSwgJyQxZXMnXSxcbiAgICBbLyhlW21uXXUpcz8kL2ksICckMXMnXSxcbiAgICBbLyhbXmxdaWFzfFthZWlvdV1sYXN8W2VqenJdYXN8W2l1XWFtKSQvaSwgJyQxJ10sXG4gICAgWy8oYWx1bW58c3lsbGFifHZpcnxyYWRpfG51Y2xlfGZ1bmd8Y2FjdHxzdGltdWx8dGVybWlufGJhY2lsbHxmb2N8dXRlcnxsb2N8c3RyYXQpKD86dXN8aSkkL2ksICckMWknXSxcbiAgICBbLyhhbHVtbnxhbGd8dmVydGVicikoPzphfGFlKSQvaSwgJyQxYWUnXSxcbiAgICBbLyhzZXJhcGh8Y2hlcnViKSg/OmltKT8kL2ksICckMWltJ10sXG4gICAgWy8oaGVyfGF0fGdyKW8kL2ksICckMW9lcyddLFxuICAgIFsvKGFnZW5kfGFkZGVuZHxtaWxsZW5uaXxkYXR8ZXh0cmVtfGJhY3Rlcml8ZGVzaWRlcmF0fHN0cmF0fGNhbmRlbGFicnxlcnJhdHxvdnxzeW1wb3NpfGN1cnJpY3VsfGF1dG9tYXR8cXVvcikoPzphfHVtKSQvaSwgJyQxYSddLFxuICAgIFsvKGFwaGVsaXxoeXBlcmJhdHxwZXJpaGVsaXxhc3luZGV0fG5vdW1lbnxwaGVub21lbnxjcml0ZXJpfG9yZ2FufHByb2xlZ29tZW58aGVkcnxhdXRvbWF0KSg/OmF8b24pJC9pLCAnJDFhJ10sXG4gICAgWy9zaXMkL2ksICdzZXMnXSxcbiAgICBbLyg/Oihrbml8d2l8bGkpZmV8KGFyfGx8ZWF8ZW98b2F8aG9vKWYpJC9pLCAnJDEkMnZlcyddLFxuICAgIFsvKFteYWVpb3V5XXxxdSl5JC9pLCAnJDFpZXMnXSxcbiAgICBbLyhbXmNoXVtpZW9dW2xuXSlleSQvaSwgJyQxaWVzJ10sXG4gICAgWy8oeHxjaHxzc3xzaHx6eikkL2ksICckMWVzJ10sXG4gICAgWy8obWF0cnxjb2R8bXVyfHNpbHx2ZXJ0fGluZHxhcHBlbmQpKD86aXh8ZXgpJC9pLCAnJDFpY2VzJ10sXG4gICAgWy9cXGIoKD86dGl0KT9tfGwpKD86aWNlfG91c2UpJC9pLCAnJDFpY2UnXSxcbiAgICBbLyhwZSkoPzpyc29ufG9wbGUpJC9pLCAnJDFvcGxlJ10sXG4gICAgWy8oY2hpbGQpKD86cmVuKT8kL2ksICckMXJlbiddLFxuICAgIFsvZWF1eCQvaSwgJyQwJ10sXG4gICAgWy9tW2FlXW4kL2ksICdtZW4nXSxcbiAgICBbJ3Rob3UnLCAneW91J11cbiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZS5hZGRQbHVyYWxSdWxlKHJ1bGVbMF0sIHJ1bGVbMV0pO1xuICB9KTtcblxuICAvKipcbiAgICogU2luZ3VsYXJpemF0aW9uIHJ1bGVzLlxuICAgKi9cbiAgW1xuICAgIFsvcyQvaSwgJyddLFxuICAgIFsvKHNzKSQvaSwgJyQxJ10sXG4gICAgWy8od2l8a25pfCg/OmFmdGVyfGhhbGZ8aGlnaHxsb3d8bWlkfG5vbnxuaWdodHxbXlxcd118XilsaSl2ZXMkL2ksICckMWZlJ10sXG4gICAgWy8oYXJ8KD86d298W2FlXSlsfFtlb11bYW9dKXZlcyQvaSwgJyQxZiddLFxuICAgIFsvaWVzJC9pLCAneSddLFxuICAgIFsvXFxiKFtwbF18em9tYnwoPzpuZWNrfGNyb3NzKT90fGNvbGx8ZmFlcnxmb29kfGdlbnxnb29ufGdyb3VwfGxhc3N8dGFsa3xnb2FsfGN1dClpZXMkL2ksICckMWllJ10sXG4gICAgWy9cXGIobW9ufHNtaWwpaWVzJC9pLCAnJDFleSddLFxuICAgIFsvXFxiKCg/OnRpdCk/bXxsKWljZSQvaSwgJyQxb3VzZSddLFxuICAgIFsvKHNlcmFwaHxjaGVydWIpaW0kL2ksICckMSddLFxuICAgIFsvKHh8Y2h8c3N8c2h8enp8dHRvfGdvfGNob3xhbGlhc3xbXmFvdV11c3x0W2xtXWFzfGdhc3woPzpoZXJ8YXR8Z3Ipb3xbYWVpb3VdcmlzKSg/OmVzKT8kL2ksICckMSddLFxuICAgIFsvKGFuYWx5fGRpYWdub3xwYXJlbnRoZXxwcm9nbm98c3lub3B8dGhlfGVtcGhhfGNyaXxuZSkoPzpzaXN8c2VzKSQvaSwgJyQxc2lzJ10sXG4gICAgWy8obW92aWV8dHdlbHZlfGFidXNlfGVbbW5ddSlzJC9pLCAnJDEnXSxcbiAgICBbLyh0ZXN0KSg/OmlzfGVzKSQvaSwgJyQxaXMnXSxcbiAgICBbLyhhbHVtbnxzeWxsYWJ8dmlyfHJhZGl8bnVjbGV8ZnVuZ3xjYWN0fHN0aW11bHx0ZXJtaW58YmFjaWxsfGZvY3x1dGVyfGxvY3xzdHJhdCkoPzp1c3xpKSQvaSwgJyQxdXMnXSxcbiAgICBbLyhhZ2VuZHxhZGRlbmR8bWlsbGVubml8ZGF0fGV4dHJlbXxiYWN0ZXJpfGRlc2lkZXJhdHxzdHJhdHxjYW5kZWxhYnJ8ZXJyYXR8b3Z8c3ltcG9zaXxjdXJyaWN1bHxxdW9yKWEkL2ksICckMXVtJ10sXG4gICAgWy8oYXBoZWxpfGh5cGVyYmF0fHBlcmloZWxpfGFzeW5kZXR8bm91bWVufHBoZW5vbWVufGNyaXRlcml8b3JnYW58cHJvbGVnb21lbnxoZWRyfGF1dG9tYXQpYSQvaSwgJyQxb24nXSxcbiAgICBbLyhhbHVtbnxhbGd8dmVydGVicilhZSQvaSwgJyQxYSddLFxuICAgIFsvKGNvZHxtdXJ8c2lsfHZlcnR8aW5kKWljZXMkL2ksICckMWV4J10sXG4gICAgWy8obWF0cnxhcHBlbmQpaWNlcyQvaSwgJyQxaXgnXSxcbiAgICBbLyhwZSkocnNvbnxvcGxlKSQvaSwgJyQxcnNvbiddLFxuICAgIFsvKGNoaWxkKXJlbiQvaSwgJyQxJ10sXG4gICAgWy8oZWF1KXg/JC9pLCAnJDEnXSxcbiAgICBbL21lbiQvaSwgJ21hbiddXG4gIF0uZm9yRWFjaChmdW5jdGlvbiAocnVsZSkge1xuICAgIHJldHVybiBwbHVyYWxpemUuYWRkU2luZ3VsYXJSdWxlKHJ1bGVbMF0sIHJ1bGVbMV0pO1xuICB9KTtcblxuICAvKipcbiAgICogVW5jb3VudGFibGUgcnVsZXMuXG4gICAqL1xuICBbXG4gICAgLy8gU2luZ3VsYXIgd29yZHMgd2l0aCBubyBwbHVyYWxzLlxuICAgICdhZHVsdGhvb2QnLFxuICAgICdhZHZpY2UnLFxuICAgICdhZ2VuZGEnLFxuICAgICdhaWQnLFxuICAgICdhaXJjcmFmdCcsXG4gICAgJ2FsY29ob2wnLFxuICAgICdhbW1vJyxcbiAgICAnYW5hbHl0aWNzJyxcbiAgICAnYW5pbWUnLFxuICAgICdhdGhsZXRpY3MnLFxuICAgICdhdWRpbycsXG4gICAgJ2Jpc29uJyxcbiAgICAnYmxvb2QnLFxuICAgICdicmVhbScsXG4gICAgJ2J1ZmZhbG8nLFxuICAgICdidXR0ZXInLFxuICAgICdjYXJwJyxcbiAgICAnY2FzaCcsXG4gICAgJ2NoYXNzaXMnLFxuICAgICdjaGVzcycsXG4gICAgJ2Nsb3RoaW5nJyxcbiAgICAnY29kJyxcbiAgICAnY29tbWVyY2UnLFxuICAgICdjb29wZXJhdGlvbicsXG4gICAgJ2NvcnBzJyxcbiAgICAnZGVicmlzJyxcbiAgICAnZGlhYmV0ZXMnLFxuICAgICdkaWdlc3Rpb24nLFxuICAgICdlbGsnLFxuICAgICdlbmVyZ3knLFxuICAgICdlcXVpcG1lbnQnLFxuICAgICdleGNyZXRpb24nLFxuICAgICdleHBlcnRpc2UnLFxuICAgICdmaXJtd2FyZScsXG4gICAgJ2Zsb3VuZGVyJyxcbiAgICAnZnVuJyxcbiAgICAnZ2FsbG93cycsXG4gICAgJ2dhcmJhZ2UnLFxuICAgICdncmFmZml0aScsXG4gICAgJ2hhcmR3YXJlJyxcbiAgICAnaGVhZHF1YXJ0ZXJzJyxcbiAgICAnaGVhbHRoJyxcbiAgICAnaGVycGVzJyxcbiAgICAnaGlnaGppbmtzJyxcbiAgICAnaG9tZXdvcmsnLFxuICAgICdob3VzZXdvcmsnLFxuICAgICdpbmZvcm1hdGlvbicsXG4gICAgJ2plYW5zJyxcbiAgICAnanVzdGljZScsXG4gICAgJ2t1ZG9zJyxcbiAgICAnbGFib3VyJyxcbiAgICAnbGl0ZXJhdHVyZScsXG4gICAgJ21hY2hpbmVyeScsXG4gICAgJ21hY2tlcmVsJyxcbiAgICAnbWFpbCcsXG4gICAgJ21lZGlhJyxcbiAgICAnbWV3cycsXG4gICAgJ21vb3NlJyxcbiAgICAnbXVzaWMnLFxuICAgICdtdWQnLFxuICAgICdtYW5nYScsXG4gICAgJ25ld3MnLFxuICAgICdvbmx5JyxcbiAgICAncGVyc29ubmVsJyxcbiAgICAncGlrZScsXG4gICAgJ3BsYW5rdG9uJyxcbiAgICAncGxpZXJzJyxcbiAgICAncG9saWNlJyxcbiAgICAncG9sbHV0aW9uJyxcbiAgICAncHJlbWlzZXMnLFxuICAgICdyYWluJyxcbiAgICAncmVzZWFyY2gnLFxuICAgICdyaWNlJyxcbiAgICAnc2FsbW9uJyxcbiAgICAnc2Npc3NvcnMnLFxuICAgICdzZXJpZXMnLFxuICAgICdzZXdhZ2UnLFxuICAgICdzaGFtYmxlcycsXG4gICAgJ3NocmltcCcsXG4gICAgJ3NvZnR3YXJlJyxcbiAgICAnc3BlY2llcycsXG4gICAgJ3N0YWZmJyxcbiAgICAnc3dpbmUnLFxuICAgICd0ZW5uaXMnLFxuICAgICd0cmFmZmljJyxcbiAgICAndHJhbnNwb3J0YXRpb24nLFxuICAgICd0cm91dCcsXG4gICAgJ3R1bmEnLFxuICAgICd3ZWFsdGgnLFxuICAgICd3ZWxmYXJlJyxcbiAgICAnd2hpdGluZycsXG4gICAgJ3dpbGRlYmVlc3QnLFxuICAgICd3aWxkbGlmZScsXG4gICAgJ3lvdScsXG4gICAgL3Bva1tlw6ldbW9uJC9pLFxuICAgIC8vIFJlZ2V4ZXMuXG4gICAgL1teYWVpb3VdZXNlJC9pLCAvLyBcImNoaW5lc2VcIiwgXCJqYXBhbmVzZVwiXG4gICAgL2RlZXIkL2ksIC8vIFwiZGVlclwiLCBcInJlaW5kZWVyXCJcbiAgICAvZmlzaCQvaSwgLy8gXCJmaXNoXCIsIFwiYmxvd2Zpc2hcIiwgXCJhbmdlbGZpc2hcIlxuICAgIC9tZWFzbGVzJC9pLFxuICAgIC9vW2l1XXMkL2ksIC8vIFwiY2Fybml2b3JvdXNcIlxuICAgIC9wb3gkL2ksIC8vIFwiY2hpY2twb3hcIiwgXCJzbWFsbHBveFwiXG4gICAgL3NoZWVwJC9pXG4gIF0uZm9yRWFjaChwbHVyYWxpemUuYWRkVW5jb3VudGFibGVSdWxlKTtcblxuICByZXR1cm4gcGx1cmFsaXplO1xufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gIC8qIGdsb2JhbCBTeW1ib2wgKi9cbiAgdmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxuICAgKlxuICAgKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAgICpcbiAgICogICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTtcbiAgICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcbiAgICogICAgICAgLi4uXG4gICAqICAgICB9XG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbWF5YmVJdGVyYWJsZVxuICAgKiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gICAqL1xuICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXG4gICAqIHN1cHBsaWVkIHRvIFJlYWN0IGNvbXBvbmVudHMuIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcbiAgICogICB2YXIgTXlBcnRpY2xlID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICAgcHJvcFR5cGVzOiB7XG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFwiZGVzY3JpcHRpb25cIi5cbiAgICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZyxcbiAgICpcbiAgICogICAgICAgLy8gQSByZXF1aXJlZCBlbnVtIHByb3AgbmFtZWQgXCJjYXRlZ29yeVwiLlxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcHJvcCBuYW1lZCBcImRpYWxvZ1wiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxuICAgKiAgICAgICBkaWFsb2c6IFByb3BzLmluc3RhbmNlT2YoRGlhbG9nKS5pc1JlcXVpcmVkXG4gICAqICAgICB9LFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cbiAgICogICB9KTtcbiAgICpcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxuICAgKlxuICAgKiAgIHR5cGUgOj0gYXJyYXl8Ym9vbHxmdW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0YW5jZU9mKC4uLilcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XG4gICAqXG4gICAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXNcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiAgdmFyIE15TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgcHJvcFR5cGVzOiB7XG4gICAqICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIG9yIFVSSSBwcm9wIG5hbWVkIFwiaHJlZlwiLlxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgKiAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJvcFZhbHVlICE9PSAnc3RyaW5nJyAmJlxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xuICAgKiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgKiAgICAgICAgICAgICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcgaW4gJyArXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgKiAgICAgICAgICApO1xuICAgKiAgICAgICAgfVxuICAgKiAgICAgIH1cbiAgICogICAgfSxcbiAgICogICAgcmVuZGVyOiBmdW5jdGlvbigpIHsuLi59XG4gICAqICB9KTtcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuXG4gIHZhciBBTk9OWU1PVVMgPSAnPDxhbm9ueW1vdXM+Pic7XG5cbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2FycmF5JyksXG4gICAgYm9vbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4nKSxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcbiAgICBudW1iZXI6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdudW1iZXInKSxcbiAgICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdvYmplY3QnKSxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcbiAgICBzeW1ib2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzeW1ib2wnKSxcblxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcbiAgICBhcnJheU9mOiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIsXG4gICAgZWxlbWVudDogY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCksXG4gICAgZWxlbWVudFR5cGU6IGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSxcbiAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXG4gICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlcixcbiAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXG4gICAgZXhhY3Q6IGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIsXG4gIH07XG5cbiAgLyoqXG4gICAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gICAqL1xuICAvKmVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSovXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICAgIHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cbiAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gICAgfVxuICB9XG4gIC8qZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuXG4gIC8qKlxuICAgKiBXZSB1c2UgYW4gRXJyb3ItbGlrZSBvYmplY3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVvcGxlIG1heSBjYWxsXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXG4gICAqIEVycm9ycyBhbnltb3JlLiBXZSBkb24ndCBpbnNwZWN0IHRoZWlyIHN0YWNrIGFueXdheSwgYW5kIGNyZWF0aW5nIHRoZW1cbiAgICogaXMgcHJvaGliaXRpdmVseSBleHBlbnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0ZW4sIHN1Y2ggYXMgd2hhdFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXG4gICAqL1xuICBmdW5jdGlvbiBQcm9wVHlwZUVycm9yKG1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCkgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tXG4gICAgICAvLyBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArICBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhzaGFwZVR5cGVzKSwgbnVsbCwgJyAgJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xuICAgIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gIXByb3BWYWx1ZTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4ocHJvcFZhbHVlKTtcbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcbiAgICAgICAgICB2YXIgc3RlcDtcbiAgICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gcHJvcFZhbHVlLmVudHJpZXMpIHtcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc05vZGUoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNOb2RlKGVudHJ5WzFdKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSB7XG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cbiAgICBpZiAocHJvcFR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBmYWxzeSB2YWx1ZSBjYW4ndCBiZSBhIFN5bWJvbFxuICAgIGlmICghcHJvcFZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCdcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhL1xuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxuICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XG4gICAgfVxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHBvc3RmaXhlZCB0byBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCB0eXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgXCJ1bmRlZmluZWRcIiBvciBcIm9mIHR5cGUgYXJyYXlcIlxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiAnYW4gJyArIHR5cGU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlcztcbiAgUmVhY3RQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBjaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZTtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi44LjZcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlO1xudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHxcbiAgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKTtcbn1cblxuLyoqXG4gKiBGb3JrZWQgZnJvbSBmYmpzL3dhcm5pbmc6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmJqcy9ibG9iL2U2NmJhMjBhZDViZTQzM2ViNTQ0MjNmMmIwOTdkODI5MzI0ZDlkZTYvcGFja2FnZXMvZmJqcy9zcmMvX19mb3Jrc19fL3dhcm5pbmcuanNcbiAqXG4gKiBPbmx5IGNoYW5nZSBpcyB3ZSB1c2UgY29uc29sZS53YXJuIGluc3RlYWQgb2YgY29uc29sZS5lcnJvcixcbiAqIGFuZCBkbyBub3RoaW5nIHdoZW4gJ2NvbnNvbGUnIGlzIG5vdCBzdXBwb3J0ZWQuXG4gKiBUaGlzIHJlYWxseSBzaW1wbGlmaWVzIHRoZSBjb2RlLlxuICogLS0tXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIGxvd1ByaW9yaXR5V2FybmluZyA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIHZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xuXG4gIGxvd1ByaW9yaXR5V2FybmluZyA9IGZ1bmN0aW9uIChjb25kaXRpb24sIGZvcm1hdCkge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgbG93UHJpb3JpdHlXYXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgKyAnbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcuYXBwbHkodW5kZWZpbmVkLCBbZm9ybWF0XS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIGxvd1ByaW9yaXR5V2FybmluZyQxID0gbG93UHJpb3JpdHlXYXJuaW5nO1xuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcblxudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7XG5cbi8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7XG4gICAgICBsb3dQcmlvcml0eVdhcm5pbmckMShmYWxzZSwgJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1wiaGVscGVyc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJpMThuXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZhbGlkYXRvcnNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmFsdWVPYmplY3RzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wid3BcIl1bXCJob29rc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJ2ZW5kb3JcIl1bXCJjdWlkXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wibG9kYXNoXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZlbmRvclwiXVtcIm1vbWVudFwiXTsgfSgpKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZWpzLm1vZGVsL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvYXNzZXJ0aW9ucy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2F0dGVuZGVlL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2F0dGVuZGVlL2luZGV4LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvYXR0ZW5kZWUvcXVlcnkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9iYXNlLWRhdGUtZm9ybWF0dGVyLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvYmFzZS5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2NoZWNraW4vY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvY2hlY2tpbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2NoZWNraW4vcXVlcnkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9kYXRldGltZS9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9kYXRldGltZS9mb3JtYXR0ZXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9kYXRldGltZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2RhdGV0aW1lL3F1ZXJ5LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZGF0ZXRpbWUvc3RhdHVzLWhlbHBlci5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2RlZmF1bHQtbW9kZWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbmRwb2ludHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9hc3NlcnRpb25zLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvZW50aXR5LWZhY3RvcnkvYmFzZS1lbnRpdHkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9ib29sZWFucy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L2V4dHJhY3RvcnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9lbnRpdHktZmFjdG9yeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2VudGl0eS1mYWN0b3J5L3ZhbGlkYXRvcnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9ldmVudC9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9ldmVudC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2V2ZW50L3F1ZXJ5LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9tb2RlbC1uYW1lcy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL21vZGVscy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3ByaWNlLXR5cGUvY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvcHJpY2UtdHlwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3ByaW1hcnkta2V5cy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL3JlZ2lzdHJhdGlvbi9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9yZWdpc3RyYXRpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9yZWdpc3RyYXRpb24vcXVlcnkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9zdGF0dXMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvc3RhdHVzL2hlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9zdGF0dXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC9zdGF0dXMvcXVlcnkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL2Fzc2V0cy9zcmMvZGF0YS9tb2RlbC90aWNrZXQvY29uc3RhbnRzLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvdGlja2V0L2luZGV4LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvdGlja2V0L3F1ZXJ5LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9hc3NldHMvc3JjL2RhdGEvbW9kZWwvdGlja2V0L3N0YXR1cy1oZWxwZXIuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL21lbWl6ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9wbHVyYWxpemUvcGx1cmFsaXplLmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovL2VlanMubW9kZWwvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCJdfSIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJoZWxwZXJzXCJdfSIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJpMThuXCJdfSIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2YWxpZGF0b3JzXCJdfSIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2YWx1ZU9iamVjdHNcIl19Iiwid2VicGFjazovL2VlanMubW9kZWwvZXh0ZXJuYWwge1widGhpc1wiOltcIndwXCIsXCJob29rc1wiXX0iLCJ3ZWJwYWNrOi8vZWVqcy5tb2RlbC9leHRlcm5hbCB7XCJ0aGlzXCI6W1wiZWVqc1wiLFwidmVuZG9yXCIsXCJjdWlkXCJdfSIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpcImxvZGFzaFwifSIsIndlYnBhY2s6Ly9lZWpzLm1vZGVsL2V4dGVybmFsIHtcInRoaXNcIjpbXCJlZWpzXCIsXCJ2ZW5kb3JcIixcIm1vbWVudFwiXX0iXSwibmFtZXMiOlsiYXNzZXJ0RW50aXR5SGFzS2V5Iiwia2V5IiwiZW50aXR5IiwibWVzc2FnZSIsInNwcmludGYiLCJfXyIsImhhc093blByb3BlcnR5IiwiRXhjZXB0aW9uIiwiYXNzZXJ0SW1tdXRhYmxlT2JqZWN0SGFzUGF0aCIsInBhdGgiLCJpbW11dGFibGUiLCJoYXNJbiIsImFzc2VydElzQXJyYXkiLCJpdGVtcyIsImlzQXJyYXkiLCJhc3NlcnRJc05vdEVtcHR5IiwiaXNFbXB0eSIsImFzc2VydElzTWFwIiwiaXRlbSIsImlzTWFwIiwiTU9ERUxfTkFNRSIsIm9yZGVyQnlNYXAiLCJpZCIsImxhc3ROYW1lT25seSIsImZpcnN0TmFtZU9ubHkiLCJmaXJzdFRoZW5MYXN0TmFtZSIsImxhc3RUaGVuRmlyc3ROYW1lIiwicXVlcnlEYXRhVHlwZXMiLCJmb3JFdmVudElkIiwiUHJvcFR5cGVzIiwibnVtYmVyIiwiZm9yRGF0ZXRpbWVJZCIsImZvclRpY2tldElkIiwiZm9yU3RhdHVzSWQiLCJvbmVPZiIsIlJFR0lTVFJBVElPTl9TVEFUVVNfSURTIiwiZm9yUmVnaXN0cmF0aW9uSWQiLCJzaG93R3JhdmF0YXIiLCJib29sIiwicXVlcnlEYXRhIiwic2hhcGUiLCJsaW1pdCIsIm9yZGVyQnkiLCJPYmplY3QiLCJrZXlzIiwib3JkZXIiLCJBTExPV0VEX09SREVSX1ZBTFVFUyIsImRlZmF1bHRRdWVyeURhdGEiLCJRVUVSWV9PUkRFUl9BU0MiLCJtYXBPcmRlckJ5IiwiaXNVbmRlZmluZWQiLCJ3aGVyZUNvbmRpdGlvbnMiLCJ3aGVyZSIsInBhcnNlSW50IiwiaXNOYU4iLCJwdXNoIiwiaW5jbHVkZXMiLCJqb2luIiwiZ2V0UXVlcnlTdHJpbmciLCJiYXNlR2V0UXVlcnlTdHJpbmciLCJmb3JtYXREYXRlc09uRW50aXRpZXMiLCJlbnRpdGllcyIsImVudGl0eURhdGVGaWVsZHMiLCJmb3JtYXQiLCJkYXRlRm9ybWF0cyIsImxvY2FsIiwiZm9ybWF0dGVkRW50aXRpZXMiLCJmb3JFYWNoIiwiZm9ybWF0RGF0ZXNPbkVudGl0eSIsIm5ld0VudGl0eSIsImRhdGVGaWVsZCIsImZvcm1hdEVudGl0aWVzRGF0ZXNUb015c3FsIiwiZm9ybWF0RW50aXR5RGF0ZXNUb015c3FsIiwiZm9ybWF0RW50aXRpZXNEYXRlc1RvU2l0ZSIsImZvcm1hdEVudGl0eURhdGVzVG9TaXRlIiwiY29udmVydEVudGl0aWVzRGF0ZXNUb01vbWVudCIsImNvbnZlcnRFbnRpdHlEYXRlc1RvTW9tZW50IiwiUVVFUllfT1JERVJfREVTQyIsIkdSRUFURVJfVEhBTiIsImVuY29kZVVSSUNvbXBvbmVudCIsIkxFU1NfVEhBTiIsIkdSRUFURVJfVEhBTl9BTkRfRVFVQUwiLCJMRVNTX1RIQU5fQU5EX0VRVUFMIiwiZGVmYXVsdFdoZXJlQ29uZGl0aW9ucyIsInF1ZXJ5UGFyYW1zIiwiZmllbGQiLCJxdWVyeVN0cmluZyIsIkNIRUNLSU5fU1RBVFVTX0lEIiwiU1RBVFVTX0NIRUNLRURfT1VUIiwiU1RBVFVTX0NIRUNLRURfSU4iLCJTVEFUVVNfQ0hFQ0tFRF9ORVZFUiIsIkNIRUNLSU5fU1RBVFVTX0lEUyIsInZhbHVlcyIsImNoZWNraW5TdGF0dXMiLCJvcHRpb25zRW50aXR5TWFwIiwiZGVmYXVsdCIsImxhYmVsIiwicHJldHR5U3RhdHVzIiwidmFsdWUiLCJ0aW1lc3RhbXAiLCJEQVRFVElNRV9TVEFUVVNfSUQiLCJBQ1RJVkUiLCJDQU5DRUxMRUQiLCJFWFBJUkVEIiwiSU5BQ1RJVkUiLCJQT1NUUE9ORUQiLCJTT0xEX09VVCIsIlRSQVNIRUQiLCJVUENPTUlORyIsIkRBVEVUSU1FX1NUQVRVU19JRFMiLCJNSU5VVEVfSU5fU0VDT05EUyIsIkhPVVJfSU5fU0VDT05EUyIsIkRBWV9JTl9TRUNPTkRTIiwiV0VFS19JTl9TRUNPTkRTIiwiTU9OVEhfSU5fU0VDT05EUyIsIkRBVEVfRklFTERTIiwiZm9ybWF0dGVycyIsImZvck93biIsImJhc2VGb3JtYXR0ZXIiLCJpbXBsZW1lbnRhdGlvbiIsImZ1bmN0aW9uTmFtZSIsImluY29taW5nQXJncyIsImZpcnN0QXJnIiwicHVsbEF0IiwicHJldHR5RGF0ZUZyb21EYXRlVGltZSIsIkRhdGVUaW1lRW50aXR5IiwiY29udGVudCIsImlzTW9kZWxFbnRpdHlPZk1vZGVsIiwiRFRUX0VWVF9zdGFydCIsImhhc1NhbWUiLCJEVFRfRVZUX2VuZCIsImFsbERhdGVUaW1lc0FzU3RyaW5nIiwiU0VQQVJBVE9SX1NQQUNFX0RBU0hfU1BBQ0UiLCJ0b0Zvcm1hdCIsIkRBVEVfVElNRV9GT1JNQVRfU0lURSIsIlRJTUVfRk9STUFUX1NJVEUiLCJEVFRfbmFtZSIsIm5vd0RhdGVBbmRUaW1lIiwibW9tZW50Iiwic2hvd0V4cGlyZWQiLCJtb250aCIsInN0YXJ0X2RhdGUiLCJlbmRfZGF0ZSIsInN0YXJ0T2YiLCJlbmRPZiIsImFzc2VydERhdGVUaW1lRW50aXR5IiwiVHlwZUVycm9yIiwiaXNWYWxpZEVudGl0eU9yQXJjaGl2ZSIsImluY2x1ZGVUcmFzaGVkIiwiaXNUcmFzaGVkIiwiaXNBY3RpdmUiLCJzdGFydCIsImRpZmZOb3ciLCJhc1NlY29uZHMiLCJlbmQiLCJpc0V4cGlyZWQiLCJpc1JlY2VudGx5RXhwaXJlZCIsImlzU29sZE91dCIsImNhcCIsInJlZ0xpbWl0IiwiSW5maW5pdHkiLCJzb2xkIiwiaXNVcGNvbWluZyIsImRlbGV0ZWQiLCJzdGF0dXMiLCJnZXRCYWNrZ3JvdW5kQ29sb3JDbGFzcyIsImdldERhdGVUaW1lU3RhdHVzVGV4dExhYmVsIiwiZGF0ZVN0YXR1cyIsIm1hcFRvT2JqZWN0VmFsdWVzIiwibW9kZWxOYW1lRW5kcG9pbnRzIiwibWFwVmFsdWVzIiwiZ2V0RGVmYXVsdE1vZGVsRW50aXRpZXNPYmplY3QiLCJtZW1vaXplIiwiZW5kcG9pbnRzIiwiREVGQVVMVF9MSVNUU19TVEFURSIsIkRFRkFVTFRfQ09SRV9TVEFURSIsInJlbGF0aW9ucyIsImRpcnR5IiwiaW5kZXgiLCJkZWxldGUiLCJhZGQiLCJ0cmFzaCIsIkRFRkFVTFRfU0NIRU1BX1NUQVRFIiwic2NoZW1hIiwiZmFjdG9yeSIsInJlbGF0aW9uRW5kcG9pbnRzIiwicmVsYXRpb25TY2hlbWEiLCJkYXRhIiwicGF0aHMiLCJjb2xsZWN0aW9uX2VuZHBvaW50cyIsImJhc2VSZXN0Um91dGUiLCJiYXNlX3Jlc3Rfcm91dGUiLCJnZXRFbmRwb2ludCIsIm1vZGVsTmFtZSIsImFwcGx5UXVlcnlTdHJpbmciLCJzdHJpcEJhc2VSb3V0ZUZyb21VcmwiLCJ1cmwiLCJyZXBsYWNlIiwibWF5YmVBc3NlcnRWYWx1ZU9iamVjdCIsImZpZWxkTmFtZSIsImZpZWxkVmFsdWUiLCJpc0RhdGVUaW1lRmllbGQiLCJEYXRlVGltZSIsImFzc2VydElzRGF0ZVRpbWUiLCJpc01vbmV5RmllbGQiLCJNb25leSIsImFzc2VydE1vbmV5IiwiYXNzZXJ0VmFsaWRTY2hlbWEiLCJpc1NjaGVtYSIsIkludmFsaWRTY2hlbWEiLCJhc3NlcnRWYWxpZFNjaGVtYUZpZWxkUHJvcGVydGllcyIsInR5cGUiLCJwcm9wZXJ0aWVzIiwicmF3IiwiYXNzZXJ0VmFsaWRWYWx1ZUZvclByZXBhcmVkRmllbGQiLCJpbnN0YW5jZSIsImlzVmFsaWQiLCJpc1NoYWxsb3dWYWxpZFZhbHVlRm9yRmllbGQiLCJlbnVtIiwidmFsaWRhdGVFbnVtVHlwZSIsInZhbGlkYXRlVHlwZSIsIm1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zIiwiYXNzZXJ0VmFsaWRGaWVsZEFuZFZhbHVlQWdhaW5zdFNjaGVtYSIsInZhbGlkYXRpb25UeXBlIiwidmFsaWRhdGVUeXBlRm9yRmllbGQiLCJQUklWQVRFX1BST1BFUlRJRVMiLCJTQVZFX1NUQVRFIiwiVkFMSURBVEVfVFlQRVMiLCJCYXNlRW50aXR5IiwiZW50aXR5RmllbGRzQW5kVmFsdWVzIiwiZmllbGRQcmVmaXhlcyIsImlzTmV3IiwiQ0xFQU4iLCJjcmVhdGVHZXR0ZXIiLCJzZXRTYXZlU3RhdGUiLCJORVciLCJTZXQiLCJjcmVhdGVFbnRpdHlHZXR0ZXJzQW5kU2V0dGVycyIsImNyZWF0ZVBlcnNpc3RpbmdHZXR0ZXJzQW5kU2V0dGVycyIsInNlYWwiLCJzYXZlU3RhdGUiLCJESVJUWSIsInByb3RlY3RlZEZpZWxkcyIsImxlbmd0aCIsImluZGV4T2YiLCJrZWVwSWQiLCJjcmVhdGVGYWN0b3J5IiwiY3JlYXRlRW50aXR5RmFjdG9yeSIsIiRzY2hlbWEiLCJjcmVhdGVOZXciLCJmb3JDbG9uZSIsIm5hbWVDbGFzcyIsIm5hbWUiLCJleHRlbmRlZENsYXNzIiwiRW50aXR5IiwidXBwZXJGaXJzdCIsImNhbWVsQ2FzZSIsImNsYXNzRGVmIiwiZmllbGRzQW5kVmFsdWVzIiwiZnJvbUV4aXN0aW5nIiwiaGFzUmF3UHJvcGVydHkiLCJpc1BsYWluT2JqZWN0IiwiaGFzUHJldHR5UHJvcGVydHkiLCJwcmV0dHkiLCJoYXNSZW5kZXJlZFByb3BlcnR5IiwicmVuZGVyZWQiLCJoYXNGb3JtYXRQcm9wZXJ0eSIsImhhc0VudW1Qcm9wZXJ0eSIsImlzVmFsdWVPYmplY3RGaWVsZCIsImlzVVRDRGF0ZVRpbWVGaWVsZCIsImRhdGVUaW1lRmllbGROYW1lIiwiaXNQcmltYXJ5S2V5RmllbGQiLCJwcmltYXJ5X2tleSIsImlzUmVhZE9ubHkiLCJyZWFkb25seSIsImlzRW50aXR5RmllbGQiLCJpc0VudW1GaWVsZCIsIlN5bWJvbCIsIlZBTElEQVRFX1RZUEUiLCJSQVciLCJSRU5ERVJFRCIsIlBSRVRUWSIsIk1PREVMX1BSRUZJWEVTIiwicHJlZml4TWFwIiwiYXBwbHlGaWx0ZXJzIiwiYW5zd2VyIiwiYXR0ZW5kZWUiLCJjaGFuZ2VfbG9nIiwiY2hlY2tpbiIsImNvdW50cnkiLCJjdXJyZW5jeSIsImN1cnJlbmN5X3BheW1lbnRfbWV0aG9kIiwiZGF0ZXRpbWUiLCJkYXRldGltZV90aWNrZXQiLCJldmVudCIsImV2ZW50X21lc3NhZ2VfdGVtcGxhdGUiLCJldmVudF9xdWVzdGlvbl9ncm91cCIsImV2ZW50X3ZlbnVlIiwiZXh0cmFfam9pbiIsImV4dHJhX21ldGEiLCJsaW5lX2l0ZW0iLCJtZXNzYWdlX3RlbXBsYXRlIiwibWVzc2FnZV90ZW1wbGF0ZV9ncm91cCIsInBheW1lbnQiLCJwYXltZW50X21ldGhvZCIsInBvc3RfbWV0YSIsInByaWNlIiwicHJpY2VfdHlwZSIsInF1ZXN0aW9uIiwicXVlc3Rpb25fZ3JvdXAiLCJxdWVzdGlvbl9ncm91cF9xdWVzdGlvbiIsInF1ZXN0aW9uX29wdGlvbiIsInJlY3VycmVuY2UiLCJyZWdpc3RyYXRpb24iLCJyZWdpc3RyYXRpb25fcGF5bWVudCIsInN0YXRlIiwidGVybSIsInRlcm1fcmVsYXRpb25zaGlwIiwidGVybV90YXhvbm9teSIsInRpY2tldCIsInRpY2tldF9wcmljZSIsInRpY2tldF90ZW1wbGF0ZSIsInRyYW5zYWN0aW9uIiwidmVudWUiLCJ3cF91c2VyIiwib3B0cyIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiY3JlYXRlQ2FsbGJhY2tHZXR0ZXIiLCJwcm9wZXJ0eU5hbWUiLCJjYWxsQmFjayIsImNyZWF0ZUdldHRlckFuZFNldHRlciIsImluaXRpYWxGaWVsZFZhbHVlIiwicHJvcGVydHlWYWx1ZSIsInNldCIsInJlY2VpdmVkVmFsdWUiLCJpc1ByaW1hcnlGaWVsZCIsInNldEZpZWxkVG9QZXJzaXN0IiwiY3JlYXRlQWxpYXNHZXR0ZXJBbmRTZXR0ZXIiLCJvcmlnaW5hbEZpZWxkTmFtZSIsImFsaWFzRmllbGROYW1lIiwiY3JlYXRlQWxpYXNHZXR0ZXIiLCJjcmVhdGVGbHVlbnRTZXR0ZXIiLCJwcmltYXJ5S2V5cyIsIm9yaWdpbmFsRmllbGRzQW5kVmFsdWVzIiwiaXNQcmltYXJ5S2V5Iiwic2V0VmFsaWRhdGVUeXBlRm9yRmllbGQiLCJzZXRJbml0aWFsRW50aXR5RmllbGRzQW5kVmFsdWVzIiwic2V0Q2FsY3VsYXRlZEZpZWxkQW5kVmFsdWVzIiwicG9wdWxhdGVQcm90ZWN0ZWRGaWVsZHNQcm9wZXJ0eSIsInNldFJlc291cmNlcyIsImNyZWF0ZVByaW1hcnlLZXlGaWVsZEdldHRlcnMiLCJwb3B1bGF0ZVByaW1hcnlLZXlzIiwicG9wdWxhdGVNaXNzaW5nRmllbGRzIiwiY2FsY3VsYXRlZEZpZWxkcyIsIl9jYWxjdWxhdGVkX2ZpZWxkcyIsIl9wcm90ZWN0ZWQiLCJnZXRQcmltYXJ5S2V5RmllbGRzRnJvbVNjaGVtYSIsInNjaGVtYVByb3BlcnRpZXMiLCJzY2hlbWFGaWVsZCIsImN1aWQiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwiY3JlYXRlQWxpYXNHZXR0ZXJBbmRTZXR0ZXJGb3JGaWVsZCIsImRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkIiwiZ2V0RW50aXR5RmllbGRzRnJvbVNjaGVtYSIsInVuZGVmaW5lZCIsImdldEJhc2VGaWVsZHNBbmRWYWx1ZXNGb3JDbG9uaW5nIiwiZm9yVXBkYXRlIiwiZ2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmciLCJmb3JJbnNlcnQiLCJlbnRpdHlWYWx1ZXMiLCJwcmltYXJ5S2V5IiwiZm9yUGVyc2lzdCIsImdldERlZmF1bHRWYWx1ZUZvckZpZWxkIiwiY3JlYXRlUmF3RW50aXR5R2V0dGVyc1NldHRlcnMiLCJkZXJpdmVQcmVwYXJlZFZhbHVlRm9yRmllbGQiLCJjcmVhdGVSZW5kZXJlZEdldHRlcnMiLCJkZXJpdmVSZW5kZXJlZFZhbHVlIiwiY3JlYXRlQWxpYXNHZXR0ZXJGb3JGaWVsZCIsImNyZWF0ZUFsaWFzZXNGb3JNZXRob2QiLCJtZXRob2QiLCJuZXdGaWVsZE5hbWUiLCJmaWVsZFByZWZpeCIsImdldFJlbmRlcmVkQ2FsbGJhY2siLCJyZXF1ZXN0ZWRGaWVsZE5hbWUiLCJyZW1vdmVQcmVmaXhlc0Zyb21GaWVsZCIsInByZWZpeGVzVG9SZW1vdmUiLCJzb3J0QnkiLCJwcmVmaXgiLCJnZXRSZW5kZXJlZCIsImhhc011bHRpcGxlUHJpbWFyeUtleXNDYWxsYmFjayIsImhhc0NhbGN1bGF0ZWRGaWVsZENhbGxiYWNrIiwiZmllbGROYW1lVG9DaGVjayIsImNhbGN1bGF0ZWRGaWVsZFZhbHVlIiwiY2FsY3VsYXRlZEZpZWxkTmFtZSIsInJlbGF0aW9uTmFtZSIsInJlc291cmNlVmFsdWUiLCJyZXNvdXJjZU5hbWUiLCJocmVmIiwiZ2V0UmVsYXRpb25OYW1lRnJvbUxpbmsiLCJzZXRSZWxhdGlvbnNSZXNvdXJjZSIsImdldFJlbGF0aW9uUmVzb3VyY2VDYWxsYmFjayIsInJlc291cmNlSW5mbyIsInJlc291cmNlTGluayIsInNpbmdsZSIsImdldFJlbGF0aW9uUmVzb3VyY2UiLCJvdmVycmlkZSIsImN1cnJlbnRTdGF0ZSIsIkludmFsaWRBcmd1bWVudCIsImZpZWxkc1RvUGVyc2lzdE9uSW5zZXJ0IiwibWF5YmVDb252ZXJ0VG9WYWx1ZU9iamVjdCIsInZhbGlkYXRlSXNEYXRlVGltZSIsImZyb21JU08iLCJpbnN0YW5jZU9mIiwiU2l0ZUN1cnJlbmN5IiwidG9JU08iLCJ0b051bWJlciIsIm1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdCIsInBsdXJhbE1vZGVsTmFtZSIsImxhc3QiLCJzcGxpdCIsImVudGl0eUluc3RhbmNlIiwicmVkdWNlIiwiaXRlcmF0b3IiLCJBcnJheSIsImZyb20iLCJnZXRQcmltYXJ5S2V5VmFsdWVzIiwicGljayIsInBpY2tCeSIsImRlcml2ZURlZmF1bHRWYWx1ZUZvclR5cGUiLCJEYXRlIiwidG9JU09TdHJpbmciLCJkZXJpdmVUeXBlRm9yRmllbGQiLCJ2YWxpZCIsInNpbmdsZVR5cGUiLCJpc0ludGVnZXIiLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNCb29sZWFuIiwiZW51bVZhbHVlcyIsImV4cGVjdFZhbHVlT2JqZWN0cyIsImlzRW51bSIsImlzVmFsdWVPYmplY3QiLCJFVkVOVF9TVEFUVVNfSUQiLCJFVkVOVF9TVEFUVVNfSURTIiwiY2F0ZWdvcnlTbHVnIiwic3RyaW5nIiwidGlja2V0X3N0YXJ0IiwidGlja2V0X2VuZCIsIk1PREVMX05BTUVTIiwicGx1cmFsaXplIiwic2luZ3VsYXJNb2RlbE5hbWUiLCJzaW5ndWxhciIsIm1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nIiwic3RhcnRDYXNlIiwiQkFTRV9QUklDRV9UWVBFUyIsIkJBU0VfUFJJQ0UiLCJESVNDT1VOVCIsIlNVUkNIQVJHRSIsIlRBWCIsInByaW1hcnlfa2V5cyIsInZhbHVlc0ZvckNvbWJpbmVkUHJpbWFyeUtleXMiLCJyZXN1bHQiLCJ0cmltRW5kIiwidmFsdWVGb3JQcmltYXJ5S2V5IiwiZ2V0UHJpbWFyeUtleSIsImdldFByaW1hcnlLZXlRdWVyeVN0cmluZyIsImtleVZhbHVlcyIsImdldEVudGl0eVByaW1hcnlLZXlWYWx1ZXMiLCJrZXlFbnRpdGllc0J5UHJpbWFyeUtleVZhbHVlIiwibWFwcGVkRW50aXRpZXMiLCJNYXAiLCJjcmVhdGVBbmRLZXlFbnRpdGllc0J5UHJpbWFyeUtleVZhbHVlIiwiZW50aXR5SWQiLCJzdGF0dXNNb2RlbCIsImZvckF0dGVuZGVlSWQiLCJmb3JUcmFuc2FjdGlvbklkIiwicmVnX2lkIiwicmVnX2RhdGUiLCJTVEFUVVNfVFlQRV9FTUFJTCIsIlNUQVRVU19UWVBFX0VWRU5UIiwiU1RBVFVTX1RZUEVfTUVTU0FHRSIsIlNUQVRVU19UWVBFX1BBWU1FTlQiLCJTVEFUVVNfVFlQRV9SRUdJU1RSQVRJT04iLCJTVEFUVVNfVFlQRV9UUkFOU0FDVElPTiIsIkVNQUlMX1NUQVRVU19JRCIsIkRSQUZUIiwiU0VOVCIsIlJFR0lTVFJBVElPTl9DTE9TRUQiLCJERUxFVEVEIiwiREVOSUVEIiwiTk9UX0FDVElWRSIsIk5PVF9PUEVOIiwiT05HT0lORyIsIlJFR0lTVFJBVElPTl9PUEVOIiwiUEVORElORyIsIlNFQ09OREFSWSIsIk1FU1NBR0VfU1RBVFVTX0lEIiwiREVCVUciLCJFWEVDVVRJTkciLCJGQUlMIiwiSU5DT01QTEVURSIsIklETEUiLCJSRVNFTkQiLCJSRVRSWSIsIlBBWU1FTlRfU1RBVFVTX0lEIiwiQVBQUk9WRUQiLCJERUNMSU5FRCIsIkZBSUxFRCIsIlJFR0lTVFJBVElPTl9TVEFUVVNfSUQiLCJOT1RfQVBQUk9WRUQiLCJQRU5ESU5HX1BBWU1FTlQiLCJXQUlUX0xJU1QiLCJUUkFOU0FDVElPTl9TVEFUVVNfSUQiLCJBQkFORE9ORUQiLCJDT01QTEVURSIsIk9WRVJQQUlEIiwiQ1BUX1NUQVRVU19JRCIsIlBVQkxJU0giLCJGVVRVUkUiLCJQUklWQVRFIiwiVU5LTk9XTl9TVEFUVVNfSUQiLCJBTExfU1RBVFVTX0lEUyIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfUkVHSVNUUkFUSU9OIiwiTGFiZWwiLCJmcm9tU2FtZVNpbmdsZUFuZFBsdXJhbCIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfVFJBTlNBQ1RJT04iLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1BBWU1FTlQiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX01FU1NBR0UiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0NQVCIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfRVZFTlQiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RJQ0tFVCIsIlRJQ0tFVF9TVEFUVVNfSUQiLCJBUkNISVZFRCIsIk9OU0FMRSIsIlNUQVRVU19UUkFOU0xBVElPTl9NQVBfREFURVRJTUUiLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0NIRUNLSU4iLCJTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0FMTCIsInN0YXR1c0NvZGUiLCJGT1JNQVRfU0VOVEVOQ0VfQ0FTRSIsImFzRm9ybWF0dGVkIiwicHJldHR5U3RhdHVzZXMiLCJzdGF0dXNDb2RlcyIsIm1hcHBlZFN0YXR1c2VzIiwic3RhdHVzVHlwZSIsIlRJQ0tFVF9TVEFUVVNfSURTIiwiYXNzZXJ0VGlja2V0RW50aXR5IiwiVGlja2V0RW50aXR5IiwiaW5jbHVkZUFyY2hpdmVkIiwiaXNBcmNoaXZlZCIsImlzT25TYWxlIiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsInF0eSIsImlzUGVuZGluZyIsImdldFRpY2tldFN0YXR1c1RleHRMYWJlbCIsInRpY2tldFN0YXR1cyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFD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QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7O0FDdGZE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QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLGdDQUFnQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7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Ozs7Ozs7Ozs7O0FDQWhFLGFBQWEsaUNBQWlDLEVBQUUsSTs7Ozs7Ozs7Ozs7QUNBaEQsYUFBYSxtREFBbUQsRUFBRSxJIiwiZmlsZSI6ImV2ZW50ZXNwcmVzc28tbW9kZWwuODA1NzE0ZDY5M2VlNzM0MGU0YjAuZGlzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vYXNzZXRzL3NyYy9kYXRhL21vZGVsL2luZGV4LmpzXCIpO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IEV4Y2VwdGlvbiB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuaW1wb3J0IHsgc3ByaW50ZiwgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGlzQXJyYXksIGlzRW1wdHksIGlzTWFwIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIGdpdmVuIGtleSBleGlzdHMgaW4gdGhlIHByb3ZpZGVkIGVudGl0eSBvYmplY3QuXG4gKiBUaGlzIGlzIHVzZWQgd2hlbiBjYWxsaW5nIGNvZGUgd2FudHMgYW4gZXhjZXB0aW9uIHRvIGJlIHRocm93bi5cbiAqXG4gKiBAcGFyYW0geyBzdHJpbmcgfSBrZXlcbiAqIEBwYXJhbSB7IE9iamVjdCB9IGVudGl0eVxuICogQHBhcmFtIHsgc3RyaW5nIH0gbWVzc2FnZVxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9ICBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBwcm92aWRlZCBlbnRpdHkgZG9lcyBub3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIHRoZSBnaXZlbiBrZXkuXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRFbnRpdHlIYXNLZXkgPSAoIGtleSwgZW50aXR5LCBtZXNzYWdlID0gJycgKSA9PiB7XG5cdGlmICggbWVzc2FnZSA9PT0gJycgKSB7XG5cdFx0bWVzc2FnZSA9IHNwcmludGYoXG5cdFx0XHRfXyhcblx0XHRcdFx0J1RoZSBwcm92aWRlZCBlbnRpdHkgKCVzKSBkb2VzIG5vdCBoYXZlIHRoZSBnaXZlbiBwcm9wZXJ0eSAoJXMpJyxcblx0XHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHRcdCksXG5cdFx0XHRlbnRpdHksXG5cdFx0XHRrZXksXG5cdFx0KTtcblx0fVxuXHRpZiAoICEgZW50aXR5Lmhhc093blByb3BlcnR5KCBrZXkgKSApIHtcblx0XHR0aHJvdyBuZXcgRXhjZXB0aW9uKCBtZXNzYWdlICk7XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBnaXZlbiBwYXRoIGluIHRoZSBwcm92aWRlZCBpbW11dGFibGUgb2JqZWN0IGV4aXN0cy5cbiAqIFRoaXMgaXMgdXNlZCB3aGVuIGNhbGxpbmcgY29kZSB3YW50cyBhbiBleGNlcHRpb24gdG8gYmUgdGhyb3duIGlmIHRoZSBnaXZlblxuICogc2VhcmNoIHBhdGggYXJyYXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGltbXV0YWJsZSBvYmplY3QuXG4gKlxuICogSWYgdGhlIGltbXV0YWJsZSBvYmplY3QgaXMgc2V0dXAgbGlrZSB0aGlzOlxuICpcbiAqIGltbXV0YWJsZSA9IEltbXV0YWJsZS5NYXAoKS5zZXQoICdldmVudCcsIEltbXV0YWJsZS5NYXAoKS5zZXQoIDEwLCBFdmVudCApICk7XG4gKlxuICogVGhlbiBhIHZhbGlkIHNlYXJjaGFibGUgcGF0aCBjb3VsZCBiZSBgWyAnZXZlbnQnLCAxMCBdYC4gIEFuIGludmFsaWQgcGF0aFxuICogd291bGQgYmUgYFsgJ2RhdGV0aW1lJywgMTAgXWBcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoICBTZWFyY2hhYmxlIHBhdGggZm9yIHRoZSBpbW11dGFibGUgb2piZWN0IHRvIHZlcmlmeS5cbiAqIEBwYXJhbSB7SW1tdXRhYmxlLk1hcHxJbW11dGFibGUuU2V0fSBpbW11dGFibGUgIEFuIGltbXV0YWJsZSBvYmplY3QgKE1hcCwgU2V0LCBMaXN0IGV0YylcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIEEgY3VzdG9tIG1lc3NhZ2UgdG8gdXNlLlxuICogQHRocm93cyBFeGNlcHRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydEltbXV0YWJsZU9iamVjdEhhc1BhdGggPSAoXG5cdHBhdGgsXG5cdGltbXV0YWJsZSxcblx0bWVzc2FnZSA9ICcnXG4pID0+IHtcblx0aWYgKCBtZXNzYWdlID09PSAnJyApIHtcblx0XHRtZXNzYWdlID0gc3ByaW50Zihcblx0XHRcdF9fKFxuXHRcdFx0XHQnVGhlIHByb3ZpZGVkIGltbXV0YWJsZSBvYmplY3QgKCVzKSBkb2VzIG5vdCBoYXZlIHRoZSBnaXZlbiBwYXRoICglcyknLFxuXHRcdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdFx0KSxcblx0XHRcdGltbXV0YWJsZSxcblx0XHRcdHBhdGgsXG5cdFx0KTtcblx0fVxuXHRpZiAoICEgaW1tdXRhYmxlLmhhc0luKCBwYXRoICkgKSB7XG5cdFx0dGhyb3cgbmV3IEV4Y2VwdGlvbiggbWVzc2FnZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gYXJyYXkuXG4gKlxuICogQHBhcmFtIHsqfSBpdGVtc1xuICogQHBhcmFtIHsgc3RyaW5nIH0gIG1lc3NhZ2VcbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfSBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBub3QgYW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydElzQXJyYXkgPSAoIGl0ZW1zLCBtZXNzYWdlID0gJycgKSA9PiB7XG5cdGlmICggbWVzc2FnZSA9PT0gJycgKSB7XG5cdFx0bWVzc2FnZSA9IF9fKCAnVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBhbiBhcnJheS4nLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdH1cblx0aWYgKCAhIGlzQXJyYXkoIGl0ZW1zICkgKSB7XG5cdFx0dGhyb3cgbmV3IEV4Y2VwdGlvbiggbWVzc2FnZSApO1xuXHR9XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBlbXB0eSBvciBub3QuXG4gKlxuICogQ2FsbCB0aGlzIHZhbGlkYXRvciB3aGVuIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgdmFsdWUgaXMgTk9UIGVtcHR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gaXRlbXNcbiAqIEBwYXJhbSB7IHN0cmluZyB9IG1lc3NhZ2VcbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfSBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBlbXB0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydElzTm90RW1wdHkgPSAoIGl0ZW1zLCBtZXNzYWdlID0gJycgKSA9PiB7XG5cdGlmICggbWVzc2FnZSA9PT0gJycgKSB7XG5cdFx0bWVzc2FnZSA9IF9fKFxuXHRcdFx0J1RoZSBwcm92aWRlZCBpdGVtcyBtdXN0IG5vdCBiZSBlbXB0eScsXG5cdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdCk7XG5cdH1cblx0aWYgKCBpc0VtcHR5KCBpdGVtcyApICkge1xuXHRcdHRocm93IG5ldyBFeGNlcHRpb24oIG1lc3NhZ2UgKTtcblx0fVxufTtcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGEgTWFwIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0geyp9IGl0ZW1cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydElzTWFwID0gKCBpdGVtLCBtZXNzYWdlID0gJycgKSA9PiB7XG5cdGlmICggbWVzc2FnZSA9PT0gJycgKSB7XG5cdFx0bWVzc2FnZSA9IF9fKFxuXHRcdFx0J1RoZSBwcm92aWRlZCBpdGVtIG11c3QgYmUgYSBNYXAgb2JqZWN0Jyxcblx0XHRcdCdldmVudF9lc3ByZXNzbydcblx0XHQpO1xuXHR9XG5cdGlmICggISBpc01hcCggaXRlbSApICkge1xuXHRcdHRocm93IG5ldyBFeGNlcHRpb24oIG1lc3NhZ2UgKTtcblx0fVxufTtcbiIsImV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ2F0dGVuZGVlJztcbiIsImV4cG9ydCAqIGZyb20gJy4vcXVlcnknO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfQVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcbn0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgeyBSRUdJU1RSQVRJT05fU1RBVFVTX0lEUyB9IGZyb20gJy4uL3JlZ2lzdHJhdGlvbi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0aWQ6ICdBVFRfSUQnLFxuXHRsYXN0TmFtZU9ubHk6ICdBVFRfbG5hbWUnLFxuXHRmaXJzdE5hbWVPbmx5OiAnQVRUX2ZuYW1lJyxcblx0Zmlyc3RUaGVuTGFzdE5hbWU6IFsgJ0FUVF9mbmFtZScsICdBVFRfbG5hbWUnIF0sXG5cdGxhc3RUaGVuRmlyc3ROYW1lOiBbICdBVFRfbG5hbWUnLCAnQVRUX2ZuYW1lJyBdLFxufTtcblxuLyoqXG4gKiBEZXNjcmliZWQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge3thdHRyaWJ1dGVzOiAqfX1cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5RGF0YVR5cGVzID0ge1xuXHRmb3JFdmVudElkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JEYXRldGltZUlkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JUaWNrZXRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yU3RhdHVzSWQ6IFByb3BUeXBlcy5vbmVPZiggUkVHSVNUUkFUSU9OX1NUQVRVU19JRFMgKSxcblx0Zm9yUmVnaXN0cmF0aW9uSWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdHNob3dHcmF2YXRhcjogUHJvcFR5cGVzLmJvb2wsXG5cdHF1ZXJ5RGF0YTogUHJvcFR5cGVzLnNoYXBlKCB7XG5cdFx0bGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0b3JkZXJCeTogUHJvcFR5cGVzLm9uZU9mKCBPYmplY3Qua2V5cyggb3JkZXJCeU1hcCApICksXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0fSApLFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHtcbiAqIFx0e1xuICogXHRcdGF0dHJpYnV0ZXM6IHtcbiAqIFx0XHRcdGxpbWl0OiBudW1iZXIsXG4gKiBcdFx0XHRvcmRlckJ5OiBzdHJpbmcsXG4gKiBcdFx0XHRvcmRlcjogc3RyaW5nLFxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAnbGFzdFRoZW5GaXJzdE5hbWUnLFxuXHRcdG9yZGVyOiBRVUVSWV9PUkRFUl9BU0MsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZFxuICogaW4gYSBSRVNUIHF1ZXJ5IGZyb20gdGhlIGNvbnRleHQgb2YgYSBhdHRlbmRlZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gXHRcdG9yZGVyQnlcbiAqIEByZXR1cm4geyBzdHJpbmcgfSBcdFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nXG4gKiBcdFx0XHRcdFx0XHRmb3IgdGhlIFJFU1QgcXVlcnkgZm9yIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gYXR0ZW5kZWVzIGVuZHBvaW50IHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yRXZlbnRJZCAgICBcdElEIG9mIEV2ZW50IHRvIHJldHJpZXZlIGF0dGVuZGVlcyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JEYXRldGltZUlkIFx0SUQgb2YgRGF0ZXRpbWUgdG8gcmV0cmlldmUgYXR0ZW5kZWVzIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclRpY2tldElkIFx0XHRJRCBvZiBUaWNrZXQgdG8gcmV0cmlldmUgYXR0ZW5kZWVzIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclJlZ2lzdHJhdGlvbklkXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yU3RhdHVzSWQgXHRcdElEIG9mIFN0YXR1cyB0byByZXRyaWV2ZSBhdHRlbmRlZXMgZm9yXG4gKiBAcGFyYW0ge3N0cmluZ30gc2hvd0dyYXZhdGFyIFx0Qm9vbGVhbiB0b2dnbGUgZm9yIHdoZXRoZXIgdG8gZGlzcGxheSB1c2VyIEdyYXZhdGFyXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgIFx0VGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdGZvckV2ZW50SWQgPSAwLFxuXHRmb3JEYXRldGltZUlkID0gMCxcblx0Zm9yVGlja2V0SWQgPSAwLFxuXHRmb3JSZWdpc3RyYXRpb25JZCA9IDAsXG5cdGZvclN0YXR1c0lkID0gJ1JBUCcsXG5cdHNob3dHcmF2YXRhciA9IGZhbHNlLFxufSApID0+IHtcblx0Y29uc3Qgd2hlcmUgPSBbXTtcblxuXHQvLyBlbnN1cmUgdGhhdCBlbnRpdHkgSURzIGFyZSBpbnRlZ2Vyc1xuXHRmb3JSZWdpc3RyYXRpb25JZCA9IHBhcnNlSW50KCBmb3JSZWdpc3RyYXRpb25JZCwgMTAgKTtcblx0Zm9yVGlja2V0SWQgPSBwYXJzZUludCggZm9yVGlja2V0SWQsIDEwICk7XG5cdGZvckRhdGV0aW1lSWQgPSBwYXJzZUludCggZm9yRGF0ZXRpbWVJZCwgMTAgKTtcblx0Zm9yRXZlbnRJZCA9IHBhcnNlSW50KCBmb3JFdmVudElkLCAxMCApO1xuXG5cdC8vIG9yZGVyIG9mIHByaW9yaXR5IGZvciBwcm92aWRlZCBhcmd1bWVudHMuXG5cdGlmICggZm9yUmVnaXN0cmF0aW9uSWQgIT09IDAgJiYgISBpc05hTiggZm9yUmVnaXN0cmF0aW9uSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCBgd2hlcmVbUmVnaXN0cmF0aW9uLlJFR19JRF09JHsgZm9yUmVnaXN0cmF0aW9uSWQgfWAgKTtcblx0fSBlbHNlIGlmICggZm9yVGlja2V0SWQgIT09IDAgJiYgISBpc05hTiggZm9yVGlja2V0SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCBgd2hlcmVbUmVnaXN0cmF0aW9uLlRpY2tldC5US1RfSURdPSR7IGZvclRpY2tldElkIH1gICk7XG5cdH0gZWxzZSBpZiAoIGZvckRhdGV0aW1lSWQgIT09IDAgJiYgISBpc05hTiggZm9yRGF0ZXRpbWVJZCApICkge1xuXHRcdHdoZXJlLnB1c2goIGB3aGVyZVtSZWdpc3RyYXRpb24uVGlja2V0LkRhdGV0aW1lLkRUVF9JRF09JHsgZm9yRGF0ZXRpbWVJZCB9YCApO1xuXHR9IGVsc2UgaWYgKCBmb3JFdmVudElkICE9PSAwICYmICEgaXNOYU4oIGZvckV2ZW50SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCBgd2hlcmVbUmVnaXN0cmF0aW9uLkVWVF9JRF09JHsgZm9yRXZlbnRJZCB9YCApO1xuXHR9XG5cblx0aWYgKCBSRUdJU1RSQVRJT05fU1RBVFVTX0lEUy5pbmNsdWRlcyggZm9yU3RhdHVzSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCBgd2hlcmVbUmVnaXN0cmF0aW9uLlN0YXR1cy5TVFNfSURdPSR7IGZvclN0YXR1c0lkIH1gICk7XG5cdH1cblx0aWYgKCBzaG93R3JhdmF0YXIgPT09IHRydWUgKSB7XG5cdFx0d2hlcmUucHVzaCggJ2NhbGN1bGF0ZT11c2VyX2F2YXRhcicgKTtcblx0fVxuXHRyZXR1cm4gd2hlcmUuam9pbiggJyYnICk7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIHF1ZXJ5IHN0cmluZyBmb3IgdXNlIGJ5IGEgUkVTVCByZXF1ZXN0IGdpdmVuIGEgc2V0IG9mIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IE9iamVjdCB9IHF1ZXJ5RGF0YVxuICogQHJldHVybiB7IHN0cmluZyB9ICBSZXR1cm5zIHRoZSBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVN0cmluZyA9ICggcXVlcnlEYXRhID0ge30gKSA9PiB7XG5cdHF1ZXJ5RGF0YSA9IHsgLi4uZGVmYXVsdFF1ZXJ5RGF0YS5xdWVyeURhdGEsIC4uLnF1ZXJ5RGF0YSB9O1xuXHRyZXR1cm4gYmFzZUdldFF1ZXJ5U3RyaW5nKCBxdWVyeURhdGEsIHdoZXJlQ29uZGl0aW9ucywgbWFwT3JkZXJCeSApO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgKiBhcyBkYXRlRm9ybWF0cyBmcm9tICdAZXZlbnRlc3ByZXNzby9oZWxwZXJzJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGRhdGUgZmllbGRzIG9uIHByb3ZpZGVkIGVudGl0aWVzLiAgRG9lcyBub3QgbXV0YXRlIG9yaWdpbmFsXG4gKiBlbnRpdGllcy5cbiAqXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0aWVzICBBbiBhcnJheSBvZiBlbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzICBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEBwYXJhbSB7IHN0cmluZyB9IGZvcm1hdCAgVGhlIGZvcm1hdCB0byB0cmFuc2Zvcm0gdGhlIGRhdGUgZmllbGQgdmFsdWVzIHRvLlxuICogQHBhcmFtIHsgYm9vbGVhbiB9IGxvY2FsICAgICAgV2hldGhlciBvciBub3QgdG8gY29udmVydCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZVxuICogICB0byB0aGUgbG9jYWwgdGltZXpvbmUgZm9yIHRoZSBob3N0LlxuICogQHJldHVybiB7IEFycmF5IH0gIFJldHVybnMgYSBuZXcgYXJyYXkgb2YgbmV3IGVudGl0aWVzIHdpdGggdGhlIGRhdGUgZmllbGRcbiAqICAgdmFsdWVzIGZvcm1hdHRlZFxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RGF0ZXNPbkVudGl0aWVzID0gKFxuXHRlbnRpdGllcyA9IFtdLFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG5cdGZvcm1hdCA9IGRhdGVGb3JtYXRzLkRBVEVfVElNRV9GT1JNQVRfSVNPODYwMSxcblx0bG9jYWwgPSB0cnVlLFxuKSA9PiB7XG5cdGlmICggaXNFbXB0eSggZW50aXRpZXMgKSB8fCBpc0VtcHR5KCBlbnRpdHlEYXRlRmllbGRzICkgKSB7XG5cdFx0cmV0dXJuIGVudGl0aWVzO1xuXHR9XG5cdGNvbnN0IGZvcm1hdHRlZEVudGl0aWVzID0gW107XG5cdGVudGl0aWVzLmZvckVhY2goICggZW50aXR5ICkgPT4ge1xuXHRcdGZvcm1hdHRlZEVudGl0aWVzLnB1c2goIGZvcm1hdERhdGVzT25FbnRpdHkoXG5cdFx0XHRlbnRpdHksXG5cdFx0XHRlbnRpdHlEYXRlRmllbGRzLFxuXHRcdFx0Zm9ybWF0LFxuXHRcdFx0bG9jYWwsXG5cdFx0KSApO1xuXHR9ICk7XG5cdHJldHVybiBmb3JtYXR0ZWRFbnRpdGllcztcbn07XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGF0ZSBmaWVsZHMgb24gdGhlIHByb3ZpZGVkIGVudGl0eS4gIERvZXMgbm90IG11dGF0ZSBvcmlnaW5hbFxuICogZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7IE9iamVjdCB9IGVudGl0eSAgQW4gZW50aXR5XG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHBhcmFtIHsgc3RyaW5nIH0gZm9ybWF0ICBUaGUgZm9ybWF0IHRvIHRyYW5zZm9ybSB0aGUgZGF0ZSBmaWVsZCB2YWx1ZXMgdG8uXG4gKiBAcGFyYW0geyBib29sZWFuIH0gbG9jYWwgICAgICBXaGV0aGVyIG9yIG5vdCB0byBjb252ZXJ0IHRoZSBkYXRlIGZpZWxkIHZhbHVlXG4gKiAgIHRvIHRoZSBsb2NhbCB0aW1lem9uZSBmb3IgdGhlIGhvc3QuXG4gKiBAcmV0dXJuIHsgT2JqZWN0IH0gIFJldHVybnMgYSBuZXcgZW50aXR5IHdpdGggdGhlIGRhdGUgZmllbGQgdmFsdWVzIGZvcm1hdHRlZFxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RGF0ZXNPbkVudGl0eSA9IChcblx0ZW50aXR5ID0ge30sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcblx0Zm9ybWF0ID0gZGF0ZUZvcm1hdHMuREFURV9USU1FX0ZPUk1BVF9JU084NjAxLFxuXHRsb2NhbCA9IHRydWUsXG4pID0+IHtcblx0Y29uc3QgbmV3RW50aXR5ID0geyAuLi5lbnRpdHkgfTtcblx0ZW50aXR5RGF0ZUZpZWxkcy5mb3JFYWNoKCAoIGRhdGVGaWVsZCApID0+IHtcblx0XHRpZiAoIG5ld0VudGl0eVsgZGF0ZUZpZWxkIF0gKSB7XG5cdFx0XHRuZXdFbnRpdHlbIGRhdGVGaWVsZCBdID0gZGF0ZUZvcm1hdHMuZm9ybWF0RGF0ZVN0cmluZyhcblx0XHRcdFx0bmV3RW50aXR5WyBkYXRlRmllbGQgXSxcblx0XHRcdFx0Zm9ybWF0LFxuXHRcdFx0XHRsb2NhbCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9ICk7XG5cdHJldHVybiBuZXdFbnRpdHk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGRhdGUgZmllbGRzIHRvIG15c3FsIGZvcm1hdCBvbiBwcm92aWRlZCBlbnRpdGllcy4gIERvZXMgbm90XG4gKiBtdXRhdGUgb3JpZ2luYWwgZW50aXRpZXMuXG4gKlxuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdGllcyAgQW4gYXJyYXkgb2YgZW50aXR5IG9iamVjdHNcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyAgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcGFyYW0geyBib29sZWFuIH0gbG9jYWwgICAgICBXaGV0aGVyIG9yIG5vdCB0byBjb252ZXJ0IHRoZSBkYXRlIGZpZWxkIHZhbHVlXG4gKiAgIHRvIHRoZSBsb2NhbCB0aW1lem9uZSBmb3IgdGhlIGhvc3QuXG4gKiBAcmV0dXJuIHsgQXJyYXkgfSAgUmV0dXJucyBhIG5ldyBhcnJheSBvZiBuZXcgZW50aXRpZXMgd2l0aCB0aGUgZGF0ZSBmaWVsZFxuICogICB2YWx1ZXMgZm9ybWF0dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRFbnRpdGllc0RhdGVzVG9NeXNxbCA9IChcblx0ZW50aXRpZXMgPSBbXSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuXHRsb2NhbCA9IHRydWUsXG4pID0+IHtcblx0cmV0dXJuIGZvcm1hdERhdGVzT25FbnRpdGllcyhcblx0XHRlbnRpdGllcyxcblx0XHRlbnRpdHlEYXRlRmllbGRzLFxuXHRcdGRhdGVGb3JtYXRzLkRBVEVfVElNRV9GT1JNQVRfTVlTUUwsXG5cdFx0bG9jYWwsXG5cdCk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGRhdGUgZmllbGRzIHRvIG15c3FsIGZvcm1hdCBvbiBwcm92aWRlZCBlbnRpdHkuICBEb2VzIG5vdFxuICogbXV0YXRlIG9yaWdpbmFsIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0geyBPYmplY3QgfSBlbnRpdHkgIEFuIGFycmF5IG9mIGVudGl0eSBvYmplY3RzXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHBhcmFtIHsgYm9vbGVhbiB9IGxvY2FsICAgICAgV2hldGhlciBvciBub3QgdG8gY29udmVydCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZVxuICogICB0byB0aGUgbG9jYWwgdGltZXpvbmUgZm9yIHRoZSBob3N0LlxuICogQHJldHVybiB7IE9iamVjdCB9ICBSZXR1cm5zIGEgbmV3IGVudGl0eSB3aXRoIHRoZSBkYXRlIGZpZWxkIHZhbHVlcyBmb3JtYXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdEVudGl0eURhdGVzVG9NeXNxbCA9IChcblx0ZW50aXR5ID0ge30sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcblx0bG9jYWwgPSB0cnVlLFxuKSA9PiB7XG5cdHJldHVybiBmb3JtYXREYXRlc09uRW50aXR5KFxuXHRcdGVudGl0eSxcblx0XHRlbnRpdHlEYXRlRmllbGRzLFxuXHRcdGRhdGVGb3JtYXRzLkRBVEVfVElNRV9GT1JNQVRfTVlTUUwsXG5cdFx0bG9jYWwsXG5cdCk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGRhdGUgZmllbGRzIHRvIHRoZSBzaXRlIGZvcm1hdCBvbiBwcm92aWRlZCBlbnRpdGllcy4gIERvZXMgbm90XG4gKiBtdXRhdGUgb3JpZ2luYWwgZW50aXRpZXMuXG4gKlxuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdGllcyAgQW4gYXJyYXkgb2YgZW50aXR5IG9iamVjdHNcbiAqIEBwYXJhbSB7IEFycmF5IH0gZW50aXR5RGF0ZUZpZWxkcyAgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcGFyYW0geyBib29sZWFuIH0gbG9jYWwgICAgICBXaGV0aGVyIG9yIG5vdCB0byBjb252ZXJ0IHRoZSBkYXRlIGZpZWxkIHZhbHVlXG4gKiAgIHRvIHRoZSBsb2NhbCB0aW1lem9uZSBmb3IgdGhlIGhvc3QuXG4gKiBAcmV0dXJuIHsgQXJyYXkgfSAgUmV0dXJucyBhIG5ldyBhcnJheSBvZiBuZXcgZW50aXRpZXMgd2l0aCB0aGUgZGF0ZSBmaWVsZFxuICogICB2YWx1ZXMgZm9ybWF0dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRFbnRpdGllc0RhdGVzVG9TaXRlID0gKFxuXHRlbnRpdGllcyA9IFtdLFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG5cdGxvY2FsID0gdHJ1ZSxcbikgPT4ge1xuXHRyZXR1cm4gZm9ybWF0RGF0ZXNPbkVudGl0aWVzKFxuXHRcdGVudGl0aWVzLFxuXHRcdGVudGl0eURhdGVGaWVsZHMsXG5cdFx0ZGF0ZUZvcm1hdHMuREFURV9USU1FX0ZPUk1BVF9TSVRFLFxuXHRcdGxvY2FsLFxuXHQpO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBkYXRlIGZpZWxkcyB0byB0aGUgc2l0ZSBmb3JtYXQgb24gcHJvdmlkZWQgZW50aXR5LiAgRG9lcyBub3RcbiAqIG11dGF0ZSBvcmlnaW5hbCBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHsgT2JqZWN0IH0gZW50aXR5ICBBbiBhcnJheSBvZiBlbnRpdHkgb2JqZWN0c1xuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzICBBbiBhcnJheSBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBkYXRlXG4gKiAgIGZpZWxkcy5cbiAqIEBwYXJhbSB7IGJvb2xlYW4gfSBsb2NhbCAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbnZlcnQgdGhlIGRhdGUgZmllbGQgdmFsdWVcbiAqICAgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGZvciB0aGUgaG9zdC5cbiAqIEByZXR1cm4geyBPYmplY3QgfSAgUmV0dXJucyBhIG5ldyBlbnRpdHkgd2l0aCB0aGUgZGF0ZSBmaWVsZCB2YWx1ZXMgZm9ybWF0dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRFbnRpdHlEYXRlc1RvU2l0ZSA9IChcblx0ZW50aXR5ID0ge30sXG5cdGVudGl0eURhdGVGaWVsZHMgPSBbXSxcblx0bG9jYWwgPSB0cnVlLFxuKSA9PiB7XG5cdHJldHVybiBmb3JtYXREYXRlc09uRW50aXR5KFxuXHRcdGVudGl0eSxcblx0XHRlbnRpdHlEYXRlRmllbGRzLFxuXHRcdGRhdGVGb3JtYXRzLkRBVEVfVElNRV9GT1JNQVRfU0lURSxcblx0XHRsb2NhbCxcblx0KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgZGF0ZSBmaWVsZCB2YWx1ZXMgdG8gbW9tZW50IG9iamVjdHMgZm9yIHRoZSBwcm92aWRlZCBlbnRpdGllcy5cbiAqIERvZXMgbm90IG11dGF0ZSBvcmlnaW5hbCBlbnRpdGllcy5cbiAqXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0aWVzIEFuIGFycmF5IG9mIGVudGl0eSBvYmplY3RzXG4gKiBAcGFyYW0geyBBcnJheSB9IGVudGl0eURhdGVGaWVsZHMgQW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgdGhhdCBhcmUgZGF0ZVxuICogICBmaWVsZHMuXG4gKiBAcmV0dXJuIHsgQXJyYXkgfSBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIG5ldyBlbnRpdGllcyB3aXRoIHRoZSBkYXRlIGZpZWxkXG4gKiAgIHZhbHVlcyBjb252ZXJ0ZWQgdG8gbW9tZW50IG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0RW50aXRpZXNEYXRlc1RvTW9tZW50ID0gKFxuXHRlbnRpdGllcyA9IFtdLFxuXHRlbnRpdHlEYXRlRmllbGRzID0gW10sXG4pID0+IHtcblx0aWYgKCBpc0VtcHR5KCBlbnRpdGllcyApIHx8IGlzRW1wdHkoIGVudGl0eURhdGVGaWVsZHMgKSApIHtcblx0XHRyZXR1cm4gZW50aXRpZXM7XG5cdH1cblx0Y29uc3QgZm9ybWF0dGVkRW50aXRpZXMgPSBbXTtcblx0ZW50aXRpZXMuZm9yRWFjaCggKCBlbnRpdHkgKSA9PiB7XG5cdFx0Zm9ybWF0dGVkRW50aXRpZXMucHVzaCggY29udmVydEVudGl0eURhdGVzVG9Nb21lbnQoXG5cdFx0XHRlbnRpdHksXG5cdFx0XHRlbnRpdHlEYXRlRmllbGRzLFxuXHRcdCkgKTtcblx0fSApO1xuXHRyZXR1cm4gZm9ybWF0dGVkRW50aXRpZXM7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGRhdGUgZmllbGQgdmFsdWVzIHRvIG1vbWVudCBvYmplY3RzIGZvciB0aGUgcHJvdmlkZWQgZW50aXR5LlxuICogRG9lcyBub3QgbXV0YXRlIG9yaWdpbmFsIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0geyBPYmplY3QgfSBlbnRpdHkgQW4gZW50aXR5LlxuICogQHBhcmFtIHsgQXJyYXkgfSBlbnRpdHlEYXRlRmllbGRzIEFuIGFycmF5IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGRhdGVcbiAqICAgZmllbGRzLlxuICogQHJldHVybiB7IE9iamVjdCB9IFJldHVybnMgYSBuZXcgZW50aXR5IHdpdGggdGhlIGRhdGUgZmllbGQgdmFsdWVzIGNvbnZlcnRlZFxuICogICB0byBtb21lbnQgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRFbnRpdHlEYXRlc1RvTW9tZW50ID0gKFxuXHRlbnRpdHkgPSB7fSxcblx0ZW50aXR5RGF0ZUZpZWxkcyA9IFtdLFxuKSA9PiB7XG5cdGNvbnN0IG5ld0VudGl0eSA9IHsgLi4uZW50aXR5IH07XG5cdGVudGl0eURhdGVGaWVsZHMuZm9yRWFjaCggKCBkYXRlRmllbGQgKSA9PiB7XG5cdFx0aWYgKCBuZXdFbnRpdHlbIGRhdGVGaWVsZCBdICkge1xuXHRcdFx0bmV3RW50aXR5WyBkYXRlRmllbGQgXSA9IGRhdGVGb3JtYXRzLnN0cmluZ1RvTW9tZW50KFxuXHRcdFx0XHRuZXdFbnRpdHlbIGRhdGVGaWVsZCBdLFxuXHRcdFx0KTtcblx0XHR9XG5cdH0gKTtcblx0cmV0dXJuIG5ld0VudGl0eTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSwgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgUVVFUllfT1JERVJfQVNDID0gJ0FTQyc7XG5leHBvcnQgY29uc3QgUVVFUllfT1JERVJfREVTQyA9ICdERVNDJztcbmV4cG9ydCBjb25zdCBBTExPV0VEX09SREVSX1ZBTFVFUyA9IFsgJ2FzYycsICdkZXNjJywgJ0FTQycsICdERVNDJyBdO1xuZXhwb3J0IGNvbnN0IEdSRUFURVJfVEhBTiA9IGVuY29kZVVSSUNvbXBvbmVudCggJz4nICk7XG5leHBvcnQgY29uc3QgTEVTU19USEFOID0gZW5jb2RlVVJJQ29tcG9uZW50KCAnPCcgKTtcbmV4cG9ydCBjb25zdCBHUkVBVEVSX1RIQU5fQU5EX0VRVUFMID0gZW5jb2RlVVJJQ29tcG9uZW50KCAnPj0nICk7XG5leHBvcnQgY29uc3QgTEVTU19USEFOX0FORF9FUVVBTCA9IGVuY29kZVVSSUNvbXBvbmVudCggJzw9JyApO1xuXG4vKipcbiAqIFJldHVybiBhIHF1ZXJ5IHN0cmluZyBmb3IgdXNlIGJ5IGEgUkVTVCByZXF1ZXN0IGdpdmVuIGEgc2V0IG9mIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IE9iamVjdCB9IHF1ZXJ5RGF0YVxuICogQHBhcmFtIHsgZnVuY3Rpb24gfSB3aGVyZUNvbmRpdGlvbnMgIEEgZnVuY3Rpb24gZm9yIHByZXBwaW5nIHRoZSB3aGVyZVxuICogXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25kaXRpb25zIGZyb20gdGhlIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IGZ1bmN0aW9uIH0gbWFwT3JkZXJCeVx0XHRBIGZ1bmN0aW9uIGZvciBtYXBwaW5nIGluY29taW5nIG9yZGVyX2J5XG4gKiBcdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmluZ3MgdG8gdGhlIHZhbHVlIG5lZWRlZCBmb3IgdGhlXG4gKiBcdFx0XHRcdFx0XHRcdFx0XHRcdHF1ZXJ5X3N0cmluZy5cbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgXHRcdFx0XHRcdFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKFxuXHRxdWVyeURhdGEgPSB7fSxcblx0d2hlcmVDb25kaXRpb25zID0gKCkgPT4gbnVsbCxcblx0bWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IG9yZGVyQnksXG4pID0+IHtcblx0Y29uc3Qgd2hlcmUgPSB3aGVyZUNvbmRpdGlvbnMoIHF1ZXJ5RGF0YSApO1xuXHRjb25zdCB7IGxpbWl0LCBvcmRlciwgb3JkZXJCeSwgZGVmYXVsdFdoZXJlQ29uZGl0aW9ucyB9ID0gcXVlcnlEYXRhO1xuXHRjb25zdCBxdWVyeVBhcmFtcyA9IFtdO1xuXHRpZiAoICEgaXNVbmRlZmluZWQoIGxpbWl0ICkgKSB7XG5cdFx0cXVlcnlQYXJhbXMucHVzaCggYGxpbWl0PSR7IGxpbWl0IH1gICk7XG5cdH1cblx0aWYgKCAhIGlzVW5kZWZpbmVkKCBkZWZhdWx0V2hlcmVDb25kaXRpb25zICkgKSB7XG5cdFx0cXVlcnlQYXJhbXMucHVzaChcblx0XHRcdGBkZWZhdWx0X3doZXJlX2NvbmRpdGlvbnM9JHsgZGVmYXVsdFdoZXJlQ29uZGl0aW9ucyB9YFxuXHRcdCk7XG5cdH1cblx0aWYgKCAhIGlzVW5kZWZpbmVkKCBtYXBPcmRlckJ5KCBvcmRlckJ5ICkgKSApIHtcblx0XHRpZiAoIGlzQXJyYXkoIG1hcE9yZGVyQnkoIG9yZGVyQnkgKSApICkge1xuXHRcdFx0Zm9yICggY29uc3QgZmllbGQgb2YgbWFwT3JkZXJCeSggb3JkZXJCeSApICkge1xuXHRcdFx0XHRxdWVyeVBhcmFtcy5wdXNoKCBgb3JkZXJfYnlbJHsgZmllbGQgfV09JHsgb3JkZXIgfWAgKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cXVlcnlQYXJhbXMucHVzaCggYG9yZGVyPSR7IG9yZGVyIH1gICk7XG5cdFx0XHRxdWVyeVBhcmFtcy5wdXNoKCBgb3JkZXJfYnk9JHsgbWFwT3JkZXJCeSggb3JkZXJCeSApIH1gICk7XG5cdFx0fVxuXHR9XG5cdGxldCBxdWVyeVN0cmluZyA9IHF1ZXJ5UGFyYW1zLmpvaW4oICcmJyApO1xuXHRpZiAoIHdoZXJlICkge1xuXHRcdHF1ZXJ5U3RyaW5nICs9ICcmJyArIHdoZXJlO1xuXHR9XG5cdHJldHVybiBxdWVyeVN0cmluZztcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAnY2hlY2tpbic7XG5cbmV4cG9ydCBjb25zdCBDSEVDS0lOX1NUQVRVU19JRCA9IHtcblx0U1RBVFVTX0NIRUNLRURfT1VUOiBmYWxzZSxcblx0U1RBVFVTX0NIRUNLRURfSU46IHRydWUsXG5cdFNUQVRVU19DSEVDS0VEX05FVkVSOiAyLFxufTtcblxuZXhwb3J0IGNvbnN0IENIRUNLSU5fU1RBVFVTX0lEUyA9IHZhbHVlcyhcblx0Q0hFQ0tJTl9TVEFUVVNfSURcbik7XG4iLCJleHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgcHJldHR5U3RhdHVzIH0gZnJvbSAnLi4vc3RhdHVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGdldFF1ZXJ5U3RyaW5nIGFzIGJhc2VHZXRRdWVyeVN0cmluZyxcblx0UVVFUllfT1JERVJfREVTQyxcblx0QUxMT1dFRF9PUkRFUl9WQUxVRVMsXG59IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0ICogYXMgY2hlY2tpblN0YXR1cyBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0Zm9yRGF0ZXRpbWVJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yRXZlbnRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yUmVnaXN0cmF0aW9uSWQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdGZvclRpY2tldElkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JTdGF0dXNJZDogUHJvcFR5cGVzLm9uZU9mKCBjaGVja2luU3RhdHVzLkNIRUNLSU5fU1RBVFVTX0lEUyApLFxuXHRxdWVyeURhdGE6IFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdGxpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdG9yZGVyQnk6IFByb3BUeXBlcy5vbmVPZiggW1xuXHRcdFx0J0NIS19JRCcsXG5cdFx0XHQnUkVHX0lEJyxcblx0XHRcdCdDSEtfdGltZXN0YW1wJyxcblx0XHRcdCdEVFRfSUQnLFxuXHRcdF0gKSxcblx0XHRvcmRlcjogUHJvcFR5cGVzLm9uZU9mKCBBTExPV0VEX09SREVSX1ZBTFVFUyApLFxuXHR9ICksXG59O1xuXG5leHBvcnQgY29uc3Qgb3B0aW9uc0VudGl0eU1hcCA9IHtcblx0ZGVmYXVsdDogKCkgPT4ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGxhYmVsOiBwcmV0dHlTdGF0dXMoXG5cdFx0XHRcdFx0Y2hlY2tpblN0YXR1cy5DSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9PVVRcblx0XHRcdFx0KSxcblx0XHRcdFx0dmFsdWU6IGNoZWNraW5TdGF0dXMuQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfT1VULFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bGFiZWw6IHByZXR0eVN0YXR1cyhcblx0XHRcdFx0XHRjaGVja2luU3RhdHVzLkNIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX0lOXG5cdFx0XHRcdCksXG5cdFx0XHRcdHZhbHVlOiBjaGVja2luU3RhdHVzLkNIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX0lOLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9LFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHtcbiAqIFx0e1xuICogXHRcdGF0dHJpYnV0ZXM6IHtcbiAqIFx0XHRcdGxpbWl0OiBudW1iZXIsXG4gKiBcdFx0XHRvcmRlckJ5OiBzdHJpbmcsXG4gKiBcdFx0XHRvcmRlcjogc3RyaW5nLFxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDEwMCxcblx0XHRvcmRlckJ5OiAnQ0hLX3RpbWVzdGFtcCcsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYSByZWdpc3RyYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHRpbWVzdGFtcDogJ0NIS190aW1lc3RhbXAnLFxuXHRcdGlkOiAnQ0hLX0lEJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gcmVnaXN0cmF0aW9ucyBlbmRwb2ludCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGZvckRhdGV0aW1lSWQgICAgXHRJRCBvZiBFdmVudCB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvckV2ZW50SWQgICAgSUQgb2YgQXR0ZW5kZWUgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JSZWdpc3RyYXRpb25JZCBJRCBvZiBUcmFuc2FjdGlvbiB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclRpY2tldElkIFx0XHRJRCBvZiBUaWNrZXQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JTdGF0dXNJZCBcdFx0SUQgb2YgU3RhdHVzIHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgIFx0VGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdGZvckRhdGV0aW1lSWQgPSAwLFxuXHRmb3JFdmVudElkID0gMCxcblx0Zm9yUmVnaXN0cmF0aW9uSWQgPSAwLFxuXHRmb3JUaWNrZXRJZCA9IDAsXG5cdGZvclN0YXR1c0lkID0gJycsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXHRmb3JFdmVudElkID0gcGFyc2VJbnQoIGZvckV2ZW50SWQsIDEwICk7XG5cdGlmICggZm9yRXZlbnRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JFdmVudElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1JlZ2lzdHJhdGlvbi5FVlRfSURdPScgKyBmb3JFdmVudElkICk7XG5cdH1cblx0Zm9yRGF0ZXRpbWVJZCA9IHBhcnNlSW50KCBmb3JEYXRldGltZUlkLCAxMCApO1xuXHRpZiAoIGZvckRhdGV0aW1lSWQgIT09IDAgJiYgISBpc05hTiggZm9yRGF0ZXRpbWVJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtEVFRfSURdPScgKyBmb3JEYXRldGltZUlkICk7XG5cdH1cblx0Zm9yUmVnaXN0cmF0aW9uSWQgPSBwYXJzZUludCggZm9yUmVnaXN0cmF0aW9uSWQsIDEwICk7XG5cdGlmICggZm9yUmVnaXN0cmF0aW9uSWQgIT09IDAgJiYgISBpc05hTiggZm9yUmVnaXN0cmF0aW9uSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbUkVHX0lEXT0nICsgZm9yUmVnaXN0cmF0aW9uSWQgKTtcblx0fVxuXHRmb3JUaWNrZXRJZCA9IHBhcnNlSW50KCBmb3JUaWNrZXRJZCwgMTAgKTtcblx0aWYgKCBmb3JUaWNrZXRJZCAhPT0gMCAmJiAhIGlzTmFOKCBmb3JUaWNrZXRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtSZWdpc3RyYXRpb24uVEtUX0lEXT0nICsgZm9yVGlja2V0SWQgKTtcblx0fVxuXHRpZiAoIGZvclN0YXR1c0lkICE9PSAnJyAmJiBmb3JTdGF0dXNJZCAhPT0gbnVsbCApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbQ0hLX2luXT0nICsgZm9yU3RhdHVzSWQgKTtcblx0fVxuXHRyZXR1cm4gd2hlcmUuam9pbiggJyYnICk7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIHF1ZXJ5IHN0cmluZyBmb3IgdXNlIGJ5IGEgUkVTVCByZXF1ZXN0IGdpdmVuIGEgc2V0IG9mIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IE9iamVjdCB9IHF1ZXJ5RGF0YVxuICogQHJldHVybiB7IHN0cmluZyB9ICBSZXR1cm5zIHRoZSBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVN0cmluZyA9ICggcXVlcnlEYXRhID0ge30gKSA9PiB7XG5cdHF1ZXJ5RGF0YSA9IHsgLi4uZGVmYXVsdFF1ZXJ5RGF0YS5xdWVyeURhdGEsIC4uLnF1ZXJ5RGF0YSB9O1xuXHRyZXR1cm4gYmFzZUdldFF1ZXJ5U3RyaW5nKCBxdWVyeURhdGEsIHdoZXJlQ29uZGl0aW9ucywgbWFwT3JkZXJCeSApO1xufTtcbiIsImltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ2RhdGV0aW1lJztcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX1NUQVRVU19JRCA9IHtcblx0QUNUSVZFOiAnRFRBJyxcblx0Q0FOQ0VMTEVEOiAnRFRDJyxcblx0RVhQSVJFRDogJ0RURScsXG5cdElOQUNUSVZFOiAnRFRJJyxcblx0UE9TVFBPTkVEOiAnRFRQJyxcblx0U09MRF9PVVQ6ICdEVFMnLFxuXHRUUkFTSEVEOiAnRFRUJyxcblx0VVBDT01JTkc6ICdEVFUnLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX1NUQVRVU19JRFMgPSB2YWx1ZXMoIERBVEVUSU1FX1NUQVRVU19JRCApO1xuXG5leHBvcnQgY29uc3QgTUlOVVRFX0lOX1NFQ09ORFMgPSA2MDtcbmV4cG9ydCBjb25zdCBIT1VSX0lOX1NFQ09ORFMgPSBNSU5VVEVfSU5fU0VDT05EUyAqIDYwO1xuZXhwb3J0IGNvbnN0IERBWV9JTl9TRUNPTkRTID0gSE9VUl9JTl9TRUNPTkRTICogMjQ7XG5leHBvcnQgY29uc3QgV0VFS19JTl9TRUNPTkRTID0gSE9VUl9JTl9TRUNPTkRTICogNztcbmV4cG9ydCBjb25zdCBNT05USF9JTl9TRUNPTkRTID0gREFZX0lOX1NFQ09ORFMgKiAzMDtcbiIsIi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgKiBhcyBiYXNlRm9ybWF0dGVyIGZyb20gJy4uL2Jhc2UtZGF0ZS1mb3JtYXR0ZXInO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZm9yT3duLCBwdWxsQXQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcblx0VElNRV9GT1JNQVRfU0lURSxcblx0REFURV9USU1FX0ZPUk1BVF9TSVRFLFxuXHRhbGxEYXRlVGltZXNBc1N0cmluZyxcblx0U0VQQVJBVE9SX1NQQUNFX0RBU0hfU1BBQ0UsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL2hlbHBlcnMnO1xuaW1wb3J0IHsgaXNNb2RlbEVudGl0eU9mTW9kZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBBcnJheSBvZiBmaWVsZHMgdGhhdCBoYXZlIGRhdGUgaW5mb3JtYXRpb25cbiAqIEB0eXBlIHsgc3RyaW5nW10gfVxuICovXG5leHBvcnQgY29uc3QgREFURV9GSUVMRFMgPSBbXG5cdCdEVFRfRVZUX3N0YXJ0Jyxcblx0J0RUVF9FVlRfZW5kJyxcbl07XG5cbi8qKlxuICogV2lsbCBob2xkIHRoZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgbGlzdCBvZiBmb3JtYXR0ZXJzIGZvciBkYXRlcy4gIEZvcm1hdHRlcnNcbiAqIGFyZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiBgLi4vYmFzZS1kYXRlLWZvcm1hdHRlcmAgYnV0IHdyYXBwZWQgYnkgZHluYW1pY2FsbHlcbiAqIGdlbmVyYXRlZCBmdW5jdGlvbnMgKGNhbGxhYmxlIHZpYSBzYW1lIG5hbWUpIHRoYXQgYXV0b21hdGljYWxseSByZWNlaXZlIHRoZVxuICogY29ycmVjdCBkYXRlRmllbGRzTWFwIGFyZ3VtZW50LlxuICpcbiAqIEVnLiAgYC4uL2Jhc2UtZGF0ZS1mb3JtYXR0ZXIgaGFzXG4gKiBmb3JtYXREYXRlc09uRW50aXRpZXMoIGVudGl0aWVzLCBlbnRpdHlEYXRlRmllbGRzLCBmb3JtYXQsIGxvY2FsICk7XG4gKiBXaGVuIGltcG9ydGluZyBgZm9ybWF0RGF0ZXNPbkVudGl0aWVzYCBmcm9tIHRoaXMgZmlsZSwgeW91IGNhbiBjYWxsIGl0IHNpbXBseVxuICogYnkgZG9pbmcgdGhpczpcbiAqXG4gKiBmb3JtYXREYXRlc09uRW50aXRpZXMoIGRhdGVUaW1lT2JqZWN0cywgZm9ybWF0LCBsb2NhbCApO1xuICpcbiAqIE5vdGljZSB0aGF0IGl0J3MgY2FsbGVkIHdpdGhvdXQgdGhlIGVudGl0eURhdGVGaWVsZHMgYXJndW1lbnQgYmVjYXVzZSB0aGF0J3NcbiAqIHByb3ZpZGVkIGJ5IHRoaXMgZ2VuZXJhdG9yLlxuICpcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgZm9ybWF0dGVycyA9IHt9O1xuXG5mb3JPd24oIGJhc2VGb3JtYXR0ZXIsICggaW1wbGVtZW50YXRpb24sIGZ1bmN0aW9uTmFtZSApID0+IHtcblx0Zm9ybWF0dGVyc1sgZnVuY3Rpb25OYW1lIF0gPSAoIC4uLmluY29taW5nQXJncyApID0+IHtcblx0XHRjb25zdCBmaXJzdEFyZyA9IHB1bGxBdCggaW5jb21pbmdBcmdzLCAwICk7XG5cdFx0cmV0dXJuIGltcGxlbWVudGF0aW9uKCBmaXJzdEFyZ1sgMCBdLCBEQVRFX0ZJRUxEUywgLi4uaW5jb21pbmdBcmdzICk7XG5cdH07XG59ICk7XG5cbi8qKlxuICogVGhpcyB3aWxsIHNwaXQgb3V0IGEgcHJldHRpZmllZCBsYWJlbCBmb3IgdGhlIHByb3ZpZGVkIERhdGVUaW1lIGVudGl0eS5cbiAqXG4gKiBJZiB0aGVyZSBpcyBhIERUVF9uYW1lLCB0aGUgZm9ybWF0IHdpbGwgYmU6XG4gKiBgRFRUX25hbWUgKERUVF9FVlRfc3RhcnQgLSBEVFRfRVZUX2VuZClgXG4gKlxuICogSWYgbm8gRFRUX25hbWUgdGhlbjpcbiAqIGBEVFRfRVZUX3N0YXJ0IC0gRFRUX0VWVF9lbmRgXG4gKlxuICogVGhpcyB3aWxsIGFjY291bnQgZm9yIGlmIGJvdGggc3RhcnQgYW5kIGVuZCBhcmUgaW4gdGhlIHNhbWUgZGF5IGFuZCBzaW1wbHlcbiAqIHVzZSB0aW1lIGZvciB0aGUgZW5kIHBhcnQuXG4gKlxuICogQHBhcmFtIHsgQmFzZUVudGl0eSB9IERhdGVUaW1lRW50aXR5XG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIEEgZm9ybWF0dGVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHByb3ZpZGVkXG4gKiAgICBEYXRlVGltZUVudGl0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZXR0eURhdGVGcm9tRGF0ZVRpbWUgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRsZXQgY29udGVudCA9ICcnO1xuXHRpZiAoIGlzTW9kZWxFbnRpdHlPZk1vZGVsKCBEYXRlVGltZUVudGl0eSwgJ2RhdGV0aW1lJyApICkge1xuXHRcdGlmICggRGF0ZVRpbWVFbnRpdHkuRFRUX0VWVF9zdGFydC5oYXNTYW1lKFxuXHRcdFx0RGF0ZVRpbWVFbnRpdHkuRFRUX0VWVF9lbmQsXG5cdFx0XHQnZGF5J1xuXHRcdCkgKSB7XG5cdFx0XHRjb250ZW50ICs9IGFsbERhdGVUaW1lc0FzU3RyaW5nKFxuXHRcdFx0XHRTRVBBUkFUT1JfU1BBQ0VfREFTSF9TUEFDRSxcblx0XHRcdFx0RGF0ZVRpbWVFbnRpdHkuRFRUX0VWVF9zdGFydC50b0Zvcm1hdChcblx0XHRcdFx0XHREQVRFX1RJTUVfRk9STUFUX1NJVEVcblx0XHRcdFx0KSxcblx0XHRcdFx0RGF0ZVRpbWVFbnRpdHkuRFRUX0VWVF9lbmQudG9Gb3JtYXQoXG5cdFx0XHRcdFx0VElNRV9GT1JNQVRfU0lURVxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCArPSBhbGxEYXRlVGltZXNBc1N0cmluZyhcblx0XHRcdFx0U0VQQVJBVE9SX1NQQUNFX0RBU0hfU1BBQ0UsXG5cdFx0XHRcdERhdGVUaW1lRW50aXR5LkRUVF9FVlRfc3RhcnQudG9Gb3JtYXQoXG5cdFx0XHRcdFx0REFURV9USU1FX0ZPUk1BVF9TSVRFXG5cdFx0XHRcdCksXG5cdFx0XHRcdERhdGVUaW1lRW50aXR5LkRUVF9FVlRfZW5kLnRvRm9ybWF0KFxuXHRcdFx0XHRcdERBVEVfVElNRV9GT1JNQVRfU0lURVxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Y29udGVudCA9IERhdGVUaW1lRW50aXR5LkRUVF9uYW1lID9cblx0XHRcdGAkeyBEYXRlVGltZUVudGl0eS5EVFRfbmFtZSB9ICgkeyBjb250ZW50IH0pYCA6XG5cdFx0XHRjb250ZW50O1xuXHR9XG5cdHJldHVybiBjb250ZW50O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVycztcbiIsImV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnknO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtYXR0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0dXMtaGVscGVyJztcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQge1xuXHRnZXRRdWVyeVN0cmluZyBhcyBiYXNlR2V0UXVlcnlTdHJpbmcsXG5cdFFVRVJZX09SREVSX0RFU0MsXG5cdEFMTE9XRURfT1JERVJfVkFMVUVTLFxuXHRHUkVBVEVSX1RIQU4sXG5cdEdSRUFURVJfVEhBTl9BTkRfRVFVQUwsXG5cdExFU1NfVEhBTl9BTkRfRVFVQUwsXG59IGZyb20gJy4uL2Jhc2UnO1xuXG5leHBvcnQgY29uc3Qgbm93RGF0ZUFuZFRpbWUgPSBtb21lbnQoKTtcblxuLyoqXG4gKiBEZXNjcmliZWQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge3thdHRyaWJ1dGVzOiAqfX1cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5RGF0YVR5cGVzID0ge1xuXHRxdWVyeURhdGE6IFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdGxpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdG9yZGVyQnk6IFByb3BUeXBlcy5vbmVPZiggW1xuXHRcdFx0J0RUVF9uYW1lJyxcblx0XHRcdCdEVFRfSUQnLFxuXHRcdFx0J3N0YXJ0X2RhdGUnLFxuXHRcdFx0J2VuZF9kYXRlJyxcblx0XHRdICksXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0XHRzaG93RXhwaXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cdFx0bW9udGg6IFByb3BUeXBlcy5tb250aCxcblx0fSApLFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHtcbiAqIFx0e1xuICogXHRcdGF0dHJpYnV0ZXM6IHtcbiAqIFx0XHRcdGxpbWl0OiBudW1iZXIsXG4gKiBcdFx0XHRvcmRlckJ5OiBzdHJpbmcsXG4gKiBcdFx0XHRvcmRlcjogc3RyaW5nLFxuICogICBcdFx0c2hvd0V4cGlyZWQ6IGJvb2xlYW5cbiAqICAgXHR9XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRRdWVyeURhdGEgPSB7XG5cdHF1ZXJ5RGF0YToge1xuXHRcdGxpbWl0OiAxMDAsXG5cdFx0b3JkZXJCeTogJ3N0YXJ0X2RhdGUnLFxuXHRcdG9yZGVyOiBRVUVSWV9PUkRFUl9ERVNDLFxuXHRcdHNob3dFeHBpcmVkOiBmYWxzZSxcblx0fSxcbn07XG5cbi8qKlxuICogVXNlZCB0byBtYXAgYW4gb3JkZXJCeSBzdHJpbmcgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkIGluIGEgUkVTVCBxdWVyeSBmcm9tXG4gKiB0aGUgY29udGV4dCBvZiBhbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JkZXJCeVxuICpcbiAqIEByZXR1cm4geyBzdHJpbmcgfSBSZXR1cm5zIGFuIGFjdHVhbCBvcmRlckJ5IHN0cmluZyBmb3IgdGhlIFJFU1QgcXVlcnkgZm9yXG4gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvdmlkZWQgYWxpYXNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcE9yZGVyQnkgPSAoIG9yZGVyQnkgKSA9PiB7XG5cdGNvbnN0IG9yZGVyQnlNYXAgPSB7XG5cdFx0c3RhcnRfZGF0ZTogJ0RUVF9FVlRfc3RhcnQnLFxuXHRcdGVuZF9kYXRlOiAnRFRUX0VWVF9lbmQnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiBldmVudHMgZW5kcG9pbnQgcmVxdWVzdCB1c2luZyBwcm92aWRlZFxuICogaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGZvckV2ZW50SWQgIElEIGZvciBFdmVudCB0byByZXRyaWV2ZSBkYXRldGltZXMgZnJvbVxuICogQHBhcmFtIHtib29sZWFufSBzaG93RXhwaXJlZCAgV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBleHBpcmVkIGV2ZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb250aCAgICAgICAgIFJldHVybiBldmVudHMgZm9yIHRoZSBnaXZlbiBtb250aC4gIENhbiBiZSBhbnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYW55IG1vbnRoIGZvcm1hdCByZWNvZ25pemVkIGJ5IG1vbWVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgVGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdGZvckV2ZW50SWQgPSAwLFxuXHRzaG93RXhwaXJlZCA9IGZhbHNlLFxuXHRtb250aCA9ICdub25lJyxcbn0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGlmICggISBzaG93RXhwaXJlZCApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RUVF9FVlRfZW5kKipleHBpcmVkXVtdPScgKyBHUkVBVEVSX1RIQU4gK1xuXHRcdFx0JyZ3aGVyZVtEVFRfRVZUX2VuZCoqZXhwaXJlZF1bXT0nICtcblx0XHRcdG5vd0RhdGVBbmRUaW1lLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGlmICggbW9udGggJiYgbW9udGggIT09ICdub25lJyApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RUVF9FVlRfc3RhcnRdW109JyArIEdSRUFURVJfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtEVFRfRVZUX3N0YXJ0XVtdPScgK1xuXHRcdFx0bW9tZW50KCkubW9udGgoIG1vbnRoICkuc3RhcnRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbRFRUX0VWVF9lbmRdW109JyArIExFU1NfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtEVFRfRVZUX2VuZF1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLmVuZE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0aWYgKCBwYXJzZUludCggZm9yRXZlbnRJZCwgMTAgKSAhPT0gMCApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRXZlbnQuRVZUX0lEXT0nICsgZm9yRXZlbnRJZCApO1xuXHR9XG5cdHJldHVybiB3aGVyZS5qb2luKCAnJicgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgcXVlcnkgc3RyaW5nIGZvciB1c2UgYnkgYSBSRVNUIHJlcXVlc3QgZ2l2ZW4gYSBzZXQgb2YgcXVlcnlEYXRhLlxuICogQHBhcmFtIHsgT2JqZWN0IH0gcXVlcnlEYXRhXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gIFJldHVybnMgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5U3RyaW5nID0gKCBxdWVyeURhdGEgPSB7fSApID0+IHtcblx0cXVlcnlEYXRhID0geyAuLi5kZWZhdWx0UXVlcnlEYXRhLnF1ZXJ5RGF0YSwgLi4ucXVlcnlEYXRhIH07XG5cdHJldHVybiBiYXNlR2V0UXVlcnlTdHJpbmcoIHF1ZXJ5RGF0YSwgd2hlcmVDb25kaXRpb25zLCBtYXBPcmRlckJ5ICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBpc01vZGVsRW50aXR5T2ZNb2RlbCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgREFURVRJTUVfU1RBVFVTX0lELCBNT0RFTF9OQU1FLCBNT05USF9JTl9TRUNPTkRTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHRocm93cyB7VHlwZUVycm9yfVxuICovXG5jb25zdCBhc3NlcnREYXRlVGltZUVudGl0eSA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggRGF0ZVRpbWVFbnRpdHksIE1PREVMX05BTUUgKSApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0J1RoZSBwcm92aWRlZCBlbnRpdHkgaXMgbm90IGEgZGF0ZXRpbWUgaW5zdGFuY2UnXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZVRyYXNoZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IHRyYXNoZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZXZlbnQgZGF0ZSBpcyB2YWxpZCBlbnRpdHkgb3IgYXJjaGl2ZVxuICovXG5jb25zdCBpc1ZhbGlkRW50aXR5T3JBcmNoaXZlID0gKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgKSA9PiB7XG5cdHJldHVybiAoIGluY2x1ZGVUcmFzaGVkICYmIGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApICkgfHxcbiAgICAgICAgKCAhIGluY2x1ZGVUcmFzaGVkICYmICEgaXNUcmFzaGVkKCBEYXRlVGltZUVudGl0eSApICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlVHJhc2hlZCBpZiB0cnVlIHdpbGwgbm90IGZpbHRlciBvdXQgdHJhc2hlZCBlbnRpdGllc1xuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBldmVudCBkYXRlIGlzIG9jY3VycmluZyBOT1dcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQWN0aXZlID0gKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgPSBmYWxzZSApID0+IHtcblx0cmV0dXJuIGlzVmFsaWRFbnRpdHlPckFyY2hpdmUoIERhdGVUaW1lRW50aXR5LCBpbmNsdWRlVHJhc2hlZCApICYmXG5cdERhdGVUaW1lRW50aXR5LnN0YXJ0LmRpZmZOb3coKS5hc1NlY29uZHMoKSA8IDAgJiZcblx0RGF0ZVRpbWVFbnRpdHkuZW5kLmRpZmZOb3coKS5hc1NlY29uZHMoKSA+IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlVHJhc2hlZCBpZiB0cnVlIHdpbGwgbm90IGZpbHRlciBvdXQgdHJhc2hlZCBlbnRpdGllc1xuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlbmQgZGF0ZSBpcyBpbiB0aGUgcGFzdFxuICovXG5leHBvcnQgY29uc3QgaXNFeHBpcmVkID0gKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgPSBmYWxzZSApID0+IHtcblx0cmV0dXJuIGlzVmFsaWRFbnRpdHlPckFyY2hpdmUoIERhdGVUaW1lRW50aXR5LCBpbmNsdWRlVHJhc2hlZCApICYmXG5cdERhdGVUaW1lRW50aXR5LmVuZC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPCAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZVRyYXNoZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IHRyYXNoZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZW5kIGRhdGUgaXMgaW4gdGhlIHBhc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGlzUmVjZW50bHlFeHBpcmVkID0gKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgPSBmYWxzZSApID0+IHtcblx0cmV0dXJuIGlzVmFsaWRFbnRpdHlPckFyY2hpdmUoIERhdGVUaW1lRW50aXR5LCBpbmNsdWRlVHJhc2hlZCApICYmXG5cdERhdGVUaW1lRW50aXR5LmVuZC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPCAwICYmXG5cdERhdGVUaW1lRW50aXR5LmVuZC5kaWZmTm93KCkuYXNTZWNvbmRzKCkgPiAoIE1PTlRIX0lOX1NFQ09ORFMgKiAtMSApO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZVRyYXNoZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IHRyYXNoZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGlja2V0cyBzb2xkIG1lZXRzIG9yIGV4Y2VlZHMgcmVnaXN0cmF0aW9uIGxpbWl0XG4gKi9cbmV4cG9ydCBjb25zdCBpc1NvbGRPdXQgPSAoIERhdGVUaW1lRW50aXR5LCBpbmNsdWRlVHJhc2hlZCA9IGZhbHNlICkgPT4ge1xuXHRpZiAoXG5cdFx0KCBpbmNsdWRlVHJhc2hlZCAmJiAhIGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApICkgfHxcblx0XHQoICEgaW5jbHVkZVRyYXNoZWQgJiYgaXNUcmFzaGVkKCBEYXRlVGltZUVudGl0eSApIClcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IGNhcCA9IERhdGVUaW1lRW50aXR5LnJlZ0xpbWl0O1xuXHRyZXR1cm4gKCBjYXAgIT09IG51bGwgJiYgY2FwICE9PSAnSU5GJyAmJiBjYXAgIT09IEluZmluaXR5ICYmIGNhcCAhPT0gLTEgKSAmJlxuXHRcdERhdGVUaW1lRW50aXR5LnNvbGQgPj0gY2FwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZVRyYXNoZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IHRyYXNoZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgc3RhcnQgZGF0ZSBpcyBpbiB0aGUgZnV0dXJlXG4gKi9cbmV4cG9ydCBjb25zdCBpc1VwY29taW5nID0gKCBEYXRlVGltZUVudGl0eSwgaW5jbHVkZVRyYXNoZWQgPSBmYWxzZSApID0+IHtcblx0cmV0dXJuIGlzVmFsaWRFbnRpdHlPckFyY2hpdmUoIERhdGVUaW1lRW50aXR5LCBpbmNsdWRlVHJhc2hlZCApICYmXG5cdERhdGVUaW1lRW50aXR5LnN0YXJ0LmRpZmZOb3coKS5hc1NlY29uZHMoKSA+IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IERhdGVUaW1lRW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBkYXRlIGlzIGFyY2hpdmVkXG4gKi9cbmV4cG9ydCBjb25zdCBpc1RyYXNoZWQgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRhc3NlcnREYXRlVGltZUVudGl0eSggRGF0ZVRpbWVFbnRpdHkgKTtcblx0cmV0dXJuIERhdGVUaW1lRW50aXR5LmRlbGV0ZWQ7XG59O1xuXG4vLyBQTFogTk9URTpcbi8vIGxlYXZpbmcgdGhlIGZvbGxvd2luZyBjb2RlIGluIGJlY2F1c2UgaXQgY2FuIGJlIHVzZWQgaWYvd2hlbiB3ZSBkZWNpZGVcbi8vIHRvIGZ1bGx5IHN1cHBvcnQgdGhlc2UgZGF0ZXRpbWUgc3RhdHVzZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBkZWZpbmVkXG4vLyBvbiB0aGUgRUVfRGF0ZXRpbWUgbW9kZWwgb2JqZWN0IGNsYXNzIGJ1dCBub3QgeWV0IHVzZWRcblxuLy8gLyoqXG4vLyAgKiBAZnVuY3Rpb25cbi8vICAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3Rcbi8vICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZGF0ZSBpcyBjYW5jZWxsZWRcbi8vICAqL1xuLy8gZXhwb3J0IGNvbnN0IGlzQ2FuY2VsbGVkID0gKCBEYXRlVGltZUVudGl0eSApID0+IHtcbi8vIFx0YXNzZXJ0RGF0ZVRpbWVFbnRpdHkoIERhdGVUaW1lRW50aXR5ICk7XG4vLyBcdHJldHVybiBEYXRlVGltZUVudGl0eS5jYW5jZWxsZWQ7XG4vLyB9O1xuLy9cbi8vIC8qKlxuLy8gICogQGZ1bmN0aW9uXG4vLyAgKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4vLyAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGRhdGUgaGFzIGJlZW4gcG9zdHBvbmVkXG4vLyAgKi9cbi8vIGV4cG9ydCBjb25zdCBpc1Bvc3Rwb25lZCA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG4vLyBcdGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApO1xuLy8gXHRyZXR1cm4gRGF0ZVRpbWVFbnRpdHkucG9zdHBvbmVkO1xuLy8gfTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gc3RhdHVzIElEXG4gKi9cbmV4cG9ydCBjb25zdCBzdGF0dXMgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRpZiAoIGlzVHJhc2hlZCggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELlRSQVNIRUQ7XG5cdH1cblx0aWYgKCBpc0V4cGlyZWQoIERhdGVUaW1lRW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIERBVEVUSU1FX1NUQVRVU19JRC5FWFBJUkVEO1xuXHR9XG5cdGlmICggaXNTb2xkT3V0KCBEYXRlVGltZUVudGl0eSApICkge1xuXHRcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuU09MRF9PVVQ7XG5cdH1cblx0aWYgKCBpc1VwY29taW5nKCBEYXRlVGltZUVudGl0eSApICkge1xuXHRcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuVVBDT01JTkc7XG5cdH1cblx0aWYgKCBpc0FjdGl2ZSggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELkFDVElWRTtcblx0fVxuXHQvLyBQTFogU0VFIE5PVEUgQUJPVkVcblx0Ly8gaWYgKCBpc0NhbmNlbGxlZCggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0Ly8gXHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELkNBTkNFTExFRDtcblx0Ly8gfVxuXHQvLyBpZiAoIGlzUG9zdHBvbmVkKCBEYXRlVGltZUVudGl0eSApICkge1xuXHQvLyBcdHJldHVybiBEQVRFVElNRV9TVEFUVVNfSUQuUE9TVFBPTkVEO1xuXHQvLyB9XG5cdGFzc2VydERhdGVUaW1lRW50aXR5KCBEYXRlVGltZUVudGl0eSApO1xuXHRyZXR1cm4gREFURVRJTUVfU1RBVFVTX0lELklOQUNUSVZFO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlVGltZUVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgQ1NTIGNsYXNzIGZvciB0aGUgYmFja2dyb3VuZCBjb2xvclxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFja2dyb3VuZENvbG9yQ2xhc3MgPSAoIERhdGVUaW1lRW50aXR5ICkgPT4ge1xuXHRyZXR1cm4gYGVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLSR7IHN0YXR1cyggRGF0ZVRpbWVFbnRpdHkgKSB9YDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gRGF0ZVRpbWVFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9IGRhdGUgc3RhdHVzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRlVGltZVN0YXR1c1RleHRMYWJlbCA9ICggRGF0ZVRpbWVFbnRpdHkgKSA9PiB7XG5cdGxldCBkYXRlU3RhdHVzID0gJyc7XG5cdHN3aXRjaCAoIHN0YXR1cyggRGF0ZVRpbWVFbnRpdHkgKSApIHtcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5TT0xEX09VVCA6XG5cdFx0XHRkYXRlU3RhdHVzID0gX18oICdzb2xkIG91dCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELkVYUElSRUQgOlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnZXhwaXJlZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELlVQQ09NSU5HIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ3VwY29taW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBEQVRFVElNRV9TVEFUVVNfSUQuQUNUSVZFIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ2FjdGl2ZScsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELlRSQVNIRUQgOlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnYXJjaGl2ZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIERBVEVUSU1FX1NUQVRVU19JRC5DQU5DRUxMRUQgOlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnY2FuY2VsbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBEQVRFVElNRV9TVEFUVVNfSUQuUE9TVFBPTkVEIDpcblx0XHRcdGRhdGVTdGF0dXMgPSBfXyggJ3Bvc3Rwb25lZCcsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgREFURVRJTUVfU1RBVFVTX0lELklOQUNUSVZFIDpcblx0XHRkZWZhdWx0OlxuXHRcdFx0ZGF0ZVN0YXR1cyA9IF9fKCAnaW5hY3RpdmUnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gZGF0ZVN0YXR1cztcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBtYXBWYWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbWVtaXplJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgZW5kcG9pbnRzIH0gZnJvbSAnLi9lbmRwb2ludHMuanMnO1xuXG4vKipcbiAqIFJlY2VpdmVzIGFuIG9iamVjdCBtYXAgb2YgbW9kZWxOYW1lIHRvIGVuZHBvaW50IGFuZCBtYXBzIHRoYXQgdG8gYSBkZWZhdWx0XG4gKiBtYXAgb2YgbW9kZWxOYW1lIHRvIGVtcHR5IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0geyBPYmplY3QgfSBtb2RlbE5hbWVFbmRwb2ludHNcbiAqIEByZXR1cm4geyBPYmplY3QgfSBBbiBvYmplY3Qgb2YgeyB7IG1vZGVsTmFtZSB9IDoge30gfVxuICovXG5jb25zdCBtYXBUb09iamVjdFZhbHVlcyA9ICggbW9kZWxOYW1lRW5kcG9pbnRzICkgPT4ge1xuXHRyZXR1cm4gbWFwVmFsdWVzKCBtb2RlbE5hbWVFbmRwb2ludHMsXG5cdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fSxcblx0KTtcbn07XG5cbmNvbnN0IGdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0ID0gbWVtb2l6ZShcblx0KCkgPT4gbWFwVG9PYmplY3RWYWx1ZXMoIGVuZHBvaW50cyApXG4pO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBkZWZhdWx0IHN0YXRlIHRvIGJlIHVzZWQgYnkgc3RvcmVzIGNvbnRhaW5pbmcgbGlzdHMuXG4gKlxuICogQHR5cGUgeyBPYmplY3QgfVxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9MSVNUU19TVEFURSA9IG1hcFRvT2JqZWN0VmFsdWVzKCBlbmRwb2ludHMgKTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgZGVmYXVsdCBzdGF0ZSB0byBiZSB1c2VkIGJ5IHRoZSBjb3JlIHN0b3JlLlxuICpcbiAqIEB0eXBlIHt7ZW50aXRpZXM6IHt9LCBlbnRpdHlJZHM6IHt9LCBkaXJ0eToge319fVxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT1JFX1NUQVRFID0ge1xuXHRlbnRpdGllczoge1xuXHRcdC4uLmdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0KCksXG5cdH0sXG5cdHJlbGF0aW9uczoge30sXG5cdGRpcnR5OiB7XG5cdFx0cmVsYXRpb25zOiB7XG5cdFx0XHRpbmRleDoge30sXG5cdFx0XHRkZWxldGU6IHt9LFxuXHRcdFx0YWRkOiB7fSxcblx0XHR9LFxuXHRcdHRyYXNoOiB7fSxcblx0XHRkZWxldGU6IHt9LFxuXHR9LFxufTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgZGVmYXVsdCBzdGF0ZSB0byBiZSB1c2VkIGJ5IHRoZSBzY2hlbWEgc3RvcmUuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TQ0hFTUFfU1RBVEUgPSB7XG5cdHNjaGVtYToge1xuXHRcdC4uLmdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0KCksXG5cdH0sXG5cdGZhY3Rvcnk6IHtcblx0XHQuLi5nZXREZWZhdWx0TW9kZWxFbnRpdGllc09iamVjdCgpLFxuXHR9LFxuXHRyZWxhdGlvbkVuZHBvaW50czoge1xuXHRcdC4uLmdldERlZmF1bHRNb2RlbEVudGl0aWVzT2JqZWN0KCksXG5cdH0sXG5cdHJlbGF0aW9uU2NoZW1hOiB7fSxcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgZGF0YSB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgYXNzZXJ0RW50aXR5SGFzS2V5IH0gZnJvbSAnLi9hc3NlcnRpb25zJztcblxuLyoqXG4gKiBBbGwgYXZhaWxhYmxlIGVuZHBvaW50cyBleHBvc2VkIHZpYSB0aGUgZWVqcy5kYXRhIGdsb2JhbCBmcm9tIHRoZSBzZXJ2ZXIuXG4gKlxuICogQHR5cGUge3t9fVxuICovXG5leHBvcnQgY29uc3Qge1xuXHRjb2xsZWN0aW9uX2VuZHBvaW50czogZW5kcG9pbnRzID0ge30sXG5cdGJhc2VfcmVzdF9yb3V0ZTogYmFzZVJlc3RSb3V0ZSxcbn0gPSBkYXRhLnBhdGhzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZW5kcG9pbnQgZm9yIHRoZSBwcm92aWRlZCBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lICBXaGF0IG1vZGVsIHRvIHJldHJpZXZlIHRoZSBlbmRwb2ludCBmb3IuXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICBUaGUgZW5kcG9pbnQgZm9yIHRoZSBwcm92aWRlZCBtb2RlbC5cbiAqIEB0aHJvd3Mge0V4Y2VwdGlvbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVuZHBvaW50ID0gKCBtb2RlbE5hbWUgKSA9PiB7XG5cdGFzc2VydEVudGl0eUhhc0tleSggbW9kZWxOYW1lLCBlbmRwb2ludHMgKTtcblx0cmV0dXJuIGVuZHBvaW50c1sgbW9kZWxOYW1lIF07XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIHByb3ZpZGVkIHF1ZXJ5U3RyaW5nIHRvIHRoZSBlbmRwb2ludCBmb3IgdGhlIHByb3ZpZGVkIG1vZGVsIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lICBXaGF0IG1vZGVsIHRoZSBmaW5hbCBzdHJpbmcgaXMgZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nICBUaGUgcXVlcnkgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIGVuZHBvaW50LlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZmluYWwgYXNzZW1ibGVkIHF1ZXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5UXVlcnlTdHJpbmcgPSAoIG1vZGVsTmFtZSwgcXVlcnlTdHJpbmcgPSAnJyApID0+IHtcblx0cmV0dXJuIHF1ZXJ5U3RyaW5nICE9PSAnJyA/XG5cdFx0Z2V0RW5kcG9pbnQoIG1vZGVsTmFtZSApICsgJz8nICsgcXVlcnlTdHJpbmcgOlxuXHRcdGdldEVuZHBvaW50KCBtb2RlbE5hbWUgKTtcbn07XG5cbi8qKlxuICogU3RyaXBzIHRoZSBiYXNlX3Jlc3Rfcm91dGUgKGkuZS4gaHR0cHM6Ly9teXVybC5jb20vd3AtanNvbi8pIGZyb20gdGhlIHByb3ZpZGVkXG4gKiB1cmwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHVybCB3aXRoIHRoZSBiYXNlIHJlc3Qgcm91dGUgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmlwQmFzZVJvdXRlRnJvbVVybCA9ICggdXJsICkgPT4ge1xuXHRyZXR1cm4gdXJsLnJlcGxhY2UoIGJhc2VSZXN0Um91dGUsICcnICk7XG59O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHNwcmludGYgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IEludmFsaWRTY2hlbWEgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IGlzU2NoZW1hIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5pbXBvcnQge1xuXHRNb25leSxcblx0U2VydmVyRGF0ZVRpbWUgYXMgRGF0ZVRpbWUsXG59IGZyb20gJ0BldmVudGVzcHJlc3NvL3ZhbHVlLW9iamVjdHMnO1xuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGlzRGF0ZVRpbWVGaWVsZCxcblx0aXNNb25leUZpZWxkLFxufSBmcm9tICcuL2Jvb2xlYW5zJztcbmltcG9ydCB7XG5cdGlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZCxcblx0dmFsaWRhdGVFbnVtVHlwZSxcblx0dmFsaWRhdGVUeXBlLFxuXHR2YWxpZGF0ZVR5cGVGb3JGaWVsZCxcbn0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zIH0gZnJvbSAnLi9leHRyYWN0b3JzJztcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZpZWxkIHZhbHVlIGlzIGEga25vd24gdmFsdWUgb2JqZWN0LlxuICpcbiAqIE5vdGU6IHRoaXMgb25seSBhc3NlcnRzIGtub3duIHZhbHVlIG9iamVjdHMsIGlmIHRoZSB2YWx1ZSBpcyBub3QgZGV0ZWN0ZWQgYXNcbiAqIGEga25vd24gdmFsdWUgb2JqZWN0IGl0IGlzIHBhc3NlZCBiYWNrIGFzIGlzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHRocm93cyBJbnZhbGlkRGF0ZVRpbWVcbiAqIEB0aHJvd3MgVHlwZUVycm9yXG4gKi9cbmV4cG9ydCBjb25zdCBtYXliZUFzc2VydFZhbHVlT2JqZWN0ID0gKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIHNjaGVtYSApID0+IHtcblx0aWYgKCBpc0RhdGVUaW1lRmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0RGF0ZVRpbWUuYXNzZXJ0SXNEYXRlVGltZSggZmllbGRWYWx1ZSApO1xuXHR9XG5cdGlmICggaXNNb25leUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICkge1xuXHRcdE1vbmV5LmFzc2VydE1vbmV5KCBmaWVsZFZhbHVlICk7XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB3aGV0aGVyIHRoZSBwcm92aWRlZCBvYmplY3QgaXMgYSB2YWxpZCBtb2RlbCBzY2hlbWEgb2JqZWN0LlxuICpcbiAqIEN1cnJlbnRseSwgYW4gb2JqZWN0IGlzIGNvbnNpZGVyZWQgYSB2YWxpZCBtb2RlbCBzY2hlbWEgaWYgaXQgaGFzIGFcbiAqICdwcm9wZXJ0aWVzJyBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHNjaGVtYVxuICogQHRocm93cyBJbnZhbGlkU2NoZW1hXG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRWYWxpZFNjaGVtYSA9ICggc2NoZW1hICkgPT4ge1xuXHRpZiAoICEgaXNTY2hlbWEoIHNjaGVtYSApICkge1xuXHRcdHRocm93IG5ldyBJbnZhbGlkU2NoZW1hKFxuXHRcdFx0J1RoaXMgaXMgYW4gaW52YWxpZCBzY2hlbWEgZm9yIGEgbW9kZWwuJyxcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gZmllbGQgZXhpc3RzIGluIHRoZSBwcm92aWRlZCBzY2hlbWEgYW5kIHRoZSBzaGFwZSBmb3JcbiAqIHRoZSBzY2hlbWEgZW50cnkgb24gdGhhdCBmaWVsZCBpcyBleHBlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lICBUaGUgbW9kZWwgdGhlIHNjaGVtYSBiZWxvbmdzIHRvLCB0aGlzIGlzIHVzZWQgZm9yXG4gKiBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWUgIFRoZSBmaWVsZCBiZWluZyBjaGVja2VkIGFnYWluc3QgdGhlIHNjaGVtYVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSAgICAgVGhlIHNjaGVtYSBmb3IgdGhlIG1vZGVsIHVzZWQgZm9yIHZhbGlkYXRpb25cbiAqIEB0aHJvd3MgSW52YWxpZFNjaGVtYVxuICogQHRocm93cyBUeXBlRXJyb3JcbiAqL1xuZXhwb3J0IGNvbnN0IGFzc2VydFZhbGlkU2NoZW1hRmllbGRQcm9wZXJ0aWVzID0gKFxuXHRtb2RlbE5hbWUsXG5cdGZpZWxkTmFtZSxcblx0c2NoZW1hLFxuKSA9PiB7XG5cdGlmICggaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0gKSApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0c3ByaW50Zihcblx0XHRcdFx0J1RoZSBnaXZlbiBcIiVzXCIgZmllbGROYW1lIGRvZXMgbm90IGhhdmUgYSBkZWZpbmVkIHNjaGVtYSBmb3IgdGhlIG1vZGVsIFwiJXNcIicsXG5cdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0bW9kZWxOYW1lLFxuXHRcdFx0KSxcblx0XHQpO1xuXHR9XG5cdGlmICggc2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlID09PSAnb2JqZWN0JyApIHtcblx0XHRpZiAoIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMgKSApIHtcblx0XHRcdHRocm93IG5ldyBJbnZhbGlkU2NoZW1hKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgc2NoZW1hIGZvciB0aGUgZmllbGQgJXMgb24gdGhlIG1vZGVsICVzIGlzIG9mIHR5cGUgXCJvYmplY3RcIiBidXQgZG9lcyBub3QgaGF2ZSBhIHByb3BlcnRpZXMgcHJvcGVydHkuJyxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0bW9kZWxOYW1lXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmICggaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcgKSApIHtcblx0XHRcdHRocm93IG5ldyBJbnZhbGlkU2NoZW1hKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgc2NoZW1hIGZvciB0aGUgZmllbGQgJXMgb24gdGhlIG1vZGVsICVzIGlzIG9mIHR5cGUgXCJvYmplY3RcIiBidXQgZG9lcyBub3QgaGF2ZSBhIHJhdyBwcm9wZXJ0eSBpbiBpdFxcJ3MgXCJwcm9wZXJ0aWVzXCIgcHJvcGVydHkuJyxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0bW9kZWxOYW1lXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmICggaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcudHlwZSApICkge1xuXHRcdFx0dGhyb3cgbmV3IEludmFsaWRTY2hlbWEoXG5cdFx0XHRcdHNwcmludGYoXG5cdFx0XHRcdFx0J1RoZSBzY2hlbWEgZm9yIHRoZSBmaWVsZCAlcyBvbiB0aGUgbW9kZWwgJXMgaXMgb2YgdHlwZSBcIm9iamVjdFwiIGFuZCBoYXMgYSBwcm9wZXJ0aWVzLnJhdyBwcm9wZXJ0eSwgaG93ZXZlciB0aGVyZSBpcyBubyBcInR5cGVcIiBkZWZpbmVkIGZvciB0aGUgcmF3IHByb3BlcnR5LicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdG1vZGVsTmFtZVxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRoZSB2YWx1ZSBwcm92aWRlZCBmb3IgdGhlIHByZXBhcmVkIGZpZWxkIGlzIHZhbGlkIGFjY29yZGluZyB0b1xuICogdGhlIHNjaGVtYS5cbiAqXG4gKiBQcmVwYXJlZCBmaWVsZHMgYXJlOlxuICpcbiAqIC0gZmllbGRzIGhhdmluZyB2YWx1ZXMgdGhhdCBhcmUgc2V0IGFzIGEgdmFsdWUgb2JqZWN0IGFuZCBleHBlY3QgYSB2YWx1ZVxuICogICBvYmplY3Qgb24gdXBkYXRlcy9pbnNlcnRzLlxuICogLSBmaWVsZHMgdGhhdCBhcmUgdGhlIGVxdWl2YWxlbnQgYHJhd2AgdmFsdWUgd2hlbiB0aGUgZmllbGQgaW4gdGhlIHNjaGVtYSBpc1xuICogICBkZWZpbmVkIHRvIGhhdmUgcmF3IGFuZCByZW5kZXJlZC9wcmV0dHkgdmFsdWVzLlxuICpcbiAqIE5vdGU6ICBUaGlzIHZhbGlkYXRlcyBhZ2FpbnN0IHByZXBhcmVkIGZpZWxkcyB3aGljaCBtZWFucyB0aGF0OlxuICpcbiAqIC0gaWYgdGhlIHByZXBhcmVkIGZpZWxkIGhhcyBhIHZhbHVlIG9iamVjdCBhcyBpdHMgdmFsdWUsIHRoZW4gdGhhdCB2YWx1ZVxuICogICBvYmplY3QgaXMgdmFsaWRhdGVkIGJlZm9yZSBhbnkgb3RoZXIgdmFsaWRhdGlvbi5cbiAqIC0gaWYgdGhlIHByZXBhcmVkIGZpZWxkIHJlcHJlc2VudHMgYW4gb2JqZWN0IGluIHRoZSBzY2hlbWEsIHRoZW4gaXRzIHZhbHVlIGlzXG4gKiAgIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBgcmF3YCB0eXBlIGluIHRoZSBzY2hlbWEuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEB0aHJvd3MgVHlwZUVycm9yXG4gKiBAdGhyb3dzIEludmFsaWREYXRlVGltZVxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0VmFsaWRWYWx1ZUZvclByZXBhcmVkRmllbGQgPSAoXG5cdGZpZWxkTmFtZSxcblx0ZmllbGRWYWx1ZSxcblx0aW5zdGFuY2UsXG4pID0+IHtcblx0Y29uc3QgeyBzY2hlbWEgfSA9IGluc3RhbmNlO1xuXHRsZXQgaXNWYWxpZCA9IGlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZChcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZmllbGRWYWx1ZSxcblx0XHRzY2hlbWEsXG5cdCk7XG5cdGlmICggISBpc1ZhbGlkICYmIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgJiZcblx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNcblx0KSB7XG5cdFx0aXNWYWxpZCA9IHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcuZW51bSA/XG5cdFx0XHR2YWxpZGF0ZUVudW1UeXBlKFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LnR5cGUsXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5yYXcuZW51bSxcblx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdCkgOlxuXHRcdFx0dmFsaWRhdGVUeXBlKFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LnR5cGUsXG5cdFx0XHRcdG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zKFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRcdHNjaGVtYVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdGlmICggISBpc1ZhbGlkICkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0c3ByaW50Zihcblx0XHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIGZpZWxkICBpcyBub3QgdmFsaWQgZm9yIHRoZSBkZWZpbmVkIHNjaGVtYS4gIEl0XFwncyBgcmF3YCBwcm9wZXJ0eSBWYWx1ZSAoJTIkcykgaXMgbm90IHRoZSBjb3JyZWN0IGV4cGVjdGVkIHR5cGUgKCUzJHMpLicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlLFxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0aWYgKCAhIGlzVmFsaWQgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdHNwcmludGYoXG5cdFx0XHRcdCdUaGUgZ2l2ZW4gXCIlMSRzXCIgZmllbGRcXCdzIFZhbHVlICglMiRzKSBpcyBub3QgdmFsaWQgZm9yIHRoZSBkZWZpbmVkIHNjaGVtYSB0eXBlICglMyRzKS4nLFxuXHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSxcblx0XHRcdCksXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBBc3NlcnRzIHdoZXRoZXIgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4gZmllbGQgaXMgdmFsaWQgYWNjb3JkaW5nIHRvIHRoZVxuICogc2NoZW1hLlxuICpcbiAqIFRoaXMgaXMgdXNlZCBvbiBlbnRpdHkgY29uc3RydWN0aW9uIGFuZCBkb2VzIG5vdCB2YWxpZGF0ZSBwcmVwYXJlZCBmaWVsZFxuICogdmFsdWVzIChzZWUgYXNzZXJ0IGFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkKS5cbiAqXG4gKiBUaGlzIG1ldGhvZCBhbHNvIGFzc2VydHMgdGhhdCB0aGUgc2NoZW1hIGhhcyB2YWxpZCBzY2hlbWEgZmllbGQgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHRocm93cyBUeXBlRXJyb3JcbiAqIEB0aHJvd3MgSW52YWxpZFNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgYXNzZXJ0VmFsaWRGaWVsZEFuZFZhbHVlQWdhaW5zdFNjaGVtYSA9IChcblx0bW9kZWxOYW1lLFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGluc3RhbmNlLFxuKSA9PiB7XG5cdGNvbnN0IHNjaGVtYSA9IGluc3RhbmNlLnNjaGVtYTtcblx0Y29uc3QgdmFsaWRhdGlvblR5cGUgPSB2YWxpZGF0ZVR5cGVGb3JGaWVsZCggZmllbGROYW1lLCBpbnN0YW5jZSApO1xuXHRhc3NlcnRWYWxpZFNjaGVtYUZpZWxkUHJvcGVydGllcyggbW9kZWxOYW1lLCBmaWVsZE5hbWUsIHNjaGVtYSApO1xuXHRsZXQgaXNWYWxpZCA9IGlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZChcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZmllbGRWYWx1ZSxcblx0XHRzY2hlbWEsXG5cdFx0ZmFsc2UsXG5cdCk7XG5cdC8vIGFjY291bnQgZm9yIGZpZWxkTmFtZSBmaWVsZFZhbHVlcyB0aGF0IGhhdmUgcHJvcGVydHkgc2NoZW1hLiBGb3IgTW9kZWxcblx0Ly8gRW50aXRpZXMsIG9ubHkgdGhlIFZBTElEQVRFX1RZUEUgcHJvcGVydHkgaXMgY2FyZWQgYWJvdXQuXG5cdGlmICggc2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlID09PSAnb2JqZWN0JyAmJlxuXHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllc1xuXHQpIHtcblx0XHRpZiAoIGlzVW5kZWZpbmVkKCBmaWVsZFZhbHVlWyB2YWxpZGF0aW9uVHlwZSBdICkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgZ2l2ZW4gXCIlMSRzXCIgdmFsdWUgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEuIEl0IG11c3QgYmUgYW4gb2JqZWN0IGFuZCBpdCBtdXN0IGhhdmUgYSBgJTIkc2Aga2V5LicsXG5cdFx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRcdHZhbGlkYXRpb25UeXBlLFxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aXNWYWxpZCA9IHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllc1sgdmFsaWRhdGlvblR5cGUgXS5lbnVtID9cblx0XHRcdHZhbGlkYXRlRW51bVR5cGUoXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllc1sgdmFsaWRhdGlvblR5cGUgXS50eXBlLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LmVudW0sXG5cdFx0XHRcdGZpZWxkVmFsdWVbIHZhbGlkYXRpb25UeXBlIF0sXG5cdFx0XHQpIDpcblx0XHRcdHZhbGlkYXRlVHlwZShcblx0XHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzWyB2YWxpZGF0aW9uVHlwZSBdLnR5cGUsXG5cdFx0XHRcdGZpZWxkVmFsdWVbIHZhbGlkYXRpb25UeXBlIF1cblx0XHRcdCk7XG5cdFx0aWYgKCAhIGlzVmFsaWQgKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgZ2l2ZW4gXCIlMSRzXCIgdmFsdWUgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEuICBJdFxcJ3MgYCUyJHNgIHByb3BlcnR5IHZhbHVlICglMyRzKSBpcyBub3QgdGhlIGNvcnJlY3QgZXhwZWN0ZWQgdHlwZSAoJTQkcykuJyxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0dmFsaWRhdGlvblR5cGUsXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXNbIHZhbGlkYXRpb25UeXBlIF0udHlwZSxcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdGlmICggISBpc1ZhbGlkICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHQnVGhlIGdpdmVuIFwiJTEkc1wiIGZpZWxkXFwncyB2YWx1ZSAoJTIkcykgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEgdHlwZSAoJTMkcykuJyxcblx0XHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0XHRmaWVsZFZhbHVlLFxuXHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH1cbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNBcnJheSwgdXBwZXJGaXJzdCwgY2FtZWxDYXNlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBhc3NlcnRWYWxpZFNjaGVtYSB9IGZyb20gJy4vYXNzZXJ0aW9ucyc7XG5pbXBvcnQge1xuXHRjcmVhdGVHZXR0ZXIsXG5cdGNyZWF0ZUVudGl0eUdldHRlcnNBbmRTZXR0ZXJzLFxuXHRjcmVhdGVQZXJzaXN0aW5nR2V0dGVyc0FuZFNldHRlcnMsXG5cdHNldFNhdmVTdGF0ZSxcbn0gZnJvbSAnLi9jcmVhdGUnO1xuaW1wb3J0IHtcblx0U0FWRV9TVEFURSxcblx0UFJJVkFURV9QUk9QRVJUSUVTLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQmFzZUVudGl0eSBpcyB0aGUgYmFzaWMgY2xhc3MgZm9yIGFsbCBlbnRpdGllcy4gIGNyZWF0ZUVudGl0eUZhY3RvcnkgcmV0dXJuc1xuICogYW4gaW5zdGFuY2Ugb2YgdGhpcyBhbmQgYWxsIHRoZSBnZXR0ZXJzL3NldHRlcnMgZm9yIGZpZWxkcyBldGMgYXJlXG4gKiBkeW5hbWljYWxseSBjcmVhdGVkIHZpYSB0aGUgY29uc3RydWN0b3IuXG4gKi9cbmNsYXNzIEJhc2VFbnRpdHkge1xuXHRbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF0gPSBTQVZFX1NUQVRFLkNMRUFOO1xuXHRbIFBSSVZBVEVfUFJPUEVSVElFUy5WQUxJREFURV9UWVBFUyBdID0ge307XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yIGZvciBCYXNlIEVudGl0eVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBlbnRpdHlGaWVsZHNBbmRWYWx1ZXNcblx0ICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuXHQgKiBAcGFyYW0ge0FycmF5fWZpZWxkUHJlZml4ZXNcblx0ICogQHBhcmFtIHtib29sZWFufSBpc05ld1xuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0bW9kZWxOYW1lLFxuXHRcdGVudGl0eUZpZWxkc0FuZFZhbHVlcyxcblx0XHRzY2hlbWEsXG5cdFx0ZmllbGRQcmVmaXhlcyA9IFtdLFxuXHRcdGlzTmV3ID0gZmFsc2UsXG5cdCkge1xuXHRcdGFzc2VydFZhbGlkU2NoZW1hKCBzY2hlbWEgKTtcblx0XHRmaWVsZFByZWZpeGVzID0gaXNBcnJheSggZmllbGRQcmVmaXhlcyApID8gZmllbGRQcmVmaXhlcyA6IFtdO1xuXHRcdGNyZWF0ZUdldHRlciggdGhpcywgJ2ZpZWxkUHJlZml4ZXMnLCBmaWVsZFByZWZpeGVzICk7XG5cdFx0Y3JlYXRlR2V0dGVyKCB0aGlzLCAnc2NoZW1hJywgc2NoZW1hLnByb3BlcnRpZXMgKTtcblx0XHRzZXRTYXZlU3RhdGUoXG5cdFx0XHR0aGlzLFxuXHRcdFx0aXNOZXcgPyBTQVZFX1NUQVRFLk5FVyA6IFNBVkVfU1RBVEUuQ0xFQU5cblx0XHQpO1xuXHRcdGNyZWF0ZUdldHRlciggdGhpcywgJ21vZGVsTmFtZScsIG1vZGVsTmFtZSApO1xuXHRcdGNyZWF0ZUdldHRlciggdGhpcywgJ29yaWdpbmFsRmllbGRzQW5kVmFsdWVzJywgZW50aXR5RmllbGRzQW5kVmFsdWVzICk7XG5cdFx0Y3JlYXRlR2V0dGVyKFxuXHRcdFx0dGhpcyxcblx0XHRcdCdmaWVsZHNUb1BlcnNpc3RPbkluc2VydCcsXG5cdFx0XHRuZXcgU2V0KCBPYmplY3Qua2V5cyggZW50aXR5RmllbGRzQW5kVmFsdWVzICkgKVxuXHRcdCk7XG5cdFx0Y3JlYXRlRW50aXR5R2V0dGVyc0FuZFNldHRlcnMoIHRoaXMgKTtcblx0XHRjcmVhdGVQZXJzaXN0aW5nR2V0dGVyc0FuZFNldHRlcnMoIHRoaXMgKTtcblx0XHRPYmplY3Quc2VhbCggdGhpcyApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBvbiB0aGUgZW50aXR5LlxuXHQgKlxuXHQgKiBTYXZlIHN0YXRlIGRlc2NyaWJlcyB3aGV0aGVyIHRoZSBlbnRpdHkgaXM6XG5cdCAqXG5cdCAqIC0gU0FWRV9TVEFURS5ORVc6IFRoZSBlbnRpdHkgaGFzIG5ldmVyIGJlZW4gcGVyc2lzdGVkIHRvIHN0b3JhZ2UuXG5cdCAqIC0gU0FWRV9TVEFURS5DTEVBTjogVGhlIGVudGl0eSBleGlzdHMgaW4gc3RvcmFnZSBhbmQgaGFzIG5vdCBiZWVuIG11dGF0ZWQuXG5cdCAqIC0gU0FWRV9TVEFURS5ESVJUWTogVGhlIGVudGl0eSBpcyBtdXRhdGVkIGFuZCBjaGFuZ2VzIGhhdmUgbm90IGJlZW5cblx0ICogcGVyc2lzdGVkIHRvIHN0b3JhZ2UuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1N5bWJvbH0gIFJldHVybnMgdGhlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBmb3IgdGhlIGVudGl0eS5cblx0ICovXG5cdGdldCBzYXZlU3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF07XG5cdH1cblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgY3VycmVudCBzYXZlIHN0YXRlIGlzIFNBVkVfU1RBVEUuTkVXXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIFNBVkVfU1RBVEUuTkVXIGlzIHRoZSBzYXZlIHN0YXRlLlxuXHQgKi9cblx0Z2V0IGlzTmV3KCkge1xuXHRcdHJldHVybiB0aGlzLnNhdmVTdGF0ZSA9PT0gU0FWRV9TVEFURS5ORVc7XG5cdH1cblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgY3VycmVudCBzYXZlIHN0YXRlIGlzIFNBVkVfU1RBVEUuRElSVFlcblx0ICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgU0FWRV9TVEFURS5ESVJUWSBpcyB0aGUgc2F2ZSBzdGF0ZS5cblx0ICovXG5cdGdldCBpc0RpcnR5KCkge1xuXHRcdHJldHVybiB0aGlzLnNhdmVTdGF0ZSA9PT0gU0FWRV9TVEFURS5ESVJUWTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBjdXJyZW50IHNhdmUgc3RhdGUgaXMgU0FWRV9TVEFURS5DTEVBTlxuXHQgKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyBTQVZFX1NUQVRFLkNMRUFOIGlzIHRoZSBzYXZlIHN0YXRlLlxuXHQgKi9cblx0Z2V0IGlzQ2xlYW4oKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2F2ZVN0YXRlID09PSBTQVZFX1NUQVRFLkNMRUFOO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGVudGl0eSBoYXMgYW55IHBhc3N3b3JkIHByb3RlY3RlZCBmaWVsZHMuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgbWVhbnMgaXQgZG9lcywgZmFsc2UgbWVhbnMgaXQgZG9lc24ndC5cblx0ICovXG5cdGdldCBpc1Bhc3N3b3JkUHJvdGVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzLnByb3RlY3RlZEZpZWxkcy5sZW5ndGggPiAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGdpdmVuIGZpZWxkTmFtZSBpcyBhIHBhc3N3b3JkIHByb3RlY3RlZCBmaWVsZC5cblx0ICogQHJldHVybiB7ZnVuY3Rpb24oc3RyaW5nKTogYm9vbGVhbn0gIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkXG5cdCAqIHRvIGNoZWNrIGlmIHRoZSBnaXZlbiBmaWVsZCBuYW1lIGlzIGEgcHJvdGVjdGVkIGZpZWxkIGluIHRoaXMgZW50aXR5LlxuXHQgKi9cblx0Z2V0IGlzRmllbGRQYXNzd29yZFByb3RlY3RlZCgpIHtcblx0XHRyZXR1cm4gKCBmaWVsZE5hbWUgKSA9PiB0aGlzLnByb3RlY3RlZEZpZWxkcy5pbmRleE9mKCBmaWVsZE5hbWUgKSA+IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gY2xvbmUgdGhlIGN1cnJlbnQgZW50aXR5IG9iamVjdC4gIFRoaXMgcmVzdWx0cyBpbiBhbiBpbnN0YW5jZSBvZlxuXHQgKiBCYXNlRW50aXR5IHRoYXQgaXMgZXF1aXZhbGVudCBhcyB0aGlzIGN1cnJlbnQgaW5zdGFuY2UgKGV4Y2VwdCBpdCB3aWxsXG5cdCAqIGhhdmUgYSBuZXcgZ2VuZXJhdGVkIGlkKS5cblx0ICpcblx0ICogQHJldHVybiB7QmFzZUVudGl0eX0gQSBuZXcgaW5zdGFuY2Ugb2YgQmFzZUVudGl0eVxuXHQgKi9cblx0Z2V0IGNsb25lKCkge1xuXHRcdHJldHVybiAoIGtlZXBJZCA9IGZhbHNlICkgPT4ge1xuXHRcdFx0Y29uc3QgY3JlYXRlRmFjdG9yeSA9IG1lbW9pemUoICgpID0+IGNyZWF0ZUVudGl0eUZhY3RvcnkoXG5cdFx0XHRcdHRoaXMubW9kZWxOYW1lLFxuXHRcdFx0XHR7ICRzY2hlbWE6IHt9LCBwcm9wZXJ0aWVzOiB0aGlzLnNjaGVtYSB9LFxuXHRcdFx0XHR0aGlzLmZpZWxkUHJlZml4ZXNcblx0XHRcdCkgKTtcblx0XHRcdGNvbnN0IGZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5KCk7XG5cdFx0XHRjb25zdCBuZXdFbnRpdHkgPSBmYWN0b3J5LmNyZWF0ZU5ldyggdGhpcy5mb3JDbG9uZSApO1xuXHRcdFx0aWYgKCBrZWVwSWQgKSB7XG5cdFx0XHRcdG5ld0VudGl0eS5pZCA9IHRoaXMuaWQ7XG5cdFx0XHRcdHNldFNhdmVTdGF0ZSggbmV3RW50aXR5LCB0aGlzLnNhdmVTdGF0ZSwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5ld0VudGl0eTtcblx0XHR9O1xuXHR9XG5cblx0c3RhdGljIG5hbWUgPSAnQmFzZUVudGl0eSdcbn1cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZ2l2ZXMgYSBjbGFzcyB0aGUgcHJvdmlkZWQgbmFtZVxuICogKGFuZCBvcHRpb25hbGx5IGV4dGVuZHMgdGhlIHByb3ZpZGVkIG9iamVjdCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtPYmplY3R9IGV4dGVuZGVkQ2xhc3NcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uXG4gKi9cbmNvbnN0IG5hbWVDbGFzcyA9ICggbmFtZSwgZXh0ZW5kZWRDbGFzcyApID0+IHtcblx0cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXh0ZW5kZWRDbGFzcyB7XG5cdFx0c3RhdGljIGdldCBuYW1lKCkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9O1xufTtcblxuLyoqXG4gKiBBIGZhY3RvcnkgZm9yIGVudGl0eSBmYWN0b3JpZXMuXG4gKlxuICogQ2FsbGluZyB0aGlzIHJldHVybnMgYW4gb2JqZWN0IG9mIGZhY3RvcnkgZnVuY3Rpb25zIHRoYXQgaW5zdGFudGlhdGUgYW5cbiAqIGluc3RhbmNlIG9mIGEgbmFtZWQgRW50aXR5LiAgVGhlIG1vZGVsTmFtZSBpcyB1c2VkIGFzIHRoZSBuYW1lIGZvciB0aGUgbmV3XG4gKiBlbnRpdHkuXG4gKlxuICogVHdvIG1ldGhvZHMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0IHJldHVybmVkOiBgY3JlYXRlTmV3YCBhbmRcbiAqIGBmcm9tRXhpc3RpbmdgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgIFRoZSBtb2RlbCBmb3IgdGhlIGVudGl0eVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSAgICAgVGhlIHNjaGVtYSBmb3IgdGhlIG1vZGVsLiBUaGlzIGlzIHRoZSBzY2hlbWFcbiAqIHByb3ZpZGVkIGJ5IHRoZSBPUFRJT05TIGVuZHBvaW50IGZvciB0aGUgbW9kZWwuXG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZFByZWZpeGVzIEFuIGFycmF5IG9mIGZpZWxkIHByZWZpeGVzIGZvciBiYXNlIGZpZWxkcyBvblxuICogb24gdGhlIG1vZGVsIChlZy4gRXZlbnQgbW9kZWwgaGFzIGBbIEVWVCBdYCBwcmVmaXhlcyBvbiBmaWVsZHMsIERhdGV0aW1lIG1vZGVsXG4gKiBoYXMgWyBgRFRUYCwgYERUVF9FVlRgIF1cbiAqIEByZXR1cm4ge09iamVjdH0gQSBmYWN0b3J5IGZvciBpbnN0YW50aWF0aW5nIGFuIGVudGl0eSBpbnN0YW5jZS5cbiAqL1xuY29uc3QgY3JlYXRlRW50aXR5RmFjdG9yeSA9ICggbW9kZWxOYW1lLCBzY2hlbWEsIGZpZWxkUHJlZml4ZXMgPSBbXSApID0+IHtcblx0Y29uc3QgRW50aXR5ID0gbmFtZUNsYXNzKFxuXHRcdHVwcGVyRmlyc3QoIGNhbWVsQ2FzZSggbW9kZWxOYW1lICkgKSxcblx0XHRCYXNlRW50aXR5XG5cdCk7XG5cdHJldHVybiB7XG5cdFx0LyoqXG5cdFx0ICogRXhwb3NlcyBtb2RlbE5hbWUgc28gY2xpZW50IGNvZGUgY2FuIGRlcml2ZSB3aGF0IG1vZGVsIHRoaXMgZmFjdG9yeVxuXHRcdCAqIGlzIGZvciBmcm9tIGFueSBnaXZlbiBmYWN0b3J5LlxuXHRcdCAqIEB0eXBlIHN0cmluZ1xuXHRcdCAqL1xuXHRcdG1vZGVsTmFtZSxcblx0XHQvKipcblx0XHQgKiBUaGlzIGlzIHRoZSBjbGFzcyBkZWZpbml0aW9uIGZvciB0aGUgRW50aXR5LiAgVHlwaWNhbGx5IHRoaXMgaXNcblx0XHQgKiByZXRyaWV2ZWQgZm9yIHRoZSBhYmlsaXR5IHRvIGRvIGluc3RhbmNlb2YgY2hlY2tzLlxuXHRcdCAqL1xuXHRcdGNsYXNzRGVmOiBFbnRpdHksXG5cdFx0LyoqXG5cdFx0ICogVGhpcyByZXR1cm5zIGFuIGluc3RhbmNlIG9mIEVudGl0eSBmb3IgdGhlIGdpdmVuIGFyZ3VtZW50cyB3aXRoIHRoZVxuXHRcdCAqIGluZGljYXRpb24gdGhpcyBpcyBhIG5ldyBub24tcGVyc2lzdGVkIGVudGl0eS4gIFRoaXMgbWVhbnM6XG5cdFx0ICpcblx0XHQgKiAtIEFsbCBmaWVsZCB2YWx1ZXMgYXJlIHBvcHVsYXRlZCBhbmQgYW55IG5vdCBwcm92aWRlZCB3aWxsIGJlXG5cdFx0ICogICBwb3B1bGF0ZWQgd2l0aCBkZWZhdWx0IHZhbHVlcyBkZWZpbmVkIGJ5IHRoZSBzY2hlbWEuXG5cdFx0ICogLSBHZW5lcmF0ZXMgdGVtcG9yYXJ5IHVuaXF1ZSBpZHMgZm9yIHRoZSBwcmltYXJ5IGtleSBmaWVsZHMgb24gdGhlXG5cdFx0ICogICBlbnRpdHkgKHVzaW5nIGN1aWQpLlxuXHRcdCAqIC0gU2V0cyB0aGUgYGlzTmV3YCBmbGFnIHRvIHRydWUgZm9yIHRoZSBlbnRpdHkgc28gY2xpZW50IGNvZGUgaXMgYWJsZVxuXHRcdCAqICAgdG8gZGlzY292ZXIgd2hpY2ggZW50aXRpZXMgaGF2ZSBuZXZlciBiZWVuIHBlcnNpc3RlZC5cblx0XHQgKiAtIFRoaXMgZmFjdG9yeSBtZXRob2QgZXhwZWN0cyBmaWVsZHMgYW5kIHZhbHVlcyB0byBiZSBcInByZXBhcmVkXCIuXG5cdFx0ICogICBXaGF0IHRoYXQgbWVhbnMgaXMgdGhhdCBmb3IgYW55IGZpZWxkcyB0aGF0IHRoZSBzY2hlbWEgZGVzY3JpYmVkIGFzXG5cdFx0ICogICBoYXZpbmcgYSBgcmF3YCBwcm9wZXJ0eSAoaS5lLiB7IEVWVF9kZXNjOiB7IHJhdzogJ3NvbWV0aGluZycgfSB9KVxuXHRcdCAqICAgdGhlIHZhbHVlIHNob3VsZCBiZSBvZiB0aGUgY29ycmVjdCB0eXBlIGZvciB0aGF0IHJhdyBwcm9wZXJ0eSBhbmQuXG5cdFx0ICogICBUaGlzIGFsc28gbWVhbnMgaXMgdGhhdCBmb3IgYW55IGZpZWxkcyB0aGUgc2NoZW1hIGRlc2NyaWJlcyBhcyBhXG5cdFx0ICogICBkYXRlLXRpbWUgKGZvcm1hdCkgb3IgbW9uZXkgKGZvcm1hdCkgZmllbGQsIHRoZSB2YWx1ZSBpcyBleHBlY3RlZFxuXHRcdCAqICAgdG8gYmUgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb2JqZWN0LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZpZWxkc0FuZFZhbHVlc1xuXHRcdCAqIEByZXR1cm4ge0VudGl0eX0gYW4gaW5zdGFuY2Ugb2YgRW50aXR5XG5cdFx0ICovXG5cdFx0Y3JlYXRlTmV3OiAoIGZpZWxkc0FuZFZhbHVlcyApID0+IG5ldyBFbnRpdHkoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRmaWVsZHNBbmRWYWx1ZXMsXG5cdFx0XHRzY2hlbWEsXG5cdFx0XHRmaWVsZFByZWZpeGVzLFxuXHRcdFx0dHJ1ZVxuXHRcdCksXG5cdFx0LyoqXG5cdFx0ICogVGhpcyByZXR1cm5zIGFuIGluc3RhbmNlIG9mIEVudGl0eSBmb3IgdGhlIGdpdmVuIGFyZ3VtZW50cyB3aXRoIHRoZVxuXHRcdCAqIGluZGljYXRpb24gdGhpcyByZXByZXNlbnRzIHRoZSBlbnRpdHkgYXMgaXMgaW4gdGhlIGRiLiAgVGhpcyBtZWFuczpcblx0XHQgKlxuXHRcdCAqIC0gQWxsIGZpZWxkIHZhbHVlcyBhcmUgTk9UIHBvcHVsYXRlZCBpZiBtaXNzaW5nIHZhbHVlcy4gIFRoaXMgaXNcblx0XHQgKiAgIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBjb250ZXh0cyBsaWtlIHVuYXV0aG9yaXplZCB2aWV3cyB3aGVyZVxuXHRcdCAqICAgb25seSBwYXJ0aWFsIGVudGl0aWVzIGFyZSByZXR1cm5lZCBpbiBSRVNUIHJlc3BvbnNlcy5cblx0XHQgKiAtIGlzTmV3IGZsYWcgaXMgc2V0IHRvIGZhbHNlIChhbmQgbmV2ZXIgY2hhbmdlcyBmb3IgdGhpcyBlbnRpdHkpXG5cdFx0ICogLSBUaGUgaW5jb21pbmcgdmFsdWVzIGFyZSBleHBlY3RlZCB0byBiZSBpbiB0aGUgZXhhY3Qgc2hhcGUgYXNcblx0XHQgKiAgIGRlc2NyaWJlZCBieSB0aGUgc2NoZW1hIGZvciB0aGUgZW50aXR5IG1vZGVsLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZpZWxkc0FuZFZhbHVlc1xuXHRcdCAqIEByZXR1cm4ge0VudGl0eX0gYW4gaW5zdGFuY2Ugb2YgRW50aXR5XG5cdFx0ICovXG5cdFx0ZnJvbUV4aXN0aW5nOiAoIGZpZWxkc0FuZFZhbHVlcyApID0+IG5ldyBFbnRpdHkoXG5cdFx0XHRtb2RlbE5hbWUsXG5cdFx0XHRmaWVsZHNBbmRWYWx1ZXMsXG5cdFx0XHRzY2hlbWEsXG5cdFx0XHRmaWVsZFByZWZpeGVzXG5cdFx0KSxcblx0fTtcbn07XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVFbnRpdHlGYWN0b3J5O1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzUGxhaW5PYmplY3QsIGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgdmFsdWUgaGFzIGEgXCJyYXdcIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGEgYHJhd2AgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNSYXdQcm9wZXJ0eSA9ICggdmFsdWUgKSA9PiBpc1BsYWluT2JqZWN0KCB2YWx1ZSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHZhbHVlLnJhdyApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgYSBcInByZXR0eVwiIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IGFuZCBoYXMgYSBgcHJldHR5YCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ByZXR0eVByb3BlcnR5ID0gKCB2YWx1ZSApID0+IGlzUGxhaW5PYmplY3QoIHZhbHVlICkgJiZcblx0ISBpc1VuZGVmaW5lZCggdmFsdWUucHJldHR5ICk7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGhhcyBhIFwicmVuZGVyZWRcIiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCBhbmQgaGFzIGEgYHJlbmRlcmVkYCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1JlbmRlcmVkUHJvcGVydHkgPSAoIHZhbHVlICkgPT4gaXNQbGFpbk9iamVjdCggdmFsdWUgKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCB2YWx1ZS5yZW5kZXJlZCApO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgYSBcImZvcm1hdFwiIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IGFuZCBoYXMgYSBgZm9ybWF0YCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0Zvcm1hdFByb3BlcnR5ID0gKCB2YWx1ZSApID0+IGlzUGxhaW5PYmplY3QoIHZhbHVlICkgJiZcblx0ISBpc1VuZGVmaW5lZCggdmFsdWUuZm9ybWF0ICk7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGhhcyBhIFwiZW51bVwiIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IGFuZCBoYXMgYW4gZW51bVxuICogcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNFbnVtUHJvcGVydHkgPSAoIHZhbHVlICkgPT4gaXNQbGFpbk9iamVjdCggdmFsdWUgKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCB2YWx1ZS5lbnVtICk7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGEgXCJ2YWx1ZSBvYmplY3RcIiBmaWVsZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGRcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgdmFsdWUgb2JqZWN0IGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNWYWx1ZU9iamVjdEZpZWxkID0gKCBmaWVsZCwgc2NoZW1hICkgPT4ge1xuXHRyZXR1cm4gaXNEYXRlVGltZUZpZWxkKCBmaWVsZCwgc2NoZW1hICkgfHwgaXNNb25leUZpZWxkKCBmaWVsZCwgc2NoZW1hICk7XG59O1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCBmaWVsZCBpcyBhIGRhdGUtdGltZSBmaWVsZCBhY2NvcmRpbmcgdG8gdGhlXG4gKiBwcm92aWRlZCBzY2hlbWEuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG1lYW5zIGl0IGlzIGEgZGF0ZS10aW1lIGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNEYXRlVGltZUZpZWxkID0gKCBmaWVsZCwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZCBdICkgJiZcblx0aGFzRm9ybWF0UHJvcGVydHkoIHNjaGVtYVsgZmllbGQgXSApICYmXG5cdHNjaGVtYVsgZmllbGQgXS5mb3JtYXQgPT09ICdkYXRlLXRpbWUnO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCBmaWVsZCBpcyBhIFVUQyBkYXRlLXRpbWUgZmllbGQuXG4gKlxuICogSWYgc2NoZW1hIGlzIHByb3ZpZGVkLCB0aGlzIGFsc28gY29uc2lkZXJzIHdoZXRoZXIgdGhpcyBpcyBhIGRhdGUtdGltZSBmaWVsZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0ZVRpbWVGaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgW29wdGlvbmFsXVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBtZWFucyB0aGlzIGlzIGEgVVRDIGZpZWxkLiAgSWYgc2NoZW1hIGlzIHByb3ZpZGVkIGl0XG4gKiBtZWFucyB0aGlzIGlzIGFsc28gYSBkYXRlLXRpbWUgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1VUQ0RhdGVUaW1lRmllbGQgPSAoIGRhdGVUaW1lRmllbGROYW1lLCBzY2hlbWEgPSBudWxsICkgPT4ge1xuXHRyZXR1cm4gc2NoZW1hICE9PSBudWxsID9cblx0XHRpc0RhdGVUaW1lRmllbGQoIGRhdGVUaW1lRmllbGROYW1lLCBzY2hlbWEgKSAmJlxuXHRcdFx0ZGF0ZVRpbWVGaWVsZE5hbWUuaW5kZXhPZiggJ19nbXQnICkgPiAwIDpcblx0XHRkYXRlVGltZUZpZWxkTmFtZS5pbmRleE9mKCAnX2dtdCcgKSA+IDA7XG59O1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgcmVwcmVzZW50cyBhIHByaW1hcnkga2V5IGZpZWxkIHVzaW5nIHRoZVxuICogcHJvdmlkZWQgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIGl0IGlzIGEgcHJpbWFyeSBrZXkgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1ByaW1hcnlLZXlGaWVsZCA9ICggZmllbGROYW1lLCBzY2hlbWEgKSA9PlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkgJiZcblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcmltYXJ5X2tleSApO1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgcmVwcmVzZW50cyBhIHJlYWRvbmx5IGZpZWxkIHVzaW5nIHRoZVxuICogcHJvdmlkZWQgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIGl0IGlzIGEgcmVhZG9ubHkgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlYWRPbmx5ID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+XG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0gKSAmJlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnJlYWRvbmx5ICkgJiZcblx0c2NoZW1hWyBmaWVsZE5hbWUgXS5yZWFkb25seTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgZmllbGQgaXMgYSBcImVudGl0eVwiIGZpZWxkIHVzaW5nIHRoZSBwcm92aWRlZFxuICogc2NoZW1hLlxuICpcbiAqIEFuIFwiZW50aXR5XCIgZmllbGQgaXMgYW55IGZpZWxkIHRoYXQgc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiAtIGZpZWxkIGV4aXN0cyBpbiB0aGUgc2NoZW1hXG4gKiAtIGl0IGlzIG5vdCByZWFkb25seSBvciBpcyBhIHByaW1hcnkga2V5IGZpZWxkLlxuICogLSBpdCBpcyBub3QgYSB1dGMgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGlzIGFuIGVudGl0eSBmaWVsZFxuICovXG5leHBvcnQgY29uc3QgaXNFbnRpdHlGaWVsZCA9ICggZmllbGROYW1lLCBzY2hlbWEgKSA9PlxuXHQhIGlzVW5kZWZpbmVkKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkgJiZcblx0KCAhIGlzUmVhZE9ubHkoIGZpZWxkTmFtZSwgc2NoZW1hICkgfHxcblx0XHRpc1ByaW1hcnlLZXlGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKVxuXHQpICYmXG5cdCEgaXNVVENEYXRlVGltZUZpZWxkKCBmaWVsZE5hbWUgKSAmJlxuXHRmaWVsZE5hbWUgIT09ICdfcHJvdGVjdGVkJztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZmllbGQgcmVwcmVzZW50cyBhIHZhbHVlIG9mIG1vbmV5IGZyb20gdGhlIHByb3ZpZGVkXG4gKiBzY2hlbWEuXG4gKlxuICogQSBmaWVsZCBpcyBhIG1vbmV5IGZpZWxkIGlmIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgc2F0aXNmaWVkOlxuICpcbiAqIC0gSXQgZXhpc3RzIGluIHRoZSBzY2hlbWFcbiAqIC0gSXQgaGFzIGEgcHJldHR5IHByb3BlcnR5XG4gKiAtIFRoZSBwcmV0dHkgcHJvcGVydHkgdmFsdWUgaGFzIGEgZm9ybWF0IHByb3BlcnR5LlxuICogLSBUaGUgZm9ybWF0IHByb3BlcnR5IGlzIGVxdWFsIHRvICdtb25leSdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGl0IGlzIGEgbW9uZXkgZmllbGQuXG4gKi9cbmV4cG9ydCBjb25zdCBpc01vbmV5RmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcyApICYmXG5cdGhhc1ByZXR0eVByb3BlcnR5KCBzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMgKSAmJlxuXHRoYXNGb3JtYXRQcm9wZXJ0eSggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnByZXR0eSApICYmXG5cdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcy5wcmV0dHkuZm9ybWF0ID09PSAnbW9uZXknO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBmaWVsZCBpcyBhbiBlbnVtIHR5cGUgZmllbGQgYXMgZGVmaW5lZCBpbiB0aGUgcHJvdmlkZWRcbiAqIHNjaGVtYS5cbiAqXG4gKiBOb3RlOiB0aGlzIG9ubHkgZXZhbHVhdGVzIHRoZSB0b3AtbGV2ZWwgZm9yIHRoZSBmaWVsZCBzY2hlbWEuICBJZiB0aGUgZmllbGRcbiAqIGluIHRoZSBzY2hlbWEgaXMgb2YgdHlwZSAnb2JqZWN0JyBhbmQgb25lIG9mIHRoZSBvYmplY3QgcHJvcGVydGllcyBpcyBvZiB0eXBlXG4gKiAnZW51bScgdGhpcyB3aWxsIG5vdCBjb25zaWRlciBpdCBhbiBcImVudW1cIiBmaWVsZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBpZiB0aGUgZmllbGQgaXMgYW4gZW51bSB0eXBlIGZpZWxkLlxuICovXG5leHBvcnQgY29uc3QgaXNFbnVtRmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT5cblx0ISBpc1VuZGVmaW5lZCggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdGhhc0VudW1Qcm9wZXJ0eSggc2NoZW1hWyBmaWVsZE5hbWUgXSApICYmXG5cdCEgaXNVbmRlZmluZWQoIHNjaGVtYVsgZmllbGROYW1lIF0uZW51bS5sZW5ndGggKSAmJlxuXHRzY2hlbWFbIGZpZWxkTmFtZSBdLmVudW0ubGVuZ3RoID4gMDtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBhcHBseUZpbHRlcnMgfSBmcm9tICdAd29yZHByZXNzL2hvb2tzJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBDb25zdGFudHMgZGVzY3JpYmluZyB0aGUgY3VycmVudCBcInNhdmUgc3RhdGVcIiBmb3IgYW4gZW50aXR5LlxuICpcbiAqIEB0eXBlIHt7Q0xFQU46IFN5bWJvbCwgTkVXOiBTeW1ib2wsIERJUlRZOiBTeW1ib2x9fVxuICovXG5leHBvcnQgY29uc3QgU0FWRV9TVEFURSA9IHtcblx0Q0xFQU46IFN5bWJvbCggJ0VudGl0eSBpcyBwZXJzaXN0ZWQuJyApLFxuXHRORVc6IFN5bWJvbCggJ0VudGl0eSBpcyBuZXcuJyApLFxuXHRESVJUWTogU3ltYm9sKCAnRXhpc3RpbmcgZW50aXR5IGhhcyBjaGFuZ2VzIGFuZCBuZWVkcyBwZXJzaXN0ZWQuJyApLFxufTtcblxuLyoqXG4gKiBWYWxpZGF0aW9uIHR5cGVzIGFyZSBmb3Igc2NoZW1hJ3MgdGhhdCBoYXZlIHZhbHVlIHZhcmlhdGlvbnMuXG4gKiBAdHlwZSB7e1JBVzogc3RyaW5nLCBSRU5ERVJFRDogc3RyaW5nLCBQUkVUVFk6IHN0cmluZ319XG4gKi9cbmV4cG9ydCBjb25zdCBWQUxJREFURV9UWVBFID0ge1xuXHRSQVc6ICdyYXcnLFxuXHRSRU5ERVJFRDogJ3JlbmRlcmVkJyxcblx0UFJFVFRZOiAncHJldHR5Jyxcbn07XG5cbi8qKlxuICogUHJpdmF0ZSBwcm9wZXJ0aWVzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgQmFzZSBFbnRpdHkgQ2xhc3NcbiAqIEB0eXBlIHt7c2F2ZVN0YXRlOiBib29sZWFufX1cbiAqL1xuZXhwb3J0IGNvbnN0IFBSSVZBVEVfUFJPUEVSVElFUyA9IHtcblx0U0FWRV9TVEFURTogU3ltYm9sKCAnYmFzZUVudGl0eVByaXZhdGVQcm9wZXJ0aWVzU2F2ZVN0YXRlJyApLFxuXHRWQUxJREFURV9UWVBFUzogU3ltYm9sKCAnYmFzZUVudGl0eVByaXZhdGVQcm9wZXJ0aWVzVmFsaWRhdGVUeXBlcycgKSxcbn07XG5cbi8qKlxuICogSGFyZGNvZGVkIGxpc3Qgb2YgbW9kZWwgcHJlZml4ZXMgZm9yIGZpZWxkcyBvbiBtb2RlbHMuXG5cbiAqIEEgbW9kZWwgcHJlZml4IGlzIHNvbWV0aGluZyB0aGF0IFwibmFtZXNwYWNlc1wiIGEgZmllbGQgb24gYSBtb2RlbC4gIEZvclxuICogZXhhbXBsZSwgaWYgdGhlIGZpZWxkIGlzIFwiRVZUX0lEXCIsIHRoZW4gdGhlIHByZWZpeCBpcyBcIkVWVFwiOyBpZiB0aGUgZmllbGQgaXNcbiAqIFwiRFRUX0VWVF9zdGFydFwiLCB0aGVuIHRoZSBwcmVmaXhlcyBhcmUgXCJEVFRcIiwgYW5kIFwiRFRUX0VWVFwiLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgZmlsdGVyZWQgb2JqZWN0IGluZGV4ZWQgYnkgbW9kZWwgbmFtZSBhbmQgdGhlIHZhbHVlcyBhcmVcbiAqIGFuIGFycmF5IG9mIG1vZGVsIHByZWZpeGVzIGZvciB0aGF0IG1vZGVsLlxuICovXG5leHBvcnQgY29uc3QgTU9ERUxfUFJFRklYRVMgPSAoIG1vZGVsTmFtZSApID0+IHtcblx0Y29uc3QgcHJlZml4TWFwID0gYXBwbHlGaWx0ZXJzKFxuXHRcdCdGSEVFX19FTlRJVFlfRkFDVE9SWV9fQ09OU1RBTlRTX19NT0RFTF9QUkVGSVhFUycsXG5cdFx0e1xuXHRcdFx0YW5zd2VyOiBbICdBTlMnIF0sXG5cdFx0XHRhdHRlbmRlZTogWyAnQVRUJyBdLFxuXHRcdFx0Y2hhbmdlX2xvZzogWyAnTE9HJyBdLFxuXHRcdFx0Y2hlY2tpbjogWyAnQ0hLJyBdLFxuXHRcdFx0Y291bnRyeTogWyAnQ05UJyBdLFxuXHRcdFx0Y3VycmVuY3k6IFsgJ0NVUicgXSxcblx0XHRcdGN1cnJlbmN5X3BheW1lbnRfbWV0aG9kOiBbICdDUE0nIF0sXG5cdFx0XHRkYXRldGltZTogWyAnRFRUJywgJ0RUVF9FVlQnIF0sXG5cdFx0XHRkYXRldGltZV90aWNrZXQ6IFsgJ0RUSycgXSxcblx0XHRcdGV2ZW50OiBbICdFVlQnIF0sXG5cdFx0XHRldmVudF9tZXNzYWdlX3RlbXBsYXRlOiBbICdFTVQnIF0sXG5cdFx0XHRldmVudF9xdWVzdGlvbl9ncm91cDogWyAnRVFHJyBdLFxuXHRcdFx0ZXZlbnRfdmVudWU6IFsgJ0VWVicgXSxcblx0XHRcdGV4dHJhX2pvaW46IFsgJ0VYSicgXSxcblx0XHRcdGV4dHJhX21ldGE6IFsgJ0VYTScgXSxcblx0XHRcdGxpbmVfaXRlbTogWyAnTElOJyBdLFxuXHRcdFx0bWVzc2FnZTogWyAnTVNHJyBdLFxuXHRcdFx0bWVzc2FnZV90ZW1wbGF0ZTogWyAnTVRQJyBdLFxuXHRcdFx0bWVzc2FnZV90ZW1wbGF0ZV9ncm91cDogWyAnR1JQJywgJ01UUCcgXSxcblx0XHRcdHBheW1lbnQ6IFsgJ1BBWScgXSxcblx0XHRcdHBheW1lbnRfbWV0aG9kOiBbICdQTUQnIF0sXG5cdFx0XHRwb3N0X21ldGE6IFsgJ21ldGEnIF0sXG5cdFx0XHRwcmljZTogWyAnUFJDJyBdLFxuXHRcdFx0cHJpY2VfdHlwZTogWyAnUFJUJyBdLFxuXHRcdFx0cXVlc3Rpb246IFsgJ1FTVCcgXSxcblx0XHRcdHF1ZXN0aW9uX2dyb3VwOiBbICdRU0cnIF0sXG5cdFx0XHRxdWVzdGlvbl9ncm91cF9xdWVzdGlvbjogWyAnUUdRJyBdLFxuXHRcdFx0cXVlc3Rpb25fb3B0aW9uOiBbICdRU08nIF0sXG5cdFx0XHRyZWN1cnJlbmNlOiBbICdSQ1InIF0sXG5cdFx0XHRyZWdpc3RyYXRpb246IFsgJ1JFRycgXSxcblx0XHRcdHJlZ2lzdHJhdGlvbl9wYXltZW50OiBbICdSUFknIF0sXG5cdFx0XHRzdGF0ZTogWyAnU1RBJyBdLFxuXHRcdFx0c3RhdHVzOiBbICdTVFMnIF0sXG5cdFx0XHR0ZXJtOiBbICd0ZXJtJyBdLFxuXHRcdFx0dGVybV9yZWxhdGlvbnNoaXA6IFtdLFxuXHRcdFx0dGVybV90YXhvbm9teTogWyAndGVybV90YXhvbm9teScgXSxcblx0XHRcdHRpY2tldDogWyAnVEtUJyBdLFxuXHRcdFx0dGlja2V0X3ByaWNlOiBbICdUS1AnIF0sXG5cdFx0XHR0aWNrZXRfdGVtcGxhdGU6IFsgJ1RUTScgXSxcblx0XHRcdHRyYW5zYWN0aW9uOiBbICdUWE4nIF0sXG5cdFx0XHR2ZW51ZTogWyAnVk5VJyBdLFxuXHRcdFx0d3BfdXNlcjogWyAndXNlcicgXSxcblx0XHR9ICk7XG5cdHJldHVybiAhIGlzVW5kZWZpbmVkKCBwcmVmaXhNYXBbIG1vZGVsTmFtZSBdICkgP1xuXHRcdHByZWZpeE1hcFsgbW9kZWxOYW1lIF0gOlxuXHRcdFtdO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRjYW1lbENhc2UsXG5cdHVwcGVyRmlyc3QsXG5cdGZvckVhY2gsXG5cdGlzVW5kZWZpbmVkLFxuXHRpc0FycmF5LFxuXHRrZXlzLFxuXHRzb3J0QnksXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgY3VpZCBmcm9tICdjdWlkJztcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudCB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2VlanMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0YXNzZXJ0VmFsaWRGaWVsZEFuZFZhbHVlQWdhaW5zdFNjaGVtYSxcblx0YXNzZXJ0VmFsaWRWYWx1ZUZvclByZXBhcmVkRmllbGQsXG59IGZyb20gJy4vYXNzZXJ0aW9ucyc7XG5pbXBvcnQge1xuXHRkZXJpdmVSZW5kZXJlZFZhbHVlLFxuXHRkZXJpdmVQcmVwYXJlZFZhbHVlRm9yRmllbGQsXG5cdGdldFJlbGF0aW9uTmFtZUZyb21MaW5rLFxuXHRnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yQ2xvbmluZyxcblx0Z2V0QmFzZUZpZWxkc0FuZFZhbHVlc0ZvclBlcnNpc3RpbmcsXG5cdGdldFByaW1hcnlLZXlGaWVsZHNGcm9tU2NoZW1hLFxuXHRnZXRFbnRpdHlGaWVsZHNGcm9tU2NoZW1hLFxuXHRnZXREZWZhdWx0VmFsdWVGb3JGaWVsZCxcblx0ZGVyaXZlVmFsaWRhdGVUeXBlRm9yRmllbGQsXG59IGZyb20gJy4vZXh0cmFjdG9ycyc7XG5pbXBvcnQge1xuXHRpc0VudGl0eUZpZWxkLFxuXHRpc1ByaW1hcnlLZXlGaWVsZCxcbn0gZnJvbSAnLi9ib29sZWFucyc7XG5pbXBvcnQgeyBQUklWQVRFX1BST1BFUlRJRVMsIFNBVkVfU1RBVEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKihcbiAqIEEgZ2VuZXJpYyBnZXR0ZXIgY3JlYXRvciBmb3IgYSBwcm92aWRlZCBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWUgIFRoZSBuYW1lIG9mIHRoZSBhY2Nlc3Nvci5cbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgdXNlZCB0byBwYXNzIHRocm91Z2ggYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGVcbiAqIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlR2V0dGVyID0gKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlLCBvcHRzID0ge30gKSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggaW5zdGFuY2UsIGZpZWxkTmFtZSwge1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiBmaWVsZFZhbHVlO1xuXHRcdH0sXG5cdFx0Li4ub3B0cyxcblx0fSApO1xufTtcblxuLyoqXG4gKiBUaGlzIGNyZWF0ZXMgYSBnZXR0ZXIgdGhhdCBjYWxscyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgd2hlbiBpbnZva2VkLlxuICpcbiAqIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgYGluc3RhbmNlYCBhcmd1bWVudCBwYXNzZWQgdGhyb3VnaFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZVxuICogQHBhcmFtIHtmdW5jdGlvbihPYmplY3QpfSBjYWxsQmFja1xuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUNhbGxiYWNrR2V0dGVyID0gKFxuXHRpbnN0YW5jZSxcblx0cHJvcGVydHlOYW1lLFxuXHRjYWxsQmFjayxcblx0b3B0cyA9IHt9XG4pID0+IHtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgcHJvcGVydHlOYW1lLCB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIGNhbGxCYWNrKCBpbnN0YW5jZSApO1xuXHRcdH0sXG5cdFx0Li4ub3B0cyxcblx0fSApO1xufTtcblxuLyoqXG4gKiBBIGdlbmVyaWMgZ2V0dGVyIGFuZCBzZXR0ZXIgY3JlYXRvciBmb3IgYSBwcm92aWRlZCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSAgaW5pdGlhbEZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsLCBwYXNzIHRocm91Z2ggb3B0aW9ucyB1c2VkIGJ5XG4gKiBPYmplY3QuZGVmaW5lUHJvcGVydHlcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUdldHRlckFuZFNldHRlciA9IChcblx0aW5zdGFuY2UsXG5cdGZpZWxkTmFtZSxcblx0aW5pdGlhbEZpZWxkVmFsdWUsXG5cdG9wdHMgPSB7fSxcbikgPT4ge1xuXHRsZXQgcHJvcGVydHlWYWx1ZSA9IGluaXRpYWxGaWVsZFZhbHVlO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGluc3RhbmNlLCBmaWVsZE5hbWUsIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlWYWx1ZTtcblx0XHR9LFxuXHRcdHNldCggcmVjZWl2ZWRWYWx1ZSApIHtcblx0XHRcdGNvbnN0IGlzUHJpbWFyeUZpZWxkID0gaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2Uuc2NoZW1hICk7XG5cdFx0XHRpZiAoICEgaW5zdGFuY2UuaXNOZXcgJiYgaXNQcmltYXJ5RmllbGQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGFzc2VydFZhbGlkVmFsdWVGb3JQcmVwYXJlZEZpZWxkKFxuXHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdHJlY2VpdmVkVmFsdWUsXG5cdFx0XHRcdGluc3RhbmNlXG5cdFx0XHQpO1xuXHRcdFx0aWYgKCAhIGlzUHJpbWFyeUZpZWxkICkge1xuXHRcdFx0XHRzZXRTYXZlU3RhdGUoIGluc3RhbmNlLCBTQVZFX1NUQVRFLkRJUlRZICk7XG5cdFx0XHRcdHNldEZpZWxkVG9QZXJzaXN0KCBpbnN0YW5jZSwgZmllbGROYW1lICk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eVZhbHVlID0gcmVjZWl2ZWRWYWx1ZTtcblx0XHR9LFxuXHRcdC4uLm9wdHMsXG5cdH0gKTtcbn07XG5cbi8qKlxuICogQSBnZXR0ZXIgYW5kIHNldHRlciBjcmVhdG9yIGZvciBhbiBmaWVsZCBhbGlhcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5hbEZpZWxkTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGFsaWFzRmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQWxpYXNHZXR0ZXJBbmRTZXR0ZXIgPSAoXG5cdGluc3RhbmNlLFxuXHRvcmlnaW5hbEZpZWxkTmFtZSxcblx0YWxpYXNGaWVsZE5hbWUsXG5cdG9wdHMgPSB7fSxcbikgPT4ge1xuXHRpZiAoIG9yaWdpbmFsRmllbGROYW1lICE9PSBhbGlhc0ZpZWxkTmFtZSApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGluc3RhbmNlLCBhbGlhc0ZpZWxkTmFtZSwge1xuXHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRyZXR1cm4gaW5zdGFuY2VbIG9yaWdpbmFsRmllbGROYW1lIF07XG5cdFx0XHR9LFxuXHRcdFx0c2V0KCByZWNlaXZlZFZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm4gaW5zdGFuY2VbIG9yaWdpbmFsRmllbGROYW1lIF0gPSByZWNlaXZlZFZhbHVlO1xuXHRcdFx0fSxcblx0XHRcdC4uLm9wdHMsXG5cdFx0fSApO1xuXHR9XG59O1xuXG4vKipcbiAqIEEgZ2V0dGVyIGNyZWF0b3IgZm9yIGEgZmllbGQgYWxpYXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxGaWVsZE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbGlhc0ZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFsaWFzR2V0dGVyID0gKFxuXHRpbnN0YW5jZSxcblx0b3JpZ2luYWxGaWVsZE5hbWUsXG5cdGFsaWFzRmllbGROYW1lLFxuXHRvcHRzID0ge30sXG4pID0+IHtcblx0aWYgKCBvcmlnaW5hbEZpZWxkTmFtZSAhPT0gYWxpYXNGaWVsZE5hbWUgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgYWxpYXNGaWVsZE5hbWUsIHtcblx0XHRcdGdldCgpIHtcblx0XHRcdFx0cmV0dXJuIGluc3RhbmNlWyBvcmlnaW5hbEZpZWxkTmFtZSBdO1xuXHRcdFx0fSxcblx0XHRcdC4uLm9wdHMsXG5cdFx0fSApO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmbHVlbnQgc2V0dGVyIG9uIHRoZSBwcm92aWRlZCBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIGZpZWxkIG5hbWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAgT3B0aW9ucyBmb3IgT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVGbHVlbnRTZXR0ZXIgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUsIG9wdHMgPSB7fSApID0+IHtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBpbnN0YW5jZSwgJ3NldCcgKyB1cHBlckZpcnN0KCBmaWVsZE5hbWUgKSwge1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiAoIHJlY2VpdmVkVmFsdWUgKSA9PiB7XG5cdFx0XHRcdGluc3RhbmNlWyBmaWVsZE5hbWUgXSA9IHJlY2VpdmVkVmFsdWU7XG5cdFx0XHRcdHJldHVybiBpbnN0YW5jZTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHQuLi5vcHRzLFxuXHR9ICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgaW5pdGlhbCBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGZvciBlbnRpdGllcyBvbiB0aGUgcHJvdmlkZWQgZW50aXR5XG4gKiBpbnN0YW5jZSB1c2luZyB0aGUgZ2l2ZW4gZGF0YS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICoga2V5cyBvbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUVudGl0eUdldHRlcnNBbmRTZXR0ZXJzID0gKCBpbnN0YW5jZSApID0+IHtcblx0Y29uc3QgcHJpbWFyeUtleXMgPSBbXTtcblx0Zm9yRWFjaChcblx0XHRpbnN0YW5jZS5vcmlnaW5hbEZpZWxkc0FuZFZhbHVlcyxcblx0XHQoIGZpZWxkVmFsdWUsIGZpZWxkTmFtZSApID0+IHtcblx0XHRcdGNvbnN0IGlzUHJpbWFyeUtleSA9IGlzUHJpbWFyeUtleUZpZWxkKCBmaWVsZE5hbWUsIGluc3RhbmNlLnNjaGVtYSApO1xuXHRcdFx0c2V0VmFsaWRhdGVUeXBlRm9yRmllbGQoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUgKTtcblx0XHRcdGlmICggaXNFbnRpdHlGaWVsZCggZmllbGROYW1lLCBpbnN0YW5jZS5zY2hlbWEgKSApIHtcblx0XHRcdFx0aWYgKCBpbnN0YW5jZS5pc05ldyApIHtcblx0XHRcdFx0XHRhc3NlcnRWYWxpZFZhbHVlRm9yUHJlcGFyZWRGaWVsZChcblx0XHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0XHRpbnN0YW5jZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YXNzZXJ0VmFsaWRGaWVsZEFuZFZhbHVlQWdhaW5zdFNjaGVtYShcblx0XHRcdFx0XHRcdGluc3RhbmNlLm1vZGVsTmFtZSxcblx0XHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0XHRpbnN0YW5jZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2V0SW5pdGlhbEVudGl0eUZpZWxkc0FuZFZhbHVlcyhcblx0XHRcdFx0XHRpbnN0YW5jZSxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdFx0XHRpc1ByaW1hcnlLZXlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGlmICggZmllbGROYW1lID09PSAnX2NhbGN1bGF0ZWRfZmllbGRzJyApIHtcblx0XHRcdFx0c2V0Q2FsY3VsYXRlZEZpZWxkQW5kVmFsdWVzKCBpbnN0YW5jZSwgZmllbGRWYWx1ZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBmaWVsZE5hbWUgPT09ICdfcHJvdGVjdGVkJyApIHtcblx0XHRcdFx0cG9wdWxhdGVQcm90ZWN0ZWRGaWVsZHNQcm9wZXJ0eSggaW5zdGFuY2UsIGZpZWxkVmFsdWUgKTtcblx0XHRcdH1cblx0XHRcdGlmICggZmllbGROYW1lID09PSAnbGluaycgKSB7XG5cdFx0XHRcdGNyZWF0ZUdldHRlciggaW5zdGFuY2UsICdsaW5rJywgZmllbGRWYWx1ZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBmaWVsZE5hbWUgPT09ICdfbGlua3MnICkge1xuXHRcdFx0XHRzZXRSZXNvdXJjZXMoIGluc3RhbmNlLCBmaWVsZFZhbHVlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICEgaW5zdGFuY2UuaXNOZXcgJiYgaXNQcmltYXJ5S2V5ICkge1xuXHRcdFx0XHRwcmltYXJ5S2V5cy5wdXNoKCBmaWVsZE5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG5cdGlmICggISBpbnN0YW5jZS5pc05ldyAmJiBwcmltYXJ5S2V5cy5sZW5ndGggKSB7XG5cdFx0Y3JlYXRlUHJpbWFyeUtleUZpZWxkR2V0dGVycyggaW5zdGFuY2UsIHByaW1hcnlLZXlzICk7XG5cdH1cblxuXHRwb3B1bGF0ZVByaW1hcnlLZXlzKCBpbnN0YW5jZSApO1xuXHRwb3B1bGF0ZU1pc3NpbmdGaWVsZHMoIGluc3RhbmNlICk7XG59O1xuXG4vKipcbiAqIFBvcHVsYXRlcyB0aGUgYHByb3RlY3RlZEZpZWxkc2AgcHJvcGVydHkgb24gdGhlIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtBcnJheX0gcHJvdGVjdGVkRmllbGRzXG4gKi9cbmNvbnN0IHBvcHVsYXRlUHJvdGVjdGVkRmllbGRzUHJvcGVydHkgPSAoIGluc3RhbmNlLCBwcm90ZWN0ZWRGaWVsZHMgKSA9PiB7XG5cdC8vIGdldCBhbnkgY2FsY3VsYXRlZCBwcm90ZWN0ZWQgZmllbGRzLlxuXHRjb25zdCBjYWxjdWxhdGVkRmllbGRzID0gaW5zdGFuY2Vcblx0XHQub3JpZ2luYWxGaWVsZHNBbmRWYWx1ZXNcblx0XHQuX2NhbGN1bGF0ZWRfZmllbGRzIHx8IHt9O1xuXHRpZiAoXG5cdFx0Y2FsY3VsYXRlZEZpZWxkcy5fcHJvdGVjdGVkICYmXG5cdFx0aXNBcnJheSggY2FsY3VsYXRlZEZpZWxkcy5fcHJvdGVjdGVkIClcblx0KSB7XG5cdFx0cHJvdGVjdGVkRmllbGRzID0gW1xuXHRcdFx0Li4ucHJvdGVjdGVkRmllbGRzLFxuXHRcdFx0Li4uY2FsY3VsYXRlZEZpZWxkcy5fcHJvdGVjdGVkLFxuXHRcdF07XG5cdH1cblx0Y3JlYXRlR2V0dGVyKCBpbnN0YW5jZSwgJ3Byb3RlY3RlZEZpZWxkcycsIHByb3RlY3RlZEZpZWxkcyApO1xufTtcblxuLyoqXG4gKiBUaGlzIHBvcHVsYXRlcyBwcmltYXJ5IGtleSBmaWVsZHMuXG4gKiBOb3RlIHRoYXQgaXQgYWxzbyBvdmVycmlkZXMgYW55IHByaW1hcnkga2V5IHZhbHVlcy9wcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiBhbHJlYWR5IHNldCBpbiB0aGUgZW50aXR5IHNvIGlzIG9ubHkgcHJvY2Vzc2VkIHdoZW4gdGhlIGluc3RhbmNlIGlzIG5ldy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqL1xuY29uc3QgcG9wdWxhdGVQcmltYXJ5S2V5cyA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdGlmICggISBpbnN0YW5jZS5pc05ldyApIHtcblx0XHRyZXR1cm47XG5cdH1cblx0Y29uc3QgcHJpbWFyeUtleXMgPSBnZXRQcmltYXJ5S2V5RmllbGRzRnJvbVNjaGVtYSggaW5zdGFuY2UgKTtcblx0Zm9yRWFjaCggcHJpbWFyeUtleXMsIChcblx0XHRzY2hlbWFQcm9wZXJ0aWVzLFxuXHRcdHNjaGVtYUZpZWxkXG5cdCkgPT4ge1xuXHRcdC8vIGFsd2F5cyBkZWxldGUgYW5kIG92ZXJyaWRlIHdoYXQgaXMgZXhpc3RpbmcuXG5cdFx0aWYgKCBpbnN0YW5jZVsgc2NoZW1hRmllbGQgXSApIHtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZVsgc2NoZW1hRmllbGQgXTtcblx0XHR9XG5cdFx0Y3JlYXRlR2V0dGVyQW5kU2V0dGVyKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRzY2hlbWFGaWVsZCxcblx0XHRcdGN1aWQoKSxcblx0XHRcdHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH1cblx0XHQpO1xuXHRcdGNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyRm9yRmllbGQoIGluc3RhbmNlLCBzY2hlbWFGaWVsZCApO1xuXHR9ICk7XG5cdGNyZWF0ZVByaW1hcnlLZXlGaWVsZEdldHRlcnMoXG5cdFx0aW5zdGFuY2UsXG5cdFx0a2V5cyggcHJpbWFyeUtleXMgKVxuXHQpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSB2YWxpZGF0ZSB0eXBlIGZvciBhIGZpZWxkIHByb3BlcnR5LlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqL1xuY29uc3Qgc2V0VmFsaWRhdGVUeXBlRm9yRmllbGQgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUgKSA9PiB7XG5cdGluc3RhbmNlWyBQUklWQVRFX1BST1BFUlRJRVMuVkFMSURBVEVfVFlQRVMgXVsgZmllbGROYW1lIF0gPVxuXHRcdGRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIGluc3RhbmNlLnNjaGVtYSApO1xufTtcblxuLyoqXG4gKiAgUG9wdWxhdGVzIG1pc3NpbmcgZmllbGRzIGFuZCB2YWx1ZXMgdXNpbmcgZGVmYXVsdHMgcHJvdmlkZWQgYnkgc2NoZW1hLiAgSWZcbiAqICBzY2hlbWEgZG9lc24ndCBwcm92aWRlIGEgZGVmYXVsdCB0aGVuIHRoaXMgd2lsbCBwb3B1bGF0ZSB0aGUgZmllbGQgd2l0aCBhXG4gKiAgZGVmYXVsdCB2YWx1ZSB0aGF0IG1hdGNoZXMgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKi9cbmNvbnN0IHBvcHVsYXRlTWlzc2luZ0ZpZWxkcyA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdGlmICggdHlwZW9mIGluc3RhbmNlLnByb3RlY3RlZEZpZWxkcyA9PT0gJ3VuZGVmaW5lZCcgKSB7XG5cdFx0cG9wdWxhdGVQcm90ZWN0ZWRGaWVsZHNQcm9wZXJ0eSggaW5zdGFuY2UsIFtdICk7XG5cdH1cblx0aWYgKCAhIGluc3RhbmNlLmlzTmV3ICkge1xuXHRcdHJldHVybjtcblx0fVxuXHRmb3JFYWNoKFxuXHRcdGdldEVudGl0eUZpZWxkc0Zyb21TY2hlbWEoIGluc3RhbmNlICksXG5cdFx0KCBzY2hlbWFQcm9wZXJ0aWVzLCBmaWVsZE5hbWUgKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHR5cGVvZiBpbnN0YW5jZVsgZmllbGROYW1lIF0gPT09ICd1bmRlZmluZWQnICYmXG5cdFx0XHRcdCEgaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2Uuc2NoZW1hIClcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRJbml0aWFsRW50aXR5RmllbGRzQW5kVmFsdWVzKFxuXHRcdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IG9mIGVudGl0eSBmaWVsZHMgYW5kIHZhbHVlcyBmcm9tIHRoaXMgZW50aXR5IGluc3RhbmNlXG4gKiBmb3IgdXNlIGluIGNsb25pbmcgdGhlIGVudGl0eS5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VFbnRpdHl9IGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBQbGFpbiBvYmplY3Qgb2YgYWxsIGZpZWxkOnZhbHVlIHBhaXJzLlxuICovXG5jb25zdCBmb3JDbG9uZSA9ICggaW5zdGFuY2UgKSA9PiB7XG5cdHJldHVybiBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yQ2xvbmluZyggaW5zdGFuY2UgKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiB0aGUgZW50aXR5IGZpZWxkcyBhbmQgdmFsdWVzIGZyb20gdGhpcyBlbnRpdHlcbiAqIGluc3RhbmNlIHByZXBhcmVkIGZvciB1c2UgaW4gYW4gdXBkYXRlIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IFBsYWluIG9iamVjdCBvZiBmaWVsZDp2YWx1ZSBwYWlycy5cbiAqL1xuY29uc3QgZm9yVXBkYXRlID0gKCBpbnN0YW5jZSApID0+IHtcblx0cmV0dXJuIGdldEJhc2VGaWVsZHNBbmRWYWx1ZXNGb3JQZXJzaXN0aW5nKCBpbnN0YW5jZSApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IG9mIHRoZSBlbnRpdHkgZmllbGRzIGFuZCB2YWx1ZXMgZnJvbSB0aGlzIGVudGl0eVxuICogaW5zdGFuY2UgcHJlcGFyZWQgZm9yIHVzZSBpbiBhbiBpbnNlcnQgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gUGxhaW4gb2JqZWN0IG9mIGZpZWxkOnZhbHVlIHBhaXJzLlxuICovXG5jb25zdCBmb3JJbnNlcnQgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRjb25zdCBlbnRpdHlWYWx1ZXMgPSBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yUGVyc2lzdGluZyhcblx0XHRpbnN0YW5jZSxcblx0XHR0cnVlXG5cdCk7XG5cdGluc3RhbmNlLnByaW1hcnlLZXlzLmZvckVhY2goICggcHJpbWFyeUtleSApID0+IHtcblx0XHRlbnRpdHlWYWx1ZXNbIHByaW1hcnlLZXkgXSA9IGluc3RhbmNlWyBwcmltYXJ5S2V5IF07XG5cdH0gKTtcblx0cmV0dXJuIGVudGl0eVZhbHVlcztcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBsYWluIG9iamVjdCBvZiB0aGUgZW50aXR5IGZpZWxkcyBhbmQgdmFsdWVzIGZyb20gdGhpcyBlbnRpdHlcbiAqIGluc3RhbmNlIHByZXBhcmVkIGZvciB1c2UgaW4gZWl0aGVyIGFuIGluc2VydCBvciB1cGRhdGUgcmVxdWVzdC4gIFRoZSB0eXBlXG4gKiBpcyBhdXRvbWF0aWNhbGx5IGRlcml2ZWQgZnJvbSB0aGUgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgZW50aXR5IGlzIFwibmV3XCIgb3JcbiAqIG5vdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gUGxhaW4gb2JqZWN0IG9mIGZpZWxkOnZhbHVlIHBhaXJzLlxuICovXG5jb25zdCBmb3JQZXJzaXN0ID0gKCBpbnN0YW5jZSApID0+IHtcblx0aWYgKCBpbnN0YW5jZS5pc05ldyApIHtcblx0XHRyZXR1cm4gZm9ySW5zZXJ0KCBpbnN0YW5jZSApO1xuXHR9XG5cdHJldHVybiBmb3JVcGRhdGUoIGluc3RhbmNlICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgZ2V0dGVycyBmb3IgcmV0cmlldmluZyB0aGUgZmllbGRzIGFuZCB2YWx1ZXMgb2YgdGhlIGVudGl0eSBpbnN0YW5jZVxuICogZm9yIGluc2VydCBvciB1cGRhdGUgcmVxdWVzdHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVQZXJzaXN0aW5nR2V0dGVyc0FuZFNldHRlcnMgPSAoIGluc3RhbmNlICkgPT4ge1xuXHRjcmVhdGVDYWxsYmFja0dldHRlciggaW5zdGFuY2UsICdmb3JVcGRhdGUnLCBmb3JVcGRhdGUgKTtcblx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoIGluc3RhbmNlLCAnZm9ySW5zZXJ0JywgZm9ySW5zZXJ0ICk7XG5cdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKCBpbnN0YW5jZSwgJ2ZvclBlcnNpc3QnLCBmb3JQZXJzaXN0ICk7XG5cdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKCBpbnN0YW5jZSwgJ2ZvckNsb25lJywgZm9yQ2xvbmUgKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIGVudGl0eSBmaWVsZCBhY2Nlc3NvcnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQcmltYXJ5S2V5XG4gKi9cbmNvbnN0IHNldEluaXRpYWxFbnRpdHlGaWVsZHNBbmRWYWx1ZXMgPSAoXG5cdGluc3RhbmNlLFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGlzUHJpbWFyeUtleSA9IGZhbHNlLFxuKSA9PiB7XG5cdGlmICggaXNVbmRlZmluZWQoIGZpZWxkVmFsdWUgKSApIHtcblx0XHRmaWVsZFZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlRm9yRmllbGQoIGZpZWxkTmFtZSwgaW5zdGFuY2Uuc2NoZW1hICk7XG5cdFx0c2V0VmFsaWRhdGVUeXBlRm9yRmllbGQoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUgKTtcblx0fVxuXHRjcmVhdGVSYXdFbnRpdHlHZXR0ZXJzU2V0dGVycyhcblx0XHRpbnN0YW5jZSxcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZGVyaXZlUHJlcGFyZWRWYWx1ZUZvckZpZWxkKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIGluc3RhbmNlICksXG5cdFx0aXNQcmltYXJ5S2V5XG5cdCk7XG5cdGlmICggISBpc1ByaW1hcnlLZXkgKSB7XG5cdFx0Y3JlYXRlUmVuZGVyZWRHZXR0ZXJzKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRkZXJpdmVSZW5kZXJlZFZhbHVlKCBmaWVsZFZhbHVlIClcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgcmF3IGVudGl0eSBnZXR0ZXJzIGFuZCBzZXR0ZXJzLiAgVGhlc2UgYXJlIHRoZSBwcm9wZXJ0aWVzIG9mIGFuXG4gKiBlbnRpdHkgdGhhdCBoYXZlIHRoZSB2YWx1ZXMgdXNlZCBmb3Igbm90IG9ubHkgZ2V0dGluZyBidXQgYWxzbyBzZXR0aW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJpbWFyeUtleSBzZXQgdG8gdHJ1ZSBpZiBmaWVsZCBpcyB0aGUgbW9kZWwncyBwcmltYXJ5IGtleVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUmF3RW50aXR5R2V0dGVyc1NldHRlcnMgPSAoXG5cdGluc3RhbmNlLFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGlzUHJpbWFyeUtleSA9IGZhbHNlLFxuKSA9PiB7XG5cdGNvbnN0IG9wdHMgPSB7IGVudW1lcmFibGU6IHRydWUgfTtcblx0Ly8gcHJpbWFyeSBrZXkgaXMgaW1tdXRhYmxlXG5cdGlmICggaXNQcmltYXJ5S2V5ICkge1xuXHRcdGNyZWF0ZUdldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdG9wdHNcblx0XHQpO1xuXHRcdGNyZWF0ZUFsaWFzR2V0dGVyRm9yRmllbGQoIGluc3RhbmNlLCBmaWVsZE5hbWUgKTtcblx0fSBlbHNlIHtcblx0XHRjcmVhdGVHZXR0ZXJBbmRTZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdGZpZWxkTmFtZSxcblx0XHRcdGZpZWxkVmFsdWUsXG5cdFx0XHRvcHRzXG5cdFx0KTtcblx0XHRjcmVhdGVGbHVlbnRTZXR0ZXIoIGluc3RhbmNlLCBmaWVsZE5hbWUgKTtcblx0XHRjcmVhdGVBbGlhc0dldHRlckFuZFNldHRlckZvckZpZWxkKCBpbnN0YW5jZSwgZmllbGROYW1lICk7XG5cdH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBcImFsaWFzXCIgZ2V0dGVyIGZvciB0aGUgZ2l2ZW4gZmllbGQgbmFtZSBvbiB0aGUgZW50aXR5IGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBbGlhc0dldHRlckZvckZpZWxkID0gKCBpbnN0YW5jZSwgZmllbGROYW1lICkgPT4ge1xuXHRjcmVhdGVBbGlhc2VzRm9yTWV0aG9kKCBpbnN0YW5jZSwgZmllbGROYW1lLCBjcmVhdGVBbGlhc0dldHRlciApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIFwiYWxpYXNcIiBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGZvciB0aGUgZ2l2ZW4gZmllbGQgb24gdGhlIGVudGl0eVxuICogaW5zdGFuY2UuXG4gKlxuICogRXhhbXBsZTogRGF0ZXRpbWUgZW50aXRpZXMgaGF2ZSBhIGBEVFRfRVZUX3N0YXJ0YCBmaWVsZC4gIE9uIHRoZSBlbnRpdHlcbiAqIGluc3RhbmNlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgdmFsdWUgb2YgdGhhdCBmaWVsZCB2aWE6XG4gKiAtIGRhdGV0aW1lLkRUVF9FVlRfc3RhcnRcbiAqIC0gZGF0ZXRpbWUuZHR0RXZ0U3RhcnRcbiAqIC0gZGF0ZXRpbWUuZXZ0U3RhcnRcbiAqIC0gZGF0ZXRpbWUuc3RhcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyRm9yRmllbGQgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUgKSA9PiB7XG5cdGNyZWF0ZUFsaWFzZXNGb3JNZXRob2QoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGNyZWF0ZUFsaWFzR2V0dGVyQW5kU2V0dGVyICk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgQWxpYXNlcyB1c2luZyB0aGUgcHJvdmlkZWQgbWV0aG9kLlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2RcbiAqL1xuY29uc3QgY3JlYXRlQWxpYXNlc0Zvck1ldGhvZCA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSwgbWV0aG9kICkgPT4ge1xuXHQvLyBjYW1lbENhc2UgZ2V0dGVyIChvciBzZXR0ZXIpIGZvciBmdWxsIGZpZWxkIG5hbWUgKGVnLiBFVlRfZGVzYyA9PiBldnREZXNjKVxuXHRtZXRob2QoIGluc3RhbmNlLCBmaWVsZE5hbWUsIGNhbWVsQ2FzZSggZmllbGROYW1lICkgKTtcblx0Ly8gc3RyaXAgZmllbGQgcHJlZml4ZXMgYW5kIGNhbWVsQ2FzZSAoaWYgdGhlcmUgYXJlIGZpZWxkIHByZWZpeGVzIGZvciB0aGVcblx0Ly8gZW50aXR5LiAoZWcuIEVWVF9kZXNjID0+IGRlc2MpO1xuXHRpZiAoIGluc3RhbmNlLmZpZWxkUHJlZml4ZXMgKSB7XG5cdFx0bGV0IG5ld0ZpZWxkTmFtZSA9ICcnO1xuXHRcdC8vIFllcywgaXRzIGludGVuZGVkIHRoYXQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHByZWZpeGVzLCB0aGlzIGNvdWxkXG5cdFx0Ly8gZW5kIHVwIGNyZWF0aW5nIG11bHRpcGxlIGFsaWFzZWQgZ2V0dGVycyAob3Igc2V0dGVycylcblx0XHQvLyAoZWcgRGF0ZXRpbWU6IERUVF9FVlRfc3RhcnQgd291bGQgZW5kIHVwIHdpdGggYGV2dFN0YXJ0YCBhbmQgYHN0YXJ0YFxuXHRcdC8vIGFzIGdldHRlciBhY2Nlc3NvcnMpLlxuXHRcdGluc3RhbmNlLmZpZWxkUHJlZml4ZXMuZm9yRWFjaCggKCBmaWVsZFByZWZpeCApID0+IHtcblx0XHRcdG5ld0ZpZWxkTmFtZSA9IGZpZWxkTmFtZS5yZXBsYWNlKCBmaWVsZFByZWZpeCArICdfJywgJycgKTtcblx0XHRcdGlmICggbmV3RmllbGROYW1lICE9PSBmaWVsZE5hbWUgKSB7XG5cdFx0XHRcdG1ldGhvZChcblx0XHRcdFx0XHRpbnN0YW5jZSxcblx0XHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdFx0Y2FtZWxDYXNlKCBuZXdGaWVsZE5hbWUgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgY2FsbGJhY2sgdGhhdCBpcyB1c2VkIGluIHRoZSBgZ2V0UmVuZGVyZWRgIGZpZWxkIGdldHRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7ZnVuY3Rpb24oc3RyaW5nKTogKn0gIEEgY2FsbGJhY2suXG4gKi9cbmNvbnN0IGdldFJlbmRlcmVkQ2FsbGJhY2sgPSAoIGluc3RhbmNlICkgPT4gKCByZXF1ZXN0ZWRGaWVsZE5hbWUgKSA9PlxuXHRpbnN0YW5jZVsgcmVxdWVzdGVkRmllbGROYW1lICsgJ1JlbmRlcmVkJyBdO1xuXG4vKipcbiAqIFJldHVybnMgYSBmaWVsZE5hbWUgc3RyaXBwZWQgb2YgYWxsIHBvc3NpYmxlIHByZWZpeGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgcHJlZml4IGZyZWUgZmllbGROYW1lLlxuICovXG5jb25zdCByZW1vdmVQcmVmaXhlc0Zyb21GaWVsZCA9ICggaW5zdGFuY2UsIGZpZWxkTmFtZSApID0+IHtcblx0Y29uc3QgcHJlZml4ZXNUb1JlbW92ZSA9IHNvcnRCeShcblx0XHRpbnN0YW5jZS5maWVsZFByZWZpeGVzLFxuXHRcdCggcHJlZml4ICkgPT4gcHJlZml4Lmxlbmd0aCAqIC0xXG5cdCk7XG5cdGxldCBuZXdGaWVsZE5hbWUgPSBmaWVsZE5hbWU7XG5cdGZvckVhY2goIHByZWZpeGVzVG9SZW1vdmUsICggcHJlZml4ICkgPT4ge1xuXHRcdG5ld0ZpZWxkTmFtZSA9IGZpZWxkTmFtZS5yZXBsYWNlKCBwcmVmaXgsICcnICk7XG5cdFx0aWYgKCBuZXdGaWVsZE5hbWUgIT09IGZpZWxkTmFtZSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH0gKTtcblx0cmV0dXJuIG5ld0ZpZWxkTmFtZTtcbn07XG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIHRoZSBnZXR0ZXJzIGZvciB0aGUgcmVuZGVyZWQgcHJvcGVydHkgb2YgbW9kZWwgZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSAgZmllbGRWYWx1ZVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUmVuZGVyZWRHZXR0ZXJzID0gKCBpbnN0YW5jZSwgZmllbGROYW1lLCBmaWVsZFZhbHVlICkgPT4ge1xuXHRjcmVhdGVHZXR0ZXIoXG5cdFx0aW5zdGFuY2UsXG5cdFx0Y2FtZWxDYXNlKCByZW1vdmVQcmVmaXhlc0Zyb21GaWVsZCggaW5zdGFuY2UsIGZpZWxkTmFtZSApICkgK1xuXHRcdCdSZW5kZXJlZCcsXG5cdFx0ZmllbGRWYWx1ZVxuXHQpO1xuXHRpZiAoIGlzVW5kZWZpbmVkKCBpbnN0YW5jZS5nZXRSZW5kZXJlZCApICkge1xuXHRcdGNyZWF0ZUNhbGxiYWNrR2V0dGVyKFxuXHRcdFx0aW5zdGFuY2UsXG5cdFx0XHQnZ2V0UmVuZGVyZWQnLFxuXHRcdFx0Z2V0UmVuZGVyZWRDYWxsYmFjayxcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIENhbGxiYWNrIGZvciB0aGUgYGhhc011bHRpcGxlUHJpbWFyeUtleXNgIGdldHRlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKCk6IGJvb2xlYW59IFRoZSBjYWxsYmFjayBmb3IgaGFzTXVsdGlwbGVQcmltYXJ5S2V5cyBnZXR0ZXJcbiAqL1xuY29uc3QgaGFzTXVsdGlwbGVQcmltYXJ5S2V5c0NhbGxiYWNrID0gKCBpbnN0YW5jZSApID0+XG5cdGluc3RhbmNlLnByaW1hcnlLZXlzLmxlbmd0aCA+IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBnZXR0ZXJzIGZvciBwcmltYXJ5IGtleSByZWxhdGVkIGRhdGEuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge0FycmF5fSBwcmltYXJ5S2V5c1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUHJpbWFyeUtleUZpZWxkR2V0dGVycyA9ICggaW5zdGFuY2UsIHByaW1hcnlLZXlzICkgPT4ge1xuXHRjb25zdCBvcHRzID0geyBjb25maWd1cmFibGU6IHRydWUgfTtcblx0aWYgKCBpc0FycmF5KCBwcmltYXJ5S2V5cyApICkge1xuXHRcdGNyZWF0ZUdldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0J3ByaW1hcnlLZXknLFxuXHRcdFx0cHJpbWFyeUtleXNbIDAgXSxcblx0XHRcdG9wdHNcblx0XHQpO1xuXHRcdGNyZWF0ZUdldHRlckFuZFNldHRlcihcblx0XHRcdGluc3RhbmNlLFxuXHRcdFx0J3ByaW1hcnlLZXlzJyxcblx0XHRcdHByaW1hcnlLZXlzLFxuXHRcdFx0b3B0c1xuXHRcdCk7XG5cdFx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoXG5cdFx0XHRpbnN0YW5jZSxcblx0XHRcdCdoYXNNdWx0aXBsZVByaW1hcnlLZXlzJyxcblx0XHRcdGhhc011bHRpcGxlUHJpbWFyeUtleXNDYWxsYmFjayxcblx0XHRcdG9wdHNcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7ZnVuY3Rpb24oc3RyaW5nKTogYm9vbGVhbn0gUmV0dXJucyBhIGNhbGxiYWNrIGZvciB0aGVcbiAqIGhhc0NhbGN1bGF0ZWRGaWVsZCBnZXR0ZXJcbiAqL1xuY29uc3QgaGFzQ2FsY3VsYXRlZEZpZWxkQ2FsbGJhY2sgPSAoIGluc3RhbmNlICkgPT5cblx0KCBmaWVsZE5hbWVUb0NoZWNrICkgPT4gISBpc1VuZGVmaW5lZCggaW5zdGFuY2VbIGZpZWxkTmFtZVRvQ2hlY2sgXSApO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGdldHRlcnMgZm9yIGFsbCB0aGUgY2FsY3VsYXRlZCBmaWVsZHMgYW5kIHZhbHVlIG9uIHRoZSBlbnRpdHkuXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59ZmllbGRzQW5kVmFsdWVzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRDYWxjdWxhdGVkRmllbGRBbmRWYWx1ZXMgPSAoIGluc3RhbmNlLCBmaWVsZHNBbmRWYWx1ZXMgKSA9PiB7XG5cdGZvckVhY2goIGZpZWxkc0FuZFZhbHVlcywgKCBjYWxjdWxhdGVkRmllbGRWYWx1ZSwgY2FsY3VsYXRlZEZpZWxkTmFtZSApID0+IHtcblx0XHRpZiAoIGNhbGN1bGF0ZWRGaWVsZE5hbWUgIT09ICdfcHJvdGVjdGVkJyApIHtcblx0XHRcdGNyZWF0ZUdldHRlcihcblx0XHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRcdGNhbWVsQ2FzZSggY2FsY3VsYXRlZEZpZWxkTmFtZSApLFxuXHRcdFx0XHRjYWxjdWxhdGVkRmllbGRWYWx1ZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0gKTtcblx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoXG5cdFx0aW5zdGFuY2UsXG5cdFx0J2hhc0NhbGN1bGF0ZWRGaWVsZCcsXG5cdFx0aGFzQ2FsY3VsYXRlZEZpZWxkQ2FsbGJhY2tcblx0KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGdldHRlcnMgZm9yIHRoZSB2YXJpb3VzIHJlc291cmNlIGxpbmtzIG9uIHRoZSBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fWZpZWxkc0FuZFZhbHVlc1xuICovXG5leHBvcnQgY29uc3Qgc2V0UmVzb3VyY2VzID0gKCBpbnN0YW5jZSwgZmllbGRzQW5kVmFsdWVzICkgPT4ge1xuXHRjb25zdCByZWxhdGlvbnMgPSBbXTtcblx0bGV0IHJlbGF0aW9uTmFtZTtcblx0Zm9yRWFjaCggZmllbGRzQW5kVmFsdWVzLCAoIHJlc291cmNlVmFsdWUsIHJlc291cmNlTmFtZSApID0+IHtcblx0XHRpZiAoIHJlc291cmNlTmFtZSA9PT0gJ3NlbGYnICkge1xuXHRcdFx0Y3JlYXRlR2V0dGVyKCBpbnN0YW5jZSwgJ3Jlc291cmNlTGluaycsIHJlc291cmNlVmFsdWVbIDAgXS5ocmVmICk7XG5cdFx0fSBlbHNlIGlmICggcmVzb3VyY2VOYW1lID09PSAnY29sbGVjdGlvbicgKSB7XG5cdFx0XHRjcmVhdGVHZXR0ZXIoXG5cdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHQnY29sbGVjdGlvblJlc291cmNlTGluaycsXG5cdFx0XHRcdHJlc291cmNlVmFsdWVbIDAgXS5ocmVmXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWxhdGlvbk5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tTGluayggcmVzb3VyY2VOYW1lICk7XG5cdFx0XHRyZWxhdGlvbnMucHVzaCggcmVsYXRpb25OYW1lICk7XG5cdFx0XHRzZXRSZWxhdGlvbnNSZXNvdXJjZShcblx0XHRcdFx0aW5zdGFuY2UsXG5cdFx0XHRcdHJlbGF0aW9uTmFtZSArICdSZXNvdXJjZScsXG5cdFx0XHRcdHJlc291cmNlVmFsdWVcblx0XHRcdCk7XG5cdFx0fVxuXHR9ICk7XG5cdC8vc2V0IHJlbGF0aW9ucyBnZXR0ZXJcblx0Y3JlYXRlR2V0dGVyKCBpbnN0YW5jZSwgJ2dldFJlbGF0aW9ucycsIHJlbGF0aW9ucyApO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6IE9iamVjdH0gUmV0dXJucyB0aGUgY2FsbGJhY2sgZm9yIGdldHRpbmcgYVxuICogcmVsYXRpb24gcmVzb3VyY2VcbiAqL1xuY29uc3QgZ2V0UmVsYXRpb25SZXNvdXJjZUNhbGxiYWNrID0gKCBpbnN0YW5jZSApID0+XG5cdCggcmVsYXRpb25OYW1lICkgPT4gaW5zdGFuY2VbIHJlbGF0aW9uTmFtZS5yZXBsYWNlKCAnUmVzb3VyY2UnLCAnJyApIF07XG5cbi8qKlxuICogQ3JlYXRlcyBnZXR0ZXJzIGZvciB0aGUgcmVsYXRpb25zIHJlc291cmNlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbk5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsIHN0cmluZz59IHJlc291cmNlSW5mb1xuICovXG5leHBvcnQgY29uc3Qgc2V0UmVsYXRpb25zUmVzb3VyY2UgPSAoXG5cdGluc3RhbmNlLFxuXHRyZWxhdGlvbk5hbWUsXG5cdHJlc291cmNlSW5mb1xuKSA9PiB7XG5cdGNyZWF0ZUdldHRlcihcblx0XHRpbnN0YW5jZSxcblx0XHRyZWxhdGlvbk5hbWUsXG5cdFx0e1xuXHRcdFx0cmVzb3VyY2VMaW5rOiByZXNvdXJjZUluZm9bIDAgXS5ocmVmLFxuXHRcdFx0c2luZ2xlOiByZXNvdXJjZUluZm9bIDAgXS5zaW5nbGUsXG5cdFx0fVxuXHQpO1xuXHRpZiAoIGlzVW5kZWZpbmVkKCBpbnN0YW5jZS5nZXRSZWxhdGlvblJlc291cmNlICkgKSB7XG5cdFx0Y3JlYXRlQ2FsbGJhY2tHZXR0ZXIoIGluc3RhbmNlLFxuXHRcdFx0J2dldFJlbGF0aW9uUmVzb3VyY2UnLFxuXHRcdFx0Z2V0UmVsYXRpb25SZXNvdXJjZUNhbGxiYWNrXG5cdFx0KTtcblx0fVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBpbnRlcm5hbCBzYXZlIHN0YXRlIHRvIHRoZSBnaXZlbiB2YWx1ZSB3aGVuIGN1cnJlbnQgc3RhdGUgaXNcbiAqIFNBVkVfU1RBVEUuY2xlYW4gb3RoZXJ3aXNlIGN1cnJlbnQgc2F2ZSBzdGF0ZSBpcyByZXRhaW5lZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzYXZlU3RhdGUgRXhwZWN0ZWQgdG8gYmUgb25lIG9mIFNBVkVfU1RBVEUgY29uc3RhbnQgdmFsdWVzLlxuICogQHBhcmFtIHtib29sZWFufSBvdmVycmlkZSBTZXQgdG8gdHJ1ZSB3aGVuIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgbG9naWMgZm9yXG4gKiBzZXR0aW5nIHN0YXRlLiAgV2hlbiB0cnVlLCB0aGUgc2F2ZVN0YXRlIGlzIHNldCB0byB3aGF0ZXZlciB0aGUgaW5jb21pbmdcbiAqIHNhdmVTdGF0ZSB2YWx1ZSBpcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNhdmVTdGF0ZSA9ICggaW5zdGFuY2UsIHNhdmVTdGF0ZSwgb3ZlcnJpZGUgPSBmYWxzZSApID0+IHtcblx0Y29uc3QgY3VycmVudFN0YXRlID0gaW5zdGFuY2VbIFBSSVZBVEVfUFJPUEVSVElFUy5TQVZFX1NUQVRFIF07XG5cdHN3aXRjaCAoIHNhdmVTdGF0ZSApIHtcblx0XHRjYXNlIFNBVkVfU1RBVEUuRElSVFk6XG5cdFx0Y2FzZSBTQVZFX1NUQVRFLk5FVzpcblx0XHRjYXNlIFNBVkVfU1RBVEUuQ0xFQU46XG5cdFx0XHRpZiAoIG92ZXJyaWRlICkge1xuXHRcdFx0XHRpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlNBVkVfU1RBVEUgXSA9IHNhdmVTdGF0ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpbnN0YW5jZVsgUFJJVkFURV9QUk9QRVJUSUVTLlNBVkVfU1RBVEUgXSA9XG5cdFx0XHRcdGN1cnJlbnRTdGF0ZSA9PT0gU0FWRV9TVEFURS5DTEVBTiA/XG5cdFx0XHRcdFx0c2F2ZVN0YXRlIDpcblx0XHRcdFx0XHRjdXJyZW50U3RhdGU7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEludmFsaWRBcmd1bWVudChcblx0XHRcdFx0J1NhdmUgc3RhdGUgZm9yIGVudGl0eSBjYW4gb25seSBiZSBzZXQgdG8gZWl0aGVyICcgK1xuXHRcdFx0XHQnU0FWRV9TVEFURS5ESVJUWSwgU0FWRV9TVEFURS5ORVcgb3IgU0FWRV9TVEFURS5DTEVBTidcblx0XHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogQWRkIHRoZSBmaWVsZCBuYW1lIHRvIHRoZSBmaWVsZFRvUGVyc2lzdE9uSW5zZXJ0IHByb3BlcnR5IG9uIHRoZSBpbnN0YW5jZVxuICogaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICovXG5leHBvcnQgY29uc3Qgc2V0RmllbGRUb1BlcnNpc3QgPSAoIGluc3RhbmNlLCBmaWVsZE5hbWUgKSA9PiB7XG5cdGlmICggaW5zdGFuY2UuZmllbGRzVG9QZXJzaXN0T25JbnNlcnQgKSB7XG5cdFx0aW5zdGFuY2UuZmllbGRzVG9QZXJzaXN0T25JbnNlcnQuYWRkKCBmaWVsZE5hbWUgKTtcblx0fVxufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQge1xuXHRpc1BsYWluT2JqZWN0LFxuXHRjYW1lbENhc2UsXG5cdGxhc3QsXG5cdHBpY2ssXG5cdHBpY2tCeSxcblx0aXNBcnJheSxcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGluc3RhbmNlT2YgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWxpZGF0b3JzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdE1vbmV5LFxuXHRTaXRlQ3VycmVuY3ksXG5cdFNlcnZlckRhdGVUaW1lIGFzIERhdGVUaW1lLFxufSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcblxuaW1wb3J0IHsgcGx1cmFsTW9kZWxOYW1lIH0gZnJvbSAnLi4vbW9kZWwtbmFtZXMnO1xuXG5pbXBvcnQge1xuXHRoYXNSYXdQcm9wZXJ0eSxcblx0aGFzUHJldHR5UHJvcGVydHksXG5cdGhhc1JlbmRlcmVkUHJvcGVydHksXG5cdGlzRGF0ZVRpbWVGaWVsZCxcblx0aXNNb25leUZpZWxkLFxuXHRpc1ByaW1hcnlLZXlGaWVsZCxcblx0aXNFbnRpdHlGaWVsZCxcbn0gZnJvbSAnLi9ib29sZWFucyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVR5cGVGb3JGaWVsZCB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBWQUxJREFURV9UWVBFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFRoaXMgcmVjZWl2ZXMgYSBmaWVsZCBuYW1lLCBpdCdzIHZhbHVlIGFuZCB0aGUgc2NoZW1hIGFuZCBjb252ZXJ0cyBpdCB0byB0aGVcbiAqIHJlbGF0ZWQgdmFsdWUgb2JqZWN0IElGIHRoZSBzY2hlbWEgaW5kaWNhdGVzIGl0IGlzIG9mIGEgdHlwZSB0aGF0IHRoZXJlIGlzIGFcbiAqIGtub3duIHZhbHVlIG9iamVjdCBmb3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHsqfSBmaWVsZFZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hXG4gKiBAcmV0dXJuIHtEYXRlVGltZXxNb25leXwqfSAgSWYgdGhpcyBpcyBub3QgYSB2YWx1ZSBvYmplY3QsIHRoZSBvcmlnaW5hbCBmaWVsZFxuICogdmFsdWUgaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXliZUNvbnZlcnRUb1ZhbHVlT2JqZWN0ID0gKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIHNjaGVtYSApID0+IHtcblx0aWYgKFxuXHRcdGlzRGF0ZVRpbWVGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSAmJlxuXHRcdCEgRGF0ZVRpbWUudmFsaWRhdGVJc0RhdGVUaW1lKCBmaWVsZFZhbHVlIClcblx0KSB7XG5cdFx0cmV0dXJuIERhdGVUaW1lLmZyb21JU08oIGZpZWxkVmFsdWUgKTtcblx0fVxuXHRpZiAoXG5cdFx0aXNNb25leUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApICYmXG5cdFx0ISAoIGluc3RhbmNlT2YoIGZpZWxkVmFsdWUsICdNb25leScgKSApXG5cdCkge1xuXHRcdHJldHVybiBuZXcgTW9uZXkoIGZpZWxkVmFsdWUsIFNpdGVDdXJyZW5jeSApO1xuXHR9XG5cdC8vIGlmIG1vcmUgVk9zIGdldCBhZGRlZCwgdGhlbiBpbnN0ZWFkIG9mIGFkZGluZyBtb3JlIGlmIGVsc2UgYmxvY2tzXG5cdC8vIHRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBvbmVzIGJlbG93LCBhbGwgVk8gbG9naWMgc2hvdWxkIGJlIGV4dHJhY3RlZFxuXHQvLyBpbnRvIHNvbWUga2luZCBvZiAgVmFsdWVPYmplY3RFeHRyYWN0b3Igb2JqZWN0IHRoYXQgd291bGQgaG9sZCBhbGwgb2Zcblx0Ly8gdGhlIG5lY2Vzc2FyeSBjYWxsYmFja3MgZm9yIG1hbmFnaW5nIHRoZSBkZXRlY3Rpb24gb2YgVk8gZmllbGRzIGFuZFxuXHQvLyBjb252ZXJzaW9uIG9mIGRhdGEgdG8gYW5kIGZyb20gdGhlIHZhcmlvdXMgVk9zXG5cdC8vIHBseiBzZWU6XG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmVudGVzcHJlc3NvL2V2ZW50LWVzcHJlc3NvLWNvcmUvcHVsbC82MzcvZmlsZXMjcjIyODY5MDc4OVxuXHRyZXR1cm4gZmllbGRWYWx1ZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb252ZXJ0cyB0aGUgaW5jb21pbmcgdmFsdWUgZm9yIGEgZmllbGQgdG8gaXRzIGVxdWl2YWxlbnQgXCJyYXdcIiB2YWx1ZVxuICogZnJvbSBhIHZhbHVlIG9iamVjdCBpZiBpdCBpcyBhIHZhbHVlIG9iamVjdC4gIE90aGVyd2lzZSBpdCBqdXN0IHJldHVybnMgdGhlXG4gKiBvcmlnaW5hbCBpbmNvbWluZyB2YWx1ZS4gIFRoaXMgYWxzbyBhc3NlcnRzIHRoYXQgaWYgdGhlIHByb3ZpZGVkIGZpZWxkIGlzXG4gKiBleHBlY3RlZCB0byBiZSBhIHZhbHVlIG9iamVjdCB0aGF0IHRoZSBpbmNvbWluZyB2YWx1ZSBJUyBhIHZhbGlkIHZhbHVlIG9iamVjdFxuICogYW5kIGl0IGlzIHRoZSBleHBlY3RlZCBpbnN0YW5jZSBvZiBhIHZhbHVlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp8TW9uZXl8RGF0ZVRpbWV9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4ge3N0cmluZ3xudW1iZXJ8Kn0gIElmIHRoZSB2YWx1ZSBpcyBub3QgYSB2YWx1ZSBvYmplY3QsIHJldHVybnMgdGhlXG4gKiBvcmlnaW5hbCB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgbWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0V2l0aEFzc2VydGlvbnMgPSAoXG5cdGZpZWxkTmFtZSxcblx0ZmllbGRWYWx1ZSxcblx0c2NoZW1hXG4pID0+IHtcblx0aWYgKCBpc0RhdGVUaW1lRmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0RGF0ZVRpbWUuYXNzZXJ0SXNEYXRlVGltZSggZmllbGRWYWx1ZSApO1xuXHRcdGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlLnRvSVNPKCk7XG5cdH0gZWxzZSBpZiAoIGlzTW9uZXlGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSApIHtcblx0XHRNb25leS5hc3NlcnRNb25leSggZmllbGRWYWx1ZSApO1xuXHRcdGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlLnRvTnVtYmVyKCk7XG5cdH1cblx0cmV0dXJuIGZpZWxkVmFsdWU7XG59O1xuXG4vKipcbiAqIFRoaXMgY29udmVydHMgdGhlIGluY29taW5nIHZhbHVlIGZvciBhIGZpZWxkIHRvIGl0cyBlcXVpdmFsZW50IFwicmF3XCIgdmFsdWVcbiAqIGlmIHRoZSBpbmNvbWluZyB2YWx1ZSAgaXMgYSB2YWx1ZSBvYmplY3QuICBPdGhlcndpc2UgaXQganVzdCByZXR1cm5zIHRoZVxuICogb3JpZ2luYWwgaW5jb21pbmcgdmFsdWUuXG4gKlxuICogQHBhcmFtIHsqfERhdGVUaW1lfE1vbmV5fWZpZWxkVmFsdWVcbiAqIEByZXR1cm4geyp9IFRoZSByYXcgdmFsdWUgZm9yIHRoZSB2YWx1ZSBvYmplY3Qgb3IgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgbWF5YmVDb252ZXJ0RnJvbVZhbHVlT2JqZWN0ID0gKCBmaWVsZFZhbHVlICkgPT4ge1xuXHRpZiAoIERhdGVUaW1lLnZhbGlkYXRlSXNEYXRlVGltZSggZmllbGRWYWx1ZSApICkge1xuXHRcdGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlLnRvSVNPKCk7XG5cdH0gZWxzZSBpZiAoIGluc3RhbmNlT2YoIGZpZWxkVmFsdWUsICdNb25leScgKSApIHtcblx0XHRmaWVsZFZhbHVlID0gZmllbGRWYWx1ZS50b051bWJlcigpO1xuXHR9XG5cdHJldHVybiBmaWVsZFZhbHVlO1xufTtcblxuLyoqXG4gKiBUaGlzIGRlcml2ZXMgdGhlIFwicHJlcGFyZWRcIiB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkIGFuZCB2YWx1ZS5cbiAqXG4gKiBcIlByZXBhcmVkXCIgbWVhbnM6XG4gKlxuICogLSBjb252ZXJ0aW5nIHRvIGEgdmFsdWUgb2JqZWN0IGlmIHRoaXMgaXMgYSBmaWVsZCB0aGF0IHRoZXJlIGFyZSBkZWZpbmVkXG4gKiAgIHZhbHVlIG9iamVjdHMgZm9yLlxuICogLSByZXRyaWV2aW5nIHRoZSBcInJhd1wiIHZhbHVlIGZyb20gZmllbGQgdmFsdWVzIHRoYXQgaGF2ZSBgcmF3YCBhbmQgYHJlbmRlcmVkYFxuICogICBvciBgcHJldHR5YCBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gIGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7RGF0ZVRpbWV8TW9uZXl8Kn0gIFJldHVybnMgdGhlIG9yaWdpbmFsIGluY29taW5nIHZhbHVlIGlmIGl0IGRvZXNcbiAqIG5vdCBoYXZlIGEgcmF3IGVxdWl2YWxlbnQgb3IgaXMgbm90IGEgdmFsdWUgb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgZGVyaXZlUHJlcGFyZWRWYWx1ZUZvckZpZWxkID0gKFxuXHRmaWVsZE5hbWUsXG5cdGZpZWxkVmFsdWUsXG5cdGluc3RhbmNlXG4pID0+IHtcblx0Y29uc3QgdmFsaWRhdGlvblR5cGUgPSB2YWxpZGF0ZVR5cGVGb3JGaWVsZCggZmllbGROYW1lLCBpbnN0YW5jZSApO1xuXHRmaWVsZFZhbHVlID0gaXNQbGFpbk9iamVjdCggZmllbGRWYWx1ZSApID9cblx0XHRmaWVsZFZhbHVlWyB2YWxpZGF0aW9uVHlwZSBdIDpcblx0XHRmaWVsZFZhbHVlO1xuXHRyZXR1cm4gbWF5YmVDb252ZXJ0VG9WYWx1ZU9iamVjdCggZmllbGROYW1lLCBmaWVsZFZhbHVlLCBpbnN0YW5jZS5zY2hlbWEgKTtcbn07XG5cbi8qKlxuICogVGhpcyByZXR1cm5zIHRoZSBcInJlbmRlcmVkXCIgb3IgXCJwcmV0dHlcIiBlcXVpdmFsZW50IGZyb20gYSB2YWx1ZSBpZiBpdCBleGlzdHNcbiAqIGFzIGEgcHJvcGVydHkgb24gaXQuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn0gIFRoZSBvcmlnaW5hbCB2YWx1ZSBpcyByZXR1cm5lZCBpZiBpdHMgbm90IGEgcGxhaW4gb2JqZWN0IG9yIGlmXG4gKiBpdCBoYXMgbm8gYHJlbmRlcmVkYCBvciBgcHJldHR5YCBwcm9wZXJ0eS4gIEhvd2V2ZXIsIGlmIGl0IGlzIGEgcGxhaW4gb2JqZWN0XG4gKiBhbmQgaGFzIG5vIHByZXR0eS9yZW5kZXJlZCBwcm9wZXJ0aWVzIGJ1dCBET0VTIGhhdmUgYSByYXcgcHJvcGVydHksIHRoZW4gdGhhdFxuICogaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVSZW5kZXJlZFZhbHVlID0gKCB2YWx1ZSApID0+IHtcblx0aWYgKCAhIGlzUGxhaW5PYmplY3QoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdHZhbHVlID0gaGFzUHJldHR5UHJvcGVydHkoIHZhbHVlICkgPyB2YWx1ZS5wcmV0dHkgOiB2YWx1ZTtcblx0dmFsdWUgPSBoYXNSZW5kZXJlZFByb3BlcnR5KCB2YWx1ZSApID8gdmFsdWUucmVuZGVyZWQgOiB2YWx1ZTtcblx0cmV0dXJuIGhhc1Jhd1Byb3BlcnR5KCB2YWx1ZSApID8gdmFsdWUucmF3IDogdmFsdWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWUgb2YgYSByZXNvdXJjZSBmcm9tIHRoZSBnaXZlbiBgcmVzb3VyY2VMaW5rYC5cbiAqXG4gKiBlZy4gXCJodHRwczovL2FwaS5ldmVudGVzcHJlc3NvLmNvbS9yZWdpc3RyYXRpb25cIiB3aWxsIHJldHVybiAncmVnaXN0cmF0aW9uJztcblxuICogQHBhcmFtIHtzdHJpbmd9IHJlc291cmNlTGlua1xuICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBmcm9tIGEgcHJvdmlkZWQgcmVzb3VyY2VcbiAqIGxpbmsuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRSZWxhdGlvbk5hbWVGcm9tTGluayA9ICggcmVzb3VyY2VMaW5rICkgPT4ge1xuXHRyZXR1cm4gcGx1cmFsTW9kZWxOYW1lKCBjYW1lbENhc2UoIGxhc3QoIHJlc291cmNlTGluay5zcGxpdCggJy8nICkgKSApICk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwbGFpbiBvYmplY3QgY29udGFpbmluZyB0aGUgZW50aXR5IGZpZWxkIG5hbWVzIGFuZCB2YWx1ZXMgZnJvbSB0aGVcbiAqIHByb3ZpZGVkIGVudGl0eSBpbnN0YW5jZS4gIFRoZSB2YWx1ZXMgYXJlIG5vdCBwcmVwYXJlZCBhbmQgbWF0Y2ggZXhhY3RseSB3aGF0XG4gKiBpcyBjdXJyZW50bHkgc2V0IG9uIHRoaXMgZW50aXR5LlxuICpcbiAqIEBwYXJhbSB7QmFzZUVudGl0eX0gZW50aXR5SW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgcGxhaW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yQ2xvbmluZyA9ICggZW50aXR5SW5zdGFuY2UgKSA9PiB7XG5cdHJldHVybiBPYmplY3Qua2V5cyggZW50aXR5SW5zdGFuY2UgKS5yZWR1Y2UoIChcblx0XHRmaWVsZHNBbmRWYWx1ZXMsXG5cdFx0ZmllbGROYW1lXG5cdCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdGlzRW50aXR5RmllbGQoIGZpZWxkTmFtZSwgZW50aXR5SW5zdGFuY2Uuc2NoZW1hICkgJiZcblx0XHRcdCEgaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgZW50aXR5SW5zdGFuY2Uuc2NoZW1hIClcblx0XHQpIHtcblx0XHRcdGZpZWxkc0FuZFZhbHVlc1sgZmllbGROYW1lIF0gPSBlbnRpdHlJbnN0YW5jZVsgZmllbGROYW1lIF07XG5cdFx0XHRyZXR1cm4gZmllbGRzQW5kVmFsdWVzO1xuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRzQW5kVmFsdWVzO1xuXHR9LCB7fSApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVudGl0eSBmaWVsZCBuYW1lIGFuZCB2YWx1ZXMgZnJvbSB0aGVcbiAqIHByb3ZpZGVkIGVudGl0eSBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3R9IGVudGl0eUluc3RhbmNlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZvckluc2VydCAgV2hldGhlciB0byByZXR1cm4gdGhlIGZpZWxkcyBhbmQgdmFsdWVzIGZvclxuICogaW5zZXJ0IG9yIGZvciB1cGRhdGUuXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgcGxhaW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCYXNlRmllbGRzQW5kVmFsdWVzRm9yUGVyc2lzdGluZyA9IChcblx0ZW50aXR5SW5zdGFuY2UsXG5cdGZvckluc2VydCA9IGZhbHNlXG4pID0+IHtcblx0Y29uc3QgaXRlcmF0b3IgPSBmb3JJbnNlcnQgP1xuXHRcdEFycmF5LmZyb20oIGVudGl0eUluc3RhbmNlLmZpZWxkc1RvUGVyc2lzdE9uSW5zZXJ0LnZhbHVlcygpICkgOlxuXHRcdE9iamVjdC5rZXlzKCBlbnRpdHlJbnN0YW5jZSApO1xuXG5cdHJldHVybiBpdGVyYXRvci5yZWR1Y2UoIChcblx0XHRmaWVsZHNBbmRWYWx1ZXMsXG5cdFx0ZmllbGROYW1lXG5cdCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdGlzRW50aXR5RmllbGQoIGZpZWxkTmFtZSwgZW50aXR5SW5zdGFuY2Uuc2NoZW1hICkgJiZcblx0XHRcdCEgaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgZW50aXR5SW5zdGFuY2Uuc2NoZW1hIClcblx0XHQpIHtcblx0XHRcdGZpZWxkc0FuZFZhbHVlc1sgZmllbGROYW1lIF0gPSBtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3QoXG5cdFx0XHRcdGVudGl0eUluc3RhbmNlWyBmaWVsZE5hbWUgXSxcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gZmllbGRzQW5kVmFsdWVzO1xuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRzQW5kVmFsdWVzO1xuXHR9LCB7fSApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcmltYXJ5IGtleShzKSBhbmQgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gZW50aXR5SW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZW50aXR5SW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gYW4gYXJyYXkgb2YgdmFsdWVzIGZvciB0aGUgcHJpbWFyeSBrZXlzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJpbWFyeUtleVZhbHVlcyA9ICggZW50aXR5SW5zdGFuY2UgKSA9PiBwaWNrKFxuXHRlbnRpdHlJbnN0YW5jZSxcblx0ZW50aXR5SW5zdGFuY2UucHJpbWFyeUtleXNcbik7XG5cbi8qKlxuICogVGhpcyByZXR1cm5zIGEgcGxhaW4gb2JqZWN0IG9mIGVudGl0eSBmaWVsZHMgZnJvbSB0aGUgc2NoZW1hIGZvciB0aGUgZW50aXR5XG4gKiBpbnN0YW5jZSAoc2NoZW1hIGZvciBmaWVsZHMgYXJlIGV4dHJhY3RlZCBhcyB3ZWxsKS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZW50aXR5SW5zdGFuY2VcbiAqIEByZXR1cm4ge09iamVjdH0gQSBwbGFpbiBvYmplY3Qgd2l0aCBmaWVsZHMgYW5kIHNjaGVtYSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiBlbnRpdHkgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVudGl0eUZpZWxkc0Zyb21TY2hlbWEgPSAoIGVudGl0eUluc3RhbmNlICkgPT4gcGlja0J5KFxuXHRlbnRpdHlJbnN0YW5jZS5zY2hlbWEsXG5cdCggZmllbGRWYWx1ZSwgZmllbGROYW1lICkgPT4gaXNFbnRpdHlGaWVsZChcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZW50aXR5SW5zdGFuY2Uuc2NoZW1hXG5cdClcbik7XG5cbi8qKlxuICogVGhpcyByZXR1cm5zIGEgcGxhaW4gb2JqZWN0IG9mIGV4dHJhY3RlZCBwcmltYXJ5S2V5IGZpZWxkcyBmcm9tIHRoZSBzY2hlbWFcbiAqIGZvciB0aGUgZW50aXR5IGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbnRpdHlJbnN0YW5jZVxuICogQHJldHVybiB7T2JqZWN0fSBBIHBsYWluIG9iamVjdCB3aXRoIGZpZWxkcyBhbmQgc2NoZW1hIHByb3BlcnRpZXMgdGhhdFxuICogXHRcdFx0XHRcdHJlcHJlc2VudCBwcmltYXJ5IGtleSBmaWVsZHMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmltYXJ5S2V5RmllbGRzRnJvbVNjaGVtYSA9ICggZW50aXR5SW5zdGFuY2UgKSA9PiBwaWNrQnkoXG5cdGVudGl0eUluc3RhbmNlLnNjaGVtYSxcblx0KCBmaWVsZFZhbHVlLCBmaWVsZE5hbWUgKSA9PiBpc1ByaW1hcnlLZXlGaWVsZChcblx0XHRmaWVsZE5hbWUsXG5cdFx0ZW50aXR5SW5zdGFuY2Uuc2NoZW1hXG5cdClcbik7XG5cbi8qKlxuICogRGVyaXZlcyB0aGUgZGVmYXVsdCB2YWx1ZSB0byB1c2UgZm9yIGEgZ2l2ZW4gdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Kn0gIEEgdmFsdWUgdG8gdXNlIGZvciB0aGUgZ2l2ZW4gdHlwZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlcml2ZURlZmF1bHRWYWx1ZUZvclR5cGUgPSAoIHR5cGUgKSA9PiB7XG5cdGlmICggaXNBcnJheSggdHlwZSApICkge1xuXHRcdHJldHVybiB0eXBlLmluZGV4T2YoICdudWxsJyApID4gLTEgP1xuXHRcdFx0bnVsbCA6XG5cdFx0XHRkZXJpdmVEZWZhdWx0VmFsdWVGb3JUeXBlKCB0eXBlWyAwIF0gKTtcblx0fVxuXHRzd2l0Y2ggKCB0eXBlICkge1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRjYXNlICdpbnRlZ2VyJzpcblx0XHRcdHJldHVybiAwO1xuXHRcdGNhc2UgJ251bGwnOlxuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRjYXNlICdib29sZWFuJzpcblx0XHRjYXNlICdib29sJzpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRjYXNlICdkYXRlLXRpbWUnOlxuXHRcdFx0cmV0dXJuICggbmV3IERhdGUoKSApLnRvSVNPU3RyaW5nKCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIERlcml2ZXMgd2hhdCBgdHlwZWAgYSBmaWVsZCBpcyBmcm9tIHRoZSBzY2hlbWEuXG4gKiBJdCBhY2NvdW50cyBmb3IgY2FzZXMgd2hlcmUgdGhlIFwidHlwZVwiIG9mIGEgZmllbGQgbWlnaHQgYmUgYGRhdGUtdGltZWAgb3JcbiAqIHdoZXJlIHRoZSB0eXBlIGlzIGFuIG9iamVjdCBhbmQgdGh1cyB0aGUgYHR5cGVgIGZvciB0aGUgcHVycG9zZXMgb2YgbW9kZWxcbiAqIGVudGl0aWVzIGlzIGRlZmluZWQgYnkgdGhlIGByYXdgIHByb3BlcnR5IGZvciB0aGUgZmllbGQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7Kn0gIFdoYXQgdHlwZSB0aGUgZmlsZWQgaXMuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVUeXBlRm9yRmllbGQgPSAoIGZpZWxkTmFtZSwgc2NoZW1hICkgPT4ge1xuXHRpZiAoIGlzRGF0ZVRpbWVGaWVsZCggZmllbGROYW1lLCBzY2hlbWEgKSApIHtcblx0XHRyZXR1cm4gJ2RhdGUtdGltZSc7XG5cdH1cblx0aWYgKCBzY2hlbWFbIGZpZWxkTmFtZSBdICYmIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSApIHtcblx0XHRpZiAoIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0ucHJvcGVydGllcyAmJlxuXHRcdFx0XHRoYXNSYXdQcm9wZXJ0eSggc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzIClcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gc2NoZW1hWyBmaWVsZE5hbWUgXS5wcm9wZXJ0aWVzLnJhdy50eXBlID9cblx0XHRcdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnByb3BlcnRpZXMucmF3LnR5cGUgOlxuXHRcdFx0XHRcdG51bGw7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogVGhpcyBkZXJpdmVzIHRoZSB2YWxpZGF0ZSB0eXBlIGZyb20gdGhlIGluY29taW5nIGZpZWxkIGFuZCB2YWx1ZSBhY2NvcmRpbmdcbiAqIHRvIHRoZSBzY2hlbWEgYW5kIGluY29taW5nIHZhbHVlLlxuICpcbiAqIFRoaXMgYWNjb3VudHMgZm9yIHRoZSBmYWN0IHRoYXQgZW50aXRpZXMgbWF5IGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlXG4gKiBmb2xsb3dpbmcgY29udGV4dHM6XG4gKlxuICogMS4gQXV0aGVkIFJFU1QgcmVzcG9uc2UgKHdoaWNoIGNvdWxkIGhhdmUgYm90aCByYXcsIHJlbmRlcmVkIG9yIHByZXR0eVxuICogICAgdmFsdWVzIGluIHRoZSBmaWVsZCB2YWx1ZSkuXG4gKiAyLiBOb24tYXV0aGVkIFJFU1QgcmVzcG9uc2UgKHdoaWNoIHdpbGwgbm90IGhhdmUgYSByYXcgdmFsdWUsIGJ1dCBjb3VsZCBoYXZlXG4gKiAgICBhIHByZXR0eSBvciByZW5kZXJlZCB2YWx1ZSkuICBUaGlzIGlzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGlmIHRoZVxuICogICAgcmVuZGVyZWQgb3IgcHJldHR5IHZhbHVlIGlzIG9mIGEgZGlmZmVyZW50IGRhdGEgdHlwZSB0aGFuIHRoZSByYXcgdmFsdWUuXG4gKiAzLiBOZXcgZW50aXRpZXMgYnVpbHQgY2xpZW50IHNpZGUsIHdoaWNoIHdpbGwgYmUgYXNzdW1lZCB0byBiZSBwcmVwYXJlZFxuICogICAgYWdhaW5zdCB0aGUgXCJyYXdcIiB2YWxpZGF0ZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYVxuICogQHJldHVybiB7U3ltYm9sfSAgVGhlIHZhbGlkYXRlIHR5cGUgZm9yIHRoZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlcml2ZVZhbGlkYXRlVHlwZUZvckZpZWxkID0gKCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIHNjaGVtYSApID0+IHtcblx0aWYgKCBoYXNSYXdQcm9wZXJ0eSggZmllbGRWYWx1ZSApICkge1xuXHRcdHJldHVybiBWQUxJREFURV9UWVBFLlJBVztcblx0fVxuXHRpZiAoIHNjaGVtYVsgZmllbGROYW1lIF0gJiYgc2NoZW1hWyBmaWVsZE5hbWUgXS50eXBlICkge1xuXHRcdGlmIChcblx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdGlzUGxhaW5PYmplY3QoIGZpZWxkVmFsdWUgKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGhhc1JlbmRlcmVkUHJvcGVydHkoIGZpZWxkVmFsdWUgKSA/XG5cdFx0XHRcdFZBTElEQVRFX1RZUEUuUkVOREVSRUQgOlxuXHRcdFx0XHRWQUxJREFURV9UWVBFLlBSRVRUWTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFZBTElEQVRFX1RZUEUuUkFXO1xufTtcblxuLyoqXG4gKiBUaGlzIGdldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgZmllbGQgZnJvbSB0aGUgcHJvdmlkZWQgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEByZXR1cm4geyp9IFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgZmllbGQgZnJvbSB0aGUgc2NoZW1hIG9yIGlmIG5vdFxuICogcHJlc2VudCBpbiB0aGUgc2NoZW1hLCBhIGRlcml2ZWQgZGVmYXVsdCB2YWx1ZSBmcm9tIHRoZSBzY2hlbWEgdHlwZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRWYWx1ZUZvckZpZWxkID0gKCBmaWVsZE5hbWUsIHNjaGVtYSApID0+IHtcblx0aWYgKCBzY2hlbWFbIGZpZWxkTmFtZSBdICkge1xuXHRcdHJldHVybiBzY2hlbWFbIGZpZWxkTmFtZSBdLmRlZmF1bHQgP1xuXHRcdFx0c2NoZW1hWyBmaWVsZE5hbWUgXS5kZWZhdWx0IDpcblx0XHRcdGRlcml2ZURlZmF1bHRWYWx1ZUZvclR5cGUoIHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSApO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlRW50aXR5RmFjdG9yeSB9IGZyb20gJy4vYmFzZS1lbnRpdHknO1xuZXhwb3J0IHsgTU9ERUxfUFJFRklYRVMsIFNBVkVfU1RBVEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNJbnRlZ2VyLFxuXHRpc1N0cmluZyxcblx0aXNQbGFpbk9iamVjdCxcblx0aXNCb29sZWFuLFxuXHRpc051bWJlcixcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHNwcmludGYgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcblxuLyoqXG4gKiBJbnRlcm5hbCBJbXBvcnRzXG4gKi9cbmltcG9ydCB7IGlzRW51bUZpZWxkLCBpc1ByaW1hcnlLZXlGaWVsZCwgaXNWYWx1ZU9iamVjdEZpZWxkIH0gZnJvbSAnLi9ib29sZWFucyc7XG5pbXBvcnQgeyBtYXliZUNvbnZlcnRGcm9tVmFsdWVPYmplY3RXaXRoQXNzZXJ0aW9ucyB9IGZyb20gJy4vZXh0cmFjdG9ycyc7XG5pbXBvcnQgeyBQUklWQVRFX1BST1BFUlRJRVMsIFZBTElEQVRFX1RZUEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBpbmNvbWluZyB2YWx1ZSBmb3IgZ2l2ZW4gdHlwZS4gIFR5cGVzIGFsbG93ZWQgYXJlOlxuICpcbiAqIC0gaW50ZWdlcjogY2hlY2tzIGlmIHZhbHVlIGlzIGFuIGludGVnZXIuXG4gKiAtIG51bWJlcjogY2hlY2tzIGlmIHZhbHVlIGlzIGNsYXNzaWZpZWQgYXMgYSBOdW1iZXIgcHJpbWl0aXZlIG9yIG9iamVjdCAodGhpc1xuICogICBtZWFucyBgSW5maW5pdHlgLCBgLUluZmluaXR5YCwgYW5kIGBOYU5gIGFyZSBjb25zaWRlcmVkIHZhbGlkIGZvciB0aGlzIHR5cGVcbiAqIC0gc3RyaW5nXG4gKiAtIG9iamVjdCAtIHRoaXMgdmFsaWRhdGVzIGFzIGEgXCJwbGFpbk9iamVjdFwiLCB0aGF0IGlzIGFuIG9iamVjdCBjcmVhdGVkIGJ5XG4gKiAgIHRoZSBPYmplY3QgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBbW1Byb3RvdHlwZV1dIG9mIG51bGwuXG4gKiAtIGJvb2xlYW5cbiAqIC0gYm9vbDogKHNhbWUgYXMgYm9vbGVhbiBjaGVjaylcbiAqIC0gbnVsbDogdmFsdWUgbXVzdCBleHBsaWNpdGx5IGJlIGBudWxsYFxuICpcbiAqIE5vdGU6IGlmIHRoZSBwYXNzZWQgaW4gdHlwZSBkb2VzIG5vdCBleGlzdCwgdGhlbiB0aGUgdmFsdWUgaXMgY29uc2lkZXJlZFxuICogaW52YWxpZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheX0gdHlwZSAgVGhlIHR5cGUgb3IgdHlwZXMgdG8gY2hlY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgIFRoZSB2YWx1ZSBiZWluZyB2YWxpZGF0ZWRcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICBUcnVlIG1lYW5zIHRoZSB2YWx1ZSBpcyB2YWxpZCBmb3IgdGhlIGdpdmVuIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVR5cGUgPSAoIHR5cGUsIHZhbHVlICkgPT4ge1xuXHRsZXQgdmFsaWQgPSBmYWxzZTtcblx0Ly8gYWNjb3VudCBmb3IgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGFyZSBhbiBhcnJheSBvZiBhbGxvd2VkIHR5cGVzLlxuXHRpZiAoIGlzQXJyYXkoIHR5cGUgKSApIHtcblx0XHRmb3IgKCBjb25zdCBzaW5nbGVUeXBlIG9mIHR5cGUgKSB7XG5cdFx0XHR2YWxpZCA9IHZhbGlkYXRlVHlwZSggc2luZ2xlVHlwZSwgdmFsdWUgKTtcblx0XHRcdGlmICggdmFsaWQgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyByZXR1cm4gcmlnaHQgYXdheSBiZWNhdXNlIHdlJ3ZlIGRldGVybWluZWQgdGhlIHZhbGlkaXR5IG9mIHRoZSB0eXBlLlxuXHRcdHJldHVybiB2YWxpZDtcblx0fVxuXHRzd2l0Y2ggKCB0eXBlICkge1xuXHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0dmFsaWQgPSBpc0ludGVnZXIoIHZhbHVlICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0dmFsaWQgPSBpc051bWJlciggdmFsdWUgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHR2YWxpZCA9IGlzU3RyaW5nKCB2YWx1ZSApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdHZhbGlkID0gaXNQbGFpbk9iamVjdCggdmFsdWUgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2Jvb2xlYW4nOlxuXHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0dmFsaWQgPSBpc0Jvb2xlYW4oIHZhbHVlICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdudWxsJzpcblx0XHRcdHZhbGlkID0gdmFsdWUgPT09IG51bGw7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gdmFsaWQ7XG59O1xuXG4vKipcbiAqIFRoaXMgdmFsaWRhdGVzIGVudW0gdHlwZSBvZiB2YWx1ZXMuXG4gKlxuICogVGhpcyBtZWFucyB0aGF0IHRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUgcHJvdmlkZWQgYXJyYXkgb2YgZW51bVZhbHVlcyBhc1xuICogd2VsbCBhcyBiZWluZyBvZiB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtBcnJheX0gZW51bVZhbHVlc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn0gIFRydWUgbWVhbnMgdGhpcyB2YWx1ZSBpcyB2YWxpZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRW51bVR5cGUgPSAoIHR5cGUsIGVudW1WYWx1ZXMsIHZhbHVlICkgPT4ge1xuXHRyZXR1cm4gdmFsaWRhdGVUeXBlKCB0eXBlLCB2YWx1ZSApICYmXG5cdFx0aXNBcnJheSggZW51bVZhbHVlcyApICYmXG5cdFx0ZW51bVZhbHVlcy5pbmRleE9mKCB2YWx1ZSApID4gLTE7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGRvZXMgYSBzaGFsbG93IHZhbGlkYXRpb24gZm9yIHRoZSBnaXZlbiB2YWx1ZSBhbmQgZmllbGQuXG4gKlxuICogXCJTaGFsbG93XCIgaGVyZSBtZWFucyB0aGF0IGlmIHRoZSBmaWVsZCBzY2hlbWEgaXMgb2YgdHlwZSAnb2JqZWN0JywgdGhlbiB0aGVcbiAqIHZhbGlkYXRpb24gb25seSB2ZXJpZmllcyB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuICBUaGUgb2JqZWN0IGNvbnRlbnRzXG4gKiBhcmUgbm90IHZhbGlkYXRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkVmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwZWN0VmFsdWVPYmplY3RzICBJZiB0cnVlLCB0aGVuIHRoaXMgZmxhZ3MgdGhlIHZhbGlkYXRvclxuICogdG8gYXNzdW1lIHRoZSB2YWx1ZSBtaWdodCBiZSBhIHZhbHVlIG9iamVjdCBhbmQgYXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgcmF3XG4gKiB2YWx1ZSBmcm9tIHRoYXQgdmFsdWUgb2JqZWN0IGZvciB2YWxpZGF0aW9uIGFnYWluc3QgdGhlIGV4cGVjdGVkIHR5cGUgaW4gdGhlXG4gKiBzY2hlbWEgZm9yIHRoYXQgZmllbGQuXG4gKiBAcmV0dXJuIHtib29sZWFufSAgVHJ1ZSBtZWFucyB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gKiBAdGhyb3dzIFR5cGVFcnJvclxuICogQHRocm93cyBJbnZhbGlkRGF0ZVRpbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2hhbGxvd1ZhbGlkVmFsdWVGb3JGaWVsZCA9IChcblx0ZmllbGROYW1lLFxuXHRmaWVsZFZhbHVlLFxuXHRzY2hlbWEsXG5cdGV4cGVjdFZhbHVlT2JqZWN0cyA9IHRydWVcbikgPT4ge1xuXHQvLyBpZiBmaWVsZCBpcyBhIHByaW1hcnkgS2V5IGZpZWxkIHRoZW4gd2Ugb3ZlcnJpZGUgdGhlIHZhbGlkYXRpb24gc28gaXQgY2FuXG5cdC8vIGJlIGVpdGhlciBzdHJpbmcgb3IgbnVtYmVyXG5cdGlmICggaXNQcmltYXJ5S2V5RmllbGQoIGZpZWxkTmFtZSwgc2NoZW1hICkgKSB7XG5cdFx0cmV0dXJuIHZhbGlkYXRlVHlwZSggJ3N0cmluZycsIGZpZWxkVmFsdWUgKSB8fFxuXHRcdFx0dmFsaWRhdGVUeXBlKCAnbnVtYmVyJywgZmllbGRWYWx1ZSApO1xuXHR9XG5cdGNvbnN0IGlzRW51bSA9IGlzRW51bUZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApO1xuXHRjb25zdCBpc1ZhbHVlT2JqZWN0ID0gaXNWYWx1ZU9iamVjdEZpZWxkKCBmaWVsZE5hbWUsIHNjaGVtYSApO1xuXHRmaWVsZFZhbHVlID0gZXhwZWN0VmFsdWVPYmplY3RzICYmIGlzVmFsdWVPYmplY3QgP1xuXHRcdG1heWJlQ29udmVydEZyb21WYWx1ZU9iamVjdFdpdGhBc3NlcnRpb25zKFxuXHRcdFx0ZmllbGROYW1lLFxuXHRcdFx0ZmllbGRWYWx1ZSxcblx0XHRcdHNjaGVtYVxuXHRcdCkgOlxuXHRcdGZpZWxkVmFsdWU7XG5cdGZpZWxkVmFsdWUgPSBleHBlY3RWYWx1ZU9iamVjdHMgJiZcblx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0udHlwZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdGlzVmFsdWVPYmplY3QgP1xuXHRcdHsgcmF3OiBmaWVsZFZhbHVlIH0gOlxuXHRcdGZpZWxkVmFsdWU7XG5cdGNvbnN0IGlzVmFsaWQgPSBpc0VudW0gP1xuXHRcdHZhbGlkYXRlRW51bVR5cGUoXG5cdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUsXG5cdFx0XHRzY2hlbWFbIGZpZWxkTmFtZSBdLmVudW0sXG5cdFx0XHRmaWVsZFZhbHVlXG5cdFx0KSA6XG5cdFx0dmFsaWRhdGVUeXBlKCBzY2hlbWFbIGZpZWxkTmFtZSBdLnR5cGUsIGZpZWxkVmFsdWUgKTtcblx0Ly8gaWYgaXNFbnVtIGFuZCBub3QgdmFsaWQsIHRoZW4gbGV0cyBiYWlsIHdpdGggZXJyb3Jcblx0aWYgKCBpc0VudW0gJiYgISBpc1ZhbGlkICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRzcHJpbnRmKFxuXHRcdFx0XHQnVGhlIGdpdmVuIFwiJXNcIiBmaWVsZE5hbWUgaXMgbm90IHZhbGlkIGZvciB0aGUgZGVmaW5lZCBzY2hlbWEuICBJdCBtdXN0IGJlIGEgXCIlc1wiIGFuZCBpdCBtdXN0IGJlIG9uZSBvZiBcIiVzXCIuIFRoZSBmaWVsZFZhbHVlIGdpdmVuIHdhcyBcIiVzXCInLFxuXHRcdFx0XHRmaWVsZE5hbWUsXG5cdFx0XHRcdHNjaGVtYVsgZmllbGROYW1lIF0uZW51bS5qb2luKCksXG5cdFx0XHRcdGZpZWxkVmFsdWVcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cdHJldHVybiBpc1ZhbGlkO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoYXQgaXMgc2V0IGFzIHRoZSB2YWxpZGF0ZVR5cGUgZm9yIHRoZSBnaXZlbiBmaWVsZCBhbmQgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB2YWxpZGF0aW9uIHR5cGUgZm9yIHRoZSBnaXZlbiBmaWVsZCBhbmQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVR5cGVGb3JGaWVsZCA9ICggZmllbGROYW1lLCBpbnN0YW5jZSApID0+IHtcblx0cmV0dXJuIGluc3RhbmNlWyBQUklWQVRFX1BST1BFUlRJRVMuVkFMSURBVEVfVFlQRVMgXVsgZmllbGROYW1lIF0gP1xuXHRcdGluc3RhbmNlWyBQUklWQVRFX1BST1BFUlRJRVMuVkFMSURBVEVfVFlQRVMgXVsgZmllbGROYW1lIF0gOlxuXHRcdFZBTElEQVRFX1RZUEUuUkFXO1xufTtcbiIsIi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgTU9ERUxfTkFNRSA9ICdldmVudCc7XG5cbmV4cG9ydCBjb25zdCBFVkVOVF9TVEFUVVNfSUQgPSB7XG5cdFNPTERfT1VUOiAnc29sZF9vdXQnLFxuXHRQT1NUUE9ORUQ6ICdwb3N0cG9uZWQnLFxuXHRDQU5DRUxMRUQ6ICdjYW5jZWxsZWQnLFxufTtcblxuZXhwb3J0IGNvbnN0IEVWRU5UX1NUQVRVU19JRFMgPSB2YWx1ZXMoIEVWRU5UX1NUQVRVU19JRCApO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcblx0R1JFQVRFUl9USEFOLFxuXHRHUkVBVEVSX1RIQU5fQU5EX0VRVUFMLFxuXHRMRVNTX1RIQU5fQU5EX0VRVUFMLFxufSBmcm9tICcuLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IG5vd0RhdGVBbmRUaW1lID0gbW9tZW50KCk7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdFVlRfbmFtZScsXG5cdFx0XHQnRVZUX0lEJyxcblx0XHRcdCdzdGFydF9kYXRlJyxcblx0XHRcdCdlbmRfZGF0ZScsXG5cdFx0XHQndGlja2V0X3N0YXJ0Jyxcblx0XHRcdCd0aWNrZXRfZW5kJyxcblx0XHRdICksXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0XHRzaG93RXhwaXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cdFx0Y2F0ZWdvcnlTbHVnOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdG1vbnRoOiBQcm9wVHlwZXMubW9udGgsXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHRcdHNob3dFeHBpcmVkOiBib29sZWFuXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdzdGFydF9kYXRlJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfREVTQyxcblx0XHRzaG93RXhwaXJlZDogZmFsc2UsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHN0YXJ0X2RhdGU6ICdEYXRldGltZS5EVFRfRVZUX3N0YXJ0Jyxcblx0XHRlbmRfZGF0ZTogJ0RhdGV0aW1lLkRUVF9FVlRfZW5kJyxcblx0XHR0aWNrZXRfc3RhcnQ6ICdEYXRldGltZS5UaWNrZXQuVEtUX3N0YXJ0X2RhdGUnLFxuXHRcdHRpY2tldF9lbmQ6ICdEYXRldGltZS5UaWNrZXQuVEtUX2VuZF9kYXRlJyxcblx0fTtcblx0cmV0dXJuIGlzVW5kZWZpbmVkKCBvcmRlckJ5TWFwWyBvcmRlckJ5IF0gKSA/XG5cdFx0b3JkZXJCeSA6XG5cdFx0b3JkZXJCeU1hcFsgb3JkZXJCeSBdO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgd2hlcmUgY29uZGl0aW9ucyBmb3IgYW4gZXZlbnRzIGVuZHBvaW50IHJlcXVlc3QgdXNpbmcgcHJvdmlkZWRcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd0V4cGlyZWQgIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgZXhwaXJlZCBldmVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2F0ZWdvcnlTbHVnICBSZXR1cm4gZXZlbnRzIGZvciB0aGUgZ2l2ZW4gY2F0ZWdvcnlTbHVnXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9udGggICAgICAgICBSZXR1cm4gZXZlbnRzIGZvciB0aGUgZ2l2ZW4gbW9udGguXG4gKiBcdFx0XHRcdFx0XHRcdFx0IENhbiBiZSBhbnkgbW9udGggZm9ybWF0IHJlY29nbml6ZWQgYnkgbW9tZW50LlxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgVGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdHNob3dFeHBpcmVkID0gZmFsc2UsXG5cdGNhdGVnb3J5U2x1Zyxcblx0bW9udGggPSAnbm9uZScsXG59ICkgPT4ge1xuXHRjb25zdCB3aGVyZSA9IFtdO1xuXG5cdGlmICggISBzaG93RXhwaXJlZCApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RhdGV0aW1lLkRUVF9FVlRfZW5kKipleHBpcmVkXVtdPScgKyBHUkVBVEVSX1RIQU4gK1xuXHRcdFx0JyZ3aGVyZVtEYXRldGltZS5EVFRfRVZUX2VuZCoqZXhwaXJlZF1bXT0nICtcblx0XHRcdG5vd0RhdGVBbmRUaW1lLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHR9XG5cdGlmICggY2F0ZWdvcnlTbHVnICkge1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbVGVybV9SZWxhdGlvbnNoaXAuVGVybV9UYXhvbm9teS5UZXJtLnNsdWddPScgKyBjYXRlZ29yeVNsdWdcblx0XHQpO1xuXHR9XG5cdGlmICggbW9udGggJiYgbW9udGggIT09ICdub25lJyApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW0RhdGV0aW1lLkRUVF9FVlRfc3RhcnRdW109JyArIEdSRUFURVJfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtEYXRldGltZS5EVFRfRVZUX3N0YXJ0XVtdPScgK1xuXHRcdFx0bW9tZW50KCkubW9udGgoIG1vbnRoICkuc3RhcnRPZiggJ21vbnRoJyApLmxvY2FsKCkuZm9ybWF0KClcblx0XHQpO1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbRGF0ZXRpbWUuRFRUX0VWVF9lbmRdW109JyArIExFU1NfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtEYXRldGltZS5EVFRfRVZUX2VuZF1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLmVuZE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL2Fzc2VydGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vZGVmYXVsdC1tb2RlbC1zdGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2VuZHBvaW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2VudGl0eS1mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vcHJpbWFyeS1rZXlzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwtbmFtZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHByaW1hcnlLZXlzIH0gZnJvbSAnLi9wcmltYXJ5LWtleXMuanMnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsga2V5cywgc3RhcnRDYXNlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwbHVyYWxpemUgZnJvbSAncGx1cmFsaXplJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ21lbWl6ZSc7XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBtb2RlbCBuYW1lcyBjdXJyZW50bHkgZXhwb3NlZCBmb3IgUkVTVCBBUEkgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX05BTUVTID0ga2V5cyggcHJpbWFyeUtleXMgKTtcblxuLyoqXG4gKiBVc2VkIHRvIG5vcm1hbGl6ZSB0aGUgcGx1cmFsIGZvcm0gb2YgYSBnaXZlbiBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHJldHVybiB7c3RyaW5nfSAgRW5zdXJlcyB0aGUgZ2l2ZW4gbW9kZWxOYW1lIGlzIGl0cyBwbHVyYWwgZm9ybS5cbiAqL1xuZXhwb3J0IGNvbnN0IHBsdXJhbE1vZGVsTmFtZSA9IG1lbW9pemUoXG5cdCggbW9kZWxOYW1lICkgPT4gcGx1cmFsaXplKCBtb2RlbE5hbWUgKVxuKTtcblxuLyoqXG4gKiBVc2VkIHRvIG5vcm1hbGl6ZSB0aGUgc2luZ3VsYXIgZm9ybSBvZiBhIGdpdmVuIG1vZGVsIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEVuc3VyZXMgdGhlIGdpdmVuIG1vZGVsTmFtZSBpcyBpbiBpdHMgc2luZ3VsYXIgZm9ybS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNpbmd1bGFyTW9kZWxOYW1lID0gbWVtb2l6ZShcblx0KCBtb2RlbE5hbWUgKSA9PiBwbHVyYWxpemUuc2luZ3VsYXIoIG1vZGVsTmFtZSApXG4pO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBjYXBpdGFsaXplZCBzbmFrZWNhc2UgZm9ybWF0IGZvciB0aGUgZ2l2ZW4gbW9kZWwgbmFtZSB0eXBpY2FsbHlcbiAqIHVzZWQgaW4gcXVlcnkgc3RyaW5ncy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIG1vZGVsTmFtZUZvclF1ZXJ5U3RyaW5nKCAnbWVzc2FnZV90ZW1wbGF0ZV9ncm91cCcgKTtcbiAqIC8vIE1lc3NhZ2VfVGVtcGxhdGVfR3JvdXBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBmb3JtYXR0ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgbW9kZWxOYW1lRm9yUXVlcnlTdHJpbmcgPSBtZW1vaXplKFxuXHQoIG1vZGVsTmFtZSApID0+IHtcblx0XHRtb2RlbE5hbWUgPSBzaW5ndWxhck1vZGVsTmFtZSggbW9kZWxOYW1lICk7XG5cdFx0bW9kZWxOYW1lID0gc3RhcnRDYXNlKCBtb2RlbE5hbWUgKTtcblx0XHRyZXR1cm4gbW9kZWxOYW1lLnJlcGxhY2UoIC9cXHMvZywgJ18nICk7XG5cdH1cbik7XG4iLCJpbXBvcnQgKiBhcyBhdHRlbmRlZU1vZGVsIGZyb20gJy4vYXR0ZW5kZWUnO1xuaW1wb3J0ICogYXMgY2hlY2tJbk1vZGVsIGZyb20gJy4vY2hlY2tpbic7XG5pbXBvcnQgKiBhcyBkYXRlVGltZU1vZGVsIGZyb20gJy4vZGF0ZXRpbWUnO1xuaW1wb3J0ICogYXMgZXZlbnRNb2RlbCBmcm9tICcuL2V2ZW50JztcbmltcG9ydCAqIGFzIHByaWNlVHlwZU1vZGVsIGZyb20gJy4vcHJpY2UtdHlwZSc7XG5pbXBvcnQgKiBhcyByZWdpc3RyYXRpb25Nb2RlbCBmcm9tICcuL3JlZ2lzdHJhdGlvbic7XG5pbXBvcnQgKiBhcyBzdGF0dXNNb2RlbCBmcm9tICcuL3N0YXR1cyc7XG5pbXBvcnQgKiBhcyB0aWNrZXRNb2RlbCBmcm9tICcuL3RpY2tldCc7XG5leHBvcnQge1xuXHRhdHRlbmRlZU1vZGVsLFxuXHRjaGVja0luTW9kZWwsXG5cdGRhdGVUaW1lTW9kZWwsXG5cdGV2ZW50TW9kZWwsXG5cdHByaWNlVHlwZU1vZGVsLFxuXHRyZWdpc3RyYXRpb25Nb2RlbCxcblx0c3RhdHVzTW9kZWwsXG5cdHRpY2tldE1vZGVsLFxufTtcbiIsIlxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAncHJpY2VfdHlwZSc7XG5cbmV4cG9ydCBjb25zdCBCQVNFX1BSSUNFX1RZUEVTID0ge1xuXHRCQVNFX1BSSUNFOiAxLFxuXHRESVNDT1VOVDogMixcblx0U1VSQ0hBUkdFOiAzLFxuXHRUQVg6IDQsXG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IGRhdGEgfSBmcm9tICdAZXZlbnRlc3ByZXNzby9lZWpzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vaTE4bic7XG5pbXBvcnQgeyBpc0FycmF5LCByZWR1Y2UsIHRyaW1FbmQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbWVtaXplJztcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7XG5cdGFzc2VydEVudGl0eUhhc0tleSxcblx0YXNzZXJ0SXNBcnJheSxcblx0YXNzZXJ0SXNOb3RFbXB0eSxcblx0YXNzZXJ0SXNNYXAsXG59IGZyb20gJy4vYXNzZXJ0aW9ucyc7XG5cbi8qKlxuICogRXhwb3NlcyBhIG1hcCBvZiBtb2RlbG5hbWUgdG8gcHJpbWFyeSBrZXkgZXhwb3NlZCBieSB0aGUgZWVqcy5kYXRhIGdsb2JhbFxuICogdmlhIHRoZSBzZXJ2ZXIuXG4gKlxuICogQHR5cGUge3t9fVxuICovXG5leHBvcnQgY29uc3QgeyBwcmltYXJ5X2tleXM6IHByaW1hcnlLZXlzID0ge30gfSA9IGRhdGEucGF0aHM7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5cyBmcm9tIHRoZSBwcm92aWRlZCBlbnRpdHkuXG4gKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHVzZWQgZm9yIG1vZGVscyB0aGF0IGhhdmUgY29tYmluZWQgcHJpbWFyeSBrZXlzXG4gKiAoZGVsaXZlcmVkIGFzIGFuIGFycmF5KS5cbiAqXG4gKiBAdHlwZSB7IG1lbW9pemVkIH1cbiAqIEByZXR1cm4geyBzdHJpbmcgfSBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgdmFsdWVzLlxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9XG4gKi9cbmV4cG9ydCBjb25zdCB2YWx1ZXNGb3JDb21iaW5lZFByaW1hcnlLZXlzID0gbWVtb2l6ZSggKCBrZXlzLCBlbnRpdHkgKSA9PiB7XG5cdGFzc2VydElzQXJyYXkoIGtleXMgKTtcblx0Y29uc3QgcHJpbWFyeUtleSA9IHJlZHVjZSgga2V5cywgZnVuY3Rpb24oIHJlc3VsdCwga2V5ICkge1xuXHRcdGFzc2VydEVudGl0eUhhc0tleSgga2V5LCBlbnRpdHkgKTtcblx0XHRyZXR1cm4gZW50aXR5WyByZXN1bHQgXSArICc6JyArIGVudGl0eVsga2V5IF07XG5cdH0gKTtcblx0cmV0dXJuIHRyaW1FbmQoIHByaW1hcnlLZXksICc6JyApO1xufSApO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5IGZyb20gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAqIFRoaXMgZnVuY3Rpb24gd291bGQgYmUgdXNlZCBmb3IgbW9kZWxzIHRoYXQgaGF2ZSBvbmx5IG9uZSBwcmltYXJ5IGtleS5cbiAqXG4gKiBAdHlwZSB7bWVtb2l6ZWR9XG4gKiBAcmV0dXJuIHsgZnVuY3Rpb24gfSBUaGUgdmFsdWUgZm9yIHRoZSBrZXkgaW4gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAqIEB0aHJvd3MgeyBFeGNlcHRpb24gfVxuICovXG5leHBvcnQgY29uc3QgdmFsdWVGb3JQcmltYXJ5S2V5ID0gbWVtb2l6ZSggKCBrZXksIGVudGl0eSApID0+IHtcblx0YXNzZXJ0RW50aXR5SGFzS2V5KCBrZXksIGVudGl0eSApO1xuXHRyZXR1cm4gZW50aXR5WyBrZXkgXTtcbn0gKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcmltYXJ5IGtleSAob3IgY29tYmluZWQgcHJpbWFyeSBrZXlzKSBmcm9tIHRoZSBhdmFpbGFibGUgZGF0YS5cbiAqXG4gKiBAdHlwZSB7bWVtb2l6ZWR9XG4gKiBAcmV0dXJuIHsgZnVuY3Rpb24oc3RyaW5nKSB9XG4gKiBAdGhyb3dzIHsgRXhjZXB0aW9uIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByaW1hcnlLZXkgPSBtZW1vaXplKCAoIG1vZGVsTmFtZSApID0+IHtcblx0YXNzZXJ0RW50aXR5SGFzS2V5KCBtb2RlbE5hbWUsIHByaW1hcnlLZXlzICk7XG5cdHJldHVybiBwcmltYXJ5S2V5c1sgbW9kZWxOYW1lIF07XG59ICk7XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHN0cmluZyBmb3IgZ2V0dGluZyB0aGUgZW50aXRpZXMgYmVsb25naW5nIHRvIGEgbW9kZWwgZm9yIHRoZVxuICogZ2l2ZW4gcHJpbWFyeSBrZXkgdmFsdWVzXG4gKlxuICogQHR5cGUge21lbW9pemVkfVxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJpbWFyeUtleVF1ZXJ5U3RyaW5nID0gbWVtb2l6ZShcblx0KCBtb2RlbE5hbWUsIGtleVZhbHVlcyA9IFtdICkgPT4ge1xuXHRcdGNvbnN0IHByaW1hcnlLZXkgPSBnZXRQcmltYXJ5S2V5KCBtb2RlbE5hbWUgKTtcblx0XHRyZXR1cm4gYFskeyBwcmltYXJ5S2V5IH1dW0lOXT1gICsga2V5VmFsdWVzLmpvaW4oKTtcblx0fVxuKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZXMgZm9yIHRoZSBwcmltYXJ5IGtleXMgZnJvbSB0aGUgcHJvdmlkZWQgZW50aXR5LlxuICpcbiAqIEB0eXBlIHttZW1vaXplZH1cbiAqIEByZXR1cm4geyBmdW5jdGlvbiB9ICBJZiB0aGUgbW9kZWwgaGFzIG9ubHkgb25lIHByaW1hcnkga2V5IHRoZW4gdGhlIHZhbHVlIHdpbGxcbiAqIGJlIGEgc2ltcGxlIHN0cmluZy4gIElmIHRoZSBtb2RlbCBoYXMgY29tYmluZWQgcHJpbWFyeSBrZXlzLCB0aGVuIHRoZSB2YWx1ZVxuICogd2lsbCBiZSBhcyBzdHJpbmcgaW4gdGhlIGZvcm1hdCBgJXMuJXNgIGZvciB0aGUgcHJpbWFyeSBrZXkgdmFsdWVzLlxuICogQHRocm93cyB7IEV4Y2VwdGlvbiB9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbnRpdHlQcmltYXJ5S2V5VmFsdWVzID0gbWVtb2l6ZSggKCBtb2RlbE5hbWUsIGVudGl0eSApID0+IHtcblx0Y29uc3Qga2V5cyA9IGdldFByaW1hcnlLZXkoIG1vZGVsTmFtZSApO1xuXHRyZXR1cm4gaXNBcnJheSgga2V5cyApID9cblx0XHR2YWx1ZXNGb3JDb21iaW5lZFByaW1hcnlLZXlzKCBrZXlzLCBlbnRpdHkgKSA6XG5cdFx0dmFsdWVGb3JQcmltYXJ5S2V5KCBrZXlzLCBlbnRpdHkgKTtcbn0gKTtcblxuLyoqXG4gKiBUaGlzIHJlY2VpdmVzIGFuIGFycmF5IG9mIGVudGl0aWVzIGFuZCByZXR1cm5zIGEgY29sbGVjdGlvbiBvZiB0aG9zZSBzYW1lXG4gKiBlbnRpdGllcyBpbmRleGVkIGJ5IHRoZSBwcmltYXJ5IGtleSB2YWx1ZSBmb3IgZWFjaCBlbnRpdHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHBhcmFtIHtBcnJheX0gZW50aXRpZXNcbiAqIEByZXR1cm4ge01hcH0gIEEgY29sbGVjdGlvbiBpbmRleGVkIGJ5IHRoZSBwcmltYXJ5IGtleSB2YWx1ZXMgZm9yIGVhY2ggZW50aXR5LlxuICogQHRocm93cyB7RXhjZXB0aW9ufVxuICovXG5leHBvcnQgY29uc3Qga2V5RW50aXRpZXNCeVByaW1hcnlLZXlWYWx1ZSA9ICggbW9kZWxOYW1lLCBlbnRpdGllcyA9IFtdICkgPT4ge1xuXHRhc3NlcnRJc05vdEVtcHR5KFxuXHRcdGVudGl0aWVzLFxuXHRcdF9fKFxuXHRcdFx0J1RoZSBwcm92aWRlZCBhcnJheSBvZiBlbnRpdGllcyBtdXN0IG5vdCBiZSBlbXB0eScsXG5cdFx0XHQnZXZlbnRfZXNwcmVzc28nLFxuXHRcdClcblx0KTtcblx0YXNzZXJ0SXNBcnJheSggZW50aXRpZXMgKTtcblxuXHRjb25zdCBtYXBwZWRFbnRpdGllcyA9IG5ldyBNYXAoKTtcblx0ZW50aXRpZXMuZm9yRWFjaCggKCBlbnRpdHkgKSA9PiB7XG5cdFx0bWFwcGVkRW50aXRpZXMuc2V0KFxuXHRcdFx0Z2V0RW50aXR5UHJpbWFyeUtleVZhbHVlcyggbW9kZWxOYW1lLCBlbnRpdHkgKSxcblx0XHRcdGVudGl0eVxuXHRcdCk7XG5cdH0gKTtcblx0cmV0dXJuIG1hcHBlZEVudGl0aWVzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVudGl0eSBpbnN0YW5jZXMgdXNpbmcgdGhlIGdpdmVuIGZhY3RvcnkgYW5kIGFycmF5XG4gKiBvZiBlbnRpdHkgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBmYWN0b3J5XG4gKiBAcGFyYW0ge01hcH0gZW50aXRpZXNcbiAqIEByZXR1cm4ge01hcH0gIEFuIGFycmF5IG9mIGVudGl0eSBpbnN0YW5jZXMgaW5kZXhlZCBieVxuICogdGhlaXIgcHJpbWFyeSBrZXkgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFuZEtleUVudGl0aWVzQnlQcmltYXJ5S2V5VmFsdWUgPSAoXG5cdGZhY3RvcnksXG5cdGVudGl0aWVzLFxuKSA9PiB7XG5cdGFzc2VydElzTWFwKFxuXHRcdGVudGl0aWVzLFxuXHRcdF9fKFxuXHRcdFx0J1RoZSBwcm92aWRlZCBvYmplY3Qgb2YgZW50aXRpZXMgbXVzdCBiZSBhIE1hcCBvYmplY3QnLFxuXHRcdFx0J2V2ZW50X2VzcHJlc3NvJyxcblx0XHQpXG5cdCk7XG5cdGVudGl0aWVzLmZvckVhY2goICggZW50aXR5LCBlbnRpdHlJZCApID0+IHtcblx0XHRlbnRpdGllcy5zZXQoIGVudGl0eUlkLCBmYWN0b3J5LmZyb21FeGlzdGluZyggZW50aXR5ICkgKTtcblx0fSApO1xuXHRyZXR1cm4gZW50aXRpZXM7XG59O1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBJbXBvcnRzXG4gKi9cbmltcG9ydCAqIGFzIHN0YXR1c01vZGVsIGZyb20gJy4uL3N0YXR1cy9jb25zdGFudHMnO1xuXG4vKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAncmVnaXN0cmF0aW9uJztcblxuZXhwb3J0IGNvbnN0IFJFR0lTVFJBVElPTl9TVEFUVVNfSURTID0gdmFsdWVzKFxuXHRzdGF0dXNNb2RlbC5SRUdJU1RSQVRJT05fU1RBVFVTX0lEXG4pO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNVbmRlZmluZWQsIHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcbn0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgKiBhcyBzdGF0dXNNb2RlbCBmcm9tICcuLi9zdGF0dXMvY29uc3RhbnRzJztcblxuLyoqXG4gKiBEZXNjcmliZWQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge3thdHRyaWJ1dGVzOiAqfX1cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5RGF0YVR5cGVzID0ge1xuXHRmb3JFdmVudElkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JBdHRlbmRlZUlkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JUcmFuc2FjdGlvbklkOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRmb3JUaWNrZXRJZDogUHJvcFR5cGVzLm51bWJlcixcblx0Zm9yU3RhdHVzSWQ6IFByb3BUeXBlcy5vbmVPZiggdmFsdWVzKCBzdGF0dXNNb2RlbC5SRUdJU1RSQVRJT05fU1RBVFVTX0lEICkgKSxcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdSRUdfSUQnLFxuXHRcdFx0J1JFR19kYXRlJyxcblx0XHRdICksXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0fSApLFxufTtcblxuZXhwb3J0IGNvbnN0IG9wdGlvbnNFbnRpdHlNYXAgPSB7XG5cdGRlZmF1bHQ6IHtcblx0XHR2YWx1ZTogJ1JFR19JRCcsXG5cdFx0bGFiZWw6ICdSRUdfY29kZScsXG5cdH0sXG59O1xuXG4vKipcbiAqIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge1xuICogXHR7XG4gKiBcdFx0YXR0cmlidXRlczoge1xuICogXHRcdFx0bGltaXQ6IG51bWJlcixcbiAqIFx0XHRcdG9yZGVyQnk6IHN0cmluZyxcbiAqIFx0XHRcdG9yZGVyOiBzdHJpbmcsXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdyZWdfZGF0ZScsXG5cdFx0b3JkZXI6IFFVRVJZX09SREVSX0RFU0MsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYSByZWdpc3RyYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHJlZ19pZDogJ1JFR19JRCcsXG5cdFx0cmVnX2RhdGU6ICdSRUdfZGF0ZScsXG5cdH07XG5cdHJldHVybiBpc1VuZGVmaW5lZCggb3JkZXJCeU1hcFsgb3JkZXJCeSBdICkgP1xuXHRcdG9yZGVyQnkgOlxuXHRcdG9yZGVyQnlNYXBbIG9yZGVyQnkgXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHdoZXJlIGNvbmRpdGlvbnMgZm9yIGFuIHJlZ2lzdHJhdGlvbnMgZW5kcG9pbnQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JFdmVudElkICAgIFx0SUQgb2YgRXZlbnQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3JBdHRlbmRlZUlkICAgIElEIG9mIEF0dGVuZGVlIHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gZm9yVHJhbnNhY3Rpb25JZCBJRCBvZiBUcmFuc2FjdGlvbiB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvclRpY2tldElkIFx0XHRJRCBvZiBUaWNrZXQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JTdGF0dXNJZCBcdFx0SUQgb2YgU3RhdHVzIHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZm9yXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgIFx0VGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7XG5cdGZvckV2ZW50SWQgPSAwLFxuXHRmb3JBdHRlbmRlZUlkID0gMCxcblx0Zm9yVHJhbnNhY3Rpb25JZCA9IDAsXG5cdGZvclRpY2tldElkID0gMCxcblx0Zm9yU3RhdHVzSWQgPSAnJyxcbn0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGZvckV2ZW50SWQgPSBwYXJzZUludCggZm9yRXZlbnRJZCwgMTAgKTtcblx0aWYgKCBmb3JFdmVudElkICE9PSAwICYmICEgaXNOYU4oIGZvckV2ZW50SWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbRVZUX0lEXT0nICsgZm9yRXZlbnRJZCApO1xuXHR9XG5cdGZvckF0dGVuZGVlSWQgPSBwYXJzZUludCggZm9yQXR0ZW5kZWVJZCwgMTAgKTtcblx0aWYgKCBmb3JBdHRlbmRlZUlkICE9PSAwICYmICEgaXNOYU4oIGZvckF0dGVuZGVlSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbQVRUX0lEXT0nICsgZm9yQXR0ZW5kZWVJZCApO1xuXHR9XG5cdGZvclRyYW5zYWN0aW9uSWQgPSBwYXJzZUludCggZm9yVHJhbnNhY3Rpb25JZCwgMTAgKTtcblx0aWYgKCBmb3JUcmFuc2FjdGlvbklkICE9PSAwICYmICEgaXNOYU4oIGZvclRyYW5zYWN0aW9uSWQgKSApIHtcblx0XHR3aGVyZS5wdXNoKCAnd2hlcmVbVFhOX0lEXT0nICsgZm9yVHJhbnNhY3Rpb25JZCApO1xuXHR9XG5cdGZvclRpY2tldElkID0gcGFyc2VJbnQoIGZvclRpY2tldElkLCAxMCApO1xuXHRpZiAoIGZvclRpY2tldElkICE9PSAwICYmICEgaXNOYU4oIGZvclRpY2tldElkICkgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1RLVF9JRF09JyArIGZvclRpY2tldElkICk7XG5cdH1cblx0aWYgKCBmb3JTdGF0dXNJZCAhPT0gJycgJiYgZm9yU3RhdHVzSWQgIT09IG51bGwgKSB7XG5cdFx0d2hlcmUucHVzaCggJ3doZXJlW1NUU19JRF09JyArIGZvclN0YXR1c0lkICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IE1PREVMX05BTUUgPSAnc3RhdHVzJztcbi8vIHR5cGVzXG5leHBvcnQgY29uc3QgU1RBVFVTX1RZUEVfRU1BSUwgPSAnZW1haWwnO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX0VWRU5UID0gJ2V2ZW50JztcbmV4cG9ydCBjb25zdCBTVEFUVVNfVFlQRV9NRVNTQUdFID0gJ21lc3NhZ2UnO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19UWVBFX1BBWU1FTlQgPSAncGF5bWVudCc7XG5leHBvcnQgY29uc3QgU1RBVFVTX1RZUEVfUkVHSVNUUkFUSU9OID0gJ3JlZ2lzdHJhdGlvbic7XG5leHBvcnQgY29uc3QgU1RBVFVTX1RZUEVfVFJBTlNBQ1RJT04gPSAndHJhbnNhY3Rpb24nO1xuLy8gZW1haWxcbmV4cG9ydCBjb25zdCBFTUFJTF9TVEFUVVNfSUQgPSB7XG5cdERSQUZUOiAnRURSJyxcblx0U0VOVDogJ0VTTicsXG5cdEVYUElSRUQ6ICdFWFAnLFxufTtcbi8vIGV2ZW50XG5leHBvcnQgY29uc3QgRVZFTlRfU1RBVFVTX0lEID0ge1xuXHRBQ1RJVkU6ICdBQ1QnLFxuXHRSRUdJU1RSQVRJT05fQ0xPU0VEOiAnQ0xTJyxcblx0REVMRVRFRDogJ0RFTCcsXG5cdERFTklFRDogJ0RFTicsXG5cdERSQUZUOiAnRFJGJyxcblx0Tk9UX0FDVElWRTogJ05BQycsXG5cdE5PVF9PUEVOOiAnTk9QJyxcblx0T05HT0lORzogJ09ORycsXG5cdFJFR0lTVFJBVElPTl9PUEVOOiAnT1BOJyxcblx0UEVORElORzogJ1BORCcsXG5cdFNFQ09OREFSWTogJ1NFQycsXG59O1xuLy8gbWVzc2FnZVxuZXhwb3J0IGNvbnN0IE1FU1NBR0VfU1RBVFVTX0lEID0ge1xuXHRERUJVRzogJ01ETycsXG5cdEVYRUNVVElORzogJ01FWCcsXG5cdEZBSUw6ICdNRkwnLFxuXHRJTkNPTVBMRVRFOiAnTUlDJyxcblx0SURMRTogJ01JRCcsXG5cdFJFU0VORDogJ01SUycsXG5cdFJFVFJZOiAnTVJUJyxcblx0U0VOVDogJ01TTicsXG59O1xuLy8gcGF5bWVudFxuZXhwb3J0IGNvbnN0IFBBWU1FTlRfU1RBVFVTX0lEID0ge1xuXHRBUFBST1ZFRDogJ1BBUCcsXG5cdENBTkNFTExFRDogJ1BDTicsXG5cdERFQ0xJTkVEOiAnUERDJyxcblx0RkFJTEVEOiAnUEZMJyxcblx0UEVORElORzogJ1BQTicsXG59O1xuLy8gcmVnaXN0cmF0aW9uXG5leHBvcnQgY29uc3QgUkVHSVNUUkFUSU9OX1NUQVRVU19JRCA9IHtcblx0QVBQUk9WRUQ6ICdSQVAnLFxuXHRDQU5DRUxMRUQ6ICdSQ04nLFxuXHRERUNMSU5FRDogJ1JEQycsXG5cdElOQ09NUExFVEU6ICdSSUMnLFxuXHROT1RfQVBQUk9WRUQ6ICdSTkEnLFxuXHRQRU5ESU5HX1BBWU1FTlQ6ICdSUFAnLFxuXHRXQUlUX0xJU1Q6ICdSV0wnLFxufTtcbi8vIHRyYW5zYWN0aW9uXG5leHBvcnQgY29uc3QgVFJBTlNBQ1RJT05fU1RBVFVTX0lEID0ge1xuXHRBQkFORE9ORUQ6ICdUQUInLFxuXHRDT01QTEVURTogJ1RDTScsXG5cdEZBSUxFRDogJ1RGTCcsXG5cdElOQ09NUExFVEU6ICdUSU4nLFxuXHRPVkVSUEFJRDogJ1RPUCcsXG59O1xuXG4vLyB0aGUgZm9sbG93aW5nIGFyZSBub3QgaW4gdGhlIHN0YXR1cyBkYXRhYmFzZSBidXQgYXJlIGtlcHQgaGVyZSBmb3Jcbi8vIGNvbnZlbmllbmNlXG5cbi8vIGN1c3RvbSBwb3N0IHR5cGVzXG5leHBvcnQgY29uc3QgQ1BUX1NUQVRVU19JRCA9IHtcblx0UFVCTElTSDogJ3B1Ymxpc2gnLFxuXHRGVVRVUkU6ICdmdXR1cmUnLFxuXHREUkFGVDogJ2RyYWZ0Jyxcblx0UEVORElORzogJ3BlbmRpbmcnLFxuXHRQUklWQVRFOiAncHJpdmF0ZScsXG5cdFRSQVNIRUQ6ICd0cmFzaCcsXG59O1xuXG5leHBvcnQgY29uc3QgVU5LTk9XTl9TVEFUVVNfSUQgPSAndW5rbm93bic7XG5cbmV4cG9ydCBjb25zdCBBTExfU1RBVFVTX0lEUyA9IFtcblx0Li4udmFsdWVzKCBFTUFJTF9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBFVkVOVF9TVEFUVVNfSUQgKSxcblx0Li4udmFsdWVzKCBNRVNTQUdFX1NUQVRVU19JRCApLFxuXHQuLi52YWx1ZXMoIFBBWU1FTlRfU1RBVFVTX0lEICksXG5cdC4uLnZhbHVlcyggUkVHSVNUUkFUSU9OX1NUQVRVU19JRCApLFxuXHQuLi52YWx1ZXMoIFRSQU5TQUNUSU9OX1NUQVRVU19JRCApLFxuXHQuLi52YWx1ZXMoIENQVF9TVEFUVVNfSUQgKSxcblx0VU5LTk9XTl9TVEFUVVNfSUQsXG5dO1xuIiwiLyoqXG4gKiBJbnRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCAqIGFzIHN0YXR1cyBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFVkVOVF9TVEFUVVNfSUQgfSBmcm9tICcuLi9ldmVudCc7XG5pbXBvcnQgeyBUSUNLRVRfU1RBVFVTX0lEIH0gZnJvbSAnLi4vdGlja2V0JztcbmltcG9ydCB7IERBVEVUSU1FX1NUQVRVU19JRCB9IGZyb20gJy4uL2RhdGV0aW1lJztcbmltcG9ydCB7IENIRUNLSU5fU1RBVFVTX0lEIH0gZnJvbSAnLi4vY2hlY2tpbic7XG5cbi8qKlxuICogRXh0ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0BldmVudGVzcHJlc3NvL2kxOG4nO1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAZXZlbnRlc3ByZXNzby92YWx1ZS1vYmplY3RzJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgUmVnaXN0cmF0aW9uIHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfUkVHSVNUUkFUSU9OID0ge1xuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELlBFTkRJTkdfUEFZTUVOVCBdOiBuZXcgTGFiZWwoXG5cdFx0X18oICdwZW5kaW5nIHBheW1lbnQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0X18oICdwZW5kaW5nIHBheW1lbnRzJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlJFR0lTVFJBVElPTl9TVEFUVVNfSUQuQVBQUk9WRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhcHByb3ZlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELk5PVF9BUFBST1ZFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ25vdCBhcHByb3ZlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELkNBTkNFTExFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2NhbmNlbGxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELklOQ09NUExFVEUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdpbmNvbXBsZXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlJFR0lTVFJBVElPTl9TVEFUVVNfSUQuREVDTElORUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdkZWNsaW5lZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5SRUdJU1RSQVRJT05fU1RBVFVTX0lELldBSVRfTElTVCBdOiBuZXcgTGFiZWwoXG5cdFx0X18oICd3YWl0IGxpc3QnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdFx0X18oICd3YWl0IGxpc3RzJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgVHJhbnNhY3Rpb24gc3RhdHVzZXNcbiAqIEB0eXBlIHt7fX1cbiAqXG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfVFJBTlNBQ1RJT04gPSB7XG5cdFsgc3RhdHVzLlRSQU5TQUNUSU9OX1NUQVRVU19JRC5PVkVSUEFJRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ292ZXJwYWlkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlRSQU5TQUNUSU9OX1NUQVRVU19JRC5DT01QTEVURSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2NvbXBsZXRlJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlRSQU5TQUNUSU9OX1NUQVRVU19JRC5JTkNPTVBMRVRFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnaW5jb21wbGV0ZScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5UUkFOU0FDVElPTl9TVEFUVVNfSUQuRkFJTEVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZmFpbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLlRSQU5TQUNUSU9OX1NUQVRVU19JRC5BQkFORE9ORUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhYmFuZG9uZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gbWFwIGZvciBwYXltZW50IHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfUEFZTUVOVCA9IHtcblx0WyBzdGF0dXMuUEFZTUVOVF9TVEFUVVNfSUQuQVBQUk9WRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhY2NlcHRlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5QQVlNRU5UX1NUQVRVU19JRC5QRU5ESU5HIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncGVuZGluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5QQVlNRU5UX1NUQVRVU19JRC5DQU5DRUxMRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdjYW5jZWxsZWQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdCksXG5cdFsgc3RhdHVzLlBBWU1FTlRfU1RBVFVTX0lELkRFQ0xJTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnZGVjbGluZWQnLCAnZXZlbnRfZXNwcmVzc28nICksXG5cdCksXG5cdFsgc3RhdHVzLlBBWU1FTlRfU1RBVFVTX0lELkZBSUxFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2ZhaWxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIE1lc3NhZ2Ugc3RhdHVzZXNcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9NRVNTQUdFID0ge1xuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5TRU5UIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnc2VudCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5JRExFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncXVldWVkIGZvciBzZW5kaW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELkZBSUwgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdmYWlsZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuREVCVUcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdkZWJ1ZyBvbmx5JywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLk1FU1NBR0VfU1RBVFVTX0lELkVYRUNVVElORyBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ21lc3NlbmdlciBpcyBleGVjdXRpbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuUkVTRU5EIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncXVldWVkIGZvciByZXNlbmRpbmcnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuTUVTU0FHRV9TVEFUVVNfSUQuSU5DT01QTEVURSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3F1ZXVlZCBmb3IgZ2VuZXJhdGluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5NRVNTQUdFX1NUQVRVU19JRC5SRVRSWSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2ZhaWxlZCBzZW5kaW5nLCBjYW4gYmUgcmV0cmllZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIENQVCBzdGF0dXNlc1xuICogQHR5cGUge3t9fVxuICovXG5jb25zdCBTVEFUVVNfVFJBTlNMQVRJT05fTUFQX0NQVCA9IHtcblx0WyBzdGF0dXMuQ1BUX1NUQVRVU19JRC5QVUJMSVNIIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncHVibGlzaGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuRlVUVVJFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnc2NoZWR1bGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuRFJBRlQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdkcmFmdCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIHN0YXR1cy5DUFRfU1RBVFVTX0lELlBFTkRJTkcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdwZW5kaW5nJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgc3RhdHVzLkNQVF9TVEFUVVNfSUQuUFJJVkFURSBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3ByaXZhdGUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBzdGF0dXMuQ1BUX1NUQVRVU19JRC5UUkFTSEVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAndHJhc2hlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLy8gdGhlIGZvbGxvd2luZyBzdGF0dXMgbWFwcyBhcmUgZm9yIG1vZGVsIHN0YXR1c2VzIHRoYXQgYXJlIG5vdCBzYXZlZCBpbiB0aGVcbi8vIHN0YXR1cyB0YWJsZSBidXQgZm9yIGNvbnZlbmllbmNlIGhhdmUgdGhlaXIgbGFiZWxzIHJldHJpZXZhYmxlIHZpYSBoZXJlLlxuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgRXZlbnQgU3RhdHVzZXNcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9FVkVOVCA9IHtcblx0WyBFVkVOVF9TVEFUVVNfSUQuU09MRF9PVVQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdzb2xkIG91dCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIEVWRU5UX1NUQVRVU19JRC5QT1NUUE9ORUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdwb3N0cG9uZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBFVkVOVF9TVEFUVVNfSUQuQ0FOQ0VMTEVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnY2FuY2VsbGVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgVGlja2V0IHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfVElDS0VUID0ge1xuXHRbIFRJQ0tFVF9TVEFUVVNfSUQuQVJDSElWRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhcmNoaXZlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIFRJQ0tFVF9TVEFUVVNfSUQuRVhQSVJFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2V4cGlyZWQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBUSUNLRVRfU1RBVFVTX0lELlNPTERfT1VUIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnc29sZCBvdXQnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBUSUNLRVRfU1RBVFVTX0lELlBFTkRJTkcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICd1cGNvbWluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIFRJQ0tFVF9TVEFUVVNfSUQuT05TQUxFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnb24gc2FsZScsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBtYXAgZm9yIGRhdGV0aW1lIHN0YXR1c2VzXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfREFURVRJTUUgPSB7XG5cdFsgREFURVRJTUVfU1RBVFVTX0lELkNBTkNFTExFRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ2NhbmNlbGxlZCcsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5TT0xEX09VVCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3NvbGQgb3V0JywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgREFURVRJTUVfU1RBVFVTX0lELkVYUElSRUQgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdleHBpcmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgREFURVRJTUVfU1RBVFVTX0lELklOQUNUSVZFIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAnaW5hY3RpdmUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBEQVRFVElNRV9TVEFUVVNfSUQuVVBDT01JTkcgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICd1cGNvbWluZycsICdldmVudF9lc3ByZXNzbycgKVxuXHQpLFxuXHRbIERBVEVUSU1FX1NUQVRVU19JRC5BQ1RJVkUgXTogTGFiZWwuZnJvbVNhbWVTaW5nbGVBbmRQbHVyYWwoXG5cdFx0X18oICdhY3RpdmUnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBEQVRFVElNRV9TVEFUVVNfSUQuUE9TVFBPTkVEIF06IExhYmVsLmZyb21TYW1lU2luZ2xlQW5kUGx1cmFsKFxuXHRcdF9fKCAncG9zdHBvbmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIG1hcCBmb3IgY2hlY2tpbiBzdGF0dXNlc1xuICpcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DSEVDS0lOID0ge1xuXHRbIENIRUNLSU5fU1RBVFVTX0lELlNUQVRVU19DSEVDS0VEX0lOIF06IG5ldyBMYWJlbChcblx0XHRfXyggJ2NoZWNrLWluJywgJ2V2ZW50X2VzcHJlc3NvJyApLFxuXHRcdF9fKCAnY2hlY2staW5zJywgJ2V2ZW50X2VzcHJlc3NvJyApXG5cdCksXG5cdFsgQ0hFQ0tJTl9TVEFUVVNfSUQuU1RBVFVTX0NIRUNLRURfT1VUIF06IG5ldyBMYWJlbChcblx0XHRfXyggJ2NoZWNrLW91dCcsICdldmVudF9lc3ByZXNzbycgKSxcblx0XHRfXyggJ2NoZWNrLW91dHMnLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcblx0WyBDSEVDS0lOX1NUQVRVU19JRC5TVEFUVVNfQ0hFQ0tFRF9ORVZFUiBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ25ldmVyIGNoZWNrZWQgaW4nLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogQ29tYmluZWQgdHJhbnNsYXRpb24gbWFwIGZvciBhbGwgc3RhdHVzZXMuXG4gKiBAdHlwZSB7e319XG4gKi9cbmNvbnN0IFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMID0ge1xuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX1JFR0lTVFJBVElPTixcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9UUkFOU0FDVElPTixcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9QQVlNRU5ULFxuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX01FU1NBR0UsXG5cdC4uLlNUQVRVU19UUkFOU0xBVElPTl9NQVBfQ1BULFxuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX0VWRU5ULFxuXHQuLi5TVEFUVVNfVFJBTlNMQVRJT05fTUFQX1RJQ0tFVCxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9EQVRFVElNRSxcblx0Li4uU1RBVFVTX1RSQU5TTEFUSU9OX01BUF9DSEVDS0lOLFxuXHRbIHN0YXR1cy5VTktOT1dOX1NUQVRVU19JRCBdOiBMYWJlbC5mcm9tU2FtZVNpbmdsZUFuZFBsdXJhbChcblx0XHRfXyggJ3Vua25vd24nLCAnZXZlbnRfZXNwcmVzc28nIClcblx0KSxcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJldHR5IHN0YXR1cyBsYWJlbCBzdHJpbmcgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1c0NvZGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2luZ3VsYXIgIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSBzaW5ndWxhciBvciBwbHVyYWwgbGFiZWxcbiAqIHZhbHVlXG4gKiBAcGFyYW0geyhzZW50ZW5jZXxsb3dlcnx1cHBlcil9IHNjaGVtYVxuICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtYXBwZWQgcHJldHR5IGxhYmVsIGZvciB0aGUgZ2l2ZW4gc3RhdHVzIGNvZGUgb3JcbiAqIGEgZm9ybWF0dGVkICd1bmtvd24nIHN0cmluZyBpZiB0aGVyZSBpcyBubyBtYXBwZWQgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgcHJldHR5U3RhdHVzID0gKFxuXHRzdGF0dXNDb2RlLFxuXHRzaW5ndWxhciA9IHRydWUsXG5cdHNjaGVtYSA9IExhYmVsLkZPUk1BVF9TRU5URU5DRV9DQVNFXG4pID0+IHtcblx0cmV0dXJuIFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMWyBzdGF0dXNDb2RlIF0gP1xuXHRcdFNUQVRVU19UUkFOU0xBVElPTl9NQVBfQUxMWyBzdGF0dXNDb2RlIF0uYXNGb3JtYXR0ZWQoIHNpbmd1bGFyLCBzY2hlbWEgKSA6XG5cdFx0U1RBVFVTX1RSQU5TTEFUSU9OX01BUF9BTExbIHN0YXR1cy5VTktOT1dOX1NUQVRVU19JRCBdLmFzRm9ybWF0dGVkKFxuXHRcdFx0c2luZ3VsYXIsXG5cdFx0XHRzY2hlbWFcblx0XHQpO1xufTtcblxuLyoqXG4gKiBFeHBlY3RzIGFuIGFycmF5IG9mIHN0YXR1cyBjb2RlcyBhbmQgcmV0dXJucyBhbiBvYmplY3QgaW5kZXhlZCBieSBjb2RlcyB3aXRoXG4gKiB2YWx1ZXMgYmVpbmcgdGhlIGZvcm1hdHRlZCBwcmV0dHkgbGFiZWxzIGZvciBlYWNoIGNvZGUgYWNjb3JkaW5nIHRvIHRoZVxuICogcHJvdmlkZWQgYXJndW1lbnRzXG4gKlxuICogQHBhcmFtIHtBcnJheX0gc3RhdHVzQ29kZXNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2luZ3VsYXJcbiAqIEBwYXJhbSB7KHNlbnRlbmNlfGxvd2VyfHVwcGVyKX0gc2NoZW1hXG4gKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCBtYXBwaW5nIHN0YXR1cyBjb2RlIHRvIHByZXR0eSBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZXR0eVN0YXR1c2VzID0gKFxuXHRzdGF0dXNDb2Rlcyxcblx0c2luZ3VsYXIgPSB0cnVlLFxuXHRzY2hlbWEgPSBMYWJlbC5GT1JNQVRfU0VOVEVOQ0VfQ0FTRVxuKSA9PiB7XG5cdGlmICggISBpc0FycmF5KCBzdGF0dXNDb2RlcyApICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoICdFeHBlY3QgaW5jb21pbmcgc3RhdHVzQ29kZXMgYXJndW1lbnQnICtcblx0XHRcdCcgdG8gYmUgYW4gYXJyYXknICk7XG5cdH1cblx0Y29uc3QgbWFwcGVkU3RhdHVzZXMgPSB7fTtcblx0c3RhdHVzQ29kZXMuZm9yRWFjaCggKCBzdGF0dXNDb2RlICkgPT4ge1xuXHRcdG1hcHBlZFN0YXR1c2VzWyBzdGF0dXNDb2RlIF0gPSBwcmV0dHlTdGF0dXMoXG5cdFx0XHRzdGF0dXNDb2RlLFxuXHRcdFx0c2luZ3VsYXIsXG5cdFx0XHRzY2hlbWFcblx0XHQpO1xuXHR9ICk7XG5cdHJldHVybiBtYXBwZWRTdGF0dXNlcztcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycyc7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9BU0MsXG5cdEFMTE9XRURfT1JERVJfVkFMVUVTLFxufSBmcm9tICcuLi9iYXNlJztcblxuLyoqXG4gKiBEZXNjcmliZWQgYXR0cmlidXRlcyBmb3IgdGhpcyBtb2RlbFxuICogQHR5cGUge3thdHRyaWJ1dGVzOiAqfX1cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5RGF0YVR5cGVzID0ge1xuXHRxdWVyeURhdGE6IFByb3BUeXBlcy5zaGFwZSgge1xuXHRcdGxpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdG9yZGVyQnk6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0b3JkZXI6IFByb3BUeXBlcy5vbmVPZiggQUxMT1dFRF9PUkRFUl9WQUxVRVMgKSxcblx0fSApLFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHtcbiAqIFx0e1xuICogXHRcdGF0dHJpYnV0ZXM6IHtcbiAqIFx0XHRcdGxpbWl0OiBudW1iZXIsXG4gKiBcdFx0XHRvcmRlckJ5OiBzdHJpbmcsXG4gKiBcdFx0XHRvcmRlcjogc3RyaW5nLFxuICogICBcdH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdFF1ZXJ5RGF0YSA9IHtcblx0cXVlcnlEYXRhOiB7XG5cdFx0bGltaXQ6IDI1LFxuXHRcdG9yZGVyQnk6ICdzdGF0dXNDb2RlJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfQVNDLFxuXHR9LFxufTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hcCBhbiBvcmRlckJ5IHN0cmluZyB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaW4gYSBSRVNUIHF1ZXJ5IGZyb21cbiAqIHRoZSBjb250ZXh0IG9mIGFuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlckJ5XG4gKlxuICogQHJldHVybiB7IHN0cmluZyB9IFJldHVybnMgYW4gYWN0dWFsIG9yZGVyQnkgc3RyaW5nIGZvciB0aGUgUkVTVCBxdWVyeSBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBhbGlhc1xuICovXG5leHBvcnQgY29uc3QgbWFwT3JkZXJCeSA9ICggb3JkZXJCeSApID0+IHtcblx0Y29uc3Qgb3JkZXJCeU1hcCA9IHtcblx0XHRzdGF0dXNDb2RlOiAnU1RTX2NvZGUnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiBldmVudHMgZW5kcG9pbnQgcmVxdWVzdCB1c2luZyBwcm92aWRlZFxuICogaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c1R5cGUgXHRJRCBmb3IgdHlwZSBvZiBTdGF0dXMgdG8gcmV0cmlldmVcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgVGhlIGFzc2VtYmxlZCB3aGVyZSBjb25kaXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gKCB7IHN0YXR1c1R5cGUgfSApID0+IHtcblx0Y29uc3Qgd2hlcmUgPSBbXTtcblx0aWYgKCBzdGF0dXNUeXBlICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtTVFNfdHlwZV09JyArIHN0YXR1c1R5cGUgKTtcblx0fVxuXHRyZXR1cm4gd2hlcmUuam9pbiggJyYnICk7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIHF1ZXJ5IHN0cmluZyBmb3IgdXNlIGJ5IGEgUkVTVCByZXF1ZXN0IGdpdmVuIGEgc2V0IG9mIHF1ZXJ5RGF0YS5cbiAqIEBwYXJhbSB7IE9iamVjdCB9IHF1ZXJ5RGF0YVxuICogQHJldHVybiB7IHN0cmluZyB9ICBSZXR1cm5zIHRoZSBxdWVyeSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVN0cmluZyA9ICggcXVlcnlEYXRhID0ge30gKSA9PiB7XG5cdHF1ZXJ5RGF0YSA9IHsgLi4uZGVmYXVsdFF1ZXJ5RGF0YS5xdWVyeURhdGEsIC4uLnF1ZXJ5RGF0YSB9O1xuXHRyZXR1cm4gYmFzZUdldFF1ZXJ5U3RyaW5nKCBxdWVyeURhdGEsIHdoZXJlQ29uZGl0aW9ucywgbWFwT3JkZXJCeSApO1xufTtcblxuIiwiLyoqXG4gKiBFeHRlcm5hbCBpbXBvcnRzXG4gKi9cbmltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBNT0RFTF9OQU1FID0gJ3RpY2tldCc7XG5cbmV4cG9ydCBjb25zdCBUSUNLRVRfU1RBVFVTX0lEID0ge1xuXHRTT0xEX09VVDogJ1RLUycsXG5cdEVYUElSRUQ6ICdUS0UnLFxuXHRBUkNISVZFRDogJ1RLQScsXG5cdFBFTkRJTkc6ICdUS1AnLFxuXHRPTlNBTEU6ICdUS08nLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJQ0tFVF9TVEFUVVNfSURTID0gdmFsdWVzKCBUSUNLRVRfU1RBVFVTX0lEICk7XG4iLCJleHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdHVzLWhlbHBlcic7XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IHtcblx0Z2V0UXVlcnlTdHJpbmcgYXMgYmFzZUdldFF1ZXJ5U3RyaW5nLFxuXHRRVUVSWV9PUkRFUl9ERVNDLFxuXHRBTExPV0VEX09SREVSX1ZBTFVFUyxcblx0R1JFQVRFUl9USEFOLFxuXHRHUkVBVEVSX1RIQU5fQU5EX0VRVUFMLFxuXHRMRVNTX1RIQU5fQU5EX0VRVUFMLFxufSBmcm9tICcuLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IG5vd0RhdGVBbmRUaW1lID0gbW9tZW50KCk7XG5cbi8qKlxuICogRGVzY3JpYmVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbW9kZWxcbiAqIEB0eXBlIHt7YXR0cmlidXRlczogKn19XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeURhdGFUeXBlcyA9IHtcblx0cXVlcnlEYXRhOiBQcm9wVHlwZXMuc2hhcGUoIHtcblx0XHRsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRvcmRlckJ5OiBQcm9wVHlwZXMub25lT2YoIFtcblx0XHRcdCdUS1RfbmFtZScsXG5cdFx0XHQnVEtUX0lEJyxcblx0XHRcdCdzdGFydF9kYXRlJyxcblx0XHRcdCdlbmRfZGF0ZScsXG5cdFx0XSApLFxuXHRcdG9yZGVyOiBQcm9wVHlwZXMub25lT2YoIEFMTE9XRURfT1JERVJfVkFMVUVTICksXG5cdFx0c2hvd0V4cGlyZWQ6IFByb3BUeXBlcy5ib29sLFxuXHRcdG1vbnRoOiBQcm9wVHlwZXMubW9udGgsXG5cdH0gKSxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGlzIG1vZGVsXG4gKiBAdHlwZSB7XG4gKiBcdHtcbiAqIFx0XHRhdHRyaWJ1dGVzOiB7XG4gKiBcdFx0XHRsaW1pdDogbnVtYmVyLFxuICogXHRcdFx0b3JkZXJCeTogc3RyaW5nLFxuICogXHRcdFx0b3JkZXI6IHN0cmluZyxcbiAqICAgXHRcdHNob3dFeHBpcmVkOiBib29sZWFuXG4gKiAgIFx0fVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0UXVlcnlEYXRhID0ge1xuXHRxdWVyeURhdGE6IHtcblx0XHRsaW1pdDogMTAwLFxuXHRcdG9yZGVyQnk6ICdzdGFydF9kYXRlJyxcblx0XHRvcmRlcjogUVVFUllfT1JERVJfREVTQyxcblx0XHRzaG93RXhwaXJlZDogZmFsc2UsXG5cdH0sXG59O1xuXG4vKipcbiAqIFVzZWQgdG8gbWFwIGFuIG9yZGVyQnkgc3RyaW5nIHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpbiBhIFJFU1QgcXVlcnkgZnJvbVxuICogdGhlIGNvbnRleHQgb2YgYSB0aWNrZXQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyQnlcbiAqXG4gKiBAcmV0dXJuIHsgc3RyaW5nIH0gUmV0dXJucyBhbiBhY3R1YWwgb3JkZXJCeSBzdHJpbmcgZm9yIHRoZSBSRVNUIHF1ZXJ5IGZvclxuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGFsaWFzXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBPcmRlckJ5ID0gKCBvcmRlckJ5ICkgPT4ge1xuXHRjb25zdCBvcmRlckJ5TWFwID0ge1xuXHRcdHN0YXJ0X2RhdGU6ICdUS1Rfc3RhcnRfZGF0ZScsXG5cdFx0ZW5kX2RhdGU6ICdUS1RfZW5kX2RhdGUnLFxuXHR9O1xuXHRyZXR1cm4gaXNVbmRlZmluZWQoIG9yZGVyQnlNYXBbIG9yZGVyQnkgXSApID9cblx0XHRvcmRlckJ5IDpcblx0XHRvcmRlckJ5TWFwWyBvcmRlckJ5IF07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB3aGVyZSBjb25kaXRpb25zIGZvciBhbiB0aWNrZXRzIGVuZHBvaW50IHJlcXVlc3QgdXNpbmcgcHJvdmlkZWRcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd0V4cGlyZWQgXHRXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGV4cGlyZWQgdGlja2V0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb250aCAgICAgICAgICAgIFJldHVybiB0aWNrZXRzIGZvciB0aGUgZ2l2ZW4gbW9udGguIENhbiBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0aW4gYW55IG1vbnRoIGZvcm1hdCByZWNvZ25pemVkIGJ5IG1vbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGZvckV2ZW50SWQgICAgXHRJRCBvZiBFdmVudCB0byByZXRyaWV2ZSB0aWNrZXRzIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IGZvckRhdGV0aW1lSWQgICAgSUQgb2YgRGF0ZXRpbWUgdG8gcmV0cmlldmUgdGlja2V0cyBmb3JcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAgXHRUaGUgYXNzZW1ibGVkIHdoZXJlIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCB3aGVyZUNvbmRpdGlvbnMgPSAoIHtcblx0Zm9yRXZlbnRJZCA9IDAsXG5cdGZvckRhdGV0aW1lSWQgPSAwLFxuXHRzaG93RXhwaXJlZCA9IGZhbHNlLFxuXHRtb250aCA9ICdub25lJyxcbn0gKSA9PiB7XG5cdGNvbnN0IHdoZXJlID0gW107XG5cdGlmICggISBzaG93RXhwaXJlZCApIHtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW1RLVF9lbmRfZGF0ZSoqZXhwaXJlZF1bXT0nICsgR1JFQVRFUl9USEFOICtcblx0XHRcdCcmd2hlcmVbVEtUX2VuZF9kYXRlKipleHBpcmVkXVtdPScgK1xuXHRcdFx0bm93RGF0ZUFuZFRpbWUubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0aWYgKCBtb250aCAmJiBtb250aCAhPT0gJ25vbmUnICkge1xuXHRcdHdoZXJlLnB1c2goXG5cdFx0XHQnd2hlcmVbVEtUX3N0YXJ0X2RhdGVdW109JyArIEdSRUFURVJfVEhBTl9BTkRfRVFVQUwgK1xuXHRcdFx0JyZ3aGVyZVtUS1Rfc3RhcnRfZGF0ZV1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLnN0YXJ0T2YoICdtb250aCcgKS5sb2NhbCgpLmZvcm1hdCgpXG5cdFx0KTtcblx0XHR3aGVyZS5wdXNoKFxuXHRcdFx0J3doZXJlW1RLVF9lbmRfZGF0ZV1bXT0nICsgTEVTU19USEFOX0FORF9FUVVBTCArXG5cdFx0XHQnJndoZXJlW1RLVF9lbmRfZGF0ZV1bXT0nICtcblx0XHRcdG1vbWVudCgpLm1vbnRoKCBtb250aCApLmVuZE9mKCAnbW9udGgnICkubG9jYWwoKS5mb3JtYXQoKVxuXHRcdCk7XG5cdH1cblx0Zm9yRXZlbnRJZCA9IHBhcnNlSW50KCBmb3JFdmVudElkLCAxMCApO1xuXHRpZiAoIGZvckV2ZW50SWQgIT09IDAgJiYgISBpc05hTiggZm9yRXZlbnRJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtEYXRldGltZS5FdmVudC5FVlRfSURdPScgKyBmb3JFdmVudElkICk7XG5cdH1cblx0Zm9yRGF0ZXRpbWVJZCA9IHBhcnNlSW50KCBmb3JEYXRldGltZUlkLCAxMCApO1xuXHRpZiAoIGZvckRhdGV0aW1lSWQgIT09IDAgJiYgISBpc05hTiggZm9yRGF0ZXRpbWVJZCApICkge1xuXHRcdHdoZXJlLnB1c2goICd3aGVyZVtEYXRldGltZS5EVFRfSURdPScgKyBmb3JEYXRldGltZUlkICk7XG5cdH1cblx0cmV0dXJuIHdoZXJlLmpvaW4oICcmJyApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBxdWVyeSBzdHJpbmcgZm9yIHVzZSBieSBhIFJFU1QgcmVxdWVzdCBnaXZlbiBhIHNldCBvZiBxdWVyeURhdGEuXG4gKiBAcGFyYW0geyBPYmplY3QgfSBxdWVyeURhdGFcbiAqIEByZXR1cm4geyBzdHJpbmcgfSAgUmV0dXJucyB0aGUgcXVlcnkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlTdHJpbmcgPSAoIHF1ZXJ5RGF0YSA9IHt9ICkgPT4ge1xuXHRxdWVyeURhdGEgPSB7IC4uLmRlZmF1bHRRdWVyeURhdGEucXVlcnlEYXRhLCAuLi5xdWVyeURhdGEgfTtcblx0cmV0dXJuIGJhc2VHZXRRdWVyeVN0cmluZyggcXVlcnlEYXRhLCB3aGVyZUNvbmRpdGlvbnMsIG1hcE9yZGVyQnkgKTtcbn07XG4iLCIvKipcbiAqIEV4dGVybmFsIGltcG9ydHNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAZXZlbnRlc3ByZXNzby9pMThuJztcbmltcG9ydCB7IGlzTW9kZWxFbnRpdHlPZk1vZGVsIH0gZnJvbSAnQGV2ZW50ZXNwcmVzc28vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wb3J0c1xuICovXG5pbXBvcnQgeyBNT0RFTF9OQU1FLCBUSUNLRVRfU1RBVFVTX0lEIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn1cbiAqL1xuY29uc3QgYXNzZXJ0VGlja2V0RW50aXR5ID0gKCBUaWNrZXRFbnRpdHkgKSA9PiB7XG5cdGlmICggISBpc01vZGVsRW50aXR5T2ZNb2RlbCggVGlja2V0RW50aXR5LCBNT0RFTF9OQU1FICkgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdCdUaGUgcHJvdmlkZWQgZW50aXR5IGlzIG5vdCBhIHRpY2tldCBpbnN0YW5jZSdcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUFyY2hpdmVkIGlmIHRydWUgd2lsbCBub3QgZmlsdGVyIG91dCB0cmFzaGVkIGVudGl0aWVzXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGV2ZW50IGRhdGUgaXMgdmFsaWQgZW50aXR5IG9yIGFyY2hpdmVcbiAqL1xuY29uc3QgaXNWYWxpZEVudGl0eU9yQXJjaGl2ZSA9ICggVGlja2V0RW50aXR5LCBpbmNsdWRlQXJjaGl2ZWQgKSA9PiB7XG5cdHJldHVybiAoIGluY2x1ZGVBcmNoaXZlZCAmJiBhc3NlcnRUaWNrZXRFbnRpdHkoIFRpY2tldEVudGl0eSApICkgfHxcbiAgICAgICAgKCAhIGluY2x1ZGVBcmNoaXZlZCAmJiAhIGlzQXJjaGl2ZWQoIFRpY2tldEVudGl0eSApICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUFyY2hpdmVkIGlmIHRydWUgd2lsbCBub3QgZmlsdGVyIG91dCBhcmNoaXZlZCBlbnRpdGllc1xuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aWNrZXQgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgcHVyY2hhc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzT25TYWxlID0gKCBUaWNrZXRFbnRpdHksIGluY2x1ZGVBcmNoaXZlZCA9IGZhbHNlICkgPT4ge1xuXHRyZXR1cm4gaXNWYWxpZEVudGl0eU9yQXJjaGl2ZSggVGlja2V0RW50aXR5LCBpbmNsdWRlQXJjaGl2ZWQgKSAmJlxuXHRUaWNrZXRFbnRpdHkuc3RhcnREYXRlLmRpZmZOb3coKSA8IDAgJiZcblx0VGlja2V0RW50aXR5LmVuZERhdGUuZGlmZk5vdygpID4gMDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlQXJjaGl2ZWQgaWYgdHJ1ZSB3aWxsIG5vdCBmaWx0ZXIgb3V0IGFyY2hpdmVkIGVudGl0aWVzXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRpY2tldCBjYW4gbm8gbG9uZ2VyIGJlIHB1cmNoYXNlZFxuICovXG5leHBvcnQgY29uc3QgaXNFeHBpcmVkID0gKCBUaWNrZXRFbnRpdHksIGluY2x1ZGVBcmNoaXZlZCA9IGZhbHNlICkgPT4ge1xuXHRyZXR1cm4gaXNWYWxpZEVudGl0eU9yQXJjaGl2ZSggVGlja2V0RW50aXR5LCBpbmNsdWRlQXJjaGl2ZWQgKSAmJlxuXHRUaWNrZXRFbnRpdHkuZW5kRGF0ZS5kaWZmTm93KCkgPCAwO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVBcmNoaXZlZCBpZiB0cnVlIHdpbGwgbm90IGZpbHRlciBvdXQgYXJjaGl2ZWQgZW50aXRpZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGlja2V0cyBzb2xkIG1lZXRzIG9yIGV4Y2VlZHMgYXZhaWxhYmxlIHF1YW50aXR5XG4gKi9cbmV4cG9ydCBjb25zdCBpc1NvbGRPdXQgPSAoIFRpY2tldEVudGl0eSwgaW5jbHVkZUFyY2hpdmVkID0gZmFsc2UgKSA9PiB7XG5cdGlmIChcblx0XHQoIGluY2x1ZGVBcmNoaXZlZCAmJiAhIGFzc2VydFRpY2tldEVudGl0eSggVGlja2V0RW50aXR5ICkgKSB8fFxuXHRcdCggISBpbmNsdWRlQXJjaGl2ZWQgJiYgaXNBcmNoaXZlZCggVGlja2V0RW50aXR5ICkgKVxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Y29uc3QgcXR5ID0gVGlja2V0RW50aXR5LnF0eTtcblx0cmV0dXJuICggcXR5ICE9PSBudWxsICYmIHF0eSAhPT0gJ0lORicgJiYgcXR5ICE9PSBJbmZpbml0eSAmJiBxdHkgIT09IC0xICkgJiZcblx0XHRUaWNrZXRFbnRpdHkuc29sZCA+PSBxdHk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUFyY2hpdmVkIGlmIHRydWUgd2lsbCBub3QgZmlsdGVyIG91dCBhcmNoaXZlZCBlbnRpdGllc1xuICogQHJldHVybiB7Ym9vbGVhbn0gXHR0cnVlIGlmIHRpY2tldCBpcyBub3QgeWV0IGF2YWlsYWJsZSBmb3IgcHVyY2hhc2UsXG4gKiBcdFx0XHRcdFx0XHRidXQgd2lsbCBiZSBhdCBzb21lIGRhdGUgaW4gdGhlIGZ1dHVyZVxuICovXG5leHBvcnQgY29uc3QgaXNQZW5kaW5nID0gKCBUaWNrZXRFbnRpdHksIGluY2x1ZGVBcmNoaXZlZCA9IGZhbHNlICkgPT4ge1xuXHRyZXR1cm4gaXNWYWxpZEVudGl0eU9yQXJjaGl2ZSggVGlja2V0RW50aXR5LCBpbmNsdWRlQXJjaGl2ZWQgKSAmJlxuXHRUaWNrZXRFbnRpdHkuc3RhcnREYXRlLmRpZmZOb3coKSA+IDA7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFRpY2tldEVudGl0eSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGlja2V0IGlzIGFyY2hpdmVkXG4gKi9cbmV4cG9ydCBjb25zdCBpc0FyY2hpdmVkID0gKCBUaWNrZXRFbnRpdHkgKSA9PiB7XG5cdGFzc2VydFRpY2tldEVudGl0eSggVGlja2V0RW50aXR5ICk7XG5cdHJldHVybiBUaWNrZXRFbnRpdHkuZGVsZXRlZDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSBzdGF0dXMgSURcbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXR1cyA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRpZiAoIGlzQXJjaGl2ZWQoIFRpY2tldEVudGl0eSApICkge1xuXHRcdHJldHVybiBUSUNLRVRfU1RBVFVTX0lELkFSQ0hJVkVEO1xuXHR9XG5cdGlmICggaXNTb2xkT3V0KCBUaWNrZXRFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gVElDS0VUX1NUQVRVU19JRC5TT0xEX09VVDtcblx0fVxuXHRpZiAoIGlzRXhwaXJlZCggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIFRJQ0tFVF9TVEFUVVNfSUQuRVhQSVJFRDtcblx0fVxuXHRpZiAoIGlzUGVuZGluZyggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0cmV0dXJuIFRJQ0tFVF9TVEFUVVNfSUQuUEVORElORztcblx0fVxuXHRpZiAoIGlzT25TYWxlKCBUaWNrZXRFbnRpdHkgKSApIHtcblx0XHRyZXR1cm4gVElDS0VUX1NUQVRVU19JRC5PTlNBTEU7XG5cdH1cblx0cmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBUaWNrZXRFbnRpdHkgbW9kZWwgb2JqZWN0XG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRpY2tldCBzdGF0dXNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRpY2tldFN0YXR1c1RleHRMYWJlbCA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRsZXQgdGlja2V0U3RhdHVzID0gJyc7XG5cdHN3aXRjaCAoIHN0YXR1cyggVGlja2V0RW50aXR5ICkgKSB7XG5cdFx0Y2FzZSBUSUNLRVRfU1RBVFVTX0lELlNPTERfT1VUIDpcblx0XHRcdHRpY2tldFN0YXR1cyA9IF9fKCAnc29sZCBvdXQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRJQ0tFVF9TVEFUVVNfSUQuRVhQSVJFRCA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ2V4cGlyZWQnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRJQ0tFVF9TVEFUVVNfSUQuUEVORElORyA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ3BlbmRpbmcnLCAnZXZlbnRfZXNwcmVzc28nICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRJQ0tFVF9TVEFUVVNfSUQuT05TQUxFIDpcblx0XHRcdHRpY2tldFN0YXR1cyA9IF9fKCAnb24gc2FsZScsICdldmVudF9lc3ByZXNzbycgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVElDS0VUX1NUQVRVU19JRC5BUkNISVZFRCA6XG5cdFx0XHR0aWNrZXRTdGF0dXMgPSBfXyggJ2FyY2hpdmVkJywgJ2V2ZW50X2VzcHJlc3NvJyApO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIHRpY2tldFN0YXR1cztcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gVGlja2V0RW50aXR5IG1vZGVsIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSAgICBDU1MgY2xhc3MgZm9yIHRoZSBiYWNrZ3JvdW5kIGNvbG9yXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCYWNrZ3JvdW5kQ29sb3JDbGFzcyA9ICggVGlja2V0RW50aXR5ICkgPT4ge1xuXHRyZXR1cm4gYGVlLXN0YXR1cy1iYWNrZ3JvdW5kLWNvbG9yLSR7IHN0YXR1cyggVGlja2V0RW50aXR5ICkgfWA7XG59O1xuIiwiZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycjJbaV0gPSBhcnJbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXM7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXIpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZDsiLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiLi9kZWZpbmVQcm9wZXJ0eVwiKTtcblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICB2YXIgb3duS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG93bktleXMgPSBvd25LZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSkuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgb3duS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RTcHJlYWQ7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi4vaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIik7XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm47IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2Y7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkXCIpO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5OyIsImZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mMihvYmopOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZjIoU3ltYm9sLml0ZXJhdG9yKSA9PT0gXCJzeW1ib2xcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gX3R5cGVvZjIob2JqKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogX3R5cGVvZjIob2JqKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mOyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVtaXplKCBmbiwgb3B0aW9ucyApIHtcblx0dmFyIHNpemUgPSAwLFxuXHRcdG1heFNpemUsIGhlYWQsIHRhaWw7XG5cblx0aWYgKCBvcHRpb25zICYmIG9wdGlvbnMubWF4U2l6ZSApIHtcblx0XHRtYXhTaXplID0gb3B0aW9ucy5tYXhTaXplO1xuXHR9XG5cblx0ZnVuY3Rpb24gbWVtb2l6ZWQoIC8qIC4uLmFyZ3MgKi8gKSB7XG5cdFx0dmFyIG5vZGUgPSBoZWFkLFxuXHRcdFx0bGVuID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRcdGFyZ3MsIGk7XG5cblx0XHRzZWFyY2hDYWNoZTogd2hpbGUgKCBub2RlICkge1xuXHRcdFx0Ly8gUGVyZm9ybSBhIHNoYWxsb3cgZXF1YWxpdHkgdGVzdCB0byBjb25maXJtIHRoYXQgd2hldGhlciB0aGUgbm9kZVxuXHRcdFx0Ly8gdW5kZXIgdGVzdCBpcyBhIGNhbmRpZGF0ZSBmb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQuIFR3byBhcnJheXNcblx0XHRcdC8vIGFyZSBzaGFsbG93bHkgZXF1YWwgaWYgdGhlaXIgbGVuZ3RoIG1hdGNoZXMgYW5kIGVhY2ggZW50cnkgaXNcblx0XHRcdC8vIHN0cmljdGx5IGVxdWFsIGJldHdlZW4gdGhlIHR3byBzZXRzLiBBdm9pZCBhYnN0cmFjdGluZyB0byBhXG5cdFx0XHQvLyBmdW5jdGlvbiB3aGljaCBjb3VsZCBpbmN1ciBhbiBhcmd1bWVudHMgbGVha2luZyBkZW9wdGltaXphdGlvbi5cblxuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciBub2RlIGFyZ3VtZW50cyBtYXRjaCBhcmd1bWVudHMgbGVuZ3RoXG5cdFx0XHRpZiAoIG5vZGUuYXJncy5sZW5ndGggIT09IGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdG5vZGUgPSBub2RlLm5leHQ7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIG5vZGUgYXJndW1lbnRzIG1hdGNoIGFyZ3VtZW50cyB2YWx1ZXNcblx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGlmICggbm9kZS5hcmdzWyBpIF0gIT09IGFyZ3VtZW50c1sgaSBdICkge1xuXHRcdFx0XHRcdG5vZGUgPSBub2RlLm5leHQ7XG5cdFx0XHRcdFx0Y29udGludWUgc2VhcmNoQ2FjaGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCB3ZSBjYW4gYXNzdW1lIHdlJ3ZlIGZvdW5kIGEgbWF0Y2hcblxuXHRcdFx0Ly8gU3VyZmFjZSBtYXRjaGVkIG5vZGUgdG8gaGVhZCBpZiBub3QgYWxyZWFkeVxuXHRcdFx0aWYgKCBub2RlICE9PSBoZWFkICkge1xuXHRcdFx0XHQvLyBBcyB0YWlsLCBzaGlmdCB0byBwcmV2aW91cy4gTXVzdCBvbmx5IHNoaWZ0IGlmIG5vdCBhbHNvXG5cdFx0XHRcdC8vIGhlYWQsIHNpbmNlIGlmIGJvdGggaGVhZCBhbmQgdGFpbCwgdGhlcmUgaXMgbm8gcHJldmlvdXMuXG5cdFx0XHRcdGlmICggbm9kZSA9PT0gdGFpbCApIHtcblx0XHRcdFx0XHR0YWlsID0gbm9kZS5wcmV2O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRqdXN0IHNpYmxpbmdzIHRvIHBvaW50IHRvIGVhY2ggb3RoZXIuIElmIG5vZGUgd2FzIHRhaWwsXG5cdFx0XHRcdC8vIHRoaXMgYWxzbyBoYW5kbGVzIG5ldyB0YWlsJ3MgZW1wdHkgYG5leHRgIGFzc2lnbm1lbnQuXG5cdFx0XHRcdG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuXHRcdFx0XHRpZiAoIG5vZGUubmV4dCApIHtcblx0XHRcdFx0XHRub2RlLm5leHQucHJldiA9IG5vZGUucHJldjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG5vZGUubmV4dCA9IGhlYWQ7XG5cdFx0XHRcdG5vZGUucHJldiA9IG51bGw7XG5cdFx0XHRcdGhlYWQucHJldiA9IG5vZGU7XG5cdFx0XHRcdGhlYWQgPSBub2RlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gaW1tZWRpYXRlbHlcblx0XHRcdHJldHVybiBub2RlLnZhbDtcblx0XHR9XG5cblx0XHQvLyBObyBjYWNoZWQgdmFsdWUgZm91bmQuIENvbnRpbnVlIHRvIGluc2VydGlvbiBwaGFzZTpcblxuXHRcdC8vIENyZWF0ZSBhIGNvcHkgb2YgYXJndW1lbnRzIChhdm9pZCBsZWFraW5nIGRlb3B0aW1pemF0aW9uKVxuXHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGxlbiApO1xuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRub2RlID0ge1xuXHRcdFx0YXJnczogYXJncyxcblxuXHRcdFx0Ly8gR2VuZXJhdGUgdGhlIHJlc3VsdCBmcm9tIG9yaWdpbmFsIGZ1bmN0aW9uXG5cdFx0XHR2YWw6IGZuLmFwcGx5KCBudWxsLCBhcmdzIClcblx0XHR9O1xuXG5cdFx0Ly8gRG9uJ3QgbmVlZCB0byBjaGVjayB3aGV0aGVyIG5vZGUgaXMgYWxyZWFkeSBoZWFkLCBzaW5jZSBpdCB3b3VsZFxuXHRcdC8vIGhhdmUgYmVlbiByZXR1cm5lZCBhYm92ZSBhbHJlYWR5IGlmIGl0IHdhc1xuXG5cdFx0Ly8gU2hpZnQgZXhpc3RpbmcgaGVhZCBkb3duIGxpc3Rcblx0XHRpZiAoIGhlYWQgKSB7XG5cdFx0XHRoZWFkLnByZXYgPSBub2RlO1xuXHRcdFx0bm9kZS5uZXh0ID0gaGVhZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSWYgbm8gaGVhZCwgZm9sbG93cyB0aGF0IHRoZXJlJ3Mgbm8gdGFpbCAoYXQgaW5pdGlhbCBvciByZXNldClcblx0XHRcdHRhaWwgPSBub2RlO1xuXHRcdH1cblxuXHRcdC8vIFRyaW0gdGFpbCBpZiB3ZSdyZSByZWFjaGVkIG1heCBzaXplIGFuZCBhcmUgcGVuZGluZyBjYWNoZSBpbnNlcnRpb25cblx0XHRpZiAoIHNpemUgPT09IG1heFNpemUgKSB7XG5cdFx0XHR0YWlsID0gdGFpbC5wcmV2O1xuXHRcdFx0dGFpbC5uZXh0ID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2l6ZSsrO1xuXHRcdH1cblxuXHRcdGhlYWQgPSBub2RlO1xuXG5cdFx0cmV0dXJuIG5vZGUudmFsO1xuXHR9XG5cblx0bWVtb2l6ZWQuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0XHRoZWFkID0gbnVsbDtcblx0XHR0YWlsID0gbnVsbDtcblx0XHRzaXplID0gMDtcblx0fTtcblxuXHRpZiAoIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcgKSB7XG5cdFx0Ly8gQ2FjaGUgaXMgbm90IGV4cG9zZWQgaW4gdGhlIHB1YmxpYyBBUEksIGJ1dCB1c2VkIGluIHRlc3RzIHRvIGVuc3VyZVxuXHRcdC8vIGV4cGVjdGVkIGxpc3QgcHJvZ3Jlc3Npb25cblx0XHRtZW1vaXplZC5nZXRDYWNoZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgaGVhZCwgdGFpbCwgc2l6ZSBdO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gbWVtb2l6ZWQ7XG59O1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uIChyb290LCBwbHVyYWxpemUpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jykge1xuICAgIC8vIE5vZGUuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBwbHVyYWxpemUoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBBTUQsIHJlZ2lzdGVycyBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcGx1cmFsaXplKCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQnJvd3NlciBnbG9iYWwuXG4gICAgcm9vdC5wbHVyYWxpemUgPSBwbHVyYWxpemUoKTtcbiAgfVxufSkodGhpcywgZnVuY3Rpb24gKCkge1xuICAvLyBSdWxlIHN0b3JhZ2UgLSBwbHVyYWxpemUgYW5kIHNpbmd1bGFyaXplIG5lZWQgdG8gYmUgcnVuIHNlcXVlbnRpYWxseSxcbiAgLy8gd2hpbGUgb3RoZXIgcnVsZXMgY2FuIGJlIG9wdGltaXplZCB1c2luZyBhbiBvYmplY3QgZm9yIGluc3RhbnQgbG9va3Vwcy5cbiAgdmFyIHBsdXJhbFJ1bGVzID0gW107XG4gIHZhciBzaW5ndWxhclJ1bGVzID0gW107XG4gIHZhciB1bmNvdW50YWJsZXMgPSB7fTtcbiAgdmFyIGlycmVndWxhclBsdXJhbHMgPSB7fTtcbiAgdmFyIGlycmVndWxhclNpbmdsZXMgPSB7fTtcblxuICAvKipcbiAgICogU2FuaXRpemUgYSBwbHVyYWxpemF0aW9uIHJ1bGUgdG8gYSB1c2FibGUgcmVndWxhciBleHByZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gIHsoUmVnRXhwfHN0cmluZyl9IHJ1bGVcbiAgICogQHJldHVybiB7UmVnRXhwfVxuICAgKi9cbiAgZnVuY3Rpb24gc2FuaXRpemVSdWxlIChydWxlKSB7XG4gICAgaWYgKHR5cGVvZiBydWxlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nICsgcnVsZSArICckJywgJ2knKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXNzIGluIGEgd29yZCB0b2tlbiB0byBwcm9kdWNlIGEgZnVuY3Rpb24gdGhhdCBjYW4gcmVwbGljYXRlIHRoZSBjYXNlIG9uXG4gICAqIGFub3RoZXIgd29yZC5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIHdvcmRcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIHRva2VuXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzdG9yZUNhc2UgKHdvcmQsIHRva2VuKSB7XG4gICAgLy8gVG9rZW5zIGFyZSBhbiBleGFjdCBtYXRjaC5cbiAgICBpZiAod29yZCA9PT0gdG9rZW4pIHJldHVybiB0b2tlbjtcblxuICAgIC8vIExvd2VyIGNhc2VkIHdvcmRzLiBFLmcuIFwiaGVsbG9cIi5cbiAgICBpZiAod29yZCA9PT0gd29yZC50b0xvd2VyQ2FzZSgpKSByZXR1cm4gdG9rZW4udG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIFVwcGVyIGNhc2VkIHdvcmRzLiBFLmcuIFwiV0hJU0tZXCIuXG4gICAgaWYgKHdvcmQgPT09IHdvcmQudG9VcHBlckNhc2UoKSkgcmV0dXJuIHRva2VuLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAvLyBUaXRsZSBjYXNlZCB3b3Jkcy4gRS5nLiBcIlRpdGxlXCIuXG4gICAgaWYgKHdvcmRbMF0gPT09IHdvcmRbMF0udG9VcHBlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIHRva2VuLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdG9rZW4uc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgLy8gTG93ZXIgY2FzZWQgd29yZHMuIEUuZy4gXCJ0ZXN0XCIuXG4gICAgcmV0dXJuIHRva2VuLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJwb2xhdGUgYSByZWdleHAgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0gIHtBcnJheX0gIGFyZ3NcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gaW50ZXJwb2xhdGUgKHN0ciwgYXJncykge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFwkKFxcZHsxLDJ9KS9nLCBmdW5jdGlvbiAobWF0Y2gsIGluZGV4KSB7XG4gICAgICByZXR1cm4gYXJnc1tpbmRleF0gfHwgJyc7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIHdvcmQgdXNpbmcgYSBydWxlLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHdvcmRcbiAgICogQHBhcmFtICB7QXJyYXl9ICBydWxlXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIHJlcGxhY2UgKHdvcmQsIHJ1bGUpIHtcbiAgICByZXR1cm4gd29yZC5yZXBsYWNlKHJ1bGVbMF0sIGZ1bmN0aW9uIChtYXRjaCwgaW5kZXgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0ZShydWxlWzFdLCBhcmd1bWVudHMpO1xuXG4gICAgICBpZiAobWF0Y2ggPT09ICcnKSB7XG4gICAgICAgIHJldHVybiByZXN0b3JlQ2FzZSh3b3JkW2luZGV4IC0gMV0sIHJlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0b3JlQ2FzZShtYXRjaCwgcmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZSBhIHdvcmQgYnkgcGFzc2luZyBpbiB0aGUgd29yZCBhbmQgc2FuaXRpemF0aW9uIHJ1bGVzLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICAgdG9rZW5cbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIHdvcmRcbiAgICogQHBhcmFtICB7QXJyYXl9ICAgIHJ1bGVzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIHNhbml0aXplV29yZCAodG9rZW4sIHdvcmQsIHJ1bGVzKSB7XG4gICAgLy8gRW1wdHkgc3RyaW5nIG9yIGRvZXNuJ3QgbmVlZCBmaXhpbmcuXG4gICAgaWYgKCF0b2tlbi5sZW5ndGggfHwgdW5jb3VudGFibGVzLmhhc093blByb3BlcnR5KHRva2VuKSkge1xuICAgICAgcmV0dXJuIHdvcmQ7XG4gICAgfVxuXG4gICAgdmFyIGxlbiA9IHJ1bGVzLmxlbmd0aDtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgc2FuaXRpemF0aW9uIHJ1bGVzIGFuZCB1c2UgdGhlIGZpcnN0IG9uZSB0byBtYXRjaC5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIHZhciBydWxlID0gcnVsZXNbbGVuXTtcblxuICAgICAgaWYgKHJ1bGVbMF0udGVzdCh3b3JkKSkgcmV0dXJuIHJlcGxhY2Uod29yZCwgcnVsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdvcmQ7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIHdvcmQgd2l0aCB0aGUgdXBkYXRlZCB3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgcmVwbGFjZU1hcFxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAga2VlcE1hcFxuICAgKiBAcGFyYW0gIHtBcnJheX0gICAgcnVsZXNcbiAgICogQHJldHVybiB7RnVuY3Rpb259XG4gICAqL1xuICBmdW5jdGlvbiByZXBsYWNlV29yZCAocmVwbGFjZU1hcCwga2VlcE1hcCwgcnVsZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHdvcmQpIHtcbiAgICAgIC8vIEdldCB0aGUgY29ycmVjdCB0b2tlbiBhbmQgY2FzZSByZXN0b3JhdGlvbiBmdW5jdGlvbnMuXG4gICAgICB2YXIgdG9rZW4gPSB3b3JkLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIC8vIENoZWNrIGFnYWluc3QgdGhlIGtlZXAgb2JqZWN0IG1hcC5cbiAgICAgIGlmIChrZWVwTWFwLmhhc093blByb3BlcnR5KHRva2VuKSkge1xuICAgICAgICByZXR1cm4gcmVzdG9yZUNhc2Uod29yZCwgdG9rZW4pO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBhZ2FpbnN0IHRoZSByZXBsYWNlbWVudCBtYXAgZm9yIGEgZGlyZWN0IHdvcmQgcmVwbGFjZW1lbnQuXG4gICAgICBpZiAocmVwbGFjZU1hcC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVDYXNlKHdvcmQsIHJlcGxhY2VNYXBbdG9rZW5dKTtcbiAgICAgIH1cblxuICAgICAgLy8gUnVuIGFsbCB0aGUgcnVsZXMgYWdhaW5zdCB0aGUgd29yZC5cbiAgICAgIHJldHVybiBzYW5pdGl6ZVdvcmQodG9rZW4sIHdvcmQsIHJ1bGVzKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgd29yZCBpcyBwYXJ0IG9mIHRoZSBtYXAuXG4gICAqL1xuICBmdW5jdGlvbiBjaGVja1dvcmQgKHJlcGxhY2VNYXAsIGtlZXBNYXAsIHJ1bGVzLCBib29sKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh3b3JkKSB7XG4gICAgICB2YXIgdG9rZW4gPSB3b3JkLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChrZWVwTWFwLmhhc093blByb3BlcnR5KHRva2VuKSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAocmVwbGFjZU1hcC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHJldHVybiBmYWxzZTtcblxuICAgICAgcmV0dXJuIHNhbml0aXplV29yZCh0b2tlbiwgdG9rZW4sIHJ1bGVzKSA9PT0gdG9rZW47XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQbHVyYWxpemUgb3Igc2luZ3VsYXJpemUgYSB3b3JkIGJhc2VkIG9uIHRoZSBwYXNzZWQgaW4gY291bnQuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gIHdvcmQgICAgICBUaGUgd29yZCB0byBwbHVyYWxpemVcbiAgICogQHBhcmFtICB7bnVtYmVyfSAgY291bnQgICAgIEhvdyBtYW55IG9mIHRoZSB3b3JkIGV4aXN0XG4gICAqIEBwYXJhbSAge2Jvb2xlYW59IGluY2x1c2l2ZSBXaGV0aGVyIHRvIHByZWZpeCB3aXRoIHRoZSBudW1iZXIgKGUuZy4gMyBkdWNrcylcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gcGx1cmFsaXplICh3b3JkLCBjb3VudCwgaW5jbHVzaXZlKSB7XG4gICAgdmFyIHBsdXJhbGl6ZWQgPSBjb3VudCA9PT0gMVxuICAgICAgPyBwbHVyYWxpemUuc2luZ3VsYXIod29yZCkgOiBwbHVyYWxpemUucGx1cmFsKHdvcmQpO1xuXG4gICAgcmV0dXJuIChpbmNsdXNpdmUgPyBjb3VudCArICcgJyA6ICcnKSArIHBsdXJhbGl6ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUGx1cmFsaXplIGEgd29yZC5cbiAgICpcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgcGx1cmFsaXplLnBsdXJhbCA9IHJlcGxhY2VXb3JkKFxuICAgIGlycmVndWxhclNpbmdsZXMsIGlycmVndWxhclBsdXJhbHMsIHBsdXJhbFJ1bGVzXG4gICk7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgd29yZCBpcyBwbHVyYWwuXG4gICAqXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHBsdXJhbGl6ZS5pc1BsdXJhbCA9IGNoZWNrV29yZChcbiAgICBpcnJlZ3VsYXJTaW5nbGVzLCBpcnJlZ3VsYXJQbHVyYWxzLCBwbHVyYWxSdWxlc1xuICApO1xuXG4gIC8qKlxuICAgKiBTaW5ndWxhcml6ZSBhIHdvcmQuXG4gICAqXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHBsdXJhbGl6ZS5zaW5ndWxhciA9IHJlcGxhY2VXb3JkKFxuICAgIGlycmVndWxhclBsdXJhbHMsIGlycmVndWxhclNpbmdsZXMsIHNpbmd1bGFyUnVsZXNcbiAgKTtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB3b3JkIGlzIHNpbmd1bGFyLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBwbHVyYWxpemUuaXNTaW5ndWxhciA9IGNoZWNrV29yZChcbiAgICBpcnJlZ3VsYXJQbHVyYWxzLCBpcnJlZ3VsYXJTaW5nbGVzLCBzaW5ndWxhclJ1bGVzXG4gICk7XG5cbiAgLyoqXG4gICAqIEFkZCBhIHBsdXJhbGl6YXRpb24gcnVsZSB0byB0aGUgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHJ1bGVcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgIHJlcGxhY2VtZW50XG4gICAqL1xuICBwbHVyYWxpemUuYWRkUGx1cmFsUnVsZSA9IGZ1bmN0aW9uIChydWxlLCByZXBsYWNlbWVudCkge1xuICAgIHBsdXJhbFJ1bGVzLnB1c2goW3Nhbml0aXplUnVsZShydWxlKSwgcmVwbGFjZW1lbnRdKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGEgc2luZ3VsYXJpemF0aW9uIHJ1bGUgdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBydWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICByZXBsYWNlbWVudFxuICAgKi9cbiAgcGx1cmFsaXplLmFkZFNpbmd1bGFyUnVsZSA9IGZ1bmN0aW9uIChydWxlLCByZXBsYWNlbWVudCkge1xuICAgIHNpbmd1bGFyUnVsZXMucHVzaChbc2FuaXRpemVSdWxlKHJ1bGUpLCByZXBsYWNlbWVudF0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gdW5jb3VudGFibGUgd29yZCBydWxlLlxuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gd29yZFxuICAgKi9cbiAgcGx1cmFsaXplLmFkZFVuY291bnRhYmxlUnVsZSA9IGZ1bmN0aW9uICh3b3JkKSB7XG4gICAgaWYgKHR5cGVvZiB3b3JkID09PSAnc3RyaW5nJykge1xuICAgICAgdW5jb3VudGFibGVzW3dvcmQudG9Mb3dlckNhc2UoKV0gPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNldCBzaW5ndWxhciBhbmQgcGx1cmFsIHJlZmVyZW5jZXMgZm9yIHRoZSB3b3JkLlxuICAgIHBsdXJhbGl6ZS5hZGRQbHVyYWxSdWxlKHdvcmQsICckMCcpO1xuICAgIHBsdXJhbGl6ZS5hZGRTaW5ndWxhclJ1bGUod29yZCwgJyQwJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBpcnJlZ3VsYXIgd29yZCBkZWZpbml0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2luZ2xlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwbHVyYWxcbiAgICovXG4gIHBsdXJhbGl6ZS5hZGRJcnJlZ3VsYXJSdWxlID0gZnVuY3Rpb24gKHNpbmdsZSwgcGx1cmFsKSB7XG4gICAgcGx1cmFsID0gcGx1cmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgc2luZ2xlID0gc2luZ2xlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpcnJlZ3VsYXJTaW5nbGVzW3NpbmdsZV0gPSBwbHVyYWw7XG4gICAgaXJyZWd1bGFyUGx1cmFsc1twbHVyYWxdID0gc2luZ2xlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJcnJlZ3VsYXIgcnVsZXMuXG4gICAqL1xuICBbXG4gICAgLy8gUHJvbm91bnMuXG4gICAgWydJJywgJ3dlJ10sXG4gICAgWydtZScsICd1cyddLFxuICAgIFsnaGUnLCAndGhleSddLFxuICAgIFsnc2hlJywgJ3RoZXknXSxcbiAgICBbJ3RoZW0nLCAndGhlbSddLFxuICAgIFsnbXlzZWxmJywgJ291cnNlbHZlcyddLFxuICAgIFsneW91cnNlbGYnLCAneW91cnNlbHZlcyddLFxuICAgIFsnaXRzZWxmJywgJ3RoZW1zZWx2ZXMnXSxcbiAgICBbJ2hlcnNlbGYnLCAndGhlbXNlbHZlcyddLFxuICAgIFsnaGltc2VsZicsICd0aGVtc2VsdmVzJ10sXG4gICAgWyd0aGVtc2VsZicsICd0aGVtc2VsdmVzJ10sXG4gICAgWydpcycsICdhcmUnXSxcbiAgICBbJ3dhcycsICd3ZXJlJ10sXG4gICAgWydoYXMnLCAnaGF2ZSddLFxuICAgIFsndGhpcycsICd0aGVzZSddLFxuICAgIFsndGhhdCcsICd0aG9zZSddLFxuICAgIC8vIFdvcmRzIGVuZGluZyBpbiB3aXRoIGEgY29uc29uYW50IGFuZCBgb2AuXG4gICAgWydlY2hvJywgJ2VjaG9lcyddLFxuICAgIFsnZGluZ28nLCAnZGluZ29lcyddLFxuICAgIFsndm9sY2FubycsICd2b2xjYW5vZXMnXSxcbiAgICBbJ3Rvcm5hZG8nLCAndG9ybmFkb2VzJ10sXG4gICAgWyd0b3JwZWRvJywgJ3RvcnBlZG9lcyddLFxuICAgIC8vIEVuZHMgd2l0aCBgdXNgLlxuICAgIFsnZ2VudXMnLCAnZ2VuZXJhJ10sXG4gICAgWyd2aXNjdXMnLCAndmlzY2VyYSddLFxuICAgIC8vIEVuZHMgd2l0aCBgbWFgLlxuICAgIFsnc3RpZ21hJywgJ3N0aWdtYXRhJ10sXG4gICAgWydzdG9tYScsICdzdG9tYXRhJ10sXG4gICAgWydkb2dtYScsICdkb2dtYXRhJ10sXG4gICAgWydsZW1tYScsICdsZW1tYXRhJ10sXG4gICAgWydzY2hlbWEnLCAnc2NoZW1hdGEnXSxcbiAgICBbJ2FuYXRoZW1hJywgJ2FuYXRoZW1hdGEnXSxcbiAgICAvLyBPdGhlciBpcnJlZ3VsYXIgcnVsZXMuXG4gICAgWydveCcsICdveGVuJ10sXG4gICAgWydheGUnLCAnYXhlcyddLFxuICAgIFsnZGllJywgJ2RpY2UnXSxcbiAgICBbJ3llcycsICd5ZXNlcyddLFxuICAgIFsnZm9vdCcsICdmZWV0J10sXG4gICAgWydlYXZlJywgJ2VhdmVzJ10sXG4gICAgWydnb29zZScsICdnZWVzZSddLFxuICAgIFsndG9vdGgnLCAndGVldGgnXSxcbiAgICBbJ3F1aXonLCAncXVpenplcyddLFxuICAgIFsnaHVtYW4nLCAnaHVtYW5zJ10sXG4gICAgWydwcm9vZicsICdwcm9vZnMnXSxcbiAgICBbJ2NhcnZlJywgJ2NhcnZlcyddLFxuICAgIFsndmFsdmUnLCAndmFsdmVzJ10sXG4gICAgWydsb29leScsICdsb29pZXMnXSxcbiAgICBbJ3RoaWVmJywgJ3RoaWV2ZXMnXSxcbiAgICBbJ2dyb292ZScsICdncm9vdmVzJ10sXG4gICAgWydwaWNrYXhlJywgJ3BpY2theGVzJ10sXG4gICAgWydwYXNzZXJieScsICdwYXNzZXJzYnknXVxuICBdLmZvckVhY2goZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICByZXR1cm4gcGx1cmFsaXplLmFkZElycmVndWxhclJ1bGUocnVsZVswXSwgcnVsZVsxXSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQbHVyYWxpemF0aW9uIHJ1bGVzLlxuICAgKi9cbiAgW1xuICAgIFsvcz8kL2ksICdzJ10sXG4gICAgWy9bXlxcdTAwMDAtXFx1MDA3Rl0kL2ksICckMCddLFxuICAgIFsvKFteYWVpb3VdZXNlKSQvaSwgJyQxJ10sXG4gICAgWy8oYXh8dGVzdClpcyQvaSwgJyQxZXMnXSxcbiAgICBbLyhhbGlhc3xbXmFvdV11c3x0W2xtXWFzfGdhc3xyaXMpJC9pLCAnJDFlcyddLFxuICAgIFsvKGVbbW5ddSlzPyQvaSwgJyQxcyddLFxuICAgIFsvKFtebF1pYXN8W2FlaW91XWxhc3xbZWp6cl1hc3xbaXVdYW0pJC9pLCAnJDEnXSxcbiAgICBbLyhhbHVtbnxzeWxsYWJ8dmlyfHJhZGl8bnVjbGV8ZnVuZ3xjYWN0fHN0aW11bHx0ZXJtaW58YmFjaWxsfGZvY3x1dGVyfGxvY3xzdHJhdCkoPzp1c3xpKSQvaSwgJyQxaSddLFxuICAgIFsvKGFsdW1ufGFsZ3x2ZXJ0ZWJyKSg/OmF8YWUpJC9pLCAnJDFhZSddLFxuICAgIFsvKHNlcmFwaHxjaGVydWIpKD86aW0pPyQvaSwgJyQxaW0nXSxcbiAgICBbLyhoZXJ8YXR8Z3IpbyQvaSwgJyQxb2VzJ10sXG4gICAgWy8oYWdlbmR8YWRkZW5kfG1pbGxlbm5pfGRhdHxleHRyZW18YmFjdGVyaXxkZXNpZGVyYXR8c3RyYXR8Y2FuZGVsYWJyfGVycmF0fG92fHN5bXBvc2l8Y3VycmljdWx8YXV0b21hdHxxdW9yKSg/OmF8dW0pJC9pLCAnJDFhJ10sXG4gICAgWy8oYXBoZWxpfGh5cGVyYmF0fHBlcmloZWxpfGFzeW5kZXR8bm91bWVufHBoZW5vbWVufGNyaXRlcml8b3JnYW58cHJvbGVnb21lbnxoZWRyfGF1dG9tYXQpKD86YXxvbikkL2ksICckMWEnXSxcbiAgICBbL3NpcyQvaSwgJ3NlcyddLFxuICAgIFsvKD86KGtuaXx3aXxsaSlmZXwoYXJ8bHxlYXxlb3xvYXxob28pZikkL2ksICckMSQydmVzJ10sXG4gICAgWy8oW15hZWlvdXldfHF1KXkkL2ksICckMWllcyddLFxuICAgIFsvKFteY2hdW2llb11bbG5dKWV5JC9pLCAnJDFpZXMnXSxcbiAgICBbLyh4fGNofHNzfHNofHp6KSQvaSwgJyQxZXMnXSxcbiAgICBbLyhtYXRyfGNvZHxtdXJ8c2lsfHZlcnR8aW5kfGFwcGVuZCkoPzppeHxleCkkL2ksICckMWljZXMnXSxcbiAgICBbL1xcYigoPzp0aXQpP218bCkoPzppY2V8b3VzZSkkL2ksICckMWljZSddLFxuICAgIFsvKHBlKSg/OnJzb258b3BsZSkkL2ksICckMW9wbGUnXSxcbiAgICBbLyhjaGlsZCkoPzpyZW4pPyQvaSwgJyQxcmVuJ10sXG4gICAgWy9lYXV4JC9pLCAnJDAnXSxcbiAgICBbL21bYWVdbiQvaSwgJ21lbiddLFxuICAgIFsndGhvdScsICd5b3UnXVxuICBdLmZvckVhY2goZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICByZXR1cm4gcGx1cmFsaXplLmFkZFBsdXJhbFJ1bGUocnVsZVswXSwgcnVsZVsxXSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTaW5ndWxhcml6YXRpb24gcnVsZXMuXG4gICAqL1xuICBbXG4gICAgWy9zJC9pLCAnJ10sXG4gICAgWy8oc3MpJC9pLCAnJDEnXSxcbiAgICBbLyh3aXxrbml8KD86YWZ0ZXJ8aGFsZnxoaWdofGxvd3xtaWR8bm9ufG5pZ2h0fFteXFx3XXxeKWxpKXZlcyQvaSwgJyQxZmUnXSxcbiAgICBbLyhhcnwoPzp3b3xbYWVdKWx8W2VvXVthb10pdmVzJC9pLCAnJDFmJ10sXG4gICAgWy9pZXMkL2ksICd5J10sXG4gICAgWy9cXGIoW3BsXXx6b21ifCg/Om5lY2t8Y3Jvc3MpP3R8Y29sbHxmYWVyfGZvb2R8Z2VufGdvb258Z3JvdXB8bGFzc3x0YWxrfGdvYWx8Y3V0KWllcyQvaSwgJyQxaWUnXSxcbiAgICBbL1xcYihtb258c21pbClpZXMkL2ksICckMWV5J10sXG4gICAgWy9cXGIoKD86dGl0KT9tfGwpaWNlJC9pLCAnJDFvdXNlJ10sXG4gICAgWy8oc2VyYXBofGNoZXJ1YilpbSQvaSwgJyQxJ10sXG4gICAgWy8oeHxjaHxzc3xzaHx6enx0dG98Z298Y2hvfGFsaWFzfFteYW91XXVzfHRbbG1dYXN8Z2FzfCg/OmhlcnxhdHxncilvfFthZWlvdV1yaXMpKD86ZXMpPyQvaSwgJyQxJ10sXG4gICAgWy8oYW5hbHl8ZGlhZ25vfHBhcmVudGhlfHByb2dub3xzeW5vcHx0aGV8ZW1waGF8Y3JpfG5lKSg/OnNpc3xzZXMpJC9pLCAnJDFzaXMnXSxcbiAgICBbLyhtb3ZpZXx0d2VsdmV8YWJ1c2V8ZVttbl11KXMkL2ksICckMSddLFxuICAgIFsvKHRlc3QpKD86aXN8ZXMpJC9pLCAnJDFpcyddLFxuICAgIFsvKGFsdW1ufHN5bGxhYnx2aXJ8cmFkaXxudWNsZXxmdW5nfGNhY3R8c3RpbXVsfHRlcm1pbnxiYWNpbGx8Zm9jfHV0ZXJ8bG9jfHN0cmF0KSg/OnVzfGkpJC9pLCAnJDF1cyddLFxuICAgIFsvKGFnZW5kfGFkZGVuZHxtaWxsZW5uaXxkYXR8ZXh0cmVtfGJhY3Rlcml8ZGVzaWRlcmF0fHN0cmF0fGNhbmRlbGFicnxlcnJhdHxvdnxzeW1wb3NpfGN1cnJpY3VsfHF1b3IpYSQvaSwgJyQxdW0nXSxcbiAgICBbLyhhcGhlbGl8aHlwZXJiYXR8cGVyaWhlbGl8YXN5bmRldHxub3VtZW58cGhlbm9tZW58Y3JpdGVyaXxvcmdhbnxwcm9sZWdvbWVufGhlZHJ8YXV0b21hdClhJC9pLCAnJDFvbiddLFxuICAgIFsvKGFsdW1ufGFsZ3x2ZXJ0ZWJyKWFlJC9pLCAnJDFhJ10sXG4gICAgWy8oY29kfG11cnxzaWx8dmVydHxpbmQpaWNlcyQvaSwgJyQxZXgnXSxcbiAgICBbLyhtYXRyfGFwcGVuZClpY2VzJC9pLCAnJDFpeCddLFxuICAgIFsvKHBlKShyc29ufG9wbGUpJC9pLCAnJDFyc29uJ10sXG4gICAgWy8oY2hpbGQpcmVuJC9pLCAnJDEnXSxcbiAgICBbLyhlYXUpeD8kL2ksICckMSddLFxuICAgIFsvbWVuJC9pLCAnbWFuJ11cbiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZS5hZGRTaW5ndWxhclJ1bGUocnVsZVswXSwgcnVsZVsxXSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBVbmNvdW50YWJsZSBydWxlcy5cbiAgICovXG4gIFtcbiAgICAvLyBTaW5ndWxhciB3b3JkcyB3aXRoIG5vIHBsdXJhbHMuXG4gICAgJ2FkdWx0aG9vZCcsXG4gICAgJ2FkdmljZScsXG4gICAgJ2FnZW5kYScsXG4gICAgJ2FpZCcsXG4gICAgJ2FpcmNyYWZ0JyxcbiAgICAnYWxjb2hvbCcsXG4gICAgJ2FtbW8nLFxuICAgICdhbmFseXRpY3MnLFxuICAgICdhbmltZScsXG4gICAgJ2F0aGxldGljcycsXG4gICAgJ2F1ZGlvJyxcbiAgICAnYmlzb24nLFxuICAgICdibG9vZCcsXG4gICAgJ2JyZWFtJyxcbiAgICAnYnVmZmFsbycsXG4gICAgJ2J1dHRlcicsXG4gICAgJ2NhcnAnLFxuICAgICdjYXNoJyxcbiAgICAnY2hhc3NpcycsXG4gICAgJ2NoZXNzJyxcbiAgICAnY2xvdGhpbmcnLFxuICAgICdjb2QnLFxuICAgICdjb21tZXJjZScsXG4gICAgJ2Nvb3BlcmF0aW9uJyxcbiAgICAnY29ycHMnLFxuICAgICdkZWJyaXMnLFxuICAgICdkaWFiZXRlcycsXG4gICAgJ2RpZ2VzdGlvbicsXG4gICAgJ2VsaycsXG4gICAgJ2VuZXJneScsXG4gICAgJ2VxdWlwbWVudCcsXG4gICAgJ2V4Y3JldGlvbicsXG4gICAgJ2V4cGVydGlzZScsXG4gICAgJ2Zpcm13YXJlJyxcbiAgICAnZmxvdW5kZXInLFxuICAgICdmdW4nLFxuICAgICdnYWxsb3dzJyxcbiAgICAnZ2FyYmFnZScsXG4gICAgJ2dyYWZmaXRpJyxcbiAgICAnaGFyZHdhcmUnLFxuICAgICdoZWFkcXVhcnRlcnMnLFxuICAgICdoZWFsdGgnLFxuICAgICdoZXJwZXMnLFxuICAgICdoaWdoamlua3MnLFxuICAgICdob21ld29yaycsXG4gICAgJ2hvdXNld29yaycsXG4gICAgJ2luZm9ybWF0aW9uJyxcbiAgICAnamVhbnMnLFxuICAgICdqdXN0aWNlJyxcbiAgICAna3Vkb3MnLFxuICAgICdsYWJvdXInLFxuICAgICdsaXRlcmF0dXJlJyxcbiAgICAnbWFjaGluZXJ5JyxcbiAgICAnbWFja2VyZWwnLFxuICAgICdtYWlsJyxcbiAgICAnbWVkaWEnLFxuICAgICdtZXdzJyxcbiAgICAnbW9vc2UnLFxuICAgICdtdXNpYycsXG4gICAgJ211ZCcsXG4gICAgJ21hbmdhJyxcbiAgICAnbmV3cycsXG4gICAgJ29ubHknLFxuICAgICdwZXJzb25uZWwnLFxuICAgICdwaWtlJyxcbiAgICAncGxhbmt0b24nLFxuICAgICdwbGllcnMnLFxuICAgICdwb2xpY2UnLFxuICAgICdwb2xsdXRpb24nLFxuICAgICdwcmVtaXNlcycsXG4gICAgJ3JhaW4nLFxuICAgICdyZXNlYXJjaCcsXG4gICAgJ3JpY2UnLFxuICAgICdzYWxtb24nLFxuICAgICdzY2lzc29ycycsXG4gICAgJ3NlcmllcycsXG4gICAgJ3Nld2FnZScsXG4gICAgJ3NoYW1ibGVzJyxcbiAgICAnc2hyaW1wJyxcbiAgICAnc29mdHdhcmUnLFxuICAgICdzcGVjaWVzJyxcbiAgICAnc3RhZmYnLFxuICAgICdzd2luZScsXG4gICAgJ3Rlbm5pcycsXG4gICAgJ3RyYWZmaWMnLFxuICAgICd0cmFuc3BvcnRhdGlvbicsXG4gICAgJ3Ryb3V0JyxcbiAgICAndHVuYScsXG4gICAgJ3dlYWx0aCcsXG4gICAgJ3dlbGZhcmUnLFxuICAgICd3aGl0aW5nJyxcbiAgICAnd2lsZGViZWVzdCcsXG4gICAgJ3dpbGRsaWZlJyxcbiAgICAneW91JyxcbiAgICAvcG9rW2XDqV1tb24kL2ksXG4gICAgLy8gUmVnZXhlcy5cbiAgICAvW15hZWlvdV1lc2UkL2ksIC8vIFwiY2hpbmVzZVwiLCBcImphcGFuZXNlXCJcbiAgICAvZGVlciQvaSwgLy8gXCJkZWVyXCIsIFwicmVpbmRlZXJcIlxuICAgIC9maXNoJC9pLCAvLyBcImZpc2hcIiwgXCJibG93ZmlzaFwiLCBcImFuZ2VsZmlzaFwiXG4gICAgL21lYXNsZXMkL2ksXG4gICAgL29baXVdcyQvaSwgLy8gXCJjYXJuaXZvcm91c1wiXG4gICAgL3BveCQvaSwgLy8gXCJjaGlja3BveFwiLCBcInNtYWxscG94XCJcbiAgICAvc2hlZXAkL2lcbiAgXS5mb3JFYWNoKHBsdXJhbGl6ZS5hZGRVbmNvdW50YWJsZVJ1bGUpO1xuXG4gIHJldHVybiBwbHVyYWxpemU7XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cbiAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNrLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICAgICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAgICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICAgICAgICApO1xuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xuICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXG4gICAgICAgICAgICAvLyBBdm9pZCBzcGFtbWluZyB0aGUgY29uc29sZSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG5vdCBhY3Rpb25hYmxlIGV4Y2VwdCBmb3IgbGliIGF1dGhvcnNcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb21cbiAgICAgIC8vIHByb3BzLlxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gYWxsS2V5cykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjguNlxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7XG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpO1xufVxuXG4vKipcbiAqIEZvcmtlZCBmcm9tIGZianMvd2FybmluZzpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mYmpzL2Jsb2IvZTY2YmEyMGFkNWJlNDMzZWI1NDQyM2YyYjA5N2Q4MjkzMjRkOWRlNi9wYWNrYWdlcy9mYmpzL3NyYy9fX2ZvcmtzX18vd2FybmluZy5qc1xuICpcbiAqIE9ubHkgY2hhbmdlIGlzIHdlIHVzZSBjb25zb2xlLndhcm4gaW5zdGVhZCBvZiBjb25zb2xlLmVycm9yLFxuICogYW5kIGRvIG5vdGhpbmcgd2hlbiAnY29uc29sZScgaXMgbm90IHN1cHBvcnRlZC5cbiAqIFRoaXMgcmVhbGx5IHNpbXBsaWZpZXMgdGhlIGNvZGUuXG4gKiAtLS1cbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgbG93UHJpb3JpdHlXYXJuaW5nID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG5cbiAgbG93UHJpb3JpdHlXYXJuaW5nID0gZnVuY3Rpb24gKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Bsb3dQcmlvcml0eVdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZy5hcHBseSh1bmRlZmluZWQsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgbG93UHJpb3JpdHlXYXJuaW5nJDEgPSBsb3dQcmlvcml0eVdhcm5pbmc7XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuXG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTtcblxuLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTtcbiAgICAgIGxvd1ByaW9yaXR5V2FybmluZyQxKGZhbHNlLCAnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJoZWxwZXJzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcImkxOG5cIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmFsaWRhdG9yc1wiXTsgfSgpKTsiLCIoZnVuY3Rpb24oKSB7IG1vZHVsZS5leHBvcnRzID0gdGhpc1tcImVlanNcIl1bXCJ2YWx1ZU9iamVjdHNcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJ3cFwiXVtcImhvb2tzXCJdOyB9KCkpOyIsIihmdW5jdGlvbigpIHsgbW9kdWxlLmV4cG9ydHMgPSB0aGlzW1wiZWVqc1wiXVtcInZlbmRvclwiXVtcImN1aWRcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJsb2Rhc2hcIl07IH0oKSk7IiwiKGZ1bmN0aW9uKCkgeyBtb2R1bGUuZXhwb3J0cyA9IHRoaXNbXCJlZWpzXCJdW1widmVuZG9yXCJdW1wibW9tZW50XCJdOyB9KCkpOyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/assets/src/data/model/datetime/status-helper.js b/assets/src/data/model/datetime/status-helper.js index 4c394824abc..c4b51905935 100644 --- a/assets/src/data/model/datetime/status-helper.js +++ b/assets/src/data/model/datetime/status-helper.js @@ -25,42 +25,62 @@ const assertDateTimeEntity = ( DateTimeEntity ) => { /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities + * @return {boolean} true if event date is valid entity or archive + */ +const isValidEntityOrArchive = ( DateTimeEntity, includeTrashed ) => { + return ( includeTrashed && assertDateTimeEntity( DateTimeEntity ) ) || + ( ! includeTrashed && ! isTrashed( DateTimeEntity ) ); +}; + +/** + * @function + * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if event date is occurring NOW */ -export const isActive = ( DateTimeEntity ) => { - assertDateTimeEntity( DateTimeEntity ); - return DateTimeEntity.start.diffNow().asSeconds() < 0 && - DateTimeEntity.end.diffNow().asSeconds() > 0; +export const isActive = ( DateTimeEntity, includeTrashed = false ) => { + return isValidEntityOrArchive( DateTimeEntity, includeTrashed ) && + DateTimeEntity.start.diffNow().asSeconds() < 0 && + DateTimeEntity.end.diffNow().asSeconds() > 0; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if end date is in the past */ -export const isExpired = ( DateTimeEntity ) => { - assertDateTimeEntity( DateTimeEntity ); - return DateTimeEntity.end.diffNow().asSeconds() < 0; +export const isExpired = ( DateTimeEntity, includeTrashed = false ) => { + return isValidEntityOrArchive( DateTimeEntity, includeTrashed ) && + DateTimeEntity.end.diffNow().asSeconds() < 0; }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if end date is in the past */ -export const isRecentlyExpired = ( DateTimeEntity ) => { - assertDateTimeEntity( DateTimeEntity ); - return DateTimeEntity.end.diffNow().asSeconds() < 0 && - DateTimeEntity.end.diffNow().asSeconds() > ( MONTH_IN_SECONDS * -1 ); +export const isRecentlyExpired = ( DateTimeEntity, includeTrashed = false ) => { + return isValidEntityOrArchive( DateTimeEntity, includeTrashed ) && + DateTimeEntity.end.diffNow().asSeconds() < 0 && + DateTimeEntity.end.diffNow().asSeconds() > ( MONTH_IN_SECONDS * -1 ); }; /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if tickets sold meets or exceeds registration limit */ -export const isSoldOut = ( DateTimeEntity ) => { - assertDateTimeEntity( DateTimeEntity ); +export const isSoldOut = ( DateTimeEntity, includeTrashed = false ) => { + if ( + ( includeTrashed && ! assertDateTimeEntity( DateTimeEntity ) ) || + ( ! includeTrashed && isTrashed( DateTimeEntity ) ) + ) { + return false; + } const cap = DateTimeEntity.regLimit; return ( cap !== null && cap !== 'INF' && cap !== Infinity && cap !== -1 ) && DateTimeEntity.sold >= cap; @@ -69,11 +89,12 @@ export const isSoldOut = ( DateTimeEntity ) => { /** * @function * @param {Object} DateTimeEntity model object + * @param {boolean} includeTrashed if true will not filter out trashed entities * @return {boolean} true if start date is in the future */ -export const isUpcoming = ( DateTimeEntity ) => { - assertDateTimeEntity( DateTimeEntity ); - return DateTimeEntity.start.diffNow().asSeconds() > 0; +export const isUpcoming = ( DateTimeEntity, includeTrashed = false ) => { + return isValidEntityOrArchive( DateTimeEntity, includeTrashed ) && + DateTimeEntity.start.diffNow().asSeconds() > 0; }; /** @@ -117,7 +138,6 @@ export const isTrashed = ( DateTimeEntity ) => { * @return {string} status ID */ export const status = ( DateTimeEntity ) => { - assertDateTimeEntity( DateTimeEntity ); if ( isTrashed( DateTimeEntity ) ) { return DATETIME_STATUS_ID.TRASHED; } @@ -140,6 +160,7 @@ export const status = ( DateTimeEntity ) => { // if ( isPostponed( DateTimeEntity ) ) { // return DATETIME_STATUS_ID.POSTPONED; // } + assertDateTimeEntity( DateTimeEntity ); return DATETIME_STATUS_ID.INACTIVE; }; diff --git a/assets/src/data/model/datetime/test/status-helper.js b/assets/src/data/model/datetime/test/status-helper.js new file mode 100644 index 00000000000..e1804bfe5cb --- /dev/null +++ b/assets/src/data/model/datetime/test/status-helper.js @@ -0,0 +1,439 @@ +/** + * External imports + */ +import { AuthedDateTimeResponse, DateTimeFactory } from '@test/fixtures'; +import { DateTime } from '@eventespresso/value-objects'; + +/** + * Internal imports + */ +import { + isActive, + isExpired, + isRecentlyExpired, + isSoldOut, + isTrashed, + isUpcoming, + status, + getBackgroundColorClass, + getDateTimeStatusTextLabel, +} from '../status-helper'; +import { DATETIME_STATUS_ID } from '../constants'; + +// test objects +const getDateEntity = () => DateTimeFactory.fromExisting( + { ...AuthedDateTimeResponse, DTT_ID: 10 } +); +const inValidDateEntity = { id: 10, name: 'no date for you' }; +const today = new Date(); +const nextWeek = new Date(); +const nextMonth = new Date(); +const lastWeek = new Date(); +const lastMonth = new Date(); +const oneMonthFromNow = new Date(); +const twoMonthsFromNow = new Date(); +const oneMonthAgo = new Date(); +const twoMonthsAgo = new Date(); +nextWeek.setDate( today.getDate() + 7 ); +nextMonth.setDate( today.getDate() + 30 ); +lastWeek.setDate( today.getDate() - 7 ); +lastMonth.setDate( today.getDate() - 30 ); +oneMonthAgo.setDate( today.getDate() - 32 ); +twoMonthsAgo.setDate( today.getDate() - 62 ); +oneMonthFromNow.setDate( today.getDate() + 32 ); +twoMonthsFromNow.setDate( today.getDate() + 62 ); + +const activeDateEntity = () => { + const dateEntity = getDateEntity(); + dateEntity.start = new DateTime( lastWeek.toISOString() ); + dateEntity.end = new DateTime( nextWeek.toISOString() ); + return dateEntity; +}; +const expiredDateEntity = () => { + const dateEntity = getDateEntity(); + dateEntity.start = new DateTime( lastMonth.toISOString() ); + dateEntity.end = new DateTime( lastWeek.toISOString() ); + return dateEntity; +}; +const reallyOldDateEntity = () => { + const dateEntity = getDateEntity(); + dateEntity.start = new DateTime( twoMonthsAgo.toISOString() ); + dateEntity.end = new DateTime( oneMonthAgo.toISOString() ); + return dateEntity; +}; +const upcomingDateEntity = () => { + const dateEntity = getDateEntity(); + dateEntity.start = new DateTime( nextWeek.toISOString() ); + dateEntity.end = new DateTime( nextMonth.toISOString() ); + return dateEntity; +}; +const trashedDateEntity = () => { + const dateEntity = getDateEntity(); + dateEntity.deleted = true; + return dateEntity; +}; +const soldOutDateEntity = () => { + const dateEntity = upcomingDateEntity(); + dateEntity.regLimit = 100; + dateEntity.sold = 100; + return dateEntity; +}; +const noCapacityDateEntity = () => { + const dateEntity = upcomingDateEntity(); + dateEntity.regLimit = null; + return dateEntity; +}; + +describe( 'DateEntity Status "is" Conditionals', () => { + it( 'throw errors when invalid Date Entity supplied', () => { + expect( () => isActive( inValidDateEntity ) ).toThrow( TypeError ); + expect( () => isExpired( inValidDateEntity ) ).toThrow( TypeError ); + expect( () => isRecentlyExpired( inValidDateEntity ) ).toThrow( TypeError ); + expect( () => isSoldOut( inValidDateEntity ) ).toThrow( TypeError ); + expect( () => isTrashed( inValidDateEntity ) ).toThrow( TypeError ); + expect( () => isUpcoming( inValidDateEntity ) ).toThrow( TypeError ); + } ); + it( 'do not throw errors when a valid Date Entity supplied', () => { + const validDateEntity = getDateEntity(); + expect( () => isActive( validDateEntity ) ).not.toThrow( TypeError ); + expect( () => isExpired( validDateEntity ) ).not.toThrow( TypeError ); + expect( () => isRecentlyExpired( validDateEntity ) ).not.toThrow( TypeError ); + expect( () => isSoldOut( validDateEntity ) ).not.toThrow( TypeError ); + expect( () => isTrashed( validDateEntity ) ).not.toThrow( TypeError ); + expect( () => isUpcoming( validDateEntity ) ).not.toThrow( TypeError ); + } ); + describe( 'isActive()', () => { + it( 'returns false if Date Entity start and end dates are in future', + () => { + expect( isActive( upcomingDateEntity() ) ).toBe( false ); + } + ); + it( 'returns false if Date Entity start and end dates are in past', + () => { + expect( isActive( expiredDateEntity() ) ).toBe( false ); + } + ); + it( 'returns true if Date Entity start and end dates "straddle" current time', + () => { + expect( isActive( activeDateEntity() ) ).toBe( true ); + } + ); + } ); + describe( 'isExpired()', () => { + it( 'returns false if Date Entity start and end dates are in future', + () => { + expect( isExpired( upcomingDateEntity() ) ).toBe( false ); + } + ); + it( 'returns false if Date Entity start and end dates "straddle" current time', + () => { + expect( isExpired( activeDateEntity() ) ).toBe( false ); + } + ); + it( 'returns true if Date Entity start and end dates are in past', + () => { + expect( isExpired( expiredDateEntity() ) ).toBe( true ); + } + ); + } ); + describe( 'isRecentlyExpired()', () => { + it( 'returns false if Date Entity start and end dates are in future', + () => { + expect( isRecentlyExpired( upcomingDateEntity() ) ).toBe( false ); + } + ); + it( 'returns false if Date Entity start and end dates "straddle" current time', + () => { + expect( isUpcoming( activeDateEntity() ) ).toBe( false ); + } + ); + it( 'returns false if Date Entity start and end dates are too far in past', + () => { + expect( isRecentlyExpired( reallyOldDateEntity() ) ).toBe( false ); + } + ); + it( 'returns true if Date Entity start and end dates are in past', + () => { + expect( isRecentlyExpired( expiredDateEntity() ) ).toBe( true ); + } + ); + } ); + describe( 'isUpcoming()', () => { + it( 'returns false if Date Entity start and end dates are in past', + () => { + expect( isUpcoming( expiredDateEntity() ) ).toBe( false ); + } + ); + it( 'returns false if Date Entity start and end dates "straddle" current time', + () => { + expect( isUpcoming( activeDateEntity() ) ).toBe( false ); + } + ); + it( 'returns true if Date Entity start and end dates are in future', + () => { + expect( isUpcoming( upcomingDateEntity() ) ).toBe( true ); + } + ); + it( 'returns true if Date Entity start and end dates are far in future', + () => { + expect( isUpcoming( upcomingDateEntity() ) ).toBe( true ); + } + ); + } ); + describe( 'isSoldOut()', () => { + const dateEntity = upcomingDateEntity(); + it( 'returns false if Date Entity capacity is null', () => { + dateEntity.regLimit = null; + expect( isSoldOut( dateEntity ) ).toBe( false ); + } ); + it( 'returns false if Date Entity capacity is "-1', () => { + dateEntity.regLimit = -1; + expect( isSoldOut( dateEntity ) ).toBe( false ); + } ); + it( 'returns false if Date Entity capacity is set and sold is 0', () => { + dateEntity.regLimit = 100; + dateEntity.sold = 0; + expect( isSoldOut( dateEntity ) ).toBe( false ); + } ); + it( 'returns false if Date Entity capacity is more than sold', () => { + dateEntity.regLimit = 100; + dateEntity.sold = 99; + expect( isSoldOut( dateEntity ) ).toBe( false ); + } ); + it( 'returns true if Date Entity capacity equals sold', () => { + dateEntity.regLimit = 100; + dateEntity.sold = 100; + expect( isSoldOut( dateEntity ) ).toBe( true ); + } ); + it( 'returns true if Date Entity capacity is less than sold', () => { + dateEntity.regLimit = 100; + dateEntity.sold = 110; + expect( isSoldOut( dateEntity ) ).toBe( true ); + } ); + } ); + describe( 'isTrashed()', () => { + it( 'returns false if Date Entity is not deleted', + () => { + expect( isTrashed( upcomingDateEntity() ) ).toBe( false ); + } + ); + it( 'returns true if Date Entity capacity is deleted', + () => { + expect( isTrashed( trashedDateEntity() ) ).toBe( true ); + } + ); + } ); +} ); + +describe( 'DateEntity Status Helpers', () => { + it( 'throw errors when invalid Date Entity supplied', () => { + expect( + () => status( inValidDateEntity ) + ).toThrow( TypeError ); + expect( + () => getBackgroundColorClass( inValidDateEntity ) + ).toThrow( TypeError ); + expect( + () => getDateTimeStatusTextLabel( inValidDateEntity ) + ).toThrow( TypeError ); + } ); + describe( 'status() returns correct status code for valid Date Entity', () => { + let dateEntity; + it( 'is "DTT" when TRASHED', () => { + dateEntity = trashedDateEntity(); + expect( status( dateEntity ) ).toEqual( + DATETIME_STATUS_ID.TRASHED + ); + expect( status( dateEntity ) ).toEqual( 'DTT' ); + } ); + it( 'is not "DTT" when not TRASHED', () => { + dateEntity = upcomingDateEntity(); + expect( status( dateEntity ) ).not.toEqual( + DATETIME_STATUS_ID.TRASHED + ); + expect( status( dateEntity ) ).not.toEqual( 'DTT' ); + } ); + it( 'is "DTE" when EXPIRED', () => { + dateEntity = expiredDateEntity(); + expect( status( dateEntity ) ).toEqual( + DATETIME_STATUS_ID.EXPIRED + ); + expect( status( dateEntity ) ).toEqual( 'DTE' ); + } ); + it( 'is not "DTE" when not EXPIRED', () => { + dateEntity = upcomingDateEntity(); + expect( status( dateEntity ) ).not.toEqual( + DATETIME_STATUS_ID.EXPIRED + ); + expect( status( dateEntity ) ).not.toEqual( 'DTE' ); + } ); + it( 'is "DTS" when SOLD_OUT', () => { + dateEntity = soldOutDateEntity(); + expect( status( dateEntity ) ).toEqual( + DATETIME_STATUS_ID.SOLD_OUT + ); + expect( status( dateEntity ) ).toEqual( 'DTS' ); + } ); + it( 'is not "DTS" when not SOLD_OUT', () => { + dateEntity = noCapacityDateEntity(); + expect( status( dateEntity ) ).not.toEqual( + DATETIME_STATUS_ID.SOLD_OUT + ); + expect( status( dateEntity ) ).not.toEqual( 'DTS' ); + } ); + it( 'is "DTU" when UPCOMING', () => { + dateEntity = upcomingDateEntity(); + expect( status( dateEntity ) ).toEqual( + DATETIME_STATUS_ID.UPCOMING + ); + expect( status( dateEntity ) ).toEqual( 'DTU' ); + } ); + it( 'is not "DTU" when not UPCOMING', () => { + dateEntity = activeDateEntity(); + expect( status( dateEntity ) ).not.toEqual( + DATETIME_STATUS_ID.UPCOMING + ); + expect( status( dateEntity ) ).not.toEqual( 'DTU' ); + } ); + it( 'is "DTA" when ACTIVE', () => { + dateEntity = activeDateEntity(); + expect( status( dateEntity ) ).toEqual( + DATETIME_STATUS_ID.ACTIVE + ); + expect( status( dateEntity ) ).toEqual( 'DTA' ); + } ); + it( 'is not "DTA" when not ACTIVE', () => { + dateEntity = upcomingDateEntity(); + expect( status( dateEntity ) ).not.toEqual( + DATETIME_STATUS_ID.ACTIVE + ); + expect( status( dateEntity ) ).not.toEqual( 'DTA' ); + } ); + } ); + describe( 'getBackgroundColorClass() returns correct CSS class for valid Date Entity', () => { + let dateEntity; + it( 'is "DTT" when TRASHED', () => { + dateEntity = trashedDateEntity(); + expect( getBackgroundColorClass( dateEntity ) ).toEqual( + `ee-status-background-color-DTT` + ); + } ); + it( 'is not "DTT" when not TRASHED', () => { + dateEntity = upcomingDateEntity(); + expect( getBackgroundColorClass( dateEntity ) ).not.toEqual( + `ee-status-background-color-DTT` + ); + } ); + it( 'is "DTE" when EXPIRED', () => { + dateEntity = expiredDateEntity(); + expect( getBackgroundColorClass( dateEntity ) ).toEqual( + `ee-status-background-color-DTE` + ); + } ); + it( 'is not "DTE" when not EXPIRED', () => { + dateEntity = upcomingDateEntity(); + expect( getBackgroundColorClass( dateEntity ) ).not.toEqual( + `ee-status-background-color-DTE` + ); + } ); + it( 'is "DTS" when SOLD_OUT', () => { + dateEntity = soldOutDateEntity(); + expect( getBackgroundColorClass( dateEntity ) ).toEqual( + `ee-status-background-color-DTS` + ); + } ); + it( 'is not "DTS" when not SOLD_OUT', () => { + dateEntity = noCapacityDateEntity(); + expect( getBackgroundColorClass( dateEntity ) ).not.toEqual( + `ee-status-background-color-DTS` + ); + } ); + it( 'is "DTU" when UPCOMING', () => { + dateEntity = upcomingDateEntity(); + expect( getBackgroundColorClass( dateEntity ) ).toEqual( + `ee-status-background-color-DTU` + ); + } ); + it( 'is not "DTU" when not UPCOMING', () => { + dateEntity = activeDateEntity(); + expect( getBackgroundColorClass( dateEntity ) ).not.toEqual( + `ee-status-background-color-DTU` + ); + } ); + it( 'is "DTA" when ACTIVE', () => { + dateEntity = activeDateEntity(); + expect( getBackgroundColorClass( dateEntity ) ).toEqual( + `ee-status-background-color-DTA` + ); + } ); + it( 'is not "DTA" when not ACTIVE', () => { + dateEntity = upcomingDateEntity(); + expect( getBackgroundColorClass( dateEntity ) ).not.toEqual( + `ee-status-background-color-DTA` + ); + } ); + } ); + describe( 'getDateTimeStatusTextLabel() returns correct status label for valid Date Entity', () => { + let dateEntity; + it( 'is "archived" when TRASHED', () => { + dateEntity = trashedDateEntity(); + expect( getDateTimeStatusTextLabel( dateEntity ) ).toEqual( + 'archived' + ); + } ); + it( 'is not "archived" when not TRASHED', () => { + dateEntity = upcomingDateEntity(); + expect( getDateTimeStatusTextLabel( dateEntity ) ).not.toEqual( + 'archived' + ); + } ); + it( 'is "expired" when EXPIRED', () => { + dateEntity = expiredDateEntity(); + expect( getDateTimeStatusTextLabel( dateEntity ) ).toEqual( + 'expired' + ); + } ); + it( 'is not "expired" when not EXPIRED', () => { + dateEntity = upcomingDateEntity(); + expect( getDateTimeStatusTextLabel( dateEntity ) ).not.toEqual( + 'expired' + ); + } ); + it( 'is "sold out" when SOLD_OUT', () => { + dateEntity = soldOutDateEntity(); + expect( getDateTimeStatusTextLabel( dateEntity ) ).toEqual( + 'sold out' + ); + } ); + it( 'is not "sold out" when not SOLD_OUT', () => { + dateEntity = noCapacityDateEntity(); + expect( getDateTimeStatusTextLabel( dateEntity ) ).not.toEqual( + 'sold out' + ); + } ); + it( 'is "upcoming" when UPCOMING', () => { + dateEntity = upcomingDateEntity(); + expect( getDateTimeStatusTextLabel( dateEntity ) ).toEqual( + 'upcoming' + ); + } ); + it( 'is not "upcoming" when not UPCOMING', () => { + dateEntity = activeDateEntity(); + expect( getDateTimeStatusTextLabel( dateEntity ) ).not.toEqual( + 'upcoming' + ); + } ); + it( 'is "active" when ACTIVE', () => { + dateEntity = activeDateEntity(); + expect( getDateTimeStatusTextLabel( dateEntity ) ).toEqual( + 'active' + ); + } ); + it( 'is not "active" when not ACTIVE', () => { + dateEntity = upcomingDateEntity(); + expect( getDateTimeStatusTextLabel( dateEntity ) ).not.toEqual( + 'active' + ); + } ); + } ); +} ); diff --git a/assets/src/data/model/ticket/status-helper.js b/assets/src/data/model/ticket/status-helper.js index 233fc637e84..41e2436a882 100644 --- a/assets/src/data/model/ticket/status-helper.js +++ b/assets/src/data/model/ticket/status-helper.js @@ -25,47 +25,65 @@ const assertTicketEntity = ( TicketEntity ) => { /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out trashed entities + * @return {boolean} true if event date is valid entity or archive + */ +const isValidEntityOrArchive = ( TicketEntity, includeArchived ) => { + return ( includeArchived && assertTicketEntity( TicketEntity ) ) || + ( ! includeArchived && ! isArchived( TicketEntity ) ); +}; + +/** + * @function + * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if ticket is currently available for purchase */ -export const isOnSale = ( TicketEntity ) => { - assertTicketEntity( TicketEntity ); - return ! isArchived( TicketEntity ) && - TicketEntity.startDate.diffNow() < 0 && - TicketEntity.endDate.diffNow() > 0; +export const isOnSale = ( TicketEntity, includeArchived = false ) => { + return isValidEntityOrArchive( TicketEntity, includeArchived ) && + TicketEntity.startDate.diffNow() < 0 && + TicketEntity.endDate.diffNow() > 0; }; /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if ticket can no longer be purchased */ -export const isExpired = ( TicketEntity ) => { - assertTicketEntity( TicketEntity ); - return TicketEntity.endDate.diffNow() < 0; +export const isExpired = ( TicketEntity, includeArchived = false ) => { + return isValidEntityOrArchive( TicketEntity, includeArchived ) && + TicketEntity.endDate.diffNow() < 0; }; /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if tickets sold meets or exceeds available quantity */ -export const isSoldOut = ( TicketEntity ) => { - assertTicketEntity( TicketEntity ); +export const isSoldOut = ( TicketEntity, includeArchived = false ) => { + if ( + ( includeArchived && ! assertTicketEntity( TicketEntity ) ) || + ( ! includeArchived && isArchived( TicketEntity ) ) + ) { + return false; + } const qty = TicketEntity.qty; - return ( qty !== null && qty !== 'INF' && qty !== Infinity ) && + return ( qty !== null && qty !== 'INF' && qty !== Infinity && qty !== -1 ) && TicketEntity.sold >= qty; }; /** * @function * @param {Object} TicketEntity model object + * @param {boolean} includeArchived if true will not filter out archived entities * @return {boolean} true if ticket is not yet available for purchase, * but will be at some date in the future */ -export const isPending = ( TicketEntity ) => { - assertTicketEntity( TicketEntity ); - return ! isArchived( TicketEntity ) && - TicketEntity.startDate.diffNow() > 0; +export const isPending = ( TicketEntity, includeArchived = false ) => { + return isValidEntityOrArchive( TicketEntity, includeArchived ) && + TicketEntity.startDate.diffNow() > 0; }; /** @@ -84,7 +102,6 @@ export const isArchived = ( TicketEntity ) => { * @return {string} status ID */ export const status = ( TicketEntity ) => { - assertTicketEntity( TicketEntity ); if ( isArchived( TicketEntity ) ) { return TICKET_STATUS_ID.ARCHIVED; } diff --git a/assets/src/data/model/ticket/test/status-helper.js b/assets/src/data/model/ticket/test/status-helper.js new file mode 100644 index 00000000000..c60cee5d586 --- /dev/null +++ b/assets/src/data/model/ticket/test/status-helper.js @@ -0,0 +1,408 @@ +/** + * External imports + */ +import { AuthedTicketResponse, TicketFactory } from '@test/fixtures'; +import { DateTime } from '@eventespresso/value-objects'; + +/** + * Internal imports + */ +import { + isOnSale, + isExpired, + isSoldOut, + isArchived, + isPending, + status, + getBackgroundColorClass, + getTicketStatusTextLabel, +} from '../status-helper'; +import { TICKET_STATUS_ID } from '../constants'; + +// test objects +const getTicketEntity = () => TicketFactory.fromExisting( + { ...AuthedTicketResponse, TKT_ID: 10 } +); +const inValidTicketEntity = { id: 10, name: 'no ticket for you' }; +const today = new Date(); +const nextWeek = new Date(); +const nextMonth = new Date(); +const lastWeek = new Date(); +const lastMonth = new Date(); +const oneMonthFromNow = new Date(); +const twoMonthsFromNow = new Date(); +const oneMonthAgo = new Date(); +const twoMonthsAgo = new Date(); +nextWeek.setDate( today.getDate() + 7 ); +nextMonth.setDate( today.getDate() + 30 ); +lastWeek.setDate( today.getDate() - 7 ); +lastMonth.setDate( today.getDate() - 30 ); +oneMonthAgo.setDate( today.getDate() - 32 ); +twoMonthsAgo.setDate( today.getDate() - 62 ); +oneMonthFromNow.setDate( today.getDate() + 32 ); +twoMonthsFromNow.setDate( today.getDate() + 62 ); + +const onSaleTicketEntity = () => { + const ticketEntity = getTicketEntity(); + ticketEntity.startDate = new DateTime( lastWeek.toISOString() ); + ticketEntity.endDate = new DateTime( nextWeek.toISOString() ); + return ticketEntity; +}; +const expiredTicketEntity = () => { + const ticketEntity = getTicketEntity(); + ticketEntity.startDate = new DateTime( lastMonth.toISOString() ); + ticketEntity.endDate = new DateTime( lastWeek.toISOString() ); + return ticketEntity; +}; +const pendingTicketEntity = () => { + const ticketEntity = getTicketEntity(); + ticketEntity.startDate = new DateTime( nextWeek.toISOString() ); + ticketEntity.endDate = new DateTime( nextMonth.toISOString() ); + return ticketEntity; +}; +const archivedTicketEntity = () => { + const ticketEntity = getTicketEntity(); + ticketEntity.deleted = true; + return ticketEntity; +}; +const soldOutTicketEntity = () => { + const ticketEntity = pendingTicketEntity(); + ticketEntity.qty = 100; + ticketEntity.sold = 100; + return ticketEntity; +}; +const noCapacityTicketEntity = () => { + const ticketEntity = pendingTicketEntity(); + ticketEntity.qty = null; + return ticketEntity; +}; + +describe( 'TicketEntity Status "is" Conditionals', () => { + it( 'throw errors when invalid Ticket Entity supplied', () => { + expect( () => isOnSale( inValidTicketEntity ) ).toThrow( TypeError ); + expect( () => isExpired( inValidTicketEntity ) ).toThrow( TypeError ); + expect( () => isSoldOut( inValidTicketEntity ) ).toThrow( TypeError ); + expect( () => isArchived( inValidTicketEntity ) ).toThrow( TypeError ); + expect( () => isPending( inValidTicketEntity ) ).toThrow( TypeError ); + } ); + it( 'do not throw errors when a valid Ticket Entity supplied', () => { + const validTicketEntity = getTicketEntity(); + expect( () => isOnSale( validTicketEntity ) ).not.toThrow( TypeError ); + expect( () => isExpired( validTicketEntity ) ).not.toThrow( TypeError ); + expect( () => isSoldOut( validTicketEntity ) ).not.toThrow( TypeError ); + expect( () => isArchived( validTicketEntity ) ).not.toThrow( TypeError ); + expect( () => isPending( validTicketEntity ) ).not.toThrow( TypeError ); + } ); + describe( 'isOnSale()', () => { + it( 'returns false if Ticket Entity sale dates are in future', + () => { + expect( isOnSale( pendingTicketEntity() ) ).toBe( false ); + } + ); + it( 'returns false if Ticket Entity sale dates are in past', + () => { + expect( isOnSale( expiredTicketEntity() ) ).toBe( false ); + } + ); + it( 'returns true if Ticket Entity sale dates "straddle" current time', + () => { + expect( isOnSale( onSaleTicketEntity() ) ).toBe( true ); + } + ); + } ); + describe( 'isExpired()', () => { + it( 'returns false if Ticket Entity sale dates are in future', + () => { + expect( isExpired( pendingTicketEntity() ) ).toBe( false ); + } + ); + it( 'returns false if Ticket Entity sale dates "straddle" current time', + () => { + expect( isExpired( onSaleTicketEntity() ) ).toBe( false ); + } + ); + it( 'returns true if Ticket Entity sale dates are in past', + () => { + expect( isExpired( expiredTicketEntity() ) ).toBe( true ); + } + ); + } ); + describe( 'isPending()', () => { + it( 'returns false if Ticket Entity sale dates are in past', + () => { + expect( isPending( expiredTicketEntity() ) ).toBe( false ); + } + ); + it( 'returns false if Ticket Entity sale dates "straddle" current time', + () => { + expect( isPending( onSaleTicketEntity() ) ).toBe( false ); + } + ); + it( 'returns true if Ticket Entity sale dates are in future', + () => { + expect( isPending( pendingTicketEntity() ) ).toBe( true ); + } + ); + it( 'returns true if Ticket Entity sale dates are far in future', + () => { + expect( isPending( pendingTicketEntity() ) ).toBe( true ); + } + ); + } ); + describe( 'isSoldOut()', () => { + const ticketEntity = pendingTicketEntity(); + it( 'returns false if Ticket Entity quantity is null', () => { + ticketEntity.qty = null; + expect( isSoldOut( ticketEntity ) ).toBe( false ); + } ); + it( 'returns false if Ticket Entity quantity is "-1', () => { + ticketEntity.qty = -1; + expect( isSoldOut( ticketEntity ) ).toBe( false ); + } ); + it( 'returns false if Ticket Entity quantity is set and sold is 0', () => { + ticketEntity.qty = 100; + ticketEntity.sold = 0; + expect( isSoldOut( ticketEntity ) ).toBe( false ); + } ); + it( 'returns false if Ticket Entity quantity is more than sold', () => { + ticketEntity.qty = 100; + ticketEntity.sold = 99; + expect( isSoldOut( ticketEntity ) ).toBe( false ); + } ); + it( 'returns true if Ticket Entity quantity equals sold', () => { + ticketEntity.qty = 100; + ticketEntity.sold = 100; + expect( isSoldOut( ticketEntity ) ).toBe( true ); + } ); + it( 'returns true if Ticket Entity quantity is less than sold', () => { + ticketEntity.qty = 100; + ticketEntity.sold = 110; + expect( isSoldOut( ticketEntity ) ).toBe( true ); + } ); + } ); + describe( 'isArchived()', () => { + it( 'returns false if Ticket Entity is not archived', + () => { + expect( isArchived( pendingTicketEntity() ) ).toBe( false ); + } + ); + it( 'returns true if Ticket Entity quantity is archived', + () => { + expect( isArchived( archivedTicketEntity() ) ).toBe( true ); + } + ); + } ); +} ); + +describe( 'TicketEntity Status Helpers', () => { + it( 'throw errors when invalid Ticket Entity supplied', () => { + expect( + () => status( inValidTicketEntity ) + ).toThrow( TypeError ); + expect( + () => getBackgroundColorClass( inValidTicketEntity ) + ).toThrow( TypeError ); + expect( + () => getTicketStatusTextLabel( inValidTicketEntity ) + ).toThrow( TypeError ); + } ); + describe( 'status() returns correct status code for valid Ticket Entity', () => { + let ticketEntity; + it( 'is "TKA" when ARCHIVED', () => { + ticketEntity = archivedTicketEntity(); + expect( status( ticketEntity ) ).toEqual( + TICKET_STATUS_ID.ARCHIVED + ); + expect( status( ticketEntity ) ).toEqual( 'TKA' ); + } ); + it( 'is not "TKA" when not ARCHIVED', () => { + ticketEntity = pendingTicketEntity(); + expect( status( ticketEntity ) ).not.toEqual( + TICKET_STATUS_ID.ARCHIVED + ); + expect( status( ticketEntity ) ).not.toEqual( 'TKA' ); + } ); + it( 'is "TKE" when EXPIRED', () => { + ticketEntity = expiredTicketEntity(); + expect( status( ticketEntity ) ).toEqual( + TICKET_STATUS_ID.EXPIRED + ); + expect( status( ticketEntity ) ).toEqual( 'TKE' ); + } ); + it( 'is not "TKE" when not EXPIRED', () => { + ticketEntity = pendingTicketEntity(); + expect( status( ticketEntity ) ).not.toEqual( + TICKET_STATUS_ID.EXPIRED + ); + expect( status( ticketEntity ) ).not.toEqual( 'TKE' ); + } ); + it( 'is "TKS" when SOLD_OUT', () => { + ticketEntity = soldOutTicketEntity(); + expect( status( ticketEntity ) ).toEqual( + TICKET_STATUS_ID.SOLD_OUT + ); + expect( status( ticketEntity ) ).toEqual( 'TKS' ); + } ); + it( 'is not "TKS" when not SOLD_OUT', () => { + ticketEntity = noCapacityTicketEntity(); + expect( status( ticketEntity ) ).not.toEqual( + TICKET_STATUS_ID.SOLD_OUT + ); + expect( status( ticketEntity ) ).not.toEqual( 'TKS' ); + } ); + it( 'is "TKP" when PENDING', () => { + ticketEntity = pendingTicketEntity(); + expect( status( ticketEntity ) ).toEqual( + TICKET_STATUS_ID.PENDING + ); + expect( status( ticketEntity ) ).toEqual( 'TKP' ); + } ); + it( 'is not "TKP" when not PENDING', () => { + ticketEntity = onSaleTicketEntity(); + expect( status( ticketEntity ) ).not.toEqual( + TICKET_STATUS_ID.PENDING + ); + expect( status( ticketEntity ) ).not.toEqual( 'TKP' ); + } ); + it( 'is "TKO" when ONSALE', () => { + ticketEntity = onSaleTicketEntity(); + expect( status( ticketEntity ) ).toEqual( + TICKET_STATUS_ID.ONSALE + ); + expect( status( ticketEntity ) ).toEqual( 'TKO' ); + } ); + it( 'is not "TKO" when not ONSALE', () => { + ticketEntity = pendingTicketEntity(); + expect( status( ticketEntity ) ).not.toEqual( + TICKET_STATUS_ID.ONSALE + ); + expect( status( ticketEntity ) ).not.toEqual( 'TKO' ); + } ); + } ); + describe( 'getBackgroundColorClass() returns correct CSS class for valid Ticket Entity', () => { + let ticketEntity; + it( 'is "TKA" when ARCHIVED', () => { + ticketEntity = archivedTicketEntity(); + expect( getBackgroundColorClass( ticketEntity ) ).toEqual( + `ee-status-background-color-TKA` + ); + } ); + it( 'is not "TKA" when not ARCHIVED', () => { + ticketEntity = pendingTicketEntity(); + expect( getBackgroundColorClass( ticketEntity ) ).not.toEqual( + `ee-status-background-color-TKA` + ); + } ); + it( 'is "TKE" when EXPIRED', () => { + ticketEntity = expiredTicketEntity(); + expect( getBackgroundColorClass( ticketEntity ) ).toEqual( + `ee-status-background-color-TKE` + ); + } ); + it( 'is not "TKE" when not EXPIRED', () => { + ticketEntity = pendingTicketEntity(); + expect( getBackgroundColorClass( ticketEntity ) ).not.toEqual( + `ee-status-background-color-TKE` + ); + } ); + it( 'is "TKS" when SOLD_OUT', () => { + ticketEntity = soldOutTicketEntity(); + expect( getBackgroundColorClass( ticketEntity ) ).toEqual( + `ee-status-background-color-TKS` + ); + } ); + it( 'is not "TKS" when not SOLD_OUT', () => { + ticketEntity = noCapacityTicketEntity(); + expect( getBackgroundColorClass( ticketEntity ) ).not.toEqual( + `ee-status-background-color-TKS` + ); + } ); + it( 'is "TKP" when PENDING', () => { + ticketEntity = pendingTicketEntity(); + expect( getBackgroundColorClass( ticketEntity ) ).toEqual( + `ee-status-background-color-TKP` + ); + } ); + it( 'is not "TKP" when not PENDING', () => { + ticketEntity = onSaleTicketEntity(); + expect( getBackgroundColorClass( ticketEntity ) ).not.toEqual( + `ee-status-background-color-TKP` + ); + } ); + it( 'is "TKO" when ONSALE', () => { + ticketEntity = onSaleTicketEntity(); + expect( getBackgroundColorClass( ticketEntity ) ).toEqual( + `ee-status-background-color-TKO` + ); + } ); + it( 'is not "TKO" when not ONSALE', () => { + ticketEntity = pendingTicketEntity(); + expect( getBackgroundColorClass( ticketEntity ) ).not.toEqual( + `ee-status-background-color-TKO` + ); + } ); + } ); + describe( 'getTicketStatusTextLabel() returns correct status label for valid Ticket Entity', () => { + let ticketEntity; + it( 'is "archived" when ARCHIVED', () => { + ticketEntity = archivedTicketEntity(); + expect( getTicketStatusTextLabel( ticketEntity ) ).toEqual( + 'archived' + ); + } ); + it( 'is not "archived" when not ARCHIVED', () => { + ticketEntity = pendingTicketEntity(); + expect( getTicketStatusTextLabel( ticketEntity ) ).not.toEqual( + 'archived' + ); + } ); + it( 'is "expired" when EXPIRED', () => { + ticketEntity = expiredTicketEntity(); + expect( getTicketStatusTextLabel( ticketEntity ) ).toEqual( + 'expired' + ); + } ); + it( 'is not "expired" when not EXPIRED', () => { + ticketEntity = pendingTicketEntity(); + expect( getTicketStatusTextLabel( ticketEntity ) ).not.toEqual( + 'expired' + ); + } ); + it( 'is "sold out" when SOLD_OUT', () => { + ticketEntity = soldOutTicketEntity(); + expect( getTicketStatusTextLabel( ticketEntity ) ).toEqual( + 'sold out' + ); + } ); + it( 'is not "sold out" when not SOLD_OUT', () => { + ticketEntity = noCapacityTicketEntity(); + expect( getTicketStatusTextLabel( ticketEntity ) ).not.toEqual( + 'sold out' + ); + } ); + it( 'is "pending" when PENDING', () => { + ticketEntity = pendingTicketEntity(); + expect( getTicketStatusTextLabel( ticketEntity ) ).toEqual( + 'pending' + ); + } ); + it( 'is not "pending" when not PENDING', () => { + ticketEntity = onSaleTicketEntity(); + expect( getTicketStatusTextLabel( ticketEntity ) ).not.toEqual( + 'pending' + ); + } ); + it( 'is "on sale" when ONSALE', () => { + ticketEntity = onSaleTicketEntity(); + expect( getTicketStatusTextLabel( ticketEntity ) ).toEqual( + 'on sale' + ); + } ); + it( 'is not "on sale" when not ONSALE', () => { + ticketEntity = pendingTicketEntity(); + expect( getTicketStatusTextLabel( ticketEntity ) ).not.toEqual( + 'on sale' + ); + } ); + } ); +} );