{"remainingRequest":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\flow\\flowAction.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\flow\\flowAction.vue","mtime":1705040076852},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgSW1hZ2VCcG0gZnJvbSAiQC9jb21wb25lbnRzL2Zsb3cvaW1hZ2VCcG0udnVlIjsNCmltcG9ydCBGb3JtQ29udGVudCBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy9mb3JtQ29udGVudC52dWUiOw0KLy9pbXBvcnQgT3BpbmlvblRleHQgZnJvbSAiQC9jb21wb25lbnRzL2NvbW1vbi9vcGluaW9uVGV4dC52dWUiOw0KLy9pbXBvcnQgRmlsZVVwbG9hZCBmcm9tICJAL2NvbXBvbmVudHMvY29tbW9uL2ZpbGVVcGxvYWQudnVlIjsNCmltcG9ydCB7IG1hcFN0YXRlIH0gZnJvbSAidnVleCI7DQppbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAiZWxlbWVudC11aSI7DQppbXBvcnQgVGFza1RvUmVqZWN0IGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvUmVqZWN0LnZ1ZSI7DQppbXBvcnQgVGFza1RvRGVsZWdhdGUgZnJvbSAiQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9EZWxlZ2F0ZS52dWUiOw0KaW1wb3J0IFRhc2tUb0NvcHlUbyBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0NvcHlUby52dWUiOw0KaW1wb3J0IFRhc2tUb0lucXUgZnJvbSAiQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9JbnF1LnZ1ZSI7DQppbXBvcnQgVGFza1RvRW5kUHJvY2VzcyBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0VuZFByb2Nlc3MudnVlIjsNCmltcG9ydCBUYXNrVG9UcmFucyBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb1RyYW5zLnZ1ZSI7DQppbXBvcnQgVGFza1RvQWRkU2lnbiBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0FkZFNpZ24udnVlIjsNCmltcG9ydCBUYXNrVG9EZWxheSBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0RlbGF5LnZ1ZSI7DQppbXBvcnQgVGFza1NlbGVjdERlc3RpbmF0aW9uIGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1NlbGVjdERlc3RpbmF0aW9uLnZ1ZSI7DQppbXBvcnQgVGFza1RvQXBwcm92ZUxpbmUgZnJvbSAiQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9BcHByb3ZlTGluZS52dWUiOw0KaW1wb3J0IHRhc2tUb1NpZ25TZXF1ZW5jZSBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb1NpZ25TZXF1ZW5jZS52dWUiOw0KaW1wb3J0IHRhc2tUb1NpZ25MaW5lIGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvU2lnbkxpbmUudnVlIjsNCmltcG9ydCB0YXNrVG9Db21wbGV0ZSBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0NvbXBsZXRlLnZ1ZSI7DQppbXBvcnQgdGFza1RvU2F2ZSBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb1NhdmUudnVlIjsNCmltcG9ydCB0YXNrVG9SZWFkIGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvUmVhZC52dWUiOw0KaW1wb3J0IHRhc2tUb0ZlZUJhY2sgZnJvbSAiQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9GZWVCYWNrLnZ1ZSI7DQppbXBvcnQgdGFza1RvSW5xdVJlcGx5IGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvSW5xdVJlcGx5LnZ1ZSI7DQppbXBvcnQgdXNlckFkZFNpZ25SZXBseSBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3VzZXJBZGRTaWduUmVwbHkudnVlIjsNCmltcG9ydCB0YXNrVG9SZXZva2UgZnJvbSAiQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9SZXZva2UudnVlIjsNCmltcG9ydCB1dGlscyBmcm9tICJAL3V0aWxzLmpzIjsNCmltcG9ydCB7IEJhc2U2NCB9IGZyb20gImpzLWJhc2U2NCI7DQppbXBvcnQgbW9tZW50IGZyb20gIm1vbWVudCI7IC8v5pel5pyf5qC85byP5YyW5o+S5Lu2DQppbXBvcnQgZm9ybSBmcm9tICJAL2FwaS9mb3JtLmpzIjsNCmltcG9ydCBmbG93IGZyb20gIkAvYXBpL2Zsb3cuanMiOw0KaW1wb3J0IGkxOG4gZnJvbSAiQC9sYW5nL2luZGV4LmpzIjsNCmltcG9ydCByZXEgZnJvbSAiQC9yZXF1ZXN0LmpzIjsNCmV4cG9ydCBkZWZhdWx0IHsNCiAgY29tcG9uZW50czogew0KICAgIEltYWdlQnBtLA0KICAgIEZvcm1Db250ZW50LA0KICAgIC8vT3BpbmlvblRleHQsDQogICAgLy9GaWxlVXBsb2FkLA0KICAgIFRhc2tUb1JlamVjdCwNCiAgICBUYXNrVG9EZWxlZ2F0ZSwNCiAgICBUYXNrVG9Db3B5VG8sDQogICAgVGFza1RvSW5xdSwNCiAgICBUYXNrVG9FbmRQcm9jZXNzLA0KICAgIFRhc2tUb1RyYW5zLA0KICAgIFRhc2tUb0FkZFNpZ24sDQogICAgVGFza1RvRGVsYXksDQogICAgVGFza1NlbGVjdERlc3RpbmF0aW9uLA0KICAgIFRhc2tUb0FwcHJvdmVMaW5lLA0KICAgIHRhc2tUb1NpZ25TZXF1ZW5jZSwNCiAgICB0YXNrVG9TaWduTGluZSwNCiAgICB0YXNrVG9Db21wbGV0ZSwNCiAgICB0YXNrVG9TYXZlLA0KICAgIHRhc2tUb1JlYWQsDQogICAgdGFza1RvRmVlQmFjaywNCiAgICB0YXNrVG9JbnF1UmVwbHksDQogICAgdXNlckFkZFNpZ25SZXBseSwNCiAgICB0YXNrVG9SZXZva2UNCiAgfSwNCiAgcHJvcHM6IFsNCiAgICAidGFza3MiLC8v5Lu75Yqh6K+m5oOFDQogICAgInRhc2tfc3RhdGUiLA0KICAgICJpbnN0SWQiLA0KICAgICJ0eXBlIiwNCiAgICAidGFza0lkIiwNCiAgICAiZXhlY0lkIiwNCiAgICAiZGVmSWQiLA0KICAgICJzdGF0dXMiLA0KICAgICJjaG9pY2VFeGN1dG9yIiwNCiAgICAianVtcFR5cGUiLA0KICAgICJpbnN0U3RhdHVzIiwNCiAgICAibGVhZGVySWQiLA0KICAgICJteVJlYWRUeXBlIiwNCiAgICAicmVhZElkIiwgLy/nn6XkvJrku7vliqHlvoXlip7kvKDpmIXku7vliqHnmoTkuLvplK5JRA0KICAgICJyZWFkRG9uZUlkIiwgLy/nn6XkvJrku7vliqHlt7Llip7kvKDpmIXku7vliqHnmoTkuLvplK5JRA0KICAgICJhcHByb3ZhbEFyZWEiLCAvL+WuoeaJueWMuuWfn+aYvuekuueahOWGheWuuQ0KICAgICJyZWZlck9waW5pb24iLCAvL+WFgeiuuOWPguiAg+aEj+ingSAo6YCJ5oup5ZCm77yM5YiZ5a6h5om55pe25LiN5YWB6K645Y+C6ICD5ZCM546v6IqC5YW25LuW5Lya562+5Lq65ZGY55qE5oSP6KeBKQ0KICAgICJub2RlVHlwZSIsIC8v5b2T5YmN5Lu75Yqh57G75Z6LDQogICAgIm5vZGVJZCIsIC8v5b2T5YmN5Lu75Yqh6IqC54K5DQogICAgImlzTG9vayIsDQogICAgInNwb25zb3JSZXZva2UiLC8v5YWB6K645Y+R6LW35Lq65pKk5Zue77yI6buY6K6k5LiN5Yu+6YCJ77yJDQogICAgIm9waW5pb25GaWVsZCIsIC8v5b2T5YmN6IqC54K55a6h5om55oSP6KeB5Zue5aGr5a2X5q61DQogICAgImFwcGVuZE9waW5pb24iLCAvL+aYr+WQpuimhuebluWuoeaJueaEj+ingQ0KICAgICJzaWduYXR1cmVGaWVsZCIsIC8v6Ieq5Yqo562+56ug5a2X5q61DQogICAgInNpZ25hdHVyZUNvdmVyIiwgLy/oh6rliqjnrb7nq6DmmK/lkKbopobnm5YNCiAgICAic2VjcmV0RnJlZSIsIC8v6Ieq5Yqo562+56ug5pe25piv5ZCm5YWN5a+GLA0KICAgICJkZWZLZXkiDQogIF0sDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIGlzTWs6IGZhbHNlLCAvL+aYr+WQpuaYr+aooeWdl+WMluW8gOWPkei/m+adpQ0KICAgICAgaXNEZDogZmFsc2UsIC8vIOaYr+WQpuaYr+WPquaYvuekuuWuoeaJuemhtemdog0KICAgICAgaXNHZHQ6IGZhbHNlLCAvL+aYr+WQpuaciea7muWKqOadoQ0KICAgICAgZGlhbG9nRm9ybVZpc2libGU6IGZhbHNlLA0KICAgICAgZGFpbG9nVGl0bGU6ICIiLA0KICAgICAgb3BpbmlvbjogIiIsDQogICAgICBpc0hhbmQ6ICIiLA0KICAgICAgc3RhdGU6ICIiLA0KICAgICAgY2FuTG9jazogIiIsDQogICAgICBmb3JtRGF0YTogIiIsDQogICAgICBhY3Rpb25OYW1lOiAiIiwNCiAgICAgIHRleHQ6ICIiLA0KICAgICAgZGlzYWJsZWQ6IHRydWUsDQogICAgICBidG5BbGlhczogIiIsIC8v6YCJ5oup55qE5oyJ6ZKuDQogICAgICB0b2tlbjogdXRpbHMuZ2V0VXJsS2V5KCJ0b2tlbiIpLA0KICAgICAgaXNBcHByb3ZhbE9waW5pb246IHRydWUsIC8v5piv5ZCm5pi+56S65a6h5om55oSP6KeBDQogICAgICBpc3pGaWxlOiB0cnVlLCAvL+aYr+WQpuaYvuekuuato+aWhw0KICAgICAgaXNGaWxlOiB0cnVlLCAvL+aYr+WQpuaYvuekuumZhOS7tg0KICAgICAgaXNQcm9jZXNzUmVjb3JkOiB0cnVlLCAvL+aYr+WQpuaYvuekuuWkhOeQhuiusOW9lQ0KICAgICAgaXNJbWFnZUJwbTogdHJ1ZSwgLy/mmK/lkKbmmL7npLrmtYHnqIvlm74NCiAgICAgIHRhc2tTdGF0dXNBcnJheTogWw0KICAgICAgICAiQVBQUk9WRUxJTkVJTkciLA0KICAgICAgICAiQVBQUk9WRUxJTkVFRCIsDQogICAgICAgICJTSUdOU0VRVUVOQ0VJTkciLA0KICAgICAgICAiU0lHTlNFUVVFTkNFRUQiLA0KICAgICAgICAiU0lHTkxJTkVJTkciLA0KICAgICAgICAiU0lHTkxJTkVFRCINCiAgICAgIF0sDQogICAgICBpc0hhbmc6IGZhbHNlLA0KICAgICAgb3BpbmlvbkZpbGVzOiAiIiwNCiAgICAgIGFwcGVuZFN0cjogdHJ1ZSwNCiAgICAgIGluaXRCb0F0dHI6ICcnLA0KICAgIH07DQogIH0sDQogIHdhdGNoOiB7DQogICAgc3RhdHVzOiBmdW5jdGlvbiAobmV3VmFsLCBvbGRWYWwpIHsNCiAgICAgIHRoaXMuc3RhdGUgPSBuZXdWYWw7IC8vbmV3VmFs5Y2z5pivc3RhdHVzDQogICAgICBpZiAoDQogICAgICAgIHRoaXMuc3RhdGUgIT0gIkNPUFlUTyIgJiYNCiAgICAgICAgdGhpcy5zdGF0ZSAhPSAiRk9MTE9XIiAmJg0KICAgICAgICB0aGlzLnN0YXRlICE9ICJDT01NVSINCiAgICAgICkgew0KICAgICAgICBsZXQgcGFyYW1zID0gew0KICAgICAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQsDQogICAgICAgICAgbGVhZGVySWQ6IHRoaXMubGVhZGVySWQsDQogICAgICAgICAgbm9kZVR5cGU6IHRoaXMubm9kZVR5cGUNCiAgICAgICAgfTsNCiAgICAgICAgLy/liKTmlq3mmK/lkKbmmK/mma7pgJrnlKjmiLfku7vliqHliqDnrb7lkI7nmoTlvoXlip7ku7vliqENCiAgICAgICAgaWYgKHRoaXMudGFza3MuYnBtVGFzay5wYXJlbnRJZCAhPSAiMCIpIHsNCiAgICAgICAgICBwYXJhbXMuaXNBZGRTaWduID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICAvL+mAmui/h+a1geeoi+WunuS+i0lE5ZKM5Lu75YqhSUTojrflj5blrqHmibnmhI/op4ENCiAgICAgICAgaWYgKHRoaXMudGFza0lkICYmIHRoaXMuaW5zdElkKSB7DQogICAgICAgICAgbGV0IGJwbVNhdmVPcGluaW9uID0geyBpbnN0SWQ6IHRoaXMuaW5zdElkLCB0YXNrSWQ6IHRoaXMudGFza0lkIH07DQogICAgICAgICAgZmxvdy5nZXRCcG1TYXZlT3BpbmlvbkJ5VGVhbShicG1TYXZlT3BpbmlvbikudGhlbihkYXRhID0+IHsNCiAgICAgICAgICAgIGlmIChkYXRhLnN0YXRlKSB7DQogICAgICAgICAgICAgIGlmIChkYXRhLnZhbHVlICE9ICIiKSB7DQogICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gZGF0YS52YWx1ZTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvdGFza0RldGFpbCIsIHBhcmFtcyk7IC8v6I635Y+W5pON5L2c5oyJ6ZKuDQogICAgICAgIHRoaXMuJHN0b3JlDQogICAgICAgICAgLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvY2FuTG9jayIsIHsNCiAgICAgICAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQsDQogICAgICAgICAgICBsZWFkZXJJZDogdGhpcy5sZWFkZXJJZA0KICAgICAgICAgIH0pDQogICAgICAgICAgLnRoZW4oY2FuTG9jayA9PiB7DQogICAgICAgICAgICAvL+iOt+WPluS7u+WKoeaYr+WQpuiDvemUgeWumg0KICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICBjYW5Mb2NrID09IDQgJiYNCiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLmhpc3RvcnkuY3VycmVudC5mdWxsUGF0aC5pbmRleE9mKCJ0b2tlbiIpID4gLTENCiAgICAgICAgICAgICkgew0KICAgICAgICAgICAgICBjYW5Mb2NrID0gIjUiOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5jYW5Mb2NrID0gY2FuTG9jazsNCiAgICAgICAgICB9KTsNCiAgICAgIH0NCiAgICB9LA0KICAgIGFwcHJvdmFsQXJlYTogZnVuY3Rpb24gKG5ld1ZhbCwgb2xkVmFsKSB7DQogICAgICAvL+WuoeaJueWMuuWfn+aYvuekuueahOWGheWuuQ0KICAgICAgaWYgKG5ld1ZhbCkgew0KICAgICAgICB0aGlzLmFwcHJvdmFsQXJlYSA9IG5ld1ZhbDsNCiAgICAgICAgaWYgKHRoaXMuYXBwcm92YWxBcmVhKSB7DQogICAgICAgICAgaWYgKHRoaXMuYXBwcm92YWxBcmVhLmluZGV4T2YoImFwcHJvdmFsT3BpbmlvbiIpID09IC0xKSB7DQogICAgICAgICAgICB0aGlzLmlzQXBwcm92YWxPcGluaW9uID0gZmFsc2U7DQogICAgICAgICAgfQ0KICAgICAgICAgIGlmICh0aGlzLmFwcHJvdmFsQXJlYS5pbmRleE9mKCJ6RmlsZSIpID09IC0xKSB7DQogICAgICAgICAgICB0aGlzLmlzekZpbGUgPSBmYWxzZTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKHRoaXMuYXBwcm92YWxBcmVhLmluZGV4T2YoImZpbGUiKSA9PSAtMSkgew0KICAgICAgICAgICAgdGhpcy5pc0ZpbGUgPSBmYWxzZTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKHRoaXMuYXBwcm92YWxBcmVhLmluZGV4T2YoInByb2Nlc3NSZWNvcmQiKSA9PSAtMSkgew0KICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NSZWNvcmQgPSBmYWxzZTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKHRoaXMuYXBwcm92YWxBcmVhLmluZGV4T2YoImltYWdlQnBtIikgPT0gLTEpIHsNCiAgICAgICAgICAgIHRoaXMuaXNJbWFnZUJwbSA9IGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogIH0sDQogIGNvbXB1dGVkOiBtYXBTdGF0ZSh7DQogICAgcm93c0J0bjogc3RhdGUgPT4gc3RhdGUuc3RvcmVQcm9jZXNzLnJvd3NCdG4sDQogICAgZm9yY2VMb2NrOiBzdGF0ZSA9PiBzdGF0ZS5zdG9yZVByb2Nlc3MuZm9yY2VMb2NrLA0KICAgIGlzU2hvd0FwcHJvdmFsQXJlYTogZnVuY3Rpb24gKCkgew0KICAgICAgaWYgKA0KICAgICAgICAodGhpcy5zdGF0dXMgIT0gIkNPUFlUTyIgJiYNCiAgICAgICAgICB0aGlzLnN0YXR1cyAhPSAiRk9MTE9XIiAmJg0KICAgICAgICAgICh0aGlzLnR5cGUgIT0gdW5kZWZpbmVkIHx8IHRoaXMudGFza0lkICE9IHVuZGVmaW5lZCkgJiYNCiAgICAgICAgICB0aGlzLmluc3RTdGF0dXMgIT0gImVuZCIgJiYNCiAgICAgICAgICB0aGlzLmluc3RTdGF0dXMgIT0gIm1hbnVhbGVuZCIpIHx8DQogICAgICAgIHRoaXMuc3RhdHVzID09ICJDT01NVSINCiAgICAgICkgew0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgIH0NCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9LA0KICB9KSwNCg0KICBiZWZvcmVEZXN0cm95KCkgew0KICAgIC8v57uE5Lu25rOo6ZSA56e76Zmk5LqL5Lu255uR5ZCs5Zmo77yM5Lul6Ziy5aSa5qyh6LCD55SoDQogICAgdGhpcy4kcm9vdC4kb2ZmKCJmb3JtTG9hZGluZyIpOw0KICB9LA0KICBtb3VudGVkKCkgew0KICAgIGNvbnN0IHRoaXNfID0gdGhpczsNCiAgICAvL+ebkeWQrOihqOWNleWKoOi9veWujOaIkOWPkeW4g+S6i+S7tg0KICAgIHRoaXNfLiRyb290LiRvbigiZm9ybUxvYWRpbmciLCBmdW5jdGlvbiAodmFsdWUpIHsNCiAgICAgIHRoaXNfLmRpc2FibGVkID0gdmFsdWU7DQogICAgICAvL+ajgOafpeW9k+WJjeaMgui1t+eKtuaAge+8jOWIpOaWreaYr+WQpuemgeeUqOaMiemSrg0KICAgICAgdGhpc18uY2hlY2tJbnN0U3RhdHVzKCk7DQogICAgfSk7DQogIH0sDQogIG1ldGhvZHM6IHsNCiAgICAvLyDpgJrov4fmjInpkq7liKvlkI3ojrflj5bmjInpkq7kuLvpopjnsbvlnosNCiAgICBnZXRUeXBlKGFsaWFzKSB7DQogICAgICBsZXQgdHlwZSA9ICJkZWZhdWx0IjsNCiAgICAgIHN3aXRjaCAoYWxpYXMpIHsNCiAgICAgICAgY2FzZSAiYWdyZWUiOg0KICAgICAgICBjYXNlICJhZ3JlZVRyYW5zIjoNCiAgICAgICAgICB0eXBlID0gInByaW1hcnkiOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICJvcHBvc2UiOg0KICAgICAgICBjYXNlICJvcHBvc2VUcmFucyI6DQogICAgICAgIGNhc2UgInJlamVjdCI6DQogICAgICAgIGNhc2UgImVuZFByb2Nlc3MiOg0KICAgICAgICAgIHR5cGUgPSAiZGFuZ2VyIjsNCiAgICAgICAgICBicmVhazsNCiAgICAgIH0NCiAgICAgIHJldHVybiB0eXBlDQogICAgfSwNCiAgICAvLyAvL+aaguWtmOWuoeaJueaEj+ingQ0KICAgIC8vIGNyZWF0ZUJwbVNhdmVPcGluaW9uKGZsYWcpIHsNCiAgICAvLyAgIC8v54K55Ye75L+d5a2Y5pqC5a2Y5a6h5om55oSP6KeB5pe277yM5rKh5pyJ5aGr5YaZ5a6h5om55oSP6KeB5LiN5aSE55CGDQogICAgLy8gICBpZiAodGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgPT0gIiIgJiYgZmxhZykgew0KICAgIC8vICAgICByZXR1cm47DQogICAgLy8gICB9DQogICAgLy8gICBpZiAodGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgPT0gIiIpIHsNCiAgICAvLyAgICAgTWVzc2FnZS53YXJuaW5nKCLor7fovpPlhaXlrqHmibnmhI/op4HlhoXlrrkiKTsNCiAgICAvLyAgIH0gZWxzZSB7DQogICAgLy8gICAgIGxldCBicG1TYXZlT3BpbmlvbiA9IHsgcHJvY0luc3RJZDogdGhpcy5pbnN0SWQsIHRhc2tJZDogdGhpcy50YXNrSWQsIG9waW5pb246IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpIH07DQogICAgLy8gICAgIGZsb3cuY3JlYXRlQnBtU2F2ZU9waW5pb24oYnBtU2F2ZU9waW5pb24pLnRoZW4oZGF0YSA9PiB7DQogICAgLy8gICAgICAgaWYgKGRhdGEuc3RhdGUpIHsNCiAgICAvLyAgICAgICAgIGlmICghZmxhZykgew0KICAgIC8vICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsgdHlwZTogInN1Y2Nlc3MiLCBtZXNzYWdlOiBkYXRhLm1lc3NhZ2UgfSk7DQogICAgLy8gICAgICAgICB9DQogICAgLy8gICAgICAgfQ0KICAgIC8vICAgICB9KTsNCiAgICAvLyAgIH0NCiAgICAvLyB9LA0KICAgIC8v6I635Y+W5oSP6KeBDQogICAgLy8gZ2V0T3BpbmlvbihvcGluaW9uKSB7DQogICAgLy8gICB0aGlzLnRleHQgPSBvcGluaW9uOw0KICAgIC8vICAgbGV0IG9waW5pb1ZhbHVlID0gdGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCk7DQogICAgLy8gICBpZiAodGhpcy5vcGluaW9uRmllbGQpIHsNCiAgICAvLyAgICAgbGV0IGN1cnJlbnRVc2VyID0gdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jdXJyZW50VXNlckRldGFpbC51c2VyOw0KICAgIC8vICAgICBsZXQgbW9tZW50ID0gcmVxdWlyZSgibW9tZW50Iik7DQoNCiAgICAvLyAgICAgbGV0IGJvRGF0YSA9IHRoaXMuJHJlZnMuZm9ybUNvbnRlbnQuZGF0YTsNCiAgICAvLyAgICAgbGV0IGZpbGVkID0gdGhpcy5vcGluaW9uRmllbGQuc3BsaXQoIi4iKTsNCiAgICAvLyAgICAgaWYgKGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dID09ICc8cD48YnIvPjwvcD4nKSB7DQogICAgLy8gICAgICAgYm9EYXRhW2ZpbGVkWzBdXVtmaWxlZFsxXV0gPSAiIjsNCiAgICAvLyAgICAgfQ0KICAgIC8vICAgICAvL+aYr+WQpuimhuebluWuoeaJueaEj+ingQ0KICAgIC8vICAgICBpZiAodGhpcy5hcHBlbmRPcGluaW9uKSB7DQogICAgLy8gICAgICAgaWYgKG9waW5pb1ZhbHVlKSB7DQogICAgLy8gICAgICAgICBib0RhdGFbZmlsZWRbMF1dW2ZpbGVkWzFdXSA9IG9waW5pb1ZhbHVlICsgIlxuIiArIGN1cnJlbnRVc2VyLmZ1bGxuYW1lICsgIiAiICsgbW9tZW50KCkuZm9ybWF0KCJZWVlZLU1NLUREIEhIOm1tOnNzIik7DQogICAgLy8gICAgICAgfQ0KICAgIC8vICAgICB9IGVsc2Ugew0KICAgIC8vICAgICAgIGlmIChvcGluaW9WYWx1ZSkgew0KICAgIC8vICAgICAgICAgb3BpbmlvVmFsdWUgKz0gIlxuIiArIGN1cnJlbnRVc2VyLmZ1bGxuYW1lICsgIiAiICsgbW9tZW50KCkuZm9ybWF0KCJZWVlZLU1NLUREIEhIOm1tOnNzIik7DQogICAgLy8gICAgICAgfQ0KICAgIC8vICAgICAgIGlmICh0aGlzLmFwcGVuZFN0cikgew0KICAgIC8vICAgICAgICAgdGhpcy5pbml0Qm9BdHRyID0gYm9EYXRhW2ZpbGVkWzBdXVtmaWxlZFsxXV07DQogICAgLy8gICAgICAgfQ0KICAgIC8vICAgICAgIGlmIChmaWxlZC5sZW5ndGggPT0gMikgew0KICAgIC8vICAgICAgICAgaWYgKHRoaXMuaW5pdEJvQXR0cikgew0KICAgIC8vICAgICAgICAgICBpZiAob3Bpbmlvbikgew0KICAgIC8vICAgICAgICAgICAgIGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dID0gdGhpcy5pbml0Qm9BdHRyICsgIlxuXG4iICsgb3BpbmlvVmFsdWU7DQogICAgLy8gICAgICAgICAgIH0gZWxzZSB7DQogICAgLy8gICAgICAgICAgICAgYm9EYXRhW2ZpbGVkWzBdXVtmaWxlZFsxXV0gPSB0aGlzLmluaXRCb0F0dHINCiAgICAvLyAgICAgICAgICAgfQ0KICAgIC8vICAgICAgICAgfSBlbHNlIHsNCiAgICAvLyAgICAgICAgICAgYm9EYXRhW2ZpbGVkWzBdXVtmaWxlZFsxXV0gPSBvcGluaW9WYWx1ZTsNCiAgICAvLyAgICAgICAgIH0NCiAgICAvLyAgICAgICB9DQogICAgLy8gICAgICAgdGhpcy5hcHBlbmRTdHIgPSBmYWxzZTsNCiAgICAvLyAgICAgfQ0KICAgIC8vICAgfQ0KICAgIC8vIH0sDQogICAgLy/kv53lrZjmjInpkq4NCiAgICBzYXZlRHJhZnRCdG4oKSB7DQogICAgICAvL3RoaXMuJHJlZnMudGFza1RvU2F2ZS5zaG93RGlhbG9nKCk7DQogICAgICB0aGlzLiRzdG9yZQ0KICAgICAgICAuZGlzcGF0Y2goInN0b3JlUHJvY2Vzcy9jYW5Mb2NrIiwgew0KICAgICAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQsDQogICAgICAgICAgbGVhZGVySWQ6IHRoaXMubGVhZGVySWQNCiAgICAgICAgfSkNCiAgICAgICAgLnRoZW4oY2FuTG9jayA9PiB7DQogICAgICAgICAgLy/ojrflj5bku7vliqHmmK/lkKbog73plIHlrpoNCiAgICAgICAgICBpZiAoDQogICAgICAgICAgICBjYW5Mb2NrID09IDQgJiYNCiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5oaXN0b3J5LmN1cnJlbnQuZnVsbFBhdGguaW5kZXhPZigidG9rZW4iKSA+IC0xDQogICAgICAgICAgKSB7DQogICAgICAgICAgICBjYW5Mb2NrID0gIjUiOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoY2FuTG9jayA9PSA0KSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuS7u+WKoeW3suiiq+WFtuS7luS6uuetvuaUtuS6hiIpOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLnRhc2tTYXZlRHJhZnQoKTsvL+S/neWtmOihqOWNleWGheWuuQ0KICAgICAgICAgICAgLy90aGlzLmNyZWF0ZUJwbVNhdmVPcGluaW9uKHRydWUpOy8v5pqC5a2Y5a6h5om55oSP6KeBDQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIC8v5ZCM5oSP5oyJ6ZKuDQogICAgYWdyZWVCdG4oKSB7DQogICAgICB0aGlzLiRzdG9yZQ0KICAgICAgICAuZGlzcGF0Y2goInN0b3JlUHJvY2Vzcy9jYW5Mb2NrIiwgew0KICAgICAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQsDQogICAgICAgICAgbGVhZGVySWQ6IHRoaXMubGVhZGVySWQNCiAgICAgICAgfSkNCiAgICAgICAgLnRoZW4oY2FuTG9jayA9PiB7DQogICAgICAgICAgLy/ojrflj5bku7vliqHmmK/lkKbog73plIHlrpoNCiAgICAgICAgICBpZiAoDQogICAgICAgICAgICBjYW5Mb2NrID09IDQgJiYNCiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5oaXN0b3J5LmN1cnJlbnQuZnVsbFBhdGguaW5kZXhPZigidG9rZW4iKSA+IC0xDQogICAgICAgICAgKSB7DQogICAgICAgICAgICBjYW5Mb2NrID0gIjUiOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoY2FuTG9jayA9PSA0KSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuS7u+WKoeW3suiiq+WFtuS7luS6uuetvuaUtuS6hiIpOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLnRhc2tBZ3JlZSgpOw0KICAgICAgICAgIH0NCiAgICAgIH0pOw0KICAgIH0sDQogICAgY2hlY2tJbnN0U3RhdHVzKGNhbGxiYWNrKSB7DQogICAgICBsZXQgdGhpc18gPSB0aGlzOw0KICAgICAgdGhpcy4kaHR0cA0KICAgICAgICAuZ2V0KA0KICAgICAgICAgICIke2JwbVJ1blRpbWV9L3J1bnRpbWUvaW5zdGFuY2UvdjEvZ2V0RGVmU3RhdHVzP2luc3RJZD0iICsNCiAgICAgICAgICAodGhpcy5pbnN0SWQgfHwgIiIpICsNCiAgICAgICAgICAiJnRhc2tJZD0iICsNCiAgICAgICAgICAodGhpcy50YXNrSWQgfHwgIiIpDQogICAgICAgICkNCiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3ApIHsNCiAgICAgICAgICBpZiAocmVzcC5kYXRhKSB7DQogICAgICAgICAgICByZXNwLmRhdGEgKz0gIiI7DQogICAgICAgICAgICBpZiAocmVzcC5kYXRhLmluZGV4T2YoIjEiKSA+IC0xKSB7DQogICAgICAgICAgICAgIHRoaXNfLmRpc2FibGVkID0gdHJ1ZTsNCiAgICAgICAgICAgICAgdGhpc18uaXNIYW5nID0gdHJ1ZTsNCiAgICAgICAgICAgICAgdGhpc18uJG1lc3NhZ2Uud2FybmluZygi5b2T5YmN5rWB56iL5a6e5L6L5bey6KKr5oyC6LW377yM5peg5rOV5a6h5om5Iik7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3AuZGF0YS5pbmRleE9mKCIzIikgPiAtMSkgew0KICAgICAgICAgICAgICB0aGlzXy5kaXNhYmxlZCA9IHRydWU7DQogICAgICAgICAgICAgIHRoaXNfLiRtZXNzYWdlLndhcm5pbmcoIuW9k+WJjea1geeoi+WumuS5ieW3suiiq+emgeatouWunuS+i++8jOaXoOazleWuoeaJuSIpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7DQogICAgICAgICAgICBjYWxsYmFjaygpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfSwNCiAgICAvL+aPkOS6pOS6i+S7tg0KICAgIHN1Ym1pdFJldm9rZShhbGlhcykgew0KICAgICAgbGV0IF90aGlzID0gdGhpczsNCiAgICAgIC8v6I635Y+WVlVF6KGo5Y2V5a6e5L6LKOWIpOaWreaYr+WQpuaYr+WcqOe6v+ihqOWNlSkNCiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgib25saW5lLWZvcm0iKVswXSkgew0KICAgICAgICBsZXQgdGFibGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIm9ubGluZS1mb3JtIilbMF0uX192dWVfXw0KICAgICAgICAgIC5wZXJtaXNzaW9uLnRhYmxlOyAvL+iOt+WPluWtkOihqOadg+mZkA0KICAgICAgICBsZXQgYm9EYXRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIm9ubGluZS1mb3JtIilbMF0uX192dWVfXy5kYXRhOyAvL+iOt+WPluihqOWNlWJv5a+56LGhDQogICAgICAgIGxldCB6RGF0YSA9IHt9Ow0KICAgICAgICBmb3IgKGxldCBrIGluIGJvRGF0YSkgew0KICAgICAgICAgIHpEYXRhID0gYm9EYXRhW2tdOw0KICAgICAgICB9DQogICAgICAgIGZvciAobGV0IGtleSBpbiB0YWJsZXMpIHsNCiAgICAgICAgICAvL+WmguaenOacieWvvOWFpeWxnuaAp++8jOWImeihqOaYjuS4jeaYr+WtkOihqOiAjOaYr+aVsOaNruaKpeihqO+8jOS4jeWBmuW/heWhq+agoemqjA0KICAgICAgICAgIGlmICh0YWJsZXNba2V5XSAmJiB0YWJsZXNba2V5XS5oYXNPd25Qcm9wZXJ0eSgiZXhwb3J0IikpIHsNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoDQogICAgICAgICAgICAodGFibGVzW2tleV0ucmVxdWlyZWQgPT0gdHJ1ZSB8fCB0YWJsZXNba2V5XS5yZXF1aXJlZCA9PSAidHJ1ZSIpICYmDQogICAgICAgICAgICB6RGF0YVsic3ViXyIgKyBrZXldICYmDQogICAgICAgICAgICB6RGF0YVsic3ViXyIgKyBrZXldLmxlbmd0aCA9PSAwDQogICAgICAgICAgKSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsgbWVzc2FnZTogIuWtkOihqOW/heWhq+S4gOadoeiusOW9lSIsIHR5cGU6ICJ3YXJuaW5nIiB9KTsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHRoaXMucHJlc3NBY3Rpb24gPSB0cnVlOw0KICAgICAgdGhpcy5idG5BbGlhcyA9IGFsaWFzOw0KICAgICAgLy/lhbPpl60NCiAgICAgIGlmICh0aGlzLmJ0bkFsaWFzID09ICJ0YXNrQ2xvc2UiKSB7DQogICAgICAgIHV0aWxzLmNsb3NlQWxsTm90aWZpY2F0aW9uKCk7DQogICAgICAgIC8v5Yik5pat6I+c5Y2V5piv5ZCm5piv5qih5Z2X5byA5Y+R6YWN572u5Ye65p2l55qEDQogICAgICAgIGlmICh0aGlzLiRyb3V0ZS5uYW1lLmluZGV4T2YoInJlcG9ydE1vZHVsZUluc3QiKSE9LTEpIHsNCiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgiL3N0YXRlbWVudC90ZW1wbGF0ZS9wcmV2aWV3LyIrdGhpcy4kcm91dGUucGFyYW1zLnRlbXBsYXRlS2V5KyIvdG9kby8iK3RoaXMuJHJvdXRlLnBhcmFtcy5kZWZLZXkrIi90cnVlIik7DQogICAgICAgIH1lbHNlIGlmICh0aGlzLiRyb3V0ZS5uYW1lLmluZGV4T2YoInN5c01vZHVsZUluc3QiKSE9LTEpew0KICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKCIvdi1mbG93L3YtdG9kby8iICsgdGhpcy4kcm91dGUucGFyYW1zLmRlZktleSk7DQogICAgICAgIH1lbHNlIGlmICh0aGlzLnR5cGUgPT0gImRvbmUiIHx8IHRoaXMudHlwZSA9PSAicmVxdWVzdCIgfHwgdGhpcy5teVJlYWRUeXBlID09ICJteVJlcXVlc3QiKSB7DQogICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goIi92LWZsb3cvdi1yZXF1ZXN0Iik7DQogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PSAiQ09NTVUiIHx8IHRoaXMuc3RhdGUgPT0gIkZPTExPVyIgfHwgdGhpcy4kcm91dGUubmFtZSA9PSAiaW5zdFJlYWQtcmVhZCIpIHsNCiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgiL3YtZmxvdy92LXRvZG9SZWFkIik7Ly/lvoXpmIUNCiAgICAgICAgfSBlbHNlIGlmKHRoaXMuJHJvdXRlLm5hbWUgPT0gImluc3RSZWFkLWRvbmUiKXsNCiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgiL3YtZmxvdy92LWRvbmVSZWFkIik7IC8v5bey6ZiFDQogICAgICAgIH1lbHNlIGlmKHRoaXMuJHJvdXRlLm5hbWUgPT0gIm15UmVhZC10eXBlIil7DQogICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goIi92LWZsb3cvdi1teVJlYWQiKSAvL+aIkeS8oOmYheeahA0KICAgICAgICB9ZWxzZSBpZih0aGlzLiRyb3V0ZS5uYW1lID09ICJpbnN0UmVhZCIgJiYgdGhpcy4kcm91dGUucGFyYW1zLm15UmVhZFR5cGUgPT0gImRlbGVnYXRlIil7DQogICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goIi92LWZsb3cvdi1teURlbGVnYXRlIikNCiAgICAgICAgfWVsc2Ugew0KICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLiRyb3V0ZS5xdWVyeSkgPT0gInt9Iikgew0KICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goIi92LWZsb3cvdi10b2RvIik7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKCIvaG9tZSIpOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJzYXZlRHJhZnQiKSB7DQogICAgICAgIC8vIHRvZG8g5L+d5a2YDQogICAgICAgIHRoaXMuc2F2ZURyYWZ0QnRuKCk7DQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gImFncmVlIikgew0KICAgICAgICAvLyB0b2RvIOWQjOaEjw0KICAgICAgICB0aGlzLmFncmVlQnRuKCk7DQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gImhhbmRsZVJlYWQiKSB7DQogICAgICAgIC8v5Lyg6ZiF5Zue5aSNDQogICAgICAgIHRoaXMuaGFuZGxlUmVhZCgpOw0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJoYW5kbGVSZXZva2UiKSB7DQogICAgICAgIC8v5pKk5ZueDQogICAgICAgIHRoaXMuaGFuZGxlUmV2b2tlKCk7DQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gImNvbW11RmVlZEJhY2siKSB7DQogICAgICAgIC8v5rKf6YCa5Y+N6aaIDQogICAgICAgIHRoaXMuY29tbXVGZWVkQmFjaygpOw0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJ0YXNrVG9JbnF1UmVwbHkiKSB7DQogICAgICAgIC8v5b6B6K+i5Zue5aSNDQogICAgICAgIHRoaXMudGFza1RvSW5xdVJlcGx5KCk7DQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gInVzZXJBZGRTaWduIikgew0KICAgICAgICAvL+aZrumAmuiKgueCueWKoOetvuWPjemmiA0KICAgICAgICB0aGlzLnVzZXJBZGRTaWduKCk7DQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gInJlamVjdCIpIHsNCiAgICAgICAgLy90b2RvIOmps+Wbng0KICAgICAgICB0aGlzLnRhc2tUb1JlamVjdCgpOw0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJkZWxlZ2F0ZSIpIHsNCiAgICAgICAgLy/ovazlip4NCiAgICAgICAgdGhpcy50YXNrVG9EZWxlZ2F0ZSgpOw0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJpbnF1Iikgew0KICAgICAgICAvL+W+geivog0KICAgICAgICB0aGlzLnRhc2tUb0lucXUoKTsNCiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAiZW5kUHJvY2VzcyIpIHsNCiAgICAgICAgLy8gdG9kbyDmtYHnqIvnu4jmraINCiAgICAgICAgdGhpcy50YXNrVG9FbmRQcm9jZXNzKCk7DQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gInN0YXJ0VHJhbnMiKSB7DQogICAgICAgIC8vdG9kbyDmtYHovawNCiAgICAgICAgdGhpcy50YXNrVG9UcmFucygpOw0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJhZGRTaWduIikgew0KICAgICAgICAvL3RvZG8g5Yqg562+DQogICAgICAgIHRoaXMudGFza1RvQWRkU2lnbigpOw0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJ0YXNrRGVsYXkiKSB7DQogICAgICAgIC8vdG9kbyDku7vliqHlu7bmnJ8NCiAgICAgICAgLy8gdGhpcy50YXNrVG9EZWxheSgpOw0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJhZ3JlZVRyYW5zIikgew0KICAgICAgICAvL3RvZG8g5ZCM5oSP77yI5rWB6L2s77yJDQogICAgICAgIHRoaXMudGFza0FncmVlVHJhbnMoKTsNCiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAib3Bwb3NlVHJhbnMiKSB7DQogICAgICAgIC8vdG9kbyDlj43lr7nvvIjmtYHovazvvIkNCiAgICAgICAgdGhpcy50YXNrT3Bwb3NlVHJhbnMoKTsNCiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAib3Bwb3NlIikgew0KICAgICAgICAvL3RvZG8g5Y+N5a+5DQogICAgICAgIHRoaXMudGFza09wcG9zZSgpOw0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJsb2NrVW5sb2NrIikgew0KICAgICAgICAvL+etvuaUtg0KICAgICAgICB0aGlzLiRzdG9yZQ0KICAgICAgICAgIC5kaXNwYXRjaCgic3RvcmVQcm9jZXNzL2NhbkxvY2siLCB0aGlzLnRhc2tJZCkNCiAgICAgICAgICAudGhlbihjYW5Mb2NrID0+IHsNCiAgICAgICAgICAgIC8v6I635Y+W5Lu75Yqh5piv5ZCm6IO96ZSB5a6aDQogICAgICAgICAgICBpZiAoDQogICAgICAgICAgICAgIGNhbkxvY2sgPT0gNCAmJg0KICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIuaGlzdG9yeS5jdXJyZW50LmZ1bGxQYXRoLmluZGV4T2YoInRva2VuIikgPiAtMQ0KICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgIGNhbkxvY2sgPSAiNSI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoY2FuTG9jayA9PSA0KSB7DQogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi5Lu75Yqh5bey6KKr5YW25LuW5Lq6562+5pS25LqGIik7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICB0aGlzLmxvY2tVbmxvY2soKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAiYXBwcm92ZUxpbmUiKSB7DQogICAgICAgIC8v5bm26KGM5a6h5om5DQogICAgICAgIHRoaXMudGFza0FwcHJvdmVMaW5lKCk7DQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gInNpZ25TZXF1ZW5jZSIpIHsNCiAgICAgICAgLy8g6aG65bqP562+572yDQogICAgICAgIHRoaXMudGFza1NpZ25TZXF1ZW5jZSgpOw0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJzaWduTGluZSIpIHsNCiAgICAgICAgLy8g5bm26KGM562+572yDQogICAgICAgIHRoaXMudGFza1NpZ25MaW5lKCk7DQogICAgICB9DQogICAgfSwNCiAgICAvL+aJp+ihjOWJjee9ruiEmuacrA0KICAgIHJ1bkJlZm9yZVNjcmlwdCgpIHsNCiAgICAgIGxldCBfdGhpcyA9IHRoaXM7DQogICAgICBsZXQgaXRlbSA9IHV0aWxzLmluZGV4T2ZMaXN0KF90aGlzLnJvd3NCdG4sICJhbGlhcyIsIF90aGlzLmJ0bkFsaWFzKTsNCiAgICAgIHJldHVybiBfdGhpcy50ZW1wU2NyaXB0KGl0ZW0uYmVmb3JlU2NyaXB0KTsNCiAgICB9LA0KICAgIC8v5omn6KGM5YmN572u6ISa5pysDQogICAgdGVtcFNjcmlwdChzY3JpcHQpIHsNCiAgICAgIGxldCBfdGhpcyA9IHRoaXM7DQogICAgICBsZXQgX3JlcSA9IHJlcTsNCiAgICAgIGxldCBib0RhdGEgPSBfdGhpcy4kcmVmcy5mb3JtQ29udGVudC5kYXRhOw0KICAgICAgbGV0IHRlbXBTY3JpcHQgPSAidmFyIHRlbXBGdW5jdGlvbiA9IGZ1bmN0aW9uKF9yZXEsZGF0YSxfdGhpcyl7ICIgKyBzY3JpcHQgKyAifTsiOw0KICAgICAgbGV0IHJlc3VsdCA9IGV2YWwodGVtcFNjcmlwdCArICJ0ZW1wRnVuY3Rpb24oX3JlcSxib0RhdGEsX3RoaXMpOyIpOw0KICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQudGhlbiAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT0gImZ1bmN0aW9uIikgew0KICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgICAgfQ0KICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0sDQogICAgLy/kv53lrZgNCiAgICB0YXNrU2F2ZURyYWZ0KCkgew0KICAgICAgY29uc3QgdGhpc18gPSB0aGlzOw0KICAgICAgdXRpbHMNCiAgICAgICAgLmdldE9ubGluZUZvcm1EYXRhKGZhbHNlKQ0KICAgICAgICAudGhlbihmb3JtRGF0YVN0ciA9PiB0aGlzXy5zYXZlRHJhZnRTdWJtaXQoZm9ybURhdGFTdHIpKQ0KICAgICAgICAuY2F0Y2gocmVhc29uID0+DQogICAgICAgICAgdXRpbHMuaGFuZGxlR2V0Rm9ybURhdGFSZWplY3QocmVhc29uKS50aGVuKCgpID0+IHRoaXMuc2F2ZURyYWZ0U3VibWl0KCkpDQogICAgICAgICk7DQogICAgfSwNCiAgICBzYXZlRHJhZnRTdWJtaXQoZm9ybURhdGFTdHIpIHsNCiAgICAgIGxldCBfdGhpcyA9IHRoaXM7DQogICAgICBsZXQgc2NyaXB0UmVzdWx0ID0gdGhpcy5ydW5CZWZvcmVTY3JpcHQoKTsNCiAgICAgIC8v5omn6KGM5YmN572u6ISa5pys6L+U5ZueZmFsc2Xml7bnu4jmraLmjInpkq7mk43kvZwNCiAgICAgIGlmIChzY3JpcHRSZXN1bHQgPT09IGZhbHNlKSByZXR1cm47DQogICAgICAvL+aJp+ihjOWJjee9ruiEmuacrOi/lOWbnueahOaOpeWPo+aXtuWFiOaJp+ihjOWJjee9ruS6i+S7tuaOpeWPow0KICAgICAgaWYgKHNjcmlwdFJlc3VsdC50aGVuICYmIHR5cGVvZiBzY3JpcHRSZXN1bHQudGhlbiA9PSAiZnVuY3Rpb24iKSB7DQogICAgICAgIHNjcmlwdFJlc3VsdC50aGVuKCgpID0+IHsNCiAgICAgICAgICAvL+aOpeWPo+i/lOWbnuaIkOWKn+WImeato+W4uOaJp+ihjOaMiemSruaTjeS9nA0KICAgICAgICAgIF90aGlzLmZ1bmNTYXZlRHJhZnQoZm9ybURhdGFTdHIpOw0KICAgICAgICB9LCAoZmFpbCkgPT4gew0KICAgICAgICAgIC8v5o6l5Y+j6L+U5Zue5aSx6LSl5YiZ57uI5q2i5oyJ6ZKu5pON5L2c77yM5bm257uZ5LiO5o+Q56S6DQogICAgICAgICAgX3RoaXMuJG1lc3NhZ2Uud2FybmluZyhmYWlsKTsNCiAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIC8v5omn6KGM5YmN572u6ISa5pys6L+U5ZuedHJ1ZeaXtuato+W4uOaJp+ihjOaMiemSruaTjeS9nA0KICAgICAgICBfdGhpcy5mdW5jU2F2ZURyYWZ0KGZvcm1EYXRhU3RyKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8v5L+d5a2Y6I2J56i/DQogICAgZnVuY1NhdmVEcmFmdChmb3JtRGF0YVN0cikgew0KICAgICAgdXRpbHMuY2xvc2VBbGxOb3RpZmljYXRpb24oKTsNCiAgICAgIGxldCBkYXRhID0gdGhpcy5oYW5kbGVGb3JtRGF0YShmb3JtRGF0YVN0cik7DQogICAgICBkYXRhLmRlZklkID0gdGhpcy5kZWZJZDsNCiAgICAgIGRhdGEuYXBwcm92YWwgPSB0cnVlOw0KICAgICAgZGF0YS5mb3JtS2V5ID0gdGhpcy4kcmVmcy5mb3JtQ29udGVudC5mb3JtS2V5Ow0KICAgICAgdGhpcy4kcmVmcy50YXNrVG9TYXZlLnNob3dEaWFsb2coZGF0YSk7DQogICAgICAvLyB0aGlzLiRzdG9yZS5kaXNwYXRjaCgic3RvcmVQcm9jZXNzL3NhdmVUYXNrRHJhZnQiLCBkYXRhKS50aGVuKCgpID0+IHsNCiAgICAgIC8vICAgdXRpbHMucmVsb2FkKCk7DQogICAgICAvLyB9KTsNCiAgICB9LA0KICAgIC8v5Lyg6ZiF5Zue5aSNDQogICAgaGFuZGxlUmVhZCgpIHsNCiAgICAgIHRoaXMuJHJlZnMudGFza1RvUmVhZC5zaG93RGlhbG9nKCkNCiAgICB9LA0KICAgIC8vIOWHhuWkh+imgeaPkOS6pOeahOaVsOaNrg0KICAgIGhhbmRsZUZvcm1EYXRhKGZvcm1EYXRhU3RyKSB7DQogICAgICAvL2xldCBmaWxlcyA9ICIiOw0KICAgICAgbGV0IHpmaWxlcyA9ICIiOw0KICAgICAgLy8gdGhpcy4kcmVmcy5maWxlVXBsb2FkLmlzRmluaXNoVXBsb2FkKCk7DQogICAgICAvLyBpZiAodGhpcy4kcmVmcy5maWxlVXBsb2FkICYmIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpICE9ICIiKSB7DQogICAgICAvLyAgIGZpbGVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkpOw0KICAgICAgLy8gfQ0KICAgICAgLy9sZXQgb3BpbmlvbiA9ICIiOw0KICAgICAgLy8gaWYgKHRoaXMuJHJlZnMub3BpbmlvblRleHQgJiYgdGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgIT0gIiIpIHsNCiAgICAgIC8vICAgb3BpbmlvbiA9IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpOw0KICAgICAgLy8gfQ0KDQogICAgICBsZXQgZGF0YSA9IHsNCiAgICAgICAgdGFza0lkOiB0aGlzLnRhc2tJZCwNCiAgICAgICAgYWN0aW9uTmFtZTogdGhpcy5hY3Rpb25OYW1lLA0KICAgICAgICBkZXN0aW5hdGlvbjogIiIsDQogICAgICAgIC8vZmlsZXM6IGZpbGVzLA0KICAgICAgICB6ZmlsZXM6IHpmaWxlcywNCiAgICAgICAgLy9vcGluaW9uOiBvcGluaW9uLA0KICAgICAgICBqdW1wVHlwZTogIiIsDQogICAgICAgIGFnZW50TGVhZGVySWQ6IHRoaXMubGVhZGVySWQsDQogICAgICAgIG5vZGVVc2VyczogIltdIg0KICAgICAgfTsNCiAgICAgIGlmIChmb3JtRGF0YVN0cikgew0KICAgICAgICAvLyBVUkzooajljZUNCiAgICAgICAgaWYgKGZvcm1EYXRhU3RyLmNvbnN0cnVjdG9yID09IE9iamVjdCkgew0KICAgICAgICAgIGRhdGEuZm9ybVR5cGUgPSAiZnJhbWUiOw0KICAgICAgICAgIGlmIChmb3JtRGF0YVN0ci5idXNpbmVzc0tleSkgew0KICAgICAgICAgICAgZGF0YS5idXNpbmVzc0tleSA9IGZvcm1EYXRhU3RyLmJ1c2luZXNzS2V5Ow0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoZm9ybURhdGFTdHIuc3lzQ29kZSkgew0KICAgICAgICAgICAgZGF0YS5zeXNDb2RlID0gZm9ybURhdGFTdHIuc3lzQ29kZTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKGZvcm1EYXRhU3RyLnZhcnMpIHsNCiAgICAgICAgICAgIGRhdGEudmFycyA9IGZvcm1EYXRhU3RyLnZhcnM7DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYgKGZvcm1EYXRhU3RyLmNvbnN0cnVjdG9yID09IFN0cmluZykgew0KICAgICAgICAgIGRhdGEuZGF0YSA9IEJhc2U2NC5lbmNvZGUoZm9ybURhdGFTdHIpOw0KICAgICAgICAgIGRhdGEuZm9ybVR5cGUgPSAiaW5uZXIiOw0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIGlmICh3aW5kb3cudXJnZW50U3RhdGVWYWx1ZSkgew0KICAgICAgICBkYXRhLnVyZ2VudFN0YXRlVmFsdWUgPSB3aW5kb3cudXJnZW50U3RhdGVWYWx1ZTsNCiAgICAgIH0NCg0KICAgICAgcmV0dXJuIGRhdGE7DQogICAgfSwNCiAgICBoYW5kbGVDbG9zZSgpIHsNCiAgICAgIHRoaXMuZGlhbG9nRm9ybVZpc2libGUgPSB0cnVlOw0KICAgIH0sDQogICAgLy/ojrflj5bku7vliqHplIHlrprnirbmgIENCiAgICBsb2NrVW5sb2NrKCkgew0KICAgICAgdGhpcy4kc3RvcmUNCiAgICAgICAgLmRpc3BhdGNoKA0KICAgICAgICAgICJzdG9yZVByb2Nlc3MvbG9ja1VubG9jayIsDQogICAgICAgICAgdGhpcy50YXNrSWQgKyAiJmxlYWRlcklkPSIgKyB0aGlzLmxlYWRlcklkDQogICAgICAgICkNCiAgICAgICAgLnRoZW4oKCkgPT4gew0KICAgICAgICAgIC8vIHRoaXMuJHJvdXRlci5nbyh0aGlzLiRyb3V0ZXIuY3VycmVudFJvdXRlKTsNCiAgICAgICAgICB1dGlscy5yZWxvYWQoKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICAvL+aSpOWbng0KICAgIGhhbmRsZVJldm9rZShpZCwgc3RhdHVzKSB7DQogICAgICBpZiAoc3RhdHVzID09ICJyZXZva2VUb1N0YXJ0Iikgew0KICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuW3suaSpOWbnu+8jOS4jeiDveWGjeaSpOWbniIpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICAvLyBpZiAodGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgPT0gIiIpIHsNCiAgICAgIC8vICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7floavlhpnmkqTlm57mhI/op4EiKTsNCiAgICAgIC8vICAgcmV0dXJuIGZhbHNlOw0KICAgICAgLy8gfQ0KICAgICAgbGV0IGRhdGEgPSB7DQogICAgICAgIGluc3RhbmNlSWQ6IHRoaXMuaW5zdElkLA0KICAgICAgICBpc0hhbmRSZXZva2U6IHRoaXMuaXNIYW5kLA0KICAgICAgICAvL2NhdXNlOiB0aGlzLiRyZWZzLm9waW5pb25UZXh0LmdldE9waW5pb24oKQ0KICAgICAgfTsNCiAgICAgIGxldCByZXZva2VVcmwgPSAic3RvcmVQcm9jZXNzL3Jldm9rZUluc3RhbmNlQnRuIjsNCiAgICAgIHRoaXMuJHJlZnMudGFza1RvUmV2b2tlLnNob3dEaWFsb2cocmV2b2tlVXJsLGRhdGEpOw0KICAgICAgLy8gdGhpcy4kY29uZmlybSgi56Gu6K6kIiArIHRoaXMuZGFpbG9nVGl0bGUgKyAiPyIsICLmj5DnpLoiLCB7DQogICAgICAvLyAgIGNhbmNlbEJ1dHRvblRleHQ6ICLlj5bmtogiLA0KICAgICAgLy8gICBjb25maXJtQnV0dG9uVGV4dDogIuehruWumiIsDQogICAgICAvLyAgIHR5cGU6ICJ3YXJuaW5nIiwNCiAgICAgIC8vICAgY2xvc2VPbkNsaWNrTW9kYWw6IGZhbHNlDQogICAgICAvLyB9KS50aGVuKCgpID0+IHsNCiAgICAgIC8vICAgdGhpcy4kc3RvcmUNCiAgICAgIC8vICAgICAuZGlzcGF0Y2goInN0b3JlUHJvY2Vzcy9yZXZva2VJbnN0YW5jZUJ0biIsIGRhdGEpDQogICAgICAvLyAgICAgLnRoZW4oaXNIYW5kUmV2b2tlID0+IHsNCiAgICAgIC8vICAgICAgIGlmICh0aGlzLnRva2VuICE9IG51bGwpIHsNCiAgICAgIC8vICAgICAgICAgd2luZG93LmNsb3NlKCk7DQogICAgICAvLyAgICAgICB9IGVsc2Ugew0KICAgICAgLy8gICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgiL3YtZmxvdy92LXRvZG8iKTsNCiAgICAgIC8vICAgICAgIH0NCiAgICAgIC8vICAgICB9KTsNCiAgICAgIC8vIH0pOw0KICAgIH0sDQogICAgc2F2ZVJldm9rZSgpIHsNCiAgICAgIGlmICh0aGlzLm9waW5pb24gPT0gIiIpIHsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7floavlhpnmkqTlm57mhI/op4EiKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgbGV0IGRhdGEgPSB7DQogICAgICAgIGluc3RhbmNlSWQ6IHRoaXMuaW5zdElkLA0KICAgICAgICBpc0hhbmRSZXZva2U6IHRoaXMuaXNIYW5kLA0KICAgICAgICBjYXVzZTogdGhpcy5vcGluaW9uDQogICAgICB9Ow0KICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goInN0b3JlUHJvY2Vzcy9yZXZva2VJbnN0YW5jZUJ0biIsIGRhdGEpLnRoZW4oKCkgPT4gew0KICAgICAgICBpZiAodGhpcy50b2tlbiAhPSBudWxsKSB7DQogICAgICAgICAgd2luZG93LmNsb3NlKCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy4kcm91dGVyLmdvKC0xKTsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgICB0aGlzLmRpYWxvZ0Zvcm1WaXNpYmxlID0gZmFsc2U7DQogICAgICB0aGlzLm9waW5pb24gPSAiIjsNCiAgICB9LA0KICAgIGV4aXRSZXZva2UoKSB7DQogICAgICB0aGlzLmRpYWxvZ0Zvcm1WaXNpYmxlID0gZmFsc2U7DQogICAgICB0aGlzLm9waW5pb24gPSAiIjsNCiAgICB9LA0KICAgIC8v5rKf6YCa5Y+N6aaIDQogICAgY29tbXVGZWVkQmFjaygpIHsNCiAgICAgIHRoaXMuJHJlZnMudGFza1RvRmVlQmFjay5zaG93RGlhbG9nKCk7DQogICAgfSwNCiAgICB1c2VyQWRkU2lnbigpIHsNCiAgICAgIHRoaXMuJHJlZnMudXNlckFkZFNpZ25SZXBseS5zaG93RGlhbG9nKCk7DQogICAgICAvLyBpZiAodGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgPT0gIiIpIHsNCiAgICAgIC8vICAgTWVzc2FnZS53YXJuaW5nKCLor7fovpPlhaXmhI/op4HlhoXlrrkiKTsNCiAgICAgIC8vIH0gZWxzZSB7DQogICAgICAvLyAgIGxldCBmaWxlcyA9ICIiOw0KICAgICAgLy8gICBsZXQgemZpbGVzID0gIiI7DQogICAgICAvLyAgIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5pc0ZpbmlzaFVwbG9hZCgpOw0KICAgICAgLy8gICBpZiAodGhpcy4kcmVmcy5maWxlVXBsb2FkICYmIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpICE9ICIiKSB7DQogICAgICAvLyAgICAgZmlsZXMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRyZWZzLmZpbGVVcGxvYWQuZ2V0RmlsZXMoKSk7DQogICAgICAvLyAgIH0NCiAgICAgIC8vICAgbGV0IGRhdGEgPSB7DQogICAgICAvLyAgICAgcHJvY0RlZklkOiB0aGlzLmRlZklkLA0KICAgICAgLy8gICAgIHByb2NJbnN0SWQ6IHRoaXMuaW5zdElkLA0KICAgICAgLy8gICAgIHN0YXR1czogImlucXVfcmVwbHkiLA0KICAgICAgLy8gICAgIHRhc2tJZDogdGhpcy50YXNrSWQsDQogICAgICAvLyAgICAgb3BpbmlvbjogdGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCksDQogICAgICAvLyAgICAgZmlsZXM6IGZpbGVzLA0KICAgICAgLy8gICAgIHpmaWxlczogemZpbGVzDQogICAgICAvLyAgIH07DQogICAgICAvLyAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvdXNlckFkZFNpZ24iLCBkYXRhKS50aGVuKCgpID0+IHsNCiAgICAgIC8vICAgICBpZiAodGhpcy50b2tlbiAhPSBudWxsKSB7DQogICAgICAvLyAgICAgICB3aW5kb3cuY2xvc2UoKTsNCiAgICAgIC8vICAgICB9IGVsc2Ugew0KICAgICAgLy8gICAgICAgdGhpcy4kcm91dGVyLmdvKC0xKTsNCiAgICAgIC8vICAgICB9DQogICAgICAvLyAgIH0pOw0KICAgICAgLy8gfQ0KICAgIH0sDQogICAgLy/lvoHor6Llm57lpI0NCiAgICB0YXNrVG9JbnF1UmVwbHkoKSB7DQogICAgICB0aGlzLiRyZWZzLnRhc2tUb0lucXVSZXBseS5zaG93RGlhbG9nKCk7DQogICAgICAvLyBpZiAodGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgPT0gIiIpIHsNCiAgICAgIC8vICAgTWVzc2FnZS53YXJuaW5nKCLor7fovpPlhaXmhI/op4HlhoXlrrkiKTsNCiAgICAgIC8vIH0gZWxzZSB7DQogICAgICAvLyAgIGxldCBmaWxlcyA9ICIiOw0KICAgICAgLy8gICBsZXQgemZpbGVzID0gIiI7DQogICAgICAvLyAgIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5pc0ZpbmlzaFVwbG9hZCgpOw0KICAgICAgLy8gICBpZiAodGhpcy4kcmVmcy5maWxlVXBsb2FkICYmIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpICE9ICIiKSB7DQogICAgICAvLyAgICAgZmlsZXMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRyZWZzLmZpbGVVcGxvYWQuZ2V0RmlsZXMoKSk7DQogICAgICAvLyAgIH0NCiAgICAgIC8vICAgbGV0IGRhdGEgPSB7DQogICAgICAvLyAgICAgcHJvY0RlZklkOiB0aGlzLmRlZklkLA0KICAgICAgLy8gICAgIHByb2NJbnN0SWQ6IHRoaXMuaW5zdElkLA0KICAgICAgLy8gICAgIHN0YXR1czogImlucXVfcmVwbHkiLA0KICAgICAgLy8gICAgIHRhc2tJZDogdGhpcy50YXNrSWQsDQogICAgICAvLyAgICAgb3BpbmlvbjogdGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCksDQogICAgICAvLyAgICAgZmlsZXM6IGZpbGVzLA0KICAgICAgLy8gICAgIHpmaWxlczogemZpbGVzLA0KICAgICAgLy8gICAgIGZvcm1EYXRhOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGEpDQogICAgICAvLyAgIH07DQogICAgICAvLyAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvdGFza1RvSW5xdVJlcGx5IiwgZGF0YSkudGhlbigoKSA9PiB7DQogICAgICAvLyAgICAgaWYgKHRoaXMudG9rZW4gIT0gbnVsbCkgew0KICAgICAgLy8gICAgICAgd2luZG93LmNsb3NlKCk7DQogICAgICAvLyAgICAgfSBlbHNlIHsNCiAgICAgIC8vICAgICAgIHRoaXMuJHJvdXRlci5nbygtMSk7DQogICAgICAvLyAgICAgfQ0KICAgICAgLy8gICB9KTsNCiAgICAgIC8vIH0NCiAgICB9LA0KICAgIC8v6amz5Zue6K6+572uDQogICAgdGFza1RvUmVqZWN0KCkgew0KICAgICAgLy8g5a6h5om56ZmE5Lu25pWw5o2uDQogICAgICAvLyBpZiAodGhpcy4kcmVmcy5maWxlVXBsb2FkICYmIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpICE9ICIiKSB7DQogICAgICAvLyAgIHRoaXMub3BpbmlvbkZpbGVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkpOw0KICAgICAgLy8gfQ0KICAgICAgbGV0IHBhcmVudFRhc2tJZCA9ICIiOy8v55So5oi35Lu75Yqh5Yqg562+5ZCO55qE54i25Lu75YqhSUQNCiAgICAgIGlmICh0aGlzLm5vZGVUeXBlID09ICJVU0VSVEFTSyIgJiYgdGhpcy50YXNrcy5icG1UYXNrLnBhcmVudElkICE9ICIwIikgey8v55So5oi35Lu75Yqh5Yqg562+DQogICAgICAgIHBhcmVudFRhc2tJZCA9IHRoaXMudGFza3MuYnBtVGFzay5wYXJlbnRJZDsNCiAgICAgIH0NCiAgICAgIHRoaXMuJHJlZnMudGFza1RvUmVqZWN0LmhhbmRsZU9wZW4ocGFyZW50VGFza0lkLCB0aGlzKTsgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UNCiAgICB9LA0KICAgIC8v6L2s5Yqe6K6+572uDQogICAgdGFza1RvRGVsZWdhdGUoKSB7DQogICAgICB0aGlzLiRyZWZzLnRhc2tUb0RlbGVnYXRlLmhhbmRsZUNsb3NlKHRoaXMub3BpbmlvbkZpZWxkLCB0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGEsIHRoaXMuYXBwZW5kT3BpbmlvbiwgdGhpcyk7IC8v54i257uE5Lu26LCD55So5a2Q57uE5Lu25pa55rOVDQogICAgfSwNCiAgICAvL+W+geivouiuvue9rg0KICAgIHRhc2tUb0lucXUoKSB7DQogICAgICBpZiAodGhpcy5zdGF0dXMgIT0gIlRSQU5TRk9STUVESU5RVSIpIHsNCiAgICAgICAgdGhpcy4kcmVmcy50YXNrVG9JbnF1LnNob3dUeXBlKCk7DQogICAgICB9DQogICAgICB0aGlzLiRyZWZzLnRhc2tUb0lucXUuaGFuZGxlQ2xvc2UodGhpcy5vcGluaW9uRmllbGQsIHRoaXMuJHJlZnMuZm9ybUNvbnRlbnQuZGF0YSwgdGhpcy5hcHBlbmRPcGluaW9uKTsgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UNCiAgICB9LA0KICAgIC8v5rWB56iL57uI5q2iDQogICAgdGFza1RvRW5kUHJvY2VzcygpIHsNCiAgICAgIHRoaXMuJHJlZnMudGFza1RvRW5kUHJvY2Vzcy5oYW5kbGVDbG9zZSh0aGlzKTsgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UNCiAgICB9LA0KICAgIC8v5rWB6L2s6K6+572uDQogICAgdGFza1RvVHJhbnMoKSB7DQogICAgICAvLyBpZiAodGhpcy4kcmVmcy5maWxlVXBsb2FkICYmIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpICE9ICIiKSB7DQogICAgICAvLyAgIHRoaXMub3BpbmlvbkZpbGVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkpOw0KICAgICAgLy8gfQ0KICAgICAgdGhpcy4kcmVmcy50YXNrVG9UcmFucy5oYW5kbGVDbG9zZSh0aGlzLCB0aGlzLm9waW5pb25GaWVsZCwgdGhpcy4kcmVmcy5mb3JtQ29udGVudC5kYXRhLCB0aGlzLmFwcGVuZE9waW5pb24pOyAvL+eItue7hOS7tuiwg+eUqOWtkOe7hOS7tuaWueazlQ0KICAgIH0sDQogICAgLy/liqDnrb7orr7nva4NCiAgICB0YXNrVG9BZGRTaWduKCkgew0KICAgICAgdGhpcy4kcmVmcy50YXNrVG9BZGRTaWduLmhhbmRsZUNsb3NlKHRoaXMubm9kZVR5cGUsIHRoaXMuaW5zdElkLCB0aGlzKTsgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UNCiAgICB9LA0KICAgIC8v5Lu75Yqh5bu25pyfDQogICAgdGFza1RvRGVsYXkoKSB7DQogICAgICB0aGlzLiRyZWZzLnRhc2tUb0RlbGF5LmhhbmRsZUNsb3NlKCk7IC8v54i257uE5Lu26LCD55So5a2Q57uE5Lu25pa55rOVDQogICAgfSwNCiAgICAvL+W5tuihjOWuoeaJuQ0KICAgIHRhc2tBcHByb3ZlTGluZSgpIHsNCiAgICAgIHRoaXMuJHJlZnMudGFza1RvQXBwcm92ZUxpbmUuaGFuZGxlQ2xvc2UoKTsgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UNCiAgICB9LA0KICAgIC8vIOmhuuW6j+etvue9sg0KICAgIHRhc2tTaWduU2VxdWVuY2UoKSB7DQogICAgICB0aGlzLiRyZWZzLnRhc2tUb1NpZ25TZXF1ZW5jZS5oYW5kbGVDbG9zZSgpOyAvL+eItue7hOS7tuiwg+eUqOWtkOe7hOS7tuaWueazlQ0KICAgIH0sDQogICAgLy8g5bm26KGM562+572yDQogICAgdGFza1NpZ25MaW5lKCkgew0KICAgICAgdGhpcy4kcmVmcy50YXNrVG9TaWduTGluZS5oYW5kbGVDbG9zZSgpOyAvL+eItue7hOS7tuiwg+eUqOWtkOe7hOS7tuaWueazlQ0KICAgIH0sDQogICAgZG9OZXh0KCkgew0KICAgICAgaWYgKCF0aGlzLnRleHQpIHsNCiAgICAgICAgaWYgKHRoaXMuYWN0aW9uTmFtZSA9PSAib3Bwb3NlVHJhbnMiIHx8IHRoaXMuYWN0aW9uTmFtZSA9PSAib3Bwb3NlIikgew0KICAgICAgICAgIHRoaXMudGV4dCA9ICLlj43lr7kiOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMudGV4dCA9ICLlkIzmhI8iOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBjb25zdCB0aGlzXyA9IHRoaXM7DQogICAgICB1dGlscw0KICAgICAgICAuZ2V0T25saW5lRm9ybURhdGEodHJ1ZSkNCiAgICAgICAgLnRoZW4oZm9ybURhdGFTdHIgPT4gdGhpc18uZG9OZXh0U3VibWl0KGZvcm1EYXRhU3RyKSkNCiAgICAgICAgLmNhdGNoKHJlYXNvbiA9Pg0KICAgICAgICAgIHV0aWxzLmhhbmRsZUdldEZvcm1EYXRhUmVqZWN0KHJlYXNvbikudGhlbigoKSA9PiB0aGlzLmRvTmV4dFN1Ym1pdCgpKQ0KICAgICAgICApOw0KICAgIH0sDQogICAgLy8gZG9OZXh05omn6KGM44CCZm9ybURhdGFTdHLvvJrlrZfnrKbkuLLmoLzlvI/nmoTooajljZXmlbDmja7jgIINCiAgICBkb05leHRTdWJtaXQoZm9ybURhdGFTdHIpIHsNCiAgICAgIGxldCBfdGhpcyA9IHRoaXM7DQogICAgICBsZXQgc2NyaXB0UmVzdWx0ID0gdGhpcy5ydW5CZWZvcmVTY3JpcHQoKTsNCiAgICAgIC8v5omn6KGM5YmN572u6ISa5pys6L+U5ZueZmFsc2Xml7bnu4jmraLmjInpkq7mk43kvZwNCiAgICAgIGlmIChzY3JpcHRSZXN1bHQgPT09IGZhbHNlKSByZXR1cm47DQogICAgICAvL+aJp+ihjOWJjee9ruiEmuacrOi/lOWbnueahOaOpeWPo+aXtuWFiOaJp+ihjOWJjee9ruS6i+S7tuaOpeWPow0KICAgICAgaWYgKHNjcmlwdFJlc3VsdC50aGVuICYmIHR5cGVvZiBzY3JpcHRSZXN1bHQudGhlbiA9PSAiZnVuY3Rpb24iKSB7DQogICAgICAgIHNjcmlwdFJlc3VsdC50aGVuKCgpID0+IHsNCiAgICAgICAgICAvL+aOpeWPo+i/lOWbnuaIkOWKn+WImeato+W4uOaJp+ihjOaMiemSruaTjeS9nA0KICAgICAgICAgIF90aGlzLmZ1bmNEb05leHQoZm9ybURhdGFTdHIpOw0KICAgICAgICB9LCAoZmFpbCkgPT4gew0KICAgICAgICAgIC8v5o6l5Y+j6L+U5Zue5aSx6LSl5YiZ57uI5q2i5oyJ6ZKu5pON5L2c77yM5bm257uZ5LiO5o+Q56S6DQogICAgICAgICAgX3RoaXMuJG1lc3NhZ2Uud2FybmluZyhmYWlsKTsNCiAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIC8v5omn6KGM5YmN572u6ISa5pys6L+U5ZuedHJ1ZeaXtuato+W4uOaJp+ihjOaMiemSruaTjeS9nA0KICAgICAgICBfdGhpcy5mdW5jRG9OZXh0KGZvcm1EYXRhU3RyKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIGZ1bmNEb05leHQoZm9ybURhdGFTdHIpIHsNCiAgICAgIHV0aWxzLmNsb3NlQWxsTm90aWZpY2F0aW9uKCk7DQogICAgICBsZXQgZGF0YSA9IHRoaXMuaGFuZGxlRm9ybURhdGEoZm9ybURhdGFTdHIpOw0KICAgICAgZGF0YS5mb3JtS2V5ID0gdGhpcy4kcmVmcy5mb3JtQ29udGVudC5mb3JtS2V5Ow0KICAgICAgZGF0YS5vcGluaW9uID0gdGhpcy50ZXh0Ow0KICAgICAgaWYgKHRoaXMubm9kZVR5cGUgPT0gIlVTRVJUQVNLIiAmJiB0aGlzLnRhc2tzLmJwbVRhc2sucGFyZW50SWQgIT0gIjAiKSB7Ly/nlKjmiLfku7vliqHliqDnrb4NCiAgICAgICAgaWYgKHRoaXMuYWN0aW9uTmFtZSA9PSAib3Bwb3NlIikgew0KICAgICAgICAgIGRhdGEuYWRkU2lnbkFjdGlvbiA9ICJvcHBvc2VUcmFucyI7DQogICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3Rpb25OYW1lID09ICJhZ3JlZSIpIHsNCiAgICAgICAgICBkYXRhLmFkZFNpZ25BY3Rpb24gPSAiYWdyZWVUcmFucyI7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICgNCiAgICAgICAgKHRoaXMuY2hvaWNlRXhjdXRvciB8fCB0aGlzLmp1bXBUeXBlIHx8IHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGUgPT09ICdmcmVlJykgJiYNCiAgICAgICAgIXRoaXMudGFza1N0YXR1c0FycmF5LmluY2x1ZGVzKHRoaXMuc3RhdHVzKQ0KICAgICAgKSB7DQogICAgICAgIHRoaXMuJHN0b3JlDQogICAgICAgICAgLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvZ2V0QWZ0ZXJKdW1wTm9kZXMiLCB7DQogICAgICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLA0KICAgICAgICAgICAgZGF0YTogZGF0YS5kYXRhLA0KICAgICAgICAgICAgZGVmSWQ6ICIiLA0KICAgICAgICAgICAgaW5zdElkOiAiIiwNCiAgICAgICAgICAgIHR5cGU6IHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGUgfHwgdGhpcy5qdW1wVHlwZQ0KICAgICAgICAgIH0pDQogICAgICAgICAgLnRoZW4ocmVzID0+IHsNCiAgICAgICAgICAgIGRlYnVnZ2VyOw0KICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICByZXMuYWZ0ZXJOb2Rlcy5sZW5ndGggPT0gMCB8fA0KICAgICAgICAgICAgICAocmVzLmFmdGVyTm9kZXMubGVuZ3RoID09IDEgJiYNCiAgICAgICAgICAgICAgICByZXMuYWZ0ZXJOb2Rlc1swXS5leGN1dG9yTGlzdCAhPSB1bmRlZmluZWQgJiYNCiAgICAgICAgICAgICAgICByZXMuYWZ0ZXJOb2Rlc1swXS5leGN1dG9yTGlzdC5sZW5ndGggPT0gMSkNCiAgICAgICAgICAgICkgew0KICAgICAgICAgICAgICB0aGlzLiRyZWZzLnRhc2tUb0NvbXBsZXRlLnNob3dEaWFsb2codGhpcy5vcGluaW9uRmllbGQsIHRoaXMuJHJlZnMuZm9ybUNvbnRlbnQuZGF0YSwgdGhpcy5hcHBlbmRPcGluaW9uLCBkYXRhKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRoaXMuJHJlZnMudGFza1NlbGVjdERlc3RpbmF0aW9uLnNob3dEaWFsb2coDQogICAgICAgICAgICAgICAgZGF0YS5kYXRhLA0KICAgICAgICAgICAgICAgIGRhdGEuZmlsZXMsDQogICAgICAgICAgICAgICAgZGF0YS56ZmlsZXMsDQogICAgICAgICAgICAgICAgZGF0YS5vcGluaW9uLA0KICAgICAgICAgICAgICAgIHRoaXMuaW5zdElkLA0KICAgICAgICAgICAgICAgIHRoaXMuanVtcFR5cGUNCiAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIC8vdGhpcy5kaXNhYmxlZCA9IHRydWU7DQogICAgICAgIGxldCB0aXBNc2cgPSAi56Gu6K6k5Yqe55CG5q2k5Lu75YqhPyI7DQogICAgICAgIGlmICh0aGlzLmFjdGlvbk5hbWUgPT0gImFncmVlIiAmJiB0aGlzLnN0YXR1cyA9PSAiU0lHTlNFUVVFTkNFRUQiKSB7DQogICAgICAgICAgdGhpcy4kaHR0cA0KICAgICAgICAgICAgLmdldCgNCiAgICAgICAgICAgICAgIiR7YnBtUnVuVGltZX0vcnVudGltZS90YXNrL3YxL25leHRFeGVjdXRvcj90YXNrSWQ9IiArIHRoaXMudGFza0lkDQogICAgICAgICAgICApDQogICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7DQogICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlICYmIHJlc3BvbnNlLmRhdGEudmFsdWUpIHsNCiAgICAgICAgICAgICAgICB0aXBNc2cgPSBg5LiL5LiA5q2l55qE5omn6KGM5Lq65Li677yaJHtyZXNwb25zZS5kYXRhLnZhbHVlLm5hbWV944CCPGJyLz4g5oKo56Gu5a6a6KaB5o+Q5Lqk5ZCX77yfYDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB0aGlzLiRyZWZzLnRhc2tUb0NvbXBsZXRlLnNob3dEaWFsb2codGhpcy5vcGluaW9uRmllbGQsIHRoaXMuJHJlZnMuZm9ybUNvbnRlbnQuZGF0YSwgdGhpcy5hcHBlbmRPcGluaW9uLCBkYXRhKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLiRyZWZzLnRhc2tUb0NvbXBsZXRlLnNob3dEaWFsb2codGhpcy5vcGluaW9uRmllbGQsIHRoaXMuJHJlZnMuZm9ybUNvbnRlbnQuZGF0YSwgdGhpcy5hcHBlbmRPcGluaW9uLCBkYXRhKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8v5ZCM5oSPDQogICAgdGFza0FncmVlKCkgew0KICAgICAgdGhpcy5hY3Rpb25OYW1lID0gImFncmVlIjsNCiAgICAgIHRoaXMuZG9OZXh0KCk7DQogICAgfSwNCiAgICAvL+WQjOaEj++8iOa1gei9rO+8iQ0KICAgIHRhc2tBZ3JlZVRyYW5zKCkgew0KICAgICAgdGhpcy5hY3Rpb25OYW1lID0gImFncmVlVHJhbnMiOw0KICAgICAgdGhpcy5kb05leHQoKTsNCiAgICB9LA0KICAgIC8v5Y+N5a+5DQogICAgdGFza09wcG9zZSgpIHsNCiAgICAgIHRoaXMuYWN0aW9uTmFtZSA9ICJvcHBvc2UiOw0KICAgICAgdGhpcy5kb05leHQoKTsNCiAgICB9LA0KICAgIC8v5Y+N5a+577yI5rWB6L2s77yJDQogICAgdGFza09wcG9zZVRyYW5zKCkgew0KICAgICAgdGhpcy5hY3Rpb25OYW1lID0gIm9wcG9zZVRyYW5zIjsNCiAgICAgIHRoaXMuZG9OZXh0KCk7DQogICAgfSwNCiAgICBoaWRkZW5PcGVydGlvbigpIHsNCiAgICAgIGlmICh0aGlzLiRyZWZzLmJ0blJlZ2lvbikgew0KICAgICAgICB0aGlzLiRyZWZzLmJ0blJlZ2lvbi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOw0KICAgICAgfQ0KICAgICAgdGhpcy4kcmVmcy5mb3JtQ29udGVudC5oaWRkZW5Db250ZW50KCk7DQogICAgfSwNCiAgICAvL+aYr+WQpuaYvuekuua7muWKqOadoQ0KICAgIGlzU2Nyb2xsKCkgew0KICAgICAgLy/lsY/luZXlrr3luqYNCiAgICAgIGxldCB3aW5kb3dfd2lkdGggPSAoJCh3aW5kb3cpLndpZHRoKCkpOw0KICAgICAgLy/lrqHmibnpobXpnaLlrr3luqYNCiAgICAgIGxldCBmcm9tX3cgPSAkKCJtYWluIilbMF0uY2xpZW50V2lkdGg7DQogICAgICAvL+aciea7muWKqOadoQ0KICAgICAgaWYgKHdpbmRvd193aWR0aCA+IGZyb21fdykgew0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgIH0NCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9LA0KICAgIC8v5oyC6LW3DQogICAgaGFuZ1VwKCkgew0KICAgICAgZmxvdy5mb3JiaWRkZW5JbnN0YW5jZSh0aGlzLmluc3RJZCkudGhlbihkYXRhID0+IHsNCiAgICAgICAgaWYgKGRhdGEuc3RhdGUpIHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsgdHlwZTogInN1Y2Nlc3MiLCBtZXNzYWdlOiBkYXRhLm1lc3NhZ2UgfSk7DQogICAgICAgICAgdGhpcy5jaGVja0luc3RTdGF0dXMoKTsNCiAgICAgICAgfQ0KICAgICAgfSkNCiAgICB9LA0KICAgIC8v5Y+W5raI5oyC6LW3DQogICAgY2FuY2VsSGFuZ1VwKCkgew0KICAgICAgZmxvdy51bkZvcmJpZGRlbkluc3RhbmNlKHRoaXMuaW5zdElkKS50aGVuKGRhdGEgPT4gew0KICAgICAgICBpZiAoZGF0YS5zdGF0ZSkgew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoeyB0eXBlOiAic3VjY2VzcyIsIG1lc3NhZ2U6IGRhdGEubWVzc2FnZSB9KTsNCiAgICAgICAgICB0aGlzLmNoZWNrSW5zdFN0YXR1cygoKSA9PiB7IHRoaXMuaXNIYW5nID0gZmFsc2U7IHRoaXMuZGlzYWJsZWQgPSBmYWxzZSB9KTsNCiAgICAgICAgfQ0KICAgICAgfSkNCiAgICB9LA0KICAgIC8v6Lez6L2s5Yiw5LiL5LiA5Liq5Lu75YqhDQogICAgbmV4dFRhc2soKSB7DQogICAgICBsZXQgX3RoaXM9dGhpczsNCiAgICAgIGlmIChfdGhpcy4kcm91dGUubmFtZS5pbmRleE9mKCJyZXBvcnRNb2R1bGVJbnN0IikhPS0xKSB7DQogICAgICAgIF90aGlzLiRyb3V0ZXIucHVzaCgiL3N0YXRlbWVudC90ZW1wbGF0ZS9wcmV2aWV3LyIrX3RoaXMuJHJvdXRlLnBhcmFtcy50ZW1wbGF0ZUtleSsiL3RvZG8vIitfdGhpcy4kcm91dGUucGFyYW1zLmRlZktleSsiL3RydWUiKTsNCiAgICAgIH1lbHNlew0KICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgic3RvcmVQcm9jZXNzL2dldE5leHRUYXNrQnlEZWZJZCIsIHtkZWZJZDp0aGlzLmRlZklkLGRlZktleTp0aGlzLmRlZktleX0pLnRoZW4ocmVzcCA9PiB7DQogICAgICAgICAgaWYgKHJlc3Auc3RhdGUpIHsNCiAgICAgICAgICAgIC8v6Lez6L2s5Yiw5paw55qE5b6F5Yqe6aG16Z2iDQogICAgICAgICAgICBpZiAocmVzcC52YWx1ZSkgew0KICAgICAgICAgICAgICB0aGlzLmhhbmRsZU9wZW5UYXNrKHJlc3AudmFsdWUpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7IHR5cGU6ICJzdWNjZXNzIiwgbWVzc2FnZTogIuivpea1geeoi+aJgOWxnuS7u+WKoeW3suWkhOeQhuWujOaIkCIgfSk7DQogICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyb3V0ZS5uYW1lLmluZGV4T2YoInN5c01vZHVsZUluc3QiKSE9LTEpew0KICAgICAgICAgICAgICAgICAgX3RoaXMuJHJvdXRlci5wdXNoKCIvdi1mbG93L3YtdG9kby8iICsgX3RoaXMuJHJvdXRlLnBhcmFtcy5kZWZLZXkpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgX3RoaXMuJHJvdXRlci5wdXNoKCIvdi1mbG93L3YtdG9kby8iKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0sIDEwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgICB9DQogICAgfSwNCiAgICBoYW5kbGVPcGVuVGFzayhyb3cpIHsNCiAgICAgIGlmIChyb3cuc3RhdHVzID09ICJTSEFSRSIgfHwgcm93LnN0YXR1cyA9PSAiQkFDS1NIQVJFIikgew0KICAgICAgICBpZiAocm93LmlkZW50aXR5TGlzdCAmJiByb3cuaWRlbnRpdHlMaXN0Lmxlbmd0aCA9PSAxKSB7DQogICAgICAgICAgbGV0IHVybCA9ICIvdGFzay8iICsgcm93LmlkICsgIi8iICsgcm93LmlkZW50aXR5TGlzdFswXS5pZDsNCiAgICAgICAgICB0aGlzLm9wZW5BbmRSZWxvYWQodXJsKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICBsZXQgaHRtbCA9DQogICAgICAgICAgICAiPHNlbGVjdCByZWY9IiArDQogICAgICAgICAgICBNYXRoLnJhbmRvbSgpICsNCiAgICAgICAgICAgICcgaWQ9ImFwcHJvdmFsTGVhZGVyU2VsZWN0IiBzdHlsZT0id2lkdGg6IDIwMHB4O2hlaWdodDogMzBweDtib3JkZXItcmFkaXVzOiA0cHg7bWFyZ2luOiAyMHB4IDcwcHg7IiA+PG9wdGlvbiB2YWx1ZT0iIj7or7fpgInmi6k8L29wdGlvbj4nOw0KICAgICAgICAgIHJvdy5pZGVudGl0eUxpc3QuZm9yRWFjaChpZGVudGl0eSA9PiB7DQogICAgICAgICAgICBodG1sICs9DQogICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPSInICsNCiAgICAgICAgICAgICAgaWRlbnRpdHkuaWQgKw0KICAgICAgICAgICAgICAnIj4nICsNCiAgICAgICAgICAgICAgaWRlbnRpdHkubmFtZSArDQogICAgICAgICAgICAgICI8L29wdGlvbj4iOw0KICAgICAgICAgIH0pOw0KICAgICAgICAgIGh0bWwgKz0gIjwvc2VsZWN0PiI7DQogICAgICAgICAgbGV0IHRoaXNfID0gdGhpczsNCiAgICAgICAgICB0aGlzLiRhbGVydChodG1sLCAi6K+36YCJ5oup5LiA5Liq6aKG5a+85Luj5Li65a6h5om5Iiwgew0KICAgICAgICAgICAgZGFuZ2Vyb3VzbHlVc2VIVE1MU3RyaW5nOiB0cnVlLA0KICAgICAgICAgICAgYmVmb3JlQ2xvc2U6IGZ1bmN0aW9uIChhY3Rpb24sIGluc3RhbmNlLCBkb25lKSB7DQogICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gImNvbmZpcm0iKSB7DQogICAgICAgICAgICAgICAgbGV0IHNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcHJvdmFsTGVhZGVyU2VsZWN0Iik7DQogICAgICAgICAgICAgICAgaWYgKHNlLnNlbGVjdGVkSW5kZXggPT0gMCkgew0KICAgICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fpgInmi6nku6PkuLrlrqHmibnnmoTpooblr7wiKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY2xvc2UoKTsNCiAgICAgICAgICAgICAgICAgIHRoaXNfLm9wZW5BbmRSZWxvYWQoDQogICAgICAgICAgICAgICAgICAgICIvdGFzay8iICsgcm93LmlkICsgIi8iICsgc2Vbc2Uuc2VsZWN0ZWRJbmRleF0udmFsdWUNCiAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGluc3RhbmNlLmNsb3NlKCk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgfSBlbHNlIGlmICgNCiAgICAgICAgcm93LnN0YXR1cyA9PSAiQUdFTlQiICYmDQogICAgICAgIHJvdy5vd25lcklkICE9IHJvdy5hc3NpZ25lZUlkICYmDQogICAgICAgIHJvdy5vd25lcklkID09IHRoaXMuJHN0b3JlLnN0YXRlLmxvZ2luLmN1cnJlbnRVc2VyLnVzZXJJZA0KICAgICAgKSB7DQogICAgICAgIC8v5aeU5omY5Lu75YqhDQogICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKCIvaW5zdFJlYWQvIiArIHJvdy5wcm9jSW5zdElkICsgIi9hZ2VudCIpOw0KICAgICAgfSBlbHNlIGlmIChyb3cuc3RhdHVzID09ICJGT0xMT1ciKSB7DQogICAgICAgIC8v6Lef6Liq5Lu75YqhDQogICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKCIvdGFza1JlYWQvIiArIHJvdy5pZCArICIvRk9MTE9XIik7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBsZXQgdXJsID0gIi90YXNrLyIgKyByb3cuaWQgKyAiLzAiOw0KICAgICAgICBpZiAodGhpcy4kcm91dGUubmFtZS5pbmRleE9mKCJyZXBvcnRNb2R1bGVJbnN0IikhPS0xKSB7DQogICAgICAgICAgdXJsID0gIi9yZXBvcnRNb2R1bGVJbnN0LyIgKyByb3cuaWQgKyAiLzAiICsgIi8iICsgdGhpcy4kcm91dGUucGFyYW1zLmRlZktleSArICIvdHJ1ZS8iK3RoaXMuJHJvdXRlLnRlbXBsYXRlS2V5Ow0KICAgICAgICB9ZWxzZSBpZiAodGhpcy4kcm91dGUubmFtZS5pbmRleE9mKCJzeXNNb2R1bGVJbnN0IikhPS0xKXsNCiAgICAgICAgICB1cmwgPSAiL3N5c01vZHVsZUluc3QvIiArIHJvdy5pZCArICIvMCIgKyAiLyIgKyB0aGlzLiRyb3V0ZS5wYXJhbXMuZGVmS2V5ICsgIi90cnVlIjsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLm9wZW5BbmRSZWxvYWQodXJsKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIG9wZW5BbmRSZWxvYWQodXJsKSB7DQogICAgICB0aGlzLiRyb3V0ZXIucHVzaCh1cmwpOw0KICAgICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICAgIHRoaXMuJHJvb3QuJGNoaWxkcmVuWzBdLnJlbG9hZCgpOw0KICAgICAgfSwgMTApOw0KICAgIH0NCiAgfSwNCiAgY3JlYXRlZCgpIHsNCiAgICAvL+WFvOWuueWPquaYvuekuuWuoeaJuemhtemdouaXtg0KICAgIGlmICh0aGlzLiRyb3V0ZS5tZXRhLnNpbmdsZSkgew0KICAgICAgdGhpcy5pc0RkID0gdHJ1ZTsNCiAgICB9DQoNCiAgICBpZiAodGhpcy50eXBlID09ICJkb25lIikgew0KICAgICAgdGhpcy5kYWlsb2dUaXRsZSA9ICLmkqTlm54iOw0KICAgICAgdGhpcy5pc0hhbmQgPSB0cnVlOw0KICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09ICJyZXF1ZXN0Iikgew0KICAgICAgdGhpcy5kYWlsb2dUaXRsZSA9ICLmkqTlm57liLDlj5HotbfkuroiOw0KICAgICAgdGhpcy5pc0hhbmQgPSBmYWxzZTsNCiAgICB9DQogIH0sDQp9Ow0K"},null]}