{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\control\\HtDialog.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\control\\HtDialog.vue","mtime":1733309211648},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\babel.config.js","mtime":1733906004399},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmRvdC1hbGwuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5zdGlja3kuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc2VhcmNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZpbHRlci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwoKaW1wb3J0IHsgbWFwU3RhdGUgfSBmcm9tICJ2dWV4IjsKaW1wb3J0IHV0aWxzIGZyb20gIkAvdXRpbHMuanMiOwppbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAiZWxlbWVudC11aSI7CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAiaHQtZGlhbG9nIiwKICBwcm9wczogWyJ2YWxpZGF0ZSIsICJ2YWx1ZSIsICJuYW1lIiwgInBlcm1pc3Npb24iLCAiYXR0ZXIiLCAic2luZ2xlIiwgInNlbGVjdG9yY29uZmlnIiwgImN1c3RkaWFsb2ciLCAidG9vbHRpcHBsYWNlbWVudCIsICJwbGFjZWhvbGRlciIsICJpc0Zyb21MaXN0Il0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIG5vZGVLZXk6ICJJRF8iLAogICAgICAvL+agkeW9ouaVsOaNrueItklkCiAgICAgIGN1c3RvbURpYWxvZ1Nob3dMaXN0OiBmYWxzZSwKICAgICAgY3VzdG9tRGlhbG9nU2hvd1RyZWU6IGZhbHNlLAogICAgICBzZWxlY3RPcmdQcm9wczogewogICAgICAgIGxhYmVsOiAibmFtZSIKICAgICAgfSwKICAgICAgc3R5bGU6ICIiLAogICAgICAvL+WvueivneahhuWuvemrmAogICAgICBzZWxlY3RPcmdzOiBudWxsLAogICAgICBpbnB1dFN1ZmZpeEhlaWdodDogMzAsCiAgICAgIGNvbmZpZzogbnVsbCwKICAgICAgdXBkYXRpbmc6IGZhbHNlLAogICAgICBkaXNwbGF5ZmllbGQ6IFtdLAogICAgICAvL+aYvuekuuWtl+autQogICAgICBjdXN0b21EaWFsb2c6IHt9LAogICAgICAvLwogICAgICBjb21tZW50OiAiIiwKICAgICAgcXVlcnlQYXJhbTogIiIsCiAgICAgIHByb3BzMTogW10sCiAgICAgIHNob3dEYXRhOiBbXSwKICAgICAgY2hlY2tCb3hEYXRhQWxsOiBbXSwKICAgICAgLy/pgInkuK3lr7nosaHnmoTpm4blkIgKICAgICAgZGVmYXVsdFByb3BzOiB7CiAgICAgICAgY2hpbGRyZW46ICJjaGlsZHJlbiIsCiAgICAgICAgbGFiZWw6ICJsYWJlbCIKICAgICAgfSwKICAgICAgcHJvcHNEYXRhOiBbXSwKICAgICAgc2VhcmNoRm9ybToge30sCiAgICAgIHF1ZXJ5c1Nob3c6IGZhbHNlLAogICAgICAvL+aYr+WQpuaYvuekuuaQnOe0ouahhgogICAgICB1bmRlZmluZWRhOiAiIiwKICAgICAgaXNDdXJyZW50Q2hhbmdlOiBmYWxzZSAvL+aYr+WQpuS4jeaJp+ihjCBvcmdUYWJsZVNlbGVjdGlvbuaWueazlQogICAgfTsKICB9LAogIHdhdGNoOiB7CiAgICBwcm9wczE6IGZ1bmN0aW9uIHByb3BzMShuZXdWYWwsIG9sZFZhbCkgewogICAgICAvL+agkeW9ogogICAgICBpZiAodGhpcy5zaG93RGF0YSAhPSB1bmRlZmluZWQgJiYgdGhpcy5zaG93RGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgdmFyIHRoaXNfID0gdGhpczsKICAgICAgICB2YXIgZGF0YSA9IFtdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaG93RGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgZGF0YS5wdXNoKHRoaXMuc2hvd0RhdGFbaV0pOwogICAgICAgIH0KICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBkYXRhLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICB0aGlzXy4kcmVmcy50cmVlLnNldENoZWNrZWQoZGF0YVtfaV0sIHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0sIDIwMCk7CiAgICAgIH0KICAgIH0KICB9LAogIGNvbXB1dGVkOiBtYXBTdGF0ZSh7CiAgICBwYWdpbmF0aW9uOiBmdW5jdGlvbiBwYWdpbmF0aW9uKHN0YXRlKSB7CiAgICAgIHJldHVybiBzdGF0ZS5kaWFsb2cucGFnaW5hdGlvbjsKICAgIH0sCiAgICB0b3RhbDogZnVuY3Rpb24gdG90YWwoc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLmRpYWxvZy50b3RhbDsKICAgIH0sCiAgICBkaWFsb2dEYXRhOiBmdW5jdGlvbiBkaWFsb2dEYXRhKHN0YXRlKSB7CiAgICAgIHJldHVybiBzdGF0ZS5kaWFsb2cucm93czsKICAgIH0sCiAgICBpbnB1dFZhbDogZnVuY3Rpb24gaW5wdXRWYWwoKSB7CiAgICAgIGlmICghdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlID09ICd8fFtdJykgewogICAgICAgIHRoaXMuY2hlY2tCb3hEYXRhQWxsID0gW107CiAgICAgICAgLy8gdGhpcy5zaG93RGF0YSA9IFtdOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBuYW1lQXJ5ID0gdGhpcy52YWx1ZS5zcGxpdCgiLCIpOwogICAgICAgIGlmICghbmFtZUFyeVtuYW1lQXJ5Lmxlbmd0aCAtIDFdKSB7CiAgICAgICAgICBuYW1lQXJ5LnNwbGljZShuYW1lQXJ5Lmxlbmd0aCAtIDEsIDEpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy52YWx1ZS5pbmRleE9mKCJ8fCIpID4gMCkgewogICAgICAgICAgbmFtZUFyeSA9IHRoaXMudmFsdWUuc3BsaXQoInx8IilbMF0uc3BsaXQoIiwiKTsKICAgICAgICAgIC8vIHRoaXMuc2hvd0RhdGE9SlNPTi5wYXJzZSh0aGlzLnZhbHVlLnNwbGl0KCJ8fCIpWzFdKTsKICAgICAgICB9CiAgICAgICAgLy8gIHRoaXMuc2hvd0RhdGEgPXRoaXMuc2VsZWN0T3JnczsKICAgICAgICB2YXIgaWRBcnkgPSBudWxsOwogICAgICAgIHZhciBhY2NvdW50QXJ5ID0gbnVsbDsKICAgICAgICB2YXIgcmVzdWx0ID0gW107CiAgICAgICAgbmFtZUFyeS5mb3JFYWNoKGZ1bmN0aW9uIChtLCBpKSB7CiAgICAgICAgICB2YXIgbiA9IHsKICAgICAgICAgICAgdmFsdWU6IG0KICAgICAgICAgIH07CiAgICAgICAgICByZXN1bHQucHVzaChuKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9LAogICAgaW5wdXRXcml0ZWFibGU6IGZ1bmN0aW9uIGlucHV0V3JpdGVhYmxlKCkgewogICAgICByZXR1cm4gdXRpbHMuZ2V0V3JpdGVhYmxlKHRoaXMucGVybWlzc2lvbik7CiAgICB9LAogICAgaW5wdXRWYWxpZGF0ZTogZnVuY3Rpb24gaW5wdXRWYWxpZGF0ZSgpIHsKICAgICAgdmFyIHZhbGlkYXRlT2JqID0gdGhpcy4kc3RvcmUuc3RhdGUuaW5kZXgudmFsaWRhdGU7CiAgICAgIHJldHVybiB1dGlscy5hZGRSZXF1aXJlZE9yTm90KHRoaXMucGVybWlzc2lvbiwgdGhpcy52YWxpZGF0ZSwgdmFsaWRhdGVPYmosIHRoaXMpOwogICAgfSwKICAgIGlucHV0TmFtZTogZnVuY3Rpb24gaW5wdXROYW1lKCkgewogICAgICB2YXIgbGFiZWxkZXNjID0gIiI7CiAgICAgIGlmICh0aGlzLiRzbG90cyAmJiB0aGlzLiRzbG90cy5sYWJlbGRlc2MgJiYgdGhpcy4kc2xvdHMubGFiZWxkZXNjWzBdLmNoaWxkcmVuICYmIHRoaXMuJHNsb3RzLmxhYmVsZGVzY1swXS5jaGlsZHJlblswXS50ZXh0KSB7CiAgICAgICAgbGFiZWxkZXNjID0gdGhpcy4kc2xvdHMubGFiZWxkZXNjWzBdLmNoaWxkcmVuWzBdLnRleHQ7CiAgICAgICAgcmV0dXJuIHRoaXMubmFtZSA/IHRoaXMubmFtZSA6IHV0aWxzLmdldE5hbWUoKSArICItIiArIGxhYmVsZGVzYzsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdGhpcy5uYW1lID8gdGhpcy5uYW1lIDogdXRpbHMuZ2V0TmFtZSgpOwogICAgICB9CiAgICB9LAogICAgLy8g5piv5ZCm5pyJ5Zue5aGr6K6+572uCiAgICBiaW5kU2V0OiBmdW5jdGlvbiBiaW5kU2V0KCkgewogICAgICByZXR1cm4gdGhpcy5zZWxlY3RvcmNvbmZpZyA/IHRoaXMuc2VsZWN0b3Jjb25maWcuYmluZCA6IG51bGw7CiAgICB9LAogICAgZ2V0UGxhY2Vob2xkZXI6IGZ1bmN0aW9uIGdldFBsYWNlaG9sZGVyKCkgewogICAgICBpZiAodGhpcy5wbGFjZWhvbGRlcikgewogICAgICAgIHJldHVybiB0aGlzLnBsYWNlaG9sZGVyOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmN1c3RkaWFsb2cubmFtZTsKICAgIH0KICB9KSwKICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkgewogICAgdGhpcy4kdmFsaWRhdG9yID0gdGhpcy4kcm9vdC4kdmFsaWRhdG9yOwogIH0sCiAgbWV0aG9kczogewogICAgLy/lm57ovabmn6Xor6IKICAgIHNlYXJjaEVudGVyRnVuOiBmdW5jdGlvbiBzZWFyY2hFbnRlckZ1bihlKSB7CiAgICAgIHZhciBrZXlDb2RlID0gd2luZG93LmV2ZW50ID8gZS5rZXlDb2RlIDogZS53aGljaDsKICAgICAgaWYgKGtleUNvZGUgPT0gMTMpIHsKICAgICAgICB0aGlzLnNlYXJjaCgpOwogICAgICB9CiAgICB9LAogICAgaGFuZGxlU2l6ZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlU2l6ZUNoYW5nZShzaXplKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICB0aGlzLmlzQ3VycmVudENoYW5nZSA9IHRydWU7CiAgICAgIC8v5q+P6aG15LiL5ouJ5pi+56S65pWw5o2uCiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0UGFnaW5hdGlvblNpemUiLCBzaXplKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczIuc2VhcmNoKCk7CiAgICAgIH0pOwogICAgfSwKICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUN1cnJlbnRDaGFuZ2UoY3VycmVudFBhZ2UpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAgIGlmICh0aGlzLnNlbGVjdE9yZ3MgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0T3Jncy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5zZWxlY3RPcmdzLmZvckVhY2goZnVuY3Rpb24gKHJvdykgewogICAgICAgICAgdmFyIHJlcyA9IHRoaXNfLmluZGV4QXJyYXkodGhpc18uY2hlY2tCb3hEYXRhQWxsLCByb3cpOwogICAgICAgICAgaWYgKHJlcyA9PSAtMSkgewogICAgICAgICAgICB0aGlzXy5jaGVja0JveERhdGFBbGwucHVzaChyb3cpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHRoaXMuaXNDdXJyZW50Q2hhbmdlID0gdHJ1ZTsKICAgICAgLy/ngrnlh7vnrKzlh6DpobUKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXRQYWdpbmF0aW9uUGFnZU51bSIsIGN1cnJlbnRQYWdlKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczMuc2VhcmNoKCk7CiAgICAgIH0pOwogICAgfSwKICAgIGNoZWNrTGlzdDogZnVuY3Rpb24gY2hlY2tMaXN0KCkgewogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAvL+WIl+ihqAogICAgICAgIGlmICh0aGlzXy5jaGVja0JveERhdGFBbGwgIT0gdW5kZWZpbmVkICYmIHRoaXNfLmNoZWNrQm94RGF0YUFsbC5sZW5ndGggPiAwKSB7CiAgICAgICAgICB0aGlzXy5jaGVja0JveERhdGFBbGwuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7CiAgICAgICAgICAgIHZhciByZXMgPSB0aGlzXy5pbmRleEFycmF5KHRoaXNfLmRpYWxvZ0RhdGEsIHJvdyk7CiAgICAgICAgICAgIHRoaXNfLnVuZGVmaW5lZGEgPSByZXM7CiAgICAgICAgICAgIGlmIChyZXMgIT0gLTEpIHsKICAgICAgICAgICAgICB0aGlzXy5pc0N1cnJlbnRDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAgIHRoaXNfLnRvZ2dsZVJvd1NlbGVjdGlvbihyZXMsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sIDMwMCk7CiAgICB9LAogICAgdG9nZ2xlUm93U2VsZWN0aW9uOiBmdW5jdGlvbiB0b2dnbGVSb3dTZWxlY3Rpb24ocmVzLCB2YWwpIHsKICAgICAgdGhpcy4kcmVmcy5vcmdUYWJsZS50b2dnbGVSb3dTZWxlY3Rpb24odGhpcy5kaWFsb2dEYXRhW3Jlc10sIHZhbCk7CiAgICB9LAogICAgc2hvd0RpYWxvZzogZnVuY3Rpb24gc2hvd0RpYWxvZyhpdGVtKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICB2YXIgYWxpYXMgPSB0aGlzLmN1c3RkaWFsb2cuY3VzdERpYWxvZy5hbGlhczsKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImZvcm0vZ2V0QnlBbGlhcyIsIGFsaWFzKS50aGVuKGZ1bmN0aW9uIChjdXN0b21EaWFsb2cpIHsKICAgICAgICBpZiAoIWN1c3RvbURpYWxvZyB8fCAhY3VzdG9tRGlhbG9nLmFsaWFzKSB7CiAgICAgICAgICBNZXNzYWdlLmVycm9yKCLlr7nor53moYbliKvlkI3jgJAiICsgYWxpYXMgKyAi44CR5LiN5a2Y5Zyo77yBIik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChjdXN0b21EaWFsb2cuc3R5bGUgPT0gMSkgewogICAgICAgICAgdmFyIGRpc3BsYXlsaXN0ID0gSlNPTi5wYXJzZShjdXN0b21EaWFsb2cuZGlzcGxheWZpZWxkKTsKICAgICAgICAgIHRoaXNfLm5vZGVLZXkgPSBkaXNwbGF5bGlzdC5pZDsKICAgICAgICB9CiAgICAgICAgdmFyIGxpc3QgPSBKU09OLnBhcnNlKGN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7CiAgICAgICAgdmFyIHBhcmFtID0ge307CiAgICAgICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHsKICAgICAgICAgIGlmIChlbGUuZGVmYXVsdFR5cGUgPT0gIjQiKSB7CiAgICAgICAgICAgIHBhcmFtW2VsZS5maWVsZF0gPSBlbGUuY29tbWVudDsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBfdGhpczQuc3R5bGUgPSAiaGVpZ2h0OiIgKyBjdXN0b21EaWFsb2cuaGVpZ2h0ICsgInB4IjsKICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkocGFyYW0pID09ICJ7fSIpIHsKICAgICAgICAgIC8v5rKh5pyJ5Yqo5oCB5Lyg5YWl55qE5a2X5q61CiAgICAgICAgICBpZiAoY3VzdG9tRGlhbG9nLnN0eWxlID09IDApIHsKICAgICAgICAgICAgX3RoaXM0LmN1c3RvbURpYWxvZ1Nob3coewogICAgICAgICAgICAgIGFsaWFzOiBhbGlhcywKICAgICAgICAgICAgICBjdXN0b21EaWFsb2c6IGN1c3RvbURpYWxvZwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF90aGlzNC5jdXN0b21EaWFsb2dUcmVlU2hvdyh7CiAgICAgICAgICAgICAgYWxpYXM6IGFsaWFzLAogICAgICAgICAgICAgIGN1c3RvbURpYWxvZzogY3VzdG9tRGlhbG9nCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7fQogICAgICB9KTsKICAgIH0sCiAgICAvL+WIpOaWreaVsOaNruaYr+WQpuWMheWQq+afkOS4quWvueixoe+8jOW5tui/lOWbnuaVsOaNruWMheWQq+WvueixoeeahOS4i+aghwogICAgaW5kZXhBcnJheTogZnVuY3Rpb24gaW5kZXhBcnJheShhcnJheSwgaXRlbSkgewogICAgICBpZiAoYXJyYXkubGVuZ3RoID09IDApIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShhcnJheVtpXSkgPT0gSlNPTi5zdHJpbmdpZnkoaXRlbSkpIHsKICAgICAgICAgIHJldHVybiBpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9LAogICAgLy/ngrnlh7vliJfooajmn5DkuIDkuKrlpI3pgInmoYbml7bop6blj5EKICAgIG9uVGFibGVTZWxlY3Q6IGZ1bmN0aW9uIG9uVGFibGVTZWxlY3Qocm93cywgcm93KSB7CiAgICAgIHRoaXMuaXNDdXJyZW50Q2hhbmdlID0gZmFsc2U7CiAgICAgIC8v5Yik5pat54K55Ye75YiX6KGo5pWw5o2u5pe25aSN6YCJ5qGG5piv5ZCm5Yu+6YCJICBzZWxlY3RlZO+8mnRydWXkuI3li77pgInvvIxmYWxzZeWLvumAiQogICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdE9yZ3MgJiYgdGhpcy5zZWxlY3RPcmdzLmxlbmd0aCA+IDAgJiYgdGhpcy5pbmRleEFycmF5KHRoaXMuc2VsZWN0T3Jncywgcm93KSAhPT0gLTE7CiAgICAgIGlmIChzZWxlY3RlZCkgewogICAgICAgIHRoaXMuaXNDdXJyZW50Q2hhbmdlID0gdHJ1ZTsKICAgICAgICB2YXIgcmVzID0gdGhpcy5pbmRleEFycmF5KHRoaXMuc2VsZWN0T3Jncywgcm93KTsKICAgICAgICB0aGlzLnNlbGVjdE9yZ3Muc3BsaWNlKHJlcywgMSk7CiAgICAgIH0KICAgIH0sCiAgICAvL+eCueWHu+WIl+ihqOafkOS4gOadoeaVsOaNruaXtuinpuWPkQogICAgb3JnUm93Q2xpY2s6IGZ1bmN0aW9uIG9yZ1Jvd0NsaWNrKHJvdywgY29sdW1uLCBldmVudCkgewogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7CiAgICAgICAgJChldmVudC5jdXJyZW50VGFyZ2V0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdKS50cmlnZ2VyKCJjbGljayIpOwogICAgICAgIHRoaXMuc2VsZWN0T3JncyA9IFtdOwogICAgICAgIHRoaXMuc2VsZWN0T3Jncy5wdXNoKHJvdyk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtICE9IDEpIHsKICAgICAgICB0aGlzLmlzQ3VycmVudENoYW5nZSA9IGZhbHNlOwogICAgICAgIC8v5Yik5pat54K55Ye75YiX6KGo5pWw5o2u5pe25aSN6YCJ5qGG5piv5ZCm5Yu+6YCJICBzZWxlY3RlZO+8mnRydWXkuI3li77pgInvvIxmYWxzZeWLvumAiQogICAgICAgIHZhciBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0T3JncyAmJiB0aGlzLnNlbGVjdE9yZ3MubGVuZ3RoID4gMCAmJiB0aGlzLmluZGV4QXJyYXkodGhpcy5zZWxlY3RPcmdzLCByb3cpICE9PSAtMTsKICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKICAgICAgICAgIHRoaXMuaXNDdXJyZW50Q2hhbmdlID0gdHJ1ZTsKICAgICAgICAgIHZhciByZXMgPSB0aGlzLmluZGV4QXJyYXkodGhpcy5zZWxlY3RPcmdzLCByb3cpOwogICAgICAgICAgdGhpcy5zZWxlY3RPcmdzLnNwbGljZShyZXMsIDEpOwogICAgICAgIH0KICAgICAgICB0aGlzLiRyZWZzLm9yZ1RhYmxlLnRvZ2dsZVJvd1NlbGVjdGlvbihyb3cpOwogICAgICB9CiAgICB9LAogICAgLy/liJfooajlpI3pgInmoYbmnInmlLnlj5jml7bop6blj5EKICAgIG9yZ1RhYmxlU2VsZWN0aW9uOiBmdW5jdGlvbiBvcmdUYWJsZVNlbGVjdGlvbihzZWxlY3Rpb24pIHsKICAgICAgLy/lpJrpgIkKICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSAhPSAxICYmICF0aGlzLmlzQ3VycmVudENoYW5nZSkgewogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoID09IDEgJiYgKCF0aGlzLnNlbGVjdE9yZ3MgfHwgdGhpcy5zZWxlY3RPcmdzLmxlbmd0aCA9PSAwKSkgewogICAgICAgICAgICB0aGlzLnNlbGVjdE9yZ3MgPSBzZWxlY3Rpb247CiAgICAgICAgICB9IGVsc2UgaWYgKCghdGhpcy5zZWxlY3RPcmdzIHx8IHRoaXMuc2VsZWN0T3Jncy5sZW5ndGggPT0gMCkgJiYgc2VsZWN0aW9uLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdE9yZ3MpIHsKICAgICAgICAgICAgICB0aGlzLnNlbGVjdE9yZ3MgPSBbXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKHZhciBpID0gc2VsZWN0aW9uLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RPcmdzLnB1c2goc2VsZWN0aW9uW2ldKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yICh2YXIgX2kyID0gc2VsZWN0aW9uLmxlbmd0aCAtIDE7IF9pMiA+PSAwOyBfaTItLSkgewogICAgICAgICAgICAgIHRoaXMuc2VsZWN0T3Jncy5wdXNoKHNlbGVjdGlvbltfaTJdKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGRpYWxvZ0NvbmZpcm06IGZ1bmN0aW9uIGRpYWxvZ0NvbmZpcm0oKSB7CiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nU2hvd0xpc3QgPSBmYWxzZTsKICAgICAgdGhpcy5jYWxhY0lucHV0U3VmZml4SGVpZ2h0KCk7CiAgICAgIHRoaXMuc3luY0lucHV0VmFsdWUoKTsKICAgICAgLy8gdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXREaWFsb2dEYXRhIiwgW10pOwogICAgfSwKICAgIC8v6YeN572uCiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7CiAgICAgIHRoaXMucXVlcnlQYXJhbSA9ICIiOwogICAgICB0aGlzLnNlYXJjaCgpOwogICAgfSwKICAgIC8v5p+l6K+iCiAgICBzZWFyY2g6IGZ1bmN0aW9uIHNlYXJjaCgpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHZhciBxdWVyeXMgPSBbXTsgLy/mn6Xor6LmnaHku7YKICAgICAgdmFyIHF1ZXJ5RmlsdGVyID0ge307CiAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLnBhZ2luYXRpb24pID09ICJ7fSIpIHsKICAgICAgICB0aGlzLnBhZ2luYXRpb24gPSB7CiAgICAgICAgICAicGFnZSI6ICIxIiwKICAgICAgICAgICJwYWdlU2l6ZSI6ICIxMCIsCiAgICAgICAgICAic2hvd1RvdGFsIjogInRydWUiCiAgICAgICAgfTsKICAgICAgfQogICAgICB2YXIgcGFnZUJlYW4gPSB7CiAgICAgICAgcGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbgogICAgICB9OwogICAgICBpZiAodGhpcy5xdWVyeVBhcmFtICE9ICIiKSB7CiAgICAgICAgdmFyIGNvbmRpdGlvbmZpZWxkID0gSlNPTi5wYXJzZSh0aGlzLmN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7CiAgICAgICAgY29uZGl0aW9uZmllbGQuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgcXVlcnlzLnB1c2goewogICAgICAgICAgICBwcm9wZXJ0eTogaXRlbS5maWVsZCwKICAgICAgICAgICAgdmFsdWU6IF90aGlzNS5xdWVyeVBhcmFtLAogICAgICAgICAgICBncm91cDogIm1haW4iLAogICAgICAgICAgICBvcGVyYXRpb246ICJMSUtFIiwKICAgICAgICAgICAgcmVsYXRpb246ICJPUiIKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CgogICAgICAvL+WvueivneahhuaMieihqOWNleWtl+auteafpeivou+8iOWPguaVsOS8oOWFpeeahO+8iQogICAgICB2YXIgYmluZExpc3QgPSB0aGlzLmN1c3RkaWFsb2cuY3VzdERpYWxvZy5jb25kaXRpb25zOwogICAgICBpZiAoYmluZExpc3QubGVuZ3RoID4gMCkgewogICAgICAgIHZhciBwSW5zdCA9IHV0aWxzLmdldEluc3RhbmNlQnlUYWcodGhpcywgJ2h0LWRhdGF2aWV3LXJ1bnRpbWUtdGVtcGxhdGUnKTsKICAgICAgICBiaW5kTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHsKICAgICAgICAgIC8v57uR5a6a6KGo5Y2V5a2X5q61CiAgICAgICAgICBpZiAoZWxlLmRlZmF1bHRUeXBlID09ICczJyAmJiBlbGUuYmluZCAmJiBwSW5zdC5zZWFyY2hGb3JtKSB7CiAgICAgICAgICAgIHZhciB2YWx1ZSA9ICIiOwogICAgICAgICAgICBmb3IgKHZhciBpdGVtIGluIHBJbnN0LnNlYXJjaEZvcm0pIHsKICAgICAgICAgICAgICBpZiAoZWxlLmJpbmQudG9Mb3dlckNhc2UoKSA9PSBpdGVtLnRvTG93ZXJDYXNlKCkpIHsKICAgICAgICAgICAgICAgIHZhbHVlID0gcEluc3Quc2VhcmNoRm9ybVtpdGVtXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICAgcXVlcnlzLnB1c2goewogICAgICAgICAgICAgICAgcHJvcGVydHk6IGVsZS5maWVsZCwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgICAgICAgIGdyb3VwOiAnbWFpbicsCiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdMSUtFJywKICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAnQU5EJwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKHF1ZXJ5cy5sZW5ndGggPiAwKSB7CiAgICAgICAgcXVlcnlGaWx0ZXIgPSB7CiAgICAgICAgICBwYWdlQmVhbjogdGhpcy5wYWdpbmF0aW9uLAogICAgICAgICAgcXVlcnlzOiBxdWVyeXMKICAgICAgICB9OwogICAgICAgIHRoaXMuY3VzdG9tRGlhbG9nLnBhZ2VCZWFuID0gcXVlcnlGaWx0ZXI7CiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9nZXRsaXN0SnNvbiIsIHRoaXMuY3VzdG9tRGlhbG9nKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIF90aGlzNS5jaGVja0xpc3QoKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmN1c3RvbURpYWxvZy5wYWdlQmVhbiA9IHBhZ2VCZWFuOwogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvZ2V0bGlzdEpzb24iLCB0aGlzLmN1c3RvbURpYWxvZykudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczUuY2hlY2tMaXN0KCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICAvL+agkeW9ouafpeivogogICAgc2VhcmNoVHJlZTogZnVuY3Rpb24gc2VhcmNoVHJlZShyZXF1ZXN0UGFyYW1zKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICAvLyBpZiAodGhpcy5wcm9wczEubGVuZ3RoIDwgMSkgewogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL2dldFRyZWVEYXRhIiwgcmVxdWVzdFBhcmFtcykudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgaWYgKF90aGlzNi5jdXN0b21EaWFsb2cuZGlzcGxheWZpZWxkICYmIF90aGlzNi5jdXN0b21EaWFsb2cucmVzdWx0ZmllbGQpIHsKICAgICAgICAgIHZhciBkaXNwbGF5ZmllbGQgPSBKU09OLnBhcnNlKF90aGlzNi5jdXN0b21EaWFsb2cuZGlzcGxheWZpZWxkKTsKICAgICAgICAgIF90aGlzNi5kaXNwbGF5ZmllbGQgPSBkaXNwbGF5ZmllbGQ7CiAgICAgICAgICBfdGhpczYuZGVmYXVsdFByb3BzLmxhYmVsID0gZGlzcGxheWZpZWxkLmRpc3BsYXlOYW1lOwogICAgICAgICAgdmFyIHJlc3VsdGZpZWxkID0gSlNPTi5wYXJzZShfdGhpczYuY3VzdG9tRGlhbG9nLnJlc3VsdGZpZWxkKTsKICAgICAgICAgIF90aGlzNi50cmVlRGF0YSA9IHJlczsKICAgICAgICAgIF90aGlzNi5wcm9wczEgPSBfdGhpczYudG9UcmVlRGF0YShyZXMsIGRpc3BsYXlmaWVsZC5pZCwgZGlzcGxheWZpZWxkLnBpZCwgZGlzcGxheWZpZWxkLmRpc3BsYXlOYW1lLCBkaXNwbGF5ZmllbGQucHZhbHVlID8gZGlzcGxheWZpZWxkLnB2YWx1ZSA6ICIwIiwgcmVzdWx0ZmllbGQpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIC8vIH0KICAgIH0sCiAgICAvLyDlkIzmraXpgInmi6nnu5PmnpwKICAgIHN5bmNJbnB1dFZhbHVlOiBmdW5jdGlvbiBzeW5jSW5wdXRWYWx1ZSgpIHsKICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CiAgICAgIHZhciBzdWJJbmRleCA9IG51bGw7CiAgICAgIGlmICh0aGlzLiRlbCkgewogICAgICAgIHN1YkluZGV4ID0gdXRpbHMuZ2V0U29tZUF0dHJpYnV0ZUZyb21QYXJlbnRFbGVtZW50KHRoaXMuJGVsLCAiZGF0YS1pbmRleCIpOwogICAgICB9CiAgICAgIHZhciByZXR1cm5TdHIgPSBKU09OLnBhcnNlKHRoaXMuY3VzdG9tRGlhbG9nLnJlc3VsdGZpZWxkKTsKICAgICAgLy/mi7/liLDov5Tlm57nmoTlrZfmrrUKICAgICAgdmFyIGZpZWxkID0gbmV3IEFycmF5KFtyZXR1cm5TdHIubGVuZ3RoXSk7CiAgICAgIHZhciBjb21tZW50ID0gbmV3IEFycmF5KFtyZXR1cm5TdHIubGVuZ3RoXSk7CiAgICAgIHZhciBzdHIgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXR1cm5TdHIubGVuZ3RoOyBpKyspIHsKICAgICAgICBmaWVsZFtpXSA9IHRoaXMuY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAiZGF0YVNvdXJjZSIgPyByZXR1cm5TdHJbaV0uZmllbGQudG9Mb3dlckNhc2UoKSA6IHJldHVyblN0cltpXS5maWVsZDsKICAgICAgICBjb21tZW50W2ldID0gdGhpcy5jdXN0b21EaWFsb2cuZHNUeXBlID09ICJkYXRhU291cmNlIiA/IHJldHVyblN0cltpXS5jb21tZW50LnRvTG93ZXJDYXNlKCkgOiByZXR1cm5TdHJbaV0uY29tbWVudDsKICAgICAgfQogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICB2YXIgcyA9IHRoaXMuc2VsZWN0T3JnczsKICAgICAgdGhpcy5zaG93RGF0YSA9IF90b0NvbnN1bWFibGVBcnJheSh0aGlzLnNlbGVjdE9yZ3MpOwogICAgICB0aGlzLmNoZWNrQm94RGF0YUFsbCA9IF90b0NvbnN1bWFibGVBcnJheSh0aGlzLnNlbGVjdE9yZ3MpOwogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7CiAgICAgICAgcyA9IHRoaXMuc2VsZWN0T3JnczsKICAgICAgfQogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7CiAgICAgICAgdmFyIHRlbXAgPSAiIjsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHRlbXAgKz0gJyInICsgY29tbWVudFtpXSArICciOiInICsgc1swXVtmaWVsZFtpXV0gKyAnIiwnOwogICAgICAgIH0KICAgICAgICBpZiAodGVtcCAhPSAiIikgewogICAgICAgICAgdGVtcCA9ICJ7IiArIHRlbXAuc3Vic3RyaW5nKDAsIHRlbXAubGVuZ3RoIC0gMSkgKyAifSI7CiAgICAgICAgfQogICAgICAgIHN0ci5wdXNoKEpTT04ucGFyc2UodGVtcCkpOwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIHRlbXAgPSAiIjsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29tbWVudC5sZW5ndGg7IGorKykgewogICAgICAgICAgICB0ZW1wICs9ICciJyArIGNvbW1lbnRbal0gKyAnIjoiJyArIHNbaV1bZmllbGRbal1dICsgJyIsJzsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0ZW1wICE9ICIiKSB7CiAgICAgICAgICAgIHRlbXAgPSAieyIgKyB0ZW1wLnN1YnN0cmluZygwLCB0ZW1wLmxlbmd0aCAtIDEpICsgIn0iOwogICAgICAgICAgfQogICAgICAgICAgc3RyLnB1c2goSlNPTi5wYXJzZSh0ZW1wKSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBjb25zdCBwSW5zdCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZSh0aGlzKTsKICAgICAgdmFyIHBJbnN0ID0gdXRpbHMuZ2V0SW5zdGFuY2VCeVRhZyh0aGlzLCBbJ2h0LWRhdGF2aWV3LXJ1bnRpbWUtdGVtcGxhdGUnLCAiaHQtcnVudGltZS10ZW1wbGF0ZSJdKTsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdGhpcy5jdXN0ZGlhbG9nLmN1c3REaWFsb2cubWFwcGluZ0NvbmYuZm9yRWFjaChmdW5jdGlvbiAoY29uKSB7CiAgICAgICAgdmFyIHZhbCA9ICIiOwogICAgICAgIHZhciBmcm9tID0gIiI7CiAgICAgICAgaWYgKF90aGlzLmN1c3RvbURpYWxvZy5kc1R5cGUgPT0gInJlc3RmdWwiKSB7CiAgICAgICAgICBmcm9tID0gY29uLmZyb207CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZyb20gPSBjb24uZnJvbS50b0xvd2VyQ2FzZSgpOwogICAgICAgIH0KICAgICAgICBzdHIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgdmFsICs9IGl0ZW1bZnJvbV0gKyAiLCI7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHZhbCAhPSAiIikgewogICAgICAgICAgdmFsID0gdmFsLnN1YnN0cmluZygwLCB2YWwubGVuZ3RoIC0gMSk7CiAgICAgICAgfQogICAgICAgIF90aGlzNy4kZW1pdCgiaW5wdXQiLCB2YWwpOwogICAgICAgIGlmIChfdGhpczcuYXR0ZXIgPT0gImRhdGEuIiArIGNvblsidGFyZ2V0Il1bMF0pIHsKICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKHBJbnN0LCAiZGF0YS4iICsgY29uWyJ0YXJnZXQiXVswXSwgdmFsLCBzdWJJbmRleCk7CiAgICAgICAgfSBlbHNlIGlmIChfdGhpczcuYXR0ZXIuaW5kZXhPZigic2VhcmNoRm9ybSIpICE9IC0xKSB7CiAgICAgICAgICBpZiAoX3RoaXM3LmlzRnJvbUxpc3QpIHsKICAgICAgICAgICAgcEluc3QuJHNldChwSW5zdC5zZWFyY2hGb3JtLCBjb25bInRhcmdldCJdWzBdLCB2YWwpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgoX3RoaXMsICJzZWFyY2hGb3JtLiIgKyBjb25bInRhcmdldCJdWzBdLCB2YWwuc3Vic3RyaW5nKDAsIHZhbC5sZW5ndGggLSAxKSwgc3ViSW5kZXgpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aChwSW5zdCwgImRhdGEuIiArIGNvblsidGFyZ2V0Il1bMF0sIHZhbC5zdWJzdHJpbmcoMCwgdmFsLmxlbmd0aCAtIDEpLCBzdWJJbmRleCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICAvL+WPlua2iOaMiemSrgogICAgZGlhbG9nQ2FuY2VsOiBmdW5jdGlvbiBkaWFsb2dDYW5jZWwoKSB7CiAgICAgIHZhciBfdGhpczggPSB0aGlzOwogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICB0aGlzXy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXREaWFsb2dEYXRhIiwgW10pLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXNfLmN1c3RvbURpYWxvZ1Nob3dMaXN0ID0gZmFsc2U7CiAgICAgICAgLy/liKTmlq3mmK/lkKbmmK/ngrnlh7vkuobnoa7orqTlho3ngrnlh7vlj5bmtojnmoQgIGlucHV0VmFs5rKh5pyJ5YC85YiZ6KGo56S655u05o6l54K55Ye755qE5Y+W5raICiAgICAgICAgaWYgKCF0aGlzXy5pbnB1dFZhbCkgewogICAgICAgICAgdGhpc18uc2VsZWN0T3JncyA9IFtdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzXy5zZWxlY3RPcmdzID0gX3RvQ29uc3VtYWJsZUFycmF5KHRoaXNfLnNob3dEYXRhKTsKICAgICAgICAgIF90aGlzOC5jaGVja0JveERhdGFBbGwgPSBfdG9Db25zdW1hYmxlQXJyYXkodGhpc18uc2VsZWN0T3Jncyk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICBkaWFsb2dUcmVlQ29uZmlybTogZnVuY3Rpb24gZGlhbG9nVHJlZUNvbmZpcm0oKSB7CiAgICAgIHZhciBfdGhpczkgPSB0aGlzOwogICAgICB0aGlzLmNhbGFjSW5wdXRTdWZmaXhIZWlnaHQoKTsKICAgICAgdmFyIHN1YkluZGV4ID0gbnVsbDsKICAgICAgaWYgKHRoaXMuJGVsKSB7CiAgICAgICAgc3ViSW5kZXggPSB1dGlscy5nZXRTb21lQXR0cmlidXRlRnJvbVBhcmVudEVsZW1lbnQodGhpcy4kZWwsICJkYXRhLWluZGV4Iik7CiAgICAgIH0KICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXREaWFsb2dEYXRhIiwgW10pOwogICAgICB2YXIgcmV0dXJuU3RyID0gSlNPTi5wYXJzZSh0aGlzLmN1c3RvbURpYWxvZy5yZXN1bHRmaWVsZCk7CiAgICAgIHZhciBmaWVsZCA9IG5ldyBBcnJheShbcmV0dXJuU3RyLmxlbmd0aF0pOwogICAgICB2YXIgY29tbWVudCA9IG5ldyBBcnJheShbcmV0dXJuU3RyLmxlbmd0aF0pOwogICAgICB2YXIgc3RyID0gW107CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0dXJuU3RyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZmllbGRbaV0gPSByZXR1cm5TdHJbaV0uZmllbGQ7CiAgICAgICAgY29tbWVudFtpXSA9IHJldHVyblN0cltpXS5jb21tZW50OwogICAgICB9CiAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpIHsKICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLnByb3BzRGF0YVswXTsKICAgICAgICB2YXIgdGVtcCA9ICIiOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudC5sZW5ndGg7IGkrKykgewogICAgICAgICAgdGVtcCArPSAnIicgKyBjb21tZW50W2ldICsgJyI6IicgKyBub2Rlc1tmaWVsZFtpXV0gKyAnIiwnOwogICAgICAgIH0KICAgICAgICBpZiAodGVtcCAhPSAiIikgewogICAgICAgICAgdGVtcCA9ICJ7IiArIHRlbXAuc3Vic3RyaW5nKDAsIHRlbXAubGVuZ3RoIC0gMSkgKyAifSI7CiAgICAgICAgfQogICAgICAgIHN0ci5wdXNoKEpTT04ucGFyc2UodGVtcCkpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBub2RlcyA9IHRoaXMucHJvcHNEYXRhOwogICAgICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGspIHsKICAgICAgICAgIHZhciB0ZW1wID0gIiI7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGVtcCArPSAnIicgKyBjb21tZW50W2ldICsgJyI6IicgKyBub2Rlc1tmaWVsZFtpXV0gKyAnIiwnOwogICAgICAgICAgICB0ZW1wICs9ICciJyArIGNvbW1lbnRbaV0gKyAnIjoiJyArIG5vZGVzW2tdW2ZpZWxkW2ldXSArICciLCc7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGVtcCAhPSAiIikgewogICAgICAgICAgICB0ZW1wID0gInsiICsgdGVtcC5zdWJzdHJpbmcoMCwgdGVtcC5sZW5ndGggLSAxKSArICJ9IjsKICAgICAgICAgIH0KICAgICAgICAgIHN0ci5wdXNoKEpTT04ucGFyc2UodGVtcCkpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8vIGNvbnN0IHBJbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKHRoaXMpOwogICAgICB2YXIgcEluc3QgPSB1dGlscy5nZXRJbnN0YW5jZUJ5VGFnKHRoaXMsIFsnaHQtZGF0YXZpZXctcnVudGltZS10ZW1wbGF0ZScsICJodC1ydW50aW1lLXRlbXBsYXRlIl0pOwogICAgICB0aGlzLmN1c3RkaWFsb2cuY3VzdERpYWxvZy5tYXBwaW5nQ29uZi5mb3JFYWNoKGZ1bmN0aW9uIChjb24pIHsKICAgICAgICB2YXIgdmFsID0gIiI7CiAgICAgICAgc3RyLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIHZhbCArPSBpdGVtW2Nvbi5mcm9tXSArICIsIjsKICAgICAgICB9KTsKICAgICAgICBpZiAoX3RoaXM5LmF0dGVyID09ICJkYXRhLiIgKyBjb25bInRhcmdldCJdWzBdKSB7CiAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aChwSW5zdCwgImRhdGEuIiArIGNvblsidGFyZ2V0Il1bMF0sIHZhbC5zdWJzdHJpbmcoMCwgdmFsLmxlbmd0aCAtIDEpLCBzdWJJbmRleCk7CiAgICAgICAgfSBlbHNlIGlmIChfdGhpczkuYXR0ZXIgPT0gInNlYXJjaEZvcm0uIiArIGNvblsidGFyZ2V0Il1bMF0pIHsKICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKHBJbnN0LCAic2VhcmNoRm9ybS4iICsgY29uWyJ0YXJnZXQiXVswXSwgdmFsLnN1YnN0cmluZygwLCB2YWwubGVuZ3RoIC0gMSksIHN1YkluZGV4KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgocEluc3QsICJkYXRhLiIgKyBjb25bInRhcmdldCJdWzBdLCB2YWwuc3Vic3RyaW5nKDAsIHZhbC5sZW5ndGggLSAxKSwgc3ViSW5kZXgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIC8vdGhpcy4kZW1pdCgiaW5wdXQiLCBKU09OLnN0cmluZ2lmeShzdHIpKTsKICAgICAgdGhpcy5zaG93RGF0YSA9IF90b0NvbnN1bWFibGVBcnJheSh0aGlzLnByb3BzRGF0YSk7IC8v5Zue5pi+55qE5YC8CiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nU2hvd1RyZWUgPSBmYWxzZTsKICAgIH0sCiAgICBkaWFsb2dDYW5jZWxUcmVlOiBmdW5jdGlvbiBkaWFsb2dDYW5jZWxUcmVlKCkgewogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldERpYWxvZ0RhdGEiLCBbXSk7CiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nU2hvd1RyZWUgPSBmYWxzZTsKICAgIH0sCiAgICBnZXRDaGVja2VkOiBmdW5jdGlvbiBnZXRDaGVja2VkKGRhdGEsIGNoZWNrZWQsIGluZGV0ZXJtaW5hdGUpIHsKICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PT0gMSkgewogICAgICAgIHRoaXMucHJvcHNEYXRhID0gW107CiAgICAgICAgdGhpcy5wcm9wc0RhdGEucHVzaChkYXRhKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnByb3BzRGF0YSA9IHRoaXMuJHJlZnMudHJlZS5nZXRDaGVja2VkTm9kZXMoKTsKICAgICAgfQogICAgfSwKICAgIHRyZWVDbGljazogZnVuY3Rpb24gdHJlZUNsaWNrKGRhdGEsIG4sIGkpIHsKICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PT0gMSkgewogICAgICAgIHRoaXMucHJvcHNEYXRhID0gW107CiAgICAgICAgdGhpcy5wcm9wc0RhdGEucHVzaChkYXRhKTsKICAgICAgfQogICAgfSwKICAgIGNsZWFyQWxsU2VsZWN0T3JnczogZnVuY3Rpb24gY2xlYXJBbGxTZWxlY3RPcmdzKCkgewogICAgICB0aGlzLnNlbGVjdE9yZ3MgPSBudWxsOwogICAgICB0aGlzLiRyZWZzLm9yZ1RhYmxlLmNsZWFyU2VsZWN0aW9uKCk7CiAgICB9LAogICAgcmVtb3ZlU2VsZWN0T3JnOiBmdW5jdGlvbiByZW1vdmVTZWxlY3RPcmcoaXRlbSkgewogICAgICB2YXIgX3RoaXMxMCA9IHRoaXM7CiAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpIHsKICAgICAgICB0aGlzLiRlbWl0KCJpbnB1dCIsICIiKTsKICAgICAgICB0aGlzLnNlbGVjdE9yZ3Muc3BsaWNlKGl0ZW0sIDEpOwogICAgICAgIHRoaXMuc2hvd0RhdGEuc3BsaWNlKGl0ZW0sIDEpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuaW5wdXRWYWwuc3BsaWNlKGl0ZW0sIDEpOwogICAgICAgIC8vIGxldCByZW1vdmVJZCA9IHRoaXMuc2hvd0RhdGFbaXRlbV07CiAgICAgICAgLy/moJHlvaIKICAgICAgICBpZiAodGhpcy5wcm9wc0RhdGEubGVuZ3RoID4gMCkgewogICAgICAgICAgdGhpcy5wcm9wc0RhdGEuc3BsaWNlKGl0ZW0sIDEpOwogICAgICAgIH0KICAgICAgICAvL+WIl+ihqAogICAgICAgIGlmICh0aGlzLnNlbGVjdE9yZ3MgIT0gbnVsbCkgewogICAgICAgICAgdGhpcy5zZWxlY3RPcmdzLnNwbGljZShpdGVtLCAxKTsKICAgICAgICAgIHRoaXMuY2hlY2tCb3hEYXRhQWxsLnNwbGljZShpdGVtLCAxKTsKICAgICAgICAgIHRoaXMuc2VsZWN0T3Jncy5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHsKICAgICAgICAgICAgLy8gaWYoaXRlbS5pZCA9PXJlbW92ZUlkICl7CiAgICAgICAgICAgIF90aGlzMTAuaXNDdXJyZW50Q2hhbmdlID0gdHJ1ZTsKICAgICAgICAgICAgX3RoaXMxMC50b2dnbGVSb3dTZWxlY3Rpb24ocm93LCBmYWxzZSk7CiAgICAgICAgICAgIC8vIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICB0aGlzLmNhbGFjSW5wdXRTdWZmaXhIZWlnaHQoKTsKICAgICAgICB2YXIgdmFsdWUgPSAiIjsKICAgICAgICB0aGlzLmlucHV0VmFsLmZvckVhY2goZnVuY3Rpb24gKHZhbCkgewogICAgICAgICAgdmFsdWUgKz0gdmFsLnZhbHVlICsgIiwiOwogICAgICAgIH0pOwogICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7CiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCB2YWx1ZS5sZW5ndGggLSAxKTsKICAgICAgICB9CiAgICAgICAgLyppZih2YWx1ZSE9IiIpew0KICAgICAgICAgIHZhbHVlPXZhbHVlKyJ8fCIrSlNPTi5zdHJpbmdpZnkodGhpcy5zaG93RGF0YSk7DQogICAgICAgIH0qLwogICAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgdmFsdWUpOwogICAgICB9CiAgICB9LAogICAgY2FsYWNJbnB1dFN1ZmZpeEhlaWdodDogZnVuY3Rpb24gY2FsYWNJbnB1dFN1ZmZpeEhlaWdodCgpIHsKICAgICAgdmFyIF90aGlzMTEgPSB0aGlzOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAoIV90aGlzMTEuJHJlZnMudGFnU3BhbnMpIHJldHVybjsKICAgICAgICBpZiAoX3RoaXMxMS4kcmVmcy50YWdTcGFucy5vZmZzZXRIZWlnaHQpIHsKICAgICAgICAgIF90aGlzMTEuaW5wdXRTdWZmaXhIZWlnaHQgPSBfdGhpczExLiRyZWZzLnRhZ1NwYW5zLm9mZnNldEhlaWdodCArIDU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzMTEuaW5wdXRTdWZmaXhIZWlnaHQgPSAzMDsKICAgICAgICB9CiAgICAgICAgLy8g6Kem5Y+R6aqM6K+BCiAgICAgICAgX3RoaXMxMS4kdmFsaWRhdG9yLnZhbGlkYXRlKCk7CiAgICAgIH0sIDApOwogICAgfSwKICAgIGN1c3RvbURpYWxvZ1Nob3c6IGZ1bmN0aW9uIGN1c3RvbURpYWxvZ1Nob3cocGFnZVBhcmFtKSB7CiAgICAgIHZhciBfdGhpczEyID0gdGhpczsKICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93TGlzdCA9IHRydWU7CiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nID0gcGFnZVBhcmFtLmN1c3RvbURpYWxvZzsKICAgICAgdGhpcy5jdXN0b21EaWFsb2cucXVlcnlVcmwgPSB0aGlzLmN1c3RvbURpYWxvZy5kc1R5cGUgPT0gImRhdGFTb3VyY2UiID8gIiR7Zm9ybX0vZm9ybS9jdXN0b21EaWFsb2cvdjEvZ2V0TGlzdERhdGE/YWxpYXM9IiArIHRoaXMuY3VzdG9tRGlhbG9nLmFsaWFzICsgIiZtYXBQYXJhbT0iICsgKHRoaXMuY3VzdG9tRGlhbG9nLm1hcFBhcmFtID8gdGhpcy5jdXN0b21EaWFsb2cubWFwUGFyYW0gOiAiIikgOiB0aGlzLmN1c3RvbURpYWxvZy51cmw7CiAgICAgIHZhciBjb25kaXRpb25maWVsZCA9IEpTT04ucGFyc2UodGhpcy5jdXN0b21EaWFsb2cuY29uZGl0aW9uZmllbGQpOwogICAgICBpZiAoIXRoaXMuY29tbWVudCAmJiBjb25kaXRpb25maWVsZC5sZW5ndGggPiAwKSB7CiAgICAgICAgY29uZGl0aW9uZmllbGQuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgaWYgKGl0ZW0uY29udHJvbGxlclR5cGUgPT0gMSAmJiBpdGVtLmRlZmF1bHRUeXBlID09IDEgJiYgaXRlbS5kYlR5cGUgPT0gInZhcmNoYXIiKSB7CiAgICAgICAgICAgIF90aGlzMTIuY29tbWVudCArPSBpdGVtLmNvbW1lbnQgKyAiLCI7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRoaXMuY29tbWVudCkgewogICAgICAgICAgdGhpcy5xdWVyeXNTaG93ID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuY29tbWVudCA9ICLpgJrov4ciICsgdGhpcy5jb21tZW50LnN1YnN0cmluZygwLCB0aGlzLmNvbW1lbnQubGVuZ3RoIC0gMSkgKyAi5p+l6K+iIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5sZW5ndGggPCAxKSB7CiAgICAgICAgdGhpcy5zZWFyY2goKTsKICAgICAgICB0aGlzLmRpc3BsYXlmaWVsZCA9IEpTT04ucGFyc2UocGFnZVBhcmFtLmN1c3RvbURpYWxvZy5kaXNwbGF5ZmllbGQpOwogICAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5kc1R5cGUgPT0gJ2RhdGFTb3VyY2UnKSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGlzcGxheWZpZWxkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRoaXMuZGlzcGxheWZpZWxkW2ldLmZpZWxkID0gdGhpcy5kaXNwbGF5ZmllbGRbaV0uZmllbGQudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodGhpcy5kaWFsb2dEYXRhLmxlbmd0aCA+IDEpIHsKICAgICAgICB0aGlzLnNlYXJjaCgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmRpc3BsYXlmaWVsZC5sZW5ndGggPT0gMCkgewogICAgICAgIHRoaXMuc2VhcmNoKCk7CiAgICAgICAgdGhpcy5kaXNwbGF5ZmllbGQgPSBKU09OLnBhcnNlKHBhZ2VQYXJhbS5jdXN0b21EaWFsb2cuZGlzcGxheWZpZWxkKTsKICAgICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuZHNUeXBlID09ICdkYXRhU291cmNlJykgewogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpc3BsYXlmaWVsZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0aGlzLmRpc3BsYXlmaWVsZFtpXS5maWVsZCA9IHRoaXMuZGlzcGxheWZpZWxkW2ldLmZpZWxkLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgY3VzdG9tRGlhbG9nVHJlZVNob3c6IGZ1bmN0aW9uIGN1c3RvbURpYWxvZ1RyZWVTaG93KHBhZ2VQYXJhbSkgewogICAgICB0aGlzLmN1c3RvbURpYWxvZyA9IHBhZ2VQYXJhbS5jdXN0b21EaWFsb2c7CiAgICAgIHZhciBjdXN0b21EaWFsb2cgPSB0aGlzLmN1c3RvbURpYWxvZzsKICAgICAgdmFyIG1hcFBhcmFtID0gIiI7CiAgICAgIGlmIChwYWdlUGFyYW0ucGFyYW0gIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgbWFwUGFyYW0gPSBKU09OLnN0cmluZ2lmeShwYWdlUGFyYW0ucGFyYW0pOwogICAgICAgIG1hcFBhcmFtID0gbWFwUGFyYW0uc3Vic3RyaW5nKDEsIG1hcFBhcmFtLmxlbmd0aCAtIDEpOwogICAgICB9CiAgICAgIHZhciByZXF1ZXN0VHlwZSA9IGN1c3RvbURpYWxvZy5kc1R5cGUgPT0gImRhdGFTb3VyY2UiID8gIkdFVCIgOiBjdXN0b21EaWFsb2cucmVxdWVzdFR5cGUgPyBjdXN0b21EaWFsb2cucmVxdWVzdFR5cGUgOiAiUE9TVCI7CiAgICAgIHZhciB1cmwgPSAiJHtmb3JtfS9mb3JtL2N1c3RvbURpYWxvZy92MS9nZXRUcmVlRGF0YT9hbGlhcz0iICsgcGFnZVBhcmFtLmFsaWFzICsgIiZtYXBQYXJhbT0iICsgbWFwUGFyYW07CiAgICAgIHZhciBwYXJhbXNPYmogPSB7fTsKICAgICAgaWYgKGN1c3RvbURpYWxvZy5kc1R5cGUgIT0gImRhdGFTb3VyY2UiKSB7CiAgICAgICAgdXJsID0gY3VzdG9tRGlhbG9nLnVybDsKICAgICAgICB2YXIgdGVtcGxhdGVQYSA9IGN1c3RvbURpYWxvZy5kYXRhUGFyYW07CiAgICAgICAgaWYgKGN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCkgewogICAgICAgICAgdmFyIGNvbmRpdGlvbnMgPSBKU09OLnBhcnNlKGN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbmRpdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGNvbiA9IGNvbmRpdGlvbnNbaV07CiAgICAgICAgICAgIGlmIChyZXF1ZXN0VHlwZSA9PSAiUE9TVCIpIHsKICAgICAgICAgICAgICBpZiAodGVtcGxhdGVQYSkgewogICAgICAgICAgICAgICAgdGVtcGxhdGVQYSA9IHRlbXBsYXRlUGEucmVwbGFjZShuZXcgUmVnRXhwKCJcXHsiICsgY29uLmZpZWxkICsgIlxcfSIsICJnIiksIGNvbi5kZWZhdWx0VmFsdWUpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwYXJhbXNPYmpbY29uLmZpZWxkXSA9IGNvbi5kZWZhdWx0VmFsdWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHZhciBsakNoYXIgPSB1cmwuaW5kZXhPZigiPyIpID09IC0xID8gIj8iIDogIiYiOwogICAgICAgICAgICAgIHVybCA9IHVybCArIGxqQ2hhciArIGNvbi5maWVsZCArICI9IiArIGNvbi5kZWZhdWx0VmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICh0ZW1wbGF0ZVBhKSB7CiAgICAgICAgICAgIHBhcmFtc09iaiA9IEpTT04ucGFyc2UodGVtcGxhdGVQYSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciByZXF1ZXN0UGFyYW1zID0ge307CiAgICAgIHJlcXVlc3RQYXJhbXMucmVxdWVzdFR5cGUgPSByZXF1ZXN0VHlwZTsKICAgICAgcmVxdWVzdFBhcmFtcy51cmwgPSB1cmw7CiAgICAgIHJlcXVlc3RQYXJhbXMucGFyYW1zT2JqID0gcGFyYW1zT2JqOwogICAgICB0aGlzLnNlYXJjaFRyZWUocmVxdWVzdFBhcmFtcyk7CiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nU2hvd1RyZWUgPSB0cnVlOwogICAgfSwKICAgIHRvVHJlZURhdGE6IGZ1bmN0aW9uIHRvVHJlZURhdGEoZGF0YSwgaWQsIHBpZCwgbmFtZSwgcHZhbHVlLCByZXR1cm5TdHIpIHsKICAgICAgLy8g5bu656uL5Liq5qCR5b2i57uT5p6ELOmcgOimgeWumuS5ieS4quacgOmhtuWxgueahOeItuiKgueCue+8jHB2YWx1ZeaYrzAKICAgICAgdmFyIHBhcmVudHMgPSBkYXRhLmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICByZXR1cm4gdmFsdWVbaWRdID09IHZhbHVlW3BpZF0gfHwgdmFsdWVbcGlkXSA9PSBudWxsIHx8IHZhbHVlW3BpZF0gPT0gcHZhbHVlOwogICAgICB9KTsKICAgICAgaWYgKCFwYXJlbnRzKSB7CiAgICAgICAgcGFyZW50cyA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIHZhbHVlW3BpZF0gIT09ICd1bmRlZmluZWQnICYmIHZhbHVlW3BpZF0gIT0gbnVsbCAmJiB2YWx1ZVtpZF0gIT0gdmFsdWVbcGlkXTsKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gcGFyZW50czsKICAgIH0sCiAgICBsb2FkVHJlZTogZnVuY3Rpb24gbG9hZFRyZWUobm9kZSwgcmVzb2x2ZSkgewogICAgICBpZiAobm9kZSAmJiAhQXJyYXkuaXNBcnJheShub2RlLmRhdGEpKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICByZXNvbHZlKHRoaXMudHJlZURhdGEuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIHZhbHVlW190aGlzLmRpc3BsYXlmaWVsZC5waWRdID09PSBub2RlLmRhdGFbX3RoaXMuZGlzcGxheWZpZWxkLmlkXTsKICAgICAgICB9KSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzb2x2ZShbXSk7CiAgICAgIH0KICAgIH0KICB9Cn07"},null]}